<?xml version="1.0" encoding="utf-8" ?>
<!--

XSD Schema for Actipro SyntaxEditor XML Language Definition 2.0
Copyright (c) 2001-2004 Actipro Software LLC.  All rights reserved.
http://www.ActiproSoftware.com/Products/DotNet/

-->
<xs:schema id="LanguageDefinition" targetNamespace="http://ActiproSoftware/SyntaxEditor/2.0/LanguageDefinition" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://ActiproSoftware/SyntaxEditor/2.0/LanguageDefinition" elementFormDefault="qualified">
	<!-- -->
	<xs:simpleType name="Boolean">
		<xs:restriction base="xs:string">
			<xs:enumeration value="True" />
			<xs:enumeration value="False" />
		</xs:restriction>						
	</xs:simpleType>
	<!-- -->
	<xs:simpleType name="CaseSensitivity">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Sensitive" />
			<xs:enumeration value="Insensitive" />
			<xs:enumeration value="AutoCorrect" />
		</xs:restriction>						
	</xs:simpleType>
	<!-- -->
	<xs:simpleType name="PatternGroupType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="StartScope" />
			<xs:enumeration value="EndScope" />
		</xs:restriction>						
	</xs:simpleType>
	<!-- -->
	<xs:complexType name="ExplicitPatternGroup">
		<xs:sequence>
			<xs:element name="ExplicitPattern" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="Value" type="xs:string" use="required" />
				</xs:complexType>
			</xs:element>
			<xs:element name="ExplicitPatterns" minOccurs="0" />
		</xs:sequence>
		<xs:attribute name="Key" type="xs:string" use="optional" />
		<xs:attribute name="Token" type="xs:string" use="required" />
		<xs:attribute name="Style" type="xs:string" use="optional" />
		<xs:attribute name="PatternValue" type="xs:string" use="optional" />
		<xs:attribute name="LookAhead" type="xs:string" use="optional" />
		<xs:attribute name="StartsWith" type="xs:string" use="optional" />
		<xs:attribute name="CaseSensitivity" type="CaseSensitivity" use="optional" />
		<xs:attribute name="IsWhitespace" type="Boolean" use="optional" />
		<xs:attribute name="IsContentDivider" type="Boolean" use="optional" />
		<xs:attribute name="StartBracket" type="xs:string" use="optional" />
		<xs:attribute name="EndBracket" type="xs:string" use="optional" />
	</xs:complexType>
	<!-- -->
	<xs:complexType name="ScopeExplicitPatternGroup">
		<xs:attribute name="Type" type="PatternGroupType" use="required" />
		<xs:attribute name="Key" type="xs:string" use="optional" />
		<xs:attribute name="Token" type="xs:string" use="required" />
		<xs:attribute name="Style" type="xs:string" use="optional" />
		<xs:attribute name="PatternValue" type="xs:string" use="optional" />
		<xs:attribute name="LookAhead" type="xs:string" use="optional" />
		<xs:attribute name="StartsWith" type="xs:string" use="optional" />
		<xs:attribute name="CaseSensitivity" type="CaseSensitivity" use="optional" />
		<xs:attribute name="IsWhitespace" type="Boolean" use="optional" />
		<xs:attribute name="IsContentDivider" type="Boolean" use="optional" />
	</xs:complexType>
	<!-- -->
	<xs:complexType name="RegexPatternGroup">
		<xs:sequence>
			<xs:element name="RegexPattern" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="Value" type="xs:string" use="required" />
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="Key" type="xs:string" use="optional" />
		<xs:attribute name="Token" type="xs:string" use="required" />
		<xs:attribute name="Style" type="xs:string" use="optional" />
		<xs:attribute name="PatternValue" type="xs:string" use="optional" />
		<xs:attribute name="LookAhead" type="xs:string" use="optional" />
		<xs:attribute name="StartsWith" type="xs:string" use="optional" />
		<xs:attribute name="CaseSensitivity" type="CaseSensitivity" use="optional" />
		<xs:attribute name="IsWhitespace" type="Boolean" use="optional" />
		<xs:attribute name="IsContentDivider" type="Boolean" use="optional" />
		<xs:attribute name="StartBracket" type="xs:string" use="optional" />
		<xs:attribute name="EndBracket" type="xs:string" use="optional" />
	</xs:complexType>
	<!-- -->
	<xs:complexType name="ScopeRegexPatternGroup">
		<xs:attribute name="Type" type="PatternGroupType" use="optional" />
		<xs:attribute name="Key" type="xs:string" use="optional" />
		<xs:attribute name="Token" type="xs:string" use="required" />
		<xs:attribute name="Style" type="xs:string" use="optional" />
		<xs:attribute name="PatternValue" type="xs:string" use="optional" />
		<xs:attribute name="LookAhead" type="xs:string" use="optional" />
		<xs:attribute name="StartsWith" type="xs:string" use="optional" />
		<xs:attribute name="CaseSensitivity" type="CaseSensitivity" use="optional" />
		<xs:attribute name="IsWhitespace" type="Boolean" use="optional" />
		<xs:attribute name="IsContentDivider" type="Boolean" use="optional" />
	</xs:complexType>
	<!-- -->
	<xs:element name="SyntaxLanguage">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Properties" minOccurs="0">
					<xs:complexType>
						<xs:choice>
							<xs:element name="Property" minOccurs="0" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="Key" type="xs:string" use="required" />
									<xs:attribute name="Value" type="xs:string" use="required" />
								</xs:complexType>
							</xs:element>
						</xs:choice>
					</xs:complexType>
				</xs:element>
				<xs:element name="Triggers" minOccurs="0">
					<xs:complexType>
						<xs:choice maxOccurs="unbounded">
							<xs:element name="AutoReplaceTrigger" minOccurs="0" maxOccurs="unbounded">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="AutoReplaceTriggerActivators">
											<xs:complexType>
												<xs:choice>
													<xs:element name="AutoReplaceTriggerActivator" maxOccurs="unbounded">
														<xs:complexType>
															<xs:attribute name="Character" type="xs:string" use="required" />
														</xs:complexType>
													</xs:element>
												</xs:choice>
											</xs:complexType>
										</xs:element>
										<xs:element name="AutoReplaceTriggerValidStates" minOccurs="0">
											<xs:complexType>
												<xs:choice>
													<xs:element name="AutoReplaceTriggerValidState" maxOccurs="unbounded">
														<xs:complexType>
															<xs:attribute name="State" type="xs:string" use="required" />
														</xs:complexType>
													</xs:element>
												</xs:choice>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
									<xs:attribute name="Key" type="xs:string" use="required" />								
									<xs:attribute name="AllowGlobalLookup" type="Boolean" use="optional" />								
								</xs:complexType>
							</xs:element>
							<xs:element name="KeyPressTrigger" minOccurs="0" maxOccurs="unbounded">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="KeyPressTriggerValidStates" minOccurs="0">
											<xs:complexType>
												<xs:choice>
													<xs:element name="KeyPressTriggerValidState" maxOccurs="unbounded">
														<xs:complexType>
															<xs:attribute name="State" type="xs:string" use="required" />
														</xs:complexType>
													</xs:element>
												</xs:choice>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
									<xs:attribute name="Key" type="xs:string" use="required" />								
									<xs:attribute name="Character" type="xs:string" use="required" />								
									<xs:attribute name="AllowInReadOnlyMode" type="Boolean" use="optional" />								
								</xs:complexType>
							</xs:element>
						</xs:choice>
					</xs:complexType>
				</xs:element>
				<xs:element name="Styles">
					<xs:complexType>
						<xs:choice>
							<xs:element name="Style" minOccurs="0" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="Key" type="xs:string" use="required" />
									<xs:attribute name="Name" type="xs:string" use="optional" />
									<xs:attribute name="ForeColor" type="xs:string" use="optional" />
									<xs:attribute name="BackColor" type="xs:string" use="optional" />
									<xs:attribute name="Bold" type="Boolean" use="optional" />
									<xs:attribute name="Italic" type="Boolean" use="optional" />
									<xs:attribute name="Underline" type="Boolean" use="optional" />
								</xs:complexType>
							</xs:element>
						</xs:choice>
					</xs:complexType>
				</xs:element>
				<xs:element name="Macros" minOccurs="0">
					<xs:complexType>
						<xs:choice>
							<xs:element name="Macro" minOccurs="0" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="Key" type="xs:string" use="required" />
									<xs:attribute name="Value" type="xs:string" use="required" />
								</xs:complexType>
							</xs:element>
						</xs:choice>
					</xs:complexType>
				</xs:element>
				<xs:element name="States">
					<xs:complexType>
						<xs:choice>
							<xs:element name="State" minOccurs="0" maxOccurs="unbounded">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="Scopes" minOccurs="0">
											<xs:complexType>
												<xs:choice maxOccurs="unbounded">
													<xs:element name="Scope">
														<xs:complexType>
															<xs:choice maxOccurs="unbounded">
																<xs:element name="ExplicitPatternGroup" type="ScopeExplicitPatternGroup" />
																<xs:element name="RegexPatternGroup" type="ScopeRegexPatternGroup" />
																<xs:element name="StateTransition">
																	<xs:complexType>
																		<xs:choice>
																			<xs:element name="ExplicitPatternGroup" type="ExplicitPatternGroup" />
																			<xs:element name="RegexPatternGroup" type="RegexPatternGroup" />
																		</xs:choice>
																		<xs:attribute name="Filename" type="xs:string" use="required" />
																		<xs:attribute name="State" type="xs:string" use="optional" />
																		<xs:attribute name="ChildLanguageBackColor" type="xs:string" use="optional" />
																	</xs:complexType>
																</xs:element>
															</xs:choice>
															<xs:attribute name="BracketHighlight" type="Boolean" use="optional" />
														</xs:complexType>
													</xs:element>
												</xs:choice>
											</xs:complexType>
										</xs:element>
										<xs:element name="PatternGroups" minOccurs="0">
											<xs:complexType>
												<xs:choice maxOccurs="unbounded">
													<xs:element name="ExplicitPatternGroup" type="ExplicitPatternGroup" />
													<xs:element name="RegexPatternGroup" type="RegexPatternGroup" />
												</xs:choice>
											</xs:complexType>
										</xs:element>
										<xs:element name="ChildStates" minOccurs="0">
											<xs:complexType>
												<xs:choice maxOccurs="unbounded">
													<xs:element name="ChildState">
														<xs:complexType>
															<xs:attribute name="Key" type="xs:string" use="required" />
														</xs:complexType>
													</xs:element>
												</xs:choice>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
									<xs:attribute name="Key" type="xs:string" use="required" />
									<xs:attribute name="Token" type="xs:string" use="optional" />
									<xs:attribute name="Style" type="xs:string" use="optional" />
									<xs:attribute name="Filename" type="xs:string" use="optional" />
									<xs:attribute name="ChildLanguageBackColor" type="xs:string" use="optional" />
								</xs:complexType>
							</xs:element>
						</xs:choice>
					</xs:complexType>
				</xs:element>
				<xs:element name="ExampleText" minOccurs="0" />
			</xs:sequence>
			<xs:attribute name="Key" type="xs:string" use="required" />
			<xs:attribute name="LanguageDefinitionVersion" type="xs:string" use="required" />
			<xs:attribute name="Secure" type="Boolean" use="required" />
		</xs:complexType>
	</xs:element>
	<!-- -->
</xs:schema>