int CCurveLine::InititalCurv( char* data )
{
	PointNum = 0;
	data = data + 10;
	for(int i = 0;data[i] != '\0' ;i++)
	{
		if(data[i] == ',')
			PointNum++;
	}
	//将最后一个添加进去
	PointNum++;

	PointData = new double[PointNum];
	for(int i = 0;i < PointNum;i++)
	{
		PointData[i] = 0;
	}

	int str_idx = 0;
	for(int i = 0;i < PointNum;i++)
	{
		char* SubStr = (i==(PointNum-1))?GetSubString(data,str_idx,'\0'):GetSubString(data,str_idx,',');
		PointData[i] = StringDecode(SubStr,0);
		//PointData[i] = atoi(SubStr);
		str_idx += strlen(SubStr)+1;	
	}
	return 1;
}
示例#2
0
JSON* GetItemInJSON(JSON *json, const char *path)
{
    JSON *rtn = NULL;
    JSON *next_json = NULL;

    if (path[0] != '/') {
        printf("Exception: Invalid path format.\n");
        return NULL;
    }
    if (strcmp("/", path) == 0) {
        return json;
    }

    char *sub_s = GetSubString(path, 1, strlen(path) - 1);
    char *next_slash = strchr(sub_s, '/');
    if (next_slash == NULL) {
        switch (json->type) {
            case JSON_ARRAY:  rtn = GetItemInArray(json, atoi(sub_s)); break;
            case JSON_OBJECT: rtn = GetItemInObject(json, sub_s);      break;
        }
        free(sub_s);
        return rtn;
    }
    else {
        char *search_item_key = GetSubString(sub_s, 0, next_slash - sub_s);
        char *search_item_path = GetSubString(next_slash, 0, strlen(next_slash));

        switch (json->type) {
        case JSON_ARRAY:
            next_json = GetItemInArray(json, atoi(search_item_key));
        case JSON_OBJECT:
            next_json = GetItemInObject(json, search_item_key);
        }

        rtn = GetItemInJSON(next_json, search_item_path);
        free(search_item_key);
        free(search_item_path);
        free(sub_s);

        return rtn;
    }

    return NULL;
}
示例#3
0
void psXMLTag::GetTagName( psString& str)
{
    size_t i=1;
    const char *myData = GetData();

    while ( i < Size && !isspace(myData[i]) && myData[i] != '>')
        i++;

    GetSubString(str, 1,i);
}
示例#4
0
size_t psXMLString::GetTagSection(int start, const char* tagName, 
    psXMLString& tagSection)
{
    size_t end = FindMatchingEndTag(start, tagName);
    
    if ( end == (size_t)-1 )
        tagSection = "";
    else
        GetSubString(tagSection, start, end+strlen(tagName)+3);
    
    return tagSection.Length();
}
示例#5
0
size_t psXMLString::GetTag( int start, psXMLTag& tag )
{
    psString tmp(">");
    int end = FindSubString(tmp, start);

    if ( end == -1 )
        tag.Empty();
    else
        GetSubString(tag, start, end+1);

    return tag.Length();
}
示例#6
0
size_t psXMLString::GetWithinTagSection(int start, const char* tagName, 
                                     psXMLString& tagSection)
{
    size_t end = FindMatchingEndTag( start, tagName );

    if ( end == (size_t)-1 )
        tagSection = psString("");
    else
    {
        psXMLTag startTag;
        GetTag(start, startTag);
        start+=(int)startTag.Length();
        GetSubString(tagSection, start, end);
    }
    return tagSection.Length();
}
示例#7
0
int Sentence::Read(std::istream& in,const std::vector<FactorType>& factorOrder)
{
  // const std::string& factorDelimiter = StaticData::Instance().GetFactorDelimiter();
  std::string line;
  std::map<std::string, std::string> meta;

  if (getline(in, line, '\n').eof())
    return 0;

  //get covered words - if continual-partial-translation is switched on, parse input
  const StaticData &staticData = StaticData::Instance();
  m_frontSpanCoveredLength = 0;
  m_sourceCompleted.resize(0);
  if (staticData.ContinuePartialTranslation()) {
    string initialTargetPhrase;
    string sourceCompletedStr;
    int loc1 = line.find( "|||", 0 );
    int loc2 = line.find( "|||", loc1 + 3 );
    if (loc1 > -1 && loc2 > -1) {
      initialTargetPhrase = line.substr(0, loc1);
      sourceCompletedStr = line.substr(loc1 + 3, loc2 - loc1 - 3);
      line = line.substr(loc2 + 3);
      sourceCompletedStr = Trim(sourceCompletedStr);
      initialTargetPhrase = Trim(initialTargetPhrase);
      m_initialTargetPhrase = initialTargetPhrase;
      int len = sourceCompletedStr.size();
      m_sourceCompleted.resize(len);
      int contiguous = 1;
      for (int i = 0; i < len; ++i) {
        if (sourceCompletedStr.at(i) == '1') {
          m_sourceCompleted[i] = true;
          if (contiguous)
            m_frontSpanCoveredLength ++;
        } else {
          m_sourceCompleted[i] = false;
          contiguous = 0;
        }
      }
    }
  }

  // remove extra spaces
  line = Trim(line);

  // if sentences is specified as "<seg id=1> ... </seg>", extract id
  meta = ProcessAndStripSGML(line);
  if (meta.find("id") != meta.end()) {
    this->SetTranslationId(atol(meta["id"].c_str()));
  }
  if (meta.find("docid") != meta.end()) {
    this->SetDocumentId(atol(meta["docid"].c_str()));
    this->SetUseTopicId(false);
    this->SetUseTopicIdAndProb(false);
  }
  if (meta.find("topic") != meta.end()) {
    vector<string> topic_params;
    boost::split(topic_params, meta["topic"], boost::is_any_of("\t "));
    if (topic_params.size() == 1) {
      this->SetTopicId(atol(topic_params[0].c_str()));
      this->SetUseTopicId(true);
      this->SetUseTopicIdAndProb(false);
    } else {
      this->SetTopicIdAndProb(topic_params);
      this->SetUseTopicId(false);
      this->SetUseTopicIdAndProb(true);
    }
  }
  if (meta.find("weight-setting") != meta.end()) {
    this->SetWeightSetting(meta["weight-setting"]);
    this->SetSpecifiesWeightSetting(true);
    staticData.SetWeightSetting(meta["weight-setting"]);
  } else {
    this->SetSpecifiesWeightSetting(false);
  }

  // parse XML markup in translation line
  //const StaticData &staticData = StaticData::Instance();
  std::vector< size_t > xmlWalls;
  std::vector< std::pair<size_t, std::string> > placeholders;

  if (staticData.GetXmlInputType() != XmlPassThrough) {
    int offset = 0;
    if (staticData.IsChart()) {
      offset = 1;
    }

    if (!ProcessAndStripXMLTags(line, m_xmlOptions, m_reorderingConstraint, xmlWalls, placeholders,
                                offset,
                                staticData.GetXmlBrackets().first,
                                staticData.GetXmlBrackets().second)) {
      const string msg("Unable to parse XML in line: " + line);
      TRACE_ERR(msg << endl);
      throw runtime_error(msg);
    }
  }

  // Phrase::CreateFromString(Input, factorOrder, line, factorDelimiter, NULL);
  Phrase::CreateFromString(Input, factorOrder, line, NULL);

  // placeholders
  ProcessPlaceholders(placeholders);

  if (staticData.IsChart()) {
    InitStartEndWord();
  }

  //now that we have final word positions in phrase (from CreateFromString),
  //we can make input phrase objects to go with our XmlOptions and create TranslationOptions

  //only fill the vector if we are parsing XML
  if (staticData.GetXmlInputType() != XmlPassThrough ) {
    for (size_t i=0; i<GetSize(); i++) {
      m_xmlCoverageMap.push_back(false);
    }

    //iterXMLOpts will be empty for XmlIgnore
    //look at each column
    for(std::vector<XmlOption*>::const_iterator iterXmlOpts = m_xmlOptions.begin();
        iterXmlOpts != m_xmlOptions.end(); iterXmlOpts++) {

      const XmlOption *xmlOption = *iterXmlOpts;
      const WordsRange &range = xmlOption->range;

      for(size_t j=range.GetStartPos(); j<=range.GetEndPos(); j++) {
        m_xmlCoverageMap[j]=true;
      }
    }

  }

  // reordering walls and zones
  m_reorderingConstraint.InitializeWalls( GetSize() );

  // set reordering walls, if "-monotone-at-punction" is set
  if (staticData.UseReorderingConstraint() && GetSize()>0) {
    m_reorderingConstraint.SetMonotoneAtPunctuation( GetSubString( WordsRange(0,GetSize()-1 ) ) );
  }

  // set walls obtained from xml
  for(size_t i=0; i<xmlWalls.size(); i++)
    if( xmlWalls[i] < GetSize() ) // no buggy walls, please
      m_reorderingConstraint.SetWall( xmlWalls[i], true );
  m_reorderingConstraint.FinalizeWalls();

  return 1;
}
XBOX::VError SendValueBagResponse (IHTTPResponse& ioResponse, const XBOX::VValueBag& inBag, const XBOX::VString& inBagName)
{
	XBOX::VError		error = XBOX::VE_OK;
	const XBOX::VString	stringURL = ioResponse.GetRequest().GetURLQuery();
	HTTPRequestMethod	method = ioResponse.GetRequest().GetRequestMethod();
	XBOX::VString		resultString;
	bool				isJSON = true;
	bool				prettyFormatting = false;
	bool				isValidRequest = ((method == HTTP_GET) || (method == HTTP_HEAD));

	if (isValidRequest)
	{
		sLONG			posFormat = 0, posPretty = 0;
		const UniChar *	stringPtr = stringURL.GetCPointer();
		const sLONG		stringLen = stringURL.GetLength();

		if ((posFormat = HTTPServerTools::FindASCIICString (stringPtr, "format=")) > 0)
		{
			posFormat += 6;

			sLONG startPos = 0;
			sLONG endPos = HTTPServerTools::FindASCIICString (stringPtr + posFormat, "&");
			if (endPos <= 0)
				endPos = stringLen;
			else
				endPos += (posFormat - 1);

			if (((startPos = HTTPServerTools::FindASCIICString (stringPtr + posFormat, "xml")) > 0) && (startPos < endPos))
				isJSON = false;
			else if(((startPos = HTTPServerTools::FindASCIICString (stringPtr + posFormat, "json")) > 0) && (startPos < endPos))
				isJSON = true;
			else
				isValidRequest = false;
		}

		if ((posPretty = HTTPServerTools::FindASCIICString (stringPtr, "pretty=")) > 0)
		{
			XBOX::VString prettyString;

			posPretty += 6;
			sLONG endPos = HTTPServerTools::FindASCIICString (stringPtr + posPretty, "&");
			if (endPos <= 0)
				endPos = stringLen;
			else
				endPos += (posPretty - 1);

			if (endPos > posPretty)
			{
				GetSubString (stringURL, posPretty, endPos - 1, prettyString);
				prettyFormatting = (HTTPServerTools::EqualASCIICString (prettyString, "yes"));
			}
			else
				isValidRequest = false;
		}
	}

	if (isValidRequest)
	{
		if (isJSON)
		{
			inBag.GetJSONString (resultString, prettyFormatting ? JSON_PrettyFormatting : JSON_Default);
		}
		else
		{
			resultString.FromCString ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
			inBag.DumpXML (resultString,  inBagName, prettyFormatting);
		}

		XBOX::StStringConverter<char> buffer (resultString, XBOX::VTC_UTF_8);

		error = ioResponse.SetResponseBody (buffer.GetCPointer(), buffer.GetLength());

		ioResponse.SetExpiresHeader (GMT_NOW);
		ioResponse.AddResponseHeader (STRING_HEADER_PRAGMA, STRING_HEADER_VALUE_NO_CACHE);
		ioResponse.AddResponseHeader (STRING_HEADER_CONTENT_TYPE, (isJSON) ? STRING_CONTENT_TYPE_JSON : STRING_CONTENT_TYPE_XML);

		ioResponse.SetContentLengthHeader (buffer.GetLength());
		ioResponse.AllowCompression (true);
	}
	else
	{
		error = ioResponse.ReplyWithStatusCode (HTTP_BAD_REQUEST);
	}

	return error;
}
示例#9
0
LPCWSTR CUIGlobals::GetUserName(int i)
{
	return GetSubString(m_wszUserNames, i);
}
示例#10
0
void psXMLTag::GetTagParm(const char* parm, csString& value )
{
    psString param(" ");
    param.Append(parm);
    param.Append('=');
 
    int start = FindSubString(param, 0, XML_CASE_INSENSITIVE);

    //Checks to see if the parm is getting mixed up with the tag name.
    if ( start==1 )
    {
        psString tagName;
        GetTagName(tagName);
        start = FindSubString(param,(int)tagName.Length(),XML_CASE_INSENSITIVE); 
    }
        
    psString tempStr;

    value="";

    const char *myData = GetData();

    while ( start != -1 )
    {
        start += (int)param.Length();
        
        if (start >= (int)Length())
            return;
        
        // skip whitespace after parm name
        while (myData[start]==' ')
        {
            start++;
            if (start >= (int)Length())
                return;
        }
        
        size_t end = start+1;  // parm is at least one char
        
        // Determine delimiter, if any
        char chr;
        
        if ( myData[start] == '\"')
            chr = '\"';
        else if ( myData[start] == '[')
            chr = ']';
        else if ( myData[start] == '\'')
            chr = '\'';
        else
            chr = ' ';
        
        while ( end < Length() && myData[end]!=chr && myData[end] != '>')
            end++;
        
        GetSubString(tempStr, start+(chr!=' '), end);
        
        // Replace any xml code with the correct '&'
        const char* what = "&amp;";
        const char* with = "&";
        
        while (tempStr.FindSubString(what) != -1)
            tempStr.ReplaceSubString(what,with); 

       
        what = "&apos;";
        with = "'";
        while (tempStr.FindSubString(what) != -1)
            tempStr.ReplaceSubString(what,with);
     
        value = tempStr;
        return;
    }
}
int  main()  {
    char  strSource[]="ads3sl456789DF3456ld345AA",  char  strResult[sizeof(strSource)];
    printf("Len=%d,  strResult=%s  \nstrSource=%s\n",
           GetSubString(strSource,  strResult),  strResult,  strSource);
    return  0;
}