view MakeWaypoints.kt @ 4:45be2d1d3213

Remove trailing whitespace, add warp notes.
author David Barts <n5jrn@me.com>
date Wed, 25 Aug 2021 06:33:31 -0700
parents ab4d4434c37f
children a725bd48bc0b
line wrap: on
line source

/*
 * Make waypoints. In Kotlin, because the JVM has a uniquely non-sucky
 * way to write XML.
 */

import javax.xml.stream.*
import java.io.FileOutputStream

private const val MYNAME = "MakeWaypoints"
private const val CHARSET = "UTF-8"

fun main(args: Array<String>): Unit {
    if (args.size != 1) {
        System.err.println("${MYNAME}: expecting a single file name")
        System.exit(2)
    }

    println("Enter waypoints below, end with empty line.")
    println()

    val outName = args[0]
    val invalid = "${MYNAME}: invalid entry, please try again"
    FileOutputStream(outName).use stream@{
        XMLOutputFactory.newInstance().createXMLStreamWriter(it, CHARSET).run {
            writeStartDocument(CHARSET, "1.0")
            writeStartElement("gpx")
            writeAttribute("creator", "MakeWaypoints")
            writeAttribute("version", "1.1")
            writeDefaultNamespace("http://www.topografix.com/GPX/1/1")

            while (true) {
                print("Longitude, latitude: ")
                val longLat = readLine()
                if (longLat.isNullOrEmpty()) {
                    writeEndDocument()
                    close()
                    return@stream
                }
                val parts = longLat.split(',')
                if (parts.size != 2) {
                    System.err.println(invalid)
                    continue
                }
                val long = parts[0].trim()
                val lat = parts[1].trim()
                if (lat.toDoubleOrNull() == null || long.toDoubleOrNull() == null) {
                    System.err.println(invalid)
                    continue
                }
                print("Name: ")
                val name = readLine()
                if (name.isNullOrEmpty()) {
                    System.err.println(invalid)
                    continue
                }
                writeStartElement("wpt")
                writeAttribute("lat", lat)
                writeAttribute("lon", long)
                writeStartElement("name")
                writeCharacters(name)
                writeEndElement()
                writeEndElement()
            }
        }
    }
}