You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2020/06/27 14:01:40 UTC

[isis] branch ISIS-2222 updated (c22e3e1 -> c95b79d)

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a change to branch ISIS-2222
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from c22e3e1  ISIS-2222: working towards more sophisticated asciidoc description handling.
     new 33815fc  ISIS-2222: Asciidoc examples now use the source code directly.
     new c71b819  ISIS-2222: fixes .adoc for Wrapper Character
     new c95b79d  ISIS-2222: fixes .adoc for Wrapper Character

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../dom/_infra/AsciiDocConverterService.java       |   1 +
 .../main/java/demoapp/dom/_infra/TagHandler.java   |   4 +-
 .../dom/homepage/DemoHomePage-description.adoc     |   3 +-
 .../booleans/PrimitiveBooleans-description.adoc    |  82 +----------
 .../booleans/holder/PrimitiveBooleanHolder.java    |   8 ++
 .../PrimitiveBooleanHolder_actionReturning.java    |   7 +-
 ...iveBooleanHolder_mixinPropertyWithCssClass.java |   2 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   5 +-
 .../jdo/PrimitiveBooleanJdoEntity-description.adoc |  24 +---
 .../booleans/jdo/PrimitiveBooleanJdoEntity.java    |  11 +-
 .../vm/PrimitiveBooleanViewModel-description.adoc  |  30 +---
 .../booleans/vm/PrimitiveBooleanViewModel.java     |  11 +-
 .../bytes/PrimitiveBytes-description.adoc          |  82 +----------
 .../bytes/holder/PrimitiveByteHolder.java          |   8 ++
 .../PrimitiveByteHolder_actionReturning.java       |   6 +-
 ...mitiveByteHolder_mixinPropertyWithCssClass.java |   3 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/PrimitiveByteJdoEntity-description.adoc    |  24 +---
 .../bytes/jdo/PrimitiveByteJdoEntity.java          |  11 +-
 .../vm/PrimitiveByteViewModel-description.adoc     |  30 +---
 .../primitive/bytes/vm/PrimitiveByteViewModel.java |  11 +-
 .../chars/PrimitiveChars-description.adoc          |  82 +----------
 .../chars/holder/PrimitiveCharHolder.java          |   8 ++
 .../PrimitiveCharHolder_actionReturning.java       |   6 +-
 ...mitiveCharHolder_mixinPropertyWithCssClass.java |   3 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/PrimitiveCharJdoEntity-description.adoc    |  24 +---
 .../chars/jdo/PrimitiveCharJdoEntity.java          |  11 +-
 .../vm/PrimitiveCharViewModel-description.adoc     |  30 +---
 .../primitive/chars/vm/PrimitiveCharViewModel.java |  11 +-
 .../doubles/PrimitiveDoubles-description.adoc      |  82 +----------
 .../doubles/holder/PrimitiveDoubleHolder.java      |   8 ++
 .../PrimitiveDoubleHolder_actionReturning.java     |   6 +-
 ...tiveDoubleHolder_mixinPropertyWithCssClass.java |   3 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/PrimitiveDoubleJdoEntity-description.adoc  |  24 +---
 .../doubles/jdo/PrimitiveDoubleJdoEntity.java      |  11 +-
 .../vm/PrimitiveDoubleViewModel-description.adoc   |  30 +---
 .../doubles/vm/PrimitiveDoubleViewModel.java       |  11 +-
 .../floats/PrimitiveFloats-description.adoc        |  82 +----------
 .../floats/holder/PrimitiveFloatHolder.java        |   8 ++
 .../PrimitiveFloatHolder_actionReturning.java      |   6 +-
 ...itiveFloatHolder_mixinPropertyWithCssClass.java |   3 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/PrimitiveFloatJdoEntity-description.adoc   |  24 +---
 .../floats/jdo/PrimitiveFloatJdoEntity.java        |  11 +-
 .../vm/PrimitiveFloatViewModel-description.adoc    |  30 +---
 .../floats/vm/PrimitiveFloatViewModel.java         |  11 +-
 .../primitive/ints/PrimitiveInts-description.adoc  |  82 +----------
 .../primitive/ints/holder/PrimitiveIntHolder.java  |   8 ++
 .../holder/PrimitiveIntHolder_actionReturning.java |   6 +-
 ...imitiveIntHolder_mixinPropertyWithCssClass.java |   3 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/PrimitiveIntJdoEntity-description.adoc     |  24 +---
 .../primitive/ints/jdo/PrimitiveIntJdoEntity.java  |  11 +-
 .../ints/vm/PrimitiveIntViewModel-description.adoc |  30 +---
 .../primitive/ints/vm/PrimitiveIntViewModel.java   |  11 +-
 .../longs/PrimitiveLongs-description.adoc          |  82 +----------
 .../longs/holder/PrimitiveLongHolder.java          |   8 ++
 .../PrimitiveLongHolder_actionReturning.java       |   6 +-
 ...mitiveLongHolder_mixinPropertyWithCssClass.java |   3 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/PrimitiveLongJdoEntity-description.adoc    |  24 +---
 .../longs/jdo/PrimitiveLongJdoEntity.java          |  11 +-
 .../vm/PrimitiveLongViewModel-description.adoc     |  30 +---
 .../primitive/longs/vm/PrimitiveLongViewModel.java |  11 +-
 .../shorts/PrimitiveShorts-description.adoc        |  82 +----------
 .../shorts/holder/PrimitiveShortHolder.java        |   8 ++
 .../PrimitiveShortHolder_actionReturning.java      |   6 +-
 ...itiveShortHolder_mixinPropertyWithCssClass.java |   3 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/PrimitiveShortJdoEntity-description.adoc   |  24 +---
 .../shorts/jdo/PrimitiveShortJdoEntity.java        |  11 +-
 .../vm/PrimitiveShortViewModel-description.adoc    |  30 +---
 .../shorts/vm/PrimitiveShortViewModel.java         |  11 +-
 .../characters/WrapperCharacters-description.adoc  |  82 +----------
 .../characters/holder/WrapperCharacterHolder.java  |  10 ++
 .../WrapperCharacterHolder_actionReturning.java    |   6 +-
 ...rCharacterHolder_mixinPropertyWithCssClass.java |   4 +-
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/WrapperCharacterJdoEntity-description.adoc |  29 +---
 .../characters/jdo/WrapperCharacterJdoEntity.java  |  15 +-
 ...WrapperCharacterViewModel-description.ORIG.adoc |  44 ------
 .../vm/WrapperCharacterViewModel-description.adoc  |   3 +-
 .../characters/vm/WrapperCharacterViewModel.java   |   9 +-
 .../src/main/resources/static/css/application.css  | 156 ++++++++++++++++++++-
 .../dom/_infra/ResourceReaderService_Test.java     |  19 ++-
 .../ResourceReaderService_Test-Test1-expected.java |   0
 .../ResourceReaderService_Test-Test1.java          |   0
 89 files changed, 510 insertions(+), 1304 deletions(-)
 delete mode 100644 examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.ORIG.adoc
 copy examples/demo/domain/src/test/resources/demoapp/dom/_infra/{ => subdir}/ResourceReaderService_Test-Test1-expected.java (100%)
 copy examples/demo/domain/src/test/resources/demoapp/dom/_infra/{ => subdir}/ResourceReaderService_Test-Test1.java (100%)


[isis] 03/03: ISIS-2222: fixes .adoc for Wrapper Character

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2222
in repository https://gitbox.apache.org/repos/asf/isis.git

commit c95b79d1aced8d13dd6e3376bdc113b1e7c8dff4
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Jun 27 15:01:14 2020 +0100

    ISIS-2222: fixes .adoc for Wrapper Character
---
 .../dom/homepage/DemoHomePage-description.adoc     |  9 ---
 .../shorts/PrimitiveShorts-description.adoc        |  2 +-
 .../characters/WrapperCharacters-description.adoc  | 82 ++--------------------
 .../characters/holder/WrapperCharacterHolder.java  | 10 +++
 .../WrapperCharacterHolder_actionReturning.java    |  6 +-
 ...rCharacterHolder_mixinPropertyWithCssClass.java |  4 +-
 ...er_updateReadOnlyPropertyPromptStyleInline.java |  3 +-
 .../jdo/WrapperCharacterJdoEntity-description.adoc | 28 +-------
 .../characters/jdo/WrapperCharacterJdoEntity.java  | 15 ++--
 .../vm/WrapperCharacterViewModel-description.adoc  |  2 +-
 .../characters/vm/WrapperCharacterViewModel.java   |  9 +--
 11 files changed, 40 insertions(+), 130 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage-description.adoc
index db42992..0f390d7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage-description.adoc
@@ -17,12 +17,3 @@ Such a home page would have a number of repository services injected into it, in
 It would probably also have the framework's link:https://isis.apache.org/refguide/${ISIS_VERSION}/applib-svc/UserService.html[`UserService`] injected, in order that the information displayed is relevant to the current user.
 As you can see, this app's home page does actually do this, in order to "personalise" the title.
 
-NOTE: this is a note!
-
-TIP: this is a tip!
-
-CAUTION: this is a caution!
-
-IMPORTANT: this is important!
-
-WARNING: this is a warning!
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts-description.adoc
index 9344af8..248a7cd 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts-description.adoc
@@ -25,7 +25,7 @@ Using `@MemberOrder` positions the properties into the appropriate `<field-set>`
 A number of mixin actions contribute through this interface, demonstrate the use of `short` as a parameter and as a return type.
 For example:
 
-* the `updateReadOnlyProperty` action is:
+* the `updateReadOnlyPropertyPromptStyleInline` action is:
 +
 [source,java]
 ----
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/WrapperCharacters-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/WrapperCharacters-description.adoc
index 8c4749e..aae8446 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/WrapperCharacters-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/WrapperCharacters-description.adoc
@@ -13,38 +13,7 @@ These objects both implement a common interface, `WrapperCharacterHolder`:
 
 [source,java]
 ----
-public interface WrapperCharacterHolder {
-
-    Character getReadOnlyProperty();
-    void setReadOnlyProperty(Character c);
-
-    Character getReadOnlyProperty2();
-    void setReadOnlyProperty2(Character c);
-
-    Character getReadWriteProperty();
-    void setReadWriteProperty(Character c);
-
-    @MemberOrder(name = "label-positions", sequence = "1")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
-    default Character getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "2")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
-    default Character getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "3")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
-    default Character getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "4")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
-    default Character getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
-
-}
+include::holder/WrapperCharacterHolder.java[tags=class]
 ----
 
 The default methods have annotations that automatically inherited.
@@ -56,28 +25,11 @@ Using `@MemberOrder` positions the properties into the appropriate `<field-set>`
 A number of mixin actions contribute through this interface, demonstrate the use of `Character` as a parameter and as a return type.
 For example:
 
-* the `updateReadOnlyProperty` action is:
+* the `updateReadOnlyPropertyPromptStyleInline` action is:
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.IDEMPOTENT,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "1"
-)
-@RequiredArgsConstructor
-public class WrapperCharacterHolder_updateReadOnlyProperty {
-
-    private final WrapperCharacterHolder wrapperCharacterHolder;
-
-    public WrapperCharacterHolder act(Character newValue) {
-        wrapperCharacterHolder.setReadOnlyProperty(newValue);
-        return wrapperCharacterHolder;
-    }
-    public Character default0Act() {
-        return wrapperCharacterHolder.getReadOnlyProperty();
-    }
-}
+include::holder/WrapperCharacterHolder_updateReadOnlyPropertyPromptStyleInline.java[tags=class]
 ----
 +
 There are a number of variants of this action, to demonstrate different prompt layouts.
@@ -86,20 +38,7 @@ There are a number of variants of this action, to demonstrate different prompt l
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.SAFE,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "3"
-)
-@RequiredArgsConstructor
-public class WrapperCharacterHolder_actionReturning {
-
-    private final WrapperCharacterHolder wrapperCharacterHolder;
-
-    public Character act() {
-        return wrapperCharacterHolder.getReadOnlyProperty();
-    }
-}
+include::holder/WrapperCharacterHolder_actionReturning.java[tags=class]
 ----
 
 == Mixin properties
@@ -110,18 +49,7 @@ We also use the interface to contribute a number of mixin properties:
 +
 [source,java]
 ----
-@Property()
-@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ")
-@RequiredArgsConstructor
-public class WrapperCharacterHolder_mixinPropertyWithCssClass {
-
-    private final WrapperCharacterHolder wrapperCharacterHolder;
-
-    @MemberOrder(name = "contributed", sequence = "1")
-    public Character prop() {
-        return wrapperCharacterHolder.getReadOnlyProperty();
-    }
-}
+include::holder/WrapperCharacterHolder_mixinPropertyWithCssClass.java[tags=class]
 ----
 +
 TIP: the styling is provided from the `application.css` static resource.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder.java
