diff options
| author | Fabien Costantini <fabien@onepost.net> | 2009-01-29 21:14:42 +0000 |
|---|---|---|
| committer | Fabien Costantini <fabien@onepost.net> | 2009-01-29 21:14:42 +0000 |
| commit | 1a297e19470f46c74898e5ad98a31d10f3ce4243 (patch) | |
| tree | 34c9208e5a97d7256c4b0273beb9ee5be097eecc /src | |
| parent | d474e13b0336794b122061f0ad16326b746604b0 (diff) | |
STR#2127:
- Applied third version of greg patch adding new external link functionality.
- Corrected it so that it can compile under linux (minor include problem)
- Corrected old documentation link to new one (toc.hmmtl is now index.html)
Tested succesfully on linux and mac os x 10.5
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6648 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_Help_View.cxx | 100 |
1 files changed, 63 insertions, 37 deletions
diff --git a/src/Fl_Help_View.cxx b/src/Fl_Help_View.cxx index 6dcda0083..9b33e5ffe 100644 --- a/src/Fl_Help_View.cxx +++ b/src/Fl_Help_View.cxx @@ -62,6 +62,7 @@ #include <stdio.h> #include <stdlib.h> #include <FL/fl_utf8.h> +#include <FL/filename.H> // fl_open_uri() #include "flstring.h" #include <ctype.h> #include <errno.h> @@ -3044,6 +3045,50 @@ Fl_Help_View::load(const char *f)// I - Filename to load (may also have target) char newname[1024]; // New filename buffer + if (strncmp(f, "ftp:", 4) == 0 || + strncmp(f, "http:", 5) == 0 || + strncmp(f, "https:", 6) == 0 || + strncmp(f, "ipp:", 4) == 0 || + strncmp(f, "mailto:", 7) == 0 || + strncmp(f, "news:", 5) == 0) { + char urimsg[256]; + if ( fl_open_uri(f, urimsg, sizeof(urimsg)) == 0 ) { + clear_selection(); + + strlcpy(newname, f, sizeof(newname)); + if ((target = strrchr(newname, '#')) != NULL) + *target++ = '\0'; + + if (link_) + localname = (*link_)(this, newname); + else + localname = filename_; + + if (!localname) + return (0); + + strlcpy(filename_, newname, sizeof(filename_)); + strlcpy(directory_, newname, sizeof(directory_)); + + // Note: We do not support Windows backslashes, since they are illegal + // in URLs... + if ((slash = strrchr(directory_, '/')) == NULL) + directory_[0] = '\0'; + else if (slash > directory_ && slash[-1] != '/') + *slash = '\0'; + + snprintf(error, sizeof(error), + "<HTML><HEAD><TITLE>Error</TITLE></HEAD>" + "<BODY><H1>Error</H1>" + "<P>Unable to follow the link \"%s\" - " + "%s.</P></BODY>", + f, urimsg); + value(error); + //return(-1); + } + return(0); + } + clear_selection(); strlcpy(newname, f, sizeof(newname)); @@ -3074,47 +3119,28 @@ Fl_Help_View::load(const char *f)// I - Filename to load (may also have target) value_ = NULL; } - if (strncmp(localname, "ftp:", 4) == 0 || - strncmp(localname, "http:", 5) == 0 || - strncmp(localname, "https:", 6) == 0 || - strncmp(localname, "ipp:", 4) == 0 || - strncmp(localname, "mailto:", 7) == 0 || - strncmp(localname, "news:", 5) == 0) + if (strncmp(localname, "file:", 5) == 0) + localname += 5; // Adjust for local filename... + + if ((fp = fl_fopen(localname, "rb")) != NULL) { - // Remote link wasn't resolved... - snprintf(error, sizeof(error), - "<HTML><HEAD><TITLE>Error</TITLE></HEAD>" - "<BODY><H1>Error</H1>" - "<P>Unable to follow the link \"%s\" - " - "no handler exists for this URI scheme.</P></BODY>", - localname); - value_ = strdup(error); + fseek(fp, 0, SEEK_END); + len = ftell(fp); + rewind(fp); + + value_ = (const char *)calloc(len + 1, 1); + fread((void *)value_, 1, len, fp); + fclose(fp); } else { - if (strncmp(localname, "file:", 5) == 0) - localname += 5; // Adjust for local filename... - - if ((fp = fl_fopen(localname, "rb")) != NULL) - { - fseek(fp, 0, SEEK_END); - len = ftell(fp); - rewind(fp); - - value_ = (const char *)calloc(len + 1, 1); - fread((void *)value_, 1, len, fp); - fclose(fp); - } - else - { - snprintf(error, sizeof(error), - "<HTML><HEAD><TITLE>Error</TITLE></HEAD>" - "<BODY><H1>Error</H1>" - "<P>Unable to follow the link \"%s\" - " - "%s.</P></BODY>", - localname, strerror(errno)); - value_ = strdup(error); - } + snprintf(error, sizeof(error), + "<HTML><HEAD><TITLE>Error</TITLE></HEAD>" + "<BODY><H1>Error</H1>" + "<P>Unable to follow the link \"%s\" - " + "%s.</P></BODY>", + localname, strerror(errno)); + value_ = strdup(error); } format(); |
