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
@@ -12,21 +12,29 @@ module Rouge
12
12
  application/trig
13
13
  )
14
14
 
15
+ def self.analyze_text(text)
16
+ start = text[0..1000]
17
+ return 0.5 if start =~ %r(@prefix\b)
18
+ return 0.5 if start =~ %r(@base\b)
19
+ return 0.4 if start =~ %r(PREFIX\b)i
20
+ return 0.4 if start =~ %r(BASE\b)i
21
+ end
22
+
15
23
  state :root do
16
24
  rule /@base\b/, Keyword::Declaration
17
25
  rule /@prefix\b/, Keyword::Declaration
18
26
  rule /true\b/, Keyword::Constant
19
27
  rule /false\b/, Keyword::Constant
20
-
28
+
21
29
  rule /""".*?"""/m, Literal::String
22
30
  rule /"([^"\\]|\\.)*"/, Literal::String
23
31
  rule /'''.*?'''/m, Literal::String
24
32
  rule /'([^'\\]|\\.)*'/, Literal::String
25
-
33
+
26
34
  rule /#.*$/, Comment::Single
27
-
35
+
28
36
  rule /@[^\s,.; ]+/, Name::Attribute
29
-
37
+
30
38
  rule /[+-]?[0-9]+\.[0-9]*E[+-]?[0-9]+/, Literal::Number::Float
31
39
  rule /[+-]?\.[0-9]+E[+-]?[0-9]+/, Literal::Number::Float
32
40
  rule /[+-]?[0-9]+E[+-]?[0-9]+/, Literal::Number::Float
@@ -45,7 +53,7 @@ module Rouge
45
53
  rule /\[/, Punctuation
46
54
  rule /\]/, Punctuation
47
55
  rule /\^\^/, Punctuation
48
-
56
+
49
57
  rule /<[^>]*>/, Name::Label
50
58
 
51
59
  rule /base\b/i, Keyword::Declaration
@@ -57,6 +65,7 @@ module Rouge
57
65
 
