#!/usr/bin/env python3 import readings from pprint import pprint import re, sys from escpos import escpos from sys import stdin, stderr, stdout from time import sleep import nltk from nltk.tokenize import RegexpTokenizer tokenizer = RegexpTokenizer(r'\w+') # initialize tokenizer connected = True def char_swap(some_string): swaps = [('–','-'), ('“','"'),('”','"'),('ù','u'), ("’","'"), ('à','a'), ('â','a'),('é','e'),('è','e'),('î','i')] for swap in swaps: some_string = some_string.replace(swap[0], swap[1]) #print(swap, some_string) return some_string def insert_linebreaks(string, linelength): count = 0 tmp = '' new = '' for x, ch in enumerate(string): tmp_ch = [] if ch == ' ': count = count + 1 if count < linelength: tmp += ' ' else: new += tmp + '\n' tmp = '' count = 0 elif x+1 == len(string): new += tmp + ch else: tmp += ch count += 1 #print('string <<<', string) #print('new >>>', new) return new def printNow(query, results, results_count): if connected == True: printerpath = '/dev/usb/lp1' stdout = open(printerpath, 'w') #print('printingNow') print(escpos['reset'], file=stdout, flush=True) print(escpos['init_printer'], 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['justify_center'], file=stdout, flush=True) printed = False if results_count == None or results_count == 'None': results_count = 0 results_count_max = results_count + 5 current_count = 0 for x, document in results.items(): for n, sentence in enumerate(document['matches']): #print('current_count', current_count) if current_count == results_count: printed = True if results_count < results_count_max: #print('results_count', results_count) results_count += 1 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(' ', ' ') pattern = r'[\s\W\_]'+query+r'[\s\W\_\n]|^'+query+'|'+query+'$' match = re.search(pattern, sentence, flags=re.IGNORECASE) # print('match:', match) if match: match = match.group() sentence_splitted = re.compile(match).split(sentence) # find the query in the sentence, and split the sentence up # print('sentence splitted:', sentence_splitted) for i, part in enumerate(sentence_splitted): if n == 0: # first sentence of this document if i == 0: # start of a new sentence print('', file=stdout, flush=True) linebreak = ''' ** ** /** ** //** /** ** ************** ///**//**//**/ ** /** //** // /** // // ''' print(linebreak, file=stdout, flush=True) # print line break ascii art print('\n', file=stdout, flush=True) title = insert_linebreaks(document['name'], 13) print(escpos['largefont'], title, escpos['normalfont'], file=stdout, flush=True) # print the document name print('\n', file=stdout, flush=True) # start of sentence part = insert_linebreaks(part, 35) 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 print(escpos['bold'], match, escpos['reset'], file=stdout, flush=True) # print query # line breaker after each sentence if i + 1 == len(sentence_splitted): print('\n | \n', file=stdout, flush=True) sleep(3) current_count += 1 print(escpos['paperfeed_1l'], file=stdout, flush=True) print(escpos['paperfeed_1l'], file=stdout, flush=True) print(escpos['paperfeed_1l'], file=stdout, flush=True) sleep(3) print(escpos['papercut'], file=stdout, flush=True) print(escpos['reset'], file=stdout, flush=True) # reset when all results are printed if printed == False: results_count = 0 # printNow(query, results, results_count) return results_count # query = 'noise' # results, _, _ = readings.request_results(query) # pprint(results) # printNow(query, results, 0)