emacs docs: rstdoc.el: consistent single quote conversions

With text-quoting-style 'grave keeps "'" and "`" quotes unaltered
for further processing done by this code (regardless of locale...).
The tools that read the reStructuredText markup generated can do
their styling instead.

Added temporary conversions of ' and ` to \001 and \002 so that
's and `s outside of `...' and `...` are converted separately
('s restored back to ' and `s converted to \`).

Both `...' and `...` are finally "converted" to `...` (not ``...``).
https://docutils.sourceforge.io/docs/user/rst/quickref.html documents
that as `interpreted text`:

 "The rendering and meaning of interpreted text is domain- or
  application-dependent. It can be used for things like index
  entries or explicit descriptive markup (like program identifiers)."

Which looks pretty much right.
This commit is contained in:
Tomi Ollila 2020-10-09 10:32:02 +03:00 committed by David Bremner
parent 45193bab16
commit bdb6956afd

View file

@ -40,6 +40,7 @@
"Write docstrings from IN-FILE to OUT-FILE." "Write docstrings from IN-FILE to OUT-FILE."
(load-file in-file) (load-file in-file)
(let* ((definitions (cdr (assoc (expand-file-name in-file) load-history))) (let* ((definitions (cdr (assoc (expand-file-name in-file) load-history)))
(text-quoting-style 'grave)
(doc-hash (make-hash-table :test 'eq))) (doc-hash (make-hash-table :test 'eq)))
(mapc (mapc
(lambda (elt) (lambda (elt)
@ -65,11 +66,14 @@
(insert "\n")) (insert "\n"))
(defvar rst--escape-alist (defvar rst--escape-alist
'(("\\\\='" . "\\\\'") '( ("\\\\='" . "\001")
("\\([^\\]\\)'" . "\\1`") ("`\\([^\n`']*\\)[`']" . "\002\\1\002") ;; good enough for now...
("^[[:space:]\t]*$" . "|br|") ("`" . "\\\\`")
("^[[:space:]\t]" . "|indent| ")) ("\001" . "'")
"List of (regex . replacement) pairs.") ("\002" . "`")
("^[[:space:]]*$" . "|br|")
("^[[:space:]]" . "|indent| "))
"list of (regex . replacement) pairs")
(defun rstdoc--rst-quote-string (str) (defun rstdoc--rst-quote-string (str)
(with-temp-buffer (with-temp-buffer