type TSDocxComponentsWare = class(Components) public function Create(); function GetStyles(): Styles; function GetStylesAdapter(): StylesAdapter; function GetDocumentRelsAdapter(): RelationShipsAdapter; function GetNumberingWare(): TSNumberingWare; function GetTblStylePrByType(style_id: string; type: string): TblStylePr; function GetFtr(target: string): Ftr; function GetHdr(target: string): Hdr; function GetFtrRelsAdapter(target: string): RelationShipsAdapter; function GetHdrRelsAdapter(target: string): RelationShipsAdapter; private styles_deserialize_flag_; styles_adapter_; document_rels_adapter_; numbering_ware_; tbl_style_pr_hash_; ftr_hash_; hdr_hash_; hdr_rel_hash_; ftr_rel_hash_; end; function TSDocxComponentsWare.Create(); begin class(Components).Create(); tbl_style_pr_hash_ := array(); ftr_hash_ := array(); hdr_hash_ := array(); hdr_rel_hash_ := array(); ftr_rel_hash_ := array(); end; function TSDocxComponentsWare.GetStyles(): Styles; begin if styles_deserialize_flag_ then return {self.}Styles; {self.}Styles.Deserialize(); styles_deserialize_flag_ := true; return {self.}Styles; end; function TSDocxComponentsWare.GetStylesAdapter(): StylesAdapter; begin if styles_adapter_ then return styles_adapter_; styles_adapter_ := new StylesAdapter({self.}GetStyles()); return styles_adapter_; end; function TSDocxComponentsWare.GetDocumentRelsAdapter(): RelationShipsAdapter; begin if document_rels_adapter_ then return document_rels_adapter_; {self.}DocumentRels.Deserialize(); document_rels_adapter_ := new RelationShipsAdapter({self.}DocumentRels); return document_rels_adapter_; end; function TSDocxComponentsWare.GetNumberingWare(): TSNumberingWare; begin if numbering_ware_ then return numbering_ware_; if not {self.}Numbering then return nil; {self.}Numbering.Deserialize(); numbering_ware_ := new TSNumberingWare({self.}Numbering); return numbering_ware_; end; function TSDocxComponentsWare.GetTblStylePrByType(style_id: string; type: string): TblStylePr; begin if tbl_style_pr_hash_[style_id][type] then return tbl_style_pr_hash_[style_id][type]; styles_adapter := {self.}GetStylesAdapter(); style := styles_adapter.GetStyleByStyleId(style_id); style := new StyleAdapter(style); tbl_style_pr := style.GetTblStylePrByType(type); tbl_style_pr_hash_[style_id][type] := tbl_style_pr; return tbl_style_pr; end; function TSDocxComponentsWare.GetFtr(target: string): Ftr; begin if ftr_hash_[target] then return ftr_hash_[target]; index := replaceStr(replaceStr(target, "footer", ""), ".xml", ""); obj := {self.}Footers(strtoint(index)); obj.Deserialize(); ftr_hash_[target] := obj; return obj; end; function TSDocxComponentsWare.GetHdr(target: string): Hdr; begin if hdr_hash_[target] then return hdr_hash_[target]; index := replaceStr(replaceStr(target, "header", ""), ".xml", ""); obj := {self.}Headers(strtoint(index)); obj.Deserialize(); hdr_hash_[target] := obj; return obj; end; function TSDocxComponentsWare.GetHdrRelsAdapter(target: string): RelationShipsAdapter; begin if hdr_rel_hash_[target] then return hdr_rel_hash_[target]; index := replaceStr(replaceStr(target, "header", ""), ".xml", ""); obj := {self.}HeaderRels(strtoint(index)); obj.Deserialize(); rels_adapter := new RelationShipsAdapter(obj); hdr_rel_hash_[target] := rels_adapter; return rels_adapter; end; function TSDocxComponentsWare.GetFtrRelsAdapter(target: string): RelationShipsAdapter; begin if ftr_rel_hash_[target] then return ftr_rel_hash_[target]; index := replaceStr(replaceStr(target, "header", ""), ".xml", ""); obj := {self.}FooterRels(strtoint(index)); obj.Deserialize(); rels_adapter := new RelationShipsAdapter(obj); ftr_rel_hash_[target] := rels_adapter; return rels_adapter; end;