xtool/contrib/fundamentals/HTMLParser/flcHTMLStyleProperties.pas

2034 lines
75 KiB
ObjectPascal

{******************************************************************************}
{ }
{ Library: Fundamentals 5.00 - HTML Parser }
{ File name: flcHTMLStyleProperties.pas }
{ File version: 5.04 }
{ Description: HTML Style Sheet properties }
{ }
{ Copyright: Copyright (c) 2000-2020, David J Butler }
{ All rights reserved. }
{ Redistribution and use in source and binary forms, with }
{ or without modification, are permitted provided that }
{ the following conditions are met: }
{ Redistributions of source code must retain the above }
{ copyright notice, this list of conditions and the }
{ following disclaimer. }
{ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND }
{ CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED }
{ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED }
{ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A }
{ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL }
{ THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, }
{ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR }
{ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, }
{ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF }
{ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) }
{ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER }
{ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING }
{ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE }
{ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE }
{ POSSIBILITY OF SUCH DAMAGE. }
{ }
{ Github: https://github.com/fundamentalslib }
{ E-mail: fundamentals.library at gmail.com }
{ }
{ Revision history: }
{ }
{ 2002/11/04 1.00 Initial version part of cHTMLStyleSheet. }
{ 2002/12/08 1.01 Created cHTMLStyleProperty unit. }
{ Created specific property classes. }
{ 2005/10/01 1.02 All CSS level 1 property classes implemented. }
{ 2015/04/11 1.03 UnicodeString changes. }
{ 2019/02/22 5.04 Revise for Fundamentals 5. }
{ }
{ Description: }
{ This unit implements classes for CSS properties. }
{ }
{ Notes: }
{ All CSS1 properties implemented. }
{ }
{******************************************************************************}
{$INCLUDE flcHTML.inc}
unit flcHTMLStyleProperties;
interface
uses
{ System }
{$IFDEF DELPHI6_UP}
Types,
{$ELSE}
Windows,
{$ENDIF}
{ Fundamentals }
flcUtils,
{ HTML }
flcHTMLElements,
flcHTMLProperties,
flcHTMLStyleTypes;
{ }
{ ThtmlcssStyleProperties }
{ Collection of CSS style property values. }
{ }
type
ThtmlcssStyleProperties = record
// inherited values
FontFamily : ThtmlFontFamilyList;
FontStyle : ThtmlFontStyle;
FontVariant : ThtmlFontVariant;
FontWeight : ThtmlFontWeight;
FontSize : ThtmlFontSize;
FontColor : ThtmlColor;
TextDecoration : ThtmlTextDecoration;
VerticalAlign : ThtmlVerticalAlign;
TextAlign : ThtmlTextAlignType;
LineHeight : ThtmlLineHeight;
WhiteSpace : ThtmlWhiteSpaceType;
WordSpacing : ThtmlSpacing;
LetterSpacing : ThtmlSpacing;
TextTransform : ThtmlTextTransform;
TextIndent : ThtmlLength;
ListStyleType : ThtmlListStyleType;
ListStyleImage : String;
ListStylePosition : ThtmlListStylePositionType;
// non-inherited values
BackColor : ThtmlColor;
BackAttach : ThtmlBackgroundAttachment;
BackImage : ThtmlBackgroundImage;
BackRepeat : ThtmlBackgroundRepeat;
BorderCol : ThtmlColor;
BorderStyle : ThtmlBorderStyle;
BorderWidths : ThtmlBorderWidths;
Margins : ThtmlMargins;
Width : ThtmlLength;
Height : ThtmlLength;
Padding : TRect;
Clear : ThtmlClearType;
Display : ThtmlDisplayType;
ListStyle : ThtmlListStyleType;
Float : ThtmlFloatType;
end;
procedure htmlcssStyleResetNonInherited(var Style: ThtmlcssStyleProperties);
{ }
{ ThtmlcssProperty }
{ Base class for CSS properties. }
{ }
type
ThtmlcssProperty = class
protected
FNext : ThtmlcssProperty;
FPropID : ThtmlcssPropertyID;
FValueStr : String;
FImportant : Boolean;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); virtual;
property Next: ThtmlcssProperty read FNext write FNext;
property PropID: ThtmlcssPropertyID read FPropID;
property ValueStr: String read FValueStr;
property Important: Boolean read FImportant;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); virtual;
end;
ThtmlcssPropertyClass = Class of ThtmlcssProperty;
{ }
{ Font }
{ }
type
{ font-family }
ThtmlcssFontFamilyProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlFontFamilyList;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ font-style }
ThtmlcssFontStyleProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlFontStyle;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ font-variant }
ThtmlcssFontVariantProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlFontVariant;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ font-weight }
ThtmlcssFontWeightProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlFontWeight;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ font-size }
ThtmlcssFontSizeProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlFontSize;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ font }
ThtmlcssFontProperty = class(ThtmlcssProperty)
protected
FFontStyle : ThtmlFontStyle;
FFontVariant : ThtmlFontVariant;
FFontWeight : ThtmlFontWeight;
FFontSize : ThtmlFontSize;
FLineHeight : ThtmlFontSize;
FFontFamily : ThtmlFontFamilyList;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ }
{ Color and Background }
{ }
type
{ color }
ThtmlcssColorProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlColor;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ background-color }
ThtmlcssBackgroundColorProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlColor;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ background-image }
ThtmlcssBackgroundImageProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlBackgroundImage;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ background-repeat }
ThtmlcssBackgroundRepeatProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlBackgroundRepeat;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ background-attachment }
ThtmlcssBackgroundAttachmentProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlBackgroundAttachment;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ background-position }
ThtmlcssBackgroundPositionProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlLength;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ background }
ThtmlcssBackgroundProperty = class(ThtmlcssProperty)
protected
FBackColor : ThtmlColor;
FBackImage : ThtmlBackgroundImage;
FBackRepeat : ThtmlBackgroundRepeat;
FBackAttach : ThtmlBackgroundAttachment;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ }
{ Text }
{ }
type
{ word-spacing }
ThtmlcssWordSpacingProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlSpacing;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ letter-spacing }
ThtmlcssLetterSpacingProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlSpacing;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ text-decoration }
ThtmlcssTextDecorationProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlTextDecoration;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ vertical-align }
ThtmlcssVerticalAlignProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlVerticalAlign;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ text-transform }
ThtmlcssTextTransformProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlTextTransform;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ text-align }
ThtmlcssTextAlignProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlTextAlignType;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ text-indent }
ThtmlcssTextIndentProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlLength;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ line-height }
ThtmlcssLineHeightProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlLength;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ }
{ Box }
{ }
type
{ margin-top }
ThtmlcssMarginTopProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlMargin;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ margin-right }
ThtmlcssMarginRightProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlMargin;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ margin-bottom }
ThtmlcssMarginBottomProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlMargin;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ margin-left }
ThtmlcssMarginLeftProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlMargin;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ margin }
ThtmlcssMarginsProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlMargins;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ padding-top }
ThtmlcssPaddingTopProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlPadding;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ padding-bottom }
ThtmlcssPaddingBottomProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlPadding;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ padding-left }
ThtmlcssPaddingLeftProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlPadding;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ padding-right }
ThtmlcssPaddingRightProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlPadding;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ padding }
ThtmlcssPaddingProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlPaddings;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ border-top-width }
ThtmlcssBorderTopWidthProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlBorderWidth;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ border-right-width }
ThtmlcssBorderRightWidthProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlBorderWidth;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ border-bottom-width }
ThtmlcssBorderBottomWidthProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlBorderWidth;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ border-left-width }
ThtmlcssBorderLeftWidthProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlBorderWidth;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ border-width }
ThtmlcssBorderWidthsProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlBorderWidths;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ border-colour }
ThtmlcssBorderColProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlColor;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ border-style }
ThtmlcssBorderStyleProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlBorderStyle;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ border-top }
ThtmlcssBorderTopProperty = class(ThtmlcssProperty)
protected
FWidth : ThtmlLength;
FStyle : ThtmlBorderStyle;
FColor : ThtmlColor;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ border-right }
ThtmlcssBorderRightProperty = class(ThtmlcssProperty)
protected
FWidth : ThtmlLength;
FStyle : ThtmlBorderStyle;
FColor : ThtmlColor;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ border-bottom }
ThtmlcssBorderBottomProperty = class(ThtmlcssProperty)
protected
FWidth : ThtmlLength;
FStyle : ThtmlBorderStyle;
FColor : ThtmlColor;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ border-left }
ThtmlcssBorderLeftProperty = class(ThtmlcssProperty)
protected
FWidth : ThtmlLength;
FStyle : ThtmlBorderStyle;
FColor : ThtmlColor;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ border }
ThtmlcssBorderProperty = class(ThtmlcssProperty)
protected
FWidth : ThtmlLength;
FStyle : ThtmlBorderStyle;
FColor : ThtmlColor;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ width }
ThtmlcssWidthProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlLength;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ height }
ThtmlcssHeightProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlLength;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ float }
ThtmlcssFloatProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlFloatType;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ clear }
ThtmlcssClearProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlClearType;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ }
{ Classification }
{ }
type
{ display }
ThtmlcssDisplayProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlDisplayType;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ white-space }
ThtmlcssWhiteSpaceProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlWhiteSpaceType;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ list-style-type }
ThtmlcssListStyleTypeProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlListStyleType;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ list-style-image }
ThtmlcssListStyleImageProperty = class(ThtmlcssProperty)
protected
FValue : String;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ list-style-position }
ThtmlcssListStylePositionProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlListStylePositionType;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ list-style }
ThtmlcssListStyleProperty = class(ThtmlcssProperty)
protected
FValue : ThtmlListStyleType;
public
constructor Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean); override;
procedure ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties); override;
end;
{ Utility functions }
function htmlcssGetPropertyClass(const PropertyID: ThtmlcssPropertyID): ThtmlcssPropertyClass;
implementation
uses
{ System }
{$IFDEF DELPHI6_UP}
Windows,
{$ENDIF}
System.UITypes;
{ }
{ ThtmlcssStyleProperties }
{ }
procedure htmlcssStyleResetNonInherited(var Style: ThtmlcssStyleProperties);
begin
with Style do
begin
BackColor.ColorType := colorDefault;
BackAttach := battScroll;
BackImage.ImageType := backimgDefault;
BackRepeat := brepRepeat;
BorderCol.ColorType := colorDefault;
BorderWidths.Top.WidthType := borwidthDefault;
BorderWidths.Left.WidthType := borwidthDefault;
BorderWidths.Bottom.WidthType := borwidthDefault;
BorderWidths.Right.WidthType := borwidthDefault;
Margins.Top.LengthType := lenDefault;
Margins.Left.LengthType := lenDefault;
Margins.Bottom.LengthType := lenDefault;
Margins.Right.LengthType := lenDefault;
Width.LengthType := lenDefault;
Height.LengthType := lenDefault;
SetRect(Padding, -1, -1, -1, -1);
Clear := clearDefault;
Display := displayDefault;
ListStyle := liststyleDefault;
Float := floatNone;
end;
end;
{ }
{ ThtmlcssProperty }
{ }
constructor ThtmlcssProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create;
FPropID := PropID;
FValueStr := ValueStr;
FImportant := Important;
end;
procedure ThtmlcssProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
end;
{ }
{ font-family }
{ }
constructor ThtmlcssFontFamilyProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlDecodeFontFamilyList(ValueStr);
end;
procedure ThtmlcssFontFamilyProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.FontFamily := FValue;
end;
{ }
{ font-style }
{ }
constructor ThtmlcssFontStyleProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeFontStyle(ValueStr);
end;
procedure ThtmlcssFontStyleProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.FontStyle := FValue;
end;
{ }
{ font-variant }
{ }
constructor ThtmlcssFontVariantProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeFontVariant(ValueStr);
end;
procedure ThtmlcssFontVariantProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.FontVariant := FValue;
end;
{ }
{ font-weight }
{ }
constructor ThtmlcssFontWeightProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeFontWeight(ValueStr);
end;
procedure ThtmlcssFontWeightProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.FontWeight := FValue;
end;
{ }
{ font-size }
{ }
constructor ThtmlcssFontSizeProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeFontSize(ValueStr);
end;
procedure ThtmlcssFontSizeProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.FontSize := FValue;
htmlResolveRelativeFontSize(StyleInfo.FontSize, ParentStyle.FontSize);
end;
{ }
{ font }
{ }
constructor ThtmlcssFontProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
htmlcssDecodeFont(ValueStr, FFontStyle, FFontVariant, FFontWeight,
FFontSize, FFontFamily);
end;
procedure ThtmlcssFontProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
if FFontStyle <> fstyleDefault then
StyleInfo.FontStyle := FFontStyle;
if FFontVariant <> fvariantDefault then
StyleInfo.FontVariant := FFontVariant;
if FFontWeight <> fweightDefault then
StyleInfo.FontWeight := FFontWeight;
if FFontSize.SizeType <> fsizeDefault then
StyleInfo.FontSize := FFontSize;
if FFontFamily <> nil then
StyleInfo.FontFamily := FFontFamily;
end;
{ }
{ color }
{ }
constructor ThtmlcssColorProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeColor(ValueStr);
end;
procedure ThtmlcssColorProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.FontColor := FValue;
end;
{ }
{ background-color }
{ }
constructor ThtmlcssBackgroundColorProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeColor(ValueStr);
end;
procedure ThtmlcssBackgroundColorProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.BackColor := FValue;
end;
{ }
{ background-image }
{ }
constructor ThtmlcssBackgroundImageProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeBackgroundImage(ValueStr);
end;
procedure ThtmlcssBackgroundImageProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.BackImage := FValue;
end;
{ }
{ background-repeat }
{ }
constructor ThtmlcssBackgroundRepeatProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeBackgroundRepeat(ValueStr);
end;
procedure ThtmlcssBackgroundRepeatProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.BackRepeat := FValue;
end;
{ }
{ background-attachment }
{ }
constructor ThtmlcssBackgroundAttachmentProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeBackgroundAttachment(ValueStr);
end;
procedure ThtmlcssBackgroundAttachmentProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.BackAttach := FValue;
end;
{ }
{ background-position }
{ ::= [<percentage> | <length>](1,2) | [top | center | bottom] || }
{ [left | center | right] }
{ TODO: Parse correctly }
{ }
constructor ThtmlcssBackgroundPositionProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeLength(ValueStr);
end;
procedure ThtmlcssBackgroundPositionProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
// TODO: Implement
end;
{ }
{ background }
{ }
constructor ThtmlcssBackgroundProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
htmlcssDecodeBackground(ValueStr, FBackColor, FBackImage, FBackRepeat,
FBackAttach);
end;
procedure ThtmlcssBackgroundProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
if FBackColor.ColorType <> colorDefault then
StyleInfo.BackColor := FBackColor;
if FBackImage.ImageType <> backimgDefault then
StyleInfo.BackImage := FBackImage;
if FBackRepeat <> brepDefault then
StyleInfo.BackRepeat := FBackRepeat;
if FBackAttach <> battDefault then
StyleInfo.BackAttach := FBackAttach;
end;
{ }
{ word-spacing }
{ }
constructor ThtmlcssWordSpacingProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeWordSpacing(ValueStr);
end;
procedure ThtmlcssWordSpacingProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.WordSpacing := FValue;
end;
{ }
{ letter-spacing }
{ }
constructor ThtmlcssLetterSpacingProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeLetterSpacing(ValueStr);
end;
procedure ThtmlcssLetterSpacingProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.LetterSpacing := FValue;
end;
{ }
{ text-decoration }
{ }
constructor ThtmlcssTextDecorationProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeTextDecoration(ValueStr);
end;
procedure ThtmlcssTextDecorationProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.TextDecoration := FValue;
end;
{ }
{ vertical-align }
{ }
constructor ThtmlcssVerticalAlignProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeVerticalAlign(ValueStr);
end;
procedure ThtmlcssVerticalAlignProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.VerticalAlign := FValue;
end;
{ }
{ text-transform }
{ }
constructor ThtmlcssTextTransformProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeTextTransform(ValueStr);
end;
procedure ThtmlcssTextTransformProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.TextTransform := FValue;
end;
{ }
{ text-align }
{ }
constructor ThtmlcssTextAlignProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlDecodeTextAlignType(ValueStr);
end;
procedure ThtmlcssTextAlignProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.TextAlign := FValue;
end;
{ }
{ text-indent }
{ }
constructor ThtmlcssTextIndentProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeTextIndent(ValueStr);
end;
procedure ThtmlcssTextIndentProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.TextIndent := FValue;
end;
{ }
{ line-height }
{ }
constructor ThtmlcssLineHeightProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeLength(ValueStr);
end;
procedure ThtmlcssLineHeightProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.LineHeight := FValue;
end;
{ }
{ margin-top }
{ }
constructor ThtmlcssMarginTopProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeMargin(ValueStr);
end;
procedure ThtmlcssMarginTopProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.Margins.Top := FValue;
end;
{ }
{ margin-right }
{ }
constructor ThtmlcssMarginRightProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeMargin(ValueStr);
end;
procedure ThtmlcssMarginRightProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.Margins.Right := FValue;
end;
{ }
{ margin-bottom }
{ }
constructor ThtmlcssMarginBottomProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeMargin(ValueStr);
end;
procedure ThtmlcssMarginBottomProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.Margins.Bottom := FValue;
end;
{ }
{ margin-left }
{ }
constructor ThtmlcssMarginLeftProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeMargin(ValueStr);
end;
procedure ThtmlcssMarginLeftProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.Margins.Left := FValue;
end;
{ }
{ margin }
{ }
constructor ThtmlcssMarginsProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeMargins(ValueStr);
end;
procedure ThtmlcssMarginsProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.Margins := FValue;
end;
{ }
{ padding-top }
{ }
constructor ThtmlcssPaddingTopProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodePadding(ValueStr);
end;
procedure ThtmlcssPaddingTopProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.Padding.Top := htmlResolveLengthPixels(FValue, 0);
end;
{ }
{ padding-left }
{ }
constructor ThtmlcssPaddingLeftProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodePadding(ValueStr);
end;
procedure ThtmlcssPaddingLeftProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.Padding.Left := htmlResolveLengthPixels(FValue, 0);
end;
{ }
{ padding-bottom }
{ }
constructor ThtmlcssPaddingBottomProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodePadding(ValueStr);
end;
procedure ThtmlcssPaddingBottomProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.Padding.Bottom := htmlResolveLengthPixels(FValue, 0);
end;
{ }
{ padding-right }
{ }
constructor ThtmlcssPaddingRightProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodePadding(ValueStr);
end;
procedure ThtmlcssPaddingRightProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.Padding.Right := htmlResolveLengthPixels(FValue, 0);
end;
{ }
{ padding }
{ }
constructor ThtmlcssPaddingProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodePaddings(ValueStr);
end;
procedure ThtmlcssPaddingProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
htmlApplyResolvedPaddings(StyleInfo.Padding, htmlResolvePaddings(FValue));
end;
{ }
{ border-top-width }
{ }
constructor ThtmlcssBorderTopWidthProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeBorderWidth(ValueStr);
end;
procedure ThtmlcssBorderTopWidthProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.BorderWidths.Top := FValue;
end;
{ }
{ border-right-width }
{ }
constructor ThtmlcssBorderRightWidthProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeBorderWidth(ValueStr);
end;
procedure ThtmlcssBorderRightWidthProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.BorderWidths.Right := FValue;
end;
{ }
{ border-bottom-width }
{ }
constructor ThtmlcssBorderBottomWidthProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeBorderWidth(ValueStr);
end;
procedure ThtmlcssBorderBottomWidthProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.BorderWidths.Bottom := FValue;
end;
{ }
{ border-left-width }
{ }
constructor ThtmlcssBorderLeftWidthProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeBorderWidth(ValueStr);
end;
procedure ThtmlcssBorderLeftWidthProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.BorderWidths.Left := FValue;
end;
{ }
{ border-width }
{ }
constructor ThtmlcssBorderWidthsProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeBorderWidths(ValueStr);
end;
procedure ThtmlcssBorderWidthsProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.BorderWidths := FValue;
end;
{ }
{ border-color }
{ }
constructor ThtmlcssBorderColProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeColor(ValueStr);
end;
procedure ThtmlcssBorderColProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.BorderCol := FValue;
end;
{ }
{ border-style }
{ }
constructor ThtmlcssBorderStyleProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeBorderStyle(ValueStr);
end;
procedure ThtmlcssBorderStyleProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.BorderStyle := FValue;
end;
{ }
{ border-top }
{ }
constructor ThtmlcssBorderTopProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FWidth := htmlcssDecodeLength(ValueStr);
FStyle := htmlcssDecodeBorderStyle(ValueStr);
FColor := htmlcssDecodeColor(ValueStr);
end;
procedure ThtmlcssBorderTopProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
if FWidth.LengthType <> lenDefault then
begin
StyleInfo.BorderWidths.Top.WidthType := borwidthLength;
StyleInfo.BorderWidths.Top.Len := FWidth;
end;
end;
{ }
{ border-right }
{ }
constructor ThtmlcssBorderRightProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FWidth := htmlcssDecodeLength(ValueStr);
FStyle := htmlcssDecodeBorderStyle(ValueStr);
FColor := htmlcssDecodeColor(ValueStr);
end;
procedure ThtmlcssBorderRightProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
if FWidth.LengthType <> lenDefault then
begin
StyleInfo.BorderWidths.Right.WidthType := borwidthLength;
StyleInfo.BorderWidths.Right.Len := FWidth;
end;
end;
{ }
{ border-bottom }
{ }
constructor ThtmlcssBorderBottomProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FWidth := htmlcssDecodeLength(ValueStr);
FStyle := htmlcssDecodeBorderStyle(ValueStr);
FColor := htmlcssDecodeColor(ValueStr);
end;
procedure ThtmlcssBorderBottomProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
if FWidth.LengthType <> lenDefault then
begin
StyleInfo.BorderWidths.Bottom.WidthType := borwidthLength;
StyleInfo.BorderWidths.Bottom.Len := FWidth;
end;
end;
{ }
{ border-left }
{ }
constructor ThtmlcssBorderLeftProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FWidth := htmlcssDecodeLength(ValueStr);
FStyle := htmlcssDecodeBorderStyle(ValueStr);
FColor := htmlcssDecodeColor(ValueStr);
end;
procedure ThtmlcssBorderLeftProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
if FWidth.LengthType <> lenDefault then
begin
StyleInfo.BorderWidths.Left.WidthType := borwidthLength;
StyleInfo.BorderWidths.Left.Len := FWidth;
end;
end;
{ }
{ border }
{ }
constructor ThtmlcssBorderProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FWidth := htmlcssDecodeLength(ValueStr);
FStyle := htmlcssDecodeBorderStyle(ValueStr);
FColor := htmlcssDecodeColor(ValueStr);
end;
procedure ThtmlcssBorderProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
end;
{ }
{ width }
{ }
constructor ThtmlcssWidthProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeLength(ValueStr);
end;
procedure ThtmlcssWidthProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.Width := FValue;
end;
{ }
{ height }
{ }
constructor ThtmlcssHeightProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeLength(ValueStr);
end;
procedure ThtmlcssHeightProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.Height := FValue;
end;
{ }
{ float }
{ }
constructor ThtmlcssFloatProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeFloatType(ValueStr);
end;
procedure ThtmlcssFloatProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.Float := FValue;
end;
{ }
{ clear }
{ }
constructor ThtmlcssClearProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlDecodeClearType(ValueStr);
end;
procedure ThtmlcssClearProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.Clear := FValue;
end;
{ }
{ display }
{ }
constructor ThtmlcssDisplayProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeDisplayType(ValueStr);
end;
procedure ThtmlcssDisplayProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.Display := FValue;
end;
{ }
{ white-space }
{ }
constructor ThtmlcssWhiteSpaceProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeWhiteSpaceType(ValueStr);
end;
procedure ThtmlcssWhiteSpaceProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.WhiteSpace := FValue;
end;
{ }
{ list-style-type }
{ }
constructor ThtmlcssListStyleTypeProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeListStyleType(ValueStr);
end;
procedure ThtmlcssListStyleTypeProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.ListStyleType := FValue;
end;
{ }
{ list-style-image }
{ }
constructor ThtmlcssListStyleImageProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := ValueStr;
end;
procedure ThtmlcssListStyleImageProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.ListStyleImage := FValue;
end;
{ }
{ list-style-position }
{ }
constructor ThtmlcssListStylePositionProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeListStylePositionType(ValueStr);
end;
procedure ThtmlcssListStylePositionProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.ListStylePosition := FValue;
end;
{ }
{ list-style }
{ }
constructor ThtmlcssListStyleProperty.Create(const PropID: ThtmlcssPropertyID;
const ValueStr: String; const Important: Boolean);
begin
inherited Create(PropID, ValueStr, Important);
FValue := htmlcssDecodeListStyleType(ValueStr);
end;
procedure ThtmlcssListStyleProperty.ApplyStyleInfo(var StyleInfo: ThtmlcssStyleProperties;
const ParentStyle: ThtmlcssStyleProperties);
begin
StyleInfo.ListStyle := FValue;
end;
{ }
{ Property Class Mapping }
{ }
const
HTMLCSSPropertyClasses: Array[ThtmlcssPropertyID] of ThtmlcssPropertyClass = (
{ Font properties }
nil,
ThtmlcssFontFamilyProperty,
ThtmlcssFontStyleProperty,
ThtmlcssFontVariantProperty,
ThtmlcssFontWeightProperty,
ThtmlcssFontSizeProperty,
ThtmlcssFontProperty,
{ Color and background properties }
ThtmlcssColorProperty,
ThtmlcssBackgroundColorProperty,
ThtmlcssBackgroundImageProperty,
ThtmlcssBackgroundRepeatProperty,
ThtmlcssBackgroundAttachmentProperty,
ThtmlcssBackgroundPositionProperty,
ThtmlcssBackgroundProperty,
{ Text properties }
ThtmlcssWordSpacingProperty,
ThtmlcssLetterSpacingProperty,
ThtmlcssTextDecorationProperty,
ThtmlcssVerticalAlignProperty,
ThtmlcssTextTransformProperty,
ThtmlcssTextAlignProperty,
ThtmlcssTextIndentProperty,
ThtmlcssLineHeightProperty,
{ Box properties }
ThtmlcssMarginTopProperty,
ThtmlcssMarginRightProperty,
ThtmlcssMarginBottomProperty,
ThtmlcssMarginLeftProperty,
ThtmlcssMarginsProperty,
ThtmlcssPaddingTopProperty,
ThtmlcssPaddingRightProperty,
ThtmlcssPaddingBottomProperty,
ThtmlcssPaddingLeftProperty,
ThtmlcssPaddingProperty,
ThtmlcssBorderTopWidthProperty,
ThtmlcssBorderRightWidthProperty,
ThtmlcssBorderBottomWidthProperty,
ThtmlcssBorderLeftWidthProperty,
ThtmlcssBorderWidthsProperty,
ThtmlcssBorderColProperty,
ThtmlcssBorderStyleProperty,
ThtmlcssBorderTopProperty,
ThtmlcssBorderRightProperty,
ThtmlcssBorderBottomProperty,
ThtmlcssBorderLeftProperty,
ThtmlcssBorderProperty,
ThtmlcssWidthProperty,
ThtmlcssHeightProperty,
ThtmlcssFloatProperty,
ThtmlcssClearProperty,
{ Classification properties }
ThtmlcssDisplayProperty,
ThtmlcssWhiteSpaceProperty,
ThtmlcssListStyleTypeProperty,
ThtmlcssListStyleImageProperty,
ThtmlcssListStylePositionProperty,
ThtmlcssListStyleProperty);
function htmlcssGetPropertyClass(const PropertyID: ThtmlcssPropertyID): ThtmlcssPropertyClass;
begin
Result := HTMLCSSPropertyClasses[PropertyID];
if not Assigned(Result) then
Result := ThtmlcssProperty;
end;
end.