index 16ce512..978e993 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder.java
@@ -42,29 +42,38 @@ import lombok.extern.log4j.Log4j2;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
+//tag::class[]
 public interface WrapperCharacterHolder {
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     Character getReadOnlyProperty();
     void setReadOnlyProperty(Character c);
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+//tag::class[]
     Character getReadOnlyProperty2();
     void setReadOnlyProperty2(Character c);
 
+//end::class[]
     @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     Character getReadWriteProperty();
     void setReadWriteProperty(Character c);
 
+//end::class[]
     @MemberOrder(name = "editable-properties", sequence = "2") // TODO: doesn't seem to get picked up
     @Property(optionality = Optionality.OPTIONAL)
     @PropertyLayout
+//tag::class[]
     Character getReadWriteOptionalProperty();
     void setReadWriteOptionalProperty(Character c);
 
@@ -89,3 +98,4 @@ public interface WrapperCharacterHolder {
     default Character getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder_actionReturning.java
index 4a3617e..cd79f51 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder_actionReturning.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder_actionReturning.java
@@ -24,9 +24,8 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
-@Action(
-        semantics = SemanticsOf.SAFE
-)
+//tag::class[]
+@Action(semantics = SemanticsOf.SAFE)
 @RequiredArgsConstructor
 public class WrapperCharacterHolder_actionReturning {
 
@@ -37,3 +36,4 @@ public class WrapperCharacterHolder_actionReturning {
     }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder_mixinPropertyWithCssClass.java
index a950970..7ad81bb 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder_mixinPropertyWithCssClass.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder_mixinPropertyWithCssClass.java
@@ -25,7 +25,7 @@ import org.apache.isis.applib.annotation.Where;
 
 import lombok.RequiredArgsConstructor;
 
-
+//tag::class[]
 @Property()
 @PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
 @RequiredArgsConstructor
@@ -37,4 +37,6 @@ public class WrapperCharacterHolder_mixinPropertyWithCssClass {
     public Character prop() {
         return wrapperCharacterHolder.getReadOnlyProperty();
     }
+
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder_updateReadOnlyPropertyPromptStyleInline.java
index 36ee0b5..9a0f1da 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder_updateReadOnlyPropertyPromptStyleInline.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/holder/WrapperCharacterHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT,
         associateWith = "readOnlyProperty",
@@ -45,5 +46,5 @@ public class WrapperCharacterHolder_updateReadOnlyPropertyPromptStyleInline {
         return wrapperCharacterHolder.getReadOnlyProperty();
     }
 
-
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/jdo/WrapperCharacterJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/jdo/WrapperCharacterJdoEntity-description.adoc
index 204249d..3e07343 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/jdo/WrapperCharacterJdoEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/jdo/WrapperCharacterJdoEntity-description.adoc
@@ -2,33 +2,7 @@ JDO supports `Character` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
-@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        objectType = "demo.WrapperCharacterJdoEntity"
-)
-public class WrapperCharacterJdoEntity
-    implements HasAsciiDocDescription, WrapperCharacterHolder {              // <.>
-
-    public WrapperCharacterJdoEntity(Character initialValue) { ... }         // <.>
-
-    @Title(prepend = "Character (wrapper) JDO entity: ")
-    @Getter @Setter
-    private Character readOnlyProperty;                                      // <.>
-
-    @Getter @Setter
-    private Character readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private Character readWriteProperty;
-
-    @Property(editing = Editing.ENABLED, optionality = Optionality.OPTIONAL) // <.>
-    @Column(allowsNull = "true")                                             // <.>
-    @Getter @Setter
-    private Character readWriteOptionalProperty;
-
-}
+include::WrapperCharacterJdoEntity.java[tags=class]
 ----
 <.> a no-arg constructor is introduced by JDO enhancer
 <.> no additional annotations required.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/jdo/WrapperCharacterJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/jdo/WrapperCharacterJdoEntity.java
index e2f4a61..fb46577 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/jdo/WrapperCharacterJdoEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/jdo/WrapperCharacterJdoEntity.java
@@ -38,24 +38,26 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.wrapper.characters.holder.WrapperCharacterHolder;
 
+//tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObject(
         objectType = "demo.WrapperCharacterJdoEntity"
 )
-public class WrapperCharacterJdoEntity
-        implements HasAsciiDocDescription,
-        WrapperCharacterHolder {
+public class WrapperCharacterJdoEntity                                          // <.>
+        implements HasAsciiDocDescription, WrapperCharacterHolder {
 
+//end::class[]
     public WrapperCharacterJdoEntity(Character initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "Character (wrapper) JDO entity: ")
     @Getter @Setter
-    private Character readOnlyProperty;
+    private Character readOnlyProperty;                                         // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -66,9 +68,10 @@ public class WrapperCharacterJdoEntity
     @Getter @Setter
     private Character readWriteProperty;
 
-    @Property(editing = Editing.ENABLED, optionality = Optionality.OPTIONAL)
-    @Column(allowsNull = "true")
+    @Property(editing = Editing.ENABLED, optionality = Optionality.OPTIONAL)    // <.>
+    @Column(allowsNull = "true")                                                // <.>
     @Getter @Setter
     private Character readWriteOptionalProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.adoc
index 1ce108c..55b26f3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.adoc
@@ -2,7 +2,7 @@ JAXB supports `Character` out-of-the-box, so no special annotations are required
 
 [source,java]
 ----
-include::WrapperCharacterViewModel.java[tag="class"]
+include::WrapperCharacterViewModel.java[tags=class]
 ----
 <.> a no-arg constructor is required by JAXB
 <.> no additional annotations required.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel.java
index 3c51ec4..532fee7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel.java
@@ -50,15 +50,16 @@ import demoapp.dom.types.wrapper.characters.holder.WrapperCharacterHolder;
 )
 @lombok.NoArgsConstructor                                                       // <.>
 public class WrapperCharacterViewModel
-        implements HasAsciiDocDescription,
-        WrapperCharacterHolder {
+        implements HasAsciiDocDescription, WrapperCharacterHolder {
 
-    public WrapperCharacterViewModel(Character initialValue) {                  // <.>
+//end::class[]
+    public WrapperCharacterViewModel(Character initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "Character (wrapper) view model: ")
     @XmlElement(required = true)
     @Getter @Setter
@@ -71,7 +72,7 @@ public class WrapperCharacterViewModel
     private Character readOnlyProperty2;
 
     @Property(editing = Editing.ENABLED)
-    @XmlElement(required = true)                                               // <.>
+    @XmlElement(required = true)                                                // <.>
     @Getter @Setter
     private Character readWriteProperty;
 


[isis] 02/03: ISIS-2222: fixes .adoc for Wrapper Character

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2222
in repository https://gitbox.apache.org/repos/asf/isis.git

commit c71b819124022ce44d2017e5d588452417312395
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Jun 27 15:01:02 2020 +0100

    ISIS-2222: fixes .adoc for Wrapper Character
---
 ...WrapperCharacterViewModel-description.ORIG.adoc | 43 ----------------------
 1 file changed, 43 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.ORIG.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.ORIG.adoc
deleted file mode 100644
index f795bdf9..0000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.ORIG.adoc
+++ /dev/null
@@ -1,43 +0,0 @@
-JAXB supports `Character` out-of-the-box, so no special annotations are required.
-
-[source,java]
-----
-@XmlRootElement(name = "demo.WrapperCharacterViewModel")
-@XmlType
-@XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(
-        nature=Nature.VIEW_MODEL,
-        objectType = "demo.WrapperCharacterViewModel"
-)
-@lombok.NoArgsConstructor                                                    // <.>
-public class WrapperCharacterViewModel
-        implements HasAsciiDocDescription, WrapperCharacterHolder {
-
-    public WrapperCharacterViewModel(Character initialValue) {               // <.>
-        // ...
-    }
-
-    @Title(prepend = "Character (wrapper) view model: ")
-    @Getter @Setter
-    private Character readOnlyProperty;                                      // <.>
-
-    @Getter @Setter
-    private Character readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private Character readWriteProperty;
-
-    @Property(editing = Editing.ENABLED, optionality = Optionality.OPTIONAL) // <.>
-    @XmlElement(required = false)                                            // <.>
-    @Getter @Setter
-    private Character readWriteOptionalProperty;
-
-}
-----
-<.> a no-arg constructor is required by JAXB
-<.> no additional annotations required.
-<.> mandatory property as defined to JAXB.
-Note that JAXB's default is that a property is optional, whereas Apache Isis is the opposite, that it is mandatory.
-<.> optional property as defined to Apache Isis
-


[isis] 01/03: ISIS-2222: Asciidoc examples now use the source code directly.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2222
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 33815fc79d9149617db5c683f0913a6e3a4dfa5c
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Jun 27 14:29:16 2020 +0100

    ISIS-2222: Asciidoc examples now use the source code directly.
---
 .../dom/_infra/AsciiDocConverterService.java       |   1 +
 .../main/java/demoapp/dom/_infra/TagHandler.java   |   4 +-
 .../dom/homepage/DemoHomePage-description.adoc     |  12 +-
 .../booleans/PrimitiveBooleans-description.adoc    |  82 +----------
 .../booleans/holder/PrimitiveBooleanHolder.java    |   8 ++
 .../PrimitiveBooleanHolder_actionReturning.java    |   7 +-
 ...iveBooleanHolder_mixinPropertyWithCssClass.java |   2 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   5 +-
 .../jdo/PrimitiveBooleanJdoEntity-description.adoc |  24 +---
 .../booleans/jdo/PrimitiveBooleanJdoEntity.java    |  11 +-
 .../vm/PrimitiveBooleanViewModel-description.adoc  |  30 +---
 .../booleans/vm/PrimitiveBooleanViewModel.java     |  11 +-
 .../bytes/PrimitiveBytes-description.adoc          |  82 +----------
 .../bytes/holder/PrimitiveByteHolder.java          |   8 ++
 .../PrimitiveByteHolder_actionReturning.java       |   6 +-
 ...mitiveByteHolder_mixinPropertyWithCssClass.java |   3 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/PrimitiveByteJdoEntity-description.adoc    |  24 +---
 .../bytes/jdo/PrimitiveByteJdoEntity.java          |  11 +-
 .../vm/PrimitiveByteViewModel-description.adoc     |  30 +---
 .../primitive/bytes/vm/PrimitiveByteViewModel.java |  11 +-
 .../chars/PrimitiveChars-description.adoc          |  82 +----------
 .../chars/holder/PrimitiveCharHolder.java          |   8 ++
 .../PrimitiveCharHolder_actionReturning.java       |   6 +-
 ...mitiveCharHolder_mixinPropertyWithCssClass.java |   3 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/PrimitiveCharJdoEntity-description.adoc    |  24 +---
 .../chars/jdo/PrimitiveCharJdoEntity.java          |  11 +-
 .../vm/PrimitiveCharViewModel-description.adoc     |  30 +---
 .../primitive/chars/vm/PrimitiveCharViewModel.java |  11 +-
 .../doubles/PrimitiveDoubles-description.adoc      |  82 +----------
 .../doubles/holder/PrimitiveDoubleHolder.java      |   8 ++
 .../PrimitiveDoubleHolder_actionReturning.java     |   6 +-
 ...tiveDoubleHolder_mixinPropertyWithCssClass.java |   3 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/PrimitiveDoubleJdoEntity-description.adoc  |  24 +---
 .../doubles/jdo/PrimitiveDoubleJdoEntity.java      |  11 +-
 .../vm/PrimitiveDoubleViewModel-description.adoc   |  30 +---
 .../doubles/vm/PrimitiveDoubleViewModel.java       |  11 +-
 .../floats/PrimitiveFloats-description.adoc        |  82 +----------
 .../floats/holder/PrimitiveFloatHolder.java        |   8 ++
 .../PrimitiveFloatHolder_actionReturning.java      |   6 +-
 ...itiveFloatHolder_mixinPropertyWithCssClass.java |   3 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/PrimitiveFloatJdoEntity-description.adoc   |  24 +---
 .../floats/jdo/PrimitiveFloatJdoEntity.java        |  11 +-
 .../vm/PrimitiveFloatViewModel-description.adoc    |  30 +---
 .../floats/vm/PrimitiveFloatViewModel.java         |  11 +-
 .../primitive/ints/PrimitiveInts-description.adoc  |  82 +----------
 .../primitive/ints/holder/PrimitiveIntHolder.java  |   8 ++
 .../holder/PrimitiveIntHolder_actionReturning.java |   6 +-
 ...imitiveIntHolder_mixinPropertyWithCssClass.java |   3 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/PrimitiveIntJdoEntity-description.adoc     |  24 +---
 .../primitive/ints/jdo/PrimitiveIntJdoEntity.java  |  11 +-
 .../ints/vm/PrimitiveIntViewModel-description.adoc |  30 +---
 .../primitive/ints/vm/PrimitiveIntViewModel.java   |  11 +-
 .../longs/PrimitiveLongs-description.adoc          |  82 +----------
 .../longs/holder/PrimitiveLongHolder.java          |   8 ++
 .../PrimitiveLongHolder_actionReturning.java       |   6 +-
 ...mitiveLongHolder_mixinPropertyWithCssClass.java |   3 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/PrimitiveLongJdoEntity-description.adoc    |  24 +---
 .../longs/jdo/PrimitiveLongJdoEntity.java          |  11 +-
 .../vm/PrimitiveLongViewModel-description.adoc     |  30 +---
 .../primitive/longs/vm/PrimitiveLongViewModel.java |  11 +-
 .../shorts/PrimitiveShorts-description.adoc        |  80 +----------
 .../shorts/holder/PrimitiveShortHolder.java        |   8 ++
 .../PrimitiveShortHolder_actionReturning.java      |   6 +-
 ...itiveShortHolder_mixinPropertyWithCssClass.java |   3 +
 ...er_updateReadOnlyPropertyPromptStyleInline.java |   3 +-
 .../jdo/PrimitiveShortJdoEntity-description.adoc   |  24 +---
 .../shorts/jdo/PrimitiveShortJdoEntity.java        |  11 +-
 .../vm/PrimitiveShortViewModel-description.adoc    |  30 +---
 .../shorts/vm/PrimitiveShortViewModel.java         |  11 +-
 .../jdo/WrapperCharacterJdoEntity-description.adoc |   1 -
 ...WrapperCharacterViewModel-description.ORIG.adoc |   1 -
 .../vm/WrapperCharacterViewModel-description.adoc  |   1 -
 .../src/main/resources/static/css/application.css  | 156 ++++++++++++++++++++-
 .../dom/_infra/ResourceReaderService_Test.java     |  19 ++-
 .../ResourceReaderService_Test-Test1-expected.java |   5 +
 .../subdir/ResourceReaderService_Test-Test1.java   |  12 ++
 82 files changed, 496 insertions(+), 1140 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/_infra/AsciiDocConverterService.java b/examples/demo/domain/src/main/java/demoapp/dom/_infra/AsciiDocConverterService.java
index 58cd37d..c93c568 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/_infra/AsciiDocConverterService.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/_infra/AsciiDocConverterService.java
@@ -58,6 +58,7 @@ public class AsciiDocConverterService {
                     .toFile(false)
                     .attributes(AttributesBuilder.attributes()
                             .sourceHighlighter("prism")
+                            .icons("font")
                             .get())
                     .get();
         }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/_infra/TagHandler.java b/examples/demo/domain/src/main/java/demoapp/dom/_infra/TagHandler.java
index c549ce3..5f4f903 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/_infra/TagHandler.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/_infra/TagHandler.java
@@ -16,12 +16,12 @@ class TagHandler {
             return line;
         }
 
-        if (line.startsWith(String.format("//tag::%s[]", tagsValue))) {
+        if (line.contains(String.format("//tag::%s[]", tagsValue))) {
             within = true;
             return null;
         }
 
-        if (line.startsWith(String.format("//end::%s[]", tagsValue))) {
+        if (line.contains(String.format("//end::%s[]", tagsValue))) {
             within = false;
             return null;
         }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage-description.adoc
index 3242645..db42992 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage-description.adoc
@@ -15,4 +15,14 @@ A more common implementation of a home page is as a dashboard, displaying the mo
 Such a home page would have a number of repository services injected into it, in order to query and render those tasks or alerts.
 
 It would probably also have the framework's link:https://isis.apache.org/refguide/${ISIS_VERSION}/applib-svc/UserService.html[`UserService`] injected, in order that the information displayed is relevant to the current user.
-As you can see, this app's home page does actually do this, in order to "personalise" the title.
\ No newline at end of file
+As you can see, this app's home page does actually do this, in order to "personalise" the title.
+
+NOTE: this is a note!
+
+TIP: this is a tip!
+
+CAUTION: this is a caution!
+
+IMPORTANT: this is important!
+
+WARNING: this is a warning!
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans-description.adoc
index b9b86e0..f5d5b85 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans-description.adoc
@@ -13,38 +13,7 @@ These objects both implement a common interface, `PrimitiveBooleanHolder`:
 
 [source,java]
 ----
-public interface PrimitiveBooleanHolder {
-
-    boolean getReadOnlyProperty();
-    void setReadOnlyProperty(boolean c);
-
-    boolean getReadOnlyProperty2();
-    void setReadOnlyProperty2(boolean c);
-
-    boolean getReadWriteProperty();
-    void setReadWriteProperty(boolean c);
-
-    @MemberOrder(name = "label-positions", sequence = "1")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
-    default boolean getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "2")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
-    default boolean getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "3")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
-    default boolean getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "4")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
-    default boolean getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
-
-}
+include::holder/PrimitiveBooleanHolder.java[tags=class]
 ----
 
 The default methods have annotations that automatically inherited.
@@ -56,28 +25,11 @@ Using `@MemberOrder` positions the properties into the appropriate `<field-set>`
 A number of mixin actions contribute through this interface, demonstrate the use of `boolean` as a parameter and as a return type.
 For example:
 
-* the `updateReadOnlyProperty` action is:
+* the `updateReadOnlyPropertyPromptStyleInline` action is:
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.IDEMPOTENT,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "1"
-)
-@RequiredArgsConstructor
-public class PrimitiveBooleanHolder_updateReadOnlyProperty {
-
-    private final PrimitiveBooleanHolder primitiveBooleanHolder;
-
-    public PrimitiveBooleanHolder act(boolean newValue) {
-        primitiveBooleanHolder.setReadOnlyProperty(newValue);
-        return primitiveBooleanHolder;
-    }
-    public boolean default0Act() {
-        return primitiveBooleanHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleInline.java[tags=class]
 ----
 +
 There are a number of variants of this action, to demonstrate different prompt layouts.
@@ -86,20 +38,7 @@ There are a number of variants of this action, to demonstrate different prompt l
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.SAFE,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "3"
-)
-@RequiredArgsConstructor
-public class PrimitiveBooleanHolder_actionReturning {
-
-    private final PrimitiveBooleanHolder primitiveBooleanHolder;
-
-    public boolean act() {
-        return primitiveBooleanHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveBooleanHolder_actionReturning.java[tags=class]
 ----
 
 == Mixin properties
@@ -110,18 +49,7 @@ We also use the interface to contribute a number of mixin properties:
 +
 [source,java]
 ----
-@Property()
-@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ")
-@RequiredArgsConstructor
-public class PrimitiveBooleanHolder_mixinPropertyWithCssClass {
-
-    private final PrimitiveBooleanHolder primitiveBooleanHolder;
-
-    @MemberOrder(name = "contributed", sequence = "1")
-    public boolean prop() {
-        return primitiveBooleanHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveBooleanHolder_mixinPropertyWithCssClass.java[tags=class]
 ----
 +
 TIP: the styling is provided from the `application.css` static resource.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder.java
index f63cd30..073d5f3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder.java
@@ -41,23 +41,30 @@ import lombok.extern.log4j.Log4j2;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
+//tag::class[]
 public interface PrimitiveBooleanHolder {
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     boolean isReadOnlyProperty();
     void setReadOnlyProperty(boolean c);
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+//tag::class[]
     boolean isReadOnlyProperty2();
     void setReadOnlyProperty2(boolean c);
 
+//end::class[]
     @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     boolean isReadWriteProperty();
     void setReadWriteProperty(boolean c);
 
@@ -82,3 +89,4 @@ public interface PrimitiveBooleanHolder {
     default boolean isReadOnlyPropertyDerivedLabelPositionNone() { return isReadOnlyProperty(); }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_actionReturning.java
index c3e25a8..c110a6e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_actionReturning.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_actionReturning.java
@@ -24,9 +24,8 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
-@Action(
-        semantics = SemanticsOf.SAFE
-)
+//tag::class[]
+@Action(semantics = SemanticsOf.SAFE)
 @RequiredArgsConstructor
 public class PrimitiveBooleanHolder_actionReturning {
 
@@ -35,5 +34,5 @@ public class PrimitiveBooleanHolder_actionReturning {
     public boolean act() {
         return primitiveBooleanHolder.isReadOnlyProperty();
     }
-
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_mixinPropertyWithCssClass.java
index 3ab2167..053c1f2 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_mixinPropertyWithCssClass.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_mixinPropertyWithCssClass.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.Where;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Property()
 @PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
 @RequiredArgsConstructor
@@ -38,3 +39,4 @@ public class PrimitiveBooleanHolder_mixinPropertyWithCssClass {
         return primitiveBooleanHolder.isReadOnlyProperty();
     }
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleInline.java
index 6d6fe54..2aa0aa6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleInline.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/holder/PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -25,7 +25,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
 
-
+//tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT,
         associateWith = "readOnlyProperty",
@@ -44,6 +44,5 @@ public class PrimitiveBooleanHolder_updateReadOnlyPropertyPromptStyleInline {
     public boolean default0Act() {
         return primitiveBooleanHolder.isReadOnlyProperty();
     }
-
-
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity-description.adoc
index 73db59e..93e57f7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity-description.adoc
@@ -3,29 +3,7 @@ JDO package demoapp.dom.types.primitive.booleans
 
 [source,java]
 ----
-@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
-@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        objectType = "demo.PrimitiveBooleanJdoEntity"
-)
-public class PrimitiveBooleanJdoEntity
-    implements HasAsciiDocDescription,   PrimitiveBooleanHolder {          // <.>
-
-    public PrimitiveBooleanJdoEntity(boolean initialValue) { ... }            // <.>
-
-    @Title(prepend = "boolean (primitive) JDO entity: ")
-    @Getter @Setter
-    private boolean readOnlyProperty;                                      // <.>
-
-    @Getter @Setter
-    private boolean readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private boolean readWriteProperty;
-
-}
+include::PrimitiveBooleanJdoEntity.java[tags="class"]
 ----
 <.> a no-arg constructor is introduced by JDO enhancer
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity.java
index e2ae9e2..30e8e4f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdoEntity.java
@@ -36,24 +36,26 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.booleans.holder.PrimitiveBooleanHolder;
 
+//tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObject(
         objectType = "demo.PrimitiveBooleanJdoEntity"
 )
-public class PrimitiveBooleanJdoEntity
-        implements HasAsciiDocDescription,
-        PrimitiveBooleanHolder {
+public class PrimitiveBooleanJdoEntity                                  // <.>
+        implements HasAsciiDocDescription, PrimitiveBooleanHolder {
 
+//end::class[]
     public PrimitiveBooleanJdoEntity(boolean initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "boolean (primitive) JDO entity: ")
     @Getter @Setter
-    private boolean readOnlyProperty;
+    private boolean readOnlyProperty;                                   // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -65,3 +67,4 @@ public class PrimitiveBooleanJdoEntity
     private boolean readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel-description.adoc
index 7b9e733..451236f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel-description.adoc
@@ -2,35 +2,7 @@ JAXB supports `boolean` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@XmlRootElement(name = "demo.PrimitiveBooleanViewModel")
-@XmlType
-@XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(
-        nature=Nature.VIEW_MODEL,
-        objectType = "demo.PrimitiveBooleanViewModel"
-)
-@lombok.NoArgsConstructor                               // <.>
-public class PrimitiveBooleanViewModel
-        implements HasAsciiDocDescription,
-                   PrimitiveBooleanHolder {
-
-    public PrimitiveBooleanViewModel(boolean initialValue) {  // <.>
-        // ...
-    }
-
-    @Title(prepend = "boolean (primitive) view model: ")
-    @Getter @Setter
-    private boolean readOnlyProperty;                      // <.>
-
-    @Getter @Setter
-    private boolean readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private boolean readWriteProperty;
-
-}
+include::PrimitiveBooleanViewModel.java[tags="class"]
 ----
 <.> a no-arg constructor is required by JAXB
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel.java
index e350207..c619d23 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanViewModel.java
@@ -37,6 +37,7 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.booleans.holder.PrimitiveBooleanHolder;
 
+//tag::class[]
 @XmlRootElement(name = "demo.PrimitiveBooleanViewModel")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -44,20 +45,21 @@ import demoapp.dom.types.primitive.booleans.holder.PrimitiveBooleanHolder;
         nature=Nature.VIEW_MODEL,
         objectType = "demo.PrimitiveBooleanViewModel"
 )
-@lombok.NoArgsConstructor
+@lombok.NoArgsConstructor                                           // <.>
 public class PrimitiveBooleanViewModel
-        implements HasAsciiDocDescription,
-        PrimitiveBooleanHolder {
+        implements HasAsciiDocDescription, PrimitiveBooleanHolder {
 
+//end::class[]
     public PrimitiveBooleanViewModel(boolean initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
+//tag::class[]
 
     @Title(prepend = "boolean (primitive) view model: ")
     @Getter @Setter
-    private boolean readOnlyProperty;
+    private boolean readOnlyProperty;                               // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -69,3 +71,4 @@ public class PrimitiveBooleanViewModel
     private boolean readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/PrimitiveBytes-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/PrimitiveBytes-description.adoc
index 3618f70..dbd3dc3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/PrimitiveBytes-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/PrimitiveBytes-description.adoc
@@ -13,38 +13,7 @@ These objects both implement a common interface, `PrimitiveByteHolder`:
 
 [source,java]
 ----
-public interface PrimitiveByteHolder {
-
-    byte getReadOnlyProperty();
-    void setReadOnlyProperty(byte c);
-
-    byte getReadOnlyProperty2();
-    void setReadOnlyProperty2(byte c);
-
-    byte getReadWriteProperty();
-    void setReadWriteProperty(byte c);
-
-    @MemberOrder(name = "label-positions", sequence = "1")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
-    default byte getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "2")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
-    default byte getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "3")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
-    default byte getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "4")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
-    default byte getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
-
-}
+include::holder/PrimitiveByteHolder.java[tags=class]
 ----
 
 The default methods have annotations that automatically inherited.
@@ -56,28 +25,11 @@ Using `@MemberOrder` positions the properties into the appropriate `<field-set>`
 A number of mixin actions contribute through this interface, demonstrate the use of `byte` as a parameter and as a return type.
 For example:
 
-* the `updateReadOnlyProperty` action is:
+* the `updateReadOnlyPropertyPromptStyleInline` action is:
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.IDEMPOTENT,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "1"
-)
-@RequiredArgsConstructor
-public class PrimitiveByteHolder_updateReadOnlyProperty {
-
-    private final PrimitiveByteHolder primitiveByteHolder;
-
-    public PrimitiveByteHolder act(byte newValue) {
-        primitiveByteHolder.setReadOnlyProperty(newValue);
-        return primitiveByteHolder;
-    }
-    public byte default0Act() {
-        return primitiveByteHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveByteHolder_updateReadOnlyPropertyPromptStyleInline.java[tags=class]
 ----
 +
 There are a number of variants of this action, to demonstrate different prompt layouts.
@@ -86,20 +38,7 @@ There are a number of variants of this action, to demonstrate different prompt l
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.SAFE,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "3"
-)
-@RequiredArgsConstructor
-public class PrimitiveByteHolder_actionReturning {
-
-    private final PrimitiveByteHolder primitiveByteHolder;
-
-    public byte act() {
-        return primitiveByteHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveByteHolder_actionReturning.java[tags=class]
 ----
 
 == Mixin properties
@@ -110,18 +49,7 @@ We also use the interface to contribute a number of mixin properties:
 +
 [source,java]
 ----
-@Property()
-@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ")
-@RequiredArgsConstructor
-public class PrimitiveByteHolder_mixinPropertyWithCssClass {
-
-    private final PrimitiveByteHolder primitiveByteHolder;
-
-    @MemberOrder(name = "contributed", sequence = "1")
-    public byte prop() {
-        return primitiveByteHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveByteHolder_mixinPropertyWithCssClass.java[tags=class]
 ----
 +
 TIP: the styling is provided from the `application.css` static resource.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder.java
index 46300ef..9531191 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder.java
@@ -41,23 +41,30 @@ import lombok.extern.log4j.Log4j2;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
+//tag::class[]
 public interface PrimitiveByteHolder {
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     byte getReadOnlyProperty();
     void setReadOnlyProperty(byte c);
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+//tag::class[]
     byte getReadOnlyProperty2();
     void setReadOnlyProperty2(byte c);
 
+//end::class[]
     @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     byte getReadWriteProperty();
     void setReadWriteProperty(byte c);
 
@@ -82,3 +89,4 @@ public interface PrimitiveByteHolder {
     default byte getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder_actionReturning.java
index 3b45b15..63f5697 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder_actionReturning.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder_actionReturning.java
@@ -24,9 +24,8 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
-@Action(
-        semantics = SemanticsOf.SAFE
-)
+//tag::class[]
+@Action(semantics = SemanticsOf.SAFE)
 @RequiredArgsConstructor
 public class PrimitiveByteHolder_actionReturning {
 
@@ -37,3 +36,4 @@ public class PrimitiveByteHolder_actionReturning {
     }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder_mixinPropertyWithCssClass.java
index 90b2e41..1ca7cef 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder_mixinPropertyWithCssClass.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder_mixinPropertyWithCssClass.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.Where;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Property()
 @PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
 @RequiredArgsConstructor
@@ -37,4 +38,6 @@ public class PrimitiveByteHolder_mixinPropertyWithCssClass {
     public byte prop() {
         return primitiveByteHolder.getReadOnlyProperty();
     }
+
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder_updateReadOnlyPropertyPromptStyleInline.java
index bcad7c1..1d2c263 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder_updateReadOnlyPropertyPromptStyleInline.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/holder/PrimitiveByteHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -28,6 +28,7 @@ import lombok.RequiredArgsConstructor;
 import demoapp.dom.types.primitive.bytes.holder.PrimitiveByteHolder;
 
 
+//tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT,
         associateWith = "readOnlyProperty",
@@ -47,5 +48,5 @@ public class PrimitiveByteHolder_updateReadOnlyPropertyPromptStyleInline {
         return primitiveByteHolder.getReadOnlyProperty();
     }
 
-
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jdo/PrimitiveByteJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jdo/PrimitiveByteJdoEntity-description.adoc
index b9f566b..5006390 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jdo/PrimitiveByteJdoEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jdo/PrimitiveByteJdoEntity-description.adoc
@@ -2,29 +2,7 @@ JDO supports `byte` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
-@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        objectType = "demo.PrimitiveByteJdoEntity"
-)
-public class PrimitiveByteJdoEntity
-    implements HasAsciiDocDescription,   PrimitiveByteHolder {          // <.>
-
-    public PrimitiveByteJdoEntity(byte initialValue) { ... }            // <.>
-
-    @Title(prepend = "byte (primitive) JDO entity: ")
-    @Getter @Setter
-    private byte readOnlyProperty;                                      // <.>
-
-    @Getter @Setter
-    private byte readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private byte readWriteProperty;
-
-}
+include::PrimitiveByteJdoEntity.java[tags="class"]
 ----
 <.> a no-arg constructor is introduced by JDO enhancer
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jdo/PrimitiveByteJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jdo/PrimitiveByteJdoEntity.java
index c8961c0..e40c69b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jdo/PrimitiveByteJdoEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jdo/PrimitiveByteJdoEntity.java
@@ -36,24 +36,26 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.bytes.holder.PrimitiveByteHolder;
 
+//tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObject(
         objectType = "demo.PrimitiveByteJdoEntity"
 )
-public class PrimitiveByteJdoEntity
-        implements HasAsciiDocDescription,
-                   PrimitiveByteHolder {
+public class PrimitiveByteJdoEntity                                 // <.>
+        implements HasAsciiDocDescription, PrimitiveByteHolder {
 
+//end::class[]
     public PrimitiveByteJdoEntity(byte initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "byte (primitive) JDO entity: ")
     @Getter @Setter
-    private byte readOnlyProperty;
+    private byte readOnlyProperty;                                  // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -65,3 +67,4 @@ public class PrimitiveByteJdoEntity
     private byte readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/vm/PrimitiveByteViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/vm/PrimitiveByteViewModel-description.adoc
index c17b66e..e0b9078 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/vm/PrimitiveByteViewModel-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/vm/PrimitiveByteViewModel-description.adoc
@@ -2,35 +2,7 @@ JAXB supports `byte` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@XmlRootElement(name = "demo.PrimitiveByteViewModel")
-@XmlType
-@XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(
-        nature=Nature.VIEW_MODEL,
-        objectType = "demo.PrimitiveByteViewModel"
-)
-@lombok.NoArgsConstructor                               // <.>
-public class PrimitiveByteViewModel
-        implements HasAsciiDocDescription,
-                   PrimitiveByteHolder {
-
-    public PrimitiveByteViewModel(byte initialValue) {  // <.>
-        // ...
-    }
-
-    @Title(prepend = "byte (primitive) view model: ")
-    @Getter @Setter
-    private byte readOnlyProperty;                      // <.>
-
-    @Getter @Setter
-    private byte readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private byte readWriteProperty;
-
-}
+include::PrimitiveByteViewModel.java[tags="class"]
 ----
 <.> a no-arg constructor is required by JAXB
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/vm/PrimitiveByteViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/vm/PrimitiveByteViewModel.java
index fa12729..7110711 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/vm/PrimitiveByteViewModel.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/vm/PrimitiveByteViewModel.java
@@ -37,6 +37,7 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.bytes.holder.PrimitiveByteHolder;
 
+//tag::class[]
 @XmlRootElement(name = "demo.PrimitiveByteViewModel")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -44,20 +45,21 @@ import demoapp.dom.types.primitive.bytes.holder.PrimitiveByteHolder;
         nature=Nature.VIEW_MODEL,
         objectType = "demo.PrimitiveByteViewModel"
 )
-@lombok.NoArgsConstructor
+@lombok.NoArgsConstructor                                           // <.>
 public class PrimitiveByteViewModel
-        implements HasAsciiDocDescription,
-        PrimitiveByteHolder {
+        implements HasAsciiDocDescription, PrimitiveByteHolder {
 
+//end::class[]
     public PrimitiveByteViewModel(byte initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "byte (primitive) view model: ")
     @Getter @Setter
-    private byte readOnlyProperty;
+    private byte readOnlyProperty;                                  // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -69,3 +71,4 @@ public class PrimitiveByteViewModel
     private byte readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars-description.adoc
index b0f6aec..e18290e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars-description.adoc
@@ -13,38 +13,7 @@ These objects both implement a common interface, `PrimitiveCharHolder`:
 
 [source,java]
 ----
-public interface PrimitiveCharHolder {
-
-    char getReadOnlyProperty();
-    void setReadOnlyProperty(char c);
-
-    char getReadOnlyProperty2();
-    void setReadOnlyProperty2(char c);
-
-    char getReadWriteProperty();
-    void setReadWriteProperty(char c);
-
-    @MemberOrder(name = "label-positions", sequence = "1")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
-    default char getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "2")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
-    default char getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "3")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
-    default char getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "4")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
-    default char getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
-
-}
+include::holder/PrimitiveCharHolder.java[tags=class]
 ----
 
 The default methods have annotations that automatically inherited.
@@ -56,28 +25,11 @@ Using `@MemberOrder` positions the properties into the appropriate `<field-set>`
 A number of mixin actions contribute through this interface, demonstrate the use of `char` as a parameter and as a return type.
 For example:
 
-* the `updateReadOnlyProperty` action is:
+* the `updateReadOnlyPropertyPromptStyleInline` action is:
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.IDEMPOTENT,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "1"
-)
-@RequiredArgsConstructor
-public class PrimitiveCharHolder_updateReadOnlyProperty {
-
-    private final PrimitiveCharHolder primitiveCharHolder;
-
-    public PrimitiveCharHolder act(char newValue) {
-        primitiveCharHolder.setReadOnlyProperty(newValue);
-        return primitiveCharHolder;
-    }
-    public char default0Act() {
-        return primitiveCharHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleInline.java[tags=class]
 ----
 +
 There are a number of variants of this action, to demonstrate different prompt layouts.
@@ -86,20 +38,7 @@ There are a number of variants of this action, to demonstrate different prompt l
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.SAFE,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "3"
-)
-@RequiredArgsConstructor
-public class PrimitiveCharHolder_actionReturning {
-
-    private final PrimitiveCharHolder primitiveCharHolder;
-
-    public char act() {
-        return primitiveCharHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveCharHolder_actionReturning.java[tags=class]
 ----
 
 == Mixin properties
@@ -110,18 +49,7 @@ We also use the interface to contribute a number of mixin properties:
 +
 [source,java]
 ----
-@Property()
-@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ")
-@RequiredArgsConstructor
-public class PrimitiveCharHolder_mixinPropertyWithCssClass {
-
-    private final PrimitiveCharHolder primitiveCharHolder;
-
-    @MemberOrder(name = "contributed", sequence = "1")
-    public char prop() {
-        return primitiveCharHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveCharHolder_mixinPropertyWithCssClass.java[tags=class]
 ----
 +
 TIP: the styling is provided from the `application.css` static resource.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder.java
index d6fe4f6..6bf7d5f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder.java
@@ -41,23 +41,30 @@ import lombok.extern.log4j.Log4j2;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
+//tag::class[]
 public interface PrimitiveCharHolder {
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     char getReadOnlyProperty();
     void setReadOnlyProperty(char c);
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+//tag::class[]
     char getReadOnlyProperty2();
     void setReadOnlyProperty2(char c);
 
+//end::class[]
     @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     char getReadWriteProperty();
     void setReadWriteProperty(char c);
 
@@ -82,3 +89,4 @@ public interface PrimitiveCharHolder {
     default char getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java
index 1d1ecbc..b620290 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_actionReturning.java
@@ -24,9 +24,8 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
-@Action(
-        semantics = SemanticsOf.SAFE
-)
+//tag::class[]
+@Action(semantics = SemanticsOf.SAFE)
 @RequiredArgsConstructor
 public class PrimitiveCharHolder_actionReturning {
 
@@ -37,3 +36,4 @@ public class PrimitiveCharHolder_actionReturning {
     }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_mixinPropertyWithCssClass.java
index 281b87d..79b7ce6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_mixinPropertyWithCssClass.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_mixinPropertyWithCssClass.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.Where;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Property()
 @PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
 @RequiredArgsConstructor
@@ -37,4 +38,6 @@ public class PrimitiveCharHolder_mixinPropertyWithCssClass {
     public char prop() {
         return primitiveCharHolder.getReadOnlyProperty();
     }
+
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleInline.java
index c1a3c05..7033322 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleInline.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/holder/PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT,
         associateWith = "readOnlyProperty",
@@ -45,5 +46,5 @@ public class PrimitiveCharHolder_updateReadOnlyPropertyPromptStyleInline {
         return primitiveCharHolder.getReadOnlyProperty();
     }
 
-
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity-description.adoc
index 74d313f..0f8f430 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity-description.adoc
@@ -2,29 +2,7 @@ JDO supports `char` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
-@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        objectType = "demo.PrimitiveCharJdoEntity"
-)
-public class PrimitiveCharJdoEntity
-    implements HasAsciiDocDescription,   PrimitiveCharHolder {          // <.>
-
-    public PrimitiveCharJdoEntity(char initialValue) { ... }            // <.>
-
-    @Title(prepend = "char (primitive) JDO entity: ")
-    @Getter @Setter
-    private char readOnlyProperty;                                      // <.>
-
-    @Getter @Setter
-    private char readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private char readWriteProperty;
-
-}
+include::PrimitiveCharJdoEntity.java[tags="class"]
 ----
 <.> a no-arg constructor is introduced by JDO enhancer
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity.java
index e372ff8..9453e1f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdoEntity.java
@@ -36,24 +36,26 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.chars.holder.PrimitiveCharHolder;
 
+//tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObject(
         objectType = "demo.PrimitiveCharJdoEntity"
 )
-public class PrimitiveCharJdoEntity
-        implements HasAsciiDocDescription,
-        PrimitiveCharHolder {
+public class PrimitiveCharJdoEntity                                 // <.>
+        implements HasAsciiDocDescription, PrimitiveCharHolder {
 
+//end::class[]
     public PrimitiveCharJdoEntity(char initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "char (primitive) JDO entity: ")
     @Getter @Setter
-    private char readOnlyProperty;
+    private char readOnlyProperty;                                  // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -65,3 +67,4 @@ public class PrimitiveCharJdoEntity
     private char readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel-description.adoc
index 52dd46f..eff08ef 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel-description.adoc
@@ -2,35 +2,7 @@ JAXB supports `char` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@XmlRootElement(name = "demo.PrimitiveCharViewModel")
-@XmlType
-@XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(
-        nature=Nature.VIEW_MODEL,
-        objectType = "demo.PrimitiveCharViewModel"
-)
-@lombok.NoArgsConstructor                               // <.>
-public class PrimitiveCharViewModel
-        implements HasAsciiDocDescription,
-                   PrimitiveCharHolder {
-
-    public PrimitiveCharViewModel(char initialValue) {  // <.>
-        // ...
-    }
-
-    @Title(prepend = "char (primitive) view model: ")
-    @Getter @Setter
-    private char readOnlyProperty;                      // <.>
-
-    @Getter @Setter
-    private char readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private char readWriteProperty;
-
-}
+include::PrimitiveCharViewModel.java[tags="class"]
 ----
 <.> a no-arg constructor is required by JAXB
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel.java
index 929b5c0..d600d83 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharViewModel.java
@@ -37,6 +37,7 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.chars.holder.PrimitiveCharHolder;
 
+//tag::class[]
 @XmlRootElement(name = "demo.PrimitiveCharViewModel")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -44,20 +45,21 @@ import demoapp.dom.types.primitive.chars.holder.PrimitiveCharHolder;
         nature=Nature.VIEW_MODEL,
         objectType = "demo.PrimitiveCharViewModel"
 )
-@lombok.NoArgsConstructor
+@lombok.NoArgsConstructor                                           // <.>
 public class PrimitiveCharViewModel
-        implements HasAsciiDocDescription,
-        PrimitiveCharHolder {
+        implements HasAsciiDocDescription, PrimitiveCharHolder {
 
+//end::class[]
     public PrimitiveCharViewModel(char initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "char (primitive) view model: ")
     @Getter @Setter
-    private char readOnlyProperty;
+    private char readOnlyProperty;                                  // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -69,3 +71,4 @@ public class PrimitiveCharViewModel
     private char readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles-description.adoc
index 5854c68..cbfe1a4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles-description.adoc
@@ -13,38 +13,7 @@ These objects both implement a common interface, `PrimitiveCharHolder`:
 
 [source,java]
 ----
-public interface PrimitiveDoubleHolder {
-
-    double getReadOnlyProperty();
-    void setReadOnlyProperty(double c);
-
-    double getReadOnlyProperty2();
-    void setReadOnlyProperty2(double c);
-
-    double getReadWriteProperty();
-    void setReadWriteProperty(double c);
-
-    @MemberOrder(name = "label-positions", sequence = "1")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
-    default double getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "2")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
-    default double getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "3")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
-    default double getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "4")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
-    default double getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
-
-}
+include::holder/PrimitiveDoubleHolder.java[tags=class]
 ----
 
 The default methods have annotations that automatically inherited.
@@ -56,28 +25,11 @@ Using `@MemberOrder` positions the properties into the appropriate `<field-set>`
 A number of mixin actions contribute through this interface, demonstrate the use of `double` as a parameter and as a return type.
 For example:
 
-* the `updateReadOnlyProperty` action is:
+* the `updateReadOnlyPropertyPromptStyleInline` action is:
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.IDEMPOTENT,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "1"
-)
-@RequiredArgsConstructor
-public class PrimitiveDoubleHolder_updateReadOnlyProperty {
-
-    private final PrimitiveDoubleHolder primitiveDoubleHolder;
-
-    public PrimitiveDoubleHolder act(double newValue) {
-        primitiveDoubleHolder.setReadOnlyProperty(newValue);
-        return primitiveDoubleHolder;
-    }
-    public double default0Act() {
-        return primitiveDoubleHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleInline.java[tags=class]
 ----
 +
 There are a number of variants of this action, to demonstrate different prompt layouts.
@@ -86,20 +38,7 @@ There are a number of variants of this action, to demonstrate different prompt l
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.SAFE,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "3"
-)
-@RequiredArgsConstructor
-public class PrimitiveDoubleHolder_actionReturning {
-
-    private final PrimitiveDoubleHolder primitiveDoubleHolder;
-
-    public double act() {
-        return primitiveDoubleHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveDoubleHolder_actionReturning.java[tags=class]
 ----
 
 == Mixin properties
@@ -110,18 +49,7 @@ We also use the interface to contribute a number of mixin properties:
 +
 [source,java]
 ----
-@Property()
-@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ")
-@RequiredArgsConstructor
-public class PrimitiveDoubleHolder_mixinPropertyWithCssClass {
-
-    private final PrimitiveDoubleHolder primitiveDoubleHolder;
-
-    @MemberOrder(name = "contributed", sequence = "1")
-    public double prop() {
-        return primitiveDoubleHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveDoubleHolder_mixinPropertyWithCssClass.java[tags=class]
 ----
 +
 TIP: the styling is provided from the `application.css` static resource.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder.java
index a9ffbbc..b8b13b7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder.java
@@ -41,23 +41,30 @@ import lombok.extern.log4j.Log4j2;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
+//tag::class[]
 public interface PrimitiveDoubleHolder {
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     double getReadOnlyProperty();
     void setReadOnlyProperty(double c);
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+//tag::class[]
     double getReadOnlyProperty2();
     void setReadOnlyProperty2(double c);
 
+//end::class[]
     @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     double getReadWriteProperty();
     void setReadWriteProperty(double c);
 
@@ -82,3 +89,4 @@ public interface PrimitiveDoubleHolder {
     default double getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_actionReturning.java
index d369719..5fc6c7b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_actionReturning.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_actionReturning.java
@@ -26,9 +26,8 @@ import lombok.RequiredArgsConstructor;
 import demoapp.dom.types.primitive.doubles.holder.PrimitiveDoubleHolder;
 
 
-@Action(
-        semantics = SemanticsOf.SAFE
-)
+//tag::class[]
+@Action(semantics = SemanticsOf.SAFE)
 @RequiredArgsConstructor
 public class PrimitiveDoubleHolder_actionReturning {
 
@@ -39,3 +38,4 @@ public class PrimitiveDoubleHolder_actionReturning {
     }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_mixinPropertyWithCssClass.java
index c63e0da..5a65ed2 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_mixinPropertyWithCssClass.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_mixinPropertyWithCssClass.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.Where;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Property()
 @PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
 @RequiredArgsConstructor
@@ -37,4 +38,6 @@ public class PrimitiveDoubleHolder_mixinPropertyWithCssClass {
     public double prop() {
         return primitiveDoubleHolder.getReadOnlyProperty();
     }
+
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleInline.java
index 6970677..d46ccb6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleInline.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/holder/PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT,
         associateWith = "readOnlyProperty",
@@ -45,5 +46,5 @@ public class PrimitiveDoubleHolder_updateReadOnlyPropertyPromptStyleInline {
         return primitiveDoubleHolder.getReadOnlyProperty();
     }
 
-
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity-description.adoc
index 6a2c555..a531d70 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity-description.adoc
@@ -2,29 +2,7 @@ JDO supports `double` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
-@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        objectType = "demo.PrimitiveDoubleJdoEntity"
-)
-public class PrimitiveDoubleJdoEntity
-    implements HasAsciiDocDescription,   PrimitiveDoubleHolder {          // <.>
-
-    public PrimitiveDoubleJdoEntity(double initialValue) { ... }            // <.>
-
-    @Title(prepend = "double (primitive) JDO entity: ")
-    @Getter @Setter
-    private double readOnlyProperty;                                      // <.>
-
-    @Getter @Setter
-    private double readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private double readWriteProperty;
-
-}
+include::PrimitiveDoubleJdoEntity.java[tags="class"]
 ----
 <.> a no-arg constructor is introduced by JDO enhancer
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity.java
index 84bb5d3..0860d1c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdoEntity.java
@@ -36,24 +36,26 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.doubles.holder.PrimitiveDoubleHolder;
 
+//tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObject(
         objectType = "demo.PrimitiveDoubleJdoEntity"
 )
-public class PrimitiveDoubleJdoEntity
-        implements HasAsciiDocDescription,
-        PrimitiveDoubleHolder {
+public class PrimitiveDoubleJdoEntity                               // <.>
+        implements HasAsciiDocDescription, PrimitiveDoubleHolder {
 
+//end::class[]
     public PrimitiveDoubleJdoEntity(double initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "double (primitive) JDO entity: ")
     @Getter @Setter
-    private double readOnlyProperty;
+    private double readOnlyProperty;                                // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -65,3 +67,4 @@ public class PrimitiveDoubleJdoEntity
     private double readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel-description.adoc
index 9fb6abe..d627177 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel-description.adoc
@@ -2,35 +2,7 @@ JAXB supports `double` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@XmlRootElement(name = "demo.PrimitiveDoubleViewModel")
-@XmlType
-@XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(
-        nature=Nature.VIEW_MODEL,
-        objectType = "demo.PrimitiveDoubleViewModel"
-)
-@lombok.NoArgsConstructor                               // <.>
-public class PrimitiveDoubleViewModel
-        implements HasAsciiDocDescription,
-                   PrimitiveDoubleHolder {
-
-    public PrimitiveDoubleViewModel(double initialValue) {  // <.>
-        // ...
-    }
-
-    @Title(prepend = "double (primitive) view model: ")
-    @Getter @Setter
-    private double readOnlyProperty;                      // <.>
-
-    @Getter @Setter
-    private double readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private double readWriteProperty;
-
-}
+include::PrimitiveDoubleViewModel.java[tags="class"]
 ----
 <.> a no-arg constructor is required by JAXB
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel.java
index c9e42e4..2870c45 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleViewModel.java
@@ -37,6 +37,7 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.doubles.holder.PrimitiveDoubleHolder;
 
+//tag::class[]
 @XmlRootElement(name = "demo.PrimitiveDoubleViewModel")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -44,20 +45,21 @@ import demoapp.dom.types.primitive.doubles.holder.PrimitiveDoubleHolder;
         nature=Nature.VIEW_MODEL,
         objectType = "demo.PrimitiveDoubleViewModel"
 )
-@lombok.NoArgsConstructor
+@lombok.NoArgsConstructor                                           // <.>
 public class PrimitiveDoubleViewModel
-        implements HasAsciiDocDescription,
-        PrimitiveDoubleHolder {
+        implements HasAsciiDocDescription, PrimitiveDoubleHolder {
 
+//end::class[]
     public PrimitiveDoubleViewModel(double initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "double (primitive) view model: ")
     @Getter @Setter
-    private double readOnlyProperty;
+    private double readOnlyProperty;                                // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -69,3 +71,4 @@ public class PrimitiveDoubleViewModel
     private double readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats-description.adoc
index 1de3892..258ace4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats-description.adoc
@@ -13,38 +13,7 @@ These objects both implement a common interface, `PrimitiveFloatHolder`:
 
 [source,java]
 ----
-public interface PrimitiveFloatHolder {
-
-    float getReadOnlyProperty();
-    void setReadOnlyProperty(float c);
-
-    float getReadOnlyProperty2();
-    void setReadOnlyProperty2(float c);
-
-    float getReadWriteProperty();
-    void setReadWriteProperty(float c);
-
-    @MemberOrder(name = "label-positions", sequence = "1")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
-    default float getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "2")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
-    default float getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "3")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
-    default float getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "4")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
-    default float getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
-
-}
+include::holder/PrimitiveFloatHolder.java[tags=class]
 ----
 
 The default methods have annotations that automatically inherited.
@@ -56,28 +25,11 @@ Using `@MemberOrder` positions the properties into the appropriate `<field-set>`
 A number of mixin actions contribute through this interface, demonstrate the use of `float` as a parameter and as a return type.
 For example:
 
-* the `updateReadOnlyProperty` action is:
+* the `updateReadOnlyPropertyPromptStyleInline` action is:
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.IDEMPOTENT,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "1"
-)
-@RequiredArgsConstructor
-public class PrimitiveFloatHolder_updateReadOnlyProperty {
-
-    private final PrimitiveFloatHolder primitiveFloatHolder;
-
-    public PrimitiveFloatHolder act(float newValue) {
-        primitiveFloatHolder.setReadOnlyProperty(newValue);
-        return primitiveFloatHolder;
-    }
-    public float default0Act() {
-        return primitiveFloatHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleInline.java[tags=class]
 ----
 +
 There are a number of variants of this action, to demonstrate different prompt layouts.
@@ -86,20 +38,7 @@ There are a number of variants of this action, to demonstrate different prompt l
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.SAFE,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "3"
-)
-@RequiredArgsConstructor
-public class PrimitiveFloatHolder_actionReturning {
-
-    private final PrimitiveFloatHolder primitiveFloatHolder;
-
-    public float act() {
-        return primitiveFloatHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveFloatHolder_actionReturning.java[tags=class]
 ----
 
 == Mixin properties
@@ -110,18 +49,7 @@ We also use the interface to contribute a number of mixin properties:
 +
 [source,java]
 ----
-@Property()
-@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ")
-@RequiredArgsConstructor
-public class PrimitiveFloatHolder_mixinPropertyWithCssClass {
-
-    private final PrimitiveFloatHolder primitiveFloatHolder;
-
-    @MemberOrder(name = "contributed", sequence = "1")
-    public float prop() {
-        return primitiveFloatHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveFloatHolder_mixinPropertyWithCssClass.java[tags=class]
 ----
 +
 TIP: the styling is provided from the `application.css` static resource.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder.java
index 9d80154..1436fe0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder.java
@@ -41,23 +41,30 @@ import lombok.extern.log4j.Log4j2;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
+//tag::class[]
 public interface PrimitiveFloatHolder {
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     float getReadOnlyProperty();
     void setReadOnlyProperty(float c);
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+//tag::class[]
     float getReadOnlyProperty2();
     void setReadOnlyProperty2(float c);
 
+//end::class[]
     @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     float getReadWriteProperty();
     void setReadWriteProperty(float c);
 
@@ -82,3 +89,4 @@ public interface PrimitiveFloatHolder {
     default float getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_actionReturning.java
index 594ff25..1c242c0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_actionReturning.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_actionReturning.java
@@ -24,9 +24,8 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
-@Action(
-        semantics = SemanticsOf.SAFE
-)
+//tag::class[]
+@Action(semantics = SemanticsOf.SAFE)
 @RequiredArgsConstructor
 public class PrimitiveFloatHolder_actionReturning {
 
@@ -37,3 +36,4 @@ public class PrimitiveFloatHolder_actionReturning {
     }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_mixinPropertyWithCssClass.java
index c9721a9..93be015 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_mixinPropertyWithCssClass.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_mixinPropertyWithCssClass.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.Where;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Property()
 @PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
 @RequiredArgsConstructor
@@ -37,4 +38,6 @@ public class PrimitiveFloatHolder_mixinPropertyWithCssClass {
     public float prop() {
         return primitiveFloatHolder.getReadOnlyProperty();
     }
+
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleInline.java
index 587787b..76b99dc 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleInline.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/holder/PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT,
         associateWith = "readOnlyProperty",
@@ -45,5 +46,5 @@ public class PrimitiveFloatHolder_updateReadOnlyPropertyPromptStyleInline {
         return primitiveFloatHolder.getReadOnlyProperty();
     }
 
-
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity-description.adoc
index 1db8957..dcead2a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity-description.adoc
@@ -2,29 +2,7 @@ JDO supports `float` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
-@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        objectType = "demo.PrimitiveFloatJdoEntity"
-)
-public class PrimitiveFloatJdoEntity
-    implements HasAsciiDocDescription,   PrimitiveFloatHolder {          // <.>
-
-    public PrimitiveFloatJdoEntity(float initialValue) { ... }            // <.>
-
-    @Title(prepend = "float (primitive) JDO entity: ")
-    @Getter @Setter
-    private float readOnlyProperty;                                      // <.>
-
-    @Getter @Setter
-    private float readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private float readWriteProperty;
-
-}
+include::PrimitiveFloatJdoEntity.java[tags="class"]
 ----
 <.> a no-arg constructor is introduced by JDO enhancer
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity.java
index 51e96c4..346c844 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdoEntity.java
@@ -36,24 +36,26 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.floats.holder.PrimitiveFloatHolder;
 
+//tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObject(
         objectType = "demo.PrimitiveFloatJdoEntity"
 )
-public class PrimitiveFloatJdoEntity
-        implements HasAsciiDocDescription,
-        PrimitiveFloatHolder {
+public class PrimitiveFloatJdoEntity                                // <.>
+        implements HasAsciiDocDescription, PrimitiveFloatHolder {
 
+//end::class[]
     public PrimitiveFloatJdoEntity(float initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "float (primitive) JDO entity: ")
     @Getter @Setter
-    private float readOnlyProperty;
+    private float readOnlyProperty;                                 // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -65,3 +67,4 @@ public class PrimitiveFloatJdoEntity
     private float readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel-description.adoc
index 70f4206..28724fd 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel-description.adoc
@@ -2,35 +2,7 @@ JAXB supports `float` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@XmlRootElement(name = "demo.PrimitiveFloatViewModel")
-@XmlType
-@XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(
-        nature=Nature.VIEW_MODEL,
-        objectType = "demo.PrimitiveFloatViewModel"
-)
-@lombok.NoArgsConstructor                               // <.>
-public class PrimitiveFloatViewModel
-        implements HasAsciiDocDescription,
-                   PrimitiveFloatHolder {
-
-    public PrimitiveFloatViewModel(float initialValue) {  // <.>
-        // ...
-    }
-
-    @Title(prepend = "float (primitive) view model: ")
-    @Getter @Setter
-    private float readOnlyProperty;                      // <.>
-
-    @Getter @Setter
-    private float readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private float readWriteProperty;
-
-}
+include::PrimitiveFloatViewModel.java[tags="class"]
 ----
 <.> a no-arg constructor is required by JAXB
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel.java
index 34134a7..733a15f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatViewModel.java
@@ -37,6 +37,7 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.floats.holder.PrimitiveFloatHolder;
 
+//tag::class[]
 @XmlRootElement(name = "demo.PrimitiveFloatViewModel")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -44,20 +45,21 @@ import demoapp.dom.types.primitive.floats.holder.PrimitiveFloatHolder;
         nature=Nature.VIEW_MODEL,
         objectType = "demo.PrimitiveFloatViewModel"
 )
-@lombok.NoArgsConstructor
+@lombok.NoArgsConstructor                                           // <.>
 public class PrimitiveFloatViewModel
-        implements HasAsciiDocDescription,
-        PrimitiveFloatHolder {
+        implements HasAsciiDocDescription, PrimitiveFloatHolder {
 
+//end::class[]
     public PrimitiveFloatViewModel(float initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "float (primitive) view model: ")
     @Getter @Setter
-    private float readOnlyProperty;
+    private float readOnlyProperty;                                 // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -69,3 +71,4 @@ public class PrimitiveFloatViewModel
     private float readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts-description.adoc
index e992064..7b6e205 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts-description.adoc
@@ -13,38 +13,7 @@ These objects both implement a common interface, `PrimitiveIntHolder`:
 
 [source,java]
 ----
-public interface PrimitiveIntHolder {
-
-    int getReadOnlyProperty();
-    void setReadOnlyProperty(int c);
-
-    int getReadOnlyProperty2();
-    void setReadOnlyProperty2(int c);
-
-    int getReadWriteProperty();
-    void setReadWriteProperty(int c);
-
-    @MemberOrder(name = "label-positions", sequence = "1")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
-    default int getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "2")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
-    default int getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "3")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
-    default int getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "4")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
-    default int getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
-
-}
+include::holder/PrimitiveIntHolder.java[tags=class]
 ----
 
 The default methods have annotations that automatically inherited.
@@ -56,28 +25,11 @@ Using `@MemberOrder` positions the properties into the appropriate `<field-set>`
 A number of mixin actions contribute through this interface, demonstrate the use of `int` as a parameter and as a return type.
 For example:
 
-* the `updateReadOnlyProperty` action is:
+* the `updateReadOnlyPropertyPromptStyleInline` action is:
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.IDEMPOTENT,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "1"
-)
-@RequiredArgsConstructor
-public class PrimitiveIntHolder_updateReadOnlyProperty {
-
-    private final PrimitiveIntHolder primitiveIntHolder;
-
-    public PrimitiveIntHolder act(int newValue) {
-        primitiveIntHolder.setReadOnlyProperty(newValue);
-        return primitiveIntHolder;
-    }
-    public int default0Act() {
-        return primitiveIntHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleInline.java[tags=class]
 ----
 +
 There are a number of variants of this action, to demonstrate different prompt layouts.
@@ -86,20 +38,7 @@ There are a number of variants of this action, to demonstrate different prompt l
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.SAFE,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "3"
-)
-@RequiredArgsConstructor
-public class PrimitiveIntHolder_actionReturning {
-
-    private final PrimitiveIntHolder primitiveIntHolder;
-
-    public int act() {
-        return primitiveIntHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveIntHolder_actionReturning.java[tags=class]
 ----
 
 == Mixin properties
@@ -110,18 +49,7 @@ We also use the interface to contribute a number of mixin properties:
 +
 [source,java]
 ----
-@Property()
-@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ")
-@RequiredArgsConstructor
-public class PrimitiveIntHolder_mixinPropertyWithCssClass {
-
-    private final PrimitiveIntHolder primitiveIntHolder;
-
-    @MemberOrder(name = "contributed", sequence = "1")
-    public int prop() {
-        return primitiveIntHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveIntHolder_mixinPropertyWithCssClass.java[tags=class]
 ----
 +
 TIP: the styling is provided from the `application.css` static resource.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder.java
index a5dc5f4..e2605a2 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder.java
@@ -41,23 +41,30 @@ import lombok.extern.log4j.Log4j2;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
+//tag::class[]
 public interface PrimitiveIntHolder {
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     int getReadOnlyProperty();
     void setReadOnlyProperty(int c);
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+//tag::class[]
     int getReadOnlyProperty2();
     void setReadOnlyProperty2(int c);
 
+//end::class[]
     @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     int getReadWriteProperty();
     void setReadWriteProperty(int c);
 
@@ -82,3 +89,4 @@ public interface PrimitiveIntHolder {
     default int getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_actionReturning.java
index 481e74f..a389b51 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_actionReturning.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_actionReturning.java
@@ -24,9 +24,8 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
-@Action(
-        semantics = SemanticsOf.SAFE
-)
+//tag::class[]
+@Action(semantics = SemanticsOf.SAFE)
 @RequiredArgsConstructor
 public class PrimitiveIntHolder_actionReturning {
 
@@ -37,3 +36,4 @@ public class PrimitiveIntHolder_actionReturning {
     }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_mixinPropertyWithCssClass.java
index d0f487d..47ef781 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_mixinPropertyWithCssClass.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_mixinPropertyWithCssClass.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.Where;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Property()
 @PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
 @RequiredArgsConstructor
@@ -37,4 +38,6 @@ public class PrimitiveIntHolder_mixinPropertyWithCssClass {
     public int prop() {
         return primitiveIntHolder.getReadOnlyProperty();
     }
+
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleInline.java
index a982cdf..5fb79a3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleInline.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/holder/PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT,
         associateWith = "readOnlyProperty",
@@ -45,5 +46,5 @@ public class PrimitiveIntHolder_updateReadOnlyPropertyPromptStyleInline {
         return primitiveIntHolder.getReadOnlyProperty();
     }
 
-
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity-description.adoc
index 2120453..4dffc37 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity-description.adoc
@@ -2,29 +2,7 @@ JDO supports `int` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
-@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        objectType = "demo.PrimitiveIntJdoEntity"
-)
-public class PrimitiveIntJdoEntity
-    implements HasAsciiDocDescription,   PrimitiveIntHolder {          // <.>
-
-    public PrimitiveIntJdoEntity(int initialValue) { ... }            // <.>
-
-    @Title(prepend = "int (primitive) JDO entity: ")
-    @Getter @Setter
-    private int readOnlyProperty;                                      // <.>
-
-    @Getter @Setter
-    private int readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private int readWriteProperty;
-
-}
+include::PrimitiveIntJdoEntity.java[tags="class"]
 ----
 <.> a no-arg constructor is introduced by JDO enhancer
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity.java
index 2585d73..dd9372b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdoEntity.java
@@ -36,24 +36,26 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.ints.holder.PrimitiveIntHolder;
 
+//tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObject(
         objectType = "demo.PrimitiveIntJdoEntity"
 )
-public class PrimitiveIntJdoEntity
-        implements HasAsciiDocDescription,
-        PrimitiveIntHolder {
+public class PrimitiveIntJdoEntity                              // <.>
+        implements HasAsciiDocDescription, PrimitiveIntHolder {
 
+//end::class[]
     public PrimitiveIntJdoEntity(int initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "int (primitive) JDO entity: ")
     @Getter @Setter
-    private int readOnlyProperty;
+    private int readOnlyProperty;                               // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -65,3 +67,4 @@ public class PrimitiveIntJdoEntity
     private int readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel-description.adoc
index 118db83..d3c0ac0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel-description.adoc
@@ -2,35 +2,7 @@ JAXB supports `int` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@XmlRootElement(name = "demo.PrimitiveIntViewModel")
-@XmlType
-@XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(
-        nature=Nature.VIEW_MODEL,
-        objectType = "demo.PrimitiveIntViewModel"
-)
-@lombok.NoArgsConstructor                               // <.>
-public class PrimitiveIntViewModel
-        implements HasAsciiDocDescription,
-                   PrimitiveIntHolder {
-
-    public PrimitiveIntViewModel(int initialValue) {  // <.>
-        // ...
-    }
-
-    @Title(prepend = "int (primitive) view model: ")
-    @Getter @Setter
-    private int readOnlyProperty;                      // <.>
-
-    @Getter @Setter
-    private int readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private int readWriteProperty;
-
-}
+include::PrimitiveIntViewModel.java[tags="class"]
 ----
 <.> a no-arg constructor is required by JAXB
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel.java
index 35239fe..bb8473a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntViewModel.java
@@ -37,6 +37,7 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.ints.holder.PrimitiveIntHolder;
 
+//tag::class[]
 @XmlRootElement(name = "demo.PrimitiveIntViewModel")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -44,20 +45,21 @@ import demoapp.dom.types.primitive.ints.holder.PrimitiveIntHolder;
         nature=Nature.VIEW_MODEL,
         objectType = "demo.PrimitiveIntViewModel"
 )
-@lombok.NoArgsConstructor
+@lombok.NoArgsConstructor                                           // <.>
 public class PrimitiveIntViewModel
-        implements HasAsciiDocDescription,
-        PrimitiveIntHolder {
+        implements HasAsciiDocDescription, PrimitiveIntHolder {
 
+//end::class[]
     public PrimitiveIntViewModel(int initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "int (primitive) view model: ")
     @Getter @Setter
-    private int readOnlyProperty;
+    private int readOnlyProperty;                                   // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -69,3 +71,4 @@ public class PrimitiveIntViewModel
     private int readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/PrimitiveLongs-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/PrimitiveLongs-description.adoc
index 4689b05..c018b60 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/PrimitiveLongs-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/PrimitiveLongs-description.adoc
@@ -13,38 +13,7 @@ These objects both implement a common interface, `PrimitiveLongHolder`:
 
 [source,java]
 ----
-public interface PrimitiveLongHolder {
-
-    long getReadOnlyProperty();
-    void setReadOnlyProperty(long c);
-
-    long getReadOnlyProperty2();
-    void setReadOnlyProperty2(long c);
-
-    long getReadWriteProperty();
-    void setReadWriteProperty(long c);
-
-    @MemberOrder(name = "label-positions", sequence = "1")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
-    default long getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "2")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
-    default long getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "3")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
-    default long getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "4")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
-    default long getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
-
-}
+include::holder/PrimitiveLongHolder.java[tags=class]
 ----
 
 The default methods have annotations that automatically inherited.
@@ -56,28 +25,11 @@ Using `@MemberOrder` positions the properties into the appropriate `<field-set>`
 A number of mixin actions contribute through this interface, demonstrate the use of `long` as a parameter and as a return type.
 For example:
 
-* the `updateReadOnlyProperty` action is:
+* the `updateReadOnlyPropertyPromptStyleInline` action is:
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.IDEMPOTENT,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "1"
-)
-@RequiredArgsConstructor
-public class PrimitiveLongHolder_updateReadOnlyProperty {
-
-    private final PrimitiveLongHolder primitiveLongHolder;
-
-    public PrimitiveLongHolder act(long newValue) {
-        primitiveLongHolder.setReadOnlyProperty(newValue);
-        return primitiveLongHolder;
-    }
-    public long default0Act() {
-        return primitiveLongHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleInline.java[tags=class]
 ----
 +
 There are a number of variants of this action, to demonstrate different prompt layouts.
@@ -86,20 +38,7 @@ There are a number of variants of this action, to demonstrate different prompt l
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.SAFE,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "3"
-)
-@RequiredArgsConstructor
-public class PrimitiveLongHolder_actionReturning {
-
-    private final PrimitiveLongHolder primitiveLongHolder;
-
-    public long act() {
-        return primitiveLongHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveLongHolder_actionReturning.java[tags=class]
 ----
 
 == Mixin properties
@@ -110,18 +49,7 @@ We also use the interface to contribute a number of mixin properties:
 +
 [source,java]
 ----
-@Property()
-@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ")
-@RequiredArgsConstructor
-public class PrimitiveLongHolder_mixinPropertyWithCssClass {
-
-    private final PrimitiveLongHolder primitiveLongHolder;
-
-    @MemberOrder(name = "contributed", sequence = "1")
-    public long prop() {
-        return primitiveLongHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveLongHolder_mixinPropertyWithCssClass.java[tags=class]
 ----
 +
 TIP: the styling is provided from the `application.css` static resource.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder.java
index ebba3a0..d7386a3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder.java
@@ -41,23 +41,30 @@ import lombok.extern.log4j.Log4j2;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
+//tag::class[]
 public interface PrimitiveLongHolder {
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     long getReadOnlyProperty();
     void setReadOnlyProperty(long c);
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+//tag::class[]
     long getReadOnlyProperty2();
     void setReadOnlyProperty2(long c);
 
+//end::class[]
     @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     long getReadWriteProperty();
     void setReadWriteProperty(long c);
 
@@ -82,3 +89,4 @@ public interface PrimitiveLongHolder {
     default long getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_actionReturning.java
index 38cd4c1..526e39e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_actionReturning.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_actionReturning.java
@@ -24,9 +24,8 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
-@Action(
-        semantics = SemanticsOf.SAFE
-)
+//tag::class[]
+@Action(semantics = SemanticsOf.SAFE)
 @RequiredArgsConstructor
 public class PrimitiveLongHolder_actionReturning {
 
@@ -37,3 +36,4 @@ public class PrimitiveLongHolder_actionReturning {
     }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_mixinPropertyWithCssClass.java
index a6f2478..948195e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_mixinPropertyWithCssClass.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_mixinPropertyWithCssClass.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.Where;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Property()
 @PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
 @RequiredArgsConstructor
@@ -37,4 +38,6 @@ public class PrimitiveLongHolder_mixinPropertyWithCssClass {
     public long prop() {
         return primitiveLongHolder.getReadOnlyProperty();
     }
+
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleInline.java
index 2589c17..c258c77 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleInline.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/holder/PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT,
         associateWith = "readOnlyProperty",
@@ -45,5 +46,5 @@ public class PrimitiveLongHolder_updateReadOnlyPropertyPromptStyleInline {
         return primitiveLongHolder.getReadOnlyProperty();
     }
 
-
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity-description.adoc
index 2f833ad..41d57b7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity-description.adoc
@@ -2,29 +2,7 @@ JDO supports `long` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
-@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        objectType = "demo.PrimitiveLongJdoEntity"
-)
-public class PrimitiveLongJdoEntity
-    implements HasAsciiDocDescription,   PrimitiveLongHolder {          // <.>
-
-    public PrimitiveLongJdoEntity(long initialValue) { ... }            // <.>
-
-    @Title(prepend = "long (primitive) JDO entity: ")
-    @Getter @Setter
-    private long readOnlyProperty;                                      // <.>
-
-    @Getter @Setter
-    private long readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private long readWriteProperty;
-
-}
+include::PrimitiveLongJdoEntity.java[tags="class"]
 ----
 <.> a no-arg constructor is introduced by JDO enhancer
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity.java
index a938692..a635bd1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/jdo/PrimitiveLongJdoEntity.java
@@ -36,24 +36,26 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.longs.holder.PrimitiveLongHolder;
 
+//tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObject(
         objectType = "demo.PrimitiveLongJdoEntity"
 )
-public class PrimitiveLongJdoEntity
-        implements HasAsciiDocDescription,
-        PrimitiveLongHolder {
+public class PrimitiveLongJdoEntity                                 // <.>
+        implements HasAsciiDocDescription, PrimitiveLongHolder {
 
+//end::class[]
     public PrimitiveLongJdoEntity(long initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "long (primitive) JDO entity: ")
     @Getter @Setter
-    private long readOnlyProperty;
+    private long readOnlyProperty;                                  // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -65,3 +67,4 @@ public class PrimitiveLongJdoEntity
     private long readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel-description.adoc
index 2d4fc3a..6ec327f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel-description.adoc
@@ -2,35 +2,7 @@ JAXB supports `long` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@XmlRootElement(name = "demo.PrimitiveLongViewModel")
-@XmlType
-@XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(
-        nature=Nature.VIEW_MODEL,
-        objectType = "demo.PrimitiveLongViewModel"
-)
-@lombok.NoArgsConstructor                               // <.>
-public class PrimitiveLongViewModel
-        implements HasAsciiDocDescription,
-                   PrimitiveLongHolder {
-
-    public PrimitiveLongViewModel(long initialValue) {  // <.>
-        // ...
-    }
-
-    @Title(prepend = "long (primitive) view model: ")
-    @Getter @Setter
-    private long readOnlyProperty;                      // <.>
-
-    @Getter @Setter
-    private long readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private long readWriteProperty;
-
-}
+include::PrimitiveLongViewModel.java[tags="class"]
 ----
 <.> a no-arg constructor is required by JAXB
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel.java
index 8a4e399..081e222 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/longs/vm/PrimitiveLongViewModel.java
@@ -37,6 +37,7 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.longs.holder.PrimitiveLongHolder;
 
+//tag::class[]
 @XmlRootElement(name = "demo.PrimitiveLongViewModel")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -44,20 +45,21 @@ import demoapp.dom.types.primitive.longs.holder.PrimitiveLongHolder;
         nature=Nature.VIEW_MODEL,
         objectType = "demo.PrimitiveLongViewModel"
 )
-@lombok.NoArgsConstructor
+@lombok.NoArgsConstructor                                           // <.>
 public class PrimitiveLongViewModel
-        implements HasAsciiDocDescription,
-        PrimitiveLongHolder {
+        implements HasAsciiDocDescription, PrimitiveLongHolder {
 
+//end::class[]
     public PrimitiveLongViewModel(long initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "long (primitive) view model: ")
     @Getter @Setter
-    private long readOnlyProperty;
+    private long readOnlyProperty;                                  // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -69,3 +71,4 @@ public class PrimitiveLongViewModel
     private long readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts-description.adoc
index c881c5a..9344af8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/PrimitiveShorts-description.adoc
@@ -13,38 +13,7 @@ These objects both implement a common interface, `PrimitiveShortHolder`:
 
 [source,java]
 ----
-public interface PrimitiveShortHolder {
-
-    short getReadOnlyProperty();
-    void setReadOnlyProperty(short c);
-
-    short getReadOnlyProperty2();
-    void setReadOnlyProperty2(short c);
-
-    short getReadWriteProperty();
-    void setReadWriteProperty(short c);
-
-    @MemberOrder(name = "label-positions", sequence = "1")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.LEFT, describedAs = "labelPosition=LEFT", hidden = Where.ALL_TABLES)
-    default short getReadOnlyPropertyDerivedLabelPositionLeft() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "2")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.TOP, describedAs = "labelPosition=TOP", hidden = Where.ALL_TABLES)
-    default short getReadOnlyPropertyDerivedLabelPositionTop() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "3")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.RIGHT, describedAs = "labelPosition=RIGHT", hidden = Where.ALL_TABLES)
-    default short getReadOnlyPropertyDerivedLabelPositionRight() { return getReadOnlyProperty(); }
-
-    @MemberOrder(name = "label-positions", sequence = "4")
-    @Property
-    @PropertyLayout(labelPosition = LabelPosition.NONE, describedAs = "labelPosition=NONE", hidden = Where.ALL_TABLES)
-    default short getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
-
-}
+include::holder/PrimitiveShortHolder.java[tags=class]
 ----
 
 The default methods have annotations that automatically inherited.
@@ -60,24 +29,7 @@ For example:
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.IDEMPOTENT,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "1"
-)
-@RequiredArgsConstructor
-public class PrimitiveShortHolder_updateReadOnlyProperty {
-
-    private final PrimitiveShortHolder primitiveShortHolder;
-
-    public PrimitiveShortHolder act(short newValue) {
-        primitiveShortHolder.setReadOnlyProperty(newValue);
-        return primitiveShortHolder;
-    }
-    public short default0Act() {
-        return primitiveShortHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleInline.java[tags=class]
 ----
 +
 There are a number of variants of this action, to demonstrate different prompt layouts.
@@ -86,20 +38,7 @@ There are a number of variants of this action, to demonstrate different prompt l
 +
 [source,java]
 ----
-@Action(
-        semantics = SemanticsOf.SAFE,
-        associateWith = "readOnlyProperty",
-        associateWithSequence = "3"
-)
-@RequiredArgsConstructor
-public class PrimitiveShortHolder_actionReturning {
-
-    private final PrimitiveShortHolder primitiveShortHolder;
-
-    public short act() {
-        return primitiveShortHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveShortHolder_actionReturning.java[tags=class]
 ----
 
 == Mixin properties
@@ -110,18 +49,7 @@ We also use the interface to contribute a number of mixin properties:
 +
 [source,java]
 ----
-@Property()
-@PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ")
-@RequiredArgsConstructor
-public class PrimitiveShortHolder_mixinPropertyWithCssClass {
-
-    private final PrimitiveShortHolder primitiveShortHolder;
-
-    @MemberOrder(name = "contributed", sequence = "1")
-    public short prop() {
-        return primitiveShortHolder.getReadOnlyProperty();
-    }
-}
+include::holder/PrimitiveShortHolder_mixinPropertyWithCssClass.java[tags=class]
 ----
 +
 TIP: the styling is provided from the `application.css` static resource.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder.java
index aeea47b..a296b35 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder.java
@@ -41,23 +41,30 @@ import lombok.extern.log4j.Log4j2;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
+//tag::class[]
 public interface PrimitiveShortHolder {
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     short getReadOnlyProperty();
     void setReadOnlyProperty(short c);
 
+//end::class[]
     @MemberOrder(name = "action-prompt-styles", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout(describedAs = "associated action uses promptStyle=INLINE_AS_IF_EDIT", hidden = Where.ALL_TABLES) // TODO: doesn't seem to get picked up
+//tag::class[]
     short getReadOnlyProperty2();
     void setReadOnlyProperty2(short c);
 
+//end::class[]
     @MemberOrder(name = "editable-properties", sequence = "1") // TODO: doesn't seem to get picked up
     @Property
     @PropertyLayout
+//tag::class[]
     short getReadWriteProperty();
     void setReadWriteProperty(short c);
 
@@ -82,3 +89,4 @@ public interface PrimitiveShortHolder {
     default short getReadOnlyPropertyDerivedLabelPositionNone() { return getReadOnlyProperty(); }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_actionReturning.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_actionReturning.java
index d7f0831..1421574 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_actionReturning.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_actionReturning.java
@@ -24,9 +24,8 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
-@Action(
-        semantics = SemanticsOf.SAFE
-)
+//tag::class[]
+@Action(semantics = SemanticsOf.SAFE)
 @RequiredArgsConstructor
 public class PrimitiveShortHolder_actionReturning {
 
@@ -37,3 +36,4 @@ public class PrimitiveShortHolder_actionReturning {
     }
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_mixinPropertyWithCssClass.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_mixinPropertyWithCssClass.java
index cbb625e..0910c7c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_mixinPropertyWithCssClass.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_mixinPropertyWithCssClass.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.Where;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Property()
 @PropertyLayout(cssClass = "red", describedAs = "cssClass = \"red\" ", hidden = Where.ALL_TABLES)
 @RequiredArgsConstructor
@@ -37,4 +38,6 @@ public class PrimitiveShortHolder_mixinPropertyWithCssClass {
     public short prop() {
         return primitiveShortHolder.getReadOnlyProperty();
     }
+
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleInline.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleInline.java
index 628d5fb..e2a5de3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleInline.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/holder/PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleInline.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import lombok.RequiredArgsConstructor;
 
 
+//tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT,
         associateWith = "readOnlyProperty",
@@ -45,5 +46,5 @@ public class PrimitiveShortHolder_updateReadOnlyPropertyPromptStyleInline {
         return primitiveShortHolder.getReadOnlyProperty();
     }
 
-
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity-description.adoc
index 97f1fd3..21e8c68 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity-description.adoc
@@ -2,29 +2,7 @@ JDO supports `short` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
-@DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        objectType = "demo.PrimitiveShortJdoEntity"
-)
-public class PrimitiveShortJdoEntity
-    implements HasAsciiDocDescription,   PrimitiveShortHolder {          // <.>
-
-    public PrimitiveShortJdoEntity(short initialValue) { ... }            // <.>
-
-    @Title(prepend = "short (primitive) JDO entity: ")
-    @Getter @Setter
-    private short readOnlyProperty;                                      // <.>
-
-    @Getter @Setter
-    private short readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private short readWriteProperty;
-
-}
+include::PrimitiveShortJdoEntity.java[tags="class"]
 ----
 <.> a no-arg constructor is introduced by JDO enhancer
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity.java
index 761a330..3b6302a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/jdo/PrimitiveShortJdoEntity.java
@@ -36,24 +36,26 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.shorts.holder.PrimitiveShortHolder;
 
+//tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObject(
         objectType = "demo.PrimitiveShortJdoEntity"
 )
-public class PrimitiveShortJdoEntity
-        implements HasAsciiDocDescription,
-        PrimitiveShortHolder {
+public class PrimitiveShortJdoEntity                                // <.>
+        implements HasAsciiDocDescription, PrimitiveShortHolder {
 
+//end::class[]
     public PrimitiveShortJdoEntity(short initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "short (primitive) JDO entity: ")
     @Getter @Setter
-    private short readOnlyProperty;
+    private short readOnlyProperty;                                 // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -65,3 +67,4 @@ public class PrimitiveShortJdoEntity
     private short readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel-description.adoc
index f125a6d..6418a1d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel-description.adoc
@@ -2,35 +2,7 @@ JAXB supports `short` out-of-the-box, so no special annotations are required.
 
 [source,java]
 ----
-@XmlRootElement(name = "demo.PrimitiveShortViewModel")
-@XmlType
-@XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(
-        nature=Nature.VIEW_MODEL,
-        objectType = "demo.PrimitiveShortViewModel"
-)
-@lombok.NoArgsConstructor                               // <.>
-public class PrimitiveShortViewModel
-        implements HasAsciiDocDescription,
-                   PrimitiveShortHolder {
-
-    public PrimitiveShortViewModel(short initialValue) {  // <.>
-        // ...
-    }
-
-    @Title(prepend = "short (primitive) view model: ")
-    @Getter @Setter
-    private short readOnlyProperty;                      // <.>
-
-    @Getter @Setter
-    private short readOnlyProperty2;
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    private short readWriteProperty;
-
-}
+include::PrimitiveShortViewModel.java[tags="class"]
 ----
 <.> a no-arg constructor is required by JAXB
-<.> as a convenience
 <.> no additional annotations required.
\ No newline at end of file
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel.java
index 438e952..48abd92 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/shorts/vm/PrimitiveShortViewModel.java
@@ -37,6 +37,7 @@ import lombok.Setter;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.types.primitive.shorts.holder.PrimitiveShortHolder;
 
+//tag::class[]
 @XmlRootElement(name = "demo.PrimitiveShortViewModel")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -44,20 +45,21 @@ import demoapp.dom.types.primitive.shorts.holder.PrimitiveShortHolder;
         nature=Nature.VIEW_MODEL,
         objectType = "demo.PrimitiveShortViewModel"
 )
-@lombok.NoArgsConstructor
+@lombok.NoArgsConstructor                                           // <.>
 public class PrimitiveShortViewModel
-        implements HasAsciiDocDescription,
-        PrimitiveShortHolder {
+        implements HasAsciiDocDescription, PrimitiveShortHolder {
 
+//end::class[]
     public PrimitiveShortViewModel(short initialValue) {
         this.readOnlyProperty = initialValue;
         this.readOnlyProperty2 = initialValue;
         this.readWriteProperty = initialValue;
     }
 
+//tag::class[]
     @Title(prepend = "short (primitive) view model: ")
     @Getter @Setter
-    private short readOnlyProperty;
+    private short readOnlyProperty;                                 // <.>
 
     @Property
     @PropertyLayout(hidden = Where.ALL_TABLES)
@@ -69,3 +71,4 @@ public class PrimitiveShortViewModel
     private short readWriteProperty;
 
 }
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/jdo/WrapperCharacterJdoEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/jdo/WrapperCharacterJdoEntity-description.adoc
index 3ccc271..204249d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/jdo/WrapperCharacterJdoEntity-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/jdo/WrapperCharacterJdoEntity-description.adoc
@@ -31,7 +31,6 @@ public class WrapperCharacterJdoEntity
 }
 ----
 <.> a no-arg constructor is introduced by JDO enhancer
-<.> as a convenience
 <.> no additional annotations required.
 <.> optional property as defined to Apache Isis
 <.> optional property as defined to JDO/DataNucleus
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.ORIG.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.ORIG.adoc
index 2bce338..f795bdf9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.ORIG.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.ORIG.adoc
@@ -36,7 +36,6 @@ public class WrapperCharacterViewModel
 }
 ----
 <.> a no-arg constructor is required by JAXB
-<.> as a convenience
 <.> no additional annotations required.
 <.> mandatory property as defined to JAXB.
 Note that JAXB's default is that a property is optional, whereas Apache Isis is the opposite, that it is mandatory.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.adoc
index 5c9b573..1ce108c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/wrapper/characters/vm/WrapperCharacterViewModel-description.adoc
@@ -5,7 +5,6 @@ JAXB supports `Character` out-of-the-box, so no special annotations are required
 include::WrapperCharacterViewModel.java[tag="class"]
 ----
 <.> a no-arg constructor is required by JAXB
-<.> as a convenience
 <.> no additional annotations required.
 <.> optional property as defined to Apache Isis
 <.> optional property as defined to JAXB
diff --git a/examples/demo/domain/src/main/resources/static/css/application.css b/examples/demo/domain/src/main/resources/static/css/application.css
index 49cc494..f34c721 100644
--- a/examples/demo/domain/src/main/resources/static/css/application.css
+++ b/examples/demo/domain/src/main/resources/static/css/application.css
@@ -1,10 +1,162 @@
 .property.red label {
-	color: red;
+    color: red;
 }
 
 .welcome {
-	font-size: 16px;
+    font-size: 16px;
 }
 
 
+.admonitionblock td.content > .title {
+    line-height: 1.45;
+    color: #7a2518;
+    font-weight: 400;
+    margin-top: 0;
+    margin-bottom: .25em
+}
+
+.admonitionblock td.content > .title {
+    text-rendering: optimizeLegibility;
+    text-align: left;
+    font-family: "Noto Serif", "DejaVu Serif", serif;
+    font-size: 1rem;
+    font-style: italic
+}
+
+.admonitionblock {
+    margin-top: 10px;
+    margin-bottom: 10px;
+}
+
+.admonitionblock > table {
+    border-collapse: separate;
+    border: 0;
+    background: none;
+    width: 100%
+}
+
+.admonitionblock > table td.icon {
+    text-align: center;
+    width: 80px
+}
+
+.admonitionblock > table td.icon img {
+    max-width: none
+}
+
+.admonitionblock > table td.icon .title {
+    font-weight: bold;
+    font-family: "Open Sans", "DejaVu Sans", sans-serif;
+    text-transform: uppercase
+}
+
+.admonitionblock > table td.content {
+    padding-left: 1.125em;
+    padding-right: 1.25em;
+    border-left: 1px solid #ddddd8;
+    color: rgba(0, 0, 0, .6)
+}
+
+.admonitionblock > table td.content > :last-child > :last-child {
+    margin-bottom: 0
+}
+
+.admonitionblock td.icon [class^="fa icon-"] {
+    font-size: 1.75em;
+    text-shadow: 1px 1px 2px rgba(0, 0, 0, .5);
+    cursor: default
+}
+
+.admonitionblock td.icon .icon-note::before {
+    content: "\f05a";
+    color: #19407c
+}
+
+.admonitionblock td.icon .icon-tip::before {
+    content: "\f0eb";
+    text-shadow: 1px 1px 2px rgba(155, 155, 0, .8);
+    color: #111
+}
+
+.admonitionblock td.icon .icon-warning::before {
+    content: "\f071";
+    color: #bf6900
+}
+
+.admonitionblock td.icon .icon-caution::before {
+    content: "\f06d";
+    color: #bf3400
+}
+
+.admonitionblock td.icon .icon-important::before {
+    content: "\f06a";
+    color: #bf0000
+}
+
+.colist > table {
+    border: 0;
+    background: none
+}
+
+.colist > table > tbody > tr {
+    background: none
+}
+
+.literalblock + .colist, .listingblock + .colist {
+    margin-top: -.5em
+}
+
+.colist td:not([class]):first-child {
+    padding: .4em .75em 0;
+    line-height: 1;
+    vertical-align: top
+}
+
+.colist td:not([class]):first-child img {
+    max-width: none
+}
+
+.colist td:not([class]):last-child {
+    padding: .25em 0
+}
+
+.conum[data-value] {
+    display: inline-block;
+    color: #fff !important;
+    background-color: rgba(0, 0, 0, .8);
+    -webkit-border-radius: 100px;
+    border-radius: 100px;
+    text-align: center;
+    font-size: .75em;
+    width: 1.67em;
+    height: 1.67em;
+    line-height: 1.67em;
+    font-family: "Open Sans", "DejaVu Sans", sans-serif;
+    font-style: normal;
+    font-weight: bold
+}
+
+.conum[data-value] * {
+    color: #fff !important
+}
+
+.conum[data-value] + b {
+    display: none
+}
+
+.conum[data-value]::after {
+    content: attr(data-value)
+}
+
+pre .conum[data-value] {
+    position: relative;
+    top: -.125em
+}
+
+b.conum * {
+    color: inherit !important
+}
 
+.conum:not([data-value]):empty {
+    display: none
+}
\ No newline at end of file
diff --git a/examples/demo/domain/src/test/java/demoapp/dom/_infra/ResourceReaderService_Test.java b/examples/demo/domain/src/test/java/demoapp/dom/_infra/ResourceReaderService_Test.java
index 45d608a..47ebb49 100644
--- a/examples/demo/domain/src/test/java/demoapp/dom/_infra/ResourceReaderService_Test.java
+++ b/examples/demo/domain/src/test/java/demoapp/dom/_infra/ResourceReaderService_Test.java
@@ -21,7 +21,6 @@ class ResourceReaderService_Test {
     void setUp() {
         resourceReaderService = new ResourceReaderService();
         resourceReaderService.markupVariableResolverService = new MarkupVariableResolverService();
-
     }
 
     @Test
@@ -53,4 +52,20 @@ class ResourceReaderService_Test {
         String expected = "";
         assertThat(actual).isEqualTo(expected);
     }
-}
\ No newline at end of file
+
+    @Test
+    void read_subdir_with_tags() {
+
+        // given
+        val attributes = new HashMap<String, Object>();
+        attributes.put("tags", "class");
+
+        // when
+        String actual = resourceReaderService.readResource(getClass(), "subdir/ResourceReaderService_Test-Test1.java", attributes);
+
+        // then
+        String expected = resourceReaderService.readResource(getClass(), "subdir/ResourceReaderService_Test-Test1-expected.java");
+        assertThat(actual).isEqualTo(expected);
+    }
+
+}
diff --git a/examples/demo/domain/src/test/resources/demoapp/dom/_infra/subdir/ResourceReaderService_Test-Test1-expected.java b/examples/demo/domain/src/test/resources/demoapp/dom/_infra/subdir/ResourceReaderService_Test-Test1-expected.java
new file mode 100644
index 0000000..94d7ce6
--- /dev/null
+++ b/examples/demo/domain/src/test/resources/demoapp/dom/_infra/subdir/ResourceReaderService_Test-Test1-expected.java
@@ -0,0 +1,5 @@
+
+// this stuff should be included
+public class Test1 {
+}
+
diff --git a/examples/demo/domain/src/test/resources/demoapp/dom/_infra/subdir/ResourceReaderService_Test-Test1.java b/examples/demo/domain/src/test/resources/demoapp/dom/_infra/subdir/ResourceReaderService_Test-Test1.java
new file mode 100644
index 0000000..1ddf644
--- /dev/null
+++ b/examples/demo/domain/src/test/resources/demoapp/dom/_infra/subdir/ResourceReaderService_Test-Test1.java
@@ -0,0 +1,12 @@
+// this stuff should be ignored
+
+//tag::class[]
+
+// this stuff should be included
+public class Test1 {
+}
+
+//end::class[]
+
+// this stuff should be ignored
+