kunzite ([info]kunzite1) wrote in [info]s2layers,
@ 2004-12-28 13:25:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:!all, string functions

bunches of string functions
alter_entry | append_arg | quicksort | rehtml | remove_arg | replace_text | split_left | split_right | split | split_mult | split2 | striphtmlnew | strstr
alter_entry(string original) : string "Alter text by find/replace"
[info]mageboltrat's industrial nippon

function alter_entry(string original) : string "Alter text by find/replace"
#######################################################
# from lj:mageboltrat's industrial nippon (id=533012) #
# using lj:mageboltrat's replace_text function        #
#######################################################
{
  return $original;
}
to be overridden like:
function alter_entry(string original) : string {
  var string find    = "";
  var string replace = "";
  
  $find     = "http://stat.livejournal.com/img/userinfo.gif";
  $replace  = "http://pics.livejournal.com/img/fb-userinfo.gif";
  $original = replace_text($original, $find, $replace);

  return $original;
}
and to be called like:
function Page::print_entry(Entry e){
  if(not $e.text_must_print_trusted) {
    print alter_entry($e.text);
  } else {
    $e->print_text();
  }
}
and will change all occurences of "http://stat.livejournal.com/img/userinfo.gif" inside the altered text to "http://pics.livejournal.com/img/fb-userinfo.gif" thus changing to .
append_arg(string url, string arg) : string
[info]cmshaw's wide lines
function append_arg(string url, string arg) : string {
  # guts borrowed from widelines (id #4162751)

  var string anchor = "";
  var string temp   = "";
  var string joiner = "";

  # use ? or & to append the argument
  $joiner = $url->contains("?") ? "&" : "?";

  # check for anchor link
  if ($url->contains("#")) { 
    foreach var int a (0 .. $url->length() - 1) {
      $temp = $url->substr($a, $url->length() - $a);
      if ($temp->starts_with("#")) {
        # pull anchor string off the end of the url
        $anchor = $temp;
        $url = $url->substr(0, $a);
      }
    }
  }

  # return the url with argument inserted
  return "$url$joiner$arg$anchor";
}

quicksort(string[] list, int start, int end) : string[]
quicksort(string[] list) : string[]

by Tony Chang
###############
# <quicksort> #
###############
#// These two functions perform sorting capabilities
#//
#// Credit goes to 'Tony Chang <tychang1 [at] uiuc [dot] edu>'
#// See: http://www.livejournal.com/customize/advanced/layersource.bml?id=54714
#// % Partitions then recursively calls.
#// % Tested up to 172 sortable elements in a string array
function quicksort(string[] list, int start, int end) : string[] {
  if ($end <= $start) {
    return $list;
  }
  
  #// Pick a pivot and move to the front
  var int pivot  = rand($start, $end);
  var string tmp = $list[$start];
  $list[$start]  = $list[$pivot];
  $list[$pivot]  = $tmp;
  
  #// Now Partition
  var int left  = ($start + 1);
  var int right = $end;
  
  foreach var int i ($start .. ($end - 2)) {
    if ($list[$left] > $list[$start]) {
      #// Swap the left and the right, then move the right back
      $tmp          = $list[$left];
      $list[$left]  = $list[$right];
      $list[$right] = $tmp;
      $right--;
    } else {
      $left++;
    }
  }

  # put the pivot back in the middle
  if ($list[$start] < $list[$left]) {
    #// Swap $start and ($left - 1)
    $tmp               = $list[$start];
    $list[$start]      = $list[($left - 1)];
    $list[($left - 1)] = $tmp;
    $pivot             = ($left - 1);
  } else {
    #// Swap $start and $left
    $tmp          = $list[$start];
    $list[$start] = $list[$left];
    $list[$left]  = $tmp;
    $pivot        = $left;
  }
  
  #// Sort either side of the pivot
  $list = quicksort($list, $start,       ($pivot - 1));
  $list = quicksort($list, ($pivot + 1), $end);
  
  return $list;
}

#// Recursing Function
function quicksort(string[] list) : string[] {
  return quicksort($list, 0, size $list - 1);
}
################
# </quicksort> #
################

