rouge 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +2 -0
- data/bin/rougify +1 -1
- data/lib/rouge/demos/{text → plaintext} +0 -0
- data/lib/rouge/formatters/html.rb +13 -8
- data/lib/rouge/formatters/terminal256.rb +15 -11
- data/lib/rouge/lexer.rb +3 -1
- data/lib/rouge/lexers/c.rb +65 -55
- data/lib/rouge/lexers/clojure.rb +19 -19
- data/lib/rouge/lexers/coffeescript.rb +42 -42
- data/lib/rouge/lexers/common_lisp.rb +49 -48
- data/lib/rouge/lexers/conf.rb +6 -6
- data/lib/rouge/lexers/cpp.rb +48 -48
- data/lib/rouge/lexers/csharp.rb +25 -25
- data/lib/rouge/lexers/css.rb +32 -33
- data/lib/rouge/lexers/diff.rb +8 -8
- data/lib/rouge/lexers/elixir.rb +30 -30
- data/lib/rouge/lexers/erb.rb +5 -5
- data/lib/rouge/lexers/erlang.rb +38 -38
- data/lib/rouge/lexers/factor.rb +56 -56
- data/lib/rouge/lexers/gherkin.rb +27 -27
- data/lib/rouge/lexers/go.rb +21 -21
- data/lib/rouge/lexers/groovy.rb +32 -32
- data/lib/rouge/lexers/haml.rb +35 -35
- data/lib/rouge/lexers/handlebars.rb +27 -27
- data/lib/rouge/lexers/haskell.rb +78 -79
- data/lib/rouge/lexers/html.rb +28 -28
- data/lib/rouge/lexers/http.rb +13 -13
- data/lib/rouge/lexers/ini.rb +13 -13
- data/lib/rouge/lexers/io.rb +19 -19
- data/lib/rouge/lexers/java.rb +29 -29
- data/lib/rouge/lexers/javascript.rb +49 -52
- data/lib/rouge/lexers/literate_haskell.rb +5 -5
- data/lib/rouge/lexers/llvm.rb +14 -14
- data/lib/rouge/lexers/lua.rb +33 -33
- data/lib/rouge/lexers/make.rb +26 -26
- data/lib/rouge/lexers/markdown.rb +49 -49
- data/lib/rouge/lexers/nginx.rb +19 -19
- data/lib/rouge/lexers/perl.rb +53 -54
- data/lib/rouge/lexers/php.rb +42 -43
- data/lib/rouge/lexers/{text.rb → plain_text.rb} +3 -2
- data/lib/rouge/lexers/prolog.rb +19 -19
- data/lib/rouge/lexers/puppet.rb +40 -40
- data/lib/rouge/lexers/python.rb +63 -63
- data/lib/rouge/lexers/r.rb +15 -15
- data/lib/rouge/lexers/racket.rb +29 -29
- data/lib/rouge/lexers/ruby.rb +94 -97
- data/lib/rouge/lexers/rust.rb +37 -37
- data/lib/rouge/lexers/sass.rb +15 -15
- data/lib/rouge/lexers/sass/common.rb +144 -136
- data/lib/rouge/lexers/scheme.rb +25 -25
- data/lib/rouge/lexers/scss.rb +7 -7
- data/lib/rouge/lexers/sed.rb +39 -39
- data/lib/rouge/lexers/shell.rb +45 -45
- data/lib/rouge/lexers/smalltalk.rb +36 -36
- data/lib/rouge/lexers/sql.rb +27 -27
- data/lib/rouge/lexers/tcl.rb +34 -34
- data/lib/rouge/lexers/tex.rb +24 -24
- data/lib/rouge/lexers/toml.rb +18 -18
- data/lib/rouge/lexers/viml.rb +19 -19
- data/lib/rouge/lexers/xml.rb +16 -16
- data/lib/rouge/lexers/yaml.rb +78 -81
- data/lib/rouge/plugins/redcarpet.rb +1 -1
- data/lib/rouge/regex_lexer.rb +31 -14
- data/lib/rouge/template_lexer.rb +1 -1
- data/lib/rouge/theme.rb +12 -10
- data/lib/rouge/themes/thankful_eyes.rb +43 -43
- data/lib/rouge/token.rb +145 -148
- data/lib/rouge/version.rb +1 -1
- metadata +4 -4
    
        data/lib/rouge/lexers/scheme.rb
    CHANGED
    
    | @@ -57,47 +57,47 @@ module Rouge | |
| 57 57 |  | 
| 58 58 | 
             
                  state :root do
         | 
| 59 59 | 
             
                    # comments
         | 
| 60 | 
            -
                    rule /;.*$/,  | 
| 61 | 
            -
                    rule /\s+/m,  | 
| 62 | 
            -
                    rule /-?\d+\.\d+/,  | 
| 63 | 
            -
                    rule /-?\d+/,  | 
| 60 | 
            +
                    rule /;.*$/, Comment::Single
         | 
| 61 | 
            +
                    rule /\s+/m, Text
         | 
| 62 | 
            +
                    rule /-?\d+\.\d+/, Num::Float
         | 
