From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Kitchin Subject: Re: Extending the Org syntax by a custom exporter - how to do it? Date: Wed, 26 Nov 2014 09:23:56 -0500 Message-ID: References: <20140315111059.00d3b8e0@aga-netbook> <20140315222244.5eee2361@aga-netbook> <874n2ysb30.fsf@gmail.com> <874mtnezx9.fsf@wmi.amu.edu.pl> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:49302) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XtdVl-0007Gr-Fo for emacs-orgmode@gnu.org; Wed, 26 Nov 2014 09:24:10 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XtdVg-0003yF-Li for emacs-orgmode@gnu.org; Wed, 26 Nov 2014 09:24:05 -0500 Received: from mail-qa0-x236.google.com ([2607:f8b0:400d:c00::236]:59299) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XtdVg-0003y9-HQ for emacs-orgmode@gnu.org; Wed, 26 Nov 2014 09:24:00 -0500 Received: by mail-qa0-f54.google.com with SMTP id i13so1990476qae.27 for ; Wed, 26 Nov 2014 06:24:00 -0800 (PST) In-Reply-To: (John Kitchin's message of "Tue, 25 Nov 2014 21:46:47 -0500") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Marcin Borkowski Cc: emacs-orgmode@gnu.org I played around with this a little. Here is a minimal kind of example with a custom exporter that handles quiz blocks separately. The quiz block can have some attributes defined that get used in rendering the HTML. Is this along the lines of what you are trying to do? * A custom type #+BEGIN_EXAMPLE Example text in a block to make sure it gets handled #+END_EXAMPLE Some instructions for the quiz. #+ATTR_quiz: :points 5 :correct-answer A #+BEGIN_quiz test quiz - [ ] answer A - [ ] answer B #+END_quiz #+BEGIN_SRC emacs-lisp :exports none (defun my-org-html-export-block (export-block contents info) "Transcode a EXPORT-BLOCK element from Org to HTML. CONTENTS is nil. INFO is a plist used as a communication channel. QUIZ blocks are handled separately." (cond ;; handle our special quiz block ((string= (org-element-property :type export-block) "QUIZ") (format "got it: %s points, correct answer = %s
You would have to parse the body to generate your html here.
%s
" (plist-get (read (format "%s" (org-element-property :attr_quiz export-block))) :points) (plist-get (read (format "%s" (org-element-property :attr_quiz export-block))) :correct-answer) (org-element-property :value export-block) )) ;; handle every other kind of block (t (org-html-export-block (export-block contents info))))) (org-export-define-derived-backend 'my-html 'html :translate-alist '((export-block . my-org-html-export-block)) ;; quiz blocks will not be parsed, they are handled directly in org-html-export-block. :export-block "quiz" ) (browse-url (org-export-to-file 'my-html "custom-element.html")) #+END_SRC #+RESULTS: : # John Kitchin writes: > Could you remind us of what you are trying to do? It seems like you may > not necessarily need custom elements (although that could be > useful). For example, you can put a lot of information in properties of > a headline. > > You might be interested in this: > > http://kitchingroup.cheme.cmu.edu/blog/2014/11/23/Machine-gradable-quizzes-in-emacs+org-modex/ > > I recently used this is in my class of 58 students (who all used emacs > and org-mode to take a quiz!). > > > Marcin Borkowski writes: > >> Hello there, >> >> this is close to necromancy, but let me revive this old thread. >> >> On 2014-03-16, at 11:16, Nicolas Goaziou wrote: >> >>> Another, more advanced option, is to use a parse tree filter to create >>> pseudo-types, i.e., element or object types that don't exist in regular >>> Org syntax. See `math-block' type in "ox-latex.el", in particular >>> `org-latex-math-block-tree-filter'. >> >> Now that I actually started work on my exporter, I'd like to investigate >> this further. The thing is, I'm not sure where to start. First of all, >> I have a bit old Org-mode (without latex-math-blocks); I guess I'll just >> have to update it (I'll try to do an Elpa update in a minute). But my >> question is: >> >> 1. Is it a good idea to instrument `org-latex--wrap-latex-math-block' >> for Edebug to learn what's happening? >> >> 2. Is there any other (possibly simpler) instance of pseudo-blocks I >> could study? It seems to me (from the docstring) that latex-math-blocks >> are a bit tricky; what I'm interested in is more like creating a new >> element similar to e.g. italics. >> >> (Reagrdless of the answer, I'll try with Edebug, but I'm a bit afraid >> that I won't understand what's going on). >> >> Also, if (when?) I "get it", I'm going to describe the process of adding >> a pseudo-object somewhere (I consider my blog, or maybe I could upload >> it to Worg?), so that other people can learn it easier. But for now, I >> might need help. >> >> Best, -- ----------------------------------- John Kitchin Professor Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 http://kitchingroup.cheme.cmu.edu