- printf "<style name=\"%s.%d\" parent=\"%s\">\n",
- $baseTheme, $hue, $baseTheme;
- }
- else {
- printf "<style name=\"%s\">\n",
- $baseTheme;
- printf " <item name=\"windowActionBar\">false</item>\n";
- printf " <item name=\"windowNoTitle\">true</item>\n";
- printf " <item name=\"textColor\">#d0000000</item>\n";
+ $result .= sprintf "<style name=\"%s.%d\" parent=\"%s\">\n",
+ $baseTheme, $hue, $baseTheme;
+ }
+ else {
+ $result .= sprintf "<style name=\"%s\">\n",
+ $baseTheme;
+ $result .= " <item name=\"windowActionBar\">false</item>\n";
+ $result .= " <item name=\"windowNoTitle\">true</item>\n";
+ $result .= " <item name=\"textColor\">#d0000000</item>\n";
+ }
+ my $S = 0.845;
+ $result .= sprintf " <item name=\"colorPrimary\">#%s</item>\n",
+ hslHex($hue, $S, $l1);
+ $result .= sprintf " <item name=\"colorPrimaryTransparent\">#00%s</item>\n",
+ hslHex($hue, $S, $l1);
+ $result .= sprintf " <item name=\"colorAccent\">#%s</item>\n",
+ hslHex($hue, $S, $l2);
+ $result .= " <item name=\"drawer_background\">#ffffffff</item>\n";
+ $result .= sprintf " <item name=\"table_row_dark_bg\">#%s</item>\n",
+ hslHex($hue, $S, $l3);
+ $result .= sprintf " <item name=\"table_row_light_bg\">#%s</item>\n",
+ hslHex($hue, $S, $l4);
+ $result .= "</style>\n";
+
+ return $result;
+}
+
+my $xml = shift;
+
+if ($xml) {
+ my $start_marker = '<!-- theme list start -->';
+ my $end_marker = '<!-- theme list end -->';
+ my ($fh, $filename) = tempfile(basename($0).'.XXXXXXXX', DIR => dirname($xml));
+ open(my $in, '<', $xml);
+ my $state = 'waiting-for-start-marker';
+ while (<$in>) {
+ if ( $state eq 'waiting-for-start-marker' ) {
+ print $fh $_;
+ $state = 'skipping-styles' if /^\s*\Q$start_marker\E/;
+ next;
+ }
+ if ( $state eq 'skipping-styles' ) {
+ next unless /^\s*\Q$end_marker\E/;
+ outputThemes($fh);
+ print $fh $_;
+ $state = 'copying-the-rest';
+ next;
+ }
+ if ( $state eq 'copying-the-rest') {
+ print $fh $_;
+ next;
+ }
+
+ die "Unexpected state '$state'";