=================================================================== RCS file: /home/cvs/OpenXM/src/util/oxgreph.c,v retrieving revision 1.1 retrieving revision 1.4 diff -u -p -r1.1 -r1.4 --- OpenXM/src/util/oxgreph.c 2006/03/04 07:48:12 1.1 +++ OpenXM/src/util/oxgreph.c 2009/02/22 17:30:03 1.4 @@ -1,4 +1,4 @@ -/* $OpenXM$ */ +/* $OpenXM: OpenXM/src/util/oxgreph.c,v 1.3 2006/03/05 04:01:17 takayama Exp $ */ #include #include #include @@ -11,7 +11,17 @@ It greps files and outputs an html file to browse the files. Keyword should be given in euc or utf-8 depending on the coding system of the files. It does not add meta section of html file. + Locale must be "C" to use this program or use -f option to read keyword. + + Example: + export LC_ALL="C" + s.txt contains "insubunkai" + oxgreph "`nkf -w s.txt`" $OpenXM_HOME/doc/cfep/html-ja_JP.utf8/html-ja/*.html >t.html + oxgreph --sjis "`nkf -s s.txt`" $OpenXM_HOME/doc/cfep/html-ja_JP.sjis/html-ja/*.html >t.html */ + +int Sjis = 0; +int LeaveTag = 0; main(int argc, char *argv[]) { int i,m,pid,n, cpos,start; char *com; @@ -22,13 +32,27 @@ main(int argc, char *argv[]) { FILE *fp; m = 256; pid = getpid(); + if (argc < 2) { + fprintf(stderr,"oxgreph [--leaveTag] args_to_grep \n"); + fprintf(stderr,"Note: LC_ALL should be C on some systems or use -f to give the pattern.\n"); + fprintf(stderr,"Example 1: oxgreph \"`nkf -w s.txt`\" $OpenXM_HOME/doc/cfep/html-ja_JP.utf8/*.html >t.html\n"); + fprintf(stderr,"Example 2: oxgreph -f s.txt $OpenXM_HOME/doc/cfep/html-ja_JP.utf8/*.html >t.html\n"); + fprintf(stderr," The keyword is stored in s.txt.\n"); + exit(0); + } for (i=1; i%s",workf); @@ -37,29 +61,35 @@ main(int argc, char *argv[]) { printf("
    \n"); fp = fopen(workf,"r"); if (fp == NULL) { - fprintf(stderr,"Open error of the workfile.\n"); exit(1); + fprintf(stderr,"Open error of the workfile.\n"); exit(1); } while (fgets(s,SSIZE-1,fp)) { - cpos = -1; n = strlen(s); - for (i=0; i< n; i++) { - if (s[i] == ':') { - cpos = i; break; - } - } - if (cpos >= 0) { - s[cpos] = 0; start = 0; - for (i=cpos+1; i= 0) { + s[cpos] = 0; start = 0; + for (i=cpos+1; i= 0x80)) { + i++; + continue; /* skip the next byte. */ } - if (s[i] == '<') { start=1; } - if ((s[i] == '>') && start) { start=0; s[i] = ' '; } - if (start) s[i] = 0; - if (s[i] == '\n') s[i] = ' '; - } - printf("
  1. %s
    %s 
    \n",s,s,&(s[cpos+1])); - } + if (s[i] == 0x1b) { /* skip escape sequence */ + i++; + while (s[i] != 0x1b) i++; + } + if (LeaveTag) ; + else { + if (s[i] == '<') { s[i]='{'; } + else if (s[i] == '>') { s[i]='}'; } + } + if (s[i] == '\n') s[i] = ' '; + } + printf("
  2. %s
    %s 
    \n",s,s,&(s[cpos+1])); + } } printf("
\n"); sprintf(com,"rm -f %s",workf);