{
* Hiliter.UGlobals.pas
*
* Declares various types that describe syntax hilighters and and defines
* interfaces to various syntax highlighters and highlighter attributes.
*
* $Rev$
* $Date$
*
* ***** BEGIN LICENSE BLOCK *****
*
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is Hiliter.UGlobals.pas, formerly IntfHiliter.pas
*
* The Initial Developer of the Original Code is Peter Johnson
* (http://www.delphidabbler.com/).
*
* Portions created by the Initial Developer are Copyright (C) 2005-2011 Peter
* Johnson. All Rights Reserved.
*
* Contributor(s)
* NONE
*
* ***** END LICENSE BLOCK *****
}
unit Hiliter.UGlobals;
interface
uses
// Delphi
Classes, Graphics,
// Project
UEncodings;
type
/// <summary>Enumeration defining the different elements that can be
/// highlighted in Pascal source code.</summary>
THiliteElement = (
heWhitespace, // white space
heComment, // comments: in (* .. *), { .. } or // styles
heReserved, // reserved word (keyword or directives)
heIdentifier, // an identifier that is not "reserved"
heSymbol, // punctuation symbol or symbol group
heString, // string or character literal preceeded by #
heNumber, // whole number
heFloat, // floating point number (may be in scientific format)
heHex, // hexadecimal integer
hePreProcessor, // compiler directive: {$..} and (*$..*) styles supported
heAssembler, // assembler code between asm ... end keywords
heError // an unrecognised piece of code (shouldn't happen)
);
type
/// <summary>
/// Interface supported by objects that store style attributes applicable
/// to various source code elements used in syntax highlighting.
/// </summary>
IHiliteElemAttrs = interface(IInterface)
['{297A2F3D-77A8-45F9-A147-22A53791F114}']
/// <summary>Checks whether an element's attributes are "null" - i.e. all
/// properties have default values.</summary>
/// <remarks>Use to determine whether to output formatting information for
/// an element or not.</remarks>
function IsNul: Boolean;
/// <summary>Returns the font style to use for a source code element.
/// </summary>
function GetFontStyle: TFontStyles;
/// <summary>Sets the font style to use for a source code element.
/// </summary>
/// <param name="AFontStyle">TFontStyles [in] Required font style.</param>
procedure SetFontStyle(const AFontStyle: TFontStyles);
/// <summary>Returns the foreground (i.e. text) colour to use for a source
/// code element.</summary>
function GetForeColor: TColor;
/// <summary>Sets the foreground (i.e. text) colour to use for a source
/// code element.</summary>
/// <param name="AColor">TColor [in] Required colour.</param>
procedure SetForeColor(const AColor: TColor);
/// <summary>Set of font styles to use for a source code element.</summary>
property FontStyle: TFontStyles read GetFontStyle write SetFontStyle;
/// <summary>Foreground (i.e. Text) colour to use for a source code
/// element.</summary>
property ForeColor: TColor read GetForeColor write SetForeColor;
end;
type
/// <summary>
/// Interface implemented by objects that store style attributes that are
/// used in a syntax highlighter.
/// </summary>
IHiliteAttrs = interface(IInterface)
['{25570AEE-3225-42A7-A534-3D27357EEA2E}']
/// <summary>Returns name of font to use for all source code.</summary>
function GetFontName: string;
/// <summary>Sets name of font to use for all source code.</summary>
/// <param name="AFontName">string [in] Name of required font.</param>
procedure SetFontName(const AFontName: string);
/// <summary>Returns size of font to use for all source code.</summary>
/// <remarks>Font size is in points.</remarks>
function GetFontSize: Integer;
/// <summary>Sets size of font to use for all source code.</summary>
/// <param name="AFontSize">Integer [in] Required font size in points.
/// </param>
procedure SetFontSize(const AFontSize: Integer);
/// <summary>Resets name and size of font used for all source code to
/// default value.</summary>
procedure ResetDefaultFont;
/// <summary>Returns style attributes for a source code element.</summary>
/// <param name="Elem">THiliteElement [in] Specifies required attribute.
/// </param>
/// <returns>IHiliteElemAttrs [in] Interface to object providing required
/// style attributes.</returns>
function GetElement(const Elem: THiliteElement): IHiliteElemAttrs;
/// <summary>Name of font used for all source code.</summary>
property FontName: string read GetFontName write SetFontName;
/// <summary>Size of font used for all soure code.</summary>
property FontSize: Integer read GetFontSize write SetFontSize;
/// <summary>List of style attributes for each source code element.
/// </summary>
property Elements[const Elem: THiliteElement]: IHiliteElemAttrs
read GetElement; default;
end;
type
/// <summary>Enumeration of identifiers for the various predefined
/// highlighter styles.</summary>
TPredefinedHiliteStyle = (
hsNul, // nul highlighter style
hsCodeSnip, // original codesnip default style
hsDelphi7, // Delphi 7 default style
hsDelphi2006, // Delphi 2006 default style
hsVisualStudio // Microsoft Visual Studio default style
);
type
/// <summary>Interface implemented by objects that format different source
/// code elements on behalf of syntax highlighter.</summary>
/// <remarks>Implement this interface for each required output format.
/// Syntax highlighter calls the methods of this interface.</remarks>
IHiliteRenderer = interface(IInterface)
['{791CE200-C614-40FC-B93D-744ED2984755}']
/// <summary>Called by syntax highlighter before any source code is
/// processed.</summary>
procedure Initialise;
/// <summary>Called by syntax highlighter after all source code has been
/// processed.</summary>
procedure Finalise;
/// <summary>Called by syntax highlighter when a new line of source code
/// is started.</summary>
procedure BeginLine;
/// <summary>Called by syntax highlighter after a line of souce code is
/// complete.</summary>
procedure EndLine;
/// <summary>Called by syntax highlighter just before a source code
/// element is to be output.</summary>
/// <param name="Elem">THiliteElement [in] Type of element to be output.
/// </param>
procedure BeforeElem(Elem: THiliteElement);
/// <summary>Called by syntax highlighter for each element of source code
/// read. All the given text should be formatted in same style.</summary>
/// <remarks>Type of the element will have been specified in prior call to
/// BeforeElem.</remarks>
procedure WriteElemText(const Text: string);
/// <summary>Called by syntax highlighter just after an element of source
/// code has been written.</summary>
/// <param name="Elem">THiliteElement [in] Type of element that has just
/// been output.</param>
procedure AfterElem(Elem: THiliteElement);
end;
implementation
end.