Exclude language from the switches property.

This commit is contained in:
Tom Alexander 2023-10-04 17:11:13 -04:00
parent b556f4617f
commit a548c7e170
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE

View File

@ -14,6 +14,7 @@ use nom::combinator::peek;
use nom::combinator::recognize; use nom::combinator::recognize;
use nom::combinator::verify; use nom::combinator::verify;
use nom::multi::many_till; use nom::multi::many_till;
use nom::multi::separated_list0;
use nom::multi::separated_list1; use nom::multi::separated_list1;
use nom::sequence::tuple; use nom::sequence::tuple;
@ -162,7 +163,11 @@ pub(crate) fn example_block<'b, 'g, 'r, 's>(
let (switches, number_lines, retain_labels, use_labels, label_format) = { let (switches, number_lines, retain_labels, use_labels, label_format) = {
if let Some(parameters) = parameters { if let Some(parameters) = parameters {
( (
Some(parameters.source), if parameters.source.len() == 0 {
None
} else {
Some(parameters.source)
},
parameters.number_lines, parameters.number_lines,
parameters.retain_labels, parameters.retain_labels,
parameters.use_labels, parameters.use_labels,
@ -260,7 +265,11 @@ pub(crate) fn src_block<'b, 'g, 'r, 's>(
let (switches, language, number_lines, retain_labels, use_labels, label_format) = { let (switches, language, number_lines, retain_labels, use_labels, label_format) = {
if let Some(parameters) = parameters { if let Some(parameters) = parameters {
( (
Some(parameters.source), if parameters.source.len() == 0 {
None
} else {
Some(parameters.source)
},
parameters.language, parameters.language,
parameters.number_lines, parameters.number_lines,
parameters.retain_labels, parameters.retain_labels,
@ -393,21 +402,23 @@ fn _example_src_switches<'s>(
let mut label_format = None; let mut label_format = None;
let mut saw_r = false; let mut saw_r = false;
let mut language = None; let mut language = None;
let (remaining, (source, (words, _))) =
consumed(tuple((separated_list1(space1, switch_word), space0)))(input)?;
let mut words_iter = words.into_iter(); let remaining = if grab_language {
if grab_language { let (remain, first_word) = opt(map(tuple((switch_word, space0)), |(word, _)| word))(input)?;
match words_iter.next() { language = first_word.map(Into::<&str>::into);
Some(l) => { remain
language = Some(Into::<&str>::into(l)); } else {
} input
None => {} };
}
} let (remaining, (source, (words, _))) = if language.is_none() {
consumed(tuple((separated_list1(space1, switch_word), space0)))(remaining)?
} else {
consumed(tuple((separated_list0(space1, switch_word), space0)))(remaining)?
};
let mut state = SwitchState::Normal; let mut state = SwitchState::Normal;
for word in words_iter { for word in words {
let normalized_word = Into::<&str>::into(word); let normalized_word = Into::<&str>::into(word);
loop { loop {
match (&state, normalized_word) { match (&state, normalized_word) {