Problem
The Podlite specification uses three different formats for string attributes with spaces, creating confusion:
Format 1: Parentheses with double quotes
=for table :caption("Block configuration syntax")
=begin table :caption("Types of Notification blocks")
Format 2: Parentheses with single quotes
=begin nested :caption('Work on the next release continues!')
=for table :caption('Table of contents')
Format 3: Angle brackets (appears in code examples)
=begin table :caption<Table of Contents>
=formula :caption<Quadratic Formula>
This inconsistency makes it unclear which syntax writers should use when creating Podlite documents.
Why angle brackets are incorrect
Angle brackets <> function as a word-quoting operator that splits content on whitespace:
<Table of Contents> → ('Table', 'of', 'Contents') # Creates a LIST
Therefore :caption<Table of Contents> creates a list of three separate values, not a single string.
Proposed solution
Standardize on three valid syntactic forms for multi-word string attributes
Parentheses form:
:caption('Table of Contents')
:caption("Table of Contents")
Direct quote form:
:caption'Table of Contents'
:caption"Table of Contents"
Corner bracket form:
:caption「Table of Contents」
All three forms are equivalent and create a single string value.
Benefits
- eliminates confusion about correct syntax
- shorter syntax is easier to type
- provides clear examples in the specification itself
- offers verbose (parentheses), concise (direct quote), and visual (corner brackets) options
- prevents errors where multi-word strings are accidentally split into lists
Historical Root cause
The old language spec (S02) doesn't explicitly document how to write multi-word strings in adverbial pair notation. The canonical table at
https://github.com/podlite/podlite-specs/blob/renaissance/S02-bits.pod?plain=1#L3604-L3619
Fat arrow Adverbial pair Paren form
========= ============== ==========
a => True :a
a => False :!a
a => 0 :a(0)
a => $x :a($x)
a => 'foo' :a<foo> :a(<foo>)
a => <foo bar> :a<foo bar> :a(<foo bar>)
a => «$foo @bar» :a«$foo @bar» :a(«$foo @bar»)
a => {...} :a{...} :a({...})
a => [...] :a[...] :a([...])
a => $a :$a
a => @a :@a
a => %a :%a
a => &a :&a
a => %foo<a> %foo<a>:p
shows:
- Single word strings:
a => 'foo' becomes :a<foo> ✅
- Word-quoted lists:
a => <foo bar> becomes :a<foo bar> ✅
- Multi-word strings: Not documented ❌
The parentheses form :key('value') is derived from the "Paren form" column and general bracketing rules, but it's never explicitly shown for this use case.
According to S02: angle brackets <> are a word-quoting operator that splits on whitespace:
<Table of Contents> → ('Table', 'of', 'Contents') # Creates a LIST
Problem
The Podlite specification uses three different formats for string attributes with spaces, creating confusion:
Format 1: Parentheses with double quotes
Format 2: Parentheses with single quotes
Format 3: Angle brackets (appears in code examples)
This inconsistency makes it unclear which syntax writers should use when creating Podlite documents.
Why angle brackets are incorrect
Angle brackets
<>function as a word-quoting operator that splits content on whitespace:Therefore
:caption<Table of Contents>creates a list of three separate values, not a single string.Proposed solution
Standardize on three valid syntactic forms for multi-word string attributes
Parentheses form:
Direct quote form:
Corner bracket form:
All three forms are equivalent and create a single string value.
Benefits
Historical Root cause
The old language spec (S02) doesn't explicitly document how to write multi-word strings in adverbial pair notation. The canonical table at
https://github.com/podlite/podlite-specs/blob/renaissance/S02-bits.pod?plain=1#L3604-L3619
shows:
a => 'foo'becomes:a<foo>✅a => <foo bar>becomes :a<foo bar>✅The parentheses form
:key('value')is derived from the "Paren form" column and general bracketing rules, but it's never explicitly shown for this use case.According to S02: angle brackets
<>are a word-quoting operator that splits on whitespace: