static public Url4 Parse(string s) { var schemeEnd = s.IndexOf(_url.Punctuators.EndScheme); if (schemeEnd < 0) { throw new nilnul.exception_.ParseException("not find colon(:) to end scheme."); } var scheme = _url.scheme.fro_.Txt.Parse(s.Substring(0, schemeEnd)); var toBeParsed = s.Substring(schemeEnd + 1); nilnul.txt.eq.Aver aver = new txt.eq.Aver("//"); aver.aver(toBeParsed.Substring(0, 2), new nilnul.exception_.ParseException()); toBeParsed = toBeParsed.Substring(2); var authEnd = toBeParsed.IndexOf(_url.Punctuators.AroundRadic); //aka: route deck if (authEnd < 0) { return(Url4.CreateFroSchemeAuthority( scheme , _url._origin.Authority2.Parse(toBeParsed) )); } var authorityTxt = toBeParsed.Substring(0, authEnd); var authority = _url._origin.Authority2.Parse(authorityTxt); toBeParsed = toBeParsed.Substring(authEnd + 1); //division, not route, included //if (henceAuth.Length==0) //{ // return Url2.CreateFroSchemeAuthority( // scheme // , // authority // ); //} _url.Fragment frag = null; var fragIntro = toBeParsed.LastIndexOf('#'); //parsed from back to forth if (fragIntro >= 0) { frag = new _url.Fragment(toBeParsed.Substring(fragIntro + 1)); toBeParsed = toBeParsed.Substring(0, fragIntro); } _url.Query query = null; //if (toBeParsed.Length!=0) //{ var queryBegin = toBeParsed.LastIndexOf('?'); if (queryBegin >= 0) { query = _url.Query.Parse(toBeParsed.Substring(queryBegin + 1)); toBeParsed = toBeParsed.Substring(0, queryBegin); } //} //_url.DivisionI division = null; //if (toBeParsed.Length !=0) //{ //nilnul.txt.be.Aver.BeginWith(toBeParsed, "/"); var division = _url._resource._render._route.division._ParseX.Parse(toBeParsed); //} return(new Url4( scheme , authority , new _url._resource._render.Route( division ) , query , frag )); }
static public Url Parse(string s) { var schemeEnd = s.IndexOf(_url.Punctuators.EndScheme); if (schemeEnd < 0) { throw new nilnul.exception_.ParseException(); } var scheme = _url.scheme.fro_.Txt.Parse(s.Substring(0, schemeEnd)); var remainder = s.Substring(schemeEnd); nilnul.txt.eq.Aver aver = new txt.eq.Aver("//"); aver.aver(remainder.Substring(0, 2), new nilnul.exception_.ParseException()); remainder = remainder.Substring(2); var radicEnd = remainder.IndexOf(_url.Punctuators.AroundRadic); if (radicEnd < 0) { radicEnd = remainder.Length; } var radic = _url.Authority.Parse(remainder.Substring(0, radicEnd)); remainder = remainder.Substring(radicEnd); //empty if arg is length if (remainder.Length == 0) { return(new Url( scheme , radic )); } _url.Fragment frag = null; var fragIntro = remainder.LastIndexOf('#'); if (fragIntro >= 0) { frag = new _url.Fragment(remainder.Substring(fragIntro)); remainder = remainder.Substring(0, fragIntro); } _url.Query query = null; if (remainder.Length != 0) { var queryBegin = remainder.LastIndexOf('?'); if (queryBegin >= 0) { query = _url.Query.Parse(remainder.Substring(0, queryBegin)); remainder = remainder.Substring(0, queryBegin); } } _url.Sprig sprig = null; if (remainder.Length != 0) { nilnul.txt.be.Aver.BeginWith(remainder, "/"); sprig = _url.Sprig.Parse(remainder.Substring(1)); } return(new Url( scheme , radic , sprig , query , frag )); }