macro_rules! lang_spec {
($name:expr, ext: [$($ext:expr),*], files: [$($f:expr),*], $($rest:tt)*) => {
lang_spec!(@build $name, &[$($ext),*], &[$($f),*], $($rest)*)
};
($name:expr, ext: [$($ext:expr),*], $($rest:tt)*) => {
lang_spec!(@build $name, &[$($ext),*], &[], $($rest)*)
};
(@build $name:expr, $ext:expr, $files:expr,
line: $lc:expr, block: $bo:expr, $bc:expr
$(, nested: $nested:expr)?
$(, sq: $sq:expr)?
$(, tq: $tq:expr)?
, pragma: $po:expr, $pc:expr
$(, shebangs: [$($sh:expr),*])?
) => {
LanguageSpec {
name: $name,
extensions: $ext,
filenames: $files,
line_comments: &[$lc],
line_comment_not_before: "",
block_comment: Some(($bo, $bc)),
nested_block_comments: false $(|| $nested)?,
single_quote_strings: false $(|| $sq)?,
triple_quote_strings: false $(|| $tq)?,
pragma: Some(($po, $pc)),
shebangs: &[$($($sh),*)?],
}
};
(@build $name:expr, $ext:expr, $files:expr,
line: $lc:expr, block: $bo:expr, $bc:expr
$(, nested: $nested:expr)?
$(, sq: $sq:expr)?
$(, tq: $tq:expr)?
$(, shebangs: [$($sh:expr),*])?
) => {
LanguageSpec {
name: $name,
extensions: $ext,
filenames: $files,
line_comments: &[$lc],
line_comment_not_before: "",
block_comment: Some(($bo, $bc)),
nested_block_comments: false $(|| $nested)?,
single_quote_strings: false $(|| $sq)?,
triple_quote_strings: false $(|| $tq)?,
pragma: None,
shebangs: &[$($($sh),*)?],
}
};
(@build $name:expr, $ext:expr, $files:expr,
line: $lc:expr
$(, nested: $nested:expr)?
$(, sq: $sq:expr)?
$(, tq: $tq:expr)?
$(, shebangs: [$($sh:expr),*])?
) => {
LanguageSpec {
name: $name,
extensions: $ext,
filenames: $files,
line_comments: &[$lc],
line_comment_not_before: "",
block_comment: None,
nested_block_comments: false $(|| $nested)?,
single_quote_strings: false $(|| $sq)?,
triple_quote_strings: false $(|| $tq)?,
pragma: None,
shebangs: &[$($($sh),*)?],
}
};
(@build $name:expr, $ext:expr, $files:expr,
block: $bo:expr, $bc:expr
$(, nested: $nested:expr)?
$(, sq: $sq:expr)?
$(, tq: $tq:expr)?
, pragma: $po:expr, $pc:expr
$(, shebangs: [$($sh:expr),*])?
) => {
LanguageSpec {
name: $name,
extensions: $ext,
filenames: $files,
line_comments: &[],
line_comment_not_before: "",
block_comment: Some(($bo, $bc)),
nested_block_comments: false $(|| $nested)?,
single_quote_strings: false $(|| $sq)?,
triple_quote_strings: false $(|| $tq)?,
pragma: Some(($po, $pc)),
shebangs: &[$($($sh),*)?],
}
};
(@build $name:expr, $ext:expr, $files:expr,
block: $bo:expr, $bc:expr
$(, nested: $nested:expr)?
$(, sq: $sq:expr)?
$(, tq: $tq:expr)?
$(, shebangs: [$($sh:expr),*])?
) => {
LanguageSpec {
name: $name,
extensions: $ext,
filenames: $files,
line_comments: &[],
line_comment_not_before: "",
block_comment: Some(($bo, $bc)),
nested_block_comments: false $(|| $nested)?,
single_quote_strings: false $(|| $sq)?,
triple_quote_strings: false $(|| $tq)?,
pragma: None,
shebangs: &[$($($sh),*)?],
}
};
(@build $name:expr, $ext:expr, $files:expr,
lines: [$($lc:expr),+]
$(, shebangs: [$($sh:expr),*])?
) => {
LanguageSpec {
name: $name,
extensions: $ext,
filenames: $files,
line_comments: &[$($lc),+],
line_comment_not_before: "",
block_comment: None,
nested_block_comments: false,
single_quote_strings: false,
triple_quote_strings: false,
pragma: None,
shebangs: &[$($($sh),*)?],
}
};
(@build $name:expr, $ext:expr, $files:expr,
none
$(, sq: $sq:expr)?
$(, shebangs: [$($sh:expr),*])?
) => {
LanguageSpec {
name: $name,
extensions: $ext,
filenames: $files,
line_comments: &[],
line_comment_not_before: "",
block_comment: None,
nested_block_comments: false,
single_quote_strings: false $(|| $sq)?,
triple_quote_strings: false,
pragma: None,
shebangs: &[$($($sh),*)?],
}
};
}
pub(super) use lang_spec;