Author: yamakenz
Date: Fri Aug 17 17:46:24 2007
New Revision: 4859

Added:
   trunk/scm/editline.scm
      - copied, changed from r4858, /trunk/scm/uim-sh.scm
Modified:
   trunk/scm/Makefile.am
   trunk/scm/uim-sh.scm

Log:
* scm/uim-sh.scm
  - (*editline-prompt-beginning*, *editline-prompt-succeeding*,
    %*editline-reading*, %EDITLINE-PARTIAL-EXPR, editline-prompt,
    %editline-partial-read, editline-read): Move to editline.scm
* scm/editline.scm
  - New file copied from uim-sh.scm, separated as non-uim-sh-dependent
    feature
  - (*editline-prompt-beginning*, *editline-prompt-succeeding*,
    %*editline-reading*, %EDITLINE-PARTIAL-EXPR, editline-prompt,
    %editline-partial-read, editline-read): Moved from uim-sh.scm
* scm/Makefile.am
  - (SCM_FILES): Add editline.scm


Modified: trunk/scm/Makefile.am
==============================================================================
--- trunk/scm/Makefile.am       (original)
+++ trunk/scm/Makefile.am       Fri Aug 17 17:46:24 2007
@@ -9,7 +9,7 @@
  default.scm \
  util.scm deprecated-util.scm ichar.scm ustr.scm i18n.scm iso-639-1.scm \
  key.scm action.scm load-action.scm \
- uim-sh.scm custom.scm custom-rt.scm \
+ uim-sh.scm editline.scm custom.scm custom-rt.scm \
  direct.scm \
  rk.scm \
  generic.scm generic-custom.scm generic-key-custom.scm \

Copied: trunk/scm/editline.scm (from r4858, /trunk/scm/uim-sh.scm)
==============================================================================
--- /trunk/scm/uim-sh.scm       (original)
+++ trunk/scm/editline.scm      Fri Aug 17 17:46:24 2007
@@ -1,191 +1,43 @@
-;;; uim-sh.scm: uim interactive shell for debugging, batch processing
-;;;             and serving as generic inferior process
+;;; editline.scm: libedit interface
 ;;;
-;;; Copyright (c) 2003-2007 uim Project http://code.google.com/p/uim/
+;;; Copyright (c) 2007 uim Project http://code.google.com/p/uim/
 ;;;
-;;; All rights reserved.
+;;;  All rights reserved.
 ;;;
-;;; Redistribution and use in source and binary forms, with or without
-;;; modification, are permitted provided that the following conditions
-;;; are met:
-;;; 1. Redistributions of source code must retain the above copyright
-;;;    notice, this list of conditions and the following disclaimer.
-;;; 2. Redistributions in binary form must reproduce the above copyright
-;;;    notice, this list of conditions and the following disclaimer in the
-;;;    documentation and/or other materials provided with the distribution.
-;;; 3. Neither the name of authors nor the names of its contributors
-;;;    may be used to endorse or promote products derived from this software
-;;;    without specific prior written permission.
+;;;  Redistribution and use in source and binary forms, with or without
+;;;  modification, are permitted provided that the following conditions
+;;;  are met:
 ;;;
