range重新设计

This commit is contained in:
csh
2023-11-29 17:27:34 +08:00
parent 3781bc96e7
commit f0560b2330
28 changed files with 2829 additions and 383 deletions
+8 -37
View File
@@ -3,6 +3,7 @@ Uses TSDocxEnumerations;
public
Function Init(pr);
Function Apply();virtual;
protected
pr_;
@@ -161,17 +162,21 @@ Begin
color_ := TSWdColor();
End;
// function
Function TSDocxFont.Apply();virtual;
Begin
pr_.Update("first");
End;
// Methods
Function TSDocxFont.Reset();virtual;
Begin
pr_.Delete();
End;
// property
// Properties
Function TSDocxFont.WriteAllCaps(value);virtual;
Begin
pr_.Caps := value = TSDocxEnumerations.wdToggle() ? _Not(self.Caps) : value;
pr_.Update("first");
End;
Function TSDocxFont.ReadAllCaps();virtual;
Begin
@@ -181,7 +186,6 @@ End;
Function TSDocxFont.WriteBold(value);virtual;
Begin
pr_.Bold := value = TSDocxEnumerations.wdToggle() ? _Not(self.Bold) : value;
pr_.Update("first");
End;
Function TSDocxFont.ReadBold();virtual;
Begin
@@ -191,7 +195,6 @@ End;
Function TSDocxFont.WriteBoldBi(value);virtual;
Begin
pr_.BoldBi := value = TSDocxEnumerations.wdToggle() ? _Not(self.BoldBi) : value;
pr_.Update("first");
End;
Function TSDocxFont.ReadBoldBi();virtual;
Begin
@@ -204,7 +207,6 @@ Begin
if ifnil(color) then pr_.Root().DeleteChild("w:color");
else begin
pr_.Color := color;
pr_.Update("first");
end
End;
Function TSDocxFont.ReadColorIndex();virtual;
@@ -224,7 +226,6 @@ End;
Function TSDocxFont.WriteContextualAlternates(value);virtual;
Begin
pr_.ContextualAlternates := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadContextualAlternates();virtual;
Begin
@@ -234,7 +235,6 @@ End;
Function TSDocxFont.WriteDisableCharacterSpaceGrid(value);virtual;
Begin
pr_.SnapToGrid := value ? false : true;
pr_.Update("first");
End;
Function TSDocxFont.ReadDisableCharacterSpaceGrid();virtual;
Begin
@@ -244,7 +244,6 @@ End;
Function TSDocxFont.WriteDoubleStrikeThrough(value);virtual;
Begin
pr_.dStrike := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadDoubleStrikeThrough();virtual;
Begin
@@ -260,7 +259,6 @@ End;
Function TSDocxFont.WriteEmboss(value);override;
Begin
pr_.Emboss := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadEmboss();override;
Begin
@@ -281,7 +279,6 @@ Begin
TSDocxEnumerations.wdEmphasisMarkUnderSolidCircle:
pr_.Em := "underDot";
end;
pr_.Update("first");
End;
Function TSDocxFont.ReadEmphasisMark();virtual;
Begin
@@ -302,7 +299,6 @@ End;
Function TSDocxFont.WriteEngrave(value);virtual;
Begin
pr_.ImPrint := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadEngrave();virtual;
Begin
@@ -312,7 +308,6 @@ End;
Function TSDocxFont.WriteHidden(value);virtual;
Begin
pr_.Vanish := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadHidden();virtual;
Begin
@@ -322,7 +317,6 @@ End;
Function TSDocxFont.WriteItalic(value);virtual;
Begin
pr_.Italic := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadItalic();virtual;
Begin
@@ -332,7 +326,6 @@ End;
Function TSDocxFont.WriteItalicBi(value);virtual;
Begin
pr_.ICs := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadItalicBi();virtual;
Begin
@@ -342,7 +335,6 @@ End;
Function TSDocxFont.WriteKerning(value);virtual;
Begin
pr_.Kern := value * 2;
pr_.Update("first");
End;
Function TSDocxFont.ReadKerning();virtual;
Begin
@@ -385,7 +377,6 @@ Begin
TSDocxEnumerations.wdLigaturesStandardHistoricalDiscretional():
pr_.Ligatures := "standardHistoricalDiscretional";
end;
pr_.Update("first");
End;
Function TSDocxFont.ReadLigatures();virtual;
Begin
@@ -429,7 +420,6 @@ Function TSDocxFont.WriteName(value);virtual;
Begin
pr_.rFont.EastAsia := value;
pr_.rFont.Ascii := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadName();virtual;
@@ -440,7 +430,6 @@ End;
Function TSDocxFont.WriteNameAscii(value);virtual;
Begin
pr_.rFont.Ascii := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadNameAscii();virtual;
Begin
@@ -450,7 +439,6 @@ End;
Function TSDocxFont.WriteNameBi(value);virtual;
Begin
pr_.rFont.Cs := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadNameBi();virtual;
Begin
@@ -460,7 +448,6 @@ End;
Function TSDocxFont.WriteNameFarEast(value);virtual;
Begin
pr_.rFont.EastAsia := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadNameFarEast();virtual;
Begin
@@ -471,7 +458,6 @@ End;
Function TSDocxFont.WriteNameOther(value);virtual;
Begin
pr_.rFont.HAnsi := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadNameOther();virtual;
@@ -489,7 +475,6 @@ Begin
TSDocxEnumerations.wdNumberFormOldstyle():
pr_.NumForm := "oldStyle";
end;
pr_.Update("first");
End;
Function TSDocxFont.ReadNumberForm();virtual;
Begin
@@ -513,7 +498,6 @@ Begin
TSDocxEnumerations.wdNumberSpacingTabular():
pr_.NumSpacing := "tabular";
end;
pr_.Update("first");
End;
Function TSDocxFont.ReadNumberSpacing();virtual;
Begin
@@ -530,7 +514,6 @@ End;
Function TSDocxFont.WriteOutline(value);virtual;
Begin
pr_.Outline := value = TSDocxEnumerations.wdToggle() ? _Not(self.Outline) : value;
pr_.Update("first");
End;
Function TSDocxFont.ReadOutline();virtual;
Begin
@@ -540,7 +523,6 @@ End;
Function TSDocxFont.WritePosition(value);virtual;
Begin
pr_.Position := value * 2;
pr_.Update("first");
End;
Function TSDocxFont.ReadPosition();virtual;
Begin
@@ -550,7 +532,6 @@ End;
Function TSDocxFont.WriteScaling(value);virtual;
Begin
pr_.W := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadScaling();virtual;
Begin
@@ -560,7 +541,6 @@ End;
Function TSDocxFont.WriteShadow(value);virtual;
Begin
pr_.Shadow := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadShadow();virtual;
Begin
@@ -570,7 +550,6 @@ End;
Function TSDocxFont.WriteSize(value);virtual;
Begin
pr_.Sz := value * 2;
pr_.Update("first");
End;
Function TSDocxFont.ReadSize();virtual;
Begin
@@ -580,7 +559,6 @@ End;
Function TSDocxFont.WriteSizeBi(value);virtual;
Begin
pr_.SzCs := value * 2;
pr_.Update("first");
End;
Function TSDocxFont.ReadSizeBi();virtual;
Begin
@@ -590,7 +568,6 @@ End;
Function TSDocxFont.WriteSmallCaps(value);virtual;
Begin
pr_.SmallCaps := value = TSDocxEnumerations.wdToggle() ? _Not(self.SmallCaps) : value;
pr_.Update("first");
End;
Function TSDocxFont.ReadSmallCaps();virtual;
Begin
@@ -600,7 +577,6 @@ End;
Function TSDocxFont.WriteSpacing(value);virtual;
Begin
pr_.Spacing := value * 20;
pr_.Update("first");
End;
Function TSDocxFont.ReadSpacing();virtual;
Begin
@@ -610,7 +586,6 @@ End;
Function TSDocxFont.WriteStrikeThrough(value);virtual;
Begin
pr_.Strike := value;
pr_.Update("first");
End;
Function TSDocxFont.ReadStrikeThrough();virtual;
Begin
@@ -620,7 +595,6 @@ End;
Function TSDocxFont.WriteSubscript(value);virtual;
Begin
pr_.VertAlign := "subscript";
pr_.Update("first");
End;
Function TSDocxFont.ReadSubscript();virtual;
Begin
@@ -630,7 +604,6 @@ End;
Function TSDocxFont.WriteSuperscript(value);virtual;
Begin
pr_.VertAlign := "supercript";
pr_.Update("first");
End;
Function TSDocxFont.ReadSuperscript();virtual;
Begin
@@ -677,7 +650,6 @@ Begin
TSDocxEnumerations.wdUnderlineWords():
pr_.U := "words";
end;
pr_.Update("first");
End;
Function TSDocxFont.ReadUnderline();virtual;
Begin
@@ -724,7 +696,6 @@ End;
Function TSDocxFont.WriteUnderlineColor(value);virtual;
Begin
pr_.UColor := color_[value];
pr_.Update("first");
End;
Function TSDocxFont.ReadUnderlineColor();virtual;
Begin
+16 -18
View File
@@ -2,15 +2,15 @@ Type TSDocxFontRange = Class(TSDocxFont)
Uses TSDocxEnumerations;
public
Function Init(arr);
Function Init(rangeObj);
Function Apply();overload;
private
Function CallFunction(pf, value);overload;
Function CallFunction(pf);overload;
Function SplitRun();
private
range_arr_;
range_obj_;
split_flag_; // 写之前切割run,切割后设为true
public
@@ -107,32 +107,29 @@ public
End;
// ============== 实现 ================= //
Function TSDocxFontRange.Init(arr);
Function TSDocxFontRange.Init(rangeObj);
Begin
range_arr_ := arr;
split_flag_ := false;
range_obj_ := rangeObj;
class(TSDocxFont).Init(nil);
End;
Function TSDocxFontRange.SplitRun();
Function TSDocxFontRange.Apply();overload;
Begin
if split_flag_ then return;
class(TSWdCommon).SplitRangeRun(range_arr_);
self.Parent.SetRangeArr(range_arr_);
split_flag_ := true;
CallFunction(ThisFunction(class(TSDocxFont).Apply));
End;
Function TSDocxFontRange.CallFunction(pf, value);overload;
Begin
SplitRun();
for i:=0 to length(range_arr_)-1 do
range_obj_.SplitRun();
range_arr := range_obj_.GetInfo();
for i:=0 to length(range_arr)-1 do
begin
paragraph := range_arr_[i]["tparagraph"];
paragraph := range_arr[i]["tparagraph"];
pr_ := paragraph.pPr.rPr;
##pf(value);
for i:=0 to length(range_arr_)-1 do
for i:=0 to length(range_arr)-1 do
begin
pr_ := range_arr_[i]["trun"].rPr;
pr_ := range_arr[i]["trun"].rPr;
##pf(value);
end
end;
@@ -141,9 +138,10 @@ End;
Function TSDocxFontRange.CallFunction(pf);overload;
Begin
ret := nil;
for i:=0 to length(range_arr_)-1 do
range_arr := range_obj_.GetInfo();
for i:=0 to length(range_arr)-1 do
begin
pr_ := range_arr_[i]["trun"].rPr;
pr_ := range_arr[i]["trun"].rPr;
if not ifObj(pr_.Root()) then continue;
cur := ##pf();
if ifnil(ret) then ret := cur;