Difference between revisions of "User:Cory Fimicoloud/LSLFunctions"

From Second Life Wiki
Jump to navigation Jump to search
m
m (Added str_repeat function.)
Line 21: Line 21:
|p1_desc=The string to get the UTF-8 length of.
|p1_desc=The string to get the UTF-8 length of.
|return_type=integer
|return_type=integer
|examples=<lsl>default
|examples=<lsl>default {
{
state_entry() {
state_entry()
{
// 63 characters. Each of the characters uses 1 byte except for ¢ (2 bytes) and € (3 bytes). Which results in 66 bytes.
// 63 characters. Each of the characters uses 1 byte except for ¢ (2 bytes) and € (3 bytes). Which results in 66 bytes.
string lsString = "Can I have $10 and 7¢, please? I would prefer it in €'s though.";
string lsString = "Can I have $10 and 7¢, please? I would prefer it in €'s though.";
Line 30: Line 28:
}
}
}</lsl>
}</lsl>
|code=<lsl>integer UTF8Len(string fsString)
|code=<lsl>integer UTF8Len(string fsString) {
{
// Author: Cory Fimicoloud
// Author: Cory Fimicoloud
// License: http://creativecommons.org/licenses/by-sa/3.0/us/
// License: http://creativecommons.org/licenses/by-sa/3.0/us/
Line 38: Line 35:
string lsEnc = "";
string lsEnc = "";
integer liByteLen = 0;
integer liByteLen = 0;
while (++liLen < 0)
while (++liLen < 0) {
{
lsEnc = llEscapeURL((lsChar = llGetSubString(fsString, liLen, liLen)));
lsEnc = llEscapeURL((lsChar = llGetSubString(fsString, liLen, liLen)));
if (lsChar != lsEnc)
if (lsChar != lsEnc) {
liByteLen += llStringLength(lsEnc) / 3;
liByteLen += llStringLength(lsEnc) / 3;
else
} else {
++liByteLen;
++liByteLen;
}
}
}
return liByteLen;
return liByteLen;
Line 65: Line 62:
|p2_desc=The length of each split.
|p2_desc=The length of each split.
|return_type=list
|return_type=list
|examples=<lsl>default
|examples=<lsl>default {
{
state_entry() {
state_entry()
{
list laSplit = UTF8Split("Can I have $10 and 7¢, please? I would prefer it in €'s though.", 33);
list laSplit = UTF8Split("Can I have $10 and 7¢, please? I would prefer it in €'s though.", 33);
llOwnerSay("\nUTF8Split\n==========\n\t0: " + llList2String(laSplit, 0) + "\n\t1: " + llList2String(laSplit, 1));
llOwnerSay("\nUTF8Split\n==========\n\t0: " + llList2String(laSplit, 0) + "\n\t1: " + llList2String(laSplit, 1));
}
}
}</lsl>
}</lsl>
|code=<lsl>list UTF8Split(string fsString, integer fiSplit)
|code=<lsl>list UTF8Split(string fsString, integer fiSplit) {
{
// Author: Cory Fimicoloud
// Author: Cory Fimicoloud
// License: http://creativecommons.org/licenses/by-sa/3.0/us/
// License: http://creativecommons.org/licenses/by-sa/3.0/us/
Line 83: Line 77:
string lsEnc = "";
string lsEnc = "";
integer liByteLen = 0;
integer liByteLen = 0;
while (++liLen < 0)
while (++liLen < 0) {
{
lsChar = llGetSubString(fsString, liLen, liLen);
lsChar = llGetSubString(fsString, liLen, liLen);
lsEnc = llEscapeURL(lsChar);
lsEnc = llEscapeURL(lsChar);
if (lsChar != lsEnc)
if (lsChar != lsEnc) {
liByteLen += llStringLength(lsEnc) / 3;
liByteLen += llStringLength(lsEnc) / 3;
else
} else {
++liByteLen;
++liByteLen;
if (liByteLen <= fiSplit)
}
if (liByteLen <= fiSplit) {
lsSplit += lsChar;
lsSplit += lsChar;
else
} else {
{
laSplit += [lsSplit];
laSplit += [lsSplit];
lsSplit = lsChar;
lsSplit = lsChar;
Line 101: Line 94:
}
}
return laSplit + [lsSplit];
return laSplit + [lsSplit];
}</lsl>}}
</div></div>
<div style="border:1px solid #AAAAAA; margin-bottom:10px;">
<div style="background-color:#F4F8FB; border-bottom:1px dotted #AAAAAA; font-weight:bold; margin:0; padding:0.2em 0.5em; text-align:left;">
=====str_repeat=====
</div>
<div style="padding: 0.5em;">
{{User:Cory Fimicoloud/LSLFunction
|desc=Returns fsString repeated fiRepeat times.
|return=Returns the repeated string.
|p1_type=string
|p1_name=fsString
|p1_desc=The string to be repeated.
|p2_type=integer
|p2_name=fiRepeat
|p2_desc=Number of times the fsString string should be repeated.
|return_type=string
|examples=<lsl>default {
state_entry() {
llOwnerSay(str_repeat("a"), 5)); // OwnerSay's "aaaaa".
}
}</lsl>
|code=<lsl>string str_repeat(string fsString, integer fiRepeat) {
    if (fiRepeat < 1) return "";
integer count = 1;
while ((count = count << 1) < fiRepeat) {
fsString += fsString;
}
return fsString + llGetSubString(fsString, count - fiRepeat, count);
}</lsl>}}
}</lsl>}}
</div></div>
</div></div>
</div></div>
</div></div>
</div>
</div>

