diff options
Diffstat (limited to 'admin/notes/tree-sitter/html-manual/Parser_002dbased-Font-Lock.html')
-rw-r--r-- | admin/notes/tree-sitter/html-manual/Parser_002dbased-Font-Lock.html | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/admin/notes/tree-sitter/html-manual/Parser_002dbased-Font-Lock.html b/admin/notes/tree-sitter/html-manual/Parser_002dbased-Font-Lock.html new file mode 100644 index 00000000000..ec89b7749c8 --- /dev/null +++ b/admin/notes/tree-sitter/html-manual/Parser_002dbased-Font-Lock.html @@ -0,0 +1,160 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<!-- Created by GNU Texinfo 6.8, https://www.gnu.org/software/texinfo/ --> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<!-- This is the GNU Emacs Lisp Reference Manual +corresponding to Emacs version 29.0.50. + +Copyright © 1990-1996, 1998-2022 Free Software Foundation, +Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with the +Invariant Sections being "GNU General Public License," with the +Front-Cover Texts being "A GNU Manual," and with the Back-Cover +Texts as in (a) below. A copy of the license is included in the +section entitled "GNU Free Documentation License." + +(a) The FSF's Back-Cover Text is: "You have the freedom to copy and +modify this GNU manual. Buying copies from the FSF supports it in +developing GNU and promoting software freedom." --> +<title>Parser-based Font Lock (GNU Emacs Lisp Reference Manual)</title> + +<meta name="description" content="Parser-based Font Lock (GNU Emacs Lisp Reference Manual)"> +<meta name="keywords" content="Parser-based Font Lock (GNU Emacs Lisp Reference Manual)"> +<meta name="resource-type" content="document"> +<meta name="distribution" content="global"> +<meta name="Generator" content="makeinfo"> +<meta name="viewport" content="width=device-width,initial-scale=1"> + +<link href="index.html" rel="start" title="Top"> +<link href="Index.html" rel="index" title="Index"> +<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents"> +<link href="Font-Lock-Mode.html" rel="up" title="Font Lock Mode"> +<link href="Multiline-Font-Lock.html" rel="prev" title="Multiline Font Lock"> +<style type="text/css"> +<!-- +a.copiable-anchor {visibility: hidden; text-decoration: none; line-height: 0em} +a.summary-letter {text-decoration: none} +blockquote.indentedblock {margin-right: 0em} +div.display {margin-left: 3.2em} +div.example {margin-left: 3.2em} +kbd {font-style: oblique} +pre.display {font-family: inherit} +pre.format {font-family: inherit} +pre.menu-comment {font-family: serif} +pre.menu-preformatted {font-family: serif} +span.nolinebreak {white-space: nowrap} +span.roman {font-family: initial; font-weight: normal} +span.sansserif {font-family: sans-serif; font-weight: normal} +span:hover a.copiable-anchor {visibility: visible} +ul.no-bullet {list-style: none} +--> +</style> +<link rel="stylesheet" type="text/css" href="./manual.css"> + + +</head> + +<body lang="en"> +<div class="subsection" id="Parser_002dbased-Font-Lock"> +<div class="header"> +<p> +Previous: <a href="Multiline-Font-Lock.html" accesskey="p" rel="prev">Multiline Font Lock Constructs</a>, Up: <a href="Font-Lock-Mode.html" accesskey="u" rel="up">Font Lock Mode</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p> +</div> +<hr> +<span id="Parser_002dbased-Font-Lock-1"></span><h4 class="subsection">24.6.10 Parser-based Font Lock</h4> + + +<p>Besides simple syntactic font lock and regexp-based font lock, Emacs +also provides complete syntactic font lock with the help of a parser, +currently provided by the tree-sitter library (see <a href="Parsing-Program-Source.html">Parsing Program Source</a>). +</p> +<dl class="def"> +<dt id="index-treesit_002dfont_002dlock_002denable"><span class="category">Function: </span><span><strong>treesit-font-lock-enable</strong><a href='#index-treesit_002dfont_002dlock_002denable' class='copiable-anchor'> ¶</a></span></dt> +<dd><p>This function enables parser-based font lock in the current buffer. +</p></dd></dl> + +<p>Parser-based font lock and other font lock mechanism are not mutually +exclusive. By default, if enabled, parser-based font lock runs first, +then the simple syntactic font lock (if enabled), then regexp-based +font lock. +</p> +<p>Although parser-based font lock doesn’t share the same customization +variables with regexp-based font lock, parser-based font lock uses +similar customization schemes. The tree-sitter counterpart of +<var>font-lock-keywords</var> is <var>treesit-font-lock-settings</var>. +</p> +<dl class="def"> +<dt id="index-treesit_002dfont_002dlock_002drules"><span class="category">Function: </span><span><strong>treesit-font-lock-rules</strong> <em>:keyword value query...</em><a href='#index-treesit_002dfont_002dlock_002drules' class='copiable-anchor'> ¶</a></span></dt> +<dd><p>This function is used to set <var>treesit-font-lock-settings</var>. It +takes care of compiling queries and other post-processing and outputs +a value that <var>treesit-font-lock-settings</var> accepts. An example: +</p> +<div class="example"> +<pre class="example">(treesit-font-lock-rules + :language 'javascript + :override t + '((true) @font-lock-constant-face + (false) @font-lock-constant-face) + :language 'html + "(script_element) @font-lock-builtin-face") +</pre></div> + +<p>This function takes a list of text or s-exp queries. Before each +query, there are <var>:keyword</var> and <var>value</var> pairs that configure +that query. The <code>:lang</code> keyword sets the query’s language and +every query must specify the language. Other keywords are optional: +</p> +<table> +<thead><tr><th width="15%">Keyword</th><th width="15%">Value</th><th width="60%">Description</th></tr></thead> +<tr><td width="15%"><code>:override</code></td><td width="15%">nil</td><td width="60%">If the region already has a face, discard the new face</td></tr> +<tr><td width="15%"></td><td width="15%">t</td><td width="60%">Always apply the new face</td></tr> +<tr><td width="15%"></td><td width="15%"><code>append</code></td><td width="60%">Append the new face to existing ones</td></tr> +<tr><td width="15%"></td><td width="15%"><code>prepend</code></td><td width="60%">Prepend the new face to existing ones</td></tr> +<tr><td width="15%"></td><td width="15%"><code>keep</code></td><td width="60%">Fill-in regions without an existing face</td></tr> +</table> + +<p>Capture names in <var>query</var> should be face names like +<code>font-lock-keyword-face</code>. The captured node will be fontified +with that face. Capture names can also be function names, in which +case the function is called with (<var>start</var> <var>end</var> <var>node</var>), +where <var>start</var> and <var>end</var> are the start and end position of the +node in buffer, and <var>node</var> is the node itself. If a capture name +is both a face and a function, the face takes priority. If a capture +name is not a face name nor a function name, it is ignored. +</p></dd></dl> + +<dl class="def"> +<dt id="index-treesit_002dfont_002dlock_002dsettings"><span class="category">Variable: </span><span><strong>treesit-font-lock-settings</strong><a href='#index-treesit_002dfont_002dlock_002dsettings' class='copiable-anchor'> ¶</a></span></dt> +<dd><p>A list of <var>setting</var>s for tree-sitter font lock. The exact format +of this variable is considered internal. One should always use +<code>treesit-font-lock-rules</code> to set this variable. +</p> +<p>Each <var>setting</var> is of form +</p> +<div class="example"> +<pre class="example">(<var>language</var> <var>query</var>) +</pre></div> + +<p>Each <var>setting</var> controls one parser (often of different language). +And <var>language</var> is the language symbol (see <a href="Language-Definitions.html">Tree-sitter Language Definitions</a>); <var>query</var> is the query (see <a href="Pattern-Matching.html">Pattern Matching Tree-sitter Nodes</a>). +</p></dd></dl> + +<p>Multi-language major modes should provide range functions in +<code>treesit-range-functions</code>, and Emacs will set the ranges +accordingly before fontifing a region (see <a href="Multiple-Languages.html">Parsing Text in Multiple Languages</a>). +</p> +</div> +<hr> +<div class="header"> +<p> +Previous: <a href="Multiline-Font-Lock.html">Multiline Font Lock Constructs</a>, Up: <a href="Font-Lock-Mode.html">Font Lock Mode</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html" title="Index" rel="index">Index</a>]</p> +</div> + + + +</body> +</html> |