PageRenderTime 24ms CodeModel.GetById 33ms RepoModel.GetById 1ms app.codeStats 0ms

/newlib/metod-old.awk

https://bitbucket.org/aafin/generatorzadach
AWK | 336 lines | 136 code | 170 blank | 30 comment | 0 complexity | 44f58f13885ec7df88f114707a8f1b0d MD5 | raw file
  1. ## Prefix="##{"
  2. ## Suffix="}"
  3. ## Enc="1251"
  4. ## End
  5. ##{A}
  6. ##{}
  7. function WriteTo(l){
  8. print(l) >> OutTex
  9. }
  10. function PrintOutPatch(InpF,Bl,El, line,i,lineCount,IgnoreRead){
  11. lineCount=0
  12. while ( (getline line <InpF) >0) {
  13. lineCount++;
  14. if (lineCount == Bl) WriteTo("%: "InpF":"Bl"-"El);
  15. if (lineCount >= Bl && lineCount <= El) WriteTo(line)
  16. }
  17. close(InpF);
  18. }
  19. # Печатает результат. (Файл, список начал, список концов)
  20. #
  21. function PrintOut(InpFile,ActBeginLine,ActEndLine, i,line,lineCount,IgnoreRead){
  22. IgnoreRead=1;
  23. lineCount=0
  24. while ( (getline line <InpFile) >0) {
  25. lineCount++;
  26. if (lineCount in ActBeginLine) if (ActBeginLine[lineCount] != 2){
  27. IgnoreRead = 0;
  28. WriteTo("%: "InpFile ":" lineCount)
  29. }
  30. if (lineCount in ActBeginLine) if (ActBeginLine[lineCount] == 2){
  31. PrintOutPatch(InpPatchFile,5,9);
  32. }
  33. if (lineCount in ActEndLine) IgnoreRead = 1;
  34. if (IgnoreRead) { continue; } ############
  35. WriteTo(line);
  36. }
  37. close(InpFile);
  38. }
  39. #
  40. # Читает файл. Делает списки ссылок и номеров блоков
  41. #
  42. function MkLabelAndRef(InpFile,LabelToNom,NomToArefList,NomToBrefList,NomToCrefList,NtoBb,NtoBe,\
  43. line,lineCount,IgnoreRead ) {
  44. #BlokCount=0;
  45. IgnoreRead=1;
  46. lineCount=0
  47. while ( (getline line <InpFile) >0) {
  48. lineCount++;
  49. if (line ~ /^%%B/ ) {
  50. IgnoreRead=0;
  51. BlokCount++;
  52. NtoBb[BlokCount]=lineCount;
  53. continue;
  54. }
  55. if (line ~ /^%%E/ ) {
  56. IgnoreRead=1;
  57. NtoBe[BlokCount]=lineCount;
  58. continue;
  59. }
  60. if (IgnoreRead) { continue; } ############
  61. #if (line ~ /%/ ) { sub(/%.*$/,"",line) } #!!
  62. if (line ~ "\\label{") {
  63. sub(/^.*\\label{[ \t]*/,"",line);
  64. sub(/[ \t]*}.*$/,"",line);
  65. ############################\/\/
  66. if (line in LabelToNom) LabelToOldNom[line]=LabelToNom[line]; #######!!!
  67. LabelToNom[line] = BlokCount;
  68. continue;
  69. }
  70. #if (line ~ "A") { print("222") }
  71. if (line ~ /\\aref{/) {
  72. sub(/^.*\\aref{[ \t]*/,"",line);
  73. sub(/[ \t]*}.*$/,"",line);
  74. NomToArefList[BlokCount] = NomToArefList[BlokCount] " " line;
  75. continue;
  76. }
  77. if (line ~ /\\bref{/) {
  78. sub(/^.*\\bref{[ \t]*/,"",line);
  79. sub(/[ \t]*}.*$/,"",line);
  80. NomToBrefList[BlokCount] = NomToBrefList[BlokCount] " " line;
  81. continue;
  82. }
  83. if (line ~ /\\cref{/) {
  84. sub(/^.*\\cref{[ \t]*/,"",line);
  85. sub(/[ \t]*}.*$/,"",line);
  86. NomToCrefList[BlokCount] = NomToCrefList[BlokCount] " " line;
  87. continue;
  88. }
  89. }
  90. close(InpFile);
  91. }#function
  92. #
  93. # делает список актуальных ссылок ?
  94. #
  95. function MkActualLabel(Aref,Bref,ActLabel,ltoA,ltoB, i,Empty,tmpList,tmpArr,l,tmp){
  96. do{
  97. # Очистим A и B
  98. for ( i in Aref) if ( i in ActLabel ) delete Aref[i] ;
  99. for ( i in Bref) if ( i in ActLabel ) delete Bref[i] ;
  100. for ( i in Bref) if ( i in Aref ) delete Bref[i] ;
  101. # Добавим в общий список
  102. for ( i in Aref ) ActLabel[i]=1 ;
  103. for ( i in Bref ) ActLabel[i]=1 ;
  104. # Проверим на пустоту
  105. Empty=1;
  106. for (i in Aref) if (Aref[i] != "") Empty=0;
  107. for (i in Bref) if (Bref[i] != "") Empty=0;
  108. if (Empty) break;
  109. #
  110. delete tmpList;
  111. for (i in Aref) tmpList[i]=1;
  112. for (l in tmpList ){
  113. # A+A=A
  114. split( ltoA[l] , tmpArr) ;
  115. for ( i in tmpArr) Aref[tmpArr[i]]=1
  116. #A+B=B
  117. split( ltoB[l] , tmpArr) ;
  118. for ( i in tmpArr) Bref[tmpArr[i]]=1
  119. }
  120. #
  121. delete tmpList;
  122. for (i in Bref) tmpList[i]=1;
  123. for (l in tmpList ){
  124. #B+A=B
  125. split( ltoA[l] , tmpArr) ;
  126. for ( i in tmpArr) Bref[tmpArr[i]]=1
  127. }
  128. }while(1)
  129. }
  130. BEGIN{
  131. InpFile="text.tex"
  132. InpPatchFile="text2.tex"
  133. OutTex="out.tex"
  134. print("")>OutTex;
  135. BlokCount=0;
  136. MkLabelAndRef(InpFile,LabelToNom,NomToArefList,NomToBrefList,NomToCrefList,NomToBeginLine,NomToEndLine)
  137. LastNormalBlock=BlokCount;
  138. MkLabelAndRef(InpPatchFile,LabelToNom,NomToArefList,NomToBrefList,NomToCrefList,NomToBeginLine,NomToEndLine)
  139. # прямые ссылки
  140. for (i in LabelToNom) {
  141. tmp=LabelToNom[i];
  142. if (tmp in NomToArefList) LabelToAreflist[i]=NomToArefList[tmp]
  143. if (tmp in NomToBrefList) LabelToBreflist[i]=NomToBrefList[tmp]
  144. #if (tmp in NomToCrefList) LabelToCreflist[i]=NomToCrefList[tmp]
  145. }
  146. # Стартовые метки
  147. Aref["Integr"]=1;
  148. Aref["GeoIII"]=1;
  149. delete ActLabel;
  150. MkActualLabel(Aref,Bref,ActLabel,LabelToAreflist,LabelToBreflist)
  151. # Номера строк
  152. for ( i in ActLabel) ActBeginLine[NomToBeginLine[LabelToNom[i]]]=1
  153. for ( i in ActLabel) ActEndLine[NomToEndLine[LabelToNom[i]]]=1
  154. ActBeginLine[15]=2;
  155. PrintOut(InpFile,ActBeginLine,ActEndLine)
  156. for (i in LabelToNom) print("LabelToNom", i, LabelToNom[i])
  157. for (i in NomToArefList) print("NomToArefList", i, NomToArefList[i])
  158. for (i in NomToBrefList) print("NomToBrefList", i, NomToBrefList[i])
  159. for (i in NomToCrefList) print("NomToCrefList", i, NomToCrefList[i])
  160. for (i in NomToCrefList) print("NomToCrefList", i, NomToCrefList[i])
  161. for (i in LabelToAreflist) print("LabelToAreflist", i, LabelToAreflist[i])
  162. for (i in LabelToBreflist) print("LabelToBreflist", i, LabelToBreflist[i])
  163. for (i in ActLabel) print("ActLabel", i, ActLabel[i])
  164. for (i in ActBeginLine) print("ActBeginLine", i, ActBeginLine[i])
  165. for (i in ActEndLine) print("ActEndLine", i, ActEndLine[i])
  166. }