Browse Source

oh no, encoding problemz

english-french
Votre Nom 5 years ago
parent
commit
c29e0654ea
  1. 4
      escpos.py
  2. 68
      printer.py
  3. 7
      start.py

4
escpos.py

@ -5,7 +5,9 @@
escpos = { escpos = {
"init_printer": "\x1B\x40", "init_printer": "\x1B\x40",
"select_international_character_set": "\x1B\x52\x00", "select_INT_character_set": "\x1B\x52\x00",
"select_FR_character_set": "\x1B\x52\x01",
"select_character_code_table": "\x1B\x74\x28",
"justify_left": "\x1B\x61\x00", "justify_left": "\x1B\x61\x00",
"justify_center": "\x1B\x61\x01", "justify_center": "\x1B\x61\x01",

68
printer.py

@ -11,58 +11,69 @@ import nltk
from nltk.tokenize import RegexpTokenizer from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer(r'\w+') # initialize tokenizer tokenizer = RegexpTokenizer(r'\w+') # initialize tokenizer
try:
printerpath = '/dev/usb/lp0' connected = True
stdout = open(printerpath, 'w')
connected = True def char_swap(some_string):
print('*receipt printer connected*') swaps = [('','-'), ('','"'),('','"'),('ù','u'), ("","'"), ('à','a'), ('â','a'),('é','e'),('è','e'),('î','i')]
except: for swap in swaps:
stdout = sys.__stdout__ some_string = some_string.replace(swap[0], swap[1])
connected = False #print(swap, some_string)
print('*no receipt printer connected*') return some_string
def insert_linebreaks(string, linelength): def insert_linebreaks(string, linelength):
words = tokenizer.tokenize(string)
count = 0 count = 0
tmp = '' tmp = ''
new = '' new = ''
for word in words: for x, ch in enumerate(string):
length = len(word) tmp_ch = []
count += len(word) if ch == ' ':
if word == words[-1]: count = count + 1
tmp += word if count < linelength:
new += tmp tmp += ' '
elif count <= linelength: else:
tmp += word + ' ' new += tmp + '\n'
tmp = ''
count = 0
elif x+1 == len(string):
new += tmp + ch
else: else:
new += tmp + '\n' tmp += ch
tmp = '' count += 1
count = 0 #print('string <<<', string)
#print('new >>>', new)
return new return new
def printNow(query, results, results_count): def printNow(query, results, results_count):
if connected == True: if connected == True:
printerpath = '/dev/usb/lp1'
stdout = open(printerpath, 'w')
#print('printingNow')
print(escpos['reset'], file=stdout, flush=True) print(escpos['reset'], file=stdout, flush=True)
print(escpos['init_printer'], file=stdout, flush=True) print(escpos['init_printer'], file=stdout, flush=True)
# print(escpos['select_international_character_set'], file=stdout, flush=True) #print(escpos['select_INT_character_set'], file=stdout, flush=True)
#print(escpos['select_character_code_table'], file=stdout, flush=True)
print(escpos['margin_left'], file=stdout, flush=True) print(escpos['margin_left'], file=stdout, flush=True)
print(escpos['justify_center'], file=stdout, flush=True) print(escpos['justify_center'], file=stdout, flush=True)
printed = False printed = False
if results_count == None: if results_count == None or results_count == 'None':
results_count = 0 results_count = 0
results_count_max = results_count + 5 results_count_max = results_count + 5
current_count = 0 current_count = 0
for x, document in results.items(): for x, document in results.items():
for n, sentence in enumerate(document['matches']): for n, sentence in enumerate(document['matches']):
print('current_count', current_count) #print('current_count', current_count)
if current_count == results_count: if current_count == results_count:
printed = True printed = True
if results_count < results_count_max: if results_count < results_count_max:
print('results_count', results_count) #print('results_count', results_count)
results_count += 1 results_count += 1
sentence = str(sentence) # Turn Flask Markup object back to normal python string sentence = str(sentence) # Turn Flask Markup object back to normal python string
print(type(sentence))
sentence = char_swap(sentence)
query = char_swap(query)
sentence = sentence.replace('\n', ' ').replace(' ', ' ') sentence = sentence.replace('\n', ' ').replace(' ', ' ')
pattern = r'[\s\W\_]'+query+r'[\s\W\_\n]|^'+query+'|'+query+'$' pattern = r'[\s\W\_]'+query+r'[\s\W\_\n]|^'+query+'|'+query+'$'
match = re.search(pattern, sentence, flags=re.IGNORECASE) match = re.search(pattern, sentence, flags=re.IGNORECASE)
@ -85,12 +96,12 @@ def printNow(query, results, results_count):
// ''' // '''
print(linebreak, file=stdout, flush=True) # print line break ascii art print(linebreak, file=stdout, flush=True) # print line break ascii art
print('\n', file=stdout, flush=True) print('\n', file=stdout, flush=True)
title = insert_linebreaks(document['name'], 40) title = insert_linebreaks(document['name'], 13)
print(title, file=stdout, flush=True) # print the document name print(escpos['largefont'], title, escpos['normalfont'], file=stdout, flush=True) # print the document name
print('\n', file=stdout, flush=True) print('\n', file=stdout, flush=True)
# start of sentence # start of sentence
part = insert_linebreaks(part, 40) part = insert_linebreaks(part, 35)
print(part, file=stdout, flush=True) # print current part of sentence print(part, file=stdout, flush=True) # print current part of sentence
if i + 1 != len(sentence_splitted): # if this part is not the last one if i + 1 != len(sentence_splitted): # if this part is not the last one
@ -116,7 +127,6 @@ def printNow(query, results, results_count):
return results_count return results_count
# query = 'noise' # query = 'noise'
# results, _, _ = readings.request_results(query) # results, _, _ = readings.request_results(query)
# pprint(results) # pprint(results)

7
start.py

@ -45,7 +45,7 @@ def index_lang(lang):
if printer.connected == True: if printer.connected == True:
connection = 'connected' connection = 'connected'
else: else:
connection = 'disconnected' connection = 'connected'
# Check if print command # Check if print command
if request.args.get('results_count', ''): if request.args.get('results_count', ''):
@ -53,17 +53,14 @@ def index_lang(lang):
print('results_count', results_count) print('results_count', results_count)
else: else:
results_count = 0 results_count = 0
if request.args.get('q', ''): if request.args.get('q', ''):
results, filenames, analytics = readings.request_results(query) results, filenames, analytics = readings.request_results(query)
# print commands # print commands
if request.args.get('print', '') == 'now': if request.args.get('print', '') == 'now':
if connection == 'connected': if connection == 'connected':
print('*print!*', file=stdout)
print('results_count (before)', results_count)
results_count = printer.printNow(query, results, results_count) results_count = printer.printNow(query, results, results_count)
print('results_count (after)', results_count)
return flask.render_template(lang+'/results.html', query=query, results=results, filenames=filenames, connection=connection, suggestions=suggestions, analytics=analytics, lang=lang, results_count=results_count) return flask.render_template(lang+'/results.html', query=query, results=results, filenames=filenames, connection=connection, suggestions=suggestions, analytics=analytics, lang=lang, results_count=results_count)

Loading…
Cancel
Save