1# usage: runpy.sh fixtures/note-ref/make.py <port> <out.odt> <expected.json> 2# Saves with the office's configured ODF version, so run it against the strict profile (drive.sh strict). 3import sys, json, uno 4from unohelp import connect, desktop, pv 5 6port, out, exp = int(sys.argv[1]), sys.argv[2], sys.argv[3] 7d = desktop(connect(port)) 8doc = d.loadComponentFromURL("private:factory/swriter", "_blank", 0, (pv("Hidden", True),)) 9text = doc.Text 10cur = text.createTextCursor() 11text.insertString(cur, "body", False) 12fn = doc.createInstance("com.sun.star.text.Footnote") 13text.insertTextContent(cur, fn, False) 14fn.String = "note text" 15en = doc.createInstance("com.sun.star.text.Endnote") 16text.insertTextContent(cur, en, False) 17en.String = "end text" 18text.insertString(cur, " ", False) 19# (source: 3 footnote, 4 endnote), part: 0 page, 1 chapter, 2 text, 3 direction, 5/6/7 sequence-only 20for src, note in ((3, fn), (4, en)): 21 for part in (0, 3, 2, 5, 6, 7): 22 f = doc.createInstance("com.sun.star.text.TextField.GetReference") 23 f.ReferenceFieldSource = src 24 f.SourceName = "" 25 f.SequenceNumber = note.ReferenceId 26 f.ReferenceFieldPart = part 27 text.insertTextContent(cur, f, False) 28 text.insertString(cur, " ", False) 29doc.TextFields.refresh() 30e = doc.TextFields.createEnumeration() 31rows = [] 32while e.hasMoreElements(): 33 f = e.nextElement() 34 if f.supportsService("com.sun.star.text.TextField.GetReference"): 35 rows.append([f.ReferenceFieldSource, f.ReferenceFieldPart, f.CurrentPresentation]) 36json.dump(rows, open(exp, "w")) 37doc.storeToURL(uno.systemPathToFileUrl(out), (pv("FilterName", "writer8"),)) 38doc.close(True) 39