web: Use level-2 headers for the release notes
[gnupg-doc.git] / tools / news-file-to-org.awk
1 # news-file-to-org.awk - Build a history org file from the NEWS file
2 # Copyright (C) 2006, 2017 g10 Code GmbH
3 #
4 # This file is free software; as a special exception the author gives
5 # unlimited permission to copy and/or distribute it, with or without
6 # modifications, as long as this notice is preserved.
7 #
8 # This program is distributed in the hope that it will be useful, but
9 # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
10 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
12 # Empty lines as well as lines starting with a hash mark are entirly
13 # ignored.  Paragraphs are indicated by a "*" marker.  A new revision
14 # history starts with the "Noteworthy .." line; the release date is
15 # expected in parentheses on that line.  If it is not given the
16 # section won't be rendered.
17 #
18 # This script is based on build-history.sh from gpg4win but stripped
19 # down and changed from M4 output to org-mode output.  As of now it
20 # works only with GnuPG.
21
22
23 BEGIN {
24     if ( lang == "" )
25         lang = "en";
26     in_section = 0;
27     in_para = 0;
28     in_vers = 0;
29     any_para = 0;
30     version = "";
31     reldate = "";
32     lines = "";
33     header = ""
34     seealso = ""
35
36     ml_base_url = "https://lists.gnupg.org/pipermail/"
37
38     header_text["en"] = ""                      \
39         "* GnuPG\n" ;
40
41     header_text["de"] = ""                      \
42         "* GnuPG\n" ;
43
44     release_text["en"] = "released ";
45     release_text["de"] = "veröffentlicht ";
46     noreldate_text["en"] = "[ in progress; not yet released ]";
47     noreldate_text["de"] = "[ in Arbeit; bisher noch nicht veröffentlicht ]";
48     explicit_dl_text["en"] = "Explicit download of this version:";
49     explicit_dl_text["de"] = "Expliziter Download dieser Version:";
50     readme_text["en"] = "Details in the README of this version:";
51     readme_text["de"] = "Details im README dieser Version:";
52
53     print header_text[lang];
54 }
55
56 function flush() {
57     if (in_section) {
58         printf "** GnuPG "
59         if (seealso)
60             printf "[[%s%s][%s]]", ml_base_url, seealso, hdr_version
61         else
62             printf "%s", hdr_version
63         printf " %s (%s)\n", release_text[lang], hdr_reldate;
64         printf ""                                             \
65             "   :PROPERTIES:\n"                              \
66         "   :CUSTOM_ID: gnupg-%s\n"                      \
67         "   :END:\n\n",
68             hdr_version;
69         print lines;
70     }
71     lines = ""
72     seealso = ""
73     in_section = 0;
74     in_para = 0;
75     in_vers = 0;
76     any_para = 0;
77 }
78
79
80 /^#/   { next }
81 /^---/ { next }
82
83 in_section && $0 ~ /^(Noteworthy|Version| Copyright)/ {
84     if (in_vers)
85         lines = lines "#end_example";
86     flush()
87 }
88
89
90 # Handle single Version lines used to announce a release date,
91 !in_section && $0 ~ /^Version/ {
92     version = $2;
93     reldate = "";
94     if (index ($0, "(")) {
95         sub (/^.*\(/, "");
96         sub (/\).*$/, "");
97         reldate = $0;
98         print "** GnuPG " version " " release_text[lang] " (" reldate ")";
99         printf "   :PROPERTIES:\n   :CUSTOM_ID: gnupg-%s\n", version;
100         print "   :END:\n"
101 }
102     next;
103 }
104
105 !in_section {
106     if ($0 !~ /^Noteworthy/)
107         next;
108     if ( ! index ($0, "("))
109         next;
110     version = $5;
111     reldate = "";
112     sub (/^.*\(/, "");
113     sub (/\).*$/, "");
114     reldate = $0;
115     if (reldate ~ "unreleased")
116         next;
117     hdr_version = version
118     hdr_reldate = reldate
119     in_section = 1;
120     lines = "";
121     in_para = 0;
122     in_vers = 0;
123     any_para = 0;
124
125     next;
126 }
127
128 in_section && $0 ~ /^[ ]+[*] / {
129     in_para = 1;
130     any_para = 1;
131     indent_para = index($0, "*") + 2;
132     lines = lines sprintf("    - %s\n", substr ($0, indent_para));
133     next;
134 }
135
136
137 # Handle beta version announcement inside a section
138 in_section && $0 ~ /^[ ]+\[Noteworthy changes in version / {
139     any_para = 1;
140     lines = lines sprintf("    %s\n", substr ($0, index($0, "[")));
141     next;
142 }
143
144
145 # Handle See-also lines inside a section
146 in_section && $0 ~ /^[ ]+\See-also: [a-z]+/ {
147     seealso = $2;
148     next;
149 }
150
151
152 # We don't use the next in GnuPG's NEWS, but lets support it anyway.
153 in_section && !in_vers && /^~~~/ {
154     if ( in_para ) {
155         in_para = 0;
156     }
157     in_para = 0;
158     in_vers = 1;
159     lines = lines "#begin_example"
160     next;
161 }
162
163 in_para {
164     lines = lines sprintf("      %s\n", substr ($0, indent_para));
165 }
166
167 in_vers && /^~~~/ {
168     in_vers = 0;
169     lines = lines "#end_example"
170 }
171
172 in_vers {
173     lines = lines $0;
174 }
175
176
177 END {
178     flush()
179 }