Add program.d
This commit is contained in:
55
SMILEBASIC/program.d
Normal file
55
SMILEBASIC/program.d
Normal file
@@ -0,0 +1,55 @@
|
||||
module otya.smilebasic.program;
|
||||
import std.container;
|
||||
|
||||
struct Slot
|
||||
{
|
||||
DList!wstring program;
|
||||
void load(wstring data)
|
||||
{
|
||||
import std.algorithm;
|
||||
program.clear();
|
||||
foreach(l; splitter(data, "\n"))
|
||||
{
|
||||
program.insertBack(l ~ '\n');
|
||||
}
|
||||
}
|
||||
wchar[] text()
|
||||
{
|
||||
import std.algorithm.iteration, std.outbuffer;
|
||||
auto buffer = new OutBuffer();
|
||||
buffer.reserve(program.opSlice.map!"(a.length + 1) * 2".sum);
|
||||
|
||||
foreach(line; program)
|
||||
{
|
||||
buffer.write(line);
|
||||
}
|
||||
ubyte[] progbuff = buffer.toBytes;
|
||||
wchar[] progbuff2 = (cast(wchar*)progbuff.ptr)[0..progbuff.length / 2];
|
||||
return progbuff2;
|
||||
}
|
||||
import otya.smilebasic.token;
|
||||
wstring getLine(SourceLocation loc)
|
||||
{
|
||||
import std.string;
|
||||
int i;
|
||||
foreach (line; program)
|
||||
{
|
||||
i++;
|
||||
if (i == loc.line)
|
||||
return line;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
class Program
|
||||
{
|
||||
Slot[] slot;
|
||||
int currentSlot;
|
||||
int currentLine = 1;
|
||||
int slotSize = 4;
|
||||
this()
|
||||
{
|
||||
slot = new Slot[5];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user