Ejemplo n.º 1
0
        private static void KeywordEqual(EnumKeyword expected, EnumKeyword actual)
        {
            Assert.Equal(expected.Values.Count, actual.Values.Count);

            for (int i = 0; i < expected.Values.Count; i++)
            {
                Assert.True(expected.Values[i].IsEquivalentTo(actual.Values[i]));
            }
        }
Ejemplo n.º 2
0
        private XmlSchemaSimpleTypeRestriction ExtractStringFacets(JsonSchema jSchema)
        {
            XmlSchemaSimpleTypeRestriction content = new XmlSchemaSimpleTypeRestriction
            {
                BaseTypeName = new XmlQualifiedName("string", XML_SCHEMA_NS),
            };

            EnumKeyword enumKeyword = jSchema.Get<EnumKeyword>();
            if (enumKeyword != null)
            {
                foreach (JsonValue enumValue in GetterExtensions.Enum(jSchema))
                {
                    XmlSchemaEnumerationFacet enumFacet = new XmlSchemaEnumerationFacet
                    {
                        Value = enumValue.String,
                    };
                    content.Facets.Add(enumFacet);
                }
            }

            MinLengthKeyword minLength = jSchema.Get<MinLengthKeyword>();
            MaxLengthKeyword maxLength = jSchema.Get<MaxLengthKeyword>();

            if (minLength != null && maxLength != null && minLength.Value == maxLength.Value)
            {
                // special rule that maps equal min and max lengths to xsd length facet
                XmlSchemaLengthFacet lengthFacet = new XmlSchemaLengthFacet
                {
                    Value = minLength.Value.ToString(),
                };
                content.Facets.Add(lengthFacet);
            }
            else
            {
                if (minLength != null)
                {
                    XmlSchemaMinLengthFacet minLengthFacet = new XmlSchemaMinLengthFacet
                    {
                        Value = minLength.Value.ToString(),
                    };
                    content.Facets.Add(minLengthFacet);
                }

                if (maxLength != null)
                {
                    XmlSchemaMaxLengthFacet maxLengthFacet = new XmlSchemaMaxLengthFacet
                    {
                        Value = maxLength.Value.ToString(),
                    };
                    content.Facets.Add(maxLengthFacet);
                }
            }

            PatternKeyword pattern = jSchema.Get<PatternKeyword>();
            if (pattern != null)
            {
                XmlSchemaPatternFacet patternFacet = new XmlSchemaPatternFacet
                {
                    Value = pattern.Value.ToString(),
                };

                content.Facets.Add(patternFacet);
            }

            FormatKeyword format = jSchema.Get<FormatKeyword>();
            if (format != null && format.Value != null && !string.IsNullOrEmpty(format.Value.Key))
            {
                content.BaseTypeName = ExtractBaseTypeNameFromFormat(format.Value.Key);
            }

            return content;
        }
Ejemplo n.º 3
0
 public Keyword(EnumKeyword keyword)
 {
     this.keyword = keyword;
 }
Ejemplo n.º 4
0
        public static Token[] GenerateTokens(string code)
        {
            //Generate a list of tokens from the given code

            List <Token> tokens = new List <Token> ();

            char[] characters = code.ToCharArray();
            string current    = "";

            for (int i = 0; i < characters.Length; i++)
            {
                char c = characters [i];

                //Check for PreCompileNotation
                if (c == '#')
                {
                    i++;
                    for (; i < characters.Length; i++)
                    {
                        c = characters [i];
                        if (c == '\n')
                        {
                            break;
                        }
                    }
                }
                else
                if (c == '\"')
                {
                    bool ignore = false;
                    i++;
                    for (; i < characters.Length; i++)
                    {
                        c = characters [i];
                        if (c == '\\')
                        {
                            ignore = true;
                        }
                        else if (c == '\"')
                        {
                            if (ignore)
                            {
                                ignore = false;
                            }
                            else
                            {
                                String str = new String(current);
                                tokens.Add(str);
                                current = "";
                                break;
                            }
                        }
                        else
                        {
                            current += c;
                        }
                    }
                }
                else if (c == '\'')
                {
                    bool ignore = false;
                    i++;
                    for (; i < characters.Length; i++)
                    {
                        c = characters [i];
                        if (c == '\\')
                        {
                            ignore = true;
                        }
                        else if (c == '\'')
                        {
                            if (ignore)
                            {
                                ignore = false;
                            }
                            else
                            {
                                Character str = new Character(current);
                                tokens.Add(str);
                                current = "";
                                break;
                            }
                        }
                        else
                        {
                            current += c;
                        }
                    }
                }
                //Check for operators
                else if (SpecialCharacters.Contains(c))
                {
                    for (; i < characters.Length; i++)
                    {
                        c = characters [i];
                        if (!SpecialCharacters.Contains(c))
                        {
                            //current += c;
                            OperatorType[] types = OperatorGenerator.GetOperators(current);
                            Array.Reverse(types);
                            foreach (OperatorType type in types)
                            {
                                tokens.Add(new Operator(type));
                            }
                            current = "";
                            i--;
                            break;
                        }
                        else
                        {
                            current += c;
                        }
                    }
                }
                //Word and Keyword token generation
                else if (char.IsLetter(c) || c == '_')
                {
                    for (; i < characters.Length; i++)
                    {
                        c = characters [i];
                        if (!char.IsLetter(c) && c != '_')
                        {
                            if (doesContainKeyword(current))
                            {
                                EnumKeyword kw = GetKeyword(current);
                                if (kw == EnumKeyword.TRUE || kw == EnumKeyword.FALSE)
                                {
                                    Boolean b = new Boolean(current);
                                    tokens.Add(b);
                                }
                                else
                                {
                                    Keyword keyword = new Keyword(kw);
                                    tokens.Add(keyword);
                                }
                            }
                            else
                            {
                                Word word = new Word(current);
                                tokens.Add(word);
                            }
                            current = "";
                            i--;
                            break;
                        }
                        else
                        {
                            current += c;
                        }
                    }
                }
                else if (char.IsNumber(c))
                {
                    for (; i < characters.Length; i++)
                    {
                        c = characters[i];
                        if (!char.IsNumber(c) && c != '.')
                        {
                            Integer number = new Integer(current);
                            tokens.Add(number);
                            current = "";
                            i--;
                            break;
                        }
                        else
                        {
                            current += c;
                        }
                    }
                }
            }
            return(tokens.ToArray());
        }