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

Classes | Public Types | Public Member Functions | Static Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | List of all members
cogitant::IStream Class Reference

Opérations évoluées sur un flux d'entrée. More...

#include "cogitant/iomisc.h"

Inheritance diagram for cogitant::IStream:
cogitant::OperationBCGCTInput::IStreamBCGCT cogitant::OperationCGIFInput::IStreamCGIF cogitant::OperationRdfsN3Input::IStreamRdfsN3 cogitant::XmlInput::IStreamXml

Classes

class  Lexeme
 Lexème reconnu par la classe IStream. More...
 

Public Types

typedef unsigned long Line
 Numérotation des lignes. More...
 
typedef unsigned int LexemeType
 Type de Lexeme. More...
 

Public Member Functions

 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...
 
virtual bool init (Encoding::Type st=Encoding::DEFAULT)
 Initialisation du flux. More...
 
void setCompressed (unsigned long decosize)
 Passage en mode compressé. More...
 
virtual bool isSeparator (wchar_t c)
 Le caractère est-il un séparateur dans le format. More...
 
virtual bool isSpecialChar (wchar_t c)
 Le caractère est-il un caractère spécial dans le format. More...
 
virtual LexemeType isKeyword (std::string const &s)
 La chaîne passée est-elle un mot clef du format. 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 isQuoteChar (wchar_t c, bool begin) const
 Le caractère passé est-il le caractère d'ouverture de guillements utilisé par readString(). 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...
 
virtual std::string lexemeToString (Lexeme const &l)
 Convertit le lexème en chaîne de caractères représentant le lexème. 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

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

Protected Types

enum  EncodingConvert { EC_NONE, EC_CHAR, EC_STRING }
 Conversion d'encodage actuellement utilisée. More...
 

Protected Member Functions

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

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

Opérations évoluées sur un flux d'entrée.

Cette classe offre des fonctionnalités de lecture sur un flux qui permettent de lire ce flux de façon plus simple que dans le cas de l'utilisation de ifstream.

Member Typedef Documentation

◆ LexemeType

typedef unsigned int cogitant::IStream::LexemeType

Type de Lexeme.

D'autres types de lexèmes peuvent être définis, par exemple pour les mots-clefs du langage analysé. Ils doivent être définis par des constantes strictement supérieures à STRING.

◆ Line

typedef unsigned long cogitant::IStream::Line

Numérotation des lignes.

Member Enumeration Documentation

◆ EncodingConvert

Conversion d'encodage actuellement utilisée.

Enumerator
EC_NONE 

Pas de conversion.

Utf8 -> Utf8 ; Latin9 -> Latin9.

EC_CHAR 

Conversion caractère par caractère.

Utf16 -> Utf8/Latin9.

EC_STRING 

Conversion de chaîne (après lecture complète de la chaîne).

Utf8 -> Latin9 ; Latin9 -> Utf8.

Constructor & Destructor Documentation

◆ IStream()

cogitant::IStream::IStream ( )

Constructeur.

◆ ~IStream()

virtual cogitant::IStream::~IStream ( )
virtual

Destructeur.

Member Function Documentation

◆ addComment() [1/2]

void cogitant::IStream::addComment ( std::string const &  b,
std::string const &  e 
)

Ajout d'un couple de chaînes de caractères délimitant un commentaire.

Parameters
bdébut de la zone de commentaires.
efin de la zone.

◆ addComment() [2/2]

void cogitant::IStream::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.

Parameters
bdébut de la zone de commentaires.
efin de la zone.

◆ assertLexeme() [1/2]

LexemeType cogitant::IStream::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 
)
inline

Lit le lexème suivant qui doit être d'un des types donnés.

Si le lexème suivant n'est pas l1, l2, l3 ou l4 ou l5, appelle throwException(). Les valeurs de li égales à LEX_UNKNOWN ne sont pas prises en compte. Pour des raisons de performance (car elle est appelée très souvent), cette méthode prend comme paramètre des couples LexemeType, wchar_t plutôt que des Lexeme, ce qui interdit son utilisation pour imposer un lexeme LEX_STRING particulier.

