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

1406 lines
43 KiB
JSON

{
"$schema": "../_schema.json",
"format": "docx",
"element": "paragraph",
"elementAliases": [
"p"
],
"operations": {
"add": true,
"set": true,
"get": true,
"query": true,
"remove": true
},
"paths": {
"stable": [
"/body/p[@paraId=ID]"
],
"positional": [
"/body/p[N]"
]
},
"note": "Get returns canonical keys: spaceBefore/spaceAfter/lineSpacing/align (legacy aliases spacebefore/linespacing/halign still accepted on Add/Set). effective.* keys are read-only values resolved through paragraph style → docDefaults from the first run; each carries an effective.X.src pointer to the writing layer (e.g. /styles/Heading1). Suppressed when the paragraph (or first run) sets the direct value.",
"children": [
{
"element": "run",
"pathSegment": "r",
"cardinality": "0..n"
}
],
"extends": "_shared/paragraph",
"properties": {
"lineRule": {
"type": "enum",
"description": "line spacing rule paired with lineSpacing (Word-only: w:spacing@w:lineRule). 'auto' = multiplier (default for 1.5x/150%), 'exact' = exact fixed height (default for Npt), 'atLeast' = minimum height (Npt floor; lines may grow to fit tall content).",
"values": [
"auto",
"exact",
"atLeast"
],
"aliases": [
"linerule"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop lineSpacing=14pt --prop lineRule=atLeast"
],
"readback": "auto | exact | atLeast",
"enforcement": "report"
},
"align": {
"type": "enum",
"values": [
"left",
"center",
"right",
"justify",
"both",
"distribute"
],
"aliases": [
"alignment",
"halign"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop align=center"
],
"readback": "one of values",
"enforcement": "strict"
},
"style": {
"type": "string",
"description": "paragraph styleId (e.g. Heading1, Normal, Quote). Must reference an existing style or one of the built-in style aliases. Aliases mirror the canonical readback keys exposed by Get: styleId targets the OOXML styleId; styleName resolves the display name through the styles part (lenient, falls back to verbatim if no match).",
"aliases": [
"styleId",
"styleid",
"styleName",
"stylename"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop style=Heading1",
"--prop styleId=Heading1",
"--prop styleName=\"Heading 1\""
],
"readback": "styleId as stored on the paragraph",
"enforcement": "strict"
},
"spaceBefore": {
"type": "length",
"aliases": [
"spacebefore"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop spaceBefore=12pt"
],
"readback": "unit-qualified, e.g. \"12pt\"",
"enforcement": "strict"
},
"spaceAfter": {
"type": "length",
"aliases": [
"spaceafter"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop spaceAfter=6pt"
],
"readback": "unit-qualified, e.g. \"6pt\"",
"enforcement": "strict"
},
"spaceBeforeAuto": {
"type": "boolean",
"aliases": [
"beforeAutospacing"
],
"add": true,
"set": true,
"get": true,
"description": "w:spacing @beforeAutospacing — Word's 'automatic spacing between paragraphs of the same style' toggle for the space BEFORE the paragraph. Surfaced on get only when present.",
"examples": [
"--prop spaceBeforeAuto=true"
],
"readback": "true|false",
"enforcement": "report"
},
"spaceAfterAuto": {
"type": "boolean",
"aliases": [
"afterAutospacing"
],
"add": true,
"set": true,
"get": true,
"description": "w:spacing @afterAutospacing — automatic spacing toggle for the space AFTER the paragraph. See spaceBeforeAuto.",
"examples": [
"--prop spaceAfterAuto=true"
],
"readback": "true|false",
"enforcement": "report"
},
"listStyle": {
"type": "enum",
"values": [
"bullet",
"ordered",
"none"
],
"description": "high-level list type. 'bullet' (aliases: unordered, ul) creates a bulleted list; 'ordered' (or any other non-bullet value, e.g. 'decimal') creates a numbered list; 'none'/'remove'/'clear' strips list formatting. Preferred over raw numId. Continues the IMMEDIATELY preceding list of the same type automatically; an intervening non-list paragraph (or a list of the other type) starts a fresh list at 1. To continue numbering across such an interruption, pass an explicit 'numId' referencing the earlier list's instance; pass 'start' to force a restart.",
"aliases": [
"liststyle"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop listStyle=bullet --prop text=\"item\"",
"--prop listStyle=ordered --prop text=\"step 1\""
],
"readback": "'bullet' or 'ordered' (normalized from the numbering format)",
"enforcement": "strict"
},
"numId": {
"type": "int",
"description": "numbering definition id (w:numId). Low-level entry point — prefer 'listStyle' unless you specifically need to reference an existing numbering instance. Requires the numId to already exist in /numbering (create via `add /numbering --type num` first).",
"aliases": [
"numid"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop numId=1"
],
"readback": "numbering id as stored on the paragraph",
"enforcement": "report"
},
"numLevel": {
"type": "int",
"description": "list indent level (w:ilvl), 0..8. Requires numId or listStyle to be effective; Get only surfaces numLevel when numId is present on the paragraph.",
"aliases": [
"numlevel",
"ilvl",
"listLevel",
"listlevel",
"level"
],
"requires": [
"numId"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop numLevel=1 --prop numId=1",
"--prop ilvl=1 --prop numId=1"
],
"readback": "integer level as stored on the paragraph (only when numId is set)",
"enforcement": "report"
},
"start": {
"type": "int",
"description": "starting number for an ordered list (w:start / w:startOverride on level 0 of the numbering definition). Only meaningful together with liststyle=ordered or an existing numid. NOTE: this applies to the whole numbering instance shared by the paragraph, so setting it on one item of a multi-item list renumbers the entire list (every paragraph that shares the numId), not just that item onward. To restart numbering for a sub-range mid-list, give those paragraphs a fresh numId instead. Readback not implemented — w:start lives in the separate numbering part and cross-part traversal is fragile; query the numbering directly if you need it.",
"add": true,
"set": true,
"get": false,
"examples": [
"--prop liststyle=ordered --prop start=5 --prop text=\"item\""
],
"readback": "n/a (write-only via paragraph; query numbering part)",
"enforcement": "report"
},
"bold": {
"type": "bool",
"description": "run-level bold. On Add, applied to the implicit run created by 'text'. On Set, applied to all runs in the paragraph and to the paragraph-mark run properties so subsequent runs inherit.",
"add": true,
"set": true,
"get": true,
"examples": [
"--prop bold=true --prop text=\"Hi\""
],
"enforcement": "strict"
},
"italic": {
"type": "bool",
"description": "run-level italic. Same scope as 'bold'.",
"add": true,
"set": true,
"get": true,
"examples": [
"--prop italic=true --prop text=\"Hi\""
],
"enforcement": "strict"
},
"font": {
"type": "string",
"description": "run-level font family (applied to Ascii/HighAnsi/EastAsia). On Add, applied to the implicit run created by 'text'. On Set, applied to all runs in the paragraph.",
"add": true,
"set": true,
"get": false,
"examples": [
"--prop font=\"Times New Roman\" --prop text=\"Hi\""
],
"enforcement": "strict"
},
"size": {
"type": "font-size",
"description": "run-level font size. Accepts bare number (pt), '14pt', '10.5pt'.",
"aliases": [
"fontsize"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop size=14 --prop text=\"Hi\"",
"--prop size=10.5pt --prop text=\"Hi\""
],
"enforcement": "strict"
},
"color": {
"type": "color",
"description": "run-level text color. Accepts #RRGGBB, RRGGBB, named colors (e.g. red), rgb(r,g,b).",
"add": true,
"set": true,
"get": true,
"examples": [
"--prop color=red --prop text=\"Hi\"",
"--prop color=#FF0000 --prop text=\"Hi\""
],
"enforcement": "strict"
},
"underline": {
"type": "string",
"description": "run-level underline. Accepts 'true'/'false' or an underline style (single, double, thick, dotted, dash, wavy, etc.).",
"add": true,
"set": true,
"get": true,
"examples": [
"--prop underline=true --prop text=\"Hi\"",
"--prop underline=double --prop text=\"Hi\""
],
"enforcement": "strict"
},
"underline.color": {
"type": "color",
"description": "underline stroke color, written to w:u/@w:color. Preserved when 'underline' style is toggled.",
"aliases": [
"underlineColor",
"underlinecolor",
"font.underline.color"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop underline=single --prop underline.color=#FF0000"
],
"enforcement": "strict"
},
"strike": {
"type": "bool",
"description": "run-level single strikethrough.",
"aliases": [
"strikethrough"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop strike=true --prop text=\"Hi\""
],
"enforcement": "strict"
},
"highlight": {
"type": "string",
"description": "run-level highlight color (w:highlight values: yellow, green, cyan, magenta, blue, red, darkBlue, darkCyan, darkGreen, darkMagenta, darkRed, darkYellow, darkGray, lightGray, black, white, none).",
"add": true,
"set": true,
"get": true,
"examples": [
"--prop highlight=yellow --prop text=\"Hi\""
],
"enforcement": "strict"
},
"caps": {
"type": "bool",
"description": "run-level all caps. On Add only (no paragraph-level Set wrapper).",
"aliases": [
"allCaps"
],
"add": true,
"set": false,
"get": false,
"examples": [
"--prop caps=true --prop text=\"Hi\""
],
"enforcement": "strict"
},
"smallcaps": {
"type": "bool",
"description": "run-level small caps. On Add only.",
"aliases": [
"smallCaps"
],
"add": true,
"set": false,
"get": false,
"examples": [
"--prop smallcaps=true --prop text=\"Hi\""
],
"enforcement": "strict"
},
"dstrike": {
"type": "bool",
"description": "run-level double strikethrough. On Add only.",
"add": true,
"set": false,
"get": false,
"examples": [
"--prop dstrike=true --prop text=\"Hi\""
],
"enforcement": "strict"
},
"vanish": {
"type": "bool",
"description": "run-level hidden text. On Add only.",
"add": true,
"set": false,
"get": false,
"examples": [
"--prop vanish=true --prop text=\"Hi\""
],
"enforcement": "strict"
},
"outline": {
"type": "bool",
"description": "run-level outline text effect. On Add only.",
"add": true,
"set": false,
"get": false,
"examples": [
"--prop outline=true --prop text=\"Hi\""
],
"enforcement": "strict"
},
"shadow": {
"type": "bool",
"description": "run-level shadow text effect. On Add only.",
"add": true,
"set": false,
"get": false,
"examples": [
"--prop shadow=true --prop text=\"Hi\""
],
"enforcement": "strict"
},
"emboss": {
"type": "bool",
"description": "run-level emboss text effect. On Add only.",
"add": true,
"set": false,
"get": false,
"examples": [
"--prop emboss=true --prop text=\"Hi\""
],
"enforcement": "strict"
},
"imprint": {
"type": "bool",
"description": "run-level imprint (engrave) text effect. On Add only.",
"add": true,
"set": false,
"get": false,
"examples": [
"--prop imprint=true --prop text=\"Hi\""
],
"enforcement": "strict"
},
"noproof": {
"type": "bool",
"description": "run-level no-proofing flag. On Add only.",
"add": true,
"set": false,
"get": false,
"examples": [
"--prop noproof=true --prop text=\"Hi\""
],
"enforcement": "strict"
},
"superscript": {
"type": "bool",
"description": "run-level superscript vertical alignment. On Add only (use vertAlign for Set).",
"add": true,
"set": false,
"get": false,
"examples": [
"--prop superscript=true --prop text=\"x^2\""
],
"enforcement": "strict"
},
"subscript": {
"type": "bool",
"description": "run-level subscript vertical alignment. On Add only (use vertAlign for Set).",
"add": true,
"set": false,
"get": false,
"examples": [
"--prop subscript=true --prop text=\"H2O\""
],
"enforcement": "strict"
},
"vertAlign": {
"type": "enum",
"values": [
"superscript",
"subscript",
"baseline",
"super",
"sub"
],
"description": "run-level vertical text alignment. On Add only.",
"aliases": [
"vertalign"
],
"add": true,
"set": false,
"get": false,
"examples": [
"--prop vertAlign=superscript --prop text=\"x^2\""
],
"enforcement": "strict"
},
"charSpacing": {
"type": "length",
"description": "run-level character spacing in points (bare number = pt, or 'Xpt'). Stored as twips. On Add only.",
"aliases": [
"charspacing",
"letterspacing",
"letterSpacing"
],
"add": true,
"set": false,
"get": false,
"examples": [
"--prop charSpacing=2 --prop text=\"Hi\""
],
"enforcement": "strict"
},
"rtl": {
"type": "bool",
"description": "run-level right-to-left text flag. On Add only.",
"add": true,
"set": false,
"get": false,
"examples": [
"--prop rtl=true --prop text=\"Hi\""
],
"enforcement": "strict"
},
"direction": {
"type": "enum",
"values": [
"ltr",
"rtl"
],
"description": "paragraph reading direction. 'rtl' writes <w:bidi/> on pPr, <w:rtl/> on the paragraph mark, and <w:rtl/> on every run (so Arabic / Hebrew character order reverses inside runs, not just page-side layout). 'ltr' clears all three.",
"aliases": [
"dir",
"bidi"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop direction=rtl"
],
"readback": "rtl | ltr (only emitted when explicitly set)",
"enforcement": "strict"
},
"font.cs": {
"type": "string",
"description": "Complex-script font slot (rFonts/cs) — Arabic / Hebrew / Thai typefaces.",
"aliases": [
"font.complexscript",
"font.complex"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop font.cs=\"Arabic Typesetting\""
],
"enforcement": "report"
},
"font.ea": {
"type": "string",
"description": "East-Asian font slot (rFonts/eastAsia) — Chinese / Japanese / Korean typefaces.",
"aliases": [
"font.eastasia",
"font.eastasian"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop font.ea=\"メイリオ\""
],
"enforcement": "report"
},
"font.latin": {
"type": "string",
"description": "Latin font slots (rFonts/ascii + hAnsi) — ASCII / Western text.",
"add": true,
"set": true,
"get": true,
"examples": [
"--prop font.latin=Calibri"
],
"enforcement": "report"
},
"font.asciiTheme": {
"type": "string",
"description": "Theme font binding for the ascii slot (rFonts/asciiTheme). Values: minorHAnsi, majorHAnsi, minorEastAsia, majorEastAsia, minorBidi, majorBidi.",
"add": true,
"set": true,
"get": true,
"examples": [
"--prop font.asciiTheme=minorHAnsi"
],
"enforcement": "report"
},
"font.hAnsiTheme": {
"type": "string",
"description": "Theme font binding for the hAnsi slot (rFonts/hAnsiTheme).",
"add": true,
"set": true,
"get": true,
"examples": [
"--prop font.hAnsiTheme=minorHAnsi"
],
"enforcement": "report"
},
"font.eaTheme": {
"type": "string",
"description": "Theme font binding for the East-Asia slot (rFonts/eastAsiaTheme). Values: minorEastAsia, majorEastAsia.",
"aliases": [
"font.eastAsiaTheme"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop font.eaTheme=minorEastAsia"
],
"enforcement": "report"
},
"font.csTheme": {
"type": "string",
"description": "Theme font binding for the complex-script slot (rFonts/cstheme). Values: minorBidi, majorBidi.",
"add": true,
"set": true,
"get": true,
"examples": [
"--prop font.csTheme=minorBidi"
],
"enforcement": "report"
},
"bold.cs": {
"type": "bool",
"description": "complex-script bold for the paragraph's runs (<w:bCs/>). Required for Arabic / Hebrew bold rendering.",
"aliases": [
"font.bold.cs",
"boldcs"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop bold.cs=true"
],
"readback": "true | false",
"enforcement": "strict"
},
"italic.cs": {
"type": "bool",
"description": "complex-script italic (<w:iCs/>) for the paragraph's runs.",
"aliases": [
"font.italic.cs",
"italiccs"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop italic.cs=true"
],
"readback": "true | false",
"enforcement": "strict"
},
"size.cs": {
"type": "font-size",
"description": "complex-script font size (<w:szCs/>) for the paragraph's runs.",
"aliases": [
"font.size.cs",
"sizecs"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop size.cs=14pt"
],
"readback": "unit-qualified, e.g. \"14pt\"",
"enforcement": "strict"
},
"shd": {
"type": "string",
"description": "shading. Format: 'fill' or 'val;fill' or 'val;fill;color'. Applied at paragraph level on Add (pPr/shd).",
"aliases": [
"shading"
],
"add": true,
"set": true,
"get": false,
"examples": [
"--prop shd=FFFF00",
"--prop shd=clear;FFFF00"
],
"enforcement": "report"
},
"firstLineIndent": {
"type": "length",
"description": "first-line indent. Routed through SpacingConverter.",
"aliases": [
"firstlineindent"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop firstLineIndent=2cm"
],
"enforcement": "report"
},
"rightIndent": {
"type": "length",
"description": "right indentation. Routed through SpacingConverter.",
"aliases": [
"rightindent",
"indentright"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop rightIndent=1cm"
],
"enforcement": "report"
},
"hangingIndent": {
"type": "length",
"description": "hanging indent (pairs with left indent). Routed through SpacingConverter.",
"aliases": [
"hangingindent",
"hanging"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop hangingIndent=0.5cm"
],
"readback": "unit-qualified length (e.g. \"28.35pt\")",
"enforcement": "report"
},
"keepNext": {
"type": "bool",
"description": "keep paragraph with the next paragraph (no page break between).",
"aliases": [
"keepnext"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop keepNext=true"
],
"enforcement": "report"
},
"keepLines": {
"type": "bool",
"description": "keep all lines of the paragraph together (no page break within).",
"aliases": [
"keeplines",
"keeptogether",
"keepTogether"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop keepLines=true"
],
"enforcement": "report"
},
"pageBreakBefore": {
"type": "bool",
"description": "force a page break before this paragraph.",
"aliases": [
"pagebreakbefore",
"break"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop pageBreakBefore=true",
"--prop break=newPage"
],
"enforcement": "report"
},
"widowControl": {
"type": "bool",
"description": "widow/orphan control.",
"aliases": [
"widowcontrol"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop widowControl=true"
],
"enforcement": "report"
},
"wordWrap": {
"type": "bool",
"description": "Latin-word break behaviour in CJK paragraphs. Set false to allow ASCII text/whitespace to participate in CJK character flow — required for right-aligned CJK lines that rely on trailing underlined whitespace to align with adjacent lines.",
"aliases": [
"wordwrap"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop wordWrap=false"
],
"enforcement": "report"
},
"contextualSpacing": {
"type": "bool",
"description": "suppress space between paragraphs of the same style. Applied on Add/Set to paragraph pPr; also valid on Style.",
"aliases": [
"contextualspacing"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop contextualSpacing=true"
],
"enforcement": "report"
},
"effective.size": {
"type": "font-size",
"description": "inheritance-resolved font size (read-only) — derived from the first run's style chain → paragraph style → docDefaults.",
"add": false,
"set": false,
"get": true,
"readback": "unit-qualified, e.g. \"14pt\"",
"enforcement": "report"
},
"effective.size.src": {
"type": "string",
"description": "source pointer for effective.size.",
"add": false,
"set": false,
"get": true,
"readback": "style/docDefaults path",
"enforcement": "report"
},
"effective.font.ascii": {
"type": "string",
"description": "inheritance-resolved Latin/ASCII font slot (read-only).",
"add": false,
"set": false,
"get": true,
"readback": "font family name",
"enforcement": "report"
},
"effective.font.ascii.src": {
"type": "string",
"description": "source pointer for effective.font.ascii.",
"add": false,
"set": false,
"get": true,
"readback": "style/docDefaults path",
"enforcement": "report"
},
"effective.font.eastAsia": {
"type": "string",
"description": "inheritance-resolved East-Asian font slot (read-only).",
"add": false,
"set": false,
"get": true,
"readback": "font family name",
"enforcement": "report"
},
"effective.font.eastAsia.src": {
"type": "string",
"description": "source pointer for effective.font.eastAsia.",
"add": false,
"set": false,
"get": true,
"readback": "style/docDefaults path",
"enforcement": "report"
},
"effective.font.hAnsi": {
"type": "string",
"description": "inheritance-resolved High-ANSI font slot (read-only).",
"add": false,
"set": false,
"get": true,
"readback": "font family name",
"enforcement": "report"
},
"effective.font.hAnsi.src": {
"type": "string",
"description": "source pointer for effective.font.hAnsi.",
"add": false,
"set": false,
"get": true,
"readback": "style/docDefaults path",
"enforcement": "report"
},
"effective.font.cs": {
"type": "string",
"description": "inheritance-resolved complex-script font slot (read-only).",
"add": false,
"set": false,
"get": true,
"readback": "font family name",
"enforcement": "report"
},
"effective.font.cs.src": {
"type": "string",
"description": "source pointer for effective.font.cs.",
"add": false,
"set": false,
"get": true,
"readback": "style/docDefaults path",
"enforcement": "report"
},
"effective.bold": {
"type": "bool",
"description": "inheritance-resolved bold (read-only).",
"add": false,
"set": false,
"get": true,
"readback": "true | false",
"enforcement": "report"
},
"effective.bold.src": {
"type": "string",
"description": "source pointer for effective.bold.",
"add": false,
"set": false,
"get": true,
"readback": "style/docDefaults path",
"enforcement": "report"
},
"effective.italic": {
"type": "bool",
"description": "inheritance-resolved italic (read-only).",
"add": false,
"set": false,
"get": true,
"readback": "true | false",
"enforcement": "report"
},
"effective.italic.src": {
"type": "string",
"description": "source pointer for effective.italic.",
"add": false,
"set": false,
"get": true,
"readback": "style/docDefaults path",
"enforcement": "report"
},
"effective.color": {
"type": "color",
"description": "inheritance-resolved font color (read-only). #RRGGBB or scheme color name.",
"add": false,
"set": false,
"get": true,
"readback": "#RRGGBB uppercase or scheme color",
"enforcement": "report"
},
"effective.color.src": {
"type": "string",
"description": "source pointer for effective.color.",
"add": false,
"set": false,
"get": true,
"readback": "style/docDefaults path",
"enforcement": "report"
},
"effective.underline": {
"type": "string",
"description": "inheritance-resolved underline style (read-only).",
"add": false,
"set": false,
"get": true,
"readback": "underline style name",
"enforcement": "report"
},
"effective.underline.src": {
"type": "string",
"description": "source pointer for effective.underline.",
"add": false,
"set": false,
"get": true,
"readback": "style/docDefaults path",
"enforcement": "report"
},
"effective.rtl": {
"type": "bool",
"description": "inheritance-resolved right-to-left flag (read-only). Emitted even when 'rtl' is set directly so callers can compare direct vs cascade-resolved state.",
"add": false,
"set": false,
"get": true,
"readback": "true | false",
"enforcement": "report"
},
"effective.rtl.src": {
"type": "string",
"description": "source pointer for effective.rtl.",
"add": false,
"set": false,
"get": true,
"readback": "style/docDefaults path",
"enforcement": "report"
},
"numFmt": {
"type": "string",
"description": "raw numbering format (e.g. bullet, decimal, lowerLetter). Emitted only when present.",
"add": false,
"set": false,
"get": true,
"readback": "numbering format token",
"enforcement": "report"
},
"fill": {
"type": "color",
"description": "paragraph background shading (w:shd @fill). A solid background reads back as this canonical key (matching table cells and runs). Accepts a solid color — hex ('FF0000'), '#'-prefixed hex ('#FF0000'), named color ('red'), or rgb(...) notation. For a true pattern shading (pct*/stripe/cross) or a foreground pattern color, pass the legacy `shd`/`shading` triplet form 'PATTERN;FILL[;COLOR]' instead; those read back via the shading.* detail keys.",
"aliases": ["shd", "shading"],
"add": true,
"set": true,
"get": true,
"examples": ["--prop fill=FFFF00", "--prop fill=#FF0000", "--prop fill=red", "--prop shd=\"pct25;FF0000;0000FF\""],
"readback": "#RRGGBB uppercase",
"enforcement": "report"
},
"shading.val": {
"type": "string",
"description": "shading pattern value (decomposed from `shd`). Emitted on get only for a true pattern shading (pct*/stripe/cross); a solid background reads back as the canonical `fill` key. Add/Set use `fill`/`shd`/`shading`.",
"add": false,
"set": true,
"get": true,
"readback": "shading pattern token (pattern shading only)",
"enforcement": "report"
},
"shading.fill": {
"type": "string",
"description": "shading fill color hex (decomposed from `shd`). Emitted on get only for a true pattern shading; a solid background reads back as the canonical `fill` key.",
"add": false,
"set": true,
"get": true,
"readback": "#RRGGBB (pattern shading only)",
"enforcement": "report"
},
"shading.color": {
"type": "string",
"description": "shading foreground (pattern) color hex. Pattern shading only.",
"add": false,
"set": true,
"get": true,
"readback": "#RRGGBB (pattern shading only)",
"enforcement": "report"
},
"paraId": {
"type": "string",
"description": "paragraph stable id (source of @paraId in stable path). Emitted only when present.",
"add": false,
"set": false,
"get": true,
"readback": "paraId hex string",
"enforcement": "report"
},
"outlineLvl": {
"type": "number",
"description": "outline level (0-9). Used by Word's TOC and document map.",
"add": true,
"set": true,
"get": true,
"readback": "integer",
"enforcement": "report"
},
"rStyle": {
"type": "string",
"description": "Paragraph mark run style id (e.g. FootnoteReference, IntenseEmphasis). Inherited by runs without their own rStyle.",
"add": true,
"set": true,
"get": true,
"readback": "style id",
"enforcement": "report"
},
"tabs": {
"type": "array",
"description": "tab stops array. Set accepts a comma-separated list of positions (twips, e.g. 720,1440); Get emits the stored tab stops when present.",
"aliases": [
"tabstops"
],
"add": false,
"set": true,
"get": true,
"examples": [
"--prop tabs=720,1440"
],
"readback": "array of tab stop descriptors",
"enforcement": "report"
},
"pbdr.top": {
"type": "string",
"description": "paragraph border edge descriptor. Emitted only when present.",
"add": false,
"set": false,
"get": false,
"readback": "n/a (handler does not surface paragraph borders today)",
"enforcement": "report"
},
"pbdr.bottom": {
"type": "string",
"description": "paragraph border edge descriptor. Emitted only when present.",
"add": false,
"set": false,
"get": false,
"readback": "n/a (handler does not surface paragraph borders today)",
"enforcement": "report"
},
"pbdr.left": {
"type": "string",
"description": "paragraph border edge descriptor. Emitted only when present.",
"add": false,
"set": false,
"get": false,
"readback": "n/a (handler does not surface paragraph borders today)",
"enforcement": "report"
},
"pbdr.right": {
"type": "string",
"description": "paragraph border edge descriptor. Emitted only when present.",
"add": false,
"set": false,
"get": false,
"readback": "n/a (handler does not surface paragraph borders today)",
"enforcement": "report"
},
"pbdr.between": {
"type": "string",
"description": "paragraph border edge descriptor. Emitted only when present.",
"add": false,
"set": false,
"get": false,
"readback": "n/a (handler does not surface paragraph borders today)",
"enforcement": "report"
},
"pbdr.bar": {
"type": "string",
"description": "paragraph border edge descriptor. Emitted only when present.",
"add": false,
"set": false,
"get": false,
"readback": "n/a (handler does not surface paragraph borders today)",
"enforcement": "report"
},
"firstLineChars": {
"type": "number",
"add": false,
"set": true,
"get": true,
"description": "first-line indent in 1/100 character units (CT_Ind @firstLineChars). Word's chars-relative variant of firstLineIndent.",
"readback": "integer 1/100-char units",
"enforcement": "report"
},
"hangingChars": {
"type": "number",
"add": false,
"set": true,
"get": true,
"description": "hanging indent in 1/100 character units (CT_Ind @hangingChars). Word's chars-relative variant of hangingIndent.",
"readback": "integer 1/100-char units",
"enforcement": "report"
},
"markRPr.bold": {
"type": "bool",
"description": "paragraph-mark run property — bold flag on the ¶ glyph (w:pPr/w:rPr/w:b). Distinct from per-run bold; affects how the mark itself renders and is inherited by appended runs without their own bold setting.",
"add": false,
"set": true,
"get": true,
"readback": "true|false",
"enforcement": "report"
},
"markRPr.italic": {
"type": "bool",
"description": "paragraph-mark run italic (w:pPr/w:rPr/w:i).",
"add": false,
"set": true,
"get": true,
"readback": "true|false",
"enforcement": "report"
},
"markRPr.strike": {
"type": "bool",
"description": "paragraph-mark run strike (w:pPr/w:rPr/w:strike).",
"add": false,
"set": true,
"get": true,
"readback": "true|false",
"enforcement": "report"
},
"markRPr.rtl": {
"type": "bool",
"description": "paragraph-mark run right-to-left flag (w:pPr/w:rPr/w:rtl).",
"add": true,
"set": true,
"get": true,
"readback": "true|false",
"enforcement": "report"
},
"markRPr.rStyle": {
"type": "string",
"description": "paragraph-mark run character style (w:pPr/w:rPr/w:rStyle). Emitted on Get when the style binds the mark only; bare rStyle covers the mark+implicit-run shape.",
"add": true,
"set": true,
"get": true,
"enforcement": "report"
},
"markRPr.underline": {
"type": "string",
"description": "paragraph-mark run underline style (w:pPr/w:rPr/w:u @val).",
"add": false,
"set": true,
"get": true,
"readback": "underline style enum (single, double, dotted, …)",
"enforcement": "report"
},
"markRPr.size": {
"type": "length",
"description": "paragraph-mark run font size (w:pPr/w:rPr/w:sz, half-points internally).",
"add": false,
"set": true,
"get": true,
"readback": "unit-qualified pt (e.g. 11pt)",
"enforcement": "report"
},
"markRPr.color": {
"type": "color",
"description": "paragraph-mark run color (w:pPr/w:rPr/w:color). Returns scheme color name for theme refs, or #-prefixed hex.",
"add": false,
"set": true,
"get": true,
"readback": "scheme color name or #RRGGBB",
"enforcement": "report"
},
"markRPr.highlight": {
"type": "string",
"description": "paragraph-mark run highlight color (w:pPr/w:rPr/w:highlight @val).",
"add": false,
"set": true,
"get": true,
"readback": "highlight color enum",
"enforcement": "report"
},
"markRPr.font.latin": {
"type": "string",
"description": "paragraph-mark run Ascii font (w:pPr/w:rPr/w:rFonts @ascii).",
"add": false,
"set": true,
"get": true,
"readback": "font name",
"enforcement": "report"
},
"markRPr.font.ea": {
"type": "string",
"description": "paragraph-mark run EastAsia font (w:pPr/w:rPr/w:rFonts @eastAsia).",
"add": false,
"set": true,
"get": true,
"readback": "font name",
"enforcement": "report"
},
"markRPr.font.cs": {
"type": "string",
"description": "paragraph-mark run ComplexScript font (w:pPr/w:rPr/w:rFonts @cs).",
"add": false,
"set": true,
"get": true,
"readback": "font name",
"enforcement": "report"
},
"markRPr.font.hint": {
"type": "string",
"description": "paragraph-mark run font slot hint (w:pPr/w:rPr/w:rFonts @hint) — eastAsia / cs / default; selects the font slot for ambiguous characters on the paragraph mark.",
"add": false,
"set": true,
"get": true,
"readback": "eastAsia / cs / default",
"enforcement": "report"
},
"markRPr.font.asciiTheme": {
"type": "string",
"description": "paragraph-mark run theme font binding (w:pPr/w:rPr/w:rFonts/@w:asciiTheme), e.g. minorHAnsi.",
"add": true,
"set": true,
"get": true,
"enforcement": "report"
},
"markRPr.font.hAnsiTheme": {
"type": "string",
"description": "paragraph-mark run theme font binding (w:pPr/w:rPr/w:rFonts/@w:hAnsiTheme), e.g. minorHAnsi.",
"add": true,
"set": true,
"get": true,
"enforcement": "report"
},
"markRPr.font.eaTheme": {
"type": "string",
"description": "paragraph-mark run theme font binding (w:pPr/w:rPr/w:rFonts/@w:eastAsiaTheme), e.g. minorHAnsi.",
"add": true,
"set": true,
"get": true,
"enforcement": "report"
},
"markRPr.font.csTheme": {
"type": "string",
"description": "paragraph-mark run theme font binding (w:pPr/w:rPr/w:rFonts/@w:csTheme), e.g. minorHAnsi.",
"add": true,
"set": true,
"get": true,
"enforcement": "report"
},
"markRPr.charSpacing": {
"type": "length",
"description": "paragraph-mark run character spacing (w:pPr/w:rPr/w:spacing @val, twips internally).",
"add": false,
"set": true,
"get": true,
"readback": "unit-qualified pt (e.g. 1pt)",
"enforcement": "report"
},
"markRPr.size.cs": {
"type": "length",
"description": "paragraph-mark run complex-script font size (w:pPr/w:rPr/w:szCs, half-points internally). The CJK/RTL counterpart of markRPr.size; emitted separately so the ¶ glyph's complex-script metrics survive dump→batch.",
"add": false,
"set": true,
"get": true,
"readback": "unit-qualified pt (e.g. 11pt)",
"enforcement": "report"
},
"markRPr.bold.cs": {
"type": "bool",
"description": "paragraph-mark run complex-script bold (w:pPr/w:rPr/w:bCs). The CJK/RTL counterpart of markRPr.bold.",
"add": false,
"set": true,
"get": true,
"readback": "true|false",
"enforcement": "report"
},
"markRPr.italic.cs": {
"type": "bool",
"description": "paragraph-mark run complex-script italic (w:pPr/w:rPr/w:iCs). The CJK/RTL counterpart of markRPr.italic.",
"add": false,
"set": true,
"get": true,
"readback": "true|false",
"enforcement": "report"
},
"markRPr.kern": {
"type": "integer",
"description": "paragraph-mark run kerning threshold (w:pPr/w:rPr/w:kern @val, half-points). Below this font size Word disables kerning on the ¶ glyph.",
"add": false,
"set": true,
"get": true,
"readback": "integer half-points",
"enforcement": "report"
},
"markRPr.font.ascii": {
"type": "string",
"description": "paragraph-mark run Ascii font (w:pPr/w:rPr/w:rFonts @ascii). Emitted alongside markRPr.font.hAnsi only when the two slots diverge; the symmetric case collapses to markRPr.font.latin.",
"add": false,
"set": true,
"get": true,
"readback": "font name",
"enforcement": "report"
},
"markRPr.font.hAnsi": {
"type": "string",
"description": "paragraph-mark run HighAnsi font (w:pPr/w:rPr/w:rFonts @hAnsi). Emitted alongside markRPr.font.ascii only when the two slots diverge; the symmetric case collapses to markRPr.font.latin.",
"add": false,
"set": true,
"get": true,
"readback": "font name",
"enforcement": "report"
},
"markRPr.lang.latin": {
"type": "string",
"description": "paragraph-mark run Latin language tag (w:pPr/w:rPr/w:lang @val, BCP-47 e.g. en-US). Tags the ¶ glyph's language for proofing; mirrors run-level lang.latin.",
"add": false,
"set": true,
"get": true,
"readback": "BCP-47 tag",
"enforcement": "report"
},
"markRPr.lang.ea": {
"type": "string",
"description": "paragraph-mark run East-Asian language tag (w:pPr/w:rPr/w:lang @eastAsia, BCP-47 e.g. ja-JP). Mirrors run-level lang.ea.",
"add": false,
"set": true,
"get": true,
"readback": "BCP-47 tag",
"enforcement": "report"
},
"markRPr.lang.cs": {
"type": "string",
"description": "paragraph-mark run complex-script language tag (w:pPr/w:rPr/w:lang @bidi, BCP-47 e.g. ar-SA). Mirrors run-level lang.cs.",
"add": false,
"set": true,
"get": true,
"readback": "BCP-47 tag",
"enforcement": "report"
},
"kern": {
"type": "integer",
"description": "kerning threshold on an empty paragraph's ¶-mark run (w:pPr/w:rPr/w:kern @val, half-points). Below this font size Word disables kerning. Get-side readback only — the value is applied via the generic run-formatting path (ApplyRunFormatting), not a dedicated paragraph Set case; text-bearing paragraphs surface the ¶-mark kern under markRPr.kern instead.",
"add": false,
"set": false,
"get": true,
"readback": "integer half-points",
"enforcement": "report"
}
}
}