Separate description list terms and details when indexing
This commit is contained in:
1 parent
4a2d8974bb
commit
a3e68ffd4d
1 file changed
+22
-2
@@ -21,7 +21,8 @@ lazy_static! {
|
||||
}
|
||||
|
||||
const SENTENCE_SELECTORS: &[&'static str] = &[
|
||||
"h1", "h2", "h3", "h4", "h5", "h6", "p", "td", "div", "ul", "li", "article", "section",
|
||||
"h1", "h2", "h3", "h4", "h5", "h6", "p", "td", "div", "ul", "li", "dl", "dt", "dd", "article",
|
||||
"section",
|
||||
];
|
||||
const INLINE_SELECTORS: &[&'static str] = &[
|
||||
"a", "abbr", "acronym", "b", "bdo", "big", "br", "button", "cite", "code", "dfn", "em", "i",
|
||||
@@ -361,11 +362,13 @@ impl<'a> DomParser<'a> {
|
||||
// Similarly, we want to separate block elements
|
||||
// with punctuation, so that the excerpts read nicely.
|
||||
// (As long as it doesn't already end with, say, a . or ?)
|
||||
// Description list terms lead into their details,
|
||||
// so they get a colon instead.
|
||||
if node.current_value.chars()
|
||||
.last()
|
||||
.filter(|c| SENTENCE_CHARS.is_match(&c.to_string()))
|
||||
.is_some() {
|
||||
node.current_value.push('.');
|
||||
node.current_value.push(if tag_name == "dt" { ':' } else { '.' });
|
||||
}
|
||||
node.current_value.push(' ');
|
||||
}
|
||||
@@ -837,6 +840,23 @@ mod tests {
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn description_list_formatting() {
|
||||
let data = test_parse(vec![
|
||||
"<dl>",
|
||||
"<dt>Morgawr</dt>",
|
||||
"<dd>A sea serpent</dd>",
|
||||
"<dt>Owlman:</dt>",
|
||||
"<dd>A giant owl-like creature</dd>",
|
||||
"</dl>",
|
||||
]);
|
||||
|
||||
assert_eq!(
|
||||
data.digest,
|
||||
"Morgawr: A sea serpent. Owlman: A giant owl-like creature."
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn inline_tag_formatting() {
|
||||
let data = test_parse(vec![
|
||||
|
||||
Reference in new issue
Block a user