summaryrefslogtreecommitdiff
path: root/apps/plugins/puzzles/genhelp.sh
blob: 9aa304c0c15254f911f5f99c4cfb658a67a85ca0 (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
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
#!/bin/bash
# usage: ./genhelp.sh
#
# expects halibut to be installed in $PATH:
# http://www.chiark.greenend.org.uk/~sgtatham/halibut
#
# also requires host CC and lz4 library to be available

halibut --text src/puzzles.but

# preprocess the input

# strip leading whitespace
cat puzzles.txt | awk '{$1=$1; print}' > puzzles.txt.tmp

# cut at "Appendix A"
cat puzzles.txt.tmp | awk 'BEGIN { a=1; } /Appendix A/ { a = 0; } a==1' > puzzles.txt

rm puzzles.txt.tmp

# now split into different files
mkdir -p help

cat puzzles.txt | awk '
BEGIN {
    file = "none";
}

/#Chapter/ {
    if($0 !~ / 1:/ && $0 !~ / 2:/)
    {
        if(file != "none")
             print ";" > file;
        file = "help/"tolower($3$4)".c";

        if($3 ~ "Rectangles")
             file = "help/rect.c";

        print "/* auto-generated by genhelp.sh (intermediate file) */" > file;
        print "/* DO NOT EDIT! */" > file;
        print "const char help_text[] = " > file;
    }
}

file != "none" {
    /* escape backslashes */
    gsub(/\\/,"\\\\");

    if($0 ~ /\$/)
        print("WARNING: text contains dollar sign: change special character!" $0);

    /* replace underscores with dollar signs (not used in any of the puzzles docs) */
    if($0 ~ /http/)
        gsub(/_/,"$");

    begin = "";

    last = substr($0, length($0), 1);

    /* hack for chapter titles */
    if(substr($0, 1, 1) == "#" || length($0) == 0)
        term=" \\n";
    else
        term = " ";

   /* custom code markup (halibut modification required) */
   if(substr($0, 1, 2) == ">>")
   {
        gsub(/>> /,"");
        term = " \\n";
   }

    print "\"" begin $0 term "\"" > file;
}

END {
    print ";" > file;
}
'

# now compress
for f in help/*.c
do
    echo "Compressing: "$f
    gcc compress.c $f -llz4 -o compress -O0
    ./compress > $f.tmp
    mv $f.tmp $f
done

# generate quick help from all the .R files
cat src/*.R | awk 'print_next { print_next = 0; print; } /!begin/ && />/ && /gamedesc.txt/ { print_next = 1; }' | awk -F ":" '{print "const char quick_help_text[] = \""$5"\";" >> "help/"$1".c" }'

rm puzzles.txt
rm compress