From: "Michael Vehrs" <michael.burschik@gmx.de>
To: emacs-devel@gnu.org
Subject: Slight improvement to WoMan tbl handling
Date: Wed, 17 Feb 2010 15:55:57 +0100 [thread overview]
Message-ID: <20100217145557.312080@gmx.net> (raw)
[-- Attachment #1: Type: text/plain, Size: 124 bytes --]
--
GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT!
Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01
[-- Attachment #2: woman.diff --]
[-- Type: text/x-diff, Size: 4288 bytes --]
--- woman.el.orig 2010-02-15 14:37:45.000000000 +0100
+++ woman.el 2010-02-17 15:47:29.000000000 +0100
@@ -3774,7 +3774,9 @@
(setq fn 'woman2-format-paragraphs))))
()
;; Find next control line:
- (set-marker to (woman-find-next-control-line))
+ (if (equal request "TS")
+ (set-marker to (woman-find-next-control-line "TE"))
+ (set-marker to (woman-find-next-control-line)))
;; Call the appropriate function:
(funcall fn to)))
(if (not (eobp)) ; This should not happen, but ...
@@ -3785,12 +3787,13 @@
(fset 'insert-and-inherit insert-and-inherit)
(set-marker to nil))))
-(defun woman-find-next-control-line ()
+(defun woman-find-next-control-line (&optional pat)
"Find and return start of next control line."
; (let ((to (save-excursion
; (re-search-forward "^\\." nil t))))
; (if to (1- to) (point-max)))
- (let (to)
+ (let ((pattern (concat "\\(\\\\c\\)?\n[.']" (if pat pat "")))
+ to)
(save-excursion
;; Must handle
;; ...\c
@@ -3799,12 +3802,12 @@
;; BEWARE THAT THIS CODE MAY BE UNRELIABLE!!!!!
(while
(and
- (setq to (re-search-forward "\\(\\\\c\\)?\n[.']" nil t))
+ (setq to (re-search-forward pattern nil t))
(match-beginning 1)
(looking-at "br"))
(goto-char (match-beginning 0))
(woman-delete-line 2)))
- (if to (1- to) (point-max))))
+ (if to (- to (+ 1 (length pat))) (point-max))))
(defun woman2-PD (to)
".PD d -- Set the interparagraph distance to d.
@@ -4560,7 +4563,6 @@
".TS -- Start of table code for the tbl processor.
Format paragraphs upto TO."
;; This is a preliminary hack that seems to suffice for lilo.8.
- (woman-delete-line 1) ; ignore any arguments
(when woman-emulate-tbl
;; Assumes column separator is \t and intercolumn spacing is 3.
;; The first line may optionally be a list of options terminated by
@@ -4572,6 +4574,21 @@
(woman-delete-line 1)
;; For each column, find its width and align it:
(let ((start (point)) (col 1))
+ ;; change T{ T} to tabs
+ (while (search-forward "T{\n" to t)
+ (replace-match "")
+ (catch 'end
+ (while (search-forward "\n" to t)
+ (replace-match " ")
+ (if (looking-at "T}")
+ (progn
+ (delete-char 2)
+ (throw 'end t))))))
+ (goto-char start)
+ ;; strip space and headers
+ (while (re-search-forward "^\\.TH\\|\\.sp" to t)
+ (woman-delete-whole-line))
+ (goto-char start)
(while (prog1 (search-forward "\t" to t) (goto-char start))
;; Find current column width:
(while (< (point) to)
@@ -4587,7 +4604,24 @@
(delete-char -1)
(insert-char ?\ (- col (current-column))))
(forward-line))
- (goto-char start))))
+ (goto-char start))
+ ;; find maximum width
+ (let ((max-col 0))
+ (while (search-forward "\n" to t)
+ (backward-char)
+ (if (> (current-column) max-col)
+ (setq max-col (current-column)))
+ (forward-char))
+ (goto-char start)
+ ;; break lines if they are too long
+ (when (and (> max-col woman-fill-column)
+ (> woman-fill-column col))
+ (setq max-col woman-fill-column)
+ (woman-break-table col to)
+ (goto-char start))
+ (while (re-search-forward "^_$" to t)
+ (replace-match (make-string max-col ?_)))
+ (goto-char start))))
;; Format table with no filling or adjusting (cf. woman2-nf):
(setq woman-nofill t)
(woman2-format-paragraphs to))
@@ -4596,6 +4630,18 @@
;; ".TE -- End of table code for the tbl processor."
;; Turn filling and adjusting back on.
+(defun woman-break-table (start-column to)
+ (while (< (point) to)
+ (move-to-column woman-fill-column)
+ (if (eolp)
+ (forward-line)
+ (if (and (search-backward " " start t)
+ (> (current-column) start-column))
+ (progn
+ (insert-char ?\n 1)
+ (insert-char ?\ (- start-column 5)))
+ (forward-line)))))
+
\f
;;; WoMan message logging:
next reply other threads:[~2010-02-17 14:55 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-17 14:55 Michael Vehrs [this message]
2010-02-19 0:27 ` Slight improvement to WoMan tbl handling Glenn Morris
2010-02-23 16:24 ` Michael Vehrs
2010-02-19 13:20 ` Andreas Schwab
2010-02-19 13:57 ` David Kastrup
2010-02-20 8:42 ` Michael Vehrs
2010-02-20 9:57 ` David Kastrup
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100217145557.312080@gmx.net \
--to=michael.burschik@gmx.de \
--cc=emacs-devel@gnu.org \
/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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).