123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- # GRUPPO DI TEST: la formattazione
- # %%
- #
- # TEST A: uso il pacchetto-query così com'è dentro l'app Flask,
- # ma senza tirare su tutta l'applicazione:
- # una verifica dell'implementazione della piattaforma come
- # 'ecosistema' di pacchetti indipendenti
- import interface_sqlite3.query_handlers as qh
- dbPath1 = '../../db/first_db'
- dbPath2 = '../../db/ndg2.gat4/'
- qh1 = qh.queryHandlerBasicSqlite({'dbPath': dbPath1})
- qh2 = qh.queryHandlerBasicSqlite({'dbPath': dbPath2, 'db_encoded': True, 'texts_encoded': True})
- # TEST B: un test collatelare semplice.
- # Che informazioni ci sono, effettivamente, nei file codlemip.sigla?
- # Decodifico alcuni record scelti per verificarlo
- from interface_sqlite3.encdec.de_code import db_decode
- print( db_decode(qh2.keyRing.vettSpec, 'МҨԢЫӗЫ') )
- print( db_decode(qh2.keyRing.vettSpec, 'ԢÐ') )
- print( db_decode(qh2.keyRing.vettSpec, 'МѢ') )
- print( db_decode(qh2.keyRing.vettSpec, 'ӎӗЫӎÐ') )
- print( db_decode(qh2.keyRing.vettSpec, '˻˥˼ϩӗӲÐМЫӲÐ') )
- # %%
- # Conclusione del TEST B: apparentemente non c'è nulla che non sia
- # già nei file in chiaro lemmi.sigla.txt -- buono!
- # %%
- ##########################################################
- # FUNZIONI DI APPOGGIO, DA IMPLEMENTARE NEI QUERY HANDLERS
- ##########################################################
- # Due funzioncine che beccano i primi 4 bit di un intero -- utility per
- # recuperare la formattazione così come codificata nei file ftxt
- def fourBits(num):
- pre = num
- a = str(pre % 2)
- pre = pre // 2
- b = str(pre % 2)
- pre = pre // 2
- c = str(pre % 2)
- pre = pre // 2
- d = str(pre % 2)
- return d + c + b + a
- #
- def fourBitsB(num):
- aa = bin(num)
- return aa[2:].rjust(4, "0")[-4:]
- # To be tested for efficiency? Maybe later!
- ####
- # Legenda: le formattazioni dal Techman. Ricordarsi che sono additive!
- '''
- 0 = nessuna formattazione presente
- 1 = grassetto
- 2 = corsivo
- 4 = sottolineato
- 8 = barrato.
- '''
- # Trasformare la stringa di bit corrispondente ad un inter
- # in un oggetto parlante, secondo la legenda sopra
- def bitToFormat(str4):
- return {'grassetto': str4[-1], 'corsivo': str4[-2], 'sottolineato': str4[-3], 'barrato': str4[-4]}
- print( fourBits(0) )
- print( fourBitsB(0) )
- print( bitToFormat(fourBitsB(0)) )
- print( fourBits(15) )
- print( fourBitsB(15) )
- print( bitToFormat(fourBits(15)) )
- print( fourBits(2) )
- print( fourBitsB(2) )
- print( bitToFormat(fourBitsB(2)) )
- print( fourBits(3) )
- print( fourBitsB(3) )
- print( bitToFormat(fourBitsB(3)) )
- print( fourBits(32413654647) )
- print( fourBitsB(32413654647) )
- print( bitToFormat(fourBitsB(32413654647)) )
- # %%
- # Funzione per recuperare le formattazioni 'raw'
- def getTextFormattingRaw(dbPath, sigla, minChar, maxChar):
- with open(f"{dbPath}/ftxt/{sigla}", 'rb') as file1:
- file1.seek(minChar-1)
-
- preFormats = [char for char in file1.read(maxChar-minChar)]
- return preFormats
- # Recupero la formattazione 'raw' di un testo completo (o quasi)
- # mettendo un valore alto per maxChar, per cercare formattazioni non banali
- siglaTest = 'alm'
- test = getTextFormattingRaw(dbPath2, siglaTest, 1, 500000)
- for ind, val in enumerate(test):
- if val>0:
- print(ind, val)
- # %%
- # La funzione finale per recuperare le formattazioni,
- # messe 'in bella'
- def getTextFormatting(dbPath, sigla, minChar, maxChar):
- with open(f"{dbPath}/ftxt/{sigla}", 'rb') as file1:
- file1.seek(minChar-1)
-
- preFormats = [char for char in file1.read(maxChar-minChar)]
-
- # Get format CHANGES + first format; only return non-zero format sequences
- formatChanges = [(0, preFormats[0])] + [(ind, preFormats[ind]) for ind in range(1, len(preFormats)) if preFormats[ind]!=preFormats[ind-1]]
- formats = []
- for ind, form in enumerate(formatChanges):
- if form[1]>0:
- format0 = bitToFormat(fourBits(form[1]))
- start = form[0]
- end = formatChanges[ind+1][0] if ind < len(formatChanges)-1 else -1
- formats.append( {'format': format0, 'coordinates': [start, end]} )
- return formats
- # TEST C -- il test principale, avendo recuperato a parte una sigla ed un range
- # in cui c'è effettivamente una formattazione non banale
- test2 = qh1.textQuery({'sigla': 'aa1', 'minChar': 175, 'maxChar': 191}, True)
- print(test2)
- # %%
|