/// <summary> /// This writes the current state or attributes of this object, /// in the <c>XML</c> format, to the media or storage accessible by the given writer. /// </summary> /// <param name="writer"> /// The <c>XML</c> writer with which the <c>XML</c> format of this object's state /// is written. /// </param> /// <exception cref="ArgumentNullException"> /// If the <paramref name="reader"/> is <see langword="null"/>. /// </exception> public override void WriteXml(XmlWriter writer) { BuildExceptions.NotNull(writer, "writer"); if (this.IsEmpty) { return; } bool hasImageMap = this.HasImageMap; writer.WriteStartElement(TagName); // start - item writer.WriteAttributeString("id", _itemId); if (_itemType != MediaItemType.None && _itemType != MediaItemType.Image) { writer.WriteAttributeString("type", _itemType.ToString()); } if (_itemWidth > 0 && _itemHeight > 0) { writer.WriteAttributeString("width", _itemWidth.ToString()); writer.WriteAttributeString("height", _itemHeight.ToString()); if (_itemUnit != MediaSizeUnit.None) { writer.WriteAttributeString("unit", _itemUnit.ToString()); } } BuildPathResolver pathResolver = BuildPathResolver.Resolver; writer.WriteStartElement("image"); // start - image if (_itemType == MediaItemType.YouTube) { writer.WriteAttributeString("file", _itemName); } else { writer.WriteAttributeString("file", pathResolver.ResolveRelative(_itemPath)); //writer.WriteAttributeString("file", _itemPath.Name); } if (hasImageMap) { writer.WriteAttributeString("usemap", _useMap); writer.WriteAttributeString("resolveMapLinks", _resolveLinks.ToString()); } writer.WriteStartElement("altText"); // start - altText writer.WriteString(_altText); writer.WriteEndElement(); // end - altText writer.WriteEndElement(); // end - image if (hasImageMap) { _imageMap.WriteXml(writer); } writer.WriteEndElement(); // end - item }
public void Save(BuildPathResolver resolver) { BuildExceptions.NotNull(resolver, "resolver"); // If this is not yet located, and the contents is empty, we // will simply not continue from here... if (_contentFile != null && _contentFile.Exists) { if (!this._isLoaded && base.IsEmpty && (_relatedTopics == null || _relatedTopics.Count == 0)) { return; } // If loaded but not modified, there is no need to save it... if (this.IsLoaded && !this.Modified) { return; } } XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = new string(' ', 4); settings.Encoding = Encoding.UTF8; settings.OmitXmlDeclaration = false; XmlWriter writer = null; try { writer = XmlWriter.Create(_contentFile, settings); string resolverId = BuildPathResolver.Push(resolver); { writer.WriteStartDocument(); this.WriteXml(writer); writer.WriteEndDocument(); BuildPathResolver.Pop(resolverId); } // The file content is now same as the memory, so it can be // considered loaded... _isLoaded = true; this.Modified = false; } finally { if (writer != null) { writer.Close(); writer = null; } } }
public void Load(BuildPathResolver resolver) { BuildExceptions.NotNull(resolver, "resolver"); if (_isLoaded) { return; } if (String.IsNullOrEmpty(_contentFile) || File.Exists(_contentFile) == false) { return; } if (_contentDir == null) { _contentDir = new BuildDirectoryPath( Path.GetDirectoryName(_contentFile)); } XmlReader reader = null; try { XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true; settings.IgnoreWhitespace = true; settings.IgnoreProcessingInstructions = true; reader = XmlReader.Create(_contentFile, settings); reader.MoveToContent(); string resolverId = BuildPathResolver.Push(resolver); { this.ReadXml(reader); BuildPathResolver.Pop(resolverId); } _isLoaded = true; this.Modified = false; } finally { if (reader != null) { reader.Close(); reader = null; } } }
/// <summary> /// This writes the current state or attributes of this object, /// in the <c>XML</c> format, to the media or storage accessible by the given writer. /// </summary> /// <param name="writer"> /// The <c>XML</c> writer with which the <c>XML</c> format of this object's state /// is written. /// </param> /// <exception cref="ArgumentNullException"> /// If the <paramref name="reader"/> is <see langword="null"/>. /// </exception> public override void WriteXml(XmlWriter writer) { BuildExceptions.NotNull(writer, "writer"); if (!this.IsValid) { return; } writer.WriteStartElement(TagName); // start - TagName writer.WriteAttributeString("name", this.Name); writer.WriteStartElement("propertyGroup"); // start - propertyGroup writer.WriteAttributeString("name", "General"); writer.WritePropertyElement("SourceId", _sourceId); writer.WritePropertyElement("VersionId", _versionId); writer.WritePropertyElement("VersionLabel", _versionLabel); writer.WritePropertyElement("Title", this.Title); writer.WriteEndElement(); // end - propertyGroup if (_content != null) { BuildFilePath filePath = _content.ContentFile; writer.WriteStartElement("content"); writer.WriteAttributeString("type", "Reference"); if (filePath != null && filePath.IsValid) { BuildPathResolver resolver = BuildPathResolver.Resolver; writer.WriteAttributeString("source", resolver.ResolveRelative(filePath)); _content.Save(); } else { _content.WriteXml(writer); } writer.WriteEndElement(); } // Write the user-defined contents... this.WriteContents(writer); // Write the filters... this.WriteFilters(writer); writer.WriteEndElement(); // end - TagName }
public void Save() { if (String.IsNullOrEmpty(_contentFile)) { return; } if (_contentDir == null) { _contentDir = new BuildDirectoryPath( Path.GetDirectoryName(_contentFile)); } BuildPathResolver resolver = BuildPathResolver.Create( Path.GetDirectoryName(_contentFile), _contentId); this.Save(resolver); }
/// <summary> /// This writes the current state or attributes of this object, /// in the <c>XML</c> format, to the media or storage accessible by the given writer. /// </summary> /// <param name="writer"> /// The <c>XML</c> writer with which the <c>XML</c> format of this object's state /// is written. /// </param> /// <exception cref="ArgumentNullException"> /// If the <paramref name="reader"/> is <see langword="null"/>. /// </exception> protected virtual void WriteContents(XmlWriter writer) { BuildExceptions.NotNull(writer, "writer"); // The various contents required for documentation writer.WriteComment(" The various contents required for documentation "); writer.WriteStartElement("contents"); // start - contents if (_commentContent != null) { BuildFilePath filePath = _commentContent.ContentFile; writer.WriteStartElement("content"); writer.WriteAttributeString("type", "Comments"); if (filePath != null && filePath.IsValid) { BuildPathResolver resolver = BuildPathResolver.Resolver; writer.WriteAttributeString("source", resolver.ResolveRelative(filePath)); _commentContent.Save(); } else { _commentContent.WriteXml(writer); } writer.WriteEndElement(); } if (_tocContent != null) { writer.WriteStartElement("content"); writer.WriteAttributeString("type", "HierarchicalToc"); _tocContent.WriteXml(writer); writer.WriteEndElement(); } this.OnWriteContents(writer); writer.WriteEndElement(); // end - contents }
protected override void OnWriteContentXml(XmlWriter writer) { if (_topicContent != null) { BuildFilePath filePath = _topicContent.ContentFile; writer.WriteStartElement("content"); writer.WriteAttributeString("type", "Reference"); if (filePath != null && filePath.IsValid) { BuildPathResolver resolver = BuildPathResolver.Resolver; Debug.Assert(resolver != null && resolver.Id == this.Id); writer.WriteAttributeString("source", resolver.ResolveRelative(filePath)); _topicContent.Save(); } else { _topicContent.WriteXml(writer); } writer.WriteEndElement(); } }
public void Load(BuildPathResolver resolver) { BuildExceptions.NotNull(resolver, "resolver"); if (_isLoaded) { return; } if (String.IsNullOrEmpty(_contentFile) || File.Exists(_contentFile) == false) { return; } if (_contentDir == null) { _contentDir = new BuildDirectoryPath( Path.GetDirectoryName(_contentFile)); } _hasFilter = false; if (_listFilters != null && _listFilters.Count != 0) { int itemCount = _listFilters.Count; for (int i = 0; i < itemCount; i++) { ConceptualFilter filter = _listFilters[i]; if (filter != null && filter.IsValid && filter.Enabled) { _hasFilter = true; break; } } } XmlReader reader = null; try { XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true; settings.IgnoreWhitespace = true; settings.IgnoreProcessingInstructions = true; reader = XmlReader.Create(_contentFile, settings); reader.MoveToContent(); string resolverId = BuildPathResolver.Push(resolver); { this.ReadXml(reader); BuildPathResolver.Pop(resolverId); } if (String.IsNullOrEmpty(_defaultTopic)) { // If not set, use the first topic... if (this.Count != 0) { _defaultTopic = this[0].TopicId; } } _isLoaded = true; this.Modified = false; } finally { if (reader != null) { reader.Close(); reader = null; } } }
/// <summary> /// This writes the current state or attributes of this object, /// in the <c>XML</c> format, to the media or storage accessible by the given writer. /// </summary> /// <param name="writer"> /// The <c>XML</c> writer with which the <c>XML</c> format of this object's state /// is written. /// </param> /// <exception cref="ArgumentNullException"> /// If the <paramref name="reader"/> is <see langword="null"/>. /// </exception> public override void WriteXml(XmlWriter writer) { BuildExceptions.NotNull(writer, "writer"); writer.WriteStartElement(TagName); writer.WriteAttributeString("version", _contentVersion.ToString(2)); // 1. The content directory, if not the same as the content file. writer.WriteComment( " 1. The content directory, if not the same as the content file. "); writer.WriteStartElement("location"); // start - location if (_contentDir != null && !_contentDir.IsDirectoryOf(_contentFile)) { _contentDir.WriteXml(writer); } writer.WriteEndElement(); // end - location // 2. The general content settings writer.WriteComment(" 2. The general content settings "); writer.WriteStartElement("propertyGroup"); // start - propertyGroup writer.WriteAttributeString("name", "General"); writer.WritePropertyElement("Id", _contentId); writer.WritePropertyElement("FrameworkType", _frameworkType.ToString()); writer.WriteEndElement(); // end - propertyGroup // 3. The reference items defining the API content writer.WriteComment(" 3. The reference items defining the API content "); writer.WriteStartElement("referenceItems"); // start - referenceItems for (int i = 0; i < this.Count; i++) { ReferenceItem item = this[i]; if (item != null && !item.IsEmpty) { item.WriteXml(writer); } } writer.WriteEndElement(); // end - referenceItems // 4. The various contents required for documentation writer.WriteComment(" 4. The various contents required for documentation "); writer.WriteStartElement("contents"); // start - contents if (_commentContent != null) { BuildFilePath filePath = _commentContent.ContentFile; writer.WriteStartElement("content"); writer.WriteAttributeString("type", "Comments"); if (filePath != null && filePath.IsValid) { BuildPathResolver resolver = BuildPathResolver.Resolver; Debug.Assert(resolver != null && resolver.Id == _contentId); writer.WriteAttributeString("source", resolver.ResolveRelative(filePath)); _commentContent.Save(); } else { _commentContent.WriteXml(writer); } writer.WriteEndElement(); } if (_dependencies != null) { writer.WriteStartElement("content"); writer.WriteAttributeString("type", "Dependencies"); _dependencies.WriteXml(writer); writer.WriteEndElement(); } if (_tocContent != null) { writer.WriteStartElement("content"); writer.WriteAttributeString("type", "HierarchicalToc"); _tocContent.WriteXml(writer); writer.WriteEndElement(); } writer.WriteEndElement(); // end - contents // 5. The API/attribute filters associated with the documentations writer.WriteComment(" 5. The API/attribute filters associated with the documentations "); writer.WriteStartElement("filters"); // start - filters if (_typeFilters != null) { _typeFilters.WriteXml(writer); } if (_attributeFilters != null) { _attributeFilters.WriteXml(writer); } writer.WriteEndElement(); // end - filters writer.WriteEndElement(); }