function sheaf_hook_JavaScript($s) { $s = sheaf::r($s, "\r", ""); $inp = $s; $s = ""; $flag = array('line' => 0, 'delimited' => 0, 'literal' => 'none', 'escaped' => 0); $lineComment = 'false'; for ($i = 0; $i < strlen($inp); $i++) { $c = $inp[$i]; // Handle single-line newline-terminated comments. if ($c === '#' && $flag['line'] == 0 && $flag['delimited'] == 0 && $flag['literal'] == 'none') { $s .= '<span class="comment">'; $s .= $c; $flag['line'] = 1; } else { if ($c == "\n" && $flag['line'] == 1) { $s .= '</span>'; $s .= $c; $flag['line'] = 0; } else { if ($c == '"') { if ($flag['line'] == 0 && $flag['delimited'] == 0 && $flag['literal'] == 'none') { $s .= '<span class="literal">'; $s .= $c; $flag['literal'] = '"'; } else { if ($flag['literal'] == '"') { $s .= $c; $s .= '</span>'; $flag['literal'] = 'none'; } } } else { if ($c == "'") { if ($flag['line'] == 0 && $flag['delimited'] == 0 && $flag['literal'] == 'none') { $s .= '<span class="literal">'; $s .= $c; $flag['literal'] = "'"; } else { if ($flag['literal'] == "'") { $s .= $c; $s .= '</span>'; $flag['literal'] = 'none'; } } } else { if ($c === " ") { $s .= " "; } else { if ($c === "@") { // Handle built in commands. $handled = false; $commands = array('function', 'return', 'for', 'while', 'break', 'continue', 'if', 'else'); $builtins = array('exit', 'print', 'len', 'range', 'max', 'min', 'pow', 'sum', 'int', 'type', 'str', 'dict', 'list', 'tuple', 'None', 'True', 'False'); foreach ($builtins as $prefix) { if (sheaf::startsWith(substr($inp, $i), '@' . $prefix)) { $s .= '<span class="builtin">' . $prefix . '</span>'; $i += strlen('@' . $prefix) - 1; $handled = true; break; } } foreach ($commands as $prefix) { if (sheaf::startsWith(substr($inp, $i), '@' . $prefix)) { $s .= '<span class="keyword">' . $prefix . '</span>'; $i += strlen('@' . $prefix) - 1; $handled = true; break; } } if (!$handled) { $s .= $c; } } else { $s .= $c; } } } } } } } $s = sheaf::r($s, ">>>", '<span style="color:#ABABAB;">>>></span>'); $s = sheaf::r($s, "\n", "<br/>"); return $s; }
function sheaf_hook_Haskell($s) { $s = sheaf::r($s, "\r", ""); $inp = $s; $s = ""; $flag = array('line' => 0, 'delimited' => 0, 'literal' => 'none', 'escaped' => 0); $lineComment = 'false'; for ($i = 0; $i < strlen($inp); $i++) { $c = $inp[$i]; // Handle single-line newline-terminated comments. if (($c === '#' || $c === "-" && $i < strlen($inp) - 1 && $inp[$i + 1] == "-") && $flag['line'] == 0 && $flag['delimited'] == 0 && $flag['literal'] == 'none') { $s .= '<span class="comment">'; $s .= $c; $flag['line'] = 1; } else { if ($c == "\n" && $flag['line'] == 1) { $s .= '</span>'; $s .= $c; $flag['line'] = 0; } else { if ($c == '"') { if ($flag['line'] == 0 && $flag['delimited'] == 0 && $flag['literal'] == 'none') { $s .= '<span class="literal">'; $s .= $c; $flag['literal'] = '"'; } else { if ($flag['literal'] == '"') { $s .= $c; $s .= '</span>'; $flag['literal'] = 'none'; } else { $s .= $c; } } } else { if ($c == "'" && strlen($inp) > $i + 2 && $inp[$i + 2] == "'") { if ($flag['line'] == 0 && $flag['delimited'] == 0 && $flag['literal'] == 'none') { $s .= '<span class="literal">' . $inp[$i + 1] . '</span>'; $i += 2; } } else { if ($c === " ") { $s .= " "; } else { if ($c === "@") { // Handle built in commands. $handled = false; $commands = array('module', 'where', 'import', 'data', 'deriving', 'type', 'class', 'instance', 'if', 'then', 'else', 'let', 'in'); $builtins = array(); foreach ($builtins as $prefix) { if (sheaf::startsWith(substr($inp, $i), '@' . $prefix)) { $s .= '<span class="builtin">' . $prefix . '</span>'; $i += strlen('@' . $prefix) - 1; $handled = true; break; } } foreach ($commands as $prefix) { if (sheaf::startsWith(substr($inp, $i), '@' . $prefix)) { $s .= '<span class="keyword">' . $prefix . '</span>'; $i += strlen('@' . $prefix) - 1; $handled = true; break; } } if (!$handled) { $s .= $c; } } else { $s .= $c; } } } } } } } $s = sheaf::r($s, "*>", '<span style="color:#ABABAB;">*></span>'); $s = sheaf::r($s, "\n", "<br/>"); return $s; }