rouge_ecl 0.0.1 → 1.0.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.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -4
  3. data/lib/rouge.rb +7 -9
  4. data/lib/rouge/cli.rb +2 -36
  5. data/lib/rouge/guessers/glob_mapping.rb +6 -3
  6. data/lib/rouge/guessers/modeline.rb +3 -4
  7. data/lib/rouge/guessers/source.rb +16 -6
  8. data/lib/rouge/lexer.rb +11 -20
  9. data/lib/rouge/lexers/apiblueprint.rb +4 -0
  10. data/lib/rouge/lexers/awk.rb +2 -2
  11. data/lib/rouge/lexers/biml.rb +2 -2
  12. data/lib/rouge/lexers/c.rb +6 -1
  13. data/lib/rouge/lexers/coffeescript.rb +2 -2
  14. data/lib/rouge/lexers/coq.rb +4 -0
  15. data/lib/rouge/lexers/diff.rb +4 -4
  16. data/lib/rouge/lexers/digdag.rb +4 -0
  17. data/lib/rouge/lexers/ecl.rb +32 -20
  18. data/lib/rouge/lexers/erb.rb +4 -0
  19. data/lib/rouge/lexers/erlang.rb +4 -0
  20. data/lib/rouge/lexers/factor.rb +2 -2
  21. data/lib/rouge/lexers/fsharp.rb +1 -1
  22. data/lib/rouge/lexers/gherkin.rb +2 -2
  23. data/lib/rouge/lexers/go.rb +4 -0
  24. data/lib/rouge/lexers/groovy.rb +2 -2
  25. data/lib/rouge/lexers/haml.rb +4 -0
  26. data/lib/rouge/lexers/haskell.rb +5 -4
  27. data/lib/rouge/lexers/html.rb +5 -6
  28. data/lib/rouge/lexers/idlang.rb +6 -0
  29. data/lib/rouge/lexers/ini.rb +4 -0
  30. data/lib/rouge/lexers/io.rb +2 -2
  31. data/lib/rouge/lexers/javascript.rb +2 -2
  32. data/lib/rouge/lexers/julia.rb +2 -2
  33. data/lib/rouge/lexers/kotlin.rb +15 -10
  34. data/lib/rouge/lexers/lasso.rb +6 -3
  35. data/lib/rouge/lexers/llvm.rb +4 -0
  36. data/lib/rouge/lexers/lua.rb +2 -2
  37. data/lib/rouge/lexers/make.rb +4 -0
  38. data/lib/rouge/lexers/matlab.rb +4 -0
  39. data/lib/rouge/lexers/moonscript.rb +2 -2
  40. data/lib/rouge/lexers/mosel.rb +3 -3
  41. data/lib/rouge/lexers/nasm.rb +5 -0
  42. data/lib/rouge/lexers/objective_c.rb +14 -0
  43. data/lib/rouge/lexers/perl.rb +4 -3
  44. data/lib/rouge/lexers/php.rb +6 -6
  45. data/lib/rouge/lexers/plist.rb +4 -0
  46. data/lib/rouge/lexers/powershell.rb +1 -1
  47. data/lib/rouge/lexers/praat.rb +2 -2
  48. data/lib/rouge/lexers/prolog.rb +5 -0
  49. data/lib/rouge/lexers/properties.rb +4 -0
  50. data/lib/rouge/lexers/puppet.rb +3 -3
  51. data/lib/rouge/lexers/python.rb +2 -3
  52. data/lib/rouge/lexers/q.rb +4 -0
  53. data/lib/rouge/lexers/r.rb +2 -2
  54. data/lib/rouge/lexers/racket.rb +4 -5
  55. data/lib/rouge/lexers/ruby.rb +3 -3
  56. data/lib/rouge/lexers/rust.rb +4 -4
  57. data/lib/rouge/lexers/sass.rb +3 -3
  58. data/lib/rouge/lexers/scheme.rb +2 -2
  59. data/lib/rouge/lexers/scss.rb +2 -2
  60. data/lib/rouge/lexers/sed.rb +2 -2
  61. data/lib/rouge/lexers/shell.rb +9 -18
  62. data/lib/rouge/lexers/smarty.rb +11 -0
  63. data/lib/rouge/lexers/sml.rb +4 -0
  64. data/lib/rouge/lexers/swift.rb +1 -21
  65. data/lib/rouge/lexers/tap.rb +4 -0
  66. data/lib/rouge/lexers/tcl.rb +4 -4
  67. data/lib/rouge/lexers/tex.rb +2 -2
  68. data/lib/rouge/lexers/toml.rb +4 -0
  69. data/lib/rouge/lexers/tulip.rb +3 -2
  70. data/lib/rouge/lexers/turtle.rb +14 -5
  71. data/lib/rouge/lexers/vue.rb +6 -4
  72. data/lib/rouge/lexers/wollok.rb +4 -0
  73. data/lib/rouge/lexers/xml.rb +6 -4
  74. data/lib/rouge/lexers/yaml.rb +2 -2
  75. data/lib/rouge/version.rb +1 -1
  76. data/rouge.gemspec +1 -6
  77. metadata +4 -13
  78. data/lib/rouge/demos/ecl +0 -1
  79. data/lib/rouge/demos/elm +0 -4
  80. data/lib/rouge/demos/hack +0 -5
  81. data/lib/rouge/guessers/disambiguation.rb +0 -101
  82. data/lib/rouge/guessers/util.rb +0 -32
  83. data/lib/rouge/lexers/elm.rb +0 -89
  84. data/lib/rouge/lexers/hack.rb +0 -48
