diff --git a/.gitmodules b/.gitmodules index fa3f560b..790d7c37 100644 --- a/.gitmodules +++ b/.gitmodules @@ -34,3 +34,6 @@ [submodule "sublime_syntaxes/Sublime-CMakeLists"] path = sublime_syntaxes/Sublime-CMakeLists url = https://github.com/zyxar/Sublime-CMakeLists +[submodule "sublime_syntaxes/Swift-for-f-ing-sublime"] + path = sublime_syntaxes/Swift-for-f-ing-sublime + url = git@github.com:colinta/Swift-for-f-ing-sublime.git diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e21036d..554c1347 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.4.2 (unreleased) + +- Add assets to section indexes +- Allow users to add custom highlighting syntaxes +- Add Swift, MiniZinc syntaxes and update others + ## 0.4.1 (2018-08-06) - Fix live reload of a section content change getting no pages data diff --git a/README.md b/README.md index 288b6e0a..f612f714 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ $ git submodule update --remote --merge And finally from the root of the components/highlighting crate run the following command: ```bash -$ cargo run --example generate_sublime synpack ../../sublime_syntaxes ../../sublime_syntaxes/newlines.packdump ../../sublime_syntaxes/nonewlines.packdump +$ cargo run --example generate_sublime synpack ../../sublime_syntaxes ../../sublime_syntaxes/newlines.packdump ``` #### Adding a theme diff --git a/components/content/src/page.rs b/components/content/src/page.rs index dc67ed53..3a0bf066 100644 --- a/components/content/src/page.rs +++ b/components/content/src/page.rs @@ -166,7 +166,14 @@ impl Page { /// We need access to all pages url to render links relative to content /// so that can't happen at the same time as parsing - pub fn render_markdown(&mut self, permalinks: &HashMap, tera: &Tera, config: &Config, base_path: &Path, anchor_insert: InsertAnchor) -> Result<()> { + pub fn render_markdown( + &mut self, + permalinks: &HashMap, + tera: &Tera, + config: &Config, + base_path: &Path, + anchor_insert: InsertAnchor, + ) -> Result<()> { let mut context = RenderContext::new( tera, config, @@ -311,7 +318,13 @@ Hello world"#; let res = Page::parse(Path::new("post.md"), content, &Config::default()); assert!(res.is_ok()); let mut page = res.unwrap(); - page.render_markdown(&HashMap::default(), &Tera::default(), &Config::default(), InsertAnchor::None).unwrap(); + page.render_markdown( + &HashMap::default(), + &Tera::default(), + &Config::default(), + Path::new("something"), + InsertAnchor::None, + ).unwrap(); assert_eq!(page.meta.title.unwrap(), "Hello".to_string()); assert_eq!(page.meta.slug.unwrap(), "hello-world".to_string()); @@ -417,7 +430,13 @@ Hello world let res = Page::parse(Path::new("hello.md"), &content, &config); assert!(res.is_ok()); let mut page = res.unwrap(); - page.render_markdown(&HashMap::default(), &Tera::default(), &config, InsertAnchor::None).unwrap(); + page.render_markdown( + &HashMap::default(), + &Tera::default(), + &config, + Path::new("something"), + InsertAnchor::None, + ).unwrap(); assert_eq!(page.summary, Some("

Hello world

