diff options
Diffstat (limited to 'Master/texmf-dist/doc/ptex/pbibtex/cpp.awk')
-rw-r--r-- | Master/texmf-dist/doc/ptex/pbibtex/cpp.awk | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/ptex/pbibtex/cpp.awk b/Master/texmf-dist/doc/ptex/pbibtex/cpp.awk new file mode 100644 index 00000000000..4c281373326 --- /dev/null +++ b/Master/texmf-dist/doc/ptex/pbibtex/cpp.awk @@ -0,0 +1,104 @@ +function do_if(proc,sym, direct ) { + if( (sym in defined) && (defined[sym]!=0 ) ) { + while( direct!="else" && direct!="endif" ) direct=proc_line(proc) + if(direct=="else") + while( direct!="endif" ) direct=proc_line(0) + } else { + while( direct!="else" && direct!="endif" ) direct=proc_line(0) + if(direct=="else") + while( direct!="endif" ) direct=proc_line(proc) + } +} + +function do_if_not(proc,sym, direct ) { + if( (!(sym in defined)) || (defined[sym]==0 ) ) { + while( direct!="else" && direct!="endif" ) direct=proc_line(proc) + if(direct=="else") + while( direct!="endif" ) direct=proc_line(0) + } else { + while( direct!="else" && direct!="endif" ) direct=proc_line(0) + if(direct=="else") + while( direct!="endif" ) direct=proc_line(proc) + } +} + +function do_ifdef(proc,sym, direct ) { + if( sym in defined ) { + while( direct!="else" && direct!="endif" ) direct=proc_line(proc) + if(direct=="else") + while( direct!="endif" ) direct=proc_line(0) + } else { + while( direct!="else" && direct!="endif" ) direct=proc_line(0) + if(direct=="else") + while( direct!="endif" ) direct=proc_line(proc) + } +} + +function do_ifndef(proc,sym, direct) { + if( !(sym in defined) ) { + while( direct!="else" && direct!="endif" ) direct=proc_line(proc) + if(direct=="else") + while( direct!="endif" ) direct=proc_line(0) + } else { + while( direct!="else" && direct!="endif" ) direct=proc_line(0) + if(direct=="else") + while( direct!="endif" ) direct=proc_line(proc) + } +} + +function proc_line(proc, direct) { + if( (getline<"jbtxbst.doc") <1 ) { + exit + } + lno++; + if( $0 ~ /^#/ ) { + if( $1=="#" ) { + direct=$2; arg1=$3; arg2=$4 + }else { + direct=substr($1,2,16); arg1=$2; arg2=$3 + } + if(direct=="define") { + if(proc) defined[arg1]=arg2+0 + } else if(direct=="ifdef" ){ + do_ifdef(proc,arg1) + }else if(direct=="ifndef") { + do_ifndef(proc,arg1) + }else if(direct=="if") { + if( substr(arg1,1,1)=="!" ) do_if_not(proc,substr(arg1,2,32)) + else do_if(proc,arg1) + }else if( (direct!="else") && (direct!="endif") ){ + print "% Error **undefined **",direct,"** in line",lno >"/dev/tty" + exit + } + return direct; + }else if($0 ~ /^%/ ) { + return "" # コメントは基本的には削除する + }else if($0 ~ /^ %/ ) { + sub(/ /,"") # この形式のコメントは出力する + print $0 + return "" + }else { + if(proc) print $0 + return "" + } +} +BEGIN{ + if(ARGC<2) { + print "usage: gawk -f cpp.awk <style-type> [<option>]" + print "<style-type> = JPLAIN | JALPHA | JABBRV | JUNSRT | JIPSJ" + print " TIPSJ | TIEICE | JNAME | JORSJ" + print "<option> = ASCII" + exit + } + opt=ARGV[1] + name["JPLAIN"]="jplain"; name["JALPHA"]="jalpha"; name["JABBRV"]="jabbrv" + name["JUNSRT"]="junsrt"; name["JIPSJ" ]="jipsj" ; name["TIPSJ" ]="tipsj" + name["TIEICE"]="tieice"; name["JNAME" ]="jname" ; name["JORSJ" ]="jorsj" + if( opt in name ) + printf("%% JBibTeX standard bibliography style `%s'\n",name[opt]) + for(i=1;i<ARGC;i++) { + defined[ARGV[i]]=1 + ARGV[i]="" + } + while(1) proc_line(1) +} |