示例#1
0
bool MyFb2File::GetTranslators(author_array &translators)
{
  bool retVal = false;
  int pos = 0;
  if (m_titleInfo.length() == 0)
  {
    m_titleInfo = GetXmlTag(titleInfoTag, pos);
  }
  if (m_titleInfo.length() == 0)
  {
    return retVal;
  }

  translators.clear();

  pos = 0;
  QString curFirstName = tr("");
  QString curLastName = tr("");
  QString curMiddleName = tr("");
  QString curAuthor = tr("");
  bool firstAuthor = true;

  while ((curAuthor = GetXmlTag(translatorTag, m_titleInfo, pos)).length() > 0)
  {
    int authorPos = 0;
    curFirstName = GetXmlTag(firstNameTag, curAuthor, authorPos);
    authorPos = 0;
    curLastName = GetXmlTag(lastNameTag, curAuthor, authorPos);
    authorPos = 0;
    curMiddleName = GetXmlTag(middleNameTag, curAuthor, authorPos);

    if ((curFirstName.length() + curLastName.length() + curMiddleName.length()) > 0)
    {
      author a;
      a.firstname = Utf8toAnsi(curFirstName);
      a.surname = Utf8toAnsi(curLastName);
      a.middlename = Utf8toAnsi(curMiddleName);
      translators.push_back(a);
      retVal = true;
    }
  }

  return retVal;

}
示例#2
0
QString MyFb2File::Utf8toAnsi( const QString &utf8 )
{
  QString retVal = "";
  char * rv = Utf8toAnsi(utf8.toStdString().c_str());
  if (rv != NULL)
  {
    retVal = rv;
  }
  return retVal;
}
示例#3
0
QString MyFb2File::GetAnnotation(void)
{
  QString retVal = tr("");
  int pos = 0;
  if (m_titleInfo.length() == 0)
  {
    m_titleInfo = GetXmlTag(titleInfoTag, pos);
  }
  if (m_titleInfo.length() == 0)
  {
    return retVal;
  }

  pos = 0;
  retVal = Utf8toAnsi(GetXmlTag(annotationTag, m_titleInfo, pos));

  return retVal;
}
示例#4
0
QString MyFb2File::GetLanguageOrig(void)
{
  QString retVal = tr("");
  int pos = 0;
  if (m_titleInfo.length() == 0)
  {
    m_titleInfo = GetXmlTag(titleInfoTag, pos);
  }
  if (m_titleInfo.length() == 0)
  {
    return retVal;
  }

  pos = 0;
  retVal = Utf8toAnsi(GetXmlTag(langOrigTag, m_titleInfo, pos));

  return retVal;
}
示例#5
0
bool MyFb2File::GetGenres(string_array &genres)
{
  bool retVal = false;
  int pos = 0;
  if (m_titleInfo.length() == 0)
  {
    m_titleInfo = GetXmlTag(titleInfoTag, pos);
  }
  if (m_titleInfo.length() == 0)
  {
    return retVal;
  }

  genres.clear();

  pos = 0;
  QString curGenre = tr("");
  while ((curGenre = GetXmlTag(genreTag, m_titleInfo, pos)).length() > 0)
  {
    int comma = curGenre.indexOf(',');
    if (comma != -1)
    {
      int pos = 0;
      QString g = tr("");
      while ((comma = curGenre.indexOf(',', pos)) != -1)
      {
        int beg = pos, end = comma;
        while (curGenre.mid(beg, 1) == tr(" "))
        {
          beg++;
        }
        while (curGenre.mid(end - 1, 1) == tr(" "))
        {
          end--;
        }
        if ((end - beg) > 0)
        {
          g = curGenre.mid(beg, end - beg);
          genres.push_back(Utf8toAnsi(g));
        }
        pos = comma + 1;
      }
      int beg = pos, end = curGenre.length();
      while (curGenre.mid(beg, 1) == tr(" "))
      {
        beg++;
      }
      while (curGenre.mid(end - 1, 1) == tr(" "))
      {
        end--;
      }
      if ((end - beg) > 0)
      {
        g = curGenre.mid(beg, end - beg);
        genres.push_back(Utf8toAnsi(g));
      }
    }
    else
    {
      genres.push_back(Utf8toAnsi(curGenre));
    }
    retVal = true;
  }

  return retVal;

}
示例#6
0
bool MyFb2File::GetSerie(QString &serieName, int &serieNum)
{
  bool retVal = false;
  int pos = 0;
  if (m_titleInfo.length() == 0)
  {
    m_titleInfo = GetXmlTag(titleInfoTag, pos);
  }
  if (m_titleInfo.length() == 0)
  {
    return retVal;
  }

  int start;

  // search for sequence tag
  if ((start = m_titleInfo.indexOf(serieTag)) == -1)
  {
    // no series
    serieName.clear();
    serieNum = 0;
    return retVal;
  }

  // search for name tag
  int nameStart, numStart;
  if ((nameStart = m_titleInfo.indexOf(serieNameTag, start)) == -1)
  {
    // no series
    serieName.clear();
    serieNum = 0;
    return retVal;
  }

  int nameQuote1, nameQuote2, numQuote1, numQuote2;
  if ((nameQuote1 = m_titleInfo.indexOf('\"', nameStart)) == -1)
  {
    // no series
    serieName.clear();
    serieNum = 0;
    return retVal;
  }
  if ((nameQuote2 = m_titleInfo.indexOf('\"', nameQuote1 + 1)) == -1)
  {
    // no series
    serieName.clear();
    serieNum = 0;
    return retVal;
  }

  if ((numStart = m_titleInfo.indexOf(serieNumTag, start)) == -1)
  {
    // no series
    serieName.clear();
    serieNum = 0;
    return retVal;
  }
  if ((numQuote1 = m_titleInfo.indexOf('\"', numStart)) == -1)
  {
    // no series
    serieName.clear();
    serieNum = 0;
    return retVal;
  }
  if ((numQuote2 = m_titleInfo.indexOf('\"', numQuote1 + 1)) == -1)
  {
    // no series
    serieName.clear();
    serieNum = 0;
    return retVal;
  }

  if ((nameQuote2 - nameQuote1 - 1) <= 0)
  {
    serieName.clear();
    serieNum = 0;
    return retVal;
  }
  else
  {
    QString name = m_titleInfo.mid(nameQuote1 + 1, nameQuote2 - nameQuote1 - 1);
    serieName = Utf8toAnsi(name);
  }

  if ((numQuote2 - numQuote1 - 1) <= 0)
  {
    serieNum = 0;
  }
  else
  {
    QString num = m_titleInfo.mid(numQuote1 + 1, numQuote2 - numQuote1 - 1);
    bool ok;
    serieNum = num.toInt(&ok);
    if (!ok)
    {
      serieNum = 0;
    }
  }
  retVal = true;
  return retVal;
}
示例#7
0
void 
BlobMgmt::ProcessComboSelection(wyString& comboselparam)
{
 	wyChar *ansistr = NULL;
	wyChar *utf8str = NULL;
	wyWChar *ucs2str = NULL;
	wyInt32 lenucs2 = 0, i;
	
	if(comboselparam.CompareI("US-ascii/Ansi ") == 0 && m_isutf8 == wyTrue)
	{
		ansistr = Utf8toAnsi(m_blobdata.GetString(), m_blobdata.GetLength());
        m_piub->m_data = ansistr;
		m_piub->m_datasize      = strlen(ansistr);
		m_piub->m_isnull		= wyFalse;
		m_piub->m_ischanged     = wyTrue;
	}
	else if(comboselparam.CompareI("UTF-8") == 0 && m_isansi == wyTrue)
	{
		utf8str = AnsitoUtf8(m_blobdata.GetString(), m_blobdata.GetLength());
		m_piub->m_data = utf8str;
		m_piub->m_datasize      = strlen(utf8str);
		m_piub->m_isnull		= wyFalse;
		m_piub->m_ischanged     = wyTrue;
	}
	else if(comboselparam.CompareI("ucs2") == 0 && m_isutf8 == wyTrue)
	{
		ucs2str = Utf8toUcs2(m_blobdata.GetString(), m_blobdata.GetLength());
		lenucs2 = wcslen(ucs2str);
		memset(m_piub->m_data, 0, strlen(m_piub->m_data));
		for(i=0; i < lenucs2; i++)
			memcpy(m_piub->m_data + i, ucs2str + i, 1);
		
		m_piub->m_datasize      = lenucs2;
		m_piub->m_isnull		= wyFalse;
		m_piub->m_ischanged     = wyTrue;
	}
	else if(comboselparam.CompareI("US-ascii/Ansi ") == 0 && m_isucs2 == wyTrue)
	{
		ansistr = Ucs2toAnsi(m_blobdata.GetString(), m_blobdata.GetLength());
		m_piub->m_data = ansistr;
		m_piub->m_datasize      = strlen(ansistr);
		m_piub->m_isnull		= wyFalse;
		m_piub->m_ischanged     = wyTrue;
	}
	else if(comboselparam.CompareI("UTF-8") == 0 && m_isucs2 == wyTrue)
	{
		utf8str = Ucs2toUtf8(m_blobdata.GetString(), m_blobdata.GetLength());
		m_piub->m_data = utf8str;
		m_piub->m_datasize      = strlen(utf8str);
		m_piub->m_isnull		= wyFalse;
		m_piub->m_ischanged     = wyTrue;
	}
	else if(comboselparam.CompareI("ucs2") == 0 && m_isansi == wyTrue)
	{
		ucs2str = AnsitoUcs2(m_blobdata.GetString(), m_blobdata.GetLength());
		lenucs2 = wcslen(ucs2str);
		memcpy(m_piub->m_data, ucs2str, lenucs2);
		for(i=0; i < lenucs2; i++)
			memcpy(m_piub->m_data + i, ucs2str + i, 1);
		m_piub->m_datasize      = lenucs2;
		m_piub->m_isnull		= wyFalse;
		m_piub->m_ischanged     = wyTrue;
	}
}