Some GTK UI tag inlined in .c documentation comment are unescaped by backtick
Steps to reproduce
Comparing gtk3 and gtk4 doc release of the same paragraph:
- https://docs.gtk.org/gtk4/class.Builder.html#a-gtkbuilder-ui-definition
- https://docs.gtk.org/gtk3/class.Builder.html#a-gtkbuilder-ui-definition
Note that a custom element in a element gets parsed by the custom tag handler of the parent object, while a custom element in an element gets parsed by the custom tag handler of the object.
Unescaped GTK UI tags inlined in documentary comment e.g. <child>
(should be `<child>`
) are missing from the paragraph, and are parsed as HTML tag on those pages.
I think this commit ( maybe more?) on GTK 3.24 is missing on the main branch right now.
Hopefully merging the missing commit into main will be a quick relief.
In case it doesn't -
I tried to scan the codebase for similar case, but it seems the usage of <.*>
in comment is rather wild. Anyway, I'll paste the the best scan result I can produce in case this would help. This was made by scanning all comments in *.c and *.h files, ignoring testsuite/
and stuffs like < ?public ?>
, < ?private ?>
, <http://url>
, <foo@bar.org>
, /* #include <foo.h> */
, <kbd>
.
/tmp/gtk/gtk/roaring/roaring.h: * Shifts last $count elements either left (distance < 0) or right (distance > 0)
/tmp/gtk/gtk/roaring/roaring.c: * <bitset_data> uint64_t[BITSET_CONTAINER_SIZE_IN_WORDS * num_bitset_containers]
/tmp/gtk/gtk/roaring/roaring.c: * <run_data> rle16_t[total number of rle elements in all run containers]
/tmp/gtk/gtk/roaring/roaring.c: * <array_data> uint16_t[total number of array elements in all array containers]
/tmp/gtk/gtk/roaring/roaring.c: * <keys> uint16_t[num_containers]
/tmp/gtk/gtk/roaring/roaring.c: * <counts> uint16_t[num_containers]
/tmp/gtk/gtk/roaring/roaring.c: * <typecodes> uint8_t[num_containers]
/tmp/gtk/gtk/roaring/roaring.c: * <header> uint32_t
/tmp/gtk/gtk/roaring/roaring.c: * <header> is a 4-byte value which is a bit union of FROZEN_COOKIE (15 bits)
/tmp/gtk/gtk/roaring/roaring.c: * <counts> stores number of elements for every container.
/tmp/gtk/gtk/roaring/roaring.c: * <bitset_data>,<array_data>,<run_data> are flat arrays of elements of
/tmp/gtk/gtk/roaring/roaring.c: * <bitset_data>,<array_data>,<run_data> are flat arrays of elements of
/tmp/gtk/gtk/roaring/roaring.c: * <bitset_data>,<array_data>,<run_data> are flat arrays of elements of
/tmp/gtk/gtk/roaring/roaring.c: * <*_data> and <keys> are kept close together because they are not accessed
/tmp/gtk/gtk/roaring/roaring.c: * <*_data> and <keys> are kept close together because they are not accessed
/tmp/gtk/gtk/roaring/roaring.c: * All members have their native alignments during deserilization except <header>,
/tmp/gtk/gtk/gtkwindow.c: * attribute of a <child> element.
/tmp/gtk/gtk/gtktexttagtable.c: * of a <child> element.
/tmp/gtk/gtk/gtktextlayout.c: /* Functions to convert iter <=> index for the line of a GtkTextLineDisplay
/tmp/gtk/gtk/gtkstringlist.c: * supports adding items directly using the <items> element and
/tmp/gtk/gtk/gtkstringlist.c: * specifying <item> elements for each item. Each <item> element
/tmp/gtk/gtk/gtkstringlist.c: * specifying <item> elements for each item. Each <item> element
/tmp/gtk/gtk/gtksizegroup.c: * Size groups can be specified in a UI definition by placing an <object>
/tmp/gtk/gtk/gtksizegroup.c: * widgets that belong to the size group are specified by a <widgets> element
/tmp/gtk/gtk/gtksizegroup.c: * that may contain multiple <widget> elements, one for each member of the
/tmp/gtk/gtk/gtkshortcuttrigger.c: * `GtkAlternativeTrigger`: `<Control>q|<Control>w`
/tmp/gtk/gtk/gtkshortcutsshortcut.c: * - A single shortcut: <ctl><alt>delete
/tmp/gtk/gtk/gtkshortcutsshortcut.c: * - A single shortcut: <ctl><alt>delete
/tmp/gtk/gtk/gtkshortcutsshortcut.c: * - Two alternative shortcuts: <shift>a Home
/tmp/gtk/gtk/gtkshortcutsshortcut.c: * - A range of shortcuts: <alt>1...<alt>9
/tmp/gtk/gtk/gtkshortcutsshortcut.c: * - A range of shortcuts: <alt>1...<alt>9
/tmp/gtk/gtk/gtkshortcutsshortcut.c: * - A sequence of shortcuts or keys: <ctl>c+<ctl>x
/tmp/gtk/gtk/gtkshortcutsshortcut.c: * - A sequence of shortcuts or keys: <ctl>c+<ctl>x
/tmp/gtk/gtk/gtkshortcutsshortcut.c: * Note that <, > and & need to be escaped as <, > and & when used
/tmp/gtk/gtk/gtkscale.c: * `GtkScale` supports a custom <marks> element, which can contain multiple
/tmp/gtk/gtk/gtkscale.c: * <mark\> elements. The “value” and “position” attributes have the same
/tmp/gtk/gtk/gtknotebook.c: * “type” attribute of a <child> element. Note that the content
/tmp/gtk/gtk/gtknotebook.c: * A tab child can be specified without specifying a <child>
/tmp/gtk/gtk/gtknotebook.c: * <child> element.
/tmp/gtk/gtk/gtklistbox.c: * attribute of a <child> element. See [method@Gtk.ListBox.set_placeholder]
/tmp/gtk/gtk/gtklistbase.c: * to %TRUE if the user keeps the <Shift> key pressed.
/tmp/gtk/gtk/gtklistbase.c: * position if the user presses the <Ctrl> key.
/tmp/gtk/gtk/gtklevelbar.c: * custom <offsets> element, which can contain any number of <offset> elements,
/tmp/gtk/gtk/gtklevelbar.c: * custom <offsets> element, which can contain any number of <offset> elements,
/tmp/gtk/gtk/gtklabel.c: * custom <attributes> element, which supports any number of <attribute>
/tmp/gtk/gtk/gtklabel.c: * custom <attributes> element, which supports any number of <attribute>
/tmp/gtk/gtk/gtklabel.c: * elements. The <attribute> element has attributes named “name“, “value“,
/tmp/gtk/gtk/gtklabel.c: * literal <, > and & characters must be escaped as <, >, and &.
/tmp/gtk/gtk/gtkheaderbar.c: * the “type” attribute of a <child> element, or setting the title widget by
/tmp/gtk/gtk/gtkframe.c: * “type” attribute of a <child> element. A normal content child can
/tmp/gtk/gtk/gtkframe.c: * be specified without specifying a <child> type attribute.
/tmp/gtk/gtk/gtkfilesystemmodel.c: * The invariant here is that the files in model->files[n] for n < g_hash_table_size (model->file_lookup)
/tmp/gtk/gtk/gtkexpander.c: * “type” attribute of a <child> element. A normal content child can be
/tmp/gtk/gtk/gtkexpander.c: * specified without specifying a <child> type attribute.
/tmp/gtk/gtk/gtkentry.c: * custom <attributes> element, which supports any number of <attribute>
/tmp/gtk/gtk/gtkentry.c: * custom <attributes> element, which supports any number of <attribute>
/tmp/gtk/gtk/gtkentry.c: * elements. The <attribute> element has attributes named “name“, “value“,
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <relation> = '==' | '<=' | '>='
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <relation> = '==' | '<=' | '>='
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <objectOfPredicate> = <constant> | <viewName>
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <objectOfPredicate> = <constant> | <viewName>
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <objectOfPredicate> = <constant> | <viewName>
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <constant> = <number> | <metricName>
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <constant> = <number> | <metricName>
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <constant> = <number> | <metricName>
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <viewName> = [A-Za-z_]([A-Za-z0-9_]*)
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <metricName> = [A-Za-z_]([A-Za-z0-9_]*)
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <operator> = (['*'|'/']<positiveNumber>)? (['+'|'-']<positiveNumber>)?
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <operator> = (['*'|'/']<positiveNumber>)? (['+'|'-']<positiveNumber>)?
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <operator> = (['*'|'/']<positiveNumber>)? (['+'|'-']<positiveNumber>)?
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <priority> = <positiveNumber> | 'weak' | 'medium' | 'strong' | 'required'
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <priority> = <positiveNumber> | 'weak' | 'medium' | 'strong' | 'required'
/tmp/gtk/gtk/gtkconstraintvflparser.c: /* <view> = '[' <viewName> (<predicateListWithParens>)? ']'
/tmp/gtk/gtk/gtkconstraintvflparser.c: /* <view> = '[' <viewName> (<predicateListWithParens>)? ']'
/tmp/gtk/gtk/gtkconstraintvflparser.c: /* <view> = '[' <viewName> (<predicateListWithParens>)? ']'
/tmp/gtk/gtk/gtkconstraintvflparser.c: * <viewName> = [A-Za-z_]([A-Za-z0-9_]+)
/tmp/gtk/gtk/gtkconstraintlayout.c: /* HashTable<static string, Variable>; a hash table of variables,
/tmp/gtk/gtk/gtkconstraintlayout.c: /* HashTable<static string, Variable>; a hash table of variables,
/tmp/gtk/gtk/gtkconstraintlayout.c: /* HashSet<GtkConstraint>; the set of constraints on the
/tmp/gtk/gtk/gtkconstraintguide.c: /* HashTable<static string, Variable>; a hash table of variables,
/tmp/gtk/gtk/gtkconstraintexpression.c: /* HashTable<Variable, Term>; the key is the term's variable,
/tmp/gtk/gtk/gtkcenterbox.c: * or “end” as the “type” attribute of a <child> element.
/tmp/gtk/gtk/gtkbuilderscope.h: * explicitly in a GtkBuilder file, like via the "type-func" attribute in the "<object>" tag.
/tmp/gtk/gtk/gtkbuilder.c: * above. Note that a custom element in a <child> element gets parsed by
/tmp/gtk/gtk/gtkbuilder.c: * an <object> element gets parsed by the custom tag handler of the object.
/tmp/gtk/gtk/gtkbuildable.h: * reference a widget created in a <ui> tag which is outside
/tmp/gtk/gtk/gtkbuildable.h: * content below <child>. To handle an element, the implementation
/tmp/gtk/gtk/gtkbuildable.h: * in <accessibility> elements.
/tmp/gtk/gtk/gtkbuildable.c: * of the <object> tag used to construct the @buildable.
/tmp/gtk/gtk/gtkbuildable.c: * This is called for each unknown element under <child>.
/tmp/gtk/gtk/gtkaccelgroup.c: * The format looks like “`<Control>a`” or “`<Shift><Alt>F1`”.
/tmp/gtk/gtk/deprecated/gtktreestore.c: * to specify the model columns with a <columns> element that may contain
/tmp/gtk/gtk/deprecated/gtktreestore.c: * multiple <column> elements, each specifying one model column. The “type”
/tmp/gtk/gtk/deprecated/gtktreestore.c: * <columns>
/tmp/gtk/gtk/deprecated/gtktreestore.c: * <column type="..."/>
/tmp/gtk/gtk/deprecated/gtktreestore.c: * <column type="..."/>
/tmp/gtk/gtk/deprecated/gtktreestore.c: * </columns>
/tmp/gtk/gtk/deprecated/gtkliststore.c: * <columns>
/tmp/gtk/gtk/deprecated/gtkliststore.c: * <column type="..."/>
/tmp/gtk/gtk/deprecated/gtkliststore.c: * <column type="..."/>
/tmp/gtk/gtk/deprecated/gtkliststore.c: * </columns>
/tmp/gtk/gtk/deprecated/gtkdialog.c: * <child type="action"> or by moving an action area child
/tmp/gtk/gtk/deprecated/gtkcomboboxtext.c: * adding items directly using the <items> element and specifying <item>
/tmp/gtk/gtk/deprecated/gtkcomboboxtext.c: * adding items directly using the <items> element and specifying <item>
/tmp/gtk/gtk/deprecated/gtkcomboboxtext.c: * elements for each item. Each <item> element can specify the “id”
/tmp/gtk/gtk/css/gtkcssparser.c: * If the parser matches the <url> token from the [CSS
/tmp/gtk/gtk/css/gtkcssdataurl.c: * data:[<mediatype>][;base64],<data>
/tmp/gtk/gtk/css/gtkcssdataurl.c: * data:[<mediatype>][;base64],<data>
/tmp/gtk/gdk/x11/gdkkeys-x11.c: * However, <shift>Tab is not usually GDK_KEY_ISO_Left_Tab without XKB,
/tmp/gtk/gdk/x11/gdkkeys-x11.c: * is bound to Shift+<whatever>, and it appears as though it
/tmp/gtk/gdk/x11/gdkdisplay-x11.c: * states that the startup_id is of the form <unique>_TIME<timestamp>
/tmp/gtk/gdk/x11/gdkdisplay-x11.c: * states that the startup_id is of the form <unique>_TIME<timestamp>
/tmp/gtk/gdk/win32/pktdef.h: b. Define <PACKETNAME>PACKETDATA and <PACKETNAME>PACKETMODE similar to
/tmp/gtk/gdk/win32/pktdef.h: b. Define <PACKETNAME>PACKETDATA and <PACKETNAME>PACKETMODE similar to
/tmp/gtk/gdk/win32/pktdef.h: <PACKETNAME>PACKET. Compare with 2.c. above and example #2 below.
/tmp/gtk/gdk/win32/pktdef.h: a. Before including pktdef.h, define <PACKETNAME>PACKET<EXTENSION>
/tmp/gtk/gdk/win32/pktdef.h: a. Before including pktdef.h, define <PACKETNAME>PACKET<EXTENSION>
/tmp/gtk/gdk/win32/pktdef.h: d. OR the packet mask bit with <PACKETNAME>PACKETDATA and use the
/tmp/gtk/gdk/win32/pktdef.h: e. If <PACKETNAME>PACKET<EXTENSION> was PKEXT_RELATIVE, OR the
/tmp/gtk/gdk/win32/pktdef.h: e. If <PACKETNAME>PACKET<EXTENSION> was PKEXT_RELATIVE, OR the
/tmp/gtk/gdk/win32/pktdef.h: packet mask bit with <PACKETNAME>PACKETMODE and use the result
/tmp/gtk/gdk/win32/pktdef.h: #include <wintab.h>
/tmp/gtk/gdk/win32/pktdef.h: #include <pktdef.h>
/tmp/gtk/gdk/win32/pktdef.h: #include <wintab.h>
/tmp/gtk/gdk/win32/pktdef.h: #include <pktdef.h>
/tmp/gtk/gdk/win32/pktdef.h: #include <pktdef.h>
/tmp/gtk/gdk/win32/pktdef.h: #include <pktdef.h>
/tmp/gtk/gdk/win32/pktdef.h: #include <wintab.h>
/tmp/gtk/gdk/win32/pktdef.h: #include <pktdef.h>
/tmp/gtk/gdk/win32/gdksurface-win32.c: /* DON'T set CS_<H,V>REDRAW. It causes total redraw
/tmp/gtk/gdk/win32/gdksurface-win32.c: /* DON'T set CS_<H,V>REDRAW. It causes total redraw
/tmp/gtk/gdk/win32/gdkclipdrop-win32.c: * to the array of W32 format <-> GDK content format pairs
/tmp/gtk/gdk/wayland/cursor/xcursor.c: * <extra type-specific header fields>
/tmp/gtk/gdk/wayland/cursor/xcursor.c: * <type-specific data>
/tmp/gtk/gdk/macos/gdkmacoskeymap.c: * The rationale of these key codes is <HIToolbox/Events.h> in Carbon.
/tmp/gtk/gdk/macos/gdkmacoskeymap.c: /* Although These keys are also defined in <HIToolbox/Events.h>, they can be
/tmp/gtk/gdk/macos/gdkmacoskeymap.c: /* A few <Shift><Option>keys return two characters,
/tmp/gtk/gdk/macos/gdkmacoskeymap.c: /* A few <Shift><Option>keys return two characters,
/tmp/gtk/gdk/gdkkeyuni.c: /* Thanks to Markus G. Kuhn <mkuhn@acm.org> for the ksysym<->Unicode
/tmp/gtk/gdk/gdkkeys.c: * modifiers removed. Store `<Control>plus`, not `<Control><Shift>plus`,
/tmp/gtk/gdk/gdkevents.c: * shortcuts for either <Control><Shift>plus or <Control>plus to match.
/tmp/gtk/gdk/gdkevents.c: * shortcuts for either <Control><Shift>plus or <Control>plus to match.
/tmp/gtk/gdk/gdkevents.c: * shortcuts for either <Control><Shift>plus or <Control>plus to match.
/tmp/gtk/gdk/gdkevents.c: * trigger shortcuts for <Control>x, not for <Control><Shift>x.
/tmp/gtk/gdk/gdkevents.c: * trigger shortcuts for <Control>x, not for <Control><Shift>x.
/tmp/gtk/gdk/gdkevents.c: * trigger shortcuts for <Control>x, not for <Control><Shift>x.
/tmp/gtk/demos/gtk-demo/listview_clocks.c: * help of the <binding> tag, but this demo shows the code that runs