From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik Subject: Re: [PATCH] Re: Custom docbook stylesheets. Date: Fri, 14 May 2010 13:39:44 +0200 Message-ID: <4A4601B5-415C-4320-824D-D790D7154F32@gmail.com> References: <9C2D1FA8-9C92-4B8A-8349-A5B767658FC7@gmail.com> <013716F6-30B8-4755-B276-DF8CED591928@gmail.com> <6FA9FAF1-AF5A-4FBF-B831-65567956B38D@gmail.com> Mime-Version: 1.0 (Apple Message framework v936) Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Return-path: Received: from [140.186.70.92] (port=48830 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OCtF9-0006xh-HX for emacs-orgmode@gnu.org; Fri, 14 May 2010 07:39:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OCtF6-0003Zo-SR for emacs-orgmode@gnu.org; Fri, 14 May 2010 07:39:51 -0400 Received: from mail-ew0-f216.google.com ([209.85.219.216]:34272) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OCtF6-0003Zh-K6 for emacs-orgmode@gnu.org; Fri, 14 May 2010 07:39:48 -0400 Received: by ewy8 with SMTP id 8so801631ewy.8 for ; Fri, 14 May 2010 04:39:47 -0700 (PDT) In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Baoqiu Cui Cc: emacs-orgmode@gnu.org Dear Baoqiu, thanks for the patch, I applied it. Can you please also make a patch for the documentation - I think #+XSLT must be mentioned in the export chapter.... And an entry for the Changes.org file would indeed be nice, can you write that as well? Thanks! - Carsten On May 14, 2010, at 1:15 AM, Baoqiu Cui wrote: > dsmith@vtiinstruments.com (Dale P. Smith) writes: > >> Baoqiu Cui writes: >> >>> Before I change the document for variable >>> `org-export-docbook-xslt-proc-command', let's finalize the design of >>> this first. :-) >>> >>> Currently `org-export-docbook-xslt-proc-command' contains two >>> format-like specs: "%i" (for the input DocBook XML file) and >>> "%o" (for >>> the output FO file). Values of these two specs will be generated >>> based >>> on the Org file name to be exported. >>> >>> We should add a 3rd spec, "%s", to this variable for the XSLT >>> stylesheet >>> that users would like to use for exporting the Org file. As Dale >>> pointed earlier, users would like to use different stylesheets for >>> different Org files. By default, the value of the stylesheet is set >>> based on a new customizable variable called >>> `org-export-docbook-xslt-stylesheet'. However users can use # >>> +XSLT in >>> each individual Org file to override it. >>> >>> Are you OK with this? >> >> I am. It's pretty much exactly what I was thinking. > > Great! I am attaching a patch that does what was described above. > > Carsten: This patch introduces a minor "incompatible" change in > DocBook > exporter. Maybe you want to mention that in the next Org-mode > release; > otherwise users of DocBook exporter will hit exporting failures caused > by their old invalid customizable variable settings. > > BTW, I am not sure if my way of setting/checking the newly added > property of :xslt is the best one. You can change it if you see any > problem. > > diff --git a/lisp/org-docbook.el b/lisp/org-docbook.el > index 768702f..bbd0bed 100644 > --- a/lisp/org-docbook.el > +++ b/lisp/org-docbook.el > @@ -184,32 +184,39 @@ default, but users can override them using `# > +ATTR_DocBook:'." > :group 'org-export-docbook > :type 'coding-system) > > +(defcustom org-export-docbook-xslt-stylesheet nil > + "File name of the XSLT stylesheet used by DocBook exporter. > +This XSLT stylesheet is used by > +`org-export-docbook-xslt-proc-command' to generate the Formatting > +Object (FO) files. You can use either `fo/docbook.xsl' that > +comes with DocBook, or any customization layer you may have." > + :group 'org-export-docbook > + :type 'string) > + > (defcustom org-export-docbook-xslt-proc-command nil > - "XSLT processor command used by DocBook exporter. > -This is the command used to process a DocBook XML file to > -generate the formatting object (FO) file. > + "Format of XSLT processor command used by DocBook exporter. > +This command is used to process a DocBook XML file to generate > +the Formatting Object (FO) file. > > The value of this variable should be a format control string that > -includes two `%s' arguments: the first one is for the output FO > -file name, and the second one is for the input DocBook XML file > -name. > +includes three arguments: `%i', `%o', and `%s'. During exporting > +time, `%i' is replaced by the input DocBook XML file name, `%o' > +is replaced by the output FO file name, and `%s' is replaced by > +`org-export-docbook-xslt-stylesheet' (or the #+XSLT option if it > +is specified in the Org file). > > For example, if you use Saxon as the XSLT processor, you may want > to set the variable to > > - \"java com.icl.saxon.StyleSheet -o %s %s /path/to/docbook.xsl\" > + \"java com.icl.saxon.StyleSheet -o %o %i %s\" > > If you use Xalan, you can set it to > > - \"java org.apache.xalan.xslt.Process -out %s -in %s -xsl /path/to/ > docbook.xsl\" > + \"java org.apache.xalan.xslt.Process -out %o -in %i -xsl %s\" > > For xsltproc, the following string should work: > > - \"xsltproc --output %s /path/to/docbook.xsl %s\" > - > -You need to replace \"/path/to/docbook.xsl\" with the actual path > -to the DocBook stylesheet file on your machine. You can also > -replace it with your own customization layer if you have one. > + \"xsltproc --output %o %s %i\" > > You can include additional stylesheet parameters in this command. > Just make sure that they meet the syntax requirement of each > @@ -218,18 +225,19 @@ processor." > :type 'string) > > (defcustom org-export-docbook-xsl-fo-proc-command nil > - "XSL-FO processor command used by DocBook exporter. > -This is the command used to process a formatting object (FO) file > -to generate the PDF file. > + "Format of XSL-FO processor command used by DocBook exporter. > +This command is used to process a Formatting Object (FO) file to > +generate the PDF file. > > The value of this variable should be a format control string that > -includes two `%s' arguments: the first one is for the input FO > -file name, and the second one is for the output PDF file name. > +includes two arguments: `%i' and `%o'. During exporting time, > +`%i' is replaced by the input FO file name, and `%o' is replaced > +by the output PDF file name. > > For example, if you use FOP as the XSL-FO processor, you can set > the variable to > > - \"fop %s %s\"" > + \"fop %i %o\"" > :group 'org-export-docbook > :type 'string) > > @@ -334,13 +342,18 @@ in a window. A non-interactive call will only > return the buffer." > "Export as DocBook XML file, and generate PDF file." > (interactive "P") > (if (or (not org-export-docbook-xslt-proc-command) > - (not (string-match "%[io].+%[io]" org-export-docbook-xslt-proc- > command))) > + (not (string-match "%[ios].+%[ios].+%[ios]" org-export-docbook- > xslt-proc-command))) > (error "XSLT processor command is not set correctly")) > (if (or (not org-export-docbook-xsl-fo-proc-command) > (not (string-match "%[io].+%[io]" org-export-docbook-xsl-fo-proc- > command))) > (error "XSL-FO processor command is not set correctly")) > (message "Exporting to PDF...") > (let* ((wconfig (current-window-configuration)) > + (opt-plist > + (org-export-process-option-filters > + (org-combine-plists (org-default-export-plist) > + ext-plist > + (org-infile-export-plist)))) > (docbook-buf (org-export-as-docbook hidden ext-plist > to-buffer body-only pub-dir)) > (filename (buffer-file-name docbook-buf)) > @@ -350,9 +363,16 @@ in a window. A non-interactive call will only > return the buffer." > (and (file-exists-p pdffile) (delete-file pdffile)) > (message "Processing DocBook XML file...") > (shell-command (format-spec org-export-docbook-xslt-proc-command > - (format-spec-make ?o fofile ?i (shell-quote-argument filename)))) > + (format-spec-make > + ?i (shell-quote-argument filename) > + ?o (shell-quote-argument fofile) > + ?s (shell-quote-argument > + (or (plist-get opt-plist :xslt) > + org-export-docbook-xslt-stylesheet))))) > (shell-command (format-spec org-export-docbook-xsl-fo-proc-command > - (format-spec-make ?i fofile ?o pdffile))) > + (format-spec-make > + ?i (shell-quote-argument fofile) > + ?o (shell-quote-argument pdffile)))) > (message "Processing DocBook file...done") > (if (not (file-exists-p pdffile)) > (error "PDF file was not produced") > diff --git a/lisp/org-exp.el b/lisp/org-exp.el > index c32dd2a..147a1f6 100644 > --- a/lisp/org-exp.el > +++ b/lisp/org-exp.el > @@ -704,7 +704,7 @@ modified) list.") > "LINK_UP" "LINK_HOME" "SETUPFILE" "STYLE" > "LATEX_HEADER" "LATEX_CLASS" > "EXPORT_SELECT_TAGS" "EXPORT_EXCLUDE_TAGS" > - "KEYWORDS" "DESCRIPTION" "MACRO" "BIND") > + "KEYWORDS" "DESCRIPTION" "MACRO" "BIND" "XSLT") > (mapcar 'car org-export-inbuffer-options-extra)))) > p key val text options a pr style > latex-header latex-class macros letbind > @@ -740,6 +740,8 @@ modified) list.") > (setq options (concat val " " options))) > ((string-equal key "BIND") > (push (read (concat "(" val ")")) letbind)) > + ((string-equal key "XSLT") > + (setq p (plist-put p :xslt val))) > ((string-equal key "LINK_UP") > (setq p (plist-put p :link-up val))) > ((string-equal key "LINK_HOME") > > Thanks, > > -- > Baoqiu > _______________________________________________ > Emacs-orgmode mailing list > Please use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode - Carsten