Move some functions that only required a FontInfo parameter from Font.*

to FontInfo.*

This allows tex2lyx to use the plain FontInfo object (via Layout), and to remove
several '#ifdef TEX2LYX' in the code

Reorder a bit the makefile in tex2lyx


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@31772 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2009-10-27 16:16:15 +00:00
parent e8631bf7ed
commit 0c1ff6d89e
10 changed files with 234 additions and 361 deletions

View File

@ -39,6 +39,16 @@ using namespace lyx::support;
namespace lyx {
//
// Strings used to read and write .lyx format files
//
// These are defined in FontInfo.cpp
extern char const ** LyXFamilyNames;
extern char const ** LyXSeriesNames;
extern char const ** LyXShapeNames;
extern char const ** LyXSizeNames;
extern char const ** LyXMiscNames;
//
// Names for the GUI
//
@ -65,29 +75,6 @@ char const * GUISizeNames[14] =
char const * GUIMiscNames[5] =
{ N_("Off"), N_("On"), N_("Toggle"), N_("Inherit"), N_("Ignore") };
//
// Strings used to read and write .lyx format files
//
char const * LyXFamilyNames[NUM_FAMILIES + 2 /* default & error */] =
{ "roman", "sans", "typewriter", "symbol",
"cmr", "cmsy", "cmm", "cmex", "msa", "msb", "eufrak", "wasy", "esint",
"default", "error" };
char const * LyXSeriesNames[4] =
{ "medium", "bold", "default", "error" };
char const * LyXShapeNames[6] =
{ "up", "italic", "slanted", "smallcaps", "default", "error" };
char const * LyXSizeNames[14] =
{ "tiny", "scriptsize", "footnotesize", "small", "normal", "large",
"larger", "largest", "huge", "giant",
"increase", "decrease", "default", "error" };
char const * LyXMiscNames[5] =
{ "off", "on", "toggle", "default", "error" };
//
// Strings used to write LaTeX files
//
@ -208,92 +195,6 @@ docstring const Font::stateText(BufferParams * params) const
}
// Set family according to lyx format string
void setLyXFamily(string const & fam, FontInfo & f)
{
string const s = ascii_lowercase(fam);
int i = 0;
while (LyXFamilyNames[i] != s &&
LyXFamilyNames[i] != string("error"))
++i;
if (s == LyXFamilyNames[i])
f.setFamily(FontFamily(i));
else
lyxerr << "setLyXFamily: Unknown family `"
<< s << '\'' << endl;
}
// Set series according to lyx format string
void setLyXSeries(string const & ser, FontInfo & f)
{
string const s = ascii_lowercase(ser);
int i = 0;
while (LyXSeriesNames[i] != s &&
LyXSeriesNames[i] != string("error")) ++i;
if (s == LyXSeriesNames[i]) {
f.setSeries(FontSeries(i));
} else
lyxerr << "setLyXSeries: Unknown series `"
<< s << '\'' << endl;
}
// Set shape according to lyx format string
void setLyXShape(string const & sha, FontInfo & f)
{
string const s = ascii_lowercase(sha);
int i = 0;
while (LyXShapeNames[i] != s && LyXShapeNames[i] != string("error"))
++i;
if (s == LyXShapeNames[i])
f.setShape(FontShape(i));
else
lyxerr << "Font::setLyXShape: Unknown shape `"
<< s << '\'' << endl;
}
// Set size according to lyx format string
void setLyXSize(string const & siz, FontInfo & f)
{
string const s = ascii_lowercase(siz);
int i = 0;
while (LyXSizeNames[i] != s && LyXSizeNames[i] != string("error"))
++i;
if (s == LyXSizeNames[i]) {
f.setSize(FontSize(i));
} else
lyxerr << "Font::setLyXSize: Unknown size `"
<< s << '\'' << endl;
}
// Set size according to lyx format string
FontState Font::setLyXMisc(string const & siz)
{
string const s = ascii_lowercase(siz);
int i = 0;
while (LyXMiscNames[i] != s &&
LyXMiscNames[i] != string("error")) ++i;
if (s == LyXMiscNames[i])
return FontState(i);
lyxerr << "Font::setLyXMisc: Unknown misc flag `"
<< s << '\'' << endl;
return FONT_OFF;
}
/// Sets color after LyX text format
void setLyXColor(string const & col, FontInfo & f)
{
f.setColor(lcolor.getFromLyXName(col));
}
// Returns size in latex format
string const Font::latexSize() const
{
@ -301,81 +202,6 @@ string const Font::latexSize() const
}
// Read a font definition from given file in lyx format
// Used for layouts
FontInfo lyxRead(Lexer & lex, FontInfo const & fi)
{
FontInfo f = fi;
bool error = false;
bool finished = false;
while (!finished && lex.isOK() && !error) {
lex.next();
string const tok = ascii_lowercase(lex.getString());
if (tok.empty()) {
continue;
} else if (tok == "endfont") {
finished = true;
} else if (tok == "family") {
lex.next();
string const ttok = lex.getString();
setLyXFamily(ttok, f);
} else if (tok == "series") {
lex.next();
string const ttok = lex.getString();
setLyXSeries(ttok, f);
} else if (tok == "shape") {
lex.next();
string const ttok = lex.getString();
setLyXShape(ttok, f);
} else if (tok == "size") {
lex.next();
string const ttok = lex.getString();
setLyXSize(ttok, f);
} else if (tok == "misc") {
lex.next();
string const ttok = ascii_lowercase(lex.getString());
if (ttok == "no_bar") {
f.setUnderbar(FONT_OFF);
} else if (ttok == "no_strikeout") {
f.setStrikeout(FONT_OFF);
} else if (ttok == "no_uuline") {
f.setUuline(FONT_OFF);
} else if (ttok == "no_uwave") {
f.setUwave(FONT_OFF);
} else if (ttok == "no_emph") {
f.setEmph(FONT_OFF);
} else if (ttok == "no_noun") {
f.setNoun(FONT_OFF);
} else if (ttok == "emph") {
f.setEmph(FONT_ON);
} else if (ttok == "underbar") {
f.setUnderbar(FONT_ON);
} else if (ttok == "strikeout") {
f.setStrikeout(FONT_ON);
} else if (ttok == "uuline") {
f.setUuline(FONT_ON);
} else if (ttok == "uwave") {
f.setUwave(FONT_ON);
} else if (ttok == "noun") {
f.setNoun(FONT_ON);
} else {
lex.printError("Illegal misc type");
}
} else if (tok == "color") {
lex.next();
string const ttok = lex.getString();
setLyXColor(ttok, f);
} else {
lex.printError("Unknown tag");
error = true;
}
}
return f;
}
/// Writes the changes from this font to orgfont in .lyx format in file
void Font::lyxWriteChanges(Font const & orgfont,
ostream & os) const

