167 lines
4.4 KiB
Plaintext
167 lines
4.4 KiB
Plaintext
Type TSDocxShadingRange = Class(TSDocxShading)
|
||
Uses TSDocxEnumerations;
|
||
|
||
public
|
||
Function Init(rangeObj);
|
||
Function Apply();override;
|
||
|
||
private
|
||
Function GetShadingObjectByNode(node);
|
||
Function GetShading(arr);
|
||
Function CallFunction(fname, value);overload;
|
||
Function CallFunction(fname);overload;
|
||
|
||
private
|
||
range_obj_;
|
||
shading_hash_;
|
||
|
||
public
|
||
Function WriteTexture(value);override;
|
||
Function ReadTexture();override;
|
||
Function WriteForegroundPatternColorIndex(value);override;
|
||
Function ReadForegroundPatternColorIndex();override;
|
||
Function WriteForegroundPatternColor(value);override;
|
||
Function ReadForegroundPatternColor();override;
|
||
Function WriteBackgroundPatternColorIndex(value);override;
|
||
Function ReadBackgroundPatternColorIndex();override;
|
||
Function WriteBackgroundPatternColor(value);override;
|
||
Function ReadBackgroundPatternColor();override;
|
||
|
||
End;
|
||
|
||
|
||
// ============== 实现 ================= //
|
||
Function TSDocxShadingRange.Init(rangeObj);
|
||
Begin
|
||
range_obj_ := rangeObj;
|
||
shading_hash_ := array();
|
||
class(TSDocxShading).Init(nil);
|
||
End;
|
||
|
||
Function TSDocxShadingRange.Apply();override;
|
||
Begin
|
||
CallFunction("Apply");
|
||
End;
|
||
|
||
Function TSDocxShadingRange.GetShading(arr);
|
||
Begin
|
||
if arr.Entirety then
|
||
begin
|
||
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;
|
||
if not ifObj(trun.Root()) then return nil;
|
||
shading := new TSDocxShading(self.Application, self.Creator, self.Parent);
|
||
shading.Init(trun.rPr.Shading);
|
||
end
|
||
return shading;
|
||
End;
|
||
|
||
Function TSDocxShadingRange.GetShadingObjectByNode(node);
|
||
Begin
|
||
name := node.GetName();
|
||
if name = "w:p" then
|
||
begin
|
||
obj := TOfficeObj("TParagraph");
|
||
obj.Init(node);
|
||
paragraph_obj := new TSDocxParagraph(self.Application, self.Creator, self.Parent);
|
||
paragraph_obj.Init(nil, obj, nil);
|
||
return paragraph_obj.Shading;
|
||
end
|
||
else if name = "w:tbl" then
|
||
begin
|
||
obj := TOfficeObj("TTable");
|
||
obj.Init(node);
|
||
table_obj := new TSDocxTable(self.Application, self.Creator, self.Parent);
|
||
table_obj.Init(nil, obj);
|
||
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;
|
||
end
|
||
End;
|
||
|
||
Function TSDocxShadingRange.CallFunction(fname, value);overload;
|
||
Begin
|
||
// 这样设计是为了段落走走段落的shading,table走table的,cell走cell的
|
||
range_obj_.SplitRun();
|
||
for i:=0 to range_obj_.Size()-1 do
|
||
begin
|
||
shading := GetShading(range_obj_[i]);
|
||
if ifnil(shading) then continue;
|
||
pf := FindFunction(fname, shading);
|
||
pf.Do(value);
|
||
end
|
||
End;
|
||
|
||
Function TSDocxShadingRange.CallFunction(fname);overload;
|
||
Begin
|
||
range_obj_.SplitRun();
|
||
ret := nil;
|
||
for i:=0 to range_obj_.Size()-1 do
|
||
begin
|
||
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();
|
||
if ifnil(ret) then ret := r;
|
||
if ret <> r then return TSDocxEnumerations.WdUnderline();
|
||
end
|
||
return ret;
|
||
End;
|
||
|
||
// property
|
||
Function TSDocxShadingRange.WriteTexture(value);override;
|
||
Begin
|
||
CallFunction("WriteTexture", value);
|
||
End;
|
||
Function TSDocxShadingRange.ReadTexture();override;
|
||
Begin
|
||
return CallFunction("ReadTexture");
|
||
End;
|
||
|
||
Function TSDocxShadingRange.WriteForegroundPatternColorIndex(value);override;
|
||
Begin
|
||
CallFunction("WriteForegroundPatternColorIndex", value);
|
||
End;
|
||
Function TSDocxShadingRange.ReadForegroundPatternColorIndex();override;
|
||
Begin
|
||
return CallFunction("ReadForegroundPatternColorIndex");
|
||
End;
|
||
|
||
Function TSDocxShadingRange.WriteForegroundPatternColor(value);override;
|
||
Begin
|
||
CallFunction("WriteForegroundPatternColor", value);
|
||
End;
|
||
Function TSDocxShadingRange.ReadForegroundPatternColor();override;
|
||
Begin
|
||
return CallFunction("ReadForegroundPatternColor");
|
||
End;
|
||
|
||
Function TSDocxShadingRange.WriteBackgroundPatternColorIndex(value);override;
|
||
Begin
|
||
CallFunction("WriteBackgroundPatternColorIndex", value);
|
||
End;
|
||
Function TSDocxShadingRange.ReadBackgroundPatternColorIndex();override;
|
||
Begin
|
||
return CallFunction("ReadBackgroundPatternColorIndex");
|
||
End;
|
||
|
||
Function TSDocxShadingRange.WriteBackgroundPatternColor(value);override;
|
||
Begin
|
||
CallFunction("WriteBackgroundPatternColor", value);
|
||
End;
|
||
Function TSDocxShadingRange.ReadBackgroundPatternColor();override;
|
||
Begin
|
||
return CallFunction("ReadBackgroundPatternColor");
|
||
End;
|
||
|