1) Для командера в конце текста д.б.
par.beg = par.end = par.text.Length()
выходит
par.beg = par.text.Length() - 1
par.end = par.text.Length()

испр:
## Код:
```
PROCEDURE Execute (t: TextModels.Model; pos: INTEGER; VAR end: INTEGER; unload: BOOLEAN);
      VAR s: Scanner; beg, res: INTEGER; cmd: Dialog.String;
   BEGIN
      ...
      IF s.s.type IN {qualident, TextMappers.string} THEN
         beg := s.s.Pos()(*  - 1 *); IF ~s.s.rider.eot THEN DEC(beg) END; GetParExtend(s.s.rider, end);
         ASSERT(~cleanerInstalled, 101);
         ...
      END
   END Execute;
```


2) обновл. 27.07.2011
Когда список параметров пуст и сразу заканчивается коммандером (^Q или ~), то коммандер не отрабатывает как стопор:
- перед вызовом GetParExtent в Execute  s.s.rider уже содержит предпрочитанной одну "позицию" (особенность работы сканера).
- в GetParExtent используется r.ReadView, который не предполагает предпрочтения и "начинается" с r.Read.

Испр. + переписан цикл:
## Код:
```
PROCEDURE GetParExtend (r: TextModels.Reader; VAR end: INTEGER);
      VAR v: Views.View;
   BEGIN
      IF r.view # NIL THEN v := r.view ELSE r.ReadView(v) END;
      WHILE ~r.eot & ~( Services.Is(v, "DevCommanders.View") OR Services.Is(v, "DevCommanders.EndView") ) DO
         r.ReadView(v)
      END;
      end := r.Pos(); IF ~r.eot THEN DEC(end) END
   END GetParExtend;
```
