* ROT13 and alike
@ 2001-02-16 18:15 Giuseppe Bilotta
2001-02-17 18:30 ` Taco Hoekwater
2001-02-19 10:20 ` Hans Hagen
0 siblings, 2 replies; 10+ messages in thread
From: Giuseppe Bilotta @ 2001-02-16 18:15 UTC (permalink / raw)
[-- Attachment #1: Type: text/plain, Size: 1066 bytes --]
Hello,
I'm trying to implement things like ROT13 and alike in ConTeXt, and
have some problems.
ROT13, for those who don't know, is a way to code text by swapping
the first 13 letters of the latin alphabet with the last 13 letters;
appling ROT13 to ROT13ed code returns the original message.
This kind of things can be achived with Virtual Fonts, but I don't
like the approach at all. Also Omega's OCP lists can do similar things.
Now, I was looking for another approach, working in pure TeX, and came
to the code snippet in the attached file (actually, che coding it
applies is not ROT13 but the code of a former Italian secret society,
"carbonari"; but the idea is similar). It works ... almost.
Two bugs are still present: space characters are ignored, and I get
a "Too many {'s" error ... I have half an idea to implement it
through verbatim to solve both the problems, but I don't know how
to write a verbatim module for ConTeXt ...
Any suggestions?
Giuseppe Bilotta
Using Microsoft products is like
having sex without condoms---but
much less pleasurable
[-- Attachment #2: gb-rot.tex --]
[-- Type: application/octet-stream, Size: 3042 bytes --]
\newtoks\CarbonToks
\def\startCarbon#1{%
\ifx#1\stopCarbon\relax\stopCarbon\else%
\bgroup\aftergroup\startCarbon%
\doCarbon#1\fi\egroup%
}
\def\dodoCarbon#1{%
\ifcat#1a
\ifx#1a
\doglobal\appendtoks o\to\CarbonToks%
\else\ifx#1b
\doglobal\appendtoks p\to\CarbonToks%
\else\ifx#1c
\doglobal\appendtoks g\to\CarbonToks%
\else\ifx#1d
\doglobal\appendtoks t\to\CarbonToks%
\else\ifx#1e
\doglobal\appendtoks i\to\CarbonToks%
\else\ifx#1f
\doglobal\appendtoks v\to\CarbonToks%
\else\ifx#1g
\doglobal\appendtoks c\to\CarbonToks%
\else\ifx#1i
\doglobal\appendtoks e\to\CarbonToks%
\else\ifx#1l
\doglobal\appendtoks r\to\CarbonToks%
\else\ifx#1m
\doglobal\appendtoks n\to\CarbonToks%
\else\ifx#1n
\doglobal\appendtoks m\to\CarbonToks%
\else\ifx#1o
\doglobal\appendtoks a\to\CarbonToks%
\else\ifx#1p
\doglobal\appendtoks b\to\CarbonToks%
\else\ifx#1r
\doglobal\appendtoks l\to\CarbonToks%
\else\ifx#1s
\doglobal\appendtoks z\to\CarbonToks%
\else\ifx#1t
\doglobal\appendtoks d\to\CarbonToks%
\else\ifx#1v
\doglobal\appendtoks f\to\CarbonToks%
\else\ifx#1z
\doglobal\appendtoks s\to\CarbonToks%
\else\ifx#1A
\doglobal\appendtoks O\to\CarbonToks%
\else\ifx#1B
\doglobal\appendtoks P\to\CarbonToks%
\else\ifx#1C
\doglobal\appendtoks G\to\CarbonToks%
\else\ifx#1D
\doglobal\appendtoks T\to\CarbonToks%
\else\ifx#1E
\doglobal\appendtoks I\to\CarbonToks%
\else\ifx#1F
\doglobal\appendtoks V\to\CarbonToks%
\else\ifx#1G
\doglobal\appendtoks C\to\CarbonToks%
\else\ifx#1I
\doglobal\appendtoks E\to\CarbonToks%
\else\ifx#1L
\doglobal\appendtoks R\to\CarbonToks%
\else\ifx#1M
\doglobal\appendtoks N\to\CarbonToks%
\else\ifx#1N
\doglobal\appendtoks M\to\CarbonToks%
\else\ifx#1O
\doglobal\appendtoks A\to\CarbonToks%
\else\ifx#1P
\doglobal\appendtoks B\to\CarbonToks%
\else\ifx#1R
\doglobal\appendtoks L\to\CarbonToks%
\else\ifx#1S
\doglobal\appendtoks Z\to\CarbonToks%
\else\ifx#1T
\doglobal\appendtoks T\to\CarbonToks%
\else\ifx#1V
\doglobal\appendtoks F\to\CarbonToks%
\else\ifx#1Z
\doglobal\appendtoks S\to\CarbonToks%
\else\doglobal\appendtoks#1\to\CarbonToks%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
\fi\fi\fi\fi\fi\fi%
\else\doglobal\appendtoks#1\to\CarbonToks%
\fi
}
\def\stopCarbon{\showthe\CarbonToks\the\CarbonToks\relax}
\starttext
\startCarbon
Ecco una prova di alfabeto carbonaro.
\stopCarbon
\stoptext
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ROT13 and alike
2001-02-16 18:15 ROT13 and alike Giuseppe Bilotta
@ 2001-02-17 18:30 ` Taco Hoekwater
2001-02-18 12:50 ` Giuseppe Bilotta
2001-02-19 10:20 ` Hans Hagen
1 sibling, 1 reply; 10+ messages in thread
From: Taco Hoekwater @ 2001-02-17 18:30 UTC (permalink / raw)
Giuseppe Bilotta wrote:
>
>
> Any suggestions?
Here is a solution that is just a little bit more robust than
your one: it obeys spaces and is properly nested. It also allows
primitives in the input string (\par, for example); and \unexpanded
macros that dont have an argument.
Note that this is a hacker's version: you can't use this to process
arbitrary text: macro's that expand into something and e.g. accents
won't work!
In general, it is very hard to do this kind of stuff safely in TeX.
A verbatim module would probably be the best solution. OTOH, my
approach allows:
\section{\ROT{A section}}
% begin of code
%
% this is the converter itself. If it has to do much more than
% this, it might be better to use an \ifcase instead, but that
% complicates the code rather a lot
\def\dorot#1{%
\ifx a#1n\else \ifx b#1o\else \ifx c#1p\else \ifx d#1q\else
\ifx e#1r\else \ifx f#1s\else \ifx g#1t\else \ifx h#1u\else
\ifx i#1v\else \ifx j#1w\else \ifx k#1x\else \ifx l#1y\else
\ifx m#1z\else \ifx n#1a\else \ifx o#1b\else \ifx p#1c\else
\ifx q#1d\else \ifx r#1e\else \ifx s#1f\else \ifx t#1g\else
\ifx u#1h\else \ifx v#1i\else \ifx w#1j\else \ifx x#1k\else
\ifx y#1l\else \ifx z#1m\else
#1%
\fi \fi \fi \fi
\fi \fi \fi \fi
\fi \fi \fi \fi
\fi \fi \fi \fi
\fi \fi \fi \fi
\fi \fi \fi \fi
\fi \fi
}
% The startcommand. \afterassigment executes the next assignment
% first, (in this case a \let assignment), then afterward
% it expands the command between itself and the assignment.
% at that time, the assigment has already been done, so inside
% \dostartROT, \nexttok is the next token from the input.
%
% The trick with the space at the end is the way to make sure
% that spaces are seen as well: only *one* optional space
% is allowed after an equals sign. If there appears another
% space (that is: a space in the input), it will be assigned
% instead.
\def\startROT{%
% here is the place to do other stuff, like
% \bf or whatever. The next line has to stay
% at the end of the definition.
\afterassignment \dostartROT \let\nexttok= }
\def\stopROT{}
% \afterfi is a trick to prevent stack buildup if the text string
% is very long (as it might be)
\def\afterfi#1\fi{\fi#1}
% if the next token is \stopROT, execute it.
% otherwise, start over:
\def\dostartROT{%
\ifx \nexttok \stopROT
\stopROT
\else
\dorot{\nexttok}\afterfi\startROT
\fi }
% parameter version:
\def\ROT#1{\startROT#1\stopROT}
% end of code
Greetings, Taco
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ROT13 and alike
2001-02-17 18:30 ` Taco Hoekwater
@ 2001-02-18 12:50 ` Giuseppe Bilotta
2001-02-19 11:19 ` Hans Hagen
0 siblings, 1 reply; 10+ messages in thread
From: Giuseppe Bilotta @ 2001-02-18 12:50 UTC (permalink / raw)
[-- Attachment #1: Type: text/plain, Size: 934 bytes --]
Taco Hoekwater wrote:
> Here is a solution that is just a little bit more robust than
> your one: it obeys spaces and is properly nested. It also allows
> primitives in the input string (\par, for example); and \unexpanded
> macros that dont have an argument.
>
> Note that this is a hacker's version: you can't use this to process
> arbitrary text: macro's that expand into something and e.g. accents
> won't work!
>
> In general, it is very hard to do this kind of stuff safely in TeX.
> A verbatim module would probably be the best solution. OTOH, my
> approach allows:
>
> \section{\ROT{A section}}
>
[snip code]
Well, that's an extremely instructive example!
I gave a look at the verbatim approach, and got to the
attached files.
They still don't handle accents etc; Hans, how to make
a verbatim that obeys cs's?
Giuseppe Bilotta
Using Microsoft products is like
having sex without condoms---but
much less pleasurable
[-- Attachment #2: g-rot.zip --]
[-- Type: application/x-zip-compressed, Size: 1525 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ROT13 and alike
2001-02-16 18:15 ROT13 and alike Giuseppe Bilotta
2001-02-17 18:30 ` Taco Hoekwater
@ 2001-02-19 10:20 ` Hans Hagen
2001-02-19 22:45 ` Giuseppe Bilotta
2001-02-20 15:58 ` Giuseppe Bilotta
1 sibling, 2 replies; 10+ messages in thread
From: Hans Hagen @ 2001-02-19 10:20 UTC (permalink / raw)
Cc: ConTeXt
At 07:15 PM 2/16/01 +0100, Giuseppe Bilotta wrote:
>ROT13, for those who don't know, is a way to code text by swapping
>the first 13 letters of the latin alphabet with the last 13 letters;
>appling ROT13 to ROT13ed code returns the original message.
>
>This kind of things can be achived with Virtual Fonts, but I don't
>like the approach at all. Also Omega's OCP lists can do similar things.
>Now, I was looking for another approach, working in pure TeX, and came
>to the code snippet in the attached file (actually, che coding it
>applies is not ROT13 but the code of a former Italian secret society,
>"carbonari"; but the idea is similar). It works ... almost.
Given that this secret society is okay i can provide a better solution.
\starttext
\startmapping[rot13]
\definecasemaps 65 to 77 lc +13 uc +13
\definecasemaps 78 to 90 lc -13 uc -13
\definecasemaps 97 to 109 lc +13 uc +13
\definecasemaps 110 to 122 lc -13 uc -13
\stopmapping
\def\ToRotThirteen #1{{\enablemapping[rot13]\lowercase{#1}}}
\def\FromRotThirteen#1{{\enablemapping[rot13]\uppercase{#1}}}
Ecco una prova di alfabeto carbonaro.
\ToRotThirteen{Ecco una prova di alfabeto carbonaro.}
\FromRotThirteen{\ToRotThirteen{Ecco una prova di alfabeto carbonaro.}}
\stoptext
-------------------------------------------------------------------------
Hans Hagen | PRAGMA ADE | pragma@wxs.nl
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: +31 (0)38 477 53 69 | fax: +31 (0)38 477 53 74 | www.pragma-ade.com
-------------------------------------------------------------------------
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ROT13 and alike
2001-02-18 12:50 ` Giuseppe Bilotta
@ 2001-02-19 11:19 ` Hans Hagen
0 siblings, 0 replies; 10+ messages in thread
From: Hans Hagen @ 2001-02-19 11:19 UTC (permalink / raw)
Cc: ConTeXt
At 01:50 PM 2/18/01 +0100, Giuseppe Bilotta wrote:
>Taco Hoekwater wrote:
>
>> Here is a solution that is just a little bit more robust than
>> your one: it obeys spaces and is properly nested. It also allows
>> primitives in the input string (\par, for example); and \unexpanded
>> macros that dont have an argument.
>>
>> Note that this is a hacker's version: you can't use this to process
>> arbitrary text: macro's that expand into something and e.g. accents
>> won't work!
>>
>> In general, it is very hard to do this kind of stuff safely in TeX.
>> A verbatim module would probably be the best solution. OTOH, my
>> approach allows:
>>
>> \section{\ROT{A section}}
>>
>[snip code]
>
>Well, that's an extremely instructive example!
>
>I gave a look at the verbatim approach, and got to the
>attached files.
>
>They still don't handle accents etc; Hans, how to make
>a verbatim that obeys cs's?
They will if you have an encoding that makes char>127 active
Hans
-------------------------------------------------------------------------
Hans Hagen | PRAGMA ADE | pragma@wxs.nl
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: +31 (0)38 477 53 69 | fax: +31 (0)38 477 53 74 | www.pragma-ade.com
-------------------------------------------------------------------------
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ROT13 and alike
2001-02-19 10:20 ` Hans Hagen
@ 2001-02-19 22:45 ` Giuseppe Bilotta
2001-02-20 11:29 ` Hans Hagen
2001-02-20 15:58 ` Giuseppe Bilotta
1 sibling, 1 reply; 10+ messages in thread
From: Giuseppe Bilotta @ 2001-02-19 22:45 UTC (permalink / raw)
Cc: ConTeXt
> Given that this secret society is okay i can provide a better solution.
>
> \starttext
>
> \startmapping[rot13]
> \definecasemaps 65 to 77 lc +13 uc +13
> \definecasemaps 78 to 90 lc -13 uc -13
> \definecasemaps 97 to 109 lc +13 uc +13
> \definecasemaps 110 to 122 lc -13 uc -13
> \stopmapping
>
> \def\ToRotThirteen #1{{\enablemapping[rot13]\lowercase{#1}}}
> \def\FromRotThirteen#1{{\enablemapping[rot13]\uppercase{#1}}}
>
> Ecco una prova di alfabeto carbonaro.
>
> \ToRotThirteen{Ecco una prova di alfabeto carbonaro.}
>
> \FromRotThirteen{\ToRotThirteen{Ecco una prova di alfabeto carbonaro.}}
>
I hate you :-) Why must things always be this simple? I lose all the pleasure
of trying to program it in TeX ... :-)
Thank you.
Giuseppe Bilotta
Using Microsoft products is like
having sex without condoms---but
much less pleasurable
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ROT13 and alike
2001-02-19 22:45 ` Giuseppe Bilotta
@ 2001-02-20 11:29 ` Hans Hagen
0 siblings, 0 replies; 10+ messages in thread
From: Hans Hagen @ 2001-02-20 11:29 UTC (permalink / raw)
Cc: ConTeXt
At 11:45 PM 2/19/01 +0100, Giuseppe Bilotta wrote:
>> Given that this secret society is okay i can provide a better solution.
>>
>> \starttext
>>
>> \startmapping[rot13]
>> \definecasemaps 65 to 77 lc +13 uc +13
>> \definecasemaps 78 to 90 lc -13 uc -13
>> \definecasemaps 97 to 109 lc +13 uc +13
>> \definecasemaps 110 to 122 lc -13 uc -13
>> \stopmapping
>>
>> \def\ToRotThirteen #1{{\enablemapping[rot13]\lowercase{#1}}}
>> \def\FromRotThirteen#1{{\enablemapping[rot13]\uppercase{#1}}}
>>
>> Ecco una prova di alfabeto carbonaro.
>>
>> \ToRotThirteen{Ecco una prova di alfabeto carbonaro.}
>>
>> \FromRotThirteen{\ToRotThirteen{Ecco una prova di alfabeto carbonaro.}}
>>
>
>I hate you :-) Why must things always be this simple? I lose all the pleasure
>of trying to program it in TeX ... :-)
Well, it *is* tex, lowercase and uppercase are (funny) primitives and the
\definecasemaps only saves you keying some 100 lccodes and uccodes. BTW,
its no problem to formulate a couple of problems that would give you a
headache for years solving them in tex.
Hans
-------------------------------------------------------------------------
Hans Hagen | PRAGMA ADE | pragma@wxs.nl
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: +31 (0)38 477 53 69 | fax: +31 (0)38 477 53 74 | www.pragma-ade.com
-------------------------------------------------------------------------
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ROT13 and alike
2001-02-19 10:20 ` Hans Hagen
2001-02-19 22:45 ` Giuseppe Bilotta
@ 2001-02-20 15:58 ` Giuseppe Bilotta
2001-03-12 20:37 ` Hans Hagen
1 sibling, 1 reply; 10+ messages in thread
From: Giuseppe Bilotta @ 2001-02-20 15:58 UTC (permalink / raw)
Cc: ConTeXt
The scrambling for the society was the following:
\startmapping[carbon]
\definecasemap 65 79 79 % a -> o
\definecasemap 66 80 80 % b -> p
\definecasemap 67 71 71 % c -> g
\definecasemap 68 84 84 % d -> t
\definecasemap 69 73 73 % e -> i
\definecasemap 70 86 86 % f -> v
\definecasemap 71 67 67 % g -> c
\definecasemap 72 72 72 % h -> h
\definecasemap 73 69 69 % i -> e
\definecasemap 74 74 74 % j -> j
\definecasemap 75 75 75 % k -> k
\definecasemap 76 82 82 % l -> r
\definecasemap 77 78 78 % m -> n
\definecasemap 78 77 77 % n -> m
\definecasemap 79 65 65 % o -> a
\definecasemap 80 66 66 % p -> b
\definecasemap 81 81 81 % q -> q
\definecasemap 82 76 76 % r -> l
\definecasemap 83 90 90 % s -> z
\definecasemap 84 68 68 % t -> d
\definecasemap 85 85 85 % u -> u
\definecasemap 86 70 70 % v -> v
\definecasemap 87 87 87 % w -> w
\definecasemap 88 88 88 % x -> x
\definecasemap 89 89 89 % y -> y
\definecasemap 90 83 83 % z -> s
\definecasemap 97 111 111 % A -> O
\definecasemap 98 112 112 % B -> P
\definecasemap 99 103 103 % C -> G
\definecasemap 100 116 116 % D -> T
\definecasemap 101 105 105 % E -> I
\definecasemap 102 118 118 % F -> V
\definecasemap 103 99 99 % G -> C
\definecasemap 104 104 104 % H -> H
\definecasemap 105 101 101 % I -> E
\definecasemap 106 106 106 % J -> J
\definecasemap 107 107 107 % K -> K
\definecasemap 108 114 114 % L -> R
\definecasemap 109 110 110 % M -> N
\definecasemap 110 109 109 % N -> M
\definecasemap 111 97 97 % O -> A
\definecasemap 112 98 98 % P -> B
\definecasemap 113 113 113 % Q -> Q
\definecasemap 114 108 108 % R -> L
\definecasemap 115 122 122 % S -> Z
\definecasemap 116 100 100 % T -> D
\definecasemap 117 117 117 % U -> U
\definecasemap 118 102 102 % V -> V
\definecasemap 119 119 119 % W -> W
\definecasemap 120 120 120 % X -> X
\definecasemap 121 121 121 % Y -> Y
\definecasemap 122 115 115 % Z -> S
\stopmapping
\def\CRB#1{{\enablemapping[carbon]\lowercase{#1}}}
\useencoding[windows]
\starttext
\def\text{Prova. Ecco dell'altro! Accenti? Sì, grazie! O s\`\i, grazie,
o perché no? E perch\'e no?}
\text\par
\expandafter\CRB\expandafter{\text}\par
\stoptext
But accents in active chars are not dealt with, nor is \i converted to e,
nor is e converted to \i when accented. How can these details be taken
care of?
Second thing: is it possible to ensure that multiple paragraphs
are typeset scrambled? A \startCRB ... \stopCRB pair?
Finally: is it possible to implement scrambling "natively"?
\startscrambling[rot13]
\swaps a to m n to z
\swaps A to M N to Z
% also \swaps <num> to <num> <num> to <num>, checking for same length
\stopscrambling
\startscrambling[carbonar]
\swap a o
\swap b p
...
\stopscrambling
\usescrambling[name]
allowing \lowercase to behave the right way even when scrambling is active,
and working correctly with accents, both in active form (ì) and normal form (\'e)
Thank you for your attention,
Giuseppe Bilotta
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: ROT13 and alike
2001-02-20 15:58 ` Giuseppe Bilotta
@ 2001-03-12 20:37 ` Hans Hagen
2001-03-14 0:26 ` Re[2]: " Giuseppe Bilotta
0 siblings, 1 reply; 10+ messages in thread
From: Hans Hagen @ 2001-03-12 20:37 UTC (permalink / raw)
Cc: ConTeXt
At 04:58 PM 2/20/01 +0100, Giuseppe Bilotta wrote:
>The scrambling for the society was the following:
>But accents in active chars are not dealt with, nor is \i converted to e,
>nor is e converted to \i when accented. How can these details be taken
>care of?
this should work with the new encoding macros since there \named glyphs can
be mapped onto \NAMEDGLYPHS
>Second thing: is it possible to ensure that multiple paragraphs
>are typeset scrambled? A \startCRB ... \stopCRB pair?
\long\def\blabla#1{..#1..}
>\startscrambling[rot13]
> \swaps a to m n to z
> \swaps A to M N to Z
>% also \swaps <num> to <num> <num> to <num>, checking for same length
>\stopscrambling
too tricky probably but `a to `m may work
Hans
-------------------------------------------------------------------------
Hans Hagen | PRAGMA ADE | pragma@wxs.nl
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: +31 (0)38 477 53 69 | fax: +31 (0)38 477 53 74 | www.pragma-ade.com
-------------------------------------------------------------------------
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re[2]: ROT13 and alike
2001-03-12 20:37 ` Hans Hagen
@ 2001-03-14 0:26 ` Giuseppe Bilotta
0 siblings, 0 replies; 10+ messages in thread
From: Giuseppe Bilotta @ 2001-03-14 0:26 UTC (permalink / raw)
Cc: ConTeXt
>>\startscrambling[rot13]
>> \swaps a to m n to z
>> \swaps A to M N to Z
>>% also \swaps <num> to <num> <num> to <num>, checking for same length
>>\stopscrambling
HH> too tricky probably but `a to `m may work
Nope. The transformation I meant was not a->m, n->z, but "all codes
between a and m included should be sequentially mapped to the codes
between n and z, and vice versa. The same for caps". Maybe with more
keywords, like:
\startscrambling[rot3]
\swaps a to w with d to z
\swaps x to z with a to c
\stopscrambling
But for simple swappings:
\startscrambling[carbo]
\swaps a o, e i % a <-> o, e <-> i
\swaps b p, c g, d t, f v % etcetera
\stopscrambling
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2001-03-14 0:26 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-02-16 18:15 ROT13 and alike Giuseppe Bilotta
2001-02-17 18:30 ` Taco Hoekwater
2001-02-18 12:50 ` Giuseppe Bilotta
2001-02-19 11:19 ` Hans Hagen
2001-02-19 10:20 ` Hans Hagen
2001-02-19 22:45 ` Giuseppe Bilotta
2001-02-20 11:29 ` Hans Hagen
2001-02-20 15:58 ` Giuseppe Bilotta
2001-03-12 20:37 ` Hans Hagen
2001-03-14 0:26 ` Re[2]: " Giuseppe Bilotta
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).