📄 synuniformatnativexml20.pas
字号:
{
@abstract(Provides Format 2.0 highlighters import and export)
@authors(Vitalik [2vitalik@gmail.com], Quadr0 [quadr02005@gmail.com])
@created(2005)
@lastmod(2006-07-23)
}
{$IFNDEF QSynUniFormatNativeXml20}
unit SynUniFormatNativeXml20;
{$ENDIF}
{$I SynUniHighlighter.inc}
interface
uses
{$IFDEF SYN_CLX}
QClasses,
QGraphics,
QSynUniFormat,
QSynUniClasses,
QSynUniRules,
QSynUniHighlighter
{$ELSE}
Classes,
Graphics,
{$IFDEF SYN_COMPILER_6_UP}
Variants,
{$ENDIF}
SynUniFormat,
SynUniFormatNativeXml,
SynUniClasses,
SynUniRules,
SynUniHighlighter,
{$IFDEF CODEFOLDING}
SynEditCodeFolding,
{$ENDIF}
{$ENDIF}
SysUtils,
SimpleXML; // DW
type
TSynUniFormatNativeXml20 = class(TSynUniFormatNativeXml)
class function ImportInfo(AInfo: TSynInfo; ANode: IXMLNode): Boolean; override;
class function ExportInfo(AInfo: TSynInfo; ANode: IXMLNode): Boolean; override;
class function ImportEditorProperties(AEditorProperties: TEditorProperties; ANode: IXMLNode): Boolean; override;
class function ExportEditorProperties(AEditorProperties: TEditorProperties; ANode: IXMLNode): Boolean; override;
class function ImportAttributes(Attributes: TSynAttributes; ANode: IXMLNode): Boolean; override;
class function ExportAttributes(Attributes: TSynAttributes; ANode: IXMLNode): Boolean; override;
class function ImportSchemes(ASchemes: TSynUniSchemes; ANode: IXMLNode): Boolean; override;
class function ExportSchemes(ASchemes: TSynUniSchemes; ANode: IXMLNode): Boolean; override;
class function ImportToken(AToken: TSynMultiToken; ANode: IXMLNode): Boolean; override;
class function ExportToken(AToken: TSynMultiToken; ANode: IXMLNode): Boolean; override;
class function ImportKeyList(AKeyList: TSynKeyList; ANode: IXMLNode): Boolean; override;
class function ExportKeyList(AKeyList: TSynKeyList; ANode: IXMLNode): Boolean; override;
class function ImportSet(ASet: TSynSet; ANode: IXMLNode): Boolean; override;
class function ExportSet(ASet: TSynSet; ANode: IXMLNode): Boolean; override;
class function ImportRange(ARange: TSynRange; ANode: IXMLNode): Boolean; override;
class function ExportRange(ARange: TSynRange; ANode: IXMLNode): Boolean; override;
{$IFDEF CODEFOLDING}
class function ImportCodeFolding(AFoldRegions: TFoldRegions; ANode: IXMLNode): Boolean;
class function ExportCodeFolding(AFoldRegions: TFoldRegions; ANode: IXMLNode): Boolean;
{$ENDIF}
{$IFDEF CUSTOMDATA}
class function ImportCustomData(ACustomData: TStringList; ANode: IXMLNode): Boolean;
class function ExportCustomData(ACustomData: TStringList; ANode: IXMLNode): Boolean;
{$ENDIF}
class function ImportHighlighter(SynUniSyn: TSynUniSyn; ANode: IXMLNode): Boolean; override;
class function ExportHighlighter(SynUniSyn: TSynUniSyn; ANode: IXMLNode): Boolean; override;
class function ImportFromStream(AObject: TObject; AStream: TStream): Boolean; override;
class function ExportToStream(AObject: TObject; AStream: TStream): Boolean; override;
class function ImportFromFile(AObject: TObject; AFileName: string): Boolean; override;
class function ExportToFile(AObject: TObject; AFileName: string): Boolean; override;
end;
implementation
{$IFDEF CODEFOLDING}
//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ImportCodeFolding(AFoldRegions: TFoldRegions; ANode: IXMLNode): Boolean;
var
i: integer;
NewRegion: TFoldRegionItem;
// FoldRegionList: TFoldRegions;
begin
{ if ParentRegion = nil then
FoldRegionList := FoldRegions
else
FoldRegionList := ParentRegion.SubFoldRegions;}
for i := 0 to ANode.ChildNodes.Count - 1 do
begin
with ANode.ChildNodes.Item[i] do begin
// Modified by Administrator 2007-12-1 上午 12:09:48
if LowerCase(NodeName) = 'skipregion' then
begin
AFoldRegions.SkipRegions.Add(
EnsureChild('Open').GetAttr('Symbol'),
EnsureChild('Close').GetAttr('Symbol'),
EnsureChild('Escape').GetAttr('Symbol'),
TSkipRegionItemType(EnsureChild('RegionType').GetIntAttr('Type')));
Continue;
end;
NewRegion := AFoldRegions.Add(
TFoldRegionType(GetIntAttr('Type')),
EnsureChild('Properties').GetBoolAttr('AddEnding'),
EnsureChild('Properties').GetBoolAttr('AllowNoSubs'),
EnsureChild('Properties').GetBoolAttr('WholeWords'),
PChar(EnsureChild('OpenToken').GetAttr('Symbol')), //PChar
PChar(EnsureChild('CloseToken').GetAttr('Symbol'))); //PChar
with NewRegion do begin
Name := GetAttr('Name');
RegExpOpen := PChar(EnsureChild('OpenToken').GetAttr('RegExpr')); //PChar
RegExpClose := PChar(EnsureChild('CloseToken').GetAttr('RegExpr')); //PChar
RegExpUseOpen := EnsureChild('OpenToken').GetBoolAttr('UseRegExpr');
RegExpUseClose := EnsureChild('CloseToken').GetBoolAttr('UseRegExpr');
end;
ImportCodeFolding(NewRegion.SubFoldRegions, EnsureChild('SubRegions'));
end
end
end;
//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ExportCodeFolding(AFoldRegions: TFoldRegions; ANode: IXMLNode): Boolean;
var
i: integer;
NewNode: IXMLNode;
// FoldRegionList: TFoldRegions;
begin
{ if ARegion = nil then
FoldRegionList := FoldRegions
else
FoldRegionList := ARegion.SubFoldRegions;}
// Modified by Administrator 2007-12-1 上午 12:10:57
for i := 0 to AFoldRegions.SkipRegions.Count - 1 do
begin
NewNode := ANode.AppendElement('SkipRegion');
with NewNode, AFoldRegions.SkipRegions.SkipRegions[i] do
begin
if StrLen(Open) > 0 then
AppendElement('Open').SetVarAttr('Symbol', string(open));
if StrLen(Close) > 0 then
AppendElement('Close').SetVarAttr('Symbol', string(Close));
if StrLen(Escape) > 0 then
AppendElement('Escape').SetVarAttr('Symbol', string(Escape));
AppendElement('RegionType').SetVarAttr('Type', Integer(RegionType));
end;
end;
for i := 0 to AFoldRegions.Count - 1 do
begin
NewNode := ANode.AppendElement('FoldRegion');
with NewNode, AFoldRegions.Items[i] do
begin
SetVarAttr('Name',Name);
SetVarAttr('Type',Ord(FoldRegionType));
with AppendElement('OpenToken') do
begin
if StrLen(Open) > 0 then
SetVarAttr('Symbol', string(Open));
if StrLen(RegExpOpen) > 0 then
SetVarAttr('RegExpr', string(RegExpOpen));
if RegExpUseOpen then
SetVarAttr('UseRegExpr', BoolToStr(RegExpUseOpen, True));
end;
with AppendElement('CloseToken') do
begin
if StrLen(Close) > 0 then
SetVarAttr('Symbol', string(Close));
if StrLen(RegExpClose) > 0 then
SetVarAttr('RegExpr', string(RegExpClose));
if RegExpUseClose then
SetVarAttr('UseRegExpr', BoolToStr(RegExpUseClose, True));
end;
with AppendElement('Properties') do
begin
if AddEnding then
SetVarAttr('AddEnding', BoolToStr(AddEnding, True));
if NoSubFoldRegions then
SetVarAttr('AllowNoSubs', BoolToStr(NoSubFoldRegions, True));
if WholeWords then
SetVarAttr('WholeWords', BoolToStr(WholeWords, True));
end;
ExportCodeFolding(AFoldRegions.Items[i].SubFoldRegions, AppendElement('SubRegions'));
end;
end;
end;
{$ENDIF}
//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ImportInfo(AInfo: TSynInfo; ANode: IXMLNode): Boolean;
begin
with ANode do
begin
with AInfo.General, EnsureChild('General') do begin
Name := VarToStr(GetVarAttr('Name',''));
Extensions := VarToStr(GetVarAttr('Extensions',''));
Version := VarToInt(GetVarAttr('Version',''));
Revision := VarToInt(GetVarAttr('Revision',''));
Sample := VarToStr(GetVarAttr('Sample',''));
History := VarToStr(GetVarAttr('History',''));
end;
with AInfo.Author, EnsureChild('Author') do begin
Name := VarToStr(GetVarAttr('Name',''));
Email := VarToStr(GetVarAttr('Mail','')); //TODO: 襄疱桁屙钼囹?钺疣蝽??'Email', 犭桧...
Web := VarToStr(GetVarAttr('Web',''));
Copyright := VarToStr(GetVarAttr('Copyright',''));
Company := VarToStr(GetVarAttr('Company',''));
Remark := VarToStr(GetVarAttr('Remark',''));
end;
end;
Result := True;
end;
//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ExportInfo(AInfo: TSynInfo; ANode: IXMLNode): Boolean;
begin
with AInfo, ANode do
begin
with General, AppendElement('General') do
begin
SetVarAttr('Name', Name);
SetVarAttr('Extensions', Extensions);
SetVarAttr('Version', Version);
SetVarAttr('Revision', Revision);
SetVarAttr('Sample', Sample);
SetVarAttr('History', History);
end;
with Author, AppendElement('Author') do
begin
SetVarAttr('Name', Name);
SetVarAttr('Mail', Email); //TODO: 襄疱桁屙钼囹?钺疣蝽??'Email', 犭桧...
SetVarAttr('Web', Web);
SetVarAttr('Copyright', Copyright);
SetVarAttr('Company', Company);
SetVarAttr('Remark', Remark);
end;
end;
Result := True;
end;
//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ImportEditorProperties(AEditorProperties: TEditorProperties; ANode: IXMLNode): Boolean;
begin
with AEditorProperties, ANode do
begin
ActiveLineColor := VarToColor(GetVarAttr('ActiveLineColor', ''), clNone);
SelectedForeground := VarToColor(GetVarAttr('SelectedForeground', ''), clHighlightText);
SelectedBackground := VarToColor(GetVarAttr('SelectedBackground', ''), clHighlight);
end;
Result := True;
end;
//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ExportEditorProperties(AEditorProperties: TEditorProperties; ANode: IXMLNode): Boolean;
begin
with AEditorProperties, ANode do
begin
if ActiveLineColor <> clNone then
SetVarAttr('ActiveLineColor', ColorToString(ActiveLineColor));
if SelectedForeground <> clHighlightText then
SetVarAttr('SelectedForeground', ColorToString(SelectedForeground));
if SelectedBackground <> clHighlight then
SetVarAttr('SelectedBackground', ColorToString(SelectedBackground));
end;
Result := True;
end;
//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ImportAttributes(Attributes: TSynAttributes; ANode: IXMLNode): Boolean;
begin
with Attributes, ANode do
begin
ParentForeground := False; // 腕骓?腓?..
ParentBackground := False;
Foreground := VarToColor(GetVarAttr('Foreground', ''), clWindowText);
Background := VarToColor(GetVarAttr('Background', ''), clWindow);
ParentForeground := VarToBool(GetVarAttr('ParentForeground', ''));
ParentBackground := VarToBool(GetVarAttr('ParentBackground', ''));
Style := StrToFontStyle(VarToStr(GetVarAttr('Style', '')));
end;
Result := True;
end;
//----------------------------------------------------------------------------
class function TSynUniFormatNativeXml20.ExportAttributes(Attributes: TSynAttributes; ANode: IXMLNode): Boolean;
begin
with Attributes, ANode do begin
SetVarAttr('Foreground', ColorToString(Foreground));
SetVarAttr('Background', ColorToString(Background));
if ParentForeground then
SetVarAttr('ParentForeground', BoolToStr(ParentForeground, True));
if ParentBackground then
SetVarAttr('ParentBackground', BoolToStr(ParentBackground, True));
if Style <> [] then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -