Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
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
Beispiel #7
0
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
Beispiel #8
0
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
Beispiel #9
0
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
Beispiel #10
0
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
Beispiel #11
0
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
Beispiel #12
0
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
Beispiel #13
0
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
Beispiel #14
0
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
Beispiel #15
0
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
Beispiel #16
0
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
Beispiel #17
0
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))
Beispiel #18
0
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
Beispiel #19
0
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
Beispiel #20
0
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
Beispiel #21
0
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
Beispiel #22
0
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)
Beispiel #23
0
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
Beispiel #24
0
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)
Beispiel #25
0
def dd2latex(tag, parent):
	result = latex.Group()
	process_usr(tag, result, parent)
	result << tolatex(tag.content, result)
	return result
Beispiel #26
0
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
Beispiel #27
0
def tbody2latex(tag, parent):
	result = latex.Group([], "\n")
	process_usr(tag, result, parent)
	result.usr["tbody"] = True
	result << tolatex(tag.content, result)
	return result
Beispiel #28
0
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
Beispiel #29
0
def caption2latex(tag, parent):
	result = latex.Cmd("caption")
	process_usr(tag, result, parent, True)
	result.args = [latex.Group(tolatex(tag.content, result))]
	return result
Beispiel #30
0
def _authors(tag, parent):
	result = latex.Group([], "\n")
	process_usr(tag, result, parent)
	result << tolatex(tag.content, result)
	return result