Files
@ r22885:823868827011
Branch filter:
Location: cpp/openttd-patchpack/source/src/script/api/generate_widget.awk
r22885:823868827011
3.0 KiB
application/x-awk
Feature: Baseset music for TTD DOS and TTO data
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | # $Id$
# This file is part of OpenTTD.
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
#
# Awk script to automatically generate the enums in script_window.hpp
#
# The file is scanned for @enum and @endenum tokens, and the content between them is replaced by an enum from a different file.
#
# Example:
# // @enum enumname filename
# ... content here is replaced ...
# // @endenum
#
# The parameter "enumname" specifies the enumeration to extract. This can also be a regular expression.
# The parameter "filename" specifies the relative path to the file, where the enumeration is extracted from. This can also be a glob expression.
#
#
BEGIN {
skiptillend = 0;
}
/@enum/ {
print;
add_indent = gensub("[^ ]*", "", "g");
sub(".*@enum *", "");
enum = $1;
pattern = $2;
files = "echo " pattern;
files | getline filelist;
close(files);
split(filelist, filearray);
count = asort(filearray);
for (i = 1; i <= count; i++) {
active = 0;
active_comment = 0;
comment = "";
file = filearray[i];
print add_indent "/* automatically generated from " file " */"
while ((getline < file) > 0) {
sub(rm_indent, "");
# Remember possible doxygen comment before enum declaration
if ((active == 0) && (match($0, "/\\*\\*") > 0)) {
comment = add_indent $0;
active_comment = 1;
} else if (active_comment == 1) {
comment = comment "\n" add_indent $0;
}
# Check for enum match
if (match($0, "^ *enum *" enum " *\\{") > 0) {
rm_indent = $0;
gsub("[^ ]*", "", rm_indent);
active = 1;
if (active_comment > 0) print comment;
active_comment = 0;
comment = "";
}
# Forget doxygen comment, if no enum follows
if (active_comment == 2 && $0 != "") {
active_comment = 0;
comment = "";
}
if (active_comment == 1 && match($0, "\\*/") > 0) active_comment = 2;
if (active != 0) {
if (match($0, "^ *[A-Za-z0-9_]* *[,=]") > 0) {
# Transform enum values
sub(" *=[^,]*", "");
sub(" *//", " //");
match($0, "^( *)([A-Za-z0-9_]+),(.*)", parts);
enumwidth - length(parts[2])
if (parts[3] == "") {
printf "%s%s%-45s= ::%s\n", add_indent, parts[1], parts[2], (parts[2] ",")
} else {
printf "%s%s%-45s= ::%-45s%s\n", add_indent, parts[1], parts[2], (parts[2] ","), parts[3];
}
} else if ($0 == "") {
print "";
} else {
print add_indent $0;
}
}
if (match($0, "^ *\\};") > 0) {
if (active != 0) print "";
active = 0;
}
}
close(file);
}
skiptillend = 1;
next;
}
/@endenum/ {
print;
skiptillend = 0;
next;
}
{
if (skiptillend == 0) print;
}
|