Am 20.11.2012 03:10, schrieb Lex Trotman:
On 20 November 2012 10:40, Lex Trotman <[email protected]> wrote:



On 20 November 2012 02:10, Wilhelm <[email protected]> wrote:

Hi all,

very frequently I have to write something like the following:

.[codetitle]#{srccaption}# 
link:{src}/{chap}/{subchap}/coffee05/Coffee.java[[codelink]+coffee05/Coffee.java+]
ifdef::backend-docbook[]
["source","java",args="role=\"code\""]
endif::[]
ifndef::backend-docbook[]
["source","java"]
endif::[]
----
sys::[{ex} Fillable {src}/{chap}/{subchap}/coffee05/Coffee.java]
----
<1> The interface


where {ex} is set to my source-code extractor tool, "Fillable" is the snippet 
name to be extracted and the other document attributes are set accordingly.

I wonder if it is possible to write a macro to replace all the stuff from above 
with *one* call, e.g.


Hi Wilhelm,

It is, but....

Asciidoc "macros" are output substitution macros, not input substitution macros 
that many other languages have.  This means that you have to generate all the backend 
output you need yourself, so complex things are much harder, you can't run it back 
through asciidoc without going recursive (but that can be done, see how asciidoc table 
styles are implemented, it may be that is your solution).

I guess Asciidoc doesn't do input macro substitution since, in the Unix 
environment where it started, there are already several ways of doing input 
substitution, one of which you have found.  But they do cause the line number 
problem.  A nice-to-have would be for Asciidoc to accept line/column 
specifications as C compilers do to re-align input to the original source 
file/line/column at the end of a substitution.

Hi Wilhelm,

A while after pressing return (isn't it always the case) it occurred
to me that there may be a way of avoiding the line number problem.
Instead of writing multiple lines to the Asciidoc source file, which
messes up the line numbers, you could write the multiple lines to a
small file and just write an include macro in the Asciidoc source.
Since this include macro is the same size as your
"source::Coffee.java[Fillable]" it should not mess up the line
numbers.

Ahm, that's the solution, I guess!
I'll rewrite my preprocessor to substitute the pseudo-macros and to produce these little includes!

Very many thanks!


In all probability the overhead won't be too much, especially if you
put the little include files on a memory file system (/tmp on many
modern distros).

Cheers
Lex




Just an aside, some time ago I was creating a plugin to extract stuff and put 
it in source blocks as you are doing.  In the end I moved the whole thing to a 
pre-processor that extracted all the marked code snippets once and then made 
one pass through the asciidoc file to plug them in, much simpler, and of course 
it also plugged in the boilerplate, and muuuuuuuch faster since it searches the 
input once only.  But that may not matter if you are only doing a few snippet 
insertions.


Cheers
Lex


source::Coffee.java[Fillable]
<1> The interface

Any hints are welcome!

Actually I'm doing some preprocessing of the asciidoc-file with an awk-based tool: this 
tool replaces the "pseudo" block-macro call

source::Coffee.java[Fillable]

with the stuff above. It works quite well but has the disadvantage that the 
line numbers in error/warnings of asciidoc are displaced because more lines are 
generated.

--
Wilhelm

--
You received this message because you are subscribed to the Google Groups 
"asciidoc" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/asciidoc?hl=en.





--
Wilhelm

--
You received this message because you are subscribed to the Google Groups 
"asciidoc" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/asciidoc?hl=en.

Reply via email to