Aucune description
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

pruefung.py 4.3KB

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