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