1 // This file is part of the SpeedCrunch project
2 // Copyright (C) 2013, 2014 @heldercorreia
3 //
4 // This program is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU General Public License
6 // as published by the Free Software Foundation; either version 2
7 // of the License, or (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program; see the file COPYING.  If not, write to
16 // the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 // Boston, MA 02110-1301, USA.
18 
19 #include "core/book.h"
20 
21 #define STYLE \
22     "<style>" \
23         "body {" \
24             "background-color: #ffffff;" \
25             "color: #000000;" \
26         "}" \
27         \
28         "h2 {" \
29             "font-family: \"Times New Roman\", Verdana, Arial, Helvetica, sans-serif;" \
30         "}" \
31         \
32         ".variable {" \
33             "font-weight: bold;" \
34             "font-size: 10pt;" \
35         "}" \
36         \
37         ".unit {" \
38             "font-size: 8pt;" \
39             "font-style: italic;" \
40         "}" \
41         \
42         ".caption {" \
43             "font-style: italic;" \
44             "font-size: 10pt;" \
45         \
46         "}" \
47         \
48         "a:link {" \
49             "text-decoration: none;" \
50         "}" \
51         \
52         ".page-link a:link {" \
53             "color: #555;" \
54             "font-family: Verdana, Arial, Helvetica, sans-serif;" \
55         "}" \
56         \
57         ".formula a:link {" \
58             "color: SteelBlue;" \
59             "font-size: 15pt;" \
60             "font-family: \"Times New Roman\", Verdana, Arial, Helvetica, sans-serif;" \
61         "}" \
62     "</style>"
63 
64 #define BEGIN QString("<html><head>" STYLE "</head><body>")+
65 #define SECTION(s) "<h3>"+(s)+"</h3>"
66 #define BR "<br />"
67 #define INDEX_LINK "<span class=\"page-link\"><a href=\"index\">"+Book::tr("Index")+"</a></span>"
68 #define LINK(link,text) "<span class=\"page-link\"><a href=\""#link"\">"+text+"</a></span>"
69 #define TITLE(s) "<h1>"+(s)+"</h1><div>"
70 #define SUBTITLE(s) "<h2>"#s+"</h2><div>"
71 #define FORMULA(link,text) "<span class=\"formula\"><a href=\"formula:"#link"\">"#text"</a></span><br />"
72 #define FORMULA_UNIT(link,text,unit) "<span class=\"formula\"><a href=\"formula:"#link"\">"#text"</a></span> <span class=\"unit\">"#unit"</span><br />"
73 #define TABLE "<table><tr>"
74 #define ROW "</tr><tr>"
75 #define _TABLE "</div></tr></table>"
76 #define VARIABLE(s) "<td class=\"variable\">"#s"</td>"
77 #define CAPTION(s) "<td class=\"caption\">"+(s)+"</td>"
78 #define END "</body></html>"
79 
makeIndexPage()80 static QString makeIndexPage()
81 {
82     return
83         BEGIN
84         TITLE(Book::tr("Index"))
85         SECTION(Book::tr("Algebra"))
86         LINK(algebra/quadratic-equation, Book::tr("Quadratic Equation")) BR
87         LINK(algebra/log-base-conversion, Book::tr("Logarithmic Base Conversion")) BR
88         SECTION(Book::tr("Geometry"))
89         LINK(geometry/circle, Book::tr("Circle")) BR
90         LINK(geometry/sector, Book::tr("Sector")) BR
91         LINK(geometry/sphere, Book::tr("Sphere")) BR
92         LINK(geometry/cube, Book::tr("Cube")) BR
93         LINK(geometry/cone, Book::tr("Cone")) BR
94         LINK(geometry/cylinder, Book::tr("Cylinder")) BR
95         SECTION(Book::tr("Unit Conversions"))
96         LINK(units/temperature, Book::tr("Temperature")) BR
97         SECTION(Book::tr("Electronics"))
98         LINK(electronics/ohmslaw, Book::tr("Ohm's Law")) BR
99         LINK(electronics/power, Book::tr("Power")) BR
100         LINK(electronics/reactance, Book::tr("Reactance")) BR
101         LINK(electronics/resonance, Book::tr("Resonance")) BR
102         SECTION(Book::tr("Radio Frequency"))
103         LINK(rf/antennas, Book::tr("Antennas")) BR
104         LINK(rf/impedance, Book::tr("Characteristic Impedance (coax)")) BR
105         LINK(rf/propagation, Book::tr("Velocity of Propagation (coax)")) BR
106         LINK(rf/swr, Book::tr("Standing Wave Ratio & Return Loss")) BR
107         LINK(rf/wavelength, Book::tr("Free Space Wavelength")) BR
108         END;
109 }
110 
makeAlgebraQuadraticEquationPage()111 static QString makeAlgebraQuadraticEquationPage()
112 {
113     return
114         BEGIN
115         INDEX_LINK
116         TITLE(Book::tr("Quadratic Equation"))
117         SUBTITLE(a&sdot;x<sup>2</sup> + b&sdot;x + c = 0)
118         FORMULA(x1 = (-b + sqrt(b%5e2 - 4*a*c))/(2*a), x<sub>1</sub> = (-b + &radic;(b<sup>2</sup> - 4&sdot;a&sdot;c)) / (2&sdot;a))
119         FORMULA(x2 = (-b - sqrt(b%5e2 - 4*a*c))/(2*a), x<sub>2</sub> = (-b - &radic;(b<sup>2</sup> - 4&sdot;a&sdot;c)) / (2&sdot;a))
120         END;
121 }
122 
makeAlgebraLogBaseConversionPage()123 static QString makeAlgebraLogBaseConversionPage() {
124     return
125         BEGIN
126         INDEX_LINK
127         TITLE(Book::tr("Logarithmic Base Conversion"))
128         FORMULA(y = log(x) / log(a), log<sub>a</sub>x = log(x) / log(a))
129         END;
130 }
131 
makeElectronicsOhmsLawPage()132 static QString makeElectronicsOhmsLawPage()
133 {
134     return
135         BEGIN
136         INDEX_LINK
137         TITLE(Book::tr("Ohm's Law"))
138         FORMULA_UNIT(R = V / I, R = V / I, &Omega;)
139         FORMULA_UNIT(V = I * R, V = I&sdot;R, V)
140         FORMULA_UNIT(I = V / R, I = V / R, A)
141         TABLE
142         VARIABLE(R) CAPTION(Book::tr("resistance")) ROW
143         VARIABLE(V) CAPTION(Book::tr("voltage")) ROW
144         VARIABLE(I) CAPTION(Book::tr("current")) ROW
145         _TABLE
146         END;
147 }
148 
makeElectronicsPowerPage()149 static QString makeElectronicsPowerPage()
150 {
151     return
152         BEGIN
153         INDEX_LINK
154         TITLE(Book::tr("Power"))
155         FORMULA_UNIT(P = I * V, P = I&sdot;V, W)
156         FORMULA_UNIT(P = I%5e2 * R, P = I<sup>2</sup>&sdot;R, W)
157         FORMULA_UNIT(P = V%5e2 / R, P = V<sup>2</sup> / R, W)
158         FORMULA_UNIT(I = P / V, I = P / V, A)
159         FORMULA_UNIT(I = sqrt(P / R), I = &radic;(P / R), A)
160         FORMULA_UNIT(V = P / I, V = P / I, V)
161         FORMULA_UNIT(V = sqrt(P * R), V = &radic;(P&sdot;R), V)
162         FORMULA_UNIT(R = V%5e2 / P, R = V<sup>2</sup> / P, &Omega;)
163         FORMULA_UNIT(R = P / I%5e2, R = P / I<sup>2</sup>, &Omega;)
164         TABLE
165         VARIABLE(P) CAPTION(Book::tr("power")) ROW
166         VARIABLE(I) CAPTION(Book::tr("current")) ROW
167         VARIABLE(V) CAPTION(Book::tr("voltage")) ROW
168         VARIABLE(R) CAPTION(Book::tr("resistance")) ROW
169         _TABLE
170         END;
171 }
172 
makeElectronicsReactancePage()173 static QString makeElectronicsReactancePage()
174 {
175     return
176         BEGIN
177         INDEX_LINK
178         TITLE(Book::tr("Reactance"))
179         FORMULA_UNIT(Xl = 2 * pi * f * L, X<sub>L</sub> = 2&sdot;&pi;&sdot;f&sdot;L, &Omega;)
180         FORMULA_UNIT(Xc = 1 / (2 * pi * f * C), X<sub>C</sub> = 1 / (2&sdot;&pi;&sdot;f&sdot;C), &Omega;)
181         FORMULA_UNIT(L = Xl / (2 * pi * f), L = X<sub>L</sub> / (2&sdot;&pi;&sdot;f), H)
182         FORMULA_UNIT(C = 1 / (2 * pi * f * Xc), C = 1 / (2&sdot;&pi;&sdot;f&sdot;X<sub>C</sub>), F)
183         FORMULA_UNIT(f = Xl / (2 * pi * L), f = X<sub>L</sub> / (2&sdot;&pi;&sdot;L), Hz)
184         FORMULA_UNIT(f = 1 / (Xc * 2 * pi * C), f = 1 / (X<sub>C</sub>&sdot;2&sdot;&pi;&sdot;C), Hz)
185         TABLE
186         VARIABLE(X<sub>L</sub>) CAPTION(Book::tr("inductive reactance")) ROW
187         VARIABLE(X<sub>C</sub>) CAPTION(Book::tr("capacitive reactance")) ROW
188         VARIABLE(L) CAPTION(Book::tr("inductance")) ROW
189         VARIABLE(C) CAPTION(Book::tr("capacitance")) ROW
190         VARIABLE(f) CAPTION(Book::tr("frequency")) ROW
191         _TABLE
192         END;
193 }
194 
makeElectronicsResonancePage()195 static QString makeElectronicsResonancePage()
196 {
197     return
198         BEGIN
199         INDEX_LINK
200         TITLE(Book::tr("Resonance"))
201         FORMULA_UNIT(f = 1 / (2 * pi * sqrt(L * C)), f = 1 / (2&sdot;&pi;&sdot;&radic;(L&sdot;C)), Hz)
202         FORMULA_UNIT(L = 1 / (4 * pi%5e2 * f%5e2 * C), L = 1 / (4&sdot;&pi;<sup>2</sup>&sdot;f<sup>2</sup>&sdot;C), H)
203         FORMULA_UNIT(C = 1 / (4 * pi%5e2 * f%5e2 * L), C = 1 / (4&sdot;&pi;<sup>2</sup>&sdot;f<sup>2</sup>&sdot;L), F)
204         TABLE
205         VARIABLE(f) CAPTION(Book::tr("resonance frequency")) ROW
206         VARIABLE(L) CAPTION(Book::tr("inductance")) ROW
207         VARIABLE(C) CAPTION(Book::tr("capacitance")) ROW
208         _TABLE
209         END;
210 }
211 
makeGeometryCirclePage()212 static QString makeGeometryCirclePage()
213 {
214     return
215         BEGIN
216         INDEX_LINK
217         TITLE(Book::tr("Circle"))
218         FORMULA(A = pi * r^2, A = &pi;&sdot;r<sup>2</sup>)
219         FORMULA(A = pi * (d/2)^2, A = &pi;&sdot;(d/2)<sup>2</sup>)
220         FORMULA(P = 2 * pi * r, P = 2&sdot;&pi;&sdot;r)
221         FORMULA(P = pi * d, P = &pi;&sdot;d)
222         TABLE
223         VARIABLE(A) CAPTION(Book::tr("area")) ROW
224         VARIABLE(P) CAPTION(Book::tr("perimeter")) ROW
225         VARIABLE(d) CAPTION(Book::tr("diameter")) ROW
226         VARIABLE(r) CAPTION(Book::tr("radius"))
227         _TABLE
228         END;
229 }
230 
makeGeometryConePage()231 static QString makeGeometryConePage()
232 {
233     return
234         BEGIN
235         INDEX_LINK
236         TITLE(Book::tr("Cone"))
237         FORMULA(V = 1/3 * pi * r%5e2 * h, V = (1/3)&sdot;pi&sdot;r<sup>2</sup>&sdot;h)
238         FORMULA(A = pi * r%5e2 + pi * r * s, A = &pi;&sdot;r<sup>2</sup> + &pi;&sdot;r&sdot;s)
239         FORMULA(A = pi * r%5e2 + pi * r * sqrt(r%5e2+h%5e2), A = &pi;&sdot;r<sup>2</sup> + &pi;&sdot;r&sdot;&radic;(r<sup>2</sup>+h<sup>2</sup>))
240         TABLE
241         VARIABLE(V) CAPTION(Book::tr("volume")) ROW
242         VARIABLE(A) CAPTION(Book::tr("surface area")) ROW
243         VARIABLE(r) CAPTION(Book::tr("radius")) ROW
244         VARIABLE(h) CAPTION(Book::tr("height")) ROW
245         VARIABLE(s) CAPTION(Book::tr("slant height"))
246         _TABLE
247         END;
248 }
249 
makeGeometryCubePage()250 static QString makeGeometryCubePage()
251 {
252     return
253         BEGIN
254         INDEX_LINK
255         TITLE(Book::tr("Cube"))
256         FORMULA(V = l%5e3, V = l<sup>3</sup>)
257         FORMULA(A = 6 * l%5e2, A = 6&sdot;l<sup>2</sup>)
258         FORMULA(Df = sqrt(2) * l, D<sub>f</sub> = &radic;2&sdot;l)
259         FORMULA(Ds = sqrt(3) * l, D<sub>s</sub> = &radic;3&sdot;l)
260         TABLE
261         VARIABLE(V) CAPTION(Book::tr("volume")) ROW
262         VARIABLE(A) CAPTION(Book::tr("surface area")) ROW
263         VARIABLE(D<sub>f</sub>) CAPTION(Book::tr("face diagonal")) ROW
264         VARIABLE(D<sub>s</sub>) CAPTION(Book::tr("space diagonal")) ROW
265         VARIABLE(l) CAPTION(Book::tr("edge length"))
266         _TABLE
267         END;
268 }
269 
makeGeometryCylinderPage()270 static QString makeGeometryCylinderPage()
271 {
272     return
273         BEGIN
274         INDEX_LINK
275         TITLE(Book::tr("Cylinder"))
276         FORMULA(V = pi * r%5e2 * h, V = &pi;&sdot;r<sup>2</sup>&sdot;h)
277         FORMULA(A = (2 * pi * r%5e2) + (2 * pi * r * h), A = 2&sdot;&pi;&sdot;r<sup>2</sup> + 2&sdot;&pi;&sdot;r&sdot;h)
278         TABLE
279         VARIABLE(V) CAPTION(Book::tr("volume")) ROW
280         VARIABLE(A) CAPTION(Book::tr("area")) ROW
281         VARIABLE(r) CAPTION(Book::tr("radius")) ROW
282         VARIABLE(h) CAPTION(Book::tr("height"))
283         _TABLE
284         END;
285 }
286 
makeGeometrySectorPage()287 static QString makeGeometrySectorPage()
288 {
289     return
290         BEGIN
291         INDEX_LINK
292         TITLE(Book::tr("Sector"))
293         FORMULA(A = 1/2 * L * r, A = 1/2&sdot;L&sdot;r)
294         FORMULA(A = theta/360 * pi * r^2, A = &theta;/360&sdot;&pi;&sdot;r<sup>2</sup>)
295         FORMULA(L = theta/180 * pi * r, L = &theta;/180&sdot;&pi;&sdot;r)
296         TABLE
297         VARIABLE(A) CAPTION(Book::tr("area")) ROW
298         VARIABLE(L) CAPTION(Book::tr("arc length")) ROW
299         VARIABLE(r) CAPTION(Book::tr("radius")) ROW
300         VARIABLE(&theta;) CAPTION(Book::tr("central angle (degrees)"))
301         _TABLE
302         END;
303 }
304 
makeGeometrySpherePage()305 static QString makeGeometrySpherePage()
306 {
307     return
308         BEGIN
309         INDEX_LINK
310         TITLE(Book::tr("Sphere"))
311         FORMULA(A = 4 * pi * r^2, A = 4&sdot;&pi;&sdot;r<sup>2</sup>)
312         FORMULA(A = pi *d^2, A = &pi;&sdot;d<sup>2</sup>)
313         FORMULA(V = 4/3 * pi * r^3, V = 4/3&sdot;&pi;&sdot;r<sup>3</sup>)
314         FORMULA(V = 1/6 * pi * d^3, V = 1/6&sdot;&pi;&sdot;d<sup>3</sup>)
315         TABLE
316         VARIABLE(A) CAPTION(Book::tr("area")) ROW
317         VARIABLE(V) CAPTION(Book::tr("volume")) ROW
318         VARIABLE(r) CAPTION(Book::tr("radius")) ROW
319         VARIABLE(d) CAPTION(Book::tr("diameter"))
320         _TABLE
321         END;
322 }
323 
makeRFAntennasPage()324 static QString makeRFAntennasPage()
325 {
326     return
327         BEGIN
328         INDEX_LINK
329         TITLE(Book::tr("Radio Frequency"))
330         FORMULA_UNIT(Pd = Pin / (4 * pi * r%5e2), Pd = P<sub>in</sub> / (4&sdot;&pi;&sdot;r<sup>2</sup>), W&sdot;m<sup>-2</sup>)
331         FORMULA_UNIT(E = sqrt(Pd * 120 * pi), E = &radic;(P<sub>d</sub>&sdot;120&sdot;&pi;), V&sdot;m<sup>-1</sup>)
332         FORMULA_UNIT(E = sqrt((Pin * 120 * pi) / (4 * pi * r%5e2)), E = &radic;[(P<sub>in</sub>&sdot;120&sdot;&pi;) / (4&sdot;&pi;&sdot;r<sup>2</sup>)], V&sdot;m<sup>-1</sup>)
333         FORMULA_UNIT(E = sqrt(30 * Pin) / r, E = &radic;(30&sdot;P<sub>in</sub>) / r, V&sdot;m<sup>-1</sup>)
334         FORMULA_UNIT(Ed = E * sqrt(D), Ed = E&sdot;&radic;D, V&sdot;m<sup>-1</sup>)
335         FORMULA_UNIT(Edp = E * sqrt(1.64), Edp = E&sdot;&radic;1.64, V&sdot;m<sup>-1</sup>)
336         END;
337 }
338 
makeRFImpedancePage()339 static QString makeRFImpedancePage()
340 {
341     return
342         BEGIN
343         INDEX_LINK
344         TITLE(Book::tr("Characteristic Impedance (coax)"))
345         FORMULA_UNIT(Zo = 59.959 / sqrt(er) * ln(d1/d2), Z<sub>0</sub> = 59.959 / &radic;e<sub>r</sub> &sdot; ln(d<sub>1</sub>/d<sub>2</sub>), &Omega;)
346         TABLE
347         VARIABLE(e<sub>r) CAPTION(Book::tr("dielectric constant")) ROW
348         VARIABLE(d<sub>1) CAPTION(Book::tr("outer conductor's inner diameter")) ROW
349         VARIABLE(d<sub>2</sub>) CAPTION(Book::tr("inner conductor's outer diameter"))
350         _TABLE
351         END;
352 }
353 
makeRFPropagationPage()354 static QString makeRFPropagationPage()
355 {
356     return
357         BEGIN
358         INDEX_LINK
359         TITLE(Book::tr("Velocity of Propagation (coax)"))
360         SUBTITLE(V<sub>p</sub> = c / &radic;e<sub>r</sub>)
361         FORMULA_UNIT(Vp = 3e8 / sqrt(er), V<sub>p</sub> = 3e8 / &radic;e<sub>r</sub>, m&sdot;s<sup>-1</sup>)
362         FORMULA_UNIT(Vp = 299792458 / sqrt(er), V<sub>p</sub> = 299792458 / &radic;e<sub>r</sub>, m&sdot;s<sup>-1</sup>)
363         FORMULA_UNIT(Vp = 983571056.43045 / sqrt(er), V<sub>p</sub> = 983571056.43045 / &radic;e<sub>r</sub>, ft&sdot;s<sup>-1</sup>)
364         TABLE
365         VARIABLE(c) CAPTION(Book::tr("speed of light")) ROW
366         VARIABLE(e) CAPTION(Book::tr("dielectric constant")) ROW
367         _TABLE
368         END;
369 }
370 
makeRFSWRPage()371 static QString makeRFSWRPage()
372 {
373     return
374         BEGIN
375         INDEX_LINK
376         TITLE(Book::tr("Standing Wave Ratio & Return Loss"))
377         FORMULA(SWR = (1+r) / (1-r), SWR = (1 + &rho;) / (1 - &rho;))
378         FORMULA(r = (SWR-1) / (SWR+1), &rho; = (SWR - 1) / (SWR + 1))
379         FORMULA(r = (Z-1) / (Z+1), &rho; = (Z - 1) / (Z + 1))
380         FORMULA_UNIT(Z = (1+r) / (1-r), Z = (1 + &rho;) / (1 - &rho;), &Omega;)
381         FORMULA_UNIT(RL = -20 * log(r), R<sub>L</sub> = -20&sdot;log(&rho;), dB)
382         FORMULA_UNIT(RL = -20 * log((SWR-1)/(SWR+1)), R<sub>L</sub> = -20&sdot;log[(SWR - 1) / (SWR + 1)], dB)
383         FORMULA_UNIT(Pr = Pin * r%5e2, P<sub>r</sub> = P<sub>in</sub>&sdot;&rho;<sup>2</sup>, W)
384         FORMULA_UNIT(Pt = Pin * (1-r%5e2), P<sub>t</sub> = P<sub>in</sub>&sdot;(1-&rho;<sup>2</sup>), W)
385         TABLE
386         VARIABLE(P<sub>in</sub>) CAPTION(Book::tr("input power") + " (W)") ROW
387         VARIABLE(P<sub>r</sub>) CAPTION(Book::tr("reflected power") + " (W)") ROW
388         VARIABLE(P<sub>t</sub>) CAPTION(Book::tr("transmitted power") + " (W)") ROW
389         VARIABLE(R<sub>L</sub>) CAPTION(Book::tr("return loss") + " (dB)") ROW
390         VARIABLE(&rho;) CAPTION(Book::tr("reflection coefficient")) ROW
391         VARIABLE(SWR) CAPTION(Book::tr("standing wave ratio")) ROW
392         VARIABLE(Z) CAPTION(Book::tr("normalized impedance")) ROW
393         _TABLE
394         END;
395 }
396 
makeRFWavelengthPage()397 static QString makeRFWavelengthPage()
398 {
399     return
400         BEGIN
401         INDEX_LINK
402         TITLE(Book::tr("Free Space Wavelength"))
403         SUBTITLE(&lambda;<sub>0</sub> = c / f)
404         FORMULA_UNIT(L = 3e8 / f, L = 3&times;10<sup>8</sup> / f, m)
405         FORMULA_UNIT(L = 299792458 / f, L = 299792458 / f, m)
406         FORMULA_UNIT(L = 983571056.43045 / f, L = 983571056.43045 / f, ft)
407         TABLE
408         VARIABLE(f) CAPTION(Book::tr("frequency (Hz)")) ROW
409         _TABLE
410         END;
411 }
412 
makeUnitsTemperaturePage()413 static QString makeUnitsTemperaturePage()
414 {
415     return
416         BEGIN
417         INDEX_LINK
418         TITLE(Book::tr("Temperature"))
419         FORMULA(Tf = 1.8 * Tc + 32, T<sub>f</sub> = 1.8 * T<sub>c</sub> + 32)
420         FORMULA(Tk = Tc + 273.15, T<sub>k</sub> = T<sub>c</sub> + 273.15)
421         FORMULA(Tc = (Tf - 32) / 1.8, T<sub>c</sub> = (T<sub>f</sub> - 32) / 1.8)
422         FORMULA(Tc = Tk - 273.15, T<sub>c</sub> = T<sub>k</sub> - 273.15)
423         TABLE
424         VARIABLE(T<sub>c</sub>) CAPTION(Book::tr("temperature") + QString::fromUtf8(" (°C)")) ROW
425         VARIABLE(T<sub>f</sub>) CAPTION(Book::tr("temperature") + QString::fromUtf8(" (°F)")) ROW
426         VARIABLE(T<sub>k</sub>) CAPTION(Book::tr("temperature") + " (K)")
427         _TABLE
428         END;
429 }
430 
createPages()431 void Book::createPages()
432 {
433     addPage("index", &makeIndexPage);
434     addPage("algebra/quadratic-equation", &makeAlgebraQuadraticEquationPage);
435     addPage("algebra/log-base-conversion", &makeAlgebraLogBaseConversionPage);
436     addPage("electronics/ohmslaw", &makeElectronicsOhmsLawPage);
437     addPage("electronics/power", &makeElectronicsPowerPage);
438     addPage("electronics/reactance", &makeElectronicsReactancePage);
439     addPage("electronics/resonance", &makeElectronicsResonancePage);
440     addPage("geometry/circle", &makeGeometryCirclePage);
441     addPage("geometry/cone", &makeGeometryConePage);
442     addPage("geometry/cube", &makeGeometryCubePage);
443     addPage("geometry/cylinder", &makeGeometryCylinderPage);
444     addPage("geometry/sector", &makeGeometrySectorPage);
445     addPage("geometry/sphere", &makeGeometrySpherePage);
446     addPage("rf/antennas", &makeRFAntennasPage);
447     addPage("rf/impedance", &makeRFImpedancePage);
448     addPage("rf/propagation", &makeRFPropagationPage);
449     addPage("rf/swr", &makeRFSWRPage);
450     addPage("rf/wavelength", &makeRFWavelengthPage);
451     addPage("units/temperature", &makeUnitsTemperaturePage);
452 }
453