[*]rtl-container-mixed-inside: rtl on container, rtl/ltr on spans again
[*]rtl-container-auto-inside: rtl on container, auto on all spans
auto-everywhere < /h2>
none-container-mixed-inside < /h2>
rtl-container-mixed-inside
rtl-container-auto-inside < /h2>
Общий код < /h2>
Код: Выделить всё
بالطبع.
[list]
[*]
"
الأشجار
" (al-ashjar)
تعني
"trees"
وهي الفاعل.
[*]
"
جميلة
" (jameela)
تعني
"beautiful"
وهي صفة.
[*]
"
تعطي
" (tu'ti)
تعني
"give"
وهي الفعل.
[*]
"
الحياة
" (al-hayat)
تعني
"life"
وهي المفعول الأول.
[*]
"
الظل
" (al-zill)
تعني
"shade"
وهي المفعول الثاني.
[/list]
الجملة تصف جمال الأشجار وقدرتها على إعطاء الحياة والظل.
هل هذا يوضح ما كنت تتساءل عنه؟
< /code>
скопированный контент < /h2>
Для читаемости, вот простой текст: < /p>
بالطبع.
"الأشجار" (al-ashjar) تعني "trees" وهي الفاعل.
"جميلة" (jameela) تعني "beautiful" وهي صفة.
"تعطي" (tu'ti) تعني "give" وهي الفعل.
"الحياة" (al-hayat) تعني "life" وهي المفعول الأول.
"الظل" (al-zill) تعني "shade" وهي المفعول الثاني.
الجملة تصف جمال الأشجار وقدرتها على إعطاء الحياة والظل.
هل هذا يوضح ما كنت تتساءل عنه؟
кажется сложной потенциально неоднозначной/неразрешимой проблемой, но все равно подумал, что я спрошу. /> Я чувствую, что это может стать довольно неоднозначным. Например, возьмите эти строки: < /p>
# should be rtl
هل هذا يوضح ما كنت تتساءل عنه
# ltr
it could get quite ambiguous
# ltr
it could get تتساءل quite ambiguous
# rtl
هل هذا يوضح ما hello كنت تتساءل عنه
# rtl
hello هل هذا يوضح ما كنت تتساءل عنه
< /code>
Таким образом, кажется, что вы должны знать значение предложения, чтобы правильно понять это. Я предполагаю, что это могло бы сработать.export type Span = {
fontSize: number
script: string
// heading: number
text: string
count: number
heading: number
dir?: 'ltr' | 'rtl'
}
export function parseSpans(text, size) {
const spans = []
const span = []
const list = [...text]
let script
function add(span, script) {
const heading = FONT_SIZE_MULTIPLIERS[script ?? 'code']?.body ?? 1
const fontSize = Math.round(size * heading)
const dir = getScriptDirection(script ?? 'latin')
spans.push({
fontSize,
dir: 'auto',
count: span.length,
script:
!script || script === 'latin'
? 'code'
: script === 'other'
? 'code'
: script,
heading,
text: span.join(''),
})
}
for (const char of list) {
const type = detectSymbol(char)
if (!type || type === script) {
span.push(char)
script = type
} else if (char.match(/[\s\.,:;\{\}\[\]\(\)\-\?\!]/)) {
span.push(char)
} else {
add(span, script)
span.length = 0
span.push(char)
script = type
}
}
if (span.length) {
add(span, script)
}
return spans
}
< /code>
Так что, возможно, я смогу расширить это или что -то в этом роде. Ищу совета по конкретному алгоритму или типу «нет ничего, что вы ничего не можете сделать» в этой ситуации ».
Подробнее здесь: https://stackoverflow.com/questions/796 ... javascript