PageRenderTime 66ms CodeModel.GetById 31ms RepoModel.GetById 1ms app.codeStats 0ms

/metod.awk

https://bitbucket.org/aafin/generatorzadach
AWK | 867 lines | 364 code | 443 blank | 60 comment | 0 complexity | 48b3594fbfdb21e807beaab8b62702ad MD5 | raw file
  1. ## Prefix="##{"
  2. ## Suffix="}"
  3. ## Enc="1251"
  4. ## End
  5. ##{A}
  6. ##{BEGIN}
  7. #function ccod(A){ return "" xcod(A,0) "" xcod(A,1)}
  8. function ccod(A, S,l){
  9. S="000000000" (CodLine(A, CodPicDef)) ;
  10. gsub(/ /,"",S);
  11. #S="000000000" xcod(A,1) ""xcod(A);
  12. l=length(S)
  13. return "m"substr(S,l-18+1,18);
  14. #return xcod(A) ;
  15. }
  16. BEGIN {
  17. ArefRegList="refh|ref|aref|apageref|pageref|arefp";
  18. BrefRegList="bref|bpageref|brefp";
  19. CrefRegList="cref|cpageref|crefp";
  20. DoPic=1;
  21. PicFline="";
  22. PicFOn=0;
  23. PicDir="picx/"
  24. ################################
  25. MkTeXExist(); #
  26. #################################
  27. OutTex="out.tex";
  28. CopyPicBat="tmpcppic.bat"
  29. #####################
  30. MetodPicDef[1]="picdef.tex";
  31. ReadJobFile(JobFile);
  32. for (i=1 ; i in MetodPicDef ; i++){
  33. tmpF=MetodPicDef[i]
  34. while ( (getline line < tmpF) >0) {
  35. #BeginTeX=BeginTeX "\n" line
  36. print(line) >"picdef.tmp"
  37. }
  38. if ( (getline line < tmpF) <0 ) Error("file " tmpF " not exist");
  39. close(tmpF);
  40. }
  41. close("picdef.tmp");
  42. CodPicDef=CodFile("picdef.tmp");
  43. #print(BeginTeX) >"picdef.tmp"
  44. BeginTeX="\\batchmode\\documentclass[a5paper]{article}\n" BeginTeX
  45. #BeginTeX="\\documentclass{article}\n" BeginTeX
  46. BeginTeX=BeginTeX "\\input{../picdef.tmp}" ;
  47. BeginTeX=BeginTeX "\n\\begin{document}\\thispagestyle{empty}"
  48. EndTeX= "\\end{document}"
  49. #InpFileList[1]="text.tex"
  50. #InpPatchFileList[1]="text2.tex"
  51. BlockCount=2;
  52. ######################
  53. GoForFiles(InpFileList , 1);
  54. BorderBlocks=BlockCount;
  55. BlockCount++;
  56. GoForFiles(InpPatchFileList , 2);
  57. #####################
  58. ####################
  59. #ActAlabel["SistUrNeskResh"]=1;
  60. MkActualBandL();
  61. for (i in ActAlabel) ActLabel[i]=1
  62. for (i in ActBlabel) ActLabel[i]=1
  63. MkActLine(ActLabel);
  64. print("") >OutTex;
  65. PrintAll()
  66. #####################
  67. #for (i in ActAlabel) print ("ActAlabel", i ,ActAlabel[i])
  68. #for (i in ActBlabel) print ("ActBlabel", i ,ActBlabel[i])
  69. #for (i in ActLabel) print ("ActLabel", i ,ActLabel[i], "Blok- " LabelToBlock[i])
  70. #for (i in ActBegin) print ("ActBegin", i ,ActBegin[i])
  71. #for (i in ActEnd) print ("ActEnd", i ,ActEnd[i])
  72. #for (i in IgnoreLine) print ("IgnoreLine", i ,IgnoreLine[i])
  73. #for (i in ActABlock) print ("ActABlock", i ,ActABlock[i])
  74. #for (i in ActBBlock) print ("ActBBlock", i ,ActBBlock[i])
  75. #for (i in BlockToFile) print ("BlockToFile", i ,BlockToFile[i])
  76. #for (i in LabelToBlock) print ("LabelToBlock", i , LabelToBlock[i])
  77. #for (i in BlockToBeginLine) print ("BlockToBeginLine", i , BlockToBeginLine[i])
  78. #for (i in BlockToEndLine) print ("BlockToEndLine", i , BlockToEndLine[i])
  79. #for (i in OldToNewBlock) print ("OldToNewBlock", i , OldToNewBlock[i])
  80. #for (i in NewToOldBlock) print ("NewToOldBlock", i , NewToOldBlock[i])
  81. #for (i in BlockToAref) print ("BlockToAref", i , BlockToAref[i])
  82. #for (i in BlockToBref) print ("BlockToBref", i , BlockToBref[i])
  83. #for (i in BlockToCref) print ("BlockToCref", i , BlockToCref[i])
  84. #for (i in PlaceRef) print ("PlaceRef", i , PlaceRef[i])
  85. }
  86. function MkTeXExist( line){
  87. if ( PicxDir != "") {
  88. while ( (getline line <PicxDir) >0) {
  89. if ( line ~ /\.tex/) {
  90. line=StripLine(line);
  91. sub(/\.tex$/,"",line);
  92. TeXExist[line]=1;
  93. # print(line);
  94. }
  95. }
  96. }
  97. }
  98. ##{}
  99. function printt(l){print(l) >> OutTex}
  100. function printX(l, ccc, f){
  101. ccc=ccod(l);
  102. if ( ccc in TeXExist ) {}
  103. else {
  104. f="" PicDir ccc ".tex";
  105. print(l) > f;
  106. close(f)
  107. }
  108. }
  109. function ForCopyPic(n, a ){
  110. print("call askpicx.bat " n " " DPI " " MAG) >CopyPicBat
  111. }
  112. ##{PrintOut}
  113. #function PrintOut(l){ print(l) >> OutTex }
  114. function PrintOut(l , i,cod,PicFLineAll){
  115. if ( DoPic == 0 ) { printt(l) }
  116. else if (l ~ /^[ \t]*%/) { printt(l) }
  117. else if (l ~ "\\\\end{PicFormula}" ) {
  118. PicFOn=0;
  119. if (MathPicF == 1) { PicFLineAll=BeginTeX "\n$%" PicFline "$\n" EndTeX }
  120. else if (MathPicF == 2) { PicFLineAll=BeginTeX "\n$$%" PicFline "$$\n" EndTeX }
  121. else { PicFLineAll=BeginTeX "\n%" PicFline "\n" EndTeX }
  122. printX(PicFLineAll) ;
  123. cod=ccod(PicFLineAll);
  124. ForCopyPic(cod);
  125. sub(/^.*\\end{PicFormula}/,"",l)
  126. if (MathPicC != 1) { printt("\\PicFormulaX{%" ( PicFline "%\n}{"cod"}" l) ) }
  127. else { printt("%%tth:\\begin{center}\n\\PicFormulaX{%" ( PicFline "%\n}{"cod"}\n%%tth:\\end{center}" l) ) };
  128. }
  129. else if (l ~ "\\\\begin{PicFormula}" ) {
  130. MathPicF=0;
  131. MathPicC=0;
  132. if (l ~ /\[M\]/) { MathPicF=2 }
  133. else if (l ~ /\[m\]/) { MathPicF=1 }
  134. else if (l ~ /\[c\]/) { MathPicC=1 }
  135. else if (l ~ /\[C\]/) { MathPicC=1 }
  136. PicFOn=1;
  137. PicFline="";
  138. }
  139. else {
  140. if (PicFOn) PicFline=PicFline "\n" l;
  141. else printt(l)
  142. }
  143. }
  144. ##{ReadJobFile}
  145. function ReadJobFile(JF, line,Arr,i,n){
  146. while ( (getline line <JF) >0) {
  147. if ( line ~ /^MetodPic/ ) {
  148. DoPic=1; # пока пусть так
  149. sub(/^MetodPic/,"",line);
  150. line=StripLine(line);
  151. if (line == "") {
  152. DoPic=1; DPI=150; MAG=0.666;
  153. }
  154. else if ( (0+line) == 0) { DoPic=0;
  155. }
  156. else {
  157. split(line,tmpArr);
  158. DoPic=1;
  159. DPI=0+tmpArr[1];
  160. MAG=0+tmpArr[2];
  161. if (MAG == 0) MAG=1;
  162. }
  163. }
  164. if ( line ~ /^MetodMain/ ) {
  165. sub(/^MetodMain/,"",line);
  166. line=StripLine(line);
  167. if (line == "") {
  168. line="ru-mta.tex";
  169. Warning("Main is ru-mta.tex");
  170. }
  171. MkScript(line,"starttex.tmp")
  172. }
  173. if ( line ~ /MetodUrl/ ) {
  174. sub(/^MetodUrl/,"",line);
  175. line=StripLine(line);
  176. MetodUrl=line;# Голобальная
  177. }
  178. if ( line ~ /^MetodDefPic/ ) {
  179. sub(/^MetodDefPic/,"",line);
  180. n=split(line,Arr);
  181. for ( i = 1 ; i<=n ; i++) {
  182. MetodPicDef[i]=Arr[i]
  183. }
  184. }
  185. if ( line ~ /MetodFiles/ ) {
  186. sub(/^MetodFiles/,"",line);
  187. n=split(line,Arr);
  188. if (n == 0) {
  189. DefoultInpFileList("ru-mall.tex","InpAndFN",InpFileList) ;
  190. Warning("File list from ru-mall.tex");
  191. }
  192. else {
  193. for ( i = 1 ; i<=n ; i++) {
  194. InpFileList[i]=Arr[i]
  195. }
  196. }
  197. }
  198. if ( line ~ /MetodDopFiles/ ) {
  199. sub(/^MetodDopFiles/,"",line);
  200. n=split(line,Arr);
  201. for ( i = 1 ; i<=n ; i++) {
  202. InpPatchFileList[i]=Arr[i]
  203. Warning("Patch file "Arr[i]);
  204. }
  205. }
  206. # ActAlabel["SistUrNeskResh"]=1;
  207. if ( line ~ /MetodLabel/ ) {
  208. sub(/^MetodLabel/,"",line);
  209. n=split(line,Arr);
  210. for ( i = 1 ; i<=n ; i++) {
  211. ActAlabel[Arr[i]]=1
  212. }
  213. }
  214. }
  215. }
  216. #DefoultInpFileList("ru-mall.tex","InpAndFN",InpFileList)
  217. function DefoultInpFileList(F,S,Arr, i,j,line,n,tmp ){
  218. n=0;
  219. while ((getline line <F) >0){
  220. if (line ~ ("^\\\\"S) ) {
  221. sub("^\\\\"S".*{","",line);
  222. sub( /}.*$/,"",line);
  223. line = StripLine(line);
  224. if ((getline tmp <line) >=0 ) {
  225. close(line);
  226. n++;
  227. Arr[n]=line;
  228. Warning("File "line" will be used")
  229. }
  230. }
  231. }
  232. if ((getline line <F) <0) Error("File "F" not exist")
  233. close(F);
  234. }
  235. function MkScript(FromFl,SriptFl, Line, Ok ){
  236. Ok=0;
  237. print("set MyUrl="MetodUrl) >SriptFl;
  238. while ( (getline line <FromFl) >0) {
  239. if ( line ~ /^[ \t]*BeginMetodTransleteScript/ ) { Ok=1; continue;}
  240. if ( line ~ /^[ \t]*EndMetodTransleteScript/ ) { Ok=0; continue;}
  241. if (Ok==1) {
  242. print(line) >>SriptFl;
  243. }
  244. }
  245. }
  246. ##{GoForFiles}
  247. function GoForFiles(List,Tip, i ) {
  248. for (i=1 ; i in List ; i++) ReadFiles(List[i],Tip)
  249. }
  250. ##{ReadFiles}
  251. function ReadFiles(InpFile,Tip, IgnoreRead,lineCount,line){
  252. IgnoreRead=1;
  253. lineCount=0
  254. while ( (getline line <InpFile) >0) {
  255. lineCount++;
  256. if (line ~ /bblock/ ) {
  257. if ( !IgnoreRead) BlockToEndLine[BlockCount]=lineCount-1; #??
  258. IgnoreRead=0;
  259. BlockCount++;
  260. BlockToFile[BlockCount]=InpFile;
  261. BlockToBeginLine[BlockCount]=lineCount;
  262. continue;
  263. }
  264. if (IgnoreRead) { continue; } ############
  265. if (line ~ /eblock/ ) {
  266. IgnoreRead=1;
  267. BlockToEndLine[BlockCount]=lineCount;
  268. continue;
  269. }
  270. if (line ~ /^[ \t]*%/ ) { continue; }
  271. if (line ~ "\\\\label{") {
  272. sub(/^.*\\label{[ \t]*/,"",line);
  273. sub(/[ \t]*}.*$/,"",line);
  274. if (Tip == 1) {
  275. if (line in LabelToBlock) Error("Duble Label "line" in "InpFile" in "lineCount )
  276. LabelToBlock[line] = BlockCount;
  277. }
  278. if (Tip == 2) {
  279. if ( !(line in LabelToBlock)) Error("Unknown Label "line" in "InpFile" in "lineCount )
  280. OldToNewBlock[LabelToBlock[line]] = BlockCount;
  281. NewToOldBlock[BlockCount] = LabelToBlock[line]
  282. LabelToBlock[line] = BlockCount;
  283. }
  284. continue;
  285. }
  286. ############
  287. if ( line ~ "\\\\("ArefRegList"){") {
  288. sub("^.*\\\\(" ArefRegList "){[ \t]*","",line);
  289. sub(/[ \t]*}.*$/,"",line);
  290. BlockToAref[BlockCount] = BlockToAref[BlockCount] " " line
  291. PlaceRef[lineCount "," InpFile] = line;
  292. continue;
  293. }
  294. if ( line ~ "\\\\("BrefRegList"){") {
  295. sub("^.*\\\\(" BrefRegList "){[ \t]*","",line);
  296. sub(/[ \t]*}.*$/,"",line);
  297. BlockToBref[BlockCount] = BlockToBref[BlockCount] " " line
  298. PlaceRef[lineCount "," InpFile] = line;
  299. continue;
  300. }
  301. if ( line ~ "\\\\("CrefRegList"){") {
  302. sub("^.*\\\\(" CrefRegList "){[ \t]*","",line);
  303. sub(/[ \t]*}.*$/,"",line);
  304. BlockToCref[BlockCount] = BlockToCref[BlockCount] " " line
  305. PlaceRef[lineCount "," InpFile] = line;
  306. continue;
  307. }
  308. }#while
  309. if ((getline line <InpFile) <0) Warning("File "InpFile" not exist")
  310. close(InpFile);
  311. }
  312. ##{MkActualBandL}
  313. function MkActualBandL( i,n,l,Blk,Arr,Enough){
  314. do{
  315. Enough=1;
  316. for ( i in ActAlabel ){
  317. Blk=LabelToBlock[i];
  318. ActABlock[Blk]=1;
  319. }
  320. for ( i in ActBlabel ){
  321. Blk=LabelToBlock[i];
  322. ActBBlock[Blk]=1;
  323. }
  324. for ( n in ActABlock) {
  325. split(BlockToAref[n],Arr);
  326. for (i in Arr) {
  327. l=Arr[i];
  328. if ( !(l in ActAlabel) ) {Enough=0; ActAlabel[l]=1; }
  329. }
  330. split(BlockToBref[n],Arr);
  331. for (i in Arr) {
  332. l=Arr[i];
  333. if ( !(l in ActBlabel) ) {Enough=0; ActBlabel[l]=1; }
  334. }
  335. }
  336. for ( n in ActBBlock) {
  337. split(BlockToAref[n],Arr);
  338. for (i in Arr) {
  339. l=Arr[i];
  340. if ( !(l in ActBlabel) ) {Enough=0; ActBlabel[l]=1; }
  341. }
  342. }
  343. if (Enough) break;
  344. }while(1)
  345. #for ( i in ActABlock ) if ( i in ActBBlock) delete ActBBlock[i]
  346. #for ( i in ActAlabel ) if ( i in ActBlabel) delete ActBlabel[i]
  347. }
  348. ##{MkActLine}
  349. function MkActLine(ActLabel, ActB,AllActLabel,i,l,n,nn,Bl,El,Fl){
  350. for(l in ActLabel) {
  351. n=LabelToBlock[l];
  352. ActB[n]=1;
  353. }
  354. for ( n in ActB){
  355. if (n in NewToOldBlock) {
  356. nn=NewToOldBlock[n];
  357. Bl=BlockToBeginLine[nn];
  358. El=BlockToEndLine[nn];
  359. Fl=BlockToFile[nn];
  360. rez=n
  361. }
  362. else {
  363. Bl=BlockToBeginLine[n];
  364. El=BlockToEndLine[n];
  365. Fl=BlockToFile[n];
  366. rez=1;
  367. }
  368. ActBegin[Bl","Fl]=rez;
  369. ActEnd[El","Fl]=1; # !!!!!!!!!!!!
  370. }
  371. for (l in LabelToBlock) if (LabelToBlock[l] in ActB) AllActLabel[l]=1
  372. for (i in PlaceRef) if ( !(PlaceRef[i] in AllActLabel) ) IgnoreLine[i]=1
  373. }
  374. ##{PrintBlock}
  375. function PrintBlock(n, B,E,F,line,lineCount){
  376. lineCount=0;
  377. B=BlockToBeginLine[n];
  378. E=BlockToEndLine[n];
  379. F=BlockToFile[n];
  380. #print(B,E,F)
  381. PrintOut("% " B "-" E " "F)
  382. PrintOut("\\TuT{"F"}{"B"}")
  383. while ( (getline line <F) >0) {
  384. lineCount++;
  385. #if (lineCount == B) line="\\bblock{"F": "B"}"
  386. #if (lineCount == E) line="\\eblock{"F": "E"}"
  387. if( lineCount >= B && lineCount <= E && !( (lineCount "," F) in IgnoreLine ) ) PrintOut(line)
  388. }
  389. close(F)
  390. }
  391. ##{PrintAll}
  392. function PrintAll(NomFile,F,line,lineCount,YesPrint,tmp,Ptmp,n){
  393. for(NomFile=1 ; NomFile in InpFileList ; NomFile++) {
  394. F=InpFileList[NomFile];
  395. lineCount=0;
  396. YesPrint=0;
  397. while ( (getline line <F) >0) {
  398. lineCount++;
  399. tmp=""lineCount","F;
  400. Ptmp="\\TuT{"F"}{"lineCount"}";
  401. if ( tmp in ActBegin ) {
  402. n=ActBegin[tmp]
  403. if ( n == 1) {
  404. YesPrint=1
  405. PrintOut("%"Ptmp)
  406. }
  407. else { PrintBlock(n) }
  408. }
  409. if (YesPrint) {
  410. if (line ~ /[ \t]*\\TuT/) sub(/\\TuT/,Ptmp,line);
  411. if ( (tmp in IgnoreLine)) { PrintOut("% ignor ref % "line); }
  412. else {PrintOut(line);}
  413. }
  414. if ( (tmp) in ActEnd ) {
  415. PrintOut(Ptmp)
  416. YesPrint=0;
  417. }
  418. }
  419. close(F)
  420. }
  421. }
  422. ##{}