! Copyright (C) 2005, 2006 Daniel Ehrenberg ! See http://factorcode.org/license.txt for BSD license. USING: xml.data xml.writer kernel generic io prettyprint math debugger sequences state-parser ; IN: xml.errors TUPLE: no-entity thing ; : ( string -- error ) { set-no-entity-thing } no-entity construct-parsing-error ; M: no-entity error. dup parsing-error. "Entity does not exist: &" write no-entity-thing write ";" print ; TUPLE: xml-string-error string ; ! this should not exist : ( string -- xml-string-error ) { set-xml-string-error-string } xml-string-error construct-parsing-error ; M: xml-string-error error. dup parsing-error. xml-string-error-string print ; TUPLE: mismatched open close ; : { set-mismatched-open set-mismatched-close } mismatched construct-parsing-error ; M: mismatched error. dup parsing-error. "Mismatched tags" print "Opening tag: <" write dup mismatched-open print-name ">" print "Closing tag: " print ; TUPLE: unclosed tags ; ! is ( -- unclosed ), see presentation.factor M: unclosed error. "Unclosed tags" print "Tags: " print unclosed-tags [ " <" write print-name ">" print ] each ; TUPLE: bad-uri string ; : ( string -- bad-uri ) { set-bad-uri-string } bad-uri construct-parsing-error ; M: bad-uri error. dup parsing-error. "Bad URI:" print bad-uri-string . ; TUPLE: nonexist-ns name ; : ( name-string -- nonexist-ns ) { set-nonexist-ns-name } nonexist-ns construct-parsing-error ; M: nonexist-ns error. dup parsing-error. "Namespace " write nonexist-ns-name write " has not been declared" print ; TUPLE: unopened ; ! this should give which tag was unopened : ( -- unopened ) { } unopened construct-parsing-error ; M: unopened error. parsing-error. "Closed an unopened tag" print ; TUPLE: not-yes/no text ; : ( text -- not-yes/no ) { set-not-yes/no-text } not-yes/no construct-parsing-error ; M: not-yes/no error. dup parsing-error. "standalone must be either yes or no, not \"" write not-yes/no-text write "\"." print ; TUPLE: extra-attrs attrs ; ! this should actually print the names : ( attrs -- extra-attrs ) { set-extra-attrs-attrs } extra-attrs construct-parsing-error ; M: extra-attrs error. dup parsing-error. "Extra attributes included in xml version declaration:" print extra-attrs-attrs . ; TUPLE: bad-version num ; : { set-bad-version-num } bad-version construct-parsing-error ; M: bad-version error. "XML version must be \"1.0\" or \"1.1\". Version here was " write bad-version-num . ; TUPLE: notags ; C: notags M: notags error. drop "XML document lacks a main tag" print ; TUPLE: multitags ; C: multitags M: multitags error. drop "XML document contains multiple main tags" print ; TUPLE: bad-prolog prolog ; : ( prolog -- bad-prolog ) { set-bad-prolog-prolog } bad-prolog construct-parsing-error ; M: bad-prolog error. dup parsing-error. "Misplaced XML prolog" print bad-prolog-prolog write-prolog nl ; TUPLE: capitalized-prolog name ; : ( name -- capitalized-prolog ) { set-capitalized-prolog-name } capitalized-prolog construct-parsing-error ; M: capitalized-prolog error. dup parsing-error. "XML prolog name was partially or totally capitalized, using" print "" write " instead of " print ; TUPLE: pre/post-content string pre? ; C:
 pre/post-content
M: pre/post-content error.
    "The text string:" print
    dup pre/post-content-string .
    "was used " write
    pre/post-content-pre? "before" "after" ? write
    " the main tag." print ;

TUPLE: versionless-prolog ;
:  ( -- versionless-prolog )
    { } versionless-prolog construct-parsing-error ;
M: versionless-prolog error.
    parsing-error.
    "XML prolog lacks a version declaration" print ;

TUPLE: bad-instruction inst ;
:  ( instruction -- bad-instruction )
    { set-bad-instruction-inst }
    bad-instruction construct-parsing-error ;
M: bad-instruction error.
    dup parsing-error.
    "Misplaced processor instruction:" print
    bad-instruction-inst write-item nl ;

TUPLE: bad-directive dir ;
:  ( directive -- bad-directive )
    { set-bad-directive-dir }
    bad-directive construct-parsing-error ;
M: bad-directive error.
    dup parsing-error.
    "Misplaced directive:" print
    bad-directive-dir write-item nl ;

UNION: xml-parse-error multitags notags extra-attrs nonexist-ns
       not-yes/no unclosed mismatched xml-string-error expected no-entity
       bad-prolog versionless-prolog capitalized-prolog bad-instruction
       bad-directive ;