Require 'est-xml.
[chise/est.git] / cwiki-view.el
index 30d07ae..26c2eb8 100644 (file)
 ;; -*- coding: utf-8-mcs-er -*-
 (require 'cwiki-common)
+(require 'est-xml)
 
 (defvar chise-wiki-view-url "view.cgi")
-(defvar chise-wiki-edit-url "edit/edit.cgi")
-(defvar chise-wiki-add-url "edit/add.cgi")
+(defvar chise-wiki-edit-url "edit.cgi")
+(defvar chise-wiki-add-url "add.cgi")
 
-(defun www-display-char-desc (uri-char &optional lang level)
+(defun www-display-object-desc (genre uri-object &optional lang level simple)
   (unless level
     (setq level 1))
-  (let ((char (www-uri-decode-char uri-char))
-       logical-feature displayed-features)
-    (when (characterp char)
-      (when (= (length uri-char) 1)
-       (setq uri-char (www-uri-encode-char char)))
+  (let ((object (www-uri-decode-object genre uri-object))
+       logical-feature chise-wiki-displayed-features
+       parents
+       GlyphWiki-id)
+    (when object
+      (when (and (eq genre 'character)
+                (= (length uri-object) 1))
+       (setq uri-object (www-uri-encode-object object)))
       (when (= level 1)
        (princ
         (encode-coding-string
          (format "<head>
-<title>CHISE-wiki character: %s</title>
+<title>EsT %s = %s</title>
 </head>\n"
-                 (decode-uri-string uri-char 'utf-8-mcs-er))
+                 genre
+                 (decode-uri-string uri-object 'utf-8-mcs-er))
          'utf-8-mcs-er))
        (princ "<body>\n"))
-      (princ (format "<h%d>%s</h%d>\n"
+      (when (eq genre 'character)
+       (dolist (feature (char-feature-property '$object 'additional-features))
+         (mount-char-attribute-table
+          (char-feature-name-at-domain feature '$rev=latest))))
+      (princ
+       (format
+       (if simple
+           "<div style=\"text-align:right;\">
+<a href=\"edit/view.cgi?%s=%s\">
+<input type=\"submit\" value=\"Edit\" />
+</a>
+<input type=\"submit\" value=\"New Account\" />
+</div>
+<hr />\n"
+         "<div style=\"text-align:right;\">
+<a href=\"../view.cgi?%s=%s\">
+<input type=\"submit\" value=\"Simple\" />
+</a>
+</div>
+<hr />\n")
+       genre
+       uri-object))
+      (when (setq parents (www-get-feature-value object '<-denotational))
+       (princ (format "<p>%s %s</p>\n<hr>\n"
+                      (www-format-value-as-char-list parents)
+                      (www-format-feature-name '->denotational lang))))
+      (when (setq parents (www-get-feature-value object '<-subsumptive))
+       (princ (format "<p>%s %s</p>\n<hr>\n"
+                      (www-format-value-as-char-list parents)
+                      (www-format-feature-name '->subsumptive lang))))
+      (when (eq genre 'character)
+       (setq GlyphWiki-id (char-GlyphWiki-id object)))
+      (princ (format "<h%d>%s%s</h%d>\n"
                     level
-                    (www-format-encode-string (char-to-string char))
+                    (www-format-encode-string
+                     (est-format-object object)
+                      ;; (if (eq genre 'character)
+                      ;;     (char-to-string object)
+                      ;;   (format "%s" (concord-object-id object)))
+                     )
+                    (if GlyphWiki-id
+                        (format
+                         " <a href=\"http://glyphwiki.org/wiki/%s\"><img alt=\"%s\" src=\"http://glyphwiki.org/glyph/%s.50px.png\" /></a>"
+                         GlyphWiki-id
+                         GlyphWiki-id GlyphWiki-id)
+                      "")
                     level))
       (if (> level 1)
          (princ "<ul>"))
-      (dolist (feature (char-feature-property '$object 'additional-features))
-       (mount-char-attribute-table
-        (char-feature-name-at-domain feature '$rev=latest)))
-      (dolist (cell (sort (char-attribute-alist char)
+      (dolist (cell (sort (if (eq genre 'character)
+                             (char-attribute-alist object)
+                           (concord-object-spec object))
                          (lambda (a b)
-                           (char-attribute-name< (car a)(car b)))))
+                           (char-attribute-name<
+                            (char-feature-name-sans-versions (car a))
+                            (char-feature-name-sans-versions (car b))))))
        (setq logical-feature (char-feature-name-sans-versions (car cell)))
-       (unless (memq logical-feature displayed-features)
-         (push logical-feature displayed-features)
+       (unless (memq logical-feature chise-wiki-displayed-features)
+         (push logical-feature chise-wiki-displayed-features)
          (princ
           (if (= level 1)
-              "<p>\n"
+              "<div class=\"feature\" style=\"line-height:150%\">\n"
             "<li>\n"))
          (princ
           (www-format-eval-list
-           (or (char-feature-property logical-feature ; (car cell)
-                                      'format)
-               '((name) " : " (value)))
-           char
+           (www-feature-format logical-feature)
+           object
            logical-feature ; (car cell)
-           lang uri-char))
-         (princ
-          (format " <a href=\"%s?char=%s&feature=%s&format=wiki-text\"
+           lang uri-object
+           nil simple))
+         (unless simple
+           (princ
+            (format " <a href=\"%s?%s=%s&feature=%s&format=wiki-text\"
 ><input type=\"submit\" value=\"note\" /></a>"
-                  chise-wiki-edit-url
-                  (www-format-encode-string uri-char)
-                  (www-format-encode-string
-                   (www-uri-encode-feature-name
-                    (intern (format "%s*note"
-                                    logical-feature ; (car cell)
-                                    ))))))
+                    chise-wiki-edit-url
+                    genre
+                    (www-format-encode-string uri-object)
+                    (www-format-encode-string
+                     (www-uri-encode-feature-name
+                      (intern (format "%s*note"
+                                      logical-feature ; (car cell)
+                                      )))))))
          (princ
           (if (= level 1)
-              "</p>\n"
+              "</div>\n"
             "<li>\n"))
          ))
       (princ
        (if (= level 1)
           "<p>\n"
         "<li>\n"))
-      (princ
-       (format "<a href=\"%s?char=%s\"
+      (unless simple
+       (princ
+        (format "<a href=\"%s?%s=%s\"
 ><input type=\"submit\" value=\"add feature\" /></a>
 "
-              chise-wiki-add-url
-              (www-format-encode-string uri-char)))
+                chise-wiki-add-url
+                genre
+                (www-format-encode-string uri-object))))
+      (princ
+       (if (= level 1)
+          "<p>\n"
+        "<li>\n"))
+      (when (eq genre 'character)
+       (princ
+        "<form action=\"http://www.chise.org/ids-find\">\n")
+       (princ
+        (www-format-encode-string
+         (est-format-object object)
+         ;; (if (eq genre 'character)
+         ;;     (format "%c" object)
+         ;;   (format "%s" (concord-object-id object)))
+         ))
+       (princ
+        (format
+         " <input type=\"text\" name=\"components\"
+size=\"30\" maxlength=\"30\" value=\"%s\" />"
+         (encode-coding-string
+          (est-format-object object)
+          ;; (if (eq genre 'character)
+          ;;     (char-to-string object)
+          ;;   (format "%s" (concord-object-id object)))
+          'utf-8-jp-er)))
+       (princ
+        (www-format-encode-string
+         "を\u542Bむ\u6F22\u5B57を\u63A2す"))
+       (princ " <input type=\"submit\" value=\"search\" />\n")
+       (princ "</form>\n"))
       (princ
        (if (= level 1)
           "</p>\n"
         "<li>\n"))
       )))
 
-(defun www-display-feature-desc (uri-feature-name uri-char &optional lang)
+(defun www-display-feature-desc (uri-feature-name genre uri-object
+                                                 &optional lang simple)
   (let ((feature-name (www-uri-decode-feature-name uri-feature-name))
        (name@lang (intern (format "name@%s" lang))))
     (princ
      (encode-coding-string
       (format "<head>
-<title>CHISE-wiki feature: %s</title>
+<title>EsT feature: %s</title>
 </head>\n"
              feature-name)
       'utf-8-mcs-er))
     (princ "<body>\n")
     (princ
+     (format
+      (if simple
+         "<div style=\"text-align:right;\">
+<a href=\"edit/view.cgi?feature=%s&%s=%s\">
+<input type=\"submit\" value=\"Edit\" />
+</a>
+<input type=\"submit\" value=\"New Account\" />
+</div>
+<hr />\n"
+         "<div style=\"text-align:right;\">
+<a href=\"../view.cgi?feature=%s&%s=%s\">
+<input type=\"submit\" value=\"Simple\" />
+</a>
+</div>
+<hr />\n")
+      uri-feature-name genre uri-object))
+    (princ
      (format "<h1>%s</h1>\n"
             (www-format-encode-string
              (symbol-name feature-name))))
     (princ (format "<p>name : %s "
                   (or (www-format-feature-name feature-name) "")))
-    (princ
-     (format " <a href=\"%s?feature=%s&property=name&format=string&char=%s\"
-><input type=\"submit\" value=\"edit\" /></a>"
-            chise-wiki-edit-url
-            uri-feature-name
-            uri-char))
-    ;; (www-html-display-text
-    ;;  (format "[[[edit|%s?feature=%s&property=name&char=%s]]]"
-    ;;          ;; (char-feature-property feature-name 'name)
-    ;;          chise-wiki-edit-url
-    ;;          uri-feature-name ; (www-uri-encode-feature-name feature-name)
-    ;;          uri-char))
-    (princ "</p>")
+    (unless simple
+      (princ
+       (format
+       " <a href=\"%s?feature=%s&property=name&format=string&%s=%s\">"
+       chise-wiki-edit-url
+       uri-feature-name
+       genre
+       uri-object))
+      (princ "<input type=\"submit\" value=\"edit\" /></a>\n"))
+    (princ "</p>\n")
     (when lang
       (princ "<p>")
       (princ
        (format "%s : %s"
                name@lang
                (or (char-feature-property feature-name name@lang) ""))))
-      (princ
-       (format " <a href=\"%s?feature=%s&property=%s&format=string&char=%s\"
-><input type=\"submit\" value=\"edit\" /></a>"
-              chise-wiki-edit-url
-              uri-feature-name
-              name@lang
-              uri-char))
-      ;; (www-html-display-text
-      ;;  (format " [[[edit|%s?feature=%s&property=%s&char=%s]]]"
-      ;;          chise-wiki-edit-url
-      ;;          uri-feature-name
-      ;;          name@lang
-      ;;          uri-char))
-      (princ "</p>"))
+      (unless simple
+       (princ
+        (format
+         " <a href=\"%s?feature=%s&property=%s&format=string&%s=%s\">"
+         chise-wiki-edit-url
+         uri-feature-name
+         name@lang
+         genre
+         uri-object))
+       (princ "<input type=\"submit\" value=\"edit\" /></a>\n"))
+      (princ "</p>\n"))
     (www-html-display-paragraph
      (format "type : %s"
              (or (www-feature-type feature-name)
                 ;; (char-feature-property feature-name 'type)
                 'generic)))
-    (www-html-display-paragraph
-     (format "value-format : %s"
-            (www-xml-format-list
-             (or (www-feature-value-format feature-name)
-                 'default))))
-    (www-html-display-paragraph
-     (format "format : %s"
-            (www-xml-format-list
-             (or (char-feature-property feature-name 'format)
-                 '((name) " : " (value))))))
+    (princ (format "<p>value-format : %s "
+                  (www-format-value
+                   nil 'value-format 
+                   (or (www-feature-value-format feature-name)
+                       'default)
+                   'default
+                   'without-tags)))
+    (unless simple
+      (princ
+       (format
+       " <a href=\"%s?feature=%s&property=value-format&format=wiki-text&%s=%s\"
+>"
+       chise-wiki-edit-url
+       uri-feature-name
+       genre
+       uri-object))
+      (princ "<input type=\"submit\" value=\"edit\" /></a>\n"))
+    (princ "</p>\n")
+
+    (princ "<p>format : ")
+    (www-html-display-text
+     (decode-coding-string
+      (www-xml-format-list
+       (www-feature-format feature-name))
+      'utf-8-mcs-er))
+    (unless simple
+      (princ
+       (format
+       " <a href=\"%s?feature=%s&property=format&format=wiki-text&%s=%s\"
+>"
+       chise-wiki-edit-url
+       uri-feature-name
+       genre
+       uri-object))
+      (princ "<input type=\"submit\" value=\"edit\" /></a>\n"))
+    (princ "</p>\n")
+    
     (www-html-display-paragraph
      (format "description : %s"
              (or (char-feature-property feature-name 'description)
       (let* ((target (pop command-line-args-left))
             (user (pop command-line-args-left))
             (accept-language (pop command-line-args-left))
+            (mode (intern (pop command-line-args-left)))
             (lang
              (intern
               (car (split-string
 ")
        (cond
         ((stringp target)
+         (when (string-match "^char=\\(&[^&;]+;\\)" target)
+           (setq ret (match-end 0))
+           (setq target
+                 (concat "char="
+                         (www-uri-encode-object
+                          (www-uri-decode-object
+                           'character (match-string 1 target)))
+                         (substring target ret))))
          (setq target
                (mapcar (lambda (cell)
                          (if (string-match "=" cell)
                        (split-string target "&")))
          (setq ret (car target))
          (cond ((eq (car ret) 'char)
-                (www-display-char-desc
-                  (cdr ret) ; (decode-uri-string (cdr ret) 'utf-8-mcs-er)
-                 lang)
+                (www-display-object-desc
+                 'character
+                  (cdr ret)
+                 lang nil
+                 (eq mode 'simple))
                 )
                ((eq (car ret) 'feature)
                 (www-display-feature-desc
                  (decode-uri-string (cdr ret) 'utf-8-mcs-er)
-                  (cdr (assq 'char target))
-                 ;; (decode-uri-string (cdr (assq 'char target)))
-                 lang)
+                 (car ret)
+                 (cdr (assq 'char target))
+                 lang
+                 (eq mode 'simple))
+                )
+               (t
+                (www-display-object-desc
+                 (car ret)
+                  (cdr ret)
+                 lang nil
+                 (eq mode 'simple))
                 ))
          ))
        (princ "\n<hr>\n")
+       (princ (format "mode=%S\n" mode))
        (princ (format "user=%s\n" user))
-       (princ (format "local user=%s\n" (user-login-name)))
+        ;; (princ (format "local user=%s\n" (user-login-name)))
        (princ (format "lang=%S\n" lang))
-       (princ emacs-version)
-       (princ " CHISE ")
-       (princ xemacs-chise-version)
+       (princ (encode-coding-string (emacs-version) 'utf-8-jp-er))
+        ;; (princ " CHISE ")
+        ;; (princ xemacs-chise-version)
        (princ "
 </body>
 </html>")