MODULE ObxCount0;
(**
project = "BlackBox"
organization = "www.oberon.ch"
contributors = "Oberon microsystems"
version = "System/Rsrc/About"
copyright = "System/Rsrc/About"
license = "Docu/BB-License"
changes = ""
issues = ""
**)
IMPORT TextModels, TextControllers, StdLog;
PROCEDURE Do*;
(** use TextCmds.SelectionGuard as guard for this command **)
VAR c: TextControllers.Controller; from, to, schars, chars, views: INTEGER;
rd: TextModels.Reader;
BEGIN
c := TextControllers.Focus();
IF (c # NIL) & c.HasSelection() THEN
c.GetSelection(from, to); (* get selection range; from < to *)
rd := c.text.NewReader(NIL); (* create a new reader for this text model *)
rd.SetPos(from); (* set the reader to beginning of selection *)
rd.Read; (* read the first element of the text selection *)
schars := 0; chars := 0; views := 0; (* counter variables *)
WHILE rd.Pos() # to DO (* read all elements of the text selection *)
IF rd.view # NIL THEN (* element is a view *)
INC(views)
ELSIF rd.char < 100X THEN (* element is a Latin-1 character *)
INC(schars)
ELSE (* element is Unicode character *)
INC(chars)
END;
rd.Read (* read next element of the text selection *)
END;
StdLog.String("Latin-1 characters: "); StdLog.Int(schars); StdLog.Ln;
StdLog.String("Unicode characters: "); StdLog.Int(chars); StdLog.Ln;
StdLog.String("Views: "); StdLog.Int(views); StdLog.Ln;
StdLog.Ln
END
END Do;
END ObxCount0.