110 lines
4.1 KiB
C#
110 lines
4.1 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Collections;
|
|
using iTextSharp.text.rtf;
|
|
using iTextSharp.text.rtf.document;
|
|
|
|
namespace iTextSharp.text.rtf.style {
|
|
|
|
/**
|
|
* The RtfStylesheetList stores the RtfParagraphStyles that are used in the document.
|
|
*
|
|
* @version $Revision: 1.5 $
|
|
* @author Mark Hall (Mark.Hall@mail.room3b.eu)
|
|
*/
|
|
public class RtfStylesheetList : RtfElement, IRtfExtendedElement {
|
|
|
|
/**
|
|
* The Hashtable containing the RtfParagraphStyles.
|
|
*/
|
|
private Hashtable styleMap = null;
|
|
/**
|
|
* Whether the default settings have been loaded.
|
|
*/
|
|
private bool defaultsLoaded = false;
|
|
|
|
/**
|
|
* Constructs a new RtfStylesheetList for the RtfDocument.
|
|
*
|
|
* @param doc The RtfDocument this RtfStylesheetList belongs to.
|
|
*/
|
|
public RtfStylesheetList(RtfDocument doc) : base(doc) {
|
|
this.styleMap = new Hashtable();
|
|
}
|
|
|
|
/**
|
|
* unused
|
|
*/
|
|
public override void WriteContent(Stream outp) {
|
|
}
|
|
|
|
/**
|
|
* Register a RtfParagraphStyle with this RtfStylesheetList.
|
|
*
|
|
* @param rtfParagraphStyle The RtfParagraphStyle to add.
|
|
*/
|
|
public void RegisterParagraphStyle(RtfParagraphStyle rtfParagraphStyle) {
|
|
RtfParagraphStyle tempStyle = new RtfParagraphStyle(this.document, rtfParagraphStyle);
|
|
tempStyle.HandleInheritance();
|
|
tempStyle.SetStyleNumber(this.styleMap.Count);
|
|
this.styleMap[tempStyle.GetStyleName()] = tempStyle;
|
|
}
|
|
|
|
/**
|
|
* Registers all default styles. If styles with the given name have already been registered,
|
|
* then they are NOT overwritten.
|
|
*/
|
|
private void RegisterDefaultStyles() {
|
|
defaultsLoaded = true;
|
|
if (!this.styleMap.ContainsKey(RtfParagraphStyle.STYLE_NORMAL.GetStyleName())) {
|
|
RegisterParagraphStyle(RtfParagraphStyle.STYLE_NORMAL);
|
|
}
|
|
if (!this.styleMap.ContainsKey(RtfParagraphStyle.STYLE_HEADING_1.GetStyleName())) {
|
|
RegisterParagraphStyle(RtfParagraphStyle.STYLE_HEADING_1);
|
|
}
|
|
if (!this.styleMap.ContainsKey(RtfParagraphStyle.STYLE_HEADING_2.GetStyleName())) {
|
|
RegisterParagraphStyle(RtfParagraphStyle.STYLE_HEADING_2);
|
|
}
|
|
if (!this.styleMap.ContainsKey(RtfParagraphStyle.STYLE_HEADING_3.GetStyleName())) {
|
|
RegisterParagraphStyle(RtfParagraphStyle.STYLE_HEADING_3);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets the RtfParagraphStyle with the given name. Makes sure that the defaults
|
|
* have been loaded.
|
|
*
|
|
* @param styleName The name of the RtfParagraphStyle to get.
|
|
* @return The RtfParagraphStyle with the given name or null.
|
|
*/
|
|
public RtfParagraphStyle GetRtfParagraphStyle(String styleName) {
|
|
if (!defaultsLoaded) {
|
|
RegisterDefaultStyles();
|
|
}
|
|
if (this.styleMap.ContainsKey(styleName)) {
|
|
return (RtfParagraphStyle) this.styleMap[styleName];
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Writes the definition of the stylesheet list.
|
|
*/
|
|
public virtual void WriteDefinition(Stream result) {
|
|
byte[] t;
|
|
result.Write(t = DocWriter.GetISOBytes("{"), 0, t.Length);
|
|
result.Write(t = DocWriter.GetISOBytes("\\stylesheet"), 0, t.Length);
|
|
result.Write(t = RtfElement.DELIMITER, 0, t.Length);
|
|
if (this.document.GetDocumentSettings().IsOutputDebugLineBreaks()) {
|
|
result.Write(t = DocWriter.GetISOBytes("\n"), 0, t.Length);
|
|
}
|
|
foreach (RtfParagraphStyle rps in this.styleMap.Values)
|
|
rps.WriteDefinition(result);
|
|
result.Write(t = DocWriter.GetISOBytes("}"), 0, t.Length);
|
|
if (this.document.GetDocumentSettings().IsOutputDebugLineBreaks()) {
|
|
result.WriteByte((byte)'\n');
|
|
}
|
|
}
|
|
}
|
|
} |