Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
org2blog: Wordpress crayon-plugin Backend for Org Export Engine
;;; ox-wp-crayon.el - Wordpress crayon-plugin Backend for Org Export Engine
;;; overrides org-wp-src-block function of org2blog / ox-wp package, https://github.com/punchagan/org2blog
;;; Copyright (C) 2017 marco.immel@gmail.com
;;; Version: 20170110-1
;; This program is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
(require 'ox-wp)
(defvar ox-wp-caption-format-str
'"style=\"text-align:center; font-family:Verdana,'Lucida Sans Unicode',sans-serif; font-style:italic; font-size:small;\""
"Styles for caption"
)
;; Supported cranyon attributes:
;; - lang: programming language
;; - title: set a title, e.g. #+ATTR_WP: :title "best code ever"
;; - mark: highlight lines, e.g. #+ATTR_WP: :markhl 2-5
;; https://github.com/aramk/crayon-syntax-highlighter
(defun org-wp-src-block-crayon (src-block contents info)
"Transcode a SRC-BLOCK element from Org to WP Cranyon HTML.
CONTENTS holds the contents of the item. INFO is a plist holding
contextual information."
(let ((lang (org-element-property :language src-block))
(caption (let ((cp (org-export-get-caption src-block)))
(if cp (format "<figcaption %s>%s</figcaption>" (or ox-wp-caption-format-str "") cp))))
;; Crayon doesn't supported captions well, there is a <p/> tag between code and caption and
;; I have not found a way arround that. So I recommend not to use captions actually.
(langs-map (plist-get info :wp-shortcode-langs-map))
(markhl (let ((ml (org-export-read-attribute :attr_wp src-block :markhl)))
(if ml (concat " mark:" ml))))
(blktitle (let ((tl (org-export-read-attribute :attr_wp src-block :title)))
(if tl (concat " title=\"" tl "\"")))))
(format "<figure><pre class=\"lang:%s%s decode:true \" %s>%s</pre>%s</figure>"
(or (cdr (assoc lang langs-map)) (when lang (downcase lang)) "text")
(or markhl "")
(or blktitle "")
(org-export-format-code-default src-block info)
(or caption "")
)))
(advice-add 'org-wp-src-block :override #'org-wp-src-block-crayon)
(provide 'ox-wp-crayon)
@priyadarshan

This comment has been minimized.

Show comment
Hide comment
@priyadarshan

priyadarshan Aug 24, 2017

Thank you for ox-wp-crayon.
It works as expected, only one needs to make sure proper Crayon settings are enabled on WP side.

priyadarshan commented Aug 24, 2017

Thank you for ox-wp-crayon.
It works as expected, only one needs to make sure proper Crayon settings are enabled on WP side.

@priyadarshan

This comment has been minimized.

Show comment
Hide comment
@priyadarshan

priyadarshan Aug 24, 2017

It seems the examples cited in the source are not working on my side:

#+ATTR_WP: title:"best code ever"
#+ATTR_WP: markhl:2-5
#+BEGIN_SRC lisp
(defun open-in-largest-window()
  "Open current buffer in largest window"
  (interactive)
  (let ((oldbuf (current-buffer)))
  (select-window (get-largest-window))
  (switch-to-buffer oldbuf))
)
#+END_SRC

Do not have any effect on the final HTML, i.e. title and highlighted lines are not there.

It seems the examples cited in the source are not working on my side:

#+ATTR_WP: title:"best code ever"
#+ATTR_WP: markhl:2-5
#+BEGIN_SRC lisp
(defun open-in-largest-window()
  "Open current buffer in largest window"
  (interactive)
  (let ((oldbuf (current-buffer)))
  (select-window (get-largest-window))
  (switch-to-buffer oldbuf))
)
#+END_SRC

Do not have any effect on the final HTML, i.e. title and highlighted lines are not there.

@priyadarshan

This comment has been minimized.

Show comment
Hide comment
@priyadarshan

priyadarshan Aug 24, 2017

I got it. The syntax is:

#+ATTR_WP: :title Best code ever
#+ATTR_WP: :markhl 2-5

priyadarshan commented Aug 24, 2017

I got it. The syntax is:

#+ATTR_WP: :title Best code ever
#+ATTR_WP: :markhl 2-5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment