#include <stddef.h>
#include <string.h>
#include <stdio.h>
#include "robodoc.h"
#include "items.h"

/****v* ROBODoc/item_names [3.0g]
 * NAME
 *   item_names
 * SYNOPSIS
 *   char *item_names[]
 * FUNCTION
 *   Defines the names of items that ROBODoc recognized as
 *   items. For each name their is a corresponding 
 *   item type (see ItemType). So if you add a name here
 *   you have to add an item type to. In addition you
 *   have to add an item attribute (see item_attributes) 
 *   entry too.
 * AUTHOR
 *   Koessi
 * SEE ALSO
 *   RB_Get_Item_Type(), item_attributes, item_attr_names,
 * SOURCE
 */

char *item_names[] =
{
  NULL,
  "NAME",
  /* Item name + short description */
  "COPYRIGHT",
  /* who own the copyright : "(c) <year>-<year> by <company/person>" */
  "SYNOPSIS", "USAGE",
  /* how to use it */
  "FUNCTION", "DESCRIPTION", "PURPOSE",
  /* what does it */
  "AUTHOR",
  /* who wrote it */
  "CREATION DATE",
  /* when did the work start */
  "MODIFICATION HISTORY", "HISTORY",
  /* who done what changes when */
  "INPUTS", "ARGUMENTS", "OPTIONS", "PARAMETERS", "SWITCHES",
  /* what can we feed into it */
  "OUTPUT", "SIDE EFFECTS",
  /* what output will be made */
  "RESULT", "RETURN VALUE",
  /* what do we get returned */
  "EXAMPLE",
  /* a clear example of the items use */
  "NOTES",
  /* any annotations */
  "DIAGNOSTICS",
  /* diagnostical output */
  "WARNINGS", "ERRORS",
  /* warning & error-messages */
  "BUGS",
  /* known bugs */
  "TODO", "IDEAS",
  /* what to implement next & ideas */
  "PORTABILITY",
  /* where does it come from, where will it work */
  "SEE ALSO",
  /* references */
  "SOURCE",
  /* source code inclusion */
  "METHODS", "NEW METHODS",
  /* oop methods */
  "ATTRIBUTES", "NEW ATTRIBUTES",
  /* oop attributes */
  "TAGS",
  /* tagitem description */
  "COMMANDS",
  /* command description */
  "DERIVED FROM",
  /* oop super class */
  "DERIVED BY",
  /* oop sub class */
  "USES", "CHILDREN",
  /* what modules are used by this one */
  "USED BY", "PARENTS",
  /* which modules do use this */
  NULL,
};

/***********/


/****v* ROBODoc/item_attributes [3.0h]
 * NAME
 *   item_attributes -- attributes of the various items
 * FUNCTION
 *   links each item type with a text attribute.
 * SEE ALSO
 *   RB_Get_Item_Type(), item_names, item_attr_names
 * SOURCE
 */

