For the user their are 7 orthoganal enhancements in Ver 5.0: 1. use -- instead of -a to indicate stretchable fonts 2. stretch prevention of a word with a manual stretch (-msw) 3. allow stretching of all kinds of characters (not only N type) 4. fonts have information on type of stretching allowed. (stretchable ...) 5. slanted fonts 6. connection stretching by one of: fixed fillers, stretchable fillers, stretchable connecting parts of connecting letters including manual commands. 7. control reversal in lines by \X'{' and \X'}' change #1 --------- replace 'a' & 'A' to '-' in lines 137-138 in main.c change #2 --------- 1. Add a new global var msw_flag line 68 to main.c & read it in main() lines 246 2. Add extern for msw_flag in start of dump.c 3. Split word_stretch_candidates to manually_stretched_letter, manually_stretched_connection. 4. Add in line 559 in dump.c a check if their is a manual stretch and msw_flag is on then return no candidates (0). change #3 --------- 1. Change in width.c move lines 256-7 to 221 and delete the else they are in. 2. Change the functions stretachable & connectable to stretchablen & connectablen and add the function stretchable1/2 & connectable1/2 for other kinds of chars and add two functions to take common part for 2 and 1 char letters. (like abscw). 3. Change in main.c: stretch_token*3 to handle not only N tokens but also c & C tokens. 4. Change in lines.c: put_token to also handle the stretch of c & C type chars. 5. Change word_stretch_candidates in dump.c to handle other kinds of stretched chars. change #4 --------- 1. Add a field stretchability to FontInfo line 7 width.c. Add constants to macros.h that are 0 - no stretch 1 connection stretching 2 - letter stretching. init basic_font_info stretch to 0 wherever it is used. Read in the stretching in function getfontinfo line 206 and set stretch to the correct OR of the constants. 2. Add 2 functions that recieves a font number and returns the stretching of the font. Call it font_letter_stretching and font_connect_stretching. 3. Change the Function word_stretch_candidates to check that a letter or connection can be stretched according to the font. change #5 --------- 1. Add a field slant to FontInfo line 7 width.c. init basic_font_info slant to 0 wherever it is used. Read in the slant in function getfontinfo line 206 2. Add a function that recieves a font number and returns the slant of the font. Add it to a new SWU under SWU#17 called font_info. call it font_slant. 3. In lines.c add function wordWidth to calculate the full width of a word of tokens. 4. Change the function put_token 224 lines.c to handle the vertical movement of the slant and the printing of the V command after each slanted word and only their. change #6 --------- Here we have the problem of manual commands and auotmatic commands and reading the types available from the font. We have decided to add to struct token in token.h the following fields: 1. stretch_filler_width 2. manual_AC_width 3. manual_BC_width 4. AC_width 5. BC_width We need to change the function new_token to have also the parameters manual_AC_width and manual_BC_width and to set all the others to 0. We need to change the functions basic & full width in lines.c We need to add the functions: tokenFillerStretch, tokenAC, tokenBC. We need to change the function put_token to handle all the new types of connections. To handle the automatic stretching we need: 1. Add a field constretch to FontInfo line 7 width.c. Add constants to macros.h that are 0 - fixed filler 1 stretchable filler 2 - stretchable connections. init basic_font_info constretch to 0 wherever it is used. Read in the stretching in function getfontinfo line 206 and set constretch to the correct constant. 2. Add function that recieves a font number and returns the connection stretching type of the font. Call it font_connection_stretching. 3. Add connectAfter*3 functions to char_info. 4. Change the Function connect_stretch dump.c 690 to stretch the connection according to the font connection stretching type. 5. Change recalculate_spaces to calculate also the new types of connection stretching. To read in the Manual commands: 1. manual filler stretching is simply the regular manual letter stretching of hy. 2. Add to lex.h ACstretch_token and BCstretch_token 3. Add to lex.dit two regular expressions to recognize ACstretch and BCstretch commands. 4. Add 2 new cases at line 467 main.c to handle AC stretch and BC stretch commands and or any combination of the 3. Use local vars to store next tokens stretches and reset them after each character. change calls to macros with new manual stretch info. Change #7 --------- 1. Change lex.h & lex.dit for two new input commands \X`{` & \X`}`. 2. Add to dump.c a reverse_tokens function to reverse part of a token line in-place. 3. Change main to handle 2 new tokens and add var reverse_lr to be changed and affect the font direction of the created tokens. Hours spent: ------------ 26/12 - 2 in preparing for changes the above list. " - 1 updating loadfont (should not count). " - 1 change #1 & #2. 27/12 - 4 hours change #1,#2,#3 + testing. " - 2 hours change #7 - ran into solution problem. 28/12 - 2 hours change #4,#5,#6 29/12 - 7 hours chnage #4,#5,#6 31/12 - 7 hours change #5,#6,#7 + testing. 2/1 - 6 hours #6,#5 + testing 3/1 - 2 hours #6 testing 3/1 - Total: 34 hours. 18/3 - 2 hours printing and marking latest version. 19/3 - 1 hour going over and recording changes #1,#2,#3 (found some corrections). 20/3 - 2 hours going over and recording changes #4,#5,#6,#7 (found some corrections). 20/3 - 1 hour making corrections to source.