当前位置: 首页>>代码示例>>Python>>正文


Python unicodedata.bidirectional函数代码示例

本文整理汇总了Python中unicodedata.bidirectional函数的典型用法代码示例。如果您正苦于以下问题:Python bidirectional函数的具体用法?Python bidirectional怎么用?Python bidirectional使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了bidirectional函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: check_bidi

def check_bidi(label, check_ltr=False):
    # Bidi rules should only be applied if string contains RTL characters
    bidi_label = False
    for (idx, cp) in enumerate(label, 1):
        direction = unicodedata.bidirectional(cp)
        if direction == '':
            # String likely comes from a newer version of Unicode
            raise IDNABidiError('Unknown directionality in label {0} at position {1}'.format(repr(label), idx))
        if direction in ['R', 'AL', 'AN']:
            bidi_label = True
            break
    if not bidi_label and not check_ltr:
        return True

    # Bidi rule 1
    direction = unicodedata.bidirectional(label[0])
    if direction in ['R', 'AL']:
        rtl = True
    elif direction == 'L':
        rtl = False
    else:
        raise IDNABidiError('First codepoint in label {0} must be directionality L, R or AL'.format(repr(label)))

    valid_ending = False
    number_type = False
    for (idx, cp) in enumerate(label, 1):
        direction = unicodedata.bidirectional(cp)

        if rtl:
            # Bidi rule 2
            if not direction in ['R', 'AL', 'AN', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']:
                raise IDNABidiError(
                    'Invalid direction for codepoint at position {0} in a right-to-left label'.format(idx))
            # Bidi rule 3
            if direction in ['R', 'AL', 'EN', 'AN']:
                valid_ending = True
            elif direction != 'NSM':
                valid_ending = False
            # Bidi rule 4
            if direction in ['AN', 'EN']:
                if not number_type:
                    number_type = direction
                else:
                    if number_type != direction:
                        raise IDNABidiError('Can not mix numeral types in a right-to-left label')
        else:
            # Bidi rule 5
            if not direction in ['L', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']:
                raise IDNABidiError(
                    'Invalid direction for codepoint at position {0} in a left-to-right label'.format(idx))
            # Bidi rule 6
            if direction in ['L', 'EN']:
                valid_ending = True
            elif direction != 'NSM':
                valid_ending = False

    if not valid_ending:
        raise IDNABidiError('Label ends with illegal codepoint directionality')

    return True
开发者ID:qwer1234yy,项目名称:SMART,代码行数:60,代码来源:core.py

示例2: _rtl

def _rtl(text, default=False):
    if not text:
        return default
    first_character = text[0]
    if bidirectional(first_character) in ['RLE', 'RLO', 'R', 'AL']:
        return True
    elif bidirectional(first_character) in ['LRE', 'LRO', 'L']:
        return False
    elif len(text)>1:
        return _rtl(text[1:])
    return default
开发者ID:bijanebrahimi,项目名称:boogi,代码行数:11,代码来源:html.py

示例3: lookup

 def lookup(self):
     # look up all the external references we need.
     if self.uniNumber is None:
         return
     try:
         self.uniLetter = unicodeToChar(self.uniNumber)
     except:
         # print("GlyphName value error for %04X" % self.uniNumber)
         return
     if self.uniNumber in mathUniNumbers:
         self.isMath = True
     try:
         self.uniName = unicodelist.get(self.uniNumber)
         if self.uniName is None:
             self.uniNameProcessed = ""
         else:
             self.uniNameProcessed = self.uniName
         # NOTE: this is still a dependency on the unicodedata module.
         # Would be nice to extract this data directly from the unicode data
         # but the algotirhm is ot trivial..
         self.bidiType = unicodedata.bidirectional(self.uniLetter)
     except ValueError:
         self.uniName = None
         self.uniNameProcessed = ""
         self.uniLetter = None
         self.bidiType = None
     except:
         import traceback
         traceback.print_exc()
     self.uniRangeName = getRangeName(self.uniNumber)
开发者ID:LettError,项目名称:glyphNameFormatter,代码行数:30,代码来源:__init__.py

示例4: _character_direction

def _character_direction(ch):
    ch_bidi = bidirectional(ch)
    if ch_bidi in ['L', 'LRE', 'LRO']:
        return 'LTR'
    if ch_bidi in ['R', 'RLE', 'RLO', 'AL']:
        return 'RTL'
    return None
开发者ID:bijanebrahimi,项目名称:boogi,代码行数:7,代码来源:html.py

示例5: find_bidi

    def find_bidi(self, el):
        """Get directionality from element text."""

        for node in self.get_children(el, tags=False):

            # Analyze child text nodes
            if self.is_tag(node):

                # Avoid analyzing certain elements specified in the specification.
                direction = DIR_MAP.get(util.lower(self.get_attribute_by_name(node, 'dir', '')), None)
                if (
                    self.get_tag(node) in ('bdi', 'script', 'style', 'textarea') or
                    direction is not None
                ):
                    continue  # pragma: no cover

                # Check directionality of this node's text
                value = self.find_bidi(node)
                if value is not None:
                    return value

                # Direction could not be determined
                continue  # pragma: no cover

            # Skip `doctype` comments, etc.
            if self.is_special_string(node):
                continue

            # Analyze text nodes for directionality.
            for c in node:
                bidi = unicodedata.bidirectional(c)
                if bidi in ('AL', 'R', 'L'):
                    return ct.SEL_DIR_LTR if bidi == 'L' else ct.SEL_DIR_RTL
        return None
开发者ID:max00xam,项目名称:service.maxxam.teamwatch,代码行数:34,代码来源:css_match.py

示例6: _check_true_dir

    def _check_true_dir(self, text):
        is_rtl = False
        is_ltr = False
        quoted_text = False

        last_inline_html_char_pos = text.rfind(">")
        if last_inline_html_char_pos > -1:
            it_here = text[last_inline_html_char_pos+1:]
        else:
            it_here = text

        for ch in it_here:
            res = UD.bidirectional(ch)
            if ch == '"':
                quoted_text = not quoted_text
            elif not quoted_text and res in {'R', 'AL'}:
                is_rtl = True
            elif not quoted_text and res == 'L':
                is_ltr = True

        #print(text, it_here, is_rtl, is_ltr)

        if is_rtl:
            return 'rtl'
        elif is_ltr:
            return 'ltr'
        else:
            return 'auto'
开发者ID:OSUser,项目名称:mikidown,代码行数:28,代码来源:mdx_autodir.py

示例7: rtlString

def rtlString(source, lang):
    if lang and lang[0:2] in {"ar","he"}:
        line = []
        lineInsertion = 0
        words = []
        rtl = True
        for c in source:
            bidi = unicodedata.bidirectional(c)
            if rtl:
                if bidi == 'L':
                    if words:
                        line.insert(lineInsertion, ''.join(words))
                        words = []
                    rtl = False
                elif bidi in ('R', 'NSM', 'AN'):
                    pass
                else:
                    if words:
                        line.insert(lineInsertion, ''.join(words))
                        words = []
                    line.insert(lineInsertion, c)
                    continue
            else:
                if bidi == 'R' or bidi == 'AN':
                    if words:
                        line.append(''.join(words))
                        words = []
                    rtl = True
            words.append(c)
        if words:
            if rtl:
                line.insert(0, ''.join(words))
        return ''.join(line)
    else:
        return source
开发者ID:Bourne-Law,项目名称:Arelle,代码行数:35,代码来源:Locale.py

示例8: lookup

 def lookup(self):
     # look up all the external references we need.
     if self.uniNumber is None:
         return
     try:
         self.uniLetter = unicodeToChar(self.uniNumber)
     except:
         print("GlyphName valueerror for %04X" % self.uniNumber)
         return
     if self.uniNumber in mathUniNumbers:
         self.isMath = True
     try:
         # self.uniName = unicodedata.name(self.uniLetter)
         self.uniName = unicodelist.get(self.uniNumber)
         if self.uniName is None:
             self.uniNameProcessed = ""
         else:
             self.uniNameProcessed = self.uniName
         self.bidiType = unicodedata.bidirectional(self.uniLetter)
     except ValueError:
         self.uniName = None
         self.uniNameProcessed = ""
         self.uniLetter = None
         self.bidiType = None
     self.uniRangeName = getRangeName(self.uniNumber)
开发者ID:benkiel,项目名称:glyphNameFormatter,代码行数:25,代码来源:__init__.py

示例9: info

    def info(self, char):
        cat = unicodedata.category(char)
        if cat == 'Cn':
            raise UnassignedCharacter

        catname = self.categories[cat]
        bidi = self.bidis[unicodedata.bidirectional(char)]
        name = unicodedata.name(char, 'an unnamed character').decode('ascii')

        if cat[0] == 'C' or cat in ('Zp', 'Zl'):
            example = u''
        elif cat[0] == 'M' and cat[1] != 'c':
            example = u'\N{DOTTED CIRCLE}' + char
        else:
            example = char

        haninfo = u''
        if 'CJK' in name and 'IDEOGRAPH' in name:
            unihan = Unihan(char)
            haninfo = unicode(unihan)
            if haninfo:
                haninfo = u'. ' + haninfo + u'.'

        return {'code': u'%04X' % ord(char),
                'name': name.title().replace('Cjk', 'CJK'), 'char': char,
                'example': example, 'category': catname.lower(), 'bidi': bidi,
                'unihan': haninfo}
开发者ID:gflerm,项目名称:ibid,代码行数:27,代码来源:conversions.py

示例10: print_Unicode_info

def print_Unicode_info(char, short):
    name = unicodedata.name(char, "UNKNOWN")
    decCodepoint = ord(char)
    hexCodepoint = hex(decCodepoint)
    lower = char.lower()
    upper = char.upper()
    category = unicodedata.category(char)
    bidirectional = unicodedata.bidirectional(char)
    mirrored = True if (unicodedata.mirrored(char) == 1) else False
    nfc = unicodedata.normalize("NFC", char)
    nfd = unicodedata.normalize("NFD", char)

    if (short):
        print(char + "\t" + name + " (U+" + str(hexCodepoint).upper().replace("0X", "") + ")")
    else:
        print("Name          " + name)
        print("Character     " + char)
        print("Dec Codepoint " + str(decCodepoint))
        print("Hex Codepoint " + str(hexCodepoint))
        print("Lowercase     " + lower)
        print("Uppercase     " + upper)
        print("Category      " + category)
        print("Bidirectional " + bidirectional)
        print("Mirrored      " + str(mirrored))
        print("NFC           " + nfc)
        print("NFD           " + nfd)
开发者ID:GitBruno,项目名称:glyphIgo,代码行数:26,代码来源:glyphIgo.py

示例11: drawText

def drawText(canvas, x, y, text, en = False, bold = False, size = 12):
    wrkText = text
    isArabic = False
    isBidi = False
    for c in wrkText:
        cat = unicodedata.bidirectional(c)
        if cat == "AL" or cat == "AN" or cat == "FA":
            isArabic = True
            isBidi = True
            break
        elif cat == "R" or cat == "RLE" or cat == "RLO":
            isBidi = True
    if isArabic:
        wrkText = a_forms.fuse(wrkText)
        wrkText = a_process.shape(wrkText)

    if isBidi:
        wrkText = get_display(wrkText)

    if bold:
        canvas.setFont('BNazanin', size)
    else:
        canvas.setFont('Nazanin', size)

    canvas.drawRightString(x, canvas._pagesize[1] - y, wrkText)
开发者ID:hamed-moghimi,项目名称:nikbad,代码行数:25,代码来源:pdf.py

示例12: get_embedding_levels

def get_embedding_levels(text, storage, upper_is_rtl=False, debug=False):
    """Get the paragraph base embedding level and direction,
    set the storage to the array of chars"""

    prev_surrogate = False
    base_level = storage['base_level']
    has_rtl = False
    # preset the storage's chars
    for _ch in text:
        if _IS_UCS2 and (_SURROGATE_MIN <= ord(_ch) <= _SURROGATE_MAX):
            prev_surrogate = _ch
            continue
        elif prev_surrogate:
            _ch = prev_surrogate + _ch
            prev_surrogate = False

        if upper_is_rtl and _ch.isupper():
            bidi_type = 'R'
        else:
            try:
                bidi_type = bidirectional(_ch)
            except:
                bidi_type = None

        has_rtl |= (bidi_type == 'R')

        storage[
            'chars'].append({'ch': _ch, 'level': base_level, 'type': bidi_type,
                             'orig': bidi_type})
    if debug:
        debug_storage(storage, base_info=True)

    return has_rtl
开发者ID:insiderr,项目名称:insiderr-app,代码行数:33,代码来源:algorithm.py

示例13: _truncate_invalid_chars

    def _truncate_invalid_chars(value, length):
        '''Safety check: make sure we aren't truncating within the boundaries
        of a multibyte character. Also, add a LTR BOM if the last character
        is RTL.
        '''
        value = smart_str(value)
        if length:
            value = value[:length]
            valid = False
            while not valid and len(value):
                try:
                    test = value.decode('utf8')

                    # check for RTL encoding without order marker terminator
                    direction = bidirectional(test[-1])
                    if direction in RTL_TYPES:
                        # this is RTL, we need 3 bytes for the BOM
                        if len(value) > (length - 3):
                            # not enough room - keep chopping
                            raise ValueError('Not enough room to truncate')
                        else:
                            test += u'\u200e'  # LTR BOM
                            return smart_str(test)
                    else:
                        valid = True
                        del test
                except (UnicodeDecodeError, ValueError):
                    # chop a letter off the end and try again
                    value = value[:-1]
        return value
开发者ID:alvaromartin,项目名称:baph,代码行数:30,代码来源:models.py

示例14: rtlString

def rtlString(source, lang):
    if lang and source and lang[0:2] in set([u"ar",u"he"]):
        line = []
        lineInsertion = 0
        words = []
        rtl = True
        for c in source:
            bidi = unicodedata.bidirectional(c)
            if rtl:
                if bidi == u'L':
                    if words:
                        line.insert(lineInsertion, u''.join(words))
                        words = []
                    rtl = False
                elif bidi in (u'R', u'NSM', u'AN'):
                    pass
                else:
                    if words:
                        line.insert(lineInsertion, u''.join(words))
                        words = []
                    line.insert(lineInsertion, c)
                    continue
            else:
                if bidi == u'R' or bidi == u'AN':
                    if words:
                        line.append(u''.join(words))
                        words = []
                    rtl = True
            words.append(c)
        if words:
            if rtl:
                line.insert(0, u''.join(words))
        return u''.join(line)
    else:
        return source
开发者ID:sternshus,项目名称:not_arelle2.7,代码行数:35,代码来源:Locale.py

示例15: __init__

 def __init__(self, myData, headerData, comboData):
     QtGui.QMainWindow.__init__(self)
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.ui.OKButton.clicked.connect(self.OKClicked)
     self.ui.CancelButton.clicked.connect(self.CancelClicked)
     self.__model = LinkerTable(myData, headerData)
     self.ui.tableView.setModel(self.__model)
     # Prepare the checkbox column
     for row in range(0, self.__model.rowCount(self)):
         self.ui.tableView.openPersistentEditor(self.__model.index(row, 0))
     self.__combo_model = LinkerCombo(comboData)
     self.ui.targetLexCombo.setModel(self.__combo_model)
     self.ret_val = 0
     self.cols = 7
     self.ui.targetLexCombo.currentIndexChanged.connect(self.ComboClicked)
     self.ui.FilterCheckBox.clicked.connect(self.FilterClicked)
     self.ComboClicked()
     
     myHPG = self.__combo_model.getCurrentHPG()
     myHeadword = myHPG.getHeadword()
     # Check for right to left data and set the combobox direction if needed
     for i in range(0, len(myHeadword)):
         if unicodedata.bidirectional(myHeadword[i]) in (u'R', u'AL'):
             self.ui.targetLexCombo.setLayoutDirection(QtCore.Qt.RightToLeft)
             self.__combo_model.setRTL(True)
             break
开发者ID:rmlockwood,项目名称:FLExTrans,代码行数:27,代码来源:LinkSenseTool.py


注:本文中的unicodedata.bidirectional函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。