author | Dan Fuhry <dan@enanocms.org> |
Tue, 08 May 2012 01:38:29 -0400 | |
changeset 4 | bb3789db954a |
parent 0 | 16db14829751 |
permissions | -rw-r--r-- |
0 | 1 |
<?php |
2 |
||
3 |
if ( isset($_POST['text']) ) |
|
4 |
{ |
|
5 |
$text = explode("\n", str_replace("\r\n", "\n", trim($_POST['text']))); |
|
6 |
$chordline = false; |
|
7 |
echo "<pre>"; |
|
8 |
foreach ( $text as $i => $line ) |
|
9 |
{ |
|
10 |
if ( $i == 0 ) |
|
11 |
{ |
|
12 |
echo "<halftone title=\"" . htmlspecialchars(htmlspecialchars($line)) . "\">\n"; |
|
13 |
} |
|
14 |
else if ( trim($line) == "" ) |
|
15 |
{ |
|
16 |
// do nothing |
|
17 |
} |
|
18 |
else if ( preg_match('/^(.*?(?:Verse|Chorus|Bridge).*?):\s*$/i', $line, $match) ) |
|
19 |
{ |
|
20 |
if ( $chordline ) |
|
21 |
{ |
|
22 |
$chordstack = preg_split("/([ \t]+)/", $chordline); |
|
23 |
echo '(' . implode(") (", $chordstack) . ")\n"; |
|
24 |
$chordline = false; |
|
25 |
} |
|
26 |
||
27 |
if ( $i > 3 ) |
|
28 |
echo "\n"; |
|
29 |
echo "= {$match[1]} =\n"; |
|
30 |
} |
|
31 |
else if ( preg_match('/^\((.*?(?:Verse|Chorus|Bridge).*?)\)$/i', $line, $match) ) |
|
32 |
{ |
|
33 |
if ( $chordline ) |
|
34 |
{ |
|
35 |
$chordstack = preg_split("/([ \t]+)/", $chordline); |
|
36 |
echo '(' . implode(") (", $chordstack) . ")\n"; |
|
37 |
$chordline = false; |
|
38 |
} |
|
39 |
echo "\n[{$match[1]}]\n"; |
|
40 |
} |
|
4
bb3789db954a
Several bugfixes and improvements.
Dan Fuhry <dan@enanocms.org>
parents:
0
diff
changeset
|
41 |
else if ( preg_match('/^(\s*([A-G][#b]?(?:[Mm]?7?|2|5|6|add9|sus4|[Mm]aj[79]|dim|aug)?)(\/[A-G][#b]?)?\s*)*$/', $line) ) |
0 | 42 |
{ |
43 |
if ( $chordline ) |
|
44 |
{ |
|
45 |
// we have two chord lines in a row... treat the last one as a transition |
|
46 |
$chordstack = preg_split("/([ \t]+)/", $chordline); |
|
47 |
echo '(' . implode(") (", $chordstack) . ")\n"; |
|
48 |
} |
|
49 |
||
50 |
// chord line |
|
51 |
$chordline = $line; |
|
52 |
} |
|
53 |
else if ( $chordline && trim($line) ) |
|
54 |
{ |
|
55 |
// combine chord line with text line |
|
56 |
$chordline = preg_split('/([ \t]+)/', $chordline, -1, PREG_SPLIT_DELIM_CAPTURE); |
|
57 |
||
58 |
if ( count($chordline) >= 2 && preg_match('/^\s*$/', $chordline[0]) && preg_match('/^\s*$/', $chordline[1]) ) |
|
59 |
{ |
|
60 |
$merger = array_shift($chordline); |
|
61 |
$chordline[0] .= $merger; |
|
62 |
} |
|
63 |
||
64 |
$chordstack = array(); |
|
65 |
for ( $j = 0; $j < count($chordline); $j++ ) |
|
66 |
{ |
|
67 |
if ( $j == 0 && !preg_match('/^\s*$/', $chordline[$j]) ) |
|
68 |
{ |
|
69 |
$chordstack[] = "({$chordline[$j]})"; |
|
70 |
if ( isset($chordline[$j+1]) ) |
|
71 |
{ |
|
72 |
$chordline[$j+1] .= str_repeat(' ', strlen($chordline[$j])); |
|
73 |
} |
|
74 |
continue; |
|
75 |
} |
|
76 |
// insert line up until this chord |
|
77 |
$chordstack[] = substr($line, 0, strlen($chordline[$j])); |
|
78 |
// chomp off the front of the line |
|
79 |
$line = substr($line, strlen($chordline[$j])); |
|
80 |
// insert this chord |
|
81 |
if ( isset($chordline[++$j]) ) |
|
82 |
{ |
|
83 |
if ( !empty($chordline[$j]) ) |
|
84 |
{ |
|
85 |
$chordstack[] = "({$chordline[$j]})"; |
|
86 |
if ( isset($chordline[$j+1]) ) |
|
87 |
{ |
|
88 |
$chordline[$j+1] .= str_repeat(' ', strlen($chordline[$j])); |
|
89 |
} |
|
90 |
} |
|
91 |
} |
|
92 |
} |
|
93 |
$chordstack[] = $line; |
|
94 |
echo implode("", $chordstack) . "\n"; |
|
95 |
$chordline = false; |
|
96 |
} |
|
97 |
else |
|
98 |
{ |
|
99 |
// assume it's a lyric line without chords...? |
|
100 |
echo "$line\n"; |
|
101 |
} |
|
102 |
} |
|
103 |
||
104 |
echo "</halftone>"; |
|
105 |
echo "</pre>"; |
|
106 |
exit; |
|
107 |
} |
|
108 |
||
109 |
?> |
|
110 |
<form method="post"> |
|
111 |
<p><textarea name="text" rows="20" cols="100"></textarea></p> |
|
112 |
<p><input type="submit" value="Make Halftone" /></p> |
|
113 |
</form> |