ב-Slides API, טקסט יכול להופיע בצורות או בתאי טבלה. לפני שתוכלו לבצע פעולות בטקסט ולעצב אותו, עליכם להבין את המבנה שלו ואת אופן הפעולה של העיצוב.
בדף הזה מוסבר איך טקסט מיוצג ב-Slides API.
רצפים של רכיבי טקסט
הטקסט שמכיל צורה או תא בטבלה מורכב מרצף של מבנים מסוג TextElement. הרצף הזה מייצג את המבנה של הטקסט, לפי הסדר שבו הוא מופיע מתחילתו ועד סופו.
לדוגמה, התוכן של השקופית הזו – כולו נמצא בתיבת טקסט אחת:

בשקופית שלמעלה יש תיבה אחת של טקסט, ושדה text שלה מכיל רצף של רכיבי טקסט, כפי שמוצג בתרשים הבא:

באופן ספציפי יותר, רצף הטקסט הזה מיוצג ב-Slides API באופן הבא:
"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": {} }
}]
תוכן של TextElement
כל אלמנט טקסט מכיל תחילת אינדקס וסוף אינדקס שמתחילים באפס, שמתארים את המיקום של האלמנט בטקסט המלא של אלמנט הדף, יחד עם אחד מסוגי אובייקטי הטקסט הבאים:
| סוג הטקסט | תיאור |
|---|---|
| ParagraphMarker | רכיב הטקסט הזה מייצג את תחילת הפסקה חדשה. אינדקס ההתחלה והסיום של רכיב הטקסט מייצג את כל הטווח של הפסקה, כולל תו השורה החדשה שמסתיים בה. פסקה אף פעם לא חופפת לפסקה אחרת. פסקאות תמיד מסתיימות בתווי מעבר לשורה חדשה, כך שתמיד יש תווי מעבר לשורה חדשה בסוף תוכן הטקסט של צורה או של תא בטבלה. פסקאות יכולות להשתייך לרשימות עם תווי פסיק או לרשימות עם מספרים. אם כן, תוכן השדה ParagraphMarker.bullet יכלול מזהה רשימה. המזהה הזה מפנה לאלמנט רשימה שנמצא בתוך TextContent לצד הרצף TextElement. פסקאות באותה רשימה לוגית יפנו לאותו מזהה רשימה. |
| TextRun | רכיב הטקסט הזה מייצג מחרוזת טקסט רציפה עם אותו סגנון טקסט. רצפי טקסט אף פעם לא חוצים גבולות פסקאות: גם אם הטקסט שמסתיים בפסקה אחת זהה לסגנון של הטקסט שמתחיל בפסקה הבאה, התוכן מפוצל אחרי תו שורת חדשה כדי ליצור רצפי טקסט נפרדים. אם אתם צריכים לעבד את מחרוזת הטקסט המלאה בתוך רכיב דף, עליכם לעבור על כל רכיבי הטקסט ולצרף את המחרוזות שנמצאות בכל רצפי הטקסט. |
| AutoText | טקסט אוטומטי מתייחס למקומות בטקסט שמשתנים באופן דינמי בהתאם להקשר. ב-Slides, האות הזו משמשת לייצוג מספר השקף הנוכחי בטקסט. |
שינוי תוכן הטקסט
כשצריך לשנות טקסט באמצעות Slides API, אין צורך ליצור באופן מפורש את כל רכיבי הטקסט המתאימים. במקום זאת, תוכלו לבצע פעולות בטקסט כמו שעושים בכלי העריכה של Slides: להוסיף טקסט, למחוק טווחים ולעדכן סגנונות בטווחים. הפעולות האלה יוצרות באופן משתמע רכיבי ParagraphMarker ו-TextRun לפי הצורך כדי לשקף את השינויים.
הוספת טקסט
אפשר להוסיף טקסט לאינדקס באמצעות הבקשה InsertTextRequest בקריאה ל-batchUpdate. השדה insertionIndex של השיטה מציין איפה להוסיף את הטקסט. אפשר לחשב את האינדקס הזה באמצעות שדות האינדקס של ההתחלה והסיום בתוך רכיבי הטקסט.
להוספת טקסט יש כמה תופעות לוואי שמשקפות את ההתנהגות של עורך Slides:
- הוספת תו של שורה חדשה יוצרת באופן משתמע פסקאות חדשות, ויוצרת רכיב טקסט מסוג
ParagraphMarkerשמתחיל במדד של שורת ההתחלה ומסתיים בשורת ההתחלה הבאה. סגנון הפסקה – כולל הנקודות והפרטים של הרשימה – מועתק מהפסקה הנוכחית לפסקה החדשה. - הסגנון של התווים שנוספו נקבע באופן אוטומטי, בדרך כלל לפי סגנון הטקסט שהיה קיים במדד ההוספה. כתוצאה מכך, הטקסט בדרך כלל מוחדר ל-
TextRunהקיים באותו אינדקס. אפשר לעדכן את הסגנון הזה מאוחר יותר באמצעות בקשה מסוג UpdateTextStyle.
מחיקת טקסט
אפשר למחוק טווח טקסט באמצעות ההודעה DeleteTextRequest בקריאה ל-batchUpdate. יש כמה ניואנסים לגבי מחיקה של טקסט:
- מחיקה שמעבר לגבול של הפסקה גורמת למיזוג של שתי ההפסקות, ומוחקת את רכיב הטקסט
ParagraphMarkerשמפריד ביניהן. - הפסקה הממוזגת החדשה תשתמש בסגנון פסקה משולב, בהתאם להתנהגות בכלי העריכה של Slides.
- מחיקה שהטווח שלה כולל קטע טקסט מסירה את כל התוכן מקטע הטקסט, ומוחקת גם את קטע הטקסט עצמו.
- מחיקה שהטווח שלה כולל רכיב
AutoTextמוחקת את הרכיבAutoText.
עדכון סגנון הטקסט
המראה של הטקסט בשקף נקבע לפי מאפייני סגנון הטקסט:
- סגנונות של פסקאות, כמו הוספת הרחקה, יישור ותווי תבליטים, מוגדרים באמצעות מאפיינים של סמנים של פסקאות.
- סגנונות תווים כמו הדגשה, גופן נטוי וקו תחתון מוגדרים באמצעות מאפיינים ברצפי טקסט ספציפיים.
עדכון סגנון הדמות
אפשר לעדכן את סגנונות התווים באמצעות ההודעה UpdateTextStyleRequest בקריאה ל-batchUpdate.
כמו פעולות טקסט אחרות, סגנון התו הוחל על טווח טקסט ויוצר באופן משתמע אובייקטים חדשים של TextRun לפי הצורך.
הגדרת סגנונות של תווים מסוימים מעדכנת באופן משתמע סגנונות קשורים אחרים כך שיתואמו להתנהגות בכלי העריכה של Slides. לדוגמה, הוספת קישור משנה באופן אוטומטי את צבע החזית של הטקסט ואת מאפייני הקו התחתון. פרטים נוספים זמינים במאמר העזרה בנושא TextStyle.
עדכון סגנון הפסקה
אפשר לעדכן סגנונות של פסקאות באמצעות ההודעה UpdateParagraphStyleRequest בקריאה ל-batchUpdate.
ב-Slides API יש תמיכה ב-CreateParagraphBulletsRequest שמשקף את הפונקציונליות של הגדרות ברירת המחדל של הנקודות בעורך של Slides ליצירת רשימות עם נקודות ורשימות עם מספרים. באופן דומה, הפונקציה DeleteParagraphBulletsRequest מסירה את כל התווים של הנקודות והפסיקים בפסקה.
סגנונות שעברו בירושה
צורות מסוימות, שנקראות placeholders, יכולות לרשת סגנונות טקסט מצורות הורה אחרות. למידע נוסף על ירושה של צורות באופן כללי, אפשר לעיין במאמר placeholders.
בקטע הזה נסביר איך ירושה של סגנונות יוצרת את סגנונות הטקסט הסופיים שמוצגים בשקף.
ייצוג סגנון ב-placeholders
בקטע בנושא Placeholders מוסבר איך פועלת הירושה בין צורות הורה לצורות צאצא. תכונות נוספות בתוך מודל הירושה מטפלות בירושה של סגנונות טקסט:
- מאפייני רכיבי הטקסט של ParagraphMaker מגדירים את עיצוב הפסקה.
- מאפייני רכיבי הטקסט TextRun מגדירים את עיצוב התווים.
- התוכן של תוספי ה-placeholder של ההורה מכיל שמונה זוגות כאלה של ParagraphMarker/TextRun (כדי לתמוך בשמונה רמות של הטמעת רשימות).
- placeholder של צאצא יורש את מאפייני הטקסט שמוגדרים כברירת מחדל מרכיבי הטקסט האלה בתוכן הטקסט של ההורה.
בתרשים הבא מוצגת דרך אחת להמחיש את היחסים האלה:

