#!/usr/bin/env python # -*- coding: utf-8 -*- # http://nametags.cr.yp.to/readablenametags # D. J. Bernstein # version 20121118 # Public domain. from sys import stdin from os import environ logo = environ['LOGO'] width = environ['WIDTH'] height = environ['HEIGHT'] paper = environ['PAPER'] print "\\documentclass{minimal}" print "\\usepackage["+paper+",left=18mm,right=18mm,top=5mm,bottom=5mm]{geometry}" print "\\usepackage{multicol}" print "\\usepackage{graphicx}" print "\\usepackage[breakall]{truncate}" print "" print "\\hyphenpenalty=10000" print "\\parindent 0pt" print "\\parfillskip 0pt" print "\\baselineskip 0pt" print "\\parskip 0pt" print "\\leftskip 8pt" print "\\rightskip 8pt plus 10000pt" print "\\hfuzz 1000pt" print "\\vfuzz 1000pt" print "" print "\\newdimen\\nametagwidth" print "\\newdimen\\nametagheight" print "\\newdimen\\bigheight" print "\\newdimen\\bigbaselineskip" print "\\newdimen\\biggerheight" print "\\newdimen\\biggerbaselineskip" print "\\newdimen\\tagskip" print "" print "\\newif\\iftagmoreboxes" print "\\newbox\\tagbigbox" print "\\newbox\\tagok" print "\\newbox\\tagtest" print "" print "\\def\\fontisnottoobig{\\global\\setbox\\tagok=\\vbox{\\kern 0pt}}" print "\\def\\fontistoobig{\\global\\setbox\\tagok=\\vbox{\\kern\\nametagheight\\kern 2pt}}" print "" print "\\def\\tag#1#2#3#4{\\relax" print " \\nametagwidth #3" print " \\nametagheight #4" print " \\bigheight 48pt" print " \\loop" print " \\biggerheight\\bigheight\\advance\\biggerheight by\\bigheight" print " \\bigbaselineskip\\bigheight" print " \\biggerbaselineskip\\biggerheight" print " \\font\\big=phvr at \\bigheight" print " \\font\\bigger=phvb at \\biggerheight" print " \\fontisnottoobig" print " \\begingroup" print " \\hsize \\nametagwidth" print " \\leftskip 8pt plus 10000pt" print " \\rightskip 8pt plus 10000pt" print " \\global\\setbox\\tagbigbox=\\vbox to \\nametagheight{\\relax" print " \\kern 10pt" print " \\vbox{\\hbox{\\relax" print " \\includegraphics[width=\\nametagwidth]{"+logo+"}\\relax" print " }}" print " \\vfill" print " \\baselineskip \\biggerbaselineskip" print " \\noindent \\bigger\\uppercase{\\ignorespaces #1}\\par" print " \\vskip 7pt" print " \\baselineskip\\bigbaselineskip" print " \\noindent\\big\\ignorespaces #2\\par" print " \\vfill" print " \\vskip 10pt" print " }\\relax" print " \\ifnum\\badness>5000\\fontistoobig\\fi" print " \\endgroup" print " \\setbox\\tagtest=\\vbox{\\unvcopy\\tagbigbox" print " \\loop" print " \\unskip\\unpenalty\\unkern" print " \\unskip\\unpenalty\\unkern" print " \\unskip\\unpenalty\\unkern" print " \\unskip\\unpenalty\\unkern" print " \\setbox\\tagtest\\lastbox" print " \\tagmoreboxestrue" print " \\ifvoid\\tagtest\\tagmoreboxesfalse\\fi" print " \\iftagmoreboxes" print " \\ifhbox\\tagtest" print " \\setbox\\tagtest=\\hbox{\\unhbox\\tagtest}" print " \\ifdim\\wd\\tagtest>\\nametagwidth\\fontistoobig\\fi" print " \\fi" print " \\repeat" print " }\\relax" print " \\ifdim\\ht\\tagbigbox>\\nametagheight\\fontistoobig\\fi" print " \\ifdim\\ht\\tagok>\\nametagheight" print " \\advance\\bigheight by -0.2pt" print " \\repeat" print " \\hbox{\\relax" print " \\hsize \\nametagwidth" print " \\vbox to \\nametagheight{\\relax" print " \\hbox to \\nametagwidth{\\vrule width 5pt height 0.5pt depth 0pt\\hss\\vrule width 5pt height 0.5pt depth 0pt}\\relax" print " \\vss" print " \\unvbox\\tagbigbox" print " \\vss" print " \\hbox to \\nametagwidth{\\vrule width 5pt height 0.5pt depth 0pt\\hss\\vrule width 5pt height 0.5pt depth 0pt}\\relax" print " }\\relax" print " }\\relax" print " \\allowbreak\\ignorespaces" print "}" print "" print "\\def\\frontbacktags#1#2#3#4{\\centerline{\\hfill" print "\\vrule height 5pt" print "\\tag{#1}{#2}{#3}{#4}" print "\\vrule" print "\\tag{#1}{#2}{#3}{#4}" print "\\vrule height 5pt" print "\\hfill}}" print "\\begin{document}" def sanitize(x): result = "" for i in range(len(x)): if x[i] in "abcdefghijklmnopqrstuvwxyz": result += x[i] elif x[i] in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": result += x[i] elif x[i] in " .,-/()": result += x[i] elif x[i] in "'": result += x[i] elif x[i] == "&": result += "\\&" elif x[i] == "á".decode("utf-8","replace"): result += "\\'a" elif x[i] == "à".decode("utf-8","replace"): result += "\\`a" elif x[i] == "â".decode("utf-8","replace"): result += "\\^a" elif x[i] == "ã".decode("utf-8","replace"): result += "\\~a" elif x[i] == "ä".decode("utf-8","replace"): result += "\\\"a" elif x[i] == "å".decode("utf-8","replace"): result += "{\\aa}" elif x[i] == "Å".decode("utf-8","replace"): result += "{\\AA}" elif x[i] == "ç".decode("utf-8","replace"): result += "\\c{c}" elif x[i] == "Ç".decode("utf-8","replace"): result += "\\'C" elif x[i] == "ć".decode("utf-8","replace"): result += "\\'c" elif x[i] == "è".decode("utf-8","replace"): result += "\\`e" elif x[i] == "é".decode("utf-8","replace"): result += "\\'e" elif x[i] == "ê".decode("utf-8","replace"): result += "\\^e" elif x[i] == "ë".decode("utf-8","replace"): result += "\\\"e" elif x[i] == "ğ".decode("utf-8","replace"): result += "\\u{g}" elif x[i] == "í".decode("utf-8","replace"): result += "\\'i" elif x[i] == "î".decode("utf-8","replace"): result += "\\^i" elif x[i] == "ñ".decode("utf-8","replace"): result += "\\~n" elif x[i] == "ò".decode("utf-8","replace"): result += "\\`o" elif x[i] == "ó".decode("utf-8","replace"): result += "\\'o" elif x[i] == "ô".decode("utf-8","replace"): result += "\\^o" elif x[i] == "õ".decode("utf-8","replace"): result += "\\~o" elif x[i] == "ö".decode("utf-8","replace"): result += "\\\"o" elif x[i] == "Ö".decode("utf-8","replace"): result += "\\\"O" elif x[i] == "š".decode("utf-8","replace"): result += "\\v{s}" elif x[i] == "Š".decode("utf-8","replace"): result += "\\v{S}" elif x[i] == "ß".decode("utf-8","replace"): result += "{\\ss}" elif x[i] == "ü".decode("utf-8","replace"): result += "\\\"u" elif x[i] == "Ü".decode("utf-8","replace"): result += "\\\"U" elif x[i] == "’".decode("utf-8","replace"): result += "'" elif x[i] == "ø".decode("utf-8","replace"): result += "{\\o}" else: result += "?" return result for line in stdin: x = line.strip().split(":") x[0] = x[0].decode("utf-8","replace").upper() x[1] = x[1].decode("utf-8","replace") print "\\frontbacktags{"+sanitize(x[0])+"}{"+sanitize(x[1])+"}{"+width+"}{"+height+"}" print "\\end{document}"