/******************************************************************/ /* 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_ind.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; int inductive_type = 0; int constructor = 0; int deep_type = 0; char sep = '"'; char *xpointer = "#xpointer(1/"; char *uri; char *tmp; char *filename; char *file_uri; char *inductive_uri; char *filename_prefix; char *file_uri_prefix; %} /***************************************************************/ /* 3. Regular definitions. */ /***************************************************************/ uri [^"]+ digits [0-9]+ value [^"]+ /***************************************************************/ /* 4. Rules. */ /***************************************************************/ %% "" { tmp = (char *)malloc(sizeof('a')*128); strcpy(filename,filename_prefix); /* fprintf(stderr,"tre"); */ strcpy(file_uri,file_uri_prefix); sprintf(tmp,",%d.xml", inductive_type); /* fprintf(stderr,"quattro"); */ strcat(filename,tmp); sprintf(tmp,"#xpointer(1/%d)", inductive_type); strcat(file_uri,tmp); /* fprintf(stderr,"cinque"); */ free(tmp); print_file(); } "" { tmp = (char *)malloc(sizeof('a')*128); strcpy(filename,filename_prefix); strcpy(file_uri,file_uri_prefix); strcpy(inductive_uri,file_uri_prefix); sprintf(tmp,",%d,%d.xml", inductive_type,constructor); strcat(filename,tmp); sprintf(tmp,"#xpointer(1/%d/%d)",inductive_type,constructor); strcat(file_uri,tmp); free(tmp); print_file(); } "" | "\n\n"); fprintf(out," ]>\n"); fprintf(out,"\n"); fprintf(out,"\t\n"); print_all(file_uri,out,outrel,outsort); fprintf(out,"\t\n"); fprintf(out,"\n"); fclose(out); fclose(outrel); fclose(outsort); } 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) printf( "pos = %d, uri = %s\n", position, uri); */ } int yywrap() { return 1; }