Require 'est-xml.
[chise/est.git] / cwiki-edit.el
index dc633c9..aa0007c 100644 (file)
@@ -1,33 +1,11 @@
 ;; -*- coding: utf-8-mcs-er -*-
-(defvar chise-wiki-view-url "../view.cgi")
+(defvar chise-wiki-view-url "view.cgi")
 (defvar chise-wiki-edit-url "edit.cgi")
 
 (require 'cwiki-common)
+(require 'est-xml)
 
-(defun www-edit-display-char-feature-default (char feature-name &optional value
-                                             lang)
-  (unless value
-    (setq value (char-feature char feature-name)))
-  (www-html-display-paragraph
-   (format "[[%s|%s?feature=%s]] : %s [[[edit|edit.cgi?char=%s&feature=%s]]]"
-          (www-format-feature-name feature-name lang)
-          chise-wiki-view-url
-          (www-uri-encode-feature-name feature-name)
-          (www-format-value value feature-name nil 'without-tags)
-          (char-to-string char)
-          (www-uri-encode-feature-name feature-name)
-          )))
-
-(defun www-edit-display-char-feature-as-ucs (char feature-name &optional value)
-  (unless value
-    (setq value (char-feature char feature-name)))
-  (www-html-display-paragraph
-   (format "= [[U+%s|http://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=%s]] (%d)"
-          (www-format-value-as-HEX value)
-          (www-format-value-as-HEX value)
-          value)))
-
-(defun www-edit-display-input-box (name value &optional format)
+(defun www-edit-display-input-box (object name value &optional format)
   (when (stringp format)
     (setq format (intern format)))
   (let (prefix)
@@ -47,69 +25,86 @@ size=\"30\" maxlength=\"30\" value=\"%s\">
 "
             (www-format-encode-string
              (format "%s" name) 'without-tags)
-             (www-format-apply-value format nil value
+             (www-format-apply-value object name
+                                    format nil value
                                     nil nil
                                     'without-tags)
             ))))
 
-(defun www-edit-display-char-desc (uri-char uri-feature-name
-                                           &optional lang format)
+(defun www-edit-display-feature-input-box (char feature-name
+                                               &optional format value)
+  (unless format
+    (setq format 'default))
+  (unless value
+    (setq value (www-get-feature-value char feature-name)))
+  (princ
+   (format "<p><input type=\"text\" name=\"feature-name\"
+size=\"32\" maxlength=\"256\" value=\"%s\">"
+          feature-name))
+  (princ (encode-coding-string " \u2190 " 'utf-8-mcs-er))
+  (princ
+   (format "%s<input type=\"text\" name=\"%s\"
+size=\"64\" maxlength=\"256\" value=\"%s\">
+<input type=\"submit\" value=\"set\" /></p>
+"
+          (if (or (eq format 'HEX)(eq format 'hex))
+              "0x"
+            "")
+          format
+          (mapconcat (lambda (c)
+                       (cond
+                         ;; ((eq c ?<) "&amp;lt;")
+                         ;; ((eq c ?>) "&amp;gt;")
+                        ((eq c ?\u0022) "&quot;")
+                        (t
+                         (char-to-string c))))
+                     (www-format-value char feature-name
+                                       value format 'without-tags)
+                     "")))
+  )
+
+(defun www-edit-display-object-desc (genre uri-object uri-feature-name
+                                          &optional lang format)
   (when (stringp format)
     (setq format (intern format)))
-  (let ((char (www-uri-decode-char uri-char))
+  (let ((object (www-uri-decode-object genre uri-object))
        (feature-name (www-uri-decode-feature-name uri-feature-name))
        base-name metadata-name
-       char-spec str)
-    (when (characterp char)
+       object-spec str)
+    (when (characterp object)
       (princ
        (format "<head>
 <title>CHISE-wiki character: %s</title>
 </head>\n"
               (encode-coding-string
-               (decode-uri-string uri-char 'utf-8-mcs-er)
+               (decode-uri-string uri-object 'utf-8-mcs-er)
                'utf-8-mcs-er)))
       (princ "<body>\n")
       (princ
        (format "<h1>%s</h1>\n"
-              (www-format-encode-string (char-to-string char))))
+              (www-format-encode-string (char-to-string object))))
       (princ "<form action=\"set.cgi\" method=\"GET\">\n")
       (princ
        (encode-coding-string
        (format "<p>(char : <input type=\"text\" name=\"char\"
 size=\"30\" maxlength=\"30\" value=\"%s\">)</p>
 "
-               (decode-uri-string uri-char 'utf-8-mcs-er))
+               (decode-uri-string uri-object 'utf-8-mcs-er))
        'utf-8-mcs-er))
-      (setq char-spec (char-attribute-alist char))
+      (setq object-spec (char-attribute-alist object))
       (if (string-match "\\*" (setq str (symbol-name feature-name)))
          (setq base-name (intern (substring str 0 (match-beginning 0)))
                metadata-name (intern (substring str (match-end 0))))
        (setq base-name feature-name))
-      (unless (assq base-name char-spec)
-       (setq char-spec (cons (cons base-name nil)
-                             char-spec)))
-      (dolist (cell (sort char-spec
+      (unless (assq base-name object-spec)
+       (setq object-spec (cons (cons base-name nil)
+                             object-spec)))
+      (dolist (cell (sort object-spec
                          (lambda (a b)
                            (char-attribute-name< (car a)(car b)))))
        (cond
         ((eq (car cell) feature-name)
-          ;; (www-edit-display-input-box feature-name (cdr cell) format)
-         (princ
-          (format "<p><input type=\"text\" name=\"feature-name\"
-size=\"30\" maxlength=\"30\" value=\"%s\">"
-                  feature-name))
-         (princ (encode-coding-string " \u2190 " 'utf-8-mcs-er))
-         (princ
-          (format "%s<input type=\"text\" name=\"%s\"
-size=\"30\" maxlength=\"30\" value=\"%s\">
-<input type=\"submit\" value=\"set\" /></p>
-"
-                  (if (or (eq format 'HEX)(eq format 'hex))
-                      "0x"
-                    "")
-                  format
-                  (www-format-value (cdr cell) feature-name
-                                    format 'without-tags)))
+         (www-edit-display-feature-input-box object feature-name format)
          )
         (t
          (princ "<p>")
@@ -117,14 +112,12 @@ size=\"30\" maxlength=\"30\" value=\"%s\">
           (www-format-eval-list
            (or (char-feature-property (car cell) 'format)
                '((name) " : " (value)))
-           char (car cell) lang uri-char))
+           object (car cell) lang uri-object))
          (princ "</p>\n")
          (when (and (eq base-name (car cell)) metadata-name)
            (princ "<ul>\n")
            (princ "<li>")
-           (www-edit-display-input-box feature-name
-                                       (char-feature char feature-name)
-                                       format)
+            (www-edit-display-feature-input-box object feature-name format)
            (princ "</li>")
            (princ "</ul>"))
          ))
@@ -134,7 +127,7 @@ size=\"30\" maxlength=\"30\" value=\"%s\">
 
 (defun www-edit-display-feature-desc (uri-feature-name
                                      uri-property-name
-                                     &optional lang uri-char)
+                                     &optional lang uri-object)
   (let ((feature-name (www-uri-decode-feature-name uri-feature-name))
        (property-name (www-uri-decode-feature-name uri-property-name))
        name@lang)
@@ -158,13 +151,17 @@ size=\"30\" maxlength=\"30\" value=\"%s\"></h1>\n"
       (format "<p>(<input type=\"text\" name=\"char\"
 size=\"30\" maxlength=\"30\" value=\"%s\">に限\u5B9Aしない)
 "
-             (decode-uri-string uri-char 'utf-8-mcs-er))
+             (decode-uri-string uri-object 'utf-8-mcs-er))
       'utf-8-mcs-er))
     (princ "<p>")
     (if (eq property-name 'name)
-       (www-edit-display-input-box
-        property-name
-        (or (www-format-feature-name* feature-name) ""))
+       ;; (www-edit-display-input-box
+        ;;  feature-name
+        ;;  property-name
+        ;;  (or (www-format-feature-name* feature-name) ""))
+       (www-edit-display-feature-input-box
+        feature-name property-name
+        'string (or (www-format-feature-name* feature-name) ""))
       (www-html-display-paragraph
        (format "name : %s [[[edit|edit.cgi?feature=%s&property=name]]]"
               (or (www-format-feature-name* feature-name) "")
@@ -174,9 +171,13 @@ size=\"30\" maxlength=\"30\" value=\"%s\">に限\u5B9Aしない)
     (when lang
       (setq name@lang (intern (format "name@%s" lang)))
       (if (eq property-name name@lang)
-         (www-edit-display-input-box
-          name@lang
-          (or (char-feature-property feature-name name@lang) ""))
+          ;; (www-edit-display-input-box
+          ;;  feature-name
+          ;;  name@lang
+          ;;  (or (char-feature-property feature-name name@lang) ""))
+         (www-edit-display-feature-input-box
+          feature-name name@lang
+          'string (or (char-feature-property feature-name name@lang) ""))
        (www-html-display-paragraph
         (format "%s : %s [[[edit|edit.cgi?feature=%s&property=%s]]]"
                 name@lang
@@ -188,6 +189,29 @@ size=\"30\" maxlength=\"30\" value=\"%s\">に限\u5B9Aしない)
              (or (www-feature-type feature-name)
                 ;; (char-feature-property feature-name 'type)
                 'generic)))
+    (if (eq property-name 'value-format)
+       (www-edit-display-feature-input-box
+        feature-name property-name
+        'default ; 'wiki-text
+        (or (www-feature-value-format feature-name)
+            'default))
+      (www-html-display-paragraph
+       (format "value-format : %s [[[edit|edit.cgi?feature=%s&property=value-format]]]"
+              (www-xml-format-list
+               (or (www-feature-value-format feature-name)
+                   'default))
+              uri-feature-name)))
+    (if (eq property-name 'format)
+       (www-edit-display-feature-input-box
+        feature-name property-name
+        'wiki-text
+        (or (char-feature-property feature-name 'format)
+            '((name) " : " (value))))
+      (www-html-display-paragraph
+       (format "format : %s [[[edit|edit.cgi?feature=%s&property=format]]]"
+              (www-xml-format-list
+               (char-feature-property feature-name 'format))
+              uri-feature-name)))
     (www-html-display-paragraph
      (format "description : %s"
              (or (char-feature-property feature-name 'description)
@@ -235,7 +259,8 @@ size=\"30\" maxlength=\"30\" value=\"%s\">に限\u5B9Aしない)
                      (split-string target "&")))
        (setq ret (car target))
        (cond ((eq (car ret) 'char)
-              (www-edit-display-char-desc
+              (www-edit-display-object-desc
+               'character
                 (cdr ret) ; (decode-uri-string (cdr ret) 'utf-8-mcs-er)
                (decode-uri-string (cdr (assq 'feature target))
                                   'utf-8-mcs-er)
@@ -253,6 +278,16 @@ size=\"30\" maxlength=\"30\" value=\"%s\">に限\u5B9Aしない)
                 ;; (decode-uri-string (cdr (assq 'char target))
                 ;;                    'utf-8-mcs-er)
                )
+              )
+             (t
+              (www-edit-display-object-desc
+                (car ret)
+               (cdr ret)
+               (decode-uri-string (cdr (assq 'feature target))
+                                  'utf-8-mcs-er)
+               lang
+               (decode-uri-string (cdr (assq 'format target))
+                                  'utf-8-mcs-er))
               ))
        (www-html-display-paragraph
         (format "%S" target))
@@ -262,7 +297,7 @@ size=\"30\" maxlength=\"30\" value=\"%s\">に限\u5B9Aしない)
        (princ (format "lang=%S\n" lang))
        (princ emacs-version)
        (princ " CHISE ")
-       (princ xemacs-chise-version)
+       (princ (encode-coding-string xemacs-chise-version 'utf-8-jp-er))
        (princ "
 </body>
 </html>")