tng 2002/09/23 11:42:19 Modified: c/src/xercesc/util XMLString.cpp XMLString.hpp Log: DOM L3: Support baseURI. Add utility fixURI to transform an absolute path filename to standard URI form. Revision Changes Path 1.8 +60 -1 xml-xerces/c/src/xercesc/util/XMLString.cpp Index: XMLString.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLString.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- XMLString.cpp 27 Aug 2002 19:24:43 -0000 1.7 +++ XMLString.cpp 23 Sep 2002 18:42:18 -0000 1.8 @@ -1736,6 +1736,65 @@ return; } + +/** + * Fixes a platform dependent absolute path filename to standard URI form. + * 1. Windows: fix 'x:' to 'file:///x:' and convert any backslash to forward slash + * 2. UNIX: fix '/blah/blahblah' to 'file:///blah/blahblah' + */ +void XMLString::fixURI(const XMLCh* const str, XMLBuffer& toFill) +{ + toFill.reset(); + + if (!str || !*str) + return; + + int colonIdx = XMLString::indexOf(str, chColon); + int slashIdx = XMLString::indexOf(str, chForwardSlash); + + // If starts with a '/' we assume + // this is an absolute (UNIX) file path and prefix it with file:// + if (colonIdx == -1 && XMLString::indexOf(str, chForwardSlash) == 0) { + const XMLCh FILE_SCHEME[] = { + chLatin_f, chLatin_i, chLatin_l, chLatin_e, chColon, + chForwardSlash, chForwardSlash, chNull}; + + toFill.set(FILE_SCHEME); + + // copy the string + const XMLCh* inPtr = str; + while (*inPtr) + toFill.append(*inPtr++); + + toFill.append(chNull); + } + else if (colonIdx == 1 && XMLString::isAlpha(*str)) { + // If starts with a driver letter 'x:' we assume + // this is an absolute (Windows) file path and prefix it with file:/// + const XMLCh FILE_SCHEME[] = { + chLatin_f, chLatin_i, chLatin_l, chLatin_e, chColon, + chForwardSlash, chForwardSlash, chForwardSlash, chNull}; + + toFill.set(FILE_SCHEME); + + // copy the string and fix any backward slash + const XMLCh* inPtr = str; + while (*inPtr) { + if (*inPtr == chYenSign || + *inPtr == chWonSign || + *inPtr == chBackSlash) + toFill.append(chForwardSlash); + else + toFill.append(*inPtr); + inPtr++; + } + + // cap it with null + toFill.append(chNull); + } +} + + // --------------------------------------------------------------------------- // XMLString: Private static methods // --------------------------------------------------------------------------- 1.4 +13 -0 xml-xerces/c/src/xercesc/util/XMLString.hpp Index: XMLString.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLString.hpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- XMLString.hpp 27 Aug 2002 19:24:43 -0000 1.3 +++ XMLString.hpp 23 Sep 2002 18:42:18 -0000 1.4 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2002/09/23 18:42:18 tng + * DOM L3: Support baseURI. Add utility fixURI to transform an absolute path filename to standard URI form. + * * Revision 1.3 2002/08/27 19:24:43 peiyongz * Bug#12087: patch from Thomas Ford ([EMAIL PROTECTED]) * @@ -194,6 +197,7 @@ #include <xercesc/util/XercesDefs.hpp> #include <xercesc/util/RefVectorOf.hpp> +#include <xercesc/framework/XMLBuffer.hpp> class XMLLCPTranscoder; @@ -1305,6 +1309,15 @@ * On return , this buffer also holds the converted string */ static void collapseWS(XMLCh* const toConvert); + + /** + * Fixes a platform dependent absolute path filename to standard URI form. + * 1. Windows: fix 'x:' to 'file:///x:' and convert any backslash to forward slash + * 2. UNIX: fix '/blah/blahblah' to 'file:///blah/blahblah' + * @param str The string that has the absolute path filename + * @param toFill The XMLBuffer that will be filled with the URI + */ + static void fixURI(const XMLCh* const str, XMLBuffer& toFill); //@}
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]