[scribus-dev] Change to UTF-32

Khaled Hosny khaledhosny at eglug.org
Mon May 30 20:08:24 UTC 2016


On Mon, May 30, 2016 at 09:39:11PM +0200, Craig Bradney wrote:
> 
> > On 30 May 2016, at 21:36, Khaled Hosny <khaledhosny at eglug.org> wrote:
> > 
> > On Mon, May 30, 2016 at 09:22:43PM +0200, Craig Bradney wrote:
> >> 
> >>> On 30 May 2016, at 21:14, Khaled Hosny <khaledhosny at eglug.org> wrote:
> >>> 
> >>> On Mon, May 30, 2016 at 08:56:06PM +0200, Craig Bradney wrote:
> >>>> 
> >>>>> On 30 May 2016, at 17:26, Andreͮaͦsͯ <andreas.vox at gmail.com> wrote:
> >>>>> 
> >>>>> Hi!
> >>>>> 
> >>>>> Khaled recently committed a change to the HOST-Oman/ctl branch that changes the text coding from UTF_16 (QChar/QString) to UTF-32:
> >>>>> https://github.com/HOST-Oman/scribus/commit/b2886e64b4aba660e4939d6cdaba066aed39d081
> >>>>> 
> >>>>> Since we have divided opinions on this issue, would you mind reviewing the discussion in the comments and add your own thoughts?
> >>>>> 
> >>>>> Best regards
> >>>>> /Andreas
> >>>>> 
> >>>>> 
> >>>> 
> >>>> 
> >>>> I don’t really see the difference because I don’t know the code. If
> >>>> the APIs enable me, or anyone who doesn’t know the text code to do
> >>>> stuff like insert text at a certain point for example, the it would
> >>>> seem ok.
> >>>> One thing that is mentioned is for example inserting a QChar.. so how
> >>>> does one programmatically insert 1 character?
> >>> 
> >>> StoryText has no API to insert single character, inserting QChar
> >>> apparently works because it can be cast to QString or some such. You can
> >>> now either insert a QString and the code will convert it to UTF-32, or a
> >>> QVector<uint> of UTF-32 code points. We might have a friendly typedef
> >>> for this vector.
> >>> 
> >>>> I don’t have an opinion on the 16 vs 32 as long as it works so we can
> >>>> do all operations.. read/write to file, display it, type it, export it
> >>>> to various formats.
> >>> 
> >>> The big difference is that UTF-16 is variable length, a Unicode
> >>> character can be represented by one or two UTF-16 code units, but
> >>> Scribus was treating it as a fixed length encoding which is wrong.
> >>> UTF-32, on the other hand, is fixed length encoding, so the assumption
> >>> all over Scribus codebase can be kept.
> >>> 
> >> 
> >> So… you don’t want to use UTF16 as its a variable length encoding (1
> >> or 2 16 bit code units) and we’d need to deal with the unknown length
> >> in all the code..
> > 
> > Right.
> > 
> >> And the downside to UTF32 is? Higher memory requirement?
> > 
> > Not sure about that, since we are not replacing 16-bit int by 32-bit
> > int, but QChar by uint, whether uint takes less or more memory than
> > QChar this needs to be measured (no idea how, though).
> > 
> >> Inability to
> >> directly use QStrings in storage of text? (even though there is
> >> QString::toUcs4 to facilitate conversion)
> > 
> > We can (and still) use QString in many places, mainly when interfacing
> > with APIs that use QString. We just need to be careful and not assume
> > that QString length is the same as StoryText length.
> > 
> 
> What about speed? We already need to speed up the text engine massively, including rendering (or especially rendering).

Converting a QString read from 25MB text file to UTF-32 takes <
0.4 seconds, so that does not seem to be a concern. The current slowness
is mainly bad handling of text spanning multiple frames more than
anything else and Andreas is working on a fix for this.





More information about the scribus-dev mailing list