Add initial font metrics and equation rendering.

This commit is contained in:
jmsgrogan 2023-01-25 16:51:36 +00:00
parent c2027801be
commit 5ddd54dd6d
24 changed files with 868 additions and 63 deletions

View file

@ -6,36 +6,81 @@
#include <memory>
#include <vector>
class LatexMathExpression;
using LatexMathExpressionPtr = std::unique_ptr<LatexMathExpression>;
class LatexMathExpression
{
public:
LatexMathExpression(const std::string& expression = {})
: mRawExpression(expression)
enum class Type
{
LINEAR,
LEAF,
FRACTION,
SUBSCRIPT,
SUPERSCRIPT
};
}
void parse()
enum class LineState
{
for (auto c : mRawExpression)
{
NONE,
IN_TAG_NAME,
AWAITING_LBRACE,
IN_TAG_BODY
};
}
}
LatexMathExpression(const std::string& expression);
const std::vector<LatexMathSymbol>& getSymbols() const
{
return mSymbols;
}
LatexMathExpression(Type type);
~LatexMathExpression();
const std::vector<LatexMathSymbol>& getSymbols() const;
const std::vector<LatexMathExpressionPtr>& getExpressions() const;
const Type getType() const;
void setContent(std::vector<LatexMathSymbol>& symbols);
void setRawContent(const std::string& content);
void onTagBodyChar(char c);
void onFreeChar(char c);
void onSpace();
void onLBrace();
void onRBrace();
void onSuperscript();
void onSubscript();
void onLiteral();
void onTagBody();
void onFinishedTagName();
void onCloseExpression();
void parse();
private:
std::size_t mOpenBraceCount{ 0 };
unsigned mOpenTagCount{ 0 };
LineState mLineState{ LineState::NONE };
std::string mWorkingString;
std::string mRawBody;
std::string mRawExpression;
std::unique_ptr<LatexMathExpression> mSuperScriptExpr;
std::unique_ptr<LatexMathExpression> mSubScriptExpr;
std::unique_ptr<LatexMathExpression> mEnclosedExpr;
Type mWorkingType{ Type::LEAF };
LatexMathExpression* mWorkingExpression{ nullptr };
Type mType{ Type::LEAF };
std::vector<LatexMathSymbol> mWorkingSymbols;
std::vector<LatexMathSymbol> mSymbols;
std::vector<LatexMathExpressionPtr> mExpressions;
};