On 29.06.2010, at 10:14, Andy Stewart wrote:

> Axel Simon <axel.si...@in.tum.de> writes:
>
>> Hi Andy,
>>
>> I don't think this behaviour is always desirable for all  
>> applications.
>> Some applications might prefer to catch an error exception while
>> others might be happy to simply ignore the error as your fix would  
>> do.
>>
>> In which situations do these functions not work for you? Couldn't you
>> use some other utf8 Haskell package to check for the correctness of
>> strings?
> I think we should add string information in error, then it's easier to
> track if user don't catch fromUTF error.
>
> Something like this:
>
> ------------------------------> new fromUTF start  
> <------------------------------
> fromUTF :: String -> String
> fromUTF [] = []
> fromUTF (all@(x:xs)) | ord x<=0x7F = x:fromUTF xs
>                    | ord x<=0xBF = err all
>                    | ord x<=0xDF = twoBytes all
>                    | ord x<=0xEF = threeBytes all
>                    | otherwise   = err all

You should just pass xs...


>  where
>    twoBytes (x1:x2:xs) = chr (((ord x1 .&. 0x1F) `shift` 6) .|.
>                              (ord x2 .&. 0x3F)):fromUTF xs
>    twoBytes str = error ("fromUTF: " ++ str ++ " has illegal two  
> byte sequence!")
>
>    threeBytes (x1:x2:x3:xs) = chr (((ord x1 .&. 0x0F) `shift` 12) .|.
>                                   ((ord x2 .&. 0x3F) `shift` 6) .|.
>                                   (ord x3 .&. 0x3F)):fromUTF xs
>    threeBytes str = error ("fromUTF: " ++ str ++ " has illegal three  
> byte sequence!")
>
>    err str = error ("fromUTF: " ++ str ++ " has illegal UTF-8  
> character!")

...and say "fromUTF: illegal character in front of \""++take 10 xs"\"!)

I think your intention was to show the whole string. But you only show  
the illegal character first which is probably not a good idea  
(although xs might be illegal, too).

Actually storing the whole text for the error message is probably a  
bad idea since that would constitute a space leak.

Cheers,
Axel

> ------------------------------> new fromUTF end    
> <------------------------------
>
> What do you think?
>
>  -- Andy
>
>>
>> Cheers,
>> Axel
>>
>> On 29.06.2010, at 08:34, Andy Stewart wrote:
>>
>>> 1 patch for repository andystew...@code.haskell.org:/srv/code/ 
>>> gtk2hs:
>>>
>>> Tue Jun 29 14:32:43 CST 2010  Andy Stewart <lazycat.mana...@gmail.com 
>>> >
>>> * Use traceShow replace error provide safer fromUTF.
>>>
>>> New patches:
>>>
>>> [Use traceShow replace error provide safer fromUTF.
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100629063243
>>> Ignore-this: 4ccec77e1d2b1405b979e14ec1818077
>>> ] {
>>> hunk ./glib/System/Glib/UTFString.hs 50
>>>
>>> import Control.Monad        (liftM)
>>> import Data.Char (ord, chr)
>>> +import Debug.Trace
>>>
>>> import System.Glib.FFI
>>>
>>> hunk ./glib/System/Glib/UTFString.hs 170
>>> fromUTF :: String -> String
>>> fromUTF [] = []
>>> fromUTF (all@(x:xs)) | ord x<=0x7F = x:fromUTF xs
>>> -                | ord x<=0xBF = err
>>> +                | ord x<=0xBF = noconvert all
>>>                  | ord x<=0xDF = twoBytes all
>>>                  | ord x<=0xEF = threeBytes all
>>> hunk ./glib/System/Glib/UTFString.hs 173
>>> -                | otherwise   = err
>>> +                | otherwise   = noconvert all
>>>  where
>>>    twoBytes (x1:x2:xs) = chr (((ord x1 .&. 0x1F) `shift` 6) .|.
>>>                            (ord x2 .&. 0x3F)):fromUTF xs
>>> hunk ./glib/System/Glib/UTFString.hs 177
>>> -    twoBytes _ = error "fromUTF: illegal two byte sequence"
>>> +    twoBytes str = traceShow ("fromUTF Warning: " ++ str ++ " has
>>> illegal two byte sequence, no convert!") str
>>>
>>>    threeBytes (x1:x2:x3:xs) = chr (((ord x1 .&. 0x0F) `shift`  
>>> 12) .|.
>>>                                 ((ord x2 .&. 0x3F) `shift` 6) .|.
>>> hunk ./glib/System/Glib/UTFString.hs 182
>>>                                 (ord x3 .&. 0x3F)):fromUTF xs
>>> -    threeBytes _ = error "fromUTF: illegal three byte sequence"
>>> +    threeBytes str = traceShow ("fromUTF Warning: " ++ str ++ " has
>>> illegal three byte sequence, no convert!") str
>>>
>>> hunk ./glib/System/Glib/UTFString.hs 184
>>> -    err = error "fromUTF: illegal UTF-8 character"
>>> +    noconvert str = traceShow ("fromUTF Warning: " ++ str ++ " has
>>> illegal UTF-8 character, no convert!") str
>>>
>>> -- Offset correction for String to UTF8 mapping.
>>> --
>>> }
>>>
>>> Context:
>>>
>>> [Update Embedded demos.
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100628072541
>>> Ignore-this: 1792a53558175309e474755b2fd170ab
>>> ]
>>> [Add function drawableGetID.
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100628071306
>>> Ignore-this: 66f80a911f63867209160d53e51c8498
>>> ]
>>> [Fix freeHaskellFunPtr problem in Clipboard.chs
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100627113550
>>> Ignore-this: efa86a719456d15b01eaaed62393f78f
>>> ]
>>> [Apply Oleg's patch to fix clipboardRequestTargets segfault.
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100627103336
>>> Ignore-this: 5602ff1727f889cdccc5bc2cb0f7353c
>>> ]
>>> [Add MPlayer client demo.
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100617090640
>>> Ignore-this: 5a8ab681c148ca07f27f768f9f62b1b7
>>> ]
>>> [Move hierarchy.list to gtk package (Don't need reinstall gtk2hs-
>>> buildtools after add new type)
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100604131309
>>> Ignore-this: d3f52ea66e784a2ecd66d764571f58a9
>>> ]
>>> [Move hierarchy.list to gio package (Don't need reinstall gtk2hs-
>>> buildtools after add new type)
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100604130442
>>> Ignore-this: 7539a9c035e4f25ac54d619c92021f49
>>> ]
>>> [Move hierarchy.list to pango package (Don't need reinstall gtk2hs-
>>> buildtools after add new type)
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100604130210
>>> Ignore-this: b2ebce6749cf1083f3810e6175ceb1a2
>>> ]
>>> [Fix INSTALL
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100604095408
>>> Ignore-this: 832b7cff47d7200ee89ee797981febee
>>> ]
>>> [Create Gtk specific versions of functions that add something to the
>>> main loop. These specific functions acquire the Gtk lock before
>>> executing the action which the documentation promised but...
>>> axel.si...@in.tum.de**20100603153700]
>>> [Improve signal `queryTooltip`
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100602070555
>>> Ignore-this: 4b625d69ebb779f22ec57ae0cc5223aa
>>> ]
>>> [Add MenuToolButton support functions for Tooltip.chs
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100601165857
>>> Ignore-this: 9e153056f052f09f3bf7bd5569ce347c
>>> ]
>>> [Fix `widgetTooltipMarkup` and docs.
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100601144701
>>> Ignore-this: 3fc33fd561f18f221d8b7b0215c71826
>>> ]
>>> [Fix function `tooltipSetMarkup`
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100601143948
>>> Ignore-this: b4af7ecca1bc74b22e20727f33729a8b
>>> ]
>>> [Add Widget support functions for Tooltip.chs
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100601140304
>>> Ignore-this: 6b10098119f7a416d763c834bd892cae
>>> ]
>>> [Add Tooltip.chs (The new module to replace Tooltips.chs)
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100601131828
>>> Ignore-this: ca64d1d45d3c526494a41fb537d16c6c
>>> ]
>>> [Clean bootstrap.sh
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100601122113
>>> Ignore-this: f59b5f9bf21945c39258a39432621a03
>>> ]
>>> [Note that Cabal 1.8 is required for ghci support under Windows.
>>> axel.si...@in.tum.de**20100527181310
>>> Ignore-this: 1c5fc3bb7ad83f5d1094e0083ddd9913
>>> ]
>>> [Do not query g_object_get_type as it only exists in newer Gtk+
>>> versions.
>>> axel.si...@in.tum.de**20100527163435
>>> Ignore-this: 70d62f66a2eb159c7fd3e23079c5debf
>>> ]
>>> [Remove gnomevfs sourceview mozembed since those packages has
>>> deprecated.
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100527124728
>>> Ignore-this: a1dfda3669b7417a7b09c3b4acfaa2d
>>>
>>> Below are backup repositories for those deprecated packages:
>>>
>>> * gnomevfs          : http://www2.in.tum.de/~simona/gnomevfs/
>>> * sourceview        : http://www2.in.tum.de/~simona/sourceview/
>>> * mozembed          : http://www2.in.tum.de/~simona/mozembed/
>>>
>>> ]
>>> [Fix IconTheme.chs docs.
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100527102140
>>> Ignore-this: 2f2b7ab508c688cc73f1b59012966d13
>>> ]
>>> [Fix Gtk2HsSetup.hs bug.
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100527095530
>>> Ignore-this: 1b65945da174e05d0ad2a1f01e2ee651
>>> ]
>>> [Add gnomevfs demo directory.
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100527061234
>>> Ignore-this: 40c6dd74b460d7546937212dacf1f9e1
>>> ]
>>> [Add gtk demo directory.
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100527061041
>>> Ignore-this: 876a827c6f1bac1a8b26a99cd68c6005
>>> ]
>>> [Add cairo demo directory.
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100527051924
>>> Ignore-this: b1a70c2a24812fb84c899e4e8ce3ca6c
>>> ]
>>> [Add pango demo directory.
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100527051205
>>> Ignore-this: af1ff611ab459ee2b6c5bc09a3f63c11
>>> ]
>>> [Fix the license of gnomevfs
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100527035350
>>> Ignore-this: 9ac7c768af168d6f0c7af8c8790e8643
>>> ]
>>> [Fix the license of gio.
>>> axel.si...@in.tum.de**20100526152125
>>> Ignore-this: 42fe27de2030e0395227f889ba5345d8
>>> ]
>>> [Fix Trac #1164. toGSList was reversing lists.
>>> m.ni...@gmail.com**20090514122933
>>> Ignore-this: c466eadbc5ae61ba71721fe15b44735a
>>> ]
>>> [Remove gconf glade gstreamer gtkglext gtksourceview2 soegtk
>>> svgcairo vte webkit since these all now have their own repos.
>>> axel.si...@in.tum.de**20100525211947]
>>> [Documentation fix for EventM.
>>> axel.si...@in.tum.de**20100525131428
>>> Ignore-this: 25c3bf3513ec6467cbd0febe397ab53e
>>> ]
>>> [Put upper bounds on base version.
>>> axel.si...@in.tum.de**20100525082101
>>> Ignore-this: f92b2d9970c436c9fcbcf141fc988e8
>>> ]
>>> [Make documentation parsable.
>>> axel.si...@in.tum.de**20100525080209
>>> Ignore-this: 60f44b8251a9f3e933c874f72d8e8801
>>> ]
>>> [Make the version test in pango less complex as Cabal 1.6 doesn't
>>> parse it otherwise.
>>> axel.si...@in.tum.de**20100525075706
>>> Ignore-this: f3446237cf66abf49e81bd4ba8ef9744
>>> ]
>>> [Fix an incorrect pattern in windowSetIcon.
>>> axel.si...@in.tum.de**20100525075639
>>> Ignore-this: eb596c778897b4ae4fd7f9a8dde59726
>>> ]
>>> [Get rid of stock images under ./docs/reference/images
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100524235315
>>> Ignore-this: 1094aaf32c73ba189937e1beee24ee49
>>> ]
>>> [Redirect image link to library.gnome.org and update image items to
>>> GTK+ 2.20
>>> Andy Stewart <lazycat.mana...@gmail.com>**20100524233947
>>> Ignore-this: f33362d57605d16365e4dfac59c01122
>>> ]
>>> [Add an upper version to the requirement on base.
>>> axel.si...@in.tum.de**20100524211158]
>>> [Be more specific as to the prerequisites of packages.
>>> axel.si...@in.tum.de**20100524210210]
>>> [Fix docu.
>>> axel.si...@in.tum.de**20100524210157]
>>> [Make soegtk compile by fixing dependency on old-time and by not
>>> relying on Gtk 2.18.
>>> axel.si...@in.tum.de**20100524210032]
>>> [don't mention tools in the docs for unregistering.
>>> axel.si...@in.tum.de**20100524201401]
>>> [TAG 0.11.0
>>> axel.si...@in.tum.de**20100524200857]
>>> Patch bundle hash:
>>> c1ef6d98be90249f1c95f9e9b3213e9ebcd20393
>>> ------------------------------------------------------------------------------
>>> This SF.net email is sponsored by Sprint
>>> What will you do first with EVO, the first 4G phone?
>>> Visit sprint.com/first --
>> http://p.sf.net/sfu/sprint-com-first_______________________________________________
>>> Gtk2hs-devel mailing list
>>> Gtk2hs-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel
>>
>>
>> ------------------------------------------------------------------------------
>> This SF.net email is sponsored by Sprint
>> What will you do first with EVO, the first 4G phone?
>> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
>
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Sprint
> What will you do first with EVO, the first 4G phone?
> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> _______________________________________________
> Gtk2hs-devel mailing list
> Gtk2hs-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel


------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Gtk2hs-devel mailing list
Gtk2hs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel

Reply via email to