@@ -11,6 +11,10 @@ module Rouge
11
11
 
12
12
  filenames '*.erb', '*.erubis', '*.rhtml', '*.eruby'
13
13
 
14
+ def self.analyze_text(text)
15
+ return 0.4 if text =~ /<%.*%>/
16
+ end
17
+
14
18
  def initialize(opts={})
15
19
  @ruby_lexer = Ruby.new(opts)
16
20
 
@@ -11,6 +11,10 @@ module Rouge
11
11
 
12
12
  mimetypes 'text/x-erlang', 'application/x-erlang'
13
13
 
14
+ def self.analyze_text(text)
15
+ return 0.3 if text =~ /^-module[(]\w+[)][.]/
16
+ end
17
+
14
18
  keywords = %w(
15
19
  after begin case catch cond end fun if
16
20
  let of query receive try when
@@ -9,8 +9,8 @@ module Rouge
9
9
  filenames '*.factor'
10
10
  mimetypes 'text/x-factor'
11
11
 
12
- def self.detect?(text)
13
- return true if text.shebang? 'factor'
12
+ def self.analyze_text(text)
13
+ return 1 if text.shebang? 'factor'
14
14
  end
15
15
 
16
16
  def self.builtins
@@ -41,7 +41,7 @@ module Rouge
41
41
  end
42
42
 
43
43
  operator = %r([\[\];,{}_()!$%&*+./:<=>?@^|~#-]+)
44
- id = /([a-z][\w']*)|(``[^`\n\r\t]+``)/i
44
+ id = /[a-z][\w']*/i
45
45
  upper_id = /[A-Z][\w']*/
46
46
 
47
47
  state :root do
@@ -12,8 +12,8 @@ module Rouge
12
12
  filenames '*.feature'
13
13
  mimetypes 'text/x-gherkin'
14
14
 
15
- def self.detect?(text)
16
- return true if text.shebang? 'cucumber'
15
+ def self.analyze_text(text)
16
+ return 1 if text.shebang? 'cucumber'
17
17
  end
18
18
 
19
19
  # self-modifying method that loads the keywords file
@@ -11,6 +11,10 @@ module Rouge
11
11
 
12
12
  mimetypes 'text/x-go', 'application/x-go'
13
13
 
14
+ def self.analyze_text(text)
15
+ return 0
16
+ end
17
+
14
18
  # Characters
15
19
 
16
20
  WHITE_SPACE = /[\s\t\r\n]+/
@@ -11,8 +11,8 @@ module Rouge
11
11
 
12
12
  ws = %r((?:\s|//.*?\n|/[*].*?[*]/)+)
13
13
 
14
- def self.detect?(text)
15
- return true if text.shebang?(/groovy/)
14
+ def self.analyze_text(text)
15
+ return 1 if text.shebang?(/groovy/)
16
16
  end
17
17
 
18
18
  def self.keywords
@@ -16,6 +16,10 @@ module Rouge
16
16
  filenames '*.haml'
17
17
  mimetypes 'text/x-haml'
18
18
 
19
+ def self.analyze_text(text)
20
+ return 0.1 if text.start_with? '!!!'
21
+ end
22
+
19
23
  option 'filters[filter_name]', 'Mapping of lexers to use for haml :filters'
20
24
  attr_reader :filters
21
25
  # @option opts :filters
@@ -11,8 +11,8 @@ module Rouge
11
11
  filenames '*.hs'
12
12
  mimetypes 'text/x-haskell'
13
13
 
14
- def self.detect?(text)
15
- return true if text.shebang?('runhaskell')
14
+ def self.analyze_text(text)
15
+ return 1 if text.shebang?('runhaskell')
16
16
  end
17
17
 
18
18
  reserved = %w(
@@ -55,6 +55,7 @@ module Rouge
55
55
 
56
56
  rule /\bimport\b/, Keyword::Reserved, :import
57
57
  rule /\bmodule\b/, Keyword::Reserved, :module
58
+ rule /\berror\b/, Name::Exception
58
59
  rule /\b(?:#{reserved.join('|')})\b/, Keyword::Reserved
59
60
  # not sure why, but ^ doesn't work here
60
61
  # rule /^[_a-z][\w']*/, Name::Function
@@ -147,7 +148,7 @@ module Rouge
147
148
  state :character do
148
149
  rule /\\/ do
149
150
  token Str::Escape
150
- goto :character_end
151
+ push :character_end
151
152
  push :escape
152
153
  end
153
154
 
@@ -173,7 +174,7 @@ module Rouge
173
174
  rule /\^[\]\[A-Z@\^_]/, Str::Escape, :pop!
174
175
  rule /#{ascii.join('|')}/, Str::Escape, :pop!
175
176
  rule /o[0-7]+/i, Str::Escape, :pop!
176
- rule /x[\da-f]+/i, Str::Escape, :pop!
177
+ rule /x[\da-f]/i, Str::Escape, :pop!
177
178
  rule /\d+/, Str::Escape, :pop!
178
179
  rule /\s+\\/, Str::Escape, :pop!
179
180
  end
@@ -9,9 +9,9 @@ module Rouge
9
9
  filenames '*.htm', '*.html', '*.xhtml'
10
10
  mimetypes 'text/html', 'application/xhtml+xml'
11
11
 
12
- def self.detect?(text)
13
- return true if text.doctype?(/\bhtml\b/i)
14
- return true if text =~ /<\s*html\b/
12
+ def self.analyze_text(text)
13
+ return 1 if text.doctype?(/\bhtml\b/i)
14
+ return 1 if text =~ /<\s*html\b/
15
15
  end
16
16
 
17
17
  start do
@@ -37,7 +37,6 @@ module Rouge
37
37
  rule /<\s*style\s*/m do
38
38
  token Name::Tag
39
39
  @css.reset!
40
- @lang = @css
41
40
  push :style_content
42
41
  push :tag
43
42
  end
@@ -125,13 +124,13 @@ module Rouge
125
124
 
126
125
  state :style_content do
127
126
  rule /[^<]+/ do
128
- delegate @lang
127
+ delegate @css
129
128
  end
130
129
 
131
130
  rule %r(<\s*/\s*style\s*>)m, Name::Tag, :pop!
132
131
 
133
132
  rule /</ do
134
- delegate @lang
133
+ delegate @css
135
134
  end
136
135
  end
137
136
  end
@@ -10,6 +10,12 @@ module Rouge
10
10
  tag 'idlang'
11
11
  filenames '*.idl'
12
12
 
13
+ def self.analyze_text(text)
14
+ # Does there exist a statement that starts with 'pro' or
15
+ # 'function'?
16
+ return 0.4 if text =~ /^\s+(pro|function)\z/
17
+ end
18
+
13
19
  name = /[_A-Z]\w*/i
14
20
  kind_param = /(\d+|#{name})/
15
21
  exponent = /[dDeE][+-]\d+/
@@ -11,6 +11,10 @@ module Rouge
11
11
  filenames '*.ini', '*.INI', '*.gitconfig'
12
12
  mimetypes 'text/x-ini'
13
13
 
14
+ def self.analyze_text(text)
15
+ return 0.1 if text =~ /\A\[[\w\-.]+\]\s*[\w\-]+=\w+/
16
+ end
17
+
14
18
  identifier = /[\w\-.]+/
15
19
 
16
20
  state :basic do
@@ -9,8 +9,8 @@ module Rouge
9
9
  mimetypes 'text/x-iosrc'
10
10
  filenames '*.io'
11
11
 
12
- def self.detect?(text)
13
- return true if text.shebang? 'io'
12
+ def self.analyze_text(text)
13
+ return 1 if text.shebang? 'io'
14
14
  end
15
15
 
16
16
  def self.constants
@@ -14,11 +14,11 @@ module Rouge
14
14
 
15
15
  tag 'javascript'
16
16
  aliases 'js'
17
- filenames '*.js', '*.mjs'
17
+ filenames '*.js'
18
18
  mimetypes 'application/javascript', 'application/x-javascript',
19
19
  'text/javascript', 'text/x-javascript'
20
20
 
21
- def self.detect?(text)
21
+ def self.analyze_text(text)
22
22
  return 1 if text.shebang?('node')
23
23
  return 1 if text.shebang?('jsc')
24
24
  # TODO: rhino, spidermonkey, etc
@@ -10,8 +10,8 @@ module Rouge
10
10
  filenames '*.jl'
11
11
  mimetypes 'text/x-julia', 'application/x-julia'
12
12
 
13
- def self.detect?(text)
14
- return true if text.shebang? 'julia'
13
+ def self.analyze_text(text)
14
+ 1 if text.shebang? 'julia'
15
15
  end
16
16
 
17
17
  BUILTINS = /\b(?:
@@ -3,10 +3,8 @@
3
3
  module Rouge
4
4
  module Lexers
5
5
  class Kotlin < RegexLexer
6
- # https://kotlinlang.org/docs/reference/grammar.html
7
-
8
6
  title "Kotlin"
9
- desc "Kotlin Programming Language (http://kotlinlang.org)"
7
+ desc "Kotlin <http://kotlinlang.org>"
10
8
 
11
9
  tag 'kotlin'
12
10
  filenames '*.kt'
@@ -31,7 +29,7 @@ module Rouge
31
29
  rule %r'^\s*\[.*?\]', Name::Attribute
32
30
  rule %r'[^\S\n]+', Text
33
31
  rule %r'\\\n', Text # line continuation
34
- rule %r'//.*?$', Comment::Single
32
+ rule %r'//.*?\n', Comment::Single
35
33
  rule %r'/[*].*?[*]/'m, Comment::Multiline
36
34
  rule %r'\n', Text
37
35
  rule %r'::|!!|\?[:.]', Operator
@@ -43,23 +41,26 @@ module Rouge
43
41
  rule %r'"(\\\\|\\"|[^"\n])*["\n]'m, Str
44
42
  rule %r"'\\.'|'[^\\]'", Str::Char
45
43
  rule %r"[0-9](\.[0-9]+)?([eE][+-][0-9]+)?[flFL]?|0[xX][0-9a-fA-F]+[Ll]?", Num
46
- rule %r'\b(companion)(\s+)(object)\b' do
44
+ rule %r'(companion)(\s+)(object)' do
47
45
  groups Keyword, Text, Keyword
48
46
  end
49
- rule %r'\b(class|data\s+class|interface|object)(\s+)' do
47
+ rule %r'(class|data\s+class|interface|object)(\s+)' do
50
48
  groups Keyword::Declaration, Text
51
49
  push :class
52
50
  end
53
- rule %r'\b(package|import)(\s+)' do
51
+ rule %r'(package|import)(\s+)' do
54
52
  groups Keyword, Text
55
53
  push :package
56
54
  end
57
- rule %r'\b(val|var)(\s+)' do
55
+ rule %r'(val|var)(\s+)' do
58
56
  groups Keyword::Declaration, Text
59
57
  push :property
60
58
  end
61
- rule %r/\bfun\b/, Keyword
62
- rule /\b(?:#{keywords.join('|')})\b/, Keyword
59
+ rule %r'(fun)(\s+)' do
60
+ groups Keyword, Text
61
+ push :function
62
+ end
63
+ rule /(?:#{keywords.join('|')})\b/, Keyword
63
64
  rule id, Name
64
65
  end
65
66
 
@@ -74,6 +75,10 @@ module Rouge
74
75
  state :property do
75
76
  rule id, Name::Property, :pop!
76
77
  end
78
+
79
+ state :function do
80
+ rule id, Name::Function, :pop!
81
+ end
77
82
  end
78
83
  end
79
84
  end
@@ -14,9 +14,12 @@ module Rouge
14
14
 
15
15
  option :start_inline, 'Whether to start inline instead of requiring <?lasso or ['
16
16
 
17
- def self.detect?(text)
18
- return true if text.shebang?('lasso9')
19
- return true if text =~ /\A.*?<\?(lasso(script)?|=)/
17
+ def self.analyze_text(text)
18
+ rv = 0.0
19
+ rv += 1 if text.shebang?('lasso9')
20
+ rv += 0.4 if text =~ /<\?(lasso(script)?|=)|no_square_brackets|noprocess/i
21
+ rv += 0.2 if text =~ /define(_tag|_type|\s)/i
22
+ return rv
20
23
  end
21
24
 
22
25
  def initialize(*)
@@ -10,6 +10,10 @@ module Rouge
10
10
  filenames '*.ll'
11
11
  mimetypes 'text/x-llvm'
12
12
 
13
+ def self.analyze_text(text)
14
+ return 0.1 if text =~ /\A%\w+\s=\s/
15
+ end
16
+
13
17
  string = /"[^"]*?"/
14
18
  identifier = /([-a-zA-Z$._][-a-zA-Z$._0-9]*|#{string})/
15
19
 
@@ -19,8 +19,8 @@ module Rouge
19
19
  super(opts)
20
20
  end
21
21
 
22
- def self.detect?(text)
23
- return true if text.shebang? 'lua'
22
+ def self.analyze_text(text)
23
+ return 1 if text.shebang? 'lua'
24
24
  end
25
25
 
26
26
  def self.builtins
@@ -10,6 +10,10 @@ module Rouge
10
10
  filenames '*.make', 'Makefile', 'makefile', 'Makefile.*', 'GNUmakefile'
11
11
  mimetypes 'text/x-makefile'
12
12
 
13
+ def self.analyze_text(text)
14
+ return 0.6 if text =~ /^\.PHONY:/
15
+ end
16
+
13
17
  bsd_special = %w(
14
18
  include undef error warning if else elif endif for endfor
15
19
  )
@@ -10,6 +10,10 @@ module Rouge
10
10
  filenames '*.m'
11
11
  mimetypes 'text/x-matlab', 'application/x-matlab'
12
12
 
13
+ def self.analyze_text(text)
14
+ return 0.4 if text =~ /^\s*% / # % comments are a dead giveaway
15
+ end
16
+
13
17
  def self.keywords
14
18
  @keywords = Set.new %w(
15
19
  break case catch classdef continue else elseif end for function
@@ -22,8 +22,8 @@ module Rouge
22
22
  @disabled_modules = list_option(:disabled_modules)
23
23
  end
24
24
 
25
- def self.detect?(text)
26
- return true if text.shebang? 'moon'
25
+ def self.analyze_text(text)
26
+ return 1 if text.shebang? 'moon'
27
27
  end
28
28
 
29
29
  def builtins
@@ -11,9 +11,9 @@ module Rouge
11
11
  filenames '*.mos'
12
12
 
13
13
  mimetypes 'text/x-mosel'
14
-
15
- def self.detect?(text)
16
- return true if text =~ /^\s*(model|package)\s+/
14
+
15
+ def self.analyze_text(text)
16
+ return 1 if text =~ /^\s*(model|package)\s+/
17
17
  end
18
18
 
19
19
  id = /[a-zA-Z_][a-zA-Z0-9_]*/
@@ -106,6 +106,11 @@ module Rouge
106
106
  )
107
107
  end
108
108
 
109
+ # high priority for filename matches
110
+ def self.analyze_text(*)
111
+ 0.3
112
+ end
113
+
109
114
  def self.builtins
110
115
  @builtins ||= []
111
116
  end
@@ -29,6 +29,20 @@ module Rouge
29
29
  @builtins ||= %w(YES NO nil)
30
30
  end
31
31
 
32
+ def self.analyze_text(text)
33
+ return 1 if text =~ /@(end|implementation|protocol|property)\b/
34
+
35
+ id = /[a-z$_][a-z0-9$_]*/i
36
+ return 0.4 if text =~ %r(
37
+ \[ \s* #{id} \s+
38
+ (?:
39
+ #{id} \s* \]
40
+ | #{id}? :
41
+ )
42
+ )x
43
+ return 0.4 if text.include? '@"'
44
+ end
45
+
32
46
  id = /[a-z$_][a-z0-9$_]*/i
33
47
 
34
48
  prepend :statements do
@@ -12,8 +12,9 @@ module Rouge
12
12
  filenames '*.pl', '*.pm'
13
13
  mimetypes 'text/x-perl', 'application/x-perl'
14
14
 
15
- def self.detect?(text)
16
- return true if text.shebang? 'perl'
15
+ def self.analyze_text(text)
16
+ return 1 if text.shebang? 'perl'
17
+ return 0.4 if text.include? 'my $'
17
18
  end
18
19
 
19
20
  keywords = %w(
@@ -104,7 +105,6 @@ module Rouge
104
105
  rule /__END__\b/, Comment::Preproc, :end_part
105
106
  rule /\$\^[ADEFHILMOPSTWX]/, Name::Variable::Global
106
107
  rule /\$[\\"'\[\]&`+*.,;=%~?@$!<>(^\|\/-](?!\w)/, Name::Variable::Global
107
- rule /[-+\/*%=<>&^\|!\\~]=?/, Operator
108
108
  rule /[$@%#]+/, Name::Variable, :varname
109
109
 
110
110
  rule /0_?[0-7]+(_[0-7]+)*/, Num::Oct
@@ -129,6 +129,7 @@ module Rouge
129
129
  rule /sub\s+/, Keyword, :funcname
130
130
  rule /\[\]|\*\*|::|<<|>>|>=|<=|<=>|={3}|!=|=~|!~|&&?|\|\||\.{1,3}/,
131
131
  Operator
132
+ rule /[-+\/*%=<>&^\|!\\~]=?/, Operator
132
133
  rule /[()\[\]:;,<>\/?{}]/, Punctuation
133
134
  rule(/(?=\w)/) { push :name }
134
135
  end