Nyctergatis Markup Engine
Creole is a collaborative effort to create a common markup language to be used across different wikis.
NME, or Nyctergatis Markup Engine, is an open-source C implementation of a markup parser based on Creole 1.0. The markup language it supports is described in its documentation.
NME also includes a tool to create EPUB files (electronic books which can be read with many devices and applications, such as iBook on the iPad).
If you are interested, you can experiment with an online sandbox. You can also read the source code documentation.
Launchpad
NME is now hosted by Launchpad, a service for open source projects that's big on collaboration. Many thanks to Mike Owens for his kind insistence and his commitment!
So for any question or bug report, please come to Launchpad.
Releases
23 March 2013
NME-130323.zip (source code, 134 KB)
- Parenthesis in boolean expressions to suppress gcc warnings
- Documentation of NME usage updated
- Global XML entity dictionary
NMEXMLCharDict
- Links used verbatim as link text when no explicit link text is provided
- Buffer overflow in
addLinkBegin
fixed %L
inbeginDD
fixed
4 October 2011
NME-111004.zip (source code, 131 KB)
- EPUB support
- support for RichEdit version ≥0x0200 on MFC
- tracking of NME source line number
- conditional expressions in output format strings with
?:
}}}
handled as normal characters outside pre block- bug fixes related to nesting of output markup and hook calls
- tests with new
nmerandom
tool - Visual C++ 2010 projects and code adjustments
- improved Doxygen documentation
- with LaTeX output, numbered and definition lists are translated to enumerate and definition environments respectively instead of itemize
- gcc warning hex escape sequence out of range fixed in
NMEPluginWiki.h
- new functions
NMEResetOutput
andNMECurrentInputIndex
- list following paragraphs without empty line resulted in invalid HTML; fixed
31 March 2010
NME-100331.zip (source code, 99 KB)
- arrays in lists didn't balance closing tags correctly; fixed (arrays force list end)
- sublists weren't converted to compliant HTML (they were
outside
<li></li>
markup); fixed - the distribution archive lacked
NMEStyle.c
,NMEStyle.h
andNMEErrorCpp.h
; fixed make distrib
didn't work with what it produced; fixed- wrong description of function
NMEPluginTOC
; fixed --null-plugins
option inNMEMain.c
NMEPluginWiki.h
,NMEPluginWiki.c
and option--metadata
inNMEMain.c
(metadata and title extraction)- use
id
attributes for anchors instead ofname
in a separatea
element - if
useHTMLEmphasisTags
is defined, use<em></em>
and<strong></strong>
instead of<i></i>
and<b></b>
respectively }{
was wrongly recognized as an image opening tag; fixedNMECurrentListNesting
uses|
for tables- context is available in
wordwrapPermFun
callback and used for NME output to prevent line breaks in tables - indentation wasn't always set correctly, resulting in too many leading spaces at the beginning of lines; fixed
- new
NMEOutputFormatDebug
format for debugging, and--debug
and--debug2
options inNMEMain.c
- new
--structspan
option inNMEMain.c
- Objective-C wrapper (files
NMEObjC.h
andNMEObjC.m
)
19 November 2008
NME-081119.zip (source code, 87 KB)
- new hook function
charHookFun
called when a character is copied to output; useful to match text fragments in input and output - new hook function
getVarFun
for custom variables in expressions - character
=
was skipped in headings even when it wasn't the optional trailing heading markup; fixed
25 August 2008
NME-080825.zip (source code, 86 KB)
- new variable
p
in output format strings for output offset - new format
NMEOutputFormatTextCompact
with less blank lines thanNMEOutputFormatText
- reduced right margin for RTF output
- tables should be followed by an empty line; fixed
--easylink
option inNMEMain.c
15 October 2007
NME-071015.zip (source code, 83 KB)
- unnested unnumbered or numbered list items weren't recognized when following sublists; fixed
12 October 2007
NME-071012.zip (source code, 83 KB)
- NME output better escapes characters when it has to, but usually doesn't unless required
- in NME output, support for mixed nested lists
- double-slash is considered as a part of URL instead of italic
markup only if it follows a digit, letter, '+', '-' or '.', and a
colon; and it precedes a nonblank character; therefore, a tilde
before the colon, such as
abc:...
, restores the meaning of the double-slash sequence as italic markup
9 October 2007
NME-071009.zip (source code, 82 KB)
- in lists, item markup must match, else it is interpreted as plain characters or as bold or monospace markup
NMEMFC.cpp
compiles correctly without_UNICODE
4 October 2007
NME-071004.zip (source code, 82 KB)
- link encoding for RTF output
NMEGtk
tuning- parHook and divHook bugs, revealed by new option
--checkhooks
ofNMEMain.c
, fixed
29 September 2007
NME-070929.zip (source code, 80 KB)
- new high-level function
NMEGtkInsert
to insert NME text directly into aGtkTextBuffer
;NMEGtkTest.c
modified to use it NMEProcess
optionally returns the output length in unicode characters, assuming UTF-8 input- in
NMEMain.c
, option--strictcreole
doesn't disable escape character anymore NMECpp.h
uses C++ exceptions for error handling only ifUseNMECppException
is defined; else methodgetOutput
returns an error code (the choice is useful for platforms where exceptions are not supported or have a large cost)- minor bug fixes in
NMEStyle.c
(plain paragraphs and tables) - refined
NMEMFC.cpp
- error codes in hook callbacks weren't handled correctly; fixed
- support for links and images in span hook and
NMEStyle
- support for links in
NMEGtk
- in
NMECpp
andNMEStyleCpp
, copy constructors and assignment operators - NMEEncodeURLFun has an additional argument for application-specific data, and structure NMEOutputFormat has an additional field for it
23 August 2007
NME-070823.zip (source code, 75 KB)
- bug in unicode offset computation fixed
kNMEProcessOptXRef
wasn't handled correctly; fixed- blanks following starting = or preceding ending = in titles are ignored
- in
NMEGtkApplyStyle
, additional argument for the offset of NME output in GTK+ text buffer - in LaTeX output, braces are now escaped and bold italic is suported
- monospace text wasn't signalled to
spanHookFun
; fixed - MFC glue with
NMEMFC.cpp
andNMEMFC.h
(functionNMEMFCSetRichText
which renders NME text into aCRichEditCtrl
)
5 July 2007
NME-070705.zip (source code, 70 KB)
- option to have verbatim rendered as monospace
(
kNMEProcessOptVerbatimMono
)
4 July 2007
NME-070704.zip (source code, 70 KB)
- callback to check valid wordwrap points
- bad unicode encoding for RTF fixed * tilde is an escape character before any nonblank character, including alphanumeric
19 June 2007
NME-070619.zip (source code, 69 KB)
- support for UCS-16 offset (16-bit unicode offsets when the input is encoded in UTF-8)
- C++ glue for
NMEStyle
(NMEStyleCpp.h
) - in block preformatted, when 3 closing braces follow spaces at the beginning of a line, one space is removed
7 June 2007
NME-070607.zip (source code, 67 KB)
NMEStyle
to separate text from styleNMEGtkTest.c
, a test application forNMEStyle
which displays a text file with NME markup in a GTK+ 2 window- support for placeholders (plugin option to use triple angle brackets instead of double angle brackets)
- bug fixes
30 May 2007
NME-070530.zip (source code, 63 KB)
- heading of level 1 and 2 following other paragraphs without a blank line were always numbered; fixed
- XHTML-compatible image tag in HTML output
- plugins source code in separate files
- in plugin tables, single field for option flags instead of separate boolean fields
- in plugin tables, option flag for plugins between paragraphs
- characters weren't encoded in preformatted blocks; now there is a separate callback
- new opaque structure NMEContext for output data and other contextual information, to reduce the number of arguments passed around and to support string output with embedded expressions from plugin and autoconvert functions
- variable
o
(offset in source code) in embedded expressions, useful as unique identifiers for hyperlinks - hook functions for paragraphs and sections
- functions to retrieve current output format and options in plugin, autoconvert and hook functions, and to copy input text from input to output
- change in the arguments of NMEProcess, to keep original source code
- table of contents plugin (sample code for the new features)
- C++ glue (
NMECpp.h
)
24 April 2007
NME-070424.zip (source code, 47 KB)
- optional automatic links for URLs beginning with http://, https://, ftp://, mailto:
- optional separate source file for automatic links for camelcase and URL
- options to disable indented paragraphs and definitions lists
- in NMEMain.c, option
--strictnme
to disable features not in Creole 1.0
19 April 2007
NME-070419.zip (source code, 44 KB)
- optional numbering of headings, level 1 and/or 2
- images weren't supported in links; fixed
- empty cells weren't output correctly in text format; fixed
- in NMEMain.c, most plugins have
reparseOutput
set, so that word-wrap is applied to output - Python glue for the command-line application
(
nme.py
)
18 April 2007
NME-070418.zip (source code, 43 KB)
- plugins now use the “placeholder” syntax, with double angle brackets
- references to plugin globally-unique identifiers removed
- option to match only the beginning of plugin names
16 April 2007
NME-070416.zip (source code, 43 KB)
- doc header and trailer suppressed in plugin output
- less references to Creole in source code
- “null” format for producing no output
- better handling of plugins, especially those which produce NME code which must be processed again
- autoconversion plugins which make substitutions before NME conversion (as an example, NMEMain.c has an option to convert camelCase words to links)
30 March 2007
NME-070330.zip (source code, 40 KB)
- wrong encoding of unicode characters ≥32768 for RTF output; fixed
- optional processing of plugin output
- calendar plugin in NMEMain.c
23 March 2007
NME-070323.zip (source code, 39 KB)
- support for parenthesis in expressions in output strings
- replicated strings themselves can contain expressions, and syntax for expressions in output strings has been changed to support it
- default font size in structure
NMEOutputFormat
and support for default font size (with nonpositive values, HTML does not contain font size specifications at all, relying on the browser defaults) - argument
withPreAndPostDoc
ofNMEProcess
replaced byoptions
- images
- option to consider line breaks as paragraph separators
- minor documentation fixes
20 March 2007
NME-070320.zip (source code, 35 KB)
- Initial release