parent
f96aa0217d
commit
66dea3a05f
@ -6,7 +6,6 @@ import android.util.Log
|
|||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.gestures.awaitEachGesture
|
import androidx.compose.foundation.gestures.awaitEachGesture
|
||||||
import androidx.compose.foundation.gestures.awaitFirstDown
|
import androidx.compose.foundation.gestures.awaitFirstDown
|
||||||
import androidx.compose.foundation.gestures.detectTapGestures
|
|
||||||
import androidx.compose.foundation.gestures.waitForUpOrCancellation
|
import androidx.compose.foundation.gestures.waitForUpOrCancellation
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
@ -19,7 +18,7 @@ import androidx.compose.foundation.layout.padding
|
|||||||
import androidx.compose.foundation.layout.requiredSize
|
import androidx.compose.foundation.layout.requiredSize
|
||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.material3.Checkbox
|
import androidx.compose.material3.Checkbox
|
||||||
import androidx.compose.material3.Divider
|
import androidx.compose.material3.HorizontalDivider
|
||||||
import androidx.compose.material3.LocalContentColor
|
import androidx.compose.material3.LocalContentColor
|
||||||
import androidx.compose.material3.LocalTextStyle
|
import androidx.compose.material3.LocalTextStyle
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
@ -91,7 +90,7 @@ fun MarkdownNode(
|
|||||||
MarkdownElementTypes.ATX_4 -> AtxNode(node, text, 4, onTextChange)
|
MarkdownElementTypes.ATX_4 -> AtxNode(node, text, 4, onTextChange)
|
||||||
MarkdownElementTypes.ATX_5 -> AtxNode(node, text, 5, onTextChange)
|
MarkdownElementTypes.ATX_5 -> AtxNode(node, text, 5, onTextChange)
|
||||||
MarkdownElementTypes.ATX_6 -> AtxNode(node, text, 6, onTextChange)
|
MarkdownElementTypes.ATX_6 -> AtxNode(node, text, 6, onTextChange)
|
||||||
MarkdownTokenTypes.HORIZONTAL_RULE -> Divider(modifier = Modifier.padding(vertical = 4.dp))
|
MarkdownTokenTypes.HORIZONTAL_RULE -> HorizontalDivider(modifier = Modifier.padding(vertical = 4.dp))
|
||||||
MarkdownElementTypes.UNORDERED_LIST -> UnorderedListNode(node, text, onTextChange)
|
MarkdownElementTypes.UNORDERED_LIST -> UnorderedListNode(node, text, onTextChange)
|
||||||
MarkdownElementTypes.ORDERED_LIST -> OrderedListNode(node, text, onTextChange)
|
MarkdownElementTypes.ORDERED_LIST -> OrderedListNode(node, text, onTextChange)
|
||||||
MarkdownElementTypes.BLOCK_QUOTE -> BlockQuoteNode(node, text, onTextChange)
|
MarkdownElementTypes.BLOCK_QUOTE -> BlockQuoteNode(node, text, onTextChange)
|
||||||
@ -149,7 +148,14 @@ fun ParagraphNode(node: ASTNode, text: String) {
|
|||||||
|
|
||||||
val text = buildAnnotatedString {
|
val text = buildAnnotatedString {
|
||||||
append(substring)
|
append(substring)
|
||||||
applyStyles(node, colorScheme, typography, SpanStyle(fontSize = 0.sp), text, node.startOffset)
|
applyStyles(
|
||||||
|
node,
|
||||||
|
colorScheme,
|
||||||
|
typography,
|
||||||
|
SpanStyle(fontSize = 0.sp),
|
||||||
|
text,
|
||||||
|
node.startOffset
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
@ -163,11 +169,14 @@ fun ParagraphNode(node: ASTNode, text: String) {
|
|||||||
awaitEachGesture {
|
awaitEachGesture {
|
||||||
val down = awaitFirstDown(true)
|
val down = awaitFirstDown(true)
|
||||||
val offset = down.position
|
val offset = down.position
|
||||||
val position = layoutResult.value?.getOffsetForPosition(offset) ?: return@awaitEachGesture
|
val position =
|
||||||
|
layoutResult.value?.getOffsetForPosition(offset) ?: return@awaitEachGesture
|
||||||
val downUrlAnnotation = text.getUrlAnnotations(position, position).firstOrNull()
|
val downUrlAnnotation = text.getUrlAnnotations(position, position).firstOrNull()
|
||||||
val downUrl = downUrlAnnotation?.item?.url ?: return@awaitEachGesture
|
val downUrl = downUrlAnnotation?.item?.url ?: return@awaitEachGesture
|
||||||
val up = waitForUpOrCancellation()?.takeIf { !it.isConsumed } ?: return@awaitEachGesture
|
val up =
|
||||||
val upPosition = layoutResult.value?.getOffsetForPosition(offset) ?: return@awaitEachGesture
|
waitForUpOrCancellation()?.takeIf { !it.isConsumed } ?: return@awaitEachGesture
|
||||||
|
val upPosition =
|
||||||
|
layoutResult.value?.getOffsetForPosition(offset) ?: return@awaitEachGesture
|
||||||
val upAnnotation = text.getUrlAnnotations(upPosition, upPosition).firstOrNull()
|
val upAnnotation = text.getUrlAnnotations(upPosition, upPosition).firstOrNull()
|
||||||
val url = upAnnotation?.item?.url ?: return@awaitEachGesture
|
val url = upAnnotation?.item?.url ?: return@awaitEachGesture
|
||||||
if (url == downUrl) {
|
if (url == downUrl) {
|
||||||
@ -223,7 +232,7 @@ fun ListItemNode(
|
|||||||
Text(
|
Text(
|
||||||
text = "${index}.",
|
text = "${index}.",
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.width(24.dp)
|
.width(32.dp)
|
||||||
.padding(end = 4.dp),
|
.padding(end = 4.dp),
|
||||||
textAlign = TextAlign.End,
|
textAlign = TextAlign.End,
|
||||||
)
|
)
|
||||||
@ -231,7 +240,7 @@ fun ListItemNode(
|
|||||||
Text(
|
Text(
|
||||||
text = "•",
|
text = "•",
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.width(24.dp)
|
.width(32.dp)
|
||||||
.padding(end = 4.dp),
|
.padding(end = 4.dp),
|
||||||
textAlign = TextAlign.End,
|
textAlign = TextAlign.End,
|
||||||
)
|
)
|
||||||
@ -318,7 +327,7 @@ fun CheckboxNode(node: ASTNode, text: String, onTextChange: (String) -> Unit = {
|
|||||||
val newText = text.replaceRange(node.startOffset, node.endOffset, newCheckbox)
|
val newText = text.replaceRange(node.startOffset, node.endOffset, newCheckbox)
|
||||||
onTextChange(newText)
|
onTextChange(newText)
|
||||||
}, modifier = Modifier
|
}, modifier = Modifier
|
||||||
.padding(top = 4.dp, bottom = 4.dp, end = 8.dp)
|
.padding(top = 4.dp, bottom = 4.dp, end = 8.dp, start = 6.dp)
|
||||||
.requiredSize(18.dp)
|
.requiredSize(18.dp)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user