Skip to content

Commit

Permalink
TextLayoutUtils: Use named arguments (#42593)
Browse files Browse the repository at this point in the history
Summary:
`TextLayoutUtils`: Use named arguments to ensure same-type arguments (like `start`/`end`) are not confused

This is a minor readability follow-up to #39630.

## Changelog:

<!-- Help reviewers and the release process by writing your own changelog entry.

Pick one each for the category and type tags:

[ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message

For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->

[INTERNAL] [CHANGED] - Increase the `TextLayoutUtils` readability slightly

Pull Request resolved: #42593

Reviewed By: NickGerleman

Differential Revision: D53028402

Pulled By: mdvacca

fbshipit-source-id: 39e99ba70b93eecfc51bda19d30a5b1977cfe406
  • Loading branch information
cubuspl42 authored and facebook-github-bot committed Jan 25, 2024
1 parent 78967b3 commit 87bcaa3
Showing 1 changed file with 122 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import android.view.View
import com.facebook.react.common.ReactConstants
import com.facebook.react.uimanager.PixelUtil
import com.facebook.react.uimanager.ReactAccessibilityDelegate
import com.facebook.react.views.text.fragments.TextFragment
import com.facebook.react.views.text.fragments.TextFragmentList

/** Utility methods for building [Spannable]s */
Expand All @@ -27,26 +28,53 @@ internal object TextLayoutUtils {
sb: SpannableStringBuilder,
ops: MutableList<SetSpanOperation>,
) {

for (i in 0 until textFragmentList.count) {
val fragment = textFragmentList.getFragment(i)
val start = sb.length

// ReactRawText
val textAttributes = fragment.textAttributeProps

addText(sb, fragment.string, textAttributes)

val end = sb.length
val reactTag = if (fragment.hasReactTag()) fragment.reactTag else View.NO_ID
if (fragment.hasIsAttachment() && fragment.isAttachment) {
val width = PixelUtil.toPixelFromSP(fragment.width)
val height = PixelUtil.toPixelFromSP(fragment.height)
addApplicableFragmentSpans(
context = context,
fragment = fragment,
sb = sb,
ops = ops,
)
}
}

addInlineViewPlaceholderSpan(ops, sb, reactTag, width, height)
} else if (end >= start) {
addApplicableTextAttributeSpans(ops, textAttributes, reactTag, context, start, end)
}
private fun addApplicableFragmentSpans(
context: Context,
fragment: TextFragment,
sb: SpannableStringBuilder,
ops: MutableList<SetSpanOperation>,
) {
val start = sb.length

// ReactRawText
val textAttributes = fragment.textAttributeProps

addText(sb, fragment.string, textAttributes)

val end = sb.length
val reactTag = if (fragment.hasReactTag()) fragment.reactTag else View.NO_ID
if (fragment.hasIsAttachment() && fragment.isAttachment) {
val width = PixelUtil.toPixelFromSP(fragment.width)
val height = PixelUtil.toPixelFromSP(fragment.height)

addInlineViewPlaceholderSpan(
ops = ops,
sb = sb,
reactTag = reactTag,
width = width,
height = height,
)
} else if (end >= start) {
addApplicableTextAttributeSpans(
ops = ops,
textAttributeProvider = textAttributes,
reactTag = reactTag,
context = context,
start = start,
end = end,
)
}
}

Expand Down Expand Up @@ -83,27 +111,84 @@ internal object TextLayoutUtils {
start: Int,
end: Int
) {
addColorSpanIfApplicable(ops, textAttributeProvider, start, end)

addBackgroundColorSpanIfApplicable(ops, textAttributeProvider, start, end)

addLinkSpanIfApplicable(ops, textAttributeProvider, reactTag, start, end)

addLetterSpacingSpanIfApplicable(ops, textAttributeProvider, start, end)

addFontSizeSpanIfApplicable(ops, textAttributeProvider, start, end)

addCustomStyleSpanIfApplicable(ops, textAttributeProvider, context, start, end)

addUnderlineSpanIfApplicable(ops, textAttributeProvider, start, end)

addStrikethroughSpanIfApplicable(ops, textAttributeProvider, start, end)

addShadowStyleSpanIfApplicable(ops, textAttributeProvider, start, end)

addLineHeightSpanIfApplicable(ops, textAttributeProvider, start, end)

addReactTagSpan(ops, start, end, reactTag)
addColorSpanIfApplicable(
ops = ops,
textAttributeProvider = textAttributeProvider,
start = start,
end = end,
)

addBackgroundColorSpanIfApplicable(
ops = ops,
textAttributeProvider = textAttributeProvider,
start = start,
end = end,
)

addLinkSpanIfApplicable(
ops = ops,
textAttributeProvider = textAttributeProvider,
reactTag,
start = start,
end = end,
)

addLetterSpacingSpanIfApplicable(
ops = ops,
textAttributeProvider = textAttributeProvider,
start = start,
end = end,
)

addFontSizeSpanIfApplicable(
ops = ops,
textAttributeProvider = textAttributeProvider,
start = start,
end = end,
)

addCustomStyleSpanIfApplicable(
ops = ops,
textAttributeProvider = textAttributeProvider,
context,
start = start,
end = end,
)

addUnderlineSpanIfApplicable(
ops = ops,
textAttributeProvider = textAttributeProvider,
start = start,
end = end,
)

addStrikethroughSpanIfApplicable(
ops = ops,
textAttributeProvider = textAttributeProvider,
start = start,
end = end,
)

addShadowStyleSpanIfApplicable(
ops = ops,
textAttributeProvider = textAttributeProvider,
start = start,
end = end,
)

addLineHeightSpanIfApplicable(
ops = ops,
textAttributeProvider = textAttributeProvider,
start = start,
end = end,
)

addReactTagSpan(
ops = ops,
start = start,
end = end,
reactTag = reactTag,
)
}

@JvmStatic
Expand Down

0 comments on commit 87bcaa3

Please sign in to comment.