? regex_en.patch
Index: regex.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/regex/regex.info,v
retrieving revision 1.1
diff -u -r1.1 regex.info
--- regex.info	7 Feb 2009 16:40:38 -0000	1.1
+++ regex.info	11 Feb 2009 19:57:34 -0000
@@ -1,6 +1,6 @@
-; $Id: regex.info,v 1.1 2009/02/07 16:40:38 sweetchack Exp $
-name = Regular Expression Tester
-description = "User Interface for testing the regular expressions(RegEx) with the internal PHP functions"
-package = Development
-core = 6.x
-php = 5.1
\ No newline at end of file
+; $Id: regex.info,v 1.1 2009/02/07 16:40:38 sweetchack Exp $
+name = Regular Expression Tester
+description = "User Interface for testing the regular expressions(RegEx) with the internal PHP functions"
+package = Development
+core = 6.x
+php = 5.1
Index: regex.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/regex/regex.js,v
retrieving revision 1.1
diff -u -r1.1 regex.js
--- regex.js	7 Feb 2009 16:40:38 -0000	1.1
+++ regex.js	11 Feb 2009 19:57:34 -0000
@@ -1,106 +1,104 @@
-// $Id: regex.js,v 1.1 2009/02/07 16:40:38 sweetchack Exp $
-
-var RegEx = RegEx || {};
-
-RegEx.ToggleReplacementVisibility = function() {
-  //A választott függvény nevének a kinyerése.
-  var $selector = "form#regex-regex-tester-form #edit-function";
-  var $fun = $($selector).attr("value");
-
-  //A replacement input mező láthatósága a szerint változzon,
-  //hogy a függvény nevében szerepel-e a '_replace' karakterlánc
-  //$selector = "form#regex-regex-tester-form :input#edit-replacement";
-  $selector = "form#regex-regex-tester-form #edit-replacement-wrapper";
-  if ($fun.match("_replace") != null ) {
-    $($selector).show("fast");
-  }
-  else 	{
-    $($selector).hide("fast");
-  }
-}
-
-RegEx.ToggleFlags = function() {
-  //A választott függvény nevének a kinyerése.
-  var $selector = "form#regex-regex-tester-form #edit-function";
-  var $fun = $($selector).attr("value");
-
-  //Az összes flag
-  var $flags = new Array(
-    "PREG_PATTERN_ORDER",
-    "PREG_SET_ORDER",
-    "PREG_OFFSET_CAPTURE",
-    "PREG_SPLIT_NO_EMPTY",
-    "PREG_SPLIT_DELIM_CAPTURE",
-    "PREG_SPLIT_OFFSET_CAPTURE",
-    "mb_ereg_replace_i",
-    "mb_ereg_replace_x",
-    "mb_ereg_replace_m",
-    "mb_ereg_replace_p",
-    "mb_ereg_replace_e"
-  );
-  //Ebben lesznek azok amik az adott függvény esetén választhatóak
-  $flags_to_show = new Array();
-
-  if ($fun.match("preg_match")) {
-    $flags_to_show[0] = "PREG_PATTERN_ORDER";
-    $flags_to_show[1] = "PREG_SET_ORDER";
-    $flags_to_show[2] = "PREG_OFFSET_CAPTURE";
-  }
-  else if ($fun.match("preg_split")) {
-    $flags_to_show[0] = "PREG_SPLIT_DELIM_CAPTURE";
-    $flags_to_show[1] = "PREG_SPLIT_NO_EMPTY";
-    $flags_to_show[2] = "PREG_SPLIT_OFFSET_CAPTURE";
-  }
-  else if ($fun.match("mb_ereg_replace|mb_eregi_replace")) {
-    $flags_to_show[0] = "mb_ereg_replace_i";
-    $flags_to_show[1] = "mb_ereg_replace_x";
-    $flags_to_show[2] = "mb_ereg_replace_m";
-    $flags_to_show[3] = "mb_ereg_replace_p";
-    $flags_to_show[4] = "mb_ereg_replace_e";
-  }
-
-
-  for ($flag in $flags) {
-    $f = $flags[$flag];
-    //Ez sor volt a Drupal-5x Garland esetében
-    //$flag_id = "edit-flags-" + $f.replace(/_/g, "-");
-    //De változott Drupal-6x Garland. Ilyenre:
-    $flag_id = "edit-flags-" + $f.replace(/_/g, "-") + "-wrapper";
-
-    $selector = "form#regex-regex-tester-form div[@id="+$flag_id+"]";
-    if ($flags_to_show.indexOf($f) > -1) {
-      $($selector).show("fast");
-    }
-    else 	{
-      $($selector).hide("fast");
-    }
-  }
-  $selector = "form#regex-regex-tester-form div[@id=edit-flags-PREG-PATTERN-ORDER-wrapper]";
-  if( $flags_to_show.length ) {
-    //Ez a két sor azért kell, hogy előbukkanjon az esetleg elrejtett FLAG-eket tároló div.
-    //$selector = "#edit-flags-PREG-PATTERN-ORDER-wrapper";
-    $($selector).parent().parent().show("fast");
-  }
-  else {
-    $($selector).parent().parent().hide("fast");
-  }
-}
-
-$(document).ready(
-  function()
-  {
-    //A helyzet inicializálása.
-    RegEx.ToggleReplacementVisibility();
-    RegEx.ToggleFlags();
-
-    //A függvény választó select lista OnChange eseményére aktualizálódjanak a dolgok.
-    $("form#regex-regex-tester-form #edit-function").change( function()
-      {
-        RegEx.ToggleReplacementVisibility();
-        RegEx.ToggleFlags();
-      }
-    );
-  }
-);
-
-
+// $Id: regex.js,v 1.1 2009/02/07 16:40:38 sweetchack Exp $
+
+var RegEx = RegEx || {};
+
+RegEx.ToggleReplacementVisibility = function() {
+  // Extract the chosen function name
+  var $selector = "form#regex-regex-tester-form #edit-function";
+  var $fun = $($selector).attr("value");
+
+  // Change the visibility input field based on the presence of '_replace'
+  // string in its name.
+  //$selector = "form#regex-regex-tester-form :input#edit-replacement";
+  $selector = "form#regex-regex-tester-form #edit-replacement-wrapper";
+  if ($fun.match("_replace") != null ) {
+    $($selector).show("fast");
+  }
+  else 	{
+    $($selector).hide("fast");
+  }
+}
+
+RegEx.ToggleFlags = function() {
+  // Extract the name of the chosen function.
+  var $selector = "form#regex-regex-tester-form #edit-function";
+  var $fun = $($selector).attr("value");
+
+  // All flags
+  var $flags = new Array(
+    "PREG_PATTERN_ORDER",
+    "PREG_SET_ORDER",
+    "PREG_OFFSET_CAPTURE",
+    "PREG_SPLIT_NO_EMPTY",
+    "PREG_SPLIT_DELIM_CAPTURE",
+    "PREG_SPLIT_OFFSET_CAPTURE",
+    "mb_ereg_replace_i",
+    "mb_ereg_replace_x",
+    "mb_ereg_replace_m",
+    "mb_ereg_replace_p",
+    "mb_ereg_replace_e"
+  );
+  // Options depending on the choice of function
+  $flags_to_show = new Array();
+
+  if ($fun.match("preg_match")) {
+    $flags_to_show[0] = "PREG_PATTERN_ORDER";
+    $flags_to_show[1] = "PREG_SET_ORDER";
+    $flags_to_show[2] = "PREG_OFFSET_CAPTURE";
+  }
+  else if ($fun.match("preg_split")) {
+    $flags_to_show[0] = "PREG_SPLIT_DELIM_CAPTURE";
+    $flags_to_show[1] = "PREG_SPLIT_NO_EMPTY";
+    $flags_to_show[2] = "PREG_SPLIT_OFFSET_CAPTURE";
+  }
+  else if ($fun.match("mb_ereg_replace|mb_eregi_replace")) {
+    $flags_to_show[0] = "mb_ereg_replace_i";
+    $flags_to_show[1] = "mb_ereg_replace_x";
+    $flags_to_show[2] = "mb_ereg_replace_m";
+    $flags_to_show[3] = "mb_ereg_replace_p";
+    $flags_to_show[4] = "mb_ereg_replace_e";
+  }
+
+
+  for ($flag in $flags) {
+    $f = $flags[$flag];
+    // For Drupal-5x Garland:
+    //$flag_id = "edit-flags-" + $f.replace(/_/g, "-");
+    // For Drupal 6 Garland
+    $flag_id = "edit-flags-" + $f.replace(/_/g, "-") + "-wrapper";
+
+    $selector = "form#regex-regex-tester-form div[@id="+$flag_id+"]";
+    if ($flags_to_show.indexOf($f) > -1) {
+      $($selector).show("fast");
+    }
+    else 	{
+      $($selector).hide("fast");
+    }
+  }
+  $selector = "form#regex-regex-tester-form div[@id=edit-flags-PREG-PATTERN-ORDER-wrapper]";
+  if( $flags_to_show.length ) {
+    // Show all the hidden divs containing flags
+    //$selector = "#edit-flags-PREG-PATTERN-ORDER-wrapper";
+    $($selector).parent().parent().show("fast");
+  }
+  else {
+    $($selector).parent().parent().hide("fast");
+  }
+}
+
+$(document).ready(
+  function() {
+    // Initialize the position
+    RegEx.ToggleReplacementVisibility();
+    RegEx.ToggleFlags();
+
+    // Update things when the function selector is changed.
+    $("form#regex-regex-tester-form #edit-function").change( function() {
+        RegEx.ToggleReplacementVisibility();
+        RegEx.ToggleFlags();
+      }
+    );
+  }
+);
+
+
Index: regex.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/regex/regex.module,v
retrieving revision 1.1
diff -u -r1.1 regex.module
--- regex.module	7 Feb 2009 16:40:38 -0000	1.1
+++ regex.module	11 Feb 2009 19:57:35 -0000
@@ -1,411 +1,381 @@
-<?php
-// $Id: regex.module,v 1.1 2009/02/07 16:40:38 sweetchack Exp $
-
-/**
- * @file
- *    Sok regex tesztelő létezik, de arra gondoltam nem árt ha van még egy.
- */
-
-/**
- * Permission constants
- * @{
- */
-
-/**
- * A szolgáltatás hozzáférésének korlátozására.
- */
-define('REGEX_PERM_ACCESS_REGEX_TESTER_FORM', 'Allow to use the RegEx tester form'); //@TODO: translate
-
-/**
- * Biztonsági okokból nem egészséges ha a felhasználók PHP függvényket indítanak a böngészőből.
- */
-define('REGEX_PERM_ACCESS_TO_PREG_REPLACE_EVAL_MODIFIER', 'Allow to use the "eval" modifier in the  preg_replace() function');
-
-/**
- * Biztonsági okokból nem egészséges ha a felhasználók PHP függvényket indítanak a böngészőből.
- */
-define('REGEX_PERM_ACCESS_TO_MB_EREG_REPLACE_EVAL_MODIFIER', 'Allow to use the "eval" modifier in the mb_ereg[i]_replace() function');
-/**
- * @}
- */
-
-/**
- * Implementation of hook_menu().
- */
-function regex_menu() {
-  $items['regex'] = array(
-    'title'            => 'RegEx tester',
-    'access arguments' => array(REGEX_PERM_ACCESS_REGEX_TESTER_FORM),
-    'type'             => MENU_NORMAL_ITEM,
-    'page callback'    => 'drupal_get_form',
-    'page arguments'   => array('regex_regex_tester_form'),
-  );
-  return $items;
-}
-
-
-/**
- * Implementation of hook_perm().
- */
-function regex_perm() {
-  //Ezt a hook_perm()-et nem így szokás megvalósítani, de én kényelmi szempontok miatt így szoktam.
-  /*
-  Az angol tudásom elég gyatra.
-  Programozási dokumentációkkal elboldogulok, de magyarról angolra fordítás az nem megy.
-  Ha itt adnám meg az angol nyelvű PERM karakterláncokat,
-  akkor azokat fejből kéne tudnom a user_access() hívásoknál.
-  Ráadásul ha kiderül, hogy nyelvtanilag hibás akkor jöhet a Search/Replace.
-  De a konstansok használatával kicsit egyszerübb az életem,
-  ráadásul a szövegszerkesztőm feldobja a lehetőségeket.
-  */
-  $result = array();
-  $temp = get_defined_constants(true);
-  foreach ($temp['user'] as $perm => $value) {
-    if (strpos($perm, 'REGEX_PERM_') === 0) {
-      $result[] = $value;
-    }
-  }
-  return $result;
-}
-
-/**
- * Implementation of hook_forms().
- */
-function regex_forms() {
-  $forms = array();
-  $forms['regex_regex_tester_form']['callback'] = 'regex_regex_tester_form';
-  return $forms;
-}
-
-/**
- * Form builder callback function
- * Ez a függvény állítja elő a reguláris kifejezések tesztelésére alkalmas ürlapot.
- */
-function regex_regex_tester_form() {
-  drupal_add_js(
-    drupal_get_path('module', 'regex') .'/regex.js',
-    'module', //type
-    'header', //scope
-    FALSE,    //defer
-    TRUE      //cache
-  );
-
-  $default_values = array(
-    'function'    => 'preg_match_all',
-    'flags'       => array(),
-    'pattern'     => '',
-    'replacement' => '',
-    'subject'     => '',
-  );
-  /*
-    Sikeres submit után újra az üres (kitöltetlen) ürlap jelenne meg,
-    ami az ürlap funkciójából fakadóan nem lenne túl kényelmes.
-    Ezért a regex_regex_tester_form_submit() a $_SESSION -ba belepakolja az előzö ürlapról kapott adatokat,
-    hogy folytatni lehessen az előzöt. Viszont így csak egy bőngésző ablakkal használható.
-    */
-  if (isset($_SESSION['_regex']['regex_tester_form']['form_values'])) {
-    $default_values = $_SESSION['_regex']['regex_tester_form']['form_values'];
-  }
-
-
-  $form = array();
-
-  $form['function'] = array(
-    '#type'    => 'select',
-    '#title'   => t('Function'),
-    '#options' => array(
-      'preg_match'       => 'preg_match',
-      'preg_match_all'   => 'preg_match_all',
-      'preg_replace'     => 'preg_replace',
-      'preg_split'       => 'preg_split',
-
-      'ereg'             => 'ereg',
-      'eregi'            => 'eregi',
-      'ereg_replace'     => 'ereg_replace',
-      'eregi_replace'    => 'eregi_replace',
-      'split'            => 'split',
-      'spliti'           => 'spliti',
-
-      'mb_ereg'          => 'mb_ereg',
-      'mb_eregi'         => 'mb_eregi',
-      'mb_ereg_replace'  => 'mb_ereg_replace',
-      'mb_eregi_replace' => 'mb_eregi_replace',
-      'mb_split'         => 'mb_split',
-    ),
-    '#required'      => TRUE,
-    '#default_value' => $default_values['function'],
-    '#description'   => 'A minta illesztésre melyik függvény legyen használva?', //@TODO: translate
-  );
-
-  $form['flags'] = array(
-    '#type'    => 'checkboxes',
-    '#title'   => t('Flags'),
-    '#options' => array(
-      'PREG_PATTERN_ORDER'        => 'PREG_PATTERN_ORDER',
-      'PREG_SET_ORDER'            => 'PREG_SET_ORDER',
-      'PREG_OFFSET_CAPTURE'       => 'PREG_OFFSET_CAPTURE',
-      'PREG_SPLIT_NO_EMPTY'       => 'PREG_SPLIT_NO_EMPTY',
-      'PREG_SPLIT_DELIM_CAPTURE'  => 'PREG_SPLIT_DELIM_CAPTURE',
-      'PREG_SPLIT_OFFSET_CAPTURE' => 'PREG_SPLIT_OFFSET_CAPTURE',
-      'mb_ereg_replace_i'         => 'mb_ereg_replace() caseless',
-      'mb_ereg_replace_x'         => 'mb_ereg_replace() ignore withe spaces',
-      'mb_ereg_replace_m'         => 'mb_ereg_replace() multiline mode',
-      'mb_ereg_replace_p'         => 'mb_ereg_replace() POSIX mode',
-    ),
-    '#default_value' => array_keys($default_values['flags'], TRUE, FALSE),
-    '#description'   => 'A választott függvény paraméterezését fogja befolyásolni.', //@TODO: translate
-
-  );
-
-  if (user_access(REGEX_PERM_ACCESS_TO_MB_EREG_REPLACE_EVAL_MODIFIER)) {
-    $form['flags']['#options']['mb_ereg_replace_e'] = 'mb_ereg_replace() eval replacement';
-  }
-
-  $form['pattern'] = array(
-    '#type'          => 'textarea',
-    '#title'         => t('Pattern'),
-    '#required'      => TRUE,
-    '#default_value' => $default_values['pattern'],
-    '#rows'          => 1,
-  );
-  $form['replacement'] = array(
-    '#type'          => 'textarea',
-    '#title'         => t('Replacement'),
-    '#default_value' => $default_values['replacement'],
-    '#rows'          => 1,
-  );
-  $form['subject'] = array(
-    '#type'          => 'textarea',
-    '#title'         => t('Subject'),
-    '#required'      => TRUE,
-    '#default_value' => $default_values['subject'],
-  );
-
-
-  $form['btn_submit'] = array(
-    '#type'  => 'submit',
-    '#value' => t('Test'),
-    '#title' => t('Test'),
-  );
-
-  return $form;
-}
-
-
-/**
- * Form validator callback function
- */
-function regex_regex_tester_form_validate($form, &$form_state) {
-  $form;
-  /*
-    A preg_replace() esetén a pattern-ben kell megadni, hogy a replacement-ben megadott karakterláncot
-    a PHP átküldje-e az eval() függvényen. (Nem így csinálja, de ez a lényege :-)
-  */
-  if (
-    $form_state['values']['function'] == 'preg_replace'
-    AND
-    regex_preg_repalace_eval_modifier_exists($form_state['values']['pattern'])
-    AND
-    !user_access(REGEX_PERM_ACCESS_TO_PREG_REPLACE_EVAL_MODIFIER)
-  ) {
-    form_set_error('pattern', t('You are not allowed to use the eval modifier.'));
-  }
-
-  //Ez a rész nem kell, mert már a form létrehozásakor megtörténik a jogosultság ellenörzés.
-  /*
-  if (
-  ($form_values['values']['function'] == 'mb_ereg_replace' OR $form_values['values']['function'] == 'mb_eregi_replace')
-  AND
-  $form_values['values']['flags']['mb_ereg_replace_e']
-  AND
-  user_access(REGEX_PERM_ACCESS_TO_MB_EREG_REPLACE_EVAL_MODIFIER)
-  ) {
-  form_set_error('flags', 'Nincsen jogosultság az EVAL módosító használatára.'); //@TODO translate
-  }
-  */
-}
-
-/**
- * Form submitter callback function
- * Ez a függvény végzi a minta illesztést a kapott adatok alapján.
- * drupal_set_message() segít az eredmény megjelenítésében.
- */
-function regex_regex_tester_form_submit($form, &$form_state) {
-  $form;
-  $_SESSION['_regex']['regex_tester_form']['form_values'] = $form_state['values'];
-
-  $matches   = NULL;
-  $result    = FALSE;
-  $function  = $form_state['values']['function'];
-  $arguments = array();
-  $display_matches = FALSE;
-  switch ($function) {
-    case 'preg_match' :
-    case 'preg_match_all' :
-      $display_matches = TRUE;
-      $flags = 0;
-      $arguments[0] = '$' . t('Pattern');
-      $arguments[1] = '$' . t('Subject');
-      $arguments[2] = '$matches';
-      $arguments[3] = array();
-      if ($form_state['values']['flags']['PREG_PATTERN_ORDER']) {
-        $flags |= PREG_PATTERN_ORDER;
-        $arguments[3][] = 'PREG_PATTERN_ORDER';
-      }
-
-      if ($form_state['values']['flags']['PREG_SET_ORDER']) {
-        $flags |= PREG_SET_ORDER;
-        $arguments[3][] = 'PREG_SET_ORDER';
-      }
-
-      if ($form_state['values']['flags']['PREG_OFFSET_CAPTURE']) {
-        $flags |= PREG_OFFSET_CAPTURE;
-        $arguments[3][] = 'PREG_OFFSET_CAPTURE';
-      }
-
-      if ( !$arguments[3] ) {
-        unset($arguments[3]);
-      }
-      else {
-        $arguments[3] = implode(' | ', $arguments[3]);
-      }
-
-      $result = @$function($form_state['values']['pattern'], $form_state['values']['subject'], $matches, $flags);
-      break;
-
-    case 'preg_replace' :
-      $arguments[0] = '$' . t('Pattern');
-      $arguments[1] = '$' . t('Replacement');
-      $arguments[2] = '$' . t('Subject');
-      $result = @preg_replace($form_state['values']['pattern'], $form_state['values']['replacement'], $form_state['values']['subject']);
-      break;
-
-    case 'preg_split' :
-      $limit = -1;
-      $flags = 0;
-      $arguments[0] = '$' . t('Pattern');
-      $arguments[1] = '$' . t('Replacement');
-      $arguments[2] = '$' . t('Subject');
-      $arguments[3] = array();
-      if ($form_state['values']['flags']['PREG_SPLIT_NO_EMPTY']) {
-        $flags |= PREG_SPLIT_NO_EMPTY;
-        $arguments[3][] = 'PREG_SPLIT_NO_EMPTY';
-      }
-
-      if ($form_state['values']['flags']['PREG_SPLIT_DELIM_CAPTURE']) {
-        $flags |= PREG_SPLIT_DELIM_CAPTURE;
-        $arguments[3][] = 'PREG_SPLIT_DELIM_CAPTURE';
-      }
-
-      if ($form_state['values']['flags']['PREG_SPLIT_OFFSET_CAPTURE']) {
-        $flags |= PREG_SPLIT_OFFSET_CAPTURE;
-        $arguments[3][] = 'PREG_SPLIT_OFFSET_CAPTURE';
-      }
-
-      if ( !$arguments[3] ) {
-        unset($arguments[3]);
-      }
-      else {
-        $arguments[3] = implode(' | ', $arguments[3]);
-      }
-
-      $result = @preg_split($form_state['values']['pattern'], $form_state['values']['subject'], $limit, $flags);
-      break;
-
-    case 'ereg' :
-    case 'eregi' :
-    case 'mb_ereg' :
-    case 'mb_eregi' :
-      $arguments[0] = '$' . t('Pattern');
-      $arguments[1] = '$' . t('Subject');
-      $arguments[2] = '$matches';
-      $result = @$function($form_state['values']['pattern'], $form_state['values']['subject'], $matches);
-      break;
-
-    case 'ereg_replace' :
-    case 'eregi_replace' :
-      $arguments[0] = '$' . t('Pattern');
-      $arguments[1] = '$' . t('Replacement');
-      $arguments[2] = '$' . t('Subject');
-      $result = @$function($form_state['values']['pattern'], $form_state['values']['replacement'], $form_state['values']['subject']);
-      break;
-
-    case 'mb_ereg_replace' :
-    case 'mb_eregi_replace' :
-      $arguments[0] = '$' . t('Pattern');
-      $arguments[1] = '$' . t('Replacement');
-      $arguments[2] = '$' . t('Subject');
-      $flags = '';
-      if ($form_state['values']['flags']['mb_ereg_replace_i']) $flags .= 'i';
-      if ($form_state['values']['flags']['mb_ereg_replace_x']) $flags .= 'x';
-      if ($form_state['values']['flags']['mb_ereg_replace_m']) $flags .= 'm';
-      if ($form_state['values']['flags']['mb_ereg_replace_p']) $flags .= 'p';
-      if ($form_state['values']['flags']['mb_ereg_replace_e']) $flags .= 'e';
-
-      if ( $flags ) {
-        $arguments[] = "'$flags'";
-      }
-      $result = @$function($form_state['values']['pattern'], $form_state['values']['replacement'], $form_state['values']['subject'], $flags);
-      break;
-
-    case 'split' :
-    case 'spliti' :
-    case 'mb_split' :
-      $arguments[0] = '$' . t('Pattern');
-      $arguments[1] = '$' . t('Subject');
-      $result = @$function($form_state['values']['pattern'], $form_state['values']['subject']);
-      break;
-
-    default :
-      throw new Exception('Ismeretlen CASE:'. $form_state['values']['function']);
-  }
-
-  if ( $result === FALSE) {
-    drupal_set_message(t('Invalid regular expression in the %pattern field', array('%pattern' => t('Pattern'))), 'error');
-    return;
-  }
-
-  // @TODO - sminkelehető legyen
-  drupal_set_message("<span style=\"font-family:'Courier New', modnospace;\">\$result = {$function}(". implode(', ', $arguments) .");</span>");
-
-  if (!$result) {
-    drupal_set_message(t('Pattern does not match'), 'warning');
-    drupal_set_message(t('$result data type = %type', array('%type' => gettype($result))));
-    if ( gettype($result) == 'boolean' ) {
-      $result = ($result) ? 'TRUE' : 'FALSE';
-    }
-    drupal_set_message('$result = '. check_plain(print_r($result, TRUE)));
-    return;
-  }
-  drupal_set_message(t('Pattern is match to subject'));
-  drupal_set_message(t('$result data type = %type', array('%type' => gettype($result))));
-  drupal_set_message('$result = '. check_plain(print_r($result, TRUE)));
-
-  if ( $display_matches ) {
-    drupal_set_message('<pre>$matches = '. check_plain(print_r($matches, TRUE)) .'</pre>');
-  }
-
-}
-
-
-/**
- * Az "e" módosítót keresi a függvény a $pattern-ben.
- *
- * @param string $pattern
- *    Olyan RegEx pattern ami preg_replace()-nek való.
- *
- * @return boolean
- *    A visszatérési érték arról tanuskodik, hogy a $pattern-ben meg van-e adva az "e" módosító.
- */
-function regex_preg_repalace_eval_modifier_exists($pattern) {
-  $pattern = trim($pattern);
-  if ( $pattern === '') {
-    return FALSE;
-  }
-
-  return (
-    (FALSE !== ($closer_pos = strrpos($pattern,  $pattern[0])) )
-    AND
-    strpos($pattern, 'e', $closer_pos) !== FALSE
-  );
-}
\ No newline at end of file
+<?php
+// $Id: regex.module,v 1.1 2009/02/07 16:40:38 sweetchack Exp $
+
+/**
+ * @file
+ * Provides easy interface to test regular expressions.
+ */
+
+/**
+ * Permission constants
+ * @{
+ */
+
+/**
+ * Basic permission to use the tester form
+ */
+define('REGEX_PERM_ACCESS_REGEX_TESTER_FORM', 'Allow to use the RegEx tester form'); //@TODO: translate
+
+/**
+ * Due to security reasons allowing users to run eval() on any production website is
+ * discouraged.
+ */
+define('REGEX_PERM_ACCESS_TO_PREG_REPLACE_EVAL_MODIFIER', 'Allow to use the "eval" modifier in the  preg_replace() function');
+define('REGEX_PERM_ACCESS_TO_MB_EREG_REPLACE_EVAL_MODIFIER', 'Allow to use the "eval" modifier in the mb_ereg[i]_replace() function');
+/**
+ * @}
+ */
+
+/**
+ * Implementation of hook_menu().
+ */
+function regex_menu() {
+  $items['regex'] = array(
+    'title'            => 'RegEx tester',
+    'access arguments' => array(REGEX_PERM_ACCESS_REGEX_TESTER_FORM),
+    'type'             => MENU_NORMAL_ITEM,
+    'page callback'    => 'drupal_get_form',
+    'page arguments'   => array('regex_regex_tester_form'),
+  );
+  return $items;
+}
+
+
+/**
+ * Implementation of hook_perm().
+ * Automatically select the pre-defined constants and use their string 
+ * values as the permission names. Useful if one has autocomplete functionality
+ * in his/her IDE.
+ */
+function regex_perm() {
+  $result = array();
+  $temp = get_defined_constants(true);
+  foreach ($temp['user'] as $perm => $value) {
+    if (strpos($perm, 'REGEX_PERM_') === 0) {
+      $result[] = $value;
+    }
+  }
+  return $result;
+}
+
+/**
+ * Implementation of hook_forms().
+ */
+function regex_forms() {
+  $forms = array();
+  $forms['regex_regex_tester_form']['callback'] = 'regex_regex_tester_form';
+  return $forms;
+}
+
+/**
+ * Form builder callback function
+ * Construct the regexp testing form.
+ */
+function regex_regex_tester_form() {
+  drupal_add_js(
+    drupal_get_path('module', 'regex'). '/regex.js',
+    'module', //type
+    'header', //scope
+    FALSE,    //defer
+    TRUE      //cache
+  );
+
+  $default_values = array(
+    'function'    => 'preg_match_all',
+    'flags'       => array(),
+    'pattern'     => '',
+    'replacement' => '',
+    'subject'     => '',
+  );
+  /**
+   * After a successful submit the blank form would appear.
+   * In order to be able to edit it again we store its value in 
+   * the $_SESSION.
+   */
+  if (isset($_SESSION['_regex']['regex_tester_form']['form_values'])) {
+    $default_values = $_SESSION['_regex']['regex_tester_form']['form_values'];
+  }
+
+
+  $form = array();
+
+  $form['function'] = array(
+    '#type'    => 'select',
+    '#title'   => t('Function'),
+    '#options' => array(
+      'preg_match'       => 'preg_match',
+      'preg_match_all'   => 'preg_match_all',
+      'preg_replace'     => 'preg_replace',
+      'preg_split'       => 'preg_split',
+
+      'ereg'             => 'ereg',
+      'eregi'            => 'eregi',
+      'ereg_replace'     => 'ereg_replace',
+      'eregi_replace'    => 'eregi_replace',
+      'split'            => 'split',
+      'spliti'           => 'spliti',
+
+      'mb_ereg'          => 'mb_ereg',
+      'mb_eregi'         => 'mb_eregi',
+      'mb_ereg_replace'  => 'mb_ereg_replace',
+      'mb_eregi_replace' => 'mb_eregi_replace',
+      'mb_split'         => 'mb_split',
+    ),
+    '#required'      => TRUE,
+    '#default_value' => $default_values['function'],
+    '#description'   => t('Which function should be used to match the sample?'),
+  );
+
+  $form['flags'] = array(
+    '#type'    => 'checkboxes',
+    '#title'   => t('Flags'),
+    '#options' => array(
+      'PREG_PATTERN_ORDER'        => 'PREG_PATTERN_ORDER',
+      'PREG_SET_ORDER'            => 'PREG_SET_ORDER',
+      'PREG_OFFSET_CAPTURE'       => 'PREG_OFFSET_CAPTURE',
+      'PREG_SPLIT_NO_EMPTY'       => 'PREG_SPLIT_NO_EMPTY',
+      'PREG_SPLIT_DELIM_CAPTURE'  => 'PREG_SPLIT_DELIM_CAPTURE',
+      'PREG_SPLIT_OFFSET_CAPTURE' => 'PREG_SPLIT_OFFSET_CAPTURE',
+      'mb_ereg_replace_i'         => 'mb_ereg_replace() caseless',
+      'mb_ereg_replace_x'         => 'mb_ereg_replace() ignore withe spaces',
+      'mb_ereg_replace_m'         => 'mb_ereg_replace() multiline mode',
+      'mb_ereg_replace_p'         => 'mb_ereg_replace() POSIX mode',
+    ),
+    '#default_value' => array_keys($default_values['flags'], TRUE, FALSE),
+    '#description'   => t('It will influence the behaviour of the chosen function.'),
+  );
+
+  if (user_access(REGEX_PERM_ACCESS_TO_MB_EREG_REPLACE_EVAL_MODIFIER)) {
+    $form['flags']['#options']['mb_ereg_replace_e'] = 'mb_ereg_replace() eval replacement';
+  }
+
+  $form['pattern'] = array(
+    '#type'          => 'textarea',
+    '#title'         => t('Pattern'),
+    '#required'      => TRUE,
+    '#default_value' => $default_values['pattern'],
+    '#rows'          => 1,
+  );
+  $form['replacement'] = array(
+    '#type'          => 'textarea',
+    '#title'         => t('Replacement'),
+    '#default_value' => $default_values['replacement'],
+    '#rows'          => 1,
+  );
+  $form['subject'] = array(
+    '#type'          => 'textarea',
+    '#title'         => t('Subject'),
+    '#required'      => TRUE,
+    '#default_value' => $default_values['subject'],
+  );
+
+
+  $form['btn_submit'] = array(
+    '#type'  => 'submit',
+    '#value' => t('Test'),
+    '#title' => t('Test'),
+  );
+
+  return $form;
+}
+
+
+/**
+ * Form validator callback function
+ */
+function regex_regex_tester_form_validate($form, &$form_state) {
+  $form;
+  /*
+    A preg_replace() esetén a pattern-ben kell megadni, hogy a replacement-ben megadott karakterláncot
+    a PHP átküldje-e az eval() függvényen. (Nem így csinálja, de ez a lényege :-)
+  */
+  $modifier_exists = regex_preg_repalace_eval_modifier_exists($form_state['values']['pattern']);
+  $access = user_access(REGEX_PERM_ACCESS_TO_PREG_REPLACE_EVAL_MODIFIER);
+  if ($form_state['values']['function'] == 'preg_replace' && isset($modifier_exists) && !$access) {
+    form_set_error('pattern', t('You are not allowed to use the eval modifier.'));
+  }
+}
+
+/**
+ * Form submitter callback function
+ * Match the sample based on the submitted values. Results are displayed
+ * with drupal_set_message(.
+ */
+function regex_regex_tester_form_submit($form, &$form_state) {
+  $form;
+  $_SESSION['_regex']['regex_tester_form']['form_values'] = $form_state['values'];
+
+  $matches   = NULL;
+  $result    = FALSE;
+  $function  = $form_state['values']['function'];
+  $arguments = array();
+  $display_matches = FALSE;
+  switch ($function) {
+    case 'preg_match' :
+    case 'preg_match_all' :
+      $display_matches = TRUE;
+      $flags = 0;
+      $arguments[0] = '$' . t('Pattern');
+      $arguments[1] = '$' . t('Subject');
+      $arguments[2] = '$matches';
+      $arguments[3] = array();
+      if ($form_state['values']['flags']['PREG_PATTERN_ORDER']) {
+        $flags |= PREG_PATTERN_ORDER;
+        $arguments[3][] = 'PREG_PATTERN_ORDER';
+      }
+
+      if ($form_state['values']['flags']['PREG_SET_ORDER']) {
+        $flags |= PREG_SET_ORDER;
+        $arguments[3][] = 'PREG_SET_ORDER';
+      }
+
+      if ($form_state['values']['flags']['PREG_OFFSET_CAPTURE']) {
+        $flags |= PREG_OFFSET_CAPTURE;
+        $arguments[3][] = 'PREG_OFFSET_CAPTURE';
+      }
+
+      if ( !$arguments[3] ) {
+        unset($arguments[3]);
+      }
+      else {
+        $arguments[3] = implode(' | ', $arguments[3]);
+      }
+
+      $result = @$function($form_state['values']['pattern'], $form_state['values']['subject'], $matches, $flags);
+      break;
+
+    case 'preg_replace' :
+      $arguments[0] = '$' . t('Pattern');
+      $arguments[1] = '$' . t('Replacement');
+      $arguments[2] = '$' . t('Subject');
+      $result = @preg_replace($form_state['values']['pattern'], $form_state['values']['replacement'], $form_state['values']['subject']);
+      break;
+
+    case 'preg_split' :
+      $limit = -1;
+      $flags = 0;
+      $arguments[0] = '$' . t('Pattern');
+      $arguments[1] = '$' . t('Replacement');
+      $arguments[2] = '$' . t('Subject');
+      $arguments[3] = array();
+      if ($form_state['values']['flags']['PREG_SPLIT_NO_EMPTY']) {
+        $flags |= PREG_SPLIT_NO_EMPTY;
+        $arguments[3][] = 'PREG_SPLIT_NO_EMPTY';
+      }
+
+      if ($form_state['values']['flags']['PREG_SPLIT_DELIM_CAPTURE']) {
+        $flags |= PREG_SPLIT_DELIM_CAPTURE;
+        $arguments[3][] = 'PREG_SPLIT_DELIM_CAPTURE';
+      }
+
+      if ($form_state['values']['flags']['PREG_SPLIT_OFFSET_CAPTURE']) {
+        $flags |= PREG_SPLIT_OFFSET_CAPTURE;
+        $arguments[3][] = 'PREG_SPLIT_OFFSET_CAPTURE';
+      }
+
+      if ( !$arguments[3] ) {
+        unset($arguments[3]);
+      }
+      else {
+        $arguments[3] = implode(' | ', $arguments[3]);
+      }
+
+      $result = @preg_split($form_state['values']['pattern'], $form_state['values']['subject'], $limit, $flags);
+      break;
+
+    case 'ereg' :
+    case 'eregi' :
+    case 'mb_ereg' :
+    case 'mb_eregi' :
+      $arguments[0] = '$' . t('Pattern');
+      $arguments[1] = '$' . t('Subject');
+      $arguments[2] = '$matches';
+      $result = @$function($form_state['values']['pattern'], $form_state['values']['subject'], $matches);
+      break;
+
+    case 'ereg_replace' :
+    case 'eregi_replace' :
+      $arguments[0] = '$' . t('Pattern');
+      $arguments[1] = '$' . t('Replacement');
+      $arguments[2] = '$' . t('Subject');
+      $result = @$function($form_state['values']['pattern'], $form_state['values']['replacement'], $form_state['values']['subject']);
+      break;
+
+    case 'mb_ereg_replace' :
+    case 'mb_eregi_replace' :
+      $arguments[0] = '$' . t('Pattern');
+      $arguments[1] = '$' . t('Replacement');
+      $arguments[2] = '$' . t('Subject');
+      $flags = '';
+      if ($form_state['values']['flags']['mb_ereg_replace_i']) $flags .= 'i';
+      if ($form_state['values']['flags']['mb_ereg_replace_x']) $flags .= 'x';
+      if ($form_state['values']['flags']['mb_ereg_replace_m']) $flags .= 'm';
+      if ($form_state['values']['flags']['mb_ereg_replace_p']) $flags .= 'p';
+      if ($form_state['values']['flags']['mb_ereg_replace_e']) $flags .= 'e';
+
+      if ( $flags ) {
+        $arguments[] = "'$flags'";
+      }
+      $result = @$function($form_state['values']['pattern'], $form_state['values']['replacement'], $form_state['values']['subject'], $flags);
+      break;
+
+    case 'split' :
+    case 'spliti' :
+    case 'mb_split' :
+      $arguments[0] = '$' . t('Pattern');
+      $arguments[1] = '$' . t('Subject');
+      $result = @$function($form_state['values']['pattern'], $form_state['values']['subject']);
+      break;
+
+    default :
+      throw new Exception('Ismeretlen CASE:'. $form_state['values']['function']);
+  }
+
+  if ( $result === FALSE) {
+    drupal_set_message(t('Invalid regular expression in the %pattern field', array('%pattern' => t('Pattern'))), 'error');
+    return;
+  }
+
+  // @TODO - sminkelehető legyen
+  drupal_set_message("<span style=\"font-family:'Courier New', modnospace;\">\$result = {$function}(". implode(', ', $arguments) .");</span>");
+
+  if (!$result) {
+    drupal_set_message(t('Pattern does not match'), 'warning');
+    drupal_set_message(t('$result data type = %type', array('%type' => gettype($result))));
+    if ( gettype($result) == 'boolean' ) {
+      $result = ($result) ? 'TRUE' : 'FALSE';
+    }
+    drupal_set_message('$result = '. check_plain(print_r($result, TRUE)));
+    return;
+  }
+  drupal_set_message(t('Pattern is match to subject'));
+  drupal_set_message(t('$result data type = %type', array('%type' => gettype($result))));
+  drupal_set_message('$result = '. check_plain(print_r($result, TRUE)));
+
+  if ( $display_matches ) {
+    drupal_set_message('<pre>$matches = '. check_plain(print_r($matches, TRUE)) .'</pre>');
+  }
+
+}
+
+
+/**
+ * Look for the "e" modifier in $pattern.
+ *
+ * @param string $pattern
+ *    Regular expression pattern for preg_replace().
+ * @return boolean
+ *    True if "e" is found in pattern, false if not.
+ */
+function regex_preg_repalace_eval_modifier_exists($pattern) {
+  $pattern = trim($pattern);
+  if ( $pattern === '') {
+    return FALSE;
+  }
+
+  return (
+    (FALSE !== ($closer_pos = strrpos($pattern,  $pattern[0])) )
+    AND
+    strpos($pattern, 'e', $closer_pos) !== FALSE
+  );
+}
