示例#1
0
        /// <summary>
        /// Performs the conversion procedure.
        /// </summary>
        /// <param name="expr">The expression to convert.</param>
        /// <returns>The conversion result.</returns>
        public override string Convert(LatexExpression expr)
        {
            if (expr.Expressions == null)
            {
                return("");
            }
            GetParameters();
            var bld = new StringBuilder();

            if (_mathMode)
            {
                bld.Append("<mover accent=\"true\">\n");
                if (!_stretchy)
                {
                    bld.Append(expr.Expressions[0][0].Convert());
                }
                else
                {
                    bld.Append(SequenceConverter.ConvertOutline(expr.Expressions[0], expr.Customization));
                }
                bld.Append("<mo stretchy=\"true\">" + _value + "</mo>\n</mover>\n");
            }
            else
            {
                MathConverter.AppendMathProlog(bld, "accent", true, expr.Customization);
                bld.Append("<mrow>");
                bld.Append("<mover accent=\"true\">\n");
                bld.Append(expr.Expressions[0][0].Convert());
                bld.Append("<mo>" + _value + "</mo>\n</mover>\n");
                bld.Append("</mrow>\n");
                MathConverter.AppendMathEpilog(bld);
            }
            return(bld.ToString());
        }
        /// <summary>
        /// Performs the conversion procedure.
        /// </summary>
        /// <param name="expr">The expression to convert.</param>
        /// <returns>The conversion result.</returns>
        public override string Convert(LatexExpression expr)
        {
            var bld = new StringBuilder("<p style=\"text-align:");

            bld.Append(_alignment);
            bld.Append(";\">\n");
            bld.Append(SequenceConverter.ConvertOutline(expr.Expressions[0], expr.Customization));
            bld.Append("</p>\n");
            return(bld.ToString());
        }
        /// <summary>
        /// Performs the conversion procedure.
        /// </summary>
        /// <param name="expr">The expression to convert.</param>
        /// <returns>The conversion result.</returns>
        public override string Convert(LatexExpression expr)
        {
            var bld = new StringBuilder();

            bld.Append("<mfrac>\n<mrow>\n");
            bld.Append(SequenceConverter.ConvertOutline(expr.Expressions[0], expr.Customization));
            bld.Append("</mrow>\n<mrow>\n");
            bld.Append(SequenceConverter.ConvertOutline(expr.Expressions[1], expr.Customization));
            bld.Append("</mrow>\n</mfrac>\n");
            return(bld.ToString());
        }
示例#4
0
        /// <summary>
        /// Performs the conversion procedure.
        /// </summary>
        /// <param name="expr">The expression to convert.</param>
        /// <returns>The conversion result.</returns>
        public override string Convert(LatexExpression expr)
        {
            if (expr.Expressions == null)
            {
                return("");
            }
            var alg = "<code class=\"algorithm\">";

            alg += SequenceConverter.ConvertOutline(expr.Expressions[0], expr.Customization);
            return(alg + "</code>\n");
        }
