Initial commit
This commit is contained in:
commit
8c25a8be3e
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
.gradle
|
||||
.build
|
||||
build
|
||||
gradle
|
||||
.kotlin
|
||||
out
|
||||
|
34
build.gradle.kts
Normal file
34
build.gradle.kts
Normal file
|
@ -0,0 +1,34 @@
|
|||
plugins {
|
||||
kotlin("jvm") version "2.0.0"
|
||||
application
|
||||
distribution
|
||||
}
|
||||
|
||||
application {
|
||||
mainClass.set("xyz.maxwellj.chookspeak.MainKt")
|
||||
layout.buildDirectory.dir("distributions/")
|
||||
}
|
||||
|
||||
group = "xyz.maxwellj.chookspeak"
|
||||
version = "0.0.1"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
tasks.withType<Jar> {
|
||||
manifest {
|
||||
attributes["Main-Class"] = "xyz.maxwellj.chookspeak.MainKt"
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
testImplementation(kotlin("test"))
|
||||
}
|
||||
|
||||
tasks.test {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
kotlin {
|
||||
jvmToolchain(17)
|
||||
}
|
16
examples/main.chsp
Normal file
16
examples/main.chsp
Normal file
|
@ -0,0 +1,16 @@
|
|||
// comment lmao
|
||||
/* a confusing comment */
|
||||
egg notepad
|
||||
init {
|
||||
sendMessage "Hello there!"
|
||||
html {
|
||||
<textarea id="dingus">
|
||||
}
|
||||
log "egg initialised"
|
||||
}
|
||||
|
||||
onRecieving egg, *, * {
|
||||
messagehtml {
|
||||
<div style="color: blue">we have successfully dingused</div>
|
||||
}
|
||||
}
|
5
settings.gradle.kts
Normal file
5
settings.gradle.kts
Normal file
|
@ -0,0 +1,5 @@
|
|||
plugins {
|
||||
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
|
||||
}
|
||||
rootProject.name = "chookspeak"
|
||||
|
120
src/main/kotlin/Main.kt
Normal file
120
src/main/kotlin/Main.kt
Normal file
|
@ -0,0 +1,120 @@
|
|||
package xyz.maxwellj.chookspeak
|
||||
|
||||
import java.io.File
|
||||
|
||||
fun splitList(input: String): List<String> {
|
||||
val result = mutableListOf<String>()
|
||||
var currentToken = StringBuilder()
|
||||
var insideQuotes = false
|
||||
|
||||
for (char in input) {
|
||||
when {
|
||||
char == '"' -> {
|
||||
currentToken.append(char)
|
||||
insideQuotes = !insideQuotes
|
||||
}
|
||||
char.isWhitespace() && !insideQuotes -> {
|
||||
if (currentToken.isNotEmpty()) {
|
||||
result.add(currentToken.toString())
|
||||
currentToken = StringBuilder()
|
||||
}
|
||||
}
|
||||
else -> currentToken.append(char)
|
||||
}
|
||||
}
|
||||
|
||||
if (currentToken.isNotEmpty()) {
|
||||
result.add(currentToken.toString())
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
println("Chookspeak Language Processor")
|
||||
println("Let's Go!")
|
||||
var fileLocation: File
|
||||
try {
|
||||
fileLocation = File(args[0])
|
||||
} catch (e: Exception) {
|
||||
println("Please specify a file")
|
||||
return
|
||||
}
|
||||
if (!fileLocation.exists()) {
|
||||
println("Your Chookspeak file does not exist.")
|
||||
return
|
||||
}
|
||||
val outputIndexJS = File("out/index.js")
|
||||
val outputMessageJS = File("out/message.js}")
|
||||
val outputHTML = File("out/index.html")
|
||||
outputIndexJS.writeText("")
|
||||
outputMessageJS.writeText("")
|
||||
outputHTML.writeText("")
|
||||
val file = fileLocation.readLines()
|
||||
var lineCounter = 1
|
||||
var commenting = 0
|
||||
var eggName = ""
|
||||
var status = mutableListOf<String>()
|
||||
for (line in file) {
|
||||
val lineArgsUnfiltered = splitList(line)
|
||||
val lineArgs = lineArgsUnfiltered.filterNot { it == "" }
|
||||
if (lineArgs.size == 0) {
|
||||
continue
|
||||
}
|
||||
println("line ${lineArgs.toString()}")
|
||||
var slc = 0
|
||||
for (item in lineArgs) {
|
||||
if (item == "//") {
|
||||
commenting = 1
|
||||
} else if (item == "/*") {
|
||||
commenting = 2
|
||||
slc = 1
|
||||
} else if (item == "*/" && commenting == 2 && slc == 0) {
|
||||
commenting = 0
|
||||
}
|
||||
}
|
||||
if (commenting == 0) {
|
||||
if (lineCounter == 1) {
|
||||
if (lineArgs[0] != "egg") {
|
||||
println("Please specify your egg on your first line of code.")
|
||||
return
|
||||
} else {
|
||||
eggName = lineArgs[1]
|
||||
outputIndexJS.appendText("function egg$eggName() {\n")
|
||||
outputHTML.appendText("""<div id="$eggName" style="display: hidden">${"\n"}""")
|
||||
}
|
||||
}
|
||||
if (lineArgs[0] == "}") {
|
||||
try {
|
||||
status.removeLast()
|
||||
} catch (e: Exception) {}
|
||||
println("status ${status.toString()}")
|
||||
}
|
||||
if (lineArgs.size > 1) {
|
||||
if (lineArgs[1] == "{") {
|
||||
status.add(lineArgs[0])
|
||||
println("status ${status.toString()}")
|
||||
}
|
||||
}
|
||||
if (status == listOf("init")) {
|
||||
if (lineArgs[0] == "log") {
|
||||
outputIndexJS.appendText("console.log(${lineArgs[1]});\n")
|
||||
}
|
||||
if (lineArgs[0] == "sendMessage") {
|
||||
outputIndexJS.appendText("""const egg${eggName}Message = { "type" = "egg-$eggName", "username" = username, "token" = md5(password), "content": ${lineArgs[1]}};${"\n"}""")
|
||||
outputIndexJS.appendText("ws.send(JSON.stringify(egg${eggName}Message))\n")
|
||||
}
|
||||
}
|
||||
if (status == listOf("init", "html") && lineArgs[0] != "html") {
|
||||
outputHTML.appendText("${lineArgs.joinToString(" ")}\n")
|
||||
}
|
||||
lineCounter ++
|
||||
} else if (commenting == 1) {
|
||||
commenting = 0
|
||||
} else if (commenting == 2) {
|
||||
commenting = 0
|
||||
}
|
||||
}
|
||||
outputIndexJS.appendText("}\n")
|
||||
outputHTML.appendText("</div>\n")
|
||||
}
|
Loading…
Reference in New Issue
Block a user