PageRenderTime 55ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/newlib/metod.awk

https://bitbucket.org/aafin/generatorzadach
AWK | 671 lines | 564 code | 79 blank | 28 comment | 0 complexity | 60d154a4f8a56cf46d37f33335932837 MD5 | raw file
  1. ## Prefix="##{"
  2. ## Suffix="}"
  3. ## Enc="1251"
  4. ## End
  5. ##{A}
  6. ##{BEGIN}
  7. BEGIN {
  8. PicFline="";
  9. PicFOn=0;
  10. PicDir="picx/"
  11. BeginTeX="\\batchmode\\documentclass{article}\\begin{document}\\thispagestyle{empty}"
  12. EndTeX= "\\end{document}"
  13. OutTex="out.tex";
  14. CopyPicBat="tmpcppic.bat"
  15. ReadJobFile(JobFile);
  16. #InpFileList[1]="text.tex"
  17. #InpPatchFileList[1]="text2.tex"
  18. BlockCount=2;
  19. ERR=0;
  20. GoForFiles(InpFileList , 1);
  21. BorderBlocks=BlockCount;
  22. BlockCount++;
  23. GoForFiles(InpPatchFileList , 2);
  24. #ActAlabel["SistUrNeskResh"]=1;
  25. MkActualBandL();
  26. for (i in ActAlabel) ActLabel[i]=1
  27. for (i in ActBlabel) ActLabel[i]=1
  28. MkActLine(ActLabel);
  29. print("") >OutTex;
  30. PrintAll()
  31. #for (i in ActAlabel) print ("ActAlabel", i ,ActAlabel[i])
  32. #for (i in ActBlabel) print ("ActBlabel", i ,ActBlabel[i])
  33. #for (i in ActLabel) print ("ActLabel", i ,ActLabel[i], "Blok- " LabelToBlock[i])
  34. #for (i in ActBegin) print ("ActBegin", i ,ActBegin[i])
  35. #for (i in ActEnd) print ("ActEnd", i ,ActEnd[i])
  36. #for (i in IgnoreLine) print ("IgnoreLine", i ,IgnoreLine[i])
  37. #for (i in ActABlock) print ("ActABlock", i ,ActABlock[i])
  38. #for (i in ActBBlock) print ("ActBBlock", i ,ActBBlock[i])
  39. #for (i in BlockToFile) print ("BlockToFile", i ,BlockToFile[i])
  40. #for (i in LabelToBlock) print ("LabelToBlock", i , LabelToBlock[i])
  41. #for (i in BlockToBeginLine) print ("BlockToBeginLine", i , BlockToBeginLine[i])
  42. #for (i in BlockToEndLine) print ("BlockToEndLine", i , BlockToEndLine[i])
  43. #for (i in OldToNewBlock) print ("OldToNewBlock", i , OldToNewBlock[i])
  44. #for (i in NewToOldBlock) print ("NewToOldBlock", i , NewToOldBlock[i])
  45. #for (i in BlockToAref) print ("BlockToAref", i , BlockToAref[i])
  46. #for (i in BlockToBref) print ("BlockToBref", i , BlockToBref[i])
  47. #for (i in BlockToCref) print ("BlockToCref", i , BlockToCref[i])
  48. #for (i in PlaceRef) print ("PlaceRef", i , PlaceRef[i])
  49. }
  50. ##{}
  51. function Eror(Mess){
  52. ERR=1;
  53. print(Mess);
  54. exit;
  55. }
  56. function printt(l){print(l) >> OutTex}
  57. function printX(l, f){
  58. f="" PicDir ccod(l)".tex";
  59. print(l) > f;
  60. close(f)
  61. }
  62. function ForCopyPic(n, a ){
  63. print("copy picx\\" n ".png .") >CopyPicBat
  64. }
  65. ##{PrintOut}
  66. #function PrintOut(l){ print(l) >> OutTex }
  67. function PrintOut(l , i,cod){
  68. if (l ~ "\\\\end{PicFormula}" ) {
  69. PicFOn=0;
  70. PicFline=PicFline "\n" EndTeX;
  71. printX(PicFline) ;
  72. cod=ccod(PicFline);
  73. ForCopyPic(cod);
  74. printt("}{"cod"}")
  75. }
  76. else if (l ~ "\\\\begin{PicFormula}" ) {
  77. PicFOn=1;
  78. PicFline=BeginTeX ;
  79. printt("\\PicFormula{%")
  80. }
  81. else {
  82. printt(l)
  83. if (PicFOn) PicFline=PicFline "\n" l;
  84. }
  85. }
  86. ##{ReadJobFile}
  87. function ReadJobFile(JF, line,Arr,i,n){
  88. while ( (getline line <JF) >0) {
  89. if ( line ~ /MetodFiles/ ) {
  90. sub(/.*MetodFiles/,"",line);
  91. n=split(line,Arr);
  92. for ( i = 1 ; i<=n ; i++) {
  93. InpFileList[i]=Arr[i]
  94. }
  95. }
  96. if ( line ~ /MetodDopFiles/ ) {
  97. sub(/.*MetodDopFiles/,"",line);
  98. n=split(line,Arr);
  99. for ( i = 1 ; i<=n ; i++) {
  100. InpPatchFileList[i]=Arr[i]
  101. }
  102. }
  103. # ActAlabel["SistUrNeskResh"]=1;
  104. if ( line ~ /MetodLabel/ ) {
  105. sub(/.*MetodLabel/,"",line);
  106. n=split(line,Arr);
  107. for ( i = 1 ; i<=n ; i++) {
  108. ActAlabel[Arr[i]]=1
  109. }
  110. }
  111. }
  112. }
  113. ##{GoForFiles}
  114. function GoForFiles(List,Tip, i ) {
  115. for (i=1 ; i in List ; i++) ReadFiles(List[i],Tip)
  116. }
  117. ##{ReadFiles}
  118. function ReadFiles(InpFile,Tip, IgnoreRead,lineCount,line){
  119. IgnoreRead=1;
  120. lineCount=0
  121. while ( (getline line <InpFile) >0) {
  122. lineCount++;
  123. if (line ~ /bblock/ ) {
  124. if ( !IgnoreRead) BlockToEndLine[BlockCount]=lineCount-1; #??
  125. IgnoreRead=0;
  126. BlockCount++;
  127. BlockToFile[BlockCount]=InpFile;
  128. BlockToBeginLine[BlockCount]=lineCount;
  129. continue;
  130. }
  131. if (IgnoreRead) { continue; } ############
  132. if (line ~ /eblock/ ) {
  133. IgnoreRead=1;
  134. BlockToEndLine[BlockCount]=lineCount;
  135. continue;
  136. }
  137. if (line ~ /^[ \t]*%/ ) { continue; }
  138. if (line ~ "\\\\label{") {
  139. sub(/^.*\\label{[ \t]*/,"",line);
  140. sub(/[ \t]*}.*$/,"",line);
  141. if (Tip == 1) {
  142. if (line in LabelToBlock) Eror("Duble Label "line" in "InpFile" in "lineCount )
  143. LabelToBlock[line] = BlockCount;
  144. }
  145. if (Tip == 2) {
  146. if ( !(line in LabelToBlock)) Eror("Unknown Label "line" in "InpFile" in "lineCount )
  147. OldToNewBlock[LabelToBlock[line]] = BlockCount;
  148. NewToOldBlock[BlockCount] = LabelToBlock[line]
  149. LabelToBlock[line] = BlockCount;
  150. }
  151. continue;
  152. }
  153. if (line ~ /\\aref.*{/) {
  154. sub(/^.*\\aref[^{]*{[ \t]*/,"",line);
  155. sub(/[ \t]*}.*$/,"",line);
  156. BlockToAref[BlockCount] = BlockToAref[BlockCount] " " line
  157. PlaceRef[lineCount "," InpFile] = line;
  158. continue;
  159. }
  160. if (line ~ /\\bref.*{/) {
  161. sub(/^.*\\bref[^{]*{[ \t]*/,"",line);
  162. sub(/[ \t]*}.*$/,"",line);
  163. BlockToBref[BlockCount] = BlockToBref[BlockCount] " " line
  164. PlaceRef[lineCount "," InpFile] = line;
  165. continue;
  166. }
  167. if (line ~ /\\cref.*{/) {
  168. sub(/^.*\\cref[^{]*{[ \t]*/,"",line);
  169. sub(/[ \t]*}.*$/,"",line);
  170. BlockToCref[BlockCount] = BlockToCref[BlockCount] " " line
  171. PlaceRef[lineCount "," InpFile] = line;
  172. continue;
  173. }
  174. }
  175. close(InpFile);
  176. }
  177. ##{MkActualBandL}
  178. function MkActualBandL( i,n,l,Blk,Arr,Enough){
  179. do{
  180. Enough=1;
  181. for ( i in ActAlabel ){
  182. Blk=LabelToBlock[i];
  183. ActABlock[Blk]=1;
  184. }
  185. for ( i in ActBlabel ){
  186. Blk=LabelToBlock[i];
  187. ActBBlock[Blk]=1;
  188. }
  189. for ( n in ActABlock) {
  190. split(BlockToAref[n],Arr);
  191. for (i in Arr) {
  192. l=Arr[i];
  193. if ( !(l in ActAlabel) ) {Enough=0; ActAlabel[l]=1; }
  194. }
  195. split(BlockToBref[n],Arr);
  196. for (i in Arr) {
  197. l=Arr[i];
  198. if ( !(l in ActBlabel) ) {Enough=0; ActBlabel[l]=1; }
  199. }
  200. }
  201. for ( n in ActBBlock) {
  202. split(BlockToAref[n],Arr);
  203. for (i in Arr) {
  204. l=Arr[i];
  205. if ( !(l in ActBlabel) ) {Enough=0; ActBlabel[l]=1; }
  206. }
  207. }
  208. if (Enough) break;
  209. }while(1)
  210. #for ( i in ActABlock ) if ( i in ActBBlock) delete ActBBlock[i]
  211. #for ( i in ActAlabel ) if ( i in ActBlabel) delete ActBlabel[i]
  212. }
  213. ##{MkActLine}
  214. function MkActLine(ActLabel, ActB,AllActLabel,i,l,n,nn,Bl,El,Fl){
  215. for(l in ActLabel) {
  216. n=LabelToBlock[l];
  217. ActB[n]=1;
  218. }
  219. for ( n in ActB){
  220. if (n in NewToOldBlock) {
  221. nn=NewToOldBlock[n];
  222. Bl=BlockToBeginLine[nn];
  223. El=BlockToEndLine[nn];
  224. Fl=BlockToFile[nn];
  225. rez=n
  226. }
  227. else {
  228. Bl=BlockToBeginLine[n];
  229. El=BlockToEndLine[n];
  230. Fl=BlockToFile[n];
  231. rez=1;
  232. }
  233. ActBegin[Bl","Fl]=rez;
  234. ActEnd[El","Fl]=1;
  235. }
  236. for (l in LabelToBlock) if (LabelToBlock[l] in ActB) AllActLabel[l]=1
  237. for (i in PlaceRef) if ( !(PlaceRef[i] in AllActLabel) ) IgnoreLine[i]=1
  238. }
  239. ##{PrintBlock}
  240. function PrintBlock(n, B,E,F,line,lineCount){
  241. lineCount=0;
  242. B=BlockToBeginLine[n];
  243. E=BlockToEndLine[n];
  244. F=BlockToFile[n];
  245. #print(B,E,F)
  246. PrintOut("% " B "-" E " "F)
  247. while ( (getline line <F) >0) {
  248. lineCount++;
  249. if( lineCount >= B && lineCount <= E && !( (lineCount "," F) in IgnoreLine ) ) PrintOut(line)
  250. }
  251. close(F)
  252. }
  253. ##{PrintAll}
  254. function PrintAll(NomFile,F,line,lineCount,YesPrint,tmp,n){
  255. for(NomFile=1 ; NomFile in InpFileList ; NomFile++) {
  256. F=InpFileList[NomFile];
  257. lineCount=0;
  258. YesPrint=0;
  259. while ( (getline line <F) >0) {
  260. lineCount++;
  261. tmp=""lineCount","F;
  262. if ( tmp in ActBegin ) {
  263. n=ActBegin[tmp]
  264. if ( n == 1) {
  265. YesPrint=1
  266. PrintOut("% "tmp)
  267. }
  268. else { PrintBlock(n) }
  269. }
  270. if (YesPrint) {
  271. if ( (tmp in IgnoreLine)) { PrintOut("% ignor ref % "line); }
  272. else {PrintOut(line);}
  273. }
  274. if ( (tmp) in ActEnd ) {
  275. YesPrint=0;
  276. }
  277. }
  278. close(F)
  279. }
  280. }
  281. ##{}
  282. #function ccod(A){ return "" xcod(A,0) "" xcod(A,1)}
  283. function ccod(A){ return "" xcod(A) }
  284. function xcod(W, Tip, i,x,Sum,A,B,Chislo,Smpl){
  285. if (Tip == "") Tip=0;
  286. Sum=0;
  287. Chislo=32768; # =2^15
  288. if (Tip == 0) Smpl=32749;
  289. else if (Tip == 1) Smpl=32771;
  290. # 65521 65536
  291. A=1; B=0;
  292. for(i=1 ; i<=length(W) ; i++) {
  293. x=substr(W,i,1);
  294. A = (A + LetterToNom[x]) % Smpl ;
  295. B = (B + A) % Smpl ;
  296. #Sum=(Sum+LetterToNom[x]*1111111111)%100000001;
  297. #Sum=(Sum+LetterToNom[x]*i*1100011000)%100000001;
  298. }
  299. return (B * Chislo + A);
  300. }
  301. BEGIN { ###htmbegin
  302. ##nach=systime();
  303. Strr= "";
  304. Strr= Strr "\000\001\002\003\004\005\006\007";
  305. Strr= Strr "\010\011\012\013\014\015\016\017";
  306. Strr= Strr "\020\021\022\023\024\025\026\027";
  307. Strr= Strr "\030\031\032\033\034\035\036\037";
  308. Strr= Strr "\040\041\042\043\044\045\046\047";
  309. Strr= Strr "\050\051\052\053\054\055\056\057";
  310. Strr= Strr "\060\061\062\063\064\065\066\067";
  311. Strr= Strr "\070\071\072\073\074\075\076\077";
  312. Strr= Strr "\100\101\102\103\104\105\106\107";
  313. Strr= Strr "\110\111\112\113\114\115\116\117";
  314. Strr= Strr "\120\121\122\123\124\125\126\127";
  315. Strr= Strr "\130\131\132\133\134\135\136\137";
  316. Strr= Strr "\140\141\142\143\144\145\146\147";
  317. Strr= Strr "\150\151\152\153\154\155\156\157";
  318. Strr= Strr "\160\161\162\163\164\165\166\167";
  319. Strr= Strr "\170\171\172\173\174\175\176\177";
  320. Strr= Strr "\200\201\202\203\204\205\206\207";
  321. Strr= Strr "\210\211\212\213\214\215\216\217";
  322. Strr= Strr "\220\221\222\223\224\225\226\227";
  323. Strr= Strr "\230\231\232\233\234\235\236\237";
  324. Strr= Strr "\240\241\242\243\244\245\246\247";
  325. Strr= Strr "\250\251\252\253\254\255\256\257";
  326. Strr= Strr "\260\261\262\263\264\265\266\267";
  327. Strr= Strr "\270\271\272\273\274\275\276\277";
  328. Strr= Strr "\300\301\302\303\304\305\306\307";
  329. Strr= Strr "\310\311\312\313\314\315\316\317";
  330. Strr= Strr "\320\321\322\323\324\325\326\327";
  331. Strr= Strr "\330\331\332\333\334\335\336\337";
  332. Strr= Strr "\340\341\342\343\344\345\346\347";
  333. Strr= Strr "\350\351\352\353\354\355\356\357";
  334. Strr= Strr "\360\361\362\363\364\365\366\367";
  335. Strr= Strr "\370\371\372\373\374\375\376\377";
  336. #print(S);
  337. split(Strr,AllLetter,"");
  338. for (i in AllLetter) LetterToNom[AllLetter[i]]=i;
  339. Strr="";
  340. }