Di Slides API, teks dapat ditempatkan dalam bentuk atau dalam sel tabel. Sebelum dapat memanipulasi dan menata gaya teks, Anda perlu memahami strukturnya dan cara kerja gaya visual.
Halaman ini menjelaskan cara teks direpresentasikan di Slides API.
Urutan elemen teks
Teks yang terdapat dalam bentuk atau sel tabel terdiri dari urutan struktur TextElement. Urutan ini mewakili struktur teks, dalam urutan yang muncul dari awal hingga akhir.
Misalnya, pertimbangkan konten slide ini—semuanya terdapat dalam satu kotak teks:
Slide di atas memiliki satu kotak teks, yang kolom text
-nya berisi urutan
elemen teks seperti yang ditunjukkan dalam diagram berikut:
Secara lebih konkret, urutan teks ini direpresentasikan di Slides API sebagai berikut:
"textElements": [ {
"endIndex": 224,
"paragraphMarker": { "style": {} }
}, {
"endIndex": 130,
"textRun": { "content": "Li lingues differe in li grammatica e li vocabules. Omnicos directe al desirabilite de un nov ", "style": {} }
}, {
"endIndex": 143,
"startIndex": 130,
"textRun": { "content": "lingua franca", "style": { "italic": True } }
}, {
"endIndex": 224,
"startIndex": 143,
"textRun": { "content": ": solmen va esser necessi far:\n", "style": {} }
}, {
"endIndex": 243,
"startIndex": 224,
"paragraphMarker": {
"style": { "indentStart": { "magnitude": 36, "unit": "PT" }, "direction": "LEFT_TO_RIGHT", "indentFirstLine": { "magnitude": 18, "unit": "PT" }, "spacingMode": "COLLAPSE_LISTS" },
"bullet": { "listId": "foo123", "glyph": "\u25cf" }
}
}, {
"endIndex": 243,
"startIndex": 224,
"textRun": { "content": "uniform grammatica\n", "style": {} }
}, {
"endIndex": 257,
"startIndex": 243,
"paragraphMarker": {
"style": { "indentStart": { "magnitude": 36, "unit": "PT" }, "direction": "LEFT_TO_RIGHT", "indentFirstLine": { "magnitude": 18, "unit": "PT" }, "spacingMode": "COLLAPSE_LISTS" },
"bullet": { "listId": "foo123", "glyph": "\u25cf" }
}
}, {
"endIndex": 257,
"startIndex": 243,
"textRun": { "content": "Pronunciation\n", "style": {} }
}, {
"endIndex": 277,
"startIndex": 257,
"paragraphMarker": {
"style": { "indentStart": { "magnitude": 36, "unit": "PT" }, "indentFirstLine": { "magnitude": 18, "unit": "PT" }, "spacingMode": "COLLAPSE_LISTS" },
"bullet": { "listId": "foo123", "glyph": "\u25cf" }
}
}, {
"endIndex": 277,
"startIndex": 257,
"textRun": { "content": "plu sommun paroles.\n", "style": {} }
}, {
"endIndex": 500,
"startIndex": 277,
"paragraphMarker": { "style": {} }
}, {
"endIndex": 500,
"startIndex": 277,
"textRun": { "content": "Ka swu thefognay, tay waddeant varpa u inzo.\n", "style": {} }
}]
Konten TextElement
Setiap elemen teks berisi indeks awal dan indeks akhir berbasis nol, yang menjelaskan lokasi elemen dalam teks lengkap elemen halaman, bersama dengan salah satu jenis objek teks berikut:
Jenis teks | Deskripsi |
---|---|
ParagraphMarker | Elemen teks ini mewakili awal paragraf baru. Indeks awal dan akhir elemen teks mewakili span lengkap paragraf, termasuk karakter baris baru yang mengakhiri paragraf. Paragraf tidak pernah tumpang-tindih dengan paragraf lain. Paragraf selalu diakhiri dengan karakter baris baru, sehingga selalu ada baris baru di akhir konten teks bentuk atau sel tabel. Paragraf dapat berupa daftar berbutir atau bernombor. Jika demikian, konten kolom ParagraphMarker.bullet akan menyertakan ID daftar. ID ini mereferensikan elemen daftar yang ada di dalam TextContent bersama urutan TextElement . Paragraf dalam daftar logis yang sama akan merujuk ke ID daftar yang sama. |
TextRun | Elemen teks ini mewakili string teks yang berdekatan yang semuanya memiliki gaya teks yang sama. Run teks tidak pernah melintasi batas paragraf: meskipun teks yang mengakhiri satu paragraf memiliki gaya yang sama dengan teks yang memulai paragraf berikutnya, konten akan dibagi setelah karakter baris baru untuk membentuk run teks terpisah. Jika Anda perlu memproses string teks lengkap di dalam elemen halaman, lakukan iterasi melalui semua elemen teks, dengan menggabungkan string yang ditemukan di semua run teks. |
AutoText | Teks otomatis mengacu pada tempat dalam teks yang berubah secara dinamis bergantung pada konteksnya. Di Slide, ini digunakan untuk menampilkan nomor slide saat ini di dalam teks. |
Mengubah konten teks
Jika perlu mengubah teks menggunakan Slides API, Anda tidak perlu membuat semua elemen teks yang sesuai secara eksplisit. Sebagai gantinya, Anda dapat mengoperasikan teks seperti
yang Anda lakukan di editor Slide: dengan menyisipkan teks, menghapus rentang, dan
memperbarui gaya pada rentang. Operasi ini secara implisit membuat elemen ParagraphMarker
dan TextRun
sesuai kebutuhan untuk mencerminkan perubahan Anda.
Menyisipkan teks
Anda dapat menyisipkan teks di indeks menggunakan permintaan
InsertTextRequest
dalam panggilan ke
batchUpdate. Kolom
insertionIndex
metode ini menentukan tempat untuk menyisipkan teks; Anda dapat
menghitung indeks ini menggunakan kolom indeks awal dan akhir di dalam elemen teks.
Penyisipan teks memiliki beberapa efek samping yang mencerminkan perilaku editor Slide:
- Menyisipkan karakter baris baru secara implisit akan membuat paragraf baru,
membuat elemen teks
ParagraphMarker
yang dimulai pada indeks baris baru dan berakhir pada baris baru berikutnya. Gaya paragraf—termasuk detail titik dan daftar — disalin dari paragraf saat ini ke paragraf baru. - Gaya karakter yang disisipkan ditentukan secara otomatis, biasanya mempertahankan gaya teks yang sama dengan yang ada di indeks penyisipan. Akibatnya,
teks biasanya disisipkan ke dalam
TextRun
yang ada pada indeks tersebut. Anda dapat memperbarui gaya ini nanti menggunakan permintaan UpdateTextStyle.
Menghapus teks
Anda dapat menghapus rentang teks menggunakan pesan DeleteTextRequest dalam panggilan ke batchUpdate. Menghapus teks melibatkan beberapa hal yang perlu diperhatikan:
- Penghapusan yang melintasi batas paragraf akan menggabungkan dua paragraf,
yang menghapus elemen teks
ParagraphMarker
pemisah. - Paragraf gabungan baru akan menggunakan gaya paragraf gabungan, yang cocok dengan perilaku di editor Slide.
- Penghapusan yang rentangnya mencakup run teks akan menghapus semua konten dari run teks, dan juga menghapus run teks itu sendiri.
- Penghapusan yang rentangnya mencakup elemen
AutoText
akan menghapus elemenAutoText
.
Memperbarui gaya teks
Tampilan teks yang dirender dalam slide ditentukan oleh properti gaya teks:
- Gaya paragraf seperti indentasi, perataan, dan glyph peluru, ditentukan oleh properti pada penanda paragraf.
- Gaya karakter seperti tebal, miring, dan garis bawah, ditentukan oleh properti pada setiap teks yang dijalankan.
Memperbarui gaya karakter
Anda dapat memperbarui gaya karakter menggunakan pesan UpdateTextStyleRequest dalam panggilan ke batchUpdate.
Seperti operasi teks lainnya, gaya karakter diterapkan ke rentang
teks dan secara implisit membuat objek TextRun
baru sesuai kebutuhan.
Menetapkan beberapa gaya karakter secara implisit akan memperbarui gaya terkait lainnya agar cocok dengan perilaku di editor Slide. Misalnya, menambahkan link akan otomatis mengubah warna latar depan teks dan properti garis bawah. Lihat dokumentasi referensi TextStyle untuk mengetahui detail selengkapnya.
Memperbarui gaya paragraf
Anda dapat memperbarui gaya paragraf menggunakan pesan UpdateParagraphStyleRequest dalam panggilan ke batchUpdate.
Slides API mendukung CreateParagraphBulletsRequest yang mencerminkan fungsi preset buletin di editor Slide untuk pembuatan daftar berbutir dan bernombor. Demikian pula, DeleteParagraphBulletsRequest akan menghapus buletin yang ada pada paragraf.
Gaya turunan
Beberapa bentuk, yang dikenal sebagai placeholder, dapat mewarisi gaya teks dari bentuk induk lain: lihat placeholder untuk mempelajari lebih lanjut pewarisan bentuk secara umum.
Bagian ini berfokus pada cara kerja pewarisan gaya untuk membuat gaya teks akhir yang dirender dan ditampilkan dalam slide.
Representasi gaya dalam placeholder
Bagian tentang placeholder menjelaskan cara kerja pewarisan antara bentuk induk dan turunan. Pewarisan gaya teks ditangani oleh fitur tambahan dalam model pewarisan:
- Properti elemen teks ParagraphMaker menentukan pemformatan paragraf.
- Properti elemen teks TextRun menentukan pemformatan karakter.
- Konten placeholder induk berisi delapan pasangan ParagraphMarker/TextRun tersebut (untuk mendukung delapan tingkat penyusunan bertingkat daftar).
- Placeholder turunan mewarisi properti teks defaultnya dari elemen teks ini dalam konten teks induknya.
Diagram berikut menunjukkan salah satu cara untuk memvisualisasikan hubungan ini:
ParagraphMarker/TextRun pertama dalam bentuk induk menentukan sebagian besar gaya visual teks yang diwarisi; gaya visual dalam tujuh pasangan yang tersisa hanya memengaruhi paragraf pada tingkat peluru bertingkat yang semakin dalam:
Pasangan elemen teks induk | Format turunan yang dikontrolnya |
---|---|
ParagraphMarker pertamaTextRun pertama |
Gaya teks paragraf daftar level 0 (terluar) dan semua paragraf non-daftar. |
Detik ParagraphMarker Detik TextRun |
Gaya teks dari tingkat daftar tersisa (bertingkat) 1-7 |
Ketiga ParagraphMarker Ketiga TextRun |
|
Keempat ParagraphMarker Keempat TextRun |
|
Kelima ParagraphMarker Kelima TextRun |
|
Keenam ParagraphMarker Keenam TextRun |
|
Ketujuh ParagraphMarker Ketujuh TextRun |
|
Kedelapan ParagraphMarker Kedelapan TextRun |
Untuk mengakses pasangan elemen teks ini, gunakan indeks eksplisitnya dalam
kolom textElements
seperti yang ditunjukkan dalam cuplikan di bawah, yang menunjukkan setelan
gaya default (dapat diwariskan) untuk paragraf tingkat 0 dan non-daftar:
"text": {
"textElements": [ {
"startIndex": 0,
"endIndex": 1,
"paragraphMarker": {
"style": { "alignment": "START", ... },
"bullet": { "nestingLevel": 0, ... }
}
},{
"startIndex": 0,
"endIndex": 1,
"textRun": {
"content": "\n",
"style": { "foregroundColor": { "opaqueColor": { "themeColor": "DARK1" } }, }
}
},{
...
} ]
}
Perhatikan bahwa kolom content
dari TextRun
bentuk induk selalu terdiri dari
satu karakter baris baru.
Gaya yang diwarisi dapat diganti
Bentuk turunan dapat menentukan properti gaya visual pada elemen ParagraphMarker dan TextRun dalam kontennya. Properti yang ditentukan secara lokal ini akan menggantikan properti yang diwarisi dalam cakupan lokalnya. Elemen yang tidak menentukan gaya apa pun akan menggunakan gaya yang sesuai yang diwarisi dari induk.
Menghapus properti gaya eksplisit dari bentuk turunan, sehingga tidak lagi ditetapkan, akan menyebabkannya mewarisi dari induk.
Contoh
Dengan pewarisan yang ditunjukkan dalam diagram di atas, misalkan bentuk
ParentPlaceholder
memiliki konten teks berikut:
"text": {
"textElements": [
{ "startIndex": 0, "endIndex": 1,
"paragraphMarker": {
"style": {"alignment": "START", ...},
"bullet": {"nestingLevel": 0, ...}
}
},
{ "startIndex": 0, "endIndex": 1,
"textRun": {
"content": "\n",
"style": {"foregroundColor": {"opaqueColor": {"themeColor": "DARK1"} }, }
...
}
},
{ "startIndex": 1, "endIndex": 2,
"paragraphMarker": {
"style": {"alignment": "END", ...},
"bullet": {"nestingLevel": 1, ...}
}
},
{ "startIndex": 1, "endIndex": 2,
"textRun": {
"content": "\n",
"style": {"foregroundColor": {"opaqueColor": {"themeColor": "LIGHT1"} }, ...}
}
},
...
]
}
Dan misalkan bentuk ChildPlaceholder
memiliki konten teks berikut:
"text": {
"textElements": [
{ "startIndex": 0, "endIndex": 1,
"paragraphMarker": {
"style": {},
}
},
{ "startIndex": 0, "endIndex": 1,
"textRun": {
"content": "This is my first paragraph\n",
"style": {},
}
...
},
{ "startIndex": 1, "endIndex": 2,
"paragraphMarker": {
"style": {},
"bullet": {
"nestingLevel": 1,
"listId": "someListId",
"glyph": "●"
}
}
},
{ "startIndex": 1, "endIndex": 2,
"textRun": {
"content": "This paragraph is in a list\n",
"style": {},
...
}
}
]
}
Hal ini menghasilkan hasil yang dijelaskan dalam paragraf berikut.
Pewarisan gaya untuk paragraf biasa
Paragraf pertama bentuk turunan, yang menyertakan teks "Ini adalah paragraf pertama saya", adalah paragraf biasa (bukan dalam daftar). Tidak ada elemen dalam konten teksnya yang menentukan properti gaya apa pun, sehingga elemen ini mewarisi semua gaya karakter dan paragrafnya dari induk. Hal ini menyebabkan rendering berikut:
- Teks: "This is my first paragraph" adalah teks yang dirender. Teks itu sendiri tidak pernah diwariskan.
- Perataan: Teks dirender dengan perataan
START
, yang diwarisi dariParagraphMarker
pertama induk. - Warna latar depan: Teks dirender dengan warna latar depan
DARK1
, yang diwarisi dariTextRun
pertama induk.
Pewarisan gaya untuk paragraf daftar
Paragraf berikutnya, yang menyertakan teks "Paragraf ini ada dalam daftar", berada dalam
daftar berbutir pada tingkat bertingkat 1, karena ParagraphMarker
yang sesuai
memiliki kolom bullet
yang ditetapkan ke tingkat ini. Akibatnya, gaya teks dan paragraf akan diwarisi dari tingkat 1 bertingkat di induk. Hal ini menghasilkan
rendering berikut:
- Teks: "Paragraf ini ada dalam daftar" adalah teks yang dirender. Teks itu sendiri tidak pernah diwarisi.
- Perataan: Teks dirender dengan perataan "END", yang diwarisi dari
ParagraphMarker
kedua induk. - Warna latar depan: Teks dirender dengan warna latar depan teks
LIGHT1
, yang diwarisi dariTextRun
kedua induk.
Interaksi antara memperbarui dan mewarisi gaya teks dan paragraf
Gaya teks yang tidak ditetapkan dalam bentuk turunan akan mewarisi nilai dari induk. Gaya teks yang ditetapkan di turunan akan "mengganti" nilai induk dalam beberapa cakupan lokal.
Anda dapat menggunakan UpdateTextStyleRequest untuk menetapkan ulang gaya teks bentuk turunan, sehingga tidak lagi memiliki penggantian lokal dan dengan demikian mewarisi gayanya dari bentuk induk. Selain itu, memperbarui gaya teks turunan agar cocok dengan nilai yang diwarisi dari induk secara implisit akan menghapus gaya sehingga menggunakan nilai yang diwarisi.
Hal ini tidak memengaruhi tampilan visual teks segera setelah pembaruan, tetapi mungkin penting jika Anda nantinya memperbarui paragraf atau gaya teks di placeholder induk. Perilaku pewarisan ini cocok dengan perilaku editor Slide, sehingga Anda dapat bereksperimen dengan hasil perubahan gaya sebelum menggunakan API.
Contoh
Pertimbangkan definisi dalam contoh sebelumnya untuk
ChildPlaceholder
dan ParentPlaceholder
.
Sekarang, anggaplah Anda mengirimkan UpdateTextStyleRequest ini:
{ "updateTextStyle": {
"objectId": "ChildPlaceholder",
"style": {"foregroundColor": {"opaqueColor": {"themeColor": "DARK1"} }, },
"textRange": { "type": "ALL" },
"fields": "foregroundColor"
}
}
Permintaan ini mencoba menetapkan foregroundColor DARK1
ke semua
teks ChildPlaceholder, menggunakan field mask
untuk menentukan bahwa hanya warna latar depan elemen yang akan berubah. Permintaan
ini memiliki hasil berikut:
- Paragraf pertama:
foregroundColor
baru cocok denganforegroundColor
yang diwarisi, sehingga gaya ini tidak berubah dan masih diwarisi. - Paragraf kedua:
foregroundColor
baru tidak cocok denganforegroundColor
yang diwarisi, sehingga warna latar depan paragraf kedua diperbarui menjadiDARK1
.
Konten teks ChildPlaceholder sekarang adalah:
"text": {
"textElements": [
{ "startIndex": 0, "endIndex": 1,
"paragraphMarker": {
"style": {},
}
},
{ "startIndex": 0, "endIndex": 1,
"textRun": {
"content": "This is my first paragraph\n",
"style": {},
}
...
},
{ "startIndex": 1, "endIndex": 2,
"paragraphMarker": {
"style": {},
"bullet": {"nestingLevel": 1, "listId": "someListId", "glyph": "●" }
}
},
{ "startIndex": 1, "endIndex": 2,
"textRun": {
"content": "This paragraph is in a list\n",
"style": {"foregroundColor": {"opaqueColor": {"themeColor": "DARK1"} }, },
...
}
}
]
}
Gaya teks glyph titik
Seperti teks normal, glyph titik memiliki gaya teks yang mengontrol cara glyph dirender. Gaya teks ini tidak dapat diubah menggunakan Slides API secara langsung. Namun, jika Anda menggunakan UpdateTextStyleRequest untuk memperbarui paragraf lengkap yang menyertakan tanda peluru, Slides API akan memperbarui gaya teks glyph peluru agar cocok.
Gaya teks glyph peluru mengikuti hierarki pewarisan yang sedikit berbeda dengan gaya teks normal.
- Tanda peluru pada tingkat tingkatan tertentu pertama kali mewarisi dari
TextStyle
yang ditetapkan di kolomNestingLevel.bullet_style
di dalam objekList
peluru. - Selanjutnya,
NestingLevel.bullet_style
mewarisi dariNestingLevel.bullet_style
yang sesuai dalamList
placeholder induknya. - Terakhir, objek ini mencoba mewarisi dari objek placeholder induk yang tersisa.