tdf#40436 tdf#47914 RGB personalized color for math and laplace symbol 2
Change-Id: Id0791609ada5b9f5460e46b20cfc7ce600cd3043 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96890 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
@@ -189,6 +189,7 @@
|
|||||||
#define RID_COLORX_SILVER_HELP NC_("RID_COLORX_SILVER_HELP", "Color Silver" )
|
#define RID_COLORX_SILVER_HELP NC_("RID_COLORX_SILVER_HELP", "Color Silver" )
|
||||||
#define RID_COLORX_TEAL_HELP NC_("RID_COLORX_TEAL_HELP", "Color Teal" )
|
#define RID_COLORX_TEAL_HELP NC_("RID_COLORX_TEAL_HELP", "Color Teal" )
|
||||||
#define RID_COLORX_YELLOW_HELP NC_("RID_COLORX_YELLOW_HELP", "Color Yellow" )
|
#define RID_COLORX_YELLOW_HELP NC_("RID_COLORX_YELLOW_HELP", "Color Yellow" )
|
||||||
|
#define RID_COLORX_RGB_HELP NC_("RID_COLORX_RGB_HELP", "Color RGB" )
|
||||||
#define RID_LRGROUPX_HELP NC_("RID_LRGROUPX_HELP", "Group Brackets" )
|
#define RID_LRGROUPX_HELP NC_("RID_LRGROUPX_HELP", "Group Brackets" )
|
||||||
#define RID_LRPARENTX_HELP NC_("RID_LRPARENTX_HELP", "Round Brackets" )
|
#define RID_LRPARENTX_HELP NC_("RID_LRPARENTX_HELP", "Round Brackets" )
|
||||||
#define RID_LRBRACKETX_HELP NC_("RID_LRBRACKETX_HELP", "Square Brackets" )
|
#define RID_LRBRACKETX_HELP NC_("RID_LRBRACKETX_HELP", "Square Brackets" )
|
||||||
@@ -235,6 +236,7 @@
|
|||||||
#define RID_INFINITY_HELP NC_("RID_INFINITY_HELP", "Infinity" )
|
#define RID_INFINITY_HELP NC_("RID_INFINITY_HELP", "Infinity" )
|
||||||
#define RID_PARTIAL_HELP NC_("RID_PARTIAL_HELP", "Partial" )
|
#define RID_PARTIAL_HELP NC_("RID_PARTIAL_HELP", "Partial" )
|
||||||
#define RID_NABLA_HELP NC_("RID_NABLA_HELP", "Nabla" )
|
#define RID_NABLA_HELP NC_("RID_NABLA_HELP", "Nabla" )
|
||||||
|
#define RID_LAPLACE_HELP NC_("RID_LAPLACE_HELP", "Laplace" )
|
||||||
#define RID_WP_HELP NC_("RID_WP_HELP", "Weierstrass p" )
|
#define RID_WP_HELP NC_("RID_WP_HELP", "Weierstrass p" )
|
||||||
#define RID_DOTSAXIS_HELP NC_("RID_DOTSAXIS_HELP", "Dots In Middle" )
|
#define RID_DOTSAXIS_HELP NC_("RID_DOTSAXIS_HELP", "Dots In Middle" )
|
||||||
#define RID_DOTSUP_HELP NC_("RID_DOTSUP_HELP", "Dots To Top" )
|
#define RID_DOTSUP_HELP NC_("RID_DOTSUP_HELP", "Dots To Top" )
|
||||||
@@ -308,6 +310,7 @@
|
|||||||
#define STR_SILVER NC_("STR_SILVER", "silver" )
|
#define STR_SILVER NC_("STR_SILVER", "silver" )
|
||||||
#define STR_TEAL NC_("STR_TEAL", "teal" )
|
#define STR_TEAL NC_("STR_TEAL", "teal" )
|
||||||
#define STR_YELLOW NC_("STR_YELLOW", "yellow" )
|
#define STR_YELLOW NC_("STR_YELLOW", "yellow" )
|
||||||
|
#define STR_RGB NC_("STR_RGB", "rgb" )
|
||||||
#define STR_HIDE NC_("STR_HIDE", "hide" )
|
#define STR_HIDE NC_("STR_HIDE", "hide" )
|
||||||
#define STR_SIZE NC_("STR_SIZE", "size" )
|
#define STR_SIZE NC_("STR_SIZE", "size" )
|
||||||
#define STR_FONT NC_("STR_FONT", "font" )
|
#define STR_FONT NC_("STR_FONT", "font" )
|
||||||
|
@@ -182,6 +182,7 @@
|
|||||||
#define RID_COLORX_SILVER "color silver {<?>} "
|
#define RID_COLORX_SILVER "color silver {<?>} "
|
||||||
#define RID_COLORX_TEAL "color teal {<?>} "
|
#define RID_COLORX_TEAL "color teal {<?>} "
|
||||||
#define RID_COLORX_YELLOW "color yellow {<?>} "
|
#define RID_COLORX_YELLOW "color yellow {<?>} "
|
||||||
|
#define RID_COLORX_RGB "color rgb 0 0 0 {<?>} "
|
||||||
#define RID_LRGROUPX "{<?>} "
|
#define RID_LRGROUPX "{<?>} "
|
||||||
#define RID_LRPARENTX "(<?>) "
|
#define RID_LRPARENTX "(<?>) "
|
||||||
#define RID_LRBRACKETX "[<?>] "
|
#define RID_LRBRACKETX "[<?>] "
|
||||||
@@ -229,6 +230,7 @@
|
|||||||
#define RID_PARTIAL "partial "
|
#define RID_PARTIAL "partial "
|
||||||
#define RID_NABLA "nabla "
|
#define RID_NABLA "nabla "
|
||||||
#define RID_WP "wp "
|
#define RID_WP "wp "
|
||||||
|
#define RID_LAPLACE "laplace "
|
||||||
#define RID_DOTSAXIS "dotsaxis "
|
#define RID_DOTSAXIS "dotsaxis "
|
||||||
#define RID_DOTSUP "dotsup "
|
#define RID_DOTSUP "dotsup "
|
||||||
#define RID_DOTSDOWN "dotsdown "
|
#define RID_DOTSDOWN "dotsdown "
|
||||||
|
@@ -44,6 +44,7 @@ enum class TG {
|
|||||||
Limit = 0x010000,
|
Limit = 0x010000,
|
||||||
FontAttr = 0x020000
|
FontAttr = 0x020000
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace o3tl {
|
namespace o3tl {
|
||||||
template<> struct typed_flags<TG> : is_typed_flags<TG, 0x037fff> {};
|
template<> struct typed_flags<TG> : is_typed_flags<TG, 0x037fff> {};
|
||||||
}
|
}
|
||||||
@@ -100,7 +101,8 @@ enum SmTokenType
|
|||||||
TUNKNOWN, TPRECEDES, TSUCCEEDS, TPRECEDESEQUAL, TSUCCEEDSEQUAL,
|
TUNKNOWN, TPRECEDES, TSUCCEEDS, TPRECEDESEQUAL, TSUCCEEDSEQUAL,
|
||||||
TPRECEDESEQUIV, TSUCCEEDSEQUIV, TNOTPRECEDES, TNOTSUCCEEDS, TSILVER,
|
TPRECEDESEQUIV, TSUCCEEDSEQUIV, TNOTPRECEDES, TNOTSUCCEEDS, TSILVER,
|
||||||
TGRAY, TMAROON, TPURPLE, TLIME, TOLIVE,
|
TGRAY, TMAROON, TPURPLE, TLIME, TOLIVE,
|
||||||
TNAVY, TTEAL, TAQUA, TFUCHSIA, TINTD
|
TNAVY, TTEAL, TAQUA, TFUCHSIA, TINTD,
|
||||||
|
TRGB, TLAPLACE
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SmToken
|
struct SmToken
|
||||||
|
@@ -78,6 +78,7 @@ sal_Unicode const MS_DEF = 0x225D;
|
|||||||
sal_Unicode const MS_EQUIV = 0x2261;
|
sal_Unicode const MS_EQUIV = 0x2261;
|
||||||
sal_Unicode const MS_PROP = 0x221D;
|
sal_Unicode const MS_PROP = 0x221D;
|
||||||
sal_Unicode const MS_PARTIAL = 0x2202;
|
sal_Unicode const MS_PARTIAL = 0x2202;
|
||||||
|
sal_Unicode const MS_LAPLACE = 0x2112;
|
||||||
|
|
||||||
sal_Unicode const MS_SUBSET = 0x2282;
|
sal_Unicode const MS_SUBSET = 0x2282;
|
||||||
sal_Unicode const MS_SUPSET = 0x2283;
|
sal_Unicode const MS_SUPSET = 0x2283;
|
||||||
@@ -179,6 +180,7 @@ sal_Unicode const MS_LEFTARROW = 0x2190;
|
|||||||
sal_Unicode const MS_UPARROW = 0x2191;
|
sal_Unicode const MS_UPARROW = 0x2191;
|
||||||
sal_Unicode const MS_RIGHTARROW = 0x2192;
|
sal_Unicode const MS_RIGHTARROW = 0x2192;
|
||||||
sal_Unicode const MS_DOWNARROW = 0x2193;
|
sal_Unicode const MS_DOWNARROW = 0x2193;
|
||||||
|
|
||||||
sal_Unicode const MS_SETN = 0x2115;
|
sal_Unicode const MS_SETN = 0x2115;
|
||||||
sal_Unicode const MS_SETZ = 0x2124;
|
sal_Unicode const MS_SETZ = 0x2124;
|
||||||
sal_Unicode const MS_SETQ = 0x211A;
|
sal_Unicode const MS_SETQ = 0x211A;
|
||||||
|
@@ -184,7 +184,7 @@ const SmElementDescr SmElementsControl::m_aAttributesList[] =
|
|||||||
{RID_COLORX_LIME, RID_COLORX_LIME_HELP}, {RID_COLORX_MAROON, RID_COLORX_MAROON_HELP},
|
{RID_COLORX_LIME, RID_COLORX_LIME_HELP}, {RID_COLORX_MAROON, RID_COLORX_MAROON_HELP},
|
||||||
{RID_COLORX_NAVY, RID_COLORX_NAVY_HELP}, {RID_COLORX_OLIVE, RID_COLORX_OLIVE_HELP},
|
{RID_COLORX_NAVY, RID_COLORX_NAVY_HELP}, {RID_COLORX_OLIVE, RID_COLORX_OLIVE_HELP},
|
||||||
{RID_COLORX_PURPLE, RID_COLORX_PURPLE_HELP}, {RID_COLORX_SILVER, RID_COLORX_SILVER_HELP},
|
{RID_COLORX_PURPLE, RID_COLORX_PURPLE_HELP}, {RID_COLORX_SILVER, RID_COLORX_SILVER_HELP},
|
||||||
{RID_COLORX_TEAL, RID_COLORX_TEAL_HELP}
|
{RID_COLORX_TEAL, RID_COLORX_TEAL_HELP},{RID_COLORX_RGB, RID_COLORX_RGB_HELP}
|
||||||
};
|
};
|
||||||
|
|
||||||
const SmElementDescr SmElementsControl::m_aBracketsList[] =
|
const SmElementDescr SmElementsControl::m_aBracketsList[] =
|
||||||
@@ -225,7 +225,7 @@ const SmElementDescr SmElementsControl::m_aOthersList[] =
|
|||||||
{RID_INFINITY, RID_INFINITY_HELP}, {RID_PARTIAL, RID_PARTIAL_HELP}, {RID_NABLA, RID_NABLA_HELP},
|
{RID_INFINITY, RID_INFINITY_HELP}, {RID_PARTIAL, RID_PARTIAL_HELP}, {RID_NABLA, RID_NABLA_HELP},
|
||||||
{RID_EXISTS, RID_EXISTS_HELP}, {RID_NOTEXISTS, RID_NOTEXISTS_HELP}, {RID_FORALL, RID_FORALL_HELP},
|
{RID_EXISTS, RID_EXISTS_HELP}, {RID_NOTEXISTS, RID_NOTEXISTS_HELP}, {RID_FORALL, RID_FORALL_HELP},
|
||||||
{RID_HBAR, RID_HBAR_HELP}, {RID_LAMBDABAR, RID_LAMBDABAR_HELP}, {RID_RE, RID_RE_HELP},
|
{RID_HBAR, RID_HBAR_HELP}, {RID_LAMBDABAR, RID_LAMBDABAR_HELP}, {RID_RE, RID_RE_HELP},
|
||||||
{RID_IM, RID_IM_HELP}, {RID_WP, RID_WP_HELP},
|
{RID_IM, RID_IM_HELP}, {RID_WP, RID_WP_HELP}, {RID_LAPLACE, RID_LAPLACE_HELP},
|
||||||
{nullptr, nullptr},
|
{nullptr, nullptr},
|
||||||
{RID_LEFTARROW, RID_LEFTARROW_HELP}, {RID_RIGHTARROW, RID_RIGHTARROW_HELP}, {RID_UPARROW, RID_UPARROW_HELP},
|
{RID_LEFTARROW, RID_LEFTARROW_HELP}, {RID_RIGHTARROW, RID_RIGHTARROW_HELP}, {RID_UPARROW, RID_UPARROW_HELP},
|
||||||
{RID_DOWNARROW, RID_DOWNARROW_HELP},
|
{RID_DOWNARROW, RID_DOWNARROW_HELP},
|
||||||
@@ -917,6 +917,8 @@ void SmElementsControl::addElements(const SmElementDescr aElementsArray[], sal_u
|
|||||||
addElement(aParser, "color silver { \"" + SmResId(STR_SILVER) + "\" }", aElement, SmResId(pElementHelp));
|
addElement(aParser, "color silver { \"" + SmResId(STR_SILVER) + "\" }", aElement, SmResId(pElementHelp));
|
||||||
else if (aElement == RID_COLORX_TEAL)
|
else if (aElement == RID_COLORX_TEAL)
|
||||||
addElement(aParser, "color teal { \"" + SmResId(STR_TEAL) + "\" }", aElement, SmResId(pElementHelp));
|
addElement(aParser, "color teal { \"" + SmResId(STR_TEAL) + "\" }", aElement, SmResId(pElementHelp));
|
||||||
|
else if (aElement == RID_COLORX_RGB)
|
||||||
|
addElement(aParser, "color rgb 0 0 0 { \"" + SmResId(STR_RGB) + "\" }", aElement, SmResId(pElementHelp));
|
||||||
else if (aElement == RID_ALIGNLX)
|
else if (aElement == RID_ALIGNLX)
|
||||||
addElement(aParser, "\"" + SmResId(STR_ALIGN_LEFT) + "\"", aElement, SmResId(pElementHelp));
|
addElement(aParser, "\"" + SmResId(STR_ALIGN_LEFT) + "\"", aElement, SmResId(pElementHelp));
|
||||||
else if (aElement == RID_ALIGNCX)
|
else if (aElement == RID_ALIGNCX)
|
||||||
|
@@ -311,6 +311,9 @@ bool MathType::LookupChar(sal_Unicode nChar,OUStringBuffer &rRet,sal_uInt8 nVers
|
|||||||
case 0x2207:
|
case 0x2207:
|
||||||
pC = " nabla ";
|
pC = " nabla ";
|
||||||
break;
|
break;
|
||||||
|
case 0x2112:
|
||||||
|
pC = " laplace ";
|
||||||
|
break;
|
||||||
case 0x2208: // in
|
case 0x2208: // in
|
||||||
case 0x2209: // notin
|
case 0x2209: // notin
|
||||||
rRet.append(" func ").append(OUStringChar(nChar)).append(" ");
|
rRet.append(" func ").append(OUStringChar(nChar)).append(" ");
|
||||||
|
@@ -1719,6 +1719,7 @@ void SmAttributNode::Arrange(OutputDevice &rDev, const SmFormat &rFormat)
|
|||||||
void SmFontNode::CreateTextFromNode(OUStringBuffer &rText)
|
void SmFontNode::CreateTextFromNode(OUStringBuffer &rText)
|
||||||
{
|
{
|
||||||
rText.append("{");
|
rText.append("{");
|
||||||
|
sal_Int32 nc,r,g,b;
|
||||||
|
|
||||||
switch (GetToken().eType)
|
switch (GetToken().eType)
|
||||||
{
|
{
|
||||||
@@ -1819,6 +1820,21 @@ void SmFontNode::CreateTextFromNode(OUStringBuffer &rText)
|
|||||||
case TFUCHSIA:
|
case TFUCHSIA:
|
||||||
rText.append("color fuchsia ");
|
rText.append("color fuchsia ");
|
||||||
break;
|
break;
|
||||||
|
case TRGB:
|
||||||
|
rText.append("color rgb ");
|
||||||
|
nc = GetToken().aText.toInt32();
|
||||||
|
b = nc % 256;
|
||||||
|
nc /= 256;
|
||||||
|
g = nc % 256;
|
||||||
|
nc /= 256;
|
||||||
|
r = nc % 256;
|
||||||
|
rText.append(r);
|
||||||
|
rText.append(" ");
|
||||||
|
rText.append(g);
|
||||||
|
rText.append(" ");
|
||||||
|
rText.append(b);
|
||||||
|
rText.append(" ");
|
||||||
|
break;
|
||||||
case TSANS:
|
case TSANS:
|
||||||
rText.append("font sans ");
|
rText.append("font sans ");
|
||||||
break;
|
break;
|
||||||
@@ -1866,6 +1882,8 @@ void SmFontNode::Arrange(OutputDevice &rDev, const SmFormat &rFormat)
|
|||||||
{
|
{
|
||||||
SmNode *pNode = GetSubNode(1);
|
SmNode *pNode = GetSubNode(1);
|
||||||
assert(pNode);
|
assert(pNode);
|
||||||
|
sal_Int32 nc;
|
||||||
|
Color col_perso_rgb_color (0);
|
||||||
|
|
||||||
switch (GetToken().eType)
|
switch (GetToken().eType)
|
||||||
{ case TSIZE :
|
{ case TSIZE :
|
||||||
@@ -1902,6 +1920,15 @@ void SmFontNode::Arrange(OutputDevice &rDev, const SmFormat &rFormat)
|
|||||||
case TNAVY : SetColor(COL_BLUE); break;
|
case TNAVY : SetColor(COL_BLUE); break;
|
||||||
case TAQUA : SetColor(COL_LIGHTCYAN); break;
|
case TAQUA : SetColor(COL_LIGHTCYAN); break;
|
||||||
case TFUCHSIA : SetColor(COL_LIGHTMAGENTA); break;
|
case TFUCHSIA : SetColor(COL_LIGHTMAGENTA); break;
|
||||||
|
case TRGB :
|
||||||
|
nc = GetToken().aText.toInt32();
|
||||||
|
col_perso_rgb_color.SetBlue(nc % 256);
|
||||||
|
nc /= 256;
|
||||||
|
col_perso_rgb_color.SetGreen(nc % 256);
|
||||||
|
nc /= 256;
|
||||||
|
col_perso_rgb_color.SetRed(nc % 256);
|
||||||
|
SetColor(col_perso_rgb_color);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
SAL_WARN("starmath", "unknown case");
|
SAL_WARN("starmath", "unknown case");
|
||||||
@@ -2658,7 +2685,7 @@ void SmSpecialNode::Prepare(const SmFormat &rFormat, const SmDocShell &rDocShell
|
|||||||
static const sal_Unicode cUppercaseOmega = 0x03A9;
|
static const sal_Unicode cUppercaseOmega = 0x03A9;
|
||||||
sal_Unicode cChar = rTmp[0];
|
sal_Unicode cChar = rTmp[0];
|
||||||
// uppercase letters should be straight and lowercase letters italic
|
// uppercase letters should be straight and lowercase letters italic
|
||||||
bItalic = (cUppercaseAlpha > cChar || cChar > cUppercaseOmega);
|
bItalic = cUppercaseAlpha > cChar || cChar > cUppercaseOmega;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -64,7 +64,7 @@ SmToken::SmToken(SmTokenType eTokenType,
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Definition of math keywords
|
||||||
static const SmTokenTableEntry aTokenTable[] =
|
static const SmTokenTableEntry aTokenTable[] =
|
||||||
{
|
{
|
||||||
{ "abs", TABS, '\0', TG::UnOper, 13 },
|
{ "abs", TABS, '\0', TG::UnOper, 13 },
|
||||||
@@ -159,6 +159,7 @@ static const SmTokenTableEntry aTokenTable[] =
|
|||||||
{ "italic", TITALIC, '\0', TG::FontAttr, 5},
|
{ "italic", TITALIC, '\0', TG::FontAttr, 5},
|
||||||
{ "lambdabar" , TLAMBDABAR, MS_LAMBDABAR, TG::Standalone, 5},
|
{ "lambdabar" , TLAMBDABAR, MS_LAMBDABAR, TG::Standalone, 5},
|
||||||
{ "langle", TLANGLE, MS_LMATHANGLE, TG::LBrace, 5},
|
{ "langle", TLANGLE, MS_LMATHANGLE, TG::LBrace, 5},
|
||||||
|
{ "laplace", TLAPLACE, MS_LAPLACE, TG::Standalone, 5},
|
||||||
{ "lbrace", TLBRACE, MS_LBRACE, TG::LBrace, 5},
|
{ "lbrace", TLBRACE, MS_LBRACE, TG::LBrace, 5},
|
||||||
{ "lceil", TLCEIL, MS_LCEIL, TG::LBrace, 5},
|
{ "lceil", TLCEIL, MS_LCEIL, TG::LBrace, 5},
|
||||||
{ "ldbracket", TLDBRACKET, MS_LDBRACKET, TG::LBrace, 5},
|
{ "ldbracket", TLDBRACKET, MS_LDBRACKET, TG::LBrace, 5},
|
||||||
@@ -239,6 +240,7 @@ static const SmTokenTableEntry aTokenTable[] =
|
|||||||
{ "re" , TRE, MS_RE, TG::Standalone, 5 },
|
{ "re" , TRE, MS_RE, TG::Standalone, 5 },
|
||||||
{ "red", TRED, '\0', TG::Color, 0},
|
{ "red", TRED, '\0', TG::Color, 0},
|
||||||
{ "rfloor", TRFLOOR, MS_RFLOOR, TG::RBrace, 0}, //! 0 to terminate expression
|
{ "rfloor", TRFLOOR, MS_RFLOOR, TG::RBrace, 0}, //! 0 to terminate expression
|
||||||
|
{ "rgb", TRGB, '\0', TG::Color, 0},
|
||||||
{ "right", TRIGHT, '\0', TG::NONE, 0},
|
{ "right", TRIGHT, '\0', TG::NONE, 0},
|
||||||
{ "rightarrow" , TRIGHTARROW, MS_RIGHTARROW, TG::Standalone, 5},
|
{ "rightarrow" , TRIGHTARROW, MS_RIGHTARROW, TG::Standalone, 5},
|
||||||
{ "rline", TRLINE, MS_VERTLINE, TG::RBrace, 0}, //! 0 to terminate expression
|
{ "rline", TRLINE, MS_VERTLINE, TG::RBrace, 0}, //! 0 to terminate expression
|
||||||
@@ -297,33 +299,37 @@ static const SmTokenTableEntry aTokenTable[] =
|
|||||||
{ "yellow", TYELLOW, '\0', TG::Color, 0}
|
{ "yellow", TYELLOW, '\0', TG::Color, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//Checks if keyword is in the list by SmTokenTableEntry.
|
||||||
#if !defined NDEBUG
|
#if !defined NDEBUG
|
||||||
static bool sortCompare(const SmTokenTableEntry & lhs, const SmTokenTableEntry & rhs)
|
static bool sortCompare(const SmTokenTableEntry & lhs, const SmTokenTableEntry & rhs)
|
||||||
{
|
{
|
||||||
return OUString::createFromAscii(lhs.pIdent).compareToIgnoreAsciiCase(OUString::createFromAscii(rhs.pIdent)) < 0;
|
return OUString::createFromAscii(lhs.pIdent).compareToIgnoreAsciiCase(OUString::createFromAscii(rhs.pIdent)) < 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//Checks if keyword is in the list.
|
||||||
static bool findCompare(const SmTokenTableEntry & lhs, const OUString & s)
|
static bool findCompare(const SmTokenTableEntry & lhs, const OUString & s)
|
||||||
{
|
{
|
||||||
return s.compareToIgnoreAsciiCaseAscii(lhs.pIdent) > 0;
|
return s.compareToIgnoreAsciiCaseAscii(lhs.pIdent) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Returns the SmTokenTableEntry for a keyword
|
||||||
const SmTokenTableEntry * SmParser::GetTokenTableEntry( const OUString &rName )
|
const SmTokenTableEntry * SmParser::GetTokenTableEntry( const OUString &rName )
|
||||||
{
|
{
|
||||||
static bool bSortKeyWords = false;
|
static bool bSortKeyWords = false; // Flag: RTF-token table has been sorted.
|
||||||
if( !bSortKeyWords )
|
if( !bSortKeyWords ) //First time sorts it.
|
||||||
{
|
{
|
||||||
assert( std::is_sorted( std::begin(aTokenTable), std::end(aTokenTable), sortCompare ) );
|
assert( std::is_sorted( std::begin(aTokenTable), std::end(aTokenTable), sortCompare ) );
|
||||||
bSortKeyWords = true;
|
bSortKeyWords = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rName.isEmpty())
|
if (rName.isEmpty())return nullptr; //avoid null pointer exceptions
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
|
//Looks for the first keyword after or equal to rName in alphabetical order.
|
||||||
auto findIter = std::lower_bound( std::begin(aTokenTable), std::end(aTokenTable), rName, findCompare );
|
auto findIter = std::lower_bound( std::begin(aTokenTable), std::end(aTokenTable), rName, findCompare );
|
||||||
if ( findIter != std::end(aTokenTable) && rName.equalsIgnoreAsciiCaseAscii( findIter->pIdent ))
|
if ( findIter != std::end(aTokenTable) && rName.equalsIgnoreAsciiCaseAscii( findIter->pIdent ))return &*findIter; //check is equal
|
||||||
return &*findIter;
|
|
||||||
|
|
||||||
return nullptr;
|
return nullptr; //not found
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@@ -333,42 +339,44 @@ bool IsDelimiter( const OUString &rTxt, sal_Int32 nPos )
|
|||||||
{
|
{
|
||||||
assert(nPos <= rTxt.getLength()); //index out of range
|
assert(nPos <= rTxt.getLength()); //index out of range
|
||||||
|
|
||||||
if (nPos == rTxt.getLength())
|
if (nPos == rTxt.getLength())return true; //This is EOF
|
||||||
return true;
|
|
||||||
|
|
||||||
sal_Unicode cChar = rTxt[nPos];
|
sal_Unicode cChar = rTxt[nPos];
|
||||||
|
|
||||||
// check if 'cChar' is in the delimiter table
|
// check if 'cChar' is in the delimiter table
|
||||||
static const sal_Unicode aDelimiterTable[] =
|
static const sal_Unicode aDelimiterTable[] =
|
||||||
{
|
{
|
||||||
' ', '\t', '\n', '\r', '+', '-', '*', '/', '=', '#',
|
' ', '{', '}', '(', ')', '\t', '\n', '\r', '+', '-',
|
||||||
'%', '\\', '"', '~', '`', '>', '<', '&', '|', '(',
|
'*', '/', '=', '[', ']', '^', '_', '#',
|
||||||
')', '{', '}', '[', ']', '^', '_'
|
'%', '>', '<', '&', '|', '\\', '"', '~', '`'
|
||||||
};
|
};//reordered by usage (by eye) for nanoseconds saving.
|
||||||
|
|
||||||
|
//checks the array
|
||||||
for (auto const &cDelimiter : aDelimiterTable)
|
for (auto const &cDelimiter : aDelimiterTable)
|
||||||
{
|
{
|
||||||
if (cDelimiter == cChar)
|
if (cDelimiter == cChar)return true;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//special chars support
|
||||||
sal_Int16 nTypJp = SM_MOD()->GetSysLocale().GetCharClass().getType( rTxt, nPos );
|
sal_Int16 nTypJp = SM_MOD()->GetSysLocale().GetCharClass().getType( rTxt, nPos );
|
||||||
return ( nTypJp == css::i18n::UnicodeType::SPACE_SEPARATOR ||
|
return ( nTypJp == css::i18n::UnicodeType::SPACE_SEPARATOR ||
|
||||||
nTypJp == css::i18n::UnicodeType::CONTROL);
|
nTypJp == css::i18n::UnicodeType::CONTROL);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}//end namespace
|
||||||
|
|
||||||
|
//Text replace onto m_aBufferString
|
||||||
void SmParser::Replace( sal_Int32 nPos, sal_Int32 nLen, const OUString &rText )
|
void SmParser::Replace( sal_Int32 nPos, sal_Int32 nLen, const OUString &rText )
|
||||||
{
|
{
|
||||||
assert( nPos + nLen <= m_aBufferString.getLength() );
|
assert( nPos + nLen <= m_aBufferString.getLength() ); //checks if length allows text replace
|
||||||
|
|
||||||
m_aBufferString = m_aBufferString.replaceAt( nPos, nLen, rText );
|
m_aBufferString = m_aBufferString.replaceAt( nPos, nLen, rText ); //replace and reindex
|
||||||
sal_Int32 nChg = rText.getLength() - nLen;
|
sal_Int32 nChg = rText.getLength() - nLen;
|
||||||
m_nBufferIndex = m_nBufferIndex + nChg;
|
m_nBufferIndex = m_nBufferIndex + nChg;
|
||||||
m_nTokenIndex = m_nTokenIndex + nChg;
|
m_nTokenIndex = m_nTokenIndex + nChg;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SmParser::NextToken()
|
void SmParser::NextToken() //Central part of the parser
|
||||||
{
|
{
|
||||||
// First character may be any alphabetic
|
// First character may be any alphabetic
|
||||||
static const sal_Int32 coStartFlags =
|
static const sal_Int32 coStartFlags =
|
||||||
@@ -979,7 +987,7 @@ namespace
|
|||||||
aSubArray[i] = rSubNodes[i].release();
|
aSubArray[i] = rSubNodes[i].release();
|
||||||
return aSubArray;
|
return aSubArray;
|
||||||
}
|
}
|
||||||
}
|
} //end namespace
|
||||||
|
|
||||||
// grammar
|
// grammar
|
||||||
|
|
||||||
@@ -1474,6 +1482,7 @@ std::unique_ptr<SmNode> SmParser::DoTerm(bool bGroupNumberIdent)
|
|||||||
case TFORALL :
|
case TFORALL :
|
||||||
case TPARTIAL :
|
case TPARTIAL :
|
||||||
case TNABLA :
|
case TNABLA :
|
||||||
|
case TLAPLACE :
|
||||||
case TTOWARD :
|
case TTOWARD :
|
||||||
case TDOTSAXIS :
|
case TDOTSAXIS :
|
||||||
case TDOTSDIAG :
|
case TDOTSDIAG :
|
||||||
@@ -1860,10 +1869,34 @@ std::unique_ptr<SmStructureNode> SmParser::DoColor()
|
|||||||
// last color rules, get that one
|
// last color rules, get that one
|
||||||
SmToken aToken;
|
SmToken aToken;
|
||||||
do
|
do
|
||||||
{ NextToken();
|
{
|
||||||
|
|
||||||
|
NextToken();
|
||||||
|
|
||||||
if (TokenInGroup(TG::Color))
|
if (TokenInGroup(TG::Color))
|
||||||
{ aToken = m_aCurToken;
|
{
|
||||||
|
aToken = m_aCurToken;
|
||||||
|
if(m_aCurToken.eType==TRGB){
|
||||||
|
SmToken r,g,b;
|
||||||
|
sal_Int32 nr, ng, nb, nc;
|
||||||
|
NextToken();
|
||||||
|
if(m_aCurToken.eType!=TNUMBER)return DoError(SmParseError::ColorExpected);
|
||||||
|
r = m_aCurToken;
|
||||||
|
NextToken();
|
||||||
|
if(m_aCurToken.eType!=TNUMBER)return DoError(SmParseError::ColorExpected);
|
||||||
|
g = m_aCurToken;
|
||||||
|
NextToken();
|
||||||
|
if(m_aCurToken.eType!=TNUMBER)return DoError(SmParseError::ColorExpected);
|
||||||
|
b = m_aCurToken;
|
||||||
|
nr = r.aText.toInt32();
|
||||||
|
if( nr < 0 || nr > 255 )return DoError(SmParseError::ColorExpected);
|
||||||
|
ng = g.aText.toInt32();
|
||||||
|
if( ng < 0 || ng > 255 )return DoError(SmParseError::ColorExpected);
|
||||||
|
nb = b.aText.toInt32();
|
||||||
|
if( nb < 0 || nb > 255 )return DoError(SmParseError::ColorExpected);
|
||||||
|
nc = nb + 256 * ( ng + nr*256 );
|
||||||
|
aToken.aText = OUString::number(nc);
|
||||||
|
}
|
||||||
NextToken();
|
NextToken();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -183,6 +183,7 @@
|
|||||||
<menu:menuitem menu:label="ital b" menu:id=".uno:InsertCommandText?Text:string=ital <?> "/>
|
<menu:menuitem menu:label="ital b" menu:id=".uno:InsertCommandText?Text:string=ital <?> "/>
|
||||||
<menu:menuitem menu:label="size s b" menu:id=".uno:InsertCommandText?Text:string=size <?> {<?>} "/>
|
<menu:menuitem menu:label="size s b" menu:id=".uno:InsertCommandText?Text:string=size <?> {<?>} "/>
|
||||||
<menu:menuitem menu:label="font f b" menu:id=".uno:InsertCommandText?Text:string=font <?> {<?>} "/>
|
<menu:menuitem menu:label="font f b" menu:id=".uno:InsertCommandText?Text:string=font <?> {<?>} "/>
|
||||||
|
<menu:menuitem menu:label="color rgb" menu:id=".uno:InsertCommandText?Text:string=color rgb 0 0 0 "/>
|
||||||
</menu:menupopup>
|
</menu:menupopup>
|
||||||
</menu:menu>
|
</menu:menu>
|
||||||
<menu:menu menu:id=".uno:BracketsMenu">
|
<menu:menu menu:id=".uno:BracketsMenu">
|
||||||
@@ -251,6 +252,7 @@
|
|||||||
<menu:menuitem menu:label="Re" menu:id=".uno:InsertCommandText?Text:string=Re "/>
|
<menu:menuitem menu:label="Re" menu:id=".uno:InsertCommandText?Text:string=Re "/>
|
||||||
<menu:menuitem menu:label="Im" menu:id=".uno:InsertCommandText?Text:string=Im "/>
|
<menu:menuitem menu:label="Im" menu:id=".uno:InsertCommandText?Text:string=Im "/>
|
||||||
<menu:menuitem menu:label="wp" menu:id=".uno:InsertCommandText?Text:string=wp "/>
|
<menu:menuitem menu:label="wp" menu:id=".uno:InsertCommandText?Text:string=wp "/>
|
||||||
|
<menu:menuitem menu:label="laplace" menu:id=".uno:InsertCommandText?Text:string=laplace "/>
|
||||||
<menu:menuseparator/>
|
<menu:menuseparator/>
|
||||||
<menu:menuitem menu:label="leftarrow" menu:id=".uno:InsertCommandText?Text:string=leftarrow "/>
|
<menu:menuitem menu:label="leftarrow" menu:id=".uno:InsertCommandText?Text:string=leftarrow "/>
|
||||||
<menu:menuitem menu:label="rightarrow" menu:id=".uno:InsertCommandText?Text:string=rightarrow "/>
|
<menu:menuitem menu:label="rightarrow" menu:id=".uno:InsertCommandText?Text:string=rightarrow "/>
|
||||||
|
Reference in New Issue
Block a user