@@ -0,0 +1,155 | |||||
|
1 | --- !ruby/object:Gem::Specification | |||
|
2 | name: coderay | |||
|
3 | version: !ruby/object:Gem::Version | |||
|
4 | hash: 53 | |||
|
5 | prerelease: false | |||
|
6 | segments: | |||
|
7 | - 0 | |||
|
8 | - 9 | |||
|
9 | - 7 | |||
|
10 | version: 0.9.7 | |||
|
11 | platform: ruby | |||
|
12 | authors: | |||
|
13 | - murphy | |||
|
14 | autorequire: | |||
|
15 | bindir: bin | |||
|
16 | cert_chain: [] | |||
|
17 | ||||
|
18 | date: 2011-01-15 00:00:00 +01:00 | |||
|
19 | default_executable: | |||
|
20 | dependencies: [] | |||
|
21 | ||||
|
22 | description: | | |||
|
23 | Fast and easy syntax highlighting for selected languages, written in Ruby. | |||
|
24 | Comes with RedCloth integration and LOC counter. | |||
|
25 | ||||
|
26 | email: murphy@rubychan.de | |||
|
27 | executables: | |||
|
28 | - coderay | |||
|
29 | - coderay_stylesheet | |||
|
30 | extensions: [] | |||
|
31 | ||||
|
32 | extra_rdoc_files: | |||
|
33 | - lib/README | |||
|
34 | - FOLDERS | |||
|
35 | files: | |||
|
36 | - ./lib/coderay/duo.rb | |||
|
37 | - ./lib/coderay/encoder.rb | |||
|
38 | - ./lib/coderay/encoders/_map.rb | |||
|
39 | - ./lib/coderay/encoders/comment_filter.rb | |||
|
40 | - ./lib/coderay/encoders/count.rb | |||
|
41 | - ./lib/coderay/encoders/debug.rb | |||
|
42 | - ./lib/coderay/encoders/div.rb | |||
|
43 | - ./lib/coderay/encoders/filter.rb | |||
|
44 | - ./lib/coderay/encoders/html/css.rb | |||
|
45 | - ./lib/coderay/encoders/html/numerization.rb | |||
|
46 | - ./lib/coderay/encoders/html/output.rb | |||
|
47 | - ./lib/coderay/encoders/html.rb | |||
|
48 | - ./lib/coderay/encoders/json.rb | |||
|
49 | - ./lib/coderay/encoders/lines_of_code.rb | |||
|
50 | - ./lib/coderay/encoders/null.rb | |||
|
51 | - ./lib/coderay/encoders/page.rb | |||
|
52 | - ./lib/coderay/encoders/span.rb | |||
|
53 | - ./lib/coderay/encoders/statistic.rb | |||
|
54 | - ./lib/coderay/encoders/term.rb | |||
|
55 | - ./lib/coderay/encoders/text.rb | |||
|
56 | - ./lib/coderay/encoders/token_class_filter.rb | |||
|
57 | - ./lib/coderay/encoders/xml.rb | |||
|
58 | - ./lib/coderay/encoders/yaml.rb | |||
|
59 | - ./lib/coderay/for_redcloth.rb | |||
|
60 | - ./lib/coderay/helpers/file_type.rb | |||
|
61 | - ./lib/coderay/helpers/gzip_simple.rb | |||
|
62 | - ./lib/coderay/helpers/plugin.rb | |||
|
63 | - ./lib/coderay/helpers/word_list.rb | |||
|
64 | - ./lib/coderay/scanner.rb | |||
|
65 | - ./lib/coderay/scanners/_map.rb | |||
|
66 | - ./lib/coderay/scanners/c.rb | |||
|
67 | - ./lib/coderay/scanners/cpp.rb | |||
|
68 | - ./lib/coderay/scanners/css.rb | |||
|
69 | - ./lib/coderay/scanners/debug.rb | |||
|
70 | - ./lib/coderay/scanners/delphi.rb | |||
|
71 | - ./lib/coderay/scanners/diff.rb | |||
|
72 | - ./lib/coderay/scanners/groovy.rb | |||
|
73 | - ./lib/coderay/scanners/html.rb | |||
|
74 | - ./lib/coderay/scanners/java/builtin_types.rb | |||
|
75 | - ./lib/coderay/scanners/java.rb | |||
|
76 | - ./lib/coderay/scanners/java_script-0.9.6.rb | |||
|
77 | - ./lib/coderay/scanners/java_script.rb | |||
|
78 | - ./lib/coderay/scanners/json.rb | |||
|
79 | - ./lib/coderay/scanners/nitro_xhtml.rb | |||
|
80 | - ./lib/coderay/scanners/php.rb | |||
|
81 | - ./lib/coderay/scanners/plaintext.rb | |||
|
82 | - ./lib/coderay/scanners/python.rb | |||
|
83 | - ./lib/coderay/scanners/rhtml.rb | |||
|
84 | - ./lib/coderay/scanners/ruby/patterns.rb | |||
|
85 | - ./lib/coderay/scanners/ruby.rb | |||
|
86 | - ./lib/coderay/scanners/scheme.rb | |||
|
87 | - ./lib/coderay/scanners/sql.rb | |||
|
88 | - ./lib/coderay/scanners/xml.rb | |||
|
89 | - ./lib/coderay/scanners/yaml.rb | |||
|
90 | - ./lib/coderay/style.rb | |||
|
91 | - ./lib/coderay/styles/_map.rb | |||
|
92 | - ./lib/coderay/styles/cycnus.rb | |||
|
93 | - ./lib/coderay/styles/murphy.rb | |||
|
94 | - ./lib/coderay/token_classes.rb | |||
|
95 | - ./lib/coderay/tokens.rb | |||
|
96 | - ./lib/coderay.rb | |||
|
97 | - ./Rakefile | |||
|
98 | - ./test/functional/basic.rb | |||
|
99 | - ./test/functional/basic.rbc | |||
|
100 | - ./test/functional/for_redcloth.rb | |||
|
101 | - ./test/functional/for_redcloth.rbc | |||
|
102 | - ./test/functional/load_plugin_scanner.rb | |||
|
103 | - ./test/functional/load_plugin_scanner.rbc | |||
|
104 | - ./test/functional/suite.rb | |||
|
105 | - ./test/functional/suite.rbc | |||
|
106 | - ./test/functional/vhdl.rb | |||
|
107 | - ./test/functional/vhdl.rbc | |||
|
108 | - ./test/functional/word_list.rb | |||
|
109 | - ./test/functional/word_list.rbc | |||
|
110 | - ./lib/README | |||
|
111 | - ./LICENSE | |||
|
112 | - lib/README | |||
|
113 | - FOLDERS | |||
|
114 | - bin/coderay | |||
|
115 | - bin/coderay_stylesheet | |||
|
116 | has_rdoc: true | |||
|
117 | homepage: http://coderay.rubychan.de | |||
|
118 | licenses: [] | |||
|
119 | ||||
|
120 | post_install_message: | |||
|
121 | rdoc_options: | |||
|
122 | - -SNw2 | |||
|
123 | - -mlib/README | |||
|
124 | - -t CodeRay Documentation | |||
|
125 | require_paths: | |||
|
126 | - lib | |||
|
127 | required_ruby_version: !ruby/object:Gem::Requirement | |||
|
128 | none: false | |||
|
129 | requirements: | |||
|
130 | - - ">=" | |||
|
131 | - !ruby/object:Gem::Version | |||
|
132 | hash: 51 | |||
|
133 | segments: | |||
|
134 | - 1 | |||
|
135 | - 8 | |||
|
136 | - 2 | |||
|
137 | version: 1.8.2 | |||
|
138 | required_rubygems_version: !ruby/object:Gem::Requirement | |||
|
139 | none: false | |||
|
140 | requirements: | |||
|
141 | - - ">=" | |||
|
142 | - !ruby/object:Gem::Version | |||
|
143 | hash: 3 | |||
|
144 | segments: | |||
|
145 | - 0 | |||
|
146 | version: "0" | |||
|
147 | requirements: [] | |||
|
148 | ||||
|
149 | rubyforge_project: coderay | |||
|
150 | rubygems_version: 1.3.7 | |||
|
151 | signing_key: | |||
|
152 | specification_version: 3 | |||
|
153 | summary: Fast syntax highlighting for selected languages. | |||
|
154 | test_files: | |||
|
155 | - ./test/functional/suite.rb |
@@ -0,0 +1,53 | |||||
|
1 | = CodeRay - Trunk folder structure | |||
|
2 | ||||
|
3 | == bench - Benchmarking system | |||
|
4 | ||||
|
5 | All benchmarking stuff goes here. | |||
|
6 | ||||
|
7 | Test inputs are stored in files named <code>example.<lang></code>. | |||
|
8 | Test outputs go to <code>bench/test.<encoder-default-file-extension></code>. | |||
|
9 | ||||
|
10 | Run <code>bench/bench.rb</code> to get a usage description. | |||
|
11 | ||||
|
12 | Run <code>rake bench</code> to perform an example benchmark. | |||
|
13 | ||||
|
14 | ||||
|
15 | == bin - Scripts | |||
|
16 | ||||
|
17 | Executional files for CodeRay. | |||
|
18 | ||||
|
19 | ||||
|
20 | == demo - Demos and functional tests | |||
|
21 | ||||
|
22 | Demonstrational scripts to show of CodeRay's features. | |||
|
23 | ||||
|
24 | Run them as functional tests with <code>rake test:demos</code>. | |||
|
25 | ||||
|
26 | ||||
|
27 | == etc - Lots of stuff | |||
|
28 | ||||
|
29 | Some addidtional files for CodeRay, mainly graphics and Vim scripts. | |||
|
30 | ||||
|
31 | ||||
|
32 | == gem_server - Gem output folder | |||
|
33 | ||||
|
34 | For <code>rake gem</code>. | |||
|
35 | ||||
|
36 | ||||
|
37 | == lib - CodeRay library code | |||
|
38 | ||||
|
39 | This is the base directory for the CodeRay library. | |||
|
40 | ||||
|
41 | ||||
|
42 | == rake_helpers - Rake helper libraries | |||
|
43 | ||||
|
44 | Some files to enhance Rake, including the Autumnal Rdoc template and some scripts. | |||
|
45 | ||||
|
46 | ||||
|
47 | == test - Tests | |||
|
48 | ||||
|
49 | Tests for the scanners. | |||
|
50 | ||||
|
51 | Each language has its own subfolder and sub-suite. | |||
|
52 | ||||
|
53 | Run with <code>rake test</code>. |
@@ -0,0 +1,35 | |||||
|
1 | require 'rake/rdoctask' | |||
|
2 | ||||
|
3 | ROOT = '.' | |||
|
4 | LIB_ROOT = File.join ROOT, 'lib' | |||
|
5 | EXTRA_RDOC_FILES = %w(lib/README FOLDERS) | |||
|
6 | ||||
|
7 | task :default => :test | |||
|
8 | ||||
|
9 | if File.directory? 'rake_tasks' | |||
|
10 | ||||
|
11 | # load rake tasks from subfolder | |||
|
12 | for task_file in Dir['rake_tasks/*.rake'].sort | |||
|
13 | load task_file | |||
|
14 | end | |||
|
15 | ||||
|
16 | else | |||
|
17 | ||||
|
18 | # fallback tasks when rake_tasks folder is not present | |||
|
19 | desc 'Run CodeRay tests (basic)' | |||
|
20 | task :test do | |||
|
21 | ruby './test/functional/suite.rb' | |||
|
22 | ruby './test/functional/for_redcloth.rb' | |||
|
23 | end | |||
|
24 | ||||
|
25 | desc 'Generate documentation for CodeRay' | |||
|
26 | Rake::RDocTask.new :doc do |rd| | |||
|
27 | rd.title = 'CodeRay Documentation' | |||
|
28 | rd.main = 'lib/README' | |||
|
29 | rd.rdoc_files.add Dir['lib'] | |||
|
30 | rd.rdoc_files.add 'lib/README' | |||
|
31 | rd.rdoc_files.add 'FOLDERS' | |||
|
32 | rd.rdoc_dir = 'doc' | |||
|
33 | end | |||
|
34 | ||||
|
35 | end No newline at end of file |
@@ -0,0 +1,86 | |||||
|
1 | #!/usr/bin/env ruby | |||
|
2 | # CodeRay Executable | |||
|
3 | # | |||
|
4 | # Version: 0.2 | |||
|
5 | # Author: murphy | |||
|
6 | ||||
|
7 | require 'coderay' | |||
|
8 | ||||
|
9 | if ARGV.empty? | |||
|
10 | $stderr.puts <<-USAGE | |||
|
11 | CodeRay #{CodeRay::VERSION} (http://coderay.rubychan.de) | |||
|
12 | ||||
|
13 | Usage: | |||
|
14 | coderay file [-<format>] | |||
|
15 | coderay -<lang> [-<format>] [< file] [> output] | |||
|
16 | ||||
|
17 | Defaults: | |||
|
18 | lang: based on file extension | |||
|
19 | format: ANSI colorized output for terminal, HTML page for files | |||
|
20 | ||||
|
21 | Examples: | |||
|
22 | coderay foo.rb # colorized output to terminal, based on file extension | |||
|
23 | coderay foo.rb -loc # print LOC count, based on file extension and format | |||
|
24 | coderay foo.rb > foo.html # HTML page output to file, based on extension | |||
|
25 | coderay -ruby < foo.rb # colorized output to terminal, based on lang | |||
|
26 | coderay -ruby -loc < foo.rb # print LOC count, based on lang | |||
|
27 | coderay -ruby -page foo.rb # HTML page output to terminal, based on lang and format | |||
|
28 | coderay -ruby -page foo.rb > foo.html # HTML page output to file, based on lang and format | |||
|
29 | USAGE | |||
|
30 | end | |||
|
31 | ||||
|
32 | first, second = ARGV | |||
|
33 | ||||
|
34 | def read | |||
|
35 | file = ARGV.grep(/^(?!-)/).last | |||
|
36 | if file | |||
|
37 | if File.exist?(file) | |||
|
38 | File.read file | |||
|
39 | else | |||
|
40 | $stderr.puts "No such file: #{file}" | |||
|
41 | end | |||
|
42 | else | |||
|
43 | $stdin.read | |||
|
44 | end | |||
|
45 | end | |||
|
46 | ||||
|
47 | if first | |||
|
48 | if first[/-(\w+)/] == first | |||
|
49 | lang = $1 | |||
|
50 | input = read | |||
|
51 | tokens = :scan | |||
|
52 | else | |||
|
53 | file = first | |||
|
54 | unless File.exist? file | |||
|
55 | $stderr.puts "No such file: #{file}" | |||
|
56 | exit 2 | |||
|
57 | end | |||
|
58 | tokens = CodeRay.scan_file file | |||
|
59 | end | |||
|
60 | else | |||
|
61 | $stderr.puts 'No lang/file given.' | |||
|
62 | exit 1 | |||
|
63 | end | |||
|
64 | ||||
|
65 | if second | |||
|
66 | if second[/-(\w+)/] == second | |||
|
67 | format = $1.to_sym | |||
|
68 | else | |||
|
69 | raise 'invalid format (must be -xxx)' | |||
|
70 | end | |||
|
71 | else | |||
|
72 | if $stdout.tty? | |||
|
73 | format = :term | |||
|
74 | else | |||
|
75 | $stderr.puts 'No format given; setting to default (HTML Page).' | |||
|
76 | format = :page | |||
|
77 | end | |||
|
78 | end | |||
|
79 | ||||
|
80 | if tokens == :scan | |||
|
81 | output = CodeRay::Duo[lang => format].highlight input | |||
|
82 | else | |||
|
83 | output = tokens.encode format | |||
|
84 | end | |||
|
85 | out = $stdout | |||
|
86 | out.puts output |
@@ -0,0 +1,4 | |||||
|
1 | #!/usr/bin/env ruby | |||
|
2 | require 'coderay' | |||
|
3 | ||||
|
4 | puts CodeRay::Encoders[:html]::CSS.new.stylesheet |
@@ -0,0 +1,224 | |||||
|
1 | module CodeRay | |||
|
2 | module Scanners | |||
|
3 | ||||
|
4 | class JavaScript < Scanner | |||
|
5 | ||||
|
6 | include Streamable | |||
|
7 | ||||
|
8 | register_for :java_script | |||
|
9 | file_extension 'js' | |||
|
10 | ||||
|
11 | # The actual JavaScript keywords. | |||
|
12 | KEYWORDS = %w[ | |||
|
13 | break case catch continue default delete do else | |||
|
14 | finally for function if in instanceof new | |||
|
15 | return switch throw try typeof var void while with | |||
|
16 | ] | |||
|
17 | PREDEFINED_CONSTANTS = %w[ | |||
|
18 | false null true undefined | |||
|
19 | ] | |||
|
20 | ||||
|
21 | MAGIC_VARIABLES = %w[ this arguments ] # arguments was introduced in JavaScript 1.4 | |||
|
22 | ||||
|
23 | KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[ | |||
|
24 | case delete in instanceof new return throw typeof with | |||
|
25 | ] | |||
|
26 | ||||
|
27 | # Reserved for future use. | |||
|
28 | RESERVED_WORDS = %w[ | |||
|
29 | abstract boolean byte char class debugger double enum export extends | |||
|
30 | final float goto implements import int interface long native package | |||
|
31 | private protected public short static super synchronized throws transient | |||
|
32 | volatile | |||
|
33 | ] | |||
|
34 | ||||
|
35 | IDENT_KIND = WordList.new(:ident). | |||
|
36 | add(RESERVED_WORDS, :reserved). | |||
|
37 | add(PREDEFINED_CONSTANTS, :pre_constant). | |||
|
38 | add(MAGIC_VARIABLES, :local_variable). | |||
|
39 | add(KEYWORDS, :keyword) | |||
|
40 | ||||
|
41 | ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x | |||
|
42 | UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x | |||
|
43 | REGEXP_ESCAPE = / [bBdDsSwW] /x | |||
|
44 | STRING_CONTENT_PATTERN = { | |||
|
45 | "'" => /[^\\']+/, | |||
|
46 | '"' => /[^\\"]+/, | |||
|
47 | '/' => /[^\\\/]+/, | |||
|
48 | } | |||
|
49 | KEY_CHECK_PATTERN = { | |||
|
50 | "'" => / (?> [^\\']* (?: \\. [^\\']* )* ) ' \s* : /mx, | |||
|
51 | '"' => / (?> [^\\"]* (?: \\. [^\\"]* )* ) " \s* : /mx, | |||
|
52 | } | |||
|
53 | ||||
|
54 | def scan_tokens tokens, options | |||
|
55 | ||||
|
56 | state = :initial | |||
|
57 | string_delimiter = nil | |||
|
58 | value_expected = true | |||
|
59 | key_expected = false | |||
|
60 | function_expected = false | |||
|
61 | ||||
|
62 | until eos? | |||
|
63 | ||||
|
64 | kind = nil | |||
|
65 | match = nil | |||
|
66 | ||||
|
67 | case state | |||
|
68 | ||||
|
69 | when :initial | |||
|
70 | ||||
|
71 | if match = scan(/ \s+ | \\\n /x) | |||
|
72 | value_expected = true if !value_expected && match.index(?\n) | |||
|
73 | tokens << [match, :space] | |||
|
74 | next | |||
|
75 | ||||
|
76 | elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx) | |||
|
77 | value_expected = true | |||
|
78 | kind = :comment | |||
|
79 | ||||
|
80 | elsif check(/\.?\d/) | |||
|
81 | key_expected = value_expected = false | |||
|
82 | if scan(/0[xX][0-9A-Fa-f]+/) | |||
|
83 | kind = :hex | |||
|
84 | elsif scan(/(?>0[0-7]+)(?![89.eEfF])/) | |||
|
85 | kind = :oct | |||
|
86 | elsif scan(/\d+[fF]|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/) | |||
|
87 | kind = :float | |||
|
88 | elsif scan(/\d+/) | |||
|
89 | kind = :integer | |||
|
90 | end | |||
|
91 | ||||
|
92 | elsif value_expected && match = scan(/<([[:alpha:]]\w*) (?: [^\/>]*\/> | .*?<\/\1>)/xim) | |||
|
93 | # FIXME: scan over nested tags | |||
|
94 | xml_scanner.tokenize match | |||
|
95 | value_expected = false | |||
|
96 | next | |||
|
97 | ||||
|
98 | elsif match = scan(/ [-+*=<>?:;,!&^|(\[{~%]+ | \.(?!\d) /x) | |||
|
99 | value_expected = true | |||
|
100 | last_operator = match[-1] | |||
|
101 | key_expected = (last_operator == ?{) || (last_operator == ?,) | |||
|
102 | function_expected = false | |||
|
103 | kind = :operator | |||
|
104 | ||||
|
105 | elsif scan(/ [)\]}]+ /x) | |||
|
106 | function_expected = key_expected = value_expected = false | |||
|
107 | kind = :operator | |||
|
108 | ||||
|
109 | elsif match = scan(/ [$a-zA-Z_][A-Za-z_0-9$]* /x) | |||
|
110 | kind = IDENT_KIND[match] | |||
|
111 | value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match] | |||
|
112 | # TODO: labels | |||
|
113 | if kind == :ident | |||
|
114 | if match.index(?$) # $ allowed inside an identifier | |||
|
115 | kind = :predefined | |||
|
116 | elsif function_expected | |||
|
117 | kind = :function | |||
|
118 | elsif check(/\s*[=:]\s*function\b/) | |||
|
119 | kind = :function | |||
|
120 | elsif key_expected && check(/\s*:/) | |||
|
121 | kind = :key | |||
|
122 | end | |||
|
123 | end | |||
|
124 | function_expected = (kind == :keyword) && (match == 'function') | |||
|
125 | key_expected = false | |||
|
126 | ||||
|
127 | elsif match = scan(/["']/) | |||
|
128 | if key_expected && check(KEY_CHECK_PATTERN[match]) | |||
|
129 | state = :key | |||
|
130 | else | |||
|
131 | state = :string | |||
|
132 | end | |||
|
133 | tokens << [:open, state] | |||
|
134 | string_delimiter = match | |||
|
135 | kind = :delimiter | |||
|
136 | ||||
|
137 | elsif value_expected && (match = scan(/\/(?=\S)/)) | |||
|
138 | tokens << [:open, :regexp] | |||
|
139 | state = :regexp | |||
|
140 | string_delimiter = '/' | |||
|
141 | kind = :delimiter | |||
|
142 | ||||
|
143 | elsif scan(/ \/ /x) | |||
|
144 | value_expected = true | |||
|
145 | key_expected = false | |||
|
146 | kind = :operator | |||
|
147 | ||||
|
148 | else | |||
|
149 | getch | |||
|
150 | kind = :error | |||
|
151 | ||||
|
152 | end | |||
|
153 | ||||
|
154 | when :string, :regexp, :key | |||
|
155 | if scan(STRING_CONTENT_PATTERN[string_delimiter]) | |||
|
156 | kind = :content | |||
|
157 | elsif match = scan(/["'\/]/) | |||
|
158 | tokens << [match, :delimiter] | |||
|
159 | if state == :regexp | |||
|
160 | modifiers = scan(/[gim]+/) | |||
|
161 | tokens << [modifiers, :modifier] if modifiers && !modifiers.empty? | |||
|
162 | end | |||
|
163 | tokens << [:close, state] | |||
|
164 | string_delimiter = nil | |||
|
165 | key_expected = value_expected = false | |||
|
166 | state = :initial | |||
|
167 | next | |||
|
168 | elsif state != :regexp && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)) | |||
|
169 | if string_delimiter == "'" && !(match == "\\\\" || match == "\\'") | |||
|
170 | kind = :content | |||
|
171 | else | |||
|
172 | kind = :char | |||
|
173 | end | |||
|
174 | elsif state == :regexp && scan(/ \\ (?: #{ESCAPE} | #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox) | |||
|
175 | kind = :char | |||
|
176 | elsif scan(/\\./m) | |||
|
177 | kind = :content | |||
|
178 | elsif scan(/ \\ | $ /x) | |||
|
179 | tokens << [:close, state] | |||
|
180 | kind = :error | |||
|
181 | key_expected = value_expected = false | |||
|
182 | state = :initial | |||
|
183 | else | |||
|
184 | raise_inspect "else case \" reached; %p not handled." % peek(1), tokens | |||
|
185 | end | |||
|
186 | ||||
|
187 | else | |||
|
188 | raise_inspect 'Unknown state', tokens | |||
|
189 | ||||
|
190 | end | |||
|
191 | ||||
|
192 | match ||= matched | |||
|
193 | if $CODERAY_DEBUG and not kind | |||
|
194 | raise_inspect 'Error token %p in line %d' % | |||
|
195 | [[match, kind], line], tokens | |||
|
196 | end | |||
|
197 | raise_inspect 'Empty token', tokens unless match | |||
|
198 | ||||
|
199 | tokens << [match, kind] | |||
|
200 | ||||
|
201 | end | |||
|
202 | ||||
|
203 | if [:string, :regexp].include? state | |||
|
204 | tokens << [:close, state] | |||
|
205 | end | |||
|
206 | ||||
|
207 | tokens | |||
|
208 | end | |||
|
209 | ||||
|
210 | protected | |||
|
211 | ||||
|
212 | def reset_instance | |||
|
213 | super | |||
|
214 | @xml_scanner.reset if defined? @xml_scanner | |||
|
215 | end | |||
|
216 | ||||
|
217 | def xml_scanner | |||
|
218 | @xml_scanner ||= CodeRay.scanner :xml, :tokens => @tokens, :keep_tokens => true, :keep_state => false | |||
|
219 | end | |||
|
220 | ||||
|
221 | end | |||
|
222 | ||||
|
223 | end | |||
|
224 | end |
@@ -0,0 +1,122 | |||||
|
1 | require 'test/unit' | |||
|
2 | require 'coderay' | |||
|
3 | ||||
|
4 | class BasicTest < Test::Unit::TestCase | |||
|
5 | ||||
|
6 | def test_version | |||
|
7 | assert_nothing_raised do | |||
|
8 | assert_match(/\A\d\.\d\.\d\z/, CodeRay::VERSION) | |||
|
9 | end | |||
|
10 | end | |||
|
11 | ||||
|
12 | RUBY_TEST_CODE = 'puts "Hello, World!"' | |||
|
13 | ||||
|
14 | RUBY_TEST_TOKENS = [ | |||
|
15 | ['puts', :ident], | |||
|
16 | [' ', :space], | |||
|
17 | [:open, :string], | |||
|
18 | ['"', :delimiter], | |||
|
19 | ['Hello, World!', :content], | |||
|
20 | ['"', :delimiter], | |||
|
21 | [:close, :string] | |||
|
22 | ] | |||
|
23 | def test_simple_scan | |||
|
24 | assert_nothing_raised do | |||
|
25 | assert_equal RUBY_TEST_TOKENS, CodeRay.scan(RUBY_TEST_CODE, :ruby).to_ary | |||
|
26 | end | |||
|
27 | end | |||
|
28 | ||||
|
29 | RUBY_TEST_HTML = 'puts <span class="s"><span class="dl">"</span>' + | |||
|
30 | '<span class="k">Hello, World!</span><span class="dl">"</span></span>' | |||
|
31 | def test_simple_highlight | |||
|
32 | assert_nothing_raised do | |||
|
33 | assert_equal RUBY_TEST_HTML, CodeRay.scan(RUBY_TEST_CODE, :ruby).html | |||
|
34 | end | |||
|
35 | end | |||
|
36 | ||||
|
37 | def test_duo | |||
|
38 | assert_equal(RUBY_TEST_CODE, | |||
|
39 | CodeRay::Duo[:plain, :plain].highlight(RUBY_TEST_CODE)) | |||
|
40 | assert_equal(RUBY_TEST_CODE, | |||
|
41 | CodeRay::Duo[:plain => :plain].highlight(RUBY_TEST_CODE)) | |||
|
42 | end | |||
|
43 | ||||
|
44 | def test_duo_stream | |||
|
45 | assert_equal(RUBY_TEST_CODE, | |||
|
46 | CodeRay::Duo[:plain, :plain].highlight(RUBY_TEST_CODE, :stream => true)) | |||
|
47 | end | |||
|
48 | ||||
|
49 | def test_comment_filter | |||
|
50 | assert_equal <<-EXPECTED, CodeRay.scan(<<-INPUT, :ruby).comment_filter.text | |||
|
51 | #!/usr/bin/env ruby | |||
|
52 | ||||
|
53 | code | |||
|
54 | ||||
|
55 | more code | |||
|
56 | EXPECTED | |||
|
57 | #!/usr/bin/env ruby | |||
|
58 | =begin | |||
|
59 | A multi-line comment. | |||
|
60 | =end | |||
|
61 | code | |||
|
62 | # A single-line comment. | |||
|
63 | more code # and another comment, in-line. | |||
|
64 | INPUT | |||
|
65 | end | |||
|
66 | ||||
|
67 | def test_lines_of_code | |||
|
68 | assert_equal 2, CodeRay.scan(<<-INPUT, :ruby).lines_of_code | |||
|
69 | #!/usr/bin/env ruby | |||
|
70 | =begin | |||
|
71 | A multi-line comment. | |||
|
72 | =end | |||
|
73 | code | |||
|
74 | # A single-line comment. | |||
|
75 | more code # and another comment, in-line. | |||
|
76 | INPUT | |||
|
77 | rHTML = <<-RHTML | |||
|
78 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" | |||
|
79 | "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |||
|
80 | ||||
|
81 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | |||
|
82 | <head> | |||
|
83 | <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> | |||
|
84 | <title><%= controller.controller_name.titleize %>: <%= controller.action_name %></title> | |||
|
85 | <%= stylesheet_link_tag 'scaffold' %> | |||
|
86 | </head> | |||
|
87 | <body> | |||
|
88 | ||||
|
89 | <p style="color: green"><%= flash[:notice] %></p> | |||
|
90 | ||||
|
91 | <div id="main"> | |||
|
92 | <%= yield %> | |||
|
93 | </div> | |||
|
94 | ||||
|
95 | </body> | |||
|
96 | </html> | |||
|
97 | RHTML | |||
|
98 | assert_equal 0, CodeRay.scan(rHTML, :html).lines_of_code | |||
|
99 | assert_equal 0, CodeRay.scan(rHTML, :php).lines_of_code | |||
|
100 | assert_equal 0, CodeRay.scan(rHTML, :yaml).lines_of_code | |||
|
101 | assert_equal 4, CodeRay.scan(rHTML, :rhtml).lines_of_code | |||
|
102 | end | |||
|
103 | ||||
|
104 | def test_rubygems_not_loaded | |||
|
105 | assert_equal nil, defined? Gem | |||
|
106 | end if ENV['check_rubygems'] && RUBY_VERSION < '1.9' | |||
|
107 | ||||
|
108 | def test_list_of_encoders | |||
|
109 | assert_kind_of(Array, CodeRay::Encoders.list) | |||
|
110 | assert CodeRay::Encoders.list.include?('count') | |||
|
111 | end | |||
|
112 | ||||
|
113 | def test_list_of_scanners | |||
|
114 | assert_kind_of(Array, CodeRay::Scanners.list) | |||
|
115 | assert CodeRay::Scanners.list.include?('plaintext') | |||
|
116 | end | |||
|
117 | ||||
|
118 | def test_scan_a_frozen_string | |||
|
119 | CodeRay.scan RUBY_VERSION, :ruby | |||
|
120 | end | |||
|
121 | ||||
|
122 | end |
This diff has been collapsed as it changes many lines, (2022 lines changed) Show them Hide them | |||||
@@ -0,0 +1,2022 | |||||
|
1 | !RBIX | |||
|
2 | 0 | |||
|
3 | x | |||
|
4 | M | |||
|
5 | 1 | |||
|
6 | n | |||
|
7 | n | |||
|
8 | x | |||
|
9 | 10 | |||
|
10 | __script__ | |||
|
11 | i | |||
|
12 | 53 | |||
|
13 | 5 | |||
|
14 | 7 | |||
|
15 | 0 | |||
|
16 | 64 | |||
|
17 | 47 | |||
|
18 | 49 | |||
|
19 | 1 | |||
|
20 | 1 | |||
|
21 | 15 | |||
|
22 | 5 | |||
|
23 | 7 | |||
|
24 | 2 | |||
|
25 | 64 | |||
|
26 | 47 | |||
|
27 | 49 | |||
|
28 | 1 | |||
|
29 | 1 | |||
|
30 | 15 | |||
|
31 | 99 | |||
|
32 | 7 | |||
|
33 | 3 | |||
|
34 | 45 | |||
|
35 | 4 | |||
|
36 | 5 | |||
|
37 | 43 | |||
|
38 | 6 | |||
|
39 | 43 | |||
|
40 | 7 | |||
|
41 | 65 | |||
|
42 | 49 | |||
|
43 | 8 | |||
|
44 | 3 | |||
|
45 | 13 | |||
|
46 | 99 | |||
|
47 | 12 | |||
|
48 | 7 | |||
|
49 | 9 | |||
|
50 | 12 | |||
|
51 | 7 | |||
|
52 | 10 | |||
|
53 | 12 | |||
|
54 | 65 | |||
|
55 | 12 | |||
|
56 | 49 | |||
|
57 | 11 | |||
|
58 | 4 | |||
|
59 | 15 | |||
|
60 | 49 | |||
|
61 | 9 | |||
|
62 | 0 | |||
|
63 | 15 | |||
|
64 | 2 | |||
|
65 | 11 | |||
|
66 | I | |||
|
67 | 6 | |||
|
68 | I | |||
|
69 | 0 | |||
|
70 | I | |||
|
71 | 0 | |||
|
72 | I | |||
|
73 | 0 | |||
|
74 | n | |||
|
75 | p | |||
|
76 | 12 | |||
|
77 | s | |||
|
78 | 9 | |||
|
79 | test/unit | |||
|
80 | x | |||
|
81 | 7 | |||
|
82 | require | |||
|
83 | s | |||
|
84 | 7 | |||
|
85 | coderay | |||
|
86 | x | |||
|
87 | 9 | |||
|
88 | BasicTest | |||
|
89 | x | |||
|
90 | 4 | |||
|
91 | Test | |||
|
92 | n | |||
|
93 | x | |||
|
94 | 4 | |||
|
95 | Unit | |||
|
96 | x | |||
|
97 | 8 | |||
|
98 | TestCase | |||
|
99 | x | |||
|
100 | 10 | |||
|
101 | open_class | |||
|
102 | x | |||
|
103 | 14 | |||
|
104 | __class_init__ | |||
|
105 | M | |||
|
106 | 1 | |||
|
107 | n | |||
|
108 | n | |||
|
109 | x | |||
|
110 | 9 | |||
|
111 | BasicTest | |||
|
112 | i | |||
|
113 | 263 | |||
|
114 | 5 | |||
|
115 | 66 | |||
|
116 | 99 | |||
|
117 | 7 | |||
|
118 | 0 | |||
|
119 | 7 | |||
|
120 | 1 | |||
|
121 | 65 | |||
|
122 | 67 | |||
|
123 | 49 | |||
|
124 | 2 | |||
|
125 | 0 | |||
|
126 | 49 | |||
|
127 | 3 | |||
|
128 | 4 | |||
|
129 | 15 | |||
|
130 | 65 | |||
|
131 | 7 | |||
|
132 | 4 | |||
|
133 | 7 | |||
|
134 | 5 | |||
|
135 | 64 | |||
|
136 | 49 | |||
|
137 | 6 | |||
|
138 | 2 | |||
|
139 | 15 | |||
|
140 | 65 | |||
|
141 | 7 | |||
|
142 | 7 | |||
|
143 | 7 | |||
|
144 | 8 | |||
|
145 | 64 | |||
|
146 | 7 | |||
|
147 | 9 | |||
|
148 | 35 | |||
|
149 | 2 | |||
|
150 | 7 | |||
|
151 | 10 | |||
|
152 | 64 | |||
|
153 | 7 | |||
|
154 | 11 | |||
|
155 | 35 | |||
|
156 | 2 | |||
|
157 | 7 | |||
|
158 | 12 | |||
|
159 | 7 | |||
|
160 | 13 | |||
|
161 | 35 | |||
|
162 | 2 | |||
|
163 | 7 | |||
|
164 | 14 | |||
|
165 | 64 | |||
|
166 | 7 | |||
|
167 | 15 | |||
|
168 | 35 | |||
|
169 | 2 | |||
|
170 | 7 | |||
|
171 | 16 | |||
|
172 | 64 | |||
|
173 | 7 | |||
|
174 | 17 | |||
|
175 | 35 | |||
|
176 | 2 | |||
|
177 | 7 | |||
|
178 | 14 | |||
|
179 | 64 | |||
|
180 | 7 | |||
|
181 | 15 | |||
|
182 | 35 | |||
|
183 | 2 | |||
|
184 | 7 | |||
|
185 | 18 | |||
|
186 | 7 | |||
|
187 | 13 | |||
|
188 | 35 | |||
|
189 | 2 | |||
|
190 | 35 | |||
|
191 | 7 | |||
|
192 | 49 | |||
|
193 | 6 | |||
|
194 | 2 | |||
|
195 | 15 | |||
|
196 | 99 | |||
|
197 | 7 | |||
|
198 | 19 | |||
|
199 | 7 | |||
|
200 | 20 | |||
|
201 | 65 | |||
|
202 | 67 | |||
|
203 | 49 | |||
|
204 | 2 | |||
|
205 | 0 | |||
|
206 | 49 | |||
|
207 | 3 | |||
|
208 | 4 | |||
|
209 | 15 | |||
|
210 | 65 | |||
|
211 | 7 | |||
|
212 | 21 | |||
|
213 | 7 | |||
|
214 | 22 | |||
|
215 | 64 | |||
|
216 | 7 | |||
|
217 | 23 | |||
|
218 | 64 | |||
|
219 | 81 | |||
|
220 | 24 | |||
|
221 | 49 | |||
|
222 | 6 | |||
|
223 | 2 | |||
|
224 | 15 | |||
|
225 | 99 | |||
|
226 | 7 | |||
|
227 | 25 | |||
|
228 | 7 | |||
|
229 | 26 | |||
|
230 | 65 | |||
|
231 | 67 | |||
|
232 | 49 | |||
|
233 | 2 | |||
|
234 | 0 | |||
|
235 | 49 | |||
|
236 | 3 | |||
|
237 | 4 | |||
|
238 | 15 | |||
|
239 | 99 | |||
|
240 | 7 | |||
|
241 | 27 | |||
|
242 | 7 | |||
|
243 | 28 | |||
|
244 | 65 | |||
|
245 | 67 | |||
|
246 | 49 | |||
|
247 | 2 | |||
|
248 | 0 | |||
|
249 | 49 | |||
|
250 | 3 | |||
|
251 | 4 | |||
|
252 | 15 | |||
|
253 | 99 | |||
|
254 | 7 | |||
|
255 | 29 | |||
|
256 | 7 | |||
|
257 | 30 | |||
|
258 | 65 | |||
|
259 | 67 | |||
|
260 | 49 | |||
|
261 | 2 | |||
|
262 | 0 | |||
|
263 | 49 | |||
|
264 | 3 | |||
|
265 | 4 | |||
|
266 | 15 | |||
|
267 | 99 | |||
|
268 | 7 | |||
|
269 | 31 | |||
|
270 | 7 | |||
|
271 | 32 | |||
|
272 | 65 | |||
|
273 | 67 | |||
|
274 | 49 | |||
|
275 | 2 | |||
|
276 | 0 | |||
|
277 | 49 | |||
|
278 | 3 | |||
|
279 | 4 | |||
|
280 | 15 | |||
|
281 | 99 | |||
|
282 | 7 | |||
|
283 | 33 | |||
|
284 | 7 | |||
|
285 | 34 | |||
|
286 | 65 | |||
|
287 | 67 | |||
|
288 | 49 | |||
|
289 | 2 | |||
|
290 | 0 | |||
|
291 | 49 | |||
|
292 | 3 | |||
|
293 | 4 | |||
|
294 | 15 | |||
|
295 | 45 | |||
|
296 | 35 | |||
|
297 | 36 | |||
|
298 | 7 | |||
|
299 | 37 | |||
|
300 | 64 | |||
|
301 | 49 | |||
|
302 | 38 | |||
|
303 | 1 | |||
|
304 | 13 | |||
|
305 | 9 | |||
|
306 | 202 | |||
|
307 | 15 | |||
|
308 | 45 | |||
|
309 | 39 | |||
|
310 | 40 | |||
|
311 | 7 | |||
|
312 | 41 | |||
|
313 | 64 | |||
|
314 | 84 | |||
|
315 | 42 | |||
|
316 | 9 | |||
|
317 | 219 | |||
|
318 | 99 | |||
|
319 | 7 | |||
|
320 | 43 | |||
|
321 | 7 | |||
|
322 | 44 | |||
|
323 | 65 | |||
|
324 | 67 | |||
|
325 | 49 | |||
|
326 | 2 | |||
|
327 | 0 | |||
|
328 | 49 | |||
|
329 | 3 | |||
|
330 | 4 | |||
|
331 | 8 | |||
|
332 | 220 | |||
|
333 | 1 | |||
|
334 | 15 | |||
|
335 | 99 | |||
|
336 | 7 | |||
|
337 | 45 | |||
|
338 | 7 | |||
|
339 | 46 | |||
|
340 | 65 | |||
|
341 | 67 | |||
|
342 | 49 | |||
|
343 | 2 | |||
|
344 | 0 | |||
|
345 | 49 | |||
|
346 | 3 | |||
|
347 | 4 | |||
|
348 | 15 | |||
|
349 | 99 | |||
|
350 | 7 | |||
|
351 | 47 | |||
|
352 | 7 | |||
|
353 | 48 | |||
|
354 | 65 | |||
|
355 | 67 | |||
|
356 | 49 | |||
|
357 | 2 | |||
|
358 | 0 | |||
|
359 | 49 | |||
|
360 | 3 | |||
|
361 | 4 | |||
|
362 | 15 | |||
|
363 | 99 | |||
|
364 | 7 | |||
|
365 | 49 | |||
|
366 | 7 | |||
|
367 | 50 | |||
|
368 | 65 | |||
|
369 | 67 | |||
|
370 | 49 | |||
|
371 | 2 | |||
|
372 | 0 | |||
|
373 | 49 | |||
|
374 | 3 | |||
|
375 | 4 | |||
|
376 | 11 | |||
|
377 | I | |||
|
378 | a | |||
|
379 | I | |||
|
380 | 0 | |||
|
381 | I | |||
|
382 | 0 | |||
|
383 | I | |||
|
384 | 0 | |||
|
385 | n | |||
|
386 | p | |||
|
387 | 51 | |||
|
388 | x | |||
|
389 | 12 | |||
|
390 | test_version | |||
|
391 | M | |||
|
392 | 1 | |||
|
393 | n | |||
|
394 | n | |||
|
395 | x | |||
|
396 | 12 | |||
|
397 | test_version | |||
|
398 | i | |||
|
399 | 8 | |||
|
400 | 5 | |||
|
401 | 56 | |||
|
402 | 0 | |||
|
403 | 47 | |||
|
404 | 50 | |||
|
405 | 1 | |||
|
406 | 0 | |||
|
407 | 11 | |||
|
408 | I | |||
|
409 | 2 | |||
|
410 | I | |||
|
411 | 0 | |||
|
412 | I | |||
|
413 | 0 | |||
|
414 | I | |||
|
415 | 0 | |||
|
416 | n | |||
|
417 | p | |||
|
418 | 2 | |||
|
419 | M | |||
|
420 | 1 | |||
|
421 | p | |||
|
422 | 2 | |||
|
423 | x | |||
|
424 | 9 | |||
|
425 | for_block | |||
|
426 | t | |||
|
427 | n | |||
|
428 | x | |||
|
429 | 12 | |||
|
430 | test_version | |||
|
431 | i | |||
|
432 | 29 | |||
|
433 | 5 | |||
|
434 | 7 | |||
|
435 | 0 | |||
|
436 | 13 | |||
|
437 | 70 | |||
|
438 | 9 | |||
|
439 | 19 | |||
|
440 | 15 | |||
|
441 | 44 | |||
|
442 | 43 | |||
|
443 | 1 | |||
|
444 | 7 | |||
|
445 | 2 | |||
|
446 | 78 | |||
|
447 | 49 | |||
|
448 | 3 | |||
|
449 | 2 | |||
|
450 | 6 | |||
|
451 | 0 | |||
|
452 | 45 | |||
|
453 | 4 | |||
|
454 | 5 | |||
|
455 | 43 | |||
|
456 | 6 | |||
|
457 | 47 | |||
|
458 | 49 | |||
|
459 | 7 | |||
|
460 | 2 | |||
|
461 | 11 | |||
|
462 | I | |||
|
463 | 5 | |||
|
464 | I | |||
|
465 | 0 | |||
|
466 | I | |||
|
467 | 0 | |||
|
468 | I | |||
|
469 | 0 | |||
|
470 | I | |||
|
471 | -2 | |||
|
472 | p | |||
|
473 | 8 | |||
|
474 | n | |||
|
475 | x | |||
|
476 | 6 | |||
|
477 | Regexp | |||
|
478 | s | |||
|
479 | 14 | |||
|
480 | \A\d\.\d\.\d\z | |||
|
481 | x | |||
|
482 | 3 | |||
|
483 | new | |||
|
484 | x | |||
|
485 | 7 | |||
|
486 | CodeRay | |||
|
487 | n | |||
|
488 | x | |||
|
489 | 7 | |||
|
490 | VERSION | |||
|
491 | x | |||
|
492 | 12 | |||
|
493 | assert_match | |||
|
494 | p | |||
|
495 | 5 | |||
|
496 | I | |||
|
497 | 0 | |||
|
498 | I | |||
|
499 | 7 | |||
|
500 | I | |||
|
501 | 0 | |||
|
502 | I | |||
|
503 | 8 | |||
|
504 | I | |||
|
505 | 1d | |||
|
506 | x | |||
|
507 | 55 | |||
|
508 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
509 | p | |||
|
510 | 0 | |||
|
511 | x | |||
|
512 | 21 | |||
|
513 | assert_nothing_raised | |||
|
514 | p | |||
|
515 | 5 | |||
|
516 | I | |||
|
517 | 0 | |||
|
518 | I | |||
|
519 | 6 | |||
|
520 | I | |||
|
521 | 0 | |||
|
522 | I | |||
|
523 | 7 | |||
|
524 | I | |||
|
525 | 8 | |||
|
526 | x | |||
|
527 | 55 | |||
|
528 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
529 | p | |||
|
530 | 0 | |||
|
531 | x | |||
|
532 | 17 | |||
|
533 | method_visibility | |||
|
534 | x | |||
|
535 | 15 | |||
|
536 | add_defn_method | |||
|
537 | x | |||
|
538 | 14 | |||
|
539 | RUBY_TEST_CODE | |||
|
540 | s | |||
|
541 | 20 | |||
|
542 | puts "Hello, World!" | |||
|
543 | x | |||
|
544 | 9 | |||
|
545 | const_set | |||
|
546 | x | |||
|
547 | 16 | |||
|
548 | RUBY_TEST_TOKENS | |||
|
549 | s | |||
|
550 | 4 | |||
|
551 | puts | |||
|
552 | x | |||
|
553 | 5 | |||
|
554 | ident | |||
|
555 | s | |||
|
556 | 1 | |||
|
557 | ||||
|
558 | x | |||
|
559 | 5 | |||
|
560 | space | |||
|
561 | x | |||
|
562 | 4 | |||
|
563 | open | |||
|
564 | x | |||
|
565 | 6 | |||
|
566 | string | |||
|
567 | s | |||
|
568 | 1 | |||
|
569 | " | |||
|
570 | x | |||
|
571 | 9 | |||
|
572 | delimiter | |||
|
573 | s | |||
|
574 | 13 | |||
|
575 | Hello, World! | |||
|
576 | x | |||
|
577 | 7 | |||
|
578 | content | |||
|
579 | x | |||
|
580 | 5 | |||
|
581 | close | |||
|
582 | x | |||
|
583 | 16 | |||
|
584 | test_simple_scan | |||
|
585 | M | |||
|
586 | 1 | |||
|
587 | n | |||
|
588 | n | |||
|
589 | x | |||
|
590 | 16 | |||
|
591 | test_simple_scan | |||
|
592 | i | |||
|
593 | 8 | |||
|
594 | 5 | |||
|
595 | 56 | |||
|
596 | 0 | |||
|
597 | 47 | |||
|
598 | 50 | |||
|
599 | 1 | |||
|
600 | 0 | |||
|
601 | 11 | |||
|
602 | I | |||
|
603 | 2 | |||
|
604 | I | |||
|
605 | 0 | |||
|
606 | I | |||
|
607 | 0 | |||
|
608 | I | |||
|
609 | 0 | |||
|
610 | n | |||
|
611 | p | |||
|
612 | 2 | |||
|
613 | M | |||
|
614 | 1 | |||
|
615 | p | |||
|
616 | 2 | |||
|
617 | x | |||
|
618 | 9 | |||
|
619 | for_block | |||
|
620 | t | |||
|
621 | n | |||
|
622 | x | |||
|
623 | 16 | |||
|
624 | test_simple_scan | |||
|
625 | i | |||
|
626 | 23 | |||
|
627 | 5 | |||
|
628 | 45 | |||
|
629 | 0 | |||
|
630 | 1 | |||
|
631 | 45 | |||
|
632 | 2 | |||
|
633 | 3 | |||
|
634 | 45 | |||
|
635 | 4 | |||
|
636 | 5 | |||
|
637 | 7 | |||
|
638 | 6 | |||
|
639 | 49 | |||
|
640 | 7 | |||
|
641 | 2 | |||
|
642 | 49 | |||
|
643 | 8 | |||
|
644 | 0 | |||
|
645 | 47 | |||
|
646 | 49 | |||
|
647 | 9 | |||
|
648 | 2 | |||
|
649 | 11 | |||
|
650 | I | |||
|
651 | 6 | |||
|
652 | I | |||
|
653 | 0 | |||
|
654 | I | |||
|
655 | 0 | |||
|
656 | I | |||
|
657 | 0 | |||
|
658 | I | |||
|
659 | -2 | |||
|
660 | p | |||
|
661 | 10 | |||
|
662 | x | |||
|
663 | 16 | |||
|
664 | RUBY_TEST_TOKENS | |||
|
665 | n | |||
|
666 | x | |||
|
667 | 7 | |||
|
668 | CodeRay | |||
|
669 | n | |||
|
670 | x | |||
|
671 | 14 | |||
|
672 | RUBY_TEST_CODE | |||
|
673 | n | |||
|
674 | x | |||
|
675 | 4 | |||
|
676 | ruby | |||
|
677 | x | |||
|
678 | 4 | |||
|
679 | scan | |||
|
680 | x | |||
|
681 | 6 | |||
|
682 | to_ary | |||
|
683 | x | |||
|
684 | 12 | |||
|
685 | assert_equal | |||
|
686 | p | |||
|
687 | 5 | |||
|
688 | I | |||
|
689 | 0 | |||
|
690 | I | |||
|
691 | 18 | |||
|
692 | I | |||
|
693 | 0 | |||
|
694 | I | |||
|
695 | 19 | |||
|
696 | I | |||
|
697 | 17 | |||
|
698 | x | |||
|
699 | 55 | |||
|
700 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
701 | p | |||
|
702 | 0 | |||
|
703 | x | |||
|
704 | 21 | |||
|
705 | assert_nothing_raised | |||
|
706 | p | |||
|
707 | 5 | |||
|
708 | I | |||
|
709 | 0 | |||
|
710 | I | |||
|
711 | 17 | |||
|
712 | I | |||
|
713 | 0 | |||
|
714 | I | |||
|
715 | 18 | |||
|
716 | I | |||
|
717 | 8 | |||
|
718 | x | |||
|
719 | 55 | |||
|
720 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
721 | p | |||
|
722 | 0 | |||
|
723 | x | |||
|
724 | 14 | |||
|
725 | RUBY_TEST_HTML | |||
|
726 | s | |||
|
727 | 51 | |||
|
728 | puts <span class="s"><span class="dl">"</span> | |||
|
729 | s | |||
|
730 | 73 | |||
|
731 | <span class="k">Hello, World!</span><span class="dl">"</span></span> | |||
|
732 | x | |||
|
733 | 1 | |||
|
734 | + | |||
|
735 | x | |||
|
736 | 21 | |||
|
737 | test_simple_highlight | |||
|
738 | M | |||
|
739 | 1 | |||
|
740 | n | |||
|
741 | n | |||
|
742 | x | |||
|
743 | 21 | |||
|
744 | test_simple_highlight | |||
|
745 | i | |||
|
746 | 8 | |||
|
747 | 5 | |||
|
748 | 56 | |||
|
749 | 0 | |||
|
750 | 47 | |||
|
751 | 50 | |||
|
752 | 1 | |||
|
753 | 0 | |||
|
754 | 11 | |||
|
755 | I | |||
|
756 | 2 | |||
|
757 | I | |||
|
758 | 0 | |||
|
759 | I | |||
|
760 | 0 | |||
|
761 | I | |||
|
762 | 0 | |||
|
763 | n | |||
|
764 | p | |||
|
765 | 2 | |||
|
766 | M | |||
|
767 | 1 | |||
|
768 | p | |||
|
769 | 2 | |||
|
770 | x | |||
|
771 | 9 | |||
|
772 | for_block | |||
|
773 | t | |||
|
774 | n | |||
|
775 | x | |||
|
776 | 21 | |||
|
777 | test_simple_highlight | |||
|
778 | i | |||
|
779 | 23 | |||
|
780 | 5 | |||
|
781 | 45 | |||
|
782 | 0 | |||
|
783 | 1 | |||
|
784 | 45 | |||
|
785 | 2 | |||
|
786 | 3 | |||
|
787 | 45 | |||
|
788 | 4 | |||
|
789 | 5 | |||
|
790 | 7 | |||
|
791 | 6 | |||
|
792 | 49 | |||
|
793 | 7 | |||
|
794 | 2 | |||
|
795 | 49 | |||
|
796 | 8 | |||
|
797 | 0 | |||
|
798 | 47 | |||
|
799 | 49 | |||
|
800 | 9 | |||
|
801 | 2 | |||
|
802 | 11 | |||
|
803 | I | |||
|
804 | 6 | |||
|
805 | I | |||
|
806 | 0 | |||
|
807 | I | |||
|
808 | 0 | |||
|
809 | I | |||
|
810 | 0 | |||
|
811 | I | |||
|
812 | -2 | |||
|
813 | p | |||
|
814 | 10 | |||
|
815 | x | |||
|
816 | 14 | |||
|
817 | RUBY_TEST_HTML | |||
|
818 | n | |||
|
819 | x | |||
|
820 | 7 | |||
|
821 | CodeRay | |||
|
822 | n | |||
|
823 | x | |||
|
824 | 14 | |||
|
825 | RUBY_TEST_CODE | |||
|
826 | n | |||
|
827 | x | |||
|
828 | 4 | |||
|
829 | ruby | |||
|
830 | x | |||
|
831 | 4 | |||
|
832 | scan | |||
|
833 | x | |||
|
834 | 4 | |||
|
835 | html | |||
|
836 | x | |||
|
837 | 12 | |||
|
838 | assert_equal | |||
|
839 | p | |||
|
840 | 5 | |||
|
841 | I | |||
|
842 | 0 | |||
|
843 | I | |||
|
844 | 20 | |||
|
845 | I | |||
|
846 | 0 | |||
|
847 | I | |||
|
848 | 21 | |||
|
849 | I | |||
|
850 | 17 | |||
|
851 | x | |||
|
852 | 55 | |||
|
853 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
854 | p | |||
|
855 | 0 | |||
|
856 | x | |||
|
857 | 21 | |||
|
858 | assert_nothing_raised | |||
|
859 | p | |||
|
860 | 5 | |||
|
861 | I | |||
|
862 | 0 | |||
|
863 | I | |||
|
864 | 1f | |||
|
865 | I | |||
|
866 | 0 | |||
|
867 | I | |||
|
868 | 20 | |||
|
869 | I | |||
|
870 | 8 | |||
|
871 | x | |||
|
872 | 55 | |||
|
873 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
874 | p | |||
|
875 | 0 | |||
|
876 | x | |||
|
877 | 8 | |||
|
878 | test_duo | |||
|
879 | M | |||
|
880 | 1 | |||
|
881 | n | |||
|
882 | n | |||
|
883 | x | |||
|
884 | 8 | |||
|
885 | test_duo | |||
|
886 | i | |||
|
887 | 66 | |||
|
888 | 5 | |||
|
889 | 45 | |||
|
890 | 0 | |||
|
891 | 1 | |||
|
892 | 45 | |||
|
893 | 2 | |||
|
894 | 3 | |||
|
895 | 43 | |||
|
896 | 4 | |||
|
897 | 7 | |||
|
898 | 5 | |||
|
899 | 7 | |||
|
900 | 5 | |||
|
901 | 49 | |||
|
902 | 6 | |||
|
903 | 2 | |||
|
904 | 45 | |||
|
905 | 0 | |||
|
906 | 7 | |||
|
907 | 49 | |||
|
908 | 8 | |||
|
909 | 1 | |||
|
910 | 47 | |||
|
911 | 49 | |||
|
912 | 9 | |||
|
913 | 2 | |||
|
914 | 15 | |||
|
915 | 5 | |||
|
916 | 45 | |||
|
917 | 0 | |||
|
918 | 10 | |||
|
919 | 45 | |||
|
920 | 2 | |||
|
921 | 11 | |||
|
922 | 43 | |||
|
923 | 4 | |||
|
924 | 44 | |||
|
925 | 43 | |||
|
926 | 12 | |||
|
927 | 79 | |||
|
928 | 49 | |||
|
929 | 13 | |||
|
930 | 1 | |||
|
931 | 13 | |||
|
932 | 7 | |||
|
933 | 5 | |||
|
934 | 7 | |||
|
935 | 5 | |||
|
936 | 49 | |||
|
937 | 14 | |||
|
938 | 2 | |||
|
939 | 15 | |||
|
940 | 49 | |||
|
941 | 6 | |||
|
942 | 1 | |||
|
943 | 45 | |||
|
944 | 0 | |||
|
945 | 15 | |||
|
946 | 49 | |||
|
947 | 8 | |||
|
948 | 1 | |||
|
949 | 47 | |||
|
950 | 49 | |||
|
951 | 9 | |||
|
952 | 2 | |||
|
953 | 11 | |||
|
954 | I | |||
|
955 | 7 | |||
|
956 | I | |||
|
957 | 0 | |||
|
958 | I | |||
|
959 | 0 | |||
|
960 | I | |||
|
961 | 0 | |||
|
962 | n | |||
|
963 | p | |||
|
964 | 16 | |||
|
965 | x | |||
|
966 | 14 | |||
|
967 | RUBY_TEST_CODE | |||
|
968 | n | |||
|
969 | x | |||
|
970 | 7 | |||
|
971 | CodeRay | |||
|
972 | n | |||
|
973 | x | |||
|
974 | 3 | |||
|
975 | Duo | |||
|
976 | x | |||
|
977 | 5 | |||
|
978 | plain | |||
|
979 | x | |||
|
980 | 2 | |||
|
981 | [] | |||
|
982 | n | |||
|
983 | x | |||
|
984 | 9 | |||
|
985 | highlight | |||
|
986 | x | |||
|
987 | 12 | |||
|
988 | assert_equal | |||
|
989 | n | |||
|
990 | n | |||
|
991 | x | |||
|
992 | 4 | |||
|
993 | Hash | |||
|
994 | x | |||
|
995 | 16 | |||
|
996 | new_from_literal | |||
|
997 | x | |||
|
998 | 3 | |||
|
999 | []= | |||
|
1000 | n | |||
|
1001 | p | |||
|
1002 | 15 | |||
|
1003 | I | |||
|
1004 | 0 | |||
|
1005 | I | |||
|
1006 | 25 | |||
|
1007 | I | |||
|
1008 | 0 | |||
|
1009 | I | |||
|
1010 | 26 | |||
|
1011 | I | |||
|
1012 | 4 | |||
|
1013 | I | |||
|
1014 | 27 | |||
|
1015 | I | |||
|
1016 | 16 | |||
|
1017 | I | |||
|
1018 | 26 | |||
|
1019 | I | |||
|
1020 | 1b | |||
|
1021 | I | |||
|
1022 | 28 | |||
|
1023 | I | |||
|
1024 | 1f | |||
|
1025 | I | |||
|
1026 | 29 | |||
|
1027 | I | |||
|
1028 | 3d | |||
|
1029 | I | |||
|
1030 | 28 | |||
|
1031 | I | |||
|
1032 | 42 | |||
|
1033 | x | |||
|
1034 | 55 | |||
|
1035 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
1036 | p | |||
|
1037 | 0 | |||
|
1038 | x | |||
|
1039 | 15 | |||
|
1040 | test_duo_stream | |||
|
1041 | M | |||
|
1042 | 1 | |||
|
1043 | n | |||
|
1044 | n | |||
|
1045 | x | |||
|
1046 | 15 | |||
|
1047 | test_duo_stream | |||
|
1048 | i | |||
|
1049 | 42 | |||
|
1050 | 5 | |||
|
1051 | 45 | |||
|
1052 | 0 | |||
|
1053 | 1 | |||
|
1054 | 45 | |||
|
1055 | 2 | |||
|
1056 | 3 | |||
|
1057 | 43 | |||
|
1058 | 4 | |||
|
1059 | 7 | |||
|
1060 | 5 | |||
|
1061 | 7 | |||
|
1062 | 5 | |||
|
1063 | 49 | |||
|
1064 | 6 | |||
|
1065 | 2 | |||
|
1066 | 45 | |||
|
1067 | 0 | |||
|
1068 | 7 | |||
|
1069 | 44 | |||
|
1070 | 43 | |||
|
1071 | 8 | |||
|
1072 | 79 | |||
|
1073 | 49 | |||
|
1074 | 9 | |||
|
1075 | 1 | |||
|
1076 | 13 | |||
|
1077 | 7 | |||
|
1078 | 10 | |||
|
1079 | 2 | |||
|
1080 | 49 | |||
|
1081 | 11 | |||
|
1082 | 2 | |||
|
1083 | 15 | |||
|
1084 | 49 | |||
|
1085 | 12 | |||
|
1086 | 2 | |||
|
1087 | 47 | |||
|
1088 | 49 | |||
|
1089 | 13 | |||
|
1090 | 2 | |||
|
1091 | 11 | |||
|
1092 | I | |||
|
1093 | 8 | |||
|
1094 | I | |||
|
1095 | 0 | |||
|
1096 | I | |||
|
1097 | 0 | |||
|
1098 | I | |||
|
1099 | 0 | |||
|
1100 | n | |||
|
1101 | p | |||
|
1102 | 14 | |||
|
1103 | x | |||
|
1104 | 14 | |||
|
1105 | RUBY_TEST_CODE | |||
|
1106 | n | |||
|
1107 | x | |||
|
1108 | 7 | |||
|
1109 | CodeRay | |||
|
1110 | n | |||
|
1111 | x | |||
|
1112 | 3 | |||
|
1113 | Duo | |||
|
1114 | x | |||
|
1115 | 5 | |||
|
1116 | plain | |||
|
1117 | x | |||
|
1118 | 2 | |||
|
1119 | [] | |||
|
1120 | n | |||
|
1121 | x | |||
|
1122 | 4 | |||
|
1123 | Hash | |||
|
1124 | x | |||
|
1125 | 16 | |||
|
1126 | new_from_literal | |||
|
1127 | x | |||
|
1128 | 6 | |||
|
1129 | stream | |||
|
1130 | x | |||
|
1131 | 3 | |||
|
1132 | []= | |||
|
1133 | x | |||
|
1134 | 9 | |||
|
1135 | highlight | |||
|
1136 | x | |||
|
1137 | 12 | |||
|
1138 | assert_equal | |||
|
1139 | p | |||
|
1140 | 9 | |||
|
1141 | I | |||
|
1142 | 0 | |||
|
1143 | I | |||
|
1144 | 2c | |||
|
1145 | I | |||
|
1146 | 0 | |||
|
1147 | I | |||
|
1148 | 2d | |||
|
1149 | I | |||
|
1150 | 4 | |||
|
1151 | I | |||
|
1152 | 2e | |||
|
1153 | I | |||
|
1154 | 25 | |||
|
1155 | I | |||
|
1156 | 2d | |||
|
1157 | I | |||
|
1158 | 2a | |||
|
1159 | x | |||
|
1160 | 55 | |||
|
1161 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
1162 | p | |||
|
1163 | 0 | |||
|
1164 | x | |||
|
1165 | 19 | |||
|
1166 | test_comment_filter | |||
|
1167 | M | |||
|
1168 | 1 | |||
|
1169 | n | |||
|
1170 | n | |||
|
1171 | x | |||
|
1172 | 19 | |||
|
1173 | test_comment_filter | |||
|
1174 | i | |||
|
1175 | 26 | |||
|
1176 | 5 | |||
|
1177 | 7 | |||
|
1178 | 0 | |||
|
1179 | 64 | |||
|
1180 | 45 | |||
|
1181 | 1 | |||
|
1182 | 2 | |||
|
1183 | 7 | |||
|
1184 | 3 | |||
|
1185 | 64 | |||
|
1186 | 7 | |||
|
1187 | 4 | |||
|
1188 | 49 | |||
|
1189 | 5 | |||
|
1190 | 2 | |||
|
1191 | 49 | |||
|
1192 | 6 | |||
|
1193 | 0 | |||
|
1194 | 49 | |||
|
1195 | 7 | |||
|
1196 | 0 | |||
|
1197 | 47 | |||
|
1198 | 49 | |||
|
1199 | 8 | |||
|
1200 | 2 | |||
|
1201 | 11 | |||
|
1202 | I | |||
|
1203 | 5 | |||
|
1204 | I | |||
|
1205 | 0 | |||
|
1206 | I | |||
|
1207 | 0 | |||
|
1208 | I | |||
|
1209 | 0 | |||
|
1210 | n | |||
|
1211 | p | |||
|
1212 | 9 | |||
|
1213 | s | |||
|
1214 | 39 | |||
|
1215 | #!/usr/bin/env ruby | |||
|
1216 | ||||
|
1217 | code | |||
|
1218 | ||||
|
1219 | more code | |||
|
1220 | ||||
|
1221 | x | |||
|
1222 | 7 | |||
|
1223 | CodeRay | |||
|
1224 | n | |||
|
1225 | s | |||
|
1226 | 127 | |||
|
1227 | #!/usr/bin/env ruby | |||
|
1228 | =begin | |||
|
1229 | A multi-line comment. | |||
|
1230 | =end | |||
|
1231 | code | |||
|
1232 | # A single-line comment. | |||
|
1233 | more code # and another comment, in-line. | |||
|
1234 | ||||
|
1235 | x | |||
|
1236 | 4 | |||
|
1237 | ruby | |||
|
1238 | x | |||
|
1239 | 4 | |||
|
1240 | scan | |||
|
1241 | x | |||
|
1242 | 14 | |||
|
1243 | comment_filter | |||
|
1244 | x | |||
|
1245 | 4 | |||
|
1246 | text | |||
|
1247 | x | |||
|
1248 | 12 | |||
|
1249 | assert_equal | |||
|
1250 | p | |||
|
1251 | 5 | |||
|
1252 | I | |||
|
1253 | 0 | |||
|
1254 | I | |||
|
1255 | 31 | |||
|
1256 | I | |||
|
1257 | 0 | |||
|
1258 | I | |||
|
1259 | 32 | |||
|
1260 | I | |||
|
1261 | 1a | |||
|
1262 | x | |||
|
1263 | 55 | |||
|
1264 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
1265 | p | |||
|
1266 | 0 | |||
|
1267 | x | |||
|
1268 | 18 | |||
|
1269 | test_lines_of_code | |||
|
1270 | M | |||
|
1271 | 1 | |||
|
1272 | n | |||
|
1273 | n | |||
|
1274 | x | |||
|
1275 | 18 | |||
|
1276 | test_lines_of_code | |||
|
1277 | i | |||
|
1278 | 108 | |||
|
1279 | 5 | |||
|
1280 | 80 | |||
|
1281 | 45 | |||
|
1282 | 0 | |||
|
1283 | 1 | |||
|
1284 | 7 | |||
|
1285 | 2 | |||
|
1286 | 64 | |||
|
1287 | 7 | |||
|
1288 | 3 | |||
|
1289 | 49 | |||
|
1290 | 4 | |||
|
1291 | 2 | |||
|
1292 | 49 | |||
|
1293 | 5 | |||
|
1294 | 0 | |||
|
1295 | 47 | |||
|
1296 | 49 | |||
|
1297 | 6 | |||
|
1298 | 2 | |||
|
1299 | 15 | |||
|
1300 | 7 | |||
|
1301 | 7 | |||
|
1302 | 64 | |||
|
1303 | 19 | |||
|
1304 | 0 | |||
|
1305 | 15 | |||
|
1306 | 5 | |||
|
1307 | 78 | |||
|
1308 | 45 | |||
|
1309 | 0 | |||
|
1310 | 8 | |||
|
1311 | 20 | |||
|
1312 | 0 | |||
|
1313 | 7 | |||
|
1314 | 9 | |||
|
1315 | 49 | |||
|
1316 | 4 | |||
|
1317 | 2 | |||
|
1318 | 49 | |||
|
1319 | 5 | |||
|
1320 | 0 | |||
|
1321 | 47 | |||
|
1322 | 49 | |||
|
1323 | 6 | |||
|
1324 | 2 | |||
|
1325 | 15 | |||
|
1326 | 5 | |||
|
1327 | 78 | |||
|
1328 | 45 | |||
|
1329 | 0 | |||
|
1330 | 10 | |||
|
1331 | 20 | |||
|
1332 | 0 | |||
|
1333 | 7 | |||
|
1334 | 11 | |||
|
1335 | 49 | |||
|
1336 | 4 | |||
|
1337 | 2 | |||
|
1338 | 49 | |||
|
1339 | 5 | |||
|
1340 | 0 | |||
|
1341 | 47 | |||
|
1342 | 49 | |||
|
1343 | 6 | |||
|
1344 | 2 | |||
|
1345 | 15 | |||
|
1346 | 5 | |||
|
1347 | 78 | |||
|
1348 | 45 | |||
|
1349 | 0 | |||
|
1350 | 12 | |||
|
1351 | 20 | |||
|
1352 | 0 | |||
|
1353 | 7 | |||
|
1354 | 13 | |||
|
1355 | 49 | |||
|
1356 | 4 | |||
|
1357 | 2 | |||
|
1358 | 49 | |||
|
1359 | 5 | |||
|
1360 | 0 | |||
|
1361 | 47 | |||
|
1362 | 49 | |||
|
1363 | 6 | |||
|
1364 | 2 | |||
|
1365 | 15 | |||
|
1366 | 5 | |||
|
1367 | 4 | |||
|
1368 | 4 | |||
|
1369 | 45 | |||
|
1370 | 0 | |||
|
1371 | 14 | |||
|
1372 | 20 | |||
|
1373 | 0 | |||
|
1374 | 7 | |||
|
1375 | 15 | |||
|
1376 | 49 | |||
|
1377 | 4 | |||
|
1378 | 2 | |||
|
1379 | 49 | |||
|
1380 | 5 | |||
|
1381 | 0 | |||
|
1382 | 47 | |||
|
1383 | 49 | |||
|
1384 | 6 | |||
|
1385 | 2 | |||
|
1386 | 11 | |||
|
1387 | I | |||
|
1388 | 6 | |||
|
1389 | I | |||
|
1390 | 1 | |||
|
1391 | I | |||
|
1392 | 0 | |||
|
1393 | I | |||
|
1394 | 0 | |||
|
1395 | n | |||
|
1396 | p | |||
|
1397 | 16 | |||
|
1398 | x | |||
|
1399 | 7 | |||
|
1400 | CodeRay | |||
|
1401 | n | |||
|
1402 | s | |||
|
1403 | 127 | |||
|
1404 | #!/usr/bin/env ruby | |||
|
1405 | =begin | |||
|
1406 | A multi-line comment. | |||
|
1407 | =end | |||
|
1408 | code | |||
|
1409 | # A single-line comment. | |||
|
1410 | more code # and another comment, in-line. | |||
|
1411 | ||||
|
1412 | x | |||
|
1413 | 4 | |||
|
1414 | ruby | |||
|
1415 | x | |||
|
1416 | 4 | |||
|
1417 | scan | |||
|
1418 | x | |||
|
1419 | 13 | |||
|
1420 | lines_of_code | |||
|
1421 | x | |||
|
1422 | 12 | |||
|
1423 | assert_equal | |||
|
1424 | s | |||
|
1425 | 514 | |||
|
1426 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" | |||
|
1427 | "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |||
|
1428 | ||||
|
1429 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | |||
|
1430 | <head> | |||
|
1431 | <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> | |||
|
1432 | <title><%= controller.controller_name.titleize %>: <%= controller.action_name %></title> | |||
|
1433 | <%= stylesheet_link_tag 'scaffold' %> | |||
|
1434 | </head> | |||
|
1435 | <body> | |||
|
1436 | ||||
|
1437 | <p style="color: green"><%= flash[:notice] %></p> | |||
|
1438 | ||||
|
1439 | <div id="main"> | |||
|
1440 | <%= yield %> | |||
|
1441 | </div> | |||
|
1442 | ||||
|
1443 | </body> | |||
|
1444 | </html> | |||
|
1445 | ||||
|
1446 | n | |||
|
1447 | x | |||
|
1448 | 4 | |||
|
1449 | html | |||
|
1450 | n | |||
|
1451 | x | |||
|
1452 | 3 | |||
|
1453 | php | |||
|
1454 | n | |||
|
1455 | x | |||
|
1456 | 4 | |||
|
1457 | yaml | |||
|
1458 | n | |||
|
1459 | x | |||
|
1460 | 5 | |||
|
1461 | rhtml | |||
|
1462 | p | |||
|
1463 | 15 | |||
|
1464 | I | |||
|
1465 | 0 | |||
|
1466 | I | |||
|
1467 | 43 | |||
|
1468 | I | |||
|
1469 | 0 | |||
|
1470 | I | |||
|
1471 | 44 | |||
|
1472 | I | |||
|
1473 | 15 | |||
|
1474 | I | |||
|
1475 | 4d | |||
|
1476 | I | |||
|
1477 | 1b | |||
|
1478 | I | |||
|
1479 | 62 | |||
|
1480 | I | |||
|
1481 | 2f | |||
|
1482 | I | |||
|
1483 | 63 | |||
|
1484 | I | |||
|
1485 | 43 | |||
|
1486 | I | |||
|
1487 | 64 | |||
|
1488 | I | |||
|
1489 | 57 | |||
|
1490 | I | |||
|
1491 | 65 | |||
|
1492 | I | |||
|
1493 | 6c | |||
|
1494 | x | |||
|
1495 | 55 | |||
|
1496 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
1497 | p | |||
|
1498 | 1 | |||
|
1499 | x | |||
|
1500 | 5 | |||
|
1501 | rHTML | |||
|
1502 | x | |||
|
1503 | 3 | |||
|
1504 | ENV | |||
|
1505 | n | |||
|
1506 | s | |||
|
1507 | 14 | |||
|
1508 | check_rubygems | |||
|
1509 | x | |||
|
1510 | 2 | |||
|
1511 | [] | |||
|
1512 | x | |||
|
1513 | 12 | |||
|
1514 | RUBY_VERSION | |||
|
1515 | n | |||
|
1516 | s | |||
|
1517 | 3 | |||
|
1518 | 1.9 | |||
|
1519 | x | |||
|
1520 | 1 | |||
|
1521 | < | |||
|
1522 | x | |||
|
1523 | 24 | |||
|
1524 | test_rubygems_not_loaded | |||
|
1525 | M | |||
|
1526 | 1 | |||
|
1527 | n | |||
|
1528 | n | |||
|
1529 | x | |||
|
1530 | 24 | |||
|
1531 | test_rubygems_not_loaded | |||
|
1532 | i | |||
|
1533 | 34 | |||
|
1534 | 5 | |||
|
1535 | 1 | |||
|
1536 | 26 | |||
|
1537 | 93 | |||
|
1538 | 0 | |||
|
1539 | 15 | |||
|
1540 | 29 | |||
|
1541 | 17 | |||
|
1542 | 0 | |||
|
1543 | 7 | |||
|
1544 | 0 | |||
|
1545 | 98 | |||
|
1546 | 1 | |||
|
1547 | 1 | |||
|
1548 | 30 | |||
|
1549 | 8 | |||
|
1550 | 23 | |||
|
1551 | 25 | |||
|
1552 | 92 | |||
|
1553 | 0 | |||
|
1554 | 27 | |||
|
1555 | 8 | |||
|
1556 | 28 | |||
|
1557 | 15 | |||
|
1558 | 7 | |||
|
1559 | 2 | |||
|
1560 | 8 | |||
|
1561 | 29 | |||
|
1562 | 1 | |||
|
1563 | 47 | |||
|
1564 | 49 | |||
|
1565 | 3 | |||
|
1566 | 2 | |||
|
1567 | 11 | |||
|
1568 | I | |||
|
1569 | 4 | |||
|
1570 | I | |||
|
1571 | 0 | |||
|
1572 | I | |||
|
1573 | 0 | |||
|
1574 | I | |||
|
1575 | 0 | |||
|
1576 | n | |||
|
1577 | p | |||
|
1578 | 4 | |||
|
1579 | x | |||
|
1580 | 3 | |||
|
1581 | Gem | |||
|
1582 | x | |||
|
1583 | 16 | |||
|
1584 | vm_const_defined | |||
|
1585 | s | |||
|
1586 | 8 | |||
|
1587 | constant | |||
|
1588 | x | |||
|
1589 | 12 | |||
|
1590 | assert_equal | |||
|
1591 | p | |||
|
1592 | 5 | |||
|
1593 | I | |||
|
1594 | 0 | |||
|
1595 | I | |||
|
1596 | 68 | |||
|
1597 | I | |||
|
1598 | 0 | |||
|
1599 | I | |||
|
1600 | 69 | |||
|
1601 | I | |||
|
1602 | 22 | |||
|
1603 | x | |||
|
1604 | 55 | |||
|
1605 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
1606 | p | |||
|
1607 | 0 | |||
|
1608 | x | |||
|
1609 | 21 | |||
|
1610 | test_list_of_encoders | |||
|
1611 | M | |||
|
1612 | 1 | |||
|
1613 | n | |||
|
1614 | n | |||
|
1615 | x | |||
|
1616 | 21 | |||
|
1617 | test_list_of_encoders | |||
|
1618 | i | |||
|
1619 | 37 | |||
|
1620 | 5 | |||
|
1621 | 45 | |||
|
1622 | 0 | |||
|
1623 | 1 | |||
|
1624 | 45 | |||
|
1625 | 2 | |||
|
1626 | 3 | |||
|
1627 | 43 | |||
|
1628 | 4 | |||
|
1629 | 49 | |||
|
1630 | 5 | |||
|
1631 | 0 | |||
|
1632 | 47 | |||
|
1633 | 49 | |||
|
1634 | 6 | |||
|
1635 | 2 | |||
|
1636 | 15 | |||
|
1637 | 5 | |||
|
1638 | 45 | |||
|
1639 | 2 | |||
|
1640 | 7 | |||
|
1641 | 43 | |||
|
1642 | 4 | |||
|
1643 | 49 | |||
|
1644 | 5 | |||
|
1645 | 0 | |||
|
1646 | 7 | |||
|
1647 | 8 | |||
|
1648 | 64 | |||
|
1649 | 49 | |||
|
1650 | 9 | |||
|
1651 | 1 | |||
|
1652 | 47 | |||
|
1653 | 49 | |||
|
1654 | 10 | |||
|
1655 | 1 | |||
|
1656 | 11 | |||
|
1657 | I | |||
|
1658 | 3 | |||
|
1659 | I | |||
|
1660 | 0 | |||
|
1661 | I | |||
|
1662 | 0 | |||
|
1663 | I | |||
|
1664 | 0 | |||
|
1665 | n | |||
|
1666 | p | |||
|
1667 | 11 | |||
|
1668 | x | |||
|
1669 | 5 | |||
|
1670 | Array | |||
|
1671 | n | |||
|
1672 | x | |||
|
1673 | 7 | |||
|
1674 | CodeRay | |||
|
1675 | n | |||
|
1676 | x | |||
|
1677 | 8 | |||
|
1678 | Encoders | |||
|
1679 | x | |||
|
1680 | 4 | |||
|
1681 | list | |||
|
1682 | x | |||
|
1683 | 14 | |||
|
1684 | assert_kind_of | |||
|
1685 | n | |||
|
1686 | s | |||
|
1687 | 5 | |||
|
1688 | count | |||
|
1689 | x | |||
|
1690 | 8 | |||
|
1691 | include? | |||
|
1692 | x | |||
|
1693 | 6 | |||
|
1694 | assert | |||
|
1695 | p | |||
|
1696 | 7 | |||
|
1697 | I | |||
|
1698 | 0 | |||
|
1699 | I | |||
|
1700 | 6c | |||
|
1701 | I | |||
|
1702 | 0 | |||
|
1703 | I | |||
|
1704 | 6d | |||
|
1705 | I | |||
|
1706 | 11 | |||
|
1707 | I | |||
|
1708 | 6e | |||
|
1709 | I | |||
|
1710 | 25 | |||
|
1711 | x | |||
|
1712 | 55 | |||
|
1713 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
1714 | p | |||
|
1715 | 0 | |||
|
1716 | x | |||
|
1717 | 21 | |||
|
1718 | test_list_of_scanners | |||
|
1719 | M | |||
|
1720 | 1 | |||
|
1721 | n | |||
|
1722 | n | |||
|
1723 | x | |||
|
1724 | 21 | |||
|
1725 | test_list_of_scanners | |||
|
1726 | i | |||
|
1727 | 37 | |||
|
1728 | 5 | |||
|
1729 | 45 | |||
|
1730 | 0 | |||
|
1731 | 1 | |||
|
1732 | 45 | |||
|
1733 | 2 | |||
|
1734 | 3 | |||
|
1735 | 43 | |||
|
1736 | 4 | |||
|
1737 | 49 | |||
|
1738 | 5 | |||
|
1739 | 0 | |||
|
1740 | 47 | |||
|
1741 | 49 | |||
|
1742 | 6 | |||
|
1743 | 2 | |||
|
1744 | 15 | |||
|
1745 | 5 | |||
|
1746 | 45 | |||
|
1747 | 2 | |||
|
1748 | 7 | |||
|
1749 | 43 | |||
|
1750 | 4 | |||
|
1751 | 49 | |||
|
1752 | 5 | |||
|
1753 | 0 | |||
|
1754 | 7 | |||
|
1755 | 8 | |||
|
1756 | 64 | |||
|
1757 | 49 | |||
|
1758 | 9 | |||
|
1759 | 1 | |||
|
1760 | 47 | |||
|
1761 | 49 | |||
|
1762 | 10 | |||
|
1763 | 1 | |||
|
1764 | 11 | |||
|
1765 | I | |||
|
1766 | 3 | |||
|
1767 | I | |||
|
1768 | 0 | |||
|
1769 | I | |||
|
1770 | 0 | |||
|
1771 | I | |||
|
1772 | 0 | |||
|
1773 | n | |||
|
1774 | p | |||
|
1775 | 11 | |||
|
1776 | x | |||
|
1777 | 5 | |||
|
1778 | Array | |||
|
1779 | n | |||
|
1780 | x | |||
|
1781 | 7 | |||
|
1782 | CodeRay | |||
|
1783 | n | |||
|
1784 | x | |||
|
1785 | 8 | |||
|
1786 | Scanners | |||
|
1787 | x | |||
|
1788 | 4 | |||
|
1789 | list | |||
|
1790 | x | |||
|
1791 | 14 | |||
|
1792 | assert_kind_of | |||
|
1793 | n | |||
|
1794 | s | |||
|
1795 | 9 | |||
|
1796 | plaintext | |||
|
1797 | x | |||
|
1798 | 8 | |||
|
1799 | include? | |||
|
1800 | x | |||
|
1801 | 6 | |||
|
1802 | assert | |||
|
1803 | p | |||
|
1804 | 7 | |||
|
1805 | I | |||
|
1806 | 0 | |||
|
1807 | I | |||
|
1808 | 71 | |||
|
1809 | I | |||
|
1810 | 0 | |||
|
1811 | I | |||
|
1812 | 72 | |||
|
1813 | I | |||
|
1814 | 11 | |||
|
1815 | I | |||
|
1816 | 73 | |||
|
1817 | I | |||
|
1818 | 25 | |||
|
1819 | x | |||
|
1820 | 55 | |||
|
1821 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
1822 | p | |||
|
1823 | 0 | |||
|
1824 | x | |||
|
1825 | 25 | |||
|
1826 | test_scan_a_frozen_string | |||
|
1827 | M | |||
|
1828 | 1 | |||
|
1829 | n | |||
|
1830 | n | |||
|
1831 | x | |||
|
1832 | 25 | |||
|
1833 | test_scan_a_frozen_string | |||
|
1834 | i | |||
|
1835 | 12 | |||
|
1836 | 45 | |||
|
1837 | 0 | |||
|
1838 | 1 | |||
|
1839 | 45 | |||
|
1840 | 2 | |||
|
1841 | 3 | |||
|
1842 | 7 | |||
|
1843 | 4 | |||
|
1844 | 49 | |||
|
1845 | 5 | |||
|
1846 | 2 | |||
|
1847 | 11 | |||
|
1848 | I | |||
|
1849 | 3 | |||
|
1850 | I | |||
|
1851 | 0 | |||
|
1852 | I | |||
|
1853 | 0 | |||
|
1854 | I | |||
|
1855 | 0 | |||
|
1856 | n | |||
|
1857 | p | |||
|
1858 | 6 | |||
|
1859 | x | |||
|
1860 | 7 | |||
|
1861 | CodeRay | |||
|
1862 | n | |||
|
1863 | x | |||
|
1864 | 12 | |||
|
1865 | RUBY_VERSION | |||
|
1866 | n | |||
|
1867 | x | |||
|
1868 | 4 | |||
|
1869 | ruby | |||
|
1870 | x | |||
|
1871 | 4 | |||
|
1872 | scan | |||
|
1873 | p | |||
|
1874 | 5 | |||
|
1875 | I | |||
|
1876 | 0 | |||
|
1877 | I | |||
|
1878 | 76 | |||
|
1879 | I | |||
|
1880 | 0 | |||
|
1881 | I | |||
|
1882 | 77 | |||
|
1883 | I | |||
|
1884 | c | |||
|
1885 | x | |||
|
1886 | 55 | |||
|
1887 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
1888 | p | |||
|
1889 | 0 | |||
|
1890 | p | |||
|
1891 | 51 | |||
|
1892 | I | |||
|
1893 | 2 | |||
|
1894 | I | |||
|
1895 | 6 | |||
|
1896 | I | |||
|
1897 | 10 | |||
|
1898 | I | |||
|
1899 | c | |||
|
1900 | I | |||
|
1901 | 1a | |||
|
1902 | I | |||
|
1903 | e | |||
|
1904 | I | |||
|
1905 | 1d | |||
|
1906 | I | |||
|
1907 | f | |||
|
1908 | I | |||
|
1909 | 24 | |||
|
1910 | I | |||
|
1911 | 10 | |||
|
1912 | I | |||
|
1913 | 2b | |||
|
1914 | I | |||
|
1915 | 11 | |||
|
1916 | I | |||
|
1917 | 31 | |||
|
1918 | I | |||
|
1919 | 12 | |||
|
1920 | I | |||
|
1921 | 38 | |||
|
1922 | I | |||
|
1923 | 13 | |||
|
1924 | I | |||
|
1925 | 3f | |||
|
1926 | I | |||
|
1927 | 14 | |||
|
1928 | I | |||
|
1929 | 46 | |||
|
1930 | I | |||
|
1931 | 15 | |||
|
1932 | I | |||
|
1933 | 52 | |||
|
1934 | I | |||
|
1935 | 17 | |||
|
1936 | I | |||
|
1937 | 60 | |||
|
1938 | I | |||
|
1939 | 1d | |||
|
1940 | I | |||
|
1941 | 63 | |||
|
1942 | I | |||
|
1943 | 1d | |||
|
1944 | I | |||
|
1945 | 66 | |||
|
1946 | I | |||
|
1947 | 1e | |||
|
1948 | I | |||
|
1949 | 6f | |||
|
1950 | I | |||
|
1951 | 1f | |||
|
1952 | I | |||
|
1953 | 7d | |||
|
1954 | I | |||
|
1955 | 25 | |||
|
1956 | I | |||
|
1957 | 8b | |||
|
1958 | I | |||
|
1959 | 2c | |||
|
1960 | I | |||
|
1961 | 99 | |||
|
1962 | I | |||
|
1963 | 31 | |||
|
1964 | I | |||
|
1965 | a7 | |||
|
1966 | I | |||
|
1967 | 43 | |||
|
1968 | I | |||
|
1969 | b5 | |||
|
1970 | I | |||
|
1971 | 6a | |||
|
1972 | I | |||
|
1973 | cc | |||
|
1974 | I | |||
|
1975 | 68 | |||
|
1976 | I | |||
|
1977 | db | |||
|
1978 | I | |||
|
1979 | 6a | |||
|
1980 | I | |||
|
1981 | dd | |||
|
1982 | I | |||
|
1983 | 6c | |||
|
1984 | I | |||
|
1985 | eb | |||
|
1986 | I | |||
|
1987 | 71 | |||
|
1988 | I | |||
|
1989 | f9 | |||
|
1990 | I | |||
|
1991 | 76 | |||
|
1992 | I | |||
|
1993 | 107 | |||
|
1994 | x | |||
|
1995 | 55 | |||
|
1996 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
1997 | p | |||
|
1998 | 0 | |||
|
1999 | x | |||
|
2000 | 13 | |||
|
2001 | attach_method | |||
|
2002 | p | |||
|
2003 | 7 | |||
|
2004 | I | |||
|
2005 | 0 | |||
|
2006 | I | |||
|
2007 | 1 | |||
|
2008 | I | |||
|
2009 | 9 | |||
|
2010 | I | |||
|
2011 | 2 | |||
|
2012 | I | |||
|
2013 | 12 | |||
|
2014 | I | |||
|
2015 | 4 | |||
|
2016 | I | |||
|
2017 | 35 | |||
|
2018 | x | |||
|
2019 | 55 | |||
|
2020 | /Users/murphy/ruby/coderay-0.9/test/functional/basic.rb | |||
|
2021 | p | |||
|
2022 | 0 |
@@ -0,0 +1,77 | |||||
|
1 | require 'test/unit' | |||
|
2 | $:.unshift 'lib' | |||
|
3 | require 'coderay' | |||
|
4 | ||||
|
5 | begin | |||
|
6 | require 'rubygems' unless defined? Gem | |||
|
7 | gem 'RedCloth', '>= 4.0.3' rescue nil | |||
|
8 | require 'redcloth' | |||
|
9 | rescue LoadError | |||
|
10 | warn 'RedCloth not found - skipping for_redcloth tests.' | |||
|
11 | end | |||
|
12 | ||||
|
13 | class BasicTest < Test::Unit::TestCase | |||
|
14 | ||||
|
15 | def test_for_redcloth | |||
|
16 | require 'coderay/for_redcloth' | |||
|
17 | assert_equal "<p><span lang=\"ruby\" class=\"CodeRay\">puts <span style=\"background-color:#fff0f0;color:#D20\"><span style=\"color:#710\">"</span><span style=\"\">Hello, World!</span><span style=\"color:#710\">"</span></span></span></p>", | |||
|
18 | RedCloth.new('@[ruby]puts "Hello, World!"@').to_html | |||
|
19 | assert_equal <<-BLOCKCODE.chomp, | |||
|
20 | <div lang="ruby" class="CodeRay"> | |||
|
21 | <div class="code"><pre>puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">Hello, World!</span><span style="color:#710">"</span></span></pre></div> | |||
|
22 | </div> | |||
|
23 | BLOCKCODE | |||
|
24 | RedCloth.new('bc[ruby]. puts "Hello, World!"').to_html | |||
|
25 | end | |||
|
26 | ||||
|
27 | def test_for_redcloth_no_lang | |||
|
28 | require 'coderay/for_redcloth' | |||
|
29 | assert_equal "<p><code>puts \"Hello, World!\"</code></p>", | |||
|
30 | RedCloth.new('@puts "Hello, World!"@').to_html | |||
|
31 | assert_equal <<-BLOCKCODE.chomp, | |||
|
32 | <pre><code>puts \"Hello, World!\"</code></pre> | |||
|
33 | BLOCKCODE | |||
|
34 | RedCloth.new('bc. puts "Hello, World!"').to_html | |||
|
35 | end | |||
|
36 | ||||
|
37 | def test_for_redcloth_style | |||
|
38 | require 'coderay/for_redcloth' | |||
|
39 | assert_equal <<-BLOCKCODE.chomp, | |||
|
40 | <pre style=\"color: red;\"><code style=\"color: red;\">puts \"Hello, World!\"</code></pre> | |||
|
41 | BLOCKCODE | |||
|
42 | RedCloth.new('bc{color: red}. puts "Hello, World!"').to_html | |||
|
43 | end | |||
|
44 | ||||
|
45 | def test_for_redcloth_escapes | |||
|
46 | require 'coderay/for_redcloth' | |||
|
47 | assert_equal '<p><span lang="ruby" class="CodeRay">></span></p>', | |||
|
48 | RedCloth.new('@[ruby]>@').to_html | |||
|
49 | assert_equal <<-BLOCKCODE.chomp, | |||
|
50 | <div lang="ruby" class="CodeRay"> | |||
|
51 | <div class="code"><pre>&</pre></div> | |||
|
52 | </div> | |||
|
53 | BLOCKCODE | |||
|
54 | RedCloth.new('bc[ruby]. &').to_html | |||
|
55 | end | |||
|
56 | ||||
|
57 | def test_for_redcloth_escapes2 | |||
|
58 | require 'coderay/for_redcloth' | |||
|
59 | assert_equal "<p><span lang=\"c\" class=\"CodeRay\"><span style=\"color:#579\">#include</span> <span style=\"color:#B44;font-weight:bold\"><test.h></span></span></p>", | |||
|
60 | RedCloth.new('@[c]#include <test.h>@').to_html | |||
|
61 | end | |||
|
62 | ||||
|
63 | # See http://jgarber.lighthouseapp.com/projects/13054/tickets/124-code-markup-does-not-allow-brackets. | |||
|
64 | def test_for_redcloth_false_positive | |||
|
65 | require 'coderay/for_redcloth' | |||
|
66 | assert_equal '<p><code>[project]_dff.skjd</code></p>', | |||
|
67 | RedCloth.new('@[project]_dff.skjd@').to_html | |||
|
68 | # false positive, but expected behavior / known issue | |||
|
69 | assert_equal "<p><span lang=\"ruby\" class=\"CodeRay\">_dff.skjd</span></p>", | |||
|
70 | RedCloth.new('@[ruby]_dff.skjd@').to_html | |||
|
71 | assert_equal <<-BLOCKCODE.chomp, | |||
|
72 | <pre><code>[project]_dff.skjd</code></pre> | |||
|
73 | BLOCKCODE | |||
|
74 | RedCloth.new('bc. [project]_dff.skjd').to_html | |||
|
75 | end | |||
|
76 | ||||
|
77 | end if defined? RedCloth No newline at end of file |
This diff has been collapsed as it changes many lines, (1708 lines changed) Show them Hide them | |||||
@@ -0,0 +1,1708 | |||||
|
1 | !RBIX | |||
|
2 | 0 | |||
|
3 | x | |||
|
4 | M | |||
|
5 | 1 | |||
|
6 | n | |||
|
7 | n | |||
|
8 | x | |||
|
9 | 10 | |||
|
10 | __script__ | |||
|
11 | i | |||
|
12 | 249 | |||
|
13 | 5 | |||
|
14 | 7 | |||
|
15 | 0 | |||
|
16 | 64 | |||
|
17 | 47 | |||
|
18 | 49 | |||
|
19 | 1 | |||
|
20 | 1 | |||
|
21 | 15 | |||
|
22 | 99 | |||
|
23 | 43 | |||
|
24 | 2 | |||
|
25 | 7 | |||
|
26 | 3 | |||
|
27 | 49 | |||
|
28 | 4 | |||
|
29 | 1 | |||
|
30 | 7 | |||
|
31 | 5 | |||
|
32 | 64 | |||
|
33 | 49 | |||
|
34 | 6 | |||
|
35 | 1 | |||
|
36 | 15 | |||
|
37 | 5 | |||
|
38 | 7 | |||
|
39 | 7 | |||
|
40 | 64 | |||
|
41 | 47 | |||
|
42 | 49 | |||
|
43 | 1 | |||
|
44 | 1 | |||
|
45 | 15 | |||
|
46 | 26 | |||
|
47 | 93 | |||
|
48 | 0 | |||
|
49 | 15 | |||
|
50 | 29 | |||
|
51 | 144 | |||
|
52 | 0 | |||
|
53 | 26 | |||
|
54 | 93 | |||
|
55 | 1 | |||
|
56 | 15 | |||
|
57 | 29 | |||
|
58 | 55 | |||
|
59 | 0 | |||
|
60 | 7 | |||
|
61 | 8 | |||
|
62 | 98 | |||
|
63 | 9 | |||
|
64 | 1 | |||
|
65 | 30 | |||
|
66 | 8 | |||
|
67 | 61 | |||
|
68 | 25 | |||
|
69 | 92 | |||
|
70 | 1 | |||
|
71 | 27 | |||
|
72 | 8 | |||
|
73 | 66 | |||
|
74 | 15 | |||
|
75 | 7 | |||
|
76 | 10 | |||
|
77 | 8 | |||
|
78 | 67 | |||
|
79 | 1 | |||
|
80 | 9 | |||
|
81 | 72 | |||
|
82 | 1 | |||
|
83 | 8 | |||
|
84 | 80 | |||
|
85 | 5 | |||
|
86 | 7 | |||
|
87 | 11 | |||
|
88 | 64 | |||
|
89 | 47 | |||
|
90 | 49 | |||
|
91 | 1 | |||
|
92 | 1 | |||
|
93 | 15 | |||
|
94 | 26 | |||
|
95 | 93 | |||
|
96 | 2 | |||
|
97 | 15 | |||
|
98 | 29 | |||
|
99 | 102 | |||
|
100 | 0 | |||
|
101 | 5 | |||
|
102 | 7 | |||
|
103 | 12 | |||
|
104 | 64 | |||
|
105 | 7 | |||
|
106 | 13 | |||
|
107 | 64 | |||
|
108 | 47 | |||
|
109 | 49 | |||
|
110 | 14 | |||
|
111 | 2 | |||
|
112 | 30 | |||
|
113 | 8 | |||
|
114 | 129 | |||
|
115 | 26 | |||
|
116 | 93 | |||
|
117 | 3 | |||
|
118 | 15 | |||
|
119 | 24 | |||
|
120 | 13 | |||
|
121 | 45 | |||
|
122 | 15 | |||
|
123 | 16 | |||
|
124 | 12 | |||
|
125 | 49 | |||
|
126 | 17 | |||
|
127 | 1 | |||
|
128 | 10 | |||
|
129 | 119 | |||
|
130 | 8 | |||
|
131 | 124 | |||
|
132 | 15 | |||
|
133 | 1 | |||
|
134 | 25 | |||
|
135 | 8 | |||
|
136 | 129 | |||
|
137 | 15 | |||
|
138 | 92 | |||
|
139 | 3 | |||
|
140 | 27 | |||
|
141 | 34 | |||
|
142 | 92 | |||
|
143 | 2 | |||
|
144 | 27 | |||
|
145 | 15 | |||
|
146 | 5 | |||
|
147 | 7 | |||
|
148 | 18 | |||
|
149 | 64 | |||
|
150 | 47 | |||
|
151 | 49 | |||
|
152 | 1 | |||
|
153 | 1 | |||
|
154 | 30 | |||
|
155 | 8 | |||
|
156 | 178 | |||
|
157 | 26 | |||
|
158 | 93 | |||
|
159 | 4 | |||
|
160 | 15 | |||
|
161 | 24 | |||
|
162 | 13 | |||
|
163 | 45 | |||
|
164 | 19 | |||
|
165 | 20 | |||
|
166 | 12 | |||
|
167 | 49 | |||
|
168 | 17 | |||
|
169 | 1 | |||
|
170 | 10 | |||
|
171 | 161 | |||
|
172 | 8 | |||
|
173 | 173 | |||
|
174 | 15 | |||
|
175 | 5 | |||
|
176 | 7 | |||
|
177 | 21 | |||
|
178 | 64 | |||
|
179 | 47 | |||
|
180 | 49 | |||
|
181 | 22 | |||
|
182 | 1 | |||
|
183 | 25 | |||
|
184 | 8 | |||
|
185 | 178 | |||
|
186 | 15 | |||
|
187 | 92 | |||
|
188 | 4 | |||
|
189 | 27 | |||
|
190 | 34 | |||
|
191 | 92 | |||
|
192 | 0 | |||
|
193 | 27 | |||
|
194 | 15 | |||
|
195 | 26 | |||
|
196 | 93 | |||
|
197 | 5 | |||
|
198 | 15 | |||
|
199 | 29 | |||
|
200 | 197 | |||
|
201 | 0 | |||
|
202 | 7 | |||
|
203 | 23 | |||
|
204 | 98 | |||
|
205 | 9 | |||
|
206 | 1 | |||
|
207 | 30 | |||
|
208 | 8 | |||
|
209 | 203 | |||
|
210 | 25 | |||
|
211 | 92 | |||
|
212 | 5 | |||
|
213 | 27 | |||
|
214 | 8 | |||
|
215 | 208 | |||
|
216 | 15 | |||
|
217 | 7 | |||
|
218 | 10 | |||
|
219 | 8 | |||
|
220 | 209 | |||
|
221 | 1 | |||
|
222 | 9 | |||
|
223 | 245 | |||
|
224 | 99 | |||
|
225 | 7 | |||
|
226 | 24 | |||
|
227 | 45 | |||
|
228 | 25 | |||
|
229 | 26 | |||
|
230 | 43 | |||
|
231 | 27 | |||
|
232 | 43 | |||
|
233 | 28 | |||
|
234 | 65 | |||
|
235 | 49 | |||
|
236 | 29 | |||
|
237 | 3 | |||
|
238 | 13 | |||
|
239 | 99 | |||
|
240 | 12 | |||
|
241 | 7 | |||
|
242 | 30 | |||
|
243 | 12 | |||
|
244 | 7 | |||
|
245 | 31 | |||
|
246 | 12 | |||
|
247 | 65 | |||
|
248 | 12 | |||
|
249 | 49 | |||
|
250 | 32 | |||
|
251 | 4 | |||
|
252 | 15 | |||
|
253 | 49 | |||
|
254 | 30 | |||
|
255 | 0 | |||
|
256 | 8 | |||
|
257 | 246 | |||
|
258 | 1 | |||
|
259 | 15 | |||
|
260 | 2 | |||
|
261 | 11 | |||
|
262 | I | |||
|
263 | c | |||
|
264 | I | |||
|
265 | 0 | |||
|
266 | I | |||
|
267 | 0 | |||
|
268 | I | |||
|
269 | 0 | |||
|
270 | n | |||
|
271 | p | |||
|
272 | 33 | |||
|
273 | s | |||
|
274 | 9 | |||
|
275 | test/unit | |||
|
276 | x | |||
|
277 | 7 | |||
|
278 | require | |||
|
279 | x | |||
|
280 | 7 | |||
|
281 | Globals | |||
|
282 | x | |||
|
283 | 2 | |||
|
284 | $: | |||
|
285 | x | |||
|
286 | 2 | |||
|
287 | [] | |||
|
288 | s | |||
|
289 | 3 | |||
|
290 | lib | |||
|
291 | x | |||
|
292 | 2 | |||
|
293 | << | |||
|
294 | s | |||
|
295 | 7 | |||
|
296 | coderay | |||
|
297 | x | |||
|
298 | 3 | |||
|
299 | Gem | |||
|
300 | x | |||
|
301 | 16 | |||
|
302 | vm_const_defined | |||
|
303 | s | |||
|
304 | 8 | |||
|
305 | constant | |||
|
306 | s | |||
|
307 | 8 | |||
|
308 | rubygems | |||
|
309 | s | |||
|
310 | 8 | |||
|
311 | RedCloth | |||
|
312 | s | |||
|
313 | 8 | |||
|
314 | >= 4.0.3 | |||
|
315 | x | |||
|
316 | 3 | |||
|
317 | gem | |||
|
318 | x | |||
|
319 | 13 | |||
|
320 | StandardError | |||
|
321 | n | |||
|
322 | x | |||
|
323 | 3 | |||
|
324 | === | |||
|
325 | s | |||
|
326 | 8 | |||
|
327 | redcloth | |||
|
328 | x | |||
|
329 | 9 | |||
|
330 | LoadError | |||
|
331 | n | |||
|
332 | s | |||
|
333 | 49 | |||
|
334 | RedCloth not found - skipping for_redcloth tests. | |||
|
335 | x | |||
|
336 | 4 | |||
|
337 | warn | |||
|
338 | x | |||
|
339 | 8 | |||
|
340 | RedCloth | |||
|
341 | x | |||
|
342 | 9 | |||
|
343 | BasicTest | |||
|
344 | x | |||
|
345 | 4 | |||
|
346 | Test | |||
|
347 | n | |||
|
348 | x | |||
|
349 | 4 | |||
|
350 | Unit | |||
|
351 | x | |||
|
352 | 8 | |||
|
353 | TestCase | |||
|
354 | x | |||
|
355 | 10 | |||
|
356 | open_class | |||
|
357 | x | |||
|
358 | 14 | |||
|
359 | __class_init__ | |||
|
360 | M | |||
|
361 | 1 | |||
|
362 | n | |||
|
363 | n | |||
|
364 | x | |||
|
365 | 9 | |||
|
366 | BasicTest | |||
|
367 | i | |||
|
368 | 86 | |||
|
369 | 5 | |||
|
370 | 66 | |||
|
371 | 99 | |||
|
372 | 7 | |||
|
373 | 0 | |||
|
374 | 7 | |||
|
375 | 1 | |||
|
376 | 65 | |||
|
377 | 67 | |||
|
378 | 49 | |||
|
379 | 2 | |||
|
380 | 0 | |||
|
381 | 49 | |||
|
382 | 3 | |||
|
383 | 4 | |||
|
384 | 15 | |||
|
385 | 99 | |||
|
386 | 7 | |||
|
387 | 4 | |||
|
388 | 7 | |||
|
389 | 5 | |||
|
390 | 65 | |||
|
391 | 67 | |||
|
392 | 49 | |||
|
393 | 2 | |||
|
394 | 0 | |||
|
395 | 49 | |||
|
396 | 3 | |||
|
397 | 4 | |||
|
398 | 15 | |||
|
399 | 99 | |||
|
400 | 7 | |||
|
401 | 6 | |||
|
402 | 7 | |||
|
403 | 7 | |||
|
404 | 65 | |||
|
405 | 67 | |||
|
406 | 49 | |||
|
407 | 2 | |||
|
408 | 0 | |||
|
409 | 49 | |||
|
410 | 3 | |||
|
411 | 4 | |||
|
412 | 15 | |||
|
413 | 99 | |||
|
414 | 7 | |||
|
415 | 8 | |||
|
416 | 7 | |||
|
417 | 9 | |||
|
418 | 65 | |||
|
419 | 67 | |||
|
420 | 49 | |||
|
421 | 2 | |||
|
422 | 0 | |||
|
423 | 49 | |||
|
424 | 3 | |||
|
425 | 4 | |||
|
426 | 15 | |||
|
427 | 99 | |||
|
428 | 7 | |||
|
429 | 10 | |||
|
430 | 7 | |||
|
431 | 11 | |||
|
432 | 65 | |||
|
433 | 67 | |||
|
434 | 49 | |||
|
435 | 2 | |||
|
436 | 0 | |||
|
437 | 49 | |||
|
438 | 3 | |||
|
439 | 4 | |||
|
440 | 15 | |||
|
441 | 99 | |||
|
442 | 7 | |||
|
443 | 12 | |||
|
444 | 7 | |||
|
445 | 13 | |||
|
446 | 65 | |||
|
447 | 67 | |||
|
448 | 49 | |||
|
449 | 2 | |||
|
450 | 0 | |||
|
451 | 49 | |||
|
452 | 3 | |||
|
453 | 4 | |||
|
454 | 11 | |||
|
455 | I | |||
|
456 | 5 | |||
|
457 | I | |||
|
458 | 0 | |||
|
459 | I | |||
|
460 | 0 | |||
|
461 | I | |||
|
462 | 0 | |||
|
463 | n | |||
|
464 | p | |||
|
465 | 14 | |||
|
466 | x | |||
|
467 | 17 | |||
|
468 | test_for_redcloth | |||
|
469 | M | |||
|
470 | 1 | |||
|
471 | n | |||
|
472 | n | |||
|
473 | x | |||
|
474 | 17 | |||
|
475 | test_for_redcloth | |||
|
476 | i | |||
|
477 | 96 | |||
|
478 | 5 | |||
|
479 | 7 | |||
|
480 | 0 | |||
|
481 | 64 | |||
|
482 | 47 | |||
|
483 | 49 | |||
|
484 | 1 | |||
|
485 | 1 | |||
|
486 | 15 | |||
|
487 | 5 | |||
|
488 | 7 | |||
|
489 | 2 | |||
|
490 | 64 | |||
|
491 | 45 | |||
|
492 | 3 | |||
|
493 | 4 | |||
|
494 | 13 | |||
|
495 | 71 | |||
|
496 | 5 | |||
|
497 | 47 | |||
|
498 | 9 | |||
|
499 | 37 | |||
|
500 | 47 | |||
|
501 | 49 | |||
|
502 | 6 | |||
|
503 | 0 | |||
|
504 | 13 | |||
|
505 | 7 | |||
|
506 | 7 | |||
|
507 | 64 | |||
|
508 | 47 | |||
|
509 | 49 | |||
|
510 | 8 | |||
|
511 | 1 | |||
|
512 | 15 | |||
|
513 | 8 | |||
|
514 | 43 | |||
|
515 | 7 | |||
|
516 | 7 | |||
|
517 | 64 | |||
|
518 | 49 | |||
|
519 | 5 | |||
|
520 | 1 | |||
|
521 | 49 | |||
|
522 | 9 | |||
|
523 | 0 | |||
|
524 | 47 | |||
|
525 | 49 | |||
|
526 | 10 | |||
|
527 | 2 | |||
|
528 | 15 | |||
|
529 | 5 | |||
|
530 | 7 | |||
|
531 | 11 | |||
|
532 | 64 | |||
|
533 | 49 | |||
|
534 | 12 | |||
|
535 | 0 | |||
|
536 | 45 | |||
|
537 | 3 | |||
|
538 | 13 | |||
|
539 | 13 | |||
|
540 | 71 | |||
|
541 | 5 | |||
|
542 | 47 | |||
|
543 | 9 | |||
|
544 | 82 | |||
|
545 | 47 | |||
|
546 | 49 | |||
|
547 | 6 | |||
|
548 | 0 | |||
|
549 | 13 | |||
|
550 | 7 | |||
|
551 | 14 | |||
|
552 | 64 | |||
|
553 | 47 | |||
|
554 | 49 | |||
|
555 | 8 | |||
|
556 | 1 | |||
|
557 | 15 | |||
|
558 | 8 | |||
|
559 | 88 | |||
|
560 | 7 | |||
|
561 | 14 | |||
|
562 | 64 | |||
|
563 | 49 | |||
|
564 | 5 | |||
|
565 | 1 | |||
|
566 | 49 | |||
|
567 | 9 | |||
|
568 | 0 | |||
|
569 | 47 | |||
|
570 | 49 | |||
|
571 | 10 | |||
|
572 | 2 | |||
|
573 | 11 | |||
|
574 | I | |||
|
575 | 5 | |||
|
576 | I | |||
|
577 | 0 | |||
|
578 | I | |||
|
579 | 0 | |||
|
580 | I | |||
|
581 | 0 | |||
|
582 | n | |||
|
583 | p | |||
|
584 | 15 | |||
|
585 | s | |||
|
586 | 20 | |||
|
587 | coderay/for_redcloth | |||
|
588 | x | |||
|
589 | 7 | |||
|
590 | require | |||
|
591 | s | |||
|
592 | 221 | |||
|
593 | <p><span lang="ruby" class="CodeRay">puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">Hello, World!</span><span style="color:#710">"</span></span></span></p> | |||
|
594 | x | |||
|
595 | 8 | |||
|
596 | RedCloth | |||
|
597 | n | |||
|
598 | x | |||
|
599 | 3 | |||
|
600 | new | |||
|
601 | x | |||
|
602 | 8 | |||
|
603 | allocate | |||
|
604 | s | |||
|
605 | 28 | |||
|
606 | @[ruby]puts "Hello, World!"@ | |||
|
607 | x | |||
|
608 | 10 | |||
|
609 | initialize | |||
|
610 | x | |||
|
611 | 7 | |||
|
612 | to_html | |||
|
613 | x | |||
|
614 | 12 | |||
|
615 | assert_equal | |||
|
616 | s | |||
|
617 | 252 | |||
|
618 | <div lang="ruby" class="CodeRay"> | |||
|
619 | <div class="code"><pre>puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">Hello, World!</span><span style="color:#710">"</span></span></pre></div> | |||
|
620 | </div> | |||
|
621 | ||||
|
622 | x | |||
|
623 | 5 | |||
|
624 | chomp | |||
|
625 | n | |||
|
626 | s | |||
|
627 | 30 | |||
|
628 | bc[ruby]. puts "Hello, World!" | |||
|
629 | p | |||
|
630 | 17 | |||
|
631 | I | |||
|
632 | 0 | |||
|
633 | I | |||
|
634 | f | |||
|
635 | I | |||
|
636 | 0 | |||
|
637 | I | |||
|
638 | 10 | |||
|
639 | I | |||
|
640 | 9 | |||
|
641 | I | |||
|
642 | 11 | |||
|
643 | I | |||
|
644 | d | |||
|
645 | I | |||
|
646 | 12 | |||
|
647 | I | |||
|
648 | 2e | |||
|
649 | I | |||
|
650 | 11 | |||
|
651 | I | |||
|
652 | 33 | |||
|
653 | I | |||
|
654 | 13 | |||
|
655 | I | |||
|
656 | 3a | |||
|
657 | I | |||
|
658 | 18 | |||
|
659 | I | |||
|
660 | 5b | |||
|
661 | I | |||
|
662 | 13 | |||
|
663 | I | |||
|
664 | 60 | |||
|
665 | x | |||
|
666 | 62 | |||
|
667 | /Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb | |||
|
668 | p | |||
|
669 | 0 | |||
|
670 | x | |||
|
671 | 17 | |||
|
672 | method_visibility | |||
|
673 | x | |||
|
674 | 15 | |||
|
675 | add_defn_method | |||
|
676 | x | |||
|
677 | 25 | |||
|
678 | test_for_redcloth_no_lang | |||
|
679 | M | |||
|
680 | 1 | |||
|
681 | n | |||
|
682 | n | |||
|
683 | x | |||
|
684 | 25 | |||
|
685 | test_for_redcloth_no_lang | |||
|
686 | i | |||
|
687 | 96 | |||
|
688 | 5 | |||
|
689 | 7 | |||
|
690 | 0 | |||
|
691 | 64 | |||
|
692 | 47 | |||
|
693 | 49 | |||
|
694 | 1 | |||
|
695 | 1 | |||
|
696 | 15 | |||
|
697 | 5 | |||
|
698 | 7 | |||
|
699 | 2 | |||
|
700 | 64 | |||
|
701 | 45 | |||
|
702 | 3 | |||
|
703 | 4 | |||
|
704 | 13 | |||
|
705 | 71 | |||
|
706 | 5 | |||
|
707 | 47 | |||
|
708 | 9 | |||
|
709 | 37 | |||
|
710 | 47 | |||
|
711 | 49 | |||
|
712 | 6 | |||
|
713 | 0 | |||
|
714 | 13 | |||
|
715 | 7 | |||
|
716 | 7 | |||
|
717 | 64 | |||
|
718 | 47 | |||
|
719 | 49 | |||
|
720 | 8 | |||
|
721 | 1 | |||
|
722 | 15 | |||
|
723 | 8 | |||
|
724 | 43 | |||
|
725 | 7 | |||
|
726 | 7 | |||
|
727 | 64 | |||
|
728 | 49 | |||
|
729 | 5 | |||
|
730 | 1 | |||
|
731 | 49 | |||
|
732 | 9 | |||
|
733 | 0 | |||
|
734 | 47 | |||
|
735 | 49 | |||
|
736 | 10 | |||
|
737 | 2 | |||
|
738 | 15 | |||
|
739 | 5 | |||
|
740 | 7 | |||
|
741 | 11 | |||
|
742 | 64 | |||
|
743 | 49 | |||
|
744 | 12 | |||
|
745 | 0 | |||
|
746 | 45 | |||
|
747 | 3 | |||
|
748 | 13 | |||
|
749 | 13 | |||
|
750 | 71 | |||
|
751 | 5 | |||
|
752 | 47 | |||
|
753 | 9 | |||
|
754 | 82 | |||
|
755 | 47 | |||
|
756 | 49 | |||
|
757 | 6 | |||
|
758 | 0 | |||
|
759 | 13 | |||
|
760 | 7 | |||
|
761 | 14 | |||
|
762 | 64 | |||
|
763 | 47 | |||
|
764 | 49 | |||
|
765 | 8 | |||
|
766 | 1 | |||
|
767 | 15 | |||
|
768 | 8 | |||
|
769 | 88 | |||
|
770 | 7 | |||
|
771 | 14 | |||
|
772 | 64 | |||
|
773 | 49 | |||
|
774 | 5 | |||
|
775 | 1 | |||
|
776 | 49 | |||
|
777 | 9 | |||
|
778 | 0 | |||
|
779 | 47 | |||
|
780 | 49 | |||
|
781 | 10 | |||
|
782 | 2 | |||
|
783 | 11 | |||
|
784 | I | |||
|
785 | 5 | |||
|
786 | I | |||
|
787 | 0 | |||
|
788 | I | |||
|
789 | 0 | |||
|
790 | I | |||
|
791 | 0 | |||
|
792 | n | |||
|
793 | p | |||
|
794 | 15 | |||
|
795 | s | |||
|
796 | 20 | |||
|
797 | coderay/for_redcloth | |||
|
798 | x | |||
|
799 | 7 | |||
|
800 | require | |||
|
801 | s | |||
|
802 | 40 | |||
|
803 | <p><code>puts "Hello, World!"</code></p> | |||
|
804 | x | |||
|
805 | 8 | |||
|
806 | RedCloth | |||
|
807 | n | |||
|
808 | x | |||
|
809 | 3 | |||
|
810 | new | |||
|
811 | x | |||
|
812 | 8 | |||
|
813 | allocate | |||
|
814 | s | |||
|
815 | 22 | |||
|
816 | @puts "Hello, World!"@ | |||
|
817 | x | |||
|
818 | 10 | |||
|
819 | initialize | |||
|
820 | x | |||
|
821 | 7 | |||
|
822 | to_html | |||
|
823 | x | |||
|
824 | 12 | |||
|
825 | assert_equal | |||
|
826 | s | |||
|
827 | 45 | |||
|
828 | <pre><code>puts "Hello, World!"</code></pre> | |||
|
829 | ||||
|
830 | x | |||
|
831 | 5 | |||
|
832 | chomp | |||
|
833 | n | |||
|
834 | s | |||
|
835 | 24 | |||
|
836 | bc. puts "Hello, World!" | |||
|
837 | p | |||
|
838 | 17 | |||
|
839 | I | |||
|
840 | 0 | |||
|
841 | I | |||
|
842 | 1b | |||
|
843 | I | |||
|
844 | 0 | |||
|
845 | I | |||
|
846 | 1c | |||
|
847 | I | |||
|
848 | 9 | |||
|
849 | I | |||
|
850 | 1d | |||
|
851 | I | |||
|
852 | d | |||
|
853 | I | |||
|
854 | 1e | |||
|
855 | I | |||
|
856 | 2e | |||
|
857 | I | |||
|
858 | 1d | |||
|
859 | I | |||
|
860 | 33 | |||
|
861 | I | |||
|
862 | 1f | |||
|
863 | I | |||
|
864 | 3a | |||
|
865 | I | |||
|
866 | 22 | |||
|
867 | I | |||
|
868 | 5b | |||
|
869 | I | |||
|
870 | 1f | |||
|
871 | I | |||
|
872 | 60 | |||
|
873 | x | |||
|
874 | 62 | |||
|
875 | /Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb | |||
|
876 | p | |||
|
877 | 0 | |||
|
878 | x | |||
|
879 | 23 | |||
|
880 | test_for_redcloth_style | |||
|
881 | M | |||
|
882 | 1 | |||
|
883 | n | |||
|
884 | n | |||
|
885 | x | |||
|
886 | 23 | |||
|
887 | test_for_redcloth_style | |||
|
888 | i | |||
|
889 | 54 | |||
|
890 | 5 | |||
|
891 | 7 | |||
|
892 | 0 | |||
|
893 | 64 | |||
|
894 | 47 | |||
|
895 | 49 | |||
|
896 | 1 | |||
|
897 | 1 | |||
|
898 | 15 | |||
|
899 | 5 | |||
|
900 | 7 | |||
|
901 | 2 | |||
|
902 | 64 | |||
|
903 | 49 | |||
|
904 | 3 | |||
|
905 | 0 | |||
|
906 | 45 | |||
|
907 | 4 | |||
|
908 | 5 | |||
|
909 | 13 | |||
|
910 | 71 | |||
|
911 | 6 | |||
|
912 | 47 | |||
|
913 | 9 | |||
|
914 | 40 | |||
|
915 | 47 | |||
|
916 | 49 | |||
|
917 | 7 | |||
|
918 | 0 | |||
|
919 | 13 | |||
|
920 | 7 | |||
|
921 | 8 | |||
|
922 | 64 | |||
|
923 | 47 | |||
|
924 | 49 | |||
|
925 | 9 | |||
|
926 | 1 | |||
|
927 | 15 | |||
|
928 | 8 | |||
|
929 | 46 | |||
|
930 | 7 | |||
|
931 | 8 | |||
|
932 | 64 | |||
|
933 | 49 | |||
|
934 | 6 | |||
|
935 | 1 | |||
|
936 | 49 | |||
|
937 | 10 | |||
|
938 | 0 | |||
|
939 | 47 | |||
|
940 | 49 | |||
|
941 | 11 | |||
|
942 | 2 | |||
|
943 | 11 | |||
|
944 | I | |||
|
945 | 5 | |||
|
946 | I | |||
|
947 | 0 | |||
|
948 | I | |||
|
949 | 0 | |||
|
950 | I | |||
|
951 | 0 | |||
|
952 | n | |||
|
953 | p | |||
|
954 | 12 | |||
|
955 | s | |||
|
956 | 20 | |||
|
957 | coderay/for_redcloth | |||
|
958 | x | |||
|
959 | 7 | |||
|
960 | require | |||
|
961 | s | |||
|
962 | 85 | |||
|
963 | <pre style="color: red;"><code style="color: red;">puts "Hello, World!"</code></pre> | |||
|
964 | ||||
|
965 | x | |||
|
966 | 5 | |||
|
967 | chomp | |||
|
968 | x | |||
|
969 | 8 | |||
|
970 | RedCloth | |||
|
971 | n | |||
|
972 | x | |||
|
973 | 3 | |||
|
974 | new | |||
|
975 | x | |||
|
976 | 8 | |||
|
977 | allocate | |||
|
978 | s | |||
|
979 | 36 | |||
|
980 | bc{color: red}. puts "Hello, World!" | |||
|
981 | x | |||
|
982 | 10 | |||
|
983 | initialize | |||
|
984 | x | |||
|
985 | 7 | |||
|
986 | to_html | |||
|
987 | x | |||
|
988 | 12 | |||
|
989 | assert_equal | |||
|
990 | p | |||
|
991 | 11 | |||
|
992 | I | |||
|
993 | 0 | |||
|
994 | I | |||
|
995 | 25 | |||
|
996 | I | |||
|
997 | 0 | |||
|
998 | I | |||
|
999 | 26 | |||
|
1000 | I | |||
|
1001 | 9 | |||
|
1002 | I | |||
|
1003 | 27 | |||
|
1004 | I | |||
|
1005 | 10 | |||
|
1006 | I | |||
|
1007 | 2a | |||
|
1008 | I | |||
|
1009 | 31 | |||
|
1010 | I | |||
|
1011 | 27 | |||
|
1012 | I | |||
|
1013 | 36 | |||
|
1014 | x | |||
|
1015 | 62 | |||
|
1016 | /Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb | |||
|
1017 | p | |||
|
1018 | 0 | |||
|
1019 | x | |||
|
1020 | 25 | |||
|
1021 | test_for_redcloth_escapes | |||
|
1022 | M | |||
|
1023 | 1 | |||
|
1024 | n | |||
|
1025 | n | |||
|
1026 | x | |||
|
1027 | 25 | |||
|
1028 | test_for_redcloth_escapes | |||
|
1029 | i | |||
|
1030 | 96 | |||
|
1031 | 5 | |||
|
1032 | 7 | |||
|
1033 | 0 | |||
|
1034 | 64 | |||
|
1035 | 47 | |||
|
1036 | 49 | |||
|
1037 | 1 | |||
|
1038 | 1 | |||
|
1039 | 15 | |||
|
1040 | 5 | |||
|
1041 | 7 | |||
|
1042 | 2 | |||
|
1043 | 64 | |||
|
1044 | 45 | |||
|
1045 | 3 | |||
|
1046 | 4 | |||
|
1047 | 13 | |||
|
1048 | 71 | |||
|
1049 | 5 | |||
|
1050 | 47 | |||
|
1051 | 9 | |||
|
1052 | 37 | |||
|
1053 | 47 | |||
|
1054 | 49 | |||
|
1055 | 6 | |||
|
1056 | 0 | |||
|
1057 | 13 | |||
|
1058 | 7 | |||
|
1059 | 7 | |||
|
1060 | 64 | |||
|
1061 | 47 | |||
|
1062 | 49 | |||
|
1063 | 8 | |||
|
1064 | 1 | |||
|
1065 | 15 | |||
|
1066 | 8 | |||
|
1067 | 43 | |||
|
1068 | 7 | |||
|
1069 | 7 | |||
|
1070 | 64 | |||
|
1071 | 49 | |||
|
1072 | 5 | |||
|
1073 | 1 | |||
|
1074 | 49 | |||
|
1075 | 9 | |||
|
1076 | 0 | |||
|
1077 | 47 | |||
|
1078 | 49 | |||
|
1079 | 10 | |||
|
1080 | 2 | |||
|
1081 | 15 | |||
|
1082 | 5 | |||
|
1083 | 7 | |||
|
1084 | 11 | |||
|
1085 | 64 | |||
|
1086 | 49 | |||
|
1087 | 12 | |||
|
1088 | 0 | |||
|
1089 | 45 | |||
|
1090 | 3 | |||
|
1091 | 13 | |||
|
1092 | 13 | |||
|
1093 | 71 | |||
|
1094 | 5 | |||
|
1095 | 47 | |||
|
1096 | 9 | |||
|
1097 | 82 | |||
|
1098 | 47 | |||
|
1099 | 49 | |||
|
1100 | 6 | |||
|
1101 | 0 | |||
|
1102 | 13 | |||
|
1103 | 7 | |||
|
1104 | 14 | |||
|
1105 | 64 | |||
|
1106 | 47 | |||
|
1107 | 49 | |||
|
1108 | 8 | |||
|
1109 | 1 | |||
|
1110 | 15 | |||
|
1111 | 8 | |||
|
1112 | 88 | |||
|
1113 | 7 | |||
|
1114 | 14 | |||
|
1115 | 64 | |||
|
1116 | 49 | |||
|
1117 | 5 | |||
|
1118 | 1 | |||
|
1119 | 49 | |||
|
1120 | 9 | |||
|
1121 | 0 | |||
|
1122 | 47 | |||
|
1123 | 49 | |||
|
1124 | 10 | |||
|
1125 | 2 | |||
|
1126 | 11 | |||
|
1127 | I | |||
|
1128 | 5 | |||
|
1129 | I | |||
|
1130 | 0 | |||
|
1131 | I | |||
|
1132 | 0 | |||
|
1133 | I | |||
|
1134 | 0 | |||
|
1135 | n | |||
|
1136 | p | |||
|
1137 | 15 | |||
|
1138 | s | |||
|
1139 | 20 | |||
|
1140 | coderay/for_redcloth | |||
|
1141 | x | |||
|
1142 | 7 | |||
|
1143 | require | |||
|
1144 | s | |||
|
1145 | 52 | |||
|
1146 | <p><span lang="ruby" class="CodeRay">></span></p> | |||
|
1147 | x | |||
|
1148 | 8 | |||
|
1149 | RedCloth | |||
|
1150 | n | |||
|
1151 | x | |||
|
1152 | 3 | |||
|
1153 | new | |||
|
1154 | x | |||
|
1155 | 8 | |||
|
1156 | allocate | |||
|
1157 | s | |||
|
1158 | 9 | |||
|
1159 | @[ruby]>@ | |||
|
1160 | x | |||
|
1161 | 10 | |||
|
1162 | initialize | |||
|
1163 | x | |||
|
1164 | 7 | |||
|
1165 | to_html | |||
|
1166 | x | |||
|
1167 | 12 | |||
|
1168 | assert_equal | |||
|
1169 | s | |||
|
1170 | 84 | |||
|
1171 | <div lang="ruby" class="CodeRay"> | |||
|
1172 | <div class="code"><pre>&</pre></div> | |||
|
1173 | </div> | |||
|
1174 | ||||
|
1175 | x | |||
|
1176 | 5 | |||
|
1177 | chomp | |||
|
1178 | n | |||
|
1179 | s | |||
|
1180 | 11 | |||
|
1181 | bc[ruby]. & | |||
|
1182 | p | |||
|
1183 | 17 | |||
|
1184 | I | |||
|
1185 | 0 | |||
|
1186 | I | |||
|
1187 | 2d | |||
|
1188 | I | |||
|
1189 | 0 | |||
|
1190 | I | |||
|
1191 | 2e | |||
|
1192 | I | |||
|
1193 | 9 | |||
|
1194 | I | |||
|
1195 | 2f | |||
|
1196 | I | |||
|
1197 | d | |||
|
1198 | I | |||
|
1199 | 30 | |||
|
1200 | I | |||
|
1201 | 2e | |||
|
1202 | I | |||
|
1203 | 2f | |||
|
1204 | I | |||
|
1205 | 33 | |||
|
1206 | I | |||
|
1207 | 31 | |||
|
1208 | I | |||
|
1209 | 3a | |||
|
1210 | I | |||
|
1211 | 36 | |||
|
1212 | I | |||
|
1213 | 5b | |||
|
1214 | I | |||
|
1215 | 31 | |||
|
1216 | I | |||
|
1217 | 60 | |||
|
1218 | x | |||
|
1219 | 62 | |||
|
1220 | /Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb | |||
|
1221 | p | |||
|
1222 | 0 | |||
|
1223 | x | |||
|
1224 | 26 | |||
|
1225 | test_for_redcloth_escapes2 | |||
|
1226 | M | |||
|
1227 | 1 | |||
|
1228 | n | |||
|
1229 | n | |||
|
1230 | x | |||
|
1231 | 26 | |||
|
1232 | test_for_redcloth_escapes2 | |||
|
1233 | i | |||
|
1234 | 51 | |||
|
1235 | 5 | |||
|
1236 | 7 | |||
|
1237 | 0 | |||
|
1238 | 64 | |||
|
1239 | 47 | |||
|
1240 | 49 | |||
|
1241 | 1 | |||
|
1242 | 1 | |||
|
1243 | 15 | |||
|
1244 | 5 | |||
|
1245 | 7 | |||
|
1246 | 2 | |||
|
1247 | 64 | |||
|
1248 | 45 | |||
|
1249 | 3 | |||
|
1250 | 4 | |||
|
1251 | 13 | |||
|
1252 | 71 | |||
|
1253 | 5 | |||
|
1254 | 47 | |||
|
1255 | 9 | |||
|
1256 | 37 | |||
|
1257 | 47 | |||
|
1258 | 49 | |||
|
1259 | 6 | |||
|
1260 | 0 | |||
|
1261 | 13 | |||
|
1262 | 7 | |||
|
1263 | 7 | |||
|
1264 | 64 | |||
|
1265 | 47 | |||
|
1266 | 49 | |||
|
1267 | 8 | |||
|
1268 | 1 | |||
|
1269 | 15 | |||
|
1270 | 8 | |||
|
1271 | 43 | |||
|
1272 | 7 | |||
|
1273 | 7 | |||
|
1274 | 64 | |||
|
1275 | 49 | |||
|
1276 | 5 | |||
|
1277 | 1 | |||
|
1278 | 49 | |||
|
1279 | 9 | |||
|
1280 | 0 | |||
|
1281 | 47 | |||
|
1282 | 49 | |||
|
1283 | 10 | |||
|
1284 | 2 | |||
|
1285 | 11 | |||
|
1286 | I | |||
|
1287 | 5 | |||
|
1288 | I | |||
|
1289 | 0 | |||
|
1290 | I | |||
|
1291 | 0 | |||
|
1292 | I | |||
|
1293 | 0 | |||
|
1294 | n | |||
|
1295 | p | |||
|
1296 | 11 | |||
|
1297 | s | |||
|
1298 | 20 | |||
|
1299 | coderay/for_redcloth | |||
|
1300 | x | |||
|
1301 | 7 | |||
|
1302 | require | |||
|
1303 | s | |||
|
1304 | 149 | |||
|
1305 | <p><span lang="c" class="CodeRay"><span style="color:#579">#include</span> <span style="color:#B44;font-weight:bold"><test.h></span></span></p> | |||
|
1306 | x | |||
|
1307 | 8 | |||
|
1308 | RedCloth | |||
|
1309 | n | |||
|
1310 | x | |||
|
1311 | 3 | |||
|
1312 | new | |||
|
1313 | x | |||
|
1314 | 8 | |||
|
1315 | allocate | |||
|
1316 | s | |||
|
1317 | 22 | |||
|
1318 | @[c]#include <test.h>@ | |||
|
1319 | x | |||
|
1320 | 10 | |||
|
1321 | initialize | |||
|
1322 | x | |||
|
1323 | 7 | |||
|
1324 | to_html | |||
|
1325 | x | |||
|
1326 | 12 | |||
|
1327 | assert_equal | |||
|
1328 | p | |||
|
1329 | 11 | |||
|
1330 | I | |||
|
1331 | 0 | |||
|
1332 | I | |||
|
1333 | 39 | |||
|
1334 | I | |||
|
1335 | 0 | |||
|
1336 | I | |||
|
1337 | 3a | |||
|
1338 | I | |||
|
1339 | 9 | |||
|
1340 | I | |||
|
1341 | 3b | |||
|
1342 | I | |||
|
1343 | d | |||
|
1344 | I | |||
|
1345 | 3c | |||
|
1346 | I | |||
|
1347 | 2e | |||
|
1348 | I | |||
|
1349 | 3b | |||
|
1350 | I | |||
|
1351 | 33 | |||
|
1352 | x | |||
|
1353 | 62 | |||
|
1354 | /Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb | |||
|
1355 | p | |||
|
1356 | 0 | |||
|
1357 | x | |||
|
1358 | 32 | |||
|
1359 | test_for_redcloth_false_positive | |||
|
1360 | M | |||
|
1361 | 1 | |||
|
1362 | n | |||
|
1363 | n | |||
|
1364 | x | |||
|
1365 | 32 | |||
|
1366 | test_for_redcloth_false_positive | |||
|
1367 | i | |||
|
1368 | 138 | |||
|
1369 | 5 | |||
|
1370 | 7 | |||
|
1371 | 0 | |||
|
1372 | 64 | |||
|
1373 | 47 | |||
|
1374 | 49 | |||
|
1375 | 1 | |||
|
1376 | 1 | |||
|
1377 | 15 | |||
|
1378 | 5 | |||
|
1379 | 7 | |||
|
1380 | 2 | |||
|
1381 | 64 | |||
|
1382 | 45 | |||
|
1383 | 3 | |||
|
1384 | 4 | |||
|
1385 | 13 | |||
|
1386 | 71 | |||
|
1387 | 5 | |||
|
1388 | 47 | |||
|
1389 | 9 | |||
|
1390 | 37 | |||
|
1391 | 47 | |||
|
1392 | 49 | |||
|
1393 | 6 | |||
|
1394 | 0 | |||
|
1395 | 13 | |||
|
1396 | 7 | |||
|
1397 | 7 | |||
|
1398 | 64 | |||
|
1399 | 47 | |||
|
1400 | 49 | |||
|
1401 | 8 | |||
|
1402 | 1 | |||
|
1403 | 15 | |||
|
1404 | 8 | |||
|
1405 | 43 | |||
|
1406 | 7 | |||
|
1407 | 7 | |||
|
1408 | 64 | |||
|
1409 | 49 | |||
|
1410 | 5 | |||
|
1411 | 1 | |||
|
1412 | 49 | |||
|
1413 | 9 | |||
|
1414 | 0 | |||
|
1415 | 47 | |||
|
1416 | 49 | |||
|
1417 | 10 | |||
|
1418 | 2 | |||
|
1419 | 15 | |||
|
1420 | 5 | |||
|
1421 | 7 | |||
|
1422 | 11 | |||
|
1423 | 64 | |||
|
1424 | 45 | |||
|
1425 | 3 | |||
|
1426 | 12 | |||
|
1427 | 13 | |||
|
1428 | 71 | |||
|
1429 | 5 | |||
|
1430 | 47 | |||
|
1431 | 9 | |||
|
1432 | 79 | |||
|
1433 | 47 | |||
|
1434 | 49 | |||
|
1435 | 6 | |||
|
1436 | 0 | |||
|
1437 | 13 | |||
|
1438 | 7 | |||
|
1439 | 13 | |||
|
1440 | 64 | |||
|
1441 | 47 | |||
|
1442 | 49 | |||
|
1443 | 8 | |||
|
1444 | 1 | |||
|
1445 | 15 | |||
|
1446 | 8 | |||
|
1447 | 85 | |||
|
1448 | 7 | |||
|
1449 | 13 | |||
|
1450 | 64 | |||
|
1451 | 49 | |||
|
1452 | 5 | |||
|
1453 | 1 | |||
|
1454 | 49 | |||
|
1455 | 9 | |||
|
1456 | 0 | |||
|
1457 | 47 | |||
|
1458 | 49 | |||
|
1459 | 10 | |||
|
1460 | 2 | |||
|
1461 | 15 | |||
|
1462 | 5 | |||
|
1463 | 7 | |||
|
1464 | 14 | |||
|
1465 | 64 | |||
|
1466 | 49 | |||
|
1467 | 15 | |||
|
1468 | 0 | |||
|
1469 | 45 | |||
|
1470 | 3 | |||
|
1471 | 16 | |||
|
1472 | 13 | |||
|
1473 | 71 | |||
|
1474 | 5 | |||
|
1475 | 47 | |||
|
1476 | 9 | |||
|
1477 | 124 | |||
|
1478 | 47 | |||
|
1479 | 49 | |||
|
1480 | 6 | |||
|
1481 | 0 | |||
|
1482 | 13 | |||
|
1483 | 7 | |||
|
1484 | 17 | |||
|
1485 | 64 | |||
|
1486 | 47 | |||
|
1487 | 49 | |||
|
1488 | 8 | |||
|
1489 | 1 | |||
|
1490 | 15 | |||
|
1491 | 8 | |||
|
1492 | 130 | |||
|
1493 | 7 | |||
|
1494 | 17 | |||
|
1495 | 64 | |||
|
1496 | 49 | |||
|
1497 | 5 | |||
|
1498 | 1 | |||
|
1499 | 49 | |||
|
1500 | 9 | |||
|
1501 | 0 | |||
|
1502 | 47 | |||
|
1503 | 49 | |||
|
1504 | 10 | |||
|
1505 | 2 | |||
|
1506 | 11 | |||
|
1507 | I | |||
|
1508 | 5 | |||
|
1509 | I | |||
|
1510 | 0 | |||
|
1511 | I | |||
|
1512 | 0 | |||
|
1513 | I | |||
|
1514 | 0 | |||
|
1515 | n | |||
|
1516 | p | |||
|
1517 | 18 | |||
|
1518 | s | |||
|
1519 | 20 | |||
|
1520 | coderay/for_redcloth | |||
|
1521 | x | |||
|
1522 | 7 | |||
|
1523 | require | |||
|
1524 | s | |||
|
1525 | 38 | |||
|
1526 | <p><code>[project]_dff.skjd</code></p> | |||
|
1527 | x | |||
|
1528 | 8 | |||
|
1529 | RedCloth | |||
|
1530 | n | |||
|
1531 | x | |||
|
1532 | 3 | |||
|
1533 | new | |||
|
1534 | x | |||
|
1535 | 8 | |||
|
1536 | allocate | |||
|
1537 | s | |||
|
1538 | 20 | |||
|
1539 | @[project]_dff.skjd@ | |||
|
1540 | x | |||
|
1541 | 10 | |||
|
1542 | initialize | |||
|
1543 | x | |||
|
1544 | 7 | |||
|
1545 | to_html | |||
|
1546 | x | |||
|
1547 | 12 | |||
|
1548 | assert_equal | |||
|
1549 | s | |||
|
1550 | 57 | |||
|
1551 | <p><span lang="ruby" class="CodeRay">_dff.skjd</span></p> | |||
|
1552 | n | |||
|
1553 | s | |||
|
1554 | 17 | |||
|
1555 | @[ruby]_dff.skjd@ | |||
|
1556 | s | |||
|
1557 | 43 | |||
|
1558 | <pre><code>[project]_dff.skjd</code></pre> | |||
|
1559 | ||||
|
1560 | x | |||
|
1561 | 5 | |||
|
1562 | chomp | |||
|
1563 | n | |||
|
1564 | s | |||
|
1565 | 22 | |||
|
1566 | bc. [project]_dff.skjd | |||
|
1567 | p | |||
|
1568 | 23 | |||
|
1569 | I | |||
|
1570 | 0 | |||
|
1571 | I | |||
|
1572 | 40 | |||
|
1573 | I | |||
|
1574 | 0 | |||
|
1575 | I | |||
|
1576 | 41 | |||
|
1577 | I | |||
|
1578 | 9 | |||
|
1579 | I | |||
|
1580 | 42 | |||
|
1581 | I | |||
|
1582 | d | |||
|
1583 | I | |||
|
1584 | 43 | |||
|
1585 | I | |||
|
1586 | 2e | |||
|
1587 | I | |||
|
1588 | 42 | |||
|
1589 | I | |||
|
1590 | 33 | |||
|
1591 | I | |||
|
1592 | 45 | |||
|
1593 | I | |||
|
1594 | 37 | |||
|
1595 | I | |||
|
1596 | 46 | |||
|
1597 | I | |||
|
1598 | 58 | |||
|
1599 | I | |||
|
1600 | 45 | |||
|
1601 | I | |||
|
1602 | 5d | |||
|
1603 | I | |||
|
1604 | 47 | |||
|
1605 | I | |||
|
1606 | 64 | |||
|
1607 | I | |||
|
1608 | 4a | |||
|
1609 | I | |||
|
1610 | 85 | |||
|
1611 | I | |||
|
1612 | 47 | |||
|
1613 | I | |||
|
1614 | 8a | |||
|
1615 | x | |||
|
1616 | 62 | |||
|
1617 | /Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb | |||
|
1618 | p | |||
|
1619 | 0 | |||
|
1620 | p | |||
|
1621 | 13 | |||
|
1622 | I | |||
|
1623 | 2 | |||
|
1624 | I | |||
|
1625 | f | |||
|
1626 | I | |||
|
1627 | 10 | |||
|
1628 | I | |||
|
1629 | 1b | |||
|
1630 | I | |||
|
1631 | 1e | |||
|
1632 | I | |||
|
1633 | 25 | |||
|
1634 | I | |||
|
1635 | 2c | |||
|
1636 | I | |||
|
1637 | 2d | |||
|
1638 | I | |||
|
1639 | 3a | |||
|
1640 | I | |||
|
1641 | 39 | |||
|
1642 | I | |||
|
1643 | 48 | |||
|
1644 | I | |||
|
1645 | 40 | |||
|
1646 | I | |||
|
1647 | 56 | |||
|
1648 | x | |||
|
1649 | 62 | |||
|
1650 | /Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb | |||
|
1651 | p | |||
|
1652 | 0 | |||
|
1653 | x | |||
|
1654 | 13 | |||
|
1655 | attach_method | |||
|
1656 | p | |||
|
1657 | 23 | |||
|
1658 | I | |||
|
1659 | 0 | |||
|
1660 | I | |||
|
1661 | 1 | |||
|
1662 | I | |||
|
1663 | 9 | |||
|
1664 | I | |||
|
1665 | 2 | |||
|
1666 | I | |||
|
1667 | 18 | |||
|
1668 | I | |||
|
1669 | 3 | |||
|
1670 | I | |||
|
1671 | 21 | |||
|
1672 | I | |||
|
1673 | 6 | |||
|
1674 | I | |||
|
1675 | 51 | |||
|
1676 | I | |||
|
1677 | 7 | |||
|
1678 | I | |||
|
1679 | 85 | |||
|
1680 | I | |||
|
1681 | 8 | |||
|
1682 | I | |||
|
1683 | 95 | |||
|
1684 | I | |||
|
1685 | 9 | |||
|
1686 | I | |||
|
1687 | a2 | |||
|
1688 | I | |||
|
1689 | a | |||
|
1690 | I | |||
|
1691 | b6 | |||
|
1692 | I | |||
|
1693 | 4d | |||
|
1694 | I | |||
|
1695 | d3 | |||
|
1696 | I | |||
|
1697 | d | |||
|
1698 | I | |||
|
1699 | f5 | |||
|
1700 | I | |||
|
1701 | 4d | |||
|
1702 | I | |||
|
1703 | f9 | |||
|
1704 | x | |||
|
1705 | 62 | |||
|
1706 | /Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb | |||
|
1707 | p | |||
|
1708 | 0 |
@@ -0,0 +1,11 | |||||
|
1 | require 'test/unit' | |||
|
2 | require 'coderay' | |||
|
3 | ||||
|
4 | class PluginScannerTest < Test::Unit::TestCase | |||
|
5 | ||||
|
6 | def test_load | |||
|
7 | require File.join(File.dirname(__FILE__), 'vhdl') | |||
|
8 | assert_equal 'VHDL', CodeRay.scanner(:vhdl).class.name | |||
|
9 | end | |||
|
10 | ||||
|
11 | end |
@@ -0,0 +1,317 | |||||
|
1 | !RBIX | |||
|
2 | 0 | |||
|
3 | x | |||
|
4 | M | |||
|
5 | 1 | |||
|
6 | n | |||
|
7 | n | |||
|
8 | x | |||
|
9 | 10 | |||
|
10 | __script__ | |||
|
11 | i | |||
|
12 | 53 | |||
|
13 | 5 | |||
|
14 | 7 | |||
|
15 | 0 | |||
|
16 | 64 | |||
|
17 | 47 | |||
|
18 | 49 | |||
|
19 | 1 | |||
|
20 | 1 | |||
|
21 | 15 | |||
|
22 | 5 | |||
|
23 | 7 | |||
|
24 | 2 | |||
|
25 | 64 | |||
|
26 | 47 | |||
|
27 | 49 | |||
|
28 | 1 | |||
|
29 | 1 | |||
|
30 | 15 | |||
|
31 | 99 | |||
|
32 | 7 | |||
|
33 | 3 | |||
|
34 | 45 | |||
|
35 | 4 | |||
|
36 | 5 | |||
|
37 | 43 | |||
|
38 | 6 | |||
|
39 | 43 | |||
|
40 | 7 | |||
|
41 | 65 | |||
|
42 | 49 | |||
|
43 | 8 | |||
|
44 | 3 | |||
|
45 | 13 | |||
|
46 | 99 | |||
|
47 | 12 | |||
|
48 | 7 | |||
|
49 | 9 | |||
|
50 | 12 | |||
|
51 | 7 | |||
|
52 | 10 | |||
|
53 | 12 | |||
|
54 | 65 | |||
|
55 | 12 | |||
|
56 | 49 | |||
|
57 | 11 | |||
|
58 | 4 | |||
|
59 | 15 | |||
|
60 | 49 | |||
|
61 | 9 | |||
|
62 | 0 | |||
|
63 | 15 | |||
|
64 | 2 | |||
|
65 | 11 | |||
|
66 | I | |||
|
67 | 6 | |||
|
68 | I | |||
|
69 | 0 | |||
|
70 | I | |||
|
71 | 0 | |||
|
72 | I | |||
|
73 | 0 | |||
|
74 | n | |||
|
75 | p | |||
|
76 | 12 | |||
|
77 | s | |||
|
78 | 9 | |||
|
79 | test/unit | |||
|
80 | x | |||
|
81 | 7 | |||
|
82 | require | |||
|
83 | s | |||
|
84 | 7 | |||
|
85 | coderay | |||
|
86 | x | |||
|
87 | 17 | |||
|
88 | PluginScannerTest | |||
|
89 | x | |||
|
90 | 4 | |||
|
91 | Test | |||
|
92 | n | |||
|
93 | x | |||
|
94 | 4 | |||
|
95 | Unit | |||
|
96 | x | |||
|
97 | 8 | |||
|
98 | TestCase | |||
|
99 | x | |||
|
100 | 10 | |||
|
101 | open_class | |||
|
102 | x | |||
|
103 | 14 | |||
|
104 | __class_init__ | |||
|
105 | M | |||
|
106 | 1 | |||
|
107 | n | |||
|
108 | n | |||
|
109 | x | |||
|
110 | 17 | |||
|
111 | PluginScannerTest | |||
|
112 | i | |||
|
113 | 16 | |||
|
114 | 5 | |||
|
115 | 66 | |||
|
116 | 99 | |||
|
117 | 7 | |||
|
118 | 0 | |||
|
119 | 7 | |||
|
120 | 1 | |||
|
121 | 65 | |||
|
122 | 67 | |||
|
123 | 49 | |||
|
124 | 2 | |||
|
125 | 0 | |||
|
126 | 49 | |||
|
127 | 3 | |||
|
128 | 4 | |||
|
129 | 11 | |||
|
130 | I | |||
|
131 | 5 | |||
|
132 | I | |||
|
133 | 0 | |||
|
134 | I | |||
|
135 | 0 | |||
|
136 | I | |||
|
137 | 0 | |||
|
138 | n | |||
|
139 | p | |||
|
140 | 4 | |||
|
141 | x | |||
|
142 | 9 | |||
|
143 | test_load | |||
|
144 | M | |||
|
145 | 1 | |||
|
146 | n | |||
|
147 | n | |||
|
148 | x | |||
|
149 | 9 | |||
|
150 | test_load | |||
|
151 | i | |||
|
152 | 48 | |||
|
153 | 5 | |||
|
154 | 45 | |||
|
155 | 0 | |||
|
156 | 1 | |||
|
157 | 45 | |||
|
158 | 0 | |||
|
159 | 2 | |||
|
160 | 65 | |||
|
161 | 49 | |||
|
162 | 3 | |||
|
163 | 0 | |||
|
164 | 49 | |||
|
165 | 4 | |||
|
166 | 1 | |||
|
167 | 7 | |||
|
168 | 5 | |||
|
169 | 64 | |||
|
170 | 49 | |||
|
171 | 6 | |||
|
172 | 2 | |||
|
173 | 47 | |||
|
174 | 49 | |||
|
175 | 7 | |||
|
176 | 1 | |||
|
177 | 15 | |||
|
178 | 5 | |||
|
179 | 7 | |||
|
180 | 8 | |||
|
181 | 64 | |||
|
182 | 45 | |||
|
183 | 9 | |||
|
184 | 10 | |||
|
185 | 7 | |||
|
186 | 11 | |||
|
187 | 49 | |||
|
188 | 12 | |||
|
189 | 1 | |||
|
190 | 49 | |||
|
191 | 13 | |||
|
192 | 0 | |||
|
193 | 49 | |||
|
194 | 14 | |||
|
195 | 0 | |||
|
196 | 47 | |||
|
197 | 49 | |||
|
198 | 15 | |||
|
199 | 2 | |||
|
200 | 11 | |||
|
201 | I | |||
|
202 | 4 | |||
|
203 | I | |||
|
204 | 0 | |||
|
205 | I | |||
|
206 | 0 | |||
|
207 | I | |||
|
208 | 0 | |||
|
209 | n | |||
|
210 | p | |||
|
211 | 16 | |||
|
212 | x | |||
|
213 | 4 | |||
|
214 | File | |||
|
215 | n | |||
|
216 | n | |||
|
217 | x | |||
|
218 | 11 | |||
|
219 | active_path | |||
|
220 | x | |||
|
221 | 7 | |||
|
222 | dirname | |||
|
223 | s | |||
|
224 | 4 | |||
|
225 | vhdl | |||
|
226 | x | |||
|
227 | 4 | |||
|
228 | join | |||
|
229 | x | |||
|
230 | 7 | |||
|
231 | require | |||
|
232 | s | |||
|
233 | 4 | |||
|
234 | VHDL | |||
|
235 | x | |||
|
236 | 7 | |||
|
237 | CodeRay | |||
|
238 | n | |||
|
239 | x | |||
|
240 | 4 | |||
|
241 | vhdl | |||
|
242 | x | |||
|
243 | 7 | |||
|
244 | scanner | |||
|
245 | x | |||
|
246 | 5 | |||
|
247 | class | |||
|
248 | x | |||
|
249 | 4 | |||
|
250 | name | |||
|
251 | x | |||
|
252 | 12 | |||
|
253 | assert_equal | |||
|
254 | p | |||
|
255 | 7 | |||
|
256 | I | |||
|
257 | 0 | |||
|
258 | I | |||
|
259 | 6 | |||
|
260 | I | |||
|
261 | 0 | |||
|
262 | I | |||
|
263 | 7 | |||
|
264 | I | |||
|
265 | 19 | |||
|
266 | I | |||
|
267 | 8 | |||
|
268 | I | |||
|
269 | 30 | |||
|
270 | x | |||
|
271 | 69 | |||
|
272 | /Users/murphy/ruby/coderay-0.9/test/functional/load_plugin_scanner.rb | |||
|
273 | p | |||
|
274 | 0 | |||
|
275 | x | |||
|
276 | 17 | |||
|
277 | method_visibility | |||
|
278 | x | |||
|
279 | 15 | |||
|
280 | add_defn_method | |||
|
281 | p | |||
|
282 | 3 | |||
|
283 | I | |||
|
284 | 2 | |||
|
285 | I | |||
|
286 | 6 | |||
|
287 | I | |||
|
288 | 10 | |||
|
289 | x | |||
|
290 | 69 | |||
|
291 | /Users/murphy/ruby/coderay-0.9/test/functional/load_plugin_scanner.rb | |||
|
292 | p | |||
|
293 | 0 | |||
|
294 | x | |||
|
295 | 13 | |||
|
296 | attach_method | |||
|
297 | p | |||
|
298 | 7 | |||
|
299 | I | |||
|
300 | 0 | |||
|
301 | I | |||
|
302 | 1 | |||
|
303 | I | |||
|
304 | 9 | |||
|
305 | I | |||
|
306 | 2 | |||
|
307 | I | |||
|
308 | 12 | |||
|
309 | I | |||
|
310 | 4 | |||
|
311 | I | |||
|
312 | 35 | |||
|
313 | x | |||
|
314 | 69 | |||
|
315 | /Users/murphy/ruby/coderay-0.9/test/functional/load_plugin_scanner.rb | |||
|
316 | p | |||
|
317 | 0 |
@@ -0,0 +1,12 | |||||
|
1 | require 'test/unit' | |||
|
2 | ||||
|
3 | MYDIR = File.dirname(__FILE__) | |||
|
4 | ||||
|
5 | $:.unshift 'lib' | |||
|
6 | require 'coderay' | |||
|
7 | puts "Running basic CodeRay #{CodeRay::VERSION} tests..." | |||
|
8 | ||||
|
9 | suite = %w(basic load_plugin_scanner word_list) | |||
|
10 | for test_case in suite | |||
|
11 | load File.join(MYDIR, test_case + '.rb') | |||
|
12 | end |
@@ -0,0 +1,322 | |||||
|
1 | !RBIX | |||
|
2 | 0 | |||
|
3 | x | |||
|
4 | M | |||
|
5 | 1 | |||
|
6 | n | |||
|
7 | n | |||
|
8 | x | |||
|
9 | 10 | |||
|
10 | __script__ | |||
|
11 | i | |||
|
12 | 95 | |||
|
13 | 5 | |||
|
14 | 7 | |||
|
15 | 0 | |||
|
16 | 64 | |||
|
17 | 47 | |||
|
18 | 49 | |||
|
19 | 1 | |||
|
20 | 1 | |||
|
21 | 15 | |||
|
22 | 65 | |||
|
23 | 7 | |||
|
24 | 2 | |||
|
25 | 45 | |||
|
26 | 3 | |||
|
27 | 4 | |||
|
28 | 65 | |||
|
29 | 49 | |||
|
30 | 5 | |||
|
31 | 0 | |||
|
32 | 49 | |||
|
33 | 6 | |||
|
34 | 1 | |||
|
35 | 49 | |||
|
36 | 7 | |||
|
37 | 2 | |||
|
38 | 15 | |||
|
39 | 99 | |||
|
40 | 43 | |||
|
41 | 8 | |||
|
42 | 7 | |||
|
43 | 9 | |||
|
44 | 49 | |||
|
45 | 10 | |||
|
46 | 1 | |||
|
47 | 7 | |||
|
48 | 11 | |||
|
49 | 64 | |||
|
50 | 49 | |||
|
51 | 12 | |||
|
52 | 1 | |||
|
53 | 15 | |||
|
54 | 5 | |||
|
55 | 7 | |||
|
56 | 13 | |||
|
57 | 64 | |||
|
58 | 47 | |||
|
59 | 49 | |||
|
60 | 1 | |||
|
61 | 1 | |||
|
62 | 15 | |||
|
63 | 5 | |||
|
64 | 7 | |||
|
65 | 14 | |||
|
66 | 45 | |||
|
67 | 15 | |||
|
68 | 16 | |||
|
69 | 43 | |||
|
70 | 17 | |||
|
71 | 47 | |||
|
72 | 49 | |||
|
73 | 18 | |||
|
74 | 0 | |||
|
75 | 7 | |||
|
76 | 19 | |||
|
77 | 63 | |||
|
78 | 3 | |||
|
79 | 47 | |||
|
80 | 49 | |||
|
81 | 20 | |||
|
82 | 1 | |||
|
83 | 15 | |||
|
84 | 7 | |||
|
85 | 21 | |||
|
86 | 64 | |||
|
87 | 7 | |||
|
88 | 22 | |||
|
89 | 64 | |||
|
90 | 7 | |||
|
91 | 23 | |||
|
92 | 64 | |||
|
93 | 35 | |||
|
94 | 3 | |||
|
95 | 19 | |||
|
96 | 0 | |||
|
97 | 15 | |||
|
98 | 20 | |||
|
99 | 0 | |||
|
100 | 56 | |||
|
101 | 24 | |||
|
102 | 50 | |||
|
103 | 25 | |||
|
104 | 0 | |||
|
105 | 15 | |||
|
106 | 2 | |||
|
107 | 11 | |||
|
108 | I | |||
|
109 | 6 | |||
|
110 | I | |||
|
111 | 2 | |||
|
112 | I | |||
|
113 | 0 | |||
|
114 | I | |||
|
115 | 0 | |||
|
116 | n | |||
|
117 | p | |||
|
118 | 26 | |||
|
119 | s | |||
|
120 | 9 | |||
|
121 | test/unit | |||
|
122 | x | |||
|
123 | 7 | |||
|
124 | require | |||
|
125 | x | |||
|
126 | 5 | |||
|
127 | MYDIR | |||
|
128 | x | |||
|
129 | 4 | |||
|
130 | File | |||
|
131 | n | |||
|
132 | x | |||
|
133 | 11 | |||
|
134 | active_path | |||
|
135 | x | |||
|
136 | 7 | |||
|
137 | dirname | |||
|
138 | x | |||
|
139 | 9 | |||
|
140 | const_set | |||
|
141 | x | |||
|
142 | 7 | |||
|
143 | Globals | |||
|
144 | x | |||
|
145 | 2 | |||
|
146 | $: | |||
|
147 | x | |||
|
148 | 2 | |||
|
149 | [] | |||
|
150 | s | |||
|
151 | 3 | |||
|
152 | lib | |||
|
153 | x | |||
|
154 | 2 | |||
|
155 | << | |||
|
156 | s | |||
|
157 | 7 | |||
|
158 | coderay | |||
|
159 | s | |||
|
160 | 22 | |||
|
161 | Running basic CodeRay | |||
|
162 | x | |||
|
163 | 7 | |||
|
164 | CodeRay | |||
|
165 | n | |||
|
166 | x | |||
|
167 | 7 | |||
|
168 | VERSION | |||
|
169 | x | |||
|
170 | 4 | |||
|
171 | to_s | |||
|
172 | s | |||
|
173 | 9 | |||
|
174 | tests... | |||
|
175 | x | |||
|
176 | 4 | |||
|
177 | puts | |||
|
178 | s | |||
|
179 | 5 | |||
|
180 | basic | |||
|
181 | s | |||
|
182 | 19 | |||
|
183 | load_plugin_scanner | |||
|
184 | s | |||
|
185 | 9 | |||
|
186 | word_list | |||
|
187 | M | |||
|
188 | 1 | |||
|
189 | p | |||
|
190 | 2 | |||
|
191 | x | |||
|
192 | 9 | |||
|
193 | for_block | |||
|
194 | t | |||
|
195 | n | |||
|
196 | x | |||
|
197 | 9 | |||
|
198 | __block__ | |||
|
199 | i | |||
|
200 | 28 | |||
|
201 | 57 | |||
|
202 | 22 | |||
|
203 | 1 | |||
|
204 | 1 | |||
|
205 | 15 | |||
|
206 | 5 | |||
|
207 | 45 | |||
|
208 | 0 | |||
|
209 | 1 | |||
|
210 | 45 | |||
|
211 | 2 | |||
|
212 | 3 | |||
|
213 | 21 | |||
|
214 | 1 | |||
|
215 | 1 | |||
|
216 | 7 | |||
|
217 | 4 | |||
|
218 | 64 | |||
|
219 | 81 | |||
|
220 | 5 | |||
|
221 | 49 | |||
|
222 | 6 | |||
|
223 | 2 | |||
|
224 | 47 | |||
|
225 | 49 | |||
|
226 | 7 | |||
|
227 | 1 | |||
|
228 | 11 | |||
|
229 | I | |||
|
230 | 6 | |||
|
231 | I | |||
|
232 | 0 | |||
|
233 | I | |||
|
234 | 1 | |||
|
235 | I | |||
|
236 | 1 | |||
|
237 | n | |||
|
238 | p | |||
|
239 | 8 | |||
|
240 | x | |||
|
241 | 4 | |||
|
242 | File | |||
|
243 | n | |||
|
244 | x | |||
|
245 | 5 | |||
|
246 | MYDIR | |||
|
247 | n | |||
|
248 | s | |||
|
249 | 3 | |||
|
250 | .rb | |||
|
251 | x | |||
|
252 | 1 | |||
|
253 | + | |||
|
254 | x | |||
|
255 | 4 | |||
|
256 | join | |||
|
257 | x | |||
|
258 | 4 | |||
|
259 | load | |||
|
260 | p | |||
|
261 | 5 | |||
|
262 | I | |||
|
263 | 0 | |||
|
264 | I | |||
|
265 | a | |||
|
266 | I | |||
|
267 | 5 | |||
|
268 | I | |||
|
269 | b | |||
|
270 | I | |||
|
271 | 1c | |||
|
272 | x | |||
|
273 | 55 | |||
|
274 | /Users/murphy/ruby/coderay-0.9/test/functional/suite.rb | |||
|
275 | p | |||
|
276 | 0 | |||
|
277 | x | |||
|
278 | 4 | |||
|
279 | each | |||
|
280 | p | |||
|
281 | 15 | |||
|
282 | I | |||
|
283 | 0 | |||
|
284 | I | |||
|
285 | 1 | |||
|
286 | I | |||
|
287 | 9 | |||
|
288 | I | |||
|
289 | 3 | |||
|
290 | I | |||
|
291 | 1a | |||
|
292 | I | |||
|
293 | 5 | |||
|
294 | I | |||
|
295 | 29 | |||
|
296 | I | |||
|
297 | 6 | |||
|
298 | I | |||
|
299 | 32 | |||
|
300 | I | |||
|
301 | 7 | |||
|
302 | I | |||
|
303 | 47 | |||
|
304 | I | |||
|
305 | 9 | |||
|
306 | I | |||
|
307 | 55 | |||
|
308 | I | |||
|
309 | a | |||
|
310 | I | |||
|
311 | 5f | |||
|
312 | x | |||
|
313 | 55 | |||
|
314 | /Users/murphy/ruby/coderay-0.9/test/functional/suite.rb | |||
|
315 | p | |||
|
316 | 2 | |||
|
317 | x | |||
|
318 | 5 | |||
|
319 | suite | |||
|
320 | x | |||
|
321 | 9 | |||
|
322 | test_case |
@@ -0,0 +1,126 | |||||
|
1 | class VHDL < CodeRay::Scanners::Scanner | |||
|
2 | ||||
|
3 | register_for :vhdl | |||
|
4 | ||||
|
5 | RESERVED_WORDS = [ | |||
|
6 | 'access','after','alias','all','assert','architecture','begin', | |||
|
7 | 'block','body','buffer','bus','case','component','configuration','constant', | |||
|
8 | 'disconnect','downto','else','elsif','end','entity','exit','file','for', | |||
|
9 | 'function','generate','generic','group','guarded','if','impure','in', | |||
|
10 | 'inertial','inout','is','label','library','linkage','literal','loop', | |||
|
11 | 'map','new','next','null','of','on','open','others','out','package', | |||
|
12 | 'port','postponed','procedure','process','pure','range','record','register', | |||
|
13 | 'reject','report','return','select','severity','signal','shared','subtype', | |||
|
14 | 'then','to','transport','type','unaffected','units','until','use','variable', | |||
|
15 | 'wait','when','while','with','note','warning','error','failure','and', | |||
|
16 | 'or','xor','not','nor', | |||
|
17 | 'array' | |||
|
18 | ] | |||
|
19 | ||||
|
20 | PREDEFINED_TYPES = [ | |||
|
21 | 'bit','bit_vector','character','boolean','integer','real','time','string', | |||
|
22 | 'severity_level','positive','natural','signed','unsigned','line','text', | |||
|
23 | 'std_logic','std_logic_vector','std_ulogic','std_ulogic_vector','qsim_state', | |||
|
24 | 'qsim_state_vector','qsim_12state','qsim_12state_vector','qsim_strength', | |||
|
25 | 'mux_bit','mux_vector','reg_bit','reg_vector','wor_bit','wor_vector' | |||
|
26 | ] | |||
|
27 | ||||
|
28 | PREDEFINED_CONSTANTS = [ | |||
|
29 | ||||
|
30 | ] | |||
|
31 | ||||
|
32 | IDENT_KIND = CodeRay::CaseIgnoringWordList.new(:ident). | |||
|
33 | add(RESERVED_WORDS, :reserved). | |||
|
34 | add(PREDEFINED_TYPES, :pre_type). | |||
|
35 | add(PREDEFINED_CONSTANTS, :pre_constant) | |||
|
36 | ||||
|
37 | ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x | |||
|
38 | UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x | |||
|
39 | ||||
|
40 | def scan_tokens tokens, options | |||
|
41 | ||||
|
42 | state = :initial | |||
|
43 | ||||
|
44 | until eos? | |||
|
45 | ||||
|
46 | kind = nil | |||
|
47 | match = nil | |||
|
48 | ||||
|
49 | case state | |||
|
50 | ||||
|
51 | when :initial | |||
|
52 | ||||
|
53 | if scan(/ \s+ | \\\n /x) | |||
|
54 | kind = :space | |||
|
55 | ||||
|
56 | elsif scan(/-- .*/x) | |||
|
57 | kind = :comment | |||
|
58 | ||||
|
59 | elsif scan(/ [-+*\/=<>?:;,!&^|()\[\]{}~%]+ | \.(?!\d) /x) | |||
|
60 | kind = :operator | |||
|
61 | ||||
|
62 | elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x) | |||
|
63 | kind = IDENT_KIND[match.downcase] | |||
|
64 | ||||
|
65 | elsif match = scan(/[a-z]?"/i) | |||
|
66 | tokens << [:open, :string] | |||
|
67 | state = :string | |||
|
68 | kind = :delimiter | |||
|
69 | ||||
|
70 | elsif scan(/ L?' (?: [^\'\n\\] | \\ #{ESCAPE} )? '? /ox) | |||
|
71 | kind = :char | |||
|
72 | ||||
|
73 | elsif scan(/(?:\d+)(?![.eEfF])/) | |||
|
74 | kind = :integer | |||
|
75 | ||||
|
76 | elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/) | |||
|
77 | kind = :float | |||
|
78 | ||||
|
79 | else | |||
|
80 | getch | |||
|
81 | kind = :error | |||
|
82 | ||||
|
83 | end | |||
|
84 | ||||
|
85 | when :string | |||
|
86 | if scan(/[^\\\n"]+/) | |||
|
87 | kind = :content | |||
|
88 | elsif scan(/"/) | |||
|
89 | tokens << ['"', :delimiter] | |||
|
90 | tokens << [:close, :string] | |||
|
91 | state = :initial | |||
|
92 | next | |||
|
93 | elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox) | |||
|
94 | kind = :char | |||
|
95 | elsif scan(/ \\ | $ /x) | |||
|
96 | tokens << [:close, :string] | |||
|
97 | kind = :error | |||
|
98 | state = :initial | |||
|
99 | else | |||
|
100 | raise_inspect "else case \" reached; %p not handled." % peek(1), tokens | |||
|
101 | end | |||
|
102 | ||||
|
103 | else | |||
|
104 | raise_inspect 'Unknown state', tokens | |||
|
105 | ||||
|
106 | end | |||
|
107 | ||||
|
108 | match ||= matched | |||
|
109 | if $DEBUG and not kind | |||
|
110 | raise_inspect 'Error token %p in line %d' % | |||
|
111 | [[match, kind], line], tokens | |||
|
112 | end | |||
|
113 | raise_inspect 'Empty token', tokens unless match | |||
|
114 | ||||
|
115 | tokens << [match, kind] | |||
|
116 | ||||
|
117 | end | |||
|
118 | ||||
|
119 | if state == :string | |||
|
120 | tokens << [:close, :string] | |||
|
121 | end | |||
|
122 | ||||
|
123 | tokens | |||
|
124 | end | |||
|
125 | ||||
|
126 | end |
This diff has been collapsed as it changes many lines, (2334 lines changed) Show them Hide them | |||||
@@ -0,0 +1,2334 | |||||
|
1 | !RBIX | |||
|
2 | 0 | |||
|
3 | x | |||
|
4 | M | |||
|
5 | 1 | |||
|
6 | n | |||
|
7 | n | |||
|
8 | x | |||
|
9 | 10 | |||
|
10 | __script__ | |||
|
11 | i | |||
|
12 | 35 | |||
|
13 | 99 | |||
|
14 | 7 | |||
|
15 | 0 | |||
|
16 | 45 | |||
|
17 | 1 | |||
|
18 | 2 | |||
|
19 | 43 | |||
|
20 | 3 | |||
|
21 | 43 | |||
|
22 | 4 | |||
|
23 | 65 | |||
|
24 | 49 | |||
|
25 | 5 | |||
|
26 | 3 | |||
|
27 | 13 | |||
|
28 | 99 | |||
|
29 | 12 | |||
|
30 | 7 | |||
|
31 | 6 | |||
|
32 | 12 | |||
|
33 | 7 | |||
|
34 | 7 | |||
|
35 | 12 | |||
|
36 | 65 | |||
|
37 | 12 | |||
|
38 | 49 | |||
|
39 | 8 | |||
|
40 | 4 | |||
|
41 | 15 | |||
|
42 | 49 | |||
|
43 | 6 | |||
|
44 | 0 | |||
|
45 | 15 | |||
|
46 | 2 | |||
|
47 | 11 | |||
|
48 | I | |||
|
49 | 6 | |||
|
50 | I | |||
|
51 | 0 | |||
|
52 | I | |||
|
53 | 0 | |||
|
54 | I | |||
|
55 | 0 | |||
|
56 | n | |||
|
57 | p | |||
|
58 | 9 | |||
|
59 | x | |||
|
60 | 4 | |||
|
61 | VHDL | |||
|
62 | x | |||
|
63 | 7 | |||
|
64 | CodeRay | |||
|
65 | n | |||
|
66 | x | |||
|
67 | 8 | |||
|
68 | Scanners | |||
|
69 | x | |||
|
70 | 7 | |||
|
71 | Scanner | |||
|
72 | x | |||
|
73 | 10 | |||
|
74 | open_class | |||
|
75 | x | |||
|
76 | 14 | |||
|
77 | __class_init__ | |||
|
78 | M | |||
|
79 | 1 | |||
|
80 | n | |||
|
81 | n | |||
|
82 | x | |||
|
83 | 4 | |||
|
84 | VHDL | |||
|
85 | i | |||
|
86 | 519 | |||
|
87 | 5 | |||
|
88 | 66 | |||
|
89 | 5 | |||
|
90 | 7 | |||
|
91 | 0 | |||
|
92 | 47 | |||
|
93 | 49 | |||
|
94 | 1 | |||
|
95 | 1 | |||
|
96 | 15 | |||
|
97 | 65 | |||
|
98 | 7 | |||
|
99 | 2 | |||
|
100 | 7 | |||
|
101 | 3 | |||
|
102 | 64 | |||
|
103 | 7 | |||
|
104 | 4 | |||
|
105 | 64 | |||
|
106 | 7 | |||
|
107 | 5 | |||
|
108 | 64 | |||
|
109 | 7 | |||
|
110 | 6 | |||
|
111 | 64 | |||
|
112 | 7 | |||
|
113 | 7 | |||
|
114 | 64 | |||
|
115 | 7 | |||
|
116 | 8 | |||
|
117 | 64 | |||
|
118 | 7 | |||
|
119 | 9 | |||
|
120 | 64 | |||
|
121 | 7 | |||
|
122 | 10 | |||
|
123 | 64 | |||
|
124 | 7 | |||
|
125 | 11 | |||
|
126 | 64 | |||
|
127 | 7 | |||
|
128 | 12 | |||
|
129 | 64 | |||
|
130 | 7 | |||
|
131 | 13 | |||
|
132 | 64 | |||
|
133 | 7 | |||
|
134 | 14 | |||
|
135 | 64 | |||
|
136 | 7 | |||
|
137 | 15 | |||
|
138 | 64 | |||
|
139 | 7 | |||
|
140 | 16 | |||
|
141 | 64 | |||
|
142 | 7 | |||
|
143 | 17 | |||
|
144 | 64 | |||
|
145 | 7 | |||
|
146 | 18 | |||
|
147 | 64 | |||
|
148 | 7 | |||
|
149 | 19 | |||
|
150 | 64 | |||
|
151 | 7 | |||
|
152 | 20 | |||
|
153 | 64 | |||
|
154 | 7 | |||
|
155 | 21 | |||
|
156 | 64 | |||
|
157 | 7 | |||
|
158 | 22 | |||
|
159 | 64 | |||
|
160 | 7 | |||
|
161 | 23 | |||
|
162 | 64 | |||
|
163 | 7 | |||
|
164 | 24 | |||
|
165 | 64 | |||
|
166 | 7 | |||
|
167 | 25 | |||
|
168 | 64 | |||
|
169 | 7 | |||
|
170 | 26 | |||
|
171 | 64 | |||
|
172 | 7 | |||
|
173 | 27 | |||
|
174 | 64 | |||
|
175 | 7 | |||
|
176 | 28 | |||
|
177 | 64 | |||
|
178 | 7 | |||
|
179 | 29 | |||
|
180 | 64 | |||
|
181 | 7 | |||
|
182 | 30 | |||
|
183 | 64 | |||
|
184 | 7 | |||
|
185 | 31 | |||
|
186 | 64 | |||
|
187 | 7 | |||
|
188 | 32 | |||
|
189 | 64 | |||
|
190 | 7 | |||
|
191 | 33 | |||
|
192 | 64 | |||
|
193 | 7 | |||
|
194 | 34 | |||
|
195 | 64 | |||
|
196 | 7 | |||
|
197 | 35 | |||
|
198 | 64 | |||
|
199 | 7 | |||
|
200 | 36 | |||
|
201 | 64 | |||
|
202 | 7 | |||
|
203 | 37 | |||
|
204 | 64 | |||
|
205 | 7 | |||
|
206 | 38 | |||
|
207 | 64 | |||
|
208 | 7 | |||
|
209 | 39 | |||
|
210 | 64 | |||
|
211 | 7 | |||
|
212 | 40 | |||
|
213 | 64 | |||
|
214 | 7 | |||
|
215 | 41 | |||
|
216 | 64 | |||
|
217 | 7 | |||
|
218 | 42 | |||
|
219 | 64 | |||
|
220 | 7 | |||
|
221 | 43 | |||
|
222 | 64 | |||
|
223 | 7 | |||
|
224 | 44 | |||
|
225 | 64 | |||
|
226 | 7 | |||
|
227 | 45 | |||
|
228 | 64 | |||
|
229 | 7 | |||
|
230 | 46 | |||
|
231 | 64 | |||
|
232 | 7 | |||
|
233 | 47 | |||
|
234 | 64 | |||
|
235 | 7 | |||
|
236 | 48 | |||
|
237 | 64 | |||
|
238 | 7 | |||
|
239 | 49 | |||
|
240 | 64 | |||
|
241 | 7 | |||
|
242 | 50 | |||
|
243 | 64 | |||
|
244 | 7 | |||
|
245 | 51 | |||
|
246 | 64 | |||
|
247 | 7 | |||
|
248 | 52 | |||
|
249 | 64 | |||
|
250 | 7 | |||
|
251 | 53 | |||
|
252 | 64 | |||
|
253 | 7 | |||
|
254 | 54 | |||
|
255 | 64 | |||
|
256 | 7 | |||
|
257 | 55 | |||
|
258 | 64 | |||
|
259 | 7 | |||
|
260 | 56 | |||
|
261 | 64 | |||
|
262 | 7 | |||
|
263 | 57 | |||
|
264 | 64 | |||
|
265 | 7 | |||
|
266 | 58 | |||
|
267 | 64 | |||
|
268 | 7 | |||
|
269 | 59 | |||
|
270 | 64 | |||
|
271 | 7 | |||
|
272 | 60 | |||
|
273 | 64 | |||
|
274 | 7 | |||
|
275 | 61 | |||
|
276 | 64 | |||
|
277 | 7 | |||
|
278 | 62 | |||
|
279 | 64 | |||
|
280 | 7 | |||
|
281 | 63 | |||
|
282 | 64 | |||
|
283 | 7 | |||
|
284 | 64 | |||
|
285 | 64 | |||
|
286 | 7 | |||
|
287 | 65 | |||
|
288 | 64 | |||
|
289 | 7 | |||
|
290 | 66 | |||
|
291 | 64 | |||
|
292 | 7 | |||
|
293 | 67 | |||
|
294 | 64 | |||
|
295 | 7 | |||
|
296 | 68 | |||
|
297 | 64 | |||
|
298 | 7 | |||
|
299 | 69 | |||
|
300 | 64 | |||
|
301 | 7 | |||
|
302 | 70 | |||
|
303 | 64 | |||
|
304 | 7 | |||
|
305 | 71 | |||
|
306 | 64 | |||
|
307 | 7 | |||
|
308 | 72 | |||
|
309 | 64 | |||
|
310 | 7 | |||
|
311 | 73 | |||
|
312 | 64 | |||
|
313 | 7 | |||
|
314 | 74 | |||
|
315 | 64 | |||
|
316 | 7 | |||
|
317 | 75 | |||
|
318 | 64 | |||
|
319 | 7 | |||
|
320 | 76 | |||
|
321 | 64 | |||
|
322 | 7 | |||
|
323 | 77 | |||
|
324 | 64 | |||
|
325 | 7 | |||
|
326 | 78 | |||
|
327 | 64 | |||
|
328 | 7 | |||
|
329 | 79 | |||
|
330 | 64 | |||
|
331 | 7 | |||
|
332 | 80 | |||
|
333 | 64 | |||
|
334 | 7 | |||
|
335 | 81 | |||
|
336 | 64 | |||
|
337 | 7 | |||
|
338 | 82 | |||
|
339 | 64 | |||
|
340 | 7 | |||
|
341 | 83 | |||
|
342 | 64 | |||
|
343 | 7 | |||
|
344 | 84 | |||
|
345 | 64 | |||
|
346 | 7 | |||
|
347 | 85 | |||
|
348 | 64 | |||
|
349 | 7 | |||
|
350 | 86 | |||
|
351 | 64 | |||
|
352 | 7 | |||
|
353 | 87 | |||
|
354 | 64 | |||
|
355 | 7 | |||
|
356 | 88 | |||
|
357 | 64 | |||
|
358 | 7 | |||
|
359 | 89 | |||
|
360 | 64 | |||
|
361 | 7 | |||
|
362 | 90 | |||
|
363 | 64 | |||
|
364 | 7 | |||
|
365 | 91 | |||
|
366 | 64 | |||
|
367 | 35 | |||
|
368 | 89 | |||
|
369 | 49 | |||
|
370 | 92 | |||
|
371 | 2 | |||
|
372 | 15 | |||
|
373 | 65 | |||
|
374 | 7 | |||
|
375 | 93 | |||
|
376 | 7 | |||
|
377 | 94 | |||
|
378 | 64 | |||
|
379 | 7 | |||
|
380 | 95 | |||
|
381 | 64 | |||
|
382 | 7 | |||
|
383 | 96 | |||
|
384 | 64 | |||
|
385 | 7 | |||
|
386 | 97 | |||
|
387 | 64 | |||
|
388 | 7 | |||
|
389 | 98 | |||
|
390 | 64 | |||
|
391 | 7 | |||
|
392 | 99 | |||
|
393 | 64 | |||
|
394 | 7 | |||
|
395 | 100 | |||
|
396 | 64 | |||
|
397 | 7 | |||
|
398 | 101 | |||
|
399 | 64 | |||
|
400 | 7 | |||
|
401 | 102 | |||
|
402 | 64 | |||
|
403 | 7 | |||
|
404 | 103 | |||
|
405 | 64 | |||
|
406 | 7 | |||
|
407 | 104 | |||
|
408 | 64 | |||
|
409 | 7 | |||
|
410 | 105 | |||
|
411 | 64 | |||
|
412 | 7 | |||
|
413 | 106 | |||
|
414 | 64 | |||
|
415 | 7 | |||
|
416 | 107 | |||
|
417 | 64 | |||
|
418 | 7 | |||
|
419 | 108 | |||
|
420 | 64 | |||
|
421 | 7 | |||
|
422 | 109 | |||
|
423 | 64 | |||
|
424 | 7 | |||
|
425 | 110 | |||
|
426 | 64 | |||
|
427 | 7 | |||
|
428 | 111 | |||
|
429 | 64 | |||
|
430 | 7 | |||
|
431 | 112 | |||
|
432 | 64 | |||
|
433 | 7 | |||
|
434 | 113 | |||
|
435 | 64 | |||
|
436 | 7 | |||
|
437 | 114 | |||
|
438 | 64 | |||
|
439 | 7 | |||
|
440 | 115 | |||
|
441 | 64 | |||
|
442 | 7 | |||
|
443 | 116 | |||
|
444 | 64 | |||
|
445 | 7 | |||
|
446 | 117 | |||
|
447 | 64 | |||
|
448 | 7 | |||
|
449 | 118 | |||
|
450 | 64 | |||
|
451 | 7 | |||
|
452 | 119 | |||
|
453 | 64 | |||
|
454 | 7 | |||
|
455 | 120 | |||
|
456 | 64 | |||
|
457 | 7 | |||
|
458 | 121 | |||
|
459 | 64 | |||
|
460 | 7 | |||
|
461 | 122 | |||
|
462 | 64 | |||
|
463 | 7 | |||
|
464 | 123 | |||
|
465 | 64 | |||
|
466 | 35 | |||
|
467 | 30 | |||
|
468 | 49 | |||
|
469 | 92 | |||
|
470 | 2 | |||
|
471 | 15 | |||
|
472 | 65 | |||
|
473 | 7 | |||
|
474 | 124 | |||
|
475 | 35 | |||
|
476 | 0 | |||
|
477 | 49 | |||
|
478 | 92 | |||
|
479 | 2 | |||
|
480 | 15 | |||
|
481 | 65 | |||
|
482 | 7 | |||
|
483 | 125 | |||
|
484 | 45 | |||
|
485 | 126 | |||
|
486 | 127 | |||
|
487 | 43 | |||
|
488 | 128 | |||
|
489 | 13 | |||
|
490 | 71 | |||
|
491 | 129 | |||
|
492 | 47 | |||
|
493 | 9 | |||
|
494 | 422 | |||
|
495 | 47 | |||
|
496 | 49 | |||
|
497 | 130 | |||
|
498 | 0 | |||
|
499 | 13 | |||
|
500 | 7 | |||
|
501 | 131 | |||
|
502 | 47 | |||
|
503 | 49 | |||
|
504 | 132 | |||
|
505 | 1 | |||
|
506 | 15 | |||
|
507 | 8 | |||
|
508 | 427 | |||
|
509 | 7 | |||
|
510 | 131 | |||
|
511 | 49 | |||
|
512 | 129 | |||
|
513 | 1 | |||
|
514 | 45 | |||
|
515 | 2 | |||
|
516 | 133 | |||
|
517 | 7 | |||
|
518 | 134 | |||
|
519 | 49 | |||
|
520 | 135 | |||
|
521 | 2 | |||
|
522 | 45 | |||
|
523 | 93 | |||
|
524 | 136 | |||
|
525 | 7 | |||
|
526 | 137 | |||
|
527 | 49 | |||
|
528 | 135 | |||
|
529 | 2 | |||
|
530 | 45 | |||
|
531 | 124 | |||
|
532 | 138 | |||
|
533 | 7 | |||
|
534 | 139 | |||
|
535 | 49 | |||
|
536 | 135 | |||
|
537 | 2 | |||
|
538 | 49 | |||
|
539 | 92 | |||
|
540 | 2 | |||
|
541 | 15 | |||
|
542 | 65 | |||
|
543 | 7 | |||
|
544 | 140 | |||
|
545 | 7 | |||
|
546 | 141 | |||
|
547 | 13 | |||
|
548 | 70 | |||
|
549 | 9 | |||
|
550 | 476 | |||
|
551 | 15 | |||
|
552 | 44 | |||
|
553 | 43 | |||
|
554 | 142 | |||
|
555 | 7 | |||
|
556 | 143 | |||
|
557 | 80 | |||
|
558 | 49 | |||
|
559 | 129 | |||
|
560 | 2 | |||
|
561 | 6 | |||
|
562 | 141 | |||
|
563 | 49 | |||
|
564 | 92 | |||
|
565 | 2 | |||
|
566 | 15 | |||
|
567 | 65 | |||
|
568 | 7 | |||
|
569 | 144 | |||
|
570 | 7 | |||
|
571 | 145 | |||
|
572 | 13 | |||
|
573 | 70 | |||
|
574 | 9 | |||
|
575 | 501 | |||
|
576 | 15 | |||
|
577 | 44 | |||
|
578 | 43 | |||
|
579 | 142 | |||
|
580 | 7 | |||
|
581 | 146 | |||
|
582 | 80 | |||
|
583 | 49 | |||
|
584 | 129 | |||
|
585 | 2 | |||
|
586 | 6 | |||
|
587 | 145 | |||
|
588 | 49 | |||
|
589 | 92 | |||
|
590 | 2 | |||
|
591 | 15 | |||
|
592 | 99 | |||
|
593 | 7 | |||
|
594 | 147 | |||
|
595 | 7 | |||
|
596 | 148 | |||
|
597 | 65 | |||
|
598 | 67 | |||
|
599 | 49 | |||
|
600 | 149 | |||
|
601 | 0 | |||
|
602 | 49 | |||
|
603 | 150 | |||
|
604 | 4 | |||
|
605 | 11 | |||
|
606 | I | |||
|
607 | 5b | |||
|
608 | I | |||
|
609 | 0 | |||
|
610 | I | |||
|
611 | 0 | |||
|
612 | I | |||
|
613 | 0 | |||
|
614 | n | |||
|
615 | p | |||
|
616 | 151 | |||
|
617 | x | |||
|
618 | 4 | |||
|
619 | vhdl | |||
|
620 | x | |||
|
621 | 12 | |||
|
622 | register_for | |||
|
623 | x | |||
|
624 | 14 | |||
|
625 | RESERVED_WORDS | |||
|
626 | s | |||
|
627 | 6 | |||
|
628 | access | |||
|
629 | s | |||
|
630 | 5 | |||
|
631 | after | |||
|
632 | s | |||
|
633 | 5 | |||
|
634 | alias | |||
|
635 | s | |||
|
636 | 3 | |||
|
637 | all | |||
|
638 | s | |||
|
639 | 6 | |||
|
640 | assert | |||
|
641 | s | |||
|
642 | 12 | |||
|
643 | architecture | |||
|
644 | s | |||
|
645 | 5 | |||
|
646 | begin | |||
|
647 | s | |||
|
648 | 5 | |||
|
649 | block | |||
|
650 | s | |||
|
651 | 4 | |||
|
652 | body | |||
|
653 | s | |||
|
654 | 6 | |||
|
655 | buffer | |||
|
656 | s | |||
|
657 | 3 | |||
|
658 | bus | |||
|
659 | s | |||
|
660 | 4 | |||
|
661 | case | |||
|
662 | s | |||
|
663 | 9 | |||
|
664 | component | |||
|
665 | s | |||
|
666 | 13 | |||
|
667 | configuration | |||
|
668 | s | |||
|
669 | 8 | |||
|
670 | constant | |||
|
671 | s | |||
|
672 | 10 | |||
|
673 | disconnect | |||
|
674 | s | |||
|
675 | 6 | |||
|
676 | downto | |||
|
677 | s | |||
|
678 | 4 | |||
|
679 | else | |||
|
680 | s | |||
|
681 | 5 | |||
|
682 | elsif | |||
|
683 | s | |||
|
684 | 3 | |||
|
685 | end | |||
|
686 | s | |||
|
687 | 6 | |||
|
688 | entity | |||
|
689 | s | |||
|
690 | 4 | |||
|
691 | exit | |||
|
692 | s | |||
|
693 | 4 | |||
|
694 | file | |||
|
695 | s | |||
|
696 | 3 | |||
|
697 | for | |||
|
698 | s | |||
|
699 | 8 | |||
|
700 | function | |||
|
701 | s | |||
|
702 | 8 | |||
|
703 | generate | |||
|
704 | s | |||
|
705 | 7 | |||
|
706 | generic | |||
|
707 | s | |||
|
708 | 5 | |||
|
709 | group | |||
|
710 | s | |||
|
711 | 7 | |||
|
712 | guarded | |||
|
713 | s | |||
|
714 | 2 | |||
|
715 | if | |||
|
716 | s | |||
|
717 | 6 | |||
|
718 | impure | |||
|
719 | s | |||
|
720 | 2 | |||
|
721 | in | |||
|
722 | s | |||
|
723 | 8 | |||
|
724 | inertial | |||
|
725 | s | |||
|
726 | 5 | |||
|
727 | inout | |||
|
728 | s | |||
|
729 | 2 | |||
|
730 | is | |||
|
731 | s | |||
|
732 | 5 | |||
|
733 | label | |||
|
734 | s | |||
|
735 | 7 | |||
|
736 | library | |||
|
737 | s | |||
|
738 | 7 | |||
|
739 | linkage | |||
|
740 | s | |||
|
741 | 7 | |||
|
742 | literal | |||
|
743 | s | |||
|
744 | 4 | |||
|
745 | loop | |||
|
746 | s | |||
|
747 | 3 | |||
|
748 | map | |||
|
749 | s | |||
|
750 | 3 | |||
|
751 | new | |||
|
752 | s | |||
|
753 | 4 | |||
|
754 | next | |||
|
755 | s | |||
|
756 | 4 | |||
|
757 | null | |||
|
758 | s | |||
|
759 | 2 | |||
|
760 | of | |||
|
761 | s | |||
|
762 | 2 | |||
|
763 | on | |||
|
764 | s | |||
|
765 | 4 | |||
|
766 | open | |||
|
767 | s | |||
|
768 | 6 | |||
|
769 | others | |||
|
770 | s | |||
|
771 | 3 | |||
|
772 | out | |||
|
773 | s | |||
|
774 | 7 | |||
|
775 | package | |||
|
776 | s | |||
|
777 | 4 | |||
|
778 | port | |||
|
779 | s | |||
|
780 | 9 | |||
|
781 | postponed | |||
|
782 | s | |||
|
783 | 9 | |||
|
784 | procedure | |||
|
785 | s | |||
|
786 | 7 | |||
|
787 | process | |||
|
788 | s | |||
|
789 | 4 | |||
|
790 | pure | |||
|
791 | s | |||
|
792 | 5 | |||
|
793 | range | |||
|
794 | s | |||
|
795 | 6 | |||
|
796 | record | |||
|
797 | s | |||
|
798 | 8 | |||
|
799 | register | |||
|
800 | s | |||
|
801 | 6 | |||
|
802 | reject | |||
|
803 | s | |||
|
804 | 6 | |||
|
805 | report | |||
|
806 | s | |||
|
807 | 6 | |||
|
808 | return | |||
|
809 | s | |||
|
810 | 6 | |||
|
811 | select | |||
|
812 | s | |||
|
813 | 8 | |||
|
814 | severity | |||
|
815 | s | |||
|
816 | 6 | |||
|
817 | signal | |||
|
818 | s | |||
|
819 | 6 | |||
|
820 | shared | |||
|
821 | s | |||
|
822 | 7 | |||
|
823 | subtype | |||
|
824 | s | |||
|
825 | 4 | |||
|
826 | then | |||
|
827 | s | |||
|
828 | 2 | |||
|
829 | to | |||
|
830 | s | |||
|
831 | 9 | |||
|
832 | transport | |||
|
833 | s | |||
|
834 | 4 | |||
|
835 | type | |||
|
836 | s | |||
|
837 | 10 | |||
|
838 | unaffected | |||
|
839 | s | |||
|
840 | 5 | |||
|
841 | units | |||
|
842 | s | |||
|
843 | 5 | |||
|
844 | until | |||
|
845 | s | |||
|
846 | 3 | |||
|
847 | use | |||
|
848 | s | |||
|
849 | 8 | |||
|
850 | variable | |||
|
851 | s | |||
|
852 | 4 | |||
|
853 | wait | |||
|
854 | s | |||
|
855 | 4 | |||
|
856 | when | |||
|
857 | s | |||
|
858 | 5 | |||
|
859 | while | |||
|
860 | s | |||
|
861 | 4 | |||
|
862 | with | |||
|
863 | s | |||
|
864 | 4 | |||
|
865 | note | |||
|
866 | s | |||
|
867 | 7 | |||
|
868 | warning | |||
|
869 | s | |||
|
870 | 5 | |||
|
871 | error | |||
|
872 | s | |||
|
873 | 7 | |||
|
874 | failure | |||
|
875 | s | |||
|
876 | 3 | |||
|
877 | and | |||
|
878 | s | |||
|
879 | 2 | |||
|
880 | or | |||
|
881 | s | |||
|
882 | 3 | |||
|
883 | xor | |||
|
884 | s | |||
|
885 | 3 | |||
|
886 | not | |||
|
887 | s | |||
|
888 | 3 | |||
|
889 | nor | |||
|
890 | s | |||
|
891 | 5 | |||
|
892 | array | |||
|
893 | x | |||
|
894 | 9 | |||
|
895 | const_set | |||
|
896 | x | |||
|
897 | 16 | |||
|
898 | PREDEFINED_TYPES | |||
|
899 | s | |||
|
900 | 3 | |||
|
901 | bit | |||
|
902 | s | |||
|
903 | 10 | |||
|
904 | bit_vector | |||
|
905 | s | |||
|
906 | 9 | |||
|
907 | character | |||
|
908 | s | |||
|
909 | 7 | |||
|
910 | boolean | |||
|
911 | s | |||
|
912 | 7 | |||
|
913 | integer | |||
|
914 | s | |||
|
915 | 4 | |||
|
916 | real | |||
|
917 | s | |||
|
918 | 4 | |||
|
919 | time | |||
|
920 | s | |||
|
921 | 6 | |||
|
922 | string | |||
|
923 | s | |||
|
924 | 14 | |||
|
925 | severity_level | |||
|
926 | s | |||
|
927 | 8 | |||
|
928 | positive | |||
|
929 | s | |||
|
930 | 7 | |||
|
931 | natural | |||
|
932 | s | |||
|
933 | 6 | |||
|
934 | signed | |||
|
935 | s | |||
|
936 | 8 | |||
|
937 | unsigned | |||
|
938 | s | |||
|
939 | 4 | |||
|
940 | line | |||
|
941 | s | |||
|
942 | 4 | |||
|
943 | text | |||
|
944 | s | |||
|
945 | 9 | |||
|
946 | std_logic | |||
|
947 | s | |||
|
948 | 16 | |||
|
949 | std_logic_vector | |||
|
950 | s | |||
|
951 | 10 | |||
|
952 | std_ulogic | |||
|
953 | s | |||
|
954 | 17 | |||
|
955 | std_ulogic_vector | |||
|
956 | s | |||
|
957 | 10 | |||
|
958 | qsim_state | |||
|
959 | s | |||
|
960 | 17 | |||
|
961 | qsim_state_vector | |||
|
962 | s | |||
|
963 | 12 | |||
|
964 | qsim_12state | |||
|
965 | s | |||
|
966 | 19 | |||
|
967 | qsim_12state_vector | |||
|
968 | s | |||
|
969 | 13 | |||
|
970 | qsim_strength | |||
|
971 | s | |||
|
972 | 7 | |||
|
973 | mux_bit | |||
|
974 | s | |||
|
975 | 10 | |||
|
976 | mux_vector | |||
|
977 | s | |||
|
978 | 7 | |||
|
979 | reg_bit | |||
|
980 | s | |||
|
981 | 10 | |||
|
982 | reg_vector | |||
|
983 | s | |||
|
984 | 7 | |||
|
985 | wor_bit | |||
|
986 | s | |||
|
987 | 10 | |||
|
988 | wor_vector | |||
|
989 | x | |||
|
990 | 20 | |||
|
991 | PREDEFINED_CONSTANTS | |||
|
992 | x | |||
|
993 | 10 | |||
|
994 | IDENT_KIND | |||
|
995 | x | |||
|
996 | 7 | |||
|
997 | CodeRay | |||
|
998 | n | |||
|
999 | x | |||
|
1000 | 20 | |||
|
1001 | CaseIgnoringWordList | |||
|
1002 | x | |||
|
1003 | 3 | |||
|
1004 | new | |||
|
1005 | x | |||
|
1006 | 8 | |||
|
1007 | allocate | |||
|
1008 | x | |||
|
1009 | 5 | |||
|
1010 | ident | |||
|
1011 | x | |||
|
1012 | 10 | |||
|
1013 | initialize | |||
|
1014 | n | |||
|
1015 | x | |||
|
1016 | 8 | |||
|
1017 | reserved | |||
|
1018 | x | |||
|
1019 | 3 | |||
|
1020 | add | |||
|
1021 | n | |||
|
1022 | x | |||
|
1023 | 8 | |||
|
1024 | pre_type | |||
|
1025 | n | |||
|
1026 | x | |||
|
1027 | 12 | |||
|
1028 | pre_constant | |||
|
1029 | x | |||
|
1030 | 6 | |||
|
1031 | ESCAPE | |||
|
1032 | n | |||
|
1033 | x | |||
|
1034 | 6 | |||
|
1035 | Regexp | |||
|
1036 | s | |||
|
1037 | 49 | |||
|
1038 | [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} | |||
|
1039 | x | |||
|
1040 | 14 | |||
|
1041 | UNICODE_ESCAPE | |||
|
1042 | n | |||
|
1043 | s | |||
|
1044 | 35 | |||
|
1045 | u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} | |||
|
1046 | x | |||
|
1047 | 11 | |||
|
1048 | scan_tokens | |||
|
1049 | M | |||
|
1050 | 1 | |||
|
1051 | n | |||
|
1052 | n | |||
|
1053 | x | |||
|
1054 | 11 | |||
|
1055 | scan_tokens | |||
|
1056 | i | |||
|
1057 | 688 | |||
|
1058 | 7 | |||
|
1059 | 0 | |||
|
1060 | 19 | |||
|
1061 | 2 | |||
|
1062 | 15 | |||
|
1063 | 5 | |||
|
1064 | 47 | |||
|
1065 | 49 | |||
|
1066 | 1 | |||
|
1067 | 0 | |||
|
1068 | 10 | |||
|
1069 | 660 | |||
|
1070 | 1 | |||
|
1071 | 19 | |||
|
1072 | 3 | |||
|
1073 | 15 | |||
|
1074 | 1 | |||
|
1075 | 19 | |||
|
1076 | 4 | |||
|
1077 | 15 | |||
|
1078 | 20 | |||
|
1079 | 2 | |||
|
1080 | 13 | |||
|
1081 | 7 | |||
|
1082 | 0 | |||
|
1083 | 12 | |||
|
1084 | 49 | |||
|
1085 | 2 | |||
|
1086 | 1 | |||
|
1087 | 9 | |||
|
1088 | 331 | |||
|
1089 | 15 | |||
|
1090 | 5 | |||
|
1091 | 7 | |||
|
1092 | 3 | |||
|
1093 | 13 | |||
|
1094 | 70 | |||
|
1095 | 9 | |||
|
1096 | 51 | |||
|
1097 | 15 | |||
|
1098 | 44 | |||
|
1099 | 43 | |||
|
1100 | 4 | |||
|
1101 | 7 | |||
|
1102 | 5 | |||
|
1103 | 80 | |||
|
1104 | 49 | |||
|
1105 | 6 | |||
|
1106 | 2 | |||
|
1107 | 6 | |||
|
1108 | 3 | |||
|
1109 | 47 | |||
|
1110 | 49 | |||
|
1111 | 7 | |||
|
1112 | 1 | |||
|
1113 | 9 | |||
|
1114 | 63 | |||
|
1115 | 7 | |||
|
1116 | 8 | |||
|
1117 | 19 | |||
|
1118 | 3 | |||
|
1119 | 8 | |||
|
1120 | 329 | |||
|
1121 | 5 | |||
|
1122 | 7 | |||
|
1123 | 9 | |||
|
1124 | 13 | |||
|
1125 | 70 | |||
|
1126 | 9 | |||
|
1127 | 82 | |||
|
1128 | 15 | |||
|
1129 | 44 | |||
|
1130 | 43 | |||
|
1131 | 4 | |||
|
1132 | 7 | |||
|
1133 | 10 | |||
|
1134 | 80 | |||
|
1135 | 49 | |||
|
1136 | 6 | |||
|
1137 | 2 | |||
|
1138 | 6 | |||
|
1139 | 9 | |||
|
1140 | 47 | |||
|
1141 | 49 | |||
|
1142 | 7 | |||
|
1143 | 1 | |||
|
1144 | 9 | |||
|
1145 | 94 | |||
|
1146 | 7 | |||
|
1147 | 11 | |||
|
1148 | 19 | |||
|
1149 | 3 | |||
|
1150 | 8 | |||
|
1151 | 329 | |||
|
1152 | 5 | |||
|
1153 | 7 | |||
|
1154 | 12 | |||
|
1155 | 13 | |||
|
1156 | 70 | |||
|
1157 | 9 | |||
|
1158 | 113 | |||
|
1159 | 15 | |||
|
1160 | 44 | |||
|
1161 | 43 | |||
|
1162 | 4 | |||
|
1163 | 7 | |||
|
1164 | 13 | |||
|
1165 | 80 | |||
|
1166 | 49 | |||
|
1167 | 6 | |||
|
1168 | 2 | |||
|
1169 | 6 | |||
|
1170 | 12 | |||
|
1171 | 47 | |||
|
1172 | 49 | |||
|
1173 | 7 | |||
|
1174 | 1 | |||
|
1175 | 9 | |||
|
1176 | 125 | |||
|
1177 | 7 | |||
|
1178 | 14 | |||
|
1179 | 19 | |||
|
1180 | 3 | |||
|
1181 | 8 | |||
|
1182 | 329 | |||
|
1183 | 5 | |||
|
1184 | 7 | |||
|
1185 | 15 | |||
|
1186 | 13 | |||
|
1187 | 70 | |||
|
1188 | 9 | |||
|
1189 | 144 | |||
|
1190 | 15 | |||
|
1191 | 44 | |||
|
1192 | 43 | |||
|
1193 | 4 | |||
|
1194 | 7 | |||
|
1195 | 16 | |||
|
1196 | 80 | |||
|
1197 | 49 | |||
|
1198 | 6 | |||
|
1199 | 2 | |||
|
1200 | 6 | |||
|
1201 | 15 | |||
|
1202 | 47 | |||
|
1203 | 49 | |||
|
1204 | 7 | |||
|
1205 | 1 | |||
|
1206 | 19 | |||
|
1207 | 4 | |||
|
1208 | 9 | |||
|
1209 | 167 | |||
|
1210 | 45 | |||
|
1211 | 17 | |||
|
1212 | 18 | |||
|
1213 | 20 | |||
|
1214 | 4 | |||
|
1215 | 49 | |||
|
1216 | 19 | |||
|
1217 | 0 | |||
|
1218 | 49 | |||
|
1219 | 20 | |||
|
1220 | 1 | |||
|
1221 | 19 | |||
|
1222 | 3 | |||
|
1223 | 8 | |||
|
1224 | 329 | |||
|
1225 | 5 | |||
|
1226 | 7 | |||
|
1227 | 21 | |||
|
1228 | 13 | |||
|
1229 | 70 | |||
|
1230 | 9 | |||
|
1231 | 186 | |||
|
1232 | 15 | |||
|
1233 | 44 | |||
|
1234 | 43 | |||
|
1235 | 4 | |||
|
1236 | 7 | |||
|
1237 | 22 | |||
|
1238 | 79 | |||
|
1239 | 49 | |||
|
1240 | 6 | |||
|
1241 | 2 | |||
|
1242 | 6 | |||
|
1243 | 21 | |||
|
1244 | 47 | |||
|
1245 | 49 | |||
|
1246 | 7 | |||
|
1247 | 1 | |||
|
1248 | 19 | |||
|
1249 | 4 | |||
|
1250 | 9 | |||
|
1251 | 217 | |||
|
1252 | 20 | |||
|
1253 | 0 | |||
|
1254 | 7 | |||
|
1255 | 23 | |||
|
1256 | 7 | |||
|
1257 | 24 | |||
|
1258 | 35 | |||
|
1259 | 2 | |||
|
1260 | 49 | |||
|
1261 | 25 | |||
|
1262 | 1 | |||
|
1263 | 15 | |||
|
1264 | 7 | |||
|
1265 | 24 | |||
|
1266 | 19 | |||
|
1267 | 2 | |||
|
1268 | 15 | |||
|
1269 | 7 | |||
|
1270 | 26 | |||
|
1271 | 19 | |||
|
1272 | 3 | |||
|
1273 | 8 | |||
|
1274 | 329 | |||
|
1275 | 5 | |||
|
1276 | 7 | |||
|
1277 | 27 | |||
|
1278 | 13 | |||
|
1279 | 70 | |||
|
1280 | 9 | |||
|
1281 | 247 | |||
|
1282 | 15 | |||
|
1283 | 44 | |||
|
1284 | 43 | |||
|
1285 | 4 | |||
|
1286 | 7 | |||
|
1287 | 28 | |||
|
1288 | 45 | |||
|
1289 | 29 | |||
|
1290 | 30 | |||
|
1291 | 47 | |||
|
1292 | 49 | |||
|
1293 | 31 | |||
|
1294 | 0 | |||
|
1295 | 7 | |||
|
1296 | 32 | |||
|
1297 | 63 | |||
|
1298 | 3 | |||
|
1299 | 80 | |||
|
1300 | 49 | |||
|
1301 | 6 | |||
|
1302 | 2 | |||
|
1303 | 6 | |||
|
1304 | 27 | |||
|
1305 | 47 | |||
|
1306 | 49 | |||
|
1307 | 7 | |||
|
1308 | 1 | |||
|
1309 | 9 | |||
|
1310 | 259 | |||
|
1311 | 7 | |||
|
1312 | 33 | |||
|
1313 | 19 | |||
|
1314 | 3 | |||
|
1315 | 8 | |||
|
1316 | 329 | |||
|
1317 | 5 | |||
|
1318 | 7 | |||
|
1319 | 34 | |||
|
1320 | 13 | |||
|
1321 | 70 | |||
|
1322 | 9 | |||
|
1323 | 278 | |||
|
1324 | 15 | |||
|
1325 | 44 | |||
|
1326 | 43 | |||
|
1327 | 4 | |||
|
1328 | 7 | |||
|
1329 | 35 | |||
|
1330 | 78 | |||
|
1331 | 49 | |||
|
1332 | 6 | |||
|
1333 | 2 | |||
|
1334 | 6 | |||
|
1335 | 34 | |||
|
1336 | 47 | |||
|
1337 | 49 | |||
|
1338 | 7 | |||
|
1339 | 1 | |||
|
1340 | 9 | |||
|
1341 | 290 | |||
|
1342 | 7 | |||
|
1343 | 36 | |||
|
1344 | 19 | |||
|
1345 | 3 | |||
|
1346 | 8 | |||
|
1347 | 329 | |||
|
1348 | 5 | |||
|
1349 | 7 | |||
|
1350 | 37 | |||
|
1351 | 13 | |||
|
1352 | 70 | |||
|
1353 | 9 | |||
|
1354 | 309 | |||
|
1355 | 15 | |||
|
1356 | 44 | |||
|
1357 | 43 | |||
|
1358 | 4 | |||
|
1359 | 7 | |||
|
1360 | 38 | |||
|
1361 | 78 | |||
|
1362 | 49 | |||
|
1363 | 6 | |||
|
1364 | 2 | |||
|
1365 | 6 | |||
|
1366 | 37 | |||
|
1367 | 47 | |||
|
1368 | 49 | |||
|
1369 | 7 | |||
|
1370 | 1 | |||
|
1371 | 9 | |||
|
1372 | 321 | |||
|
1373 | 7 | |||
|
1374 | 39 | |||
|
1375 | 19 | |||
|
1376 | 3 | |||
|
1377 | 8 | |||
|
1378 | 329 | |||
|
1379 | 5 | |||
|
1380 | 48 | |||
|
1381 | 40 | |||
|
1382 | 15 | |||
|
1383 | 7 | |||
|
1384 | 41 | |||
|
1385 | 19 | |||
|
1386 | 3 | |||
|
1387 | 8 | |||
|
1388 | 564 | |||
|
1389 | 13 | |||
|
1390 | 7 | |||
|
1391 | 24 | |||
|
1392 | 12 | |||
|
1393 | 49 | |||
|
1394 | 2 | |||
|
1395 | 1 | |||
|
1396 | 9 | |||
|
1397 | 553 | |||
|
1398 | 15 | |||
|
1399 | 5 | |||
|
1400 | 7 | |||
|
1401 | 42 | |||
|
1402 | 13 | |||
|
1403 | 70 | |||
|
1404 | 9 | |||
|
1405 | 360 | |||
|
1406 | 15 | |||
|
1407 | 44 | |||
|
1408 | 43 | |||
|
1409 | 4 | |||
|
1410 | 7 | |||
|
1411 | 43 | |||
|
1412 | 78 | |||
|
1413 | 49 | |||
|
1414 | 6 | |||
|
1415 | 2 | |||
|
1416 | 6 | |||
|
1417 | 42 | |||
|
1418 | 47 | |||
|
1419 | 49 | |||
|
1420 | 7 | |||
|
1421 | 1 | |||
|
1422 | 9 | |||
|
1423 | 372 | |||
|
1424 | 7 | |||
|
1425 | 44 | |||
|
1426 | 19 | |||
|
1427 | 3 | |||
|
1428 | 8 | |||
|
1429 | 551 | |||
|
1430 | 5 | |||
|
1431 | 7 | |||
|
1432 | 45 | |||
|
1433 | 13 | |||
|
1434 | 70 | |||
|
1435 | 9 | |||
|
1436 | 391 | |||
|
1437 | 15 | |||
|
1438 | 44 | |||
|
1439 | 43 | |||
|
1440 | 4 | |||
|
1441 | 7 | |||
|
1442 | 46 | |||
|
1443 | 78 | |||
|
1444 | 49 | |||
|
1445 | 6 | |||
|
1446 | 2 | |||
|
1447 | 6 | |||
|
1448 | 45 | |||
|
1449 | 47 | |||
|
1450 | 49 | |||
|
1451 | 7 | |||
|
1452 | 1 | |||
|
1453 | 9 | |||
|
1454 | 432 | |||
|
1455 | 20 | |||
|
1456 | 0 | |||
|
1457 | 7 | |||
|
1458 | 46 | |||
|
1459 | 64 | |||
|
1460 | 7 | |||
|
1461 | 26 | |||
|
1462 | 35 | |||
|
1463 | 2 | |||
|
1464 | 49 | |||
|
1465 | 25 | |||
|
1466 | 1 | |||
|
1467 | 15 | |||
|
1468 | 20 | |||
|
1469 | 0 | |||
|
1470 | 7 | |||
|
1471 | 47 | |||
|
1472 | 7 | |||
|
1473 | 24 | |||
|
1474 | 35 | |||
|
1475 | 2 | |||
|
1476 | 49 | |||
|
1477 | 25 | |||
|
1478 | 1 | |||
|
1479 | 15 | |||
|
1480 | 7 | |||
|
1481 | 0 | |||
|
1482 | 19 | |||
|
1483 | 2 | |||
|
1484 | 15 | |||
|
1485 | 1 | |||
|
1486 | 8 | |||
|
1487 | 656 | |||
|
1488 | 8 | |||
|
1489 | 551 | |||
|
1490 | 5 | |||
|
1491 | 7 | |||
|
1492 | 48 | |||
|
1493 | 13 | |||
|
1494 | 70 | |||
|
1495 | 9 | |||
|
1496 | 472 | |||
|
1497 | 15 | |||
|
1498 | 44 | |||
|
1499 | 43 | |||
|
1500 | 4 | |||
|
1501 | 7 | |||
|
1502 | 49 | |||
|
1503 | 45 | |||
|
1504 | 29 | |||
|
1505 | 50 | |||
|
1506 | 47 | |||
|
1507 | 49 | |||
|
1508 | 31 | |||
|
1509 | 0 | |||
|
1510 | 7 | |||
|
1511 | 51 | |||
|
1512 | 45 | |||
|
1513 | 52 | |||
|
1514 | 53 | |||
|
1515 | 47 | |||
|
1516 | 49 | |||
|
1517 | 31 | |||
|
1518 | 0 | |||
|
1519 | 7 | |||
|
1520 | 54 | |||
|
1521 | 63 | |||
|
1522 | 5 | |||
|
1523 | 4 | |||
|
1524 | 6 | |||
|
1525 | 49 | |||
|
1526 | 6 | |||
|
1527 | 2 | |||
|
1528 | 6 | |||
|
1529 | 48 | |||
|
1530 | 47 | |||
|
1531 | 49 | |||
|
1532 | 7 | |||
|
1533 | 1 | |||
|
1534 | 9 | |||
|
1535 | 484 | |||
|
1536 | 7 | |||
|
1537 | 33 | |||
|
1538 | 19 | |||
|
1539 | 3 | |||
|
1540 | 8 | |||
|
1541 | 551 | |||
|
1542 | 5 | |||
|
1543 | 7 | |||
|
1544 | 55 | |||
|
1545 | 13 | |||
|
1546 | 70 | |||
|
1547 | 9 | |||
|
1548 | 503 | |||
|
1549 | 15 | |||
|
1550 | 44 | |||
|
1551 | 43 | |||
|
1552 | 4 | |||
|
1553 | 7 | |||
|
1554 | 56 | |||
|
1555 | 80 | |||
|
1556 | 49 | |||
|
1557 | 6 | |||
|
1558 | 2 | |||
|
1559 | 6 | |||
|
1560 | 55 | |||
|
1561 | 47 | |||
|
1562 | 49 | |||
|
1563 | 7 | |||
|
1564 | 1 | |||
|
1565 | 9 | |||
|
1566 | 532 | |||
|
1567 | 20 | |||
|
1568 | 0 | |||
|
1569 | 7 | |||
|
1570 | 47 | |||
|
1571 | 7 | |||
|
1572 | 24 | |||
|
1573 | 35 | |||
|
1574 | 2 | |||
|
1575 | 49 | |||
|
1576 | 25 | |||
|
1577 | 1 | |||
|
1578 | 15 | |||
|
1579 | 7 | |||
|
1580 | 41 | |||
|
1581 | 19 | |||
|
1582 | 3 | |||
|
1583 | 15 | |||
|
1584 | 7 | |||
|
1585 | 0 | |||
|
1586 | 19 | |||
|
1587 | 2 | |||
|
1588 | 8 | |||
|
1589 | 551 | |||
|
1590 | 5 | |||
|
1591 | 7 | |||
|
1592 | 57 | |||
|
1593 | 64 | |||
|
1594 | 5 | |||
|
1595 | 79 | |||
|
1596 | 47 | |||
|
1597 | 49 | |||
|
1598 | 58 | |||
|
1599 | 1 | |||
|
1600 | 49 | |||
|
1601 | 59 | |||
|
1602 | 1 | |||
|
1603 | 20 | |||
|
1604 | 0 | |||
|
1605 | 47 | |||
|
1606 | 49 | |||
|
1607 | 60 | |||
|
1608 | 2 | |||
|
1609 | 8 | |||
|
1610 | 564 | |||
|
1611 | 15 | |||
|
1612 | 5 | |||
|
1613 | 7 | |||
|
1614 | 61 | |||
|
1615 | 64 | |||
|
1616 | 20 | |||
|
1617 | 0 | |||
|
1618 | 47 | |||
|
1619 | 49 | |||
|
1620 | 60 | |||
|
1621 | 2 | |||
|
1622 | 15 | |||
|
1623 | 20 | |||
|
1624 | 4 | |||
|
1625 | 13 | |||
|
1626 | 10 | |||
|
1627 | 576 | |||
|
1628 | 15 | |||
|
1629 | 5 | |||
|
1630 | 48 | |||
|
1631 | 62 | |||
|
1632 | 19 | |||
|
1633 | 4 | |||
|
1634 | 15 | |||
|
1635 | 99 | |||
|
1636 | 43 | |||
|
1637 | 63 | |||
|
1638 | 7 | |||
|
1639 | 64 | |||
|
1640 | 49 | |||
|
1641 | 20 | |||
|
1642 | 1 | |||
|
1643 | 13 | |||
|
1644 | 9 | |||
|
1645 | 597 | |||
|
1646 | 15 | |||
|
1647 | 20 | |||
|
1648 | 3 | |||
|
1649 | 10 | |||
|
1650 | 596 | |||
|
1651 | 2 | |||
|
1652 | 8 | |||
|
1653 | 597 | |||
|
1654 | 3 | |||
|
1655 | 9 | |||
|
1656 | 625 | |||
|
1657 | 5 | |||
|
1658 | 7 | |||
|
1659 | 65 | |||
|
1660 | 64 | |||
|
1661 | 20 | |||
|
1662 | 4 | |||
|
1663 | 20 | |||
|
1664 | 3 | |||
|
1665 | 35 | |||
|
1666 | 2 | |||
|
1667 | 5 | |||
|
1668 | 48 | |||
|
1669 | 66 | |||
|
1670 | 35 | |||
|
1671 | 2 | |||
|
1672 | 49 | |||
|
1673 | 59 | |||
|
1674 | 1 | |||
|
1675 | 20 | |||
|
1676 | 0 | |||
|
1677 | 47 | |||
|
1678 | 49 | |||
|
1679 | 60 | |||
|
1680 | 2 | |||
|
1681 | 8 | |||
|
1682 | 626 | |||
|
1683 | 1 | |||
|
1684 | 15 | |||
|
1685 | 20 | |||
|
1686 | 4 | |||
|
1687 | 9 | |||
|
1688 | 634 | |||
|
1689 | 1 | |||
|
1690 | 8 | |||
|
1691 | 644 | |||
|
1692 | 5 | |||
|
1693 | 7 | |||
|
1694 | 67 | |||
|
1695 | 64 | |||
|
1696 | 20 | |||
|
1697 | 0 | |||
|
1698 | 47 | |||
|
1699 | 49 | |||
|
1700 | 60 | |||
|
1701 | 2 | |||
|
1702 | 15 | |||
|
1703 | 20 | |||
|
1704 | 0 | |||
|
1705 | 20 | |||
|
1706 | 4 | |||
|
1707 | 20 | |||
|
1708 | 3 | |||
|
1709 | 35 | |||
|
1710 | 2 | |||
|
1711 | 49 | |||
|
1712 | 25 | |||
|
1713 | 1 | |||
|
1714 | 15 | |||
|
1715 | 68 | |||
|
1716 | 8 | |||
|
1717 | 5 | |||
|
1718 | 1 | |||
|
1719 | 15 | |||
|
1720 | 20 | |||
|
1721 | 2 | |||
|
1722 | 7 | |||
|
1723 | 24 | |||
|
1724 | 83 | |||
|
1725 | 68 | |||
|
1726 | 9 | |||
|
1727 | 683 | |||
|
1728 | 20 | |||
|
1729 | 0 | |||
|
1730 | 7 | |||
|
1731 | 47 | |||
|
1732 | 7 | |||
|
1733 | 24 | |||
|
1734 | 35 | |||
|
1735 | 2 | |||
|
1736 | 49 | |||
|
1737 | 25 | |||
|
1738 | 1 | |||
|
1739 | 8 | |||
|
1740 | 684 | |||
|
1741 | 1 | |||
|
1742 | 15 | |||
|
1743 | 20 | |||
|
1744 | 0 | |||
|
1745 | 11 | |||
|
1746 | I | |||
|
1747 | c | |||
|
1748 | I | |||
|
1749 | 5 | |||
|
1750 | I | |||
|
1751 | 2 | |||
|
1752 | I | |||
|
1753 | 2 | |||
|
1754 | n | |||
|
1755 | p | |||
|
1756 | 69 | |||
|
1757 | x | |||
|
1758 | 7 | |||
|
1759 | initial | |||
|
1760 | x | |||
|
1761 | 4 | |||
|
1762 | eos? | |||
|
1763 | x | |||
|
1764 | 3 | |||
|
1765 | === | |||
|
1766 | n | |||
|
1767 | x | |||
|
1768 | 6 | |||
|
1769 | Regexp | |||
|
1770 | s | |||
|
1771 | 12 | |||
|
1772 | \s+ | \\\n | |||
|
1773 | x | |||
|
1774 | 3 | |||
|
1775 | new | |||
|
1776 | x | |||
|
1777 | 4 | |||
|
1778 | scan | |||
|
1779 | x | |||
|
1780 | 5 | |||
|
1781 | space | |||
|
1782 | n | |||
|
1783 | s | |||
|
1784 | 5 | |||
|
1785 | -- .* | |||
|
1786 | x | |||
|
1787 | 7 | |||
|
1788 | comment | |||
|
1789 | n | |||
|
1790 | s | |||
|
1791 | 42 | |||
|
1792 | [-+*\/=<>?:;,!&^|()\[\]{}~%]+ | \.(?!\d) | |||
|
1793 | x | |||
|
1794 | 8 | |||
|
1795 | operator | |||
|
1796 | n | |||
|
1797 | s | |||
|
1798 | 24 | |||
|
1799 | [A-Za-z_][A-Za-z_0-9]* | |||
|
1800 | x | |||
|
1801 | 10 | |||
|
1802 | IDENT_KIND | |||
|
1803 | n | |||
|
1804 | x | |||
|
1805 | 8 | |||
|
1806 | downcase | |||
|
1807 | x | |||
|
1808 | 2 | |||
|
1809 | [] | |||
|
1810 | n | |||
|
1811 | s | |||
|
1812 | 7 | |||
|
1813 | [a-z]?" | |||
|
1814 | x | |||
|
1815 | 4 | |||
|
1816 | open | |||
|
1817 | x | |||
|
1818 | 6 | |||
|
1819 | string | |||
|
1820 | x | |||
|
1821 | 2 | |||
|
1822 | << | |||
|
1823 | x | |||
|
1824 | 9 | |||
|
1825 | delimiter | |||
|
1826 | n | |||
|
1827 | s | |||
|
1828 | 24 | |||
|
1829 | L?' (?: [^\'\n\\] | \\ | |||
|
1830 | x | |||
|
1831 | 6 | |||
|
1832 | ESCAPE | |||
|
1833 | n | |||
|
1834 | x | |||
|
1835 | 4 | |||
|
1836 | to_s | |||
|
1837 | s | |||
|
1838 | 7 | |||
|
1839 | )? '? | |||
|
1840 | x | |||
|
1841 | 4 | |||
|
1842 | char | |||
|
1843 | n | |||
|
1844 | s | |||
|
1845 | 18 | |||
|
1846 | (?:\d+)(?![.eEfF]) | |||
|
1847 | x | |||
|
1848 | 7 | |||
|
1849 | integer | |||
|
1850 | n | |||
|
1851 | s | |||
|
1852 | 59 | |||
|
1853 | \d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]? | |||
|
1854 | x | |||
|
1855 | 5 | |||
|
1856 | float | |||
|
1857 | x | |||
|
1858 | 5 | |||
|
1859 | getch | |||
|
1860 | x | |||
|
1861 | 5 | |||
|
1862 | error | |||
|
1863 | n | |||
|
1864 | s | |||
|
1865 | 9 | |||
|
1866 | [^\\\n"]+ | |||
|
1867 | x | |||
|
1868 | 7 | |||
|
1869 | content | |||
|
1870 | n | |||
|
1871 | s | |||
|
1872 | 1 | |||
|
1873 | " | |||
|
1874 | x | |||
|
1875 | 5 | |||
|
1876 | close | |||
|
1877 | n | |||
|
1878 | s | |||
|
1879 | 8 | |||
|
1880 | \\ (?: | |||
|
1881 | n | |||
|
1882 | s | |||
|
1883 | 3 | |||
|
1884 | | | |||
|
1885 | x | |||
|
1886 | 14 | |||
|
1887 | UNICODE_ESCAPE | |||
|
1888 | n | |||
|
1889 | s | |||
|
1890 | 3 | |||
|
1891 | ) | |||
|
1892 | n | |||
|
1893 | s | |||
|
1894 | 8 | |||
|
1895 | \\ | $ | |||
|
1896 | s | |||
|
1897 | 36 | |||
|
1898 | else case " reached; %p not handled. | |||
|
1899 | x | |||
|
1900 | 4 | |||
|
1901 | peek | |||
|
1902 | x | |||
|
1903 | 1 | |||
|
1904 | % | |||
|
1905 | x | |||
|
1906 | 13 | |||
|
1907 | raise_inspect | |||
|
1908 | s | |||
|
1909 | 13 | |||
|
1910 | Unknown state | |||
|
1911 | x | |||
|
1912 | 7 | |||
|
1913 | matched | |||
|
1914 | x | |||
|
1915 | 7 | |||
|
1916 | Globals | |||
|
1917 | x | |||
|
1918 | 6 | |||
|
1919 | $DEBUG | |||
|
1920 | s | |||
|
1921 | 25 | |||
|
1922 | Error token %p in line %d | |||
|
1923 | x | |||
|
1924 | 4 | |||
|
1925 | line | |||
|
1926 | s | |||
|
1927 | 11 | |||
|
1928 | Empty token | |||
|
1929 | x | |||
|
1930 | 2 | |||
|
1931 | == | |||
|
1932 | p | |||
|
1933 | 111 | |||
|
1934 | I | |||
|
1935 | 0 | |||
|
1936 | I | |||
|
1937 | 28 | |||
|
1938 | I | |||
|
1939 | 0 | |||
|
1940 | I | |||
|
1941 | 2a | |||
|
1942 | I | |||
|
1943 | 5 | |||
|
1944 | I | |||
|
1945 | 2c | |||
|
1946 | I | |||
|
1947 | c | |||
|
1948 | I | |||
|
1949 | 2e | |||
|
1950 | I | |||
|
1951 | 10 | |||
|
1952 | I | |||
|
1953 | 2f | |||
|
1954 | I | |||
|
1955 | 14 | |||
|
1956 | I | |||
|
1957 | 31 | |||
|
1958 | I | |||
|
1959 | 17 | |||
|
1960 | I | |||
|
1961 | 33 | |||
|
1962 | I | |||
|
1963 | 20 | |||
|
1964 | I | |||
|
1965 | 35 | |||
|
1966 | I | |||
|
1967 | 39 | |||
|
1968 | I | |||
|
1969 | 36 | |||
|
1970 | I | |||
|
1971 | 3f | |||
|
1972 | I | |||
|
1973 | 38 | |||
|
1974 | I | |||
|
1975 | 58 | |||
|
1976 | I | |||
|
1977 | 39 | |||
|
1978 | I | |||
|
1979 | 5e | |||
|
1980 | I | |||
|
1981 | 3b | |||
|
1982 | I | |||
|
1983 | 77 | |||
|
1984 | I | |||
|
1985 | 3c | |||
|
1986 | I | |||
|
1987 | 7d | |||
|
1988 | I | |||
|
1989 | 3e | |||
|
1990 | I | |||
|
1991 | 98 | |||
|
1992 | I | |||
|
1993 | 3f | |||
|
1994 | I | |||
|
1995 | a7 | |||
|
1996 | I | |||
|
1997 | 41 | |||
|
1998 | I | |||
|
1999 | c2 | |||
|
2000 | I | |||
|
2001 | 42 | |||
|
2002 | I | |||
|
2003 | ce | |||
|
2004 | I | |||
|
2005 | 43 | |||
|
2006 | I | |||
|
2007 | d3 | |||
|
2008 | I | |||
|
2009 | 44 | |||
|
2010 | I | |||
|
2011 | d9 | |||
|
2012 | I | |||
|
2013 | 46 | |||
|
2014 | I | |||
|
2015 | fd | |||
|
2016 | I | |||
|
2017 | 47 | |||
|
2018 | I | |||
|
2019 | 103 | |||
|
2020 | I | |||
|
2021 | 49 | |||
|
2022 | I | |||
|
2023 | 11c | |||
|
2024 | I | |||
|
2025 | 4a | |||
|
2026 | I | |||
|
2027 | 122 | |||
|
2028 | I | |||
|
2029 | 4c | |||
|
2030 | I | |||
|
2031 | 13b | |||
|
2032 | I | |||
|
2033 | 4d | |||
|
2034 | I | |||
|
2035 | 141 | |||
|
2036 | I | |||
|
2037 | 50 | |||
|
2038 | I | |||
|
2039 | 145 | |||
|
2040 | I | |||
|
2041 | 51 | |||
|
2042 | I | |||
|
2043 | 14c | |||
|
2044 | I | |||
|
2045 | 55 | |||
|
2046 | I | |||
|
2047 | 155 | |||
|
2048 | I | |||
|
2049 | 56 | |||
|
2050 | I | |||
|
2051 | 16e | |||
|
2052 | I | |||
|
2053 | 57 | |||
|
2054 | I | |||
|
2055 | 174 | |||
|
2056 | I | |||
|
2057 | 58 | |||
|
2058 | I | |||
|
2059 | 18d | |||
|
2060 | I | |||
|
2061 | 59 | |||
|
2062 | I | |||
|
2063 | 19a | |||
|
2064 | I | |||
|
2065 | 5a | |||
|
2066 | I | |||
|
2067 | 1a6 | |||
|
2068 | I | |||
|
2069 | 5b | |||
|
2070 | I | |||
|
2071 | 1ab | |||
|
2072 | I | |||
|
2073 | 5c | |||
|
2074 | I | |||
|
2075 | 1b0 | |||
|
2076 | I | |||
|
2077 | 5d | |||
|
2078 | I | |||
|
2079 | 1de | |||
|
2080 | I | |||
|
2081 | 5e | |||
|
2082 | I | |||
|
2083 | 1e4 | |||
|
2084 | I | |||
|
2085 | 5f | |||
|
2086 | I | |||
|
2087 | 1fd | |||
|
2088 | I | |||
|
2089 | 60 | |||
|
2090 | I | |||
|
2091 | 209 | |||
|
2092 | I | |||
|
2093 | 61 | |||
|
2094 | I | |||
|
2095 | 20e | |||
|
2096 | I | |||
|
2097 | 62 | |||
|
2098 | I | |||
|
2099 | 214 | |||
|
2100 | I | |||
|
2101 | 64 | |||
|
2102 | I | |||
|
2103 | 22a | |||
|
2104 | I | |||
|
2105 | 68 | |||
|
2106 | I | |||
|
2107 | 235 | |||
|
2108 | I | |||
|
2109 | 6c | |||
|
2110 | I | |||
|
2111 | 241 | |||
|
2112 | I | |||
|
2113 | 6d | |||
|
2114 | I | |||
|
2115 | 257 | |||
|
2116 | I | |||
|
2117 | 6f | |||
|
2118 | I | |||
|
2119 | 258 | |||
|
2120 | I | |||
|
2121 | 6e | |||
|
2122 | I | |||
|
2123 | 25b | |||
|
2124 | I | |||
|
2125 | 6f | |||
|
2126 | I | |||
|
2127 | 271 | |||
|
2128 | I | |||
|
2129 | 6d | |||
|
2130 | I | |||
|
2131 | 273 | |||
|
2132 | I | |||
|
2133 | 71 | |||
|
2134 | I | |||
|
2135 | 285 | |||
|
2136 | I | |||
|
2137 | 73 | |||
|
2138 | I | |||
|
2139 | 296 | |||
|
2140 | I | |||
|
2141 | 77 | |||
|
2142 | I | |||
|
2143 | 29e | |||
|
2144 | I | |||
|
2145 | 78 | |||
|
2146 | I | |||
|
2147 | 2ab | |||
|
2148 | I | |||
|
2149 | 77 | |||
|
2150 | I | |||
|
2151 | 2ad | |||
|
2152 | I | |||
|
2153 | 7b | |||
|
2154 | I | |||
|
2155 | 2b0 | |||
|
2156 | x | |||
|
2157 | 54 | |||
|
2158 | /Users/murphy/ruby/coderay-0.9/test/functional/vhdl.rb | |||
|
2159 | p | |||
|
2160 | 5 | |||
|
2161 | x | |||
|
2162 | 6 | |||
|
2163 | tokens | |||
|
2164 | x | |||
|
2165 | 7 | |||
|
2166 | options | |||
|
2167 | x | |||
|
2168 | 5 | |||
|
2169 | state | |||
|
2170 | x | |||
|
2171 | 4 | |||
|
2172 | kind | |||
|
2173 | x | |||
|
2174 | 5 | |||
|
2175 | match | |||
|
2176 | x | |||
|
2177 | 17 | |||
|
2178 | method_visibility | |||
|
2179 | x | |||
|
2180 | 15 | |||
|
2181 | add_defn_method | |||
|
2182 | p | |||
|
2183 | 65 | |||
|
2184 | I | |||
|
2185 | 2 | |||
|
2186 | I | |||
|
2187 | 3 | |||
|
2188 | I | |||
|
2189 | a | |||
|
2190 | I | |||
|
2191 | 5 | |||
|
2192 | I | |||
|
2193 | d | |||
|
2194 | I | |||
|
2195 | 6 | |||
|
2196 | I | |||
|
2197 | 22 | |||
|
2198 | I | |||
|
2199 | 7 | |||
|
2200 | I | |||
|
2201 | 3a | |||
|
2202 | I | |||
|
2203 | 8 | |||
|
2204 | I | |||
|
2205 | 55 | |||
|
2206 | I | |||
|
2207 | 9 | |||
|
2208 | I | |||
|
2209 | 6d | |||
|
2210 | I | |||
|
2211 | a | |||
|
2212 | I | |||
|
2213 | 85 | |||
|
2214 | I | |||
|
2215 | b | |||
|
2216 | I | |||
|
2217 | a3 | |||
|
2218 | I | |||
|
2219 | c | |||
|
2220 | I | |||
|
2221 | bb | |||
|
2222 | I | |||
|
2223 | d | |||
|
2224 | I | |||
|
2225 | d3 | |||
|
2226 | I | |||
|
2227 | e | |||
|
2228 | I | |||
|
2229 | ee | |||
|
2230 | I | |||
|
2231 | f | |||
|
2232 | I | |||
|
2233 | 109 | |||
|
2234 | I | |||
|
2235 | 10 | |||
|
2236 | I | |||
|
2237 | 115 | |||
|
2238 | I | |||
|
2239 | 11 | |||
|
2240 | I | |||
|
2241 | 11e | |||
|
2242 | I | |||
|
2243 | 14 | |||
|
2244 | I | |||
|
2245 | 121 | |||
|
2246 | I | |||
|
2247 | 15 | |||
|
2248 | I | |||
|
2249 | 139 | |||
|
2250 | I | |||
|
2251 | 16 | |||
|
2252 | I | |||
|
2253 | 14e | |||
|
2254 | I | |||
|
2255 | 17 | |||
|
2256 | I | |||
|
2257 | 15d | |||
|
2258 | I | |||
|
2259 | 18 | |||
|
2260 | I | |||
|
2261 | 169 | |||
|
2262 | I | |||
|
2263 | 19 | |||
|
2264 | I | |||
|
2265 | 181 | |||
|
2266 | I | |||
|
2267 | 1c | |||
|
2268 | I | |||
|
2269 | 184 | |||
|
2270 | I | |||
|
2271 | 1e | |||
|
2272 | I | |||
|
2273 | 18a | |||
|
2274 | I | |||
|
2275 | 20 | |||
|
2276 | I | |||
|
2277 | 1ab | |||
|
2278 | I | |||
|
2279 | 21 | |||
|
2280 | I | |||
|
2281 | 1b0 | |||
|
2282 | I | |||
|
2283 | 20 | |||
|
2284 | I | |||
|
2285 | 1b3 | |||
|
2286 | I | |||
|
2287 | 22 | |||
|
2288 | I | |||
|
2289 | 1b8 | |||
|
2290 | I | |||
|
2291 | 20 | |||
|
2292 | I | |||
|
2293 | 1bb | |||
|
2294 | I | |||
|
2295 | 23 | |||
|
2296 | I | |||
|
2297 | 1c0 | |||
|
2298 | I | |||
|
2299 | 20 | |||
|
2300 | I | |||
|
2301 | 1c7 | |||
|
2302 | I | |||
|
2303 | 25 | |||
|
2304 | I | |||
|
2305 | 1e0 | |||
|
2306 | I | |||
|
2307 | 26 | |||
|
2308 | I | |||
|
2309 | 1f9 | |||
|
2310 | I | |||
|
2311 | 28 | |||
|
2312 | I | |||
|
2313 | 207 | |||
|
2314 | x | |||
|
2315 | 54 | |||
|
2316 | /Users/murphy/ruby/coderay-0.9/test/functional/vhdl.rb | |||
|
2317 | p | |||
|
2318 | 0 | |||
|
2319 | x | |||
|
2320 | 13 | |||
|
2321 | attach_method | |||
|
2322 | p | |||
|
2323 | 3 | |||
|
2324 | I | |||
|
2325 | 0 | |||
|
2326 | I | |||
|
2327 | 1 | |||
|
2328 | I | |||
|
2329 | 23 | |||
|
2330 | x | |||
|
2331 | 54 | |||
|
2332 | /Users/murphy/ruby/coderay-0.9/test/functional/vhdl.rb | |||
|
2333 | p | |||
|
2334 | 0 |
@@ -0,0 +1,79 | |||||
|
1 | require 'test/unit' | |||
|
2 | require 'coderay' | |||
|
3 | ||||
|
4 | class WordListTest < Test::Unit::TestCase | |||
|
5 | ||||
|
6 | include CodeRay | |||
|
7 | ||||
|
8 | # define word arrays | |||
|
9 | RESERVED_WORDS = %w[ | |||
|
10 | asm break case continue default do else | |||
|
11 | ... | |||
|
12 | ] | |||
|
13 | ||||
|
14 | PREDEFINED_TYPES = %w[ | |||
|
15 | int long short char void | |||
|
16 | ... | |||
|
17 | ] | |||
|
18 | ||||
|
19 | PREDEFINED_CONSTANTS = %w[ | |||
|
20 | EOF NULL ... | |||
|
21 | ] | |||
|
22 | ||||
|
23 | # make a WordList | |||
|
24 | IDENT_KIND = WordList.new(:ident). | |||
|
25 | add(RESERVED_WORDS, :reserved). | |||
|
26 | add(PREDEFINED_TYPES, :pre_type). | |||
|
27 | add(PREDEFINED_CONSTANTS, :pre_constant) | |||
|
28 | ||||
|
29 | def test_word_list_example | |||
|
30 | assert_equal :pre_type, IDENT_KIND['void'] | |||
|
31 | # assert_equal :pre_constant, IDENT_KIND['...'] # not specified | |||
|
32 | end | |||
|
33 | ||||
|
34 | def test_word_list | |||
|
35 | list = WordList.new(:ident).add(['foobar'], :reserved) | |||
|
36 | assert_equal :reserved, list['foobar'] | |||
|
37 | assert_equal :ident, list['FooBar'] | |||
|
38 | end | |||
|
39 | ||||
|
40 | def test_word_list_cached | |||
|
41 | list = WordList.new(:ident, true).add(['foobar'], :reserved) | |||
|
42 | assert_equal :reserved, list['foobar'] | |||
|
43 | assert_equal :ident, list['FooBar'] | |||
|
44 | end | |||
|
45 | ||||
|
46 | def test_case_ignoring_word_list | |||
|
47 | list = CaseIgnoringWordList.new(:ident).add(['foobar'], :reserved) | |||
|
48 | assert_equal :ident, list['foo'] | |||
|
49 | assert_equal :reserved, list['foobar'] | |||
|
50 | assert_equal :reserved, list['FooBar'] | |||
|
51 | ||||
|
52 | list = CaseIgnoringWordList.new(:ident).add(['FooBar'], :reserved) | |||
|
53 | assert_equal :ident, list['foo'] | |||
|
54 | assert_equal :reserved, list['foobar'] | |||
|
55 | assert_equal :reserved, list['FooBar'] | |||
|
56 | end | |||
|
57 | ||||
|
58 | def test_case_ignoring_word_list_cached | |||
|
59 | list = CaseIgnoringWordList.new(:ident, true).add(['foobar'], :reserved) | |||
|
60 | assert_equal :ident, list['foo'] | |||
|
61 | assert_equal :reserved, list['foobar'] | |||
|
62 | assert_equal :reserved, list['FooBar'] | |||
|
63 | ||||
|
64 | list = CaseIgnoringWordList.new(:ident, true).add(['FooBar'], :reserved) | |||
|
65 | assert_equal :ident, list['foo'] | |||
|
66 | assert_equal :reserved, list['foobar'] | |||
|
67 | assert_equal :reserved, list['FooBar'] | |||
|
68 | end | |||
|
69 | ||||
|
70 | def test_dup | |||
|
71 | list = WordList.new(:ident).add(['foobar'], :reserved) | |||
|
72 | assert_equal :reserved, list['foobar'] | |||
|
73 | list2 = list.dup | |||
|
74 | list2.add(%w[foobar], :keyword) | |||
|
75 | assert_equal :keyword, list2['foobar'] | |||
|
76 | assert_equal :reserved, list['foobar'] | |||
|
77 | end | |||
|
78 | ||||
|
79 | end No newline at end of file |
This diff has been collapsed as it changes many lines, (1763 lines changed) Show them Hide them | |||||
@@ -0,0 +1,1763 | |||||
|
1 | !RBIX | |||
|
2 | 0 | |||
|
3 | x | |||
|
4 | M | |||
|
5 | 1 | |||
|
6 | n | |||
|
7 | n | |||
|
8 | x | |||
|
9 | 10 | |||
|
10 | __script__ | |||
|
11 | i | |||
|
12 | 53 | |||
|
13 | 5 | |||
|
14 | 7 | |||
|
15 | 0 | |||
|
16 | 64 | |||
|
17 | 47 | |||
|
18 | 49 | |||
|
19 | 1 | |||
|
20 | 1 | |||
|
21 | 15 | |||
|
22 | 5 | |||
|
23 | 7 | |||
|
24 | 2 | |||
|
25 | 64 | |||
|
26 | 47 | |||
|
27 | 49 | |||
|
28 | 1 | |||
|
29 | 1 | |||
|
30 | 15 | |||
|
31 | 99 | |||
|
32 | 7 | |||
|
33 | 3 | |||
|
34 | 45 | |||
|
35 | 4 | |||
|
36 | 5 | |||
|
37 | 43 | |||
|
38 | 6 | |||
|
39 | 43 | |||
|
40 | 7 | |||
|
41 | 65 | |||
|
42 | 49 | |||
|
43 | 8 | |||
|
44 | 3 | |||
|
45 | 13 | |||
|
46 | 99 | |||
|
47 | 12 | |||
|
48 | 7 | |||
|
49 | 9 | |||
|
50 | 12 | |||
|
51 | 7 | |||
|
52 | 10 | |||
|
53 | 12 | |||
|
54 | 65 | |||
|
55 | 12 | |||
|
56 | 49 | |||
|
57 | 11 | |||
|
58 | 4 | |||
|
59 | 15 | |||
|
60 | 49 | |||
|
61 | 9 | |||
|
62 | 0 | |||
|
63 | 15 | |||
|
64 | 2 | |||
|
65 | 11 | |||
|
66 | I | |||
|
67 | 6 | |||
|
68 | I | |||
|
69 | 0 | |||
|
70 | I | |||
|
71 | 0 | |||
|
72 | I | |||
|
73 | 0 | |||
|
74 | n | |||
|
75 | p | |||
|
76 | 12 | |||
|
77 | s | |||
|
78 | 9 | |||
|
79 | test/unit | |||
|
80 | x | |||
|
81 | 7 | |||
|
82 | require | |||
|
83 | s | |||
|
84 | 7 | |||
|
85 | coderay | |||
|
86 | x | |||
|
87 | 12 | |||
|
88 | WordListTest | |||
|
89 | x | |||
|
90 | 4 | |||
|
91 | Test | |||
|
92 | n | |||
|
93 | x | |||
|
94 | 4 | |||
|
95 | Unit | |||
|
96 | x | |||
|
97 | 8 | |||
|
98 | TestCase | |||
|
99 | x | |||
|
100 | 10 | |||
|
101 | open_class | |||
|
102 | x | |||
|
103 | 14 | |||
|
104 | __class_init__ | |||
|
105 | M | |||
|
106 | 1 | |||
|
107 | n | |||
|
108 | n | |||
|
109 | x | |||
|
110 | 12 | |||
|
111 | WordListTest | |||
|
112 | i | |||
|
113 | 232 | |||
|
114 | 5 | |||
|
115 | 66 | |||
|
116 | 5 | |||
|
117 | 45 | |||
|
118 | 0 | |||
|
119 | 1 | |||
|
120 | 47 | |||
|
121 | 49 | |||
|
122 | 2 | |||
|
123 | 1 | |||
|
124 | 15 | |||
|
125 | 65 | |||
|
126 | 7 | |||
|
127 | 3 | |||
|
128 | 7 | |||
|
129 | 4 | |||
|
130 | 64 | |||
|
131 | 7 | |||
|
132 | 5 | |||
|
133 | 64 | |||
|
134 | 7 | |||
|
135 | 6 | |||
|
136 | 64 | |||
|
137 | 7 | |||
|
138 | 7 | |||
|
139 | 64 | |||
|
140 | 7 | |||
|
141 | 8 | |||
|
142 | 64 | |||
|
143 | 7 | |||
|
144 | 9 | |||
|
145 | 64 | |||
|
146 | 7 | |||
|
147 | 10 | |||
|
148 | 64 | |||
|
149 | 7 | |||
|
150 | 11 | |||
|
151 | 64 | |||
|
152 | 35 | |||
|
153 | 8 | |||
|
154 | 49 | |||
|
155 | 12 | |||
|
156 | 2 | |||
|
157 | 15 | |||
|
158 | 65 | |||
|
159 | 7 | |||
|
160 | 13 | |||
|
161 | 7 | |||
|
162 | 14 | |||
|
163 | 64 | |||
|
164 | 7 | |||
|
165 | 15 | |||
|
166 | 64 | |||
|
167 | 7 | |||
|
168 | 16 | |||
|
169 | 64 | |||
|
170 | 7 | |||
|
171 | 17 | |||
|
172 | 64 | |||
|
173 | 7 | |||
|
174 | 18 | |||
|
175 | 64 | |||
|
176 | 7 | |||
|
177 | 11 | |||
|
178 | 64 | |||
|
179 | 35 | |||
|
180 | 6 | |||
|
181 | 49 | |||
|
182 | 12 | |||
|
183 | 2 | |||
|
184 | 15 | |||
|
185 | 65 | |||
|
186 | 7 | |||
|
187 | 19 | |||
|
188 | 7 | |||
|
189 | 20 | |||
|
190 | 64 | |||
|
191 | 7 | |||
|
192 | 21 | |||
|
193 | 64 | |||
|
194 | 7 | |||
|
195 | 11 | |||
|
196 | 64 | |||
|
197 | 35 | |||
|
198 | 3 | |||
|
199 | 49 | |||
|
200 | 12 | |||
|
201 | 2 | |||
|
202 | 15 | |||
|
203 | 65 | |||
|
204 | 7 | |||
|
205 | 22 | |||
|
206 | 45 | |||
|
207 | 23 | |||
|
208 | 24 | |||
|
209 | 13 | |||
|
210 | 71 | |||
|
211 | 25 | |||
|
212 | 47 | |||
|
213 | 9 | |||
|
214 | 115 | |||
|
215 | 47 | |||
|
216 | 49 | |||
|
217 | 26 | |||
|
218 | 0 | |||
|
219 | 13 | |||
|
220 | 7 | |||
|
221 | 27 | |||
|
222 | 47 | |||
|
223 | 49 | |||
|
224 | 28 | |||
|
225 | 1 | |||
|
226 | 15 | |||
|
227 | 8 | |||
|
228 | 120 | |||
|
229 | 7 | |||
|
230 | 27 | |||
|
231 | 49 | |||
|
232 | 25 | |||
|
233 | 1 | |||
|
234 | 45 | |||
|
235 | 3 | |||
|
236 | 29 | |||
|
237 | 7 | |||
|
238 | 30 | |||
|
239 | 49 | |||
|
240 | 31 | |||
|
241 | 2 | |||
|
242 | 45 | |||
|
243 | 13 | |||
|
244 | 32 | |||
|
245 | 7 | |||
|
246 | 33 | |||
|
247 | 49 | |||
|
248 | 31 | |||
|
249 | 2 | |||
|
250 | 45 | |||
|
251 | 19 | |||
|
252 | 34 | |||
|
253 | 7 | |||
|
254 | 35 | |||
|
255 | 49 | |||
|
256 | 31 | |||
|
257 | 2 | |||
|
258 | 49 | |||
|
259 | 12 | |||
|
260 | 2 | |||
|
261 | 15 | |||
|
262 | 99 | |||
|
263 | 7 | |||
|
264 | 36 | |||
|
265 | 7 | |||
|
266 | 37 | |||
|
267 | 65 | |||
|
268 | 67 | |||
|
269 | 49 | |||
|
270 | 38 | |||
|
271 | 0 | |||
|
272 | 49 | |||
|
273 | 39 | |||
|
274 | 4 | |||
|
275 | 15 | |||
|
276 | 99 | |||
|
277 | 7 | |||
|
278 | 40 | |||
|
279 | 7 | |||
|
280 | 41 | |||
|
281 | 65 | |||
|
282 | 67 | |||
|
283 | 49 | |||
|
284 | 38 | |||
|
285 | 0 | |||
|
286 | 49 | |||
|
287 | 39 | |||
|
288 | 4 | |||
|
289 | 15 | |||
|
290 | 99 | |||
|
291 | 7 | |||
|
292 | 42 | |||
|
293 | 7 | |||
|
294 | 43 | |||
|
295 | 65 | |||
|
296 | 67 | |||
|
297 | 49 | |||
|
298 | 38 | |||
|
299 | 0 | |||
|
300 | 49 | |||
|
301 | 39 | |||
|
302 | 4 | |||
|
303 | 15 | |||
|
304 | 99 | |||
|
305 | 7 | |||
|
306 | 44 | |||
|
307 | 7 | |||
|
308 | 45 | |||
|
309 | 65 | |||
|
310 | 67 | |||
|
311 | 49 | |||
|
312 | 38 | |||
|
313 | 0 | |||
|
314 | 49 | |||
|
315 | 39 | |||
|
316 | 4 | |||
|
317 | 15 | |||
|
318 | 99 | |||
|
319 | 7 | |||
|
320 | 46 | |||
|
321 | 7 | |||
|
322 | 47 | |||
|
323 | 65 | |||
|
324 | 67 | |||
|
325 | 49 | |||
|
326 | 38 | |||
|
327 | 0 | |||
|
328 | 49 | |||
|
329 | 39 | |||
|
330 | 4 | |||
|
331 | 15 | |||
|
332 | 99 | |||
|
333 | 7 | |||
|
334 | 48 | |||
|
335 | 7 | |||
|
336 | 49 | |||
|
337 | 65 | |||
|
338 | 67 | |||
|
339 | 49 | |||
|
340 | 38 | |||
|
341 | 0 | |||
|
342 | 49 | |||
|
343 | 39 | |||
|
344 | 4 | |||
|
345 | 11 | |||
|
346 | I | |||
|
347 | a | |||
|
348 | I | |||
|
349 | 0 | |||
|
350 | I | |||
|
351 | 0 | |||
|
352 | I | |||
|
353 | 0 | |||
|
354 | n | |||
|
355 | p | |||
|
356 | 50 | |||
|
357 | x | |||
|
358 | 7 | |||
|
359 | CodeRay | |||
|
360 | n | |||
|
361 | x | |||
|
362 | 7 | |||
|
363 | include | |||
|
364 | x | |||
|
365 | 14 | |||
|
366 | RESERVED_WORDS | |||
|
367 | s | |||
|
368 | 3 | |||
|
369 | asm | |||
|
370 | s | |||
|
371 | 5 | |||
|
372 | break | |||
|
373 | s | |||
|
374 | 4 | |||
|
375 | case | |||
|
376 | s | |||
|
377 | 8 | |||
|
378 | continue | |||
|
379 | s | |||
|
380 | 7 | |||
|
381 | default | |||
|
382 | s | |||
|
383 | 2 | |||
|
384 | do | |||
|
385 | s | |||
|
386 | 4 | |||
|
387 | else | |||
|
388 | s | |||
|
389 | 3 | |||
|
390 | ... | |||
|
391 | x | |||
|
392 | 9 | |||
|
393 | const_set | |||
|
394 | x | |||
|
395 | 16 | |||
|
396 | PREDEFINED_TYPES | |||
|
397 | s | |||
|
398 | 3 | |||
|
399 | int | |||
|
400 | s | |||
|
401 | 4 | |||
|
402 | long | |||
|
403 | s | |||
|
404 | 5 | |||
|
405 | short | |||
|
406 | s | |||
|
407 | 4 | |||
|
408 | char | |||
|
409 | s | |||
|
410 | 4 | |||
|
411 | void | |||
|
412 | x | |||
|
413 | 20 | |||
|
414 | PREDEFINED_CONSTANTS | |||
|
415 | s | |||
|
416 | 3 | |||
|
417 | EOF | |||
|
418 | s | |||
|
419 | 4 | |||
|
420 | NULL | |||
|
421 | x | |||
|
422 | 10 | |||
|
423 | IDENT_KIND | |||
|
424 | x | |||
|
425 | 8 | |||
|
426 | WordList | |||
|
427 | n | |||
|
428 | x | |||
|
429 | 3 | |||
|
430 | new | |||
|
431 | x | |||
|
432 | 8 | |||
|
433 | allocate | |||
|
434 | x | |||
|
435 | 5 | |||
|
436 | ident | |||
|
437 | x | |||
|
438 | 10 | |||
|
439 | initialize | |||
|
440 | n | |||
|
441 | x | |||
|
442 | 8 | |||
|
443 | reserved | |||
|
444 | x | |||
|
445 | 3 | |||
|
446 | add | |||
|
447 | n | |||
|
448 | x | |||
|
449 | 8 | |||
|
450 | pre_type | |||
|
451 | n | |||
|
452 | x | |||
|
453 | 12 | |||
|
454 | pre_constant | |||
|
455 | x | |||
|
456 | 22 | |||
|
457 | test_word_list_example | |||
|
458 | M | |||
|
459 | 1 | |||
|
460 | n | |||
|
461 | n | |||
|
462 | x | |||
|
463 | 22 | |||
|
464 | test_word_list_example | |||
|
465 | i | |||
|
466 | 17 | |||
|
467 | 5 | |||
|
468 | 7 | |||
|
469 | 0 | |||
|
470 | 45 | |||
|
471 | 1 | |||
|
472 | 2 | |||
|
473 | 7 | |||
|
474 | 3 | |||
|
475 | 64 | |||
|
476 | 49 | |||
|
477 | 4 | |||
|
478 | 1 | |||
|
479 | 47 | |||
|
480 | 49 | |||
|
481 | 5 | |||
|
482 | 2 | |||
|
483 | 11 | |||
|
484 | I | |||
|
485 | 4 | |||
|
486 | I | |||
|
487 | 0 | |||
|
488 | I | |||
|
489 | 0 | |||
|
490 | I | |||
|
491 | 0 | |||
|
492 | n | |||
|
493 | p | |||
|
494 | 6 | |||
|
495 | x | |||
|
496 | 8 | |||
|
497 | pre_type | |||
|
498 | x | |||
|
499 | 10 | |||
|
500 | IDENT_KIND | |||
|
501 | n | |||
|
502 | s | |||
|
503 | 4 | |||
|
504 | void | |||
|
505 | x | |||
|
506 | 2 | |||
|
507 | [] | |||
|
508 | x | |||
|
509 | 12 | |||
|
510 | assert_equal | |||
|
511 | p | |||
|
512 | 5 | |||
|
513 | I | |||
|
514 | 0 | |||
|
515 | I | |||
|
516 | 1d | |||
|
517 | I | |||
|
518 | 0 | |||
|
519 | I | |||
|
520 | 1e | |||
|
521 | I | |||
|
522 | 11 | |||
|
523 | x | |||
|
524 | 59 | |||
|
525 | /Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb | |||
|
526 | p | |||
|
527 | 0 | |||
|
528 | x | |||
|
529 | 17 | |||
|
530 | method_visibility | |||
|
531 | x | |||
|
532 | 15 | |||
|
533 | add_defn_method | |||
|
534 | x | |||
|
535 | 14 | |||
|
536 | test_word_list | |||
|
537 | M | |||
|
538 | 1 | |||
|
539 | n | |||
|
540 | n | |||
|
541 | x | |||
|
542 | 14 | |||
|
543 | test_word_list | |||
|
544 | i | |||
|
545 | 73 | |||
|
546 | 45 | |||
|
547 | 0 | |||
|
548 | 1 | |||
|
549 | 13 | |||
|
550 | 71 | |||
|
551 | 2 | |||
|
552 | 47 | |||
|
553 | 9 | |||
|
554 | 23 | |||
|
555 | 47 | |||
|
556 | 49 | |||
|
557 | 3 | |||
|
558 | 0 | |||
|
559 | 13 | |||
|
560 | 7 | |||
|
561 | 4 | |||
|
562 | 47 | |||
|
563 | 49 | |||
|
564 | 5 | |||
|
565 | 1 | |||
|
566 | 15 | |||
|
567 | 8 | |||
|
568 | 28 | |||
|
569 | 7 | |||
|
570 | 4 | |||
|
571 | 49 | |||
|
572 | 2 | |||
|
573 | 1 | |||
|
574 | 7 | |||
|
575 | 6 | |||
|
576 | 64 | |||
|
577 | 35 | |||
|
578 | 1 | |||
|
579 | 7 | |||
|
580 | 7 | |||
|
581 | 49 | |||
|
582 | 8 | |||
|
583 | 2 | |||
|
584 | 19 | |||
|
585 | 0 | |||
|
586 | 15 | |||
|
587 | 5 | |||
|
588 | 7 | |||
|
589 | 7 | |||
|
590 | 20 | |||
|
591 | 0 | |||
|
592 | 7 | |||
|
593 | 6 | |||
|
594 | 64 | |||
|
595 | 49 | |||
|
596 | 9 | |||
|
597 | 1 | |||
|
598 | 47 | |||
|
599 | 49 | |||
|
600 | 10 | |||
|
601 | 2 | |||
|
602 | 15 | |||
|
603 | 5 | |||
|
604 | 7 | |||
|
605 | 4 | |||
|
606 | 20 | |||
|
607 | 0 | |||
|
608 | 7 | |||
|
609 | 11 | |||
|
610 | 64 | |||
|
611 | 49 | |||
|
612 | 9 | |||
|
613 | 1 | |||
|
614 | 47 | |||
|
615 | 49 | |||
|
616 | 10 | |||
|
617 | 2 | |||
|
618 | 11 | |||
|
619 | I | |||
|
620 | 5 | |||
|
621 | I | |||
|
622 | 1 | |||
|
623 | I | |||
|
624 | 0 | |||
|
625 | I | |||
|
626 | 0 | |||
|
627 | n | |||
|
628 | p | |||
|
629 | 12 | |||
|
630 | x | |||
|
631 | 8 | |||
|
632 | WordList | |||
|
633 | n | |||
|
634 | x | |||
|
635 | 3 | |||
|
636 | new | |||
|
637 | x | |||
|
638 | 8 | |||
|
639 | allocate | |||
|
640 | x | |||
|
641 | 5 | |||
|
642 | ident | |||
|
643 | x | |||
|
644 | 10 | |||
|
645 | initialize | |||
|
646 | s | |||
|
647 | 6 | |||
|
648 | foobar | |||
|
649 | x | |||
|
650 | 8 | |||
|
651 | reserved | |||
|
652 | x | |||
|
653 | 3 | |||
|
654 | add | |||
|
655 | x | |||
|
656 | 2 | |||
|
657 | [] | |||
|
658 | x | |||
|
659 | 12 | |||
|
660 | assert_equal | |||
|
661 | s | |||
|
662 | 6 | |||
|
663 | FooBar | |||
|
664 | p | |||
|
665 | 9 | |||
|
666 | I | |||
|
667 | 0 | |||
|
668 | I | |||
|
669 | 22 | |||
|
670 | I | |||
|
671 | 0 | |||
|
672 | I | |||
|
673 | 23 | |||
|
674 | I | |||
|
675 | 29 | |||
|
676 | I | |||
|
677 | 24 | |||
|
678 | I | |||
|
679 | 39 | |||
|
680 | I | |||
|
681 | 25 | |||
|
682 | I | |||
|
683 | 49 | |||
|
684 | x | |||
|
685 | 59 | |||
|
686 | /Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb | |||
|
687 | p | |||
|
688 | 1 | |||
|
689 | x | |||
|
690 | 4 | |||
|
691 | list | |||
|
692 | x | |||
|
693 | 21 | |||
|
694 | test_word_list_cached | |||
|
695 | M | |||
|
696 | 1 | |||
|
697 | n | |||
|
698 | n | |||
|
699 | x | |||
|
700 | 21 | |||
|
701 | test_word_list_cached | |||
|
702 | i | |||
|
703 | 75 | |||
|
704 | 45 | |||
|
705 | 0 | |||
|
706 | 1 | |||
|
707 | 13 | |||
|
708 | 71 | |||
|
709 | 2 | |||
|
710 | 47 | |||
|
711 | 9 | |||
|
712 | 24 | |||
|
713 | 47 | |||
|
714 | 49 | |||
|
715 | 3 | |||
|
716 | 0 | |||
|
717 | 13 | |||
|
718 | 7 | |||
|
719 | 4 | |||
|
720 | 2 | |||
|
721 | 47 | |||
|
722 | 49 | |||
|
723 | 5 | |||
|
724 | 2 | |||
|
725 | 15 | |||
|
726 | 8 | |||
|
727 | 30 | |||
|
728 | 7 | |||
|
729 | 4 | |||
|
730 | 2 | |||
|
731 | 49 | |||
|
732 | 2 | |||
|
733 | 2 | |||
|
734 | 7 | |||
|
735 | 6 | |||
|
736 | 64 | |||
|
737 | 35 | |||
|
738 | 1 | |||
|
739 | 7 | |||
|
740 | 7 | |||
|
741 | 49 | |||
|
742 | 8 | |||
|
743 | 2 | |||
|
744 | 19 | |||
|
745 | 0 | |||
|
746 | 15 | |||
|
747 | 5 | |||
|
748 | 7 | |||
|
749 | 7 | |||
|
750 | 20 | |||
|
751 | 0 | |||
|
752 | 7 | |||
|
753 | 6 | |||
|
754 | 64 | |||
|
755 | 49 | |||
|
756 | 9 | |||
|
757 | 1 | |||
|
758 | 47 | |||
|
759 | 49 | |||
|
760 | 10 | |||
|
761 | 2 | |||
|
762 | 15 | |||
|
763 | 5 | |||
|
764 | 7 | |||
|
765 | 4 | |||
|
766 | 20 | |||
|
767 | 0 | |||
|
768 | 7 | |||
|
769 | 11 | |||
|
770 | 64 | |||
|
771 | 49 | |||
|
772 | 9 | |||
|
773 | 1 | |||
|
774 | 47 | |||
|
775 | 49 | |||
|
776 | 10 | |||
|
777 | 2 | |||
|
778 | 11 | |||
|
779 | I | |||
|
780 | 5 | |||
|
781 | I | |||
|
782 | 1 | |||
|
783 | I | |||
|
784 | 0 | |||
|
785 | I | |||
|
786 | 0 | |||
|
787 | n | |||
|
788 | p | |||
|
789 | 12 | |||
|
790 | x | |||
|
791 | 8 | |||
|
792 | WordList | |||
|
793 | n | |||
|
794 | x | |||
|
795 | 3 | |||
|
796 | new | |||
|
797 | x | |||
|
798 | 8 | |||
|
799 | allocate | |||
|
800 | x | |||
|
801 | 5 | |||
|
802 | ident | |||
|
803 | x | |||
|
804 | 10 | |||
|
805 | initialize | |||
|
806 | s | |||
|
807 | 6 | |||
|
808 | foobar | |||
|
809 | x | |||
|
810 | 8 | |||
|
811 | reserved | |||
|
812 | x | |||
|
813 | 3 | |||
|
814 | add | |||
|
815 | x | |||
|
816 | 2 | |||
|
817 | [] | |||
|
818 | x | |||
|
819 | 12 | |||
|
820 | assert_equal | |||
|
821 | s | |||
|
822 | 6 | |||
|
823 | FooBar | |||
|
824 | p | |||
|
825 | 9 | |||
|
826 | I | |||
|
827 | 0 | |||
|
828 | I | |||
|
829 | 28 | |||
|
830 | I | |||
|
831 | 0 | |||
|
832 | I | |||
|
833 | 29 | |||
|
834 | I | |||
|
835 | 2b | |||
|
836 | I | |||
|
837 | 2a | |||
|
838 | I | |||
|
839 | 3b | |||
|
840 | I | |||
|
841 | 2b | |||
|
842 | I | |||
|
843 | 4b | |||
|
844 | x | |||
|
845 | 59 | |||
|
846 | /Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb | |||
|
847 | p | |||
|
848 | 1 | |||
|
849 | x | |||
|
850 | 4 | |||
|
851 | list | |||
|
852 | x | |||
|
853 | 28 | |||
|
854 | test_case_ignoring_word_list | |||
|
855 | M | |||
|
856 | 1 | |||
|
857 | n | |||
|
858 | n | |||
|
859 | x | |||
|
860 | 28 | |||
|
861 | test_case_ignoring_word_list | |||
|
862 | i | |||
|
863 | 178 | |||
|
864 | 45 | |||
|
865 | 0 | |||
|
866 | 1 | |||
|
867 | 13 | |||
|
868 | 71 | |||
|
869 | 2 | |||
|
870 | 47 | |||
|
871 | 9 | |||
|
872 | 23 | |||
|
873 | 47 | |||
|
874 | 49 | |||
|
875 | 3 | |||
|
876 | 0 | |||
|
877 | 13 | |||
|
878 | 7 | |||
|
879 | 4 | |||
|
880 | 47 | |||
|
881 | 49 | |||
|
882 | 5 | |||
|
883 | 1 | |||
|
884 | 15 | |||
|
885 | 8 | |||
|
886 | 28 | |||
|
887 | 7 | |||
|
888 | 4 | |||
|
889 | 49 | |||
|
890 | 2 | |||
|
891 | 1 | |||
|
892 | 7 | |||
|
893 | 6 | |||
|
894 | 64 | |||
|
895 | 35 | |||
|
896 | 1 | |||
|
897 | 7 | |||
|
898 | 7 | |||
|
899 | 49 | |||
|
900 | 8 | |||
|
901 | 2 | |||
|
902 | 19 | |||
|
903 | 0 | |||
|
904 | 15 | |||
|
905 | 5 | |||
|
906 | 7 | |||
|
907 | 4 | |||
|
908 | 20 | |||
|
909 | 0 | |||
|
910 | 7 | |||
|
911 | 9 | |||
|
912 | 64 | |||
|
913 | 49 | |||
|
914 | 10 | |||
|
915 | 1 | |||
|
916 | 47 | |||
|
917 | 49 | |||
|
918 | 11 | |||
|
919 | 2 | |||
|
920 | 15 | |||
|
921 | 5 | |||
|
922 | 7 | |||
|
923 | 7 | |||
|
924 | 20 | |||
|
925 | 0 | |||
|
926 | 7 | |||
|
927 | 6 | |||
|
928 | 64 | |||
|
929 | 49 | |||
|
930 | 10 | |||
|
931 | 1 | |||
|
932 | 47 | |||
|
933 | 49 | |||
|
934 | 11 | |||
|
935 | 2 | |||
|
936 | 15 | |||
|
937 | 5 | |||
|
938 | 7 | |||
|
939 | 7 | |||
|
940 | 20 | |||
|
941 | 0 | |||
|
942 | 7 | |||
|
943 | 12 | |||
|
944 | 64 | |||
|
945 | 49 | |||
|
946 | 10 | |||
|
947 | 1 | |||
|
948 | 47 | |||
|
949 | 49 | |||
|
950 | 11 | |||
|
951 | 2 | |||
|
952 | 15 | |||
|
953 | 45 | |||
|
954 | 0 | |||
|
955 | 13 | |||
|
956 | 13 | |||
|
957 | 71 | |||
|
958 | 2 | |||
|
959 | 47 | |||
|
960 | 9 | |||
|
961 | 112 | |||
|
962 | 47 | |||
|
963 | 49 | |||
|
964 | 3 | |||
|
965 | 0 | |||
|
966 | 13 | |||
|
967 | 7 | |||
|
968 | 4 | |||
|
969 | 47 | |||
|
970 | 49 | |||
|
971 | 5 | |||
|
972 | 1 | |||
|
973 | 15 | |||
|
974 | 8 | |||
|
975 | 117 | |||
|
976 | 7 | |||
|
977 | 4 | |||
|
978 | 49 | |||
|
979 | 2 | |||
|
980 | 1 | |||
|
981 | 7 | |||
|
982 | 12 | |||
|
983 | 64 | |||
|
984 | 35 | |||
|
985 | 1 | |||
|
986 | 7 | |||
|
987 | 7 | |||
|
988 | 49 | |||
|
989 | 8 | |||
|
990 | 2 | |||
|
991 | 19 | |||
|
992 | 0 | |||
|
993 | 15 | |||
|
994 | 5 | |||
|
995 | 7 | |||
|
996 | 4 | |||
|
997 | 20 | |||
|
998 | 0 | |||
|
999 | 7 | |||
|
1000 | 9 | |||
|
1001 | 64 | |||
|
1002 | 49 | |||
|
1003 | 10 | |||
|
1004 | 1 | |||
|
1005 | 47 | |||
|
1006 | 49 | |||
|
1007 | 11 | |||
|
1008 | 2 | |||
|
1009 | 15 | |||
|
1010 | 5 | |||
|
1011 | 7 | |||
|
1012 | 7 | |||
|
1013 | 20 | |||
|
1014 | 0 | |||
|
1015 | 7 | |||
|
1016 | 6 | |||
|
1017 | 64 | |||
|
1018 | 49 | |||
|
1019 | 10 | |||
|
1020 | 1 | |||
|
1021 | 47 | |||
|
1022 | 49 | |||
|
1023 | 11 | |||
|
1024 | 2 | |||
|
1025 | 15 | |||
|
1026 | 5 | |||
|
1027 | 7 | |||
|
1028 | 7 | |||
|
1029 | 20 | |||
|
1030 | 0 | |||
|
1031 | 7 | |||
|
1032 | 12 | |||
|
1033 | 64 | |||
|
1034 | 49 | |||
|
1035 | 10 | |||
|
1036 | 1 | |||
|
1037 | 47 | |||
|
1038 | 49 | |||
|
1039 | 11 | |||
|
1040 | 2 | |||
|
1041 | 11 | |||
|
1042 | I | |||
|
1043 | 5 | |||
|
1044 | I | |||
|
1045 | 1 | |||
|
1046 | I | |||
|
1047 | 0 | |||
|
1048 | I | |||
|
1049 | 0 | |||
|
1050 | n | |||
|
1051 | p | |||
|
1052 | 14 | |||
|
1053 | x | |||
|
1054 | 20 | |||
|
1055 | CaseIgnoringWordList | |||
|
1056 | n | |||
|
1057 | x | |||
|
1058 | 3 | |||
|
1059 | new | |||
|
1060 | x | |||
|
1061 | 8 | |||
|
1062 | allocate | |||
|
1063 | x | |||
|
1064 | 5 | |||
|
1065 | ident | |||
|
1066 | x | |||
|
1067 | 10 | |||
|
1068 | initialize | |||
|
1069 | s | |||
|
1070 | 6 | |||
|
1071 | foobar | |||
|
1072 | x | |||
|
1073 | 8 | |||
|
1074 | reserved | |||
|
1075 | x | |||
|
1076 | 3 | |||
|
1077 | add | |||
|
1078 | s | |||
|
1079 | 3 | |||
|
1080 | foo | |||
|
1081 | x | |||
|
1082 | 2 | |||
|
1083 | [] | |||
|
1084 | x | |||
|
1085 | 12 | |||
|
1086 | assert_equal | |||
|
1087 | s | |||
|
1088 | 6 | |||
|
1089 | FooBar | |||
|
1090 | n | |||
|
1091 | p | |||
|
1092 | 19 | |||
|
1093 | I | |||
|
1094 | 0 | |||
|
1095 | I | |||
|
1096 | 2e | |||
|
1097 | I | |||
|
1098 | 0 | |||
|
1099 | I | |||
|
1100 | 2f | |||
|
1101 | I | |||
|
1102 | 29 | |||
|
1103 | I | |||
|
1104 | 30 | |||
|
1105 | I | |||
|
1106 | 39 | |||
|
1107 | I | |||
|
1108 | 31 | |||
|
1109 | I | |||
|
1110 | 49 | |||
|
1111 | I | |||
|
1112 | 32 | |||
|
1113 | I | |||
|
1114 | 59 | |||
|
1115 | I | |||
|
1116 | 34 | |||
|
1117 | I | |||
|
1118 | 82 | |||
|
1119 | I | |||
|
1120 | 35 | |||
|
1121 | I | |||
|
1122 | 92 | |||
|
1123 | I | |||
|
1124 | 36 | |||
|
1125 | I | |||
|
1126 | a2 | |||
|
1127 | I | |||
|
1128 | 37 | |||
|
1129 | I | |||
|
1130 | b2 | |||
|
1131 | x | |||
|
1132 | 59 | |||
|
1133 | /Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb | |||
|
1134 | p | |||
|
1135 | 1 | |||
|
1136 | x | |||
|
1137 | 4 | |||
|
1138 | list | |||
|
1139 | x | |||
|
1140 | 35 | |||
|
1141 | test_case_ignoring_word_list_cached | |||
|
1142 | M | |||
|
1143 | 1 | |||
|
1144 | n | |||
|
1145 | n | |||
|
1146 | x | |||
|
1147 | 35 | |||
|
1148 | test_case_ignoring_word_list_cached | |||
|
1149 | i | |||
|
1150 | 182 | |||
|
1151 | 45 | |||
|
1152 | 0 | |||
|
1153 | 1 | |||
|
1154 | 13 | |||
|
1155 | 71 | |||
|
1156 | 2 | |||
|
1157 | 47 | |||
|
1158 | 9 | |||
|
1159 | 24 | |||
|
1160 | 47 | |||
|
1161 | 49 | |||
|
1162 | 3 | |||
|
1163 | 0 | |||
|
1164 | 13 | |||
|
1165 | 7 | |||
|
1166 | 4 | |||
|
1167 | 2 | |||
|
1168 | 47 | |||
|
1169 | 49 | |||
|
1170 | 5 | |||
|
1171 | 2 | |||
|
1172 | 15 | |||
|
1173 | 8 | |||
|
1174 | 30 | |||
|
1175 | 7 | |||
|
1176 | 4 | |||
|
1177 | 2 | |||
|
1178 | 49 | |||
|
1179 | 2 | |||
|
1180 | 2 | |||
|
1181 | 7 | |||
|
1182 | 6 | |||
|
1183 | 64 | |||
|
1184 | 35 | |||
|
1185 | 1 | |||
|
1186 | 7 | |||
|
1187 | 7 | |||
|
1188 | 49 | |||
|
1189 | 8 | |||
|
1190 | 2 | |||
|
1191 | 19 | |||
|
1192 | 0 | |||
|
1193 | 15 | |||
|
1194 | 5 | |||
|
1195 | 7 | |||
|
1196 | 4 | |||
|
1197 | 20 | |||
|
1198 | 0 | |||
|
1199 | 7 | |||
|
1200 | 9 | |||
|
1201 | 64 | |||
|
1202 | 49 | |||
|
1203 | 10 | |||
|
1204 | 1 | |||
|
1205 | 47 | |||
|
1206 | 49 | |||
|
1207 | 11 | |||
|
1208 | 2 | |||
|
1209 | 15 | |||
|
1210 | 5 | |||
|
1211 | 7 | |||
|
1212 | 7 | |||
|
1213 | 20 | |||
|
1214 | 0 | |||
|
1215 | 7 | |||
|
1216 | 6 | |||
|
1217 | 64 | |||
|
1218 | 49 | |||
|
1219 | 10 | |||
|
1220 | 1 | |||
|
1221 | 47 | |||
|
1222 | 49 | |||
|
1223 | 11 | |||
|
1224 | 2 | |||
|
1225 | 15 | |||
|
1226 | 5 | |||
|
1227 | 7 | |||
|
1228 | 7 | |||
|
1229 | 20 | |||
|
1230 | 0 | |||
|
1231 | 7 | |||
|
1232 | 12 | |||
|
1233 | 64 | |||
|
1234 | 49 | |||
|
1235 | 10 | |||
|
1236 | 1 | |||
|
1237 | 47 | |||
|
1238 | 49 | |||
|
1239 | 11 | |||
|
1240 | 2 | |||
|
1241 | 15 | |||
|
1242 | 45 | |||
|
1243 | 0 | |||
|
1244 | 13 | |||
|
1245 | 13 | |||
|
1246 | 71 | |||
|
1247 | 2 | |||
|
1248 | 47 | |||
|
1249 | 9 | |||
|
1250 | 115 | |||
|
1251 | 47 | |||
|
1252 | 49 | |||
|
1253 | 3 | |||
|
1254 | 0 | |||
|
1255 | 13 | |||
|
1256 | 7 | |||
|
1257 | 4 | |||
|
1258 | 2 | |||
|
1259 | 47 | |||
|
1260 | 49 | |||
|
1261 | 5 | |||
|
1262 | 2 | |||
|
1263 | 15 | |||
|
1264 | 8 | |||
|
1265 | 121 | |||
|
1266 | 7 | |||
|
1267 | 4 | |||
|
1268 | 2 | |||
|
1269 | 49 | |||
|
1270 | 2 | |||
|
1271 | 2 | |||
|
1272 | 7 | |||
|
1273 | 12 | |||
|
1274 | 64 | |||
|
1275 | 35 | |||
|
1276 | 1 | |||
|
1277 | 7 | |||
|
1278 | 7 | |||
|
1279 | 49 | |||
|
1280 | 8 | |||
|
1281 | 2 | |||
|
1282 | 19 | |||
|
1283 | 0 | |||
|
1284 | 15 | |||
|
1285 | 5 | |||
|
1286 | 7 | |||
|
1287 | 4 | |||
|
1288 | 20 | |||
|
1289 | 0 | |||
|
1290 | 7 | |||
|
1291 | 9 | |||
|
1292 | 64 | |||
|
1293 | 49 | |||
|
1294 | 10 | |||
|
1295 | 1 | |||
|
1296 | 47 | |||
|
1297 | 49 | |||
|
1298 | 11 | |||
|
1299 | 2 | |||
|
1300 | 15 | |||
|
1301 | 5 | |||
|
1302 | 7 | |||
|
1303 | 7 | |||
|
1304 | 20 | |||
|
1305 | 0 | |||
|
1306 | 7 | |||
|
1307 | 6 | |||
|
1308 | 64 | |||
|
1309 | 49 | |||
|
1310 | 10 | |||
|
1311 | 1 | |||
|
1312 | 47 | |||
|
1313 | 49 | |||
|
1314 | 11 | |||
|
1315 | 2 | |||
|
1316 | 15 | |||
|
1317 | 5 | |||
|
1318 | 7 | |||
|
1319 | 7 | |||
|
1320 | 20 | |||
|
1321 | 0 | |||
|
1322 | 7 | |||
|
1323 | 12 | |||
|
1324 | 64 | |||
|
1325 | 49 | |||
|
1326 | 10 | |||
|
1327 | 1 | |||
|
1328 | 47 | |||
|
1329 | 49 | |||
|
1330 | 11 | |||
|
1331 | 2 | |||
|
1332 | 11 | |||
|
1333 | I | |||
|
1334 | 5 | |||
|
1335 | I | |||
|
1336 | 1 | |||
|
1337 | I | |||
|
1338 | 0 | |||
|
1339 | I | |||
|
1340 | 0 | |||
|
1341 | n | |||
|
1342 | p | |||
|
1343 | 14 | |||
|
1344 | x | |||
|
1345 | 20 | |||
|
1346 | CaseIgnoringWordList | |||
|
1347 | n | |||
|
1348 | x | |||
|
1349 | 3 | |||
|
1350 | new | |||
|
1351 | x | |||
|
1352 | 8 | |||
|
1353 | allocate | |||
|
1354 | x | |||
|
1355 | 5 | |||
|
1356 | ident | |||
|
1357 | x | |||
|
1358 | 10 | |||
|
1359 | initialize | |||
|
1360 | s | |||
|
1361 | 6 | |||
|
1362 | foobar | |||
|
1363 | x | |||
|
1364 | 8 | |||
|
1365 | reserved | |||
|
1366 | x | |||
|
1367 | 3 | |||
|
1368 | add | |||
|
1369 | s | |||
|
1370 | 3 | |||
|
1371 | foo | |||
|
1372 | x | |||
|
1373 | 2 | |||
|
1374 | [] | |||
|
1375 | x | |||
|
1376 | 12 | |||
|
1377 | assert_equal | |||
|
1378 | s | |||
|
1379 | 6 | |||
|
1380 | FooBar | |||
|
1381 | n | |||
|
1382 | p | |||
|
1383 | 19 | |||
|
1384 | I | |||
|
1385 | 0 | |||
|
1386 | I | |||
|
1387 | 3a | |||
|
1388 | I | |||
|
1389 | 0 | |||
|
1390 | I | |||
|
1391 | 3b | |||
|
1392 | I | |||
|
1393 | 2b | |||
|
1394 | I | |||
|
1395 | 3c | |||
|
1396 | I | |||
|
1397 | 3b | |||
|
1398 | I | |||
|
1399 | 3d | |||
|
1400 | I | |||
|
1401 | 4b | |||
|
1402 | I | |||
|
1403 | 3e | |||
|
1404 | I | |||
|
1405 | 5b | |||
|
1406 | I | |||
|
1407 | 40 | |||
|
1408 | I | |||
|
1409 | 86 | |||
|
1410 | I | |||
|
1411 | 41 | |||
|
1412 | I | |||
|
1413 | 96 | |||
|
1414 | I | |||
|
1415 | 42 | |||
|
1416 | I | |||
|
1417 | a6 | |||
|
1418 | I | |||
|
1419 | 43 | |||
|
1420 | I | |||
|
1421 | b6 | |||
|
1422 | x | |||
|
1423 | 59 | |||
|
1424 | /Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb | |||
|
1425 | p | |||
|
1426 | 1 | |||
|
1427 | x | |||
|
1428 | 4 | |||
|
1429 | list | |||
|
1430 | x | |||
|
1431 | 8 | |||
|
1432 | test_dup | |||
|
1433 | M | |||
|
1434 | 1 | |||
|
1435 | n | |||
|
1436 | n | |||
|
1437 | x | |||
|
1438 | 8 | |||
|
1439 | test_dup | |||
|
1440 | i | |||
|
1441 | 110 | |||
|
1442 | 45 | |||
|
1443 | 0 | |||
|
1444 | 1 | |||
|
1445 | 13 | |||
|
1446 | 71 | |||
|
1447 | 2 | |||
|
1448 | 47 | |||
|
1449 | 9 | |||
|
1450 | 23 | |||
|
1451 | 47 | |||
|
1452 | 49 | |||
|
1453 | 3 | |||
|
1454 | 0 | |||
|
1455 | 13 | |||
|
1456 | 7 | |||
|
1457 | 4 | |||
|
1458 | 47 | |||
|
1459 | 49 | |||
|
1460 | 5 | |||
|
1461 | 1 | |||
|
1462 | 15 | |||
|
1463 | 8 | |||
|
1464 | 28 | |||
|
1465 | 7 | |||
|
1466 | 4 | |||
|
1467 | 49 | |||
|
1468 | 2 | |||
|
1469 | 1 | |||
|
1470 | 7 | |||
|
1471 | 6 | |||
|
1472 | 64 | |||
|
1473 | 35 | |||
|
1474 | 1 | |||
|
1475 | 7 | |||
|
1476 | 7 | |||
|
1477 | 49 | |||
|
1478 | 8 | |||
|
1479 | 2 | |||
|
1480 | 19 | |||
|
1481 | 0 | |||
|
1482 | 15 | |||
|
1483 | 5 | |||
|
1484 | 7 | |||
|
1485 | 7 | |||
|
1486 | 20 | |||
|
1487 | 0 | |||
|
1488 | 7 | |||
|
1489 | 6 | |||
|
1490 | 64 | |||
|
1491 | 49 | |||
|
1492 | 9 | |||
|
1493 | 1 | |||
|
1494 | 47 | |||
|
1495 | 49 | |||
|
1496 | 10 | |||
|
1497 | 2 | |||
|
1498 | 15 | |||
|
1499 | 20 | |||
|
1500 | 0 | |||
|
1501 | 49 | |||
|
1502 | 11 | |||
|
1503 | 0 | |||
|
1504 | 19 | |||
|
1505 | 1 | |||
|
1506 | 15 | |||
|
1507 | 20 | |||
|
1508 | 1 | |||
|
1509 | 7 | |||
|
1510 | 6 | |||
|
1511 | 64 | |||
|
1512 | 35 | |||
|
1513 | 1 | |||
|
1514 | 7 | |||
|
1515 | 12 | |||
|
1516 | 49 | |||
|
1517 | 8 | |||
|
1518 | 2 | |||
|
1519 | 15 | |||
|
1520 | 5 | |||
|
1521 | 7 | |||
|
1522 | 12 | |||
|
1523 | 20 | |||
|
1524 | 1 | |||
|
1525 | 7 | |||
|
1526 | 6 | |||
|
1527 | 64 | |||
|
1528 | 49 | |||
|
1529 | 9 | |||
|
1530 | 1 | |||
|
1531 | 47 | |||
|
1532 | 49 | |||
|
1533 | 10 | |||
|
1534 | 2 | |||
|
1535 | 15 | |||
|
1536 | 5 | |||
|
1537 | 7 | |||
|
1538 | 7 | |||
|
1539 | 20 | |||
|
1540 | 0 | |||
|
1541 | 7 | |||
|
1542 | 6 | |||
|
1543 | 64 | |||
|
1544 | 49 | |||
|
1545 | 9 | |||
|
1546 | 1 | |||
|
1547 | 47 | |||
|
1548 | 49 | |||
|
1549 | 10 | |||
|
1550 | 2 | |||
|
1551 | 11 | |||
|
1552 | I | |||
|
1553 | 6 | |||
|
1554 | I | |||
|
1555 | 2 | |||
|
1556 | I | |||
|
1557 | 0 | |||
|
1558 | I | |||
|
1559 | 0 | |||
|
1560 | n | |||
|
1561 | p | |||
|
1562 | 13 | |||
|
1563 | x | |||
|
1564 | 8 | |||
|
1565 | WordList | |||
|
1566 | n | |||
|
1567 | x | |||
|
1568 | 3 | |||
|
1569 | new | |||
|
1570 | x | |||
|
1571 | 8 | |||
|
1572 | allocate | |||
|
1573 | x | |||
|
1574 | 5 | |||
|
1575 | ident | |||
|
1576 | x | |||
|
1577 | 10 | |||
|
1578 | initialize | |||
|
1579 | s | |||
|
1580 | 6 | |||
|
1581 | foobar | |||
|
1582 | x | |||
|
1583 | 8 | |||
|
1584 | reserved | |||
|
1585 | x | |||
|
1586 | 3 | |||
|
1587 | add | |||
|
1588 | x | |||
|
1589 | 2 | |||
|
1590 | [] | |||
|
1591 | x | |||
|
1592 | 12 | |||
|
1593 | assert_equal | |||
|
1594 | x | |||
|
1595 | 3 | |||
|
1596 | dup | |||
|
1597 | x | |||
|
1598 | 7 | |||
|
1599 | keyword | |||
|
1600 | p | |||
|
1601 | 15 | |||
|
1602 | I | |||
|
1603 | 0 | |||
|
1604 | I | |||
|
1605 | 46 | |||
|
1606 | I | |||
|
1607 | 0 | |||
|
1608 | I | |||
|
1609 | 47 | |||
|
1610 | I | |||
|
1611 | 29 | |||
|
1612 | I | |||
|
1613 | 48 | |||
|
1614 | I | |||
|
1615 | 39 | |||
|
1616 | I | |||
|
1617 | 49 | |||
|
1618 | I | |||
|
1619 | 41 | |||
|
1620 | I | |||
|
1621 | 4a | |||
|
1622 | I | |||
|
1623 | 4e | |||
|
1624 | I | |||
|
1625 | 4b | |||
|
1626 | I | |||
|
1627 | 5e | |||
|
1628 | I | |||
|
1629 | 4c | |||
|
1630 | I | |||
|
1631 | 6e | |||
|
1632 | x | |||
|
1633 | 59 | |||
|
1634 | /Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb | |||
|
1635 | p | |||
|
1636 | 2 | |||
|
1637 | x | |||
|
1638 | 4 | |||
|
1639 | list | |||
|
1640 | x | |||
|
1641 | 5 | |||
|
1642 | list2 | |||
|
1643 | p | |||
|
1644 | 45 | |||
|
1645 | I | |||
|
1646 | 2 | |||
|
1647 | I | |||
|
1648 | 6 | |||
|
1649 | I | |||
|
1650 | b | |||
|
1651 | I | |||
|
1652 | 9 | |||
|
1653 | I | |||
|
1654 | e | |||
|
1655 | I | |||
|
1656 | a | |||
|
1657 | I | |||
|
1658 | 23 | |||
|
1659 | I | |||
|
1660 | b | |||
|
1661 | I | |||
|
1662 | 2c | |||
|
1663 | I | |||
|
1664 | e | |||
|
1665 | I | |||
|
1666 | 2f | |||
|
1667 | I | |||
|
1668 | f | |||
|
1669 | I | |||
|
1670 | 3e | |||
|
1671 | I | |||
|
1672 | 10 | |||
|
1673 | I | |||
|
1674 | 47 | |||
|
1675 | I | |||
|
1676 | 13 | |||
|
1677 | I | |||
|
1678 | 4a | |||
|
1679 | I | |||
|
1680 | 14 | |||
|
1681 | I | |||
|
1682 | 59 | |||
|
1683 | I | |||
|
1684 | 18 | |||
|
1685 | I | |||
|
1686 | 78 | |||
|
1687 | I | |||
|
1688 | 19 | |||
|
1689 | I | |||
|
1690 | 7d | |||
|
1691 | I | |||
|
1692 | 18 | |||
|
1693 | I | |||
|
1694 | 80 | |||
|
1695 | I | |||
|
1696 | 1a | |||
|
1697 | I | |||
|
1698 | 85 | |||
|
1699 | I | |||
|
1700 | 18 | |||
|
1701 | I | |||
|
1702 | 88 | |||
|
1703 | I | |||
|
1704 | 1b | |||
|
1705 | I | |||
|
1706 | 8d | |||
|
1707 | I | |||
|
1708 | 18 | |||
|
1709 | I | |||
|
1710 | 94 | |||
|
1711 | I | |||
|
1712 | 1d | |||
|
1713 | I | |||
|
1714 | a2 | |||
|
1715 | I | |||
|
1716 | 22 | |||
|
1717 | I | |||
|
1718 | b0 | |||
|
1719 | I | |||
|
1720 | 28 | |||
|
1721 | I | |||
|
1722 | be | |||
|
1723 | I | |||
|
1724 | 2e | |||
|
1725 | I | |||
|
1726 | cc | |||
|
1727 | I | |||
|
1728 | 3a | |||
|
1729 | I | |||
|
1730 | da | |||
|
1731 | I | |||
|
1732 | 46 | |||
|
1733 | I | |||
|
1734 | e8 | |||
|
1735 | x | |||
|
1736 | 59 | |||
|
1737 | /Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb | |||
|
1738 | p | |||
|
1739 | 0 | |||
|
1740 | x | |||
|
1741 | 13 | |||
|
1742 | attach_method | |||
|
1743 | p | |||
|
1744 | 7 | |||
|
1745 | I | |||
|
1746 | 0 | |||
|
1747 | I | |||
|
1748 | 1 | |||
|
1749 | I | |||
|
1750 | 9 | |||
|
1751 | I | |||
|
1752 | 2 | |||
|
1753 | I | |||
|
1754 | 12 | |||
|
1755 | I | |||
|
1756 | 4 | |||
|
1757 | I | |||
|
1758 | 35 | |||
|
1759 | x | |||
|
1760 | 59 | |||
|
1761 | /Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb | |||
|
1762 | p | |||
|
1763 | 0 |
@@ -1,60 +1,61 | |||||
1 | # Be sure to restart your web server when you modify this file. |
|
1 | # Be sure to restart your web server when you modify this file. | |
2 |
|
2 | |||
3 | # Uncomment below to force Rails into production mode when |
|
3 | # Uncomment below to force Rails into production mode when | |
4 | # you don't control web/app server and can't set it the proper way |
|
4 | # you don't control web/app server and can't set it the proper way | |
5 | # ENV['RAILS_ENV'] ||= 'production' |
|
5 | # ENV['RAILS_ENV'] ||= 'production' | |
6 |
|
6 | |||
7 | # Specifies gem version of Rails to use when vendor/rails is not present |
|
7 | # Specifies gem version of Rails to use when vendor/rails is not present | |
8 | RAILS_GEM_VERSION = '2.3.5' unless defined? RAILS_GEM_VERSION |
|
8 | RAILS_GEM_VERSION = '2.3.5' unless defined? RAILS_GEM_VERSION | |
9 |
|
9 | |||
10 | # Bootstrap the Rails environment, frameworks, and default configuration |
|
10 | # Bootstrap the Rails environment, frameworks, and default configuration | |
11 | require File.join(File.dirname(__FILE__), 'boot') |
|
11 | require File.join(File.dirname(__FILE__), 'boot') | |
12 |
|
12 | |||
13 | # Load Engine plugin if available |
|
13 | # Load Engine plugin if available | |
14 | begin |
|
14 | begin | |
15 | require File.join(File.dirname(__FILE__), '../vendor/plugins/engines/boot') |
|
15 | require File.join(File.dirname(__FILE__), '../vendor/plugins/engines/boot') | |
16 | rescue LoadError |
|
16 | rescue LoadError | |
17 | # Not available |
|
17 | # Not available | |
18 | end |
|
18 | end | |
19 |
|
19 | |||
20 | Rails::Initializer.run do |config| |
|
20 | Rails::Initializer.run do |config| | |
21 | # Settings in config/environments/* take precedence those specified here |
|
21 | # Settings in config/environments/* take precedence those specified here | |
22 |
|
22 | |||
23 | # Skip frameworks you're not going to use |
|
23 | # Skip frameworks you're not going to use | |
24 | # config.frameworks -= [ :action_web_service, :action_mailer ] |
|
24 | # config.frameworks -= [ :action_web_service, :action_mailer ] | |
25 |
|
25 | |||
26 | # Add additional load paths for sweepers |
|
26 | # Add additional load paths for sweepers | |
27 | config.load_paths += %W( #{RAILS_ROOT}/app/sweepers ) |
|
27 | config.load_paths += %W( #{RAILS_ROOT}/app/sweepers ) | |
28 |
|
28 | |||
29 | # Force all environments to use the same logger level |
|
29 | # Force all environments to use the same logger level | |
30 | # (by default production uses :info, the others :debug) |
|
30 | # (by default production uses :info, the others :debug) | |
31 | # config.log_level = :debug |
|
31 | # config.log_level = :debug | |
32 |
|
32 | |||
33 | # Enable page/fragment caching by setting a file-based store |
|
33 | # Enable page/fragment caching by setting a file-based store | |
34 | # (remember to create the caching directory and make it readable to the application) |
|
34 | # (remember to create the caching directory and make it readable to the application) | |
35 | # config.action_controller.cache_store = :file_store, "#{RAILS_ROOT}/tmp/cache" |
|
35 | # config.action_controller.cache_store = :file_store, "#{RAILS_ROOT}/tmp/cache" | |
36 |
|
36 | |||
37 | # Activate observers that should always be running |
|
37 | # Activate observers that should always be running | |
38 | # config.active_record.observers = :cacher, :garbage_collector |
|
38 | # config.active_record.observers = :cacher, :garbage_collector | |
39 | config.active_record.observers = :message_observer, :issue_observer, :journal_observer, :news_observer, :document_observer, :wiki_content_observer |
|
39 | config.active_record.observers = :message_observer, :issue_observer, :journal_observer, :news_observer, :document_observer, :wiki_content_observer | |
40 |
|
40 | |||
41 | # Make Active Record use UTC-base instead of local time |
|
41 | # Make Active Record use UTC-base instead of local time | |
42 | # config.active_record.default_timezone = :utc |
|
42 | # config.active_record.default_timezone = :utc | |
43 |
|
43 | |||
44 | # Use Active Record's schema dumper instead of SQL when creating the test database |
|
44 | # Use Active Record's schema dumper instead of SQL when creating the test database | |
45 | # (enables use of different database adapters for development and test environments) |
|
45 | # (enables use of different database adapters for development and test environments) | |
46 | # config.active_record.schema_format = :ruby |
|
46 | # config.active_record.schema_format = :ruby | |
47 |
|
47 | |||
48 | # Deliveries are disabled by default. Do NOT modify this section. |
|
48 | # Deliveries are disabled by default. Do NOT modify this section. | |
49 | # Define your email configuration in email.yml instead. |
|
49 | # Define your email configuration in email.yml instead. | |
50 | # It will automatically turn deliveries on |
|
50 | # It will automatically turn deliveries on | |
51 | config.action_mailer.perform_deliveries = false |
|
51 | config.action_mailer.perform_deliveries = false | |
52 |
|
52 | |||
53 | config.gem 'rubytree', :lib => 'tree' |
|
53 | config.gem 'rubytree', :lib => 'tree' | |
|
54 | config.gem 'coderay', :version => '~>0.9.7' | |||
54 |
|
55 | |||
55 | # Load any local configuration that is kept out of source control |
|
56 | # Load any local configuration that is kept out of source control | |
56 | # (e.g. gems, patches). |
|
57 | # (e.g. gems, patches). | |
57 | if File.exists?(File.join(File.dirname(__FILE__), 'additional_environment.rb')) |
|
58 | if File.exists?(File.join(File.dirname(__FILE__), 'additional_environment.rb')) | |
58 | instance_eval File.read(File.join(File.dirname(__FILE__), 'additional_environment.rb')) |
|
59 | instance_eval File.read(File.join(File.dirname(__FILE__), 'additional_environment.rb')) | |
59 | end |
|
60 | end | |
60 | end |
|
61 | end |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/LICENSE to vendor/gems/coderay-0.9.7/LICENSE |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/LICENSE to vendor/gems/coderay-0.9.7/LICENSE |
@@ -1,133 +1,134 | |||||
1 | = CodeRay |
|
1 | = CodeRay | |
2 |
|
2 | |||
3 | [- Tired of blue'n'gray? Try the original version of this documentation on |
|
3 | [- Tired of blue'n'gray? Try the original version of this documentation on | |
4 | coderay.rubychan.de[http://coderay.rubychan.de/doc/] (use Ctrl+Click to open it in its own frame.) -] |
|
4 | coderay.rubychan.de[http://coderay.rubychan.de/doc/] (use Ctrl+Click to open it in its own frame.) -] | |
5 |
|
5 | |||
6 | == About |
|
6 | == About | |
7 | CodeRay is a Ruby library for syntax highlighting. |
|
7 | CodeRay is a Ruby library for syntax highlighting. | |
8 |
|
8 | |||
9 | Syntax highlighting means: You put your code in, and you get it back colored; |
|
9 | Syntax highlighting means: You put your code in, and you get it back colored; | |
10 | Keywords, strings, floats, comments - all in different colors. |
|
10 | Keywords, strings, floats, comments - all in different colors. | |
11 | And with line numbers. |
|
11 | And with line numbers. | |
12 |
|
12 | |||
13 | *Syntax* *Highlighting*... |
|
13 | *Syntax* *Highlighting*... | |
14 | * makes code easier to read and maintain |
|
14 | * makes code easier to read and maintain | |
15 | * lets you detect syntax errors faster |
|
15 | * lets you detect syntax errors faster | |
16 | * helps you to understand the syntax of a language |
|
16 | * helps you to understand the syntax of a language | |
17 | * looks nice |
|
17 | * looks nice | |
18 | * is what everybody should have on their website |
|
18 | * is what everybody should have on their website | |
19 | * solves all your problems and makes the girls run after you |
|
19 | * solves all your problems and makes the girls run after you | |
20 |
|
20 | |||
21 |
Version: 0.9. |
|
21 | Version: 0.9.7 | |
22 | Author:: murphy (Kornelius Kalnbach) |
|
22 | Author:: murphy (Kornelius Kalnbach) | |
23 | Contact:: murphy rubychan de |
|
23 | Contact:: murphy rubychan de | |
24 | Website:: coderay.rubychan.de[http://coderay.rubychan.de] |
|
24 | Website:: coderay.rubychan.de[http://coderay.rubychan.de] | |
25 | License:: GNU LGPL; see LICENSE file in the main directory. |
|
25 | License:: GNU LGPL; see LICENSE file in the main directory. | |
26 |
|
26 | |||
27 | == Installation |
|
27 | == Installation | |
28 |
|
28 | |||
29 | You need RubyGems[http://rubyforge.org/frs/?group_id=126]. |
|
29 | You need RubyGems[http://rubyforge.org/frs/?group_id=126]. | |
30 |
|
30 | |||
31 | % gem install coderay |
|
31 | % gem install coderay | |
32 |
|
32 | |||
33 |
|
33 | |||
34 | === Dependencies |
|
34 | === Dependencies | |
35 |
|
35 | |||
36 | CodeRay needs Ruby 1.8.6 or later. It also runs with Ruby 1.9.1+ and JRuby 1.1+. |
|
36 | CodeRay needs Ruby 1.8.6 or later. It also runs with Ruby 1.9.1+ and JRuby 1.1+. | |
37 |
|
37 | |||
38 |
|
38 | |||
39 | == Example Usage |
|
39 | == Example Usage | |
40 | (Forgive me, but this is not highlighted.) |
|
40 | (Forgive me, but this is not highlighted.) | |
41 |
|
41 | |||
42 | require 'coderay' |
|
42 | require 'coderay' | |
43 |
|
43 | |||
44 | tokens = CodeRay.scan "puts 'Hello, world!'", :ruby |
|
44 | tokens = CodeRay.scan "puts 'Hello, world!'", :ruby | |
45 | page = tokens.html :line_numbers => :inline, :wrap => :page |
|
45 | page = tokens.html :line_numbers => :inline, :wrap => :page | |
46 | puts page |
|
46 | puts page | |
47 |
|
47 | |||
48 |
|
48 | |||
49 | == Documentation |
|
49 | == Documentation | |
50 |
|
50 | |||
51 | See CodeRay. |
|
51 | See CodeRay. | |
52 |
|
52 | |||
53 | Please report errors in this documentation to <murphy rubychan de>. |
|
53 | Please report errors in this documentation to <murphy rubychan de>. | |
54 |
|
54 | |||
55 |
|
55 | |||
56 | == Credits |
|
56 | == Credits | |
57 |
|
57 | |||
58 | === Special Thanks to |
|
58 | === Special Thanks to | |
59 |
|
59 | |||
60 | * licenser (Heinz N. Gies) for ending my QBasic career, inventing the Coder |
|
60 | * licenser (Heinz N. Gies) for ending my QBasic career, inventing the Coder | |
61 | project and the input/output plugin system. |
|
61 | project and the input/output plugin system. | |
62 | CodeRay would not exist without him. |
|
62 | CodeRay would not exist without him. | |
63 | * bovi (Daniel Bovensiepen) for helping me out on various occasions. |
|
63 | * bovi (Daniel Bovensiepen) for helping me out on various occasions. | |
64 |
|
64 | |||
65 | === Thanks to |
|
65 | === Thanks to | |
66 |
|
66 | |||
67 | * Caleb Clausen for writing RubyLexer (see |
|
67 | * Caleb Clausen for writing RubyLexer (see | |
68 | http://rubyforge.org/projects/rubylexer) and lots of very interesting mail |
|
68 | http://rubyforge.org/projects/rubylexer) and lots of very interesting mail | |
69 | traffic |
|
69 | traffic | |
70 | * birkenfeld (Georg Brandl) and mitsuhiku (Arnim Ronacher) for PyKleur, now pygments. |
|
70 | * birkenfeld (Georg Brandl) and mitsuhiku (Arnim Ronacher) for PyKleur, now pygments. | |
71 | You guys rock! |
|
71 | You guys rock! | |
72 | * Jamis Buck for writing Syntax (see http://rubyforge.org/projects/syntax) |
|
72 | * Jamis Buck for writing Syntax (see http://rubyforge.org/projects/syntax) | |
73 | I got some useful ideas from it. |
|
73 | I got some useful ideas from it. | |
74 | * Doug Kearns and everyone else who worked on ruby.vim - it not only helped me |
|
74 | * Doug Kearns and everyone else who worked on ruby.vim - it not only helped me | |
75 | coding CodeRay, but also gave me a wonderful target to reach for the Ruby |
|
75 | coding CodeRay, but also gave me a wonderful target to reach for the Ruby | |
76 | scanner. |
|
76 | scanner. | |
77 | * everyone who uses CodeBB on http://www.rubyforen.de and http://www.python-forum.de |
|
77 | * everyone who uses CodeBB on http://www.rubyforen.de and http://www.python-forum.de | |
78 | * iGEL, magichisoka, manveru, WoNáDo and everyone I forgot from rubyforen.de |
|
78 | * iGEL, magichisoka, manveru, WoNáDo and everyone I forgot from rubyforen.de | |
79 | * Dethix from ruby-mine.de |
|
79 | * Dethix from ruby-mine.de | |
80 | * zickzackw |
|
80 | * zickzackw | |
81 | * Dookie (who is no longer with us...) and Leonidas from http://www.python-forum.de |
|
81 | * Dookie (who is no longer with us...) and Leonidas from http://www.python-forum.de | |
82 | * Andreas Schwarz for finding out that CaseIgnoringWordList was not case |
|
82 | * Andreas Schwarz for finding out that CaseIgnoringWordList was not case | |
83 | ignoring! Such things really make you write tests. |
|
83 | ignoring! Such things really make you write tests. | |
84 | * closure for the first version of the Scheme scanner. |
|
84 | * closure for the first version of the Scheme scanner. | |
85 | * Stefan Walk for the first version of the JavaScript and PHP scanners. |
|
85 | * Stefan Walk for the first version of the JavaScript and PHP scanners. | |
86 | * Josh Goebel for another version of the JavaScript scanner, a SQL and a Diff scanner. |
|
86 | * Josh Goebel for another version of the JavaScript scanner, a SQL and a Diff scanner. | |
87 | * Jonathan Younger for pointing out the licence confusion caused by wrong LICENSE file. |
|
87 | * Jonathan Younger for pointing out the licence confusion caused by wrong LICENSE file. | |
88 | * Jeremy Hinegardner for finding the shebang-on-empty-file bug in FileType. |
|
88 | * Jeremy Hinegardner for finding the shebang-on-empty-file bug in FileType. | |
89 | * Charles Oliver Nutter and Yehuda Katz for helping me benchmark CodeRay on JRuby. |
|
89 | * Charles Oliver Nutter and Yehuda Katz for helping me benchmark CodeRay on JRuby. | |
90 | * Andreas Neuhaus for pointing out a markup bug in coderay/for_redcloth. |
|
90 | * Andreas Neuhaus for pointing out a markup bug in coderay/for_redcloth. | |
91 | * 0xf30fc7 for the FileType patch concerning Delphi file extensions. |
|
91 | * 0xf30fc7 for the FileType patch concerning Delphi file extensions. | |
92 | * The folks at redmine.org - thank you for using and fixing CodeRay! |
|
92 | * The folks at redmine.org - thank you for using and fixing CodeRay! | |
93 | * Keith Pitt for his SQL scanners |
|
93 | * Keith Pitt for his SQL scanners | |
94 | * Rob Aldred for the terminal encoder |
|
94 | * Rob Aldred for the terminal encoder | |
95 | * Trans for pointing out $DEBUG dependencies |
|
95 | * Trans for pointing out $DEBUG dependencies | |
96 | * Flameeyes for finding that Term::ANSIColor was obsolete |
|
96 | * Flameeyes for finding that Term::ANSIColor was obsolete | |
|
97 | * Etienne Massip for reporting a serious bug in JavaScript scanner | |||
97 | * matz and all Ruby gods and gurus |
|
98 | * matz and all Ruby gods and gurus | |
98 | * The inventors of: the computer, the internet, the true color display, HTML & |
|
99 | * The inventors of: the computer, the internet, the true color display, HTML & | |
99 | CSS, VIM, Ruby, pizza, microwaves, guitars, scouting, programming, anime, |
|
100 | CSS, VIM, Ruby, pizza, microwaves, guitars, scouting, programming, anime, | |
100 | manga, coke and green ice tea. |
|
101 | manga, coke and green ice tea. | |
101 |
|
102 | |||
102 | Where would we be without all those people? |
|
103 | Where would we be without all those people? | |
103 |
|
104 | |||
104 | === Created using |
|
105 | === Created using | |
105 |
|
106 | |||
106 | * Ruby[http://ruby-lang.org/] |
|
107 | * Ruby[http://ruby-lang.org/] | |
107 | * Chihiro (my Sony VAIO laptop); Henrietta (my old MacBook); |
|
108 | * Chihiro (my Sony VAIO laptop); Henrietta (my old MacBook); | |
108 | Triella, born Rico (my new MacBook); as well as |
|
109 | Triella, born Rico (my new MacBook); as well as | |
109 | Seras and Hikari (my PCs) |
|
110 | Seras and Hikari (my PCs) | |
110 | * RDE[http://homepage2.nifty.com/sakazuki/rde_e.html], |
|
111 | * RDE[http://homepage2.nifty.com/sakazuki/rde_e.html], | |
111 | VIM[http://vim.org] and TextMate[http://macromates.com] |
|
112 | VIM[http://vim.org] and TextMate[http://macromates.com] | |
112 | * Subversion[http://subversion.tigris.org/] |
|
113 | * Subversion[http://subversion.tigris.org/] | |
113 | * Redmine[http://redmine.org/] |
|
114 | * Redmine[http://redmine.org/] | |
114 | * Firefox[http://www.mozilla.org/products/firefox/], |
|
115 | * Firefox[http://www.mozilla.org/products/firefox/], | |
115 | Firebug[http://getfirebug.com/], Safari[http://www.apple.com/safari/], and |
|
116 | Firebug[http://getfirebug.com/], Safari[http://www.apple.com/safari/], and | |
116 | Thunderbird[http://www.mozilla.org/products/thunderbird/] |
|
117 | Thunderbird[http://www.mozilla.org/products/thunderbird/] | |
117 | * RubyGems[http://docs.rubygems.org/] and Rake[http://rake.rubyforge.org/] |
|
118 | * RubyGems[http://docs.rubygems.org/] and Rake[http://rake.rubyforge.org/] | |
118 | * TortoiseSVN[http://tortoisesvn.tigris.org/] using Apache via |
|
119 | * TortoiseSVN[http://tortoisesvn.tigris.org/] using Apache via | |
119 | XAMPP[http://www.apachefriends.org/en/xampp.html] |
|
120 | XAMPP[http://www.apachefriends.org/en/xampp.html] | |
120 | * RDoc (though I'm quite unsatisfied with it) |
|
121 | * RDoc (though I'm quite unsatisfied with it) | |
121 | * Microsoft Windows (yes, I confess!) and MacOS X |
|
122 | * Microsoft Windows (yes, I confess!) and MacOS X | |
122 | * GNUWin32, MinGW and some other tools to make the shell under windows a bit |
|
123 | * GNUWin32, MinGW and some other tools to make the shell under windows a bit | |
123 | less useless |
|
124 | less useless | |
124 | * Term::ANSIColor[http://term-ansicolor.rubyforge.org/] |
|
125 | * Term::ANSIColor[http://term-ansicolor.rubyforge.org/] | |
125 | * PLEAC[http://pleac.sourceforge.net/] code examples |
|
126 | * PLEAC[http://pleac.sourceforge.net/] code examples | |
126 |
|
127 | |||
127 | === Free |
|
128 | === Free | |
128 |
|
129 | |||
129 | * As you can see, CodeRay was created under heavy use of *free* software. |
|
130 | * As you can see, CodeRay was created under heavy use of *free* software. | |
130 | * So CodeRay is also *free*. |
|
131 | * So CodeRay is also *free*. | |
131 | * If you use CodeRay to create software, think about making this software |
|
132 | * If you use CodeRay to create software, think about making this software | |
132 | *free*, too. |
|
133 | *free*, too. | |
133 | * Thanks :) |
|
134 | * Thanks :) |
@@ -1,322 +1,322 | |||||
1 | # = CodeRay Library |
|
1 | # = CodeRay Library | |
2 | # |
|
2 | # | |
3 | # CodeRay is a Ruby library for syntax highlighting. |
|
3 | # CodeRay is a Ruby library for syntax highlighting. | |
4 | # |
|
4 | # | |
5 | # I try to make CodeRay easy to use and intuitive, but at the same time fully featured, complete, |
|
5 | # I try to make CodeRay easy to use and intuitive, but at the same time fully featured, complete, | |
6 | # fast and efficient. |
|
6 | # fast and efficient. | |
7 | # |
|
7 | # | |
8 | # See README. |
|
8 | # See README. | |
9 | # |
|
9 | # | |
10 | # It consists mainly of |
|
10 | # It consists mainly of | |
11 | # * the main engine: CodeRay (Scanners::Scanner, Tokens/TokenStream, Encoders::Encoder), PluginHost |
|
11 | # * the main engine: CodeRay (Scanners::Scanner, Tokens/TokenStream, Encoders::Encoder), PluginHost | |
12 | # * the scanners in CodeRay::Scanners |
|
12 | # * the scanners in CodeRay::Scanners | |
13 | # * the encoders in CodeRay::Encoders |
|
13 | # * the encoders in CodeRay::Encoders | |
14 | # |
|
14 | # | |
15 | # Here's a fancy graphic to light up this gray docu: |
|
15 | # Here's a fancy graphic to light up this gray docu: | |
16 | # |
|
16 | # | |
17 | # http://cycnus.de/raindark/coderay/scheme.png |
|
17 | # http://cycnus.de/raindark/coderay/scheme.png | |
18 | # |
|
18 | # | |
19 | # == Documentation |
|
19 | # == Documentation | |
20 | # |
|
20 | # | |
21 | # See CodeRay, Encoders, Scanners, Tokens. |
|
21 | # See CodeRay, Encoders, Scanners, Tokens. | |
22 | # |
|
22 | # | |
23 | # == Usage |
|
23 | # == Usage | |
24 | # |
|
24 | # | |
25 | # Remember you need RubyGems to use CodeRay, unless you have it in your load path. Run Ruby with |
|
25 | # Remember you need RubyGems to use CodeRay, unless you have it in your load path. Run Ruby with | |
26 | # -rubygems option if required. |
|
26 | # -rubygems option if required. | |
27 | # |
|
27 | # | |
28 | # === Highlight Ruby code in a string as html |
|
28 | # === Highlight Ruby code in a string as html | |
29 | # |
|
29 | # | |
30 | # require 'coderay' |
|
30 | # require 'coderay' | |
31 | # print CodeRay.scan('puts "Hello, world!"', :ruby).html |
|
31 | # print CodeRay.scan('puts "Hello, world!"', :ruby).html | |
32 | # |
|
32 | # | |
33 | # # prints something like this: |
|
33 | # # prints something like this: | |
34 | # puts <span class="s">"Hello, world!"</span> |
|
34 | # puts <span class="s">"Hello, world!"</span> | |
35 | # |
|
35 | # | |
36 | # |
|
36 | # | |
37 | # === Highlight C code from a file in a html div |
|
37 | # === Highlight C code from a file in a html div | |
38 | # |
|
38 | # | |
39 | # require 'coderay' |
|
39 | # require 'coderay' | |
40 | # print CodeRay.scan(File.read('ruby.h'), :c).div |
|
40 | # print CodeRay.scan(File.read('ruby.h'), :c).div | |
41 | # print CodeRay.scan_file('ruby.h').html.div |
|
41 | # print CodeRay.scan_file('ruby.h').html.div | |
42 | # |
|
42 | # | |
43 | # You can include this div in your page. The used CSS styles can be printed with |
|
43 | # You can include this div in your page. The used CSS styles can be printed with | |
44 | # |
|
44 | # | |
45 | # % coderay_stylesheet |
|
45 | # % coderay_stylesheet | |
46 | # |
|
46 | # | |
47 | # === Highlight without typing too much |
|
47 | # === Highlight without typing too much | |
48 | # |
|
48 | # | |
49 | # If you are one of the hasty (or lazy, or extremely curious) people, just run this file: |
|
49 | # If you are one of the hasty (or lazy, or extremely curious) people, just run this file: | |
50 | # |
|
50 | # | |
51 | # % ruby -rubygems /path/to/coderay/coderay.rb > example.html |
|
51 | # % ruby -rubygems /path/to/coderay/coderay.rb > example.html | |
52 | # |
|
52 | # | |
53 | # and look at the file it created in your browser. |
|
53 | # and look at the file it created in your browser. | |
54 | # |
|
54 | # | |
55 | # = CodeRay Module |
|
55 | # = CodeRay Module | |
56 | # |
|
56 | # | |
57 | # The CodeRay module provides convenience methods for the engine. |
|
57 | # The CodeRay module provides convenience methods for the engine. | |
58 | # |
|
58 | # | |
59 | # * The +lang+ and +format+ arguments select Scanner and Encoder to use. These are |
|
59 | # * The +lang+ and +format+ arguments select Scanner and Encoder to use. These are | |
60 | # simply lower-case symbols, like <tt>:python</tt> or <tt>:html</tt>. |
|
60 | # simply lower-case symbols, like <tt>:python</tt> or <tt>:html</tt>. | |
61 | # * All methods take an optional hash as last parameter, +options+, that is send to |
|
61 | # * All methods take an optional hash as last parameter, +options+, that is send to | |
62 | # the Encoder / Scanner. |
|
62 | # the Encoder / Scanner. | |
63 | # * Input and language are always sorted in this order: +code+, +lang+. |
|
63 | # * Input and language are always sorted in this order: +code+, +lang+. | |
64 | # (This is in alphabetical order, if you need a mnemonic ;) |
|
64 | # (This is in alphabetical order, if you need a mnemonic ;) | |
65 | # |
|
65 | # | |
66 | # You should be able to highlight everything you want just using these methods; |
|
66 | # You should be able to highlight everything you want just using these methods; | |
67 | # so there is no need to dive into CodeRay's deep class hierarchy. |
|
67 | # so there is no need to dive into CodeRay's deep class hierarchy. | |
68 | # |
|
68 | # | |
69 | # The examples in the demo directory demonstrate common cases using this interface. |
|
69 | # The examples in the demo directory demonstrate common cases using this interface. | |
70 | # |
|
70 | # | |
71 | # = Basic Access Ways |
|
71 | # = Basic Access Ways | |
72 | # |
|
72 | # | |
73 | # Read this to get a general view what CodeRay provides. |
|
73 | # Read this to get a general view what CodeRay provides. | |
74 | # |
|
74 | # | |
75 | # == Scanning |
|
75 | # == Scanning | |
76 | # |
|
76 | # | |
77 | # Scanning means analysing an input string, splitting it up into Tokens. |
|
77 | # Scanning means analysing an input string, splitting it up into Tokens. | |
78 | # Each Token knows about what type it is: string, comment, class name, etc. |
|
78 | # Each Token knows about what type it is: string, comment, class name, etc. | |
79 | # |
|
79 | # | |
80 | # Each +lang+ (language) has its own Scanner; for example, <tt>:ruby</tt> code is |
|
80 | # Each +lang+ (language) has its own Scanner; for example, <tt>:ruby</tt> code is | |
81 | # handled by CodeRay::Scanners::Ruby. |
|
81 | # handled by CodeRay::Scanners::Ruby. | |
82 | # |
|
82 | # | |
83 | # CodeRay.scan:: Scan a string in a given language into Tokens. |
|
83 | # CodeRay.scan:: Scan a string in a given language into Tokens. | |
84 | # This is the most common method to use. |
|
84 | # This is the most common method to use. | |
85 | # CodeRay.scan_file:: Scan a file and guess the language using FileType. |
|
85 | # CodeRay.scan_file:: Scan a file and guess the language using FileType. | |
86 | # |
|
86 | # | |
87 | # The Tokens object you get from these methods can encode itself; see Tokens. |
|
87 | # The Tokens object you get from these methods can encode itself; see Tokens. | |
88 | # |
|
88 | # | |
89 | # == Encoding |
|
89 | # == Encoding | |
90 | # |
|
90 | # | |
91 | # Encoding means compiling Tokens into an output. This can be colored HTML or |
|
91 | # Encoding means compiling Tokens into an output. This can be colored HTML or | |
92 | # LaTeX, a textual statistic or just the number of non-whitespace tokens. |
|
92 | # LaTeX, a textual statistic or just the number of non-whitespace tokens. | |
93 | # |
|
93 | # | |
94 | # Each Encoder provides output in a specific +format+, so you select Encoders via |
|
94 | # Each Encoder provides output in a specific +format+, so you select Encoders via | |
95 | # formats like <tt>:html</tt> or <tt>:statistic</tt>. |
|
95 | # formats like <tt>:html</tt> or <tt>:statistic</tt>. | |
96 | # |
|
96 | # | |
97 | # CodeRay.encode:: Scan and encode a string in a given language. |
|
97 | # CodeRay.encode:: Scan and encode a string in a given language. | |
98 | # CodeRay.encode_tokens:: Encode the given tokens. |
|
98 | # CodeRay.encode_tokens:: Encode the given tokens. | |
99 | # CodeRay.encode_file:: Scan a file, guess the language using FileType and encode it. |
|
99 | # CodeRay.encode_file:: Scan a file, guess the language using FileType and encode it. | |
100 | # |
|
100 | # | |
101 | # == Streaming |
|
101 | # == Streaming | |
102 | # |
|
102 | # | |
103 | # Streaming saves RAM by running Scanner and Encoder in some sort of |
|
103 | # Streaming saves RAM by running Scanner and Encoder in some sort of | |
104 | # pipe mode; see TokenStream. |
|
104 | # pipe mode; see TokenStream. | |
105 | # |
|
105 | # | |
106 | # CodeRay.scan_stream:: Scan in stream mode. |
|
106 | # CodeRay.scan_stream:: Scan in stream mode. | |
107 | # |
|
107 | # | |
108 | # == All-in-One Encoding |
|
108 | # == All-in-One Encoding | |
109 | # |
|
109 | # | |
110 | # CodeRay.encode:: Highlight a string with a given input and output format. |
|
110 | # CodeRay.encode:: Highlight a string with a given input and output format. | |
111 | # |
|
111 | # | |
112 | # == Instanciating |
|
112 | # == Instanciating | |
113 | # |
|
113 | # | |
114 | # You can use an Encoder instance to highlight multiple inputs. This way, the setup |
|
114 | # You can use an Encoder instance to highlight multiple inputs. This way, the setup | |
115 | # for this Encoder must only be done once. |
|
115 | # for this Encoder must only be done once. | |
116 | # |
|
116 | # | |
117 | # CodeRay.encoder:: Create an Encoder instance with format and options. |
|
117 | # CodeRay.encoder:: Create an Encoder instance with format and options. | |
118 | # CodeRay.scanner:: Create an Scanner instance for lang, with '' as default code. |
|
118 | # CodeRay.scanner:: Create an Scanner instance for lang, with '' as default code. | |
119 | # |
|
119 | # | |
120 | # To make use of CodeRay.scanner, use CodeRay::Scanner::code=. |
|
120 | # To make use of CodeRay.scanner, use CodeRay::Scanner::code=. | |
121 | # |
|
121 | # | |
122 | # The scanning methods provide more flexibility; we recommend to use these. |
|
122 | # The scanning methods provide more flexibility; we recommend to use these. | |
123 | # |
|
123 | # | |
124 | # == Reusing Scanners and Encoders |
|
124 | # == Reusing Scanners and Encoders | |
125 | # |
|
125 | # | |
126 | # If you want to re-use scanners and encoders (because that is faster), see |
|
126 | # If you want to re-use scanners and encoders (because that is faster), see | |
127 | # CodeRay::Duo for the most convenient (and recommended) interface. |
|
127 | # CodeRay::Duo for the most convenient (and recommended) interface. | |
128 | module CodeRay |
|
128 | module CodeRay | |
129 |
|
129 | |||
130 | $CODERAY_DEBUG ||= false |
|
130 | $CODERAY_DEBUG ||= false | |
131 |
|
131 | |||
132 | # Version: Major.Minor.Teeny[.Revision] |
|
132 | # Version: Major.Minor.Teeny[.Revision] | |
133 | # Major: 0 for pre-stable, 1 for stable |
|
133 | # Major: 0 for pre-stable, 1 for stable | |
134 | # Minor: feature milestone |
|
134 | # Minor: feature milestone | |
135 | # Teeny: development state, 0 for pre-release |
|
135 | # Teeny: development state, 0 for pre-release | |
136 | # Revision: Subversion Revision number (generated on rake gem:make) |
|
136 | # Revision: Subversion Revision number (generated on rake gem:make) | |
137 |
VERSION = '0.9. |
|
137 | VERSION = '0.9.7' | |
138 |
|
138 | |||
139 | require 'coderay/tokens' |
|
139 | require 'coderay/tokens' | |
140 | require 'coderay/token_classes' |
|
140 | require 'coderay/token_classes' | |
141 | require 'coderay/scanner' |
|
141 | require 'coderay/scanner' | |
142 | require 'coderay/encoder' |
|
142 | require 'coderay/encoder' | |
143 | require 'coderay/duo' |
|
143 | require 'coderay/duo' | |
144 | require 'coderay/style' |
|
144 | require 'coderay/style' | |
145 |
|
145 | |||
146 |
|
146 | |||
147 | class << self |
|
147 | class << self | |
148 |
|
148 | |||
149 | # Scans the given +code+ (a String) with the Scanner for +lang+. |
|
149 | # Scans the given +code+ (a String) with the Scanner for +lang+. | |
150 | # |
|
150 | # | |
151 | # This is a simple way to use CodeRay. Example: |
|
151 | # This is a simple way to use CodeRay. Example: | |
152 | # require 'coderay' |
|
152 | # require 'coderay' | |
153 | # page = CodeRay.scan("puts 'Hello, world!'", :ruby).html |
|
153 | # page = CodeRay.scan("puts 'Hello, world!'", :ruby).html | |
154 | # |
|
154 | # | |
155 | # See also demo/demo_simple. |
|
155 | # See also demo/demo_simple. | |
156 | def scan code, lang, options = {}, &block |
|
156 | def scan code, lang, options = {}, &block | |
157 | scanner = Scanners[lang].new code, options, &block |
|
157 | scanner = Scanners[lang].new code, options, &block | |
158 | scanner.tokenize |
|
158 | scanner.tokenize | |
159 | end |
|
159 | end | |
160 |
|
160 | |||
161 | # Scans +filename+ (a path to a code file) with the Scanner for +lang+. |
|
161 | # Scans +filename+ (a path to a code file) with the Scanner for +lang+. | |
162 | # |
|
162 | # | |
163 | # If +lang+ is :auto or omitted, the CodeRay::FileType module is used to |
|
163 | # If +lang+ is :auto or omitted, the CodeRay::FileType module is used to | |
164 | # determine it. If it cannot find out what type it is, it uses |
|
164 | # determine it. If it cannot find out what type it is, it uses | |
165 | # CodeRay::Scanners::Plaintext. |
|
165 | # CodeRay::Scanners::Plaintext. | |
166 | # |
|
166 | # | |
167 | # Calls CodeRay.scan. |
|
167 | # Calls CodeRay.scan. | |
168 | # |
|
168 | # | |
169 | # Example: |
|
169 | # Example: | |
170 | # require 'coderay' |
|
170 | # require 'coderay' | |
171 | # page = CodeRay.scan_file('some_c_code.c').html |
|
171 | # page = CodeRay.scan_file('some_c_code.c').html | |
172 | def scan_file filename, lang = :auto, options = {}, &block |
|
172 | def scan_file filename, lang = :auto, options = {}, &block | |
173 | file = IO.read filename |
|
173 | file = IO.read filename | |
174 | if lang == :auto |
|
174 | if lang == :auto | |
175 | require 'coderay/helpers/file_type' |
|
175 | require 'coderay/helpers/file_type' | |
176 | lang = FileType.fetch filename, :plaintext, true |
|
176 | lang = FileType.fetch filename, :plaintext, true | |
177 | end |
|
177 | end | |
178 | scan file, lang, options = {}, &block |
|
178 | scan file, lang, options = {}, &block | |
179 | end |
|
179 | end | |
180 |
|
180 | |||
181 | # Scan the +code+ (a string) with the scanner for +lang+. |
|
181 | # Scan the +code+ (a string) with the scanner for +lang+. | |
182 | # |
|
182 | # | |
183 | # Calls scan. |
|
183 | # Calls scan. | |
184 | # |
|
184 | # | |
185 | # See CodeRay.scan. |
|
185 | # See CodeRay.scan. | |
186 | def scan_stream code, lang, options = {}, &block |
|
186 | def scan_stream code, lang, options = {}, &block | |
187 | options[:stream] = true |
|
187 | options[:stream] = true | |
188 | scan code, lang, options, &block |
|
188 | scan code, lang, options, &block | |
189 | end |
|
189 | end | |
190 |
|
190 | |||
191 | # Encode a string in Streaming mode. |
|
191 | # Encode a string in Streaming mode. | |
192 | # |
|
192 | # | |
193 | # This starts scanning +code+ with the the Scanner for +lang+ |
|
193 | # This starts scanning +code+ with the the Scanner for +lang+ | |
194 | # while encodes the output with the Encoder for +format+. |
|
194 | # while encodes the output with the Encoder for +format+. | |
195 | # +options+ will be passed to the Encoder. |
|
195 | # +options+ will be passed to the Encoder. | |
196 | # |
|
196 | # | |
197 | # See CodeRay::Encoder.encode_stream |
|
197 | # See CodeRay::Encoder.encode_stream | |
198 | def encode_stream code, lang, format, options = {} |
|
198 | def encode_stream code, lang, format, options = {} | |
199 | encoder(format, options).encode_stream code, lang, options |
|
199 | encoder(format, options).encode_stream code, lang, options | |
200 | end |
|
200 | end | |
201 |
|
201 | |||
202 | # Encode a string. |
|
202 | # Encode a string. | |
203 | # |
|
203 | # | |
204 | # This scans +code+ with the the Scanner for +lang+ and then |
|
204 | # This scans +code+ with the the Scanner for +lang+ and then | |
205 | # encodes it with the Encoder for +format+. |
|
205 | # encodes it with the Encoder for +format+. | |
206 | # +options+ will be passed to the Encoder. |
|
206 | # +options+ will be passed to the Encoder. | |
207 | # |
|
207 | # | |
208 | # See CodeRay::Encoder.encode |
|
208 | # See CodeRay::Encoder.encode | |
209 | def encode code, lang, format, options = {} |
|
209 | def encode code, lang, format, options = {} | |
210 | encoder(format, options).encode code, lang, options |
|
210 | encoder(format, options).encode code, lang, options | |
211 | end |
|
211 | end | |
212 |
|
212 | |||
213 | # Highlight a string into a HTML <div>. |
|
213 | # Highlight a string into a HTML <div>. | |
214 | # |
|
214 | # | |
215 | # CSS styles use classes, so you have to include a stylesheet |
|
215 | # CSS styles use classes, so you have to include a stylesheet | |
216 | # in your output. |
|
216 | # in your output. | |
217 | # |
|
217 | # | |
218 | # See encode. |
|
218 | # See encode. | |
219 | def highlight code, lang, options = { :css => :class }, format = :div |
|
219 | def highlight code, lang, options = { :css => :class }, format = :div | |
220 | encode code, lang, format, options |
|
220 | encode code, lang, format, options | |
221 | end |
|
221 | end | |
222 |
|
222 | |||
223 | # Encode pre-scanned Tokens. |
|
223 | # Encode pre-scanned Tokens. | |
224 | # Use this together with CodeRay.scan: |
|
224 | # Use this together with CodeRay.scan: | |
225 | # |
|
225 | # | |
226 | # require 'coderay' |
|
226 | # require 'coderay' | |
227 | # |
|
227 | # | |
228 | # # Highlight a short Ruby code example in a HTML span |
|
228 | # # Highlight a short Ruby code example in a HTML span | |
229 | # tokens = CodeRay.scan '1 + 2', :ruby |
|
229 | # tokens = CodeRay.scan '1 + 2', :ruby | |
230 | # puts CodeRay.encode_tokens(tokens, :span) |
|
230 | # puts CodeRay.encode_tokens(tokens, :span) | |
231 | # |
|
231 | # | |
232 | def encode_tokens tokens, format, options = {} |
|
232 | def encode_tokens tokens, format, options = {} | |
233 | encoder(format, options).encode_tokens tokens, options |
|
233 | encoder(format, options).encode_tokens tokens, options | |
234 | end |
|
234 | end | |
235 |
|
235 | |||
236 | # Encodes +filename+ (a path to a code file) with the Scanner for +lang+. |
|
236 | # Encodes +filename+ (a path to a code file) with the Scanner for +lang+. | |
237 | # |
|
237 | # | |
238 | # See CodeRay.scan_file. |
|
238 | # See CodeRay.scan_file. | |
239 | # Notice that the second argument is the output +format+, not the input language. |
|
239 | # Notice that the second argument is the output +format+, not the input language. | |
240 | # |
|
240 | # | |
241 | # Example: |
|
241 | # Example: | |
242 | # require 'coderay' |
|
242 | # require 'coderay' | |
243 | # page = CodeRay.encode_file 'some_c_code.c', :html |
|
243 | # page = CodeRay.encode_file 'some_c_code.c', :html | |
244 | def encode_file filename, format, options = {} |
|
244 | def encode_file filename, format, options = {} | |
245 | tokens = scan_file filename, :auto, get_scanner_options(options) |
|
245 | tokens = scan_file filename, :auto, get_scanner_options(options) | |
246 | encode_tokens tokens, format, options |
|
246 | encode_tokens tokens, format, options | |
247 | end |
|
247 | end | |
248 |
|
248 | |||
249 | # Highlight a file into a HTML <div>. |
|
249 | # Highlight a file into a HTML <div>. | |
250 | # |
|
250 | # | |
251 | # CSS styles use classes, so you have to include a stylesheet |
|
251 | # CSS styles use classes, so you have to include a stylesheet | |
252 | # in your output. |
|
252 | # in your output. | |
253 | # |
|
253 | # | |
254 | # See encode. |
|
254 | # See encode. | |
255 | def highlight_file filename, options = { :css => :class }, format = :div |
|
255 | def highlight_file filename, options = { :css => :class }, format = :div | |
256 | encode_file filename, format, options |
|
256 | encode_file filename, format, options | |
257 | end |
|
257 | end | |
258 |
|
258 | |||
259 | # Finds the Encoder class for +format+ and creates an instance, passing |
|
259 | # Finds the Encoder class for +format+ and creates an instance, passing | |
260 | # +options+ to it. |
|
260 | # +options+ to it. | |
261 | # |
|
261 | # | |
262 | # Example: |
|
262 | # Example: | |
263 | # require 'coderay' |
|
263 | # require 'coderay' | |
264 | # |
|
264 | # | |
265 | # stats = CodeRay.encoder(:statistic) |
|
265 | # stats = CodeRay.encoder(:statistic) | |
266 | # stats.encode("puts 17 + 4\n", :ruby) |
|
266 | # stats.encode("puts 17 + 4\n", :ruby) | |
267 | # |
|
267 | # | |
268 | # puts '%d out of %d tokens have the kind :integer.' % [ |
|
268 | # puts '%d out of %d tokens have the kind :integer.' % [ | |
269 | # stats.type_stats[:integer].count, |
|
269 | # stats.type_stats[:integer].count, | |
270 | # stats.real_token_count |
|
270 | # stats.real_token_count | |
271 | # ] |
|
271 | # ] | |
272 | # #-> 2 out of 4 tokens have the kind :integer. |
|
272 | # #-> 2 out of 4 tokens have the kind :integer. | |
273 | def encoder format, options = {} |
|
273 | def encoder format, options = {} | |
274 | Encoders[format].new options |
|
274 | Encoders[format].new options | |
275 | end |
|
275 | end | |
276 |
|
276 | |||
277 | # Finds the Scanner class for +lang+ and creates an instance, passing |
|
277 | # Finds the Scanner class for +lang+ and creates an instance, passing | |
278 | # +options+ to it. |
|
278 | # +options+ to it. | |
279 | # |
|
279 | # | |
280 | # See Scanner.new. |
|
280 | # See Scanner.new. | |
281 | def scanner lang, options = {} |
|
281 | def scanner lang, options = {} | |
282 | Scanners[lang].new '', options |
|
282 | Scanners[lang].new '', options | |
283 | end |
|
283 | end | |
284 |
|
284 | |||
285 | # Extract the options for the scanner from the +options+ hash. |
|
285 | # Extract the options for the scanner from the +options+ hash. | |
286 | # |
|
286 | # | |
287 | # Returns an empty Hash if <tt>:scanner_options</tt> is not set. |
|
287 | # Returns an empty Hash if <tt>:scanner_options</tt> is not set. | |
288 | # |
|
288 | # | |
289 | # This is used if a method like CodeRay.encode has to provide options |
|
289 | # This is used if a method like CodeRay.encode has to provide options | |
290 | # for Encoder _and_ scanner. |
|
290 | # for Encoder _and_ scanner. | |
291 | def get_scanner_options options |
|
291 | def get_scanner_options options | |
292 | options.fetch :scanner_options, {} |
|
292 | options.fetch :scanner_options, {} | |
293 | end |
|
293 | end | |
294 |
|
294 | |||
295 | end |
|
295 | end | |
296 |
|
296 | |||
297 | # This Exception is raised when you try to stream with something that is not |
|
297 | # This Exception is raised when you try to stream with something that is not | |
298 | # capable of streaming. |
|
298 | # capable of streaming. | |
299 | class NotStreamableError < Exception |
|
299 | class NotStreamableError < Exception | |
300 | def initialize obj |
|
300 | def initialize obj | |
301 | @obj = obj |
|
301 | @obj = obj | |
302 | end |
|
302 | end | |
303 |
|
303 | |||
304 | def to_s |
|
304 | def to_s | |
305 | '%s is not Streamable!' % @obj.class |
|
305 | '%s is not Streamable!' % @obj.class | |
306 | end |
|
306 | end | |
307 | end |
|
307 | end | |
308 |
|
308 | |||
309 | # A dummy module that is included by subclasses of CodeRay::Scanner an CodeRay::Encoder |
|
309 | # A dummy module that is included by subclasses of CodeRay::Scanner an CodeRay::Encoder | |
310 | # to show that they are able to handle streams. |
|
310 | # to show that they are able to handle streams. | |
311 | module Streamable |
|
311 | module Streamable | |
312 | end |
|
312 | end | |
313 |
|
313 | |||
314 | end |
|
314 | end | |
315 |
|
315 | |||
316 | # Run a test script. |
|
316 | # Run a test script. | |
317 | if $0 == __FILE__ |
|
317 | if $0 == __FILE__ | |
318 | $stderr.print 'Press key to print demo.'; gets |
|
318 | $stderr.print 'Press key to print demo.'; gets | |
319 | # Just use this file as an example of Ruby code. |
|
319 | # Just use this file as an example of Ruby code. | |
320 | code = File.read(__FILE__)[/module CodeRay.*/m] |
|
320 | code = File.read(__FILE__)[/module CodeRay.*/m] | |
321 | print CodeRay.scan(code, :ruby).html |
|
321 | print CodeRay.scan(code, :ruby).html | |
322 | end |
|
322 | end |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/duo.rb to vendor/gems/coderay-0.9.7/lib/coderay/duo.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/duo.rb to vendor/gems/coderay-0.9.7/lib/coderay/duo.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoder.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoder.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoder.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoder.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/_map.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/_map.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/_map.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/_map.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/comment_filter.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/comment_filter.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/comment_filter.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/comment_filter.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/count.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/count.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/count.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/count.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/debug.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/debug.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/debug.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/debug.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/div.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/div.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/div.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/div.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/filter.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/filter.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/filter.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/filter.rb |
@@ -1,305 +1,309 | |||||
1 | require 'set' |
|
1 | require 'set' | |
2 |
|
2 | |||
3 | module CodeRay |
|
3 | module CodeRay | |
4 | module Encoders |
|
4 | module Encoders | |
5 |
|
5 | |||
6 | # = HTML Encoder |
|
6 | # = HTML Encoder | |
7 | # |
|
7 | # | |
8 | # This is CodeRay's most important highlighter: |
|
8 | # This is CodeRay's most important highlighter: | |
9 | # It provides save, fast XHTML generation and CSS support. |
|
9 | # It provides save, fast XHTML generation and CSS support. | |
10 | # |
|
10 | # | |
11 | # == Usage |
|
11 | # == Usage | |
12 | # |
|
12 | # | |
13 | # require 'coderay' |
|
13 | # require 'coderay' | |
14 | # puts CodeRay.scan('Some /code/', :ruby).html #-> a HTML page |
|
14 | # puts CodeRay.scan('Some /code/', :ruby).html #-> a HTML page | |
15 | # puts CodeRay.scan('Some /code/', :ruby).html(:wrap => :span) |
|
15 | # puts CodeRay.scan('Some /code/', :ruby).html(:wrap => :span) | |
16 | # #-> <span class="CodeRay"><span class="co">Some</span> /code/</span> |
|
16 | # #-> <span class="CodeRay"><span class="co">Some</span> /code/</span> | |
17 | # puts CodeRay.scan('Some /code/', :ruby).span #-> the same |
|
17 | # puts CodeRay.scan('Some /code/', :ruby).span #-> the same | |
18 | # |
|
18 | # | |
19 | # puts CodeRay.scan('Some code', :ruby).html( |
|
19 | # puts CodeRay.scan('Some code', :ruby).html( | |
20 | # :wrap => nil, |
|
20 | # :wrap => nil, | |
21 | # :line_numbers => :inline, |
|
21 | # :line_numbers => :inline, | |
22 | # :css => :style |
|
22 | # :css => :style | |
23 | # ) |
|
23 | # ) | |
24 | # #-> <span class="no">1</span> <span style="color:#036; font-weight:bold;">Some</span> code |
|
24 | # #-> <span class="no">1</span> <span style="color:#036; font-weight:bold;">Some</span> code | |
25 | # |
|
25 | # | |
26 | # == Options |
|
26 | # == Options | |
27 | # |
|
27 | # | |
28 | # === :tab_width |
|
28 | # === :tab_width | |
29 | # Convert \t characters to +n+ spaces (a number.) |
|
29 | # Convert \t characters to +n+ spaces (a number.) | |
30 | # Default: 8 |
|
30 | # Default: 8 | |
31 | # |
|
31 | # | |
32 | # === :css |
|
32 | # === :css | |
33 | # How to include the styles; can be :class or :style. |
|
33 | # How to include the styles; can be :class or :style. | |
34 | # |
|
34 | # | |
35 | # Default: :class |
|
35 | # Default: :class | |
36 | # |
|
36 | # | |
37 | # === :wrap |
|
37 | # === :wrap | |
38 | # Wrap in :page, :div, :span or nil. |
|
38 | # Wrap in :page, :div, :span or nil. | |
39 | # |
|
39 | # | |
40 | # You can also use Encoders::Div and Encoders::Span. |
|
40 | # You can also use Encoders::Div and Encoders::Span. | |
41 | # |
|
41 | # | |
42 | # Default: nil |
|
42 | # Default: nil | |
43 | # |
|
43 | # | |
44 | # === :title |
|
44 | # === :title | |
45 | # |
|
45 | # | |
46 | # The title of the HTML page (works only when :wrap is set to :page.) |
|
46 | # The title of the HTML page (works only when :wrap is set to :page.) | |
47 | # |
|
47 | # | |
48 | # Default: 'CodeRay output' |
|
48 | # Default: 'CodeRay output' | |
49 | # |
|
49 | # | |
50 | # === :line_numbers |
|
50 | # === :line_numbers | |
51 | # Include line numbers in :table, :inline, :list or nil (no line numbers) |
|
51 | # Include line numbers in :table, :inline, :list or nil (no line numbers) | |
52 | # |
|
52 | # | |
53 | # Default: nil |
|
53 | # Default: nil | |
54 | # |
|
54 | # | |
55 | # === :line_number_start |
|
55 | # === :line_number_start | |
56 | # Where to start with line number counting. |
|
56 | # Where to start with line number counting. | |
57 | # |
|
57 | # | |
58 | # Default: 1 |
|
58 | # Default: 1 | |
59 | # |
|
59 | # | |
60 | # === :bold_every |
|
60 | # === :bold_every | |
61 | # Make every +n+-th number appear bold. |
|
61 | # Make every +n+-th number appear bold. | |
62 | # |
|
62 | # | |
63 | # Default: 10 |
|
63 | # Default: 10 | |
64 | # |
|
64 | # | |
65 | # === :highlight_lines |
|
65 | # === :highlight_lines | |
66 | # |
|
66 | # | |
67 | # Highlights certain line numbers. |
|
67 | # Highlights certain line numbers. | |
68 | # Can be any Enumerable, typically just an Array or Range, of numbers. |
|
68 | # Can be any Enumerable, typically just an Array or Range, of numbers. | |
69 | # |
|
69 | # | |
70 | # Bolding is deactivated when :highlight_lines is set. It only makes sense |
|
70 | # Bolding is deactivated when :highlight_lines is set. It only makes sense | |
71 | # in combination with :line_numbers. |
|
71 | # in combination with :line_numbers. | |
72 | # |
|
72 | # | |
73 | # Default: nil |
|
73 | # Default: nil | |
74 | # |
|
74 | # | |
75 | # === :hint |
|
75 | # === :hint | |
76 | # Include some information into the output using the title attribute. |
|
76 | # Include some information into the output using the title attribute. | |
77 | # Can be :info (show token type on mouse-over), :info_long (with full path) |
|
77 | # Can be :info (show token type on mouse-over), :info_long (with full path) | |
78 | # or :debug (via inspect). |
|
78 | # or :debug (via inspect). | |
79 | # |
|
79 | # | |
80 | # Default: false |
|
80 | # Default: false | |
81 | class HTML < Encoder |
|
81 | class HTML < Encoder | |
82 |
|
82 | |||
83 | include Streamable |
|
83 | include Streamable | |
84 | register_for :html |
|
84 | register_for :html | |
85 |
|
85 | |||
86 | FILE_EXTENSION = 'html' |
|
86 | FILE_EXTENSION = 'html' | |
87 |
|
87 | |||
88 | DEFAULT_OPTIONS = { |
|
88 | DEFAULT_OPTIONS = { | |
89 | :tab_width => 8, |
|
89 | :tab_width => 8, | |
90 |
|
90 | |||
91 | :css => :class, |
|
91 | :css => :class, | |
92 |
|
92 | |||
93 | :style => :cycnus, |
|
93 | :style => :cycnus, | |
94 | :wrap => nil, |
|
94 | :wrap => nil, | |
95 | :title => 'CodeRay output', |
|
95 | :title => 'CodeRay output', | |
96 |
|
96 | |||
97 | :line_numbers => nil, |
|
97 | :line_numbers => nil, | |
98 | :line_number_start => 1, |
|
98 | :line_number_start => 1, | |
99 | :bold_every => 10, |
|
99 | :bold_every => 10, | |
100 | :highlight_lines => nil, |
|
100 | :highlight_lines => nil, | |
101 |
|
101 | |||
102 | :hint => false, |
|
102 | :hint => false, | |
103 | } |
|
103 | } | |
104 |
|
104 | |||
105 | helper :output, :css |
|
105 | helper :output, :css | |
106 |
|
106 | |||
107 | attr_reader :css |
|
107 | attr_reader :css | |
108 |
|
108 | |||
109 | protected |
|
109 | protected | |
110 |
|
110 | |||
111 | HTML_ESCAPE = { #:nodoc: |
|
111 | HTML_ESCAPE = { #:nodoc: | |
112 | '&' => '&', |
|
112 | '&' => '&', | |
113 | '"' => '"', |
|
113 | '"' => '"', | |
114 | '>' => '>', |
|
114 | '>' => '>', | |
115 | '<' => '<', |
|
115 | '<' => '<', | |
116 | } |
|
116 | } | |
117 |
|
117 | |||
118 | # This was to prevent illegal HTML. |
|
118 | # This was to prevent illegal HTML. | |
119 | # Strange chars should still be avoided in codes. |
|
119 | # Strange chars should still be avoided in codes. | |
120 | evil_chars = Array(0x00...0x20) - [?\n, ?\t, ?\s] |
|
120 | evil_chars = Array(0x00...0x20) - [?\n, ?\t, ?\s] | |
121 | evil_chars.each { |i| HTML_ESCAPE[i.chr] = ' ' } |
|
121 | evil_chars.each { |i| HTML_ESCAPE[i.chr] = ' ' } | |
122 | #ansi_chars = Array(0x7f..0xff) |
|
122 | #ansi_chars = Array(0x7f..0xff) | |
123 | #ansi_chars.each { |i| HTML_ESCAPE[i.chr] = '&#%d;' % i } |
|
123 | #ansi_chars.each { |i| HTML_ESCAPE[i.chr] = '&#%d;' % i } | |
124 | # \x9 (\t) and \xA (\n) not included |
|
124 | # \x9 (\t) and \xA (\n) not included | |
125 | #HTML_ESCAPE_PATTERN = /[\t&"><\0-\x8\xB-\x1f\x7f-\xff]/ |
|
125 | #HTML_ESCAPE_PATTERN = /[\t&"><\0-\x8\xB-\x1f\x7f-\xff]/ | |
126 | HTML_ESCAPE_PATTERN = /[\t"&><\0-\x8\xB-\x1f]/ |
|
126 | HTML_ESCAPE_PATTERN = /[\t"&><\0-\x8\xB-\x1f]/ | |
127 |
|
127 | |||
128 | TOKEN_KIND_TO_INFO = Hash.new { |h, kind| |
|
128 | TOKEN_KIND_TO_INFO = Hash.new { |h, kind| | |
129 | h[kind] = |
|
129 | h[kind] = | |
130 | case kind |
|
130 | case kind | |
131 | when :pre_constant |
|
131 | when :pre_constant | |
132 | 'Predefined constant' |
|
132 | 'Predefined constant' | |
133 | else |
|
133 | else | |
134 | kind.to_s.gsub(/_/, ' ').gsub(/\b\w/) { $&.capitalize } |
|
134 | kind.to_s.gsub(/_/, ' ').gsub(/\b\w/) { $&.capitalize } | |
135 | end |
|
135 | end | |
136 | } |
|
136 | } | |
137 |
|
137 | |||
138 | TRANSPARENT_TOKEN_KINDS = [ |
|
138 | TRANSPARENT_TOKEN_KINDS = [ | |
139 | :delimiter, :modifier, :content, :escape, :inline_delimiter, |
|
139 | :delimiter, :modifier, :content, :escape, :inline_delimiter, | |
140 | ].to_set |
|
140 | ].to_set | |
141 |
|
141 | |||
142 | # Generate a hint about the given +classes+ in a +hint+ style. |
|
142 | # Generate a hint about the given +classes+ in a +hint+ style. | |
143 | # |
|
143 | # | |
144 | # +hint+ may be :info, :info_long or :debug. |
|
144 | # +hint+ may be :info, :info_long or :debug. | |
145 | def self.token_path_to_hint hint, classes |
|
145 | def self.token_path_to_hint hint, classes | |
146 | title = |
|
146 | title = | |
147 | case hint |
|
147 | case hint | |
148 | when :info |
|
148 | when :info | |
149 | TOKEN_KIND_TO_INFO[classes.first] |
|
149 | TOKEN_KIND_TO_INFO[classes.first] | |
150 | when :info_long |
|
150 | when :info_long | |
151 | classes.reverse.map { |kind| TOKEN_KIND_TO_INFO[kind] }.join('/') |
|
151 | classes.reverse.map { |kind| TOKEN_KIND_TO_INFO[kind] }.join('/') | |
152 | when :debug |
|
152 | when :debug | |
153 | classes.inspect |
|
153 | classes.inspect | |
154 | end |
|
154 | end | |
155 | title ? " title=\"#{title}\"" : '' |
|
155 | title ? " title=\"#{title}\"" : '' | |
156 | end |
|
156 | end | |
157 |
|
157 | |||
158 | def setup options |
|
158 | def setup options | |
159 | super |
|
159 | super | |
160 |
|
160 | |||
161 | @HTML_ESCAPE = HTML_ESCAPE.dup |
|
161 | @HTML_ESCAPE = HTML_ESCAPE.dup | |
162 | @HTML_ESCAPE["\t"] = ' ' * options[:tab_width] |
|
162 | @HTML_ESCAPE["\t"] = ' ' * options[:tab_width] | |
163 |
|
163 | |||
164 | @opened = [nil] |
|
164 | @opened = [nil] | |
165 | @css = CSS.new options[:style] |
|
165 | @css = CSS.new options[:style] | |
166 |
|
166 | |||
167 | hint = options[:hint] |
|
167 | hint = options[:hint] | |
168 | if hint and not [:debug, :info, :info_long].include? hint |
|
168 | if hint and not [:debug, :info, :info_long].include? hint | |
169 | raise ArgumentError, "Unknown value %p for :hint; \ |
|
169 | raise ArgumentError, "Unknown value %p for :hint; \ | |
170 | expected :info, :debug, false, or nil." % hint |
|
170 | expected :info, :debug, false, or nil." % hint | |
171 | end |
|
171 | end | |
172 |
|
172 | |||
173 | case options[:css] |
|
173 | case options[:css] | |
174 |
|
174 | |||
175 | when :class |
|
175 | when :class | |
176 | @css_style = Hash.new do |h, k| |
|
176 | @css_style = Hash.new do |h, k| | |
177 | c = CodeRay::Tokens::ClassOfKind[k.first] |
|
177 | c = CodeRay::Tokens::ClassOfKind[k.first] | |
178 | if c == :NO_HIGHLIGHT and not hint |
|
178 | if c == :NO_HIGHLIGHT and not hint | |
179 | h[k.dup] = false |
|
179 | h[k.dup] = false | |
180 | else |
|
180 | else | |
181 | title = if hint |
|
181 | title = if hint | |
182 | HTML.token_path_to_hint(hint, k[1..-1] << k.first) |
|
182 | HTML.token_path_to_hint(hint, k[1..-1] << k.first) | |
183 | else |
|
183 | else | |
184 | '' |
|
184 | '' | |
185 | end |
|
185 | end | |
186 | if c == :NO_HIGHLIGHT |
|
186 | if c == :NO_HIGHLIGHT | |
187 | h[k.dup] = '<span%s>' % [title] |
|
187 | h[k.dup] = '<span%s>' % [title] | |
188 | else |
|
188 | else | |
189 | h[k.dup] = '<span%s class="%s">' % [title, c] |
|
189 | h[k.dup] = '<span%s class="%s">' % [title, c] | |
190 | end |
|
190 | end | |
191 | end |
|
191 | end | |
192 | end |
|
192 | end | |
193 |
|
193 | |||
194 | when :style |
|
194 | when :style | |
195 | @css_style = Hash.new do |h, k| |
|
195 | @css_style = Hash.new do |h, k| | |
196 | if k.is_a? ::Array |
|
196 | if k.is_a? ::Array | |
197 | styles = k.dup |
|
197 | styles = k.dup | |
198 | else |
|
198 | else | |
199 | styles = [k] |
|
199 | styles = [k] | |
200 | end |
|
200 | end | |
201 | type = styles.first |
|
201 | type = styles.first | |
202 | classes = styles.map { |c| Tokens::ClassOfKind[c] } |
|
202 | classes = styles.map { |c| Tokens::ClassOfKind[c] } | |
203 | if classes.first == :NO_HIGHLIGHT and not hint |
|
203 | if classes.first == :NO_HIGHLIGHT and not hint | |
204 | h[k] = false |
|
204 | h[k] = false | |
205 | else |
|
205 | else | |
206 | styles.shift if TRANSPARENT_TOKEN_KINDS.include? styles.first |
|
206 | styles.shift if TRANSPARENT_TOKEN_KINDS.include? styles.first | |
207 | title = HTML.token_path_to_hint hint, styles |
|
207 | title = HTML.token_path_to_hint hint, styles | |
208 | style = @css[*classes] |
|
208 | style = @css[*classes] | |
209 | h[k] = |
|
209 | h[k] = | |
210 | if style |
|
210 | if style | |
211 | '<span%s style="%s">' % [title, style] |
|
211 | '<span%s style="%s">' % [title, style] | |
212 | else |
|
212 | else | |
213 | false |
|
213 | false | |
214 | end |
|
214 | end | |
215 | end |
|
215 | end | |
216 | end |
|
216 | end | |
217 |
|
217 | |||
218 | else |
|
218 | else | |
219 | raise ArgumentError, "Unknown value %p for :css." % options[:css] |
|
219 | raise ArgumentError, "Unknown value %p for :css." % options[:css] | |
220 |
|
220 | |||
221 | end |
|
221 | end | |
222 | end |
|
222 | end | |
223 |
|
223 | |||
224 | def finish options |
|
224 | def finish options | |
225 | not_needed = @opened.shift |
|
225 | not_needed = @opened.shift | |
226 | @out << '</span>' * @opened.size |
|
226 | @out << '</span>' * @opened.size | |
227 | unless @opened.empty? |
|
227 | unless @opened.empty? | |
228 | warn '%d tokens still open: %p' % [@opened.size, @opened] |
|
228 | warn '%d tokens still open: %p' % [@opened.size, @opened] | |
229 | end |
|
229 | end | |
230 |
|
230 | |||
231 | @out.extend Output |
|
231 | @out.extend Output | |
232 | @out.css = @css |
|
232 | @out.css = @css | |
233 | @out.numerize! options[:line_numbers], options |
|
233 | @out.numerize! options[:line_numbers], options | |
234 | @out.wrap! options[:wrap] |
|
234 | @out.wrap! options[:wrap] | |
235 | @out.apply_title! options[:title] |
|
235 | @out.apply_title! options[:title] | |
236 |
|
236 | |||
237 | super |
|
237 | super | |
238 | end |
|
238 | end | |
239 |
|
239 | |||
240 | def token text, type = :plain |
|
240 | def token text, type = :plain | |
241 | case text |
|
241 | case text | |
242 |
|
242 | |||
243 | when nil |
|
243 | when nil | |
244 | # raise 'Token with nil as text was given: %p' % [[text, type]] |
|
244 | # raise 'Token with nil as text was given: %p' % [[text, type]] | |
245 |
|
245 | |||
246 | when String |
|
246 | when String | |
247 | if text =~ /#{HTML_ESCAPE_PATTERN}/o |
|
247 | if text =~ /#{HTML_ESCAPE_PATTERN}/o | |
248 | text = text.gsub(/#{HTML_ESCAPE_PATTERN}/o) { |m| @HTML_ESCAPE[m] } |
|
248 | text = text.gsub(/#{HTML_ESCAPE_PATTERN}/o) { |m| @HTML_ESCAPE[m] } | |
249 | end |
|
249 | end | |
250 | @opened[0] = type |
|
250 | @opened[0] = type | |
251 | if text != "\n" && style = @css_style[@opened] |
|
251 | if text != "\n" && style = @css_style[@opened] | |
252 | @out << style << text << '</span>' |
|
252 | @out << style << text << '</span>' | |
253 | else |
|
253 | else | |
254 | @out << text |
|
254 | @out << text | |
255 | end |
|
255 | end | |
256 |
|
256 | |||
257 |
|
257 | |||
258 | # token groups, eg. strings |
|
258 | # token groups, eg. strings | |
259 | when :open |
|
259 | when :open | |
260 | @opened[0] = type |
|
260 | @opened[0] = type | |
261 | @out << (@css_style[@opened] || '<span>') |
|
261 | @out << (@css_style[@opened] || '<span>') | |
262 | @opened << type |
|
262 | @opened << type | |
263 | when :close |
|
263 | when :close | |
264 | if @opened.empty? |
|
264 | if @opened.empty? | |
265 | # nothing to close |
|
265 | # nothing to close | |
266 | else |
|
266 | else | |
267 | if $CODERAY_DEBUG and (@opened.size == 1 or @opened.last != type) |
|
267 | if $CODERAY_DEBUG and (@opened.size == 1 or @opened.last != type) | |
268 | raise 'Malformed token stream: Trying to close a token (%p) \ |
|
268 | raise 'Malformed token stream: Trying to close a token (%p) \ | |
269 | that is not open. Open are: %p.' % [type, @opened[1..-1]] |
|
269 | that is not open. Open are: %p.' % [type, @opened[1..-1]] | |
270 | end |
|
270 | end | |
271 | @out << '</span>' |
|
271 | @out << '</span>' | |
272 | @opened.pop |
|
272 | @opened.pop | |
273 | end |
|
273 | end | |
274 |
|
274 | |||
275 | # whole lines to be highlighted, eg. a deleted line in a diff |
|
275 | # whole lines to be highlighted, eg. a deleted line in a diff | |
276 | when :begin_line |
|
276 | when :begin_line | |
277 | @opened[0] = type |
|
277 | @opened[0] = type | |
278 | if style = @css_style[@opened] |
|
278 | if style = @css_style[@opened] | |
279 | @out << style.sub('<span', '<div') |
|
279 | if style['class="'] | |
|
280 | @out << style.sub('class="', 'class="line ') | |||
|
281 | else | |||
|
282 | @out << style.sub('>', ' class="line">') | |||
|
283 | end | |||
280 | else |
|
284 | else | |
281 |
@out << '< |
|
285 | @out << '<span class="line">' | |
282 | end |
|
286 | end | |
283 | @opened << type |
|
287 | @opened << type | |
284 | when :end_line |
|
288 | when :end_line | |
285 | if @opened.empty? |
|
289 | if @opened.empty? | |
286 | # nothing to close |
|
290 | # nothing to close | |
287 | else |
|
291 | else | |
288 | if $CODERAY_DEBUG and (@opened.size == 1 or @opened.last != type) |
|
292 | if $CODERAY_DEBUG and (@opened.size == 1 or @opened.last != type) | |
289 | raise 'Malformed token stream: Trying to close a line (%p) \ |
|
293 | raise 'Malformed token stream: Trying to close a line (%p) \ | |
290 | that is not open. Open are: %p.' % [type, @opened[1..-1]] |
|
294 | that is not open. Open are: %p.' % [type, @opened[1..-1]] | |
291 | end |
|
295 | end | |
292 |
@out << '</ |
|
296 | @out << '</span>' | |
293 | @opened.pop |
|
297 | @opened.pop | |
294 | end |
|
298 | end | |
295 |
|
299 | |||
296 | else |
|
300 | else | |
297 | raise 'unknown token kind: %p' % [text] |
|
301 | raise 'unknown token kind: %p' % [text] | |
298 |
|
302 | |||
299 | end |
|
303 | end | |
300 | end |
|
304 | end | |
301 |
|
305 | |||
302 | end |
|
306 | end | |
303 |
|
307 | |||
304 | end |
|
308 | end | |
305 | end |
|
309 | end |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/css.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/css.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/css.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/css.rb |
@@ -1,133 +1,133 | |||||
1 | module CodeRay |
|
1 | module CodeRay | |
2 | module Encoders |
|
2 | module Encoders | |
3 |
|
3 | |||
4 | class HTML |
|
4 | class HTML | |
5 |
|
5 | |||
6 | module Output |
|
6 | module Output | |
7 |
|
7 | |||
8 | def numerize *args |
|
8 | def numerize *args | |
9 | clone.numerize!(*args) |
|
9 | clone.numerize!(*args) | |
10 | end |
|
10 | end | |
11 |
|
11 | |||
12 | =begin NUMERIZABLE_WRAPPINGS = { |
|
12 | =begin NUMERIZABLE_WRAPPINGS = { | |
13 | :table => [:div, :page, nil], |
|
13 | :table => [:div, :page, nil], | |
14 | :inline => :all, |
|
14 | :inline => :all, | |
15 | :list => [:div, :page, nil] |
|
15 | :list => [:div, :page, nil] | |
16 | } |
|
16 | } | |
17 | NUMERIZABLE_WRAPPINGS.default = :all |
|
17 | NUMERIZABLE_WRAPPINGS.default = :all | |
18 | =end |
|
18 | =end | |
19 | def numerize! mode = :table, options = {} |
|
19 | def numerize! mode = :table, options = {} | |
20 | return self unless mode |
|
20 | return self unless mode | |
21 |
|
21 | |||
22 | options = DEFAULT_OPTIONS.merge options |
|
22 | options = DEFAULT_OPTIONS.merge options | |
23 |
|
23 | |||
24 | start = options[:line_number_start] |
|
24 | start = options[:line_number_start] | |
25 | unless start.is_a? Integer |
|
25 | unless start.is_a? Integer | |
26 | raise ArgumentError, "Invalid value %p for :line_number_start; Integer expected." % start |
|
26 | raise ArgumentError, "Invalid value %p for :line_number_start; Integer expected." % start | |
27 | end |
|
27 | end | |
28 |
|
28 | |||
29 | #allowed_wrappings = NUMERIZABLE_WRAPPINGS[mode] |
|
29 | #allowed_wrappings = NUMERIZABLE_WRAPPINGS[mode] | |
30 | #unless allowed_wrappings == :all or allowed_wrappings.include? options[:wrap] |
|
30 | #unless allowed_wrappings == :all or allowed_wrappings.include? options[:wrap] | |
31 | # raise ArgumentError, "Can't numerize, :wrap must be in %p, but is %p" % [NUMERIZABLE_WRAPPINGS, options[:wrap]] |
|
31 | # raise ArgumentError, "Can't numerize, :wrap must be in %p, but is %p" % [NUMERIZABLE_WRAPPINGS, options[:wrap]] | |
32 | #end |
|
32 | #end | |
33 |
|
33 | |||
34 | bold_every = options[:bold_every] |
|
34 | bold_every = options[:bold_every] | |
35 | highlight_lines = options[:highlight_lines] |
|
35 | highlight_lines = options[:highlight_lines] | |
36 | bolding = |
|
36 | bolding = | |
37 | if bold_every == false && highlight_lines == nil |
|
37 | if bold_every == false && highlight_lines == nil | |
38 | proc { |line| line.to_s } |
|
38 | proc { |line| line.to_s } | |
39 | elsif highlight_lines.is_a? Enumerable |
|
39 | elsif highlight_lines.is_a? Enumerable | |
40 | highlight_lines = highlight_lines.to_set |
|
40 | highlight_lines = highlight_lines.to_set | |
41 | proc do |line| |
|
41 | proc do |line| | |
42 | if highlight_lines.include? line |
|
42 | if highlight_lines.include? line | |
43 | "<strong class=\"highlighted\">#{line}</strong>" # highlighted line numbers in bold |
|
43 | "<strong class=\"highlighted\">#{line}</strong>" # highlighted line numbers in bold | |
44 | else |
|
44 | else | |
45 | line.to_s |
|
45 | line.to_s | |
46 | end |
|
46 | end | |
47 | end |
|
47 | end | |
48 | elsif bold_every.is_a? Integer |
|
48 | elsif bold_every.is_a? Integer | |
49 | raise ArgumentError, ":bolding can't be 0." if bold_every == 0 |
|
49 | raise ArgumentError, ":bolding can't be 0." if bold_every == 0 | |
50 | proc do |line| |
|
50 | proc do |line| | |
51 | if line % bold_every == 0 |
|
51 | if line % bold_every == 0 | |
52 | "<strong>#{line}</strong>" # every bold_every-th number in bold |
|
52 | "<strong>#{line}</strong>" # every bold_every-th number in bold | |
53 | else |
|
53 | else | |
54 | line.to_s |
|
54 | line.to_s | |
55 | end |
|
55 | end | |
56 | end |
|
56 | end | |
57 | else |
|
57 | else | |
58 | raise ArgumentError, 'Invalid value %p for :bolding; false or Integer expected.' % bold_every |
|
58 | raise ArgumentError, 'Invalid value %p for :bolding; false or Integer expected.' % bold_every | |
59 | end |
|
59 | end | |
60 |
|
60 | |||
61 | case mode |
|
61 | case mode | |
62 | when :inline |
|
62 | when :inline | |
63 | max_width = (start + line_count).to_s.size |
|
63 | max_width = (start + line_count).to_s.size | |
64 | line_number = start |
|
64 | line_number = start | |
65 | gsub!(/^/) do |
|
65 | gsub!(/^/) do | |
66 | line_number_text = bolding.call line_number |
|
66 | line_number_text = bolding.call line_number | |
67 | indent = ' ' * (max_width - line_number.to_s.size) # TODO: Optimize (10^x) |
|
67 | indent = ' ' * (max_width - line_number.to_s.size) # TODO: Optimize (10^x) | |
68 | res = "<span class=\"no\">#{indent}#{line_number_text}</span> " |
|
68 | res = "<span class=\"no\">#{indent}#{line_number_text}</span> " | |
69 | line_number += 1 |
|
69 | line_number += 1 | |
70 | res |
|
70 | res | |
71 | end |
|
71 | end | |
72 |
|
72 | |||
73 | when :table |
|
73 | when :table | |
74 | # This is really ugly. |
|
74 | # This is really ugly. | |
75 | # Because even monospace fonts seem to have different heights when bold, |
|
75 | # Because even monospace fonts seem to have different heights when bold, | |
76 | # I make the newline bold, both in the code and the line numbers. |
|
76 | # I make the newline bold, both in the code and the line numbers. | |
77 | # FIXME Still not working perfect for Mr. Internet Exploder |
|
77 | # FIXME Still not working perfect for Mr. Internet Exploder | |
78 | line_numbers = (start ... start + line_count).to_a.map(&bolding).join("\n") |
|
78 | line_numbers = (start ... start + line_count).to_a.map(&bolding).join("\n") | |
79 | line_numbers << "\n" # also for Mr. MS Internet Exploder :-/ |
|
79 | line_numbers << "\n" # also for Mr. MS Internet Exploder :-/ | |
80 | line_numbers.gsub!(/\n/) { "<tt>\n</tt>" } |
|
80 | line_numbers.gsub!(/\n/) { "<tt>\n</tt>" } | |
81 |
|
81 | |||
82 | line_numbers_table_tpl = TABLE.apply('LINE_NUMBERS', line_numbers) |
|
82 | line_numbers_table_tpl = TABLE.apply('LINE_NUMBERS', line_numbers) | |
83 |
gsub!( |
|
83 | gsub!("</div>\n", '</div>') | |
84 |
gsub!( |
|
84 | gsub!("\n", "<tt>\n</tt>") | |
85 | wrap_in! line_numbers_table_tpl |
|
85 | wrap_in! line_numbers_table_tpl | |
86 | @wrapped_in = :div |
|
86 | @wrapped_in = :div | |
87 |
|
87 | |||
88 | when :list |
|
88 | when :list | |
89 | opened_tags = [] |
|
89 | opened_tags = [] | |
90 | gsub!(/^.*$\n?/) do |line| |
|
90 | gsub!(/^.*$\n?/) do |line| | |
91 | line.chomp! |
|
91 | line.chomp! | |
92 |
|
92 | |||
93 | open = opened_tags.join |
|
93 | open = opened_tags.join | |
94 | line.scan(%r!<(/)?span[^>]*>?!) do |close,| |
|
94 | line.scan(%r!<(/)?span[^>]*>?!) do |close,| | |
95 | if close |
|
95 | if close | |
96 | opened_tags.pop |
|
96 | opened_tags.pop | |
97 | else |
|
97 | else | |
98 | opened_tags << $& |
|
98 | opened_tags << $& | |
99 | end |
|
99 | end | |
100 | end |
|
100 | end | |
101 | close = '</span>' * opened_tags.size |
|
101 | close = '</span>' * opened_tags.size | |
102 |
|
102 | |||
103 | "<li>#{open}#{line}#{close}</li>\n" |
|
103 | "<li>#{open}#{line}#{close}</li>\n" | |
104 | end |
|
104 | end | |
105 | chomp!("\n") |
|
105 | chomp!("\n") | |
106 | wrap_in! LIST |
|
106 | wrap_in! LIST | |
107 | @wrapped_in = :div |
|
107 | @wrapped_in = :div | |
108 |
|
108 | |||
109 | else |
|
109 | else | |
110 | raise ArgumentError, 'Unknown value %p for mode: expected one of %p' % |
|
110 | raise ArgumentError, 'Unknown value %p for mode: expected one of %p' % | |
111 | [mode, [:table, :list, :inline]] |
|
111 | [mode, [:table, :list, :inline]] | |
112 | end |
|
112 | end | |
113 |
|
113 | |||
114 | self |
|
114 | self | |
115 | end |
|
115 | end | |
116 |
|
116 | |||
117 | def line_count |
|
117 | def line_count | |
118 | line_count = count("\n") |
|
118 | line_count = count("\n") | |
119 | position_of_last_newline = rindex(?\n) |
|
119 | position_of_last_newline = rindex(?\n) | |
120 | if position_of_last_newline |
|
120 | if position_of_last_newline | |
121 | after_last_newline = self[position_of_last_newline + 1 .. -1] |
|
121 | after_last_newline = self[position_of_last_newline + 1 .. -1] | |
122 | ends_with_newline = after_last_newline[/\A(?:<\/span>)*\z/] |
|
122 | ends_with_newline = after_last_newline[/\A(?:<\/span>)*\z/] | |
123 | line_count += 1 if not ends_with_newline |
|
123 | line_count += 1 if not ends_with_newline | |
124 | end |
|
124 | end | |
125 | line_count |
|
125 | line_count | |
126 | end |
|
126 | end | |
127 |
|
127 | |||
128 | end |
|
128 | end | |
129 |
|
129 | |||
130 | end |
|
130 | end | |
131 |
|
131 | |||
132 | end |
|
132 | end | |
133 | end |
|
133 | end |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/output.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/output.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/json.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/json.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/json.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/json.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/lines_of_code.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/lines_of_code.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/lines_of_code.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/lines_of_code.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/null.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/null.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/null.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/null.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/page.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/page.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/page.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/page.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/span.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/span.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/span.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/span.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/statistic.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/statistic.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/statistic.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/statistic.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/term.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/term.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/term.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/term.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/text.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/text.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/text.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/text.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/token_class_filter.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/token_class_filter.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/token_class_filter.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/token_class_filter.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/xml.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/xml.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/xml.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/xml.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/yaml.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/yaml.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/encoders/yaml.rb to vendor/gems/coderay-0.9.7/lib/coderay/encoders/yaml.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/for_redcloth.rb to vendor/gems/coderay-0.9.7/lib/coderay/for_redcloth.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/for_redcloth.rb to vendor/gems/coderay-0.9.7/lib/coderay/for_redcloth.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/helpers/file_type.rb to vendor/gems/coderay-0.9.7/lib/coderay/helpers/file_type.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/helpers/file_type.rb to vendor/gems/coderay-0.9.7/lib/coderay/helpers/file_type.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/helpers/gzip_simple.rb to vendor/gems/coderay-0.9.7/lib/coderay/helpers/gzip_simple.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/helpers/gzip_simple.rb to vendor/gems/coderay-0.9.7/lib/coderay/helpers/gzip_simple.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/helpers/plugin.rb to vendor/gems/coderay-0.9.7/lib/coderay/helpers/plugin.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/helpers/plugin.rb to vendor/gems/coderay-0.9.7/lib/coderay/helpers/plugin.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/helpers/word_list.rb to vendor/gems/coderay-0.9.7/lib/coderay/helpers/word_list.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/helpers/word_list.rb to vendor/gems/coderay-0.9.7/lib/coderay/helpers/word_list.rb |
@@ -1,292 +1,298 | |||||
1 | module CodeRay |
|
1 | module CodeRay | |
2 |
|
2 | |||
3 | require 'coderay/helpers/plugin' |
|
3 | require 'coderay/helpers/plugin' | |
4 |
|
4 | |||
5 | # = Scanners |
|
5 | # = Scanners | |
6 | # |
|
6 | # | |
7 | # This module holds the Scanner class and its subclasses. |
|
7 | # This module holds the Scanner class and its subclasses. | |
8 | # For example, the Ruby scanner is named CodeRay::Scanners::Ruby |
|
8 | # For example, the Ruby scanner is named CodeRay::Scanners::Ruby | |
9 | # can be found in coderay/scanners/ruby. |
|
9 | # can be found in coderay/scanners/ruby. | |
10 | # |
|
10 | # | |
11 | # Scanner also provides methods and constants for the register |
|
11 | # Scanner also provides methods and constants for the register | |
12 | # mechanism and the [] method that returns the Scanner class |
|
12 | # mechanism and the [] method that returns the Scanner class | |
13 | # belonging to the given lang. |
|
13 | # belonging to the given lang. | |
14 | # |
|
14 | # | |
15 | # See PluginHost. |
|
15 | # See PluginHost. | |
16 | module Scanners |
|
16 | module Scanners | |
17 | extend PluginHost |
|
17 | extend PluginHost | |
18 | plugin_path File.dirname(__FILE__), 'scanners' |
|
18 | plugin_path File.dirname(__FILE__), 'scanners' | |
19 |
|
19 | |||
20 | require 'strscan' |
|
20 | require 'strscan' | |
21 |
|
21 | |||
22 | # = Scanner |
|
22 | # = Scanner | |
23 | # |
|
23 | # | |
24 | # The base class for all Scanners. |
|
24 | # The base class for all Scanners. | |
25 | # |
|
25 | # | |
26 | # It is a subclass of Ruby's great +StringScanner+, which |
|
26 | # It is a subclass of Ruby's great +StringScanner+, which | |
27 | # makes it easy to access the scanning methods inside. |
|
27 | # makes it easy to access the scanning methods inside. | |
28 | # |
|
28 | # | |
29 | # It is also +Enumerable+, so you can use it like an Array of |
|
29 | # It is also +Enumerable+, so you can use it like an Array of | |
30 | # Tokens: |
|
30 | # Tokens: | |
31 | # |
|
31 | # | |
32 | # require 'coderay' |
|
32 | # require 'coderay' | |
33 | # |
|
33 | # | |
34 | # c_scanner = CodeRay::Scanners[:c].new "if (*p == '{') nest++;" |
|
34 | # c_scanner = CodeRay::Scanners[:c].new "if (*p == '{') nest++;" | |
35 | # |
|
35 | # | |
36 | # for text, kind in c_scanner |
|
36 | # for text, kind in c_scanner | |
37 | # puts text if kind == :operator |
|
37 | # puts text if kind == :operator | |
38 | # end |
|
38 | # end | |
39 | # |
|
39 | # | |
40 | # # prints: (*==)++; |
|
40 | # # prints: (*==)++; | |
41 | # |
|
41 | # | |
42 | # OK, this is a very simple example :) |
|
42 | # OK, this is a very simple example :) | |
43 | # You can also use +map+, +any?+, +find+ and even +sort_by+, |
|
43 | # You can also use +map+, +any?+, +find+ and even +sort_by+, | |
44 | # if you want. |
|
44 | # if you want. | |
45 | class Scanner < StringScanner |
|
45 | class Scanner < StringScanner | |
46 |
|
46 | |||
47 | extend Plugin |
|
47 | extend Plugin | |
48 | plugin_host Scanners |
|
48 | plugin_host Scanners | |
49 |
|
49 | |||
50 | # Raised if a Scanner fails while scanning |
|
50 | # Raised if a Scanner fails while scanning | |
51 | ScanError = Class.new(Exception) |
|
51 | ScanError = Class.new(Exception) | |
52 |
|
52 | |||
53 | require 'coderay/helpers/word_list' |
|
53 | require 'coderay/helpers/word_list' | |
54 |
|
54 | |||
55 | # The default options for all scanner classes. |
|
55 | # The default options for all scanner classes. | |
56 | # |
|
56 | # | |
57 | # Define @default_options for subclasses. |
|
57 | # Define @default_options for subclasses. | |
58 | DEFAULT_OPTIONS = { :stream => false } |
|
58 | DEFAULT_OPTIONS = { :stream => false } | |
59 |
|
59 | |||
60 | KINDS_NOT_LOC = [:comment, :doctype] |
|
60 | KINDS_NOT_LOC = [:comment, :doctype] | |
61 |
|
61 | |||
62 | class << self |
|
62 | class << self | |
63 |
|
63 | |||
64 | # Returns if the Scanner can be used in streaming mode. |
|
64 | # Returns if the Scanner can be used in streaming mode. | |
65 | def streamable? |
|
65 | def streamable? | |
66 | is_a? Streamable |
|
66 | is_a? Streamable | |
67 | end |
|
67 | end | |
68 |
|
68 | |||
69 | def normify code |
|
69 | def normify code | |
70 | code = code.to_s |
|
70 | code = code.to_s | |
71 | if code.respond_to? :force_encoding |
|
71 | if code.respond_to?(:encoding) && (code.encoding.name != 'UTF-8' || !code.valid_encoding?) | |
72 | debug, $DEBUG = $DEBUG, false |
|
72 | code = code.dup | |
73 | begin |
|
73 | original_encoding = code.encoding | |
74 |
|
|
74 | code.force_encoding 'Windows-1252' | |
75 | code[/\z/] # raises an ArgumentError when code contains a non-UTF-8 char |
|
75 | unless code.valid_encoding? | |
76 | rescue ArgumentError |
|
76 | code.force_encoding original_encoding | |
77 |
code. |
|
77 | if code.encoding.name == 'UTF-8' | |
78 | ensure |
|
78 | code.encode! 'UTF-16BE', :invalid => :replace, :undef => :replace, :replace => '?' | |
79 |
|
|
79 | end | |
|
80 | code.encode! 'UTF-8', :invalid => :replace, :undef => :replace, :replace => '?' | |||
80 | end |
|
81 | end | |
81 | end |
|
82 | end | |
82 | code.to_unix |
|
83 | code.to_unix | |
83 | end |
|
84 | end | |
84 |
|
85 | |||
85 | def file_extension extension = nil |
|
86 | def file_extension extension = nil | |
86 | if extension |
|
87 | if extension | |
87 | @file_extension = extension.to_s |
|
88 | @file_extension = extension.to_s | |
88 | else |
|
89 | else | |
89 | @file_extension ||= plugin_id.to_s |
|
90 | @file_extension ||= plugin_id.to_s | |
90 | end |
|
91 | end | |
91 | end |
|
92 | end | |
92 |
|
93 | |||
93 | end |
|
94 | end | |
94 |
|
95 | |||
95 | =begin |
|
96 | =begin | |
96 | ## Excluded for speed reasons; protected seems to make methods slow. |
|
97 | ## Excluded for speed reasons; protected seems to make methods slow. | |
97 |
|
98 | |||
98 | # Save the StringScanner methods from being called. |
|
99 | # Save the StringScanner methods from being called. | |
99 | # This would not be useful for highlighting. |
|
100 | # This would not be useful for highlighting. | |
100 | strscan_public_methods = |
|
101 | strscan_public_methods = | |
101 | StringScanner.instance_methods - |
|
102 | StringScanner.instance_methods - | |
102 | StringScanner.ancestors[1].instance_methods |
|
103 | StringScanner.ancestors[1].instance_methods | |
103 | protected(*strscan_public_methods) |
|
104 | protected(*strscan_public_methods) | |
104 | =end |
|
105 | =end | |
105 |
|
106 | |||
106 | # Create a new Scanner. |
|
107 | # Create a new Scanner. | |
107 | # |
|
108 | # | |
108 | # * +code+ is the input String and is handled by the superclass |
|
109 | # * +code+ is the input String and is handled by the superclass | |
109 | # StringScanner. |
|
110 | # StringScanner. | |
110 | # * +options+ is a Hash with Symbols as keys. |
|
111 | # * +options+ is a Hash with Symbols as keys. | |
111 | # It is merged with the default options of the class (you can |
|
112 | # It is merged with the default options of the class (you can | |
112 | # overwrite default options here.) |
|
113 | # overwrite default options here.) | |
113 | # * +block+ is the callback for streamed highlighting. |
|
114 | # * +block+ is the callback for streamed highlighting. | |
114 | # |
|
115 | # | |
115 | # If you set :stream to +true+ in the options, the Scanner uses a |
|
116 | # If you set :stream to +true+ in the options, the Scanner uses a | |
116 | # TokenStream with the +block+ as callback to handle the tokens. |
|
117 | # TokenStream with the +block+ as callback to handle the tokens. | |
117 | # |
|
118 | # | |
118 | # Else, a Tokens object is used. |
|
119 | # Else, a Tokens object is used. | |
119 | def initialize code='', options = {}, &block |
|
120 | def initialize code='', options = {}, &block | |
120 | raise "I am only the basic Scanner class. I can't scan "\ |
|
121 | raise "I am only the basic Scanner class. I can't scan "\ | |
121 | "anything. :( Use my subclasses." if self.class == Scanner |
|
122 | "anything. :( Use my subclasses." if self.class == Scanner | |
122 |
|
123 | |||
123 | @options = self.class::DEFAULT_OPTIONS.merge options |
|
124 | @options = self.class::DEFAULT_OPTIONS.merge options | |
124 |
|
125 | |||
125 | super Scanner.normify(code) |
|
126 | super Scanner.normify(code) | |
126 |
|
127 | |||
127 | @tokens = options[:tokens] |
|
128 | @tokens = options[:tokens] | |
128 | if @options[:stream] |
|
129 | if @options[:stream] | |
129 | warn "warning in CodeRay::Scanner.new: :stream is set, "\ |
|
130 | warn "warning in CodeRay::Scanner.new: :stream is set, "\ | |
130 | "but no block was given" unless block_given? |
|
131 | "but no block was given" unless block_given? | |
131 | raise NotStreamableError, self unless kind_of? Streamable |
|
132 | raise NotStreamableError, self unless kind_of? Streamable | |
132 | @tokens ||= TokenStream.new(&block) |
|
133 | @tokens ||= TokenStream.new(&block) | |
133 | else |
|
134 | else | |
134 | warn "warning in CodeRay::Scanner.new: Block given, "\ |
|
135 | warn "warning in CodeRay::Scanner.new: Block given, "\ | |
135 | "but :stream is #{@options[:stream]}" if block_given? |
|
136 | "but :stream is #{@options[:stream]}" if block_given? | |
136 | @tokens ||= Tokens.new |
|
137 | @tokens ||= Tokens.new | |
137 | end |
|
138 | end | |
138 | @tokens.scanner = self |
|
139 | @tokens.scanner = self | |
139 |
|
140 | |||
140 | setup |
|
141 | setup | |
141 | end |
|
142 | end | |
142 |
|
143 | |||
143 | def reset |
|
144 | def reset | |
144 | super |
|
145 | super | |
145 | reset_instance |
|
146 | reset_instance | |
146 | end |
|
147 | end | |
147 |
|
148 | |||
148 | def string= code |
|
149 | def string= code | |
149 | code = Scanner.normify(code) |
|
150 | code = Scanner.normify(code) | |
150 | super code |
|
151 | if defined?(RUBY_DESCRIPTION) && RUBY_DESCRIPTION['rubinius 1.0.1'] | |
|
152 | reset_state | |||
|
153 | @string = code | |||
|
154 | else | |||
|
155 | super code | |||
|
156 | end | |||
151 | reset_instance |
|
157 | reset_instance | |
152 | end |
|
158 | end | |
153 |
|
159 | |||
154 | # More mnemonic accessor name for the input string. |
|
160 | # More mnemonic accessor name for the input string. | |
155 | alias code string |
|
161 | alias code string | |
156 | alias code= string= |
|
162 | alias code= string= | |
157 |
|
163 | |||
158 | # Returns the Plugin ID for this scanner. |
|
164 | # Returns the Plugin ID for this scanner. | |
159 | def lang |
|
165 | def lang | |
160 | self.class.plugin_id |
|
166 | self.class.plugin_id | |
161 | end |
|
167 | end | |
162 |
|
168 | |||
163 | # Scans the code and returns all tokens in a Tokens object. |
|
169 | # Scans the code and returns all tokens in a Tokens object. | |
164 | def tokenize new_string=nil, options = {} |
|
170 | def tokenize new_string=nil, options = {} | |
165 | options = @options.merge(options) |
|
171 | options = @options.merge(options) | |
166 | self.string = new_string if new_string |
|
172 | self.string = new_string if new_string | |
167 | @cached_tokens = |
|
173 | @cached_tokens = | |
168 | if @options[:stream] # :stream must have been set already |
|
174 | if @options[:stream] # :stream must have been set already | |
169 | reset unless new_string |
|
175 | reset unless new_string | |
170 | scan_tokens @tokens, options |
|
176 | scan_tokens @tokens, options | |
171 | @tokens |
|
177 | @tokens | |
172 | else |
|
178 | else | |
173 | scan_tokens @tokens, options |
|
179 | scan_tokens @tokens, options | |
174 | end |
|
180 | end | |
175 | end |
|
181 | end | |
176 |
|
182 | |||
177 | def tokens |
|
183 | def tokens | |
178 | @cached_tokens ||= tokenize |
|
184 | @cached_tokens ||= tokenize | |
179 | end |
|
185 | end | |
180 |
|
186 | |||
181 | # Whether the scanner is in streaming mode. |
|
187 | # Whether the scanner is in streaming mode. | |
182 | def streaming? |
|
188 | def streaming? | |
183 | !!@options[:stream] |
|
189 | !!@options[:stream] | |
184 | end |
|
190 | end | |
185 |
|
191 | |||
186 | # Traverses the tokens. |
|
192 | # Traverses the tokens. | |
187 | def each &block |
|
193 | def each &block | |
188 | raise ArgumentError, |
|
194 | raise ArgumentError, | |
189 | 'Cannot traverse TokenStream.' if @options[:stream] |
|
195 | 'Cannot traverse TokenStream.' if @options[:stream] | |
190 | tokens.each(&block) |
|
196 | tokens.each(&block) | |
191 | end |
|
197 | end | |
192 | include Enumerable |
|
198 | include Enumerable | |
193 |
|
199 | |||
194 | # The current line position of the scanner. |
|
200 | # The current line position of the scanner. | |
195 | # |
|
201 | # | |
196 | # Beware, this is implemented inefficiently. It should be used |
|
202 | # Beware, this is implemented inefficiently. It should be used | |
197 | # for debugging only. |
|
203 | # for debugging only. | |
198 | def line |
|
204 | def line | |
199 | string[0..pos].count("\n") + 1 |
|
205 | string[0..pos].count("\n") + 1 | |
200 | end |
|
206 | end | |
201 |
|
207 | |||
202 | def column pos = self.pos |
|
208 | def column pos = self.pos | |
203 | return 0 if pos <= 0 |
|
209 | return 0 if pos <= 0 | |
204 | string = string() |
|
210 | string = string() | |
205 | if string.respond_to?(:bytesize) && (defined?(@bin_string) || string.bytesize != string.size) |
|
211 | if string.respond_to?(:bytesize) && (defined?(@bin_string) || string.bytesize != string.size) | |
206 | @bin_string ||= string.dup.force_encoding('binary') |
|
212 | @bin_string ||= string.dup.force_encoding('binary') | |
207 | string = @bin_string |
|
213 | string = @bin_string | |
208 | end |
|
214 | end | |
209 | pos - (string.rindex(?\n, pos) || 0) |
|
215 | pos - (string.rindex(?\n, pos) || 0) | |
210 | end |
|
216 | end | |
211 |
|
217 | |||
212 | def marshal_dump |
|
218 | def marshal_dump | |
213 | @options |
|
219 | @options | |
214 | end |
|
220 | end | |
215 |
|
221 | |||
216 | def marshal_load options |
|
222 | def marshal_load options | |
217 | @options = options |
|
223 | @options = options | |
218 | end |
|
224 | end | |
219 |
|
225 | |||
220 | protected |
|
226 | protected | |
221 |
|
227 | |||
222 | # Can be implemented by subclasses to do some initialization |
|
228 | # Can be implemented by subclasses to do some initialization | |
223 | # that has to be done once per instance. |
|
229 | # that has to be done once per instance. | |
224 | # |
|
230 | # | |
225 | # Use reset for initialization that has to be done once per |
|
231 | # Use reset for initialization that has to be done once per | |
226 | # scan. |
|
232 | # scan. | |
227 | def setup |
|
233 | def setup | |
228 | end |
|
234 | end | |
229 |
|
235 | |||
230 | # This is the central method, and commonly the only one a |
|
236 | # This is the central method, and commonly the only one a | |
231 | # subclass implements. |
|
237 | # subclass implements. | |
232 | # |
|
238 | # | |
233 | # Subclasses must implement this method; it must return +tokens+ |
|
239 | # Subclasses must implement this method; it must return +tokens+ | |
234 | # and must only use Tokens#<< for storing scanned tokens! |
|
240 | # and must only use Tokens#<< for storing scanned tokens! | |
235 | def scan_tokens tokens, options |
|
241 | def scan_tokens tokens, options | |
236 | raise NotImplementedError, |
|
242 | raise NotImplementedError, | |
237 | "#{self.class}#scan_tokens not implemented." |
|
243 | "#{self.class}#scan_tokens not implemented." | |
238 | end |
|
244 | end | |
239 |
|
245 | |||
240 | def reset_instance |
|
246 | def reset_instance | |
241 | @tokens.clear unless @options[:keep_tokens] |
|
247 | @tokens.clear unless @options[:keep_tokens] | |
242 | @cached_tokens = nil |
|
248 | @cached_tokens = nil | |
243 | @bin_string = nil if defined? @bin_string |
|
249 | @bin_string = nil if defined? @bin_string | |
244 | end |
|
250 | end | |
245 |
|
251 | |||
246 | # Scanner error with additional status information |
|
252 | # Scanner error with additional status information | |
247 | def raise_inspect msg, tokens, state = 'No state given!', ambit = 30 |
|
253 | def raise_inspect msg, tokens, state = 'No state given!', ambit = 30 | |
248 | raise ScanError, <<-EOE % [ |
|
254 | raise ScanError, <<-EOE % [ | |
249 |
|
255 | |||
250 |
|
256 | |||
251 | ***ERROR in %s: %s (after %d tokens) |
|
257 | ***ERROR in %s: %s (after %d tokens) | |
252 |
|
258 | |||
253 | tokens: |
|
259 | tokens: | |
254 | %s |
|
260 | %s | |
255 |
|
261 | |||
256 | current line: %d column: %d pos: %d |
|
262 | current line: %d column: %d pos: %d | |
257 | matched: %p state: %p |
|
263 | matched: %p state: %p | |
258 | bol? = %p, eos? = %p |
|
264 | bol? = %p, eos? = %p | |
259 |
|
265 | |||
260 | surrounding code: |
|
266 | surrounding code: | |
261 | %p ~~ %p |
|
267 | %p ~~ %p | |
262 |
|
268 | |||
263 |
|
269 | |||
264 | ***ERROR*** |
|
270 | ***ERROR*** | |
265 |
|
271 | |||
266 | EOE |
|
272 | EOE | |
267 | File.basename(caller[0]), |
|
273 | File.basename(caller[0]), | |
268 | msg, |
|
274 | msg, | |
269 | tokens.size, |
|
275 | tokens.size, | |
270 | tokens.last(10).map { |t| t.inspect }.join("\n"), |
|
276 | tokens.last(10).map { |t| t.inspect }.join("\n"), | |
271 | line, column, pos, |
|
277 | line, column, pos, | |
272 | matched, state, bol?, eos?, |
|
278 | matched, state, bol?, eos?, | |
273 | string[pos - ambit, ambit], |
|
279 | string[pos - ambit, ambit], | |
274 | string[pos, ambit], |
|
280 | string[pos, ambit], | |
275 | ] |
|
281 | ] | |
276 | end |
|
282 | end | |
277 |
|
283 | |||
278 | end |
|
284 | end | |
279 |
|
285 | |||
280 | end |
|
286 | end | |
281 | end |
|
287 | end | |
282 |
|
288 | |||
283 | class String |
|
289 | class String | |
284 | # I love this hack. It seems to silence all dos/unix/mac newline problems. |
|
290 | # I love this hack. It seems to silence all dos/unix/mac newline problems. | |
285 | def to_unix |
|
291 | def to_unix | |
286 | if index ?\r |
|
292 | if index ?\r | |
287 | gsub(/\r\n?/, "\n") |
|
293 | gsub(/\r\n?/, "\n") | |
288 | else |
|
294 | else | |
289 | self |
|
295 | self | |
290 | end |
|
296 | end | |
291 | end |
|
297 | end | |
292 | end |
|
298 | end |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/_map.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/_map.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/_map.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/_map.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/c.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/c.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/c.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/c.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/cpp.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/cpp.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/cpp.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/cpp.rb |
@@ -1,210 +1,209 | |||||
1 | module CodeRay |
|
1 | module CodeRay | |
2 | module Scanners |
|
2 | module Scanners | |
3 |
|
3 | |||
4 | class CSS < Scanner |
|
4 | class CSS < Scanner | |
5 |
|
5 | |||
6 | register_for :css |
|
6 | register_for :css | |
7 |
|
7 | |||
8 | KINDS_NOT_LOC = [ |
|
8 | KINDS_NOT_LOC = [ | |
9 | :comment, |
|
9 | :comment, | |
10 | :class, :pseudo_class, :type, |
|
10 | :class, :pseudo_class, :type, | |
11 | :constant, :directive, |
|
11 | :constant, :directive, | |
12 | :key, :value, :operator, :color, :float, |
|
12 | :key, :value, :operator, :color, :float, | |
13 | :error, :important, |
|
13 | :error, :important, | |
14 | ] |
|
14 | ] | |
15 |
|
15 | |||
16 | module RE |
|
16 | module RE | |
17 | NonASCII = /[\x80-\xFF]/ |
|
|||
18 | Hex = /[0-9a-fA-F]/ |
|
17 | Hex = /[0-9a-fA-F]/ | |
19 | Unicode = /\\#{Hex}{1,6}(?:\r\n|\s)?/ # differs from standard because it allows uppercase hex too |
|
18 | Unicode = /\\#{Hex}{1,6}(?:\r\n|\s)?/ # differs from standard because it allows uppercase hex too | |
20 | Escape = /#{Unicode}|\\[^\r\n\f0-9a-fA-F]/ |
|
19 | Escape = /#{Unicode}|\\[^\r\n\f0-9a-fA-F]/ | |
21 |
NMChar = /[-_a-zA-Z0-9]|#{ |
|
20 | NMChar = /[-_a-zA-Z0-9]|#{Escape}/ | |
22 |
NMStart = /[_a-zA-Z]|#{ |
|
21 | NMStart = /[_a-zA-Z]|#{Escape}/ | |
23 | NL = /\r\n|\r|\n|\f/ |
|
22 | NL = /\r\n|\r|\n|\f/ | |
24 | String1 = /"(?:[^\n\r\f\\"]|\\#{NL}|#{Escape})*"?/ # FIXME: buggy regexp |
|
23 | String1 = /"(?:[^\n\r\f\\"]|\\#{NL}|#{Escape})*"?/ # FIXME: buggy regexp | |
25 | String2 = /'(?:[^\n\r\f\\']|\\#{NL}|#{Escape})*'?/ # FIXME: buggy regexp |
|
24 | String2 = /'(?:[^\n\r\f\\']|\\#{NL}|#{Escape})*'?/ # FIXME: buggy regexp | |
26 | String = /#{String1}|#{String2}/ |
|
25 | String = /#{String1}|#{String2}/ | |
27 |
|
26 | |||
28 | HexColor = /#(?:#{Hex}{6}|#{Hex}{3})/ |
|
27 | HexColor = /#(?:#{Hex}{6}|#{Hex}{3})/ | |
29 | Color = /#{HexColor}/ |
|
28 | Color = /#{HexColor}/ | |
30 |
|
29 | |||
31 | Num = /-?(?:[0-9]+|[0-9]*\.[0-9]+)/ |
|
30 | Num = /-?(?:[0-9]+|[0-9]*\.[0-9]+)/ | |
32 | Name = /#{NMChar}+/ |
|
31 | Name = /#{NMChar}+/ | |
33 | Ident = /-?#{NMStart}#{NMChar}*/ |
|
32 | Ident = /-?#{NMStart}#{NMChar}*/ | |
34 | AtKeyword = /@#{Ident}/ |
|
33 | AtKeyword = /@#{Ident}/ | |
35 | Percentage = /#{Num}%/ |
|
34 | Percentage = /#{Num}%/ | |
36 |
|
35 | |||
37 | reldimensions = %w[em ex px] |
|
36 | reldimensions = %w[em ex px] | |
38 | absdimensions = %w[in cm mm pt pc] |
|
37 | absdimensions = %w[in cm mm pt pc] | |
39 | Unit = Regexp.union(*(reldimensions + absdimensions)) |
|
38 | Unit = Regexp.union(*(reldimensions + absdimensions)) | |
40 |
|
39 | |||
41 | Dimension = /#{Num}#{Unit}/ |
|
40 | Dimension = /#{Num}#{Unit}/ | |
42 |
|
41 | |||
43 | Comment = %r! /\* (?: .*? \*/ | .* ) !mx |
|
42 | Comment = %r! /\* (?: .*? \*/ | .* ) !mx | |
44 | Function = /(?:url|alpha)\((?:[^)\n\r\f]|\\\))*\)?/ |
|
43 | Function = /(?:url|alpha)\((?:[^)\n\r\f]|\\\))*\)?/ | |
45 |
|
44 | |||
46 | Id = /##{Name}/ |
|
45 | Id = /##{Name}/ | |
47 | Class = /\.#{Name}/ |
|
46 | Class = /\.#{Name}/ | |
48 | PseudoClass = /:#{Name}/ |
|
47 | PseudoClass = /:#{Name}/ | |
49 | AttributeSelector = /\[[^\]]*\]?/ |
|
48 | AttributeSelector = /\[[^\]]*\]?/ | |
50 |
|
49 | |||
51 | end |
|
50 | end | |
52 |
|
51 | |||
53 | def scan_tokens tokens, options |
|
52 | def scan_tokens tokens, options | |
54 |
|
53 | |||
55 | value_expected = nil |
|
54 | value_expected = nil | |
56 | states = [:initial] |
|
55 | states = [:initial] | |
57 |
|
56 | |||
58 | until eos? |
|
57 | until eos? | |
59 |
|
58 | |||
60 | kind = nil |
|
59 | kind = nil | |
61 | match = nil |
|
60 | match = nil | |
62 |
|
61 | |||
63 | if scan(/\s+/) |
|
62 | if scan(/\s+/) | |
64 | kind = :space |
|
63 | kind = :space | |
65 |
|
64 | |||
66 | elsif case states.last |
|
65 | elsif case states.last | |
67 | when :initial, :media |
|
66 | when :initial, :media | |
68 | if scan(/(?>#{RE::Ident})(?!\()|\*/ox) |
|
67 | if scan(/(?>#{RE::Ident})(?!\()|\*/ox) | |
69 | kind = :type |
|
68 | kind = :type | |
70 | elsif scan RE::Class |
|
69 | elsif scan RE::Class | |
71 | kind = :class |
|
70 | kind = :class | |
72 | elsif scan RE::Id |
|
71 | elsif scan RE::Id | |
73 | kind = :constant |
|
72 | kind = :constant | |
74 | elsif scan RE::PseudoClass |
|
73 | elsif scan RE::PseudoClass | |
75 | kind = :pseudo_class |
|
74 | kind = :pseudo_class | |
76 | elsif match = scan(RE::AttributeSelector) |
|
75 | elsif match = scan(RE::AttributeSelector) | |
77 | # TODO: Improve highlighting inside of attribute selectors. |
|
76 | # TODO: Improve highlighting inside of attribute selectors. | |
78 | tokens << [:open, :string] |
|
77 | tokens << [:open, :string] | |
79 | tokens << [match[0,1], :delimiter] |
|
78 | tokens << [match[0,1], :delimiter] | |
80 | tokens << [match[1..-2], :content] if match.size > 2 |
|
79 | tokens << [match[1..-2], :content] if match.size > 2 | |
81 | tokens << [match[-1,1], :delimiter] if match[-1] == ?] |
|
80 | tokens << [match[-1,1], :delimiter] if match[-1] == ?] | |
82 | tokens << [:close, :string] |
|
81 | tokens << [:close, :string] | |
83 | next |
|
82 | next | |
84 | elsif match = scan(/@media/) |
|
83 | elsif match = scan(/@media/) | |
85 | kind = :directive |
|
84 | kind = :directive | |
86 | states.push :media_before_name |
|
85 | states.push :media_before_name | |
87 | end |
|
86 | end | |
88 |
|
87 | |||
89 | when :block |
|
88 | when :block | |
90 | if scan(/(?>#{RE::Ident})(?!\()/ox) |
|
89 | if scan(/(?>#{RE::Ident})(?!\()/ox) | |
91 | if value_expected |
|
90 | if value_expected | |
92 | kind = :value |
|
91 | kind = :value | |
93 | else |
|
92 | else | |
94 | kind = :key |
|
93 | kind = :key | |
95 | end |
|
94 | end | |
96 | end |
|
95 | end | |
97 |
|
96 | |||
98 | when :media_before_name |
|
97 | when :media_before_name | |
99 | if scan RE::Ident |
|
98 | if scan RE::Ident | |
100 | kind = :type |
|
99 | kind = :type | |
101 | states[-1] = :media_after_name |
|
100 | states[-1] = :media_after_name | |
102 | end |
|
101 | end | |
103 |
|
102 | |||
104 | when :media_after_name |
|
103 | when :media_after_name | |
105 | if scan(/\{/) |
|
104 | if scan(/\{/) | |
106 | kind = :operator |
|
105 | kind = :operator | |
107 | states[-1] = :media |
|
106 | states[-1] = :media | |
108 | end |
|
107 | end | |
109 |
|
108 | |||
110 | when :comment |
|
109 | when :comment | |
111 | if scan(/(?:[^*\s]|\*(?!\/))+/) |
|
110 | if scan(/(?:[^*\s]|\*(?!\/))+/) | |
112 | kind = :comment |
|
111 | kind = :comment | |
113 | elsif scan(/\*\//) |
|
112 | elsif scan(/\*\//) | |
114 | kind = :comment |
|
113 | kind = :comment | |
115 | states.pop |
|
114 | states.pop | |
116 | elsif scan(/\s+/) |
|
115 | elsif scan(/\s+/) | |
117 | kind = :space |
|
116 | kind = :space | |
118 | end |
|
117 | end | |
119 |
|
118 | |||
120 | else |
|
119 | else | |
121 | raise_inspect 'Unknown state', tokens |
|
120 | raise_inspect 'Unknown state', tokens | |
122 |
|
121 | |||
123 | end |
|
122 | end | |
124 |
|
123 | |||
125 | elsif scan(/\/\*/) |
|
124 | elsif scan(/\/\*/) | |
126 | kind = :comment |
|
125 | kind = :comment | |
127 | states.push :comment |
|
126 | states.push :comment | |
128 |
|
127 | |||
129 | elsif scan(/\{/) |
|
128 | elsif scan(/\{/) | |
130 | value_expected = false |
|
129 | value_expected = false | |
131 | kind = :operator |
|
130 | kind = :operator | |
132 | states.push :block |
|
131 | states.push :block | |
133 |
|
132 | |||
134 | elsif scan(/\}/) |
|
133 | elsif scan(/\}/) | |
135 | value_expected = false |
|
134 | value_expected = false | |
136 | if states.last == :block || states.last == :media |
|
135 | if states.last == :block || states.last == :media | |
137 | kind = :operator |
|
136 | kind = :operator | |
138 | states.pop |
|
137 | states.pop | |
139 | else |
|
138 | else | |
140 | kind = :error |
|
139 | kind = :error | |
141 | end |
|
140 | end | |
142 |
|
141 | |||
143 | elsif match = scan(/#{RE::String}/o) |
|
142 | elsif match = scan(/#{RE::String}/o) | |
144 | tokens << [:open, :string] |
|
143 | tokens << [:open, :string] | |
145 | tokens << [match[0, 1], :delimiter] |
|
144 | tokens << [match[0, 1], :delimiter] | |
146 | tokens << [match[1..-2], :content] if match.size > 2 |
|
145 | tokens << [match[1..-2], :content] if match.size > 2 | |
147 | tokens << [match[-1, 1], :delimiter] if match.size >= 2 |
|
146 | tokens << [match[-1, 1], :delimiter] if match.size >= 2 | |
148 | tokens << [:close, :string] |
|
147 | tokens << [:close, :string] | |
149 | next |
|
148 | next | |
150 |
|
149 | |||
151 | elsif match = scan(/#{RE::Function}/o) |
|
150 | elsif match = scan(/#{RE::Function}/o) | |
152 | tokens << [:open, :string] |
|
151 | tokens << [:open, :string] | |
153 | start = match[/^\w+\(/] |
|
152 | start = match[/^\w+\(/] | |
154 | tokens << [start, :delimiter] |
|
153 | tokens << [start, :delimiter] | |
155 | if match[-1] == ?) |
|
154 | if match[-1] == ?) | |
156 | tokens << [match[start.size..-2], :content] |
|
155 | tokens << [match[start.size..-2], :content] | |
157 | tokens << [')', :delimiter] |
|
156 | tokens << [')', :delimiter] | |
158 | else |
|
157 | else | |
159 | tokens << [match[start.size..-1], :content] |
|
158 | tokens << [match[start.size..-1], :content] | |
160 | end |
|
159 | end | |
161 | tokens << [:close, :string] |
|
160 | tokens << [:close, :string] | |
162 | next |
|
161 | next | |
163 |
|
162 | |||
164 | elsif scan(/(?: #{RE::Dimension} | #{RE::Percentage} | #{RE::Num} )/ox) |
|
163 | elsif scan(/(?: #{RE::Dimension} | #{RE::Percentage} | #{RE::Num} )/ox) | |
165 | kind = :float |
|
164 | kind = :float | |
166 |
|
165 | |||
167 | elsif scan(/#{RE::Color}/o) |
|
166 | elsif scan(/#{RE::Color}/o) | |
168 | kind = :color |
|
167 | kind = :color | |
169 |
|
168 | |||
170 | elsif scan(/! *important/) |
|
169 | elsif scan(/! *important/) | |
171 | kind = :important |
|
170 | kind = :important | |
172 |
|
171 | |||
173 | elsif scan(/rgb\([^()\n]*\)?/) |
|
172 | elsif scan(/rgb\([^()\n]*\)?/) | |
174 | kind = :color |
|
173 | kind = :color | |
175 |
|
174 | |||
176 | elsif scan(/#{RE::AtKeyword}/o) |
|
175 | elsif scan(/#{RE::AtKeyword}/o) | |
177 | kind = :directive |
|
176 | kind = :directive | |
178 |
|
177 | |||
179 | elsif match = scan(/ [+>:;,.=()\/] /x) |
|
178 | elsif match = scan(/ [+>:;,.=()\/] /x) | |
180 | if match == ':' |
|
179 | if match == ':' | |
181 | value_expected = true |
|
180 | value_expected = true | |
182 | elsif match == ';' |
|
181 | elsif match == ';' | |
183 | value_expected = false |
|
182 | value_expected = false | |
184 | end |
|
183 | end | |
185 | kind = :operator |
|
184 | kind = :operator | |
186 |
|
185 | |||
187 | else |
|
186 | else | |
188 | getch |
|
187 | getch | |
189 | kind = :error |
|
188 | kind = :error | |
190 |
|
189 | |||
191 | end |
|
190 | end | |
192 |
|
191 | |||
193 | match ||= matched |
|
192 | match ||= matched | |
194 | if $CODERAY_DEBUG and not kind |
|
193 | if $CODERAY_DEBUG and not kind | |
195 | raise_inspect 'Error token %p in line %d' % |
|
194 | raise_inspect 'Error token %p in line %d' % | |
196 | [[match, kind], line], tokens |
|
195 | [[match, kind], line], tokens | |
197 | end |
|
196 | end | |
198 | raise_inspect 'Empty token', tokens unless match |
|
197 | raise_inspect 'Empty token', tokens unless match | |
199 |
|
198 | |||
200 | tokens << [match, kind] |
|
199 | tokens << [match, kind] | |
201 |
|
200 | |||
202 | end |
|
201 | end | |
203 |
|
202 | |||
204 | tokens |
|
203 | tokens | |
205 | end |
|
204 | end | |
206 |
|
205 | |||
207 | end |
|
206 | end | |
208 |
|
207 | |||
209 | end |
|
208 | end | |
210 | end |
|
209 | end |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/debug.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/debug.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/debug.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/debug.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/delphi.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/delphi.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/delphi.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/delphi.rb |
@@ -1,105 +1,110 | |||||
1 | module CodeRay |
|
1 | module CodeRay | |
2 | module Scanners |
|
2 | module Scanners | |
3 |
|
3 | |||
4 | class Diff < Scanner |
|
4 | class Diff < Scanner | |
5 |
|
5 | |||
6 | register_for :diff |
|
6 | register_for :diff | |
7 | title 'diff output' |
|
7 | title 'diff output' | |
8 |
|
8 | |||
9 | def scan_tokens tokens, options |
|
9 | def scan_tokens tokens, options | |
10 |
|
10 | |||
11 | line_kind = nil |
|
11 | line_kind = nil | |
12 | state = :initial |
|
12 | state = :initial | |
13 |
|
13 | |||
14 | until eos? |
|
14 | until eos? | |
15 | kind = match = nil |
|
15 | kind = match = nil | |
16 |
|
16 | |||
17 | if match = scan(/\n/) |
|
17 | if match = scan(/\n/) | |
18 | if line_kind |
|
18 | if line_kind | |
19 | tokens << [:end_line, line_kind] |
|
19 | tokens << [:end_line, line_kind] | |
20 | line_kind = nil |
|
20 | line_kind = nil | |
21 | end |
|
21 | end | |
22 | tokens << [match, :space] |
|
22 | tokens << [match, :space] | |
23 | next |
|
23 | next | |
24 | end |
|
24 | end | |
25 |
|
25 | |||
26 | case state |
|
26 | case state | |
27 |
|
27 | |||
28 | when :initial |
|
28 | when :initial | |
29 | if match = scan(/--- |\+\+\+ |=+|_+/) |
|
29 | if match = scan(/--- |\+\+\+ |=+|_+/) | |
30 | tokens << [:begin_line, line_kind = :head] |
|
30 | tokens << [:begin_line, line_kind = :head] | |
31 | tokens << [match, :head] |
|
31 | tokens << [match, :head] | |
32 | next unless match = scan(/.+/) |
|
32 | next unless match = scan(/.+/) | |
33 | kind = :plain |
|
33 | kind = :plain | |
34 | elsif match = scan(/Index: |Property changes on: /) |
|
34 | elsif match = scan(/Index: |Property changes on: /) | |
35 | tokens << [:begin_line, line_kind = :head] |
|
35 | tokens << [:begin_line, line_kind = :head] | |
36 | tokens << [match, :head] |
|
36 | tokens << [match, :head] | |
37 | next unless match = scan(/.+/) |
|
37 | next unless match = scan(/.+/) | |
38 | kind = :plain |
|
38 | kind = :plain | |
39 | elsif match = scan(/Added: /) |
|
39 | elsif match = scan(/Added: /) | |
40 | tokens << [:begin_line, line_kind = :head] |
|
40 | tokens << [:begin_line, line_kind = :head] | |
41 | tokens << [match, :head] |
|
41 | tokens << [match, :head] | |
42 | next unless match = scan(/.+/) |
|
42 | next unless match = scan(/.+/) | |
43 | kind = :plain |
|
43 | kind = :plain | |
44 | state = :added |
|
44 | state = :added | |
45 | elsif match = scan(/\\ /) |
|
45 | elsif match = scan(/\\ /) | |
46 | tokens << [:begin_line, line_kind = :change] |
|
46 | tokens << [:begin_line, line_kind = :change] | |
47 | tokens << [match, :change] |
|
47 | tokens << [match, :change] | |
48 | next unless match = scan(/.+/) |
|
48 | next unless match = scan(/.+/) | |
49 | kind = :plain |
|
49 | kind = :plain | |
50 |
elsif scan(/ |
|
50 | elsif match = scan(/@@(?>[^@\n]*)@@/) | |
51 | tokens << [:begin_line, line_kind = :change] |
|
51 | if check(/\n|$/) | |
52 |
tokens << [ |
|
52 | tokens << [:begin_line, line_kind = :change] | |
53 | tokens << [self[2], :plain] |
|
53 | else | |
54 |
tokens << [ |
|
54 | tokens << [:open, :change] | |
|
55 | end | |||
|
56 | tokens << [match[0,2], :change] | |||
|
57 | tokens << [match[2...-2], :plain] | |||
|
58 | tokens << [match[-2,2], :change] | |||
|
59 | tokens << [:close, :change] unless line_kind | |||
55 | next unless match = scan(/.+/) |
|
60 | next unless match = scan(/.+/) | |
56 | kind = :plain |
|
61 | kind = :plain | |
57 | elsif match = scan(/\+/) |
|
62 | elsif match = scan(/\+/) | |
58 | tokens << [:begin_line, line_kind = :insert] |
|
63 | tokens << [:begin_line, line_kind = :insert] | |
59 | tokens << [match, :insert] |
|
64 | tokens << [match, :insert] | |
60 | next unless match = scan(/.+/) |
|
65 | next unless match = scan(/.+/) | |
61 | kind = :plain |
|
66 | kind = :plain | |
62 | elsif match = scan(/-/) |
|
67 | elsif match = scan(/-/) | |
63 | tokens << [:begin_line, line_kind = :delete] |
|
68 | tokens << [:begin_line, line_kind = :delete] | |
64 | tokens << [match, :delete] |
|
69 | tokens << [match, :delete] | |
65 | next unless match = scan(/.+/) |
|
70 | next unless match = scan(/.+/) | |
66 | kind = :plain |
|
71 | kind = :plain | |
67 | elsif scan(/ .*/) |
|
72 | elsif scan(/ .*/) | |
68 | kind = :comment |
|
73 | kind = :comment | |
69 | elsif scan(/.+/) |
|
74 | elsif scan(/.+/) | |
70 |
tokens << [:begin_line, line_kind = : |
|
75 | tokens << [:begin_line, line_kind = :comment] | |
71 | kind = :plain |
|
76 | kind = :plain | |
72 | else |
|
77 | else | |
73 | raise_inspect 'else case rached' |
|
78 | raise_inspect 'else case rached' | |
74 | end |
|
79 | end | |
75 |
|
80 | |||
76 | when :added |
|
81 | when :added | |
77 | if match = scan(/ \+/) |
|
82 | if match = scan(/ \+/) | |
78 | tokens << [:begin_line, line_kind = :insert] |
|
83 | tokens << [:begin_line, line_kind = :insert] | |
79 | tokens << [match, :insert] |
|
84 | tokens << [match, :insert] | |
80 | next unless match = scan(/.+/) |
|
85 | next unless match = scan(/.+/) | |
81 | kind = :plain |
|
86 | kind = :plain | |
82 | else |
|
87 | else | |
83 | state = :initial |
|
88 | state = :initial | |
84 | next |
|
89 | next | |
85 | end |
|
90 | end | |
86 | end |
|
91 | end | |
87 |
|
92 | |||
88 | match ||= matched |
|
93 | match ||= matched | |
89 | if $CODERAY_DEBUG and not kind |
|
94 | if $CODERAY_DEBUG and not kind | |
90 | raise_inspect 'Error token %p in line %d' % |
|
95 | raise_inspect 'Error token %p in line %d' % | |
91 | [[match, kind], line], tokens |
|
96 | [[match, kind], line], tokens | |
92 | end |
|
97 | end | |
93 | raise_inspect 'Empty token', tokens unless match |
|
98 | raise_inspect 'Empty token', tokens unless match | |
94 |
|
99 | |||
95 | tokens << [match, kind] |
|
100 | tokens << [match, kind] | |
96 | end |
|
101 | end | |
97 |
|
102 | |||
98 | tokens << [:end_line, line_kind] if line_kind |
|
103 | tokens << [:end_line, line_kind] if line_kind | |
99 | tokens |
|
104 | tokens | |
100 | end |
|
105 | end | |
101 |
|
106 | |||
102 | end |
|
107 | end | |
103 |
|
108 | |||
104 | end |
|
109 | end | |
105 | end |
|
110 | end |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/groovy.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/groovy.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/groovy.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/groovy.rb |
@@ -1,182 +1,182 | |||||
1 | module CodeRay |
|
1 | module CodeRay | |
2 | module Scanners |
|
2 | module Scanners | |
3 |
|
3 | |||
4 | # HTML Scanner |
|
4 | # HTML Scanner | |
5 | class HTML < Scanner |
|
5 | class HTML < Scanner | |
6 |
|
6 | |||
7 | include Streamable |
|
7 | include Streamable | |
8 | register_for :html |
|
8 | register_for :html | |
9 |
|
9 | |||
10 | KINDS_NOT_LOC = [ |
|
10 | KINDS_NOT_LOC = [ | |
11 | :comment, :doctype, :preprocessor, |
|
11 | :comment, :doctype, :preprocessor, | |
12 | :tag, :attribute_name, :operator, |
|
12 | :tag, :attribute_name, :operator, | |
13 | :attribute_value, :delimiter, :content, |
|
13 | :attribute_value, :delimiter, :content, | |
14 | :plain, :entity, :error |
|
14 | :plain, :entity, :error | |
15 | ] |
|
15 | ] | |
16 |
|
16 | |||
17 | ATTR_NAME = /[\w.:-]+/ |
|
17 | ATTR_NAME = /[\w.:-]+/ | |
18 | ATTR_VALUE_UNQUOTED = ATTR_NAME |
|
18 | ATTR_VALUE_UNQUOTED = ATTR_NAME | |
19 | TAG_END = /\/?>/ |
|
19 | TAG_END = /\/?>/ | |
20 | HEX = /[0-9a-fA-F]/ |
|
20 | HEX = /[0-9a-fA-F]/ | |
21 | ENTITY = / |
|
21 | ENTITY = / | |
22 | & |
|
22 | & | |
23 | (?: |
|
23 | (?: | |
24 | \w+ |
|
24 | \w+ | |
25 | | |
|
25 | | | |
26 | \# |
|
26 | \# | |
27 | (?: |
|
27 | (?: | |
28 | \d+ |
|
28 | \d+ | |
29 | | |
|
29 | | | |
30 | x#{HEX}+ |
|
30 | x#{HEX}+ | |
31 | ) |
|
31 | ) | |
32 | ) |
|
32 | ) | |
33 | ; |
|
33 | ; | |
34 | /ox |
|
34 | /ox | |
35 |
|
35 | |||
36 | PLAIN_STRING_CONTENT = { |
|
36 | PLAIN_STRING_CONTENT = { | |
37 | "'" => /[^&'>\n]+/, |
|
37 | "'" => /[^&'>\n]+/, | |
38 | '"' => /[^&">\n]+/, |
|
38 | '"' => /[^&">\n]+/, | |
39 | } |
|
39 | } | |
40 |
|
40 | |||
41 | def reset |
|
41 | def reset | |
42 | super |
|
42 | super | |
43 | @state = :initial |
|
43 | @state = :initial | |
44 | end |
|
44 | end | |
45 |
|
45 | |||
46 | private |
|
46 | private | |
47 | def setup |
|
47 | def setup | |
48 | @state = :initial |
|
48 | @state = :initial | |
49 | @plain_string_content = nil |
|
49 | @plain_string_content = nil | |
50 | end |
|
50 | end | |
51 |
|
51 | |||
52 | def scan_tokens tokens, options |
|
52 | def scan_tokens tokens, options | |
53 |
|
53 | |||
54 | state = @state |
|
54 | state = @state | |
55 | plain_string_content = @plain_string_content |
|
55 | plain_string_content = @plain_string_content | |
56 |
|
56 | |||
57 | until eos? |
|
57 | until eos? | |
58 |
|
58 | |||
59 | kind = nil |
|
59 | kind = nil | |
60 | match = nil |
|
60 | match = nil | |
61 |
|
61 | |||
62 | if scan(/\s+/m) |
|
62 | if scan(/\s+/m) | |
63 | kind = :space |
|
63 | kind = :space | |
64 |
|
64 | |||
65 | else |
|
65 | else | |
66 |
|
66 | |||
67 | case state |
|
67 | case state | |
68 |
|
68 | |||
69 | when :initial |
|
69 | when :initial | |
70 | if scan(/<!--.*?-->/m) |
|
70 | if scan(/<!--.*?-->/m) | |
71 | kind = :comment |
|
71 | kind = :comment | |
72 | elsif scan(/<!DOCTYPE.*?>/m) |
|
72 | elsif scan(/<!DOCTYPE.*?>/m) | |
73 | kind = :doctype |
|
73 | kind = :doctype | |
74 | elsif scan(/<\?xml.*?\?>/m) |
|
74 | elsif scan(/<\?xml.*?\?>/m) | |
75 | kind = :preprocessor |
|
75 | kind = :preprocessor | |
76 | elsif scan(/<\?.*?\?>|<%.*?%>/m) |
|
76 | elsif scan(/<\?.*?\?>|<%.*?%>/m) | |
77 | kind = :comment |
|
77 | kind = :comment | |
78 | elsif scan(/<\/[-\w.:]*>/m) |
|
78 | elsif scan(/<\/[-\w.:]*>/m) | |
79 | kind = :tag |
|
79 | kind = :tag | |
80 | elsif match = scan(/<[-\w.:]+>?/m) |
|
80 | elsif match = scan(/<[-\w.:]+>?/m) | |
81 | kind = :tag |
|
81 | kind = :tag | |
82 | state = :attribute unless match[-1] == ?> |
|
82 | state = :attribute unless match[-1] == ?> | |
83 | elsif scan(/[^<>&]+/) |
|
83 | elsif scan(/[^<>&]+/) | |
84 | kind = :plain |
|
84 | kind = :plain | |
85 | elsif scan(/#{ENTITY}/ox) |
|
85 | elsif scan(/#{ENTITY}/ox) | |
86 | kind = :entity |
|
86 | kind = :entity | |
87 | elsif scan(/[<>&]/) |
|
87 | elsif scan(/[<>&]/) | |
88 | kind = :error |
|
88 | kind = :error | |
89 | else |
|
89 | else | |
90 | raise_inspect '[BUG] else-case reached with state %p' % [state], tokens |
|
90 | raise_inspect '[BUG] else-case reached with state %p' % [state], tokens | |
91 | end |
|
91 | end | |
92 |
|
92 | |||
93 | when :attribute |
|
93 | when :attribute | |
94 | if scan(/#{TAG_END}/) |
|
94 | if scan(/#{TAG_END}/o) | |
95 | kind = :tag |
|
95 | kind = :tag | |
96 | state = :initial |
|
96 | state = :initial | |
97 | elsif scan(/#{ATTR_NAME}/o) |
|
97 | elsif scan(/#{ATTR_NAME}/o) | |
98 | kind = :attribute_name |
|
98 | kind = :attribute_name | |
99 | state = :attribute_equal |
|
99 | state = :attribute_equal | |
100 | else |
|
100 | else | |
101 | kind = :error |
|
101 | kind = :error | |
102 | getch |
|
102 | getch | |
103 | end |
|
103 | end | |
104 |
|
104 | |||
105 | when :attribute_equal |
|
105 | when :attribute_equal | |
106 | if scan(/=/) |
|
106 | if scan(/=/) | |
107 | kind = :operator |
|
107 | kind = :operator | |
108 | state = :attribute_value |
|
108 | state = :attribute_value | |
109 | elsif scan(/#{ATTR_NAME}/o) |
|
109 | elsif scan(/#{ATTR_NAME}/o) | |
110 | kind = :attribute_name |
|
110 | kind = :attribute_name | |
111 | elsif scan(/#{TAG_END}/o) |
|
111 | elsif scan(/#{TAG_END}/o) | |
112 | kind = :tag |
|
112 | kind = :tag | |
113 | state = :initial |
|
113 | state = :initial | |
114 | elsif scan(/./) |
|
114 | elsif scan(/./) | |
115 | kind = :error |
|
115 | kind = :error | |
116 | state = :attribute |
|
116 | state = :attribute | |
117 | end |
|
117 | end | |
118 |
|
118 | |||
119 | when :attribute_value |
|
119 | when :attribute_value | |
120 | if scan(/#{ATTR_VALUE_UNQUOTED}/o) |
|
120 | if scan(/#{ATTR_VALUE_UNQUOTED}/o) | |
121 | kind = :attribute_value |
|
121 | kind = :attribute_value | |
122 | state = :attribute |
|
122 | state = :attribute | |
123 | elsif match = scan(/["']/) |
|
123 | elsif match = scan(/["']/) | |
124 | tokens << [:open, :string] |
|
124 | tokens << [:open, :string] | |
125 | state = :attribute_value_string |
|
125 | state = :attribute_value_string | |
126 | plain_string_content = PLAIN_STRING_CONTENT[match] |
|
126 | plain_string_content = PLAIN_STRING_CONTENT[match] | |
127 | kind = :delimiter |
|
127 | kind = :delimiter | |
128 | elsif scan(/#{TAG_END}/o) |
|
128 | elsif scan(/#{TAG_END}/o) | |
129 | kind = :tag |
|
129 | kind = :tag | |
130 | state = :initial |
|
130 | state = :initial | |
131 | else |
|
131 | else | |
132 | kind = :error |
|
132 | kind = :error | |
133 | getch |
|
133 | getch | |
134 | end |
|
134 | end | |
135 |
|
135 | |||
136 | when :attribute_value_string |
|
136 | when :attribute_value_string | |
137 | if scan(plain_string_content) |
|
137 | if scan(plain_string_content) | |
138 | kind = :content |
|
138 | kind = :content | |
139 | elsif scan(/['"]/) |
|
139 | elsif scan(/['"]/) | |
140 | tokens << [matched, :delimiter] |
|
140 | tokens << [matched, :delimiter] | |
141 | tokens << [:close, :string] |
|
141 | tokens << [:close, :string] | |
142 | state = :attribute |
|
142 | state = :attribute | |
143 | next |
|
143 | next | |
144 | elsif scan(/#{ENTITY}/ox) |
|
144 | elsif scan(/#{ENTITY}/ox) | |
145 | kind = :entity |
|
145 | kind = :entity | |
146 | elsif scan(/&/) |
|
146 | elsif scan(/&/) | |
147 | kind = :content |
|
147 | kind = :content | |
148 | elsif scan(/[\n>]/) |
|
148 | elsif scan(/[\n>]/) | |
149 | tokens << [:close, :string] |
|
149 | tokens << [:close, :string] | |
150 | kind = :error |
|
150 | kind = :error | |
151 | state = :initial |
|
151 | state = :initial | |
152 | end |
|
152 | end | |
153 |
|
153 | |||
154 | else |
|
154 | else | |
155 | raise_inspect 'Unknown state: %p' % [state], tokens |
|
155 | raise_inspect 'Unknown state: %p' % [state], tokens | |
156 |
|
156 | |||
157 | end |
|
157 | end | |
158 |
|
158 | |||
159 | end |
|
159 | end | |
160 |
|
160 | |||
161 | match ||= matched |
|
161 | match ||= matched | |
162 | if $CODERAY_DEBUG and not kind |
|
162 | if $CODERAY_DEBUG and not kind | |
163 | raise_inspect 'Error token %p in line %d' % |
|
163 | raise_inspect 'Error token %p in line %d' % | |
164 | [[match, kind], line], tokens, state |
|
164 | [[match, kind], line], tokens, state | |
165 | end |
|
165 | end | |
166 | raise_inspect 'Empty token', tokens unless match |
|
166 | raise_inspect 'Empty token', tokens unless match | |
167 |
|
167 | |||
168 | tokens << [match, kind] |
|
168 | tokens << [match, kind] | |
169 | end |
|
169 | end | |
170 |
|
170 | |||
171 | if options[:keep_state] |
|
171 | if options[:keep_state] | |
172 | @state = state |
|
172 | @state = state | |
173 | @plain_string_content = plain_string_content |
|
173 | @plain_string_content = plain_string_content | |
174 | end |
|
174 | end | |
175 |
|
175 | |||
176 | tokens |
|
176 | tokens | |
177 | end |
|
177 | end | |
178 |
|
178 | |||
179 | end |
|
179 | end | |
180 |
|
180 | |||
181 | end |
|
181 | end | |
182 | end |
|
182 | end |
@@ -1,176 +1,176 | |||||
1 | module CodeRay |
|
1 | module CodeRay | |
2 | module Scanners |
|
2 | module Scanners | |
3 |
|
3 | |||
4 | class Java < Scanner |
|
4 | class Java < Scanner | |
5 |
|
5 | |||
6 | include Streamable |
|
6 | include Streamable | |
7 | register_for :java |
|
7 | register_for :java | |
8 | helper :builtin_types |
|
8 | helper :builtin_types | |
9 |
|
9 | |||
10 | # http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html |
|
10 | # http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html | |
11 | KEYWORDS = %w[ |
|
11 | KEYWORDS = %w[ | |
12 | assert break case catch continue default do else |
|
12 | assert break case catch continue default do else | |
13 | finally for if instanceof import new package |
|
13 | finally for if instanceof import new package | |
14 | return switch throw try typeof while |
|
14 | return switch throw try typeof while | |
15 | debugger export |
|
15 | debugger export | |
16 | ] |
|
16 | ] | |
17 | RESERVED = %w[ const goto ] |
|
17 | RESERVED = %w[ const goto ] | |
18 | CONSTANTS = %w[ false null true ] |
|
18 | CONSTANTS = %w[ false null true ] | |
19 | MAGIC_VARIABLES = %w[ this super ] |
|
19 | MAGIC_VARIABLES = %w[ this super ] | |
20 | TYPES = %w[ |
|
20 | TYPES = %w[ | |
21 | boolean byte char class double enum float int interface long |
|
21 | boolean byte char class double enum float int interface long | |
22 | short void |
|
22 | short void | |
23 | ] << '[]' # because int[] should be highlighted as a type |
|
23 | ] << '[]' # because int[] should be highlighted as a type | |
24 | DIRECTIVES = %w[ |
|
24 | DIRECTIVES = %w[ | |
25 | abstract extends final implements native private protected public |
|
25 | abstract extends final implements native private protected public | |
26 | static strictfp synchronized throws transient volatile |
|
26 | static strictfp synchronized throws transient volatile | |
27 | ] |
|
27 | ] | |
28 |
|
28 | |||
29 | IDENT_KIND = WordList.new(:ident). |
|
29 | IDENT_KIND = WordList.new(:ident). | |
30 | add(KEYWORDS, :keyword). |
|
30 | add(KEYWORDS, :keyword). | |
31 | add(RESERVED, :reserved). |
|
31 | add(RESERVED, :reserved). | |
32 | add(CONSTANTS, :pre_constant). |
|
32 | add(CONSTANTS, :pre_constant). | |
33 | add(MAGIC_VARIABLES, :local_variable). |
|
33 | add(MAGIC_VARIABLES, :local_variable). | |
34 | add(TYPES, :type). |
|
34 | add(TYPES, :type). | |
35 | add(BuiltinTypes::List, :pre_type). |
|
35 | add(BuiltinTypes::List, :pre_type). | |
36 | add(BuiltinTypes::List.select { |builtin| builtin[/(Error|Exception)$/] }, :exception). |
|
36 | add(BuiltinTypes::List.select { |builtin| builtin[/(Error|Exception)$/] }, :exception). | |
37 | add(DIRECTIVES, :directive) |
|
37 | add(DIRECTIVES, :directive) | |
38 |
|
38 | |||
39 | ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x |
|
39 | ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x | |
40 | UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x |
|
40 | UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x | |
41 | STRING_CONTENT_PATTERN = { |
|
41 | STRING_CONTENT_PATTERN = { | |
42 | "'" => /[^\\']+/, |
|
42 | "'" => /[^\\']+/, | |
43 | '"' => /[^\\"]+/, |
|
43 | '"' => /[^\\"]+/, | |
44 | '/' => /[^\\\/]+/, |
|
44 | '/' => /[^\\\/]+/, | |
45 | } |
|
45 | } | |
46 | IDENT = /[a-zA-Z_][A-Za-z_0-9]*/ |
|
46 | IDENT = /[a-zA-Z_][A-Za-z_0-9]*/ | |
47 |
|
47 | |||
48 | def scan_tokens tokens, options |
|
48 | def scan_tokens tokens, options | |
49 |
|
49 | |||
50 | state = :initial |
|
50 | state = :initial | |
51 | string_delimiter = nil |
|
51 | string_delimiter = nil | |
52 | import_clause = class_name_follows = last_token_dot = false |
|
52 | import_clause = class_name_follows = last_token_dot = false | |
53 |
|
53 | |||
54 | until eos? |
|
54 | until eos? | |
55 |
|
55 | |||
56 | kind = nil |
|
56 | kind = nil | |
57 | match = nil |
|
57 | match = nil | |
58 |
|
58 | |||
59 | case state |
|
59 | case state | |
60 |
|
60 | |||
61 | when :initial |
|
61 | when :initial | |
62 |
|
62 | |||
63 | if match = scan(/ \s+ | \\\n /x) |
|
63 | if match = scan(/ \s+ | \\\n /x) | |
64 | tokens << [match, :space] |
|
64 | tokens << [match, :space] | |
65 | next |
|
65 | next | |
66 |
|
66 | |||
67 | elsif match = scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx) |
|
67 | elsif match = scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx) | |
68 | tokens << [match, :comment] |
|
68 | tokens << [match, :comment] | |
69 | next |
|
69 | next | |
70 |
|
70 | |||
71 | elsif import_clause && scan(/ #{IDENT} (?: \. #{IDENT} )* /ox) |
|
71 | elsif import_clause && scan(/ #{IDENT} (?: \. #{IDENT} )* /ox) | |
72 | kind = :include |
|
72 | kind = :include | |
73 |
|
73 | |||
74 | elsif match = scan(/ #{IDENT} | \[\] /ox) |
|
74 | elsif match = scan(/ #{IDENT} | \[\] /ox) | |
75 | kind = IDENT_KIND[match] |
|
75 | kind = IDENT_KIND[match] | |
76 | if last_token_dot |
|
76 | if last_token_dot | |
77 | kind = :ident |
|
77 | kind = :ident | |
78 | elsif class_name_follows |
|
78 | elsif class_name_follows | |
79 | kind = :class |
|
79 | kind = :class | |
80 | class_name_follows = false |
|
80 | class_name_follows = false | |
81 | else |
|
81 | else | |
82 | import_clause = true if match == 'import' |
|
82 | import_clause = true if match == 'import' | |
83 | class_name_follows = true if match == 'class' || match == 'interface' |
|
83 | class_name_follows = true if match == 'class' || match == 'interface' | |
84 | end |
|
84 | end | |
85 |
|
85 | |||
86 | elsif scan(/ \.(?!\d) | [,?:()\[\]}] | -- | \+\+ | && | \|\| | \*\*=? | [-+*\/%^~&|<>=!]=? | <<<?=? | >>>?=? /x) |
|
86 | elsif scan(/ \.(?!\d) | [,?:()\[\]}] | -- | \+\+ | && | \|\| | \*\*=? | [-+*\/%^~&|<>=!]=? | <<<?=? | >>>?=? /x) | |
87 | kind = :operator |
|
87 | kind = :operator | |
88 |
|
88 | |||
89 | elsif scan(/;/) |
|
89 | elsif scan(/;/) | |
90 | import_clause = false |
|
90 | import_clause = false | |
91 | kind = :operator |
|
91 | kind = :operator | |
92 |
|
92 | |||
93 | elsif scan(/\{/) |
|
93 | elsif scan(/\{/) | |
94 | class_name_follows = false |
|
94 | class_name_follows = false | |
95 | kind = :operator |
|
95 | kind = :operator | |
96 |
|
96 | |||
97 | elsif check(/[\d.]/) |
|
97 | elsif check(/[\d.]/) | |
98 | if scan(/0[xX][0-9A-Fa-f]+/) |
|
98 | if scan(/0[xX][0-9A-Fa-f]+/) | |
99 | kind = :hex |
|
99 | kind = :hex | |
100 | elsif scan(/(?>0[0-7]+)(?![89.eEfF])/) |
|
100 | elsif scan(/(?>0[0-7]+)(?![89.eEfF])/) | |
101 | kind = :oct |
|
101 | kind = :oct | |
102 | elsif scan(/\d+[fFdD]|\d*\.\d+(?:[eE][+-]?\d+)?[fFdD]?|\d+[eE][+-]?\d+[fFdD]?/) |
|
102 | elsif scan(/\d+[fFdD]|\d*\.\d+(?:[eE][+-]?\d+)?[fFdD]?|\d+[eE][+-]?\d+[fFdD]?/) | |
103 | kind = :float |
|
103 | kind = :float | |
104 | elsif scan(/\d+[lL]?/) |
|
104 | elsif scan(/\d+[lL]?/) | |
105 | kind = :integer |
|
105 | kind = :integer | |
106 | end |
|
106 | end | |
107 |
|
107 | |||
108 | elsif match = scan(/["']/) |
|
108 | elsif match = scan(/["']/) | |
109 | tokens << [:open, :string] |
|
109 | tokens << [:open, :string] | |
110 | state = :string |
|
110 | state = :string | |
111 | string_delimiter = match |
|
111 | string_delimiter = match | |
112 | kind = :delimiter |
|
112 | kind = :delimiter | |
113 |
|
113 | |||
114 | elsif scan(/ @ #{IDENT} /ox) |
|
114 | elsif scan(/ @ #{IDENT} /ox) | |
115 | kind = :annotation |
|
115 | kind = :annotation | |
116 |
|
116 | |||
117 | else |
|
117 | else | |
118 | getch |
|
118 | getch | |
119 | kind = :error |
|
119 | kind = :error | |
120 |
|
120 | |||
121 | end |
|
121 | end | |
122 |
|
122 | |||
123 | when :string |
|
123 | when :string | |
124 | if scan(STRING_CONTENT_PATTERN[string_delimiter]) |
|
124 | if scan(STRING_CONTENT_PATTERN[string_delimiter]) | |
125 | kind = :content |
|
125 | kind = :content | |
126 | elsif match = scan(/["'\/]/) |
|
126 | elsif match = scan(/["'\/]/) | |
127 | tokens << [match, :delimiter] |
|
127 | tokens << [match, :delimiter] | |
128 | tokens << [:close, state] |
|
128 | tokens << [:close, state] | |
129 | string_delimiter = nil |
|
129 | string_delimiter = nil | |
130 | state = :initial |
|
130 | state = :initial | |
131 | next |
|
131 | next | |
132 | elsif state == :string && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)) |
|
132 | elsif state == :string && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)) | |
133 | if string_delimiter == "'" && !(match == "\\\\" || match == "\\'") |
|
133 | if string_delimiter == "'" && !(match == "\\\\" || match == "\\'") | |
134 | kind = :content |
|
134 | kind = :content | |
135 | else |
|
135 | else | |
136 | kind = :char |
|
136 | kind = :char | |
137 | end |
|
137 | end | |
138 | elsif scan(/\\./m) |
|
138 | elsif scan(/\\./m) | |
139 | kind = :content |
|
139 | kind = :content | |
140 | elsif scan(/ \\ | $ /x) |
|
140 | elsif scan(/ \\ | $ /x) | |
141 |
tokens << [:close, |
|
141 | tokens << [:close, state] | |
142 | kind = :error |
|
142 | kind = :error | |
143 | state = :initial |
|
143 | state = :initial | |
144 | else |
|
144 | else | |
145 | raise_inspect "else case \" reached; %p not handled." % peek(1), tokens |
|
145 | raise_inspect "else case \" reached; %p not handled." % peek(1), tokens | |
146 | end |
|
146 | end | |
147 |
|
147 | |||
148 | else |
|
148 | else | |
149 | raise_inspect 'Unknown state', tokens |
|
149 | raise_inspect 'Unknown state', tokens | |
150 |
|
150 | |||
151 | end |
|
151 | end | |
152 |
|
152 | |||
153 | match ||= matched |
|
153 | match ||= matched | |
154 | if $CODERAY_DEBUG and not kind |
|
154 | if $CODERAY_DEBUG and not kind | |
155 | raise_inspect 'Error token %p in line %d' % |
|
155 | raise_inspect 'Error token %p in line %d' % | |
156 | [[match, kind], line], tokens |
|
156 | [[match, kind], line], tokens | |
157 | end |
|
157 | end | |
158 | raise_inspect 'Empty token', tokens unless match |
|
158 | raise_inspect 'Empty token', tokens unless match | |
159 |
|
159 | |||
160 | last_token_dot = match == '.' |
|
160 | last_token_dot = match == '.' | |
161 |
|
161 | |||
162 | tokens << [match, kind] |
|
162 | tokens << [match, kind] | |
163 |
|
163 | |||
164 | end |
|
164 | end | |
165 |
|
165 | |||
166 | if state == :string |
|
166 | if state == :string | |
167 | tokens << [:close, state] |
|
167 | tokens << [:close, state] | |
168 | end |
|
168 | end | |
169 |
|
169 | |||
170 | tokens |
|
170 | tokens | |
171 | end |
|
171 | end | |
172 |
|
172 | |||
173 | end |
|
173 | end | |
174 |
|
174 | |||
175 | end |
|
175 | end | |
176 | end |
|
176 | end |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/builtin_types.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/builtin_types.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/builtin_types.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/builtin_types.rb |
@@ -1,224 +1,224 | |||||
1 | module CodeRay |
|
1 | module CodeRay | |
2 | module Scanners |
|
2 | module Scanners | |
3 |
|
3 | |||
4 | class JavaScript < Scanner |
|
4 | class JavaScript < Scanner | |
5 |
|
5 | |||
6 | include Streamable |
|
6 | include Streamable | |
7 |
|
7 | |||
8 | register_for :java_script |
|
8 | register_for :java_script | |
9 | file_extension 'js' |
|
9 | file_extension 'js' | |
10 |
|
10 | |||
11 | # The actual JavaScript keywords. |
|
11 | # The actual JavaScript keywords. | |
12 | KEYWORDS = %w[ |
|
12 | KEYWORDS = %w[ | |
13 | break case catch continue default delete do else |
|
13 | break case catch continue default delete do else | |
14 | finally for function if in instanceof new |
|
14 | finally for function if in instanceof new | |
15 | return switch throw try typeof var void while with |
|
15 | return switch throw try typeof var void while with | |
16 | ] |
|
16 | ] | |
17 | PREDEFINED_CONSTANTS = %w[ |
|
17 | PREDEFINED_CONSTANTS = %w[ | |
18 | false null true undefined |
|
18 | false null true undefined | |
19 | ] |
|
19 | ] | |
20 |
|
20 | |||
21 | MAGIC_VARIABLES = %w[ this arguments ] # arguments was introduced in JavaScript 1.4 |
|
21 | MAGIC_VARIABLES = %w[ this arguments ] # arguments was introduced in JavaScript 1.4 | |
22 |
|
22 | |||
23 | KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[ |
|
23 | KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[ | |
24 | case delete in instanceof new return throw typeof with |
|
24 | case delete in instanceof new return throw typeof with | |
25 | ] |
|
25 | ] | |
26 |
|
26 | |||
27 | # Reserved for future use. |
|
27 | # Reserved for future use. | |
28 | RESERVED_WORDS = %w[ |
|
28 | RESERVED_WORDS = %w[ | |
29 | abstract boolean byte char class debugger double enum export extends |
|
29 | abstract boolean byte char class debugger double enum export extends | |
30 | final float goto implements import int interface long native package |
|
30 | final float goto implements import int interface long native package | |
31 | private protected public short static super synchronized throws transient |
|
31 | private protected public short static super synchronized throws transient | |
32 | volatile |
|
32 | volatile | |
33 | ] |
|
33 | ] | |
34 |
|
34 | |||
35 | IDENT_KIND = WordList.new(:ident). |
|
35 | IDENT_KIND = WordList.new(:ident). | |
36 | add(RESERVED_WORDS, :reserved). |
|
36 | add(RESERVED_WORDS, :reserved). | |
37 | add(PREDEFINED_CONSTANTS, :pre_constant). |
|
37 | add(PREDEFINED_CONSTANTS, :pre_constant). | |
38 | add(MAGIC_VARIABLES, :local_variable). |
|
38 | add(MAGIC_VARIABLES, :local_variable). | |
39 | add(KEYWORDS, :keyword) |
|
39 | add(KEYWORDS, :keyword) | |
40 |
|
40 | |||
41 | ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x |
|
41 | ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x | |
42 | UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x |
|
42 | UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x | |
43 | REGEXP_ESCAPE = / [bBdDsSwW] /x |
|
43 | REGEXP_ESCAPE = / [bBdDsSwW] /x | |
44 | STRING_CONTENT_PATTERN = { |
|
44 | STRING_CONTENT_PATTERN = { | |
45 | "'" => /[^\\']+/, |
|
45 | "'" => /[^\\']+/, | |
46 | '"' => /[^\\"]+/, |
|
46 | '"' => /[^\\"]+/, | |
47 | '/' => /[^\\\/]+/, |
|
47 | '/' => /[^\\\/]+/, | |
48 | } |
|
48 | } | |
49 | KEY_CHECK_PATTERN = { |
|
49 | KEY_CHECK_PATTERN = { | |
50 | "'" => / [^\\']* (?: \\.? [^\\']* )* '? \s* : /x, |
|
50 | "'" => / [^\\']* (?: \\.? [^\\']* )* '? \s* : /x, | |
51 | '"' => / [^\\"]* (?: \\.? [^\\"]* )* "? \s* : /x, |
|
51 | '"' => / [^\\"]* (?: \\.? [^\\"]* )* "? \s* : /x, | |
52 | } |
|
52 | } | |
53 |
|
53 | |||
54 | def scan_tokens tokens, options |
|
54 | def scan_tokens tokens, options | |
55 |
|
55 | |||
56 | state = :initial |
|
56 | state = :initial | |
57 | string_delimiter = nil |
|
57 | string_delimiter = nil | |
58 | value_expected = true |
|
58 | value_expected = true | |
59 | key_expected = false |
|
59 | key_expected = false | |
60 | function_expected = false |
|
60 | function_expected = false | |
61 |
|
61 | |||
62 | until eos? |
|
62 | until eos? | |
63 |
|
63 | |||
64 | kind = nil |
|
64 | kind = nil | |
65 | match = nil |
|
65 | match = nil | |
66 |
|
66 | |||
67 | case state |
|
67 | case state | |
68 |
|
68 | |||
69 | when :initial |
|
69 | when :initial | |
70 |
|
70 | |||
71 | if match = scan(/ \s+ | \\\n /x) |
|
71 | if match = scan(/ \s+ | \\\n /x) | |
72 | value_expected = true if !value_expected && match.index(?\n) |
|
72 | value_expected = true if !value_expected && match.index(?\n) | |
73 | tokens << [match, :space] |
|
73 | tokens << [match, :space] | |
74 | next |
|
74 | next | |
75 |
|
75 | |||
76 | elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx) |
|
76 | elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx) | |
77 | value_expected = true |
|
77 | value_expected = true | |
78 | kind = :comment |
|
78 | kind = :comment | |
79 |
|
79 | |||
80 | elsif check(/\.?\d/) |
|
80 | elsif check(/\.?\d/) | |
81 | key_expected = value_expected = false |
|
81 | key_expected = value_expected = false | |
82 | if scan(/0[xX][0-9A-Fa-f]+/) |
|
82 | if scan(/0[xX][0-9A-Fa-f]+/) | |
83 | kind = :hex |
|
83 | kind = :hex | |
84 | elsif scan(/(?>0[0-7]+)(?![89.eEfF])/) |
|
84 | elsif scan(/(?>0[0-7]+)(?![89.eEfF])/) | |
85 | kind = :oct |
|
85 | kind = :oct | |
86 | elsif scan(/\d+[fF]|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/) |
|
86 | elsif scan(/\d+[fF]|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/) | |
87 | kind = :float |
|
87 | kind = :float | |
88 | elsif scan(/\d+/) |
|
88 | elsif scan(/\d+/) | |
89 | kind = :integer |
|
89 | kind = :integer | |
90 | end |
|
90 | end | |
91 |
|
91 | |||
92 | elsif value_expected && match = scan(/<([[:alpha:]]\w*) (?: [^\/>]*\/> | .*?<\/\1>)/xim) |
|
92 | elsif value_expected && match = scan(/<([[:alpha:]]\w*) (?: [^\/>]*\/> | .*?<\/\1>)/xim) | |
93 | # FIXME: scan over nested tags |
|
93 | # FIXME: scan over nested tags | |
94 | xml_scanner.tokenize match |
|
94 | xml_scanner.tokenize match | |
95 | value_expected = false |
|
95 | value_expected = false | |
96 | next |
|
96 | next | |
97 |
|
97 | |||
98 | elsif match = scan(/ [-+*=<>?:;,!&^|(\[{~%]+ | \.(?!\d) /x) |
|
98 | elsif match = scan(/ [-+*=<>?:;,!&^|(\[{~%]+ | \.(?!\d) /x) | |
99 | value_expected = true |
|
99 | value_expected = true | |
100 | last_operator = match[-1] |
|
100 | last_operator = match[-1] | |
101 | key_expected = (last_operator == ?{) || (last_operator == ?,) |
|
101 | key_expected = (last_operator == ?{) || (last_operator == ?,) | |
102 | function_expected = false |
|
102 | function_expected = false | |
103 | kind = :operator |
|
103 | kind = :operator | |
104 |
|
104 | |||
105 | elsif scan(/ [)\]}]+ /x) |
|
105 | elsif scan(/ [)\]}]+ /x) | |
106 | function_expected = key_expected = value_expected = false |
|
106 | function_expected = key_expected = value_expected = false | |
107 | kind = :operator |
|
107 | kind = :operator | |
108 |
|
108 | |||
109 | elsif match = scan(/ [$a-zA-Z_][A-Za-z_0-9$]* /x) |
|
109 | elsif match = scan(/ [$a-zA-Z_][A-Za-z_0-9$]* /x) | |
110 | kind = IDENT_KIND[match] |
|
110 | kind = IDENT_KIND[match] | |
111 | value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match] |
|
111 | value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match] | |
112 | # TODO: labels |
|
112 | # TODO: labels | |
113 | if kind == :ident |
|
113 | if kind == :ident | |
114 | if match.index(?$) # $ allowed inside an identifier |
|
114 | if match.index(?$) # $ allowed inside an identifier | |
115 | kind = :predefined |
|
115 | kind = :predefined | |
116 | elsif function_expected |
|
116 | elsif function_expected | |
117 | kind = :function |
|
117 | kind = :function | |
118 | elsif check(/\s*[=:]\s*function\b/) |
|
118 | elsif check(/\s*[=:]\s*function\b/) | |
119 | kind = :function |
|
119 | kind = :function | |
120 | elsif key_expected && check(/\s*:/) |
|
120 | elsif key_expected && check(/\s*:/) | |
121 | kind = :key |
|
121 | kind = :key | |
122 | end |
|
122 | end | |
123 | end |
|
123 | end | |
124 | function_expected = (kind == :keyword) && (match == 'function') |
|
124 | function_expected = (kind == :keyword) && (match == 'function') | |
125 | key_expected = false |
|
125 | key_expected = false | |
126 |
|
126 | |||
127 | elsif match = scan(/["']/) |
|
127 | elsif match = scan(/["']/) | |
128 | if key_expected && check(KEY_CHECK_PATTERN[match]) |
|
128 | if key_expected && check(KEY_CHECK_PATTERN[match]) | |
129 | state = :key |
|
129 | state = :key | |
130 | else |
|
130 | else | |
131 | state = :string |
|
131 | state = :string | |
132 | end |
|
132 | end | |
133 | tokens << [:open, state] |
|
133 | tokens << [:open, state] | |
134 | string_delimiter = match |
|
134 | string_delimiter = match | |
135 | kind = :delimiter |
|
135 | kind = :delimiter | |
136 |
|
136 | |||
137 | elsif value_expected && (match = scan(/\/(?=\S)/)) |
|
137 | elsif value_expected && (match = scan(/\/(?=\S)/)) | |
138 | tokens << [:open, :regexp] |
|
138 | tokens << [:open, :regexp] | |
139 | state = :regexp |
|
139 | state = :regexp | |
140 | string_delimiter = '/' |
|
140 | string_delimiter = '/' | |
141 | kind = :delimiter |
|
141 | kind = :delimiter | |
142 |
|
142 | |||
143 | elsif scan(/ \/ /x) |
|
143 | elsif scan(/ \/ /x) | |
144 | value_expected = true |
|
144 | value_expected = true | |
145 | key_expected = false |
|
145 | key_expected = false | |
146 | kind = :operator |
|
146 | kind = :operator | |
147 |
|
147 | |||
148 | else |
|
148 | else | |
149 | getch |
|
149 | getch | |
150 | kind = :error |
|
150 | kind = :error | |
151 |
|
151 | |||
152 | end |
|
152 | end | |
153 |
|
153 | |||
154 | when :string, :regexp, :key |
|
154 | when :string, :regexp, :key | |
155 | if scan(STRING_CONTENT_PATTERN[string_delimiter]) |
|
155 | if scan(STRING_CONTENT_PATTERN[string_delimiter]) | |
156 | kind = :content |
|
156 | kind = :content | |
157 | elsif match = scan(/["'\/]/) |
|
157 | elsif match = scan(/["'\/]/) | |
158 | tokens << [match, :delimiter] |
|
158 | tokens << [match, :delimiter] | |
159 | if state == :regexp |
|
159 | if state == :regexp | |
160 | modifiers = scan(/[gim]+/) |
|
160 | modifiers = scan(/[gim]+/) | |
161 | tokens << [modifiers, :modifier] if modifiers && !modifiers.empty? |
|
161 | tokens << [modifiers, :modifier] if modifiers && !modifiers.empty? | |
162 | end |
|
162 | end | |
163 | tokens << [:close, state] |
|
163 | tokens << [:close, state] | |
164 | string_delimiter = nil |
|
164 | string_delimiter = nil | |
165 | key_expected = value_expected = false |
|
165 | key_expected = value_expected = false | |
166 | state = :initial |
|
166 | state = :initial | |
167 | next |
|
167 | next | |
168 | elsif state != :regexp && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)) |
|
168 | elsif state != :regexp && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)) | |
169 | if string_delimiter == "'" && !(match == "\\\\" || match == "\\'") |
|
169 | if string_delimiter == "'" && !(match == "\\\\" || match == "\\'") | |
170 | kind = :content |
|
170 | kind = :content | |
171 | else |
|
171 | else | |
172 | kind = :char |
|
172 | kind = :char | |
173 | end |
|
173 | end | |
174 | elsif state == :regexp && scan(/ \\ (?: #{ESCAPE} | #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox) |
|
174 | elsif state == :regexp && scan(/ \\ (?: #{ESCAPE} | #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox) | |
175 | kind = :char |
|
175 | kind = :char | |
176 | elsif scan(/\\./m) |
|
176 | elsif scan(/\\./m) | |
177 | kind = :content |
|
177 | kind = :content | |
178 | elsif scan(/ \\ | $ /x) |
|
178 | elsif scan(/ \\ | $ /x) | |
179 | tokens << [:close, state] |
|
179 | tokens << [:close, state] | |
180 | kind = :error |
|
180 | kind = :error | |
181 | key_expected = value_expected = false |
|
181 | key_expected = value_expected = false | |
182 | state = :initial |
|
182 | state = :initial | |
183 | else |
|
183 | else | |
184 | raise_inspect "else case \" reached; %p not handled." % peek(1), tokens |
|
184 | raise_inspect "else case \" reached; %p not handled." % peek(1), tokens | |
185 | end |
|
185 | end | |
186 |
|
186 | |||
187 | else |
|
187 | else | |
188 | raise_inspect 'Unknown state', tokens |
|
188 | raise_inspect 'Unknown state', tokens | |
189 |
|
189 | |||
190 | end |
|
190 | end | |
191 |
|
191 | |||
192 | match ||= matched |
|
192 | match ||= matched | |
193 | if $CODERAY_DEBUG and not kind |
|
193 | if $CODERAY_DEBUG and not kind | |
194 | raise_inspect 'Error token %p in line %d' % |
|
194 | raise_inspect 'Error token %p in line %d' % | |
195 | [[match, kind], line], tokens |
|
195 | [[match, kind], line], tokens | |
196 | end |
|
196 | end | |
197 | raise_inspect 'Empty token', tokens unless match |
|
197 | raise_inspect 'Empty token', tokens unless match | |
198 |
|
198 | |||
199 | tokens << [match, kind] |
|
199 | tokens << [match, kind] | |
200 |
|
200 | |||
201 | end |
|
201 | end | |
202 |
|
202 | |||
203 | if [:string, :regexp].include? state |
|
203 | if [:string, :regexp].include? state | |
204 | tokens << [:close, state] |
|
204 | tokens << [:close, state] | |
205 | end |
|
205 | end | |
206 |
|
206 | |||
207 | tokens |
|
207 | tokens | |
208 | end |
|
208 | end | |
209 |
|
209 | |||
210 | protected |
|
210 | protected | |
211 |
|
211 | |||
212 | def reset_instance |
|
212 | def reset_instance | |
213 | super |
|
213 | super | |
214 | @xml_scanner.reset if defined? @xml_scanner |
|
214 | @xml_scanner.reset if defined? @xml_scanner | |
215 | end |
|
215 | end | |
216 |
|
216 | |||
217 | def xml_scanner |
|
217 | def xml_scanner | |
218 |
@xml_scanner ||= CodeRay.scanner :xml, :tokens => @tokens, :keep_tokens => true, :keep_state => |
|
218 | @xml_scanner ||= CodeRay.scanner :xml, :tokens => @tokens, :keep_tokens => true, :keep_state => false | |
219 | end |
|
219 | end | |
220 |
|
220 | |||
221 | end |
|
221 | end | |
222 |
|
222 | |||
223 | end |
|
223 | end | |
224 | end |
|
224 | end |
@@ -1,112 +1,108 | |||||
1 | module CodeRay |
|
1 | module CodeRay | |
2 | module Scanners |
|
2 | module Scanners | |
3 |
|
3 | |||
4 | class JSON < Scanner |
|
4 | class JSON < Scanner | |
5 |
|
5 | |||
6 | include Streamable |
|
6 | include Streamable | |
7 |
|
7 | |||
8 | register_for :json |
|
8 | register_for :json | |
9 | file_extension 'json' |
|
9 | file_extension 'json' | |
10 |
|
10 | |||
11 | KINDS_NOT_LOC = [ |
|
11 | KINDS_NOT_LOC = [ | |
12 | :float, :char, :content, :delimiter, |
|
12 | :float, :char, :content, :delimiter, | |
13 | :error, :integer, :operator, :value, |
|
13 | :error, :integer, :operator, :value, | |
14 | ] |
|
14 | ] | |
15 |
|
15 | |||
16 | CONSTANTS = %w( true false null ) |
|
|||
17 | IDENT_KIND = WordList.new(:key).add(CONSTANTS, :value) |
|
|||
18 |
|
||||
19 | ESCAPE = / [bfnrt\\"\/] /x |
|
16 | ESCAPE = / [bfnrt\\"\/] /x | |
20 | UNICODE_ESCAPE = / u[a-fA-F0-9]{4} /x |
|
17 | UNICODE_ESCAPE = / u[a-fA-F0-9]{4} /x | |
21 |
|
18 | |||
22 | def scan_tokens tokens, options |
|
19 | def scan_tokens tokens, options | |
23 |
|
20 | |||
24 | state = :initial |
|
21 | state = :initial | |
25 | stack = [] |
|
22 | stack = [] | |
26 | string_delimiter = nil |
|
|||
27 | key_expected = false |
|
23 | key_expected = false | |
28 |
|
24 | |||
29 | until eos? |
|
25 | until eos? | |
30 |
|
26 | |||
31 | kind = nil |
|
27 | kind = nil | |
32 | match = nil |
|
28 | match = nil | |
33 |
|
29 | |||
34 | case state |
|
30 | case state | |
35 |
|
31 | |||
36 | when :initial |
|
32 | when :initial | |
37 | if match = scan(/ \s+ | \\\n /x) |
|
33 | if match = scan(/ \s+ | \\\n /x) | |
38 | tokens << [match, :space] |
|
34 | tokens << [match, :space] | |
39 | next |
|
35 | next | |
40 | elsif match = scan(/ [:,\[{\]}] /x) |
|
36 | elsif match = scan(/ [:,\[{\]}] /x) | |
41 | kind = :operator |
|
37 | kind = :operator | |
42 | case match |
|
38 | case match | |
43 | when '{' then stack << :object; key_expected = true |
|
39 | when '{' then stack << :object; key_expected = true | |
44 | when '[' then stack << :array |
|
40 | when '[' then stack << :array | |
45 | when ':' then key_expected = false |
|
41 | when ':' then key_expected = false | |
46 | when ',' then key_expected = true if stack.last == :object |
|
42 | when ',' then key_expected = true if stack.last == :object | |
47 | when '}', ']' then stack.pop # no error recovery, but works for valid JSON |
|
43 | when '}', ']' then stack.pop # no error recovery, but works for valid JSON | |
48 | end |
|
44 | end | |
49 | elsif match = scan(/ true | false | null /x) |
|
45 | elsif match = scan(/ true | false | null /x) | |
50 |
kind = |
|
46 | kind = :value | |
51 | elsif match = scan(/-?(?:0|[1-9]\d*)/) |
|
47 | elsif match = scan(/-?(?:0|[1-9]\d*)/) | |
52 | kind = :integer |
|
48 | kind = :integer | |
53 | if scan(/\.\d+(?:[eE][-+]?\d+)?|[eE][-+]?\d+/) |
|
49 | if scan(/\.\d+(?:[eE][-+]?\d+)?|[eE][-+]?\d+/) | |
54 | match << matched |
|
50 | match << matched | |
55 | kind = :float |
|
51 | kind = :float | |
56 | end |
|
52 | end | |
57 | elsif match = scan(/"/) |
|
53 | elsif match = scan(/"/) | |
58 | state = key_expected ? :key : :string |
|
54 | state = key_expected ? :key : :string | |
59 | tokens << [:open, state] |
|
55 | tokens << [:open, state] | |
60 | kind = :delimiter |
|
56 | kind = :delimiter | |
61 | else |
|
57 | else | |
62 | getch |
|
58 | getch | |
63 | kind = :error |
|
59 | kind = :error | |
64 | end |
|
60 | end | |
65 |
|
61 | |||
66 | when :string, :key |
|
62 | when :string, :key | |
67 | if scan(/[^\\"]+/) |
|
63 | if scan(/[^\\"]+/) | |
68 | kind = :content |
|
64 | kind = :content | |
69 | elsif scan(/"/) |
|
65 | elsif scan(/"/) | |
70 | tokens << ['"', :delimiter] |
|
66 | tokens << ['"', :delimiter] | |
71 | tokens << [:close, state] |
|
67 | tokens << [:close, state] | |
72 | state = :initial |
|
68 | state = :initial | |
73 | next |
|
69 | next | |
74 | elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox) |
|
70 | elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox) | |
75 | kind = :char |
|
71 | kind = :char | |
76 | elsif scan(/\\./m) |
|
72 | elsif scan(/\\./m) | |
77 | kind = :content |
|
73 | kind = :content | |
78 | elsif scan(/ \\ | $ /x) |
|
74 | elsif scan(/ \\ | $ /x) | |
79 |
tokens << [:close, |
|
75 | tokens << [:close, state] | |
80 | kind = :error |
|
76 | kind = :error | |
81 | state = :initial |
|
77 | state = :initial | |
82 | else |
|
78 | else | |
83 | raise_inspect "else case \" reached; %p not handled." % peek(1), tokens |
|
79 | raise_inspect "else case \" reached; %p not handled." % peek(1), tokens | |
84 | end |
|
80 | end | |
85 |
|
81 | |||
86 | else |
|
82 | else | |
87 | raise_inspect 'Unknown state', tokens |
|
83 | raise_inspect 'Unknown state', tokens | |
88 |
|
84 | |||
89 | end |
|
85 | end | |
90 |
|
86 | |||
91 | match ||= matched |
|
87 | match ||= matched | |
92 | if $CODERAY_DEBUG and not kind |
|
88 | if $CODERAY_DEBUG and not kind | |
93 | raise_inspect 'Error token %p in line %d' % |
|
89 | raise_inspect 'Error token %p in line %d' % | |
94 | [[match, kind], line], tokens |
|
90 | [[match, kind], line], tokens | |
95 | end |
|
91 | end | |
96 | raise_inspect 'Empty token', tokens unless match |
|
92 | raise_inspect 'Empty token', tokens unless match | |
97 |
|
93 | |||
98 | tokens << [match, kind] |
|
94 | tokens << [match, kind] | |
99 |
|
95 | |||
100 | end |
|
96 | end | |
101 |
|
97 | |||
102 | if [:string, :key].include? state |
|
98 | if [:string, :key].include? state | |
103 | tokens << [:close, state] |
|
99 | tokens << [:close, state] | |
104 | end |
|
100 | end | |
105 |
|
101 | |||
106 | tokens |
|
102 | tokens | |
107 | end |
|
103 | end | |
108 |
|
104 | |||
109 | end |
|
105 | end | |
110 |
|
106 | |||
111 | end |
|
107 | end | |
112 | end |
|
108 | end |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/nitro_xhtml.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/nitro_xhtml.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/nitro_xhtml.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/nitro_xhtml.rb |
@@ -1,527 +1,533 | |||||
1 | module CodeRay |
|
1 | module CodeRay | |
2 | module Scanners |
|
2 | module Scanners | |
3 |
|
3 | |||
4 | load :html |
|
4 | load :html | |
5 |
|
5 | |||
6 | # Original by Stefan Walk. |
|
6 | # Original by Stefan Walk. | |
7 | class PHP < Scanner |
|
7 | class PHP < Scanner | |
8 |
|
8 | |||
9 | register_for :php |
|
9 | register_for :php | |
10 | file_extension 'php' |
|
10 | file_extension 'php' | |
11 |
|
11 | |||
12 | KINDS_NOT_LOC = HTML::KINDS_NOT_LOC |
|
12 | KINDS_NOT_LOC = HTML::KINDS_NOT_LOC | |
13 |
|
13 | |||
14 | def setup |
|
14 | def setup | |
15 | @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true |
|
15 | @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true | |
16 | end |
|
16 | end | |
17 |
|
17 | |||
18 | def reset_instance |
|
18 | def reset_instance | |
19 | super |
|
19 | super | |
20 | @html_scanner.reset |
|
20 | @html_scanner.reset | |
21 | end |
|
21 | end | |
22 |
|
22 | |||
23 | module Words |
|
23 | module Words | |
24 |
|
24 | |||
25 | # according to http://www.php.net/manual/en/reserved.keywords.php |
|
25 | # according to http://www.php.net/manual/en/reserved.keywords.php | |
26 | KEYWORDS = %w[ |
|
26 | KEYWORDS = %w[ | |
27 | abstract and array as break case catch class clone const continue declare default do else elseif |
|
27 | abstract and array as break case catch class clone const continue declare default do else elseif | |
28 | enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global |
|
28 | enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global | |
29 | goto if implements interface instanceof namespace new or private protected public static switch |
|
29 | goto if implements interface instanceof namespace new or private protected public static switch | |
30 | throw try use var while xor |
|
30 | throw try use var while xor | |
31 | cfunction old_function |
|
31 | cfunction old_function | |
32 | ] |
|
32 | ] | |
33 |
|
33 | |||
34 | TYPES = %w[ int integer float double bool boolean string array object resource ] |
|
34 | TYPES = %w[ int integer float double bool boolean string array object resource ] | |
35 |
|
35 | |||
36 | LANGUAGE_CONSTRUCTS = %w[ |
|
36 | LANGUAGE_CONSTRUCTS = %w[ | |
37 | die echo empty exit eval include include_once isset list |
|
37 | die echo empty exit eval include include_once isset list | |
38 | require require_once return print unset |
|
38 | require require_once return print unset | |
39 | ] |
|
39 | ] | |
40 |
|
40 | |||
41 | CLASSES = %w[ Directory stdClass __PHP_Incomplete_Class exception php_user_filter Closure ] |
|
41 | CLASSES = %w[ Directory stdClass __PHP_Incomplete_Class exception php_user_filter Closure ] | |
42 |
|
42 | |||
43 | # according to http://php.net/quickref.php on 2009-04-21; |
|
43 | # according to http://php.net/quickref.php on 2009-04-21; | |
44 | # all functions with _ excluded (module functions) and selected additional functions |
|
44 | # all functions with _ excluded (module functions) and selected additional functions | |
45 | BUILTIN_FUNCTIONS = %w[ |
|
45 | BUILTIN_FUNCTIONS = %w[ | |
46 | abs acos acosh addcslashes addslashes aggregate array arsort ascii2ebcdic asin asinh asort assert atan atan2 |
|
46 | abs acos acosh addcslashes addslashes aggregate array arsort ascii2ebcdic asin asinh asort assert atan atan2 | |
47 | atanh basename bcadd bccomp bcdiv bcmod bcmul bcpow bcpowmod bcscale bcsqrt bcsub bin2hex bindec |
|
47 | atanh basename bcadd bccomp bcdiv bcmod bcmul bcpow bcpowmod bcscale bcsqrt bcsub bin2hex bindec | |
48 | bindtextdomain bzclose bzcompress bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite |
|
48 | bindtextdomain bzclose bzcompress bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite | |
49 | calculhmac ceil chdir checkdate checkdnsrr chgrp chmod chop chown chr chroot clearstatcache closedir closelog |
|
49 | calculhmac ceil chdir checkdate checkdnsrr chgrp chmod chop chown chr chroot clearstatcache closedir closelog | |
50 | compact constant copy cos cosh count crc32 crypt current date dcgettext dcngettext deaggregate decbin dechex |
|
50 | compact constant copy cos cosh count crc32 crypt current date dcgettext dcngettext deaggregate decbin dechex | |
51 | decoct define defined deg2rad delete dgettext die dirname diskfreespace dl dngettext doubleval each |
|
51 | decoct define defined deg2rad delete dgettext die dirname diskfreespace dl dngettext doubleval each | |
52 | ebcdic2ascii echo empty end ereg eregi escapeshellarg escapeshellcmd eval exec exit exp explode expm1 extract |
|
52 | ebcdic2ascii echo empty end ereg eregi escapeshellarg escapeshellcmd eval exec exit exp explode expm1 extract | |
53 | fclose feof fflush fgetc fgetcsv fgets fgetss file fileatime filectime filegroup fileinode filemtime fileowner |
|
53 | fclose feof fflush fgetc fgetcsv fgets fgetss file fileatime filectime filegroup fileinode filemtime fileowner | |
54 | fileperms filepro filesize filetype floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv |
|
54 | fileperms filepro filesize filetype floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv | |
55 | fputs fread frenchtojd fscanf fseek fsockopen fstat ftell ftok ftruncate fwrite getallheaders getcwd getdate |
|
55 | fputs fread frenchtojd fscanf fseek fsockopen fstat ftell ftok ftruncate fwrite getallheaders getcwd getdate | |
56 | getenv gethostbyaddr gethostbyname gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid |
|
56 | getenv gethostbyaddr gethostbyname gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid | |
57 | getmyuid getopt getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext |
|
57 | getmyuid getopt getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext | |
58 | gettimeofday gettype glob gmdate gmmktime gmstrftime gregoriantojd gzclose gzcompress gzdecode gzdeflate |
|
58 | gettimeofday gettype glob gmdate gmmktime gmstrftime gregoriantojd gzclose gzcompress gzdecode gzdeflate | |
59 | gzencode gzeof gzfile gzgetc gzgets gzgetss gzinflate gzopen gzpassthru gzputs gzread gzrewind gzseek gztell |
|
59 | gzencode gzeof gzfile gzgetc gzgets gzgetss gzinflate gzopen gzpassthru gzputs gzread gzrewind gzseek gztell | |
60 | gzuncompress gzwrite hash header hebrev hebrevc hexdec htmlentities htmlspecialchars hypot iconv idate |
|
60 | gzuncompress gzwrite hash header hebrev hebrevc hexdec htmlentities htmlspecialchars hypot iconv idate | |
61 | implode include intval ip2long iptcembed iptcparse isset |
|
61 | implode include intval ip2long iptcembed iptcparse isset | |
62 | jddayofweek jdmonthname jdtofrench jdtogregorian jdtojewish jdtojulian jdtounix jewishtojd join jpeg2wbmp |
|
62 | jddayofweek jdmonthname jdtofrench jdtogregorian jdtojewish jdtojulian jdtounix jewishtojd join jpeg2wbmp | |
63 | juliantojd key krsort ksort lcfirst lchgrp lchown levenshtein link linkinfo list localeconv localtime log |
|
63 | juliantojd key krsort ksort lcfirst lchgrp lchown levenshtein link linkinfo list localeconv localtime log | |
64 | log10 log1p long2ip lstat ltrim mail main max md5 metaphone mhash microtime min mkdir mktime msql natcasesort |
|
64 | log10 log1p long2ip lstat ltrim mail main max md5 metaphone mhash microtime min mkdir mktime msql natcasesort | |
65 | natsort next ngettext nl2br nthmac octdec opendir openlog |
|
65 | natsort next ngettext nl2br nthmac octdec opendir openlog | |
66 | ord overload pack passthru pathinfo pclose pfsockopen phpcredits phpinfo phpversion pi png2wbmp popen pos pow |
|
66 | ord overload pack passthru pathinfo pclose pfsockopen phpcredits phpinfo phpversion pi png2wbmp popen pos pow | |
67 | prev print printf putenv quotemeta rad2deg rand range rawurldecode rawurlencode readdir readfile readgzfile |
|
67 | prev print printf putenv quotemeta rad2deg rand range rawurldecode rawurlencode readdir readfile readgzfile | |
68 | readline readlink realpath recode rename require reset rewind rewinddir rmdir round rsort rtrim scandir |
|
68 | readline readlink realpath recode rename require reset rewind rewinddir rmdir round rsort rtrim scandir | |
69 | serialize setcookie setlocale setrawcookie settype sha1 shuffle signeurlpaiement sin sinh sizeof sleep snmpget |
|
69 | serialize setcookie setlocale setrawcookie settype sha1 shuffle signeurlpaiement sin sinh sizeof sleep snmpget | |
70 | snmpgetnext snmprealwalk snmpset snmpwalk snmpwalkoid sort soundex split spliti sprintf sqrt srand sscanf stat |
|
70 | snmpgetnext snmprealwalk snmpset snmpwalk snmpwalkoid sort soundex split spliti sprintf sqrt srand sscanf stat | |
71 | strcasecmp strchr strcmp strcoll strcspn strftime stripcslashes stripos stripslashes stristr strlen |
|
71 | strcasecmp strchr strcmp strcoll strcspn strftime stripcslashes stripos stripslashes stristr strlen | |
72 | strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strptime strrchr strrev strripos strrpos strspn |
|
72 | strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strptime strrchr strrev strripos strrpos strspn | |
73 | strstr strtok strtolower strtotime strtoupper strtr strval substr symlink syslog system tan tanh tempnam |
|
73 | strstr strtok strtolower strtotime strtoupper strtr strval substr symlink syslog system tan tanh tempnam | |
74 | textdomain time tmpfile touch trim uasort ucfirst ucwords uksort umask uniqid unixtojd unlink unpack |
|
74 | textdomain time tmpfile touch trim uasort ucfirst ucwords uksort umask uniqid unixtojd unlink unpack | |
75 | unserialize unset urldecode urlencode usleep usort vfprintf virtual vprintf vsprintf wordwrap |
|
75 | unserialize unset urldecode urlencode usleep usort vfprintf virtual vprintf vsprintf wordwrap | |
76 | array_change_key_case array_chunk array_combine array_count_values array_diff array_diff_assoc |
|
76 | array_change_key_case array_chunk array_combine array_count_values array_diff array_diff_assoc | |
77 | array_diff_key array_diff_uassoc array_diff_ukey array_fill array_fill_keys array_filter array_flip |
|
77 | array_diff_key array_diff_uassoc array_diff_ukey array_fill array_fill_keys array_filter array_flip | |
78 | array_intersect array_intersect_assoc array_intersect_key array_intersect_uassoc array_intersect_ukey |
|
78 | array_intersect array_intersect_assoc array_intersect_key array_intersect_uassoc array_intersect_ukey | |
79 | array_key_exists array_keys array_map array_merge array_merge_recursive array_multisort array_pad |
|
79 | array_key_exists array_keys array_map array_merge array_merge_recursive array_multisort array_pad | |
80 | array_pop array_product array_push array_rand array_reduce array_reverse array_search array_shift |
|
80 | array_pop array_product array_push array_rand array_reduce array_reverse array_search array_shift | |
81 | array_slice array_splice array_sum array_udiff array_udiff_assoc array_udiff_uassoc array_uintersect |
|
81 | array_slice array_splice array_sum array_udiff array_udiff_assoc array_udiff_uassoc array_uintersect | |
82 | array_uintersect_assoc array_uintersect_uassoc array_unique array_unshift array_values array_walk |
|
82 | array_uintersect_assoc array_uintersect_uassoc array_unique array_unshift array_values array_walk | |
83 | array_walk_recursive |
|
83 | array_walk_recursive | |
84 | assert_options base_convert base64_decode base64_encode |
|
84 | assert_options base_convert base64_decode base64_encode | |
85 | chunk_split class_exists class_implements class_parents |
|
85 | chunk_split class_exists class_implements class_parents | |
86 | count_chars debug_backtrace debug_print_backtrace debug_zval_dump |
|
86 | count_chars debug_backtrace debug_print_backtrace debug_zval_dump | |
87 | error_get_last error_log error_reporting extension_loaded |
|
87 | error_get_last error_log error_reporting extension_loaded | |
88 | file_exists file_get_contents file_put_contents load_file |
|
88 | file_exists file_get_contents file_put_contents load_file | |
89 | func_get_arg func_get_args func_num_args function_exists |
|
89 | func_get_arg func_get_args func_num_args function_exists | |
90 | get_browser get_called_class get_cfg_var get_class get_class_methods get_class_vars |
|
90 | get_browser get_called_class get_cfg_var get_class get_class_methods get_class_vars | |
91 | get_current_user get_declared_classes get_declared_interfaces get_defined_constants |
|
91 | get_current_user get_declared_classes get_declared_interfaces get_defined_constants | |
92 | get_defined_functions get_defined_vars get_extension_funcs get_headers get_html_translation_table |
|
92 | get_defined_functions get_defined_vars get_extension_funcs get_headers get_html_translation_table | |
93 | get_include_path get_included_files get_loaded_extensions get_magic_quotes_gpc get_magic_quotes_runtime |
|
93 | get_include_path get_included_files get_loaded_extensions get_magic_quotes_gpc get_magic_quotes_runtime | |
94 | get_meta_tags get_object_vars get_parent_class get_required_filesget_resource_type |
|
94 | get_meta_tags get_object_vars get_parent_class get_required_filesget_resource_type | |
95 | gc_collect_cycles gc_disable gc_enable gc_enabled |
|
95 | gc_collect_cycles gc_disable gc_enable gc_enabled | |
96 | halt_compiler headers_list headers_sent highlight_file highlight_string |
|
96 | halt_compiler headers_list headers_sent highlight_file highlight_string | |
97 | html_entity_decode htmlspecialchars_decode |
|
97 | html_entity_decode htmlspecialchars_decode | |
98 | in_array include_once inclued_get_data |
|
98 | in_array include_once inclued_get_data | |
99 | is_a is_array is_binary is_bool is_buffer is_callable is_dir is_double is_executable is_file is_finite |
|
99 | is_a is_array is_binary is_bool is_buffer is_callable is_dir is_double is_executable is_file is_finite | |
100 | is_float is_infinite is_int is_integer is_link is_long is_nan is_null is_numeric is_object is_readable |
|
100 | is_float is_infinite is_int is_integer is_link is_long is_nan is_null is_numeric is_object is_readable | |
101 | is_real is_resource is_scalar is_soap_fault is_string is_subclass_of is_unicode is_uploaded_file |
|
101 | is_real is_resource is_scalar is_soap_fault is_string is_subclass_of is_unicode is_uploaded_file | |
102 | is_writable is_writeable |
|
102 | is_writable is_writeable | |
103 | locale_get_default locale_set_default |
|
103 | locale_get_default locale_set_default | |
104 | number_format override_function parse_str parse_url |
|
104 | number_format override_function parse_str parse_url | |
105 | php_check_syntax php_ini_loaded_file php_ini_scanned_files php_logo_guid php_sapi_name |
|
105 | php_check_syntax php_ini_loaded_file php_ini_scanned_files php_logo_guid php_sapi_name | |
106 | php_strip_whitespace php_uname |
|
106 | php_strip_whitespace php_uname | |
107 | preg_filter preg_grep preg_last_error preg_match preg_match_all preg_quote preg_replace |
|
107 | preg_filter preg_grep preg_last_error preg_match preg_match_all preg_quote preg_replace | |
108 | preg_replace_callback preg_split print_r |
|
108 | preg_replace_callback preg_split print_r | |
109 | require_once register_shutdown_function register_tick_function |
|
109 | require_once register_shutdown_function register_tick_function | |
110 | set_error_handler set_exception_handler set_file_buffer set_include_path |
|
110 | set_error_handler set_exception_handler set_file_buffer set_include_path | |
111 | set_magic_quotes_runtime set_time_limit shell_exec |
|
111 | set_magic_quotes_runtime set_time_limit shell_exec | |
112 | str_getcsv str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count |
|
112 | str_getcsv str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count | |
113 | strip_tags substr_compare substr_count substr_replace |
|
113 | strip_tags substr_compare substr_count substr_replace | |
114 | time_nanosleep time_sleep_until |
|
114 | time_nanosleep time_sleep_until | |
115 | token_get_all token_name trigger_error |
|
115 | token_get_all token_name trigger_error | |
116 | unregister_tick_function use_soap_error_handler user_error |
|
116 | unregister_tick_function use_soap_error_handler user_error | |
117 | utf8_decode utf8_encode var_dump var_export |
|
117 | utf8_decode utf8_encode var_dump var_export | |
118 | version_compare |
|
118 | version_compare | |
119 | zend_logo_guid zend_thread_id zend_version |
|
119 | zend_logo_guid zend_thread_id zend_version | |
120 | create_function call_user_func_array |
|
120 | create_function call_user_func_array | |
121 | posix_access posix_ctermid posix_get_last_error posix_getcwd posix_getegid |
|
121 | posix_access posix_ctermid posix_get_last_error posix_getcwd posix_getegid | |
122 | posix_geteuid posix_getgid posix_getgrgid posix_getgrnam posix_getgroups |
|
122 | posix_geteuid posix_getgid posix_getgrgid posix_getgrnam posix_getgroups | |
123 | posix_getlogin posix_getpgid posix_getpgrp posix_getpid posix_getppid |
|
123 | posix_getlogin posix_getpgid posix_getpgrp posix_getpid posix_getppid | |
124 | posix_getpwnam posix_getpwuid posix_getrlimit posix_getsid posix_getuid |
|
124 | posix_getpwnam posix_getpwuid posix_getrlimit posix_getsid posix_getuid | |
125 | posix_initgroups posix_isatty posix_kill posix_mkfifo posix_mknod |
|
125 | posix_initgroups posix_isatty posix_kill posix_mkfifo posix_mknod | |
126 | posix_setegid posix_seteuid posix_setgid posix_setpgid posix_setsid |
|
126 | posix_setegid posix_seteuid posix_setgid posix_setpgid posix_setsid | |
127 | posix_setuid posix_strerror posix_times posix_ttyname posix_uname |
|
127 | posix_setuid posix_strerror posix_times posix_ttyname posix_uname | |
128 | pcntl_alarm pcntl_exec pcntl_fork pcntl_getpriority pcntl_setpriority |
|
128 | pcntl_alarm pcntl_exec pcntl_fork pcntl_getpriority pcntl_setpriority | |
129 | pcntl_signal pcntl_signal_dispatch pcntl_sigprocmask pcntl_sigtimedwait |
|
129 | pcntl_signal pcntl_signal_dispatch pcntl_sigprocmask pcntl_sigtimedwait | |
130 | pcntl_sigwaitinfo pcntl_wait pcntl_waitpid pcntl_wexitstatus pcntl_wifexited |
|
130 | pcntl_sigwaitinfo pcntl_wait pcntl_waitpid pcntl_wexitstatus pcntl_wifexited | |
131 | pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig |
|
131 | pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig | |
132 | ] |
|
132 | ] | |
133 | # TODO: more built-in PHP functions? |
|
133 | # TODO: more built-in PHP functions? | |
134 |
|
134 | |||
135 | EXCEPTIONS = %w[ |
|
135 | EXCEPTIONS = %w[ | |
136 | E_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING |
|
136 | E_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING | |
137 | E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_DEPRECATED E_USER_DEPRECATED E_ALL E_STRICT |
|
137 | E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_DEPRECATED E_USER_DEPRECATED E_ALL E_STRICT | |
138 | ] |
|
138 | ] | |
139 |
|
139 | |||
140 | CONSTANTS = %w[ |
|
140 | CONSTANTS = %w[ | |
141 | null true false self parent |
|
141 | null true false self parent | |
142 | __LINE__ __DIR__ __FILE__ __LINE__ |
|
142 | __LINE__ __DIR__ __FILE__ __LINE__ | |
143 | __CLASS__ __NAMESPACE__ __METHOD__ __FUNCTION__ |
|
143 | __CLASS__ __NAMESPACE__ __METHOD__ __FUNCTION__ | |
144 | PHP_VERSION PHP_MAJOR_VERSION PHP_MINOR_VERSION PHP_RELEASE_VERSION PHP_VERSION_ID PHP_EXTRA_VERSION PHP_ZTS |
|
144 | PHP_VERSION PHP_MAJOR_VERSION PHP_MINOR_VERSION PHP_RELEASE_VERSION PHP_VERSION_ID PHP_EXTRA_VERSION PHP_ZTS | |
145 | PHP_DEBUG PHP_MAXPATHLEN PHP_OS PHP_SAPI PHP_EOL PHP_INT_MAX PHP_INT_SIZE DEFAULT_INCLUDE_PATH |
|
145 | PHP_DEBUG PHP_MAXPATHLEN PHP_OS PHP_SAPI PHP_EOL PHP_INT_MAX PHP_INT_SIZE DEFAULT_INCLUDE_PATH | |
146 | PEAR_INSTALL_DIR PEAR_EXTENSION_DIR PHP_EXTENSION_DIR PHP_PREFIX PHP_BINDIR PHP_LIBDIR PHP_DATADIR |
|
146 | PEAR_INSTALL_DIR PEAR_EXTENSION_DIR PHP_EXTENSION_DIR PHP_PREFIX PHP_BINDIR PHP_LIBDIR PHP_DATADIR | |
147 | PHP_SYSCONFDIR PHP_LOCALSTATEDIR PHP_CONFIG_FILE_PATH PHP_CONFIG_FILE_SCAN_DIR PHP_SHLIB_SUFFIX |
|
147 | PHP_SYSCONFDIR PHP_LOCALSTATEDIR PHP_CONFIG_FILE_PATH PHP_CONFIG_FILE_SCAN_DIR PHP_SHLIB_SUFFIX | |
148 | PHP_OUTPUT_HANDLER_START PHP_OUTPUT_HANDLER_CONT PHP_OUTPUT_HANDLER_END |
|
148 | PHP_OUTPUT_HANDLER_START PHP_OUTPUT_HANDLER_CONT PHP_OUTPUT_HANDLER_END | |
149 | __COMPILER_HALT_OFFSET__ |
|
149 | __COMPILER_HALT_OFFSET__ | |
150 | EXTR_OVERWRITE EXTR_SKIP EXTR_PREFIX_SAME EXTR_PREFIX_ALL EXTR_PREFIX_INVALID EXTR_PREFIX_IF_EXISTS |
|
150 | EXTR_OVERWRITE EXTR_SKIP EXTR_PREFIX_SAME EXTR_PREFIX_ALL EXTR_PREFIX_INVALID EXTR_PREFIX_IF_EXISTS | |
151 | EXTR_IF_EXISTS SORT_ASC SORT_DESC SORT_REGULAR SORT_NUMERIC SORT_STRING CASE_LOWER CASE_UPPER COUNT_NORMAL |
|
151 | EXTR_IF_EXISTS SORT_ASC SORT_DESC SORT_REGULAR SORT_NUMERIC SORT_STRING CASE_LOWER CASE_UPPER COUNT_NORMAL | |
152 | COUNT_RECURSIVE ASSERT_ACTIVE ASSERT_CALLBACK ASSERT_BAIL ASSERT_WARNING ASSERT_QUIET_EVAL CONNECTION_ABORTED |
|
152 | COUNT_RECURSIVE ASSERT_ACTIVE ASSERT_CALLBACK ASSERT_BAIL ASSERT_WARNING ASSERT_QUIET_EVAL CONNECTION_ABORTED | |
153 | CONNECTION_NORMAL CONNECTION_TIMEOUT INI_USER INI_PERDIR INI_SYSTEM INI_ALL M_E M_LOG2E M_LOG10E M_LN2 M_LN10 |
|
153 | CONNECTION_NORMAL CONNECTION_TIMEOUT INI_USER INI_PERDIR INI_SYSTEM INI_ALL M_E M_LOG2E M_LOG10E M_LN2 M_LN10 | |
154 | M_PI M_PI_2 M_PI_4 M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2 CRYPT_SALT_LENGTH CRYPT_STD_DES CRYPT_EXT_DES |
|
154 | M_PI M_PI_2 M_PI_4 M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2 CRYPT_SALT_LENGTH CRYPT_STD_DES CRYPT_EXT_DES | |
155 | CRYPT_MD5 CRYPT_BLOWFISH DIRECTORY_SEPARATOR SEEK_SET SEEK_CUR SEEK_END LOCK_SH LOCK_EX LOCK_UN LOCK_NB |
|
155 | CRYPT_MD5 CRYPT_BLOWFISH DIRECTORY_SEPARATOR SEEK_SET SEEK_CUR SEEK_END LOCK_SH LOCK_EX LOCK_UN LOCK_NB | |
156 | HTML_SPECIALCHARS HTML_ENTITIES ENT_COMPAT ENT_QUOTES ENT_NOQUOTES INFO_GENERAL INFO_CREDITS |
|
156 | HTML_SPECIALCHARS HTML_ENTITIES ENT_COMPAT ENT_QUOTES ENT_NOQUOTES INFO_GENERAL INFO_CREDITS | |
157 | INFO_CONFIGURATION INFO_MODULES INFO_ENVIRONMENT INFO_VARIABLES INFO_LICENSE INFO_ALL CREDITS_GROUP |
|
157 | INFO_CONFIGURATION INFO_MODULES INFO_ENVIRONMENT INFO_VARIABLES INFO_LICENSE INFO_ALL CREDITS_GROUP | |
158 | CREDITS_GENERAL CREDITS_SAPI CREDITS_MODULES CREDITS_DOCS CREDITS_FULLPAGE CREDITS_QA CREDITS_ALL STR_PAD_LEFT |
|
158 | CREDITS_GENERAL CREDITS_SAPI CREDITS_MODULES CREDITS_DOCS CREDITS_FULLPAGE CREDITS_QA CREDITS_ALL STR_PAD_LEFT | |
159 | STR_PAD_RIGHT STR_PAD_BOTH PATHINFO_DIRNAME PATHINFO_BASENAME PATHINFO_EXTENSION PATH_SEPARATOR CHAR_MAX |
|
159 | STR_PAD_RIGHT STR_PAD_BOTH PATHINFO_DIRNAME PATHINFO_BASENAME PATHINFO_EXTENSION PATH_SEPARATOR CHAR_MAX | |
160 | LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_ALL LC_MESSAGES ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 |
|
160 | LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_ALL LC_MESSAGES ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 | |
161 | ABDAY_6 ABDAY_7 DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7 ABMON_1 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6 |
|
161 | ABDAY_6 ABDAY_7 DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7 ABMON_1 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6 | |
162 | ABMON_7 ABMON_8 ABMON_9 ABMON_10 ABMON_11 ABMON_12 MON_1 MON_2 MON_3 MON_4 MON_5 MON_6 MON_7 MON_8 MON_9 |
|
162 | ABMON_7 ABMON_8 ABMON_9 ABMON_10 ABMON_11 ABMON_12 MON_1 MON_2 MON_3 MON_4 MON_5 MON_6 MON_7 MON_8 MON_9 | |
163 | MON_10 MON_11 MON_12 AM_STR PM_STR D_T_FMT D_FMT T_FMT T_FMT_AMPM ERA ERA_YEAR ERA_D_T_FMT ERA_D_FMT ERA_T_FMT |
|
163 | MON_10 MON_11 MON_12 AM_STR PM_STR D_T_FMT D_FMT T_FMT T_FMT_AMPM ERA ERA_YEAR ERA_D_T_FMT ERA_D_FMT ERA_T_FMT | |
164 | ALT_DIGITS INT_CURR_SYMBOL CURRENCY_SYMBOL CRNCYSTR MON_DECIMAL_POINT MON_THOUSANDS_SEP MON_GROUPING |
|
164 | ALT_DIGITS INT_CURR_SYMBOL CURRENCY_SYMBOL CRNCYSTR MON_DECIMAL_POINT MON_THOUSANDS_SEP MON_GROUPING | |
165 | POSITIVE_SIGN NEGATIVE_SIGN INT_FRAC_DIGITS FRAC_DIGITS P_CS_PRECEDES P_SEP_BY_SPACE N_CS_PRECEDES |
|
165 | POSITIVE_SIGN NEGATIVE_SIGN INT_FRAC_DIGITS FRAC_DIGITS P_CS_PRECEDES P_SEP_BY_SPACE N_CS_PRECEDES | |
166 | N_SEP_BY_SPACE P_SIGN_POSN N_SIGN_POSN DECIMAL_POINT RADIXCHAR THOUSANDS_SEP THOUSEP GROUPING YESEXPR NOEXPR |
|
166 | N_SEP_BY_SPACE P_SIGN_POSN N_SIGN_POSN DECIMAL_POINT RADIXCHAR THOUSANDS_SEP THOUSEP GROUPING YESEXPR NOEXPR | |
167 | YESSTR NOSTR CODESET LOG_EMERG LOG_ALERT LOG_CRIT LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_DEBUG LOG_KERN |
|
167 | YESSTR NOSTR CODESET LOG_EMERG LOG_ALERT LOG_CRIT LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_DEBUG LOG_KERN | |
168 | LOG_USER LOG_MAIL LOG_DAEMON LOG_AUTH LOG_SYSLOG LOG_LPR LOG_NEWS LOG_UUCP LOG_CRON LOG_AUTHPRIV LOG_LOCAL0 |
|
168 | LOG_USER LOG_MAIL LOG_DAEMON LOG_AUTH LOG_SYSLOG LOG_LPR LOG_NEWS LOG_UUCP LOG_CRON LOG_AUTHPRIV LOG_LOCAL0 | |
169 | LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_PID LOG_CONS LOG_ODELAY |
|
169 | LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_PID LOG_CONS LOG_ODELAY | |
170 | LOG_NDELAY LOG_NOWAIT LOG_PERROR |
|
170 | LOG_NDELAY LOG_NOWAIT LOG_PERROR | |
171 | ] |
|
171 | ] | |
172 |
|
172 | |||
173 | PREDEFINED = %w[ |
|
173 | PREDEFINED = %w[ | |
174 | $GLOBALS $_SERVER $_GET $_POST $_FILES $_REQUEST $_SESSION $_ENV |
|
174 | $GLOBALS $_SERVER $_GET $_POST $_FILES $_REQUEST $_SESSION $_ENV | |
175 | $_COOKIE $php_errormsg $HTTP_RAW_POST_DATA $http_response_header |
|
175 | $_COOKIE $php_errormsg $HTTP_RAW_POST_DATA $http_response_header | |
176 | $argc $argv |
|
176 | $argc $argv | |
177 | ] |
|
177 | ] | |
178 |
|
178 | |||
179 | IDENT_KIND = CaseIgnoringWordList.new(:ident). |
|
179 | IDENT_KIND = CaseIgnoringWordList.new(:ident). | |
180 | add(KEYWORDS, :reserved). |
|
180 | add(KEYWORDS, :reserved). | |
181 | add(TYPES, :pre_type). |
|
181 | add(TYPES, :pre_type). | |
182 | add(LANGUAGE_CONSTRUCTS, :reserved). |
|
182 | add(LANGUAGE_CONSTRUCTS, :reserved). | |
183 | add(BUILTIN_FUNCTIONS, :predefined). |
|
183 | add(BUILTIN_FUNCTIONS, :predefined). | |
184 | add(CLASSES, :pre_constant). |
|
184 | add(CLASSES, :pre_constant). | |
185 | add(EXCEPTIONS, :exception). |
|
185 | add(EXCEPTIONS, :exception). | |
186 | add(CONSTANTS, :pre_constant) |
|
186 | add(CONSTANTS, :pre_constant) | |
187 |
|
187 | |||
188 | VARIABLE_KIND = WordList.new(:local_variable). |
|
188 | VARIABLE_KIND = WordList.new(:local_variable). | |
189 | add(PREDEFINED, :predefined) |
|
189 | add(PREDEFINED, :predefined) | |
190 | end |
|
190 | end | |
191 |
|
191 | |||
192 | module RE |
|
192 | module RE | |
193 |
|
193 | |||
194 | PHP_START = / |
|
194 | PHP_START = / | |
195 | <script\s+[^>]*?language\s*=\s*"php"[^>]*?> | |
|
195 | <script\s+[^>]*?language\s*=\s*"php"[^>]*?> | | |
196 | <script\s+[^>]*?language\s*=\s*'php'[^>]*?> | |
|
196 | <script\s+[^>]*?language\s*=\s*'php'[^>]*?> | | |
197 | <\?php\d? | |
|
197 | <\?php\d? | | |
198 | <\?(?!xml) |
|
198 | <\?(?!xml) | |
199 | /xi |
|
199 | /xi | |
200 |
|
200 | |||
201 | PHP_END = %r! |
|
201 | PHP_END = %r! | |
202 | </script> | |
|
202 | </script> | | |
203 | \?> |
|
203 | \?> | |
204 | !xi |
|
204 | !xi | |
205 |
|
205 | |||
206 | HTML_INDICATOR = /<!DOCTYPE html|<(?:html|body|div|p)[> ]/i |
|
206 | HTML_INDICATOR = /<!DOCTYPE html|<(?:html|body|div|p)[> ]/i | |
207 |
|
207 | |||
208 | IDENTIFIER = /[a-z_\x7f-\xFF][a-z0-9_\x7f-\xFF]*/i |
|
208 | IDENTIFIER = /[a-z_\x7f-\xFF][a-z0-9_\x7f-\xFF]*/i | |
209 | VARIABLE = /\$#{IDENTIFIER}/ |
|
209 | VARIABLE = /\$#{IDENTIFIER}/ | |
210 |
|
210 | |||
211 | OPERATOR = / |
|
211 | OPERATOR = / | |
212 | \.(?!\d)=? | # dot that is not decimal point, string concatenation |
|
212 | \.(?!\d)=? | # dot that is not decimal point, string concatenation | |
213 | && | \|\| | # logic |
|
213 | && | \|\| | # logic | |
214 | :: | -> | => | # scope, member, dictionary |
|
214 | :: | -> | => | # scope, member, dictionary | |
215 | \\(?!\n) | # namespace |
|
215 | \\(?!\n) | # namespace | |
216 | \+\+ | -- | # increment, decrement |
|
216 | \+\+ | -- | # increment, decrement | |
217 | [,;?:()\[\]{}] | # simple delimiters |
|
217 | [,;?:()\[\]{}] | # simple delimiters | |
218 | [-+*\/%&|^]=? | # ordinary math, binary logic, assignment shortcuts |
|
218 | [-+*\/%&|^]=? | # ordinary math, binary logic, assignment shortcuts | |
219 | [~$] | # whatever |
|
219 | [~$] | # whatever | |
220 | =& | # reference assignment |
|
220 | =& | # reference assignment | |
221 | [=!]=?=? | <> | # comparison and assignment |
|
221 | [=!]=?=? | <> | # comparison and assignment | |
222 | <<=? | >>=? | [<>]=? # comparison and shift |
|
222 | <<=? | >>=? | [<>]=? # comparison and shift | |
223 | /x |
|
223 | /x | |
224 |
|
224 | |||
225 | end |
|
225 | end | |
226 |
|
226 | |||
227 | def scan_tokens tokens, options |
|
227 | def scan_tokens tokens, options | |
|
228 | if string.respond_to?(:encoding) | |||
|
229 | unless string.encoding == Encoding::ASCII_8BIT | |||
|
230 | self.string = string.encode Encoding::ASCII_8BIT, | |||
|
231 | :invalid => :replace, :undef => :replace, :replace => '?' | |||
|
232 | end | |||
|
233 | end | |||
228 |
|
234 | |||
229 | if check(RE::PHP_START) || # starts with <? |
|
235 | if check(RE::PHP_START) || # starts with <? | |
230 | (match?(/\s*<\S/) && exist?(RE::PHP_START)) || # starts with tag and contains <? |
|
236 | (match?(/\s*<\S/) && exist?(RE::PHP_START)) || # starts with tag and contains <? | |
231 | exist?(RE::HTML_INDICATOR) || |
|
237 | exist?(RE::HTML_INDICATOR) || | |
232 | check(/.{1,100}#{RE::PHP_START}/om) # PHP start after max 100 chars |
|
238 | check(/.{1,100}#{RE::PHP_START}/om) # PHP start after max 100 chars | |
233 | # is HTML with embedded PHP, so start with HTML |
|
239 | # is HTML with embedded PHP, so start with HTML | |
234 | states = [:initial] |
|
240 | states = [:initial] | |
235 | else |
|
241 | else | |
236 | # is just PHP, so start with PHP surrounded by HTML |
|
242 | # is just PHP, so start with PHP surrounded by HTML | |
237 | states = [:initial, :php] |
|
243 | states = [:initial, :php] | |
238 | end |
|
244 | end | |
239 |
|
245 | |||
240 | label_expected = true |
|
246 | label_expected = true | |
241 | case_expected = false |
|
247 | case_expected = false | |
242 |
|
248 | |||
243 | heredoc_delimiter = nil |
|
249 | heredoc_delimiter = nil | |
244 | delimiter = nil |
|
250 | delimiter = nil | |
245 | modifier = nil |
|
251 | modifier = nil | |
246 |
|
252 | |||
247 | until eos? |
|
253 | until eos? | |
248 |
|
254 | |||
249 | match = nil |
|
255 | match = nil | |
250 | kind = nil |
|
256 | kind = nil | |
251 |
|
257 | |||
252 | case states.last |
|
258 | case states.last | |
253 |
|
259 | |||
254 | when :initial # HTML |
|
260 | when :initial # HTML | |
255 | if scan RE::PHP_START |
|
261 | if scan RE::PHP_START | |
256 | kind = :inline_delimiter |
|
262 | kind = :inline_delimiter | |
257 | label_expected = true |
|
263 | label_expected = true | |
258 | states << :php |
|
264 | states << :php | |
259 | else |
|
265 | else | |
260 | match = scan_until(/(?=#{RE::PHP_START})/o) || scan_until(/\z/) |
|
266 | match = scan_until(/(?=#{RE::PHP_START})/o) || scan_until(/\z/) | |
261 | @html_scanner.tokenize match unless match.empty? |
|
267 | @html_scanner.tokenize match unless match.empty? | |
262 | next |
|
268 | next | |
263 | end |
|
269 | end | |
264 |
|
270 | |||
265 | when :php |
|
271 | when :php | |
266 | if match = scan(/\s+/) |
|
272 | if match = scan(/\s+/) | |
267 | tokens << [match, :space] |
|
273 | tokens << [match, :space] | |
268 | next |
|
274 | next | |
269 |
|
275 | |||
270 | elsif scan(%r! (?m: \/\* (?: .*? \*\/ | .* ) ) | (?://|\#) .*? (?=#{RE::PHP_END}|$) !xo) |
|
276 | elsif scan(%r! (?m: \/\* (?: .*? \*\/ | .* ) ) | (?://|\#) .*? (?=#{RE::PHP_END}|$) !xo) | |
271 | kind = :comment |
|
277 | kind = :comment | |
272 |
|
278 | |||
273 | elsif match = scan(RE::IDENTIFIER) |
|
279 | elsif match = scan(RE::IDENTIFIER) | |
274 | kind = Words::IDENT_KIND[match] |
|
280 | kind = Words::IDENT_KIND[match] | |
275 | if kind == :ident && label_expected && check(/:(?!:)/) |
|
281 | if kind == :ident && label_expected && check(/:(?!:)/) | |
276 | kind = :label |
|
282 | kind = :label | |
277 | label_expected = true |
|
283 | label_expected = true | |
278 | else |
|
284 | else | |
279 | label_expected = false |
|
285 | label_expected = false | |
280 | if kind == :ident && match =~ /^[A-Z]/ |
|
286 | if kind == :ident && match =~ /^[A-Z]/ | |
281 | kind = :constant |
|
287 | kind = :constant | |
282 | elsif kind == :reserved |
|
288 | elsif kind == :reserved | |
283 | case match |
|
289 | case match | |
284 | when 'class' |
|
290 | when 'class' | |
285 | states << :class_expected |
|
291 | states << :class_expected | |
286 | when 'function' |
|
292 | when 'function' | |
287 | states << :function_expected |
|
293 | states << :function_expected | |
288 | when 'case', 'default' |
|
294 | when 'case', 'default' | |
289 | case_expected = true |
|
295 | case_expected = true | |
290 | end |
|
296 | end | |
291 | elsif match == 'b' && check(/['"]/) # binary string literal |
|
297 | elsif match == 'b' && check(/['"]/) # binary string literal | |
292 | modifier = match |
|
298 | modifier = match | |
293 | next |
|
299 | next | |
294 | end |
|
300 | end | |
295 | end |
|
301 | end | |
296 |
|
302 | |||
297 | elsif scan(/(?:\d+\.\d*|\d*\.\d+)(?:e[-+]?\d+)?|\d+e[-+]?\d+/i) |
|
303 | elsif scan(/(?:\d+\.\d*|\d*\.\d+)(?:e[-+]?\d+)?|\d+e[-+]?\d+/i) | |
298 | label_expected = false |
|
304 | label_expected = false | |
299 | kind = :float |
|
305 | kind = :float | |
300 |
|
306 | |||
301 | elsif scan(/0x[0-9a-fA-F]+/) |
|
307 | elsif scan(/0x[0-9a-fA-F]+/) | |
302 | label_expected = false |
|
308 | label_expected = false | |
303 | kind = :hex |
|
309 | kind = :hex | |
304 |
|
310 | |||
305 | elsif scan(/\d+/) |
|
311 | elsif scan(/\d+/) | |
306 | label_expected = false |
|
312 | label_expected = false | |
307 | kind = :integer |
|
313 | kind = :integer | |
308 |
|
314 | |||
309 | elsif scan(/'/) |
|
315 | elsif scan(/'/) | |
310 | tokens << [:open, :string] |
|
316 | tokens << [:open, :string] | |
311 | if modifier |
|
317 | if modifier | |
312 | tokens << [modifier, :modifier] |
|
318 | tokens << [modifier, :modifier] | |
313 | modifier = nil |
|
319 | modifier = nil | |
314 | end |
|
320 | end | |
315 | kind = :delimiter |
|
321 | kind = :delimiter | |
316 | states.push :sqstring |
|
322 | states.push :sqstring | |
317 |
|
323 | |||
318 | elsif match = scan(/["`]/) |
|
324 | elsif match = scan(/["`]/) | |
319 | tokens << [:open, :string] |
|
325 | tokens << [:open, :string] | |
320 | if modifier |
|
326 | if modifier | |
321 | tokens << [modifier, :modifier] |
|
327 | tokens << [modifier, :modifier] | |
322 | modifier = nil |
|
328 | modifier = nil | |
323 | end |
|
329 | end | |
324 | delimiter = match |
|
330 | delimiter = match | |
325 | kind = :delimiter |
|
331 | kind = :delimiter | |
326 | states.push :dqstring |
|
332 | states.push :dqstring | |
327 |
|
333 | |||
328 | elsif match = scan(RE::VARIABLE) |
|
334 | elsif match = scan(RE::VARIABLE) | |
329 | label_expected = false |
|
335 | label_expected = false | |
330 | kind = Words::VARIABLE_KIND[match] |
|
336 | kind = Words::VARIABLE_KIND[match] | |
331 |
|
337 | |||
332 | elsif scan(/\{/) |
|
338 | elsif scan(/\{/) | |
333 | kind = :operator |
|
339 | kind = :operator | |
334 | label_expected = true |
|
340 | label_expected = true | |
335 | states.push :php |
|
341 | states.push :php | |
336 |
|
342 | |||
337 | elsif scan(/\}/) |
|
343 | elsif scan(/\}/) | |
338 | if states.size == 1 |
|
344 | if states.size == 1 | |
339 | kind = :error |
|
345 | kind = :error | |
340 | else |
|
346 | else | |
341 | states.pop |
|
347 | states.pop | |
342 | if states.last.is_a?(::Array) |
|
348 | if states.last.is_a?(::Array) | |
343 | delimiter = states.last[1] |
|
349 | delimiter = states.last[1] | |
344 | states[-1] = states.last[0] |
|
350 | states[-1] = states.last[0] | |
345 | tokens << [matched, :delimiter] |
|
351 | tokens << [matched, :delimiter] | |
346 | tokens << [:close, :inline] |
|
352 | tokens << [:close, :inline] | |
347 | next |
|
353 | next | |
348 | else |
|
354 | else | |
349 | kind = :operator |
|
355 | kind = :operator | |
350 | label_expected = true |
|
356 | label_expected = true | |
351 | end |
|
357 | end | |
352 | end |
|
358 | end | |
353 |
|
359 | |||
354 | elsif scan(/@/) |
|
360 | elsif scan(/@/) | |
355 | label_expected = false |
|
361 | label_expected = false | |
356 | kind = :exception |
|
362 | kind = :exception | |
357 |
|
363 | |||
358 | elsif scan RE::PHP_END |
|
364 | elsif scan RE::PHP_END | |
359 | kind = :inline_delimiter |
|
365 | kind = :inline_delimiter | |
360 | states = [:initial] |
|
366 | states = [:initial] | |
361 |
|
367 | |||
362 | elsif match = scan(/<<<(?:(#{RE::IDENTIFIER})|"(#{RE::IDENTIFIER})"|'(#{RE::IDENTIFIER})')/o) |
|
368 | elsif match = scan(/<<<(?:(#{RE::IDENTIFIER})|"(#{RE::IDENTIFIER})"|'(#{RE::IDENTIFIER})')/o) | |
363 | tokens << [:open, :string] |
|
369 | tokens << [:open, :string] | |
364 | warn 'heredoc in heredoc?' if heredoc_delimiter |
|
370 | warn 'heredoc in heredoc?' if heredoc_delimiter | |
365 | heredoc_delimiter = Regexp.escape(self[1] || self[2] || self[3]) |
|
371 | heredoc_delimiter = Regexp.escape(self[1] || self[2] || self[3]) | |
366 | kind = :delimiter |
|
372 | kind = :delimiter | |
367 | states.push self[3] ? :sqstring : :dqstring |
|
373 | states.push self[3] ? :sqstring : :dqstring | |
368 | heredoc_delimiter = /#{heredoc_delimiter}(?=;?$)/ |
|
374 | heredoc_delimiter = /#{heredoc_delimiter}(?=;?$)/ | |
369 |
|
375 | |||
370 | elsif match = scan(/#{RE::OPERATOR}/o) |
|
376 | elsif match = scan(/#{RE::OPERATOR}/o) | |
371 | label_expected = match == ';' |
|
377 | label_expected = match == ';' | |
372 | if case_expected |
|
378 | if case_expected | |
373 | label_expected = true if match == ':' |
|
379 | label_expected = true if match == ':' | |
374 | case_expected = false |
|
380 | case_expected = false | |
375 | end |
|
381 | end | |
376 | kind = :operator |
|
382 | kind = :operator | |
377 |
|
383 | |||
378 | else |
|
384 | else | |
379 | getch |
|
385 | getch | |
380 | kind = :error |
|
386 | kind = :error | |
381 |
|
387 | |||
382 | end |
|
388 | end | |
383 |
|
389 | |||
384 | when :sqstring |
|
390 | when :sqstring | |
385 | if scan(heredoc_delimiter ? /[^\\\n]+/ : /[^'\\]+/) |
|
391 | if scan(heredoc_delimiter ? /[^\\\n]+/ : /[^'\\]+/) | |
386 | kind = :content |
|
392 | kind = :content | |
387 | elsif !heredoc_delimiter && scan(/'/) |
|
393 | elsif !heredoc_delimiter && scan(/'/) | |
388 | tokens << [matched, :delimiter] |
|
394 | tokens << [matched, :delimiter] | |
389 | tokens << [:close, :string] |
|
395 | tokens << [:close, :string] | |
390 | delimiter = nil |
|
396 | delimiter = nil | |
391 | label_expected = false |
|
397 | label_expected = false | |
392 | states.pop |
|
398 | states.pop | |
393 | next |
|
399 | next | |
394 | elsif heredoc_delimiter && match = scan(/\n/) |
|
400 | elsif heredoc_delimiter && match = scan(/\n/) | |
395 | kind = :content |
|
401 | kind = :content | |
396 | if scan heredoc_delimiter |
|
402 | if scan heredoc_delimiter | |
397 | tokens << ["\n", :content] |
|
403 | tokens << ["\n", :content] | |
398 | tokens << [matched, :delimiter] |
|
404 | tokens << [matched, :delimiter] | |
399 | tokens << [:close, :string] |
|
405 | tokens << [:close, :string] | |
400 | heredoc_delimiter = nil |
|
406 | heredoc_delimiter = nil | |
401 | label_expected = false |
|
407 | label_expected = false | |
402 | states.pop |
|
408 | states.pop | |
403 | next |
|
409 | next | |
404 | end |
|
410 | end | |
405 | elsif scan(heredoc_delimiter ? /\\\\/ : /\\[\\'\n]/) |
|
411 | elsif scan(heredoc_delimiter ? /\\\\/ : /\\[\\'\n]/) | |
406 | kind = :char |
|
412 | kind = :char | |
407 | elsif scan(/\\./m) |
|
413 | elsif scan(/\\./m) | |
408 | kind = :content |
|
414 | kind = :content | |
409 | elsif scan(/\\/) |
|
415 | elsif scan(/\\/) | |
410 | kind = :error |
|
416 | kind = :error | |
411 | end |
|
417 | end | |
412 |
|
418 | |||
413 | when :dqstring |
|
419 | when :dqstring | |
414 | if scan(heredoc_delimiter ? /[^${\\\n]+/ : (delimiter == '"' ? /[^"${\\]+/ : /[^`${\\]+/)) |
|
420 | if scan(heredoc_delimiter ? /[^${\\\n]+/ : (delimiter == '"' ? /[^"${\\]+/ : /[^`${\\]+/)) | |
415 | kind = :content |
|
421 | kind = :content | |
416 | elsif !heredoc_delimiter && scan(delimiter == '"' ? /"/ : /`/) |
|
422 | elsif !heredoc_delimiter && scan(delimiter == '"' ? /"/ : /`/) | |
417 | tokens << [matched, :delimiter] |
|
423 | tokens << [matched, :delimiter] | |
418 | tokens << [:close, :string] |
|
424 | tokens << [:close, :string] | |
419 | delimiter = nil |
|
425 | delimiter = nil | |
420 | label_expected = false |
|
426 | label_expected = false | |
421 | states.pop |
|
427 | states.pop | |
422 | next |
|
428 | next | |
423 | elsif heredoc_delimiter && match = scan(/\n/) |
|
429 | elsif heredoc_delimiter && match = scan(/\n/) | |
424 | kind = :content |
|
430 | kind = :content | |
425 | if scan heredoc_delimiter |
|
431 | if scan heredoc_delimiter | |
426 | tokens << ["\n", :content] |
|
432 | tokens << ["\n", :content] | |
427 | tokens << [matched, :delimiter] |
|
433 | tokens << [matched, :delimiter] | |
428 | tokens << [:close, :string] |
|
434 | tokens << [:close, :string] | |
429 | heredoc_delimiter = nil |
|
435 | heredoc_delimiter = nil | |
430 | label_expected = false |
|
436 | label_expected = false | |
431 | states.pop |
|
437 | states.pop | |
432 | next |
|
438 | next | |
433 | end |
|
439 | end | |
434 | elsif scan(/\\(?:x[0-9A-Fa-f]{1,2}|[0-7]{1,3})/) |
|
440 | elsif scan(/\\(?:x[0-9A-Fa-f]{1,2}|[0-7]{1,3})/) | |
435 | kind = :char |
|
441 | kind = :char | |
436 | elsif scan(heredoc_delimiter ? /\\[nrtvf\\$]/ : (delimiter == '"' ? /\\[nrtvf\\$"]/ : /\\[nrtvf\\$`]/)) |
|
442 | elsif scan(heredoc_delimiter ? /\\[nrtvf\\$]/ : (delimiter == '"' ? /\\[nrtvf\\$"]/ : /\\[nrtvf\\$`]/)) | |
437 | kind = :char |
|
443 | kind = :char | |
438 | elsif scan(/\\./m) |
|
444 | elsif scan(/\\./m) | |
439 | kind = :content |
|
445 | kind = :content | |
440 | elsif scan(/\\/) |
|
446 | elsif scan(/\\/) | |
441 | kind = :error |
|
447 | kind = :error | |
442 | elsif match = scan(/#{RE::VARIABLE}/o) |
|
448 | elsif match = scan(/#{RE::VARIABLE}/o) | |
443 | kind = :local_variable |
|
449 | kind = :local_variable | |
444 | if check(/\[#{RE::IDENTIFIER}\]/o) |
|
450 | if check(/\[#{RE::IDENTIFIER}\]/o) | |
445 | tokens << [:open, :inline] |
|
451 | tokens << [:open, :inline] | |
446 | tokens << [match, :local_variable] |
|
452 | tokens << [match, :local_variable] | |
447 | tokens << [scan(/\[/), :operator] |
|
453 | tokens << [scan(/\[/), :operator] | |
448 | tokens << [scan(/#{RE::IDENTIFIER}/o), :ident] |
|
454 | tokens << [scan(/#{RE::IDENTIFIER}/o), :ident] | |
449 | tokens << [scan(/\]/), :operator] |
|
455 | tokens << [scan(/\]/), :operator] | |
450 | tokens << [:close, :inline] |
|
456 | tokens << [:close, :inline] | |
451 | next |
|
457 | next | |
452 | elsif check(/\[/) |
|
458 | elsif check(/\[/) | |
453 | match << scan(/\[['"]?#{RE::IDENTIFIER}?['"]?\]?/o) |
|
459 | match << scan(/\[['"]?#{RE::IDENTIFIER}?['"]?\]?/o) | |
454 | kind = :error |
|
460 | kind = :error | |
455 | elsif check(/->#{RE::IDENTIFIER}/o) |
|
461 | elsif check(/->#{RE::IDENTIFIER}/o) | |
456 | tokens << [:open, :inline] |
|
462 | tokens << [:open, :inline] | |
457 | tokens << [match, :local_variable] |
|
463 | tokens << [match, :local_variable] | |
458 | tokens << [scan(/->/), :operator] |
|
464 | tokens << [scan(/->/), :operator] | |
459 | tokens << [scan(/#{RE::IDENTIFIER}/o), :ident] |
|
465 | tokens << [scan(/#{RE::IDENTIFIER}/o), :ident] | |
460 | tokens << [:close, :inline] |
|
466 | tokens << [:close, :inline] | |
461 | next |
|
467 | next | |
462 | elsif check(/->/) |
|
468 | elsif check(/->/) | |
463 | match << scan(/->/) |
|
469 | match << scan(/->/) | |
464 | kind = :error |
|
470 | kind = :error | |
465 | end |
|
471 | end | |
466 | elsif match = scan(/\{/) |
|
472 | elsif match = scan(/\{/) | |
467 | if check(/\$/) |
|
473 | if check(/\$/) | |
468 | kind = :delimiter |
|
474 | kind = :delimiter | |
469 | states[-1] = [states.last, delimiter] |
|
475 | states[-1] = [states.last, delimiter] | |
470 | delimiter = nil |
|
476 | delimiter = nil | |
471 | states.push :php |
|
477 | states.push :php | |
472 | tokens << [:open, :inline] |
|
478 | tokens << [:open, :inline] | |
473 | else |
|
479 | else | |
474 | kind = :string |
|
480 | kind = :string | |
475 | end |
|
481 | end | |
476 | elsif scan(/\$\{#{RE::IDENTIFIER}\}/o) |
|
482 | elsif scan(/\$\{#{RE::IDENTIFIER}\}/o) | |
477 | kind = :local_variable |
|
483 | kind = :local_variable | |
478 | elsif scan(/\$/) |
|
484 | elsif scan(/\$/) | |
479 | kind = :content |
|
485 | kind = :content | |
480 | end |
|
486 | end | |
481 |
|
487 | |||
482 | when :class_expected |
|
488 | when :class_expected | |
483 | if scan(/\s+/) |
|
489 | if scan(/\s+/) | |
484 | kind = :space |
|
490 | kind = :space | |
485 | elsif match = scan(/#{RE::IDENTIFIER}/o) |
|
491 | elsif match = scan(/#{RE::IDENTIFIER}/o) | |
486 | kind = :class |
|
492 | kind = :class | |
487 | states.pop |
|
493 | states.pop | |
488 | else |
|
494 | else | |
489 | states.pop |
|
495 | states.pop | |
490 | next |
|
496 | next | |
491 | end |
|
497 | end | |
492 |
|
498 | |||
493 | when :function_expected |
|
499 | when :function_expected | |
494 | if scan(/\s+/) |
|
500 | if scan(/\s+/) | |
495 | kind = :space |
|
501 | kind = :space | |
496 | elsif scan(/&/) |
|
502 | elsif scan(/&/) | |
497 | kind = :operator |
|
503 | kind = :operator | |
498 | elsif match = scan(/#{RE::IDENTIFIER}/o) |
|
504 | elsif match = scan(/#{RE::IDENTIFIER}/o) | |
499 | kind = :function |
|
505 | kind = :function | |
500 | states.pop |
|
506 | states.pop | |
501 | else |
|
507 | else | |
502 | states.pop |
|
508 | states.pop | |
503 | next |
|
509 | next | |
504 | end |
|
510 | end | |
505 |
|
511 | |||
506 | else |
|
512 | else | |
507 | raise_inspect 'Unknown state!', tokens, states |
|
513 | raise_inspect 'Unknown state!', tokens, states | |
508 | end |
|
514 | end | |
509 |
|
515 | |||
510 | match ||= matched |
|
516 | match ||= matched | |
511 | if $CODERAY_DEBUG and not kind |
|
517 | if $CODERAY_DEBUG and not kind | |
512 | raise_inspect 'Error token %p in line %d' % |
|
518 | raise_inspect 'Error token %p in line %d' % | |
513 | [[match, kind], line], tokens, states |
|
519 | [[match, kind], line], tokens, states | |
514 | end |
|
520 | end | |
515 | raise_inspect 'Empty token', tokens, states unless match |
|
521 | raise_inspect 'Empty token', tokens, states unless match | |
516 |
|
522 | |||
517 | tokens << [match, kind] |
|
523 | tokens << [match, kind] | |
518 |
|
524 | |||
519 | end |
|
525 | end | |
520 |
|
526 | |||
521 | tokens |
|
527 | tokens | |
522 | end |
|
528 | end | |
523 |
|
529 | |||
524 | end |
|
530 | end | |
525 |
|
531 | |||
526 | end |
|
532 | end | |
527 | end |
|
533 | end |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/plaintext.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/plaintext.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/plaintext.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/plaintext.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/python.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/python.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/python.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/python.rb |
@@ -1,74 +1,78 | |||||
1 | module CodeRay |
|
1 | module CodeRay | |
2 | module Scanners |
|
2 | module Scanners | |
3 |
|
3 | |||
4 | load :html |
|
4 | load :html | |
5 | load :ruby |
|
5 | load :ruby | |
6 |
|
6 | |||
7 | # RHTML Scanner |
|
7 | # RHTML Scanner | |
8 | class RHTML < Scanner |
|
8 | class RHTML < Scanner | |
9 |
|
9 | |||
10 | include Streamable |
|
10 | include Streamable | |
11 | register_for :rhtml |
|
11 | register_for :rhtml | |
12 | title 'HTML ERB Template' |
|
12 | title 'HTML ERB Template' | |
13 |
|
13 | |||
14 | KINDS_NOT_LOC = HTML::KINDS_NOT_LOC |
|
14 | KINDS_NOT_LOC = HTML::KINDS_NOT_LOC | |
15 |
|
15 | |||
16 | ERB_RUBY_BLOCK = / |
|
16 | ERB_RUBY_BLOCK = / | |
17 | <%(?!%)[=-]? |
|
17 | <%(?!%)[=-]? | |
18 | (?> |
|
18 | (?> | |
19 | [^\-%]* # normal* |
|
19 | [^\-%]* # normal* | |
20 | (?> # special |
|
20 | (?> # special | |
21 | (?: %(?!>) | -(?!%>) ) |
|
21 | (?: %(?!>) | -(?!%>) ) | |
22 | [^\-%]* # normal* |
|
22 | [^\-%]* # normal* | |
23 | )* |
|
23 | )* | |
24 | ) |
|
24 | ) | |
25 | (?: -?%> )? |
|
25 | (?: -?%> )? | |
26 | /x |
|
26 | /x | |
27 |
|
27 | |||
28 | START_OF_ERB = / |
|
28 | START_OF_ERB = / | |
29 | <%(?!%) |
|
29 | <%(?!%) | |
30 | /x |
|
30 | /x | |
31 |
|
31 | |||
32 | private |
|
32 | private | |
33 |
|
33 | |||
34 | def setup |
|
34 | def setup | |
35 | @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true |
|
35 | @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true | |
36 | @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true |
|
36 | @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true | |
37 | end |
|
37 | end | |
38 |
|
38 | |||
39 | def reset_instance |
|
39 | def reset_instance | |
40 | super |
|
40 | super | |
41 | @html_scanner.reset |
|
41 | @html_scanner.reset | |
42 | end |
|
42 | end | |
43 |
|
43 | |||
44 | def scan_tokens tokens, options |
|
44 | def scan_tokens tokens, options | |
45 |
|
45 | |||
46 | until eos? |
|
46 | until eos? | |
47 |
|
47 | |||
48 | if (match = scan_until(/(?=#{START_OF_ERB})/o) || scan_until(/\z/)) and not match.empty? |
|
48 | if (match = scan_until(/(?=#{START_OF_ERB})/o) || scan_until(/\z/)) and not match.empty? | |
49 | @html_scanner.tokenize match |
|
49 | @html_scanner.tokenize match | |
50 |
|
50 | |||
51 | elsif match = scan(/#{ERB_RUBY_BLOCK}/o) |
|
51 | elsif match = scan(/#{ERB_RUBY_BLOCK}/o) | |
52 | start_tag = match[/\A<%[-=]?/] |
|
52 | start_tag = match[/\A<%[-=#]?/] | |
53 | end_tag = match[/-?%?>?\z/] |
|
53 | end_tag = match[/-?%?>?\z/] | |
54 | tokens << [:open, :inline] |
|
54 | tokens << [:open, :inline] | |
55 | tokens << [start_tag, :inline_delimiter] |
|
55 | tokens << [start_tag, :inline_delimiter] | |
56 | code = match[start_tag.size .. -1 - end_tag.size] |
|
56 | code = match[start_tag.size .. -1 - end_tag.size] | |
57 | @ruby_scanner.tokenize code |
|
57 | if start_tag == '<%#' | |
|
58 | tokens << [code, :comment] | |||
|
59 | else | |||
|
60 | @ruby_scanner.tokenize code | |||
|
61 | end | |||
58 | tokens << [end_tag, :inline_delimiter] unless end_tag.empty? |
|
62 | tokens << [end_tag, :inline_delimiter] unless end_tag.empty? | |
59 | tokens << [:close, :inline] |
|
63 | tokens << [:close, :inline] | |
60 |
|
64 | |||
61 | else |
|
65 | else | |
62 | raise_inspect 'else-case reached!', tokens |
|
66 | raise_inspect 'else-case reached!', tokens | |
63 | end |
|
67 | end | |
64 |
|
68 | |||
65 | end |
|
69 | end | |
66 |
|
70 | |||
67 | tokens |
|
71 | tokens | |
68 |
|
72 | |||
69 | end |
|
73 | end | |
70 |
|
74 | |||
71 | end |
|
75 | end | |
72 |
|
76 | |||
73 | end |
|
77 | end | |
74 | end |
|
78 | end |
@@ -1,413 +1,444 | |||||
|
1 | # encoding: utf-8 | |||
1 | module CodeRay |
|
2 | module CodeRay | |
2 | module Scanners |
|
3 | module Scanners | |
3 |
|
4 | |||
4 | # This scanner is really complex, since Ruby _is_ a complex language! |
|
5 | # This scanner is really complex, since Ruby _is_ a complex language! | |
5 | # |
|
6 | # | |
6 | # It tries to highlight 100% of all common code, |
|
7 | # It tries to highlight 100% of all common code, | |
7 | # and 90% of strange codes. |
|
8 | # and 90% of strange codes. | |
8 | # |
|
9 | # | |
9 | # It is optimized for HTML highlighting, and is not very useful for |
|
10 | # It is optimized for HTML highlighting, and is not very useful for | |
10 | # parsing or pretty printing. |
|
11 | # parsing or pretty printing. | |
11 | # |
|
12 | # | |
12 | # For now, I think it's better than the scanners in VIM or Syntax, or |
|
13 | # For now, I think it's better than the scanners in VIM or Syntax, or | |
13 | # any highlighter I was able to find, except Caleb's RubyLexer. |
|
14 | # any highlighter I was able to find, except Caleb's RubyLexer. | |
14 | # |
|
15 | # | |
15 | # I hope it's also better than the rdoc/irb lexer. |
|
16 | # I hope it's also better than the rdoc/irb lexer. | |
16 | class Ruby < Scanner |
|
17 | class Ruby < Scanner | |
17 |
|
18 | |||
18 | include Streamable |
|
19 | include Streamable | |
19 |
|
20 | |||
20 | register_for :ruby |
|
21 | register_for :ruby | |
21 | file_extension 'rb' |
|
22 | file_extension 'rb' | |
22 |
|
23 | |||
23 | helper :patterns |
|
24 | helper :patterns | |
24 |
|
25 | |||
25 | if not defined? EncodingError |
|
26 | if not defined? EncodingError | |
26 | EncodingError = Class.new Exception |
|
27 | EncodingError = Class.new Exception | |
27 | end |
|
28 | end | |
28 |
|
29 | |||
29 | private |
|
30 | private | |
30 | def scan_tokens tokens, options |
|
31 | def scan_tokens tokens, options | |
|
32 | if string.respond_to?(:encoding) | |||
|
33 | unless string.encoding == Encoding::UTF_8 | |||
|
34 | self.string = string.encode Encoding::UTF_8, | |||
|
35 | :invalid => :replace, :undef => :replace, :replace => '?' | |||
|
36 | end | |||
|
37 | unicode = false | |||
|
38 | else | |||
|
39 | unicode = exist?(/[^\x00-\x7f]/) | |||
|
40 | end | |||
|
41 | ||||
31 | last_token_dot = false |
|
42 | last_token_dot = false | |
32 | value_expected = true |
|
43 | value_expected = true | |
33 | heredocs = nil |
|
44 | heredocs = nil | |
34 | last_state = nil |
|
45 | last_state = nil | |
35 | state = :initial |
|
46 | state = :initial | |
36 | depth = nil |
|
47 | depth = nil | |
37 | inline_block_stack = [] |
|
48 | inline_block_stack = [] | |
38 | unicode = string.respond_to?(:encoding) && string.encoding.name == 'UTF-8' |
|
49 | ||
39 |
|
50 | |||
40 | patterns = Patterns # avoid constant lookup |
|
51 | patterns = Patterns # avoid constant lookup | |
41 |
|
52 | |||
42 | until eos? |
|
53 | until eos? | |
43 | match = nil |
|
54 | match = nil | |
44 | kind = nil |
|
55 | kind = nil | |
45 |
|
56 | |||
46 | if state.instance_of? patterns::StringState |
|
57 | if state.instance_of? patterns::StringState | |
47 | # {{{ |
|
58 | # {{{ | |
48 | match = scan_until(state.pattern) || scan_until(/\z/) |
|
59 | match = scan_until(state.pattern) || scan_until(/\z/) | |
49 | tokens << [match, :content] unless match.empty? |
|
60 | tokens << [match, :content] unless match.empty? | |
50 | break if eos? |
|
61 | break if eos? | |
51 |
|
62 | |||
52 | if state.heredoc and self[1] # end of heredoc |
|
63 | if state.heredoc and self[1] # end of heredoc | |
53 | match = getch.to_s |
|
64 | match = getch.to_s | |
54 | match << scan_until(/$/) unless eos? |
|
65 | match << scan_until(/$/) unless eos? | |
55 | tokens << [match, :delimiter] |
|
66 | tokens << [match, :delimiter] | |
56 | tokens << [:close, state.type] |
|
67 | tokens << [:close, state.type] | |
57 | state = state.next_state |
|
68 | state = state.next_state | |
58 | next |
|
69 | next | |
59 | end |
|
70 | end | |
60 |
|
71 | |||
61 | case match = getch |
|
72 | case match = getch | |
62 |
|
73 | |||
63 | when state.delim |
|
74 | when state.delim | |
64 | if state.paren |
|
75 | if state.paren | |
65 | state.paren_depth -= 1 |
|
76 | state.paren_depth -= 1 | |
66 | if state.paren_depth > 0 |
|
77 | if state.paren_depth > 0 | |
67 | tokens << [match, :nesting_delimiter] |
|
78 | tokens << [match, :nesting_delimiter] | |
68 | next |
|
79 | next | |
69 | end |
|
80 | end | |
70 | end |
|
81 | end | |
71 | tokens << [match, :delimiter] |
|
82 | tokens << [match, :delimiter] | |
72 | if state.type == :regexp and not eos? |
|
83 | if state.type == :regexp and not eos? | |
73 | modifiers = scan(/#{patterns::REGEXP_MODIFIERS}/ox) |
|
84 | modifiers = scan(/#{patterns::REGEXP_MODIFIERS}/ox) | |
74 | tokens << [modifiers, :modifier] unless modifiers.empty? |
|
85 | tokens << [modifiers, :modifier] unless modifiers.empty? | |
75 | end |
|
86 | end | |
76 | tokens << [:close, state.type] |
|
87 | tokens << [:close, state.type] | |
77 | value_expected = false |
|
88 | value_expected = false | |
78 | state = state.next_state |
|
89 | state = state.next_state | |
79 |
|
90 | |||
80 | when '\\' |
|
91 | when '\\' | |
81 | if state.interpreted |
|
92 | if state.interpreted | |
82 | if esc = scan(/ #{patterns::ESCAPE} /ox) |
|
93 | if esc = scan(/ #{patterns::ESCAPE} /ox) | |
83 | tokens << [match + esc, :char] |
|
94 | tokens << [match + esc, :char] | |
84 | else |
|
95 | else | |
85 | tokens << [match, :error] |
|
96 | tokens << [match, :error] | |
86 | end |
|
97 | end | |
87 | else |
|
98 | else | |
88 | case m = getch |
|
99 | case m = getch | |
89 | when state.delim, '\\' |
|
100 | when state.delim, '\\' | |
90 | tokens << [match + m, :char] |
|
101 | tokens << [match + m, :char] | |
91 | when nil |
|
102 | when nil | |
92 | tokens << [match, :error] |
|
103 | tokens << [match, :error] | |
93 | else |
|
104 | else | |
94 | tokens << [match + m, :content] |
|
105 | tokens << [match + m, :content] | |
95 | end |
|
106 | end | |
96 | end |
|
107 | end | |
97 |
|
108 | |||
98 | when '#' |
|
109 | when '#' | |
99 | case peek(1) |
|
110 | case peek(1) | |
100 | when '{' |
|
111 | when '{' | |
101 | inline_block_stack << [state, depth, heredocs] |
|
112 | inline_block_stack << [state, depth, heredocs] | |
102 | value_expected = true |
|
113 | value_expected = true | |
103 | state = :initial |
|
114 | state = :initial | |
104 | depth = 1 |
|
115 | depth = 1 | |
105 | tokens << [:open, :inline] |
|
116 | tokens << [:open, :inline] | |
106 | tokens << [match + getch, :inline_delimiter] |
|
117 | tokens << [match + getch, :inline_delimiter] | |
107 | when '$', '@' |
|
118 | when '$', '@' | |
108 | tokens << [match, :escape] |
|
119 | tokens << [match, :escape] | |
109 | last_state = state # scan one token as normal code, then return here |
|
120 | last_state = state # scan one token as normal code, then return here | |
110 | state = :initial |
|
121 | state = :initial | |
111 | else |
|
122 | else | |
112 | raise_inspect 'else-case # reached; #%p not handled' % peek(1), tokens |
|
123 | raise_inspect 'else-case # reached; #%p not handled' % peek(1), tokens | |
113 | end |
|
124 | end | |
114 |
|
125 | |||
115 | when state.paren |
|
126 | when state.paren | |
116 | state.paren_depth += 1 |
|
127 | state.paren_depth += 1 | |
117 | tokens << [match, :nesting_delimiter] |
|
128 | tokens << [match, :nesting_delimiter] | |
118 |
|
129 | |||
119 | when /#{patterns::REGEXP_SYMBOLS}/ox |
|
130 | when /#{patterns::REGEXP_SYMBOLS}/ox | |
120 | tokens << [match, :function] |
|
131 | tokens << [match, :function] | |
121 |
|
132 | |||
122 | else |
|
133 | else | |
123 | raise_inspect 'else-case " reached; %p not handled, state = %p' % [match, state], tokens |
|
134 | raise_inspect 'else-case " reached; %p not handled, state = %p' % [match, state], tokens | |
124 |
|
135 | |||
125 | end |
|
136 | end | |
126 | next |
|
137 | next | |
127 | # }}} |
|
138 | # }}} | |
128 | else |
|
139 | else | |
129 | # {{{ |
|
140 | # {{{ | |
130 | if match = scan(/[ \t\f]+/) |
|
141 | if match = scan(/[ \t\f]+/) | |
131 | kind = :space |
|
142 | kind = :space | |
132 | match << scan(/\s*/) unless eos? || heredocs |
|
143 | match << scan(/\s*/) unless eos? || heredocs | |
133 | value_expected = true if match.index(?\n) |
|
144 | value_expected = true if match.index(?\n) | |
134 | tokens << [match, kind] |
|
145 | tokens << [match, kind] | |
135 | next |
|
146 | next | |
136 |
|
147 | |||
137 | elsif match = scan(/\\?\n/) |
|
148 | elsif match = scan(/\\?\n/) | |
138 | kind = :space |
|
149 | kind = :space | |
139 | if match == "\n" |
|
150 | if match == "\n" | |
140 | value_expected = true |
|
151 | value_expected = true | |
141 | state = :initial if state == :undef_comma_expected |
|
152 | state = :initial if state == :undef_comma_expected | |
142 | end |
|
153 | end | |
143 | if heredocs |
|
154 | if heredocs | |
144 | unscan # heredoc scanning needs \n at start |
|
155 | unscan # heredoc scanning needs \n at start | |
145 | state = heredocs.shift |
|
156 | state = heredocs.shift | |
146 | tokens << [:open, state.type] |
|
157 | tokens << [:open, state.type] | |
147 | heredocs = nil if heredocs.empty? |
|
158 | heredocs = nil if heredocs.empty? | |
148 | next |
|
159 | next | |
149 | else |
|
160 | else | |
150 | match << scan(/\s*/) unless eos? |
|
161 | match << scan(/\s*/) unless eos? | |
151 | end |
|
162 | end | |
152 | tokens << [match, kind] |
|
163 | tokens << [match, kind] | |
153 | next |
|
164 | next | |
154 |
|
165 | |||
155 | elsif bol? && match = scan(/\#!.*/) |
|
166 | elsif bol? && match = scan(/\#!.*/) | |
156 | tokens << [match, :doctype] |
|
167 | tokens << [match, :doctype] | |
157 | next |
|
168 | next | |
158 |
|
169 | |||
159 | elsif match = scan(/\#.*/) or |
|
170 | elsif match = scan(/\#.*/) or | |
160 | ( bol? and match = scan(/#{patterns::RUBYDOC_OR_DATA}/o) ) |
|
171 | ( bol? and match = scan(/#{patterns::RUBYDOC_OR_DATA}/o) ) | |
161 | kind = :comment |
|
172 | kind = :comment | |
162 | tokens << [match, kind] |
|
173 | tokens << [match, kind] | |
163 | next |
|
174 | next | |
164 |
|
175 | |||
165 | elsif state == :initial |
|
176 | elsif state == :initial | |
166 |
|
177 | |||
167 | # IDENTS # |
|
178 | # IDENTS # | |
168 | if match = scan(unicode ? /#{patterns::METHOD_NAME}/uo : |
|
179 | if match = scan(unicode ? /#{patterns::METHOD_NAME}/uo : | |
169 | /#{patterns::METHOD_NAME}/o) |
|
180 | /#{patterns::METHOD_NAME}/o) | |
170 | if last_token_dot |
|
181 | if last_token_dot | |
171 | kind = if match[/^[A-Z]/] and not match?(/\(/) then :constant else :ident end |
|
182 | kind = if match[/^[A-Z]/] and not match?(/\(/) then :constant else :ident end | |
172 | else |
|
183 | else | |
173 | kind = patterns::IDENT_KIND[match] |
|
184 | if value_expected != :expect_colon && scan(/:(?= )/) | |
174 | if kind == :ident and match[/^[A-Z]/] and not match[/[!?]$/] and not match?(/\(/) |
|
185 | tokens << [match, :key] | |
175 |
|
|
186 | match = ':' | |
176 |
|
|
187 | kind = :operator | |
177 | state = patterns::DEF_NEW_STATE[match] |
|
188 | else | |
178 |
|
|
189 | kind = patterns::IDENT_KIND[match] | |
|
190 | if kind == :ident | |||
|
191 | if match[/\A[A-Z]/] and not match[/[!?]$/] and not match?(/\(/) | |||
|
192 | kind = :constant | |||
|
193 | end | |||
|
194 | elsif kind == :reserved | |||
|
195 | state = patterns::DEF_NEW_STATE[match] | |||
|
196 | value_expected = :set if patterns::KEYWORDS_EXPECTING_VALUE[match] | |||
|
197 | end | |||
179 | end |
|
198 | end | |
180 | end |
|
199 | end | |
181 | value_expected = :set if check(/#{patterns::VALUE_FOLLOWS}/o) |
|
200 | value_expected = :set if check(/#{patterns::VALUE_FOLLOWS}/o) | |
182 |
|
201 | |||
183 | elsif last_token_dot and match = scan(/#{patterns::METHOD_NAME_OPERATOR}|\(/o) |
|
202 | elsif last_token_dot and match = scan(/#{patterns::METHOD_NAME_OPERATOR}|\(/o) | |
184 | kind = :ident |
|
203 | kind = :ident | |
185 |
value_expected = :set if check(/#{patterns::VALUE_FOLLOWS}/ |
|
204 | value_expected = :set if check(unicode ? /#{patterns::VALUE_FOLLOWS}/uo : | |
|
205 | /#{patterns::VALUE_FOLLOWS}/o) | |||
186 |
|
206 | |||
187 | # OPERATORS # |
|
207 | # OPERATORS # | |
188 | elsif not last_token_dot and match = scan(/ \.\.\.? | (?:\.|::)() | [,\(\)\[\]\{\}] | ==?=? /x) |
|
208 | elsif not last_token_dot and match = scan(/ \.\.\.? | (?:\.|::)() | [,\(\)\[\]\{\}] | ==?=? /x) | |
189 | if match !~ / [.\)\]\}] /x or match =~ /\.\.\.?/ |
|
209 | if match !~ / [.\)\]\}] /x or match =~ /\.\.\.?/ | |
190 | value_expected = :set |
|
210 | value_expected = :set | |
191 | end |
|
211 | end | |
192 | last_token_dot = :set if self[1] |
|
212 | last_token_dot = :set if self[1] | |
193 | kind = :operator |
|
213 | kind = :operator | |
194 | unless inline_block_stack.empty? |
|
214 | unless inline_block_stack.empty? | |
195 | case match |
|
215 | case match | |
196 | when '{' |
|
216 | when '{' | |
197 | depth += 1 |
|
217 | depth += 1 | |
198 | when '}' |
|
218 | when '}' | |
199 | depth -= 1 |
|
219 | depth -= 1 | |
200 | if depth == 0 # closing brace of inline block reached |
|
220 | if depth == 0 # closing brace of inline block reached | |
201 | state, depth, heredocs = inline_block_stack.pop |
|
221 | state, depth, heredocs = inline_block_stack.pop | |
202 | heredocs = nil if heredocs && heredocs.empty? |
|
222 | heredocs = nil if heredocs && heredocs.empty? | |
203 | tokens << [match, :inline_delimiter] |
|
223 | tokens << [match, :inline_delimiter] | |
204 | kind = :inline |
|
224 | kind = :inline | |
205 | match = :close |
|
225 | match = :close | |
206 | end |
|
226 | end | |
207 | end |
|
227 | end | |
208 | end |
|
228 | end | |
209 |
|
229 | |||
210 | elsif match = scan(/ ['"] /mx) |
|
230 | elsif match = scan(/ ['"] /mx) | |
211 | tokens << [:open, :string] |
|
231 | tokens << [:open, :string] | |
212 | kind = :delimiter |
|
232 | kind = :delimiter | |
213 | state = patterns::StringState.new :string, match == '"', match # important for streaming |
|
233 | state = patterns::StringState.new :string, match == '"', match # important for streaming | |
214 |
|
234 | |||
215 |
elsif match = scan(/#{patterns::INSTANCE_VARIABLE}/ |
|
235 | elsif match = scan(unicode ? /#{patterns::INSTANCE_VARIABLE}/uo : | |
|
236 | /#{patterns::INSTANCE_VARIABLE}/o) | |||
216 | kind = :instance_variable |
|
237 | kind = :instance_variable | |
217 |
|
238 | |||
218 | elsif value_expected and match = scan(/\//) |
|
239 | elsif value_expected and match = scan(/\//) | |
219 | tokens << [:open, :regexp] |
|
240 | tokens << [:open, :regexp] | |
220 | kind = :delimiter |
|
241 | kind = :delimiter | |
221 | interpreted = true |
|
242 | interpreted = true | |
222 | state = patterns::StringState.new :regexp, interpreted, match |
|
243 | state = patterns::StringState.new :regexp, interpreted, match | |
223 |
|
244 | |||
224 | # elsif match = scan(/[-+]?#{patterns::NUMERIC}/o) |
|
245 | # elsif match = scan(/[-+]?#{patterns::NUMERIC}/o) | |
225 | elsif match = value_expected ? scan(/[-+]?#{patterns::NUMERIC}/o) : scan(/#{patterns::NUMERIC}/o) |
|
246 | elsif match = value_expected ? scan(/[-+]?#{patterns::NUMERIC}/o) : scan(/#{patterns::NUMERIC}/o) | |
226 | kind = self[1] ? :float : :integer |
|
247 | kind = self[1] ? :float : :integer | |
227 |
|
248 | |||
228 |
elsif match = scan(/#{patterns::SYMBOL}/ |
|
249 | elsif match = scan(unicode ? /#{patterns::SYMBOL}/uo : | |
|
250 | /#{patterns::SYMBOL}/o) | |||
229 | case delim = match[1] |
|
251 | case delim = match[1] | |
230 | when ?', ?" |
|
252 | when ?', ?" | |
231 | tokens << [:open, :symbol] |
|
253 | tokens << [:open, :symbol] | |
232 | tokens << [':', :symbol] |
|
254 | tokens << [':', :symbol] | |
233 | match = delim.chr |
|
255 | match = delim.chr | |
234 | kind = :delimiter |
|
256 | kind = :delimiter | |
235 | state = patterns::StringState.new :symbol, delim == ?", match |
|
257 | state = patterns::StringState.new :symbol, delim == ?", match | |
236 | else |
|
258 | else | |
237 | kind = :symbol |
|
259 | kind = :symbol | |
238 | end |
|
260 | end | |
239 |
|
261 | |||
240 |
elsif match = scan(/ |
|
262 | elsif match = scan(/ -[>=]? | [+!~^]=? | [*|&]{1,2}=? | >>? /x) | |
241 | value_expected = :set |
|
263 | value_expected = :set | |
242 | kind = :operator |
|
264 | kind = :operator | |
243 |
|
265 | |||
244 |
elsif value_expected and match = scan(/#{patterns::HEREDOC_OPEN}/ |
|
266 | elsif value_expected and match = scan(unicode ? /#{patterns::HEREDOC_OPEN}/uo : | |
|
267 | /#{patterns::HEREDOC_OPEN}/o) | |||
245 | indented = self[1] == '-' |
|
268 | indented = self[1] == '-' | |
246 | quote = self[3] |
|
269 | quote = self[3] | |
247 | delim = self[quote ? 4 : 2] |
|
270 | delim = self[quote ? 4 : 2] | |
248 | kind = patterns::QUOTE_TO_TYPE[quote] |
|
271 | kind = patterns::QUOTE_TO_TYPE[quote] | |
249 | tokens << [:open, kind] |
|
272 | tokens << [:open, kind] | |
250 | tokens << [match, :delimiter] |
|
273 | tokens << [match, :delimiter] | |
251 | match = :close |
|
274 | match = :close | |
252 | heredoc = patterns::StringState.new kind, quote != '\'', delim, (indented ? :indented : :linestart ) |
|
275 | heredoc = patterns::StringState.new kind, quote != '\'', delim, (indented ? :indented : :linestart ) | |
253 | heredocs ||= [] # create heredocs if empty |
|
276 | heredocs ||= [] # create heredocs if empty | |
254 | heredocs << heredoc |
|
277 | heredocs << heredoc | |
255 |
|
278 | |||
256 | elsif value_expected and match = scan(/#{patterns::FANCY_START_CORRECT}/o) |
|
279 | elsif value_expected and match = scan(/#{patterns::FANCY_START_CORRECT}/o) | |
257 | kind, interpreted = *patterns::FancyStringType.fetch(self[1]) do |
|
280 | kind, interpreted = *patterns::FancyStringType.fetch(self[1]) do | |
258 | raise_inspect 'Unknown fancy string: %%%p' % k, tokens |
|
281 | raise_inspect 'Unknown fancy string: %%%p' % k, tokens | |
259 | end |
|
282 | end | |
260 | tokens << [:open, kind] |
|
283 | tokens << [:open, kind] | |
261 | state = patterns::StringState.new kind, interpreted, self[2] |
|
284 | state = patterns::StringState.new kind, interpreted, self[2] | |
262 | kind = :delimiter |
|
285 | kind = :delimiter | |
263 |
|
286 | |||
264 |
elsif value_expected and match = scan(/#{patterns::CHARACTER}/ |
|
287 | elsif value_expected and match = scan(unicode ? /#{patterns::CHARACTER}/uo : | |
|
288 | /#{patterns::CHARACTER}/o) | |||
265 | kind = :integer |
|
289 | kind = :integer | |
266 |
|
290 | |||
267 | elsif match = scan(/ [\/%]=? | <(?:<|=>?)? | [?:;] /x) |
|
291 | elsif match = scan(/ [\/%]=? | <(?:<|=>?)? | [?:;] /x) | |
268 | value_expected = :set |
|
292 | value_expected = :set | |
269 | kind = :operator |
|
293 | kind = :operator | |
270 |
|
294 | |||
271 | elsif match = scan(/`/) |
|
295 | elsif match = scan(/`/) | |
272 | if last_token_dot |
|
296 | if last_token_dot | |
273 | kind = :operator |
|
297 | kind = :operator | |
274 | else |
|
298 | else | |
275 | tokens << [:open, :shell] |
|
299 | tokens << [:open, :shell] | |
276 | kind = :delimiter |
|
300 | kind = :delimiter | |
277 | state = patterns::StringState.new :shell, true, match |
|
301 | state = patterns::StringState.new :shell, true, match | |
278 | end |
|
302 | end | |
279 |
|
303 | |||
280 |
elsif match = scan(/#{patterns::GLOBAL_VARIABLE}/ |
|
304 | elsif match = scan(unicode ? /#{patterns::GLOBAL_VARIABLE}/uo : | |
|
305 | /#{patterns::GLOBAL_VARIABLE}/o) | |||
281 | kind = :global_variable |
|
306 | kind = :global_variable | |
282 |
|
307 | |||
283 |
elsif match = scan(/#{patterns::CLASS_VARIABLE}/ |
|
308 | elsif match = scan(unicode ? /#{patterns::CLASS_VARIABLE}/uo : | |
|
309 | /#{patterns::CLASS_VARIABLE}/o) | |||
284 | kind = :class_variable |
|
310 | kind = :class_variable | |
285 |
|
311 | |||
286 | else |
|
312 | else | |
287 | if !unicode |
|
313 | if !unicode && !string.respond_to?(:encoding) | |
288 | # check for unicode |
|
314 | # check for unicode | |
289 | debug, $DEBUG = $DEBUG, false |
|
315 | debug, $DEBUG = $DEBUG, false | |
290 | begin |
|
316 | begin | |
291 | if check(/./mu).size > 1 |
|
317 | if check(/./mu).size > 1 | |
292 | # seems like we should try again with unicode |
|
318 | # seems like we should try again with unicode | |
293 | unicode = true |
|
319 | unicode = true | |
294 | end |
|
320 | end | |
295 | rescue |
|
321 | rescue | |
296 | # bad unicode char; use getch |
|
322 | # bad unicode char; use getch | |
297 | ensure |
|
323 | ensure | |
298 | $DEBUG = debug |
|
324 | $DEBUG = debug | |
299 | end |
|
325 | end | |
300 | next if unicode |
|
326 | next if unicode | |
301 | end |
|
327 | end | |
302 | kind = :error |
|
328 | kind = :error | |
303 | match = getch |
|
329 | match = scan(unicode ? /./mu : /./m) | |
304 |
|
330 | |||
305 | end |
|
331 | end | |
306 |
|
332 | |||
307 | elsif state == :def_expected |
|
333 | elsif state == :def_expected | |
308 | state = :initial |
|
334 | state = :initial | |
309 | if scan(/self\./) |
|
335 | if scan(/self\./) | |
310 | tokens << ['self', :pre_constant] |
|
336 | tokens << ['self', :pre_constant] | |
311 | tokens << ['.', :operator] |
|
337 | tokens << ['.', :operator] | |
312 | end |
|
338 | end | |
313 | if match = scan(unicode ? /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/uo : |
|
339 | if match = scan(unicode ? /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/uo : | |
314 | /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/o) |
|
340 | /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/o) | |
315 | kind = :method |
|
341 | kind = :method | |
316 | else |
|
342 | else | |
317 | next |
|
343 | next | |
318 | end |
|
344 | end | |
319 |
|
345 | |||
320 | elsif state == :module_expected |
|
346 | elsif state == :module_expected | |
321 | if match = scan(/<</) |
|
347 | if match = scan(/<</) | |
322 | kind = :operator |
|
348 | kind = :operator | |
323 | else |
|
349 | else | |
324 | state = :initial |
|
350 | state = :initial | |
325 |
if match = scan(/ |
|
351 | if match = scan(unicode ? /(?:#{patterns::IDENT}::)*#{patterns::IDENT}/uo : | |
|
352 | /(?:#{patterns::IDENT}::)*#{patterns::IDENT}/o) | |||
326 | kind = :class |
|
353 | kind = :class | |
327 | else |
|
354 | else | |
328 | next |
|
355 | next | |
329 | end |
|
356 | end | |
330 | end |
|
357 | end | |
331 |
|
358 | |||
332 | elsif state == :undef_expected |
|
359 | elsif state == :undef_expected | |
333 | state = :undef_comma_expected |
|
360 | state = :undef_comma_expected | |
334 |
if match = scan(/#{patterns::METHOD_NAME_EX}/ |
|
361 | if match = scan(unicode ? /#{patterns::METHOD_NAME_EX}/uo : | |
|
362 | /#{patterns::METHOD_NAME_EX}/o) | |||
335 | kind = :method |
|
363 | kind = :method | |
336 |
elsif match = scan(/#{patterns::SYMBOL}/ |
|
364 | elsif match = scan(unicode ? /#{patterns::SYMBOL}/uo : | |
|
365 | /#{patterns::SYMBOL}/o) | |||
337 | case delim = match[1] |
|
366 | case delim = match[1] | |
338 | when ?', ?" |
|
367 | when ?', ?" | |
339 | tokens << [:open, :symbol] |
|
368 | tokens << [:open, :symbol] | |
340 | tokens << [':', :symbol] |
|
369 | tokens << [':', :symbol] | |
341 | match = delim.chr |
|
370 | match = delim.chr | |
342 | kind = :delimiter |
|
371 | kind = :delimiter | |
343 | state = patterns::StringState.new :symbol, delim == ?", match |
|
372 | state = patterns::StringState.new :symbol, delim == ?", match | |
344 | state.next_state = :undef_comma_expected |
|
373 | state.next_state = :undef_comma_expected | |
345 | else |
|
374 | else | |
346 | kind = :symbol |
|
375 | kind = :symbol | |
347 | end |
|
376 | end | |
348 | else |
|
377 | else | |
349 | state = :initial |
|
378 | state = :initial | |
350 | next |
|
379 | next | |
351 | end |
|
380 | end | |
352 |
|
381 | |||
353 | elsif state == :alias_expected |
|
382 | elsif state == :alias_expected | |
354 | match = scan(unicode ? /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/uo : |
|
383 | match = scan(unicode ? /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/uo : | |
355 | /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/o) |
|
384 | /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/o) | |
356 |
|
385 | |||
357 | if match |
|
386 | if match | |
358 | tokens << [self[1], (self[1][0] == ?: ? :symbol : :method)] |
|
387 | tokens << [self[1], (self[1][0] == ?: ? :symbol : :method)] | |
359 | tokens << [self[2], :space] |
|
388 | tokens << [self[2], :space] | |
360 | tokens << [self[3], (self[3][0] == ?: ? :symbol : :method)] |
|
389 | tokens << [self[3], (self[3][0] == ?: ? :symbol : :method)] | |
361 | end |
|
390 | end | |
362 | state = :initial |
|
391 | state = :initial | |
363 | next |
|
392 | next | |
364 |
|
393 | |||
365 | elsif state == :undef_comma_expected |
|
394 | elsif state == :undef_comma_expected | |
366 | if match = scan(/,/) |
|
395 | if match = scan(/,/) | |
367 | kind = :operator |
|
396 | kind = :operator | |
368 | state = :undef_expected |
|
397 | state = :undef_expected | |
369 | else |
|
398 | else | |
370 | state = :initial |
|
399 | state = :initial | |
371 | next |
|
400 | next | |
372 | end |
|
401 | end | |
373 |
|
402 | |||
374 | end |
|
403 | end | |
375 | # }}} |
|
404 | # }}} | |
376 |
|
405 | |||
377 | unless kind == :error |
|
406 | unless kind == :error | |
378 | value_expected = value_expected == :set |
|
407 | if value_expected = value_expected == :set | |
|
408 | value_expected = :expect_colon if match == '?' || match == 'when' | |||
|
409 | end | |||
379 | last_token_dot = last_token_dot == :set |
|
410 | last_token_dot = last_token_dot == :set | |
380 | end |
|
411 | end | |
381 |
|
412 | |||
382 | if $CODERAY_DEBUG and not kind |
|
413 | if $CODERAY_DEBUG and not kind | |
383 | raise_inspect 'Error token %p in line %d' % |
|
414 | raise_inspect 'Error token %p in line %d' % | |
384 | [[match, kind], line], tokens, state |
|
415 | [[match, kind], line], tokens, state | |
385 | end |
|
416 | end | |
386 | raise_inspect 'Empty token', tokens unless match |
|
417 | raise_inspect 'Empty token', tokens unless match | |
387 |
|
418 | |||
388 | tokens << [match, kind] |
|
419 | tokens << [match, kind] | |
389 |
|
420 | |||
390 | if last_state |
|
421 | if last_state | |
391 | state = last_state |
|
422 | state = last_state | |
392 | last_state = nil |
|
423 | last_state = nil | |
393 | end |
|
424 | end | |
394 | end |
|
425 | end | |
395 | end |
|
426 | end | |
396 |
|
427 | |||
397 | inline_block_stack << [state] if state.is_a? patterns::StringState |
|
428 | inline_block_stack << [state] if state.is_a? patterns::StringState | |
398 | until inline_block_stack.empty? |
|
429 | until inline_block_stack.empty? | |
399 | this_block = inline_block_stack.pop |
|
430 | this_block = inline_block_stack.pop | |
400 | tokens << [:close, :inline] if this_block.size > 1 |
|
431 | tokens << [:close, :inline] if this_block.size > 1 | |
401 | state = this_block.first |
|
432 | state = this_block.first | |
402 | tokens << [:close, state.type] |
|
433 | tokens << [:close, state.type] | |
403 | end |
|
434 | end | |
404 |
|
435 | |||
405 | tokens |
|
436 | tokens | |
406 | end |
|
437 | end | |
407 |
|
438 | |||
408 | end |
|
439 | end | |
409 |
|
440 | |||
410 | end |
|
441 | end | |
411 | end |
|
442 | end | |
412 |
|
443 | |||
413 | # vim:fdm=marker |
|
444 | # vim:fdm=marker |
@@ -1,238 +1,252 | |||||
1 | # encoding: utf-8 |
|
1 | # encoding: utf-8 | |
2 | module CodeRay |
|
2 | module CodeRay | |
3 | module Scanners |
|
3 | module Scanners | |
4 |
|
4 | |||
5 | module Ruby::Patterns # :nodoc: |
|
5 | module Ruby::Patterns # :nodoc: | |
6 |
|
6 | |||
7 | RESERVED_WORDS = %w[ |
|
7 | RESERVED_WORDS = %w[ | |
8 | and def end in or unless begin |
|
8 | and def end in or unless begin | |
9 | defined? ensure module redo super until |
|
9 | defined? ensure module redo super until | |
10 | BEGIN break do next rescue then |
|
10 | BEGIN break do next rescue then | |
11 | when END case else for retry |
|
11 | when END case else for retry | |
12 | while alias class elsif if not return |
|
12 | while alias class elsif if not return | |
13 | undef yield |
|
13 | undef yield | |
14 | ] |
|
14 | ] | |
15 |
|
15 | |||
16 | DEF_KEYWORDS = %w[ def ] |
|
16 | DEF_KEYWORDS = %w[ def ] | |
17 | UNDEF_KEYWORDS = %w[ undef ] |
|
17 | UNDEF_KEYWORDS = %w[ undef ] | |
18 | ALIAS_KEYWORDS = %w[ alias ] |
|
18 | ALIAS_KEYWORDS = %w[ alias ] | |
19 | MODULE_KEYWORDS = %w[class module] |
|
19 | MODULE_KEYWORDS = %w[ class module ] | |
20 | DEF_NEW_STATE = WordList.new(:initial). |
|
20 | DEF_NEW_STATE = WordList.new(:initial). | |
21 | add(DEF_KEYWORDS, :def_expected). |
|
21 | add(DEF_KEYWORDS, :def_expected). | |
22 | add(UNDEF_KEYWORDS, :undef_expected). |
|
22 | add(UNDEF_KEYWORDS, :undef_expected). | |
23 | add(ALIAS_KEYWORDS, :alias_expected). |
|
23 | add(ALIAS_KEYWORDS, :alias_expected). | |
24 | add(MODULE_KEYWORDS, :module_expected) |
|
24 | add(MODULE_KEYWORDS, :module_expected) | |
25 |
|
25 | |||
26 | PREDEFINED_CONSTANTS = %w[ |
|
26 | PREDEFINED_CONSTANTS = %w[ | |
27 | nil true false self |
|
27 | nil true false self | |
28 |
DATA ARGV ARGF |
|
28 | DATA ARGV ARGF | |
|
29 | __FILE__ __LINE__ __ENCODING__ | |||
29 | ] |
|
30 | ] | |
30 |
|
31 | |||
31 | IDENT_KIND = WordList.new(:ident). |
|
32 | IDENT_KIND = WordList.new(:ident). | |
32 | add(RESERVED_WORDS, :reserved). |
|
33 | add(RESERVED_WORDS, :reserved). | |
33 | add(PREDEFINED_CONSTANTS, :pre_constant) |
|
34 | add(PREDEFINED_CONSTANTS, :pre_constant) | |
34 |
|
35 | |||
35 | IDENT = 'ä'[/[[:alpha:]]/] == 'ä' ? /[[:alpha:]_][[:alnum:]_]*/ : /[^\W\d]\w*/ |
|
36 | if /\w/u === '∑' | |
|
37 | # MRI 1.8.6, 1.8.7 | |||
|
38 | IDENT = /[^\W\d]\w*/ | |||
|
39 | else | |||
|
40 | if //.respond_to? :encoding | |||
|
41 | # MRI 1.9.1, 1.9.2 | |||
|
42 | IDENT = Regexp.new '[\p{L}\p{M}\p{Pc}\p{Sm}&&[^\x00-\x40\x5b-\x5e\x60\x7b-\x7f]][\p{L}\p{M}\p{N}\p{Pc}\p{Sm}&&[^\x00-\x2f\x3a-\x40\x5b-\x5e\x60\x7b-\x7f]]*' | |||
|
43 | else | |||
|
44 | # JRuby, Rubinius | |||
|
45 | IDENT = /[^\x00-\x40\x5b-\x5e\x60\x7b-\x7f][^\x00-\x2f\x3a-\x40\x5b-\x5e\x60\x7b-\x7f]*/ | |||
|
46 | end | |||
|
47 | end | |||
36 |
|
48 | |||
37 | METHOD_NAME = / #{IDENT} [?!]? /ox |
|
49 | METHOD_NAME = / #{IDENT} [?!]? /ox | |
38 | METHOD_NAME_OPERATOR = / |
|
50 | METHOD_NAME_OPERATOR = / | |
39 | \*\*? # multiplication and power |
|
51 | \*\*? # multiplication and power | |
40 | | [-+~]@? # plus, minus, tilde with and without at sign |
|
52 | | [-+~]@? # plus, minus, tilde with and without at sign | |
41 | | [\/%&|^`] # division, modulo or format strings, and, or, xor, system |
|
53 | | [\/%&|^`] # division, modulo or format strings, and, or, xor, system | |
42 | | \[\]=? # array getter and setter |
|
54 | | \[\]=? # array getter and setter | |
43 | | << | >> # append or shift left, shift right |
|
55 | | << | >> # append or shift left, shift right | |
44 | | <=?>? | >=? # comparison, rocket operator |
|
56 | | <=?>? | >=? # comparison, rocket operator | |
45 | | ===? | =~ # simple equality, case equality, match |
|
57 | | ===? | =~ # simple equality, case equality, match | |
46 | | ![~=@]? # negation with and without at sign, not-equal and not-match |
|
58 | | ![~=@]? # negation with and without at sign, not-equal and not-match | |
47 | /ox |
|
59 | /ox | |
48 | METHOD_NAME_EX = / #{IDENT} (?:[?!]|=(?!>))? | #{METHOD_NAME_OPERATOR} /ox |
|
60 | METHOD_NAME_EX = / #{IDENT} (?:[?!]|=(?!>))? | #{METHOD_NAME_OPERATOR} /ox | |
49 | INSTANCE_VARIABLE = / @ #{IDENT} /ox |
|
61 | INSTANCE_VARIABLE = / @ #{IDENT} /ox | |
50 | CLASS_VARIABLE = / @@ #{IDENT} /ox |
|
62 | CLASS_VARIABLE = / @@ #{IDENT} /ox | |
51 | OBJECT_VARIABLE = / @@? #{IDENT} /ox |
|
63 | OBJECT_VARIABLE = / @@? #{IDENT} /ox | |
52 | GLOBAL_VARIABLE = / \$ (?: #{IDENT} | [1-9]\d* | 0\w* | [~&+`'=\/,;_.<>!@$?*":\\] | -[a-zA-Z_0-9] ) /ox |
|
64 | GLOBAL_VARIABLE = / \$ (?: #{IDENT} | [1-9]\d* | 0\w* | [~&+`'=\/,;_.<>!@$?*":\\] | -[a-zA-Z_0-9] ) /ox | |
53 | PREFIX_VARIABLE = / #{GLOBAL_VARIABLE} | #{OBJECT_VARIABLE} /ox |
|
65 | PREFIX_VARIABLE = / #{GLOBAL_VARIABLE} | #{OBJECT_VARIABLE} /ox | |
54 | VARIABLE = / @?@? #{IDENT} | #{GLOBAL_VARIABLE} /ox |
|
66 | VARIABLE = / @?@? #{IDENT} | #{GLOBAL_VARIABLE} /ox | |
55 |
|
67 | |||
56 | QUOTE_TO_TYPE = { |
|
68 | QUOTE_TO_TYPE = { | |
57 | '`' => :shell, |
|
69 | '`' => :shell, | |
58 | '/'=> :regexp, |
|
70 | '/'=> :regexp, | |
59 | } |
|
71 | } | |
60 | QUOTE_TO_TYPE.default = :string |
|
72 | QUOTE_TO_TYPE.default = :string | |
61 |
|
73 | |||
62 | REGEXP_MODIFIERS = /[mixounse]*/ |
|
74 | REGEXP_MODIFIERS = /[mixounse]*/ | |
63 | REGEXP_SYMBOLS = /[|?*+(){}\[\].^$]/ |
|
75 | REGEXP_SYMBOLS = /[|?*+(){}\[\].^$]/ | |
64 |
|
76 | |||
65 | DECIMAL = /\d+(?:_\d+)*/ |
|
77 | DECIMAL = /\d+(?:_\d+)*/ | |
66 | OCTAL = /0_?[0-7]+(?:_[0-7]+)*/ |
|
78 | OCTAL = /0_?[0-7]+(?:_[0-7]+)*/ | |
67 | HEXADECIMAL = /0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*/ |
|
79 | HEXADECIMAL = /0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*/ | |
68 | BINARY = /0b[01]+(?:_[01]+)*/ |
|
80 | BINARY = /0b[01]+(?:_[01]+)*/ | |
69 |
|
81 | |||
70 | EXPONENT = / [eE] [+-]? #{DECIMAL} /ox |
|
82 | EXPONENT = / [eE] [+-]? #{DECIMAL} /ox | |
71 | FLOAT_SUFFIX = / #{EXPONENT} | \. #{DECIMAL} #{EXPONENT}? /ox |
|
83 | FLOAT_SUFFIX = / #{EXPONENT} | \. #{DECIMAL} #{EXPONENT}? /ox | |
72 | FLOAT_OR_INT = / #{DECIMAL} (?: #{FLOAT_SUFFIX} () )? /ox |
|
84 | FLOAT_OR_INT = / #{DECIMAL} (?: #{FLOAT_SUFFIX} () )? /ox | |
73 | NUMERIC = / (?: (?=0) (?: #{OCTAL} | #{HEXADECIMAL} | #{BINARY} ) | #{FLOAT_OR_INT} ) /ox |
|
85 | NUMERIC = / (?: (?=0) (?: #{OCTAL} | #{HEXADECIMAL} | #{BINARY} ) | #{FLOAT_OR_INT} ) /ox | |
74 |
|
86 | |||
75 | SYMBOL = / |
|
87 | SYMBOL = / | |
76 | : |
|
88 | : | |
77 | (?: |
|
89 | (?: | |
78 | #{METHOD_NAME_EX} |
|
90 | #{METHOD_NAME_EX} | |
79 | | #{PREFIX_VARIABLE} |
|
91 | | #{PREFIX_VARIABLE} | |
80 | | ['"] |
|
92 | | ['"] | |
81 | ) |
|
93 | ) | |
82 | /ox |
|
94 | /ox | |
83 | METHOD_NAME_OR_SYMBOL = / #{METHOD_NAME_EX} | #{SYMBOL} /ox |
|
95 | METHOD_NAME_OR_SYMBOL = / #{METHOD_NAME_EX} | #{SYMBOL} /ox | |
84 |
|
96 | |||
85 | SIMPLE_ESCAPE = / |
|
97 | SIMPLE_ESCAPE = / | |
86 | [abefnrstv] |
|
98 | [abefnrstv] | |
87 | | [0-7]{1,3} |
|
99 | | [0-7]{1,3} | |
88 | | x[0-9A-Fa-f]{1,2} |
|
100 | | x[0-9A-Fa-f]{1,2} | |
89 | | .? |
|
101 | | .? | |
90 | /mx |
|
102 | /mx | |
91 |
|
103 | |||
92 | CONTROL_META_ESCAPE = / |
|
104 | CONTROL_META_ESCAPE = / | |
93 | (?: M-|C-|c ) |
|
105 | (?: M-|C-|c ) | |
94 | (?: \\ (?: M-|C-|c ) )* |
|
106 | (?: \\ (?: M-|C-|c ) )* | |
95 | (?: [^\\] | \\ #{SIMPLE_ESCAPE} )? |
|
107 | (?: [^\\] | \\ #{SIMPLE_ESCAPE} )? | |
96 | /mox |
|
108 | /mox | |
97 |
|
109 | |||
98 | ESCAPE = / |
|
110 | ESCAPE = / | |
99 | #{CONTROL_META_ESCAPE} | #{SIMPLE_ESCAPE} |
|
111 | #{CONTROL_META_ESCAPE} | #{SIMPLE_ESCAPE} | |
100 | /mox |
|
112 | /mox | |
101 |
|
113 | |||
102 | CHARACTER = / |
|
114 | CHARACTER = / | |
103 | \? |
|
115 | \? | |
104 | (?: |
|
116 | (?: | |
105 | [^\s\\] |
|
117 | [^\s\\] | |
106 | | \\ #{ESCAPE} |
|
118 | | \\ #{ESCAPE} | |
107 | ) |
|
119 | ) | |
108 | /mox |
|
120 | /mox | |
109 |
|
121 | |||
110 | # NOTE: This is not completely correct, but |
|
122 | # NOTE: This is not completely correct, but | |
111 | # nobody needs heredoc delimiters ending with \n. |
|
123 | # nobody needs heredoc delimiters ending with \n. | |
|
124 | # Also, delimiters starting with numbers are allowed. | |||
|
125 | # but they are more often than not a false positive. | |||
112 | HEREDOC_OPEN = / |
|
126 | HEREDOC_OPEN = / | |
113 | << (-)? # $1 = float |
|
127 | << (-)? # $1 = float | |
114 | (?: |
|
128 | (?: | |
115 |
( |
|
129 | ( #{IDENT} ) # $2 = delim | |
116 | | |
|
130 | | | |
117 | ( ["'`\/] ) # $3 = quote, type |
|
131 | ( ["'`\/] ) # $3 = quote, type | |
118 | ( [^\n]*? ) \3 # $4 = delim |
|
132 | ( [^\n]*? ) \3 # $4 = delim | |
119 | ) |
|
133 | ) | |
120 | /mx |
|
134 | /mx | |
121 |
|
135 | |||
122 | RUBYDOC = / |
|
136 | RUBYDOC = / | |
123 | =begin (?!\S) |
|
137 | =begin (?!\S) | |
124 | .*? |
|
138 | .*? | |
125 | (?: \Z | ^=end (?!\S) [^\n]* ) |
|
139 | (?: \Z | ^=end (?!\S) [^\n]* ) | |
126 | /mx |
|
140 | /mx | |
127 |
|
141 | |||
128 | DATA = / |
|
142 | DATA = / | |
129 | __END__$ |
|
143 | __END__$ | |
130 | .*? |
|
144 | .*? | |
131 | (?: \Z | (?=^\#CODE) ) |
|
145 | (?: \Z | (?=^\#CODE) ) | |
132 | /mx |
|
146 | /mx | |
133 |
|
147 | |||
134 | # Checks for a valid value to follow. This enables |
|
148 | # Checks for a valid value to follow. This enables | |
135 | # value_expected in method calls without parentheses. |
|
149 | # value_expected in method calls without parentheses. | |
136 | VALUE_FOLLOWS = / |
|
150 | VALUE_FOLLOWS = / | |
137 | (?>[ \t\f\v]+) |
|
151 | (?>[ \t\f\v]+) | |
138 | (?: |
|
152 | (?: | |
139 | [%\/][^\s=] |
|
153 | [%\/][^\s=] | |
140 | | <<-?\S |
|
154 | | <<-?\S | |
141 | | [-+] \d |
|
155 | | [-+] \d | |
142 | | #{CHARACTER} |
|
156 | | #{CHARACTER} | |
143 | ) |
|
157 | ) | |
144 | /x |
|
158 | /x | |
145 | KEYWORDS_EXPECTING_VALUE = WordList.new.add(%w[ |
|
159 | KEYWORDS_EXPECTING_VALUE = WordList.new.add(%w[ | |
146 | and end in or unless begin |
|
160 | and end in or unless begin | |
147 | defined? ensure redo super until |
|
161 | defined? ensure redo super until | |
148 | break do next rescue then |
|
162 | break do next rescue then | |
149 | when case else for retry |
|
163 | when case else for retry | |
150 | while elsif if not return |
|
164 | while elsif if not return | |
151 | yield |
|
165 | yield | |
152 | ]) |
|
166 | ]) | |
153 |
|
167 | |||
154 | RUBYDOC_OR_DATA = / #{RUBYDOC} | #{DATA} /xo |
|
168 | RUBYDOC_OR_DATA = / #{RUBYDOC} | #{DATA} /xo | |
155 |
|
169 | |||
156 | RDOC_DATA_START = / ^=begin (?!\S) | ^__END__$ /x |
|
170 | RDOC_DATA_START = / ^=begin (?!\S) | ^__END__$ /x | |
157 |
|
171 | |||
158 | FANCY_START_CORRECT = / % ( [qQwWxsr] | (?![a-zA-Z0-9]) ) ([^a-zA-Z0-9]) /mx |
|
172 | FANCY_START_CORRECT = / % ( [qQwWxsr] | (?![a-zA-Z0-9]) ) ([^a-zA-Z0-9]) /mx | |
159 |
|
173 | |||
160 | FancyStringType = { |
|
174 | FancyStringType = { | |
161 | 'q' => [:string, false], |
|
175 | 'q' => [:string, false], | |
162 | 'Q' => [:string, true], |
|
176 | 'Q' => [:string, true], | |
163 | 'r' => [:regexp, true], |
|
177 | 'r' => [:regexp, true], | |
164 | 's' => [:symbol, false], |
|
178 | 's' => [:symbol, false], | |
165 | 'x' => [:shell, true] |
|
179 | 'x' => [:shell, true] | |
166 | } |
|
180 | } | |
167 | FancyStringType['w'] = FancyStringType['q'] |
|
181 | FancyStringType['w'] = FancyStringType['q'] | |
168 | FancyStringType['W'] = FancyStringType[''] = FancyStringType['Q'] |
|
182 | FancyStringType['W'] = FancyStringType[''] = FancyStringType['Q'] | |
169 |
|
183 | |||
170 | class StringState < Struct.new :type, :interpreted, :delim, :heredoc, |
|
184 | class StringState < Struct.new :type, :interpreted, :delim, :heredoc, | |
171 | :paren, :paren_depth, :pattern, :next_state |
|
185 | :paren, :paren_depth, :pattern, :next_state | |
172 |
|
186 | |||
173 | CLOSING_PAREN = Hash[ *%w[ |
|
187 | CLOSING_PAREN = Hash[ *%w[ | |
174 | ( ) |
|
188 | ( ) | |
175 | [ ] |
|
189 | [ ] | |
176 | < > |
|
190 | < > | |
177 | { } |
|
191 | { } | |
178 | ] ] |
|
192 | ] ] | |
179 |
|
193 | |||
180 | CLOSING_PAREN.each { |k,v| k.freeze; v.freeze } # debug, if I try to change it with << |
|
194 | CLOSING_PAREN.each { |k,v| k.freeze; v.freeze } # debug, if I try to change it with << | |
181 | OPENING_PAREN = CLOSING_PAREN.invert |
|
195 | OPENING_PAREN = CLOSING_PAREN.invert | |
182 |
|
196 | |||
183 | STRING_PATTERN = Hash.new do |h, k| |
|
197 | STRING_PATTERN = Hash.new do |h, k| | |
184 | delim, interpreted = *k |
|
198 | delim, interpreted = *k | |
185 | delim_pattern = Regexp.escape(delim.dup) # dup: workaround for old Ruby |
|
199 | delim_pattern = Regexp.escape(delim.dup) # dup: workaround for old Ruby | |
186 | if closing_paren = CLOSING_PAREN[delim] |
|
200 | if closing_paren = CLOSING_PAREN[delim] | |
187 | delim_pattern = delim_pattern[0..-1] if defined? JRUBY_VERSION # JRuby fix |
|
201 | delim_pattern = delim_pattern[0..-1] if defined? JRUBY_VERSION # JRuby fix | |
188 | delim_pattern << Regexp.escape(closing_paren) |
|
202 | delim_pattern << Regexp.escape(closing_paren) | |
189 | end |
|
203 | end | |
190 | delim_pattern << '\\\\' unless delim == '\\' |
|
204 | delim_pattern << '\\\\' unless delim == '\\' | |
191 |
|
205 | |||
192 | special_escapes = |
|
206 | special_escapes = | |
193 | case interpreted |
|
207 | case interpreted | |
194 | when :regexp_symbols |
|
208 | when :regexp_symbols | |
195 | '| ' + REGEXP_SYMBOLS.source |
|
209 | '| ' + REGEXP_SYMBOLS.source | |
196 | when :words |
|
210 | when :words | |
197 | '| \s' |
|
211 | '| \s' | |
198 | end |
|
212 | end | |
199 |
|
213 | |||
200 | h[k] = |
|
214 | h[k] = | |
201 | if interpreted and not delim == '#' |
|
215 | if interpreted and not delim == '#' | |
202 | / (?= [#{delim_pattern}] | \# [{$@] #{special_escapes} ) /mx |
|
216 | / (?= [#{delim_pattern}] | \# [{$@] #{special_escapes} ) /mx | |
203 | else |
|
217 | else | |
204 | / (?= [#{delim_pattern}] #{special_escapes} ) /mx |
|
218 | / (?= [#{delim_pattern}] #{special_escapes} ) /mx | |
205 | end |
|
219 | end | |
206 | end |
|
220 | end | |
207 |
|
221 | |||
208 | HEREDOC_PATTERN = Hash.new do |h, k| |
|
222 | HEREDOC_PATTERN = Hash.new do |h, k| | |
209 | delim, interpreted, indented = *k |
|
223 | delim, interpreted, indented = *k | |
210 | delim_pattern = Regexp.escape(delim.dup) # dup: workaround for old Ruby |
|
224 | delim_pattern = Regexp.escape(delim.dup) # dup: workaround for old Ruby | |
211 | delim_pattern = / \n #{ '(?>[\ \t]*)' if indented } #{ Regexp.new delim_pattern } $ /x |
|
225 | delim_pattern = / \n #{ '(?>[\ \t]*)' if indented } #{ Regexp.new delim_pattern } $ /x | |
212 | h[k] = |
|
226 | h[k] = | |
213 | if interpreted |
|
227 | if interpreted | |
214 | / (?= #{delim_pattern}() | \\ | \# [{$@] ) /mx # $1 set == end of heredoc |
|
228 | / (?= #{delim_pattern}() | \\ | \# [{$@] ) /mx # $1 set == end of heredoc | |
215 | else |
|
229 | else | |
216 | / (?= #{delim_pattern}() | \\ ) /mx |
|
230 | / (?= #{delim_pattern}() | \\ ) /mx | |
217 | end |
|
231 | end | |
218 | end |
|
232 | end | |
219 |
|
233 | |||
220 | def initialize kind, interpreted, delim, heredoc = false |
|
234 | def initialize kind, interpreted, delim, heredoc = false | |
221 | if heredoc |
|
235 | if heredoc | |
222 | pattern = HEREDOC_PATTERN[ [delim, interpreted, heredoc == :indented] ] |
|
236 | pattern = HEREDOC_PATTERN[ [delim, interpreted, heredoc == :indented] ] | |
223 | delim = nil |
|
237 | delim = nil | |
224 | else |
|
238 | else | |
225 | pattern = STRING_PATTERN[ [delim, interpreted] ] |
|
239 | pattern = STRING_PATTERN[ [delim, interpreted] ] | |
226 | if paren = CLOSING_PAREN[delim] |
|
240 | if paren = CLOSING_PAREN[delim] | |
227 | delim, paren = paren, delim |
|
241 | delim, paren = paren, delim | |
228 | paren_depth = 1 |
|
242 | paren_depth = 1 | |
229 | end |
|
243 | end | |
230 | end |
|
244 | end | |
231 | super kind, interpreted, delim, heredoc, paren, paren_depth, pattern, :initial |
|
245 | super kind, interpreted, delim, heredoc, paren, paren_depth, pattern, :initial | |
232 | end |
|
246 | end | |
233 | end unless defined? StringState |
|
247 | end unless defined? StringState | |
234 |
|
248 | |||
235 | end |
|
249 | end | |
236 |
|
250 | |||
237 | end |
|
251 | end | |
238 | end |
|
252 | end |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/scheme.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/scheme.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/scheme.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/scheme.rb |
@@ -1,162 +1,162 | |||||
1 | module CodeRay module Scanners |
|
1 | module CodeRay module Scanners | |
2 |
|
2 | |||
3 | # by Josh Goebel |
|
3 | # by Josh Goebel | |
4 | class SQL < Scanner |
|
4 | class SQL < Scanner | |
5 |
|
5 | |||
6 | register_for :sql |
|
6 | register_for :sql | |
7 |
|
7 | |||
8 | RESERVED_WORDS = %w( |
|
8 | RESERVED_WORDS = %w( | |
9 | create database table index trigger drop primary key set select |
|
9 | create database table index trigger drop primary key set select | |
10 | insert update delete replace into |
|
10 | insert update delete replace into | |
11 | on from values before and or if exists case when |
|
11 | on from values before and or if exists case when | |
12 | then else as group order by avg where |
|
12 | then else as group order by avg where | |
13 | join inner outer union engine not |
|
13 | join inner outer union engine not | |
14 | like end using collate show columns begin |
|
14 | like end using collate show columns begin | |
15 | ) |
|
15 | ) | |
16 |
|
16 | |||
17 | PREDEFINED_TYPES = %w( |
|
17 | PREDEFINED_TYPES = %w( | |
18 | char varchar enum binary text tinytext mediumtext |
|
18 | char varchar enum binary text tinytext mediumtext | |
19 | longtext blob tinyblob mediumblob longblob timestamp |
|
19 | longtext blob tinyblob mediumblob longblob timestamp | |
20 | date time datetime year double decimal float int |
|
20 | date time datetime year double decimal float int | |
21 | integer tinyint mediumint bigint smallint unsigned bit |
|
21 | integer tinyint mediumint bigint smallint unsigned bit | |
22 | bool boolean hex bin oct |
|
22 | bool boolean hex bin oct | |
23 | ) |
|
23 | ) | |
24 |
|
24 | |||
25 | PREDEFINED_FUNCTIONS = %w( sum cast abs pi count min max avg ) |
|
25 | PREDEFINED_FUNCTIONS = %w( sum cast abs pi count min max avg ) | |
26 |
|
26 | |||
27 | DIRECTIVES = %w( auto_increment unique default charset ) |
|
27 | DIRECTIVES = %w( auto_increment unique default charset ) | |
28 |
|
28 | |||
29 | PREDEFINED_CONSTANTS = %w( null true false ) |
|
29 | PREDEFINED_CONSTANTS = %w( null true false ) | |
30 |
|
30 | |||
31 | IDENT_KIND = CaseIgnoringWordList.new(:ident). |
|
31 | IDENT_KIND = CaseIgnoringWordList.new(:ident). | |
32 | add(RESERVED_WORDS, :reserved). |
|
32 | add(RESERVED_WORDS, :reserved). | |
33 | add(PREDEFINED_TYPES, :pre_type). |
|
33 | add(PREDEFINED_TYPES, :pre_type). | |
34 | add(PREDEFINED_CONSTANTS, :pre_constant). |
|
34 | add(PREDEFINED_CONSTANTS, :pre_constant). | |
35 | add(PREDEFINED_FUNCTIONS, :predefined). |
|
35 | add(PREDEFINED_FUNCTIONS, :predefined). | |
36 | add(DIRECTIVES, :directive) |
|
36 | add(DIRECTIVES, :directive) | |
37 |
|
37 | |||
38 | ESCAPE = / [rbfntv\n\\\/'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} | . /mx |
|
38 | ESCAPE = / [rbfntv\n\\\/'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} | . /mx | |
39 | UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x |
|
39 | UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x | |
40 |
|
40 | |||
41 | STRING_PREFIXES = /[xnb]|_\w+/i |
|
41 | STRING_PREFIXES = /[xnb]|_\w+/i | |
42 |
|
42 | |||
43 | def scan_tokens tokens, options |
|
43 | def scan_tokens tokens, options | |
44 |
|
44 | |||
45 | state = :initial |
|
45 | state = :initial | |
46 | string_type = nil |
|
46 | string_type = nil | |
47 | string_content = '' |
|
47 | string_content = '' | |
48 |
|
48 | |||
49 | until eos? |
|
49 | until eos? | |
50 |
|
50 | |||
51 | kind = nil |
|
51 | kind = nil | |
52 | match = nil |
|
52 | match = nil | |
53 |
|
53 | |||
54 | if state == :initial |
|
54 | if state == :initial | |
55 |
|
55 | |||
56 | if scan(/ \s+ | \\\n /x) |
|
56 | if scan(/ \s+ | \\\n /x) | |
57 | kind = :space |
|
57 | kind = :space | |
58 |
|
58 | |||
59 |
elsif scan(/ |
|
59 | elsif scan(/(?:--\s?|#).*/) | |
60 | kind = :comment |
|
60 | kind = :comment | |
61 |
|
61 | |||
62 | elsif scan(%r! /\* (?: .*? \*/ | .* ) !mx) |
|
62 | elsif scan(%r! /\* (?: .*? \*/ | .* ) !mx) | |
63 | kind = :comment |
|
63 | kind = :comment | |
64 |
|
64 | |||
65 | elsif scan(/ [-+*\/=<>;,!&^|()\[\]{}~%] | \.(?!\d) /x) |
|
65 | elsif scan(/ [-+*\/=<>;,!&^|()\[\]{}~%] | \.(?!\d) /x) | |
66 | kind = :operator |
|
66 | kind = :operator | |
67 |
|
67 | |||
68 | elsif scan(/(#{STRING_PREFIXES})?([`"'])/o) |
|
68 | elsif scan(/(#{STRING_PREFIXES})?([`"'])/o) | |
69 | prefix = self[1] |
|
69 | prefix = self[1] | |
70 | string_type = self[2] |
|
70 | string_type = self[2] | |
71 | tokens << [:open, :string] |
|
71 | tokens << [:open, :string] | |
72 | tokens << [prefix, :modifier] if prefix |
|
72 | tokens << [prefix, :modifier] if prefix | |
73 | match = string_type |
|
73 | match = string_type | |
74 | state = :string |
|
74 | state = :string | |
75 | kind = :delimiter |
|
75 | kind = :delimiter | |
76 |
|
76 | |||
77 | elsif match = scan(/ @? [A-Za-z_][A-Za-z_0-9]* /x) |
|
77 | elsif match = scan(/ @? [A-Za-z_][A-Za-z_0-9]* /x) | |
78 | kind = match[0] == ?@ ? :variable : IDENT_KIND[match.downcase] |
|
78 | kind = match[0] == ?@ ? :variable : IDENT_KIND[match.downcase] | |
79 |
|
79 | |||
80 | elsif scan(/0[xX][0-9A-Fa-f]+/) |
|
80 | elsif scan(/0[xX][0-9A-Fa-f]+/) | |
81 | kind = :hex |
|
81 | kind = :hex | |
82 |
|
82 | |||
83 | elsif scan(/0[0-7]+(?![89.eEfF])/) |
|
83 | elsif scan(/0[0-7]+(?![89.eEfF])/) | |
84 | kind = :oct |
|
84 | kind = :oct | |
85 |
|
85 | |||
86 | elsif scan(/(?>\d+)(?![.eEfF])/) |
|
86 | elsif scan(/(?>\d+)(?![.eEfF])/) | |
87 | kind = :integer |
|
87 | kind = :integer | |
88 |
|
88 | |||
89 | elsif scan(/\d[fF]|\d*\.\d+(?:[eE][+-]?\d+)?|\d+[eE][+-]?\d+/) |
|
89 | elsif scan(/\d[fF]|\d*\.\d+(?:[eE][+-]?\d+)?|\d+[eE][+-]?\d+/) | |
90 | kind = :float |
|
90 | kind = :float | |
91 |
|
91 | |||
92 | else |
|
92 | else | |
93 | getch |
|
93 | getch | |
94 | kind = :error |
|
94 | kind = :error | |
95 |
|
95 | |||
96 | end |
|
96 | end | |
97 |
|
97 | |||
98 | elsif state == :string |
|
98 | elsif state == :string | |
99 | if match = scan(/[^\\"'`]+/) |
|
99 | if match = scan(/[^\\"'`]+/) | |
100 | string_content << match |
|
100 | string_content << match | |
101 | next |
|
101 | next | |
102 | elsif match = scan(/["'`]/) |
|
102 | elsif match = scan(/["'`]/) | |
103 | if string_type == match |
|
103 | if string_type == match | |
104 | if peek(1) == string_type # doubling means escape |
|
104 | if peek(1) == string_type # doubling means escape | |
105 | string_content << string_type << getch |
|
105 | string_content << string_type << getch | |
106 | next |
|
106 | next | |
107 | end |
|
107 | end | |
108 | unless string_content.empty? |
|
108 | unless string_content.empty? | |
109 | tokens << [string_content, :content] |
|
109 | tokens << [string_content, :content] | |
110 | string_content = '' |
|
110 | string_content = '' | |
111 | end |
|
111 | end | |
112 | tokens << [matched, :delimiter] |
|
112 | tokens << [matched, :delimiter] | |
113 | tokens << [:close, :string] |
|
113 | tokens << [:close, :string] | |
114 | state = :initial |
|
114 | state = :initial | |
115 | string_type = nil |
|
115 | string_type = nil | |
116 | next |
|
116 | next | |
117 | else |
|
117 | else | |
118 | string_content << match |
|
118 | string_content << match | |
119 | end |
|
119 | end | |
120 | next |
|
120 | next | |
121 | elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox) |
|
121 | elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox) | |
122 | unless string_content.empty? |
|
122 | unless string_content.empty? | |
123 | tokens << [string_content, :content] |
|
123 | tokens << [string_content, :content] | |
124 | string_content = '' |
|
124 | string_content = '' | |
125 | end |
|
125 | end | |
126 | kind = :char |
|
126 | kind = :char | |
127 | elsif match = scan(/ \\ . /mox) |
|
127 | elsif match = scan(/ \\ . /mox) | |
128 | string_content << match |
|
128 | string_content << match | |
129 | next |
|
129 | next | |
130 | elsif scan(/ \\ | $ /x) |
|
130 | elsif scan(/ \\ | $ /x) | |
131 | unless string_content.empty? |
|
131 | unless string_content.empty? | |
132 | tokens << [string_content, :content] |
|
132 | tokens << [string_content, :content] | |
133 | string_content = '' |
|
133 | string_content = '' | |
134 | end |
|
134 | end | |
135 | kind = :error |
|
135 | kind = :error | |
136 | state = :initial |
|
136 | state = :initial | |
137 | else |
|
137 | else | |
138 | raise "else case \" reached; %p not handled." % peek(1), tokens |
|
138 | raise "else case \" reached; %p not handled." % peek(1), tokens | |
139 | end |
|
139 | end | |
140 |
|
140 | |||
141 | else |
|
141 | else | |
142 | raise 'else-case reached', tokens |
|
142 | raise 'else-case reached', tokens | |
143 |
|
143 | |||
144 | end |
|
144 | end | |
145 |
|
145 | |||
146 | match ||= matched |
|
146 | match ||= matched | |
147 | unless kind |
|
147 | unless kind | |
148 | raise_inspect 'Error token %p in line %d' % |
|
148 | raise_inspect 'Error token %p in line %d' % | |
149 | [[match, kind], line], tokens, state |
|
149 | [[match, kind], line], tokens, state | |
150 | end |
|
150 | end | |
151 | raise_inspect 'Empty token', tokens unless match |
|
151 | raise_inspect 'Empty token', tokens unless match | |
152 |
|
152 | |||
153 | tokens << [match, kind] |
|
153 | tokens << [match, kind] | |
154 |
|
154 | |||
155 | end |
|
155 | end | |
156 | tokens |
|
156 | tokens | |
157 |
|
157 | |||
158 | end |
|
158 | end | |
159 |
|
159 | |||
160 | end |
|
160 | end | |
161 |
|
161 | |||
162 | end end No newline at end of file |
|
162 | end end |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/xml.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/xml.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/xml.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/xml.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/yaml.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/yaml.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/scanners/yaml.rb to vendor/gems/coderay-0.9.7/lib/coderay/scanners/yaml.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/style.rb to vendor/gems/coderay-0.9.7/lib/coderay/style.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/style.rb to vendor/gems/coderay-0.9.7/lib/coderay/style.rb |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/styles/_map.rb to vendor/gems/coderay-0.9.7/lib/coderay/styles/_map.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/styles/_map.rb to vendor/gems/coderay-0.9.7/lib/coderay/styles/_map.rb |
@@ -1,151 +1,152 | |||||
1 | module CodeRay |
|
1 | module CodeRay | |
2 | module Styles |
|
2 | module Styles | |
3 |
|
3 | |||
4 | class Cycnus < Style |
|
4 | class Cycnus < Style | |
5 |
|
5 | |||
6 | register_for :cycnus |
|
6 | register_for :cycnus | |
7 |
|
7 | |||
8 | code_background = '#f8f8f8' |
|
8 | code_background = '#f8f8f8' | |
9 | numbers_background = '#def' |
|
9 | numbers_background = '#def' | |
10 | border_color = 'silver' |
|
10 | border_color = 'silver' | |
11 | normal_color = '#000' |
|
11 | normal_color = '#000' | |
12 |
|
12 | |||
13 | CSS_MAIN_STYLES = <<-MAIN |
|
13 | CSS_MAIN_STYLES = <<-MAIN | |
14 | .CodeRay { |
|
14 | .CodeRay { | |
15 | background-color: #{code_background}; |
|
15 | background-color: #{code_background}; | |
16 | border: 1px solid #{border_color}; |
|
16 | border: 1px solid #{border_color}; | |
17 | font-family: 'Courier New', 'Terminal', monospace; |
|
17 | font-family: 'Courier New', 'Terminal', monospace; | |
18 | color: #{normal_color}; |
|
18 | color: #{normal_color}; | |
19 | } |
|
19 | } | |
20 | .CodeRay pre { margin: 0px } |
|
20 | .CodeRay pre { margin: 0px } | |
21 |
|
21 | |||
22 | div.CodeRay { } |
|
22 | div.CodeRay { } | |
23 |
|
23 | |||
24 | span.CodeRay { white-space: pre; border: 0px; padding: 2px } |
|
24 | span.CodeRay { white-space: pre; border: 0px; padding: 2px } | |
25 |
|
25 | |||
26 | table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px } |
|
26 | table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px } | |
27 | table.CodeRay td { padding: 2px 4px; vertical-align: top } |
|
27 | table.CodeRay td { padding: 2px 4px; vertical-align: top } | |
28 |
|
28 | |||
29 | .CodeRay .line_numbers, .CodeRay .no { |
|
29 | .CodeRay .line_numbers, .CodeRay .no { | |
30 | background-color: #{numbers_background}; |
|
30 | background-color: #{numbers_background}; | |
31 | color: gray; |
|
31 | color: gray; | |
32 | text-align: right; |
|
32 | text-align: right; | |
33 | } |
|
33 | } | |
34 | .CodeRay .line_numbers tt { font-weight: bold } |
|
34 | .CodeRay .line_numbers tt { font-weight: bold } | |
35 | .CodeRay .line_numbers .highlighted { color: red } |
|
35 | .CodeRay .line_numbers .highlighted { color: red } | |
|
36 | .CodeRay .line { display: block; float: left; width: 100%; } | |||
36 | .CodeRay .no { padding: 0px 4px } |
|
37 | .CodeRay .no { padding: 0px 4px } | |
37 | .CodeRay .code { width: 100% } |
|
38 | .CodeRay .code { width: 100% } | |
38 |
|
39 | |||
39 | ol.CodeRay { font-size: 10pt } |
|
40 | ol.CodeRay { font-size: 10pt } | |
40 | ol.CodeRay li { white-space: pre } |
|
41 | ol.CodeRay li { white-space: pre } | |
41 |
|
42 | |||
42 | .CodeRay .code pre { overflow: auto } |
|
43 | .CodeRay .code pre { overflow: auto } | |
43 | MAIN |
|
44 | MAIN | |
44 |
|
45 | |||
45 | TOKEN_COLORS = <<-'TOKENS' |
|
46 | TOKEN_COLORS = <<-'TOKENS' | |
46 | .debug { color:white ! important; background:blue ! important; } |
|
47 | .debug { color:white ! important; background:blue ! important; } | |
47 |
|
48 | |||
48 | .af { color:#00C } |
|
49 | .af { color:#00C } | |
49 | .an { color:#007 } |
|
50 | .an { color:#007 } | |
50 | .at { color:#f08 } |
|
51 | .at { color:#f08 } | |
51 | .av { color:#700 } |
|
52 | .av { color:#700 } | |
52 | .aw { color:#C00 } |
|
53 | .aw { color:#C00 } | |
53 | .bi { color:#509; font-weight:bold } |
|
54 | .bi { color:#509; font-weight:bold } | |
54 | .c { color:#888; } |
|
55 | .c { color:#888; } | |
55 |
|
56 | |||
56 | .ch { color:#04D } |
|
57 | .ch { color:#04D } | |
57 | .ch .k { color:#04D } |
|
58 | .ch .k { color:#04D } | |
58 | .ch .dl { color:#039 } |
|
59 | .ch .dl { color:#039 } | |
59 |
|
60 | |||
60 | .cl { color:#B06; font-weight:bold } |
|
61 | .cl { color:#B06; font-weight:bold } | |
61 | .cm { color:#A08; font-weight:bold } |
|
62 | .cm { color:#A08; font-weight:bold } | |
62 | .co { color:#036; font-weight:bold } |
|
63 | .co { color:#036; font-weight:bold } | |
63 | .cr { color:#0A0 } |
|
64 | .cr { color:#0A0 } | |
64 | .cv { color:#369 } |
|
65 | .cv { color:#369 } | |
65 | .de { color:#B0B; } |
|
66 | .de { color:#B0B; } | |
66 | .df { color:#099; font-weight:bold } |
|
67 | .df { color:#099; font-weight:bold } | |
67 | .di { color:#088; font-weight:bold } |
|
68 | .di { color:#088; font-weight:bold } | |
68 | .dl { color:black } |
|
69 | .dl { color:black } | |
69 | .do { color:#970 } |
|
70 | .do { color:#970 } | |
70 | .dt { color:#34b } |
|
71 | .dt { color:#34b } | |
71 | .ds { color:#D42; font-weight:bold } |
|
72 | .ds { color:#D42; font-weight:bold } | |
72 | .e { color:#666; font-weight:bold } |
|
73 | .e { color:#666; font-weight:bold } | |
73 | .en { color:#800; font-weight:bold } |
|
74 | .en { color:#800; font-weight:bold } | |
74 | .er { color:#F00; background-color:#FAA } |
|
75 | .er { color:#F00; background-color:#FAA } | |
75 | .ex { color:#C00; font-weight:bold } |
|
76 | .ex { color:#C00; font-weight:bold } | |
76 | .fl { color:#60E; font-weight:bold } |
|
77 | .fl { color:#60E; font-weight:bold } | |
77 | .fu { color:#06B; font-weight:bold } |
|
78 | .fu { color:#06B; font-weight:bold } | |
78 | .gv { color:#d70; font-weight:bold } |
|
79 | .gv { color:#d70; font-weight:bold } | |
79 | .hx { color:#058; font-weight:bold } |
|
80 | .hx { color:#058; font-weight:bold } | |
80 | .i { color:#00D; font-weight:bold } |
|
81 | .i { color:#00D; font-weight:bold } | |
81 | .ic { color:#B44; font-weight:bold } |
|
82 | .ic { color:#B44; font-weight:bold } | |
82 |
|
83 | |||
83 | .il { background: #ddd; color: black } |
|
84 | .il { background: #ddd; color: black } | |
84 | .il .il { background: #ccc } |
|
85 | .il .il { background: #ccc } | |
85 | .il .il .il { background: #bbb } |
|
86 | .il .il .il { background: #bbb } | |
86 | .il .idl { background: #ddd; font-weight: bold; color: #666 } |
|
87 | .il .idl { background: #ddd; font-weight: bold; color: #666 } | |
87 | .idl { background-color: #bbb; font-weight: bold; color: #666; } |
|
88 | .idl { background-color: #bbb; font-weight: bold; color: #666; } | |
88 |
|
89 | |||
89 | .im { color:#f00; } |
|
90 | .im { color:#f00; } | |
90 | .in { color:#B2B; font-weight:bold } |
|
91 | .in { color:#B2B; font-weight:bold } | |
91 | .iv { color:#33B } |
|
92 | .iv { color:#33B } | |
92 | .la { color:#970; font-weight:bold } |
|
93 | .la { color:#970; font-weight:bold } | |
93 | .lv { color:#963 } |
|
94 | .lv { color:#963 } | |
94 | .oc { color:#40E; font-weight:bold } |
|
95 | .oc { color:#40E; font-weight:bold } | |
95 | .of { color:#000; font-weight:bold } |
|
96 | .of { color:#000; font-weight:bold } | |
96 | .op { } |
|
97 | .op { } | |
97 | .pc { color:#038; font-weight:bold } |
|
98 | .pc { color:#038; font-weight:bold } | |
98 | .pd { color:#369; font-weight:bold } |
|
99 | .pd { color:#369; font-weight:bold } | |
99 | .pp { color:#579; } |
|
100 | .pp { color:#579; } | |
100 | .ps { color:#00C; font-weight:bold } |
|
101 | .ps { color:#00C; font-weight:bold } | |
101 | .pt { color:#074; font-weight:bold } |
|
102 | .pt { color:#074; font-weight:bold } | |
102 | .r, .kw { color:#080; font-weight:bold } |
|
103 | .r, .kw { color:#080; font-weight:bold } | |
103 |
|
104 | |||
104 | .ke { color: #808; } |
|
105 | .ke { color: #808; } | |
105 | .ke .dl { color: #606; } |
|
106 | .ke .dl { color: #606; } | |
106 | .ke .ch { color: #80f; } |
|
107 | .ke .ch { color: #80f; } | |
107 | .vl { color: #088; } |
|
108 | .vl { color: #088; } | |
108 |
|
109 | |||
109 | .rx { background-color:#fff0ff } |
|
110 | .rx { background-color:#fff0ff } | |
110 | .rx .k { color:#808 } |
|
111 | .rx .k { color:#808 } | |
111 | .rx .dl { color:#404 } |
|
112 | .rx .dl { color:#404 } | |
112 | .rx .mod { color:#C2C } |
|
113 | .rx .mod { color:#C2C } | |
113 | .rx .fu { color:#404; font-weight: bold } |
|
114 | .rx .fu { color:#404; font-weight: bold } | |
114 |
|
115 | |||
115 | .s { background-color:#fff0f0; color: #D20; } |
|
116 | .s { background-color:#fff0f0; color: #D20; } | |
116 | .s .s { background-color:#ffe0e0 } |
|
117 | .s .s { background-color:#ffe0e0 } | |
117 | .s .s .s { background-color:#ffd0d0 } |
|
118 | .s .s .s { background-color:#ffd0d0 } | |
118 | .s .k { } |
|
119 | .s .k { } | |
119 | .s .ch { color: #b0b; } |
|
120 | .s .ch { color: #b0b; } | |
120 | .s .dl { color: #710; } |
|
121 | .s .dl { color: #710; } | |
121 |
|
122 | |||
122 | .sh { background-color:#f0fff0; color:#2B2 } |
|
123 | .sh { background-color:#f0fff0; color:#2B2 } | |
123 | .sh .k { } |
|
124 | .sh .k { } | |
124 | .sh .dl { color:#161 } |
|
125 | .sh .dl { color:#161 } | |
125 |
|
126 | |||
126 | .sy { color:#A60 } |
|
127 | .sy { color:#A60 } | |
127 | .sy .k { color:#A60 } |
|
128 | .sy .k { color:#A60 } | |
128 | .sy .dl { color:#630 } |
|
129 | .sy .dl { color:#630 } | |
129 |
|
130 | |||
130 | .ta { color:#070 } |
|
131 | .ta { color:#070 } | |
131 | .tf { color:#070; font-weight:bold } |
|
132 | .tf { color:#070; font-weight:bold } | |
132 | .ts { color:#D70; font-weight:bold } |
|
133 | .ts { color:#D70; font-weight:bold } | |
133 | .ty { color:#339; font-weight:bold } |
|
134 | .ty { color:#339; font-weight:bold } | |
134 | .v { color:#036 } |
|
135 | .v { color:#036 } | |
135 | .xt { color:#444 } |
|
136 | .xt { color:#444 } | |
136 |
|
137 | |||
137 | .ins { background: #afa; } |
|
138 | .ins { background: #afa; } | |
138 | .del { background: #faa; } |
|
139 | .del { background: #faa; } | |
139 | .chg { color: #aaf; background: #007; } |
|
140 | .chg { color: #aaf; background: #007; } | |
140 | .head { color: #f8f; background: #505 } |
|
141 | .head { color: #f8f; background: #505 } | |
141 |
|
142 | |||
142 | .ins .ins { color: #080; font-weight:bold } |
|
143 | .ins .ins { color: #080; font-weight:bold } | |
143 | .del .del { color: #800; font-weight:bold } |
|
144 | .del .del { color: #800; font-weight:bold } | |
144 | .chg .chg { color: #66f; } |
|
145 | .chg .chg { color: #66f; } | |
145 | .head .head { color: #f4f; } |
|
146 | .head .head { color: #f4f; } | |
146 | TOKENS |
|
147 | TOKENS | |
147 |
|
148 | |||
148 | end |
|
149 | end | |
149 |
|
150 | |||
150 | end |
|
151 | end | |
151 | end |
|
152 | end |
@@ -1,132 +1,134 | |||||
1 | module CodeRay |
|
1 | module CodeRay | |
2 | module Styles |
|
2 | module Styles | |
3 |
|
3 | |||
4 | class Murphy < Style |
|
4 | class Murphy < Style | |
5 |
|
5 | |||
6 | register_for :murphy |
|
6 | register_for :murphy | |
7 |
|
7 | |||
8 | code_background = '#001129' |
|
8 | code_background = '#001129' | |
9 | numbers_background = code_background |
|
9 | numbers_background = code_background | |
10 | border_color = 'silver' |
|
10 | border_color = 'silver' | |
11 | normal_color = '#C0C0C0' |
|
11 | normal_color = '#C0C0C0' | |
12 |
|
12 | |||
13 | CSS_MAIN_STYLES = <<-MAIN |
|
13 | CSS_MAIN_STYLES = <<-MAIN | |
14 | .CodeRay { |
|
14 | .CodeRay { | |
15 | background-color: #{code_background}; |
|
15 | background-color: #{code_background}; | |
16 | border: 1px solid #{border_color}; |
|
16 | border: 1px solid #{border_color}; | |
17 | font-family: 'Courier New', 'Terminal', monospace; |
|
17 | font-family: 'Courier New', 'Terminal', monospace; | |
18 | color: #{normal_color}; |
|
18 | color: #{normal_color}; | |
19 | } |
|
19 | } | |
20 | .CodeRay pre { margin: 0px; } |
|
20 | .CodeRay pre { margin: 0px; } | |
21 |
|
21 | |||
22 | div.CodeRay { } |
|
22 | div.CodeRay { } | |
23 |
|
23 | |||
24 | span.CodeRay { white-space: pre; border: 0px; padding: 2px; } |
|
24 | span.CodeRay { white-space: pre; border: 0px; padding: 2px; } | |
25 |
|
25 | |||
26 | table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px; } |
|
26 | table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px; } | |
27 | table.CodeRay td { padding: 2px 4px; vertical-align: top; } |
|
27 | table.CodeRay td { padding: 2px 4px; vertical-align: top; } | |
28 |
|
28 | |||
29 | .CodeRay .line_numbers, .CodeRay .no { |
|
29 | .CodeRay .line_numbers, .CodeRay .no { | |
30 | background-color: #{numbers_background}; |
|
30 | background-color: #{numbers_background}; | |
31 | color: gray; |
|
31 | color: gray; | |
32 | text-align: right; |
|
32 | text-align: right; | |
33 | } |
|
33 | } | |
34 | .CodeRay .line_numbers tt { font-weight: bold; } |
|
34 | .CodeRay .line_numbers tt { font-weight: bold; } | |
|
35 | .CodeRay .line_numbers .highlighted { color: red } | |||
|
36 | .CodeRay .line { display: block; float: left; width: 100%; } | |||
35 | .CodeRay .no { padding: 0px 4px; } |
|
37 | .CodeRay .no { padding: 0px 4px; } | |
36 | .CodeRay .code { width: 100%; } |
|
38 | .CodeRay .code { width: 100%; } | |
37 |
|
39 | |||
38 | ol.CodeRay { font-size: 10pt; } |
|
40 | ol.CodeRay { font-size: 10pt; } | |
39 | ol.CodeRay li { white-space: pre; } |
|
41 | ol.CodeRay li { white-space: pre; } | |
40 |
|
42 | |||
41 | .CodeRay .code pre { overflow: auto; } |
|
43 | .CodeRay .code pre { overflow: auto; } | |
42 | MAIN |
|
44 | MAIN | |
43 |
|
45 | |||
44 | TOKEN_COLORS = <<-'TOKENS' |
|
46 | TOKEN_COLORS = <<-'TOKENS' | |
45 | .af { color:#00C; } |
|
47 | .af { color:#00C; } | |
46 | .an { color:#007; } |
|
48 | .an { color:#007; } | |
47 | .av { color:#700; } |
|
49 | .av { color:#700; } | |
48 | .aw { color:#C00; } |
|
50 | .aw { color:#C00; } | |
49 | .bi { color:#509; font-weight:bold; } |
|
51 | .bi { color:#509; font-weight:bold; } | |
50 | .c { color:#555; background-color: black; } |
|
52 | .c { color:#555; background-color: black; } | |
51 |
|
53 | |||
52 | .ch { color:#88F; } |
|
54 | .ch { color:#88F; } | |
53 | .ch .k { color:#04D; } |
|
55 | .ch .k { color:#04D; } | |
54 | .ch .dl { color:#039; } |
|
56 | .ch .dl { color:#039; } | |
55 |
|
57 | |||
56 | .cl { color:#e9e; font-weight:bold; } |
|
58 | .cl { color:#e9e; font-weight:bold; } | |
57 | .co { color:#5ED; font-weight:bold; } |
|
59 | .co { color:#5ED; font-weight:bold; } | |
58 | .cr { color:#0A0; } |
|
60 | .cr { color:#0A0; } | |
59 | .cv { color:#ccf; } |
|
61 | .cv { color:#ccf; } | |
60 | .df { color:#099; font-weight:bold; } |
|
62 | .df { color:#099; font-weight:bold; } | |
61 | .di { color:#088; font-weight:bold; } |
|
63 | .di { color:#088; font-weight:bold; } | |
62 | .dl { color:black; } |
|
64 | .dl { color:black; } | |
63 | .do { color:#970; } |
|
65 | .do { color:#970; } | |
64 | .ds { color:#D42; font-weight:bold; } |
|
66 | .ds { color:#D42; font-weight:bold; } | |
65 | .e { color:#666; font-weight:bold; } |
|
67 | .e { color:#666; font-weight:bold; } | |
66 | .er { color:#F00; background-color:#FAA; } |
|
68 | .er { color:#F00; background-color:#FAA; } | |
67 | .ex { color:#F00; font-weight:bold; } |
|
69 | .ex { color:#F00; font-weight:bold; } | |
68 | .fl { color:#60E; font-weight:bold; } |
|
70 | .fl { color:#60E; font-weight:bold; } | |
69 | .fu { color:#5ed; font-weight:bold; } |
|
71 | .fu { color:#5ed; font-weight:bold; } | |
70 | .gv { color:#f84; } |
|
72 | .gv { color:#f84; } | |
71 | .hx { color:#058; font-weight:bold; } |
|
73 | .hx { color:#058; font-weight:bold; } | |
72 | .i { color:#66f; font-weight:bold; } |
|
74 | .i { color:#66f; font-weight:bold; } | |
73 | .ic { color:#B44; font-weight:bold; } |
|
75 | .ic { color:#B44; font-weight:bold; } | |
74 | .il { } |
|
76 | .il { } | |
75 | .in { color:#B2B; font-weight:bold; } |
|
77 | .in { color:#B2B; font-weight:bold; } | |
76 | .iv { color:#aaf; } |
|
78 | .iv { color:#aaf; } | |
77 | .la { color:#970; font-weight:bold; } |
|
79 | .la { color:#970; font-weight:bold; } | |
78 | .lv { color:#963; } |
|
80 | .lv { color:#963; } | |
79 | .oc { color:#40E; font-weight:bold; } |
|
81 | .oc { color:#40E; font-weight:bold; } | |
80 | .of { color:#000; font-weight:bold; } |
|
82 | .of { color:#000; font-weight:bold; } | |
81 | .op { } |
|
83 | .op { } | |
82 | .pc { color:#08f; font-weight:bold; } |
|
84 | .pc { color:#08f; font-weight:bold; } | |
83 | .pd { color:#369; font-weight:bold; } |
|
85 | .pd { color:#369; font-weight:bold; } | |
84 | .pp { color:#579; } |
|
86 | .pp { color:#579; } | |
85 | .pt { color:#66f; font-weight:bold; } |
|
87 | .pt { color:#66f; font-weight:bold; } | |
86 | .r { color:#5de; font-weight:bold; } |
|
88 | .r { color:#5de; font-weight:bold; } | |
87 | .r, .kw { color:#5de; font-weight:bold } |
|
89 | .r, .kw { color:#5de; font-weight:bold } | |
88 |
|
90 | |||
89 | .ke { color: #808; } |
|
91 | .ke { color: #808; } | |
90 |
|
92 | |||
91 | .rx { background-color:#221133; } |
|
93 | .rx { background-color:#221133; } | |
92 | .rx .k { color:#f8f; } |
|
94 | .rx .k { color:#f8f; } | |
93 | .rx .dl { color:#f0f; } |
|
95 | .rx .dl { color:#f0f; } | |
94 | .rx .mod { color:#f0b; } |
|
96 | .rx .mod { color:#f0b; } | |
95 | .rx .fu { color:#404; font-weight: bold; } |
|
97 | .rx .fu { color:#404; font-weight: bold; } | |
96 |
|
98 | |||
97 | .s { background-color:#331122; } |
|
99 | .s { background-color:#331122; } | |
98 | .s .s { background-color:#ffe0e0; } |
|
100 | .s .s { background-color:#ffe0e0; } | |
99 | .s .s .s { background-color:#ffd0d0; } |
|
101 | .s .s .s { background-color:#ffd0d0; } | |
100 | .s .k { color:#F88; } |
|
102 | .s .k { color:#F88; } | |
101 | .s .dl { color:#f55; } |
|
103 | .s .dl { color:#f55; } | |
102 |
|
104 | |||
103 | .sh { background-color:#f0fff0; } |
|
105 | .sh { background-color:#f0fff0; } | |
104 | .sh .k { color:#2B2; } |
|
106 | .sh .k { color:#2B2; } | |
105 | .sh .dl { color:#161; } |
|
107 | .sh .dl { color:#161; } | |
106 |
|
108 | |||
107 | .sy { color:#Fc8; } |
|
109 | .sy { color:#Fc8; } | |
108 | .sy .k { color:#Fc8; } |
|
110 | .sy .k { color:#Fc8; } | |
109 | .sy .dl { color:#F84; } |
|
111 | .sy .dl { color:#F84; } | |
110 |
|
112 | |||
111 | .ta { color:#070; } |
|
113 | .ta { color:#070; } | |
112 | .tf { color:#070; font-weight:bold; } |
|
114 | .tf { color:#070; font-weight:bold; } | |
113 | .ts { color:#D70; font-weight:bold; } |
|
115 | .ts { color:#D70; font-weight:bold; } | |
114 | .ty { color:#339; font-weight:bold; } |
|
116 | .ty { color:#339; font-weight:bold; } | |
115 | .v { color:#036; } |
|
117 | .v { color:#036; } | |
116 | .xt { color:#444; } |
|
118 | .xt { color:#444; } | |
117 |
|
119 | |||
118 | .ins { background: #afa; } |
|
120 | .ins { background: #afa; } | |
119 | .del { background: #faa; } |
|
121 | .del { background: #faa; } | |
120 | .chg { color: #aaf; background: #007; } |
|
122 | .chg { color: #aaf; background: #007; } | |
121 | .head { color: #f8f; background: #505 } |
|
123 | .head { color: #f8f; background: #505 } | |
122 |
|
124 | |||
123 | .ins .ins { color: #080; font-weight:bold } |
|
125 | .ins .ins { color: #080; font-weight:bold } | |
124 | .del .del { color: #800; font-weight:bold } |
|
126 | .del .del { color: #800; font-weight:bold } | |
125 | .chg .chg { color: #66f; } |
|
127 | .chg .chg { color: #66f; } | |
126 | .head .head { color: #f4f; } |
|
128 | .head .head { color: #f4f; } | |
127 | TOKENS |
|
129 | TOKENS | |
128 |
|
130 | |||
129 | end |
|
131 | end | |
130 |
|
132 | |||
131 | end |
|
133 | end | |
132 | end |
|
134 | end |
1 | NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/token_classes.rb to vendor/gems/coderay-0.9.7/lib/coderay/token_classes.rb |
|
NO CONTENT: file renamed from vendor/plugins/coderay-0.9.2/lib/coderay/token_classes.rb to vendor/gems/coderay-0.9.7/lib/coderay/token_classes.rb |
@@ -1,388 +1,390 | |||||
1 | module CodeRay |
|
1 | module CodeRay | |
2 |
|
2 | |||
3 | # = Tokens |
|
3 | # = Tokens | |
4 | # |
|
4 | # | |
5 | # The Tokens class represents a list of tokens returnd from |
|
5 | # The Tokens class represents a list of tokens returnd from | |
6 | # a Scanner. |
|
6 | # a Scanner. | |
7 | # |
|
7 | # | |
8 | # A token is not a special object, just a two-element Array |
|
8 | # A token is not a special object, just a two-element Array | |
9 | # consisting of |
|
9 | # consisting of | |
|
10 | # * the _token_ _text_ (the original source of the token in a String) or | |||
|
11 | # a _token_ _action_ (:open, :close, :begin_line, :end_line) | |||
10 | # * the _token_ _kind_ (a Symbol representing the type of the token) |
|
12 | # * the _token_ _kind_ (a Symbol representing the type of the token) | |
11 | # * the _token_ _text_ (the original source of the token in a String) |
|
|||
12 | # |
|
13 | # | |
13 | # A token looks like this: |
|
14 | # A token looks like this: | |
14 | # |
|
15 | # | |
15 |
# [ |
|
16 | # ['# It looks like this', :comment] | |
16 |
# [ |
|
17 | # ['3.1415926', :float] | |
17 |
# [:error |
|
18 | # ['$^', :error] | |
18 | # |
|
19 | # | |
19 |
# Some scanners also yield s |
|
20 | # Some scanners also yield sub-tokens, represented by special | |
20 |
# token |
|
21 | # token actions, namely :open and :close. | |
21 | # |
|
22 | # | |
22 | # The Ruby scanner, for example, splits "a string" into: |
|
23 | # The Ruby scanner, for example, splits "a string" into: | |
23 | # |
|
24 | # | |
24 | # [ |
|
25 | # [ | |
25 | # [:open, :string], |
|
26 | # [:open, :string], | |
26 |
# [:delimiter |
|
27 | # ['"', :delimiter], | |
27 |
# [ |
|
28 | # ['a string', :content], | |
28 |
# [:delimiter |
|
29 | # ['"', :delimiter], | |
29 | # [:close, :string] |
|
30 | # [:close, :string] | |
30 | # ] |
|
31 | # ] | |
31 | # |
|
32 | # | |
32 |
# Tokens is |
|
33 | # Tokens is the interface between Scanners and Encoders: | |
33 | # The input is split and saved into a Tokens object. The Encoder |
|
34 | # The input is split and saved into a Tokens object. The Encoder | |
34 | # then builds the output from this object. |
|
35 | # then builds the output from this object. | |
35 | # |
|
36 | # | |
36 | # Thus, the syntax below becomes clear: |
|
37 | # Thus, the syntax below becomes clear: | |
37 | # |
|
38 | # | |
38 | # CodeRay.scan('price = 2.59', :ruby).html |
|
39 | # CodeRay.scan('price = 2.59', :ruby).html | |
39 | # # the Tokens object is here -------^ |
|
40 | # # the Tokens object is here -------^ | |
40 | # |
|
41 | # | |
41 | # See how small it is? ;) |
|
42 | # See how small it is? ;) | |
42 | # |
|
43 | # | |
43 | # Tokens gives you the power to handle pre-scanned code very easily: |
|
44 | # Tokens gives you the power to handle pre-scanned code very easily: | |
44 | # You can convert it to a webpage, a YAML file, or dump it into a gzip'ed string |
|
45 | # You can convert it to a webpage, a YAML file, or dump it into a gzip'ed string | |
45 | # that you put in your DB. |
|
46 | # that you put in your DB. | |
|
47 | # | |||
|
48 | # It also allows you to generate tokens directly (without using a scanner), | |||
|
49 | # to load them from a file, and still use any Encoder that CodeRay provides. | |||
46 | # |
|
50 | # | |
47 | # Tokens' subclass TokenStream allows streaming to save memory. |
|
51 | # Tokens' subclass TokenStream allows streaming to save memory. | |
48 | class Tokens < Array |
|
52 | class Tokens < Array | |
49 |
|
53 | |||
50 | # The Scanner instance that created the tokens. |
|
54 | # The Scanner instance that created the tokens. | |
51 | attr_accessor :scanner |
|
55 | attr_accessor :scanner | |
52 |
|
56 | |||
53 | # Whether the object is a TokenStream. |
|
57 | # Whether the object is a TokenStream. | |
54 | # |
|
58 | # | |
55 | # Returns false. |
|
59 | # Returns false. | |
56 | def stream? |
|
60 | def stream? | |
57 | false |
|
61 | false | |
58 | end |
|
62 | end | |
59 |
|
63 | |||
60 | # Iterates over all tokens. |
|
64 | # Iterates over all tokens. | |
61 | # |
|
65 | # | |
62 | # If a filter is given, only tokens of that kind are yielded. |
|
66 | # If a filter is given, only tokens of that kind are yielded. | |
63 | def each kind_filter = nil, &block |
|
67 | def each kind_filter = nil, &block | |
64 | unless kind_filter |
|
68 | unless kind_filter | |
65 | super(&block) |
|
69 | super(&block) | |
66 | else |
|
70 | else | |
67 | super() do |text, kind| |
|
71 | super() do |text, kind| | |
68 | next unless kind == kind_filter |
|
72 | next unless kind == kind_filter | |
69 | yield text, kind |
|
73 | yield text, kind | |
70 | end |
|
74 | end | |
71 | end |
|
75 | end | |
72 | end |
|
76 | end | |
73 |
|
77 | |||
74 | # Iterates over all text tokens. |
|
78 | # Iterates over all text tokens. | |
75 | # Range tokens like [:open, :string] are left out. |
|
79 | # Range tokens like [:open, :string] are left out. | |
76 | # |
|
80 | # | |
77 | # Example: |
|
81 | # Example: | |
78 | # tokens.each_text_token { |text, kind| text.replace html_escape(text) } |
|
82 | # tokens.each_text_token { |text, kind| text.replace html_escape(text) } | |
79 | def each_text_token |
|
83 | def each_text_token | |
80 | each do |text, kind| |
|
84 | each do |text, kind| | |
81 | next unless text.is_a? ::String |
|
85 | next unless text.is_a? ::String | |
82 | yield text, kind |
|
86 | yield text, kind | |
83 | end |
|
87 | end | |
84 | end |
|
88 | end | |
85 |
|
89 | |||
86 | # Encode the tokens using encoder. |
|
90 | # Encode the tokens using encoder. | |
87 | # |
|
91 | # | |
88 | # encoder can be |
|
92 | # encoder can be | |
89 | # * a symbol like :html oder :statistic |
|
93 | # * a symbol like :html oder :statistic | |
90 | # * an Encoder class |
|
94 | # * an Encoder class | |
91 | # * an Encoder object |
|
95 | # * an Encoder object | |
92 | # |
|
96 | # | |
93 | # options are passed to the encoder. |
|
97 | # options are passed to the encoder. | |
94 | def encode encoder, options = {} |
|
98 | def encode encoder, options = {} | |
95 | unless encoder.is_a? Encoders::Encoder |
|
99 | unless encoder.is_a? Encoders::Encoder | |
96 | unless encoder.is_a? Class |
|
100 | unless encoder.is_a? Class | |
97 | encoder_class = Encoders[encoder] |
|
101 | encoder_class = Encoders[encoder] | |
98 | end |
|
102 | end | |
99 | encoder = encoder_class.new options |
|
103 | encoder = encoder_class.new options | |
100 | end |
|
104 | end | |
101 | encoder.encode_tokens self, options |
|
105 | encoder.encode_tokens self, options | |
102 | end |
|
106 | end | |
103 |
|
107 | |||
104 |
|
108 | |||
105 | # Turn into a string using Encoders::Text. |
|
109 | # Turn into a string using Encoders::Text. | |
106 | # |
|
110 | # | |
107 | # +options+ are passed to the encoder if given. |
|
111 | # +options+ are passed to the encoder if given. | |
108 | def to_s options = {} |
|
112 | def to_s options = {} | |
109 | encode :text, options |
|
113 | encode :text, options | |
110 | end |
|
114 | end | |
111 |
|
115 | |||
112 | # Redirects unknown methods to encoder calls. |
|
116 | # Redirects unknown methods to encoder calls. | |
113 | # |
|
117 | # | |
114 | # For example, if you call +tokens.html+, the HTML encoder |
|
118 | # For example, if you call +tokens.html+, the HTML encoder | |
115 | # is used to highlight the tokens. |
|
119 | # is used to highlight the tokens. | |
116 | def method_missing meth, options = {} |
|
120 | def method_missing meth, options = {} | |
117 | Encoders[meth].new(options).encode_tokens self |
|
121 | Encoders[meth].new(options).encode_tokens self | |
118 | end |
|
122 | end | |
119 |
|
123 | |||
120 | # Returns the tokens compressed by joining consecutive |
|
124 | # Returns the tokens compressed by joining consecutive | |
121 | # tokens of the same kind. |
|
125 | # tokens of the same kind. | |
122 | # |
|
126 | # | |
123 | # This can not be undone, but should yield the same output |
|
127 | # This can not be undone, but should yield the same output | |
124 | # in most Encoders. It basically makes the output smaller. |
|
128 | # in most Encoders. It basically makes the output smaller. | |
125 | # |
|
129 | # | |
126 | # Combined with dump, it saves space for the cost of time. |
|
130 | # Combined with dump, it saves space for the cost of time. | |
127 | # |
|
131 | # | |
128 | # If the scanner is written carefully, this is not required - |
|
132 | # If the scanner is written carefully, this is not required - | |
129 | # for example, consecutive //-comment lines could already be |
|
133 | # for example, consecutive //-comment lines could already be | |
130 | # joined in one comment token by the Scanner. |
|
134 | # joined in one comment token by the Scanner. | |
131 | def optimize |
|
135 | def optimize | |
132 | last_kind = last_text = nil |
|
136 | last_kind = last_text = nil | |
133 | new = self.class.new |
|
137 | new = self.class.new | |
134 | for text, kind in self |
|
138 | for text, kind in self | |
135 | if text.is_a? String |
|
139 | if text.is_a? String | |
136 | if kind == last_kind |
|
140 | if kind == last_kind | |
137 | last_text << text |
|
141 | last_text << text | |
138 | else |
|
142 | else | |
139 | new << [last_text, last_kind] if last_kind |
|
143 | new << [last_text, last_kind] if last_kind | |
140 | last_text = text |
|
144 | last_text = text | |
141 | last_kind = kind |
|
145 | last_kind = kind | |
142 | end |
|
146 | end | |
143 | else |
|
147 | else | |
144 | new << [last_text, last_kind] if last_kind |
|
148 | new << [last_text, last_kind] if last_kind | |
145 | last_kind = last_text = nil |
|
149 | last_kind = last_text = nil | |
146 | new << [text, kind] |
|
150 | new << [text, kind] | |
147 | end |
|
151 | end | |
148 | end |
|
152 | end | |
149 | new << [last_text, last_kind] if last_kind |
|
153 | new << [last_text, last_kind] if last_kind | |
150 | new |
|
154 | new | |
151 | end |
|
155 | end | |
152 |
|
156 | |||
153 | # Compact the object itself; see optimize. |
|
157 | # Compact the object itself; see optimize. | |
154 | def optimize! |
|
158 | def optimize! | |
155 | replace optimize |
|
159 | replace optimize | |
156 | end |
|
160 | end | |
157 |
|
161 | |||
158 | # Ensure that all :open tokens have a correspondent :close one. |
|
162 | # Ensure that all :open tokens have a correspondent :close one. | |
159 | # |
|
163 | # | |
160 | # TODO: Test this! |
|
164 | # TODO: Test this! | |
161 | def fix |
|
165 | def fix | |
162 | tokens = self.class.new |
|
166 | tokens = self.class.new | |
163 | # Check token nesting using a stack of kinds. |
|
167 | # Check token nesting using a stack of kinds. | |
164 | opened = [] |
|
168 | opened = [] | |
165 | for type, kind in self |
|
169 | for type, kind in self | |
166 | case type |
|
170 | case type | |
167 | when :open |
|
171 | when :open | |
168 | opened.push [:close, kind] |
|
172 | opened.push [:close, kind] | |
169 | when :begin_line |
|
173 | when :begin_line | |
170 | opened.push [:end_line, kind] |
|
174 | opened.push [:end_line, kind] | |
171 | when :close, :end_line |
|
175 | when :close, :end_line | |
172 | expected = opened.pop |
|
176 | expected = opened.pop | |
173 | if [type, kind] != expected |
|
177 | if [type, kind] != expected | |
174 | # Unexpected :close; decide what to do based on the kind: |
|
178 | # Unexpected :close; decide what to do based on the kind: | |
175 | # - token was never opened: delete the :close (just skip it) |
|
179 | # - token was never opened: delete the :close (just skip it) | |
176 | next unless opened.rindex expected |
|
180 | next unless opened.rindex expected | |
177 | # - token was opened earlier: also close tokens in between |
|
181 | # - token was opened earlier: also close tokens in between | |
178 | tokens << token until (token = opened.pop) == expected |
|
182 | tokens << token until (token = opened.pop) == expected | |
179 | end |
|
183 | end | |
180 | end |
|
184 | end | |
181 | tokens << [type, kind] |
|
185 | tokens << [type, kind] | |
182 | end |
|
186 | end | |
183 | # Close remaining opened tokens |
|
187 | # Close remaining opened tokens | |
184 | tokens << token while token = opened.pop |
|
188 | tokens << token while token = opened.pop | |
185 | tokens |
|
189 | tokens | |
186 | end |
|
190 | end | |
187 |
|
191 | |||
188 | def fix! |
|
192 | def fix! | |
189 | replace fix |
|
193 | replace fix | |
190 | end |
|
194 | end | |
191 |
|
195 | |||
192 | # TODO: Scanner#split_into_lines |
|
196 | # TODO: Scanner#split_into_lines | |
193 | # |
|
197 | # | |
194 | # Makes sure that: |
|
198 | # Makes sure that: | |
195 | # - newlines are single tokens |
|
199 | # - newlines are single tokens | |
196 | # (which means all other token are single-line) |
|
200 | # (which means all other token are single-line) | |
197 | # - there are no open tokens at the end the line |
|
201 | # - there are no open tokens at the end the line | |
198 | # |
|
202 | # | |
199 | # This makes it simple for encoders that work line-oriented, |
|
203 | # This makes it simple for encoders that work line-oriented, | |
200 | # like HTML with list-style numeration. |
|
204 | # like HTML with list-style numeration. | |
201 | def split_into_lines |
|
205 | def split_into_lines | |
202 | raise NotImplementedError |
|
206 | raise NotImplementedError | |
203 | end |
|
207 | end | |
204 |
|
208 | |||
205 | def split_into_lines! |
|
209 | def split_into_lines! | |
206 | replace split_into_lines |
|
210 | replace split_into_lines | |
207 | end |
|
211 | end | |
208 |
|
212 | |||
209 | # Dumps the object into a String that can be saved |
|
213 | # Dumps the object into a String that can be saved | |
210 | # in files or databases. |
|
214 | # in files or databases. | |
211 | # |
|
215 | # | |
212 | # The dump is created with Marshal.dump; |
|
216 | # The dump is created with Marshal.dump; | |
213 | # In addition, it is gzipped using GZip.gzip. |
|
217 | # In addition, it is gzipped using GZip.gzip. | |
214 | # |
|
218 | # | |
215 | # The returned String object includes Undumping |
|
219 | # The returned String object includes Undumping | |
216 | # so it has an #undump method. See Tokens.load. |
|
220 | # so it has an #undump method. See Tokens.load. | |
217 | # |
|
221 | # | |
218 | # You can configure the level of compression, |
|
222 | # You can configure the level of compression, | |
219 | # but the default value 7 should be what you want |
|
223 | # but the default value 7 should be what you want | |
220 | # in most cases as it is a good compromise between |
|
224 | # in most cases as it is a good compromise between | |
221 | # speed and compression rate. |
|
225 | # speed and compression rate. | |
222 | # |
|
226 | # | |
223 | # See GZip module. |
|
227 | # See GZip module. | |
224 | def dump gzip_level = 7 |
|
228 | def dump gzip_level = 7 | |
225 | require 'coderay/helpers/gzip_simple' |
|
229 | require 'coderay/helpers/gzip_simple' | |
226 | dump = Marshal.dump self |
|
230 | dump = Marshal.dump self | |
227 | dump = dump.gzip gzip_level |
|
231 | dump = dump.gzip gzip_level | |
228 | dump.extend Undumping |
|
232 | dump.extend Undumping | |
229 | end |
|
233 | end | |
230 |
|
234 | |||
231 | # The total size of the tokens. |
|
235 | # The total size of the tokens. | |
232 | # Should be equal to the input size before |
|
236 | # Should be equal to the input size before | |
233 | # scanning. |
|
237 | # scanning. | |
234 | def text_size |
|
238 | def text_size | |
235 | size = 0 |
|
239 | size = 0 | |
236 | each_text_token do |t, k| |
|
240 | each_text_token do |t, k| | |
237 | size + t.size |
|
241 | size + t.size | |
238 | end |
|
242 | end | |
239 | size |
|
243 | size | |
240 | end |
|
244 | end | |
241 |
|
245 | |||
242 | # The total size of the tokens. |
|
246 | # Return all text tokens joined into a single string. | |
243 | # Should be equal to the input size before |
|
|||
244 | # scanning. |
|
|||
245 | def text |
|
247 | def text | |
246 | map { |t, k| t if t.is_a? ::String }.join |
|
248 | map { |t, k| t if t.is_a? ::String }.join | |
247 | end |
|
249 | end | |
248 |
|
250 | |||
249 | # Include this module to give an object an #undump |
|
251 | # Include this module to give an object an #undump | |
250 | # method. |
|
252 | # method. | |
251 | # |
|
253 | # | |
252 | # The string returned by Tokens.dump includes Undumping. |
|
254 | # The string returned by Tokens.dump includes Undumping. | |
253 | module Undumping |
|
255 | module Undumping | |
254 | # Calls Tokens.load with itself. |
|
256 | # Calls Tokens.load with itself. | |
255 | def undump |
|
257 | def undump | |
256 | Tokens.load self |
|
258 | Tokens.load self | |
257 | end |
|
259 | end | |
258 | end |
|
260 | end | |
259 |
|
261 | |||
260 | # Undump the object using Marshal.load, then |
|
262 | # Undump the object using Marshal.load, then | |
261 | # unzip it using GZip.gunzip. |
|
263 | # unzip it using GZip.gunzip. | |
262 | # |
|
264 | # | |
263 | # The result is commonly a Tokens object, but |
|
265 | # The result is commonly a Tokens object, but | |
264 | # this is not guaranteed. |
|
266 | # this is not guaranteed. | |
265 | def Tokens.load dump |
|
267 | def Tokens.load dump | |
266 | require 'coderay/helpers/gzip_simple' |
|
268 | require 'coderay/helpers/gzip_simple' | |
267 | dump = dump.gunzip |
|
269 | dump = dump.gunzip | |
268 | @dump = Marshal.load dump |
|
270 | @dump = Marshal.load dump | |
269 | end |
|
271 | end | |
270 |
|
272 | |||
271 | end |
|
273 | end | |
272 |
|
274 | |||
273 |
|
275 | |||
274 | # = TokenStream |
|
276 | # = TokenStream | |
275 | # |
|
277 | # | |
276 | # The TokenStream class is a fake Array without elements. |
|
278 | # The TokenStream class is a fake Array without elements. | |
277 | # |
|
279 | # | |
278 | # It redirects the method << to a block given at creation. |
|
280 | # It redirects the method << to a block given at creation. | |
279 | # |
|
281 | # | |
280 | # This allows scanners and Encoders to use streaming (no |
|
282 | # This allows scanners and Encoders to use streaming (no | |
281 | # tokens are saved, the input is highlighted the same time it |
|
283 | # tokens are saved, the input is highlighted the same time it | |
282 | # is scanned) with the same code. |
|
284 | # is scanned) with the same code. | |
283 | # |
|
285 | # | |
284 | # See CodeRay.encode_stream and CodeRay.scan_stream |
|
286 | # See CodeRay.encode_stream and CodeRay.scan_stream | |
285 | class TokenStream < Tokens |
|
287 | class TokenStream < Tokens | |
286 |
|
288 | |||
287 | # Whether the object is a TokenStream. |
|
289 | # Whether the object is a TokenStream. | |
288 | # |
|
290 | # | |
289 | # Returns true. |
|
291 | # Returns true. | |
290 | def stream? |
|
292 | def stream? | |
291 | true |
|
293 | true | |
292 | end |
|
294 | end | |
293 |
|
295 | |||
294 | # The Array is empty, but size counts the tokens given by <<. |
|
296 | # The Array is empty, but size counts the tokens given by <<. | |
295 | attr_reader :size |
|
297 | attr_reader :size | |
296 |
|
298 | |||
297 | # Creates a new TokenStream that calls +block+ whenever |
|
299 | # Creates a new TokenStream that calls +block+ whenever | |
298 | # its << method is called. |
|
300 | # its << method is called. | |
299 | # |
|
301 | # | |
300 | # Example: |
|
302 | # Example: | |
301 | # |
|
303 | # | |
302 | # require 'coderay' |
|
304 | # require 'coderay' | |
303 | # |
|
305 | # | |
304 |
# token_stream = CodeRay::TokenStream.new do | |
|
306 | # token_stream = CodeRay::TokenStream.new do |text, kind| | |
305 | # puts 'kind: %s, text size: %d.' % [kind, text.size] |
|
307 | # puts 'kind: %s, text size: %d.' % [kind, text.size] | |
306 | # end |
|
308 | # end | |
307 | # |
|
309 | # | |
308 |
# token_stream << [ |
|
310 | # token_stream << ['/\d+/', :regexp] | |
309 | # #-> kind: rexpexp, text size: 5. |
|
311 | # #-> kind: rexpexp, text size: 5. | |
310 | # |
|
312 | # | |
311 | def initialize &block |
|
313 | def initialize &block | |
312 | raise ArgumentError, 'Block expected for streaming.' unless block |
|
314 | raise ArgumentError, 'Block expected for streaming.' unless block | |
313 | @callback = block |
|
315 | @callback = block | |
314 | @size = 0 |
|
316 | @size = 0 | |
315 | end |
|
317 | end | |
316 |
|
318 | |||
317 | # Calls +block+ with +token+ and increments size. |
|
319 | # Calls +block+ with +token+ and increments size. | |
318 | # |
|
320 | # | |
319 | # Returns self. |
|
321 | # Returns self. | |
320 | def << token |
|
322 | def << token | |
321 | @callback.call(*token) |
|
323 | @callback.call(*token) | |
322 | @size += 1 |
|
324 | @size += 1 | |
323 | self |
|
325 | self | |
324 | end |
|
326 | end | |
325 |
|
327 | |||
326 | # This method is not implemented due to speed reasons. Use Tokens. |
|
328 | # This method is not implemented due to speed reasons. Use Tokens. | |
327 | def text_size |
|
329 | def text_size | |
328 | raise NotImplementedError, |
|
330 | raise NotImplementedError, | |
329 | 'This method is not implemented due to speed reasons.' |
|
331 | 'This method is not implemented due to speed reasons.' | |
330 | end |
|
332 | end | |
331 |
|
333 | |||
332 | # A TokenStream cannot be dumped. Use Tokens. |
|
334 | # A TokenStream cannot be dumped. Use Tokens. | |
333 | def dump |
|
335 | def dump | |
334 | raise NotImplementedError, 'A TokenStream cannot be dumped.' |
|
336 | raise NotImplementedError, 'A TokenStream cannot be dumped.' | |
335 | end |
|
337 | end | |
336 |
|
338 | |||
337 | # A TokenStream cannot be optimized. Use Tokens. |
|
339 | # A TokenStream cannot be optimized. Use Tokens. | |
338 | def optimize |
|
340 | def optimize | |
339 | raise NotImplementedError, 'A TokenStream cannot be optimized.' |
|
341 | raise NotImplementedError, 'A TokenStream cannot be optimized.' | |
340 | end |
|
342 | end | |
341 |
|
343 | |||
342 | end |
|
344 | end | |
343 |
|
345 | |||
344 | end |
|
346 | end | |
345 |
|
347 | |||
346 | if $0 == __FILE__ |
|
348 | if $0 == __FILE__ | |
347 | $VERBOSE = true |
|
349 | $VERBOSE = true | |
348 | $: << File.join(File.dirname(__FILE__), '..') |
|
350 | $: << File.join(File.dirname(__FILE__), '..') | |
349 | eval DATA.read, nil, $0, __LINE__ + 4 |
|
351 | eval DATA.read, nil, $0, __LINE__ + 4 | |
350 | end |
|
352 | end | |
351 |
|
353 | |||
352 | __END__ |
|
354 | __END__ | |
353 | require 'test/unit' |
|
355 | require 'test/unit' | |
354 |
|
356 | |||
355 | class TokensTest < Test::Unit::TestCase |
|
357 | class TokensTest < Test::Unit::TestCase | |
356 |
|
358 | |||
357 | def test_creation |
|
359 | def test_creation | |
358 | assert CodeRay::Tokens < Array |
|
360 | assert CodeRay::Tokens < Array | |
359 | tokens = nil |
|
361 | tokens = nil | |
360 | assert_nothing_raised do |
|
362 | assert_nothing_raised do | |
361 | tokens = CodeRay::Tokens.new |
|
363 | tokens = CodeRay::Tokens.new | |
362 | end |
|
364 | end | |
363 | assert_kind_of Array, tokens |
|
365 | assert_kind_of Array, tokens | |
364 | end |
|
366 | end | |
365 |
|
367 | |||
366 | def test_adding_tokens |
|
368 | def test_adding_tokens | |
367 | tokens = CodeRay::Tokens.new |
|
369 | tokens = CodeRay::Tokens.new | |
368 | assert_nothing_raised do |
|
370 | assert_nothing_raised do | |
369 | tokens << ['string', :type] |
|
371 | tokens << ['string', :type] | |
370 | tokens << ['()', :operator] |
|
372 | tokens << ['()', :operator] | |
371 | end |
|
373 | end | |
372 | assert_equal tokens.size, 2 |
|
374 | assert_equal tokens.size, 2 | |
373 | end |
|
375 | end | |
374 |
|
376 | |||
375 | def test_dump_undump |
|
377 | def test_dump_undump | |
376 | tokens = CodeRay::Tokens.new |
|
378 | tokens = CodeRay::Tokens.new | |
377 | assert_nothing_raised do |
|
379 | assert_nothing_raised do | |
378 | tokens << ['string', :type] |
|
380 | tokens << ['string', :type] | |
379 | tokens << ['()', :operator] |
|
381 | tokens << ['()', :operator] | |
380 | end |
|
382 | end | |
381 | tokens2 = nil |
|
383 | tokens2 = nil | |
382 | assert_nothing_raised do |
|
384 | assert_nothing_raised do | |
383 | tokens2 = tokens.dump.undump |
|
385 | tokens2 = tokens.dump.undump | |
384 | end |
|
386 | end | |
385 | assert_equal tokens, tokens2 |
|
387 | assert_equal tokens, tokens2 | |
386 | end |
|
388 | end | |
387 |
|
389 | |||
388 | end No newline at end of file |
|
390 | end |
General Comments 0
You need to be logged in to leave comments.
Login now