View File

@ -15,10 +15,6 @@
#ifndef FONT_H
#define FONT_H
#ifdef TEX2LYX
#include "tex2lyx/Font.h"
#else
#include "ColorCode.h"
#include "FontInfo.h"
@ -27,7 +23,6 @@
namespace lyx {
class Lexer;
class BufferParams;
class Language;
class LaTeXFeatures;
@ -57,10 +52,6 @@ public:
///
void setLanguage(Language const * l);
/// Returns misc flag after LyX text format
FontState setLyXMisc(std::string const &);
/// Returns size of font in LaTeX text notation
std::string const latexSize() const;
@ -153,26 +144,6 @@ bool operator!=(Font const & font1, Font const & font2)
*/
std::string const freefont2string();
/// Set family after LyX text format
void setLyXFamily(std::string const &, FontInfo &);
/// Set series after LyX text format
void setLyXSeries(std::string const &, FontInfo &);
/// Set shape after LyX text format
void setLyXShape(std::string const &, FontInfo &);
/// Set size after LyX text format
void setLyXSize(std::string const &, FontInfo &);
/// Sets color after LyX text format
void setLyXColor(std::string const &, FontInfo &);
/// Read a font specification from Lexer. Used for layout files.
FontInfo lyxRead(Lexer &, FontInfo const & fi = sane_font);
} // namespace lyx
#endif // TEX2LYX
#endif

View File

