mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-28 04:17:43 +00:00
2db7521b70
* src/LaTeXFeatures.C (LaTeXFeatures::getPackages): handle esint and wasysym * src/mathed/MathMacroTable.[Ch] (requires_): New member: tell the feature this macro requires (MacroTable::insert): take new requires arg * src/mathed/MathMacroTemplate.C (MathMacroTemplate::asMacroData): adjust to change above * src/mathed/MathSupport.C (fontinfos): add esint10 font * src/mathed/InsetMathHull.C (InsetMathHull::doDispatch): AMS_ON -> package_on * src/mathed/MathMacroTable.h * src/mathed/MathFactory.C (initSymbols): read and store requires field for symbols * src/mathed/InsetMathSymbol.C (InsetMathSymbol::metrics): handle esint (InsetMathSymbol::takesLimits): ditto * src/buffer.C (LYX_FORMAT): update format (Buffer::validate): handle esint, AMS_ON -> package_on * src/bufferparams.C: (AMSTranslator): Rename to PackageTranslator (BufferParams::readToken): Read \use_esint (BufferParams::writeFile): Write \use_esint * src/frontends/qt4/QDocumentDialog.C: handle esint * src/frontends/qt4/ui/MathsUi.ui : add esint checkboxes * src/frontends/qt4/GuiFontLoader.C (symbol_fonts: Add esint10 font (symbolFamily): handle esint10 font (isChosenFont): Add comment * src/frontends/controllers/ControlMath.C (latex_varsz): Add new integral symbols * src/support/fontutils.C (win_fonts_truetype): Add esint10 font * src/bufferparams.h (enum AMS): rename to enum Package (use_esint): new parameter * src/lyxfont.[Ch]: Add esint font * lib/symbols: Add new integral symbols * lib/lyx2lyx/LyX.py (format_relation): Update format * lib/lyx2lyx/lyx_1_5.py: handle new format * lib/chkconfig.ltx: Test esint package * lib/images/math/oiintop.xpm * lib/images/math/sqintop.xpm * lib/images/math/sqint.xpm * lib/images/math/ointctrclockwiseop.xpm * lib/images/math/ointctrclockwise.xpm * lib/images/math/iiintop.xpm * lib/images/math/iintop.xpm * lib/images/math/sqiint.xpm * lib/images/math/iiint.xpm * lib/images/math/ointclockwiseop.xpm * lib/images/math/oiint.xpm * lib/images/math/dotsintop.xpm * lib/images/math/sqiintop.xpm * lib/images/math/ointclockwise.xpm * lib/images/math/iiiintop.xpm * lib/images/math/dotsint.xpm * lib/images/math/iiiint.xpm * lib/images/math/iint.xpm: new icons * lib/doc/LaTeXConfig.lyx.in: Add docs for esint package * lib/doc/UserGuide.lyx: Add short documentation of integral symbols * lib/Makefile.am: Add new files * development/scons/scons_manifest.py: ditto git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15907 a592a061-630c-0410-9148-cb99ea01b6c8
125 lines
2.9 KiB
C
125 lines
2.9 KiB
C
/**
|
|
* \file MathMacroTable.C
|
|
* This file is part of LyX, the document processor.
|
|
* Licence details can be found in the file COPYING.
|
|
*
|
|
* \author André Pönitz
|
|
*
|
|
* Full author contact details are available in file CREDITS.
|
|
*/
|
|
|
|
#include <config.h>
|
|
|
|
#include "MathMacroTable.h"
|
|
#include "MathMacroTemplate.h"
|
|
#include "MathMacroArgument.h"
|
|
#include "MathSupport.h"
|
|
#include "InsetMathSqrt.h"
|
|
|
|
#include "debug.h"
|
|
#include "dociterator.h"
|
|
|
|
#include <boost/assert.hpp>
|
|
|
|
#include <sstream>
|
|
|
|
|
|
namespace lyx {
|
|
|
|
using std::endl;
|
|
using std::istringstream;
|
|
using std::map;
|
|
using std::pair;
|
|
using std::string;
|
|
using std::vector;
|
|
using std::size_t;
|
|
|
|
|
|
MacroData::MacroData()
|
|
: numargs_(0)
|
|
{}
|
|
|
|
|
|
MacroData::MacroData(docstring const & def, int numargs, docstring const & disp, string const & requires)
|
|
: def_(def), numargs_(numargs), disp_(disp), requires_(requires)
|
|
{}
|
|
|
|
|
|
void MacroData::expand(vector<MathArray> const & args, MathArray & to) const
|
|
{
|
|
InsetMathSqrt inset; // Hack. Any inset with a cell would do.
|
|
// FIXME UNICODE
|
|
asArray(disp_.empty() ? def_ : disp_, inset.cell(0));
|
|
//lyxerr << "MathData::expand: args: " << args << endl;
|
|
//lyxerr << "MathData::expand: ar: " << inset.cell(0) << endl;
|
|
for (DocIterator it = doc_iterator_begin(inset); it; it.forwardChar()) {
|
|
if (!it.nextInset())
|
|
continue;
|
|
if (it.nextInset()->lyxCode() != InsetBase::MATHMACROARG_CODE)
|
|
continue;
|
|
//it.cell().erase(it.pos());
|
|
//it.cell().insert(it.pos(), it.nextInset()->asInsetMath()
|
|
size_t n = static_cast<MathMacroArgument*>(it.nextInset())->number();
|
|
if (n <= args.size()) {
|
|
it.cell().erase(it.pos());
|
|
it.cell().insert(it.pos(), args[n - 1]);
|
|
}
|
|
}
|
|
//lyxerr << "MathData::expand: res: " << inset.cell(0) << endl;
|
|
to = inset.cell(0);
|
|
}
|
|
|
|
|
|
// The global table.
|
|
MacroTable & MacroTable::globalMacros()
|
|
{
|
|
static MacroTable theGlobalMacros;
|
|
return theGlobalMacros;
|
|
}
|
|
|
|
|
|
bool MacroTable::has(docstring const & name) const
|
|
{
|
|
return find(name) != end();
|
|
}
|
|
|
|
|
|
MacroData const & MacroTable::get(docstring const & name) const
|
|
{
|
|
const_iterator it = find(name);
|
|
BOOST_ASSERT(it != end());
|
|
return it->second;
|
|
}
|
|
|
|
|
|
void MacroTable::insert(docstring const & name, MacroData const & data)
|
|
{
|
|
//lyxerr << "MacroTable::insert: " << to_utf8(name) << endl;
|
|
operator[](name) = data;
|
|
}
|
|
|
|
|
|
void MacroTable::insert(docstring const & def, string const & requires)
|
|
{
|
|
//lyxerr << "MacroTable::insert, def: " << to_utf8(def) << endl;
|
|
MathMacroTemplate mac(def);
|
|
MacroData data = mac.asMacroData();
|
|
data.requires() = requires;
|
|
insert(mac.name(), data);
|
|
}
|
|
|
|
|
|
void MacroTable::dump()
|
|
{
|
|
lyxerr << "\n------------------------------------------" << endl;
|
|
for (const_iterator it = begin(); it != end(); ++it)
|
|
lyxerr << to_utf8(it->first)
|
|
<< " [" << to_utf8(it->second.def()) << "] : "
|
|
<< " [" << to_utf8(it->second.disp()) << "] : "
|
|
<< endl;
|
|
lyxerr << "------------------------------------------" << endl;
|
|
}
|
|
|
|
|
|
} // namespace lyx
|