Пример #1
0
VOID BaseClass::Parse(struct ParseMessage &pmsg)
{
  AttrClass::Parse(pmsg);
  pmsg.SkipSpaces();

  struct ArgList args[] =
  {
    { "HREF",   &URL,     ARG_URL, NULL },
    { "TARGET", &Target,  ARG_URL, NULL },
    { NULL,     NULL,     0,       NULL }
  };
  ScanArgs(pmsg.Locked, args);

  if(URL)
  {
    ULONG last, i = last = 0;
    while(URL[i])
    {
      if(URL[i++] == '/')
        last = i;
    }
    URL[last] = '\0';
  }

  pmsg.Host->Base = this;
}
Пример #2
0
VOID LIClass::Parse(struct ParseMessage &pmsg)
{
  pmsg.SetLock();
  pmsg.NextEndBracket();
#ifdef OUTPUT
  PrintTag(pmsg.Locked);
#endif

  LONG number = pmsg.OL_Cnt[pmsg.OL_Level];
  struct ArgList args[] =
  {
    { "VALUE",  &number,    ARG_NUMBER, NULL  },
    { NULL,     NULL,       0,          NULL  }
  };
  ScanArgs(pmsg.Locked, args);

  if(pmsg.OpenCounts[tag_OL])
  {
    if(pmsg.OL_Level < 3)
    {
      Number = number++;
      pmsg.OL_Cnt[pmsg.OL_Level] = number;
    }
  }
  TreeClass::Parse(pmsg);
}
Пример #3
0
/** 行の解析

	@param[in] buf 行(先頭から)
	@param[in] linelen 行の長さ
	@param[in] linenum 行番号
*/
bool COutlineErlang::parse( const wchar_t* buf, int linelen, CLogicInt linenum )
{
	const wchar_t* pos = buf;
	const wchar_t* const end = buf + linelen;
	if( m_state == STATE_FUNC_FOUND ){
		m_state = STATE_NORMAL;
	}
	if( m_state == STATE_NORMAL ){
		pos = ScanFuncName( buf, end, pos );
		if( m_state != STATE_NORMAL ){
			m_lnum = linenum;
		}
	}
	while( pos < end ){
		switch( m_state ){
			case STATE_FUNC_CANDIDATE_FIN:
				pos = EnterArgs( end, pos ); break;
			case STATE_FUNC_ARGS1:
				pos = ScanArgs1( end, pos ); break;
			case STATE_FUNC_ARGS:
				pos = ScanArgs( end, pos ); break;
			case STATE_FUNC_ARGS_FIN:
				pos = EnterCond( end, pos ); break;
			default:
				PleaseReportToAuthor(NULL, _T("COutlineErlang::parse Unknown State: %d"), m_state );
				break;
		}
		if( m_state == STATE_FUNC_FOUND ){
			build_arity( m_argcount );
			break;
		}
	}
	return m_state == STATE_FUNC_FOUND;
}
Пример #4
0
int
main(int argc, char *argv[])
{
#ifdef	AFS_AIX32_ENV
    /*
     * The following signal action for AIX is necessary so that in case of a 
     * crash (i.e. core is generated) we can include the user's data section 
     * in the core dump. Unfortunately, by default, only a partial core is
     * generated which, in many cases, isn't too useful.
     */
    struct sigaction nsa;

    sigemptyset(&nsa.sa_mask);
    nsa.sa_handler = SIG_DFL;
    nsa.sa_flags = SA_FULLDUMP;
    sigaction(SIGSEGV, &nsa, NULL);
#endif
    ScanArgs(argc, argv);

    /* now read each line of the CopyList */
    if (Copy(file1, file2, !oneLevel, 0))
	return(1);		/* some type of failure */

    return(0);
}
Пример #5
0
int main(int argc, char *argv[])
{
    int		retval;		/* return from yyparse */
	
    ScanArgs(argc, argv);

    if (ifile == NULL)
	ifile = "stdin";
    else {
	gotInFile = 1;
	if (freopen(ifile,"r",stdin) == NULL) {
	    fprintf(stderr, "%s:  can't open %s for input\n", prog, ifile);
	    exit(1);
	}
    }
    if ((string_temp = (char *) malloc((unsigned) (maxstring+1))) == 0) {
	fprintf(stderr, "%s:  can't allocate %d char string; try a smaller -s value\n", prog, maxstring);
	exit(1);
    }
    if (ofile == NULL)
		ofile = "stdout";
    else {
#ifdef __MACH__
 		(void)unlink(ofile);
#endif /* __MACH__ */
    	if (freopen(ofile,"w",stdout) == NULL) {
	    fprintf(stderr, "%s:  can't open %s for output\n", prog, ofile);
	    exit(1);
	}
    }
    InitOFile();

    if (hfile != NULL) {
#ifdef __MACH__
 		(void)unlink(hfile);
#endif /* __MACH__ */
	if ((header = fopen(hfile,"w")) == NULL) {
	    fprintf(stderr, "%s:  can't open %s for output\n", prog, hfile);
	    exit(1);
	}
    }
    if (header != NULL)	InitHFile();

    InitWellKnownPSNames();

    if ((retval = yyparse()) != 0)
	fprintf(stderr,"%s: error in parsing %s\n",prog,ifile);
    else if (errorCount != 0) {
	fprintf(stderr,"%s: errors were encountered\n",prog);
	retval = errorCount;
    }

    if (hfile != NULL) FinishHFile();

    exit (retval);
}
Пример #6
0
VOID BackFillClass::Parse(struct ParseMessage &pmsg)
{
  struct ArgList args[] =
  {
    { "BACKGROUND", &Source,        ARG_URL,    NULL  },
    { "BGCOLOR",    &BackgroundRGB, ARG_COLOUR, NULL  },
    { NULL,         NULL,           0,          NULL  }
  };
  ScanArgs(pmsg.Locked, args);
  TreeClass::Parse(pmsg);
}
Пример #7
0
VOID TextAreaClass::Parse(struct ParseMessage &pmsg)
{
  pmsg.SetLock();
  pmsg.NextEndBracket();
#ifdef OUTPUT
  PrintTag(pmsg.Locked);
#endif

  BOOL disabled = FALSE, readonly = FALSE;
  struct ArgList args[] =
  {
    { "NAME",     &Name,      ARG_STRING, NULL  },
    { "DISABLED", &disabled,  ARG_SWITCH, NULL  },
    { "READONLY", &readonly,  ARG_SWITCH, NULL  },
    { "COLS",     &Columns,   ARG_NUMBER, NULL  },
    { "ROWS",     &Rows,      ARG_NUMBER, NULL  },
    { NULL,       NULL,       0,          NULL }
  };

  Rows = 10; Columns = 40;
  ScanArgs(pmsg.Locked, args);

  if(disabled)
    Flags |= FLG_TextArea_Disabled;
  if(readonly)
    Flags |= FLG_TextArea_ReadOnly;

  pmsg.SetLock();
  pmsg.NextStartBracket();

  Contents = new (std::nothrow) char[pmsg.Current-pmsg.Locked+1];
  if (!Contents) return;
  STRPTR src = pmsg.Locked, dst = Contents;
  while(*src != '<' && *src)
  {
    struct EntityInfo *entity;
    if(*src == '&' && (entity = GetEntityInfo(src+1)))
    {
      *dst++ = entity->ByteCode;
      src += strlen(entity->Name)+1;
      if(*src == ';')
        src++;
    }
    else
    {
      *dst++ = *src++;
    }
  }
  *dst = '\0';

  Flags |= FLG_AllElementsPresent | FLG_ArgumentsRead;;
  pmsg.Gadgets = TRUE;
}
Пример #8
0
VOID OLClass::Parse(struct ParseMessage &pmsg)
{
  pmsg.SetLock();
  pmsg.NextEndBracket();
#ifdef OUTPUT
  PrintTag(pmsg.Locked);
#endif

  STRPTR type = NULL;
  LONG start = 1;
  struct ArgList args[] =
  {
    { "TYPE", &type,    ARG_STRING, NULL  },
    { "START",  &start,   ARG_NUMBER, NULL  },
    { NULL,     NULL,       0,          NULL  }
  };
  ScanArgs(pmsg.Locked, args);

  if(type)
  {
    switch(*type)
    {
      case 'a':
        Type = OL_LowerAlpha;
      break;

      case 'A':
        Type = OL_UpperAlpha;
      break;

      case 'i':
        Type = OL_LowerRoman;
      break;

      case 'I':
        Type = OL_UpperRoman;
      break;
    }
    delete type;
  }

  APTR handle;
  if((handle = Backup(pmsg, 1, tag_LI)))
  {
    if(++pmsg.OL_Level < 3)
      pmsg.OL_Cnt[pmsg.OL_Level] = start;
    TreeClass::Parse(pmsg);
    pmsg.OL_Level--;
    Restore(pmsg.OpenCounts, 1, handle);
  }
}
Пример #9
0
VOID BrClass::Parse(struct ParseMessage &pmsg)
{
    AttrClass::Parse(pmsg);
    pmsg.SkipSpaces();

    const char *ClearKeywords[] = { "LEFT", "RIGHT", "ALL", NULL };
    LONG clear = -1;
    struct ArgList args[] =
    {
        { "CLEAR",  &clear, ARG_KEYWORD, ClearKeywords },
        { NULL,     NULL,   0,           NULL          }
    };
    ScanArgs(pmsg.Locked, args);
    Clear = clear+1;
}
Пример #10
0
VOID MapClass::Parse(struct ParseMessage &pmsg)
{
  pmsg.SetLock();
  pmsg.NextEndBracket();
#ifdef OUTPUT
  PrintTag(pmsg.Locked);
#endif

  struct ArgList args[] =
  {
    { "NAME", &Name,  ARG_URL, NULL },
    { NULL,     NULL,    0,       NULL }
  };
  ScanArgs(pmsg.Locked, args);

  TreeClass::Parse(pmsg);
}
Пример #11
0
VOID FontClass::Parse(struct ParseMessage &pmsg)
{
  pmsg.SetLock();
  pmsg.NextEndBracket();
#ifdef OUTPUT
  PrintTag(pmsg.Locked);
#endif

  STRPTR font = NULL;
  struct ArgList args[] =
  {
    { "COLOR",  &FontRGB, ARG_COLOUR, NULL },
    { "SIZE",   &font,    ARG_STRING, NULL },
    { NULL,     NULL,     0,          NULL }
  };

  ScanArgs(pmsg.Locked, args);

  LONG size = Font_None;
  if(font && sscanf(font, "%*[+-]%ld", &size) == 1)
  {
    switch(*font)
    {
      case '+':
        size = Font_H4 - ((size > 3) ? 3 : size);
      break;

      case '-':
        size = Font_H4 + ((size > 2) ? 2 : size);
      break;

      default:
        size = Font_Fixed - ((size > 6) ? 6 : size);
      break;
    }
  }
//  if(font) printf("Converted: %d (%s)\n", size, font);
  delete font;
  Font = size;

  TreeClass::Parse(pmsg);
}
Пример #12
0
VOID PClass::Parse(struct ParseMessage &pmsg)
{
  pmsg.SetLock();
  pmsg.NextEndBracket();
#ifdef OUTPUT
  PrintTag(pmsg.Locked);
#endif

  struct ArgList args[] =
  {
    { "ALIGN",  &Alignment,   ARG_KEYWORD, AlignKeywords },
    { NULL,     NULL,          0,           NULL }
  };

  Alignment = (ULONG)-1;
  ScanArgs(pmsg.Locked, args);
  Alignment++;

  TreeClass::Parse(pmsg);
}
Пример #13
0
VOID TableClass::Parse(struct ParseMessage &pmsg)
{
  pmsg.SetLock();
  pmsg.NextEndBracket();
#ifdef OUTPUT
  PrintTag(pmsg.Locked);
#endif

  APTR handle; UBYTE group = pmsg.OpenGroups[group_Tablecell];
  pmsg.OpenGroups[group_Tablecell] = 0;
  if((handle = Backup(pmsg, 11, tag_DD, tag_DL, tag_DT, tag_LI, tag_P, tag_TD, tag_TH, tag_TR, tag_FONT, tag_CENTER, tag_B)))
  {
    struct ArgList args[] =
    {
      { "BACKGROUND", &Source,        ARG_URL,       NULL },
      { "BGCOLOR",    &BackgroundRGB, ARG_COLOUR,    NULL },

      { "BORDER",     &BorderSize,    ARG_NUMBER,    NULL },
      { "WIDTH",      &GivenWidth,    ARG_VALUE,     NULL },
      { "CELLSPACING",  &Spacing,     ARG_NUMBER,    NULL },
      { "CELLPADDING",  &Padding,     ARG_NUMBER,    NULL },
      { "ALIGN",      &Alignment,     ARG_KEYWORD,   AlignKeywords },
      { NULL,           NULL,             0,             NULL  }
    };
    Spacing = Padding = 2;
    Alignment = -1;
    ScanArgs(pmsg.Locked, args);
    Alignment++;

    UBYTE *old_opens = new (std::nothrow) UBYTE [tag_NumberOf + group_NumberOf];
    if (!old_opens) return;
    memcpy(old_opens, pmsg.OpenCounts, tag_NumberOf + group_NumberOf);
    memset(old_opens, 0, tag_NumberOf + group_NumberOf);

    UBYTE old_align = pmsg.CellAlignment;
    UBYTE old_valign = pmsg.CellVAlignment;
    pmsg.CellAlignment = 0;
    pmsg.CellVAlignment = Align_Middle;
    BackFillClass::Parse(pmsg);
    pmsg.CellAlignment = old_align;
    pmsg.CellVAlignment = old_valign;

    memcpy(pmsg.OpenCounts, old_opens, tag_NumberOf + group_NumberOf);
    delete[] old_opens;
    Restore(pmsg.OpenCounts, 8, handle);

    struct ChildsList *prev = (struct ChildsList *)&FirstChild, *first = FirstChild;
    while(first)
    {
      if(first->Obj->id() != tag_TR)
      {
        if(first->Obj->id() == tag_COMMENT || first->Obj->id() == tag_Text)
        {
          prev->Next = first->Next;
          delete first->Obj;
          delete first;
          first = prev->Next;
        }
        else
        {
          class TRClass *tr = new (std::nothrow) class TRClass();
          if (!tr) return;
          tr->setId(tag_TR);
          tr->setFlags(tr->flags() | FLG_ArgumentsRead);
          tr->AddChild(first->Obj);
          tr->Verify();
          first->Obj = tr;

          prev = first;
          first = first->Next;

          while(first && first->Obj->group() == group_Tablecell)
          {
            tr->AddChild(first->Obj);
            prev->Next = first->Next;
            delete first;
            first = prev->Next;
          }
        }
      }
      else
      {
        prev = first;
        first = first->Next;
      }
    }
    RealFirstChild = FirstChild;
  }
  pmsg.OpenGroups[group_Tablecell] = group;
}