def dt2latex(tag, parent): result = latex.Group() process_usr(tag, result, parent) result << latex.Cmd("item", [(latex.Group(tolatex(tag.content, result)),)], inline=True) result << latex.Cmd("hfill", inline=True) result << latex.Cmd("\\", inline=True) return result
def code2latex(tag, parent): lang = get_lang(tag, parent) if "pre" in parent.usr: page = latex.Env("minipage", args=[latex.Group(["0.95", latex.Cmd("linewidth", inline=True)])], inline=False) process_usr(tag, page, parent) result = latex.Env("lstlisting", args=[("mathescape",)]) process_usr(tag, result, parent) result << convert_code(tag.content, lang, "arg" in parent.usr) page << result pre = latex.Group() pre << latex.Cmd("newbox", ["\\mybox"]) box = latex.Env("lrbox", ["\\mybox"]) box << latex.Cmd("noindent") box << page pre << box pre << latex.Cmd("colorbox", ["code_bg", latex.Cmd("usebox", [latex.Cmd("mybox")])]) return pre else: #color = latex.Cmd("colorbox", ["code_bg"], inline=True) result = latex.Cmd("protect\\lstinline", args=[("mathescape, columns=fixed",)], inline=True, d_open=u'!', d_close=u'!') process_usr(tag, result, parent) group = latex.Group() process_usr(tag, group, result) group << convert_code(tag.content, lang, "arg" in parent.usr).replace('\n', ' ') result.args.append(group) #color.args.append(result) return result #color
def em2latex(tag, parent): if "abstract" in parent.usr: result = latex.Group() process_usr(tag, result, parent) result << tolatex(tag.content, result) return result else: result = latex.Cmd("textit", inline=True) process_usr(tag, result, parent, True) result.args = [latex.Group()] process_usr(tag, result.args[0], result) result.args[0] << tolatex(tag.content, result.args[0]) return result
def i2latex(tag, parent): result = latex.Cmd("emph", inline=True) process_usr(tag, result, parent, True) result.args = [latex.Group()] process_usr(tag, result.args[0], result) result.args[0] << tolatex(tag.content, result.args[0]) return result
def _conclusion(tag, parent): result = latex.Group() result << latex.Cmd("conclusion") process_usr(tag, result, parent) result.usr['skip'] = ['h1'] result << tolatex(tag.content, result) return result
def thead2latex(tag, parent): result = latex.Group([], "\n") process_usr(tag, result, parent) result.usr["thead"] = True result << tolatex(tag.content, result) result << latex.Cmd("hline") return result
def _title(tag, parent): result = latex.Cmd("title") process_usr(tag, result, parent) result.args = [latex.Group()] process_usr(tag, result.args[0], result) result.args[0] << tolatex(tag.content, result.args[0]) return result
def default2latex(tag, parent): if tag.name not in ["section", "subsection", "subsubsection", "div", "document", "html", "body", "span"]: print(tag.name) result = latex.Group() process_usr(tag, result, parent) result << tolatex(tag.content, result) return result
def _appendix(tag, parent): result = latex.Group() if not hasattr(_appendix, 'first'): result << latex.Cmd("appendix") _appendix.first = True process_usr(tag, result, parent) result << tolatex(tag.content, result) return result
def _listOfAbbreviations(tag, parent): result = latex.Group() process_usr(tag, result, parent) result << "{" result << latex.Cmd("listspacing", ["abbr"]) result << latex.Cmd("printglossary", [("style=list,title=List Of Abbreviations",)]) result << "}" return result
def abbr2latex(tag, parent): result = latex.Group() aid = ''.join(str(x) for x in tag.content) if "title" in tag.attrs and tag.attrs["title"]: latex_abbr[aid] = remove_linebreaks(tag.attrs["title"]) result << latex.Cmd("gls", [aid.lower()]) else: result << aid return result
def cite2latex(tag, parent): result = latex.Group() process_usr(tag, result, parent) if "id" in tag.attrs: latex_citations.append(tag.attrs["id"]) result << latex.Cmd("bibitem", [tag.attrs["id"]]) result << tolatex(tag.content, result) result << "\n" return result
def _appendix(tag, parent): result = latex.Group() process_usr(tag, result, parent) if 'skip' in result.usr and result.usr['skip']: result.usr['skip'].append('h1') else: result.usr['skip'] = ['h1'] result << latex.Cmd("appendix") result << tolatex(tag.content, result) return result
def _header(tag, parent): result = latex.Group([], "\n") process_usr(tag, result, parent) if 'skip' in result.usr and result.usr['skip']: result.usr['skip'].append('p') else: result.usr['skip'] = ['p'] result << tolatex(tag.content, result) result << latex.Cmd("maketitle") return result
def _copyright(tag, parent): copy = tag.content[0].split(' ') year = copy[1] name = ' '.join(copy[2:]) result = latex.Group() process_usr(tag, result, parent) result << latex.Cmd("copyrightholder", [name]) result << latex.Cmd("copyrightyear", [year]) result << latex.Cmd("makecopyright") return result
def hN2latex(tag, parent): global cfg index = int(tag.name[1:]) result = latex.Group() section = latex.Section("", index+cfg['section']) process_usr(tag, section, parent) if 'pass' in section.usr: section.usr['pass'].append('a') else: section.usr['pass'] = ['a'] section.args = [latex.Group()] process_usr(tag, section.args[0], section) section.args[0] << tolatex([tag.content[0]], section.args[0]) result << section if isinstance(tag.content[0], html.Tag) and tag.content[0].name == "a" and "name" in tag.content[0].attrs: result << latex.Cmd("label", [tag.content[0].attrs["name"]]) return result
def a2latex(tag, parent): if "href" in tag.attrs: href = tag.attrs["href"] if len(href) > 0 and href[0] == "#": if "#" in href[1:]: result = latex.Cmd("cite", [], inline=True) process_usr(tag, result, parent, True) rng = href[1:].split('-#') if rng[0] in latex_citations and rng[1] in latex_citations: result.args = [','.join(latex_citations[latex_citations.index(rng[0]):latex_citations.index(rng[1])+1])] elif href[1:] in latex_citations: result = latex.Cmd("cite", [escape_ref(href[1:])], inline=True) process_usr(tag, result, parent, True) elif href[1:] in latex_figures: result = latex.Group() process_usr(tag, result, parent, True) result << "Fig. " result << latex.Cmd("ref", [escape_ref(href[1:])], inline=True) elif href[1:] in latex_tables: result = latex.Group() process_usr(tag, result, parent, True) result << "Table. " result << latex.Cmd("ref", [escape_ref(href[1:])], inline=True) elif tag.content: result = latex.Cmd("hyperref", [(escape_ref(href[1:]),)], inline=True) process_usr(tag, result, parent, True) result.args.append(latex.Group(tolatex(tag.content, parent))) elif href[1:] not in latex_unresolved: result = latex.Group() process_usr(tag, result, parent, True) result << latex.Cmd("ref", [escape_ref(href[1:])], inline=True) latex_unresolved[href[1:]] = [result] else: result = latex.Group() process_usr(tag, result, parent, True) result << latex.Cmd("ref", [escape_ref(href[1:])], inline=True) latex_unresolved[href[1:]].append(result) return result else: result = latex.Cmd("href", [escape_ref(href)], inline=True) process_usr(tag, result, parent, True) result.args.append(latex.Group(tolatex(tag.content, parent))) return result elif "name" in tag.attrs: name = tag.attrs["name"] result = latex.Group() process_usr(tag, result, parent) result << tolatex(tag.content, parent) result << latex.Cmd("label", args=[name], inline=True) return result return latex.Group(tolatex(tag.content, parent))
def _preface(tag, parent): result = latex.Group() process_usr(tag, result, parent) result << latex.Cmd("preface") result.usr['skip'] = ['h1'] result << tolatex(tag.content, result) result << latex.Cmd("normalspacing") result << latex.Cmd("setcounter", ["page", 1]) result << latex.Cmd("pagenumbering", ["arabic"]) result << latex.Cmd("pagestyle", ["cornell"]) result << latex.Cmd("addtolength", ["\\parskip", "0.5\\baselineskip"]) return result
def td2latex(tag, parent): result = None if "colspan" in tag.attrs: result = latex.Cmd("multicolumn", [int(tag.attrs["colspan"]), "c"], inline=True) cell = latex.Cmd("makecell", inline=True) process_usr(tag, cell, parent) cell.args = [latex.Group(tolatex(tag.content, cell))] if result is not None: result.args.append(cell) return result else: return cell
def _abstract(tag, parent): result = latex.Group() process_usr(tag, result, parent) p = tag.get('p') if len(p) > 0: abst = latex.Env("abstract") process_usr(p[0], abst, result) abst << tolatex(p[0].content[1][1:], abst) result << abst if len(p) > 1: keys = latex.Env("IEEEkeywords") process_usr(p[1], keys, result) keys << tolatex(p[1].content[2:], result) result << keys return result
def _bio(tag, parent): content = [] img = None name = None for c in tag.content: if isinstance(c, html.STag) and c.name == "img" and not img: img = c elif isinstance(c, html.Tag) and c.name == "b": name = c.content[0] else: content.append(c) result = latex.Env("IEEEbiography") process_usr(tag, result, parent) result.args = [(latex.Group([tolatex(img, result)], "", "{", "}"),), tolatex(name, result)] result << tolatex(content, result) return result
def tolatex(tag, parent): if isinstance(tag, (list, tuple)): result = [] for elem in tag: item = tolatex(elem, parent) if item: result.append(item) return result if isinstance(tag, html.Tag): if "class" in tag.attrs and "web-only" in tag.attrs["class"]: return "" elif parent and parent.usr and 'skip' in parent.usr and tag.name in parent.usr['skip']: return "" elif parent and parent.usr and 'pass' in parent.usr and tag.name in parent.usr['pass']: result = latex.Group() process_usr(tag, result, parent) result << tolatex(tag.content, result) return result elif latex_module is not None and latex_module.has(tag): return latex_module.set(tag, parent) elif tag.name in handlers: return handlers[tag.name](tag, parent) else: return default2latex(tag, parent) elif isinstance(tag, html.STag): if "class" in tag.attrs and "web-only" in tag.attrs["class"]: return "" elif parent and parent.usr and 'skip' in parent.usr and tag.name in parent.usr['skip']: return "" elif parent and parent.usr and 'pass' in parent.usr and tag.name in parent.usr['pass']: return "" elif latex_module is not None and latex_module.has(tag): return latex_module.set(tag, parent) elif tag.name in handlers: return handlers[tag.name](tag, parent) else: print(tag) return "" else: return escape(tag, "figure" not in parent.usr)
def _title(tag, parent): title = "" author = "" conferral = "" for elem in tag.content: if isinstance(elem, html.Tag): if "class" in elem.attrs: titlecls = elem.attrs["class"].split() if "title" in titlecls: title = elem.content[0].strip() elif "author" in titlecls: author = elem.content[2].strip() conferral = elem.content[4].strip().split() result = latex.Group() process_usr(tag, result, parent) result << latex.Cmd("title", [title]) result << latex.Cmd("author", [author]) result << latex.Cmd("conferraldate", conferral) result << latex.Cmd("degreefield", ["Ph.D."]) result << latex.Cmd("maketitle") return result
def img2latex(tag, parent): if "src" in tag.attrs: src = tag.attrs["src"] path = os.path.dirname(src) outsrc = os.path.join(latex_outpath, src) if not os.path.exists(os.path.dirname(outsrc)): try: os.makedirs(os.path.dirname(outsrc)) except OSError as exc: # Guard against race condition if exc.errno != errno.EEXIST: raise if ".svg" in src: width = 1.0 if 'width' in parent.usr: width = parent.usr['width'] if "style" in tag.attrs and tag.attrs["style"]: attr = tag.attrs["style"].get("width") if not attr: attr = tag.attrs["style"].get("max-width") if "," in attr: width *= float(attr[attr.index(",")+1:-2])/100.0 elif "%" in attr: width *= float(attr[0:-1])/100.0 outsrc = outsrc.replace(".svg", ".pdf") intime = os.path.getmtime(src) if os.path.exists(src) else 0 outtime = os.path.getmtime(outsrc) if os.path.exists(outsrc) else 0 if intime > outtime: print("inkscape -D -z --file=\"" + src + "\" --export-pdf=\"" + outsrc + "\" --export-latex") os.system("inkscape -D -z --file=\"" + src + "\" --export-pdf=\"" + outsrc + "\" --export-latex") src = src.replace(".svg", ".pdf_tex") result = latex.Group() result << latex.Cmd("graphicspath", [path+'/'], d_open='{{', d_close='}}') process_usr(tag, result, parent, True) if width: page = latex.Env("minipage", args=[latex.Group([str(width), latex.Cmd("columnwidth", inline=True)])], inline=True) process_usr(tag, page, parent) page << latex.Cmd("centering", inline=False) page << latex.Cmd("def", inline=True) page << latex.Cmd("svgwidth", args=["\\columnwidth"], inline=False) page << latex.Cmd("input", args=[src]) result << page else: result << latex.Cmd("def", inline=True) result << latex.Cmd("svgwidth", args=["\\columnwidth"], inline=False) result << latex.Cmd("input", args=[src], inline=False) return result else: copyfile(src, outsrc) result = latex.Cmd("includegraphics") process_usr(tag, result, parent, True) result.args = [("width=1.0\\columnwidth",), src] return result else: return default2latex(tag, parent)
def dd2latex(tag, parent): result = latex.Group() process_usr(tag, result, parent) result << tolatex(tag.content, result) return result
def li2latex(tag, parent): result = latex.Group() process_usr(tag, result, parent) result << latex.Cmd("item ", inline=True) result << tolatex(tag.content, result) return result
def tbody2latex(tag, parent): result = latex.Group([], "\n") process_usr(tag, result, parent) result.usr["tbody"] = True result << tolatex(tag.content, result) return result
def tr2latex(tag, parent): result = latex.Group([], " & ", "", " \\\\\n") process_usr(tag, result, parent) result << tolatex([elem for elem in tag.content if isinstance(elem, html.Tag)], result) return result
def caption2latex(tag, parent): result = latex.Cmd("caption") process_usr(tag, result, parent, True) result.args = [latex.Group(tolatex(tag.content, result))] return result
def _authors(tag, parent): result = latex.Group([], "\n") process_usr(tag, result, parent) result << tolatex(tag.content, result) return result