summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/ptex/pbibtex/cpp.awk
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/ptex/pbibtex/cpp.awk')
-rw-r--r--Master/texmf-dist/doc/ptex/pbibtex/cpp.awk104
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)
+}