58
66
  rule /[^:;<>#\@"\(\).\[\]\{\} ]+:/, Name::Namespace
59
67
  rule /[^:;<>#\@"\(\).\[\]\{\} ]+/, Name
68
+
60
69
  end
61
70
  end
62
71
  end
@@ -15,16 +15,18 @@ module Rouge
15
15
  @js = Javascript.new(options)
16
16
  end
17
17
 
18
+ def self.analyze_text(text)
19
+ return 0
20
+ end
21
+
18
22
  def lookup_lang(lang)
19
- lang.downcase!
20
- lang = lang.gsub(/["']*/, '')
21
23
  case lang
22
24
  when 'html' then HTML
23
25
  when 'css' then CSS
24
26
  when 'javascript' then Javascript
25
27
  when 'sass' then Sass
26
28
  when 'scss' then Scss
27
- when 'coffee' then Coffeescript
29
+ when 'coffee' then CoffeeScript
28
30
  # TODO: add more when the lexers are done
29
31
  else
30
32
  PlainText
@@ -79,7 +81,7 @@ module Rouge
79
81
  state :lang_tag do
80
82
  rule /(lang\s*=)(\s*)("(?:\\.|[^\\])*?"|'(\\.|[^\\])*?'|[^\s>]+)/ do |m|
81
83
  groups Name::Attribute, Text, Str
82
- @lang = lookup_lang(m[3])
84
+ @lang = lookup_lang(m[2])
83
85
  end
84
86
 
85
87
  mixin :tag
@@ -8,6 +8,10 @@ module Rouge
8
8
  tag 'wollok'
9
9
  filenames *%w(*.wlk *.wtest *.wpgm)
10
10
 
11
+ def self.analyze_text(_text)
12
+ 0.3
13
+ end
14
+
11
15
  keywords = %w(new super return if else var const override constructor)
12
16
 
13
17
  entity_name = /[a-zA-Z][a-zA-Z0-9]*/
@@ -15,10 +15,12 @@ module Rouge
15
15
  application/atom+xml
16
16
  )
17
17
 
18
- def self.detect?(text)
19
- return false if text.doctype?(/html/)
20
- return true if text =~ /\A<\?xml\b/
21
- return true if text.doctype?
18
+ def self.analyze_text(text)
19
+ return 0.9 if text.doctype?
20
+ return 0.8 if text =~ /\A<\?xml\b/
21
+ start = text[0..1000]
22
+ return 0.6 if start =~ %r(<xml\b)
23
+ return 0.3 if start =~ %r(<.+?>.*?</.+?>)m
22
24
  end
23
25
 
24
26
  state :root do
@@ -10,9 +10,9 @@ module Rouge
10
10
  aliases 'yml'
11
11
  filenames '*.yaml', '*.yml'
12
12
 
13
- def self.detect?(text)
13
+ def self.analyze_text(text)
14
14
  # look for the %YAML directive
15
- return true if text =~ /\A\s*%YAML/m
15
+ return 1 if text =~ /\A\s*%YAML/m
16
16
  end
17
17
 
18
18
  SPECIAL_VALUES = Regexp.union(%w(true false null))
data/lib/rouge/version.rb CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Rouge
4
4
  def self.version
5
- "3.1.1"
5
+ "2.2.1"
6
6
  end
7
7
  end
data/rouge.gemspec CHANGED
@@ -2,7 +2,7 @@ require './lib/rouge/version'
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rouge_ecl"
5
- s.version = "0.0.1"
5
+ s.version = "1.0.0"
6
6
  s.authors = ["Jeanine Adkisson"]
7
7
  s.email = ["jneen@jneen.net"]
8
8
  s.summary = "A pure-ruby colorizer based on pygments"
@@ -15,9 +15,4 @@ Gem::Specification.new do |s|
15
15
  s.files = Dir['Gemfile', 'LICENSE', 'rouge.gemspec', 'lib/**/*.rb', 'lib/**/*.yml', 'bin/rougify', 'lib/rouge/demos/*']
16
16
  s.executables = %w(rougify)
17
17
  s.licenses = ['MIT', 'BSD-2-Clause']
18
- s.required_ruby_version = '>= 2.0'
19
- s.metadata = {
20
- 'source_code_uri' => 'https://github.com/jneen/rouge',
21
- 'changelog_uri' => 'https://github.com/jneen/rouge/blob/master/CHANGELOG.md'
22
- }
23
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rouge_ecl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeanine Adkisson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-03 00:00:00.000000000 Z
11
+ date: 2018-04-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Rouge aims to a be a simple, easy-to-extend drop-in replacement for pygments.
14
14
  email:
@@ -50,10 +50,8 @@ files:
50
50
  - lib/rouge/demos/digdag
51
51
  - lib/rouge/demos/docker
52
52
  - lib/rouge/demos/dot
53
- - lib/rouge/demos/ecl
54
53
  - lib/rouge/demos/eiffel
55
54
  - lib/rouge/demos/elixir
56
- - lib/rouge/demos/elm
57
55
  - lib/rouge/demos/erb
58
56
  - lib/rouge/demos/erlang
59
57
  - lib/rouge/demos/factor
@@ -65,7 +63,6 @@ files:
65
63
  - lib/rouge/demos/gradle
66
64
  - lib/rouge/demos/graphql
67
65
  - lib/rouge/demos/groovy
68
- - lib/rouge/demos/hack
69
66
  - lib/rouge/demos/haml
70
67
  - lib/rouge/demos/handlebars
71
68
  - lib/rouge/demos/haskell
@@ -166,13 +163,11 @@ files:
166
163
  - lib/rouge/formatters/null.rb
167
164
  - lib/rouge/formatters/terminal256.rb
168
165
  - lib/rouge/guesser.rb
169
- - lib/rouge/guessers/disambiguation.rb
170
166
  - lib/rouge/guessers/filename.rb
171
167
  - lib/rouge/guessers/glob_mapping.rb
172
168
  - lib/rouge/guessers/mimetype.rb
173
169
  - lib/rouge/guessers/modeline.rb
174
170
  - lib/rouge/guessers/source.rb
175
- - lib/rouge/guessers/util.rb
176
171
  - lib/rouge/lexer.rb
177
172
  - lib/rouge/lexers/abap.rb
178
173
  - lib/rouge/lexers/actionscript.rb
@@ -205,7 +200,6 @@ files:
205
200
  - lib/rouge/lexers/ecl.rb
206
201
  - lib/rouge/lexers/eiffel.rb
207
202
  - lib/rouge/lexers/elixir.rb
208
- - lib/rouge/lexers/elm.rb
209
203
  - lib/rouge/lexers/erb.rb
210
204
  - lib/rouge/lexers/erlang.rb
211
205
  - lib/rouge/lexers/factor.rb
@@ -218,7 +212,6 @@ files:
218
212
  - lib/rouge/lexers/gradle.rb
219
213
  - lib/rouge/lexers/graphql.rb
220
214
  - lib/rouge/lexers/groovy.rb
221
- - lib/rouge/lexers/hack.rb
222
215
  - lib/rouge/lexers/haml.rb
223
216
  - lib/rouge/lexers/handlebars.rb
224
217
  - lib/rouge/lexers/haskell.rb
@@ -339,9 +332,7 @@ homepage: http://rouge.jneen.net/
339
332
  licenses:
340
333
  - MIT
341
334
  - BSD-2-Clause
342
- metadata:
343
- source_code_uri: https://github.com/jneen/rouge
344
- changelog_uri: https://github.com/jneen/rouge/blob/master/CHANGELOG.md
335
+ metadata: {}
345
336
  post_install_message:
346
337
  rdoc_options: []
347
338
  require_paths:
@@ -350,7 +341,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
350
341
  requirements:
351
342
  - - ">="
352
343
  - !ruby/object:Gem::Version
353
- version: '2.0'
344
+ version: '0'
354
345
  required_rubygems_version: !ruby/object:Gem::Requirement
355
346
  requirements:
356
347
  - - ">="
data/lib/rouge/demos/ecl DELETED
@@ -1 +0,0 @@
1
- OUTPUT('Hello, world!');
data/lib/rouge/demos/elm DELETED
@@ -1,4 +0,0 @@
1
- import Html exposing (text)
2
-
3
- main =
4
- text "Hello, World!"
data/lib/rouge/demos/hack DELETED
@@ -1,5 +0,0 @@
1
- <?hh // strict
2
-
3
- async function foo(): Awaitable<string> {
4
- return await (() ==> 'Hello, world')();
5
- }
@@ -1,101 +0,0 @@
1
- module Rouge
2
- module Guessers
3
- class Disambiguation < Guesser
4
- include Util
5
- include Lexers
6
-
7
- def initialize(filename, source)
8
- @filename = File.basename(filename)
9
- @source = source
10
- end
11
-
12
- def filter(lexers)
13
- return lexers if lexers.size == 1
14
- return lexers if lexers.size == Lexer.all.size
15
-
16
- @analyzer = TextAnalyzer.new(get_source(@source))
17
-
18
- self.class.disambiguators.each do |disambiguator|
19
- next unless disambiguator.match?(@filename)
20
-
21
- filtered = disambiguator.decide!(self)
22
- return filtered if filtered
23
- end
24
-
25
- return lexers
26
- end
27
-
28
- def contains?(text)
29
- return @analyzer.include?(text)
30
- end
31
-
32
- def matches?(re)
33
- return !!(@analyzer =~ re)
34
- end
35
-
36
- @disambiguators = []
37
- def self.disambiguate(*patterns, &decider)
38
- @disambiguators << Disambiguator.new(patterns, &decider)
39
- end
40
-
41
- def self.disambiguators
42
- @disambiguators
43
- end
44
-
45
- class Disambiguator
46
- include Util
47
-
48
- def initialize(patterns, &decider)
49
- @patterns = patterns
50
- @decider = decider
51
- end
52
-
53
- def decide!(guesser)
54
- out = guesser.instance_eval(&@decider)
55
- case out
56
- when Array then out
57
- when nil then nil
58
- else [out]
59
- end
60
- end
61
-
62
- def match?(filename)
63
- @patterns.any? { |p| test_glob(p, filename) }
64
- end
65
- end
66
-
67
- disambiguate '*.pl' do
68
- next Perl if contains?('my $')
69
- next Prolog if contains?(':-')
70
- next Prolog if matches?(/\A\w+(\(\w+\,\s*\w+\))*\./)
71
- end
72
-
73
- disambiguate '*.h' do
74
- next ObjectiveC if matches?(/@(end|implementation|protocol|property)\b/)
75
- next ObjectiveC if contains?('@"')
76
-
77
- C
78
- end
79
-
80
- disambiguate '*.m' do
81
- next ObjectiveC if matches?(/@(end|implementation|protocol|property)\b/)
82
- next ObjectiveC if contains?('@"')
83
-
84
- next Matlab if matches?(/^\s*?%/)
85
- end
86
-
87
- disambiguate '*.php' do
88
- # PHP always takes precedence over Hack
89
- PHP
90
- end
91
-
92
- disambiguate '*.hh' do
93
- next Cpp if matches?(/^\s*#include/)
94
- next Hack if matches?(/^<\?hh/)
95
- next Hack if matches?(/(\(|, ?)\$\$/)
96
-
97
- Cpp
98
- end
99
- end
100
- end
101
- end
@@ -1,32 +0,0 @@
1
- module Rouge
2
- module Guessers
3
- module Util
4
- module SourceNormalizer
5
- UTF8_BOM = "\xEF\xBB\xBF"
6
- UTF8_BOM_RE = /\A#{UTF8_BOM}/
7
-
8
- # @param [String,nil] source
9
- # @return [String,nil]
10
- def self.normalize(source)
11
- source.sub(UTF8_BOM_RE, '').gsub(/\r\n/, "\n")
12
- end
13
- end
14
-
15
- def test_glob(pattern, path)
16
- File.fnmatch?(pattern, path, File::FNM_DOTMATCH | File::FNM_CASEFOLD)
17
- end
18
-
19
- # @param [String,IO] source
20
- # @return [String]
21
- def get_source(source)
22
- if source.respond_to?(:to_str)
23
- SourceNormalizer.normalize(source.to_str)
24
- elsif source.respond_to?(:read)
25
- SourceNormalizer.normalize(source.read)
26
- else
27
- raise ArgumentError, "Invalid source: #{source.inspect}"
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,89 +0,0 @@
1
- # -*- coding: utf-8 -*- #
2
-
3
- module Rouge
4
- module Lexers
5
- class Elm < RegexLexer
6
- title "Elm"
7
- desc "The Elm programming language (http://elm-lang.org/)"
8
-
9
- tag 'elm'
10
- filenames '*.elm'
11
- mimetypes 'text/x-elm'
12
-
13
- # Keywords are logically grouped by lines
14
- keywords = %w(
15
- module exposing port
16
- import as
17
- type alias
18
- if then else
19
- case of
20
- let in
21
- )
22
-
23
- state :root do
24
- # Whitespaces
25
- rule /\s+/m, Text
26
- # Single line comments
27
- rule /--.*/, Comment::Single
28
- # Multiline comments
29
- rule /{-/, Comment::Multiline, :multiline_comment
30
-
31
- # Keywords
32
- rule /\b(#{keywords.join('|')})\b/, Keyword
33
-
34
- # Variable or a function
35
- rule /[a-z][\w]*/, Name
36
- # Underscore is a name for a variable, when it won't be used later
37
- rule /_/, Name
38
- # Type
39
- rule /[A-Z][\w]*/, Keyword::Type
40
-
41
- # Two symbol operators: -> :: // .. && || ++ |> <| << >> == /= <= >=
42
- rule /(->|::|\/\/|\.\.|&&|\|\||\+\+|\|>|<\||>>|<<|==|\/=|<=|>=)/, Operator
43
- # One symbol operators: + - / * % = < > ^ | !
44
- rule /[+-\/*%=<>^\|!]/, Operator
45
- # Lambda operator
46
- rule /\\/, Operator
47
- # Not standard Elm operators, but these symbols can be used for custom inflix operators. We need to highlight them as operators as well.
48
- rule /[@\#$&~?]/, Operator
49
-
50
- # Single, double quotes, and triple double quotes
51
- rule /"""/, Str, :multiline_string
52
- rule /'(\\.|.)'/, Str::Char
53
- rule /"/, Str, :double_quote
54
-
55
- # Numbers
56
- rule /0x[\da-f]+/i, Num::Hex
57
- rule /\d+e[+-]?\d+/i, Num::Float
58
- rule /\d+\.\d+(e[+-]?\d+)?/i, Num::Float
59
- rule /\d+/, Num::Integer
60
-
61
- # Punctuation: [ ] ( ) , ; ` { } :
62
- rule /[\[\](),;`{}:]/, Punctuation
63
- end
64
-
65
- # Multiline and nested commenting
66
- state :multiline_comment do
67
- rule /-}/, Comment::Multiline, :pop!
68
- rule /{-/, Comment::Multiline, :multiline_comment
69
- rule /[^-{}]+/, Comment::Multiline
70
- rule /[-{}]/, Comment::Multiline
71
- end
72
-
73
- # Double quotes
74
- state :double_quote do
75
- rule /[^\\"]+/, Str::Double
76
- rule /\\"/, Str::Escape
77
- rule /"/, Str::Double, :pop!
78
- end
79
-
80
- # Multiple line string with tripple double quotes, e.g. """ multi """
81
- state :multiline_string do
82
- rule /\s*"""/, Str, :pop!
83
- rule /.*/, Str
84
- rule /\s*/, Str
85
- end
86
-
87
- end
88
- end
89
- end