A simple implementation of Medium's Read Time calculation.
import net.thauvin.erik.readingtime.ReadingTime
// ...
val rt = ReadingTime(htmlText)
println(rt.calcEstimatedReadTime()) // eg: 2 min read
To get the estimated reading time in seconds use the calcReadingTimeInSec()
function.
To use with bld, include the following dependency in your build file:
repositories = List.of(MAVEN_CENTRAL);
scope(compile)
.include(dependency("net.thauvin.erik:readingtime:0.9.2"));
Be sure to use the bld Kotlin extension in your project.
To use with Gradle, include the following dependency in your build file:
repositories {
mavenCentral()
}
dependencies {
implementation("net.thauvin.erik:readingtime:0.9.2")
}
Instructions for using with Maven, Ivy, etc. can be found on Maven Central.
The following properties are available:
ReadingTime(
text,
wpm = 275,
postfix = "min read",
plural = "min read",
excludeImages = false,
extra = 0,
roundingMode = RoundingMode.HALF_EVEN
)
Property | Description |
---|---|
text |
The text to be evaluated. (Required) |
wpm |
The words per minute reading average. |
postfix |
The value to be appended to the reading time. |
plural |
The value to be appended if the reading time is more than 1 minute. |
excludeImages |
Images are excluded from the reading time when set. |
extra |
Additional seconds to be added to the total reading time. |
roundingMode |
The rounding mode to apply. |
A couple of useful functions are also available:
ReadingTime.wordCount(htmlText) // Returns the count of words. (HTML stripped)
ReadingTime.imgCount(htmlText) // Returns the count of images. (HTML img tags)
A JSP tag is also available for easy incorporation into web applications:
<%@taglib uri="https://erik.thauvin.net/taglibs/readingtime" prefix="t"%>
<t:readingtime
wpm="275"
postfix="min read"
plural="min read"
excludeImages="false"
extra="0">some_text</t:readingtime>
None of the attributes are required.
In addition to setters, a configuration builder is also available:
final ReadingTime rt = new ReadingTime(text);
rt.setPostfix("minute to read");
rt.setPlural("minutes to read");
or
final Config config =
new Config.Builder(text)
.postfix("minute to read")
.plural("minutes to read")
.build();
final ReadingTime rt = new ReadingTime(config);
If you want to contribute to this project, all you have to do is clone the GitHub repository:
git clone [email protected]:ethauvin/readingtime.git
Then use bld to build:
cd readingtime
./bld compile
The project has an IntelliJ IDEA project structure. You can just open it after all the dependencies were downloaded and peruse the code.