// static
nsHtml5HtmlAttributes*
nsHtml5ViewSourceUtils::NewBodyAttributes()
{
  nsHtml5HtmlAttributes* bodyAttrs = new nsHtml5HtmlAttributes(0);
  auto id = MakeUnique<nsString>(NS_LITERAL_STRING("viewsource"));
  bodyAttrs->addAttribute(nsHtml5AttributeName::ATTR_ID, id.release(), -1);

  auto klass = MakeUnique<nsString>();
  if (mozilla::Preferences::GetBool("view_source.wrap_long_lines", true)) {
    klass->Append(NS_LITERAL_STRING("wrap "));
  }
  if (mozilla::Preferences::GetBool("view_source.syntax_highlight", true)) {
    klass->Append(NS_LITERAL_STRING("highlight"));
  }
  if (!klass->IsEmpty()) {
    bodyAttrs->addAttribute(nsHtml5AttributeName::ATTR_CLASS, klass.release(), -1);
  }

  int32_t tabSize = mozilla::Preferences::GetInt("view_source.tab_size", 4);
  if (tabSize > 0) {
    auto style = MakeUnique<nsString>(NS_LITERAL_STRING("-moz-tab-size: "));
    style->AppendInt(tabSize);
    bodyAttrs->addAttribute(nsHtml5AttributeName::ATTR_STYLE, style.release(), -1);
  }

  return bodyAttrs;
}
Ejemplo n.º 2
0
void CTabStack::UpdateAppend(HANDLE hUpdate, CTabID* pTab, BOOL abMoveFirst)
{
	MSectionLockSimple* pUpdateLock = (MSectionLockSimple*)hUpdate;

	// Функция должна вызваться ТОЛЬКО между UpdateBegin & UpdateEnd
	if (mn_UpdatePos < 0 || !pUpdateLock)
	{
		_ASSERTE(mn_UpdatePos>=0);
		_ASSERTE(pUpdateLock!=NULL);
		return;
	}

	// Если таб в списке уже есть - то НИЧЕГО не делать (только переместить его в начало, если abActive)
	// Если таб новый - добавить в список и вызвать AddRef для таба

	if (!pTab)
	{
		_ASSERTE(pTab != NULL);
		return;
	}

	int nIndex = -1;
	for (int i = 0; i < mn_Used; i++)
	{
		if (mpp_Stack[i] == pTab)
		{
			nIndex = i;
			break;
		}
	}

	if (!abMoveFirst)
	{
		// "Обычное" население
		#ifdef _DEBUG
		if (nIndex == -1 || nIndex != mn_UpdatePos)
		{
			#if 1
			_ASSERTE(pUpdateLock->isLocked());
			#else
			pUpdateLock->RelockExclusive();
			#endif
		}
		#endif
		RequestSize(mn_UpdatePos+1, pUpdateLock);
		if (nIndex != -1 && nIndex != mn_UpdatePos)
		{
			//_ASSERTE(nIndex > mn_UpdatePos); -- may happens when creating new split from active "far /e ..." tab
			// Do NOT release tab here! Behavior can differs by arguments of UpdateEnd!
			CTabID* p = mpp_Stack[mn_UpdatePos];
			mpp_Stack[mn_UpdatePos] = mpp_Stack[nIndex];
			mpp_Stack[nIndex] = p;
			// At the moment vector must be realigned!
			_ASSERTE(mpp_Stack[mn_UpdatePos] == pTab);
		}
		if (mpp_Stack[mn_UpdatePos] != pTab)
		{
			pTab->AddRef();
			#ifdef TAB_REF_PLACE
			pTab->AddPlace(m_rp.filename, m_rp.fileline);
			#endif
		}
		mpp_Stack[mn_UpdatePos] = pTab;
		mn_UpdatePos++;
		if (mn_UpdatePos > mn_Used)
		{
			mn_Used = mn_UpdatePos;
		}
	}
	else
	{
		if (nIndex == -1)
		{
			// Таба в списке еще нет, добавляем
			AppendInt(pTab, abMoveFirst, pUpdateLock);
		}
		else if (abMoveFirst && nIndex > 0)
		{
			// Таб нужно переместить в начало списка
			#if 1
			_ASSERTE(pUpdateLock->isLocked());
			#else
			pUpdateLock->RelockExclusive();
			#endif
			memmove(mpp_Stack+1, mpp_Stack, sizeof(CTabID**) * (nIndex-1));
			mpp_Stack[0] = pTab; // AddRef не нужен, таб уже у нас в списке!
		}
		mn_UpdatePos++;
	}
}
Ejemplo n.º 3
0
// Должен вызываться только из CRealConsole!
// Возвращает "true" если были изменения
bool CTabStack::UpdateFarWindow(HANDLE hUpdate, CVirtualConsole* apVCon, LPCWSTR asName, CEFarWindowType anType, int anPID, int anFarWindowID, int anViewEditID, CTab& rActiveTab)
{
	MSectionLockSimple* pUpdateLock = (MSectionLockSimple*)hUpdate;

	// Функция должна вызваться ТОЛЬКО между UpdateBegin & UpdateEnd
	if (mn_UpdatePos < 0 || !pUpdateLock)
	{
		_ASSERTE(mn_UpdatePos>=0);
		_ASSERTE(pUpdateLock!=NULL);
		return false;
	}

	bool bChanged = false;
	CTabID* pTab = NULL;

	mb_FarUpdateMode = true;

	// Теперь - поехали обновлять. Правила такие:
	// 1. Новая вкладка в ФАР может появиться ТОЛЬКО в конце
	// 2. Закрыта может быть любая вкладка
	// 3. панели НЕ должны перебиваться на редактор при запуске "far /e"
	// 4. и вообще, первый таб мог быть добавлен изначально как редактор!

	int i = mn_UpdatePos;
	while (i < mn_Used)
	{
		if (!mpp_Stack[i])
		{
			i++;
			continue;
		}

		if (mpp_Stack[i]->IsEqual(apVCon, asName, anType, anPID, anViewEditID, fwt_TypeMask))
		{
			// OK, таб совпадает
			pTab = mpp_Stack[i];

			// Refresh status and title
			if (pTab->Set(asName, anType, anPID, anFarWindowID, anViewEditID, fwt_UpdateFlags))
				bChanged = true;

			_ASSERTE(pTab->Info.Status == tisValid);

			if (anType & fwt_CurrentFarWnd)
				rActiveTab.Init(pTab);

			mn_UpdatePos = i+1;

			// Закончили
			break;
		}

		// Tab was closed or gone to background
		bChanged = true;
		mpp_Stack[i]->Info.Status = tisPassive;
		i++;
	}

	// Если таб новый
	if (pTab == NULL)
	{
		// это новая вкладка, добавляемая в конец
		pTab = new CTabID(apVCon, asName, anType, anPID, anFarWindowID, anViewEditID);
		_ASSERTE(pTab->RefCount()==1);
		_ASSERTE(mn_Used == i);

		i = AppendInt(pTab, FALSE/*abMoveFirst*/, pUpdateLock);
		_ASSERTE(pTab->RefCount()==2);
		if (anType & fwt_CurrentFarWnd)
			rActiveTab.Init(pTab);
		pTab->Release();

		bChanged = true;
		mn_UpdatePos = i+1;
	}

	_ASSERTE(mn_UpdatePos>=1 && mn_UpdatePos<=mn_Used);

	return bChanged;
}
Ejemplo n.º 4
0
void Hash::AppendStringVec(const vector<string>& string_vec) {
    AppendInt(string_vec.size());
    for (size_t i = 0; i < string_vec.size(); i++) {
        AppendString(string_vec[i]);
    }
}