Fix typo.
[elisp/apel.git] / pccl.el
diff --git a/pccl.el b/pccl.el
index 0107a84..c696f75 100644 (file)
--- a/pccl.el
+++ b/pccl.el
@@ -1,4 +1,4 @@
-;;; pccl.el --- Portable CCL utility for Mule 1.* and Mule 2.*
+;;; pccl.el --- Portable CCL utility for Mule 2.*
 
 ;; Copyright (C) 1998 Free Software Foundation, Inc.
 
 
 ;;; Code:
 
-(require 'ccl)
 (require 'broken)
 
-(if (featurep 'mule)
-    (if (featurep 'xemacs)
-        (if (>= emacs-major-version 21)
-            ;; for XEmacs-21-mule
-            (require 'pccl-20))
-      (if (>= emacs-major-version 20)
-          ;; for Emacs 20
-          (require 'pccl-20)
-        ;; for MULE 1.* and 2.*
-        (require 'pccl-om))))
-
 (broken-facility ccl-usable
-  "Emacs has CCL."
+  "Emacs has not CCL."
   (and (featurep 'mule)
        (if (featurep 'xemacs)
            (>= emacs-major-version 21)
-         t)))
-
-(defmacro define-long-ccl-program (name ccl-program &optional doc)
-  "Define CCL program as define-ccl-program."
-  (setq ccl-program (eval ccl-program))
-  (let ((try-ccl-compile t))
-    (while try-ccl-compile
-      (setq try-ccl-compile nil)
-      (condition-case sig
-         (ccl-compile ccl-program)
-       (args-out-of-range
-        (if (and (eq (car (cdr sig)) ccl-program-vector)
-                 (= (car (cdr (cdr sig))) (length ccl-program-vector)))
-            (setq ccl-program-vector
-                  (make-vector (* 2 (length ccl-program-vector)) 0)
-                  try-ccl-compile t)
-          (signal (car sig) (cdr sig))))))
-    (` (define-ccl-program (, name) '(, ccl-program) (, doc)))))
+         (>= emacs-major-version 19))))
+
+(unless-broken ccl-usable
+  (require 'ccl)
+  (require 'advice)
+
+  (if (featurep 'mule)
+      (if (featurep 'xemacs)
+          (if (>= emacs-major-version 21)
+              ;; for XEmacs 21 with mule
+              (require 'pccl-20))
+        (if (>= emacs-major-version 20)
+            ;; for Emacs 20
+            (require 'pccl-20)
+          ;; for Mule 2.*
+          (require 'pccl-om))))
+
+  (defadvice define-ccl-program
+    (before accept-long-ccl-program activate)
+    "When CCL-PROGRAM is too long, internal buffer is extended automaticaly."
+    (let ((try-ccl-compile t)
+          (prog (eval (ad-get-arg 1))))
+      (ad-set-arg 1 (` '(, prog)))
+      (while try-ccl-compile
+        (setq try-ccl-compile nil)
+        (condition-case sig
+            (ccl-compile prog)
+          (args-out-of-range
+           (if (and (eq (car (cdr sig)) ccl-program-vector)
+                    (= (car (cdr (cdr sig))) (length ccl-program-vector)))
+               (setq ccl-program-vector
+                     (make-vector (* 2 (length ccl-program-vector)) 0)
+                     try-ccl-compile t)
+             (signal (car sig) (cdr sig))))))))
+  )
 
 
 ;;; @ end
 ;;;
 
-(provide 'pccl)
+(require 'product)
+(product-provide (provide 'pccl) (require 'apel-ver))
 
 ;;; pccl.el ends here