Sha256: beb81dbbe4982967b3c73e3b7663d0ee9fc32aba7be52af530cc71f8dd38fc27

Contents?: true

Size: 1.93 KB

Versions: 2

Compression:

Stored size: 1.93 KB

Contents

# -*- coding: utf-8 -*- #

module Rouge
  module Lexers
    class Gobstones < RegexLexer
      title 'Gobstones'
      desc 'Gobstones language'
      tag 'gobstones'
      filenames '*.gbs'

      def self.analyze_text(_text)
        0.3
      end

      reserved = %w(program interactive is return record
                    field variant case if then else switch to repeat while foreach
                    in match)

      atoms = %w(False True Verde Rojo Vermelho Azul Negro Preto Norte Sur Sul Este Leste Oeste)

      state :comments do
        def comment_between(start, finish)
          /#{start}.*?#{finish}/m
        end

        rule comment_between('{-', '-}'), Comment::Multiline
        rule comment_between('\/\*', '\*\/'), Comment::Multiline
        rule comment_between('"""', '"""'), Comment::Multiline
        rule /((?<!<)-(?!>)|#|\/).*$/, Comment::Single
      end

      state :root do
        def any(words)
          /#{words.map { |word| word.concat('\\b') }.join('|')}/
        end

        mixin :comments
        rule /\s+/, Text::Whitespace
        rule any(reserved), Keyword::Reserved
        rule any(atoms), Literal
        rule /(type)(\s+)(\w+)/ do |m|
          groups Keyword::Reserved, Text::Whitespace, Keyword::Type
        end
        mixin :functions
        mixin :symbols
        rule /\d+/, Literal::Number
        rule /".+?"/, Literal::String
      end

      state :functions do
        rule /(procedure|function)(\s+)(\w+)/ do
          groups Keyword::Reserved, Text::Whitespace, Name::Function
        end

        rule /([a-zA-Z][a-zA-Z'_0-9]*)(\()/ do |m|
          groups Name::Function, Text
        end
        rule /([a-z][a-zA-Z'_0-9]*)/, Name::Variable
      end

      state :symbols do
        rule /:=|\.\.|\+\+|\.|_|->|<-/, Operator
        rule /<=|<|>=|>|==|=/, Operator
        rule /\|\||&&|\+|\*|-|\^/, Operator
        rule /\(|\)|\{|\}/, Text
        rule /,|;|:|\||\[|\]/, Text
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mumukit-content-type-1.3.0 lib/mumukit/content_type/gobstones.rb
mumukit-content-type-1.2.0 lib/mumukit/content_type/gobstones.rb