extman.awk
上传用户:gzelex
上传日期:2007-01-07
资源大小:707k
文件大小:5k
开发平台:

MultiPlatform

  1. BEGIN { datatype = "?????????????"; }
  2. function removeweb() 
  3. { x = 0; 
  4. # gsub(/|.*|/,"$DUMMY$");
  5. # gsub("_","\\_");
  6. }
  7. //*{\Moperations/ { 
  8.   sub(//*{/,"");
  9.   sub(/}*//,"");
  10.   sub("Moperations","operations");
  11.   print;
  12.   print " ";
  13. }
  14. //*{\Mop/ {
  15.   if ($1 ~ "opl")
  16.      print "\opl " memberfunc;
  17.   else
  18.      print "\op  " memberfunc;
  19.   $1 = "           { ";
  20.   while ($0 !~ /} **//)
  21.   { removeweb();
  22.     print;
  23.     getline;
  24.    }
  25.   sub(/} **//," }");
  26.   removeweb();
  27.   print;
  28.   print " ";
  29.   print " ";
  30.   getline;
  31. }
  32. //*{\Mfunc/ {
  33.   if ($1 ~ "funcl")
  34.      print "\funcl " memberfunc;
  35.   else
  36.      print "\func  " memberfunc;
  37.   $1 = "           { ";
  38.   while ($0 !~ /} **//)
  39.   { removeweb();
  40.     print;
  41.     getline;
  42.    }
  43.   sub(/} **//," }");
  44.   removeweb();
  45.   print;
  46.   print " ";
  47.   print " ";
  48.   getline;
  49. }
  50. //*{\Mbinopfunc/ {
  51.   split(memberfunc,arr);
  52.   if (arr[2] !~ /[a-z,A-Z]+.*/)   # binary operator
  53.   { sub(arr[2],"",memberfunc);
  54.     sub(/(/,"",memberfunc);
  55.     sub(/)/,"",memberfunc);
  56.     sub(/,/,"\ "arr[2],memberfunc);
  57.    }
  58.   rtype = arr[1]
  59.   sub(/\/,"\\",rtype);
  60.   sub(rtype,"",memberfunc);
  61.   gsub(datatype,"",memberfunc);
  62.   gsub(/ \ /,"",memberfunc);
  63.   sub(/ &/," \\&",memberfunc);
  64.   print "\binopfunc  " arr[1] " " memberfunc;
  65.   $1 = "           { ";
  66.   while ($0 !~ /} **//)
  67.   { removeweb();
  68.     print;
  69.     getline;
  70.    }
  71.   sub(/} **//," }");
  72.   removeweb();
  73.   print;
  74.   print " ";
  75.   print " ";
  76.   getline;
  77. }
  78. //*{\Marrop/ {
  79.   sub(/[]/,"",memberfunc);
  80.   sub(/(/,"",memberfunc);
  81.   sub(/)/,"",memberfunc);
  82.   print "\arrop " memberfunc;
  83.   $1 =  "         { ";
  84.   while ($0 !~ /} **//)
  85.   { removeweb();
  86.     print;
  87.     getline;
  88.    }
  89.   sub(/} **//," }");
  90.   removeweb();
  91.   print;
  92.   print " ";
  93.   print " ";
  94.   getline;
  95. }
  96. //*{\Mfunop/ {
  97.   gsub(/(/,"",memberfunc);
  98.   gsub(/)/,"",memberfunc);
  99.   print "\funop " memberfunc;
  100.   $1 =  "         { ";
  101.   while ($0 !~ /} **//)
  102.   { removeweb();
  103.     print;
  104.     getline;
  105.    }
  106.   sub(/} **//," }");
  107.   removeweb();
  108.   print;
  109.   print " ";
  110.   print " ";
  111.   getline;
  112. }
  113. //*{\Munop/ {
  114.   if (memberfunc ~ /( *int/)       # postfix op
  115.     opcmd = "\postunop ";
  116.   else
  117.     opcmd = "\unop ";
  118.   sub(/(.*)/,"",memberfunc);
  119.   sub(/{}/,"",memberfunc);
  120.   print opcmd memberfunc;
  121.   $1 =  "         { ";
  122.   while ($0 !~ /} **//)
  123.   { removeweb();
  124.     print;
  125.     getline;
  126.    }
  127.   sub(/} **//," }");
  128.   removeweb();
  129.   print;
  130.   print " ";
  131.   print " ";
  132.   getline;
  133. }
  134. //*{\Mbinop/ {
  135.   dtype = datatype;
  136.   sub(/\/,"\\",dtype);
  137.   gsub(dtype,"@",memberfunc); # delete all but first occurences of datatype
  138.   sub(/^@/,datatype,memberfunc);
  139.   gsub(/@/,"",memberfunc);
  140.   sub(/(/,"",memberfunc);
  141.   sub(/)/,"",memberfunc);
  142.   gsub(/ \ /,"",memberfunc);
  143.   print "\binop " memberfunc;
  144.   $1 =  "         { ";
  145.   while ($0 !~ /} **//)
  146.   { removeweb();
  147.     print;
  148.     getline;
  149.    }
  150.   sub(/} **//," }");
  151.   removeweb();
  152.   print;
  153.   print " ";
  154.   print " ";
  155.   getline;
  156. }
  157. //*{\Mcreate/ {
  158.   print "\create " constargs;
  159.   $1 = "   {"
  160.   while ($0 !~ /} **//)
  161.   { removeweb();
  162.     print;
  163.     getline;
  164.    }
  165.   gsub(/} **//," }");
  166.   removeweb();
  167.   print;
  168.   print " ";
  169.   print " ";
  170.   getline;
  171. }
  172. //*{\Manpage/ { 
  173.   sub(//*{\Manpage/,"\manpage");
  174.   sub(/}*//,"");
  175.   gsub("_","\_");
  176.   print;
  177.   print " ";
  178.   gsub("{"," ");
  179.   gsub("}"," ");
  180.   datatype = $2;
  181. }
  182. //*{\Mtext/ { 
  183.   sub(//*{\Mtext/,"");
  184.   while ($0 !~ /}*//) 
  185.   { removeweb();
  186.     print;
  187.     getline;
  188.    }
  189.   sub(/}*//,"");
  190.   removeweb();
  191.   print;
  192.   print " ";
  193. }
  194. //*{\M/ { 
  195.   sub(//*{\M/,"\");
  196.   while ($0 !~ /}*//) 
  197.   { removeweb();
  198.     print;
  199.     getline;
  200.    }
  201.   sub(/}*//,"");
  202.   removeweb();
  203.   print;
  204.   print " ";
  205. }
  206. /^ *[a-z,A-Z,0-9,_,&,<,>]+ +[a-z,A-Z,0-9,_,&]+/ {  # member or friend function ?
  207. sub(/ *virtual */,"");
  208. sub("return","");
  209. sub("friend","");
  210. sub("inline","");
  211. sub("extern","");
  212. if ($0 ~ /^.*operator/ || $0 ~ /^ *[a-z,A-Z,0-9,_,&,<,>]+ +[a-z,A-Z,0-9,_]+(.*)/)
  213.    { 
  214.       sub(/ *{.*$/,"");
  215.       sub(/ +$/,"");
  216.       sub(/;$/,"");
  217.       sub(/^ +/,"");
  218.       gsub("<","\<",$1);   # replace template brackets in first arg
  219.       gsub(">","\>",$1);
  220.       gsub("_","\_");
  221.       gsub("%","\%");
  222.       gsub("\|","|");
  223.       gsub("~","\tilde{}");
  224.       sub(/const *$/,"");
  225.       sub(/operator */,"operator");
  226.       sub(/(/," {(");
  227.       sub(/) *$/,")}");
  228.       if ($0 !~ /(*.+)/)
  229.         { #gsub(/, */,", ");
  230.           for(i=2;i<NF;i++) sub(/, */,", ",$i);
  231.           for(i=3;i<NF;i++) 
  232.           { if ($i ~ "const") 
  233.               { j = i+1;
  234.                 sub("&","",$j);
  235.                 sub(/const */,"",$i); 
  236.                }
  237.             else
  238.               sub(/$/,"\",$i);
  239.             gsub("<","\<",$i);  # replace template brackets in parameters 
  240.             gsub(">","\>",$i);
  241.            }
  242.          }
  243.       else
  244.          for(i=3;i<NF;i++) sub(/$/,"\",$i);
  245.       sub(/operator/,"");
  246.       gsub(/&/,"\\&");
  247.       memberfunc = $0;
  248.      }
  249.  }
  250. { if ($0 ~ datatype"\(")  # constructor ?
  251.   {
  252.     gsub("_","\_");
  253.     gsub("&","");
  254.     gsub(/const */,"");
  255.     sub(/ *{.*$/,"");
  256.     sub(/::/,"doppeldoppel");
  257.     sub(/ *:.*$/,"");
  258.     sub("doppeldoppel","::");
  259.     sub(/; *$/,"");
  260.     sub(/(/," {(");
  261.     sub(/) *$/,")}");
  262.     sub(/^.*{/,"{");
  263.     sub(" ","\ ");
  264.     for(i=2;i<NF;i++) sub(/$/,"\",$i);
  265.     sub("\(\)"," ");
  266.     gsub("<","\<");
  267.     gsub(">","\>");
  268.     constargs = $0
  269.    }
  270. }