lib/rouge/lexers/toml.rb
# -*- coding: utf-8 -*- # module Rouge module Lexers class TOML < RegexLexer 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