summaryrefslogtreecommitdiff
path: root/toolkit/src2xml
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/src2xml')
-rw-r--r--toolkit/src2xml/README16
-rw-r--r--toolkit/src2xml/dryrunall.sh2
-rw-r--r--toolkit/src2xml/include-sc.lst8
-rw-r--r--toolkit/src2xml/include-sd.lst6
-rw-r--r--toolkit/src2xml/include-sw.lst5
-rw-r--r--toolkit/src2xml/include.lst300
-rw-r--r--toolkit/src2xml/sc.sh3
-rw-r--r--toolkit/src2xml/sd.sh3
-rw-r--r--toolkit/src2xml/source/boxer.py73
-rw-r--r--toolkit/src2xml/source/expression.py111
-rw-r--r--toolkit/src2xml/source/expression_test.py23
-rw-r--r--toolkit/src2xml/source/globals.py115
-rw-r--r--toolkit/src2xml/source/macroexpander_test.py71
-rw-r--r--toolkit/src2xml/source/macroparser.py130
-rw-r--r--toolkit/src2xml/source/macroparser_test.py20
-rw-r--r--toolkit/src2xml/source/src2xml.py227
-rw-r--r--toolkit/src2xml/source/srclexer.py488
-rw-r--r--toolkit/src2xml/source/srcparser.py416
-rw-r--r--toolkit/src2xml/src-sc.lst57
-rw-r--r--toolkit/src2xml/src-sd.lst124
-rw-r--r--toolkit/src2xml/src-sw.lst121
-rw-r--r--toolkit/src2xml/src.lst680
-rw-r--r--toolkit/src2xml/sw.sh3
23 files changed, 3002 insertions, 0 deletions
diff --git a/toolkit/src2xml/README b/toolkit/src2xml/README
new file mode 100644
index 000000000000..ef30040f2133
--- /dev/null
+++ b/toolkit/src2xml/README
@@ -0,0 +1,16 @@
+SRC2XML: Convert OO.o resource to Layout XML.
+
+This directory contains a Python script to convert OO.o's existing dialog
+resource files into XML layout files.
+
+The main executable file is located in ./source/src2xml.py. Run
+
+ source/src2xml.py --help
+
+for more information.
+
+See also: source/dryrunall.sh and ../workben/run-s2x
+
+
+Author: Kohei Yoshida <kyoshida@novell.com>
+Modifications: Jan Nieuwenhuizen <jnieuwenhuizen@novell.com>
diff --git a/toolkit/src2xml/dryrunall.sh b/toolkit/src2xml/dryrunall.sh
new file mode 100644
index 000000000000..a2bd803cc7fb
--- /dev/null
+++ b/toolkit/src2xml/dryrunall.sh
@@ -0,0 +1,2 @@
+#! /bin/bash
+source/src2xml.py --dry-run --includes-from=include.lst $(cat src.lst) "$@"
diff --git a/toolkit/src2xml/include-sc.lst b/toolkit/src2xml/include-sc.lst
new file mode 100644
index 000000000000..7b821a2a8407
--- /dev/null
+++ b/toolkit/src2xml/include-sc.lst
@@ -0,0 +1,8 @@
+../../solver/680/unxlngi6.pro/inc
+../../sc
+../../sc/inc
+../../sc/addin/inc
+../../sc/source/ui/inc
+../../sc/source/core/inc
+../../sc/source/filter/inc
+../../sc/unxlngi6.pro/inc
diff --git a/toolkit/src2xml/include-sd.lst b/toolkit/src2xml/include-sd.lst
new file mode 100644
index 000000000000..44b1f66a5ffc
--- /dev/null
+++ b/toolkit/src2xml/include-sd.lst
@@ -0,0 +1,6 @@
+../../solver/680/unxlngi6.pro/inc
+../../sd
+../../sd/inc
+../../sd/source/ui/inc
+../../sd/source/ui/slidesorter/inc
+../../sd/unxlngi6.pro/inc
diff --git a/toolkit/src2xml/include-sw.lst b/toolkit/src2xml/include-sw.lst
new file mode 100644
index 000000000000..44fa8951eecb
--- /dev/null
+++ b/toolkit/src2xml/include-sw.lst
@@ -0,0 +1,5 @@
+../../solver/680/unxlngi6.pro/inc
+../../sw/source/ui/inc
+../../sw/source/core/inc
+../../sw/source/filter/inc
+../../sw/unxlngi6.pro/inc
diff --git a/toolkit/src2xml/include.lst b/toolkit/src2xml/include.lst
new file mode 100644
index 000000000000..2bf5fced6fd3
--- /dev/null
+++ b/toolkit/src2xml/include.lst
@@ -0,0 +1,300 @@
+../../solver/680/unxlngi6.pro/inc
+../../io/inc
+../../io/unxlngi6.pro/inc
+../../sc/inc
+../../sc/addin/inc
+../../sc/source/ui/inc
+../../sc/source/core/inc
+../../sc/source/filter/inc
+../../sc/unxlngi6.pro/inc
+../../sd/inc
+../../sd/source/ui/inc
+../../sd/source/ui/slidesorter/inc
+../../sd/unxlngi6.pro/inc
+../../sw/inc
+../../sw/source/ui/inc
+../../sw/source/core/inc
+../../sw/source/filter/inc
+../../sw/unxlngi6.pro/inc
+../../xt/unxlngi6.pro/inc
+../../agg/inc
+../../icu/unxlngi6.pro/inc
+../../idl/inc
+../../idl/unxlngi6.pro/inc
+../../nas/unxlngi6.pro/inc
+../../odk/inc
+../../sal/qa/inc
+../../sal/inc
+../../sal/unxlngi6.pro/inc
+../../sax/unxlngi6.pro/inc
+../../sch/inc
+../../sch/source/ui/inc
+../../sch/unxlngi6.pro/inc
+../../sj2/inc
+../../sj2/source/inc
+../../sj2/unxlngi6.pro/inc
+../../rsc/inc
+../../rsc/unxlngi6.pro/inc
+../../so3/inc
+../../so3/unxlngi6.pro/inc
+../../sot/inc
+../../sot/unxlngi6.pro/inc
+../../svx/inc
+../../svx/source/inc
+../../svx/source/unodialogs/inc
+../../svx/unxlngi6.pro/inc
+../../ucb/inc
+../../ucb/source/inc
+../../ucb/unxlngi6.pro/inc
+../../udm/inc
+../../udm/source/inc
+../../vcl/inc
+../../vcl/unx/inc
+../../vcl/unx/source/inc
+../../vcl/win/inc
+../../vcl/aqua/inc
+../../vcl/unxlngi6.pro/inc
+../../ure/unxlngi6.pro/inc
+../../uui/unxlngi6.pro/inc
+../../vos/inc
+../../vos/unxlngi6.pro/inc
+../../dbaccess/inc
+../../dbaccess/source/ui/inc
+../../dbaccess/source/inc
+../../dbaccess/source/core/inc
+../../dbaccess/source/sdbtools/inc
+../../dbaccess/unxlngi6.pro/inc
+../../transex3/inc
+../../transex3/unxlngi6.pro/inc
+../../bean/unxlngi6.pro/inc
+../../cosv/inc
+../../cosv/source/inc
+../../cppu/inc
+../../cppu/unxlngi6.pro/inc
+../../idlc/inc
+../../idlc/unxlngi6.pro/inc
+../../o3tl/inc
+../../o3tl/unxlngi6.pro/inc
+../../jurt/unxlngi6.pro/inc
+../../sane/inc
+../../scp2/inc
+../../scp2/unxlngi6.pro/inc
+../../sfx2/inc
+../../sfx2/source/inc
+../../sfx2/unxlngi6.pro/inc
+../../stoc/inc
+../../stoc/unxlngi6.pro/inc
+../../framework/inc
+../../framework/source/inc
+../../framework/unxlngi6.pro/inc
+../../desktop/inc
+../../desktop/source/inc
+../../desktop/source/deployment/inc
+../../desktop/source/deployment/registry/inc
+../../desktop/unxlngi6.pro/inc
+../../external/unxlngi6.pro/inc
+../../xml2cmp/source/inc
+../../xml2cmp/unxlngi6.pro/inc
+../../xmlhelp/inc
+../../xmlhelp/unxlngi6.pro/inc
+../../soltools/inc
+../../soltools/testSHL/inc
+../../soltools/unxlngi6.pro/inc
+../../unixODBC/inc
+../../basic/inc
+../../basic/source/inc
+../../basic/unxlngi6.pro/inc
+../../boost/unxlngi6.pro/inc
+../../XmlSearch/unxlngi6.pro/inc
+../../forms/inc
+../../forms/source/inc
+../../forms/source/solar/inc
+../../forms/unxlngi6.pro/inc
+../../ridljar/unxlngi6.pro/inc
+../../offuh/unxlngi6.pro/inc
+../../pyuno/inc
+../../pyuno/unxlngi6.pro/inc
+../../shell/inc
+../../shell/unxlngi6.pro/inc
+../../store/inc
+../../store/unxlngi6.pro/inc
+../../sysui/unxlngi6.pro/inc
+../../tools/inc
+../../tools/win/inc
+../../tools/unxlngi6.pro/inc
+../../twain/inc
+../../unoil/unxlngi6.pro/inc
+../../cppcanvas/inc
+../../cppcanvas/source/inc
+../../cppcanvas/unxlngi6.pro/inc
+../../eventattacher/unxlngi6.pro/inc
+../../unotools/inc
+../../unotools/unxlngi6.pro/inc
+../../scaddins/unxlngi6.pro/inc
+../../javaunohelper/inc
+../../javaunohelper/unxlngi6.pro/inc
+../../configmgr/inc
+../../configmgr/source/inc
+../../configmgr/unxlngi6.pro/inc
+../../hwpfilter/inc
+../../hwpfilter/unxlngi6.pro/inc
+../../libxmlsec/unxlngi6.pro/inc
+../../jvmaccess/inc
+../../jvmaccess/unxlngi6.pro/inc
+../../comphelper/inc
+../../comphelper/unxlngi6.pro/inc
+../../helpcontent2/unxlngi6.pro/inc
+../../animations/inc
+../../animations/unxlngi6.pro/inc
+../../fileaccess/unxlngi6.pro/inc
+../../i18npool/inc
+../../i18npool/unxlngi6.pro/inc
+../../i18nutil/inc
+../../i18nutil/unxlngi6.pro/inc
+../../accessibility/inc
+../../accessibility/unxlngi6.pro/inc
+../../testshl2/inc
+../../testshl2/source/inc
+../../testshl2/unxlngi6.pro/inc
+../../lpsolve/unxlngi6.pro/inc
+../../setup_native/inc
+../../setup_native/unxlngi6.pro/inc
+../../embedserv/source/inc
+../../psprint_config/unxlngi6.pro/inc
+../../basctl/inc
+../../basctl/source/inc
+../../basctl/unxlngi6.pro/inc
+../../cpputools/unxlngi6.pro/inc
+../../stlport/unxlngi6.pro/inc
+../../canvas/inc
+../../canvas/unxlngi6.pro/inc
+../../embeddedobj/inc
+../../embeddedobj/source/inc
+../../embeddedobj/unxlngi6.pro/inc
+../../chart2/inc
+../../chart2/source/inc
+../../chart2/source/view/inc
+../../chart2/source/model/inc
+../../chart2/source/controller/inc
+../../chart2/unxlngi6.pro/inc
+../../scsolver/source/inc
+../../scsolver/unxlngi6.pro/inc
+../../automation/inc
+../../automation/source/inc
+../../automation/unxlngi6.pro/inc
+../../portaudio/unxlngi6.pro/inc
+../../svtools/inc
+../../svtools/unx/inc
+../../svtools/source/inc
+../../svtools/unxlngi6.pro/inc
+../../dtrans/inc
+../../dtrans/source/inc
+../../dtrans/unxlngi6.pro/inc
+../../x11_extensions/inc
+../../fpicker/inc
+../../fpicker/unxlngi6.pro/inc
+../../filter/inc
+../../filter/unxlngi6.pro/inc
+../../extras/unxlngi6.pro/inc
+../../writerperfect/unxlngi6.pro/inc
+../../toolkit/inc
+../../toolkit/unxlngi6.pro/inc
+../../officecfg/unxlngi6.pro/inc
+../../unodevtools/inc
+../../unodevtools/unxlngi6.pro/inc
+../../cppuhelper/inc
+../../cppuhelper/unxlngi6.pro/inc
+../../jvmfwk/inc
+../../jvmfwk/unxlngi6.pro/inc
+../../layout/inc
+../../layout/unxlngi6.pro/inc
+../../linguistic/inc
+../../linguistic/unxlngi6.pro/inc
+../../libegg/inc
+../../libegg/unxlngi6.pro/inc
+../../libwpd/unxlngi6.pro/inc
+../../libwpg/unxlngi6.pro/inc
+../../libwps/unxlngi6.pro/inc
+../../lingucomponent/inc
+../../lingucomponent/unxlngi6.pro/inc
+../../np_sdk/unxlngi6.pro/inc
+../../offapi/unxlngi6.pro/inc
+../../xmlsecurity/inc
+../../xmlsecurity/unxlngi6.pro/inc
+../../padmin/unxlngi6.pro/inc
+../../regexp/inc
+../../regexp/unxlngi6.pro/inc
+../../ucbhelper/inc
+../../ucbhelper/unxlngi6.pro/inc
+../../berkeleydb/unxlngi6.pro/inc
+../../UnoControls/inc
+../../UnoControls/source/inc
+../../UnoControls/unxlngi6.pro/inc
+../../msfontextract/unxlngi6.pro/inc
+../../solenv/inc
+../../solenv/unxmacxp/inc
+../../solver/680/unxlngi6.pro/inc
+../../postprocess/unxlngi6.pro/inc
+../../udkapi/unxlngi6.pro/inc
+../../unoxml/unxlngi6.pro/inc
+../../starmath/inc
+../../starmath/unxlngi6.pro/inc
+../../mdbtools/unxlngi6.pro/inc
+../../basebmp/inc
+../../basegfx/inc
+../../basegfx/source/inc
+../../basegfx/unxlngi6.pro/inc
+../../xmerge/inc
+../../xmerge/source/inc
+../../xmerge/unxlngi6.pro/inc
+../../xmloff/inc
+../../xmloff/unxlngi6.pro/inc
+../../oovbaapi/unxlngi6.pro/inc
+../../package/inc
+../../package/unxlngi6.pro/inc
+../../extensions/inc
+../../extensions/source/inc
+../../extensions/source/plugin/inc
+../../extensions/unxlngi6.pro/inc
+../../codemaker/inc
+../../codemaker/unxlngi6.pro/inc
+../../salhelper/inc
+../../salhelper/unxlngi6.pro/inc
+../../rdbmaker/inc
+../../rdbmaker/unxlngi6.pro/inc
+../../instsetoo_native/unxlngi6.pro/inc
+../../autodoc/inc
+../../autodoc/source/ary/inc
+../../autodoc/source/inc
+../../autodoc/source/display/inc
+../../autodoc/source/parser_i/inc
+../../autodoc/source/parser/inc
+../../avmedia/inc
+../../avmedia/source/inc
+../../avmedia/unxlngi6.pro/inc
+../../lotuswordpro/unxlngi6.pro/inc
+../../remotebridges/unxlngi6.pro/inc
+../../slideshow/inc
+../../slideshow/source/inc
+../../slideshow/unxlngi6.pro/inc
+../../connectivity/inc
+../../connectivity/source/inc
+../../connectivity/unxlngi6.pro/inc
+../../readlicense_oo/unxlngi6.pro/inc
+../../scripting/inc
+../../scripting/source/inc
+../../scripting/unxlngi6.pro/inc
+../../wizards/unxlngi6.pro/inc
+../../xmlscript/inc
+../../xmlscript/source/inc
+../../xmlscript/unxlngi6.pro/inc
+../../bridges/inc
+../../bridges/unxlngi6.pro/inc
+../../testtools/inc
+../../testtools/unxlngi6.pro/inc
+../../registry/inc
+../../registry/unxlngi6.pro/inc
+../../cli_ure/inc
+../../cli_ure/unxlngi6.pro/inc
+../../psprint/inc
+../../psprint/unxlngi6.pro/inc
diff --git a/toolkit/src2xml/sc.sh b/toolkit/src2xml/sc.sh
new file mode 100644
index 000000000000..1bfb213ccf12
--- /dev/null
+++ b/toolkit/src2xml/sc.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+source/src2xml.py --include-path=$(tr '\n' ':' < include-sc.lst) --dry-run $(cat src-sc.lst) "$@"
diff --git a/toolkit/src2xml/sd.sh b/toolkit/src2xml/sd.sh
new file mode 100644
index 000000000000..78b47201fc00
--- /dev/null
+++ b/toolkit/src2xml/sd.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+source/src2xml.py --include-path=$(tr '\n' ':' < include-sd.lst) --dry-run $(cat src-sd.lst) "$@"
diff --git a/toolkit/src2xml/source/boxer.py b/toolkit/src2xml/source/boxer.py
new file mode 100644
index 000000000000..1b716d757299
--- /dev/null
+++ b/toolkit/src2xml/source/boxer.py
@@ -0,0 +1,73 @@
+
+from globals import *
+
+
+class DlgLayoutBuilder(object):
+ def __init__ (self, dlgnode):
+ self.dlgnode = dlgnode
+ self.rows = {}
+
+ def addWidget (self, elem):
+ x, y = int(elem.getAttr('x')), int(elem.getAttr('y'))
+ self.rows[y] = self.rows.get (y, {})
+ while self.rows[y].has_key(x):
+ y += 1
+ self.rows[y] = self.rows.get (y, {})
+ self.rows[y][x] = elem
+
+ def build (self):
+ root = Element('vbox')
+ ys = self.rows.keys()
+ ys.sort()
+ for y in ys:
+ xs = self.rows[y].keys()
+ xs.sort()
+
+ if len(xs) == 1:
+ root.appendChild(self.rows[y][xs[0]])
+ continue
+
+ hbox = Element('hbox')
+ root.appendChild(hbox)
+ for x in xs:
+ elem = self.rows[y][x]
+ hbox.appendChild(elem)
+
+ return root
+
+
+class Boxer(object):
+ def __init__ (self, root):
+ self.root = root
+
+ def layout (self):
+
+ newroot = RootNode()
+ for dlgnode in self.root.children:
+ newdlgnode = self.__walkDlgNode(dlgnode)
+ newroot.children.append(newdlgnode)
+
+ return newroot
+
+ def __walkDlgNode (self, dlgnode):
+
+ newnode = Element(dlgnode.name)
+ newnode.clone(dlgnode)
+ if dlgnode.name == 'string':
+ return newnode
+ newnode.setAttr("xmlns", "http://openoffice.org/2007/layout")
+ newnode.setAttr("xmlns:cnt", "http://openoffice.org/2007/layout/container")
+ mx = DlgLayoutBuilder(newnode)
+
+ # Each dialog node is expected to have a flat list of widgets.
+ for widget in dlgnode.children:
+ if widget.hasAttr('x') and widget.hasAttr('y'):
+ mx.addWidget(widget)
+ else:
+ newnode.appendChild(widget)
+
+ vbox = mx.build()
+ if len(vbox.children) > 0:
+ newnode.appendChild(vbox)
+
+ return newnode
diff --git a/toolkit/src2xml/source/expression.py b/toolkit/src2xml/source/expression.py
new file mode 100644
index 000000000000..b5f58c42d112
--- /dev/null
+++ b/toolkit/src2xml/source/expression.py
@@ -0,0 +1,111 @@
+
+import sys
+import globals
+
+def toString (node):
+
+ if node == None:
+ return ''
+
+ chars = '('
+
+ if type(node.left) == type(0):
+ chars += "%d"%node.left
+ else:
+ chars += toString(node.left)
+
+ chars += node.op
+
+ if type(node.right) == type(0):
+ chars += "%d"%node.right
+ else:
+ chars += toString(node.right)
+
+ chars += ")"
+
+ return chars
+
+class Node(object):
+ def __init__ (self):
+ self.left = None
+ self.right = None
+ self.parent = None
+ self.op = None
+
+class ExpParser(object):
+
+ def __init__ (self, tokens):
+ self.tokens = tokens
+
+ def jumpToRoot (self):
+ while self.ptr.parent != None:
+ self.ptr = self.ptr.parent
+
+ def build (self):
+ self.ptr = Node()
+
+ for token in self.tokens:
+
+ if token in '+-':
+ if self.ptr.left == None:
+ raise globals.ParseError ('')
+ if self.ptr.right == None:
+ self.ptr.op = token
+ else:
+ self.jumpToRoot()
+ self.ptr.parent = Node()
+ self.ptr.parent.left = self.ptr
+ self.ptr = self.ptr.parent
+ self.ptr.op = token
+
+ elif token in '*/':
+ if self.ptr.left == None:
+ raise globals.ParseError ('')
+ elif self.ptr.right == None:
+ self.ptr.op = token
+ else:
+ num = self.ptr.right
+ self.ptr.right = Node()
+ self.ptr.right.parent = self.ptr
+ self.ptr.right.left = num
+ self.ptr.right.op = token
+ self.ptr = self.ptr.right
+
+ elif token == '(':
+ if self.ptr.left == None:
+ self.ptr.left = Node()
+ self.ptr.left.parent = self.ptr
+ self.ptr = self.ptr.left
+ elif self.ptr.right == None:
+ self.ptr.right = Node()
+ self.ptr.right.parent = self.ptr
+ self.ptr = self.ptr.right
+ else:
+ raise globals.ParseError ('')
+
+ elif token == ')':
+ if self.ptr.left == None:
+ raise globals.ParseError ('')
+ elif self.ptr.right == None:
+ raise globals.ParseError ('')
+ elif self.ptr.parent == None:
+ pass
+ else:
+ self.ptr = self.ptr.parent
+
+ else:
+ num = int(token)
+ if self.ptr.left == None:
+ self.ptr.left = num
+ elif self.ptr.right == None:
+ self.ptr.right = num
+ else:
+ raise globals.ParseError ('')
+
+ def dumpTree (self):
+ self.jumpToRoot()
+ print toString(self.ptr)
+
+
+
+
diff --git a/toolkit/src2xml/source/expression_test.py b/toolkit/src2xml/source/expression_test.py
new file mode 100644
index 000000000000..7e7393fb2fba
--- /dev/null
+++ b/toolkit/src2xml/source/expression_test.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python
+
+import sys
+import expression
+
+def run (exp):
+ tokens = exp.split()
+ expparser = expression.ExpParser(tokens)
+ expparser.build()
+ expparser.dumpTree()
+
+def main ():
+ run("6 + 34")
+ run("6 + 34 - 10")
+ run("6 + 34 - 10 + 200")
+ run("6 + 34 - 10 * 200")
+ run("6 + 34 - 10 * 200 + 18")
+ run("6 + 34 - 10 * 200 + 18 / 2")
+
+ run("6 * ( ( 10 + 2 ) - 10 ) * 33")
+
+if __name__ == '__main__':
+ main()
diff --git a/toolkit/src2xml/source/globals.py b/toolkit/src2xml/source/globals.py
new file mode 100644
index 000000000000..5e170b8c2a6e
--- /dev/null
+++ b/toolkit/src2xml/source/globals.py
@@ -0,0 +1,115 @@
+import sys
+
+class ParseError (Exception):
+ pass
+
+def error (msg, exit=0):
+ sys.stderr.write (msg)
+ if exit:
+ sys.exit (exit)
+
+def progress (msg):
+ sys.stderr.write(msg)
+
+
+def removeQuote (text):
+ """Remove quotes from a literal.
+"""
+ if len(text) >= 2 and text[0] == text[len(text)-1] == '"':
+ text = text[1:-1]
+ return text
+
+
+class Macro(object):
+ def __init__ (self, name):
+ self.name = name
+ self.tokens = []
+ self.vars = {}
+
+
+class Node(object):
+ def __init__ (self):
+ self.children = []
+
+ def appendChild (self, childnode):
+ self.children.append(childnode)
+ childnode.parent = self
+
+ def getChildren (self):
+ return self.children
+
+
+class RootNode(Node):
+ def __init__ (self):
+ Node.__init__(self)
+
+ def dump (self):
+ chars = ''
+ for child in self.getChildren():
+ chars += child.dump()
+ return chars
+
+
+class Element(Node):
+
+ INDENT = " "
+
+ def __init__ (self, name, rid = None):
+ Node.__init__(self)
+ self.name = name
+ self.parent = None
+# print "name: " + self.name - stats ...
+
+ # The following attributes are copied when 'clone'ed.
+ self.rid = rid
+ self.attrs = {}
+
+ def dump (self, level = 0):
+ chars = ''
+ chars += "\n" + Element.INDENT*level
+ chars += '<%s'%self.name
+
+ if self.rid != None:
+ self.setAttr("rid", self.rid)
+
+ chars += self.__dumpAttrs()
+
+ if len(self.children) == 0:
+ chars += '/>'
+ else:
+ chars += '>'
+ for child in self.getChildren():
+ chars += child.dump(level+1)
+
+ chars += "\n"+Element.INDENT*level
+ chars += "</%s>"%self.name
+
+ return chars
+
+ def hasAttr (self, name):
+ return self.attrs.has_key(name)
+
+ def getAttr (self, name):
+ return self.attrs[name]
+
+ def setAttr (self, name, value):
+ if type(value) == type(0):
+ value = "%d"%value
+ self.attrs[name] = removeQuote(value)
+# print "attr: " + self.name + "." + name - stats ...
+ return
+
+ def clone (self, elem):
+ keys = elem.attrs.keys()
+ for key in keys:
+ self.attrs[key] = elem.attrs[key]
+ self.rid = elem.rid
+
+ def __dumpAttrs (self):
+ text = ''
+ keys = self.attrs.keys()
+ keys.sort()
+ for key in keys:
+ value = self.attrs[key]
+ text += ' %s="%s"'%(key, value)
+ return text
diff --git a/toolkit/src2xml/source/macroexpander_test.py b/toolkit/src2xml/source/macroexpander_test.py
new file mode 100644
index 000000000000..823bcdb36bc2
--- /dev/null
+++ b/toolkit/src2xml/source/macroexpander_test.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+
+import srclexer, srcparser, globals
+
+class TestCase:
+
+ @staticmethod
+ def run (tokens, defines):
+ mcExpander = srcparser.MacroExpander(tokens, defines)
+ mcExpander.debug = True
+ mcExpander.expand()
+ tokens = mcExpander.getTokens()
+ print tokens
+
+ @staticmethod
+ def simpleNoArgs ():
+ tokens = ['FUNC_FOO', '(', 'left', ',', 'right', ')']
+ defines = {}
+ macro = globals.Macro('FUNC_FOO')
+ macro.tokens = ['Here', 'comes', 'X', 'and', 'Y']
+ defines['FUNC_FOO'] = macro
+ TestCase.run(tokens, defines)
+
+ @staticmethod
+ def simpleArgs ():
+ tokens = ['FUNC_FOO', '(', 'left', ',', 'right', ')']
+ defines = {}
+ macro = globals.Macro('FUNC_FOO')
+ macro.tokens = ['Here', 'comes', 'X', 'and', 'Y']
+ macro.vars['X'] = 0
+ macro.vars['Y'] = 1
+ defines['FUNC_FOO'] = macro
+ TestCase.run(tokens, defines)
+
+ @staticmethod
+ def multiTokenArgs ():
+ tokens = ['FUNC_FOO', '(', 'left1', 'left2', 'left3', ',', 'right', ')']
+ defines = {}
+ macro = globals.Macro('FUNC_FOO')
+ macro.tokens = ['Here', 'comes', 'X', 'and', 'Y']
+ macro.vars['X'] = 0
+ macro.vars['Y'] = 1
+ defines['FUNC_FOO'] = macro
+ TestCase.run(tokens, defines)
+
+ @staticmethod
+ def nestedTokenArgs ():
+ tokens = ['FUNC_BAA', '(', 'left', ',', 'right', ')']
+ defines = {}
+ macro = globals.Macro('FUNC_FOO')
+ macro.tokens = ['Here', 'comes', 'X', 'and', 'Y']
+ macro.vars['X'] = 0
+ macro.vars['Y'] = 1
+ defines['FUNC_FOO'] = macro
+ macro = globals.Macro('FUNC_BAA')
+ macro.tokens = ['FUNC_FOO']
+ defines['FUNC_BAA'] = macro
+ TestCase.run(tokens, defines)
+
+def main ():
+ print "simple expansion with no arguments"
+ TestCase.simpleNoArgs()
+ print "simple argument expansion"
+ TestCase.simpleArgs()
+ print "multi-token argument expansion"
+ TestCase.multiTokenArgs()
+ print "nested argument expansion"
+ TestCase.nestedTokenArgs()
+
+if __name__ == '__main__':
+ main()
diff --git a/toolkit/src2xml/source/macroparser.py b/toolkit/src2xml/source/macroparser.py
new file mode 100644
index 000000000000..1a221b404d42
--- /dev/null
+++ b/toolkit/src2xml/source/macroparser.py
@@ -0,0 +1,130 @@
+
+import sys
+from globals import *
+import srclexer
+
+class MacroParser(object):
+
+ def __init__ (self, buf):
+ self.buffer = buf
+ self.macro = None
+ self.debug = False
+
+ def parse (self):
+ """
+A macro with arguments must have its open paren immediately following
+its name without any whitespace.
+"""
+ if self.debug:
+ print "-"*68
+ print "parsing '%s'"%self.buffer
+
+ i = 0
+ bufSize = len(self.buffer)
+ name, buf = '', ''
+ while i < bufSize:
+ c = self.buffer[i]
+ if c in [' ', "\t"] and len(name) == 0:
+ # This is a simple macro with no arguments.
+ name = buf
+ vars = []
+ content = self.buffer[i:]
+ self.setMacro(name, vars, content)
+ return
+ elif c == '(' and len(name) == 0:
+ # This one has arguments.
+ name = buf
+ buf = self.buffer[i:]
+ vars, content = self.parseArgs(buf)
+ self.setMacro(name, vars, content)
+ return
+ else:
+ buf += c
+ i += 1
+
+ def parseArgs (self, buffer):
+ """Parse arguments.
+
+The buffer is expected to be formatted like '(a, b, c)' where the first
+character is the open paren.
+"""
+ scope = 0
+ buf = ''
+ vars = []
+ content = ''
+ bufSize = len(buffer)
+ i = 0
+ while i < bufSize:
+ c = buffer[i]
+ if c == '(':
+ scope += 1
+ elif c == ')':
+ scope -= 1
+ if len(buf) > 0:
+ vars.append(buf)
+ if scope == 0:
+ break
+ elif c == ',':
+ if len(buf) == 0:
+ raise globals.ParseError ('')
+ vars.append(buf)
+ buf = ''
+ elif c in " \t" and scope > 0:
+ pass
+ else:
+ buf += c
+
+ i += 1
+
+ if scope > 0:
+ raise globals.ParseError ('')
+
+ return vars, buffer[i+1:]
+
+
+ def setMacro (self, name, vars, content):
+ if self.debug:
+ print "-"*68
+ print "name: %s"%name
+ for var in vars:
+ print "var: %s"%var
+ if len(vars) == 0:
+ print "no vars"
+ print "content: '%s'"%content
+
+ if len(content) > 0:
+ self.macro = Macro(name)
+ for i in xrange(0, len(vars)):
+ self.macro.vars[vars[i]] = i
+
+ # tokinize it using lexer.
+ mclexer = srclexer.SrcLexer(content)
+ mclexer.expandHeaders = False
+ mclexer.inMacroDefine = True
+ mclexer.tokenize()
+ self.macro.tokens = mclexer.getTokens()
+ if self.debug:
+ print self.macro.tokens
+
+ if not self.isValidMacro(self.macro):
+ self.macro = None
+
+ if self.debug:
+ if self.macro != None:
+ print "macro registered!"
+ else:
+ print "macro not registered"
+
+ def isValidMacro (self, macro):
+
+ n = len(macro.tokens)
+ if n == 0:
+ return False
+ elif len(macro.name) > 4 and macro.name[1:4] == 'ID_':
+ # We don't want to expand macros like HID_, SID_, WID_, etc.
+ return False
+ return True
+
+
+ def getMacro (self):
+ return self.macro
diff --git a/toolkit/src2xml/source/macroparser_test.py b/toolkit/src2xml/source/macroparser_test.py
new file mode 100644
index 000000000000..a7064832d1f8
--- /dev/null
+++ b/toolkit/src2xml/source/macroparser_test.py
@@ -0,0 +1,20 @@
+#!/usr/bin/env python
+
+import macroparser
+
+def runParser (buf):
+ mparser = macroparser.MacroParser(buf)
+ mparser.debug = True
+ mparser.parse()
+
+def main ():
+ buf = 'FOO (asdfsdaf)'
+ runParser(buf)
+ buf = 'FOO (x, y) (x) + (y)'
+ runParser(buf)
+ buf = 'FOO(x, y) (x) + (y)'
+ runParser(buf)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/toolkit/src2xml/source/src2xml.py b/toolkit/src2xml/source/src2xml.py
new file mode 100644
index 000000000000..b03c5e61ede1
--- /dev/null
+++ b/toolkit/src2xml/source/src2xml.py
@@ -0,0 +1,227 @@
+#!/usr/bin/env python
+
+import getopt
+import os
+import re
+import sys
+#
+from srclexer import SrcLexer
+from srcparser import SrcParser
+from boxer import Boxer
+# FIXME
+from globals import *
+
+def option_parser ():
+ import optparse
+ p = optparse.OptionParser ()
+
+ p.usage = '''src2xml.py [OPTION]... SRC-FILE...'''
+
+ examples = '''
+Examples:
+ src2xml.py --output-dir=. --post-process --ignore-includes zoom.src
+ src2xml.py --dry-run -I svx/inc -I svx/source/dialog zoom.src
+'''
+
+ def format_examples (self):
+ return examples
+
+ if 'epilog' in p.__dict__:
+ p.formatter.format_epilog = format_examples
+ p.epilog = examples
+ else:
+ p.formatter.format_description = format_examples
+ p.description = examples
+
+ p.description = '''OOo SRC To Layout XML Converter.
+
+Convert OO.o's existing dialog resource files into XML layout files.
+'''
+
+ p.add_option ('-l', '--debug-lexer', action='store_true',
+ dest='debug_lexer', default=False,
+ help='debug lexer')
+
+ p.add_option ('-p', '--debug-parser', action='store_true',
+ dest='debug_parser', default=False,
+ help='debug parser')
+
+ p.add_option ('-m', '--debug-macro', action='store_true',
+ dest='debug_macro', default=False,
+ help='debug macro')
+
+ p.add_option ('-n', '--dry-run', action='store_true',
+ dest='dry_run', default=False,
+ help='dry run')
+
+ p.add_option ('-k', '--keep-going', action='store_true',
+ dest='keep_going', default=False,
+ help='continue after error')
+
+ p.add_option ('-i', '--ignore-includes', action='store_true',
+ dest='ignore_includes', default=False,
+ help='ignore #include directives')
+
+ p.add_option ('-I', '--include-dir', action='append',
+ dest='include_path',
+ default=[],
+ metavar='DIR',
+ help='append DIR to include path')
+
+ def from_file (option, opt_str, value, parser):
+ lst = getattr (parser.values, option.dest)
+ lst += file (value).read ().split ('\n')
+ setattr (parser.values, option.dest, lst)
+
+ def from_path (option, opt_str, value, parser):
+ lst = getattr (parser.values, option.dest)
+ lst += value.split (':')
+ setattr (parser.values, option.dest, lst)
+
+ # Junk me?
+ p.add_option ('--includes-from-file', action='callback', callback=from_file,
+ dest='include_path',
+ default=[],
+ type='string',
+ metavar='FILE',
+ help='append directory list from FILE to include path')
+
+ p.add_option ('--include-path', action='callback', callback=from_path,
+ dest='include_path',
+ type='string',
+ default=[],
+ metavar='PATH',
+ help='append PATH to include path')
+
+ p.add_option ('--only-expand-macros', action='store_true',
+ dest='only_expand_macros', default=False,
+ help='FIXME: better to say what NOT to expand?')
+
+ p.add_option ('-o', '--output-dir', action='store',
+ dest='output_dir', default=None,
+ metavar='DIR',
+ help='Output to DIR')
+
+ p.add_option ('-s', '--post-process', action='store_true',
+ dest='post_process', default=False,
+ help='post process output for use in Layout')
+
+ p.add_option ('--stop-on-header', action='store_true',
+ dest='stopOnHeader', default=False,
+ help='FIXME: remove this?')
+
+ return p
+
+
+def convert (file_name, options):
+ progress ("parsing %(file_name)s ..." % locals ())
+ fullpath = os.path.abspath(file_name)
+ if not os.path.isfile(fullpath):
+ error("no such file", exit=True)
+
+ ##options.include_path.append (os.path.dirname (fullpath))
+
+ input = file (fullpath, 'r').read()
+ lexer = SrcLexer(input, fullpath)
+ lexer.expandHeaders = not options.ignore_includes
+ lexer.includeDirs = options.include_path
+ lexer.stopOnHeader = options.stopOnHeader
+ lexer.debugMacro = options.debug_macro
+ if options.debug_lexer:
+ lexer.debug = True
+ lexer.tokenize()
+ progress ("-"*68 + "\n")
+ progress ("** token dump\n")
+ lexer.dumpTokens()
+ progress ("** end of token dump\n")
+ return
+
+ # Tokenize it using lexer
+ lexer.tokenize()
+
+ parser = SrcParser(lexer.getTokens(), lexer.getDefines())
+ parser.only_expand_macros = options.only_expand_macros
+ if options.debug_parser:
+ parser.debug = True
+ root = parser.parse()
+ s = root.dump()
+ return s
+
+ # Parse the tokens.
+ root = parser.parse()
+
+ # Box it, and return the XML tree.
+ root = Boxer(root).layout()
+ output = root.dump()
+ if not options.dry_run:
+ progress ("\n")
+ return output
+
+def dry_one_file (file_name, options):
+ try:
+ str = convert(file_name, options)
+ progress (" SUCCESS\n")
+ except Exception, e:
+ if options.keep_going:
+ progress (" FAILED\n")
+ else:
+ import traceback
+ print traceback.format_exc (None)
+ raise e
+
+def post_process (s):
+ """Make output directly usable by layout module."""
+ s = re.sub ('(</?)([a-z]+)-([a-z]+)-([a-z]+)', r'\1\2\3\4', s)
+ s = re.sub ('(</?)([a-z]+)-([a-z]+)', r'\1\2\3', s)
+ s = re.sub ('(<(checkbox|(cancel|help|ignore|ok|push|more|no|radio|reset|retry|yes)button|(fixed(info|text)))[^>]*) text=', r'\1 label=', s)
+ s = re.sub (' (height|width|x|y)="[0-9]*"', '', s)
+ s = re.sub (' (label|text|title)="', r' _\1="', s)
+ s = re.sub ('&([^m][^p]*[^;]*)', r'&amp;\1', s)
+ s = re.sub (' hide="(TRUE|true|1)"', ' show="false"', s)
+
+ s = s.replace ('<modaldialog', '<modaldialog sizeable="true"')
+ s = s.replace (' rid=', ' id=')
+ s = s.replace (' border="true"', ' has_border="true"')
+ s = s.replace (' def-button="true"', ' defbutton="true"')
+ s = s.replace (' drop-down="', ' dropdown="')
+ s = s.replace (' tab-stop="', ' tabstop="')
+ return s
+
+XML_HEADER = '''<?xml version="1.0" encoding="UTF-8"?>
+<!-- This is a template. i18n translation is not performed in-place;
+ i18n translated XML files are generated from this template by
+ transex3/layout/tralay. !-->
+'''
+
+def do_one_file (file_name, options):
+ str = XML_HEADER
+ str += convert(file_name, options)
+ str += '\n'
+
+ if options.post_process:
+ str = post_process (str)
+ h = sys.stdout
+ if options.output_dir:
+ base = os.path.basename (file_name)
+ root, ext = os.path.splitext (base)
+ out_name = options.output_dir + '/' + root + '.xml'
+ progress ("writing %(out_name)s ..." % locals ())
+ h = file (out_name, 'w')
+ h.write (str)
+ h.flush ()
+ progress ("\n")
+
+def main ():
+ p = option_parser ()
+ (options, files) = option_parser ().parse_args ()
+ if not files:
+ p.error ("no input files")
+
+ for f in files:
+ if options.dry_run:
+ dry_one_file (f, options)
+ else:
+ do_one_file (f, options)
+
+if __name__ == '__main__':
+ main ()
diff --git a/toolkit/src2xml/source/srclexer.py b/toolkit/src2xml/source/srclexer.py
new file mode 100644
index 000000000000..5a5a3319b0d1
--- /dev/null
+++ b/toolkit/src2xml/source/srclexer.py
@@ -0,0 +1,488 @@
+import sys, os.path
+from globals import *
+import macroparser
+
+class EOF(Exception):
+ def __init__ (self):
+ pass
+
+ def str (self):
+ return "end of file"
+
+class BOF(Exception):
+ def __init__ (self):
+ pass
+
+ def str (self):
+ return "beginning of file"
+
+
+def removeHeaderQuotes (orig):
+ if len(orig) <= 2:
+ return orig
+ elif orig[0] == orig[-1] == '"':
+ return orig[1:-1]
+ elif orig[0] == '<' and orig[-1] == '>':
+ return orig[1:-1]
+
+ return orig
+
+
+def dumpTokens (tokens, toError=False):
+
+ scope = 0
+ indent = " "
+ line = ''
+ chars = ''
+
+ for token in tokens:
+ if token in '{<':
+ if len(line) > 0:
+ chars += indent*scope + line + "\n"
+ line = ''
+ chars += indent*scope + token + "\n"
+ scope += 1
+
+ elif token in '}>':
+ if len(line) > 0:
+ chars += indent*scope + line + "\n"
+ line = ''
+ scope -= 1
+ chars += indent*scope + token
+
+ elif token == ';':
+ if len(line) > 0:
+ chars += indent*scope + line + ";\n"
+ line = ''
+ else:
+ chars += ";\n"
+ elif len(token) > 0:
+ line += token + ' '
+
+ if len(line) > 0:
+ chars += line
+ chars += "\n"
+ if toError:
+ sys.stderr.write(chars)
+ else:
+ sys.stdout.write(chars)
+
+
+class HeaderData(object):
+ def __init__ (self):
+ self.defines = {}
+ self.tokens = []
+
+
+class SrcLexer(object):
+ """Lexicographical analyzer for .src format.
+
+The role of a lexer is to parse the source file and break it into
+appropriate tokens. Such tokens are later passed to a parser to
+build the syntax tree.
+"""
+ headerCache = {}
+
+ VISIBLE = 0
+ INVISIBLE_PRE = 1
+ INVISIBLE_POST = 2
+
+ def __init__ (self, chars, filepath = None):
+ self.filepath = filepath
+ self.parentLexer = None
+ self.chars = chars
+ self.bufsize = len(self.chars)
+
+ # TODO: use parameters for this
+ # Properties that can be copied.
+ self.headerDict = dict ()
+ self.debug = False
+ self.debugMacro = False
+ self.includeDirs = list ()
+ self.expandHeaders = True
+ self.inMacroDefine = False
+ self.stopOnHeader = False
+
+ def copyProperties (self, other):
+ """Copy properties from another instance of SrcLexer."""
+
+ # TODO: use parameters for this
+ self.headerDict = other.headerDict
+ self.debug = other.debug
+ self.debugMacro = other.debugMacro
+ self.includeDirs = other.includeDirs[:]
+ self.expandHeaders = other.expandHeaders
+ self.inMacroDefine = other.inMacroDefine
+ self.stopOnHeader = other.stopOnHeader
+
+ def init (self):
+ self.firstNonBlank = ''
+ self.token = ''
+ self.tokens = []
+ self.defines = {}
+ self.visibilityStack = []
+
+ def getTokens (self):
+ return self.tokens
+
+ def getDefines (self):
+ return self.defines
+
+ def nextPos (self, i):
+ while True:
+ i += 1
+ try:
+ c = self.chars[i]
+ except IndexError:
+ raise EOF
+
+ if ord(c) in [0x0D]:
+ continue
+ break
+ return i
+
+ def prevPos (self, i):
+ while True:
+ i -= 1
+ try:
+ c = self.chars[i]
+ except IndexError:
+ raise BOF
+
+ if ord(c) in [0x0D]:
+ continue
+ break
+ return i
+
+ def isCodeVisible (self):
+ if len(self.visibilityStack) == 0:
+ return True
+ for item in self.visibilityStack:
+ if item != SrcLexer.VISIBLE:
+ return False
+ return True
+
+ def tokenize (self):
+ self.init()
+
+ i = 0
+ while True:
+ c = self.chars[i]
+
+ if self.firstNonBlank == '' and not c in [' ', "\n", "\t"]:
+ # Store the first non-blank in a line.
+ self.firstNonBlank = c
+ elif c == "\n":
+ self.firstNonBlank = ''
+
+ if c == '#':
+ i = self.pound(i)
+ elif c == '/':
+ i = self.slash(i)
+ elif c == "\n":
+ i = self.lineBreak(i)
+ elif c == '"':
+ i = self.doubleQuote(i)
+ elif c in [' ', "\t"]:
+ i = self.blank(i)
+ elif c in ";()[]{}<>,=+-*":
+ # Any outstanding single-character token.
+ i = self.anyToken(i, c)
+ elif self.isCodeVisible():
+ self.token += c
+
+ try:
+ i = self.nextPos(i)
+ except EOF:
+ break
+
+ if len(self.token):
+ self.tokens.append(self.token)
+
+ if not self.parentLexer and self.debug:
+ progress ("-"*68 + "\n")
+ progress ("All defines found in this translation unit:\n")
+ keys = self.defines.keys()
+ keys.sort()
+ for key in keys:
+ progress ("@ %s\n"%key)
+
+ def dumpTokens (self, toError=False):
+ dumpTokens(self.tokens, toError)
+
+
+ def maybeAddToken (self):
+ if len(self.token) > 0:
+ self.tokens.append(self.token)
+ self.token = ''
+
+
+ #--------------------------------------------------------------------
+ # character handlers
+
+ def blank (self, i):
+ if not self.isCodeVisible():
+ return i
+
+ self.maybeAddToken()
+ return i
+
+
+ def pound (self, i):
+
+ if self.inMacroDefine:
+ return i
+
+ if not self.firstNonBlank == '#':
+ return i
+
+ self.maybeAddToken()
+ # We are in preprocessing mode.
+
+ # Get the macro command name '#<command> .....'
+
+ command, define, buf = '', '', ''
+ firstNonBlank = False
+ while True:
+ try:
+ i = self.nextPos(i)
+ c = self.chars[i]
+ if c == '\\' and self.chars[self.nextPos(i)] == "\n":
+ i = self.nextPos(i)
+ continue
+ except EOF:
+ break
+
+ if c == "\n":
+ if len(buf) > 0 and len(command) == 0:
+ command = buf
+ i = self.prevPos(i)
+ break
+ elif c in [' ', "\t"]:
+ if not firstNonBlank:
+ # Ignore any leading blanks after the '#'.
+ continue
+
+ if len(command) == 0:
+ command = buf
+ buf = ''
+ else:
+ buf += ' '
+ elif c == '(':
+ if len(buf) > 0 and len(command) == 0:
+ command = buf
+ buf += c
+ else:
+ if not firstNonBlank:
+ firstNonBlank = True
+ buf += c
+
+ if command == 'define':
+ self.handleMacroDefine(buf)
+ elif command == 'include':
+ self.handleMacroInclude(buf)
+ elif command == 'ifdef':
+ defineName = buf.strip()
+ if self.defines.has_key(defineName):
+ self.visibilityStack.append(SrcLexer.VISIBLE)
+ else:
+ self.visibilityStack.append(SrcLexer.INVISIBLE_PRE)
+
+ elif command == 'ifndef':
+ defineName = buf.strip()
+ if self.defines.has_key(defineName):
+ self.visibilityStack.append(SrcLexer.INVISIBLE_PRE)
+ else:
+ self.visibilityStack.append(SrcLexer.VISIBLE)
+
+ elif command == 'if':
+ if self.evalCodeVisibility(buf):
+ self.visibilityStack.append(SrcLexer.VISIBLE)
+ else:
+ self.visibilityStack.append(SrcLexer.INVISIBLE_PRE)
+
+ elif command == 'elif':
+ if len(self.visibilityStack) == 0:
+ raise ParseError ('')
+
+ if self.visibilityStack[-1] == SrcLexer.VISIBLE:
+ self.visibilityStack[-1] = SrcLexer.INVISIBLE_POST
+ elif self.visibilityStack[-1] == SrcLexer.INVISIBLE_PRE:
+ # Evaluate only if the current visibility is false.
+ if self.evalCodeVisibility(buf):
+ self.visibilityStack[-1] = SrcLexer.VISIBLE
+
+ elif command == 'else':
+ if len(self.visibilityStack) == 0:
+ raise ParseError ('')
+
+ if self.visibilityStack[-1] == SrcLexer.VISIBLE:
+ self.visibilityStack[-1] = SrcLexer.INVISIBLE_POST
+ if self.visibilityStack[-1] == SrcLexer.INVISIBLE_PRE:
+ self.visibilityStack[-1] = SrcLexer.VISIBLE
+
+ elif command == 'endif':
+ if len(self.visibilityStack) == 0:
+ raise ParseError ('')
+ self.visibilityStack.pop()
+
+ elif command == 'undef':
+ pass
+ elif command in ['error', 'pragma']:
+ pass
+ else:
+ print "'%s' '%s'"%(command, buf)
+ print self.filepath
+ sys.exit(0)
+
+ return i
+
+
+ def evalCodeVisibility (self, buf):
+ try:
+ return eval(buf)
+ except:
+ return True
+
+ def handleMacroDefine (self, buf):
+
+ mparser = macroparser.MacroParser(buf)
+ mparser.debug = self.debugMacro
+ mparser.parse()
+ macro = mparser.getMacro()
+ if macro:
+ self.defines[macro.name] = macro
+
+ def handleMacroInclude (self, buf):
+
+ # Strip excess string if any.
+ pos = buf.find(' ')
+ if pos >= 0:
+ buf = buf[:pos]
+ headerSub = removeHeaderQuotes(buf)
+
+ if not self.expandHeaders:
+ # We don't want to expand headers. Bail out.
+ if self.debug:
+ progress ("%s ignored\n"%headerSub)
+ return
+
+ defines = {}
+ headerPath = None
+ for includeDir in self.includeDirs:
+ hpath = includeDir + '/' + headerSub
+ if os.path.isfile(hpath) and hpath != self.filepath:
+ headerPath = hpath
+ break
+
+ if not headerPath:
+ error("included header file " + headerSub + " not found\n", self.stopOnHeader)
+ return
+
+ if self.debug:
+ progress ("%s found\n"%headerPath)
+
+ if headerPath in self.headerDict:
+ if self.debug:
+ progress ("%s already included\n"%headerPath)
+ return
+
+ if SrcLexer.headerCache.has_key(headerPath):
+ if self.debug:
+ progress ("%s in cache\n"%headerPath)
+ for key in SrcLexer.headerCache[headerPath].defines.keys():
+ self.defines[key] = SrcLexer.headerCache[headerPath].defines[key]
+ return
+
+ chars = open(headerPath, 'r').read()
+ mclexer = SrcLexer(chars, headerPath)
+ mclexer.copyProperties(self)
+ mclexer.parentLexer = self
+ mclexer.tokenize()
+ hdrData = HeaderData()
+ hdrData.tokens = mclexer.getTokens()
+ headerDefines = mclexer.getDefines()
+ for key in headerDefines.keys():
+ defines[key] = headerDefines[key]
+ hdrData.defines[key] = headerDefines[key]
+
+ self.headerDict[headerPath] = True
+ SrcLexer.headerCache[headerPath] = hdrData
+
+ # Update the list of headers that have already been expaneded.
+ for key in mclexer.headerDict.keys():
+ self.headerDict[key] = True
+
+ if self.debug:
+ progress ("defines found in header %s:\n"%headerSub)
+ for key in defines.keys():
+ progress (" '%s'\n"%key)
+
+ for key in defines.keys():
+ self.defines[key] = defines[key]
+
+
+ def slash (self, i):
+ if not self.isCodeVisible():
+ return i
+
+ if i < self.bufsize - 1 and self.chars[i+1] == '/':
+ # Parse line comment.
+ line = ''
+ i += 2
+ while i < self.bufsize:
+ c = self.chars[i]
+ if ord(c) in [0x0A, 0x0D]:
+ return i - 1
+ line += c
+ i += 1
+ self.token = ''
+ elif i < self.bufsize - 1 and self.chars[i+1] == '*':
+ comment = ''
+ i += 2
+ while i < self.bufsize:
+ c = self.chars[i]
+ if c == '/' and self.chars[i-1] == '*':
+ return i
+ comment += c
+ i += 1
+ else:
+ return self.anyToken(i, '/')
+
+ return i
+
+
+ def lineBreak (self, i):
+ if not self.isCodeVisible():
+ return i
+
+ self.maybeAddToken()
+
+ return i
+
+
+ def doubleQuote (self, i):
+ if not self.isCodeVisible():
+ return i
+
+ literal = ''
+ i += 1
+ while i < self.bufsize:
+ c = self.chars[i]
+ if c == '"':
+ self.tokens.append('"'+literal+'"')
+ break
+ literal += c
+ i += 1
+
+ return i
+
+
+ def anyToken (self, i, token):
+ if not self.isCodeVisible():
+ return i
+
+ self.maybeAddToken()
+ self.token = token
+ self.maybeAddToken()
+ return i
diff --git a/toolkit/src2xml/source/srcparser.py b/toolkit/src2xml/source/srcparser.py
new file mode 100644
index 000000000000..b25d39ecb66e
--- /dev/null
+++ b/toolkit/src2xml/source/srcparser.py
@@ -0,0 +1,416 @@
+import sys
+from globals import *
+import srclexer
+
+# simple name translation map
+postTransMap = {"ok-button": "okbutton",
+ "cancel-button": "cancelbutton",
+ "help-button": "helpbutton"}
+
+def transName (name):
+ """Translate a mixed-casing name to dash-separated name.
+
+Translate a mixed-casing name (e.g. MyLongName) to a dash-separated name
+(e.g. my-long-name).
+"""
+ def isUpper (c):
+ return c >= 'A' and c <= 'Z'
+
+ newname = ''
+ parts = []
+ buf = ''
+ for c in name:
+ if isUpper(c) and len(buf) > 1:
+ parts.append(buf)
+ buf = c
+ else:
+ buf += c
+
+ if len(buf) > 0:
+ parts.append(buf)
+
+ first = True
+ for part in parts:
+ if first:
+ first = False
+ else:
+ newname += '-'
+ newname += part.lower()
+
+ # special-case mapping ...
+ if 0: #postTransMap.has_key(newname):
+ newname = postTransMap[newname]
+
+ return newname
+
+
+def transValue (value):
+ """Translate certain values.
+
+Examples of translated values include TRUE -> true, FALSE -> false.
+"""
+ if value.lower() in ["true", "false"]:
+ value = value.lower()
+ return value
+
+
+def renameAttribute (name, elemName):
+
+ # TODO: all manner of evil special cases ...
+ if elemName == 'metric-field' and name == 'spin-size':
+ return 'step-size'
+
+ return name
+
+
+class Statement(object):
+ """Container to hold information for a single statement.
+
+Each statement consists of the left-hand-side token(s), and right-hand-side
+tokens, separated by a '=' token. This class stores the information on the
+left-hand-side tokens.
+"""
+ def __init__ (self):
+ self.leftTokens = []
+ self.leftScope = None
+
+
+class MacroExpander(object):
+ def __init__ (self, tokens, defines):
+ self.tokens = tokens
+ self.defines = defines
+
+ def expand (self):
+ self.pos = 0
+ while self.pos < len(self.tokens):
+ self.expandToken()
+
+ def expandToken (self):
+ token = self.tokens[self.pos]
+ if not self.defines.has_key(token):
+ self.pos += 1
+ return
+
+ macro = self.defines[token]
+ nvars = len(macro.vars.keys())
+ if nvars == 0:
+ # Simple expansion
+ self.tokens[self.pos:self.pos+1] = macro.tokens
+ return
+ else:
+ # Expansion with arguments.
+ values, lastPos = self.parseValues()
+ newtokens = []
+ for mtoken in macro.tokens:
+ if macro.vars.has_key(mtoken):
+ # variable
+ pos = macro.vars[mtoken]
+ valtokens = values[pos]
+ for valtoken in valtokens:
+ newtokens.append(valtoken)
+ else:
+ # not a variable
+ newtokens.append(mtoken)
+
+ self.tokens[self.pos:self.pos+lastPos+1] = newtokens
+
+
+ def parseValues (self):
+ """Parse tokens to get macro function variable values.
+
+Be aware that there is an implicit quotes around the text between the open
+paren, the comma(s), and the close paren. For instance, if a macro is defined
+as FOO(a, b) and is used as FOO(one two three, and four), then the 'a' must be
+replaced with 'one two three', and the 'b' replaced with 'and four'. In other
+words, whitespace does not end a token.
+
+"""
+ values = []
+ i = 1
+ scope = 0
+ value = []
+ while True:
+ try:
+ tk = self.tokens[self.pos+i]
+ except IndexError:
+ progress ("error parsing values (%d)\n"%i)
+ for j in xrange(0, i):
+ print self.tokens[self.pos+j],
+ print ''
+ srclexer.dumpTokens(self.tokens)
+ srclexer.dumpTokens(self.newtokens)
+ print "tokens expanded so far:"
+ for tk in self.expandedTokens:
+ print "-"*20
+ print tk
+ srclexer.dumpTokens(self.defines[tk].tokens)
+ sys.exit(1)
+ if tk == '(':
+ value = []
+ scope += 1
+ elif tk == ',':
+ values.append(value)
+ value = []
+ elif tk == ')':
+ scope -= 1
+ values.append(value)
+ value = []
+ if scope == 0:
+ break
+ else:
+ raise ParseError ('')
+ else:
+ value.append(tk)
+ i += 1
+
+ return values, i
+
+ def getTokens (self):
+ return self.tokens
+
+
+class SrcParser(object):
+
+ def __init__ (self, tokens, defines = None):
+ self.tokens = tokens
+ self.defines = defines
+ self.debug = False
+ self.onlyExpandMacros = False
+
+ def init (self):
+ self.elementStack = [RootNode()]
+ self.stmtData = Statement()
+ self.tokenBuf = []
+ self.leftTokens = []
+
+ # Expand defined macros.
+ if self.debug:
+ progress ("-"*68+"\n")
+ for key in self.defines.keys():
+ progress ("define: %s\n"%key)
+
+ self.expandMacro()
+ self.tokenSize = len(self.tokens)
+
+ def expandMacro (self):
+ macroExp = MacroExpander(self.tokens, self.defines)
+ macroExp.expand()
+ self.tokens = macroExp.getTokens()
+ if self.onlyExpandMacros:
+ srclexer.dumpTokens(self.tokens)
+ sys.exit(0)
+
+ def parse (self):
+ """Parse it!
+
+This is the main loop for the parser. This is where it all begins and ends.
+"""
+ self.init()
+
+ i = 0
+ while i < self.tokenSize:
+ tk = self.tokens[i]
+ if tk == '{':
+ i = self.openBrace(i)
+ elif tk == '}':
+ i = self.closeBrace(i)
+ elif tk == ';':
+ i = self.semiColon(i)
+ elif tk == '=':
+ i = self.assignment(i)
+ else:
+ self.tokenBuf.append(tk)
+
+ i += 1
+
+ return self.elementStack[0]
+
+ #-------------------------------------------------------------------------
+ # Token Handlers
+
+ """
+Each token handler takes the current token position and returns the position
+of the last token processed. For the most part, the current token position
+and the last processed token are one and the same, in which case the handler
+can simply return the position value it receives without incrementing it.
+
+If you need to read ahead to process more tokens than just the current token,
+make sure that the new token position points to the last token that has been
+processed, not the next token that has not yet been processed. This is
+because the main loop increments the token position when it returns from the
+handler.
+"""
+
+ # assignment token '='
+ def assignment (self, i):
+ self.leftTokens = self.tokenBuf[:]
+ if self.stmtData.leftScope == None:
+ # Keep track of lhs data in case of compound statement.
+ self.stmtData.leftTokens = self.tokenBuf[:]
+ self.stmtData.leftScope = len(self.elementStack) - 1
+
+ self.tokenBuf = []
+ return i
+
+ # open brace token '{'
+ def openBrace (self, i):
+ bufSize = len(self.tokenBuf)
+ leftSize = len(self.leftTokens)
+ obj = None
+ if bufSize == 0 and leftSize > 0:
+ # Name = { ...
+ obj = Element(self.leftTokens[0])
+
+ elif bufSize > 0 and leftSize == 0:
+ # Type Name { ...
+ wgtType = self.tokenBuf[0]
+ wgtRID = None
+ if bufSize >= 2:
+ wgtRID = self.tokenBuf[1]
+ obj = Element(wgtType, wgtRID)
+
+ else:
+ # LeftName = Name { ...
+ obj = Element(self.leftTokens[0])
+ obj.setAttr("type", self.tokenBuf[0])
+
+ obj.name = transName(obj.name)
+
+ if obj.name == 'string-list':
+ i = self.parseStringList(i)
+ elif obj.name == 'filter-list':
+ i = self.parseFilterList(i, obj)
+ else:
+ self.elementStack[-1].appendChild(obj)
+ self.elementStack.append(obj)
+
+ self.tokenBuf = []
+ self.leftTokens = []
+
+ return i
+
+ # close brace token '}'
+ def closeBrace (self, i):
+ if len(self.tokenBuf) > 0:
+ if self.debug:
+ print self.tokenBuf
+ raise ParseError ('')
+ self.elementStack.pop()
+ return i
+
+ # semi colon token ';'
+ def semiColon (self, i):
+ stackSize = len(self.elementStack)
+ scope = stackSize - 1
+ if len(self.tokenBuf) == 0:
+ pass
+ elif scope == 0:
+ # We are not supposed to have any statment in global scope.
+ # Just ignore this statement.
+ pass
+ else:
+ # Statement within a scope. Import it as an attribute for the
+ # current element.
+ elem = self.elementStack[-1]
+
+ name = "none"
+ if len(self.leftTokens) > 0:
+ # Use the leftmost token as the name for now. If we need to
+ # do more complex parsing of lhs, add more code here.
+ name = self.leftTokens[0]
+ name = transName(name)
+
+ if name == 'pos':
+ i = self.parsePosAttr(i)
+ elif name == 'size':
+ i = self.parseSizeAttr(i)
+ elif len (self.tokenBuf) == 1:
+ # Simple value
+ value = transValue(self.tokenBuf[0])
+ name = renameAttribute(name, elem.name)
+ elem.setAttr(name, value)
+
+ if not self.stmtData.leftScope == None and self.stmtData.leftScope < scope:
+ # This is a nested scope within a statement. Do nothing for now.
+ pass
+
+ if self.stmtData.leftScope == scope:
+ # end of (nested) statement.
+ self.stmtData.leftScope = None
+
+ self.tokenBuf = []
+ self.leftTokens = []
+
+ return i
+
+ def parseStringList (self, i):
+
+ i += 1
+ while i < self.tokenSize:
+ tk = self.tokens[i]
+ if tk == '}':
+ break
+ i += 1
+
+ return i
+
+ def parseFilterList (self, i, obj):
+ self.elementStack[-1].appendChild(obj)
+ self.elementStack.append(obj)
+
+ return i
+
+ def parsePosAttr (self, i):
+
+ # MAP_APPFONT ( 6 , 5 )
+ elem = self.elementStack[-1]
+ x, y = self.parseMapAppfont(self.tokenBuf)
+ elem.setAttr("x", x)
+ elem.setAttr("y", y)
+
+ return i
+
+ def parseSizeAttr (self, i):
+
+ # MAP_APPFONT ( 6 , 5 )
+ elem = self.elementStack[-1]
+ width, height = self.parseMapAppfont(self.tokenBuf)
+ elem.setAttr("width", width)
+ elem.setAttr("height", height)
+
+ return i
+
+ def parseMapAppfont (self, tokens):
+ values = []
+ scope = 0
+ val = ''
+ for tk in tokens:
+ if tk == '(':
+ scope += 1
+ if scope == 1:
+ val = ''
+ else:
+ val += tk
+ elif tk == ')':
+ scope -= 1
+ if scope == 0:
+ if len(val) == 0:
+ raise ParseError ('')
+ values.append(val)
+ break
+ else:
+ val += tk
+ elif tk == ',':
+ if len(val) == 0:
+ raise ParseError ('')
+ values.append(val)
+ val = ''
+ elif scope > 0:
+ val += tk
+
+ if len(values) != 2:
+ raise ParseError ('')
+
+ return eval(values[0]), eval(values[1])
+
+
diff --git a/toolkit/src2xml/src-sc.lst b/toolkit/src2xml/src-sc.lst
new file mode 100644
index 000000000000..bb2417d47da8
--- /dev/null
+++ b/toolkit/src2xml/src-sc.lst
@@ -0,0 +1,57 @@
+../../sc/util/hidother.src
+../../sc/addin/datefunc/dfa.src
+../../sc/addin/rot13/rot13.src
+../../sc/source/ui/src/crnrdlg.src
+../../sc/source/ui/src/hdrcont.src
+../../sc/source/ui/src/solvrdlg.src
+../../sc/source/ui/src/miscdlgs.src
+../../sc/source/ui/src/tabopdlg.src
+../../sc/source/ui/src/popup.src
+../../sc/source/ui/src/autofmt.src
+../../sc/source/ui/src/toolbox.src
+../../sc/source/ui/src/opredlin.src
+../../sc/source/ui/src/namedlg.src
+../../sc/source/ui/src/sortdlg.src
+../../sc/source/ui/src/textdlgs.src
+../../sc/source/ui/src/optdlg.src
+../../sc/source/ui/src/scwarngs.src
+../../sc/source/ui/src/scfuncs.src
+../../sc/source/ui/src/filter.src
+../../sc/source/ui/src/simpref.src
+../../sc/source/ui/src/attrdlg.src
+../../sc/source/ui/src/sc.src
+../../sc/source/ui/src/globstr.src
+../../sc/source/ui/src/scstring.src
+../../sc/source/ui/src/dbnamdlg.src
+../../sc/source/ui/src/subtdlg.src
+../../sc/source/ui/src/pseudo.src
+../../sc/source/ui/src/condfrmt.src
+../../sc/source/ui/src/chartdlg.src
+../../sc/source/ui/src/scerrors.src
+../../sc/source/ui/dbgui/outline.src
+../../sc/source/ui/dbgui/pvfundlg.src
+../../sc/source/ui/dbgui/scendlg.src
+../../sc/source/ui/dbgui/pivot.src
+../../sc/source/ui/dbgui/dpgroupdlg.src
+../../sc/source/ui/dbgui/dapitype.src
+../../sc/source/ui/dbgui/imoptdlg.src
+../../sc/source/ui/dbgui/consdlg.src
+../../sc/source/ui/dbgui/validate.src
+../../sc/source/ui/dbgui/asciiopt.src
+../../sc/source/ui/drawfunc/objdraw.src
+../../sc/source/ui/drawfunc/drformsh.src
+../../sc/source/ui/styleui/scstyles.src
+../../sc/source/ui/styleui/styledlg.src
+../../sc/source/ui/formdlg/parawin.src
+../../sc/source/ui/formdlg/dwfunctr.src
+../../sc/source/ui/formdlg/formdlgs.src
+../../sc/source/ui/navipi/navipi.src
+../../sc/source/ui/miscdlgs/acredlin.src
+../../sc/source/ui/miscdlgs/highred.src
+../../sc/source/ui/miscdlgs/linkarea.src
+../../sc/source/ui/miscdlgs/instbdlg.src
+../../sc/source/ui/pagedlg/pagedlg.src
+../../sc/source/ui/pagedlg/tphf.src
+../../sc/source/ui/pagedlg/hfedtdlg.src
+../../sc/source/ui/docshell/tpstat.src
+../../sc/source/core/src/compiler.src
diff --git a/toolkit/src2xml/src-sd.lst b/toolkit/src2xml/src-sd.lst
new file mode 100644
index 000000000000..6dc236e38ff2
--- /dev/null
+++ b/toolkit/src2xml/src-sd.lst
@@ -0,0 +1,124 @@
+../../sd/util/hidother.src
+../../sd/source/ui/app/tbxids_tmpl.src
+../../sd/source/ui/app/popup2_tmpl.src
+../../sd/source/ui/app/popup.src
+../../sd/source/ui/app/toolbox.src
+../../sd/source/ui/app/menuids2_tmpl.src
+../../sd/source/ui/app/sdstring.src
+../../sd/source/ui/app/menu_tmpl.src
+../../sd/source/ui/app/strings.src
+../../sd/source/ui/app/menuids_tmpl.src
+../../sd/source/ui/app/accel_tmpl.src
+../../sd/source/ui/app/tbx_ww.src
+../../sd/source/ui/app/accelids_tmpl.src
+../../sd/source/ui/app/menuportal_tmpl.src
+../../sd/source/ui/app/menuids3_tmpl.src
+../../sd/source/ui/app/app.src
+../../sd/source/ui/app/res_bmp.src
+../../sd/source/ui/app/pseudo.src
+../../sd/source/ui/app/menuids4_tmpl.src
+../../sd/source/ui/app/toolbox2_tmpl.src
+../../sd/source/ui/dlg/headerfooterdlg.src
+../../sd/source/ui/dlg/dlgfield.src
+../../sd/source/ui/dlg/sdobjpal.src
+../../sd/source/ui/dlg/morphdlg.src
+../../sd/source/ui/dlg/PaneDockingWindow.src
+../../sd/source/ui/dlg/dlgsnap.src
+../../sd/source/ui/dlg/tpoption.src
+../../sd/source/ui/dlg/present.src
+../../sd/source/ui/dlg/sdpreslt.src
+../../sd/source/ui/dlg/dlgass.src
+../../sd/source/ui/dlg/tpaction.src
+../../sd/source/ui/dlg/prntopts.src
+../../sd/source/ui/dlg/prltempl.src
+../../sd/source/ui/dlg/custsdlg.src
+../../sd/source/ui/dlg/inspagob.src
+../../sd/source/ui/dlg/paragr.src
+../../sd/source/ui/dlg/dlgpage.src
+../../sd/source/ui/dlg/vectdlg.src
+../../sd/source/ui/dlg/dlgolbul.src
+../../sd/source/ui/dlg/copydlg.src
+../../sd/source/ui/dlg/dlg_char.src
+../../sd/source/ui/dlg/printdlg.src
+../../sd/source/ui/dlg/ins_page.src
+../../sd/source/ui/dlg/animobjs.src
+../../sd/source/ui/dlg/ins_paste.src
+../../sd/source/ui/dlg/tabtempl.src
+../../sd/source/ui/dlg/LayerDialog.src
+../../sd/source/ui/dlg/masterlayoutdlg.src
+../../sd/source/ui/dlg/navigatr.src
+../../sd/source/ui/dlg/brkdlg.src
+../../sd/source/ui/slidesorter/shell/SlideSorterChildWindow.src
+../../sd/source/ui/notes/NotesChildWindow.src
+../../sd/source/ui/toolpanel/ToolPanelChildWindow.src
+../../sd/source/ui/animations/CustomAnimationCreateDialog.src
+../../sd/source/ui/animations/CustomAnimationDialog.src
+../../sd/source/ui/animations/CustomAnimation.src
+../../sd/source/ui/animations/CustomAnimationSchemesPane.src
+../../sd/source/ui/animations/SlideTransitionPane.src
+../../sd/source/ui/animations/AnimationSchemesPane.src
+../../sd/source/ui/animations/CustomAnimationPane.src
+../../sd/source/ui/accessibility/accessibility.src
+../../sd/source/ui/slideshow/slideshow.src
+../../sd/source/core/glob.src
+../../sd/source/filter/html/pubdlg.src
+../../sd/unxlngi6.pro/inc/menu.src
+../../sd/unxlngi6.pro/inc/menuids2.src
+../../sd/unxlngi6.pro/inc/menuids3.src
+../../sd/unxlngi6.pro/inc/menuids4.src
+../../sd/unxlngi6.pro/inc/popup2.src
+../../sd/unxlngi6.pro/inc/toolbox2.src
+../../sd/unxlngi6.pro/inc/accel.src
+../../sd/unxlngi6.pro/inc/menuids.src
+../../sd/unxlngi6.pro/inc/menuportal.src
+../../sd/unxlngi6.pro/inc/accelids.src
+../../sd/unxlngi6.pro/inc/tbxids.src
+../../sd/unxlngi6.pro/misc/app/popup.src
+../../sd/unxlngi6.pro/misc/app/toolbox.src
+../../sd/unxlngi6.pro/misc/app/sdstring.src
+../../sd/unxlngi6.pro/misc/app/strings.src
+../../sd/unxlngi6.pro/misc/app/tbx_ww.src
+../../sd/unxlngi6.pro/misc/app/app.src
+../../sd/unxlngi6.pro/misc/app/res_bmp.src
+../../sd/unxlngi6.pro/misc/app/pseudo.src
+../../sd/unxlngi6.pro/misc/dlg/headerfooterdlg.src
+../../sd/unxlngi6.pro/misc/dlg/dlgfield.src
+../../sd/unxlngi6.pro/misc/dlg/morphdlg.src
+../../sd/unxlngi6.pro/misc/dlg/PaneDockingWindow.src
+../../sd/unxlngi6.pro/misc/dlg/dlgsnap.src
+../../sd/unxlngi6.pro/misc/dlg/tpoption.src
+../../sd/unxlngi6.pro/misc/dlg/present.src
+../../sd/unxlngi6.pro/misc/dlg/sdpreslt.src
+../../sd/unxlngi6.pro/misc/dlg/dlgass.src
+../../sd/unxlngi6.pro/misc/dlg/tpaction.src
+../../sd/unxlngi6.pro/misc/dlg/prntopts.src
+../../sd/unxlngi6.pro/misc/dlg/prltempl.src
+../../sd/unxlngi6.pro/misc/dlg/custsdlg.src
+../../sd/unxlngi6.pro/misc/dlg/inspagob.src
+../../sd/unxlngi6.pro/misc/dlg/paragr.src
+../../sd/unxlngi6.pro/misc/dlg/dlgpage.src
+../../sd/unxlngi6.pro/misc/dlg/vectdlg.src
+../../sd/unxlngi6.pro/misc/dlg/dlgolbul.src
+../../sd/unxlngi6.pro/misc/dlg/copydlg.src
+../../sd/unxlngi6.pro/misc/dlg/dlg_char.src
+../../sd/unxlngi6.pro/misc/dlg/printdlg.src
+../../sd/unxlngi6.pro/misc/dlg/ins_page.src
+../../sd/unxlngi6.pro/misc/dlg/animobjs.src
+../../sd/unxlngi6.pro/misc/dlg/ins_paste.src
+../../sd/unxlngi6.pro/misc/dlg/tabtempl.src
+../../sd/unxlngi6.pro/misc/dlg/LayerDialog.src
+../../sd/unxlngi6.pro/misc/dlg/masterlayoutdlg.src
+../../sd/unxlngi6.pro/misc/dlg/navigatr.src
+../../sd/unxlngi6.pro/misc/dlg/brkdlg.src
+../../sd/unxlngi6.pro/misc/core/glob.src
+../../sd/unxlngi6.pro/misc/html/pubdlg.src
+../../sd/unxlngi6.pro/misc/notes/NotesChildWindow.src
+../../sd/unxlngi6.pro/misc/accessibility/accessibility.src
+../../sd/unxlngi6.pro/misc/animui/CustomAnimationCreateDialog.src
+../../sd/unxlngi6.pro/misc/animui/CustomAnimationDialog.src
+../../sd/unxlngi6.pro/misc/animui/CustomAnimation.src
+../../sd/unxlngi6.pro/misc/animui/CustomAnimationSchemesPane.src
+../../sd/unxlngi6.pro/misc/animui/SlideTransitionPane.src
+../../sd/unxlngi6.pro/misc/animui/AnimationSchemesPane.src
+../../sd/unxlngi6.pro/misc/animui/CustomAnimationPane.src
+../../sd/unxlngi6.pro/misc/slideshow/slideshow.src
diff --git a/toolkit/src2xml/src-sw.lst b/toolkit/src2xml/src-sw.lst
new file mode 100644
index 000000000000..8d43400462d8
--- /dev/null
+++ b/toolkit/src2xml/src-sw.lst
@@ -0,0 +1,121 @@
+../../sw/sdi/swslots.src
+../../sw/util/hidother.src
+../../sw/source/ui/app/mn.src
+../../sw/source/ui/app/app.src
+../../sw/source/ui/app/error.src
+../../sw/source/ui/web/web.src
+../../sw/source/ui/dbui/addresslistdialog.src
+../../sw/source/ui/dbui/customizeaddresslistdialog.src
+../../sw/source/ui/dbui/mailmergewizard.src
+../../sw/source/ui/dbui/mmlayoutpage.src
+../../sw/source/ui/dbui/dbui.src
+../../sw/source/ui/dbui/createaddresslistdialog.src
+../../sw/source/ui/dbui/mmoutputpage.src
+../../sw/source/ui/dbui/dbtablepreviewdialog.src
+../../sw/source/ui/dbui/mmmergepage.src
+../../sw/source/ui/dbui/dbinsdlg.src
+../../sw/source/ui/dbui/selectdbtabledialog.src
+../../sw/source/ui/dbui/mmoutputtypepage.src
+../../sw/source/ui/dbui/mailmergechildwindow.src
+../../sw/source/ui/dbui/mmpreparemergepage.src
+../../sw/source/ui/dbui/mmdocselectpage.src
+../../sw/source/ui/dbui/mmgreetingspage.src
+../../sw/source/ui/dbui/mmaddressblockpage.src
+../../sw/source/ui/misc/linenum.src
+../../sw/source/ui/misc/outline.src
+../../sw/source/ui/misc/glosbib.src
+../../sw/source/ui/misc/pgfnote.src
+../../sw/source/ui/misc/redlndlg.src
+../../sw/source/ui/misc/glossary.src
+../../sw/source/ui/misc/numberingtypelistbox.src
+../../sw/source/ui/misc/autocorr.src
+../../sw/source/ui/misc/insfnote.src
+../../sw/source/ui/misc/srtdlg.src
+../../sw/source/ui/misc/num.src
+../../sw/source/ui/misc/pggrid.src
+../../sw/source/ui/misc/bookmark.src
+../../sw/source/ui/misc/docfnote.src
+../../sw/source/ui/misc/insrule.src
+../../sw/source/ui/docvw/docvw.src
+../../sw/source/ui/docvw/access.src
+../../sw/source/ui/fldui/javaedit.src
+../../sw/source/ui/fldui/fldref.src
+../../sw/source/ui/fldui/fldtdlg.src
+../../sw/source/ui/fldui/fldfunc.src
+../../sw/source/ui/fldui/flddok.src
+../../sw/source/ui/fldui/flddinf.src
+../../sw/source/ui/fldui/inpdlg.src
+../../sw/source/ui/fldui/flddb.src
+../../sw/source/ui/fldui/changedb.src
+../../sw/source/ui/fldui/fldvar.src
+../../sw/source/ui/fldui/DropDownFieldDialog.src
+../../sw/source/ui/fldui/fldui.src
+../../sw/source/ui/fmtui/tmpdlg.src
+../../sw/source/ui/fmtui/fmtui.src
+../../sw/source/ui/index/cnttab.src
+../../sw/source/ui/index/multmrk.src
+../../sw/source/ui/index/idxmrk.src
+../../sw/source/ui/lingu/olmenu.src
+../../sw/source/ui/table/colwd.src
+../../sw/source/ui/table/rowht.src
+../../sw/source/ui/table/tautofmt.src
+../../sw/source/ui/table/splittbl.src
+../../sw/source/ui/table/chartins.src
+../../sw/source/ui/table/tabledlg.src
+../../sw/source/ui/table/split.src
+../../sw/source/ui/table/convert.src
+../../sw/source/ui/table/insrc.src
+../../sw/source/ui/table/table.src
+../../sw/source/ui/table/mergetbl.src
+../../sw/source/ui/table/instable.src
+../../sw/source/ui/utlui/utlui.src
+../../sw/source/ui/utlui/initui.src
+../../sw/source/ui/utlui/navipi.src
+../../sw/source/ui/utlui/attrdesc.src
+../../sw/source/ui/utlui/gloslst.src
+../../sw/source/ui/utlui/poolfmt.src
+../../sw/source/ui/utlui/unotools.src
+../../sw/source/ui/wrtsh/wrtsh.src
+../../sw/source/ui/chrdlg/chardlg.src
+../../sw/source/ui/chrdlg/swbreak.src
+../../sw/source/ui/chrdlg/ccoll.src
+../../sw/source/ui/chrdlg/paradlg.src
+../../sw/source/ui/chrdlg/drpcps.src
+../../sw/source/ui/chrdlg/chrdlg.src
+../../sw/source/ui/chrdlg/numpara.src
+../../sw/source/ui/config/mailconfigpage.src
+../../sw/source/ui/config/optcomp.src
+../../sw/source/ui/config/optdlg.src
+../../sw/source/ui/config/optload.src
+../../sw/source/ui/config/redlopt.src
+../../sw/source/ui/dialog/abstract.src
+../../sw/source/ui/dialog/docstdlg.src
+../../sw/source/ui/dialog/ascfldlg.src
+../../sw/source/ui/dialog/dialog.src
+../../sw/source/ui/dialog/regionsw.src
+../../sw/source/ui/dialog/wordcountdialog.src
+../../sw/source/ui/dochdl/dochdl.src
+../../sw/source/ui/dochdl/selglos.src
+../../sw/source/ui/envelp/mailmrge.src
+../../sw/source/ui/envelp/envelp.src
+../../sw/source/ui/envelp/labprt.src
+../../sw/source/ui/envelp/envlop.src
+../../sw/source/ui/envelp/label.src
+../../sw/source/ui/envelp/envfmt.src
+../../sw/source/ui/envelp/labfmt.src
+../../sw/source/ui/envelp/envprt.src
+../../sw/source/ui/smartmenu/stmenu.src
+../../sw/source/ui/frmdlg/frmpage.src
+../../sw/source/ui/frmdlg/cption.src
+../../sw/source/ui/frmdlg/column.src
+../../sw/source/ui/frmdlg/wrap.src
+../../sw/source/ui/frmdlg/frmui.src
+../../sw/source/ui/globdoc/globdoc.src
+../../sw/source/ui/ribbar/tbxanchr.src
+../../sw/source/ui/ribbar/workctrl.src
+../../sw/source/ui/ribbar/inputwin.src
+../../sw/source/ui/ribbar/tblctrl.src
+../../sw/source/ui/shells/shells.src
+../../sw/source/ui/uiview/pview.src
+../../sw/source/ui/uiview/view.src
+../../sw/source/core/undo/undo.src
diff --git a/toolkit/src2xml/src.lst b/toolkit/src2xml/src.lst
new file mode 100644
index 000000000000..4a5876b84a08
--- /dev/null
+++ b/toolkit/src2xml/src.lst
@@ -0,0 +1,680 @@
+../../sc/util/hidother.src
+../../sc/addin/datefunc/dfa.src
+../../sc/addin/rot13/rot13.src
+../../sc/source/ui/src/crnrdlg.src
+../../sc/source/ui/src/hdrcont.src
+../../sc/source/ui/src/solvrdlg.src
+../../sc/source/ui/src/miscdlgs.src
+../../sc/source/ui/src/tabopdlg.src
+../../sc/source/ui/src/popup.src
+../../sc/source/ui/src/autofmt.src
+../../sc/source/ui/src/toolbox.src
+../../sc/source/ui/src/opredlin.src
+../../sc/source/ui/src/namedlg.src
+../../sc/source/ui/src/sortdlg.src
+../../sc/source/ui/src/textdlgs.src
+../../sc/source/ui/src/optdlg.src
+../../sc/source/ui/src/scwarngs.src
+../../sc/source/ui/src/scfuncs.src
+../../sc/source/ui/src/filter.src
+../../sc/source/ui/src/simpref.src
+../../sc/source/ui/src/attrdlg.src
+../../sc/source/ui/src/sc.src
+../../sc/source/ui/src/globstr.src
+../../sc/source/ui/src/scstring.src
+../../sc/source/ui/src/dbnamdlg.src
+../../sc/source/ui/src/subtdlg.src
+../../sc/source/ui/src/pseudo.src
+../../sc/source/ui/src/condfrmt.src
+../../sc/source/ui/src/scerrors.src
+../../sc/source/ui/dbgui/outline.src
+../../sc/source/ui/dbgui/pvfundlg.src
+../../sc/source/ui/dbgui/scendlg.src
+../../sc/source/ui/dbgui/pivot.src
+../../sc/source/ui/dbgui/dpgroupdlg.src
+../../sc/source/ui/dbgui/dapitype.src
+../../sc/source/ui/dbgui/imoptdlg.src
+../../sc/source/ui/dbgui/consdlg.src
+../../sc/source/ui/dbgui/validate.src
+../../sc/source/ui/dbgui/asciiopt.src
+../../sc/source/ui/drawfunc/objdraw.src
+../../sc/source/ui/drawfunc/drformsh.src
+../../sc/source/ui/styleui/scstyles.src
+../../sc/source/ui/styleui/styledlg.src
+../../sc/source/ui/formdlg/parawin.src
+../../sc/source/ui/formdlg/dwfunctr.src
+../../sc/source/ui/formdlg/formdlgs.src
+../../sc/source/ui/navipi/navipi.src
+../../sc/source/ui/miscdlgs/acredlin.src
+../../sc/source/ui/miscdlgs/highred.src
+../../sc/source/ui/miscdlgs/linkarea.src
+../../sc/source/ui/miscdlgs/instbdlg.src
+../../sc/source/ui/pagedlg/pagedlg.src
+../../sc/source/ui/pagedlg/tphf.src
+../../sc/source/ui/pagedlg/hfedtdlg.src
+../../sc/source/ui/docshell/tpstat.src
+../../sc/source/core/src/compiler.src
+../../sd/util/hidother.src
+../../sd/source/ui/app/tbxids_tmpl.src
+../../sd/source/ui/app/popup2_tmpl.src
+../../sd/source/ui/app/popup.src
+../../sd/source/ui/app/toolbox.src
+../../sd/source/ui/app/menuids2_tmpl.src
+../../sd/source/ui/app/sdstring.src
+../../sd/source/ui/app/menu_tmpl.src
+../../sd/source/ui/app/strings.src
+../../sd/source/ui/app/menuids_tmpl.src
+../../sd/source/ui/app/accel_tmpl.src
+../../sd/source/ui/app/tbx_ww.src
+../../sd/source/ui/app/accelids_tmpl.src
+../../sd/source/ui/app/menuportal_tmpl.src
+../../sd/source/ui/app/menuids3_tmpl.src
+../../sd/source/ui/app/app.src
+../../sd/source/ui/app/res_bmp.src
+../../sd/source/ui/app/pseudo.src
+../../sd/source/ui/app/menuids4_tmpl.src
+../../sd/source/ui/app/toolbox2_tmpl.src
+../../sd/source/ui/dlg/headerfooterdlg.src
+../../sd/source/ui/dlg/dlgfield.src
+../../sd/source/ui/dlg/sdobjpal.src
+../../sd/source/ui/dlg/morphdlg.src
+../../sd/source/ui/dlg/PaneDockingWindow.src
+../../sd/source/ui/dlg/dlgsnap.src
+../../sd/source/ui/dlg/tpoption.src
+../../sd/source/ui/dlg/present.src
+../../sd/source/ui/dlg/sdpreslt.src
+../../sd/source/ui/dlg/dlgass.src
+../../sd/source/ui/dlg/tpaction.src
+../../sd/source/ui/dlg/prntopts.src
+../../sd/source/ui/dlg/prltempl.src
+../../sd/source/ui/dlg/custsdlg.src
+../../sd/source/ui/dlg/inspagob.src
+../../sd/source/ui/dlg/paragr.src
+../../sd/source/ui/dlg/dlgpage.src
+../../sd/source/ui/dlg/vectdlg.src
+../../sd/source/ui/dlg/dlgolbul.src
+../../sd/source/ui/dlg/copydlg.src
+../../sd/source/ui/dlg/dlg_char.src
+../../sd/source/ui/dlg/printdlg.src
+../../sd/source/ui/dlg/animobjs.src
+../../sd/source/ui/dlg/ins_paste.src
+../../sd/source/ui/dlg/tabtempl.src
+../../sd/source/ui/dlg/LayerDialog.src
+../../sd/source/ui/dlg/masterlayoutdlg.src
+../../sd/source/ui/dlg/navigatr.src
+../../sd/source/ui/dlg/brkdlg.src
+../../sd/source/ui/slidesorter/shell/SlideSorterChildWindow.src
+../../sd/source/ui/notes/NotesChildWindow.src
+../../sd/source/ui/toolpanel/ToolPanelChildWindow.src
+../../sd/source/ui/animations/CustomAnimationCreateDialog.src
+../../sd/source/ui/animations/CustomAnimationDialog.src
+../../sd/source/ui/animations/CustomAnimation.src
+../../sd/source/ui/animations/CustomAnimationSchemesPane.src
+../../sd/source/ui/animations/SlideTransitionPane.src
+../../sd/source/ui/animations/AnimationSchemesPane.src
+../../sd/source/ui/animations/CustomAnimationPane.src
+../../sd/source/ui/accessibility/accessibility.src
+../../sd/source/ui/slideshow/slideshow.src
+../../sd/source/core/glob.src
+../../sd/source/filter/html/pubdlg.src
+../../sw/sdi/swslots.src
+../../sw/util/hidother.src
+../../sw/source/ui/app/mn.src
+../../sw/source/ui/app/app.src
+../../sw/source/ui/app/error.src
+../../sw/source/ui/web/web.src
+../../sw/source/ui/dbui/addresslistdialog.src
+../../sw/source/ui/dbui/customizeaddresslistdialog.src
+../../sw/source/ui/dbui/mailmergewizard.src
+../../sw/source/ui/dbui/mmlayoutpage.src
+../../sw/source/ui/dbui/dbui.src
+../../sw/source/ui/dbui/createaddresslistdialog.src
+../../sw/source/ui/dbui/mmoutputpage.src
+../../sw/source/ui/dbui/dbtablepreviewdialog.src
+../../sw/source/ui/dbui/mmmergepage.src
+../../sw/source/ui/dbui/dbinsdlg.src
+../../sw/source/ui/dbui/selectdbtabledialog.src
+../../sw/source/ui/dbui/mmoutputtypepage.src
+../../sw/source/ui/dbui/mailmergechildwindow.src
+../../sw/source/ui/dbui/mmpreparemergepage.src
+../../sw/source/ui/dbui/mmdocselectpage.src
+../../sw/source/ui/dbui/mmgreetingspage.src
+../../sw/source/ui/dbui/mmaddressblockpage.src
+../../sw/source/ui/misc/linenum.src
+../../sw/source/ui/misc/outline.src
+../../sw/source/ui/misc/glosbib.src
+../../sw/source/ui/misc/pgfnote.src
+../../sw/source/ui/misc/redlndlg.src
+../../sw/source/ui/misc/glossary.src
+../../sw/source/ui/misc/numberingtypelistbox.src
+../../sw/source/ui/misc/autocorr.src
+../../sw/source/ui/misc/insfnote.src
+../../sw/source/ui/misc/srtdlg.src
+../../sw/source/ui/misc/num.src
+../../sw/source/ui/misc/pggrid.src
+../../sw/source/ui/misc/bookmark.src
+../../sw/source/ui/misc/docfnote.src
+../../sw/source/ui/misc/insrule.src
+../../sw/source/ui/docvw/docvw.src
+../../sw/source/ui/docvw/access.src
+../../sw/source/ui/fldui/javaedit.src
+../../sw/source/ui/fldui/fldref.src
+../../sw/source/ui/fldui/fldtdlg.src
+../../sw/source/ui/fldui/fldfunc.src
+../../sw/source/ui/fldui/flddok.src
+../../sw/source/ui/fldui/flddinf.src
+../../sw/source/ui/fldui/inpdlg.src
+../../sw/source/ui/fldui/flddb.src
+../../sw/source/ui/fldui/changedb.src
+../../sw/source/ui/fldui/fldvar.src
+../../sw/source/ui/fldui/DropDownFieldDialog.src
+../../sw/source/ui/fldui/fldui.src
+../../sw/source/ui/fmtui/tmpdlg.src
+../../sw/source/ui/fmtui/fmtui.src
+../../sw/source/ui/index/cnttab.src
+../../sw/source/ui/index/multmrk.src
+../../sw/source/ui/index/idxmrk.src
+../../sw/source/ui/lingu/olmenu.src
+../../sw/source/ui/table/colwd.src
+../../sw/source/ui/table/rowht.src
+../../sw/source/ui/table/tautofmt.src
+../../sw/source/ui/table/splittbl.src
+../../sw/source/ui/table/chartins.src
+../../sw/source/ui/table/tabledlg.src
+../../sw/source/ui/table/split.src
+../../sw/source/ui/table/convert.src
+../../sw/source/ui/table/insrc.src
+../../sw/source/ui/table/table.src
+../../sw/source/ui/table/mergetbl.src
+../../sw/source/ui/table/instable.src
+../../sw/source/ui/utlui/utlui.src
+../../sw/source/ui/utlui/initui.src
+../../sw/source/ui/utlui/navipi.src
+../../sw/source/ui/utlui/attrdesc.src
+../../sw/source/ui/utlui/gloslst.src
+../../sw/source/ui/utlui/poolfmt.src
+../../sw/source/ui/utlui/unotools.src
+../../sw/source/ui/wrtsh/wrtsh.src
+../../sw/source/ui/chrdlg/chardlg.src
+../../sw/source/ui/chrdlg/swbreak.src
+../../sw/source/ui/chrdlg/ccoll.src
+../../sw/source/ui/chrdlg/paradlg.src
+../../sw/source/ui/chrdlg/drpcps.src
+../../sw/source/ui/chrdlg/chrdlg.src
+../../sw/source/ui/chrdlg/numpara.src
+../../sw/source/ui/config/mailconfigpage.src
+../../sw/source/ui/config/optcomp.src
+../../sw/source/ui/config/optdlg.src
+../../sw/source/ui/config/optload.src
+../../sw/source/ui/config/redlopt.src
+../../sw/source/ui/dialog/abstract.src
+../../sw/source/ui/dialog/docstdlg.src
+../../sw/source/ui/dialog/ascfldlg.src
+../../sw/source/ui/dialog/dialog.src
+../../sw/source/ui/dialog/regionsw.src
+../../sw/source/ui/dialog/wordcountdialog.src
+../../sw/source/ui/dochdl/dochdl.src
+../../sw/source/ui/dochdl/selglos.src
+../../sw/source/ui/envelp/mailmrge.src
+../../sw/source/ui/envelp/envelp.src
+../../sw/source/ui/envelp/labprt.src
+../../sw/source/ui/envelp/envlop.src
+../../sw/source/ui/envelp/label.src
+../../sw/source/ui/envelp/envfmt.src
+../../sw/source/ui/envelp/labfmt.src
+../../sw/source/ui/envelp/envprt.src
+../../sw/source/ui/smartmenu/stmenu.src
+../../sw/source/ui/frmdlg/frmpage.src
+../../sw/source/ui/frmdlg/cption.src
+../../sw/source/ui/frmdlg/column.src
+../../sw/source/ui/frmdlg/wrap.src
+../../sw/source/ui/frmdlg/frmui.src
+../../sw/source/ui/globdoc/globdoc.src
+../../sw/source/ui/ribbar/tbxanchr.src
+../../sw/source/ui/ribbar/workctrl.src
+../../sw/source/ui/ribbar/inputwin.src
+../../sw/source/ui/ribbar/tblctrl.src
+../../sw/source/ui/shells/shells.src
+../../sw/source/ui/uiview/pview.src
+../../sw/source/ui/uiview/view.src
+../../sw/source/core/undo/undo.src
+../../sch/util/hidother.src
+../../sch/source/ui/app/res_hc_bmp.src
+../../sch/source/ui/app/menu_tmpl.src
+../../sch/source/ui/app/strings.src
+../../sch/source/ui/app/menuids_tmpl.src
+../../sch/source/ui/app/app.src
+../../sch/source/ui/app/res_bmp.src
+../../sch/source/ui/dlg/axisgrid.src
+../../sch/source/ui/dlg/attrib2.src
+../../sch/source/ui/dlg/attrib3.src
+../../sch/source/ui/dlg/attrib4.src
+../../sch/source/ui/dlg/tpappopt.src
+../../sch/source/ui/dlg/tplabel.src
+../../sch/source/ui/dlg/attrib.src
+../../sch/source/ui/dlg/title.src
+../../sch/source/ui/dlg/lightdlg.src
+../../sch/source/ui/dlg/viewdlg.src
+../../sch/source/ui/dlg/dgrdata.src
+../../sch/source/ui/dlg/dlggraut.src
+../../sch/source/ui/dlg/tpscaley.src
+../../sch/source/ui/dlg/datdescr.src
+../../sch/source/ui/dlg/legend.src
+../../sch/source/ui/dlg/diagrtyp.src
+../../sch/source/ui/dlg/datstat.src
+../../sch/source/core/glob.src
+../../so3/src/svuidlg.src
+../../so3/src/formats.src
+../../so3/src/nocode.src
+../../so3/util/hidother.src
+../../so3/workben/ddetest/ddetest.src
+../../so3/workben/paintdlg.src
+../../so3/workben/svser.src
+../../so3/workben/paint.src
+../../svx/util/hidother.src
+../../svx/source/src/app.src
+../../svx/source/form/fmstring.src
+../../svx/source/form/filtnav.src
+../../svx/source/form/fmexpl.src
+../../svx/source/form/fmsearch.src
+../../svx/source/form/tbxform.src
+../../svx/source/form/formshell.src
+../../svx/source/form/datanavi.src
+../../svx/source/intro/ooo.src
+../../svx/source/intro/iso.src
+../../svx/source/items/svxitems.src
+../../svx/source/items/svxerr.src
+../../svx/source/editeng/editeng.src
+../../svx/source/accessibility/accessibility.src
+../../svx/source/mnuctrls/mnuctrls.src
+../../svx/source/engine3d/float3d.src
+../../svx/source/engine3d/string3d.src
+../../svx/source/dialog/textanim.src
+../../svx/source/dialog/hyperdlg.src
+../../svx/source/dialog/textattr.src
+../../svx/source/dialog/tabarea.src
+../../svx/source/dialog/rubydialog.src
+../../svx/source/dialog/frmdirlbox.src
+../../svx/source/dialog/chardlg.src
+../../svx/source/dialog/numfmt.src
+../../svx/source/dialog/doclinkdialog.src
+../../svx/source/dialog/treeopt.src
+../../svx/source/dialog/page.src
+../../svx/source/dialog/opthtml.src
+../../svx/source/dialog/frmsel.src
+../../svx/source/dialog/ruler.src
+../../svx/source/dialog/optgdlg.src
+../../svx/source/dialog/fontwork.src
+../../svx/source/dialog/backgrnd.src
+../../svx/source/dialog/SpellDialog.src
+../../svx/source/dialog/labdlg.src
+../../svx/source/dialog/charmap.src
+../../svx/source/dialog/zoom.src
+../../svx/source/dialog/border.src
+../../svx/source/dialog/svuidlg.src
+../../svx/source/dialog/impgrf.src
+../../svx/source/dialog/dlgname.src
+../../svx/source/dialog/test.src
+../../svx/source/dialog/selector.src
+../../svx/source/dialog/optupdt.src
+../../svx/source/dialog/numpages.src
+../../svx/source/dialog/thesdlg.src
+../../svx/source/dialog/tabline.src
+../../svx/source/dialog/srchdlg.src
+../../svx/source/dialog/contdlg.src
+../../svx/source/dialog/paragrph.src
+../../svx/source/dialog/commonlingui.src
+../../svx/source/dialog/sdstring.src
+../../svx/source/dialog/optmemory.src
+../../svx/source/dialog/grfflt.src
+../../svx/source/dialog/langbox.src
+../../svx/source/dialog/bbdlg.src
+../../svx/source/dialog/hangulhanjadlg.src
+../../svx/source/dialog/txenctab.src
+../../svx/source/dialog/connpooloptions.src
+../../svx/source/dialog/dbregister.src
+../../svx/source/dialog/macropg.src
+../../svx/source/dialog/fontsubs.src
+../../svx/source/dialog/align.src
+../../svx/source/dialog/hyprlink.src
+../../svx/source/dialog/imapdlg.src
+../../svx/source/dialog/dlgctrl.src
+../../svx/source/dialog/tabstpge.src
+../../svx/source/dialog/readonlyimage.src
+../../svx/source/dialog/docrecovery.src
+../../svx/source/dialog/hlmarkwn.src
+../../svx/source/dialog/internationaloptions.src
+../../svx/source/dialog/optjava.src
+../../svx/source/dialog/language.src
+../../svx/source/dialog/hdft.src
+../../svx/source/dialog/lingu.src
+../../svx/source/dialog/grfpage.src
+../../svx/source/dialog/iconcdlg.src
+../../svx/source/dialog/swframeposstrings.src
+../../svx/source/dialog/connect.src
+../../svx/source/dialog/bmpmask.src
+../../svx/source/dialog/postdlg.src
+../../svx/source/dialog/checklbx.src
+../../svx/source/dialog/autocdlg.src
+../../svx/source/dialog/measure.src
+../../svx/source/dialog/cfg.src
+../../svx/source/dialog/scriptdlg.src
+../../svx/source/dialog/langtab.src
+../../svx/source/dialog/srchxtra.src
+../../svx/source/dialog/ctredlin.src
+../../svx/source/dialog/passwd.src
+../../svx/source/dialog/transfrm.src
+../../svx/source/dialog/optfltr.src
+../../svx/source/dialog/prtqry.src
+../../svx/source/dialog/eventdlg.src
+../../svx/source/dialog/hyphen.src
+../../svx/source/dialog/swpossizetabpage.src
+../../svx/source/dialog/dstribut.src
+../../svx/source/svxlink/linkmgr.src
+../../svx/source/fmcomp/gridctrl.src
+../../svx/source/fmcomp/showcols.src
+../../svx/source/outliner/outliner.src
+../../svx/source/unodraw/unodraw.src
+../../svx/source/svdraw/svdstr.src
+../../svx/source/stbctrls/stbctrls.src
+../../svx/source/unodialogs/textconversiondlgs/chinese_translationdialog.src
+../../svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.src
+../../svx/source/toolbars/fontworkbar.src
+../../svx/source/toolbars/extrusionbar.src
+../../svx/source/options/optlingu.src
+../../svx/source/options/optasian.src
+../../svx/source/options/optdict.src
+../../svx/source/options/optinet2.src
+../../svx/source/options/optspell.src
+../../svx/source/options/optsave.src
+../../svx/source/options/optgrid.src
+../../svx/source/options/multipat.src
+../../svx/source/options/optcolor.src
+../../svx/source/options/optpath.src
+../../svx/source/options/optctl.src
+../../svx/source/options/optaccessibility.src
+../../svx/source/options/optjsearch.src
+../../svx/source/options/optgenrl.src
+../../svx/source/gallery2/gallery.src
+../../svx/source/gallery2/galtheme.src
+../../svx/source/tbxctrls/extrusioncontrols.src
+../../svx/source/tbxctrls/tbcontrl.src
+../../svx/source/tbxctrls/fontworkgallery.src
+../../svx/source/tbxctrls/lboxctrl.src
+../../svx/source/tbxctrls/linectrl.src
+../../svx/source/tbxctrls/tbxdraw.src
+../../svx/source/tbxctrls/grafctrl.src
+../../svx/source/tbxctrls/colrctrl.src
+../../vcl/source/src/menu.src
+../../vcl/source/src/stdtext.src
+../../vcl/source/src/images.src
+../../vcl/source/src/helptext.src
+../../vcl/source/src/btntext.src
+../../vcl/source/src/units.src
+../../uui/source/passworderrs.src
+../../uui/source/logindlg.src
+../../uui/source/passworddlg.src
+../../uui/source/ids.src
+../../uui/source/masterpassworddlg.src
+../../uui/source/passcrtdlg.src
+../../uui/source/cookiedg.src
+../../uui/source/fltdlg.src
+../../uui/source/masterpasscrtdlg.src
+../../dbaccess/util/hidother.src
+../../dbaccess/source/ui/app/app.src
+../../dbaccess/source/ui/dlg/indexdialog.src
+../../dbaccess/source/ui/dlg/RelationDlg.src
+../../dbaccess/source/ui/dlg/queryfilter.src
+../../dbaccess/source/ui/dlg/AdvancedPageDlg.src
+../../dbaccess/source/ui/dlg/queryorder.src
+../../dbaccess/source/ui/dlg/dbadmin.src
+../../dbaccess/source/ui/dlg/dsselect.src
+../../dbaccess/source/ui/dlg/paramdialog.src
+../../dbaccess/source/ui/dlg/CollectionView.src
+../../dbaccess/source/ui/dlg/sqlmessage.src
+../../dbaccess/source/ui/dlg/UserAdmin.src
+../../dbaccess/source/ui/dlg/ConnectionPage.src
+../../dbaccess/source/ui/dlg/dlgattr.src
+../../dbaccess/source/ui/dlg/AutoControls.src
+../../dbaccess/source/ui/dlg/dlgsave.src
+../../dbaccess/source/ui/dlg/UserAdminDlg.src
+../../dbaccess/source/ui/dlg/directsql.src
+../../dbaccess/source/ui/dlg/dlgsize.src
+../../dbaccess/source/ui/dlg/AdabasStat.src
+../../dbaccess/source/ui/dlg/dbfindex.src
+../../dbaccess/source/ui/dlg/dbadminsetup.src
+../../dbaccess/source/ui/dlg/AdabasStatDlg.src
+../../dbaccess/source/ui/dlg/adtabdlg.src
+../../dbaccess/source/ui/dlg/dbadmin2.src
+../../dbaccess/source/ui/uno/dbinteraction.src
+../../dbaccess/source/ui/misc/WizardPages.src
+../../dbaccess/source/ui/misc/dbumiscres.src
+../../dbaccess/source/ui/control/undosqledit.src
+../../dbaccess/source/ui/control/TableGrantCtrl.src
+../../dbaccess/source/ui/control/tabletree.src
+../../dbaccess/source/ui/imagelists/dbimagelists.src
+../../dbaccess/source/ui/relationdesign/relation.src
+../../dbaccess/source/ui/tabledesign/table.src
+../../dbaccess/source/ui/querydesign/querydlg.src
+../../dbaccess/source/ui/querydesign/query.src
+../../dbaccess/source/ui/browser/bcommon.src
+../../dbaccess/source/ui/browser/sbagrid.src
+../../dbaccess/source/ui/browser/sbabrw.src
+../../dbaccess/source/core/resource/strings.src
+../../dbaccess/source/sdbtools/resource/sdbt_strings.src
+../../sfx2/util/hidother.src
+../../sfx2/source/doc/sfxbasemodel.src
+../../sfx2/source/doc/doctempl.src
+../../sfx2/source/doc/doc.src
+../../sfx2/source/doc/secmacrowarnings.src
+../../sfx2/source/doc/new.src
+../../sfx2/source/doc/docvor.src
+../../sfx2/source/doc/graphhelp.src
+../../sfx2/source/doc/doctdlg.src
+../../sfx2/source/appl/dde.src
+../../sfx2/source/appl/newhelp.src
+../../sfx2/source/appl/sfx.src
+../../sfx2/source/appl/app.src
+../../sfx2/source/menu/menu.src
+../../sfx2/source/view/view.src
+../../sfx2/source/bastyp/fltfnc.src
+../../sfx2/source/bastyp/bastyp.src
+../../sfx2/source/config/config.src
+../../sfx2/source/dialog/recfloat.src
+../../sfx2/source/dialog/templdlg.src
+../../sfx2/source/dialog/newstyle.src
+../../sfx2/source/dialog/dinfdlg.src
+../../sfx2/source/dialog/alienwarn.src
+../../sfx2/source/dialog/dinfedt.src
+../../sfx2/source/dialog/printopt.src
+../../sfx2/source/dialog/srchdlg.src
+../../sfx2/source/dialog/mailwindow.src
+../../sfx2/source/dialog/dialog.src
+../../sfx2/source/dialog/macropg.src
+../../sfx2/source/dialog/versdlg.src
+../../sfx2/source/dialog/mgetempl.src
+../../sfx2/source/dialog/filedlghelper.src
+../../sfx2/source/dialog/cfg.src
+../../sfx2/source/dialog/passwd.src
+../../framework/util/hidother.src
+../../framework/source/classes/resource.src
+../../desktop/util/hidother.src
+../../desktop/source/app/desktop.src
+../../desktop/source/deployment/gui/dp_gui_dependencydialog.src
+../../desktop/source/deployment/gui/dp_gui_backend.src
+../../desktop/source/deployment/gui/dp_gui_versionboxes.src
+../../desktop/source/deployment/gui/dp_gui_updatedialog.src
+../../desktop/source/deployment/gui/dp_gui_updateinstalldialog.src
+../../desktop/source/deployment/gui/dp_gui_dialog.src
+../../desktop/source/deployment/misc/dp_misc.src
+../../desktop/source/deployment/manager/dp_manager.src
+../../desktop/source/deployment/unopkg/unopkg.src
+../../desktop/source/deployment/registry/sfwk/dp_sfwk.src
+../../desktop/source/deployment/registry/component/dp_component.src
+../../desktop/source/deployment/registry/dp_registry.src
+../../desktop/source/deployment/registry/configuration/dp_configuration.src
+../../desktop/source/deployment/registry/script/dp_script.src
+../../desktop/source/deployment/registry/package/dp_package.src
+../../desktop/source/migration/migration.src
+../../desktop/source/migration/wizard.src
+../../basic/source/app/basic.src
+../../basic/source/app/ttmsg.src
+../../basic/source/app/svtmsg.src
+../../basic/source/app/testtool.src
+../../basic/source/app/basmsg.src
+../../basic/source/sbx/format.src
+../../basic/source/classes/sb.src
+../../basic/workben/basmgr.src
+../../forms/source/resource/xforms.src
+../../forms/source/resource/strings.src
+../../scaddins/source/datefunc/datefunc.src
+../../scaddins/source/analysis/analysis_deffuncnames.src
+../../scaddins/source/analysis/analysis.src
+../../scaddins/source/analysis/analysis_funcnames.src
+../../basctl/util/hidother.src
+../../basctl/source/dlged/dlgresid.src
+../../basctl/source/dlged/managelang.src
+../../basctl/source/basicide/tbxctl.src
+../../basctl/source/basicide/moptions.src
+../../basctl/source/basicide/macrodlg.src
+../../basctl/source/basicide/objdlg.src
+../../basctl/source/basicide/basidesh.src
+../../basctl/source/basicide/moduldlg.src
+../../basctl/source/basicide/brkdlg.src
+../../chart2/source/controller/menu/ContextMenu.src
+../../chart2/source/controller/menu/MainMenu.src
+../../chart2/source/controller/dialogs/tp_DataLabel.src
+../../chart2/source/controller/dialogs/Strings_ChartTypes.src
+../../chart2/source/controller/dialogs/dlg_InsertTitle.src
+../../chart2/source/controller/dialogs/Strings.src
+../../chart2/source/controller/dialogs/tp_SeriesStatistic.src
+../../chart2/source/controller/dialogs/dlg_InsertDataLabel.src
+../../chart2/source/controller/dialogs/Strings_Statistic.src
+../../chart2/source/controller/dialogs/dlg_InsertLegend.src
+../../chart2/source/controller/dialogs/dlg_RotateDiagram.src
+../../chart2/source/controller/dialogs/tp_PointGeometry.src
+../../chart2/source/controller/dialogs/dlg_ObjectProperties.src
+../../chart2/source/controller/dialogs/Bitmaps_HC.src
+../../chart2/source/controller/dialogs/tp_TitleRotation.src
+../../chart2/source/controller/dialogs/dlg_ChartType.src
+../../chart2/source/controller/dialogs/Bitmaps.src
+../../chart2/source/controller/dialogs/dlg_InsertStatistic.src
+../../chart2/source/controller/dialogs/Strings_Scale.src
+../../chart2/source/controller/dialogs/tp_LegendPosition.src
+../../chart2/source/controller/dialogs/dlg_InsertAxis_Grid.src
+../../chart2/source/controller/dialogs/tp_AxisLabel.src
+../../chart2/source/controller/dialogs/tp_SeriesToAxis.src
+../../chart2/source/controller/dialogs/tp_Scale.src
+../../scsolver/source/ui/scsolver.src
+../../automation/source/miniapp/servres.src
+../../svtools/util/hidother.src
+../../svtools/bmpmaker/bmp.src
+../../svtools/source/uno/unoifac2.src
+../../svtools/source/java/javaerror.src
+../../svtools/source/java/patchjavaerror.src
+../../svtools/source/misc/imagemgr.src
+../../svtools/source/misc/iniman.src
+../../svtools/source/misc/config.src
+../../svtools/source/misc/errtxt.src
+../../svtools/source/misc/ehdl.src
+../../svtools/source/misc/helpagent.src
+../../svtools/source/control/ctrlbox.src
+../../svtools/source/control/ctrltool.src
+../../svtools/source/control/calendar.src
+../../svtools/source/control/filectrl.src
+../../svtools/source/dialogs/colrdlg.src
+../../svtools/source/dialogs/addresstemplate.src
+../../svtools/source/dialogs/prnsetup.src
+../../svtools/source/dialogs/formats.src
+../../svtools/source/dialogs/filedlg2.src
+../../svtools/source/dialogs/so3res.src
+../../svtools/source/dialogs/printdlg.src
+../../svtools/source/dialogs/logindlg.src
+../../svtools/source/dialogs/wizardmachine.src
+../../svtools/source/misc1/mediatyp.src
+../../svtools/source/brwbox/editbrowsebox.src
+../../svtools/source/contnr/fileview.src
+../../svtools/source/contnr/svcontnr.src
+../../svtools/source/contnr/templwin.src
+../../svtools/source/items1/cstitem.src
+../../svtools/source/filter.vcl/filter/dlgepng.src
+../../svtools/source/filter.vcl/filter/dlgexpor.src
+../../svtools/source/filter.vcl/filter/dlgejpg.src
+../../svtools/source/filter.vcl/filter/strings.src
+../../svtools/source/Accessibility/accessiblelistboxentry.src
+../../svtools/source/productregistration/registrationdlg.src
+../../svtools/source/plugapp/commtest.src
+../../svtools/source/plugapp/testtool.src
+../../fpicker/source/office/OfficeFilePicker.src
+../../fpicker/source/office/iodlg.src
+../../filter/source/pdf/impdialog.src
+../../filter/source/pdf/pdf.src
+../../filter/source/t602/t602filter.src
+../../filter/source/flash/impswfdialog.src
+../../filter/source/xsltdialog/xmlfiltertabdialog.src
+../../filter/source/xsltdialog/xmlfiltersettingsdialog.src
+../../filter/source/xsltdialog/xmlfileview.src
+../../filter/source/xsltdialog/xmlfilterdialogstrings.src
+../../filter/source/xsltdialog/hidother.src
+../../filter/source/xsltdialog/xmlfiltertabpagexslt.src
+../../filter/source/xsltdialog/xmlfiltertestdialog.src
+../../filter/source/xsltdialog/xmlfiltertabpagebasic.src
+../../toolkit/source/awt/accessiblestrings.src
+../../toolkit/source/awt/xthrobber.src
+../../xmlsecurity/source/dialogs/warnings.src
+../../xmlsecurity/source/dialogs/macrosecurity.src
+../../xmlsecurity/source/dialogs/certificatechooser.src
+../../xmlsecurity/source/dialogs/digitalsignaturesdialog.src
+../../xmlsecurity/source/dialogs/certificateviewer.src
+../../xmlsecurity/source/component/warnbox.src
+../../padmin/source/rtsetup.src
+../../padmin/source/padialog.src
+../../ucbhelper/workben/ucbexplorer/ucbexplorer.src
+../../starmath/util/hidother.src
+../../starmath/source/commands.src
+../../starmath/source/symbol.src
+../../starmath/source/menu_tmpl.src
+../../starmath/source/smres.src
+../../extensions/qa/complex/extensions/orl_de.src
+../../extensions/qa/complex/extensions/orl_en-US.src
+../../extensions/util/hidother.src
+../../extensions/source/bibliography/menu.src
+../../extensions/source/bibliography/toolbar.src
+../../extensions/source/bibliography/datman.src
+../../extensions/source/bibliography/sections.src
+../../extensions/source/bibliography/hidother.src
+../../extensions/source/bibliography/bib.src
+../../extensions/source/scanner/grid.src
+../../extensions/source/scanner/sanedlg.src
+../../extensions/source/dbpilots/dbpilots.src
+../../extensions/source/dbpilots/gridpages.src
+../../extensions/source/dbpilots/listcombopages.src
+../../extensions/source/dbpilots/groupboxpages.src
+../../extensions/source/dbpilots/commonpagesdbp.src
+../../extensions/source/abpilot/abspilot.src
+../../extensions/source/update/ui/updatecheckui.src
+../../extensions/source/propctrlr/taborder.src
+../../extensions/source/propctrlr/listselectiondlg.src
+../../extensions/source/propctrlr/formlinkdialog.src
+../../extensions/source/propctrlr/fontdialog.src
+../../extensions/source/propctrlr/selectlabeldialog.src
+../../extensions/source/propctrlr/pcrmiscres.src
+../../extensions/source/propctrlr/formres.src
+../../extensions/source/propctrlr/newdatatype.src
+../../extensions/source/propctrlr/propres.src
+../../extensions/source/preload/preload.src
+../../extensions/workben/testresource.src
+../../avmedia/util/hidother.src
+../../avmedia/source/framework/mediacontrol.src
+../../avmedia/source/viewer/mediawindow.src
+../../connectivity/source/resource/conn_shared_res.src
+../../connectivity/source/drivers/hsqldb/hsqlui.src
+../../scripting/source/runtimemgr/ScriptExecDialog.src
+../../wizards/util/hidother.src
+../../wizards/source/euro/euro.src
+../../wizards/source/imagelists/imagelists.src
+../../wizards/source/webwizard/webwizar.src
+../../wizards/source/template/template.src
+../../wizards/source/schedule/schedule.src
+../../wizards/source/importwizard/importwi.src
+../../wizards/source/formwizard/dbwizres.src
diff --git a/toolkit/src2xml/sw.sh b/toolkit/src2xml/sw.sh
new file mode 100644
index 000000000000..22f16d4b6c57
--- /dev/null
+++ b/toolkit/src2xml/sw.sh
@@ -0,0 +1,3 @@
+#! /bin/bash
+
+source/src2xml.py --include-path=$(tr '\n' ':' < include-sw.lst) --dry-run $(cat src-sw.lst) "$@"