nicojensen.de/vendor/bundle/gems/rouge-3.3.0/lib/rouge/lexers/protobuf.rb
Nico Jensen b59a203dbb Init
Init commit
2019-03-12 13:49:49 +01:00

71 lines
2.1 KiB
Ruby

# -*- coding: utf-8 -*- #
# frozen_string_literal: true
module Rouge
module Lexers
class Protobuf < RegexLexer
title 'Protobuf'
desc 'Google\'s language-neutral, platform-neutral, extensible mechanism for serializing structured data'
tag 'protobuf'
aliases 'proto'
filenames '*.proto'
mimetypes 'text/x-proto'
kw = /\b(ctype|default|extensions|import|max|oneof|option|optional|packed|repeated|required|returns|rpc|to)\b/
datatype = /\b(bool|bytes|double|fixed32|fixed64|float|int32|int64|sfixed32|sfixed64|sint32|sint64|string|uint32|uint64)\b/
state :root do
rule /[\s]+/, Text
rule /[,;{}\[\]()]/, Punctuation
rule /\/(\\\n)?\/(\n|(.|\n)*?[^\\]\n)/, Comment::Single
rule /\/(\\\n)?\*(.|\n)*?\*(\\\n)?\//, Comment::Multiline
rule kw, Keyword
rule datatype, Keyword::Type
rule /true|false/, Keyword::Constant
rule /(package)(\s+)/ do
groups Keyword::Namespace, Text
push :package
end
rule /(message|extend)(\s+)/ do
groups Keyword::Declaration, Text
push :message
end
rule /(enum|group|service)(\s+)/ do
groups Keyword::Declaration, Text
push :type
end
rule /".*?"/, Str
rule /'.*?'/, Str
rule /(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*/, Num::Float
rule /(\d+\.\d*|\.\d+|\d+[fF])[fF]?/, Num::Float
rule /(\-?(inf|nan))\b/, Num::Float
rule /0x[0-9a-fA-F]+[LlUu]*/, Num::Hex
rule /0[0-7]+[LlUu]*/, Num::Oct
rule /\d+[LlUu]*/, Num::Integer
rule /[+-=]/, Operator
rule /([a-zA-Z_][\w.]*)([ \t]*)(=)/ do
groups Name::Attribute, Text, Operator
end
rule /[a-zA-Z_][\w.]*/, Name
end
state :package do
rule /[a-zA-Z_]\w*/, Name::Namespace, :pop!
rule(//) { pop! }
end
state :message do
rule /[a-zA-Z_]\w*/, Name::Class, :pop!
rule(//) { pop! }
end
state :type do
rule /[a-zA-Z_]\w*/, Name, :pop!
rule(//) { pop! }
end
end
end
end