From: fairfield@slacvx.slac.stanford.edu
Subject: KHF$FORMAT.2-OF-3  (Eve Justify procedures)
Organization: Stanford Linear Accelerator Center
Date: Fri, 18 Dec 1992 23:42:33 GMT

-+-+-+-+-+-+-+-+ START OF PART 2 -+-+-+-+-+-+-+-+
X`09eve$$release_scratch_buffer;
X`09set`20(RIGHT_MARGIN,`20eve$$x_scratch_buffer,`20old_right_margin);
X`09return`20(status);
X`20`20`20`20endif;
X
X`20`20`20`20!`20standard`20selection
X
X`20`20`20`20if`20beginning_of`20(the_range)`20<=`20end_of`20(the_range)
X`20`20`20`20then
X`09start_mark`20:=`20beginning_of`20(the_range);
X`09end_mark`20:=`20end_of`20(the_range);
X`20`20`20`20else
X`09end_mark`20:=`20beginning_of`20(the_range);
X`09start_mark`20:=`20end_of`20(the_range);
X`20`20`20`20endif;
X`20`20`20`20the_range`20:=`200;
X
X`20`20`20`20position`20(start_mark);
X
X`20`20`20`20!`20Move`20start_mark`20if`20on`20an`20DOCUMENT`20tag`20or`20runof
Vf`20command`20line
X
X`20`20`20`20if`20search_quietly`20(eve$pattern_skip_paragraph_break,
X`09`09`20`20`20`20`20`20`20FORWARD)`20<>`200
X`20`20`20`20then
X`09!`20skip`20past`20DOCUMENT`20tag,`20runoff`20command`20line,`20ff's
X`09position`20(LINE_END);
X`09move_horizontal`20(1);
X`09start_mark`20:=`20mark`20(NONE);
X`20`20`20`20endif;
X
X`20`20`20`20loop`09`09`09!`20Find`20the`20paragraph`20bounds`20for`20all`20par
Vagraphs
X`09loop
X`09`20`20`20`20position`20(LINE_END);
X`09`20`20`20`20exitif`20mark`20(NONE)`20=`20end_of`20(current_buffer);
X`09`20`20`20`20move_horizontal`20(1);
X`09`20`20`20`20exitif`20mark`20(NONE)`20>`20end_mark;
X`09`20`20`20`20exitif`20eve$paragraph_break;
X`09endloop;
X`09move_horizontal`20(-1);
X
X`09if`20mark`20(NONE)`20>`20end_mark
X`09then
X`09`20`20`20`20position`20(end_mark);
X`09endif;
X
X`09the_right_margin`20:=`20get_info`20(current_buffer,`20"right_margin");
X
X`09if`20eve$$x_word_wrap_indent`20`7Bcurrent_buffer`7D`20<>`20tpu$k_unspecifie
Vd
X`09then
X`09`20`20`20`20the_left_margin`20:=`20eve$$x_word_wrap_indent`20`7Bcurrent_buf
Vfer`7D;
X`09else
X`09`20`20`20`20the_left_margin`20:=`20get_info`20(current_buffer,`20"left_marg
Vin");
X`09endif;
X
X`09if`20eve$$x_paragraph_indent`20`7Bcurrent_buffer`7D`20<>`20tpu$k_unspecifie
Vd
X`09then
X`09`20`20`20`20the_indent`20:=`20eve$$x_paragraph_indent`20`7Bcurrent_buffer
V`7D
X`09`09`09`20`20-`20the_left_margin;
X`09else
X`09`20`20`20`20the_indent`20:=`20get_info`20(current_buffer,`20"left_margin")
V`20-
X`09`09`09`20`20the_left_margin;
X`09endif;
X
X`09the_range`20:=`20create_range`20(start_mark,`20mark`20(NONE),`20NONE);
X
X`09if`20do_fill_edit`09`09`09`09`09`09`09!`20KHF
X`09then`09`09`09`09`09`09`09`09!`20KHF
X`09`20`20`20`20khf$fill_edit`20(the_range);`09`09`09`09`09!`20KHF
X`09`20`20`20`20!`20`20Replace`20the`20previous`20line`20by:`09`09`09`09!`20KHF
V
X`09`20`20`20`20!`20`20`20`20edit`20(the_range,`20COMPRESS,`20TRIM,`20OFF);`09
V`09`09!`20KHF
X`09`20`20`20`20!`20`20to`20suppress`20extra`20space`20following`20sentences...
V`09`09!`20KHF
X`09else`09`09`09`09`09`09`09`09!`20KHF
X`09`20`20`20`20edit`20(the_range,`20TRIM_LEADING,`20OFF);
X`09endif;`09`09`09`09`09`09`09`09!`20KHF
X
X`09fill`20(the_range,`20eve$x_fill_separators,`20the_left_margin,
X`09`20`20`20`20`20`20the_right_margin,`20the_indent);
X
X`09if`20do_justify`09`09`09`09`09`09`09!`20KHF
X`09then`09`09`09`09`09`09`09`09!`20KHF
X`09`20`20`20`20khf$justify`20(the_range);`09`09`09`09`09!`20KHF
X`09endif;`09`09`09`09`09`09`09`09!`20KHF
X
X`09loop`09`09`09`09!`20Skip`20the`20inter-paragraph`20break;
X`09`20`20`20`20position`20(LINE_END);
X`09`20`20`20`20move_horizontal`20(1);
X`09`20`20`20`20exitif`20not`20eve$paragraph_break;
X`09endloop;
X`09start_mark`20:=`20mark`20(NONE);
X`09exitif`20start_mark`20>=`20end_mark;
X`20`20`20`20endloop;
X`20`20`20`20position`20(end_mark);
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!!!`20screen`20manager`20issue`20!!!!!!!!!!!!!!!!!!!!!!
V!!!!
X`20`20`20`20update`20(current_window);
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X
Xelse
X`20`20`20`20eve$message`20(EVE$_SELFIRST);
X`20`20`20`20eve$learn_abort;
X`20`20`20`20return`20(FALSE);
Xendif;
Xeve$clear_message;
Xreturn`20(TRUE);
X
Xendprocedure;`09!`20eve$fill_range
X
X`0C
X
X!----------------------------New`20EVE/KHF`20Procedures-----------------------
V-----
X
X
XProcedure`20Eve_Justify`09`09!`20Fill`20and`20justify`20a`20range`20or`20parag
Vraph
X!`09`20`20-----------
X
XLocal`09the_selection,
X`09the_status;
X
XOn_Error
X`20`20`20`20`5BOTHERWISE`5D:
XEndon_Error;
X
XIf`20Get_Info`20(CURRENT_BUFFER,`20"system")
XThen
X`20`20`20`20Eve$Message`20(EVE$_CANTSYSTEMBUF);
X`20`20`20`20Eve$Learn_Abort;
X`20`20`20`20Return`20(FALSE);
XEndif;
X
Xthe_selection`20:=`20Eve$Selection`20(FALSE,,,`20eve$x_select_remove_flag,,
V`20TRUE);
XIf`20(the_selection`20<>`200)
XThen
X`20`20`20`20Set`20(TIMER,`20ON,`20"Justifying...");
X`20`20`20`20the_status`20:=`20Eve$Fill_Range`20(the_selection,`20TRUE);
X`20`20`20`20Set`20(TIMER,`20OFF);
XElse
X`20`20`20`20Set`20(TIMER,`20ON,`20"Justifying...");
X`20`20`20`20the_status`20:=`20Eve$Fill_Paragraph`20(TRUE);
X`20`20`20`20Set`20(TIMER,`20OFF);
XEndif;
XReturn`20(the_status);
X
XEndprocedure;`09`09!`20Eve_Justify
X
X
X
XProcedure`20Eve_Justify_Paragraph
X!`09`20`20---------------------
XLocal`09the_status;
X
XSet`20(TIMER,`20ON,`20"Justifying...");
Xthe_status`20:=`20Eve$Fill_Paragraph`20(TRUE);
XSet`20(TIMER,`20OFF);
XReturn`20(the_status);
X
XEndprocedure;`09`09!`20Eve_Justify_Paragraph
X
X
XProcedure`20Eve_Justify_Range
X!`09`20`20-----------------
XLocal`20the_status;
X
XOn_Error
X`20`20`20`20`5BOTHERWISE`5D:
XEndon_Error;
X
XIf`20Get_Info`20(CURRENT_BUFFER,`20"system")
XThen
X`20`20`20`20Eve$Message`20(EVE$_CANTSYSTEMBUF);
X`20`20`20`20Eve$Learn_Abort;
X`20`20`20`20Return`20(FALSE);
XEndif;
X
XSet`20(TIMER,`20ON,`20"Justifying...");
Xthe_status`20:=`20Eve$Fill_Range`20(Eve$Selection`20(FALSE,,,
X`09`09`09`09`09`20`20`20`20`20eve$x_select_remove_flag,,TRUE),
X`09`09`09`09`09`20`20`20`20`20TRUE);
XSet`20(TIMER,`20OFF);
XReturn`20(the_status);
X
XEndprocedure;`09`09!`20Eve_Justify_Range
X
X`0C
XProcedure`20Eve_Unjustify`09`09!`20Fill_edit`20and`20fill`20a`20range`20or`20p
Varagraph
X!`09`20`20-------------
X
XLocal`09the_selection;
X
XOn_Error
X`20`20`20`20`5BOTHERWISE`5D:
XEndon_Error;
X
XIf`20Get_Info`20(CURRENT_BUFFER,`20"system")
XThen
X`20`20`20`20Eve$Message`20(EVE$_CANTSYSTEMBUF);
X`20`20`20`20Eve$Learn_Abort;
X`20`20`20`20Return`20(FALSE);
XEndif;
X
Xthe_selection`20:=`20Eve$Selection`20(FALSE,,,`20eve$x_select_remove_flag,,
V`20TRUE);
XIf`20(the_selection`20<>`200)
XThen
X`20`20`20`20Return`20(Eve$Fill_Range`20(the_selection,`20FALSE,`20TRUE));
XElse
X`20`20`20`20Return`20(Eve$Fill_Paragraph`20(FALSE,`20TRUE));
XEndif;
X
XEndprocedure;`09`09!`20Eve_Unjustify
X
X
X
XProcedure`20Eve_Unjustify_Paragraph
X!`09`20`20-----------------------
X
X`20`20`20`20Return`20(Eve$Fill_Paragraph`20(FALSE,`20TRUE));
X
XEndprocedure;`09`09!`20Eve_Unjustify_Paragraph
X
X
XProcedure`20Eve_Unjustify_Range
X!`09`20`20-------------------
X
XOn_Error
X`20`20`20`20`5BOTHERWISE`5D:
XEndon_Error;
X
XIf`20Get_Info`20(CURRENT_BUFFER,`20"system")
XThen
X`20`20`20`20Eve$Message`20(EVE$_CANTSYSTEMBUF);
X`20`20`20`20Eve$Learn_Abort;
X`20`20`20`20Return`20(FALSE);
XEndif;
X
XReturn`20(Eve$Fill_Range`20(Eve$Selection`20(FALSE,,,`20eve$x_select_remove_fl
Vag,,
X`09`09`09`09`20`20`20`20`20`20`20TRUE),`20FALSE,`20TRUE));
X
XEndprocedure;`09`09!`20Eve_Unjustify_Range
X
X`0C
X!+
X!`20`20`20This`20procedure`20loops`20through`20all`20lines`20in`20the`20range
V`20provided`20and
X!`20`20`20right-justifies`20each`20so`20that`20the`20last`20word`20in`20each
V`20line`20is`20flush`20with
X!`20`20`20the`20right`20margin.
X!
X!`20`20Notes:
X!
X!`09The`20EVE`20internal`20procedure`20Eve$Current_Word,`20found`20in`20EVE$FO
VRMAT.TPU,
X!`09Version`20V02-100b,`20is`20used`20here`20to`20fill`20khf$x_word_array`20wi
Vth`20the
X!`09ranges`20corresponding`20to`20each`20word`20in`20a`20line.`20`20Changes
V`20to`20that`20pro-
X!`09cedure`20must`20be`20tracked`20here.
X!
X!`09Khf$Justify`20expects`20the`20range_arg`20argument`20to`20be`20a`20typical
V`20para-
X!`09graph`20range`20as`20defined`20in,`20e.g.,`20Eve_Fill_Paragraph,`20with
V`20the`20end
X!`09of`20the`20range`20at`20the`20LINE_END`20of`20the`20last`20line`20in`20the
V`20paragraph.
X!`09The`20last`20line`20is`20NOT`20justified.
X!
X!`09Four`20types`20of`20space-filling`20patterns`20are`20used:`20from`20the
V`20center`20of
X!`09the`20line`20toward`20either`20end,`20from`20both`20ends`20toward`20the
V`20center,`20from
X!`09the`20right`20toward`20the`20beginning`20of`20the`20line,`20and`20from`20t
Vhe`20left
X!`09toward`20the`20end`20of`20the`20line.`20`20The`20type`20of`20fill`20patter
Vns`20used`20may`20be
X!`09restricted`20by`20limiting`20the`20range`20of`20the`20variable`20fill_type
V,`20e.g.,
X!`09at`20the`20point`20it`20is`20incremented`20following`20the`20Endcase`20sta
Vtement.
X!`09The`20order`20of`20fill`20patterns`20used`20may`20be`20altered`20by`20simp
Vly`20changing
X!`09the`20case`20labels.
X!
X!`20`20Acknowledgements:
X!
X!`09Writing`20of`20this`20procedure`20was`20motivated`20by`20previous`20justif
Vying
X!`09routines`20written`20by`20Hunter`20Goatley`20<goathunter@wkuvx1.bitnet>
V`20and
X!`09by`20Ken`20Selvia`20<ucs_kas@shsu.bitnet>.`20`20In`20particular,`20I`20mad
Ve`20use`20of
X!`09Hunter's`20idea`20of`20alternating`20the`20fill`20pattern`20from`20left
V`20to`20right
X!`09on`20successive`20lines`20(and`20added`20center-out`20and`20outside-in),
V`20and
X!`09Ken's`20idea`20to`20use`20an`20array`20of`20the`20words`20on`20each`20line
V,`20retrieved`20by
X!`09Eve$Current_Word.`20`20Both`20of`20the`20earlier`20procedures`20implemente
Vd
X!`09appending`20a`20second`20space`20following`20a`20sentence`20terminator,
V`20but`20I
X!`09have`20moved`20that`20to`20the`20calling`20procedure.
X!
X!`20`20Author/Date:`09`09K.H.`20Fairfield,`09`0917-DEC-1992
X!--
X
XProcedure`20Khf$Justify
X!`09`20`20-----------
X`09`20`20(range_arg)`09`09!`20Range`20of`20lines`20to`20justify
X
XLocal`09saved_position,`20!`20Save`20the`20current`20position
X`09saved_mode,`09!`20Save`20the`20current`20mode`20of`20the`20buffer
X`09the_end,`09!`20Mark`20at`20end_of`20the`20range
X`09the_rmarg,`09!`20Right`20margin`20value
X`09this_mark,`09!`20Just`20a`20mark...
X`09last_column,`09!`20Column`20number`20of`20last`20character`20in`20a`20line
X`09fill_type,`09!`20Fill`20pattern,`20one`20of`20four`20types
X`09nspaces,`09!`20Number`20of`20fill`20spaces`20required
X`09sm_size,`09!`20Number`20of`20fill`20spaces`20for`20small`20gaps
X`09nbig,`09`09!`20Number`20of`20"big"`20gaps
X`09nsmall,`09`09!`20Number`20of`20"small"`20gaps
X`09the_fill,`09!`20String`20of`20fill`20spaces
X`09small_fill,`09!`20String`20of`20fill`20spaces`20for`20small`20gaps
X`09indx,`09`09!`20Index`20into`20word_array
X`09indx1,indx2,`09!`20Indices`20for`20center-out`20and`20outside-in`20filling
X`09ngaps;`09`09!`20Number`20of`20gaps,`20equals`20words`20in`20word_array`20le
Vss`20one
X
XOn_Error
X`20`20`20`20`5BOTHERWISE`5D:
XEndon_Error;
X
X
Xsaved_position`20:=`20Mark`20(NONE);
Xsaved_mode`20:=`20Get_Info`20(CURRENT_BUFFER,`20"mode");
Xthe_rmarg`20`20:=`20Get_Info`20(CURRENT_BUFFER,`20"right_margin");
Xthe_end`20`20`20`20:=`20End_Of`20(range_arg);
Xfill_type`20`20:=`201;
X
X!+
X!`20Create`20khf$x_word_array`20on`20first`20use.`20`20Should`20be`20big`20eno
Vugh`20for`20most`20lines;
X!`20will`20be`20extended`20on`20the`20fly`20otherwise.
X!-
XIf`20(khf$x_word_array`20=`20TPU$K_UNSPECIFIED)
XThen
X`20`20khf$x_word_array`20:=`20Create_Array`20(40);
XEndif;
X
X!+
X!`20`20Do`20a`20TRIM_TRAILING`20edit`20on`20range_arg`20since`20there`20could
V`20be`20some
X!`20`20leftovers`20from`20the`20Fill`20following`20Khf$Fill_Edit.
X!-
XEdit`20(range_arg,`20TRIM_TRAILING,`20OFF);
XSet`20(INSERT,`20CURRENT_BUFFER);
XPosition`20(Beginning_Of`20(range_arg));
X
X!+
X!`20`20Start`20loop`20over`20lines`20within`20range_arg.
X!-
XLoop
X`20`20`20`20Position`20(LINE_END);
X`20`20`20`20this_mark`20:=`20Mark`20(NONE);
X`20`20`20`20Exitif`20(this_mark`20>=`20the_end);
X`20`20`20`20last_column`20:=`20Get_Info`20(this_mark,`20"offset_column")`20-
V`201;
X`20`20`20`20If`20(last_column`20<`20the_rmarg)
X`20`20`20`20Then
X`09Position`20(LINE_BEGIN);
X`09nspaces`20:=`20the_rmarg`20-`20last_column;
X`09indx`09:=`201;
X!+
X!`20`20Loop`20over`20words`20in`20the`20current`20line,`20fill`20khf$x_word_ar
Vray`20with`20the`20range
X!`20`20corresponding`20to`20each`20word.
X!-
X`09Loop
X`09`20`20`20`20khf$x_word_array`20`7Bindx`7D`20:=`20eve$current_word;
X`09`20`20`20`20Exitif`20(CURRENT_CHARACTER`20=`20"");`09`09!`20Line_end`20cond
Vition.
X`09`20`20`20`20indx`20:=`20indx`20+`201;
X`09Endloop;
X
X`09ngaps`20:=`20indx`20-`201;`09`09`20`20`20`20`20`20`20!`20Number`20of`20gaps
V
X`09Exitif`20(ngaps`20<=`200);`09`09`20`20`20`20`20`20`20!`20Can't`20justify
V`20one`20word...
X`09If`20(nspaces`20<=`20ngaps)
X`09Then
X`09`20`20`20`20nsmall`20:=`20nspaces;
X`09`20`20`20`20nbig`20`20`20:=`200;
X`09`20`20`20`20small_fill`20:=`20"`20";
X`09`20`20`20`20the_fill`20`20`20:=`20"`20";
X`09Else
X`09`20`20`20`20sm_size`20`20`20`20:=`20nspaces`20/`20ngaps;`20`20`20`20!`20Siz
Ve`20of`20small_fill
X`09`20`20`20`20nbig`20`20`20`20`20`20`20:=`20nspaces`20-`20(sm_size`20*`20ngap
Vs);
X`09`20`20`20`20nsmall`20`20`20`20`20:=`20ngaps`20-`20nbig;`20`20`20`20`20`20
V`20!`20Number`20of`20small_fill`20gaps
X`09`20`20`20`20the_fill`20`20`20:=`20Substr`20(eve$kt_spaces,`201,`20(sm_size+
V1));
X`09`20`20`20`20small_fill`20:=`20Substr`20(eve$kt_spaces,`201,`20`20sm_size);
X`09Endif;
X
X!+
X!`20`20Choose`20the`20filling`20pattern`20based`20on`20the`20variable`20fill_t
Vype.`20`20Patterns
X!`20`20are`20from`20the`20center`20touward,`20from`20the`20outside`20towards
V`20the`20center,`20from
X!`20`20the`20right`20towards`20the`20beginning`20of`20the`20line,`20and`20from
V`20the`20left`20towards
X!`20`20the`20end`20of`20the`20line.`20`20In`20each`20of`20th`20eloops`20below,
V`20the`20index`20varible(s)
X!`20`20is`20one`20greater`20than`20the`20"gap"`20being`20filed`20out`20since
V`20the`20algorithm`20is
X!`20`20to`20position`20at`20the`20beginning`20of`20the`20word`20_following_
V`20the`20gap.
X!-
X`09Case`20fill_type`20From`201`20To`204
X
X`09`20`20`20`20`5B1`5D:`09`09`09`20`20`20`20!`20Fill`20type`201:`20`20Fill`20g
Vaps`20starting
X`09`09indx1`20:=`20(ngaps/2)`20+`202;`20`20`20`20`20!`09at`20the`20center`20of
V`20the`20line`20and
+-+-+-+-+-+-+-+-  END  OF PART 2 +-+-+-+-+-+-+-+-
Newsgroups: gnu.chess