示例#5
0
        /// <summary>
        /// Performs the conversion procedure.
        /// </summary>
        /// <param name="expr">The expression to convert.</param>
        /// <returns>The conversion result.</returns>
        public override string Convert(LatexExpression expr)
        {
            if (expr.Expressions == null)
            {
                return("");
            }
            var url  = expr.Expressions[0][0].Name;
            var text = SequenceConverter.ConvertOutline(expr.Expressions[1], expr.Customization);

            return("<a href=\"" + url + "\">" + text + "</a>");
        }
        /// <summary>
        /// Performs the conversion procedure of math blocks.
        /// </summary>
        /// <param name="outline">The sequence of expressions to convert.</param>
        /// <param name="altText">The alternative text.</param>
        /// <param name="inline">Indicates whether the math block is inline.</param>
        /// <returns>The converted XML string.</returns>
        private static string CommonConvert(IList <LatexExpression> outline, string altText,
                                            bool inline, LatexMathToMathMLConverter customization)
        {
            if (outline.Count == 0)
            {
                return("");
            }
            var bld = new StringBuilder();

            AppendMathProlog(bld, altText, inline, customization);
            bld.Append("<mrow>\n");
            bld.Append(SequenceConverter.ConvertOutline(outline, customization));
            bld.Append("</mrow>\n");
            AppendMathEpilog(bld);
            return(bld.ToString());
        }
        /// <summary>
        /// Performs the conversion procedure.
        /// </summary>
        /// <param name="expr">The expression to convert.</param>
        /// <returns>The conversion result.</returns>
        public override string Convert(LatexExpression expr)
        {
            CommandConverter converter;

            if (CommandConverters.TryGetValue(expr.GetCommandConverterHashCode(), out converter))
            {
                if (converter.ExpectedBranchesCount > 0 && (expr.Expressions == null || expr.Expressions.Count < converter.ExpectedBranchesCount))
                {
                    throw new FormatException(@"Unexpected format in command \\" + converter.Name);
                    //return "<!-- Unexpected format in command \\" + converter.Name + " -->";
                }
                var result = converter.Convert(expr);
                // Make sure that {} blocks which were attached to the command by mistake will be converted, too.
                // Goddamn ancient Latex
                if (expr.Expressions != null && expr.Expressions.Count > converter.ExpectedBranchesCount)
                {
                    for (int i = converter.ExpectedBranchesCount; i < expr.Expressions.Count; i++)
                    {
                        result += SequenceConverter.ConvertOutline(expr.Expressions[i], expr.Customization);
                    }
                }
                return(result);
            }
            string constant;

            if (CommandConstants.TryGetValue(expr.Name, out constant))
            {
                if (expr.MathMode)
                {
                    return("<mi>" + constant + "</mi>");
                }
                return(constant);
            }
            if ((constant = SearchInTables(MathCommandConstants, expr)) != null)
            {
                return(constant);
            }
            if ((constant = SearchInTables(MathFunctionsCommandConstants, expr)) != null)
            {
                return(constant);
            }
            if ((constant = SearchInTables(MathFunctionsScriptCommandConstants, expr)) != null)
            {
                return(constant);
            }
            return("<!-- \\" + LatexStringToXmlString(expr.Name) + " -->\n");
        }
        /// <summary>
        /// Performs the conversion procedure (comments the expression).
        /// </summary>
        /// <param name="expr">The expression to convert.</param>
        /// <returns>The conversion result.</returns>
        public override string Convert(LatexExpression expr)
        {
            var bld = new StringBuilder();
            int parentChildNumber = expr.Expressions.Count == 1 ? 0 : 1;
            var rows       = expr.Expressions[parentChildNumber];
            var alignments = parentChildNumber > 0 ? expr.Expressions[0][0].Name : "";

            alignments = alignments.Replace("|", "");
            bld.Append("<mtable>\n");
            for (int i = 0; i < rows.Count; i++)
            {
                bld.Append("<mtr>\n");
                for (int j = 0; j < rows[i].Expressions[0].Count; j++)
                {
                    #region Determine the alignment
                    var alignment = "center";
                    if (j < alignments.Length)
                    {
                        switch (alignments[j])
                        {
                        case 'c':
                            alignment = "center";
                            break;

                        case 'l':
                            alignment = "left";
                            break;

                        case 'r':
                            alignment = "right";
                            break;
                        }
                    }
                    #endregion
                    bld.Append("<mtd columnalign=\"");
                    bld.Append(alignment);
                    bld.Append("\">\n<mrow>\n");
                    bld.Append(SequenceConverter.ConvertOutline(rows[i].Expressions[0][j].Expressions[0], expr.Customization));
                    bld.Append("</mrow>\n</mtd>\n");
                }
                bld.Append("</mtr>\n");
            }
            bld.Append("</mtable>\n");
            return(bld.ToString());
        }
        /// <summary>
        /// Performs the conversion procedure.
        /// </summary>
        /// <param name="expr">The expression to convert.</param>
        /// <returns>The conversion result.</returns>
        public override string Convert(LatexExpression expr)
        {
            var bld = new StringBuilder();

            if (expr.Options == null)
            {
                bld.Append("<msqrt>\n<mrow>\n");
                bld.Append(SequenceConverter.ConvertOutline(expr.Expressions[0], expr.Customization));
                bld.Append("</mrow>\n</msqrt>\n");
                return(bld.ToString());
            }
            bld.Append("<mroot>\n<mrow>\n");
            bld.Append(SequenceConverter.ConvertOutline(expr.Expressions[0], expr.Customization));
            bld.Append("</mrow>\n<mrow>\n");
            bld.Append(SequenceConverter.ConvertOutline(expr.Options.AsExpressions, expr.Customization));
            bld.Append("</mrow>\n</mroot>\n");
            return(bld.ToString());
        }
示例#10
0
        /// <summary>
        /// Performs the conversion procedure.
        /// </summary>
        /// <param name="expr">The expression to convert.</param>
        /// <returns>The conversion result.</returns>
        public override string Convert(LatexExpression expr)
        {
            if (expr.Expressions == null)
            {
                return("");
            }
            if (expr.Parent.ExprType == ExpressionType.Block && expr.Parent.Name.IndexOf("script") > -1)
            {
                return(SequenceConverter.ConvertOutline(expr.Expressions[0], expr.Customization));
            }
            var    bld = new StringBuilder();
            string tag;

            tag = expr.Name == "^" ? "sup" : "sub";
            bld.Append("<" + tag + ">\n");
            bld.Append(SequenceConverter.ConvertOutline(expr.Expressions[0], expr.Customization));
            bld.Append("</" + tag + ">");
            return(bld.ToString());
        }
        /// <summary>
        /// Performs the conversion procedure (comments the expression).
        /// </summary>
        /// <param name="expr">The expression to convert.</param>
        /// <returns>The conversion result.</returns>
        public override string Convert(LatexExpression expr)
        {
            var bld = new StringBuilder();

            MathConverter.AppendMathProlog(bld, "eqnarray", false, expr.Customization);
            var rows = expr.Expressions[0];

            bld.Append("<mtable>\n");
            for (int i = 0; i < rows.Count; i++)
            {
                bld.Append("<mtr>\n");
                for (int j = 0; j < rows[i].Expressions[0].Count; j++)
                {
                    bld.Append("<mtd columnalign=\"left\">\n<mrow>\n");
                    bld.Append(SequenceConverter.ConvertOutline(rows[i].Expressions[0][j].Expressions[0], expr.Customization));
                    bld.Append("</mrow>\n</mtd>\n");
                }
                bld.Append("</mtr>\n");
            }
            bld.Append("</mtable>\n");
            MathConverter.AppendMathEpilog(bld);
            return(bld.ToString());
        }
示例#12
0
 /// <summary>
 /// Performs the conversion procedure.
 /// </summary>
 /// <param name="expr">The expression to convert.</param>
 /// <returns>The conversion result.</returns>
 public override string Convert(LatexExpression expr)
 {
     return("<span class=\"algorithm_token\">procedure " +
            (expr.Expressions == null? "" : SequenceConverter.ConvertOutline(expr.Expressions[0], expr.Customization)) + "</span>");
 }