mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-07-01 15:00:38 +00:00
Improved cache filename handling and external links
Cached wiki file names get a spelling label for case insensitive systems. External links are working (clickable) now and open in the standard application.
This commit is contained in:
parent
7fbad8108f
commit
f5dbe9bc17
|
@ -2588,54 +2588,72 @@ 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
|
||||
END IF
|
||||
IF LEFT$(l$, 5) = "EXTL:" THEN
|
||||
l$ = RIGHT$(l$, LEN(l$) - 5)
|
||||
l$ = StrReplace$(l$, " ", "%20")
|
||||
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
|
||||
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
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ DIM SHARED Help_NewLineIndent
|
|||
DIM SHARED Help_Underline
|
||||
'Link Types:
|
||||
' PAGE:wikipagename
|
||||
' EXTL:external link url
|
||||
DIM SHARED Help_Pos, Help_Wrap_Pos
|
||||
DIM SHARED Help_BG_Col
|
||||
DIM SHARED Help_Col_Normal: Help_Col_Normal = 7
|
||||
|
|
|
@ -22,12 +22,13 @@ FUNCTION Wiki$ (PageName$) 'Read cached wiki page (download, if not yet cached)
|
|||
PageName2$ = PageName2$ + CHR$(c)
|
||||
END SELECT
|
||||
NEXT
|
||||
PageName3$ = wikiSafeName$(PageName2$) 'case independent name
|
||||
|
||||
'Is this page in the cache?
|
||||
IF Help_IgnoreCache = 0 THEN
|
||||
IF _FILEEXISTS(Cache_Folder$ + "/" + PageName2$ + ".txt") THEN
|
||||
IF _FILEEXISTS(Cache_Folder$ + "/" + PageName3$ + ".txt") THEN
|
||||
fh = FREEFILE
|
||||
OPEN Cache_Folder$ + "/" + PageName2$ + ".txt" FOR BINARY AS #fh
|
||||
OPEN Cache_Folder$ + "/" + PageName3$ + ".txt" FOR BINARY AS #fh
|
||||
a$ = SPACE$(LOF(fh))
|
||||
GET #fh, , a$
|
||||
CLOSE #fh
|
||||
|
@ -40,8 +41,8 @@ FUNCTION Wiki$ (PageName$) 'Read cached wiki page (download, if not yet cached)
|
|||
LOOP
|
||||
IF removedchr13 THEN
|
||||
fh = FREEFILE
|
||||
OPEN Cache_Folder$ + "/" + PageName2$ + ".txt" FOR OUTPUT AS #fh: CLOSE #fh
|
||||
OPEN Cache_Folder$ + "/" + PageName2$ + ".txt" FOR BINARY AS #fh
|
||||
OPEN Cache_Folder$ + "/" + PageName3$ + ".txt" FOR OUTPUT AS #fh: CLOSE #fh
|
||||
OPEN Cache_Folder$ + "/" + PageName3$ + ".txt" FOR BINARY AS #fh
|
||||
PUT #fh, 1, a$
|
||||
CLOSE #fh
|
||||
END IF
|
||||
|
@ -72,7 +73,7 @@ FUNCTION Wiki$ (PageName$) 'Read cached wiki page (download, if not yet cached)
|
|||
|
||||
'Url query and output arguments for curl
|
||||
url$ = CHR$(34) + wikiBaseAddress$ + "/index.php?title=" + PageName2$ + "&action=edit" + CHR$(34)
|
||||
outputFile$ = Cache_Folder$ + "/" + PageName2$ + ".txt"
|
||||
outputFile$ = Cache_Folder$ + "/" + PageName3$ + ".txt"
|
||||
'Wikitext delimiters
|
||||
s1$ = "name=" + CHR$(34) + "wpTextbox1" + CHR$(34) + ">"
|
||||
s2$ = "</textarea>"
|
||||
|
@ -121,7 +122,7 @@ FUNCTION Wiki$ (PageName$) 'Read cached wiki page (download, if not yet cached)
|
|||
ELSE
|
||||
'Delete page, if empty or corrupted (force re-download on next access)
|
||||
KILL outputFile$
|
||||
a$ = "{{PageInternalError}}" + CHR$(10) +_
|
||||
a$ = CHR$(10) + "{{PageInternalError}}" + CHR$(10) +_
|
||||
"* Either the requested page is not yet available in the Wiki," + CHR$(10) +_
|
||||
"* or the download from Wiki failed and corrupted the page data." + CHR$(10) +_
|
||||
"** You may try ''Update Current Page'' from the ''Help'' menu." + CHR$(10)
|
||||
|
@ -303,6 +304,8 @@ SUB WikiParse (a$) 'Wiki page interpret
|
|||
d$ = "Last updated: " + MID$(a$, i + 11, INSTR(i + 11, a$, "}}") - i - 11)
|
||||
i = INSTR(a$, "{{QBDLTIME:")
|
||||
IF i > 0 THEN d$ = d$ + ", at " + MID$(a$, i + 11, INSTR(i + 11, a$, "}}") - i - 11)
|
||||
ELSEIF INSTR(a$, "{{PageInternalError}}") > 0 THEN
|
||||
d$ = "Page not found."
|
||||
END IF
|
||||
t$ = Help_PageLoaded$: i = INSTR(a$, "{{DISPLAYTITLE:")
|
||||
IF i > 0 THEN t$ = MID$(a$, i + 15, INSTR(i + 15, a$, "}}") - i - 15)
|
||||
|
@ -456,29 +459,33 @@ SUB WikiParse (a$) 'Wiki page interpret
|
|||
IF Help_LockParse <= 0 THEN
|
||||
'External links
|
||||
IF (c$(6) = "[http:" OR c$(7) = "[https:") AND elink = 0 THEN
|
||||
elink = 2
|
||||
elink = 1
|
||||
elink$ = ""
|
||||
GOTO charDone
|
||||
END IF
|
||||
IF elink = 2 THEN
|
||||
IF c$ = " " THEN
|
||||
elink = 1
|
||||
IF elink = 1 THEN
|
||||
IF c$ = "]" THEN
|
||||
elink = 0
|
||||
etext$ = elink$
|
||||
i2 = INSTR(elink$, " ")
|
||||
IF i2 > 0 THEN
|
||||
etext$ = RIGHT$(elink$, LEN(elink$) - i2)
|
||||
elink$ = LEFT$(elink$, i2 - 1)
|
||||
END IF
|
||||
|
||||
Help_LinkN = Help_LinkN + 1
|
||||
Help_Link$ = Help_Link$ + "EXTL:" + elink$ + Help_Link_Sep$
|
||||
|
||||
IF Help_LockParse = 0 THEN
|
||||
Help_AddTxt etext$, Help_Col_Link, Help_LinkN
|
||||
ELSE
|
||||
Help_AddTxt etext$, Help_Col_Bold, Help_LinkN
|
||||
END IF
|
||||
GOTO charDone
|
||||
END IF
|
||||
elink$ = elink$ + c$
|
||||
GOTO charDone
|
||||
END IF
|
||||
IF elink >= 1 THEN
|
||||
IF c$ = "]" THEN
|
||||
elink = 0
|
||||
elink$ = " " + elink$
|
||||
Help_LockWrap = 1: Help_Wrap_Pos = 0
|
||||
Help_AddTxt elink$, 8, 0
|
||||
Help_LockWrap = 0
|
||||
elink$ = ""
|
||||
GOTO charDone
|
||||
END IF
|
||||
END IF
|
||||
'Internal links
|
||||
IF c$(2) = "[[" AND link = 0 THEN
|
||||
i = i + 1
|
||||
|
@ -503,6 +510,9 @@ SUB WikiParse (a$) 'Wiki page interpret
|
|||
IF INSTR(link$, "#") THEN 'local page links not supported
|
||||
Help_AddTxt text$, 8, 0
|
||||
GOTO charDone
|
||||
ELSEIF LEFT$(link$, 9) = "Category:" THEN 'ignore category links
|
||||
Help_CheckRemoveBlankLine
|
||||
GOTO charDone
|
||||
END IF
|
||||
|
||||
Help_LinkN = Help_LinkN + 1
|
||||
|
@ -980,6 +990,19 @@ SUB WikiParse (a$) 'Wiki page interpret
|
|||
END IF
|
||||
END SUB
|
||||
|
||||
FUNCTION wikiSafeName$(page$) 'create a unique name for both case sensitive & insensitive systems
|
||||
ext$ = SPACE$(LEN(page$))
|
||||
FOR i = 1 TO LEN(page$)
|
||||
c = ASC(page$, i)
|
||||
SELECT CASE c
|
||||
CASE 65 TO 90: ASC(ext$, i) = 49 'upper = 1
|
||||
CASE 97 TO 122: ASC(ext$, i) = 48 'lower = 0
|
||||
CASE ELSE: ASC(ext$, i) = c 'non-letter = take as is
|
||||
END SELECT
|
||||
NEXT
|
||||
wikiSafeName$ = page$ + "_" + ext$
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION wikiLookAhead$ (a$, i, token$) 'Prefetch further wiki text
|
||||
wikiLookAhead$ = "": IF i >= LEN(a$) THEN EXIT FUNCTION
|
||||
j = INSTR(i, a$, token$)
|
||||
|
|
Loading…
Reference in a new issue