-;;; 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