From b442fad027a7446aaa46068ecf180bc2c35b683c Mon Sep 17 00:00:00 2001
From: Dries Buytaert <dries@buytaert.net>
Date: Sun, 21 Nov 2004 20:17:44 +0000
Subject: [PATCH] - Patch #13263 and #13265 by arnab: added word-based
 truncation and made the comment module use it to extract subjects.

---
 includes/common.inc            | 7 ++++++-
 modules/comment.module         | 2 +-
 modules/comment/comment.module | 2 +-
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/includes/common.inc b/includes/common.inc
index dc72c88b9a24..31f3f426d5bf 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -1722,14 +1722,19 @@ function drupal_xml_parser_create(&$data) {
  *   The string to truncate.
  * @param $len
  *   An upper limit on the returned string length.
+ * @param $wordsafe
+ *   Flag to truncate at nearest word boundary. Defaults to FALSE.
  * @return
  *   The truncated string.
  */
-function truncate_utf8($string, $len) {
+function truncate_utf8($string, $len, $wordsafe = FALSE) {
   $slen = strlen($string);
   if ($slen <= $len) {
     return $string;
   }
+  if ($wordsafe) {
+    while (($string[--$len] != ' ') && ($len > 0)) {};
+  }
   if ((ord($string[$len]) < 0x80) || (ord($string[$len]) >= 0xC0)) {
     return substr($string, 0, $len);
   }
diff --git a/modules/comment.module b/modules/comment.module
index fcf05d73a1d7..08f9029aef67 100644
--- a/modules/comment.module
+++ b/modules/comment.module
@@ -494,7 +494,7 @@ function comment_post($edit) {
     $edit['subject'] = strip_tags($edit['subject']);
 
     if ($edit['subject'] == '') {
-      $edit['subject'] = truncate_utf8(strip_tags($edit['comment']), 29);
+      $edit['subject'] = truncate_utf8(strip_tags($edit['comment']), 29, TRUE);
     }
 
     if (!form_get_errors()) {
diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index fcf05d73a1d7..08f9029aef67 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -494,7 +494,7 @@ function comment_post($edit) {
     $edit['subject'] = strip_tags($edit['subject']);
 
     if ($edit['subject'] == '') {
-      $edit['subject'] = truncate_utf8(strip_tags($edit['comment']), 29);
+      $edit['subject'] = truncate_utf8(strip_tags($edit['comment']), 29, TRUE);
     }
 
     if (!form_get_errors()) {
-- 
GitLab