JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
enc_htmlbrtab: convert tabs too (not just spaces)
authorJason Woofenden <jason@jasonwoof.com>
Fri, 5 Sep 2014 16:03:46 +0000 (12:03 -0400)
committerJason Woofenden <jason@jasonwoof.com>
Fri, 5 Sep 2014 16:03:46 +0000 (12:03 -0400)
encode.php

index e79dae2..f5c1e24 100644 (file)
@@ -69,13 +69,13 @@ function enc_htmlbr($str) {
 }
 
 # Encode for output in html. Preserves newlines and indentation by converting
-# newlines to <br> and spaces at the begining of lines to &nbsp;&nbsp;
+# newlines to <br> and spaces/tabs at the begining of lines to &nbsp;s
 #
 # Example: <p>~foo htmlbrtab~</p>
 function enc_htmlbrtab($str) {
        $str = enc_htmlbr($str);
-       $space_to_nbsp = create_function('$matches', 'return str_repeat(\'&nbsp;\', strlen($matches[0]) * 2);');
-       $str = preg_replace_callback("|^ *|m", $space_to_nbsp, $str);
+       $whitespace_to_nbsp = create_function('$matches', '$count = 0; $chars = str_split($matches[0]); foreach ($chars as $c) { if ($c == " ") { $count += 2; } else if ($c == "\t") { $count += 8; } } return str_repeat("&nbsp;", $count);');
+       $str = preg_replace_callback("|^[ \t]+|m", $whitespace_to_nbsp, $str);
        return $str;
 }