예제 #1
0
void PSFTags::AddTag(char *tag_line)
{
 char *eq;

 // Transform 0x01-0x1F -> 0x20
 for(unsigned int i = 0; i < strlen(tag_line); i++)
  if((unsigned char)tag_line[i] < 0x20)
   tag_line[i] = 0x20;

 eq = strchr(tag_line, '=');

 if(eq)
 {
  *eq = 0;

  MDFN_trim(tag_line);
  MDFN_trim(eq + 1);

  for(unsigned int i = 0; i < strlen(tag_line); i++)
   tag_line[i] = tolower(tag_line[i]);

  if(TagExists(tag_line))
   tags[tag_line] = tags[std::string(tag_line)] + std::string(1, '\n') + std::string(eq + 1);
  else
   tags[tag_line] = std::string(eq + 1);
 }
}
void STDMETHODCALLTYPE CScriveToolBar::InjectTag(IDispatch *pDoc, IHTMLDOMNode *parent, CComBSTR tagName, CComBSTR attrName, CComVariant attrValue)
{
	HRESULT hr;

	CComQIPtr<IHTMLDocument2> spHTMLDoc = pDoc;
	if (pDoc == NULL) return;

	//EKI FIX
	if (TagExists(parent, tagName, attrName, attrValue))
	{
		return;
	}

	CComPtr<IHTMLElement> tag;
	hr = spHTMLDoc->createElement(tagName.m_str, &tag);
	if (SUCCEEDED(hr))
	{
		hr = tag->setAttribute(attrName.m_str, attrValue);
		
		if (SUCCEEDED(hr))
		{
			CComPtr<IHTMLDOMNode> newNode;
			CComQIPtr<IHTMLDOMNode> tagElement = tag;
			//ERNES: inserting as first HEAD element
			CComPtr<IHTMLDOMNode> firstNode;
			hr = parent->get_firstChild(&firstNode);
			if (SUCCEEDED(hr))
			{	
				VARIANT referenceElementVariant;
				referenceElementVariant.vt = VT_DISPATCH;
				referenceElementVariant.pdispVal = (IDispatch *)firstNode;
				hr = parent->insertBefore(tagElement, referenceElementVariant ,&newNode);

			}
			else
			{
				VARIANT referenceElementVariant;
				referenceElementVariant.vt = VT_NULL;
				hr = parent->insertBefore(tagElement, referenceElementVariant ,&newNode);
			}
		}
	}

}