Quick links: Tutorial - Examples - Files - Symbols.
Classes: Hierarchy - Index - List - Members.
Namespaces: Index - base - cs - display.

Public Member Functions | List of all members
cogitant::XmlInput::IStreamXml Class Reference

Flux de lecture d'un fichier au format XML. More...

#include "xmlio.h"

Inheritance diagram for cogitant::XmlInput::IStreamXml:
cogitant::IStream

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...
 

Detailed Description

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.

Constructor & Destructor Documentation

cogitant::XmlInput::IStreamXml::IStreamXml ( )

Constructeur.

Member Function Documentation

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.

bool cogitant::XmlInput::IStreamXml::init ( Encoding::Type  st)
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.

Parameters
sttype 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).
Returns
true si le flux a pu être correctement initialisé, false sinon (sans doute que le fichier est inexistant ou que le flux passé à setStream() n'est pas ouvert).

Reimplemented from cogitant::IStream.

LexemeType cogitant::XmlInput::IStreamXml::isKeyword ( std::string const &  s)
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.

Returns
LEX_UNKNOWN si s n'est pas un mot clef, l'identificateur du mot clef sinon.

Reimplemented from cogitant::IStream.

bool cogitant::XmlInput::IStreamXml::isQuoteChar ( wchar_t  c,
bool  begin 
) const
virtual

Le caractère passé est-il le caractère d'ouverture de guillements utilisé par readString().

Parameters
ccaractère à tester.
begincaractère d'ouverture de guillements si vrai, caractère de fermeture si faux.
Returns
true ssi c est le caractère d'ouverture de guillemets. Par défaut " et uniquement ce caractère-là.

Reimplemented from cogitant::IStream.

bool cogitant::XmlInput::IStreamXml::isSeparator ( wchar_t  c)
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.

Warning
seuls les caractères retournés par getChar() peuvent être considérés comme des séparateurs. Or, dans un flux UTF-8, getChar() lit octet par octet.

Reimplemented from cogitant::IStream.

bool cogitant::XmlInput::IStreamXml::isSpecialChar ( wchar_t  c)
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.

Warning
seuls les caractères retournés par getChar() peuvent être considérés comme des spéciaux. Or, dans un flux UTF-8, getChar() lit octet par octet.

Reimplemented from cogitant::IStream.

std::string cogitant::XmlInput::IStreamXml::lexemeToString ( Lexeme const &  l)
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.

Parameters
llexeme à traduire.

Reimplemented from cogitant::IStream.

void cogitant::XmlInput::IStreamXml::setTextMode ( bool  ntm)

Changement de mode texte.