From 7a279f184dbd68d66912660a795e7eee071b831d Mon Sep 17 00:00:00 2001 From: manetta Date: Thu, 14 Mar 2019 16:47:54 +0100 Subject: [PATCH] new --- printer.thisone.py | 134 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100755 printer.thisone.py diff --git a/printer.thisone.py b/printer.thisone.py new file mode 100755 index 0000000..8aea103 --- /dev/null +++ b/printer.thisone.py @@ -0,0 +1,134 @@ +#!/usr/bin/env python3 + +import readings +from pprint import pprint +import re, sys, glob +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 check_printer_path(): + printers = glob.glob('/dev/usb/lp*') + if printers: + return printers[0] + else: + return None + +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]) + 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 + return new + +def printNow(query, results, results_count): + if connected == True: + printerpath = check_printer_path() + try: + print_pointer = open(printerpath, 'w') if printerpath else sys.__stdout__ + print(escpos['reset'], file=print_pointer, flush=True) + print(escpos['init_printer'], file=print_pointer, flush=True) + print(escpos['margin_left'], file=print_pointer, flush=True) + print(escpos['justify_center'], file=print_pointer, 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']): + if current_count == results_count: + printed = True + if results_count < results_count_max: + results_count += 1 + sentence = str(sentence) # Turn Flask Markup object back to normal python string + 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) + if match: + match = match.group() + sentence_splitted = re.compile(match).split(sentence) # find the query in the sentence, and split the sentence up + 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=print_pointer, flush=True) + linebreak = ''' ** + ** /** ** + //** /** ** + ************** +///**//**//**/ + ** /** //** + // /** // + // ''' + print(linebreak, file=print_pointer, flush=True) # print line break ascii art + print('\n', file=print_pointer, flush=True) + title = insert_linebreaks(document['name'], 13) + print(escpos['largefont'], title, escpos['normalfont'], file=print_pointer, flush=True) # print the document name + print('\n', file=print_pointer, flush=True) + + # start of sentence + part = insert_linebreaks(part, 35) + print(part, file=print_pointer, 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=print_pointer, flush=True) # print query + + # line breaker after each sentence + if i + 1 == len(sentence_splitted): + print('\n | \n', file=print_pointer, flush=True) + sleep(3) + current_count += 1 + + print(escpos['paperfeed_1l'], file=print_pointer, flush=True) + print(escpos['paperfeed_1l'], file=print_pointer, flush=True) + print(escpos['paperfeed_1l'], file=print_pointer, flush=True) + sleep(3) + print(escpos['papercut'], file=print_pointer, flush=True) + print(escpos['reset'], file=print_pointer, flush=True) + + # reset when all results are printed + if printed == False: + results_count = 0 + # printNow(query, results, results_count) + + return results_count + + except: + e = sys.exc_info()[0] + print("Could not print: {}".format(e)) + return 0 + +# query = 'noise' +# results, _, _ = readings.request_results(query) +# pprint(results) +# printNow(query, results, 0) \ No newline at end of file