On Mon, 8 Jul 2013, Stéphane Gourichon wrote:

Le 07/07/2013 20:14, Dag Wieers a écrit :
>  Question : Can we set ODF document properties from asciidoc source using
> asciidoc-odf ? Some of my documents use them in page footers. In > practice, > exact footer text (and document subtitle) definitely needs to be > different > in different documents: it includes a kind of document ID currently > fetched
>  using an ODF document property.

 There are two ways to do this.

  - You make use of an ODF stylesheet when producing an .fodt file
  - You make use of an ODF template to produce a real .odt file

 The first one works best if you prefer to tinker with the file by hand,
 the second one works best if you like to tinker with the look&feel using
 LibreOffice. The first method gives the most possibilities (as the
 LibreOffice interface does not give 100% control of what ODF can do).

 I use the first method, the second method, while it should work has not
 been tested as much and probably could use some more work to get it
 finished.

 The other benefit of the first method is that it generates an .fodt (Flat
 ODT file) that you can inspect using a text-editor. Once modified with
 LibreOffice to your liking, you can copy over the important changes back
 into the ODT stylesheet for future document output. So once your
 stylesheet is as you want it to look, you can reuse the stylesheet for all
 future (and older) AsciiDoc files.

Thanks for your explanation, which if I understand covers the backend part, not the front. Let me take an example.

Right, I was answering your general mail, rather than the specific question at the end of your mail ;-) I guess I forgot about the question once I was finished with describing how I used it.


    Expected workflow

The expected way would be to add in asciidoc source

= My invoice title
: lang: en
: Ref_devis: abc123
: invoiceid: def456

And have asciidoc-odf generate something like :

   <meta:user-defined meta:name="*Ref_devis">abc123*</meta:user-defined>

 (...)

      <style:master-page style:name="Standard"
 style:page-layout-name="Mpm1">
 <style:footer> <text:p text:style-name="MP1"> réf. devis n°
 <text:user-defined style:data-style-name="N0"
 text:name="*Ref_devis">ABC123*</text:user-defined> Page <text:page-number
 text:select-page="current"/>/<text:page-count>1</text:page-count>
 </text:p> <text:p text:style-name="MP1">...Legal stuff...</text:p>
 </style:footer> </style:master-page>

That won't work since there is no stylesheet generation. What we can do from the backend is pretty limited. That doesn't mean we cannot redesign either the way the backend works now, or how asciidoc processes backends.


    The "document properties" approach, from existing

I got the code from git (will report some glitches separately) and ran asciidoc -b odt README.asciidoc .

The generated file contains :

  <meta:user-defined meta:name="author">Dag Wieers</meta:user-defined>
  <meta:user-defined meta:name="email">[email protected]</meta:user-defined>
which seem to come from
: author: Dag Wieers
: email: [email protected]
but if I add another attribute, e.g. :quoteid: abc123, it won't get included in fodt output.

curriculum-vitae-dag-wieers.txt contains :
: linux-experience: {sys:echo $(( $(date +%Y) - 1995))}
I wish curriculum-vitae-dag-wieers.fodt would contain :

 <meta:user-defined meta:name="linux-experience">18</meta:user-defined>

But it didn't.

What you are refering to is summarized in:

    https://github.com/dagwieers/asciidoc-odf/issues/11

I will hapilly merge a pull-request that implements this.


Looking at source code I see in odt.conf :

  <meta:user-defined meta:name="author">{author}</meta:user-defined>
  <meta:user-defined meta:name="email">{email}</meta:user-defined>
  <meta:user-defined meta:name="version">{version}</meta:user-defined>

So, it looks like in current code author, email and version can be user-defined document properties. Including the others would need to make a loop turning more asciidoc-level properties into ODF-level meta:user-defined.

Indeed. It would be a great improvement, but I don't see how we can do this. Maybe there is a way to do this, I don't know.

I only added what made the most sense. Mind you that the FODT metadata also includes additional metadata (e.g. document title, keywords, preamble, author, ...) from the AsciiDoc file. And this is also put into the PDF (which is great for SEO in PDF files) !



    The asciidoc string substitution approach

Another solution might work : drop user-defined document properties altogether and just use asciidoc-based string substitution. Just put in asciidoc some header like :

and try method 1 or 2 that you described, like putting a footer section with {invoiceid}.

But I'm fearing that :

 * it may work ok with method 1 (not tested)
 * it would only work once with method 2, because after the document is
   edited and saved in LibreOffice, the substituted value becomes the
   constant def456, losing the reference to invoiceid.

What do you think ?

Headers and footers are completely defined in the stylesheet and there is no mechanism to substitute information in the stylesheet. For FODT that would be impossible, for ODT the processing could be part of the creation of the file. However my preference is to have something that works for both (i.e. ODF variables).

--
-- dag wieers, [email protected], http://dag.wieers.com/
-- dagit linux solutions, [email protected], http://dagit.net/

[Any errors in spelling, tact or fact are transmission errors]

--
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/groups/opt_out.


Reply via email to