On Mon, Oct 30, 2006 at 08:22:31PM +0100, Georg Baum wrote:
> Am Montag, 30. Oktober 2006 20:03 schrieb Enrico Forestieri:
>
> > An hack? What do you mean?
>
> This one:
>
> if (s[0] < 0x80 && isAlpha(static_cast<char>(s[0])))
>
> We should have an isAlpha that takes a lyx::char_type and use
>
> if (isAlpha(s[0]))
>
> instead, even if that isAlpha looks like this:
>
> bool isAlpha(lyx::char_type c)
> {
> return c < 0x80 && isAlpha(static_cast<char>(c));
> }
>
> The places where a lyx::char_type is treated as a char should be limited to
> some support functions. If we hardcode this stuff all over the place it
> will be more difficult to take non-ascii alphanumeric characters into
> acoount if that is needed some day.
Agreed, even if that doesn't qualify as an hack for me. I doubt that you
can use something different than ascii in a TeX equation (unless you
catcode it, of course). I thought about adding an assert, but then
nobody can stop an user from writing \sinü, so let's have an error from
latex if that happens...
> > > Then I would also like to know why this problem was introduced.
> Probably
> > > not by removing the code you just added (or was it done by accident?).
> >
> > Probably by adding the overloaded << operator and not taking the
> appropriate
> > actions.
>
> Ah, you just copied existing stuff. If I had known that I would not have
> asked.
Yep, I stand on the shoulders of giants ;-)
Here is where the wicked deed occurred:
http://www.lyx.org/trac/changeset/15462#file162
Updated patch attached.
--
Enrico
Index: src/mathed/MathStream.C
===================================================================
--- src/mathed/MathStream.C (revision 15623)
+++ src/mathed/MathStream.C (working copy)
@@ -25,6 +25,12 @@ bool isAlpha(char c)
return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
}
+
+bool isAlpha(lyx::char_type c)
+{
+ return c < 0x80 && isAlpha(static_cast<char>(c));
+}
+
}
@@ -93,7 +99,19 @@ NormalStream & operator<<(NormalStream &
WriteStream & operator<<(WriteStream & ws, docstring const & s)
{
+ if (ws.pendingSpace() && s.length() > 0) {
+ if (isAlpha(s[0]))
+ ws.os() << ' ';
+ ws.pendingSpace(false);
+ }
ws.os() << s;
+ int lf = 0;
+ docstring::const_iterator dit = s.begin();
+ docstring::const_iterator end = s.end();
+ for (; dit != end; ++dit)
+ if ((*dit) == '\n')
+ ++lf;
+ ws.addlines(lf);
return ws;
}