Re: Implement customizable number formatter

Daniel Dekany <[email protected]> Tue, 1 Sep 2015 02:25:08 +0200
Newsgroups gmane.comp.web.freemarker.devel
Message-ID <[email protected]>
U28sIHdlIGhhdmUgdGhlIGN1c3RvbSBudW1iZXIgZm9ybWF0cyBzdHVmZiwgYW5kIEkgaG9wZSBp
dCdzIHZlcnkKY2xvc2UgdG8gdGhlIGZpbmFsIGZvcm0uIFlvdSBjYW4gcmVhZCBhYm91dCBpdCBo
ZXJlLCB1bmRlciAiQ2hhbmdlcyBvbgp0aGUgSmF2YSBzaWRlIiBtb3N0bHk6Cmh0dHA6Ly9mcmVl
bWFya2VyLm9yZy9idWlsZHMvMi4zLjI0LW5pZ2h0bHkvZG9jdW1lbnRhdGlvbi9faHRtbC92ZXJz
aW9uc18yXzNfMjQuaHRtbAoKVGhlbiBzZWUgdGhlIEpVbml0IHRlc3RzIGluIHRoZSByZXBvIGhh
cyBzb21lIGV4YW1wbGVzOgpodHRwczovL2dpdGh1Yi5jb20vZnJlZW1hcmtlci9mcmVlbWFya2Vy
L2Jsb2IvMi4zLWdhZS9zcmMvdGVzdC9qYXZhL2ZyZWVtYXJrZXIvY29yZS9OdW1iZXJGb3JtYXRU
ZXN0LmphdmEKCkJpbmFyeToKaHR0cDovL2ZyZWVtYXJrZXIub3JnL2J1aWxkcy8yLjMuMjQtbmln
aHRseS9mcmVlbWFya2VyLmphcgoKTGV0IG1lIGtub3cgd2hhdCBkbyB5b3UgdGhpbmsuCgotLSAK
VGhhbmtzLAogRGFuaWVsIERla2FueQoKCkZyaWRheSwgQXVndXN0IDIxLCAyMDE1LCAzOjE5OjM2
IFBNLCBFcm5zdCBQbMO8c3Mgd3JvdGU6Cgo+IEhlbGxvIERhbmllbAo+Cj4gTWFueSB0aGFua3Mg
Zm9yIHlvdXIgZXh0ZW5zaXZlIHJlc3BvbnNlIQo+Cj4gSSBkaWRuJ3QgYXNrIHRvIHdvcmsgYWhh
ZWFkLiBJIHdhbnRlZCB0byBjaGVjayB3aGV0aGVyIEkgY291bGQKPiBpbXBsZW1lbnQgdGhlIGZl
YXRydWUgYW5kIGNyZWF0ZSBhIHB1bGwgcmVxdWVzdCBpbiByZWFzb25hYmxlIHRpbWUgIAo+Cj4g
QWN0dWFsbHkgSSdtIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBkaWZmZXJlbnQuIFdoYXQgSSBuZWVk
IGlzIGEgd2F5Cj4gdG8gbWFrZSBzdXJlICpldmVyeSogQmlnRGVjaW1hbCAob3Igd2hhdGhldmVy
IHR5cGUgSSdtIGFmdGVyKSBpcwo+IHRyYW5zZm9ybWVkIHRvIGEgU3RyaW5nIGJ5IHVzZXIgZGVm
aW5lZCBjb2RlLiBTaW5jZSB0aGUgZm9ybWF0dGluZwo+IGRlcGVuZHMgb24gdGhlIHZhbHVlIG9m
IHRoZSBCaWdEZWNpbWFsLCBJIGNhbm5vdCB1c2UgYSBzdGF0aWMgcGF0dGVybi4KPgo+IEFzIG9m
IG5vdyBJIHJlZ2lzdGVyZWQgYSAiZm9ybWF0QmlnRGVjaW1hbCgpIiBmdW5jdGlvbiB3aGljaCBk
b2VzCj4gdGhpcy4gQnV0IGV2ZXJ5IG5vdyBhbmQgdGhlbiBhIGRldmVsb3BlciBmb3JnZXRzIHRv
IHVzZSBpdCBhbmQgd2UgZW5kIHVwIHdpdGggd3Jvbmcgb3V0cHV0Lgo+Cj4gSSB0aGluayB3cml0
aW5nCj4KPiAke3g/c3RyaW5nKCJAZm9ybWF0QmlnRGVjaW1hbCIpfQo+Cj4gaW5zdGVhZCBvZgo+
Cj4gZm9ybWF0QmlnRGVjaW1hbCgke3ZhbHVlfSkKPgo+IGRvZXNuJ3QgYnJpbmcgYW55IGJlbmVm
aXQgaW4gbXkgc2l0dWF0aW9uLgo+Cj4gUmVnYXJkcwo+IEVybnN0Cj4KPgo+Cj4gMjAxNS0wOC0y
MSAxNDo1NSBHTVQrMDI6MDAgRGFuaWVsIERla2FueSA8ZGRla2FueUBmcmVlbWFpbC5odT46Cj4g
SSBoYXZlbid0IHN0YXJ0ZWQgd29ya2luZyBvbiB0aGF0IHlldC4gSSAqaG9wZSogSSBjYW4gc3Rh
cnQgaXQKPiB0b21vcnJvdyBvciBzby4gU28gSSdtIG5vdCB5ZXQgMTAwJSBzdXJlIGhvdyBpdCB3
aWxsIGxvb2suIEkgb25seSBrbm93Cj4gZm9yIHN1cmUgdGhhdCBpdCBtdXN0IGJlIGZpbmlzaGVk
IGR1cmluZyB0aGUgbmV4dCB3ZWVrLiAoOiBTbyBJCj4gcmVjb21tZW5kIHlvdSB0byBqdXN0IHF1
aWNrbHkgc2hvdmUgaW4geW91ciBOdW1iZXJGb3JtYXQgY2xhc3Mgd2hlcmUKPiBGcmVlTWFya2Vy
IGNyZWF0ZXMgdGhlIERlY2ltYWxGb3JtYXQtcywgYW5kIHdhaXQgd2hhdCB3aWxsIGhhcHBlbiBu
ZXh0Cj4gd2Vlay4uLiBZb3UgY2FuJ3QgcmVhbGx5IHdvcmsgYWhlYWQuCj4KPiBUbyBhbnN3ZXIg
eW91ciBxdWVzdGlvbiwgRW52aXJvbm1lbi5mb3JtYXROdW1iZXIoTnVtYmVyKSBpcyBhbmQKPiBy
ZW1haW5zIGEgcG9pbnQgd2hlcmUgbnVtYmVyIGZvcm1hdHRpbmcgd2l0aCB0aGUgY3VycmVudCBm
b3JtYXQgZ29lcwo+IHRocm91Z2gsIG9mIGNvdXJzZS4gVGhlIGludGVyZXN0aW5nIHRoaW5nIGlz
IHRob3VnaCBpZiBob3cgd2lsbCBudW1iZXIKPiBmb3JtYXR0ZXJzIGJlIHJlcHJlc2VudGVkIChu
b3QgamF2YS50ZXh0Lk51bWJlckZvcm1hdCBhbnltb3JlIFsqXSksCj4gYW5kIHdoYXQgb2JqZWN0
IHdpbGwgY3JlYXRlIHRoZW0uIFRoZSAoaW5oZXJpdGVkKSBsb2dpYyBvZiBGcmVlTWFya2VyCj4g
aXMgdGhhdCB5b3Ugc3BlY2lmeSBhICpzdHJpbmcqIGFzIHRoZSAibnVtYmVyX2Zvcm1hdCIgc2V0
dGluZyAod2hpY2gKPiBjYW4gZXZlbiBiZSBjaGFuZ2VkIGluc2lkZSB0aGUgdGVtcGxhdGUsIGlu
IHJ1bnRpbWUpLCBhbmQgdGhlbgo+IGludGVybmFsbHkgdGhhdCBiZWNvbWVzIHRvIGEgY2FjaGVk
KCEpIERlY2ltYWxGb3JtYXQgb2JqZWN0IGZvciB0aGUKPiBjdXJyZW50IExvY2FsZS4gU28gY2Vy
dGFpbmx5LCB0aGVyZSB3aWxsIGJlIHNvbWUgc2ltcGxlIGludGVyZmFjZSBsaWtlCj4gZnJlZW1h
cmtlci5jb3JlLk51bWJlckZvcm1hdHRlciwgYW5kIHRoZW4geW91IHdpbGwgbmVlZCB0byByZWdp
c3RlciBhCj4gZnJlZW1hcmtlci5jb3JlLk51bWJlckZvcm1hdHRlckZhY3Rvcnkgd2l0aCBhIHVu
aXF1ZSBuYW1lIChsZXQncyBzYXkKPiAicHJpY2UiKSwgd2hpY2ggdGhlbiB5b3UgY2FuIHJlZmVy
IHRvIGxpa2UKPiBjZmcuc2V0TnVtYmVyRm9ybWF0KCJAcHJpY2UiKSwgPCNzZXR0aW5nIG51bWJl
ckZvcm1hdD0iQHByaWNlIj4sCj4gJHt4P3N0cmluZygiQHByaWNlIil9LCBldGMuIEFuZCBzbyB0
aGVyZSwgdGhlIGZhY3RvcnkgaGFzIGEgY2hhbmNlIHRvCj4gY2FjaGUuIEZ1cnRoZXJtb3JlLCBh
ZnRlciB0aGUgbnVtYmVyIGZvcm1hdCBzdHJpbmcgd2FzIGRlbGVnYXRlZCB0bwo+IHRoZSBOdW1i
ZXJGb3JtYXRGYWN0b3J5IGJhc2VkIG9uIHRoZSBuYW1lIGFmdGVyIHRoZSAiQCIsIGl0IHdpbGwg
Z2V0Cj4gdGhlIGZvcm1hdCBzdHJpbmcgZm9yIHBhcnNpbmcsIHNvIHRoYXQgc3R1ZmYgbGlrZSAi
QHByaWNlIDAuMDAiIGNhbiBiZQo+IGltcGxlbWVudGVkLiBTbyB0aG9zZSBhcmUgbXkgaW5pdGlh
bCB0aG91Z2h0cy4gKEkgd2lsbCByZXZpZXcgaG93IGRhdGUKPiBmb3JtYXR0aW5nIHdvcmtzLCB3
aGljaCBoYXMgYSBzaW1pbGFybHkgZmFuY3kgYXJjaGl0ZWN0dXJlIGZvciBhCj4gd2hpbGUsIG9u
bHkgdGhhdCdzIG5vdCBhIHB1YmxpYyBBUEkuLi4geWV0LikKPgo+ICo6IFdoeSBub3QgTnVtYmVy
Rm9ybWF0PyBUd28gcmVhc29uczoKPgo+ICAgIChhKSBPbmUgaW1wb3J0YW50IGdvYWwgb2YgcGx1
Z2dhYmxlIG51bWJlciBmb3JtYXR0ZXJzIHdpbGwgYmUKPiAgICAgICAgYXV0b21hdGljIHVuaXQg
cHJpbnRpbmcuIEluIHNvbWUgYXBwcywgdGhlIHRlbXBsYXRlIGF1dGhvcnMKPiAgICAgICAgYXJl
bid0IHN1cHBvc2VkIHRvIHByaW50IHRoZSB1bml0cyBtYW51YWxseS4gTGlrZSAke3ByaWNlfSwK
PiAgICAgICAgd2hlcmUgcHJpY2UgaXMgYSBudW1iZXIsIHNob3VsZCBhdXRvbWF0aWNhbGx5IHBy
aW50ICIxMDAwIEVVUiIKPiAgICAgICAgb3Igc3VjaC4gVGhhdCByZXF1aXJlcyB0aGUgZm9ybWF0
dGVyIHRvIGdldCB0aGUKPiAgICAgICAgVGVtcGxhdGVOdW1iZXJNb2RlbCBpbnN0ZWFkIG9mIGp1
c3QgdGhlIE51bWJlciwgYXMgaXQncyB0aGUKPiAgICAgICAgVGVtcGxhdGVOdW1iZXJNb2RlbCB0
aGF0IGNhcnJpZXMgdGhlIHJlcXVpcmVkIG1ldGEtaW5mb3JtYXRpb24uCj4KPiAgICAoYikgTnVt
YmVyIGZvcm1hdCBpcyB3YXkgdG9vIGJsb2F0ZWQgaWYgdXNlcnMgbWVhbnQgdG8gaW1wbGVtZW50
IGl0Cj4gICAgICAgIGZvciBzb21lIGFkLWhvYyBudW1iZXIgZm9ybWF0Lgo+Cj4gLS0KPiBUaGFu
a3MsCj4gIERhbmllbCBEZWthbnkKPgo+Cj4gRnJpZGF5LCBBdWd1c3QgMjEsIDIwMTUsIDExOjIw
OjEyIEFNLCBFcm5zdCBQbMO8c3Mgd3JvdGU6Cj4KPj4gSGVsbG8KPj4KPj4gRnJvbQo+PiBodHRw
Oi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzMyMTExMjM0L2hvdy10by1pbXBsZW1lbnQt
bG9naWMtZm9yLWJpZ2RlY2ltYWwtcmVuZGVyaW5nLWluLWZyZWVtYXJrZXIKPj4gSSBsZWFybmRl
ZCwgdGhhdCBzb21lIGtpbmQgb2YgcGx1Z2FibGUgbnVtYmVyIGZvcm1hdHRlciBzaG91bGQgY29t
ZSBzb29uLgo+Pgo+PiBJcyB0aGVyZSBhbHJlZGF5IGFueSBjb2RlIG9uIGdpdGh1YiBmb3IgdGhp
cz8KPj4KPj4gSWYgbm90LCB3aGF0J3MgdGhlIGdlbmVyYWwgYXByb2FjaCBhZGQgdGhpcyBmdW5j
dGlvbmFsaXR5PyBBZnRlcgo+PiBoYXZpbmcgYSBsb29rIGF0IHRoZSBzb3VyY2VzLCBJIHRoaW5r
IEkgY291bGQgYnVpbHQgdGhpcyBpbnRvCj4+IEVudmlyb25tZW4uZm9ybWF0TnVtYmVyKE51bWJl
ciBudW1iZXIpLiBJcyB0aGlzIHRoZSBpbnRlbmRlZCB3YXkgdG8gaW1wbGVtZW50IHRoaXM/Cj4+
Cj4+IFJlZ2FyZHMKPj4gRXJuc3QKPj4KPgo+CgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVNYXJrZXItZGV2
ZWwgbWFpbGluZyBsaXN0CkZyZWVNYXJrZXItZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Cmh0
dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL2ZyZWVtYXJrZXItZGV2
ZWwK