private WordEntry CheckDetailsAllCap(int abbv, ref string scw, ref SpellCheckResultType resultType, out string root)
            {
                resultType |= SpellCheckResultType.OrigCap;
                var rv = CheckWord(scw, ref resultType, out root);

                if (rv != null)
                {
                    return(rv);
                }

                if (abbv != 0)
                {
                    rv = CheckWord(scw + ".", ref resultType, out root);
                    if (rv != null)
                    {
                        return(rv);
                    }
                }

                // Spec. prefix handling for Catalan, French, Italian:
                // prefixes separated by apostrophe (SANT'ELIA -> Sant'+Elia).
                var textInfo = TextInfo;
                var apos     = scw.IndexOf('\'');

                if (apos >= 0)
                {
                    scw = HunspellTextFunctions.MakeAllSmall(scw, textInfo);

                    // conversion may result in string with different len than before MakeAllSmall2 so re-scan
                    if (apos < scw.Length - 1)
                    {
                        scw = StringEx.ConcatString(scw, 0, apos + 1, HunspellTextFunctions.MakeInitCap(scw.Subslice(apos + 1), textInfo));
                        rv  = CheckWord(scw, ref resultType, out root);
                        if (rv != null)
                        {
                            return(rv);
                        }

                        scw = HunspellTextFunctions.MakeInitCap(scw, textInfo);
                        rv  = CheckWord(scw, ref resultType, out root);
                        if (rv != null)
                        {
                            return(rv);
                        }
                    }
                }

                if (Affix.CheckSharps && scw.Contains("SS"))
                {
                    scw = HunspellTextFunctions.MakeAllSmall(scw, textInfo);
                    var u8buffer = scw;
                    rv = SpellSharps(ref u8buffer, ref resultType, out root);
                    if (rv == null)
                    {
                        scw = HunspellTextFunctions.MakeInitCap(scw, textInfo);
                        rv  = SpellSharps(ref scw, ref resultType, out root);
                    }

                    if (abbv != 0 && rv == null)
                    {
                        u8buffer += ".";
                        rv        = SpellSharps(ref u8buffer, ref resultType, out root);
                        if (rv == null)
                        {
                            u8buffer = scw + ".";
                            rv       = SpellSharps(ref u8buffer, ref resultType, out root);
                        }
                    }
                }

                return(rv);
            }