@@ -132,14 +132,16 @@ TNulDocumentHiliter = class sealed(TDocumentHiliter)
132132 // / <summary>
133133 // / Creates a highlighted source code document in XHTML format.
134134 // / </summary>
135- TXHTMLDocumentHiliter = class sealed (TDocumentHiliter)
135+ THTMLDocumentHiliter = class abstract (TDocumentHiliter)
136136 strict private
137137 // / <summary>Generates the CSS rules to be used in the document.</summary>
138138 // / <param name="Attrs">IHiliteAttrs [in] Highlighting styles used in
139139 // / document.</param>
140140 // / <returns>string. CSS rules that apply styles specified in Attrs.
141141 // / </returns>
142142 class function GenerateCSSRules (Attrs: IHiliteAttrs): string;
143+ strict protected
144+ class function BuilderClass : THTMLBuilderClass; virtual ; abstract ;
143145 public
144146 // / <summary>Creates XHTML document containing highlighted source code.
145147 // / </summary>
@@ -154,6 +156,20 @@ TXHTMLDocumentHiliter = class sealed(TDocumentHiliter)
154156 override;
155157 end ;
156158
159+ // / <summary>Creates a highlighted source code document in XHTML format.
160+ // / </summary>
161+ TXHTMLDocumentHiliter = class sealed(THTMLDocumentHiliter)
162+ strict protected
163+ class function BuilderClass : THTMLBuilderClass; override;
164+ end ;
165+
166+ // / <summary>Creates a highlighted source code document in HTML5 format.
167+ // / </summary>
168+ THTML5DocumentHiliter = class sealed(THTMLDocumentHiliter)
169+ strict protected
170+ class function BuilderClass : THTMLBuilderClass; override;
171+ end ;
172+
157173type
158174 // / <summary>
159175 // / Creates a highlighted source code document in rich text format.
@@ -242,55 +258,56 @@ TRTFHiliteRenderer = class(THiliteRenderer, IHiliteRenderer)
242258 end ;
243259
244260type
245- // / <summary>
246- // / Renders highlighted source code in XHTML format. Generated code is
247- // / recorded in a given HTML code builder object.
261+ // / <summary>Renders highlighted source code in any supported HTML format.
248262 // / </summary>
249- // / <remarks>
250- // / Designed for use with TSyntaxHiliter objects.
251- // / </remarks>
263+ // / <remarks>Designed for use with <c>TSyntaxHiliter</c> objects.</remarks>
252264 THTMLHiliteRenderer = class (THiliteRenderer, IHiliteRenderer)
253265 strict private
254266 var
255- // / <summary>Object used to record generated XHTML code .</summary>
267+ // / <summary>Object used to build up the generated HTML .</summary>
256268 fBuilder: THTMLBuilder;
257- // / <summary>Flag indicating if writing first line of output.</summary>
269+ // / <summary>Flag indicating if writing the first line of output.
270+ // / </summary>
258271 fIsFirstLine: Boolean;
259272 public
260- // / <summary>Object constructor. Sets up object to render documents.
261- // / </summary>
262- // / <param name="Builder">THTMLBuilder [in] Object that receives generated
263- // / XHTML code.</param>
264- // / <param name="Attrs">IHiliteAttrs [in] Specifies required highlighting
265- // / style. If nil document is not highlighted.</param>
273+ // / <summary>Object constructor. Sets up the object to render HTML
274+ // / documents.</summary>
275+ // / <param name="Builder"><c>THTMLBuilder</c> [in] Object used to build the
276+ // / required HTML. <c>Builder</c> must be an instance of a concreate
277+ // / descendant class of <c>THTMLBuilder</c>, which is abstract. The type of
278+ // / <c>Builder</c> determines the type of HTML that is generated.</param>
279+ // / <param name="Attrs"><c>IHiliteAttrs</c> [in] Specifies required
280+ // / highlighting style. If <c>nil</c> the document is not highlighted.
281+ // / </param>
266282 constructor Create(const Builder: THTMLBuilder;
267283 const Attrs: IHiliteAttrs = nil );
268- // / <summary>Initialises XHTML ready to receive highlighted code.</summary>
269- // / <remarks>Method of IHiliteRenderer.</remarks>
284+ // / <summary>Initialises the HTML ready to receive highlighted code.
285+ // / </summary>
286+ // / <remarks>Method of <c>IHiliteRenderer</c>.</remarks>
270287 procedure Initialise ;
271- // / <summary>Tidies up XHTML after all highlighted code processed.
288+ // / <summary>Tidies up the HTML after all highlighted code is processed.
272289 // / </summary>
273- // / <remarks>Method of IHiliteRenderer.</remarks>
290+ // / <remarks>Method of <c> IHiliteRenderer</c> .</remarks>
274291 procedure Finalise ;
275- // / <summary>Emits new line if necessary.</summary>
276- // / <remarks>Method of IHiliteRenderer.</remarks>
292+ // / <summary>Emits a new line if necessary.</summary>
293+ // / <remarks>Method of <c> IHiliteRenderer</c> .</remarks>
277294 procedure BeginLine ;
278295 // / <summary>Does nothing.</summary>
279296 // / <remarks>
280- // / <para>Handling of new lines is all done by BeginLine.</para>
281- // / <para >Method of IHiliteRenderer.</para >
297+ // / <para>Handling of new lines is all done by <c> BeginLine</c> .</para>
298+ // / <remarks >Method of <c> IHiliteRenderer</c> .</remarks >
282299 // / </remarks>
283300 procedure EndLine ;
284- // / <summary>Emits any span tag required to style following source code
285- // / element as specified by Elem.</summary>
286- // / <remarks>Method of IHiliteRenderer.</remarks>
301+ // / <summary>Emits any < span> tag required to style the following
302+ // / source code element, specified by <c> Elem</c> .</summary>
303+ // / <remarks>Method of <c> IHiliteRenderer</c> .</remarks>
287304 procedure BeforeElem (Elem: THiliteElement);
288- // / <summary>Writes given source code element text.</summary>
289- // / <remarks>Method of IHiliteRenderer.</remarks>
305+ // / <summary>Writes the given source code element text.</summary>
306+ // / <remarks>Method of <c> IHiliteRenderer</c> .</remarks>
290307 procedure WriteElemText (const Text: string);
291- // / <summary>Closes any span tag used to style source code element
292- // / specified by Elem.</summary>
293- // / <remarks>Method of IHiliteRenderer.</remarks>
308+ // / <summary>Closes any < span> tag used to style the source code
309+ // / element specified by <c> Elem</c> .</summary>
310+ // / <remarks>Method of <c> IHiliteRenderer</c> .</remarks>
294311 procedure AfterElem (Elem: THiliteElement);
295312 end ;
296313
@@ -372,9 +389,9 @@ class function TNulDocumentHiliter.Hilite(const RawCode: string;
372389 Result := TEncodedData.Create(RawCode, etUnicode);
373390end ;
374391
375- { TXHTMLDocumentHiliter }
392+ { THTMLDocumentHiliter }
376393
377- class function TXHTMLDocumentHiliter .GenerateCSSRules (Attrs: IHiliteAttrs):
394+ class function THTMLDocumentHiliter .GenerateCSSRules (Attrs: IHiliteAttrs):
378395 string;
379396var
380397 CSSBuilder: TCSSBuilder; // builds CSS code
@@ -396,7 +413,7 @@ class function TXHTMLDocumentHiliter.GenerateCSSRules(Attrs: IHiliteAttrs):
396413 end ;
397414end ;
398415
399- class function TXHTMLDocumentHiliter .Hilite (const RawCode: string;
416+ class function THTMLDocumentHiliter .Hilite (const RawCode: string;
400417 Attrs: IHiliteAttrs; const Title: string): TEncodedData;
401418resourcestring
402419 // Default document title
@@ -405,7 +422,7 @@ class function TXHTMLDocumentHiliter.Hilite(const RawCode: string;
405422 Renderer: IHiliteRenderer; // XHTML renderer object
406423 Builder: THTMLBuilder; // object used to construct XHTML document
407424begin
408- Builder := THTMLBuilder .Create;
425+ Builder := BuilderClass .Create;
409426 try
410427 if Title <> ' ' then
411428 Builder.Title := Title
@@ -420,6 +437,20 @@ class function TXHTMLDocumentHiliter.Hilite(const RawCode: string;
420437 end ;
421438end ;
422439
440+ { TXHTMLDocumentHiliter }
441+
442+ class function TXHTMLDocumentHiliter.BuilderClass : THTMLBuilderClass;
443+ begin
444+ Result := TXHTMLBuilder;
445+ end ;
446+
447+ { THTML5DocumentHiliter }
448+
449+ class function THTML5DocumentHiliter.BuilderClass : THTMLBuilderClass;
450+ begin
451+ Result := THTML5Builder;
452+ end ;
453+
423454{ TRTFDocumentHiliter }
424455
425456class function TRTFDocumentHiliter.Hilite (const RawCode: string;
0 commit comments