print_wiki: simplify template handling

Add test_state_to_template() and use it everywhere to select the correct
template. This also enables the use of the new states in all tables.

Corresponding to flashrom svn r1804.

Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
diff --git a/print_wiki.c b/print_wiki.c
index cad6fef..b01ab75 100644
--- a/print_wiki.c
+++ b/print_wiki.c
@@ -95,6 +95,21 @@
 ! align=\"center\" | IDs\n\
 ! align=\"center\" | Status\n\n";
 
+/* The output of this module relies on MediaWiki templates to select special formatting styles for table cells
+ * reflecting the test status of the respective hardware. This functions returns the correct template name for
+ * the supplied enum test_state. */
+static const char *test_state_to_template(enum test_state test_state)
+{
+	switch (test_state) {
+	case OK: return "OK";
+	case BAD: return "No";
+	case NA: return "NA";
+	case DEP: return "Dep";
+	case NT:
+	default: return "?3";
+	}
+}
+
 #if CONFIG_INTERNAL == 1
 static const char laptop_intro[] = "\n== Supported laptops/notebooks ==\n\n\
 In general, flashing laptops is more difficult because laptops\n\n\
@@ -133,10 +148,10 @@
 			color = !color;
 
 		printf("|- bgcolor=\"#%s\"\n| %s || %s "
-		       "|| %04x:%04x || %s\n", (color) ? "eeeeee" : "dddddd",
+		       "|| %04x:%04x || {{%s}}\n", (color) ? "eeeeee" : "dddddd",
 		       e[i].vendor_name, e[i].device_name,
 		       e[i].vendor_id, e[i].device_id,
-		       (e[i].status == OK) ? "{{OK}}" : "{{?3}}");
+		       test_state_to_template(e[i].status));
 
 		if (((i % lines_per_col) + 1) == lines_per_col)
 			printf("\n|}\n\n");
@@ -202,8 +217,7 @@
 		       b[k].lb_vendor ? b[k].lb_vendor : "",
 		       b[k].lb_vendor ? ":" : "",
 		       b[k].lb_vendor ? b[k].lb_part : "",
-		       (boards[i].working == OK) ? "OK" :
-		       (boards[i].working == NT) ? "?3" : "No");
+		       test_state_to_template(boards[i].working));
 
 		if (boards[i].note) {
 			num_notes++;
@@ -286,46 +300,18 @@
 			c = !c;
 
 		old = f;
-		const char *probe, *read, *write, *erase;
-		switch (f->tested.probe) {
-			case OK: probe = "OK"; break;
-			case BAD: probe = "No"; break;
-			case NA: probe = "NA"; break;
-			case DEP: probe = "Dep"; break;
-			default: probe = "?3"; break;
-		}
-		switch (f->tested.read) {
-			case OK: read = "OK"; break;
-			case BAD: read = "No"; break;
-			case NA: read = "NA"; break;
-			case DEP: read = "Dep"; break;
-			default: read = "?3"; break;
-		}
-		switch (f->tested.erase) {
-			case OK: erase = "OK"; break;
-			case BAD: erase = "No"; break;
-			case NA: erase = "NA"; break;
-			case DEP: erase = "Dep"; break;
-			default: erase = "?3"; break;
-		}
-		switch (f->tested.write) {
-			case OK: write = "OK"; break;
-			case BAD: write = "No"; break;
-			case NA: write = "NA"; break;
-			case DEP: write = "Dep"; break;
-			default: write = "?3"; break;
-		}
 		s = flashbuses_to_text(f->bustype);
 		sprintf(vmin, "%0.03f", f->voltage.min / (double)1000);
 		sprintf(vmax, "%0.03f", f->voltage.max / (double)1000);
-		/* '{{%s}}' is used in combination with 'OK', 'No' and '?3' to
-		 * select special formatting templates for the bg color. */
 		printf("|- bgcolor=\"#%s\"\n| %s || %s || align=\"right\" | %d "
 		       "|| %s || {{%s}} || {{%s}} || {{%s}} || {{%s}}"
 		       "|| %s || %s \n",
 		       (c == 1) ? "eeeeee" : "dddddd", f->vendor, f->name,
 		       f->total_size, s,
-		       probe, read, erase, write,
+		       test_state_to_template(f->tested.probe),
+		       test_state_to_template(f->tested.read),
+		       test_state_to_template(f->tested.erase),
+		       test_state_to_template(f->tested.write),
 		       f->voltage.min ? vmin : "?",
 		       f->voltage.max ? vmax : "?");
 		free(s);
@@ -366,7 +352,7 @@
 		if (i == 0)
 			printf("| rowspan=\"%u\" | %s |", count, prog.name);
 		printf("| %s || %s || %04x:%04x || {{%s}}\n", devs[i].vendor_name, devs[i].device_name,
-		       devs[i].vendor_id, devs[i].device_id, (devs[i].status == NT) ? "?3" : "OK");
+		       devs[i].vendor_id, devs[i].device_id, test_state_to_template(devs[i].status));
 	}
 }