Parameters
s(R) lexeme lu.
l1lexeme suivant possible (type).
sc1lexeme suivant possible (caractère spécial, uniquement utilisé si l1 == LEX_SPECIALCHAR).
l2lexeme suivant possible (type).
sc2lexeme suivant possible (caractère spécial, uniquement utilisé si l2 == LEX_SPECIALCHAR).
l3lexeme suivant possible (type).
sc3lexeme suivant possible (caractère spécial, uniquement utilisé si l3 == LEX_SPECIALCHAR).
l4lexeme suivant possible (type).
sc4lexeme suivant possible (caractère spécial, uniquement utilisé si l4 == LEX_SPECIALCHAR).
l5lexeme suivant possible (type).
sc5lexeme suivant possible (caractère spécial, uniquement utilisé si l5 == LEX_SPECIALCHAR).

◆ assertLexeme() [2/2]

LexemeType cogitant::IStream::assertLexeme ( Lexeme s,
LexemeType  ltypes[],
wchar_t  lchars[] 
)
inline

Lit le lexème suivant qui doit être d'un des types donnés.

Parameters
s(R) lexeme lu.
ltypestableau de types de lexèmes autorisés (terminé par LEX_UNKNOWN).
lcharstableau de caractères spéciaux autorisés, associés aux LEX_SPECIALCHAR de types.

◆ backToMemoPosition()

void cogitant::IStream::backToMemoPosition ( )

Retour à la position mémorisée.

◆ column()

Line cogitant::IStream::column ( ) const

Accès à la colonne courante.

◆ deleteComments()

void cogitant::IStream::deleteComments ( )

Supprime tous les couples de commentaires déja définis.

◆ encoding()

Encoding::Type cogitant::IStream::encoding ( ) const

Type d'encodage du flux.

◆ eof()

bool cogitant::IStream::eof ( ) const

Fin du flux de lecture atteinte.

◆ getChar()

virtual wchar_t cogitant::IStream::getChar ( )
virtual

Lecture d'un caractère sans aucune interprétation.

Le caractère est retourné mais n'est pas passé (une autre lecture retourne le même caractère).

Returns
le code Unicode du caractère lu.

◆ handleCharAfterEscapeChar()

virtual void cogitant::IStream::handleCharAfterEscapeChar ( wchar_t  c,
std::string &  result 
)
virtual

Gère le caractère lu juste après un caractère d'échappement.

Par défaut, cette méthode se contente d'ajouter à result le caractère c lu, tel quel, mais la méthode peut être redéfinie.

Reimplemented in cogitant::OperationRdfsN3Input::IStreamRdfsN3.

◆ ignoreChar()

virtual void cogitant::IStream::ignoreChar ( )
virtual

Passage au caractère suivant dans le flux.

◆ ignoreChars()

virtual void cogitant::IStream::ignoreChars ( unsigned long  ign)
virtual

Ignorer plusieurs caractères dans le flux.

◆ init()

virtual bool cogitant::IStream::init ( Encoding::Type  st = Encoding::DEFAULT)
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 in cogitant::OperationRdfsN3Input::IStreamRdfsN3, and cogitant::XmlInput::IStreamXml.

◆ isBlankChar()

virtual bool cogitant::IStream::isBlankChar ( wchar_t  c)
virtual

Le caractère doit il être ignoré.

En dehors des unités lexicales, certains caractères sont ignorés, si cette méthode n'est pas définie, il s'agit de espace \r \n \t.

◆ isEscapeChar()

virtual bool cogitant::IStream::isEscapeChar ( wchar_t  c)
virtual

Le caractère est-il le caractère d'échappement.

Si cette méthode n'est pas redéfinie dans les sous-classes, il n'y a aucun caractère d'échappement et tous les caractère sont lus sans interprétation.

Reimplemented in cogitant::OperationRdfsN3Input::IStreamRdfsN3, cogitant::OperationBCGCTInput::IStreamBCGCT, and cogitant::OperationCGIFInput::IStreamCGIF.

◆ isKeyword()

