;; 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)