home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 3 / AACD03.BIN / AACD / Programming / sofa / archive / exml.lha / exml / compiler_specific / ise / xml_parser.e < prev    next >
Text File  |  1999-04-13  |  3KB  |  127 lines

  1. class
  2.     XML_PARSER
  3. inherit
  4.     XML_PARSER_ABS
  5.         rename
  6.             make as make_abs
  7.         end
  8.     MEMORY
  9.         export
  10.             {NONE} all
  11.         redefine
  12.             dispose
  13.         end
  14. creation
  15.     make
  16. feature {NONE}
  17.     make is
  18.         do
  19.             make_abs
  20.             register_all_eiffel_callback
  21.         end
  22. feature 
  23.  
  24.     set_base (a_base: STRING) is
  25.             -- sets the base to be used for resolving URIs in system identifiers
  26.             -- in declarations. 
  27.         local
  28.             a: ANY
  29.         do
  30.             a := a_base.area
  31.             -- TODO: Check if string ends with a NULL char
  32.             -- if it does not, append one!
  33.             set_base_expat (item, $a)
  34.         end
  35.  
  36.     get_base: STRING is
  37.             -- returns the base
  38.         do
  39.             !! Result.make (0)
  40.             Result.from_c (get_base_expat (item))
  41.         end
  42.  
  43.     last_error_description: STRING is 
  44.         do
  45.             !! Result.make (0)
  46.             Result.from_c (error_string (last_error))
  47.         end
  48.  
  49.     last_line_number: INTEGER is 
  50.         do
  51.             Result := get_current_line_number (item)
  52.         end
  53.     last_column_number: INTEGER is 
  54.         do
  55.             Result := get_current_column_number (item)
  56.         end
  57.     last_byte_index: INTEGER is 
  58.         do
  59.             Result := get_current_byte_index (item)
  60.         end
  61.  
  62. feature {NONE} 
  63.     parse_string_imp  (data: STRING): INTEGER is
  64.             -- function has side effect !!!
  65.         local
  66.             a: ANY
  67.         do
  68.             a := data.area
  69.             Result := parse (item, $a, data.count, 0)
  70.         end
  71.  
  72.     set_eiffel_object_as_user_data is
  73.             -- expat hooks receive a user defineble integer as
  74.             -- additional parameter. we set this to the Eiffel
  75.             -- parser object.
  76.         do
  77.             set_user_data (item, exml_adopt_object (Current))
  78.         end
  79.  
  80.     dispose is
  81.         do
  82.             exml_release_object (c_get_user_data (item))
  83.             parser_free (item)
  84.         end
  85.  
  86. feature {NONE} -- In ISE Eiffel we need to tell the C-glue-code (exml-clib) the addresses of
  87.                     -- our Eiffel callback functions
  88.  
  89.     register_all_eiffel_callback is
  90.         once
  91.             c_exml_set_on_start_tag_procedure_address ($on_start_tag_procedure)
  92.             c_exml_set_on_end_tag_procedure_address ($on_end_tag_procedure)
  93.             c_exml_set_on_content_procedure_address ($on_content_procedure)
  94.             c_exml_set_on_processing_instruction_procedure_address ($on_processing_instruction_procedure)
  95.             c_exml_set_on_default_procedure_address ($on_default_procedure_address)
  96.             c_exml_set_on_unparsed_entity_declaration_procedure_address ($on_unparsed_entity_declaration_procedure)
  97.             c_exml_set_on_notation_declaration_procedure_address ($on_notation_declaration_procedure)
  98.             c_exml_set_on_external_entity_reference_procedure_address ($on_external_entity_reference_procedure)
  99.         end
  100.  
  101.     register_external_entity_reference_hook is
  102.         do
  103.             c_exml_set_on_external_entity_reference_procedure_address ($on_external_entity_reference_procedure)
  104.         end
  105.  
  106.     register_unkown_encoding_hook is
  107.         do
  108.             c_exml_set_on_unkown_encoding_procedure_address ($on_unkown_encoding_procedure)
  109.         end
  110.  
  111. invariant
  112.     item_not_void: item /= Void
  113. end
  114. --|-------------------------------------------------------------------------
  115. --| eXML, Eiffel XML Parser Toolkit
  116. --| Copyright (C) 1999  Andreas Leitner
  117. --| See the file forum.txt included in this package for licensing info.
  118. --|
  119. --| Comments, Questions, Additions to this library? please contact:
  120. --|
  121. --| Andreas Leitner
  122. --| Arndtgasse 1/3/5
  123. --| 8010 Graz
  124. --| Austria
  125. --| email: andreas.leitner@teleweb.at
  126. --| web: http://exml.dhs.org
  127. --|-------------------------------------------------------------------------