Experimental latex preview for the code pad

This commit is contained in:
Ludovic Dubost 2019-04-12 17:37:32 +02:00
parent dde28dfa02
commit 0d5b45ced2
91 changed files with 27593 additions and 8 deletions

View File

@ -12,7 +12,6 @@ define([
'/common/TypingTests.js',
'/customize/messages.js',
'cm/lib/codemirror',
'css!cm/lib/codemirror.css',
'css!cm/addon/dialog/dialog.css',
'css!cm/addon/fold/foldgutter.css',
@ -39,7 +38,10 @@ define([
'cm/addon/fold/comment-fold',
'cm/addon/display/placeholder',
'less!/code/app-code.less'
'less!/code/app-code.less',
'/common/latex/latex.js',
'css!/common/latex/css/katex.css',
'css!/common/latex/css/article.css',
], function (
$,
@ -54,9 +56,11 @@ define([
Visible,
TypingTest,
Messages,
CMeditor)
CMeditor
)
{
window.CodeMirror = CMeditor;
var latexjs = window.latexjs;
var MEDIA_TAG_MODES = Object.freeze([
'markdown',
@ -88,7 +92,7 @@ define([
framework._.toolbar.$rightside.append(markdownTb.button);
var modeChange = function (mode) {
if (['markdown', 'gfm'].indexOf(mode) !== -1) { return void markdownTb.setState(true); }
if (['markdown', 'gfm', 'stex'].indexOf(mode) !== -1) { return void markdownTb.setState(true); }
markdownTb.setState(false);
};
@ -119,16 +123,44 @@ define([
var $previewButton = framework._.sfCommon.createButton('preview', true);
var forceDrawPreview = function () {
try {
console.log("IN DrawPreview " + CodeMirror.highlightMode);
if (editor.getValue() === '') {
$previewContainer.addClass('cp-app-code-preview-isempty');
return;
}
$previewContainer.removeClass('cp-app-code-preview-isempty');
DiffMd.apply(DiffMd.render(editor.getValue()), $preview, framework._.sfCommon);
if (['markdown', 'gfm'].indexOf(CodeMirror.highlightMode) !== -1) {
console.log("IN Markdown");
DiffMd.apply(DiffMd.render(editor.getValue()), $preview, framework._.sfCommon);
} else if (['stex'].indexOf(CodeMirror.highlightMode) !== 1) {
console.log("IN STEX");
console.log("Latex JS: " + latexjs);
var latexHtmlGenerator = new latexjs.HtmlGenerator({ hyphenate: false })
console.log("Latex Generator: " + latexHtmlGenerator);
console.log("Latex value: " + editor.getValue());
var latexGenerator;
try {
latexGenerator = latexjs.parse(editor.getValue(), { generator: latexHtmlGenerator });
console.log("Latex Generator: " + latexGenerator);
} catch(e) {
console.log("Latex error: " + e);
}
var output;
try {
var outputDoc = latexGenerator.htmlDocument("http://localhost:3000/common/latex/");
console.log("Output doc: " + outputDoc);
output = outputDoc.documentElement.outerHTML;
console.log("Output: " + output);
} catch(e) {
console.log("Latex error: " + e);
output = "Latex error: " + e;
}
DiffMd.apply(output, $preview, framework._.sfCommon);
};
} catch (e) { console.error(e); }
};
var drawPreview = Util.throttle(function () {
if (['markdown', 'gfm'].indexOf(CodeMirror.highlightMode) === -1) { return; }
if (['markdown', 'gfm', 'stex'].indexOf(CodeMirror.highlightMode) === -1) { return; }
if (!$previewButton.is('.cp-toolbar-button-active')) { return; }
forceDrawPreview();
}, 150);
@ -140,7 +172,7 @@ define([
previewTo = setTimeout(function () {
$codeMirror.removeClass('transition');
}, 500);
if (['markdown', 'gfm'].indexOf(CodeMirror.highlightMode) === -1) {
if (['markdown', 'gfm', 'stex'].indexOf(CodeMirror.highlightMode) === -1) {
$previewContainer.show();
}
$previewContainer.toggle();
@ -174,7 +206,7 @@ define([
});
var modeChange = function (mode) {
if (['markdown', 'gfm'].indexOf(mode) !== -1) {
if (['markdown', 'gfm', 'stex'].indexOf(mode) !== -1) {
$previewButton.show();
framework._.sfCommon.getPadAttribute('previewMode', function (e, data) {
if (e) { return void console.error(e); }

View File

@ -0,0 +1,7 @@
// Generated by LiveScript 1.6.0
(function(){
var out$ = typeof exports != 'undefined' && exports || this;
out$.Color = require('./xcolor').XColor;
}).call(this);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWNrYWdlcy9jb2xvci5scyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7T0FFTyxRQUFPLFFBQVEsVUFBQSxDQUFXLENBQUMiLCJmaWxlIjoiY29sb3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyIjIGZvcndhcmQgdG8geGNvbG9yXG5cbmV4cG9ydCBDb2xvcjogcmVxdWlyZSAnLi94Y29sb3InIC5YQ29sb3JcbiJdfQ==

View File

@ -0,0 +1,33 @@
@import url("base.css");
/**************/
/* sectioning */
/**************/
/* section */
h2 {
counter-reset: subsection;
font-size: 1.4rem; /* \Large */
font-weight: bold;
margin-top: 3.5ex;
margin-bottom: 2.3ex;
}
/* subsection */
h3 {
font-size: 1.2rem; /* \large */
font-weight: bold;
margin-top: 3.25ex;
margin-bottom: 1.5ex;
}
/* subsubsection */
h4 {
font-size: 1rem; /* \normalsize */
font-weight: bold;
margin-top: 3.25ex;
margin-bottom: 1.5ex;
}

View File

@ -0,0 +1,814 @@
@import url("../fonts/cmu.css");
/*******************/
/* default lengths */
/*******************/
:root, :host {
--size: 10pt;
--line-height: 1.2;
/* --linewidth makes no sense here; it is the width of the line in the current environment */
--paperwidth: 100%; /* paper is the browser window */
/* TeX's even/oddsidemargin are not available in CSS, the HtmlGenerator translates the relevant lengths
* to marginleftwidth, marginrightwidth, and textwidth, as well as marginparwidth - all relative to the paper.
* So if a fixed width page is desired, simply set --paperwidth to an absolute value.
*/
--parindent: 1.5em;
--parskip: 0px; /* needs to be a length, otherwise calc(2px + var(--parskip)) will return 0 */
--smallskipamount: 0.3rem;
--medskipamount: 0.6rem;
--bigskipamount: 1.2rem;
--listparindent: 0px;
--itemindent: 0px;
--leftmargini: 2.5em;
--leftmarginii: 2.2em;
--leftmarginiii: 1.87em;
--leftmarginiv: 1.7em;
--leftmarginv: 1em;
--leftmarginvi: 1em;
--leftmargin: var(--leftmargini);
--labelsep: 0.5rem;
--fboxrule: 0.4pt;
--fboxsep: 3pt;
/* multicols */
--columnwidth: ;
--columnsep: 35pt;
--columnseprule: 0pt;
--columnseprulecolor: black;
--multicolsep: 12pt;
}
.twocolumn {
--parindent: 1em;
--marginparsep: 1rem;
--leftmargini: 2em;
--leftmarginv: 0.5em;
--leftmarginvi: 0.5em;
}
.list {
--topsep: 0.8rem;
--parsep: 0.4rem;
--itemsep: 0.4rem;
--leftmargin: var(--leftmargini);
}
.list .list {
--topsep: 0.4rem;
--parsep: 0.2rem;
--itemsep: var(--parsep);
--leftmargin: var(--leftmarginii);
}
.list .list .list {
--topsep: 0.2rem;
--parsep: 0;
--itemsep: var(--topsep);
--leftmargin: var(--leftmarginiii);
}
.list .list .list .list {
--topsep: 0;
--leftmargin: var(--leftmarginiv);
}
.list .list .list .list .list {
--leftmargin: var(--leftmarginv);
}
.list .list .list .list .list .list {
--leftmargin: var(--leftmarginvi);
}
/***************/
/* page layout */
/***************/
/* .page is the element when used as a web component */
body, .page {
display: grid;
grid-template-columns: [margin-left] var(--marginleftwidth) [body] var(--textwidth) [margin-right] var(--marginrightwidth);
grid-template-rows: auto;
margin: 0;
padding: 0;
max-width: var(--paperwidth); /* elements wider than this overflow, but don't increase bodywidth */
min-width: var(--paperwidth);
}
/* LaTeX page body */
.body {
grid-column: body;
grid-row: 1;
}
/* LaTeX page margins */
.margin-left {
grid-column: margin-left;
grid-row: 1;
justify-self: end;
display: flex;
}
.margin-right {
grid-column: margin-right;
grid-row: 1;
justify-self: start;
display: flex;
}
.marginpar {
width: var(--marginparwidth); /* ideally in percent relative to margin */
min-width: var(--marginparwidth); /* min-width if in grid/flex container, to force this width */
margin-left: var(--marginparsep);
margin-right: var(--marginparsep);
}
.marginpar > * {
padding-bottom: var(--marginparpush); /* use padding, which is included in offsetHeight, margin is not */
}
/* columns */
.onecolumn {
column-count: 1;
}
.twocolumn {
column-count: 2;
}
.multicols {
margin-top: var(--multicolsep);
margin-bottom: var(--multicolsep);
column-gap: var(--columnsep);
column-rule: var(--columnseprule) solid var(--columnseprulecolor);
column-fill: balance;
}
.span-cols {
column-span: all;
}
/*********/
/* fonts */
/*********/
html, .page {
font-family: "Computer Modern Serif", serif;
font-size: var(--size);
text-align: justify;
line-height: var(--line-height);
hyphens: manual;
}
.katex {
font-size: 1em !important;
}
.katex,
.katex .mainrm,
.katex .mathit,
.katex .mathbf {
font-family: "Computer Modern Serif" !important; /* for KaTeX_Main */
}
.katex .mathdefault,
.katex .boldsymbol {
font-family: "Computer Modern Serif" !important; /* for KaTeX_Math */
}
.katex .mathsf,
.katex .textsf,
.katex .mathboldsf,
.katex .textboldsf,
.katex .mathitsf,
.katex .textitsf {
font-family: "Computer Modern Sans" !important; /* for KaTeX_SansSerif */
}
/* family */
.rm {
font-family: "Computer Modern Serif", serif;
font-variant-ligatures: normal;
}
.sf {
font-family: "Computer Modern Sans", sans-serif;
font-variant-ligatures: normal;
}
.tt {
font-family: "Computer Modern Typewriter", monospace;
font-variant-ligatures: none;
}
/* weight */
.md {
font-weight: normal;
}
.bf {
font-weight: bold;
}
/* shape - LaTeX doesn't support slanted small-caps by default */
.up {
font-family: "Computer Modern Serif", serif;
font-style: normal;
font-variant-caps: normal;
}
.it {
font-style: italic;
font-variant-caps: normal;
}
.sl {
font-family: "Computer Modern Serif Slanted";
font-style: oblique;
font-variant-caps: normal;
}
.sf.sl {
font-family: "Computer Modern Sans", sans-serif;
font-style: oblique;
font-variant-caps: normal;
}
.tt.sl {
font-family: "Computer Modern Typewriter Slanted", monospace;
font-style: oblique;
font-variant-caps: normal;
}
.sc {
font-family: "Computer Modern Serif", serif;
font-style: normal;
font-variant-caps: small-caps;
}
/* size */
.tiny {
font-size: .5rem;
}
.scriptsize {
font-size: .7rem;
}
.footnotesize {
font-size: .82rem;
}
.small {
font-size: .91rem;
}
.normalsize {
font-size: 1rem;
}
.large {
font-size: 1.2rem;
}
.Large {
font-size: 1.4rem;
}
.LARGE {
font-size: 1.7rem;
}
.huge {
font-size: 2rem;
}
.Huge {
font-size: 2.5rem;
}
/**************/
/* sectioning */
/**************/
h1, h2, h3, h4 {
/* \normalfont */
font-family: "Computer Modern Serif", serif;
font-style: normal;
font-variant-caps: normal;
text-align: left;
}
.titlepage {
height: 100vh;
min-height: 20rem;
}
.title {
font-size: 1.7rem; /* LARGE */
}
.author, .date {
font-size: 1.2rem; /* large */
}
/*************/
/* alignment */
/*************/
.centering, .list.center {
text-indent: 0;
text-align: center;
}
.raggedright, .list.flushleft {
text-indent: 0;
text-align: left;
}
.raggedleft, .list.flushright {
text-indent: 0;
text-align: right;
}
/* alignment environments are lists (trivlist), so margin has to be removed */
.list.center, .list.flushleft, .list.flushright {
margin-left: 0 !important;
}
/* a list on its own justifies */
.list {
text-align: justify;
}
/*********/
/* boxes */
/*********/
.hbox {
display: inline-block;
white-space: nowrap;
text-indent: 0;
}
.phantom {
visibility: hidden;
}
.llap {
display: inline-flex;
flex-direction: column;
width: 0;
align-items: flex-end;
}
.clap {
display: inline-flex;
flex-direction: column;
width: 0;
align-items: center;
}
.rlap {
display: inline-block;
width: 0;
}
.stretch {
display: inline-flex;
flex-direction: row;
justify-content: stretch;
align-items: stretch;
}
.smash {
display: inline-flex;
flex-direction: row;
height: 0px;
align-items: flex-end;
}
/* a class to align text to the baseline, and a class to locate the baseline */
.align-baseline {
line-height: 0;
}
.align-baseline::after {
content: '';
display: inline-block;
}
.mpbaseline {
line-height: 0;
width: 0;
height: 0;
display: inline-block;
}
/* parbox/minipage */
.parbox {
display: inline-block;
text-indent: 0;
}
/* pos: t (top) */
.p-t {
display: inline-flex;
}
/* pos: c (center) */
.p-c {
vertical-align: middle;
}
/* pos: b (bottom) */
.p-b {
/* default */
vertical-align: baseline; /* TODO: what if llap inside?? */
}
/* if we want a fixed height *and* bottom alignment */
.pbh.p-b {
vertical-align: text-bottom;
}
/* the following are only possible if height was given, too */
.p-t.p-ct {
vertical-align: baseline;
}
.p-t.p-cc {
vertical-align: text-top;
align-items: center;
}
/* pos: top, inner-pos: bottom */
.p-t.p-cb {
vertical-align: text-top;
display: inline-flex;
align-items: flex-end;
}
/* pos and inner-pos: center */
.p-c.p-cc {
display: inline-flex;
align-items: center;
}
.p-c.p-cb {
display: inline-flex;
align-items: flex-end;
}
.p-b.p-ct {
display: inline-flex;
align-items: flex-start;
}
.p-b.p-cc {
display: inline-flex;
align-items: center;
}
/* pos: bottom, inner-pos: bottom */
.p-b.p-cb {
vertical-align: baseline;
display: inline-flex;
align-items: flex-end;
}
.p-b.p-cb::before {
/* move the baseline to the bottom of a flex item */
content: "x";
display: inline-block;
width: 0;
visibility: hidden;
}
.underline {
border-bottom: 0.4pt solid;
line-height: 1;
}
.frame {
padding: var(--fboxsep);
border: var(--fboxrule) solid;
margin-top: 2px;
margin-bottom: 2px;
}
/****************/
/* environments */
/****************/
.pframe {
border-style: solid;
}
.picture {
display: inline-block; /* so that it can be given a fixed size */
position: relative;
vertical-align: bottom; /* needed for \put */
}
/* the coordinate system of the picture */
.picture-canvas {
display: flex;
align-items: flex-end;
position: absolute;
left: 0;
bottom: 0;
}
/* cannot do this, it pushes the whole picture up by the depth of the font :(
.picture-canvas > .hbox::after {
content: "";
display: inline;
}
*/
/* objects in a picture */
.put-obj {
display: block;
position: relative;
line-height: 0;
/* width: 0; */ /* picture objects only have a height, but we cannot set the
width to 0 directly because it breaks vertical baseline alignment of text */
}
/* make text align on the baseline in \put - needs line-height: 0 in .put-obj! */
.put-obj:after {
content: '';
display: inline-block;
}
.strut {
display: block;
}
.picture-object {
position: absolute;
display: flex; /* to align text and boxes at the bottom */
/* line-height: 0px; works for boxes, but breaks text */
}
/**********/
/* macros */
/**********/
code {
white-space: pre;
}
/**********/
/* spaces */
/**********/
/* reset */
p, ul, ol, dl, div {
margin: 0;
padding: 0;
}
p {
margin-top: var(--parskip);
text-indent: var(--parindent);
}
h1 + p, h1 + * p:first-child,
h2 + p, h2 + * p:first-child,
h3 + p, h3 + * p:first-child,
h4 + p, h4 + * p:first-child,
.noindent,
.continue {
text-indent: 0;
}
/* predefined horizontal spaces */
.negthinspace {
margin-left: -0.16666667em;
}
/* vertical space - insert the actual space (negative or positive) with margin-bottom */
.vspace {
display: block;
}
/* vertical space that forces a linebreak */
.breakspace {
display: table;
}
/* inline vertical space - this cannot be negative */
.vspace-inline {
display: inline-block;
height: calc(1em * var(--line-height)); /* full maximum height, including the leading: line-height * font-size */
vertical-align: top; /* if bottom is used, space could be inserted above this line of text */
}
/* predefined vertical spaces */
.smallskip {
margin-bottom: var(--smallskipamount);
}
.medskip {
margin-bottom: var(--medskipamount);
}
.bigskip {
margin-bottom: var(--bigskipamount);
}
/****************/
/* environments */
/****************/
/* lists */
.list {
margin: calc(var(--topsep) + var(--parskip)) 0;
margin-left: var(--leftmargin);
}
.list p:first-of-type {
text-indent: var(--itemindent);
}
.list p + p {
margin-top: var(--parsep);
text-indent: var(--listparindent);
}
.list li + li,
.list dd + dt {
margin-top: calc(var(--itemsep) + var(--parsep));
}
/* labels */
li {
list-style: none;
}
/* label should be next to the item, so the first element after the label needs to be inline */
.itemlabel + * {
display: inline;
}
.itemlabel > * {
position: relative;
right: var(--labelsep);
}
/* description */
dd, dd > p:first-child {
display: inline;
}
/* start a new line after dd and before dt */
dd::after {
content: "";
display: block;
}
dt {
display: inline-block;
font-weight: bold;
}
.list dt {
margin-left: calc(-1 * var(--leftmargin));
}
dd {
margin-left: var(--labelsep);
}
/* quote, quotation, verse */
.quote, .quotation, .verse {
margin-left: var(--leftmargin);
margin-right: var(--leftmargin);
}
.quotation {
--parsep: 0px;
--itemindent: 1.5em;
--listparindent: var(--itemindent);
}
.verse {
text-align: left;
margin-left: calc(1.5em + var(--leftmargin));
--itemindent: -1.5em;
--listparindent: var(--itemindent);
}
/* the TeX and LaTeX logos */
span.tex,
span.latex {
text-transform: uppercase;
}
span.latex > .a {
font-size: 0.8em;
vertical-align: 0.2em;
margin-left: -0.45em;
margin-right: -0.15em;
}
span.tex > .e,
span.latex > .e {
margin-left: -0.2em;
margin-right: -0.2em;
position: relative;
top: 0.45ex;
}

View File

@ -0,0 +1,43 @@
@import url("base.css");
/**************/
/* sectioning */
/**************/
/* chapter */
h1 div {
font-size: 2rem; /* \huge */
margin-bottom: 2rem;
}
h1 {
font-size: 2.5rem; /* \Huge */
font-weight: bold;
margin-top: calc(5rem + 1em); /* \vspace*{} in LaTeX adds an additional line */
margin-bottom: 4rem;
}
/* section */
h2 {
font-size: 1.4rem; /* \Large */
font-weight: bold;
margin-top: 3.5ex;
margin-bottom: 2.3ex;
}
/* subsection */
h3 {
font-size: 1.2rem; /* \large */
font-weight: bold;
margin-top: 3.25ex;
margin-bottom: 1.5ex;
}
/* subsubsection */
h4 {
font-size: 1rem; /* \normalsize */
font-weight: bold;
margin-top: 3.25ex;
margin-bottom: 1.5ex;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,58 @@
// Generated by LiveScript 1.6.0
(function(){
'use strict';
var Base, Article, out$ = typeof exports != 'undefined' && exports || this;
Base = require('./base').Base;
out$.Article = Article = (function(superclass){
var args, prototype = extend$((import$(Article, superclass).displayName = 'Article', Article), superclass).prototype, constructor = Article;
Article.css = "css/article.css";
function Article(generator, options){
Article.superclass.apply(this, arguments);
this.g.setCounter('secnumdepth', 3);
this.g.setCounter('tocdepth', 3);
}
args = Article.args = Base.args;
Article.prototype['refname'] = function(){
return ["References"];
};
args['tableofcontents'] = ['V'];
Article.prototype['tableofcontents'] = function(){
return this.section(true, undefined, this.g.macro('contentsname')).concat([this.g._toc]);
};
args['abstract'] = ['V'];
Article.prototype['abstract'] = function(){
var head;
this.g.setFontSize("small");
this.g.enterGroup();
this.g.setFontWeight("bf");
head = this.g.create(this.g.list, this.g.macro("abstractname"), "center");
this.g.exitGroup();
return [head].concat(this.quotation());
};
Article.prototype['endabstract'] = function(){
this.endquotation();
};
args['appendix'] = ['V'];
Article.prototype['appendix'] = function(){
this.g.setCounter('section', 0);
this.g.setCounter('subsection', 0);
this['thesection'] = function(){
return [this.g.Alph(this.g.counter('section'))];
};
};
return Article;
}(Base));
function extend$(sub, sup){
function fun(){} fun.prototype = (sub.superclass = sup).prototype;
(sub.prototype = new fun).constructor = sub;
if (typeof sup.extended == 'function') sup.extended(sub);
return sub;
}
function import$(obj, src){
var own = {}.hasOwnProperty;
for (var key in src) if (own.call(src, key)) obj[key] = src[key];
return obj;
}
}).call(this);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb2N1bWVudGNsYXNzZXMvYXJ0aWNsZS5scyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztFQUFBOztFQUdnQixJQUFaLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxRQUFBLENBQUEsQ0FBSjtpQkFJYSxXQUFOLFFBQUEsQ0FBQSxVQUFBOztJQUdILE9BQUMsQ0FBQSxHQUFJLENBQUEsQ0FBQSxDQUFtQjtJQUl4QixRQUFBLENBQUEsT0FBQSxDQUFBLFNBQUEsRUFBQSxPQUFBO01BQ0ksT0FBQSxpQ0FBTTtNQUVOLElBQUMsQ0FBQSxDQUFDLENBQUMsV0FBVyxlQUFjLENBQWQ7TUFDZCxJQUFDLENBQUEsQ0FBQyxDQUFDLFdBQVcsWUFBYyxDQUFkOztJQUdsQixJQUFLLENBQUEsQ0FBQSxDQUFFLE9BQUMsQ0FBQSxJQUFLLENBQUEsQ0FBQSxDQUFFLElBQUksQ0FBQztzQkFFcEIsYUFBcUIsUUFBQSxDQUFBO2FBQUcsQ0FBYyxZQUFkOztJQUt4QixJQUFJLENBQUMsaUJBQUQsQ0FBa0IsQ0FBQSxDQUFBLENBQUUsQ0FBQSxHQUFBO3NCQUN4QixxQkFBc0IsUUFBQSxDQUFBO2FBQUcsSUFBQyxDQUFBLFFBQVEsTUFBTSxXQUFXLElBQUMsQ0FBQSxDQUFDLENBQUMsTUFBTSxjQUFELENBQTFCLENBQTJDLENBQUEsT0FBRyxDQUFFLElBQUMsQ0FBQSxDQUFDLENBQUMsSUFBTDs7SUFHL0UsSUFBSSxDQUFDLFVBQUQsQ0FBVyxDQUFBLENBQUEsQ0FBSyxDQUFBLEdBQUE7c0JBRXBCLGNBQXFCLFFBQUEsQ0FBQTs7TUFFakIsSUFBQyxDQUFBLENBQUMsQ0FBQyxZQUFtQixPQUFBO01BR3RCLElBQUMsQ0FBQSxDQUFDLENBQUMsV0FBVTtNQUNiLElBQUMsQ0FBQSxDQUFDLENBQUMsY0FBa0IsSUFBTDtNQUNoQixJQUFLLENBQUEsQ0FBQSxDQUFFLElBQUMsQ0FBQSxDQUFDLENBQUMsT0FBTyxJQUFDLENBQUEsQ0FBQyxDQUFDLE1BQU0sSUFBQyxDQUFBLENBQUMsQ0FBQyxNQUFvQixjQUFmLEdBQTBCLFFBQTNDO01BQ2pCLElBQUMsQ0FBQSxDQUFDLENBQUMsVUFBUzthQUVaLENBQUUsSUFBRixDQUFTLENBQUEsT0FBRyxJQUFDLENBQUEsVUFBUzs7c0JBRTFCLGlCQUFxQixRQUFBLENBQUE7TUFBSSxJQUFDLENBQUEsYUFBWTs7SUFHdEMsSUFBSSxDQUFDLFVBQUQsQ0FBVyxDQUFBLENBQUEsQ0FBSyxDQUFBLEdBQUE7c0JBRXBCLGNBQXFCLFFBQUEsQ0FBQTtNQUNqQixJQUFDLENBQUEsQ0FBQyxDQUFDLFdBQVcsV0FBUyxDQUFUO01BQ2QsSUFBQyxDQUFBLENBQUMsQ0FBQyxXQUFXLGNBQVksQ0FBWjtNQUNkLElBQUMsQ0FBQyxZQUFELENBQWMsQ0FBQSxDQUFBLENBQUUsUUFBQSxDQUFBO2VBQUcsQ0FBRSxJQUFDLENBQUEsQ0FBQyxDQUFDLEtBQUssSUFBQyxDQUFBLENBQUMsQ0FBQyxRQUFRLFNBQUEsQ0FBWCxDQUFWOzs7O0lBL0NQIiwiZmlsZSI6ImFydGljbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxucmVxdWlyZSEge1xuICAgICcuL2Jhc2UnOiB7IEJhc2UgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBBcnRpY2xlIGV4dGVuZHMgQmFzZVxuXG4gICAgIyBwdWJsaWMgc3RhdGljXG4gICAgQGNzcyA9IFwiY3NzL2FydGljbGUuY3NzXCJcblxuXG4gICAgIyBDVE9SXG4gICAgKGdlbmVyYXRvciwgb3B0aW9ucykgLT5cbiAgICAgICAgc3VwZXIgLi4uXG5cbiAgICAgICAgQGcuc2V0Q291bnRlciBcXHNlY251bWRlcHRoICAzXG4gICAgICAgIEBnLnNldENvdW50ZXIgXFx0b2NkZXB0aCAgICAgM1xuXG5cbiAgICBhcmdzID0gQGFyZ3MgPSBCYXNlLmFyZ3NcblxuICAgIFxccmVmbmFtZSAgICAgICAgICAgIDotPiBbIFwiUmVmZXJlbmNlc1wiIF1cblxuXG4gICAgIyB0b2NcblxuICAgIGFyZ3MuXFx0YWJsZW9mY29udGVudHMgPSA8WyBWIF0+XG4gICAgXFx0YWJsZW9mY29udGVudHMgICAgOiAtPiBAc2VjdGlvbih0cnVlLCB1bmRlZmluZWQsIEBnLm1hY3JvKFxcY29udGVudHNuYW1lKSkgKysgWyBAZy5fdG9jIF1cblxuXG4gICAgYXJncy5cXGFic3RyYWN0ID0gICAgPFsgViBdPlxuXG4gICAgXFxhYnN0cmFjdCAgICAgICAgICAgOi0+XG4gICAgICAgICMgb25lY29sdW1uLCBubyB0aXRsZXBhZ2VcbiAgICAgICAgQGcuc2V0Rm9udFNpemUgXCJzbWFsbFwiXG5cbiAgICAgICAgIyBUT0RPIHVzZSBjZW50ZXIgZW52IGRpcmVjdGx5IGluc3RlYWQuLi5cbiAgICAgICAgQGcuZW50ZXJHcm91cCFcbiAgICAgICAgQGcuc2V0Rm9udFdlaWdodChcImJmXCIpXG4gICAgICAgIGhlYWQgPSBAZy5jcmVhdGUgQGcubGlzdCwgQGcubWFjcm8oXCJhYnN0cmFjdG5hbWVcIiksIFwiY2VudGVyXCJcbiAgICAgICAgQGcuZXhpdEdyb3VwIVxuXG4gICAgICAgIFsgaGVhZCBdICsrIEBxdW90YXRpb24hXG5cbiAgICBcXGVuZGFic3RyYWN0ICAgICAgICA6IS0+IEBlbmRxdW90YXRpb24hXG5cblxuICAgIGFyZ3MuXFxhcHBlbmRpeCA9ICAgIDxbIFYgXT5cblxuICAgIFxcYXBwZW5kaXggICAgICAgICAgIDohLT5cbiAgICAgICAgQGcuc2V0Q291bnRlciBcXHNlY3Rpb24gMFxuICAgICAgICBAZy5zZXRDb3VudGVyIFxcc3Vic2VjdGlvbiAwXG4gICAgICAgIEBbXFx0aGVzZWN0aW9uXSA9IC0+IFsgQGcuQWxwaCBAZy5jb3VudGVyIFxcc2VjdGlvbiBdXG4iXX0=

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,45 @@
// Generated by LiveScript 1.6.0
(function(){
'use strict';
var Report, Book, out$ = typeof exports != 'undefined' && exports || this;
Report = require('./report').Report;
out$.Book = Book = (function(superclass){
var args, x$, y$, prototype = extend$((import$(Book, superclass).displayName = 'Book', Book), superclass).prototype, constructor = Book;
Book.css = "css/book.css";
function Book(generator, options){
Book.superclass.apply(this, arguments);
this['@mainmatter'] = true;
}
args = Book.args = Report.args;
x$ = args;
x$['part'] = x$['chapter'] = ['V', 's', 'X', 'o?', 'g'];
Book.prototype['chapter'] = function(s, toc, ttl){
return [this.g.startsection('chapter', 0, s || !this["@mainmatter"], toc, ttl)];
};
y$ = args;
y$['frontmatter'] = y$['mainmatter'] = y$['backmatter'] = ['V'];
Book.prototype['frontmatter'] = function(){
this['@mainmatter'] = false;
};
Book.prototype['mainmatter'] = function(){
this['@mainmatter'] = true;
};
Book.prototype['backmatter'] = function(){
this['@mainmatter'] = false;
};
return Book;
}(Report));
function extend$(sub, sup){
function fun(){} fun.prototype = (sub.superclass = sup).prototype;
(sub.prototype = new fun).constructor = sub;
if (typeof sup.extended == 'function') sup.extended(sub);
return sub;
}
function import$(obj, src){
var own = {}.hasOwnProperty;
for (var key in src) if (own.call(src, key)) obj[key] = src[key];
return obj;
}
}).call(this);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb2N1bWVudGNsYXNzZXMvYm9vay5scyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztFQUFBOztFQUdrQixNQUFkLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxVQUFBLENBQUEsQ0FBSjtjQU1hLFFBQU4sUUFBQSxDQUFBLFVBQUE7O0lBR0gsSUFBQyxDQUFBLEdBQUksQ0FBQSxDQUFBLENBQWdCO0lBSXJCLFFBQUEsQ0FBQSxJQUFBLENBQUEsU0FBQSxFQUFBLE9BQUE7TUFDSSxJQUFBLGlDQUFNO01BRU4sSUFBQyxDQUFDLGFBQUQsQ0FBZSxDQUFBLENBQUEsQ0FBRTs7SUFHdEIsSUFBSyxDQUFBLENBQUEsQ0FBRSxJQUFDLENBQUEsSUFBSyxDQUFBLENBQUEsQ0FBRSxNQUFNLENBQUM7U0FFdEI7SUFDQyxFQUFFLENBQUEsTUFBQSxDQUFNLENBQUEsQ0FBQSxDQUNSLEVBQUUsQ0FBQSxTQUFBLENBQVMsQ0FBQSxDQUFBLENBQVEsQ0FBQSxLQUFBLEtBQUEsS0FBQSxNQUFBLEdBQUE7bUJBRXBCLGFBQXNCLFFBQUEsQ0FBQSxDQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUE7YUFBaUIsQ0FBRSxJQUFDLENBQUEsQ0FBQyxDQUFDLGFBQWEsV0FBVSxHQUFJLENBQUUsQ0FBQSxFQUFBLENBQUcsQ0FBSSxJQUFjLENBQUEsYUFBQSxHQUFHLEtBQUssR0FBN0MsQ0FBbEI7O1NBR3ZDO0lBQ0MsRUFBRSxDQUFBLGFBQUEsQ0FBYSxDQUFBLENBQUEsQ0FDZixFQUFFLENBQUEsWUFBQSxDQUFZLENBQUEsQ0FBQSxDQUNkLEVBQUUsQ0FBQSxZQUFBLENBQVksQ0FBQSxDQUFBLENBQUssQ0FBQSxHQUFBO21CQUVwQixpQkFBcUIsUUFBQSxDQUFBO01BQUksSUFBQyxDQUFDLGFBQUQsQ0FBZSxDQUFBLENBQUEsQ0FBRTs7bUJBQzNDLGdCQUFxQixRQUFBLENBQUE7TUFBSSxJQUFDLENBQUMsYUFBRCxDQUFlLENBQUEsQ0FBQSxDQUFFOzttQkFDM0MsZ0JBQXFCLFFBQUEsQ0FBQTtNQUFJLElBQUMsQ0FBQyxhQUFELENBQWUsQ0FBQSxDQUFBLENBQUU7OztJQTdCN0IiLCJmaWxlIjoiYm9vay5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5yZXF1aXJlISB7XG4gICAgJy4vcmVwb3J0JzogeyBSZXBvcnQgfVxufVxuXG5cbiMgYm9vayBpbiBMYVRlWCBoYXMgbm8gYWJzdHJhY3RcblxuZXhwb3J0IGNsYXNzIEJvb2sgZXh0ZW5kcyBSZXBvcnRcblxuICAgICMgcHVibGljIHN0YXRpY1xuICAgIEBjc3MgPSBcImNzcy9ib29rLmNzc1wiXG5cblxuICAgICMgQ1RPUlxuICAgIChnZW5lcmF0b3IsIG9wdGlvbnMpIC0+XG4gICAgICAgIHN1cGVyIC4uLlxuXG4gICAgICAgIEBbXFxAbWFpbm1hdHRlcl0gPSB0cnVlXG5cblxuICAgIGFyZ3MgPSBAYXJncyA9IFJlcG9ydC5hcmdzXG5cbiAgICBhcmdzXG4gICAgIC4uXFxwYXJ0ID0gICAgICAgICAgXFxcbiAgICAgLi5cXGNoYXB0ZXIgPSAgICAgICA8WyBWIHMgWCBvPyBnIF0+XG5cbiAgICBcXGNoYXB0ZXIgICAgICAgICAgICA6IChzLCB0b2MsIHR0bCkgLT4gWyBAZy5zdGFydHNlY3Rpb24gXFxjaGFwdGVyLCAwLCAocyBvciBub3QgQFwiQG1haW5tYXR0ZXJcIiksIHRvYywgdHRsIF1cblxuXG4gICAgYXJnc1xuICAgICAuLlxcZnJvbnRtYXR0ZXIgPSAgIFxcXG4gICAgIC4uXFxtYWlubWF0dGVyID0gICAgXFxcbiAgICAgLi5cXGJhY2ttYXR0ZXIgPSAgICA8WyBWIF0+XG5cbiAgICBcXGZyb250bWF0dGVyICAgICAgICA6IS0+IEBbXFxAbWFpbm1hdHRlcl0gPSBmYWxzZVxuICAgIFxcbWFpbm1hdHRlciAgICAgICAgIDohLT4gQFtcXEBtYWlubWF0dGVyXSA9IHRydWVcbiAgICBcXGJhY2ttYXR0ZXIgICAgICAgICA6IS0+IEBbXFxAbWFpbm1hdHRlcl0gPSBmYWxzZVxuIl19

File diff suppressed because one or more lines are too long

45
www/common/latex/echo.js Normal file
View File

@ -0,0 +1,45 @@
// Generated by LiveScript 1.6.0
(function(){
'use strict';
var Echo, out$ = typeof exports != 'undefined' && exports || this;
out$.Echo = Echo = (function(){
Echo.displayName = 'Echo';
var args, prototype = Echo.prototype, constructor = Echo;
args = Echo.args = {};
function Echo(generator, options){}
args.gobbleO = ['H', 'o?'];
Echo.prototype['gobbleO'] = function(){
return [];
};
args.echoO = ['H', 'o?'];
Echo.prototype['echoO'] = function(o){
return ["-", o, "-"];
};
args.echoOGO = ['H', 'o?', 'g', 'o?'];
Echo.prototype['echoOGO'] = function(o1, g, o2){
var x$;
x$ = [];
if (o1) {
x$.push("-", o1, "-");
}
x$.push("+", g, "+");
if (o2) {
x$.push("-", o2, "-");
}
return x$;
};
args.echoGOG = ['H', 'g', 'o?', 'g'];
Echo.prototype['echoGOG'] = function(g1, o, g2){
var x$;
x$ = ["+", g1, "+"];
if (o) {
x$.push("-", o, "-");
}
x$.push("+", g2, "+");
return x$;
};
return Echo;
}());
}).call(this);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWNrYWdlcy9lY2hvLmxzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0VBQUE7O2NBSWEsUUFBTixRQUFBLENBQUE7OztJQUVILElBQUssQ0FBQSxDQUFBLENBQUUsSUFBQyxDQUFBLElBQUssQ0FBQSxDQUFBLENBQUU7SUFHZixRQUFBLENBQUEsSUFBQSxDQUFBLFNBQUEsRUFBQSxPQUFBO0lBSUEsSUFBSSxDQUFDLE9BQVEsQ0FBQSxDQUFBLENBQUUsQ0FBQSxLQUFBLElBQUE7bUJBRWYsYUFBVyxRQUFBLENBQUE7YUFBRzs7SUFJZCxJQUFJLENBQUMsS0FBTSxDQUFBLENBQUEsQ0FBRSxDQUFBLEtBQUEsSUFBQTttQkFFYixXQUFTLFFBQUEsQ0FBQSxDQUFBO2FBQ0wsQ0FBSyxLQUFFLEdBQU0sR0FBYjs7SUFHSixJQUFJLENBQUMsT0FBUSxDQUFBLENBQUEsQ0FBRSxDQUFBLEtBQUEsTUFBQSxLQUFBLElBQUE7bUJBRWYsYUFBVyxRQUFBLENBQUEsRUFBQSxFQUFBLENBQUEsRUFBQSxFQUFBOztXQUNQO01BQ3dCLElBQUcsRUFBSDtRQUFwQixFQUFFLENBQUEsS0FBUSxLQUFFLElBQU8sR0FBVDs7TUFDVixFQUFFLENBQUEsS0FBUSxLQUFFLEdBQU8sR0FBVDtNQUNVLElBQUcsRUFBSDtRQUFwQixFQUFFLENBQUEsS0FBUSxLQUFFLElBQU8sR0FBVDs7OztJQUdsQixJQUFJLENBQUMsT0FBUSxDQUFBLENBQUEsQ0FBRSxDQUFBLEtBQUEsS0FBQSxNQUFBLEdBQUE7bUJBRWYsYUFBVyxRQUFBLENBQUEsRUFBQSxFQUFBLENBQUEsRUFBQSxFQUFBOztXQUNQLENBQUssS0FBRSxJQUFPLEdBQWQ7TUFDd0IsSUFBRyxDQUFIO1FBQXBCLEVBQUUsQ0FBQSxLQUFRLEtBQUUsR0FBTyxHQUFUOztNQUNWLEVBQUUsQ0FBQSxLQUFRLEtBQUUsSUFBTyxHQUFUIiwiZmlsZSI6ImVjaG8uanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuXG4jIG1hY3JvcyBqdXN0IGZvciB0ZXN0aW5nXG5leHBvcnQgY2xhc3MgRWNob1xuXG4gICAgYXJncyA9IEBhcmdzID0ge31cblxuICAgICMgQ1RPUlxuICAgIChnZW5lcmF0b3IsIG9wdGlvbnMpIC0+XG5cblxuXG4gICAgYXJncy5nb2JibGVPID0gPFsgSCBvPyBdPlxuXG4gICAgXFxnb2JibGVPIDogLT4gW11cblxuXG5cbiAgICBhcmdzLmVjaG9PID0gPFsgSCBvPyBdPlxuXG4gICAgXFxlY2hvTyA6IChvKSAtPlxuICAgICAgICBbIFwiLVwiLCBvLCBcIi1cIiBdXG5cblxuICAgIGFyZ3MuZWNob09HTyA9IDxbIEggbz8gZyBvPyBdPlxuXG4gICAgXFxlY2hvT0dPIDogKG8xLCBnLCBvMikgLT5cbiAgICAgICAgW11cbiAgICAgICAgICAgIC4ucHVzaCBcIi1cIiwgbzEsIFwiLVwiIGlmIG8xXG4gICAgICAgICAgICAuLnB1c2ggXCIrXCIsIGcsICBcIitcIlxuICAgICAgICAgICAgLi5wdXNoIFwiLVwiLCBvMiwgXCItXCIgaWYgbzJcblxuXG4gICAgYXJncy5lY2hvR09HID0gPFsgSCBnIG8/IGcgXT5cblxuICAgIFxcZWNob0dPRyA6IChnMSwgbywgZzIpIC0+XG4gICAgICAgIFsgXCIrXCIsIGcxLCBcIitcIiBdXG4gICAgICAgICAgICAuLnB1c2ggXCItXCIsIG8sICBcIi1cIiBpZiBvXG4gICAgICAgICAgICAuLnB1c2ggXCIrXCIsIGcyLCBcIitcIlxuIl19

View File

@ -0,0 +1,14 @@
@font-face {
font-family: 'Computer Modern Bright Semibold';
src: url('cmunbsr.woff') format('woff');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Computer Modern Bright Semibold';
src: url('cmunbso.woff') format('woff');
font-weight: normal;
font-style: italic;
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,29 @@
@font-face {
font-family: 'Computer Modern Bright';
src: url('cmunbmr.woff') format('woff');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Computer Modern Bright';
src: url('cmunbbx.woff') format('woff');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'Computer Modern Bright';
src: url('cmunbmo.woff') format('woff');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: 'Computer Modern Bright';
src: url('cmunbxo.woff') format('woff');
font-weight: bold;
font-style: italic;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,7 @@
@font-face {
font-family: 'Computer Modern Classical Serif Italic';
src: url('cmunci.woff') format('woff');
font-weight: normal;
font-style: italic;
}

View File

@ -0,0 +1,30 @@
@font-face {
font-family: 'Computer Modern Concrete';
src: url('cmunorm.woff') format('woff');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Computer Modern Concrete';
src: url('cmunobx.woff') format('woff');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'Computer Modern Concrete';
src: url('cmunoti.woff') format('woff');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: 'Computer Modern Concrete';
src: url('cmunobi.woff') format('woff');
font-weight: bold;
font-style: italic;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,102 @@
Copyright (C) Authors of original metafont fonts:
Donald Ervin Knuth (cm, concrete fonts)
1995, 1996, 1997 J"org Knappen, 1990, 1992 Norbert Schwarz (ec fonts)
1992-2006 A.Khodulev, O.Lapko, A.Berdnikov, V.Volovich (lh fonts)
1997-2005 Claudio Beccari (cb greek fonts)
2002 FUKUI Rei (tipa fonts)
2003-2005 Han The Thanh (Vietnamese fonts)
1996-2005 Walter Schmidt (cmbright fonts)
Copyright (C) 2003-2009, Andrey V. Panov (panov@canopus.iacp.dvo.ru),
with Reserved Font Family Name "Computer Modern Unicode fonts".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View File

@ -0,0 +1,7 @@
@font-face {
font-family: 'Computer Modern Sans Demi-Condensed';
src: url('cmunssdc.woff') format('woff');
font-weight: normal;
font-style: normal;
}

View File

@ -0,0 +1,31 @@
@font-face {
font-family: 'Computer Modern Sans';
src: url('cmunss.woff') format('woff');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Computer Modern Sans';
src: url('cmunsx.woff') format('woff');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'Computer Modern Sans';
src: url('cmunsi.woff') format('woff');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: 'Computer Modern Sans';
src: url('cmunso.woff') format('woff');
font-weight: bold;
font-style: oblique;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,14 @@
@font-face {
font-family: 'Computer Modern Serif Slanted';
src: url('cmunsl.woff') format('woff');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Computer Modern Serif Slanted';
src: url('cmunbl.woff') format('woff');
font-weight: bold;
font-style: normal;
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,32 @@
@font-face {
font-family: 'Computer Modern Serif';
src: url('cmunrm.woff') format('woff');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Computer Modern Serif';
src: url('cmunbx.woff') format('woff');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'Computer Modern Serif';
src: url('cmunti.woff') format('woff');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: 'Computer Modern Serif';
src: url('cmunbi.woff') format('woff');
font-weight: bold;
font-style: italic;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,15 @@
@font-face {
font-family: 'Computer Modern Typewriter Light';
src: url('cmunbtl.woff') format('woff');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Computer Modern Typewriter Light';
src: url('cmunbto.woff') format('woff');
font-weight: normal;
font-style: italic;
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,7 @@
@font-face {
font-family: 'Computer Modern Typewriter Slanted';
src: url('cmunst.woff') format('woff');
font-weight: normal;
font-style: oblique;
}

Binary file not shown.

View File

@ -0,0 +1,16 @@
@font-face {
font-family: 'Computer Modern Typewriter Variable';
src: url('cmunvt.woff') format('woff');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Computer Modern Typewriter Variable';
src: url('cmunvi.woff') format('woff');
font-weight: normal;
font-style: italic;
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,32 @@
@font-face {
font-family: 'Computer Modern Typewriter';
src: url('cmuntt.woff') format('woff');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Computer Modern Typewriter';
src: url('cmuntb.woff') format('woff');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'Computer Modern Typewriter';
src: url('cmunit.woff') format('woff');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: 'Computer Modern Typewriter';
src: url('cmuntx.woff') format('woff');
font-weight: bold;
font-style: italic;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,7 @@
@font-face {
font-family: 'Computer Modern Upright Italic';
src: url('cmunui.woff') format('woff');
font-weight: normal;
font-style: italic;
}

Binary file not shown.

View File

@ -0,0 +1,13 @@
/* @import url("./Bright/cmun-bright.css"); */
/* @import url("./Bright Semibold/cmun-bright-semibold.css"); */
/* @import url("./Classical Serif Italic/cmun-classical-serif-italic.css"); */
/* @import url("./Concrete/cmun-concrete.css"); */
@import url("./Sans/cmun-sans.css");
/* @import url("./Sans Demi-Condensed/cmun-sans-demicondensed.css"); */
@import url("./Serif/cmun-serif.css");
@import url("./Serif Slanted/cmun-serif-slanted.css");
@import url("./Typewriter/cmun-typewriter.css");
@import url("./Typewriter Slanted/cmun-typewriter-slanted.css");
/* @import url("./Typewriter Light/cmun-typewriter-light.css"); */
/* @import url("./Typewriter Variable/cmun-typewriter-variable.css"); */
/* @import url("./Upright Italic/cmun-upright-italic.css"); */

View File

@ -0,0 +1,16 @@
// Generated by LiveScript 1.6.0
(function(){
'use strict';
var he, Gensymb, out$ = typeof exports != 'undefined' && exports || this;
he = require('he');
out$.Gensymb = Gensymb = (function(){
Gensymb.displayName = 'Gensymb';
var args, symbols, prototype = Gensymb.prototype, constructor = Gensymb;
args = Gensymb.args = {};
function Gensymb(generator, options){}
symbols = Gensymb.symbols = new Map([['degree', he.decode('°')], ['celsius', '\u2103'], ['perthousand', he.decode('‰')], ['ohm', '\u2126'], ['micro', he.decode('μ')]]);
return Gensymb;
}());
}).call(this);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWNrYWdlcy9nZW5zeW1iLmxzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0VBQUE7O0VBRVMsRUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsSUFBQTtpQkFFSSxXQUFOLFFBQUEsQ0FBQTs7O0lBRUgsSUFBSyxDQUFBLENBQUEsQ0FBRSxPQUFDLENBQUEsSUFBSyxDQUFBLENBQUEsQ0FBRTtJQUdmLFFBQUEsQ0FBQSxPQUFBLENBQUEsU0FBQSxFQUFBLE9BQUE7SUFJQSxPQUFRLENBQUEsQ0FBQSxDQUFFLE9BQUMsQ0FBQSxPQUFRLENBQUEsQ0FBQSxLQUFNLElBQUksRUFDdkIsVUFBc0IsRUFBRSxDQUFDLE9BQU8sT0FBQSxLQUNoQyxXQUFzQixZQUN0QixlQUFzQixFQUFFLENBQUMsT0FBTyxVQUFBLEtBQ2hDLE9BQXNCLFlBQ3RCLFNBQXNCLEVBQUUsQ0FBQyxPQUFPLE1BQUEsRUFMVCxDQUFEIiwiZmlsZSI6ImdlbnN5bWIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxucmVxdWlyZSEgaGVcblxuZXhwb3J0IGNsYXNzIEdlbnN5bWJcblxuICAgIGFyZ3MgPSBAYXJncyA9IHt9XG5cbiAgICAjIENUT1JcbiAgICAoZ2VuZXJhdG9yLCBvcHRpb25zKSAtPlxuXG4gICAgIyBUT0RPOiBpbXBsZW1lbnQgcGFja2FnZSBvcHRpb25zXG5cbiAgICBzeW1ib2xzID0gQHN5bWJvbHMgPSBuZXcgTWFwKFtcbiAgICAgICAgKiBcXGRlZ3JlZSAgICAgICAgICAgICAgIGhlLmRlY29kZSAnJmRlZzsnICAgICAgICMgwrAgICBVKzAwQjBcbiAgICAgICAgKiBcXGNlbHNpdXMgICAgICAgICAgICAgICdcXHUyMTAzJyAgICAgICAgICAgICAgICAjIOKEg1xuICAgICAgICAqIFxccGVydGhvdXNhbmQgICAgICAgICAgaGUuZGVjb2RlICcmcGVybWlsOycgICAgIyDigLAgICBVKzIwMzBcbiAgICAgICAgKiBcXG9obSAgICAgICAgICAgICAgICAgICdcXHUyMTI2JyAgICAgICAgICAgICAgICAjIOKEplxuICAgICAgICAqIFxcbWljcm8gICAgICAgICAgICAgICAgaGUuZGVjb2RlICcmbXU7JyAgICAgICAgIyDOvCAgIFUrMDNCQ1xuICAgIF0pXG4iXX0=

View File

@ -0,0 +1,7 @@
// Generated by LiveScript 1.6.0
(function(){
var out$ = typeof exports != 'undefined' && exports || this;
out$.Graphics = require('./graphicx').Graphicx;
}).call(this);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWNrYWdlcy9ncmFwaGljcy5scyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7T0FFTyxXQUFVLFFBQVEsWUFBQSxDQUFhLENBQUMiLCJmaWxlIjoiZ3JhcGhpY3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyIjIGdyYXBoaWNzIGp1c3QgdXNlcyBncmFwaGljeFxuXG5leHBvcnQgR3JhcGhpY3M6IHJlcXVpcmUgJy4vZ3JhcGhpY3gnIC5HcmFwaGljeFxuIl19

View File

@ -0,0 +1,18 @@
// Generated by LiveScript 1.6.0
(function(){
'use strict';
var Graphicx, out$ = typeof exports != 'undefined' && exports || this;
out$.Graphicx = Graphicx = (function(){
Graphicx.displayName = 'Graphicx';
var args, prototype = Graphicx.prototype, constructor = Graphicx;
args = Graphicx.args = {};
function Graphicx(generator, options){}
args['graphicspath'] = ['HV', 'gl'];
Graphicx.prototype['graphicspath'] = function(paths){};
args['includegraphics'] = ['H', 's', 'kv?', 'k'];
args['rotatebox'] = ['H', 'kv?', 'f', 'g'];
return Graphicx;
}());
}).call(this);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWNrYWdlcy9ncmFwaGljeC5scyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztFQUFBOztrQkFFYSxZQUFOLFFBQUEsQ0FBQTs7O0lBRUgsSUFBSyxDQUFBLENBQUEsQ0FBRSxRQUFDLENBQUEsSUFBSyxDQUFBLENBQUEsQ0FBRTtJQUdmLFFBQUEsQ0FBQSxRQUFBLENBQUEsU0FBQSxFQUFBLE9BQUE7SUFNQSxJQUFJLENBQUMsY0FBRCxDQUFlLENBQUEsQ0FBQSxDQUFFLENBQUEsTUFBQSxJQUFBO3VCQUNyQixrQkFBc0IsUUFBQSxDQUFBLEtBQUE7SUFPdEIsSUFBSSxDQUFDLGlCQUFELENBQWtCLENBQUEsQ0FBQSxDQUFFLENBQUEsS0FBQSxLQUFBLE9BQUEsR0FBQTtJQVV4QixJQUFJLENBQUMsV0FBRCxDQUFZLENBQUEsQ0FBQSxDQUFJLENBQUEsS0FBQSxPQUFBLEtBQUEsR0FBQSIsImZpbGUiOiJncmFwaGljeC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5leHBvcnQgY2xhc3MgR3JhcGhpY3hcblxuICAgIGFyZ3MgPSBAYXJncyA9IHt9XG5cbiAgICAjIENUT1JcbiAgICAoZ2VuZXJhdG9yLCBvcHRpb25zKSAtPlxuXG5cblxuICAgICMgVE9ETzogcmVzdHJpY3QgdG8ganVzdCBvbmUgcGF0aD9cbiAgICAjIHsge3BhdGgxL30ge3BhdGgyL30gfVxuICAgIGFyZ3MuXFxncmFwaGljc3BhdGggPSA8WyBIViBnbCBdPlxuICAgIFxcZ3JhcGhpY3NwYXRoICAgICAgIDogKHBhdGhzKSAhLT5cblxuXG5cbiAgICAjIGdyYXBoaWNzOiBcXGluY2x1ZGVncmFwaGljcypbPGxseCxsbHk+XVs8dXJ4LHVyeT5dezxmaWxlPn1cbiAgICAjIGdyYXBoaWN4OiBcXGluY2x1ZGVncmFwaGljcypbPGtleS12YWwgbGlzdD5dezxmaWxlPn1cblxuICAgIGFyZ3MuXFxpbmNsdWRlZ3JhcGhpY3MgPSA8WyBIIHMga3Y/IGsgXT5cblxuXG5cblxuXG5cbiAgICAjIHJvdGF0aW9uXG5cbiAgICAjIFxccm90YXRlYm94W2tleS12YWwgbGlzdF17YW5nbGV9e3RleHR9XG4gICAgYXJncy5cXHJvdGF0ZWJveCA9ICAgPFsgSCBrdj8gZiBnIF0+XG5cblxuICAgICMgc2NhbGluZ1xuXG4gICAgIyBcXHNjYWxlYm94e2gtc2NhbGV9W3Ytc2NhbGVde3RleHR9XG4gICAgIyBcXHJlZmxlY3Rib3h7dGV4dH1cbiAgICAjIFxccmVzaXplYm94KntoLWxlbmd0aH17di1sZW5ndGh9e3RleHR9XG4iXX0=

View File

@ -0,0 +1,26 @@
// Generated by LiveScript 1.6.0
(function(){
'use strict';
var Hyperref, out$ = typeof exports != 'undefined' && exports || this;
out$.Hyperref = Hyperref = (function(){
Hyperref.displayName = 'Hyperref';
var args, prototype = Hyperref.prototype, constructor = Hyperref;
args = Hyperref.args = {};
function Hyperref(generator, options){}
args['href'] = ['H', 'o?', 'u', 'g'];
Hyperref.prototype['href'] = function(opts, url, txt){
return [this.g.create(this.g.link(url), txt)];
};
args['url'] = ['H', 'u'];
Hyperref.prototype['url'] = function(url){
return [this.g.create(this.g.link(url), this.g.createText(url))];
};
args['nolinkurl'] = ['H', 'u'];
Hyperref.prototype['nolinkurl'] = function(url){
return [this.g.create(this.g.link(), this.g.createText(url))];
};
return Hyperref;
}());
}).call(this);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWNrYWdlcy9oeXBlcnJlZi5scyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztFQUFBOztrQkFFYSxZQUFOLFFBQUEsQ0FBQTs7O0lBRUgsSUFBSyxDQUFBLENBQUEsQ0FBRSxRQUFDLENBQUEsSUFBSyxDQUFBLENBQUEsQ0FBRTtJQUdmLFFBQUEsQ0FBQSxRQUFBLENBQUEsU0FBQSxFQUFBLE9BQUE7SUFLQSxJQUFJLENBQUMsTUFBRCxDQUFPLENBQUEsQ0FBQSxDQUFTLENBQUEsS0FBQSxNQUFBLEtBQUEsR0FBQTt1QkFDcEIsVUFBc0IsUUFBQSxDQUFBLElBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQTthQUFvQixDQUFFLElBQUMsQ0FBQSxDQUFDLENBQUMsT0FBTyxJQUFDLENBQUEsQ0FBQyxDQUFDLEtBQUssR0FBRCxHQUFPLEdBQWQsQ0FBWjs7SUFFMUMsSUFBSSxDQUFDLEtBQUQsQ0FBTSxDQUFBLENBQUEsQ0FBVSxDQUFBLEtBQUEsR0FBQTt1QkFDcEIsU0FBc0IsUUFBQSxDQUFBLEdBQUE7YUFBUyxDQUFFLElBQUMsQ0FBQSxDQUFDLENBQUMsT0FBTyxJQUFDLENBQUEsQ0FBQyxDQUFDLEtBQUssR0FBRCxHQUFPLElBQUMsQ0FBQSxDQUFDLENBQUMsV0FBVyxHQUFELENBQTNCLENBQVo7O0lBRS9CLElBQUksQ0FBQyxXQUFELENBQVksQ0FBQSxDQUFBLENBQUksQ0FBQSxLQUFBLEdBQUE7dUJBQ3BCLGVBQXNCLFFBQUEsQ0FBQSxHQUFBO2FBQVMsQ0FBRSxJQUFDLENBQUEsQ0FBQyxDQUFDLE9BQU8sSUFBQyxDQUFBLENBQUMsQ0FBQyxLQUFJLEdBQUksSUFBQyxDQUFBLENBQUMsQ0FBQyxXQUFXLEdBQUQsQ0FBeEIsQ0FBWiIsImZpbGUiOiJoeXBlcnJlZi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5leHBvcnQgY2xhc3MgSHlwZXJyZWZcblxuICAgIGFyZ3MgPSBAYXJncyA9IHt9XG5cbiAgICAjIENUT1JcbiAgICAoZ2VuZXJhdG9yLCBvcHRpb25zKSAtPlxuXG5cbiAgICAjIHBhY2thZ2U6IGh5cGVycmVmXG5cbiAgICBhcmdzLlxcaHJlZiA9ICAgICAgICA8WyBIIG8/IHUgZyBdPlxuICAgIFxcaHJlZiAgICAgICAgICAgICAgIDogKG9wdHMsIHVybCwgdHh0KSAtPiBbIEBnLmNyZWF0ZSBAZy5saW5rKHVybCksIHR4dCBdXG5cbiAgICBhcmdzLlxcdXJsID0gICAgICAgICA8WyBIIHUgXT5cbiAgICBcXHVybCAgICAgICAgICAgICAgICA6ICh1cmwpIC0+IFsgQGcuY3JlYXRlIEBnLmxpbmsodXJsKSwgQGcuY3JlYXRlVGV4dCh1cmwpIF1cblxuICAgIGFyZ3MuXFxub2xpbmt1cmwgPSAgIDxbIEggdSBdPlxuICAgIFxcbm9saW5rdXJsICAgICAgICAgIDogKHVybCkgLT4gWyBAZy5jcmVhdGUgQGcubGluaygpLCBAZy5jcmVhdGVUZXh0KHVybCkgXVxuXG5cbiAgICAjIFRPRE9cbiAgICAjIFxcaHlwZXJiYXNldXJsICBIViB1XG5cbiAgICAjIFxcaHlwZXJyZWZbbGFiZWxde2xpbmsgdGV4dH0gLS0tIGxpa2UgXFxyZWZ7bGFiZWx9LCBidXQgdXNlIFwibGluayB0ZXh0XCIgZm9yIGRpc3BsYXlcbiAgICAjIGFyZ3MuXFxoeXBlcnJlZiA9ICAgIDxbIEggbz8gZyBdPlxuICAgICMgXFxoeXBlcnJlZiAgICAgICAgICAgOiAobGFiZWwsIHR4dCkgLT4gWyBAZy5yZWYgbGFiZWwgXVxuIl19

146
www/common/latex/js/base.js Normal file
View File

@ -0,0 +1,146 @@
function getVariable(el, propertyName) {
return String(getComputedStyle(el).getPropertyValue('--' + propertyName)).trim();
};
function processTheElements() {
var thes = document.querySelectorAll('.the');
for (var i = 0; i < thes.length; i++) {
var v = getVariable(thes[i], thes[i].getAttribute('display-var'));
// only mutate if it actually changed
if (thes[i].textContent != v) {
thes[i].textContent = v;
}
}
}
function _vertical(el, tb) {
var doc, docEl, rect, win;
// return zero for disconnected and hidden (display: none) elements, IE <= 11 only
// running getBoundingClientRect() on a disconnected node in IE throws an error
if ( !el.getClientRects().length ) {
return 0;
}
rect = el.getBoundingClientRect();
doc = el.ownerDocument;
docEl = doc.documentElement;
win = doc.defaultView;
return rect[tb] + win.pageYOffset - docEl.clientTop;
}
function offsetTop(el) {
return _vertical(el, "top");
}
function offsetBottom(el) {
return _vertical(el, "bottom");
}
function offsetBaseline(el) {
var mpbaseline = el.querySelector('.mpbaseline');
return offsetBottom(mpbaseline);
}
function heightAboveBaseline(el) {
var baseline = offsetBaseline(el);
var top = offsetTop(el);
return baseline - top;
}
function positionMarginpars() {
var mpars = document.querySelectorAll('.marginpar > div');
var prevBottom = 0;
mpars.forEach(function(mpar) {
var mpref = document.querySelector('.body #marginref-' + mpar.id);
var baselineref = offsetBottom(mpref);
var heightAB = heightAboveBaseline(mpar);
var height = mpar.offsetHeight;
// round to 1 digit
var top = Math.round((baselineref - heightAB - prevBottom) * 10) / 10;
// only mutate if it actually changed
if (mpar.style.marginTop != Math.max(0, top) + "px") {
mpar.style.marginTop = Math.max(0, top) + "px";
}
// if marginTop would have been negative, the element is now further down by that offset => add it to prevBottom
prevBottom = baselineref - heightAB + height - Math.min(0, top);
});
}
// don't call resize event handlers too often
var optimizedResize = (function() {
var callbacks = [],
running = false;
// fired on resize event
function resize() {
if (!running) {
running = true;
if (window.requestAnimationFrame) {
window.requestAnimationFrame(runCallbacks);
} else {
setTimeout(runCallbacks, 66);
}
}
}
// run the actual callbacks
function runCallbacks() {
callbacks.forEach(function(callback) { callback(); });
running = false;
}
// adds callback to loop
function addCallback(callback) {
if (callback) {
callbacks.push(callback);
}
}
return {
// public method to add additional callback
add: function(callback) {
if (!callbacks.length) {
window.addEventListener('resize', resize);
}
addCallback(callback);
}
}
}());
// setup event listeners
function completed() {
document.removeEventListener("DOMContentLoaded", completed);
window.removeEventListener("load", positionMarginpars);
var observer = new MutationObserver(function() {
processTheElements();
positionMarginpars();
});
observer.observe(document, { attributes: true, childList: true, characterData: true, subtree: true });
// add resize event listener
optimizedResize.add(positionMarginpars);
processTheElements();
positionMarginpars();
}
document.addEventListener("DOMContentLoaded", completed);
window.addEventListener("load", completed);

24452
www/common/latex/latex.js Normal file

File diff suppressed because one or more lines are too long

17
www/common/latex/latex.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,15 @@
// Generated by LiveScript 1.6.0
(function(){
'use strict';
var Latexsym, out$ = typeof exports != 'undefined' && exports || this;
out$.Latexsym = Latexsym = (function(){
Latexsym.displayName = 'Latexsym';
var args, symbols, prototype = Latexsym.prototype, constructor = Latexsym;
args = Latexsym.args = {};
function Latexsym(generator, options){}
symbols = Latexsym.symbols = new Map([['mho', '\u2127'], ['Join', '\u2A1D'], ['Box', '\u25A1'], ['Diamond', '\u25C7'], ['leadsto', '\u2933'], ['sqsubset', '\u228F'], ['sqsupset', '\u2290'], ['lhd', '\u22B2'], ['unlhd', '\u22B4'], ['rhd', '\u22B3'], ['unrhd', '\u22B5']]);
return Latexsym;
}());
}).call(this);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWNrYWdlcy9sYXRleHN5bS5scyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztFQUFBOztrQkFJYSxZQUFOLFFBQUEsQ0FBQTs7O0lBRUgsSUFBSyxDQUFBLENBQUEsQ0FBRSxRQUFDLENBQUEsSUFBSyxDQUFBLENBQUEsQ0FBRTtJQUdmLFFBQUEsQ0FBQSxRQUFBLENBQUEsU0FBQSxFQUFBLE9BQUE7SUFHQSxPQUFRLENBQUEsQ0FBQSxDQUFFLFFBQUMsQ0FBQSxPQUFRLENBQUEsQ0FBQSxLQUFNLElBQUksRUFDdkIsT0FBc0IsWUFDdEIsUUFBc0IsWUFDdEIsT0FBc0IsWUFDdEIsV0FBc0IsWUFDdEIsV0FBc0IsWUFDdEIsWUFBc0IsWUFDdEIsWUFBc0IsWUFDdEIsT0FBc0IsWUFDdEIsU0FBc0IsWUFDdEIsT0FBc0IsWUFDdEIsU0FBc0IsU0FYQyxDQUFEIiwiZmlsZSI6ImxhdGV4c3ltLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cblxuIyBUT0RPOiB0aGlzIGlzIG1hdGggbW9kZSBvbmx5ISFcbmV4cG9ydCBjbGFzcyBMYXRleHN5bVxuXG4gICAgYXJncyA9IEBhcmdzID0ge31cblxuICAgICMgQ1RPUlxuICAgIChnZW5lcmF0b3IsIG9wdGlvbnMpIC0+XG5cblxuICAgIHN5bWJvbHMgPSBAc3ltYm9scyA9IG5ldyBNYXAoW1xuICAgICAgICAqIFxcbWhvICAgICAgICAgICAgICAgICAgJ1xcdTIxMjcnICAgICAgICAgICAgICAgICMg4oSnXG4gICAgICAgICogXFxKb2luICAgICAgICAgICAgICAgICAnXFx1MkExRCcgICAgICAgICAgICAgICAgIyDiqJ1cbiAgICAgICAgKiBcXEJveCAgICAgICAgICAgICAgICAgICdcXHUyNUExJyAgICAgICAgICAgICAgICAjIOKWoVxuICAgICAgICAqIFxcRGlhbW9uZCAgICAgICAgICAgICAgJ1xcdTI1QzcnICAgICAgICAgICAgICAgICMg4peHXG4gICAgICAgICogXFxsZWFkc3RvICAgICAgICAgICAgICAnXFx1MjkzMycgICAgICAgICAgICAgICAgIyDipLNcbiAgICAgICAgKiBcXHNxc3Vic2V0ICAgICAgICAgICAgICdcXHUyMjhGJyAgICAgICAgICAgICAgICAjIOKKj1xuICAgICAgICAqIFxcc3FzdXBzZXQgICAgICAgICAgICAgJ1xcdTIyOTAnICAgICAgICAgICAgICAgICMg4oqQXG4gICAgICAgICogXFxsaGQgICAgICAgICAgICAgICAgICAnXFx1MjJCMicgICAgICAgICAgICAgICAgIyDiirJcbiAgICAgICAgKiBcXHVubGhkICAgICAgICAgICAgICAgICdcXHUyMkI0JyAgICAgICAgICAgICAgICAjIOKKtFxuICAgICAgICAqIFxccmhkICAgICAgICAgICAgICAgICAgJ1xcdTIyQjMnICAgICAgICAgICAgICAgICMg4oqzXG4gICAgICAgICogXFx1bnJoZCAgICAgICAgICAgICAgICAnXFx1MjJCNScgICAgICAgICAgICAgICAgIyDiirVcbiAgICBdKVxuIl19

View File

@ -0,0 +1,18 @@
// Generated by LiveScript 1.6.0
(function(){
'use strict';
var Multicol, out$ = typeof exports != 'undefined' && exports || this;
out$.Multicol = Multicol = (function(){
Multicol.displayName = 'Multicol';
var args, prototype = Multicol.prototype, constructor = Multicol;
args = Multicol.args = {};
function Multicol(generator, options){}
args['multicols'] = ['V', 'n', 'o?', 'o?'];
Multicol.prototype['multicols'] = function(cols, pre){
return [pre, this.g.create(this.g.multicols(cols))];
};
return Multicol;
}());
}).call(this);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWNrYWdlcy9tdWx0aWNvbC5scyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztFQUFBOztrQkFFYSxZQUFOLFFBQUEsQ0FBQTs7O0lBRUgsSUFBSyxDQUFBLENBQUEsQ0FBRSxRQUFDLENBQUEsSUFBSyxDQUFBLENBQUEsQ0FBRTtJQUdmLFFBQUEsQ0FBQSxRQUFBLENBQUEsU0FBQSxFQUFBLE9BQUE7SUFNQSxJQUFJLENBQUMsV0FBRCxDQUFZLENBQUEsQ0FBQSxDQUFJLENBQUEsS0FBQSxLQUFBLE1BQUEsSUFBQTt1QkFFcEIsZUFBc0IsUUFBQSxDQUFBLElBQUEsRUFBQSxHQUFBO2FBQWUsQ0FBRSxLQUFLLElBQUMsQ0FBQSxDQUFDLENBQUMsT0FBTyxJQUFDLENBQUEsQ0FBQyxDQUFDLFVBQVUsSUFBQSxDQUFiLENBQWpCIiwiZmlsZSI6Im11bHRpY29sLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydCBjbGFzcyBNdWx0aWNvbFxuXG4gICAgYXJncyA9IEBhcmdzID0ge31cblxuICAgICMgQ1RPUlxuICAgIChnZW5lcmF0b3IsIG9wdGlvbnMpIC0+XG5cblxuICAgICMgbXVsdGljb2x1bW5zXG5cbiAgICAjIFxcYmVnaW57bXVsdGljb2xzfXtudW1iZXJ9W3ByZXRleHRdW3ByZW11bHRpY29scyBzaXplXVxuICAgIGFyZ3MuXFxtdWx0aWNvbHMgPSAgIDxbIFYgbiBvPyBvPyBdPlxuXG4gICAgXFxtdWx0aWNvbHMgICAgICAgICAgOiAoY29scywgcHJlKSAtPiBbIHByZSwgQGcuY3JlYXRlIEBnLm11bHRpY29scyBjb2xzIF1cbiJdfQ==

21
www/common/latex/stix.js Normal file
View File

@ -0,0 +1,21 @@
// Generated by LiveScript 1.6.0
(function(){
'use strict';
var he, Stix, out$ = typeof exports != 'undefined' && exports || this;
he = require('he');
out$.Stix = Stix = (function(){
Stix.displayName = 'Stix';
var args, symbols, prototype = Stix.prototype, constructor = Stix;
args = Stix.args = {};
function Stix(generator, options){
generator.KaTeX.__defineSymbol("math", "main", "textord", "\u2664", "\\varspadesuit", true);
generator.KaTeX.__defineSymbol("math", "main", "textord", "\u2665", "\\varheartsuit", true);
generator.KaTeX.__defineSymbol("math", "main", "textord", "\u2666", "\\vardiamondsuit", true);
generator.KaTeX.__defineSymbol("math", "main", "textord", "\u2667", "\\varclubsuit", true);
}
symbols = Stix.symbols = new Map([['checkmark', he.decode('&check;')]]);
return Stix;
}());
}).call(this);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWNrYWdlcy9zdGl4LmxzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0VBQUE7O0VBRVMsRUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsSUFBQTtjQUVJLFFBQU4sUUFBQSxDQUFBOzs7SUFFSCxJQUFLLENBQUEsQ0FBQSxDQUFFLElBQUMsQ0FBQSxJQUFLLENBQUEsQ0FBQSxDQUFFO0lBR2YsUUFBQSxDQUFBLElBQUEsQ0FBQSxTQUFBLEVBQUEsT0FBQTtNQUNJLFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBcUIsUUFBUSxRQUFXLFdBQVUsVUFBa0Isa0JBQUUsSUFBeEQ7TUFDOUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxlQUFxQixRQUFRLFFBQVcsV0FBVSxVQUFrQixrQkFBRSxJQUF4RDtNQUM5QixTQUFTLENBQUMsS0FBSyxDQUFDLGVBQXFCLFFBQVEsUUFBVyxXQUFVLFVBQW9CLG9CQUFFLElBQTFEO01BQzlCLFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBcUIsUUFBUSxRQUFXLFdBQVUsVUFBaUIsaUJBQUUsSUFBdkQ7O0lBR2xDLE9BQVEsQ0FBQSxDQUFBLENBQUUsSUFBQyxDQUFBLE9BQVEsQ0FBQSxDQUFBLEtBQU0sSUFBSSxFQUN2QixhQUFzQixFQUFFLENBQUMsT0FBTyxTQUFBLEVBRFQsQ0FBRCIsImZpbGUiOiJzdGl4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbnJlcXVpcmUhIGhlXG5cbmV4cG9ydCBjbGFzcyBTdGl4XG5cbiAgICBhcmdzID0gQGFyZ3MgPSB7fVxuXG4gICAgIyBDVE9SXG4gICAgKGdlbmVyYXRvciwgb3B0aW9ucykgLT5cbiAgICAgICAgZ2VuZXJhdG9yLkthVGVYLl9fZGVmaW5lU3ltYm9sKFwibWF0aFwiLCBcIm1haW5cIiwgXCJ0ZXh0b3JkXCIsIFwiXFx1MjY2NFwiLCBcIlxcXFx2YXJzcGFkZXN1aXRcIiwgdHJ1ZSkgICAgICMg4pmkXG4gICAgICAgIGdlbmVyYXRvci5LYVRlWC5fX2RlZmluZVN5bWJvbChcIm1hdGhcIiwgXCJtYWluXCIsIFwidGV4dG9yZFwiLCBcIlxcdTI2NjVcIiwgXCJcXFxcdmFyaGVhcnRzdWl0XCIsIHRydWUpICAgICAjIOKZpVxuICAgICAgICBnZW5lcmF0b3IuS2FUZVguX19kZWZpbmVTeW1ib2woXCJtYXRoXCIsIFwibWFpblwiLCBcInRleHRvcmRcIiwgXCJcXHUyNjY2XCIsIFwiXFxcXHZhcmRpYW1vbmRzdWl0XCIsIHRydWUpICAgIyDimaZcbiAgICAgICAgZ2VuZXJhdG9yLkthVGVYLl9fZGVmaW5lU3ltYm9sKFwibWF0aFwiLCBcIm1haW5cIiwgXCJ0ZXh0b3JkXCIsIFwiXFx1MjY2N1wiLCBcIlxcXFx2YXJjbHVic3VpdFwiLCB0cnVlKSAgICAgICMg4pmnXG5cblxuICAgIHN5bWJvbHMgPSBAc3ltYm9scyA9IG5ldyBNYXAoW1xuICAgICAgICAqIFxcY2hlY2ttYXJrICAgICAgICAgICAgaGUuZGVjb2RlICcmY2hlY2s7JyAgICAgIyDinJMgICBVKzI3MTNcbiAgICBdKVxuIl19

View File

@ -0,0 +1,16 @@
// Generated by LiveScript 1.6.0
(function(){
'use strict';
var he, Textcomp, out$ = typeof exports != 'undefined' && exports || this;
he = require('he');
out$.Textcomp = Textcomp = (function(){
Textcomp.displayName = 'Textcomp';
var args, symbols, prototype = Textcomp.prototype, constructor = Textcomp;
args = Textcomp.args = {};
function Textcomp(generator, options){}
symbols = Textcomp.symbols = new Map([['textcentoldstyle', '\uF7A2'], ['textdollaroldstyle', '\uF724'], ['textguarani', '\u20B2'], ['textcopyleft', '\u1F12F'], ['textzerooldstyle', '\uF730'], ['textoneoldstyle', '\uF731'], ['texttwooldstyle', '\uF732'], ['textthreeoldstyle', '\uF733'], ['textfouroldstyle', '\uF734'], ['textfiveoldstyle', '\uF735'], ['textsixoldstyle', '\uF736'], ['textsevenoldstyle', '\uF737'], ['texteightoldstyle', '\uF738'], ['textnineoldstyle', '\uF739'], ['textborn', '\u2B51'], ['textdied', he.decode('&dagger;')], ['textpilcrow', he.decode('&para;')], ['textdblhyphen', '\u2E40']]);
return Textcomp;
}());
}).call(this);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWNrYWdlcy90ZXh0Y29tcC5scyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztFQUFBOztFQUVTLEVBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLElBQUE7a0JBRUksWUFBTixRQUFBLENBQUE7OztJQUVILElBQUssQ0FBQSxDQUFBLENBQUUsUUFBQyxDQUFBLElBQUssQ0FBQSxDQUFBLENBQUU7SUFHZixRQUFBLENBQUEsUUFBQSxDQUFBLFNBQUEsRUFBQSxPQUFBO0lBR0EsT0FBUSxDQUFBLENBQUEsQ0FBRSxRQUFDLENBQUEsT0FBUSxDQUFBLENBQUEsS0FBTSxJQUFJLEVBRXZCLG9CQUFzQixZQUN0QixzQkFBc0IsWUFDdEIsZUFBc0IsWUFHdEIsZ0JBQXNCLGFBR3RCLG9CQUFzQixZQUN0QixtQkFBc0IsWUFDdEIsbUJBQXNCLFlBQ3RCLHFCQUFzQixZQUN0QixvQkFBc0IsWUFDdEIsb0JBQXNCLFlBQ3RCLG1CQUFzQixZQUN0QixxQkFBc0IsWUFDdEIscUJBQXNCLFlBQ3RCLG9CQUFzQixZQUd0QixZQUFzQixZQUN0QixZQUFzQixFQUFFLENBQUMsT0FBTyxVQUFBLEtBSWhDLGVBQXNCLEVBQUUsQ0FBQyxPQUFPLFFBQUEsS0FDaEMsaUJBQXNCLFNBNUJDLENBQUQiLCJmaWxlIjoidGV4dGNvbXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxucmVxdWlyZSEgaGVcblxuZXhwb3J0IGNsYXNzIFRleHRjb21wXG5cbiAgICBhcmdzID0gQGFyZ3MgPSB7fVxuXG4gICAgIyBDVE9SXG4gICAgKGdlbmVyYXRvciwgb3B0aW9ucykgLT5cblxuXG4gICAgc3ltYm9scyA9IEBzeW1ib2xzID0gbmV3IE1hcChbXG4gICAgICAgICMgY3VycmVuY2llc1xuICAgICAgICAqIFxcdGV4dGNlbnRvbGRzdHlsZSAgICAgJ1xcdUY3QTInICAgICAgICAgICAgICAgICMg756iXG4gICAgICAgICogXFx0ZXh0ZG9sbGFyb2xkc3R5bGUgICAnXFx1RjcyNCcgICAgICAgICAgICAgICAgIyDvnKRcbiAgICAgICAgKiBcXHRleHRndWFyYW5pICAgICAgICAgICdcXHUyMEIyJyAgICAgICAgICAgICAgICAjIOKCslxuXG4gICAgICAgICMgbGVnYWwgc3ltYm9sc1xuICAgICAgICAqIFxcdGV4dGNvcHlsZWZ0ICAgICAgICAgJ1xcdTFGMTJGJ1xuXG4gICAgICAgICMgb2xkIHN0eWxlIG51bWVyYWxzXG4gICAgICAgICogXFx0ZXh0emVyb29sZHN0eWxlICAgICAnXFx1RjczMCcgICAgICAgICAgICAgICAgIyDvnLBcbiAgICAgICAgKiBcXHRleHRvbmVvbGRzdHlsZSAgICAgICdcXHVGNzMxJyAgICAgICAgICAgICAgICAjIO+csVxuICAgICAgICAqIFxcdGV4dHR3b29sZHN0eWxlICAgICAgJ1xcdUY3MzInICAgICAgICAgICAgICAgICMg75yyXG4gICAgICAgICogXFx0ZXh0dGhyZWVvbGRzdHlsZSAgICAnXFx1RjczMycgICAgICAgICAgICAgICAgIyDvnLNcbiAgICAgICAgKiBcXHRleHRmb3Vyb2xkc3R5bGUgICAgICdcXHVGNzM0JyAgICAgICAgICAgICAgICAjIO+ctFxuICAgICAgICAqIFxcdGV4dGZpdmVvbGRzdHlsZSAgICAgJ1xcdUY3MzUnICAgICAgICAgICAgICAgICMg75y1XG4gICAgICAgICogXFx0ZXh0c2l4b2xkc3R5bGUgICAgICAnXFx1RjczNicgICAgICAgICAgICAgICAgIyDvnLZcbiAgICAgICAgKiBcXHRleHRzZXZlbm9sZHN0eWxlICAgICdcXHVGNzM3JyAgICAgICAgICAgICAgICAjIO+ct1xuICAgICAgICAqIFxcdGV4dGVpZ2h0b2xkc3R5bGUgICAgJ1xcdUY3MzgnICAgICAgICAgICAgICAgICMg75y4XG4gICAgICAgICogXFx0ZXh0bmluZW9sZHN0eWxlICAgICAnXFx1RjczOScgICAgICAgICAgICAgICAgIyDvnLlcblxuICAgICAgICAjIGdlbmVhbG9naWNhbFxuICAgICAgICAqIFxcdGV4dGJvcm4gICAgICAgICAgICAgJ1xcdTJCNTEnICAgICAgICAgICAgICAgICMg4q2RICAgICAgICAgICAgIChhbHRlcm5hdGl2ZXM6IFUrMDAyQSwgVSsyNjA1LCBVKzI3MzYpXG4gICAgICAgICogXFx0ZXh0ZGllZCAgICAgICAgICAgICBoZS5kZWNvZGUgJyZkYWdnZXI7JyAgICAjIOKAoCAgIFUrMjAyMCAgICAoYWx0ZXJuYXRpdmU6IFUrMjcxRClcbiAgICAgICAgIyAqIFxcdGV4dGxlYWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVE9ET1xuXG4gICAgICAgICMgbWlzY1xuICAgICAgICAqIFxcdGV4dHBpbGNyb3cgICAgICAgICAgaGUuZGVjb2RlICcmcGFyYTsnICAgICAgIyDCtiAgIFUrMDBCNlxuICAgICAgICAqIFxcdGV4dGRibGh5cGhlbiAgICAgICAgJ1xcdTJFNDAnICAgICAgICAgICAgICAgICMg4rmAXG5cblxuICAgICAgICAjIFRPRE9cbiAgICAgICAgIyAqIFxcdGV4dGRibGh5cGhlbmNoYXJcblxuICAgICAgICAjICogXFx0ZXh0Y2FwaXRhbGNvbXB3b3JkbWFya1xuICAgICAgICAjICogXFx0ZXh0YXNjZW5kZXJjb21wd29yZG1hcmtcbiAgICAgICAgIyAqIFxcdGV4dHF1b3Rlc3RyYWlnaHRiYXNlXG4gICAgICAgICMgKiBcXHRleHRxdW90ZXN0cmFpZ2h0ZGJsYmFzZVxuICAgICAgICAjICogXFx0ZXh0dGhyZWVxdWFydGVyc2VtZGFzaFxuICAgICAgICAjICogXFx0ZXh0dHdlbHZldWRhc2hcbiAgICAgICAgIyAqIFxcY2FwaXRhbHRpZVxuICAgICAgICAjICogXFxuZXd0aWVcbiAgICAgICAgIyAqIFxcY2FwaXRhbG5ld3RpZVxuICAgICAgICAjICogXFxjYXBpdGFsZ3JhdmVcbiAgICAgICAgIyAqIFxcY2FwaXRhbGFjdXRlXG4gICAgICAgICMgKiBcXGNhcGl0YWxjaXJjdW1mbGV4XG4gICAgICAgICMgKiBcXGNhcGl0YWx0aWxkZVxuICAgICAgICAjICogXFxjYXBpdGFsZGllcmVzaXNcbiAgICAgICAgIyAqIFxcY2FwaXRhbGh1bmdhcnVtbGF1dFxuICAgICAgICAjICogXFxjYXBpdGFscmluZ1xuICAgICAgICAjICogXFxjYXBpdGFsY2Fyb25cbiAgICAgICAgIyAqIFxcY2FwaXRhbGJyZXZlXG4gICAgICAgICMgKiBcXGNhcGl0YWxtYWNyb25cbiAgICAgICAgIyAqIFxcY2FwaXRhbGRvdGFjY2VudFxuICAgICAgICAjICogXFxjYXBpdGFsY2VkaWxsYVxuICAgICAgICAjICogXFxjYXBpdGFsb2dvbmVrXG5cbiAgICAgICAgIyBhbGwgdGhlIG90aGVyIHN5bWJvbHMgYXJlIGFscmVhZHkgZGVmaW5lZCBieSB0dWVuYy5kZWZcbiAgICBdKVxuIl19

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,19 @@
// Generated by LiveScript 1.6.0
(function(){
'use strict';
var XColor, out$ = typeof exports != 'undefined' && exports || this;
out$.XColor = XColor = (function(){
XColor.displayName = 'XColor';
var args, prototype = XColor.prototype, constructor = XColor;
args = XColor.args = {};
function XColor(generator, options){}
args['definecolor'] = ['HV', 'i?', 'c'];
args['color'] = ['HV', 'i?', 'c'];
args['textcolor'] = ['H', 'i?', 'c', 'g'];
args['colorbox'] = ['H', 'i?', 'c', 'g'];
args['fcolorbox'] = ['H', 'i?', 'c', 'c', 'g'];
return XColor;
}());
}).call(this);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWNrYWdlcy94Y29sb3IubHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7RUFBQTs7Z0JBR2EsVUFBTixRQUFBLENBQUE7OztJQUVILElBQUssQ0FBQSxDQUFBLENBQUUsTUFBQyxDQUFBLElBQUssQ0FBQSxDQUFBLENBQUU7SUFHZixRQUFBLENBQUEsTUFBQSxDQUFBLFNBQUEsRUFBQSxPQUFBO0lBT0EsSUFBSSxDQUFDLGFBQUQsQ0FBYyxDQUFBLENBQUEsQ0FBRSxDQUFBLE1BQUEsTUFBQSxHQUFBO0lBSXBCLElBQUksQ0FBQyxPQUFELENBQVEsQ0FBQSxDQUFBLENBQVEsQ0FBQSxNQUFBLE1BQUEsR0FBQTtJQUdwQixJQUFJLENBQUMsV0FBRCxDQUFZLENBQUEsQ0FBQSxDQUFJLENBQUEsS0FBQSxNQUFBLEtBQUEsR0FBQTtJQUdwQixJQUFJLENBQUMsVUFBRCxDQUFXLENBQUEsQ0FBQSxDQUFLLENBQUEsS0FBQSxNQUFBLEtBQUEsR0FBQTtJQUNwQixJQUFJLENBQUMsV0FBRCxDQUFZLENBQUEsQ0FBQSxDQUFJLENBQUEsS0FBQSxNQUFBLEtBQUEsS0FBQSxHQUFBIiwiZmlsZSI6Inhjb2xvci5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5cbmV4cG9ydCBjbGFzcyBYQ29sb3JcblxuICAgIGFyZ3MgPSBAYXJncyA9IHt9XG5cbiAgICAjIENUT1JcbiAgICAoZ2VuZXJhdG9yLCBvcHRpb25zKSAtPlxuXG5cblxuICAgICMgY29sb3JcblxuICAgICMgXFxkZWZpbmVjb2xvcntuYW1lfXttb2RlbH17Y29sb3Igc3BlY2lmaWNhdGlvbn1cbiAgICBhcmdzLlxcZGVmaW5lY29sb3IgPSA8WyBIViBpPyBjIF0+XG5cblxuICAgICMge25hbWV9IG9yIFttb2RlbF17Y29sb3Igc3BlY2lmaWNhdGlvbn1cbiAgICBhcmdzLlxcY29sb3IgPSAgICAgICA8WyBIViBpPyBjIF0+XG5cbiAgICAjIHtuYW1lfXt0ZXh0fSBvciBbbW9kZWxde2NvbG9yIHNwZWNpZmljYXRpb259e3RleHR9XG4gICAgYXJncy5cXHRleHRjb2xvciA9ICAgPFsgSCBpPyBjIGcgXT5cblxuXG4gICAgYXJncy5cXGNvbG9yYm94ID0gICAgPFsgSCBpPyBjIGcgXT5cbiAgICBhcmdzLlxcZmNvbG9yYm94ID0gICA8WyBIIGk/IGMgYyBnIF0+XG4iXX0=