kopia lustrzana https://github.com/miklobit/TiddlyWiki5
More details of parsing and rendering added to readme
rodzic
50e11a0da8
commit
d3ede70757
73
readme.md
73
readme.md
|
@ -369,3 +369,76 @@ Cooks a TiddlyWiki HTML file from the recipe and returns it as a string.
|
||||||
#### recipe.cookRss()
|
#### recipe.cookRss()
|
||||||
|
|
||||||
Cooks a TiddlyWiki RSS file from the recipe and returns it as a string.
|
Cooks a TiddlyWiki RSS file from the recipe and returns it as a string.
|
||||||
|
|
||||||
|
## Parsing and rendering wiki text
|
||||||
|
|
||||||
|
Wiki text is parsed into a simple object tree format. The parser doesn't need access to a WikiStore, nor does it need to know which tiddler, if any, the text it is parsing came from. This means that the parse tree can be cached within a tiddler when needed, and that parse trees can exist independently of tiddlers and WikiStores.
|
||||||
|
|
||||||
|
Rendering converts the parse tree into a textual format. The process requires access to a WikiStore so that it can resolve references to other tiddlers. It also needs to know which tiddler to use as the context for rendering the parse tree - this is the tiddler that is referenced by the `<<view>>` macro, for example.
|
||||||
|
|
||||||
|
### Parse tree format
|
||||||
|
|
||||||
|
The parse tree described here is defined as part of the WikiTextParser; other text processors could choose to represent their parse trees differently. However, it is hoped that this format is a sufficiently generic, transparent representation of HTML (and SVG) that it could be used by many other parsers, allowing the rendering engine, and macro processing, to be shared across parsers.
|
||||||
|
|
||||||
|
HTML elements are represented as:
|
||||||
|
|
||||||
|
{type: "div", attributes: {
|
||||||
|
attr1: value,
|
||||||
|
style: {
|
||||||
|
name: value,
|
||||||
|
name2: value2
|
||||||
|
}
|
||||||
|
}, children: [
|
||||||
|
{child},
|
||||||
|
{child},
|
||||||
|
]}
|
||||||
|
|
||||||
|
Text nodes are represented as:
|
||||||
|
|
||||||
|
{type: "text", value: "string of text node"}
|
||||||
|
|
||||||
|
Macros are represented as:
|
||||||
|
|
||||||
|
{type: "macro", name: "macroname", params: "parameter string", output: [<outputtree]}
|
||||||
|
|
||||||
|
Note that the macro output is only added to the tree during rendering.
|
||||||
|
|
||||||
|
The parse tree can also contain context frames:
|
||||||
|
|
||||||
|
{type: "context", tiddler: "title", children: [<childnodes>]}
|
||||||
|
|
||||||
|
Context frames are explained further in the section on rendering below.
|
||||||
|
|
||||||
|
### Rendering process
|
||||||
|
|
||||||
|
Wiki text rendering requires:
|
||||||
|
|
||||||
|
* the MIME type of the target format (currently `text/plain` or `text/html`)
|
||||||
|
* the parse tree to be rendered
|
||||||
|
* the WikiStore object to be used for resolving references to other tiddlers
|
||||||
|
* the title of the tiddler to use as the rendering context
|
||||||
|
|
||||||
|
The rendering process is to recursively scan the parse tree and stitch together the fragments making up the HTML elements corresponding to the nodes of the tree.
|
||||||
|
|
||||||
|
Macros are executed during rendering, which involves invoking the named macro handler with the macro parameter string, and a reference to the parse tree node for the macro. The handler then inserts the output parse tree into the `output` member of the macro node.
|
||||||
|
|
||||||
|
The `<<tiddler>>` macro doesn't change the tiddler context for its children. This means that when you transclude a tiddler, any `<<view>>` macros within it reference the fields of the tiddler that did the transcluding.
|
||||||
|
|
||||||
|
The list macro uses transcluding in a slightly different way as a form of templating. For example:
|
||||||
|
|
||||||
|
<<list all template:MyTiddler>>
|
||||||
|
|
||||||
|
Here, `MyTiddler` specifies the information that should be displayed about each tiddler. In this example, there is a link to the tiddler, a link to the author, and the modification date:
|
||||||
|
|
||||||
|
<<view title link>>, <<view modifier link>>, <<view modified "YYYY MM DD">>
|
||||||
|
|
||||||
|
In order to ensure that the correct target is used for these view macros, the `<<list>>`` macro creates a context frame around each list item:
|
||||||
|
|
||||||
|
{type: "li", children: [
|
||||||
|
{type: "context", tiddler: "FirstTiddler", children: [
|
||||||
|
{type: "macro", name: "view", params: "title link"},
|
||||||
|
{type: "macro", name: "view", params: "modifier link"},
|
||||||
|
{type: "macro", name: "view", params: "modified \"YYYY MM DD\""}
|
||||||
|
]}
|
||||||
|
]}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue