CLD: context.getvariable as Lua variable
Hello, I'm relatively quite new to TeX world. This is my first message to list. I hope you understand me, English isn't my mother language. I'm trying to use a variable set by \setvariable in Lua. I tried some combinations, based on manual but I couldn't succeed. The code below exemplifies what I wanted to do. \starttext \setvariable{namespace}{var}{Some context} \ctxlua{ local s = context.getvariable("namespace", "var") if s == "" then ... else ... end } \stoptext I know that I can use some of \if* TeX commands, but coding in Lua is better to me. -- Wagner Macedo
Am 05.01.2012 um 15:49 schrieb Wagner Macedo:
Hello,
I'm relatively quite new to TeX world. This is my first message to list. I hope you understand me, English isn't my mother language.
I'm trying to use a variable set by \setvariable in Lua. I tried some combinations, based on manual but I couldn't succeed. The code below exemplifies what I wanted to do.
\starttext \setvariable{namespace}{var}{Some context} \ctxlua{ local s = context.getvariable("namespace", "var")
if s == "" then ... else ... end } \stoptext
I know that I can use some of \if* TeX commands, but coding in Lua is better to me.
What you’re trying is not possible but there are other ways to check the content of the variable in Lua. \startluacode userdata = userdata or { } function userdata.checkvariable(variable) if variable == "" then context("EMPTY") else context("NOT EMPTY") end end \stopluacode \setvariable{wagner}{name}{Wagner Macedo} \starttext \ctxlua{userdata.checkvariable("\getvariable{wagner}{name}")} % This does only with \startlua or \ctxlua \startlua local name = "\getvariable{wagner}{name}" if name == "" then context("No Text") else name = "Name: " .. name context(name) end \stoplua \stoptext A different method is to save the \setvariables entries in a Lua table and check the entries of the table. \startluacode userdata = userdata or { } userdata.macedo = userdata.macedo or { } userdata.macedo.data = { } function userdata.macedo.savevariables(variables) userdata.macedo.data = variables end function userdata.macedo.checkvariables() local variables = userdata.macedo.data -- check for name if variables.name == "" then context("Name: No name set") context.par() else context("Name: "..variables.name) context.par() end -- check for address if variables.address == "" then context("Address: No address set") context.par() else context("Address: "..variables.address) context.par() end end \stopluacode \starttexdefinition SaveVariables \startlua userdata.macedo.savevariables{ name = "\getvariable{macedo}{name}", address = "\getvariable{macedo}{address}", } \stoplua \stoptexdefinition \setvariables[macedo][set=\SaveVariables] \starttext \setvariables[macedo][name=Wagner Macedo] \ctxlua{userdata.macedo.checkvariables()} \setvariables[macedo][address=Secret] \ctxlua{userdata.macedo.checkvariables()} \stoptext Wolfgang
Firstly, thanks by answer.
The second way is nice, but could be generic (e.g. save any variable in a
namespace)?
--
Wagner Macedo
On 5 January 2012 13:04, Wolfgang Schuster wrote: Am 05.01.2012 um 15:49 schrieb Wagner Macedo: Hello, I'm relatively quite new to TeX world. This is my first message to list. I
hope you understand me, English isn't my mother language. I'm trying to use a variable set by \setvariable in Lua. I tried some
combinations, based on manual but I couldn't succeed. The code below
exemplifies what I wanted to do. \starttext
\setvariable{namespace}{var}{Some context}
\ctxlua{
local s = context.getvariable("namespace", "var") if s == "" then
...
else
...
end
}
\stoptext I know that I can use some of \if* TeX commands, but coding in Lua is
better to me. What you’re trying is not possible but there are other ways to check the
content of the variable in Lua. \startluacode userdata = userdata or { } function userdata.checkvariable(variable)
if variable == "" then
context("EMPTY")
else
context("NOT EMPTY")
end
end \stopluacode \setvariable{wagner}{name}{Wagner Macedo} \starttext \ctxlua{userdata.checkvariable("\getvariable{wagner}{name}")} % This does only with \startlua or \ctxlua \startlua local name = "\getvariable{wagner}{name}" if name == "" then
context("No Text")
else
name = "Name: " .. name
context(name)
end \stoplua \stoptext A different method is to save the \setvariables entries in a Lua table and
check the entries of the table. \startluacode userdata = userdata or { }
userdata.macedo = userdata.macedo or { } userdata.macedo.data = { } function userdata.macedo.savevariables(variables)
userdata.macedo.data = variables
end function userdata.macedo.checkvariables()
local variables = userdata.macedo.data
-- check for name
if variables.name == "" then
context("Name: No name set")
context.par()
else
context("Name: "..variables.name)
context.par()
end
-- check for address
if variables.address == "" then
context("Address: No address set")
context.par()
else
context("Address: "..variables.address)
context.par()
end
end \stopluacode \starttexdefinition SaveVariables
\startlua
userdata.macedo.savevariables{
name = "\getvariable{macedo}{name}",
address = "\getvariable{macedo}{address}",
}
\stoplua
\stoptexdefinition \setvariables[macedo][set=\SaveVariables] \starttext \setvariables[macedo][name=Wagner Macedo] \ctxlua{userdata.macedo.checkvariables()} \setvariables[macedo][address=Secret] \ctxlua{userdata.macedo.checkvariables()} \stoptext Wolfgang ___________________________________________________________________________________
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 ___________________________________________________________________________________
Am 05.01.2012 um 18:22 schrieb Wagner Macedo:
Firstly, thanks by answer.
The second way is nice, but could be generic (e.g. save any variable in a namespace)?
It would require a different method because \setvariables doesn’t provide information about the values which are set. Can you describe what do you want to achieve and I can try to provide a better solution. Wolfgang
Don't worry. It's not needed. I just wanted to avoid mix Lua and TeX codes.
I will survive using:
local s = "\getvariable{namespace}{var}"
Thank you by attention.
--
Wagner Macedo
On 5 January 2012 14:39, Wolfgang Schuster wrote: Am 05.01.2012 um 18:22 schrieb Wagner Macedo: Firstly, thanks by answer. The second way is nice, but could be generic (e.g. save any variable in
a namespace)? It would require a different method because \setvariables doesn’t provide
information about the values which are set. Can you describe what do you
want to achieve and I can try to provide a better solution. Wolfgang ___________________________________________________________________________________
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 ___________________________________________________________________________________
participants (2)
-
Wagner Macedo
-
Wolfgang Schuster