emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Slight improvement to WoMan tbl handling


From: Michael Vehrs
Subject: Re: Slight improvement to WoMan tbl handling
Date: Tue, 23 Feb 2010 17:24:01 +0100
User-agent: Mozilla-Thunderbird 2.0.0.22 (X11/20090707)

Glenn Morris wrote:
Please could you provide an explanation of what this change is
supposed to do, and a suggested ChangeLog entry? (See etc/CONTRIBUTE
for more details of how to supply patches.) Thanks.

OK, next try.

This patch adds support for the "T{ T}" tbl syntax. Since this syntax is mainly used for long lines within a table, the patch also adds support for filling the last column of a table if the line length would exceed fill-column.


diff -cp woman.el.orig woman.el
*** woman.el.orig    2010-02-23 17:16:26.000000000 +0100
--- woman.el    2010-02-23 17:16:34.000000000 +0100
*************** expression in parentheses.  Leaves point
*** 3774,3780 ****
                              (setq fn 'woman2-format-paragraphs))))
                ()
              ;; Find next control line:
!              (set-marker to (woman-find-next-control-line))
              ;; Call the appropriate function:
              (funcall fn to)))
       (if (not (eobp))            ; This should not happen, but ...
--- 3774,3782 ----
                              (setq fn 'woman2-format-paragraphs))))
                ()
              ;; 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 ...
*************** expression in parentheses.  Leaves point
*** 3785,3796 ****
       (fset 'insert-and-inherit insert-and-inherit)
       (set-marker to nil))))

! (defun woman-find-next-control-line ()
   "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)
     (save-excursion
       ;; Must handle
       ;; ...\c
--- 3787,3799 ----
       (fset 'insert-and-inherit insert-and-inherit)
       (set-marker to nil))))

! (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 ((pattern (concat "\\(\\\\c\\)?\n[.']" pat))
!         to)
     (save-excursion
       ;; Must handle
       ;; ...\c
*************** expression in parentheses.  Leaves point
*** 3799,3810 ****
       ;; BEWARE THAT THIS CODE MAY BE UNRELIABLE!!!!!
       (while
       (and
!        (setq to (re-search-forward "\\(\\\\c\\)?\n[.']" nil t))
        (match-beginning 1)
        (looking-at "br"))
     (goto-char (match-beginning 0))
     (woman-delete-line 2)))
!     (if to (1- to) (point-max))))

 (defun woman2-PD (to)
   ".PD d -- Set the interparagraph distance to d.
--- 3802,3813 ----
       ;; BEWARE THAT THIS CODE MAY BE UNRELIABLE!!!!!
       (while
       (and
!        (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 (- to (+ 1 (length pat))) (point-max))))

 (defun woman2-PD (to)
   ".PD d -- Set the interparagraph distance to d.
*************** Needs doing properly!"
*** 4560,4566 ****
   ".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
--- 4563,4568 ----
*************** Format paragraphs upto TO."
*** 4572,4577 ****
--- 4574,4595 ----
     (woman-delete-line 1)
     ;; For each column, find its width and align it:
     (let ((start (point)) (col 1))
+       (WoMan-log "%s" (buffer-substring start (+ start 40)))
+       ;; 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)
*************** Format paragraphs upto TO."
*** 4587,4593 ****
         (delete-char -1)
         (insert-char ?\  (- col (current-column))))
       (forward-line))
!     (goto-char start))))
   ;; Format table with no filling or adjusting (cf. woman2-nf):
   (setq woman-nofill t)
   (woman2-format-paragraphs to))
--- 4605,4628 ----
         (delete-char -1)
         (insert-char ?\  (- col (current-column))))
       (forward-line))
!         (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))
*************** Format paragraphs upto TO."
*** 4596,4601 ****
--- 4631,4648 ----
   ;; ".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)))))
+


 ;;; WoMan message logging:






reply via email to

[Prev in Thread] Current Thread [Next in Thread]