mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
adding exclamation mark and question mark to delimiters, made text work the same as HTML Text
This commit is contained in:
parent
3e0d2cb646
commit
7d97df9db8
@ -165,7 +165,7 @@ class HTMLText extends Text {
|
||||
/* Then look for the first sentence ending. We could probably use a nice regex, but for now this will do */
|
||||
$words = preg_split('/\s+/', $paragraph);
|
||||
foreach ($words as $i => $word) {
|
||||
if (preg_match('/\.$/', $word) && !preg_match('/(Dr|Mr|Mrs|Ms|Miss|Sr|Jr|No)\.$/i', $word)) {
|
||||
if (preg_match('/(!|\?|\.)$/', $word) && !preg_match('/(Dr|Mr|Mrs|Ms|Miss|Sr|Jr|No)\.$/i', $word)) {
|
||||
return implode(' ', array_slice($words, 0, $i+1));
|
||||
}
|
||||
}
|
||||
|
@ -101,17 +101,20 @@ class Text extends StringField {
|
||||
* Caution: Not XML/HTML-safe - does not respect closing tags.
|
||||
*/
|
||||
public function FirstSentence() {
|
||||
$data = Convert::xml2raw( $this->value );
|
||||
if( !$data ) return "";
|
||||
|
||||
|
||||
$sentences = explode( '.', $data );
|
||||
|
||||
if( count( $sentences ) )
|
||||
return $sentences[0] . '.';
|
||||
else
|
||||
return $this->Summary(20);
|
||||
}
|
||||
$paragraph = Convert::xml2raw( $this->value );
|
||||
if( !$paragraph ) return "";
|
||||
|
||||
$words = preg_split('/\s+/', $paragraph);
|
||||
foreach ($words as $i => $word) {
|
||||
if (preg_match('/(!|\?|\.)$/', $word) && !preg_match('/(Dr|Mr|Mrs|Ms|Miss|Sr|Jr|No)\.$/i', $word)) {
|
||||
return implode(' ', array_slice($words, 0, $i+1));
|
||||
}
|
||||
}
|
||||
|
||||
/* If we didn't find a sentence ending, use the summary. We re-call rather than using paragraph so that
|
||||
* Summary will limit the result this time */
|
||||
return $this->Summary(20);
|
||||
}
|
||||
|
||||
/**
|
||||
* Caution: Not XML/HTML-safe - does not respect closing tags.
|
||||
|
@ -87,7 +87,28 @@ class TextTest extends SapphireTest {
|
||||
$this->assertEquals($expectedValue, $textObj->LimitSentences(2));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function testFirstSentance() {
|
||||
$cases = array(
|
||||
'' => '',
|
||||
'First sentence.' => 'First sentence.',
|
||||
'First sentence. Second sentence' => 'First sentence.',
|
||||
'First sentence? Second sentence' => 'First sentence?',
|
||||
'First sentence! Second sentence' => 'First sentence!',
|
||||
'<p>First sentence.</p>' => 'First sentence.',
|
||||
'<p>First sentence. Second sentence. Third sentence</p>' => 'First sentence.',
|
||||
'<p>First sentence. <em>Second sentence</em>. Third sentence</p>' => 'First sentence.',
|
||||
'<p>First sentence. <em class="dummyClass">Second sentence</em>. Third sentence</p>'
|
||||
=> 'First sentence.'
|
||||
);
|
||||
|
||||
foreach($cases as $originalValue => $expectedValue) {
|
||||
$textObj = new Text('Test');
|
||||
$textObj->setValue($originalValue);
|
||||
$this->assertEquals($expectedValue, $textObj->FirstSentence());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test {@link Text->BigSummary()}
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user