/* deals with -ic-, -full, -ness etc. similar strategy to step3. */ public void PerformStep4(TokenSource source) { if (source.Size == 0) { return; } switch (source.LastChar) { case 'e': if (source.ChangeSuffix("icate", "ic")) { break; } if (source.RemoveSuffix("ative")) { break; } source.ChangeSuffix("alize", "al"); break; case 'i': source.ChangeSuffix("iciti", "ic"); break; case 'l': if (source.ChangeSuffix("ical", "ic")) { break; } source.RemoveSuffix("ful"); break; case 's': source.RemoveSuffix("ness"); break; } }
public void PerformStep5(TokenSource source) { if (source.Size < 2) { return; } switch (source.Buffer[source.Size - 2]) { case 'a': source.RemoveSuffix("al"); return; case 'c': if (source.RemoveSuffix("ance")) { return; } source.RemoveSuffix("ence"); return; case 'e': source.RemoveSuffix("er"); return; case 'i': source.RemoveSuffix("ic"); return; case 'l': if (source.RemoveSuffix("able")) { return; } source.RemoveSuffix("ible"); return; case 'n': if (source.RemoveSuffix("ant")) { return; } if (source.RemoveSuffix("ement")) { return; } if (source.RemoveSuffix("ment")) { return; } source.RemoveSuffix("ent"); return; case 'o': if (source.ChangeSuffix("tion", "t")) { return; } if (source.ChangeSuffix("sion", "s")) { return; } source.RemoveSuffix("ou"); return; case 's': source.RemoveSuffix("ism"); return; case 't': if (source.RemoveSuffix("ate")) { return; } source.RemoveSuffix("iti"); return; case 'u': source.RemoveSuffix("ous"); return; case 'v': source.RemoveSuffix("ive"); return; case 'z': source.RemoveSuffix("ize"); return; default: return; } }