No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

pruefung.py 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #!/usr/bin/python
  2. #2020-02 fp@bbw
  3. import os; # Opreating System
  4. import re;
  5. skriptPath=os.path.dirname(os.path.realpath(__file__));
  6. pruefungsAufgabenPath='../pruefungen/aufgaben';
  7. tempListe=[];
  8. def print_tex_directory_contents(sPath):
  9. tempListe=[];
  10. return print_tex_directory_contents_recursive(sPath);
  11. def print_tex_directory_contents_recursive(sPath):
  12. for sChild in os.listdir(sPath):
  13. sChildPath = os.path.join(sPath,sChild);
  14. if os.path.isdir(sChildPath):
  15. print_tex_directory_contents_recursive(sChildPath);
  16. else:
  17. if sChildPath.strip().endswith('.tex'):
  18. tempListe.append(sChildPath);
  19. return tempListe;
  20. # Woher werden die Pruefungen geholt?
  21. os.chdir("..");
  22. pruefungsListe = print_tex_directory_contents(".");
  23. tempListe=[];
  24. print ('PruefungsListe...');
  25. #print(pruefungsListe);
  26. prfgDict={}; # Alle Prffungen als Dict
  27. for pruefungsFilePath in pruefungsListe:
  28. # print pruefungsFilePath;
  29. tmp_pruefungsFile = open(pruefungsFilePath, "rt");
  30. for line in tmp_pruefungsFile.readlines():
  31. if line.startswith("\\input{P_"):
  32. print (pruefungsFilePath, "-->", line);
  33. m = re.search('./(.+?)/Pruefung', pruefungsFilePath)
  34. if m:
  35. found = m.group(1);
  36. # print found , "===>", line.strip();
  37. n = re.search('\\\\input{(.+?)}.*', line);
  38. if n:
  39. found2 = n.group(1);
  40. #print found , "***", found2;
  41. if not found in prfgDict.keys():
  42. prfgDict[found] = [];
  43. prfgDict[found].append(found2);
  44. # print prfgDict;
  45. pruefungsFragenListeStriped = [];
  46. ## Woher werden die Pruefungsaufgaben geholt?
  47. os.chdir(pruefungsAufgabenPath);
  48. pruefungsFragenListe = print_tex_directory_contents('.');
  49. for frage in pruefungsFragenListe:
  50. m = re.search('./(.+?)\.tex$', frage); ## $ eingefuegt, denn das .tex gilt nur am Zeilenende
  51. found = m.group(1)
  52. pruefungsFragenListeStriped.append(found);
  53. #skriptPath=os.path.dirname(os.path.realpath(__file__));
  54. os.chdir(skriptPath);
  55. ##
  56. ## Abkuerzungen wie _n1_ in "Niveau 1" ersetzen.
  57. ## Dafuer wird die folgende Erestzungsliste erstellt.
  58. ##
  59. textErsetzungsListe = {};
  60. ersetzFile = open('fileNameReplacements.txt', 'rt');
  61. for line in ersetzFile.readlines():
  62. aaa, bbb = line.split('=', 1);
  63. textErsetzungsListe[aaa] = " " + bbb + " \\\\\n ";
  64. #print textErsetzungsListe;
  65. ##
  66. ## Ersetze _ durch \_ fuer LaTeX
  67. def lesbar(text):
  68. return text.replace('_', '\_') ;
  69. ## Sonderzeichen in Filenamen ersetzen,
  70. ## um Verwechslungen und Probleme im LaTeX zu verhindern:
  71. def ersetzeAlle(text):
  72. for leftText in textErsetzungsListe.keys():
  73. rightText = textErsetzungsListe[leftText];
  74. text = text.replace(leftText, rightText.strip());
  75. text=text.replace('_', ' ');
  76. text=text.replace('/', '');
  77. return text;
  78. ## LaTeX generieren
  79. def alleFragenAusgeben():
  80. for prfgFragenID in sorted(pruefungsFragenListeStriped):
  81. ausgabe.write("\\section{"+lesbar(prfgFragenID)+"}\n");
  82. ## ausgabe.write("\\textbf{Filename}: \\verb|" + prfgFragenID + ".tex|\n\n");
  83. ausgabe.write("\\textbf{Input}: \\verb|\input{" + prfgFragenID + "}|\n\n");
  84. ausgabe.write("\\textbf{Beschreibung}: \\\\\n" + ersetzeAlle(prfgFragenID) + "\n\n");
  85. ausgabe.write("\\input{"+prfgFragenID + ".tex" +"}\n\n");
  86. wroteBeginItemize = 0;
  87. for prfgID in prfgDict.keys():
  88. for usedFrage in prfgDict[prfgID]:
  89. if usedFrage == prfgFragenID:
  90. if 0 == wroteBeginItemize:
  91. ausgabe.write("\\subsection{Verwendung}\n");
  92. ausgabe.write("Diese Frage wurde in folgenden Prfgs. eingesetzt.\n")
  93. ausgabe.write('\\begin{itemize}'+"\n");
  94. wroteBeginItemize = 1;
  95. ausgabe.write("\\item ")
  96. ausgabe.write(lesbar(prfgID) + "/Pruefung.tex\\\\\n");
  97. ausgabe.write(ersetzeAlle(prfgID));
  98. ausgabe.write("\n");
  99. if 1 == wroteBeginItemize:
  100. ausgabe.write('\\end{itemize}'+"\n\n\n");
  101. else:
  102. ausgabe.write("Diese Frage wurde noch nicht verwendet.\n\n");
  103. ausgabe.write('\\newpage\n');
  104. vorlage = open('pruefungsIndexVorlage.tex', 'rt');
  105. ausgabe = open('pruefungsIndex.tex', 'wt');
  106. preambel = 1;
  107. for line in vorlage.readlines():
  108. if '#CONTENT#' in line:
  109. preambel = 0;
  110. alleFragenAusgeben();
  111. else :
  112. ausgabe.write(line);
  113. print('... erstellt.')