LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
structuredDocumentXMLParser.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2022 CEA LIST <gael.de-chalendar@cea.fr>
2//
3// SPDX-License-Identifier: MIT
4
5/************************************************************************
6 * @file StructuredDocumentXMLParser.h
7 * @author Olivier Mesnard
8 * @date ??
9 * @author Romaric Besancon
10 * @date Tue Oct 28 18:29:19 2003
11 * @author Gael de Chalendar
12 * @date Wed Apr 08 2015
13 ***********************************************************************/
14#ifndef STRUCTUREDDOCUMENTXMLPARSER_H
15#define STRUCTUREDDOCUMENTXMLPARSER_H
16
20#include "DocumentElements.h"
21
22#include <boost/shared_ptr.hpp>
23
24class QXmlStreamAttributes;
25
26namespace Lima {
27
28class StructuredXmlDocumentHandler;
29
30namespace DocumentsReader {
31
32#define MAX_NODE_TYPE NODE_PROPERTY + 1
33static const QString tagSemanticItem[MAX_NODE_TYPE] =
34{
35 "",
36 "rootNodes",
37 "discardableNodes",
38 "indexingNodes",
39 "hierarchyNodes",
40 "presentationNodes",
41 "ignoredNodes",
42 "propertyNodes"
43};
44
45class DOCUMENTSREADER_EXPORT FieldTypeElement : public std::pair<FieldType,QString>
46{
47 public:
48 FieldTypeElement() :std::pair<FieldType,QString> ( NODE_NOTYPE,"" ) {}
49 FieldTypeElement ( const FieldType type, const QString attribute ) :
50 std::pair<FieldType,QString> ( type,attribute ) {}
51 FieldTypeElement ( const FieldType type ) :
52 std::pair<FieldType,QString> ( type,"" ) {}
53 const FieldType& getType ( void ) const { return first; }
54 const QString& getAttributeName ( void ) const { return second; }
55 FieldType& getType ( void ) { return first; }
56 QString& getAttribute ( void ) { return second; }
57 bool inAttribute ( void ) const { return ( !second.isEmpty() ); }
58};
59
60#define STRUCTUREDDOCUMENTXMLPARSER_CLASSID "StructuredDocumentXMLParser"
61
66{
67public:
68
70
71 virtual ~StructuredDocumentXMLParser ( void );
72
73 void setShiftFrom(std::shared_ptr<const ShiftFrom> shiftFrom);
74
75 // -----------------------------------------------------------------------
76 // propagate SAX events as XMLDocHandler events
77 // -----------------------------------------------------------------------
79 {
80 m_processor = handler;
81 }
82
83 // -----------------------------------------------------------------------
84 // Implementations of the SAX DocumentHandler interface
85 // -----------------------------------------------------------------------
86 bool startDocument(unsigned int parserOffset);
87
88 bool startElement(const QString & namespaceURI, const QString & name, const QString & qName, const QXmlStreamAttributes & attributes, unsigned int parserOffset);
89
90 bool characters ( const QString & ch, unsigned int parserOffset );
91
92 bool endElement(const QString& namespaceURI, const QString& qsname, const QString& qName, unsigned int parserOffset);
93
94 bool endDocument();
95
96 // helper function for initialization when created
97 void init (
99 Manager* manager ) override;
100 //----------------------------------------------------------------------
101 // private function members
102private:
103 void setCurrentByteOffset ( const unsigned int offset );
104
108// void initElement();
109 void initElementOffset ( const QString& name );
110 void closeElementOffset ( const QString& name );
111
112 bool isIndexing ( const QString& elementName ) const;
113 bool isHierarchy ( const QString& elementName ) const;
114 bool isMetaData ( const QString& elementName ) const;
115 bool hasMetaData ( const QString& elementName ) const;
116 bool isRoot ( const QString& elementName ) const;
117 bool isDiscardable ( const QString& elementName ) const;
118 DocumentPropertyType getMetaDataFromName ( const QString& elementName ) const;
119
121 const FieldType type,
122 std::vector<std::pair<QString,FieldType> >& fields );
123
124 void addField ( const QString& fieldName, const FieldType type );
125
126 // to deal with special characters
127 bool isSpecialCharacter ( const Lima::LimaChar c );
128 unsigned int getSpecialCharSize ( const Lima::LimaChar c );
129
130 void readPropertiesMetadata (
132
133
134
135 // helper function for test functions on fields (isXXX)
136 bool isFieldType ( const QString& elementName, const FieldType& type ) const;
137 // helper function for debug messages
138 static QString fieldTypeString ( const FieldType type );
139
140
141 // Handler of high level Document events (startIndexingNode, processText..)
142 StructuredXmlDocumentHandler* m_processor;
143 boost::shared_ptr< ContentStructuredDocument > m_currentDocument;
144 bool m_elementPointerHasBeenReturned;
145
146 std::multimap<QString,FieldTypeElement> m_fields;
147 // to get property type from element name
148 std::map<QString,DocumentPropertyType> m_elementTag2DocumentPropertyType;
149 // to get property type from element name
150 std::multimap<QString,DocumentPropertyType> m_elementTagOfPair2DocumentPropertyType;
151 // to deal with special characters (XML entities)
152 std::map<Lima::LimaChar,unsigned int> m_specialCharacterSize;
153
154 bool m_addAbsoluteOffsetToTokens;
155
156 std::shared_ptr<const ShiftFrom> m_shiftFrom;
157};
158
159} // namespace DocumentsReader
160} // namespace Lima
161
162#endif
FieldTypeElement(const FieldType type, const QString attribute)
void setLinguisticXMLDocHandler(StructuredXmlDocumentHandler *handler)
Handler pour les elements de parsing de document structure.
#define DOCUMENTSREADER_EXPORT
static const QString tagSemanticItem[MAX_NODE_TYPE]
FieldType
a type containing the type of an element
NAUTITIA.
QChar LimaChar
Definition LimaString.h:30
STL namespace.
#define MAX_NODE_TYPE