%# -*- mode: Python -*- %# Ignore the following admonition; it applies to the resulting .def file only //// Automatically Generated From SortedCFDatabase.def.gyb. //// Do Not Edit Directly! //===----------------------------------------------------------------------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// %{ import re import codecs prologueLines = "" epilogueLines = "" # A dictionary mapping type names to their corresponding lines # in the database. lineForName = {} # Load the data file. with codecs.open(CFDatabaseFile, encoding='utf-8', errors='strict') as f: for line in f: # Pass through preprocessor directives literally. # Assume that they all fall into either a strict prologue or epilogue. if re.match('^#', line): if len(lineForName) == 0: prologueLines += line else: epilogueLines += line continue # Otherwise, check for lines like FOO(BAR) m = re.match(r'^\w+\((\w+)\)', line) if m: lineForName[m.group(1)] = line }% ${prologueLines} %# Use a quasi-lexicographic order: length first, then string data. %for name in sorted(lineForName.keys(), key=lambda x: (len(x), x)): ${lineForName[name]} %end ${epilogueLines}