mirror of
https://github.com/irmen/prog8.git
synced 2024-12-25 08:29:25 +00:00
* used "@embedded@" convention instead of "<res:...>", put it into SourceCode
This commit is contained in:
parent
137a89da15
commit
b0073ac933
@ -41,19 +41,12 @@ object Prog8Parser {
|
||||
parseTree.block().forEach { module.add(it.toAst(module.isLibrary(), PetsciiEncoding)) }
|
||||
|
||||
return module
|
||||
}
|
||||
|
||||
// FIXME: hacking together a path string:
|
||||
private fun SourceCode.pathString() =
|
||||
origin
|
||||
.substringAfter("<res:")
|
||||
.substringAfter("<")
|
||||
.substringBeforeLast(">")
|
||||
}
|
||||
|
||||
private class ParsedModule(src: SourceCode) : Module(
|
||||
// FIXME: hacking together a name for the module:
|
||||
name = src.pathString()
|
||||
.substringBeforeLast(".")
|
||||
.substringBeforeLast(".") // must also work with an origin = "<String@123beef>"
|
||||
.substringAfterLast("/")
|
||||
.substringAfterLast("\\")
|
||||
.replace("String@", "anonymous_"),
|
||||
|
@ -10,16 +10,32 @@ import kotlin.io.path.*
|
||||
* Encapsulates - and ties together - actual source code (=text)
|
||||
* and its [origin].
|
||||
*/
|
||||
abstract class SourceCode() {
|
||||
abstract class SourceCode {
|
||||
|
||||
/**
|
||||
* To be used *only* by the parser (as input to a TokenStream).
|
||||
* DO NOT mess around with!
|
||||
*/
|
||||
internal abstract fun getCharStream(): CharStream
|
||||
|
||||
/**
|
||||
* Where this [SourceCode] instance came from.
|
||||
* This can be one of the following:
|
||||
* * a normal string representation of a [java.nio.file.Path], if it originates from a file (see [fromPath])
|
||||
* * `<String@44c56085>` if was created via [of]
|
||||
* * `<res:/x/y/z.ext>` if it came from resources (see [fromResources])
|
||||
* * `@embedded@/x/y/z.ext` if it came from resources (see [fromResources])
|
||||
*/
|
||||
abstract val origin: String
|
||||
abstract fun getCharStream(): CharStream
|
||||
|
||||
|
||||
/**
|
||||
* FIXME: hacking together a [SourceCode]'s "path string"
|
||||
* This is really just [origin] with any stuff removed that would render it an invalid path name.
|
||||
* (Note: a *valid* path name does NOT mean that the denoted file or folder *exists*)
|
||||
*/
|
||||
fun pathString() =
|
||||
origin
|
||||
.substringAfter("<").substringBeforeLast(">") // or from plain string?
|
||||
|
||||
/**
|
||||
* The source code as plain string.
|
||||
@ -92,7 +108,7 @@ abstract class SourceCode() {
|
||||
reason = "looked in resources rooted at $rscRoot")
|
||||
}
|
||||
return object : SourceCode() {
|
||||
override val origin = "<res:$normalized>"
|
||||
override val origin = "@embedded@$normalized"
|
||||
override fun getCharStream(): CharStream {
|
||||
val inpStr = object{}.javaClass.getResourceAsStream(normalized)
|
||||
val chars = CharStreams.fromStream(inpStr)
|
||||
|
Loading…
Reference in New Issue
Block a user