From 27fc93dd8ef46f41200cecc4dde3d6c7f678ccfa Mon Sep 17 00:00:00 2001 From: Cory Smith Date: Fri, 26 Aug 2022 22:37:38 -0500 Subject: [PATCH] Some work related to transitioning wiki. --- source/ide/ide_methods.bas | 220 ++++++++++++++++++++------------ source/ide/wiki/wiki_global.bas | 2 +- 2 files changed, 138 insertions(+), 84 deletions(-) diff --git a/source/ide/ide_methods.bas b/source/ide/ide_methods.bas index d6997b111..ecfbd73a7 100644 --- a/source/ide/ide_methods.bas +++ b/source/ide/ide_methods.bas @@ -2275,7 +2275,9 @@ FUNCTION ide2 (ignore) ' removing the "View on Wiki" - @dualbrain IF 1=0 AND (mY = idewy AND (mX >= idewx - 17 AND mX <= idewx - 4)) THEN 'view on wiki launchWiki: - url$ = StrReplace$(wikiBaseAddress$ + "/" + Back$(Help_Back_Pos), " ", "%20") + url$ = wikiBaseAddress$ + "/" + Back$(Help_Back_Pos) + url$ = StrReplace$(url$, " ", "%20"): url$ = StrReplace$(url$, "&", "%26") + url$ = StrReplace$(url$, "+", "%2B") IF INSTR(_OS$, "WIN") = 0 THEN url$ = StrReplace$(url$, "$", "\$") url$ = StrReplace$(url$, "&", "\&") @@ -2312,7 +2314,7 @@ FUNCTION ide2 (ignore) Help_sy = Help_Back(Help_Back_Pos).sy Help_cx = Help_Back(Help_Back_Pos).cx Help_cy = Help_Back(Help_Back_Pos).cy - a$ = Wiki(Back$(Help_Back_Pos)) + a$ = Wiki$(Back$(Help_Back_Pos)) WikiParse a$ GOTO newpageparsed END IF @@ -2570,7 +2572,7 @@ FUNCTION ide2 (ignore) Help_sy = Help_Back(Help_Back_Pos).sy Help_cx = Help_Back(Help_Back_Pos).cx Help_cy = Help_Back(Help_Back_Pos).cy - a$ = Wiki(Back$(Help_Back_Pos)) + a$ = Wiki$(Back$(Help_Back_Pos)) WikiParse a$ GOTO newpageparsed END IF @@ -2593,54 +2595,75 @@ FUNCTION ide2 (ignore) NEXT l2 = INSTR(l1, Help_Link$, Help_Link_Sep$) - 1 l$ = MID$(Help_Link$, l1, l2 - l1 + 1) - 'assume PAGE - l$ = RIGHT$(l$, LEN(l$) - 5) IF mCLICK OR K$ = CHR$(13) THEN mCLICK = 0 - IF Back$(Help_Back_Pos) <> l$ THEN - Help_Select = 0: Help_MSelect = 0 - 'COLOR 7, 0 - - Help_Back(Help_Back_Pos).sx = Help_sx 'update position - Help_Back(Help_Back_Pos).sy = Help_sy - Help_Back(Help_Back_Pos).cx = Help_cx - Help_Back(Help_Back_Pos).cy = Help_cy - - top = UBOUND(back$) - - IF Help_Back_Pos < top THEN - IF Back$(Help_Back_Pos + 1) = l$ THEN - GOTO usenextentry + IF LEFT$(l$, 5) = "EXTL:" THEN + IF (K$ = CHR$(13)) OR (mY = Help_cy - Help_sy + Help_wy1 AND mX = Help_cx - Help_sx + Help_wx1) THEN + l$ = RIGHT$(l$, LEN(l$) - 5) + l$ = StrReplace$(l$, " ", "%20") + l$ = StrReplace$(l$, "&", "%26") + IF INSTR(_OS$, "WIN") = 0 THEN + l$ = StrReplace$(l$, "$", "\$") + l$ = StrReplace$(l$, "&", "\&") + l$ = StrReplace$(l$, "(", "\(") + l$ = StrReplace$(l$, ")", "\)") + END IF + IF INSTR(_OS$, "WIN") THEN + SHELL _HIDE _DONTWAIT "start " + l$ + ELSEIF INSTR(_OS$, "MAC") THEN + SHELL _HIDE _DONTWAIT "open " + l$ + ELSE + SHELL _HIDE _DONTWAIT "xdg-open " + l$ END IF END IF + GOTO specialchar + ELSEIF LEFT$(l$, 5) = "PAGE:" THEN + l$ = RIGHT$(l$, LEN(l$) - 5) + IF Back$(Help_Back_Pos) <> l$ THEN + Help_Select = 0: Help_MSelect = 0 + 'COLOR 7, 0 - top = top + 1 - REDIM _PRESERVE Back(top) AS STRING - REDIM _PRESERVE Help_Back(top) AS Help_Back_Type - REDIM _PRESERVE Back_Name(top) AS STRING - 'Shuffle array upwards after current pos - FOR x = top - 1 TO Help_Back_Pos + 1 STEP -1 - Back_Name$(x + 1) = Back_Name$(x) - Back$(x + 1) = Back$(x) - Help_Back(x + 1).sx = Help_Back(x).sx - Help_Back(x + 1).sy = Help_Back(x).sy - Help_Back(x + 1).cx = Help_Back(x).cx - Help_Back(x + 1).cy = Help_Back(x).cy - NEXT - usenextentry: - Help_Back_Pos = Help_Back_Pos + 1 - Back$(Help_Back_Pos) = l$ - Back_Name$(Help_Back_Pos) = Back2BackName$(l$) - Help_Back(Help_Back_Pos).sx = 1 - Help_Back(Help_Back_Pos).sy = 1 - Help_Back(Help_Back_Pos).cx = 1 - Help_Back(Help_Back_Pos).cy = 1 - Help_sx = 1: Help_sy = 1: Help_cx = 1: Help_cy = 1 - a$ = Wiki(l$) - WikiParse a$ - GOTO newpageparsed + Help_Back(Help_Back_Pos).sx = Help_sx 'update position + Help_Back(Help_Back_Pos).sy = Help_sy + Help_Back(Help_Back_Pos).cx = Help_cx + Help_Back(Help_Back_Pos).cy = Help_cy + + top = UBOUND(back$) + + IF Help_Back_Pos < top THEN + IF Back$(Help_Back_Pos + 1) = l$ THEN + GOTO usenextentry + END IF + END IF + + top = top + 1 + REDIM _PRESERVE Back(top) AS STRING + REDIM _PRESERVE Help_Back(top) AS Help_Back_Type + REDIM _PRESERVE Back_Name(top) AS STRING + 'Shuffle array upwards after current pos + FOR x = top - 1 TO Help_Back_Pos + 1 STEP -1 + Back_Name$(x + 1) = Back_Name$(x) + Back$(x + 1) = Back$(x) + Help_Back(x + 1).sx = Help_Back(x).sx + Help_Back(x + 1).sy = Help_Back(x).sy + Help_Back(x + 1).cx = Help_Back(x).cx + Help_Back(x + 1).cy = Help_Back(x).cy + NEXT + usenextentry: + Help_Back_Pos = Help_Back_Pos + 1 + Back$(Help_Back_Pos) = l$ + Back_Name$(Help_Back_Pos) = Back2BackName$(l$) + Help_Back(Help_Back_Pos).sx = 1 + Help_Back(Help_Back_Pos).sy = 1 + Help_Back(Help_Back_Pos).cx = 1 + Help_Back(Help_Back_Pos).cy = 1 + Help_sx = 1: Help_sy = 1: Help_cx = 1: Help_cy = 1 + a$ = Wiki$(l$) + WikiParse a$ + GOTO newpageparsed + END IF END IF END IF @@ -2743,7 +2766,7 @@ FUNCTION ide2 (ignore) Help_Back(Help_Back_Pos).cy = 1 Help_sx = 1: Help_sy = 1: Help_cx = 1: Help_cy = 1 - a$ = Wiki(lnk$) + a$ = Wiki$(lnk$) IF idehelp = 0 THEN IF idesubwindow THEN PCOPY 3, 0: SCREEN , , 3, 0: GOTO ideloop @@ -2807,10 +2830,13 @@ FUNCTION ide2 (ignore) LOOP IF UCASE$(n$) = a2$ THEN - a$ = "'''" + backupn$ + "''' is a symbol that is used in your program as follows:" + a$ = "{{DISPLAYTITLE:agp@" + backupn$ + "}}" + CHR$(10) + a$ = a$ + "This is a subroutine or function that is used in your program as follows:" + CHR$(10) a$ = a$ + CHR$(10) + CHR$(10) + "{{PageSyntax}}" + CHR$(10) - a$ = a$ + ": " + sf$ + "'''" + backupn$ + "''' " + args$ - a$ = a$ + CHR$(10) + "{{PageNavigation}}" + a$ = a$ + ": [[" + LEFT$(sf$, LEN(sf$) - 1) + "]] '''" + backupn$ + "''' " + args$ + CHR$(10) + a$ = a$ + CHR$(10) + CHR$(10) + "{{PageSeeAlso}}" + CHR$(10) + a$ = a$ + "* [[Sub (explanatory)]]" + CHR$(10) + a$ = a$ + "* [[Function (explanatory)]]" + CHR$(10) IdeContextHelpSF = -1 @@ -5282,12 +5308,12 @@ FUNCTION ide2 (ignore) END IF IF menu$(m, s) = "Keyword #Index" THEN PCOPY 3, 0: SCREEN , , 3, 0 - lnk$ = "Keyword Reference (Alphabetical)" + lnk$ = "Keyword Reference - Alphabetical" GOTO OpenHelpLnk END IF IF menu$(m, s) = "#Keywords by Usage" THEN PCOPY 3, 0: SCREEN , , 3, 0 - lnk$ = "Keyword Reference (Usage)" + lnk$ = "Keyword Reference - By usage" GOTO OpenHelpLnk END IF @@ -5319,8 +5345,8 @@ FUNCTION ide2 (ignore) IF idehelp THEN Help_IgnoreCache = 1 a$ = Wiki$(Back$(Help_Back_Pos)) + WikiParse a$ 'reparse updated page incl. plugin templates Help_IgnoreCache = 0 - WikiParse a$ END IF GOTO ideloop END IF @@ -5397,10 +5423,18 @@ FUNCTION ide2 (ignore) ' removing the "View on Wiki" - @dualbrain IF 1=0 AND menu$(m, s) = "Update All #Pages..." THEN PCOPY 2, 0 - q$ = ideyesnobox("Update Help", "This can take up to 10 minutes.\nRedownload all cached help content from the wiki?") + q$ = ideyesnobox("Update Help", "This can take up to 20 minutes.\nRedownload all cached help content from the wiki?") PCOPY 2, 0 - IF q$ = "Y" THEN ideupdatehelpbox - PCOPY 3, 0: SCREEN , , 3, 0 + IF q$ = "Y" THEN + Help_Recaching = 1: Help_IgnoreCache = 1 + uerr = ideupdatehelpbox + Help_Recaching = 0: Help_IgnoreCache = 0 + PCOPY 3, 0: SCREEN , , 3, 0 + IF uerr THEN + lnk$ = "Update All" + GOTO OpenHelpLnk + END IF + END IF GOTO ideloop END IF @@ -6502,8 +6536,8 @@ HelpAreaShowBackLinks: LOCATE idewy, (idewx - (LEN(Document_Title$) + 8)) \ 2 : PRINT " HELP: " + Document_Title$ + " " END IF IF 1=0 THEN ' removing the "View on Wiki" - @dualbrain - 'COLOR 7, 0: _PRINTSTRING (idewx - 18, idewy), CHR$(180) - 'COLOR 15, 3: _PRINTSTRING (idewx - 17, idewy), " View on Wiki " + COLOR 7, 0: _PRINTSTRING (idewx - 18, idewy), CHR$(180) + COLOR 15, 3: _PRINTSTRING (idewx - 17, idewy), " View on Wiki " END IF RETURN @@ -14645,6 +14679,7 @@ FUNCTION idezfilelist$ (path$, method, mask$) 'method0=*.bas, method1=*.*, metho DO UNTIL EOF(150) LINE INPUT #150, a$ IF LEN(a$) THEN 'skip blank entries + IF path$ = "internal/help" THEN a$ = LEFT$(a$, (LEN(a$) - 5) \ 2) + ".txt" 'remove spelling label IF filelist$ = "" THEN filelist$ = a$ ELSE filelist$ = filelist$ + sep + a$ END IF LOOP @@ -14684,6 +14719,7 @@ FUNCTION idezfilelist$ (path$, method, mask$) 'method0=*.bas, method1=*.*, metho EXIT FOR END IF NEXT + IF path$ = "internal/help" THEN a$ = LEFT$(a$, (LEN(a$) - 5) \ 2) + ".txt" 'remove spelling label IF filelist$ = "" THEN filelist$ = a$ ELSE filelist$ = filelist$ + sep + a$ LOOP CLOSE #150 @@ -17583,7 +17619,7 @@ SUB Help_ShowText IF setup = 0 AND UBOUND(back$) = 1 THEN setup = 1 IF IdeContextHelpSF = 0 THEN - a$ = Wiki(Back$(1)) + a$ = Wiki$(Back$(1)) WikiParse a$ END IF END IF @@ -18655,7 +18691,15 @@ SUB IdeAddSearched (s2$) CLOSE #fh END SUB -SUB ideupdatehelpbox +FUNCTION ideupdatehelpbox + ideupdatehelpbox = 0 'all good, getting 1 on error + IF Help_Recaching = 2 THEN + DIM FullMessage$(1 TO 2) + UpdateStep = 1 + Help_ww = 78 + GOTO startMainLoop + END IF + '-------- generic dialog box header -------- PCOPY 0, 2 PCOPY 0, 1 @@ -18697,8 +18741,9 @@ SUB ideupdatehelpbox FOR i = 1 TO 100: o(i).par = p: NEXT 'set parent info of objects '-------- end of generic init -------- + startMainLoop: DO 'main loop - + IF Help_Recaching = 2 GOTO updateRoutine '-------- generic display dialog box & objects -------- idedrawpar p @@ -18807,11 +18852,15 @@ SUB ideupdatehelpbox SELECT CASE UpdateStep CASE 1 'Create a list of all files to be recached - f$ = CHR$(0) + idezfilelist$("internal/help", 1, "") + CHR$(0) - IF LEN(f$) = 2 THEN f$ = CHR$(0) + IF Help_Recaching < 2 THEN + f$ = CHR$(0) + idezfilelist$("internal/help", 2, "*.txt") + CHR$(0) + IF LEN(f$) = 2 THEN f$ = CHR$(0) + ELSE + f$ = CHR$(0) 'no dir scan for 'qb64 -u' (build time update) + END IF 'Prepend core pages to list - f$ = CHR$(0) + "Keyword-Reference---(Usage).txt" + f$ + f$ = CHR$(0) + "Keyword_Reference_-_By_usage.txt" + f$ f$ = CHR$(0) + "QB64_Help_Menu.txt" + f$ f$ = CHR$(0) + "QB64_FAQ.txt" + f$ UpdateStep = UpdateStep + 1 @@ -18820,10 +18869,9 @@ SUB ideupdatehelpbox CASE 3 'Download and PARSE alphabetical index to build required F1 help links FullMessage$(1) = "Regenerating keyword list..." - Help_Recaching = 1: Help_IgnoreCache = 1 - a$ = Wiki$("Keyword Reference (Alphabetical)") - Help_Recaching = 0: Help_IgnoreCache = 0 - WikiParse a$ + a$ = Wiki$("Keyword Reference - Alphabetical") + IF INSTR(a$, "{{PageInternalError}}") > 0 THEN ideupdatehelpbox = 1: EXIT DO + WikiParse a$ 'update links.bin and check for plugin templates UpdateStep = UpdateStep + 1 CASE 4 'Add all linked pages to download list (if not already in list) @@ -18832,21 +18880,25 @@ SUB ideupdatehelpbox DO UNTIL EOF(fh) LINE INPUT #fh, l$ IF LEN(l$) THEN - c = INSTR(l$, ","): PageName2$ = RIGHT$(l$, LEN(l$) - c) - DO WHILE INSTR(PageName2$, " ") - ASC(PageName2$, INSTR(PageName2$, " ")) = 95 - LOOP - DO WHILE INSTR(PageName2$, "&") - i = INSTR(PageName2$, "&") - PageName2$ = LEFT$(PageName2$, i - 1) + "%26" + RIGHT$(PageName2$, LEN(PageName2$) - i) - LOOP - DO WHILE INSTR(PageName2$, "/") - i = INSTR(PageName2$, "/") - PageName2$ = LEFT$(PageName2$, i - 1) + "%2F" + RIGHT$(PageName2$, LEN(PageName2$) - i) - LOOP - PageName2$ = PageName2$ + ".txt" - IF INSTR(f$, CHR$(0) + PageName2$ + CHR$(0)) = 0 THEN - f$ = f$ + PageName2$ + CHR$(0) + c = INSTR(l$, ","): l$ = RIGHT$(l$, LEN(l$) - c) + IF Help_Recaching < 2 OR LEFT$(l$, 3) <> "_gl" THEN 'ignore _GL pages for 'qb64 -u' (build time update) + 'Escape all invalid and other critical chars in filenames + PageName2$ = "" + FOR i = 1 TO LEN(l$) + c = ASC(l$, i) + SELECT CASE c + CASE 32 ' '(space) + PageName2$ = PageName2$ + "_" + CASE 34, 36, 38, 42, 43, 47, 58, 60, 62, 63, 92, 124 '("$&*+/:<>?\|) + PageName2$ = PageName2$ + "%" + HEX$(c) + CASE ELSE + PageName2$ = PageName2$ + CHR$(c) + END SELECT + NEXT + PageName2$ = PageName2$ + ".txt" + IF INSTR(f$, CHR$(0) + PageName2$ + CHR$(0)) = 0 THEN + f$ = f$ + PageName2$ + CHR$(0) + END IF END IF END IF LOOP @@ -18877,13 +18929,15 @@ SUB ideupdatehelpbox f2$ = LEFT$(f2$, LEN(f2$) - 4) n = n + 1 FullMessage$(2) = "Page title: " + f2$ - Help_IgnoreCache = 1: Help_Recaching = 1: ignore$ = Wiki(f2$): Help_Recaching = 0: Help_IgnoreCache = 0 + ignore$ = Wiki$(f2$) + WikiParse ignore$ 'just check for plugin templates END IF ELSE UpdateStep = UpdateStep + 1 END IF CASE 6 stoprecache: + IF Help_Recaching = 2 THEN EXIT DO FullMessage$(1) = "All pages updated." FullMessage$(2) = "" idetxt(o(ButtonID).txt) = "#Close" @@ -18894,7 +18948,7 @@ SUB ideupdatehelpbox mousedown = 0 mouseup = 0 LOOP -END SUB +END FUNCTION FUNCTION ideASCIIbox$(relaunch) diff --git a/source/ide/wiki/wiki_global.bas b/source/ide/wiki/wiki_global.bas index 5bf5463ec..35713a62b 100644 --- a/source/ide/wiki/wiki_global.bas +++ b/source/ide/wiki/wiki_global.bas @@ -12,6 +12,7 @@ DIM SHARED Help_ww, Help_wh 'width & height of text region DIM SHARED help_h, help_w 'width & height DIM SHARED Help_Txt$ '[chr][col][link-byte1][link-byte2] DIM SHARED Help_Txt_Len +DIM SHARED Help_Pos, Help_Wrap_Pos DIM SHARED Help_Line$ 'index of first txt element of a line DIM SHARED Help_Link$ 'the link info [sep][type:]...[sep] DIM SHARED Help_Link_Sep$: Help_Link_Sep$ = CHR$(13) @@ -20,7 +21,6 @@ DIM SHARED Help_NewLineIndent DIM SHARED Help_Underline 'Link Types: ' PAGE:wikipagename -DIM SHARED Help_Pos, Help_Wrap_Pos DIM SHARED Help_BG_Col DIM SHARED Help_Col_Normal: Help_Col_Normal = 7 DIM SHARED Help_Col_Link: Help_Col_Link = 9