Hi, after a long time I'm playing with ConTeXt again… Current beta MkIV seems to have a bug in the Lua function io.lines: for myline in io.lines(myfile) do logs.report(myline) end "myfile" just contains one line with a number, without return/newline. If the number has more than one digit, I get single digits as "myline". Greetlings, Hraban --- http://www.fiee.net/texnique/ http://wiki.contextgarden.net https://www.cacert.org (I'm an assurer)
On 8/14/2013 4:05 PM, Henning Hraban Ramm wrote:
Hi, after a long time I'm playing with ConTeXt again…
Current beta MkIV seems to have a bug in the Lua function io.lines:
for myline in io.lines(myfile) do logs.report(myline) end
"myfile" just contains one line with a number, without return/newline. If the number has more than one digit, I get single digits as "myline".
looks ok here, btw it's logs.report("some tag",myline)
Greetlings, Hraban --- http://www.fiee.net/texnique/ http://wiki.contextgarden.net https://www.cacert.org (I'm an assurer)
___________________________________________________________________________________ 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 ___________________________________________________________________________________
-- ----------------------------------------------------------------- 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 14.08.2013 um 16:05 schrieb Henning Hraban Ramm
Hi, after a long time I'm playing with ConTeXt again…
Current beta MkIV seems to have a bug in the Lua function io.lines:
for myline in io.lines(myfile) do logs.report(myline) end
"myfile" just contains one line with a number, without return/newline. If the number has more than one digit, I get single digits as "myeline".
Do you have a minimal working example? Wolfgang
Am 2013-08-14 um 20:15 schrieb Wolfgang Schuster
Current beta MkIV seems to have a bug in the Lua function io.lines:
for myline in io.lines(myfile) do logs.report(myline) end
"myfile" just contains one line with a number, without return/newline. If the number has more than one digit, I get single digits as "myeline".
Do you have a minimal working example?
Minimal working yes, but not minimal failing ;-) This works: io.output(io.open("myfile.txt","w")) io.write("123") io.close() for myline in io.lines("myfile.txt") do print(myline .. "\n") end But in my t-lilyfilter.tex where it reads the systems.count files of LilyPond (that contain only the number of note systems that resulted from the included LilyPond code), it fails: function thirddata.parselilypondfile(name) -- include all systems (note lines) -- name is like \LILYTEMP/mainfile-temp-lilypond-21.pdf logs.report("LILYPOND","name='" .. name .. "'") syco = 0 for ts in io.lines(string.gsub(name, '%.pdf$', '-systems.count')) do syco = ts*1 end for nr = 1, syco do logs.report("LILYPOND","including system no." .. nr) context("\\externalfigure[" .. string.gsub(name, '%.pdf$', '-' .. nr) .. "]") end end While I have a single-digit number of systems, it works, but the song of my failing case has 11 lines. I wouldn't complain if it wouldn't have worked before! Greetlings, Hraban
On 8/14/2013 4:43 PM, Henning Hraban Ramm wrote:
Am 2013-08-14 um 20:15 schrieb Wolfgang Schuster
: Current beta MkIV seems to have a bug in the Lua function io.lines:
for myline in io.lines(myfile) do logs.report(myline) end
"myfile" just contains one line with a number, without return/newline. If the number has more than one digit, I get single digits as "myeline".
Do you have a minimal working example?
Minimal working yes, but not minimal failing ;-)
This works:
io.output(io.open("myfile.txt","w")) io.write("123") io.close()
for myline in io.lines("myfile.txt") do print(myline .. "\n") end
But in my t-lilyfilter.tex where it reads the systems.count files of LilyPond (that contain only the number of note systems that resulted from the included LilyPond code), it fails:
function thirddata.parselilypondfile(name) -- include all systems (note lines) -- name is like \LILYTEMP/mainfile-temp-lilypond-21.pdf logs.report("LILYPOND","name='" .. name .. "'") syco = 0 for ts in io.lines(string.gsub(name, '%.pdf$', '-systems.count')) do syco = ts*1 end
for nr = 1, syco do logs.report("LILYPOND","including system no." .. nr) context("\\externalfigure[" .. string.gsub(name, '%.pdf$', '-' .. nr) .. "]") end end
While I have a single-digit number of systems, it works, but the song of my failing case has 11 lines.
I wouldn't complain if it wouldn't have worked before!
well, you probably were lucky before: string.gsub returns multiple values so io.lines get a second argument that limits the length of what gets returned local myfile = "myfile.txt" for myline in io.lines(myfile,2) do logs.report("test",myline) end so you need: io.lines((string.gsub(name, '%.pdf$', '-systems.count'))) or local name = string.gsub(name, '%.pdf$', '-systems.count') io.lines(name) or maybe better: io.lines(file.replacesuffix(name,'-systems.count')) 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 -----------------------------------------------------------------
On 8/14/2013 5:00 PM, Hans Hagen wrote:
On 8/14/2013 4:43 PM, Henning Hraban Ramm wrote:
Am 2013-08-14 um 20:15 schrieb Wolfgang Schuster
: Current beta MkIV seems to have a bug in the Lua function io.lines:
btw, it's a lua issue, not related to luatex ... local myfile = "myfile.txt" for myline in io.lines(myfile) do logs.report("test 1",myline) end for myline in io.lines(myfile,3) do logs.report("test 2",myline) end for myline in io.lines(myfile,1) do logs.report("test 2",myline) end for myline in io.lines(myfile,0) do logs.report("test 2",myline) end for myline in io.lines(myfile,-1) do logs.report("test 2",myline) end the zero case loops and the last case gives a "memory allocation error: block too big" so these can be considered buglets in lua 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 -----------------------------------------------------------------
Am 2013-08-14 um 21:00 schrieb Hans Hagen
for ts in io.lines(string.gsub(name, '%.pdf$', '-systems.count')) do syco = ts*1 end
well, you probably were lucky before: string.gsub returns multiple values so io.lines get a second argument that limits the length of what gets returned
Thank you, didn't know that!
local myfile = "myfile.txt"
for myline in io.lines(myfile,2) do logs.report("test",myline) end
so you need:
io.lines((string.gsub(name, '%.pdf$', '-systems.count')))
or
local name = string.gsub(name, '%.pdf$', '-systems.count')
io.lines(name)
Great, that works!
or maybe better:
io.lines(file.replacesuffix(name,'-systems.count'))
No, that doesn't work, because the dot stays, so I get foobar.-systems.count Greetlings, Hraban --- http://www.fiee.net/texnique/ http://wiki.contextgarden.net https://www.cacert.org (I'm an assurer)
participants (4)
-
Hans Hagen
-
Henning Hraban Ramm
-
Henning Hraban Ramm
-
Wolfgang Schuster