Main Page | Class List | File List | Class Members | File Members | Related Pages

ut_charset.c File Reference

Functions which parse the charset.dat file. More...

#include <stdlib.h>
#include <stdio.h>
#include <endian.h>
#include <byteswap.h>
#include <string.h>
#include "utrac.h"
#include "ut_charset.h"
#include "debug.h"

Include dependency graph for ut_charset.c:

Include dependency graph

Go to the source code of this file.

Classes

struct  UtCharmapLink
 Link used to store temporarily UtCharset structures in a linked list. More...

Typedefs

typedef UtCharmapLink UtCharmapLink
 Link used to store temporarily UtCharset structures in a linked list.

Functions

bool is_blank (char c)
 test si le caractère ASCII (sur un octet) est un espace ou une tabulation
bool is_eol (char c)
 test si le caractère ASCII (sur un octet) est une fin de ligne
bool is_eol_c (char c)
 test si le caractère ASCII (sur un octet) est une fin de ligne ou un début de commentaire
UtCode expend_lang_sys (UtLangSys *lang_sys)
 Expend size of an UtLangSys dynamic array.
UtCode parse_string_line (char **scan_in, char **dst)
 Copy a string from file buffer.
UtCode parse_lang_sys_def_line (char **scan_in, UtLangSys *lang_sys)
 Parse parameter of a "DefineLanguage" or "DefineSystem" line.
UtCode parse_charmap_line (char **scan_in, UtCharmapLink **current_link)
 Parse parameter of a "Charmap"line.
UtCode parse_lang_sys_line (char **scan_in, UtLangSys *lang_sys, char *lang_sys_coef)
 Parse parameter of a "Language" or "System" line.
UtCode parse_charmap_entry (char **scan_in, UtCharset *charset)
 Parse charmap entry.
bool streq (const char *src, char **cmp)
 Compare a null-ended string with a non-null-ended string.
UtCode ut_print_charsets ()
UtCode ut_load_charsets ()
 Loads and parses file charset.dat.

Variables

const char * charmap_keyword = "Charmap:"
 Keywords used in file charset.dat.
const char * alias_keyword = "Alias:"
const char * common_name_keyword = "CommonName:"
const char * comment_keyword = "Comment:"
const char * language_keyword = "Language:"
const char * system_keyword = "System:"
const char * language_def_keyword = "DefineLanguage:"
const char * system_def_keyword = "DefineSystem:"
const char * SCRIPT_NAME [] = { "LATIN", "CYRILLIC", "ARABIC", "GREEK", "HEBREW", "THAI", NULL}
 Alphabet names that can be recognized in file charset.dat.


Detailed Description

Functions which parse the charset.dat file.

Author:
Antoine Calando (antoine@alliancemca.net)

Todo:
EC les fonction inline be fonctionne qu'avec gcc !! il faudrait mettre une macro UT_INLINE dans un header. AC ???

Definition in file ut_charset.c.


Typedef Documentation

typedef struct UtCharmapLink UtCharmapLink
 

Link used to store temporarily UtCharset structures in a linked list.

Note:
EC Une définition de structure doit se trouver dans un header

AC Elle n'est nécessaire qu'ici, ça permet d'alléger les .h

Referenced by ut_load_charsets().


Function Documentation

UtCode expend_lang_sys UtLangSys lang_sys  )  [static]
 

Expend size of an UtLangSys dynamic array.

Bug:
EC Il n'y a pas de test du retour de realloc ! La fonction pouvant planter (realloc), elle doit renvoyer un code d'erreur. AC corrigé.

Definition at line 116 of file ut_charset.c.

References UtLangSys::code, UtLangSys::n_max, and UtLangSys::name.

Referenced by parse_lang_sys_def_line().

bool is_blank char  c  )  [inline, static]
 

test si le caractère ASCII (sur un octet) est un espace ou une tabulation

