diff --git a/site/pages/todo.html b/site/pages/todo.html
index 3266c47..6408142 100644
--- a/site/pages/todo.html
+++ b/site/pages/todo.html
@@ -8,9 +8,10 @@
+ - Rework the project structure to use Make and have more files rather than larger files.
- Stress-test seggies (maybe build a large "stresstest" project that uses the most cursed possible permutations of all the sitix features).
- Safety: Sitix should not delete your entire codebase if you accidentally mistype the command.
- - Use Evals more widely and implement string manipulation.
+ - Use Evals more widely.
[/]
diff --git a/site/pages/usage.html b/site/pages/usage.html
index 4b3d13c..fcfd95a 100644
--- a/site/pages/usage.html
+++ b/site/pages/usage.html
@@ -43,6 +43,11 @@
to a single whitespace. \[@on markdown] and \[@off markdown] allow Markdown-like processing across the file. Sitix Markdown is not quite ready
for widespread use, yet, but at the time of writing supports *italic*, **bold**, __underline__, ~~strikethrough~~, `code`, and automatic paragraphs/line breaks.
It works quite nicely with minifier, yes.
+ \[>filename]object\[/]: Renders an object into a new file represented by filename. Filename should be a relative path as it will be transmuted into
+ the output directory. This is very useful for, say, turning a single Sitix object file containing webcomic post data into a directory full of posts.
+ \[~object1 object2]: Sets the ghost on object1 to object2, effectively cloning object2 to object1. It is not a true copy; changes in object2 will be
+ reflected in object1. However, unlike with normal dereference-setting (\[=object1]\[^object2]\[/]), you can access nested objects inside the ghost.
+ It's not unlike changing the value of a pointer in C.
You can use Sitix commands in any file with a Sitix opening phrase; Sitix commands in files that do not have an opening phrase will be ignored.
There are a number of "special objects" that resolve magically at different places. The most useful two are __after__ and __before__,
@@ -59,6 +64,13 @@
equals: Checks if two values on the stack are equal to each other. It will remove both values from the stack and add a boolean value as the result.
not: Pops the top value off the stack and replaces it with a boolean equal to the opposite of the truthyness of that object. "Hello World" not
would just be false, for instance.
+ concat: Stringifies the top two items on stack and concatenates them together in order.
+ strip_fname: Cuts off the directories and the file extension of a file, going from "test/home/base.py.out" to "base.py", for instance.
+ copy: Copy the top thing on stack.
+ count_back: Pops the top two items off stack and searches for the first occurring index of the smaller string in the larger string. Don't get it? Read the code.
+ slice_left: Pops the top two items off stack and, assuming one is a number, stringifies the other one and slices from the start of that to the index
+ represented by the number. This discards the character at the index, so "hello,world" 5 slice_left returns just "hello".
+ slice_right: Same behavior as slice_left, except it slices the "right" side, so "hello,world" 5 slice_left would return "world".
Truthyness in Evals is not dissimilar to JavaScript. Empty strings are falsey, and all other strings are truthy; 0 is falsey and all other numbers are truthy, and booleans are truthy or falsey based on their value.
Sitix variables are considered truthy if the lookup is successful, and falsey otherwise; this allows for a replacement to the old \[i exists] and \[i config],