Flux de lecture d'un fichier au format XML. More...
#include "xmlio.h"
Public Member Functions | |
IStreamXml () | |
Constructeur. More... | |
void | setTextMode (bool ntm) |
Changement de mode texte. More... | |
bool | init (Encoding::Type st) |
Initialisation du flux. More... | |
bool | isSeparator (wchar_t c) |
Le caractère est-il un séparateur dans le format. More... | |
bool | isSpecialChar (wchar_t c) |
Le caractère est-il un caractère spécial dans le format. More... | |
LexemeType | isKeyword (std::string const &s) |
La chaîne passée est-elle un mot clef du format. More... | |
std::string | lexemeToString (Lexeme const &l) |
Convertit le lexème en chaîne de caractères représentant le lexème. More... | |
bool | isQuoteChar (wchar_t c, bool begin) const |
Le caractère passé est-il le caractère d'ouverture de guillements utilisé par readString(). More... | |
bool | findEntityValue (std::string const &ent, std::string &value) const |
Retourne la valeur de l'entité passée. More... | |
void | addEntity (std::string const &ent, std::string const &value) |
Ajoute une correspondance entité - valeur d'entité. More... | |
void | addHtmlEntities () |
Ajoute des entités standard de HTML. More... | |
void | contractEntities (std::string &s) |
Remplace les entités par leur caractère correspondant. More... | |
Public Member Functions inherited from cogitant::IStream | |
IStream () | |
Constructeur. More... | |
virtual | ~IStream () |
Destructeur. More... | |
virtual void | setStream (std::istream *is, std::string const &sn="") |
Assignation du flux de lecture. More... | |
Line | line () const |
Accès à la ligne courante. More... | |
Line | column () const |
Accès à la colonne courante. More... | |
Encoding::Type | encoding () const |
Type d'encodage du flux. More... | |
std::string const & | streamName () const |
Nom du flux. More... | |
std::istream const * | stream () const |
Accès direct au flux. More... | |
void | setCompressed (unsigned long decosize) |
Passage en mode compressé. More... | |
virtual void | handleCharAfterEscapeChar (wchar_t c, std::string &result) |
Gère le caractère lu juste après un caractère d'échappement. More... | |
virtual void | readString (std::string &s) |
Lecture d'une chaîne jusqu'au prochain séparateur. More... | |
virtual bool | readStringQuote () const |
La précédente lecture de chaine était elle entre guillemets ou pas. More... | |
virtual bool | isEscapeChar (wchar_t c) |
Le caractère est-il le caractère d'échappement. More... | |
virtual bool | isBlankChar (wchar_t c) |
Le caractère doit il être ignoré. More... | |
virtual wchar_t | getChar () |
Lecture d'un caractère sans aucune interprétation. More... | |
virtual wchar_t | nextChar () |
Lecture d'un caractère sans aucune interprétation et passage au caractère suivant. More... | |
virtual void | ignoreChar () |
Passage au caractère suivant dans le flux. More... | |
virtual void | ignoreChars (unsigned long ign) |
Ignorer plusieurs caractères dans le flux. More... | |
void | readBytes (unsigned char *c, unsigned int lg) |
Lecture brute d'octets. More... | |
bool | eof () const |
Fin du flux de lecture atteinte. More... | |
std::streampos | tellg () const |
Position actuelle dans le flux. More... | |
void | memoPosition () |
Mémorisation d'une position. More... | |
void | backToMemoPosition () |
Retour à la position mémorisée. More... | |
virtual void | readLexeme (Lexeme &l) |
Lecture de l'unité lexicale suivante. More... | |
void | addComment (std::string const &b, std::string const &e) |
Ajout d'un couple de chaînes de caractères délimitant un commentaire. More... | |
void | addComment (std::vector< wchar_t > const &b, std::vector< wchar_t > const &e) |
Ajout d'un couple de chaînes de caractères délimitant un commentaire. More... | |
void | deleteComments () |
Supprime tous les couples de commentaires déja définis. More... | |
void | setIgnoreComments (bool ic) |
Ignorer les marques de début/fin de commentaires. More... | |
void | stringAddChar (std::string &s, wchar_t c) const |
Ajoute à une chaîne un caractère en convertissant ce caractère si nécessaire. More... | |
std::string const * | stringConvert (std::string const &s, std::string &result) |
Convertit la chaîne si le mode de conversion d'encodage est EC_STRING. More... | |
void | setEncoding (Encoding::Type nt, bool autoutf8=false) |
Modifie l'encodage du flux. More... | |
void | setReadBom (bool rb) |
Modifie la lecture du BOM. More... | |
void | throwException (Lexeme const &found, Lexeme const &expected1, Lexeme const &expected2=Lexeme(), Lexeme const &expected3=Lexeme(), Lexeme const &expected4=Lexeme(), Lexeme const &expected5=Lexeme()) |
Lever une exception d'analyse syntaxique. More... | |
LexemeType | verifyLexeme (Lexeme const &s, LexemeType l1, wchar_t sc1=0, LexemeType l2=LEX_UNKNOWN, wchar_t sc2=0, LexemeType l3=LEX_UNKNOWN, wchar_t sc3=0, LexemeType l4=LEX_UNKNOWN, wchar_t sc4=0, LexemeType l5=LEX_UNKNOWN, wchar_t sc5=0) |
Vérifie si le lexeme passé fait partie des types de lex§mes donnés. | |
LexemeType | assertLexeme (Lexeme &s, LexemeType l1, wchar_t sc1=0, LexemeType l2=LEX_UNKNOWN, wchar_t sc2=0, LexemeType l3=LEX_UNKNOWN, wchar_t sc3=0, LexemeType l4=LEX_UNKNOWN, wchar_t sc4=0, LexemeType l5=LEX_UNKNOWN, wchar_t sc5=0) |
Lit le lexème suivant qui doit être d'un des types donnés. More... | |
LexemeType | verifyLexeme (Lexeme const &s, LexemeType ltypes[], wchar_t lchars[]) |
Vérifie si le lexème est d'un des types donnés. More... | |
LexemeType | assertLexeme (Lexeme &s, LexemeType ltypes[], wchar_t lchars[]) |
Lit le lexème suivant qui doit être d'un des types donnés. More... | |
Static Public Attributes | |
Lexèmes particuliers XML. | |
static const LexemeType | CDATA =300 |
Static Public Attributes inherited from cogitant::IStream | |
static const LexemeType | LEX_UNKNOWN |
Lexème non défini ou en erreur. More... | |
static const LexemeType | LEX_SPECIALCHAR |
Un caractère spécial dans le format interprété : son code est dans m_char. More... | |
static const LexemeType | LEX_EOF |
La marque de fin de fichier. More... | |
static const LexemeType | LEX_STRING |
Un identificateur : une chaîne dans m_string. More... | |
Additional Inherited Members | |
Public Types inherited from cogitant::IStream | |
typedef unsigned long | Line |
Numérotation des lignes. More... | |
typedef unsigned int | LexemeType |
Type de Lexeme. More... | |
Protected Types inherited from cogitant::IStream | |
enum | EncodingConvert { EC_NONE, EC_CHAR, EC_STRING } |
Conversion d'encodage actuellement utilisée. More... | |
Protected Member Functions inherited from cogitant::IStream | |
unsigned char | streamGet () |
Simulation de la méthode get() sur le flux. More... | |
unsigned char | streamPeek () |
Simulation de la méthode peek() sur le flux. More... | |
wchar_t | streamGetChar () |
Lecture du prochain caractère du flux, en utilisant un décodage Utf16. More... | |
wchar_t | streamPeekChar () |
Accès au prochain caractère du flux, en utilisant un décodage Utf16. More... | |
void | streamRead (unsigned char *buf, unsigned int lg) |
Simulation de la méthode read() sur le flux. More... | |
std::streampos | length () |
Longueur du flux. More... | |
Protected Attributes inherited from cogitant::IStream | |
std::istream * | m_stream |
Flux de lecture. | |
std::string | m_streamname |
Nom du flux. | |
Line | m_line |
Ligne en cours de lecture. | |
Line | m_column |
Position en cours de lecture dans la ligne. More... | |
std::streampos | m_memopos |
Mémorisation d'une position dans le flux. | |
Line | m_memoposline |
Ligne de la position mémorisée. | |
Line | m_memoposcolumn |
Colonne de la position mémorisée. | |
bool | m_readstringquote |
Lecture de guillemets lors de la dernière lecture de chaine. | |
std::vector< std::vector< wchar_t > > | m_commentbegin |
Chaines de début de comentaires. More... | |
std::vector< std::vector< wchar_t > > | m_commentend |
Chaines de fin de commentaire. More... | |
bool | m_ignorecomments |
Ignorer les marques de commentaires. More... | |
std::queue< wchar_t > | m_queuechar |
Caractères lus mais qui doivent être interprétés à nouveau. More... | |
Encoding::Type | m_encoding |
Type d'encodage du flux. More... | |
bool | m_autoutf8 |
Passage automatique d'un encodage Utf-8 à un encodage Latin9. More... | |
bool | m_readbom |
Si défini à vrai (par défaut) tente de lire le BOM en début de flux pour déterminer l'encodage. More... | |
bool | m_compressed |
Compression. More... | |
unsigned char * | m_decobuffer |
Buffer utilisé pour la décompression. More... | |
unsigned long | m_decobuffersize |
Taille du buffer de décompression. More... | |
unsigned long | m_decobufferpos |
Position de lecture dans le buffer de décompression. More... | |
EncodingConvert | m_econvert |
Conversion d'encodage. More... | |
Flux de lecture d'un fichier au format XML.
Cette classe est utilisée pour l'opération de lecture XML (XmlInput) et fournit un accès simplifié aux lexèmes XML présents dans le flux de lecture. Par défaut, les seules entités connues sont celles de XML : gt, lt, quot, amp, apos. En appelant addHtmlEntities(), certaines entités standard de HTML sont ajoutées.
cogitant::XmlInput::IStreamXml::IStreamXml | ( | ) |
Constructeur.
void cogitant::XmlInput::IStreamXml::addEntity | ( | std::string const & | ent, |
std::string const & | value | ||
) |
Ajoute une correspondance entité - valeur d'entité.
void cogitant::XmlInput::IStreamXml::addHtmlEntities | ( | ) |
Ajoute des entités standard de HTML.
void cogitant::XmlInput::IStreamXml::contractEntities | ( | std::string & | s | ) |
Remplace les entités par leur caractère correspondant.
Par exemple < est remplacé par "<".
bool cogitant::XmlInput::IStreamXml::findEntityValue | ( | std::string const & | ent, |
std::string & | value | ||
) | const |
Retourne la valeur de l'entité passée.
Retourne true si trouvé, dans ce cas, value contient la valeur trouvée. Retourne false si introuvable.
|
virtual |
Initialisation du flux.
Cette méthode doit être appelée avant de commencer la lecture dans le flux : elle initialise les compteurs de ligne/colonne.
st | type de flux. La valeur Encoding::DEFAULT utilise une détection automatique de l'encodage du flux. Avec cette valeur, la classe considère que le flux est en Utf-8 jusqu'à ce qu'un caractère incorrect en Utf-8 soit trouvé (init() positionne donc à true m_autoutf8). |
Reimplemented from cogitant::IStream.
|
virtual |
La chaîne passée est-elle un mot clef du format.
Si cette méthode n'est pas redéfinie dans les sous-classes, aucune chaîne n'est considérée comme un mot clef.
Reimplemented from cogitant::IStream.
|
virtual |
Le caractère passé est-il le caractère d'ouverture de guillements utilisé par readString().
c | caractère à tester. |
begin | caractère d'ouverture de guillements si vrai, caractère de fermeture si faux. |
"
et uniquement ce caractère-là. Reimplemented from cogitant::IStream.
|
virtual |
Le caractère est-il un séparateur dans le format.
Quand une chaîne de caractères est lue (que ce soit pour un identificateur, un commentaire ou un mot clef) la lecture s'arrête dès qu'un séparateur est rencontré. Si cette méthode n'est pas redéfinie dans les sous classes, les caractères suivants sont considérés comme des séparateurs : les caractères pour lesquels isBlankChar() retourne true
et ceux pour lesquels isSpecialChar() retourne true
.
Reimplemented from cogitant::IStream.
|
virtual |
Le caractère est-il un caractère spécial dans le format.
Un caractère spécial est un caractère qui correspond à un lexème à lui tout seul (de type Lexeme::LEX_SPECIALCHAR). Si cette méthode n'est pas redéfinie dans les sous-classes, aucun caractère n'est considéré comme un caractère spécial.
Reimplemented from cogitant::IStream.
|
virtual |
Convertit le lexème en chaîne de caractères représentant le lexème.
Évidemment, aucun lexème particulier n'étant défini dans IStream, cette méthode ne peut être utilisée qu'avec des lexèmes LEX_SPECIALCHAR (dans ce cas, la méthode retourne une chaîne formée d'un seul caractère, de code ascii l) ou LEX_STRING. Il est donc nécessaire de redéfinir cette méthode dans les sous classes de IStream pour l'adapter aux lexèmes particuliers.
l | lexeme à traduire. |
Reimplemented from cogitant::IStream.
void cogitant::XmlInput::IStreamXml::setTextMode | ( | bool | ntm | ) |
Changement de mode texte.