diff --git a/lib/rouge/lexers/gdt.rb b/lib/rouge/lexers/gdt.rb new file mode 100644 index 0000000000..3cffc3ade1 --- /dev/null +++ b/lib/rouge/lexers/gdt.rb @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- # +# frozen_string_literal: true + +module Rouge + module Lexers + class GDT < RegexLexer + title 'GDT' + desc "Geräte-Daten-Träger (Device Data Carrier)" + tag 'gdt' + filenames '*.gdt' + mimetypes 'text/x-gdt' + + state :root do + rule %r/[0-9]{3}/, Text, :length + end + + state :length do + rule %r/(6227|6228)/, Keyword, :comment + rule %r/8000/, Keyword, :type + rule %r/[0-9]{4}/, Keyword, :content + rule %r/\s+/, Text::Whitespace + end + + state :content do + rule %r(.*?$), Literal, :root + end + + state :comment do + rule %r(.*?$), Comment, :root + end + + state :type do + rule %r(.*?$), Name::Class, :root + end + + state :whitespace do + rule %r/\s+/, Text::Whitespace + end + end + end +end diff --git a/spec/lexers/gdt_spec.rb b/spec/lexers/gdt_spec.rb new file mode 100644 index 0000000000..d23508c296 --- /dev/null +++ b/spec/lexers/gdt_spec.rb @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- # +# frozen_string_literal: true + +describe Rouge::Lexers::GDT do + let(:subject) { Rouge::Lexers::GDT.new } + + describe 'guessing' do + include Support::Guessing + + it 'guesses by filename' do + assert_guess :filename => 'foo.gdt' + end + + it 'guesses by mimetype' do + assert_guess :mimetype => 'text/x-gdt' + end + end +end