blob: 984ade2b76d0198259b09f63ca371a04b6be55a8 [file] [log] [blame]
# -*- coding: utf-8 -*- #
module Rouge
module Lexers
class TOML < RegexLexer
title "TOML"
desc 'the TOML configuration format (https://github.com/mojombo/toml)'
tag 'toml'
filenames '*.toml'
mimetypes 'text/x-toml'
def self.analyze_text(text)
return 0.1 if text =~ /\A\[[\w.]+\]\s*\w+\s*=\s*("\w+")+/
end
identifier = /[\w.\S]+/
state :basic do
rule /\s+/, Text
rule /#.*?$/, Comment
rule /(true|false)/, Keyword::Constant
rule /(?<!=)\s*\[[\w\d\S]+\]/, Name::Namespace
rule /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z/, Literal::Date
rule /(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?/, Num::Float
rule /\d+[eE][+-]?[0-9]+j?/, Num::Float
rule /\-?\d+/, Num::Integer
end
state :root do
mixin :basic
rule /(#{identifier})(\s*)(=)/ do
groups Name::Property, Text, Punctuation
push :value
end
end
state :value do
rule /\n/, Text, :pop!
mixin :content
end
state :content do
mixin :basic
rule /"/, Str, :dq
mixin :esc_str
rule /\,/, Punctuation
rule /\[/, Punctuation, :array
end
state :dq do
rule /"/, Str, :pop!
mixin :esc_str
rule /[^\\"]+/, Str
end
state :esc_str do
rule /\\[0t\tn\n "\\ r]/, Str::Escape
end
state :array do
mixin :content
rule /\]/, Punctuation, :pop!
end
end
end
end