Source code for khayyam.formatting.directives.persian
# -*- coding: utf-8 -*-
from .base import Directive
from khayyam.compat import get_unicode
from khayyam.formatting.constants import PERSIAN_DIGIT_MAPPING
__author__ = 'vahid'
eng_to_persian_dict = {e: p[0] for p, e in PERSIAN_DIGIT_MAPPING}
persian_to_eng_dict = {p[0]: e for p, e in PERSIAN_DIGIT_MAPPING}
eng_to_persian = lambda s: ''.join([eng_to_persian_dict[c] if c in eng_to_persian_dict else c for c in s])
persian_to_eng = lambda s: ''.join([persian_to_eng_dict[c] if c in persian_to_eng_dict else c for c in s])
[docs]class PersianNumberDirective(Directive):
"""
Representing a number in persian form.
"""
def __init__(self, key, name, regex, zero_padding=False, zero_padding_length=2):
self.zero_padding = zero_padding
self.zero_padding_length = zero_padding_length
super(PersianNumberDirective, self).__init__(key, name, regex, get_unicode)
def format(self, i):
if self.zero_padding:
fmt = '%%.%dd' % self.zero_padding_length
return eng_to_persian(fmt % i)
elif isinstance(i, int):
return eng_to_persian(str(i))
else:
return eng_to_persian(i)
def post_parser(self, ctx, formatter):
exp = ctx[self.name]
if exp.strip() != '':
ctx[self.name] = int(persian_to_eng(exp))