\n".to_string())); } diff --git a/components/highlighting/examples/generate_sublime.rs b/components/highlighting/examples/generate_sublime.rs index 5fdabe1f..8bf9c319 100644 --- a/components/highlighting/examples/generate_sublime.rs +++ b/components/highlighting/examples/generate_sublime.rs @@ -19,25 +19,20 @@ fn usage_and_exit() -> ! { // Check README for more details fn main() { let mut args = env::args().skip(1); - match (args.next(), args.next(), args.next(), args.next()) { - (Some(ref cmd), Some(ref package_dir), Some(ref packpath_newlines), Some(ref packpath_nonewlines)) if cmd == "synpack" => { + match (args.next(), args.next(), args.next()) { + (Some(ref cmd), Some(ref package_dir), Some(ref packpath_newlines)) if cmd == "synpack" => { let mut ps = SyntaxSet::new(); ps.load_plain_text_syntax(); ps.load_syntaxes(package_dir, true).unwrap(); dump_to_file(&ps, packpath_newlines).unwrap(); - ps = SyntaxSet::new(); - ps.load_plain_text_syntax(); - ps.load_syntaxes(package_dir, false).unwrap(); - dump_to_file(&ps, packpath_nonewlines).unwrap(); - for s in ps.syntaxes() { if !s.file_extensions.is_empty() { println!("- {} -> {:?}", s.name, s.file_extensions); } } }, - (Some(ref cmd), Some(ref theme_dir), Some(ref packpath), None) if cmd == "themepack" => { + (Some(ref cmd), Some(ref theme_dir), Some(ref packpath)) if cmd == "themepack" => { let ts = ThemeSet::load_from_folder(theme_dir).unwrap(); for path in ts.themes.keys() { println!("{:?}", path); diff --git a/components/highlighting/src/lib.rs b/components/highlighting/src/lib.rs index 94b61712..34f0c1cc 100644 --- a/components/highlighting/src/lib.rs +++ b/components/highlighting/src/lib.rs @@ -14,8 +14,7 @@ use syntect::easy::HighlightLines; thread_local! { /// A pair of the set and whether extras have been added to it. pub static SYNTAX_SET: RefCell<(SyntaxSet, bool)> = { - let mut ss: SyntaxSet = from_binary(include_bytes!("../../../sublime_syntaxes/newlines.packdump")); - ss.link_syntaxes(); + let ss: SyntaxSet = from_binary(include_bytes!("../../../sublime_syntaxes/newlines.packdump")); RefCell::new((ss, false)) }; } diff --git a/components/rendering/src/shortcode.rs b/components/rendering/src/shortcode.rs index 94ec3827..349dba8d 100644 --- a/components/rendering/src/shortcode.rs +++ b/components/rendering/src/shortcode.rs @@ -180,6 +180,8 @@ pub fn render_shortcodes(content: &str, context: &RenderContext) -> Result String { let config = Config::default(); let permalinks = HashMap::new(); - let context = RenderContext::new(&tera, &config, "", &permalinks, InsertAnchor::None); + let context = RenderContext::new(&tera, &config, "", &permalinks, Path::new("something"), InsertAnchor::None); super::render_shortcodes(code, &context).unwrap() } diff --git a/components/rendering/tests/markdown.rs b/components/rendering/tests/markdown.rs index e4d50c1a..93e6f646 100644 --- a/components/rendering/tests/markdown.rs +++ b/components/rendering/tests/markdown.rs @@ -5,6 +5,7 @@ extern crate rendering; extern crate config; use std::collections::HashMap; +use std::path::Path; use tera::Tera; @@ -19,7 +20,7 @@ fn can_do_render_content_simple() { let tera_ctx = Tera::default(); let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("hello", &context).unwrap(); assert_eq!(res.0, "

hello

