/*

File: paragraph.c
Author: Neil Cafferkey
Copyright (C) 2000 Neil Cafferkey

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA.

*/

#include "viewer.h"
#include <exec/memory.h>

#include "paragraph_protos.h"
#include "general_protos.h"



/* Function: CreateParagraph
 * =========================
 * Creates a Paragraph.
 */

Paragraph CreateParagraph(UBYTE *raw_paragraph,UWORD length)
{
   Paragraph paragraph;

   if((paragraph=(Paragraph)AllocMem(sizeof(Paragraph_imp),MEMF_ANY))!=NULL)
   {

      paragraph->text=raw_paragraph;
      paragraph->length=length;

   }
   else
   {
      ReportError(NULL,ERROR_REPORT_MEM,NULL,0);
   }

   return paragraph;
}


/* Function: FitParagraphLine
 * ==========================
 * Calculates the number of characters that will fit on a line of a given
 * pixel width.
 */

UWORD FitParagraphLine(Paragraph paragraph,struct Window *window,
   UWORD offset)
{
   struct TextExtent temp_extent;
   ULONG char_count;
   UBYTE *p,*q=paragraph->text;

   char_count=TextFit(window->RPort,paragraph->text+offset,
      paragraph->length-offset,&temp_extent,NULL,1,window->GZZWidth
      -MARGIN_WIDTH*2,32767);

/*
printf("FitParagraphLine:offset=%u\n",offset);
printf("FitParagraphLine:paragraph->length=%u\n",paragraph->length);
printf("FitParagraphLine:window->Width=%u\n",window->Width);
*/

   /* Find the last space in the fitted substring */

   if(offset+char_count!=paragraph->length)
   {
      for(p=paragraph->text+offset+char_count;(p>q)&&(*p!=' ');p--)
         char_count--;
   }
/*printf("FitParagraphLine:char_count=%u\n",char_count);*/

   return char_count;
}


/* Function: KillParagraph
 * =======================
 * Destroys a paragraph.
 */

VOID KillParagraph(Paragraph paragraph)
{
   FreeMem(paragraph,sizeof(Paragraph_imp));
}


