s(TextMappers.Scanner) игнорирует маскирующиеся вьюшки при  (TextMappers.returnViews IN s.opts)
(исходный заголовок: "TextMappers:? корректность реализации returnViews, maskViews")

Конкретная задача из которой вылез вопрос: нужно сосканировать линейку. Включил настройку returnViews --- сканер линейку игнорирует
> -- Цитата:
> CONST Option elementPossible element of Scanner.opts. If present, the scanner will return embedded views; otherwise these are treated as white space and read over....CONST Option elementPossible element of scanner.opts. If present, the scanner will try to interpret a view as a character code, if the view has a preferred character code. Otherwise, the view is returned.Как трактую документацию:
1) если не нужны вьюшки, то ~(returnViews IN s.opts) -> вьюшки либо игнорируются (как ch = TextMappers.viewcode <= " "), либо трактуются как литеры, которыми они маскируются
2) если нужны все вьюшки, то (returnViews IN s.opts) & ~(maskViews IN s.opts) -> никакие вьюшки не игнорируются ...
3) если нужны только не маскирующиеся вьюшки, то (returnViews IN s.opts) & (maskViews IN s.opts) -> немаскируемые выдаются, маскируемые обрабатываются как в случае (1)

Вопросы: касательно трактовки документации (есть ли другие варианты) и касательно (А-Б --- прошу перепроверить)

А) Анализ кода TextMappers (Skip, Scan, View) показал, что маскируемые вьюшки (маска отлична от TextViews.viewcode) вне зависимости от опций трактуются как литеры, которыми они маскируются.

Б) Поправка для достижения поведения 1-3:
## Код:
```
PROCEDURE Get (VAR s: Scanner; OUT ch: CHAR);
   BEGIN
      s.rider.ReadChar(ch)
--+>      ; IF ({returnViews, maskViews} * s.opts = {returnViews}) & (s.rider.view # NIL) THEN
         (* если вьюшка маскируется, то ch = литера-маска и дальнейший анализ в сканере не распознаёт вьюшки — "затираем" маску *)
         ch := VIEW
      END
   END Get;
```


P.S. Для случая (2) было бы логично помещать в s.char маску вьюшки (s.char := s.rider.char) ?