long item_attributes[NUMBER_OF_ITEMS] =
{
  0,				/* NO_ITEM */
  ITEM_NAME_LARGE_FONT | TEXT_BODY_SHINE,	/* NAME_ITEM */
  ITEM_NAME_LARGE_FONT,		/* COPYRIGHT_ITEM */
  ITEM_NAME_LARGE_FONT | TEXT_BODY_SHINE,	/* SYNOPSIS_ITEM */
  ITEM_NAME_LARGE_FONT,		/* USAGE_ITEM */
  ITEM_NAME_LARGE_FONT,		/* FUNCTION_ITEM */
  ITEM_NAME_LARGE_FONT | TEXT_BODY_DEFAULT,    	/* DESCRIPTION_ITEM */
  ITEM_NAME_LARGE_FONT,		/* PURPOSE_ITEM */
  ITEM_NAME_LARGE_FONT | TEXT_BODY_BOLD,	/* AUTHOR_ITEM */
  ITEM_NAME_LARGE_FONT | TEXT_BODY_BOLD,	/* CREATION_DATE_ITEM */
  ITEM_NAME_LARGE_FONT,		/* MODIFICATION_HISTORY_ITEM */
  ITEM_NAME_LARGE_FONT,		/* HISTORY_ITEM */
  ITEM_NAME_LARGE_FONT,		/* INPUT_ITEM */
  ITEM_NAME_LARGE_FONT,		/* ARGUMENT_ITEM */
  ITEM_NAME_LARGE_FONT,		/* OPTION_ITEM */
  ITEM_NAME_LARGE_FONT,		/* PARAMETER_ITEM */
  ITEM_NAME_LARGE_FONT,		/* SWITCH_ITEM */
  ITEM_NAME_LARGE_FONT,		/* OUTPUT_ITEM */
  ITEM_NAME_LARGE_FONT,		/* SIDE_EFFECTS_ITEM */
  ITEM_NAME_LARGE_FONT,		/* RESULT_ITEM */
  ITEM_NAME_LARGE_FONT,		/* RETURN_VALUE_ITEM */
  ITEM_NAME_LARGE_FONT | TEXT_BODY_SHINE,      	/* EXAMPLE_ITEM */
  ITEM_NAME_LARGE_FONT | TEXT_BODY_DEFAULT,	/* NOTE_ITEM */
  ITEM_NAME_LARGE_FONT,		/* DIAGNOSTICS_ITEM */
  ITEM_NAME_LARGE_FONT,		/* WARNING_ITEM */
  ITEM_NAME_LARGE_FONT,		/* ERROR_ITEM */
  ITEM_NAME_LARGE_FONT | TEXT_BODY_SHINE,	/* BUGS_ITEM */
  ITEM_NAME_LARGE_FONT,		/* TODO_ITEM */
  ITEM_NAME_LARGE_FONT,		/* IDEAS_ITEM */
  ITEM_NAME_LARGE_FONT,		/* PORTABILITY_ITEM */
  ITEM_NAME_LARGE_FONT,		/* SEE_ALSO_ITEM */
  ITEM_NAME_LARGE_FONT | TEXT_BODY_SHINE,      	/* SOURCE_ITEM */
  ITEM_NAME_LARGE_FONT,		/* METHODS_ITEM */
  ITEM_NAME_LARGE_FONT,		/* NEW_METHODS_ITEM */
  ITEM_NAME_LARGE_FONT,		/* ATTRIBUTES_ITEM */
  ITEM_NAME_LARGE_FONT,		/* NEW_ATTRIBUTES_ITEM */
  ITEM_NAME_LARGE_FONT,		/* TAGS_ITEM */
  ITEM_NAME_LARGE_FONT,		/* COMMANDS_ITEM */
  ITEM_NAME_LARGE_FONT,		/* DERIVED_FROM_ITEM */
  ITEM_NAME_LARGE_FONT,		/* DERIVED_BY_ITEM */
  ITEM_NAME_LARGE_FONT,		/* USES_ITEM */
  ITEM_NAME_LARGE_FONT,		/* CHILDREN */
  ITEM_NAME_LARGE_FONT,		/* USED_BY_ITEM */
  ITEM_NAME_LARGE_FONT,		/* PARENTS */
  0				/* OTHER_ITEM */
};

/**********/


/****v* ROBODoc/item_attr_names [3.0j]
 * NAME
 *   item_attr_names
 * SYNOPSIS
 *   char *item_attr_names[]
 * FUNCTION
 *   used for strcmp() in RB_Get_Item_Attr()
 * AUTHOR
 *   Koessi
 * SEE ALSO
 *   RB_Get_Item_Attr(), item_attributes, item_names
 * SOURCE
 */

char *item_attr_names[] =
{
/* "NORMAL", */
  "LARGE", "ITALICS", "NONPROP", "SMALL", "BOLD",
  "UNDERLINE", "SHINE", "HIGHLIGHT", "DEFAULT",
};

/*************/


/* ASCII AMIGAGUIDE HTML LATEX RTF */

