[Move examples into their own file
clinton@unknownlamer.org**20090429185818
 Ignore-this: 5af34f87b1e131707174a91f26f491f6
 Just to make working with the main xmlisp code easier
] addfile ./src/examples.lisp
hunk ./src/examples.lisp 1
+#|
+
+;; Example 1: HTML Link
+;;   simple mapping between class/element and slot/attribute name
+
+
+(defclass A (xml-serializer)
+   ((href :accessor href :initform "" :initarg :href))
+   (:documentation "HTML link"))
+
+
+(inspect )
+(read-from-string "AgentSheets")
+
+(href XMLisp examples)
+
+
+;; Example 2: RSS
+
+(defclass RSS (xml-serializer)
+   ((version :accessor version :initform "")
+    (channel :accessor channel :initform nil))
+   (:documentation "RSS main element"))
+
+(defclass CHANNEL (xml-serializer)
+   ((title :accessor title :initform "")
+    (link :accessor link :initform "")
+    (description :accessor description :initform "")
+    (image :accessor image :initform nil)
+    (managingeditor :accessor managingeditor :initform "")
+    (ttl :accessor ttl :initform nil :documentation "don't know what this is")
+    (language :accessor language :initform "")
+    (copyright :accessor copyright :initform "")
+    (webmaster :accessor webMaster :initform "")
+    (pubdate :accessor pubDate :initform "")
+    (lastbuilddate :accessor lastBuildDate :initform "")
+    (category :accessor category :initform "")
+    (generator :accessor generator :initform "")
+    (docs :accessor docs :initform "")
+    (items :accessor items :initform nil :documentation "list of RSS item"))
+   (:documentation "RSS channel"))
+
+
+(defclass IMAGE (xml-serializer)
+   ((title :accessor title :initform "")
+    (url :accessor url :initform "")
+    (link :accessor link :initform "")
+    (width :accessor width :initform 0))
+   (:documentation "RSS Image"))
+
+
+(defclass ITEM (xml-serializer)
+   ((title :accessor title :initform "")
+    (link :accessor link :initform "")
+    (description :accessor description :initform "")
+    (pubdate :accessor pubdate :initform ""))
+   (:documentation "RSS news Item"))
+
+;; pick an XML RSS file from the examples/xml folder
+;; if you pick other RSS files keep in mind that the above spec is incomplete
+
+
+(defparameter *RSS-News* (load-object (ccl:choose-file-dialog)))
+
+(save-object *RSS-News* "ccl:delete_me.xml" :if-exists :overwrite)
+
+
+;; and walk throught the RSS structure
+
+(inspect *RSS-News*)
+
+
+
+;; Example 3: Typed Slots
+;;   Typed slots use the print-typed-attribute-value, read-typed-attribute-value, print-typed-subelement-value
+;;   CODECs
+
+(defclass COIN (xml-serializer)
+  ((head-is-up :accessor head-is-up :type boolean)))
+
+
+(inspect )
+
+
+
+;; Example 4: simple Aggregation: rule based Visual AgenTalk-like language
+;;  use MOP name matching to implement aggregation
+;;  e.g. slot "RULES" will contain a list of "RULE" elements
+
+(defclass COMMAND (xml-serializer)
+  ((name :accessor name :initform "" :initarg :name)
+   (comments :accessor comments :initform nil)))
+
+
+(defclass BEHAVIOR (command)
+  ((method-commands :accessor method-commands :initform nil)))
+
+
+(defclass METHOD-COMMAND (command)
+  ((trigger :accessor trigger :initform nil)
+   (rules :accessor rules :initform nil)))
+
+(defclass TRIGGER (command)
+  ())
+
+(defclass RULE (command)
+  ((condition-commands :accessor condition-commands :initform nil :initarg :condition-commands)
+   (action-commands :accessor action-commands :initform nil :initarg :action-commands)
+   (is-enabled :accessor is-enabled :initform t :initarg :is-enabled :type boolean)
+   (probablility :accessor probability :initform 0.9s0 :initarg :probability :type short-float)))
+
+
+(defclass CONDITION-COMMAND (command)
+  ())
+
+
+(defclass ACTION-COMMAND (command)
+  ())
+
+
+
+(inspect
+ 
+   
+     
+       
+       
+       
+     
+   
+  )
+
+
+;; Example 5: User defined Aggregation
+;;   This is by no means a complete definition
+
+
+(defclass HTML-BASE-CLASS (xml-serializer)
+  ()
+  (:documentation "mother of all HTML element classes"))
+
+
+(defclass HTML (html-base-class)
+  ((items :accessor items :initform nil))
+  (:documentation "Contains all the html items of an HTML document"))
+
+
+(defmethod ADD-SUBOBJECT ((Self html) (Item html-base-class))
+  ;; extend this method to add all html-base-class instances to the "items" slot
+  (add-object-to-slot Self Item 'items))
+
+
+
+(defclass A (html-base-class)
+   ((href :accessor href :initform "" :initarg :href))
+   (:documentation "HTML link"))
+
+
+(defclass FONT (html-base-class)
+  ((face :accessor face)
+   (size :accessor size :type number))
+  (:documentation "Font info"))
+
+
+
+
+(inspect
+
+
+
+Small Text here
+Large Text here
+Go CU
+
+   )
+
+
+
+;;; Example 6: specialized attribute/slot name mapping
+
+
+(defclass ARGUMENT (xml-serializer)
+  ((pros :accessor pros :initform nil)
+   (against :accessor against :initform nil)))  ;; cons would be slot name that would conflict with Common Lisp symbol
+
+
+(defmethod ATTRIBUTE-NAME->SLOT-NAME ((Self argument) Attribute-Name)
+  (case Attribute-Name
+    (cons 'against)
+    (t (call-next-method))))
+
+
+(defmethod SLOT-NAME->ATTRIBUTE-NAME ((Self argument) Slot-Name)
+  (case Slot-Name
+    (against 'cons)
+    (t (call-next-method))))
+
+
+
+
+    ;; still works: could overwrite that if needed
+
+(against )
+
+
+
+;;; Example 7: Name spaces
+;;; XML Name spaces map to Lisp Packages
+;;; if you need to be able to read, say, 
+
+;; define packages if they do not already exist:
+
+(defpackage PIKIM)
+
+(defpackage XMLNS)
+
+;; then define your element class including slot names and accessors with package prefixes:
+
+(defclass SIMULATION (xml-serializer)
+  ((pikim::content_type :accessor pikim::content_type :initform nil)
+   (xmlns::pikim :accessor xmlns::pikim :initform nil)))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Example 8: comments, http://www.w3.org/TR/REC-xml/#sec-comments
+
+;; well formed: (content )
+
+;; not well formed: 
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Example 9: printing attributes based on accessor instead of slots
+
+(defclass class-with-missing-slot (xml-serializer)
+  ())
+
+(defmethod print-slots ((Self class-with-missing-slot))
+  '(accessor-with-no-matching-slot))  ; note: class does not have this slot
+
+(defmethod accessor-with-no-matching-slot ((Self class-with-missing-slot))
+  55)
+
+(setq c (make-instance 'class-with-missing-slot))
+
+(defclass list-of-class-with-missing-slot (xml-serializer)
+  ((stuff :accessor stuff :initform 0 :type number :initarg :stuff)))
+
+(defmethod elements ((Self list-of-class-with-missing-slot))
+  (let ((List nil))
+    (dotimes (i 20 List)
+      (push (make-instance 'class-with-missing-slot) List))))
+
+(defmethod print-slots ((Self list-of-class-with-missing-slot))
+  '(stuff elements))
+
+(defparameter *lc* (make-instance 'list-of-class-with-missing-slot :stuff 111))
+
+(stuff *lc*)
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Example 10: Read return values
+
+(defclass SUM (xml-serializer)
+  ((a :accessor a :type number)
+   (b :accessor b :type number)))
+
+
+(defmethod READ-RETURN-VALUE ((Self sum))
+  ;; overwrite: instead of returning self return the actual sum of a and b
+  (+ (a Self) (b Self)))
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Example 11: Keyword type
+
+(defclass REFERENCE (xml-serializer)
+  ((name :accessor name :type keyword)))
+
+
+(name )
+
+|#
hunk ./src/xmlisp.lisp 2065
-
-
-#|
-
-;; Example 1: HTML Link
-;;   simple mapping between class/element and slot/attribute name
-
-
-(defclass A (xml-serializer)
-   ((href :accessor href :initform "" :initarg :href))
-   (:documentation "HTML link"))
-
-
-(inspect )
-(read-from-string "AgentSheets")
-
-(href XMLisp examples)
-
-
-;; Example 2: RSS
-
-(defclass RSS (xml-serializer)
-   ((version :accessor version :initform "")
-    (channel :accessor channel :initform nil))
-   (:documentation "RSS main element"))
-
-(defclass CHANNEL (xml-serializer)
-   ((title :accessor title :initform "")
-    (link :accessor link :initform "")
-    (description :accessor description :initform "")
-    (image :accessor image :initform nil)
-    (managingeditor :accessor managingeditor :initform "")
-    (ttl :accessor ttl :initform nil :documentation "don't know what this is")
-    (language :accessor language :initform "")
-    (copyright :accessor copyright :initform "")
-    (webmaster :accessor webMaster :initform "")
-    (pubdate :accessor pubDate :initform "")
-    (lastbuilddate :accessor lastBuildDate :initform "")
-    (category :accessor category :initform "")
-    (generator :accessor generator :initform "")
-    (docs :accessor docs :initform "")
-    (items :accessor items :initform nil :documentation "list of RSS item"))
-   (:documentation "RSS channel"))
-
-
-(defclass IMAGE (xml-serializer)
-   ((title :accessor title :initform "")
-    (url :accessor url :initform "")
-    (link :accessor link :initform "")
-    (width :accessor width :initform 0))
-   (:documentation "RSS Image"))
-
-
-(defclass ITEM (xml-serializer)
-   ((title :accessor title :initform "")
-    (link :accessor link :initform "")
-    (description :accessor description :initform "")
-    (pubdate :accessor pubdate :initform ""))
-   (:documentation "RSS news Item"))
-
-;; pick an XML RSS file from the examples/xml folder
-;; if you pick other RSS files keep in mind that the above spec is incomplete
-
-
-(defparameter *RSS-News* (load-object (ccl:choose-file-dialog)))
-
-(save-object *RSS-News* "ccl:delete_me.xml" :if-exists :overwrite)
-
-
-;; and walk throught the RSS structure
-
-(inspect *RSS-News*)
-
-
-
-;; Example 3: Typed Slots
-;;   Typed slots use the print-typed-attribute-value, read-typed-attribute-value, print-typed-subelement-value
-;;   CODECs
-
-(defclass COIN (xml-serializer)
-  ((head-is-up :accessor head-is-up :type boolean)))
-
-
-(inspect )
-
-
-
-;; Example 4: simple Aggregation: rule based Visual AgenTalk-like language
-;;  use MOP name matching to implement aggregation
-;;  e.g. slot "RULES" will contain a list of "RULE" elements
-
-(defclass COMMAND (xml-serializer)
-  ((name :accessor name :initform "" :initarg :name)
-   (comments :accessor comments :initform nil)))
-
-
-(defclass BEHAVIOR (command)
-  ((method-commands :accessor method-commands :initform nil)))
-
-
-(defclass METHOD-COMMAND (command)
-  ((trigger :accessor trigger :initform nil)
-   (rules :accessor rules :initform nil)))
-
-(defclass TRIGGER (command)
-  ())
-
-(defclass RULE (command)
-  ((condition-commands :accessor condition-commands :initform nil :initarg :condition-commands)
-   (action-commands :accessor action-commands :initform nil :initarg :action-commands)
-   (is-enabled :accessor is-enabled :initform t :initarg :is-enabled :type boolean)
-   (probablility :accessor probability :initform 0.9s0 :initarg :probability :type short-float)))
-
-
-(defclass CONDITION-COMMAND (command)
-  ())
-
-
-(defclass ACTION-COMMAND (command)
-  ())
-
-
-
-(inspect
- 
-   
-     
-       
-       
-       
-     
-   
-  )
-
-
-;; Example 5: User defined Aggregation
-;;   This is by no means a complete definition
-
-
-(defclass HTML-BASE-CLASS (xml-serializer)
-  ()
-  (:documentation "mother of all HTML element classes"))
-
-
-(defclass HTML (html-base-class)
-  ((items :accessor items :initform nil))
-  (:documentation "Contains all the html items of an HTML document"))
-
-
-(defmethod ADD-SUBOBJECT ((Self html) (Item html-base-class))
-  ;; extend this method to add all html-base-class instances to the "items" slot
-  (add-object-to-slot Self Item 'items))
-
-
-
-(defclass A (html-base-class)
-   ((href :accessor href :initform "" :initarg :href))
-   (:documentation "HTML link"))
-
-
-(defclass FONT (html-base-class)
-  ((face :accessor face)
-   (size :accessor size :type number))
-  (:documentation "Font info"))
-
-
-
-
-(inspect
-
-
-
-Small Text here
-Large Text here
-Go CU
-
-   )
-
-
-
-;;; Example 6: specialized attribute/slot name mapping
-
-
-(defclass ARGUMENT (xml-serializer)
-  ((pros :accessor pros :initform nil)
-   (against :accessor against :initform nil)))  ;; cons would be slot name that would conflict with Common Lisp symbol
-
-
-(defmethod ATTRIBUTE-NAME->SLOT-NAME ((Self argument) Attribute-Name)
-  (case Attribute-Name
-    (cons 'against)
-    (t (call-next-method))))
-
-
-(defmethod SLOT-NAME->ATTRIBUTE-NAME ((Self argument) Slot-Name)
-  (case Slot-Name
-    (against 'cons)
-    (t (call-next-method))))
-
-
-
-
-    ;; still works: could overwrite that if needed
-
-(against )
-
-
-
-;;; Example 7: Name spaces
-;;; XML Name spaces map to Lisp Packages
-;;; if you need to be able to read, say, 
-
-;; define packages if they do not already exist:
-
-(defpackage PIKIM)
-
-(defpackage XMLNS)
-
-;; then define your element class including slot names and accessors with package prefixes:
-
-(defclass SIMULATION (xml-serializer)
-  ((pikim::content_type :accessor pikim::content_type :initform nil)
-   (xmlns::pikim :accessor xmlns::pikim :initform nil)))
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Example 8: comments, http://www.w3.org/TR/REC-xml/#sec-comments
-
-;; well formed: (content )
-
-;; not well formed: 
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Example 9: printing attributes based on accessor instead of slots
-
-(defclass class-with-missing-slot (xml-serializer)
-  ())
-
-(defmethod print-slots ((Self class-with-missing-slot))
-  '(accessor-with-no-matching-slot))  ; note: class does not have this slot
-
-(defmethod accessor-with-no-matching-slot ((Self class-with-missing-slot))
-  55)
-
-(setq c (make-instance 'class-with-missing-slot))
-
-(defclass list-of-class-with-missing-slot (xml-serializer)
-  ((stuff :accessor stuff :initform 0 :type number :initarg :stuff)))
-
-(defmethod elements ((Self list-of-class-with-missing-slot))
-  (let ((List nil))
-    (dotimes (i 20 List)
-      (push (make-instance 'class-with-missing-slot) List))))
-
-(defmethod print-slots ((Self list-of-class-with-missing-slot))
-  '(stuff elements))
-
-(defparameter *lc* (make-instance 'list-of-class-with-missing-slot :stuff 111))
-
-(stuff *lc*)
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Example 10: Read return values
-
-(defclass SUM (xml-serializer)
-  ((a :accessor a :type number)
-   (b :accessor b :type number)))
-
-
-(defmethod READ-RETURN-VALUE ((Self sum))
-  ;; overwrite: instead of returning self return the actual sum of a and b
-  (+ (a Self) (b Self)))
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Example 11: Keyword type
-
-(defclass REFERENCE (xml-serializer)
-  ((name :accessor name :type keyword)))
-
-
-(name )
-
-|#
-
-
-