diff options
-rw-r--r-- | doc/context/third/enigma/enigma_manual.tex | 50 | ||||
-rw-r--r-- | tex/context/third/enigma/enigma.lua | 4 | ||||
-rw-r--r-- | tex/context/third/enigma/t-enigma.mkvi | 8 |
3 files changed, 53 insertions, 9 deletions
diff --git a/doc/context/third/enigma/enigma_manual.tex b/doc/context/third/enigma/enigma_manual.tex index 281ae93..efb4fe2 100644 --- a/doc/context/third/enigma/enigma_manual.tex +++ b/doc/context/third/enigma/enigma_manual.tex @@ -1,4 +1,10 @@ -\startdocchapter[title=Example: Encrypted Document] +\startdocchapter[title=Usage] + +\startdocsection[title=Loading the Module/Package] + \TODO{instuctions for plain, latex + ctx} +\stopdocsection + +\startdocsection[title=Basic Functionality] Encrypt the text of your document using the script interface. For a start try out the settings as given in below listing. @@ -9,11 +15,11 @@ mtxrun --script mtx-t-enigma \ day_key = B I II III 01 01 01, \ rotor_setting = xyz, \ verbose=0" \ - --text="Nobody can read this." + --text="Gentlemen don’t read each other’s mail, Mr. Turing\!" \stoptyping This will result in the thoroughly scrambled string -\type{zdkbxwwnwkazpokvgr}. +\type{omribshpwfrfjovkntgqgiabbkhjpxmhdztapkatwrvf}. Then, use the same settings you encrypted the text with in your document. @@ -30,7 +36,7 @@ document. \starttext \startsecretmessage -zdkbxwwnwkazpokvgr + omribshpwfrfjovkntgqgiabbkhjpxmhdztapkatwrvf \stopsecretmessage \stoptext @@ -41,6 +47,42 @@ reappear. Notice that punctuation is substituted with the letter “x” before encryption and that spaces are omitted. +\stopdocsection + +\startdocsection[title=Uses and Abuses] + +In \LUATEX, \identifier{callback}s may stack. This allows filtering the +input through many enigma machines successively. For instance, in the +following listing, two instances of the same machine are generated and +applied. + +\startcontexttyping +\usemodule[enigma] %% load the module +\defineenigma [secretmessage] %% generate and +\setupenigma [secretmessage] [ %% configure a machine + other_chars = ok, + day_key = B IV V II 01 01 01 AD CN ET FL GI JV KZ PU QY WX, + rotor_setting = foo, + verbose=3, +] + +%% now, copy the first machine’s settings +\defineenigma [othermessage] [secretmessage] + +%% here we go! +\starttext + +\startothermessage %% enable machine 1 +\startsecretmessage %% enable machine 2 while no 1 is active +Encryption equals decryption. +\stopothermessage +\stopsecretmessage + +\stoptext \endinput +\stopcontexttyping + +\stopdocsection + \stopdocchapter \startdocchapter[title=Acknowledgements] diff --git a/tex/context/third/enigma/enigma.lua b/tex/context/third/enigma/enigma.lua index f6881f6..79aadc6 100644 --- a/tex/context/third/enigma/enigma.lua +++ b/tex/context/third/enigma/enigma.lua @@ -578,6 +578,7 @@ ten. ["\n"] = "", ["\t"] = "", ["\v"] = "", + ["\\"] = "", -- Numbers are resolved. ["0"] = "null", ["1"] = "eins", @@ -755,6 +756,7 @@ extraction of successive characters from the sequence. result[#result+1] = tmp end end + print(str) machine:processed_chars() return tableconcat(result) end @@ -981,6 +983,7 @@ consists of three elements: local decode_char = encode_char -- hooray for involutory ciphers local encode_general = function (machine, chr) + local chr = stringlower(chr) local replacement = pp_substitutions[chr] or valid_char_p[chr] and chr if not replacement then return false end @@ -1215,7 +1218,6 @@ local new_callback = function (machine, name) enigma.machines [name] = machine local format_is_context_p = format_is_context_p local cbk = function (a, _, c) - print(name, "<<<<<<<<<<<<<<<<<<<") local head = format_is_context_p and c or a for n in nodetraverse(head) do --print(node, node.id) diff --git a/tex/context/third/enigma/t-enigma.mkvi b/tex/context/third/enigma/t-enigma.mkvi index f6f9db7..0d2d9bf 100644 --- a/tex/context/third/enigma/t-enigma.mkvi +++ b/tex/context/third/enigma/t-enigma.mkvi @@ -111,12 +111,12 @@ thirddata = thirddata or { } \ctxlua{ local enigma = thirddata.enigma local current_args = - enigma.parse_args([====[\detokenize{#args}]====]) - enigma.save_raw_args(current_args, [====[\currentenigmaid]====]) + enigma.parse_args(\!!bs\detokenize{#args}\!!es) + enigma.save_raw_args(current_args, \!!bs\currentenigmaid\!!es) enigma.new_callback( enigma.new_machine(current_args, - [====[\currentenigmaid]====]), - [====[\currentenigmaid]====]) + \!!bs\currentenigmaid\!!es), + \!!bs\currentenigmaid\!!es) }% } |