+class StringMatcher(Matcher):
+
+ def __init__(self, refValue):
+ self.refValue = refValue
+
+ def isShaderDisassembly(self, value):
+ return value.find('// Generated by Microsoft (R) D3D Shader Disassembler\n') != -1
+
+ def normalizeShaderDisassembly(self, value):
+ # Unfortunately slightly different disassemblers produce different output
+ return '\n'.join([line.strip() for line in value.split('\n') if line.strip() and not line.startswith('//')])
+
+ def match(self, value, mo):
+ if self.isShaderDisassembly(self.refValue) and self.isShaderDisassembly(value):
+ return self.normalizeShaderDisassembly(self.refValue) == self.normalizeShaderDisassembly(value)
+ return self.refValue == value
+
+ def __str__(self):
+ return repr(self.refValue)
+
+