Support for parsing CDATA tags.
This commit is contained in:
parent
c9592856f0
commit
0a396043f8
|
@ -1,8 +1,9 @@
|
||||||
class Oga::Parser
|
class Oga::Parser
|
||||||
|
|
||||||
token T_NEWLINE T_SPACE
|
token T_NEWLINE T_SPACE
|
||||||
token T_STRING
|
token T_STRING T_TEXT
|
||||||
token T_DOCTYPE_START T_DOCTYPE_END T_DOCTYPE_TYPE
|
token T_DOCTYPE_START T_DOCTYPE_END T_DOCTYPE_TYPE
|
||||||
|
token T_CDATA_START T_CDATA_END
|
||||||
|
|
||||||
options no_result_var
|
options no_result_var
|
||||||
|
|
||||||
|
@ -19,6 +20,7 @@ rule
|
||||||
|
|
||||||
expression
|
expression
|
||||||
: doctype
|
: doctype
|
||||||
|
| cdata
|
||||||
;
|
;
|
||||||
|
|
||||||
# Doctypes
|
# Doctypes
|
||||||
|
@ -46,6 +48,16 @@ rule
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
# CDATA tags
|
||||||
|
|
||||||
|
cdata
|
||||||
|
# <![CDATA[]]>
|
||||||
|
: T_CDATA_START T_CDATA_END { s(:cdata) }
|
||||||
|
|
||||||
|
# <![CDATA[foo]]>
|
||||||
|
| T_CDATA_START T_TEXT T_CDATA_END { s(:cdata, val[1]) }
|
||||||
|
;
|
||||||
|
|
||||||
whitespaces
|
whitespaces
|
||||||
: whitespaces whitespace
|
: whitespaces whitespace
|
||||||
| whitespace
|
| whitespace
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Oga::Parser do
|
||||||
|
context 'cdata tags' do
|
||||||
|
example 'parse a cdata tag' do
|
||||||
|
parse_html('<![CDATA[foo]]>').should == s(:document, s(:cdata, 'foo'))
|
||||||
|
end
|
||||||
|
|
||||||
|
example 'parse an element inside a cdata tag' do
|
||||||
|
parse_html('<![CDATA[<p>foo</p>]]>').should == s(
|
||||||
|
:document,
|
||||||
|
s(:cdata, '<p>foo</p>')
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
example 'parse double brackets inside a cdata tag' do
|
||||||
|
parse_html('<![CDATA[]]]]>').should == s(:document, s(:cdata, ']]'))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue