The electronic document generator

Release notes

Version number has the “Major, Minor, Fix” form. Before Novelang reaches version 1.0.0, a change in “Minor” means a new feature. A change in “Fix” means a bugfix, while retaining compatibiliy with documents and stylesheets.

Release notes do report when there is a possible compatibility break with existing documents and stylesheets.


  • Added Romanian characters, as listed on Wikipedia. This includes diacritics made obsolete by the spelling reform of 1904, minus the d/D letter with a comma below, for which Unicode offers no precomposed characters.


  • New --temporary-dir option. For better error messages, Novelang now buffers the whole document before sending it to the HTTP client. When the document is too big Novelang buffers it into a temporary file under this directory. If an error occurs then its not too late to send an HTTP redirection.
  • Fixed SVG embedding for PDF. Now the image appears as true vector image inside the PDF. Correct reference to the SVG resource implied adding a $content-directory parameter passed to XSL stylesheets.
  • Fixed loss of request parameters when issuing error page.
  • Less verbose logging of Logback configuration at startup.
  • Fixed various cases of bad problem reporting, where location in origin file was missing.
  • Plenty of other small fixes.


  • Because of some cleanup, n:relative-identifier becomes illegal in stylesheets (wasn’t generated since a few versions). This might break a few existing stylesheets.
  • Better logging of accessed resources.
  • Documentation enhancements.


  • Fixed resource loading bug appeared in 0.53.5, that caused to ignore overriden resources (like stylesheets).


  • Various logging enhancements.
  • Various enhancements to the documentation.
  • Disabled full parsing and validation for SVG files.


  • Fixed logging configuration with --log-dir option.


  • Fixed barcode generation.
  • Minor logging enhancements.


  • Indicating error location when something goes bad during XSL transformation.
  • Minor fixes on HTML documentation.


  • Minor cosmetic changes for HTML generation.


  • Experimental support for Multipage. See the result in Novelang documentation.
  • Small logging enhancements.
  • More restrictive rules when applying XSL stylesheets. Generation now breaks on warnings. This might break existing incorrect stylesheets.
  • Changed default representation of Fragment Identifiers, both Implicit and Explicit. Removed leading double reverse solidus \\ when rendering (still required in document sources).


  • Added n:block-inside-asterisk-pairs. Default stylesheet render it as bold.


  • Upgraded from FOP-0.95 to FOP-1.0. FOP is the library for generating PDF documents.
  • Various other library upgrades that shouldn’t affect normal users.


  • Fixed: list with double hyphen and number sign was using a “plus sign” everywhere (source documents and XML elements). This might break existing documents and stylesheet using this brand new feature.


  • Fixed: support paragraphs as lists (n:list-with-triple-hyphen and n:list-with-double-hyphen-and-number-sign) inside n:paragraphs-inside-angled-bracket-pairs.


  • Minor fix on JavaShell for cleaner shutdown when there is no default JmxKit. This only may affect users of Novelang-attirail subproject.
  • Fixed documentation generation where release notes for SNAPSHOT versions appeared for non-SNAPSHOT versions.


  • Embedded numbered lists (n:embedded-list-with-number-sign).
  • Paragraphs as numbered lists (n:list-with-double-hyphen-and-number-sign).
  • Switched to Maven 3. This required no change but future build features may not work with formerly-used Maven 2.2.1.


  • In default stylesheet for HTML and PDF, the first n:cell-row element renders as a table header, if there is more than one. This might break existing documents.


  • Fixed startup option in documentation.
  • Tags and location for lines of literal. Required an intermediate n:raw-lines element nested inside n:lines-of-literal. This might break existing stylesheets.
  • Location for cell rows with vertical line.


  • Feature removal: relative identifier. Never used, and would make multipage rendering much more complicated.
  • Small enhancements to Novelang-attirail, the reusable library.


  • Added source packaging for Novelang-attirail subproject.


New experimental features for code reuse:

  • Novelang-attirail subproject aggregating various tools. It’s not part of standard distribution, by now it requires separate rebuild.
  • Pluggable logging implementation.
  • Java code all under org.novelang package (was novelang).


  • Added Greek and Polish characters to the grammar.


  • Fixed release notes generation.


  • Fixed a few references to old “Part” and “Book” terms, and file suffixes as well.


  • Fixed Nhovestone report generation.


  • Another fix for a build problem. Now the deploy:deploy goal should work properly when called from release:perform.


  • Fixed build problem when deploying files and sending annoucements.


  • Renamed Part into Novella and Book into Opus. Nicer, clearer. New recommended file suffixes are .novella and .opus. Old .nlp and .nlb suffixes still supported.
  • Switched build system from Ant to Maven. Because all jars stand in the lib directory, this impacts the command line for launching Novelang.


  • Added nohead option to insert command.
  • Fixed some bugs around identifiers.
  • Introduced detection of colliding explicit identifiers. This has no useful purpose for now but will serve as a basis for implementing internal links.
  • Small performance enhancement on HTML document rendering in a Web browser: don’t use JavaScript to set collapsible descriptors hidden.


  • Now requires Java 6.
  • New Nhovestone report: Novelang has its own benchmark!
  • Added stylesheet html-FR.xsl for French punctuation.
  • Performance enhancement on rendered HTML page: when containing many tags it should load faster. Instead of dynamically computing styles on the Web browser, HTML rendered by the server directly includes those styles.
  • Various performance enhancements on document generation. With the same amount of memory (-Xmx parameter), Novelang handles documents twice bigger and serves them 20 % faster than previous version. Benchmark ran against version 0.41.0 and 0.38.1. This includes buffered reading of Part files, multithreaded Part rendering, and reduced memory consumption when dealing with AST (Abstract Syntax Tree).


  • Fixed bug with Promoted Tags, not detected under some circumstances.


  • New feature: Promoted Tags. Implicit Tags matching Explicit Tags become Promoted Tags.
  • Support lines of literal inside paragraphs inside angled bracket pairs.
  • Minor enhancements on HTML default stylesheet.


  • Fixed display bug on generated documentation.


  • Brand new stylesheet for HTML.


  • Reject diacritics in tags.
  • Filter on implicit tags as on explicit tags.


  • Fixed documentation generation.


  • Experimental feature: descriptors in default HTML stylesheet.
  • Support Unicode files starting with a BOM (Byte Order Mark).
  • Reject TAB character.
  • Display Unicode name of a rejected character (as long as it belongs to the set of 16 bit Unicode characters as defined in Unicode 5.2 standard). This feature is experimental and may wreck existing error messages.


  • Fixed occasional crash caused by Implicit Tags.


  • Experimental support for Implicit Tags, deduced from level’s title.


  • Experimental support for Implicit Identifiers, deduced from level’s title. See “Identifiers” chapter in Part syntax.


  • New --style-dirs command line parameter (superceding --style-dir) for multiple style directories.
  • Minor identifier-related fixes and internal refactorings.


  • Experimental support for identifiers. See “Identifiers” chapter in Part syntax, and “Insert Command” in “Book Files”.


  • Fixed: bug preventing from starting a Novelang release with a numbered version.


  • New levelabove option for insert book command.
  • New sort option for insert book command.
  • New explodelevel batch command for splitting one document’s levels into several parts.
  • New --content-root command line argument for setting the directory where content files reside.
  • Fixed: paragraph as list did not support indented embedded list items.


  • Enhanced error reporting when parsing an ill-formed Book file.
  • Added automatic whitespace between punctuation sign or various blocks, and leading apostrophe.


This version introduces changes that may break existing documents and startup scripts.

  • New document extension .fo, for debugging FO stylesheets.
  • Removed the dollar sign $ from Book syntax.
  • Removed section command from Book syntax. No remplacement planned in the short term.
  • Removed title command from Book syntax. Use document parametrization instead (see how Novelang documentation works).
  • Renamed --serve-localhost-only to --serve-remotes and removed the boolean argument.
  • Fixed some bugs. Books now scan a directory correctly when recurse option is not set.


  • Fixed --serve-localhost-only command-line option: now works with IPv6.


  • New --serve-localhost-only command-line option for HTTP dæmon.
  • Minor fixes around block after tilde. They may appear in blocks inside hyphen pairs.
  • Minor enhancements to build script: Automated blog posting for a new release. Display version number in documentation.


  • Minor fixes around block after tilde. They may appear inside embedded lists and block inside solidus pairs.
  • Better handling of automatic space addition.
  • Now character table contains decimal values.


This version introduces changes that may break the rendering of existing documents.

  • New feature: Block after tilde. This supercedes proximity rules for blocks inside grave accents and blocks inside grave accent pairs.
  • Fixed some minor bugs occuring under Windows®.


  • Bug fixes: Handle more URL: HTTPS, non-standard query parameters. Fixed disappearing whitespace between word and block inside grave accents, when inside level title or embedded list.
  • Minor enhancements: Better sizing of embedded lists with default CSS. Documented some Windows tips. Added registration sign and copyright sign as supported characters in source documents.


This version introduces changes that may break existing documents.

  • Better handling of spaces inside blocks of literal (trimming, collapsing, replacing by no-break spaces).
  • Consecutive blocks of literal get a zero-width space automatically inserted inbetween.
  • When a block of literal inside grave accents is immediately preceded/​followed by a word, a zero-width space gets automatically inserted inbetween.
  • In case of a word starting/​ending with an apostrophe, the rendering adds a whitespace to separate from the preceding/​following word.
  • Added the color palette editor


  • Tag-based document filtering supported in URL parameters (tags=tag-1;tag-2). This is faster than JavaScript-based one, and makes the feature available to PDF and other formats.
  • Report line number in case of unclosed block delimiter.
  • Better logging: more concise messages, added some missing stuff.


  • Fixed MIME type of documents served by HTTP dæmon.


  • Experimental support for tag-based document filtering with default HTML stylesheet. This is purely Javascript-based (runs all in the browser) and performance are disastrous on big documents.
  • Fixed minor parsing bugs around URL.


This version introduces changes that may break existing stylesheets.

  • Introducing tags: content annotations.
  • Fixed some grammar bugs with URL, embedded lists and various line break configurations inside non-symmetrical delimiters (pairs of solidus, double quotes, hyphen pairs).
  • Default stylesheets moved to top level (no more style/default directory). The default word becomes the prefix (it was formerly the suffix) so html-default.xsl is now default-html.xsl.


This version introduces changes that may break existing stylesheets.

  • Simpler URL naming: no longer requires a line break preceding the block containing URL name.
  • As a consequence, n:external-link becomes n:url; n:url becomes n:url-literal; n:link-name becomes n:block-inside-double-quotes or n:block-inside-square-brackets.


  • Experimental support for embedded lists: hierarchical lists inside paragraphs.


  • Named URL.
  • n:url element gets wrapped into n:external-link.


This version introduces changes that may break existing documents and stylesheets.

  • Fixed: Book now display images correctly.
  • Fixed: Safari 4 did not render SVG resources when referenced from HTML document.
  • Fixed: HTML document now aware of SVG image dimension.
  • Slight change: n:pixel-width and n:pixel-height become n:image-width and n:image-height, with measure unit if available. For raster images, it is always px unit.


  • Experimental support for raster and vector images. Known limitation: only works for Parts.
  • Fixed argument parsing of batch argument generator (reported by Lmre).


  • Tables! See part syntax for details.
  • Documentation now lists all characters allowed in a source document (see at the end).
  • Default stylesheet are now modular: all logic is contained by bundled [pdf,html,nlp]-default.xsl while the stylesheet taken where no stylesheet name is specified remains [pdf,html,nlp].xsl. This makes possible to override defaults without specifying a new stylesheet name.


  • Default charset for source documents is now UTF-8.
  • Every character may be escaped using its Unicode name.
  • Batch document generator.
  • HTTP dæmon now started with additional httpdaemon command name.

The new command-line syntax now is:

java -jar ...novelang-VERSION.jar httpdaemon <options>
java -jar ...novelang-VERSION.jar generate <options>


  • Experimental support for custom charset for both source and rendered documents.


This version introduces changes that may break existing documents and stylesheets.

  • Renamed n:level-description to n:level-title.
  • Unlimited level nesting.


This version introduces changes that may break existing documents and stylesheets.

  • Brand new naming scheme for syntactic nodes!
  • Chapters and sections don’t exist anymore. All what stylesheets will see are “levels”.
  • Top-level delimiter (formerly “chapter”) in Part now starting with two equal signs == instead of three asterisks.
  • Character escape now basing on Unicode name, plus optional HTML entity name.
  • Option createchapter of the insert command renamed to createlevel.


  • Stylesheets containing XPath expressions relative to non-existing grammar token are detected and rejected.
  • Added new stylesheet: html-source.xsl. It generates HTML source in HTML with special markup highlighted. This is especially useful for posting raw HTML on Blogger while editing the text with Novelang!
  • ANTLR grammar refactoring continues, now tokens and supported characters are described in Java code generated from the grammar.
  • Fixed: Font list regression, now displays all characters as in Novelang-0.13.0.
  • Fixed: now some broken Part causes the whole Book document generation to fail when it’s a recursive include.


  • Refactored ANTLR grammar for supporting some planned features. Known regression: some useful characters missing from font list.


  • Better detection of text inconsistencies (lexer now reports problems).
  • Enhanced font list: doesn’t break where there are no custom font at all.
  • Cleaned up samples directory: most of stuff here was for tests, that moved to src/test-resources.


  • Enhanced font list: looks better, displays more useful characters, reports broken fonts.
  • The timestamp parameter passed to stylesheet is no longer of java.lang.String type, now it is a org.joda.time.DateTime for more formatting options.
  • Option createchapters of the insert function renamed to createchapter as it is no longer limited to recursive addition; now it applies to single-part insert.


  • Multiple font directories. No longer need to give special names to font files (internal name recognized automatically).
  • Normalized command-line arguments, no more system properties.
  • No longer need for font-metric files.


  • Barcode generation in PDF with Barcode4J.
  • Fixed character escaping with HTML.


  • Custom fonts for PDFs.
  • Hyphenation for PDFs.
  • New $style parameter for the insert function.
  • Superscript.
  • XSLT extension: plain text numbering. See chapter on custom stylesheets.
  • Fixed import bug when using punctuation-FR.xsl.
  • Documentation updates.


  • Directory listing.
  • New --port option for HttpDaemon. Useful when default TCP port (8080) is busy.
  • Fixed mispelling of “literal” (was “litteral”).
  • Plenty of bug fixes.


  • Enhanced literal and character escaping.


  • Multiple stylesheets.


  • First public release.