From: Adam Di C. <adi...@us...> - 2003-04-28 05:23:01
|
Update of /cvsroot/docbook/dsssl/lib In directory sc8-pr-cvs1:/tmp/cvs-serv13287 Modified Files: dblib.dsl Log Message: Make PI parsing more robust by rewriting parse-pi-attribute and a fix in parse-starttag-pi. I'm still not entirely happy with the PI parsing, its probably a little flakey, but it shouldn't completely bail out when it hits data its not expecting. Closes Debian Bug#186886. Index: dblib.dsl =================================================================== RCS file: /cvsroot/docbook/dsssl/lib/dblib.dsl,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** dblib.dsl 26 Apr 2003 21:09:36 -0000 1.5 --- dblib.dsl 28 Apr 2003 05:22:58 -0000 1.6 *************** *** 1794,1811 **** (define (parse-pi-attribute pivalues #!optional (skip #f)) ! (let* ((equalpos (string-index pivalues "=")) ! (name (substring pivalues 0 equalpos)) ! (quotchar (substring pivalues (+ equalpos 1) (+ equalpos 2))) ! (rest (substring pivalues ! (+ equalpos 2) ! (string-length pivalues))) ! (quotpos (string-index rest quotchar)) ! (value (substring rest 0 quotpos)) ! (morevals (strip (substring rest ! (+ quotpos 1) ! (string-length rest))))) ! (if skip ! morevals ! (list name value)))) (define (parse-skip-pi-attribute pivalues) --- 1794,1819 ---- (define (parse-pi-attribute pivalues #!optional (skip #f)) ! (let ((equalpos (string-index pivalues "="))) ! (if (< equalpos 1) ! (let ((debug (string-append "attribute not in form 'name=\"value\"': " ! pivalues))) ! #f) ! (let* ((name (substring pivalues 0 equalpos)) ! (rest (substring pivalues (+ equalpos 1) (string-length pivalues))) ! ;; location of the 2nd double quote ! (quotpos (string-index (substring rest 1 (string-length rest)) ! "\"")) ! (value (strip (substring rest 0 (if (> quotpos 0) ! quotpos ! (string-length rest))) ! (list #\"))) ! (morevals (if (> quotpos 0) ! (strip (substring rest ! (+ quotpos 1) ! (string-length rest))) ! #f))) ! (if skip ! morevals ! (list name value)))))) (define (parse-skip-pi-attribute pivalues) *************** *** 1836,1840 **** (string-length strippi))))) (let loop ((values pivalues) (result (list pitarget))) ! (if (string=? values "") result (loop (parse-skip-pi-attribute values) --- 1844,1849 ---- (string-length strippi))))) (let loop ((values pivalues) (result (list pitarget))) ! (if (or (not values) ! (string=? values "")) result (loop (parse-skip-pi-attribute values) |