ה-ParagraphMarker/TextRun הראשון בצורת ההורה קובע את רוב סגנון הטקסט שעובר בירושה. סגנון הטקסט בשבעת הזוגות הנותרים משפיע רק על הפסקים ברמות עץ עבות יותר ויותר:
| זוג רכיבי טקסט של הורה | עיצוב הצאצא שהוא שולט בו |
|---|---|
ParagraphMarkerהראשון TextRun |
סגנון הטקסט של הפסקים ברשימת רמה 0 (החיצונית ביותר) ושל כל הפסקים שאינם רשימות. |
שנייה ParagraphMarkerשנייה TextRun |
סגנון הטקסט של הרמות הנותרות (הרמות המשתלבות) של הרשימה, ברמות 1-7 |
שלישי ParagraphMarkerשלישי TextRun |
|
רביעי ParagraphMarkerרביעי TextRun |
|
חמישי ParagraphMarkerחמישי TextRun |
|
שישי ParagraphMarkerשישי TextRun |
|
שבע ParagraphMarkerשבע TextRun |
|
שמיני ParagraphMarkerשמיני TextRun |
כדי לגשת לזוגות האלה של רכיבי טקסט, משתמשים במדד הברור שלהם בשדה textElements, כפי שמוצג בקטע הקוד הבא, שבו מוצגת הגדרת ברירת המחדל (העוברת בירושה) לסגנון של קטעי טקסט ברמה 0 ולקטעי טקסט שאינם רשימות:
"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" } }, }
}
},{
...
} ]
}
שימו לב ששדה content של TextRun של צורה הורה תמיד מורכב מתווית שורה חדשה אחת.
אפשר לשנות סגנונות שעברו בירושה
אפשר לציין מאפייני עיצוב של הצורה הצאצאית ברכיבי ParagraphMarker ו-TextRun בתוכן שלה. המאפיינים שצוינו באופן מקומי יחליפו את כל המאפיינים שעברו בירושה בהיקף המקומי שלהם. ברכיבים שלא צוין בהם סגנון כלשהו, המערכת תשתמש בסגנון התואם שהוענק בירושה מהרכיב ההורה.
אם מסירים נכס סגנון מפורש מצורה של צאצא, כך שהוא לא מוגדר יותר, הוא יורש מההורה.
דוגמה
בהתאם לירושה שמוצגת בתרשים שלמעלה, נניח שלצורה ParentPlaceholder יש את תוכן הטקסט הבא:
"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"} }, ...}
}
},
...
]
}
נניח שתוכן הטקסט של הצורה ChildPlaceholder הוא:
"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": {},
...
}
}
]
}
כתוצאה מכך מתקבלות התוצאות שמתוארות בפסקה הבאה.
ירושה של סגנון לפסקה רגילה
הפסקה הראשונה של הצורה הצאצאית, שמכילה את הטקסט "This is my first paragraph", היא פסקה רגילה (לא ברשימה). אין אלמנטים בתוכן הטקסט שמציינים מאפייני סגנון, ולכן הוא יורש את כל סגנונות התווים והפסקאות מההורה שלו. כתוצאה מכך, מתקבל העיבוד הבא:
- טקסט: הטקסט שעבר עיבוד הוא "This is my first paragraph". הטקסט עצמו אף פעם לא עובר בירושה.
- התאמה: הטקסט מוצג עם התאמה
START, שעוברת בירושה מ-ParagraphMarkerהראשון של ההורה. - צבע חזית: הטקסט מוצג בצבע החזית
DARK1, שעובר בירושה מה-TextRunהראשון של ההורה.
העברת סגנון לפסקה של רשימה
הפסקה הבאה, שכוללת את הטקסט 'הפסקה הזו נמצאת ברשימה', נמצאת ברשימה עם תווי נקודה-פסיק ברמה 1 של עיטוף, כי השדה bullet של ה-ParagraphMarker התואם מוגדר לרמה הזו. כתוצאה מכך, הוא יורש את הטקסט ואת סגנון הפסקה מרמת ההטמעה 1 בהורה. התוצאה היא העיבוד הבא:
- טקסט: "הפסקה הזו נמצאת ברשימה" הוא הטקסט שעבר עיבוד. הטקסט עצמו אף פעם לא עובר בירושה.
- התאמה: הטקסט מוצג עם התאמה מסוג 'END', שעובר בירושה מה-
ParagraphMarkerהשני של ההורה. - צבע חזית: הטקסט מוצג בצבע החזית של הטקסט
LIGHT1, שעובר בירושה מה-TextRunהשני של ההורה.
אינטראקציות בין עדכון לבין ירושה של סגנונות טקסט ופסקאות
סגנונות טקסט שלא מוגדרים בצורה צאצאית יירשו ערכים מהצורה ההורה. סגנונות טקסט שמוגדרים ברכיב הצאצא 'מבטלים' את הערכים של ההורה בהיקף מקומי מסוים.
אפשר להשתמש ב-UpdateTextStyleRequest כדי לבטל את הגדרת סגנון הטקסט של צורה צאצאית, כך שלא תהיה לה יותר שינוי מקומי, וכך היא תירש את הסגנונות שלה מצורת ההורה. בנוסף, עדכון סגנון הטקסט של הצאצא כך שיתאים לערך שהתקבל בירושה מההורה מבטל באופן משתמע את ההגדרה של הסגנון, כך שהוא ישתמש בערך שהתקבל בירושה.
הדבר לא משפיע על המראה החזותי של הטקסט מיד אחרי העדכון, אבל יכול להיות שזה ישנה אם תעדכנו מאוחר יותר את הסגנון של הפסקה או הטקסט במקום ה-placeholder הראשי. התנהגות הירושה הזו תואמת להתנהגות של עורך Slides, כך שתוכלו להתנסות בתוצאות של שינויים בסגנון לפני שתעבדו עם ה-API.
דוגמה
כדאי להביא בחשבון את ההגדרות של ChildPlaceholder ו-ParentPlaceholder בדוגמה הקודמת.
עכשיו נניח ששלחתם את ה-UpdateTextStyleRequest הזה:
{ "updateTextStyle": {
"objectId": "ChildPlaceholder",
"style": {"foregroundColor": {"opaqueColor": {"themeColor": "DARK1"} }, },
"textRange": { "type": "ALL" },
"fields": "foregroundColor"
}
}
הבקשה הזו מנסה להגדיר את foregroundColor של DARK1 לכל הטקסט של ChildPlaceholder, באמצעות מסכת שדה כדי לציין שרק צבע החזית של הרכיב צריך להשתנות. הבקשה הזו יכולה להוביל לאחת מהתוצאות הבאות:
- הפסקה הראשונה: הערך החדש של
foregroundColorתואם לערך שעובר בירושה שלforegroundColor, ולכן הסגנון הזה לא השתנה ועדיין עובר בירושה. - הפסקה השנייה: הערך החדש של
foregroundColorלא תואם לערך שעובר בירושה שלforegroundColor, ולכן צבע החזית של הפסקה השנייה מתעדכן לערךDARK1.
תוכן הטקסט של ChildPlaceholder הוא עכשיו:
"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"} }, },
...
}
}
]
}
סגנון טקסט של תבליט
כמו טקסט רגיל, לסמלי נקודה יש סגנון טקסט שקובע את אופן העיבוד של הסמל. אי אפשר לשנות את סגנונות הטקסט האלה ישירות באמצעות Slides API. עם זאת, אם משתמשים ב-UpdateTextStyleRequest כדי לעדכן פסקה מלאה שכוללת סמליל של נקודה, ה-Slides API מעדכן את סגנון הטקסט של סמליל הנקודה בהתאם.
סגנונות טקסט של סמלי כוכב פונקציונליים פועלים לפי היררכיית ירושה שונה במקצת מזו של סגנונות טקסט רגילים.
- נקודה ברשימה ברמת עיטוף מסוימת יורשת קודם מהקבוצה
TextStyleשמופיעה בשדהNestingLevel.bullet_styleבתוך האובייקטListשל הנקודה. - לאחר מכן הוא יורש את
NestingLevel.bullet_styleהתואם ב-Listשל placeholder ההורה שלו. - לבסוף, הוא מנסה לרשת מאובייקטים אחרים של placeholder של הורה.