rehtml(string text) : string "Unescape html in \$text by replacing &gt; with > and &lt; with <."
developed by [info]masterslacker using [info]mageboltrat's replace_text
function rehtml(string text) : string "Unescape html in \$text by replacing &gt; with > and &lt; with <." {
####################################################################
# by lj:masterslacker using lj:mageboltrat's replace_text function #
####################################################################
  return replace_text(replace_text($text, "&lt;", "<"), "&gt;", ">");
}
example: if html is entered into the customization wizard it is stored inside the property in its escaped form. this function will unescape it.
remove_arg(string url, string argitem) : string "Remove a query string argument from a URL when given URL and key to remove."
[info]cmshaw's wide lines
function remove_arg(string url, string argitem) : string {
  # guts borrowed from widelines (id #4162751)

  var string temp1  = "";
  var string temp2  = "";
  var string temp3  = "";
  var string url1   = "";
  var string url2   = "";
  var string joiner = "";
  
  # check for item
  if (not $url->contains($argitem)) { return $url; }

  # break url around argument
  foreach var int i (0 .. $url->length() - 1) {
    $temp1= $url->substr($i, $argitem->length());
    if ($temp1== $argitem) {
      # found the argument we're looking for -- put everything prior to it into $url1
      $url1   = $url->substr(0, $i - 1);
      $joiner = $url->substr($i - 1, 1);

      # look at what's after it
      $temp2 = $url->substr($i + $argitem->length(), $url->length() - ($i + $argitem->length()));
      if ($temp2 ->contains("&") or $temp2 ->contains("#")) {
        foreach var int j (0 .. $temp2 ->length() - 1) {
          $temp3= $temp2->substr($j, $temp2->length() - $j);
          if ($temp3->starts_with("&") or $temp3->starts_with("#")) {
            # found another argument or an anchor -- put it and what follows into $url2
            # because we can't break the for loop, check that it's the first one
            if ($url2 == "") { 
	      if ($temp3->starts_with("&") and $joiner == "?"){
                # We removed the first argument and need to bump up the second here
                $temp3 = $joiner + $temp3->substr(1, $temp3->length() - 1);
              }
              $url2 = $temp3; 
            }
          }
        }
      } else {
        # everything after is just the rest of the to-be-removed argument
        $url2 = "";
      }
    }
  }

  # return everything before and after the argument
  return $url1 + $url2;
}

replace_text(string text, string find, string replacement) : string "Search within \$text and replaces any occurences of \$find with \$replacement."
[info]mageboltrat's industrial nippon
function replace_text(string text, string find, string replacement) : string "Search within \$text and replaces any occurences of \$find with \$replacement." {
#######################################################
# from lj:mageboltrat's industrial nippon (id=533012) #
#######################################################
  var string[] findarray;
  var int pos = 1;
  foreach var string findcharacter($find) {
    $findarray[$pos] = $findcharacter;
    $pos             = $pos + 1;
  }
  var int    place         = 1;
  var bool   found         = false;
  var string completedtext = "";
  var string foundtext     = "";
  foreach var string searchcharacter($text) {
    if  ($searchcharacter == $findarray[$place]) {
      if ($place == $find->length()) {
        $foundtext =  $replacement;
        $place     = 1;
      } else {
        $foundtext = $foundtext + $searchcharacter;
        $place     = $place + 1;
      }  
    } else {
      $completedtext = $completedtext + $foundtext + $searchcharacter;
      $foundtext     = "";  
      $place         = 1;    
    }
  }
  $completedtext = $completedtext + $foundtext;
  return $completedtext;
}
example:
var string replaced_text = replace_text(
                                        $e.text,
                                        "http://stat.livejournal.com/img/userinfo.gif",
                                        "http://pics.livejournal.com/img/fb-userinfo.gif"
                                       );

split_left (string input, string break) : string "Split a string on a delimiter once and return first half"
by [info]mageboltrat
function split_left (string input, string break) : string "Split a string on a delimiter once and return first half" {
#####################
# by lj:mageboltrat #
#####################
  $input = reverse $input;
  var string results;
  var bool found;
  $found = false;
  $results = "";
  foreach var string character ($input) {
  if ($found == true) { $results = $results + $character; }
  if ($character == $break) { $found = true ; }
  }
  $results = reverse $results;
  return $results;
}
example:
var string string = "foo|bar|moo";
var string left   = split_left($string); # yields "foo"

