Hi,
I have an issue with the latest release of AsciiDoc (8.6.9) when using the
XHTML backend in conjunction with the data-uri attribute to encode images
as base64. Basically, processing just hangs. Was just wondering if anyone
else has experienced the same issue, or if it is an issue with my
setup/environment.
*Environment*
My environment is as follows:
OS: Windows 7 Enterprise SP1 64-bit
AsciiDoc: 8.6.9
Python: 2.7.6 64-bit
I found the issue is caused by a change (since 8.6.8) in the xhtml11 conf
file:
*xhtml11 conf file (8.6.8):*
[image-blockmacro]
<div class="imageblock{style? {style}}{role? {role}}{unbreakable-option?
unbreakable}"{id? id="{id}"}{align? style="text-align:{align};"}{float?
style="float:{float};"}>
<div class="content">
<a class="image" href="{link}">
{data-uri%}<img src="{imagesdir=}{imagesdir?/}{target}"
alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"} />
{data-uri#}<img alt="{alt={target}}"{width? width="{width}"}{height?
height="{height}"}
src="data:image/{eval:os.path.splitext(r'{target}')[1][1:]};base64,
{data-uri#}{sys:"{python}" -u -c "import base64,sys;
base64.encode(sys.stdin,sys.stdout)" <
"{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}" />
*xhtml11 conf file (8.6.9):*
[image-blockmacro]
<div class="imageblock{style? {style}}{role? {role}}{unbreakable-option?
unbreakable}"{id? id="{id}"}{align? style="text-align:{align};"}{float?
style="float:{float};"}>
<div class="content">
<a class="image" href="{link}">
{data-uri%}<img src="{imagesdir=}{imagesdir?/}{target}"
alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"} />
{data-uri#}<img alt="{alt={target}}"{width? width="{width}"}{height?
height="{height}"}
{data-uri#}{sys:"{python}" -u -c "import mimetypes,base64,sys; print
'src=\"data:'+mimetypes.guess_type(r'{target}')[0]+';base64,';
base64.encode(sys.stdin,sys.stdout)" <
"{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}" />
The difference is 8.6.8 version uses the conf file to output the "src=..."
part, but the 8.6.9 uses the system call to have Python print it. The
issue appears to be the escaped quote contained in the print statement in
the latter.
*Steps to reproduce*
To reproduce, I create a basic document like this:
= Image test
== Foo
.Bar
image::tst.png[Foo bar]
Then render with the following command:
C:\>python C:/bin/asciidoc-8.6.9/asciidoc.py --verbose --attribute data-uri
--backend=xhtml11 --out-file="C:\tst\image_test.xhtml"
"C:\tst\image_test.txt"
Process hangs, with output as:
asciidoc: reading: C:\bin\asciidoc-8.6.9\asciidoc.conf
asciidoc: reading: C:\tst\image_test.txt
asciidoc: reading: C:\bin\asciidoc-8.6.9\xhtml11.conf
asciidoc: include1: C:\bin\asciidoc-8.6.9\stylesheets\asciidoc.css
asciidoc: image_test.txt: line 1: ifeval: "source-highlight"=="pygments":
False
asciidoc: include1: C:\bin\asciidoc-8.6.9\javascripts\asciidoc.js
asciidoc: reading: C:\bin\asciidoc-8.6.9\filters\code\code-filter.conf
asciidoc: reading:
C:\bin\asciidoc-8.6.9\filters\graphviz\graphviz-filter.conf
asciidoc: reading: C:\bin\asciidoc-8.6.9\filters\latex\latex-filter.conf
asciidoc: reading: C:\bin\asciidoc-8.6.9\filters\music\music-filter.conf
asciidoc: reading:
C:\bin\asciidoc-8.6.9\filters\source\source-highlight-filter.conf
asciidoc: image_test.txt: line 1: ifeval:
"source-highlight"=="source-highlight": True
asciidoc: image_test.txt: line 1: ifeval: "source-highlight"=="highlight":
False
asciidoc: image_test.txt: line 1: ifeval: "source-highlight"=="pygments":
False
asciidoc: reading: C:\bin\asciidoc-8.6.9\lang-en.conf
asciidoc: writing: C:\tst\image_test.xhtml
asciidoc: image_test.txt: line 7: evaluating:
{eval:os.path.join(r"C:\tst",r"",r"tst.png")}
asciidoc: image_test.txt: line 7: evaluating:
{sys:"C:\bin\python-2.7.6-64\python.exe" -u -c "import
mimetypes,base64,sys; print '
src=\"data:'+mimetypes.guess_type(r'tst.png')[0]+';base64,';
base64.encode(sys.stdin,sys.stdout)" < "C:\tst\tst.png"}
asciidoc: image_test.txt: line 7: shelling:
C:\bin\python-2.7.6-64\python.exe -u -c "import mimetypes,base64,sys; print
'src=\"dat
a:'+mimetypes.guess_type(r'tst.png')[0]+';base64,';
base64.encode(sys.stdin,sys.stdout)" < C:\tst\tst.png > c:\users\will\appd
ata\local\temp\tmpzlzbjt
src="data:image/png;base64,
*Second way to reproduce*
I also found the same issue outside of AsciiDoc, so I guess it is actually
a Python problem. I use a basic text file with a few lines in it.
At the command line I run the following command successfully:
C:\tst>python -u -c "import sys; print 'foobar:'; print
sys.stdin.readlines()" < "test.txt"
foobar:
['foo\r\n', 'bar\r\n', 'baz']
However, including an escaped quote hangs:
C:\tst>python -u -c "import sys; print 'foobar:\"'; print
sys.stdin.readlines()" < "test.txt"
foobar:"
It only happens when trying to read from stdin though, as the following
command works:
C:\tst>python -u -c "import sys; print 'foobar:\"'; print sys.stdin.mode" <
"test.txt"
foobar:"
r
Cheers,
Will
--
You received this message because you are subscribed to the Google Groups
"asciidoc" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/asciidoc.
For more options, visit https://groups.google.com/d/optout.