Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.capyreader.app.ui.accounts

import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.core.module.dsl.viewModel
import org.koin.dsl.module

val loginModule = module {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.capyreader.app.ui.articles
import com.capyreader.app.preferences.AppPreferences
import com.capyreader.app.ui.articles.feeds.edit.EditFeedViewModel
import com.jocmp.capy.articles.ArticleRenderer
import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.core.module.dsl.viewModel
import org.koin.dsl.module

internal val articlesModule = module {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import com.capyreader.app.ui.settings.panels.DisplaySettingsViewModel
import com.capyreader.app.ui.settings.panels.GeneralSettingsViewModel
import com.capyreader.app.ui.settings.panels.GesturesSettingsViewModel
import com.capyreader.app.ui.settings.panels.SettingsViewModel
import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.core.module.dsl.viewModel
import org.koin.androidx.workmanager.dsl.worker
import org.koin.dsl.module

Expand Down
35 changes: 35 additions & 0 deletions capy/src/main/java/com/jocmp/capy/articles/ArticleRenderer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ class ArticleRenderer(
article.feedName
}

val characters = article.content.length;
val charactersPerMinute = if (isCJK(article.content)) 265 else 500
val readingTime = (characters + charactersPerMinute - 1) / charactersPerMinute; // Round up

val substitutions = colors + mapOf(
"external_link" to article.externalLink(),
"title" to title,
Expand All @@ -52,6 +56,7 @@ class ArticleRenderer(
"font_preload" to fontPreload(fontFamily),
"top_margin" to topMargin(),
"pre_white_space" to preWhiteSpace(),
"reading_time" to "$readingTime min read"
)

val html = MacroProcessor(
Expand Down Expand Up @@ -106,6 +111,36 @@ class ArticleRenderer(
""".trimIndent()
}
}

fun isCJK(text: String): Boolean {
var totalCJK = 0
var totalChecked = 0

for (r in text) {
if (totalChecked >= 50) break
totalChecked++

val block = Character.UnicodeBlock.of(r)
if (block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS ||
block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A ||
block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B ||
block == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS ||
block == Character.UnicodeBlock.CJK_COMPATIBILITY_FORMS ||
block == Character.UnicodeBlock.HIRAGANA ||
block == Character.UnicodeBlock.KATAKANA ||
block == Character.UnicodeBlock.HANGUL_SYLLABLES ||
block == Character.UnicodeBlock.HANGUL_JAMO ||
block == Character.UnicodeBlock.HANGUL_COMPATIBILITY_JAMO ||
block == Character.UnicodeBlock.BOPOMOFO ||
block == Character.UnicodeBlock.YI_SYLLABLES ||
block == Character.UnicodeBlock.YI_RADICALS
) {
totalCJK++
}
}

return totalChecked > 0 && totalCJK * 2 >= totalChecked
}
}

private val Document.content
Expand Down
1 change: 1 addition & 0 deletions capy/src/main/res/raw/template.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.