format_old.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. # GRUPPO DI TEST: la formattazione
  2. # %%
  3. #
  4. # TEST A: uso il pacchetto-query così com'è dentro l'app Flask,
  5. # ma senza tirare su tutta l'applicazione:
  6. # una verifica dell'implementazione della piattaforma come
  7. # 'ecosistema' di pacchetti indipendenti
  8. import interface_sqlite3.query_handlers as qh
  9. dbPath1 = '../../db/first_db'
  10. dbPath2 = '../../db/ndg2.gat4/'
  11. qh1 = qh.queryHandlerBasicSqlite({'dbPath': dbPath1})
  12. qh2 = qh.queryHandlerBasicSqlite({'dbPath': dbPath2, 'db_encoded': True, 'texts_encoded': True})
  13. # TEST B: un test collatelare semplice.
  14. # Che informazioni ci sono, effettivamente, nei file codlemip.sigla?
  15. # Decodifico alcuni record scelti per verificarlo
  16. from interface_sqlite3.encdec.de_code import db_decode
  17. print( db_decode(qh2.keyRing.vettSpec, 'МҨԢЫӗЫ') )
  18. print( db_decode(qh2.keyRing.vettSpec, 'ԢÐ') )
  19. print( db_decode(qh2.keyRing.vettSpec, 'МѢ') )
  20. print( db_decode(qh2.keyRing.vettSpec, 'ӎӗЫӎÐ') )
  21. print( db_decode(qh2.keyRing.vettSpec, '˻˥˼ϩӗӲÐМЫӲÐ') )
  22. # %%
  23. # Conclusione del TEST B: apparentemente non c'è nulla che non sia
  24. # già nei file in chiaro lemmi.sigla.txt -- buono!
  25. # %%
  26. ##########################################################
  27. # FUNZIONI DI APPOGGIO, DA IMPLEMENTARE NEI QUERY HANDLERS
  28. ##########################################################
  29. # Due funzioncine che beccano i primi 4 bit di un intero -- utility per
  30. # recuperare la formattazione così come codificata nei file ftxt
  31. def fourBits(num):
  32. pre = num
  33. a = str(pre % 2)
  34. pre = pre // 2
  35. b = str(pre % 2)
  36. pre = pre // 2
  37. c = str(pre % 2)
  38. pre = pre // 2
  39. d = str(pre % 2)
  40. return d + c + b + a
  41. #
  42. def fourBitsB(num):
  43. aa = bin(num)
  44. return aa[2:].rjust(4, "0")[-4:]
  45. # To be tested for efficiency? Maybe later!
  46. ####
  47. # Legenda: le formattazioni dal Techman. Ricordarsi che sono additive!
  48. '''
  49. 0 = nessuna formattazione presente
  50. 1 = grassetto
  51. 2 = corsivo
  52. 4 = sottolineato
  53. 8 = barrato.
  54. '''
  55. # Trasformare la stringa di bit corrispondente ad un inter
  56. # in un oggetto parlante, secondo la legenda sopra
  57. def bitToFormat(str4):
  58. return {'grassetto': str4[-1], 'corsivo': str4[-2], 'sottolineato': str4[-3], 'barrato': str4[-4]}
  59. print( fourBits(0) )
  60. print( fourBitsB(0) )
  61. print( bitToFormat(fourBitsB(0)) )
  62. print( fourBits(15) )
  63. print( fourBitsB(15) )
  64. print( bitToFormat(fourBits(15)) )
  65. print( fourBits(2) )
  66. print( fourBitsB(2) )
  67. print( bitToFormat(fourBitsB(2)) )
  68. print( fourBits(3) )
  69. print( fourBitsB(3) )
  70. print( bitToFormat(fourBitsB(3)) )
  71. print( fourBits(32413654647) )
  72. print( fourBitsB(32413654647) )
  73. print( bitToFormat(fourBitsB(32413654647)) )
  74. # %%
  75. # Funzione per recuperare le formattazioni 'raw'
  76. def getTextFormattingRaw(dbPath, sigla, minChar, maxChar):
  77. with open(f"{dbPath}/ftxt/{sigla}", 'rb') as file1:
  78. file1.seek(minChar-1)
  79. preFormats = [char for char in file1.read(maxChar-minChar)]
  80. return preFormats
  81. # Recupero la formattazione 'raw' di un testo completo (o quasi)
  82. # mettendo un valore alto per maxChar, per cercare formattazioni non banali
  83. siglaTest = 'alm'
  84. test = getTextFormattingRaw(dbPath2, siglaTest, 1, 500000)
  85. for ind, val in enumerate(test):
  86. if val>0:
  87. print(ind, val)
  88. # %%
  89. # La funzione finale per recuperare le formattazioni,
  90. # messe 'in bella'
  91. def getTextFormatting(dbPath, sigla, minChar, maxChar):
  92. with open(f"{dbPath}/ftxt/{sigla}", 'rb') as file1:
  93. file1.seek(minChar-1)
  94. preFormats = [char for char in file1.read(maxChar-minChar)]
  95. # Get format CHANGES + first format; only return non-zero format sequences
  96. formatChanges = [(0, preFormats[0])] + [(ind, preFormats[ind]) for ind in range(1, len(preFormats)) if preFormats[ind]!=preFormats[ind-1]]
  97. formats = []
  98. for ind, form in enumerate(formatChanges):
  99. if form[1]>0:
  100. format0 = bitToFormat(fourBits(form[1]))
  101. start = form[0]
  102. end = formatChanges[ind+1][0] if ind < len(formatChanges)-1 else -1
  103. formats.append( {'format': format0, 'coordinates': [start, end]} )
  104. return formats
  105. # TEST C -- il test principale, avendo recuperato a parte una sigla ed un range
  106. # in cui c'è effettivamente una formattazione non banale
  107. test2 = qh1.textQuery({'sigla': 'aa1', 'minChar': 175, 'maxChar': 191}, True)
  108. print(test2)
  109. # %%