(def ^:dynamic chunk-size 17)

(defn next-chunk [rdr]
  (let [buf (char-array chunk-size)
        s (.read rdr buf)]
  (when (pos? s)
    (java.nio.CharBuffer/wrap buf 0 s))))

(defn chunk-seq [rdr]
  (when-let [chunk (next-chunk rdr)]
    (cons chunk (lazy-seq (chunk-seq rdr)))))

language: ...

style: rainbow

Get version 10.4.0





  1. Version 10.4.0

    A largish release with many improvements and fixes from quite a few different contributors. Enjoy!


    • (chore) requireLanguage is deprecated.
      • Prefer getLanguage (with custom error handling) or built-time dependencies.
      • See Library API for more information.


    • enh(parser) use negative look-ahead for beginKeywords support (#2813) Josh Goebel
    • enh(grammars) allow classNameAliases for more complex grammars Josh Goebel
    • fix(vue): Language name now appears in CSS class (#2807) Michael Rush
    • (chore) Clean up all regexs to be UTF-8 compliant/ready (#2759) Josh Goebel

    New Languages:

    • Added 3rd party Chapel grammar to SUPPORTED_LANGUAGES (#2806) Brad Chamberlain
    • Added BBCode grammar to SUPPORTED_LANGUAGES (#2867) Paul Reid
    • enh(javascript) Added node-repl for Node.js REPL sessions (#2792) Marat Nagayev

    Language Improvements:

    • enh(shell) Recognize prompts which contain tilde ~ (#2859) Guillaume Grossetie
    • enh(shell) Add support for multiline commands with line continuation \ (#2861) Guillaume Grossetie
    • enh(autodetect) Over 30+ improvements to auto-detect (#2745) Josh Goebel
      • 4-5% improvement in auto-detect against large sample set
      • properties, angelscript, lsl, javascript, n1ql, ocaml, ruby
      • protobuf, hy, scheme, crystal, yaml, r, vbscript, groovy
      • python, java, php, lisp, matlab, clojure, csharp, css
    • fix(r) fixed keywords not properly spaced (#2852) Josh Goebel
    • fix(javascript) fix potential catastrophic backtracking (#2852) Josh Goebel
    • fix(livescript) fix potential catastrophic backtracking (#2852) Josh Goebel
    • bug(xml) XML grammar was far too imprecise/fuzzy Josh Goebel
    • enh(xml) Improve precision to prevent false auto-detect positives Josh Goebel
    • fix(js/ts) Prevent for/while/if/switch from falsly matching as functions (#2803) Josh Goebel
    • enh(julia) Update keyword lists for Julia 1.x (#2781) Fredrik Ekre
    • enh(python) Match numeric literals per the language reference Richard Gibson
    • enh(ruby) Match numeric literals per language documentation Richard Gibson
    • enh(javascript) Match numeric literals per ECMA-262 spec Richard Gibson
    • enh(java) Match numeric literals per Java Language Specification Richard Gibson
    • enh(swift) Match numeric literals per language reference Richard Gibson
    • enh(php) highlight variables (#2785) Taufik Nurrohman
    • fix(python) Handle comments on decorators (#2804) Jonathan Sharpe
    • enh(diff) improve highlighting of diff for git patches [Florian Bezdeka][]
    • fix(llvm) lots of small improvements and fixes (#2830) Josh Goebel
    • enh(mathematica) Rework entire implementation Patrick Scheibe
      • Correct matching of the many variations of Mathematica's numbers
      • Matching of named-characters aka special symbols like \[Gamma]
      • Updated list of version 12.1 built-in symbols
      • Matching of patterns, slots, message-names and braces
    • fix(swift) Handle keywords that start with # Marcus Ortiz
    • enh(swift) Match some keyword Marcus Ortiz
    • enh(swift) Match @main attribute Marcus Ortiz

    Dev Improvements:

    • chore(dev) add theme picker to the tools/developer tool (#2770) Josh Goebel
    • fix(dev) the Vue.js plugin no longer throws an exception when hljs is not in the global namespace Kyle Brown

    New themes:

  2. Version 10.3.2

    Tiny tiny release, just to fix the website incorrectly not listing Javascript in the list of languages you could choose for a custom build.

    • There are no other changes.
  3. Version 10.3.1

    Prior version let some look-behind regex sneak in, which does not work yet on Safari. This release removes those incompatible regexes.


    • fix(Safari) Remove currently unsupported look-behind regex (fix) Josh Goebel
  4. Version 10.3.0

    Language Improvements:

    • enh(latex) Complete ground up rewrite of LaTex grammar schtandard
    • fix(cpp) implement backslash line continuation in comments (#2757) Konrad Rudolph
    • fix(cpp) improve parsing issues with templates (#2752) Josh Goebel
    • enh(cpp) add support for enum (struct|class) and union (#2752) Josh Goebel
    • fix(js/ts) Fix nesting of {} inside template literals SUBST expression (#2748) Josh Goebel
    • enh(js/ts) Highlight class methods as functions (#2727) Josh Goebel
    • fix(js/ts) constructor is now highlighted as a function title (not keyword) (#2727) Josh Goebel
    • fix(c-like) preprocessor directives not detected after else (#2738) Josh Goebel
    • enh(javascript) allow # for private class fields (#2701) Chris Krycho
    • fix(js) prevent runaway regex (#2746) Josh Goebel
    • fix(bash) enh(bash) allow nested params (#2731) Josh Goebel
    • fix(python) Fix highlighting of keywords and strings (#2713, #2715) Konrad Rudolph
    • fix(fsharp) Prevent (*) from being detected as a multi-line comment Josh Goebel
    • enh(bash) add support for heredocs (#2684) Josh Goebel
    • enh(r) major overhaul of the R language grammar (and fix a few bugs) (#2680) Konrad Rudolph
    • enh(csharp) Add all C# 9 keywords, and other missing keywords (#2679) David Pine
    • enh(objectivec) Add objective-c++ and obj-c++ aliases for Objective-C Josh Goebel
    • enh(java) Add support for record (#2685) Josh Goebel
    • fix(csharp) prevent modifier keywords wrongly flagged as title (#2683) Josh Goebel
    • enh(axapta) Update keyword list for Axapta (X++) (#2686) Ryan Jonasson
    • fix(fortran) FORTRAN 77-style comments (#2677) Philipp Engel
    • fix(javascript) Comments inside params should be highlighted (#2702) Josh Goebel
    • fix(scala) Comments inside class header should be highlighted (#1559) Josh Goebel
    • fix(c-like) Correctly highlight modifiers (final) in class declaration (#2696) Josh Goebel
    • enh(angelscript) Improve heredocs, numbers, metadata blocks (#2724) Melissa Geels
    • enh(javascript) Implement Numeric Separators (#2617) Antoine du Hamel
    • enh(typescript) TypeScript also gains support for numeric separators (#2617) Antoine du Hamel
    • enh(php) Add support for PHP 8 match keyword and add php8 as an alias (#2733) Ayesh Karunaratne
    • fix(handlebars) Support if else keyboards (#2659) Tom Wallace


    • useBR option deprecated and will be removed in v11.0. (#2559) Josh Goebel
  5. Version 10.2.1

    Parser Engine:

    • fix(parser) complete fix for resuming matches from same index (#2678) Josh Goebel
  6. Version 10.2.0

    Parser Engine:

    • (fix) When ignoring a potential match highlighting can terminate early (#2649) Josh Goebel

    New themes:


    • fixMarkup is now deprecated and will be removed in v11.0. (#2534) Josh Goebel

    Big picture:

    • Add simple Vue plugin for basic use cases (#2544) Josh Goebel

    Language Improvements:

    • fix(bash) Fewer false positives for keywords in arguments (#2669) sirosen
    • fix(js) Prevent long series of /////// from causing freezes (#2656) Josh Goebel
    • enh(csharp) Add init and record keywords for C# 9.0 (#2660) Youssef Victor
    • enh(matlab) Add new R2019b arguments keyword and fix enumeration keyword (#2619) Andrew Janke
    • fix(kotlin) Remove very old keywords and update example code (#2623) kageru
    • fix(night) Prevent object prototypes method values from being returned in getLanguage (#2636) night
    • enh(java) Add support for enum, which will identify as a class now (#2643) ezksd
    • enh(nsis) Add support for NSIS 3.06 commands (#2653) idleberg
    • enh(php) detect newer more flexible HEREdoc syntax (#2658) eytienne
  7. Version 10.1.2


    • fix(night) Prevent object prototype values from being returned by getLanguage (#2636) night
  8. Version 10.1.1


  9. Version 10.1.0

    New themes:

    Parser Engine:

    • (parser) Now escapes quotes in text content when escaping HTML (#2564) Josh Goebel
    • (parser) Adds keywords.$pattern key to grammar definitions (#2519) Josh Goebel
    • (parser) Adds SHEBANG utility mode Josh Goebel
    • (parser) Adds registerAliases method (#2540) [Taufik Nurrohman][]
    • (enh) Added on:begin callback for modes (#2261) Josh Goebel
    • (enh) Added on:end callback for modes (#2261) Josh Goebel
    • (enh) Added ability to programatically ignore begin and end matches (#2261) Josh Goebel
    • (enh) Added END_SAME_AS_BEGIN mode to replace endSameAsBegin parser attribute (#2261) Josh Goebel
    • (fix) fixMarkup would rarely destroy markup when useBR was enabled (#2532) Josh Goebel


    • htmlbars grammar is now deprecated. Use handlebars instead. (#2344) Nils Knappmeier
    • when using highlightBlock result.re deprecated. Use result.relevance instead. (#2552) Josh Goebel
    • ditto for result.second_best.re => result.second_best.relevance (#2552)
    • lexemes is now deprecated in favor of keywords.$pattern key (#2519) Josh Goebel
    • endSameAsBegin is now deprecated. (#2261) Josh Goebel

    Language Improvements:

    • fix(groovy) strings are not allowed inside ternary clauses (#2217) Josh Goebel
    • fix(typescript) add readonly keyword (#2562) Martin (Lhoerion)
    • fix(javascript) fix regex inside parens after a non-regex (#2530) Josh Goebel
    • enh(typescript) use identifier to match potential keywords, preventing false positivites (#2519) Josh Goebel
    • enh(javascript) use identifier to match potential keywords, preventing false positivites (#2519) Josh Goebel
    • [enh] Add OPTIMIZE: and HACK: to the labels highlighted inside comments Josh Goebel
    • enh(typescript/javascript/coffeescript/livescript) derive ECMAscript keywords from a common foudation (#2518) Josh Goebel
    • enh(typescript) add setInterval, setTimeout, clearInterval, clearTimeout (#2514) Josh Goebel
    • enh(javascript) add setInterval, setTimeout, clearInterval, clearTimeout (#2514) Vania Kucher
    • enh(cpp) add pair, make_pair, priority_queue as built-ins (#2538) Hankun Lin
    • enh(cpp) recognize priority_queue pair as cpp containers (#2541) Hankun Lin
    • fix(javascript) prevent set keyword conflicting with setTimeout, etc. (#2514) Vania Kucher
    • fix(cpp) Fix highlighting of unterminated raw strings (#2261) David Benjamin
    • fix(javascript) => function with nested () in params now works (#2502) Josh Goebel
    • fix(typescript) => function with nested () in params now works (#2502) Josh Goebel
    • fix(yaml) Fix tags to include non-word characters (#2486) Peter Plantinga
    • fix(swift) @objcMembers was being partially highlighted (#2543) Nick Randall
    • enh(dart) Add late and required keywords, the Never built-in type, and nullable built-in types (#2550) Sam Rawlins
    • enh(erlang) Add underscore separators to numeric literals (#2554) Sergey Prokhorov
    • enh(handlebars) Support for sub-expressions, path-expressions, hashes, block-parameters and literals (#2344) Nils Knappmeier
    • enh(protobuf) Support multiline comments (#2597) Pavel Evstigneev
    • fix(toml) Improve key parsing (#2595) Antoine du Hamel
  10. Version 10.0.3