--- C:/Documents and Settings/John/Bureau/textimage-6.x-2.1/textimage/textimage.module	Fri Feb 13 00:14:50 2009
+++ C:/www/website/mdelec/sites/all/modules/textimage/textimage.module	Sat Sep 26 10:48:27 2009
@@ -120,6 +120,7 @@
         'title' => '',
         'attributes' => array(),
         'getsize' => TRUE,
+        'image' => TRUE,
       ),
     ),
   );
@@ -224,6 +225,86 @@
 }
 
 /**
+ * Implementation of hook_filter().
+ */
+function textimage_filter($op, $delta = 0, $format = -1, $text = '') {
+  switch ($op) {
+    case 'list':
+      include_once('./'. drupal_get_path('module', 'textimage') .'/textimage_admin.inc');
+      
+      $filters = array();
+      foreach (textimage_get_presets() as $preset) {
+        if (isset($preset->settings['pattern']) && !empty($preset->settings['pattern'])) {
+          $filters[$preset->pid] = $preset->name;
+        }
+      }
+	  
+      return $filters;
+
+    case 'description':
+      $preset = _textimage_preset_load($delta);
+      return t("Replaces anything matching the regular expression: %pattern with the image generated by the '%presetname' textimage preset.", array('%pattern' => $preset['settings']['pattern'], '%presetname' => $preset->name));
+
+    case "process":
+      $preset = _textimage_preset_load($delta);
+      return preg_replace($preset['settings']['pattern'] .'Ue', 'textimage_title_convert($preset, "$0")', $text);
+
+    case 'no cache':
+      return TRUE;
+
+    default:
+      return $text;
+  }
+}
+
+/**
+ * Implementation of hook_filter_tips().
+ */
+function textimage_filter_tips($delta, $format, $long = FALSE) {
+  $preset = _textimage_preset_load($delta);
+  if ($long) {
+    return t('The textimage filter will replace headings matching the regular expression %pattern with images according to the settings of <a href="@preset-admin-url">the textimage preset %presetname</a>.', array('%pattern' => $preset['settings']['pattern'], '@preset-admin-url' => url('admin/settings/textimage/preset/'. $preset->pid . '/edit'), '%presetname' => $preset->name));
+  }
+  else {
+    return t("The textimage filter '%presetname' is enabled.", array('%presetname' => $preset->name));
+  }
+}
+
+function _textimage_strip_tags($text) {
+  return preg_replace('/<\/?(i|b|em|strong)>/', '', $text);
+}
+
+function _textimage_strip_accent($text) {
+  // Decode utf8
+  $text = utf8_decode($text);
+  
+  // Create conversion arrays
+  $with = array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ');
+  $none = array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','o','o','o','o','o','o','u','u','u','u','y','y');
+  
+  // Replace and utf8 encode
+  return utf8_encode(str_replace($with, $none, $text));
+}
+
+/**
+ * Turn a title into a textimage image.
+ */
+function textimage_title_convert($preset, $title) {
+  // Remove escapes from single quotes
+  $title =  preg_replace("/\\\'/","'", $title);
+  $title = _textimage_strip_tags($title);
+  
+  // Get plain text
+  preg_match('/^(<.*?>)*([^<]*)(<.*?>)*($)/s', $title, $matches);
+  
+  // Get path of image
+  $path = theme('textimage_image', $preset['pid'], $matches[2], array(), 'png', '', '', array(), TRUE, FALSE);
+  
+  // Set title
+  return '<div class="textimage-' . $preset['name'] . '" style="background-image: url(' . base_path() . $path .');">' . $title . '</div>';
+}
+
+/**
  * Menu Callback function converts the current textimage path into an image. On
  * first request, the image is returned to the browser from Drupal and then
  * saved to the disk. On subsequent requests (with Clean URLs enabled), the
@@ -247,7 +328,10 @@
  *
  */
 function textimage_image() {
-  $args = explode('/', str_replace(base_path() . file_directory_path() .'/textimage/', '', request_uri()));
+  global $language;
+  
+  
+  $args = explode('/', substr(request_uri(), stripos(request_uri(), file_directory_path() . '/textimage/') + strlen(file_directory_path() . '/textimage/')));
   // @TODO - Add support for non-clean urls.
 
   $preset = array_shift($args);
@@ -272,7 +356,11 @@
   if (!$img = textimage_build_image('url', $preset, $text, $additional_text, $format)) {
     return FALSE;
   }
-
+  
+  // Remove language for avoiding problem with goto and language prefix
+  $language->prefix = '';
+  $language->domain = '';
+  
   drupal_goto($img);
 }
 
