blob: 47dd6a8b4f2fbb6a6faaf294fa574580d2ff9029 [file] [log] [blame] [edit]
//! 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(),
}
}