orthonym.rules.polyol_polyester#
Note
Internal API. Names and behaviour may change between releases.
Best-effort producer for the acyclic polyol / polyether / polyester class.
The composer names a pure polyol (1,5,6-tris(2,3-dihydroxypropoxy)hexane-2,3,4-triol) cleanly because its only characteristic group is the alcohol. When the SAME polyol carries one or more esters (tail #21, a hexitol tris-methacrylate), the ester is senior, so parent selection commits to the ester and name_ester LINEARISES the 23-carbon polyol OR side into a wrong ‘tricosyl 2-methylpropanoate’ (-suppressed), and the multiplicative-ester PIN neither reference builds.
This producer supplies the degrade method (2) licenses: DEMOTE every
ester to an (Racyloxy) prefix, choose the polyol carbon chain as the parent, and
cite the free hydroxyls as the -ol suffix – a valid, round-trippable
(non-PIN) systematic name:
1,5,6-tris[2-hydroxy-3-(2-methylprop-2-enoyloxy)propoxy]hexane-2,3,4-triol
It runs ONLY on the best-effort lane (after the PIN/ester path has abstained), each emission E1-covered by construction (every atom is bound to the parent, a free-OH suffix, or a named arm) and round-trip verified downstream, so the 0-wrong net is unchanged.
Scope (fail closed -> None outside it): a SINGLE acyclic component whose only heteroatom is oxygen, whose carbon skeleton has ONE parent chain covering every “core” carbon (a carbon bonded to >=1 core carbon), where every oxygen is exactly one of – a free hydroxyl on a core carbon (the suffix), a bridging ether to a name_substituent-nameable arm (an alkoxy prefix), or an acyloxy ester (-O-C(=O)-R, the acyloxy prefix) – and at least one ester is present (so a plain polyol, already named by the composer, is never intercepted).
- orthonym.rules.polyol_polyester.name_acyclic_polyol_polyester(mol)#
Return the polyol-polyester name for
molorNone(fail closed).