mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-23 21:40:19 +00:00
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:
parent
c1a20d3534
commit
65962da47b
@ -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, []],
|
||||
|
@ -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;
|
||||
|
@ -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";
|
||||
|
@ -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 \
|
||||
|
@ -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;
|
||||
|
@ -223,6 +223,8 @@ enum InsetCode {
|
||||
///
|
||||
PREVIEW_CODE,
|
||||
///
|
||||
MATH_DIAGRAM_CODE,
|
||||
///
|
||||
INSET_CODE_SIZE,
|
||||
};
|
||||
|
||||
|
95
src/mathed/InsetMathDiagram.cpp
Normal file
95
src/mathed/InsetMathDiagram.cpp
Normal 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
|
60
src/mathed/InsetMathDiagram.h
Normal file
60
src/mathed/InsetMathDiagram.h
Normal 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
|
@ -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"));
|
||||
|
@ -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")
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user