5

Я использовал org-mode для написания постов в блоге о программировании. Для этого я включил в свой файл .org сегменты встроенного кода:

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

Когда я использую функцию экспорта HTML, она форматируется следующим образом:

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

Поскольку я использую JavaScript в своем блоге для форматирования фрагментов кода, мне бы хотелось, чтобы результат был таким:

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

Можно ли это сделать и как?

1 ответ1

2

Документацию, где изменить экспортер для исходного кода, можно найти в документации для org-export-format-source-code-or-example , C-h f org-export-format-source-code-or-example:

...
Проверьте, связана ли функция с именем «org - format-source-code-or-example». Если да, используйте его как пользовательский форматтер. В противном случае используйте форматтер по умолчанию. Форматеры по умолчанию предоставляются для docbook, html, latex и ascii backends. Например, используйте `org-html-format-source-code-or-example ', чтобы предоставить настраиваемый форматер для экспорта в" html ".
...

Пример функции экспорта можно найти здесь (l. 2635). Изменено в соответствии с вашими требованиями:

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

После оценки (скопируйте в * scratch * и запустите M-x eval-buffer или поместите в свой .emacs и перезапустите) html export export

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

как

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

(В примере пришлось переключать языки, потому что мой emacs не знает c #, но он работает для всех языков).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .