Discussion:
[NTG-context] 'figures.getinfo()' not to exit ConTeXt
Procházka Lukáš Ing.
2018-12-06 10:20:44 UTC
Permalink
Hello,

I'm using the following code, mentioned here some time ago, to get some info about PDF:

----
\startluacode
figures.getinfo = function(name, page)
if type(name) == "string" then
name = { name = name, page = page }
end
if name.name then
local data = figures.push(name)

--figures.identify()
local ok, res = pcall(figures.identify)
print(">>1", ok, res)

--figures.check()
local ok, res = pcall(figures.check)
print(">>2", ok, res)

figures.pop()
return data
end
end

local data = figures.getinfo("NonExisting.pdf")

\stopluacode
----

The problem is that once the PDF file doesn't exist, the function causes ConTeXt to exit, even when I enclose 'figure.check()' into the 'pcall' (to be handled like try/catch mechanism).

Is there a way so that the function 'figures.getinfo()' does't exit ConTeXt, it just returns 'nil', or even gives info which directories (or even which file types) were searched?

TIA.

Best regards,

Lukas
--
Ing. Lukáš Procházka | mailto:***@pontex.cz
Pontex s. r. o. | mailto:***@pontex.cz | http://www.pontex.cz | IDDS: nrpt3sn | IČO: 40763439
Bezová 1658
147 14 Praha 4

Mob.: +420 702 033 396

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-***@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage : http://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
__________________________________________________________________________________
luigi scarso
2018-12-06 10:23:25 UTC
Permalink
Post by Procházka Lukáš Ing.
Hello,
----
\startluacode
figures.getinfo = function(name, page)
if type(name) == "string" then
name = { name = name, page = page }
end
if name.name then
local data = figures.push(name)
--figures.identify()
local ok, res = pcall(figures.identify)
print(">>1", ok, res)
--figures.check()
local ok, res = pcall(figures.check)
print(">>2", ok, res)
figures.pop()
return data
end
end
local data = figures.getinfo("NonExisting.pdf")
\stopluacode
----
The problem is that once the PDF file doesn't exist, the function causes
ConTeXt to exit, even when I enclose 'figure.check()' into the 'pcall' (to
be handled like try/catch mechanism).
Is there a way so that the function 'figures.getinfo()' does't exit
ConTeXt, it just returns 'nil', or even gives info which directories (or
even which file types) were searched?
TIA.
something like that (untested), eventaully to be wrapped in a your
function
local fileone = "NonExisting.pdf"
local data
if not lfs.isfile(fileone) then
report("unknown file %a",fileone)
else
data = figures.getinfo("NonExisting.pdf")
end
--
luigi
Procházka Lukáš Ing.
2018-12-06 10:57:21 UTC
Permalink
Hello Luigi,
Post by Procházka Lukáš Ing.
Post by Procházka Lukáš Ing.
Hello,
----
\startluacode
figures.getinfo = function(name, page)
if type(name) == "string" then
name = { name = name, page = page }
end
if name.name then
local data = figures.push(name)
--figures.identify()
local ok, res = pcall(figures.identify)
print(">>1", ok, res)
--figures.check()
local ok, res = pcall(figures.check)
print(">>2", ok, res)
figures.pop()
return data
end
end
local data = figures.getinfo("NonExisting.pdf")
\stopluacode
----
The problem is that once the PDF file doesn't exist, the function causes
ConTeXt to exit, even when I enclose 'figure.check()' into the 'pcall' (to
be handled like try/catch mechanism).
Is there a way so that the function 'figures.getinfo()' does't exit
ConTeXt, it just returns 'nil', or even gives info which directories (or
even which file types) were searched?
TIA.
something like that (untested), eventaully to be wrapped in a your
function
local fileone = "NonExisting.pdf"
local data
if not lfs.isfile(fileone) then
report("unknown file %a",fileone)
well, yes, this should work; but \externalfigure uses a mechanism to lookup for a file which combines paths specified by "location=", "directory=", "order=" and maybe some more.

And whilst \externalfigure should find a file (whose location may not be known exactly, it just may use e.g. "directory=" spec), simple "lfs.isfile(fileone)" could not find the file since the exact path has not been specified.

