0
0
mirror of https://github.com/florisboard/florisboard.git synced 2024-09-19 11:32:18 +02:00

Modularize lib.kotlin (#2404)

* extract dev.patrickgold.florisboard.lib.kotlin to org.florisboard.lib.kotlin

* apply review suggestions
This commit is contained in:
Lars Mühlbauer 2024-03-07 04:57:31 +01:00 committed by GitHub
parent 74dd67642c
commit 22b7a675e4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
52 changed files with 132 additions and 95 deletions

View File

@ -236,6 +236,9 @@ dependencies {
implementation(libs.patrickgold.jetpref.datastore.ui) implementation(libs.patrickgold.jetpref.datastore.ui)
implementation(libs.patrickgold.jetpref.material.ui) implementation(libs.patrickgold.jetpref.material.ui)
implementation(project(":lib:kotlin"))
testImplementation(libs.equalsverifier) testImplementation(libs.equalsverifier)
testImplementation(libs.kotest.assertions.core) testImplementation(libs.kotest.assertions.core)
testImplementation(libs.kotest.extensions.roboelectric) testImplementation(libs.kotest.extensions.roboelectric)

View File

@ -45,9 +45,9 @@ import dev.patrickgold.florisboard.lib.ext.ExtensionManager
import dev.patrickgold.florisboard.lib.io.AssetManager import dev.patrickgold.florisboard.lib.io.AssetManager
import dev.patrickgold.florisboard.lib.io.deleteContentsRecursively import dev.patrickgold.florisboard.lib.io.deleteContentsRecursively
import dev.patrickgold.florisboard.lib.io.subFile import dev.patrickgold.florisboard.lib.io.subFile
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
import dev.patrickgold.florisboard.lib.toNativeStr import dev.patrickgold.florisboard.lib.toNativeStr
import dev.patrickgold.jetpref.datastore.JetPref import dev.patrickgold.jetpref.datastore.JetPref
import org.florisboard.lib.kotlin.tryOrNull
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
/** /**

View File

@ -112,7 +112,6 @@ import dev.patrickgold.florisboard.lib.devtools.LogTopic
import dev.patrickgold.florisboard.lib.devtools.flogError import dev.patrickgold.florisboard.lib.devtools.flogError
import dev.patrickgold.florisboard.lib.devtools.flogInfo import dev.patrickgold.florisboard.lib.devtools.flogInfo
import dev.patrickgold.florisboard.lib.devtools.flogWarning import dev.patrickgold.florisboard.lib.devtools.flogWarning
import dev.patrickgold.florisboard.lib.kotlin.collectLatestIn
import dev.patrickgold.florisboard.lib.observeAsTransformingState import dev.patrickgold.florisboard.lib.observeAsTransformingState
import dev.patrickgold.florisboard.lib.snygg.ui.SnyggSurface import dev.patrickgold.florisboard.lib.snygg.ui.SnyggSurface
import dev.patrickgold.florisboard.lib.snygg.ui.shape import dev.patrickgold.florisboard.lib.snygg.ui.shape
@ -124,6 +123,7 @@ import dev.patrickgold.florisboard.lib.snygg.ui.spSize
import dev.patrickgold.florisboard.lib.util.ViewUtils import dev.patrickgold.florisboard.lib.util.ViewUtils
import dev.patrickgold.florisboard.lib.util.debugSummarize import dev.patrickgold.florisboard.lib.util.debugSummarize
import dev.patrickgold.jetpref.datastore.model.observeAsState import dev.patrickgold.jetpref.datastore.model.observeAsState
import org.florisboard.lib.kotlin.collectLatestIn
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
/** /**

View File

@ -23,14 +23,14 @@ import android.view.textservice.TextInfo
import dev.patrickgold.florisboard.app.florisPreferenceModel import dev.patrickgold.florisboard.app.florisPreferenceModel
import dev.patrickgold.florisboard.ime.core.Subtype import dev.patrickgold.florisboard.ime.core.Subtype
import dev.patrickgold.florisboard.ime.dictionary.DictionaryManager import dev.patrickgold.florisboard.ime.dictionary.DictionaryManager
import dev.patrickgold.florisboard.ime.nlp.SpellingResult
import dev.patrickgold.florisboard.ime.nlp.SpellingLanguageMode import dev.patrickgold.florisboard.ime.nlp.SpellingLanguageMode
import dev.patrickgold.florisboard.ime.nlp.SpellingResult
import dev.patrickgold.florisboard.lib.FlorisLocale import dev.patrickgold.florisboard.lib.FlorisLocale
import dev.patrickgold.florisboard.lib.devtools.LogTopic import dev.patrickgold.florisboard.lib.devtools.LogTopic
import dev.patrickgold.florisboard.lib.devtools.flogInfo import dev.patrickgold.florisboard.lib.devtools.flogInfo
import dev.patrickgold.florisboard.lib.kotlin.map
import kotlinx.coroutines.async import kotlinx.coroutines.async
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.florisboard.lib.kotlin.map
class FlorisSpellCheckerService : SpellCheckerService() { class FlorisSpellCheckerService : SpellCheckerService() {
private val prefs by florisPreferenceModel() private val prefs by florisPreferenceModel()

View File

@ -56,7 +56,7 @@ import dev.patrickgold.florisboard.app.settings.theme.ThemeManagerScreenAction
import dev.patrickgold.florisboard.app.settings.theme.ThemeScreen import dev.patrickgold.florisboard.app.settings.theme.ThemeScreen
import dev.patrickgold.florisboard.app.settings.typing.TypingScreen import dev.patrickgold.florisboard.app.settings.typing.TypingScreen
import dev.patrickgold.florisboard.app.setup.SetupScreen import dev.patrickgold.florisboard.app.setup.SetupScreen
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat import org.florisboard.lib.kotlin.curlyFormat
@Suppress("FunctionName") @Suppress("FunctionName")
object Routes { object Routes {

View File

@ -61,9 +61,8 @@ import dev.patrickgold.florisboard.lib.compose.FlorisScreen
import dev.patrickgold.florisboard.lib.compose.defaultFlorisOutlinedBox import dev.patrickgold.florisboard.lib.compose.defaultFlorisOutlinedBox
import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.devtools.flogDebug
import dev.patrickgold.florisboard.lib.io.FileRegistry import dev.patrickgold.florisboard.lib.io.FileRegistry
import dev.patrickgold.florisboard.lib.kotlin.resultOk import org.florisboard.lib.kotlin.resultOk
enum class ExtensionImportScreenType( enum class ExtensionImportScreenType(
val id: String, val id: String,

View File

@ -19,8 +19,8 @@ package dev.patrickgold.florisboard.app.settings.theme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.R
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
import dev.patrickgold.jetpref.datastore.ui.listPrefEntries import dev.patrickgold.jetpref.datastore.ui.listPrefEntries
import org.florisboard.lib.kotlin.curlyFormat
/** /**
* DisplayColorsAs indicates how color strings should be visually presented to the user. * DisplayColorsAs indicates how color strings should be visually presented to the user.

View File

@ -68,8 +68,6 @@ import dev.patrickgold.florisboard.lib.compose.FlorisTextButton
import dev.patrickgold.florisboard.lib.compose.rippleClickable import dev.patrickgold.florisboard.lib.compose.rippleClickable
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.ext.ExtensionValidation import dev.patrickgold.florisboard.lib.ext.ExtensionValidation
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
import dev.patrickgold.florisboard.lib.kotlin.toStringWithoutDotZero
import dev.patrickgold.florisboard.lib.rememberValidationResult import dev.patrickgold.florisboard.lib.rememberValidationResult
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel import dev.patrickgold.florisboard.lib.snygg.SnyggLevel
import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySetSpec import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySetSpec
@ -97,6 +95,8 @@ import dev.patrickgold.jetpref.material.ui.ExperimentalJetPrefMaterialUi
import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog
import dev.patrickgold.jetpref.material.ui.JetPrefColorPicker import dev.patrickgold.jetpref.material.ui.JetPrefColorPicker
import dev.patrickgold.jetpref.material.ui.rememberJetPrefColorPickerState import dev.patrickgold.jetpref.material.ui.rememberJetPrefColorPickerState
import org.florisboard.lib.kotlin.curlyFormat
import org.florisboard.lib.kotlin.toStringWithoutDotZero
internal val SnyggEmptyPropertyInfoForAdding = PropertyInfo( internal val SnyggEmptyPropertyInfoForAdding = PropertyInfo(
name = "- select -", name = "- select -",

View File

@ -67,6 +67,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.R
import dev.patrickgold.florisboard.ime.input.InputKeyEventReceiver import dev.patrickgold.florisboard.ime.input.InputKeyEventReceiver
import dev.patrickgold.florisboard.ime.input.InputShiftState
import dev.patrickgold.florisboard.ime.keyboard.ComputingEvaluator import dev.patrickgold.florisboard.ime.keyboard.ComputingEvaluator
import dev.patrickgold.florisboard.ime.keyboard.DefaultComputingEvaluator import dev.patrickgold.florisboard.ime.keyboard.DefaultComputingEvaluator
import dev.patrickgold.florisboard.ime.keyboard.Key import dev.patrickgold.florisboard.ime.keyboard.Key
@ -75,7 +76,6 @@ import dev.patrickgold.florisboard.ime.keyboard.Keyboard
import dev.patrickgold.florisboard.ime.keyboard.KeyboardMode import dev.patrickgold.florisboard.ime.keyboard.KeyboardMode
import dev.patrickgold.florisboard.ime.keyboard.computeIconResId import dev.patrickgold.florisboard.ime.keyboard.computeIconResId
import dev.patrickgold.florisboard.ime.keyboard.computeLabel import dev.patrickgold.florisboard.ime.keyboard.computeLabel
import dev.patrickgold.florisboard.ime.input.InputShiftState
import dev.patrickgold.florisboard.ime.text.key.KeyCode import dev.patrickgold.florisboard.ime.text.key.KeyCode
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
import dev.patrickgold.florisboard.ime.theme.FlorisImeUiSpec import dev.patrickgold.florisboard.ime.theme.FlorisImeUiSpec
@ -90,12 +90,12 @@ import dev.patrickgold.florisboard.lib.compose.FlorisIconButton
import dev.patrickgold.florisboard.lib.compose.FlorisOutlinedTextField import dev.patrickgold.florisboard.lib.compose.FlorisOutlinedTextField
import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
import dev.patrickgold.florisboard.lib.kotlin.getKeyByValue
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel import dev.patrickgold.florisboard.lib.snygg.SnyggLevel
import dev.patrickgold.florisboard.lib.snygg.SnyggRule import dev.patrickgold.florisboard.lib.snygg.SnyggRule
import dev.patrickgold.florisboard.lib.util.InputMethodUtils import dev.patrickgold.florisboard.lib.util.InputMethodUtils
import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog
import org.florisboard.lib.kotlin.curlyFormat
import org.florisboard.lib.kotlin.getKeyByValue
private val TransparentTextSelectionColors = TextSelectionColors( private val TransparentTextSelectionColors = TextSelectionColors(
handleColor = Color.Transparent, handleColor = Color.Transparent,

View File

@ -33,7 +33,6 @@ import dev.patrickgold.florisboard.lib.android.AndroidClipboardManager_OnPrimary
import dev.patrickgold.florisboard.lib.android.setOrClearPrimaryClip import dev.patrickgold.florisboard.lib.android.setOrClearPrimaryClip
import dev.patrickgold.florisboard.lib.android.showShortToast import dev.patrickgold.florisboard.lib.android.showShortToast
import dev.patrickgold.florisboard.lib.android.systemService import dev.patrickgold.florisboard.lib.android.systemService
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
@ -46,6 +45,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.florisboard.lib.kotlin.tryOrNull
import java.io.Closeable import java.io.Closeable
/** /**

View File

@ -40,7 +40,7 @@ import androidx.room.TypeConverter
import androidx.room.TypeConverters import androidx.room.TypeConverters
import androidx.room.Update import androidx.room.Update
import dev.patrickgold.florisboard.lib.android.query import dev.patrickgold.florisboard.lib.android.query
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull import org.florisboard.lib.kotlin.tryOrNull
private const val CLIPBOARD_HISTORY_TABLE = "clipboard_history" private const val CLIPBOARD_HISTORY_TABLE = "clipboard_history"
private const val CLIPBOARD_FILES_TABLE = "clipboard_files" private const val CLIPBOARD_FILES_TABLE = "clipboard_files"

View File

@ -30,11 +30,11 @@ import android.provider.OpenableColumns
import androidx.exifinterface.media.ExifInterface import androidx.exifinterface.media.ExifInterface
import dev.patrickgold.florisboard.BuildConfig import dev.patrickgold.florisboard.BuildConfig
import dev.patrickgold.florisboard.lib.devtools.flogError import dev.patrickgold.florisboard.lib.devtools.flogError
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.florisboard.lib.kotlin.tryOrNull
/** /**
* Allows apps to access images and videos on the clipboard. * Allows apps to access images and videos on the clipboard.

View File

@ -38,7 +38,7 @@ import dev.patrickgold.florisboard.lib.FlorisLocale
import dev.patrickgold.florisboard.lib.ValidationRule import dev.patrickgold.florisboard.lib.ValidationRule
import dev.patrickgold.florisboard.lib.android.readText import dev.patrickgold.florisboard.lib.android.readText
import dev.patrickgold.florisboard.lib.android.writeText import dev.patrickgold.florisboard.lib.android.writeText
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull import org.florisboard.lib.kotlin.tryOrNull
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
private const val WORDS_TABLE = "words" private const val WORDS_TABLE = "words"

View File

@ -29,16 +29,16 @@ import dev.patrickgold.florisboard.ime.nlp.BreakIteratorGroup
import dev.patrickgold.florisboard.ime.text.composing.Composer import dev.patrickgold.florisboard.ime.text.composing.Composer
import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.keyboardManager
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
import dev.patrickgold.florisboard.lib.kotlin.guardedByLock
import dev.patrickgold.florisboard.nlpManager import dev.patrickgold.florisboard.nlpManager
import dev.patrickgold.florisboard.subtypeManager import dev.patrickgold.florisboard.subtypeManager
import kotlin.math.max
import kotlin.math.min
import kotlinx.coroutines.MainScope import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.florisboard.lib.kotlin.guardedByLock
import kotlin.math.max
import kotlin.math.min
@Suppress("BlockingMethodInNonBlockingContext") @Suppress("BlockingMethodInNonBlockingContext")
abstract class AbstractEditorInstance(context: Context) { abstract class AbstractEditorInstance(context: Context) {

View File

@ -16,7 +16,7 @@
package dev.patrickgold.florisboard.ime.editor package dev.patrickgold.florisboard.ime.editor
import dev.patrickgold.florisboard.lib.kotlin.safeSubstring import org.florisboard.lib.kotlin.safeSubstring
/** /**
* A snapshot window of an input editor content around the selection/cursor. * A snapshot window of an input editor content around the selection/cursor.
@ -25,8 +25,8 @@ import dev.patrickgold.florisboard.lib.kotlin.safeSubstring
* @property offset The offset of the whole editor content snapshot. `-1` indicates the value is unknown. * @property offset The offset of the whole editor content snapshot. `-1` indicates the value is unknown.
* @property localSelection The selection reported by the editor, without [offset] included. * @property localSelection The selection reported by the editor, without [offset] included.
* @property localComposing The composing region for the editor, without [offset] included. * @property localComposing The composing region for the editor, without [offset] included.
* @property localCurrentWord The current word for the editor (typically the same as [localComposing]), without * @property localCurrentWord The current word for the editor (typically the same as [localComposing]), without [offset]
* [offset] included. * included.
*/ */
data class EditorContent( data class EditorContent(
val text: String, val text: String,

View File

@ -28,7 +28,6 @@ import dev.patrickgold.florisboard.ime.text.key.KeyCode
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
import dev.patrickgold.florisboard.lib.android.removeAndReturn import dev.patrickgold.florisboard.lib.android.removeAndReturn
import dev.patrickgold.florisboard.lib.devtools.flogDebug import dev.patrickgold.florisboard.lib.devtools.flogDebug
import dev.patrickgold.florisboard.lib.kotlin.guardedByLock
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
@ -39,6 +38,7 @@ import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.florisboard.lib.kotlin.guardedByLock
class InputEventDispatcher private constructor(private val repeatableKeyCodes: IntArray) { class InputEventDispatcher private constructor(private val repeatableKeyCodes: IntArray) {
companion object { companion object {

View File

@ -22,7 +22,6 @@ import android.view.KeyEvent
import android.widget.Toast import android.widget.Toast
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import dev.patrickgold.florisboard.FlorisImeService import dev.patrickgold.florisboard.FlorisImeService
@ -63,10 +62,8 @@ import dev.patrickgold.florisboard.lib.android.systemService
import dev.patrickgold.florisboard.lib.devtools.LogTopic import dev.patrickgold.florisboard.lib.devtools.LogTopic
import dev.patrickgold.florisboard.lib.devtools.flogError import dev.patrickgold.florisboard.lib.devtools.flogError
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
import dev.patrickgold.florisboard.lib.kotlin.collectIn import dev.patrickgold.florisboard.lib.titlecase
import dev.patrickgold.florisboard.lib.kotlin.collectLatestIn import dev.patrickgold.florisboard.lib.uppercase
import dev.patrickgold.florisboard.lib.kotlin.titlecase
import dev.patrickgold.florisboard.lib.kotlin.uppercase
import dev.patrickgold.florisboard.lib.util.InputMethodUtils import dev.patrickgold.florisboard.lib.util.InputMethodUtils
import dev.patrickgold.florisboard.nlpManager import dev.patrickgold.florisboard.nlpManager
import dev.patrickgold.florisboard.subtypeManager import dev.patrickgold.florisboard.subtypeManager
@ -78,6 +75,8 @@ import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.sync.withLock
import org.florisboard.lib.kotlin.collectIn
import org.florisboard.lib.kotlin.collectLatestIn
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
private val DoubleSpacePeriodMatcher = """([^.!?‽\s]\s)""".toRegex() private val DoubleSpacePeriodMatcher = """([^.!?‽\s]\s)""".toRegex()

View File

@ -34,8 +34,6 @@ import dev.patrickgold.florisboard.lib.devtools.flogDebug
import dev.patrickgold.florisboard.lib.devtools.flogWarning import dev.patrickgold.florisboard.lib.devtools.flogWarning
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
import dev.patrickgold.florisboard.lib.io.ZipUtils import dev.patrickgold.florisboard.lib.io.ZipUtils
import dev.patrickgold.florisboard.lib.kotlin.DeferredResult
import dev.patrickgold.florisboard.lib.kotlin.runCatchingAsync
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -44,6 +42,8 @@ import kotlinx.coroutines.async
import kotlinx.coroutines.cancel import kotlinx.coroutines.cancel
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.sync.withLock
import org.florisboard.lib.kotlin.DeferredResult
import org.florisboard.lib.kotlin.runCatchingAsync
private data class LTN( private data class LTN(
val type: LayoutType, val type: LayoutType,

View File

@ -18,9 +18,9 @@ package dev.patrickgold.florisboard.ime.nlp
import android.icu.text.BreakIterator import android.icu.text.BreakIterator
import dev.patrickgold.florisboard.lib.FlorisLocale import dev.patrickgold.florisboard.lib.FlorisLocale
import dev.patrickgold.florisboard.lib.kotlin.GuardedByLock
import dev.patrickgold.florisboard.lib.kotlin.guardedByLock
import io.github.reactivecircus.cache4k.Cache import io.github.reactivecircus.cache4k.Cache
import org.florisboard.lib.kotlin.GuardedByLock
import org.florisboard.lib.kotlin.guardedByLock
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind
import kotlin.contracts.contract import kotlin.contracts.contract

View File

@ -3,31 +3,17 @@ package dev.patrickgold.florisboard.ime.nlp
import android.content.Context import android.content.Context
import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteException import android.database.sqlite.SQLiteException
import dev.patrickgold.florisboard.appContext
import dev.patrickgold.florisboard.assetManager
import dev.patrickgold.florisboard.lib.FlorisLocale import dev.patrickgold.florisboard.lib.FlorisLocale
import dev.patrickgold.florisboard.lib.android.copy
import dev.patrickgold.florisboard.lib.devtools.flogDebug
import dev.patrickgold.florisboard.lib.devtools.flogError import dev.patrickgold.florisboard.lib.devtools.flogError
import dev.patrickgold.florisboard.lib.ext.Extension import dev.patrickgold.florisboard.lib.ext.Extension
import dev.patrickgold.florisboard.lib.ext.ExtensionComponent import dev.patrickgold.florisboard.lib.ext.ExtensionComponent
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
import dev.patrickgold.florisboard.lib.ext.ExtensionEditor import dev.patrickgold.florisboard.lib.ext.ExtensionEditor
import dev.patrickgold.florisboard.lib.ext.ExtensionMeta import dev.patrickgold.florisboard.lib.ext.ExtensionMeta
import dev.patrickgold.florisboard.lib.io.FlorisRef
import dev.patrickgold.florisboard.lib.io.FsDir import dev.patrickgold.florisboard.lib.io.FsDir
import dev.patrickgold.florisboard.lib.io.parentDir
import dev.patrickgold.florisboard.lib.io.subFile import dev.patrickgold.florisboard.lib.io.subFile
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
@Serializable @Serializable
class LanguagePackComponent( class LanguagePackComponent(

View File

@ -34,12 +34,10 @@ import dev.patrickgold.florisboard.ime.clipboard.provider.ItemType
import dev.patrickgold.florisboard.ime.core.Subtype import dev.patrickgold.florisboard.ime.core.Subtype
import dev.patrickgold.florisboard.ime.editor.EditorContent import dev.patrickgold.florisboard.ime.editor.EditorContent
import dev.patrickgold.florisboard.ime.editor.EditorRange import dev.patrickgold.florisboard.ime.editor.EditorRange
import dev.patrickgold.florisboard.ime.nlp.latin.LatinLanguageProvider
import dev.patrickgold.florisboard.ime.nlp.han.HanShapeBasedLanguageProvider import dev.patrickgold.florisboard.ime.nlp.han.HanShapeBasedLanguageProvider
import dev.patrickgold.florisboard.ime.nlp.latin.LatinLanguageProvider
import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.keyboardManager
import dev.patrickgold.florisboard.lib.devtools.flogError import dev.patrickgold.florisboard.lib.devtools.flogError
import dev.patrickgold.florisboard.lib.kotlin.collectLatestIn
import dev.patrickgold.florisboard.lib.kotlin.guardedByLock
import dev.patrickgold.florisboard.lib.util.NetworkUtils import dev.patrickgold.florisboard.lib.util.NetworkUtils
import dev.patrickgold.florisboard.subtypeManager import dev.patrickgold.florisboard.subtypeManager
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -51,6 +49,8 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.sync.withLock
import org.florisboard.lib.kotlin.collectLatestIn
import org.florisboard.lib.kotlin.guardedByLock
import java.util.* import java.util.*
import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicInteger

View File

@ -27,12 +27,12 @@ import dev.patrickgold.florisboard.ime.nlp.SuggestionProvider
import dev.patrickgold.florisboard.ime.nlp.WordSuggestionCandidate import dev.patrickgold.florisboard.ime.nlp.WordSuggestionCandidate
import dev.patrickgold.florisboard.lib.android.readText import dev.patrickgold.florisboard.lib.android.readText
import dev.patrickgold.florisboard.lib.devtools.flogDebug import dev.patrickgold.florisboard.lib.devtools.flogDebug
import dev.patrickgold.florisboard.lib.kotlin.guardedByLock
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import kotlinx.serialization.builtins.MapSerializer import kotlinx.serialization.builtins.MapSerializer
import kotlinx.serialization.builtins.serializer import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import org.florisboard.lib.kotlin.guardedByLock
class LatinLanguageProvider(context: Context) : SpellingProvider, SuggestionProvider { class LatinLanguageProvider(context: Context) : SpellingProvider, SuggestionProvider {
companion object { companion object {

View File

@ -30,7 +30,7 @@ import dev.patrickgold.florisboard.ime.popup.PopupSet
import dev.patrickgold.florisboard.ime.text.key.KeyCode import dev.patrickgold.florisboard.ime.text.key.KeyCode
import dev.patrickgold.florisboard.ime.text.key.KeyType import dev.patrickgold.florisboard.ime.text.key.KeyType
import dev.patrickgold.florisboard.ime.text.key.KeyVariation import dev.patrickgold.florisboard.ime.text.key.KeyVariation
import dev.patrickgold.florisboard.lib.kotlin.lowercase import dev.patrickgold.florisboard.lib.lowercase
class TextKey(override val data: AbstractKeyData) : Key(data) { class TextKey(override val data: AbstractKeyData) : Key(data) {
var computedData: KeyData = TextKeyData.UNSPECIFIED var computedData: KeyData = TextKeyData.UNSPECIFIED

View File

@ -25,8 +25,8 @@ import dev.patrickgold.florisboard.ime.text.key.KeyCode
import dev.patrickgold.florisboard.ime.text.key.KeyType import dev.patrickgold.florisboard.ime.text.key.KeyType
import dev.patrickgold.florisboard.lib.FlorisLocale import dev.patrickgold.florisboard.lib.FlorisLocale
import dev.patrickgold.florisboard.lib.Unicode import dev.patrickgold.florisboard.lib.Unicode
import dev.patrickgold.florisboard.lib.kotlin.lowercase import dev.patrickgold.florisboard.lib.lowercase
import dev.patrickgold.florisboard.lib.kotlin.uppercase import dev.patrickgold.florisboard.lib.uppercase
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient

View File

@ -18,8 +18,6 @@ package dev.patrickgold.florisboard.lib
import android.content.Context import android.content.Context
import dev.patrickgold.florisboard.extensionManager import dev.patrickgold.florisboard.extensionManager
import dev.patrickgold.florisboard.ime.nlp.LanguagePackExtension
import dev.patrickgold.florisboard.lib.kotlin.titlecase
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.PrimitiveKind import kotlinx.serialization.descriptors.PrimitiveKind
@ -362,3 +360,11 @@ class FlorisLocale private constructor(val base: Locale) {
} }
} }
} }
inline fun String.lowercase(locale: FlorisLocale): String = this.lowercase(locale.base)
inline fun String.uppercase(locale: FlorisLocale): String = this.uppercase(locale.base)
inline fun String.titlecase(locale: FlorisLocale = FlorisLocale.ROOT): String {
return this.replaceFirstChar { if (it.isLowerCase()) it.titlecase(locale.base) else it.toString() }
}

View File

@ -20,8 +20,8 @@ import androidx.annotation.StringRes
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.compose.stringRes
import dev.patrickgold.florisboard.lib.kotlin.CurlyArg import org.florisboard.lib.kotlin.CurlyArg
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat import org.florisboard.lib.kotlin.curlyFormat
import kotlin.contracts.contract import kotlin.contracts.contract
import kotlin.reflect.KClass import kotlin.reflect.KClass

View File

@ -28,7 +28,7 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleEventObserver
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull import org.florisboard.lib.kotlin.tryOrNull
import java.lang.reflect.Modifier import java.lang.reflect.Modifier
import kotlin.reflect.KClass import kotlin.reflect.KClass

View File

@ -20,8 +20,8 @@ package dev.patrickgold.florisboard.lib.android
import android.content.Context import android.content.Context
import androidx.annotation.StringRes import androidx.annotation.StringRes
import dev.patrickgold.florisboard.lib.kotlin.CurlyArg import org.florisboard.lib.kotlin.CurlyArg
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat import org.florisboard.lib.kotlin.curlyFormat
import kotlin.reflect.KClass import kotlin.reflect.KClass
/** /**

View File

@ -24,7 +24,7 @@ import androidx.annotation.StringRes
import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.R
import dev.patrickgold.florisboard.lib.devtools.flogError import dev.patrickgold.florisboard.lib.devtools.flogError
import dev.patrickgold.florisboard.lib.io.FlorisRef import dev.patrickgold.florisboard.lib.io.FlorisRef
import dev.patrickgold.florisboard.lib.kotlin.CurlyArg import org.florisboard.lib.kotlin.CurlyArg
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind
import kotlin.contracts.contract import kotlin.contracts.contract
import kotlin.reflect.KClass import kotlin.reflect.KClass

View File

@ -19,7 +19,7 @@ package dev.patrickgold.florisboard.lib.android
import android.content.Context import android.content.Context
import android.widget.Toast import android.widget.Toast
import androidx.annotation.StringRes import androidx.annotation.StringRes
import dev.patrickgold.florisboard.lib.kotlin.CurlyArg import org.florisboard.lib.kotlin.CurlyArg
/** /**
* Shows a short toast with specified text. * Shows a short toast with specified text.

View File

@ -27,8 +27,8 @@ import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.LayoutDirection
import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.R
import dev.patrickgold.florisboard.lib.kotlin.CurlyArg import org.florisboard.lib.kotlin.CurlyArg
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat import org.florisboard.lib.kotlin.curlyFormat
private val LocalResourcesContext = staticCompositionLocalOf<Context> { private val LocalResourcesContext = staticCompositionLocalOf<Context> {
error("resources context not initialized!!") error("resources context not initialized!!")

View File

@ -24,7 +24,7 @@ import dev.patrickgold.florisboard.BuildConfig
import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.R
import dev.patrickgold.florisboard.app.AppPrefs import dev.patrickgold.florisboard.app.AppPrefs
import dev.patrickgold.florisboard.lib.android.systemService import dev.patrickgold.florisboard.lib.android.systemService
import dev.patrickgold.florisboard.lib.kotlin.titlecase import dev.patrickgold.florisboard.lib.titlecase
import dev.patrickgold.florisboard.lib.util.TimeUtils import dev.patrickgold.florisboard.lib.util.TimeUtils
import dev.patrickgold.florisboard.lib.util.UnitUtils import dev.patrickgold.florisboard.lib.util.UnitUtils
import java.io.BufferedReader import java.io.BufferedReader

View File

@ -21,11 +21,11 @@ import dev.patrickgold.florisboard.lib.io.FlorisRef
import dev.patrickgold.florisboard.lib.io.FsDir import dev.patrickgold.florisboard.lib.io.FsDir
import dev.patrickgold.florisboard.lib.io.FsFile import dev.patrickgold.florisboard.lib.io.FsFile
import dev.patrickgold.florisboard.lib.io.ZipUtils import dev.patrickgold.florisboard.lib.io.ZipUtils
import dev.patrickgold.florisboard.lib.kotlin.resultErr
import dev.patrickgold.florisboard.lib.kotlin.resultOk
import kotlinx.serialization.Polymorphic import kotlinx.serialization.Polymorphic
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient
import org.florisboard.lib.kotlin.resultErr
import org.florisboard.lib.kotlin.resultOk
/** /**
* An extension container holding a parsed config, a working directory file * An extension container holding a parsed config, a working directory file

View File

@ -17,7 +17,6 @@
package dev.patrickgold.florisboard.lib.ext package dev.patrickgold.florisboard.lib.ext
import androidx.compose.runtime.saveable.Saver import androidx.compose.runtime.saveable.Saver
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
import dev.patrickgold.jetpref.datastore.model.PreferenceSerializer import dev.patrickgold.jetpref.datastore.model.PreferenceSerializer
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@ -25,6 +24,7 @@ import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.encoding.Encoder
import org.florisboard.lib.kotlin.tryOrNull
/** /**
* An extension component, typically a layout, theme, file, etc. descriptor. * An extension component, typically a layout, theme, file, etc. descriptor.

View File

@ -16,7 +16,7 @@
package dev.patrickgold.florisboard.lib.ext package dev.patrickgold.florisboard.lib.ext
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat import org.florisboard.lib.kotlin.curlyFormat
object ExtensionDefaults { object ExtensionDefaults {
private const val ID_LOCAL_TEMPLATE = "local.{groupName}.{extensionName}" private const val ID_LOCAL_TEMPLATE = "local.{groupName}.{extensionName}"

View File

@ -38,7 +38,6 @@ import dev.patrickgold.florisboard.lib.io.FlorisRef
import dev.patrickgold.florisboard.lib.io.FsFile import dev.patrickgold.florisboard.lib.io.FsFile
import dev.patrickgold.florisboard.lib.io.ZipUtils import dev.patrickgold.florisboard.lib.io.ZipUtils
import dev.patrickgold.florisboard.lib.io.writeJson import dev.patrickgold.florisboard.lib.io.writeJson
import dev.patrickgold.florisboard.lib.kotlin.throwOnFailure
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -49,6 +48,7 @@ import kotlinx.serialization.KSerializer
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic import kotlinx.serialization.modules.polymorphic
import org.florisboard.lib.kotlin.throwOnFailure
@OptIn(ExperimentalSerializationApi::class) @OptIn(ExperimentalSerializationApi::class)
val ExtensionJsonConfig = Json { val ExtensionJsonConfig = Json {

View File

@ -30,13 +30,13 @@ import dev.patrickgold.florisboard.ime.text.keyboard.AutoTextKeyData
import dev.patrickgold.florisboard.ime.text.keyboard.MultiTextKeyData import dev.patrickgold.florisboard.ime.text.keyboard.MultiTextKeyData
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
import dev.patrickgold.florisboard.lib.android.reader import dev.patrickgold.florisboard.lib.android.reader
import dev.patrickgold.florisboard.lib.kotlin.resultErr
import dev.patrickgold.florisboard.lib.kotlin.resultErrStr
import dev.patrickgold.florisboard.lib.kotlin.resultOk
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic import kotlinx.serialization.modules.polymorphic
import org.florisboard.lib.kotlin.resultErr
import org.florisboard.lib.kotlin.resultErrStr
import org.florisboard.lib.kotlin.resultOk
import java.io.File import java.io.File
val DefaultJsonConfig = Json { val DefaultJsonConfig = Json {

View File

@ -20,13 +20,13 @@ import androidx.compose.runtime.saveable.Saver
import dev.patrickgold.florisboard.ime.input.InputShiftState import dev.patrickgold.florisboard.ime.input.InputShiftState
import dev.patrickgold.florisboard.ime.text.key.KeyCode import dev.patrickgold.florisboard.ime.text.key.KeyCode
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.PrimitiveKind import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.encoding.Encoder
import org.florisboard.lib.kotlin.curlyFormat
@Serializable(with = SnyggRule.Serializer::class) @Serializable(with = SnyggRule.Serializer::class)
data class SnyggRule( data class SnyggRule(

View File

@ -16,7 +16,7 @@
package dev.patrickgold.florisboard.lib.snygg.value package dev.patrickgold.florisboard.lib.snygg.value
import dev.patrickgold.florisboard.lib.kotlin.toStringWithoutDotZero import org.florisboard.lib.kotlin.toStringWithoutDotZero
interface SnyggValueSpec { interface SnyggValueSpec {
val id: String? val id: String?

View File

@ -1,4 +1,4 @@
package dev.patrickgold.florisboard.lib.kotlin package org.florisboard.lib.kotlin
import io.kotest.core.spec.style.FreeSpec import io.kotest.core.spec.style.FreeSpec
import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldBe

View File

@ -19,6 +19,7 @@ plugins {
alias(libs.plugins.agp.library) apply false alias(libs.plugins.agp.library) apply false
alias(libs.plugins.agp.test) apply false alias(libs.plugins.agp.test) apply false
alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.jvm) apply false
alias(libs.plugins.kotlin.serialization) apply false alias(libs.plugins.kotlin.serialization) apply false
alias(libs.plugins.ksp) apply false alias(libs.plugins.ksp) apply false
alias(libs.plugins.mannodermaus.android.junit5) apply false alias(libs.plugins.mannodermaus.android.junit5) apply false

View File

@ -85,6 +85,7 @@ agp-application = { id = "com.android.application", version.ref = "android-gradl
agp-library = { id = "com.android.library", version.ref = "android-gradle-plugin" } agp-library = { id = "com.android.library", version.ref = "android-gradle-plugin" }
agp-test = { id = "com.android.test", version.ref = "android-gradle-plugin" } agp-test = { id = "com.android.test", version.ref = "android-gradle-plugin" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
mannodermaus-android-junit5 = { id = "de.mannodermaus.android-junit5", version.ref = "mannodermaus-android-junit5" } mannodermaus-android-junit5 = { id = "de.mannodermaus.android-junit5", version.ref = "mannodermaus-android-junit5" }

View File

@ -0,0 +1,51 @@
/*
* Copyright 2024 Patrick Goldinger
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
plugins {
alias(libs.plugins.kotlin.jvm)
}
val projectGroupId: String by project
val artifactId = "florisboard-lib-kotlin"
val projectVersion: String by project
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
sourceSets {
maybeCreate("main").apply {
java.srcDir("src/main/kotlin")
}
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
jvmTarget = "1.8"
freeCompilerArgs = listOf(
"-Xallow-result-return-type",
"-opt-in=kotlin.contracts.ExperimentalContracts",
"-Xjvm-default=all-compatibility",
)
}
}
dependencies {
implementation(libs.kotlinx.serialization.json)
implementation(libs.kotlinx.coroutines)
}

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.kotlin package org.florisboard.lib.kotlin
@Throws(NoSuchElementException::class) @Throws(NoSuchElementException::class)
fun <K, V> Map<K, V>.getKeyByValue(value: V): K { fun <K, V> Map<K, V>.getKeyByValue(value: V): K {

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.kotlin package org.florisboard.lib.kotlin
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.kotlin package org.florisboard.lib.kotlin
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.kotlin package org.florisboard.lib.kotlin
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind
import kotlin.contracts.contract import kotlin.contracts.contract

View File

@ -14,6 +14,6 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.kotlin package org.florisboard.lib.kotlin
fun Number.toStringWithoutDotZero(): String = this.toString().removeSuffix(".0") fun Number.toStringWithoutDotZero(): String = this.toString().removeSuffix(".0")

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package dev.patrickgold.florisboard.lib.kotlin package org.florisboard.lib.kotlin
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind import kotlinx.serialization.descriptors.PrimitiveKind

View File

@ -16,7 +16,7 @@
@file:Suppress("NOTHING_TO_INLINE") @file:Suppress("NOTHING_TO_INLINE")
package dev.patrickgold.florisboard.lib.kotlin package org.florisboard.lib.kotlin
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred import kotlinx.coroutines.Deferred

View File

@ -14,21 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
@file:Suppress("NOTHING_TO_INLINE") package org.florisboard.lib.kotlin
package dev.patrickgold.florisboard.lib.kotlin
import dev.patrickgold.florisboard.lib.FlorisLocale
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind
import kotlin.contracts.contract import kotlin.contracts.contract
inline fun String.lowercase(locale: FlorisLocale): String = this.lowercase(locale.base)
inline fun String.uppercase(locale: FlorisLocale): String = this.uppercase(locale.base)
inline fun String.titlecase(locale: FlorisLocale = FlorisLocale.ROOT): String {
return this.replaceFirstChar { if (it.isLowerCase()) it.titlecase(locale.base) else it.toString() }
}
fun String.safeSubstring(startIndex: Int): String { fun String.safeSubstring(startIndex: Int): String {
return try { return try {

View File

@ -35,3 +35,4 @@ dependencyResolutionManagement {
include(":app") include(":app")
include(":benchmark") include(":benchmark")
include(":lib:kotlin")