]> code.delx.au - gnu-emacs/blobdiff - lisp/international/kinsoku.el
* international/fontset.el (create-fontset-from-fontset-spec): Doc fix.
[gnu-emacs] / lisp / international / kinsoku.el
index 53c26f7d593127cd0e4f48d30e7f9a3251cb295b..f4975d3857b8aaeb3e4d8b494546d8cf302e3dec 100644 (file)
@@ -1,16 +1,20 @@
-;;; kinsoku.el --- `Kinsoku' processing functions.
+;;; kinsoku.el --- `Kinsoku' processing funcs -*- coding: iso-2022-7bit; -*-
 
-;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
-;; Licensed to the Free Software Foundation.
+;; Copyright (C) 1997, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+;;   Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007, 2008, 2009
+;;   National Institute of Advanced Industrial Science and Technology (AIST)
+;;   Registration Number H14PRO021
 
 ;; Keywords: mule, kinsoku
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -18,9 +22,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
@@ -47,7 +49,7 @@ The value 0 means there's no limitation.")
         ;; ASCII
         "!)-_~}]:;',.?"
         ;; Latin JISX0201
-        ;; Instead of putting Latin JISX0201 string directyly, we
+        ;; Instead of putting Latin JISX0201 string directly, we
         ;; generate the string as below to avoid character
         ;; unification problem.
         (let* ((str1 "!)-_~}]:;',.?")
@@ -72,7 +74,7 @@ The value 0 means there's no limitation.")
         ;; Chinese BIG5
         "\e$(0!"!#!$!%!&!'!(!)!*!+!,!-!.!/!0!1!2\e(B\
 \e$(0!3!4!5!6!7!8!9!:!;!<!=!?!A!C!E!G!I!K\e(B\
-\e$(0!M!O!Q\e(B  \e$(0!S!U!W!Y![!]!_!a!c!e!g!i!k!q\e(B\
+\e$(0!M!O!Q!S!U!W!Y![!]!_!a!c!e!g!i!k!q\e(B\
 \e$(0"#"$"%"&"'"(")"*"+","2"3"4"j"k"l"x%7\e(B"))
        (len (length kinsoku-bol))
        (idx 0)
@@ -107,7 +109,7 @@ The value 0 means there's no limitation.")
 \e$A!.!0#"#(!2!4!6!8!:!<!>!c!d!e#@!f!l\e(B"
         ;; Chinese GB2312
         "\e$A(E(F(G(H(I(J(K(L(M(N(O(P(Q(R(S(T(U(V(W(X(Y(h\e(B\
-\e$(0!>!@!B!D!F!H!J!L!N!P!R!T!V!X!Z!\!^!`!b\e(B"
+\\e$(0!>!@!B!D!F!H!J!L!N!P!R!T!V!X!Z!\!^!`!b\e(B"
         ;; Chinese BIG5
         "\e$(0!d!f!h!j!k!q!p"i"j"k"n"x$u$v$w$x$y$z${\e(B\
 \e$(0$|$}$~%!%"%#%$%%%&%'%(%)%*%+%:\e(B"))
@@ -121,11 +123,17 @@ The value 0 means there's no limitation.")
 
 ;; Try to resolve `kinsoku' restriction by making the current line longer.
 (defun kinsoku-longer ()
-  (let ((pos-and-column (save-excursion
-                         (forward-char 1)
-                         (while (aref (char-category-set (following-char)) ?>)
-                           (forward-char 1))
-                         (cons (point) (current-column)))))
+  (let ((pos-and-column
+        (save-excursion
+          (forward-char 1)
+          (while (and (not (eolp))
+                      (or (aref (char-category-set (following-char)) ?>)
+                          ;; protect non-kinsoku words
+                          (not (or (eq (preceding-char) ? )
+                                   (aref (char-category-set (preceding-char))
+                                         ?|)))))
+            (forward-char 1))
+          (cons (point) (current-column)))))
     (if (or (<= kinsoku-limit 0)
            (< (cdr pos-and-column) (+ (current-fill-column) kinsoku-limit)))
        (goto-char (car pos-and-column)))))
@@ -135,9 +143,14 @@ The value 0 means there's no limitation.")
 (defun kinsoku-shorter (linebeg)
   (let ((pos (save-excursion
               (forward-char -1)
-              (while (and (< linebeg (point))
-                          (or (aref (char-category-set (preceding-char)) ?<)
-                              (aref (char-category-set (following-char)) ?>)))
+              (while (and
+                      (< linebeg (point))
+                      (or (aref (char-category-set (preceding-char)) ?<)
+                          (aref (char-category-set (following-char)) ?>)
+                          ;; protect non-kinsoku words
+                          (not (or (eq (preceding-char) ? )
+                                   (aref (char-category-set (preceding-char))
+                                         ?|)))))
                 (forward-char -1))
               (point))))
     (if (< linebeg pos)
@@ -157,16 +170,18 @@ shorter.
 `Kinsoku' is a Japanese word which originally means ordering to stay
 in one place, and is used for the text processing described above in
 the context of text formatting."
-  (if (or (and
-          ;; The character after point can't be placed at beginning
-          ;; of line.  
-          (aref (char-category-set (following-char)) ?>)
-          ;; We at first try to dissolve this situation by making a
-          ;; line longer.  If it fails, then try making a line
-          ;; shorter.
-          (not (kinsoku-longer)))
-         ;; The character before point can't be placed at end of line.
-         (aref (char-category-set (preceding-char)) ?<))
-      (kinsoku-shorter linebeg)))
-
-;; kinsoku.el ends here
+  (if enable-kinsoku
+      (if (or (and
+              ;; The character after point can't be placed at beginning
+              ;; of line.
+              (aref (char-category-set (following-char)) ?>)
+              ;; We at first try to dissolve this situation by making a
+              ;; line longer.  If it fails, then try making a line
+              ;; shorter.
+              (not (kinsoku-longer)))
+             ;; The character before point can't be placed at end of line.
+             (aref (char-category-set (preceding-char)) ?<))
+         (kinsoku-shorter linebeg))))
+
+;; arch-tag: e6b036bc-9e5b-4e9f-a22c-4ed04e37777e
+;;; kinsoku.el ends here