summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Xaml/XmlnsHelper.cs
blob: e29dbc0c7cd390352b2057b5dcac85b89e54dae9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;

namespace Xamarin.Forms.Xaml
{
	static class XmlnsHelper
	{
		public static string ParseNamespaceFromXmlns(string xmlns)
		{
			string typeName;
			string ns;
			string asm;
			string targetPlatform;

			ParseXmlns(xmlns, out typeName, out ns, out asm, out targetPlatform);

			return ns;
		}

		public static void ParseXmlns(string xmlns, out string typeName, out string ns, out string asm, out string targetPlatform)
		{
			typeName = ns = asm = targetPlatform = null;

			foreach (var decl in xmlns.Split(';'))
			{
				if (decl.StartsWith("clr-namespace:", StringComparison.Ordinal))
				{
					ns = decl.Substring(14, decl.Length - 14);
					continue;
				}
				if (decl.StartsWith("assembly=", StringComparison.Ordinal))
				{
					asm = decl.Substring(9, decl.Length - 9);
					continue;
				}
				if (decl.StartsWith("targetPlatform=", StringComparison.Ordinal)) {
					targetPlatform = decl.Substring(15, decl.Length - 15);
					continue;
				}
				var nsind = decl.LastIndexOf(".", StringComparison.Ordinal);
				if (nsind > 0)
				{
					ns = decl.Substring(0, nsind);
					typeName = decl.Substring(nsind + 1, decl.Length - nsind - 1);
				}
				else
					typeName = decl;
			}
		}
	}
}