A simple module to process 'literate' documents.
The module uses a lexer to split the document into code blocks,
delineated by user-defined markers, and code lines that are
indicated be a line marker. The lexer returns a document stripped
of non-code elements but preserving the original document's line
count. Column numbering of code lines are not preserved.
The underlying tokeniser is greedy.
Once it identifies a line marker it reads a prettifying space then
consumes until the end of line. Once identifies a starting code
block marker, the lexer will consume input until the next
identifiable end block is encountered. Any other content is
treated as part of the original document.
Thus, the input literate files must be well-formed w.r.t
to code line markers and code blocks.
A further restriction is that literate documents cannot contain
the markers within the document's main text: This will confuse the
lexer.
Given a 'literate specification' extract the code from the
literate source file (litStr
) that follows the presented style.
The literate specification to use.
The literate source file.
Returns a LiterateError
if the literate file contains malformed
code blocks or code lines.
The pairs of start and end tags for code blocks.
Line markers that indicate a line contains code.
Recognised file extensions. Not used by the module, but will be
of use when connecting to code that reads in the original source
files.
Description of literate styles.
A 'literate' style comprises of
deliminators
);line_markers
); andfile_extensions
.Some example specifications:
MkLitStyle Nil [">", "<"] Nil
MkLitStyle [("\\begin{code}", "\\end{code}"),("\\begin{spec}","\\end{spec}")]
Nil
["lhs", "tex"]
MkLitStyle [("#+BEGIN_SRC idris","#+END_SRC"), ("#+COMMENT idris","#+END_COMMENT")]
["#+IDRIS:"]
["org"]
The pairs of start and end tags for code blocks.
Line markers that indicate a line contains code.
Recognised file extensions. Not used by the module, but will be
of use when connecting to code that reads in the original source
files.
The pairs of start and end tags for code blocks.
Line markers that indicate a line contains code.
Recognised file extensions. Not used by the module, but will be
of use when connecting to code that reads in the original source
files.