Packages
text_stemmer
0.1.0
Pre-compiled Snowball stemmers for Elixir. Ships 36 stemming algorithms covering a wide range of natural languages, accessible through a single `Text.Stemmer.stem/2` entry point.
Current section
Files
Jump to
Current section
Files
lib/text/stemmer/stemmers/yiddish.ex
# Generated by Snowball.Generator — do not edit by hand.
defmodule Text.Stemmer.Stemmers.Yiddish do
@moduledoc """
Snowball stemmer for yiddish.
Generated from the canonical Snowball algorithm source.
"""
alias Snowball.Runtime
alias Snowball.Grouping
# Groupings
@g_consonant Grouping.from_string("בגדהזחטךכלםמןנסףפץצקרשתװ")
@g_niked Grouping.from_string("ְֱֲֳִֵֶַָֹֻּֿׁׂ")
@g_vowel Grouping.from_string("אויעױײ")
# Among tables
@a_0 [
{"קליב", -1, 9, nil},
{"ריב", -1, 10, nil},
{"טריב", 1, 7, nil},
{"שריב", 1, 15, nil},
{"הױב", -1, 23, nil},
{"שװיג", -1, 12, nil},
{"גאנג", -1, 1, nil},
{"זונג", -1, 18, nil},
{"שלונג", -1, 21, nil},
{"צװונג", -1, 20, nil},
{"בױג", -1, 22, nil},
{"בונד", -1, 16, nil},
{"װיז", -1, 6, nil},
{"ביט", -1, 4, nil},
{"ליט", -1, 8, nil},
{"מיט", -1, 3, nil},
{"שניט", -1, 14, nil},
{"נומ", -1, 2, nil},
{"שטאנ", -1, 25, nil},
{"ביס", -1, 5, nil},
{"שמיס", -1, 13, nil},
{"ריס", -1, 11, nil},
{"טרונק", -1, 19, nil},
{"פארלױר", -1, 24, nil},
{"שװױר", -1, 26, nil},
{"װוטש", -1, 17, nil}
]
@a_1 [
{"ונג", -1, 36, nil},
{"סטו", -1, 43, nil},
{"ט", -1, 5, nil},
{"בראכט", 2, 35, nil},
{"סט", 2, 45, nil},
{"יסט", 4, 41, nil},
{"עט", 2, 7, nil},
{"שאפט", 2, 36, nil},
{"הײט", 2, 36, nil},
{"קײט", 2, 36, nil},
{"יקײט", 9, 36, nil},
{"לעכ", -1, 40, nil},
{"עלעכ", 11, 40, nil},
{"יזמ", -1, 37, nil},
{"ימ", -1, 38, nil},
{"עמ", -1, 1, nil},
{"ענעמ", 15, 4, nil},
{"טענעמ", 16, 6, nil},
{"נ", -1, 1, nil},
{"קליבנ", 18, 18, nil},
{"ריבנ", 18, 19, nil},
{"טריבנ", 20, 16, nil},
{"שריבנ", 20, 11, nil},
{"הױבנ", 18, 31, nil},
{"שװיגנ", 18, 21, nil},
{"זונגנ", 18, 26, nil},
{"שלונגנ", 18, 29, nil},
{"צװונגנ", 18, 28, nil},
{"בױגנ", 18, 30, nil},
{"בונדנ", 18, 24, nil},
{"װיזנ", 18, 15, nil},
{"טנ", 18, 6, nil},
{"GEביטנ", 31, 13, nil},
{"GEליטנ", 31, 17, nil},
{"GEמיטנ", 31, 12, nil},
{"שניטנ", 31, 23, nil},
{"סטנ", 31, 44, nil},
{"יסטנ", 36, 42, nil},
{"עטנ", 31, 7, nil},
{"GEביסנ", 18, 14, nil},
{"שמיסנ", 18, 22, nil},
{"GEריסנ", 18, 20, nil},
{"ענ", 18, 1, nil},
{"גאנגענ", 42, 9, nil},
{"עלענ", 42, 40, nil},
{"נומענ", 42, 10, nil},
{"יזמענ", 42, 37, nil},
{"שטאנענ", 42, 33, nil},
{"טרונקנ", 18, 27, nil},
{"פארלױרנ", 18, 32, nil},
{"שװױרנ", 18, 34, nil},
{"װוטשנ", 18, 25, nil},
{"גײנ", 18, 8, nil},
{"ס", -1, 1, nil},
{"טס", 53, 6, nil},
{"עטס", 54, 7, nil},
{"נס", 53, 1, nil},
{"טנס", 56, 6, nil},
{"ענס", 56, 4, nil},
{"עס", 53, 1, nil},
{"יעס", 59, 3, nil},
{"עלעס", 59, 40, nil},
{"ערס", 53, 1, nil},
{"ענערס", 62, 1, nil},
{"ע", -1, 1, nil},
{"טע", 64, 6, nil},
{"סטע", 65, 44, nil},
{"עטע", 65, 7, nil},
{"יע", 64, 2, nil},
{"עלע", 64, 40, nil},
{"ענע", 64, 4, nil},
{"טענע", 70, 6, nil},
{"ער", -1, 1, nil},
{"טער", 72, 6, nil},
{"סטער", 73, 44, nil},
{"עטער", 73, 7, nil},
{"ענער", 72, 4, nil},
{"טענער", 76, 6, nil},
{"ות", -1, 39, nil}
]
@a_2 [
{"ונג", -1, 1, nil},
{"שאפט", -1, 1, nil},
{"הײט", -1, 1, nil},
{"קײט", -1, 1, nil},
{"יקײט", 3, 1, nil},
{"ל", -1, 2, nil}
]
@a_3 [
{"יג", -1, 1, nil},
{"יק", -1, 1, nil},
{"דיק", 1, 1, nil},
{"נדיק", 2, 3, nil},
{"ענדיק", 3, 4, nil},
{"בליק", 1, 2, nil},
{"גליק", 1, 2, nil},
{"ניק", 1, 1, nil},
{"יש", -1, 1, nil}
]
@a_4 [
{"וו", -1, 1, nil},
{"וי", -1, 2, nil},
{"יי", -1, 3, nil},
{"ך", -1, 4, nil},
{"ם", -1, 5, nil},
{"ן", -1, 6, nil},
{"ף", -1, 7, nil},
{"ץ", -1, 8, nil}
]
@a_5 [
{"אדורכ", -1, 1, nil},
{"אהינ", -1, 1, nil},
{"אהער", -1, 1, nil},
{"אהײמ", -1, 1, nil},
{"אומ", -1, 1, nil},
{"אונטער", -1, 1, nil},
{"איבער", -1, 1, nil},
{"אנ", -1, 1, nil},
{"אנט", 7, 1, nil},
{"אנטקעגנ", 8, 1, nil},
{"אנידער", 7, 1, nil},
{"אפ", -1, 1, nil},
{"אפיר", 11, 1, nil},
{"אקעגנ", -1, 1, nil},
{"אראפ", -1, 1, nil},
{"ארומ", -1, 1, nil},
{"ארונטער", -1, 1, nil},
{"אריבער", -1, 1, nil},
{"ארױס", -1, 1, nil},
{"ארױפ", -1, 1, nil},
{"ארײנ", -1, 1, nil},
{"אװעק", -1, 1, nil},
{"אױס", -1, 1, nil},
{"אױפ", -1, 1, nil},
{"אײנ", -1, 1, nil},
{"בא", -1, 1, nil},
{"בײ", -1, 1, nil},
{"דורכ", -1, 1, nil},
{"דער", -1, 1, nil},
{"מיט", -1, 1, nil},
{"נאכ", -1, 1, nil},
{"פאר", -1, 1, nil},
{"פארבײ", 31, 1, nil},
{"פארױס", 31, 1, nil},
{"פונאנדער", -1, 1, nil},
{"צו", -1, 1, nil},
{"צוזאמענ", 35, 1, nil},
{"צונױפ", 35, 1, nil},
{"צוריק", 35, 1, nil},
{"צע", -1, 1, nil}
]
@a_6 [
{"דזש", -1, 1, nil},
{"שטר", -1, 1, nil},
{"שטש", -1, 1, nil},
{"שפר", -1, 1, nil}
]
@doc """
Stem a word.
### Arguments
* `word` is a UTF-8 binary.
### Returns
* The stemmed UTF-8 binary.
"""
@spec stem(binary()) :: binary()
def stem(word) when is_binary(word) do
state = Runtime.new(word) |> init_vars()
state = run_stem(state)
Runtime.assign_to(state)
end
defp init_vars(state), do: %{state | vars: %{p1: 0, x: 0}}
defp run_stem(%Runtime{} = state) do
{_, state} = r_stem(state)
state
end
# Snowball runtime helpers.
defp snowball_do_f(state, fun) do
saved_c = state.cursor
{_, s} = fun.(state)
%{s | cursor: saved_c}
end
defp snowball_do_b(state, fun) do
rel = state.limit - state.cursor
{_, s} = fun.(state)
%{s | cursor: s.limit - rel}
end
defp snowball_test_f(state, fun) do
saved_c = state.cursor
case fun.(state) do
{:ok, s} -> {:ok, %{s | cursor: saved_c}}
{:fail, s} -> {:fail, %{s | cursor: saved_c}}
end
end
defp snowball_try(state, fun) do
rel = state.limit - state.cursor
case fun.(state) do
{:ok, s} -> s
{:fail, s} -> %{s | cursor: s.limit - rel}
end
end
defp snowball_or(state, fun1, fun2) do
rel = state.limit - state.cursor
case fun1.(state) do
{:ok, s} -> {:ok, s}
{:fail, s} -> fun2.(%{s | cursor: s.limit - rel})
end
end
defp lift(state, :fail), do: {:fail, state}
defp lift(_state, %Runtime{} = s), do: {:ok, s}
defp next_codepoint(%Runtime{cursor: c, limit: lim, current: cur} = state) do
case Runtime.codepoint_at(cur, c, lim) do
{_cp, size} -> {:ok, %{state | cursor: c + size}}
:error -> {:fail, state}
end
end
defp next_codepoint_b(%Runtime{cursor: c, limit_backward: lb, current: cur} = state) do
case Runtime.codepoint_before(cur, c, lb) do
{_cp, size} -> {:ok, %{state | cursor: c - size}}
:error -> {:fail, state}
end
end
defp r_standard_suffix(%Runtime{} = state) do
case (fn state ->
{:ok, snowball_do_b(state, fn state ->
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_1) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
2 ->
{:ok, state}
3 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "יע")}
r -> r
end
4 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, Runtime.slice_del(state)}
end).(state) do
{:ok, state} ->
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_0) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
{:ok, Runtime.slice_from(state, "גײ")}
2 ->
{:ok, Runtime.slice_from(state, "נעמ")}
3 ->
{:ok, Runtime.slice_from(state, "מײד")}
4 ->
{:ok, Runtime.slice_from(state, "בײט")}
5 ->
{:ok, Runtime.slice_from(state, "בײס")}
6 ->
{:ok, Runtime.slice_from(state, "װײז")}
7 ->
{:ok, Runtime.slice_from(state, "טרײב")}
8 ->
{:ok, Runtime.slice_from(state, "לײט")}
9 ->
{:ok, Runtime.slice_from(state, "קלײב")}
10 ->
{:ok, Runtime.slice_from(state, "רײב")}
11 ->
{:ok, Runtime.slice_from(state, "רײס")}
12 ->
{:ok, Runtime.slice_from(state, "שװײג")}
13 ->
{:ok, Runtime.slice_from(state, "שמײס")}
14 ->
{:ok, Runtime.slice_from(state, "שנײד")}
15 ->
{:ok, Runtime.slice_from(state, "שרײב")}
16 ->
{:ok, Runtime.slice_from(state, "בינד")}
17 ->
{:ok, Runtime.slice_from(state, "װיטש")}
18 ->
{:ok, Runtime.slice_from(state, "זינג")}
19 ->
{:ok, Runtime.slice_from(state, "טרינק")}
20 ->
{:ok, Runtime.slice_from(state, "צװינג")}
21 ->
{:ok, Runtime.slice_from(state, "שלינג")}
22 ->
{:ok, Runtime.slice_from(state, "בײג")}
23 ->
{:ok, Runtime.slice_from(state, "הײב")}
24 ->
{:ok, Runtime.slice_from(state, "פארליר")}
25 ->
{:ok, Runtime.slice_from(state, "שטײ")}
26 ->
{:ok, Runtime.slice_from(state, "שװער")}
_ -> {:ok, state}
end
end
end).()
end
r -> r
end
5 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
6 ->
case (fn state ->
snowball_or(state,
fn state ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
end,
fn state ->
{:ok, Runtime.slice_from(state, "ט")}
end)
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.eq_s_b(state, "בראכ"))
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_try(state, fn state ->
lift(state, Runtime.eq_s_b(state, "גע"))
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "ברענג")}
end
end
r -> r
end
end
r -> r
end
7 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
8 ->
{:ok, Runtime.slice_from(state, "גײ")}
9 ->
{:ok, Runtime.slice_from(state, "גײ")}
10 ->
{:ok, Runtime.slice_from(state, "נעמ")}
11 ->
{:ok, Runtime.slice_from(state, "שרײב")}
12 ->
{:ok, Runtime.slice_from(state, "מײד")}
13 ->
{:ok, Runtime.slice_from(state, "בײט")}
14 ->
{:ok, Runtime.slice_from(state, "בײס")}
15 ->
{:ok, Runtime.slice_from(state, "װײז")}
16 ->
{:ok, Runtime.slice_from(state, "טרײב")}
17 ->
{:ok, Runtime.slice_from(state, "לײט")}
18 ->
{:ok, Runtime.slice_from(state, "קלײב")}
19 ->
{:ok, Runtime.slice_from(state, "רײב")}
20 ->
{:ok, Runtime.slice_from(state, "רײס")}
21 ->
{:ok, Runtime.slice_from(state, "שװײג")}
22 ->
{:ok, Runtime.slice_from(state, "שמײס")}
23 ->
{:ok, Runtime.slice_from(state, "שנײד")}
24 ->
{:ok, Runtime.slice_from(state, "בינד")}
25 ->
{:ok, Runtime.slice_from(state, "װיטש")}
26 ->
{:ok, Runtime.slice_from(state, "זינג")}
27 ->
{:ok, Runtime.slice_from(state, "טרינק")}
28 ->
{:ok, Runtime.slice_from(state, "צװינג")}
29 ->
{:ok, Runtime.slice_from(state, "שלינג")}
30 ->
{:ok, Runtime.slice_from(state, "בײג")}
31 ->
{:ok, Runtime.slice_from(state, "הײב")}
32 ->
{:ok, Runtime.slice_from(state, "פארליר")}
33 ->
{:ok, Runtime.slice_from(state, "שטײ")}
34 ->
{:ok, Runtime.slice_from(state, "שװער")}
35 ->
{:ok, Runtime.slice_from(state, "ברענג")}
36 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
37 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
38 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
39 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "ה")}
r -> r
end
40 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
41 ->
snowball_or(state,
fn state ->
case (fn state ->
snowball_or(state,
fn state ->
lift(state, Runtime.eq_s_b(state, "ג"))
end,
fn state ->
lift(state, Runtime.eq_s_b(state, "ש"))
end)
end).(state) do
{:ok, state} ->
{:ok, snowball_try(state, fn state ->
case (fn state ->
r_R1plus3(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "יס")}
r -> r
end
end)}
r -> r
end
end,
fn state ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
end)
42 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
43 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
44 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
45 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
_ -> {:ok, state}
end
end
end).()
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_b(state, fn state ->
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_2) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
2 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.in_grouping_b(state, @g_consonant))
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
r -> r
end
_ -> {:ok, state}
end
end
end).()
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_b(state, fn state ->
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_3) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
2 ->
{:ok, state}
3 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
4 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
_ -> {:ok, state}
end
end
end).()
end)}
end).(state) do
{:ok, state} ->
{:ok, snowball_do_b(state, fn state ->
(fn loop_fn ->
loop_fn.(loop_fn, state)
end).(fn loop_fn, state ->
case (fn state ->
(fn loop_fn ->
loop_fn.(loop_fn, state)
end).(fn loop_fn, state ->
v = state.cursor
case (fn state ->
case (fn state ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
snowball_or(state,
fn state ->
lift(state, Runtime.eq_s_b(state, "GE"))
end,
fn state ->
lift(state, Runtime.eq_s_b(state, "TSU"))
end)
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
end
r -> r
end
end
end).(state) do
{:ok, s} -> {:ok, %{s | cursor: v}}
{:fail, _} ->
case next_codepoint_b(%{state | cursor: v}) do
{:ok, s} -> loop_fn.(loop_fn, s)
{:fail, _} -> {:fail, state}
end
end
end)
end).(state) do
{:ok, s} -> loop_fn.(loop_fn, s)
{:fail, s} -> {:ok, %{s | cursor: state.cursor}}
end
end)
end)}
end
end
end
end
defp r_R1plus3(%Runtime{} = state) do
if state.vars[:p1] <= (state.cursor + 6), do: {:ok, state}, else: {:fail, state}
end
defp r_R1(%Runtime{} = state) do
if state.vars[:p1] <= state.cursor, do: {:ok, state}, else: {:fail, state}
end
defp r_prelude(%Runtime{} = state) do
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
(fn loop_fn ->
loop_fn.(loop_fn, state)
end).(fn loop_fn, state ->
case (fn state ->
(fn loop_fn ->
loop_fn.(loop_fn, state)
end).(fn loop_fn, state ->
v = state.cursor
case (fn state ->
(fn ->
state = %{state | bra: state.cursor}
case Runtime.find_among(state, @a_4) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | ket: s.cursor}
case result do
1 ->
case (fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
lift(state, Runtime.eq_s(state, "ּ"))
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "װ")}
r -> r
end
2 ->
case (fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
lift(state, Runtime.eq_s(state, "ִ"))
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "ױ")}
r -> r
end
3 ->
case (fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
lift(state, Runtime.eq_s(state, "ִ"))
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "ײ")}
r -> r
end
4 ->
{:ok, Runtime.slice_from(state, "כ")}
5 ->
{:ok, Runtime.slice_from(state, "מ")}
6 ->
{:ok, Runtime.slice_from(state, "נ")}
7 ->
{:ok, Runtime.slice_from(state, "פ")}
8 ->
{:ok, Runtime.slice_from(state, "צ")}
_ -> {:ok, state}
end
end
end).()
end).(state) do
{:ok, s} -> {:ok, %{s | cursor: v}}
{:fail, _} ->
case next_codepoint(%{state | cursor: v}) do
{:ok, s} -> loop_fn.(loop_fn, s)
{:fail, _} -> {:fail, state}
end
end
end)
end).(state) do
{:ok, s} -> loop_fn.(loop_fn, s)
{:fail, s} -> {:ok, %{s | cursor: state.cursor}}
end
end)
end)}
end).(state) do
{:ok, state} ->
{:ok, snowball_do_f(state, fn state ->
(fn loop_fn ->
loop_fn.(loop_fn, state)
end).(fn loop_fn, state ->
case (fn state ->
(fn loop_fn ->
loop_fn.(loop_fn, state)
end).(fn loop_fn, state ->
v = state.cursor
case (fn state ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.in_grouping(state, @g_niked))
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
end
r -> r
end
end
end).(state) do
{:ok, s} -> {:ok, %{s | cursor: v}}
{:fail, _} ->
case next_codepoint(%{state | cursor: v}) do
{:ok, s} -> loop_fn.(loop_fn, s)
{:fail, _} -> {:fail, state}
end
end
end)
end).(state) do
{:ok, s} -> loop_fn.(loop_fn, s)
{:fail, s} -> {:ok, %{s | cursor: state.cursor}}
end
end)
end)}
end
end
defp r_mark_regions(%Runtime{} = state) do
case (fn state ->
{:ok, put_in(state.vars[:p1], state.limit)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_try(state, fn state ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.eq_s(state, "גע"))
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
snowball_or(state,
fn state ->
snowball_or(state,
fn state ->
lift(state, Runtime.eq_s(state, "לט"))
end,
fn state ->
lift(state, Runtime.eq_s(state, "בנ"))
end)
end,
fn state ->
if state.cursor >= state.limit, do: {:ok, state}, else: {:fail, state}
end)
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "GE")}
r -> r
end
end
r -> r
end
end
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_try(state, fn state ->
(fn ->
case Runtime.find_among(state, @a_5) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = s
case result do
1 ->
snowball_or(state,
fn state ->
snowball_or(state,
fn state ->
snowball_or(state,
fn state ->
snowball_test_f(state, fn state ->
case (fn state ->
snowball_or(state,
fn state ->
snowball_or(state,
fn state ->
lift(state, Runtime.eq_s(state, "צוגנ"))
end,
fn state ->
lift(state, Runtime.eq_s(state, "צוקט"))
end)
end,
fn state ->
lift(state, Runtime.eq_s(state, "צוקנ"))
end)
end).(state) do
{:ok, state} ->
if state.cursor >= state.limit, do: {:ok, state}, else: {:fail, state}
r -> r
end
end)
end,
fn state ->
snowball_test_f(state, fn state ->
lift(state, Runtime.eq_s(state, "געבנ"))
end)
end)
end,
fn state ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.eq_s(state, "גע"))
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "GE")}
end
r -> r
end
end
end)
end,
fn state ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.eq_s(state, "צו"))
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "TSU")}
end
r -> r
end
end
end)
_ -> {:ok, s}
end
end
end).()
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
snowball_test_f(state, fn state ->
case (fn state ->
(fn ->
n = 3
Enum.reduce_while(1..max(n, 0)//1, {:ok, state}, fn _, {:ok, s} ->
case next_codepoint(s) do
{:ok, s2} -> {:cont, {:ok, s2}}
{:fail, _} -> {:halt, {:fail, state}}
end
end)
end).()
end).(state) do
{:ok, state} ->
{:ok, put_in(state.vars[:x], state.cursor)}
r -> r
end
end)
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_try(state, fn state ->
(fn ->
case Runtime.find_among(state, @a_6) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = s
case result do
1 ->
{:ok, state}
_ -> {:ok, s}
end
end
end).()
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
case (fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
case (fn state ->
lift(state, Runtime.in_grouping(state, @g_consonant))
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.in_grouping(state, @g_consonant))
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.in_grouping(state, @g_consonant))
end).(state) do
{:ok, state} ->
{:ok, put_in(state.vars[:p1], state.cursor)}
r -> r
end
r -> r
end
r -> r
end
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end).(state) do
{:ok, state} ->
case (fn state ->
case Runtime.go_out_grouping(state, @g_vowel) do
:fail -> {:fail, state}
%Runtime{} = s -> next_codepoint(s)
end
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.go_in_grouping(state, @g_vowel))
end).(state) do
{:ok, state} ->
{:ok, put_in(state.vars[:p1], state.cursor)}
r -> r
end
r -> r
end
r -> r
end
end).(state) do
{:ok, state} ->
{:ok, snowball_try(state, fn state ->
case (fn state ->
if state.vars[:p1] < state.vars[:x], do: {:ok, state}, else: {:fail, state}
end).(state) do
{:ok, state} ->
{:ok, put_in(state.vars[:p1], state.vars[:x])}
r -> r
end
end)}
r -> r
end
end
r -> r
end
end
end
end
end
defp r_stem(%Runtime{} = state) do
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
r_prelude(state)
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
r_mark_regions(state)
end)}
end).(state) do
{:ok, state} ->
(fn state ->
old_cursor = state.cursor
old_lb = state.limit_backward
state = %{state | cursor: state.limit, limit_backward: old_cursor}
{tag, s} = (fn state ->
{:ok, snowball_do_b(state, fn state ->
r_standard_suffix(state)
end)}
end).(state)
{tag, %{s | cursor: old_cursor, limit_backward: old_lb}}
end).(state)
end
end
end
end