virtual LexemeType cogitant::IStream::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 in cogitant::OperationRdfsN3Input::IStreamRdfsN3, cogitant::XmlInput::IStreamXml, and cogitant::OperationBCGCTInput::IStreamBCGCT.

◆ isQuoteChar()

virtual bool cogitant::IStream::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 in cogitant::XmlInput::IStreamXml.

◆ isSeparator()

virtual bool cogitant::IStream::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 in cogitant::XmlInput::IStreamXml.

◆ isSpecialChar()

virtual bool cogitant::IStream::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 in cogitant::OperationRdfsN3Input::IStreamRdfsN3, cogitant::XmlInput::IStreamXml, cogitant::OperationBCGCTInput::IStreamBCGCT, and cogitant::OperationCGIFInput::IStreamCGIF.

◆ length()

std::streampos cogitant::IStream::length ( )
protected

Longueur du flux.

◆ lexemeToString()

virtual std::string cogitant::IStream::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 in cogitant::OperationRdfsN3Input::IStreamRdfsN3, cogitant::XmlInput::IStreamXml, and cogitant::OperationBCGCTInput::IStreamBCGCT.

◆ line()

Line cogitant::IStream::line ( ) const

Accès à la ligne courante.

◆ memoPosition()

void cogitant::IStream::memoPosition ( )

Mémorisation d'une position.

◆ nextChar()

virtual wchar_t cogitant::IStream::nextChar ( )
virtual

Lecture d'un caractère sans aucune interprétation et passage au caractère suivant.

Idem getChar() mais le caractère lu est passé.

◆ readBytes()

void cogitant::IStream::readBytes ( unsigned char *  c,
unsigned int  lg 
)

Lecture brute d'octets.

Parameters
crepère la zone dans lequel les caractères lus seront stockés.
lgnombre de caractères à lire.

◆ readLexeme()

virtual void cogitant::IStream::readLexeme ( Lexeme l)
virtual

Lecture de l'unité lexicale suivante.

Parameters
l(sortie) lexème lu.

◆ readString()

virtual void cogitant::IStream::readString ( std::string &  s)
virtual

Lecture d'une chaîne jusqu'au prochain séparateur.

Cette méthode n'interprète pas les mots-clefs mais lit le flux d'entrée et retourne une chaîne dans laquelle les caractères d'échappement ont été interprétés (mais pas d'éventuels guillemets).

Parameters
s(R) chaîne lue.

◆ readStringQuote()

virtual bool cogitant::IStream::readStringQuote ( ) const
virtual

La précédente lecture de chaine était elle entre guillemets ou pas.

Returns
Cette méthode peut être appelée après readString() pour déterminer si la chaîne retournée par readString() a été lue entre guillemets (true) ou pas (false).

◆ setCompressed()

void cogitant::IStream::setCompressed ( unsigned long  decosize)

Passage en mode compressé.

Lors du passage ne mode compressé, le flux est lu totalement en mémoire, et il est décompressé dans un buffer. Les lectures suivantes se font donc en mémoire et sont rapides, mais l'occupation mémoire est importante. Il serait bien de prévoir une deuxième méthode de passage en mode compressé qui ne décompresse pas en mémoire, mais décompresse au fur et à mesure des lectures, toutefois.

Parameters
decosizeTaille du buffer devant contenir la zone décompressée. Ce buffer doit être de taille suffisante pour contenir le contenu décompressé du flux.
Warning
Cette méthode provoque une erreur si la libz n'est pas trouvée.

◆ setEncoding()

void cogitant::IStream::setEncoding ( Encoding::Type  nt,
bool  autoutf8 = false 
)

Modifie l'encodage du flux.

Parameters
ntType d'encodage.
autoutf8si true considère le flux comme étant de l'utf-8 jusqu'à ce qu'un caractère invalide en utf-8 soit trouvé, ce qui a alors pour effet de passer en Latin9.

◆ setIgnoreComments()

void cogitant::IStream::setIgnoreComments ( bool  ic)

Ignorer les marques de début/fin de commentaires.

Si les marques sont ignorées, elles sont lues comme des lexemes comme les autres.

