On Sun, Sep 19, 2010 at 11:46 AM, Richard Heck <rgh...@comcast.net> wrote:
> On 9/19/10 11:19 AM, Ronen Abravanel wrote: > >> >> +def revert_diagram(document): >> + i = 0 >> + re_diagram = re.compile(r'\\begin_inset Formula .*\\Diagram', >> re.DOTALL) >> + while True: >> + i = find_token(document.body, '\\begin_inset Formula', i) >> + if i == -1: >> + return >> + j = find_end_of_inset(document.body, i) >> + if j == -1: >> + document.warning("Malformed LyX document: Can't find end of line >> inset.") >> >> + return >> + m = re_diagram.search("\n".join(document.body[i:j])) >> + if not m: >> + i += 1 >> + continue >> + add_to_preamble(document, "\\use_package{feyn}") >> + # only need to do it once! >> + return >> + >> + >> >> >> > Like Pavel, I'm a bit puzzled by this. I see the newline in > InsetXYMatrix::write() and now in your code, but I hadn't realized we put > newlines into the math stuff. Anyway, better not to assume they're not > there. > I don't understand how all this mechanism works. I just assume the XTMatrix works, and then change the things I do understand. > > +int const LYX_FORMAT = 401; // uwestoehr: support for \rule \\Ronen: >> support for \Diagrasr >> >> >> > You can take Uwe's comment out, which applied to format 400, and just have > yours. The main thing is just to have a comment there. > > Otherwise looks fine to me, though I'm not expert on the math stuff. > > rh > (The only part changes now: The comment in Buffer.cpp)
diff -rupN lyx-2.0.0alpha6/lib/lyx2lyx/lyx_2_0.py lyx-2.0.0alpha6_feynFinal/lib/lyx2lyx/lyx_2_0.py --- lyx-2.0.0alpha6/lib/lyx2lyx/lyx_2_0.py 2010-09-15 16:33:40.000000000 -0400 +++ lyx-2.0.0alpha6_feynFinal/lib/lyx2lyx/lyx_2_0.py 2010-09-19 10:49:58.000000000 -0400 @@ -1568,7 +1568,6 @@ def revert_fontcolor(document): + ', ' + str(blueout) + '}\n' + '\\color{document_fontcolor}\n') - def revert_shadedboxcolor(document): " Reverts shaded box color to preamble code " i = 0 @@ -2161,6 +2160,26 @@ def revert_rule(document): else: return +def revert_diagram(document): + i = 0 + re_diagram = re.compile(r'\\begin_inset Formula .*\\Diagram', re.DOTALL) + while True: + i = find_token(document.body, '\\begin_inset Formula', i) + if i == -1: + return + j = find_end_of_inset(document.body, i) + if j == -1: + document.warning("Malformed LyX document: Can't find end of line inset.") + return + m = re_diagram.search("\n".join(document.body[i:j])) + if not m: + i += 1 + continue + add_to_preamble(document, "\\use_package{feyn}") + # only need to do it once! + return + + ## # Conversion hub @@ -2221,10 +2240,12 @@ convert = [[346, []], [397, [remove_Nameref]], [398, []], [399, [convert_mathdots]], - [400, [convert_rule]] + [400, [convert_rule]], + [401, []] ] -revert = [[399, [revert_rule]], +revert = [[400, [revert_diagram]], + [399, [revert_rule]], [398, [revert_mathdots]], [397, [revert_mathrsfs]], [396, []], diff -rupN lyx-2.0.0alpha6/src/Buffer.cpp lyx-2.0.0alpha6_feynFinal/src/Buffer.cpp --- lyx-2.0.0alpha6/src/Buffer.cpp 2010-09-15 16:33:41.000000000 -0400 +++ lyx-2.0.0alpha6_feynFinal/src/Buffer.cpp 2010-09-18 22:33:25.000000000 -0400 @@ -127,7 +127,7 @@ namespace { // Do not remove the comment below, so we get merge conflict in // independent branches. Instead add your own. -int const LYX_FORMAT = 400; // uwestoehr: support for \rule +int const LYX_FORMAT = 401; // Ronen: support for \Diagram typedef map<string, bool> DepClean; typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache; diff -rupN lyx-2.0.0alpha6/src/insets/InsetCode.h lyx-2.0.0alpha6_feynFinal/src/insets/InsetCode.h --- lyx-2.0.0alpha6/src/insets/InsetCode.h 2010-09-15 16:33:43.000000000 -0400 +++ lyx-2.0.0alpha6_feynFinal/src/insets/InsetCode.h 2010-09-18 21:22:40.000000000 -0400 @@ -223,6 +223,8 @@ enum InsetCode { /// PREVIEW_CODE, /// + MATH_DIAGRAM_CODE, + /// INSET_CODE_SIZE, }; diff -rupN lyx-2.0.0alpha6/src/insets/Inset.cpp lyx-2.0.0alpha6_feynFinal/src/insets/Inset.cpp --- lyx-2.0.0alpha6/src/insets/Inset.cpp 2010-09-15 16:33:42.000000000 -0400 +++ lyx-2.0.0alpha6_feynFinal/src/insets/Inset.cpp 2010-09-18 21:23:37.000000000 -0400 @@ -168,6 +168,7 @@ static void build_translator() insetnames[MATH_XARROW_CODE] = InsetName("mathxarrow"); insetnames[MATH_XYARROW_CODE] = InsetName("mathxyarrow"); insetnames[MATH_XYMATRIX_CODE] = InsetName("mathxymatrix"); + insetnames[MATH_DIAGRAM_CODE] = InsetName("mathdiagram"); insetnames[MATH_MACRO_CODE] = InsetName("mathmacro"); passed = true; diff -rupN lyx-2.0.0alpha6/src/LaTeXFeatures.cpp lyx-2.0.0alpha6_feynFinal/src/LaTeXFeatures.cpp --- lyx-2.0.0alpha6/src/LaTeXFeatures.cpp 2010-09-15 16:33:41.000000000 -0400 +++ lyx-2.0.0alpha6_feynFinal/src/LaTeXFeatures.cpp 2010-09-18 12:00:16.000000000 -0400 @@ -746,6 +746,9 @@ string const LaTeXFeatures::getPackages( if (mustProvide("xy")) packages << "\\usepackage[all]{xy}\n"; + if (mustProvide("feyn")) + packages << "\\usepackage{feyn}\n"; //Diagram + if (mustProvide("ulem")) packages << "\\PassOptionsToPackage{normalem}{ulem}\n" "\\usepackage{ulem}\n"; diff -rupN lyx-2.0.0alpha6/src/Makefile.am lyx-2.0.0alpha6_feynFinal/src/Makefile.am --- lyx-2.0.0alpha6/src/Makefile.am 2010-09-15 16:33:42.000000000 -0400 +++ lyx-2.0.0alpha6_feynFinal/src/Makefile.am 2010-09-18 12:00:16.000000000 -0400 @@ -409,6 +409,7 @@ SOURCEFILESMATHED = \ mathed/InsetMathUnknown.cpp \ mathed/InsetMathXArrow.cpp \ mathed/InsetMathXYMatrix.cpp \ + mathed/InsetMathDiagram.cpp \ mathed/MathAtom.cpp \ mathed/MathAutoCorrect.cpp \ mathed/MathData.cpp \ @@ -474,6 +475,7 @@ HEADERFILESMATHED = \ mathed/InsetMathUnknown.h \ mathed/InsetMathXArrow.h \ mathed/InsetMathXYMatrix.h \ + mathed/InsetMathDiagram.h \ mathed/MathAtom.h \ mathed/MathAutoCorrect.h \ mathed/MathData.h \ diff -rupN lyx-2.0.0alpha6/src/mathed/InsetMathDiagram.cpp lyx-2.0.0alpha6_feynFinal/src/mathed/InsetMathDiagram.cpp --- lyx-2.0.0alpha6/src/mathed/InsetMathDiagram.cpp 1969-12-31 19:00:00.000000000 -0500 +++ lyx-2.0.0alpha6_feynFinal/src/mathed/InsetMathDiagram.cpp 2010-09-19 10:53:49.000000000 -0400 @@ -0,0 +1,95 @@ +/** + * \file InsetMathDiagram.cpp + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author André Pönitz + * \author Ronen Abravanel +* + * Full author contact details are available in file CREDITS. + */ + +#include <config.h> + +#include "InsetMathDiagram.h" + +#include "LaTeXFeatures.h" +#include "MathStream.h" + +#include <ostream> + +namespace lyx { + + +InsetMathDiagram::InsetMathDiagram(Buffer * buf) : InsetMathGrid(buf, 1, 1) +{ +} + + +Inset * InsetMathDiagram::clone() const +{ + return new InsetMathDiagram(*this); +} + + +int InsetMathDiagram::colsep() const +{ + return 10; +} + + +int InsetMathDiagram::rowsep() const +{ + return 10; +} + + +void InsetMathDiagram::metrics(MetricsInfo & mi, Dimension & dim) const +{ + if (mi.base.style == LM_ST_DISPLAY) + mi.base.style = LM_ST_TEXT; + InsetMathGrid::metrics(mi, dim); +} + + +void InsetMathDiagram::write(WriteStream & os) const +{ + MathEnsurer ensurer(os); + os << "\\Diagram"; + os << '{'; + InsetMathGrid::write(os); + os << "}\n"; +} + + +void InsetMathDiagram::infoize(odocstream & os) const +{ + os << "Diagram "; + InsetMathGrid::infoize(os); +} + + +void InsetMathDiagram::normalize(NormalStream & os) const +{ + os << "[Diagram "; + InsetMathGrid::normalize(os); + os << ']'; +} + + +void InsetMathDiagram::maple(MapleStream & os) const +{ + os << "Diagram("; + InsetMathGrid::maple(os); + os << ')'; +} + + +void InsetMathDiagram::validate(LaTeXFeatures & features) const +{ + features.require("feyn"); + InsetMathGrid::validate(features); +} + + +} // namespace lyx diff -rupN lyx-2.0.0alpha6/src/mathed/InsetMathDiagram.h lyx-2.0.0alpha6_feynFinal/src/mathed/InsetMathDiagram.h --- lyx-2.0.0alpha6/src/mathed/InsetMathDiagram.h 1969-12-31 19:00:00.000000000 -0500 +++ lyx-2.0.0alpha6_feynFinal/src/mathed/InsetMathDiagram.h 2010-09-19 10:53:38.000000000 -0400 @@ -0,0 +1,60 @@ +// -*- C++ -*- +/** + * \file InsetMathDiagram.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author André Pönitz +* \author Ronen Abravanel + * + * Full author contact details are available in file CREDITS. + */ + +#ifndef MATH_DIAGRAM_H +#define MATH_DIAGRAM_H + +#include "Length.h" +#include "InsetMathGrid.h" + + +namespace lyx { + + +class InsetMathDiagram : public InsetMathGrid { +public: + /// + InsetMathDiagram(Buffer * buf); + /// + void metrics(MetricsInfo &, Dimension &) const; + /// + InsetMathDiagram const * asDiagramInset() const { return this; } + /// + virtual int colsep() const; + /// + virtual int rowsep() const; + + /// + void normalize(); + /// + void write(WriteStream & os) const; + /// + void infoize(odocstream & os) const; + /// + void normalize(NormalStream &) const; + /// + void maple(MapleStream &) const; + /// + void validate(LaTeXFeatures & features) const; + /// + InsetCode lyxCode() const { return MATH_DIAGRAM_CODE; } + +private: + /// + virtual Inset * clone() const; + +}; + + + +} // namespace lyx +#endif diff -rupN lyx-2.0.0alpha6/src/mathed/InsetMathNest.cpp lyx-2.0.0alpha6_feynFinal/src/mathed/InsetMathNest.cpp --- lyx-2.0.0alpha6/src/mathed/InsetMathNest.cpp 2010-09-15 16:33:43.000000000 -0400 +++ lyx-2.0.0alpha6_feynFinal/src/mathed/InsetMathNest.cpp 2010-09-18 12:00:16.000000000 -0400 @@ -1994,6 +1994,7 @@ MathCompletionList::MathCompletionList(C globals.push_back(from_ascii("\\cases")); globals.push_back(from_ascii("\\substack")); globals.push_back(from_ascii("\\xymatrix")); + globals.push_back(from_ascii("\\Diagram")); globals.push_back(from_ascii("\\subarray")); globals.push_back(from_ascii("\\array")); globals.push_back(from_ascii("\\sqrt")); diff -rupN lyx-2.0.0alpha6/src/mathed/MathFactory.cpp lyx-2.0.0alpha6_feynFinal/src/mathed/MathFactory.cpp --- lyx-2.0.0alpha6/src/mathed/MathFactory.cpp 2010-09-15 16:33:43.000000000 -0400 +++ lyx-2.0.0alpha6_feynFinal/src/mathed/MathFactory.cpp 2010-09-19 10:55:30.000000000 -0400 @@ -44,6 +44,7 @@ #include "InsetMathHull.h" #include "InsetMathXArrow.h" #include "InsetMathXYMatrix.h" +#include "InsetMathDiagram.h" #include "MacroTable.h" #include "MathMacro.h" #include "MathMacroArgument.h" @@ -417,6 +418,9 @@ MathAtom createInsetMath(docstring const return MathAtom(new InsetMathXYMatrix(buf, spacing, spacing_code, equal_spacing)); } + + if (s == "Diagram") + return MathAtom(new InsetMathDiagram(buf)); if (s == "xrightarrow" || s == "xleftarrow") return MathAtom(new InsetMathXArrow(buf, s)); if (s == "split" || s == "alignedat") diff -rupN lyx-2.0.0alpha6/src/mathed/MathParser.cpp lyx-2.0.0alpha6_feynFinal/src/mathed/MathParser.cpp --- lyx-2.0.0alpha6/src/mathed/MathParser.cpp 2010-09-15 16:33:43.000000000 -0400 +++ lyx-2.0.0alpha6_feynFinal/src/mathed/MathParser.cpp 2010-09-18 22:19:25.000000000 -0400 @@ -1727,6 +1727,14 @@ bool Parser::parse1(InsetMathGrid & grid delEmptyLastRow(subgrid); } + else if (t.cs() == "Diagram") { + odocstringstream os; + while (good() && nextToken().cat() != catBegin) + os << getToken().asInput(); + cell->push_back(createInsetMath(t.cs() + os.str(), buf)); + parse2(cell->back(), FLAG_ITEM, mode, false); + } + else if (t.cs() == "framebox" || t.cs() == "makebox") { cell->push_back(createInsetMath(t.cs(), buf)); parse(cell->back().nucleus()->cell(0), FLAG_OPTION, InsetMath::TEXT_MODE);