View script | License | Download documentation as: HTML or editable | Download script | History |
[0.07] 18.896k
Documentation for: view-html.rUsage document for %view-html.r1. Introduction to %view-html.rview-html.r is an introduction to the ease of gui creation with REBOL/View, plus the ease and simplicity of accessing internet URLs.
2. view-html At a GlanceNot setup is required, just do it. >> do %view-html.r The above image was created running REBOL/View 2.7.5.4.2 GNU/Linux 4.0, KDE Desktop. and has been cropped for space. 3. Using %view-html.rRequires REBOL/View 3.1. Running %view-html.rFrom the library with: >> do http://www.rebol.org/cgi-bin/cgiwrap/rebol/download-a-script.r?script-name=view-html.ror locally with: >> do %view-html.r 4. See alsoThere is another rebol.org script, very similar to this one, 5. What you can learnThis script is an introduction to the view and layout functions. 5.1. URLshttp://www.rebol.com is actually a value with a special datatype. In REBOL this is a url!. Very powerful. No quotes needed. REBOL just knows. 5.2. Web Server defaultsWeb Servers have default files that are returned. http://www.rebol.com is actually returned as http://www.rebol.com/index.html. This is not always the case. Some sites return default.htm, or index.php, or index.cgi. No need to worry, the REBOL read function and the web server will work that all out for you. If REBOL Technologies ever changes its web server setup, a different file may be returned and this script will still work. 5.3. Changing what page is displayedChanging the website or page that is printed is as easy as changing the text after the http:// part following the read command. 5.4. Getting REBOLBoth REBOL/Core and REBOL/View are available 5.5. Super simple and powerful gui creationREBOL/View gui building is easy. view layout [...gui specification...] How cool is REBOL/View? 5.6. Powerful builtin Internet AccessREBOL has fantastically simple builtin procedures for accessing the internet. 5.7. Compare the complexity to the simplicityPlease compare the read http://www.rebol.com 25 character sequence to this D language program (which doesn't have a window by the way, just text output to a console). 5.7.1. D Language sample for printing HTML as text/* HTMLget written by Christopher E. Miller This code is public domain. You may use it for any purpose. This code has no warranties and is provided 'as-is'. */ //debug = HTMLGET; import std.string, std.conv, std.stream; import std.socket, std.socketstream; int main(char[][] args) { if(args.length < 2) { printf("Usage:\n htmlget <web-page>\n"); return 0; } char[] url = args[1]; int i; i = std.string.find(url, "://"); if(i != -1) { if(icmp(url[0 .. i], "http")) throw new Exception("http:// expected"); } i = std.string.find(url, '#'); if(i != -1) // Remove anchor ref. url = url[0 .. i]; i = std.string.find(url, '/'); char[] domain; if(i == -1) { domain = url; url = "/"; } else { domain = url[0 .. i]; url = url[i .. url.length]; } uint port; i = std.string.find(domain, ':'); if(i == -1) { port = 80; // Default HTTP port. } else { port = std.conv.toUshort(domain[i + 1 .. domain.length]); domain = domain[0 .. i]; } debug(HTMLGET) printf("Connecting to " ~ domain ~ " on port " ~ std.string.toString(port) ~ "...\n"); auto Socket sock = new TcpSocket(new InternetAddress(domain, port)); Stream ss = new SocketStream(sock); debug(HTMLGET) printf("Connected!\nRequesting URL \" ~ url ~ "\"...\n"); if(port != 80) domain = domain ~ ":" ~ std.string.toString(port); ss.writeString("GET " ~ url ~ " HTTP/1.1\r\n" "Host: " ~ domain ~ "\r\n" "\r\n"); // Skip HTTP header. char[] line; for(;;) { line = ss.readLine(); if(!line.length) break; const char[] CONTENT_TYPE_NAME = "Content-Type: "; if(line.length > CONTENT_TYPE_NAME.length && !icmp(CONTENT_TYPE_NAME, line[0 .. CONTENT_TYPE_NAME.length])) { char[] type; type = line[CONTENT_TYPE_NAME.length .. line.length]; if(type.length <= 5 || icmp("text/", type[0 .. 5])) throw new Exception("URL is not text"); } } print_lines: while(!ss.eof()) { line = ss.readLine(); printf("%.*s\n", line); //if(std.string.ifind(line, "</html>") != -1) // break; size_t iw; for(iw = 0; iw != line.length; iw++) { if(!icmp("</html>", line[iw .. line.length])) break print_lines; } } return 0; }What would you rather type? The above or something like print read join http:// ask "Web site? " What will be easier to remember 6 months from now? 6. What can breakThis particular example does not have scroll bars. Not hard to add, but in this case, there is more text on the rebol.com home page than will fit in the window. You will need access to the internet and rebol.com will have to be up and running for this script to work. Don't worry, rebol.com is always up and running. REBOL/Core will not have the view or layout functions defined. You will need to start up REBOL/View. 7. Credits
|