mirror of
https://github.com/johndoe6345789/SDL3CPlusPlus.git
synced 2026-04-25 14:15:02 +00:00
stuff
This commit is contained in:
90
MaterialX/python/Scripts/mxformat.py
Normal file
90
MaterialX/python/Scripts/mxformat.py
Normal file
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env python
|
||||
'''
|
||||
Reformat a folder of MaterialX documents in place, optionally upgrading
|
||||
the documents to the latest version of the standard.
|
||||
'''
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
import MaterialX as mx
|
||||
|
||||
def is_well_formed(xml_string):
|
||||
error = ''
|
||||
try:
|
||||
ET.fromstring(xml_string)
|
||||
except ET.ParseError as e:
|
||||
error = str(e)
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Reformat a folder of MaterialX documents in place.")
|
||||
parser.add_argument('-y', '--yes', dest='yes', action="store_true", help="Proceed without asking for confirmation from the user.")
|
||||
parser.add_argument('-u', '--upgrade', dest='upgrade', action="store_true", help='Upgrade documents to the latest version of the standard.')
|
||||
parser.add_argument('-v', '--validate', dest='validate', action="store_true", help='Perform MaterialX validation on documents after reformatting.')
|
||||
parser.add_argument('-x', '--xml_syntax', dest='xml_syntax', action="store_true", help='Check XML syntax after reformatting.')
|
||||
parser.add_argument(dest="inputFolder", help="An input folder to scan for MaterialX documents.")
|
||||
opts = parser.parse_args()
|
||||
|
||||
validDocs = dict()
|
||||
for root, dirs, files in os.walk(opts.inputFolder):
|
||||
for filename in files:
|
||||
fullpath = os.path.join(root, filename)
|
||||
if fullpath.endswith('.mtlx'):
|
||||
doc = mx.createDocument()
|
||||
try:
|
||||
readOptions = mx.XmlReadOptions()
|
||||
readOptions.readComments = True
|
||||
readOptions.readNewlines = True
|
||||
readOptions.upgradeVersion = opts.upgrade
|
||||
try:
|
||||
mx.readFromXmlFile(doc, fullpath, mx.FileSearchPath(), readOptions)
|
||||
except Exception as err:
|
||||
print('Skipping "' + filename + '" due to exception: ' + str(err))
|
||||
continue
|
||||
validDocs[fullpath] = doc
|
||||
except mx.Exception:
|
||||
pass
|
||||
|
||||
if not validDocs:
|
||||
print('No MaterialX documents were found in "%s"' % (opts.inputFolder))
|
||||
return
|
||||
|
||||
print('Found %s MaterialX files in "%s"' % (len(validDocs), opts.inputFolder))
|
||||
|
||||
mxVersion = mx.getVersionIntegers()
|
||||
|
||||
if not opts.yes:
|
||||
if opts.upgrade:
|
||||
question = 'Would you like to upgrade all %i documents to MaterialX v%i.%i in place (y/n)?' % (len(validDocs), mxVersion[0], mxVersion[1])
|
||||
else:
|
||||
question = 'Would you like to reformat all %i documents in place (y/n)?' % len(validDocs)
|
||||
answer = input(question)
|
||||
if answer != 'y' and answer != 'Y':
|
||||
return
|
||||
|
||||
validate = opts.validate
|
||||
if validate:
|
||||
print(f'- Validate documents')
|
||||
xml_syntax = opts.xml_syntax
|
||||
if xml_syntax:
|
||||
print(f'- Check XML syntax')
|
||||
for (filename, doc) in validDocs.items():
|
||||
if xml_syntax:
|
||||
xml_string = mx.writeToXmlString(doc)
|
||||
errors = is_well_formed(xml_string)
|
||||
if errors:
|
||||
print(f'- Warning: Document {filename} is not well-formed XML: {errors}')
|
||||
if validate:
|
||||
is_valid, errors = doc.validate()
|
||||
if not is_valid:
|
||||
print(f'- Warning: Document {filename} is invalid. Errors {errors}.')
|
||||
mx.writeToXmlFile(doc, filename)
|
||||
|
||||
if opts.upgrade:
|
||||
print('Upgraded %i documents to MaterialX v%i.%i' % (len(validDocs), mxVersion[0], mxVersion[1]))
|
||||
else:
|
||||
print('Reformatted %i documents ' % len(validDocs))
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user