Files
wehub-resource-sync 8cb1f9f479
Publish SDK (PyPI) / publish (push) Has been cancelled
Publish SDK (npm) / publish (@aionui/officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (windows-latest) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/officecli-sdk) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/sdk) (push) Has been cancelled
Publish SDK (npm) / publish (officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (macos-latest) (push) Has been cancelled
SDK smoke / smoke (ubuntu-latest) (push) Has been cancelled
Skill parity / diff (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:09:29 +08:00

412 lines
18 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"$schema": "../_schema.json",
"format": "pptx",
"element": "cell",
"elementAliases": ["tc"],
"parent": "row",
"operations": {
"add": true,
"set": true,
"get": true,
"query": true,
"remove": true
},
"paths": {
"positional": [
"/slide[N]/table[M]/tr[R]/tc[C]"
]
},
"note": "Appending a cell to a row is unusual — normally cells are seeded at row-Add time. This op exists for completeness; pptx tables are strictly rectangular, so a standalone Add cell only succeeds when the row currently has fewer cells than the table grid (an OOXML-illegal state).",
"extends": "_shared/table-cell",
"properties": {
"text": {
"type": "string",
"description": "single-run text content. pptx-only override: prefer set tc[C] for cell text in pptx; standalone Add cell rarely has room to land within a rectangular table grid. Set + Get unchanged.",
"add": false, "set": true, "get": true,
"examples": ["--prop text=\"Hello\""],
"readback": "string concatenated from all <a:r>/<a:t> in the cell paragraphs",
"enforcement": "strict"
},
"colspan": {
"type": "number",
"description": "horizontal cell span (a:tc @gridSpan) — number of grid columns this cell spans (>=2 means merged across). Setting colspan=N also stamps hMerge=true on the next (N-1) cells in the same row, matching the convenience prop merge.right. Surfaces on Get only when the cell spans more than one column. Canonical name matches docx; alias: gridspan.",
"add": false, "set": true, "get": true,
"aliases": ["gridspan"],
"readback": "integer ≥ 2",
"examples": ["--prop colspan=3"],
"enforcement": "report"
},
"rowspan": {
"type": "number",
"description": "vertical cell span (a:tc @rowSpan). Settable: rowspan=N writes rowSpan=N on this anchor cell and vMerge=true on the (N-1) continuation cells directly below. Surfaces on Get only when the cell spans more than one row.",
"add": false, "set": true, "get": true,
"examples": ["--prop rowspan=2"],
"readback": "integer ≥ 2",
"enforcement": "report"
},
"padding.left": {
"type": "string",
"description": "left cell padding (a:tcPr @marL). Read-only readback; emitted as a unit-qualified length (cm/in/pt).",
"add": false, "set": false, "get": true,
"readback": "unit-qualified length, e.g. '0.25cm'",
"enforcement": "report"
},
"padding.right": {
"type": "string",
"description": "right cell padding (a:tcPr @marR). Read-only readback; emitted as a unit-qualified length.",
"add": false, "set": false, "get": true,
"readback": "unit-qualified length, e.g. '0.25cm'",
"enforcement": "report"
},
"padding.top": {
"type": "string",
"description": "top cell padding (a:tcPr @marT). Read-only readback; emitted as a unit-qualified length.",
"add": false, "set": false, "get": true,
"readback": "unit-qualified length, e.g. '0.13cm'",
"enforcement": "report"
},
"padding.bottom": {
"type": "string",
"description": "bottom cell padding (a:tcPr @marB). Read-only readback; emitted as a unit-qualified length.",
"add": false, "set": true, "get": true,
"aliases": ["margin.bottom"],
"examples": ["--prop padding.bottom=0.25cm"],
"readback": "unit-qualified length, e.g. '0.13cm'",
"enforcement": "report"
},
"padding": {
"type": "string",
"description": "shorthand to set all four cell paddings at once (a:tcPr @marL/@marR/@marT/@marB). Accepts a unit-qualified length applied to every edge.",
"aliases": ["margin"],
"add": false, "set": true, "get": false,
"examples": ["--prop padding=0.2cm"],
"enforcement": "report"
},
"valign": {
"type": "string",
"description": "vertical text anchor (a:tcPr @anchor). top|center|bottom.",
"add": true, "set": true, "get": true,
"examples": ["--prop valign=center"],
"readback": "top|center|bottom",
"enforcement": "report"
},
"wrap": {
"type": "bool",
"description": "cell text wrap (a:txBody/a:bodyPr @wrap). true=square (wrap), false=none (clip to cell). Set on the cell's body properties.",
"aliases": ["wordwrap"],
"add": false, "set": true, "get": true,
"examples": ["--prop wrap=false"],
"readback": "true|false",
"enforcement": "report"
},
"textdirection": {
"type": "string",
"description": "cell text rotation (a:tcPr @vert). horizontal|vertical90|vertical270|stacked. Round-trips through the same canonical vocabulary.",
"aliases": ["textdir", "vert"],
"add": false, "set": true, "get": true,
"examples": [
"--prop textdirection=vertical270",
"--prop textdirection=stacked"
],
"readback": "horizontal|vertical90|vertical270|stacked",
"enforcement": "report"
},
"direction": {
"type": "string",
"description": "first-paragraph reading direction (a:pPr @rtl). ltr|rtl. Fans out to every paragraph in the cell's text body; readback reflects the first paragraph only.",
"aliases": ["dir", "rtl"],
"add": false, "set": true, "get": true,
"examples": ["--prop direction=rtl"],
"readback": "ltr|rtl",
"enforcement": "report"
},
"merge.right": {
"type": "number",
"description": "convenience for horizontal merge — merges N neighbor cells to the right into this one, so the total span becomes N+1 (writes gridSpan=N+1 on this cell and hMerge=true on the next N cells in the same row).",
"add": false, "set": true, "get": false,
"examples": ["--prop merge.right=2"],
"enforcement": "report"
},
"merge.down": {
"type": "number",
"description": "convenience for vertical merge — stamps rowSpan=N on this cell and vMerge=true on the same column in the next N-1 rows.",
"add": false, "set": true, "get": false,
"examples": ["--prop merge.down=2"],
"enforcement": "report"
},
"bevel": {
"type": "string",
"description": "3-D cell bevel (a:tcPr/a:cell3D). 'none' to clear, or a preset name (circle, slope, cross, angle, softRound, convex, coolSlant, divot, riblet, hardEdge, artDeco, …). Optional 'NAME;Wpt;Hpt' to set width/height.",
"aliases": ["cell3d"],
"add": false, "set": true, "get": false,
"examples": ["--prop bevel=circle", "--prop bevel=\"circle;6pt;6pt\""],
"enforcement": "report"
},
"opacity": {
"type": "number",
"description": "fill alpha as a 01 fraction or 0100 percent (post-applied to the cell's solid/gradient fill).",
"aliases": ["fill.opacity", "alpha", "fill.alpha"],
"add": false, "set": true, "get": false,
"examples": ["--prop opacity=0.5", "--prop opacity=50%"],
"enforcement": "report"
},
"image": {
"type": "string",
"description": "embed an image file as the cell's blip fill (a:tcPr/a:blipFill). Path to a local image; relationship is added to the slide. Replaces any prior fill.",
"aliases": ["imagefill"],
"add": false, "set": true, "get": false,
"examples": ["--prop image=logo.png"],
"enforcement": "report"
},
"linespacing": {
"type": "string",
"description": "line spacing applied to every paragraph in the cell. Accepts multiplier ('1.5x', '150%') or fixed points ('18pt').",
"add": false, "set": true, "get": true,
"examples": ["--prop linespacing=1.5x", "--prop linespacing=18pt"],
"readback": "multiplier (e.g. '1.5x') or unit-qualified length (e.g. '18pt')",
"enforcement": "report"
},
"spacebefore": {
"type": "string",
"description": "space before every paragraph in the cell. Unit-qualified length ('12pt', '0.5cm').",
"add": false, "set": true, "get": true,
"examples": ["--prop spacebefore=6pt"],
"readback": "unit-qualified length",
"enforcement": "report"
},
"spaceafter": {
"type": "string",
"description": "space after every paragraph in the cell. Unit-qualified length ('12pt', '0.5cm').",
"add": false, "set": true, "get": true,
"examples": ["--prop spaceafter=6pt"],
"readback": "unit-qualified length",
"enforcement": "report"
},
"align": {
"type": "string",
"description": "first-paragraph horizontal alignment applied to every paragraph in the cell (a:pPr @algn). left|center|right|justify. Readback reflects the first paragraph only.",
"aliases": ["alignment", "halign"],
"add": false, "set": true, "get": true,
"examples": ["--prop align=center"],
"readback": "left|center|right|justify",
"enforcement": "report"
},
"font": {
"type": "string",
"description": "Latin (and East Asian fallback) font typeface for every run in the cell. Fans out to a:rPr/a:latin + a:ea on every existing run.",
"aliases": ["font.name", "font.latin"],
"add": false, "set": true, "get": true,
"examples": ["--prop font=Calibri"],
"readback": "typeface name",
"enforcement": "report"
},
"size": {
"type": "string",
"description": "font size for every run in the cell (a:rPr @sz). Unit-qualified ('14pt') or bare number (points).",
"aliases": ["font.size", "fontsize"],
"add": false, "set": true, "get": true,
"examples": ["--prop size=14pt", "--prop size=10.5"],
"readback": "unit-qualified length, e.g. '14pt'",
"enforcement": "report"
},
"bold": {
"type": "bool",
"description": "bold for every run in the cell (a:rPr @b).",
"aliases": ["font.bold"],
"add": false, "set": true, "get": true,
"examples": ["--prop bold=true"],
"readback": "true|false",
"enforcement": "report"
},
"italic": {
"type": "bool",
"description": "italic for every run in the cell (a:rPr @i).",
"aliases": ["font.italic"],
"add": false, "set": true, "get": true,
"examples": ["--prop italic=true"],
"readback": "true|false",
"enforcement": "report"
},
"underline": {
"type": "string",
"description": "underline style for every run in the cell (a:rPr @u). single|double|none or any OOXML underline value.",
"aliases": ["font.underline"],
"add": false, "set": true, "get": true,
"examples": ["--prop underline=single", "--prop underline=double"],
"readback": "single|double|… (OOXML token)",
"enforcement": "report"
},
"strike": {
"type": "string",
"description": "strikethrough for every run in the cell (a:rPr @strike). single|double|none.",
"aliases": ["strikethrough", "font.strike", "font.strikethrough"],
"add": false, "set": true, "get": true,
"examples": ["--prop strike=single"],
"readback": "single|double|none",
"enforcement": "report"
},
"color": {
"type": "color",
"description": "font color for every run in the cell (a:rPr/a:solidFill).",
"aliases": ["font.color"],
"add": false, "set": true, "get": true,
"examples": ["--prop color=FF0000", "--prop color=red"],
"readback": "#RRGGBB uppercase or scheme color name",
"enforcement": "report"
},
"fill": {
"type": "color",
"description": "cell background fill. Accepts a solid color (hex, named, rgb(...)), scheme color name (accent1accent6, dk1, dk2, lt1, lt2, hyperlink), 'none' for explicit no-fill, or a gradient string 'COLOR1-COLOR2[-ANGLE]' (e.g. 'FF0000-0000FF-90'). Stored as a:solidFill/a:noFill/a:gradFill on a:tcPr.",
"aliases": [
"background",
"shd",
"shading"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop fill=FFFF00",
"--prop fill=#FF0000",
"--prop fill=red",
"--prop background=accent1",
"--prop fill=none",
"--prop fill=\"FF0000-0000FF-90\""
],
"readback": "#RRGGBB uppercase, 'gradient' (with separate 'gradient' key), or 'image' for picture fill",
"enforcement": "report"
},
"baseline": {
"type": "number",
"add": false,
"set": false,
"get": true,
"description": "first run baseline offset for the cell text (percent units; positive=raised).",
"readback": "percent (e.g. 30)",
"enforcement": "report"
},
"hmerge": {
"type": "bool",
"add": false,
"set": false,
"get": true,
"description": "true on cells continued from a horizontal merge anchor (CT_TableCell @hMerge).",
"readback": "true on continuation cells",
"enforcement": "report"
},
"vmerge": {
"type": "bool",
"add": false,
"set": false,
"get": true,
"description": "true on cells continued from a vertical merge anchor (CT_TableCell @vMerge). Surfaced by Query for table cells.",
"readback": "true on continuation cells",
"enforcement": "report"
},
"image.relId": {
"type": "string",
"add": false,
"set": false,
"get": true,
"description": "relationship id of an embedded image used as the cell's blip fill.",
"readback": "relationship id token",
"enforcement": "report"
},
"border.all": {
"type": "string",
"description": "all four cell edges. Format: 'WIDTH[ DASH][ COLOR]' (e.g. '1pt solid FF0000') or 'STYLE;WIDTH;COLOR[;DASH]' (style ignored — kept for docx parity). DASH ∈ solid|dot|dash|lgDash|dashDot|sysDot|sysDash. Use 'none' to clear. Alias: border. Stored as a:lnL/lnR/lnT/lnB on a:tcPr. Cross-format note: docx only accepts the semicolon form 'STYLE;SIZE;COLOR' — pptx is more lenient.",
"aliases": [
"border"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop border.all=\"1pt solid FF0000\"",
"--prop border=none",
"--prop border.all=\"single;4;FF0000\""
],
"enforcement": "report",
"readback": "edge descriptor 'WIDTH DASH #COLOR' (e.g. '2pt solid #FF0000')"
},
"border.bottom": {
"type": "string",
"description": "bottom border. Format: STYLE[;SIZE[;COLOR[;SPACE]]]. Cross-format note: pptx accepts a space-separated 'WIDTH DASH COLOR' form; docx only accepts the semicolon form 'STYLE;SIZE;COLOR' (SIZE is in 1/8 pt units).",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop border.bottom=\"1pt solid 808080\"",
"--prop border.bottom=\"double;6;0000FF\""
],
"enforcement": "report",
"readback": "edge descriptor 'WIDTH DASH #COLOR' (e.g. '2pt solid #FF0000')"
},
"border.left": {
"type": "string",
"description": "left border. Format: STYLE[;SIZE[;COLOR[;SPACE]]]. Cross-format note: pptx accepts a space-separated 'WIDTH DASH COLOR' form; docx only accepts the semicolon form 'STYLE;SIZE;COLOR' (SIZE is in 1/8 pt units).",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop border.left=\"1pt solid 808080\"",
"--prop border.left=\"single;4\""
],
"enforcement": "report",
"readback": "edge descriptor 'WIDTH DASH #COLOR' (e.g. '2pt solid #FF0000')"
},
"border.right": {
"type": "string",
"description": "right border. Format: STYLE[;SIZE[;COLOR[;SPACE]]]. Cross-format note: pptx accepts a space-separated 'WIDTH DASH COLOR' form; docx only accepts the semicolon form 'STYLE;SIZE;COLOR' (SIZE is in 1/8 pt units).",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop border.right=\"1pt solid 808080\"",
"--prop border.right=\"single;4\""
],
"enforcement": "report",
"readback": "edge descriptor 'WIDTH DASH #COLOR' (e.g. '2pt solid #FF0000')"
},
"border.tl2br": {
"type": "string",
"description": "diagonal from top-left to bottom-right (a:lnTlToBr). Format same as border.all. Cross-format note: docx only accepts the semicolon form 'STYLE;SIZE;COLOR' — pptx is more lenient. Get returns sub-keys border.tl2br.color, border.tl2br.width, border.tl2br.dash, and a summary border.tl2br key.",
"add": true,
"set": true,
"get": true,
"examples": [
"--prop border.tl2br=\"1pt solid FF0000\"",
"--prop border.tl2br=\"single;4;FF0000\""
],
"enforcement": "report",
"readback": "summary 'WIDTH DASH #COLOR' plus border.tl2br.color/.width/.dash sub-keys"
},
"border.top": {
"type": "string",
"description": "top border. Format: STYLE[;SIZE[;COLOR[;SPACE]]]. Cross-format note: pptx accepts a space-separated 'WIDTH DASH COLOR' form; docx only accepts the semicolon form 'STYLE;SIZE;COLOR' (SIZE is in 1/8 pt units).",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop border.top=\"2pt solid 000000\"",
"--prop border.top=\"single;4;000000\""
],
"enforcement": "report",
"readback": "edge descriptor 'WIDTH DASH #COLOR' (e.g. '2pt solid #FF0000')"
},
"border.tr2bl": {
"type": "string",
"description": "diagonal from top-right to bottom-left (a:lnBlToTr). Format same as border.all. Cross-format note: docx only accepts the semicolon form 'STYLE;SIZE;COLOR' — pptx is more lenient. Get returns sub-keys border.tr2bl.color, border.tr2bl.width, border.tr2bl.dash, and a summary border.tr2bl key.",
"add": true,
"set": true,
"get": true,
"examples": [
"--prop border.tr2bl=\"1pt solid FF0000\"",
"--prop border.tr2bl=\"single;4;FF0000\""
],
"enforcement": "report",
"readback": "summary 'WIDTH DASH #COLOR' plus border.tr2bl.color/.width/.dash sub-keys"
}
}
}