diff options
Diffstat (limited to 'kioslave/man')
-rw-r--r-- | kioslave/man/kio_man.cpp | 35 | ||||
-rw-r--r-- | kioslave/man/kio_man.h | 1 | ||||
-rw-r--r-- | kioslave/man/man2html.cpp | 25 |
3 files changed, 32 insertions, 29 deletions
diff --git a/kioslave/man/kio_man.cpp b/kioslave/man/kio_man.cpp index 0511a165d..068287b7e 100644 --- a/kioslave/man/kio_man.cpp +++ b/kioslave/man/kio_man.cpp @@ -517,6 +517,11 @@ void MANProtocol::slotGetStdOutput(KProcess* /* p */, char *s, int len) myStdStream += QString::fromLocal8Bit(s, len); } +void MANProtocol::slotGetStdOutputUtf8(KProcess* /* p */, char *s, int len) +{ + myStdStream += QString::fromUtf8(s, len); +} + char *MANProtocol::readManPage(const char *_filename) { QCString filename = _filename; @@ -564,24 +569,20 @@ char *MANProtocol::readManPage(const char *_filename) } lastdir = filename.left(filename.findRev('/')); - QIODevice *fd= KFilterDev::deviceForFile(filename); - - if ( !fd || !fd->open(IO_ReadOnly)) - { - delete fd; - return 0; - } - QByteArray array(fd->readAll()); - kdDebug(7107) << "read " << array.size() << endl; - fd->close(); - delete fd; - - if (array.isEmpty()) - return 0; - - const int len = array.size(); + myStdStream = QString::null; + KProcess proc; + /* TODO: detect availability of 'man --recode' so that this can go + * upstream */ + proc << "man" << "--recode" << "UTF-8" << filename; + + QApplication::connect(&proc, SIGNAL(receivedStdout (KProcess *, char *, int)), + this, SLOT(slotGetStdOutputUtf8(KProcess *, char *, int))); + proc.start(KProcess::Block, KProcess::All); + + const QCString cstr=myStdStream.utf8(); + const int len = cstr.size()-1; buf = new char[len + 4]; - qmemmove(buf + 1, array.data(), len); + qmemmove(buf + 1, cstr.data(), len); buf[0]=buf[len]='\n'; // Start and end with a end of line buf[len+1]=buf[len+2]='\0'; // Two NUL characters at end } diff --git a/kioslave/man/kio_man.h b/kioslave/man/kio_man.h index f571082db..d1d924ce0 100644 --- a/kioslave/man/kio_man.h +++ b/kioslave/man/kio_man.h @@ -61,6 +61,7 @@ public: private slots: void slotGetStdOutput(KProcess*, char*, int); + void slotGetStdOutputUtf8(KProcess*, char*, int); private: void checkManPaths(); diff --git a/kioslave/man/man2html.cpp b/kioslave/man/man2html.cpp index 725fba36a..b502e8edc 100644 --- a/kioslave/man/man2html.cpp +++ b/kioslave/man/man2html.cpp @@ -705,17 +705,18 @@ static void add_links(char *c) } int i,j,nr; - char *f, *g,*h; + char *f, *h; + char *g; const int numtests=6; // Nmber of tests char *idtest[numtests]; // url, mailto, www, ftp, manpage, C header file bool ok; /* search for (section) */ nr=0; idtest[0]=strstr(c+1,"://"); - idtest[1]=strchr(c+1,'@'); + idtest[1]=(char*)strchr(c+1,'@'); idtest[2]=strstr(c,"www."); idtest[3]=strstr(c,"ftp."); - idtest[4]=strchr(c+1,'('); + idtest[4]=(char*)strchr(c+1,'('); idtest[5]=strstr(c+1,".h>"); for (i=0; i<numtests; ++i) nr += (idtest[i]!=NULL); while (nr) { @@ -770,7 +771,7 @@ static void add_links(char *c) case 4: /* manpage */ f=idtest[j]; /* check section */ - g=strchr(f,')'); + g=(char*)strchr(f,')'); // The character before f must alphanumeric, the end of a HTML tag or the end of a if (g!=NULL && f>c && (g-f)<12 && (isalnum(f[-1]) || f[-1]=='>' || ( f[-1] == ';' ) ) && isdigit(f[1]) && f[1]!='0' && ((g-f)<=2 || isalpha(f[2]))) @@ -936,10 +937,10 @@ static void add_links(char *c) } nr=0; if (idtest[0] && idtest[0]<=c) idtest[0]=strstr(c+1,"://"); - if (idtest[1] && idtest[1]<=c) idtest[1]=strchr(c+1,'@'); + if (idtest[1] && idtest[1]<=c) idtest[1]=(char*)strchr(c+1,'@'); if (idtest[2] && idtest[2]<c) idtest[2]=strstr(c,"www."); if (idtest[3] && idtest[3]<c) idtest[3]=strstr(c,"ftp."); - if (idtest[4] && idtest[4]<=c) idtest[4]=strchr(c+1,'('); + if (idtest[4] && idtest[4]<=c) idtest[4]=(char*)strchr(c+1,'('); if (idtest[5] && idtest[5]<=c) idtest[5]=strstr(c+1,".h>"); for (i=0; i<numtests; i++) nr += (idtest[i]!=NULL); } @@ -3714,8 +3715,8 @@ static char *scan_request(char *c) char* font[2] = { "B", "R" }; c+=j; if (*c=='\n') c++; - char *eol=strchr(c,'\n'); - char *semicolon=strchr(c,';'); + char *eol=(char*)strchr(c,'\n'); + char *semicolon=(char*)strchr(c,';'); if ((semicolon!=0) && (semicolon<eol)) *semicolon=' '; sl=fill_words(c, wordlist, &words, true, &c); @@ -4338,7 +4339,7 @@ static char *scan_request(char *c) case REQ_Bl: // mdoc(7) "Begin List" { char list_options[NULL_TERMINATED(MED_STR_MAX)]; - char *nl = strchr(c,'\n'); + char *nl = (char*)strchr(c,'\n'); c=c+j; if (dl_set[itemdepth]) /* These things can nest. */ @@ -4519,7 +4520,7 @@ static char *scan_request(char *c) case REQ_Bd: /* mdoc(7) */ { /* Seems like a kind of example/literal mode */ char bd_options[NULL_TERMINATED(MED_STR_MAX)]; - char *nl = strchr(c,'\n'); + char *nl = (char*)strchr(c,'\n'); c=c+j; if (nl) strlimitcpy(bd_options, c, nl - c, MED_STR_MAX); @@ -4877,8 +4878,8 @@ static char *scan_request(char *c) } else if (!mandoc_name_count) { - const char *nextbreak = strchr(c, '\n'); - const char *nextspace = strchr(c, ' '); + char *nextbreak = (char*)strchr(c, '\n'); + char *nextspace = (char*)strchr(c, ' '); if (nextspace < nextbreak) nextbreak = nextspace; |