1
0
Fork 0
vrobot3 is a chat bot for IRC and Discord.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
2.0 KiB

//-----------------------------------------------------------------------------
//
// Copyright © 2016 Project Golan
//
// See "LICENSE" for more information.
//
//-----------------------------------------------------------------------------
//
// Link (URI) utilities.
//
//-----------------------------------------------------------------------------
using System;
using System.Text.RegularExpressions;
namespace ProjectGolan.Vrobot3
{
//
// Utils
//
public static partial class Utils
{
//
// URI
//
public struct URI
{
public String method, host, path, query, tag, uri;
//
// ToString
//
public override String ToString() => uri;
//
// Finder
//
public static Regex Finder = new Regex(
@"((?<method>[^:/?# ]+)?:)" +
@"(//(?<host>[^/?# ]*))" +
@"(?<path>[^?# ]*)" +
@"(?<query>\?([^# ]*))?" +
@"(?<tag>#(.*))?");
//
// FromMatch
//
public static URI FromMatch(Match match)
{
return new URI{
method = match.Groups["method"]?.Value ?? String.Empty,
host = match.Groups["host"]?.Value,
path = match.Groups["path"]?.Value,
query = match.Groups["query"]?.Value ?? String.Empty,
tag = match.Groups["tag"]?.Value ?? String.Empty,
uri = match.Value
};
}
//
// Match
//
public static URI Match(String str) => FromMatch(Finder.Match(str));
//
// Matches
//
public static URI[] Matches(String str)
{
var matchbox = Finder.Matches(str);
if(matchbox.Count == 0) return null;
var matches = new URI[matchbox.Count];
for(var i = 0; i < matchbox.Count; i++)
matches[i] = FromMatch(matchbox[i]);
return matches;
}
}
}
}
// EOF