mirror of
https://gitlab.kit.edu/uskyk/typicalc.git
synced 2024-11-08 18:30:42 +00:00
Highlight each type variable separately
This commit is contained in:
parent
a0ae4f08b6
commit
8dd5753ee0
@ -42,13 +42,13 @@ public final class AssumptionGeneratorUtil {
|
||||
if (abs.hasQuantifiedVariables()) {
|
||||
abstraction.append(FOR_ALL);
|
||||
abs.getQuantifiedVariables().forEach(typeVariable -> {
|
||||
String variableTex = new LatexCreatorType(typeVariable).getLatex(mode);
|
||||
String variableTex = new LatexCreatorType(typeVariable, mode).getLatex();
|
||||
abstraction.append(variableTex).append(COMMA);
|
||||
});
|
||||
abstraction.deleteCharAt(abstraction.length() - 1);
|
||||
abstraction.append(DOT_SIGN);
|
||||
}
|
||||
abstraction.append(new LatexCreatorType(abs.getInnerType()).getLatex(mode));
|
||||
abstraction.append(new LatexCreatorType(abs.getInnerType(), mode).getLatex());
|
||||
return abstraction.toString();
|
||||
}
|
||||
}
|
||||
|
@ -86,7 +86,7 @@ public class LatexCreator implements StepVisitor {
|
||||
private String conclusionToLatex(Conclusion conclusion) {
|
||||
String typeAssumptions = typeAssumptionsToLatex(conclusion.getTypeAssumptions(), mode);
|
||||
String term = new LatexCreatorTerm(conclusion.getLambdaTerm(), mode).getLatex();
|
||||
String type = new LatexCreatorType(conclusion.getType()).getLatex(mode);
|
||||
String type = new LatexCreatorType(conclusion.getType(), mode).getLatex();
|
||||
return DOLLAR_SIGN + typeAssumptions + VDASH + term + COLON + type + DOLLAR_SIGN;
|
||||
}
|
||||
|
||||
@ -163,7 +163,7 @@ public class LatexCreator implements StepVisitor {
|
||||
mode == LatexCreatorMode.MATHJAX ? LABEL_VAR_WITH_CLASS : LABEL_VAR, // TODO: differentiate with let
|
||||
UIC));
|
||||
String typeAbstraction = generateTypeAbstraction(varL.getTypeAbsInPremise(), mode);
|
||||
String instantiatedType = new LatexCreatorType(varL.getInstantiatedTypeAbs()).getLatex(mode);
|
||||
String instantiatedType = new LatexCreatorType(varL.getInstantiatedTypeAbs(), mode).getLatex();
|
||||
String premiseRight = typeAbstraction + INSTANTIATE_SIGN + instantiatedType;
|
||||
String premiseLeft = AXC + CURLY_LEFT + DOLLAR_SIGN + ALIGN_BEGIN
|
||||
+ generateVarStepPremise(varL)
|
||||
|
@ -133,8 +133,8 @@ public class LatexCreatorConstraints implements StepVisitor {
|
||||
}
|
||||
|
||||
private String createSingleConstraint(Constraint constraint) {
|
||||
String firstType = new LatexCreatorType(constraint.getFirstType()).getLatex(mode);
|
||||
String secondType = new LatexCreatorType(constraint.getSecondType()).getLatex(mode);
|
||||
String firstType = new LatexCreatorType(constraint.getFirstType(), mode).getLatex();
|
||||
String secondType = new LatexCreatorType(constraint.getSecondType(), mode).getLatex();
|
||||
return firstType + EQUALS + secondType;
|
||||
}
|
||||
|
||||
@ -297,9 +297,9 @@ public class LatexCreatorConstraints implements StepVisitor {
|
||||
sb.append(CURLY_LEFT);
|
||||
sb.append(COLOR_HIGHLIGHTED);
|
||||
}
|
||||
sb.append(new LatexCreatorType(unificationConstraints.get(i).getFirstType()).getLatex(mode));
|
||||
sb.append(new LatexCreatorType(unificationConstraints.get(i).getFirstType(), mode).getLatex());
|
||||
sb.append(EQUALS);
|
||||
sb.append(new LatexCreatorType(unificationConstraints.get(i).getSecondType()).getLatex(mode));
|
||||
sb.append(new LatexCreatorType(unificationConstraints.get(i).getSecondType(), mode).getLatex());
|
||||
if ((markError && i == 0) || markLastTwoConstraints && (i < 2)) {
|
||||
sb.append(CURLY_RIGHT);
|
||||
}
|
||||
@ -310,12 +310,12 @@ public class LatexCreatorConstraints implements StepVisitor {
|
||||
// perform the substitution "manually" and color the new type
|
||||
Substitution s = substitutions.get(substitutions.size() - 1);
|
||||
String original = previousConstraints[invIdx];
|
||||
String originalType = new LatexCreatorType(s.getVariable()).getLatex(mode);
|
||||
String originalType = new LatexCreatorType(s.getVariable(), mode).getLatex();
|
||||
if (original.contains(originalType)) {
|
||||
StringBuilder highlightedChange2 = new StringBuilder();
|
||||
highlightedChange2.append(CURLY_LEFT);
|
||||
highlightedChange2.append(COLOR_HIGHLIGHTED);
|
||||
highlightedChange2.append(new LatexCreatorType(s.getType()).getLatex(mode));
|
||||
highlightedChange2.append(new LatexCreatorType(s.getType(), mode).getLatex());
|
||||
highlightedChange2.append(CURLY_RIGHT);
|
||||
latex.append(original.replace(originalType, highlightedChange2.toString()));
|
||||
} else {
|
||||
@ -341,9 +341,9 @@ public class LatexCreatorConstraints implements StepVisitor {
|
||||
}
|
||||
latex.append(BRACKET_LEFT);
|
||||
latex.append(AMPERSAND);
|
||||
latex.append(new LatexCreatorType(substitutions.get(i).getVariable()).getLatex(mode));
|
||||
latex.append(new LatexCreatorType(substitutions.get(i).getVariable(), mode).getLatex());
|
||||
latex.append(SUBSTITUTION_SIGN);
|
||||
latex.append(new LatexCreatorType(substitutions.get(i).getType()).getLatex(mode));
|
||||
latex.append(new LatexCreatorType(substitutions.get(i).getType(), mode).getLatex());
|
||||
latex.append(BRACKET_RIGHT);
|
||||
latex.append(LATEX_NEW_LINE);
|
||||
}
|
||||
@ -368,9 +368,9 @@ public class LatexCreatorConstraints implements StepVisitor {
|
||||
latex.append(BRACKET_LEFT);
|
||||
typeInferer.getMGU().ifPresent(mgu -> mgu.forEach(substitution -> {
|
||||
latex.append(AMPERSAND);
|
||||
latex.append(new LatexCreatorType(substitution.getVariable()).getLatex(mode));
|
||||
latex.append(new LatexCreatorType(substitution.getVariable(), mode).getLatex());
|
||||
latex.append(SUBSTITUTION_SIGN);
|
||||
latex.append(new LatexCreatorType(substitution.getType()).getLatex(mode));
|
||||
latex.append(new LatexCreatorType(substitution.getType(), mode).getLatex());
|
||||
latex.append(COMMA);
|
||||
latex.append(LATEX_NEW_LINE);
|
||||
}));
|
||||
@ -387,10 +387,10 @@ public class LatexCreatorConstraints implements StepVisitor {
|
||||
latex.append(constraintSetIndex);
|
||||
latex.append(PAREN_LEFT);
|
||||
latex.append(
|
||||
new LatexCreatorType(typeInferer.getFirstInferenceStep().getConclusion().getType()).getLatex(mode));
|
||||
new LatexCreatorType(typeInferer.getFirstInferenceStep().getConclusion().getType(), mode).getLatex());
|
||||
latex.append("" + PAREN_RIGHT + EQUALS);
|
||||
latex.append(
|
||||
new LatexCreatorType(typeInferer.getType().orElseThrow(IllegalStateException::new)).getLatex(mode));
|
||||
new LatexCreatorType(typeInferer.getType().orElseThrow(IllegalStateException::new), mode).getLatex());
|
||||
return latex.toString();
|
||||
}
|
||||
|
||||
@ -414,7 +414,7 @@ public class LatexCreatorConstraints implements StepVisitor {
|
||||
latex.append(constraintSetIndex);
|
||||
latex.append(PAREN_LEFT);
|
||||
latex.append(
|
||||
new LatexCreatorType(typeInferer.getFirstInferenceStep().getConclusion().getType()).getLatex(mode)
|
||||
new LatexCreatorType(typeInferer.getFirstInferenceStep().getConclusion().getType(), mode).getLatex()
|
||||
);
|
||||
latex.append("" + PAREN_RIGHT + COMMA + SIGMA);
|
||||
latex.append(constraintSetIndex);
|
||||
|
@ -17,6 +17,7 @@ import static edu.kit.typicalc.view.content.typeinferencecontent.latexcreator.La
|
||||
public class LatexCreatorType implements TypeVisitor {
|
||||
private final Type type;
|
||||
private static final int MAX_LENGTH = 100000; // 100 KB
|
||||
private final LatexCreatorMode mode;
|
||||
|
||||
private final StringBuilder latex = new StringBuilder();
|
||||
private boolean needsParentheses = false;
|
||||
@ -26,28 +27,33 @@ public class LatexCreatorType implements TypeVisitor {
|
||||
*
|
||||
* @param type the type
|
||||
*/
|
||||
protected LatexCreatorType(Type type) {
|
||||
protected LatexCreatorType(Type type, LatexCreatorMode mode) {
|
||||
this.type = type;
|
||||
this.mode = mode;
|
||||
type.accept(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the generated LaTeX code
|
||||
*/
|
||||
protected String getLatex(LatexCreatorMode mode) {
|
||||
if (mode == LatexCreatorMode.MATHJAX) {
|
||||
// this class is used in frontend/src/mathjax-setup.js
|
||||
return "\\class{typicalc-type typicalc-type-" + type.hashCode() + "}{" + latex + "}";
|
||||
} else {
|
||||
protected String getLatex() {
|
||||
return latex.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(NamedType named) {
|
||||
latex.append(MONO_TEXT);
|
||||
latex.append(CURLY_LEFT);
|
||||
if (mode == LatexCreatorMode.MATHJAX) {
|
||||
// this class is used in frontend/src/mathjax-setup.js
|
||||
latex.append("\\class{typicalc-type typicalc-type-")
|
||||
.append(named.hashCode())
|
||||
.append("}{");
|
||||
}
|
||||
latex.append(named.getName());
|
||||
if (mode == LatexCreatorMode.MATHJAX) {
|
||||
latex.append(CURLY_RIGHT);
|
||||
}
|
||||
latex.append(CURLY_RIGHT);
|
||||
needsParentheses = false;
|
||||
}
|
||||
@ -68,10 +74,19 @@ public class LatexCreatorType implements TypeVisitor {
|
||||
default:
|
||||
throw new IllegalStateException("unreachable code");
|
||||
}
|
||||
if (mode == LatexCreatorMode.MATHJAX) {
|
||||
// this class is used in frontend/src/mathjax-setup.js
|
||||
latex.append("\\class{typicalc-type typicalc-type-")
|
||||
.append(variable.hashCode())
|
||||
.append("}{");
|
||||
}
|
||||
latex.append(name);
|
||||
latex.append(UNDERSCORE);
|
||||
latex.append(CURLY_LEFT);
|
||||
latex.append(variable.getIndex());
|
||||
if (mode == LatexCreatorMode.MATHJAX) {
|
||||
latex.append(CURLY_RIGHT);
|
||||
}
|
||||
latex.append(CURLY_RIGHT);
|
||||
needsParentheses = false;
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
package edu.kit.typicalc.model;
|
||||
|
||||
import edu.kit.typicalc.model.parser.ParseError;
|
||||
import edu.kit.typicalc.model.parser.TypeAssumptionParser;
|
||||
import edu.kit.typicalc.model.step.AbsStepDefault;
|
||||
import edu.kit.typicalc.model.step.VarStepDefault;
|
||||
import edu.kit.typicalc.model.term.AbsTerm;
|
||||
|
@ -19,21 +19,21 @@ class LatexCreatorTypeTest {
|
||||
void identityTest() {
|
||||
typeInferer = model.getTypeInferer("λx.x", new HashMap<>()).unwrap();
|
||||
assertEquals(TREE_VARIABLE + "_{2} " + RIGHT_ARROW + SPACE + TREE_VARIABLE + "_{2}",
|
||||
new LatexCreatorType(typeInferer.getType().get()).getLatex(LatexCreatorMode.NORMAL));
|
||||
new LatexCreatorType(typeInferer.getType().get(), LatexCreatorMode.NORMAL).getLatex());
|
||||
}
|
||||
|
||||
@Test
|
||||
void generatedTypeTest() {
|
||||
typeInferer = model.getTypeInferer("x", new HashMap<>()).unwrap();
|
||||
assertEquals(GENERATED_ASSUMPTION_VARIABLE + "_{1}",
|
||||
new LatexCreatorType(typeInferer.getType().get()).getLatex(LatexCreatorMode.NORMAL));
|
||||
new LatexCreatorType(typeInferer.getType().get(), LatexCreatorMode.NORMAL).getLatex());
|
||||
}
|
||||
|
||||
@Test
|
||||
void namedTypeTest() {
|
||||
typeInferer = model.getTypeInferer("5", new HashMap<>()).unwrap();
|
||||
assertEquals(MONO_TEXT + "{int}",
|
||||
new LatexCreatorType(typeInferer.getType().get()).getLatex(LatexCreatorMode.NORMAL));
|
||||
new LatexCreatorType(typeInferer.getType().get(), LatexCreatorMode.NORMAL).getLatex());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -42,6 +42,6 @@ class LatexCreatorTypeTest {
|
||||
map.put("x", "t1");
|
||||
typeInferer = model.getTypeInferer("x", map).unwrap();
|
||||
assertEquals(USER_VARIABLE + "_{1}",
|
||||
new LatexCreatorType(typeInferer.getType().get()).getLatex(LatexCreatorMode.NORMAL));
|
||||
new LatexCreatorType(typeInferer.getType().get(), LatexCreatorMode.NORMAL).getLatex());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user