A multilingual input method framework
Revision | 94d1790b23a054b803b72f9ba4b666a39049a3e4 (tree) |
---|---|
Time | 2006-12-27 12:18:09 |
Author | yamaken <yamaken@ff9a...> |
Commiter | yamaken |
* scm/util.scm
* uim/uim-util.c
@@ -28,11 +28,10 @@ | ||
28 | 28 | ;;; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
29 | 29 | ;;; SUCH DAMAGE. |
30 | 30 | |
31 | +(use srfi-6) | |
31 | 32 | (use srfi-34) |
32 | 33 | |
33 | 34 | ;;;; |
34 | -;(require "slib-mulapply.scm") | |
35 | -;(require "slib-srfi-1.scm") | |
36 | 35 | |
37 | 36 | (define hyphen-sym (string->symbol "-")) |
38 | 37 |
@@ -40,6 +39,25 @@ | ||
40 | 39 | ;; generic utilities |
41 | 40 | ;; |
42 | 41 | |
42 | +;; Make escaped string literal to print a form. | |
43 | +;; | |
44 | +;; (string-escape "a str\n") -> "\"a str\\n\"" | |
45 | +;; | |
46 | +;; The following two codes must display same result. See | |
47 | +;; test/test-util.scm for further specification. | |
48 | +;; | |
49 | +;; (display str) | |
50 | +;; | |
51 | +;; (use srfi-6) | |
52 | +;; (define estr (string-append "(display " (string-escape str) ")")) | |
53 | +;; (eval (read (open-input-string estr)) | |
54 | +;; (interaction-environment)) | |
55 | +(define string-escape | |
56 | + (lambda (s) | |
57 | + (let ((p (open-output-string))) | |
58 | + (write s p) | |
59 | + (get-output-string p)))) | |
60 | + | |
43 | 61 | ;; Current uim implementation treats char as integer |
44 | 62 | |
45 | 63 | ;; TODO: write test |
@@ -624,82 +624,6 @@ setugidp(void) | ||
624 | 624 | return uim_scm_f(); |
625 | 625 | } |
626 | 626 | |
627 | -/* | |
628 | - * Make escaped string literal to print a form. | |
629 | - * | |
630 | - * (string-escape "a str\n") -> "\"a str\\n\"" | |
631 | - * | |
632 | - * The following two codes must display same result. See | |
633 | - * test/test-util.scm for further specification. | |
634 | - * | |
635 | - * (display str) | |
636 | - * | |
637 | - * (use srfi-6) | |
638 | - * (define estr (string-append "(display " (string-escape str) ")")) | |
639 | - * (eval (read (open-input-string estr)) | |
640 | - * (interaction-environment)) | |
641 | - */ | |
642 | -static uim_lisp | |
643 | -string_escape(uim_lisp str) | |
644 | -{ | |
645 | - const char *c_str = uim_scm_refer_c_str(str); | |
646 | - const char *s; | |
647 | - char *ret; | |
648 | - int len = strlen("\"\""); | |
649 | - int ch; | |
650 | - int i; | |
651 | - uim_lisp scm_ret; | |
652 | - if (strlen(c_str) == 0) | |
653 | - return uim_scm_make_str("\"\""); | |
654 | - | |
655 | - /* guess len */ | |
656 | - for (s = c_str; (*s); s++) { | |
657 | - ch = (*s); | |
658 | - switch (ch) { | |
659 | - case '\"': | |
660 | - case '\\': | |
661 | - case '\n': | |
662 | - case '\r': | |
663 | - case '\t': | |
664 | - case '\f': | |
665 | - case '\v': | |
666 | - len += 2; | |
667 | - break; | |
668 | - | |
669 | - default: | |
670 | - len++; | |
671 | - break; | |
672 | - } | |
673 | - } | |
674 | - | |
675 | - ret = (char*)malloc(sizeof(char) * len + 1); | |
676 | - | |
677 | - /* fill str */ | |
678 | - for (i = 1, s = c_str; i < len - 1; i++, s++) { | |
679 | - ch = (*s); | |
680 | - switch (ch) { | |
681 | - case '\"': ret[i]='\\'; ret[++i]='\"'; break; | |
682 | - case '\\': ret[i]='\\'; ret[++i]='\\'; break; | |
683 | - case '\n': ret[i]='\\'; ret[++i]='n'; break; | |
684 | - case '\r': ret[i]='\\'; ret[++i]='r'; break; | |
685 | - case '\t': ret[i]='\\'; ret[++i]='t'; break; | |
686 | - case '\f': ret[i]='\\'; ret[++i]='f'; break; | |
687 | - case '\v': ret[i]='\\'; ret[++i]='v'; break; | |
688 | - | |
689 | - default: | |
690 | - ret[i] = ch; | |
691 | - break; | |
692 | - } | |
693 | - } | |
694 | - ret[0] = '\"'; | |
695 | - ret[len - 1] = '\"'; | |
696 | - ret[len] = '\0'; | |
697 | - | |
698 | - scm_ret = uim_scm_make_str(ret); | |
699 | - free(ret); | |
700 | - return scm_ret; | |
701 | -} | |
702 | - | |
703 | 627 | void |
704 | 628 | uim_init_util_subrs(void) |
705 | 629 | { |
@@ -733,5 +657,4 @@ uim_init_util_subrs(void) | ||
733 | 657 | uim_scm_init_subr_2("find-tail", find_tail); |
734 | 658 | uim_scm_init_subr_1("lang-code->lang-name-raw", lang_code_to_lang_name_raw); |
735 | 659 | uim_scm_init_subr_0("setugid?", setugidp); |
736 | - uim_scm_init_subr_1("string-escape", string_escape); | |
737 | 660 | } |