anchor.diff:  
   === Create keyboard macros
   
  -To create keyboard icons like kbd:[Ctrl+T] which can be created directly in Asciidoctor via `\kbd:[Ctrl+T]` you create the PhraseNode as shown below.
  -The example assumes that the macro is called with the macro name `ctrl` and a key as the target, e.g. `\ctrl:S[]`, and creates kbd:[Ctrl + S] from it.
  +To create keyboard icons like kbd:[Ctrl+T] which can be created directly in Asciidoctor via `+kbd:[Ctrl+T]+` you create the PhraseNode as shown below.
  +The example assumes that the macro is called with the macro name `ctrl` and a key as the target, e.g. `+ctrl:S[]+`, and creates kbd:[Ctrl + S] from it.
   
   [[KeyboardInlineMacroProcessor]]
   .Create a phrase node for keys
  
positive.code: 
  === Create button or menu selection macros
  
  To create a menu selection as described at http://asciidoctor.org/docs/user-manual/#menu-selections a processor would create a PhraseNode with the `menu` context.
  The following processor would render the macro `rightclick:New|Class[]` like this: menu:New[Class].
  
  [[ContextMenuInlineMacroProcessor]]
  .Create a phrase node for menu selections.
  
negative.code: == Positional attributes
  
  The first example here has shown how to access named attributes.
  But AsciiDoc also supports positional attributes where the meaning is implicitly derived from the position in the attribute list.
  In that example the attribute `repo` might also be defined as the first attribute so that the inline macro might also be written as  `+issue:333[asciidoctor/asciidoctorj]+`.
  
  The following extension accepts the attribute `repo` as a positional attribute:
  
  