summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/scripts/spelling/spelling-recurse.lua
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-12-02 23:27:13 +0000
committerKarl Berry <karl@freefriends.org>2012-12-02 23:27:13 +0000
commitdf141e41c79cc6a9b97f9ac0de97b19054849e9b (patch)
tree7986468b5110a67480f1857af4ee509aed857295 /Master/texmf-dist/scripts/spelling/spelling-recurse.lua
parent8c4fc53986e6136d225c9c93382bca6607071fea (diff)
new lualatex package spelling (1dec12)
git-svn-id: svn://tug.org/texlive/trunk@28425 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/scripts/spelling/spelling-recurse.lua')
-rwxr-xr-xMaster/texmf-dist/scripts/spelling/spelling-recurse.lua110
1 files changed, 110 insertions, 0 deletions
diff --git a/Master/texmf-dist/scripts/spelling/spelling-recurse.lua b/Master/texmf-dist/scripts/spelling/spelling-recurse.lua
new file mode 100755
index 00000000000..273614d0e6c
--- /dev/null
+++ b/Master/texmf-dist/scripts/spelling/spelling-recurse.lua
@@ -0,0 +1,110 @@
+--- spelling-recurse.lua
+--- Copyright 2012 Stephan Hennig
+--
+-- This work may be distributed and/or modified under the conditions of
+-- the LaTeX Project Public License, either version 1.3 of this license
+-- or (at your option) any later version. The latest version of this
+-- license is in http://www.latex-project.org/lppl.txt
+-- and version 1.3 or later is part of all distributions of LaTeX
+-- version 2005/12/01 or later.
+--
+-- See file README for more information.
+--
+
+
+--- Helper module for recursing into a node list.
+-- This module provides means to recurse into a node list, calling
+-- user-provided call-back functions upon certain events.
+--
+-- @author Stephan Hennig
+-- @copyright 2012 Stephan Hennig
+-- @release version 0.1
+--
+-- @trick Prevent LuaDoc from looking past here for module description.
+--[[ Trick LuaDoc into entering 'module' mode without using that command.
+module(...)
+--]]
+
+
+-- Module table.
+local M = {}
+
+
+-- Function short-cuts.
+local traverse = node.traverse
+
+
+-- Short-cuts for constants.
+local HLIST = node.id('hlist')
+local VLIST = node.id('vlist')
+
+
+--- Scan a node list and call call-back functions upon certain events.
+-- This function scans a node list. Upon certain events, user-defined
+-- call-back functions are called. Call-back functions have to be
+-- provided in a table. Call-back functions and corresponding events
+-- are:
+--
+-- <dl>
+--
+-- <dt>`vlist_pre_recurse`</dt> <dd>A vlist is about to be recursed
+-- into. Argument is the vlist node.</dd>
+--
+-- <dt>`vlist_post_recurse`</dt> <dd>Recursing into a vlist has been
+-- finished. Argument is the vlist node.</dd>
+--
+-- <dt>`hlist_pre_recurse`</dt> <dd>An hlist is about to be recursed
+-- into. Argument is the hlist node.</dd>
+--
+-- <dt>`hlist_post_recurse`</dt> <dd>Recursing into a hlist has been
+-- finished. Argument is the hlist node.</dd>
+--
+-- <dt>`visit`</dt> <dd>A node of type other that `vlist` and `hlist`
+-- has been found. Arguments are the head node of the current node
+-- (head node of the current branch) and the current node.</dd>
+--
+-- </dl>
+--
+-- If a call-back entry in the table is `nil`, the corresponding event
+-- is ignored.
+--
+-- @param head Node list.
+-- @param cb Table of call-back functions.
+local function recurse_node_list(head, cb)
+ -- Make call-back functions local identifiers.
+ local cb_vlist_pre_recurse = cb.vlist_pre_recurse
+ local cb_vlist_post_recurse = cb.vlist_post_recurse
+ local cb_hlist_pre_recurse = cb.hlist_pre_recurse
+ local cb_hlist_post_recurse = cb.hlist_post_recurse
+ local cb_visit_node = cb.visit_node
+ -- Iterate over nodes in current branch.
+ for n in traverse(head) do
+ local nid = n.id
+ -- Test for vlist node.
+ if nid == VLIST then
+ -- Announce vlist pre-traversal.
+ if cb_vlist_pre_recurse then cb_vlist_pre_recurse(n) end
+ -- Recurse into 'vlist'.
+ recurse_node_list(n.head, cb)
+ -- Announce vlist post-traversal.
+ if cb_vlist_post_recurse then cb_vlist_post_recurse(n) end
+ -- Test for hlist node.
+ elseif nid == HLIST then
+ -- Announce hlist pre-traversal.
+ if cb_hlist_pre_recurse then cb_hlist_pre_recurse(n) end
+ -- Recurse into 'hlist'.
+ recurse_node_list(n.head, cb)
+ -- Announce hlist post-traversal.
+ if cb_hlist_post_recurse then cb_hlist_post_recurse(n) end
+ -- Other nodes.
+ else
+ -- Visit node.
+ if cb_visit_node then cb_visit_node(head, n) end
+ end
+ end
+end
+M.recurse_node_list = recurse_node_list
+
+
+-- Return module table.
+return M