# File lib/coderay/scanners/html.rb, line 52 52: def scan_tokens tokens, options 53: 54: state = @state 55: plain_string_content = @plain_string_content 56: 57: until eos? 58: 59: kind = nil 60: match = nil 61: 62: if scan(/\s+/) 63: kind = :space 64: 65: else 66: 67: case state 68: 69: when :initial 70: if scan(/<!--.*?-->/) 71: kind = :comment 72: elsif scan(/<!DOCTYPE.*?>/) 73: kind = :doctype 74: elsif scan(/<\?xml.*?\?>/) 75: kind = :preprocessor 76: elsif scan(/<\?.*?\?>|<%.*?%>/) 77: kind = :comment 78: elsif scan(/<\/[-\w.:]*>/) 79: kind = :tag 80: elsif match = scan(/<[-\w.:]+>?/) 81: kind = :tag 82: state = :attribute unless match[1] == >> 83: elsif scan(/[^<>&]+/) 84: kind = :plain 85: elsif scan(/#{ENTITY}/x) 86: kind = :entity 87: elsif scan(/[<>&]/) 88: kind = :error 89: else 90: raise_inspect '[BUG] else-case reached with state %p' % [state], tokens 91: end 92: 93: when :attribute 94: if scan(/#{TAG_END}/) 95: kind = :tag 96: state = :initial 97: elsif scan(/#{ATTR_NAME}/) 98: kind = :attribute_name 99: state = :attribute_equal 100: else 101: kind = :error 102: getch 103: end 104: 105: when :attribute_equal 106: if scan(/=/) 107: kind = :operator 108: state = :attribute_value 109: elsif scan(/#{ATTR_NAME}/) 110: kind = :attribute_name 111: elsif scan(/#{TAG_END}/) 112: kind = :tag 113: state = :initial 114: elsif scan(/./) 115: kind = :error 116: state = :attribute 117: end 118: 119: when :attribute_value 120: if scan(/#{ATTR_VALUE_UNQUOTED}/) 121: kind = :attribute_value 122: state = :attribute 123: elsif match = scan(/["']/) 124: tokens << [:open, :string] 125: state = :attribute_value_string 126: plain_string_content = PLAIN_STRING_CONTENT[match] 127: kind = :delimiter 128: elsif scan(/#{TAG_END}/) 129: kind = :tag 130: state = :initial 131: else 132: kind = :error 133: getch 134: end 135: 136: when :attribute_value_string 137: if scan(plain_string_content) 138: kind = :content 139: elsif scan(/['"]/) 140: tokens << [matched, :delimiter] 141: tokens << [:close, :string] 142: state = :attribute 143: next 144: elsif scan(/#{ENTITY}/x) 145: kind = :entity 146: elsif scan(/&/) 147: kind = :content 148: elsif scan(/[\n>]/) 149: tokens << [:close, :string] 150: kind = :error 151: state = :initial 152: end 153: 154: else 155: raise_inspect 'Unknown state: %p' % [state], tokens 156: 157: end 158: 159: end 160: 161: match ||= matched 162: if $CODERAY_DEBUG and not kind 163: raise_inspect 'Error token %p in line %d' % 164: [[match, kind], line], tokens, state 165: end 166: raise_inspect 'Empty token', tokens unless match 167: 168: tokens << [match, kind] 169: end 170: 171: if options[:keep_state] 172: @state = state 173: @plain_string_content = plain_string_content 174: end 175: 176: tokens 177: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.