◆ setReadBom()

void cogitant::IStream::setReadBom ( bool  rb)

Modifie la lecture du BOM.

Par défaut le BOM est lu au début du fichier, et, normalement, si aucun BOM n'est trouvé, cela est sans conséquences. Il est possible d'appeler cette méthode avant init() afin de ne pas lire le BOM lors de l'initialisation du flux. Pour cela, il faut passer false comme paramètre.

◆ setStream()

virtual void cogitant::IStream::setStream ( std::istream *  is,
std::string const &  sn = "" 
)
virtual

Assignation du flux de lecture.

Parameters
ispointeur sur le flux de lecture (précédemment ouvert) utilisé par l'instance.
snnom donné au flux (habituellement le nom du fichier) utilisé dans la levée d'exceptions.

◆ stream()

std::istream const* cogitant::IStream::stream ( ) const

Accès direct au flux.

◆ streamGet()

unsigned char cogitant::IStream::streamGet ( )
protected

Simulation de la méthode get() sur le flux.

Returns
l'octet suivant.
Warning
retourne un octet et non pas un caractère, ce qui peut être différent dans le cas d'un flux dans lequel les caractères sont codés sur plus d'un octet.

◆ streamGetChar()

wchar_t cogitant::IStream::streamGetChar ( )
protected

Lecture du prochain caractère du flux, en utilisant un décodage Utf16.

Returns
le caractère suivant, qui peut, selon l'encodage demander la lecture de deux octets.

◆ streamName()

std::string const& cogitant::IStream::streamName ( ) const

Nom du flux.

◆ streamPeek()

unsigned char cogitant::IStream::streamPeek ( )
protected

Simulation de la méthode peek() sur le flux.

Returns
l'octet suivant.
Warning
retourne un octet et non pas un caractère, ce qui peut être différent dans le cas d'un flux dans lequel les caractères sont codés sur plus d'un octet.

◆ streamPeekChar()

wchar_t cogitant::IStream::streamPeekChar ( )
protected

Accès au prochain caractère du flux, en utilisant un décodage Utf16.

Returns
le caractère suivant, qui peut, selon l'encodage demander la lecture de deux octets.

◆ streamRead()

void cogitant::IStream::streamRead ( unsigned char *  buf,
unsigned int  lg 
)
protected

Simulation de la méthode read() sur le flux.

Les octets lus sont stockés dans buf.

◆ stringAddChar()

void cogitant::IStream::stringAddChar ( std::string &  s,
wchar_t  c 
) const

Ajoute à une chaîne un caractère en convertissant ce caractère si nécessaire.

Cette méthode est publique afin de permettre, à partir d'une autre classe, une lecture dans un flux caractère par caractère par nextChar(). Or nextChar() n'effectue pas de conversion d'encodage (contrairement à readLexeme() quand il rencontre une chaîne), il est donc nécessaire d'offrir une méthode utilisant la même méthode de conversion que celle utilissée dans readLexeme().

◆ stringConvert()

std::string const* cogitant::IStream::stringConvert ( std::string const &  s,
std::string &  result 
)

Convertit la chaîne si le mode de conversion d'encodage est EC_STRING.

Parameters
schaîne à convertir.
result(R) chaîne convertie, uniquement dans le cas où la chaîne s a dû être convertie. result n'est pas définie (pour des raisons de performance) si la méthode retourne false .
Returns
Un pointeur sur la chaîne convertie. Il s'agit d'un pointeur sur s si aucune conversion n'était nécessaire et un pointeur sur result si une conversion a été effectuée. Cette méthode est publique afin de permettre, à partir d'une autre classe, une lecture dans un flux caractère par caractère par nextChar(). Or nextChar() n'effectue pas de conversion d'encodage (contrairement à readLexeme() quand il rencontre une chaîne), il est donc nécessaire d'offrir une méthode utilisant la même méthode de conversion que celle utilissée dans readLexeme(). Cette méthode se charge aussi de détecter, lors d'une lecture Utf-8 avec détection automatique, que les caractères lus sont effectivement en Utf-8. Si ce n'est pas le cas, elle passe le flux en Latin9.

