version 1.4, 1999/12/13 14:47:41 |
version 1.7, 2001/05/06 07:53:01 |
|
|
|
/*&eg |
|
\documentclass{article} |
|
\title{On oxweave.c} |
|
\author{} \date{} |
|
\begin{document} |
|
\maketitle |
|
\section{Introduction} |
|
*/ |
/*&jp |
/*&jp |
\documentclass{jarticle} |
\documentclass{jarticle} |
\title{oxweave $B$N%=!<%9%3!<%I$K$D$$$F$N2r@b(B} |
\title{oxweave $B$N%=!<%9%3!<%I$K$D$$$F$N2r@b(B} |
|
|
\maketitle |
\maketitle |
\section{$BA0=q$-(B} |
\section{$BA0=q$-(B} |
*/ |
*/ |
/* $OpenXM: OpenXM/src/kxx/oxweave.c,v 1.3 1999/12/13 07:55:23 takayama Exp $ */ |
/* $OpenXM: OpenXM/src/kxx/oxweave.c,v 1.6 1999/12/15 03:30:14 takayama Exp $ */ |
#include <stdio.h> |
#include <stdio.h> |
|
|
/* Modify here to change the begin tag and EndComment. Less than 9 characters. |
/* Modify here to change the begin tag and EndComment. Less than 9 characters. |
Line 19 char *EndComment1="\n"; |
|
Line 27 char *EndComment1="\n"; |
|
#define BSIZE 256 |
#define BSIZE 256 |
#define VSIZE 256 |
#define VSIZE 256 |
static int Debug = 0; |
static int Debug = 0; |
|
static int Debug2 = 0; |
static int Plain = 0; |
static int Plain = 0; |
/*&jp \noindent |
/*&jp \noindent |
|
$B:F5"(B option $B$r(B on $B$K$7$?>l9g(B ({\tt Recursive = 1}, |
|
{\tt LevelState1} $B$G(B, $B0u:~$9$Y$-(B comment $B$N%M%9%H$N%l%Y%k$rI=$9(B. |
|
{\tt LevelState2} $B$G(B, $B:o=|$9$Y$-(B comment $B$N%M%9%H$N%l%Y%k$rI=$9(B. |
|
*/ |
|
static int Recursive = 0; |
|
static int LevelState1 = 0; |
|
static int LevelState2 = 0; |
|
/*&jp \noindent |
{\tt Buf} $B$OI8=`=PNO$h$j$N%G!<%?$r0l;~3JG<$7$F$*$/NN0h(B. |
{\tt Buf} $B$OI8=`=PNO$h$j$N%G!<%?$r0l;~3JG<$7$F$*$/NN0h(B. |
{\tt Head} $B$,:G=i$NJ8;z$r$5$7(B, {\tt Tail} $B$O:G8e$NJ8;z$r$5$9(B. |
{\tt Head} $B$,:G=i$NJ8;z$r$5$7(B, {\tt Tail} $B$O:G8e$NJ8;z$r$5$9(B. |
{\tt Buf} $B$r%j%s%0>u$K;HMQ$9$k$N$G(B, $B%j%s%0%P%C%U%!$H$h$V(B |
{\tt Buf} $B$r%j%s%0>u$K;HMQ$9$k$N$G(B, $B%j%s%0%P%C%U%!$H$h$V(B |
Line 33 char *Tag = NULL; |
|
Line 50 char *Tag = NULL; |
|
/*&jp \noindent {\tt OutputNoTaggedSegment = 1} |
/*&jp \noindent {\tt OutputNoTaggedSegment = 1} |
$B$J$i(B $B%3%a%s%H5-9f$N30$O(B verbatim $B$rMQ$$$F=PNO(B. |
$B$J$i(B $B%3%a%s%H5-9f$N30$O(B verbatim $B$rMQ$$$F=PNO(B. |
{\tt --source} $B%*%W%7%g%s$G$3$NJQ?t$r(B1$B$K$G$-$k(B. |
{\tt --source} $B%*%W%7%g%s$G$3$NJQ?t$r(B1$B$K$G$-$k(B. |
|
{\tt --plain} $B$G$O(B, verbatim $B$rMxMQ$;$:$K@8$G=PNO(B. |
*/ |
*/ |
int OutputNoTaggedSegment = 0; |
int OutputNoTaggedSegment = 0; |
/*&jp \noindent 1 $B$J$i%?%0$N$D$$$?>l=j$r=PNOCf(B. */ |
/*&jp \noindent 1 $B$J$i%?%0$N$D$$$?>l=j$r=PNOCf(B. */ |
Line 55 main(int argc,char *argv[]) { |
|
Line 73 main(int argc,char *argv[]) { |
|
Head = Tail = 0; Buf[0] = ' '; /* initialize */ |
Head = Tail = 0; Buf[0] = ' '; /* initialize */ |
|
|
/*&jp {\tt tagv[]} $B$K%?%0$N$"$D$^$j$r$$$l$k(B. |
/*&jp {\tt tagv[]} $B$K%?%0$N$"$D$^$j$r$$$l$k(B. |
{\tt tagv2[]} $B$KBP1~$9$k%?%0$N$*$o$j$N5-9f$r$$$l$k(B. |
{\tt tagv2[]} $B$KBP1~$9$k%?%0$N$*$o$j$N5-9f$r$$$l$k(B. |
*/ |
*/ |
tagc = tagc2 = 0; |
tagc = tagc2 = 0; |
if (argc <= 1 || argc >= VSIZE) { |
if (argc <= 1 || argc >= VSIZE) { |
usage(); |
usage(); |
Line 64 main(int argc,char *argv[]) { |
|
Line 82 main(int argc,char *argv[]) { |
|
}else{ |
}else{ |
for (i=1; i< argc ; i++) { |
for (i=1; i< argc ; i++) { |
if (strcmp(argv[i],"--source") == 0) { |
if (strcmp(argv[i],"--source") == 0) { |
OutputNoTaggedSegment = 1; |
OutputNoTaggedSegment = 1; |
}else if (strcmp(argv[i],"--plain") == 0) { |
}else if (strcmp(argv[i],"--plain") == 0) { |
Plain = 1; OutputNoTaggedSegment = 1; |
Plain = 1; OutputNoTaggedSegment = 1; |
|
}else if (strcmp(argv[i],"--recursive") == 0) { |
|
Recursive = 1; |
|
}else if (strcmp(argv[i],"--debug") == 0) { |
|
Debug2 = 1; |
} else{ |
} else{ |
tagv[tagc] = (char *) malloc(sizeof(char)*(strlen(argv[i])+10)); |
if (strcmp(argv[i]," ") == 0) { |
tagv2[tagc2] = (char *) malloc(sizeof(char)*10); |
argv[i] = ""; |
strcpy(tagv[tagc],BeginTag0); |
} |
strcat(tagv[tagc],argv[i]); |
tagv[tagc] = (char *) malloc(sizeof(char)*(strlen(argv[i])+10)); |
tagv2[tagc] = EndComment0; |
tagv2[tagc2] = (char *) malloc(sizeof(char)*10); |
/* $B%3%a%s%H$N$*$o$j$N5-9f(B. */ |
strcpy(tagv[tagc],BeginTag0); |
tagc2++; |
strcat(tagv[tagc],argv[i]); |
tagc++; |
tagv2[tagc] = EndComment0; |
|
/* $B%3%a%s%H$N$*$o$j$N5-9f(B. */ |
|
tagc2++; |
|
tagc++; |
|
|
tagv[tagc] = (char *) malloc(sizeof(char)*(strlen(argv[i])+10)); |
tagv[tagc] = (char *) malloc(sizeof(char)*(strlen(argv[i])+10)); |
tagv2[tagc2] = (char *) malloc(sizeof(char)*10); |
tagv2[tagc2] = (char *) malloc(sizeof(char)*10); |
strcpy(tagv[tagc],BeginTag1); |
strcpy(tagv[tagc],BeginTag1); |
strcat(tagv[tagc],argv[i]); |
strcat(tagv[tagc],argv[i]); |
tagv2[tagc] = EndComment1; |
tagv2[tagc] = EndComment1; |
tagc2++; |
tagc2++; |
tagc++; |
tagc++; |
} |
} |
} |
} |
} |
} |
/*&jp $B%W%m%0%i%`$O#3$D$N>uBV$r;}$D(B. $B>uBV(B 0 $B$O%?%0IU$-%3%a%s%H5-9f$N30(B. |
/*&jp $B%W%m%0%i%`$O#3$D$N>uBV$r;}$D(B. $B>uBV(B 0 $B$O%?%0IU$-%3%a%s%H5-9f$N30(B. |
$B>uBV(B 1 $B$O;XDj$5$l$?%?%0$NIU$$$?%3%a%s%H$NCf(B. |
$B>uBV(B 1 $B$O;XDj$5$l$?%?%0$NIU$$$?%3%a%s%H$NCf(B. |
$B>uBV(B 2 $B$O;XDj$5$l$F$$$J$$%?%0$NIU$$$?%3%a%s%H$NCf(B |
$B>uBV(B 2 $B$O;XDj$5$l$F$$$J$$%?%0$NIU$$$?%3%a%s%H$NCf(B |
($B>uBV#2$K$"$k$H$-$O0u:~$5$l$J$$(B.) */ |
($B>uBV#2$K$"$k$H$-$O0u:~$5$l$J$$(B.) */ |
/* |
/* |
state 0 -- / * & jp ---> state 1 |
state 0 -- / * & jp ---> state 1 |
if ( BeginVerbatim & OutputNoTaggedSegment ) end-verbatim |
if ( BeginVerbatim & OutputNoTaggedSegment ) end-verbatim |
<--- * / --- state 1 |
<--- * / --- state 1 |
if ( OutputNoTaggedSegment ) begin-verbatim |
if ( OutputNoTaggedSegment ) begin-verbatim |
|
|
state 0 -- / * & unknown ---> state 2 |
state 0 -- / * & unknown ---> state 2 |
<--- * / --- state 2 |
<--- * / --- state 2 |
|
|
state 0 & OutputNoTaggedSegment ==> putchar() |
state 0 & OutputNoTaggedSegment ==> putchar() |
state 1 ==> putchar() |
state 1 ==> putchar() |
state 2 ==> skip |
state 2 ==> skip |
*/ |
*/ |
while (notEOF()) { |
while (notEOF()) { |
/* We are in the state 0. */ |
/* We are in the state 0. */ |
pos = findNextTag(tagc,tagv,tagc2,tagv2); |
pos = findNextTag(tagc,tagv,tagc2,tagv2); |
/* printf(" ===pos=%d=== ",pos); */ |
/* printf(" ===pos=%d=== ",pos); */ |
/* We are in the state 1. */ |
/* We are in the state 1. */ |
findEndTag(tagc2,tagv2,pos); |
findEndTag(tagc2,tagv2,pos); |
} |
} |
Line 119 main(int argc,char *argv[]) { |
|
Line 144 main(int argc,char *argv[]) { |
|
|
|
/*&jp \noindent $B<!$N4X?t$OMxMQK!$rI=<($9$k(B. */ |
/*&jp \noindent $B<!$N4X?t$OMxMQK!$rI=<($9$k(B. */ |
usage() { |
usage() { |
fprintf(stderr,"oxweave [--plain] [--source] [key1 key2 ...]\n"); |
#include "oxweaveUsage.h" |
fprintf(stderr,"Example 1: oxweave --source jp <oxweave.c >t.tex\n"); |
|
fprintf(stderr,"Example 2: oxweave jp <oxweave.c >t.tex\n"); |
|
fprintf(stderr,"Example 2: oxweave --plain <oxweave.c >t.tex\n"); |
|
} |
} |
|
|
#define inc(a) ((a+1) % BSIZE) |
#define inc(a) ((a+1) % BSIZE) |
/*&jp \noindent {\tt wread()} $B$O(B $BI8=`F~NO$h$j$N%G!<%?$rFI$a$k$@$1(B |
/*&jp \noindent {\tt wread()} $B$O(B $BI8=`F~NO$h$j$N%G!<%?$rFI$a$k$@$1(B |
$B%j%s%0%P%C%U%!(B {\tt Buf] $B$XFI$_9~$`(B.*/ |
$B%j%s%0%P%C%U%!(B {\tt Buf} $B$XFI$_9~$`(B.*/ |
wread() { |
wread() { |
int c,i; |
int c,i; |
static int eof = 0; |
static int eof = 0; |
Line 165 int wgetc(int p) { |
|
Line 187 int wgetc(int p) { |
|
return(c); |
return(c); |
} |
} |
|
|
/*&jp \noindent {\tt findNextTag()} $B$O<!$N(B {\tt /\*\&} $B$J$k%?%0$r$5$,$9(B. |
/*&jp \noindent {\tt findNextTag()} $B$O<!$N(B {\tt / *\&} $B$J$k%?%0$r$5$,$9(B. |
( $B$3$l$O(B, {\tt BeginTag} $B$NCM$rJQ$($k$HJQ99$G$-$k(B.) |
( $B$3$l$O(B, {\tt BeginTag0} $B$NCM$rJQ$($k$HJQ99$G$-$k(B.) |
{\tt OutputNoTaggedSegment} $B$,(B 1 $B$J$i%G!<%?$r$=$N$^$^$J$,$9(B. |
{\tt OutputNoTaggedSegment} $B$,(B 1 $B$J$i%G!<%?$r$=$N$^$^$J$,$9(B. |
$BL5;k$9$Y$-%?%0$N$H$-$O(B, $B%?%0FbIt$r%9%-%C%W$7$?$N$A(B |
$BL5;k$9$Y$-%?%0$N$H$-$O(B, $B%?%0FbIt$r%9%-%C%W$7$?$N$A(B |
{\tt findNextTag} $B$r:F5"E*$K8F$V(B. |
{\tt findNextTag} $B$r:F5"E*$K8F$V(B. |
Line 180 findNextTag(int tagc, char *tagv[],int tagc2,char *tag |
|
Line 202 findNextTag(int tagc, char *tagv[],int tagc2,char *tag |
|
for (i=0; i<tagc; i++) { |
for (i=0; i<tagc; i++) { |
/* fprintf(stderr,"\nChecking %s : ",tagv[i]); */ |
/* fprintf(stderr,"\nChecking %s : ",tagv[i]); */ |
if (wcmp(tagv[i]) == 0) { |
if (wcmp(tagv[i]) == 0) { |
/* fprintf(stderr," : matched."); */ |
LevelState1++; |
wgetc(strlen(tagv[i])); |
/* fprintf(stderr," : matched."); */ |
if (OutputNoTaggedSegment == 1 && BeginVerbatim == 1) { |
wgetc(strlen(tagv[i])+1); |
BeginVerbatim = 0; |
if (OutputNoTaggedSegment == 1 && BeginVerbatim == 1) { |
if (!Plain) printf("\\end{verbatim\x07d}\n"); |
BeginVerbatim = 0; |
} |
if (!Plain) printf("\\end{verbatim\x07d}\n"); |
OutputtingTaggedSegment = 1; |
} |
return(i); /* Now, state is 1. */ |
OutputtingTaggedSegment = 1; |
|
return(i); /* Now, state is 1. */ |
} |
} |
} |
} |
/*&jp {\tt /\*\&} $B$@$1$I$I$N%?%0$K$b0lCW$7$J$$(B */ |
/*&jp {\tt / *\&} $B$@$1$I$I$N%?%0$K$b0lCW$7$J$$(B */ |
if (wcmp(BeginTag0) == 1) { |
if (wcmp(BeginTag0) == 1) { |
|
LevelState2++; |
wgetc(strlen(BeginTag0)); |
wgetc(strlen(BeginTag0)); |
while ((d=wgetc(1)) > ' ') ; |
while ((d=wgetc(1)) > ' ') ; |
/* We are in the state 2. */ |
/* We are in the state 2. */ |
Line 199 findNextTag(int tagc, char *tagv[],int tagc2,char *tag |
|
Line 223 findNextTag(int tagc, char *tagv[],int tagc2,char *tag |
|
/* We are in the state 0. */ |
/* We are in the state 0. */ |
return(findNextTag(tagc,tagv,tagc2,tagv2)); |
return(findNextTag(tagc,tagv,tagc2,tagv2)); |
}else if (wcmp(BeginTag1) == 1) { |
}else if (wcmp(BeginTag1) == 1) { |
|
LevelState2++; |
wgetc(strlen(BeginTag1)); |
wgetc(strlen(BeginTag1)); |
while ((d=wgetc(1)) > ' ') ; |
while ((d=wgetc(1)) > ' ') ; |
/* We are in the state 2. */ |
/* We are in the state 2. */ |
Line 218 findNextTag(int tagc, char *tagv[],int tagc2,char *tag |
|
Line 243 findNextTag(int tagc, char *tagv[],int tagc2,char *tag |
|
exit(0); |
exit(0); |
} |
} |
|
|
/*&jp \noindent {\tt findEndTag()} $B$O<!$N(B {\tt \*\/} $B$J$k%?%0$r$5$,$9(B. |
/*&jp \noindent {\tt findEndTag()} $B$O<!$N(B {\tt * /} $B$J$k%?%0$r$5$,$9(B. |
( $B$3$l$O(B, EndComment[01] $B$NCM$rJQ$($k$HJQ992DG=(B. ) |
( $B$3$l$O(B, EndComment0 $B$NCM$rJQ$($k$HJQ992DG=(B. ) |
|
{\tt / /} $B$G;O$^$k>l9g$O(B, 0xa $B$,$*$o$j(B. |
*/ |
*/ |
findEndTag(int tagc,char *tagv[],int rule) { |
findEndTag(int tagc,char *tagv[],int rule) { |
int i; |
int i; |
Line 228 findEndTag(int tagc,char *tagv[],int rule) { |
|
Line 254 findEndTag(int tagc,char *tagv[],int rule) { |
|
do { |
do { |
i = rule; |
i = rule; |
if (wcmp(tagv[i]) == 0) { |
if (wcmp(tagv[i]) == 0) { |
wgetc(strlen(tagv[i])); |
LevelState1--; |
if (strcmp(tagv[i],"\n")==0) putchar('\n'); |
if (Debug2) printf("[LevelState1=%d by end of comment in the state 1.]\n",LevelState1); |
OutputtingTaggedSegment = 0; |
if (LevelState1 > 0 && Recursive) { |
if (OutputNoTaggedSegment) { |
wgetc(strlen(tagv[i])); |
if (!Plain) printf("\n{\\footnotesize \\begin{verbatim}\n"); |
printf("%s",tagv[i]); |
BeginVerbatim = 1; |
return(findEndTag(tagc,tagv,rule)); |
|
}else{ |
|
wgetc(strlen(tagv[i])); |
|
if (strcmp(tagv[i],"\n")==0) putchar('\n'); |
|
OutputtingTaggedSegment = 0; |
|
if (OutputNoTaggedSegment) { |
|
if (!Plain) printf("\n{\\footnotesize \\begin{verbatim}\n"); |
|
BeginVerbatim = 1; |
|
} |
|
return; /* Our state is 0. */ |
} |
} |
return; /* Our state is 0. */ |
|
} |
} |
/* Our state is 1. */ |
/* Our state is 1. */ |
|
if (wcmp("/*") >= 0 ) { |
|
LevelState1++; |
|
if (Debug2) printf("[LevelState1++=%d by / * in state 1.]\n",LevelState1); |
|
} |
c = wgetc(1); |
c = wgetc(1); |
putchar(c); |
putchar(c); |
}while( c!= EOF); |
}while( c!= EOF); |
Line 254 skipToEndTag(int tagc,char *tagv[],int rule) { |
|
Line 292 skipToEndTag(int tagc,char *tagv[],int rule) { |
|
do { |
do { |
if (rule == 0) { |
if (rule == 0) { |
if (wcmp(EndComment0) == 0) { |
if (wcmp(EndComment0) == 0) { |
wgetc(strlen(EndComment0)); |
LevelState2--; |
return; /* our state is 0. */ |
if (LevelState2 > 0 && Recursive) { |
|
wgetc(strlen(EndComment0)); |
|
return(skipToEndTag(tagc,tagv,rule)); |
|
}else{ |
|
wgetc(strlen(EndComment0)); |
|
return; /* our state is 0. */ |
|
} |
} |
} |
}else if (rule == 1) { |
}else if (rule == 1) { |
if (wcmp(EndComment1) == 0) { |
if (wcmp(EndComment1) == 0) { |
wgetc(strlen(EndComment1)); |
LevelState2--; |
return; /* our state is 0. */ |
if (LevelState2 > 0 && Recursive) { |
|
wgetc(strlen(EndComment0)); |
|
return(skipToEndTag(tagc,tagv,rule)); |
|
}else{ |
|
wgetc(strlen(EndComment1)); |
|
return; /* our state is 0. */ |
|
} |
} |
} |
}else{ |
}else{ |
for (i=0; i<tagc; i++) { |
for (i=0; i<tagc; i++) { |
if (wcmp(tagv[i]) == 0) { |
if (wcmp(tagv[i]) == 0) { |
wgetc(strlen(tagv[i])); |
LevelState2--; |
return; /* our state is 0. */ |
if (LevelState2 > 0 && Recursive) { |
} |
wgetc(strlen(EndComment0)); |
|
return(skipToEndTag(tagc,tagv,rule)); |
|
}else{ |
|
wgetc(strlen(tagv[i])); |
|
return; /* our state is 0. */ |
|
} |
|
} |
} |
} |
|
|
} |
} |
/* our state is 2. */ |
/* our state is 2. */ |
|
if (wcmp("/*") >= 0) LevelState2++; |
c = wgetc(1); |
c = wgetc(1); |
}while( c!= EOF); |
}while( c!= EOF); |
fprintf(stderr,"findEndTag: unexpected EOF.\n"); |
fprintf(stderr,"findEndTag: unexpected EOF.\n"); |
irregularExit(); |
irregularExit(); |
} |
} |
skipToEndTag_old(int tagc,char *tagv[]) { |
|
int i; |
|
int c; |
|
/* our state is 2. */ |
|
do { |
|
for (i=0; i<tagc; i++) { |
|
if (wcmp(tagv[i]) == 0) { |
|
wgetc(strlen(tagv[i])); |
|
return; /* our state is 0. */ |
|
} |
|
} |
|
/* our state is 2. */ |
|
c = wgetc(1); |
|
}while( c!= EOF); |
|
fprintf(stderr,"findEndTag: unexpected EOF.\n"); |
|
irregularExit(); |
|
} |
|
|
|
/*&jp \noindent {\tt wcmp(s)} $B$OJ8;zNs(B {\tt s} $B$H(B {\tt Buf[Head]} $B$+$i(B |
/*&jp \noindent {\tt wcmp(s)} $B$OJ8;zNs(B {\tt s} $B$H(B {\tt Buf[Head]} $B$+$i(B |
$B$O$8$^$kJ8;zNs$rHf3S$9$k(B. |
$B$O$8$^$kJ8;zNs$rHf3S$9$k(B. |
|
|
wread(); |
wread(); |
if (Debug == 2) fprintf(stderr,"[Checking %s]\n",s); |
if (Debug == 2) fprintf(stderr,"[Checking %s]\n",s); |
if (strcmp(s,"\n") == 0) { |
if (strcmp(s,"\n") == 0) { |
if (s[0] == Buf[Head]) return(0); |
if (s[0] == Buf[Head]) return(0); |
else return(-1); |
else return(-1); |
} |
} |
n = strlen(s); |
n = strlen(s); |
j = Head; |
j = Head; |
Line 339 irregularExit() { |
|
Line 379 irregularExit() { |
|
exit(-1); |
exit(-1); |
} |
} |
|
|
|
|
/*&jp |
/*&jp |
\end{document} |
\end{document} |
|
*/ |
|
/*&eg |
|
\end{document} |
*/ |
*/ |
|
|
|
|