From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Michael Vehrs" Newsgroups: gmane.emacs.devel Subject: Slight improvement to WoMan tbl handling Date: Wed, 17 Feb 2010 15:55:57 +0100 Message-ID: <20100217145557.312080@gmx.net> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="========GMX31208126641855767994" X-Trace: ger.gmane.org 1266434985 14238 80.91.229.12 (17 Feb 2010 19:29:45 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 17 Feb 2010 19:29:45 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Feb 17 20:29:43 2010 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Nhpaf-00085Q-IZ for ged-emacs-devel@m.gmane.org; Wed, 17 Feb 2010 20:29:42 +0100 Original-Received: from localhost ([127.0.0.1]:60651 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Nhpae-0005x2-Tc for ged-emacs-devel@m.gmane.org; Wed, 17 Feb 2010 14:29:40 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NhlJt-0004MX-8A for emacs-devel@gnu.org; Wed, 17 Feb 2010 09:56:05 -0500 Original-Received: from [140.186.70.92] (port=48649 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NhlJr-0004MP-CP for emacs-devel@gnu.org; Wed, 17 Feb 2010 09:56:03 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1NhlJq-00064E-Ai for emacs-devel@gnu.org; Wed, 17 Feb 2010 09:56:03 -0500 Original-Received: from mail.gmx.net ([213.165.64.20]:42994) by eggs.gnu.org with smtp (Exim 4.69) (envelope-from ) id 1NhlJp-00063q-Tz for emacs-devel@gnu.org; Wed, 17 Feb 2010 09:56:02 -0500 Original-Received: (qmail 16760 invoked by uid 0); 17 Feb 2010 14:55:59 -0000 Original-Received: from 194.25.222.198 by www042.gmx.net with HTTP; Wed, 17 Feb 2010 15:55:57 +0100 (CET) X-Authenticated: #3878099 X-Flags: 0001 X-Mailer: WWW-Mail 6100 (Global Message Exchange) X-Priority: 3 X-Provags-ID: V01U2FsdGVkX19LsLtIQGtLTFaT8u+Bb8VZMl3uAmGi4AoCeK9GVU ZdO+nwHxtZWwZDORRoXAPdfwmIAQtxb7vFzg== X-GMX-UID: GWoZCoYNfW47V+l2TGVoMFxudmllcsVM X-FuHaFi: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Mailman-Approved-At: Wed, 17 Feb 2010 14:29:35 -0500 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:121168 Archived-At: --========GMX31208126641855767994 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit -- GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT! Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01 --========GMX31208126641855767994 Content-Type: text/x-diff; charset="iso-8859-15"; name="woman.diff" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="woman.diff" --- 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))))) + ;;; WoMan message logging: --========GMX31208126641855767994--