summaryrefslogtreecommitdiff
path: root/tex/context/third/enigma/enigma.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/third/enigma/enigma.lua')
-rw-r--r--tex/context/third/enigma/enigma.lua27
1 files changed, 22 insertions, 5 deletions
diff --git a/tex/context/third/enigma/enigma.lua b/tex/context/third/enigma/enigma.lua
index 3ccf593..3a97a24 100644
--- a/tex/context/third/enigma/enigma.lua
+++ b/tex/context/third/enigma/enigma.lua
@@ -123,11 +123,11 @@ local GLUE_SPEC_NODE = node and nodeid"glue_spec"
local KERN_NODE = node and nodeid"kern"
local DISC_NODE = node and nodeid"disc"
-local IGNORE_NODES = {
+local IGNORE_NODES = node and {
--[GLUE_NODE] = true,
[KERN_NODE] = true,
--[DISC_NODE] = true,
-}
+} or { }
--[[ichd--
\startparagraph
@@ -199,10 +199,16 @@ do
q = 17, r = 18, s = 19, t = 20, u = 21, v = 22, w = 23, x = 24,
y = 25, z = 26,
}
+--[[ichd--
+\startparagraph
+The five rotors to simulate.\reference[listing:rotor_wiring]{}
+Their wirings are created from strings at runtime, see below the
+function \luafunction{get_rotors}.
+\stopparagraph
+--ichd]]--
--[[
Nice: http://www.ellsbury.com/ultraenigmawirings.htm
- Wirings are created from strings at runtime.
]]--
alpha_sorted = "abcdefghijklmnopqrstuvwxyz"
raw_rotor_wiring = {
@@ -233,7 +239,7 @@ mnemonic.
end
--[[ichd--
-\placetable[here][]{The three reflectors and their substitution
+\placetable[here][listing:reflector]{The three reflectors and their substitution
rules.}{%
\starttabulate[|r|l|]
\NC UKW a \NC AE BJ CM DZ FL GY HX IV KW NR OQ PU ST \NC \NR
@@ -866,7 +872,7 @@ extraction of successive characters from the sequence.
local p_init = P{
"init",
init = V"whitespace"^-1 * Ct(V"do_init"),
- do_init = V"reflector" * V"whitespace"
+ do_init = (V"reflector" * V"whitespace")^-1
* V"rotors" * V"whitespace"
* V"ring"
* (V"whitespace" * V"plugboard")^-1
@@ -1081,12 +1087,22 @@ consists of three elements:
emit(1, pprint_machine_step, machine.step, machine.name)
end
+--[[ichd--
+\startparagraph
+The day key is entrusted to the function \luafunction{handle_day_key}.
+If the day key is the empty string or \type{nil}, it will ask for a key
+on the terminal. (Cf. below, \at{page}[listing:ask_for_day_key].)
+Lesson: don’t forget providing day keys in your setups when running in
+batch mode.
+\stopparagraph
+--ichd]]--
local handle_day_key handle_day_key = function (dk, name, old)
local result
if not dk or dk == "" then
dk = ask_for_day_key(name, old)
end
result = lpegmatch(p_init, dk)
+ result.reflector = result.reflector or "b"
-- If we don’t like the key we’re going to ask again. And again....
return result or handle_day_key(nil, name, dk)
end
@@ -1286,6 +1302,7 @@ a sanitizer routine and, if so, apply it to its value.
--[[ichd--
\startparagraph
If the machine setting lacks key settings then we’ll go ahead and ask
+\reference[listing:ask_for_day_key]{}%
the user directly, hence the function \luafunction{ask_for_day_key}.
We abort after three misses lest we annoy the user \dots
\stopparagraph