public static BrailleSupport GetSupportByCode(BrailleFormCode code)
        {
            switch (code)
            {
            case cBoth6:
                return(BrailleSupport.EBAE2_UEB4);

            case cBoth4:
                return(BrailleSupport.EBAE2_UEB2);

            case cUEB4:
                return(BrailleSupport.UEB4);

            case cUEB2:
                return(BrailleSupport.UEB2);

            case cEBAE2:
                return(BrailleSupport.EBAE2);

            case cEBAE1:
                return(BrailleSupport.EBAE1);

            case BrailleFormCode.NONE:
                return(BrailleSupport.NONE);

            default:
                return(BrailleSupport.UNEXPECTED);
            }
        }
        public static bool TryParseBrailleFormCode(string value, out BrailleFormCode result)
        {
            if (value == null)
            {
                result = BrailleFormCode.NONE; // Default
                return(false);
            }
            value = value.ToUpper();

            // Map legacy file types
            switch (value)
            {
            case "UNCONTRACTED":
                result = BrailleFormCode.EXL;
                return(true);

            case "CONTRACTED":
                result = BrailleFormCode.ECL;
                return(true);

            case "NEMETH":
                result = BrailleFormCode.ECN;
                return(true);

            default:
                return(Enum.TryParse(value, out result));
            }
        }
        public static bool TryParseBrailleFileNamingConvention(string filename, out bool isStim, out int itemId, out BrailleFormCode formCode, out bool isTranscript, out BrailleFileType fileType, out bool usesAirConvention)
        {
            var match = s_rxBrailleConvention.Match(filename);

            if (match.Success)
            {
                isStim = !string.Equals(match.Groups[1].Value, "item", StringComparison.OrdinalIgnoreCase);
                itemId = int.Parse(match.Groups[2].Value);
                TryParseBrailleFormCode(match.Groups[4].Value, out formCode); // Sets value to None if it fails.
                isTranscript = string.Equals(match.Groups[5].Value, "_transcript", StringComparison.OrdinalIgnoreCase);
                if (!Enum.TryParse(match.Groups[6].Value.ToUpper(), out fileType))
                {
                    fileType = BrailleFileType.NONE;
                }
                usesAirConvention = false;
                return(true);
            }

            match = s_rxBrailleConventionAir.Match(filename);
            if (match.Success)
            {
                isStim = !string.Equals(match.Groups[1].Value, "item", StringComparison.OrdinalIgnoreCase);
                itemId = int.Parse(match.Groups[2].Value);
                TryParseBrailleFormCode(match.Groups[4].Value, out formCode); // Sets value to None if it fails.
                if (string.Equals(match.Groups[5].Value, "_ueb", StringComparison.OrdinalIgnoreCase))
                {
                    switch (formCode)
                    {
                    case BrailleFormCode.ECL:
                        formCode = BrailleFormCode.UCL;
                        break;

                    case BrailleFormCode.ECN:
                        formCode = BrailleFormCode.UCN;
                        break;

                    case BrailleFormCode.EXL:
                        formCode = BrailleFormCode.UXL;
                        break;

                    case BrailleFormCode.EXN:
                        formCode = BrailleFormCode.UXN;
                        break;
                    }
                }
                isTranscript = string.Equals(match.Groups[6].Value, "_transcript", StringComparison.OrdinalIgnoreCase);
                if (!Enum.TryParse(match.Groups[7].Value.ToUpper(), out fileType))
                {
                    fileType = BrailleFileType.NONE;
                }
                usesAirConvention = true;
                return(true);
            }

            match = s_rxBrailleConventionAir2.Match(filename);
            if (match.Success)
            {
                isStim = !string.Equals(match.Groups[1].Value, "item", StringComparison.OrdinalIgnoreCase);
                itemId = int.Parse(match.Groups[2].Value);
                TryParseBrailleFormCode(match.Groups[8].Value, out formCode); // Sets value to None if it fails.
                isTranscript = string.Equals(match.Groups[9].Value, "_transcript", StringComparison.OrdinalIgnoreCase);
                if (!Enum.TryParse(match.Groups[10].Value.ToUpper(), out fileType))
                {
                    fileType = BrailleFileType.NONE;
                }
                usesAirConvention = true;
                return(true);
            }

            isStim            = false;
            itemId            = 0;
            formCode          = BrailleFormCode.NONE;
            isTranscript      = false;
            fileType          = BrailleFileType.NONE;
            usesAirConvention = false;
            return(false);
        }