@ -14,15 +14,42 @@
#include <config.h>
#include "ColorSet.h"
#include "FontInfo.h"
#include "Lexer.h"
#include "support/debug.h"
#include "support/docstring.h"
#include "support/lstrings.h"
using namespace std;
using namespace lyx::support;
namespace lyx {
//
// Strings used to read and write .lyx format files
//
char const * LyXFamilyNames[NUM_FAMILIES + 2 /* default & error */] =
{ "roman", "sans", "typewriter", "symbol",
"cmr", "cmsy", "cmm", "cmex", "msa", "msb", "eufrak", "wasy", "esint",
"default", "error" };
char const * LyXSeriesNames[4] =
{ "medium", "bold", "default", "error" };
char const * LyXShapeNames[6] =
{ "up", "italic", "slanted", "smallcaps", "default", "error" };
char const * LyXSizeNames[14] =
{ "tiny", "scriptsize", "footnotesize", "small", "normal", "large",
"larger", "largest", "huge", "giant",
"increase", "decrease", "default", "error" };
char const * LyXMiscNames[5] =
{ "off", "on", "toggle", "default", "error" };
FontInfo const sane_font(
ROMAN_FAMILY,
MEDIUM_SERIES,
@ -448,4 +475,160 @@ docstring FontInfo::asCSS() const
return from_ascii(retval);
}
// Set family according to lyx format string
void setLyXFamily(string const & fam, FontInfo & f)
{
string const s = ascii_lowercase(fam);
int i = 0;
while (LyXFamilyNames[i] != s &&
LyXFamilyNames[i] != string("error"))
++i;
if (s == LyXFamilyNames[i])
f.setFamily(FontFamily(i));
else
LYXERR0("Unknown family `" << s << '\'');
}
// Set series according to lyx format string
void setLyXSeries(string const & ser, FontInfo & f)
{
string const s = ascii_lowercase(ser);
int i = 0;
while (LyXSeriesNames[i] != s &&
LyXSeriesNames[i] != string("error")) ++i;
if (s == LyXSeriesNames[i]) {
f.setSeries(FontSeries(i));
} else
LYXERR0("Unknown series `" << s << '\'');
}
// Set shape according to lyx format string
void setLyXShape(string const & sha, FontInfo & f)
{
string const s = ascii_lowercase(sha);
int i = 0;
while (LyXShapeNames[i] != s && LyXShapeNames[i] != string("error"))
++i;
if (s == LyXShapeNames[i])
f.setShape(FontShape(i));
else
LYXERR0("Unknown shape `" << s << '\'');
}
// Set size according to lyx format string
void setLyXSize(string const & siz, FontInfo & f)
{
string const s = ascii_lowercase(siz);
int i = 0;
while (LyXSizeNames[i] != s && LyXSizeNames[i] != string("error"))
++i;
if (s == LyXSizeNames[i]) {
f.setSize(FontSize(i));
} else
LYXERR0("Unknown size `" << s << '\'');
}
// Set size according to lyx format string
FontState setLyXMisc(string const & siz)
{
string const s = ascii_lowercase(siz);
int i = 0;
while (LyXMiscNames[i] != s &&
LyXMiscNames[i] != string("error")) ++i;
if (s == LyXMiscNames[i])
return FontState(i);
LYXERR0("Unknown misc flag `" << s << '\'');
return FONT_OFF;
}
/// Sets color after LyX text format
void setLyXColor(string const & col, FontInfo & f)
{
f.setColor(lcolor.getFromLyXName(col));
}
// Read a font definition from given file in lyx format
// Used for layouts
FontInfo lyxRead(Lexer & lex, FontInfo const & fi)
{
FontInfo f = fi;
bool error = false;
bool finished = false;
while (!finished && lex.isOK() && !error) {
lex.next();
string const tok = ascii_lowercase(lex.getString());
if (tok.empty()) {
continue;
} else if (tok == "endfont") {
finished = true;
} else if (tok == "family") {
lex.next();
string const ttok = lex.getString();
setLyXFamily(ttok, f);
} else if (tok == "series") {
lex.next();
string const ttok = lex.getString();
setLyXSeries(ttok, f);
} else if (tok == "shape") {
lex.next();
string const ttok = lex.getString();
setLyXShape(ttok, f);
} else if (tok == "size") {
lex.next();
string const ttok = lex.getString();
setLyXSize(ttok, f);
} else if (tok == "misc") {
lex.next();
string const ttok = ascii_lowercase(lex.getString());
if (ttok == "no_bar") {
f.setUnderbar(FONT_OFF);
} else if (ttok == "no_strikeout") {
f.setStrikeout(FONT_OFF);
} else if (ttok == "no_uuline") {
f.setUuline(FONT_OFF);
} else if (ttok == "no_uwave") {
f.setUwave(FONT_OFF);
} else if (ttok == "no_emph") {
f.setEmph(FONT_OFF);
} else if (ttok == "no_noun") {
f.setNoun(FONT_OFF);
} else if (ttok == "emph") {
f.setEmph(FONT_ON);
} else if (ttok == "underbar") {
f.setUnderbar(FONT_ON);
} else if (ttok == "strikeout") {
f.setStrikeout(FONT_ON);
} else if (ttok == "uuline") {
f.setUuline(FONT_ON);
} else if (ttok == "uwave") {
f.setUwave(FONT_ON);
} else if (ttok == "noun") {
f.setNoun(FONT_ON);
} else {
lex.printError("Illegal misc type");
}
} else if (tok == "color") {
lex.next();
string const ttok = lex.getString();
setLyXColor(ttok, f);
} else {
lex.printError("Unknown tag");
error = true;
}
}
return f;
}
} // namespace lyx

