示例#1
0
int main(int argc, char** argv){
  UnicodeProperties props;
  UnicodeString us(argv[1]);
  BiDir bidi(&props);
  bidi.determineBidiLevels(us);
  return 0;
}
示例#2
0
bool IObjectMapPropertyType<KeyType, ValueType>::Serialize(
	ISerializer &serializer, const Object *object) const
{
	BidirectionalSerializer bidi(serializer);

	MapSerialization(DoSerialize, bidi, object);

	return bidi.Succeeded();
}
示例#3
0
bool IObjectMapPropertyType<KeyType, ValueType>::Deserialize(
	IDeserializer &deserializer, Object *object) const
{
	BidirectionalSerializer bidi(deserializer);

	KeyType key;
	ValueType value;

	while(DoDeserialize(bidi, key, value))
	{
		WriteItem(object, key, -1, &value);
	}

	return bidi.Succeeded();
}
示例#4
0
int main(int, char**)
{
    int a[] = {1, 2, 3};

    bidirectional_iterator<int *> bidi(a+1);
	std::prev(bidi, -1);  // should work fine
	std::prev(bidi,  0);  // should work fine
    std::prev(bidi,  1);  // should work fine

    forward_iterator<int *> it(a+1);
    std::prev(it, -1); // should work fine
    std::prev(it,  0); // should work fine
    EXPECT_DEATH( std::prev(it, 1) ); // can't go backwards on a FwdIter

  return 0;
}
示例#5
0
void CPDF_TextPage::CloseTempLine() {
  if (m_TempCharList.empty())
    return;

  WideString str = m_TempTextBuf.MakeString();
  bool bPrevSpace = false;
  for (size_t i = 0; i < str.GetLength(); ++i) {
    if (str[i] != ' ') {
      bPrevSpace = false;
      continue;
    }
    if (bPrevSpace) {
      m_TempTextBuf.Delete(i, 1);
      m_TempCharList.erase(m_TempCharList.begin() + i);
      str.Delete(i);
      --i;
    }
    bPrevSpace = true;
  }
  CFX_BidiString bidi(str);
  if (m_parserflag == FPDFText_Direction::Right)
    bidi.SetOverallDirectionRight();
  CFX_BidiChar::Direction eCurrentDirection = bidi.OverallDirection();
  for (const auto& segment : bidi) {
    if (segment.direction == CFX_BidiChar::RIGHT ||
        (segment.direction == CFX_BidiChar::NEUTRAL &&
         eCurrentDirection == CFX_BidiChar::RIGHT)) {
      eCurrentDirection = CFX_BidiChar::RIGHT;
      for (int m = segment.start + segment.count; m > segment.start; --m)
        AddCharInfoByRLDirection(str[m - 1], m_TempCharList[m - 1]);
    } else {
      eCurrentDirection = CFX_BidiChar::LEFT;
      for (int m = segment.start; m < segment.start + segment.count; ++m)
        AddCharInfoByLRDirection(str[m], m_TempCharList[m]);
    }
  }
  m_TempCharList.clear();
  m_TempTextBuf.Delete(0, m_TempTextBuf.GetLength());
}