process_seg() naprawione, 'lem -s kor -I kor' nie zawiesza sie

git-svn-id: svn://atos.wmid.amu.edu.pl/utt@46 e293616e-ec6a-49c2-aa92-f4a8b91c5d16
This commit is contained in:
obrebski 2008-05-08 13:42:37 +00:00
parent adb4c8d65b
commit 0e3df7e06a
4 changed files with 57 additions and 49 deletions

View File

@ -14,5 +14,8 @@ WAZNE:
* Zadania zwiazane z rozbudowa ser (src/ser/TODO).
* Nowa funkcjonalność dla kot? con? - każde zdanie w nowym wierszu
* opcja info w dgp powinna miec domyslna wartosc d lub h
* podczas tworzenia dystrybucji pojawiaja sie komunikaty:
find: /home/to/work/utt/lang/dist/tarball/utt-0.9.2/share/utt/pl_PL.UTF-8/.svn: Nie ma takiego pliku ani katalogu
find: /home/to/work/utt/lang/dist/tarball/utt-0.9.2/share/utt/pl_PL.ISO-8859-2/.svn: Nie ma takiego pliku ani katalogu
* przyspieszyć process_seg() -> obliczanie prefiksów pól z opcji -s i -S raz na poczatku programu, a nie w kolko

View File

@ -14,8 +14,8 @@ FILE* failedf=stdout;
bool copy_processed=0;
bool one_field=false;
bool one_line=false;
char output_field_prefix[32];
char input_field_prefix[32];
char output_field_prefix[FIELD_PREFIX_MAXLEN];
char input_field_prefix[FIELD_PREFIX_MAXLEN];
extern int argc;
extern char **argv;
@ -34,40 +34,6 @@ int expand_path(char* inpath, char* outpath)
/*
parameters:
-name - field name, long or short
+prefix - field name with ':' appended if long name
return value:
1 if correct field name, 0 otherwise
examples:
name prefix r.v.
lem lem: 1
@ @ 1
:: 'undef' 0
a,b 'undef' 0
*/
int fieldprefix(char *name, char *prefix)
{
if (ispunct(name[0]) && name[1]=='\0') // correct short name
{
strcpy(prefix, name); return 1;
}
int i=0;
while(name[i]!='\0' && isalnum(name[i])) ++i;
if(name[i]=='\0' && i>0) // correct long name
{
sprintf(prefix,"%s:",name); return 1;
}
// incorrect
return 0;
}
void set_program_name(char program_name[], char* argv0)
{
if (char* p_name = strrchr(argv0, '/'))

View File

@ -23,6 +23,7 @@
#define INFIELD_SEP ':'
#define MAXAUX 16
#define FIELD_SEP " \t\n"
#define FIELD_PREFIX_MAXLEN 32
// katalogi z plikami konfiguracyjnymi
@ -66,14 +67,11 @@ extern void process_config_files(gengetopt_args_info* args, char* argv0);
extern int expand_path(char* inpath, char* outpath);
extern int fieldprefix(char *name, char *prefix);
/**************************************************
* problems with casing */
// sprawdzenie wielkosci liter
// warto¶æ zwracana:
// 0 - wszystkie ma³e litery
// warto¶æ zwracana:
// 0 - wszystkie ma³e litery
// 1 - pierwsza wielka, reszta male
// 2 - wszystkie wielkie
// 3 - inne
@ -104,9 +102,9 @@ inline void tolowers(char* s, char* d)
// przepisuje s do d
// nadajac wielko¶æ liter zgodnie z warto¶ci± casing
// casing - warto¶æ zwracana przez casing()
// je¶li casing==3 przepisuje bez zmian (za ma³o informacji)
// nadajac wielko¶æ liter zgodnie z warto¶ci± casing
// casing - warto¶æ zwracana przez casing()
// je¶li casing==3 przepisuje bez zmian (za ma³o informacji)
inline void restorecasing(char *s, char *d, int casing)
{
switch(casing)
@ -185,10 +183,44 @@ inline int getfield(char* seg, const char* pref, char* val)
}
/*
parameters:
-name - field name, long or short
+prefix - field name with ':' appended if long name
return value:
1 if correct field name, 0 otherwise
examples:
name prefix r.v.
lem lem: 1
@ @ 1
:: 'undef' 0
a,b 'undef' 0
*/
inline
int fieldprefix(char *name, char *prefix)
{
if (ispunct(name[0]) && name[1]=='\0') // correct short name
{
strcpy(prefix, name); return 1;
}
int i=0;
while(name[i]!='\0' && isalnum(name[i])) ++i;
if(name[i]=='\0' && i>0) // correct long name
{
sprintf(prefix,"%s:",name); return 1;
}
// incorrect
return 0;
}
inline
bool process_seg(char* seg, gengetopt_args_info& args)
{
char buf[256];
char pref[FIELD_PREFIX_MAXLEN];
bool ret = !args.process_given;
if(args.process_given)
{
@ -204,11 +236,17 @@ bool process_seg(char* seg, gengetopt_args_info& args)
if(ret==false) return false;
for(int i=0; i<args.select_given; ++i)
if(! getfield(seg,args.select_arg[i],buf))
return false;
{
fieldprefix(args.select_arg[i],pref); // !!! ŁATKA - ZOPTYMALIZOWAĆ !!!
if(! getfield(seg,pref,buf))
return false;
}
for(int i=0; i<args.ignore_given; ++i)
if(getfield(seg,args.ignore_arg[i],buf))
return false;
{
fieldprefix(args.ignore_arg[i],pref); // !!! ŁATKA - ZOPTYMALIZOWAĆ !!!
if(getfield(seg,pref,buf))
return false;
}
if(args.input_field_given & !getfield(seg,input_field_prefix,buf))
return false;

View File

@ -50,6 +50,7 @@ int main(int argc, char** argv) {
tab.clear();
getfield(line,input_field_prefix,form);
if (form==NULL) continue;//BZDURA
lem->ana(form, tab);