home *** CD-ROM | disk | FTP | other *** search
Wrap
/* This Genie will make the necessary number of new pages to accommodate an article which is currently overflowing its box. It is intended for use with simple essays and the like, not complex layouts. I have set the genie to underflow rather than overflow. Written by Don Cox July 93 Revised Feb 94, Nov 94. Not Public Domain. All rights reserved. */ /* $VER: AutoPages July 95 */ /* call open("STDERR","ram:traceAP","W") trace r */ signal on error signal on syntax address command call SafeEndEdit.rexx() call ppm_AutoUpdate(0) fsize = ppm_GetSize() cr="0a"x currentunits=ppm_GetUnits() call ppm_SetUnits(2) changetext = 0 resize = ppm_Inform(2, "Make type 17% larger?", "Yes", "No") doparas = ppm_Inform(3, "Set paragraph indent?", "Essays", "Scripts", "No change") if doparas =0 | doparas = 1 | resize = 0 then changetext = 1 paraspace = 150 /* per cent of line spacing */ cpage = ppm_CurrentPage() psize = ppm_GetPageSize(cpage) pagewidth = word(psize,1) pageheight = word(psize,2) numberleft = pagewidth-6 /* position of page number box */ numbertop = pageheight-2 numberbox = 0 pagebox = 0 /* Is there a page number box already? */ testbox = ppm_PageFirstBox(cpage) do until testbox=0 boxtxt = ppm_GetBoxText(testbox,1) if (words(boxtxt)=2 & pos("Page \#<Pc0>",boxtxt)~=0) then pagebox = 1 if pagebox = 1 then numberbox = testbox if pagebox = 1 then break testbox = ppm_PageNextBox(testbox) end if pagebox = 0 then do numberbox = ppm_CreateBox(numberleft, numbertop,3,1,0,) call ppm_SetSize(12) overflow = ppm_TextIntoBox(numberbox,"\jl\fs<12.000>Page \#<Pc0>") end box=ppm_ClickOnBox("Click on box containing article") if box=0 then exit_msg("No box selected") call ppm_SelectBox(box) call ppm_ShowStatus(" Fitting text...") boxtype = upper(word(ppm_GetBoxInfo(box), 1)) if boxtype~="TEXT" then exit_msg("Not a text box") howbig = ppm_GetBoxSize(box) boxwidth = word(howbig,1) boxheight = word(howbig,2) where = ppm_GetBoxPosition(box) boxX = word(where,1) boxY = word(where,2) tilt = ppm_GetBoxAngle(box) thispage = ppm_DocLastPage() lastbox = ppm_ArtLastBox(box) firstbox = ppm_ArtFirstBox(box) factor = 1.17 /* Type 17% larger - 12pt goes to 14pt */ if changetext = 1 then do text = ppm_GetArticleText(firstbox,1) text = ResizeFonts(text,factor) gone = ppm_DeleteContents(firstbox) /* Removes entire article */ overflow = ppm_TextIntoBox(firstbox,text) end do 150 /* 150 pages is enough for most purposes - you can always run the genie again */ call ppm_ShowStatus(" Fitting text... " ) /* Create a new page without adding a blank page at end of document */ newpage = ppm_CreatePage(thispage,1,1,0,0) newpage = ppm_MovePage(newpage+1,newpage) thispage = ppm_GoToPage(newpage+1) newbox = ppm_CreateBox(boxX, boxY, boxwidth, boxheight, tilt, ) call ppm_BoxChangePage(newbox,thispage) overflow = ppm_LinkBox(lastbox,newbox) pagebox = 0 /* Is there a page number box already? */ testbox = ppm_PageFirstBox(thispage) do until testbox=0 boxtxt = ppm_GetBoxText(testbox,1) if (words(boxtxt)=2 & pos("Page \#<Pc0>",boxtxt)~=0) then pagebox = 1 if pagebox = 1 then break testbox = ppm_PageNextBox(testbox) end if pagebox = 0 then do numberbox = ppm_CloneBox(numberbox,0,0) call ppm_BoxChangePage(numberbox,thispage) end lastbox = newbox if newtext="" | overflow = 0 then break end newpage = ppm_GoToPage(cpage) call ppm_SetUnits(currentunits) call exit_msg() end /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ error: syntax: do exit_msg("Genie failed due to error: "errortext(rc)) end exit_msg: do parse arg message if message ~= "" then call ppm_Inform(1,message,"Resume") call ppm_ClearStatus() call ppm_AutoUpdate(1) exit end /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ ResizeFonts: parse arg text, factor position = 1 position2 = 1 do forever /* we have to open up style tags to get sizes */ position = pos("\dS<",text,position2) if position = 0 then break position2 = pos(">",text,position) if position2 = 0 then break styletag = substr(text,position+4, position2-position-4) styledef = ppm_GetStyleTagData(styletag) styledef = left(styledef,pos("}",styledef)-1) /* remove name of tag */ styledef = substr(styledef,pos("{",styledef)+1) text = delstr(text,position, (position2-position+1)) /* delete tag name */ text = insert("\ds"styledef,text,(position-1)) end if resize = 0 then do position2 = 1 do forever /* first change font sizes */ position = pos("\fs<",text,position2)+4 if position = 4 then break /* would be 0 but we added 4 */ position2 = pos(">",text,position) if position2 = 0 then break oldsize = substr(text,position, position2-position) text = delstr(text,position, position2-position) /* delete old size */ newsize = oldsize*factor if newsize>720 then newsize = 720 oddsize = newsize//0.125 /* round correctly to nearest 1/8 point - PPage always rounds down */ if oddsize>0.0625 then newsize = newsize-oddsize+0.125 else newsize = newsize-oddsize text = insert(newsize,text,position-1) end position2 = 1 do forever /* now do fixed line spacings */ position = pos("\lf<",text,position2)+4 if position = 4 then break /* would be 0 but we added 4 */ position2 = pos(">",text,position) if position2 = 0 then break oldsize = substr(text,position, position2-position) text = delstr(text,position, position2-position) /* delete old size */ newsize = oldsize*factor if newsize>720 then newsize = 720 oddsize = newsize//0.125 /* round correctly to nearest 1/8 point - PPage always rounds down */ if oddsize>0.0625 then newsize = newsize-oddsize+0.125 else newsize = newsize-oddsize text = insert(newsize,text,position-1) end position2 = 1 do forever /* and fixed leading */ position = pos("\ll<",text,position2)+4 if position = 4 then break /* would be 0 but we added 4 */ position2 = pos(">",text,position) if position2 = 0 then break oldsize = substr(text,position, position2-position) text = delstr(text,position, position2-position) /* delete old size */ newsize = oldsize*factor if newsize>720 then newsize = 720 oddsize = newsize//0.125 /* round correctly to nearest 1/8 point - PPage always rounds down */ if oddsize>0.0625 then newsize = newsize-oddsize+0.125 else newsize = newsize-oddsize text = insert(newsize,text,position-1) end end /* of resizing text */ if doparas = 0 then do /* essay style */ IndentCode = "i" position2 = 1 do forever /* paragraph spacing */ position = pos("\ps<",text,position2)+4 if position = 4 then break /* would be 0 but we added 4 */ position2 = pos(">",text,position) if position2 = 0 then break oldsize = substr(text,position, position2-position) text = delstr(text,position, position2-position) /* delete old size */ text = insert(paraspace,text,position-1) end position2 = 1 do forever /* now paragraph indent amount */ position = pos("\pv<",text,position2) if position = 0 then break position = position+7 position2 = pos(">",text,position) if position2 = 0 then break oldsize = substr(text,position, position2-position) text = delstr(text,position, position2-position) /* delete old size */ newsize = 0.2 text = insert(newsize,text,position-1) end position2 = 1 do forever /* paragraph indent type */ position = pos("\po",text,position2) if position = 0 then break position = position+2 text = delstr(text,position, 1) /* delete old code */ text = insert(IndentCode,text,position-1) end position2 = 1 do forever /* paragraph indent type */ position = pos("\pn",text,position2) if position = 0 then break position = position+2 text = delstr(text,position, 1) /* delete old code */ text = insert(IndentCode,text,position-1) end end if doparas = 1 then do /* script style */ IndentCode = "o" position2 = 1 do forever /* paragraph spacing */ position = pos("\ps<",text,position2)+4 if position = 4 then break /* would be 0 but we added 4 */ position2 = pos(">",text,position) if position2 = 0 then break oldsize = substr(text,position, position2-position) text = delstr(text,position, position2-position) /* delete old size */ text = insert(paraspace,text,position-1) end position2 = 1 do forever /* now paragraph indent amount */ position = pos("\pv<",text,position2) if position = 0 then break position = position+7 position2 = pos(">",text,position) if position2 = 0 then break oldsize = substr(text,position, position2-position) text = delstr(text,position, position2-position) /* delete old size */ newsize = 0.5 text = insert(newsize,text,position-1) end position2 = 1 do forever /* now paragraph indent type */ position = pos("\pi",text,position2) if position = 0 then break position = position+2 text = delstr(text,position, 1) /* delete old code */ text = insert(IndentCode,text,position-1) end position2 = 1 do forever /* now paragraph indent type */ position = pos("\pn",text,position2) if position = 0 then break position = position+2 text = delstr(text,position, 1) /* delete old code */ text = insert(IndentCode,text,position-1) end end return text /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */