5 votes

Personnaliser la façon dont le html est généré pour les blogs de code source lors de l'utilisation de l'exportation en mode org.

J'ai utilisé org-mode pour rédiger des articles de blog sur la programmation. Pour cela, j'ai inclus des segments de code en ligne dans mon fichier .org comme ceci :

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

Lorsque j'utilise la fonction d'exportation html, elle est formatée comme suit :

<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>

Comme j'utilise un JavaScript sur mon blog pour formater les fragments de code, j'aurais juste aimé que la sortie soit comme ceci :

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

Est-ce possible, et comment ?

2voto

Trudbert Points 356

La documentation relative à la modification de l'exportateur de code source se trouve dans la documentation relative à l'application org-export-format-source-code-or-example , C-h f org-export-format-source-code-or-example :

...
Vérifier si une fonction par son nom "org--format-source-code-or-example" est liée. Si oui, utilisez-la comme formateur personnalisé. Sinon, utiliser le formateur par défaut. Par défaut sont fournis pour les backends docbook, html, latex et ascii. Par exemple, utilisez `org-html-format-source-code-or-example' pour fournir un formateur un formateur personnalisé pour l'exportation en "html".
...

Un exemple de fonction d'exportation peut être trouvé ici (l. 2635). Modifié pour répondre à vos besoins :

(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)

Après évaluation (copier sur *scratch* et exécuter M-x eval-buffer ou placer dans votre .emacs et redémarrer) html export exports

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

comme

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

(J'ai dû changer de langue dans l'exemple car mon emacs ne connaît pas le c# mais cela fonctionne pour toutes les langues).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X