Source code for maha.parsers.rules.ordinal.values

import maha.parsers.rules.numeral.values as numvalues
from maha.expressions import EXPRESSION_SPACE, EXPRESSION_SPACE_OR_NONE
from maha.parsers.templates import Value
from maha.rexy import non_capturing_group

from ..common import ALL_ALEF, SUM_SUFFIX

[docs]TEN_SUFFIX = f"{EXPRESSION_SPACE_OR_NONE}[تط]?[اع]?شر?[ةه]?"
[docs]TEN_SUFFIX_SIMPLE = f"{EXPRESSION_SPACE}عشر[ةه]?"
[docs]TEH_OPTIONAL_SUFFIX = "[ةه]?"
[docs]ALEF_LAM = non_capturing_group("ال")
[docs]ALEF_LAM_OPTIONAL = ALEF_LAM + "?"
[docs]one_prefix = non_capturing_group( "واحد", f"{ALL_ALEF}?حد[اى]?", "حاد[يى][ةه]?", )
[docs]two_prefix = non_capturing_group("[تث]ان[يى]", "[إا]?[ثت]نت؟[يى]")
[docs]three_prefix = "[تث]ال[ثت]"
[docs]four_prefix = "رابع"
[docs]five_prefix = "خامس"
[docs]six_prefix = "سادس"
[docs]seven_prefix = "سابع"
[docs]eight_prefix = "[تث]امن"
[docs]nine_prefix = "تاسع"
[docs]ten_prefix = "عاشر"
[docs]ONE = Value(1, ALEF_LAM_OPTIONAL + "[أا]ول[ىي]?")
[docs]TWO = Value(2, ALEF_LAM_OPTIONAL + "[تث]ان[يى]" + TEH_OPTIONAL_SUFFIX)
[docs]THREE = Value(3, ALEF_LAM_OPTIONAL + three_prefix + TEH_OPTIONAL_SUFFIX)
[docs]FOUR = Value(4, ALEF_LAM_OPTIONAL + four_prefix + TEH_OPTIONAL_SUFFIX)
[docs]FIVE = Value(5, ALEF_LAM_OPTIONAL + five_prefix + TEH_OPTIONAL_SUFFIX)
[docs]SIX = Value(6, ALEF_LAM_OPTIONAL + six_prefix + TEH_OPTIONAL_SUFFIX)
[docs]SEVEN = Value(7, ALEF_LAM_OPTIONAL + seven_prefix + TEH_OPTIONAL_SUFFIX)
[docs]EIGHT = Value(8, ALEF_LAM_OPTIONAL + eight_prefix + TEH_OPTIONAL_SUFFIX)
[docs]NINE = Value(9, ALEF_LAM_OPTIONAL + nine_prefix + TEH_OPTIONAL_SUFFIX)
[docs]TEN = Value(10, ALEF_LAM_OPTIONAL + ten_prefix + TEH_OPTIONAL_SUFFIX)
[docs]ONE_PREFIX = Value(1, ALEF_LAM + one_prefix + TEH_OPTIONAL_SUFFIX)
[docs]TWO_PREFIX = Value(2, ALEF_LAM + two_prefix + TEH_OPTIONAL_SUFFIX)
[docs]THREE_PREFIX = Value(3, ALEF_LAM + three_prefix + TEH_OPTIONAL_SUFFIX)
[docs]FOUR_PREFIX = Value(4, ALEF_LAM + four_prefix + TEH_OPTIONAL_SUFFIX)
[docs]FIVE_PREFIX = Value(5, ALEF_LAM + five_prefix + TEH_OPTIONAL_SUFFIX)
[docs]SIX_PREFIX = Value(6, ALEF_LAM + six_prefix + TEH_OPTIONAL_SUFFIX)
[docs]SEVEN_PREFIX = Value(7, ALEF_LAM + seven_prefix + TEH_OPTIONAL_SUFFIX)
[docs]EIGHT_PREFIX = Value(8, ALEF_LAM + eight_prefix + TEH_OPTIONAL_SUFFIX)
[docs]NINE_PREFIX = Value(9, ALEF_LAM + nine_prefix + TEH_OPTIONAL_SUFFIX)
[docs]ELEVEN = Value( 11, non_capturing_group( ALEF_LAM + f"{ALL_ALEF}?حد[اى]?" + TEN_SUFFIX, ALEF_LAM_OPTIONAL + "حاد[يى][ةه]?" + TEN_SUFFIX_SIMPLE, ), )
[docs]TWELVE = Value( 12, non_capturing_group( ALEF_LAM + non_capturing_group( f"{ALL_ALEF}[طت]نا?" + TEN_SUFFIX, f"{ALL_ALEF}[ثت]نت?[اىي]ن?" + TEN_SUFFIX, ), ALEF_LAM_OPTIONAL + two_prefix + TEH_OPTIONAL_SUFFIX + TEN_SUFFIX_SIMPLE, ), )
[docs]THIRTEEN = Value(13, THREE + TEN_SUFFIX_SIMPLE)
[docs]FOURTEEN = Value(14, FOUR + TEN_SUFFIX_SIMPLE)
[docs]FIFTEEN = Value(15, FIVE + TEN_SUFFIX_SIMPLE)
[docs]SIXTEEN = Value(16, SIX + TEN_SUFFIX_SIMPLE)
[docs]SEVENTEEN = Value(17, SEVEN + TEN_SUFFIX_SIMPLE)
[docs]EIGHTEEN = Value(18, EIGHT + TEN_SUFFIX_SIMPLE)
[docs]NINETEEN = Value(19, NINE + TEN_SUFFIX_SIMPLE)
[docs]TWENTY = Value(20, ALEF_LAM + "عشر" + SUM_SUFFIX)
[docs]THIRTY = Value(30, ALEF_LAM + numvalues.three_prefix + SUM_SUFFIX)
[docs]FORTY = Value(40, ALEF_LAM + numvalues.four_prefix + SUM_SUFFIX)
[docs]FIFTY = Value(50, ALEF_LAM + numvalues.five_prefix + SUM_SUFFIX)
[docs]SIXTY = Value(60, ALEF_LAM + numvalues.six_prefix + SUM_SUFFIX)
[docs]SEVENTY = Value(70, ALEF_LAM + numvalues.seven_prefix + SUM_SUFFIX)
[docs]EIGHTY = Value(80, ALEF_LAM + numvalues.eight_prefix + SUM_SUFFIX)
[docs]NINETY = Value(90, ALEF_LAM + numvalues.nine_prefix + SUM_SUFFIX)
[docs]ONE_HUNDRED = Value(100, ALEF_LAM + numvalues.ONE_HUNDRED)
[docs]TWO_HUNDREDS = Value(200, ALEF_LAM + numvalues.TWO_HUNDREDS)
[docs]THREE_HUNDREDS = Value( 300, ALEF_LAM + numvalues.THREE + EXPRESSION_SPACE_OR_NONE + numvalues.ONE_HUNDRED, )
[docs]FOUR_HUNDREDS = Value( 400, ALEF_LAM + numvalues.FOUR + EXPRESSION_SPACE_OR_NONE + numvalues.ONE_HUNDRED, )
[docs]FIVE_HUNDREDS = Value( 500, ALEF_LAM + numvalues.FIVE + EXPRESSION_SPACE_OR_NONE + numvalues.ONE_HUNDRED, )
[docs]SIX_HUNDREDS = Value( 600, ALEF_LAM + numvalues.SIX + EXPRESSION_SPACE_OR_NONE + numvalues.ONE_HUNDRED )
[docs]SEVEN_HUNDREDS = Value( 700, ALEF_LAM + numvalues.SEVEN + EXPRESSION_SPACE_OR_NONE + numvalues.ONE_HUNDRED, )
[docs]EIGHT_HUNDREDS = Value( 800, ALEF_LAM + numvalues.EIGHT + EXPRESSION_SPACE_OR_NONE + numvalues.ONE_HUNDRED, )
[docs]NINE_HUNDREDS = Value( 900, ALEF_LAM + numvalues.NINE + EXPRESSION_SPACE_OR_NONE + numvalues.ONE_HUNDRED, )
[docs]ONE_THOUSAND = Value(1000, ALEF_LAM + numvalues.ONE_THOUSAND)
[docs]TWO_THOUSANDS = Value(2000, ALEF_LAM + numvalues.TWO_THOUSANDS)
[docs]ONE_MILLION = Value(1000000, ALEF_LAM + numvalues.ONE_MILLION)
[docs]TWO_MILLIONS = Value(2000000, ALEF_LAM + numvalues.TWO_MILLIONS)
[docs]ONE_BILLION = Value(1000000000, ALEF_LAM + numvalues.ONE_BILLION)
[docs]TWO_BILLIONS = Value(2000000000, ALEF_LAM + numvalues.TWO_BILLIONS)
[docs]ONE_TRILLION = Value(1000000000000, ALEF_LAM + numvalues.ONE_TRILLION)
[docs]TWO_TRILLIONS = Value(2000000000000, ALEF_LAM + numvalues.TWO_TRILLIONS)