char *att_start_command[SIZE_ATTRIBUTES][SIZE_MODES] =
{
  {"", "@{b}", "<FONT SIZE=\"+1\">", "{\\large ", "\\par\\fs28 "}, /* Large Font */
  {"", "@{i}", "<I>", "{\\it ", "\\i1 "},	/* Italics. */
  {"", "", "", "", ""},		/* NON-Proportional font. */
  {"", "", "<SMALL>", "{\\small ", "\\fs16 "},	/* Small Font. */
  {"", "@{b}", "<B>", "{\\bf ", "\\b1 "},	/* Bold. */
  {"", "@{u}", "<U>", "\\underline{", "\\ul1 "},	/* Underline */
  {"", "@{fg shine}", "<FONT FACE=\"courier\" size=\"3\">", "{\\em ", ""},/* Shine */
  {"", "@{fg highlight}", "<EM>", "{\\em ", ""},       	/* Highlight */
  {"", "", "<FONT FACE=\"Helvetiva,Arial,Sans-serif\">", "", ""}       	/* Default */
};

char *att_stop_command[SIZE_ATTRIBUTES][SIZE_MODES] =
{
  {"", "@{ub}", "</FONT>", "}", "\\fs20\\line "},	/* Large Font */
  {"", "@{ui}", "</I>", "}", "\\i0 "},	/* Italics. */
  {"", "", "", "", ""},		/* NON-Proportional font. */
  {"", "", "</SMALL>", "}", "\\fs20 "},		/* Small Font. */
  {"", "@{ub}", "</B>", "}", "\\b0 "},	/* Bold. */
  {"", "@{uu}", "</U>", "}", "\\ul0 "},		/* Underline */
  {"", "@{fg text}", "</FONT>", "}", ""},		/* Shine */
  {"", "@{fg text}", "</EM>", "}", ""},	/* Highlight */
  {"", "", "</FONT>", "", ""}	/* Normal */
};



/****f* ROBODoc/RB_Get_Item_Type [3.0b]
 * NAME
 *   RB_Get_Item_Type -- shortcut
 * SYNOPSIS
 *   int RB_Get_Item_Type( char *cmp_name )
 * FUNCTION
 *   return the item_type represented by the given string
 * INPUTS
 *   char *cmp_name          -- item_name to evaluate
 * RESULT
 *   int                     -- the right item_type or NO_ITEM
 * NOTES
 *   uses global char *item_names[]
 * AUTHOR
 *   Koessi
 * SEE ALSO
 *   RB_Analyse_Defaults_File(), RB_Get_Item_Attr()
 * SOURCE
 */

int
RB_Get_Item_Type (char *cmp_name)
{
  int item_type;

  for (item_type = NAME_ITEM; item_type < OTHER_ITEM; ++item_type)
    {
      if (!strncmp (item_names[item_type], cmp_name,
		    strlen (item_names[item_type])))
	return (item_type);
    }
  return (NO_ITEM);
}

/*** RB_Get_Item_Type ***/



/****f* ROBODoc/RB_Get_Item_Attr [3.0b]
 *
 * NAME
 *   RB_Get_Item_Attr -- shortcut
 * SYNOPSIS
 *   int RB_Get_Item_Attr( char *cmp_name )
 * FUNCTION
 *   return the item_attr represented by the given string
 * INPUTS
 *   char *cmp_name  -- item_attr_name to evaluate
 * RESULT
 *   int             -- the right item_attr or NULL
 * NOTES
 *   uses global char *item_attr_names[]
 * AUTHOR
 *   Koessi
 * SEE ALSO
 *   RB_Analyse_Defaults_File(), RB_Get_Item_Type()
 * SOURCE
 */

int
RB_Get_Item_Attr (char *cmp_name)
{
  int item_attr;

  for (item_attr = MAKE_LARGE; item_attr < SIZE_ATTRIBUTES; ++item_attr)
    if (!strcmp (item_attr_names[item_attr], cmp_name))
      return (item_attr);
  if (strcmp ("NORMAL", cmp_name))
    {
      fprintf (stderr, "%s: Warning unknown attribute [%s] in defaults file.\n",
	       whoami, cmp_name);
    }
  return (MAKE_NORMAL);
}

/************/
