File: Security\AntiXss\CodeCharts\UpperMiddle.cs
Project: ndp\fx\src\xsp\system\Web\System.Web.csproj (System.Web)
//------------------------------------------------------------------------------
// <copyright file="UpperMiddle.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
 
namespace System.Web.Security.AntiXss.CodeCharts {
    using System.Collections;
    using System.Linq;
 
    /// <summary>
    /// Provides safe character positions for the upper middle section of the UTF code tables.
    /// </summary>
    internal static class UpperMiddle {
        /// <summary>
        /// Determines if the specified flag is set.
        /// </summary>
        /// <param name="flags">The value to check.</param>
        /// <param name="flagToCheck">The flag to check for.</param>
        /// <returns>true if the flag is set, otherwise false.</returns>
        public static bool IsFlagSet(UpperMidCodeCharts flags, UpperMidCodeCharts flagToCheck) {
            return (flags & flagToCheck) != 0;
        }
 
        /// <summary>
        /// Provides the safe characters for the Cyrillic Extended A code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable CyrillicExtendedA() {
            return CodeChartHelper.GetRange(0x2DE0, 0x2DFF);
        }
 
        /// <summary>
        /// Provides the safe characters for the Cyrillic Extended A code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable SupplementalPunctuation() {
            return CodeChartHelper.GetRange(0x2E00, 0x2E31);
        }
 
        /// <summary>
        /// Provides the safe characters for the CJK Radicals Supplement code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable CjkRadicalsSupplement() {
            return CodeChartHelper.GetRange(0x2E80, 0x2EF3, 
                i => (i == 0x2E9A));
        }
 
        /// <summary>
        /// Provides the safe characters for the Kangxi Radicals code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable KangxiRadicals() {
            return CodeChartHelper.GetRange(0x2F00, 0x2FD5);
        }
 
        /// <summary>
        /// Provides the safe characters for the Ideographic Description Characters code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable IdeographicDescriptionCharacters() {
            return CodeChartHelper.GetRange(0x2FF0, 0x2FFB);
        }
 
        /// <summary>
        /// Provides the safe characters for the CJK Symbols and Punctuation code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable CjkSymbolsAndPunctuation() {
            return CodeChartHelper.GetRange(0x3000, 0x303F);
        }
 
        /// <summary>
        /// Provides the safe characters for the Hiragana code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable Hiragana() {
            return CodeChartHelper.GetRange(0x3041, 0x309F, 
                i => (i == 0x3097 ||
                    i == 0x3098));
        }
 
        /// <summary>
        /// Provides the safe characters for the Hiragana code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable Katakana() {
            return CodeChartHelper.GetRange(0x30A0, 0x30FF);
        }
 
        /// <summary>
        /// Provides the safe characters for the Bopomofo code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable Bopomofo() {
            return CodeChartHelper.GetRange(0x3105, 0x312D);
        }
 
        /// <summary>
        /// Provides the safe characters for the Hangul Compatibility Jamo code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable HangulCompatibilityJamo() {
            return CodeChartHelper.GetRange(0x3131, 0x318E);
        }
 
        /// <summary>
        /// Provides the safe characters for the Kanbun code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable Kanbun() {
            return CodeChartHelper.GetRange(0x3190, 0x319F);
        }
 
        /// <summary>
        /// Provides the safe characters for the Bopomofo Extended code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable BopomofoExtended() {
            return CodeChartHelper.GetRange(0x31A0, 0x31B7);
        }
 
        /// <summary>
        /// Provides the safe characters for the CJK Strokes code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable CjkStrokes() {
            return CodeChartHelper.GetRange(0x31C0, 0x31E3);
        }
 
        /// <summary>
        /// Provides the safe characters for the Katakana Phonetic Extensions code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable KatakanaPhoneticExtensions() {
            return CodeChartHelper.GetRange(0x31F0, 0x31FF);
        }
 
        /// <summary>
        /// Provides the safe characters for the Enclosed CJK Letters and Months code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable EnclosedCjkLettersAndMonths() {
            return CodeChartHelper.GetRange(0x3200, 0x32FE, 
                i => (i == 0x321F));
        }
 
        /// <summary>
        /// Provides the safe characters for the CJK Compatibility code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable CjkCompatibility() {
            return CodeChartHelper.GetRange(0x3300, 0x33FF);
        }
 
        /// <summary>
        /// Provides the safe characters for the CJK Unified Ideographs Extension A code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable CjkUnifiedIdeographsExtensionA() {
            return CodeChartHelper.GetRange(0x3400, 0x4DB5);
        }
 
        /// <summary>
        /// Provides the safe characters for the Yijing Hexagram Symbols code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable YijingHexagramSymbols() {
            return CodeChartHelper.GetRange(0x4DC0, 0x4DFF);
        }
 
        /// <summary>
        /// Provides the safe characters for the CJK Unified Ideographs code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable CjkUnifiedIdeographs() {
            return CodeChartHelper.GetRange(0x4E00, 0x9FCB);
        }
 
        /// <summary>
        /// Provides the safe characters for the Yi Syllables code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable YiSyllables() {
            return CodeChartHelper.GetRange(0xA000, 0xA48C);
        }
 
        /// <summary>
        /// Provides the safe characters for the Yi Radicals code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable YiRadicals() {
            return CodeChartHelper.GetRange(0xA490, 0xA4C6);
        }
 
        /// <summary>
        /// Provides the safe characters for the Lisu code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable Lisu() {
            return CodeChartHelper.GetRange(0xA4D0, 0xA4FF);
        }
 
        /// <summary>
        /// Provides the safe characters for the Vai code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable Vai() {
            return CodeChartHelper.GetRange(0xA500, 0xA62B);
        }
 
        /// <summary>
        /// Provides the safe characters for the Cyrillic Extended B code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable CyrillicExtendedB() {
            return CodeChartHelper.GetRange(0xA640, 0xA697, 
                i => (i == 0xA660 ||
                    i == 0xA661 ||
                    (i >= 0xA674 && i <= 0xA67b)));
        }
 
        /// <summary>
        /// Provides the safe characters for the Bamum code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable Bamum() {
            return CodeChartHelper.GetRange(0xA6A0, 0xA6F7);
        }
 
        /// <summary>
        /// Provides the safe characters for the Modifier Tone Letters code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable ModifierToneLetters() {
            return CodeChartHelper.GetRange(0xA700, 0xA71F);
        }
 
        /// <summary>
        /// Provides the safe characters for the Latin Extended D code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable LatinExtendedD() {
            return CodeChartHelper.GetRange(0xA720, 0xA78C).Concat(
                   CodeChartHelper.GetRange(0xA7FB, 0xA7FF));
        }
 
        /// <summary>
        /// Provides the safe characters for the Syloti Nagri code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable SylotiNagri() {
            return CodeChartHelper.GetRange(0xA800, 0xA82B);
        }
 
        /// <summary>
        /// Provides the safe characters for the Common Indic Number Forms code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable CommonIndicNumberForms() {
            return CodeChartHelper.GetRange(0xA830, 0xA839);
        }
 
        /// <summary>
        /// Provides the safe characters for the Phags-pa code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable Phagspa() {
            return CodeChartHelper.GetRange(0xA840, 0xA877);
        }
 
        /// <summary>
        /// Provides the safe characters for the Saurashtra code table.
        /// </summary>
        /// <returns>The safe characters for the code table.</returns>
        public static IEnumerable Saurashtra() {
            return CodeChartHelper.GetRange(0xA880, 0xA8D9, 
                i => (i >= 0xA8C5 && i <= 0xA8CD));
        }
    }
}