增加range方法支持

This commit is contained in:
csh
2024-01-19 17:37:26 +08:00
parent b4649653d9
commit 1ac447c94e
10 changed files with 152 additions and 64 deletions
+8 -8
View File
@@ -45,7 +45,7 @@ Begin
End;
// property
Function TSDocxShading.WriteTexture(value);
Function TSDocxShading.WriteTexture(value);virtual;
Begin
case value of
TSDocxEnumerations.wdTexture10Percent():
@@ -156,7 +156,7 @@ Begin
shading_.Val := "thinVertStripe";
end;
End;
Function TSDocxShading.ReadTexture();
Function TSDocxShading.ReadTexture();virtual;
Begin
value := shading_.Value("Val");
case value of
@@ -269,29 +269,29 @@ Begin
end;
End;
Function TSDocxShading.WriteForegroundPatternColorIndex(value);
Function TSDocxShading.WriteForegroundPatternColorIndex(value);virtual;
Begin
shading_.Color := color_index_[value];
End;
Function TSDocxShading.ReadForegroundPatternColorIndex();
Function TSDocxShading.ReadForegroundPatternColorIndex();virtual;
Begin
return color_index_[shading_.Value("Color")];
End;
Function TSDocxShading.WriteForegroundPatternColor(value);
Function TSDocxShading.WriteForegroundPatternColor(value);virtual;
Begin
shading_.Color := color_[value];
End;
Function TSDocxShading.ReadForegroundPatternColor();
Function TSDocxShading.ReadForegroundPatternColor();virtual;
Begin
return color_[shading_.Value("Color")];
End;
Function TSDocxShading.WriteBackgroundPatternColorIndex(value);
Function TSDocxShading.WriteBackgroundPatternColorIndex(value);virtual;
Begin
shading_.Fill := color_index_[value];
End;
Function TSDocxShading.ReadBackgroundPatternColorIndex();
Function TSDocxShading.ReadBackgroundPatternColorIndex();virtual;
Begin
return color_index_[shading_.Value("Fill")];
End;
+16 -20
View File
@@ -7,13 +7,13 @@ public
private
Function GetShadingObjectByNode(node);
Function GetShading(arr, hash);
Function GetShading(arr);
Function CallFunction(fname, value);overload;
Function CallFunction(fname);overload;
Function SplitRun();
private
range_obj_;
shading_hash_;
public
Function WriteTexture(value);override;
@@ -34,27 +34,22 @@ End;
Function TSDocxShadingRange.Init(rangeObj);
Begin
range_obj_ := rangeObj;
shading_hash_ := array();
class(TSDocxShading).Init(nil);
End;
Function TSDocxShadingRange.Apply();override;
Begin
CallFunction(ThisFunction(class(TSDocxShading).Apply), nil);
CallFunction("Apply");
End;
Function TSDocxShadingRange.SplitRun();
Begin
range_obj_.SplitRangeRun();
self.Parent.SetRangeObj(range_obj_);
End;
Function TSDocxShadingRange.GetShading(arr, hash);
Function TSDocxShadingRange.GetShading(arr);
Begin
if arr.Entirety then
begin
if not ifnil(hash[arr.Entirety]) then nil;
hash[arr.Entirety] := true;
if not ifnil(shading_hash_[arr.Entirety]) then return nil;
shading := GetShadingObjectByNode(arr.Entirety);
shading_hash_[arr.Entirety] := shading;
end
else begin
trun := arr.TRun;
@@ -74,7 +69,7 @@ Begin
obj.Init(node);
paragraph_obj := new TSDocxParagraph(self.Application, self.Creator, self.Parent);
paragraph_obj.Init(nil, obj, nil);
return paragraph_obj.Shading();
return paragraph_obj.Shading;
end
else if name = "w:tbl" then
begin
@@ -82,24 +77,23 @@ Begin
obj.Init(node);
table_obj := new TSDocxTable(self.Application, self.Creator, self.Parent);
table_obj.Init(nil, obj);
return table_obj.Shading();
return table_obj.Shading;
end
else if name = "w:tc" then
begin
cell_obj := new TSDocxCell(self.Application, self.Creator, self.Parent);
cell_obj.Init(node);
return cell_obj.Shading();
return cell_obj.Shading;
end
End;
Function TSDocxShadingRange.CallFunction(fname, value);overload;
Begin
// 这样设计是为了段落走走段落的shadingtable走table的,cell走cell的
SplitRun();
hash := array();
range_obj_.SplitRun();
for i:=0 to range_obj_.Size()-1 do
begin
shading := GetShading(range_obj_[i], hash);
shading := GetShading(range_obj_[i]);
if ifnil(shading) then continue;
pf := FindFunction(fname, shading);
pf.Do(value);
@@ -108,11 +102,13 @@ End;
Function TSDocxShadingRange.CallFunction(fname);overload;
Begin
hash := array();
range_obj_.SplitRun();
ret := nil;
for i:=0 to range_obj_.Size()-1 do
begin
shading := GetShading(range_obj_[i], hash);
arr := range_obj_[i];
if arr.Entirety and shading_hash_[arr.Entirety] then shading := shading_hash_[arr.Entirety];
else shading := GetShading(range_obj_[i]);
if ifnil(shading) then continue;
pf := FindFunction(fname, shading);
r := pf.Do();