Revision as of 10:09, 3 August 2009

My Functions

Text

String

UTF8Len
Description
Returns the UTF-8 byte count of the string passed to it.
Returns
Returns the UTF-8 byte count of the string passed to it.
Parameters
• string fsString - The string to get the UTF-8 length of.
Examples
<lsl>default {

state_entry() { // 63 characters. Each of the characters uses 1 byte except for ¢ (2 bytes) and € (3 bytes). Which results in 66 bytes. string lsString = "Can I have $10 and 7¢, please? I would prefer it in €'s though."; llOwnerSay("'" + lsString + "' is " + (string)UTF8Len(lsString) + " bytes."); }

}</lsl>
Code
<lsl>integer UTF8Len(string fsString) {

// Author: Cory Fimicoloud // License: http://creativecommons.org/licenses/by-sa/3.0/us/ integer liLen = ~llStringLength(fsString); string lsChar = ""; string lsEnc = ""; integer liByteLen = 0; while (++liLen < 0) { lsEnc = llEscapeURL((lsChar = llGetSubString(fsString, liLen, liLen))); if (lsChar != lsEnc) { liByteLen += llStringLength(lsEnc) / 3; } else { ++liByteLen; } } return liByteLen;

}</lsl>
UTF8Split
Description
Returns a list containing the string passed to it, split every fiSplit bytes.
Returns
Returns a list containing the string passed to it, split every fiSplit bytes.
Parameters
• string fsString - The string to split.
• integer fiSplit - The length of each split.
Examples
<lsl>default {

state_entry() { list laSplit = UTF8Split("Can I have $10 and 7¢, please? I would prefer it in €'s though.", 33); llOwnerSay("\nUTF8Split\n==========\n\t0: " + llList2String(laSplit, 0) + "\n\t1: " + llList2String(laSplit, 1)); }

}</lsl>
Code
<lsl>list UTF8Split(string fsString, integer fiSplit) {

// Author: Cory Fimicoloud // License: http://creativecommons.org/licenses/by-sa/3.0/us/ string lsSplit = ""; list laSplit = []; integer liLen = ~llStringLength(fsString); string lsChar = ""; string lsEnc = ""; integer liByteLen = 0; while (++liLen < 0) { lsChar = llGetSubString(fsString, liLen, liLen); lsEnc = llEscapeURL(lsChar); if (lsChar != lsEnc) { liByteLen += llStringLength(lsEnc) / 3; } else { ++liByteLen; } if (liByteLen <= fiSplit) { lsSplit += lsChar; } else { laSplit += [lsSplit]; lsSplit = lsChar; liByteLen = 1; } } return laSplit + [lsSplit];

}</lsl>
str_repeat
Description
Returns fsString repeated fiRepeat times.
Returns
Returns the repeated string.
Parameters
• string fsString - The string to be repeated.
• integer fiRepeat - Number of times the fsString string should be repeated.
Examples
<lsl>default {

state_entry() { llOwnerSay(str_repeat("a"), 5)); // OwnerSay's "aaaaa". }

}</lsl>
Code
<lsl>string str_repeat(string fsString, integer fiRepeat) {
   if (fiRepeat < 1) return "";

integer count = 1; while ((count = count << 1) < fiRepeat) { fsString += fsString; } return fsString + llGetSubString(fsString, count - fiRepeat, count);

}</lsl>