emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Nicolas Goaziou <n.goaziou@gmail.com>
To: Christian Wittern <cwittern@gmail.com>
Cc: emacs-orgmode@gnu.org, Jambunathan K <kjambunathan@gmail.com>
Subject: Re: Tweaking the export
Date: Sun, 29 Jan 2012 10:07:06 +0100	[thread overview]
Message-ID: <87wr8akhc5.fsf@gmail.com> (raw)
In-Reply-To: <4F235BC2.2080903@gmail.com> (Christian Wittern's message of "Sat, 28 Jan 2012 11:21:54 +0900")

Hello,

Christian Wittern <cwittern@gmail.com> writes:

> Exactly.  The reason for wanting to do this is that the above is my
> setup for translating, but in some cases the publication will have
> only the translation, for such cases, I want to extract just the
> translation.  This should then produce a new org file, that simple has
> either everything before the tab (the original) or everything after
> the tab (the translation), while leaving all lines that do not contain
> a <tab> character as they are.
>
> I assume this would be an easy task with the new exporter -- but still
> a bit at loss on where to start...

From here, I'll assume that:

  1. you only split paragraphs (not tables, or lists, and so on);
  2. your back-end is called `translator';
  3. you never use tabs in objects (links, latex-fragments).

The first step would be to initialize a property that will allow to
control the side of the paragraph being exported:

#+begin_src emacs-lisp
(defconst org-translator-option-alist
   '((:translator-side nil nil left)))
#+end_src

Another step will be to create the basis of `translator', that is an Org
to Org back-end.

  1. For each ELEMENT in `org-element-all-elements', you need to created
     an appropriate transcoder in the following shape:

     #+begin_src emacs-lisp
     (defun org-translator-ELEMENT (element contents info)
       "Convert ELEMENT from Org to Org syntax."
       (org-element-ELEMENT-interpreter element contents))
     #+end_src

     This can be done quickly with a macro or some elisp.

  2. You should do the same with each OBJECT in
     `org-element-all-successors':

     #+begin_src emacs-lisp
     (defun org-translator-OBJECT (object contents info)
       "Convert OBJECT from Org to Org syntax."
       (org-element-OBJECT-interpreter object contents))
     #+end_src

     Though, you will need to duplicate and rename some functions
     created, as some objects share the same successor. Thus:

     - `org-translator-sub/superscript' will be split into
       `org-translator-subscript' and `org-translator-superscript';

     - `org-translator-text-markup' will be split into
       `org-translator-emphasis' and `org-translator-verbatim';

     - `org-translator-latex-or-entity' will be split into
       `org-translator-entity' and `org-translator-latex-fragment'.

  3. If all went well, you now have an impressive Org to Org converter.
     You can even test it with:

     #+begin_src emacs-lisp
     (switch-to-buffer (org-export-to-buffer 'translator "*Translation*"))
     #+end_src

     Obviously, there is not much to see.

Now, we're going to redefine `org-translator-paragraph' to properly
ignore one language or the other, depending on `:translator-side' value.

#+begin_src emacs-lisp
(defun org-translator-paragraph (paragraph contents info)
  "Convert PARAGRAPH to Org, ignoring one language.
Language kept is determined by `:translator-side' value."
  (let ((leftp (eq (plist-get info :translator-side) 'left)))
    (replace-regexp-in-string
     (if leftp "\t+.*$" "^.*\t+") "" contents)))
#+end_src

Eventually, you need to define two commands to respectively keep left
and right parts and save the output in an appropriate file.

#+begin_src emacs-lisp
(defun org-translator-left (file)
  "Save buffer in FILE, with only left language in paragraphs."
  (interactive "FFile (left language): ")
  (org-export-to-file 'translator file))

(defun org-translator-right (file)
  "Save buffer in FILE, with only right language in paragraphs."
  (interactive "FFile (right language): ")
  (org-export-to-file 
    'translator file nil nil nil '(:translator-side right)))
#+end_src

This is completely untested.


Regards,

-- 
Nicolas Goaziou

  parent reply	other threads:[~2012-01-29  9:09 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-21 20:14 [ANN] ASCII back-end for new export engine Nicolas Goaziou
2012-01-21 20:33 ` Samuel Wales
2012-01-21 20:36   ` Samuel Wales
2012-01-21 23:04   ` Nicolas Goaziou
2012-01-22  1:28     ` Samuel Wales
2012-01-22  9:43       ` Nicolas Goaziou
2012-01-22 16:36         ` Samuel Wales
2012-01-28 10:28           ` Samuel Wales
2012-01-28 13:55             ` Nicolas Goaziou
2012-01-28 20:50               ` Samuel Wales
2012-01-28 21:32                 ` Nicolas Goaziou
2012-01-28 22:15                   ` Samuel Wales
2012-01-28 23:58                     ` Nicolas Goaziou
2012-01-22 14:43 ` Martyn Jago
2012-01-22 15:45   ` Nicolas Goaziou
2012-01-22 16:43     ` Martyn Jago
2012-01-23 20:05     ` Eric Schulte
2012-01-23 20:49       ` Nicolas Goaziou
2012-01-22 16:35 ` Thomas S. Dye
2012-01-22 17:10   ` Nicolas Goaziou
2012-01-23  5:58     ` Thomas S. Dye
2012-01-25 17:41       ` Nicolas Goaziou
2012-01-26  6:49         ` Tweaking the export (was: Re: [ANN] ASCII back-end for new export engine) Christian Wittern
2012-01-27 13:06           ` Tweaking the export Nicolas Goaziou
2012-01-27 13:47             ` Jambunathan K
2012-01-27 14:03               ` Sebastien Vauban
2012-01-28  2:33                 ` Christian Wittern
2012-01-28  2:21               ` Christian Wittern
2012-01-28  4:03                 ` Eric Abrahamsen
2012-01-29  9:07                 ` Nicolas Goaziou [this message]
2012-02-04  6:21                   ` Christian Wittern
2012-02-17 20:06                     ` Nicolas Goaziou
2012-01-26  8:44         ` [ANN] ASCII back-end for new export engine Eric S Fraga
2012-01-26 13:59         ` Thomas S. Dye
2012-01-26 15:28           ` Nicolas Goaziou
2012-01-26 17:32             ` Thomas S. Dye
2012-01-26 18:31               ` Nicolas Goaziou
2012-01-26 19:00                 ` Achim Gratz
2012-01-27 12:58                   ` Nicolas Goaziou
2012-01-27 13:06                     ` Rick Frankel
2012-01-27 13:56                       ` Nicolas Goaziou
2012-01-27 16:31                         ` Achim Gratz
2012-02-01  6:44                         ` Achim Gratz
2012-01-26 20:10                 ` Thomas S. Dye
2012-02-01  8:36                 ` Jambunathan K
2012-01-27  8:10             ` Jambunathan K
2012-01-27 13:59               ` Nicolas Goaziou
2012-01-27 15:50                 ` Bastien
2012-01-27 16:29                 ` Thomas S. Dye
2012-01-27 17:04                 ` Jambunathan K
2012-01-27 18:13                   ` Thomas S. Dye
2012-01-27 18:31                     ` Jambunathan K
2012-01-27 19:21                       ` Achim Gratz
2012-01-27 19:48                         ` Thomas S. Dye
2012-01-27 20:10                           ` Nick Dokos
2012-01-27 20:11                       ` Thomas S. Dye
2012-01-23 21:33     ` Thomas S. Dye
2012-01-22 19:21 ` Thomas S. Dye
2012-01-22 20:50   ` Nicolas Goaziou
2012-01-23  6:14     ` Thomas S. Dye
2012-01-23  7:03       ` Nicolas Goaziou
2012-01-23 15:53         ` Thomas S. Dye
2012-01-23 18:18           ` Nicolas Goaziou
2012-01-23 21:27             ` Thomas S. Dye
2012-01-23 12:20     ` Andreas Leha
2012-01-27 17:00 ` Thomas S. Dye
2012-02-03 22:57   ` Nicolas Goaziou
2012-02-04 16:42     ` Thomas S. Dye
2012-02-05  2:19 ` Thomas S. Dye
2012-02-05  2:58 ` Thomas S. Dye
2012-02-05 14:09   ` Nicolas Goaziou
2012-02-06  1:34 ` Thomas S. Dye
2012-02-06 14:29   ` Nicolas Goaziou
2012-02-06 16:39     ` Thomas S. Dye
2012-02-06 17:05       ` Nicolas Goaziou
2012-02-06 18:46         ` Thomas S. Dye
2012-02-07  7:27           ` Nicolas Goaziou
2012-02-07  8:57             ` Document date and last updated date Sebastien Vauban
2012-02-07 17:45               ` Nicolas Goaziou
2012-02-07 22:29                 ` Sebastien Vauban
2012-02-07  6:22         ` [ANN] ASCII back-end for new export engine Thomas S. Dye
2012-02-07  7:07           ` Nicolas Goaziou
2012-02-07  9:00             ` Sebastien Vauban
2012-02-07 17:49               ` Nicolas Goaziou
2012-02-08  7:11                 ` Jambunathan K
2012-02-07 15:45             ` Thomas S. Dye

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87wr8akhc5.fsf@gmail.com \
    --to=n.goaziou@gmail.com \
    --cc=cwittern@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=kjambunathan@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).