Jump to content

Word Wrap function problem


peaforabrain

Recommended Posts

I've been stuck on a problem to limit text in a css cell. I would like it to be 29 characters wide and 3 lines high only (this last bit is the problem).

 

I have tried many of the examples on the php.net site, and none do the trick. I have also tried modifying them.

 

 

I wondered whether it is possible to acheive this?

 

 

 

Link to comment
Share on other sites

function justify($text, $width, $break) { 
        $marker = "__$%@random#$()__"; 

        // lines is an array of lines containing the word-wrapped text 
        $wrapped = wordwrap($text, $width, $marker); 
        $lines = explode($marker, $wrapped);         
        $result = ""; 
        foreach ($lines as $line_index=>$line) { 
                $line = trim($line);                 
                $words = explode(" ", $line); 
                $words = array_map("trim", $words); 
                $wordcount = count($words); 
			//$wordlength = strlen(implode("/([^\s]{6})/","$1 ",$words)
                $wordlength = strlen(implode("", $words));              
               // if (3*$wordlength < 2*$width) { 
                        // don't touch lines shorter than 2/3 * width 
               //         continue; 
               // }                 
                $spaces = $width - $wordlength;                 
                $index = 0; 
                do { 
                        $words[$index] = $words[$index] . " "; 
                        $index = ($index + 1) % ($wordcount - 1); 
                        $spaces--; 
                } while ($spaces>0);                 
                $lines[$line_index] = implode("", $words);
           }	 
                return implode($break, $lines); 
} 

Link to comment
Share on other sites

I would like it to be 29 characters wide and 3 lines high only (this last bit is the problem).

 

I don't get why you'd want to do that. That would limit you to 87 characters only (or 89 if you count linefeeds at the end).

 

Anyways, the foreach loop will never get to the end each time since you've commented out the if statement around the continue structure. I.e. this:

$spaces = $width - $wordlength;                 
                $index = 0; 
                do { 
                        $words[$index] = $words[$index] . " "; 
                        $index = ($index + 1) % ($wordcount - 1); 
                        $spaces--; 
                } while ($spaces>0);                 
                $lines[$line_index] = implode("", $words);

will never get executed.

Link to comment
Share on other sites

If you're measuring by characters and lines you'll need to use a fixed-width font:

 

<html>
<head>
<style type="text/css">
	div { font-family: courier new; font-size: 10pt; line-height: 12pt; width: 17.4em; height: 34pt; border: 1pt solid black; }
</style>
</head>
<body>
<div>
	ABCDEFGHIJKLMNOPQRSTUVWXYZabc
	ABCDEFGHIJKLMNOPQRSTUVWXYZABC
	ABCDEFGHIJKLMNOPQRSTUVWXYZABC
</div>
</body>
</html>

 

Height = font-size + (line-height * (lines - 1)).

Width = (font-width * characters) / font-size.

Link to comment
Share on other sites

Anyways, the foreach loop will never get to the end each time since you've commented out the if statement around the continue structure. I.e. this:

 

Sorry about that, I was just editing it afetr trying something else, and just pasted it in, without checking what i'd done.

 

Anyway thanks for the help. I will try that function, but I can't see it working.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.