2007-09-07 23:17:30 +02:00
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
#include <stdexcept>
|
|
|
|
#include <expat.h>
|
|
|
|
#include "xsllocator.h"
|
|
|
|
|
2007-09-08 00:25:30 +02:00
|
|
|
XslLocator::XslLocator() : d ( new XslLocatorData() )
|
2007-09-07 23:17:30 +02:00
|
|
|
{
|
2007-09-08 00:25:30 +02:00
|
|
|
d->parser = p;
|
|
|
|
XML_SetUserData ( p, d.get() );
|
|
|
|
XML_SetProcessingInstructionHandler ( p, processingInstructionHandler );
|
2007-09-07 23:17:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
XslLocator::~XslLocator()
|
2007-09-08 00:25:30 +02:00
|
|
|
{}
|
2007-09-07 23:17:30 +02:00
|
|
|
|
2007-09-08 00:25:30 +02:00
|
|
|
void XMLCALL XslLocator::processingInstructionHandler (
|
|
|
|
void *userData,
|
|
|
|
const XML_Char *target,
|
|
|
|
const XML_Char *data )
|
2007-09-07 23:17:30 +02:00
|
|
|
{
|
2007-09-08 00:25:30 +02:00
|
|
|
XslLocatorData *d;
|
|
|
|
d = ( XslLocatorData * ) userData;
|
|
|
|
|
|
|
|
if ( strcmp ( target, "xml-stylesheet" ) )
|
|
|
|
return;
|
|
|
|
|
|
|
|
char *value, *iterator;
|
|
|
|
value = strstr ( ( const char * ) data, "href=" );
|
|
|
|
if ( !value || strlen ( value ) < 7 )
|
|
|
|
return;
|
|
|
|
value += 6;
|
|
|
|
iterator = value;
|
|
|
|
for ( iterator = value; *iterator; ++iterator )
|
2007-09-07 23:17:30 +02:00
|
|
|
{
|
2007-09-08 00:25:30 +02:00
|
|
|
if ( *iterator == '"' || *iterator == '\'' )
|
|
|
|
{
|
|
|
|
*iterator = '\0';
|
|
|
|
break;
|
|
|
|
}
|
2007-09-07 23:17:30 +02:00
|
|
|
}
|
|
|
|
|
2007-09-08 00:25:30 +02:00
|
|
|
d->xslLocation = value;
|
|
|
|
XML_StopParser ( d->parser, false );
|
2007-09-07 23:17:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
std::string XslLocator::getXslLocation()
|
|
|
|
{
|
2007-09-08 00:25:30 +02:00
|
|
|
return d->xslLocation;
|
2007-09-07 23:17:30 +02:00
|
|
|
}
|