From 26c3775697fc94086269d54099576679137e5eda Mon Sep 17 00:00:00 2001 From: wei <> Date: Fri, 14 Jul 2006 05:27:35 +0000 Subject: Fixed #284 --- .gitattributes | 5 ++ buildscripts/texbuilder/Page2Tex.php | 86 ++++++++++++++++---- framework/Web/UI/WebControls/TCustomValidator.php | 10 +++ framework/Web/UI/WebControls/TTextHighlighter.php | 2 +- .../tickets/protected/pages/Ticket284.page | 14 ++++ .../tickets/protected/pages/Ticket284.php | 11 +++ .../tickets/protected/pages/Ticket284Component.php | 94 ++++++++++++++++++++++ .../tickets/protected/pages/Ticket284Component.tpl | 94 ++++++++++++++++++++++ .../tickets/tests/Ticket284TestCase.php | 14 ++++ tests/test_tools/simpletest/test_case.php | 2 +- 10 files changed, 314 insertions(+), 18 deletions(-) create mode 100644 tests/FunctionalTests/tickets/protected/pages/Ticket284.page create mode 100644 tests/FunctionalTests/tickets/protected/pages/Ticket284.php create mode 100644 tests/FunctionalTests/tickets/protected/pages/Ticket284Component.php create mode 100644 tests/FunctionalTests/tickets/protected/pages/Ticket284Component.tpl create mode 100644 tests/FunctionalTests/tickets/tests/Ticket284TestCase.php diff --git a/.gitattributes b/.gitattributes index 27b9374e..b64fa5e1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1627,6 +1627,10 @@ tests/FunctionalTests/tickets/protected/pages/Ticket239.php -text tests/FunctionalTests/tickets/protected/pages/Ticket27.page -text tests/FunctionalTests/tickets/protected/pages/Ticket28.page -text tests/FunctionalTests/tickets/protected/pages/Ticket28.php -text +tests/FunctionalTests/tickets/protected/pages/Ticket284.page -text +tests/FunctionalTests/tickets/protected/pages/Ticket284.php -text +tests/FunctionalTests/tickets/protected/pages/Ticket284Component.php -text +tests/FunctionalTests/tickets/protected/pages/Ticket284Component.tpl -text tests/FunctionalTests/tickets/protected/pages/Ticket54.page -text tests/FunctionalTests/tickets/protected/pages/Ticket54Master.php -text tests/FunctionalTests/tickets/protected/pages/Ticket54Master.tpl -text @@ -1644,6 +1648,7 @@ tests/FunctionalTests/tickets/tests/Ticket191TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket21TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket239TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket27TestCase.php -text +tests/FunctionalTests/tickets/tests/Ticket284TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket28TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket54TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket72TestCase.php -text diff --git a/buildscripts/texbuilder/Page2Tex.php b/buildscripts/texbuilder/Page2Tex.php index 94567816..c8cad6c9 100644 --- a/buildscripts/texbuilder/Page2Tex.php +++ b/buildscripts/texbuilder/Page2Tex.php @@ -7,8 +7,8 @@ class Page2Tex private $_base; private $_dir; - private $_verb_find = array('\$','\%', '\{', '\}', "\t"); - private $_verb_replace = array('$', '%', '{','}', " "); + private $_verb_find = array('\$','\%', '\{', '\}', "\t",'``'); + private $_verb_replace = array('$', '%', '{','}', " ",'"'); function __construct($base, $dir, $current='') { @@ -24,7 +24,7 @@ class Page2Tex function escape_verbatim($matches) { - return "\begin{verbatim}".str_replace($this->_verb_find, $this->_verb_replace, $matches[2])."\end{verbatim}\n"; + return "\begin{verbatim}".str_replace($this->_verb_find, $this->_verb_replace, $matches[1])."\end{verbatim}\n"; } function escape_verb($matches) @@ -123,23 +123,29 @@ class Page2Tex function parse_html($page,$html) { + + $html = preg_replace('/<\/?com:TContent[^>]*>/', '', $html); - $html = preg_replace('/<\/?p[^<]*>/m', '', $html); + $html = preg_replace('/<\/?p [^>]*>/', '', $html); + $html = preg_replace('/<\/?p>/', '', $html); + $html = preg_replace('/(\s+|\(+|\[+)"/', '$1``', $html); + //escape { and } $html = preg_replace('/([^\s]+){([^}]*)}([^\s]+)/', '$1\\\{$2\\\}$3', $html); - $html = preg_replace_callback('/"?[^\\/]*\/>/', array($this, 'include_image'), $html); + $html = preg_replace_callback('/"?[^>]*\/>/', array($this, 'include_image'), $html); //escape % $html = str_replace('%', '\%', $html); //codes $html = str_replace('$', '\$', $html); - $html = preg_replace('/]*>/', '`1`', $html); - $html = preg_replace('/<\/com:TTextHighlighter>/', '`2`', $html); - $html = preg_replace_callback('/(`1`)([^`]*)(`2`)/m', array($this,'escape_verbatim'), $html); - $html = preg_replace_callback('/(
)([^<]*)(<\/div>)/', array($this,'escape_verbatim'), $html); + + $html = preg_replace_callback('/]*>((.|\n)*?)<\/com:TTextHighlighter>/', array($this,'escape_verbatim'), $html); +// $html = preg_replace('/<\/com:TTextHighlighter>/', '`2`', $html); +// $html = preg_replace_callback('/(`1`)([^`]*)(`2`)/m', array($this,'escape_verbatim'), $html); + $html = preg_replace_callback('/(
)((.|\n)*?)(<\/div>)/', array($this,'escape_verbatim'), $html); $html = preg_replace_callback('/(
)([^<]*)(<\/pre>)/', array($this,'escape_verbatim'), $html);
 	
 		//
@@ -154,8 +160,8 @@ class Page2Tex
 	                        '\href{http://www.pradosoft.com/docs/manual/$1/$2.html}{$1.$2 API Reference}', $html);
 	
 		//text modifiers
-		$html = preg_replace('/([^<]*)<\/b>/', '\textbf{$1}', $html);
-		$html = preg_replace('/([^<]*)<\/i>/', '\emph{$1}', $html);
+		$html = preg_replace('/]*>([^<]*)<\/b>/', '\textbf{$1}', $html);
+		$html = preg_replace('/]*>([^<]*)<\/i>/', '\emph{$1}', $html);
 		$html = preg_replace_callback('/([^<]*)<\/tt>/', array($this,'texttt'), $html);
 	
 		//links
@@ -171,11 +177,11 @@ class Page2Tex
 		$html = preg_replace('/<\/dl>/', '\end{description}', $html);
 	
 		//item lists
-		$html = preg_replace('/
    /', '\begin{itemize}', $html); + $html = preg_replace('/]*>/', '\begin{itemize}', $html); $html = preg_replace('/<\/ul>/', '\end{itemize}', $html); - $html = preg_replace('/
      /', '\begin{enumerate}', $html); + $html = preg_replace('/]*>/', '\begin{enumerate}', $html); $html = preg_replace('/<\/ol>/', '\end{enumerate}', $html); - $html = preg_replace('/
    1. /', '\item ', $html); + $html = preg_replace('/]*>/', '\item ', $html); $html = preg_replace('/<\/li>/', '', $html); //headings @@ -183,14 +189,62 @@ class Page2Tex $html = preg_replace('/([^<]+)<\/h2>/', '\subsection{$2}', $html); $html = preg_replace('/([^<]+)<\/h3>/', '\subsubsection{$2}', $html); - + //div box + $html = preg_replace_callback('/
      ((.|\n)*?)<\/div>/', + array($this, 'mbox'), $html); + + //tabular + $html = preg_replace_callback('/\s*]*>((.|\n)*?)<\/table>/', + array($this, 'tabular'), $html); $html = html_entity_decode($html); - return $html; } + function tabular($matches) + { + $options = array(); + foreach(explode(',', $matches[1]) as $string) + { + $sub = explode('=', trim($string)); + $options[trim($sub[0])] = trim($sub[1]); + } + + $widths = explode(' ',preg_replace('/\(|\)/', '', $options['width'])); + $this->_tabular_widths = $widths; + + $this->_tabular_total = count($widths); + $this->_tabular_col = 0; + + $begin = "\begin{table}[!hpt]\centering \n \begin{tabular}{".$options['align']."}\\hline"; + $end = "\end{tabular} \n \end{table}\n"; + $table = preg_replace('/<\/tr>/', '\\\\\\\\ \hline', $matches[2]); + $table = preg_replace('//', '', $table); + $table = preg_replace('/([^<]+)<\/th>/', '\textbf{$1} &', $table); + $table = preg_replace_callback('/((.|\n)*?)<\/td>/', array($this, 'table_column'), $table); + $table = preg_replace('/
      /', ' \\\\\\\\', $table); + + $table = preg_replace('/&\s*\\\\\\\\/', '\\\\\\\\', $table); + return $begin.$table.$end; + } + + function table_column($matches) + { + $width = $this->_tabular_widths[$this->_tabular_col]; + if($this->_tabular_col >= $this->_tabular_total-1) + $this->_tabular_col = 0; + else + $this->_tabular_col++; + return '\begin{minipage}{'.$width.'\textwidth}\vspace{3mm}'. + $matches[1].'\vspace{3mm}\end{minipage} & '; + } + + function mbox($matches) + { + return "\n\begin{mybox}\n".$matches[1]."\n\end{mybox}\n"; + } + function get_chapter_label($chapter) { return '\hypertarget{'.str_replace(' ', '', $chapter).'}{}'; diff --git a/framework/Web/UI/WebControls/TCustomValidator.php b/framework/Web/UI/WebControls/TCustomValidator.php index 32510f89..2afa48dc 100644 --- a/framework/Web/UI/WebControls/TCustomValidator.php +++ b/framework/Web/UI/WebControls/TCustomValidator.php @@ -120,6 +120,16 @@ class TCustomValidator extends TBaseValidator $options['ClientValidationFunction']=$clientJs; return $options; } + + /** + * Only register the client-side validator if + * {@link setClientValidationFunction ClientValidationFunction} is set. + */ + protected function registerClientScriptValidator() + { + if($this->getClientValidationFunction()!=='') + parent::registerClientScriptValidator(); + } } /** diff --git a/framework/Web/UI/WebControls/TTextHighlighter.php b/framework/Web/UI/WebControls/TTextHighlighter.php index a9ccf5bb..f4e72895 100644 --- a/framework/Web/UI/WebControls/TTextHighlighter.php +++ b/framework/Web/UI/WebControls/TTextHighlighter.php @@ -136,7 +136,7 @@ class TTextHighlighter extends TTextProcessor $geshi->enable_classes(); if($this->getEnableCopyCode()) $geshi->set_header_content($this->getHeaderTemplate()); - + return $geshi->parse_code(); } diff --git a/tests/FunctionalTests/tickets/protected/pages/Ticket284.page b/tests/FunctionalTests/tickets/protected/pages/Ticket284.page new file mode 100644 index 00000000..ff25e3fb --- /dev/null +++ b/tests/FunctionalTests/tickets/protected/pages/Ticket284.page @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/tests/FunctionalTests/tickets/protected/pages/Ticket284.php b/tests/FunctionalTests/tickets/protected/pages/Ticket284.php new file mode 100644 index 00000000..332789ff --- /dev/null +++ b/tests/FunctionalTests/tickets/protected/pages/Ticket284.php @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/tests/FunctionalTests/tickets/protected/pages/Ticket284Component.php b/tests/FunctionalTests/tickets/protected/pages/Ticket284Component.php new file mode 100644 index 00000000..892bdc87 --- /dev/null +++ b/tests/FunctionalTests/tickets/protected/pages/Ticket284Component.php @@ -0,0 +1,94 @@ +ShowHours && $this->ShowMinutes) + { + throw new TConfigurationException( + 'Invalid OPSDatePicker Config: You cannot specify ShowMinutes="true" while ShowHours="false"' + ); + } + } + + public function getDatePicker() + { + $this->ensureChildControls(); + return $this->getRegisteredObject('datePicker'); + } + + public function getHourPicker() + { + $this->ensureChildControls(); + return $this->getRegisteredObject('hourPicker'); + } + + public function getMinutePicker() + { + $this->ensureChildControls(); + return $this->getRegisteredObject('minutePicker'); + } + + public function getShowHours() + { + return $this->HourPicker->Visible; + } + + public function setShowHours($value) + { + $this->HourPicker->Visible = TPropertyValue::ensureBoolean($value); + } + + public function getShowMinutes() + { + return $this->MinutePicker->Visible; + } + + public function setShowMinutes($value) + { + $this->MinutePicker->Visible = TPropertyValue::ensureBoolean($value); + } + + public function getTimeStamp() + { + return strtotime($this->Date); + } + + public function setTimeStamp($value) + { + $ts = TPropertyValue::ensureInteger($value); + $this->DatePicker->TimeStamp = $ts; + $this->HourPicker->SelectedValue = date('H', $ts); + $this->MinutePicker->SelectedValue = date('i', $ts); + } + + public function getDate() + { + $dateStr = $this->DatePicker->Date; + if ($this->ShowHours){ + $dateStr .= ' '.$this->HourPicker->SelectedValue; + } + if ($this->ShowMinutes){ + $dateStr .= ':'.$this->MinutePicker->SelectedValue; + } + return $dateStr; + } + + public function setDate($value) + { + $dateStr = TPropertyValue::ensureString($value); + $this->TimeStamp = strtotime($dateStr); + } + + public function getValidationPropertyValue() + { + if ($this->DatePicker->Date === ''){ + return ''; + } + else{ + return $this->TimeStamp; + } + } +} +?> \ No newline at end of file diff --git a/tests/FunctionalTests/tickets/protected/pages/Ticket284Component.tpl b/tests/FunctionalTests/tickets/protected/pages/Ticket284Component.tpl new file mode 100644 index 00000000..ed787287 --- /dev/null +++ b/tests/FunctionalTests/tickets/protected/pages/Ticket284Component.tpl @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/FunctionalTests/tickets/tests/Ticket284TestCase.php b/tests/FunctionalTests/tickets/tests/Ticket284TestCase.php new file mode 100644 index 00000000..9a6fa7c3 --- /dev/null +++ b/tests/FunctionalTests/tickets/tests/Ticket284TestCase.php @@ -0,0 +1,14 @@ +open('tickets/index.php?page=Ticket284'); + $this->assertTextPresent('Verifying Ticket 284'); + $this->click('ctl0_Content_ctl1'); + + } +} + +?> \ No newline at end of file diff --git a/tests/test_tools/simpletest/test_case.php b/tests/test_tools/simpletest/test_case.php index e3a1aff5..1bf49789 100644 --- a/tests/test_tools/simpletest/test_case.php +++ b/tests/test_tools/simpletest/test_case.php @@ -478,7 +478,7 @@ */ function _requireWithError($file) { $this->_enableErrorReporting(); - include($file); + include_once($file); $error = isset($php_errormsg) ? $php_errormsg : false; $this->_disableErrorReporting(); $self_inflicted_errors = array( -- cgit v1.2.3