@ -14,20 +14,42 @@ import subprocess
from subprocess import check_output
import datetime
import time
import re
class Printer ( ) :
ESC = b ' \x1B '
FORMFEED = b ' \x0C '
UNDERLINEDON = b ' \x1B ' + b ' \x2D ' + b ' \x31 '
ITALICON = b ' \x1B ' + b ' \x34 '
ITALICOFF = b ' \x1B ' + b ' \x35 '
BOLDON = b ' \x1B ' + b ' \x45 '
BOLDOFF = b ' \x1B ' + b ' \x46 '
DHON = b ' \x1B ' + b ' \x77 ' + b ' \x01 '
DHOFF = b ' \x1B ' + b ' \x77 ' + b ' \x00 '
COMPRON = b ' \x1B ' + b ' \x0f '
COMPROFF = b ' \x1B ' + b ' \x12 '
CHANGE_EMULATION = ESC + b ' \x7B ' + b ' \x65 '
LINE_FEED = b ' \n '
CARIDGE_RET = b ' \x0D '
CHARWIDTH = 78
printedheight = 0
pages = 1
strokes = 0
debug = False
debug = Tru e
target = " /dev/usb/lp0 "
if debug :
target = " /dev/tty "
def formfeed ( self ) :
with open ( self . target , ' wb ' ) as printer :
if not self . debug :
while self . checkpagebreak ( printer ) == False :
self . printedheight + = ( 44 / 216 )
printer . write ( self . LINE_FEED )
def printchar ( self , char ) :
with open ( self . target , ' wb ' ) as printer :
if self . debug :
@ -39,11 +61,13 @@ class Printer():
printer . write ( self . ESC + b " \x25 " + b " \x46 " + b " \x0F " + b " \x00 " + b " \x04 " + b " \x08 " + b " \x00 " )
self . strokes + = 1
if ( self . strokes > self . CHARWIDTH ) :
self . checkpagebreak ( printer )
self . printedheight + = ( 44 / 216 )
printer . write ( self . LINE_FEED )
self . strokes = 0
def printstring ( self , string , formating = " p " ) :
strokesinline = 0
with open ( self . target , ' wb ' ) as printer :
if self . debug :
if formating == " u " :
@ -52,10 +76,49 @@ class Printer():
printer . write ( b " \x1B " + b " \x5B " + b " \x30 " + b " \x6D " )
else :
printer . write ( bytes ( str ( string ) , ' utf-8 ' ) )
for word in re . split ( r ' ( \ s+) ' , string ) :
strokesinline + = len ( word )
if " \n " in word :
strokesinline = 0
if strokesinline > self . CHARWIDTH :
printer . write ( self . LINE_FEED )
strokesinline = len ( word )
if not ( strokesinline == 1 and word == " " ) :
printer . write ( bytes ( str ( word ) , ' utf-8 ' ) )
else :
printer . write ( self . ESC + b " \x7B " + b " \x41 " )
printer . write ( bytes ( str ( string ) , ' utf-8 ' ) )
printer . write ( self . ESC + b " \x33 " + bytes ( [ 44 ] ) ) ;
if formating == " u " :
printer . write ( self . BOLDON )
if formating == " i " :
printer . write ( self . ITALICON )
if formating == " dh " :
printer . write ( self . DHON )
if formating == " compr " :
printer . write ( self . COMPRON )
if self . printedheight > 11.69 :
printer . write ( bytes ( str ( " NEW PAGE YESY " ) , ' utf-8 ' ) ) ;
self . printedheight = 0
for word in re . split ( r ' ( \ s+) ' , string ) :
strokesinline + = len ( word )
if " \n " in word :
strokesinline = 0
self . printedheight + = ( 44 / 216 )
if strokesinline > self . CHARWIDTH :
self . checkpagebreak ( printer )
self . printedheight + = ( 44 / 216 )
printer . write ( self . LINE_FEED )
strokesinline = len ( word )
if not ( strokesinline == 1 and word == " " ) :
printer . write ( bytes ( str ( word ) , ' utf-8 ' ) )
if formating == " u " :
printer . write ( self . BOLDOFF )
if formating == " i " :
printer . write ( self . ITALICOFF )
if formating == " dh " :
printer . write ( self . DHOFF )
if formating == " compr " :
printer . write ( self . COMPROFF )
printer . write ( self . ESC + b " \x25 " + b " \x46 " + b " \x0F " + b " \x00 " + b " \x04 " + b " \x08 " + b " \x00 " )
try :
self . newline ( )
@ -66,9 +129,31 @@ class Printer():
def newline ( self ) :
global strokes
with open ( self . target , ' wb ' ) as printer :
printer . write ( self . LINE_FEED )
self . strokes = 0
if not self . debug :
self . checkpagebreak ( printer )
printer . write ( self . ESC + b " \x33 " + bytes ( [ 44 ] ) ) ;
self . printedheight + = ( 44 / 216 )
printer . write ( self . LINE_FEED )
self . strokes = 0
def checkpagebreak ( self , printer ) :
if self . printedheight + ( 44 / 216 ) * 4 > 11.69 :
printer . write ( self . LINE_FEED )
printer . write ( self . LINE_FEED )
printer . write ( bytes ( str ( " PAGE " + str ( self . pages ) ) , ' utf-8 ' ) ) ;
printer . write ( self . ESC + b " \x33 " + bytes ( [ 44 ] ) ) ;
printer . write ( self . LINE_FEED )
printer . write ( self . LINE_FEED )
printer . write ( self . LINE_FEED )
printer . write ( self . COMPRON )
printer . write ( bytes ( str ( " ------------------------------------------------------ POETIC SOFTWARE PUBLICATION ----------------------------------------------------- " ) , ' utf-8 ' ) ) ;
printer . write ( self . COMPROFF )
printer . write ( self . LINE_FEED )
self . printedheight = ( 44 / 216 )
self . pages + = 1
return True
else :
return False
def printimagefromurl ( self , url ) :
page = requests . get ( url )
@ -77,11 +162,26 @@ class Printer():
with open ( f_name , ' wb ' ) as f :
f . write ( page . content )
if printer . debug :
if self . debug :
rows , columns = os . popen ( ' stty size ' , ' r ' ) . read ( ) . split ( )
subprocess . call ( [ " catimg " , " -w " , columns , f_name ] )
#subprocess.call(["catimg","-w",columns,f_name])
subprocess . call ( [ " feh " , f_name ] )
else :
imagelines = imageprinter . print ( f_name , True )
isodd = False
if imagelines % 2 == 1 :
isodd = True
imagelines + = 1
if self . printedheight + ( 22 / 216 ) * imagelines + ( 44 / 216 ) * 4 > 11.69 :
self . formfeed ( )
self . printedheight + = ( 22 / 216 ) * imagelines
imageprinter . print ( f_name )
if isodd :
with open ( ' /dev/usb/lp0 ' , ' wb ' ) as printer :
printer . write ( ESC + b " \x33 " + bytes ( [ 22 ] ) ) ;
printer . write ( self . LINE_FEED )
printer . write ( ESC + b " \x33 " + bytes ( [ 44 ] ) ) ;
@ -96,6 +196,7 @@ class Terminal():
" list " : " list theses and exercises " ,
" exercise <number> " : " see the exercise with the <number> specified " ,
" thesis <number> " : " see the thesis with the <number> specified " ,
" whois <person> " : " get biography of person given " ,
" exit " : " finish the publication " ,
}
@ -176,6 +277,9 @@ class Terminal():
elif " start " == str ( command ) or " restart " == str ( command ) :
main ( )
elif " ff " == str ( command ) :
printer . formfeed ( )
elif str ( command ) . split ( " " ) [ 0 ] == " exercise " or str ( command ) . split ( " " ) [ 0 ] == " thesis " :
part = str ( command ) . split ( " " ) [ 0 ]
arguments = str ( command . strip ( ) ) . split ( " " )
@ -233,7 +337,8 @@ class Terminal():
persons = {
" Kittler " : " Friedrich A. Kittler (June 12, 1943 – October 18, 2011) was a literary scholar and a media theorist. His works relate to media, technology, and the military. " ,
" Alex " : " Alexander Roidl created Poetic Software as part of his Master ' s thesis "
" Alex " : " Alexander Roidl created Poetic Software as part of his Master ' s thesis. " ,
" Jule " : " Jule Ulrych is an evironmental activist and passionate vegan food lover living in Den Haag. "
}
printer = Printer ( )
term = Terminal ( printer , persons )
@ -241,24 +346,26 @@ now = datetime.datetime.now()
def main ( ) :
term . waittostart ( )
printer . printstring ( " W E L C O M E ! " )
printer . newline ( )
#printimagefromurl('https://apod.nasa.gov/apod/image/1701/potw1636aN159_HST_2048.jpg')
printer . printstring ( now . strftime ( " % Y- % m- %d % H: % M " ) )
printer . printstring ( " W E L C O M E ! " , " dh " )
printer . newline ( )
printer . printstring ( " --------------- " )
printer . printstring ( " POETIC SOFTWARE " )
printer . printstring ( " --------------- " )
printer . printstring ( " type help for help " )
printer . printstring ( now . strftime ( " % Y- % m- %d % H: % M " ) , " compr " )
printer . newline ( )
result = apirequest . gettitle ( " introduction " , 1 )
for line in result :
printer . printstring ( line , " u " )
result = apirequest . getcontent ( " introduction " , 1 )
for line in result :
printer . printstring ( line )
# printer.formfeed()
printer . printimagefromurl ( " https://www.sanfranciscobaycoffee.com/wp-content/uploads/2017/03/52279468.jpg " )
# printer.printstring("---------------")
# printer.printstring("POETIC SOFTWARE")
# printer.printstring("---------------")
# printer.printstring("type help for help")
# printer.newline()
# result = apirequest.gettitle("introduction", 1)
# for line in result:
# printer.printstring(line, "u")
# result = apirequest.getcontent("introduction", 1)
# for line in result:
# printer.printstring(line)
printer . newline ( )
term . list ( )
# term.list()
printer . printstring ( " SELECT which one to see, for exercise type: exercise <number> and for thesis type: thesis <number> " )
printer . newline ( )
term . waitforinput ( )