| 63 | 
            +
                    rule /-?\d+/, Num::Integer
         | 
| 64 64 |  | 
| 65 65 | 
             
                    # Racket infinitites
         | 
| 66 | 
            -
                    rule /[+-]inf[.][f0]/,  | 
| 66 | 
            +
                    rule /[+-]inf[.][f0]/, Num
         | 
| 67 67 |  | 
| 68 | 
            -
                    rule /#b[01]+/,  | 
| 69 | 
            -
                    rule /#o[0-7]+/,  | 
| 70 | 
            -
                    rule /#d[0-9]+/,  | 
| 71 | 
            -
                    rule /#x[0-9a-f]+/i,  | 
| 72 | 
            -
                    rule /#[ei][\d.]+/,  | 
| 68 | 
            +
                    rule /#b[01]+/, Num::Bin
         | 
| 69 | 
            +
                    rule /#o[0-7]+/, Num::Oct
         | 
| 70 | 
            +
                    rule /#d[0-9]+/, Num::Integer
         | 
| 71 | 
            +
                    rule /#x[0-9a-f]+/i, Num::Hex
         | 
| 72 | 
            +
                    rule /#[ei][\d.]+/, Num::Other
         | 
| 73 73 |  | 
| 74 | 
            -
                    rule /"(\\\\|\\"|[^"])*"/,  | 
| 75 | 
            -
                    rule /'#{id}/i,  | 
| 74 | 
            +
                    rule /"(\\\\|\\"|[^"])*"/, Str
         | 
| 75 | 
            +
                    rule /'#{id}/i, Str::Symbol
         | 
| 76 76 | 
             
                    rule /#\\([()\/'"._!\$%& ?=+-]{1}|[a-z0-9]+)/i,
         | 
| 77 | 
            -
                       | 
| 78 | 
            -
                    rule /#t|#f/,  | 
| 79 | 
            -
                    rule /(?:'|#|`|,@|,|\.)/,  | 
| 77 | 
            +
                      Str::Char
         | 
| 78 | 
            +
                    rule /#t|#f/, Name::Constant
         | 
| 79 | 
            +
                    rule /(?:'|#|`|,@|,|\.)/, Operator
         | 
| 80 80 |  | 
| 81 81 | 
             
                    rule /(['#])(\s*)(\()/m do
         | 
| 82 | 
            -
                      group  | 
| 83 | 
            -
                      group  | 
| 84 | 
            -
                      group  | 
| 82 | 
            +
                      group Str::Symbol
         | 
| 83 | 
            +
                      group Text
         | 
| 84 | 
            +
                      group Punctuation
         | 
| 85 85 | 
             
                    end
         | 
| 86 86 |  | 
| 87 | 
            -
                    rule /\(/,  | 
| 88 | 
            -
                    rule /\)/,  | 
| 87 | 
            +
                    rule /\(/, Punctuation, :command
         | 
| 88 | 
            +
                    rule /\)/, Punctuation
         | 
| 89 89 |  | 
| 90 | 
            -
                    rule id,  | 
| 90 | 
            +
                    rule id, Name::Variable
         | 
| 91 91 | 
             
                  end
         | 
| 92 92 |  | 
| 93 93 | 
             
                  state :command do
         | 
| 94 | 
            -
                    rule id,  | 
| 94 | 
            +
                    rule id, Name::Function do |m|
         | 
| 95 95 | 
             
                      if self.class.keywords.include? m[0]
         | 
| 96 | 
            -
                        token  | 
| 96 | 
            +
                        token Keyword
         | 
| 97 97 | 
             
                      elsif self.class.builtins.include? m[0]
         | 
| 98 | 
            -
                        token  | 
| 98 | 
            +
                        token Name::Builtin
         | 
| 99 99 | 
             
                      else
         | 
| 100 | 
            -
                        token  | 
| 100 | 
            +
                        token Name::Function
         | 
| 101 101 | 
             
                      end
         | 
| 102 102 |  | 
| 103 103 | 
             
                      pop!
         | 
    
        data/lib/rouge/lexers/scss.rb
    CHANGED
    
    | @@ -9,10 +9,10 @@ module Rouge | |
| 9 9 | 
             
                  mimetypes 'text/x-scss'
         | 
| 10 10 |  | 
| 11 11 | 
             
                  state :root do
         | 
| 12 | 
            -
                    rule /\s+/,  | 
| 13 | 
            -
                    rule %r(//.*?\n),  | 
| 14 | 
            -
                    rule %r(/[*].*?[*]/)m,  | 
| 15 | 
            -
                    rule /@import\b/,  | 
| 12 | 
            +
                    rule /\s+/, Text
         | 
| 13 | 
            +
                    rule %r(//.*?\n), Comment::Single
         | 
| 14 | 
            +
                    rule %r(/[*].*?[*]/)m, Comment::Multiline
         | 
| 15 | 
            +
                    rule /@import\b/, Keyword, :value
         | 
| 16 16 |  | 
| 17 17 | 
             
                    mixin :content_common
         | 
| 18 18 |  | 
| @@ -23,11 +23,11 @@ module Rouge | |
| 23 23 | 
             
                  end
         | 
| 24 24 |  | 
| 25 25 | 
             
                  state :end_section do
         | 
| 26 | 
            -
                    rule /\n/,  | 
| 27 | 
            -
                    rule(/[;{}]/) { token  | 
| 26 | 
            +
                    rule /\n/, Text
         | 
| 27 | 
            +
                    rule(/[;{}]/) { token Punctuation; reset_stack }
         | 
| 28 28 | 
             
                  end
         | 
| 29 29 |  | 
| 30 | 
            -
                   | 
| 30 | 
            +
                  include SassCommon
         | 
| 31 31 | 
             
                end
         | 
| 32 32 | 
             
              end
         | 
| 33 33 | 
             
            end
         | 
    
        data/lib/rouge/lexers/sed.rb
    CHANGED
    
    | @@ -13,33 +13,33 @@ module Rouge | |
| 13 13 |  | 
| 14 14 | 
             
                  class Regex < RegexLexer
         | 
| 15 15 | 
             
                    state :root do
         | 
| 16 | 
            -
                      rule /\\./,  | 
| 17 | 
            -
                      rule /\[/,  | 
| 18 | 
            -
                      rule /[$^.*]/,  | 
| 19 | 
            -
                      rule /[()]/,  | 
| 20 | 
            -
                      rule /./,  | 
| 16 | 
            +
                      rule /\\./, Str::Escape
         | 
| 17 | 
            +
                      rule /\[/, Punctuation, :brackets
         | 
| 18 | 
            +
                      rule /[$^.*]/, Operator
         | 
| 19 | 
            +
                      rule /[()]/, Punctuation
         | 
| 20 | 
            +
                      rule /./, Str::Regex
         | 
| 21 21 | 
             
                    end
         | 
| 22 22 |  | 
| 23 23 | 
             
                    state :brackets do
         | 
| 24 24 | 
             
                      rule /\^?/ do
         | 
| 25 | 
            -
                        token  | 
| 26 | 
            -
                         | 
| 25 | 
            +
                        token Punctuation
         | 
| 26 | 
            +
                        goto :brackets_int
         | 
| 27 27 | 
             
                      end
         | 
| 28 28 | 
             
                    end
         | 
| 29 29 |  | 
| 30 30 | 
             
                    state :brackets_int do
         | 
| 31 31 | 
             
                      # ranges
         | 
| 32 | 
            -
                      rule /.-./,  | 
| 33 | 
            -
                      rule /\]/,  | 
| 34 | 
            -
                      rule /./,  | 
| 32 | 
            +
                      rule /.-./, Name::Variable
         | 
| 33 | 
            +
                      rule /\]/, Punctuation, :pop!
         | 
| 34 | 
            +
                      rule /./, Str::Regex
         | 
| 35 35 | 
             
                    end
         | 
| 36 36 | 
             
                  end
         | 
| 37 37 |  | 
| 38 38 | 
             
                  class Replacement < RegexLexer
         | 
| 39 39 | 
             
                    state :root do
         | 
| 40 | 
            -
                      rule /\\./m,  | 
| 41 | 
            -
                      rule /&/,  | 
| 42 | 
            -
                      rule /[^\\&]+/m,  | 
| 40 | 
            +
                      rule /\\./m, Str::Escape
         | 
| 41 | 
            +
                      rule /&/, Operator
         | 
| 42 | 
            +
                      rule /[^\\&]+/m, Text
         | 
| 43 43 | 
             
                    end
         | 
| 44 44 | 
             
                  end
         | 
| 45 45 |  | 
| @@ -54,10 +54,10 @@ module Rouge | |
| 54 54 | 
             
                  start { regex.reset!; replacement.reset! }
         | 
| 55 55 |  | 
| 56 56 | 
             
                  state :whitespace do
         | 
| 57 | 
            -
                    rule /\s+/m,  | 
| 58 | 
            -
                    rule(/#.*?\n/) { token  | 
| 59 | 
            -
                    rule(/\n/) { token  | 
| 60 | 
            -
                    rule(/;/) { token  | 
| 57 | 
            +
                    rule /\s+/m, Text
         | 
| 58 | 
            +
                    rule(/#.*?\n/) { token Comment; reset_stack }
         | 
| 59 | 
            +
                    rule(/\n/) { token Text; reset_stack }
         | 
| 60 | 
            +
                    rule(/;/) { token Punctuation; reset_stack }
         | 
| 61 61 | 
             
                  end
         | 
| 62 62 |  | 
| 63 63 | 
             
                  state :root do
         | 
| @@ -71,53 +71,53 @@ module Rouge | |
| 71 71 |  | 
| 72 72 | 
             
                    # subst and transliteration
         | 
| 73 73 | 
             
                    rule /(s)(.)(#{edot}*?)(\2)(#{edot}*?)(\2)/m do |m|
         | 
| 74 | 
            -
                      token  | 
| 75 | 
            -
                      token  | 
| 74 | 
            +
                      token Keyword, m[1]
         | 
| 75 | 
            +
                      token Punctuation, m[2]
         | 
| 76 76 | 
             
                      delegate regex, m[3]
         | 
| 77 | 
            -
                      token  | 
| 77 | 
            +
                      token Punctuation, m[4]
         | 
| 78 78 | 
             
                      delegate replacement, m[5]
         | 
| 79 | 
            -
                      token  | 
| 79 | 
            +
                      token Punctuation, m[6]
         | 
| 80 80 |  | 
| 81 81 |  | 
| 82 | 
            -
                       | 
| 82 | 
            +
                      goto :flags
         | 
| 83 83 | 
             
                    end
         | 
| 84 84 |  | 
| 85 85 | 
             
                    rule /(y)(.)(#{edot}*?)(\2)(#{edot}*?)(\2)/m do |m|
         | 
| 86 | 
            -
                      token  | 
| 87 | 
            -
                      token  | 
| 86 | 
            +
                      token Keyword, m[1]
         | 
| 87 | 
            +
                      token Punctuation, m[2]
         | 
| 88 88 | 
             
                      delegate replacement, m[3]
         | 
| 89 | 
            -
                      token  | 
| 89 | 
            +
                      token Punctuation, m[4]
         | 
| 90 90 | 
             
                      delegate replacement, m[5]
         | 
| 91 | 
            -
                      token  | 
| 91 | 
            +
                      token Punctuation, m[6]
         | 
| 92 92 |  | 
| 93 93 | 
             
                      pop!
         | 
| 94 94 | 
             
                    end
         | 
| 95 95 |  | 
| 96 96 | 
             
                    # commands that take a text segment as an argument
         | 
| 97 97 | 
             
                    rule /([aic])(\s*)/ do
         | 
| 98 | 
            -
                      group  | 
| 98 | 
            +
                      group Keyword; group Text; goto :text
         | 
| 99 99 | 
             
                    end
         | 
| 100 100 |  | 
| 101 | 
            -
                    rule /[pd]/,  | 
| 101 | 
            +
                    rule /[pd]/, Keyword
         | 
| 102 102 |  | 
| 103 103 | 
             
                    # commands that take a number argument
         | 
| 104 104 | 
             
                    rule /([qQl])(\s+)(\d+)/i do
         | 
| 105 | 
            -
                      group  | 
| 105 | 
            +
                      group Keyword; group Text; group Num
         | 
| 106 106 | 
             
                      pop!
         | 
| 107 107 | 
             
                    end
         | 
| 108 108 |  | 
| 109 109 | 
             
                    # no-argument commands
         | 
| 110 | 
            -
                    rule /[={}dDgGhHlnpPqx]/,  | 
| 110 | 
            +
                    rule /[={}dDgGhHlnpPqx]/, Keyword, :pop!
         | 
| 111 111 |  | 
| 112 112 | 
             
                    # commands that take a filename argument
         | 
| 113 113 | 
             
                    rule /([rRwW])(\s+)(\S+)/ do
         | 
| 114 | 
            -
                      group  | 
| 114 | 
            +
                      group Keyword; group Text; group Name
         | 
| 115 115 | 
             
                      pop!
         | 
| 116 116 | 
             
                    end
         | 
| 117 117 |  | 
| 118 118 | 
             
                    # commands that take a label argument
         | 
| 119 119 | 
             
                    rule /([:btT])(\s+)(\S+)/ do
         | 
| 120 | 
            -
                      group  | 
| 120 | 
            +
                      group Keyword; group Text; group Name::Label
         | 
| 121 121 | 
             
                      pop!
         | 
| 122 122 | 
             
                    end
         | 
| 123 123 | 
             
                  end
         | 
| @@ -126,7 +126,7 @@ module Rouge | |
| 126 126 | 
             
                    mixin :whitespace
         | 
| 127 127 |  | 
| 128 128 | 
             
                    ### address ranges ###
         | 
| 129 | 
            -
                    addr_tok =  | 
| 129 | 
            +
                    addr_tok = Keyword::Namespace
         | 
| 130 130 | 
             
                    rule /\d+/, addr_tok
         | 
| 131 131 | 
             
                    rule /[$,~+!]/, addr_tok
         | 
| 132 132 |  | 
| @@ -145,19 +145,19 @@ module Rouge | |
| 145 145 | 
             
                  end
         | 
| 146 146 |  | 
| 147 147 | 
             
                  state :text do
         | 
| 148 | 
            -
                    rule /[^\\\n]+/,  | 
| 149 | 
            -
                    rule /\\\n/,  | 
| 150 | 
            -
                    rule /\\/,  | 
| 151 | 
            -
                    rule /\n/,  | 
| 148 | 
            +
                    rule /[^\\\n]+/, Str
         | 
| 149 | 
            +
                    rule /\\\n/, Str::Escape
         | 
| 150 | 
            +
                    rule /\\/, Str
         | 
| 151 | 
            +
                    rule /\n/, Text, :pop!
         | 
| 152 152 | 
             
                  end
         | 
| 153 153 |  | 
| 154 154 | 
             
                  state :flags do
         | 
| 155 | 
            -
                    rule /[gp]+/,  | 
| 155 | 
            +
                    rule /[gp]+/, Keyword, :pop!
         | 
| 156 156 |  | 
| 157 157 | 
             
                    # writing to a file with the subst command.
         | 
| 158 158 | 
             
                    # who'da thunk...?
         | 
| 159 159 | 
             
                    rule /([wW])(\s+)(\S+)/ do
         | 
| 160 | 
            -
                      token  | 
| 160 | 
            +
                      token Keyword; token Text; token Name
         | 
| 161 161 | 
             
                    end
         | 
| 162 162 |  | 
| 163 163 | 
             
                    rule(//) { pop! }
         | 
    
        data/lib/rouge/lexers/shell.rb
    CHANGED
    
    | @@ -29,27 +29,27 @@ module Rouge | |
| 29 29 | 
             
                  ).join('|')
         | 
| 30 30 |  | 
| 31 31 | 
             
                  state :basic do
         | 
| 32 | 
            -
                    rule /#.*$/,  | 
| 32 | 
            +
                    rule /#.*$/, Comment
         | 
| 33 33 |  | 
| 34 | 
            -
                    rule /\b(#{KEYWORDS})\s*\b/,  | 
| 35 | 
            -
                    rule /\bcase\b/,  | 
| 34 | 
            +
                    rule /\b(#{KEYWORDS})\s*\b/, Keyword
         | 
| 35 | 
            +
                    rule /\bcase\b/, Keyword, :case
         | 
| 36 36 |  | 
| 37 | 
            -
                    rule /\b(#{BUILTINS})\s*\b(?!\.)/,  | 
| 37 | 
            +
                    rule /\b(#{BUILTINS})\s*\b(?!\.)/, Name::Builtin
         | 
| 38 38 |  | 
| 39 | 
            -
                    rule /^\S*[\$%>#] +/,  | 
| 39 | 
            +
                    rule /^\S*[\$%>#] +/, Generic::Prompt
         | 
| 40 40 |  | 
| 41 41 | 
             
                    rule /(\b\w+)(=)/ do |m|
         | 
| 42 | 
            -
                      group  | 
| 43 | 
            -
                      group  | 
| 42 | 
            +
                      group Name::Variable
         | 
| 43 | 
            +
                      group Operator
         | 
| 44 44 | 
             
                    end
         | 
| 45 45 |  | 
| 46 | 
            -
                    rule /[\[\]{}()=]/,  | 
| 47 | 
            -
                    rule /&&|\|\|/,  | 
| 48 | 
            -
                    # rule /\|\|/,  | 
| 46 | 
            +
                    rule /[\[\]{}()=]/, Operator
         | 
| 47 | 
            +
                    rule /&&|\|\|/, Operator
         | 
| 48 | 
            +
                    # rule /\|\|/, Operator
         | 
| 49 49 |  | 
| 50 | 
            -
                    rule /<<</,  | 
| 50 | 
            +
                    rule /<<</, Operator # here-string
         | 
| 51 51 | 
             
                    rule /<<-?\s*(\'?)\\?(\w+)\1/ do |m|
         | 
| 52 | 
            -
                      lsh =  | 
| 52 | 
            +
                      lsh = Str::Heredoc
         | 
| 53 53 | 
             
                      token lsh
         | 
| 54 54 | 
             
                      heredocstr = Regexp.escape(m[2])
         | 
| 55 55 |  | 
| @@ -63,82 +63,82 @@ module Rouge | |
| 63 63 | 
             
                  state :double_quotes do
         | 
| 64 64 | 
             
                    # NB: "abc$" is literally the string abc$.
         | 
| 65 65 | 
             
                    # Here we prevent :interp from interpreting $" as a variable.
         | 
| 66 | 
            -
                    rule /(?:\$#?)?"/,  | 
| 66 | 
            +
                    rule /(?:\$#?)?"/, Str::Double, :pop!
         | 
| 67 67 | 
             
                    mixin :interp
         | 
| 68 | 
            -
                    rule /[^"`\\$]+/,  | 
| 68 | 
            +
                    rule /[^"`\\$]+/, Str::Double
         | 
| 69 69 | 
             
                  end
         | 
| 70 70 |  | 
| 71 71 | 
             
                  state :single_quotes do
         | 
| 72 | 
            -
                    rule /'/,  | 
| 73 | 
            -
                    rule /[^']+/,  | 
| 72 | 
            +
                    rule /'/, Str::Single, :pop!
         | 
| 73 | 
            +
                    rule /[^']+/, Str::Single
         | 
| 74 74 | 
             
                  end
         | 
| 75 75 |  | 
| 76 76 | 
             
                  state :data do
         | 
| 77 | 
            -
                    rule /\s+/,  | 
| 78 | 
            -
                    rule /\\./,  | 
| 79 | 
            -
                    rule /\$?"/,  | 
| 77 | 
            +
                    rule /\s+/, Text
         | 
| 78 | 
            +
                    rule /\\./, Str::Escape
         | 
| 79 | 
            +
                    rule /\$?"/, Str::Double, :double_quotes
         | 
| 80 80 |  | 
| 81 81 | 
             
                    # single quotes are much easier than double quotes - we can
         | 
| 82 82 | 
             
                    # literally just scan until the next single quote.
         | 
| 83 83 | 
             
                    # POSIX: Enclosing characters in single-quotes ( '' )
         | 
| 84 84 | 
             
                    # shall preserve the literal value of each character within the
         | 
| 85 85 | 
             
                    # single-quotes. A single-quote cannot occur within single-quotes.
         | 
| 86 | 
            -
                    rule /$?'/,  | 
| 86 | 
            +
                    rule /$?'/, Str::Single, :single_quotes
         | 
| 87 87 |  | 
| 88 | 
            -
                    rule /\*/,  | 
| 88 | 
            +
                    rule /\*/, Keyword
         | 
| 89 89 |  | 
| 90 | 
            -
                    rule /;/,  | 
| 91 | 
            -
                    rule /[^=\*\s{}()$" | 
| 92 | 
            -
                    rule /\d+(?= |\Z)/,  | 
| 93 | 
            -
                    rule /</,  | 
| 90 | 
            +
                    rule /;/, Text
         | 
| 91 | 
            +
                    rule /[^=\*\s{}()$"'`\\<]+/, Text
         | 
| 92 | 
            +
                    rule /\d+(?= |\Z)/, Num
         | 
| 93 | 
            +
                    rule /</, Text
         | 
| 94 94 | 
             
                    mixin :interp
         | 
| 95 95 | 
             
                  end
         | 
| 96 96 |  | 
| 97 97 | 
             
                  state :curly do
         | 
| 98 | 
            -
                    rule /}/,  | 
| 99 | 
            -
                    rule /:-/,  | 
| 100 | 
            -
                    rule /[a-zA-Z0-9_]+/,  | 
| 101 | 
            -
                    rule /[^}:"' | 
| 98 | 
            +
                    rule /}/, Keyword, :pop!
         | 
| 99 | 
            +
                    rule /:-/, Keyword
         | 
| 100 | 
            +
                    rule /[a-zA-Z0-9_]+/, Name::Variable
         | 
| 101 | 
            +
                    rule /[^}:"`'$]+/, Punctuation
         | 
| 102 102 | 
             
                    mixin :root
         | 
| 103 103 | 
             
                  end
         | 
| 104 104 |  | 
| 105 105 | 
             
                  state :paren do
         | 
| 106 | 
            -
                    rule /\)/,  | 
| 106 | 
            +
                    rule /\)/, Keyword, :pop!
         | 
| 107 107 | 
             
                    mixin :root
         | 
| 108 108 | 
             
                  end
         | 
| 109 109 |  | 
| 110 110 | 
             
                  state :math do
         | 
| 111 | 
            -
                    rule /\)\)/,  | 
| 112 | 
            -
                    rule %r([-+*/%^|&]|\*\*|\|\|),  | 
| 113 | 
            -
                    rule /\d+/,  | 
| 111 | 
            +
                    rule /\)\)/, Keyword, :pop!
         | 
| 112 | 
            +
                    rule %r([-+*/%^|&]|\*\*|\|\|), Operator
         | 
| 113 | 
            +
                    rule /\d+/, Num
         | 
| 114 114 | 
             
                    mixin :root
         | 
| 115 115 | 
             
                  end
         | 
| 116 116 |  | 
| 117 117 | 
             
                  state :case do
         | 
| 118 | 
            -
                    rule /\besac\b/,  | 
| 119 | 
            -
                    rule /\|/,  | 
| 120 | 
            -
                    rule /\)/,  | 
| 118 | 
            +
                    rule /\besac\b/, Keyword, :pop!
         | 
| 119 | 
            +
                    rule /\|/, Punctuation
         | 
| 120 | 
            +
                    rule /\)/, Punctuation, :case_stanza
         | 
| 121 121 | 
             
                    mixin :root
         | 
| 122 122 | 
             
                  end
         | 
| 123 123 |  | 
| 124 124 | 
             
                  state :case_stanza do
         | 
| 125 | 
            -
                    rule /;;/,  | 
| 125 | 
            +
                    rule /;;/, Punctuation, :pop!
         | 
| 126 126 | 
             
                    mixin :root
         | 
| 127 127 | 
             
                  end
         | 
| 128 128 |  | 
| 129 129 | 
             
                  state :backticks do
         | 
| 130 | 
            -
                    rule /`/,  | 
| 130 | 
            +
                    rule /`/, Str::Backtick, :pop!
         | 
| 131 131 | 
             
                    mixin :root
         | 
| 132 132 | 
             
                  end
         | 
| 133 133 |  | 
| 134 134 | 
             
                  state :interp do
         | 
| 135 | 
            -
                    rule /\\$/,  | 
| 136 | 
            -
                    rule /\\./,  | 
| 137 | 
            -
                    rule /\$\(\(/,  | 
| 138 | 
            -
                    rule /\$\(/,  | 
| 139 | 
            -
                    rule /\${#?/,  | 
| 140 | 
            -
                    rule /`/,  | 
| 141 | 
            -
                    rule /\$#?(\w+|.)/,  | 
| 135 | 
            +
                    rule /\\$/, Str::Escape # line continuation
         | 
| 136 | 
            +
                    rule /\\./, Str::Escape
         | 
| 137 | 
            +
                    rule /\$\(\(/, Keyword, :math
         | 
| 138 | 
            +
                    rule /\$\(/, Keyword, :paren
         | 
| 139 | 
            +
                    rule /\${#?/, Keyword, :curly
         | 
| 140 | 
            +
                    rule /`/, Str::Backtick, :backticks
         | 
| 141 | 
            +
                    rule /\$#?(\w+|.)/, Name::Variable
         | 
| 142 142 | 
             
                  end
         | 
| 143 143 |  | 
| 144 144 | 
             
                  state :root do
         | 
| @@ -12,101 +12,101 @@ module Rouge | |
| 12 12 |  | 
| 13 13 | 
             
                  state :root do
         | 
| 14 14 | 
             
                    rule /(<)(\w+:)(.*?)(>)/ do
         | 
| 15 | 
            -
                      group  | 
| 15 | 
            +
                      group Punctuation; group Keyword; group Text; group Punctuation
         | 
| 16 16 | 
             
                    end
         | 
| 17 17 |  | 
| 18 18 | 
             
                    # mixin :squeak_fileout
         | 
| 19 19 | 
             
                    mixin :whitespaces
         | 
| 20 20 | 
             
                    mixin :method_definition
         | 
| 21 21 | 
             
                    rule /([|])([\w\s]*)([|])/ do
         | 
| 22 | 
            -
                      group  | 
| 22 | 
            +
                      group Punctuation; group Name::Variable; group Punctuation
         | 
| 23 23 | 
             
                    end
         | 
| 24 24 | 
             
                    mixin :objects
         | 
| 25 | 
            -
                    rule /\^|:=|_/,  | 
| 25 | 
            +
                    rule /\^|:=|_/, Operator
         | 
| 26 26 |  | 
| 27 | 
            -
                    rule /[)}\]]/,  | 
| 28 | 
            -
                    rule /[({\[!]/,  | 
| 27 | 
            +
                    rule /[)}\]]/, Punctuation, :after_object
         | 
| 28 | 
            +
                    rule /[({\[!]/, Punctuation
         | 
| 29 29 | 
             
                  end
         | 
| 30 30 |  | 
| 31 31 | 
             
                  state :method_definition do
         | 
| 32 32 | 
             
                    rule /([a-z]\w*:)(\s*)(\w+)/i do
         | 
| 33 | 
            -
                      group  | 
| 33 | 
            +
                      group Name::Function; group Text; group Name::Variable
         | 
| 34 34 | 
             
                    end
         | 
| 35 35 |  | 
| 36 36 | 
             
                    rule /^(\s*)(\b[a-z]\w*\b)(\s*)$/i do
         | 
| 37 | 
            -
                      group  | 
| 37 | 
            +
                      group Text; group Name::Function; group Text
         | 
| 38 38 | 
             
                    end
         | 
| 39 39 |  | 
| 40 40 | 
             
                    rule %r(^(\s*)(#{ops}+)(\s*)(\w+)(\s*)$) do
         | 
| 41 | 
            -
                      group  | 
| 42 | 
            -
                      group  | 
| 41 | 
            +
                      group Text; group Name::Function;
         | 
| 42 | 
            +
                      group Text; group Name::Variable; group Text;
         | 
| 43 43 | 
             
                    end
         | 
| 44 44 | 
             
                  end
         | 
| 45 45 |  | 
| 46 46 | 
             
                  state :block_variables do
         | 
| 47 47 | 
             
                    mixin :whitespaces
         | 
| 48 48 | 
             
                    rule /(:)(\s*)(\w+)/ do
         | 
| 49 | 
            -
                      group  | 
| 49 | 
            +
                      group Operator; group Text; group Name::Variable
         | 
| 50 50 | 
             
                    end
         | 
| 51 51 |  | 
| 52 | 
            -
                    rule /[|]/,  | 
| 52 | 
            +
                    rule /[|]/, Punctuation, :pop!
         | 
| 53 53 |  | 
| 54 54 | 
             
                    rule(//) { pop! }
         | 
| 55 55 | 
             
                  end
         | 
| 56 56 |  | 
| 57 57 | 
             
                  state :literals do
         | 
| 58 | 
            -
                    rule /'(''|.)*?'/m,  | 
| 59 | 
            -
                    rule /[$]./,  | 
| 60 | 
            -
                    rule /#[(]/,  | 
| 58 | 
            +
                    rule /'(''|.)*?'/m, Str, :after_object
         | 
| 59 | 
            +
                    rule /[$]./, Str::Char, :after_object
         | 
| 60 | 
            +
                    rule /#[(]/, Str::Symbol, :parenth
         | 
| 61 61 | 
             
                    rule /(\d+r)?-?\d+(\.\d+)?(e-?\d+)?/,
         | 
| 62 | 
            -
                       | 
| 62 | 
            +
                      Num, :after_object
         | 
| 63 63 | 
             
                    rule /#("[^"]*"|#{ops}+|[\w:]+)/,
         | 
| 64 | 
            -
                       | 
| 64 | 
            +
                      Str::Symbol, :after_object
         | 
| 65 65 | 
             
                  end
         | 
| 66 66 |  | 
| 67 67 | 
             
                  state :parenth do
         | 
| 68 68 | 
             
                    rule /[)]/ do
         | 
| 69 | 
            -
                      token  | 
| 70 | 
            -
                       | 
| 69 | 
            +
                      token Str::Symbol
         | 
| 70 | 
            +
                      goto :after_object
         | 
| 71 71 | 
             
                    end
         | 
| 72 72 |  | 
| 73 73 | 
             
                    mixin :inner_parenth
         | 
| 74 74 | 
             
                  end
         | 
| 75 75 |  | 
| 76 76 | 
             
                  state :inner_parenth do
         | 
| 77 | 
            -
                    rule /#[(]/,  | 
| 78 | 
            -
                    rule /[)]/,  | 
| 77 | 
            +
                    rule /#[(]/, Str::Symbol, :inner_parenth
         | 
| 78 | 
            +
                    rule /[)]/, Str::Symbol, :pop!
         | 
| 79 79 | 
             
                    mixin :whitespaces
         | 
| 80 80 | 
             
                    mixin :literals
         | 
| 81 | 
            -
                    rule /(#{ops}|[\w:])+/,  | 
| 81 | 
            +
                    rule /(#{ops}|[\w:])+/, Str::Symbol
         | 
| 82 82 | 
             
                  end
         | 
| 83 83 |  | 
| 84 84 | 
             
                  state :whitespaces do
         | 
| 85 | 
            -
                    rule /! !$/,  | 
| 86 | 
            -
                    rule /\s+/m,  | 
| 87 | 
            -
                    rule /".*?"/m,  | 
| 85 | 
            +
                    rule /! !$/, Keyword # squeak chunk delimiter
         | 
| 86 | 
            +
                    rule /\s+/m, Text
         | 
| 87 | 
            +
                    rule /".*?"/m, Comment
         | 
| 88 88 | 
             
                  end
         | 
| 89 89 |  | 
| 90 90 | 
             
                  state :objects do
         | 
| 91 | 
            -
                    rule /\[/,  | 
| 91 | 
            +
                    rule /\[/, Punctuation, :block_variables
         | 
| 92 92 | 
             
                    rule /(self|super|true|false|nil|thisContext)\b/,
         | 
| 93 | 
            -
                       | 
| 94 | 
            -
                    rule /[A-Z]\w*(?!:)\b/,  | 
| 95 | 
            -
                    rule /[a-z]\w*(?!:)\b/,  | 
| 93 | 
            +
                      Name::Builtin::Pseudo, :after_object
         | 
| 94 | 
            +
                    rule /[A-Z]\w*(?!:)\b/, Name::Class, :after_object
         | 
| 95 | 
            +
                    rule /[a-z]\w*(?!:)\b/, Name::Variable, :after_object
         | 
| 96 96 | 
             
                    mixin :literals
         | 
| 97 97 | 
             
                  end
         | 
| 98 98 |  | 
| 99 99 | 
             
                  state :after_object do
         | 
| 100 100 | 
             
                    mixin :whitespaces
         | 
| 101 101 | 
             
                    rule /(ifTrue|ifFalse|whileTrue|whileFalse|timesRepeat):/,
         | 
| 102 | 
            -
                       | 
| 103 | 
            -
                    rule /new(?!:)\b/,  | 
| 104 | 
            -
                    rule /:=|_/,  | 
| 105 | 
            -
                    rule /[a-z]+\w*:/i,  | 
| 106 | 
            -
                    rule /[a-z]+\w*/i,  | 
| 107 | 
            -
                    rule /#{ops}+/,  | 
| 108 | 
            -
                    rule /[.]/,  | 
| 109 | 
            -
                    rule /;/,  | 
| 102 | 
            +
                      Name::Builtin, :pop!
         | 
| 103 | 
            +
                    rule /new(?!:)\b/, Name::Builtin
         | 
| 104 | 
            +
                    rule /:=|_/, Operator, :pop!
         | 
| 105 | 
            +
                    rule /[a-z]+\w*:/i, Name::Function, :pop!
         | 
| 106 | 
            +
                    rule /[a-z]+\w*/i, Name::Function
         | 
| 107 | 
            +
                    rule /#{ops}+/, Name::Function, :pop!
         | 
| 108 | 
            +
                    rule /[.]/, Punctuation, :pop!
         | 
| 109 | 
            +
                    rule /;/, Punctuation
         | 
| 110 110 | 
             
                    rule(//) { pop! }
         | 
| 111 111 | 
             
                  end
         | 
| 112 112 | 
             
                end
         |