\n"); } @@ -30,7 +31,7 @@ fn doesnt_highlight_code_block_with_highlighting_off() { let permalinks_ctx = HashMap::new(); let mut config = Config::default(); config.highlight_code = false; - let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("```\n$ gutenberg server\n```", &context).unwrap(); assert_eq!( res.0, @@ -43,7 +44,7 @@ fn can_highlight_code_block_no_lang() { let tera_ctx = Tera::default(); let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("```\n$ gutenberg server\n$ ping\n```", &context).unwrap(); assert_eq!( res.0, @@ -56,7 +57,7 @@ fn can_highlight_code_block_with_lang() { let tera_ctx = Tera::default(); let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("```python\nlist.append(1)\n```", &context).unwrap(); assert_eq!( res.0, @@ -69,7 +70,7 @@ fn can_higlight_code_block_with_unknown_lang() { let tera_ctx = Tera::default(); let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("```yolo\nlist.append(1)\n```", &context).unwrap(); // defaults to plain text assert_eq!( @@ -82,7 +83,7 @@ fn can_higlight_code_block_with_unknown_lang() { fn can_render_shortcode() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content(r#" Hello @@ -96,7 +97,7 @@ Hello fn can_render_shortcode_with_markdown_char_in_args_name() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let input = vec![ "name", "na_me", @@ -113,7 +114,7 @@ fn can_render_shortcode_with_markdown_char_in_args_name() { fn can_render_shortcode_with_markdown_char_in_args_value() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let input = vec![ "ub36ffWAqgQ-hey", "ub36ffWAqgQ_hey", @@ -140,7 +141,7 @@ fn can_render_body_shortcode_with_markdown_char_in_name() { for i in input { tera.add_raw_template(&format!("shortcodes/{}.html", i), "
{{ body }} - {{ author}}
").unwrap(); - let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content(&format!("{{% {}(author=\"Bob\") %}}\nhey\n{{% end %}}", i), &context).unwrap(); println!("{:?}", res); @@ -169,7 +170,7 @@ Here is another paragraph. tera.add_raw_template(&format!("shortcodes/{}.html", "figure"), shortcode).unwrap(); let config = Config::default(); - let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content(markdown_string, &context).unwrap(); println!("{:?}", res); @@ -202,7 +203,7 @@ Here is another paragraph. tera.add_raw_template(&format!("shortcodes/{}.html", "figure"), shortcode).unwrap(); let config = Config::default(); - let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content(markdown_string, &context).unwrap(); println!("{:?}", res); @@ -213,7 +214,7 @@ Here is another paragraph. fn can_render_several_shortcode_in_row() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content(r#" Hello @@ -240,7 +241,7 @@ fn doesnt_render_ignored_shortcodes() { let permalinks_ctx = HashMap::new(); let mut config = Config::default(); config.highlight_code = false; - let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content(r#"```{{/* youtube(id="w7Ft2ymGmfc") */}}```"#, &context).unwrap(); assert_eq!(res.0, "

{{ youtube(id="w7Ft2ymGmfc") }}

\n"); } @@ -252,7 +253,7 @@ fn can_render_shortcode_with_body() { tera.add_raw_template("shortcodes/quote.html", "
{{ body }} - {{ author }}
").unwrap(); let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content(r#" Hello @@ -268,7 +269,7 @@ fn errors_rendering_unknown_shortcode() { let tera_ctx = Tera::default(); let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("{{ hello(flash=true) }}", &context); assert!(res.is_err()); } @@ -279,10 +280,10 @@ fn can_make_valid_relative_link() { permalinks.insert("pages/about.md".to_string(), "https://vincent.is/about".to_string()); let tera_ctx = Tera::default(); let config = Config::default(); - let context = RenderContext::new(&tera_ctx, &config, "", &permalinks, InsertAnchor::None); + let context = RenderContext::new(&tera_ctx, &config, "", &permalinks, Path::new("something"), InsertAnchor::None); let res = render_content( r#"[rel link](./pages/about.md), [abs link](https://vincent.is/about)"#, - &context + &context, ).unwrap(); assert!( @@ -296,7 +297,7 @@ fn can_make_relative_links_with_anchors() { permalinks.insert("pages/about.md".to_string(), "https://vincent.is/about".to_string()); let tera_ctx = Tera::default(); let config = Config::default(); - let context = RenderContext::new(&tera_ctx, &config, "", &permalinks, InsertAnchor::None); + let context = RenderContext::new(&tera_ctx, &config, "", &permalinks, Path::new("something"), InsertAnchor::None); let res = render_content(r#"[rel link](./pages/about.md#cv)"#, &context).unwrap(); assert!( @@ -309,7 +310,7 @@ fn errors_relative_link_inexistant() { let tera_ctx = Tera::default(); let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("[rel link](./pages/about.md)", &context); assert!(res.is_err()); } @@ -319,7 +320,7 @@ fn can_add_id_to_headers() { let tera_ctx = Tera::default(); let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content(r#"# Hello"#, &context).unwrap(); assert_eq!(res.0, "

Hello

\n"); } @@ -329,7 +330,7 @@ fn can_add_id_to_headers_same_slug() { let tera_ctx = Tera::default(); let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("# Hello\n# Hello", &context).unwrap(); assert_eq!(res.0, "

Hello

\n

Hello

\n"); } @@ -338,7 +339,7 @@ fn can_add_id_to_headers_same_slug() { fn can_insert_anchor_left() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, InsertAnchor::Left); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::Left); let res = render_content("# Hello", &context).unwrap(); assert_eq!( res.0, @@ -350,7 +351,7 @@ fn can_insert_anchor_left() { fn can_insert_anchor_right() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, InsertAnchor::Right); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::Right); let res = render_content("# Hello", &context).unwrap(); assert_eq!( res.0, @@ -363,7 +364,7 @@ fn can_insert_anchor_right() { fn can_insert_anchor_with_exclamation_mark() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, InsertAnchor::Left); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::Left); let res = render_content("# Hello!", &context).unwrap(); assert_eq!( res.0, @@ -376,7 +377,7 @@ fn can_insert_anchor_with_exclamation_mark() { fn can_insert_anchor_with_link() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, InsertAnchor::Left); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::Left); let res = render_content("## [Rust](https://rust-lang.org)", &context).unwrap(); assert_eq!( res.0, @@ -388,7 +389,7 @@ fn can_insert_anchor_with_link() { fn can_insert_anchor_with_other_special_chars() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, InsertAnchor::Left); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::Left); let res = render_content("# Hello*_()", &context).unwrap(); assert_eq!( res.0, @@ -405,7 +406,8 @@ fn can_make_toc() { &config, "https://mysite.com/something", &permalinks_ctx, - InsertAnchor::Left + Path::new("something"), + InsertAnchor::Left, ); let res = render_content(r#" @@ -422,14 +424,13 @@ fn can_make_toc() { assert_eq!(toc.len(), 1); assert_eq!(toc[0].children.len(), 2); assert_eq!(toc[0].children[1].children.len(), 1); - } #[test] fn can_understand_backtick_in_titles() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("# `Hello`", &context).unwrap(); assert_eq!( res.0, @@ -441,7 +442,7 @@ fn can_understand_backtick_in_titles() { fn can_understand_backtick_in_paragraphs() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("Hello `world`", &context).unwrap(); assert_eq!( res.0, @@ -454,7 +455,7 @@ fn can_understand_backtick_in_paragraphs() { fn can_understand_links_in_header() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("# [Rust](https://rust-lang.org)", &context).unwrap(); assert_eq!( res.0, @@ -466,7 +467,7 @@ fn can_understand_links_in_header() { fn can_understand_link_with_title_in_header() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("# [Rust](https://rust-lang.org \"Rust homepage\")", &context).unwrap(); assert_eq!( res.0, @@ -480,10 +481,10 @@ fn can_make_valid_relative_link_in_header() { permalinks.insert("pages/about.md".to_string(), "https://vincent.is/about/".to_string()); let tera_ctx = Tera::default(); let config = Config::default(); - let context = RenderContext::new(&tera_ctx, &config, "", &permalinks, InsertAnchor::None); + let context = RenderContext::new(&tera_ctx, &config, "", &permalinks, Path::new("something"), InsertAnchor::None); let res = render_content( r#" # [rel link](./pages/about.md)"#, - &context + &context, ).unwrap(); assert_eq!( @@ -496,7 +497,7 @@ fn can_make_valid_relative_link_in_header() { fn can_make_permalinks_with_colocated_assets_for_link() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "https://vincent.is/about/", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "https://vincent.is/about/", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("[an image](image.jpg)", &context).unwrap(); assert_eq!( res.0, @@ -508,7 +509,7 @@ fn can_make_permalinks_with_colocated_assets_for_link() { fn can_make_permalinks_with_colocated_assets_for_image() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "https://vincent.is/about/", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "https://vincent.is/about/", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("![alt text](image.jpg)", &context).unwrap(); assert_eq!( res.0, @@ -520,7 +521,7 @@ fn can_make_permalinks_with_colocated_assets_for_image() { fn markdown_doesnt_wrap_html_in_paragraph() { let permalinks_ctx = HashMap::new(); let config = Config::default(); - let context = RenderContext::new(&GUTENBERG_TERA, &config, "https://vincent.is/about/", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "https://vincent.is/about/", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content(r#" Some text @@ -543,7 +544,7 @@ fn can_validate_valid_external_links() { let permalinks_ctx = HashMap::new(); let mut config = Config::default(); config.check_external_links = true; - let context = RenderContext::new(&GUTENBERG_TERA, &config, "https://vincent.is/about/", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "https://vincent.is/about/", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("[a link](http://google.com)", &context).unwrap(); assert_eq!( res.0, @@ -556,7 +557,7 @@ fn can_show_error_message_for_invalid_external_links() { let permalinks_ctx = HashMap::new(); let mut config = Config::default(); config.check_external_links = true; - let context = RenderContext::new(&GUTENBERG_TERA, &config, "https://vincent.is/about/", &permalinks_ctx, InsertAnchor::None); + let context = RenderContext::new(&GUTENBERG_TERA, &config, "https://vincent.is/about/", &permalinks_ctx, Path::new("something"), InsertAnchor::None); let res = render_content("[a link](http://google.comy)", &context); assert!(res.is_err()); let err = res.unwrap_err(); diff --git a/docs/content/documentation/content/syntax-highlighting.md b/docs/content/documentation/content/syntax-highlighting.md index aeee88ac..3e875ecd 100644 --- a/docs/content/documentation/content/syntax-highlighting.md +++ b/docs/content/documentation/content/syntax-highlighting.md @@ -3,7 +3,7 @@ title = "Syntax Highlighting" weight = 80 +++ -Gutenberg comes with built-in syntax highlighting but you first +Gutenberg comes with built-in syntax highlighting but you first need to enable it in the [configuration](./documentation/getting-started/configuration.md). Once this is done, Gutenberg will automatically highlight all code blocks @@ -17,7 +17,7 @@ let highlight = true; ```` -You can replace the `rust` by the language you want to highlight or not put anything to get it +You can replace the `rust` by the language you want to highlight or not put anything to get it interpreted as plain text. Here is a full list of the supported languages and the short names you can use: @@ -27,12 +27,12 @@ Here is a full list of the supported languages and the short names you can use: - Assembly x86 (NASM) -> ["asm", "inc", "nasm"] - Crystal -> ["cr"] - Elixir -> ["ex", "exs"] -- Elm -> ["elm"] - Handlebars -> ["handlebars", "handlebars.html", "hbr", "hbrs", "hbs", "hdbs", "hjs", "mu", "mustache", "rac", "stache", "template", "tmpl"] - Jinja2 -> ["j2", "jinja2"] - Julia -> ["jl"] - Kotlin -> ["kt", "kts"] - Less -> ["less", "css.less"] +- MiniZinc (MZN) -> ["mzn", "dzn"] - Nim -> ["nim", "nims"] - ASP -> ["asa"] - HTML (ASP) -> ["asp"] @@ -49,10 +49,17 @@ Here is a full list of the supported languages and the short names you can use: - Diff -> ["diff", "patch"] - Erlang -> ["erl", "hrl", "Emakefile", "emakefile"] - HTML (Erlang) -> ["yaws"] +- Git Attributes -> ["attributes", "gitattributes", ".gitattributes"] +- Git Commit -> ["COMMIT_EDITMSG", "MERGE_MSG", "TAG_EDITMSG"] +- Git Config -> ["gitconfig", ".gitconfig", ".gitmodules"] +- Git Ignore -> ["exclude", "gitignore", ".gitignore"] +- Git Link -> [".git"] +- Git Log -> ["gitlog"] +- Git Rebase Todo -> ["git-rebase-todo"] - Go -> ["go"] - Graphviz (DOT) -> ["dot", "DOT", "gv"] -- Groovy -> ["groovy", "gvy", "gradle"] -- HTML -> ["html", "htm", "shtml", "xhtml", "inc", "tmpl", "tpl"] +- Groovy -> ["groovy", "gvy", "gradle", "Jenkinsfile"] +- HTML -> ["html", "htm", "shtml", "xhtml"] - Haskell -> ["hs"] - Literate Haskell -> ["lhs"] - Java Server Page (JSP) -> ["jsp"] @@ -65,7 +72,7 @@ Here is a full list of the supported languages and the short names you can use: - TeX -> ["sty", "cls"] - Lisp -> ["lisp", "cl", "clisp", "l", "mud", "el", "scm", "ss", "lsp", "fasl"] - Lua -> ["lua"] -- Makefile -> ["make", "GNUmakefile", "makefile", "Makefile", "OCamlMakefile", "mak", "mk"] +- Makefile -> ["make", "GNUmakefile", "makefile", "Makefile", "makefile.am", "Makefile.am", "makefile.in", "Makefile.in", "OCamlMakefile", "mak", "mk"] - Markdown -> ["md", "mdown", "markdown", "markdn"] - MATLAB -> ["matlab"] - OCaml -> ["ml", "mli"] @@ -90,19 +97,25 @@ Here is a full list of the supported languages and the short names you can use: - Rust -> ["rs"] - SQL -> ["sql", "ddl", "dml"] - Scala -> ["scala", "sbt"] -- Bourne Again Shell (bash) -> ["sh", "bash", "zsh", "fish", ".bash_aliases", ".bash_completions", ".bash_functions", ".bash_login", ".bash_logout", ".bash_profile", ".bash_variables", ".bashrc", ".profile", ".textmate_init"] +- Bourne Again Shell (bash) -> ["sh", "bash", "zsh", "fish", ".bash_aliases", ".bash_completions", ".bash_functions", ".bash_login", ".bash_logout", ".bash_profile", ".bash_variables", ".bashrc", ".profile", ".textmate_init", ".zshrc"] - HTML (Tcl) -> ["adp"] - Tcl -> ["tcl"] - Textile -> ["textile"] - XML -> ["xml", "xsd", "xslt", "tld", "dtml", "rss", "opml", "svg"] - YAML -> ["yaml", "yml", "sublime-syntax"] - SWI-Prolog -> ["pro"] +- CMake C Header -> ["h.in"] +- CMake C++ Header -> ["hh.in", "hpp.in", "hxx.in", "h++.in"] +- CMake -> ["CMakeLists.txt", "cmake"] +- CMakeCache -> ["CMakeCache.txt"] - Generic Config -> ["cfg", "conf", "config", "ini", "pro", "mak", "mk", "Doxyfile", "inputrc", ".inputrc", "dircolors", ".dircolors", "gitmodules", ".gitmodules", "gitignore", ".gitignore", "gitattributes", ".gitattributes"] +- Elm -> ["elm"] - Linker Script -> ["ld"] - TOML -> ["toml", "tml"] - TypeScript -> ["ts"] - TypeScriptReact -> ["tsx"] - VimL -> ["vim"] +- TOML -> ["toml", "tml", "Cargo.lock", "Gopkg.lock"] ``` If you want to highlight a language not on that list, please open an issue or a pull request on the [Gutenberg repo](https://github.com/Keats/gutenberg). diff --git a/sublime_syntaxes/LESS-sublime b/sublime_syntaxes/LESS-sublime index 6f0da0ac..d3ddfe7b 160000 --- a/sublime_syntaxes/LESS-sublime +++ b/sublime_syntaxes/LESS-sublime @@ -1 +1 @@ -Subproject commit 6f0da0ace6d881648dbfb2c3c1a3799ff7d5c54a +Subproject commit d3ddfe7b51e01140db209f57af3bc47d04d9ac0a diff --git a/sublime_syntaxes/MZN.sublime-syntax b/sublime_syntaxes/MZN.sublime-syntax new file mode 100644 index 00000000..f5a19841 --- /dev/null +++ b/sublime_syntaxes/MZN.sublime-syntax @@ -0,0 +1,65 @@ +%YAML 1.2 +--- +# http://www.sublimetext.com/docs/3/syntax.html +name: MiniZinc (MZN) +file_extensions: + - mzn + - dzn +scope: source.mzn +contexts: + main: + - match: \%.* + scope: comment.line.percentage.mzn + - match: /\* + push: + - meta_scope: comment.block.mzn + - match: \*/ + pop: true + - match: \'.*?\' + scope: string.quoted.single.mzn + - match: \".*?\" + scope: string.quoted.double.mzn + - match: \b(ann|annotation|any|constraint|function|in|include|list|of|op|output|minimize|maximize|par|predicate|record|satisfy|solve|test|type|var)\b + scope: keyword.control.mzn + - match: \b(array|set|bool|enum|float|int|string|tuple)\b + scope: storage.type.mzn + - match: \b(for|forall|if|then|else|endif|where)\b + scope: keyword.control.mzn + - match: \b(abort|abs|acosh|array_intersect|array_union|array1d|array2d|array3d|array4d|array5d|array6d|asin|assert|atan|bool2int|card|ceil|concat|cos|cosh|dom|dom_array|dom_size|fix|exp|floor|index_set|index_set_1of2|index_set_2of2|index_set_1of3|index_set_2of3|index_set_3of3|int2float|is_fixed|join|lb|lb_array|length|ln|log|log2|log10|min|max|pow|product|round|set2array|show|show_int|show_float|sin|sinh|sqrt|sum|tan|tanh|trace|ub|ub_array)\b + scope: entity.name.function.mzn + - match: \b(circuit|disjoint|maximum|maximum_arg|member|minimum|minimum_arg|network_flow|network_flow_cost|partition_set|range|roots|sliding_sum|subcircuit|sum_pred)\b + scope: support.function.mzn + - match: \b(alldifferent|all_different|all_disjoint|all_equal|alldifferent_except_0|nvalue|symmetric_all_different)\b + scope: support.function.mzn + - match: \b(lex2|lex_greater|lex_greatereq|lex_less|lex_lesseq|strict_lex2|value_precede|value_precede_chain)\b + scope: support.function.mzn + - match: \b(arg_sort|decreasing|increasing|sort)\b + scope: support.function.mzn + - match: \b(int_set_channel|inverse|inverse_set|link_set_to_booleans)\b + scope: support.function.mzn + - match: \b(among|at_least|at_most|at_most1|count|count_eq|count_geq|count_gt|count_leq|count_lt|count_neq|distribute|exactly|global_cardinality|global_cardinality_closed|global_cardinality_low_up|global_cardinality_low_up_closed)\b + scope: support.function.mzn + - match: \b(bin_packing|bin_packing_capa|bin_packing_load|diffn|diffn_k|diffn_nonstrict|diffn_nonstrict_k|geost|geost_bb|geost_smallest_bb|knapsack)\b + scope: support.function.mzn + - match: \b(alternative|cumulative|disjunctive|disjunctive_strict|span)\b + scope: support.function.mzn + - match: \b(regular|regular_nfa|table)\b + scope: support.function.mzn + - match: \b(not|\+|-)\b + scope: keyword.operator.math.mzn + - match: \b(<->|->|<-|\\/|xor|/\\)\b + scope: keyword.operator.logical.mzn + - match: \b(<|>|<=|>=|==|=|!=)\b + scope: keyword.operator.math.mzn + - match: \b(\+|-|\*|/|div|mod)\b + scope: keyword.operator.math.mzn + - match: \b(in|subset|superset|union|diff|symdiff|intersect)\b + scope: keyword.operator.sets.mzn + - match: \|\.\.|\+\+ + scope: keyword.operator.math.mzn + - match: \b(true|false)\b + scope: constant.language.mzn + - match: '\b([_A-Za-z])(\w*)\b' + scope: variable.other.mzn + - match: '([+-]?)\d+(\.[^\.]\d*)?([eE][-+]?\d+)?' + scope: constant.numeric.mzn diff --git a/sublime_syntaxes/Packages b/sublime_syntaxes/Packages index 1cb4c3ec..289782ff 160000 --- a/sublime_syntaxes/Packages +++ b/sublime_syntaxes/Packages @@ -1 +1 @@ -Subproject commit 1cb4c3ec368c751d6f7ecfa16fe02ceff23a1f6b +Subproject commit 289782ff2e4cb58de171579c7fc86fe00d280619 diff --git a/sublime_syntaxes/Sublime-CMakeLists b/sublime_syntaxes/Sublime-CMakeLists index ff9a800a..aba96a08 160000 --- a/sublime_syntaxes/Sublime-CMakeLists +++ b/sublime_syntaxes/Sublime-CMakeLists @@ -1 +1 @@ -Subproject commit ff9a800a4ca942edd095de553ca05fba03b02275 +Subproject commit aba96a0862369e9f960bb63a38e2d7563ea6475e diff --git a/sublime_syntaxes/TypeScript-TmLanguage b/sublime_syntaxes/TypeScript-TmLanguage index a9055b11..3c90f249 160000 --- a/sublime_syntaxes/TypeScript-TmLanguage +++ b/sublime_syntaxes/TypeScript-TmLanguage @@ -1 +1 @@ -Subproject commit a9055b118c991601c3a0876730c8918beb422c84 +Subproject commit 3c90f249ee6e4daa1d25a2dd9cda53071e42a076 diff --git a/sublime_syntaxes/newlines.packdump b/sublime_syntaxes/newlines.packdump index de6d0d35..02c5b977 100644 Binary files a/sublime_syntaxes/newlines.packdump and b/sublime_syntaxes/newlines.packdump differ diff --git a/sublime_syntaxes/nonewlines.packdump b/sublime_syntaxes/nonewlines.packdump deleted file mode 100644 index 913cdb6b..00000000 Binary files a/sublime_syntaxes/nonewlines.packdump and /dev/null differ diff --git a/sublime_syntaxes/sublime_toml_highlighting b/sublime_syntaxes/sublime_toml_highlighting index 1deb0745..36f82395 160000 --- a/sublime_syntaxes/sublime_toml_highlighting +++ b/sublime_syntaxes/sublime_toml_highlighting @@ -1 +1 @@ -Subproject commit 1deb0745d7cfd069bdd5652878e321019b1ed229 +Subproject commit 36f8239551f09ed354a6872a6cc2fd0168883446