Compare number lines for example blocks.
This commit is contained in:
parent
650cbc17db
commit
3d7f411cf9
@ -52,6 +52,7 @@ use crate::types::Keyword;
|
|||||||
use crate::types::LatexEnvironment;
|
use crate::types::LatexEnvironment;
|
||||||
use crate::types::LatexFragment;
|
use crate::types::LatexFragment;
|
||||||
use crate::types::LineBreak;
|
use crate::types::LineBreak;
|
||||||
|
use crate::types::LineNumber;
|
||||||
use crate::types::Minute;
|
use crate::types::Minute;
|
||||||
use crate::types::MinuteInner;
|
use crate::types::MinuteInner;
|
||||||
use crate::types::Month;
|
use crate::types::Month;
|
||||||
@ -83,6 +84,7 @@ use crate::types::StatisticsCookie;
|
|||||||
use crate::types::StrikeThrough;
|
use crate::types::StrikeThrough;
|
||||||
use crate::types::Subscript;
|
use crate::types::Subscript;
|
||||||
use crate::types::Superscript;
|
use crate::types::Superscript;
|
||||||
|
use crate::types::SwitchNumberLines;
|
||||||
use crate::types::Table;
|
use crate::types::Table;
|
||||||
use crate::types::TableCell;
|
use crate::types::TableCell;
|
||||||
use crate::types::TableRow;
|
use crate::types::TableRow;
|
||||||
@ -1545,7 +1547,7 @@ fn compare_example_block<'b, 's>(
|
|||||||
let mut this_status = DiffStatus::Good;
|
let mut this_status = DiffStatus::Good;
|
||||||
let mut message = None;
|
let mut message = None;
|
||||||
|
|
||||||
// TODO: Compare :number-lines :preserve-indent :retain-labels :use-labels :label-fmt
|
// TODO: Compare :preserve-indent :retain-labels :use-labels :label-fmt
|
||||||
|
|
||||||
// Compare value
|
// Compare value
|
||||||
let contents = get_property_quoted_string(emacs, ":value")?.unwrap_or(String::new());
|
let contents = get_property_quoted_string(emacs, ":value")?.unwrap_or(String::new());
|
||||||
@ -1567,6 +1569,46 @@ fn compare_example_block<'b, 's>(
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compare number-lines
|
||||||
|
let number_lines = get_property(emacs, ":number-lines")?;
|
||||||
|
match (number_lines, &rust.number_lines) {
|
||||||
|
(None, None) => {}
|
||||||
|
(Some(number_lines), Some(rust_number_lines)) => {
|
||||||
|
let token_list = number_lines.as_list()?;
|
||||||
|
let number_type = token_list
|
||||||
|
.get(0)
|
||||||
|
.map(Token::as_atom)
|
||||||
|
.map_or(Ok(None), |r| r.map(Some))?
|
||||||
|
.ok_or(":number-lines should have a type.")?;
|
||||||
|
let number_value = token_list
|
||||||
|
.get(2)
|
||||||
|
.map(Token::as_atom)
|
||||||
|
.map_or(Ok(None), |r| r.map(Some))?
|
||||||
|
.map(|val| val.parse::<LineNumber>())
|
||||||
|
.map_or(Ok(None), |r| r.map(Some))?
|
||||||
|
.ok_or(":number-lines should have a value.")?;
|
||||||
|
match (number_type, number_value, rust_number_lines) {
|
||||||
|
("new", emacs_val, SwitchNumberLines::New(rust_val)) if emacs_val == *rust_val => {}
|
||||||
|
("continued", emacs_val, SwitchNumberLines::Continued(rust_val))
|
||||||
|
if emacs_val == *rust_val => {}
|
||||||
|
_ => {
|
||||||
|
this_status = DiffStatus::Bad;
|
||||||
|
message = Some(format!(
|
||||||
|
"Number lines mismatch (emacs != rust) {:?} != {:?}",
|
||||||
|
number_lines, rust.number_lines
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
this_status = DiffStatus::Bad;
|
||||||
|
message = Some(format!(
|
||||||
|
"Number lines mismatch (emacs != rust) {:?} != {:?}",
|
||||||
|
number_lines, rust.number_lines
|
||||||
|
));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
Ok(DiffResult {
|
Ok(DiffResult {
|
||||||
status: this_status,
|
status: this_status,
|
||||||
name: rust.get_elisp_name(),
|
name: rust.get_elisp_name(),
|
||||||
|
@ -144,10 +144,7 @@ pub(crate) fn example_block<'b, 'g, 'r, 's>(
|
|||||||
let parser_context = context.with_additional_node(&contexts[0]);
|
let parser_context = context.with_additional_node(&contexts[0]);
|
||||||
let parser_context = parser_context.with_additional_node(&contexts[1]);
|
let parser_context = parser_context.with_additional_node(&contexts[1]);
|
||||||
let parser_context = parser_context.with_additional_node(&contexts[2]);
|
let parser_context = parser_context.with_additional_node(&contexts[2]);
|
||||||
let parameters = match parameters {
|
let parameters = parameters.map(|(_, parameters)| parameters);
|
||||||
Some((_ws, parameters)) => Some(parameters),
|
|
||||||
None => None,
|
|
||||||
};
|
|
||||||
|
|
||||||
let (remaining, contents) = parser_with_context!(text_until_exit)(&parser_context)(remaining)?;
|
let (remaining, contents) = parser_with_context!(text_until_exit)(&parser_context)(remaining)?;
|
||||||
let (remaining, _end) = lesser_block_end_specialized(&parser_context, remaining)?;
|
let (remaining, _end) = lesser_block_end_specialized(&parser_context, remaining)?;
|
||||||
@ -159,6 +156,7 @@ pub(crate) fn example_block<'b, 'g, 'r, 's>(
|
|||||||
source: source.into(),
|
source: source.into(),
|
||||||
name: source.into(),
|
name: source.into(),
|
||||||
switches: parameters.map(|parameters| Into::<&str>::into(parameters)),
|
switches: parameters.map(|parameters| Into::<&str>::into(parameters)),
|
||||||
|
number_lines: None, // TODO
|
||||||
contents: contents.into(),
|
contents: contents.into(),
|
||||||
},
|
},
|
||||||
))
|
))
|
||||||
|
@ -41,6 +41,7 @@ pub struct ExampleBlock<'s> {
|
|||||||
pub source: &'s str,
|
pub source: &'s str,
|
||||||
pub name: &'s str,
|
pub name: &'s str,
|
||||||
pub switches: Option<&'s str>,
|
pub switches: Option<&'s str>,
|
||||||
|
pub number_lines: Option<SwitchNumberLines>,
|
||||||
pub contents: &'s str,
|
pub contents: &'s str,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,6 +108,14 @@ pub struct LatexEnvironment<'s> {
|
|||||||
pub source: &'s str,
|
pub source: &'s str,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type LineNumber = usize;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum SwitchNumberLines {
|
||||||
|
New(LineNumber),
|
||||||
|
Continued(LineNumber),
|
||||||
|
}
|
||||||
|
|
||||||
impl<'s> Paragraph<'s> {
|
impl<'s> Paragraph<'s> {
|
||||||
pub(crate) fn of_text(input: &'s str) -> Self {
|
pub(crate) fn of_text(input: &'s str) -> Self {
|
||||||
let mut objects = Vec::with_capacity(1);
|
let mut objects = Vec::with_capacity(1);
|
||||||
|
@ -47,9 +47,11 @@ pub use lesser_element::FixedWidthArea;
|
|||||||
pub use lesser_element::HorizontalRule;
|
pub use lesser_element::HorizontalRule;
|
||||||
pub use lesser_element::Keyword;
|
pub use lesser_element::Keyword;
|
||||||
pub use lesser_element::LatexEnvironment;
|
pub use lesser_element::LatexEnvironment;
|
||||||
|
pub use lesser_element::LineNumber;
|
||||||
pub use lesser_element::Paragraph;
|
pub use lesser_element::Paragraph;
|
||||||
pub use lesser_element::Planning;
|
pub use lesser_element::Planning;
|
||||||
pub use lesser_element::SrcBlock;
|
pub use lesser_element::SrcBlock;
|
||||||
|
pub use lesser_element::SwitchNumberLines;
|
||||||
pub use lesser_element::TableCell;
|
pub use lesser_element::TableCell;
|
||||||
pub use lesser_element::VerseBlock;
|
pub use lesser_element::VerseBlock;
|
||||||
pub use object::AngleLink;
|
pub use object::AngleLink;
|
||||||
|
Loading…
Reference in New Issue
Block a user