六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 112|回复: 0

视觉长度截断函数

[复制链接]

升级  2.8%

158

主题

158

主题

158

主题

进士

Rank: 4

积分
514
 楼主| 发表于 2013-1-27 04:45:36 | 显示全部楼层 |阅读模式
#长度的来源见附件中的html

_visable_width=0, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 24,
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
12, 12, 16, 28, 28, 44, 32, 8, 16, 16, 20, 28, 12, 16, 12, 12, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 12, 12, 28, 28, 28, 28, 48, 28, 32,
36, 36, 32, 28, 36, 36, 12, 24, 32, 28, 36, 36, 36, 32, 36, 36, 32,
28, 36, 28, 44, 28, 28, 28, 12, 12, 12, 20, 28, 16, 28, 28, 24, 28,
28, 12, 28, 28, 12, 12, 24, 12, 44, 28, 28, 28, 28, 16, 28, 12, 28,
20, 36, 20, 20, 20, 16, 12, 16, 28, 24
#中文长48

def visable_length(word):
   length=len(word)
   width=0
   i=0
   while i<length:
       c=word[i]
       if c>"\xE0" and c<="\xEF":
           i+=3
           width+=48
       else:
           if c<"\xC0":
               i+=1
               width+=_visable_width[ord(c)]
           else:
               width+=48
               if c<="\xDF":i+=2
               elif c<="\xF7":i+=4
               elif c<="\xFB":i+=5
               else:i+=6
   return width

def visable_cut(word,limit,etc="..."):
   i=0
   length=len(word)
   if length<=limit:return word
   limit = limit*48
   width = 0
   while i<length:
       c=word[i]
       if c>"\xE0" and c<="\xEF":
           offset=3
           width+=48
       else:
           if c<"\xC0":
               offset=1
               width+=_visable_width[ord(c)]
           else:
               width+=48
               if c<="\xDF":offset=2
               elif c<="\xF7":offset=4
               elif c<="\xFB":offset=5
               else:offset=6
       if width>limit:
           etc_length=(48+visable_length(etc))/48
           return word[:i-etc_length]+etc
       else:
           i+=offset
   return word
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表