예제 #1
0
        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);
            }
        }
예제 #2
0
 private Expr _Numericize(LetterSym s)
 {
     return s;
 }
예제 #3
0
 private Expr _Canonicalize(LetterSym s)
 {
     return s;
 }
예제 #4
0
 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;
 }