+ istringstream is(STRCONV(data));
+ LyXLex lex(0,0);
+ lex.setStream(is);
+
+ int nset = 0;
+ while (lex.isOK()) {
+ string token;
+ if (lex.next())
+ token = lex.getString();
+
+ if (token.empty() || !lex.next())
+ break;
+
+ if (token == "family") {
+ int const next = lex.getInteger();
+ font.setFamily(LyXFont::FONT_FAMILY(next));
+
+ } else if (token == "series") {
+ int const next = lex.getInteger();
+ font.setSeries(LyXFont::FONT_SERIES(next));
+
+ } else if (token == "shape") {
+ int const next = lex.getInteger();
+ font.setShape(LyXFont::FONT_SHAPE(next));
+
+ } else if (token == "size") {
+ int const next = lex.getInteger();
+ font.setSize(LyXFont::FONT_SIZE(next));
+
+ } else if (token == "emph" || token == "underbar" ||
+ token == "noun" || token == "number") {
+
+ int const next = lex.getInteger();
+ LyXFont::FONT_MISC_STATE const misc =
+ LyXFont::FONT_MISC_STATE(next);
+
+ if (token == "emph")
+ font.setEmph(misc);
+ else if (token == "underbar")
+ font.setUnderbar(misc);
+ else if (token == "noun")
+ font.setNoun(misc);
+ else if (token == "number")
+ font.setNumber(misc);
+
+ } else if (token == "color") {
+ int const next = lex.getInteger();
+ font.setColor(LColor::color(next));
+
+ } else if (token == "language") {
+ string const next = lex.getString();
+ if (next == "ignore")
+ font.setLanguage(ignore_language);
+ else
+ font.setLanguage(languages.getLanguage(next));
+
+ } else if (token == "toggleall") {
+ toggle = lex.getBool();
+
+ } else {
+ // Unrecognised token
+ break;
+ }
+
+ ++nset;
+ }
+ return (nset > 0);