Skip to content

Commit 52b1797

Browse files
committed
Recognize and handle operator forms of AlphabetOrder
1 parent 08add84 commit 52b1797

1 file changed

Lines changed: 35 additions & 3 deletions

File tree

pymathics/icu/__main__.py

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@
2222
for locale_name, availableLocale in available_locales.items()
2323
}
2424

25+
LowerFirstSet: Final[set[String]] = {String("System`LowerFirst"), String("LowerFirst")}
2526
StringAutomatic: Final[String] = String("System`Automatic")
26-
LowerFirst: Final[set[String]] = {String("System`LowerFirst"), String("LowerFirst")}
27+
StringLanguage: Final[String] = String("Language")
2728
StringUpperFirst: Final[String] = String("UpperFirst")
2829
SymbolLanguage: Final[String] = Symbol("System`$Language")
2930

@@ -117,7 +118,7 @@ def from_dict(
117118
elif normalized_key == "lowercase_ordering":
118119
if (option_value is SymbolAutomatic) or option_value == "Automatic":
119120
processed_args[normalized_key] = None
120-
elif option_value in LowerFirst:
121+
elif option_value in LowerFirstSet:
121122
processed_args[normalized_key] = True
122123
elif option_value == StringUpperFirst:
123124
processed_args[normalized_key] = False
@@ -304,6 +305,10 @@ class AlphabeticOrder(Builtin):
304305
>> AlphabeticOrder["parrot", "parrot"]
305306
= 0
306307
308+
The above done in operator form:
309+
>> AlphabeticOrder[]["parrot", "parrot"]
310+
= 0
311+
307312
When words are the same but only differ in case, usually lowercase letters come first:
308313
>> AlphabeticOrder["A", "a"]
309314
= -1
@@ -329,6 +334,10 @@ class AlphabeticOrder(Builtin):
329334
>> AlphabeticOrder["Papá", "Papagayo", "Spanish"]
330335
= 1
331336
337+
The above done in operator form:
338+
>> AlphabeticOrder["Spanish"]["Papá", "Papagayo"]
339+
= 1
340+
332341
The alphabetic ordering is determined by the value of <url>:$Language:
333342
doc/reference-of-built-in-symbols/global-system-information/$language/</url>. However, \
334343
specify a the language as the third argument:
@@ -348,7 +357,7 @@ class AlphabeticOrder(Builtin):
348357
"""
349358

350359
eval_error = Builtin.generic_argument_error
351-
expected_args = range(1, 4)
360+
expected_args = range(4)
352361
options = {
353362
"System`CaseOrdering": "Automatic",
354363
"System`IgnoreCase": "False",
@@ -365,6 +374,29 @@ def eval(
365374
lang = String(LANGUAGE)
366375
return self.eval_with_lang(string1, string2, lang, options, evaluation)
367376

377+
# FIXME: Figure out out to accomplish as a rule?
378+
def eval_default_lang_operator(
379+
self,
380+
string1: String,
381+
string2: String,
382+
options: dict,
383+
evaluation: Evaluation,
384+
):
385+
"""AlphabeticOrder[___][string1_String, string2_String, OptionsPattern[%(name)s]]"""
386+
return self.eval_with_lang(string1, string2, StringLanguage, options, evaluation)
387+
388+
# FIXME: Figure out out to accomplish as a rule?
389+
def eval_lang_operator(
390+
self,
391+
string1: String,
392+
string2: String,
393+
lang: String,
394+
options: dict,
395+
evaluation: Evaluation,
396+
):
397+
"""AlphabeticOrder[lang_String][string1_String, string2_String, OptionsPattern[%(name)s]]"""
398+
return self.eval_with_lang(string1, string2, lang, options, evaluation)
399+
368400
def eval_with_lang(
369401
self,
370402
string1: String,

0 commit comments

Comments
 (0)