diff --git a/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder.py b/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder.py index e557ff6385..8bc65110cf 100644 --- a/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder.py +++ b/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder.py @@ -383,6 +383,20 @@ class CDocBuilderValue: def __setitem__(self, key, value): self.Set(key, value) + def __getattr__(self, name): + def method(*args): + return self.Call(name, *args) + return method + + def __len__(self): + return self.GetLength() + + def __iter__(self): + if not self.IsArray(): + raise TypeError("Object is not iterable") + for i in range(self.GetLength()): + yield self.Get(i) + @staticmethod def CreateUndefined(): return CDocBuilderValue(OBJECT_HANDLE(_lib.CDocBuilderValue_CreateUndefined())) @@ -423,6 +437,36 @@ class CDocBuilderValue: return CDocBuilderValue(OBJECT_HANDLE(_lib.CDocBuilderValue_Call6(self._internal, ctypes.c_wchar_p(name), values[0]._internal, values[1]._internal, values[2]._internal, values[3]._internal, values[4]._internal, values[5]._internal))) else: raise TypeError("Call() expects at most 6 arguments") + + def append(self, value): + if not self.IsArray(): + raise TypeError("Object is not an array") + length = self.GetLength() + self.Set(length, value) + return self + + def extend(self, iterable): + if not self.IsArray(): + raise TypeError("Object is not an array") + length = self.GetLength() + for i, value in enumerate(iterable, start=length): + self.Set(i, value) + return self + + def insert(self, i, x): + if not self.IsArray(): + raise TypeError("Object is not an array") + length = self.GetLength() + if i < 0: + if abs(i) > length: + raise IndexError("list index out of range") + i = max(0, length + i) + if i >= length: + raise IndexError("list index out of range") + for idx in range(length, i, -1): + self.Set(idx, self.Get(idx - 1)) + self.Set(i, x) + class CDocBuilder: _initialized = False diff --git a/DesktopEditor/doctrenderer/docbuilder.python/test/docbuilder_test.py b/DesktopEditor/doctrenderer/docbuilder.python/test/docbuilder_test.py index 851847e024..50c1d81a4c 100644 --- a/DesktopEditor/doctrenderer/docbuilder.python/test/docbuilder_test.py +++ b/DesktopEditor/doctrenderer/docbuilder.python/test/docbuilder_test.py @@ -13,16 +13,16 @@ scope = context.CreateScope() globalObj = context.GetGlobal() api = globalObj['Api'] -document = api.Call('GetDocument') -paragraph1 = api.Call('CreateParagraph') -paragraph1.Call('SetSpacingAfter', 1000, False) -paragraph1.Call('AddText', 'Hello from Python!') +document = api.GetDocument() +paragraph1 = api.CreateParagraph() +paragraph1.SetSpacingAfter(1000, False) +paragraph1.AddText('Hello from Python!') -paragraph2 = api.Call('CreateParagraph') -paragraph2.Call('AddText', 'Goodbye!') +paragraph2 = api.CreateParagraph() +paragraph2.AddText('Goodbye!') content = [paragraph1, paragraph2] -document.Call('InsertContent', content) +document.InsertContent(content) dstPath = os.getcwd() + '/result.docx' builder.SaveFile(docbuilder.FileTypes.Document.DOCX, dstPath)