diff options
author | murphy <murphy@rubychan.de> | 2008-10-20 14:18:18 +0000 |
---|---|---|
committer | murphy <murphy@rubychan.de> | 2008-10-20 14:18:18 +0000 |
commit | ceed015b2d5a237a6f3dfc0f2272f13c9f758771 (patch) | |
tree | c52ff27205bbefaebf5e8f67960244cd921ece01 /lib/coderay/scanners | |
parent | 23e5605488f613bd864671a322562ecfcb2d945d (diff) | |
download | coderay-ceed015b2d5a237a6f3dfc0f2272f13c9f758771.tar.gz |
New: *YAML* (#53). Preparing for version 0.8.1.
* Based on the YAML scanner from Jamis Buck's Syntax lib.
* Some YAML examples from Ruby gems.
* Doesn't handle string yet; alpha state.
More changes:
* coderay_suite: new parameter "fast" makes testing faster (for development).
* Changed the title of HTML page output (Page Encoder).
* FileType: Added new file types.
* cYcnus style: simplified some token group styles.
* Cleanup in CSS and HTML Scanners.
Diffstat (limited to 'lib/coderay/scanners')
-rw-r--r-- | lib/coderay/scanners/_map.rb | 3 | ||||
-rw-r--r-- | lib/coderay/scanners/css.rb | 1 | ||||
-rw-r--r-- | lib/coderay/scanners/html.rb | 2 | ||||
-rw-r--r-- | lib/coderay/scanners/yaml.rb | 114 |
4 files changed, 116 insertions, 4 deletions
diff --git a/lib/coderay/scanners/_map.rb b/lib/coderay/scanners/_map.rb index e8dfa07..60d57ae 100644 --- a/lib/coderay/scanners/_map.rb +++ b/lib/coderay/scanners/_map.rb @@ -7,7 +7,8 @@ module Scanners :irb => :ruby, :xhtml => :nitro_xhtml, :javascript => :java_script, - :nitro => :nitro_xhtml + :nitro => :nitro_xhtml, + :yml => :yaml default :plain diff --git a/lib/coderay/scanners/css.rb b/lib/coderay/scanners/css.rb index 897e27a..848f136 100644 --- a/lib/coderay/scanners/css.rb +++ b/lib/coderay/scanners/css.rb @@ -168,7 +168,6 @@ module Scanners raise_inspect 'Empty token', tokens unless match tokens << [match, kind] - # tokens << [states.inspect, :error] end diff --git a/lib/coderay/scanners/html.rb b/lib/coderay/scanners/html.rb index 5f647d3..bb7ad3a 100644 --- a/lib/coderay/scanners/html.rb +++ b/lib/coderay/scanners/html.rb @@ -2,8 +2,6 @@ module CodeRay module Scanners # HTML Scanner - # - # $Id$ class HTML < Scanner include Streamable diff --git a/lib/coderay/scanners/yaml.rb b/lib/coderay/scanners/yaml.rb new file mode 100644 index 0000000..06da907 --- /dev/null +++ b/lib/coderay/scanners/yaml.rb @@ -0,0 +1,114 @@ +module CodeRay +module Scanners + + # YAML Scanner + # + # Based on the YAML scanner from Syntax by Jamis Buck. + class XML < Scanner + + register_for :yaml + file_extension 'yml' + + def scan_tokens tokens, options + + value_expected = nil + states = :initial + + until eos? + + kind = nil + match = nil + + if match = scan(/\s+/) + kind = :space + state = :initial if match.index(?\n) + + elsif match = scan(/#.*/) + kind = :comment + + elsif bol? and case + when scan(/---/) + kind = :tag + end + + elsif state == :value and case + when scan(/(?![!*&]).+(?=$|\s+#)/) + kind = :string + end + + elsif case + when match = scan(/[-:](?= )/) + state = :value if state == :colon && (match == ':' || match == '-') + kind = :operator + when match = scan(/[,{}\[\]]/) + kind = :operator + when state == :initial && scan(/\w+(?=:)/) + kind = :key + state = :colon + when state == :initial && match = scan(/(?:"[^"]*"|'[^']*')(?=:)/) + tokens << [:open, :key] + tokens << [match[0,1], :delimiter] + tokens << [match[1..-2], :content] + tokens << [match[-1,1], :delimiter] + tokens << [:close, :key] + state = :colon + next + when scan(/(![\w\/]+)(:([\w:]+))?/) + tokens << [self[1], :type] + if self[2] + tokens << [':', :operator] + tokens << [self[3], :class] + end + next + when scan(/&\S+/) + kind = :variable + when scan(/\*\w+/) + kind = :global_variable + when scan(/\d\d:\d\d:\d\d/) + kind = :oct + when scan(/\d\d\d\d-\d\d-\d\d\s\d\d:\d\d:\d\d(\.\d+)? [-+]\d\d:\d\d/) + kind = :oct + when scan(/:\w+/) + kind = :symbol + when scan(/[^:\s]+/) + kind = :string + # when scan(/>-?/) + # kind = :punct + # kind = :normal, scan(/.*$/) + # append getch until eos? || bol? + # return if eos? + # indent = check(/ */) + # kind = :string + # loop do + # line = check_until(/[\n\r]|\Z/) + # break if line.nil? + # if line.chomp.length > 0 + # this_indent = line.chomp.match( /^\s*/ )[0] + # break if this_indent.length < indent.length + # end + # append scan_until(/[\n\r]|\Z/) + # end + end + + else + getch + kind = :error + + end + + match ||= matched + + raise_inspect 'Error token %p in line %d' % [[match, kind], line], tokens if $DEBUG && !kind + raise_inspect 'Empty token', tokens unless match + + tokens << [match, kind] + + end + + tokens + end + + end + +end +end |