File: scan.rl

package info (click to toggle)
libnora-ruby 1%3A0.0.20041021-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 412 kB
  • ctags: 711
  • sloc: ruby: 5,186; ansic: 669; makefile: 260; sql: 10
file content (126 lines) | stat: -rwxr-xr-x 3,366 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#TLEX start=default
module Web
  module CSS
    class Scanner
      H          = "[0-9a-f]"
      NONASCII   = "[\302\240-\364\217\277\277]"
      UNICODE    = "\\\\#{H}{1,6}[ \\t\\r\\n\\f]?"
      ESCAPE     = "(?:#{UNICODE}|\\\\[ -~\302\240-\364\217\277\277])"
      NMSTART    = "(?:[a-z]|#{NONASCII}|#{ESCAPE})"
      NMCHAR     = "(?:[a-z0-9\-]|#{NONASCII}|#{ESCAPE})"
      NL         = "(?:\\n|\\r\\n|\\r|\\f)"
      STRING1    = "(?:\"([\\t !\#$%&(-~]|#{NL}|\'|#{NONASCII}|#{ESCAPE})*\")"
      STRING2    = "(?:\'([\\t !\#$%&(-~]|#{NL}|\"|#{NONASCII}|#{ESCAPE})*\')"
      IDENT      = "#{NMSTART}#{NMCHAR}*"
      NAME       = "#{NMCHAR}+"
      NUM        = "(?:[0-9]+|[0-9]*\.[0-9]+)"
      STRING     = "(?:#{STRING1}|#{STRING2})"
      URL        = "(?:[!\#$%&*-~]|#{NONASCII}|#{ESCAPE})*"
      W          = "[ \\t\\r\\n\\f]*"
      RANGE      = "\\?{1,6}|#{H}(\\?{0,5}|#{H}(\\?{0,4}|#{H}(\\?{0,3}|#{H}(\\?{0,2}|#{H}(\\?\\?|#{H})))))"
###
#:default
#/[ \t\r\n\f]+/ui
          push [:S,matched]

#/\/\*/ui
          transit_state :comment
#/<!--/ui
          push [:CDO,matched]
#/-->/ui
          push [:CDC,matched]
#/~=/ui
          push [:INCLUDES,matched]
#/\|=/ui
          push [:DASHMATCH,matched]
#/#{STRING}/ui
          push [:STRING,matched]
#/url\(#{W}(#{STRING})#{W}\)/ui
          push [:URI,matched]
#/url\(#{W}(#{URL})#{W}\)/ui
          push [:URI,matched]
#/#{IDENT}/ui
          push [:IDENT,matched]
#/\##{NAME}/ui
          push [:HASH,matched]
#/@#{IDENT}/ui
          case matched.downcase
          when "@import"
            push [:IMPORT_SYM,matched]
          when  "@page"
            push [:PAGE_SYM,matched]
          when  "@media"
            push [:MEDIA_SYM,matched]
          when "@font-face"
            push [:FONT_FACE_SYM,matched]
          when "@charset"
            push [:CHARSET_SYM,matched]
          else
            push [:ATKEYWORD,matched]
          end
#/!#{W}important/ui
          push [:IMPORTANT_SYM,matched]
#/(#{NUM})em/ui
          push [:EMS,matched]
#/(#{NUM})ex/ui
          push [:EXS,matched]
#/(#{NUM})px/ui
          push [:LENGTH,matched]
#/(#{NUM})cm/ui
          push [:LENGTH,matched]
#/(#{NUM})mm/ui
          push [:LENGTH,matched]
#/(#{NUM})in/ui
          push [:LENGTH,matched]
#/(#{NUM})pt/ui
          push [:LENGTH,matched]
#/(#{NUM})pc/ui
          push [:LENGTH,matched]
#/(#{NUM})deg/ui
          push [:ANGLE,matched]
#/(#{NUM})rad/ui
          push [:ANGLE,matched]
#/(#{NUM})grad/ui
          push [:ANGLE,matched]
#/(#{NUM})ms/ui
          push [:TIME,matched]
#/(#{NUM})s/ui
          push [:TIME,matched]
#/(#{NUM})Hz/ui
          push [:FREQ,matched]
#/(#{NUM})kHz/ui
          push [:FREQ,matched]
#/(#{NUM})(#{IDENT})/ui
          push [:DIMEN,matched]
#/(#{NUM})%/ui
          push [:PERCENTAGE,matched]
#/(#{NUM})/ui
          push [:NUMBER,matched]
#/(#{IDENT})\(/ui
          push [:FUNCTION,matched]
#/U\+#{RANGE}/ui
          push [:UNICODERANGE,matched]
#/U\+#{H}{1,6}-#{H}{1,6}/ui
          push [:UNICODERANGE,matched]
#/#{IDENT}/ui
          push [:IDENT,matched]
#/./ui
          push [matched.intern,matched]

#:comment
#/[^*]/ui
          #
#/\*\//ui
          transit_state :default
#/./ui
          #
###
     end # Scanner
  end # CSS
end # Web
if $0==__FILE__
  scan = Web::CSS::Scanner.new(ARGF)
  while token=scan.token
    p token
  end
end