@@ -323,7 +411,7 @@
 
   elseif (!$result) {
     drupal_access_denied();
-    return FALSE;
+	exit;
   }
 
   else {
@@ -385,6 +473,10 @@
 
   // Convert text case
   switch ($case) {
+    case 'upper_noaccent' :
+	  $text = _textimage_strip_accent($text);
+	  // No break here so handled by upper after
+	
     case 'upper':
       $text = drupal_strtoupper($text);
       break;
@@ -403,13 +495,8 @@
   }
 
   // Generate the textimage
-  $img = textimage_text_to_image($text, $size, $font, $color, $back_color, $angle, $maximum_width, $fixed_width, $align);
-
-  // Add margin
-  if ($margin_top || $margin_right || $margin_bottom || $margin_left) {
-    $img = textimage_image_add_margin($img, $margin_top, $margin_right, $margin_bottom, $margin_left, $back_color);
-  }
-
+  $img = textimage_text_to_image($text, $size, $font, $color, $back_color, $angle, $maximum_width, $fixed_width, $align, $margin_top, $margin_right, $margin_bottom, $margin_left);
+  
   // Add a border
   if ($stroke_width && $stroke_color) {
     $img = textimage_image_add_stroke($img, $stroke_width, $stroke_color);
@@ -653,7 +740,7 @@
  * @return $image
  *   A GD image resource.
  */
-function textimage_text_to_image($text, $fontsize, $font, $foreground_color = '#000000', $background_color = NULL, $angle = 0, $maximum_width = 0, $fixed_width = 0, $align = ALIGN_LEFT) {
+function textimage_text_to_image($text, $fontsize, $font, $foreground_color = '#000000', $background_color = NULL, $angle = 0, $maximum_width = 0, $fixed_width = 0, $align = ALIGN_LEFT, $margin_top = 0, $margin_right = 0, $margin_bottom = 0, $margin_left = 0) {
   // Set rotation angle.
   $q_angle = -$angle;
   while ($q_angle > 0 || $q_angle <= -90) {
@@ -723,8 +810,13 @@
   // Create the textimage.
   list($r, $g, $b) = _textimage_hex2rgb($foreground_color);
   $fore = imagecolorallocate($image, $r, $g, $b);
-
-  imagettftext($image, $fontsize, $q_angle, $x, $y, $fore, $font, $text);
+  
+  // Add margin
+  if ($margin_top || $margin_right || $margin_bottom || $margin_left) {
+    $image = textimage_image_add_margin($image, $margin_top, $margin_right, $margin_bottom, $margin_left, $background_color);
+  }
+  
+  imagettftext($image, $fontsize, $q_angle, $x + $margin_left, $y + $margin_top, $fore, $font, $text);
   if ($rotation !== 0) {
     $image = imagerotate($image, $rotation, 0);
   }
@@ -864,9 +956,13 @@
 /**
  * Theme function for displaying textimages
  */
-function theme_textimage_image($preset, $text, $additional_text = array(), $format = 'png', $alt = '', $title = '', $attributes = array(), $getsize = TRUE) {
+function theme_textimage_image($preset, $text, $additional_text = array(), $format = 'png', $alt = '', $title = '', $attributes = array(), $getsize = TRUE, $image = TRUE) {
   if (!$path = textimage_build_image('theme', $preset, $text, $additional_text, $format)) {
     return FALSE;
   }
-  return theme('image', $path, $alt, $title, $attributes, $getsize);
+  if ($image) {
+    return theme('image', $path, $alt, $title, $attributes, $getsize);
+  }
+  
+  return $path;
 }
