• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

A multilingual input method framework


Commit MetaInfo

Revision94d1790b23a054b803b72f9ba4b666a39049a3e4 (tree)
Time2006-12-27 12:18:09
Authoryamaken <yamaken@ff9a...>
Commiteryamaken

Log Message

* scm/util.scm

- (string-escape): New procedure

* uim/uim-util.c

- (string_escape): Removed
- (uim_init_util_subrs): Remove string-escape registration

Change Summary

Incremental Difference

--- a/scm/util.scm
+++ b/scm/util.scm
@@ -28,11 +28,10 @@
2828 ;;; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2929 ;;; SUCH DAMAGE.
3030
31+(use srfi-6)
3132 (use srfi-34)
3233
3334 ;;;;
34-;(require "slib-mulapply.scm")
35-;(require "slib-srfi-1.scm")
3635
3736 (define hyphen-sym (string->symbol "-"))
3837
@@ -40,6 +39,25 @@
4039 ;; generic utilities
4140 ;;
4241
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+
4361 ;; Current uim implementation treats char as integer
4462
4563 ;; TODO: write test
--- a/uim/uim-util.c
+++ b/uim/uim-util.c
@@ -624,82 +624,6 @@ setugidp(void)
624624 return uim_scm_f();
625625 }
626626
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-
703627 void
704628 uim_init_util_subrs(void)
705629 {
@@ -733,5 +657,4 @@ uim_init_util_subrs(void)
733657 uim_scm_init_subr_2("find-tail", find_tail);
734658 uim_scm_init_subr_1("lang-code->lang-name-raw", lang_code_to_lang_name_raw);
735659 uim_scm_init_subr_0("setugid?", setugidp);
736- uim_scm_init_subr_1("string-escape", string_escape);
737660 }