1.1 --- a/README.txt Sun Apr 14 00:29:40 2019 +0200
1.2 +++ b/README.txt Tue Apr 16 23:37:54 2019 +0200
1.3 @@ -12,8 +12,9 @@
1.4 format to other formats. For example, the supplied documentation can be
1.5 converted as follows:
1.6
1.7 -./moinconvert --all --input-dir docs/wiki --format html \
1.8 - --output-dir docs/html --macros --document-index index.html
1.9 +./moinconvert --input-dir docs/wiki --output-dir docs/html \
1.10 + --document-index index.html \
1.11 + --macros --all
1.12
1.13 This converts all documents in the indicated input directory to HTML format,
1.14 storing the converted documents in the indicated output directory, evaluating
1.15 @@ -32,11 +33,20 @@
1.16 See the bundled documentation for more details of the software and how it can
1.17 be used:
1.18
1.19 - * docs/wiki/FrontPage (and accompanying files) are the documentation files in
1.20 + * docs/wiki/MoinLight (and accompanying files) are the documentation files in
1.21 Moin format
1.22
1.23 - * docs/html/index.html is the front page of the documentation converted to HTML
1.24 - format
1.25 + * docs/html/index.html is the front page of the documentation converted to
1.26 + HTML format
1.27 +
1.28 +A more convenient way of generating the documentation is to use the following
1.29 +command:
1.30 +
1.31 +docs/tools/make_docs.sh
1.32 +
1.33 +For Web server deployment, add the --web option for cleaner links:
1.34 +
1.35 +docs/tools/make_docs.sh --web
1.36
1.37 Test Suite
1.38 ==========
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/docs/tools/make_docs.sh Tue Apr 16 23:37:54 2019 +0200
2.3 @@ -0,0 +1,34 @@
2.4 +#!/bin/sh
2.5 +
2.6 +THISDIR=`dirname "$0"`
2.7 +INDIR="$THISDIR/../wiki"
2.8 +OUTDIR="$THISDIR/../html"
2.9 +
2.10 +ROOT="MoinLight"
2.11 +
2.12 +MAPPING='
2.13 +--mapping WikiPedia https://en.wikipedia.org/wiki/
2.14 +--mapping MoinMoin https://moinmo.in/
2.15 +'
2.16 +
2.17 +THEME='--theme mercurial'
2.18 +
2.19 +if [ "$1" = '--web' ] ; then
2.20 + DOCINDEX=
2.21 + shift 1
2.22 +else
2.23 + DOCINDEX='--document-index index.html'
2.24 +fi
2.25 +
2.26 +FILENAMES=${*:-'--all'}
2.27 +
2.28 +moinconvert --input-dir "$INDIR" \
2.29 + --input-page-sep '--' \
2.30 + --output-dir "$OUTDIR" \
2.31 + --root "$ROOT" \
2.32 + --format html \
2.33 + --macros \
2.34 + $DOCINDEX \
2.35 + $MAPPING \
2.36 + $THEME \
2.37 + $FILENAMES
3.1 --- a/docs/wiki/FrontPage Sun Apr 14 00:29:40 2019 +0200
3.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
3.3 @@ -1,115 +0,0 @@
3.4 -= MoinLight =
3.5 -
3.6 -MoinLight is a distribution of programs and libraries for working with content
3.7 -encoded in the [[https://moinmo.in/|MoinMoin]] wiki markup format. This markup
3.8 -format is generally concise and supports many kinds of HTML document features
3.9 -using intelligible plain text representations.
3.10 -
3.11 -########## The graph below shows the architecture of the system...
3.12 -
3.13 -{{{#!graphviz
3.14 -#format svg
3.15 -#transform notugly
3.16 -digraph architecture {
3.17 - node [shape=box,fontsize="13.0",fontname="Helvetica"];
3.18 - rankdir=LR;
3.19 -
3.20 - subgraph {
3.21 - rank=same;
3.22 - input [label="Input context",URL="Input"];
3.23 - markup [label="Moin content",shape=folder,style=filled,fillcolor=cyan];
3.24 - }
3.25 -
3.26 - parser [label="Parser",URL="Parsers"];
3.27 -
3.28 - subgraph {
3.29 - rank=same;
3.30 - tree [label="Document tree",shape=folder,style=filled,fillcolor=cyan];
3.31 - evaluation [label="Macro evaluation",shape=ellipse];
3.32 - }
3.33 -
3.34 - serialiser [label="Serialiser",URL="Serialisers"];
3.35 -
3.36 - theme [label="Theme",URL="Themes"];
3.37 -
3.38 - subgraph {
3.39 - rank=same;
3.40 - output [label="Output context",URL="Output"];
3.41 - pages [label="Web content",shape=folder,style=filled,fillcolor=cyan];
3.42 - }
3.43 -
3.44 - markup -> input -> parser -> tree -> evaluation -> tree -> serialiser ->
3.45 - theme -> output -> pages;
3.46 -}
3.47 -}}}
3.48 -
3.49 -##########
3.50 -
3.51 -Although it is obviously possible to use the MoinMoin software (hereafter
3.52 -referred to as Moin) to work such such content, there are a few advantages in
3.53 -developing independent tools instead:
3.54 -
3.55 - * To eliminate any dependency on the Moin code, its bundled libraries, or on
3.56 - its external dependencies (of which there are many for Moin 2.0)
3.57 -
3.58 - * To focus on areas of functionality that are considered priorities, such as
3.59 - the publishing of content as static Web sites, which may not be adequately
3.60 - or optimally supported by Moin
3.61 -
3.62 - * To provide other implementations of parsers and serialisers for the markup
3.63 - format, thus establishing it as more genuinely interoperable markup
3.64 - standard
3.65 -
3.66 - * To be able to work with the content more easily and to develop tools for
3.67 - doing so
3.68 -
3.69 -== Getting Started ==
3.70 -
3.71 -To convert a collection of wiki pages in a directory (with `pages` containing
3.72 -the original pages and `htdocs` being the desired output directory), run the
3.73 -`moinconvert` program as follows:
3.74 -
3.75 -{{{
3.76 -moinconvert --input-dir pages --output-dir htdocs --all
3.77 -}}}
3.78 -
3.79 -To convert a single file from such a collection (such as `FrontPage`), run the
3.80 -program as follows:
3.81 -
3.82 -{{{
3.83 -moinconvert --input-dir pages FrontPage
3.84 -}}}
3.85 -
3.86 -This will produce the serialised page on standard output rather than writing
3.87 -it to a file.
3.88 -
3.89 -Other options are typically useful when running the program, such as `--theme`
3.90 -for styling and wrapping the output, `--macros` for expanding macros in
3.91 -documents, and `--format` for choosing alternative output formats.
3.92 -
3.93 -== Abstractions and Architecture ==
3.94 -
3.95 -MoinLight provides a number of abstractions for working with Moin wiki content:
3.96 -
3.97 - * [[/Parsers]] interpret various forms of markup-related content, producing a
3.98 - document tree representation that can be inspected and processed
3.99 -
3.100 - * [[/Serialisers]] convert the document tree representation into other
3.101 - content formats such as HTML or even back into Moin format
3.102 -
3.103 - * [[/Themes]] augment serialised content with additional details and
3.104 - resources
3.105 -
3.106 - * [[/Macros]] define locations in documents where content is to be inserted
3.107 - or expanded
3.108 -
3.109 - * [[/Input]] contexts permit the interpretation of existing content in
3.110 - certain ways so that a collection of text files can be treated like a wiki
3.111 -
3.112 - * [[/Output]] contexts permit the publishing of content in certain
3.113 - ways so that wiki content can be shared on the Web
3.114 -
3.115 -A major objective with MoinLight is to be able to produce static files that
3.116 -can be served using a typical Web server without any need for scripts,
3.117 -applications or other kinds of dynamic content. Other objectives are described
3.118 -in the [[/Roadmap]] document.
4.1 --- a/docs/wiki/Input Sun Apr 14 00:29:40 2019 +0200
4.2 +++ b/docs/wiki/Input Tue Apr 16 23:37:54 2019 +0200
4.3 @@ -1,22 +1,26 @@
4.4 = Input =
4.5
4.6 -Input contexts determine how content provided for processing should be interpreted.
4.7 -Typically, wiki content will either be provided as a single file containing a
4.8 -single wiki page or as collections of such files arranged within a directory
4.9 -hierarchy.
4.10 +Input contexts determine how content provided for processing should be
4.11 +interpreted. Typically, wiki content will either be provided as a single file
4.12 +containing a single wiki page or as collections of such files arranged within a
4.13 +directory hierarchy.
4.14
4.15 -The following input contexts are supported:
4.16 +The supported input contexts are described below.
4.17 +
4.18 +== Directory ==
4.19 +
4.20 +A directory containing wiki page files.
4.21
4.22 -{{{#!table
4.23 -'''Name''' || '''Format''' || '''Details'''
4.24 -==
4.25 -directory
4.26 -|| A directory containing wiki page files
4.27 -|| Each file contains a different wiki page with its filename indicating the
4.28 -.. page name, and with any configured `input_separator` being used in
4.29 -.. filenames to construct hierarchical page relationships
4.30 -==
4.31 -standalone
4.32 -|| A standalone wiki page file
4.33 -|| A single file containing a single wiki page
4.34 -}}}
4.35 +[[Metadata#input_context|input_context]]: `directory`
4.36 +
4.37 +Each file contains a different wiki page with its filename indicating the page
4.38 +name, and with any configured `input_separator` being used in filenames to
4.39 +construct hierarchical page relationships.
4.40 +
4.41 +== Standalone ==
4.42 +
4.43 +A standalone wiki page file.
4.44 +
4.45 +[[Metadata#input_context|input_context]]: `standalone`
4.46 +
4.47 +A single file containing a single wiki page.
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/docs/wiki/Macros Tue Apr 16 23:37:54 2019 +0200
5.3 @@ -0,0 +1,15 @@
5.4 += Macros =
5.5 +
5.6 +As [[MoinMoin:HelpOnMacros|in MoinMoin]], macros are instructions that are
5.7 +replaced or expanded to produce content within documents. A number of macros
5.8 +are provided in MoinLight, some of which are provided for compatibility with
5.9 +Moin, including the following:
5.10 +
5.11 +|| '''Name''' || '''Purpose''' ||
5.12 +|| `Anchor` || Insert a link anchor ||
5.13 +|| `AttachList` || Show a list of page attachments ||
5.14 +|| `BR` || Insert a line break ||
5.15 +|| `MailTo` || Encode a `mailto:` link ||
5.16 +|| `PageList` || Show a list of pages ||
5.17 +|| `TableOfContents` || Show a table of contents ||
5.18 +|| `Verbatim` || Insert text without formatting ||
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
6.2 +++ b/docs/wiki/Metadata Tue Apr 16 23:37:54 2019 +0200
6.3 @@ -0,0 +1,111 @@
6.4 += Metadata =
6.5 +
6.6 +The metadata abstraction is used in MoinLight to control the conversion of
6.7 +wiki content from its [[Input|input]] form to its eventual [[Output|output]]
6.8 +form.
6.9 +
6.10 +The settings or properties retained by the conversion metadata are described
6.11 +below.
6.12 +
6.13 +<<TableOfContents(2)>>
6.14 +
6.15 +== attachments ==
6.16 +
6.17 + Default:: `attachments`
6.18 +
6.19 +The name used for attachment directories.
6.20 +
6.21 +== document_index ==
6.22 +
6.23 + Default:: (none)
6.24 +
6.25 +The filename to be incorporated into page links so that such links reference a
6.26 +particular file instead of the page directory containing the file. This is
6.27 +useful when generating HTML content to be browsed as local files.
6.28 +
6.29 +== input_context ==
6.30 +
6.31 + Default:: `standalone`
6.32 + Alternative:: `directory`
6.33 +
6.34 +The form of the [[Input|input]] to be processed.
6.35 +
6.36 +== input_encoding ==
6.37 +
6.38 + Default:: `utf-8`
6.39 +
6.40 +The character encoding used in the input documents.
6.41 +
6.42 +== input_filename ==
6.43 +
6.44 + Default:: (none)
6.45 +
6.46 +The location of the input document or directory of documents.
6.47 +
6.48 +== input_format ==
6.49 +
6.50 + Default:: `moin`
6.51 +
6.52 +The default format of input documents.
6.53 +
6.54 +== input_separator ==
6.55 +
6.56 + Default:: (none)
6.57 +
6.58 +The separator used to structure hierarchical pagenames.
6.59 +
6.60 +== link_format ==
6.61 +
6.62 + Default:: (depends on the [[#output_format| output format]])
6.63 +
6.64 +The format of encoded links in converted documents. Typically, this will
6.65 +conform to the general output format of the documents.
6.66 +
6.67 +== mapping ==
6.68 +
6.69 + Default:: (none)
6.70 +
6.71 +A mapping of identifiers to URLs, used to generate interwiki links.
6.72 +
6.73 +== output_context ==
6.74 +
6.75 + Default:: `standalone`
6.76 + Alternative:: `directory`
6.77 +
6.78 +The form of the [[Output|output]] to be processed.
6.79 +
6.80 +== output_encoding ==
6.81 +
6.82 + Default:: `utf-8`
6.83 +
6.84 +The character encoding used in the output documents.
6.85 +
6.86 +== output_format ==
6.87 +
6.88 + Default:: `moin`
6.89 +
6.90 +The default format of output documents.
6.91 +
6.92 +== output_filename ==
6.93 +
6.94 + Default:: (none)
6.95 +
6.96 +The location of the output document or directory of documents.
6.97 +
6.98 +== root_pagename ==
6.99 +
6.100 + Default:: `FrontPage`
6.101 +
6.102 +The pagename of the root document in a collection of documents.
6.103 +
6.104 +== theme_name ==
6.105 +
6.106 + Default:: (none)
6.107 + Alternatives:: (see below)
6.108 +
6.109 +Required for applying themes to output. The names combine a theme name with an
6.110 +output format. For example:
6.111 +
6.112 +|| '''Alternative''' || '''Theme''' || '''Format''' ||
6.113 +|| `default.html` || `default` || `html` ||
6.114 +|| `mercurial.html` || `mercurial` || `html` ||
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
7.2 +++ b/docs/wiki/MoinLight Tue Apr 16 23:37:54 2019 +0200
7.3 @@ -0,0 +1,122 @@
7.4 += MoinLight =
7.5 +
7.6 +MoinLight is a distribution of programs and libraries for working with content
7.7 +encoded in the [[https://moinmo.in/|MoinMoin]] wiki markup format. This markup
7.8 +format is generally concise and supports many kinds of HTML document features
7.9 +using intelligible plain text representations.
7.10 +
7.11 +########## The graph below shows the architecture of the system...
7.12 +
7.13 +{{{#!graphviz
7.14 +#format svg
7.15 +#transform notugly
7.16 +digraph architecture {
7.17 + node [shape=box,fontsize="13.0",fontname="Helvetica"];
7.18 + rankdir=LR;
7.19 +
7.20 + subgraph {
7.21 + rank=same;
7.22 + input [label="Input context",URL="Input"];
7.23 + markup [label="Moin content",shape=folder,style=filled,fillcolor=cyan];
7.24 + }
7.25 +
7.26 + parser [label="Parser",URL="Parsers"];
7.27 +
7.28 + subgraph {
7.29 + rank=same;
7.30 + tree [label="Document tree",shape=folder,style=filled,fillcolor=cyan];
7.31 + evaluation [label="Macro evaluation",shape=ellipse];
7.32 + }
7.33 +
7.34 + serialiser [label="Serialiser",URL="Serialisers"];
7.35 +
7.36 + theme [label="Theme",URL="Themes"];
7.37 +
7.38 + subgraph {
7.39 + rank=same;
7.40 + output [label="Output context",URL="Output"];
7.41 + pages [label="Web content",shape=folder,style=filled,fillcolor=cyan];
7.42 + }
7.43 +
7.44 + markup -> input -> parser -> tree -> evaluation -> tree -> serialiser ->
7.45 + theme -> output -> pages;
7.46 +}
7.47 +}}}
7.48 +
7.49 +##########
7.50 +
7.51 +Although it is obviously possible to use the MoinMoin software (hereafter
7.52 +referred to as Moin) to work such such content, there are a few advantages in
7.53 +developing independent tools instead:
7.54 +
7.55 + * To eliminate any dependency on the Moin code, its bundled libraries, or on
7.56 + its external dependencies (of which there are many for Moin 2.0)
7.57 +
7.58 + * To focus on areas of functionality that are considered priorities, such as
7.59 + the publishing of content as static Web sites, which may not be adequately
7.60 + or optimally supported by Moin
7.61 +
7.62 + * To provide other implementations of parsers and serialisers for the markup
7.63 + format, thus establishing it as more genuinely interoperable markup
7.64 + standard
7.65 +
7.66 + * To be able to work with the content more easily and to develop tools for
7.67 + doing so
7.68 +
7.69 +The wiki format is described in the [[/MoinSyntax|syntax documentation]].
7.70 +
7.71 +== Getting Started ==
7.72 +
7.73 +To convert a collection of wiki pages in a directory (with `pages` containing
7.74 +the original pages and `htdocs` being the desired output directory), run the
7.75 +`moinconvert` program as follows:
7.76 +
7.77 +{{{
7.78 +moinconvert --input-dir pages --output-dir htdocs --all
7.79 +}}}
7.80 +
7.81 +To convert a single file from such a collection (such as `FrontPage`), run the
7.82 +program as follows:
7.83 +
7.84 +{{{
7.85 +moinconvert --input-dir pages FrontPage
7.86 +}}}
7.87 +
7.88 +This will produce the serialised page on standard output rather than writing
7.89 +it to a file.
7.90 +
7.91 +Other options are typically useful when running the program, such as `--theme`
7.92 +for styling and wrapping the output, `--macros` for expanding macros in
7.93 +documents, and `--format` for choosing alternative output formats.
7.94 +
7.95 +See [[/moinconvert]] for more information on the `moinconvert` program.
7.96 +
7.97 +== Abstractions and Architecture ==
7.98 +
7.99 +MoinLight provides a number of abstractions for working with Moin wiki content:
7.100 +
7.101 + * [[/Input]] contexts permit the interpretation of existing content in
7.102 + certain ways so that a collection of text files can be treated like a wiki
7.103 +
7.104 + * [[/Output]] contexts permit the publishing of content in certain
7.105 + ways so that wiki content can be shared on the Web
7.106 +
7.107 + * [[/Macros]] define locations in documents where content is to be inserted
7.108 + or expanded
7.109 +
7.110 + * [[/Metadata]] is used to configure the processing of content by defining
7.111 + the different abstractions involved
7.112 +
7.113 + * [[/Parsers]] interpret various forms of markup-related content, producing a
7.114 + document tree representation that can be inspected and processed
7.115 +
7.116 + * [[/Serialisers]] convert the document tree representation into other
7.117 + content formats such as HTML or even back into Moin format
7.118 +
7.119 + * [[/Themes]] augment serialised content with additional details and
7.120 + resources
7.121 +
7.122 +A major objective with MoinLight is to be able to produce static files that
7.123 +can be served using a typical Web server without any need for scripts,
7.124 +applications or other kinds of dynamic content. Other objectives are described
7.125 +in the [[/Roadmap]] document.
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
8.2 +++ b/docs/wiki/MoinSyntax Tue Apr 16 23:37:54 2019 +0200
8.3 @@ -0,0 +1,123 @@
8.4 += Moin Format Syntax =
8.5 +
8.6 +The syntax of the wiki format is described in various locations on the
8.7 +[[MoinMoin:]] site:
8.8 +
8.9 + * [[MoinMoin:HelpOnMoinWikiSyntax]]
8.10 + * [[MoinMoin:HelpOnEditing]]
8.11 +
8.12 +Various enhancements are introduced in MoinLight, and these are described
8.13 +below.
8.14 +
8.15 +== Anchor ==
8.16 +
8.17 +Introduce an anchor employing a fragment identifier that can be reached by a
8.18 +link employing the identifier. For example, [[#end]] is a link to the anchor
8.19 +{{{((end))}}} near the end of this page.
8.20 +
8.21 +=== Syntax ===
8.22 +
8.23 +{{{
8.24 +((identifier))
8.25 +}}}
8.26 +
8.27 +Here, `identifier` is the fragment identifier for the anchor.
8.28 +
8.29 +=== Related ===
8.30 +
8.31 +The {{{<<Anchor(identifier)>>}}} macro has the same function.
8.32 +
8.33 +== Line Break ==
8.34 +
8.35 +Introduces a line break in the page. For example:
8.36 +
8.37 +Above\\Below
8.38 +
8.39 +=== Syntax ===
8.40 +
8.41 +{{{
8.42 +Above
8.43 +\\
8.44 +Below
8.45 +}}}
8.46 +
8.47 +Here, {{{\\}}} is the line break symbol.
8.48 +
8.49 +=== Related ===
8.50 +
8.51 +The {{{<<BR>>}}} macro has the same function.
8.52 +
8.53 +== Links ==
8.54 +
8.55 +Link syntax remains largely compatible with Moin, but it is possible to break
8.56 +links across lines. For example:
8.57 +
8.58 +[[MoinSyntax|a description of a link to the Moin format syntax
8.59 +wrapped across multiple lines]]
8.60 +
8.61 +=== Syntax ===
8.62 +
8.63 +{{{
8.64 +[[MoinSyntax|a description of a link to the Moin format syntax
8.65 +wrapped across multiple lines]]
8.66 +}}}
8.67 +
8.68 +=== Related ===
8.69 +
8.70 +The [[MoinMoin:HelpOnLinking|Moin link syntax]] applies, including the
8.71 +transclusion syntax.
8.72 +
8.73 +== Table Regions ==
8.74 +
8.75 +Provides a more readable and convenient way of describing tables. For example:
8.76 +
8.77 +{{{#!table
8.78 +Top Left || Top Right
8.79 +==
8.80 +Bottom Left || Bottom Right
8.81 + .. (continued)
8.82 +}}}
8.83 +
8.84 +=== Syntax ===
8.85 +
8.86 +{{{{
8.87 +{{{#!table
8.88 +Top Left || Top Right
8.89 +==
8.90 +Bottom Left || Bottom Right
8.91 + .. (continued)
8.92 +}}}
8.93 +}}}}
8.94 +
8.95 +=== Related ===
8.96 +
8.97 +Provides mostly the same functionality as the MoinMoin extension
8.98 +[[MoinMoin:ParserMarket/ImprovedTableParser|ImprovedTableParser]].
8.99 +
8.100 +== Verbatim ==
8.101 +
8.102 +Introduce text verbatim in the page, ignoring any other markup features that
8.103 +may be present. For example:
8.104 +
8.105 +<<<some ''verbatim''
8.106 +text>>>
8.107 +
8.108 +=== Syntax ===
8.109 +
8.110 +{{{
8.111 +<<<some ''verbatim''
8.112 +text>>>
8.113 +}}}
8.114 +
8.115 +Here, {{{<<<}}} and {{{>>>}}} enclose the verbatim text.
8.116 +
8.117 +=== Related ===
8.118 +
8.119 +The {{{<<Verbatim(some ''verbatim'' text)>>}}} macro has a similar function,
8.120 +but being a macro it imposes limitations on the enclosed content, such as not
8.121 +permitting newlines.
8.122 +
8.123 +----
8.124 +
8.125 +((end))
8.126 +A demonstration of the [[#Anchor|anchor]] syntax.
9.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
9.2 +++ b/docs/wiki/Output Tue Apr 16 23:37:54 2019 +0200
9.3 @@ -0,0 +1,32 @@
9.4 += Output =
9.5 +
9.6 +Output contexts determine the form of converted wiki content. As with [[Input|
9.7 +input contexts]], typical forms will include a single file representing a wiki
9.8 +page or collections of files arranged within a directory hierarchy.
9.9 +
9.10 +The supported output contexts are described below.
9.11 +
9.12 +== Directory ==
9.13 +
9.14 +A directory containing wiki page resources in a hierarchy.
9.15 +
9.16 +[[Metadata#output_context|output_context]]: `directory`
9.17 +
9.18 +Each converted wiki page will reside at a path within the hierarchy
9.19 +corresponding to the page name, with top-level pages residing directly within
9.20 +the top-level output directory, and with subpages residing within the
9.21 +directories of their parents.
9.22 +
9.23 +Page content is stored in index files within each page
9.24 +directory, typically `index.html` (defined by the [[Metadata#index_name|
9.25 +index_name]] metadata property), with the designated [[Metadata#root|root]]
9.26 +page content appearing in the index file directly inside the top-level output
9.27 +directory.
9.28 +
9.29 +== Standalone ==
9.30 +
9.31 +A standalone wiki page file.
9.32 +
9.33 +[[Metadata#output_context|output_context]]: `standalone`
9.34 +
9.35 +A single file containing a single wiki page.
10.1 --- a/docs/wiki/Parsers Sun Apr 14 00:29:40 2019 +0200
10.2 +++ b/docs/wiki/Parsers Tue Apr 16 23:37:54 2019 +0200
10.3 @@ -5,17 +5,16 @@
10.4 {{{#!table
10.5 '''Name''' || '''Format''' || '''Details'''
10.6 ==
10.7 -graphviz
10.8 +`graphviz`
10.9 || [[http://graphviz.org/|Graphviz]] DOT language
10.10 || A complete graph description with optional processing directives
10.11 ==
10.12 -moin
10.13 +`moin`
10.14 || [[https://moinmo.in/|Moin]] markup
10.15 -|| Plain text with additional
10.16 -.. [[https://moinmo.in/HelpOnMoinWikiSyntax|syntax]] for formatting
10.17 +|| Plain text with additional [[MoinSyntax|syntax]] for formatting
10.18 ==
10.19 -table
10.20 +`table`
10.21 || Multiline table
10.22 || Moin markup with multiline table
10.23 -.. [[https://moinmo.in/ParserMarket/ImprovedTableParser|syntax enhancements]]
10.24 +.. [[MoinSyntax#Table Regions|syntax enhancements]]
10.25 }}}
11.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
11.2 +++ b/docs/wiki/Serialisers Tue Apr 16 23:37:54 2019 +0200
11.3 @@ -0,0 +1,21 @@
11.4 += Serialisers =
11.5 +
11.6 +Serialisers convert page content, producing output in a particular format.
11.7 +The following serialisers are currently supported:
11.8 +
11.9 +{{{#!table
11.10 +'''Name''' || '''Format''' || '''Details'''
11.11 +==
11.12 +`html`
11.13 +|| HTML markup format
11.14 +|| Without a [[Themes|theme]] applied to the output, only a document fragment
11.15 +.. is produced; otherwise, a complete document should be produced
11.16 +==
11.17 +`moin`
11.18 +|| [[MoinSyntax|Moin]] markup format
11.19 +|| The output should correspond to the input provided to the
11.20 +.. [[Parsers|parser]]
11.21 +}}}
11.22 +
11.23 +Within each serialiser's package, parser-specific modules handle the document
11.24 +nodes created by each different [[Parsers|parser]].
12.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
12.2 +++ b/docs/wiki/Themes Tue Apr 16 23:37:54 2019 +0200
12.3 @@ -0,0 +1,16 @@
12.4 += Themes =
12.5 +
12.6 +For certain [[Output|output]] formats, themes can be applied to the converted
12.7 +documents to produce content that can be usefully published. Typically, this
12.8 +applies only to HTML format documents.
12.9 +
12.10 +Currently, the following themes are defined:
12.11 +
12.12 +{{{#!table
12.13 +'''Name''' || '''Description'''
12.14 +==
12.15 +`default` || A simple HTML document theme with minimal decoration
12.16 +==
12.17 +`mercurial` || A relatively clean theme resembling that of the Mercurial Web
12.18 + .. site
12.19 +}}}
13.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
13.2 +++ b/docs/wiki/moinconvert Tue Apr 16 23:37:54 2019 +0200
13.3 @@ -0,0 +1,11 @@
13.4 += moinconvert =
13.5 +
13.6 +The `moinconvert` program is the principal means of converting content using
13.7 +MoinLight. Its help message can be obtained as follows:
13.8 +
13.9 +{{{
13.10 +moinconvert --help
13.11 +}}}
13.12 +
13.13 +The program employs command options to configure the conversion [[Metadata|
13.14 +metadata]], then converts the indicated content to the desired form.
14.1 --- a/moinformat/input/directory.py Sun Apr 14 00:29:40 2019 +0200
14.2 +++ b/moinformat/input/directory.py Tue Apr 16 23:37:54 2019 +0200
14.3 @@ -51,7 +51,7 @@
14.4
14.5 # Support attachments directories.
14.6
14.7 - self.attachments_dir = metadata.get("attachments", "attachments")
14.8 + self.attachments_dir = metadata.get("attachments")
14.9
14.10 def all(self):
14.11
15.1 --- a/moinformat/links/common.py Sun Apr 14 00:29:40 2019 +0200
15.2 +++ b/moinformat/links/common.py Tue Apr 16 23:37:54 2019 +0200
15.3 @@ -67,8 +67,8 @@
15.4 # Obtain essential metadata.
15.5
15.6 self.mapping = metadata.get("mapping", {})
15.7 - self.root_pagename = metadata.get("root_pagename", "FrontPage")
15.8 - self.attachments_dir = metadata.get("attachments", "attachments")
15.9 + self.root_pagename = metadata.get("root_pagename")
15.10 + self.attachments_dir = metadata.get("attachments")
15.11
15.12 def resolve(path, pagename, root_pagename):
15.13
16.1 --- a/moinformat/links/html.py Sun Apr 14 00:29:40 2019 +0200
16.2 +++ b/moinformat/links/html.py Tue Apr 16 23:37:54 2019 +0200
16.3 @@ -135,13 +135,15 @@
16.4 # Attachment links.
16.5
16.6 if type == "attachment":
16.7 - return Link(self.translate_attachment(identifier), identifier, target)
16.8 + return Link(self.translate_attachment(identifier),
16.9 + identifier, target)
16.10
16.11 # Interwiki links.
16.12
16.13 url = self.mapping.get(type)
16.14 if url:
16.15 - return Link(self.translate_interwiki(url, identifier), identifier, target)
16.16 + return Link(self.translate_interwiki(url, identifier),
16.17 + identifier or type, target)
16.18
16.19 return None
16.20
17.1 --- a/moinformat/macros/attachlist.py Sun Apr 14 00:29:40 2019 +0200
17.2 +++ b/moinformat/macros/attachlist.py Tue Apr 16 23:37:54 2019 +0200
17.3 @@ -19,6 +19,7 @@
17.4 this program. If not, see <http://www.gnu.org/licenses/>.
17.5 """
17.6
17.7 +from mimetypes import guess_type
17.8 from moinformat.macros.common import Macro
17.9 from moinformat.tree.moin import Link, LinkLabel, List, ListItem, Text
17.10 from moinformat.utils.links import LinkTarget
17.11 @@ -43,10 +44,26 @@
17.12 # Access the input context to get the attachment details.
17.13
17.14 input = self.metadata.get_input()
17.15 - filenames = pagename and input.get_attachments(pagename) or []
17.16
17.17 # Select attachments by type.
17.18 - # NOTE: To do.
17.19 +
17.20 + all_filenames = pagename and input.get_attachments(pagename) or []
17.21 +
17.22 + if mimetype:
17.23 + filenames = []
17.24 +
17.25 + for filename in all_filenames:
17.26 + type, encoding = guess_type(filename)
17.27 +
17.28 + if type == mimetype:
17.29 + filenames.append(filename)
17.30 + else:
17.31 + filenames = all_filenames
17.32 +
17.33 + # Sort the filenames.
17.34 + # NOTE: The actual sort order should be controlled.
17.35 +
17.36 + filenames.sort()
17.37
17.38 # Prepare a list of links.
17.39
18.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
18.2 +++ b/moinformat/macros/mailto.py Tue Apr 16 23:37:54 2019 +0200
18.3 @@ -0,0 +1,71 @@
18.4 +#!/usr/bin/env python
18.5 +
18.6 +"""
18.7 +Mail-to macro for Moin compatibility.
18.8 +
18.9 +Copyright (C) 2019 Paul Boddie <paul@boddie.org.uk>
18.10 +
18.11 +This program is free software; you can redistribute it and/or modify it under
18.12 +the terms of the GNU General Public License as published by the Free Software
18.13 +Foundation; either version 3 of the License, or (at your option) any later
18.14 +version.
18.15 +
18.16 +This program is distributed in the hope that it will be useful, but WITHOUT
18.17 +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
18.18 +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
18.19 +details.
18.20 +
18.21 +You should have received a copy of the GNU General Public License along with
18.22 +this program. If not, see <http://www.gnu.org/licenses/>.
18.23 +"""
18.24 +
18.25 +from moinformat.macros.common import Macro
18.26 +from moinformat.tree.moin import Link, LinkLabel, Text
18.27 +from moinformat.utils.links import LinkTarget
18.28 +
18.29 +def get_address(label):
18.30 +
18.31 + "Decode the address found in 'label'."
18.32 +
18.33 + l = []
18.34 + d = {"AT" : "@", "DASH" : "-", "DOT" : "."}
18.35 +
18.36 + for word in label.split():
18.37 + if d.has_key(word):
18.38 + l.append(d[word])
18.39 + elif not word.isupper():
18.40 + l.append(word)
18.41 +
18.42 + return u"".join(l)
18.43 +
18.44 +class MailToMacro(Macro):
18.45 +
18.46 + "A mail-to macro."
18.47 +
18.48 + name = "MailTo"
18.49 +
18.50 + def evaluate(self):
18.51 +
18.52 + "Evaluate the macro, producing a mailto link."
18.53 +
18.54 + # Replace the macro node with the link.
18.55 +
18.56 + macro = self.node
18.57 + args = self.node.args
18.58 +
18.59 + # Obtain a label and an address.
18.60 +
18.61 + label = args and args[0] or None
18.62 + address = get_address(label)
18.63 +
18.64 + if address:
18.65 + link = Link([LinkLabel([Text(label)])],
18.66 + LinkTarget("url", "mailto:%s" % address))
18.67 + else:
18.68 + link = Text("")
18.69 +
18.70 + macro.parent.replace(macro, link)
18.71 +
18.72 +macro = MailToMacro
18.73 +
18.74 +# vim: tabstop=4 expandtab shiftwidth=4
19.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
19.2 +++ b/moinformat/macros/pagelist.py Tue Apr 16 23:37:54 2019 +0200
19.3 @@ -0,0 +1,81 @@
19.4 +#!/usr/bin/env python
19.5 +
19.6 +"""
19.7 +PageList macro for Moin compatibility.
19.8 +
19.9 +Copyright (C) 2019 Paul Boddie <paul@boddie.org.uk>
19.10 +
19.11 +This program is free software; you can redistribute it and/or modify it under
19.12 +the terms of the GNU General Public License as published by the Free Software
19.13 +Foundation; either version 3 of the License, or (at your option) any later
19.14 +version.
19.15 +
19.16 +This program is distributed in the hope that it will be useful, but WITHOUT
19.17 +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
19.18 +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
19.19 +details.
19.20 +
19.21 +You should have received a copy of the GNU General Public License along with
19.22 +this program. If not, see <http://www.gnu.org/licenses/>.
19.23 +"""
19.24 +
19.25 +from moinformat.macros.common import Macro
19.26 +from moinformat.tree.moin import Link, LinkLabel, List, ListItem, Text
19.27 +from moinformat.utils.links import LinkTarget
19.28 +
19.29 +class PageListMacro(Macro):
19.30 +
19.31 + "A page list macro."
19.32 +
19.33 + name = "PageList"
19.34 +
19.35 + def evaluate(self):
19.36 +
19.37 + "Evaluate the macro, producing a list of pages."
19.38 +
19.39 + # Obtain the parameters.
19.40 +
19.41 + args = self.node.args
19.42 + pattern = args and args[0] or None
19.43 +
19.44 + # Access the input context to get page details.
19.45 +
19.46 + input = self.metadata.get_input()
19.47 +
19.48 + # Select pages according to the parameters.
19.49 + # NOTE: Currently using prefix matching only.
19.50 +
19.51 + if pattern:
19.52 + pagenames = []
19.53 + for pagename in input.all():
19.54 + if pagename.startswith(pattern):
19.55 + pagenames.append(pagename)
19.56 + else:
19.57 + pagenames = input.all()
19.58 +
19.59 + # Sort the pagenames.
19.60 + # NOTE: The actual sort order should be controlled.
19.61 +
19.62 + pagenames.sort()
19.63 +
19.64 + # Prepare a list of links.
19.65 +
19.66 + items = []
19.67 + indent = 0
19.68 + marker = "*"
19.69 + space = " "
19.70 + num = None
19.71 +
19.72 + for pagename in pagenames:
19.73 + text = [Text(pagename)]
19.74 + nodes = [Link([LinkLabel(text)], LinkTarget("page", pagename))]
19.75 + items.append(ListItem(nodes, indent, marker, space, num))
19.76 +
19.77 + # Replace the macro node with the list.
19.78 +
19.79 + macro = self.node
19.80 + macro.parent.replace(macro, List(items))
19.81 +
19.82 +macro = PageListMacro
19.83 +
19.84 +# vim: tabstop=4 expandtab shiftwidth=4
20.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
20.2 +++ b/moinformat/macros/verbatim.py Tue Apr 16 23:37:54 2019 +0200
20.3 @@ -0,0 +1,42 @@
20.4 +#!/usr/bin/env python
20.5 +
20.6 +"""
20.7 +Verbatim macro for Moin compatibility.
20.8 +
20.9 +Copyright (C) 2019 Paul Boddie <paul@boddie.org.uk>
20.10 +
20.11 +This program is free software; you can redistribute it and/or modify it under
20.12 +the terms of the GNU General Public License as published by the Free Software
20.13 +Foundation; either version 3 of the License, or (at your option) any later
20.14 +version.
20.15 +
20.16 +This program is distributed in the hope that it will be useful, but WITHOUT
20.17 +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
20.18 +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
20.19 +details.
20.20 +
20.21 +You should have received a copy of the GNU General Public License along with
20.22 +this program. If not, see <http://www.gnu.org/licenses/>.
20.23 +"""
20.24 +
20.25 +from moinformat.macros.common import Macro
20.26 +from moinformat.tree.moin import Verbatim
20.27 +
20.28 +class VerbatimMacro(Macro):
20.29 +
20.30 + "A verbatim text macro."
20.31 +
20.32 + name = "Verbatim"
20.33 +
20.34 + def evaluate(self):
20.35 +
20.36 + "Evaluate the macro, producing a verbatim text node."
20.37 +
20.38 + # Replace the macro node with the verbatim node.
20.39 +
20.40 + macro = self.node
20.41 + macro.parent.replace(macro, Verbatim(",".join(self.node.args)))
20.42 +
20.43 +macro = VerbatimMacro
20.44 +
20.45 +# vim: tabstop=4 expandtab shiftwidth=4
21.1 --- a/moinformat/metadata.py Sun Apr 14 00:29:40 2019 +0200
21.2 +++ b/moinformat/metadata.py Tue Apr 16 23:37:54 2019 +0200
21.3 @@ -3,7 +3,7 @@
21.4 """
21.5 Metadata for document conversion.
21.6
21.7 -Copyright (C) 2018 Paul Boddie <paul@boddie.org.uk>
21.8 +Copyright (C) 2018, 2019 Paul Boddie <paul@boddie.org.uk>
21.9
21.10 This program is free software; you can redistribute it and/or modify it under
21.11 the terms of the GNU General Public License as published by the Free Software
21.12 @@ -31,9 +31,11 @@
21.13 "Metadata employed in the document conversion process."
21.14
21.15 defaults = {
21.16 + "attachments" : "attachments",
21.17 "input_format" : "moin",
21.18 "output_context" : "standalone",
21.19 "output_format" : "moin",
21.20 + "root_pagename" : "FrontPage",
21.21 }
21.22
21.23 default_effects = {
22.1 --- a/moinformat/output/directory.py Sun Apr 14 00:29:40 2019 +0200
22.2 +++ b/moinformat/output/directory.py Tue Apr 16 23:37:54 2019 +0200
22.3 @@ -40,10 +40,14 @@
22.4 self.dir = Directory(metadata.get("output_filename"))
22.5 self.dir.ensure()
22.6
22.7 - self.index_name = metadata.get("index_name", "index.html")
22.8 + # Use any document index setting as the default for the index filename.
22.9 +
22.10 + document_index = metadata.get("document_index", "index.html")
22.11 +
22.12 + self.index_name = metadata.get("index_name", document_index)
22.13 self.page_suffix = metadata.get("page_suffix", "%shtml" % extsep)
22.14 - self.root_pagename = metadata.get("root_pagename", "FrontPage")
22.15 - self.attachments_dir = metadata.get("attachments", "attachments")
22.16 + self.root_pagename = metadata.get("root_pagename")
22.17 + self.attachments_dir = metadata.get("attachments")
22.18
22.19 # Convenience methods.
22.20
23.1 --- a/moinformat/parsers/common.py Sun Apr 14 00:29:40 2019 +0200
23.2 +++ b/moinformat/parsers/common.py Tue Apr 16 23:37:54 2019 +0200
23.3 @@ -3,7 +3,7 @@
23.4 """
23.5 Moin wiki parsing functionality.
23.6
23.7 -Copyright (C) 2017, 2018 Paul Boddie <paul@boddie.org.uk>
23.8 +Copyright (C) 2017, 2018, 2019 Paul Boddie <paul@boddie.org.uk>
23.9
23.10 This program is free software; you can redistribute it and/or modify it under
23.11 the terms of the GNU General Public License as published by the Free Software
23.12 @@ -434,22 +434,28 @@
23.13 the 'region' object.
23.14 """
23.15
23.16 - while True:
23.17 - preceding = self.read_until(["directive"], False)
23.18 + try:
23.19 + while True:
23.20 + preceding = self.read_until(["directive"], False)
23.21
23.22 - # With an immediately-appearing directive, handle its details.
23.23 + # With an immediately-appearing directive, handle its details.
23.24
23.25 - if preceding == "":
23.26 - handler = self.handlers.get(self.matching_pattern())
23.27 - if handler:
23.28 - handler(self, region)
23.29 + if preceding == "":
23.30 + handler = self.handlers.get(self.matching_pattern())
23.31 + if handler:
23.32 + handler(self, region)
23.33 + else:
23.34 + break
23.35 +
23.36 + # Otherwise, with no immediate directive (or none at all), stop.
23.37 +
23.38 else:
23.39 break
23.40
23.41 - # Otherwise, with no immediate directive (or none at all), stop.
23.42 + # Handle a premature end of region.
23.43
23.44 - else:
23.45 - break
23.46 + except StopIteration:
23.47 + pass
23.48
23.49 # Parsing utilities.
23.50
24.1 --- a/moinformat/parsers/moin.py Sun Apr 14 00:29:40 2019 +0200
24.2 +++ b/moinformat/parsers/moin.py Tue Apr 16 23:37:54 2019 +0200
24.3 @@ -139,6 +139,8 @@
24.4
24.5 if self.headings:
24.6 metadata.set("title", self.headings[0].text_content())
24.7 + else:
24.8 + metadata.set("title", self.metadata.get("pagename"))
24.9
24.10 # Heading disambiguation.
24.11
24.12 @@ -783,13 +785,13 @@
24.13 # Links and transclusions may start inline spans.
24.14
24.15 "link" : join((r"\[\[", # [[
24.16 - group("target", r"\E*?"), # ...
24.17 + group("target", r"\P*?"), # ...
24.18 choice((r"\|", # |
24.19 group("end", r"]]"))))), # ]]
24.20
24.21 "transclusion" : join((r"\{\{", # {{
24.22 excl(r"\{"), # not-{
24.23 - group("target", ".*?"), # ...
24.24 + group("target", r"\P*?"), # ...
24.25 choice((r"\|", # |
24.26 group("end", r"}}"))))), # }}
24.27
24.28 @@ -810,7 +812,7 @@
24.29 ">>")), # >>
24.30
24.31 "verbatim" : join(("<<<", # <<<
24.32 - group("verbatim", ".*?"), # ...
24.33 + group("verbatim", r"\P*?"), # ...
24.34 ">>>")),
24.35
24.36 # Ending patterns for inline features:
25.1 --- a/moinformat/serialisers/html/moin.py Sun Apr 14 00:29:40 2019 +0200
25.2 +++ b/moinformat/serialisers/html/moin.py Tue Apr 16 23:37:54 2019 +0200
25.3 @@ -3,7 +3,7 @@
25.4 """
25.5 HTML serialiser.
25.6
25.7 -Copyright (C) 2017, 2018 Paul Boddie <paul@boddie.org.uk>
25.8 +Copyright (C) 2017, 2018, 2019 Paul Boddie <paul@boddie.org.uk>
25.9
25.10 This program is free software; you can redistribute it and/or modify it under
25.11 the terms of the GNU General Public License as published by the Free Software
25.12 @@ -20,7 +20,8 @@
25.13 """
25.14
25.15 from moinformat.serialisers.common import escape_attr, escape_text, Serialiser
25.16 -from moinformat.tree.moin import LinkLabel, LinkParameter
25.17 +from moinformat.tree.moin import LinkLabel, LinkParameter, Text
25.18 +from moinformat.utils.links import parse_link_target
25.19
25.20 class HTMLSerialiser(Serialiser):
25.21
25.22 @@ -59,6 +60,12 @@
25.23 out("type-%s" % escape_attr(type or "opaque"))
25.24
25.25 tag = self._region_tag(type)
25.26 +
25.27 + # Inline regions must preserve "indent" as space in the text.
25.28 +
25.29 + if type == "inline" and indent:
25.30 + self.out(" " * indent)
25.31 +
25.32 self.out("<%s class='%s'>" % (tag, " ".join(l)))
25.33
25.34 def end_region(self, level, indent, type, extra):
25.35 @@ -247,7 +254,20 @@
25.36 pass
25.37
25.38 def directive(self, directive, extra):
25.39 - pass
25.40 + name, text = directive.split(None, 1)
25.41 +
25.42 + # Produce a readable redirect.
25.43 +
25.44 + if name.lower() == "redirect":
25.45 + self.start_block()
25.46 +
25.47 + # Process the redirect argument as a link target, producing a link
25.48 + # element.
25.49 +
25.50 + target = parse_link_target(text, self.metadata)
25.51 + self._link(target, [LinkLabel([Text(text)])], "a", "href")
25.52 +
25.53 + self.end_block()
25.54
25.55 def linebreak(self):
25.56 self.out("<br />")
26.1 --- a/moinformat/tree/moin.py Sun Apr 14 00:29:40 2019 +0200
26.2 +++ b/moinformat/tree/moin.py Tue Apr 16 23:37:54 2019 +0200
26.3 @@ -418,7 +418,9 @@
26.4 return "List(%r)" % self.nodes
26.5
26.6 def prettyprint(self, indent=""):
26.7 - l = ["%sList: indent=%d marker=%r num=%r" % (indent, self.indent, self.marker, self.num)]
26.8 + if not self.first:
26.9 + self.init()
26.10 + l = ["%sList: indent=%r marker=%r num=%r" % (indent, self.indent, self.marker, self.num)]
26.11 return self._prettyprint(l, indent)
26.12
26.13 def to_string(self, out):
27.1 --- a/moinformat/utils/links.py Sun Apr 14 00:29:40 2019 +0200
27.2 +++ b/moinformat/utils/links.py Tue Apr 16 23:37:54 2019 +0200
27.3 @@ -42,7 +42,10 @@
27.4 __unicode__ = __str__
27.5
27.6 def get_identifier(self):
27.7 - return self.identifier or self.text
27.8 + if self.identifier is not None:
27.9 + return self.identifier
27.10 + else:
27.11 + return self.text
27.12
27.13 def get_text(self):
27.14 return self.text
28.1 --- a/tests/test_formatting.txt Sun Apr 14 00:29:40 2019 +0200
28.2 +++ b/tests/test_formatting.txt Tue Apr 16 23:37:54 2019 +0200
28.3 @@ -16,7 +16,8 @@
28.4
28.5 Some --(deleted)-- text.
28.6
28.7 -Some <<<verbatim, __not underlined__ text>>>.
28.8 +Some <<<verbatim, __not underlined__ text,
28.9 +wrapped>>>.
28.10
28.11 Some ^superscript text
28.12 wrapped^.
29.1 --- a/tests/test_links.tree Sun Apr 14 00:29:40 2019 +0200
29.2 +++ b/tests/test_links.tree Tue Apr 16 23:37:54 2019 +0200
29.3 @@ -74,3 +74,9 @@
29.4 Text
29.5 Link
29.6 Text
29.7 + Break
29.8 + Block
29.9 + Text
29.10 + Break
29.11 + Block
29.12 + Text
30.1 --- a/tests/test_links.txt Sun Apr 14 00:29:40 2019 +0200
30.2 +++ b/tests/test_links.txt Tue Apr 16 23:37:54 2019 +0200
30.3 @@ -12,3 +12,7 @@
30.4 link|wrapped link with label]], a [[link|link with
30.5 wrapped label]], and a [[#wrapped
30.6 intra-page link]].
30.7 +
30.8 +Do not allow [[links
30.9 +
30.10 +broken into separate paragraphs]].
31.1 --- a/tests/test_macros.tree Sun Apr 14 00:29:40 2019 +0200
31.2 +++ b/tests/test_macros.tree Tue Apr 16 23:37:54 2019 +0200
31.3 @@ -18,3 +18,8 @@
31.4 Text
31.5 Macro
31.6 Text
31.7 + Break
31.8 + Block
31.9 + Text
31.10 + Macro
31.11 + Text
32.1 --- a/tests/test_macros.tree-exp Sun Apr 14 00:29:40 2019 +0200
32.2 +++ b/tests/test_macros.tree-exp Tue Apr 16 23:37:54 2019 +0200
32.3 @@ -33,3 +33,8 @@
32.4 Text
32.5 LineBreak
32.6 Text
32.7 + Break
32.8 + Block
32.9 + Text
32.10 + Verbatim
32.11 + Text
33.1 --- a/tests/test_macros.txt Sun Apr 14 00:29:40 2019 +0200
33.2 +++ b/tests/test_macros.txt Tue Apr 16 23:37:54 2019 +0200
33.3 @@ -7,3 +7,5 @@
33.4 == Subheading ==
33.5
33.6 More<<BR>>text.
33.7 +
33.8 +Some <<Verbatim(''verbatim'' text)>>.