mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
%# -*- 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 - 2016 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See http://swift.org/LICENSE.txt for license information
|
|
// See http://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('^\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}
|