grub中的import_unicode.py 分析之一

在autogen.sh中会执行下面的python脚本
echo "Importing unicode..."
${PYTHON} util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c
其中这个util/import_unicode.py 的输入参数有三个,因此是分为3部分来解析的。但是第一部分和第三步的code 类似,就不单独分析了
第一部分:
if len (sys.argv) < 3:
#判断输入的参数是否小于4个,从0开始计算,如果小于四个则退出
    print ("Usage: %s SOURCE DESTINATION" % sys.argv[0])
    exit (0)
#调用exit(0)退出
infile = open (sys.argv[3], "r")
#打开unicode/ArabicShaping.txt文件
joining = {}
#定义字典
for line in infile:
    line = re.sub ("#.*$", "", line) #删除ArabicShaping.txt文件中所有注释行,也就是以#开始,.表示通配符,$表示这行结尾.
    line = line.replace ("\n", "") #用空格替换回车
    line = line.replace (" ", "") #将两个空格替换成1个空格
    if len (line) == 0 or line[0] == '\n':#如果此时line的长度是0或者是换行,则进行下一行处理
        continue
    sp = line.split (";") #以;分割
#原本0600; ARABIC NUMBER SIGN; U; No_Joining_Group 被分割成['0600', 'ARABICNUMBERSIGN', 'U', 'No_Joining_Group']
    curcode = int (sp[0], 16) #可知sp[0] =='0600',将其转成16进制的整数,转完胡curcode = 0x0600
    if sp[2] == "U":
        joining[curcode] = "NONJOINING"
    elif sp[2] == "L":
        joining[curcode] = "LEFT"
    elif sp[2] == "R":
        joining[curcode] = "RIGHT"
    elif sp[2] == "D":
        joining[curcode] = "DUAL"
    elif sp[2] == "C":
        joining[curcode] = "CAUSING"
    else:
        print ("Unknown joining type '%s'" % sp[2])
        exit (1)
#给joining数组赋值
infile.close ()#关掉unicode/ArabicShaping.txt 文件。最终joining的内容如下:
{1536: 'NONJOINING', 1537: 'NONJOINING', 1538: 'NONJOINING', 1539: 'NONJOINING', 1544: 'NONJOINING', 1547: 'NONJOINING', 8204: 'NONJOINING', 8205: 'CAUSING', 1568: 'DUAL', 1569: 'NONJOINING', 1570: 'RIGHT', 1571: 'RIGHT', 1572: 'RIGHT', 1573: 'RIGHT',  'RIGHT', 1914: 'DUAL', 1915: 'DUAL', 1916: 'DUAL', 1917: 'DUAL', 1918: 'DUAL', 1919: 'DUAL', 1994: 'DUAL', 1995: 'DUAL', 1996: 'DUAL', 1997: 'DUAL', 1998: 'DUAL', 1999: 'DUAL', 2000: 'DUAL', 2001: 'DUAL', 2002: 'DUAL', 2003: 'DUAL', 2004: 'DUAL', 2005: 'DUAL', 2006: 'DUAL', 2007: 'DUAL', 2008: 'DUAL', 2009: 'DUAL', 2010: 'DUAL', 2011: 'DUAL', 2012: 'DUAL', 2013: 'DUAL', 2014: 'DUAL', 2015: 'DUAL', 2016: 'DUAL', 2017: 'DUAL', 2018: 'DUAL', 2019: 'DUAL', 2020: 'DUAL', 2021: 'DUAL', 2022: 'DUAL', 2023: 'DUAL', 2024: 'DUAL', 2025: 'DUAL', 2026: 'DUAL', 2042: 'CAUSING'}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值