View File

@ -15,10 +15,6 @@
#ifndef FONT_PROPERTIES_H
#define FONT_PROPERTIES_H
#ifdef TEX2LYX
#include "tex2lyx/Font.h"
#else
#include "Color.h"
#include "ColorCode.h"
#include "FontEnums.h"
@ -26,6 +22,8 @@
namespace lyx {
class Lexer;
///
class FontInfo
{
@ -201,7 +199,27 @@ extern FontInfo const inherit_font;
/// All ignore font.
extern FontInfo const ignore_font;
/// Set family after LyX text format
void setLyXFamily(std::string const &, FontInfo &);
/// Set series after LyX text format
void setLyXSeries(std::string const &, FontInfo &);
/// Set shape after LyX text format
void setLyXShape(std::string const &, FontInfo &);
/// Set size after LyX text format
void setLyXSize(std::string const &, FontInfo &);
/// Sets color after LyX text format
void setLyXColor(std::string const &, FontInfo &);
/// Returns misc flag after LyX text format
FontState setLyXMisc(std::string const &);
/// Read a font specification from Lexer. Used for layout files.
FontInfo lyxRead(Lexer &, FontInfo const & fi = sane_font);
} // namespace lyx
#endif // TEX2LYX_FONT_H
#endif

View File

@ -16,7 +16,7 @@
#include "Language.h"
#include "TextClass.h"
#include "Lexer.h"
#include "Font.h"
#include "FontInfo.h"
#include "support/Messages.h"
#include "support/debug.h"
@ -955,10 +955,6 @@ string Layout::defaultCSSClass() const
// sorts of margins or padding, for example. But for now we are
// going to keep it simple.
void Layout::makeDefaultCSS() const {
#ifdef TEX2LYX
// tex2lyx does not have FontInfo::asCSS()
return;
#else
// this never needs to be redone, since reloading layouts will
// wipe out what we did before.
if (!htmldefaultstyle_.empty())
@ -975,7 +971,6 @@ void Layout::makeDefaultCSS() const {
htmldefaultstyle_ +=
from_ascii(htmllabeltag() + "." + defaultCSSLabelClass() + " {\n") +
labelfontCSS + from_ascii("\n}\n");
#endif
}

View File

@ -361,10 +361,10 @@ void Text::readParToken(Paragraph & par, Lexer & lex,
}
} else if (token == "\\numeric") {
lex.next();
font.fontInfo().setNumber(font.setLyXMisc(lex.getString()));
font.fontInfo().setNumber(setLyXMisc(lex.getString()));
} else if (token == "\\emph") {
lex.next();
font.fontInfo().setEmph(font.setLyXMisc(lex.getString()));
font.fontInfo().setEmph(setLyXMisc(lex.getString()));
} else if (token == "\\bar") {
lex.next();
string const tok = lex.getString();
@ -380,16 +380,16 @@ void Text::readParToken(Paragraph & par, Lexer & lex,
"`$$Token'");
} else if (token == "\\strikeout") {
lex.next();
font.fontInfo().setStrikeout(font.setLyXMisc(lex.getString()));
font.fontInfo().setStrikeout(setLyXMisc(lex.getString()));
} else if (token == "\\uuline") {
lex.next();
font.fontInfo().setUuline(font.setLyXMisc(lex.getString()));
font.fontInfo().setUuline(setLyXMisc(lex.getString()));
} else if (token == "\\uwave") {
lex.next();
font.fontInfo().setUwave(font.setLyXMisc(lex.getString()));
font.fontInfo().setUwave(setLyXMisc(lex.getString()));
} else if (token == "\\noun") {
lex.next();
font.fontInfo().setNoun(font.setLyXMisc(lex.getString()));
font.fontInfo().setNoun(setLyXMisc(lex.getString()));
} else if (token == "\\color") {
lex.next();
setLyXColor(lex.getString(), font.fontInfo());

View File

@ -15,7 +15,6 @@
#include "InsetLayout.h"
#include "ColorSet.h"
#include "Font.h"
#include "Lexer.h"
#include "TextClass.h"

View File

@ -1,63 +0,0 @@
/**
* \file tex2lyx/Font.cpp
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Angus Leeming
*
* Full author contact details are available in file CREDITS.
*/
#include <config.h>
#include "Font.h"
#include "Lexer.h"
#include "support/lstrings.h"
using namespace std;
namespace lyx {
using lyx::support::ascii_lowercase;
/// Sane font.
FontInfo const sane_font;
/// All inherit font.
FontInfo const inherit_font;
/// All ignore font.
FontInfo const ignore_font;
FontInfo lyxRead(Lexer & lex, FontInfo const &)
{
bool error = false;
bool finished = false;
while (!finished && lex.isOK() && !error) {
lex.next();
string const tok = ascii_lowercase(lex.getString());
if (tok.empty()) {
continue;
} else if (tok == "endfont") {
finished = true;
} else if (tok == "family") {
lex.next();
} else if (tok == "series") {
lex.next();
} else if (tok == "shape") {
lex.next();
} else if (tok == "size") {
lex.next();
} else if (tok == "misc") {
lex.next();
} else if (tok == "color") {
lex.next();
} else {
lex.printError("Unknown tag `$$Token'");
error = true;
}
}
return FontInfo();
}
} // namespace lyx

View File

@ -1,54 +0,0 @@
// -*- C++ -*-
/**
* \file tex2lyx/Font.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Angus Leeming
*
* Full author contact details are available in file CREDITS.
*
* This class is just a dummy version of that in the main LyX source tree
* to enable tex2lyx to use LyX's textclass classes and not have to
* re-invent the wheel.
*
*/
#ifndef TEX2LYX_FONT_H
#define TEX2LYX_FONT_H
//#include "FontInfo.h"
namespace lyx {
class Lexer;
class FontInfo
{
public:
FontInfo() {}
FontInfo & realize(FontInfo const &) { return *this; }
void setColor(int) {}
bool resolved() const { return true; }
};
/// Sane font.
extern FontInfo const sane_font;
/// All inherit font.
extern FontInfo const inherit_font;
/// All ignore font.
extern FontInfo const ignore_font;
class Font
{
public:
Font() {}
Font(FontInfo const &) {}
};
/// Read a font specification from Lexer. Used for layout files.
FontInfo lyxRead(Lexer &, FontInfo const & fi = sane_font);
} // namespace lyx
#endif // TEX2LYX_FONT_H

View File

@ -29,42 +29,40 @@ TEST_FILES = \
test/test-structure.tex
LINKED_FILES = \
../Color.cpp \
../Counters.cpp \
../Encoding.cpp \
../FloatList.cpp \
../Floating.cpp \
../Counters.cpp \
../FontInfo.cpp \
../insets/InsetLayout.cpp \
../LayoutFile.h \
../Layout.h \
../Layout.cpp \
../LayoutModuleList.h \
../LayoutModuleList.cpp \
../lengthcommon.cpp \
../Lexer.cpp \
../ModuleList.h \
../ModuleList.cpp \
../TextClass.cpp \
../TextClass.h \
../Lexer.cpp \
../lengthcommon.cpp \
../Color.cpp \
../Color.h \
../Encoding.cpp
../TextClass.h
BUILT_SOURCES = $(PCH_FILE)
tex2lyx_SOURCES = \
$(LINKED_FILES) \
Spacing.h \
boost.cpp \
Context.cpp \
Context.h \
Font.cpp \
Font.h \
math.cpp \
Parser.cpp \
Parser.h \
preamble.cpp \
Spacing.h \
table.cpp \
tex2lyx.cpp \
tex2lyx.h \
preamble.cpp \
math.cpp \
table.cpp \
text.cpp
tex2lyx_LDADD = \