Factor launching bergamot into a helper function
This commit is contained in:
parent
8f2b2addc2
commit
7e8870de6c
|
@ -1,3 +1,84 @@
|
||||||
<script src="{{ .Site.Params.bergamotJsUrl }}"></script>
|
<script src="{{ .Site.Params.bergamotJsUrl }}"></script>
|
||||||
{{ $style := resources.Get "scss/bergamot.scss" | resources.ToCSS | resources.Minify }}
|
{{ $style := resources.Get "scss/bergamot.scss" | resources.ToCSS | resources.Minify }}
|
||||||
<link rel="stylesheet" href="{{ $style.Permalink }}">
|
<link rel="stylesheet" href="{{ $style.Permalink }}">
|
||||||
|
<script>
|
||||||
|
const renderRules =
|
||||||
|
`
|
||||||
|
PrecApp @ prec(app(?l, ?r), 100, left) <-;
|
||||||
|
PrecPlus @ prec(plus(?l, ?r), 80, either) <-;
|
||||||
|
PrecAbs @ prec(abs(?x, ?t, ?e), 0, right) <-;
|
||||||
|
PrecArr @ prec(tarr(?l, ?r), 0, right) <-;
|
||||||
|
|
||||||
|
SelectHead @ select(cons([?t, ?v], ?rest), ?default, ?v) <- ?t;
|
||||||
|
SelectTail @ select(cons([?t, ?v], ?rest), ?default, ?found) <- not(?t), select(?rest, ?default, ?found);
|
||||||
|
SelectEmpty @ select(nil, ?default, ?default) <-;
|
||||||
|
|
||||||
|
ParenthAssocLeft @ parenthassoc(?a_i, left, right) <-;
|
||||||
|
ParenthAssocRight @ parenthassoc(?a_i, right, left) <-;
|
||||||
|
ParenthAssocNone @ parenthassoc(?a_i, none, ?pos) <-;
|
||||||
|
ParenthAssocNeq @ parenthassoc(?a_i, ?a_o, ?pos) <- not(symeq(?a_i, ?a_o));
|
||||||
|
|
||||||
|
Parenth @ parenth(?inner, ?outer, ?pos, ?strin, ?strout) <-
|
||||||
|
prec(?inner, ?p_i, ?a_i), prec(?outer, ?p_o, ?a_o),
|
||||||
|
join(["(", ?strin, ")"], ?strinparen),
|
||||||
|
select([ [less(?p_i, ?p_o), strinparen], [less(?p_o, ?p_i), ?strin], [ parenthassoc(?a_i, ?a_o, ?pos), ?strinparen ] ], ?strin, ?strout);
|
||||||
|
ParenthFallback @ parenth(?inner, ?outer, ?pos, ?strin, ?strin) <-;
|
||||||
|
|
||||||
|
LatexListNil @ latexlist(nil, nil) <-;
|
||||||
|
LatexListCons @ latexlist(cons(?x, ?xs), cons(?l_x, ?l_s)) <- latex(?x, ?l_x), latexlist(?xs, ?l_s);
|
||||||
|
|
||||||
|
IntercalateNil @ intercalate(?sep, nil, nil) <-;
|
||||||
|
IntercalateConsCons @ intercalate(?sep, cons(?x_1, cons(?x_2, ?xs)), cons(?x_1, cons(?sep, ?ys))) <- intercalate(?sep, cons(?x_2, ?xs), ?ys);
|
||||||
|
IntercalateConsNil @ intercalate(?sep, cons(?x, nil), cons(?x, nil)) <-;
|
||||||
|
|
||||||
|
NonEmpty @ nonempty(cons(?x, ?xs)) <-;
|
||||||
|
|
||||||
|
LatexInt @ latex(?i, ?l) <- int(?i), tostring(?i, ?l);
|
||||||
|
LatexFloat @ latex(?f, ?l) <- float(?f), tostring(?f, ?l);
|
||||||
|
LatexStr @ latex(?s, ?l) <- str(?s), escapestring(?s, ?l_1), latexifystring(?s, ?l_2), join(["\\\\texttt{\\"", ?l_2, "\\"}"], ?l);
|
||||||
|
LatexMeta @ latex(metavariable(?l), ?l) <-;
|
||||||
|
LatexLit @ latex(lit(?i), ?l) <- latex(?i, ?l);
|
||||||
|
LatexVar @ latex(var(?s), ?l) <- latex(?s, ?l);
|
||||||
|
LatexPlus @ latex(plus(?e_1, ?e_2), ?l) <-
|
||||||
|
latex(?e_1, ?l_1), latex(?e_2, ?l_2),
|
||||||
|
parenth(?e_1, plus(?e_1, ?e_2), left, ?l_1, ?lp_1),
|
||||||
|
parenth(?e_2, plus(?e_1, ?e_2), right, ?l_2, ?lp_2),
|
||||||
|
join([?lp_1, " + ", ?lp_2], ?l);
|
||||||
|
LatexPair @ latex(pair(?e_1, ?e_2), ?l) <- latex(?e_1, ?l_1), latex(?e_2, ?l_2), join(["(", ?l_1, ", ", ?l_2, ")"], ?l);
|
||||||
|
LatexAbs @ latex(abs(?x, ?t, ?e), ?l) <- latex(?e, ?l_e), latex(?t, ?l_t), latex(?x, ?l_x), join(["\\\\lambda ", ?l_x, " : ", ?l_t, " . ", ?l_e], ?l);
|
||||||
|
LatexApp @ latex(app(?e_1, ?e_2), ?l) <-
|
||||||
|
latex(?e_1, ?l_1), latex(?e_2, ?l_2),
|
||||||
|
parenth(?e_1, app(?e_1, ?e_2), left, ?l_1, ?lp_1),
|
||||||
|
parenth(?e_2, app(?e_1, ?e_2), right, ?l_2, ?lp_2),
|
||||||
|
join([?lp_1, " \\\\enspace ", ?lp_2], ?l);
|
||||||
|
|
||||||
|
LatexTInt @ latex(tint, "\\\\text{tint}") <-;
|
||||||
|
LatexTStr @ latex(tstr, "\\\\text{tstr}") <-;
|
||||||
|
LatexTArr @ latex(tarr(?t_1, ?t_2), ?l) <-
|
||||||
|
latex(?t_1, ?l_1), latex(?t_2, ?l_2),
|
||||||
|
parenth(?t_1, tarr(?t_1, ?t_2), left, ?l_1, ?lp_1),
|
||||||
|
parenth(?t_2, tarr(?t_1, ?t_2), right, ?l_2, ?lp_2),
|
||||||
|
join([?lp_1, " \\\\to ", ?lp_2], ?l);
|
||||||
|
LatexTPair @ latex(tpair(?t_1, ?t_2), ?l) <- latex(?t_1, ?l_1), latex(?t_2, ?l_2), join(["(", ?l_1, ", ", ?l_2, ")"], ?l);
|
||||||
|
|
||||||
|
LatexTypeEmpty @ latex(empty, "\\\\varnothing") <-;
|
||||||
|
LatexTypeExtend @ latex(extend(?a, ?b, ?c), ?l) <- latex(?a, ?l_a), latex(?b, ?l_b), latex(?c, ?l_c), join([?l_a, " , ", ?l_b, " : ", ?l_c], ?l);
|
||||||
|
LatexTypeInenv @ latex(inenv(?x, ?t, ?G), ?l) <-latex(?x, ?l_x), latex(?t, ?l_t), latex(?G, ?l_G), join([?l_x, " : ", ?l_t, " \\\\in ", ?l_G], ?l);
|
||||||
|
|
||||||
|
LatexTypeBin @ latex(type(?e, ?t), ?l) <- latex(?e, ?l_e), latex(?t, ?l_t), join([?l_e, " : ", ?l_t], ?l);
|
||||||
|
LatexTypeTer @ latex(type(?G, ?e, ?t), ?l) <- latex(?G, ?l_G), latex(?e, ?l_e), latex(?t, ?l_t), join([?l_G, " \\\\vdash ", ?l_e, " : ", ?l_t], ?l);
|
||||||
|
|
||||||
|
LatexIsInt @ latex(int(?e), ?l) <- latex(?e, ?l_e), join([?l_e, " \\\\in \\\\texttt{Int}"], ?l);
|
||||||
|
LatexIsFloat @ latex(float(?e), ?l) <- latex(?e, ?l_e), join([?l_e, " \\\\in \\\\texttt{Float}"], ?l);
|
||||||
|
LatexIsNum @ latex(num(?e), ?l) <- latex(?e, ?l_e), join([?l_e, " \\\\in \\\\texttt{Num}"], ?l);
|
||||||
|
LatexIsStr @ latex(str(?e), ?l) <- latex(?e, ?l_e), join([?l_e, " \\\\in \\\\texttt{Str}"], ?l);
|
||||||
|
LatexSym @ latex(?s, ?l) <- sym(?s), tostring(?s, ?l_1), join(["\\\\text{", ?l_1,"}"], ?l);
|
||||||
|
LatexCall @ latex(?c, ?l) <- call(?c, ?n, ?ts), nonempty(?ts), latexlist(?ts, ?lts_1), intercalate(", ", ?lts_1, ?lts_2), join(?lts_2, ?lts_3), join(["\\\\text{", ?n, "}", "(", ?lts_3, ")"], ?l);
|
||||||
|
`;
|
||||||
|
function runBergamot(nodeId, inputPrompt, rules, renderRules, query) {
|
||||||
|
var app = Elm.Main.init({
|
||||||
|
node: document.getElementById(nodeId),
|
||||||
|
flags: { renderRules, inputRules: inputPrompt, rules , query }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
|
@ -1,81 +1,4 @@
|
||||||
<div id="{{ .Get "id" }}"></div>
|
<div id="{{ .Get "id" }}"></div>
|
||||||
<script>
|
<script>
|
||||||
const renderRules =
|
runBergamot('{{ .Get "id" }}', '{{ .Get "prompt" }}', '{{ .Inner }}', renderRules, '{{ .Get "query" }}');
|
||||||
`
|
|
||||||
PrecApp @ prec(app(?l, ?r), 100, left) <-;
|
|
||||||
PrecPlus @ prec(plus(?l, ?r), 80, either) <-;
|
|
||||||
PrecAbs @ prec(abs(?x, ?t, ?e), 0, right) <-;
|
|
||||||
PrecArr @ prec(tarr(?l, ?r), 0, right) <-;
|
|
||||||
|
|
||||||
SelectHead @ select(cons([?t, ?v], ?rest), ?default, ?v) <- ?t;
|
|
||||||
SelectTail @ select(cons([?t, ?v], ?rest), ?default, ?found) <- not(?t), select(?rest, ?default, ?found);
|
|
||||||
SelectEmpty @ select(nil, ?default, ?default) <-;
|
|
||||||
|
|
||||||
ParenthAssocLeft @ parenthassoc(?a_i, left, right) <-;
|
|
||||||
ParenthAssocRight @ parenthassoc(?a_i, right, left) <-;
|
|
||||||
ParenthAssocNone @ parenthassoc(?a_i, none, ?pos) <-;
|
|
||||||
ParenthAssocNeq @ parenthassoc(?a_i, ?a_o, ?pos) <- not(symeq(?a_i, ?a_o));
|
|
||||||
|
|
||||||
Parenth @ parenth(?inner, ?outer, ?pos, ?strin, ?strout) <-
|
|
||||||
prec(?inner, ?p_i, ?a_i), prec(?outer, ?p_o, ?a_o),
|
|
||||||
join(["(", ?strin, ")"], ?strinparen),
|
|
||||||
select([ [less(?p_i, ?p_o), strinparen], [less(?p_o, ?p_i), ?strin], [ parenthassoc(?a_i, ?a_o, ?pos), ?strinparen ] ], ?strin, ?strout);
|
|
||||||
ParenthFallback @ parenth(?inner, ?outer, ?pos, ?strin, ?strin) <-;
|
|
||||||
|
|
||||||
LatexListNil @ latexlist(nil, nil) <-;
|
|
||||||
LatexListCons @ latexlist(cons(?x, ?xs), cons(?l_x, ?l_s)) <- latex(?x, ?l_x), latexlist(?xs, ?l_s);
|
|
||||||
|
|
||||||
IntercalateNil @ intercalate(?sep, nil, nil) <-;
|
|
||||||
IntercalateConsCons @ intercalate(?sep, cons(?x_1, cons(?x_2, ?xs)), cons(?x_1, cons(?sep, ?ys))) <- intercalate(?sep, cons(?x_2, ?xs), ?ys);
|
|
||||||
IntercalateConsNil @ intercalate(?sep, cons(?x, nil), cons(?x, nil)) <-;
|
|
||||||
|
|
||||||
NonEmpty @ nonempty(cons(?x, ?xs)) <-;
|
|
||||||
|
|
||||||
LatexInt @ latex(?i, ?l) <- int(?i), tostring(?i, ?l);
|
|
||||||
LatexFloat @ latex(?f, ?l) <- float(?f), tostring(?f, ?l);
|
|
||||||
LatexStr @ latex(?s, ?l) <- str(?s), escapestring(?s, ?l_1), latexifystring(?s, ?l_2), join(["\\\\texttt{\\"", ?l_2, "\\"}"], ?l);
|
|
||||||
LatexMeta @ latex(metavariable(?l), ?l) <-;
|
|
||||||
LatexLit @ latex(lit(?i), ?l) <- latex(?i, ?l);
|
|
||||||
LatexVar @ latex(var(?s), ?l) <- latex(?s, ?l);
|
|
||||||
LatexPlus @ latex(plus(?e_1, ?e_2), ?l) <-
|
|
||||||
latex(?e_1, ?l_1), latex(?e_2, ?l_2),
|
|
||||||
parenth(?e_1, plus(?e_1, ?e_2), left, ?l_1, ?lp_1),
|
|
||||||
parenth(?e_2, plus(?e_1, ?e_2), right, ?l_2, ?lp_2),
|
|
||||||
join([?lp_1, " + ", ?lp_2], ?l);
|
|
||||||
LatexPair @ latex(pair(?e_1, ?e_2), ?l) <- latex(?e_1, ?l_1), latex(?e_2, ?l_2), join(["(", ?l_1, ", ", ?l_2, ")"], ?l);
|
|
||||||
LatexAbs @ latex(abs(?x, ?t, ?e), ?l) <- latex(?e, ?l_e), latex(?t, ?l_t), latex(?x, ?l_x), join(["\\\\lambda ", ?l_x, " : ", ?l_t, " . ", ?l_e], ?l);
|
|
||||||
LatexApp @ latex(app(?e_1, ?e_2), ?l) <-
|
|
||||||
latex(?e_1, ?l_1), latex(?e_2, ?l_2),
|
|
||||||
parenth(?e_1, app(?e_1, ?e_2), left, ?l_1, ?lp_1),
|
|
||||||
parenth(?e_2, app(?e_1, ?e_2), right, ?l_2, ?lp_2),
|
|
||||||
join([?lp_1, " \\\\enspace ", ?lp_2], ?l);
|
|
||||||
|
|
||||||
LatexTInt @ latex(tint, "\\\\text{tint}") <-;
|
|
||||||
LatexTStr @ latex(tstr, "\\\\text{tstr}") <-;
|
|
||||||
LatexTArr @ latex(tarr(?t_1, ?t_2), ?l) <-
|
|
||||||
latex(?t_1, ?l_1), latex(?t_2, ?l_2),
|
|
||||||
parenth(?t_1, tarr(?t_1, ?t_2), left, ?l_1, ?lp_1),
|
|
||||||
parenth(?t_2, tarr(?t_1, ?t_2), right, ?l_2, ?lp_2),
|
|
||||||
join([?lp_1, " \\\\to ", ?lp_2], ?l);
|
|
||||||
LatexTPair @ latex(tpair(?t_1, ?t_2), ?l) <- latex(?t_1, ?l_1), latex(?t_2, ?l_2), join(["(", ?l_1, ", ", ?l_2, ")"], ?l);
|
|
||||||
|
|
||||||
LatexTypeEmpty @ latex(empty, "\\\\varnothing") <-;
|
|
||||||
LatexTypeExtend @ latex(extend(?a, ?b, ?c), ?l) <- latex(?a, ?l_a), latex(?b, ?l_b), latex(?c, ?l_c), join([?l_a, " , ", ?l_b, " : ", ?l_c], ?l);
|
|
||||||
LatexTypeInenv @ latex(inenv(?x, ?t, ?G), ?l) <-latex(?x, ?l_x), latex(?t, ?l_t), latex(?G, ?l_G), join([?l_x, " : ", ?l_t, " \\\\in ", ?l_G], ?l);
|
|
||||||
|
|
||||||
LatexTypeBin @ latex(type(?e, ?t), ?l) <- latex(?e, ?l_e), latex(?t, ?l_t), join([?l_e, " : ", ?l_t], ?l);
|
|
||||||
LatexTypeTer @ latex(type(?G, ?e, ?t), ?l) <- latex(?G, ?l_G), latex(?e, ?l_e), latex(?t, ?l_t), join([?l_G, " \\\\vdash ", ?l_e, " : ", ?l_t], ?l);
|
|
||||||
|
|
||||||
LatexIsInt @ latex(int(?e), ?l) <- latex(?e, ?l_e), join([?l_e, " \\\\in \\\\texttt{Int}"], ?l);
|
|
||||||
LatexIsFloat @ latex(float(?e), ?l) <- latex(?e, ?l_e), join([?l_e, " \\\\in \\\\texttt{Float}"], ?l);
|
|
||||||
LatexIsNum @ latex(num(?e), ?l) <- latex(?e, ?l_e), join([?l_e, " \\\\in \\\\texttt{Num}"], ?l);
|
|
||||||
LatexIsStr @ latex(str(?e), ?l) <- latex(?e, ?l_e), join([?l_e, " \\\\in \\\\texttt{Str}"], ?l);
|
|
||||||
LatexSym @ latex(?s, ?l) <- sym(?s), tostring(?s, ?l_1), join(["\\\\text{", ?l_1,"}"], ?l);
|
|
||||||
LatexCall @ latex(?c, ?l) <- call(?c, ?n, ?ts), nonempty(?ts), latexlist(?ts, ?lts_1), intercalate(", ", ?lts_1, ?lts_2), join(?lts_2, ?lts_3), join(["\\\\text{", ?n, "}", "(", ?lts_3, ")"], ?l);
|
|
||||||
`;
|
|
||||||
const inputRules = `{{ .Get "prompt" }}`;
|
|
||||||
var app = Elm.Main.init({
|
|
||||||
node: document.getElementById('{{ .Get "id" }}'),
|
|
||||||
flags: { renderRules, inputRules, rules: '{{- strings.Trim .Inner " \\n" -}}', query: '{{ .Get "query" }}' }
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user