-;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS 
IS'' AND
-;;; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-;;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-;;; ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS 
BE LIABLE
-;;; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-;;; OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-;;; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-;;; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-;;; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-;;; SUCH DAMAGE.
-;;;;
-
-(require-extension (srfi 1 2 6 23 34))
-
-(define %HYPHEN-SYM (string->symbol "-"))
-
-(define uim-sh-prompt "uim> ")
-(define uim-sh-opt-expression #f)
-(define uim-sh-opt-arg-expression
-  "(error \"no <expr> is passed as argument\")")
-
-(define uim-sh-option-table
-  `((("-b" "--batch")          . batch)
-    (("-B" "--strict-batch")   . strict-batch)
-    (("-r" "--require-module") . ,(lambda (args)
-                                   (and-let* ((name (safe-car args))
-                                              ((require-module name)))
-                                     (safe-cdr args))))
-    (("--editline")            . ,(lambda (args)
-                                   (require-module "editline")
-                                   args))
-    (("-e" "--expression")     . ,(lambda (args)
-                                   (set! uim-sh-opt-expression #t)
-                                   (and-let* ((expr (safe-car args)))
-                                     (set! uim-sh-opt-arg-expression expr)
-                                     (safe-cdr args))))
-    (("-V" "--version")        . version)
-    (("-h" "--help")           . help)))
-
-(define uim-sh-usage
-  (lambda ()
-    (display "Usage: uim-sh [options] [file [arg ...]]
-  -b
-  --batch                 batch mode. suppress shell prompts
-  -B
-  --strict-batch          strict batch mode, implies -b. suppress shell prompts
-                          and evaluated results
-  -r <name>
-  --require-module <name> require module
-  --editline              require editline module for Emacs-like line editing
-  -e <expr>
-  --expression <expr>     evaluate <expr> (after loading the file, and disables
-                          'main' procedure of it)
-  -V
-  --version               show software version
-  -h
-  --help                  show this help
-  file                    absolute path or relative to system scm directory
-  arg ...                 string argument(s) for 'main' procedure of the file
-")))
+;;;  1. Redistributions of source code must retain the above copyright
+;;;     notice, this list of conditions and the following disclaimer.
+;;;  2. Redistributions in binary form must reproduce the above copyright
+;;;     notice, this list of conditions and the following disclaimer in the
+;;;     documentation and/or other materials provided with the distribution.
+;;;  3. Neither the name of authors nor the names of its contributors
+;;;     may be used to endorse or promote products derived from this software
+;;;     without specific prior written permission.
+;;;
+;;;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+;;;  IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+;;;  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+;;;  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+;;;  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+;;;  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+;;;  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+;;;  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+;;;  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+;;;  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+;;;  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-(define uim-sh-display-version
-  (lambda ()
-    (display "uim-sh ")
-    (display (uim-version))
-    (newline)))
-
-(define uim-sh-define-opt-vars
-  (lambda (opt-table prefix)
-    (for-each (lambda (name)
-               (let ((sym (symbol-append prefix %HYPHEN-SYM 'opt- name)))
-                 (eval `(define ,sym #f)
-                       (interaction-environment))))
-             (filter symbol? (map cdr opt-table)))))
-
-(define uim-sh-parse-args
-  (lambda (opt-table prefix args)
-    (uim-sh-define-opt-vars opt-table prefix)
-    (let rec ((args args))
-      (or (and-let* (((pair? args))
-                    (opt (car args))
-                    (rest (cdr args))
-                    (ent (assoc opt opt-table member))
-                    (action (cdr ent)))
-           (cond
-            ((symbol? action)
-             (set-symbol-value!
-              (symbol-append prefix %HYPHEN-SYM 'opt- action) #t))
-            ((procedure? action)
-             (set! rest (action rest)))
-            (else
-             (error "invalid action on option table")))
-           (rec rest))
-         args
-         '()))))  ;; an action possibly returns #f
-
-(define uim-sh-loop
-  (lambda (my-read)
-    (if (and (not uim-sh-opt-batch)
-            (not uim-sh-opt-strict-batch)
-            (not (provided? "editline")))
-       (display uim-sh-prompt))
-    ;; Non-recoverable read error is turned into fatal errorr such as
-    ;; non-ASCII char in token on a non-Unicode port.
-    (let ((expr (guard (read-err
-                       (else (%%fatal-error read-err)))
-                 (my-read))))
-      (and (not (eof-object? expr))
-          (let ((res (eval expr (interaction-environment))))
-            (if (not uim-sh-opt-strict-batch)
-                (writeln res))
-            (uim-sh-loop my-read))))))
-
-;; Loop even if error has been occurred. This is required to run
-;; GaUnit-based unit test for uim.
-(define uim-sh
-  (lambda (args)
-    (let* ((file.args (uim-sh-parse-args uim-sh-option-table
-                                        'uim-sh
-                                        (cdr args))) ;; drop the command name
-          (script (safe-car file.args))
-          (my-read (if (provided? "editline")
-                       (begin
-                         (set! *editline-prompt-beginning* uim-sh-prompt)
-                         editline-read)
-                       read))
-          (EX_OK       0)
-          (EX_SOFTWARE 70))
-      (if script
-         (require script))
-      (cond
-       (uim-sh-opt-help
-       (uim-sh-usage)
-       EX_OK)
-
-       (uim-sh-opt-version
-       (uim-sh-display-version)
-       EX_OK)
-
-       (uim-sh-opt-expression
-       (let* ((expr (read (open-input-string uim-sh-opt-arg-expression)))
-              (result (eval expr (interaction-environment))))
-         (if (not uim-sh-opt-strict-batch)
-             (begin
-               (write result)
-               (newline)))
-         EX_OK))
-
-       ((symbol-bound? 'main)
-       (let ((status (main file.args)))
-         (if (integer? status)
-             status
-             EX_SOFTWARE)))
-
-       (else
-       (let reloop ()
-         (and (guard (err (else
-                           (%%inspect-error err)
-                           #t))
-                (uim-sh-loop my-read))
-              (reloop)))
-       EX_OK)))))
+(require-extension (srfi 6 34))
+;;(require-extension (srfi 13))  ;; string-prefix?
 
 (define *editline-prompt-beginning*  "> ")
 (define *editline-prompt-succeeding* "")
 (define %*editline-reading* #f)
 (define %EDITLINE-PARTIAL-EXPR (list 'partial-expr))
 
+
 (define editline-prompt
   (lambda ()
     (if %*editline-reading*
@@ -221,7 +73,3 @@
              (set! buf "")
              (set! %*editline-reading* #f)
              expr))))))
-
-;; Verbose level must be greater than or equal to 1 to print anything.
-(if (< (verbose) 1)
-    (verbose 1))

Modified: trunk/scm/uim-sh.scm
==============================================================================
--- trunk/scm/uim-sh.scm        (original)
+++ trunk/scm/uim-sh.scm        Fri Aug 17 17:46:24 2007
@@ -181,47 +181,6 @@
               (reloop)))
        EX_OK)))))
 
-(define *editline-prompt-beginning*  "> ")
-(define *editline-prompt-succeeding* "")
-(define %*editline-reading* #f)
-(define %EDITLINE-PARTIAL-EXPR (list 'partial-expr))
-
-(define editline-prompt
-  (lambda ()
-    (if %*editline-reading*
-       *editline-prompt-succeeding*
-       *editline-prompt-beginning*)))
-
-;; SigScheme dependent
-(define %editline-partial-read
-  (lambda args
-    (guard (err
-           ((string-prefix? "in read: EOF " (cadr err))  ;; XXX
-            %EDITLINE-PARTIAL-EXPR))
-      (apply read args))))
-
-(define editline-read
-  (let ((p (open-input-string ""))
-       (buf ""))
-    (lambda ()
-      (let ((expr (%editline-partial-read p)))
-       (if (or (eof-object? expr)
-               (eq? expr %EDITLINE-PARTIAL-EXPR))
-           (let ((line (editline-readline)))
-             (if (eof-object? line)
-                 line
-                 (begin
-                   (set! buf (if (eq? expr %EDITLINE-PARTIAL-EXPR)
-                                 (string-append buf line)
-                                 line))
-                   (set! p (open-input-string buf))
-                   (set! %*editline-reading* #t)
-                   (editline-read))))
-           (begin
-             (set! buf "")
-             (set! %*editline-reading* #f)
-             expr))))))
-
 ;; Verbose level must be greater than or equal to 1 to print anything.
 (if (< (verbose) 1)
     (verbose 1))

Reply via email to