Lex/parser XML declaration attributes.
This commit is contained in:
parent
fa2e71c790
commit
d6c0a1f3f3
|
@ -229,6 +229,7 @@ module Oga
|
||||||
|
|
||||||
newline = '\n' | '\r\n';
|
newline = '\n' | '\r\n';
|
||||||
whitespace = [ \t];
|
whitespace = [ \t];
|
||||||
|
identifier = [a-zA-Z0-9\-_]+;
|
||||||
|
|
||||||
# Strings
|
# Strings
|
||||||
#
|
#
|
||||||
|
@ -403,6 +404,12 @@ module Oga
|
||||||
fret;
|
fret;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Attributes and their values (e.g. version="1.0").
|
||||||
|
identifier => { emit(:T_ATTR) };
|
||||||
|
|
||||||
|
dquote => start_string_dquote;
|
||||||
|
squote => start_string_squote;
|
||||||
|
|
||||||
any;
|
any;
|
||||||
*|;
|
*|;
|
||||||
|
|
||||||
|
@ -450,7 +457,7 @@ module Oga
|
||||||
newline => { advance_line };
|
newline => { advance_line };
|
||||||
|
|
||||||
# Attribute names.
|
# Attribute names.
|
||||||
element_name => { emit(:T_ATTR) };
|
identifier => { emit(:T_ATTR) };
|
||||||
|
|
||||||
# Attribute values.
|
# Attribute values.
|
||||||
dquote => start_string_dquote;
|
dquote => start_string_dquote;
|
||||||
|
|
|
@ -123,8 +123,8 @@ rule
|
||||||
|
|
||||||
# XML declarations
|
# XML declarations
|
||||||
xmldecl
|
xmldecl
|
||||||
: T_XML_DECL_START T_XML_DECL_END { s(:xml_decl) }
|
: T_XML_DECL_START T_XML_DECL_END { s(:xml_decl) }
|
||||||
| T_XML_DECL_START text T_XML_DECL_END { s(:xml_decl, val[1]) }
|
| T_XML_DECL_START attributes T_XML_DECL_END { s(:xml_decl, val[1]) }
|
||||||
|
|
||||||
# Plain text
|
# Plain text
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,8 @@ describe Oga::XML::Lexer do
|
||||||
example 'lex a tag with text inside it' do
|
example 'lex a tag with text inside it' do
|
||||||
lex('<?xml version="1.0" ?>').should == [
|
lex('<?xml version="1.0" ?>').should == [
|
||||||
[:T_XML_DECL_START, nil, 1],
|
[:T_XML_DECL_START, nil, 1],
|
||||||
[:T_TEXT, ' version="1.0" ', 1],
|
[:T_ATTR, 'version', 1],
|
||||||
|
[:T_STRING, '1.0', 1],
|
||||||
[:T_XML_DECL_END, nil, 1]
|
[:T_XML_DECL_END, nil, 1]
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,9 +3,9 @@ require 'spec_helper'
|
||||||
describe Oga::XML::Parser do
|
describe Oga::XML::Parser do
|
||||||
context 'XML declaration tags' do
|
context 'XML declaration tags' do
|
||||||
example 'lex an XML declaration tag' do
|
example 'lex an XML declaration tag' do
|
||||||
parse('<?xml hello ?>').should == s(
|
parse('<?xml version="1.0" ?>').should == s(
|
||||||
:document,
|
:document,
|
||||||
s(:xml_decl, s(:text, ' hello '))
|
s(:xml_decl, s(:attributes, s(:attribute, 'version', '1.0')))
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue