Browse Source

ox-md: Re-order internal functions

Nicolas Goaziou 5 years ago
parent
commit
fe7201f52a
1 changed files with 131 additions and 130 deletions
  1. 131 130
      lisp/ox-md.el

+ 131 - 130
lisp/ox-md.el

@@ -147,6 +147,137 @@ Assume BACKEND is `md'."
   ;; Return updated tree.
   ;; Return updated tree.
   tree)
   tree)
 
 
+
+;;; Internal functions
+
+(defun org-md--headline-referred-p (headline info)
+  "Non-nil when HEADLINE is being referred to.
+INFO is a plist used as a communication channel.  Links and table
+of contents can refer to headlines."
+  (unless (org-element-property :footnote-section-p headline)
+    (or
+     ;; Global table of contents includes HEADLINE.
+     (and (plist-get info :with-toc)
+	  (memq headline
+		(org-export-collect-headlines info (plist-get info :with-toc))))
+     ;; A local table of contents includes HEADLINE.
+     (cl-some
+      (lambda (h)
+	(let ((section (car (org-element-contents h))))
+	  (and
+	   (eq 'section (org-element-type section))
+	   (org-element-map section 'keyword
+	     (lambda (keyword)
+	       (when (equal "TOC" (org-element-property :key keyword))
+		 (let ((case-fold-search t)
+		       (value (org-element-property :value keyword)))
+		   (and (string-match-p "\\<headlines\\>" value)
+			(let ((n (and
+				  (string-match "\\<[0-9]+\\>" value)
+				  (string-to-number (match-string 0 value))))
+			      (local? (string-match-p "\\<local\\>" value)))
+			  (memq headline
+				(org-export-collect-headlines
+				 info n (and local? keyword))))))))
+	     info t))))
+      (org-element-lineage headline))
+     ;; A link refers internally to HEADLINE.
+     (org-element-map (plist-get info :parse-tree) 'link
+       (lambda (link)
+	 (eq headline
+	     (pcase (org-element-property :type link)
+	       ((or "custom-id" "id") (org-export-resolve-id-link link info))
+	       ("fuzzy" (org-export-resolve-fuzzy-link link info))
+	       (_ nil))))
+       info t))))
+
+(defun org-md--headline-title (style level title &optional anchor tags)
+  "Generate a headline title in the preferred Markdown headline style.
+STYLE is the preferred style (`atx' or `setext').  LEVEL is the
+header level.  TITLE is the headline title.  ANCHOR is the HTML
+anchor tag for the section as a string.  TAGS are the tags set on
+the section."
+  (let ((anchor-lines (and anchor (concat anchor "\n\n"))))
+    ;; Use "Setext" style
+    (if (and (eq style 'setext) (< level 3))
+        (let* ((underline-char (if (= level 1) ?= ?-))
+               (underline (concat (make-string (length title) underline-char)
+				  "\n")))
+          (concat "\n" anchor-lines title tags "\n" underline "\n"))
+        ;; Use "Atx" style
+        (let ((level-mark (make-string level ?#)))
+          (concat "\n" anchor-lines level-mark " " title tags "\n\n")))))
+
+(defun org-md--build-toc (info &optional n _keyword scope)
+  "Return a table of contents.
+
+INFO is a plist used as a communication channel.
+
+Optional argument N, when non-nil, is an integer specifying the
+depth of the table.
+
+When optional argument SCOPE is non-nil, build a table of
+contents according to the specified element."
+  (concat
+   (unless scope
+     (let ((style (plist-get info :md-headline-style))
+	   (title (org-html--translate "Table of Contents" info)))
+       (org-md--headline-title style 1 title nil)))
+   (mapconcat
+    (lambda (headline)
+      (let* ((indentation
+	      (make-string
+	       (* 4 (1- (org-export-get-relative-level headline info)))
+	       ?\s))
+	     (bullet
+	      (if (not (org-export-numbered-headline-p headline info)) "-   "
+		(let ((prefix
+		       (format "%d." (org-last (org-export-get-headline-number
+						headline info)))))
+		  (concat prefix (make-string (max 1 (- 4 (length prefix)))
+					      ?\s)))))
+	     (title
+	      (format "[%s](#%s)"
+		      (org-export-data-with-backend
+		       (org-export-get-alt-title headline info)
+		       (org-export-toc-entry-backend 'md)
+		       info)
+		      (or (org-element-property :CUSTOM_ID headline)
+			  (org-export-get-reference headline info))))
+	     (tags (and (plist-get info :with-tags)
+			(not (eq 'not-in-toc (plist-get info :with-tags)))
+			(org-make-tag-string
+			 (org-export-get-tags headline info)))))
+	(concat indentation bullet title tags)))
+    (org-export-collect-headlines info n scope) "\n")
+   "\n"))
+
+(defun org-md--footnote-formatted (footnote info)
+  "Formats a single footnote entry FOOTNOTE.
+FOOTNOTE is a cons cell of the form (number . definition).
+INFO is a plist with contextual information."
+  (let* ((fn-num (car footnote))
+         (fn-text (cdr footnote))
+         (fn-format (plist-get info :md-footnote-format))
+         (fn-anchor (format "fn.%d" fn-num))
+         (fn-href (format " href=\"#fnr.%d\"" fn-num))
+         (fn-link-to-ref (org-html--anchor fn-anchor fn-num fn-href info)))
+    (concat (format fn-format fn-link-to-ref) " " fn-text "\n")))
+
+(defun org-md--footnote-section (info)
+  "Format the footnote section.
+INFO is a plist used as a communication channel."
+  (let* ((fn-alist (org-export-collect-footnote-definitions info))
+         (fn-alist (cl-loop for (n _type raw) in fn-alist collect
+                            (cons n (org-trim (org-export-data raw info)))))
+         (headline-style (plist-get info :md-headline-style))
+         (section-title (org-html--translate "Footnotes" info)))
+    (when fn-alist
+      (format (plist-get info :md-footnotes-section)
+              (org-md--headline-title headline-style 1 section-title)
+              (mapconcat (lambda (fn) (org-md--footnote-formatted fn info))
+                         fn-alist
+                         "\n")))))
 
 
 
 
 ;;; Transcode Functions
 ;;; Transcode Functions
@@ -242,65 +373,6 @@ a communication channel."
 	  (concat (org-md--headline-title style level heading anchor tags)
 	  (concat (org-md--headline-title style level heading anchor tags)
 		  contents)))))))
 		  contents)))))))
 
 
