1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-06-29 10:30:36 +00:00

Improved help rendering

Headings enforce a blank line before it as separation to the previous section. Definition lists are rendered in blockquote style as in the Wiki, also enforce blank line separation.
This commit is contained in:
Roland Heyder 2022-07-31 23:31:42 +02:00
parent 1efbfd03fe
commit b25c8b55a9
2 changed files with 69 additions and 55 deletions

View file

@ -5,31 +5,31 @@ IF _DIREXISTS("internal") = 0 THEN GOTO NoInternalFolder
IF _DIREXISTS(Cache_Folder$) = 0 THEN MKDIR Cache_Folder$
DIM SHARED Help_sx, Help_sy, Help_cx, Help_cy
DIM SHARED Help_Select, Help_cx1, Help_cy1, Help_SelX1, Help_SelX2, Help_SelY1, Help_SelY2
DIM SHARED Help_MSelect, Help_ChkBlank
DIM SHARED Help_MSelect
Help_sx = 1: Help_sy = 1: Help_cx = 1: Help_cy = 1
DIM SHARED Help_wx1, Help_wy1, Help_wx2, Help_wy2 'defines the text section of the help window on-screen
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)
DIM SHARED Help_LinkN
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
DIM SHARED Help_Col_Link: Help_Col_Link = 9
DIM SHARED Help_Col_Bold: Help_Col_Bold = 15
DIM SHARED Help_Col_Italic: Help_Col_Italic = 3
DIM SHARED Help_Col_Section: Help_Col_Section = 8
DIM SHARED Help_Bold, Help_Italic, Help_Heading, Help_DList
DIM SHARED Help_Bold, Help_Italic, Help_Heading
DIM SHARED Help_Underline, Help_ChkBlank
DIM SHARED Help_LockWrap, Help_LockParse
DIM SHARED Help_DList, Help_LIndent$
DIM SHARED Help_Center, Help_CIndent$
REDIM SHARED Help_LineLen(1)
REDIM SHARED Back$(1)
@ -99,5 +99,5 @@ wpUtfReplCnt = wpUtfReplCnt + 1: wpUtfRepl(wpUtfReplCnt).utf8 = MKL$(&H9386E2):
wpUtfReplCnt = wpUtfReplCnt + 1: wpUtfRepl(wpUtfReplCnt).utf8 = MKL$(&H9086E2): wpUtfRepl(wpUtfReplCnt).repl = CHR$(27) 'arrow left
wpUtfReplCnt = wpUtfReplCnt + 1: wpUtfRepl(wpUtfReplCnt).utf8 = MKL$(&H9286E2): wpUtfRepl(wpUtfReplCnt).repl = CHR$(26) 'arrow right
'4-byte sequences
wpUtfReplCnt = wpUtfReplCnt + 1: wpUtfRepl(wpUtfReplCnt).utf8 = MKL$(&H80989ff0): wpUtfRepl(wpUtfReplCnt).repl = ":)" 'smily
wpUtfReplCnt = wpUtfReplCnt + 1: wpUtfRepl(wpUtfReplCnt).utf8 = MKL$(&H88989ff0): wpUtfRepl(wpUtfReplCnt).repl = ";)" 'wink
wpUtfReplCnt = wpUtfReplCnt + 1: wpUtfRepl(wpUtfReplCnt).utf8 = MKL$(&H80989FF0): wpUtfRepl(wpUtfReplCnt).repl = ":)" 'smily
wpUtfReplCnt = wpUtfReplCnt + 1: wpUtfRepl(wpUtfReplCnt).utf8 = MKL$(&H88989FF0): wpUtfRepl(wpUtfReplCnt).repl = ";)" 'wink

View file

