@if-using not(WORDMAC)
  @use (WORDMAC)
  {{{  libs
  {{{F fun/error
  :::F fun/error
  }}}
  }}}
  {{{  character-classes
  (defset word-char ( alpha digit ))
  }}}

  {{{  backward-word           move one word left
  {{{  word-line-up            go to end of previous line for word
  (defmac word-line-up (
    if test-top ( failed ) fi
    previous-line
    end-of-line
  ))
  }}}
  {{{  blank-left              skip the whitespace left to next word
  (defmac blank-left (
    while not(test-char-set word-char)
     {{{  back or line up
     ( if counter-0 +(store-pos -1)
        ( word-line-up )
       else
        ( backward-character )
       fi
     )
     }}}
  ))
  }}}
  {{{  start-word              move to start of current word
  (defmac start-word (
     {{{  skip word to next space
     while test-char-set word-char
      ( if test-begin-line
          ( return-from-macro )
        else
          ( backward-character )
        fi
      )
     }}}
     forward-character
  ))
  }}}

  (deffun backward-word (
    {{{  one step left
    if test-begin-line
      ( word-line-up )
    else
      ( backward-character )
    fi
    }}}
    blank-left
    start-word
  ))
  }}}
  {{{  forward-word            move to next word right
  {{{  word-line-down          go to beginning of next line for word
  (defmac word-line-down (
    if test-bottom ( failed ) fi
    next-line
    beginning-of-line
  ))
  }}}
  {{{  blank-right             skip the whitespace right to next word
  (defmac blank-right (
    while not(test-char-set word-char)
     {{{  right or down
     ( if test-end-line
         ( word-line-down )
       else
         ( forward-character )
       fi
     )
     }}}
  ))
  }}}
  {{{  end-word                skip to whitespace after current word
  (defmac end-word (
     while test-char-set word-char
       ( forward-character )
  ))
  }}}

  (deffun forward-word (
    {{{  end word or next-line
    if test-end-line
      ( word-line-down )
    else
      ( end-word )
    fi
    }}}
    blank-right
  ))
  }}}

  {{{  case-word-capitalize    capitalize current (or next) word
  (deffun case-word-capitalize (
    {{{  check position
    if or(test-view,and(test-top counter-0 set-enter))
      ( failed )
    fi
    }}}
    {{{  maybe move to next word
    if not(test-char-set word-char)
     ( forward-word )
    fi
    }}}
    {{{  capitalize first char
    if test-char-set lower (case-character-toggle ) fi
    forward-character
    }}}
    {{{  all following word-chars to lowercase
    while test-char-set word-char
     ( if test-char-set upper ( case-character-toggle ) fi
       forward-character
     )
    }}}
  ))
  }}}
  {{{  case-word-upper         all chars of current (or next) word to uppercase
  (deffun case-word-upper (
    {{{  check position
    if or(test-view,and(test-top,counter-0 set-enter))
      ( failed )
    fi
    }}}
    {{{  maybe move to next word
    if not(test-char-set word-char)
     ( forward-word )
    fi
    }}}
    {{{  all chars to uppercase
    do
     ( if test-char-set lower ( case-character-toggle ) fi
       forward-character
     )
    while test-char-set word-char
    }}}
  ))
  }}}
  {{{  case-word-lower         all chars of current (or next) word to lowercase
  (deffun case-word-lower (
    {{{  check position
    if or(test-view,and(test-top counter-0 set-enter))
      ( failed )
    fi
    }}}
    {{{  maybe move to next word
    if not(test-char-set word-char)
     ( forward-word )
    fi
    }}}
    {{{  all chars to lowercase
    do
     ( if test-char-set upper ( case-character-toggle ) fi
       forward-character
     )
    while test-char-set word-char
    }}}
  ))
  }}}
@fi
