Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v4.6-rc4 108 lines 2.9 kB view raw
1#!/bin/sh 2# 3# Usage: sh htmlqqz.sh file 4# 5# Extracts and converts quick quizzes in a proto-HTML document file.htmlx. 6# Commands, all of which must be on a line by themselves: 7# 8# "<p>@@QQ@@": Start of a quick quiz. 9# "<p>@@QQA@@": Start of a quick-quiz answer. 10# "<p>@@QQE@@": End of a quick-quiz answer, and thus of the quick quiz. 11# "<p>@@QQAL@@": Place to put quick-quiz answer list. 12# 13# Places the result in file.html. 14# 15# This program is free software; you can redistribute it and/or modify 16# it under the terms of the GNU General Public License as published by 17# the Free Software Foundation; either version 2 of the License, or 18# (at your option) any later version. 19# 20# This program is distributed in the hope that it will be useful, 21# but WITHOUT ANY WARRANTY; without even the implied warranty of 22# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23# GNU General Public License for more details. 24# 25# You should have received a copy of the GNU General Public License 26# along with this program; if not, you can access it online at 27# http://www.gnu.org/licenses/gpl-2.0.html. 28# 29# Copyright (c) 2013 Paul E. McKenney, IBM Corporation. 30 31fn=$1 32if test ! -r $fn.htmlx 33then 34 echo "Error: $fn.htmlx unreadable." 35 exit 1 36fi 37 38echo "<!-- DO NOT HAND EDIT. -->" > $fn.html 39echo "<!-- Instead, edit $fn.htmlx and run 'sh htmlqqz.sh $fn' -->" >> $fn.html 40awk < $fn.htmlx >> $fn.html ' 41 42state == "" && $1 != "<p>@@QQ@@" && $1 != "<p>@@QQAL@@" { 43 print $0; 44 if ($0 ~ /^<p>@@QQ/) 45 print "Bad Quick Quiz command: " NR " (expected <p>@@QQ@@ or <p>@@QQAL@@)." > "/dev/stderr" 46 next; 47} 48 49state == "" && $1 == "<p>@@QQ@@" { 50 qqn++; 51 qqlineno = NR; 52 haveqq = 1; 53 state = "qq"; 54 print "<p><a name=\"Quick Quiz " qqn "\"><b>Quick Quiz " qqn "</b>:</a>" 55 next; 56} 57 58state == "qq" && $1 != "<p>@@QQA@@" { 59 qq[qqn] = qq[qqn] $0 "\n"; 60 print $0 61 if ($0 ~ /^<p>@@QQ/) 62 print "Bad Quick Quiz command: " NR ". (expected <p>@@QQA@@)" > "/dev/stderr" 63 next; 64} 65 66state == "qq" && $1 == "<p>@@QQA@@" { 67 state = "qqa"; 68 print "<br><a href=\"#qq" qqn "answer\">Answer</a>" 69 next; 70} 71 72state == "qqa" && $1 != "<p>@@QQE@@" { 73 qqa[qqn] = qqa[qqn] $0 "\n"; 74 if ($0 ~ /^<p>@@QQ/) 75 print "Bad Quick Quiz command: " NR " (expected <p>@@QQE@@)." > "/dev/stderr" 76 next; 77} 78 79state == "qqa" && $1 == "<p>@@QQE@@" { 80 state = ""; 81 next; 82} 83 84state == "" && $1 == "<p>@@QQAL@@" { 85 haveqq = ""; 86 print "<h3><a name=\"Answers to Quick Quizzes\">" 87 print "Answers to Quick Quizzes</a></h3>" 88 print ""; 89 for (i = 1; i <= qqn; i++) { 90 print "<a name=\"qq" i "answer\"></a>" 91 print "<p><b>Quick Quiz " i "</b>:" 92 print qq[i]; 93 print ""; 94 print "</p><p><b>Answer</b>:" 95 print qqa[i]; 96 print ""; 97 print "</p><p><a href=\"#Quick%20Quiz%20" i "\"><b>Back to Quick Quiz " i "</b>.</a>" 98 print ""; 99 } 100 next; 101} 102 103END { 104 if (state != "") 105 print "Unterminated Quick Quiz: " qqlineno "." > "/dev/stderr" 106 else if (haveqq) 107 print "Missing \"<p>@@QQAL@@\", no Quick Quiz." > "/dev/stderr" 108}'