protected override Box __Translate(LetterSym s) { /* TODO: need to handle accent, format */ char c = s.Letter; CharBox cb = new CharBox(s, c, false, (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= 'α' && c <= 'ω') || c == Unicode.G.GREEK_PHI_SYMBOL, Syntax.TType.Ord); if (s.Subscript != new NullExpr()) { return(new AtomBox(null, cb, Translate(s.Subscript), null, Syntax.TType.Ord)); } else { return(cb); } }
private Expr _Numericize(LetterSym s) { return s; }
private Expr _Canonicalize(LetterSym s) { return s; }
private static Expr SubstSubscript(List<Expr> variables, List<Expr> values, Expr final) { if (final is IntegerNumber) return final; if (final is LetterSym && (final as LetterSym).Subscript != null) final = new LetterSym((final as LetterSym).Letter, SubstSubscript(variables, values, (final as LetterSym).Subscript)); if (final is CompositeExpr) { int len = (final as CompositeExpr).Args.Length; Expr[] theArg = new Expr[len]; for (int i = 0; i < len; i++) { theArg[i] = SubstSubscript(variables, values, (final as CompositeExpr).Args[i]); } return new CompositeExpr((final as CompositeExpr).Head, theArg); } for (int k = 0; k < variables.Count; k++) final = Engine.Substitute(final, variables[k], values[k].Clone()); return final; }