diff options
| author | Andreu Botella | 2019-10-23 09:29:24 +0200 | 
|---|---|---|
| committer | Philipp A | 2019-10-23 09:29:24 +0200 | 
| commit | 10cc972f2e4b99e6d3082970ee6982bfee5211c0 (patch) | |
| tree | 038f7199c2a27e89df55d7e15ddea1b1e8781341 /src/parser/conversion.rs | |
| parent | 7d38186a0ae3222b6de9bc91290a87d0e4564e18 (diff) | |
| download | rust-rst-10cc972f2e4b99e6d3082970ee6982bfee5211c0.tar.bz2 | |
Resolving substitutions. (#9)
Diffstat (limited to 'src/parser/conversion.rs')
| -rw-r--r-- | src/parser/conversion.rs | 17 | 
1 files changed, 17 insertions, 0 deletions
| diff --git a/src/parser/conversion.rs b/src/parser/conversion.rs index 5154f40..32461bf 100644 --- a/src/parser/conversion.rs +++ b/src/parser/conversion.rs @@ -72,6 +72,23 @@ pub fn convert_document(pairs: Pairs<Rule>) -> Result<e::Document, Error> {  	Ok(e::Document::with_children(toplevel))  } +/// Normalizes a name in terms of whitespace. Equivalent to docutils's +/// `docutils.nodes.whitespace_normalize_name`. +pub fn whitespace_normalize_name(name: &str) -> String { +	// Python's string.split() defines whitespace differently than Rust does. +	let split_iter = name.split( +		|ch: char| ch.is_whitespace() || (ch >= '\x1C' && ch <= '\x1F') +	).filter(|split| !split.is_empty()); +	let mut ret = String::new(); +	for split in split_iter { +		if !ret.is_empty() { +			ret.push(' '); +		} +		ret.push_str(split); +	} +	ret +} +  #[cfg(test)]  mod tests { | 
