S2...

May. 17th, 2004 04:18 pm
ibneko: (Default)
[personal profile] ibneko
Notes to self (although it may interest others who work on S2)
-There is no while or for loops. Foreach does work however, just like in perl (yay!)
-Arrays are dynamic. Calling something non-existent returns "" in a string array.
-You can have multi leveled arrays. Not really tested, but it compiles without problems.
-Strings are severely lacking in string-manip functions/methods. I'm writing my own functions to do string searches, because it's a) reusable code, and b) I hate putting ugly code like that in a function that's supposed to do something else.
-Compiler doesn't look ahead, so functions must be created early. Or at least started beforehand? doesn't work.
-Arrays can be accessed via foreach. Nice stuff.
-Classes are supported, but in a weird sense.
class stack
{
var string[] array;
var int top;
function push(string aString);
function pop() : string;
}

function stack::push(string aString)
{
$.array[$.top+1] = $aString;
}
function stack::pop() : string
{
$.top--;
return $.array[$.top+1];
}

function RecentPage::print_body() {
var stack aStack;
print $aStack->pop();
}


(NOTE: This is untested code, I wrote it to probe S2's class capabilities. Ought to compile without problems though)
-S2 is weird (read: annoying) in that a variable declaration uses "var [variable type] [variable name] [= value]. HOWEVER, when you want to use the variable, $[variable name] is required. This annoys me because I tend to type var int index, and then just index when I need to use the $index variable. This makes the compiler return annoy error messages that aren't always immediately clear.
-The compiler error messages are helpful if you READ them carefully and logically. Yes, Neko, I know you like using the guess-and-fail method of programming when trying out things, but you know, error messages are there for A REASON. Baka.

...
Ok, that's enough for now. I forsee a few more ugly surprises later on, in the actual printing-code-to-the-system part, but it looks like clear sailing for a while... Oh, and here's two string manip functions (actually four, two as the "interface" for the two recursive functions) that I'm starting to find useful.

function split_recursive(int stringIndex, string chunk, string tokens,
int arrayIndex, string[] ret) : string[]
{
$stringIndex++;
if ($chunk->length()-$stringIndex < $tokens->length()){
$ret[$arrayIndex] = $chunk->substr(0,$stringIndex);
return $ret;
}
if ($chunk->substr($stringIndex, $tokens->length()) == $tokens){
$ret[$arrayIndex] = $chunk->substr(0,$stringIndex);
$arrayIndex++;
$chunk = $chunk->substr($stringIndex+1, $chunk->length()-$stringIndex);
$stringIndex = -1;
}
return split_recursive($stringIndex, $chunk, $tokens, $arrayIndex, $ret);
}
function split(string chunk, string tokens) : string[]
{
# This is based off java's string tokenizer
var string[] ret;
return split_recursive(-1, $chunk, $tokens, 0, $ret);
}

function replace_recursive(int stringIndex, string chunk, string target,
string replacement) : string
{
$stringIndex++;
if ($chunk->length()-$stringIndex < $target->length()){
return $chunk;
}
if ($chunk->substr($stringIndex, $target->length()) == $target){
$chunk = $chunk->substr(0, $stringIndex)
+$replacement
+$chunk->substr($stringIndex+$target->length(),
$chunk->length()-$stringIndex-$target->length());
$stringIndex = $stringIndex + $replacement->length();
}
return replace_recursive($stringIndex, $chunk, $target, $replacement);
}
function replace(string chunk, string target, string replacement) : string
{
return replace_recursive(-1, $chunk, $target, $replacement);
}

They're not commented because I've got better stuff to do right now. And those function names are pretty self-explanatory, aren't they? Split is from perl's string.split("tokens") functions and replace does what it says- replaces all instances of $target in the string $chunk with $replacement.

You know, I have to say I do love learning new programming languages... so fun~ Wish I has a permament account here so I could play around with S2 as they make changes. ^^;; Xella, I may have to ask you to make the layout public or give me the ID or something so I can create my own theme for the layout. Given the flexibility I'm working into the layout, it will be nothing like yours, I promise~ (mmm, I hope there's not too much flexibility... =o.O= )

The thing that worries me now is that part of the flexibility that I have added makes use of the belief that I can allow users to add their own "text" - and that the text can be inserted into certain places, like the style="" part of a div tag, giving them practically unlimited powers to the equivalent of the S1 style creator/editor.

Oh, and javascript still doesn't work. They check for that between the server and the user's browser. Anything between generated html "script" tags are removed. Pity, ne? Yes, I tried printing the letters of script one by one. Doesn't work.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

Expand Cut Tags

No cut tags

Profile

ibneko: (Default)
ibneko

Most Popular Tags

Style Credit

Page generated Feb. 14th, 2026 03:56 am
Powered by Dreamwidth Studios
January 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2021