mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-23 21:40:19 +00:00
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:
parent
aa41b3033b
commit
b8e78dc35f
@ -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>
|
||||
|
||||
* text.C:
|
||||
|
@ -28,11 +28,23 @@ using lyx::pos_type;
|
||||
extern int tex_code_break_column;
|
||||
|
||||
|
||||
// Initialize static member.
|
||||
ShareContainer<LyXFont> Paragraph::Pimpl::FontTable::container;
|
||||
// Initialization of the counter for the paragraph id's,
|
||||
unsigned int Paragraph::Pimpl::paragraph_id = 0;
|
||||
|
||||
// Initialize static member.
|
||||
ShareContainer<LyXFont> Paragraph::Pimpl::FontTable::container;
|
||||
namespace {
|
||||
|
||||
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)
|
||||
@ -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) {
|
||||
if (pos + i >= size())
|
||||
for (string::size_type i = 0; i < str.length(); ++i) {
|
||||
if (pos + static_cast<pos_type>(i) >= size())
|
||||
return false;
|
||||
if (str[i] != getChar(pos + i))
|
||||
return false;
|
||||
if (owner_->getFont(bp, pos + i) != font)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -461,24 +476,24 @@ void Paragraph::Pimpl::simpleTeXSpecialChars(Buffer const * buf,
|
||||
break;
|
||||
}
|
||||
|
||||
if (isTextAt("LyX", i)) {
|
||||
os << "\\LyX{}";
|
||||
i += 2;
|
||||
column += 5;
|
||||
} else if (isTextAt("TeX", i)) {
|
||||
os << "\\TeX{}";
|
||||
i += 2;
|
||||
column += 5;
|
||||
} else if (isTextAt("LaTeX2e", i)) {
|
||||
os << "\\LaTeXe{}";
|
||||
i += 6;
|
||||
column += 8;
|
||||
} else if (isTextAt("LaTeX", i)) {
|
||||
os << "\\LaTeX{}";
|
||||
i += 4;
|
||||
column += 7;
|
||||
// do we really try to print out '\0' ?
|
||||
} else if (c != '\0') {
|
||||
// LyX, LaTeX etc.
|
||||
|
||||
// FIXME: if we have "LaTeX" with a font change in the middle (before
|
||||
// the 'T', then the "TeX" part is still special cased. Really we
|
||||
// should only operate this on "words" for some definition of word
|
||||
|
||||
size_t pnr = 0;
|
||||
|
||||
for (; pnr < phrases_nr; ++pnr) {
|
||||
if (isTextAt(bparams, font, special_phrases[pnr][0], i)) {
|
||||
os << special_phrases[pnr][1];
|
||||
i += special_phrases[pnr][0].length() - 1;
|
||||
column += special_phrases[pnr][1].length() - 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (pnr == phrases_nr && c != '\0') {
|
||||
os << c;
|
||||
}
|
||||
break;
|
||||
|
@ -148,7 +148,8 @@ struct Paragraph::Pimpl {
|
||||
ParagraphParameters params;
|
||||
private:
|
||||
/// 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?
|
||||
Paragraph * owner_;
|
||||
|
Loading…
Reference in New Issue
Block a user