X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=fml%2Ffmltoken.c;h=d76030c200b154ed1c344b255fc42890f093c010;hb=3f6af0f3aa9f114cf562c28f2ed0b954e4c5d659;hp=77f91394826bceac0650c81cd5b2629164deb476;hpb=db6a18e6dc8f76018718a603fadda55c9b036767;p=egate.git diff --git a/fml/fmltoken.c b/fml/fmltoken.c index 77f9139..d76030c 100644 --- a/fml/fmltoken.c +++ b/fml/fmltoken.c @@ -1,8 +1,17 @@ /* * FML interpreter. Europagate, 1995 * - * $Log: fmltoken.c,v $ - * Revision 1.2 1995/02/07 16:09:24 adam + * fmltoken.c,v + * Revision 1.4 1995/02/10 18:15:53 adam + * FML function 'strcmp' implemented. This function can be used to + * test for existence of MARC fields. + * + * Revision 1.3 1995/02/10 15:50:57 adam + * MARC interface implemented. Minor bugs fixed. fmltest can + * be used to format single MARC records. New function '\list' + * implemented. + * + * Revision 1.2 1995/02/07 16:09:24 adam * The \ character is no longer INCLUDED when terminating a token. * Major changes in tokenization routines. Bug fixes in expressions * with lists (fml_sub0). @@ -37,6 +46,11 @@ struct fml_node *fml_tokenize (Fml fml) fml_pr_list (p); printf ("\n"); } + if (look_char != fml->eof_mark) + { + fprintf (stderr, "Ill formed parantheses"); + exit (1); + } return p; } @@ -86,7 +100,6 @@ struct fml_node *fml_group (Fml fml) struct fml_node *sptr = fml_group (fml); if (sptr) { -#if 1 ptr2 = fml_node_alloc (fml); if (!ptr0) ptr0 = ptr2; @@ -94,28 +107,6 @@ struct fml_node *fml_group (Fml fml) ptr1->p[1] = ptr2; ptr2->p[0] = sptr; ptr2->is_atom = 0; - -#else -/* make group of one become an element ... */ - if (sptr->p[1]) - { - ptr2 = fml_node_alloc (fml); - if (!ptr0) - ptr0 = ptr2; - else - ptr1->p[1] = ptr2; - ptr2->p[0] = sptr; - ptr2->is_atom = 0; - } - else - { - ptr2 = sptr; - if (!ptr0) - ptr0 = ptr2; - else - ptr1->p[1] = ptr2; - } -#endif } else { @@ -168,6 +159,38 @@ static void lexer (Fml fml) look_type = '}'; look_char = (*fml->read_func)(); } + else if (look_char == '\'') + { + off = 0; + look_char = (*fml->read_func)(); + while (look_char != fml->eof_mark && look_char != '\'') + { + lex_buf[off++] = look_char; + if (look_char == '\\') + { + look_char = (*fml->read_func)(); + switch (look_char) + { + case 'n': + lex_buf[off-1] = '\n'; + break; + case 't': + lex_buf[off-1] = '\n'; + break; + case '\'': + lex_buf[off-1] = '\''; + break; + default: + lex_buf[off-1] = look_char; + } + } + look_char = (*fml->read_func)(); + } + lex_buf[off] = '\0'; + look_type = 'a'; + if (look_char == '\'') + look_char = (*fml->read_func)(); + } else { off = 0;