CHANGES:
TyXML now follows the current specifications: the WHATWG living standard for
HTML, and SVG 2 with the Filter Effects module for SVG, whose support had not
moved since SVG 1.1.
Breaking changes
- The
hiddenattribute takes an enumerated argument
([`Hidden | `Until_found]) instead of no argument, and
contenteditabletakes an enumerated argument
([`True | `False | `Plaintext_only]) instead of a boolean, so that the
until-found and plaintext-only states can be expressed a_itemtypeanda_pingtake anXml.uri listinstead of astring list
and go throughXml.uris_attrib, like every other URL-valued attribute.
Tyxml.Htmlis unaffected, itsXml.uriisstring- The SVG attributes whose value is a URL follow the same rule:
a_href,
a_xlink_href,a_xml_base,a_xlink_role,a_xlink_arcroleand the
a_pingthis release adds to the SVGaelement take anXml.uri, where
they used to take theiritype, which isstring. The presentation
attributes that accept a funciri such asurl(#id)or a keyword such as
none, that isclip-path,maskand themarker-*ones, keepiri - SVG documents are printed without a doctype.
Svg.Infodeclared SVG 1.1 and
every printed document carried the SVG 1.1 DTD, which forbids the SVG 2
elements and attributes TyXML now emits, and SVG 2 defines no DTD.
Info.versionandInfo.standardname SVG 2 - Unlike their HTML counterparts, the
Svg_types.*_contenttypes are widened
along with the content models they describe: the SVG element functions use
them directly, there is no_content_funon that side. Code that names one
of them and constrains it with=has to be updated - Misspelled names are corrected:
a_baseFrenquencybecomesa_baseFrequency,
a_externalRessourcesRequiredbecomesa_externalResourcesRequired, the
stroke-linejoinvalue`Beverbecomes`Bevel, and the types
Html_types.subressource_integrityandSvg_types.paint_whitout_iccbecome
subresource_integrityandpaint_without_icc - The newly deprecated elements and attributes are an error, and not a warning,
for the users of the PPX and the JSX syntax who build in dune's dev profile,
where alerts are fatal. The alert is reported on the markup literal, so it
has to be silenced on the enclosing definition - The
Wrapped_functionsmodule type has four new functions, which the
implementations of the functorial interface must provide:
string_of_blockingandstring_of_ol_typefor HTML,unoption_string
andstring_of_semicolonstringsfor SVG - The build now requires OCaml 4.08, dune 3.18 and ppxlib 0.36
(Sora Morimoto, and #340 by Patrick Ferris for the OCaml 5.2 AST) - The test matrix covers OCaml 4.14 and the 5.x series. The lower bound stays
at 4.08, but the versions from 4.08 to 4.13 are no longer tested
HTML
- New elements:
s,bdi,search,data,slot, andtrackwith its
kind,srclang(asa_track_srclang) anddefaultattributes,audio
andvideotaking an optional?tracksargument.meta_itempropis the
form ofmetacarrying anitempropattribute, which the specification
allows wherever phrasing content is expected and not only in the head
(#343 by toastal) - New global attributes:
popover,inert,enterkeyhint,autocapitalize,
autocorrect,writingsuggestions,nonce,slotandis, the microdata
attributesitemscope,itemtype,itemid,itempropanditemref, the
CSS shadow parts attributespartandexportparts, and the`Auto
value ofdir
(#341 by @SylvainBoilard for popover, #343 by toastal for microdata) - New attributes on elements:
popovertargetandpopovertargetactionon
buttons and inputs,commandandcommandfor(invoker commands) on
buttons,loading,decodingandfetchpriorityon images,srcdoc,
allowandloadingon iframes,as,imagesrcsetandimagesizeson
links (a_as),nomoduleon scripts,blockingon links, scripts and styles,
pingonaandarea,dirnameon inputs and textareas,capture
(W3C HTML Media Capture) on inputs,a_ol_typeon ordered lists,abbron
th cells,closedbyon dialogs,mediaon meta,nameondetails,
playsinlineanddisablepictureinpictureon videos,
disableremoteplaybackon audios and videos, and the declarative shadow DOM
attributes on templates (shadowrootmode,shadowrootdelegatesfocus,
shadowrootclonableandshadowrootserializable). Also allowcrossorigin,
usemapandreferrerpolicyon images,referrerpolicyonaandarea,
andautocompleteon selects and textareas
(#341 by @SylvainBoilard fornameondetails, fixes #268) - New event handler attributes: the pointer events (
a_onpointerdownand
its siblings),a_onwheel,
a_onauxclick, and the global handlers that were missing
(a_onbeforeinput,a_onbeforematch,a_onbeforetoggle,a_oncancel,
a_oncontextlost,a_oncontextrestored,a_oncopy,a_oncut,
a_onpaste,a_oncuechange,a_onscrollend,
a_onsecuritypolicyviolation,a_onslotchangeanda_ontoggle), plus
a_onlanguagechange,a_onrejectionhandledanda_onunhandledrejection
on body - New attribute values:
dialogformethodandformmethod, and the newer
sandboxtokens (allow-downloads,allow-modals,
allow-orientation-lock,allow-popups-to-escape-sandbox,
allow-presentation,allow-top-navigation-by-user-activationand
allow-top-navigation-to-custom-protocols) - Content models brought in line with the specification:
divgroupsdtand
ddinsidedl, the script-supporting elements (script,template) are
accepted indl,ol,ul,menu,tableand its row groups,tr,
selectandoptgroup,hgroupacceptsp, andselectacceptshr.
The_contenttypes keep their previous value, only the types the element
functions use are widened
(#344 by toastal, fixes #342 and #321) - Undeprecate the
scopeattribute, which is valid on table header cells in
the living standard - Deprecate
a_version,a_xml_spaceanda_scrolling, which produce a type
tag that is in no attribute category, so no element ever accepted them
SVG
- New elements:
mask,feMergeNodeandfeDropShadow.maskwas declared
inSvg_typesbut the element itself was missing, andfeMergecould be
given no child at all sincefeMergeNodedid not exist - Presentation attributes: add the ones whose type tags were already declared
but had no function (baseline-shift,clip-rule,color,
color-interpolation,color-interpolation-filters,color-rendering,
cursor,direction,display,fill-opacity,filter,flood-color,
flood-opacity,font-size-adjust,image-rendering,letter-spacing,
lighting-color,marker-end,marker-mid,marker-start,mask,
opacity,overflow,pointer-events,shape-rendering,unicode-bidi,
visibility,word-spacingandwriting-mode) and the ones new in SVG 2
(paint-order,text-overflow,transform-origin,vector-effectand
white-space). The ones SVG 2 removed are added as deprecated:clip,
color-profile,enable-background,glyph-orientation-horizontal,
glyph-orientation-verticalandkerning
(#333 by Martin @Mbodin Bodin forclip-path) - Other new attributes: the
tabindexandautofocusglobal attributes,
langbecomes global, ARIA support (a_roleanda_aria), the SVG 2 link
attributes on theaelement (download,hreflang,ping,
referrerpolicy,relandtype),crossorigin,decodingand
fetchpriority,fron radial gradients,sideandpathontextPath,
and the SVG 2 geometry attributes onsymbol(x,y,width,height,
refX,refY) - Attribute functions missing for type tags that were already declared:
a_end(SMIL timing),a_z(light sources),a_filterUnits,a_title(on
style),a_origin,a_panose_1,a_descent, and the deprecated
a_xlink_type,a_xlink_roleanda_xlink_arcrole - New values of existing attributes:
miter-clipandarcsfor
stroke-linejoin, all the CSS blend modes for themodeattribute of
feBlend, andtext-topandtext-bottomforalignment-baselineand
dominant-baseline - The HTML event handler attributes, which SVG 2 reuses on every element
(focus, keyboard, pointer, wheel, clipboard, drag and media events), and the
window event handler attributes on thesvgelement - Content models widened to SVG 2: shapes accept paint servers,
clipPath,
marker,mask,scriptandstyle;useandimageacceptclipPath,
mask,scriptandstyle; text elements accept paint servers,script
andstyle; filter primitives accept descriptive elements,animate,
scriptandset; gradients,stopandclipPathacceptscript - Separate the values of the
values,keyTimesandkeySplinesanimation
attributes with semicolons, as SMIL requires, instead of commas
(#308 by @rand00) - Deprecate what SVG 2 removed and was not deprecated yet:
externalResourcesRequired,filterRes,zoomAndPan, theonzoom,
onactivate,onfocusinandonfocusoutevent handlers, and thecursor
andanimateColorelements. Conversely, undeprecatea_onload: the load
event is still fired on SVG elements
Fixes
- The
areaelement could not be used at all: it had nohrefattribute, and
its type tag was in no content model, so amapcontaining areas fitted
nowhere. It is now phrasing content, and its signature usesarea_attrib
instead of repeating a shorter list that left outdownload,pingand
referrerpolicy
(fixes part of #184) - The
lichildren ofmenucould not be built: the`Lisbranch
required anliwhose attributes were a subset of the common ones,
excluding thevalueattribute thatlialways allows - Several attribute names were emitted misspelled:
reversed(emitted
reserved), theallow-scriptssandbox token (allow-script) and, in SVG,
zoomAndPan,requiredExtensions,externalResourcesRequired,edgeMode
(emittedtargetY),filterRes,target(emittedxlink:target),
glyph-nameand thefont-face-formatelement (emittedfont-face-uri).
Several SVG attribute values were too: the hyphens missing from the
rendering-intentanddominant-baselinevalues, the case of theinand
in2keywords (SourceGraphicand the other built-in inputs), and
`Align, emitted as the empty string
(Hugo @hhugo Heuzard) - Several type tags did not match their attribute, making
a_edgeMode,
a_preserveAlpha,a_filterRes,a_target,a_glyph_name,
a_arabic_form,a_requiredExtensions,a_xlink_titleanda_low
unusable, and some element type tags were misspelled or duplicated
(feFuncR,feFuncGandfeFuncBwere all defined as`FeFuncA)
(Hugo @hhugo Heuzard) - The
symbolelement accepted neither the core attributes, so noid, which
made it impossible to reference, nor the presentation and event attributes,
nor shape children - The
xml:base,xml:langandxml:spaceattributes and the touch event
handler attributes of SVG had type tags listed in no attribute category,
which made them unusable on every element Xml_print.compose_declemitted a literal\ninstead of a newline, which
made the XML declaration invalid
(#348 by Martin @Mbodin Bodin)- In the JSX syntax,
Htmlused as an element name was mistaken for a
user-defined component: the test lowercased the name and then compared it
with a capitalised string, so it never matched - Fix the development-profile build with recent compilers by anonymizing the
unused functor parameters of the printer and functor signatures (warning 67) - Fix the typo
whitoutin a type definition
(#324 by Martin @Mbodin Bodin) - Fix the typo
subresourceand various English orthographic mistakes
(#345 by toastal) Unsafegainsuris_attrib, the escape hatch that was missing for an
attribute holding a space-separated list of URLs, next touri_attrib
PPX and JSX syntax
- No camel case SVG attribute was recognised, so
viewBox,maskUnits,
stdDeviation,gradientTransform,preserveAspectRatio,refX,
markerWidthand many others were rejected - Whitespace between SVG tags is ignored for the elements whose content model
does not accept text. Indented SVG, as the specification itself writes it,
was rejected:[%svg "<g> </g>"]failed to typecheck. Whitespace is still
significant intext,tspan,textPath,desc,title,styleand
script
(#331 by Martin @Mbodin Bodin, fixes #330) - A
transformattribute whose arguments were comma separated, such as
translate(1,1), was rejected. Any whitespace, and not only the space
character, is now accepted around the separators of list-valued attributes
(#328 by Martin @Mbodin Bodin, fixes #326) - Two transforms must now be separated by whitespace or a comma, as the
grammar of the attribute requires.transform="translate(1,2)rotate(45)"
used to be accepted and silently turned into valid output - The
values,keyTimesandkeySplinesanimation attributes are split on
semicolons, where they used to be split on spaces
(#308 by @rand00) - An empty
optionis accepted, as forscriptandtextarea: an option
carrying alabeland avalueattribute has no content, which is the
usual form inside adatalist
(fixes #228)