isTextAt improvements from John

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3090 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2001-11-27 11:57:57 +00:00
parent aa41b3033b
commit b8e78dc35f
3 changed files with 48 additions and 26 deletions

View File

@ -1,3 +1,9 @@
2001-11-27 John Levon <moz@compsoc.man.ac.uk>
* paragraph_pimpl.h:
* paragraph_pimpl.C: tidy, and fix font-change in "LaTeX"
bug a bit
2001-11-26 John Levon <moz@compsoc.man.ac.uk> 2001-11-26 John Levon <moz@compsoc.man.ac.uk>
* text.C: * text.C:

View File

@ -28,11 +28,23 @@ using lyx::pos_type;
extern int tex_code_break_column; extern int tex_code_break_column;
// Initialize static member.
ShareContainer<LyXFont> Paragraph::Pimpl::FontTable::container;
// Initialization of the counter for the paragraph id's, // Initialization of the counter for the paragraph id's,
unsigned int Paragraph::Pimpl::paragraph_id = 0; unsigned int Paragraph::Pimpl::paragraph_id = 0;
// Initialize static member. namespace {
ShareContainer<LyXFont> Paragraph::Pimpl::FontTable::container;
string special_phrases[][2] = {
{ "LyX", "\\LyX{}" },
{ "TeX", "\\TeX{}" },
{ "LaTeX2e", "\\LaTeXe{}" },
{ "LaTeX", "\\LaTeX{}" },
};
size_t phrases_nr = sizeof(special_phrases)/sizeof(special_phrases[0]);
} // namespace anon
Paragraph::Pimpl::Pimpl(Paragraph * owner) Paragraph::Pimpl::Pimpl(Paragraph * owner)
@ -243,13 +255,16 @@ void Paragraph::Pimpl::simpleTeXBlanks(std::ostream & os, TexRow & texrow,
} }
bool Paragraph::Pimpl::isTextAt(string const & str, pos_type pos) bool Paragraph::Pimpl::isTextAt(BufferParams const & bp, LyXFont & font,
string const & str, pos_type pos)
{ {
for (int i=0; i < str.length(); ++i) { for (string::size_type i = 0; i < str.length(); ++i) {
if (pos + i >= size()) if (pos + static_cast<pos_type>(i) >= size())
return false; return false;
if (str[i] != getChar(pos + i)) if (str[i] != getChar(pos + i))
return false; return false;
if (owner_->getFont(bp, pos + i) != font)
return false;
} }
return true; return true;
} }
@ -461,24 +476,24 @@ void Paragraph::Pimpl::simpleTeXSpecialChars(Buffer const * buf,
break; break;
} }
if (isTextAt("LyX", i)) { // LyX, LaTeX etc.
os << "\\LyX{}";
i += 2; // FIXME: if we have "LaTeX" with a font change in the middle (before
column += 5; // the 'T', then the "TeX" part is still special cased. Really we
} else if (isTextAt("TeX", i)) { // should only operate this on "words" for some definition of word
os << "\\TeX{}";
i += 2; size_t pnr = 0;
column += 5;
} else if (isTextAt("LaTeX2e", i)) { for (; pnr < phrases_nr; ++pnr) {
os << "\\LaTeXe{}"; if (isTextAt(bparams, font, special_phrases[pnr][0], i)) {
i += 6; os << special_phrases[pnr][1];
column += 8; i += special_phrases[pnr][0].length() - 1;
} else if (isTextAt("LaTeX", i)) { column += special_phrases[pnr][1].length() - 1;
os << "\\LaTeX{}"; break;
i += 4; }
column += 7; }
// do we really try to print out '\0' ?
} else if (c != '\0') { if (pnr == phrases_nr && c != '\0') {
os << c; os << c;
} }
break; break;

View File

@ -148,7 +148,8 @@ struct Paragraph::Pimpl {
ParagraphParameters params; ParagraphParameters params;
private: private:
/// match a string against a particular point in the paragraph /// match a string against a particular point in the paragraph
bool isTextAt(string const & str, lyx::pos_type pos); bool isTextAt(BufferParams const &, LyXFont &,
string const & str, lyx::pos_type pos);
/// Who owns us? /// Who owns us?
Paragraph * owner_; Paragraph * owner_;