|
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 } |
|
41 else if ( preg_match('/^(\s*([A-G][#b]?(?:m?7?|2|add9|sus4|[Mm]aj[79])?)(\/[A-G][#b]?)?\s*)*$/', $line) ) |
|
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> |