title: ParsingMechanism tags: docs mechanism TiddlyWiki parses the content of tiddlers to build an internal tree representation that is used for several purposes: * Rendering a tiddler to other formats (e.g. converting wikitext to HTML) * Detecting outgoing links from a tiddler, and from them... * ...computing incoming links to a tiddler * Detecting tiddlers that are orphans with no incoming links * Detecting tiddlers that are referred to but missing The parse tree is built when needed, and then cached by the WikiStore until the tiddler changes. TiddlyWiki5 uses multiple parsers: * Wikitext ({{{text/x-tiddlywiki}}}) in `js/WikiTextParser.js` * JavaScript ({{{text/javascript}}}) in `js/JavaScriptParser.js` * Images ({{{image/png}}} and {{{image/jpg}}}) in `js/ImageParser.js` * JSON ({{{application/json}}}) in `js/JSONParser.js` Additional parsers are planned: * CSS ({{{text/css}}}) * Recipe ({{{text/x-tiddlywiki-recipe}}}) One global instance of each parser is instantiated in `js/App.js` and registered with the main WikiStore object. The parsers are all used the same way: $$$.js var parseTree = parser.parse(type,text) // Parses the text and returns a parse tree object $$$ The parse tree object exposes the following fields: $$$.js var renderer = parseTree.compile(type); // Compiles the parse tree into a renderer for the specified MIME type console.log(parseTree.toString(type)); // Returns a readable string representation of the parse tree (either `text/html` or `text/plain`) var dependencies = parseTree.dependencies; // Gets the dependencies of the parse tree (see below) $$$ The dependencies are returned as an object like this: {{{ { tiddlers: {"tiddlertitle1": true, "tiddlertitle2": false}, dependentAll: false } }}} The `tiddlers` field is a hashmap of the title of each tiddler that is linked or included in the current one. The value is `true` if the tiddler is a //'fat'// dependency (ie the text is included in some way) or `false` if the tiddler is a //`skinny`// dependency. The `dependentAll` field is used to indicate that the tiddler contains a macro that scans the entire pool of tiddlers (for example the `<>` macro), and is potentially dependent on any of them. The effect is that the tiddler should be rerendered whenever any other tiddler changes.