From 354d71c211a2f9baf9e9bd5ce07967343e8f60f2 Mon Sep 17 00:00:00 2001 From: Piotr Dobrowolski Date: Fri, 14 Oct 2016 02:16:37 +0200 Subject: [PATCH] Add HTML markup support, change input type to textarea --- render.py | 23 +++++++++++++++-------- templates/.index.html.swp | Bin 16384 -> 0 bytes templates/index.html | 20 ++++++++++++++------ 3 files changed, 29 insertions(+), 14 deletions(-) delete mode 100644 templates/.index.html.swp diff --git a/render.py b/render.py index 2ede679..40722bf 100644 --- a/render.py +++ b/render.py @@ -27,11 +27,12 @@ class Renderer(object): width, height = [int(s * self.INCH_PER_MM * self.DPI) for s in size] surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) context = cairo.Context(surface) + # fill it white, while we're at it context.rectangle(0, 0, width, height) context.set_source_rgb(1, 1, 1) context.fill() - + context.translate(width, 0) context.rotate(math.pi/2) # yolo @@ -44,7 +45,7 @@ class Renderer(object): with open(name, 'w') as f: self.surface.write_to_png(f) - def render_text(self, text, fontname, x, y): + def render_text(self, text, fontname, x, y, html=False): self.context.save() if y != -1: self.context.translate(x, y) @@ -52,13 +53,17 @@ class Renderer(object): pangocairo_context = pangocairo.CairoContext(self.context) pangocairo_context.set_antialias(cairo.ANTIALIAS_SUBPIXEL) layout = pangocairo_context.create_layout() - layout.set_width(self.width*pango.SCALE) - font = pango.FontDescription(fontname) - layout.set_font_description(font) - layout.set_text(text) layout.set_alignment(pango.ALIGN_CENTER) + if html: + # Absolutely horrifying hack to fix broken text wrapping + layout.set_markup('%s' % (fontname, text)) + else: + font = pango.FontDescription(fontname) + layout.set_font_description(font) + layout.set_text(text) + if y == -1: self.context.translate(0, (self.height - layout.get_size()[1]/pango.SCALE)/2) @@ -100,8 +105,9 @@ def health(): @app.route('/stuff/preview//') def stuff_preview(size): text = flask.request.args.get('text') + html = flask.request.args.get('html') == '1' r = Renderer() - r.render_text(text, 'Sans {}'.format(size), 0, -1) + r.render_text(text, 'Sans {}'.format(size), 0, -1, html) sio = StringIO.StringIO() r.surface.write_to_png(sio) @@ -118,8 +124,9 @@ def stuff_print(size): if time.time() - last < DELAY: return 'Please wait {} more seconds before next print.'.format(int(DELAY - (time.time() - last))) text = flask.request.args.get('text') + html = flask.request.args.get('html') == '1' r = Renderer() - r.render_text(text, 'Sans {}'.format(size), 0, -1) + r.render_text(text, 'Sans {}'.format(size), 0, -1, html) path = '/tmp/hslabel' f = open(path, 'w') diff --git a/templates/.index.html.swp b/templates/.index.html.swp deleted file mode 100644 index 0721da1c9e915186a2d6f3d97d1de254d4d84f71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeHNON`t|87=~ZWg%>|2qYxX);LkRXGz=L(;-~sw>{%m z?DF(9VRp|Tae(V01e`c<$YsR^32{MMX-^1=-3vk>ffgi$R)Px$_^NDod%AlbSs?*Z zS^C=Ta@GI%T=iF#e-GMUzI}&YF)tAuX9?+C{{6kR(bJ^;fROv$9a(zp5&51U_*r;d z#g`z^3fO=LA=}}pC3u(wOz_O|BbV=)o(O~EWa#^v0nNZWU?3O6)-z{FcdgTwtGy|Fe&46a$|CIreoFXs7_*10=H_P+8=FaafuRmU% zpPjp3Uh0!(Kr^5j&Gy|Fe&46Y=GoTsJ3}^;41OI~zFqaUyx9`dgKl1<8{{L@J z5b_rATj1xw%fOSsY2cq9BILWk4sZ=P3p_YO$O>>8c=LmVd=0n>d=&Wc2MFl{PXUhs ze}9~iKLWo5egJ$0xB>j>{e-**{0P_w{`wdpzX2Ws-vYi0d;<9C`w00S5CbjXXQv7I zA@KHl33(3a0FMK2y@!xj0T1{ha0>VfoP7g$4cG@h27DhcKfVn_z%Ae`@GJ1~5-mepMBpZyM(YB1%%e>+`X(YC3`M>@-I_;we6K*euFd zi^}`ONs5#0W{sE-Y17D3$GAuhD--!}Xq9&@gMN|@<49!w*E#+g)-}QRL{ApWKc#3X zQ<^A?U?Gp3*yZ=Wbo+W7CUL|g(Ucn1rx>yd4Bcfxb9JuuR8Nm4EY0}svRzd^*Gwv$ z^Hj2vM~?90sJTiXkn>G9cJdGgtePoj?xcC(wlrHFcIKphBKkyK%?cCvZOUi<8feh%(mIKw(sXWotSes&Crj` z?ab)g)`?VyY!BLJQsjlyJ{4~hA3HN zzP`M+y-WR#&D*wx^Fjq1JW?lMS=KY0IB11#>x!|Y+H!K0_(3j298obzc+V&<4C=f1 zFJlAVGgoe+2VURcRDV63=%aar&=SieahGTAuH^Jn9)D&AIBz zXxpcoQqhWS75Wz)IDw@_G^@<0Y<2mN<$-tvTYX35DL3em)+%Mkn0q+q${RmQa-oQx zg*e2+Ajf0aV)*Ec)4MY4(M(JNl#P8?csqv`ZP*co?mXyJKQ*U)%2eQRdfsU(tprf49qPq1cpR*;!)aNLfs)DP&#M(;YjtBGE#sfIm=8#T@i|| zRKd>86E@{>5T`CrTV?<0p!d+SNcF6Bn#F%zg8By>9=r@g8l&bW5%+XwgsYEM!4|r__m(XlT)iuor* z*x~ncKasOHrb$&97IqK1aR|}2*Xchun@WnHBm>>nB*SN*RBBa$N|q^mf+9 z)>h|MwQOPD7YFFA({Ko{RTVqw-}QJ_E)O#FuuM?&F+MTrjW}vxTHzE^AEsX~4){g< zcWE32lX7LDR>fFfFvR(cVl5fqR>Zl>T@x#jgB@q8wAO(N7Y4Bl!bw%3em>3t?@~1( z7NUeN0!+IbDW{V-rx|8C^=HiFLTI)k^0RBp2X>|W$VZChZiX3j*@G;mRW<+gjO(gi zxqetO-(C=Y$g`^$$a0bJs84=j;7x5`U|0@AM2tC-7dw;dvmnNbha4&j8!Z>E%k@(@ zxug0n6>Ols9q$>fjzKX|V>T}()#wPgJD5ycsqj)NvSkM-bmE~PoYeFOezb$074!@h z%rlR3EE&9%4`+LjlWqi@Y_k9{i_3%6|f zb$y@MD>uGy{qBpKH?h>0*K+^=8SK$t2ju?0%J2UH`~05(5%3i7FYNIj0ngFcUuL=HQdP|=D_2W`sh8{34Jk!t z&8ofUs;Tz<%?4h(^G2;zl^2w+;SZz*s~102T5uuvRhcGL?GyQ19SfH1Q;w`7QfgHV zd0uKB-k*%?=J`X~Tv0a4j9k?WuZon8Y0h%dxLLZgZl@G*&{idKmK(bzvv1AD23{Yg zDPHp-0hp%TU8fD?EaiKQi}XQ5rbrqnD)S$W1r5vGU9M&2q=#*)Ye8p_N8m zM{y%t&>@MD_RwCB8u5-%(Nm~N@Pev2dn*hb$K_%#&T^kpY+c-cB{!>{?|eq~-{|9T A&Hw-a diff --git a/templates/index.html b/templates/index.html index 0aaf675..df9df77 100644 --- a/templates/index.html +++ b/templates/index.html @@ -56,11 +56,17 @@ body {

Settings

- +
- + +
+
+
@@ -68,9 +74,9 @@ body {

API

$ # To get a label preview
-$ curl http://label.waw.hackerspace.pl/stuff/preview/60/?text=foobar | feh -
+$ curl http://label.waw.hackerspace.pl/stuff/preview/60/?text=foobar&html=0 | feh -
 $ # To print the label
-$ curl -d "" http://label.waw.hackerspace.pl/stuff/print/60/?text=foobar
+$ curl -d "" http://label.waw.hackerspace.pl/stuff/print/60/?text=foobar&html=0
@@ -85,16 +91,18 @@ $ curl -d "" http://label.waw.hackerspace.pl/stuff/print/60/?text=foobar