split_right (string input, string break) : string "Split a string on a delimiter once and return second half"
by [info]mageboltrat
function split_right (string input, string break) : string "Split a string on a delimiter once and return second half" {
#####################
# by lj:mageboltrat #
#####################
  $input = reverse $input;
  var string results;
  var bool found;
  $found = false;
  $results = "";
  foreach var string character ($input) {
  if ($character == $break) { $found = true ; }
  if ($found == false) { $results = $results + $character; }
  }
  $results = reverse $results;
  return $results;
}
example:
var string string = "foo|bar|moo";
var string right  = split_right($string); # yields "bar|moo"

split (string input, string break) : string[] "Split a string on a delimiter once and return array of two strings"
by [info]mageboltrat
function split (string input, string break) : string[] "Split a string on a delimiter once and return array of two strings" {
#####################
# by lj:mageboltrat #
#####################
  var string[] output;
  $output[0] = split_left($input, $break);
  $output[1] = split_right($input, $break);
  return $output;
}
example:
var string   string = "foo|bar|moo";
var string[] split  = split($string); # yields array("foo", "bar|moo");

split_mult (string input, string break) : string[] "Split a string on a delimiter multiple times and return array of split strings"
by [info]kunzite1 based upon [info]mageboltrat's split_left, split_right, split
function split_mult (string input, string break) : string[] "Split a string on a delimiter multiple times and return array of split strings" {
#############################################################################
# by lj:kunzite1 based upon lj:mageboltrat's split_left, split_right, split #
#############################################################################
  var string results;
  var string[] output;
  $output[0] = "";
  var int found;
  var int count;
  $results = "";
  $found = 0;
  $count = 0;
  foreach var string character ($input) {
  if ($found == 1) { $found = 0; }
  if ($character == $break) { $output[$count] = $results; $results = ""; $count = $count + 1; $found = 1; }
  if ($found == 0) { $results = $results + $character; }
  }
  $output[$count] = $results;
  return $output;
}
example:
var string   string = "foo|bar|moo";
var string[] split  = split_mult($string); # yields array("foo", "bar", "moo");

split2(string str, string delim) : string[]
by [info]kumba12345.
function split2(string str, string delim) : string[] "Split a string on a multiple-character delimiter" {
####################
# by lj:kumba12345 #
####################
  var string[] list      = [""];             #// List that holds parsed elements
  var string   bit       = "";               #// Holds $delimsize-character bits of the string at a time
  var int      strsize   = $str->length();   #// String Length
  var int      delimsize = $delim->length(); #// Delimiter length
  var int      i         = 0;                #// List Position
  var int      p         = 0;                #// Character Position in String
  var int      a         = 0;                #// Start Position of Chunk
  var int      z         = 0;                #// End Position of Chunk
  var bool     end       = false;            #// Bool to determine end of string


  #// If passed a valid string and delimiter (size > 0), do our magic
  if(($strsize > 0) and ($delimsize > 0)) {
    #// Starting off, see if the string even contains a delimiter
    if(not $str->contains($delim)) {
      #// It doesn't, just return the whole string
      $list[0] = $str;
      return $list;
    }

    #// Assign entire string to $chunk
    var string chunk = $str;

    #// Loop
    foreach $p (0 .. ($strsize - 1)) {
      #// Get a block of characters, up to $delimsize, and store to $bit
      $bit = $str->substr($p, $delimsize);

      #// Keep checking each chunk for delimiters until the end of the string
      if (not $end) {

        #// Does bit match delimiter?
        if ($bit == $delim) {
          #// It does

          #// Calculate the end position of the chunk
          $z = ($p - ($delimsize - 1));

          #// Get chunk w/o delimiter
          $list[$i] = $str->substr($a, (($z - $a) + 1));
          $i++;

          #// Calculate the start position of the next chunk
          $a = ($p + $delimsize);

          #// Reset $chunk to contain the remainder of the string
          $chunk = $str->substr($a, ($strsize - $a));

          #// Does the new chunk have any more delimiters?
          #// If it does, not at end of string yet.
          #// If it doesn't, at end of string, make final assignment.
          if (not $chunk->contains($delim)) {
            $end      = true;
            $list[$i] = $chunk;
          }
        }
      } 
    }
  }

  #// All done, return the split list
  return $list;
}
example:
var string   string = "foo||bar||moo";
var string[] split  = split2($string); # yields array("foo", "bar", "moo");