-
-(defun org-md--headline-referred-p (headline info)
-  "Non-nil when HEADLINE is being referred to.
-INFO is a plist used as a communication channel.  Links and table
-of contents can refer to headlines."
-  (unless (org-element-property :footnote-section-p headline)
-    (or
-     ;; Global table of contents includes HEADLINE.
-     (and (plist-get info :with-toc)
-	  (memq headline
-		(org-export-collect-headlines info (plist-get info :with-toc))))
-     ;; A local table of contents includes HEADLINE.
-     (cl-some
-      (lambda (h)
-	(let ((section (car (org-element-contents h))))
-	  (and
-	   (eq 'section (org-element-type section))
-	   (org-element-map section 'keyword
-	     (lambda (keyword)
-	       (when (equal "TOC" (org-element-property :key keyword))
-		 (let ((case-fold-search t)
-		       (value (org-element-property :value keyword)))
-		   (and (string-match-p "\\<headlines\\>" value)
-			(let ((n (and
-				  (string-match "\\<[0-9]+\\>" value)
-				  (string-to-number (match-string 0 value))))
-			      (local? (string-match-p "\\<local\\>" value)))
-			  (memq headline
-				(org-export-collect-headlines
-				 info n (and local? keyword))))))))
-	     info t))))
-      (org-element-lineage headline))
-     ;; A link refers internally to HEADLINE.
-     (org-element-map (plist-get info :parse-tree) 'link
-       (lambda (link)
-	 (eq headline
-	     (pcase (org-element-property :type link)
-	       ((or "custom-id" "id") (org-export-resolve-id-link link info))
-	       ("fuzzy" (org-export-resolve-fuzzy-link link info))
-	       (_ nil))))
-       info t))))
-
-(defun org-md--headline-title (style level title &optional anchor tags)
-  "Generate a headline title in the preferred Markdown headline style.
-STYLE is the preferred style (`atx' or `setext').  LEVEL is the
-header level.  TITLE is the headline title.  ANCHOR is the HTML
-anchor tag for the section as a string.  TAGS are the tags set on
-the section."
-  (let ((anchor-lines (and anchor (concat anchor "\n\n"))))
-    ;; Use "Setext" style
-    (if (and (eq style 'setext) (< level 3))
-        (let* ((underline-char (if (= level 1) ?= ?-))
-               (underline (concat (make-string (length title) underline-char)
-				  "\n")))
-          (concat "\n" anchor-lines title tags "\n" underline "\n"))
-        ;; Use "Atx" style
-        (let ((level-mark (make-string level ?#)))
-          (concat "\n" anchor-lines level-mark " " title tags "\n\n")))))
-
 ;;;; Horizontal Rule
 ;;;; Horizontal Rule
 
 
 (defun org-md-horizontal-rule (_horizontal-rule _contents _info)
 (defun org-md-horizontal-rule (_horizontal-rule _contents _info)
@@ -555,77 +627,6 @@ a communication channel."
 
 
 ;;;; Template
 ;;;; Template
 
 
-(defun org-md--build-toc (info &optional n _keyword scope)
-  "Return a table of contents.
-
-INFO is a plist used as a communication channel.
-
-Optional argument N, when non-nil, is an integer specifying the
-depth of the table.
-
-When optional argument SCOPE is non-nil, build a table of
-contents according to the specified element."
-  (concat
-   (unless scope
-     (let ((style (plist-get info :md-headline-style))
-	   (title (org-html--translate "Table of Contents" info)))
-       (org-md--headline-title style 1 title nil)))
-   (mapconcat
-    (lambda (headline)
-      (let* ((indentation
-	      (make-string
-	       (* 4 (1- (org-export-get-relative-level headline info)))
-	       ?\s))
-	     (bullet
-	      (if (not (org-export-numbered-headline-p headline info)) "-   "
-		(let ((prefix
-		       (format "%d." (org-last (org-export-get-headline-number
-						headline info)))))
-		  (concat prefix (make-string (max 1 (- 4 (length prefix)))
-					      ?\s)))))
-	     (title
-	      (format "[%s](#%s)"
-		      (org-export-data-with-backend
-		       (org-export-get-alt-title headline info)
-		       (org-export-toc-entry-backend 'md)
-		       info)
-		      (or (org-element-property :CUSTOM_ID headline)
-			  (org-export-get-reference headline info))))
-	     (tags (and (plist-get info :with-tags)
-			(not (eq 'not-in-toc (plist-get info :with-tags)))
-			(org-make-tag-string
-			 (org-export-get-tags headline info)))))
-	(concat indentation bullet title tags)))
-    (org-export-collect-headlines info n scope) "\n")
-   "\n"))
-
-(defun org-md--footnote-formatted (footnote info)
-  "Formats a single footnote entry FOOTNOTE.
-FOOTNOTE is a cons cell of the form (number . definition).
-INFO is a plist with contextual information."
-  (let* ((fn-num (car footnote))
-         (fn-text (cdr footnote))
-         (fn-format (plist-get info :md-footnote-format))
-         (fn-anchor (format "fn.%d" fn-num))
-         (fn-href (format " href=\"#fnr.%d\"" fn-num))
-         (fn-link-to-ref (org-html--anchor fn-anchor fn-num fn-href info)))
-    (concat (format fn-format fn-link-to-ref) " " fn-text "\n")))
-
-(defun org-md--footnote-section (info)
-  "Format the footnote section.
-INFO is a plist used as a communication channel."
-  (let* ((fn-alist (org-export-collect-footnote-definitions info))
-         (fn-alist (cl-loop for (n _type raw) in fn-alist collect
-                            (cons n (org-trim (org-export-data raw info)))))
-         (headline-style (plist-get info :md-headline-style))
-         (section-title (org-html--translate "Footnotes" info)))
-    (when fn-alist
-      (format (plist-get info :md-footnotes-section)
-              (org-md--headline-title headline-style 1 section-title)
-              (mapconcat (lambda (fn) (org-md--footnote-formatted fn info))
-                         fn-alist
-                         "\n")))))
-
 (defun org-md-inner-template (contents info)
 (defun org-md-inner-template (contents info)
   "Return body of document after converting it to Markdown syntax.
   "Return body of document after converting it to Markdown syntax.
 CONTENTS is the transcoded contents string.  INFO is a plist
 CONTENTS is the transcoded contents string.  INFO is a plist