private static WebVTTCueSettings ParseCueSettings(IDictionary<string, string> values)
        {
            var result = new WebVTTCueSettings();

            bool autoTextPosition = true;
            foreach (var item in values)
            {
                switch (item.Key)
                {
                    case cueSettingVertical:
                        switch (item.Value)
                        {
                            case cueSettingVerticalGrowingLeft:
                                result.WritingMode = WebVTTWritingMode.VerticalGrowingLeft;
                                break;
                            case cueSettingVerticalGrowingRight:
                                result.WritingMode = WebVTTWritingMode.VerticalGrowingRight;
                                break;
                            default:
                                throw new Exception("Invalid WebVTT cue vertical text setting");
                        }
                        break;
                    case cueSettingLinePosition:
                        if (item.Value.EndsWith("%"))
                        {
                            result.LinePosition = int.Parse(item.Value.TrimEnd('%'));
                            result.SnapToLines = false;
                        }
                        else
                        {
                            result.LinePosition = int.Parse(item.Value);
                            result.SnapToLines = true;
                        }
                        break;
                    case cueSettingTextPosition:
                        if (item.Value != "auto")
                        {
                            autoTextPosition = false;
                            result.TextPosition = int.Parse(item.Value.TrimEnd('%'));
                        }
                        break;
                    case cueSettingSize:
                        result.Size = int.Parse(item.Value.TrimEnd('%'));
                        break;
                    case cueSettingAlignment:
                        switch (item.Value)
                        {
                            case cueSettingAlignmentStart:
                                result.Alignment = WebVTTAlignment.Start;
                                break;
                            case cueSettingAlignmentMiddle:
                                result.Alignment = WebVTTAlignment.Middle;
                                break;
                            case cueSettingAlignmentEnd:
                                result.Alignment = WebVTTAlignment.End;
                                break;
                            case cueSettingAlignmentLeft:
                                result.Alignment = WebVTTAlignment.Left;
                                break;
                            case cueSettingAlignmentRight:
                                result.Alignment = WebVTTAlignment.Right;
                                break;
                            default:
                                throw new Exception("Invalid WebVTT cue align setting");
                        }
                        break;
                }
            }

            if (autoTextPosition)
            {
                if (result.Alignment == WebVTTAlignment.Start || result.Alignment == WebVTTAlignment.Left)
                {
                    result.TextPosition = 0;
                }
                else if (result.Alignment == WebVTTAlignment.End || result.Alignment == WebVTTAlignment.Right)
                {
                    result.TextPosition = 100;
                }
                else if (result.Alignment == WebVTTAlignment.Middle)
                {
                    result.TextPosition = 50;
                }
            }

            return result;
        }
예제 #2
0
        private static WebVTTCueSettings ParseCueSettings(IDictionary <string, string> values)
        {
            var result = new WebVTTCueSettings();

            bool autoTextPosition = true;

            foreach (var item in values)
            {
                switch (item.Key)
                {
                case cueSettingVertical:
                    switch (item.Value)
                    {
                    case cueSettingVerticalGrowingLeft:
                        result.WritingMode = WebVTTWritingMode.VerticalGrowingLeft;
                        break;

                    case cueSettingVerticalGrowingRight:
                        result.WritingMode = WebVTTWritingMode.VerticalGrowingRight;
                        break;

                    default:
                        throw new Exception("Invalid WebVTT cue vertical text setting");
                    }
                    break;

                case cueSettingLinePosition:
                    if (item.Value.EndsWith("%"))
                    {
                        result.LinePosition = int.Parse(item.Value.TrimEnd('%'));
                        result.SnapToLines  = false;
                    }
                    else
                    {
                        result.LinePosition = int.Parse(item.Value);
                        result.SnapToLines  = true;
                    }
                    break;

                case cueSettingTextPosition:
                    if (item.Value != "auto")
                    {
                        autoTextPosition    = false;
                        result.TextPosition = int.Parse(item.Value.TrimEnd('%'));
                    }
                    break;

                case cueSettingSize:
                    result.Size = int.Parse(item.Value.TrimEnd('%'));
                    break;

                case cueSettingAlignment:
                    switch (item.Value)
                    {
                    case cueSettingAlignmentStart:
                        result.Alignment = WebVTTAlignment.Start;
                        break;

                    case cueSettingAlignmentMiddle:
                        result.Alignment = WebVTTAlignment.Middle;
                        break;

                    case cueSettingAlignmentEnd:
                        result.Alignment = WebVTTAlignment.End;
                        break;

                    case cueSettingAlignmentLeft:
                        result.Alignment = WebVTTAlignment.Left;
                        break;

                    case cueSettingAlignmentRight:
                        result.Alignment = WebVTTAlignment.Right;
                        break;

                    default:
                        throw new Exception("Invalid WebVTT cue align setting");
                    }
                    break;
                }
            }

            if (autoTextPosition)
            {
                if (result.Alignment == WebVTTAlignment.Start || result.Alignment == WebVTTAlignment.Left)
                {
                    result.TextPosition = 0;
                }
                else if (result.Alignment == WebVTTAlignment.End || result.Alignment == WebVTTAlignment.Right)
                {
                    result.TextPosition = 100;
                }
                else if (result.Alignment == WebVTTAlignment.Middle)
                {
                    result.TextPosition = 50;
                }
            }

            return(result);
        }
예제 #3
0
 public WebVTTCue()
 {
     Settings = new WebVTTCueSettings();
 }
 public WebVTTCue()
 {
     Settings = new WebVTTCueSettings();
 }