striphtmlnew(string in, int maxlen) : string "Strip HTML from text"
by [info]idealisms
note: striphtml(string s) does function in the core.
function striphtmlnew(string in, int maxlen) : string "Strip HTML from text"
###################
# by lj:idealisms #
###################
{
  var string ans;
  var int inside = 0;
  var int len = 0;
  foreach var int pos (0 .. $in->length()) {
    if ("<" == $in->substr($pos, 1)) {
      $inside = $inside + 1;
    }
    if (0 == $inside) {
      $ans = $ans + $in->substr($pos, 1);
      $len = $len + 1;
    }
    if (">" == $in->substr($pos, 1) and $inside > 0) {
      $inside = $inside - 1;
    }
    if ($maxlen == $len) {
      return $ans+"...";
    }
  }
  return $ans;  
}
function striphtmlnew(string in) : string "Strip HTML from text"
###################
# by lj:idealisms #
###################
{
  return striphtmlnew($in, $in->length());
}
example:
var string stripped_text_short = striphtmlnew($e.text, 50);
var string stripped_text       = striphtmlnew($e.text);

strstr(string needle, string haystack) : string
by [info]kunzite1. requested by [info]senji.
function strstr(string needle, string haystack) : string {
#############################################################################################
# by lj:kunzite1.  requested by lj:senji.                                                   #
# http://www.opengroup.org/onlinepubs/009695399/functions/strstr.html                       #
# http://www.php.net/manual/en/function.strstr.php                                          #
# return null string if needle not found in haystack                                        #
# if haystack is null string, return needle                                                 #
# if needle is found in haystack, return end of haystack, starting from beginning of needle #
#############################################################################################
  var string return = "";
  var bool   found  = false;
  if($haystack->length() > 0) {
    if($haystack->contains($needle)) {
      foreach var int pos (0 .. size($haystack)) {
        if(($haystack->substr($pos, $needle->length()) == $needle) and not $found) {
          $return = $haystack->substr($pos, $haystack->length() - $pos);
          $found  = true;
        }
      }
    }
  } else {
    $return = $needle;
  }
  return $return;
}
example:
var string  needle   = "";
var string  haystack = "";
var string  output   = "";

"""<table border="1"><tr><td>needle</td><td>haystack</td><td>output</td></tr>""";

$needle   = "@";
$haystack = "user@example.com";
$output   = strstr($needle, $haystack);
"""<tr><td>$needle</td><td>$haystack</td><td>$output</td></tr>""";

$needle   = "@exa";
$haystack = "user@example.com";
$output   = strstr($needle, $haystack);
"""<tr><td>$needle</td><td>$haystack</td><td>$output</td></tr>""";

$needle   = "@";
$haystack = "user@example@com";
$output   = strstr($needle, $haystack);
"""<tr><td>$needle</td><td>$haystack</td><td>$output</td></tr>""";

$needle   = "@exa";
$haystack = "user@example@com";
$output   = strstr($needle, $haystack);
"""<tr><td>$needle</td><td>$haystack</td><td>$output</td></tr>""";

$needle   = "foo";
$haystack = "bar";
$output   = strstr($needle, $haystack);
"""<tr><td>$needle</td><td>$haystack</td><td>$output</td></tr>""";

$needle   = "@";
$haystack = "";
$output   = strstr($needle, $haystack);
"""<tr><td>$needle</td><td>$haystack</td><td>$output</td></tr>""";

$needle   = "@exa";
$haystack = "";
$output   = strstr($needle, $haystack);
"""<tr><td>$needle</td><td>$haystack</td><td>$output</td></tr>""";

$needle   = "";
$haystack = "@";
$output   = strstr($needle, $haystack);
"""<tr><td>$needle</td><td>$haystack</td><td>$output</td></tr>""";

$needle   = "";
$haystack = "@exa";
$output   = strstr($needle, $haystack);
"""<tr><td>$needle</td><td>$haystack</td><td>$output</td></tr>""";

$needle   = "";
$haystack = "";
$output   = strstr($needle, $haystack);
"""<tr><td>$needle</td><td>$haystack</td><td>$output</td></tr>""";

"</table>";
output:
needlehaystackoutput
@user@example.com@example.com
@exauser@example.com@example.com
@user@example@com@example@com
@exauser@example@com@example@com
foobar
@@
@exa@exa
@
@exa



(Post a new comment)


[info]sssexygirl
2004-12-28 04:13 pm UTC (link)
what does all of this do?

(Reply to this) (Thread)


[info]kunzite1
2004-12-29 11:28 am UTC (link)
adds functions to the string class of s2.

you can only define new functions in layout layers.

these are all global functions.

