| version 1.1, 2006/03/04 07:48:12 |
version 1.3, 2006/03/05 04:01:17 |
|
|
| /* $OpenXM$ */ |
/* $OpenXM: OpenXM/src/util/oxgreph.c,v 1.2 2006/03/04 10:43:38 takayama Exp $ */ |
| #include <stdio.h> |
#include <stdio.h> |
| #include <stdlib.h> |
#include <stdlib.h> |
| #include <string.h> |
#include <string.h> |
|
|
| It greps files and outputs an html file to browse the files. |
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. |
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. |
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-jp/*.html >t.html |
| |
oxgreph --sjis "`nkf -s s.txt`" $OpenXM_HOME/doc/cfep/html-ja_JP.sjis/html-jp/*.html >t.html |
| */ |
*/ |
| |
|
| |
int Sjis = 0; |
| |
int LeaveTag = 0; |
| main(int argc, char *argv[]) { |
main(int argc, char *argv[]) { |
| int i,m,pid,n, cpos,start; |
int i,m,pid,n, cpos,start; |
| char *com; |
char *com; |
| Line 22 main(int argc, char *argv[]) { |
|
| Line 32 main(int argc, char *argv[]) { |
|
| FILE *fp; |
FILE *fp; |
| m = 256; |
m = 256; |
| pid = getpid(); |
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<argc; i++) { |
for (i=1; i<argc; i++) { |
| m += strlen(argv[i])+1; |
m += strlen(argv[i])+1; |
| } |
} |
| com = (char *)mymalloc(m); |
com = (char *)mymalloc(m); |
| sprintf(com,"grep "); |
sprintf(com,"grep "); |
| for (i=1; i<argc; i++) { |
for (i=1; i<argc; i++) { |
| sprintf(&(com[strlen(com)]),"%s ",argv[i]); |
if (strcmp(argv[i],"--sjis")==0) { |
| |
Sjis = 1; |
| |
}else if (strcmp(argv[i],"--leaveTag")==0) { |
| |
LeaveTag = 1; |
| |
}else { |
| |
sprintf(&(com[strlen(com)]),"%s ",argv[i]); |
| |
} |
| } |
} |
| sprintf(workf,"/tmp/tmp-oxgreph-%d.txt",pid); |
sprintf(workf,"/tmp/tmp-oxgreph-%d.txt",pid); |
| sprintf(&(com[strlen(com)]),">%s",workf); |
sprintf(&(com[strlen(com)]),">%s",workf); |
| Line 37 main(int argc, char *argv[]) { |
|
| Line 61 main(int argc, char *argv[]) { |
|
| printf("<ol>\n"); |
printf("<ol>\n"); |
| fp = fopen(workf,"r"); |
fp = fopen(workf,"r"); |
| if (fp == NULL) { |
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)) { |
while (fgets(s,SSIZE-1,fp)) { |
| cpos = -1; n = strlen(s); |
cpos = -1; n = strlen(s); |
| for (i=0; i< n; i++) { |
for (i=0; i< n; i++) { |
| if (s[i] == ':') { |
if (s[i] == ':') { |
| cpos = i; break; |
cpos = i; break; |
| } |
} |
| } |
} |
| if (cpos >= 0) { |
if (cpos >= 0) { |
| s[cpos] = 0; start = 0; |
s[cpos] = 0; start = 0; |
| for (i=cpos+1; i<n; i++) { |
for (i=cpos+1; i<n; i++) { |
| if (s[i] == 0x1b) { |
if (Sjis && (((unsigned char)s[i]) >= 0x80)) { |
| i++; |
i++; |
| while (s[i] != 0x1b) i++; |
continue; /* skip the next byte. */ |
| } |
} |
| if (s[i] == '<') { start=1; } |
if (s[i] == 0x1b) { /* skip escape sequence */ |
| if ((s[i] == '>') && start) { start=0; s[i] = ' '; } |
i++; |
| if (start) s[i] = 0; |
while (s[i] != 0x1b) i++; |
| if (s[i] == '\n') s[i] = ' '; |
} |
| } |
if (LeaveTag) ; |
| printf("<li><a href=\"%s\">%s</a> <pre>%s </pre>\n",s,s,&(s[cpos+1])); |
else { |
| } |
if (s[i] == '<') { s[i]='{'; } |
| |
else if (s[i] == '>') { s[i]='}'; } |
| |
} |
| |
if (s[i] == '\n') s[i] = ' '; |
| |
} |
| |
printf("<li><a href=\"%s\">%s</a> <pre>%s </pre>\n",s,s,&(s[cpos+1])); |
| |
} |
| } |
} |
| printf("</ol>\n"); |
printf("</ol>\n"); |
| sprintf(com,"rm -f %s",workf); |
sprintf(com,"rm -f %s",workf); |