John Levon wrote:
> On Thu, Mar 13, 2003 at 01:31:35PM +0000, Angus Leeming wrote:
>
>> I'm still confused. Why does it handle this fine.
>
> How are you reading it back in ?
>
>> os << "family " << font.family() << '\n'
>> << "series " << font.series() << '\n'
>> << "shape " << font.shape() << '\n'
>> << "size " << font.size() << '\n'
>> << "emph " << font.emph() << '\n'
>
> john
See bufferview_funcs.C:
void update_and_apply_freefont(BufferView * bv, string const & data)
{
LyXFont font;
bool toggle;
if (string2font(data, font, toggle)) {
freefont = font;
toggleall = toggle;
apply_freefont(bv);
}
}
So, no character dialog changes would be applied if string2font failed. They
are applied, so all is well. The function is functionally identical to the
one that is failing in ControlParagraph.C (not yet submitted) but here I do
NOT need the initial '\\'.
Go figure.
Angus
// Set font and toggle using data
// If successful, returns true
bool string2font(string const & data, LyXFont & font, bool & toggle)
{
istringstream is(data);
LyXLex lex(0,0);
lex.setStream(is);
int Int = 0;
bool Bool = false;
string String;
int nset = 0;
while (lex.isOK()) {
lex.next();
string const token = lex.getString();
if (token == "family" ||
token == "series" ||
token == "shape" ||
token == "size" ||
token == "emph" ||
token == "underbar" ||
token == "noun" ||
token == "number" ||
token == "color") {
lex.next();
Int = lex.getInteger();
} else if (token == "language") {
lex.next();
String = lex.getString();
} else if (token == "toggleall") {
lex.next();
Bool = lex.getBool();
} else {
// Unrecognised token
break;
}
if (!lex.isOK())
break;
++nset;
if (token == "family") {
font.setFamily(static_cast<LyXFont::FONT_FAMILY>(Int));
} else if (token == "series") {
font.setSeries(static_cast<LyXFont::FONT_SERIES>(Int));
} else if (token == "shape") {
font.setShape(static_cast<LyXFont::FONT_SHAPE>(Int));
} else if (token == "size") {
font.setSize(static_cast<LyXFont::FONT_SIZE>(Int));
} else if (token == "emph") {
font.setEmph(static_cast<LyXFont::FONT_MISC_STATE>(Int));
} else if (token == "underbar") {
font.setUnderbar(static_cast<LyXFont::FONT_MISC_STATE>(Int));
} else if (token == "noun") {
font.setNoun(static_cast<LyXFont::FONT_MISC_STATE>(Int));
} else if (token == "number") {
font.setNumber(static_cast<LyXFont::FONT_MISC_STATE>(Int));
} else if (token == "color") {
font.setColor(static_cast<LColor::color>(Int));
} else if (token == "language") {
if (String == "ignore")
font.setLanguage(ignore_language);
else
font.setLanguage(languages.getLanguage(String));
} else if (token == "toggleall") {
toggle = Bool;
}
}
return (nset > 0);
}