private SetColorCommand DeserializeColorTag(ParsedTag tag)
        {
            string index = tag.GetAttribute("index");
            var    bytes = BinaryUtils.HexStrToBytes(index);

            return(new SetColorCommand(SC3ExpressionParser.ParseExpression(bytes)));
        }
Exemple #2
0
        private SC3StringSegment NextSegment(Scanner scanner)
        {
            byte peek = scanner.PeekByte();

            switch (peek)
            {
            case StringSegmentCodes.LineBreak:
                scanner.Advance();
                return(new Marker(MarkerKind.LineSeperator));

            case StringSegmentCodes.CharacterName:
                scanner.Advance();
                return(new Marker(MarkerKind.CharacterName));

            case StringSegmentCodes.DialogueLine:
                scanner.Advance();
                return(new Marker(MarkerKind.DialogueLine));

            case StringSegmentCodes.RubyBase:
                scanner.Advance();
                return(new Marker(MarkerKind.RubyBase));

            case StringSegmentCodes.RubyTextStart:
                scanner.Advance();
                return(new Marker(MarkerKind.RubyTextStart));

            case StringSegmentCodes.RubyTextEnd:
                scanner.Advance();
                return(new Marker(MarkerKind.RubyTextEnd));

            case StringSegmentCodes.NameAndCode:
                scanner.Advance();
                return(new Marker(MarkerKind.NameAndCode));

            case StringSegmentCodes.TempMarker:
                scanner.Advance();
                return(new Marker(MarkerKind.TempMarker));

            case StringSegmentCodes.SetColor:
                scanner.Advance();
                var colorIndex = SC3ExpressionParser.ParseExpression(scanner.Reader);
                return(new SetColorCommand(colorIndex));

            case StringSegmentCodes.SetFontSize:
                scanner.Advance();
                int fontSize = scanner.Reader.ReadInt16();
                return(new SetFontSizeCommand(fontSize));

            case StringSegmentCodes.SetAlignment_Center:
                scanner.Advance();
                return(new CenterTextCommand());

            case StringSegmentCodes.SetTopMargin:
                scanner.Advance();
                int topMargin = scanner.Reader.ReadInt16();
                return(new SetMarginCommand(null, topMargin));

            case StringSegmentCodes.SetLeftMargin:
                scanner.Advance();
                int leftMargin = scanner.Reader.ReadInt16();
                return(new SetMarginCommand(leftMargin, null));

            case StringSegmentCodes.EvaluateExpression:
                scanner.Advance();
                var expression = SC3ExpressionParser.ParseExpression(scanner.Reader);
                return(new EvaluateExpressionCommand(expression));

            case StringSegmentCodes.Present:
                scanner.Advance();
                return(new PresentCommand(resetTextAlignment: false));

            case StringSegmentCodes.Present_ResetAlignment:
                scanner.Advance();
                return(new PresentCommand(resetTextAlignment: true));

            default:
                peek = scanner.PeekByte();
                if (IsCharacter(peek))
                {
                    string value = DecodeCharacters(scanner);
                    return(new TextSegment(value));
                }
                else
                {
                    throw ExceptionUtils.SC3String_UnexpectedByte(peek);
                }
            }
        }