Merge pull request #2384 from fonttools/newline-2021
Default to "\n" for newlinestr instead of None
This commit is contained in:
commit
e161bbc980
@ -11,7 +11,7 @@ INDENT = " "
|
||||
class XMLWriter(object):
|
||||
|
||||
def __init__(self, fileOrPath, indentwhite=INDENT, idlefunc=None, encoding="utf_8",
|
||||
newlinestr=None):
|
||||
newlinestr="\n"):
|
||||
if encoding.lower().replace('-','').replace('_','') != 'utf8':
|
||||
raise Exception('Only UTF-8 encoding is supported.')
|
||||
if fileOrPath == '-':
|
||||
|
@ -76,7 +76,7 @@ class TTCollection(object):
|
||||
final.write(file.getvalue())
|
||||
file.close()
|
||||
|
||||
def saveXML(self, fileOrPath, newlinestr=None, writeVersion=True, **kwargs):
|
||||
def saveXML(self, fileOrPath, newlinestr="\n", writeVersion=True, **kwargs):
|
||||
|
||||
from fontTools.misc import xmlWriter
|
||||
writer = xmlWriter.XMLWriter(fileOrPath, newlinestr=newlinestr)
|
||||
|
@ -215,7 +215,7 @@ class TTFont(object):
|
||||
|
||||
return writer.reordersTables()
|
||||
|
||||
def saveXML(self, fileOrPath, newlinestr=None, **kwargs):
|
||||
def saveXML(self, fileOrPath, newlinestr="\n", **kwargs):
|
||||
"""Export the font as TTX (an XML-based text file), or as a series of text
|
||||
files when splitTables is true. In the latter case, the 'fileOrPath'
|
||||
argument should be a path to a directory.
|
||||
|
@ -122,7 +122,7 @@ class Options(object):
|
||||
ignoreDecompileErrors = True
|
||||
bitmapGlyphDataFormat = 'raw'
|
||||
unicodedata = None
|
||||
newlinestr = None
|
||||
newlinestr = "\n"
|
||||
recalcTimestamp = None
|
||||
flavor = None
|
||||
useZopfli = False
|
||||
|
@ -29,9 +29,7 @@ def write_checksum(filepaths, stdout_write=False, use_ttx=False, include_tables=
|
||||
temp_ttx_path = path + ".ttx"
|
||||
|
||||
tt = TTFont(path)
|
||||
# important to keep the newlinestr value defined here as hash values will change across platforms
|
||||
# if platform specific newline values are assumed
|
||||
tt.saveXML(temp_ttx_path, newlinestr="\n", skipTables=exclude_tables, tables=include_tables)
|
||||
tt.saveXML(temp_ttx_path, skipTables=exclude_tables, tables=include_tables)
|
||||
checksum_path = temp_ttx_path
|
||||
else:
|
||||
if include_tables is not None:
|
||||
|
@ -108,12 +108,11 @@ class BuilderTest(unittest.TestCase):
|
||||
lines = []
|
||||
with open(path, "r", encoding="utf-8") as ttx:
|
||||
for line in ttx.readlines():
|
||||
# Elide ttFont attributes because ttLibVersion may change,
|
||||
# and use os-native line separators so we can run difflib.
|
||||
# Elide ttFont attributes because ttLibVersion may change.
|
||||
if line.startswith("<ttFont "):
|
||||
lines.append("<ttFont>" + os.linesep)
|
||||
lines.append("<ttFont>\n")
|
||||
else:
|
||||
lines.append(line.rstrip() + os.linesep)
|
||||
lines.append(line.rstrip() + "\n")
|
||||
return lines
|
||||
|
||||
def expect_ttx(self, font, expected_ttx, replace=None):
|
||||
|
@ -4,8 +4,7 @@ import os
|
||||
import unittest
|
||||
from fontTools.misc.xmlWriter import XMLWriter
|
||||
|
||||
linesep = tobytes(os.linesep)
|
||||
HEADER = b'<?xml version="1.0" encoding="UTF-8"?>' + linesep
|
||||
HEADER = b'<?xml version="1.0" encoding="UTF-8"?>\n'
|
||||
|
||||
class TestXMLWriter(unittest.TestCase):
|
||||
|
||||
@ -17,30 +16,30 @@ class TestXMLWriter(unittest.TestCase):
|
||||
def test_comment_multiline(self):
|
||||
writer = XMLWriter(BytesIO())
|
||||
writer.comment("Hello world\nHow are you?")
|
||||
self.assertEqual(HEADER + b"<!-- Hello world" + linesep + b" How are you? -->",
|
||||
self.assertEqual(HEADER + b"<!-- Hello world\n How are you? -->",
|
||||
writer.file.getvalue())
|
||||
|
||||
def test_encoding_default(self):
|
||||
writer = XMLWriter(BytesIO())
|
||||
self.assertEqual(b'<?xml version="1.0" encoding="UTF-8"?>' + linesep,
|
||||
self.assertEqual(b'<?xml version="1.0" encoding="UTF-8"?>\n',
|
||||
writer.file.getvalue())
|
||||
|
||||
def test_encoding_utf8(self):
|
||||
# https://github.com/fonttools/fonttools/issues/246
|
||||
writer = XMLWriter(BytesIO(), encoding="utf8")
|
||||
self.assertEqual(b'<?xml version="1.0" encoding="UTF-8"?>' + linesep,
|
||||
self.assertEqual(b'<?xml version="1.0" encoding="UTF-8"?>\n',
|
||||
writer.file.getvalue())
|
||||
|
||||
def test_encoding_UTF_8(self):
|
||||
# https://github.com/fonttools/fonttools/issues/246
|
||||
writer = XMLWriter(BytesIO(), encoding="UTF-8")
|
||||
self.assertEqual(b'<?xml version="1.0" encoding="UTF-8"?>' + linesep,
|
||||
self.assertEqual(b'<?xml version="1.0" encoding="UTF-8"?>\n',
|
||||
writer.file.getvalue())
|
||||
|
||||
def test_encoding_UTF8(self):
|
||||
# https://github.com/fonttools/fonttools/issues/246
|
||||
writer = XMLWriter(BytesIO(), encoding="UTF8")
|
||||
self.assertEqual(b'<?xml version="1.0" encoding="UTF-8"?>' + linesep,
|
||||
self.assertEqual(b'<?xml version="1.0" encoding="UTF-8"?>\n',
|
||||
writer.file.getvalue())
|
||||
|
||||
def test_encoding_other(self):
|
||||
@ -61,7 +60,7 @@ class TestXMLWriter(unittest.TestCase):
|
||||
writer.newline()
|
||||
writer.dedent()
|
||||
writer.write("baz")
|
||||
self.assertEqual(HEADER + bytesjoin(["foo", " bar", "baz"], linesep),
|
||||
self.assertEqual(HEADER + bytesjoin(["foo", " bar", "baz"], "\n"),
|
||||
writer.file.getvalue())
|
||||
|
||||
def test_writecdata(self):
|
||||
@ -89,7 +88,7 @@ class TestXMLWriter(unittest.TestCase):
|
||||
"66756c20 67726f75 70206f66 206c6574",
|
||||
"74657273 2c206e6f 74206120 67726f75",
|
||||
"70206f66 20626561 75746966 756c206c",
|
||||
"65747465 72732e ", ""], joiner=linesep), writer.file.getvalue())
|
||||
"65747465 72732e ", ""], joiner="\n"), writer.file.getvalue())
|
||||
|
||||
def test_stringifyattrs(self):
|
||||
writer = XMLWriter(BytesIO())
|
||||
|
@ -182,14 +182,14 @@ class MtiTest(unittest.TestCase):
|
||||
decompiled.decompile(blob, font)
|
||||
|
||||
# XML from built object.
|
||||
writer = XMLWriter(StringIO(), newlinestr='\n')
|
||||
writer = XMLWriter(StringIO())
|
||||
writer.begintag(tableTag); writer.newline()
|
||||
table.toXML(writer, font)
|
||||
writer.endtag(tableTag); writer.newline()
|
||||
xml_built = writer.file.getvalue()
|
||||
|
||||
# XML from decompiled object.
|
||||
writer = XMLWriter(StringIO(), newlinestr='\n')
|
||||
writer = XMLWriter(StringIO())
|
||||
writer.begintag(tableTag); writer.newline()
|
||||
decompiled.toXML(writer, font)
|
||||
writer.endtag(tableTag); writer.newline()
|
||||
@ -208,7 +208,7 @@ class MtiTest(unittest.TestCase):
|
||||
reader.read(rootless=True)
|
||||
|
||||
# XML from object read from XML.
|
||||
writer = XMLWriter(StringIO(), newlinestr='\n')
|
||||
writer = XMLWriter(StringIO())
|
||||
writer.begintag(tableTag); writer.newline()
|
||||
font2[tableTag].toXML(writer, font)
|
||||
writer.endtag(tableTag); writer.newline()
|
||||
|
@ -50,12 +50,11 @@ class SubsetTest(unittest.TestCase):
|
||||
lines = []
|
||||
with open(path, "r", encoding="utf-8") as ttx:
|
||||
for line in ttx.readlines():
|
||||
# Elide ttFont attributes because ttLibVersion may change,
|
||||
# and use os-native line separators so we can run difflib.
|
||||
# Elide ttFont attributes because ttLibVersion may change.
|
||||
if line.startswith("<ttFont "):
|
||||
lines.append("<ttFont>" + os.linesep)
|
||||
lines.append("<ttFont>\n")
|
||||
else:
|
||||
lines.append(line.rstrip() + os.linesep)
|
||||
lines.append(line.rstrip() + "\n")
|
||||
return lines
|
||||
|
||||
def expect_ttx(self, font, expected_ttx, tables=None):
|
||||
|
@ -1,7 +1,6 @@
|
||||
from fontTools.misc.testTools import parseXML
|
||||
from fontTools.misc.xmlWriter import XMLWriter
|
||||
from io import BytesIO
|
||||
import os
|
||||
import struct
|
||||
import unittest
|
||||
from fontTools.ttLib import newTable
|
||||
@ -46,14 +45,14 @@ class Test_l_t_a_g(unittest.TestCase):
|
||||
table = newTable("ltag")
|
||||
table.decompile(self.DATA_, ttFont=None)
|
||||
table.toXML(writer, ttFont=None)
|
||||
expected = os.linesep.join([
|
||||
expected = "\n".join([
|
||||
'<?xml version="1.0" encoding="UTF-8"?>',
|
||||
'<version value="1"/>',
|
||||
'<flags value="0"/>',
|
||||
'<LanguageTag tag="en"/>',
|
||||
'<LanguageTag tag="zh-Hant"/>',
|
||||
'<LanguageTag tag="zh"/>'
|
||||
]) + os.linesep
|
||||
]) + "\n"
|
||||
self.assertEqual(expected.encode("utf_8"), writer.file.getvalue())
|
||||
|
||||
|
||||
|
@ -254,7 +254,7 @@ def read_expected_ttx(testfile, tableTag):
|
||||
|
||||
def dump_ttx(font, tableTag):
|
||||
f = StringIO()
|
||||
font.saveXML(f, newlinestr='\n', tables=[tableTag])
|
||||
font.saveXML(f, tables=[tableTag])
|
||||
return ttLibVersion_RE.sub('', f.getvalue())
|
||||
|
||||
|
||||
|
@ -104,7 +104,7 @@ class ProgramTest(unittest.TestCase):
|
||||
p.fromBytecode(BYTECODE)
|
||||
ttfont = TestFont()
|
||||
buf = StringIO()
|
||||
writer = XMLWriter(buf, newlinestr='\n')
|
||||
writer = XMLWriter(buf)
|
||||
try:
|
||||
p.toXML(writer, ttfont)
|
||||
finally:
|
||||
|
@ -1411,7 +1411,7 @@ def _dump_ttx(ttFont):
|
||||
tmp.seek(0)
|
||||
ttFont2 = ttLib.TTFont(tmp, recalcBBoxes=False, recalcTimestamp=False)
|
||||
s = StringIO()
|
||||
ttFont2.saveXML(s, newlinestr="\n")
|
||||
ttFont2.saveXML(s)
|
||||
return _strip_ttLibVersion(s.getvalue())
|
||||
|
||||
|
||||
|
@ -61,12 +61,11 @@ class InterpolateLayoutTest(unittest.TestCase):
|
||||
lines = []
|
||||
with open(path, "r", encoding="utf-8") as ttx:
|
||||
for line in ttx.readlines():
|
||||
# Elide ttFont attributes because ttLibVersion may change,
|
||||
# and use os-native line separators so we can run difflib.
|
||||
# Elide ttFont attributes because ttLibVersion may change.
|
||||
if line.startswith("<ttFont "):
|
||||
lines.append("<ttFont>" + os.linesep)
|
||||
lines.append("<ttFont>\n")
|
||||
else:
|
||||
lines.append(line.rstrip() + os.linesep)
|
||||
lines.append(line.rstrip() + "\n")
|
||||
return lines
|
||||
|
||||
def expect_ttx(self, font, expected_ttx, tables):
|
||||
|
@ -59,12 +59,11 @@ class MutatorTest(unittest.TestCase):
|
||||
lines = []
|
||||
with open(path, "r", encoding="utf-8") as ttx:
|
||||
for line in ttx.readlines():
|
||||
# Elide ttFont attributes because ttLibVersion may change,
|
||||
# and use os-native line separators so we can run difflib.
|
||||
# Elide ttFont attributes because ttLibVersion may change.
|
||||
if line.startswith("<ttFont "):
|
||||
lines.append("<ttFont>" + os.linesep)
|
||||
lines.append("<ttFont>\n")
|
||||
else:
|
||||
lines.append(line.rstrip() + os.linesep)
|
||||
lines.append(line.rstrip() + "\n")
|
||||
return lines
|
||||
|
||||
def expect_ttx(self, font, expected_ttx, tables):
|
||||
|
@ -84,12 +84,11 @@ class BuildTest(unittest.TestCase):
|
||||
lines = []
|
||||
with open(path, "r", encoding="utf-8") as ttx:
|
||||
for line in ttx.readlines():
|
||||
# Elide ttFont attributes because ttLibVersion may change,
|
||||
# and use os-native line separators so we can run difflib.
|
||||
# Elide ttFont attributes because ttLibVersion may change.
|
||||
if line.startswith("<ttFont "):
|
||||
lines.append("<ttFont>" + os.linesep)
|
||||
lines.append("<ttFont>\n")
|
||||
else:
|
||||
lines.append(line.rstrip() + os.linesep)
|
||||
lines.append(line.rstrip() + "\n")
|
||||
return lines
|
||||
|
||||
def expect_ttx(self, font, expected_ttx, tables):
|
||||
|
Loading…
x
Reference in New Issue
Block a user