mirror of
https://github.com/irmen/prog8.git
synced 2025-01-12 19:29:50 +00:00
another attempt to fix Windows path issues
This commit is contained in:
parent
9626c5dead
commit
46e4b977a4
@ -17,11 +17,16 @@ private data class NumericLiteral(val number: Number, val datatype: DataType)
|
|||||||
|
|
||||||
|
|
||||||
private fun ParserRuleContext.toPosition() : Position {
|
private fun ParserRuleContext.toPosition() : Position {
|
||||||
val path = Path.of(start.inputStream.sourceName)
|
val pathString = start.inputStream.sourceName
|
||||||
val filename = if(path.isRegularFile()) {
|
val filename = if(SourceCode.isRegularFilesystemPath(pathString)) {
|
||||||
SourceCode.relative(Path.of(start.inputStream.sourceName)).toString()
|
val path = Path.of(pathString)
|
||||||
|
if(path.isRegularFile()) {
|
||||||
|
SourceCode.relative(path).toString()
|
||||||
|
} else {
|
||||||
|
path.toString().substringAfter("<").substringBeforeLast(">") // TODO fix the need to get rid of the < and >
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
path.toString().substringAfter("<").substringBeforeLast(">")
|
pathString.substringAfter("<").substringBeforeLast(">") // TODO fix the need to get rid of the < and >
|
||||||
}
|
}
|
||||||
// note: beware of TAB characters in the source text, they count as 1 column...
|
// note: beware of TAB characters in the source text, they count as 1 column...
|
||||||
return Position(filename, start.line, start.charPositionInLine, stop.charPositionInLine + stop.text.length)
|
return Position(filename, start.line, start.charPositionInLine, stop.charPositionInLine + stop.text.length)
|
||||||
|
@ -34,7 +34,7 @@ sealed class SourceCode {
|
|||||||
* Where this [SourceCode] instance came from.
|
* Where this [SourceCode] instance came from.
|
||||||
* This can be one of the following:
|
* This can be one of the following:
|
||||||
* * a normal string representation of a [java.nio.file.Path], if it originates from a file (see [File])
|
* * a normal string representation of a [java.nio.file.Path], if it originates from a file (see [File])
|
||||||
* * `<String@44c56085>` if was created via [String]
|
* * `$stringSourcePrefix44c56085>` if was created via [String]
|
||||||
* * `library:/x/y/z.ext` if it is a library file that was loaded from resources (see [Resource])
|
* * `library:/x/y/z.ext` if it is a library file that was loaded from resources (see [Resource])
|
||||||
*/
|
*/
|
||||||
abstract val origin: String
|
abstract val origin: String
|
||||||
@ -43,6 +43,7 @@ sealed class SourceCode {
|
|||||||
/**
|
/**
|
||||||
* This is really just [origin] with any stuff removed that would render it an invalid path name.
|
* 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*)
|
* (Note: a *valid* path name does NOT mean that the denoted file or folder *exists*)
|
||||||
|
* TODO this promise doesn't work.... a "library:/...." resource path is not valid on Windows for example
|
||||||
*/
|
*/
|
||||||
fun pathString() = origin.substringAfter("<").substringBeforeLast(">") // or from plain string?
|
fun pathString() = origin.substringAfter("<").substringBeforeLast(">") // or from plain string?
|
||||||
|
|
||||||
@ -64,17 +65,20 @@ sealed class SourceCode {
|
|||||||
* filename prefix to designate library files that will be retreived from internal resources rather than disk
|
* filename prefix to designate library files that will be retreived from internal resources rather than disk
|
||||||
*/
|
*/
|
||||||
const val libraryFilePrefix = "library:"
|
const val libraryFilePrefix = "library:"
|
||||||
|
const val stringSourcePrefix = "<String@"
|
||||||
val curdir: Path = Path.of(".").toAbsolutePath()
|
val curdir: Path = Path.of(".").toAbsolutePath()
|
||||||
fun relative(path: Path): Path = curdir.relativize(path.toAbsolutePath())
|
fun relative(path: Path): Path = curdir.relativize(path.toAbsolutePath())
|
||||||
|
fun isRegularFilesystemPath(pathString: String) =
|
||||||
|
!(pathString.startsWith(libraryFilePrefix) || pathString.startsWith(stringSourcePrefix))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Turn a plain String into a [SourceCode] object.
|
* Turn a plain String into a [SourceCode] object.
|
||||||
* [origin] will be something like `<String@44c56085>`.
|
* [origin] will be something like `$stringSourcePrefix44c56085>`.
|
||||||
*/
|
*/
|
||||||
class Text(val text: String): SourceCode() {
|
class Text(val text: String): SourceCode() {
|
||||||
override val isFromResources = false
|
override val isFromResources = false
|
||||||
override val origin = "<String@${System.identityHashCode(text).toString(16)}>"
|
override val origin = "$stringSourcePrefix${System.identityHashCode(text).toString(16)}>"
|
||||||
override fun getCharStream(): CharStream = CharStreams.fromString(text, origin)
|
override fun getCharStream(): CharStream = CharStreams.fromString(text, origin)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user