diff --git a/CHANGES.md b/CHANGES.md
index e5bd15c3..583df9e4 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -11,6 +11,8 @@ This file describes changes in the AutoDoc package.
- Only document the first declaration immediately following an AutoDoc
source comment block; later consecutive declarations now require their
own `#!` comment block
+ - When documenting an `InstallMethod`, we now use the item type `Meth`
+ instead of `Oper`
+ **New Features**
- Add `nopdf` as a global option, and document the existing `NOPDF`
@@ -19,6 +21,8 @@ This file describes changes in the AutoDoc package.
`@Chapter`/`@Section`/`@Subsection` in `.autodoc` files and doc comments
- Add support for documenting `DeclareSynonym` and
`DeclareSynonymAttr` declarations
+ - Add `@ItemType` to override the type of a declaration, which is
+ especially useful for `DeclareSynonym` or `DeclareGlobalName`
- Add fenced code blocks using triple backticks or tildes in
Markdown-like text; `@listing`, `@example`, and `@log` info strings
select the corresponding GAPDoc element
@@ -31,6 +35,9 @@ This file describes changes in the AutoDoc package.
nested source directories are picked up automatically
+ **Other Changes**
+ - Improve `DeclareGlobalName` handling: document it as a variable by
+ default, but switch to a function when `@Arguments` or `@Returns`
+ provides function-style documentation
- Ignore trailing blank lines after single-line worksheet title-page
commands such as `@Title`, `@Subtitle`, `@Version`, `@Author`, and
`@Date`, and trim trailing blank lines from generated title-page
@@ -53,12 +60,7 @@ This file describes changes in the AutoDoc package.
`@Command` does not start at column 1
- Normalize parsed `InstallMethod` names by stripping surrounding
quotes, matching `Declare...` handling
- - Document `InstallMethod` support in declaration comments and add
- `@ItemType` to override whether an installed method should be
- documented as `Func`, `Oper`, `Attr`, or `Prop`
- - Improve `DeclareGlobalName` handling: document it as a variable by
- default, but switch to a function when `@Arguments` or `@Returns`
- provides function-style documentation
+ - Document `InstallMethod` support in declaration comments
- Loosen requirements on `@Date` command: this used to allow free form,
but in recent versions was restricted to dates of the form YYYY-MM-DD
or DD/MM/YYYY; now we again allow any text, but text in those specific
diff --git a/doc/Comments.autodoc b/doc/Comments.autodoc
index b58122a3..219426b4 100644
--- a/doc/Comments.autodoc
+++ b/doc/Comments.autodoc
@@ -90,18 +90,19 @@ function or a variable.
@Index "@ItemType" @ItemType kind
Overrides the kind of manual item created for the following declaration or
-installed method. The supported values are Attr, Filt,
-Func, Oper, Prop, and Var.
+installed method. The supported values are Attr, Cat,
+Coll, Constr, Fam, Filt, Func,
+InfoClass, Meth, Oper, Prop, Repr,
+and Var.
-This is mainly useful for InstallMethod, DeclareGlobalName, and
-DeclareSynonym. For other declarations such as DeclareAttribute
-or DeclareProperty, &AutoDoc; already knows the correct item type from
-the declaration itself.
+The values Cat, Coll, and Repr are &AutoDoc;-specific
+aliases. They emit Filt entries with the corresponding &GAPDoc; filter
+type.
-But for InstallMethod, especially with one argument, the source code
-alone does not reliably tell whether the method belongs to an operation, an
-attribute, a property, or even a plain function. Without an override, such
-entries default to Oper.
+This is useful when the source code alone does not determine which manual item
+kind should be emitted. For many declarations such as DeclareAttribute
+or DeclareProperty, &AutoDoc; already knows the intended type from the
+declaration itself.
It is useful for DeclareGlobalName, because that declaration can
refer to either a function or a variable. &AutoDoc; defaults such entries to
@@ -110,18 +111,19 @@ refer to either a function or a variable. &AutoDoc; defaults such entries to
@ItemType to override this explicitly.
It is useful for DeclareSynonym, because that declaration can
-document a function synonym or a filter synonym. Use @ItemType Filt if
-the synonym should be emitted as a filter-style manual entry.
+document a function synonym or one of several filter-like synonyms. Use
+@ItemType Filt, Cat, Coll, or Repr to control which
+kind of filter entry should be emitted.
For example:
```@listing
-#! @ItemType Attr
-InstallMethod( SomeAttribute, [ IsGroup ], G -> G );
+#! @ItemType Repr
+DeclareSynonym( "IsSomethingRep", IsComponentObjectRep );
```
-This makes &AutoDoc; emit an <Attr .../> manual entry instead of
-the default <Oper .../>.
+This makes &AutoDoc; emit a
+<Filt Type="Representation" .../> manual entry.
@Subsection @Group grpname
@SubsectionLabel @Group
diff --git a/gap/AutoDocMainFunction.gi b/gap/AutoDocMainFunction.gi
index f6c3392b..80215fc5 100644
--- a/gap/AutoDocMainFunction.gi
+++ b/gap/AutoDocMainFunction.gi
@@ -47,8 +47,12 @@ InstallGlobalFunction( CreateDefaultChapterData,
chapter_name := Concatenation( pkgname, "_automatic_generated_documentation" );
default_chapter_record := rec();
- list_of_types := [ "categories", "methods", "attributes", "properties",
- "global_functions", "global_variables", "info_classes" ];
+ list_of_types := Set(
+ List(
+ RecNames( AUTODOC_ITEM_TYPE_INFO ),
+ n -> AUTODOC_ITEM_TYPE_INFO.( n ).chapter_bucket
+ )
+ );
for i in list_of_types do
default_chapter_record.(i) := [ chapter_name, Concatenation( chapter_name, "_of_", i ) ];
diff --git a/gap/Parser.gd b/gap/Parser.gd
index edc4a7c1..a5eb1fdb 100644
--- a/gap/Parser.gd
+++ b/gap/Parser.gd
@@ -8,5 +8,7 @@
DeclareGlobalFunction( "Scan_for_AutoDoc_Part" );
DeclareGlobalFunction( "AutoDoc_Type_Of_Item" );
+DeclareGlobalVariable( "AUTODOC_ITEM_TYPE_INFO" );
+
## Argument should be a filename
DeclareGlobalFunction( "AutoDoc_Parser_ReadFiles" );
diff --git a/gap/Parser.gi b/gap/Parser.gi
index 11d15ef3..2c08bfde 100644
--- a/gap/Parser.gi
+++ b/gap/Parser.gi
@@ -5,6 +5,68 @@
#
# SPDX-License-Identifier: GPL-2.0-or-later
+##
+InstallValue( AUTODOC_ITEM_TYPE_INFO, rec(
+ Attr := rec(
+ chapter_bucket := "attributes",
+ is_function_like := true
+ ),
+ Cat := rec(
+ chapter_bucket := "categories",
+ filter_type := "Category",
+ item_type_override := "Filt",
+ is_function_like := true
+ ),
+ Coll := rec(
+ chapter_bucket := "collections",
+ filter_type := "Collection",
+ item_type_override := "Filt",
+ is_function_like := true
+ ),
+ Constr := rec(
+ chapter_bucket := "methods",
+ is_function_like := true
+ ),
+ Fam := rec(
+ chapter_bucket := "global_variables",
+ is_function_like := false
+ ),
+ Filt := rec(
+ chapter_bucket := "filters",
+ is_function_like := true
+ ),
+ Func := rec(
+ chapter_bucket := "global_functions",
+ is_function_like := true
+ ),
+ InfoClass := rec(
+ chapter_bucket := "info_classes",
+ is_function_like := false
+ ),
+ Meth := rec(
+ chapter_bucket := "methods",
+ is_function_like := true
+ ),
+ Oper := rec(
+ chapter_bucket := "methods",
+ is_function_like := true
+ ),
+ Prop := rec(
+ chapter_bucket := "properties",
+ is_function_like := true
+ ),
+ Repr := rec(
+ chapter_bucket := "representations",
+ filter_type := "Representation",
+ item_type_override := "Filt",
+ is_function_like := true
+ ),
+ Var := rec(
+ chapter_bucket := "global_variables",
+ is_function_like := false
+ )
+));
+
##
BindGlobal( "AUTODOC_PositionPrefixShebang",
function( line )
@@ -130,113 +192,93 @@ end );
##
InstallGlobalFunction( AutoDoc_Type_Of_Item,
function( current_item, type, default_chapter_data )
- local item_rec, entries, filter_style, ret_val;
+ local item_rec, filter_style, default_type, item_type, item_type_info,
+ default_boolean_return;
item_rec := current_item;
+ default_boolean_return := "true or false";
if PositionSublist( type, "DeclareCategoryCollections") <> fail then
- entries := [ "Filt", "categories" ];
- ret_val := "true or false";
+ default_type := "Coll";
filter_style := "none";
if not IsBound( item_rec!.arguments ) then
item_rec!.arguments := "obj";
fi;
item_rec!.coll_suffix := true;
elif PositionSublist( type, "DeclareCategory" ) <> fail then
- entries := [ "Filt", "categories" ];
- ret_val := "true or false";
+ default_type := "Cat";
filter_style := "single";
elif PositionSublist( type, "DeclareRepresentation" ) <> fail then
- entries := [ "Filt", "categories" ];
- ret_val := "true or false";
+ default_type := "Repr";
filter_style := "single";
elif PositionSublist( type, "DeclareAttribute" ) <> fail then
- entries := [ "Attr", "attributes" ];
+ default_type := "Attr";
filter_style := "single";
elif PositionSublist( type, "DeclareSynonymAttr" ) <> fail then
- entries := [ "Attr", "attributes" ];
+ default_type := "Attr";
filter_style := "none";
- if not IsBound( item_rec!.arguments ) then
- item_rec!.arguments := "arg";
- fi;
elif PositionSublist( type, "DeclareProperty" ) <> fail then
- entries := [ "Prop", "properties" ];
- ret_val := "true or false";
+ default_type := "Prop";
filter_style := "single";
elif PositionSublist( type, "DeclareSynonym" ) <> fail then
+ default_type := "Func";
filter_style := "none";
- if IsBound( item_rec!.item_type ) and item_rec!.item_type = "Attr" then
- entries := [ "Attr", "attributes" ];
- elif IsBound( item_rec!.item_type ) and item_rec!.item_type = "Prop" then
- entries := [ "Prop", "properties" ];
- ret_val := "true or false";
- elif IsBound( item_rec!.item_type ) and item_rec!.item_type = "Filt" then
- entries := [ "Filt", "categories" ];
- ret_val := "true or false";
- elif IsBound( item_rec!.item_type ) and item_rec!.item_type = "Oper" then
- entries := [ "Oper", "methods" ];
- elif IsBound( item_rec!.item_type ) and item_rec!.item_type = "Var" then
- entries := [ "Var", "global_variables" ];
- item_rec!.arguments := fail;
- item_rec!.return_value := false;
- else
- entries := [ "Func", "global_functions" ];
- fi;
- if entries[ 1 ] in [ "Func", "Oper", "Attr", "Prop", "Filt" ] and
- not IsBound( item_rec!.arguments ) then
- item_rec!.arguments := "arg";
- fi;
elif PositionSublist( type, "DeclareOperation" ) <> fail then
- entries := [ "Oper", "methods" ];
+ default_type := "Oper";
filter_style := "list";
elif PositionSublist( type, "DeclareConstructor" ) <> fail then
- entries := [ "Constr", "methods" ];
+ default_type := "Constr";
filter_style := "list";
elif PositionSublist( type, "DeclareGlobalFunction" ) <> fail then
- entries := [ "Func", "global_functions" ];
+ default_type := "Func";
filter_style := "none";
- if not IsBound( item_rec!.arguments ) then
- item_rec!.arguments := "arg";
- fi;
elif PositionSublist( type, "DeclareGlobalVariable" ) <> fail then
- entries := [ "Var", "global_variables" ];
+ default_type := "Var";
filter_style := "none";
- item_rec!.arguments := fail;
- item_rec!.return_value := false;
elif PositionSublist( type, "DeclareGlobalName" ) <> fail then
+ default_type := "Var";
filter_style := "none";
- if ( IsBound( item_rec!.item_type ) and item_rec!.item_type <> "Var" ) or
- ( IsBound( item_rec!.declareglobalname_is_function ) and
- item_rec!.declareglobalname_is_function ) then
- entries := [ "Func", "global_functions" ];
- if not IsBound( item_rec!.arguments ) then
- item_rec!.arguments := "arg";
- fi;
- else
- entries := [ "Var", "global_variables" ];
- item_rec!.arguments := fail;
- item_rec!.return_value := false;
+ if IsBound( item_rec!.declaration_is_function ) and
+ item_rec!.declaration_is_function then
+ default_type := "Func";
fi;
elif PositionSublist( type, "DeclareFilter" ) <> fail then
- entries := [ "Filt", "properties" ];
+ default_type := "Filt";
filter_style := "none";
- item_rec!.arguments := fail;
- item_rec!.return_value := false;
elif PositionSublist( type, "DeclareInfoClass" ) <> fail then
- entries := [ "InfoClass", "info_classes" ];
+ default_type := "InfoClass";
filter_style := "none";
- item_rec!.arguments := fail;
- item_rec!.return_value := false;
elif PositionSublist( type, "KeyDependentOperation" ) <> fail then
- entries := [ "Oper", "methods" ];
+ default_type := "Oper";
filter_style := "pair";
else
return fail;
fi;
- item_rec!.item_type := entries[ 1 ];
+
+ if IsBound( item_rec!.item_type ) then
+ item_type := StripBeginEnd( item_rec!.item_type, " \t\r\n" );
+ else
+ item_type := default_type;
+ fi;
+ if not IsBound( AUTODOC_ITEM_TYPE_INFO.( item_type ) ) then
+ return fail;
+ fi;
+ item_type_info := AUTODOC_ITEM_TYPE_INFO.( item_type );
+ item_rec!.item_type := item_type;
+
if not IsBound( item_rec!.chapter_info ) or item_rec!.chapter_info = [ ] then
- item_rec!.chapter_info := default_chapter_data.( entries[ 2 ] );
+ item_rec!.chapter_info :=
+ default_chapter_data.( item_type_info.chapter_bucket );
fi;
- if IsBound( ret_val ) and ( item_rec!.return_value = [ ] or item_rec!.return_value = false ) then
- item_rec!.return_value := [ ret_val ];
+
+ if item_type in [ "Cat", "Coll", "Filt", "Prop", "Repr" ] and
+ ( item_rec!.return_value = [ ] or item_rec!.return_value = false ) then
+ item_rec!.return_value := [ default_boolean_return ];
+ fi;
+ if filter_style = "none" and item_type_info.is_function_like and
+ not IsBound( item_rec!.arguments ) then
+ item_rec!.arguments := "arg";
+ elif filter_style = "none" and not item_type_info.is_function_like then
+ item_rec!.arguments := fail;
+ item_rec!.return_value := false;
fi;
return filter_style;
end );
@@ -462,14 +504,19 @@ InstallGlobalFunction( AutoDoc_Parser_ReadFiles,
fi;
end;
NormalizeItemType := function( item_type )
+ local supported_types;
item_type := StripBeginEnd( item_type, " \t\r\n" );
- if item_type in [ "Attr", "Filt", "Func", "Oper", "Prop", "Var" ] then
+ if IsBound( AUTODOC_ITEM_TYPE_INFO.( item_type ) ) then
return item_type;
fi;
+ supported_types := JoinStringsWithSeparator(
+ Set( RecNames( AUTODOC_ITEM_TYPE_INFO ) ),
+ ", "
+ );
ErrorWithPos(
Concatenation(
"unknown @ItemType ", item_type,
- "; expected one of Attr, Filt, Func, Oper, Prop, Var"
+ "; expected one of ", supported_types
)
);
end;
@@ -592,7 +639,7 @@ InstallGlobalFunction( AutoDoc_Parser_ReadFiles,
local filter_string, name, pos;
CurrentOrNewManItem();
if not IsBound( CurrentItem()!.item_type ) then
- CurrentItem()!.item_type := "Oper";
+ CurrentItem()!.item_type := "Meth";
else
CurrentItem()!.item_type := NormalizeItemType(
CurrentItem()!.item_type
@@ -857,7 +904,7 @@ InstallGlobalFunction( AutoDoc_Parser_ReadFiles,
fi;
CurrentItem()!.return_value := [ ];
elif not IsBound( CurrentItem()!.item_type ) then
- CurrentItem()!.declareglobalname_is_function := true;
+ CurrentItem()!.declaration_is_function := true;
fi;
if current_command[ 2 ] <> "" then
Add( CurrentItem(), current_command[ 2 ] );
@@ -868,7 +915,7 @@ InstallGlobalFunction( AutoDoc_Parser_ReadFiles,
if IsBound( CurrentItem()!.item_type ) and CurrentItem()!.item_type = "Var" then
CurrentItem()!.item_type := "Func";
elif not IsBound( CurrentItem()!.item_type ) then
- CurrentItem()!.declareglobalname_is_function := true;
+ CurrentItem()!.declaration_is_function := true;
fi;
CurrentItem()!.arguments := current_command[ 2 ];
end,
diff --git a/gap/ToolFunctions.gi b/gap/ToolFunctions.gi
index 896381b6..ba0ebc90 100644
--- a/gap/ToolFunctions.gi
+++ b/gap/ToolFunctions.gi
@@ -63,7 +63,8 @@ end );
##
InstallGlobalFunction( AutoDoc_WriteDocEntry,
function( filestream, list_of_records, heading )
- local return_value, description, current_description, labels, i;
+ local return_value, description, current_description, labels, i,
+ item_type_info;
# look for a good return value (it should be the same everywhere)
for i in list_of_records do
@@ -122,10 +123,18 @@ InstallGlobalFunction( AutoDoc_WriteDocEntry,
# Function headers
for i in list_of_records do
- AppendTo( filestream, " <", i!.item_type, " " );
- if i!.arguments <> fail and i!.item_type <> "Var" then
+ item_type_info := AUTODOC_ITEM_TYPE_INFO.( i!.item_type );
+ if IsBound( item_type_info.item_type_override ) then
+ AppendTo( filestream, " <", item_type_info.item_type_override, " " );
+ else
+ AppendTo( filestream, " <", i!.item_type, " " );
+ fi;
+ if item_type_info.is_function_like and i!.arguments <> fail then
AppendTo( filestream, "Arg=\"", i!.arguments, "\" " );
fi;
+ if IsBound( item_type_info.filter_type ) then
+ AppendTo( filestream, "Type=\"", item_type_info.filter_type, "\" " );
+ fi;
AppendTo( filestream, "Name=\"", i!.name, "\" " );
if i!.tester_names <> fail and i!.tester_names <> "" then
AppendTo( filestream, "Label=\"", i!.tester_names, "\"" );
diff --git a/tst/AutoDocTest/tst/manual.expected/_Chapter_SourceAPI.xml b/tst/AutoDocTest/tst/manual.expected/_Chapter_SourceAPI.xml
index 7f7d6ef1..e310947c 100644
--- a/tst/AutoDocTest/tst/manual.expected/_Chapter_SourceAPI.xml
+++ b/tst/AutoDocTest/tst/manual.expected/_Chapter_SourceAPI.xml
@@ -83,7 +83,7 @@
A method installation without an itemtype
-
+
diff --git a/tst/errorwithpos.tst b/tst/errorwithpos.tst
index 4489f895..07cf9e2a 100644
--- a/tst/errorwithpos.tst
+++ b/tst/errorwithpos.tst
@@ -89,8 +89,8 @@ gap> ParseFixture( "tst/errorwithpos/installmethod-unterminated-arguments.g" );
Error, unterminated argument list in InstallMethod declaration,
at tst/errorwithpos/installmethod-unterminated-arguments.g:4
gap> ParseFixture( "tst/errorwithpos/itemtype-unknown.g" );
-Error, unknown @ItemType Method; expected one of Attr, Filt, Func, Oper, Prop,\
- Var,
+Error, unknown @ItemType Method; expected one of Attr, Cat, Coll, Constr, Fam,\
+ Filt, Func, InfoClass, Meth, Oper, Prop, Repr, Var,
at tst/errorwithpos/itemtype-unknown.g:3
#
diff --git a/tst/manual.expected/_Chapter_Comments.xml b/tst/manual.expected/_Chapter_Comments.xml
index 459dc547..a6690c1f 100644
--- a/tst/manual.expected/_Chapter_Comments.xml
+++ b/tst/manual.expected/_Chapter_Comments.xml
@@ -104,18 +104,19 @@ function or a variable.
@ItemType kind
Overrides the kind of manual item created for the following declaration or
-installed method. The supported values are Attr, Filt,
-Func, Oper, Prop, and Var.
+installed method. The supported values are Attr, Cat,
+Coll, Constr, Fam, Filt, Func,
+InfoClass, Meth, Oper, Prop, Repr,
+and Var.
-This is mainly useful for InstallMethod, DeclareGlobalName, and
-DeclareSynonym. For other declarations such as DeclareAttribute
-or DeclareProperty, &AutoDoc; already knows the correct item type from
-the declaration itself.
+The values Cat, Coll, and Repr are &AutoDoc;-specific
+aliases. They emit Filt entries with the corresponding &GAPDoc; filter
+type.
-But for InstallMethod, especially with one argument, the source code
-alone does not reliably tell whether the method belongs to an operation, an
-attribute, a property, or even a plain function. Without an override, such
-entries default to Oper.
+This is useful when the source code alone does not determine which manual item
+kind should be emitted. For many declarations such as DeclareAttribute
+or DeclareProperty, &AutoDoc; already knows the intended type from the
+declaration itself.
It is useful for DeclareGlobalName, because that declaration can
refer to either a function or a variable. &AutoDoc; defaults such entries to
@@ -124,18 +125,19 @@ refer to either a function or a variable. &AutoDoc; defaults such entries to
@ItemType to override this explicitly.
It is useful for DeclareSynonym, because that declaration can
-document a function synonym or a filter synonym. Use @ItemType Filt if
-the synonym should be emitted as a filter-style manual entry.
+document a function synonym or one of several filter-like synonyms. Use
+@ItemType Filt, Cat, Coll, or Repr to control which
+kind of filter entry should be emitted.
For example:
G );
+#! @ItemType Repr
+DeclareSynonym( "IsSomethingRep", IsComponentObjectRep );
]]>
-This makes &AutoDoc; emit an <Attr .../> manual entry instead of
-the default <Oper .../>.
+This makes &AutoDoc; emit a
+<Filt Type="Representation" .../> manual entry.
diff --git a/tst/worksheets.tst b/tst/worksheets.tst
index 4232bc6c..23048599 100644
--- a/tst/worksheets.tst
+++ b/tst/worksheets.tst
@@ -20,8 +20,8 @@ gap> AUTODOC_TestWorkSheet("consecutive-declarations");
#I no examples
#
-gap> AUTODOC_TestWorkSheet("synonyms");
-#I Extracting manual examples for Synonym Declarations Test package ...
+gap> AUTODOC_TestWorkSheet("item-type-metadata");
+#I Extracting manual examples for Item Type Metadata Test package ...
#I 1 chapters detected
#I Chapter 1...
#I no examples
diff --git a/tst/worksheets/general.expected/_Chapter_SomeChapter.xml b/tst/worksheets/general.expected/_Chapter_SomeChapter.xml
index 3dc96a40..6366f069 100644
--- a/tst/worksheets/general.expected/_Chapter_SomeChapter.xml
+++ b/tst/worksheets/general.expected/_Chapter_SomeChapter.xml
@@ -39,7 +39,7 @@ gap> comment_mode_value := 6 *
Intro text
-
+
true or false
@@ -48,7 +48,7 @@ gap> comment_mode_value := 6 *
-
+
true or false
@@ -57,7 +57,7 @@ gap> comment_mode_value := 6 *
-
+
true or false
@@ -135,7 +135,7 @@ This text will only appear in the HTML version and the text version.
Testing various kinds of documentation
-
+
true or false
@@ -144,7 +144,7 @@ This text will only appear in the HTML version and the text version.
-
+
true or false
@@ -214,7 +214,9 @@ This text will only appear in the HTML version and the text version.
-
+
+ true or false
+
A filter
diff --git a/tst/worksheets/synonyms.expected/Synonym_Declarations_Test.xml b/tst/worksheets/item-type-metadata.expected/Item_Type_Metadata_Test.xml
similarity index 87%
rename from tst/worksheets/synonyms.expected/Synonym_Declarations_Test.xml
rename to tst/worksheets/item-type-metadata.expected/Item_Type_Metadata_Test.xml
index 6dd264b1..873f348c 100644
--- a/tst/worksheets/synonyms.expected/Synonym_Declarations_Test.xml
+++ b/tst/worksheets/item-type-metadata.expected/Item_Type_Metadata_Test.xml
@@ -6,7 +6,7 @@
<#Include SYSTEM "_entities.xml">
]
>
-
+
<#Include SYSTEM "title.xml">
diff --git a/tst/worksheets/synonyms.expected/_AutoDocMainFile.xml b/tst/worksheets/item-type-metadata.expected/_AutoDocMainFile.xml
similarity index 63%
rename from tst/worksheets/synonyms.expected/_AutoDocMainFile.xml
rename to tst/worksheets/item-type-metadata.expected/_AutoDocMainFile.xml
index 38fccd5d..4a3c524f 100644
--- a/tst/worksheets/synonyms.expected/_AutoDocMainFile.xml
+++ b/tst/worksheets/item-type-metadata.expected/_AutoDocMainFile.xml
@@ -1,4 +1,4 @@
-<#Include SYSTEM "_Chapter_Synonyms_Chapter.xml">
+<#Include SYSTEM "_Chapter_Item_Types_Chapter.xml">
diff --git a/tst/worksheets/item-type-metadata.expected/_Chapter_Item_Types_Chapter.xml b/tst/worksheets/item-type-metadata.expected/_Chapter_Item_Types_Chapter.xml
new file mode 100644
index 00000000..62925244
--- /dev/null
+++ b/tst/worksheets/item-type-metadata.expected/_Chapter_Item_Types_Chapter.xml
@@ -0,0 +1,99 @@
+
+
+
+
+Item Types Chapter
+
+
+Type Overrides
+
+ Worksheet regression for item-type metadata and issue #174.
+
+
+
+ A synonym documented as a function by default.
+
+
+
+
+
+ true or false
+
+
+ A synonym documented as a filter.
+
+
+
+
+
+ true or false
+
+
+ A synonym documented as a category.
+
+
+
+
+
+ true or false
+
+
+ A synonym documented as a collection.
+
+
+
+
+
+ true or false
+
+
+ A synonym documented as a representation.
+
+
+
+
+
+
+ A family-like global name.
+
+
+
+
+
+
+ An info class-like global name.
+
+
+
+
+
+
+ A method documented as a method by default.
+
+
+
+
+
+
+ A method documented as a constructor.
+
+
+
+
+
+
+ An explicit method override.
+
+
+
+
+
+
+ A synonym attribute.
+
+
+
+
+
+
+
diff --git a/tst/worksheets/synonyms.expected/_Chunks.xml b/tst/worksheets/item-type-metadata.expected/_Chunks.xml
similarity index 100%
rename from tst/worksheets/synonyms.expected/_Chunks.xml
rename to tst/worksheets/item-type-metadata.expected/_Chunks.xml
diff --git a/tst/worksheets/item-type-metadata.expected/_entities.xml b/tst/worksheets/item-type-metadata.expected/_entities.xml
new file mode 100644
index 00000000..ef693734
--- /dev/null
+++ b/tst/worksheets/item-type-metadata.expected/_entities.xml
@@ -0,0 +1 @@
+Item_Type_Metadata_Test'>
diff --git a/tst/worksheets/synonyms.expected/title.xml b/tst/worksheets/item-type-metadata.expected/title.xml
similarity index 85%
rename from tst/worksheets/synonyms.expected/title.xml
rename to tst/worksheets/item-type-metadata.expected/title.xml
index cabcf678..57edf4d2 100644
--- a/tst/worksheets/synonyms.expected/title.xml
+++ b/tst/worksheets/item-type-metadata.expected/title.xml
@@ -3,7 +3,7 @@
- Synonym Declarations Test
+ Item Type Metadata Test
12 March 2026
diff --git a/tst/worksheets/item-type-metadata.sheet/worksheet.g b/tst/worksheets/item-type-metadata.sheet/worksheet.g
new file mode 100644
index 00000000..4e68fd8a
--- /dev/null
+++ b/tst/worksheets/item-type-metadata.sheet/worksheet.g
@@ -0,0 +1,69 @@
+#! @Title Item Type Metadata Test
+#! @Date 2026-03-12
+#! @Chapter Item Types Chapter
+#! @Section Type Overrides
+#! Worksheet regression for item-type metadata and issue #174.
+
+#! @Description
+#! A synonym documented as a function by default.
+DeclareSynonym( "SomeFunctionAlias", SomeFunction );
+
+#! @Description
+#! @ItemType Filt
+#! A synonym documented as a filter.
+DeclareSynonym( "IsSomeFilterAlias", IsObject );
+
+#! @Description
+#! @ItemType Cat
+#! A synonym documented as a category.
+DeclareSynonym( "IsSomeCategoryAlias", IsObject );
+
+#! @Description
+#! @ItemType Coll
+#! A synonym documented as a collection.
+DeclareSynonym( "IsSomeCollectionAlias", IsObject );
+
+#! @Description
+#! @ItemType Repr
+#! A synonym documented as a representation.
+DeclareSynonym( "IsSomeRepresentationAlias", IsComponentObjectRep );
+
+#! @Description
+#! A family-like global name.
+#! @ItemType Fam
+DeclareGlobalName( "SomeFamilyAlias" );
+
+#! @Description
+#! An info class-like global name.
+#! @ItemType InfoClass
+DeclareGlobalName( "SomeInfoClassAlias" );
+
+#! @Description
+#! A method documented as a method by default.
+InstallMethod( "SomeInstalledMethod",
+ [ IsObject, IsInt ],
+ function( obj, n )
+ return obj;
+ end );
+
+#! @Description
+#! @ItemType Constr
+#! A method documented as a constructor.
+InstallMethod( "SomeInstalledConstructor",
+ [ IsObject ],
+ function( obj )
+ return obj;
+ end );
+
+#! @Description
+#! @ItemType Meth
+#! An explicit method override.
+InstallMethod( "SomeExplicitMethod",
+ [ IsObject ],
+ function( obj )
+ return obj;
+ end );
+
+#! @Description
+#! A synonym attribute.
+DeclareSynonymAttr( "SomeAttributeAlias", SomeAttribute );
diff --git a/tst/worksheets/synonyms.expected/_Chapter_Synonyms_Chapter.xml b/tst/worksheets/synonyms.expected/_Chapter_Synonyms_Chapter.xml
deleted file mode 100644
index 820fd336..00000000
--- a/tst/worksheets/synonyms.expected/_Chapter_Synonyms_Chapter.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-Synonyms Chapter
-
-
-Synonyms Section
-
- Worksheet regression for issue #174.
-
-
-
- A synonym documented as a function by default.
-
-
-
-
-
- true or false
-
-
- A synonym documented as a filter.
-
-
-
-
-
-
- A synonym attribute.
-
-
-
-
-
-
-
diff --git a/tst/worksheets/synonyms.expected/_entities.xml b/tst/worksheets/synonyms.expected/_entities.xml
deleted file mode 100644
index 8bab7bc5..00000000
--- a/tst/worksheets/synonyms.expected/_entities.xml
+++ /dev/null
@@ -1 +0,0 @@
-Synonym_Declarations_Test'>
diff --git a/tst/worksheets/synonyms.sheet/worksheet.g b/tst/worksheets/synonyms.sheet/worksheet.g
deleted file mode 100644
index cb911523..00000000
--- a/tst/worksheets/synonyms.sheet/worksheet.g
+++ /dev/null
@@ -1,18 +0,0 @@
-#! @Title Synonym Declarations Test
-#! @Date 2026-03-12
-#! @Chapter Synonyms Chapter
-#! @Section Synonyms Section
-#! Worksheet regression for issue #174.
-
-#! @Description
-#! A synonym documented as a function by default.
-DeclareSynonym( "SomeFunctionAlias", SomeFunction );
-
-#! @Description
-#! @ItemType Filt
-#! A synonym documented as a filter.
-DeclareSynonym( "IsSomeFilterAlias", IsObject );
-
-#! @Description
-#! A synonym attribute.
-DeclareSynonymAttr( "SomeAttributeAlias", SomeAttribute );