From f87a01235648a59abcfe864b839ee3682b3501fc Mon Sep 17 00:00:00 2001
From: Rafal Niski
Date: Wed, 1 Feb 2023 12:20:50 +0100
Subject: [PATCH] Add support for subscript and superscript rendering
---
.../android/renderer/chars/TextRenderer.java | 10 ++++-
.../android/renderer/views/TextRenderer.java | 10 ++++-
.../src/main/res/layout/rich_text_layout.xml | 1 +
android_sample/build.gradle | 23 ++++++-----
.../rich/android/sample/MainActivity.kt | 26 +++++++-----
.../contentful/rich/android/sample/Page.kt | 8 +++-
.../rich/android/sample/PageAdapter.kt | 30 ++++++--------
.../rich/android/sample/PageFragment.kt | 32 ++++++++++-----
.../android/sample/RichCharSequenceAdapter.kt | 16 +++-----
.../android/sample/RichNativeViewAdapter.kt | 11 ++---
build.gradle | 6 ++-
gradle/wrapper/gradle-wrapper.properties | 2 +-
.../rich/html/renderer/TextRenderer.java | 6 +++
html/src/test/java/AllTheThingsTest.java | 4 +-
html/src/test/java/ListsTest.java | 40 +++++++++----------
settings.gradle.kts | 4 +-
16 files changed, 137 insertions(+), 92 deletions(-)
diff --git a/android/src/main/java/com/contentful/rich/android/renderer/chars/TextRenderer.java b/android/src/main/java/com/contentful/rich/android/renderer/chars/TextRenderer.java
index 0a6de8c..8c3d668 100644
--- a/android/src/main/java/com/contentful/rich/android/renderer/chars/TextRenderer.java
+++ b/android/src/main/java/com/contentful/rich/android/renderer/chars/TextRenderer.java
@@ -5,9 +5,10 @@
import android.text.SpannableStringBuilder;
import android.text.style.BackgroundColorSpan;
import android.text.style.StyleSpan;
+import android.text.style.SubscriptSpan;
+import android.text.style.SuperscriptSpan;
import android.text.style.TextAppearanceSpan;
import android.text.style.UnderlineSpan;
-
import com.contentful.java.cda.rich.CDARichMark;
import com.contentful.java.cda.rich.CDARichMark.CDARichMarkBold;
import com.contentful.java.cda.rich.CDARichMark.CDARichMarkItalic;
@@ -67,10 +68,15 @@ public TextRenderer(@Nonnull AndroidProcessor processor) {
if (mark instanceof CDARichMarkUnderline) {
result.setSpan(new UnderlineSpan(), 0, result.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
}
-
if (mark instanceof CDARichMarkBold) {
result.setSpan(new StyleSpan(Typeface.BOLD), 0, result.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
}
+ if (mark instanceof CDARichMark.CDARichMarkSubscript) {
+ result.setSpan(new SubscriptSpan(), 0, result.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
+ }
+ if (mark instanceof CDARichMark.CDARichMarkSuperscript) {
+ result.setSpan(new SuperscriptSpan(), 0, result.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
+ }
if (mark instanceof CDARichMarkItalic) {
result.setSpan(new StyleSpan(Typeface.ITALIC), 0, result.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
}
diff --git a/android/src/main/java/com/contentful/rich/android/renderer/views/TextRenderer.java b/android/src/main/java/com/contentful/rich/android/renderer/views/TextRenderer.java
index a686eac..ef56517 100644
--- a/android/src/main/java/com/contentful/rich/android/renderer/views/TextRenderer.java
+++ b/android/src/main/java/com/contentful/rich/android/renderer/views/TextRenderer.java
@@ -2,15 +2,15 @@
import android.graphics.Typeface;
import android.text.SpannableStringBuilder;
-import android.text.style.AbsoluteSizeSpan;
import android.text.style.BackgroundColorSpan;
import android.text.style.StyleSpan;
+import android.text.style.SubscriptSpan;
+import android.text.style.SuperscriptSpan;
import android.text.style.TextAppearanceSpan;
import android.text.style.UnderlineSpan;
import android.util.TypedValue;
import android.view.View;
import android.widget.TextView;
-
import com.contentful.java.cda.rich.CDARichHeading;
import com.contentful.java.cda.rich.CDARichMark;
import com.contentful.java.cda.rich.CDARichMark.CDARichMarkBold;
@@ -77,6 +77,12 @@ public TextRenderer(@Nonnull AndroidProcessor processor) {
if (mark instanceof CDARichMarkBold) {
textContent.setSpan(new StyleSpan(Typeface.BOLD), 0, textContent.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
}
+ if (mark instanceof CDARichMark.CDARichMarkSuperscript) {
+ textContent.setSpan(new SuperscriptSpan(), 0, textContent.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
+ }
+ if (mark instanceof CDARichMark.CDARichMarkSubscript) {
+ textContent.setSpan(new SubscriptSpan(), 0, textContent.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
+ }
if (mark instanceof CDARichMarkItalic) {
textContent.setSpan(new StyleSpan(Typeface.ITALIC), 0, textContent.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
}
diff --git a/android/src/main/res/layout/rich_text_layout.xml b/android/src/main/res/layout/rich_text_layout.xml
index 39454cb..33396b0 100644
--- a/android/src/main/res/layout/rich_text_layout.xml
+++ b/android/src/main/res/layout/rich_text_layout.xml
@@ -3,5 +3,6 @@
android:id="@id/rich_content"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
+ android:padding="5dp"
android:layout_height="wrap_content"
/>
diff --git a/android_sample/build.gradle b/android_sample/build.gradle
index 2f68bd0..096db7b 100644
--- a/android_sample/build.gradle
+++ b/android_sample/build.gradle
@@ -1,7 +1,6 @@
plugins {
id("com.android.application")
- id "org.jetbrains.kotlin.android" version "1.6.0-RC"
- id("org.jetbrains.kotlin.android.extensions") version "1.5.30"
+ id "org.jetbrains.kotlin.android" version "1.8.0"
}
repositories {
@@ -9,14 +8,14 @@ repositories {
}
android {
- compileSdkVersion 32
+ compileSdk 33
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.contentful.rich.android.sample"
minSdkVersion 21
- targetSdkVersion 32
+ targetSdkVersion 33
versionCode 1
versionName "1.0"
@@ -24,13 +23,17 @@ android {
}
+ buildFeatures {
+ viewBinding = true
+ }
+
compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
+ sourceCompatibility "11"
+ targetCompatibility "11"
}
buildTypes {
- all {
+ configureEach {
buildConfigField("String", "SPACE_ID", "\"${System.getenv("RICH_TEXT_SPACE_ID")}\"")
buildConfigField("String", "DELIVERY_TOKEN", "\"${System.getenv("RICH_TEXT_DELIVERY_TOKEN")}\"")
buildConfigField("String", "ENVIRONMENT_ID", "\"${System.getenv("RICH_TEXT_ENVIRONMENT_ID")}\"")
@@ -49,13 +52,13 @@ dependencies {
implementation project(path: ':android')
implementation project(path: ':core')
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10"
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.3"
- implementation 'androidx.appcompat:appcompat:1.5.0'
+ implementation 'androidx.appcompat:appcompat:1.6.0'
implementation "com.contentful.java:java-sdk:${project.contentful_version}"
implementation 'com.google.code.findbugs:jsr305:3.0.2'
- implementation 'com.google.android.material:material:1.6.1'
+ implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
}
diff --git a/android_sample/src/main/java/com/contentful/rich/android/sample/MainActivity.kt b/android_sample/src/main/java/com/contentful/rich/android/sample/MainActivity.kt
index 66845a9..f313c8b 100644
--- a/android_sample/src/main/java/com/contentful/rich/android/sample/MainActivity.kt
+++ b/android_sample/src/main/java/com/contentful/rich/android/sample/MainActivity.kt
@@ -10,15 +10,15 @@ import com.contentful.java.cda.CDAEntry
import com.contentful.java.cda.QueryOperation.Matches
import com.contentful.java.cda.rich.CDARichDocument
import com.contentful.java.cda.rich.CDARichParagraph
+import com.contentful.rich.android.sample.databinding.ActivityMainBinding
import com.contentful.rich.core.simple.RemoveEmpties
import com.contentful.rich.core.simple.RemoveToDeepNesting
import com.contentful.rich.core.simple.Simplifier
-import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
private const val SPACE_ID = "i1ppeoxgdpvt"
-private const val TOKEN = "MU0hFqSvQ7QdXT82RgduxtQCGQBckJqqZkPw3U6T-rY"
+private const val TOKEN = "QuYNYLv6rVnCKOT4_-d3552xD4YIPFcKTWRb2Y227Ic"
private const val ENVIRONMENT = "master"
class MainActivity(
@@ -29,19 +29,23 @@ class MainActivity(
.build()
) : AppCompatActivity() {
+ private lateinit var binding: ActivityMainBinding
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
+ binding = ActivityMainBinding.inflate(layoutInflater)
+ val view = binding.root
+ setContentView(view)
- setSupportActionBar(toolbar)
+ setSupportActionBar(binding.toolbar)
supportActionBar?.setDisplayShowTitleEnabled(false)
if (PAGES.last().name != "Contentful") {
- spinner.prompt = "⌛ Loading from Contentful ⏳"
+ binding.spinner.prompt = "⌛ Loading from Contentful ⏳"
loadPageFromContentful()
}
- spinner.onItemSelectedListener = object : OnItemSelectedListener {
+ binding.spinner.onItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, PageFragment.newInstance(position))
@@ -63,7 +67,11 @@ class MainActivity(
.entries()
.values
.map { entry ->
- entry.getField("rich") as CDARichDocument
+ if(entry.getField("rich") != null) {
+ entry.getField("rich") as CDARichDocument
+ } else {
+ CDARichDocument()
+ }
}.reduce { a, b ->
val p = CDARichParagraph()
p.content.addAll(b.content)
@@ -80,8 +88,8 @@ class MainActivity(
)
runOnUiThread {
- spinner.prompt = PAGES[0].name
- spinner.adapter = PageAdapter(
+ binding.spinner.prompt = PAGES[0].name
+ binding.spinner.adapter = PageAdapter(
this@MainActivity,
PAGES.toTypedArray()
)
diff --git a/android_sample/src/main/java/com/contentful/rich/android/sample/Page.kt b/android_sample/src/main/java/com/contentful/rich/android/sample/Page.kt
index 558ba83..b04e476 100644
--- a/android_sample/src/main/java/com/contentful/rich/android/sample/Page.kt
+++ b/android_sample/src/main/java/com/contentful/rich/android/sample/Page.kt
@@ -16,6 +16,8 @@ val PAGES = mutableListOf(
text("Normal Text"),
text("BoldText", listOf(CDARichMarkBold())),
text("Italic", listOf(CDARichMarkItalic())),
+ text("Superscript", listOf(CDARichMarkSuperscript())),
+ text("Subscript", listOf(CDARichMarkSubscript())),
text("Underline", listOf(CDARichMarkUnderline())),
text("final String code;", listOf(CDARichMarkCode())),
text("CustomText", listOf(CDARichMarkCustom("custom"))),
@@ -24,6 +26,8 @@ val PAGES = mutableListOf(
listOf(
CDARichMarkCustom("custom"),
CDARichMarkItalic(),
+ CDARichMarkSubscript(),
+ CDARichMarkSubscript(),
CDARichMarkBold(),
CDARichMarkCode(),
CDARichMarkUnderline()
@@ -129,7 +133,9 @@ val PAGES = mutableListOf(
CDARichBlock().addAll(
text("Quotes from "),
text("Famous", listOf(CDARichMark.CDARichMarkBold())),
- text(" People", listOf(CDARichMark.CDARichMarkItalic()))
+ text(" People", listOf(CDARichMark.CDARichMarkItalic())),
+ text(" Dogs", listOf(CDARichMark.CDARichMarkSuperscript())),
+ text(" Cats", listOf(CDARichMark.CDARichMarkSubscript())),
),
CDARichQuote().addAll(
text("You know you’re in love when you can’t fall asleep because reality is finally better than your dreams."),
diff --git a/android_sample/src/main/java/com/contentful/rich/android/sample/PageAdapter.kt b/android_sample/src/main/java/com/contentful/rich/android/sample/PageAdapter.kt
index ef549f6..2576c5f 100644
--- a/android_sample/src/main/java/com/contentful/rich/android/sample/PageAdapter.kt
+++ b/android_sample/src/main/java/com/contentful/rich/android/sample/PageAdapter.kt
@@ -2,11 +2,13 @@ package com.contentful.rich.android.sample
import android.content.Context
import android.content.res.Resources
+import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import androidx.appcompat.widget.ThemedSpinnerAdapter
-import kotlinx.android.synthetic.main.dropdown_item.view.*
+import com.contentful.rich.android.sample.databinding.AppbarItemBinding
+import com.contentful.rich.android.sample.databinding.DropdownItemBinding
class PageAdapter(context: Context, objects: Array) :
ArrayAdapter(context, R.layout.appbar_item, objects), ThemedSpinnerAdapter {
@@ -14,29 +16,23 @@ class PageAdapter(context: Context, objects: Array) :
private val mDropDownHelper: ThemedSpinnerAdapter.Helper = ThemedSpinnerAdapter.Helper(context)
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
- val view = if (convertView == null) {
- val inflater = mDropDownHelper.dropDownViewInflater
- inflater.inflate(R.layout.appbar_item, parent, false)
- } else {
- convertView
- }
+ val binding: AppbarItemBinding =
+ if (convertView != null) AppbarItemBinding.bind(convertView)
+ else AppbarItemBinding.inflate(LayoutInflater.from(context), parent, false)
- view.list_item_text.text = getItem(position)?.name ?: "null"
+ binding.listItemText.text = getItem(position)?.name ?: "null"
- return view
+ return binding.root
}
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
- val view = if (convertView == null) {
- val inflater = mDropDownHelper.dropDownViewInflater
- inflater.inflate(R.layout.dropdown_item, parent, false)
- } else {
- convertView
- }
+ val binding: DropdownItemBinding =
+ if (convertView != null) DropdownItemBinding.bind(convertView)
+ else DropdownItemBinding.inflate(LayoutInflater.from(context), parent, false)
- view.list_item_text.text = getItem(position)?.name ?: "null"
+ binding.listItemText.text = getItem(position)?.name ?: "null"
- return view
+ return binding.root
}
override fun getDropDownViewTheme(): Resources.Theme? {
diff --git a/android_sample/src/main/java/com/contentful/rich/android/sample/PageFragment.kt b/android_sample/src/main/java/com/contentful/rich/android/sample/PageFragment.kt
index 17a51ba..20779ec 100644
--- a/android_sample/src/main/java/com/contentful/rich/android/sample/PageFragment.kt
+++ b/android_sample/src/main/java/com/contentful/rich/android/sample/PageFragment.kt
@@ -1,27 +1,39 @@
package com.contentful.rich.android.sample
import android.os.Bundle
+import android.text.method.LinkMovementMethod
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
-import kotlinx.android.synthetic.main.fragment_page.*
-import kotlinx.android.synthetic.main.fragment_page.view.*
+import com.contentful.rich.android.sample.databinding.FragmentPageBinding
+import com.contentful.rich.android.sample.databinding.SampleItemBinding
class PageFragment : Fragment() {
- class Holder(view: View) : RecyclerView.ViewHolder(view)
+ class Holder(private val binding: SampleItemBinding) : RecyclerView.ViewHolder(binding.root) {
+ fun bind(text: String) {
+ binding.sampleItemText.text = text
+ binding.sampleItemText.movementMethod = LinkMovementMethod.getInstance()
+ }
+ fun removeViews(view: View) {
+ binding.sampleItemCard.removeAllViews()
+ binding.sampleItemCard.addView(view)
+ }
+ }
+ private var _binding: FragmentPageBinding? = null
+ private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
- val rootView = inflater.inflate(R.layout.fragment_page, container, false)
- rootView.page_recycler.layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
- rootView.page_recycler.adapter =
+ _binding = FragmentPageBinding.inflate(inflater, container, false)
+ binding.pageRecycler.layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
+ binding.pageRecycler.adapter =
RichCharSequenceAdapter(arguments?.getInt(ARG_PAGE_INDEX, 0)
?: 0, requireContext())
- rootView.main_native_check.setOnCheckedChangeListener { _, isChecked ->
+ binding.mainNativeCheck.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
onNativeViewProcessingSelected()
} else {
@@ -29,11 +41,11 @@ class PageFragment : Fragment() {
}
}
- return rootView
+ return binding.root
}
private fun onNativeViewProcessingSelected() {
- fragment_page.page_recycler.adapter =
+ binding.pageRecycler.adapter =
RichNativeViewAdapter(
arguments?.getInt(ARG_PAGE_INDEX, 0) ?: 0,
requireContext())
@@ -41,7 +53,7 @@ class PageFragment : Fragment() {
}
private fun onCharSequenceProcessingSelected() {
- fragment_page.page_recycler.adapter =
+ binding.pageRecycler.adapter =
RichCharSequenceAdapter(
arguments?.getInt(ARG_PAGE_INDEX, 0) ?: 0,
requireContext())
diff --git a/android_sample/src/main/java/com/contentful/rich/android/sample/RichCharSequenceAdapter.kt b/android_sample/src/main/java/com/contentful/rich/android/sample/RichCharSequenceAdapter.kt
index 7dc42f8..4963c86 100644
--- a/android_sample/src/main/java/com/contentful/rich/android/sample/RichCharSequenceAdapter.kt
+++ b/android_sample/src/main/java/com/contentful/rich/android/sample/RichCharSequenceAdapter.kt
@@ -3,7 +3,6 @@ package com.contentful.rich.android.sample
import android.content.Context
import android.text.Spannable
import android.text.SpannableStringBuilder
-import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan
import android.view.LayoutInflater
import android.view.View
@@ -14,19 +13,18 @@ import com.contentful.java.cda.CDAEntry
import com.contentful.java.cda.rich.CDARichHyperLink
import com.contentful.rich.android.AndroidContext
import com.contentful.rich.android.AndroidProcessor
-import kotlinx.android.synthetic.main.sample_item.view.*
+import com.contentful.rich.android.sample.databinding.SampleItemBinding
class RichCharSequenceAdapter(pageIndex: Int, private val androidContext: Context) : RecyclerView.Adapter() {
private val page: Page = PAGES[pageIndex]
- private val inflater: LayoutInflater = LayoutInflater.from(androidContext)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PageFragment.Holder =
- PageFragment.Holder(inflater.inflate(R.layout.sample_item, parent, false))
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PageFragment.Holder {
+ val itemBinding = SampleItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+ return PageFragment.Holder(itemBinding)
+ }
override fun onBindViewHolder(holder: PageFragment.Holder, position: Int) {
val item = page.document.content[position]
val context = AndroidContext(androidContext)
-
val processor = AndroidProcessor.creatingCharSequences()
processor.overrideRenderer(
{ _, node -> node is CDARichHyperLink && node.data is CDAEntry },
@@ -67,9 +65,7 @@ class RichCharSequenceAdapter(pageIndex: Int, private val androidContext: Contex
)
val text = processor.process(context, item) ?: "???"
-
- holder.itemView.sample_item_text.text = text
- holder.itemView.sample_item_text.movementMethod = LinkMovementMethod.getInstance()
+ holder.bind(text.toString())
}
override fun getItemCount(): Int = page.document.content.size
diff --git a/android_sample/src/main/java/com/contentful/rich/android/sample/RichNativeViewAdapter.kt b/android_sample/src/main/java/com/contentful/rich/android/sample/RichNativeViewAdapter.kt
index e71a88f..a2f1e8e 100644
--- a/android_sample/src/main/java/com/contentful/rich/android/sample/RichNativeViewAdapter.kt
+++ b/android_sample/src/main/java/com/contentful/rich/android/sample/RichNativeViewAdapter.kt
@@ -11,14 +11,16 @@ import com.contentful.java.cda.CDAEntry
import com.contentful.java.cda.rich.CDARichHyperLink
import com.contentful.rich.android.AndroidContext
import com.contentful.rich.android.AndroidProcessor
-import kotlinx.android.synthetic.main.sample_item.view.*
+import com.contentful.rich.android.sample.databinding.SampleItemBinding
class RichNativeViewAdapter(pageIndex: Int, private val androidContext: Context) : RecyclerView.Adapter() {
private val page: Page = PAGES[pageIndex]
private val inflater: LayoutInflater = LayoutInflater.from(androidContext)
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PageFragment.Holder =
- PageFragment.Holder(inflater.inflate(R.layout.sample_item, parent, false))
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PageFragment.Holder {
+ val itemBinding = SampleItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+ return PageFragment.Holder(itemBinding)
+ }
override fun onBindViewHolder(holder: PageFragment.Holder, position: Int) {
val item = page.document.content[position]
@@ -54,8 +56,7 @@ class RichNativeViewAdapter(pageIndex: Int, private val androidContext: Context)
val view = processor.process(context, item)
?: TextView(this.androidContext).apply { setText(R.string.error_no_view) }
- holder.itemView.sample_item_card.removeAllViews()
- holder.itemView.sample_item_card.addView(view)
+ holder.removeViews(view)
}
override fun getItemCount(): Int = page.document.content.size
diff --git a/build.gradle b/build.gradle
index e1bc40a..4ca611c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -8,7 +8,7 @@ allprojects {
group = "com.github.contentful.rich"
version = '1.2.0'
- ext.contentful_version = "10.5.6"
+ ext.contentful_version = "10.5.12"
repositories {
mavenCentral()
@@ -26,4 +26,8 @@ dependencies {
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
+}
+java {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
}
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 7eaa3c4..a4ec768 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
diff --git a/html/src/main/java/com/contentful/rich/html/renderer/TextRenderer.java b/html/src/main/java/com/contentful/rich/html/renderer/TextRenderer.java
index 70e6626..3f11a12 100644
--- a/html/src/main/java/com/contentful/rich/html/renderer/TextRenderer.java
+++ b/html/src/main/java/com/contentful/rich/html/renderer/TextRenderer.java
@@ -38,6 +38,12 @@ public String render(@Nonnull HtmlContext context, @Nonnull CDARichNode node) {
if (mark instanceof CDARichMark.CDARichMarkItalic) {
result.insert(0, "").append("");
}
+ if (mark instanceof CDARichMark.CDARichMarkSuperscript) {
+ result.insert(0, "").append("");
+ }
+ if (mark instanceof CDARichMark.CDARichMarkSubscript) {
+ result.insert(0, "").append("");
+ }
if (mark instanceof CDARichMark.CDARichMarkCode) {
result.insert(0, "").append("
");
}
diff --git a/html/src/test/java/AllTheThingsTest.java b/html/src/test/java/AllTheThingsTest.java
index b22696f..c46a4c1 100644
--- a/html/src/test/java/AllTheThingsTest.java
+++ b/html/src/test/java/AllTheThingsTest.java
@@ -76,9 +76,9 @@ public void allTheNodes() {
" some list item content\n" +
" \n" +
" \n" +
- " \n" +
+ "
\n" +
" Paragraph\n" +
- "
\n" +
+ "
\n" +
" \n" +
" Famous quote\n" +
"
\n" +
diff --git a/html/src/test/java/ListsTest.java b/html/src/test/java/ListsTest.java
index 7c618c4..81b249b 100644
--- a/html/src/test/java/ListsTest.java
+++ b/html/src/test/java/ListsTest.java
@@ -30,19 +30,19 @@ public void threeUnorderedElementsListTest() {
assertThat(result).isEqualTo(
"\n" +
" - \n" +
- "
\n" +
+ "
\n" +
" one\n" +
- "
\n" +
+ " \n" +
" \n" +
" - \n" +
- "
\n" +
+ "
\n" +
" two\n" +
- "
\n" +
+ " \n" +
" \n" +
" - \n" +
- "
\n" +
+ "
\n" +
" three\n" +
- "
\n" +
+ " \n" +
" \n" +
"
\n");
}
@@ -71,43 +71,43 @@ public void threeUnorderedElementsListAndOneNestedOrdered() {
assertThat(result).isEqualTo("\n" +
" - \n" +
- "
\n" +
+ "
\n" +
" one\n" +
- "
\n" +
+ " \n" +
" \n" +
" - \n" +
- "
\n" +
+ "
\n" +
" two\n" +
- "
\n" +
+ " \n" +
" \n" +
" - \n" +
- "
\n" +
+ "
\n" +
" three\n" +
- "
\n" +
+ " \n" +
" \n" +
" - \n" +
"
\n" +
" - \n" +
- "
\n" +
+ "
\n" +
" a\n" +
- "
\n" +
+ " \n" +
" \n" +
" - \n" +
- "
\n" +
+ "
\n" +
" b\n" +
- "
\n" +
+ " \n" +
" \n" +
" - \n" +
- "
\n" +
+ "
\n" +
" c\n" +
- "
\n" +
+ " \n" +
" \n" +
"
\n" +
" \n" +
" - \n" +
- "
\n" +
+ "
\n" +
" <\uD83D\uDC51>four
\uD83D\uDC51>\n" +
- "
\n" +
+ " \n" +
" \n" +
"
\n");
}
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 4f45b3f..01e85b6 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -7,10 +7,10 @@ pluginManagement {
resolutionStrategy {
eachPlugin {
if (requested.id.id.startsWith("com.android")) {
- useModule("com.android.tools.build:gradle:7.2.0")
+ useModule("com.android.tools.build:gradle:7.4.0-beta02")
}
if (requested.id.id.startsWith("org.jetbrains.kotlin")) {
- useVersion("1.7.10")
+ useVersion("1.8.0")
}
}
}