Module Expr Str FunctionDef arguments args NameParam defaults body Assign NameStore Call NameLoad NameLoad If Call NameLoad NameLoad NameLoad body Return Num If Call NameLoad NameLoad NameLoad body Return Num Return Num decorator_list FunctionDef arguments args NameParam NameParam defaults body For TupleStore NameStore NameStore NameLoad body If CompareLt NameLoad NameLoad body Break If CompareLtELtE NameLoad NameLoad NameLoad body Return NameLoad Return NameLoad decorator_list Assign NameStore ListLoad TupleLoad Num Num Assign NameStore ListLoad TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num TupleLoad Num Num
N/A N/A A module to handle different character widths on the console.

Some East Asian characters have width of two on console, and combining
characters themselves take no extra space.

See issue 604 [1] for more details about East Asian characters. The issue also
contains `generate_wild_chars.py` script that was originally used to create
`_EAST_ASIAN_WILD_CHARS` mapping. An updated version of the script is attached
to issue 1096. Big thanks for xieyanbo for the script and the original patch.

Note that Python's `unicodedata` module is not used here because importing
it takes several seconds on Jython.

[1] http://code.google.com/p/robotframework/issues/detail?id=604
[2] http://code.google.com/p/robotframework/issues/detail?id=1096
 get_char_width N/A N/A char N/A N/A N/A char N/A ord char N/A N/A _char_in_map char _COMBINING_CHARS N/A N/A 0 N/A N/A _char_in_map char _EAST_ASIAN_WILD_CHARS N/A N/A 2 N/A 1 N/A _char_in_map N/A N/A char map N/A N/A N/A N/A begin end map N/A N/A N/A char begin N/A N/A N/A N/A begin char end N/A N/A True N/A False N/A N/A _COMBINING_CHARS N/A N/A 768 879 N/A _EAST_ASIAN_WILD_CHARS N/A N/A 888 889 N/A 895 899 N/A 907 907 N/A 909 909 N/A 930 930 N/A 1316 1328 N/A 1367 1368 N/A 1376 1376 N/A 1416 1416 N/A 1419 1424 N/A 1480 1487 N/A 1515 1519 N/A 1525 1535 N/A 1540 1541 N/A 1564 1565 N/A 1568 1568 N/A 1631 1631 N/A 1806 1806 N/A 1867 1868 N/A 1970 1983 N/A 2043 2304 N/A 2362 2363 N/A 2382 2383 N/A 2389 2391 N/A 2419 2426 N/A 2432 2432 N/A 2436 2436 N/A 2445 2446 N/A 2449 2450 N/A 2473 2473 N/A 2481 2481 N/A 2483 2485 N/A 2490 2491 N/A 2501 2502 N/A 2505 2506 N/A 2511 2518 N/A 2520 2523 N/A 2526 2526 N/A 2532 2533 N/A 2555 2560 N/A 2564 2564 N/A 2571 2574 N/A 2577 2578 N/A 2601 2601 N/A 2609 2609 N/A 2612 2612 N/A 2615 2615 N/A 2618 2619 N/A 2621 2621 N/A 2627 2630 N/A 2633 2634 N/A 2638 2640 N/A 2642 2648 N/A 2653 2653 N/A 2655 2661 N/A 2678 2688 N/A 2692 2692 N/A 2702 2702 N/A 2706 2706 N/A 2729 2729 N/A 2737 2737 N/A 2740 2740 N/A 2746 2747 N/A 2758 2758 N/A 2762 2762 N/A 2766 2767 N/A 2769 2783 N/A 2788 2789 N/A 2800 2800 N/A 2802 2816 N/A 2820 2820 N/A 2829 2830 N/A 2833 2834 N/A 2857 2857 N/A 2865 2865 N/A 2868 2868 N/A 2874 2875 N/A 2885 2886 N/A 2889 2890 N/A 2894 2901 N/A 2904 2907 N/A 2910 2910 N/A 2916 2917 N/A 2930 2945 N/A 2948 2948 N/A 2955 2957 N/A 2961 2961 N/A 2966 2968 N/A 2971 2971 N/A 2973 2973 N/A 2976 2978 N/A 2981 2983 N/A 2987 2989 N/A 3002 3005 N/A 3011 3013 N/A 3017 3017 N/A 3022 3023 N/A 3025 3030 N/A 3032 3045 N/A 3067 3072 N/A 3076 3076 N/A 3085 3085 N/A 3089 3089 N/A 3113 3113 N/A 3124 3124 N/A 3130 3132 N/A 3141 3141 N/A 3145 3145 N/A 3150 3156 N/A 3159 3159 N/A 3162 3167 N/A 3172 3173 N/A 3184 3191 N/A 3200 3201 N/A 3204 3204 N/A 3213 3213 N/A 3217 3217 N/A 3241 3241 N/A 3252 3252 N/A 3258 3259 N/A 3269 3269 N/A 3273 3273 N/A 3278 3284 N/A 3287 3293 N/A 3295 3295 N/A 3300 3301 N/A 3312 3312 N/A 3315 3329 N/A 3332 3332 N/A 3341 3341 N/A 3345 3345 N/A 3369 3369 N/A 3386 3388 N/A 3397 3397 N/A 3401 3401 N/A 3406 3414 N/A 3416 3423 N/A 3428 3429 N/A 3446 3448 N/A 3456 3457 N/A 3460 3460 N/A 3479 3481 N/A 3506 3506 N/A 3516 3516 N/A 3518 3519 N/A 3527 3529 N/A 3531 3534 N/A 3541 3541 N/A 3543 3543 N/A 3552 3569 N/A 3573 3584 N/A 3643 3646 N/A 3676 3712 N/A 3715 3715 N/A 3717 3718 N/A 3721 3721 N/A 3723 3724 N/A 3726 3731 N/A 3736 3736 N/A 3744 3744 N/A 3748 3748 N/A 3750 3750 N/A 3752 3753 N/A 3756 3756 N/A 3770 3770 N/A 3774 3775 N/A 3781 3781 N/A 3783 3783 N/A 3790 3791 N/A 3802 3803 N/A 3806 3839 N/A 3912 3912 N/A 3949 3952 N/A 3980 3983 N/A 3992 3992 N/A 4029 4029 N/A 4045 4045 N/A 4053 4095 N/A 4250 4253 N/A 4294 4303 N/A 4349 4447 N/A 4515 4519 N/A 4602 4607 N/A 4681 4681 N/A 4686 4687 N/A 4695 4695 N/A 4697 4697 N/A 4702 4703 N/A 4745 4745 N/A 4750 4751 N/A 4785 4785 N/A 4790 4791 N/A 4799 4799 N/A 4801 4801 N/A 4806 4807 N/A 4823 4823 N/A 4881 4881 N/A 4886 4887 N/A 4955 4958 N/A 4989 4991 N/A 5018 5023 N/A 5109 5120 N/A 5751 5759 N/A 5789 5791 N/A 5873 5887 N/A 5901 5901 N/A 5909 5919 N/A 5943 5951 N/A 5972 5983 N/A 5997 5997 N/A 6001 6001 N/A 6004 6015 N/A 6110 6111 N/A 6122 6127 N/A 6138 6143 N/A 6159 6159 N/A 6170 6175 N/A 6264 6271 N/A 6315 6399 N/A 6429 6431 N/A 6444 6447 N/A 6460 6463 N/A 6465 6467 N/A 6510 6511 N/A 6517 6527 N/A 6570 6575 N/A 6602 6607 N/A 6618 6621 N/A 6684 6685 N/A 6688 6911 N/A 6988 6991 N/A 7037 7039 N/A 7083 7085 N/A 7098 7167 N/A 7224 7226 N/A 7242 7244 N/A 7296 7423 N/A 7655 7677 N/A 7958 7959 N/A 7966 7967 N/A 8006 8007 N/A 8014 8015 N/A 8024 8024 N/A 8026 8026 N/A 8028 8028 N/A 8030 8030 N/A 8062 8063 N/A 8117 8117 N/A 8133 8133 N/A 8148 8149 N/A 8156 8156 N/A 8176 8177 N/A 8181 8181 N/A 8191 8191 N/A 8293 8297 N/A 8306 8307 N/A 8335 8335 N/A 8341 8351 N/A 8374 8399 N/A 8433 8447 N/A 8528 8530 N/A 8585 8591 N/A 9001 9002 N/A 9192 9215 N/A 9255 9279 N/A 9291 9311 N/A 9886 9887 N/A 9917 9919 N/A 9924 9984 N/A 9989 9989 N/A 9994 9995 N/A 10024 10024 N/A 10060 10060 N/A 10062 10062 N/A 10067 10069 N/A 10071 10071 N/A 10079 10080 N/A 10133 10135 N/A 10160 10160 N/A 10175 10175 N/A 10187 10187 N/A 10189 10191 N/A 11085 11087 N/A 11093 11263 N/A 11311 11311 N/A 11359 11359 N/A 11376 11376 N/A 11390 11391 N/A 11499 11512 N/A 11558 11567 N/A 11622 11630 N/A 11632 11647 N/A 11671 11679 N/A 11687 11687 N/A 11695 11695 N/A 11703 11703 N/A 11711 11711 N/A 11719 11719 N/A 11727 11727 N/A 11735 11735 N/A 11743 11743 N/A 11825 12350 N/A 12352 19903 N/A 19968 42239 N/A 42540 42559 N/A 42592 42593 N/A 42612 42619 N/A 42648 42751 N/A 42893 43002 N/A 43052 43071 N/A 43128 43135 N/A 43205 43213 N/A 43226 43263 N/A 43348 43358 N/A 43360 43519 N/A 43575 43583 N/A 43598 43599 N/A 43610 43611 N/A 43616 55295 N/A 63744 64255 N/A 64263 64274 N/A 64280 64284 N/A 64311 64311 N/A 64317 64317 N/A 64319 64319 N/A 64322 64322 N/A 64325 64325 N/A 64434 64466 N/A 64832 64847 N/A 64912 64913 N/A 64968 65007 N/A 65022 65023 N/A 65040 65055 N/A 65063 65135 N/A 65141 65141 N/A 65277 65278 N/A 65280 65376 N/A 65471 65473 N/A 65480 65481 N/A 65488 65489 N/A 65496 65497 N/A 65501 65511 N/A 65519 65528 N/A 65534 65535