mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
net.html: fix text parsing for inline tags (#18085)
This commit is contained in:
parent
d086cc26cd
commit
0898f57995
@ -13,3 +13,20 @@ fn test_parse() {
|
|||||||
assert h1_tag.str() == '<h1 class="title" >Hello world!</h1>'
|
assert h1_tag.str() == '<h1 class="title" >Hello world!</h1>'
|
||||||
// assert h1_tag.str() == '<h1 class="title">Hello world!</h1>'
|
// assert h1_tag.str() == '<h1 class="title">Hello world!</h1>'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn test_parse_inline_tags() {
|
||||||
|
doc := parse('<html><body><p>before <span>in between</span> after</p></body></html>')
|
||||||
|
tags := doc.get_tag('span')
|
||||||
|
assert tags.len == 1
|
||||||
|
|
||||||
|
span_tag := tags[0]
|
||||||
|
assert span_tag.str() == '<span>in between</span>'
|
||||||
|
|
||||||
|
p_tags := doc.get_tag('p')
|
||||||
|
assert p_tags.len == 1
|
||||||
|
|
||||||
|
p_tag := p_tags[0]
|
||||||
|
assert p_tag.str() == '<p>before <span>in between</span><text> after</text></p>'
|
||||||
|
|
||||||
|
assert p_tag.text() == 'before in between after'
|
||||||
|
}
|
||||||
|
@ -14,6 +14,7 @@ mut:
|
|||||||
opened_code_type string
|
opened_code_type string
|
||||||
line_count int
|
line_count int
|
||||||
outside_tag bool
|
outside_tag bool
|
||||||
|
text_after_tag bool
|
||||||
lexeme_builder strings.Builder = strings.new_builder(100)
|
lexeme_builder strings.Builder = strings.new_builder(100)
|
||||||
code_tags map[string]bool = {
|
code_tags map[string]bool = {
|
||||||
'script': true
|
'script': true
|
||||||
@ -221,10 +222,7 @@ pub fn (mut parser Parser) split_parse(data string) {
|
|||||||
if parser.lexical_attributes.current_tag.name.len > 1
|
if parser.lexical_attributes.current_tag.name.len > 1
|
||||||
&& parser.lexical_attributes.current_tag.name[0] == 47
|
&& parser.lexical_attributes.current_tag.name[0] == 47
|
||||||
&& !blank_string(temp_string) {
|
&& !blank_string(temp_string) {
|
||||||
parser.tags << &Tag{
|
parser.lexical_attributes.text_after_tag = true
|
||||||
name: 'text'
|
|
||||||
content: temp_string
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
parser.lexical_attributes.current_tag.content = temp_string // verify later who has this content
|
parser.lexical_attributes.current_tag.content = temp_string // verify later who has this content
|
||||||
}
|
}
|
||||||
@ -234,6 +232,14 @@ pub fn (mut parser Parser) split_parse(data string) {
|
|||||||
parser.generate_tag()
|
parser.generate_tag()
|
||||||
parser.lexical_attributes.open_tag = true
|
parser.lexical_attributes.open_tag = true
|
||||||
parser.lexical_attributes.outside_tag = false
|
parser.lexical_attributes.outside_tag = false
|
||||||
|
|
||||||
|
if parser.lexical_attributes.text_after_tag == true {
|
||||||
|
parser.tags << &Tag{
|
||||||
|
name: 'text'
|
||||||
|
content: temp_string
|
||||||
|
}
|
||||||
|
parser.lexical_attributes.text_after_tag = false
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
parser.lexical_attributes.lexeme_builder.write_u8(chr)
|
parser.lexical_attributes.lexeme_builder.write_u8(chr)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user