{--------------------------------------------------------}
{    Programa WordWtil
{    Interface com o Word
{    Biblioteca de edicao de texto
{--------------------------------------------------------}

unit WuEdita;

interface

uses dvcrt, winprocs, wintypes, dvwin,
     WuUtil, WuOpc, WuVars, WuMeed, WuMensa;

function  ModuloDeEdicao:string;

implementation


{-------------------------------------------------------------------}
function ModuloDeEdicao:string; {  procedure que tecla no programa  }
{-------------------------------------------------------------------}
var s, salva: string;
    c: char;
    continua, interrompida, ja_Lido:boolean;

begin
    continua := false;

    ja_Lido := false;
    Novo_Modulo := 'edicao';
    interrompida := true;
    textcolor (WHITE); textbackground (RED);
    mensagem ('wuedat',0);  {Modulo de Edicao ativado}
    textcolor (7); textbackground (BLACK);
    writeln;

    repeat
       while keypressed do
          begin
             c := readKey;
             interrompida := true;
             linhaACima;
          end;

       s := '';

       (* se nao continuara a digitacao, rele a linha *)
       if not continua then
          begin
             (* recorta a linha atual do Word *)
             salva := pegaLinha;

             (* retira os espacos em branco *)
             while (salva <> '') and (salva [length (salva)] = ' ') do
                delete (salva, length (salva), 1);
             s := salva;

             if s = '' then sintclek;

             (* limita a string a 79 caracteres *)
             write (copy (s, 1, 79));
          end;

       if not interrompida then
          begin
             c := ' ';
             sintetiza (s);
             ja_Lido := true;
             c := BAIX;
          end
       else
          begin

             (* substitui a area de trasnferencia pela minha *)
             putClipBoard (Clip_Board);

             checkFocus := true; (* para usar Alt Tab *)

             salva := s;

             sintBip;

             (* caso nao tenha sido executado o outro sibntetiza *)
             if not ja_Lido then
                sintetiza (s);
             ja_Lido := false;

             (* apenas leitura *)
             checkBreak := false;
             c := sintEditaCampo (s, 1, wherey, 200, 80, true);
             checkBreak := true;

             (* se voutou ao programa *)
             if getActiveWindow = crtWindow then
                verificaClipBoard;  (* muda a area de transferencia se necessario *)

             checkFocus := false;

             if salva <> s then
                (* modifica a linha pela nova *)
                modificaLinha(s,continua);

             continua := false;
          end;

        while keypressed do
           begin
              readKey;
              interrompida := true;
              LinhaACima;
           end;

        writeln;

        case c of

            BAIX :  LinhaABaixo;   (* enviando caracter seta p/ baixo *)
            CIMA :  LinhaACima;   (* enviando caracter seta p/ cima *)
            PGDN :  PaginaABaixo;   (* enviando caracter Page Down *)
            PGUP :  PaginaACima;   (* enviando caracter Page Up *)
            #132 :  inicioDoTexto;
            #118 :  fimDoTexto;
            #25  :  CriaParagrafo; (*Alt P cria um novo paragrafo *)
            ENTER:  begin
                       continuaParagrafo;   (* continua o paragrafo antes que chegue ao limite *)
                       continua := true;    (* continuacao da frase no mesmo paracgrafo *)
                    end;
            #104 :  interrompida := false;   (* Alt_F1 volta a leitura sequuencial *)
            F9   :  MenuOpcoes;    (* possibilita varias opcoes *)
            ESC  :  Novo_Modulo := 'sair';
            F7   :  Novo_Modulo := 'leitura';

        end;
    until (Novo_Modulo = 'sair') or (Novo_Modulo = 'leitura');

    ModuloDeEdicao := Novo_Modulo;
end;
end.