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