if you wanted to add them to the string class you would have to declare them like:
function string alter_entry(string original) : string {
}
or
function string alter_entry() : string {
  var string original = $this;
}
depending on which version of the function you use you would call them as:
$e.text-<alter_entry($e.text);($e.text);
or
$e.text->alter_entry();

(Reply to this) (Parent)


[info]absolut
2004-12-29 09:52 am UTC (link)
I tried using the altered_entry function, but the code you have there didn't work, I had to change it to this:

function alter_entry(string original) : string {
  var string find    = "";
  var string replace = "";
  var string altered = "";
  
  $find    = "http://stat.livejournal.com/img/userinfo.gif";
  $replace = "http://pics.livejournal.com/img/fb-userinfo.gif";
  $altered = replace_text($original, $find, $replace);

  return $altered;
}

(Reply to this)


[info]safiiru
2005-01-11 04:16 am UTC (link)
Not sure if you'll see this, but is there an official story as to why the builtin striphtml is broken?

(Reply to this) (Thread)


[info]kunzite1
2005-01-11 05:09 am UTC (link)
official? somewhere. here.
unofficial? never implemented.

same with alternate(string a, string b) that i could have used today.

(Reply to this) (Parent)


[info]camomiletea
2005-02-27 06:20 am UTC (link)
This is in the description of one of the functions:

rehtml(string text) : string "Unescape html in \$text by replacing > with > and < with <."

Should probably be: &lt; with > and &gt; with >. It's repeated twice there.

(Reply to this) (Thread)


[info]kunzite1
2005-02-27 05:17 pm UTC (link)
yeah... i noticed that too and forgot to do something about it. :D

(Reply to this) (Parent)

Sorry to bother you, but...
[info]xtomxfallsx
2005-05-06 08:10 am UTC (link)
Is there a simple function for just checking whether a string contains a certain substring?

For example, say i want to check entries for img tags ("<img") and size the entry div accordingly, how could I check $e.text for any instance of "<img"?

I've been trying to figure out how to use the contains method, but S2 documentation isn't near as helpful as the php documentation I'm used to.

(Reply to this) (Thread)

Re: Sorry to bother you, but...
[info]kunzite1
2005-05-06 01:37 pm UTC (link)
<3 php.net
</3 s2's docs.
if($string->contains("<img")) {
  # do a foreach searching for 'w', then 'i', etc to grab the width
  # do the same for the height
  # drop them into variables
  # be sure to check for width="1", width='1' and width=1
  # might want to also check for style="width:1px"
}
if you come up with a handy function for strings, by all means, post it to this entry.

(Reply to this) (Parent)(Thread)

Re: Sorry to bother you, but...
[info]xtomxfallsx
2005-05-07 10:27 pm UTC (link)
Oh, it's not likely that I'll come up with any nice functions on my own. This S2 stuff is out of my league.

I used what you listed to check for img tags and it works great. I've even got it checking for any instance of [info] with the img tags so that it will ignore lj-user tags.

Unfortunately, using foreach to go through and check the image dimensions is beyond me, so I'll just stick with my half-assed job.

Thanks for your help, though. It allowed me to do basically what I was trying to do.

(Reply to this) (Parent)(Thread)

Re: Sorry to bother you, but...
[info]kunzite1
2005-05-07 10:30 pm UTC (link)
could you show me how you use the code that i gave you?
i might be able to rig something to search for height and width and extract it.
then it would hopefully be able to be used for anything.

yay for getting it worked out. :)

(Reply to this) (Parent)(Thread)

Re: Sorry to bother you, but...
[info]xtomxfallsx
2005-05-07 10:41 pm UTC (link)
Basically, in my print_entry function, just before the it prints the entry text, it opens the scrolling div. The code looks like this:



The purpose was to make it so I wasn't looking at 640x480 (or higher) images in a 400x120 div with scrollbars.

I wish there was a better way than using the lenght of $e.text to determine whether to limit the height of entries without images, since it doesn't always work the way I want it to.

(Reply to this) (Parent)(Thread)

Re: Sorry to bother you, but...
[info]kunzite1
2005-05-07 10:45 pm UTC (link)
it doesnt always work the way that i want it to either.

but that code looks good. not exactly the way that i would do it, but it's good. :)

(Reply to this) (Parent)(Thread)

