170 lines
4.3 KiB
Plaintext
170 lines
4.3 KiB
Plaintext
Type TSDocxShadingRange = Class(TSDocxShading)
|
||
Uses TSDocxEnumerations;
|
||
|
||
public
|
||
Function Init(rangeObj);
|
||
|
||
private
|
||
Function GetShadingObjectByNode(node);
|
||
Function GetShading(arr, hash);
|
||
Function CallFunction(fname, value);overload;
|
||
Function CallFunction(fname);overload;
|
||
Function SplitRun();
|
||
|
||
private
|
||
range_obj_;
|
||
|
||
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;
|
||
class(TSDocxShading).Init(nil);
|
||
End;
|
||
|
||
Function TSDocxShadingRange.SplitRun();
|
||
Begin
|
||
range_obj_.SplitRangeRun();
|
||
self.Parent.SetRangeObj(range_obj_);
|
||
End;
|
||
|
||
Function TSDocxShadingRange.GetShading(arr, hash);
|
||
Begin
|
||
if arr["entirety"] then
|
||
begin
|
||
if not ifnil(hash[arr["entirety"]]) then nil;
|
||
hash[arr["entirety"]] := true;
|
||
shading := GetShadingObjectByNode(arr["entirety"]);
|
||
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的
|
||
SplitRun();
|
||
hash := array();
|
||
range_arr := rangeObj.GetInfo();
|
||
for i:=0 to length(range_arr)-1 do
|
||
begin
|
||
shading := GetShading(range_arr[i], hash);
|
||
if ifnil(shading) then continue;
|
||
pf := FindFunction(fname, shading);
|
||
pf.Do(value);
|
||
end
|
||
End;
|
||
|
||
Function TSDocxShadingRange.CallFunction(fname);overload;
|
||
Begin
|
||
hash := array();
|
||
ret := nil;
|
||
range_arr := rangeObj.GetInfo();
|
||
for i:=0 to length(range_arr)-1 do
|
||
begin
|
||
shading := GetShading(range_arr[i], hash);
|
||
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
|
||
CallFunction("ReadTexture");
|
||
End;
|
||
|
||
Function TSDocxShadingRange.WriteForegroundPatternColorIndex(value);override;
|
||
Begin
|
||
CallFunction("WriteForegroundPatternColorIndex", value);
|
||
End;
|
||
Function TSDocxShadingRange.ReadForegroundPatternColorIndex();override;
|
||
Begin
|
||
CallFunction("ReadForegroundPatternColorIndex");
|
||
End;
|
||
|
||
Function TSDocxShadingRange.WriteForegroundPatternColor(value);override;
|
||
Begin
|
||
|
||
CallFunction("WriteForegroundPatternColor", value);
|
||
End;
|
||
Function TSDocxShadingRange.ReadForegroundPatternColor();override;
|
||
Begin
|
||
CallFunction("ReadForegroundPatternColor");
|
||
End;
|
||
|
||
Function TSDocxShadingRange.WriteBackgroundPatternColorIndex(value);override;
|
||
Begin
|
||
|
||
CallFunction("WriteBackgroundPatternColorIndex", value);
|
||
End;
|
||
Function TSDocxShadingRange.ReadBackgroundPatternColorIndex();override;
|
||
Begin
|
||
CallFunction("ReadBackgroundPatternColorIndex");
|
||
End;
|
||
|
||
Function TSDocxShadingRange.WriteBackgroundPatternColor(value);override;
|
||
Begin
|
||
|
||
CallFunction("WriteBackgroundPatternColor", value);
|
||
End;
|
||
Function TSDocxShadingRange.ReadBackgroundPatternColor();override;
|
||
Begin
|
||
CallFunction("ReadBackgroundPatternColor");
|
||
End;
|
||
|