X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=cwiki-set.el;h=77cc431f8c59e2c7b5c1616c70bb6c91b160c386;hb=c89586c51f72bbb321f33fa7254cedc622daf7c5;hp=0429584ddacb101b2b4bb61a581e1ffb1ad51e31;hpb=26f5224a5e9b4b1e8cc60c3f3ffa9ef8e255611b;p=chise%2Fest.git diff --git a/cwiki-set.el b/cwiki-set.el index 0429584..77cc431 100644 --- a/cwiki-set.el +++ b/cwiki-set.el @@ -6,14 +6,95 @@ (require 'cwiki-view) +;;; @ stext parser +;;; + +(defun www-xml-parse-string (string) + (require 'xml) + (nthcdr + 2 + (car + (with-temp-buffer + (insert "") + (insert string) + (insert "") + (xml-parse-region (point-min)(point-max)))))) + +(defun www-xml-to-stext-props (props) + (let (dest) + (dolist (cell props) + (setq dest (cons (cdr cell) + (cons (intern (format ":%s" (car cell))) + dest)))) + (nreverse dest))) + +(defun www-xml-to-stext-unit (unit) + (let (name props children) + (cond + ((stringp unit) + unit) + ((consp unit) + (setq name (car unit)) + (if (stringp name) + nil + (setq props (www-xml-to-stext-props (nth 1 unit)) + children (nthcdr 2 unit)) + (if children + (setq children (www-xml-to-stext-list children))) + (when (and (eq name 'link) + (consp (car children)) + (eq (caar children) 'ref)) + (setq props (list* :ref (nthcdr 2 (car children)) + props) + children (cdr children))) + (if children + (list* name props children) + (if props + (list name props) + (list name)))) + ) + (t + (format "%S" unit))))) + +(defun www-xml-to-stext-list (trees) + (cond + ((atom trees) + (www-xml-to-stext-unit trees) + ) + ((equal trees '((""))) + nil) + (t + (mapcar #'www-xml-to-stext-unit + trees)))) + +(defun www-stext-parse-xml-string (string) + (www-xml-to-stext-list + (www-xml-parse-string string))) + + +;;; @ parser +;;; + (defun www-parse-string-default (string) (setq string (decode-uri-string string 'utf-8-mcs-er)) (condition-case nil - (let ((ret - (mapcar #'read (split-string string " ")))) - (if (cdr ret) - ret - (car ret))) + ;; (let ((ret + ;; (mapcar #'read (split-string string " ")))) + ;; (if (cdr ret) + ;; ret + ;; (car ret))) + (let ((i 0) + (len (length string)) + dest ret) + (while (< i len) + (setq ret (read-from-string string i)) + (setq dest (cons (car ret) dest) + i (cdr ret))) + (if (cdr dest) + (nreverse dest) + (if (atom (car dest)) + (car dest) + (nreverse dest)))) (error nil))) (defun www-parse-string-as-space-separated-char-list (string) @@ -44,6 +125,12 @@ (+ (lsh (+ ku 32) 8) ten 32))))) +(defun www-parse-string-as-wiki-text (string) + (www-stext-parse-xml-string + (decode-uri-string string 'utf-8-mcs-er)) + ;; (list (decode-uri-string string 'utf-8-mcs-er)) + ) + (defun www-feature-parse-string (feature-name string &optional format) (unless format (setq format (www-feature-value-format feature-name))) @@ -60,6 +147,9 @@ ((eq format 'string) (decode-uri-string string 'utf-8-mcs-er) ) + ((eq format 'wiki-text) + (www-parse-string-as-wiki-text string) + ) ((eq format 'S-exp) (if (= (length string) 0) nil @@ -69,6 +159,10 @@ (www-parse-string-default string) ))) + +;;; @ display +;;; + (defun www-set-display-char-desc (uri-char feature value format &optional lang) (when (stringp feature) (setq feature (intern feature))) @@ -76,7 +170,8 @@ (setq format (intern format))) (let ((char (www-uri-decode-char uri-char)) latest-feature - feature-name logical-feature displayed-features) + logical-feature displayed-features + ret) (when (characterp char) (princ (encode-coding-string @@ -99,42 +194,46 @@ (if (equal (www-char-feature char feature) value) (www-html-display-paragraph "Feature-value is not changed.") - (www-html-display-paragraph - (format "New feature-value = %S is different from old value %S" - value - (www-char-feature char feature))) + ;; (www-html-display-paragraph + ;; (format "New feature-value = %S is different from old value %S" + ;; value + ;; (www-char-feature char feature))) (put-char-attribute char latest-feature value) (save-char-attribute-table latest-feature) + (setq ret (char-feature-property '$object 'additional-features)) + (unless (memq feature ret) + (put-char-feature-property + '$object 'additional-features (cons feature ret))) ) (www-html-display-paragraph "New feature-value is nil, so it is ignored (may be syntax error).") ) (princ (format "

%s

\n" (www-format-encode-string (char-to-string char)))) + (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) (lambda (a b) (char-attribute-name< (car a)(car b))))) - (setq feature-name (symbol-name (car cell))) (setq logical-feature - (if (string-match "[@/]\\$rev=latest$" feature-name) - (intern (substring feature-name 0 (match-beginning 0))) - (car cell))) + (char-feature-name-sans-versions (car cell))) (unless (memq logical-feature displayed-features) (push logical-feature displayed-features) (princ "

") (princ (www-format-eval-list - (or (char-feature-property (car cell) 'format) + (or (char-feature-property logical-feature 'format) '((name) " : " (value))) - char (car cell) lang uri-char)) + char logical-feature lang uri-char)) (princ - (format " " chise-wiki-edit-url (www-format-encode-string uri-char) (www-format-encode-string (www-uri-encode-feature-name - (intern (format "%s*note" (car cell))))))) + (intern (format "%s*note" logical-feature)))))) (princ "

\n") )) (princ @@ -144,12 +243,17 @@ (www-format-encode-string uri-char))) ))) -(defun www-set-display-feature-desc (feature-name property-name value +(defun www-set-display-feature-desc (feature-name property-name value format &optional lang uri-char) (www-html-display-paragraph (format - "set: feature: %S, property-name: %S, value: %S, lang: %S, char: %S\n" - feature-name property-name value lang uri-char)) + "set: feature: %S, property-name: %S, format: %S, value: %S, lang: %S, char: %S\n" + feature-name property-name format value lang uri-char)) + (setq value (www-feature-parse-string property-name value format)) + (www-html-display-paragraph + (format + "set: feature: %S, property-name: %S, format: %S, value: %S, lang: %S, char: %S\n" + feature-name property-name format value lang uri-char)) (put-char-feature-property feature-name property-name value) (let ((name@lang (intern (format "name@%s" lang))) (uri-feature-name (www-uri-encode-feature-name feature-name))) @@ -191,6 +295,20 @@ (or (www-feature-type feature-name) ;; (char-feature-property feature-name 'type) 'generic))) + (princ (format "

value-format : %s " + (www-format-value + nil 'value-format + (or (www-feature-value-format feature-name) + 'default) + 'default + 'without-tags))) + (princ + (format + "

" + chise-wiki-edit-url + uri-feature-name + uri-char)) (www-html-display-paragraph (format "description : %s" (or (char-feature-property feature-name 'description) @@ -254,14 +372,16 @@ lang) ) ((eq (car ret) 'feature) - (setq prop (nth 2 target)) + (setq prop (nth 3 target)) (www-set-display-feature-desc (intern (decode-uri-string (cdr ret) 'utf-8-mcs-er)) + (intern (decode-uri-string + (cdr (assq 'feature-name (cdr target))) + 'utf-8-mcs-er)) + (cdr prop) ; (decode-uri-string (cdr prop) 'utf-8-mcs-er) (car prop) - (decode-uri-string (cdr prop) 'utf-8-mcs-er) lang (cdr (assq 'char target)) - ;; (decode-uri-string (cdr (assq 'char target))) ) )) (www-html-display-paragraph