Re: Sorry to bother you, but...
[info]xtomxfallsx
2005-05-08 05:07 am UTC (link)
If you have a better way to do it, I'm totally open to that. I just did it the only way I could think of. Of course, if somebody has both images and lj-user tags in their post, it treats it like there's no image because my code isn't very smart. =P

(Reply to this) (Parent)(Thread)

Re: Sorry to bother you, but...
[info]kunzite1
2005-05-08 07:42 am UTC (link)
i would have used the variables differently, but you've got some decent logic there. i'd have to test it out and play with different types of entries to see if i could make it smarter... but i dont really feel like it. ;)

(Reply to this) (Parent)


[info]shatterstripes
2005-06-18 06:54 am UTC (link)
Thanks for posting these! Now I can make my LJ be a little more syntactically precise, and indent the first line of paragraphs for something prettier!

var string replaced_text = replace_text ($e.text,"

","

");
"""

$replaced_text
""";

(Reply to this) (Thread)


[info]kunzite1
2005-06-19 12:30 am UTC (link)
for future reference, this was:
var string replaced_text = replace_text ($e.text,"<br /><br />","<p>");
"""<div class="contents">$replaced_text</div>""";

(Reply to this) (Parent)


[info]hythloday
2006-01-17 07:41 am UTC (link)
Your implementation is O(n), and there's an O(ln n) implementation. Let me know if you want a hand with it.

(Reply to this) (Thread)


[info]kunzite1
2006-01-17 08:40 am UTC (link)
feel free to hack on it and post the code in a comment.

(Reply to this) (Parent)


[info]camomiletea
2006-03-18 07:11 pm UTC (link)
My style has been affected by the VoicePosts thing. I'm using alter_entry function, which sort of need $e.text. Is it now impossible to use alter_entry? Can it be adjusted?

(Reply to this) (Thread)


[info]kunzite1
2006-03-18 07:29 pm UTC (link)
hmm. have some pseudocode:
if($e.text->contains("[url to flash player]") {
  # don't print the entry text or play with alter_entry()
  # instead, print link to ?format=light or something and just deal
  # silly flash player that's stupid and that should have an option to revert to the old mode
}

(Reply to this) (Parent)(Thread)


[info]camomiletea
2006-03-18 08:42 pm UTC (link)
Thanks!

(Reply to this) (Parent)(Thread)


[info]kunzite1
2006-03-18 08:44 pm UTC (link)
many welcomes. the else should print it as it would normally with your edits of $e.text. :)

(Reply to this) (Parent)(Thread)


[info]camomiletea
2006-03-18 08:59 pm UTC (link)
Actually, I guess it would be possible to have

if($e.text->contains("[url to flash player]") {
  $e->print_entry();
} else {
  alter_text($e.text);
}


I don't need to modify VoicePosts much, anyway, so it would work.

(Reply to this) (Parent)(Thread)


[info]kunzite1
2006-03-18 09:03 pm UTC (link)
more specifically, looks like it'll be a lot like:
if($e.text->contains("http://stat.livejournal.com/pp_play_mp3.swf") {
  $e->print_text();
} else {
  print alter_entry($e.text);
}

(Reply to this) (Parent)


[info]kunzite1
2006-03-18 09:04 pm UTC (link)
except with one more ) after the contains() method call.

(Reply to this) (Parent)(Thread)


[info]camomiletea
2006-03-18 09:07 pm UTC (link)
Yeah, I know. I made a bunch of errors...

(Reply to this) (Parent)(Thread)


[info]kunzite1
2006-03-18 09:09 pm UTC (link)
not a problem. even i did. ;)

you'll get it soon enough and yay for no more broken entries.

*shakes fist at devs again*

test, test, test!

(Reply to this) (Parent)


[info]camomiletea
2006-03-18 09:05 pm UTC (link)
or $e->print_text() rather

(Reply to this) (Parent)


[info]ravenchyld
2006-04-13 02:24 am UTC (link)
THANKYOUTHANKYOUTHANKYOUTHANKYOUTHANKYOUTHANKYOU for putting these together and all in one place and stuff. I'm going to use about five of them :)

(Reply to this)


[info]uniquewonders
2006-07-05 09:02 pm UTC (link)
function Page::print_entry(Entry e){
if(not $e.text_must_print_trusted)) {

Extra ) or one ( missing?

(Reply to this) (Thread)


[info]kunzite1
2006-07-05 09:26 pm UTC (link)
nuked one. thanks!

(Reply to this) (Parent)


Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…