On 2 Aug 2025, at 1:59, Damin Rido wrote:
> I deliberately omitted field names in some xo_emit calls when the output 
> style was XO_STYLE_TEXT, since I assumed field names wouldn't matter for 
> human-readable formats. I also couldn’t trigger any warnings with --libxo:W. 
> However, to stay consistent with xolint expectations and ensure correctness 
> across all styles, I’ll add proper field names in my next commit.

Even with text, this is an error, since the library can't know you've made this 
test, and it doesn't work with HTML.  You should use a name consistent with 
other places the field is emitted.

> I initially assumed that only TEXT is intended for human-readable output, and 
> that XML, JSON, and HTML are all machine-readable formats. That’s why I 
> treated TEXT separately in my formatting logic. Also, I use space-padding 
> specifically for XO_STYLE_TEXT to produce a neat, structured, table-like 
> output, which I assumed wouldn’t be necessary for HTML or other formats. 
> Could you please clarify why HTML should be handled similarly to TEXT in this 
> case?

Using HTML means you get text output, but it is "wrapped" in HTML tags that 
express the purpose (and more) of the fields, allowing CSS to render data in 
browsers that's consistent with TTY output, but HTML-friendly (e.g. hover, 
sort, etc).  Take a look at xohtml(1) for an example/demonstration.  The 
underlaying HTML looks like:

 % df --libxo:H /
<div class="line"><div class="title">Filesystem        </div><div class="text"> 
</div><div class="title"> 1K-blocks</div><div class="text"> </div><div 
class="title">   Used</div><div class="text"> </div><div class="title">     
Avail</div><div class="text"> </div><div class="title">Capacity</div><div 
class="text">  </div><div class="title">Mounted on</div></div><div 
class="line"><div class="data" data-tag="name">zroot/ROOT/default</div><div 
class="text"> </div><div class="data" 
data-tag="total-blocks">1581781064</div><div class="text"> </div><div 
class="data" data-tag="used-blocks">7599348</div><div class="text"> </div><div 
class="data" data-tag="available-blocks">1574181716</div><div class="text"> 
</div><div class="data" data-tag="used-percent">    0</div><div 
class="units">%</div><div class="text">  </div><div class="text">  </div><div 
class="data" data-tag="mounted-on">/</div></div>

Or (pretty-fied);

% df --libxo:HP /
<div class="line">
  <div class="title">Filesystem        </div>
  <div class="text"> </div>
  <div class="title"> 1K-blocks</div>
  <div class="text"> </div>
  <div class="title">   Used</div>
  <div class="text"> </div>
  <div class="title">     Avail</div>
  <div class="text"> </div>
  <div class="title">Capacity</div>
  <div class="text">  </div>
  <div class="title">Mounted on</div>
</div>
<div class="line">
  <div class="data" data-tag="name">zroot/ROOT/default</div>
  <div class="text"> </div>
  <div class="data" data-tag="total-blocks">1581781064</div>
  <div class="text"> </div>
  <div class="data" data-tag="used-blocks">7599348</div>
  <div class="text"> </div>
  <div class="data" data-tag="available-blocks">1574181716</div>
  <div class="text"> </div>
  <div class="data" data-tag="used-percent">    0</div>
  <div class="units">%</div>
  <div class="text">  </div>
  <div class="text">  </div>
  <div class="data" data-tag="mounted-on">/</div>
</div>

Adding "data" and "path" data-* attributes to the HTML suitable for hover and 
link creation:

<div class="line">
  <div class="data" data-tag="name" 
data-xpath="/storage-system-information/filesystem/name">zroot/ROOT/default</div>
  <div class="text"> </div>
  <div class="data" data-tag="total-blocks" 
data-xpath="/storage-system-information/filesystem[name = 
'zroot/ROOT/default']/total-blocks">1581780992</div>
  <div class="text"> </div>
  <div class="data" data-tag="used-blocks" 
data-xpath="/storage-system-information/filesystem[name = 
'zroot/ROOT/default']/used-blocks">7599348</div>
  <div class="text"> </div>
  <div class="data" data-tag="available-blocks" 
data-xpath="/storage-system-information/filesystem[name = 
'zroot/ROOT/default']/available-blocks">1574181644</div>
  <div class="text"> </div>
  <div class="data" data-tag="used-percent" 
data-xpath="/storage-system-information/filesystem[name = 
'zroot/ROOT/default']/used-percent">    0</div>
  <div class="units">%</div>
  <div class="text">  </div>
  <div class="text">  </div>
  <div class="data" data-tag="mounted-on" 
data-xpath="/storage-system-information/filesystem[name = 
'zroot/ROOT/default']/mounted-on">/</div>
</div>

So, yes, please handle HTML while you're doing this work.  It will maximize the 
utility of your xo changes.

Thanks,
 Phil

Reply via email to