From: pierre.techoueyres@free.fr (Pierre Téchoueyres)
To: Nicolas Goaziou <mail@nicolasgoaziou.fr>
Cc: org-mode <emacs-orgmode@gnu.org>
Subject: Re: [PATCH] Add new keyword :coding for #+include directive
Date: Wed, 25 Apr 2018 00:57:09 +0200 [thread overview]
Message-ID: <874lk01ad6.fsf@killashandra.ballybran.fr> (raw)
In-Reply-To: <87zi1sl0yq.fsf@nicolasgoaziou.fr> (Nicolas Goaziou's message of "Tue, 24 Apr 2018 23:59:57 +0200")
[-- Attachment #1: Type: text/plain, Size: 1699 bytes --]
Hello,
Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:
> Hello,
>
> pierre.techoueyres@free.fr (Pierre Téchoueyres) writes:
>
>> I think I've corrected all points. You'll find new versions attached.
>
> Thank you.
>
>> Would you mind consider to include the patch for the detection of
>> encoding with the #+include keyword in 9.2 release ?
>
> This patch is still missing some small parts for proper integration,
> namely documentation, and, if possible, a couple of tests. Besides, 9.2
> branch is supposedly frozen.
I argree for the documentation and tests (but I have to admit I don't
know how to add them).
> Granted, it doesn't seem too harmful, but is there any strong reason to
> integrate it in Org 9.2 (assuming documentation is ready)?
I think I wasn't clear enough : I had hope you will only include the
part which correct the decoding of include keyword, not the whole two
patchs. I think the former is simply a bug fixes.
>
>> + (coding
>> + (intern (or (and (string-match
>> +
>> ":coding[[:space:]]+\\_<\\(\\(?:\\sw\\|\\$\\|&\\|\\*\\|\\+\\|-\\|_\\|<\\|>\\)+\\)\\_>"
>> value)
>> + (prog1 (match-string 1 value)
>> + (setq value (replace-match "" nil nil value))))
>> + (symbol-name coding-system-for-read))))
>
> I suggested a refactoring that you didn't integrate: it seems wasteful
> to call `intern' on the return value of `symbol-name'.
>
> Besides, my suggestion about the regexp was wrong. We shouldn't make the
> syntax foolproof. I think
>
> ":coding +\\(\\S-+\\)"
>
> is enough actually. Sorry about sending you in the wrong track.
>
> Regards,
Here is a new amended patch.
[-- Attachment #2: include-new-directive --]
[-- Type: text/x-patch, Size: 6395 bytes --]
From bb9d154ba06d2fd3608bf6877c0b765a932b38e7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pierre=20T=C3=A9choueyres?= <pierre.techoueyres@free.fr>
Date: Sat, 21 Apr 2018 00:31:10 +0200
Subject: [PATCH] Add new keyword :coding for #+include directive
* lisp/ox.el (org-export-expand-include-keyword): Add new keyword
`:coding' for specify the file encoding whith the `#+include:'
directive.
This allow to use somting like :
#+include: "./myfile" :coding cp850-dos
when your Org file is encoded in utf-8 for example.
---
etc/ORG-NEWS | 7 ++++
lisp/ox.el | 121 +++++++++++++++++++++++++++++++----------------------------
2 files changed, 71 insertions(+), 57 deletions(-)
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index abebe08fe..99350ee84 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -121,6 +121,13 @@ now sort according to the locale’s collation rules instead of by
code-point.
** New features
+*** New keyword for ~#+include:~ directive
+Add =:coding codign-system= keyword to allow include of files from
+different codign system than the main Org file.
+For example:
+#+begin_example
+,#+INCLUDE: "myfile.cmd" src cmd :coding cp850-dos
+#+end_example
*** Add ~:results link~ support for Babel
With this output format, create a link to the file specified in
diff --git a/lisp/ox.el b/lisp/ox.el
index 5a83ae01d..dd454ef42 100644
--- a/lisp/ox.el
+++ b/lisp/ox.el
@@ -3298,6 +3298,12 @@ storing and resolving footnotes. It is created automatically."
(org-unbracket-string "\"" "\"" matched)
dir)))
(setq value (replace-match "" nil nil value)))))
+ (coding
+ (or (and (string-match
+ ":coding +\\_<\\(\\S-+\\)\\_>" value)
+ (prog1 (intern (match-string 1 value))
+ (setq value (replace-match "" nil nil value))))
+ coding-system-for-read))
(only-contents
(and (string-match ":only-contents *\\([^: \r\t\n]\\S-*\\)?"
value)
@@ -3331,65 +3337,66 @@ storing and resolving footnotes. It is created automatically."
(match-string 1 value))))
;; Remove keyword.
(delete-region (point) (line-beginning-position 2))
- (cond
- ((not file) nil)
- ((not (file-readable-p file))
- (error "Cannot include file %s" file))
- ;; Check if files has already been parsed. Look after
- ;; inclusion lines too, as different parts of the same
- ;; file can be included too.
- ((member (list file lines) included)
- (error "Recursive file inclusion: %s" file))
- (t
+ (let ((coding-system-for-read coding))
(cond
- ((eq env 'literal)
- (insert
- (let ((ind-str (make-string ind ?\s))
- (arg-str (if (stringp args) (format " %s" args) ""))
- (contents
- (org-escape-code-in-string
- (org-export--prepare-file-contents file lines))))
- (format "%s#+BEGIN_%s%s\n%s%s#+END_%s\n"
- ind-str block arg-str contents ind-str block))))
- ((stringp block)
- (insert
- (let ((ind-str (make-string ind ?\s))
- (contents
- (org-export--prepare-file-contents file lines)))
- (format "%s#+BEGIN_%s\n%s%s#+END_%s\n"
- ind-str block contents ind-str block))))
+ ((not file) nil)
+ ((not (file-readable-p file))
+ (error "Cannot include file %s" file))
+ ;; Check if files has already been parsed. Look after
+ ;; inclusion lines too, as different parts of the same
+ ;; file can be included too.
+ ((member (list file lines) included)
+ (error "Recursive file inclusion: %s" file))
(t
- (insert
- (with-temp-buffer
- (let ((org-inhibit-startup t)
- (lines
- (if location
- (org-export--inclusion-absolute-lines
- file location only-contents lines)
- lines)))
- (org-mode)
- (insert
- (org-export--prepare-file-contents
- file lines ind minlevel
- (or (gethash file file-prefix)
- (puthash file
- (cl-incf current-prefix)
- file-prefix))
- footnotes
- includer-file)))
- (org-export-expand-include-keyword
- (cons (list file lines) included)
- (file-name-directory file)
- footnotes)
- (buffer-string)))))
- ;; Expand footnotes after all files have been
- ;; included. Footnotes are stored at end of buffer.
- (unless included
- (org-with-wide-buffer
- (goto-char (point-max))
- (maphash (lambda (k v)
- (insert (format "\n[fn:%s] %s\n" k v)))
- footnotes))))))))))))
+ (cond
+ ((eq env 'literal)
+ (insert
+ (let ((ind-str (make-string ind ?\s))
+ (arg-str (if (stringp args) (format " %s" args) ""))
+ (contents
+ (org-escape-code-in-string
+ (org-export--prepare-file-contents file lines))))
+ (format "%s#+BEGIN_%s%s\n%s%s#+END_%s\n"
+ ind-str block arg-str contents ind-str block))))
+ ((stringp block)
+ (insert
+ (let ((ind-str (make-string ind ?\s))
+ (contents
+ (org-export--prepare-file-contents file lines)))
+ (format "%s#+BEGIN_%s\n%s%s#+END_%s\n"
+ ind-str block contents ind-str block))))
+ (t
+ (insert
+ (with-temp-buffer
+ (let ((org-inhibit-startup t)
+ (lines
+ (if location
+ (org-export--inclusion-absolute-lines
+ file location only-contents lines)
+ lines)))
+ (org-mode)
+ (insert
+ (org-export--prepare-file-contents
+ file lines ind minlevel
+ (or (gethash file file-prefix)
+ (puthash file
+ (cl-incf current-prefix)
+ file-prefix))
+ footnotes
+ includer-file)))
+ (org-export-expand-include-keyword
+ (cons (list file lines) included)
+ (file-name-directory file)
+ footnotes)
+ (buffer-string)))))
+ ;; Expand footnotes after all files have been
+ ;; included. Footnotes are stored at end of buffer.
+ (unless included
+ (org-with-wide-buffer
+ (goto-char (point-max))
+ (maphash (lambda (k v)
+ (insert (format "\n[fn:%s] %s\n" k v)))
+ footnotes)))))))))))))
(defun org-export--inclusion-absolute-lines (file location only-contents lines)
"Resolve absolute lines for an included file with file-link.
--
2.14.3
[-- Attachment #3: Type: text/plain, Size: 42 bytes --]
Regards,
--
Pierre Téchoueyres
next prev parent reply other threads:[~2018-04-24 22:57 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-16 19:52 [PATCH] Add new keyword :coding for #+include directive Pierre Téchoueyres
2018-04-16 21:30 ` Pierre Téchoueyres
2018-04-17 8:36 ` Nicolas Goaziou
2018-04-18 18:40 ` Pierre Téchoueyres
2018-04-20 23:08 ` Pierre Téchoueyres
2018-04-23 10:27 ` Nicolas Goaziou
2018-04-23 19:44 ` Pierre Téchoueyres
2018-04-24 21:59 ` Nicolas Goaziou
2018-04-24 22:57 ` Pierre Téchoueyres [this message]
2018-05-04 22:41 ` Pierre Téchoueyres
2018-05-08 17:31 ` Nicolas Goaziou
2018-05-14 23:44 ` Pierre Téchoueyres
2018-05-19 13:13 ` Nicolas Goaziou
2018-05-19 16:09 ` Pierre Téchoueyres
2018-05-20 7:33 ` Nicolas Goaziou
2018-05-24 21:29 ` Pierre Téchoueyres
2018-06-02 10:13 ` Nicolas Goaziou
2018-06-08 19:21 ` Pierre Téchoueyres
2018-06-13 13:39 ` Nicolas Goaziou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=874lk01ad6.fsf@killashandra.ballybran.fr \
--to=pierre.techoueyres@free.fr \
--cc=emacs-orgmode@gnu.org \
--cc=mail@nicolasgoaziou.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.