1
0
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:
Casper Kuethe 2023-04-30 15:20:24 +02:00 committed by GitHub
parent d086cc26cd
commit 0898f57995
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 4 deletions

View File

@ -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'
}

View File

@ -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)
} }