class Rouge::Lexers::YAML
def self.analyze_text(text)
def self.analyze_text(text) # look for the %YAML directive return 1 if text =~ /\A\s*%YAML/m end
def continue_indent
def continue_indent debug { " yaml: continue_indent" } @next_indent += @last_match[0].size end
def dedent?(level)
def dedent?(level) level < self.indent end
def indent
def indent raise 'empty indent stack!' if @indent_stack.empty? @indent_stack.last end
def indent?(level)
def indent?(level) level > self.indent end
def reset_indent
def reset_indent debug { " yaml: reset_indent" } @indent_stack = [0] @next_indent = 0 @block_scalar_indent = nil end
def save_indent(opts={})
def save_indent(opts={}) debug { " yaml: save_indent" } match = @last_match[0] @next_indent = match.size debug { " yaml: indent: #{self.indent}/#@next_indent" } debug { " yaml: popping indent stack - before: #@indent_stack" } if dedent?(@next_indent) @indent_stack.pop while dedent?(@next_indent) debug { " yaml: popping indent stack - after: #@indent_stack" } debug { " yaml: indent: #{self.indent}/#@next_indent" } # dedenting to a state not previously indented to is an error [match[0...self.indent], match[self.indent..-1]] else [match, ''] end end
def set_indent(opts={})
def set_indent(opts={}) if indent < @next_indent @indent_stack << @next_indent end @next_indent += @last_match[0].size unless opts[:implicit] end