◆ tellg()

std::streampos cogitant::IStream::tellg ( ) const

Position actuelle dans le flux.

◆ throwException()

void cogitant::IStream::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.

Lève une exception d'analyse syntaxique de type ExceptionInputLexeme sur la ligne en cours avec le message "xxx (ou xxx ou xxx) attendu, mais xxx trouvé.". Le code de l'exception est l'identificateur du (premier) lexème attendu.

◆ verifyLexeme()

LexemeType cogitant::IStream::verifyLexeme ( Lexeme const &  s,
LexemeType  ltypes[],
wchar_t  lchars[] 
)

Vérifie si le lexème est d'un des types donnés.

Parameters
slexème.
ltypestableau de types de lexèmes autorisés (terminé par LEX_UNKNOWN).
lcharstableau de caractères spéciaux autorisés, associés aux LEX_SPECIALCHAR de types.

Member Data Documentation

◆ LEX_EOF

const LexemeType cogitant::IStream::LEX_EOF
static

La marque de fin de fichier.

◆ LEX_SPECIALCHAR

const LexemeType cogitant::IStream::LEX_SPECIALCHAR
static

Un caractère spécial dans le format interprété : son code est dans m_char.

Les caractères reconnus comme lexèmes sont différents selon les formats, il peut s'agir par exemple de "<code>:</code>", "<code>;</code>", ou "<code>{</code>".

See also
IStream::isSpecialChar().

◆ LEX_STRING

const LexemeType cogitant::IStream::LEX_STRING
static

Un identificateur : une chaîne dans m_string.

◆ LEX_UNKNOWN

const LexemeType cogitant::IStream::LEX_UNKNOWN
static

Lexème non défini ou en erreur.

◆ m_autoutf8

bool cogitant::IStream::m_autoutf8
protected

Passage automatique d'un encodage Utf-8 à un encodage Latin9.

Si cet attribut est défini à true, le flux est lu en Utf-8 (et donc m_encoding doit être égal à Encoding::UTF8) jusqu'à ce qu'un caractère non valide soit lu en Utf-8. Le flux passe alors en Latin9.

◆ m_column

Line cogitant::IStream::m_column
protected

Position en cours de lecture dans la ligne.

Les tabulations ne comptent que pour un caractère.

◆ m_commentbegin

std::vector< std::vector<wchar_t> > cogitant::IStream::m_commentbegin
protected

Chaines de début de comentaires.

Ce qui figure dans un commentaire n'est pas interprété et passé par readLexeme().

◆ m_commentend

std::vector< std::vector<wchar_t> > cogitant::IStream::m_commentend
protected

Chaines de fin de commentaire.

La ième fin de commentaire ne termine que le ième début de commentaire. Si un commentaire peut se terminer de différentes façons, il doit figurer plusieurs fois dans ces deux tables, avec, à chaque fois une fin différente.

◆ m_compressed

bool cogitant::IStream::m_compressed
protected

Compression.

◆ m_decobuffer

unsigned char* cogitant::IStream::m_decobuffer
protected

Buffer utilisé pour la décompression.

◆ m_decobufferpos

unsigned long cogitant::IStream::m_decobufferpos
protected

Position de lecture dans le buffer de décompression.

◆ m_decobuffersize

unsigned long cogitant::IStream::m_decobuffersize
protected

Taille du buffer de décompression.

◆ m_econvert

EncodingConvert cogitant::IStream::m_econvert
protected

Conversion d'encodage.

◆ m_encoding

Encoding::Type cogitant::IStream::m_encoding
protected

Type d'encodage du flux.

◆ m_ignorecomments

bool cogitant::IStream::m_ignorecomments
protected

Ignorer les marques de commentaires.

◆ m_queuechar

std::queue<wchar_t> cogitant::IStream::m_queuechar
protected

Caractères lus mais qui doivent être interprétés à nouveau.

◆ m_readbom

bool cogitant::IStream::m_readbom
protected

Si défini à vrai (par défaut) tente de lire le BOM en début de flux pour déterminer l'encodage.