Difference between revisions of "User:Cory Fimicoloud/LSLFunctions"
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 09:09, 3 August 2009
My Functions
Text
String
UTF8Len
• string | fsString | - | The string to get the UTF-8 length of. |
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>// 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
• string | fsString | - | The string to split. |
• integer | fiSplit | - | The length of each split. |
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>// 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
• string | fsString | - | The string to be repeated. |
• integer | fiRepeat | - | Number of times the fsString string should be repeated. |
state_entry() { llOwnerSay(str_repeat("a"), 5)); // OwnerSay's "aaaaa". }
}</lsl>if (fiRepeat < 1) return "";
integer count = 1; while ((count = count << 1) < fiRepeat) { fsString += fsString; } return fsString + llGetSubString(fsString, count - fiRepeat, count);
}</lsl>