text: public IList<CharsRef> Stem(char[] word, int length){if (dictionary.needsInputCleaning){scratchSegment.Length = 0;scratchSegment.Append(word, 0, length);string cleaned = dictionary.CleanInput(scratchSegment.ToString(), segment);scratchBuffer = ArrayUtil.Grow(scratchBuffer, cleaned.Length);length = segment.Length;segment.CopyTo(0, scratchBuffer, 0, length);word = scratchBuffer;}List<CharsRef> stems = new List<CharsRef>();Int32sRef forms = dictionary.LookupWord(word, 0, length);if (forms != null){for (int i = 0; i < forms.Length; i++){stems.Add(NewStem(word, length));}}stems.AddRange(Stem(word, length, -1, -1, -1, 0, true, true, false, false));return stems;}