//! This program is mainly intended for generating the dumps that are compiled in to //! syntect, not as a helpful example for beginners. //! Although it is a valid example for serializing syntaxes, you probably won't need //! to do this yourself unless you want to cache your own compiled grammars. //! //! An example of how this script is used to generate the pack files included //! with syntect can be found under `make packs` in the Makefile. use syntect::parsing::SyntaxSetBuilder; use syntect::highlighting::ThemeSet; use syntect::dumps::*; use std::env; fn usage_and_exit() -> ! { println!("USAGE: gendata synpack source-dir \ newlines.packdump nonewlines.packdump \ [metadata.packdump] [metadata extra-source-dir]\n \ gendata themepack source-dir themepack.themedump"); ::std::process::exit(2); } fn main() { let mut a = env::args().skip(1); match (a.next(), a.next(), a.next(), a.next(), a.next(), a.next()) { (Some(ref cmd), Some(ref package_dir), Some(ref packpath_newlines), Some(ref packpath_nonewlines), ref _option_metapath, ref _option_metasource, ) if cmd == "synpack" => { let mut builder = SyntaxSetBuilder::new(); builder.add_plain_text_syntax(); builder.add_from_folder(package_dir, true).unwrap(); let ss = builder.build(); dump_to_uncompressed_file(&ss, packpath_newlines).unwrap(); let mut builder_nonewlines = SyntaxSetBuilder::new(); builder_nonewlines.add_plain_text_syntax(); builder_nonewlines.add_from_folder(package_dir, false).unwrap(); #[cfg(feature = "metadata")] { if let Some(metasource) = _option_metasource { builder_nonewlines.add_from_folder(metasource, false).unwrap(); } } let ss_nonewlines = builder_nonewlines.build(); dump_to_uncompressed_file(&ss_nonewlines, packpath_nonewlines).unwrap(); #[cfg(feature = "metadata")] { if let Some(metapath) = _option_metapath { dump_to_file(&ss_nonewlines.metadata(), metapath).unwrap(); } } } (Some(ref s), Some(ref theme_dir), Some(ref packpath), ..) if s == "themepack" => { let ts = ThemeSet::load_from_folder(theme_dir).unwrap(); dump_to_file(&ts, packpath).unwrap(); } _ => usage_and_exit(), } }