aboutsummaryrefslogtreecommitdiffstats
path: root/support/doxygen/evil_mangler.awk
blob: 6c338fa888acfe8f750f0026b220cd3d0b592225 (plain)
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
#!/usr/bin/awk -f

# libmaple's own Evil Mangler
#
# Input filter hack to trick Doxygen into thinking that a series
# header is in a separate namespace. This is necessary because Doxygen
# doesn't know how to cope with two data structures with the same name
# in different places in the project. (We do that all the time,
# e.g. for foo_reg_map structs.)
#
# E.g., an STM32F1 header gets transformed into:
#
# namespace stm32f1 {
# <contents of header>
# }

BEGIN {
    # For extracting series component from header FILENAME.
    series_regex = "/stm32[flw][0-9]*-?[flw]?[0-9]*/";
    # Holds header FILENAME. Cargo-culted; not sure why it's necessary.
    f = "";
    # Holds series component.
    series = "";
}
{
    if (f != FILENAME) {
        f = FILENAME;
        match(f, series_regex);
        series = substr(f, RSTART + 1, RLENGTH - 2);
        sub(/-/, "_", series);
        printf("namespace %s {\n", series);
    }
    print;
}
END {
    if (series != "") {
        print "}"
    }
}