Add support for feyn package and Diagram inset.

Patch from Ronen Abravanel.
http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg161952.html

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@35455 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Pavel Sanda 2010-09-19 22:12:06 +00:00
parent c1a20d3534
commit 65962da47b
11 changed files with 201 additions and 4 deletions

View File

@ -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, []],

View File

@ -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;

View File

@ -746,6 +746,9 @@ string const LaTeXFeatures::getPackages() const
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";

View File

@ -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 \

View File

@ -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;

View File

@ -223,6 +223,8 @@ enum InsetCode {
///
PREVIEW_CODE,
///
MATH_DIAGRAM_CODE,
///
INSET_CODE_SIZE,
};

View File

@ -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

View File

@ -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

View File

@ -1994,6 +1994,7 @@ MathCompletionList::MathCompletionList(Cursor const & cur)
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"));

View File

@ -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 & s, Buffer * buf)
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")

View File

@ -1727,6 +1727,14 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
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);