xref: /trunk/test/odf-validate/fixtures/note-ref/make.py (revision 0e16a31d78a652c56c5c0fc79c752f48b9048df9)
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