增加range方法支持
This commit is contained in:
parent
b4649653d9
commit
1ac447c94e
Binary file not shown.
|
|
@ -4,6 +4,9 @@ public
|
||||||
Function Create();
|
Function Create();
|
||||||
Function Init();
|
Function Init();
|
||||||
|
|
||||||
|
private
|
||||||
|
documents_;
|
||||||
|
|
||||||
public
|
public
|
||||||
// Methods
|
// Methods
|
||||||
Function Activate();
|
Function Activate();
|
||||||
|
|
@ -340,9 +343,6 @@ public
|
||||||
Function ReadActiveEncryptionSession();
|
Function ReadActiveEncryptionSession();
|
||||||
Function ReadActiveDocument();
|
Function ReadActiveDocument();
|
||||||
|
|
||||||
private
|
|
||||||
documents_;
|
|
||||||
|
|
||||||
End;
|
End;
|
||||||
|
|
||||||
// ============== 实现 ================= //
|
// ============== 实现 ================= //
|
||||||
|
|
@ -358,7 +358,6 @@ Begin
|
||||||
documents_.Init();
|
documents_.Init();
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
|
||||||
// Properties
|
// Properties
|
||||||
Function TSDocxApplication.ReadDocuments(Index)
|
Function TSDocxApplication.ReadDocuments(Index)
|
||||||
Begin
|
Begin
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ public
|
||||||
Function Item(Index);
|
Function Item(Index);
|
||||||
Function Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument,
|
Function Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument,
|
||||||
PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format,
|
PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format,
|
||||||
Encoding, Visible, OpenConflictDocument, OpenAndRepair, DocumentDirection, NoEncodingDialog); // Completed
|
Encoding, Visible, OpenConflictDocument, OpenAndRepair, DocumentDirection, NoEncodingDialog); overload;
|
||||||
Function OpenNoRepairDialog(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles,
|
Function OpenNoRepairDialog(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles,
|
||||||
PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument,
|
PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument,
|
||||||
WritePasswordTemplate, Format, Encoding, Visible, OpenAndRepair,
|
WritePasswordTemplate, Format, Encoding, Visible, OpenAndRepair,
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ private
|
||||||
docx_;
|
docx_;
|
||||||
range_obj_; // TSWdRange
|
range_obj_; // TSWdRange
|
||||||
range_font_; // TSDocxFontRange
|
range_font_; // TSDocxFontRange
|
||||||
|
range_shading_; // TSDocxShadingRange
|
||||||
paragraph_format_range_; // TSDocxParagraphFormatRange
|
paragraph_format_range_; // TSDocxParagraphFormatRange
|
||||||
list_format_range_; // TSDocxListFormatRange
|
list_format_range_; // TSDocxListFormatRange
|
||||||
borders_range_; // TSDocxBordersRange
|
borders_range_; // TSDocxBordersRange
|
||||||
|
|
@ -79,7 +80,7 @@ public
|
||||||
Function MoveStartWhile(Cset, Count);
|
Function MoveStartWhile(Cset, Count);
|
||||||
Function MoveUnti(Cset, Count);
|
Function MoveUnti(Cset, Count);
|
||||||
Function MoveWhile(Cset, Count);
|
Function MoveWhile(Cset, Count);
|
||||||
Function Nex(_Unit, Count);
|
Function Next(_Unit, Count);
|
||||||
Function NextSubdocument();
|
Function NextSubdocument();
|
||||||
Function Paste();
|
Function Paste();
|
||||||
Function PasteAndFormat(Type);
|
Function PasteAndFormat(Type);
|
||||||
|
|
@ -332,6 +333,8 @@ Begin
|
||||||
range_obj_ := rangeObj;
|
range_obj_ := rangeObj;
|
||||||
range_font_ := new TSDocxFontRange(self.Application, self.Creator, self);
|
range_font_ := new TSDocxFontRange(self.Application, self.Creator, self);
|
||||||
range_font_.Init(range_obj_);
|
range_font_.Init(range_obj_);
|
||||||
|
range_shading_ := new TSDocxShadingRange(self.Application, self.Creator, self);
|
||||||
|
range_shading_.Init(range_obj_);
|
||||||
paragraph_format_range_ := new TSDocxParagraphFormatRange(self.Application, self.Creator, self);
|
paragraph_format_range_ := new TSDocxParagraphFormatRange(self.Application, self.Creator, self);
|
||||||
paragraph_format_range_.Init(docx_, range_obj_);
|
paragraph_format_range_.Init(docx_, range_obj_);
|
||||||
list_format_range_ := new TSDocxListFormatRange(self.Application, self.Creator, self);
|
list_format_range_ := new TSDocxListFormatRange(self.Application, self.Creator, self);
|
||||||
|
|
@ -732,6 +735,7 @@ End;
|
||||||
|
|
||||||
Function TSDocxRange.WriteText(value);
|
Function TSDocxRange.WriteText(value);
|
||||||
Begin
|
Begin
|
||||||
|
range_obj_.SplitRun();
|
||||||
self.Clear();
|
self.Clear();
|
||||||
run := range_obj_[0].TRun;
|
run := range_obj_[0].TRun;
|
||||||
if ifObj(run.Root()) then run.SetText(value);
|
if ifObj(run.Root()) then run.SetText(value);
|
||||||
|
|
@ -743,12 +747,21 @@ Begin
|
||||||
End;
|
End;
|
||||||
Function TSDocxRange.ReadText();
|
Function TSDocxRange.ReadText();
|
||||||
Begin
|
Begin
|
||||||
|
range_obj_.SplitRun();
|
||||||
txt := "";
|
txt := "";
|
||||||
prev := range_obj_[0].TParagraph;
|
prev := range_obj_[0].TParagraph;
|
||||||
for i:=0 to range_obj_.Size()-1 do
|
for i:=0 to range_obj_.Size()-1 do
|
||||||
begin
|
begin
|
||||||
run := range_obj_[i].TRun;
|
run := range_obj_[i].TRun;
|
||||||
txt += prev = range_obj_[i].TParagraph ? run.Text() : "\n" + run.Text();
|
if not ifObj(run.Root()) then continue;
|
||||||
|
if prev = range_obj_[i].TParagraph then
|
||||||
|
begin
|
||||||
|
txt += run.Text();
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
txt += "\n" + run.Text();
|
||||||
|
prev := range_obj_[i].TParagraph;
|
||||||
|
end
|
||||||
end
|
end
|
||||||
return txt;
|
return txt;
|
||||||
End;
|
End;
|
||||||
|
|
@ -757,3 +770,18 @@ Function TSDocxRange.ReadListFormat();
|
||||||
Begin
|
Begin
|
||||||
return list_format_range_;
|
return list_format_range_;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
Function TSDocxRange.ReadShading();
|
||||||
|
Begin
|
||||||
|
return range_shading_;
|
||||||
|
End;
|
||||||
|
|
||||||
|
Function TSDocxRange.ReadEnd();
|
||||||
|
Begin
|
||||||
|
return range_obj_.GetEnd();
|
||||||
|
End;
|
||||||
|
|
||||||
|
Function TSDocxRange.ReadStart();
|
||||||
|
Begin
|
||||||
|
return range_obj_.GetStart();
|
||||||
|
End;
|
||||||
|
|
|
||||||
|
|
@ -193,20 +193,6 @@ Begin
|
||||||
return ifnil(index) ? rows_obj : rows_obj[index];
|
return ifnil(index) ? rows_obj : rows_obj[index];
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TSDocxTable.WritePreferredWidthType(value);
|
|
||||||
Begin
|
|
||||||
End;
|
|
||||||
Function TSDocxTable.ReadPreferredWidthType();
|
|
||||||
Begin
|
|
||||||
End;
|
|
||||||
|
|
||||||
Function TSDocxTable.WritePreferredWidth(value);
|
|
||||||
Begin
|
|
||||||
End;
|
|
||||||
Function TSDocxTable.ReadPreferredWidth();
|
|
||||||
Begin
|
|
||||||
End;
|
|
||||||
|
|
||||||
Function TSDocxTable.ReadRange();
|
Function TSDocxTable.ReadRange();
|
||||||
Begin
|
Begin
|
||||||
if ifnil(range_) then
|
if ifnil(range_) then
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ Uses TSDocxEnumerations;
|
||||||
|
|
||||||
public
|
public
|
||||||
Function Init(rangeObj);
|
Function Init(rangeObj);
|
||||||
Function Apply();overload;
|
Function Apply();override;
|
||||||
Function ReWrite(pr);override;
|
Function ReWrite(pr);override;
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
@ -115,7 +115,7 @@ Begin
|
||||||
class(TSDocxFont).Init(nil);
|
class(TSDocxFont).Init(nil);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TSDocxFontRange.Apply();overload;
|
Function TSDocxFontRange.Apply();override;
|
||||||
Begin
|
Begin
|
||||||
CallFunction(ThisFunction(class(TSDocxFont).Apply));
|
CallFunction(ThisFunction(class(TSDocxFont).Apply));
|
||||||
End;
|
End;
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ public
|
||||||
protected
|
protected
|
||||||
docx_;
|
docx_;
|
||||||
pr_; // TOfficeObj("TwpPr")
|
pr_; // TOfficeObj("TwpPr")
|
||||||
|
shading_; // TSDocxShading
|
||||||
|
|
||||||
public
|
public
|
||||||
// Methods
|
// Methods
|
||||||
|
|
@ -151,6 +152,7 @@ Function TSDocxParagraphFormat.Init(docx, pPr);
|
||||||
Begin
|
Begin
|
||||||
docx_ := docx;
|
docx_ := docx;
|
||||||
pr_ := pPr;
|
pr_ := pPr;
|
||||||
|
shading_ := nil;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TSDocxParagraphFormat.Apply();virtual;
|
Function TSDocxParagraphFormat.Apply();virtual;
|
||||||
|
|
@ -316,9 +318,12 @@ End;
|
||||||
|
|
||||||
Function TSDocxParagraphFormat.ReadShading();virtual;
|
Function TSDocxParagraphFormat.ReadShading();virtual;
|
||||||
Begin
|
Begin
|
||||||
shading_obj := new TSDocxShading(self.Application, self.Creator, self.Parent);
|
if ifnil(shading_) then
|
||||||
shading_obj.Init(pr_.Shading);
|
begin
|
||||||
return shading_obj;
|
shading_ := new TSDocxShading(self.Application, self.Creator, self.Parent);
|
||||||
|
shading_.Init(pr_.Shading);
|
||||||
|
end
|
||||||
|
return shading_;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TSDocxParagraphFormat.WriteRightIndent(value);virtual;
|
Function TSDocxParagraphFormat.WriteRightIndent(value);virtual;
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ Begin
|
||||||
End;
|
End;
|
||||||
|
|
||||||
// property
|
// property
|
||||||
Function TSDocxShading.WriteTexture(value);
|
Function TSDocxShading.WriteTexture(value);virtual;
|
||||||
Begin
|
Begin
|
||||||
case value of
|
case value of
|
||||||
TSDocxEnumerations.wdTexture10Percent():
|
TSDocxEnumerations.wdTexture10Percent():
|
||||||
|
|
@ -156,7 +156,7 @@ Begin
|
||||||
shading_.Val := "thinVertStripe";
|
shading_.Val := "thinVertStripe";
|
||||||
end;
|
end;
|
||||||
End;
|
End;
|
||||||
Function TSDocxShading.ReadTexture();
|
Function TSDocxShading.ReadTexture();virtual;
|
||||||
Begin
|
Begin
|
||||||
value := shading_.Value("Val");
|
value := shading_.Value("Val");
|
||||||
case value of
|
case value of
|
||||||
|
|
@ -269,29 +269,29 @@ Begin
|
||||||
end;
|
end;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TSDocxShading.WriteForegroundPatternColorIndex(value);
|
Function TSDocxShading.WriteForegroundPatternColorIndex(value);virtual;
|
||||||
Begin
|
Begin
|
||||||
shading_.Color := color_index_[value];
|
shading_.Color := color_index_[value];
|
||||||
End;
|
End;
|
||||||
Function TSDocxShading.ReadForegroundPatternColorIndex();
|
Function TSDocxShading.ReadForegroundPatternColorIndex();virtual;
|
||||||
Begin
|
Begin
|
||||||
return color_index_[shading_.Value("Color")];
|
return color_index_[shading_.Value("Color")];
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TSDocxShading.WriteForegroundPatternColor(value);
|
Function TSDocxShading.WriteForegroundPatternColor(value);virtual;
|
||||||
Begin
|
Begin
|
||||||
shading_.Color := color_[value];
|
shading_.Color := color_[value];
|
||||||
End;
|
End;
|
||||||
Function TSDocxShading.ReadForegroundPatternColor();
|
Function TSDocxShading.ReadForegroundPatternColor();virtual;
|
||||||
Begin
|
Begin
|
||||||
return color_[shading_.Value("Color")];
|
return color_[shading_.Value("Color")];
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TSDocxShading.WriteBackgroundPatternColorIndex(value);
|
Function TSDocxShading.WriteBackgroundPatternColorIndex(value);virtual;
|
||||||
Begin
|
Begin
|
||||||
shading_.Fill := color_index_[value];
|
shading_.Fill := color_index_[value];
|
||||||
End;
|
End;
|
||||||
Function TSDocxShading.ReadBackgroundPatternColorIndex();
|
Function TSDocxShading.ReadBackgroundPatternColorIndex();virtual;
|
||||||
Begin
|
Begin
|
||||||
return color_index_[shading_.Value("Fill")];
|
return color_index_[shading_.Value("Fill")];
|
||||||
End;
|
End;
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,13 @@ public
|
||||||
|
|
||||||
private
|
private
|
||||||
Function GetShadingObjectByNode(node);
|
Function GetShadingObjectByNode(node);
|
||||||
Function GetShading(arr, hash);
|
Function GetShading(arr);
|
||||||
Function CallFunction(fname, value);overload;
|
Function CallFunction(fname, value);overload;
|
||||||
Function CallFunction(fname);overload;
|
Function CallFunction(fname);overload;
|
||||||
Function SplitRun();
|
|
||||||
|
|
||||||
private
|
private
|
||||||
range_obj_;
|
range_obj_;
|
||||||
|
shading_hash_;
|
||||||
|
|
||||||
public
|
public
|
||||||
Function WriteTexture(value);override;
|
Function WriteTexture(value);override;
|
||||||
|
|
@ -34,27 +34,22 @@ End;
|
||||||
Function TSDocxShadingRange.Init(rangeObj);
|
Function TSDocxShadingRange.Init(rangeObj);
|
||||||
Begin
|
Begin
|
||||||
range_obj_ := rangeObj;
|
range_obj_ := rangeObj;
|
||||||
|
shading_hash_ := array();
|
||||||
class(TSDocxShading).Init(nil);
|
class(TSDocxShading).Init(nil);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TSDocxShadingRange.Apply();override;
|
Function TSDocxShadingRange.Apply();override;
|
||||||
Begin
|
Begin
|
||||||
CallFunction(ThisFunction(class(TSDocxShading).Apply), nil);
|
CallFunction("Apply");
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TSDocxShadingRange.SplitRun();
|
Function TSDocxShadingRange.GetShading(arr);
|
||||||
Begin
|
|
||||||
range_obj_.SplitRangeRun();
|
|
||||||
self.Parent.SetRangeObj(range_obj_);
|
|
||||||
End;
|
|
||||||
|
|
||||||
Function TSDocxShadingRange.GetShading(arr, hash);
|
|
||||||
Begin
|
Begin
|
||||||
if arr.Entirety then
|
if arr.Entirety then
|
||||||
begin
|
begin
|
||||||
if not ifnil(hash[arr.Entirety]) then nil;
|
if not ifnil(shading_hash_[arr.Entirety]) then return nil;
|
||||||
hash[arr.Entirety] := true;
|
|
||||||
shading := GetShadingObjectByNode(arr.Entirety);
|
shading := GetShadingObjectByNode(arr.Entirety);
|
||||||
|
shading_hash_[arr.Entirety] := shading;
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
trun := arr.TRun;
|
trun := arr.TRun;
|
||||||
|
|
@ -74,7 +69,7 @@ Begin
|
||||||
obj.Init(node);
|
obj.Init(node);
|
||||||
paragraph_obj := new TSDocxParagraph(self.Application, self.Creator, self.Parent);
|
paragraph_obj := new TSDocxParagraph(self.Application, self.Creator, self.Parent);
|
||||||
paragraph_obj.Init(nil, obj, nil);
|
paragraph_obj.Init(nil, obj, nil);
|
||||||
return paragraph_obj.Shading();
|
return paragraph_obj.Shading;
|
||||||
end
|
end
|
||||||
else if name = "w:tbl" then
|
else if name = "w:tbl" then
|
||||||
begin
|
begin
|
||||||
|
|
@ -82,24 +77,23 @@ Begin
|
||||||
obj.Init(node);
|
obj.Init(node);
|
||||||
table_obj := new TSDocxTable(self.Application, self.Creator, self.Parent);
|
table_obj := new TSDocxTable(self.Application, self.Creator, self.Parent);
|
||||||
table_obj.Init(nil, obj);
|
table_obj.Init(nil, obj);
|
||||||
return table_obj.Shading();
|
return table_obj.Shading;
|
||||||
end
|
end
|
||||||
else if name = "w:tc" then
|
else if name = "w:tc" then
|
||||||
begin
|
begin
|
||||||
cell_obj := new TSDocxCell(self.Application, self.Creator, self.Parent);
|
cell_obj := new TSDocxCell(self.Application, self.Creator, self.Parent);
|
||||||
cell_obj.Init(node);
|
cell_obj.Init(node);
|
||||||
return cell_obj.Shading();
|
return cell_obj.Shading;
|
||||||
end
|
end
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TSDocxShadingRange.CallFunction(fname, value);overload;
|
Function TSDocxShadingRange.CallFunction(fname, value);overload;
|
||||||
Begin
|
Begin
|
||||||
// 这样设计是为了段落走走段落的shading,table走table的,cell走cell的
|
// 这样设计是为了段落走走段落的shading,table走table的,cell走cell的
|
||||||
SplitRun();
|
range_obj_.SplitRun();
|
||||||
hash := array();
|
|
||||||
for i:=0 to range_obj_.Size()-1 do
|
for i:=0 to range_obj_.Size()-1 do
|
||||||
begin
|
begin
|
||||||
shading := GetShading(range_obj_[i], hash);
|
shading := GetShading(range_obj_[i]);
|
||||||
if ifnil(shading) then continue;
|
if ifnil(shading) then continue;
|
||||||
pf := FindFunction(fname, shading);
|
pf := FindFunction(fname, shading);
|
||||||
pf.Do(value);
|
pf.Do(value);
|
||||||
|
|
@ -108,11 +102,13 @@ End;
|
||||||
|
|
||||||
Function TSDocxShadingRange.CallFunction(fname);overload;
|
Function TSDocxShadingRange.CallFunction(fname);overload;
|
||||||
Begin
|
Begin
|
||||||
hash := array();
|
range_obj_.SplitRun();
|
||||||
ret := nil;
|
ret := nil;
|
||||||
for i:=0 to range_obj_.Size()-1 do
|
for i:=0 to range_obj_.Size()-1 do
|
||||||
begin
|
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;
|
if ifnil(shading) then continue;
|
||||||
pf := FindFunction(fname, shading);
|
pf := FindFunction(fname, shading);
|
||||||
r := pf.Do();
|
r := pf.Do();
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ public
|
||||||
Function SplitRun(index);overload;
|
Function SplitRun(index);overload;
|
||||||
Function Clear(deleteAll);
|
Function Clear(deleteAll);
|
||||||
Function Size();
|
Function Size();
|
||||||
Function Root();
|
|
||||||
|
|
||||||
Function Print();
|
Function Print();
|
||||||
Begin
|
Begin
|
||||||
|
|
@ -27,6 +26,7 @@ private
|
||||||
Function AddRunInfo(runNode, tParagraph);
|
Function AddRunInfo(runNode, tParagraph);
|
||||||
Function AddRunInfo2(runNode, tParagraph);
|
Function AddRunInfo2(runNode, tParagraph);
|
||||||
Function ParagraphRange(node);
|
Function ParagraphRange(node);
|
||||||
|
Function CalcPosition(startNode);
|
||||||
|
|
||||||
public
|
public
|
||||||
data_; // 管理range结构的数组,字段如下
|
data_; // 管理range结构的数组,字段如下
|
||||||
|
|
@ -106,7 +106,7 @@ Function TSWdRange.Create(rootNode, startP, endP);overload;
|
||||||
Begin
|
Begin
|
||||||
root_node_ := rootNode;
|
root_node_ := rootNode;
|
||||||
start_position_ := startP;
|
start_position_ := startP;
|
||||||
end_position_ := endP;
|
end_position_ := endP = -1 ? INF : endP;
|
||||||
target_node_ := nil;
|
target_node_ := nil;
|
||||||
self.Init();
|
self.Init();
|
||||||
End;
|
End;
|
||||||
|
|
@ -153,21 +153,15 @@ Begin
|
||||||
return length(data_);
|
return length(data_);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TSWdRange.Root();
|
|
||||||
Begin
|
|
||||||
node := root_node_;
|
|
||||||
return node;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Function TSWdRange.GetStart();
|
Function TSWdRange.GetStart();
|
||||||
Begin
|
Begin
|
||||||
if ifnil(start_position_) then return 0;
|
if ifnil(start_position_) then self.CalcPosition(root_node_);
|
||||||
return start_position_;
|
return start_position_;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TSWdRange.GetEnd();
|
Function TSWdRange.GetEnd();
|
||||||
Begin
|
Begin
|
||||||
if ifnil(end_position_) then return 0;
|
if ifnil(end_position_) then self.CalcPosition(root_node_);
|
||||||
return end_position_;
|
return end_position_;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
|
@ -372,6 +366,86 @@ Begin
|
||||||
end;
|
end;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
Function TSWdRange.CalcPosition(startNode);
|
||||||
|
Begin
|
||||||
|
node := startNode.FirstChildElement();
|
||||||
|
while ifObj(node) do
|
||||||
|
begin
|
||||||
|
if node.Eq(target_node_) then
|
||||||
|
begin
|
||||||
|
eq_flag := true;
|
||||||
|
start_position_ := cur_position_;
|
||||||
|
end
|
||||||
|
case node.GetName() of
|
||||||
|
"w:p":
|
||||||
|
begin
|
||||||
|
paragraph_obj := TOfficeObj("TParagraph");
|
||||||
|
paragraph_obj.Init(node);
|
||||||
|
if paragraph_obj.Empty() then // 空段落
|
||||||
|
begin
|
||||||
|
cur_position_ += 1;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
sub_node := node.FirstChildElement();
|
||||||
|
while ifObj(sub_node) do
|
||||||
|
begin
|
||||||
|
case sub_node.GetName() of
|
||||||
|
"w:r":
|
||||||
|
begin
|
||||||
|
run_obj := TOfficeObj("TRun");
|
||||||
|
run_obj.Init(sub_node);
|
||||||
|
text := run_obj.Text();
|
||||||
|
if class(TSXml).IsUtf8() then text := Utf8ToAnsi(text);
|
||||||
|
cur_position_ += lengthw(text);
|
||||||
|
end
|
||||||
|
|
||||||
|
"w:ins", "w:del":
|
||||||
|
begin
|
||||||
|
run_node := sub_node.FirstChildElement("w:r");
|
||||||
|
while ifObj(run_node) do
|
||||||
|
begin
|
||||||
|
run_obj := TOfficeObj("TRun");
|
||||||
|
run_obj.Init(run_node);
|
||||||
|
text := run_obj.Text();
|
||||||
|
if class(TSXml).IsUtf8() then text := Utf8ToAnsi(text);
|
||||||
|
cur_position_ += lengthw(text);
|
||||||
|
run_node := run_node.NextElement("w:r");
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
sub_node := sub_node.NextElement();
|
||||||
|
end
|
||||||
|
// 完整段落
|
||||||
|
cur_position_ += 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
"w:tbl":
|
||||||
|
begin
|
||||||
|
tr := node.FirstChildElement("w:tr");
|
||||||
|
while ifObj(tr) do
|
||||||
|
begin
|
||||||
|
tc := tr.FirstChildElement("w:tc");
|
||||||
|
while ifObj(tc) do
|
||||||
|
begin
|
||||||
|
flag := self.CalcPosition(tc);
|
||||||
|
if flag then return 1;
|
||||||
|
tc := tc.NextElement("w:tc");
|
||||||
|
end
|
||||||
|
cur_position_ += 1;
|
||||||
|
tr := tr.NextElement("w:tr");
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
if eq_flag then
|
||||||
|
begin
|
||||||
|
end_position_ := cur_position_;
|
||||||
|
return 1;
|
||||||
|
end
|
||||||
|
node := node.NextElement();
|
||||||
|
end
|
||||||
|
End;
|
||||||
|
|
||||||
Function TSWdRange.ParagraphRange(node);
|
Function TSWdRange.ParagraphRange(node);
|
||||||
Begin
|
Begin
|
||||||
paragraph_obj := TOfficeObj("TParagraph");
|
paragraph_obj := TOfficeObj("TParagraph");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue