153 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			153 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Factor
		
	
	
|  | ! 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 ;
 | ||
|  | : <no-entity> ( 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 | ||
|  | : <xml-string-error> ( 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 ;
 | ||
|  | : <mismatched> | ||
|  |     { 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: </" write mismatched-close print-name ">" print ;
 | ||
|  | 
 | ||
|  | TUPLE: unclosed tags ;
 | ||
|  | ! <unclosed> is ( -- unclosed ), see presentation.factor | ||
|  | M: unclosed error. | ||
|  |     "Unclosed tags" print
 | ||
|  |     "Tags: " print
 | ||
|  |     unclosed-tags [ "  <" write print-name ">" print ] each ;
 | ||
|  | 
 | ||
|  | TUPLE: bad-uri string ;
 | ||
|  | : <bad-uri> ( 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 ;
 | ||
|  | : <nonexist-ns> ( 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 )
 | ||
|  |     { } unopened construct-parsing-error ;
 | ||
|  | M: unopened error. | ||
|  |     parsing-error. | ||
|  |     "Closed an unopened tag" print ;
 | ||
|  | 
 | ||
|  | TUPLE: not-yes/no text ;
 | ||
|  | : <not-yes/no> ( 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 | ||
|  | : <extra-attrs> ( 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 ;
 | ||
|  | : <bad-version> | ||
|  |     { 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> notags | ||
|  | M: notags error. | ||
|  |     drop "XML document lacks a main tag" print ;
 | ||
|  | 
 | ||
|  | TUPLE: multitags ;
 | ||
|  | C: <multitags> multitags | ||
|  | M: multitags error. | ||
|  |     drop "XML document contains multiple main tags" print ;
 | ||
|  | 
 | ||
|  | TUPLE: bad-prolog prolog ;
 | ||
|  | : <bad-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 ;
 | ||
|  | : <capitalized-prolog> ( 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 capitalized-prolog-name write "...?>" write
 | ||
|  |     " instead of <?xml...?>" print ;
 | ||
|  | 
 | ||
|  | TUPLE: pre/post-content string pre? ;
 | ||
|  | C: <pre/post-content> 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 )
 | ||
|  |     { } versionless-prolog construct-parsing-error ;
 | ||
|  | M: versionless-prolog error. | ||
|  |     parsing-error. | ||
|  |     "XML prolog lacks a version declaration" print ;
 | ||
|  | 
 | ||
|  | TUPLE: bad-instruction inst ;
 | ||
|  | : <bad-instruction> ( 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 ;
 | ||
|  | : <bad-directive> ( 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 ;
 |