mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 01:24:38 +00:00
479 lines
9.1 KiB
C#
479 lines
9.1 KiB
C#
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Text;
|
||
|
using System.IO;
|
||
|
using System.Globalization;
|
||
|
using System.Diagnostics;
|
||
|
using System.ComponentModel;
|
||
|
|
||
|
using HtmlHelp.ChmDecoding;
|
||
|
// using HtmlHelp.Storage;
|
||
|
|
||
|
namespace HtmlHelp
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// The class <c>ChmFileInfo</c> only extracts system information from a CHM file.
|
||
|
/// It doesn't build the index and table of contents.
|
||
|
/// </summary>
|
||
|
public class ChmFileInfo
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Internal member storing the full filename
|
||
|
/// </summary>
|
||
|
private string _chmFileName = "";
|
||
|
/// <summary>
|
||
|
/// Internal member storing the associated chmfile object
|
||
|
/// </summary>
|
||
|
private CHMFile _associatedFile = null;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Constructor for extrating the file information of the provided file.
|
||
|
/// The constructor opens the chm-file and reads its system data.
|
||
|
/// </summary>
|
||
|
/// <param name="chmFile">full file name which information should be extracted</param>
|
||
|
public ChmFileInfo(string chmFile)
|
||
|
{
|
||
|
if(!File.Exists(chmFile))
|
||
|
throw new ArgumentException("Chm file must exist on disk !", "chmFileName");
|
||
|
|
||
|
if( ! chmFile.ToLower().EndsWith(".chm") )
|
||
|
throw new ArgumentException("HtmlHelp file must have the extension .chm !", "chmFile");
|
||
|
|
||
|
_chmFileName = chmFile;
|
||
|
_associatedFile = new CHMFile(null, chmFile, true); // only load system data of chm
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Internal constructor used in the class <see cref="HtmlHelp.ChmDecoding.CHMFile">CHMFile</see>.
|
||
|
/// </summary>
|
||
|
/// <param name="associatedFile">associated chm file</param>
|
||
|
internal ChmFileInfo(CHMFile associatedFile)
|
||
|
{
|
||
|
_associatedFile = associatedFile;
|
||
|
|
||
|
if( _associatedFile == null)
|
||
|
throw new ArgumentException("Associated CHMFile instance must not be null !", "associatedFile");
|
||
|
}
|
||
|
|
||
|
#region default info properties
|
||
|
/// <summary>
|
||
|
/// Gets the full filename of the chm file
|
||
|
/// </summary>
|
||
|
public string ChmFileName
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return _associatedFile.ChmFilePath;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets a <see cref="System.IO.FileInfo">FileInfo</see> instance for the chm file.
|
||
|
/// </summary>
|
||
|
public FileInfo FileInfo
|
||
|
{
|
||
|
get { return new FileInfo(_associatedFile.ChmFilePath); }
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
#region #SYSTEM properties
|
||
|
/// <summary>
|
||
|
/// Gets the file version of the chm file.
|
||
|
/// 2 for Compatibility=1.0, 3 for Compatibility=1.1
|
||
|
/// </summary>
|
||
|
public int FileVersion
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.FileVersion;
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the contents file name
|
||
|
/// </summary>
|
||
|
|
||
|
public string ContentsFile
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.ContentsFile;
|
||
|
|
||
|
return "";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the index file name
|
||
|
/// </summary>
|
||
|
|
||
|
public string IndexFile
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.IndexFile;
|
||
|
|
||
|
return "";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the default help topic
|
||
|
/// </summary>
|
||
|
|
||
|
public string DefaultTopic
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.DefaultTopic;
|
||
|
|
||
|
return "";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the title of the help window
|
||
|
/// </summary>
|
||
|
|
||
|
public string HelpWindowTitle
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.HelpWindowTitle;
|
||
|
|
||
|
return "";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the flag if DBCS is in use
|
||
|
/// </summary>
|
||
|
|
||
|
public bool DBCS
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.DBCS;
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the flag if full-text-search is available
|
||
|
/// </summary>
|
||
|
|
||
|
public bool FullTextSearch
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.FullTextSearch;
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the flag if the file has ALinks
|
||
|
/// </summary>
|
||
|
|
||
|
public bool HasALinks
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.HasALinks;
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the flag if the file has KLinks
|
||
|
/// </summary>
|
||
|
|
||
|
public bool HasKLinks
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.HasKLinks;
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the default window name
|
||
|
/// </summary>
|
||
|
|
||
|
public string DefaultWindow
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.DefaultWindow;
|
||
|
|
||
|
return "";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the file name of the compile file
|
||
|
/// </summary>
|
||
|
|
||
|
public string CompileFile
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.CompileFile;
|
||
|
|
||
|
return "";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the flag if the chm has a binary index file
|
||
|
/// </summary>
|
||
|
|
||
|
public bool BinaryIndex
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.BinaryIndex;
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the flag if the chm has a binary index file
|
||
|
/// </summary>
|
||
|
|
||
|
public string CompilerVersion
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.CompilerVersion;
|
||
|
|
||
|
return "";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the flag if the chm has a binary toc file
|
||
|
/// </summary>
|
||
|
|
||
|
public bool BinaryTOC
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.BinaryTOC;
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the font face of the read font property.
|
||
|
/// Empty string for default font.
|
||
|
/// </summary>
|
||
|
|
||
|
public string FontFace
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.FontFace;
|
||
|
|
||
|
return "";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the font size of the read font property.
|
||
|
/// 0 for default font size
|
||
|
/// </summary>
|
||
|
|
||
|
public double FontSize
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.FontSize;
|
||
|
|
||
|
return 0.0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the character set of the read font property
|
||
|
/// 1 for default
|
||
|
/// </summary>
|
||
|
|
||
|
public int CharacterSet
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.CharacterSet;
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the codepage depending on the read font property
|
||
|
/// </summary>
|
||
|
|
||
|
public int CodePage
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.CodePage;
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the assiciated culture info
|
||
|
/// </summary>
|
||
|
public CultureInfo Culture
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.Culture;
|
||
|
|
||
|
return CultureInfo.CurrentCulture;
|
||
|
}
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
#region #IDXHDR properties
|
||
|
/// <summary>
|
||
|
/// Gets the number of topic nodes including the contents and index files
|
||
|
/// </summary>
|
||
|
|
||
|
public int NumberOfTopicNodes
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.NumberOfTopicNodes;
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the ImageList string specyfied in the #IDXHDR file.
|
||
|
/// </summary>
|
||
|
/// <remarks>This property uses the #STRINGS file to extract the string at a given offset.</remarks>
|
||
|
|
||
|
public string ImageList
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.ImageList;
|
||
|
|
||
|
return "";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the background setting
|
||
|
/// </summary>
|
||
|
|
||
|
public int Background
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.Background;
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the foreground setting
|
||
|
/// </summary>
|
||
|
|
||
|
public int Foreground
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.Foreground;
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the FrameName string specyfied in the #IDXHDR file.
|
||
|
/// </summary>
|
||
|
/// <remarks>This property uses the #STRINGS file to extract the string at a given offset.</remarks>
|
||
|
|
||
|
public string FrameName
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.FrameName;
|
||
|
|
||
|
return "";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the WindowName string specyfied in the #IDXHDR file.
|
||
|
/// </summary>
|
||
|
/// <remarks>This property uses the #STRINGS file to extract the string at a given offset.</remarks>
|
||
|
|
||
|
public string WindowName
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.WindowName;
|
||
|
|
||
|
return "";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets a string array containing the merged file names
|
||
|
/// </summary>
|
||
|
public string[] MergedFiles
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if(_associatedFile != null)
|
||
|
return _associatedFile.MergedFiles;
|
||
|
|
||
|
return new string[0];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
}
|