Module rst

This module implements a reStructuredText parser. A large subset is implemented. Some features of the markdown wiki syntax are also supported.


os, strutils, rstast


RstParseOption = enum
  roSkipPounds,               ## skip ``#`` at line beginning (documentation
               ## embedded in Nim comments)
  roSupportSmilies,           ## make the RST parser support smilies like ``:)``
  roSupportRawDirective,      ## support the ``raw`` directive (don't support
                        ## it for sandboxing)
  roSupportMarkdown           ## support additional features of markdown
options for the RST parser
RstParseOptions = set[RstParseOption]
MsgClass = enum
  mcHint = "Hint", mcWarning = "Warning", mcError = "Error"
MsgKind = enum
  meCannotOpenFile, meExpected, meGridTableNotImplemented, meNewSectionExpected,
  meGeneralParseError, meInvalidDirective, mwRedefinitionOfLabel,
  mwUnknownSubstitution, mwUnsupportedLanguage, mwUnsupportedField
the possible messages
MsgHandler = proc (filename: string; line, col: int; msgKind: MsgKind; arg: string) {.
what to do in case of an error
FindFileHandler = proc (filename: string): string {.nimcall.}
EParseError = object of ValueError


proc whichMsgClass(k: MsgKind): MsgClass {.raises: [], tags: [].}
returns which message class k belongs to.
proc defaultMsgHandler(filename: string; line, col: int; msgkind: MsgKind; arg: string) {.
    procvar, raises: [ValueError, EParseError, IOError], tags: [WriteIOEffect].}
proc defaultFindFile(filename: string): string {.procvar, raises: [],
    tags: [ReadDirEffect].}
proc addNodes(n: PRstNode): string {.raises: [], tags: [].}
proc rstnodeToRefname(n: PRstNode): string {.raises: [], tags: [].}
proc getFieldValue(n: PRstNode): string {.raises: [], tags: [].}

Returns the value of a specific rnField node.

This proc will assert if the node is not of the expected type. The empty string will be returned as a minimum. Any value in the rst will be stripped form leading/trailing whitespace.

proc getFieldValue(n: PRstNode; fieldname: string): string {.raises: [], tags: [].}
proc getArgument(n: PRstNode): string {.raises: [], tags: [].}
proc rstParse(text, filename: string; line, column: int; hasToc: var bool;
             options: RstParseOptions; findFile: FindFileHandler = nil;
             msgHandler: MsgHandler = nil): PRstNode {.raises: [Exception],
    tags: [ReadEnvEffect, RootEffect].}

© 2006–2017 Andreas Rumpf
Licensed under the MIT License.