Personalizando como o html é gerado para blogs de código-fonte ao usar exportação no modo de organização

5

Eu tenho usado o modo de organização para criar postagens de blog sobre programação. Para isso, eu incluí segmentos de código embutidos no meu arquivo .org assim:

#+BEGIN_SRC csharp
public class UserBuilder
{
    private string _firstName;
    private string _lastName;
...
#+END_SRC

Quando eu uso a função de exportação html, ela é formatada assim:

<pre class="src src-csharp"><span style="color: #7f007f;">public</span> <span style="color: #7f007f;">class</span> <span style="color: #228b22;">UserBuilder</span>
{
    <span style="color: #7f007f;">private</span> <span style="color: #228b22;">string</span> <span style="color: #a0522d;">_firstName</span>;
    <span style="color: #7f007f;">private</span> <span style="color: #228b22;">string</span> <span style="color: #a0522d;">_lastName</span>;
...
</pre>

Como uso um JavaScript no meu blog para formatar fragmentos de código, gostaria que a saída fosse assim:

<pre name="code" class="csharp">
public class UserBuilder
{
    private string _firstName;
    private string _lastName;
...
</pre>

Isso pode ser feito e como?

    
por Pete 09.06.2012 / 14:54

1 resposta

2

A documentação onde alterar o exportador para o código-fonte pode ser encontrada na documentação de org-export-format-source-code-or-example , C-h f org-export-format-source-code-or-example :

...
Check if a function by name "org--format-source-code-or-example" is bound. If yes, use it as the custom formatter. Otherwise, use the default formatter. Default formatters are provided for docbook, html, latex and ascii backends. For example, use 'org-html-format-source-code-or-example' to provide a custom formatter for export to "html".
...

Um exemplo de função de exportação pode ser encontrado aqui ( 2635). Modificado para corresponder aos seus requierments:

(defun org-html-format-source-code-or-example
  (lines lang caption textareap cols rows num cont rpllbl fmt)
  (setq lines
    (concat
     "<pre name=\"code\" class=\"" lang "\">\n"
     (cond
      (textareap
       (concat
        (format "<p>\n<textarea cols=\"%d\" rows=\"%d\">"
            cols rows)
        lines "</textarea>\n</p>\n"))
      (t
       (with-temp-buffer
         (insert lines)
         (goto-char (point-min))
         (while (re-search-forward "[<>&]" nil t)
           (replace-match (cdr (assq (char-before)
                     '((?&."&amp;")(?<."&lt;")(?>."&gt;"))))
                  t t))
         (buffer-string))))
     "</pre>\n"))
  (unless textareap
    (setq lines (org-export-number-lines lines 1 1 num cont rpllbl fmt)))  
  lines)

Após avaliação (copie para * scratch * e execute M-x eval-buffer , ou coloque em seus .emacs e reinicie) exportações de exportação html

#+BEGIN_SRC java
public class UserBuilder
{
    private string _firstName;
    private string _lastName;
}
#+END_SRC

como

<pre name="code" class="java">
public class UserBuilder
{
    private string _firstName;
    private string _lastName;
}
</pre>

(tive que trocar de idioma no exemplo porque meu emacs não sabe c # mas funciona para todos os idiomas).

    
por 06.11.2012 / 08:29