diff --git a/runtime/tools/unicode.vim b/runtime/tools/unicode.vim
index f33df42..f3c58ed 100644
--- a/runtime/tools/unicode.vim
+++ b/runtime/tools/unicode.vim
@@ -187,16 +187,27 @@
   wincmd p
 endfunc
 
-" Build the ambiguous table in a new buffer.
+" Build the double width or ambiguous width table in a new buffer.
 " Uses s:widthprops and s:dataprops.
-func! BuildAmbiguousTable()
+func! BuildWidthTable(pattern, tableName)
   let start = -1
   let end = -1
   let ranges = []
   let dataidx = 0
   for p in s:widthprops
-    if p[1][0] == 'A'
-      let n = ('0x' . p[0]) + 0
+    if p[1][0] =~ a:pattern
+      if p[0] =~ '\.\.'
+	" It is a range.  we don't check for composing char then.
+	let rng = split(p[0], '\.\.')
+	if len(rng) != 2
+	  echoerr "Cannot parse range: '" . p[0] . "' in width table"
+	endif
+	let n = ('0x' . rng[0]) + 0
+	let n_last =  ('0x' . rng[1]) + 0
+      else
+	let n = ('0x' . p[0]) + 0
+	let n_last = n
+      endif
       " Find this char in the data table.
       while 1
 	let dn = ('0x' . s:dataprops[dataidx][0]) + 0
@@ -205,27 +216,23 @@
 	endif
 	let dataidx += 1
       endwhile
-      if dn != n
+      if dn != n && n_last == n
 	echoerr "Cannot find character " . n . " in data table"
       endif
       " Only use the char when it's not a composing char.
+      " But use all chars from a range.
       let dp = s:dataprops[dataidx]
-      if dp[2] != 'Mn' && dp[2] != 'Mc' && dp[2] != 'Me'
+      if n_last > n || (dp[2] != 'Mn' && dp[2] != 'Mc' && dp[2] != 'Me')
 	if start >= 0 && end + 1 == n
 	  " continue with same range.
-	  let end = n
 	else
 	  if start >= 0
 	    " produce previous range
 	    call add(ranges, printf("\t{0x%04x, 0x%04x},", start, end))
 	  endif
 	  let start = n
-	  if p[0] =~ '\.\.'
-	    let end = ('0x' . substitute(p[0], '.*\.\.', '', '')) + 0
-	  else
-	    let end = n
-	  endif
 	endif
+	let end = n_last
       endif
     endif
   endfor
@@ -235,8 +242,8 @@
 
   " New buffer to put the result in.
   new
-  file ambiguous
-  call setline(1, "    static struct interval ambiguous[] =")
+  exe "file " . a:tableName
+  call setline(1, "    static struct interval " . a:tableName . "[] =")
   call setline(2, "    {")
   call append('$', ranges)
   call setline('$', getline('$')[:-2])  " remove last comma
@@ -276,5 +283,8 @@
 " Parse each line, create a list of lists.
 call ParseWidthProps()
 
-" Build the ambiguous table.
-call BuildAmbiguousTable()
+" Build the double width table.
+call BuildWidthTable('[WF]', 'doublewidth')
+
+" Build the ambiguous width table.
+call BuildWidthTable('A', 'ambiguous')
diff --git a/src/mbyte.c b/src/mbyte.c
index b5ea292..7a3a27e 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -1200,6 +1200,49 @@
 utf_char2cells(c)
     int		c;
 {
+    /* Sorted list of non-overlapping intervals of East Asian double width
+     * characters, generated with ../runtime/tools/unicode.vim. */
+    static struct interval doublewidth[] =
+    {
+	{0x1100, 0x115f},
+	{0x11a3, 0x11a7},
+	{0x11fa, 0x11ff},
+	{0x2329, 0x232a},
+	{0x2e80, 0x2e99},
+	{0x2e9b, 0x2ef3},
+	{0x2f00, 0x2fd5},
+	{0x2ff0, 0x2ffb},
+	{0x3000, 0x3029},
+	{0x3030, 0x303e},
+	{0x3041, 0x3096},
+	{0x309b, 0x30ff},
+	{0x3105, 0x312d},
+	{0x3131, 0x318e},
+	{0x3190, 0x31b7},
+	{0x31c0, 0x31e3},
+	{0x31f0, 0x321e},
+	{0x3220, 0x3247},
+	{0x3250, 0x32fe},
+	{0x3300, 0x4dbf},
+	{0x4e00, 0xa48c},
+	{0xa490, 0xa4c6},
+	{0xa960, 0xa97c},
+	{0xac00, 0xd7a3},
+	{0xd7b0, 0xd7c6},
+	{0xd7cb, 0xd7fb},
+	{0xf900, 0xfaff},
+	{0xfe10, 0xfe19},
+	{0xfe30, 0xfe52},
+	{0xfe54, 0xfe66},
+	{0xfe68, 0xfe6b},
+	{0xff01, 0xff60},
+	{0xffe0, 0xffe6},
+	{0x1f200, 0x1f200},
+	{0x1f210, 0x1f231},
+	{0x1f240, 0x1f248},
+	{0x20000, 0x2fffd},
+	{0x30000, 0x3fffd}
+    };
     /* Sorted list of non-overlapping intervals of East Asian Ambiguous
      * characters, generated with ../runtime/tools/unicode.vim. */
     static struct interval ambiguous[] =
@@ -1403,20 +1446,7 @@
 #else
 	if (!utf_printable(c))
 	    return 6;		/* unprintable, displays <xxxx> */
-	if (c >= 0x1100
-	    && (c <= 0x115f			/* Hangul Jamo */
-		|| c == 0x2329
-		|| c == 0x232a
-		|| (c >= 0x2e80 && c <= 0xa4cf
-		    && c != 0x303f)		/* CJK ... Yi */
-		|| (c >= 0xac00 && c <= 0xd7a3)	/* Hangul Syllables */
-		|| (c >= 0xf900 && c <= 0xfaff)	/* CJK Compatibility
-						   Ideographs */
-		|| (c >= 0xfe30 && c <= 0xfe6f)	/* CJK Compatibility Forms */
-		|| (c >= 0xff00 && c <= 0xff60)	/* Fullwidth Forms */
-		|| (c >= 0xffe0 && c <= 0xffe6)
-		|| (c >= 0x20000 && c <= 0x2fffd)
-		|| (c >= 0x30000 && c <= 0x3fffd)))
+	if (intable(doublewidth, sizeof(doublewidth), c))
 	    return 2;
 #endif
     }
diff --git a/src/version.c b/src/version.c
index 8b9013f..2f48ecb 100644
--- a/src/version.c
+++ b/src/version.c
@@ -682,6 +682,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    348,
+/**/
     347,
 /**/
     346,
