1module m_sax_types
2
3#ifndef DUMMYLIB
4  use m_common_attrs, only: dictionary_t
5  use m_common_elstack, only: elstack_t
6  use m_common_entities, only: entity_list
7  use m_common_error, only: error_stack
8  use m_common_namespaces, only: namespacedictionary
9  use m_common_notations, only: notation_list
10  use m_common_struct, only: xml_doc_state
11
12  use fox_m_fsys_varstr, only: varstr
13
14  use m_sax_reader, only: file_buffer_t
15
16  implicit none
17
18  ! Context
19
20  integer, parameter :: CTXT_NULL = -1
21  integer, parameter :: CTXT_INIT = 0
22  integer, parameter :: CTXT_BEFORE_DTD = 1
23  integer, parameter :: CTXT_IN_DTD = 2
24  integer, parameter :: CTXT_IGNORE = 3
25  integer, parameter :: CTXT_BEFORE_CONTENT = 4
26  integer, parameter :: CTXT_IN_CONTENT = 5
27  integer, parameter :: CTXT_AFTER_CONTENT = 6
28
29  ! State
30
31  integer, parameter :: ST_STOP                     = -1
32  integer, parameter :: ST_NULL                     = 0
33  integer, parameter :: ST_MISC                     = 1
34  integer, parameter :: ST_BANG_TAG                 = 2
35  integer, parameter :: ST_START_PI                 = 3
36  integer, parameter :: ST_PI_CONTENTS              = 4
37  integer, parameter :: ST_PI_END                   = 5
38  integer, parameter :: ST_START_COMMENT            = 6
39  integer, parameter :: ST_COMMENT_END              = 7
40  integer, parameter :: ST_START_TAG                = 8
41  integer, parameter :: ST_START_CDATA_DECLARATION  = 9
42  integer, parameter :: ST_FINISH_CDATA_DECLARATION = 10
43  integer, parameter :: ST_IN_TAG                   = 11
44  integer, parameter :: ST_ATT_NAME                 = 12
45  integer, parameter :: ST_ATT_EQUALS               = 13
46  integer, parameter :: ST_CHAR_IN_CONTENT          = 14
47  integer, parameter :: ST_CLOSING_TAG              = 15
48  integer, parameter :: ST_CDATA_CONTENTS           = 16
49  integer, parameter :: ST_IN_CLOSING_TAG           = 17
50  integer, parameter :: ST_TAG_IN_CONTENT           = 18
51  integer, parameter :: ST_CDATA_END                = 19
52  integer, parameter :: ST_IN_DOCTYPE               = 20
53  integer, parameter :: ST_DOC_NAME                 = 21
54  integer, parameter :: ST_DOC_SYSTEM               = 22
55  integer, parameter :: ST_DOC_PUBLIC               = 23
56  integer, parameter :: ST_DOC_DECL                 = 24
57  integer, parameter :: ST_CLOSE_DOCTYPE            = 25
58  integer, parameter :: ST_START_ENTITY             = 26
59  integer, parameter :: ST_START_PE                 = 27
60  integer, parameter :: ST_IN_SUBSET                = 28
61
62! DTD states
63  integer, parameter :: ST_DTD_NULL                = 50
64  integer, parameter :: ST_DTD_SUBSET              = 51
65  integer, parameter :: ST_DTD_START_SECTION_DECL  = 52
66  integer, parameter :: ST_DTD_FINISH_SECTION_DECL = 53
67  integer, parameter :: ST_DTD_IN_IGNORE_SECTION   = 54
68  integer, parameter :: ST_DTD_BANG_TAG            = 55
69  integer, parameter :: ST_DTD_START_PI            = 56
70  integer, parameter :: ST_DTD_PI_CONTENTS         = 57
71  integer, parameter :: ST_DTD_PI_END              = 58
72  integer, parameter :: ST_DTD_COMMENT_END         = 59
73  integer, parameter :: ST_DTD_START_COMMENT       = 60
74  integer, parameter :: ST_DTD_ATTLIST             = 61
75  integer, parameter :: ST_DTD_ELEMENT             = 62
76  integer, parameter :: ST_DTD_ENTITY              = 63
77  integer, parameter :: ST_DTD_NOTATION            = 64
78  integer, parameter :: ST_DTD_NOTATION_ID         = 65
79  integer, parameter :: ST_DTD_NOTATION_SYSTEM     = 66
80  integer, parameter :: ST_DTD_NOTATION_PUBLIC     = 67
81  integer, parameter :: ST_DTD_NOTATION_PUBLIC_2   = 68
82  integer, parameter :: ST_DTD_NOTATION_END        = 69
83  integer, parameter :: ST_DTD_ENTITY_PE           = 70
84  integer, parameter :: ST_DTD_ENTITY_ID           = 71
85  integer, parameter :: ST_DTD_ENTITY_PUBLIC       = 72
86  integer, parameter :: ST_DTD_ENTITY_SYSTEM       = 73
87  integer, parameter :: ST_DTD_ENTITY_NDATA        = 74
88  integer, parameter :: ST_DTD_ENTITY_NDATA_VALUE  = 75
89  integer, parameter :: ST_DTD_ENTITY_END          = 76
90  integer, parameter :: ST_DTD_ATTLIST_CONTENTS    = 77
91  integer, parameter :: ST_DTD_ATTLIST_END         = 78
92  integer, parameter :: ST_DTD_ELEMENT_CONTENTS    = 79
93  integer, parameter :: ST_DTD_ELEMENT_END         = 80
94  integer, parameter :: ST_DTD_DONE                = 81
95
96! token types
97
98  integer, parameter :: TOK_NULL = 0
99  integer, parameter :: TOK_PI_TAG = 1 ! <?
100  integer, parameter :: TOK_BANG_TAG = 2 ! <!
101  integer, parameter :: TOK_OPEN_TAG = 3 ! <
102  integer, parameter :: TOK_OPEN_SB = 4 ! [
103  integer, parameter :: TOK_CLOSE_SB = 5 ! [
104  integer, parameter :: TOK_OPEN_COMMENT = 6 ! --
105  integer, parameter :: TOK_NAME = 7 ! name (+token)
106  integer, parameter :: TOK_CHAR = 8 ! character data (+token)
107  integer, parameter :: TOK_PI_END = 9 ! ?>
108  integer, parameter :: TOK_COMMENT_END = 10 ! -->
109  integer, parameter :: TOK_SECTION_START = 11 ! <![
110  integer, parameter :: TOK_SECTION_END = 12 ! ]]>
111  integer, parameter :: TOK_END_TAG = 13 ! >
112  integer, parameter :: TOK_END_TAG_CLOSE = 14 ! />
113  integer, parameter :: TOK_CLOSE_TAG = 15 ! </
114  integer, parameter :: TOK_ENTITY = 16 ! % or &
115  integer, parameter :: TOK_EQUALS = 17 ! =
116  integer, parameter :: TOK_DTD_CONTENTS = 18 ! for element and attlist
117  integer, parameter :: TOK_OPEN_PAR = 19 ! (
118  integer, parameter :: TOK_CLOSE_PAR = 20 ! )
119
120  type sax_parser_t
121    type(xml_doc_state), pointer :: xds
122    logical :: xds_used = .false. ! is the xds used by DOM? If so, we must
123                                  ! not destroy it once we are finished
124    integer :: context
125    integer :: state = ST_NULL
126    integer :: state_dtd = ST_DTD_SUBSET
127    logical :: well_formed = .false.
128    logical :: skippedExternal = .false.
129    type(varstr) :: token
130    type(varstr) :: content
131    integer :: tokenType = TOK_NULL
132    integer :: nextTokenType = TOK_NULL
133    type(varstr) :: name
134    type(varstr) :: attname
135    logical :: error = .false.
136    type(error_stack) :: error_stack
137    ! Aspects of document structure
138    type(varstr) :: root_element
139    type(elstack_t) :: elstack
140    type(dictionary_t) :: attributes
141    type(namespacedictionary) :: nsdict
142    type(notation_list) :: nlist
143    type(entity_list) :: predefined_e_list
144    type(entity_list) :: forbidden_pe_list
145    type(entity_list) :: forbidden_ge_list
146    type(varstr) :: PublicId
147    type(varstr) :: SystemId
148    type(varstr) :: Ndata
149    logical :: inIntSubset = .false.
150    logical :: spaceBeforeEntity = .false.
151  end type sax_parser_t
152#endif
153
154  type xml_t
155#ifndef DUMMYLIB
156    type(file_buffer_t) :: fb
157    type(sax_parser_t) :: fx
158#else
159    integer :: i = 0
160#endif
161  end type xml_t
162
163end module m_sax_types
164