5
// Michael Hutchinson <mhutchinson@novell.com>
7
// Copyright (C) 2008 Novell, Inc (http://www.novell.com)
9
// Permission is hereby granted, free of charge, to any person obtaining
10
// a copy of this software and associated documentation files (the
11
// "Software"), to deal in the Software without restriction, including
12
// without limitation the rights to use, copy, modify, merge, publish,
13
// distribute, sublicense, and/or sell copies of the Software, and to
14
// permit persons to whom the Software is furnished to do so, subject to
15
// the following conditions:
17
// The above copyright notice and this permission notice shall be
18
// included in all copies or substantial portions of the Software.
20
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
using System.Collections.Generic;
32
using MonoDevelop.XmlEditor.Completion;
34
namespace MonoDevelop.Html
37
public class HtmlSchema
41
string substituteProvider;
42
IXmlCompletionProvider provider;
44
public HtmlSchema (string name, string docType, IXmlCompletionProvider provider)
46
this.docType = docType;
48
this.provider = provider;
51
public HtmlSchema (string name, string docType, string substituteProvider)
52
: this (name, docType, (IXmlCompletionProvider) null)
54
this.substituteProvider = string.IsNullOrEmpty (substituteProvider)? null : substituteProvider;
57
public string DocType {
58
get { return docType; }
65
public IXmlCompletionProvider CompletionProvider {
67
if (substituteProvider != null)
73
void ResolveProvider ()
76
HtmlSchema hs = HtmlSchemaService.GetSchema (substituteProvider);
78
provider = hs.CompletionProvider;
79
} catch (StackOverflowException) {
80
MonoDevelop.Core.LoggingService.LogWarning (
81
"HTML doctype '{0}' contains a substitute schema reference that is either cyclical or too deep, and hence cannot be resolved.'",
84
if (provider == null) {
85
provider = new EmptyXmlCompletionProvider ();
86
MonoDevelop.Core.LoggingService.LogWarning (
87
"HTML doctype '{0}' cannot find substitute schema '{1}'", name, substituteProvider);
89
substituteProvider = null;