/******************************************************************/ /* Copyright (C) 2000, HELM Team */ /* */ /* This file is part of HELM, an Hypertextual, Electronic */ /* Library of Mathematics, developed at the Computer Science */ /* Department, University of Bologna, Italy. */ /* */ /* HELM is free software; you can redistribute it and/or */ /* modify it under the terms of the GNU General Public License */ /* as published by the Free Software Foundation; either version */ /* 2 of the License, or (at your option) any later version. */ /* */ /* HELM is distributed in the hope that it will be useful, */ /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ /* GNU General Public License for more details. */ /* */ /* You should have received a copy of the GNU General Public */ /* License along with HELM; if not, write to the Free Software */ /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, */ /* MA 02111-1307, USA. */ /* */ /* For details, see the HELM World-Wide-Web page, */ /* http://cs.unibo.it/helm/. */ /******************************************************************/ /***************************************************************/ /* META_LEXAN */ /* Automatic Metadata Extractor */ /* First draft 11/12/2001, by Andrea Asperti */ /* more bugs added by domenico lordi on mon 12/17/2001 */ /***************************************************************/ /***************************************************************/ /* 1. Inclusion of header files. */ /***************************************************************/ %{ #include #include #include #include "sthandler.h" %} /***************************************************************/ /* 2. Constants and Variables Definitions */ /***************************************************************/ %{ #define NOWHERE 0 #define CONST 1 #define MUTIND 2 #define MUTCONSTRUCT 3 #define SORT 4 #define INBODY 0 #define MAINHYP 1 #define INHYP 2 #define INCONCL 3 #define MAINCONCL 4 #define INTYPE 5 #define NOTFOUND 6 #define HERE 0 #define AFTER 1 int where = NOWHERE; int found = NOTFOUND; int position = INBODY; int first_child = HERE; int skip = 0; // boolean to skip the insertion of a URI int no_open_source = 0; int spine_depth = 0; int depth = 0; int tmp_n; char sep = '"'; char *xpointer = "#xpointer(1/"; char *uri; char *tmp; void search(char *uri, int first_child, int position, int depth); %} /***************************************************************/ /* 3. Regular definitions. */ /***************************************************************/ uri [^"]+ digits [0-9]+ value [^"]+ /***************************************************************/ /* 4. Rules. */ /***************************************************************/ %% "]*">"(" "|\n)*""(" "|\n)*"" | "" { if (position == INHYP) { no_open_source--; if (no_open_source == 0) { position = MAINHYP; depth++; first_child = HERE; } } else if (position == MAINHYP) { position = INTYPE; spine_depth++; depth = 0; first_child = HERE; } /* bug? first_child = HERE; */ } .|\n { } " \n"); exit(1); } /* initialize the symbol table */ init_symbol_table(); // We process the body if (!stat(argv[2],&buf)) { yyin = fopen(argv[2], "r"); position = INBODY; yylex(); fclose(yyin); } // We process the type yyin = fopen(argv[3], "r"); position = INTYPE; first_child = HERE; no_open_source = 0; spine_depth = 0; depth = 0; yylex(); fclose(yyin); print_all(argv[1]); return 0; } void search(uri,first_child,position,depth) char *uri; int first_child; int position; { if (position == MAINHYP) { if (first_child == HERE) found = search_bucket(uri,MAINHYP,depth); else found = search_bucket(uri,INHYP,0); } else if (position == INCONCL) { if (first_child == HERE) found = search_bucket(uri,MAINCONCL,depth); else found = search_bucket(uri,INCONCL,0); } else found = search_bucket(uri,position,depth); /* if (found == NOTFOUND) fprintf(stderr,"here = %d, pos = %d, uri = %s\n", first_child,position, uri); */ } /* (first_child == HERE) { if (position == MAINHYP) found = search_bucket(uri,MAINHYP,depth); else if (position == INCONCL) found = search_bucket(uri,MAINCONCL,0); else if (position == INHYP) found = search_bucket(uri,INHYP,0); if (found == NOTFOUND) printf( "pos = %d, uri = %s\n", MAINCONCL, uri); } else if ((position == MAINHYP) && (first_child == AFTER)) found = search_bucket(uri,INHYP,0); else found = search_bucket(uri,position,0); if (found == NOTFOUND) printf( "pos = %d, uri = %s\n", position, uri); } */ int yywrap() { return 1; }