From f23d273a395cbdfd8a1197adc3509ba3dfb4637b Mon Sep 17 00:00:00 2001 From: Florian Pritz Date: Mon, 1 Mar 2010 20:40:50 +0100 Subject: update Signed-off-by: Florian Pritz --- gvim/vim-7.2/7.2.348 | 254 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 254 insertions(+) create mode 100644 gvim/vim-7.2/7.2.348 (limited to 'gvim/vim-7.2/7.2.348') diff --git a/gvim/vim-7.2/7.2.348 b/gvim/vim-7.2/7.2.348 new file mode 100644 index 0000000..5f4ffbd --- /dev/null +++ b/gvim/vim-7.2/7.2.348 @@ -0,0 +1,254 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.348 (after 7.2.330) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.348 (after 7.2.330) +Problem: Unicode double-width characters are not up-to date. +Solution: Produce the double-width table like the others. +Files: runtime/tools/unicode.vim, src/mbyte.c + + +*** ../vim-7.2.347/runtime/tools/unicode.vim 2010-01-12 19:48:57.000000000 +0100 +--- runtime/tools/unicode.vim 2010-01-27 17:57:17.000000000 +0100 +*************** +*** 187,202 **** + wincmd p + endfunc + +! " Build the ambiguous table in a new buffer. + " Uses s:widthprops and s:dataprops. +! func! BuildAmbiguousTable() + 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 + " Find this char in the data table. + while 1 + let dn = ('0x' . s:dataprops[dataidx][0]) + 0 +--- 187,213 ---- + wincmd p + endfunc + +! " Build the double width or ambiguous width table in a new buffer. + " Uses s:widthprops and s:dataprops. +! 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: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,231 **** + endif + let dataidx += 1 + endwhile +! if dn != n + echoerr "Cannot find character " . n . " in data table" + endif + " Only use the char when it's not a composing char. + let dp = s:dataprops[dataidx] +! if 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 + endif + endif + endfor +--- 216,238 ---- + endif + let dataidx += 1 + endwhile +! 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 n_last > n || (dp[2] != 'Mn' && dp[2] != 'Mc' && dp[2] != 'Me') + if start >= 0 && end + 1 == n + " continue with same range. + else + if start >= 0 + " produce previous range + call add(ranges, printf("\t{0x%04x, 0x%04x},", start, end)) + endif + let start = n + endif ++ let end = n_last + endif + endif + endfor +*************** +*** 235,242 **** + + " New buffer to put the result in. + new +! file ambiguous +! call setline(1, " static struct interval ambiguous[] =") + call setline(2, " {") + call append('$', ranges) + call setline('$', getline('$')[:-2]) " remove last comma +--- 242,249 ---- + + " New buffer to put the result in. + new +! 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,280 **** + " Parse each line, create a list of lists. + call ParseWidthProps() + +! " Build the ambiguous table. +! call BuildAmbiguousTable() +--- 283,290 ---- + " Parse each line, create a list of lists. + call ParseWidthProps() + +! " Build the double width table. +! call BuildWidthTable('[WF]', 'doublewidth') +! +! " Build the ambiguous width table. +! call BuildWidthTable('A', 'ambiguous') +*** ../vim-7.2.347/src/mbyte.c 2010-01-12 19:48:57.000000000 +0100 +--- src/mbyte.c 2010-01-27 18:06:35.000000000 +0100 +*************** +*** 1200,1205 **** +--- 1200,1248 ---- + 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,1422 **** + #else + if (!utf_printable(c)) + return 6; /* unprintable, displays */ +! 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))) + return 2; + #endif + } +--- 1446,1452 ---- + #else + if (!utf_printable(c)) + return 6; /* unprintable, displays */ +! if (intable(doublewidth, sizeof(doublewidth), c)) + return 2; + #endif + } +*** ../vim-7.2.347/src/version.c 2010-01-27 17:31:38.000000000 +0100 +--- src/version.c 2010-01-27 18:25:50.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 348, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +157. You fum through a magazine, you first check to see if it has a web + address. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// -- cgit v1.2.3-24-g4f1b