增加range方法支持
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
// 这样设计是为了段落走走段落的shading,table走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();
|
||||
|
||||
Reference in New Issue
Block a user