diff options
Diffstat (limited to 'tex/context/base/typo-cln.lua')
-rw-r--r-- | tex/context/base/typo-cln.lua | 204 |
1 files changed, 102 insertions, 102 deletions
diff --git a/tex/context/base/typo-cln.lua b/tex/context/base/typo-cln.lua index 70d2f7b60..be00ac10d 100644 --- a/tex/context/base/typo-cln.lua +++ b/tex/context/base/typo-cln.lua @@ -1,102 +1,102 @@ -if not modules then modules = { } end modules ['typo-cln'] = {
- version = 1.001,
- comment = "companion to typo-cln.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
--- This quick and dirty hack took less time than listening to a CD (In
--- this case Dream Theaters' Octavium. Of course extensions will take
--- more time.
-
-local utfbyte = utf.byte
-
-local trace_cleaners = false trackers.register("typesetters.cleaners", function(v) trace_cleaners = v end)
-local trace_autocase = false trackers.register("typesetters.cleaners.autocase",function(v) trace_autocase = v end)
-
-local report_cleaners = logs.reporter("nodes","cleaners")
-local report_autocase = logs.reporter("nodes","autocase")
-
-typesetters.cleaners = typesetters.cleaners or { }
-local cleaners = typesetters.cleaners
-
-local variables = interfaces.variables
-
-local nodecodes = nodes.nodecodes
-local tasks = nodes.tasks
-
-local texattribute = tex.attribute
-
-local traverse_id = node.traverse_id
-
-local unsetvalue = attributes.unsetvalue
-
-local glyph_code = nodecodes.glyph
-local uccodes = characters.uccodes
-
-local a_cleaner = attributes.private("cleaner")
-
-local resetter = { -- this will become an entry in char-def
- [utfbyte(".")] = true
-}
-
--- Contrary to the casing code we need to keep track of a state.
--- We could extend the casing code with a status tracker but on
--- the other hand we might want to apply casing afterwards. So,
--- cleaning comes first.
-
-local function process(namespace,attribute,head)
- local inline, done = false, false
- for n in traverse_id(glyph_code,head) do
- local char = n.char
- if resetter[char] then
- inline = false
- elseif not inline then
- local a = n[attribute]
- if a == 1 then -- currently only one cleaner so no need to be fancy
- local upper = uccodes[char]
- if type(upper) == "table" then
- -- some day, not much change that \SS ends up here
- else
- n.char = upper
- done = true
- if trace_autocase then
- report_autocase("")
- end
- end
- end
- inline = true
- end
- end
- return head, done
-end
-
--- see typo-cap for a more advanced settings handler .. not needed now
-
-local enabled = false
-
-function cleaners.set(n)
- if n == variables.reset or not tonumber(n) or n == 0 then
- texattribute[a_cleaner] = unsetvalue
- else
- if not enabled then
- tasks.enableaction("processors","typesetters.cleaners.handler")
- if trace_cleaners then
- report_cleaners("enabling cleaners")
- end
- enabled = true
- end
- texattribute[a_cleaner] = n
- end
-end
-
-cleaners.handler = nodes.installattributehandler {
- name = "cleaner",
- namespace = cleaners,
- processor = process,
-}
-
--- interface
-
-commands.setcharactercleaning = cleaners.set
+if not modules then modules = { } end modules ['typo-cln'] = { + version = 1.001, + comment = "companion to typo-cln.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- This quick and dirty hack took less time than listening to a CD (In +-- this case Dream Theaters' Octavium. Of course extensions will take +-- more time. + +local utfbyte = utf.byte + +local trace_cleaners = false trackers.register("typesetters.cleaners", function(v) trace_cleaners = v end) +local trace_autocase = false trackers.register("typesetters.cleaners.autocase",function(v) trace_autocase = v end) + +local report_cleaners = logs.reporter("nodes","cleaners") +local report_autocase = logs.reporter("nodes","autocase") + +typesetters.cleaners = typesetters.cleaners or { } +local cleaners = typesetters.cleaners + +local variables = interfaces.variables + +local nodecodes = nodes.nodecodes +local tasks = nodes.tasks + +local texattribute = tex.attribute + +local traverse_id = node.traverse_id + +local unsetvalue = attributes.unsetvalue + +local glyph_code = nodecodes.glyph +local uccodes = characters.uccodes + +local a_cleaner = attributes.private("cleaner") + +local resetter = { -- this will become an entry in char-def + [utfbyte(".")] = true +} + +-- Contrary to the casing code we need to keep track of a state. +-- We could extend the casing code with a status tracker but on +-- the other hand we might want to apply casing afterwards. So, +-- cleaning comes first. + +local function process(namespace,attribute,head) + local inline, done = false, false + for n in traverse_id(glyph_code,head) do + local char = n.char + if resetter[char] then + inline = false + elseif not inline then + local a = n[attribute] + if a == 1 then -- currently only one cleaner so no need to be fancy + local upper = uccodes[char] + if type(upper) == "table" then + -- some day, not much change that \SS ends up here + else + n.char = upper + done = true + if trace_autocase then + report_autocase("") + end + end + end + inline = true + end + end + return head, done +end + +-- see typo-cap for a more advanced settings handler .. not needed now + +local enabled = false + +function cleaners.set(n) + if n == variables.reset or not tonumber(n) or n == 0 then + texattribute[a_cleaner] = unsetvalue + else + if not enabled then + tasks.enableaction("processors","typesetters.cleaners.handler") + if trace_cleaners then + report_cleaners("enabling cleaners") + end + enabled = true + end + texattribute[a_cleaner] = n + end +end + +cleaners.handler = nodes.installattributehandler { + name = "cleaner", + namespace = cleaners, + processor = process, +} + +-- interface + +commands.setcharactercleaning = cleaners.set |