/// <summary> /// path を元に、適切なコントローラを作成します。 /// </summary> private HatomaruGetAction GetAction(AbsPath path){ string pathStr = path.ToString(); int qpos = pathStr.IndexOf('?'); if(qpos > 0){ path = new AbsPath(pathStr.Substring(0,qpos)); string query = pathStr.Substring(qpos+1); string q = null; string i = null; string p = null; foreach(string pair in query.Split('&', ';')){ int eqpos = pair.IndexOf('='); if(eqpos < 0) continue; string name = pair.Substring(0,eqpos); string val = pair.Substring(eqpos+1); switch(name){ case QueryName: q = val; break; case IndexTypeName: i = val; break; case PageName: p = val; break; } } if(!string.IsNullOrEmpty(q)){ AmazonIndexType index = AmazonIndexType.None; if(!string.IsNullOrEmpty(i)) index = (AmazonIndexType)Enum.Parse(typeof(AmazonIndexType), i, true); return new AmazonDoSearch(this, path, q.UrlDecode(), index, p.ToInt32()); } } return new AmazonViewSearchForm(this, path); }
/// <summary> /// BasePath を渡して、残りのパス断片の配列を取得します。 /// </summary> public string[] GetFragments(AbsPath basePath){ string baseStr = basePath.ToString(); string result = this.RemoveQuery().ToString(); if(result.StartsWith(baseStr)){ result = result.Remove(0, baseStr.Length); } return result.Split(new Char[]{'/', '\\'}, StringSplitOptions.RemoveEmptyEntries); }