Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by h1439878.stratoserver.net (8.14.2/8.14.2/Debian-2build1) with ESMTP id s2VKdLKh023297 for ; Mon, 31 Mar 2014 22:39:22 +0200 Received: from relay2.uni-heidelberg.de ([129.206.210.211]) by mx-ha.gmx.net (mxgmx113) with ESMTPS (Nemesis) id 0McyhK-1Wmnnq02HS-00IDEc for ; Mon, 31 Mar 2014 22:39:16 +0200 Received: from listserv.uni-heidelberg.de (listserv.uni-heidelberg.de [129.206.100.94]) by relay2.uni-heidelberg.de (8.13.8/8.13.8) with ESMTP id s2VKa471018448 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 31 Mar 2014 22:36:04 +0200 Received: from listserv.uni-heidelberg.de (listserv.uni-heidelberg.de [127.0.0.1]) by listserv.uni-heidelberg.de (8.13.8/8.13.8) with ESMTP id s2VFSRuF009421; Mon, 31 Mar 2014 22:36:04 +0200 Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 16.0) with spool id 10872584 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Mon, 31 Mar 2014 22:36:04 +0200 Received: from relay2.uni-heidelberg.de (relay2.uni-heidelberg.de [129.206.210.211]) by listserv.uni-heidelberg.de (8.13.8/8.13.8) with ESMTP id s2VKa3JO001190 for ; Mon, 31 Mar 2014 22:36:03 +0200 Received: from smtp2.easily.co.uk (smtp2.easily.co.uk [62.128.146.103]) by relay2.uni-heidelberg.de (8.13.8/8.13.8) with ESMTP id s2VKZteB018404 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Mon, 31 Mar 2014 22:35:58 +0200 Received: from [81.147.107.28] (port=55108 helo=palladium.home) by smtp2.easily.co.uk with esmtpa (Exim 4.43) id 1WUivz-0001EB-9f for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Mon, 31 Mar 2014 21:35:55 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 References: <533473A9.3020401@residenset.net> <53387AD3.4060902@morningstar2.co.uk> <533965E4.2060205@residenset.net> <53398E5F.8020507@morningstar2.co.uk> <53399A18.9040401@residenset.net> X-Enigmail-Version: 1.6 Content-Type: text/plain; charset=ISO-8859-1 Message-ID: <5339D1AA.3020709@morningstar2.co.uk> Date: Mon, 31 Mar 2014 21:35:54 +0100 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: Joseph Wright Subject: Re: harmless package public beta To: LATEX-L@LISTSERV.UNI-HEIDELBERG.DE In-Reply-To: <53399A18.9040401@residenset.net> Precedence: list List-Help: , List-Unsubscribe: List-Subscribe: List-Owner: List-Archive: Content-Transfer-Encoding: quoted-printable X-MIME-Autoconverted: from 8bit to quoted-printable by relay2.uni-heidelberg.de id s2VKa471018448 Envelope-To: X-GMX-Antispam: 0 (Mail was not recognized as spam); Detail=V3; X-GMX-Antivirus: 0 (no virus found) X-UI-Filterresults: notjunk:1;V01:K0:hcQZSmLAvxU=:lO7zhO3MiHg4lUsqDxuRwqO2+L fMtPkC9UJ/oQ7XrkpF7UID4B1hYrP/4Gk7RgB3WGEum+5KTN526wZ6gmvQ8jTmMaHTPoRlrIq Fh9QBUPZZIw+XrZi2PvQo0Lfohl+dLcE8o5vAfzLQiF7nvSoDG8J2eVFCjQOlqIpRGSHRtnZp 1LjUwV73tev6f1EPcNPElEyuAv+VjoDvLp0w/7AMXCwuaAmT1BWJ+4J9PzdQ8PO4M25s5Bj3l Uzdil7Gvn/jHSzRVGdKyhbfWmesjh6CAy5Ni0bwewRULq+OA11/zMLiorsGYj7wrvdRMaTPT3 VcITGUYhIPdbU69gm77F5V80G4q+gaAjZfWNeXaTPV0R56ze4mrb3ROfoDB+XyC/N1HuRtWcU UUQDpEyhhHeUokKsUJle0tWutsDMrFFTQpeuSTu6w4Sp/r9QS5i3TPemx16gYsPYSgC3eJiAZ cPsTBUnUfHosZqMiNb4h6UDdgPKPVvn1ZM5L7VmLkkhhjWUJWflPy4Duca+fUGvpsDkSePEze YWJW0YpyxGjpv0juPWfw8XWHY8d7oC/0PhQHZ9AZqWZzSviOF+nuI1sK8W36mR1FZzfnO21UT rOgnxoYWostGons+LMcPKeNUxrRIE4akw1/n20hSRSdPh5PmbLcWHmCHK8u/sXSkzoPc3NtGv CDqWaTAOgjdLyMqglCMkpzGomdiD5YACkMDTor09c7ot/Da09fhHRKYjhImdqWpIDTGsQVvGc HCO02V3ItgEyt1Rg4Nb9z/oRRQwMwx2j68FkztwMmGj2eQ709Dlk32TI2cMvf8QNTUOWOJPtG QFUIo0YeAGTp2vKoetwfvwEdjEwsnhsAsZpbMFQll9EaxiyCV5Kry+0Ri93Q92ehVqMuuOlaW EaoJw3CKhR655zCWuF4UdPzD22nurDoXF36yLVBKKYGqagepwrEQ0e9ILT1Jmb++XRaLsKJo4 mzr58Nvr/yCQzaskQe0/FOZkhb4EAr+DW2FDRZ0pyyeYntjTG8mzYuv7aSh7buTq1ucNBO1kD 7XvhtkStuOs0L0aJ/X0P2kBYxai8BsPT7YLNvLj+8RyVuGSooRJSW8afwDCbbVBSgX9IdGAp5 uEfMaSZfiwfDU/5z73Ot3HoMwvFJT3t441LYFnFnDcDDkSi0m0+IDqRMZ5/IoosBcLVS8GKzJ aLZq+WgHQOoipr+ksdeP+iHk7UVXQyiTeaEZY8ZZUBX3cBaC5DCzlKDkH6mR7QLgZ2ki+6fha GHlMxbYJ3RYK0WE5dZ1mxzvqFeM78MbvlJ1J/js0vfxoKj9pSmSvwBP3duQvRgDut6cyRWoKC 95d25M8xrZFjWnewjN6yOpVZetr6Wh4D93ydpSrwP4kg2mEAgEC9eh7xvBkipi2mnvv3mxsrv /YPDao7cOA6uI83SC9EUoakP3UVHTX4Mc/PHIDoOmmYvOQfmxAKV8K/EJY3aax5RcFK7KtACQ cumqH7gkDFlyjncsh17hbBa41uBv8= X-UI-Loop:V01:Zk9T7M4ySWM=:Sn7gaHBZ/sVPNzLLD7thyJmcZOGGg4LgTiNKPBpTlCw= Status: R X-Status: X-Keywords: X-UID: 7358 On 31/03/2014 17:38, Lars Hellstr=F6m wrote: >>>> I'd also suggest the 'sheep and goats' separation of all commands in= to >>>> fully expandable or \protected. >>> >>> Not sure there could only be those two, but I can certainly change so= me >>> \newcommand's into \DeclareRobustCommand's. >> >> There are very few commands that don't seem to fall into one of the tw= o >> categories. (I've perhaps got one set for siunitx, but in a very unusu= al >> use case.) Most commands either: >> >> - Should/can work inside \edef =3D> expandable >> - Don't (assignments, ...) =3D> \protected >=20 > Well, I wonder how that would interact with \harmless_secure_expand:w. Haven't read all of the code: just did an overview. The observation of the team to date, which also seems to match with the ConTeXt experience, is that a division does appear to work. >> Note this is nothing to do with \DeclareRobustCommand, as those are no= t >> engine-robust. >=20 > For the time being, I still support TeX 3. Your decision: you do know e-TeX was finalised 15 years ago ;-) >> A general impression, not least in that you've coded things by hand th= at >> would be done using expl3 kernel functions. The other very obvious one >> is that we don't use toks :-) >=20 > Not at all?! Or just not the likes of \newtoks? At an interface level, no toks at all (there are a few internal special cases). The reasoning is that toks are hard to explain: two types of similar variable (macros and toks), except ... With e-TeX, we can say tha= t: - Anything can be stored in a macro with \edef\foo{\unexpanded{}} - Expansion can always be controlled with \unexpanded\expandafter{\macro} Wrapping that up inside some interfaces, we don't need toks at all. (Bruno uses toks by number for l3regex within a group structure, and of course at a base layer there are some raw things to do with \every... and so on. However, none of this shows up in the interfaces, which all use macro-based storage of tokens.) >>> You mean a token with character code 229 (U+00E5) is more canonical t= han >>> \r{a} as encoding of that character? That's actually close to the way >>> harmless would do it (under the \HighCharsUnicode setting). For >>> typesetting, there is conversely \UnicodeCharUsesChar. >> >> In that area, yes. Thinking is currently as follows: for UTF-8 work, >> there are two engines which can do the job. Supporting non-UTF-8 input >> for chars outside of the 8-bit range is something that 'new' code real= ly >> should avoid. That doesn't negate use of inputenc, etc., for 'real >> world' cases now but does suggest that for new code we might want to >> take a different take. For example, the current thinking is that for >> 'text level' case-changing functions we will support only 'engine >> native' input, which implies that at some stage we'd want to as you sa= y >> do mappings for UTF-8 engines going in the \r{a} =3D> U+00E5 directio= n. >> (At a user level, things like \r{a} for a 'one-off' accent remain usef= ul >> even with a UTF-8 engine.) >=20 > As a data-point here, I should perhaps mention that I have for some > years been using the \r and \" accents even when I write swedish text i= n > LaTeX -- the reason being that I've remapped the =C5=D6=C4 keys to \{} = since > the latter are more frequently needed. And when you don't have a > character conveniently available on the keyboard, it doesn't make that > much difference that UTF-8 can encode it prefecty fine, if you cannot > conveniently type it! As I said, there is still discussion to have in this area and at the user level things like \r{A} make sense. However, that's not the same as saying they should be handled by e.g. case-changing functions, which with a UTF-8 engine can deal with e.g. =C5 readily. -- Joseph Wright