Patches by Slava Gorbunov
authorDavid Lichteblau <david@lichteblau.com>
Sun, 19 Sep 2010 22:07:37 +0000 (20 00:07 +0200)
committerDavid Lichteblau <david@radon.(none)>
Sun, 19 Sep 2010 22:07:37 +0000 (20 00:07 +0200)
src/parse/html-parser.lisp
src/parse/sgml-parse.lisp

index 1160293..ea72962 100644 (file)
 
 (defparameter sgml::*simple-catalog*
   (let ((base
-        (merge-pathnames
-         "resources/"
-         (asdf:component-relative-pathname
-          (asdf:find-system :closure-html)))))
+        (merge-pathnames
+         (make-pathname :directory '(:relative "resources") :type :unspecific)
+         (asdf:component-relative-pathname
+          (asdf:find-system :closure-html)))))
     (loop
        :for (name . filename)
        :in '(("-//W3O//DTD W3 HTML 3.0//EN" . "dtd/HTML-3.0")
index b51beb1..faa9029 100644 (file)
                (a-unread-byte ch input)
                (return))
               ((rune= ch #/&)
-               (setf sp (read-entity-ref input dtd sp)))
+               (setf sp (read-entity-ref input dtd sp))
+               (if (>= sp se)  ;read-entity-ref may enlarge scratchpad
+                 (setf scratch (a-stream-scratch input)
+                       se (length scratch))))
               (t
                (setf (aref scratch sp) ch)    ;recode character read
                (setf sp (the fixnum (+ sp 1)))
 (defun read-start-tag (input dtd)
   (multiple-value-bind (name atts) (read-name-and-attributes input dtd)
     (let ((ch (a-read-byte input)))
-      (cond ((rune= ch #/>)
+      (cond ((null ch)
+            (read-tag-error input "EOF inside tag"))
+           ((rune= ch #/>)
              (values :start-tag name atts))
             ((rune= ch #/<)
              (parse-warn input 3 
         (atts nil))
     (loop
       (skip-white-space input)
-      (cond ((member (a-peek-byte input) '(#/< #/> #//) :test #'rune=)
+      (cond ((member (a-peek-byte input) '(#/< #/> #//) :test #'eql)
              (return)))
       (push (read-attribute input dtd) atts))
     (values name (nreverse atts)) ))