You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

generate_sublime.rs 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. //! This program is mainly intended for generating the dumps that are compiled in to
  2. //! syntect, not as a helpful example for beginners.
  3. //! Although it is a valid example for serializing syntaxes, you probably won't need
  4. //! to do this yourself unless you want to cache your own compiled grammars.
  5. extern crate syntect;
  6. use syntect::parsing::SyntaxSet;
  7. use syntect::highlighting::ThemeSet;
  8. use syntect::dumps::*;
  9. use std::env;
  10. fn usage_and_exit() -> ! {
  11. println!("USAGE: cargo run --example generate_sublime synpack source-dir newlines.packdump nonewlines.packdump\n
  12. cargo run --example generate_sublime themepack source-dir themepack.themedump");
  13. ::std::process::exit(2);
  14. }
  15. // Not an example of Gutenberg but is used to generate the theme and syntax dump
  16. // used for syntax highlighting.
  17. // Check README for more details
  18. fn main() {
  19. let mut args = env::args().skip(1);
  20. match (args.next(), args.next(), args.next(), args.next()) {
  21. (Some(ref cmd), Some(ref package_dir), Some(ref packpath_newlines), Some(ref packpath_nonewlines)) if cmd == "synpack" => {
  22. let mut ps = SyntaxSet::new();
  23. ps.load_plain_text_syntax();
  24. ps.load_syntaxes(package_dir, true).unwrap();
  25. dump_to_file(&ps, packpath_newlines).unwrap();
  26. ps = SyntaxSet::new();
  27. ps.load_plain_text_syntax();
  28. ps.load_syntaxes(package_dir, false).unwrap();
  29. dump_to_file(&ps, packpath_nonewlines).unwrap();
  30. for s in ps.syntaxes() {
  31. if !s.file_extensions.is_empty() {
  32. println!("- {} -> {:?}", s.name, s.file_extensions);
  33. }
  34. }
  35. },
  36. (Some(ref cmd), Some(ref theme_dir), Some(ref packpath), None) if cmd == "themepack" => {
  37. let ts = ThemeSet::load_from_folder(theme_dir).unwrap();
  38. for path in ts.themes.keys() {
  39. println!("{:?}", path);
  40. }
  41. dump_to_file(&ts, packpath).unwrap();
  42. }
  43. _ => usage_and_exit(),
  44. }
  45. }