Example #1
0
HRESULT SetFont(CMainFrame* pFrame, IPropertyStore* pStore)
{
    HRESULT hr = S_OK;

    // Get the HTML editor.
    CHTMLEdView *pView = (CHTMLEdView*)pFrame->GetActiveView();
    if (pView == NULL)
    {
        return E_FAIL;
    }
    
    // Set Font Face.
    PROPVARIANT face;
    hr = pStore->GetValue(UI_PKEY_FontProperties_Family, &face);
    if (FAILED(hr))
    {
        return hr;
    }

    CString strFontFace(face.pwszVal);
    hr = pView->SetFontFace(strFontFace.GetBuffer());
    if (FAILED(hr))
    {
        return hr;
    }

    PropVariantClear(&face);
        
    // Set Font Size.
    PROPVARIANT size;
    hr = pStore->GetValue(UI_PKEY_FontProperties_Size, &size);
    if (FAILED(hr))
    {
        return hr;
    }

    USHORT uSize;
    VarUI2FromDec(&size.decVal, &uSize);
    hr = pView->SetFontSize(uSize - 7);
    if (FAILED(hr))
    {
        return hr;
    }

    PropVariantClear(&size);
    return hr;
}
Example #2
0
void HTMLExporter::InternalExport(int start, int end)
{
	CString strFontFace(_T("Courier New"));
	int  fontSize = 10;
	bool useTabs = false;

	int tabSize = SendEditor(SCI_GETTABWIDTH, 0, 0);
	if (tabSize == 0)
		tabSize = 4;
	if (!strFontFace.GetLength())
		strFontFace = HTML_FONTFACE;

	// Define a class name lookup table.
	CStringA cssClassNames[STYLE_MAX + 1];
	
	// Write the HTML header...
	//@todo: add a way to select the DOCTYPE
	m_out->puts(HTML_XHTML11STRICT);
	m_out->puts(HTML_STARTXHTML);
	m_out->puts(HTML_HEADOPEN);
	m_out->puts(HTML_TITLEOPEN);
	//@todo: add title
	m_out->puts(HTML_TITLECLOSE);
	m_out->puts(HTML_CSSOPEN);

	CStringA strTemp;

	// Dump the styles into CSS classes
	//@todo: add support for CSS files

	StyleDetails* pDefStyle = GetStyle(STYLE_DEFAULT);
	if(pDefStyle)
	{
		// Apply Default style to the pre block (class name: pn2code)
		strTemp.Format("pre.%scode\n", m_pSchemeName);
		cssClassNames[STYLE_DEFAULT] = strTemp;
		m_out->puts(cssClassNames[STYLE_DEFAULT]);

		m_out->puts(HTML_CSSCLASSOPEN HTML_CSSBKGNDCOLOR);
		strTemp.Format("#%02X%02X%02X",
			GetRValue(pDefStyle->BackColor),
			GetGValue(pDefStyle->BackColor),
			GetBValue(pDefStyle->BackColor));
		m_out->puts(strTemp);
		m_out->puts(HTML_CSSPROPERTYEND);

		m_out->puts(HTML_CSSFORECOLOR);
		strTemp.Format("#%02X%02X%02X;",
			GetRValue(pDefStyle->ForeColor),
			GetGValue(pDefStyle->ForeColor),
			GetBValue(pDefStyle->ForeColor));
		m_out->puts(strTemp);
		m_out->puts(HTML_CSSPROPERTYEND);

		// SF Bug #107412 points to http://www.w3.org/TR/REC-CSS2/fonts.html#font-shorthand
		// defining the (simplified) use of font shorthand as: 
		//    style weight size font-family
		
		m_out->puts(HTML_CSSFONTSHORT);
		
		if(pDefStyle->Italic)
			m_out->puts("italic ");

		if(pDefStyle->Bold)
			m_out->puts("bold ");

		strTemp.Format("%dpt ", pDefStyle->FontSize ? pDefStyle->FontSize : fontSize);
		m_out->puts(strTemp);

		m_out->putc('"');
		if(pDefStyle->FontName.length())
        {
            strTemp = pDefStyle->FontName.c_str();
			m_out->puts(strTemp);
        }
		else
			m_out->puts(HTML_FONTFACE);
		m_out->putc('"');

		m_out->puts(HTML_CSSPROPERTYEND);

		if(pDefStyle->Underline)
			m_out->puts(HTML_CSSUNDERLINE);

		m_out->puts(HTML_CSSCLASSCLOSE);
	}

	for(int istyle = 0; istyle < STYLE_MAX; istyle++)
	{
		StyleDetails* pStyle = GetStyle(istyle);
		if(pStyle)
		{
			// Use the styles classname as CSS class name (if any), or create a
			// generic one
			if(pStyle->classname.length())
				strTemp = pStyle->classname.c_str();
			else
				strTemp.Format("%s%02d", m_pSchemeName, istyle);
			cssClassNames[istyle] = strTemp;
			m_out->putc('.');
			m_out->puts(cssClassNames[istyle]);
			m_out->puts(HTML_CSSCLASSOPEN);

			// Add properties if they differ from the default style only

			if(!pDefStyle || pStyle->BackColor != pDefStyle->BackColor)
			{
				m_out->puts(HTML_CSSBKGNDCOLOR);
				strTemp.Format("#%02X%02X%02X",
					GetRValue(pStyle->BackColor),
					GetGValue(pStyle->BackColor),
					GetBValue(pStyle->BackColor));
				m_out->puts(strTemp);
				m_out->puts(HTML_CSSPROPERTYEND);
			}

			if(!pDefStyle || pStyle->ForeColor != pDefStyle->ForeColor)
			{
				m_out->puts(HTML_CSSFORECOLOR);
				strTemp.Format("#%02X%02X%02X",
					GetRValue(pStyle->ForeColor),
					GetGValue(pStyle->ForeColor),
					GetBValue(pStyle->ForeColor));
				m_out->puts(strTemp);
				m_out->puts(HTML_CSSPROPERTYEND);
			}

			//CString strFont;
			if(pStyle->FontName.length() &&
				(!pDefStyle || pStyle->FontName != pDefStyle->FontName))
			{
				m_out->puts(HTML_CSSFONT);
                strTemp = pStyle->FontName.c_str();
				m_out->puts(strTemp);
				m_out->puts(HTML_CSSENDFONT);
			}

			if(pStyle->FontSize > 0 &&
				(!pDefStyle || pDefStyle->FontSize != pStyle->FontSize))
			{
				m_out->puts(HTML_CSSFONTSIZE);
				strTemp.Format("%dpt", pStyle->FontSize);
				m_out->puts(strTemp);
				m_out->puts(HTML_CSSPROPERTYEND);
			}

			if(pStyle->Bold &&
				(!pDefStyle || pDefStyle->Bold != pStyle->Bold))
			{
				m_out->puts(HTML_CSSFONTBOLD);
			}

			if(pStyle->Italic &&
				(!pDefStyle || pDefStyle->Italic != pStyle->Italic))
			{
				m_out->puts(HTML_CSSFONTITALIC);
			}

			if(pStyle->Underline &&
				(!pDefStyle || pDefStyle->Underline != pStyle->Underline))
				m_out->puts(HTML_CSSUNDERLINE);

			m_out->puts(HTML_CSSCLASSCLOSE);
		}
	}

	m_out->puts(HTML_CSSCLOSE);
	m_out->puts(HTML_HEADCLOSE);
	m_out->puts(HTML_BODYOPEN);

	strTemp.Format(HTML_PREOPEN, m_pSchemeName);
	m_out->puts((LPCSTR)strTemp);

	int styleCurrent = -1;
	bool closePrevious = false;
	for(int i = start; i < end; i++)
	{
		char ch = CharAt(i);
		int style = StyleAt(i);
		if(style > STYLE_DEFAULT)
			style = 0;
		if(style != styleCurrent && style != STYLE_DEFAULT)
		{
			//@todo: check for empty/white space tags
			if(closePrevious == true)
				m_out->puts("</span>");

			if(cssClassNames[style].GetLength() > 0)
			{
				strTemp.Format("<span class='%s'>", cssClassNames[style]);
				m_out->puts(strTemp);
				closePrevious = true;
/*				// inline styles; not recommend
				m_out->puts("<span");
				StyleDetails* pNext = GetStyle(style);
				if(pNext == NULL)
					pNext = pDefStyle;

				GetStyleChange(pCurrent, pNext, NULL);
				pCurrent = pNext;
				m_out->puts(">");*/
			}
			else
				closePrevious = false;

			styleCurrent = style;
		}

		// Deal with special characters:
		if(ch == '&')
			m_out->puts("&amp;");
		else if(ch == '"')
			m_out->puts("&quot;");
		else if(ch == '<')
			m_out->puts("&lt;");
		else if(ch == '>')
			m_out->puts("&gt;");
		else if(ch == '\t')
		{
			if(useTabs)
				m_out->putc(ch);
			else
				for(int itab = 0; itab < tabSize; itab++)
					m_out->putc(' ');
		}
		else if(ch == '\r')
			;
		else if(ch == '\n')
			m_out->putc(ch);
		else
			m_out->putc(ch);
	}

	if(closePrevious == true)
		m_out->puts("</span>");

	m_out->puts(HTML_PRECLOSE HTML_BODYCLOSE HTML_END);
}