From 42b0de48353c25ac0d265506ac6f83f3429c59f5 Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@users.sourceforge.net>
Date: Sat, 10 Oct 2009 16:45:37 +0000
Subject: [PATCH] A more clever truncate function.

---
 htdocs/lib/functions.lib.php | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/htdocs/lib/functions.lib.php b/htdocs/lib/functions.lib.php
index 837f376d418..a1c127a8496 100644
--- a/htdocs/lib/functions.lib.php
+++ b/htdocs/lib/functions.lib.php
@@ -943,7 +943,8 @@ function dolibarr_trunc($string,$size=40,$trunc='right',$stringencoding='')
 }
 
 /**
- *	\brief      Truncate a string to a particular length adding '...' if string larger than length
+ *	\brief      Truncate a string to a particular length adding '...' if string larger than length.
+ * 				If length = max length+1, we do no truncate to avoid having just 1 char replaced with '...'.
  *	\param      string				String to truncate
  *	\param      size				Max string size. 0 for no limit.
  *	\param		trunc				Where to trunc: right, left, middle
@@ -962,7 +963,7 @@ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='')
 		if ($trunc == 'right')
 		{
 			$newstring=dol_textishtml($string)?dol_string_nohtmltag($string,1):$string;
-			if (dol_strlen($newstring,$stringencoding) > $size)
+			if (dol_strlen($newstring,$stringencoding) > ($size+1))
 			return dol_substr($newstring,0,$size,$stringencoding).'...';
 			else
 			return $string;
@@ -970,7 +971,7 @@ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='')
 		if ($trunc == 'middle')
 		{
 			$newstring=dol_textishtml($string)?dol_string_nohtmltag($string,1):$string;
-			if (dol_strlen($newstring,$stringencoding) > 2 && dol_strlen($newstring,$stringencoding) > $size)
+			if (dol_strlen($newstring,$stringencoding) > 2 && dol_strlen($newstring,$stringencoding) > ($size+1))
 			{
 				$size1=round($size/2);
 				$size2=round($size/2);
@@ -982,7 +983,7 @@ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='')
 		if ($trunc == 'left')
 		{
 			$newstring=dol_textishtml($string)?dol_string_nohtmltag($string,1):$string;
-			if (dol_strlen($newstring,$stringencoding) > $size)
+			if (dol_strlen($newstring,$stringencoding) > ($size+1))
 			return '...'.dol_substr($newstring,dol_strlen($newstring,$stringencoding) - $size,$size,$stringencoding);
 			else
 			return $string;
-- 
GitLab