;; Written for SIForge by Giovanni Giorgi (JJ) ;; $Id: siforge.el,v 1.4 2002/11/23 15:37:17 Gio Exp $ ;; Type M-x si-help for help ;; ;; $Log: siforge.el,v $ ;; Revision 1.4 2002/11/23 15:37:17 Gio ;; Versione intermedia prima di grande revisione! ;; ;; Revision 1.3 2002/11/17 11:48:18 Gio ;; Test ;; ;; Revision 1.2 2002/11/17 00:09:01 Gio ;; jjemacs: Migliorati msg e aggiunto supporto siforge ;; win.el: Rimpolpato ;; ;; Revision 1.1 2002/11/16 12:27:49 Gio ;; First Revision ;; ;; Reference: ;; http://www.gnu.org/manual/emacs-lisp-intro/html_mono/emacs-lisp-intro.html ;; Richiede il package "tempo" ;; Richiede XAE: http://xae.sunsite.dk/ ;; che richiede a sua volta: ;; Java runtime environment ;; XAE Fornisce gratis: ;; eieio object-oriented Lisp programming package for Emacs ;; ;; Richiede intelligenza. ;; Note sparse: ;; In XAE, il file ~/emacs/ext/xae-1.0beta8/psgml/psgml.el e' stato modificato da [GG] ;; (cercare signature [GG]) per funzionare. Emacs non accettava come key-prefix ;; "\C-c\C-f". Probabilemente e' un problema della mia installazione ma per sicurezza ho ;; commentato l'assegnazione tasti. ;;{{{ *** Dipendeze *** (require 'tempo) (setq auto-mode-alist (append '( ("\\.xml$" . html-mode) ;; Per il mio amico wpp ;) ("\\.raw$" . html-mode) ) auto-mode-alist)) ;; (add-to-list 'load-path (expand-file-name "~/emacs/ext/xae-1.0beta8/lisp")) ;; (require 'xae) ;; ;; Da fare solo la prima volta ma fa piacere: ;; (xae-compile-psgml) ;;}}} ;;{{{ *** Customs Params (defgroup siforge nil "SIForge Application Package" :group 'applications :prefix "siforge-gen-") (defcustom siforge-default-dir "~/src/si/layout/" "Put It your SIFORGE tag" :type 'string :options '(turn-on-auto-fill) :group 'siforge) (defcustom siforge-author-tag "gg74" "Put Here your siforge author tag." :type 'string :options '(turn-on-auto-fill) :group 'siforge) ;;}}} ;;{{{ *** Funzioni Base/templates (defun siforge-quote-brackets () (interactive) (save-excursion (query-replace "<" "<" nil nil nil)) (save-excursion (query-replace ">" ">" nil nil nil)) ) ;; Definiamo alcuni scheletri utili: ;; Vedi tempo-define-template. E' vergognoso che sia senza documentazione! (tempo-define-template "article" '( (P "Title:" title NOINSERT) (P "Topic:" topic NOINSERT) ;; (P "Author (4charID)" siforge-author-tag NOINSERT) "\n" "\n\t" 'r "\n\n" "\n\n\n" "\n\n" "\n\n\n") "Build the basic article xml desc file" nil) (tempo-define-template "res" '( (P "Resource id: " resid NOINSERT) (P "Url: " url NOINSERT) " " "\n" 'r "\n " ;; NON VA[;((] ;;(setq siforge-last-resource-id resid) ) "Insert a resource for siforge xml desc file" nil) ;; ;; Altro box ma questa volta con titolo! ;; (tempo-define-template "box" '( "\n\t" 'r "\n") "Insert a siforge box suitable for a lot of use" nil) (tempo-define-template "source-box" '( "\n\t" 'r "\n") "Insert a siforge box suitable for a lot of use" nil) ;; (tempo-define-template "fixme" '( (P "Comment>> " comment NOINSERT) "\n" "\n" ) "Insert a fixme for siforge xml desc file/" nil) (tempo-define-template "siforge-header1" '( "

" 'r "

\n") "Insert a siforge header1 tag" nil) (tempo-define-template "siforge-img" '( "\n\t\""\n")) ;; Funzioni del tipo tempo-template-article, tempo-template-res tempo-template-fixme (defun siforge-expand-paragraphs () (interactive) (goto-char (point-min)) (re-search-forward "") ;; Sistema i fine paragrafo: (query-replace-regexp "\\.\n\n" ".\n

