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. 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 asciidoc+unsubscribe@** > googlegroups.com <asciidoc%[email protected]>. > For more options, visit this group at http://groups.google.com/** > group/asciidoc?hl=en <http://groups.google.com/group/asciidoc?hl=en>. > > -- 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.
