Skip to content

Commit cb11184

Browse files
committed
docs: Document parse module
1 parent a13fc37 commit cb11184

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

src/lib.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -126,24 +126,23 @@
126126
unused_qualifications,
127127
variant_size_differences
128128
)]
129-
use crate::parse::Declaration;
130129
use kuchiki::traits::TendrilSink;
131130
use kuchiki::{parse_html, Selectors};
132131

133132
pub mod error;
134-
mod parse;
133+
mod parser;
135134

136135
pub use error::InlineError;
137136
use std::collections::HashMap;
138137

139138
#[derive(Debug)]
140139
struct Rule {
141140
selectors: Selectors,
142-
declarations: Vec<Declaration>,
141+
declarations: Vec<parser::Declaration>,
143142
}
144143

145144
impl Rule {
146-
pub fn new(selectors: &str, declarations: Vec<Declaration>) -> Result<Rule, ()> {
145+
pub fn new(selectors: &str, declarations: Vec<parser::Declaration>) -> Result<Rule, ()> {
147146
Ok(Rule {
148147
selectors: Selectors::compile(selectors)?,
149148
declarations,
@@ -211,7 +210,7 @@ impl CSSInliner {
211210
if let Some(css_cell) = first_child.as_text() {
212211
let css = css_cell.borrow();
213212
let mut parse_input = cssparser::ParserInput::new(css.as_str());
214-
let mut parser = parse::CSSParser::new(&mut parse_input);
213+
let mut parser = parser::CSSParser::new(&mut parse_input);
215214
for parsed in parser.parse() {
216215
if let Ok((selector, declarations)) = parsed {
217216
let rule = Rule::new(&selector, declarations).map_err(|_| {
@@ -262,12 +261,15 @@ pub fn inline(html: &str) -> Result<String, InlineError> {
262261
CSSInliner::default().inline(html)
263262
}
264263

265-
fn merge_styles(existing_style: &str, new_styles: &[Declaration]) -> Result<String, InlineError> {
264+
fn merge_styles(
265+
existing_style: &str,
266+
new_styles: &[parser::Declaration],
267+
) -> Result<String, InlineError> {
266268
// Parse existing declarations in "style" attribute
267269
let mut input = cssparser::ParserInput::new(existing_style);
268270
let mut parser = cssparser::Parser::new(&mut input);
269271
let declarations =
270-
cssparser::DeclarationListParser::new(&mut parser, parse::CSSDeclarationListParser);
272+
cssparser::DeclarationListParser::new(&mut parser, parser::CSSDeclarationListParser);
271273
// Merge existing with the new ones
272274
// We know that at least one rule already exists, so we add 1
273275
let mut styles: HashMap<String, String> =

src/parse.rs renamed to src/parser.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ fn exhaust(input: &mut cssparser::Parser) -> String {
1010
input.slice_from(start).to_string()
1111
}
1212

13+
/// Parser for qualified rules - a prelude + a simple {} block.
14+
///
15+
/// Usually these rules are a selector + list of declarations: `p { color: blue; font-size: 2px }`
1316
impl<'i> cssparser::QualifiedRuleParser<'i> for CSSRuleListParser {
1417
type Prelude = String;
1518
type QualifiedRule = QualifiedRule;
@@ -19,6 +22,7 @@ impl<'i> cssparser::QualifiedRuleParser<'i> for CSSRuleListParser {
1922
&mut self,
2023
input: &mut cssparser::Parser<'i, 't>,
2124
) -> Result<Self::Prelude, cssparser::ParseError<'i, Self::Error>> {
25+
// Proceed with parsing until the end of the prelude.
2226
Ok(exhaust(input))
2327
}
2428

@@ -28,6 +32,7 @@ impl<'i> cssparser::QualifiedRuleParser<'i> for CSSRuleListParser {
2832
_: cssparser::SourceLocation,
2933
input: &mut cssparser::Parser<'i, 't>,
3034
) -> Result<Self::QualifiedRule, cssparser::ParseError<'i, Self::Error>> {
35+
// Parse list of declarations
3136
let parser = cssparser::DeclarationListParser::new(input, CSSDeclarationListParser);
3237
let mut declarations = vec![];
3338

@@ -41,6 +46,7 @@ impl<'i> cssparser::QualifiedRuleParser<'i> for CSSRuleListParser {
4146
}
4247
}
4348

49+
/// Parse a declaration within {} block: `color: blue`
4450
impl<'i> cssparser::DeclarationParser<'i> for CSSDeclarationListParser {
4551
type Declaration = Declaration;
4652
type Error = ();
@@ -61,6 +67,8 @@ impl cssparser::AtRuleParser<'_> for CSSRuleListParser {
6167
type Error = ();
6268
}
6369

70+
/// Parsing for at-rules, e.g: `@charset "utf-8";`
71+
/// Since they are can not be inlined we use the default implementation, that rejects all at-rules.
6472
impl cssparser::AtRuleParser<'_> for CSSDeclarationListParser {
6573
type PreludeNoBlock = String;
6674
type PreludeBlock = String;

0 commit comments

Comments
 (0)