\n") ) (defun siforge-credits() (interactive) (message "JJ's $Id: siforge.el,v 1.4 2002/11/23 15:37:17 Gio Exp $") ) ;;}}} ;;{{{ *** Funzioni di supporto esteso (defun siforge-smart-insert-res () "Put a Smart resource tag at the right position" (interactive) (save-excursion (end-of-buffer) (re-search-backward "\n") (insert "\n") (tempo-template-res) (insert "\n") ) ;;(message "Risorsa inserita/ Presto sara' incluso l'id in una lista") ) ;;}}} ;;{{{ FUNZIONI SPERIMENTALI ;; Cerca tutti i resource list e creare una lista nella variabile ;; siforge-current-resource-list (defun siforge-find-res () (interactive) (message "Collecting data...") (setq siforge-current-resid-list (list)) (save-excursion (goto-char (point-min)) (re-search-forward "") (while (progn (while (progn (forward-line 1) (and (< (point) (point-max)) (not (looking-at ".*"))))) (when (looking-at ".*") (setq siforge-current-resid-list (cons (match-string-no-properties 1) siforge-current-resid-list))) ;;(append (match-string 1) siforge-current-resid-list)) ;; Match-string ;;(message (concat "Resid:" (match-string-no-properties 1) " Url:" (match-string-no-properties 2) )) ;; Memorizza Nella resid list (forward-line 1) (< (point) (point-max)))) ;; La ribalto: (setq siforge-current-resid-list (reverse siforge-current-resid-list)) (message "Collected...")) ) (defun siforge-print-elements-of-res-list (list) "Print each element of LIST on a line of its own. Builds also a correct hyper link" (while list (let ((element (car list))) (insert element) (insert "\t\t\n") ;; Trovare un modo per concatenare le tre stinghe e darle in pasto al tempo-define-template (tempo-define-template element '("\t\t\n")) (define-key global-map [menu-bar siforge experimental-f element] ;; Mettere al posto di nil la tempo funzione...a patto di riuscire a esprimerla come simbolo '(element . nil)) ) (setq list (cdr list)))) (defun siforge-list-res () (interactive) (siforge-find-res) (message "Found %d resouces in current file" (list-length siforge-current-resid-list)) (delete-other-windows) (split-window-vertically) ;; Va nella nuova finestra... (other-window 1) ;; ...e si posizione sul buffer di output... (switch-to-buffer "*siforge*") (shrink-window 7) ;; Stampa la lista: (siforge-print-elements-of-res-list siforge-current-resid-list) ) ;;}}} ;;{{{ Menu Setup (define-key global-map [menu-bar siforge] (cons "SIForge" (make-sparse-keymap "siforge"))) (define-key global-map [menu-bar siforge menu-siforge-credits] '("About" . siforge-credits)) (define-key global-map [menu-bar siforge menu-siforge-expand-paragraphs] '("Query Insert

" . siforge-expand-paragraphs)) ;; Experimental menu (define-key global-map [menu-bar siforge experimental-f] (cons "Experimental..." (make-sparse-keymap ))) (define-key global-map [menu-bar siforge experimental-f menu-siforge-list-res] '("List Resources" . siforge-list-res)) ;; Insert menu (define-key global-map [menu-bar siforge insert] (cons "Insert..." (make-sparse-keymap ))) (define-key global-map [menu-bar siforge insert menu-tempo-template-article] '("Article" . tempo-template-article)) (define-key global-map [menu-bar siforge insert menu-tempo-template-siforge-img] '("Image" . tempo-template-siforge-img)) (define-key global-map [menu-bar siforge insert menu-tempo-template-source-box] '("Source Box" . tempo-template-source-box)) (define-key global-map [menu-bar siforge insert menu-tempo-template-box] '("(Simple) Box" . tempo-template-box)) (define-key global-map [menu-bar siforge insert menu-tempo-template-fixme] '("Fixme" . tempo-template-fixme)) (define-key global-map [menu-bar siforge insert menu-tempo-template-res] '("Resource" . tempo-template-res)) (define-key global-map [menu-bar siforge insert menu-siforge-smart-insert-res] '("Resource [smart]" . siforge-smart-insert-res)) (define-key global-map [menu-bar siforge insert menu-tempo-template-siforge-header1] '("New Par. Title [h1]" . tempo-template-siforge-header1)) ;;}}} ;; Segnala in modo professionale che e' pronto: (siforge-credits)