private MvxSerializableBindingDescription ParseBindingDescription()
        {
            var description = new MvxSerializableBindingDescription();
            description.Mode = ReadOptionalBindingMode();
            SkipWhitespace();
            description.Path = ReadSourcePath();
            SkipWhitespace();

            if (IsComplete)
                return description;

            var currentChar = CurrentChar;
            char closingBrace;
            switch (currentChar)
            {
                case '(':
                    closingBrace = ')';
                    break;
                case '[':
                    closingBrace = ']';
                    break;
                case '{':
                    closingBrace = ')';
                    break;
                default:
                    return description;
            }

            MoveNext();

            while (true)
            {
                SkipWhitespace();

                if (IsComplete)
                {
                    throw new MvxException("Unterminated options seen in binding {0}", FullText);
                }

                if (CurrentChar == closingBrace)
                {
                    MoveNext();
                    return description;
                }

                ParseOptionalBindingField(description);

                SkipWhitespaceAndDescriptionSeparators();
            }
        }
Example #2
0
 public bool TryParseBindingDescription(string text, out MvxSerializableBindingDescription requestedDescription)
 {
     try
     {
         Reset(text);
         requestedDescription = this.ParseBindingDescription();
         return true;
     }
     catch (Exception exception)
     {
         MvxBindingTrace.Trace(MvxTraceLevel.Error,
                                 "Problem parsing Swiss binding {0}", exception.ToLongString());
         requestedDescription = null;
         return false;
     }
 }
Example #3
0
        private void ParseNextBindingDescriptionOptionInto(MvxSerializableBindingDescription description)
        {
            if (IsComplete)
                return;

            var block = ReadTextUntilNonQuotedOccurrenceOfAnyOf('=', ',', ';');
            block = block.Trim();
            if (string.IsNullOrEmpty(block))
            {
                return;
            }

            switch (block)
            {
                case "Path":
                    ParseEquals(block);
                    description.Path  = ReadTextUntilNonQuotedOccurrenceOfAnyOf(',', ';');
                    break;
                case "Converter":
                    ParseEquals(block);
                    description.Converter = ReadTextUntilNonQuotedOccurrenceOfAnyOf(',', ';');
                    break;
                case "ConverterParameter":
                    ParseEquals(block);
                    description.ConverterParameter = ReadValue();
                    break;
                case "FallbackValue":
                    ParseEquals(block);
                    description.FallbackValue = ReadValue();
                    break;
                case "Mode":
                    ParseEquals(block);
                    //if (description.Mode != MvxBindingMode.Default)
                    //{
                    //    MvxBindingTrace.Trace(MvxTraceLevel.Warning, "Mode specified multiple times in binding in {0} - for readability either use <,>,<1,<> or use (Mode=...) - not both", FullText);
                    //}
                    description.Mode = ReadBindingMode();
                    break;
                default:
                    if (!string.IsNullOrEmpty(description.Path))
                    {
                        throw new MvxException("You cannot specify Path more than once - first Path '{0}', second Path '{1}', position {2} in {3}", description.Path, block, CurrentIndex, FullText);
                    }
                    description.Path = block;
                    break;
            }
        }
Example #4
0
        public bool TryParseBindingDescription(string text, out MvxSerializableBindingDescription requestedDescription)
        {
            if (string.IsNullOrEmpty(text))
            {
                requestedDescription = new MvxSerializableBindingDescription();
                return false;
            }

            try
            {
                var converter = this.GetService<IMvxJsonConverter>();
                requestedDescription = converter.DeserializeObject<MvxSerializableBindingDescription>(text);
            }
            catch (Exception exception)
            {
                requestedDescription = null;
                MvxBindingTrace.Trace(MvxTraceLevel.Error,
                                      "Problem parsing Json tag for databinding {0}", exception.ToLongString());
                return false;
            }

            return true;
        }
Example #5
0
 private void AssertAreEquivalent(MvxSerializableBindingDescription expected, MvxSerializableBindingDescription actual)
 {
     Assert.AreEqual(expected.Converter, actual.Converter);
     Assert.AreEqual(expected.ConverterParameter, actual.ConverterParameter);
     Assert.AreEqual(expected.FallbackValue, actual.FallbackValue);
     Assert.AreEqual(expected.Mode, actual.Mode);
     Assert.AreEqual(expected.Path, actual.Path);
 }
Example #6
0
        private MvxSerializableBindingDescription ParseBindingDescription()
        {
            var description = new MvxSerializableBindingDescription();
            SkipWhitespace();

            while (true)
            {
                ParseNextBindingDescriptionOptionInto(description);

                SkipWhitespace();
                if (IsComplete)
                    return description;

                switch (CurrentChar)
                {
                    case ',':
                        MoveNext();
                        break;
                    case ';':
                        return description;
                    default:
                        throw new MvxException("Unexpected character {0} at position {1} in {2} - expected string-end, ',' or ';'",
                            CurrentChar,
                            CurrentIndex,
                            FullText);
                }
            }
        }
 public bool TryParseBindingDescription(string text, out MvxSerializableBindingDescription requestedDescription)
 {
     return ChooseParser(text).TryParseBindingDescription(text, out requestedDescription);
 }
        protected void ParseOptionalBindingField(MvxSerializableBindingDescription description)
        {
            var optionName = ReadValidCSharpName();
            SkipWhitespace();
            if(IsComplete)
                throw new MvxException("Invalid termination of binding while reading optional binding property in {0}", FullText);
            
            if (CurrentChar != '=')
                throw new MvxException("Missing = in binding - character seen is {0} in {1}", CurrentChar, FullText);

            MoveNext();

            switch (optionName)
            {
                case "Converter":
                    var converterName = ReadValidCSharpName();
                    description.Converter = converterName;
                    break;

                case "ConverterParameter":
                    var converterParameter = ReadValue();
                    description.ConverterParameter = converterParameter;
                    break;

                case "FallbackValue":
                case "DefaultValue":
                    var fallbackValue = ReadValue();
                    description.FallbackValue = fallbackValue;
                    break;

                case "Mode":
                    if (description.Mode != MvxBindingMode.Default)
                    {
                        MvxBindingTrace.Trace(MvxTraceLevel.Warning, "Mode specified multiple times in binding in {0} - for readability either use <,>,<1,<> or use (Mode=...) - not both", FullText);
                    }
                    description.Mode = ReadBindingMode();
                    break;

                default:
                    throw new MvxException("Unknown binding option {0} in {1}", optionName, FullText);
            }
        }