-module(blah@fa@string). -compile([no_auto_import, nowarn_unused_vars]). -export([alpha/1, numeric/1, alphanumeric/1, with_pattern/1, pronounceable/0]). -spec alpha_internal(gleam@string_builder:string_builder(), integer()) -> binary(). alpha_internal(State, Remaining) -> case Remaining =:= 0 of true -> gleam@string_builder:to_string(State); false -> Letter = blah@utils:get_random_item( [<<"آ"/utf8>>, <<"ا"/utf8>>, <<"ب"/utf8>>, <<"پ"/utf8>>, <<"ت"/utf8>>, <<"ث"/utf8>>, <<"ج"/utf8>>, <<"چ"/utf8>>, <<"ح"/utf8>>, <<"خ"/utf8>>, <<"د"/utf8>>, <<"ذ"/utf8>>, <<"ر"/utf8>>, <<"ز"/utf8>>, <<"ژ"/utf8>>, <<"س"/utf8>>, <<"ش"/utf8>>, <<"ص"/utf8>>, <<"ض"/utf8>>, <<"ط"/utf8>>, <<"ظ"/utf8>>, <<"ع"/utf8>>, <<"غ"/utf8>>, <<"ف"/utf8>>, <<"ق"/utf8>>, <<"ک"/utf8>>, <<"گ"/utf8>>, <<"ل"/utf8>>, <<"م"/utf8>>, <<"ن"/utf8>>, <<"و"/utf8>>, <<"ه"/utf8>>, <<"ی"/utf8>>] ), alpha_internal( gleam@string_builder:append(State, Letter), Remaining - 1 ) end. -spec alpha(integer()) -> binary(). alpha(Length) -> alpha_internal(gleam@string_builder:new(), Length). -spec numeric_internal(gleam@string_builder:string_builder(), integer()) -> binary(). numeric_internal(State, Remaining) -> case Remaining =:= 0 of true -> gleam@string_builder:to_string(State); false -> Digit = blah@utils:get_random_item( [<<"۰"/utf8>>, <<"۱"/utf8>>, <<"۲"/utf8>>, <<"۳"/utf8>>, <<"۴"/utf8>>, <<"۵"/utf8>>, <<"۶"/utf8>>, <<"۷"/utf8>>, <<"۸"/utf8>>, <<"۹"/utf8>>] ), numeric_internal( gleam@string_builder:append(State, Digit), Remaining - 1 ) end. -spec numeric(integer()) -> binary(). numeric(Length) -> numeric_internal(gleam@string_builder:new(), Length). -spec alphanumeric_internal(gleam@string_builder:string_builder(), integer()) -> binary(). alphanumeric_internal(State, Remaining) -> case Remaining =:= 0 of true -> gleam@string_builder:to_string(State); false -> Character = blah@utils:get_random_item( [<<"آ"/utf8>>, <<"ا"/utf8>>, <<"ب"/utf8>>, <<"پ"/utf8>>, <<"ت"/utf8>>, <<"ث"/utf8>>, <<"ج"/utf8>>, <<"چ"/utf8>>, <<"ح"/utf8>>, <<"خ"/utf8>>, <<"د"/utf8>>, <<"ذ"/utf8>>, <<"ر"/utf8>>, <<"ز"/utf8>>, <<"ژ"/utf8>>, <<"س"/utf8>>, <<"ش"/utf8>>, <<"ص"/utf8>>, <<"ض"/utf8>>, <<"ط"/utf8>>, <<"ظ"/utf8>>, <<"ع"/utf8>>, <<"غ"/utf8>>, <<"ف"/utf8>>, <<"ق"/utf8>>, <<"ک"/utf8>>, <<"گ"/utf8>>, <<"ل"/utf8>>, <<"م"/utf8>>, <<"ن"/utf8>>, <<"و"/utf8>>, <<"ه"/utf8>>, <<"ی"/utf8>>, <<"۰"/utf8>>, <<"۱"/utf8>>, <<"۲"/utf8>>, <<"۳"/utf8>>, <<"۴"/utf8>>, <<"۵"/utf8>>, <<"۶"/utf8>>, <<"۷"/utf8>>, <<"۸"/utf8>>, <<"۹"/utf8>>] ), alphanumeric_internal( gleam@string_builder:append(State, Character), Remaining - 1 ) end. -spec alphanumeric(integer()) -> binary(). alphanumeric(Length) -> alphanumeric_internal(gleam@string_builder:new(), Length). -spec with_pattern_internal(gleam@string_builder:string_builder(), binary()) -> binary(). with_pattern_internal(State, Given_pattern) -> case gleam@string:first(Given_pattern) of {ok, <<"%"/utf8>>} -> To_append = case gleam@string:slice(Given_pattern, 0, 2) of <<"%d"/utf8>> -> blah@utils:get_random_item( [<<"۰"/utf8>>, <<"۱"/utf8>>, <<"۲"/utf8>>, <<"۳"/utf8>>, <<"۴"/utf8>>, <<"۵"/utf8>>, <<"۶"/utf8>>, <<"۷"/utf8>>, <<"۸"/utf8>>, <<"۹"/utf8>>] ); <<"%w"/utf8>> -> blah@utils:get_random_item( [<<"آ"/utf8>>, <<"ا"/utf8>>, <<"ب"/utf8>>, <<"پ"/utf8>>, <<"ت"/utf8>>, <<"ث"/utf8>>, <<"ج"/utf8>>, <<"چ"/utf8>>, <<"ح"/utf8>>, <<"خ"/utf8>>, <<"د"/utf8>>, <<"ذ"/utf8>>, <<"ر"/utf8>>, <<"ز"/utf8>>, <<"ژ"/utf8>>, <<"س"/utf8>>, <<"ش"/utf8>>, <<"ص"/utf8>>, <<"ض"/utf8>>, <<"ط"/utf8>>, <<"ظ"/utf8>>, <<"ع"/utf8>>, <<"غ"/utf8>>, <<"ف"/utf8>>, <<"ق"/utf8>>, <<"ک"/utf8>>, <<"گ"/utf8>>, <<"ل"/utf8>>, <<"م"/utf8>>, <<"ن"/utf8>>, <<"و"/utf8>>, <<"ه"/utf8>>, <<"ی"/utf8>>] ); <<"%c"/utf8>> -> blah@utils:get_random_item( [<<"آ"/utf8>>, <<"ا"/utf8>>, <<"ب"/utf8>>, <<"پ"/utf8>>, <<"ت"/utf8>>, <<"ث"/utf8>>, <<"ج"/utf8>>, <<"چ"/utf8>>, <<"ح"/utf8>>, <<"خ"/utf8>>, <<"د"/utf8>>, <<"ذ"/utf8>>, <<"ر"/utf8>>, <<"ز"/utf8>>, <<"ژ"/utf8>>, <<"س"/utf8>>, <<"ش"/utf8>>, <<"ص"/utf8>>, <<"ض"/utf8>>, <<"ط"/utf8>>, <<"ظ"/utf8>>, <<"ع"/utf8>>, <<"غ"/utf8>>, <<"ف"/utf8>>, <<"ق"/utf8>>, <<"ک"/utf8>>, <<"گ"/utf8>>, <<"ل"/utf8>>, <<"م"/utf8>>, <<"ن"/utf8>>, <<"و"/utf8>>, <<"ه"/utf8>>, <<"ی"/utf8>>, <<"۰"/utf8>>, <<"۱"/utf8>>, <<"۲"/utf8>>, <<"۳"/utf8>>, <<"۴"/utf8>>, <<"۵"/utf8>>, <<"۶"/utf8>>, <<"۷"/utf8>>, <<"۸"/utf8>>, <<"۹"/utf8>>] ); <<"%n"/utf8>> -> blah@utils:get_random_item( [<<"۱"/utf8>>, <<"۲"/utf8>>, <<"۳"/utf8>>, <<"۴"/utf8>>, <<"۵"/utf8>>, <<"۶"/utf8>>, <<"۷"/utf8>>, <<"۸"/utf8>>, <<"۹"/utf8>>] ); Characters -> Characters end, with_pattern_internal( gleam@string_builder:append(State, To_append), gleam@string:drop_left(Given_pattern, 2) ); {ok, To_append@1} -> with_pattern_internal( gleam@string_builder:append(State, To_append@1), gleam@string:drop_left(Given_pattern, 1) ); {error, nil} -> gleam@string_builder:to_string(State) end. -spec with_pattern(binary()) -> binary(). with_pattern(Given_pattern) -> with_pattern_internal(gleam@string_builder:new(), Given_pattern). -spec pronounceable_internal(gleam@string_builder:string_builder(), integer()) -> binary(). pronounceable_internal(State, Remaining) -> case Remaining of 0 -> gleam@string_builder:to_string(State); _ -> Nonce = gleam@int:random(4, 2048), Letters = case Nonce rem 2 of 0 -> First = blah@utils:get_random_item( [<<"ا"/utf8>>, <<"و"/utf8>>] ), Second = blah@utils:get_random_item( [<<"ب"/utf8>>, <<"پ"/utf8>>, <<"ت"/utf8>>, <<"ث"/utf8>>, <<"ج"/utf8>>, <<"چ"/utf8>>, <<"ح"/utf8>>, <<"خ"/utf8>>, <<"د"/utf8>>, <<"ذ"/utf8>>, <<"ر"/utf8>>, <<"ز"/utf8>>, <<"ژ"/utf8>>, <<"س"/utf8>>, <<"ش"/utf8>>, <<"ص"/utf8>>, <<"ض"/utf8>>, <<"ط"/utf8>>, <<"ظ"/utf8>>, <<"ع"/utf8>>, <<"غ"/utf8>>, <<"ف"/utf8>>, <<"ق"/utf8>>, <<"ک"/utf8>>, <<"گ"/utf8>>, <<"ل"/utf8>>, <<"م"/utf8>>, <<"ن"/utf8>>, <<"ه"/utf8>>, <<"ی"/utf8>>] ), _pipe = [First, Second], gleam@list:map( _pipe, fun gleam@string_builder:from_string/1 ); 1 -> First@1 = blah@utils:get_random_item( [<<"ب"/utf8>>, <<"پ"/utf8>>, <<"ت"/utf8>>, <<"ث"/utf8>>, <<"ج"/utf8>>, <<"چ"/utf8>>, <<"ح"/utf8>>, <<"خ"/utf8>>, <<"د"/utf8>>, <<"ذ"/utf8>>, <<"ر"/utf8>>, <<"ز"/utf8>>, <<"ژ"/utf8>>, <<"س"/utf8>>, <<"ش"/utf8>>, <<"ص"/utf8>>, <<"ض"/utf8>>, <<"ط"/utf8>>, <<"ظ"/utf8>>, <<"ع"/utf8>>, <<"غ"/utf8>>, <<"ف"/utf8>>, <<"ق"/utf8>>, <<"ک"/utf8>>, <<"گ"/utf8>>, <<"ل"/utf8>>, <<"م"/utf8>>, <<"ن"/utf8>>, <<"ه"/utf8>>, <<"ی"/utf8>>] ), Second@1 = blah@utils:get_random_item( [<<"ا"/utf8>>, <<"و"/utf8>>] ), _pipe@1 = [First@1, Second@1], gleam@list:map( _pipe@1, fun gleam@string_builder:from_string/1 ) end, pronounceable_internal( gleam@string_builder:concat([State | Letters]), Remaining - 2 ) end. -spec pronounceable() -> binary(). pronounceable() -> Nonce = gleam@int:random(4, 2048), Length = gleam@int:random(2, 4) * 2, case Nonce rem 2 of 0 -> First = blah@utils:get_random_item([<<"آ"/utf8>>, <<"او"/utf8>>]), Second = blah@utils:get_random_item( [<<"ب"/utf8>>, <<"پ"/utf8>>, <<"ت"/utf8>>, <<"ث"/utf8>>, <<"ج"/utf8>>, <<"چ"/utf8>>, <<"ح"/utf8>>, <<"خ"/utf8>>, <<"د"/utf8>>, <<"ذ"/utf8>>, <<"ر"/utf8>>, <<"ز"/utf8>>, <<"ژ"/utf8>>, <<"س"/utf8>>, <<"ش"/utf8>>, <<"ص"/utf8>>, <<"ض"/utf8>>, <<"ط"/utf8>>, <<"ظ"/utf8>>, <<"ع"/utf8>>, <<"غ"/utf8>>, <<"ف"/utf8>>, <<"ق"/utf8>>, <<"ک"/utf8>>, <<"گ"/utf8>>, <<"ل"/utf8>>, <<"م"/utf8>>, <<"ن"/utf8>>, <<"ه"/utf8>>, <<"ی"/utf8>>] ), pronounceable_internal( gleam@string_builder:from_strings([First, Second]), Length - 2 ); 1 -> pronounceable_internal(gleam@string_builder:new(), Length) end.