Example #1
0
    def test_to_unicodestr(self):
        e = self.assertEqual
        a2b = unicodesupport._a_to_b

        # from utf8 rawstring
        testee = 'aiuえお♥'
        expect = u'aiuえお♥'
        e(expect, unicodesupport.to_unicodestr(testee))

        # from sjis rawstring
        testee = 'aiuえお'
        expect = u'aiuえお'
        e(expect, unicodesupport.to_unicodestr(a2b(testee, 'utf8', 'sjis')))

        # from ascii rawstring
        ascii_testee = 'abyz0189!"()<>+*'
        ascii_expect = u'abyz0189!"()<>+*'
        e(ascii_expect,
          unicodesupport.to_unicodestr(a2b(ascii_testee, 'utf8', 'ascii')))

        # from not supported rawstring(ここではロシア語を使用)
        # 変換できないので入力文字列がそのまま返る.
        testee = 'Путин'
        invalid_encoding_testee = a2b(testee, 'utf8', 'koi8_r')
        actual = unicodesupport.to_unicodestr(invalid_encoding_testee)
        self.assertTrue(isinstance(actual, str))
        e(invalid_encoding_testee, actual)
Example #2
0
    def deploy(self, s):
        """
        文字列 s 中のマクロを全て展開する.
        @param s rawstring
        @return utf8-rawstring
        """
        ret = unicodesupport.to_unicodestr(s)
        #mark = Macro.MARK
        mark = unicodesupport.to_unicodestr(Macro.MARK)
        idx_start = 0

        while True:
            # 始点を探す. 無ければ終了.
            idx_start = ret.find(mark, idx_start)
            if idx_start==-1:
                return unicodesupport.to_utf8_rawstring(ret)

            # 終点を探す. 無ければ終了.
            # 終点探索開始位置は始点から一つずらす(始点を含めないため)
            idx_end = ret.find(mark, idx_start+1)
            if idx_end==-1:
                return unicodesupport.to_utf8_rawstring(ret)

            # 始点終点間をマクロ名とみなして展開し,
            # 次の探索開始位置を確定.
            # ただしマクロ名は rawstring のみ対応のため変換しておく.
            macroname = ret[idx_start+1:idx_end]
            macroname = unicodesupport.to_utf8_rawstring(macroname)
            macrovalue = macroname
            # まずはユーザマクロから.
            try:
                macrovalue = self.usermacro.get(macroname)
                macrovalue = unicodesupport.to_unicodestr(macrovalue)
                ret = ret[0:idx_start] + \
                      macrovalue + \
                      ret[idx_end+1:]
                idx_start = idx_start + len(macrovalue)
                continue
            except KeyError:
                pass

            # ユーザマクロがダメならシステムマクロ.
            try:
                # 数値として取得されるものもあるが,
                # 後の処理では常に文字列として連結しようとするので
                # 文字列に変換しなければならない.
                macrovalue = str(self.systemmacro.get(macroname))
                macrovalue = unicodesupport.to_unicodestr(macrovalue)
                ret = ret[0:idx_start] + \
                      macrovalue + \
                      ret[idx_end+1:]
                idx_start = idx_start + len(macrovalue)
                continue
            except KeyError:
                pass

            # 展開できなかったので諦めて次の位置から探索を継続.
            idx_start = idx_end + 1
Example #3
0
 def _appendmenu(self, target_id, option, this_id, itemname, use_unicode=False):
     f = win32gui.AppendMenu
     using_itemname = itemname
     if use_unicode:
         # ctype の AppendMenuW() には rawstring ではなく
         # unicode string を与える必要がある.
         f = ctypes.windll.User32.AppendMenuW
         using_itemname = unicodesupport.to_unicodestr(itemname)
     f(target_id, option, this_id, using_itemname)
Example #4
0
 def _get_clipboard_length(self):
     """
     unicode string で計算するため半角全角日本語英語問わず1文字は1文字.
     """
     return len(
         unicodesupport.to_unicodestr(
             self._get_clipboard()
         )
     )
Example #5
0
 def _copy(self, rawstring):
     """
     指定文字列をクリップボードにコピーする.
     @retval True コピーした
     @retval False コピーできなかった
     """
     if unicodesupport.is_ascii(rawstring):
         log.debug('COPY as ascii')
         return clipboard.Clipboard.set_ansi(rawstring)
     if unicodesupport.is_utf8_and_not_ascii(rawstring):
         log.debug('COPY as utf8')
         return clipboard.Clipboard.set_unicode(
             unicodesupport.to_unicodestr(rawstring)
         )
     if unicodesupport.is_sjis_and_not_ascii(rawstring):
         log.debug('COPY as sjis')
         return clipboard.Clipboard.set_ansi(rawstring)
     log.debug('COPY as unknown-type')
     return clipboard.Clipboard.set_ansi(rawstring)
Example #6
0
 def if_str_then_to_sjis(rawstring):
     if not(isinstance(rawstring, str)):
         return rawstring
     import unicodesupport as u
     return u.to_sjis_rawstring(u.to_unicodestr(rawstring))