syntax 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +21 -0
- data/LICENSE +27 -0
- data/README.rdoc +49 -0
- data/lib/syntax/lang/ansic.rb +69 -0
- data/lib/syntax/lang/css21.rb +324 -0
- data/lib/syntax/lang/fortran.rb +149 -0
- data/lib/syntax/lang/javascript.rb +58 -0
- data/lib/syntax/lang/ruby.rb +1 -1
- data/lib/syntax/lang/sqlite.rb +77 -0
- data/lib/syntax/lang/yaml.rb +1 -0
- data/lib/syntax/version.rb +1 -1
- data/test/ALL-TESTS.rb +1 -1
- metadata +61 -52
- data/data/ruby.css +0 -18
- data/data/xml.css +0 -8
- data/data/yaml.css +0 -12
data/CHANGELOG
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
Syntax: a syntax highlighting library for Ruby.
|
2
|
+
|
3
|
+
1.1.0 In Progress
|
4
|
+
Published from https://github.com/dblock/syntax, a now maintained fork.
|
5
|
+
The project builds again and runs, fixes by @dblock, @distler.
|
6
|
+
|
7
|
+
1.0.0: 18 Jun 2005
|
8
|
+
Added user manual
|
9
|
+
Fixed various bugs
|
10
|
+
|
11
|
+
0.7.0: 23 Mar 2005
|
12
|
+
Added Syntax.all to enumerate all supported syntaxes.
|
13
|
+
Much improved heredoc support.
|
14
|
+
Support for syntax "regions"
|
15
|
+
Added sample CSS files for the supported syntaxes
|
16
|
+
Added the example "to_html.rb" script
|
17
|
+
Bug fixes.
|
18
|
+
|
19
|
+
0.5.0: 11 Jan 2005
|
20
|
+
First release.
|
21
|
+
|
data/LICENSE
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
* Redistributions of source code must retain the above copyright notice,
|
8
|
+
this list of conditions and the following disclaimer.
|
9
|
+
|
10
|
+
* Redistributions in binary form must reproduce the above copyright
|
11
|
+
notice, this list of conditions and the following disclaimer in the
|
12
|
+
documentation and/or other materials provided with the distribution.
|
13
|
+
|
14
|
+
* The names of its contributors may not be used to endorse or promote
|
15
|
+
products derived from this software without specific prior written
|
16
|
+
permission.
|
17
|
+
|
18
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
21
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
22
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
23
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
24
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
25
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
26
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
= Syntax
|
2
|
+
|
3
|
+
A syntax highlighting a library for Ruby.
|
4
|
+
|
5
|
+
This fork is maintained and version 1.1.0 has been published from it. However, there's currently none or not much new development going on here and the original author, @jamis[https://github.com/jamis], recommends using CodeRay[http://coderay.rubychan.de], over this library.
|
6
|
+
|
7
|
+
== About
|
8
|
+
|
9
|
+
This is a simple syntax highlighting library for Ruby. It is a naive syntax analysis tool, meaning that it does not "understand" the syntaxes of the languages it processes, but merely does some semi-intelligent pattern matching.
|
10
|
+
|
11
|
+
== Usage
|
12
|
+
|
13
|
+
There are primarily two uses for the Syntax library:
|
14
|
+
|
15
|
+
# Convert text from a supported syntax to a supported highlight format (like HTML).
|
16
|
+
# Tokenize text in a supported syntax and process the tokens directly.
|
17
|
+
|
18
|
+
=== Highlighting a supported syntax
|
19
|
+
|
20
|
+
require 'syntax/convertors/html'
|
21
|
+
|
22
|
+
convertor = Syntax::Convertors::HTML.for_syntax "ruby"
|
23
|
+
puts convertor.convert( File.read( "file.rb" ) )
|
24
|
+
|
25
|
+
The above snippet will emit HTML, using spans and CSS to indicate the different highlight "groups". (Sample CSS files are included in the "data" directory.)
|
26
|
+
|
27
|
+
=== Tokenize text
|
28
|
+
|
29
|
+
require 'syntax'
|
30
|
+
|
31
|
+
tokenizer = Syntax.load "ruby"
|
32
|
+
tokenizer.tokenize( File.read( "file.rb" ) ) do |token|
|
33
|
+
puts "group(#{token.group}, #{token.instruction}) lexeme(#{token})"
|
34
|
+
end
|
35
|
+
|
36
|
+
Tokenizing is straightforward process. Each time a new token is discovered by the tokenizer, it is yielded to the given block.
|
37
|
+
|
38
|
+
* <tt>token.group</tt> is the lexical group to which the token belongs. Each supported syntax may have it's own set of lexical groups.
|
39
|
+
* <tt>token.instruction</tt> is an instruction used to determine how this token should be treated. It will be <tt>:none</tt> for normal tokens, <tt>:region_open</tt> if the token starts a nested region, and <tt>:region_close</tt> if it closes the last opened region.
|
40
|
+
* <tt>token</tt> is itself a subclass of String, so you can use it just as you would a string. It represents the lexeme that was actually parsed.
|
41
|
+
|
42
|
+
== Releasing Syntax
|
43
|
+
|
44
|
+
* Update version in <tt>lib/syntax/version.rb</tt>.
|
45
|
+
|
46
|
+
* Build the gem, use Ruby 1.9.3.
|
47
|
+
|
48
|
+
rake clean
|
49
|
+
rake package
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'syntax'
|
2
|
+
|
3
|
+
module Syntax
|
4
|
+
|
5
|
+
class AnsiC < Tokenizer
|
6
|
+
|
7
|
+
def self.add_type(name)
|
8
|
+
ANSIC_PREDEFINED_TYPES << name
|
9
|
+
end
|
10
|
+
|
11
|
+
ANSIC_KEYWORDS =
|
12
|
+
Set.new %w{asm break case continue default do else for goto if return
|
13
|
+
switch while struct union enum typedef static register
|
14
|
+
auto extern sizeof volatile const inline restrict} unless const_defined?(:ANSIC_KEYWORDS)
|
15
|
+
|
16
|
+
ANSIC_PREDEFINED_TYPES =
|
17
|
+
Set.new %w{int long short char void signed unsigned
|
18
|
+
float double bool complex} unless const_defined?(:ANSIC_PREDEFINED_TYPES)
|
19
|
+
|
20
|
+
ANSIC_PREDEFINED_CONSTANTS =
|
21
|
+
%w{EOF NULL true false} unless const_defined?(:ANSIC_PREDEFINED_CONSTANTS)
|
22
|
+
|
23
|
+
ANSIC_ESCAPE = / [rbfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x unless const_defined?(:ANSIC_ESCAPE)
|
24
|
+
|
25
|
+
def step
|
26
|
+
case
|
27
|
+
when scan(/\s+/)
|
28
|
+
start_group :normal, matched
|
29
|
+
when match = scan(/#\s*(\w*)/)
|
30
|
+
match << scan_until(/\n/)
|
31
|
+
start_group :preprocessor, match
|
32
|
+
when scan(/ L?' (?: [^\'\n\\] | \\ #{ANSIC_ESCAPE} )? '? /ox)
|
33
|
+
start_group :char, matched
|
34
|
+
when scan(/0[xX][0-9A-Fa-f]+/)
|
35
|
+
start_group :hex, matched
|
36
|
+
when scan(/(?:0[0-7]+)(?![89.eEfF])/)
|
37
|
+
start_group :oct, matched
|
38
|
+
when scan(/(?:\d+)(?![.eEfF])/)
|
39
|
+
start_group :integer, matched
|
40
|
+
when scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
|
41
|
+
start_group :float, matched
|
42
|
+
when scan(/"(?:[^"\\]|\\.)*"/)
|
43
|
+
start_group :string, matched
|
44
|
+
when scan( %r{ ('(?: . | [\t\b\n] )') }x )
|
45
|
+
start_group :char, matched
|
46
|
+
when scan(/[a-z_][a-z_\d]+/)
|
47
|
+
if ANSIC_KEYWORDS.include?( matched )
|
48
|
+
start_group :keyword, matched
|
49
|
+
elsif ANSIC_PREDEFINED_TYPES.include?( matched )
|
50
|
+
start_group :predefined_types, matched
|
51
|
+
else
|
52
|
+
start_group :ident, matched
|
53
|
+
end
|
54
|
+
when scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
|
55
|
+
start_group :comment, matched
|
56
|
+
else
|
57
|
+
start_group :other, scan(/./x)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
SYNTAX["ansic"] = AnsiC
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|
@@ -0,0 +1,324 @@
|
|
1
|
+
require 'syntax'
|
2
|
+
|
3
|
+
module Syntax
|
4
|
+
|
5
|
+
class CSS21 < Tokenizer
|
6
|
+
|
7
|
+
CSS21_PROPERTIES = Set.new %w{font-family font-style font-variant font-weight
|
8
|
+
font-size font background-color background-image
|
9
|
+
background-repeat background-attachment background-position
|
10
|
+
color background word-spacing letter-spacing
|
11
|
+
border-top-width border-right-width border-left-width
|
12
|
+
border-bottom-width border-width list-style-type
|
13
|
+
list-style-image list-style-position text-decoration
|
14
|
+
vertical-align text-transform text-align text-indent
|
15
|
+
line-height margin-top margin-right margin-bottom
|
16
|
+
margin-left margin padding-top padding-right padding-bottom
|
17
|
+
padding-left padding border-top border-right border-bottom
|
18
|
+
border-left border width height float clear display
|
19
|
+
list-style white-space border-style border-color
|
20
|
+
azimuth border-bottom-color border-bottom-style
|
21
|
+
border-collapse border-left-color border-left-style
|
22
|
+
border-right-color border-right-style border-top-color
|
23
|
+
border-top-style caption-side cell-spacing clip column-span
|
24
|
+
content cue cue-after cue-before cursor direction
|
25
|
+
elevation font-size-adjust marks max-height max-width
|
26
|
+
min-height min-width orphans overflow page-break-after
|
27
|
+
page-break-before pause pause-after pause-before pitch
|
28
|
+
pitch-range play-during position richness right row-span
|
29
|
+
size speak speak-date speak-header speak-punctuation
|
30
|
+
speak-time speech-rate stress table-layout text-shadow top
|
31
|
+
visibility voice-family volume
|
32
|
+
widows z-index quotes
|
33
|
+
marker-offset outline outline-color outline-style outline-width
|
34
|
+
border-spacing border-collapse
|
35
|
+
page-break-before page-break-after page-break-inside
|
36
|
+
orphans widows} unless const_defined?(:CSS21_PROPERTIES)
|
37
|
+
|
38
|
+
CSS21_KEYWORDS = Set.new %w{maroon red orange yellow olive purple
|
39
|
+
fuchsia white lime green navy blue aqua teal black silver gray
|
40
|
+
scroll fixed transparent none top center bottom
|
41
|
+
left right repeat repeat-x repeat-y no-repeat
|
42
|
+
thin medium thick dotted dashed solid double groove ridge
|
43
|
+
inset outset both block inline list-item
|
44
|
+
xx-small x-small small medium large x-large xx-large
|
45
|
+
smaller italic oblique small-caps bold bolder lighter auto
|
46
|
+
disc circle square decimal lower-roman upper-roman lower-alpha
|
47
|
+
upper-alpha inside outside justify underline overline line-through
|
48
|
+
blink capitalize uppercase lowercase baseline sub super
|
49
|
+
top text-top middle bottom text-bottom pre nowrap
|
50
|
+
compact run-in inherit caption icon menu message-box small-caption
|
51
|
+
status-bar marker
|
52
|
+
table inline-table table-column-group table-column
|
53
|
+
table-row-group table-row table-cell table-caption
|
54
|
+
table-header-group table-footer-group
|
55
|
+
screen print projection braille embosed aural tv
|
56
|
+
tty handheld cross hidden open-quote close-quote
|
57
|
+
absolute relative normal collapse
|
58
|
+
serif sans-serif monospace cursive
|
59
|
+
fantasy, always} unless const_defined?(:CSS21_KEYWORDS)
|
60
|
+
|
61
|
+
HTML_TAGS = Set.new %w{a abbr address area article aside
|
62
|
+
audio b base bdo blockquote body br button canvas caption
|
63
|
+
cite code col colgroup command datalist dd del details dfn
|
64
|
+
div dl dt em embed fieldset figure footer form h1 h2 h3
|
65
|
+
h4 h5 h6 head header hgroup hr html i iframe img input ins
|
66
|
+
kbd keygen label legend li link map mark menu meta meter
|
67
|
+
nav noscript object ol optgroup option output p param pre
|
68
|
+
progress q rp rt ruby samp script section select small
|
69
|
+
source span strong style sub sup table tbody td textarea
|
70
|
+
tfoot th thead time title tr ul var video
|
71
|
+
acronym applet big center frame frameset isindex marquee
|
72
|
+
noframes s tt u} unless const_defined?(:HTML_TAGS)
|
73
|
+
|
74
|
+
MATHML_TAGS = Set.new %w{annotation annotation-xml maction
|
75
|
+
malign maligngroup malignmark malignscope math menclose
|
76
|
+
merror mfenced mfrac mglyph mi mlabeledtr mlongdiv mmultiscripts
|
77
|
+
mn mo mover mpadded mphantom mprescripts mroot mrow ms mscarries
|
78
|
+
mscarry msgroup msline mspace msqrt msrow mstack mstyle msub
|
79
|
+
msubsup msup mtable mtd mtext mtr munder munderover none
|
80
|
+
semantics} unless const_defined?(:MATHML_TAGS)
|
81
|
+
|
82
|
+
SVG_TAGS = Set.new %w{a altGlyph altGlyphDef altGlyphItem animate
|
83
|
+
animateColor animateMotion animateTransform circle clipPath
|
84
|
+
color-profile cursor definition-src defs desc ellipse feBlend
|
85
|
+
feColorMatrix feComponentTransfer feComposite feConvolveMatrix
|
86
|
+
feDiffuseLighting feDisplacementMap feDistantLight feFlood feFuncA
|
87
|
+
feFuncB feFuncG feFuncR feGaussianBlur feImage feMerge feMergeNode
|
88
|
+
feMorphology feOffset fePointLight feSpecularLighting feSpotLight
|
89
|
+
feTile feTurbulence filter font font-face font-face-format
|
90
|
+
font-face-name font-face-src font-face-uri foreignObject g glyph
|
91
|
+
glyphRef hkern image line linearGradient marker mask metadata
|
92
|
+
missing-glyph mpath path pattern polygon polyline radialGradient
|
93
|
+
rect script set stop style svg switch symbol text textPath title
|
94
|
+
tref tspan use view vkern} unless const_defined?(:SVG_TAGS)
|
95
|
+
|
96
|
+
MY_TAGS = HTML_TAGS + MATHML_TAGS + SVG_TAGS unless const_defined?(:MY_TAGS)
|
97
|
+
|
98
|
+
def setup
|
99
|
+
@selector = true
|
100
|
+
@macros = {}
|
101
|
+
@tokens = {}
|
102
|
+
|
103
|
+
# http://www.w3.org/TR/CSS21/syndata.html
|
104
|
+
macro(:h, /([0-9a-fA-F])/ ) # uppercase A-Z added?
|
105
|
+
macro(:nonascii, /([^\000-\177])/ )
|
106
|
+
macro(:nl, /(\n|\r\n|\r|\f)/ )
|
107
|
+
macro(:unicode, /(\\#{m(:h)}{1,6}(\r\n|[ \t\r\n\f])?)/ )
|
108
|
+
macro(:escape, /(#{m(:unicode)}|\\[^\r\n\f0-9a-f])/ )
|
109
|
+
macro(:nmstart, /([_a-z]|#{m(:nonascii)}|#{m(:escape)})/ )
|
110
|
+
macro(:nmchar, /([_a-z0-9-]|#{m(:nonascii)}|#{m(:escape)})/ )
|
111
|
+
macro(:string1, /(\"([^\n\r\f\\\"]|\\#{m(:nl)}|#{m(:escape)})*\")/ )
|
112
|
+
macro(:string2, /(\'([^\n\r\f\\']|\\#{m(:nl)}|#{m(:escape)})*\')/ )
|
113
|
+
macro(:invalid1, /(\"([^\n\r\f\\\"]|\\#{m(:nl)}|#{m(:escape)})*)/ )
|
114
|
+
macro(:invalid2, /(\'([^\n\r\f\\']|\\#{m(:nl)}|#{m(:escape)})*)/ )
|
115
|
+
macro(:comment, /(\/\*[^*]*\*+([^\/*][^*]*\*+)*\/)/ )
|
116
|
+
macro(:ident, /(-?#{m(:nmstart)}#{m(:nmchar)}*)/ )
|
117
|
+
macro(:name, /(#{m(:nmchar)}+)/ )
|
118
|
+
macro(:num, /([0-9]+|[0-9]*\.[0-9]+)/ )
|
119
|
+
macro(:string, /(#{m(:string1)}|#{m(:string2)})/ )
|
120
|
+
macro(:invalid, /(#{m(:invalid1)}|#{m(:invalid2)})/ )
|
121
|
+
macro(:s, /([ \t\r\n\f]+)/ )
|
122
|
+
macro(:w, /(#{m(:s)}?)/ )
|
123
|
+
macro(:A, /(a|\\0{0,4}(41|61)(\r\n|[ \t\r\n\f])?)/ )
|
124
|
+
macro(:C, /(c|\\0{0,4}(43|63)(\r\n|[ \t\r\n\f])?)/ )
|
125
|
+
macro(:D, /(d|\\0{0,4}(44|64)(\r\n|[ \t\r\n\f])?)/ )
|
126
|
+
macro(:E, /(e|\\0{0,4}(45|65)(\r\n|[ \t\r\n\f])?)/ )
|
127
|
+
macro(:G, /(g|\\0{0,4}(47|67)(\r\n|[ \t\r\n\f])?|\\g)/ )
|
128
|
+
macro(:H, /(h|\\0{0,4}(48|68)(\r\n|[ \t\r\n\f])?|\\h)/ )
|
129
|
+
macro(:I, /(i|\\0{0,4}(49|69)(\r\n|[ \t\r\n\f])?|\\i)/ )
|
130
|
+
macro(:K, /(k|\\0{0,4}(4b|6b)(\r\n|[ \t\r\n\f])?|\\k)/ )
|
131
|
+
macro(:M, /(m|\\0{0,4}(4d|6d)(\r\n|[ \t\r\n\f])?|\\m)/ )
|
132
|
+
macro(:N, /(n|\\0{0,4}(4e|6e)(\r\n|[ \t\r\n\f])?|\\n)/ )
|
133
|
+
macro(:O, /(o|\\0{0,4}(51|71)(\r\n|[ \t\r\n\f])?|\\o)/ )
|
134
|
+
macro(:P, /(p|\\0{0,4}(50|70)(\r\n|[ \t\r\n\f])?|\\p)/ )
|
135
|
+
macro(:R, /(r|\\0{0,4}(52|72)(\r\n|[ \t\r\n\f])?|\\r)/ )
|
136
|
+
macro(:S, /(s|\\0{0,4}(53|73)(\r\n|[ \t\r\n\f])?|\\s)/ )
|
137
|
+
macro(:T, /(t|\\0{0,4}(54|74)(\r\n|[ \t\r\n\f])?|\\t)/ )
|
138
|
+
macro(:X, /(x|\\0{0,4}(58|78)(\r\n|[ \t\r\n\f])?|\\x)/ )
|
139
|
+
macro(:Z, /(z|\\0{0,4}(5a|7a)(\r\n|[ \t\r\n\f])?|\\z)/ )
|
140
|
+
|
141
|
+
token(:COMMENT, /#{m(:comment)}/)
|
142
|
+
|
143
|
+
token(:HASH, /\#/)
|
144
|
+
token(:IDENT, /#{m(:ident)}/)
|
145
|
+
token(:LBRACE, /#{m(:w)}\{/)
|
146
|
+
token(:RBRACE, /#{m(:w)}\}/)
|
147
|
+
|
148
|
+
token(:S, /#{m(:s)}/)
|
149
|
+
|
150
|
+
token(:FUNCTION, /#{m(:ident)}(?=\()/)
|
151
|
+
|
152
|
+
token(:PLUS, /#{m(:w)}\+/)
|
153
|
+
token(:GREATER, /#{m(:w)}>/)
|
154
|
+
token(:COMMA, /#{m(:w)},/)
|
155
|
+
|
156
|
+
token(:CDO, /<!--/)
|
157
|
+
token(:CDC, /-->/)
|
158
|
+
token(:INCLUDES, /~=/)
|
159
|
+
token(:DASHMATCH, /\|=/)
|
160
|
+
token(:STRING, /#{m(:string)}/)
|
161
|
+
token(:INVALID, /#{m(:invalid)}/)
|
162
|
+
token(:IMPORT_SYM, /@#{m(:I)}#{m(:M)}#{m(:P)}#{m(:O)}#{m(:R)}#{m(:T)}/)
|
163
|
+
token(:PAGE_SYM, /@#{m(:P)}#{m(:A)}#{m(:G)}#{m(:E)}/)
|
164
|
+
token(:MEDIA_SYM, /@#{m(:M)}#{m(:E)}#{m(:D)}#{m(:I)}#{m(:A)}/)
|
165
|
+
token(:CHARSET_SYM, /@#{m(:C)}#{m(:H)}#{m(:A)}#{m(:R)}#{m(:S)}#{m(:E)}#{m(:T)}/)
|
166
|
+
token(:IMPORTANT_SYM, /!(#{m(:w)}|#{m(:comment)})*#{m(:I)}#{m(:M)}#{m(:P)}#{m(:O)}#{m(:R)}#{m(:T)}#{m(:A)}#{m(:N)}#{m(:T)}/)
|
167
|
+
token(:EMS, /#{m(:num)}#{m(:E)}#{m(:M)}/)
|
168
|
+
token(:EXS, /#{m(:num)}#{m(:E)}#{m(:X)}/)
|
169
|
+
|
170
|
+
token :LENGTH do |patterns|
|
171
|
+
patterns << /#{m(:num)}#{m(:P)}#{m(:X)}/
|
172
|
+
patterns << /#{m(:num)}#{m(:C)}#{m(:M)}/
|
173
|
+
patterns << /#{m(:num)}#{m(:M)}#{m(:M)}/
|
174
|
+
patterns << /#{m(:num)}#{m(:I)}#{m(:N)}/
|
175
|
+
patterns << /#{m(:num)}#{m(:P)}#{m(:T)}/
|
176
|
+
patterns << /#{m(:num)}#{m(:P)}#{m(:C)}/
|
177
|
+
end
|
178
|
+
|
179
|
+
token :ANGLE do |patterns|
|
180
|
+
patterns << /#{m(:num)}#{m(:D)}#{m(:E)}#{m(:G)}/
|
181
|
+
patterns << /#{m(:num)}#{m(:R)}#{m(:A)}#{m(:D)}/
|
182
|
+
patterns << /#{m(:num)}#{m(:G)}#{m(:R)}#{m(:A)}#{m(:D)}/
|
183
|
+
end
|
184
|
+
|
185
|
+
token :TIME do |patterns|
|
186
|
+
patterns << /#{m(:num)}#{m(:M)}#{m(:S)}/
|
187
|
+
patterns << /#{m(:num)}#{m(:S)}/
|
188
|
+
end
|
189
|
+
|
190
|
+
token :FREQ do |patterns|
|
191
|
+
patterns << /#{m(:num)}#{m(:H)}#{m(:Z)}/
|
192
|
+
patterns << /#{m(:num)}#{m(:K)}#{m(:H)}#{m(:Z)}/
|
193
|
+
end
|
194
|
+
|
195
|
+
token :URI do |patterns|
|
196
|
+
patterns << /url\(#{m(:w)}#{m(:string)}#{m(:w)}\)/
|
197
|
+
patterns << /url\(#{m(:w)}([!$%&*-~]|#{m(:nonascii)}|#{m(:escape)})*#{m(:w)}\)/
|
198
|
+
end
|
199
|
+
|
200
|
+
token(:DIMENSION, /#{m(:num)}#{m(:ident)}/)
|
201
|
+
token(:PERCENTAGE, /#{m(:num)}%/)
|
202
|
+
token(:HEXNUM, /##{m(:h)}{2,6}/)
|
203
|
+
token(:NUMBER, /#{m(:num)}/)
|
204
|
+
|
205
|
+
end
|
206
|
+
|
207
|
+
def step
|
208
|
+
|
209
|
+
case
|
210
|
+
|
211
|
+
# scanning selectors only
|
212
|
+
when @selector && scan(@tokens[:LBRACE])
|
213
|
+
@selector = false
|
214
|
+
start_group :normal, matched
|
215
|
+
when @selector && scan(@tokens[:IMPORT_SYM])
|
216
|
+
start_group :import, matched
|
217
|
+
when @selector && scan(@tokens[:PAGE_SYM])
|
218
|
+
start_group :page, matched
|
219
|
+
when @selector && scan(@tokens[:MEDIA_SYM])
|
220
|
+
start_group :media, matched
|
221
|
+
when @selector && scan(@tokens[:CHARSET_SYM])
|
222
|
+
start_group :charset, matched
|
223
|
+
when @selector && scan(@tokens[:HASH])
|
224
|
+
start_group :normal, matched
|
225
|
+
when @selector && scan(@tokens[:URI])
|
226
|
+
start_group :uri, matched
|
227
|
+
|
228
|
+
when @selector && scan(@tokens[:IDENT])
|
229
|
+
if MY_TAGS.include?( matched )
|
230
|
+
start_group :tag, matched
|
231
|
+
else
|
232
|
+
start_group :ident, matched
|
233
|
+
end
|
234
|
+
|
235
|
+
# scanning declarations only
|
236
|
+
when !@selector && scan(@tokens[:RBRACE])
|
237
|
+
@selector = true
|
238
|
+
start_group :normal, matched
|
239
|
+
when !@selector && scan(@tokens[:FUNCTION])
|
240
|
+
start_group :function, matched
|
241
|
+
when !@selector && scan(@tokens[:EMS])
|
242
|
+
start_group :ems, matched
|
243
|
+
when !@selector && scan(@tokens[:EXS])
|
244
|
+
start_group :exs, matched
|
245
|
+
when !@selector && scan(@tokens[:LENGTH])
|
246
|
+
start_group :length, matched
|
247
|
+
when !@selector && scan(@tokens[:ANGLE])
|
248
|
+
start_group :angle, matched
|
249
|
+
when !@selector && scan(@tokens[:TIME])
|
250
|
+
start_group :time, matched
|
251
|
+
when !@selector && scan(@tokens[:FREQ])
|
252
|
+
start_group :freq, matched
|
253
|
+
when !@selector && scan(@tokens[:PERCENTAGE])
|
254
|
+
start_group :percentage, matched
|
255
|
+
when !@selector && scan(@tokens[:DIMENSION])
|
256
|
+
start_group :dimension, matched
|
257
|
+
when !@selector && scan(@tokens[:NUMBER])
|
258
|
+
start_group :number, matched
|
259
|
+
when !@selector && scan(@tokens[:HEXNUM])
|
260
|
+
start_group :number, matched
|
261
|
+
when !@selector && scan(@tokens[:IMPORTANT_SYM])
|
262
|
+
start_group :important, matched
|
263
|
+
|
264
|
+
when !@selector && scan(@tokens[:IDENT])
|
265
|
+
if CSS21_PROPERTIES.include?( matched ) # are they disjoint?
|
266
|
+
start_group :property, matched
|
267
|
+
elsif CSS21_KEYWORDS.include?( matched )
|
268
|
+
start_group :keyword, matched
|
269
|
+
else
|
270
|
+
start_group :ident, matched
|
271
|
+
end
|
272
|
+
|
273
|
+
# scanning both
|
274
|
+
when scan(@tokens[:S])
|
275
|
+
start_group :normal, matched
|
276
|
+
when scan(@tokens[:COMMENT])
|
277
|
+
start_group :comment, matched
|
278
|
+
when scan(@tokens[:STRING])
|
279
|
+
start_group :string, matched
|
280
|
+
when scan(@tokens[:CDO])
|
281
|
+
start_group :cdo, matched
|
282
|
+
when scan(@tokens[:CDC])
|
283
|
+
start_group :cdc, matched
|
284
|
+
when scan(@tokens[:INVALID])
|
285
|
+
start_group :invalid, matched
|
286
|
+
else
|
287
|
+
start_group :normal, scan(/./x)
|
288
|
+
end
|
289
|
+
|
290
|
+
end
|
291
|
+
|
292
|
+
private
|
293
|
+
|
294
|
+
def macro(name, regex=nil)
|
295
|
+
regex ? @macros[name] = regex : @macros[name].source
|
296
|
+
end
|
297
|
+
|
298
|
+
def token(name, pattern=nil, &block)
|
299
|
+
raise ArgumentError, "name required" unless name
|
300
|
+
|
301
|
+
patterns = []
|
302
|
+
patterns << pattern if pattern
|
303
|
+
yield(patterns) if block_given?
|
304
|
+
if patterns.empty?
|
305
|
+
raise ArgumentError, "at least one pattern required"
|
306
|
+
end
|
307
|
+
patterns.collect! do |pattern|
|
308
|
+
source = pattern.source
|
309
|
+
source = "\\A#{source}"
|
310
|
+
Regexp.new(source, Regexp::IGNORECASE + Regexp::MULTILINE)
|
311
|
+
end
|
312
|
+
|
313
|
+
@tokens[name] = Regexp.union(*patterns)
|
314
|
+
end
|
315
|
+
|
316
|
+
alias :m :macro
|
317
|
+
|
318
|
+
end
|
319
|
+
|
320
|
+
SYNTAX["css21"] = CSS21
|
321
|
+
|
322
|
+
end
|
323
|
+
|
324
|
+
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# fortran.rb -- a free-form Fortran module for the Ruby Syntax library
|
2
|
+
#
|
3
|
+
# Copyright (C) 2009-2010 Jason Blevins
|
4
|
+
# License: 3-clause BSD (the same as Syntax itself)
|
5
|
+
|
6
|
+
require 'syntax'
|
7
|
+
|
8
|
+
module Syntax
|
9
|
+
|
10
|
+
# A tokenizer for free-form Fortran source code.
|
11
|
+
class Fortran < Tokenizer
|
12
|
+
|
13
|
+
# Fortran keywords
|
14
|
+
LC_KEYWORDS =
|
15
|
+
%w{ assign backspace call close common continue data dimension do
|
16
|
+
else end endfile endif enddo entry equivalence external
|
17
|
+
format function goto if implicit inquire intrinsic open
|
18
|
+
parameter pause print program read return rewind
|
19
|
+
save stop subroutine then write } +
|
20
|
+
[ "block data", "go to" ] +
|
21
|
+
# Fortran 90 keywords
|
22
|
+
%w{ allocate allocatable case contains cycle deallocate
|
23
|
+
elsewhere exit include interface intent module namelist nullify
|
24
|
+
only operator optional pointer private procedure public
|
25
|
+
result recursive select sequence target type use while where } +
|
26
|
+
# Fortran 95 keywords
|
27
|
+
%w{ elemental forall pure } +
|
28
|
+
# Fortran 2003 keywords
|
29
|
+
%w{ abstract associate asynchronous bind class deferred enum enumerator
|
30
|
+
extends final flush generic import non_overridable nopass pass
|
31
|
+
protected value volatile wait } +
|
32
|
+
# Fortran 2008 keywords
|
33
|
+
%w{ block codimension concurrent contiguous critical submodule
|
34
|
+
lock unlock } +
|
35
|
+
[ "error stop", "sync all", "sync images", "sync memory" ]
|
36
|
+
|
37
|
+
# List of identifiers recognized as types
|
38
|
+
LC_TYPES = [ "character", "complex", "logical", "integer", "real",
|
39
|
+
"double precision" ]
|
40
|
+
|
41
|
+
# Fortran intrinsic procedures
|
42
|
+
LC_INTRINSICS = %w{
|
43
|
+
abs achar acos acosh adjustl adjustr aimag
|
44
|
+
aint all allocated anint any asin asinh
|
45
|
+
associated atan atan2 atanh atomic_define atomic_ref
|
46
|
+
bessel_j0 bessel_j1 bessel_jn
|
47
|
+
bessel_y0 bessel_y1 bessel_yn
|
48
|
+
bit_size btest
|
49
|
+
bge bgt ble blt
|
50
|
+
c_associated c_f_pointer c_f_procpointer
|
51
|
+
c_funloc c_loc c_sizeof
|
52
|
+
ceiling char cmplx command_argument_count
|
53
|
+
compiler_version compiler_options
|
54
|
+
conjg cos cosh count cpu_time cshift
|
55
|
+
date_and_time dble digits dim dot_product dprod
|
56
|
+
dshiftl dshiftr
|
57
|
+
eoshift epsilon erf erfc erfc_scaled exp exponent
|
58
|
+
execute_command_line extends_type_of
|
59
|
+
findloc float floor fraction
|
60
|
+
gamma get_command get_command_argument
|
61
|
+
get_environment_variable
|
62
|
+
huge hypot
|
63
|
+
iachar iall iand iany ibclr ibits ibset ichar image_index
|
64
|
+
int ior iparity is_contiguous is_iostat_end is_iostat_eor
|
65
|
+
ishft ishftc
|
66
|
+
kind
|
67
|
+
lbound lcobound leadz len len_trim lge lgt lle llt
|
68
|
+
log log10 log_gamma logical
|
69
|
+
maskl maskr matmul max maxexponent maxloc maxval merge merge_bits
|
70
|
+
min minexponent minloc minval mod modulo
|
71
|
+
move_alloc mvbits
|
72
|
+
nearest new_line nint norm2 not null num_images
|
73
|
+
pack parity popcnt poppar precision present product
|
74
|
+
radix random_number random_seed range real
|
75
|
+
repeat reshape rrspacing
|
76
|
+
same_type_as scale scan selected_char_kind selected_int_kind
|
77
|
+
selected_real_kind set_exponent shape shiftl shiftr sign
|
78
|
+
sin sinh size sngl spacing spread sqrt storage_size sum system_clock
|
79
|
+
tan tanh this_image tiny trailz transfer transpose trim
|
80
|
+
ubound ucobound unpack
|
81
|
+
verify
|
82
|
+
}
|
83
|
+
|
84
|
+
# Also support all uppercase keywords, types, and procedures
|
85
|
+
KEYWORDS = Set.new LC_KEYWORDS + LC_KEYWORDS.map { |x| x.upcase }
|
86
|
+
TYPES = Set.new LC_TYPES + LC_TYPES.map { |x| x.upcase }
|
87
|
+
INTRINSICS = Set.new LC_INTRINSICS + LC_INTRINSICS.map { |x| x.upcase }
|
88
|
+
|
89
|
+
# Step through a single iteration of the tokenization process.
|
90
|
+
def step
|
91
|
+
case
|
92
|
+
when check( /program\s+/ )
|
93
|
+
start_group :keyword, scan( /program\s+/ )
|
94
|
+
start_group :function, scan_until( /(?=[;(\s]|#{EOL})/ )
|
95
|
+
when check( /subroutine\s+/ )
|
96
|
+
start_group :keyword, scan( /subroutine\s+/ )
|
97
|
+
start_group :function, scan_until( /(?=[;(\s]|#{EOL})/ )
|
98
|
+
when check( /function\s+/ )
|
99
|
+
start_group :keyword, scan( /function\s+/ )
|
100
|
+
start_group :function, scan_until( /(?=[;(\s]|#{EOL})/ )
|
101
|
+
when check( /module\s+/ )
|
102
|
+
start_group :keyword, scan( /module\s+/ )
|
103
|
+
start_group :function, scan_until( /(?=[;\s]|#{EOL})/ )
|
104
|
+
when check( /\.true\.|\.false\.|\.TRUE\.|\.FALSE\./ )
|
105
|
+
start_group :constant,
|
106
|
+
scan(/\.true\.|\.false\.|\.TRUE\.|\.FALSE\./)
|
107
|
+
when scan( /(\d+\.?\d*|\d*\.?\d+)([eEdDqQ][+-]?\d+)?(_\w+)?/ )
|
108
|
+
start_group :number, matched
|
109
|
+
when scan( /[bB]\'[01]+\'|[oO]\'[0-7]+\'|[zZ]\'[0-9a-fA-F]+\'/ )
|
110
|
+
start_group :number, matched
|
111
|
+
else
|
112
|
+
case peek(1)
|
113
|
+
when /[\n\r]/
|
114
|
+
start_group :normal, scan( /\s+/ )
|
115
|
+
when /\s/
|
116
|
+
start_group :normal, scan( /\s+/ )
|
117
|
+
when "!"
|
118
|
+
start_group :comment, scan( /![^\n\r]*/ )
|
119
|
+
when /[A-Za-z]/
|
120
|
+
word = scan( /\w+/ )
|
121
|
+
if KEYWORDS.include?(word)
|
122
|
+
start_group :keyword, word
|
123
|
+
elsif TYPES.include?(word)
|
124
|
+
start_group :type, word
|
125
|
+
elsif INTRINSICS.include?(word)
|
126
|
+
start_group :function, word
|
127
|
+
elsif
|
128
|
+
start_group :ident, word
|
129
|
+
end
|
130
|
+
when '"'
|
131
|
+
# allow for continuation characters within strings
|
132
|
+
start_group :string, scan(/"([^"]*(&[ ]*[\n\r]+)?)*"/)
|
133
|
+
when "'"
|
134
|
+
# allow for continuation characters within strings
|
135
|
+
start_group :string, scan(/'([^']*(&[ ]*[\n\r]+)?)*'/)
|
136
|
+
when /[-!?*\/+=<>()\[\]\{}:;,&|%]/
|
137
|
+
start_group :punct, scan(/./)
|
138
|
+
else
|
139
|
+
# pass everything else through
|
140
|
+
append getch
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
SYNTAX["fortran"] = Fortran
|
148
|
+
|
149
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'syntax'
|
2
|
+
|
3
|
+
module Syntax
|
4
|
+
|
5
|
+
class Javascript < Tokenizer
|
6
|
+
|
7
|
+
JAVASCRIPT_KEYWORDS =
|
8
|
+
Set.new %w{abstract break case catch class const continue
|
9
|
+
debugger default delete do else enum export extends
|
10
|
+
final finally for function goto if implements
|
11
|
+
import in instanceof interface native new
|
12
|
+
package private protected public return
|
13
|
+
static super switch synchronized this throw
|
14
|
+
throws transient try typeof
|
15
|
+
var void volatile while with} unless const_defined?(:JAVASCRIPT_KEYWORDS)
|
16
|
+
|
17
|
+
JAVASCRIPT_PREDEFINED_TYPES =
|
18
|
+
Set.new %w{boolean byte char double float int long short} unless const_defined?(:JAVASCRIPT_PREDEFINED_TYPES)
|
19
|
+
|
20
|
+
JAVASCRIPT_PREDEFINED_CONSTANTS =
|
21
|
+
%w{null true false} unless const_defined?(:JAVASCRIPT_PREDEFINED_CONSTANTS)
|
22
|
+
|
23
|
+
def step
|
24
|
+
case
|
25
|
+
when scan(/\s+/)
|
26
|
+
start_group :normal, matched
|
27
|
+
when scan(/\\u[0-9a-f]{4}/i)
|
28
|
+
start_group :unicode, matched
|
29
|
+
when scan(/0[xX][0-9A-Fa-f]+/)
|
30
|
+
start_group :hex, matched
|
31
|
+
when scan(/(?:0[0-7]+)(?![89.eEfF])/)
|
32
|
+
start_group :oct, matched
|
33
|
+
when scan(/(?:\d+)(?![.eEfF])/)
|
34
|
+
start_group :integer, matched
|
35
|
+
when scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
|
36
|
+
start_group :float, matched
|
37
|
+
when (scan(/"(?:[^"\\]|\\.)*"/) or scan(/'(?:[^'\\]|\\.)*'/) )
|
38
|
+
start_group :string, matched
|
39
|
+
when scan(/[a-z_$][a-z_\d]*/i)
|
40
|
+
if JAVASCRIPT_KEYWORDS.include?( matched )
|
41
|
+
start_group :keyword, matched
|
42
|
+
elsif JAVASCRIPT_PREDEFINED_TYPES.include?( matched )
|
43
|
+
start_group :predefined_types, matched
|
44
|
+
else
|
45
|
+
start_group :ident, matched
|
46
|
+
end
|
47
|
+
when scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
|
48
|
+
start_group :comment, matched
|
49
|
+
else
|
50
|
+
start_group :other, scan(/./x)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
SYNTAX["javascript"] = Javascript
|
57
|
+
|
58
|
+
end
|
data/lib/syntax/lang/ruby.rb
CHANGED
@@ -9,7 +9,7 @@ module Syntax
|
|
9
9
|
|
10
10
|
# The list of all identifiers recognized as keywords.
|
11
11
|
KEYWORDS =
|
12
|
-
%w{if then elsif else end begin do rescue ensure while for
|
12
|
+
Set.new %w{if then elsif else end begin do rescue ensure while for
|
13
13
|
class module def yield raise until unless and or not when
|
14
14
|
case super undef break next redo retry in return alias
|
15
15
|
defined?}
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'syntax'
|
2
|
+
|
3
|
+
module Syntax
|
4
|
+
|
5
|
+
class SQLite < Tokenizer
|
6
|
+
|
7
|
+
def self.add_function(name)
|
8
|
+
SQLite_PREDEFINED_FUNCTIONS << name
|
9
|
+
end
|
10
|
+
|
11
|
+
SQLite_PREDEFINED_FUNCTIONS = Set.new %w{abs avg coalesce count glob
|
12
|
+
hex ifnull last_insert_rowid length like load_extension lower
|
13
|
+
ltrim max min sum nullif
|
14
|
+
quote random randomblob replace round
|
15
|
+
rtrim soundex sqlite_version substr total
|
16
|
+
trim typeof upper zeroblob
|
17
|
+
date time datetime julianday
|
18
|
+
strftime over} unless const_defined?(:SQLite_PREDEFINED_FUNCTIONS)
|
19
|
+
|
20
|
+
SQLite_KEYWORDS = Set.new %w{abort add after all alter analyze
|
21
|
+
asc attach autoincrement before by cascade change character
|
22
|
+
check commit conflict constraint create cross collate
|
23
|
+
current_date current_time current_timestamp database default
|
24
|
+
deferrable deferred delete desc detach distinct drop each
|
25
|
+
escape except exclusive explain fail for foreign from
|
26
|
+
full group having if ignore immediate
|
27
|
+
index initially inner insert instead intersect into is
|
28
|
+
join key left limit modify natural of offset on or order
|
29
|
+
outer plan pragma primary query raise references reindex
|
30
|
+
rename replace restrict right rollback row select set
|
31
|
+
table temp temporary to transaction trigger union
|
32
|
+
unique update using vacuum values view virtual
|
33
|
+
where partition} unless const_defined?(:SQLite_KEYWORDS)
|
34
|
+
|
35
|
+
SQLite_DATATYPES = Set.new %w{null none text numeric integer
|
36
|
+
text blob int varchar char real float
|
37
|
+
double} unless const_defined?(:SQLite_DATATYPES)
|
38
|
+
|
39
|
+
SQLite_OPERATORS = Set.new %w{not escape isnull notnull between and
|
40
|
+
in exists case when then else begin end cast as
|
41
|
+
like glob regexp < > || * / % + - << >>
|
42
|
+
& | <= >= = == != <>
|
43
|
+
match} unless const_defined?(:SQLite_OPERATORS)
|
44
|
+
|
45
|
+
def step
|
46
|
+
case
|
47
|
+
when scan(/\s+/)
|
48
|
+
start_group :normal, matched
|
49
|
+
when scan(%r{ "(?: \\. | \\" | [^"\n])*" }x)
|
50
|
+
start_group :string, matched
|
51
|
+
when scan(%r{ '(?: \\. | \\' | [^'\n])*' }x )
|
52
|
+
start_group :string, matched
|
53
|
+
when (scan(/[a-z_][a-z_\d]+/i) or scan(/[<>\|\*%&!=]+/))
|
54
|
+
m = matched.downcase
|
55
|
+
if SQLite_PREDEFINED_FUNCTIONS.include?( m )
|
56
|
+
start_group :function, matched
|
57
|
+
elsif SQLite_KEYWORDS.include?( m )
|
58
|
+
start_group :keyword, matched
|
59
|
+
elsif SQLite_DATATYPES.include?( m )
|
60
|
+
start_group :datatype, matched
|
61
|
+
elsif SQLite_OPERATORS.include?( m )
|
62
|
+
start_group :operator, matched
|
63
|
+
else
|
64
|
+
start_group :ident, matched
|
65
|
+
end
|
66
|
+
when scan(/--.*$/)
|
67
|
+
start_group :comment, matched
|
68
|
+
else
|
69
|
+
start_group :other, scan(/./x)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
SYNTAX["sqlite"] = SQLite
|
76
|
+
|
77
|
+
end
|
data/lib/syntax/lang/yaml.rb
CHANGED
data/lib/syntax/version.rb
CHANGED
data/test/ALL-TESTS.rb
CHANGED
metadata
CHANGED
@@ -1,58 +1,67 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.8.10
|
3
|
-
specification_version: 1
|
1
|
+
--- !ruby/object:Gem::Specification
|
4
2
|
name: syntax
|
5
|
-
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
email: jamis@jamisbuck.org
|
12
|
-
homepage:
|
13
|
-
rubyforge_project:
|
14
|
-
description:
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jamis Buck
|
15
9
|
autorequire: syntax
|
16
|
-
default_executable:
|
17
10
|
bindir: bin
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
version: 0.0.0
|
25
|
-
version:
|
26
|
-
platform: ruby
|
27
|
-
authors:
|
28
|
-
- Jamis Buck
|
29
|
-
files:
|
30
|
-
- data/ruby.css
|
31
|
-
- data/xml.css
|
32
|
-
- data/yaml.css
|
33
|
-
- lib/syntax
|
34
|
-
- lib/syntax.rb
|
35
|
-
- lib/syntax/common.rb
|
36
|
-
- lib/syntax/convertors
|
37
|
-
- lib/syntax/lang
|
38
|
-
- lib/syntax/version.rb
|
39
|
-
- lib/syntax/convertors/abstract.rb
|
40
|
-
- lib/syntax/convertors/html.rb
|
41
|
-
- lib/syntax/lang/ruby.rb
|
42
|
-
- lib/syntax/lang/xml.rb
|
43
|
-
- lib/syntax/lang/yaml.rb
|
44
|
-
- test/ALL-TESTS.rb
|
45
|
-
- test/syntax
|
46
|
-
- test/tc_syntax.rb
|
47
|
-
- test/syntax/tc_ruby.rb
|
48
|
-
- test/syntax/tc_xml.rb
|
49
|
-
- test/syntax/tc_yaml.rb
|
50
|
-
- test/syntax/tokenizer_testcase.rb
|
51
|
-
test_files:
|
52
|
-
- test/ALL-TESTS.rb
|
53
|
-
rdoc_options: []
|
54
|
-
extra_rdoc_files: []
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-12-11 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description:
|
15
|
+
email: jamis@jamisbuck.org
|
55
16
|
executables: []
|
56
17
|
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/syntax/common.rb
|
21
|
+
- lib/syntax/convertors/abstract.rb
|
22
|
+
- lib/syntax/convertors/html.rb
|
23
|
+
- lib/syntax/lang/ansic.rb
|
24
|
+
- lib/syntax/lang/css21.rb
|
25
|
+
- lib/syntax/lang/fortran.rb
|
26
|
+
- lib/syntax/lang/javascript.rb
|
27
|
+
- lib/syntax/lang/ruby.rb
|
28
|
+
- lib/syntax/lang/sqlite.rb
|
29
|
+
- lib/syntax/lang/xml.rb
|
30
|
+
- lib/syntax/lang/yaml.rb
|
31
|
+
- lib/syntax/version.rb
|
32
|
+
- lib/syntax.rb
|
33
|
+
- test/ALL-TESTS.rb
|
34
|
+
- test/syntax/tc_ruby.rb
|
35
|
+
- test/syntax/tc_xml.rb
|
36
|
+
- test/syntax/tc_yaml.rb
|
37
|
+
- test/syntax/tokenizer_testcase.rb
|
38
|
+
- test/tc_syntax.rb
|
39
|
+
- README.rdoc
|
40
|
+
- LICENSE
|
41
|
+
- CHANGELOG
|
42
|
+
homepage:
|
43
|
+
licenses: []
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ! '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
57
60
|
requirements: []
|
58
|
-
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 1.8.25
|
63
|
+
signing_key:
|
64
|
+
specification_version: 3
|
65
|
+
summary: Syntax is Ruby library for performing simple syntax highlighting.
|
66
|
+
test_files:
|
67
|
+
- test/ALL-TESTS.rb
|
data/data/ruby.css
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
.ruby .normal {}
|
2
|
-
.ruby .comment { color: #005; font-style: italic; }
|
3
|
-
.ruby .keyword { color: #A00; font-weight: bold; }
|
4
|
-
.ruby .method { color: #077; }
|
5
|
-
.ruby .class { color: #074; }
|
6
|
-
.ruby .module { color: #050; }
|
7
|
-
.ruby .punct { color: #447; font-weight: bold; }
|
8
|
-
.ruby .symbol { color: #099; }
|
9
|
-
.ruby .string { color: #944; background: #FFE; }
|
10
|
-
.ruby .char { color: #F07; }
|
11
|
-
.ruby .ident { color: #004; }
|
12
|
-
.ruby .constant { color: #07F; }
|
13
|
-
.ruby .regex { color: #B66; background: #FEF; }
|
14
|
-
.ruby .number { color: #F99; }
|
15
|
-
.ruby .attribute { color: #7BB; }
|
16
|
-
.ruby .global { color: #7FB; }
|
17
|
-
.ruby .expr { color: #227; }
|
18
|
-
.ruby .escape { color: #277; }
|
data/data/xml.css
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
.xml .normal {}
|
2
|
-
.xml .namespace { color: #B66; font-weight: bold; }
|
3
|
-
.xml .tag { color: #F88; }
|
4
|
-
.xml .comment { color: #005; font-style: italic; }
|
5
|
-
.xml .punct { color: #447; font-weight: bold; }
|
6
|
-
.xml .string { color: #944; }
|
7
|
-
.xml .number { color: #F99; }
|
8
|
-
.xml .attribute { color: #BB7; }
|
data/data/yaml.css
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
.yaml .normal {}
|
2
|
-
.yaml .document { font-weight: bold; color: #07F; }
|
3
|
-
.yaml .type { font-weight: bold; color: #05C; }
|
4
|
-
.yaml .key { color: #F88; }
|
5
|
-
.yaml .comment { color: #005; font-style: italic; }
|
6
|
-
.yaml .punct { color: #447; font-weight: bold; }
|
7
|
-
.yaml .string { color: #944; }
|
8
|
-
.yaml .number { color: #F99; }
|
9
|
-
.yaml .time { color: #F99; }
|
10
|
-
.yaml .date { color: #F99; }
|
11
|
-
.yaml .ref { color: #944; }
|
12
|
-
.yaml .anchor { color: #944; }
|