Passing and retrieveing a variable
Hello, I'd need to pass a variable to Ctx and to retrieve it inside a compiled document - via Ctx itself and also by Lua. Something like modes; but modes allow just to check whether they are on or off. I'd need something like this: Calling context.exe: --- call context.exe test.mkiv --mode:MyMode --variable MyVariable=AAA --- And test.mkiv: --- \starttext Hello \doifmode{MyMode}{Being in MyMode} \ifvariableequal{MyVariable}{AAA}{MyVariable is \MyVariable} % Something like this \startluacode if context.variables.MyVariable == "AAA" then context("MyVariable is defined.") -- Something like this end \stopluacode \stoptext --- Simply said, I'd need to provide a conditional (or: dependent) compilation of the input file. How to handle this? Best regards, Lukas
Procházka Lukáš
I'd need to pass a variable to Ctx and to retrieve it inside a compiled document - via Ctx itself and also by Lua.
Hello, % cmd-line: context --arguments=testvar=my-value test \starttext value of testvar: \env{testvar} with lua: \ctxlua{tex.print(document.arguments.arguments)} \stoptext There is perhaps a nicer solution in lua. Peter -- Contact information: http://pmrb.free.fr/contact/
Hello,
I created a testing file which tests existence and type of (tex|context|document).(modes|arguments|variables) by Lua - see the attachments.
It seems that:
- Modes are accessible by tex.modes[<a-mode>].
- - tex.modes are 'false' by default. I.e. they are not 'nil' but 'false', even if not specified on the command line. (tex.mode.__newindex predefined to this purpose?)
- There is no table of arguments or variables being passed by --arguments="ARG=arg" or by --variable="VAR=var" from the command line.
- All arguments passed to the command line are accessible by document.arguments. Unfortunately, when repeating an arg, only the last is accessible, e.g.
context.exe t.mkiv --arguments="ARG1=arg1" --arguments="ARG2=arg2"
will cause that only (string) "ARG2=arg2" will be in document.arguments.arguments.
- - That means also that not splitting to key-value pair is not performed by default (document.arguments.arguments is still "ARG2=arg2", no splitting to document.arguments.arguments.ARG2 to be "arg2" is not done).
- Not only predefined options/switches, but all args passed by command line are accessible by document.arguments. I.e. it's possible to call
context.exe t.mkiv --myvar=MYVAR
and later it's possible to get "MYVAR" from document.arguments.myvar.
Let's check the call:
context.exe t.mkiv --arguments=AAA=aaa --mode=MMM --arguments=BBB=bbb --myvar=MYVAR
Best regards,
Lukas
On Wed, 05 Jan 2011 21:11:51 +0100, Peter Münster
Procházka Lukáš
writes: I'd need to pass a variable to Ctx and to retrieve it inside a compiled document - via Ctx itself and also by Lua.
Hello,
% cmd-line: context --arguments=testvar=my-value test \starttext value of testvar: \env{testvar}
with lua: \ctxlua{tex.print(document.arguments.arguments)} \stoptext
There is perhaps a nicer solution in lua.
Peter
-- Ing. Lukáš Procházka [mailto:LPr@pontex.cz] Pontex s. r. o. [mailto:pontex@pontex.cz] [http://www.pontex.cz] Bezová 1658 147 14 Praha 4 Tel: +420 244 062 238 Fax: +420 244 461 038
2011/1/7 Procházka Lukáš Ing. - Pontex s. r. o.
Hello,
I created a testing file which tests existence and type of (tex|context|document).(modes|arguments|variables) by Lua - see the attachments.
It seems that:
- Modes are accessible by tex.modes[<a-mode>].
- - tex.modes are 'false' by default. I.e. they are not 'nil' but 'false', even if not specified on the command line. (tex.mode.__newindex predefined to this purpose?)
- There is no table of arguments or variables being passed by --arguments="ARG=arg" or by --variable="VAR=var" from the command line.
- All arguments passed to the command line are accessible by document.arguments. Unfortunately, when repeating an arg, only the last is accessible, e.g.
context.exe t.mkiv --arguments="ARG1=arg1" --arguments="ARG2=arg2"
will cause that only (string) "ARG2=arg2" will be in document.arguments.arguments.
- - That means also that not splitting to key-value pair is not performed by default (document.arguments.arguments is still "ARG2=arg2", no splitting to document.arguments.arguments.ARG2 to be "arg2" is not done).
- Not only predefined options/switches, but all args passed by command line are accessible by document.arguments. I.e. it's possible to call
context.exe t.mkiv --myvar=MYVAR
and later it's possible to get "MYVAR" from document.arguments.myvar.
Let's check the call:
context.exe t.mkiv --arguments=AAA=aaa --mode=MMM --arguments=BBB=bbb --myvar=MYVAR
Best regards,
Lukas
On Wed, 05 Jan 2011 21:11:51 +0100, Peter Münster
wrote: Procházka Lukáš
writes: I'd need to pass a variable to Ctx and to retrieve it inside a compiled document - via Ctx itself and also by Lua.
Hello,
% cmd-line: context --arguments=testvar=my-value test \starttext value of testvar: \env{testvar}
with lua: \ctxlua{tex.print(document.arguments.arguments)} \stoptext
There is perhaps a nicer solution in lua.
Peter
-- Ing. Lukáš Procházka [mailto:LPr@pontex.cz] Pontex s. r. o. [mailto:pontex@pontex.cz] [http://www.pontex.cz] Bezová 1658 147 14 Praha 4
Tel: +420 244 062 238 Fax: +420 244 461 038 ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
Maybe Data Description can here here http://www.lua.org/pil/10.1.html -- luigi
On 7-1-2011 9:32, Procházka Lukáš Ing. - Pontex s. r. o. wrote:
- Modes are accessible by tex.modes[<a-mode>].
indeed
- - tex.modes are 'false' by default. I.e. they are not 'nil' but 'false', even if not specified on the command line. (tex.mode.__newindex predefined to this purpose?)
indeed
- There is no table of arguments or variables being passed by --arguments="ARG=arg" or by --variable="VAR=var" from the command line.
indeed (--arguments is an old mechanism and mkii compatible)
- All arguments passed to the command line are accessible by document.arguments. Unfortunately, when repeating an arg, only the last is accessible, e.g.
context.exe t.mkiv --arguments="ARG1=arg1" --arguments="ARG2=arg2"
indeed, so one can easily overload
will cause that only (string) "ARG2=arg2" will be in document.arguments.arguments.
as mentioned by someone already, use "a=1,b=2,c=3"
- - That means also that not splitting to key-value pair is not performed by default (document.arguments.arguments is still "ARG2=arg2", no splitting to document.arguments.arguments.ARG2 to be "arg2" is not done).
indeed, although they are split and assigned at the tex end
- Not only predefined options/switches, but all args passed by command line are accessible by document.arguments. I.e. it's possible to call
context.exe t.mkiv --myvar=MYVAR
right, but make sure to use a prefix so that there is no confusion (myvarone myvartwo etc)
and later it's possible to get "MYVAR" from document.arguments.myvar.
Let's check the call:
context.exe t.mkiv --arguments=AAA=aaa --mode=MMM --arguments=BBB=bbb --myvar=MYVAR
Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
Hello,
thanks for detailing the observation -
On Fri, 07 Jan 2011 22:58:24 +0100, Hans Hagen
On 7-1-2011 9:32, Procházka Lukáš Ing. - Pontex s. r. o. wrote:
- Modes are accessible by tex.modes[<a-mode>].
indeed
- - tex.modes are 'false' by default. I.e. they are not 'nil' but 'false', even if not specified on the command line. (tex.mode.__newindex predefined to this purpose?)
indeed
- There is no table of arguments or variables being passed by --arguments="ARG=arg" or by --variable="VAR=var" from the command line.
indeed (--arguments is an old mechanism and mkii compatible)
- All arguments passed to the command line are accessible by document.arguments. Unfortunately, when repeating an arg, only the last is accessible, e.g.
context.exe t.mkiv --arguments="ARG1=arg1" --arguments="ARG2=arg2"
indeed, so one can easily overload
You're right, good feature.
will cause that only (string) "ARG2=arg2" will be in document.arguments.arguments.
as mentioned by someone already, use "a=1,b=2,c=3"
- - That means also that not splitting to key-value pair is not performed by default (document.arguments.arguments is still "ARG2=arg2", no splitting to document.arguments.arguments.ARG2 to be "arg2" is not done).
indeed, although they are split and assigned at the tex end
So, an earlier splitting may be performed by something like for a in document.arguments:gmatch("([^,]+)") do local k, v = a:match("(.*)=(.*)") document.arguments[k] = v end Best regards, Lukas
- Not only predefined options/switches, but all args passed by command line are accessible by document.arguments. I.e. it's possible to call
context.exe t.mkiv --myvar=MYVAR
right, but make sure to use a prefix so that there is no confusion (myvarone myvartwo etc)
and later it's possible to get "MYVAR" from document.arguments.myvar.
Let's check the call:
context.exe t.mkiv --arguments=AAA=aaa --mode=MMM --arguments=BBB=bbb --myvar=MYVAR
Hans
On 8-1-2011 7:12, Procházka Lukáš wrote:
So, an earlier splitting may be performed by something like
for a in document.arguments:gmatch("([^,]+)") do local k, v = a:match("(.*)=(.*)")
document.arguments[k] = v end
utilities.parsers.settings_to_hash( document.arguments.arg or "", document.arguments ) ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
Am 05.01.2011 um 20:22 schrieb Procházka Lukáš:
Hello,
I'd need to pass a variable to Ctx and to retrieve it inside a compiled document - via Ctx itself and also by Lua. Something like modes; but modes allow just to check whether they are on or off. I'd need something like this:
You can check modes in Lua: context --arguments="size=small" --mode=print test.tex \starttext Print mode: \doifmodeelse{print}{yes}{no} \startluacode if tex.modes['print'] then context("Print mode is enabled") else context("Print mode is disabled") end \stopluacode \doifenvelse{size} {\processaction [\env{size}] [ small=>Small size, medium=>Medium size, big=>Big size, unknown=>Other size: \env{size}]} {No value “size”} \stoptext Wolfgang
Hello,
thanks, -
On Wed, 05 Jan 2011 21:41:13 +0100, Wolfgang Schuster
Am 05.01.2011 um 20:22 schrieb Procházka Lukáš:
Hello,
I'd need to pass a variable to Ctx and to retrieve it inside a compiled document - via Ctx itself and also by Lua. Something like modes; but modes allow just to check whether they are on or off. I'd need something like this:
You can check modes in Lua:
context --arguments="size=small" --mode=print test.tex
And can I check a variable (argument) in Lua in a similar way? --- \starttext Print mode: \doifmodeelse{print}{yes}{no} \startluacode if tex.modes['print'] then context("Print mode is enabled") else context("Print mode is disabled") end -- Something like this: >> if tex.arguments['size'] == "small" then -- Or: 'tex.variables["size"] == "small"' -- Or: 'document.arguments["size"] == "small"' context("Small size") end -- \stopluacode \doifenvelse{size} {\processaction [\env{size}] [ small=>Small size, medium=>Medium size, big=>Big size, unknown=>Other size: \env{size}]} {No value “size”} \stoptext --- If the passed argument has a NUMBER value, should it be checked against a number value or a string - so what of the following should be right: context --arguments="size=1" test.tex if tex.arguments['size'] == "1" then ... Or: if tex.arguments['size'] == 1 then ... Best regards, Lukas -- Ing. Lukáš Procházka [mailto:LPr@pontex.cz] Pontex s. r. o. [mailto:pontex@pontex.cz] [http://www.pontex.cz] Bezová 1658 147 14 Praha 4 Tel: +420 244 062 238 Fax: +420 244 461 038
participants (6)
-
Hans Hagen
-
luigi scarso
-
pmlists@free.fr
-
Procházka Lukáš
-
Procházka Lukáš Ing. - Pontex s. r. o.
-
Wolfgang Schuster