Note:
EC pourquoi ne pas utiliser isblank à la place de is_blank ? (a cause du char ?)

AC parce que isblank est spécifique à la glibc! (réponse trouvé à posteriori :)

Definition at line 73 of file ut_charset.c.

Referenced by parse_charmap_entry(), parse_lang_sys_def_line(), parse_lang_sys_line(), parse_string_line(), and ut_load_charsets().

bool is_eol char  c  )  [inline, static]
 

test si le caractère ASCII (sur un octet) est une fin de ligne

Note:
EC On a réservé des octets de fin lors du malloc pour charger le fichier texte, ces octets devaient contenir la dernière fin de ligne si elle n'est pas présente et le caractère 0 final (une ligne devrait toujours ce finir par la combinaison de fin de ligne. De plus, un n'est pas forcemment une fin de ligne, cela peut être un saut de ligne dans un champ... Dans quels cas est utilsée cette fonction ? Ne faudrait-il pas plusieurs fonctions ?

AC Ok pour la première remarque (un '
' a été rajouté à la fin du fichier dans ut_load_file() et le test sur 0 a été retiré ici). Sinon le '' est forcement une fin de ligne car il s'agit ici du fichier contenant les infos charsets qui peut au pire être au format CR/LF/CRLF (selon système) mais rien d'autre.

Definition at line 89 of file ut_charset.c.

Referenced by ut_load_charsets().

bool is_eol_c char  c  )  [inline, static]
 

test si le caractère ASCII (sur un octet) est une fin de ligne ou un début de commentaire

Note:
EC pourquoi ne pas utiliser is_eol ?

AC pour le test sur '#' (un appel, même inline, embrouillerait le source)

Definition at line 96 of file ut_charset.c.

Referenced by parse_lang_sys_def_line(), parse_lang_sys_line(), and parse_string_line().

UtCode parse_string_line char **  scan_in,
char **  dst
[static]
 

Copy a string from file buffer.

Bug:
EC Dans le cas ou la premiere ligne d'un buffer lu en mémoire ne contienne pas de données pertinantes (ligne vide, ligne d'espace, etc.), la fin de ligne serait touvée, puis lors de la boucle de recherche du dernier caractère espace ou tabulation, on remonterait à *(buffer-1) ce qui entrainerait une segmentation fault (lors de la commande ou lors du free). AC La fonction n'est appelé que sur une ligne débutant par une commande, donc de la mémoire lisible.

EC le retour de strndup() n'est pas testé ! AC pfff... pour un dizaine d'octet max... c'est de la diptèrophilie...

Definition at line 145 of file ut_charset.c.

References is_blank(), and is_eol_c().

Referenced by parse_charmap_line(), parse_lang_sys_def_line(), and ut_load_charsets().

Here is the call graph for this function:

UtCode ut_load_charsets  ) 
 

Loads and parses file charset.dat.

This function loads and parses file charset.dat containing all informations about charset in a UtCharset array in UtSession::charset.

Returns:
UT_CODE on success, error code otherwise

Todo:
documentation of the charset.dat file

Definition at line 472 of file ut_charset.c.

References UtCharset::alias, UtCharset::char_type, charmap_keyword, UtCharmapLink::charset, UtSession::charset, UtCharset::comment, UtCharset::common_name, UtSession::error_string, is_blank(), is_eol(), UtSession::language, UtCharset::language, UtCharset::name, UtSession::nb_charsets, UtCharmapLink::next, parse_charmap_entry(), parse_charmap_line(), parse_lang_sys_def_line(), parse_lang_sys_line(), parse_string_line(), streq(), UtSession::system, UtCharset::system, UtCharset::type, UtCharset::unicode, UT_ERROR_STRING_SIZE, ut_load_charset_file(), and UtCharmapLink.

Referenced by ut_init_noalloc().

Here is the call graph for this function:


Generated on Fri Feb 25 18:30:16 2005 for Utrac by  doxygen 1.3.9