View of /lisp/tools/skeledit.l
Parent Directory
| Revision Log
Revision:
1.3 -
(
download)
(
annotate)
Fri Jun 27 00:48:52 2003 UTC (21 years, 1 month ago) by
ktanaka
Branch:
MAIN
CVS Tags:
HEAD
Changes since
1.2: +1 -1 lines
FILE REMOVED
*** empty log message ***
;; ----------------------------------------- ;;
;; skeledit.l kanji-skeleton-editor ver 0.2 ;;
;; ;;
;; You need load `ulx' (UtiLisp X interface) ;;
;; ;;
;; You need (reload-skeleton) ;;
;; ----------------------------------------- ;;
(comment
$Revision: 1.3 $
)
;; ----------------- ;;
;; for compiler bug? ;;
;; ----------------- ;;
(defun ulx-magic ()
)
;; --------------------- ;;
;; get window properties ;;
;; --------------------- ;;
(defun width-win (win)
(get-winprop win 'width))
(defun height-win (win)
(get-winprop win 'height))
(defun move-win (win x y)
(setf (drawable-x win) x)
(setf (drawable-y win) y))
;; --------------- ;;
;; make menu macro ;;
;; --------------- ;;
(defun create-menu (parent x y black white fnt cursor
item-list (colnum 1))
(lets ((mw (create-win parent x y 10 10 black white fnt))
(wins (mapcar item-list
#'(lambda (x)
(create-menu-item-win mw (second x)
0 0
black white
fnt cursor))))
(item-num (length item-list))
(item-height (apply #'max
(mapcar wins #'drawable-height)))
(item-width (apply #'max
(mapcar wins #'drawable-width)))
(linnum (// (1- (+ item-num colnum)) colnum))
(mw-height (+ (* linnum item-height) *menu-margin*))
(mw-width (+ (* colnum (+ *menu-margin* item-width))
(* 2 *menu-margin*))))
(do ((item-wins wins)
(y 0 (+ y item-height)))
((endp item-wins))
(do ((x *menu-margin* (+ x (+ item-width *menu-margin*)))
(c 0 (1+ c)))
((or (>= c colnum) (endp item-wins)))
(move-win (car item-wins) x y)
(setq item-wins (cdr item-wins))))
(do ((items item-list (cdr items))
(windefs wins (cdr windefs)))
((or (endp items) (endp windefs)))
(comment (princ (caar items)) (princ " "))
(set (caar items) (car windefs)))
(mapcar wins #'(lambda (x) (resize-win x item-width item-height)))
(resize-win mw mw-width mw-height)
mw))
;; ------------------------------------ ;;
;; window-handler of addition primitive ;;
;; ------------------------------------ ;;
(defmacro connect-element-win (window editor prim eleme)
`(put-winprop ,window 'button-press-handler
(function
(lambda (win code x y)
(select-window win code x y)
(put-winprop
,editor
'button-press-handler
(function
(lambda (win code x y)
(setq ,prim
(add-skeleton-element win
code x y
,prim ',eleme)))))))))
;; ----------- ;;
;; initializer ;;
;; ----------- ;;
(defun initialize-skeleton-edit-sub ()
(comment
(unless (boundp '*near-cos-see-angle*)
(setq *near-cos-see-angle* (cos (//$ (*$ 160.0 (arccos 0.0)) 90.0)))))
(unless (boundp '*near-range*)
(setq *near-range* 400))
(unless (boundp '*menu-margin*)
(setq *menu-margin* 2))
(unless (boundp '*end-mode*)
(setq *end-mode* 3))
(unless (boundp '*select-nearest*)
(setq *select-nearest* 2))
(when (or (eq *end-mode* *select-nearest*)
(<= *end-mode* 0)
(<= *select-nearest* 0)
(> *end-mode* 3)
(> *select-nearest* 3))
(princ "*end-mode* or *select-nearest* out of range... set default")
(terpri)
(setq *select-nearest* 2)
(setq *end-mode* 3))
(unless (boundp '*link-near-range*)
(setq *link-near-range* 16))
(unless (boundp '*default-hirawidth*)
(setq *default-hirawidth* 8))
(unless (boundp '*default-slider-length*)
(setq *default-slider-length* 200))
(if (or (not (boundp '*range-too-large*))
(> *near-range* *range-too-large*))
(setq *range-too-large* (* 10 *near-range*)))
(unless (boundp '*end-by-release*)
(setq *end-by-release* t))
(if (boundp 'editor)
(put-winprop editor 'button-press-handler nil))
;; init-status is move-point-selected
(if (and (boundp '*selected-window*) *selected-window*)
(normal-win *selected-window*))
(setq *selected-window* nil)
)
;; ---------------- ;;
;; window selection ;;
;; ---------------- ;;
(defun select-window (win code x y)
(resize-win skeleditor
*width-of-skeleton-editor*
*height-of-skeleton-editor*)
(cond ((neq win *selected-window*)
(if *selected-window* (normal-win *selected-window*))
(setq *selected-window* win)
(highlight-win *selected-window*)))
(display-force-output (window-display win))
(setf (window-event-mask editor) '(:exposure
:pointer-motion
:button-release
:button-press))
(put-winprop editor 'button-press-handler nil)
(put-winprop editor 'button-release-handler nil)
(put-winprop editor 'motion-notify-handler nil)
(redraw-win editor))
;; -------------- ;;
;; motion-handler ;;
;; -------------- ;;
(defun print-pointer-position (win x y)
(print (list win x y)))
;; -------------- ;;
;; window example ;;
;; -------------- ;;
(defun initialize-skeleton-editor ()
(initialize-skeleton-editor))
(defun initialize-skeleton-editor ()
(ulx-magic)
(setup-display)
(print 'setup-display)
(initialize-skeleton-edit-sub)
(print 'initialize)
(make-skeledit-windows))
(defun initialize-kanji-edittee (name)
(setq edittee-name name)
(setq niti (shapeup-skeleton (applykanji name) t))
(setq joint-prim-def nil)
(setq joint-prim-symbol nil)
(initialize-editor-screen)
(activate-menu edit-kana-kanji-primitive-menu)
(handle-button-press move-point 1 0 0))
(defun force-kana-kanji-edittee ()
(setq edittee-name joint-prim-symbol)
(setq niti (shapeup-skeleton (applykanji joint-prim-def) t))
(setq joint-prim-def nil)
(setq joint-prim-symbol nil)
(initialize-editor-screen)
(activate-menu edit-kana-kanji-primitive-menu)
(handle-button-press move-point 1 0 0))
(defun initialize-kana-edittee (name)
(initialize-kanji-edittee name))
(defun initialize-jointed-edittee (name)
(setq edittee-name name)
(setq joint-prim-symbol name)
(setq joint-prim-def (recursive-copy (expandkanji joint-prim-symbol)))
(setq niti joint-prim-def)
(initialize-editor-screen)
(activate-menu edit-jointed-primitive-menu)
(handle-button-press move-joint-prim 1 0 0))
(defun initialize-anonymous-edittee ((init nil))
(print 'anonymous)
(setq edittee-name 'anonymous)
(setq niti (if init
(shapeup-skeleton (applykanji init) t)
'(nil nil)))
(setq joint-prim-def nil)
(setq joint-prim-symbol nil)
(initialize-editor-screen)
(activate-menu edit-kana-kanji-primitive-menu)
(handle-button-press add-ten 1 0 0))
(defun initialize-editor-screen ()
(setf (window-cursor editor) please-wait-cursor)
(put-winprop editor 'motion-notify-handler #'(lambda (win x y)))
(setf (window-cursor editor) hair-cross-cursor)
(clear-win editor)
(if grid (grid-win editor))
(if niti
(draw-skeleton-win editor niti))
(redraw-win editor)
(display-force-output display))
(defun save-edittee-to-file (output-file-name message)
(when (not (null niti))
(call (string-append "touch " output-file-name ">& /dev/null"))
(call (string-append "chmod og+w " output-file-name ">& /dev/null"))
(let* ((standard-output
(appendopen (stream output-file-name))))
(prind (list 'comment edittee-name
(getenv "USER") (date-time)
(cond ((pure-primitive-name? edittee-name)
'pure-primitive)
((eq (car niti) 'joint)
'jointed-primitives)
(t 'composite-primitive))))
(if (not (symbolp edittee-name))
(setq edittee-name 'anonymous))
(if (neq (car niti) 'joint)
(prind (list (if (pure-primitive-name? edittee-name)
'setq
'comment)
edittee-name (list 'quote niti)))
(print-in-detail (list (if (pure-primitive-name? edittee-name)
'setq
'comment)
edittee-name (list 'quote niti)))
(terpri))
(terpri)
(close standard-output))
(print-message-win
message
(zenkaku-string
(string-append "「" (string edittee-name)
"」を" output-file-name "に出力しました")))
(redraw-win message)
(display-force-output display)))
(setq niti nil)
(defun auto-select-and-initialize (nit)
(cond ((kanji-primitive-name-? nit)
(initialize-kanji-edittee nit))
((kana-primitive-name-? nit)
(initialize-kana-edittee nit))
((jointed-primitive-name-? nit)
(initialize-jointed-edittee nit))
((list-primitive-? nit)
(initialize-anonymous-edittee nit))
(t
(initialize-anonymous-edittee))))
(defun skeleton-edit ((nit 'unknown-primitive) (opname "/tmp/prim.out"))
(skeleton-edit nit opname))
(defun skeleton-edit ((nit 'unknown-primitive) (opname "/tmp/prim.out"))
(setq output-file-name opname)
(when (and (= (call (string-append "test -f " output-file-name)) 0)
(= (call (string-append "test ! -w " output-file-name)) 0))
(beep editor)
(princ (string-append "file " output-file-name " is not writable"))
(terpri)
(funcall err:open-close))
(initialize-skeleton-edit-sub)
(clear-win message)
(auto-select-and-initialize nit)
(initialize-editor-screen)
(print 'initialize)
(main-loop display
#'(lambda () (eq *selected-window* syuuryou))
editor)
(setq niti (shapeup-skeleton niti))
(display-force-output display)
niti)
(defun connect-window-handlers ()
(put-winprop move-point 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)
(put-winprop
editor
'button-press-handler
(function
(lambda (win code x y)
(setq niti
(move-skeleton-point win code x y niti)))))))
(put-winprop toggle-link 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)
(put-winprop
editor
'button-press-handler
(function
(lambda (win code x y)
(setq niti
(toggle-skeleton-link win
code x y niti)))))))
(put-winprop delete-element 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)
(put-winprop
editor
'motion-notify-handler
#'(lambda (win x y)
(nearest-line-dotted win x y niti)))
(put-winprop
editor
'button-press-handler
(function
(lambda (win code x y)
(setq niti
(delete-skeleton-element win
code x y niti)))))
(setf (window-event-mask editor) '(:exposure
:button-press
:pointer-motion))))
(put-winprop nikuduke-min 'button-press-handler
#'(lambda (win code x y)
(when niti
(select-window win code x y)
(setf (window-cursor editor) please-wait-cursor)
(setf (window-cursor win) please-wait-cursor)
(display-force-output (window-display editor))
(setq niti (shapeup-skeleton niti))
(draw-nikuduked-skeleton editor niti 'mincho)
(setf (window-cursor editor) hair-cross-cursor)
(setf (window-cursor win) roupe-cursor)
(display-force-output (window-display editor)))))
; added by tanaka 1993/9/18
(put-winprop show-min 'button-press-handler
#'(lambda (win code x y)
(when niti
(select-window win code x y)
(setf (window-cursor editor) please-wait-cursor)
(setf (window-cursor win) please-wait-cursor)
(display-force-output (window-display editor))
(setq niti (shapeup-skeleton niti))
(show-nikuduked-skeleton editor niti 'mincho)
(setf (window-cursor editor) hair-cross-cursor)
(setf (window-cursor win) roupe-cursor)
(display-force-output (window-display editor)))))
(put-winprop toggle-grid 'button-press-handler
#'(lambda (win code x y)
; (select-window win code x y)
(cond (grid (setq grid nil))(t (setq grid t)))
(clear-win editor)
(if grid (grid-win editor))
(if niti
(draw-skeleton-win editor niti))
(redraw-win editor)
(display-force-output (window-display editor))
))
(put-winprop nikuduke-got 'button-press-handler
#'(lambda (win code x y)
(when niti
(select-window win code x y)
(setf (window-cursor editor) please-wait-cursor)
(setf (window-cursor win) please-wait-cursor)
(display-force-output (window-display editor))
(setq niti (shapeup-skeleton niti))
(draw-nikuduked-skeleton editor niti 'gothic)
(setf (window-cursor editor) hair-cross-cursor)
(setf (window-cursor win) roupe-cursor)
(display-force-output (window-display editor)))))
(put-winprop hira-width 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)
(put-winprop
editor
'button-press-handler
#'(lambda (win code x y)
(setq niti
(change-hira-width win code x y niti))))))
(put-winprop hira-lengthen 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)
(put-winprop
editor
'motion-notify-handler
#'(lambda (win x y)
(nearest-line-dotted win x y niti)))
(put-winprop
editor
'button-press-handler
#'(lambda (win code x y)
(setq niti
(make-hira-element-long win code x y niti))))
(setf (window-event-mask editor) '(:exposure
:button-release
:button-press
:pointer-motion))))
(put-winprop part-move 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)
(put-winprop
editor
'button-press-handler
#'(lambda (win code x y)
(setq niti
(move-some-points win code x y niti
*end-by-release*))))))
(put-winprop part-resize 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)
(put-winprop
editor
'button-press-handler
#'(lambda (win code x y)
(setq niti
(resize-some-points win code x y niti
*end-by-release*))))))
(put-winprop syuuryou 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)
(save-edittee-to-file output-file-name message)
(when current-selected-menu
(unmap-menu current-selected-menu))
(setq current-selected-menu nil)
))
(put-winprop hira-long-pnt-add 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)
(setup-add-hira-point)
(put-winprop editor 'button-press-handler
#'(lambda (win code x y)
(setq niti
(add-hira-point win x y niti))))))
(put-winprop
move-joint-prim 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)
(put-winprop editor 'button-press-handler
#'(lambda (win code x y)
(setq joint-prim-def
(move-primitive-of-jointed-primitive
win code x y))
(setq niti joint-prim-def)))))
(put-winprop
resize-joint-prim 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)
(put-winprop editor 'button-press-handler
#'(lambda (win code x y)
(setq joint-prim-def
(resize-primitive-of-jointed-primitive
win code x y))
(setq niti joint-prim-def)))))
(put-winprop hira-shorten 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)
(setup-del-hira-point)
(put-winprop editor 'button-press-handler
#'(lambda (win code x y)
(setq niti
(del-hira-point editor x y niti))))))
(put-winprop ed-xyunit 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)
(resize-win skeleditor
(+ (width-win skeleditor)
(width-win temporary-window)
*menu-margin*)
(max (height-win skeleditor)
(height-win temporary-window)))
(when (or (null (get-prim-info niti 'xunit))
(null (get-prim-info niti 'yunit)))
(setq niti (add-unit niti))
(clear-win editor)
(if grid (grid-win editor))
(draw-skeleton-win editor niti)
(redisplay-win editor))
(put-winprop
editor 'button-press-handler
#'(lambda (win code x y)
(setq niti
(edit-xyunit-of-primitive win x y niti))))))
(put-winprop recomp-xyunit 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)
(if (ask-y-n skeleditor "ユニットを既定値にします")
(setq niti (add-default-xyunit niti)))
(clear-win editor)
(if grid (grid-win editor))
(draw-skeleton-win editor niti)
(redisplay-win editor)))
(put-winprop etc-1 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)))
(put-winprop etc-2 'button-press-handler
#'(lambda (win code x y)
(select-window win code x y)))
(connect-element-win add-ten editor niti ten)
(connect-element-win add-tate editor niti tate)
(connect-element-win add-yoko editor niti yoko)
(connect-element-win add-migiue editor niti migiue)
(connect-element-win add-hidari editor niti hidari)
(connect-element-win add-tatehidari editor niti tatehidari)
(connect-element-win add-migi editor niti migi)
(connect-element-win add-kozato editor niti kozato)
(connect-element-win add-tatehane editor niti tatehane)
(connect-element-win add-tsukurihane editor niti tsukurihane)
(connect-element-win add-sanzui editor niti sanzui)
(connect-element-win add-kokoro editor niti kokoro)
(connect-element-win add-tasuki editor niti tasuki)
(connect-element-win add-magaritate editor niti magaritate)
(connect-element-win add-kagi editor niti kagi)
(connect-element-win add-shinnyuu editor niti shin-nyuu)
(connect-element-win add-hira-long editor niti hira-long)
(connect-element-win add-hira-short editor niti hira-short)
(connect-element-win add-hira-maru editor niti hira-circle)
(connect-element-win add-outline editor niti outline)
(put-winprop editor 'button-press-handler nil)
(put-winprop force-primitive 'button-press-handler
#'(lambda (win code x y)
(cond ((null joint-prim-def)
(beep editor))
(t
(and (ask-y-n skeleditor
"プリミティブに変換します")
(force-kana-kanji-edittee))))))
(put-winprop change-name 'button-press-handler
#'(lambda (win code x y)
(let ((sym (intern (read-string-from-kinput skeleditor))))
(save-edittee-to-file output-file-name message)
(auto-select-and-initialize sym))))
nil)
(defun activate-menu (menu (at-first t))
(when (and current-selected-menu at-first)
(unmap-menu current-selected-menu))
(when menu
(map-subwindows menu)
(map-window menu)
(mapcar (get-winprop menu 'next-menu)
#'(lambda (m) (activate-menu m nil))))
(if at-first (setq current-selected-menu menu)))
(defun kanji-primitive-name-? (sym)
(and (symbolp sym)
(boundp sym)
(eq sym (expandkanji sym))
(let ((sym-string (string sym)))
(not (and (= (string-length sym-string) 2)
(or (= (sref sym-string 0) 164)
(= (sref sym-string 0) 165)))))))
(defun kana-primitive-name-? (sym)
(and (symbolp sym)
(boundp sym)
(eq sym (expandkanji sym))
(print sym)
(let ((sym-string (string sym)))
(and (= (string-length sym-string) 2)
(or (= (sref sym-string 0) 164)
(= (sref sym-string 0) 165))))))
(defun list-primitive-? (nit)
(and (not (symbolp nit))
(setq nit (applykanji nit))
(listp nit)
(listp (car nit))
(listp (caar nit))
(numberp (caaar nit))))
(defun jointed-primitive-name-? (sym)
(let ((ex nil))
(or (and (listp sym)
(symbolp (car sym)))
(and (symbolp sym)
(boundp sym)
(neq sym (setq ex (expandkanji sym)))
(listp ex)
(eq (car ex) 'joint)))))
(defun make-skeledit-windows ()
(let ((menu-width 0)
(menu-height 0)
(edit-menus nil)
(y 0))
(setq skeleditor (create-win root 0 0 10 10 black white kanji-font))
(setf (window-event-mask skeleditor) '(:exposure :property-change))
(setf (wm-name skeleditor) "skeleton editor")
(print 'skeleditor)
(setq edit-common-menu
(create-menu skeleditor 0 0 black white kanji-font roupe-cursor
'((change-name "次の編集")
(nikuduke-min "肉付(明朝)")
(show-min "輪郭(明朝)")
(nikuduke-got "肉付(ゴシック)")
(etc-1 "テスト用1")
(etc-2 "テスト用2")
(syuuryou "終わり"))))
(incr y (+ (height-win edit-common-menu) *menu-margin*))
(setq edit-kana-kanji-primitive-menu
(create-menu skeleditor 0 y black white kanji-font roupe-cursor
'((move-point "点の移動")
(toggle-link "点の接続/非接続")
(delete-element "線の削除")
(toggle-grid "グリッド")
(part-move "一部を平行移動")
(part-resize "一部を拡大縮小")
(ed-xyunit "ユニットの編集")
(recomp-xyunit "ユニット再計算"))))
(let ((yy (+ y (height-win edit-kana-kanji-primitive-menu) *menu-margin*)))
(setq edit-kana-kanji-primitive-menu-sub-1
(create-menu skeleditor 0 yy black white kanji-font roupe-cursor
'((add-ten "点")
(add-tate "縦棒")
(add-yoko "横棒")
(add-migiue "右上撥")
(add-hidari "左払")
(add-tatehidari "縦左払")
(add-migi "右払")
(add-kozato "阜一部")
(add-tatehane "縦撥")
(add-tsukurihane "旁撥")
(add-sanzui "三水下")
(add-kokoro "心一部"))))
(setq edit-kana-kanji-primitive-menu-sub-2
(create-menu skeleditor
(+ (width-win edit-kana-kanji-primitive-menu-sub-1)
*menu-margin*)
yy black white kanji-font roupe-cursor
'((add-tasuki "たすき")
(add-magaritate "曲り縦棒")
(add-kagi "かぎ")
(add-shinnyuu "之繞")
(add-hira-long "長い仮名")
(add-hira-short "短い仮名")
(add-hira-maru "仮名の丸")
(add-outline "輪郭線")
(hira-width "仮名の太")
(hira-lengthen "仮名長く")
(hira-long-pnt-add "仮名追加")
(hira-shorten "仮名削除"))))
(put-winprop edit-kana-kanji-primitive-menu 'next-menu
(list edit-kana-kanji-primitive-menu-sub-1
edit-kana-kanji-primitive-menu-sub-2)))
(setq edit-jointed-primitive-menu
(create-menu skeleditor 0 y black white kanji-font roupe-cursor
'((move-joint-prim "組合せ内の移動")
(resize-joint-prim "組合せ内の拡縮")
(force-primitive "プリミティブ変換"))))
(incr y (+ (max (+ (height-win edit-kana-kanji-primitive-menu)
(max (height-win edit-kana-kanji-primitive-menu-sub-1)
(height-win edit-kana-kanji-primitive-menu-sub-2)))
(height-win edit-jointed-primitive-menu))
*menu-margin*))
(setq edit-menus (list edit-common-menu
edit-kana-kanji-primitive-menu
edit-jointed-primitive-menu))
(mapcar edit-menus
#'(lambda (menu)
(setf (window-event-mask menu) '(:exposure))))
(print 'menus)
(setq menu-width
(max (apply #'max
(mapcar edit-menus
#'(lambda (menu) (width-win menu))))
(+ (width-win edit-kana-kanji-primitive-menu-sub-1)
(width-win edit-kana-kanji-primitive-menu-sub-2))))
(setq menu-height y)
(setq editor (create-win skeleditor
(+ menu-width *menu-margin*)
0
400 400 black white kanji-font))
(setf (window-event-mask editor) '(:exposure :button-press))
(setf (window-cursor editor) hair-cross-cursor)
(print 'editor)
(setq width-sliders
(create-slider-menu skeleditor
0
(+ (max menu-height (height-win editor))
*menu-margin*)
black white kanji-font
(min-wid "明朝基準太さ "
5.0 30.0 'minchowidth 20.0)
(got-wid "ゴシック基準太さ"
5.0 30.0 'gothicwidth 13.0)
(hir-wid "平仮名基準太さ "
0.0 1.5 'hirawidth 0.6)))
(print 'sliders)
(setq message (create-win skeleditor
0
(+ (drawable-y width-sliders) *menu-margin*
(height-win width-sliders))
500 50 black white kanji-font))
(print 'message)
(resize-win skeleditor
(max (+ menu-width
(width-win editor) (* *menu-margin* 4))
(width-win message))
(max (+ (max menu-height (height-win editor))
(height-win width-sliders)
(height-win message)
(* *menu-margin* 4))
(height-win skeleditor)))
(setq *width-of-skeleton-editor* (width-win skeleditor))
(setq *height-of-skeleton-editor* (height-win skeleditor))
(setq temporary-window
(create-win skeleditor
(width-win skeleditor) 0
400 400
black white kanji-font))
(connect-window-handlers)
(map-subwindows edit-common-menu)
(map-subwindows width-sliders)
(map-subwindows skeleditor)
(unmap-menu edit-kana-kanji-primitive-menu)
(unmap-menu edit-jointed-primitive-menu)
(setq current-selected-menu nil)
(map-window skeleditor)))
(defun unmap-menu (menu)
(mapcar (get-winprop menu 'next-menu)
#'(lambda (m)
(unmap-menu m)))
(unmap-subwindows menu)
(unmap-window menu))
(defun print-in-detail (p)
(cond ((stringp p) (prind p) (princ " "))
((vectorp p)
(princ "#(")
(do ((len (vector-length p))
(i 0 (1+ i)))
((>= i len))
(print-in-detail (vref p i))
(princ " "))
(princ ") "))
((listp p)
(princ "(")
(let ((last (do ((rest p (cdr rest)))
((endp rest) rest)
(print-in-detail (car rest)))))
(if (null last)
(princ ") ")
(princ " . ")
(princ last)
(princ " ) "))))
((atom p) (princ p) (princ " "))
(t (prind p)))
nil)
;;
;; (defun takobeya ()
;; (initialize-skeleton-editor)
;; (setq boo (skeleton-edit boo))
;; (setq foo (skeleton-edit foo))
;; (setq woo (skeleton-edit woo))
;; ...
;;