/// <summary> /// Adds mapping for given character. /// </summary> public void AddCharacterMap(string name, CharacterMap map) { if (maps.ContainsKey(name)) { throw new XsltCompileException("Duplicate character map '" + name + "'."); } maps.Add(name, map); }
/// <summary> /// See <see cref="XmlReader.Read"/>. /// </summary> public override bool Read() { bool baseRead = base.Read(); if (base.NodeType == XmlNodeType.Element && base.NamespaceURI == nxsltNamespace && base.LocalName == characterMapTag) { //nxslt:character-map currMapName = base[nameTag]; if (string.IsNullOrEmpty(currMapName)) { throw new System.Xml.Xsl.XsltCompileException("Required 'name' attribute of nxslt:character-map element is missing."); } currMap = new CharacterMap(); string referencedMaps = base[useCharacterMapsTag]; if (!string.IsNullOrEmpty(referencedMaps)) { currMap.ReferencedCharacterMaps = referencedMaps.Split(' '); } } else if (base.NodeType == XmlNodeType.EndElement && base.NamespaceURI == nxsltNamespace && base.LocalName == characterMapTag) { if (this.mapping == null) { this.mapping = new CharacterMapping(); } this.mapping.AddCharacterMap(currMapName, currMap); } else if (base.NodeType == XmlNodeType.Element && base.NamespaceURI == nxsltNamespace && base.LocalName == outputCharacterTag) { //nxslt:output-character string character = base[characterTag]; if (string.IsNullOrEmpty(character)) { throw new System.Xml.Xsl.XsltCompileException("Required 'character' attribute of nxslt:output-character element is missing."); } if (character.Length > 1) { throw new System.Xml.Xsl.XsltCompileException("'character' attribute value of nxslt:output-character element is too long - must be a single character."); } string _string = base[stringTag]; if (string.IsNullOrEmpty(character)) { throw new System.Xml.Xsl.XsltCompileException("Required 'string' attribute of nxslt:output-character element is missing."); } currMap.AddMapping(character[0], _string); } else if (base.NodeType == XmlNodeType.Element && base.NamespaceURI == nxsltNamespace && base.LocalName == outputTag) { //nxslt:output string useMaps = base[useCharacterMapsTag]; if (!string.IsNullOrEmpty(useMaps)) { if (this.useCharacterMaps == null) { this.useCharacterMaps = new List<string>(); } this.useCharacterMaps.AddRange(useMaps.Split(' ')); } } return baseRead; }