Update 2.0.3:
- Fixed: remove yellow border
- Fixed: remove shadow from server script
- Optional: remove max height.
Code: Select all
// ==UserScript==
// @run-at document-idle
// @namespace STARGÅTE
// @name Pure Basic Syntax Highlighting
// @description Pure Basic Syntax Highlighting (V 2.0.3) (03. June 2021)
// @include https://purebasic.com/german/*
// @include https://purebasic.fr/german/*
// @include https://purebasic.fr/english/*
// @include https://purebasic.fr/french/*
// @include https://www.purebasic.com/german/*
// @include https://www.purebasic.fr/german/*
// @include https://www.purebasic.fr/english/*
// @include https://www.purebasic.fr/french/*
// @include https://forums.purebasic.com/german/*
// @include https://forums.purebasic.com/english/*
// @include https://forums.purebasic.fr/german/*
// @include https://forums.purebasic.fr/english/*
// @include https://forums.purebasic.fr/french/*
// ==/UserScript==
//--------------------------------------------
// Version 2.0.3 (03. June 2021)
//--------------------------------------------
// Farbdefinition für das Syntax Highlighting
// color definition for the syntax highlighting
//===================================================
var PBSH_Highlight = new Object();
// ==PureBasicPreference==
PBSH_Highlight.EnableKeywordBolding = 1;
PBSH_Highlight.TabLength = 2;
PBSH_Highlight.CustomKeywords = '';
PBSH_Highlight.EditorFontName = 'Consolas';
PBSH_Highlight.EditorFontSize = '10';
PBSH_Highlight.EditorFontStyle = '';
PBSH_Highlight.BackgroundColor = '#101010';
PBSH_Highlight.NormalTextColor = '#A0A0A0';
PBSH_Highlight.BasicKeywordColor = '#5090D0';
PBSH_Highlight.CommentColor = '#C04040';
PBSH_Highlight.ConstantColor = '#FFD000';
PBSH_Highlight.StringColor = '#FFFFFF';
PBSH_Highlight.PureKeywordColor = '#80C040';
PBSH_Highlight.ASMKeywordColor = '#A0A040';
//PBSH_Highlight.PointerColor = '#ADE4B5';
PBSH_Highlight.NumberColor = '#C0C0C0';
//PBSH_Highlight.StructureColor = '#006090';
PBSH_Highlight.LabelColor = '#C080FF';
PBSH_Highlight.ModuleColor = '#208000';
PBSH_Highlight.OperatorColor = '#FFFFFF';
//PBSH_Highlight.SeparatorColor = '#FFFFFF';
PBSH_Highlight.CustomKeywordColor = '#3060E0';
// ==/PureBasicPreference==
//===================================================
// UserScript für die Syntaxhervorhebung
// user script for syntax highlighting
//===================================================
// Regulärer Ausdruck für das SyntaxHighlighting
// regular expressions for the syntax lighting
if (PBSH_Highlight.CustomKeywords == '') PBSH_Highlight.CustomKeywords = 'NoCustomKeywordsDefined';
var PBSH_Syntax = new RegExp(
/*Comment*/ '(;.*$)|' +
/*Constant*/ '(\\#\\w*\\$?|\'.*?(?:\'|$))|' +
/*String*/ '(~"(?:\\\\.|[^\\\\])*?(?:"|$)|"[^"]*?(?:"|$))|' +
/*CustomKeyword*/ '((?:^[ \\t]+|\\b)(?:'+PBSH_Highlight.CustomKeywords+')\\b)|' +
/*Keyword*/ '((?:^[ \\t]+|\\b)(?:And|Array|As|Break|CallDebugger|Case|CompilerCase|CompilerDefault|CompilerElse|CompilerElseIf|CompilerEndIf|CompilerEndSelect|CompilerError|CompilerIf|CompilerSelect|CompilerWarning|Continue|Data|DataSection|EndDataSection|Debug|DebugLevel|Declare|DeclareC|DeclareCDLL|DeclareDLL|DeclareModule|EndDeclareModule|Default|Define|Dim|DisableASM|DisableDebugger|DisableExplicit|Else|ElseIf|EnableASM|EnableDebugger|EnableExplicit|End|Enumeration|EnumerationBinary|EndEnumeration|FakeReturn|For|ForEach|ForEver|Global|Gosub|Goto|If|EndIf|Import|EndImport|ImportC|IncludeBinary|IncludeFile|IncludePath|Interface|EndInterface|List|Macro|EndMacro|MacroExpandedCount|Map|Module|EndModule|NewList|NewMap|Next|Not|Or|Procedure|EndProcedure|ProcedureC|ProcedureCDLL|ProcedureDLL|ProcedureReturn|Protected|Prototype|PrototypeC|Read|ReDim|Repeat|Restore|Return|Runtime|Select|EndSelect|Shared|Static|Step|Structure|EndStructure|StructureUnion|EndStructureUnion|Swap|Threaded|To|UndefineMacro|Until|UseModule|UnuseModule|Wend|While|With|EndWith|XIncludeFile|XOr)\\b|\\b[ \\t]+(?:Align|Extends)\\b)|' +
/*Structure*/ '((?<=\\.)[ \\t]*(?:[^\\Wabcdfilqsuw](?=\\b)|\\w\\w+)|(?<=\\\\)\\w+\\$?[ \\t]*(?![\\w\\( \\t]))|' +
/*Function*/ '(\\w+\\$?(?=(?:[ \\t]*\\.[ \\t]*\\w+[ \\t]*|[ \\t]*)\\())|' +
/*ASM*/ '(^[ \\t]*!.*?(?:$|(?=(?<!>|<|&);)))|' +
/*Pointer*/ '(\\@\\*?[\\w\\$]*|(?:(?<![ \\t\\w$)}\\]])|(?<=\\5))[ \\t]*\\*[\\w\\$]+|\\?\\w*)|' +
/*Number*/ '((?:\\b\\d+\\.?\\d*(?:e[+\\-]?\\d+)?|\\$[\\dabcdef]+|\\%[01]+))|' +
/*Module*/ '(\\w+(?=[ \\t]*::))|' +
/*Label*/ '(^[ \\t]*\\w+\\$?[ \\t]*:(?!:))|' +
/*Operator*/ '((?:[+*/\\-|!%=~]|::|>|<|&)+)|' +
/*Seperator*/ '([()\\[\\]\\\\,.:])',
'gim');
// Hervorheben einer Zeichenkette
// highlighting a string
function PBSH_Highlighting(str, key)
{
if (PBSH_Highlight[key])
return '<font color="'+PBSH_Highlight[key]+'">'+str+'</font>';
else
return str;
}
function PBSH_Highlighting_Keyword(str, key)
{
if (PBSH_Highlight[key])
{
if (PBSH_Highlight.EnableKeywordBolding)
return '<font color="'+PBSH_Highlight[key]+'"><b>'+str+'</b></font>';
else
return '<font color="'+PBSH_Highlight[key]+'">'+str+'</font>';
}
else
if (PBSH_Highlight.EnableKeywordBolding)
return '<b>'+str+'</b>';
else
return str;
}
// Ersetzen einer Zeichenkette
// replace a string
function PBSH_Replace(str, isComment, isConstant, isString, isCustomKeyword, isKeyword, isStructure, isFunction, isASM, isPointer, isNumber, isModule, isLabel, isOperator, isSeparator)
{
if (isCustomKeyword) return PBSH_Highlighting_Keyword(isCustomKeyword, 'CustomKeywordColor');
else if (isKeyword) return PBSH_Highlighting_Keyword(isKeyword, 'BasicKeywordColor');
else if (isComment) return PBSH_Highlighting(isComment, 'CommentColor');
else if (isConstant) return PBSH_Highlighting(isConstant, 'ConstantColor');
else if (isString) return PBSH_Highlighting(isString, 'StringColor');
else if (isFunction) return PBSH_Highlighting(isFunction, 'PureKeywordColor');
else if (isASM) return PBSH_Highlighting(isASM, 'ASMKeywordColor');
else if (isPointer) return PBSH_Highlighting(isPointer, 'PointerColor');
else if (isNumber) return PBSH_Highlighting(isNumber, 'NumberColor');
else if (isStructure) return PBSH_Highlighting(isStructure, 'StructureColor');
else if (isModule) return PBSH_Highlighting(isModule, 'ModuleColor');
else if (isLabel) return PBSH_Highlighting(isLabel, 'LabelColor');
else if (isOperator) return PBSH_Highlighting(isOperator, 'OperatorColor');
else if (isSeparator) return PBSH_Highlighting(isSeparator, 'SeparatorColor');
}
// Durchführen der Syntaxhervorhebung
// perform the syntax highlighting
function PureBasicSyntaxHighlighting()
{
// Anwenden der Syntaxhervorhebung auf alle <code>-Elemente
// apply the syntax highlighting on all the <code>-elements
var allMyDivs = document.getElementsByTagName('code');
for(var i = 0; i < allMyDivs.length; i++)
{
if (PBSH_Highlight.EditorFontName)
allMyDivs[i].style.font = PBSH_Highlight.EditorFontStyle + " " + PBSH_Highlight.EditorFontSize + "pt " + PBSH_Highlight.EditorFontName;
if (PBSH_Highlight.BackgroundColor)
allMyDivs[i].style.backgroundColor = PBSH_Highlight.BackgroundColor;
if (PBSH_Highlight.NormalTextColor)
allMyDivs[i].style.color = PBSH_Highlight.NormalTextColor;
allMyDivs[i].style.tabSize = PBSH_Highlight.TabLength;
//allMyDivs[i].style.maxHeight = 'none'; // optional to disable the folding of the code block
allMyDivs[i].style.textShadow = 'none';
allMyDivs[i].parentNode.style.padding = '0';
var code = ''+allMyDivs[i].innerHTML+'';
code = code.replace(/<br>/gi, '\r\n');
//code = code.replace(/ /gi, '\t');
code = code.replace(/<\/?[^<>]*>/gi, '');
code = code.replace(PBSH_Syntax, PBSH_Replace);
//code = code.replace(/\t/gi, ' ');
//code = code.replace(/\r\n/gi, '<br>');
allMyDivs[i].innerHTML = code;
}
}
PureBasicSyntaxHighlighting();
//===================================================
And as usually the PB script to set the PB-IDE design:
Code: Select all
EnableExplicit
Procedure.s HTMLColor(Color)
ProcedureReturn "#"+RSet(Hex(Red(Color)),2,"0")+RSet(Hex(Green(Color)),2,"0")+RSet(Hex(Blue(Color)),2,"0")
EndProcedure
Procedure Export(PreferencesFileName.s)
Protected Keyword.s, String.s, CustomKeywords.s
If OpenPreferences(PreferencesFileName)
PreferenceGroup("Global")
Debug "PBSH_Highlight.EnableKeywordBolding = "+ReadPreferenceString("EnableKeywordBolding", "1")+";"
Debug "PBSH_Highlight.TabLength = "+ReadPreferenceString("TabLength", "2")+";"
PreferenceGroup("CustomKeywords")
If ExaminePreferenceKeys()
While NextPreferenceKey()
If Left(PreferenceKeyName(), 1) = "W"
If CustomKeywords : CustomKeywords + "|" : EndIf
CustomKeywords + PreferenceKeyValue()
EndIf
Wend
EndIf
Debug "PBSH_Highlight.CustomKeywords = '"+CustomKeywords+"';"
PreferenceGroup("Editor")
Restore PreferenceKeys
Repeat
Read.s Keyword
If Keyword
String = ReplaceString(ReadPreferenceString(Keyword, ""), ",", " ")
If Right(Keyword, 5) = "Color" : String = HTMLColor(Val(String)) : EndIf
If ReadPreferenceInteger(Keyword+"_Disabled", 0)
Debug "//PBSH_Highlight."+Keyword+" = '"+String+"';"
Else
Debug "PBSH_Highlight."+Keyword+" = '"+String+"';"
EndIf
EndIf
Until Keyword = ""
ProcedureReturn #True
EndIf
EndProcedure
Define PreferencesFileName.s
If Not Export(GetUserDirectory(#PB_Directory_ProgramData)+"PureBasic\PureBasic.prefs")
PreferencesFileName = OpenFileRequester("Preference File", GetHomeDirectory(), "PureBasic.prefs", 0)
Export(PreferencesFileName)
EndIf
DataSection
PreferenceKeys:
Data.s "EditorFontName", "EditorFontSize", "EditorFontStyle", "BackgroundColor", "NormalTextColor"
Data.s "BasicKeywordColor", "CommentColor", "ConstantColor", "StringColor", "PureKeywordColor"
Data.s "ASMKeywordColor", "PointerColor", "NumberColor", "StructureColor", "LabelColor", "ModuleColor"
Data.s "OperatorColor", "SeparatorColor", "CustomKeywordColor", ""
EndDataSection