1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
--- wcwidth.c 2007-05-26 18:06:24.000000000 +0800
+++ wcwidth.cc 2014-02-13 18:36:18.668331252 +0800
@@ -59,15 +59,23 @@
* Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
*/
-#include <wchar.h>
+/* This file is modified to work with C++ and present Unicode
+ * characters in uint32_t type.
+ */
+
+#include <system.hh>
+
+namespace ledger {
-struct interval {
- int first;
- int last;
-};
+namespace {
+ struct interval {
+ int first;
+ int last;
+ };
+}
/* auxiliary function for binary search in interval table */
-static int bisearch(wchar_t ucs, const struct interval *table, int max) {
+static int bisearch(boost::uint32_t ucs, const struct interval *table, int max) {
int min = 0;
int mid;
@@ -119,7 +127,7 @@
* in ISO 10646.
*/
-int mk_wcwidth(wchar_t ucs)
+int mk_wcwidth(boost::uint32_t ucs)
{
/* sorted list of non-overlapping intervals of non-spacing characters */
/* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */
@@ -204,7 +212,7 @@
}
-int mk_wcswidth(const wchar_t *pwcs, size_t n)
+int mk_wcswidth(const boost::uint32_t *pwcs, size_t n)
{
int w, width = 0;
@@ -227,7 +235,7 @@
* the traditional terminal character-width behaviour. It is not
* otherwise recommended for general use.
*/
-int mk_wcwidth_cjk(wchar_t ucs)
+int mk_wcwidth_cjk(boost::uint32_t ucs)
{
/* sorted list of non-overlapping intervals of East Asian Ambiguous
* characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */
@@ -295,7 +303,7 @@
}
-int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n)
+int mk_wcswidth_cjk(const boost::uint32_t *pwcs, size_t n)
{
int w, width = 0;
@@ -307,3 +315,5 @@
return width;
}
+
+} // namespace ledger
|