IOW, I need to combine searching-for-file mechanism which is used inside \externalfigure with 'figures.getinfo()' so the 'getinfo()' should return 'nil' when no file (being specified like in \externalfigure, i.e. with no exact path, even without extension) is found.

BTW: Ctx tells me "attempt to call a nil value (global 'report')" on "report("unknown file %a",fileone)" - do I have to enable/load something?

Lukas
Post by Procházka Lukáš Ing.
else
data = figures.getinfo("NonExisting.pdf")
end
--
Ing. Lukáš Procházka | mailto:***@pontex.cz
Pontex s. r. o. | mailto:***@pontex.cz | http://www.pontex.cz | IDDS: nrpt3sn | IČO: 40763439
Bezová 1658
147 14 Praha 4

Mob.: +420 702 033 396

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-***@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage : http://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
__________________________
luigi scarso
2018-12-06 10:57:52 UTC
Permalink
Post by Procházka Lukáš Ing.
Hello Luigi,
BTW: Ctx tells me "attempt to call a nil value (global 'report')" on
"report("unknown file %a",fileone)" - do I have to enable/load something?
should be something like
local report = logs.reporter("my application")
--
luigi
Hans van der Meer
2018-12-06 11:05:56 UTC
Permalink
Are you sure that data is not nil here?
If so, this function returns nil.
dr. Hans van der Meer
Post by Procházka Lukáš Ing.
Hello,
----
\startluacode
figures.getinfo = function(name, page)
if type(name) == "string" then
name = { name = name, page = page }
end
if name.name then
local data = figures.push(name)
--figures.identify()
local ok, res = pcall(figures.identify)
print(">>1", ok, res)
--figures.check()
local ok, res = pcall(figures.check)
print(">>2", ok, res)
figures.pop()
return data
end
end
local data = figures.getinfo("NonExisting.pdf")
\stopluacode
----
The problem is that once the PDF file doesn't exist, the function causes ConTeXt to exit, even when I enclose 'figure.check()' into the 'pcall' (to be handled like try/catch mechanism).
Is there a way so that the function 'figures.getinfo()' does't exit ConTeXt, it just returns 'nil', or even gives info which directories (or even which file types) were searched?
TIA.
Best regards,
Lukas
--
Bezová 1658
147 14 Praha 4
Mob.: +420 702 033 396
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
webpage : http://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___________________________________________________________________________________
Wolfgang Schuster
2018-12-06 11:25:58 UTC
Permalink
Post by Procházka Lukáš Ing.
Hello,
----
\startluacode
figures.getinfo = function(name, page)
    if type(name) == "string" then
        name = { name = name, page = page }
    end
    if name.name then
        local data = figures.push(name)
        --figures.identify()
local ok, res = pcall(figures.identify)
print(">>1", ok, res)
        --figures.check()
local ok, res = pcall(figures.check)
print(">>2", ok, res)
        figures.pop()
        return data
    end
end
local data = figures.getinfo("NonExisting.pdf")
\stopluacode
----
The problem is that once the PDF file doesn't exist, the function causes
ConTeXt to exit, even when I enclose 'figure.check()' into the 'pcall'
(to be handled like try/catch mechanism).
Is there a way so that the function 'figures.getinfo()' does't exit
ConTeXt, it just returns 'nil', or even gives info which directories (or
even which file types) were searched?
You can use the \doifelsefigure command for a simple check


\setupexternalfigure[location={local,global,default}]

\starttext

\doifelsefigure{cow}{YES}{NO}

\doifelsefigure{mill}{YES}{NO}

\doifelsefigure{bridge}{YES}{NO}

\stoptext


or the following stripped down version of the underlying Lua
code of the \doifelsefigure command


\setupexternalfigure[location={local,global,default}]

\starttext

\startluacode

local cow = figures.getinfo("cow")

if figures.get("status","status",0) == 0 then
context("NO") context.par()
else
context("YES") context.par()
end

local mill = figures.getinfo("mill")

if figures.get("status","status",0) == 0 then
context("NO") context.par()
else
context("YES") context.par()
end

local bridge = figures.getinfo("bridge")

if figures.get("status","status",0) == 0 then
context("NO") context.par()
else
context("YES") context.par()
end

\stopluacode

\stoptext


Wolfgang
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-***@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage : http://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
_____________________________________________________

Loading...