From: Georg Baum Date: Sun, 16 Dec 2012 14:49:42 +0000 (+0100) Subject: Full delimiter support for llbracket and rrbracket X-Git-Tag: 2.1.0beta1~1080 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=01a6d4252b94c3b0a38faf32da1eea9b17cbf3c5;p=features.git Full delimiter support for llbracket and rrbracket stmaryrd.sty sets these symbols up as variable size math delimiters (i.e. they may be used with \left and \right). Now LyX knows about that and offers them in the delimiter dialog as well as single symbols. --- diff --git a/lib/Makefile.am b/lib/Makefile.am index 9888787772..ea2d1f4577 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -708,6 +708,7 @@ dist_imagesmath_DATA = \ images/math/lfloor.png \ images/math/lfloor_rfloor.png \ images/math/ll.png \ + images/math/llbracket.png \ images/math/llcorner.png \ images/math/Lleftarrow.png \ images/math/lll.png \ @@ -862,6 +863,7 @@ dist_imagesmath_DATA = \ images/math/risingdotseq.png \ images/math/root.png \ images/math/rparen.png \ + images/math/rrbracket.png \ images/math/Rrightarrow.png \ images/math/Rsh.png \ images/math/rtimes.png \ diff --git a/lib/images/math/llbracket.png b/lib/images/math/llbracket.png new file mode 100644 index 0000000000..3e4d957fce Binary files /dev/null and b/lib/images/math/llbracket.png differ diff --git a/lib/images/math/rrbracket.png b/lib/images/math/rrbracket.png new file mode 100644 index 0000000000..2082f6955c Binary files /dev/null and b/lib/images/math/rrbracket.png differ diff --git a/src/frontends/qt4/GuiDelimiter.cpp b/src/frontends/qt4/GuiDelimiter.cpp index 2736c2090c..8303fa6414 100644 --- a/src/frontends/qt4/GuiDelimiter.cpp +++ b/src/frontends/qt4/GuiDelimiter.cpp @@ -41,6 +41,7 @@ namespace { static char const * latex_delimiters[] = { "(", ")", "{", "}", "[", "]", "lceil", "rceil", "lfloor", "rfloor", "langle", "rangle", + "llbracket", "rrbracket", "uparrow", "updownarrow", "Uparrow", "Updownarrow", "downarrow", "Downarrow", "|", "Vert", "/", "backslash", "" }; @@ -114,6 +115,8 @@ void initMathSymbols() math_symbols_["rfloor"] = MathSymbol(0x230B, 99, CMSY_FAMILY); math_symbols_["langle"] = MathSymbol(0x2329, 104, CMSY_FAMILY); math_symbols_["rangle"] = MathSymbol(0x232A, 105, CMSY_FAMILY); + math_symbols_["llbracket"] = MathSymbol(0x27e6, 74, STMARY_FAMILY); + math_symbols_["rrbracket"] = MathSymbol(0x27e7, 75, STMARY_FAMILY); math_symbols_["uparrow"] = MathSymbol(0x2191, 34, CMSY_FAMILY); math_symbols_["Uparrow"] = MathSymbol(0x21D1, 42, CMSY_FAMILY); math_symbols_["updownarrow"] = MathSymbol(0x2195, 108, CMSY_FAMILY); @@ -233,6 +236,8 @@ char_type GuiDelimiter::doMatch(char_type const symbol) else if (str == "lfloor") match = "rfloor"; else if (str == "rangle") match = "langle"; else if (str == "langle") match = "rangle"; + else if (str == "llbracket") match = "rrbracket"; + else if (str == "rrbracket") match = "llbracket"; else if (str == "backslash") match = "/"; else if (str == "/") match = "backslash"; else return symbol; diff --git a/src/mathed/InsetMathDelim.cpp b/src/mathed/InsetMathDelim.cpp index 0d2fd97607..0653e88b8c 100644 --- a/src/mathed/InsetMathDelim.cpp +++ b/src/mathed/InsetMathDelim.cpp @@ -14,10 +14,13 @@ #include "InsetMathDelim.h" #include "MathData.h" +#include "MathFactory.h" #include "MathStream.h" #include "MathSupport.h" #include "MetricsInfo.h" +#include "LaTeXFeatures.h" + #include "support/docstring.h" #include "frontends/FontMetrics.h" @@ -58,6 +61,30 @@ Inset * InsetMathDelim::clone() const } +void InsetMathDelim::validate(LaTeXFeatures & features) const +{ + InsetMathNest::validate(features); + // The delimiters may be used without \left or \right as well. + // Therefore they are listed in lib/symbols, and if they have + // requirements, we need to add them here. + MathWordList const & words = mathedWordList(); + MathWordList::const_iterator it = words.find(left_); + if (it != words.end()) + { + docstring const req = it->second.requires; + if (!req.empty()) + features.require(to_ascii(req)); + } + it = words.find(right_); + if (it != words.end()) + { + docstring const req = it->second.requires; + if (!req.empty()) + features.require(to_ascii(req)); + } +} + + void InsetMathDelim::write(WriteStream & os) const { MathEnsurer ensurer(os); diff --git a/src/mathed/InsetMathDelim.h b/src/mathed/InsetMathDelim.h index cbea8ec01c..72e204ed11 100644 --- a/src/mathed/InsetMathDelim.h +++ b/src/mathed/InsetMathDelim.h @@ -45,6 +45,8 @@ public: /// void draw(PainterInfo &, int x, int y) const; + /// + void validate(LaTeXFeatures & features) const; /// void write(WriteStream & os) const; /// write normalized content diff --git a/src/mathed/MathSupport.cpp b/src/mathed/MathSupport.cpp index 95d27b4483..0a87fd69ba 100644 --- a/src/mathed/MathSupport.cpp +++ b/src/mathed/MathSupport.cpp @@ -160,6 +160,15 @@ double const brack[] = { }; +double const dbrack[] = { + 2, 4, + 0.95, 0.05, 0.05, 0.05, 0.05, 0.95, 0.95, 0.95, + 2, 2, + 0.50, 0.05, 0.50, 0.95, + 0 +}; + + double const corner[] = { 2, 3, 0.95, 0.05, 0.05, 0.05, 0.05, 0.95, @@ -299,6 +308,8 @@ named_deco_struct deco_table[] = { {"rbrace", brace, 2 }, {"[", brack, 0 }, {"]", brack, 2 }, + {"llbracket", dbrack, 0 }, + {"rrbracket", dbrack, 2 }, {"|", vert, 0 }, {"/", slash, 0 }, {"slash", slash, 0 },