Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 15 additions & 11 deletions app/src/processing/app/Processing.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,27 @@ import com.github.ajalt.clikt.parameters.options.flag
import com.github.ajalt.clikt.parameters.options.help
import com.github.ajalt.clikt.parameters.options.option
import processing.app.api.Contributions
import processing.app.api.SketchCommand
import processing.app.api.Sketchbook
import processing.app.ui.Start
import java.io.File
import java.util.prefs.Preferences
import kotlin.concurrent.thread



suspend fun main(args: Array<String>){
Processing()
.subcommands(
LSP(),
LegacyCLI(args),
Contributions(),
Sketchbook(),
SketchCommand()
)
.main(args)
}

class Processing: SuspendingCliktCommand("processing"){
val version by option("-v","--version")
.flag()
Expand Down Expand Up @@ -46,16 +61,6 @@ class Processing: SuspendingCliktCommand("processing"){
}
}

suspend fun main(args: Array<String>){
Processing()
.subcommands(
LSP(),
LegacyCLI(args),
Contributions(),
Sketchbook()
)
.main(args)
}

class LSP: SuspendingCliktCommand("lsp"){
override fun help(context: Context) = "Start the Processing Language Server"
Expand All @@ -74,7 +79,6 @@ class LSP: SuspendingCliktCommand("lsp"){
}
}


class LegacyCLI(val args: Array<String>): SuspendingCliktCommand("cli") {
override val treatUnknownOptionsAsArgs = true

Expand Down
62 changes: 62 additions & 0 deletions app/src/processing/app/api/SketchCommand.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package processing.app.api

import com.github.ajalt.clikt.command.SuspendingCliktCommand
import com.github.ajalt.clikt.core.Context
import com.github.ajalt.clikt.core.subcommands
import com.github.ajalt.clikt.parameters.arguments.argument
import com.github.ajalt.clikt.parameters.arguments.help
import com.github.ajalt.clikt.parameters.options.flag
import com.github.ajalt.clikt.parameters.options.help
import com.github.ajalt.clikt.parameters.options.option
import processing.app.Language
import processing.app.Platform
import processing.app.Preferences
import java.io.File

class SketchCommand: SuspendingCliktCommand("sketch"){
override fun help(context: Context) = "Manage a Processing sketch"
override suspend fun run() {

}
init {
subcommands(Format())
}

class Format: SuspendingCliktCommand("format"){
override fun help(context: Context) = "Format a Processing sketch"
val file by argument("file")
.help("Path to the sketch file to format")
val inPlace by option("-i","--inplace")
.flag()
.help("Format the file in place, otherwise prints to stdout")

override suspend fun run(){
try {
Platform.init()
Language.init()
Preferences.init()

// run in headless mode
System.setProperty("java.awt.headless", "true")

val clazz = Class.forName("processing.mode.java.AutoFormat")
// Indirect invocation since app does not depend on java mode
val formatter = clazz
.getDeclaredConstructor()
.newInstance()

val method = clazz.getMethod("format", String::class.java)
val code = File(file).readText()

val formatted = method.invoke(formatter, code) as String
if(inPlace) {
File(file).writeText(formatted)
return
}
println(formatted)
} catch (e: Exception) {
throw InternalError("Failed to invoke main method", e)
}
}
}
}
Loading