diff --git a/build.gradle.kts b/build.gradle.kts index 1194287..906c886 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } group = "com.marvinelsen" -version = "1.0.1" +version = "2.0.0" repositories { mavenCentral() diff --git a/src/main/kotlin/com/marvinelsen/cedict/api/CedictParser.kt b/src/main/kotlin/com/marvinelsen/cedict/api/CedictParser.kt index 72aa0b6..154b271 100644 --- a/src/main/kotlin/com/marvinelsen/cedict/api/CedictParser.kt +++ b/src/main/kotlin/com/marvinelsen/cedict/api/CedictParser.kt @@ -1,12 +1,12 @@ package com.marvinelsen.cedict.api -import com.marvinelsen.cedict.internal.CedictParserImpl +import com.marvinelsen.cedict.internal.RegexCedictParser import java.io.InputStream interface CedictParser { - fun parseCedict(inputStream: InputStream): List + fun parseCedict(inputStream: InputStream): Sequence companion object { - val instance: CedictParser by lazy { CedictParserImpl() } + val instance: CedictParser by lazy { RegexCedictParser() } } } diff --git a/src/main/kotlin/com/marvinelsen/cedict/internal/CedictParserImpl.kt b/src/main/kotlin/com/marvinelsen/cedict/internal/RegexCedictParser.kt similarity index 84% rename from src/main/kotlin/com/marvinelsen/cedict/internal/CedictParserImpl.kt rename to src/main/kotlin/com/marvinelsen/cedict/internal/RegexCedictParser.kt index fe06ccf..ae72d1e 100644 --- a/src/main/kotlin/com/marvinelsen/cedict/internal/CedictParserImpl.kt +++ b/src/main/kotlin/com/marvinelsen/cedict/internal/RegexCedictParser.kt @@ -6,7 +6,7 @@ import com.marvinelsen.cedict.api.CedictParser import com.marvinelsen.chinese.transliteration.Syllable import java.io.InputStream -internal class CedictParserImpl : CedictParser { +internal class RegexCedictParser : CedictParser { companion object { private const val DEFINITION_SEPARATOR = '/' private const val GLOSS_SEPARATOR = ';' @@ -20,11 +20,11 @@ internal class CedictParserImpl : CedictParser { } override fun parseCedict(inputStream: InputStream) = - inputStream.bufferedReader().useLines { lines -> - lines.filterNot(::isComment) - .map(::toCedictEntry) - .toList() - } + inputStream + .bufferedReader() + .lineSequence() + .filterNot(::isComment) + .map(::toCedictEntry) private fun isComment(line: String) = line[0] == COMMENT_MARKER @@ -48,9 +48,5 @@ internal class CedictParserImpl : CedictParser { private fun toCedictDefinitions(definitions: String) = definitions .split(DEFINITION_SEPARATOR) - .map { - CedictDefinition( - glosses = it.split(GLOSS_SEPARATOR).map(String::trim) - ) - } + .map { CedictDefinition(it.split(GLOSS_SEPARATOR).map(String::trim)) } } diff --git a/src/test/kotlin/com/marvinelsen/cedict/internal/CedictParserImplTest.kt b/src/test/kotlin/com/marvinelsen/cedict/internal/RegexCedictParserTest.kt similarity index 78% rename from src/test/kotlin/com/marvinelsen/cedict/internal/CedictParserImplTest.kt rename to src/test/kotlin/com/marvinelsen/cedict/internal/RegexCedictParserTest.kt index 6af4ff1..a0bf097 100644 --- a/src/test/kotlin/com/marvinelsen/cedict/internal/CedictParserImplTest.kt +++ b/src/test/kotlin/com/marvinelsen/cedict/internal/RegexCedictParserTest.kt @@ -7,9 +7,9 @@ import io.kotest.core.spec.style.ShouldSpec import io.kotest.matchers.shouldBe import java.util.zip.GZIPInputStream -class CedictParserImplTest : ShouldSpec({ +class RegexCedictParserTest : ShouldSpec({ should("parse lines correctly") { - val cedictParser = CedictParserImpl() + val cedictParser = RegexCedictParser() val cedictEntry = cedictParser.toCedictEntry("皮實 皮实 [pi2 shi5] /(of things) durable/(of people) sturdy; tough/") @@ -29,9 +29,12 @@ class CedictParserImplTest : ShouldSpec({ val cedictFilePath = "/cedict_1_0_ts_utf-8_mdbg.txt.gz" val cedictFileStream = GZIPInputStream(javaClass.getResourceAsStream(cedictFilePath)) - val cedictParser = CedictParserImpl() - val cedictEntries = cedictParser.parseCedict(cedictFileStream) + val cedictParser = RegexCedictParser() - cedictEntries.size shouldBe 122_508 + cedictFileStream.use { + val cedictEntries = cedictParser.parseCedict(cedictFileStream) + + cedictEntries.toList().size shouldBe 122_508 + } } })