protected UriTemplatePathSegment(string originalSegment, UriTemplatePartType nature,
                                  bool endsWithSlash)
 {
     this.originalSegment = originalSegment;
     this.nature          = nature;
     this.endsWithSlash   = endsWithSlash;
 }
 protected UriTemplatePathSegment(string originalSegment, UriTemplatePartType nature,
     bool endsWithSlash)
 {
     this.originalSegment = originalSegment;
     this.nature = nature;
     this.endsWithSlash = endsWithSlash;
 }
示例#3
0
        public static bool IsWildcardSegment(string segment, out UriTemplatePartType type)
        {
            type = IdentifyPartType(segment);
            switch (type)
            {
            case UriTemplatePartType.Literal:
                return(string.Compare(segment, UriTemplate.WildcardPath, StringComparison.Ordinal) == 0);

            case UriTemplatePartType.Compound:
                return(false);

            case UriTemplatePartType.Variable:
                return((segment.IndexOf(UriTemplate.WildcardPath, StringComparison.Ordinal) == 1) &&
                       !segment.EndsWith("/", StringComparison.Ordinal) &&
                       (segment.Length > UriTemplate.WildcardPath.Length + 2));

            default:
                throw new Exception("Bad part type identification !");
            }
        }
示例#4
0
        public static bool IsWildcardSegment(string segment, out UriTemplatePartType type)
        {
            type = IdentifyPartType(segment);
            switch (type)
            {
            case UriTemplatePartType.Literal:
                return(string.Compare(segment, "*", StringComparison.Ordinal) == 0);

            case UriTemplatePartType.Compound:
                return(false);

            case UriTemplatePartType.Variable:
                if ((segment.IndexOf("*", StringComparison.Ordinal) != 1) || segment.EndsWith("/", StringComparison.Ordinal))
                {
                    return(false);
                }
                return(segment.Length > ("*".Length + 2));
            }
            return(false);
        }
示例#5
0
        private static bool IsWildcardSegment(string segment, out UriTemplatePartType type)
        {
            type = IdentifyPartType(segment);
            switch (type)
            {
            case UriTemplatePartType.Literal:
                return(string.Compare(segment, WildcardPath, StringComparison.Ordinal) == 0);

            case UriTemplatePartType.Compound:
                return(false);

            case UriTemplatePartType.Variable:
                return(segment.IndexOf(WildcardPath, StringComparison.Ordinal) == 1 &&
                       !segment.EndsWith("/", StringComparison.Ordinal) &&
                       segment.Length > WildcardPath.Length + 2);

            default:
                Fx.Assert("Bad part type identification !");
                return(false);
            }
        }
示例#6
0
 protected UriTemplateQueryValue(UriTemplatePartType nature)
 {
     this.nature = nature;
 }
        private static UriTemplatePart[] ParseTemplate(string template)
        {
            List <UriTemplatePart> parts = new List <UriTemplatePart>();
            int previousEnd = 0;

            foreach (Match match in ExpressionExpression.Matches(template))
            {
                if (match.Index > previousEnd)
                {
                    parts.Add(new UriTemplatePartLiteral(template.Substring(previousEnd, match.Index - previousEnd)));
                }

                UriTemplatePartType type = UriTemplatePartType.SimpleStringExpansion;
                Group op = match.Groups["Operator"];
                if (op.Success && op.Length > 0)
                {
                    switch (op.Value)
                    {
                    case "+":
                        type = UriTemplatePartType.ReservedStringExpansion;
                        break;

                    case "#":
                        type = UriTemplatePartType.FragmentExpansion;
                        break;

                    case ".":
                        type = UriTemplatePartType.LabelExpansion;
                        break;

                    case "/":
                        type = UriTemplatePartType.PathSegments;
                        break;

                    case ";":
                        type = UriTemplatePartType.PathParameters;
                        break;

                    case "?":
                        type = UriTemplatePartType.Query;
                        break;

                    case "&":
                        type = UriTemplatePartType.QueryContinuation;
                        break;

                    case "=":
                    case ",":
                    case "!":
                    case "@":
                    case "|":
                        throw new NotSupportedException(string.Format("Operator is reserved for future expansion: {0}", op.Value));

                    default:
                        throw new InvalidOperationException("Unreachable");
                    }
                }

                Group variableList = match.Groups["VariableList"];
                VariableReference[] variables;
                if (variableList.Success)
                {
                    string[] specs = variableList.Value.Split(',');
                    variables = new VariableReference[specs.Length];
                    for (int i = 0; i < specs.Length; i++)
                    {
                        variables[i] = VariableReference.Parse(specs[i]);
                    }
                }
                else
                {
                    variables = new VariableReference[0];
                }

                UriTemplatePart part;
                switch (type)
                {
                case UriTemplatePartType.SimpleStringExpansion:
                    part = new UriTemplatePartSimpleExpansion(variables, true);
                    break;

                case UriTemplatePartType.ReservedStringExpansion:
                    part = new UriTemplatePartSimpleExpansion(variables, false);
                    break;

                case UriTemplatePartType.FragmentExpansion:
                    part = new UriTemplatePartFragmentExpansion(variables);
                    break;

                case UriTemplatePartType.LabelExpansion:
                    part = new UriTemplatePartLabelExpansion(variables);
                    break;

                case UriTemplatePartType.PathSegments:
                    part = new UriTemplatePartPathSegmentExpansion(variables);
                    break;

                case UriTemplatePartType.PathParameters:
                    part = new UriTemplatePartPathParametersExpansion(variables);
                    break;

                case UriTemplatePartType.Query:
                    part = new UriTemplatePartQueryExpansion(variables, false);
                    break;

                case UriTemplatePartType.QueryContinuation:
                    part = new UriTemplatePartQueryExpansion(variables, true);
                    break;

                case UriTemplatePartType.Literal:
                default:
                    throw new InvalidOperationException("Unreachable");
                }

                parts.Add(part);
                previousEnd = match.Index + match.Length;
            }

            if (previousEnd < template.Length)
            {
                parts.Add(new UriTemplatePartLiteral(template.Substring(previousEnd)));
            }

            return(parts.ToArray());
        }
 protected UriTemplateQueryValue(UriTemplatePartType nature)
 {
     this.nature = nature;
 }
        private static bool IsWildcardSegment(string segment, out UriTemplatePartType type)
        {
            type = IdentifyPartType(segment);
            switch (type)
            {
                case UriTemplatePartType.Literal:
                    return string.Compare(segment, WildcardPath, StringComparison.Ordinal) == 0;

                case UriTemplatePartType.Compound:
                    return false;

                case UriTemplatePartType.Variable:
                    return segment.IndexOf(WildcardPath, StringComparison.Ordinal) == 1 &&
                            !segment.EndsWith("/", StringComparison.Ordinal) &&
                            segment.Length > WildcardPath.Length + 2;

                default:
                    Fx.Assert("Bad part type identification !");
                    return false;
            }
        }