You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

english_stemmer.go 25KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341
  1. //! This file was generated automatically by the Snowball to Go compiler
  2. //! http://snowballstem.org/
  3. package english
  4. import (
  5. snowballRuntime "github.com/blevesearch/snowballstem"
  6. )
  7. var A_0 = []*snowballRuntime.Among{
  8. {Str: "arsen", A: -1, B: -1, F: nil},
  9. {Str: "commun", A: -1, B: -1, F: nil},
  10. {Str: "gener", A: -1, B: -1, F: nil},
  11. }
  12. var A_1 = []*snowballRuntime.Among{
  13. {Str: "'", A: -1, B: 1, F: nil},
  14. {Str: "'s'", A: 0, B: 1, F: nil},
  15. {Str: "'s", A: -1, B: 1, F: nil},
  16. }
  17. var A_2 = []*snowballRuntime.Among{
  18. {Str: "ied", A: -1, B: 2, F: nil},
  19. {Str: "s", A: -1, B: 3, F: nil},
  20. {Str: "ies", A: 1, B: 2, F: nil},
  21. {Str: "sses", A: 1, B: 1, F: nil},
  22. {Str: "ss", A: 1, B: -1, F: nil},
  23. {Str: "us", A: 1, B: -1, F: nil},
  24. }
  25. var A_3 = []*snowballRuntime.Among{
  26. {Str: "", A: -1, B: 3, F: nil},
  27. {Str: "bb", A: 0, B: 2, F: nil},
  28. {Str: "dd", A: 0, B: 2, F: nil},
  29. {Str: "ff", A: 0, B: 2, F: nil},
  30. {Str: "gg", A: 0, B: 2, F: nil},
  31. {Str: "bl", A: 0, B: 1, F: nil},
  32. {Str: "mm", A: 0, B: 2, F: nil},
  33. {Str: "nn", A: 0, B: 2, F: nil},
  34. {Str: "pp", A: 0, B: 2, F: nil},
  35. {Str: "rr", A: 0, B: 2, F: nil},
  36. {Str: "at", A: 0, B: 1, F: nil},
  37. {Str: "tt", A: 0, B: 2, F: nil},
  38. {Str: "iz", A: 0, B: 1, F: nil},
  39. }
  40. var A_4 = []*snowballRuntime.Among{
  41. {Str: "ed", A: -1, B: 2, F: nil},
  42. {Str: "eed", A: 0, B: 1, F: nil},
  43. {Str: "ing", A: -1, B: 2, F: nil},
  44. {Str: "edly", A: -1, B: 2, F: nil},
  45. {Str: "eedly", A: 3, B: 1, F: nil},
  46. {Str: "ingly", A: -1, B: 2, F: nil},
  47. }
  48. var A_5 = []*snowballRuntime.Among{
  49. {Str: "anci", A: -1, B: 3, F: nil},
  50. {Str: "enci", A: -1, B: 2, F: nil},
  51. {Str: "ogi", A: -1, B: 13, F: nil},
  52. {Str: "li", A: -1, B: 16, F: nil},
  53. {Str: "bli", A: 3, B: 12, F: nil},
  54. {Str: "abli", A: 4, B: 4, F: nil},
  55. {Str: "alli", A: 3, B: 8, F: nil},
  56. {Str: "fulli", A: 3, B: 14, F: nil},
  57. {Str: "lessli", A: 3, B: 15, F: nil},
  58. {Str: "ousli", A: 3, B: 10, F: nil},
  59. {Str: "entli", A: 3, B: 5, F: nil},
  60. {Str: "aliti", A: -1, B: 8, F: nil},
  61. {Str: "biliti", A: -1, B: 12, F: nil},
  62. {Str: "iviti", A: -1, B: 11, F: nil},
  63. {Str: "tional", A: -1, B: 1, F: nil},
  64. {Str: "ational", A: 14, B: 7, F: nil},
  65. {Str: "alism", A: -1, B: 8, F: nil},
  66. {Str: "ation", A: -1, B: 7, F: nil},
  67. {Str: "ization", A: 17, B: 6, F: nil},
  68. {Str: "izer", A: -1, B: 6, F: nil},
  69. {Str: "ator", A: -1, B: 7, F: nil},
  70. {Str: "iveness", A: -1, B: 11, F: nil},
  71. {Str: "fulness", A: -1, B: 9, F: nil},
  72. {Str: "ousness", A: -1, B: 10, F: nil},
  73. }
  74. var A_6 = []*snowballRuntime.Among{
  75. {Str: "icate", A: -1, B: 4, F: nil},
  76. {Str: "ative", A: -1, B: 6, F: nil},
  77. {Str: "alize", A: -1, B: 3, F: nil},
  78. {Str: "iciti", A: -1, B: 4, F: nil},
  79. {Str: "ical", A: -1, B: 4, F: nil},
  80. {Str: "tional", A: -1, B: 1, F: nil},
  81. {Str: "ational", A: 5, B: 2, F: nil},
  82. {Str: "ful", A: -1, B: 5, F: nil},
  83. {Str: "ness", A: -1, B: 5, F: nil},
  84. }
  85. var A_7 = []*snowballRuntime.Among{
  86. {Str: "ic", A: -1, B: 1, F: nil},
  87. {Str: "ance", A: -1, B: 1, F: nil},
  88. {Str: "ence", A: -1, B: 1, F: nil},
  89. {Str: "able", A: -1, B: 1, F: nil},
  90. {Str: "ible", A: -1, B: 1, F: nil},
  91. {Str: "ate", A: -1, B: 1, F: nil},
  92. {Str: "ive", A: -1, B: 1, F: nil},
  93. {Str: "ize", A: -1, B: 1, F: nil},
  94. {Str: "iti", A: -1, B: 1, F: nil},
  95. {Str: "al", A: -1, B: 1, F: nil},
  96. {Str: "ism", A: -1, B: 1, F: nil},
  97. {Str: "ion", A: -1, B: 2, F: nil},
  98. {Str: "er", A: -1, B: 1, F: nil},
  99. {Str: "ous", A: -1, B: 1, F: nil},
  100. {Str: "ant", A: -1, B: 1, F: nil},
  101. {Str: "ent", A: -1, B: 1, F: nil},
  102. {Str: "ment", A: 15, B: 1, F: nil},
  103. {Str: "ement", A: 16, B: 1, F: nil},
  104. }
  105. var A_8 = []*snowballRuntime.Among{
  106. {Str: "e", A: -1, B: 1, F: nil},
  107. {Str: "l", A: -1, B: 2, F: nil},
  108. }
  109. var A_9 = []*snowballRuntime.Among{
  110. {Str: "succeed", A: -1, B: -1, F: nil},
  111. {Str: "proceed", A: -1, B: -1, F: nil},
  112. {Str: "exceed", A: -1, B: -1, F: nil},
  113. {Str: "canning", A: -1, B: -1, F: nil},
  114. {Str: "inning", A: -1, B: -1, F: nil},
  115. {Str: "earring", A: -1, B: -1, F: nil},
  116. {Str: "herring", A: -1, B: -1, F: nil},
  117. {Str: "outing", A: -1, B: -1, F: nil},
  118. }
  119. var A_10 = []*snowballRuntime.Among{
  120. {Str: "andes", A: -1, B: -1, F: nil},
  121. {Str: "atlas", A: -1, B: -1, F: nil},
  122. {Str: "bias", A: -1, B: -1, F: nil},
  123. {Str: "cosmos", A: -1, B: -1, F: nil},
  124. {Str: "dying", A: -1, B: 3, F: nil},
  125. {Str: "early", A: -1, B: 9, F: nil},
  126. {Str: "gently", A: -1, B: 7, F: nil},
  127. {Str: "howe", A: -1, B: -1, F: nil},
  128. {Str: "idly", A: -1, B: 6, F: nil},
  129. {Str: "lying", A: -1, B: 4, F: nil},
  130. {Str: "news", A: -1, B: -1, F: nil},
  131. {Str: "only", A: -1, B: 10, F: nil},
  132. {Str: "singly", A: -1, B: 11, F: nil},
  133. {Str: "skies", A: -1, B: 2, F: nil},
  134. {Str: "skis", A: -1, B: 1, F: nil},
  135. {Str: "sky", A: -1, B: -1, F: nil},
  136. {Str: "tying", A: -1, B: 5, F: nil},
  137. {Str: "ugly", A: -1, B: 8, F: nil},
  138. }
  139. var G_v = []byte{17, 65, 16, 1}
  140. var G_v_WXY = []byte{1, 17, 65, 208, 1}
  141. var G_valid_LI = []byte{55, 141, 2}
  142. type Context struct {
  143. b_Y_found bool
  144. i_p2 int
  145. i_p1 int
  146. }
  147. func r_prelude(env *snowballRuntime.Env, ctx interface{}) bool {
  148. context := ctx.(*Context)
  149. _ = context
  150. // (, line 25
  151. // unset Y_found, line 26
  152. context.b_Y_found = false
  153. // do, line 27
  154. var v_1 = env.Cursor
  155. lab0:
  156. for {
  157. // (, line 27
  158. // [, line 27
  159. env.Bra = env.Cursor
  160. // literal, line 27
  161. if !env.EqS("'") {
  162. break lab0
  163. }
  164. // ], line 27
  165. env.Ket = env.Cursor
  166. // delete, line 27
  167. if !env.SliceDel() {
  168. return false
  169. }
  170. break lab0
  171. }
  172. env.Cursor = v_1
  173. // do, line 28
  174. var v_2 = env.Cursor
  175. lab1:
  176. for {
  177. // (, line 28
  178. // [, line 28
  179. env.Bra = env.Cursor
  180. // literal, line 28
  181. if !env.EqS("y") {
  182. break lab1
  183. }
  184. // ], line 28
  185. env.Ket = env.Cursor
  186. // <-, line 28
  187. if !env.SliceFrom("Y") {
  188. return false
  189. }
  190. // set Y_found, line 28
  191. context.b_Y_found = true
  192. break lab1
  193. }
  194. env.Cursor = v_2
  195. // do, line 29
  196. var v_3 = env.Cursor
  197. lab2:
  198. for {
  199. // repeat, line 29
  200. replab3:
  201. for {
  202. var v_4 = env.Cursor
  203. lab4:
  204. for range [2]struct{}{} {
  205. // (, line 29
  206. // goto, line 29
  207. golab5:
  208. for {
  209. var v_5 = env.Cursor
  210. lab6:
  211. for {
  212. // (, line 29
  213. if !env.InGrouping(G_v, 97, 121) {
  214. break lab6
  215. }
  216. // [, line 29
  217. env.Bra = env.Cursor
  218. // literal, line 29
  219. if !env.EqS("y") {
  220. break lab6
  221. }
  222. // ], line 29
  223. env.Ket = env.Cursor
  224. env.Cursor = v_5
  225. break golab5
  226. }
  227. env.Cursor = v_5
  228. if env.Cursor >= env.Limit {
  229. break lab4
  230. }
  231. env.NextChar()
  232. }
  233. // <-, line 29
  234. if !env.SliceFrom("Y") {
  235. return false
  236. }
  237. // set Y_found, line 29
  238. context.b_Y_found = true
  239. continue replab3
  240. }
  241. env.Cursor = v_4
  242. break replab3
  243. }
  244. break lab2
  245. }
  246. env.Cursor = v_3
  247. return true
  248. }
  249. func r_mark_regions(env *snowballRuntime.Env, ctx interface{}) bool {
  250. context := ctx.(*Context)
  251. _ = context
  252. // (, line 32
  253. context.i_p1 = env.Limit
  254. context.i_p2 = env.Limit
  255. // do, line 35
  256. var v_1 = env.Cursor
  257. lab0:
  258. for {
  259. // (, line 35
  260. // or, line 41
  261. lab1:
  262. for {
  263. var v_2 = env.Cursor
  264. lab2:
  265. for {
  266. // among, line 36
  267. if env.FindAmong(A_0, context) == 0 {
  268. break lab2
  269. }
  270. break lab1
  271. }
  272. env.Cursor = v_2
  273. // (, line 41
  274. // gopast, line 41
  275. golab3:
  276. for {
  277. lab4:
  278. for {
  279. if !env.InGrouping(G_v, 97, 121) {
  280. break lab4
  281. }
  282. break golab3
  283. }
  284. if env.Cursor >= env.Limit {
  285. break lab0
  286. }
  287. env.NextChar()
  288. }
  289. // gopast, line 41
  290. golab5:
  291. for {
  292. lab6:
  293. for {
  294. if !env.OutGrouping(G_v, 97, 121) {
  295. break lab6
  296. }
  297. break golab5
  298. }
  299. if env.Cursor >= env.Limit {
  300. break lab0
  301. }
  302. env.NextChar()
  303. }
  304. break lab1
  305. }
  306. // setmark p1, line 42
  307. context.i_p1 = env.Cursor
  308. // gopast, line 43
  309. golab7:
  310. for {
  311. lab8:
  312. for {
  313. if !env.InGrouping(G_v, 97, 121) {
  314. break lab8
  315. }
  316. break golab7
  317. }
  318. if env.Cursor >= env.Limit {
  319. break lab0
  320. }
  321. env.NextChar()
  322. }
  323. // gopast, line 43
  324. golab9:
  325. for {
  326. lab10:
  327. for {
  328. if !env.OutGrouping(G_v, 97, 121) {
  329. break lab10
  330. }
  331. break golab9
  332. }
  333. if env.Cursor >= env.Limit {
  334. break lab0
  335. }
  336. env.NextChar()
  337. }
  338. // setmark p2, line 43
  339. context.i_p2 = env.Cursor
  340. break lab0
  341. }
  342. env.Cursor = v_1
  343. return true
  344. }
  345. func r_shortv(env *snowballRuntime.Env, ctx interface{}) bool {
  346. context := ctx.(*Context)
  347. _ = context
  348. // (, line 49
  349. // or, line 51
  350. lab0:
  351. for {
  352. var v_1 = env.Limit - env.Cursor
  353. lab1:
  354. for {
  355. // (, line 50
  356. if !env.OutGroupingB(G_v_WXY, 89, 121) {
  357. break lab1
  358. }
  359. if !env.InGroupingB(G_v, 97, 121) {
  360. break lab1
  361. }
  362. if !env.OutGroupingB(G_v, 97, 121) {
  363. break lab1
  364. }
  365. break lab0
  366. }
  367. env.Cursor = env.Limit - v_1
  368. // (, line 52
  369. if !env.OutGroupingB(G_v, 97, 121) {
  370. return false
  371. }
  372. if !env.InGroupingB(G_v, 97, 121) {
  373. return false
  374. }
  375. // atlimit, line 52
  376. if env.Cursor > env.LimitBackward {
  377. return false
  378. }
  379. break lab0
  380. }
  381. return true
  382. }
  383. func r_R1(env *snowballRuntime.Env, ctx interface{}) bool {
  384. context := ctx.(*Context)
  385. _ = context
  386. if !(context.i_p1 <= env.Cursor) {
  387. return false
  388. }
  389. return true
  390. }
  391. func r_R2(env *snowballRuntime.Env, ctx interface{}) bool {
  392. context := ctx.(*Context)
  393. _ = context
  394. if !(context.i_p2 <= env.Cursor) {
  395. return false
  396. }
  397. return true
  398. }
  399. func r_Step_1a(env *snowballRuntime.Env, ctx interface{}) bool {
  400. context := ctx.(*Context)
  401. _ = context
  402. var among_var int32
  403. // (, line 58
  404. // try, line 59
  405. var v_1 = env.Limit - env.Cursor
  406. lab0:
  407. for {
  408. // (, line 59
  409. // [, line 60
  410. env.Ket = env.Cursor
  411. // substring, line 60
  412. among_var = env.FindAmongB(A_1, context)
  413. if among_var == 0 {
  414. env.Cursor = env.Limit - v_1
  415. break lab0
  416. }
  417. // ], line 60
  418. env.Bra = env.Cursor
  419. if among_var == 0 {
  420. env.Cursor = env.Limit - v_1
  421. break lab0
  422. } else if among_var == 1 {
  423. // (, line 62
  424. // delete, line 62
  425. if !env.SliceDel() {
  426. return false
  427. }
  428. }
  429. break lab0
  430. }
  431. // [, line 65
  432. env.Ket = env.Cursor
  433. // substring, line 65
  434. among_var = env.FindAmongB(A_2, context)
  435. if among_var == 0 {
  436. return false
  437. }
  438. // ], line 65
  439. env.Bra = env.Cursor
  440. if among_var == 0 {
  441. return false
  442. } else if among_var == 1 {
  443. // (, line 66
  444. // <-, line 66
  445. if !env.SliceFrom("ss") {
  446. return false
  447. }
  448. } else if among_var == 2 {
  449. // (, line 68
  450. // or, line 68
  451. lab1:
  452. for {
  453. var v_2 = env.Limit - env.Cursor
  454. lab2:
  455. for {
  456. // (, line 68
  457. {
  458. // hop, line 68
  459. var c = env.ByteIndexForHop(-(2))
  460. if int32(env.LimitBackward) > c || c > int32(env.Limit) {
  461. break lab2
  462. }
  463. env.Cursor = int(c)
  464. }
  465. // <-, line 68
  466. if !env.SliceFrom("i") {
  467. return false
  468. }
  469. break lab1
  470. }
  471. env.Cursor = env.Limit - v_2
  472. // <-, line 68
  473. if !env.SliceFrom("ie") {
  474. return false
  475. }
  476. break lab1
  477. }
  478. } else if among_var == 3 {
  479. // (, line 69
  480. // next, line 69
  481. if env.Cursor <= env.LimitBackward {
  482. return false
  483. }
  484. env.PrevChar()
  485. // gopast, line 69
  486. golab3:
  487. for {
  488. lab4:
  489. for {
  490. if !env.InGroupingB(G_v, 97, 121) {
  491. break lab4
  492. }
  493. break golab3
  494. }
  495. if env.Cursor <= env.LimitBackward {
  496. return false
  497. }
  498. env.PrevChar()
  499. }
  500. // delete, line 69
  501. if !env.SliceDel() {
  502. return false
  503. }
  504. }
  505. return true
  506. }
  507. func r_Step_1b(env *snowballRuntime.Env, ctx interface{}) bool {
  508. context := ctx.(*Context)
  509. _ = context
  510. var among_var int32
  511. // (, line 74
  512. // [, line 75
  513. env.Ket = env.Cursor
  514. // substring, line 75
  515. among_var = env.FindAmongB(A_4, context)
  516. if among_var == 0 {
  517. return false
  518. }
  519. // ], line 75
  520. env.Bra = env.Cursor
  521. if among_var == 0 {
  522. return false
  523. } else if among_var == 1 {
  524. // (, line 77
  525. // call R1, line 77
  526. if !r_R1(env, context) {
  527. return false
  528. }
  529. // <-, line 77
  530. if !env.SliceFrom("ee") {
  531. return false
  532. }
  533. } else if among_var == 2 {
  534. // (, line 79
  535. // test, line 80
  536. var v_1 = env.Limit - env.Cursor
  537. // gopast, line 80
  538. golab0:
  539. for {
  540. lab1:
  541. for {
  542. if !env.InGroupingB(G_v, 97, 121) {
  543. break lab1
  544. }
  545. break golab0
  546. }
  547. if env.Cursor <= env.LimitBackward {
  548. return false
  549. }
  550. env.PrevChar()
  551. }
  552. env.Cursor = env.Limit - v_1
  553. // delete, line 80
  554. if !env.SliceDel() {
  555. return false
  556. }
  557. // test, line 81
  558. var v_3 = env.Limit - env.Cursor
  559. // substring, line 81
  560. among_var = env.FindAmongB(A_3, context)
  561. if among_var == 0 {
  562. return false
  563. }
  564. env.Cursor = env.Limit - v_3
  565. if among_var == 0 {
  566. return false
  567. } else if among_var == 1 {
  568. // (, line 83
  569. {
  570. // <+, line 83
  571. var c = env.Cursor
  572. bra, ket := env.Cursor, env.Cursor
  573. env.Insert(bra, ket, "e")
  574. env.Cursor = c
  575. }
  576. } else if among_var == 2 {
  577. // (, line 86
  578. // [, line 86
  579. env.Ket = env.Cursor
  580. // next, line 86
  581. if env.Cursor <= env.LimitBackward {
  582. return false
  583. }
  584. env.PrevChar()
  585. // ], line 86
  586. env.Bra = env.Cursor
  587. // delete, line 86
  588. if !env.SliceDel() {
  589. return false
  590. }
  591. } else if among_var == 3 {
  592. // (, line 87
  593. // atmark, line 87
  594. if env.Cursor != context.i_p1 {
  595. return false
  596. }
  597. // test, line 87
  598. var v_4 = env.Limit - env.Cursor
  599. // call shortv, line 87
  600. if !r_shortv(env, context) {
  601. return false
  602. }
  603. env.Cursor = env.Limit - v_4
  604. {
  605. // <+, line 87
  606. var c = env.Cursor
  607. bra, ket := env.Cursor, env.Cursor
  608. env.Insert(bra, ket, "e")
  609. env.Cursor = c
  610. }
  611. }
  612. }
  613. return true
  614. }
  615. func r_Step_1c(env *snowballRuntime.Env, ctx interface{}) bool {
  616. context := ctx.(*Context)
  617. _ = context
  618. // (, line 93
  619. // [, line 94
  620. env.Ket = env.Cursor
  621. // or, line 94
  622. lab0:
  623. for {
  624. var v_1 = env.Limit - env.Cursor
  625. lab1:
  626. for {
  627. // literal, line 94
  628. if !env.EqSB("y") {
  629. break lab1
  630. }
  631. break lab0
  632. }
  633. env.Cursor = env.Limit - v_1
  634. // literal, line 94
  635. if !env.EqSB("Y") {
  636. return false
  637. }
  638. break lab0
  639. }
  640. // ], line 94
  641. env.Bra = env.Cursor
  642. if !env.OutGroupingB(G_v, 97, 121) {
  643. return false
  644. }
  645. // not, line 95
  646. var v_2 = env.Limit - env.Cursor
  647. lab2:
  648. for {
  649. // atlimit, line 95
  650. if env.Cursor > env.LimitBackward {
  651. break lab2
  652. }
  653. return false
  654. }
  655. env.Cursor = env.Limit - v_2
  656. // <-, line 96
  657. if !env.SliceFrom("i") {
  658. return false
  659. }
  660. return true
  661. }
  662. func r_Step_2(env *snowballRuntime.Env, ctx interface{}) bool {
  663. context := ctx.(*Context)
  664. _ = context
  665. var among_var int32
  666. // (, line 99
  667. // [, line 100
  668. env.Ket = env.Cursor
  669. // substring, line 100
  670. among_var = env.FindAmongB(A_5, context)
  671. if among_var == 0 {
  672. return false
  673. }
  674. // ], line 100
  675. env.Bra = env.Cursor
  676. // call R1, line 100
  677. if !r_R1(env, context) {
  678. return false
  679. }
  680. if among_var == 0 {
  681. return false
  682. } else if among_var == 1 {
  683. // (, line 101
  684. // <-, line 101
  685. if !env.SliceFrom("tion") {
  686. return false
  687. }
  688. } else if among_var == 2 {
  689. // (, line 102
  690. // <-, line 102
  691. if !env.SliceFrom("ence") {
  692. return false
  693. }
  694. } else if among_var == 3 {
  695. // (, line 103
  696. // <-, line 103
  697. if !env.SliceFrom("ance") {
  698. return false
  699. }
  700. } else if among_var == 4 {
  701. // (, line 104
  702. // <-, line 104
  703. if !env.SliceFrom("able") {
  704. return false
  705. }
  706. } else if among_var == 5 {
  707. // (, line 105
  708. // <-, line 105
  709. if !env.SliceFrom("ent") {
  710. return false
  711. }
  712. } else if among_var == 6 {
  713. // (, line 107
  714. // <-, line 107
  715. if !env.SliceFrom("ize") {
  716. return false
  717. }
  718. } else if among_var == 7 {
  719. // (, line 109
  720. // <-, line 109
  721. if !env.SliceFrom("ate") {
  722. return false
  723. }
  724. } else if among_var == 8 {
  725. // (, line 111
  726. // <-, line 111
  727. if !env.SliceFrom("al") {
  728. return false
  729. }
  730. } else if among_var == 9 {
  731. // (, line 112
  732. // <-, line 112
  733. if !env.SliceFrom("ful") {
  734. return false
  735. }
  736. } else if among_var == 10 {
  737. // (, line 114
  738. // <-, line 114
  739. if !env.SliceFrom("ous") {
  740. return false
  741. }
  742. } else if among_var == 11 {
  743. // (, line 116
  744. // <-, line 116
  745. if !env.SliceFrom("ive") {
  746. return false
  747. }
  748. } else if among_var == 12 {
  749. // (, line 118
  750. // <-, line 118
  751. if !env.SliceFrom("ble") {
  752. return false
  753. }
  754. } else if among_var == 13 {
  755. // (, line 119
  756. // literal, line 119
  757. if !env.EqSB("l") {
  758. return false
  759. }
  760. // <-, line 119
  761. if !env.SliceFrom("og") {
  762. return false
  763. }
  764. } else if among_var == 14 {
  765. // (, line 120
  766. // <-, line 120
  767. if !env.SliceFrom("ful") {
  768. return false
  769. }
  770. } else if among_var == 15 {
  771. // (, line 121
  772. // <-, line 121
  773. if !env.SliceFrom("less") {
  774. return false
  775. }
  776. } else if among_var == 16 {
  777. // (, line 122
  778. if !env.InGroupingB(G_valid_LI, 99, 116) {
  779. return false
  780. }
  781. // delete, line 122
  782. if !env.SliceDel() {
  783. return false
  784. }
  785. }
  786. return true
  787. }
  788. func r_Step_3(env *snowballRuntime.Env, ctx interface{}) bool {
  789. context := ctx.(*Context)
  790. _ = context
  791. var among_var int32
  792. // (, line 126
  793. // [, line 127
  794. env.Ket = env.Cursor
  795. // substring, line 127
  796. among_var = env.FindAmongB(A_6, context)
  797. if among_var == 0 {
  798. return false
  799. }
  800. // ], line 127
  801. env.Bra = env.Cursor
  802. // call R1, line 127
  803. if !r_R1(env, context) {
  804. return false
  805. }
  806. if among_var == 0 {
  807. return false
  808. } else if among_var == 1 {
  809. // (, line 128
  810. // <-, line 128
  811. if !env.SliceFrom("tion") {
  812. return false
  813. }
  814. } else if among_var == 2 {
  815. // (, line 129
  816. // <-, line 129
  817. if !env.SliceFrom("ate") {
  818. return false
  819. }
  820. } else if among_var == 3 {
  821. // (, line 130
  822. // <-, line 130
  823. if !env.SliceFrom("al") {
  824. return false
  825. }
  826. } else if among_var == 4 {
  827. // (, line 132
  828. // <-, line 132
  829. if !env.SliceFrom("ic") {
  830. return false
  831. }
  832. } else if among_var == 5 {
  833. // (, line 134
  834. // delete, line 134
  835. if !env.SliceDel() {
  836. return false
  837. }
  838. } else if among_var == 6 {
  839. // (, line 136
  840. // call R2, line 136
  841. if !r_R2(env, context) {
  842. return false
  843. }
  844. // delete, line 136
  845. if !env.SliceDel() {
  846. return false
  847. }
  848. }
  849. return true
  850. }
  851. func r_Step_4(env *snowballRuntime.Env, ctx interface{}) bool {
  852. context := ctx.(*Context)
  853. _ = context
  854. var among_var int32
  855. // (, line 140
  856. // [, line 141
  857. env.Ket = env.Cursor
  858. // substring, line 141
  859. among_var = env.FindAmongB(A_7, context)
  860. if among_var == 0 {
  861. return false
  862. }
  863. // ], line 141
  864. env.Bra = env.Cursor
  865. // call R2, line 141
  866. if !r_R2(env, context) {
  867. return false
  868. }
  869. if among_var == 0 {
  870. return false
  871. } else if among_var == 1 {
  872. // (, line 144
  873. // delete, line 144
  874. if !env.SliceDel() {
  875. return false
  876. }
  877. } else if among_var == 2 {
  878. // (, line 145
  879. // or, line 145
  880. lab0:
  881. for {
  882. var v_1 = env.Limit - env.Cursor
  883. lab1:
  884. for {
  885. // literal, line 145
  886. if !env.EqSB("s") {
  887. break lab1
  888. }
  889. break lab0
  890. }
  891. env.Cursor = env.Limit - v_1
  892. // literal, line 145
  893. if !env.EqSB("t") {
  894. return false
  895. }
  896. break lab0
  897. }
  898. // delete, line 145
  899. if !env.SliceDel() {
  900. return false
  901. }
  902. }
  903. return true
  904. }
  905. func r_Step_5(env *snowballRuntime.Env, ctx interface{}) bool {
  906. context := ctx.(*Context)
  907. _ = context
  908. var among_var int32
  909. // (, line 149
  910. // [, line 150
  911. env.Ket = env.Cursor
  912. // substring, line 150
  913. among_var = env.FindAmongB(A_8, context)
  914. if among_var == 0 {
  915. return false
  916. }
  917. // ], line 150
  918. env.Bra = env.Cursor
  919. if among_var == 0 {
  920. return false
  921. } else if among_var == 1 {
  922. // (, line 151
  923. // or, line 151
  924. lab0:
  925. for {
  926. var v_1 = env.Limit - env.Cursor
  927. lab1:
  928. for {
  929. // call R2, line 151
  930. if !r_R2(env, context) {
  931. break lab1
  932. }
  933. break lab0
  934. }
  935. env.Cursor = env.Limit - v_1
  936. // (, line 151
  937. // call R1, line 151
  938. if !r_R1(env, context) {
  939. return false
  940. }
  941. // not, line 151
  942. var v_2 = env.Limit - env.Cursor
  943. lab2:
  944. for {
  945. // call shortv, line 151
  946. if !r_shortv(env, context) {
  947. break lab2
  948. }
  949. return false
  950. }
  951. env.Cursor = env.Limit - v_2
  952. break lab0
  953. }
  954. // delete, line 151
  955. if !env.SliceDel() {
  956. return false
  957. }
  958. } else if among_var == 2 {
  959. // (, line 152
  960. // call R2, line 152
  961. if !r_R2(env, context) {
  962. return false
  963. }
  964. // literal, line 152
  965. if !env.EqSB("l") {
  966. return false
  967. }
  968. // delete, line 152
  969. if !env.SliceDel() {
  970. return false
  971. }
  972. }
  973. return true
  974. }
  975. func r_exception2(env *snowballRuntime.Env, ctx interface{}) bool {
  976. context := ctx.(*Context)
  977. _ = context
  978. // (, line 156
  979. // [, line 158
  980. env.Ket = env.Cursor
  981. // substring, line 158
  982. if env.FindAmongB(A_9, context) == 0 {
  983. return false
  984. }
  985. // ], line 158
  986. env.Bra = env.Cursor
  987. // atlimit, line 158
  988. if env.Cursor > env.LimitBackward {
  989. return false
  990. }
  991. return true
  992. }
  993. func r_exception1(env *snowballRuntime.Env, ctx interface{}) bool {
  994. context := ctx.(*Context)
  995. _ = context
  996. var among_var int32
  997. // (, line 168
  998. // [, line 170
  999. env.Bra = env.Cursor
  1000. // substring, line 170
  1001. among_var = env.FindAmong(A_10, context)
  1002. if among_var == 0 {
  1003. return false
  1004. }
  1005. // ], line 170
  1006. env.Ket = env.Cursor
  1007. // atlimit, line 170
  1008. if env.Cursor < env.Limit {
  1009. return false
  1010. }
  1011. if among_var == 0 {
  1012. return false
  1013. } else if among_var == 1 {
  1014. // (, line 174
  1015. // <-, line 174
  1016. if !env.SliceFrom("ski") {
  1017. return false
  1018. }
  1019. } else if among_var == 2 {
  1020. // (, line 175
  1021. // <-, line 175
  1022. if !env.SliceFrom("sky") {
  1023. return false
  1024. }
  1025. } else if among_var == 3 {
  1026. // (, line 176
  1027. // <-, line 176
  1028. if !env.SliceFrom("die") {
  1029. return false
  1030. }
  1031. } else if among_var == 4 {
  1032. // (, line 177
  1033. // <-, line 177
  1034. if !env.SliceFrom("lie") {
  1035. return false
  1036. }
  1037. } else if among_var == 5 {
  1038. // (, line 178
  1039. // <-, line 178
  1040. if !env.SliceFrom("tie") {
  1041. return false
  1042. }
  1043. } else if among_var == 6 {
  1044. // (, line 182
  1045. // <-, line 182
  1046. if !env.SliceFrom("idl") {
  1047. return false
  1048. }
  1049. } else if among_var == 7 {
  1050. // (, line 183
  1051. // <-, line 183
  1052. if !env.SliceFrom("gentl") {
  1053. return false
  1054. }
  1055. } else if among_var == 8 {
  1056. // (, line 184
  1057. // <-, line 184
  1058. if !env.SliceFrom("ugli") {
  1059. return false
  1060. }
  1061. } else if among_var == 9 {
  1062. // (, line 185
  1063. // <-, line 185
  1064. if !env.SliceFrom("earli") {
  1065. return false
  1066. }
  1067. } else if among_var == 10 {
  1068. // (, line 186
  1069. // <-, line 186
  1070. if !env.SliceFrom("onli") {
  1071. return false
  1072. }
  1073. } else if among_var == 11 {
  1074. // (, line 187
  1075. // <-, line 187
  1076. if !env.SliceFrom("singl") {
  1077. return false
  1078. }
  1079. }
  1080. return true
  1081. }
  1082. func r_postlude(env *snowballRuntime.Env, ctx interface{}) bool {
  1083. context := ctx.(*Context)
  1084. _ = context
  1085. // (, line 203
  1086. // Boolean test Y_found, line 203
  1087. if !context.b_Y_found {
  1088. return false
  1089. }
  1090. // repeat, line 203
  1091. replab0:
  1092. for {
  1093. var v_1 = env.Cursor
  1094. lab1:
  1095. for range [2]struct{}{} {
  1096. // (, line 203
  1097. // goto, line 203
  1098. golab2:
  1099. for {
  1100. var v_2 = env.Cursor
  1101. lab3:
  1102. for {
  1103. // (, line 203
  1104. // [, line 203
  1105. env.Bra = env.Cursor
  1106. // literal, line 203
  1107. if !env.EqS("Y") {
  1108. break lab3
  1109. }
  1110. // ], line 203
  1111. env.Ket = env.Cursor
  1112. env.Cursor = v_2
  1113. break golab2
  1114. }
  1115. env.Cursor = v_2
  1116. if env.Cursor >= env.Limit {
  1117. break lab1
  1118. }
  1119. env.NextChar()
  1120. }
  1121. // <-, line 203
  1122. if !env.SliceFrom("y") {
  1123. return false
  1124. }
  1125. continue replab0
  1126. }
  1127. env.Cursor = v_1
  1128. break replab0
  1129. }
  1130. return true
  1131. }
  1132. func Stem(env *snowballRuntime.Env) bool {
  1133. var context = &Context{
  1134. b_Y_found: false,
  1135. i_p2: 0,
  1136. i_p1: 0,
  1137. }
  1138. _ = context
  1139. // (, line 205
  1140. // or, line 207
  1141. lab0:
  1142. for {
  1143. var v_1 = env.Cursor
  1144. lab1:
  1145. for {
  1146. // call exception1, line 207
  1147. if !r_exception1(env, context) {
  1148. break lab1
  1149. }
  1150. break lab0
  1151. }
  1152. env.Cursor = v_1
  1153. lab2:
  1154. for {
  1155. // not, line 208
  1156. var v_2 = env.Cursor
  1157. lab3:
  1158. for {
  1159. {
  1160. // hop, line 208
  1161. var c = env.ByteIndexForHop((3))
  1162. if int32(0) > c || c > int32(env.Limit) {
  1163. break lab3
  1164. }
  1165. env.Cursor = int(c)
  1166. }
  1167. break lab2
  1168. }
  1169. env.Cursor = v_2
  1170. break lab0
  1171. }
  1172. env.Cursor = v_1
  1173. // (, line 208
  1174. // do, line 209
  1175. var v_3 = env.Cursor
  1176. lab4:
  1177. for {
  1178. // call prelude, line 209
  1179. if !r_prelude(env, context) {
  1180. break lab4
  1181. }
  1182. break lab4
  1183. }
  1184. env.Cursor = v_3
  1185. // do, line 210
  1186. var v_4 = env.Cursor
  1187. lab5:
  1188. for {
  1189. // call mark_regions, line 210
  1190. if !r_mark_regions(env, context) {
  1191. break lab5
  1192. }
  1193. break lab5
  1194. }
  1195. env.Cursor = v_4
  1196. // backwards, line 211
  1197. env.LimitBackward = env.Cursor
  1198. env.Cursor = env.Limit
  1199. // (, line 211
  1200. // do, line 213
  1201. var v_5 = env.Limit - env.Cursor
  1202. lab6:
  1203. for {
  1204. // call Step_1a, line 213
  1205. if !r_Step_1a(env, context) {
  1206. break lab6
  1207. }
  1208. break lab6
  1209. }
  1210. env.Cursor = env.Limit - v_5
  1211. // or, line 215
  1212. lab7:
  1213. for {
  1214. var v_6 = env.Limit - env.Cursor
  1215. lab8:
  1216. for {
  1217. // call exception2, line 215
  1218. if !r_exception2(env, context) {
  1219. break lab8
  1220. }
  1221. break lab7
  1222. }
  1223. env.Cursor = env.Limit - v_6
  1224. // (, line 215
  1225. // do, line 217
  1226. var v_7 = env.Limit - env.Cursor
  1227. lab9:
  1228. for {
  1229. // call Step_1b, line 217
  1230. if !r_Step_1b(env, context) {
  1231. break lab9
  1232. }
  1233. break lab9
  1234. }
  1235. env.Cursor = env.Limit - v_7
  1236. // do, line 218
  1237. var v_8 = env.Limit - env.Cursor
  1238. lab10:
  1239. for {
  1240. // call Step_1c, line 218
  1241. if !r_Step_1c(env, context) {
  1242. break lab10
  1243. }
  1244. break lab10
  1245. }
  1246. env.Cursor = env.Limit - v_8
  1247. // do, line 220
  1248. var v_9 = env.Limit - env.Cursor
  1249. lab11:
  1250. for {
  1251. // call Step_2, line 220
  1252. if !r_Step_2(env, context) {
  1253. break lab11
  1254. }
  1255. break lab11
  1256. }
  1257. env.Cursor = env.Limit - v_9
  1258. // do, line 221
  1259. var v_10 = env.Limit - env.Cursor
  1260. lab12:
  1261. for {
  1262. // call Step_3, line 221
  1263. if !r_Step_3(env, context) {
  1264. break lab12
  1265. }
  1266. break lab12
  1267. }
  1268. env.Cursor = env.Limit - v_10
  1269. // do, line 222
  1270. var v_11 = env.Limit - env.Cursor
  1271. lab13:
  1272. for {
  1273. // call Step_4, line 222
  1274. if !r_Step_4(env, context) {
  1275. break lab13
  1276. }
  1277. break lab13
  1278. }
  1279. env.Cursor = env.Limit - v_11
  1280. // do, line 224
  1281. var v_12 = env.Limit - env.Cursor
  1282. lab14:
  1283. for {
  1284. // call Step_5, line 224
  1285. if !r_Step_5(env, context) {
  1286. break lab14
  1287. }
  1288. break lab14
  1289. }
  1290. env.Cursor = env.Limit - v_12
  1291. break lab7
  1292. }
  1293. env.Cursor = env.LimitBackward
  1294. // do, line 227
  1295. var v_13 = env.Cursor
  1296. lab15:
  1297. for {
  1298. // call postlude, line 227
  1299. if !r_postlude(env, context) {
  1300. break lab15
  1301. }
  1302. break lab15
  1303. }
  1304. env.Cursor = v_13
  1305. break lab0
  1306. }
  1307. return true
  1308. }