1;;; annotation.scm: annotation functions for uim 2;;; 3;;; Copyright (c) 2010-2013 uim Project https://github.com/uim/uim 4;;; 5;;; All rights reserved. 6;;; 7;;; Redistribution and use in source and binary forms, with or without 8;;; modification, are permitted provided that the following conditions 9;;; are met: 10;;; 1. Redistributions of source code must retain the above copyright 11;;; notice, this list of conditions and the following disclaimer. 12;;; 2. Redistributions in binary form must reproduce the above copyright 13;;; notice, this list of conditions and the following disclaimer in the 14;;; documentation and/or other materials provided with the distribution. 15;;; 3. Neither the name of authors nor the names of its contributors 16;;; may be used to endorse or promote products derived from this software 17;;; without specific prior written permission. 18;;; 19;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND 20;;; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21;;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22;;; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE 23;;; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25;;; OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26;;; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27;;; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28;;; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29;;; SUCH DAMAGE. 30;;;; 31;; The three procedures below are used when (enable-annotation?) is #f. 32;; When you add a new annotation agent named "foo", you need to create a file 33;; named "annotation-foo.scm", and define foo-init, foo-get-text 34;; and foo-release in annotation-foo.scm. 35;; See also: init.scm 36 37;; Initializes an annotation agent. 38(define annotation-init 39 (lambda () 40 #f)) 41 42;; Returns an annotation string from the given candidate. 43(define annotation-get-text 44 (lambda (text encoding) 45 "")) 46 47;; Releases the annotation agent. 48(define annotation-release 49 (lambda () 50 #f)) 51 52(define annotation-load 53 (lambda (name) 54 (or (and name 55 (try-require (string-append "annotation-" name ".scm")) 56 (let ((env (interaction-environment))) 57 (set! annotation-init 58 (eval (string->symbol (string-append "annotation-" name "-init")) env)) 59 (set! annotation-get-text 60 (eval (string->symbol (string-append "annotation-" name "-get-text")) env)) 61 (set! annotation-release 62 (eval (string->symbol (string-append "annotation-" name "-release")) env)) 63 #t) 64 (begin 65 (annotation-init) 66 #t)) 67 (and 68 (begin 69 (annotation-agent-reset) 70 (if (and name 71 (not (string=? name "im"))) 72 (uim-notify-info (N_ "invalid annotation agent name")))))))) 73 74(define annotation-unload 75 (lambda () 76 (annotation-release) 77 (annotation-agent-reset))) 78 79(define annotation-agent-reset 80 (lambda () 81 (set! annotation-init (lambda () #f)) 82 (set! annotation-get-text (lambda (text encoding) "")) 83 (set! annotation-release (lambda () #f)))) 84