Anything GenericXMLParser::ParseDtd() { StartTrace(GenericXMLParser.ParseDtd); // we got already <! following a D String doctype("!"); doctype.Append(ParseName()); Anything result; Anything externalid; if (doctype != "!DOCTYPE") { Error("invalid <! tag"); result[doctype] = SkipToClosingAngleBracket(); // best effort return result; } SkipWhitespace(); String rootnodename = ParseName(); result[doctype] = rootnodename; SkipWhitespace(); int c = Peek(); if ('S' == c || 'P' == c) { externalid = ParseExternalId(); } result.Append(externalid); SkipWhitespace(); if ('[' == Peek()) { result.Append(ParseDtdElements()); } SkipWhitespace(); if ('>' != Peek()) { Error("DTD syntax error"); result.Append(SkipToClosingAngleBracket()); } else { Get(); // read the end > } return result; }
void error(char *title, char *fmt, ...) { va_list arg; char buf[1024], *out; va_start(arg, fmt); out = vseprint(buf, buf+sizeof(buf), fmt, arg); va_end(arg); *out = 0; hprint(hout, "%s 404 %s\r\n", hversion, title); hprint(hout, "Date: %D\r\n", time(nil)); hprint(hout, "Server: Plan9\r\n"); hprint(hout, "Content-type: text/html\r\n"); hprint(hout, "\r\n"); doctype(); hprint(hout, "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"); hprint(hout, "<head><title>%s</title></head>\n", title); hprint(hout, "<body>\n"); hprint(hout, "<h1>%s</h1>\n", title); hprint(hout, "%s\n", buf); hprint(hout, "</body>\n"); hprint(hout, "</html>\n"); hflush(hout); writelog(connect, "Reply: 404\nReason: %s\n", title); exits(nil); }
int main() { char *out = doctype() html( head( meta(attr("charset", "UTF-8")) title("Hello World")) body( h1("Lorem Ipsum") p("Hello " span(attr("class", "important"), "world")) blockquote("This is " em("madness")))); puts(out); return 0; }
void sax_parser<_Handler,_Config>::special_tag() { assert(cur_char() == '!'); // This can be either <![CDATA, <!--, or <!DOCTYPE. size_t len = remains(); if (len < 2) throw sax::malformed_xml_error("special tag too short."); switch (next_char()) { case '-': { // Possibly comment. if (next_char() != '-') throw sax::malformed_xml_error("comment expected."); len -= 2; if (len < 3) throw sax::malformed_xml_error("malformed comment."); next(); comment(); } break; case '[': { // Possibly a CDATA. expects_next("CDATA[", 6); if (has_char()) cdata(); } break; case 'D': { // check if this is a DOCTYPE. expects_next("OCTYPE", 6); blank(); if (has_char()) doctype(); } break; default: throw sax::malformed_xml_error("failed to parse special tag."); } }
EncodedJSValue JSC_HOST_CALL jsDOMImplementationPrototypeFunctionCreateDocument(ExecState* exec) { JSValue thisValue = exec->hostThisValue(); if (!thisValue.inherits(&JSDOMImplementation::s_info)) return throwVMTypeError(exec); JSDOMImplementation* castedThis = static_cast<JSDOMImplementation*>(asObject(thisValue)); ASSERT_GC_OBJECT_INHERITS(castedThis, &JSDOMImplementation::s_info); DOMImplementation* imp = static_cast<DOMImplementation*>(castedThis->impl()); ExceptionCode ec = 0; const String& namespaceURI(valueToStringWithNullCheck(exec, exec->argument(0))); if (exec->hadException()) return JSValue::encode(jsUndefined()); const String& qualifiedName(valueToStringWithNullCheck(exec, exec->argument(1))); if (exec->hadException()) return JSValue::encode(jsUndefined()); DocumentType* doctype(toDocumentType(exec->argument(2))); if (exec->hadException()) return JSValue::encode(jsUndefined()); JSC::JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(imp->createDocument(namespaceURI, qualifiedName, doctype, ec))); setDOMException(exec, ec); return JSValue::encode(result); }
static void dols(char *dir) { Dir *d; char *f, *p,*nm; long i, n; int fd; cleanname(dir); // expands "" to "."; ``dir+1'' access below depends on that if (!allowed(dir)) { error("Permission denied", "<p>Cannot list directory %s: Access prohibited</p>", dir); return; } fd = open(dir, OREAD); if (fd < 0) { error("Cannot read directory", "<p>Cannot read directory %s: %r</p>", dir); return; } if (vermaj) { hokheaders(connect); hprint(hout, "Content-type: text/html\r\n"); hprint(hout, "\r\n"); } doctype(); hprint(hout, "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"); hprint(hout, "<head><title>Index of %s</title></head>\n", dir); hprint(hout, "<body>\n"); hprint(hout, "<h1>Index of "); nm = dir; while((p = strchr(nm, '/')) != nil){ *p = '\0'; f = (*dir == '\0') ? "/" : dir; if (!(*dir == '\0' && *(dir+1) == '\0') && allowed(f)) hprint(hout, "<a href=\"/magic/webls?dir=%H\">%s/</a>", f, nm); else hprint(hout, "%s/", nm); *p = '/'; nm = p+1; } hprint(hout, "%s</h1>\n", nm); n = dirreadall(fd, &d); close(fd); maxwidths(d, n); qsort(d, n, sizeof(Dir), (int (*)(void *, void *))compar); hprint(hout, "<pre>\n"); for (i = 0; i < n; i++) { f = smprint("%s/%s", dir, d[i].name); cleanname(f); if (d[i].mode & DMDIR) { p = smprint("/magic/webls?dir=%H", f); free(f); f = p; } hprint(hout, "%M %C %*ud %-*s %-*s %*lld %s <a href=\"%s\">%s</a>\n", d[i].mode, d[i].type, devwidth, d[i].dev, uidwidth, d[i].uid, gidwidth, d[i].gid, lenwidth, d[i].length, asciitime(d[i].mtime), f, d[i].name); free(f); } f = smprint("%s/..", dir); cleanname(f); if (strcmp(f, dir) != 0 && allowed(f)) hprint(hout, "\nGo to <a href=\"/magic/webls?dir=%H\">parent</a> directory\n", f); else hprint(hout, "\nEnd of directory listing\n"); free(f); hprint(hout, "</pre>\n</body>\n</html>\n"); hflush(hout); free(d); }
void process() { doctype(); html(); }