@ -132,6 +132,7 @@ FUNCTION Wiki$ (PageName$) 'Read cached wiki page (download, if not yet cached)
END FUNCTION
SUB Help_AddTxt (t$, col, link) 'Add help text, handle word wrap
IF t$ = "" THEN EXIT SUB
IF t$ = CHR$(13) THEN Help_NewLine: EXIT SUB
IF Help_ChkBlank <> 0 THEN Help_CheckBlankLine: Help_ChkBlank = 0
@ -191,13 +192,13 @@ SUB Help_NewLine 'Start a new help line, apply indention (if any)
Help_Line$ = Help_Line$ + MKL$(Help_Txt_Len + 1)
Help_Wrap_Pos = 0
IF Help_Underline THEN
IF Help_Underline > 0 THEN
w = Help_Pos
Help_Pos = 1
IF Help_Underline = Help_Col_Section THEN
Help_AddTxt STRING$(w - 1, 205), Help_Underline, 0
IF Help_Underline = 2 THEN 'double/single line?
Help_AddTxt STRING$(w - 1, 205), Help_Col_Section, 0 'ÍÍÍ
ELSE
Help_AddTxt STRING$(w - 1, 196), Help_Underline, 0
Help_AddTxt STRING$(w - 1, 196), Help_Col_Section, 0 'ÄÄÄ
END IF
Help_Underline = 0 'keep before Help_NewLine (recursion)
Help_NewLine
@ -206,11 +207,11 @@ SUB Help_NewLine 'Start a new help line, apply indention (if any)
IF Help_ChkBlank = 0 THEN 'no indention on blank line checks
IF Help_Center > 0 THEN 'center overrides regular indent
Help_NewLineIndent = 0
Help_LIndent$ = ""
Help_AddTxt SPACE$(ASC(Help_CIndent$, 1)), Help_Col, 0
Help_CIndent$ = MID$(Help_CIndent$, 2)
ELSEIF Help_NewLineIndent > 0 THEN
Help_AddTxt SPACE$(Help_NewLineIndent), Help_Col, 0
ELSEIF Help_LIndent$ <> "" THEN
Help_AddTxt Help_LIndent$, 3, 0
END IF
END IF
END SUB
@ -247,7 +248,8 @@ END SUB
FUNCTION Help_Col 'Helps to calculate the default color
col = Help_Col_Normal
IF Help_Italic THEN col = Help_Col_Italic
IF Help_Bold THEN col = Help_Col_Bold 'Note: Bold overrides italic
IF Help_Bold THEN col = Help_Col_Bold 'Bold overrides Italic
IF Help_Heading THEN col = Help_Col_Section 'Heading overrides all
Help_Col = col
END FUNCTION
@ -277,7 +279,7 @@ SUB WikiParse (a$) 'Wiki page interpret
Help_Center = 0: Help_CIndent$ = ""
Help_DList = 0: Help_ChkBlank = 0
link = 0: elink = 0: cb = 0: nl = 1
link = 0: elink = 0: cb = 0: nl = 1: ah = 0: dl = 0
col = Help_Col
@ -605,33 +607,22 @@ SUB WikiParse (a$) 'Wiki page interpret
IF Help_LockParse = 0 THEN 'no section headings in blocks
cbo$ = ""
'Standard section headings (section color, h3 w/o underline, h2 with underline)
'Standard section headings (section color, h3 single underline, h2 double underline)
'Recommended order of main page sections (h2) with it's considered sub-sections (h3)
IF cb$ = "PageSyntax" THEN cbo$ = "Syntax:"
IF cb$ = "PageLegacySupport" THEN cbo$ = "Legacy support" 'sub-sect
IF cb$ = "PageParameters" OR cb$ = "Parameters" THEN cbo$ = "Parameters:" 'w/o Page prefix is deprecated (but kept for existing pages)
IF cb$ = "PageDescription" THEN cbo$ = "Description:"
IF cb$ = "PageQBasic" THEN cbo$ = "QBasic/QuickBASIC" 'sub-sect
IF cb$ = "PageNotes" THEN cbo$ = "Notes" 'sub-sect
IF cb$ = "PageErrors" THEN cbo$ = "Errors" 'sub-sect
IF cb$ = "PageUseWith" THEN cbo$ = "Use with" 'sub-sect
IF cb$ = "PageAvailability" THEN cbo$ = "Availability:"
IF cb$ = "PageExamples" THEN cbo$ = "Examples:"
IF cb$ = "PageSeeAlso" THEN cbo$ = "See also:"
'Independent main page end sections (centered, no title)
IF cb$ = "PageCopyright" THEN cbo$ = "Copyright"
IF cb$ = "PageNavigation" THEN cbo$ = "" 'ignored for built-in help
'Internally used templates (not available in Wiki)
IF cb$ = "PageInternalError" THEN cbo$ = "Sorry, an error occurred:"
'----------
IF cbo$ <> "" THEN
IF RIGHT$(cbo$, 1) = ":" THEN Help_Underline = Help_Col_Section
Help_AddTxt cbo$, Help_Col_Section, 0: Help_NewLine
IF cbo$ = "Copyright" THEN '_gl commands only
Help_NewLine: Help_AddTxt "1991-2006 Silicon Graphics, Inc.", 7, 0: Help_NewLine
Help_AddTxt "This document is licensed under the SGI Free Software B License.", 7, 0: Help_NewLine
Help_AddTxt "https://spdx.org/licenses/SGI-B-2.0.html https://spdx.org/licenses/SGI-B-2.0.html", 15, 0: Help_NewLine
END IF
IF RIGHT$(cbo$, 1) = ":" THEN Help_Underline = 2: ELSE Help_Underline = 1
Help_AddTxt cbo$, Help_Col_Section, 0: ah = 2
END IF
END IF
@ -770,19 +761,19 @@ SUB WikiParse (a$) 'Wiki page interpret
'Wiki headings (==...==}) are not handled in blocks (soft- and hard lock), as it would
'disrupt the block, also in code blocks it could be part of the code example itself
IF Help_LockParse = 0 THEN
'Custom section headings (current color, h3 w/o underline, h2 with underline)
'Custom section headings (section color, h3 single underline, h2 double underline)
ii = 0
IF c$(4) = " ===" AND Help_Heading = 3 THEN ii = 3: Help_Heading = 0
IF c$(3) = "===" AND Help_Heading = 3 THEN ii = 2: Help_Heading = 0
IF c$(3) = "===" AND nl = 1 THEN ii = 2: Help_Heading = 3
IF c$(4) = "=== " AND nl = 1 THEN ii = 3: Help_Heading = 3
IF ii > 0 THEN i = i + ii: GOTO charDone
IF c$(4) = " ===" AND Help_Heading = 3 THEN ii = 3: Help_Heading = 0: ah = 2
IF c$(3) = "===" AND Help_Heading = 3 THEN ii = 2: Help_Heading = 0: ah = 2
IF c$(3) = "===" AND nl = 1 THEN ii = 2: Help_CheckBlankLine: Help_Heading = 3
IF c$(4) = "=== " AND nl = 1 THEN ii = 3: Help_CheckBlankLine: Help_Heading = 3
IF ii > 0 THEN i = i + ii: col = Help_Col: Help_Underline = 1: GOTO charDone
ii = 0
IF c$(3) = " ==" AND Help_Heading = 2 THEN ii = 2: Help_Heading = 0
IF c$(2) = "==" AND Help_Heading = 2 THEN ii = 1: Help_Heading = 0
IF c$(2) = "==" AND nl = 1 THEN ii = 1: Help_Heading = 2
IF c$(3) = "== " AND nl = 1 THEN ii = 2: Help_Heading = 2
IF ii > 0 THEN i = i + ii: Help_Underline = col: GOTO charDone
IF c$(3) = " ==" AND Help_Heading = 2 THEN ii = 2: Help_Heading = 0: ah = 2
IF c$(2) = "==" AND Help_Heading = 2 THEN ii = 1: Help_Heading = 0: ah = 2
IF c$(2) = "==" AND nl = 1 THEN ii = 1: Help_CheckBlankLine: Help_Heading = 2
IF c$(3) = "== " AND nl = 1 THEN ii = 2: Help_CheckBlankLine: Help_Heading = 2
IF ii > 0 THEN i = i + ii: col = Help_Col: Help_Underline = 2: GOTO charDone
END IF
'Wiki/HTML rulers (----, <hr>) are not handled in blocks (soft- and hard lock), as it would
@ -812,28 +803,39 @@ SUB WikiParse (a$) 'Wiki page interpret
'Definition lists
IF c$ = ";" AND nl = 1 THEN 'definition (new line only)
IF c$(2) = "; " THEN i = i + 1
IF ah = 0 AND dl = 0 THEN Help_CheckBlankLine
Help_Bold = 1: col = Help_Col: Help_DList = 1
IF c$(3) = ";* " OR c$(3) = ";# " THEN i = i + 2: Help_DList = 3 'list dot belongs to description
IF c$(2) = ";*" OR c$(2) = ";#" THEN i = i + 1: Help_DList = 2 'list dot belongs to description
IF dl < 3 THEN
Help_AddTxt "Þ ", 3, 0: dl = 1
Help_LIndent$ = Help_LIndent$ + "Þ "
END IF
GOTO charDone
END IF
IF c$ = ":" AND Help_DList > 0 THEN 'description (same or new line)
IF c$ = ":" AND Help_DList > 0 THEN 'description (same line)
IF c$(2) = ": " THEN i = i + 1
Help_Bold = 0: col = Help_Col
IF nl = 0 THEN Help_NewLine
Help_AddTxt " ", col, 0
Help_NewLineIndent = Help_NewLineIndent + 3
Help_Bold = 0: col = Help_Col: Help_NewLine
Help_AddTxt " ", 3, 0: dl = 3
Help_LIndent$ = Help_LIndent$ + " "
IF Help_DList > 1 THEN
Help_AddTxt CHR$(4) + " ", 14, 0
Help_NewLineIndent = Help_NewLineIndent + 2
Help_LIndent$ = Help_LIndent$ + " "
END IF
Help_DList = 0
GOTO charDone
END IF
IF c$ = ":" AND nl = 1 THEN 'description w/o definition (new line only)
IF c$ = ":" AND nl = 1 THEN 'description w/o definition (new line)
IF c$(2) = ": " THEN i = i + 1
Help_AddTxt " ", col, 0
Help_NewLineIndent = Help_NewLineIndent + 3
IF ah = 0 AND dl = 0 THEN Help_CheckBlankLine
IF dl < 3 THEN
Help_AddTxt "Þ ", 3, 0: dl = 2
Help_LIndent$ = Help_LIndent$ + "Þ "
END IF
IF ASC(c$(2), 2) <> 58 AND ASC(c$(2), 2) <> 59 THEN
Help_AddTxt " ", 3, 0: dl = 3
Help_LIndent$ = Help_LIndent$ + " "
END IF
GOTO charDoneKnl 'keep nl state for possible <UL> list bullets
END IF
END IF
@ -846,13 +848,13 @@ SUB WikiParse (a$) 'Wiki page interpret
IF c$(2) = "**" OR c$(2) = "##" THEN
IF c$(3) = "** " OR c$(3) = "## " THEN i = i + 2: ELSE i = i + 1
Help_AddTxt " " + CHR$(4) + " ", 14, 0
Help_NewLineIndent = Help_NewLineIndent + 5
Help_LIndent$ = Help_LIndent$ + " "
GOTO charDone
END IF
IF c$ = "*" OR c$ = "#" THEN
IF c$(2) = "* " OR c$(2) = "# " THEN i = i + 1
Help_AddTxt CHR$(4) + " ", 14, 0
Help_NewLineIndent = Help_NewLineIndent + 2
Help_LIndent$ = Help_LIndent$ + " "
GOTO charDone
END IF
END IF
@ -891,7 +893,10 @@ SUB WikiParse (a$) 'Wiki page interpret
IF c = 10 OR c$(4) = "<br>" OR c$(6) = "<br />" THEN
IF c$(4) = "<br>" THEN i = i + 3
IF c$(6) = "<br />" THEN i = i + 5
Help_NewLineIndent = 0
IF c = 10 THEN 'on real new line only
IF dl > 1 THEN dl = dl - 1 'update def list state
Help_LIndent$ = "" 'end all list indention
END IF
IF Help_LockParse > -2 THEN 'everywhere except in fixed blocks
IF Help_Txt_Len >= 8 THEN 'allow max. one blank line (ie. collapse multi blanks to just one)
@ -907,7 +912,16 @@ SUB WikiParse (a$) 'Wiki page interpret
IF Help_LockParse <> 0 THEN 'in all blocks reset styles at EOL
Help_Bold = 0: Help_Italic = 0: col = Help_Col
ELSE
IF c = 10 THEN Help_DList = 0: Help_Bold = 0: col = Help_Col 'def list incl. style ends after real new line
IF c = 10 THEN 'on real new line only
Help_DList = 0: Help_Bold = 0: col = Help_Col 'def list incl. style ends
IF ah > 0 THEN ah = ah - 1 'update after heading state
IF dl > 0 THEN
IF ASC(c$(2), 2) <> 59 AND ASC(c$(2), 2) <> 58 THEN
dl = 0 'end of def list indention
Help_ChkBlank = 1
END IF
END IF
END IF
END IF
nl = 1
GOTO charDoneKnl 'keep just set nl state
@ -1034,7 +1048,7 @@ SUB WikiParse (a$) 'Wiki page interpret
END IF
END SUB
FUNCTION wikiSafeName$(page$) 'create a unique name for both case sensitive & insensitive systems
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)