From f244921bb3b2adc50c8352e0609511328e5681f9 Mon Sep 17 00:00:00 2001 From: "METANEOCORTEX\\Kotti" Date: Thu, 2 Apr 2026 18:23:04 +0200 Subject: [PATCH] fix: PortableApps Build (new build script, settings grepWin orig handling), grepWin exe renaming --- .gitignore | 26 +- Build/Build_PortableApp.cmd | 7 + Build/scripts/Build.ps1 | 4 +- Build/scripts/BuildPortableApp.ps1 | 317 +++ .../App/AppInfo/Launcher/Notepad3Portable.ini | 1 + .../Notepad3Portable/App/AppInfo/appinfo.ini | 58 + .../App/DefaultData/settings/Notepad3.ini | 176 ++ .../App/DefaultData/settings/minipath.ini | 136 + .../App/DefaultData/settings/themes/Dark.ini | 756 ++++++ .../DefaultData/settings/themes/Obsidian.ini | 757 ++++++ .../DefaultData/settings/themes/Sombra.ini | 743 ++++++ .../App/Notepad3/Docs/Changes.txt | 2373 +++++++++++++++++ .../App/Notepad3/Docs/KeyboardShortcuts.txt | 483 ++++ .../App/Notepad3/Docs/License.txt | 52 + .../App/Notepad3/Docs/Notepad3.txt | 980 +++++++ .../App/Notepad3/Docs/Readme.txt | 178 ++ .../Notepad3/Docs/crypto/encryption-doc.txt | 119 + .../App/Notepad3/Docs/crypto/read_me.txt | 35 + .../App/Notepad3/Docs/uthash/ChangeLog.txt | 267 ++ .../App/Notepad3/Docs/uthash/License.txt | 21 + .../App/Notepad3/Docs/uthash/userguide.txt | 1901 +++++++++++++ .../App/Notepad3/x64/{np3 => }/Notepad3.ini | 0 .../App/Notepad3/x86/{np3 => }/Notepad3.ini | 0 np3portableapp/_buildname.txt | 1 + src/Notepad3.c | 4 +- 25 files changed, 9379 insertions(+), 16 deletions(-) create mode 100644 Build/Build_PortableApp.cmd create mode 100644 Build/scripts/BuildPortableApp.ps1 create mode 100644 np3portableapp/Notepad3Portable/App/AppInfo/appinfo.ini create mode 100644 np3portableapp/Notepad3Portable/App/DefaultData/settings/Notepad3.ini create mode 100644 np3portableapp/Notepad3Portable/App/DefaultData/settings/minipath.ini create mode 100644 np3portableapp/Notepad3Portable/App/DefaultData/settings/themes/Dark.ini create mode 100644 np3portableapp/Notepad3Portable/App/DefaultData/settings/themes/Obsidian.ini create mode 100644 np3portableapp/Notepad3Portable/App/DefaultData/settings/themes/Sombra.ini create mode 100644 np3portableapp/Notepad3Portable/App/Notepad3/Docs/Changes.txt create mode 100644 np3portableapp/Notepad3Portable/App/Notepad3/Docs/KeyboardShortcuts.txt create mode 100644 np3portableapp/Notepad3Portable/App/Notepad3/Docs/License.txt create mode 100644 np3portableapp/Notepad3Portable/App/Notepad3/Docs/Notepad3.txt create mode 100644 np3portableapp/Notepad3Portable/App/Notepad3/Docs/Readme.txt create mode 100644 np3portableapp/Notepad3Portable/App/Notepad3/Docs/crypto/encryption-doc.txt create mode 100644 np3portableapp/Notepad3Portable/App/Notepad3/Docs/crypto/read_me.txt create mode 100644 np3portableapp/Notepad3Portable/App/Notepad3/Docs/uthash/ChangeLog.txt create mode 100644 np3portableapp/Notepad3Portable/App/Notepad3/Docs/uthash/License.txt create mode 100644 np3portableapp/Notepad3Portable/App/Notepad3/Docs/uthash/userguide.txt rename np3portableapp/Notepad3Portable/App/Notepad3/x64/{np3 => }/Notepad3.ini (100%) rename np3portableapp/Notepad3Portable/App/Notepad3/x86/{np3 => }/Notepad3.ini (100%) create mode 100644 np3portableapp/_buildname.txt diff --git a/.gitignore b/.gitignore index 5a32f64636..53d7689c44 100644 --- a/.gitignore +++ b/.gitignore @@ -30,7 +30,7 @@ Thumbs.db /.vs /Bin /Build/Ignore* -/Build/*portable* +#/Build/*portable* /Build/notepad3*setup* /Build/Resources /Build/Packages @@ -53,21 +53,23 @@ Thumbs.db /test/test.log /Notepad3.VC.VC.opendb -/np3portableapp/*.7z -/np3portableapp/*.cmd -/np3portableapp/*.exe -/np3portableapp/*.txt -/np3portableapp/Notepad3Portable/Data -/np3portableapp/Notepad3Portable/Notepad3Portable.* -/np3portableapp/Notepad3Portable/App/AppInfo/appinfo.ini -/np3portableapp/Notepad3Portable/App/AppInfo/installer.ini -/np3portableapp/Notepad3Portable/App/DefaultData/settings -/np3portableapp/Notepad3Portable/App/Notepad3/Docs +#/np3portableapp/*.7z +#/np3portableapp/*.cmd +#/np3portableapp/*.exe +#/np3portableapp/*.txt +#/np3portableapp/Notepad3Portable/Data +#/np3portableapp/Notepad3Portable/Data +#/np3portableapp/Notepad3Portable/App/AppInfo/appinfo.ini +#/np3portableapp/Notepad3Portable/App/AppInfo/installer.ini +#/np3portableapp/Notepad3Portable/App/DefaultData/settings +#/np3portableapp/Notepad3Portable/App/Notepad3/Docs +/np3portableapp/Notepad3Portable*.exe +/np3portableapp/Notepad3Portable/Notepad3Portable*.exe /np3portableapp/Notepad3Portable/App/Notepad3/x64/*.exe /np3portableapp/Notepad3Portable/App/Notepad3/x64/lng /np3portableapp/Notepad3Portable/App/Notepad3/x86/*.exe /np3portableapp/Notepad3Portable/App/Notepad3/x86/lng - +# # Upgrade staging directory _upgrade_staging/ diff --git a/Build/Build_PortableApp.cmd b/Build/Build_PortableApp.cmd new file mode 100644 index 0000000000..e29f575c2b --- /dev/null +++ b/Build/Build_PortableApp.cmd @@ -0,0 +1,7 @@ +@echo off +REM Build PortableApps Package +REM Usage: Build_PortableApp.cmd [arguments passed to BuildPortableApp.ps1] + +setlocal + +powershell -ExecutionPolicy Bypass -File "%~dp0scripts\BuildPortableApp.ps1" %* diff --git a/Build/scripts/Build.ps1 b/Build/scripts/Build.ps1 index 8bdb29bf2f..213ef4120d 100644 --- a/Build/scripts/Build.ps1 +++ b/Build/scripts/Build.ps1 @@ -22,8 +22,8 @@ $RepoRoot = Split-Path -Parent (Split-Path -Parent $ScriptDir) function Find-MSBuild { $vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" if (Test-Path $vswhere) { - # Try VS 2022 first (version 17.x) - $vsPath = & $vswhere -version "[17.0,19.0)" -property installationPath 2>$null + # Try latest VS in range 17.x-18.x + $vsPath = & $vswhere -version "[17.0,19.0)" -latest -property installationPath 2>$null if (-not $vsPath) { # Fallback to latest $vsPath = & $vswhere -latest -property installationPath diff --git a/Build/scripts/BuildPortableApp.ps1 b/Build/scripts/BuildPortableApp.ps1 new file mode 100644 index 0000000000..68e238f7c7 --- /dev/null +++ b/Build/scripts/BuildPortableApp.ps1 @@ -0,0 +1,317 @@ +# Build PortableApps Package for Notepad3 +# Usage: .\BuildPortableApp.ps1 [-SkipBuild] [-SkipVersionPatch] +# [-SkipLauncherGenerator] [-InstallerPath ] +# +# Steps: +# 1. Run Version.ps1 to generate VersionEx.h +# 2. Build x64 and Win32 Release +# 3. Copy binaries to PortableApp structure +# 4. Process appinfo_template.ini with version info +# 5. Generate Notepad3Portable.exe launcher +# 6. Package with PortableApps.comInstaller.exe + +[CmdletBinding()] +param( + [switch]$SkipBuild, + [switch]$SkipVersionPatch, + [switch]$SkipLauncherGenerator, + [string]$InstallerPath = "d:\PortableApps\PortableApps.comInstaller\PortableApps.comInstaller.exe" +) + +$ErrorActionPreference = "Stop" +$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path +$RepoRoot = Split-Path -Parent (Split-Path -Parent $ScriptDir) + +$PortableAppRoot = Join-Path $RepoRoot "np3portableapp" +$PortableAppDir = Join-Path $PortableAppRoot "Notepad3Portable" +$AppInfoDir = Join-Path $PortableAppDir "App\AppInfo" +$Notepad3AppDir = Join-Path $PortableAppDir "App\Notepad3" + +# ============================================================ +# Helper: colored step banner +# ============================================================ +function Write-Step { + param([int]$Number, [string]$Text) + Write-Host "" + Write-Host "--- Step $Number : $Text ---" -ForegroundColor Cyan +} + +# ============================================================ +# Helper: detect PlatformToolset from installed Visual Studio +# ============================================================ +function Get-PlatformToolset { + $vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" + if (-not (Test-Path $vswhere)) { + throw "vswhere.exe not found. Install Visual Studio." + } + $vsVersion = & $vswhere -latest -property installationVersion 2>$null + if (-not $vsVersion) { + throw "No Visual Studio installation found via vswhere." + } + $major = ([version]$vsVersion).Major + $toolsetMap = @{ 15 = 'v141'; 16 = 'v142'; 17 = 'v143'; 18 = 'v145' } + $toolset = $toolsetMap[$major] + if (-not $toolset) { + throw "Unknown Visual Studio major version $major - cannot determine PlatformToolset." + } + Write-Host "Visual Studio version: $vsVersion -> PlatformToolset: $toolset" -ForegroundColor Cyan + return $toolset +} + +# ============================================================ +# Helper: parse version defines from VersionEx.h +# ============================================================ +function Get-VersionFromHeader { + $headerPath = Join-Path $RepoRoot "src\VersionEx.h" + if (-not (Test-Path $headerPath)) { + throw "src\VersionEx.h not found. Run Version.ps1 first." + } + $content = Get-Content $headerPath -Raw + $defines = @{} + foreach ($name in @('VERSION_MAJOR', 'VERSION_MINOR', 'VERSION_REV', 'VERSION_BUILD')) { + if ($content -match "#define\s+$name\s+(\d+)") { + $defines[$name] = $Matches[1] + } + else { + throw "Could not parse $name from VersionEx.h" + } + } + $version = "$($defines['VERSION_MAJOR']).$($defines['VERSION_MINOR']).$($defines['VERSION_REV']).$($defines['VERSION_BUILD'])" + return $version +} + +# ============================================================ +# Helper: copy platform binaries to portable app target +# ============================================================ +function Copy-PlatformBinaries { + param( + [string]$SourceDir, + [string]$TargetDir + ) + + if (-not (Test-Path $SourceDir)) { + throw "Build output not found: $SourceDir" + } + + # Executables + foreach ($exe in @('Notepad3.exe', 'minipath.exe')) { + $src = Join-Path $SourceDir $exe + $dst = Join-Path $TargetDir $exe + if (-not (Test-Path $src)) { + throw "Missing binary: $src" + } + Copy-Item $src $dst -Force + Write-Host " Copied $exe" -ForegroundColor Gray + } + + # Language DLLs (np3lng.dll, mplng.dll) + $srcLng = Join-Path $SourceDir "lng" + $dstLng = Join-Path $TargetDir "lng" + foreach ($dll in @('np3lng.dll', 'mplng.dll')) { + $src = Join-Path $srcLng $dll + $dst = Join-Path $dstLng $dll + if (-not (Test-Path $src)) { + Write-Warning "Missing language DLL: $src (skipping)" + continue + } + Copy-Item $src $dst -Force + Write-Host " Copied lng\$dll" -ForegroundColor Gray + } + + # Locale MUI files - copy each locale subdirectory that exists in the target + $localeCount = 0 + Get-ChildItem $dstLng -Directory | Where-Object { $_.Name -match '^\w{2}-\w{2}$' } | ForEach-Object { + $locale = $_.Name + $srcLocale = Join-Path $srcLng $locale + if (Test-Path $srcLocale) { + Copy-Item "$srcLocale\*" $_.FullName -Force -Recurse + $localeCount++ + } + else { + Write-Warning " Locale $locale not found in build output (skipping)" + } + } + Write-Host " Copied $localeCount locale directories" -ForegroundColor Gray +} + +# ============================================================ +# Main +# ============================================================ +$stopwatch = [System.Diagnostics.Stopwatch]::StartNew() +Write-Host "=== Notepad3 PortableApps Package Builder ===" -ForegroundColor Green +Write-Host "Repository: $RepoRoot" -ForegroundColor Cyan + +# ---------------------------------------------------------- +# Step 1: Version patching +# ---------------------------------------------------------- +Write-Step 1 "Version Patching" +if ($SkipVersionPatch) { + Write-Host "Skipped (VersionEx.h assumed up-to-date)" -ForegroundColor Yellow +} +else { + Push-Location $RepoRoot + try { + & (Join-Path $RepoRoot "Version.ps1") + if ($LASTEXITCODE -ne 0) { + throw "Version.ps1 failed with exit code $LASTEXITCODE" + } + } + finally { + Pop-Location + } +} + +# ---------------------------------------------------------- +# Step 2: Parse version info +# ---------------------------------------------------------- +Write-Step 2 "Reading Version Info" +$Version = Get-VersionFromHeader +Write-Host "Version: $Version" -ForegroundColor Green + +# Read dev name from _buildname.txt +$buildNamePath = Join-Path $PortableAppRoot "_buildname.txt" +if (Test-Path $buildNamePath) { + $DevName = (Get-Content $buildNamePath -First 1).Trim().Trim('"').Trim("'") +} +else { + $DevName = "" +} +Write-Host "DevName: '$DevName'" -ForegroundColor Green + +# ---------------------------------------------------------- +# Step 3: Detect toolset and build +# ---------------------------------------------------------- +Write-Step 3 "Detecting Visual Studio Toolset" +$Toolset = Get-PlatformToolset + +$BinX64 = Join-Path $RepoRoot "Bin\Release_x64_$Toolset" +$BinX86 = Join-Path $RepoRoot "Bin\Release_x86_$Toolset" + +Write-Step 4 "Building x64 and Win32 Release" +if ($SkipBuild) { + Write-Host "Skipped (using existing binaries)" -ForegroundColor Yellow + if (-not (Test-Path $BinX64)) { throw "x64 build output not found: $BinX64" } + if (-not (Test-Path $BinX86)) { throw "x86 build output not found: $BinX86" } +} +else { + $buildScript = Join-Path $ScriptDir "Build.ps1" + + Write-Host "Building x64 Release..." -ForegroundColor Yellow + & $buildScript -Platform x64 -Configuration Release + if ($LASTEXITCODE -ne 0) { + throw "x64 build failed with exit code $LASTEXITCODE" + } + + Write-Host "" + Write-Host "Building Win32 Release..." -ForegroundColor Yellow + & $buildScript -Platform Win32 -Configuration Release + if ($LASTEXITCODE -ne 0) { + throw "Win32 build failed with exit code $LASTEXITCODE" + } +} + +# ---------------------------------------------------------- +# Step 5: Copy binaries to portable app structure +# ---------------------------------------------------------- +Write-Step 5 "Copying Binaries to Portable App" + +$targetX64 = Join-Path $Notepad3AppDir "x64" +$targetX86 = Join-Path $Notepad3AppDir "x86" + +Write-Host "x64: $BinX64 -> $targetX64" -ForegroundColor Yellow +Copy-PlatformBinaries -SourceDir $BinX64 -TargetDir $targetX64 + +Write-Host "x86: $BinX86 -> $targetX86" -ForegroundColor Yellow +Copy-PlatformBinaries -SourceDir $BinX86 -TargetDir $targetX86 + +# ---------------------------------------------------------- +# Step 6: Process appinfo_template.ini +# ---------------------------------------------------------- +Write-Step 6 "Generating appinfo.ini from Template" + +$templatePath = Join-Path $AppInfoDir "appinfo_template.ini" +$outputPath = Join-Path $AppInfoDir "appinfo.ini" + +if (-not (Test-Path $templatePath)) { + throw "Template not found: $templatePath" +} + +$content = Get-Content $templatePath -Raw +$content = $content -replace 'xxxVERSIONxxx', $Version +$content = $content -replace 'xxxDEVNAMExxx', $DevName +Set-Content -Path $outputPath -Value $content -NoNewline + +Write-Host "Generated: $outputPath" -ForegroundColor Green +Write-Host " PackageVersion = $Version" -ForegroundColor Gray +Write-Host " DisplayVersion = $Version$DevName" -ForegroundColor Gray +Write-Host " Name = Notepad3Portable$DevName" -ForegroundColor Gray + +# ---------------------------------------------------------- +# Step 7: Generate PortableApps Launcher +# ---------------------------------------------------------- +Write-Step 7 "Generating Notepad3Portable.exe Launcher" + +if ($SkipLauncherGenerator) { + Write-Host "Skipped (using existing Notepad3Portable.exe)" -ForegroundColor Yellow +} +else { + $LauncherGeneratorPath = "d:\PortableApps\PortableApps.comLauncher\PortableApps.comLauncherGenerator.exe" + if (-not (Test-Path $LauncherGeneratorPath)) { + throw "PortableApps.comLauncherGenerator.exe not found: $LauncherGeneratorPath" + } + + Write-Host "Generator: $LauncherGeneratorPath" -ForegroundColor Cyan + Write-Host "App Dir: $PortableAppDir" -ForegroundColor Cyan + + # Passing the directory as a command-line argument triggers automatic compile mode. + $process = Start-Process -FilePath $LauncherGeneratorPath -ArgumentList "`"$PortableAppDir`"" ` + -Wait -PassThru + if ($process.ExitCode -ne 0) { + throw "PortableApps.comLauncherGenerator failed with exit code $($process.ExitCode)" + } + + $launcherExe = Join-Path $PortableAppDir "Notepad3Portable.exe" + if (-not (Test-Path $launcherExe)) { + throw "Launcher was not generated: $launcherExe" + } + Write-Host "Generated: $launcherExe" -ForegroundColor Green +} + +# ---------------------------------------------------------- +# Step 8: Build PortableApps package +# ---------------------------------------------------------- +Write-Step 8 "Building PortableApps Package" + +if (-not (Test-Path $InstallerPath)) { + throw "PortableApps.comInstaller.exe not found: $InstallerPath" +} + +Write-Host "Installer: $InstallerPath" -ForegroundColor Cyan +Write-Host "App Dir: $PortableAppDir" -ForegroundColor Cyan + +# Passing the directory as a command-line argument triggers automatic compile mode: +# welcome and options pages are skipped, finish page auto-closes on success. +$process = Start-Process -FilePath $InstallerPath -ArgumentList "`"$PortableAppDir`"" ` + -Wait -PassThru +if ($process.ExitCode -ne 0) { + throw "PortableApps.comInstaller failed with exit code $($process.ExitCode)" +} + +# Find the generated .paf.exe +$pafPattern = "Notepad3Portable_*.paf.exe" +$pafFiles = Get-ChildItem $PortableAppRoot -Filter $pafPattern | Sort-Object LastWriteTime -Descending +if ($pafFiles.Count -eq 0) { + throw "No .paf.exe output found matching $pafPattern in $PortableAppRoot" +} +$pafFile = $pafFiles[0] +$pafSize = [math]::Round($pafFile.Length / 1MB, 2) + +# ---------------------------------------------------------- +# Done +# ---------------------------------------------------------- +Write-Host "" +Write-Host "=== PortableApps Package Built Successfully! ===" -ForegroundColor Green +Write-Host " Output: $($pafFile.FullName)" -ForegroundColor Green +Write-Host " Size: $pafSize MB" -ForegroundColor Green +Write-Host " Time: $($stopwatch.Elapsed)" -ForegroundColor Cyan +exit 0 diff --git a/np3portableapp/Notepad3Portable/App/AppInfo/Launcher/Notepad3Portable.ini b/np3portableapp/Notepad3Portable/App/AppInfo/Launcher/Notepad3Portable.ini index 2dfaa0ddf5..5848b08a71 100644 --- a/np3portableapp/Notepad3Portable/App/AppInfo/Launcher/Notepad3Portable.ini +++ b/np3portableapp/Notepad3Portable/App/AppInfo/Launcher/Notepad3Portable.ini @@ -13,6 +13,7 @@ Registry=false XML=false [Environment] +PORTABLEAPPS_DIR=%PAL:PortableAppsDir% NOTEPAD3_PORTABLE_SETTINGS=%PAL:DataDir%\settings [FileWrite1] diff --git a/np3portableapp/Notepad3Portable/App/AppInfo/appinfo.ini b/np3portableapp/Notepad3Portable/App/AppInfo/appinfo.ini new file mode 100644 index 0000000000..e80e6668da --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/AppInfo/appinfo.ini @@ -0,0 +1,58 @@ +;Full details on this file: https://portableapps.com/development/portableapps.com_format#appinfo +[Format] +Type=PortableAppsFormat +Version=3.5 + +[Details] +Name=Notepad3Portable_DEV +AppId=Notepad3Portable +BaseAppName=Notepad3 +Publisher=Notepad3 Contibutors & Rizonesoft & PortableApps.com +Homepage=PortableApps.com/Notepad3Portable +Category=Development +Description=A Lightweight Universal Text Editor +Language=Multilingual +;Trademarks='thing' is a trademark of XYZ Inc +;InstallType= + +[License] +Shareable=true +OpenSource=true +Freeware=true +CommercialUse=true +;EULAVersion=1 + +[Version] +PackageVersion=7.26.402.6 +DisplayVersion=7.26.402.6_DEV + +[SpecialPaths] +Plugins=NONE + +[Dependencies] +UsesJava=false +UsesDotNetVersion=false + +[Control] +Icons=1 +Start=Notepad3Portable.exe +;ExtractIcon=App\Notepad3\x86\Notepad3.exe +;ExtractName=App\Notepad3\x86\Notepad3.exe +;BaseAppID=%BASELAUNCHERPATH%\App\Notepad3\x86\Notepad3.exe + +[Associations] +FileTypes=txt,html,htm,xmp,php,asp,css,js,vb,vbs,c,cpp,h,rs,mak,java,pas,inc,bat,diff,ps1,ahk,au3,avs,cmake,iss,latex,lua,nsi,nsh,nfo,tcl,rb +;FileTypeCommandLine=/Open=%1 +;FileTypeCommandLine-extension=/OpenExtension=%1 +;Protocols=http,https,gtp,gopher +;ProtocolCommandLine=--protocolhandler=%1 +;ProtocolCommandLine-protocol=--https:%1 +;SendTo=true +;SendToCommandLine=-multiplefiles "%1" +;Shell=true +;ShellCommand=/idlist,%I,%L + +[FileTypeIcons] +;swf=video +;ttp=custom +;qwe=app diff --git a/np3portableapp/Notepad3Portable/App/DefaultData/settings/Notepad3.ini b/np3portableapp/Notepad3Portable/App/DefaultData/settings/Notepad3.ini new file mode 100644 index 0000000000..fc42688289 --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/DefaultData/settings/Notepad3.ini @@ -0,0 +1,176 @@ +[Notepad3] +;Notepad3.ini=%USERPROFILE%\Notepad3.ini +;Notepad3.ini=%APPDATA%\Rizonesoft\Notepad3\Notepad3.ini +[Settings] +SettingsVersion=5 +[Settings2] +DefaultDirectory=%CSIDL:MYDOCUMENTS% +grepWin.exe=%PORTABLEAPPS_DIR%\grepWinPortable\grepWinPortable.exe +;IMEInteraction=0 +;DateTimeFormat= (-> ) +;DateTimeLongFormat= (-> ) +;TimeStampRegEx= (-> \$Date:[^\$]+\$ ) (Find-Pattern to Update Stamps) +;TimeStampFormat= (-> $Date: %s $) {Print format should fit to TimeStampRegEx} +;DefaultExtension=txt +;DefaultWindowPosition= +;DenyVirtualSpaceAccess=0 +;filebrowser.exe=minipath.exe +;FileCheckInverval=0 +;FileChangedIndicator=[@] +;FileDeletedIndicator=[X] +;FileDlgFilters= +;FileLoadWarningMB=4 +;MultiFileArg=0 +;NoCGIGuess=0 +;NoCopyLineOnEmptySelection=0 +;NoCutLineOnEmptySelection=0 +;NoFadeHidden=0 +;NoFileVariables=0 +;NoHTMLGuess=0 +;PortableMyDocs=1 +;OpacityLevel=75 +;FindReplaceOpacityLevel=50 +;RelativeFileMRU=1 +;ReuseWindow=0 +;SciFontQuality=3 +;SimpleIndentGuides=0 +;SingleFileInstance=1 +;ShellAppUserModelID=Rizonesoft.Notepad3 +;ShellUseSystemMRU=1 +;StickyWindowPosition=0 +;LaunchInstanceWndPosOffset=28 +;LaunchInstanceFullVisible=true +;UseOldStyleBraceMatching=0 +;WebTemplate1=https://google.com/search?q=%s +;WebTmpl1MenuName=Open Web Action 1 +;WebTemplate2=https://en.wikipedia.org/w/index.php?search=%s +;WebTmpl2MenuName=Open Web Action 2 +;ExtendedWhiteSpaceChars= +;AutoCompleteWordCharSet= +;AutoCompleteFillUpChars= +;LineCommentPostfixStrg= +;UpdateDelayMarkAllOccurrences=50 +;CurrentLineHorizontalSlop=40 +;CurrentLineVerticalSlop=5 +;UndoTransactionTimeout=0 +;AdministrationTool.exe= +;DevDebugMode=0 +;AnalyzeReliableConfidenceLevel=75 +;LocaleAnsiCodePageAnalysisBonus=33 +;LexerSQLNumberSignAsComment=1 +;ExitOnESCSkipLevel=2 +;ZoomTooltipTimeout=3200 +;WrapAroundTooltipTimeout=2000 +;LargeIconScalePrecent=150 +;DarkModeBkgColor=0x1F1F1F +;DarkModeBtnFaceColor=0x333333 +;DarkModeTxtColor=0xEFEFEF +;DarkModeHiglightContrast=75 +;HyperlinkShellExURLWithApp="" +;HyperlinkShellExURLCmdLnArgs="${URL}" (use ${URL} as place holder for clicked Hyperlink URL string) +;HyperlinkFileProtocolVerb="" (ShellExecuteEx()::lpVerb (""=default, "edit", "explore", "find", "open", "print", "properties", "runas") +[Statusbar Settings] +;VisibleSections=0 1 12 14 2 4 5 6 7 8 9 10 11 +;SectionPrefixes=Ln ,Col ,Sel ,Sb ,SLn ,Occ ,,,,,,,Ch ,Repl ,Eval , +;SectionPostfixes=,,,,,,,,,,,,,,, +;SectionWidthSpecs=30 20 20 20 20 20 0 0 0 0 0 0 20 20 20 +;ZeroBasedColumnIndex=0 +;ZeroBasedCharacterCount=0 +[Toolbar Images] +;BitmapDefault=<[:|relative_]\path_to>\Toolbar.bmp +;BitmapHot=<[:|relative_]\path_to>\ToolbarHot.bmp +;BitmapDisabled=<[:|relative_]\path_to>\ToolbarDisabled.bmp +[Toolbar Labels] +;01=New +;02=Open +;03=Browse +;04=Save +;05=Undo +;06=Redo +;07=Cut +;08=Copy +;09=Paste +;10=Find +;11=Replace +;12=Word Wrap +;13=Zoom In +;14=Zoom Out +;15=Scheme +;16=Customize Schemes +;17=Exit +;18=Save As +;19=Save Copy +;20=Delete +;21=Print +;22=Favorites +;23=Add to Favorites +;24=Toggle Folds +;25=Execute Document +;26=Focused View +;27=Monitoring Log +;28=History +;29=Always On Top +;30=Search in Files +[Custom Colors] +[Styles] +[Common Base] +[2nd Common Base] +[Text Files] +[ANSI Art] +[Apache Config Files] +[Assembly Script] +[AutoHotkey Script] +[AutoIt3 Script] +[AviSynth Script] +[Awk Script] +[Batch Files] +[C# Source Code] +[C/C++ Source Code] +[Cmake Script] +[Coffeescript] +[Configuration Files] +[CSS Style Sheets] +[CSV Prism] +[D Source Code] +[Dart Source Code] +[Diff Files] +[Fortran Source Code] +[Go Source Code] +[Inno Setup Script] +[Java Source Code] +[JavaScript] +[JSON] +[Julia Script] +[KiXtart Script] +[Kotlin Source Code] +[LaTeX Files] +[Lua Script] +[Makefiles] +[Markdown] +[MATLAB] +[Nim Source Code] +[NSIS Script] +[Pascal Source Code] +[Perl Script] +[PowerShell Script] +[Python Script] +[Registry Files] +[Resource Script] +[R-S-SPlus Statistics Code] +[Ruby Script] +[Rust Source Code] +[Shell Script] +[SQL Query] +[Tcl Script] +[TOML Config] +[VBScript] +[VHDL] +[Visual Basic] +[Web Source Code] +[XML Document] +[YAML] +[Window] +[Suppressed Messages] +[Recent Files] +[Recent Find] +[Recent Replace] diff --git a/np3portableapp/Notepad3Portable/App/DefaultData/settings/minipath.ini b/np3portableapp/Notepad3Portable/App/DefaultData/settings/minipath.ini new file mode 100644 index 0000000000..9cdb83937e --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/DefaultData/settings/minipath.ini @@ -0,0 +1,136 @@ +[minipath] +;minipath.ini=%USERPROFILE%\minipath.ini +;minipath.ini=%APPDATA%\Rizonesoft\Notepad3\minipath.ini +[Settings] +;SaveSettings=1 +;SingleClick=1 +;TrackSelect=1 +;FullRowSelect=0 +;UseRecycleBin=0 +;NoConfirmDelete=0 +;ClearReadOnly=1 +;RenameOnCollision=0 +;FocusEdit=1 +;AlwaysOnTop=0 +;MinimizeToTray=0 +;TransparentMode=0 +;EscFunction=2 +;StartupDirectory=2 +;Favorites=%USERPROFILE%\My Documents +;Quikview.exe=Quikview.exe +;QuikviewParams= +;OpenWithDir=%USERPROFILE%\Desktop +;FillMask=(32|64|128) ;; (DL_FOLDERS | DL_NONFOLDERS | DL_INCLHIDDEN) +;SortOptions=2 ;;(TYPE) +;SortReverse=0 +;FileFilter=*.* +;NegativeFilter=0 +;DefColorNoFilter=1 +;DefColorFilter=1 +;ColorNoFilter= ;; Window-Text +;ColorFilter= ;; Highlight +;ToolbarButtons=1 2 3 4 5 0 8 +;ShowToolbar=1 +;ShowStatusbar=1 +;ShowDriveBox=1 +;GotoDlgSizeX=0 +;OpenWithDlgSizeX=0 +;OpenWithDlgSizeY=0 +;CopyMoveDlgSizeX=0 +[Settings2] +;ReuseWindow=1 +;PortableMyDocs=1 +;NoFadeHidden=0 +;ToolbarLook=0 +;AutoRefreshRate=30 ;; 1/10 sec +;OpacityLevel=75 +;FocusLostOpacity=100 +[Filters] +&All Files=*.* +&Windows Text Files=*.txt;*.asc;*.bat;*.vbs;*.ini;*.inf;*.reg;*.xml;*.text;*.tmp;*.log;*.doc;*.scp;*.wtx;*.csv +&HTML Related Files=*.htm;*.html;*.shtml;*.php;*.css;*.js;*.vbs;*.gif;*.png;*.jpg;*.jpeg;*.bmp;*.txt;*.css;*.less;*.hss;*.sass;*.scss +&C/C++ Related Files=*.c;*.cpp;*.h;*.hpp;*.rc;*.ico;*.cur;*.bmp;*.txt;*.nsi;*.nsh;*.cs;*.csx;*.vala;*.cxx;*.cc;*.hxx;*.hh;*.mm;*.idl;*.midl;*.inl;*.odl;*.xpm;*.pch;*.lang +&No Binary Files=-*.exe;*.dll;*.cpl;*.ocx;*.bin;*.com;*.sys;*.scr;*.dat;*.dsk +;Text Files=*.txt;*.text;*.tmp;*.log;*.asc;*.doc;*.scp;*.wtx +;ANSI Art=*.nfo;*.diz +Apache Config Files=*.conf;*.cfg;*.cnf;*.htaccess;*.prefs;*.iface;*.prop;*.po;*.te +;Assembly Script=*.asm;*.s;*.sx;*.inc;*.a51 +;AutoHotkey_L Script=*.ahkl;*.ahk;*.ia;*.scriptlet +;AutoIt3 Script=*.au3 +;AviSynth Script=*.avs;*.avsi +;Awk Script=*.awk +;Batch Files=*.bat;*.cmd +;C# Source Code=*.cs;*.csx;*.vala +;C/C++ Source Code=*.c;*.cpp;*.cxx;*.cc;*.h;*.hpp;*.hxx;*.hh;*.mm;*.idl;*.midl;*.inl;*.odl;*.xpm;*.pch +;Cmake Script=*.cmake;*.ctest +;Coffeescript=*.coffee;*.cakefile +;Configuration Files=*.ini;*.inf;*.properties;*.oem;*.sif;*.url;*.sed;*.theme;*.clw +;CSS Style Sheets=*.css;*.less;*.hss;*.sass;*.scss +;CSV Prism=*.csv +;D Source Code=*.d;*.dd;*.di +;Dart Source Code=*.dart +;Diff Files=*.diff;*.patch +;Fortran Source Code=*.f;*.for;*.ftn;*.fpp;*.f90;*.f95;*.f03;*.f08;*.f15;*.f2k;*.hf +Go Source Code=*.go +;Inno Setup Script=*.iss;*.isl;*.islu +;Java Source Code=*.java;*.jad;*.aidl;*.bsh +JavaScript=*.js;*.jse;*.jsm;*.as;*.mjs;*.qs +;JSON=*.json;*.har;*.ipynb;*.wxcp;*.jshintrc;*.eslintrc;*.babelrc;*.prettierrc;*.stylelintrc;*.jsonld;*.jsonc;*.arcconfig;*.arclint;*.jscop +;Julia Script=*.jl +;KiXtart Script=*.kix +;Kotlin Source Code=*.kt;*.kts;*.ktm +;LaTeX Files=*.tex;*.latex;*.sty;*.texi;*.texinfo;*.txi +;Lua Script=*.lua;*.wlua;*.nse;*.luadoc;*.luax +Makefiles=*.mak;*.make;*.mk;*.dsp;*.msc;*.msvc;*.am;*.pro;*.pri;*.gmk;*.ninja;*.dsw +;Markdown=*.md;*.markdown;*.mdown;*.mkdn;*.mkd +MATLAB=*.matlab;*.m;*.sce;*.sci +;Nim Source Code=*.nim;*.nimrod +;NSIS Script=*.nsi;*.nsh +Pascal Source Code=*.pas;*.dpr;*.dpk;*.dfm;*.pp;*.lfm;*.lpr;*.fpd +;Perl Script=*.pl;*.pm;*.cgi;*.pod;*.plx;*.stp +;PowerShell Script=*.ps1;*.psd1;*.psm1;*.psc1 +Python Script=*.py;*.pyw;*.pyx;*.pxd;*.pxi;*.boo;*.empy;*.cobra;*.gs +;Registry Files=*.reg +Resource Script=*.rc;*.rc2;*.rct;*.rh;*.dlg;*.lang +;R-S-SPlus Statistics Code=*.r;*.rdata;*.rds;*.rda +Ruby Script=*.rb;*.ruby;*.rbw;*.rake;*.rjs;*.rakefile;*.gemspec;*.podspec +;Rust Source Code=*.rs;*.rust +;Shell Script=*.sh;*.csh;*.zsh;*.bash;*.tcsh;*.m4;*.in +;SQL Query=*.sql;*.mysql;*.hsql;*.pkb +;Tcl Script=*.tcl;*.itcl;*.tm +;TOML Config=*.toml +;VBScript=*.vbs;*.dsm +;VHDL=*.vhdl;*.vhd +;Visual Basic=*.vb;*.bas;*.frm;*.cls;*.ctl;*.pag;*.dsr;*.dob +;Web Source Code=*.html;*.htm;*.asp;*.aspx;*.shtml;*.htd;*.xhtml;*.php;*.php3;*.phtml;*.htt;*.cfm;*.tpl;*.dtd;*.hta;*.htc;*.jsp;*.mht;*.jd +XML Document=*.xml;*.xsl;*.rss;*.svg;*.xul;*.xsd;*.xslt;*.axl;*.rdf;*.xaml;*.vcproj;*.ffs_gui;*.nzb;*.resx;*.plist;*.xrc;*.fbp;*.manifest +;YAML=*.yaml;*.yml +[Toolbar Images] +;BitmapDefault= +;BitmapHot= +;BitmapDisabled= +[Toolbar Labels] +;01=Back +;02=Forward +;03=Up +;04=Root +;05=(none) +;06=Previous File +;07=Next File +;08=(none) +;09=Quickview +;10=Save As +;11=Copy/Move +;12=Recycle +;13=Delete +;14=Filter +[Target Application] +;UseTargetApplication= ;; =>Notepad3.exe +;TargetApplicationPath= +;TargetApplicationParams= +;TargetApplicationMode= +;TargetApplicationWndClass= +;DDEMessage= +;DDEApplication= +;DDETopic= +[Window] diff --git a/np3portableapp/Notepad3Portable/App/DefaultData/settings/themes/Dark.ini b/np3portableapp/Notepad3Portable/App/DefaultData/settings/themes/Dark.ini new file mode 100644 index 0000000000..4b84006d44 --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/DefaultData/settings/themes/Dark.ini @@ -0,0 +1,756 @@ +# Lexer Styles "Dark" taken from Axl Cash (https://www.axlcash.com/notepad2-dark-theme-schemes-style-or-whatever-you-call-it) + +[Custom Colors] +01=#252526 +02=#1346CE +03=#A2C5D4 +04=#52A5F8 +05=#0D8206 +06=#B2D766 +07=#B5B5B9 +08=#F6B05B +09=#54EDBF +10=#FCA287 +11=#ACFBC0 +12=#F2B40D +13=#F2450D +14=#F53D3E +15=#F653F6 +16=#92FB53 +[Common Base] +Default Style=font:$Code; fore:#FFFFE2; back:#252526 +Margins and Line Numbers=bold; size:-2; fore:#A4FFFF; back:#444444 +Matching Braces (Indicator)=fore:#009100; back:#252526; alpha:40; alpha2:220; indic_roundbox +Matching Braces Error (Indicator)=fore:#FF0080; back:#252526; alpha:140; alpha2:220; indic_roundbox +Control Characters (Font)=size:-1; fore:#FFF1A8; back:#252526 +Indentation Guide (Color)=fore:#A0A0A0; back:#252526 +Selected Text (Colors)=fore:#FFFFE2; back:#409FFF; eolfilled; alpha:80 +Whitespace (Colors, Size 0-12)=fore:#666600 +Current Line Background (Color)=size:2; fore:#4F9D9D; back:#C1C1C1; alpha:50 +Caret (Color, Size 1-3)=fore:#80FF80 +Long Line Marker (Colors)=fore:#954A00; back:#181818 +Extra Line Spacing (Size)=back:#252526 +Bookmarks and Folding (Colors, Size)=size:+2; fore:#888888; back:#0095DD; alpha:100 +Mark Occurrences (Indicator)=fore:#00FF80; back:#B0FFB0; alpha:100; alpha2:100; indic_roundbox +Hyperlink Hotspots=bold; italic; fore:#FFFF80; back:#2F8CFF; indic_plain +Unicode-Point Hover=fore:#00FA00; alpha:60; alpha2:180; indic_compositionthick +Multi Edit Indicator=fore:#FFA000; alpha:60; alpha2:180; indic_roundbox +Change History Marker Modified=fore:#FF8000 +Change History Marker Saved=fore:#00A000; back:#00A000 +Change History Marker Reverted to Modified=fore:#A0C000; back:#A0C000 +Change History Marker Reverted to Origin=fore:#40A0BF; back:#40A0BF +Inline-IME Color=fore:#00FF00; back:#252526 +FileNameExtensions= +[2nd Common Base] +2nd Default Style=font:Courier New; fore:#FFFFE2; back:#252526 +2nd Margins and Line Numbers=font:Courier New; bold; size:-1; fore:#A4FFFF; back:#444444 +2nd Matching Braces (Indicator)=fore:#009100; back:#252526; alpha:40; alpha2:220; indic_roundbox +2nd Matching Braces Error (Indicator)=fore:#FF0080; back:#252526; alpha:140; alpha2:220; indic_roundbox +2nd Control Characters (Font)=size:-1; fore:#FFF1A8; back:#252526 +2nd Indentation Guide (Color)=fore:#A0A0A0; back:#252526 +2nd Selected Text (Colors)=fore:#FFFFE2; back:#409FFF; eolfilled; alpha:80 +2nd Whitespace (Colors, Size 0-12)=fore:#666600; back:#252526 +2nd Current Line Background (Color)=size:2; fore:#4F9D9D; back:#C1C1C1; alpha:50 +2nd Caret (Color, Size 1-3)=fore:#80FF80 +2nd Long Line Marker (Colors)=fore:#954A00; back:#181818 +2nd Extra Line Spacing (Size)=back:#252526 +2nd Bookmarks and Folding (Colors, Size)=size:+2; fore:#888888; back:#0095DD; alpha:100 +2nd Mark Occurrences (Indicator)=fore:#00FF80; back:#B0FFB0; alpha:100; alpha2:100; indic_roundbox +2nd Hyperlink Hotspots=bold; italic; fore:#FFFF80; back:#52A5F8; indic_plain +2nd Unicode-Point Hover=fore:#0000FA; alpha:60; alpha2:180; indic_compositionthick +2nd Multi Edit Indicator=fore:#00A5FF; indic_box +2nd Change History Marker Modified=fore:#FF8000 +2nd Change History Marker Saved=fore:#00A000; back:#00A000 +2nd Change History Marker Reverted to Modified=fore:#A0C000; back:#A0C000 +2nd Change History Marker Reverted to Origin=fore:#40A0BF; back:#40A0BF +2nd Inline-IME Color=fore:#00FF00; back:#252526 +FileNameExtensions= +[Text Files] +Margins and Line Numbers=font:Consolas; size:-2 +Extra Line Spacing (Size)=size:-1 +FileNameExtensions=txt; text; tmp; log; asc; doc; scp; wtx +[ANSI Art] +Default=font:Lucida Console; thin; size:11; smoothing:aliased +Margins and Line Numbers=font:Lucida Console; size:-2 +Extra Line Spacing (Size)=size:-1 +FileNameExtensions=nfo; diz; \^Readme$ +[Apache Config Files] +Comment=fore:#75715E +String=fore:#E6DB74 +Number=fore:#AE81FF +Directive=fore:#003CE6 +IP Address=bold; fore:#FF4000 +FileNameExtensions=conf; cfg; cnf; htaccess; prefs; iface; prop; po; te; \^Kconfig$; \^Doxyfile$ +[Assembly Script] +Comment=fore:#75715E +String=fore:#E6DB74 +Number=fore:#AE81FF +Operator=fore:#F92672 +CPU Instruction=fore:#0A246A +FPU Instruction=fore:#0A246A +Extended Instruction=fore:#0A246A +Directive=fore:#0A246A +Directive Operand=fore:#0A246A +Register=fore:#75715E +FileNameExtensions=asm; s; sx; inc; a51 +[AutoHotkey Script] +Comment=fore:#008000 +Escape=italic; fore:#660000 +Syntax Operator=fore:#7F200F +Expression Operator=fore:#FF4F00 +String=fore:#404040 +Number=fore:#FF9000 +Identifier=fore:#CF2F0F +Variable Dereferencing=fore:#990055 +Label=fore:#0000DD +Flow of Control=fore:#0000DD +Command=bold; fore:#0000DD +Function=fore:#DD00DD +Directive=italic; fore:#4A0000 +Keys & Buttons=bold; fore:#FF00FF +Built-In Variables=bold; fore:#EE3010 +Special=italic; fore:#BD8E00 +Variable Keyword=italic; fore:#CF00CF; back:#F9F9FF +FileNameExtensions=ahk; ahkl; ia; scriptlet +[AutoIt3 Script] +Comment=fore:#008000 +Number=fore:#008080 +Function=fore:#0000FF +User-Defined Function=fore:#0000FF +Keyword=fore:#0000FF +Macro=fore:#0080FF +String=fore:#008080 +Operator=fore:#C000C0 +Variable=fore:#808000 +Send Key=fore:#FF0000 +Preprocessor=fore:#FF8000 +Special=fore:#FF8000 +FileNameExtensions=au3 +[AviSynth Script] +Comment=fore:#008000 +String=fore:#7F007F +Number=fore:#007F7F +Keyword=bold; fore:#00007F +Filter=bold; fore:#00007F +Plugin=bold; fore:#0080C0 +Function=fore:#007F7F +Clip Property=fore:#00007F +FileNameExtensions=avs; avsi +[Awk Script] +Keyword=bold; fore:#0000A0 +Keyword 2nd=bold; italic; fore:#6666FF +Comment=fore:#808080 +String=fore:#008000 +Number=fore:#C04000 +Operator=fore:#B000B0 +FileNameExtensions=awk +[Batch Files] +Default=back:#000000 +Comment=fore:#75715E +Keyword=fore:#26B5F9 +Identifier=fore:#003CE6; back:#FFF1A8 +Operator=fore:#B000B0 +Command=bold +Label=fore:#C80000; back:#F4F4F4; eolfilled +FileNameExtensions=bat; cmd +[C# Source Code] +Identifier=fore:#FFFFFF +Comment=fore:#0D8206 +Keyword=fore:#52A5F8 +Keyword 2nd=bold; italic; fore:#804000 +Global Class=fore:#2B91AF +String=fore:#FCA287 +Number=fore:#80FF80 +Operator=fore:#FFFFFF +Preprocessor=fore:#808080 +Verbatim String=fore:#FCA287 +Comment Doc=fore:#808080 +Comment Doc Word=bold; fore:#808080 +Comment Doc Error=italic; fore:#800000 +Task Marker=bold; fore:#208080 +FileNameExtensions=cs; csx; vala +[C/C++ Source Code] +Identifier=fore:#B5B5B9 +Comment=fore:#0D8206 +Keyword=fore:#3A6EA5 +Keyword 2nd=bold; italic; fore:#3C6CDD +Typedefs/Classes=bold; italic; fore:#800000 +String=fore:#FCA287 +Number=fore:#ACFBC0 +Operator=fore:#808080 +Preprocessor=fore:#808080 +Verbatim=fore:#B000B0 +Comment Doc=fore:#808080 +Comment Doc Word=bold; fore:#808080 +Comment Doc Error=italic; fore:#800000 +Task Marker=bold; fore:#208080 +FileNameExtensions=c; cpp; cxx; cc; h; hpp; hxx; hh; mm; idl; midl; inl; odl; xpm; pch +[Cmake Script] +Comment=fore:#008000 +String=fore:#7F007F; back:#EEEEEE +Function=fore:#00007F +Parameter=fore:#7F200F +Variable=fore:#CC3300 +While Def=fore:#00007F +For Each Def=fore:#00007F +If Def=fore:#00007F +Macro Def=fore:#00007F +Variable within String=fore:#CC3300; back:#EEEEEE +Number=fore:#008080 +FileNameExtensions=cmake; ctest; \^cmakelists\.txt$ +[Coffeescript] +Comment=fore:#646464 +String=fore:#008000 +Preprocessor=fore:#FF8000 +Identifier=bold; fore:#0A246A +Operator=fore:#B000B0 +Number=fore:#FF0000 +Regex=fore:#006633; back:#FFF1A8 +FileNameExtensions=coffee; cakefile +[Configuration Files] +Default=back:#000000 +Key=fore:#00006D +Comment=fore:#0D8206 +Section=fore:#3A6EA5 +Assignment=fore:#A6E22E +Default Value=fore:#FF0000 +FileNameExtensions=ini; inf; properties; oem; sif; url; sed; theme; clw; editorconfig +[CSS Style Sheets] +Default=fore:#FFFFFF; back:#000000 +Comment=fore:#008000 +HTML Tag=bold; fore:#B28B40 +Tag-Class=bold; fore:#B28B40 +Tag-ID=bold; fore:#B28B40 +Tag-Attribute=fore:#B28B40 +Pseudo-Class=fore:#B000B0 +Pseudo-Element=fore:#B00050 +CSS Property=fore:#35BDFF +String=fore:#FF8080 +Value=fore:#FFFFFF +Operator=fore:#DFE1B1 +Important=bold; fore:#DFE1B1 +Directive=bold +Media=bold; fore:#0A246A +Variable=bold; fore:#FF4000 +Unknown Pseudo-Class=fore:#FF0000 +Unknown Property=fore:#FF0000 +FileNameExtensions=css; less; hss; sass; scss +[CSV Prism] +Extra Line Spacing (Size)=size:-1 +Column 0=fore:#9400D3 +Column 1=fore:#1C01AF +Column 2=fore:#0162F3 +Column 3=fore:#28A4FF +Column 4=fore:#01C2C2 +Column 5=fore:#00D530 +Column 6=fore:#80D500 +Column 7=fore:#D3E401 +Column 8=fore:#FE9901 +Column 9=fore:#D90000 +FileNameExtensions=csv +[D Source Code] +Comment=fore:#008000 +Comment Doc=fore:#0040A0 +Number=fore:#FF0000 +Keyword=bold; fore:#0A246A +Keyword 2nd=bold; fore:#0A246A +Typedef=italic; fore:#0A246A +String=italic; fore:#3C6CDD +Operator=fore:#B000B0 +FileNameExtensions=d; dd; di +[Dart Source Code] +Keyword=fore:#0000FF +Keyword 2nd=fore:#0000FF +Meta-Data=fore:#FF8000 +Class=fore:#0080FF +Enumeration=fore:#FF8000 +Function=fore:#A46000 +Comment=fore:#608060 +Comment Doc=fore:#408040 +Task Marker=bold; fore:#408080 +String=fore:#008000 +TriQ-String=fore:#F08000 +Verbatim String=fore:#F08000 +ESC Sequence=fore:#0080C0 +Label=fore:#7C5AF3 +Number=fore:#FF0000 +Variable=fore:#9E4D2A +Operator=fore:#7C5AF3 +Symbol Identifier=fore:#7C5AF3 +Symbol Operator=fore:#7C5AF3 +FileNameExtensions=dart +[Diff Files] +Comment=fore:#75715E +Command=bold; fore:#0A246A +Source and Destination=bold; italic; fore:#4C4745 +Position Setting=fore:#0000FF +Line Addition=back:#13354A; eolfilled +Line Removal=fore:#960050; back:#1E0010; eolfilled +Line Change=fore:#89807D; back:#4C4745; eolfilled +FileNameExtensions=diff; patch +[Fortran Source Code] +Preprocessor=fore:#FF8000 +Comment=italic; fore:#808080 +Keyword=bold; fore:#0080FF +Function=bold; italic; fore:#00B3FF +User-Defined Function=bold; italic; fore:#8678FE +String Single Quoted=fore:#008800 +String Double Quoted=fore:#008800 +String EOL=fore:#008000 +Number=fore:#7C00F9 +Operator=bold; fore:#0AB456 +Label=fore:#FF0080 +Continuation=fore:#D8F766 +FileNameExtensions=f; for; ftn; fpp; f90; f95; f03; f08; f15; f2k; hf +[Go Source Code] +Comment=fore:#008000 +Number=fore:#FF0000 +Keyword=bold; fore:#0A246A +Keyword 2nd=bold; fore:#0A246A +Typedef=italic; fore:#0A246A +String=italic; fore:#3C6CDD +Operator=fore:#B000B0 +FileNameExtensions=go +[Inno Setup Script] +Comment=fore:#008000 +Keyword=fore:#0000FF +Parameter=fore:#0000FF +Section=bold; fore:#000080 +Preprocessor=fore:#CC0000 +Inline Expansion=fore:#800080 +Pascal Comment=fore:#008000 +Pascal Keyword=fore:#0000FF +FileNameExtensions=iss; isl; islu +[Java Source Code] +Comment=fore:#008000 +Keyword=fore:#F92672 +Keyword 2nd=bold; fore:#A46000 +String=fore:#E6DB74 +Number=fore:#AE81FF +Operator=fore:#F92672 +Comment Doc=fore:#808080 +Comment Doc Word=bold; fore:#808080 +Comment Doc Error=italic; fore:#800000 +Task Marker=bold; fore:#208080 +FileNameExtensions=java; jad; aidl; bsh +[JavaScript] +Comment=fore:#008000 +Keyword=fore:#0080C0 +String=fore:#FF8080 +Regex=fore:#804000 +Number=fore:#FFFFFF +Operator=fore:#FFFFFF +Comment Doc=fore:#808080 +Comment Doc Word=bold; fore:#808080 +Comment Doc Error=italic; fore:#800000 +Task Marker=bold; fore:#208080 +FileNameExtensions=js; jse; jsm; as; mjs; qs +[JSON] +Comment=fore:#646464 +Keyword=bold; fore:#A46000 +LD Keyword=bold; fore:#A61D04 +String=fore:#008000 +Unclosed String=fore:#FFFFFF; back:#FF8040; eolfilled +Number=fore:#FF0000 +Operator=fore:#B000B0 +Property Name=fore:#002697 +ESC Sequence=fore:#0B982E +URL/IRI=fore:#0000FF +Compact IRI=fore:#D137C1 +Parsing Error=fore:#FFFF00; back:#A00000; eolfilled +FileNameExtensions=json; har; ipynb; wxcp; jshintrc; eslintrc; babelrc; prettierrc; stylelintrc; jsonld; jsonc; arcconfig; arclint; jscop +[Julia Script] +Comment=fore:#608060 +Number=fore:#FF0000 +Keyword=bold; fore:#0000FF +Keyword 2nd=bold; fore:#8A008A +String=fore:#BB2F00 +Operator=fore:#B53A00 +Type Operator=fore:#950095 +Identifier=fore:#00007B +Symbol=fore:#C0A030 +Macro Def=fore:#0080FF +Comment Doc=fore:#808080 +Literal String=fore:#B000B0 +Command=bold; fore:#0000DD +Annotation=fore:#FF8000 +Parsing Error=fore:#FFFF00; back:#A00000; eolfilled +FileNameExtensions=jl +[KiXtart Script] +Keyword=bold; fore:#265CFF +Function=fore:#9B009B +Macro=fore:#FFC000 +Comment=fore:#008000 +String=italic; fore:#8F8F8F +Operator=fore:#C80000 +Number=fore:#009797 +Variable=fore:#9E4D2A +FileNameExtensions=kix +[Kotlin Source Code] +Keyword=fore:#0000FF +Annotation=fore:#FF8000 +Class=fore:#0080FF +Interface=bold; fore:#1E90FF +Enumeration=fore:#FF8000 +Function=fore:#A46000 +Comment=fore:#608060 +Comment Doc=fore:#408080 +Comment Doc Word=fore:#408080 +Task Marker=bold; fore:#208080 +String=fore:#008000 +Verbatim String=fore:#F08000 +ESC Sequence=fore:#0080C0 +Back Ticks=fore:#9E4D2A +Label=fore:#7C5AF3 +Number=fore:#FF0000 +Variable=fore:#9E4D2A +Operator=fore:#B000B0 +FileNameExtensions=kt; kts; ktm +[LaTeX Files] +Command=fore:#0000FF +Comment=fore:#008000 +Math=fore:#FF0000 +Special Char=fore:#AAAA00 +Tag=fore:#0000FF +Verbatim Segment=fore:#666666 +Error=fore:#FFFF00; back:#A00000 +FileNameExtensions=tex; latex; sty; texi; texinfo; txi +[Lua Script] +Comment=fore:#008000 +Number=fore:#008080 +Keyword=fore:#00007F +Basic Functions=fore:#00007F +String, Table & Math Functions=fore:#00007F +Input, Output & System Facilities=fore:#00007F +String=fore:#B000B0 +Literal String=fore:#B000B0 +Preprocessor=fore:#FF8000 +Label=fore:#808000 +FileNameExtensions=lua; wlua; nse; luadoc; luax +[Makefiles] +Comment=fore:#75715E +Identifier=fore:#003CE6 +Target=fore:#003CE6; back:#FFC000 +Preprocessor=fore:#75715E +FileNameExtensions=mak; make; mk; dsp; msc; msvc; am; pro; pri; gmk; ninja; dsw; \^Makefile$; \^Kbuild$ +[Markdown] +Strong=bold +Emphasis=italic +Header 1=bold; fore:#FF0088 +Header 2=bold; fore:#FF0088 +Header 3=bold; fore:#FF0088 +Header 4=bold; fore:#FF0088 +Header 5=bold; fore:#FF0088 +Header 6=bold; fore:#FF0088 +Pre Char=fore:#00007F +Unordered List=bold; fore:#0080FF +Ordered List=bold; fore:#0080FF +Block Quote=fore:#00007F +Horizontal Rule=bold +Link=fore:#0000FF +Code=fore:#00007F; back:#EBEBEB +FileNameExtensions=md; markdown; mdown; mkdn; mkd +[MATLAB] +Comment=fore:#008000 +Command=bold +Number=fore:#FF8000 +Keyword=bold; fore:#00007F +String=fore:#7F007F +FileNameExtensions=matlab; m; sce; sci +[Nim Source Code] +Comment=italic; fore:#484A86 +Keyword=bold; fore:#5E8F60 +String Double Quoted=fore:#A4255B +String Single Quoted=fore:#A4255B +String Triple Double Quotes=fore:#A4255B +String Triple Single Quotes=fore:#A4255B +Number=fore:#252DBE +Operator=bold; fore:#4B4B4B +Function name=fore:#4B4B4B +Parsing Error=italic; fore:#FFFF00; back:#A00000 +FileNameExtensions=nim; nimrod +[NSIS Script] +Comment=fore:#008000 +String=fore:#666666; back:#EEEEEE +Function=fore:#0033CC +Variable=fore:#CC3300 +Variable within String=fore:#CC3300; back:#EEEEEE +Number=fore:#FF0000 +Constant=fore:#FF9900 +Section=fore:#0033CC +Sub Section=fore:#0033CC +Section Group=fore:#0033CC +Function Definition=fore:#0033CC +PageEx=fore:#0033CC +If Definition=fore:#0033CC +Macro Definition=fore:#0033CC +FileNameExtensions=nsi; nsh +[Pascal Source Code] +Comment=fore:#75715E +Keyword=fore:#F92672 +String=fore:#E6DB74 +Number=fore:#AE81FF +Operator=bold +Inline Asm=fore:#0000FF +Preprocessor=fore:#75715E +FileNameExtensions=pas; dpr; dpk; dfm; pp; lfm; lpr; fpd +[Perl Script] +Comment=fore:#75715E +Keyword=fore:#F92672 +String Double Quoted=fore:#E6DB74 +String Single Quoted=fore:#E6DB74 +Number=fore:#AE81FF +Operator=bold +Scalar $var=fore:#0A246A +Array @var=fore:#003CE6 +Hash %var=fore:#B000B0 +Symbol Table *var=fore:#3A6EA5 +Regex /re/ or m{re}=fore:#E6DB74 +Substitution s/re/ore/=fore:#E6DB74 +Back Ticks=fore:#E24000; back:#FFF1A8 +Here-Doc (Delimiter)=fore:#75715E +Here-Doc (Single Quoted, q)=fore:#75715E +Here-Doc (Double Quoted, qq)=fore:#75715E +Here-Doc (Back Ticks, qx)=fore:#75715E +Single Quoted String (Generic, q)=fore:#E6DB74 +Double Quoted String (qq)=fore:#E6DB74 +Back Ticks (qx)=fore:#E24000; back:#FFF1A8 +Regex (qr)=fore:#E6DB74 +Array (qw)=fore:#003CE6 +Prototype=fore:#800080; back:#FFE2FF +Format Identifier=bold; fore:#648000; back:#FFF1A8 +Format Body=fore:#648000; back:#FFF1A8 +POD (Common)=fore:#A46000; back:#FFFFC0; eolfilled +POD (Verbatim)=fore:#A46000; back:#FFFFC0; eolfilled +Data Section=fore:#A46000; back:#FFFFC0; eolfilled +Parsing Error=fore:#F8F8F0; back:#F92672 +FileNameExtensions=pl; pm; cgi; pod; plx; stp +[PowerShell Script] +Comment=fore:#75715E +Keyword=fore:#F92672 +String=fore:#E6DB74 +Number=fore:#AE81FF +Operator=bold +Variable=fore:#0A246A +Cmdlet=fore:#804000; back:#FFF1A8 +Alias=bold; fore:#0A246A +FileNameExtensions=ps1; psd1; psm1; psc1 +[Python Script] +Comment=fore:#75715E +Keyword=fore:#F92672 +Keyword 2nd=fore:#000088 +Attribute=fore:#008E8E +String Single Quoted=fore:#E6DB74 +String Double Quoted=fore:#E6DB74 +String Triple Single Quotes=fore:#E6DB74 +String Triple Double Quotes=fore:#E6DB74 +Decorator=fore:#F2B600 +Number=fore:#AE81FF +Operator=fore:#F92672 +Function Name=fore:#A6E22E +Class Name=fore:#A6E22E +FileNameExtensions=py; pyw; pyx; pxd; pxi; boo; empy; cobra; gs +[Registry Files] +Comment=fore:#008800 +String=fore:#008000 +Value Type=bold; fore:#00007F +Hex=fore:#7F0B0C +Added Key=bold; fore:#000000; back:#FF8040; eolfilled +Deleted Key=fore:#FF0000 +Escaped=bold; fore:#7D8187 +GUID in Key Path=fore:#7B5F15 +Parameter=fore:#0B6561 +Operator=bold +FileNameExtensions=reg +[Resource Script] +Comment=fore:#75715E +Keyword=fore:#F92672 +String=fore:#E6DB74 +Number=fore:#80FF80 +Operator=fore:#F92672 +Preprocessor=fore:#75715E +Comment Doc=fore:#808080 +Comment Doc Word=bold; fore:#808080 +Comment Doc Error=italic; fore:#800000 +Task Marker=bold; fore:#208080 +FileNameExtensions=rc; rc2; rct; rh; dlg; lang +[R-S-SPlus Statistics Code] +Comment=fore:#008000 +Keyword=bold; fore:#0A246A +Base Package Functions=bold; fore:#7F0000 +Other Package Functions=bold; fore:#7F007F +Number=fore:#0000FF +String=italic; fore:#3C6CDD +Operator=bold; fore:#B000B0 +Infix=fore:#660066 +Infix EOL=fore:#FF4000; back:#E0C0E0; eolfilled +Backticks=fore:#3C6CDD +Literal String=italic; fore:#3C6CDD +ESC Sequence=fore:#0080C0 +FileNameExtensions=r; rdata; rds; rda +[Ruby Script] +Comment=fore:#008000 +Keyword=fore:#00007F +Number=fore:#008080 +String=fore:#FF8000 +Class Name=fore:#0000FF +Function Name=fore:#007F7F +POD=fore:#004000; back:#C0FFC0; eolfilled +Regex=fore:#000000; back:#A0FFA0 +Symbol=fore:#C0A030 +Module Name=fore:#A000A0 +Instance Var=fore:#B00080 +Class Var=fore:#8000B0 +Data Section=fore:#600000; back:#FFF0D8; eolfilled +FileNameExtensions=rb; ruby; rbw; rake; rjs; rakefile; gemspec; podspec; \^Rakefile$; \^Podfile$ +[Rust Source Code] +Keyword=bold; fore:#248112 +Build-In Type=fore:#A9003D +Other Keyword=italic; fore:#248112 +Number=fore:#666666 +Comment=italic; fore:#488080 +String=fore:#B31C1B +Operator=fore:#666666 +Macro Definition=fore:#0A246A +Rust Lifetime=fore:#B000B0 +Parsing Error=fore:#F0F0F0; back:#F00000 +Byte String=fore:#C0C0C0 +FileNameExtensions=rs; rust +[Shell Script] +Comment=fore:#008000 +Number=fore:#008080 +Keyword=fore:#0000FF +String Double Quoted=fore:#008080 +String Single Quoted=fore:#800080 +Scalar=fore:#808000 +Parameter Expansion=fore:#808000; back:#FFFF99 +Back Ticks=fore:#FF0080 +Here-Doc (Single Quoted, q)=fore:#008080 +FileNameExtensions=sh; csh; zsh; bash; tcsh; m4; in; \^mozconfig$ +[SQL Query] +Default=bold; fore:#EC7600 +Comment=fore:#66747B +Keyword=bold; fore:#93C763 +Value Type=bold; fore:#000080 +String=fore:#E6DB74 +Identifier=bold; fore:#93C763 +Quoted Identifier=fore:#800080; back:#FFCCFF +Number=fore:#FFD351 +Operator=fore:#FFF1A8 +FileNameExtensions=sql; mysql; hsql; pkb +[Tcl Script] +Comment=fore:#008000 +Keyword=fore:#0000FF +Number=fore:#008080 +String=fore:#008080 +Identifier=fore:#800080 +Substitution=fore:#CC0000 +Modifier=fore:#FF00FF +FileNameExtensions=tcl; itcl; tm +[TOML Config] +Keyword=bold; fore:#FF0080 +Comment=fore:#008000 +Section=bold; fore:#000000; back:#FFF1A8; eolfilled +Key=bold; fore:#5E608F +Assignment=bold; fore:#FF2020 +Value=fore:#202020 +Number=fore:#0000E0 +Date-Time=fore:#950095 +String=italic; fore:#606060 +Parsing Error=fore:#FFFF00; back:#A00000; eolfilled +FileNameExtensions=toml +[VBScript] +Comment=fore:#0D8206 +Keyword=fore:#3A6EA5 +String=fore:#FCA287 +Number=fore:#ACFBC0 +FileNameExtensions=vbs; dsm +[VHDL] +Comment=fore:#008800 +Number=fore:#FF0000 +String=fore:#008000 +Operator=fore:#B000B0 +Keyword=bold; fore:#0A246A +Standard Operator=bold; fore:#0A246A +Standard Type=fore:#FF8000 +FileNameExtensions=vhdl; vhd +[Visual Basic] +Comment=fore:#0D8206 +Keyword=fore:#3A6EA5 +Identifier=fore:#FFFFFF +String=fore:#FCA287 +Number=fore:#92FB53 +Operator=fore:#FFFFFF +Preprocessor=fore:#52A5F8 +FileNameExtensions=vb; bas; frm; cls; ctl; pag; dsr; dob +[Web Source Code] +Default=fore:#FFFFFF +HTML Tag=fore:#0080C0 +HTML Unknown Tag=fore:#C80000 +HTML Attribute=fore:#80FFFF +HTML Unknown Attribute=fore:#C80000 +HTML Value=fore:#FFFFFF +HTML String=fore:#FFFFFF +HTML Other Inside Tag=fore:#FFFFFF +HTML Comment=fore:#008000 +HTML Entity=fore:#0080C0 +HTML Element Text=fore:#E0E2E4 +XML Identifier=bold; fore:#881280 +SGML=fore:#0080C0 +CDATA=fore:#E0E2E4 +ASP Start Tag=fore:#0080C0 +PHP Start Tag=fore:#FFFFFF +PHP Comment=fore:#FFFFFF +PHP Keyword=fore:#92C654 +PHP String=font:Lucida Console; size:9; fore:#808080 +PHP Simple String=fore:#EB7517 +PHP Number=fore:#FFCD22 +PHP Operator=fore:#E7AF66 +PHP Variable=font:Lucida Console; size:9; fore:#678CB1 +PHP String Variable=fore:#EB7517 +PHP Complex Variable=fore:#EB7517 +JS Comment=fore:#8F0306; back:#9F9F9F +JS Keyword=bold; fore:#3A6EA5 +JS String=fore:#FF8080 +JS Regex=fore:#FFFFFF +JS Number=fore:#2291FF +JS Symbols=fore:#FFFFFF +ASP JS Comment=fore:#75715E +ASP JS Keyword=fore:#F92672 +ASP JS String=fore:#E6DB74 +ASP JS Regex=fore:#E6DB74 +ASP JS Number=fore:#AE81FF +ASP JS Symbols=fore:#F92672 +VBS Comment=fore:#75715E +VBS Keyword=fore:#F92672 +VBS String=fore:#E6DB74 +VBS Number=fore:#AE81FF +ASP VBS Comment=fore:#75715E +ASP VBS Keyword=fore:#F92672 +ASP VBS String=fore:#E6DB74 +ASP VBS Number=fore:#AE81FF +FileNameExtensions=html; htm; asp; aspx; shtml; htd; xhtml; php; php3; phtml; htt; cfm; tpl; dtd; hta; htc; jsp; mht; jd +[XML Document] +Default=fore:#FFFFFF; back:#000000 +XML Tag=fore:#3A6EA5 +XML Attribute=fore:#52A5F8 +XML Value=fore:#0080C0 +XML String=fore:#FFFFFF +XML Other Inside Tag=fore:#0080C0 +XML Comment=fore:#008000 +XML Entity=fore:#0080C0 +XML Identifier=fore:#808080 +SGML=fore:#F92672 +CDATA=fore:#75715E +FileNameExtensions=xml; xsl; rss; svg; xul; xsd; xslt; axl; rdf; xaml; vcproj; ffs_gui; nzb; resx; plist; xrc; fbp; manifest +[YAML] +Comment=fore:#008800 +Identifier=bold; fore:#0A246A +Keyword=fore:#880088 +Number=fore:#FF8000 +Reference=fore:#008888 +Document=bold; fore:#FFFFFF; back:#000088; eolfilled +Text=fore:#404040 +Error=bold; italic; fore:#FFFFFF; back:#FF0000; eolfilled +Operator=fore:#333366 +FileNameExtensions=yaml; yml diff --git a/np3portableapp/Notepad3Portable/App/DefaultData/settings/themes/Obsidian.ini b/np3portableapp/Notepad3Portable/App/DefaultData/settings/themes/Obsidian.ini new file mode 100644 index 0000000000..c12309b0a0 --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/DefaultData/settings/themes/Obsidian.ini @@ -0,0 +1,757 @@ +# Lexer Styles "Obsidian" taken from xCONFLiCTiONx (https://gist.github.com/xCONFLiCTiONx/43c035627909a92572334559b5685cf0) + +[Custom Colors] +02=#B5E2F5 +03=#A2C5D4 +04=#89ACEC +06=#B2D766 +08=#F6B05B +11=#594A05 +12=#F2B40D +13=#F2450D +14=#F53D3E +15=#F653F6 +16=#BE9450 +01=#000000 +05=#006633 +07=#648000 +09=#FFFFFF +10=#FFFFE2 +[Common Base] +Default Style=font:$Code; fore:#EAEAEA; back:#000000 +Margins and Line Numbers=size:-2; fore:#A4FFFF; back:#444444 +Matching Braces (Indicator)=fore:#00FF40; alpha:80; alpha2:80; indic_roundbox +Matching Braces Error (Indicator)=fore:#FF0080; alpha:140; alpha2:140; indic_roundbox +Control Characters (Font)=size:-1 +Indentation Guide (Color)=fore:#A0A0A0 +Selected Text (Colors)=fore:#FFFFFF; back:#3478AB; eolfilled +Whitespace (Colors, Size 0-12)=fore:#FF4000 +Current Line Background (Color)=fore:#F7F7F7; back:#000000 +Caret (Color, Size 1-3)=size:2; fore:#FFFFFF +Long Line Marker (Colors)=fore:#BCBCBC; back:#3B3A32 +Extra Line Spacing (Size)=size:2 +Bookmarks and Folding (Colors, Size)=size:+2; fore:#000000; back:#808080; alpha:80 +Mark Occurrences (Indicator)=fore:#FF0000; alpha:100; alpha2:100; indic_roundbox +Hyperlink Hotspots=fore:#FFFF80; back:#4AA5FF; indic_plain +Unicode-Point Hover=fore:#00FA00; alpha:60; alpha2:180; indic_compositionthick +Multi Edit Indicator=fore:#FFA000; alpha:60; alpha2:180; indic_roundbox +Change History Marker Modified=fore:#FF8000 +Change History Marker Saved=fore:#00A000; back:#00A000 +Change History Marker Reverted to Modified=fore:#A0C000; back:#A0C000 +Change History Marker Reverted to Origin=fore:#40A0BF; back:#40A0BF +Inline-IME Color=fore:#00AA00 +FileNameExtensions= +[2nd Common Base] +2nd Default Style=font:Courier New; fore:#EAEAEA; back:#000000 +2nd Margins and Line Numbers=font:Courier New; size:-2; fore:#A4FFFF; back:#444444 +2nd Matching Braces (Indicator)=fore:#00FF40; alpha:80; alpha2:80; indic_roundbox +2nd Matching Braces Error (Indicator)=fore:#FF0080; alpha:140; alpha2:140; indic_roundbox +2nd Control Characters (Font)=size:-1 +2nd Indentation Guide (Color)=fore:#A0A0A0 +2nd Selected Text (Colors)=fore:#FFFFFF; back:#3478AB; eolfilled +2nd Whitespace (Colors, Size 0-12)=fore:#FF4000 +2nd Current Line Background (Color)=fore:#F7F7F7; back:#000000 +2nd Caret (Color, Size 1-3)=size:2; fore:#FFFFFF +2nd Long Line Marker (Colors)=fore:#BCBCBC; back:#3B3A32 +2nd Extra Line Spacing (Size)=size:2 +2nd Bookmarks and Folding (Colors, Size)=size:+2; fore:#000000; back:#808080; alpha:80 +2nd Mark Occurrences (Indicator)=fore:#FF0000; alpha:100; alpha2:100; indic_roundbox +2nd Hyperlink Hotspots=fore:#FFFF80; back:#89ACEC; indic_plain +2nd Unicode-Point Hover=fore:#0000FA; alpha:60; alpha2:180; indic_compositionthick +2nd Multi Edit Indicator=fore:#00A5FF; indic_box +2nd Change History Marker Modified=fore:#FF8000 +2nd Change History Marker Saved=fore:#00A000; back:#00A000 +2nd Change History Marker Reverted to Modified=fore:#A0C000; back:#A0C000 +2nd Change History Marker Reverted to Origin=fore:#40A0BF; back:#40A0BF +2nd Inline-IME Color=fore:#00AA00 +FileNameExtensions= +[Text Files] +Margins and Line Numbers=font:Consolas; size:-2 +Extra Line Spacing (Size)=size:-1 +FileNameExtensions=txt; text; tmp; log; asc; doc; scp; wtx +[ANSI Art] +Default=font:Lucida Console; size:11 +Margins and Line Numbers=font:Lucida Console; size:-2 +Extra Line Spacing (Size)=size:-1 +FileNameExtensions=nfo; diz; \^Readme$ +[Apache Config Files] +Comment=fore:#75715E +String=fore:#E0A596 +Number=fore:#AE81FF +Directive=fore:#003CE6 +IP Address=bold; fore:#FF4000 +FileNameExtensions=conf; cfg; cnf; htaccess; prefs; iface; prop; po; te; \^Kconfig$; \^Doxyfile$ +[Assembly Script] +Comment=fore:#75715E +String=fore:#E0A596 +Number=fore:#AE81FF +Operator=fore:#F92672 +CPU Instruction=fore:#0A246A +FPU Instruction=fore:#0A246A +Extended Instruction=fore:#0A246A +Directive=fore:#0A246A +Directive Operand=fore:#0A246A +Register=fore:#75715E +FileNameExtensions=asm; s; sx; inc; a51 +[AutoHotkey Script] +Comment=fore:#008000 +Escape=italic; fore:#660000 +Syntax Operator=fore:#7F200F +Expression Operator=fore:#FF4F00 +String=fore:#404040 +Number=fore:#FF9000 +Identifier=fore:#CF2F0F +Variable Dereferencing=fore:#990055 +Label=fore:#0000DD +Flow of Control=fore:#0000DD +Command=bold; fore:#0000DD +Function=fore:#DD00DD +Directive=italic; fore:#4A0000 +Keys & Buttons=bold; fore:#FF00FF +Built-In Variables=bold; fore:#EE3010 +Special=italic; fore:#BD8E00 +Variable Keyword=italic; fore:#CF00CF; back:#F9F9FF +FileNameExtensions=ahk; ahkl; ia; scriptlet +[AutoIt3 Script] +Comment=fore:#008000 +Number=fore:#008080 +Function=fore:#0000FF +User-Defined Function=fore:#0000FF +Keyword=fore:#0000FF +Macro=fore:#0080FF +String=fore:#008080 +Operator=fore:#C000C0 +Variable=fore:#808000 +Send Key=fore:#FF0000 +Preprocessor=fore:#FF8000 +Special=fore:#FF8000 +FileNameExtensions=au3 +[AviSynth Script] +Comment=fore:#008000 +String=fore:#7F007F +Number=fore:#007F7F +Keyword=bold; fore:#00007F +Filter=bold; fore:#00007F +Plugin=bold; fore:#0080C0 +Function=fore:#007F7F +Clip Property=fore:#00007F +FileNameExtensions=avs; avsi +[Awk Script] +Keyword=bold; fore:#0000A0 +Keyword 2nd=bold; italic; fore:#6666FF +Comment=fore:#808080 +String=fore:#008000 +Number=fore:#C04000 +Operator=fore:#B000B0 +FileNameExtensions=awk +[Batch Files] +Default=back:#000000 +Comment=fore:#0D8206 +Keyword=fore:#52A5F8 +Identifier=fore:#003CE6; back:#FFF1A8 +Operator=fore:#ADADAD +Command=bold +Label=fore:#2FEA00 +FileNameExtensions=bat; cmd +[C# Source Code] +Identifier=fore:#FFFFFF +Comment=fore:#0D8206 +Keyword=fore:#52A5F8 +Keyword 2nd=bold; italic; fore:#804000 +Global Class=fore:#54EDBF +String=fore:#E0A596 +Number=fore:#80FF80 +Operator=fore:#FFFFFF +Preprocessor=fore:#808080 +Verbatim String=fore:#E0A596 +Comment Doc=fore:#808080 +Comment Doc Word=bold; fore:#808080 +Comment Doc Error=italic; fore:#800000 +Task Marker=bold; fore:#208080 +FileNameExtensions=cs; csx; vala +[C/C++ Source Code] +Identifier=fore:#B000B0 +Comment=fore:#0D8206 +Keyword=fore:#3A6EA5 +Keyword 2nd=bold; italic; fore:#3C6CDD +Typedefs/Classes=bold; italic; fore:#800000 +String=fore:#E0A596 +Number=fore:#ACFBC0 +Operator=fore:#808080 +Preprocessor=fore:#808080 +Verbatim=fore:#B000B0 +Comment Doc=fore:#808080 +Comment Doc Word=bold; fore:#808080 +Comment Doc Error=italic; fore:#800000 +Task Marker=bold; fore:#208080 +FileNameExtensions=c; cpp; cxx; cc; h; hpp; hxx; hh; mm; idl; midl; inl; odl; xpm; pch +[Cmake Script] +Comment=fore:#008000 +String=fore:#7F007F; back:#EEEEEE +Function=fore:#00007F +Parameter=fore:#7F200F +Variable=fore:#CC3300 +While Def=fore:#00007F +For Each Def=fore:#00007F +If Def=fore:#00007F +Macro Def=fore:#00007F +Variable within String=fore:#CC3300; back:#EEEEEE +Number=fore:#008080 +FileNameExtensions=cmake; ctest; \^cmakelists\.txt$ +[Coffeescript] +Comment=fore:#646464 +String=fore:#008000 +Preprocessor=fore:#FF8000 +Identifier=bold; fore:#0A246A +Operator=fore:#B000B0 +Number=fore:#FF0000 +Regex=fore:#006633; back:#FFF1A8 +FileNameExtensions=coffee; cakefile +[Configuration Files] +Default=back:#000000 +Key=fore:#00006D +Comment=fore:#0D8206 +Section=fore:#3A6EA5 +Assignment=fore:#A6E22E +Default Value=fore:#FF0000 +FileNameExtensions=ini; inf; properties; oem; sif; url; sed; theme; clw; editorconfig +[CSS Style Sheets] +Default=fore:#FFFFFF; back:#000000 +Comment=fore:#008000 +HTML Tag=bold; fore:#B28B40 +Tag-Class=bold; fore:#B28B40 +Tag-ID=bold; fore:#B28B40 +Tag-Attribute=fore:#B28B40 +Pseudo-Class=fore:#B000B0 +Pseudo-Element=fore:#B00050 +CSS Property=fore:#35BDFF +String=fore:#E0A596 +Value=fore:#FFFFFF +Operator=fore:#DFE1B1 +Important=bold; fore:#DFE1B1 +Directive=bold +Media=bold; fore:#0A246A +Variable=bold; fore:#FF4000 +Unknown Pseudo-Class=fore:#FF0000 +Unknown Property=fore:#FF0000 +FileNameExtensions=css; less; hss; sass; scss +[CSV Prism] +Extra Line Spacing (Size)=size:-1 +Column 0=fore:#9400D3 +Column 1=fore:#1C01AF +Column 2=fore:#0162F3 +Column 3=fore:#28A4FF +Column 4=fore:#01C2C2 +Column 5=fore:#00D530 +Column 6=fore:#80D500 +Column 7=fore:#D3E401 +Column 8=fore:#FE9901 +Column 9=fore:#D90000 +FileNameExtensions=csv +[D Source Code] +Comment=fore:#008000 +Comment Doc=fore:#0040A0 +Number=fore:#FF0000 +Keyword=bold; fore:#0A246A +Keyword 2nd=bold; fore:#0A246A +Typedef=italic; fore:#0A246A +String=italic; fore:#3C6CDD +Operator=fore:#B000B0 +FileNameExtensions=d; dd; di +[Dart Source Code] +Keyword=fore:#0000FF +Keyword 2nd=fore:#0000FF +Meta-Data=fore:#FF8000 +Class=fore:#0080FF +Enumeration=fore:#FF8000 +Function=fore:#A46000 +Comment=fore:#608060 +Comment Doc=fore:#408040 +Task Marker=bold; fore:#408080 +String=fore:#008000 +TriQ-String=fore:#F08000 +Verbatim String=fore:#F08000 +ESC Sequence=fore:#0080C0 +Label=fore:#7C5AF3 +Number=fore:#FF0000 +Variable=fore:#9E4D2A +Operator=fore:#7C5AF3 +Symbol Identifier=fore:#7C5AF3 +Symbol Operator=fore:#7C5AF3 +FileNameExtensions=dart +[Diff Files] +Comment=fore:#008000 +Command=bold; fore:#0A246A +Source and Destination=fore:#C80000; back:#FFF1A8; eolfilled +Position Setting=fore:#0000FF +Line Addition=fore:#002000; back:#80FF80; eolfilled +Line Removal=fore:#200000; back:#FF8080; eolfilled +Line Change=fore:#000020; back:#8080FF; eolfilled +FileNameExtensions=diff; patch +[Fortran Source Code] +Preprocessor=fore:#FF8000 +Comment=italic; fore:#808080 +Keyword=bold; fore:#0080FF +Function=bold; italic; fore:#00B3FF +User-Defined Function=bold; italic; fore:#8678FE +String Single Quoted=fore:#008800 +String Double Quoted=fore:#008800 +String EOL=fore:#008000 +Number=fore:#7C00F9 +Operator=bold; fore:#0AB456 +Label=fore:#FF0080 +Continuation=fore:#D8F766 +FileNameExtensions=f; for; ftn; fpp; f90; f95; f03; f08; f15; f2k; hf +[Go Source Code] +Comment=fore:#008000 +Number=fore:#FF0000 +Keyword=bold; fore:#0A246A +Keyword 2nd=bold; fore:#0A246A +Typedef=italic; fore:#0A246A +String=italic; fore:#3C6CDD +Operator=fore:#B000B0 +FileNameExtensions=go +[Inno Setup Script] +Comment=fore:#008000 +Keyword=fore:#0000FF +Parameter=fore:#0000FF +Section=bold; fore:#000080 +Preprocessor=fore:#CC0000 +Inline Expansion=fore:#800080 +Pascal Comment=fore:#008000 +Pascal Keyword=fore:#0000FF +FileNameExtensions=iss; isl; islu +[Java Source Code] +Comment=fore:#646464 +Keyword=bold; fore:#A46000 +Keyword 2nd=bold; fore:#A46000 +String=fore:#E0A596 +Number=fore:#FF0000 +Operator=fore:#B000B0 +Comment Doc=fore:#808080 +Comment Doc Word=bold; fore:#808080 +Comment Doc Error=italic; fore:#800000 +Task Marker=bold; fore:#208080 +FileNameExtensions=java; jad; aidl; bsh +[JavaScript] +Comment=fore:#646464 +Keyword=bold; fore:#A46000 +String=fore:#E0A596 +Regex=fore:#006633; back:#FFF1A8 +Number=fore:#FF0000 +Operator=fore:#B000B0 +Comment Doc=fore:#808080 +Comment Doc Word=bold; fore:#808080 +Comment Doc Error=italic; fore:#800000 +Task Marker=bold; fore:#208080 +FileNameExtensions=js; jse; jsm; as; mjs; qs +[JSON] +Comment=fore:#646464 +Keyword=bold; fore:#A46000 +LD Keyword=bold; fore:#A61D04 +String=fore:#008000 +Unclosed String=fore:#FFFFFF; back:#FF8040; eolfilled +Number=fore:#FF0000 +Operator=fore:#B000B0 +Property Name=fore:#002697 +ESC Sequence=fore:#0B982E +URL/IRI=fore:#0000FF +Compact IRI=fore:#D137C1 +Parsing Error=fore:#FFFF00; back:#A00000; eolfilled +FileNameExtensions=json; har; ipynb; wxcp; jshintrc; eslintrc; babelrc; prettierrc; stylelintrc; jsonld; jsonc; arcconfig; arclint; jscop +[Julia Script] +Comment=fore:#608060 +Number=fore:#FF0000 +Keyword=bold; fore:#0000FF +Keyword 2nd=bold; fore:#8A008A +String=fore:#BB2F00 +Operator=fore:#B53A00 +Type Operator=fore:#950095 +Identifier=fore:#00007B +Symbol=fore:#C0A030 +Macro Def=fore:#0080FF +Comment Doc=fore:#808080 +Literal String=fore:#B000B0 +Command=bold; fore:#0000DD +Annotation=fore:#FF8000 +Parsing Error=fore:#FFFF00; back:#A00000; eolfilled +FileNameExtensions=jl +[KiXtart Script] +Keyword=bold; fore:#265CFF +Function=fore:#9B009B +Macro=fore:#FFC000 +Comment=fore:#008000 +String=italic; fore:#8F8F8F +Operator=fore:#C80000 +Number=fore:#009797 +Variable=fore:#9E4D2A +FileNameExtensions=kix +[Kotlin Source Code] +Keyword=fore:#0000FF +Annotation=fore:#FF8000 +Class=fore:#0080FF +Interface=bold; fore:#1E90FF +Enumeration=fore:#FF8000 +Function=fore:#A46000 +Comment=fore:#608060 +Comment Doc=fore:#408080 +Comment Doc Word=fore:#408080 +Task Marker=bold; fore:#208080 +String=fore:#008000 +Verbatim String=fore:#F08000 +ESC Sequence=fore:#0080C0 +Back Ticks=fore:#9E4D2A +Label=fore:#7C5AF3 +Number=fore:#FF0000 +Variable=fore:#9E4D2A +Operator=fore:#B000B0 +FileNameExtensions=kt; kts; ktm +[LaTeX Files] +Command=fore:#0000FF +Comment=fore:#008000 +Math=fore:#FF0000 +Special Char=fore:#AAAA00 +Tag=fore:#0000FF +Verbatim Segment=fore:#666666 +Error=fore:#FFFF00; back:#A00000 +FileNameExtensions=tex; latex; sty; texi; texinfo; txi +[Lua Script] +Comment=fore:#008000 +Number=fore:#008080 +Keyword=fore:#00007F +Basic Functions=fore:#00007F +String, Table & Math Functions=fore:#00007F +Input, Output & System Facilities=fore:#00007F +String=fore:#B000B0 +Literal String=fore:#B000B0 +Preprocessor=fore:#FF8000 +Label=fore:#808000 +FileNameExtensions=lua; wlua; nse; luadoc; luax +[Makefiles] +Comment=fore:#008000 +Identifier=fore:#003CE6 +Target=fore:#003CE6; back:#FFC000 +Preprocessor=fore:#FF8000 +FileNameExtensions=mak; make; mk; dsp; msc; msvc; am; pro; pri; gmk; ninja; dsw; \^Makefile$; \^Kbuild$ +[Markdown] +Strong=bold; fore:#E68A00 +Emphasis=italic; fore:#E68A00 +Header 1=bold; fore:#3A6EA5 +Header 2=bold; fore:#3A6EA5 +Header 3=bold; fore:#3A6EA5 +Header 4=bold; fore:#3A6EA5 +Header 5=bold; fore:#3A6EA5 +Header 6=bold; fore:#3A6EA5 +Pre Char=fore:#55A5F4 +Unordered List=bold; fore:#52A5F8 +Ordered List=bold; fore:#52A5F8 +Block Quote=fore:#52A5F8 +Horizontal Rule=bold +Link=fore:#418FDE +Code=fore:#3A6EA5 +FileNameExtensions=md; markdown; mdown; mkdn; mkd +[MATLAB] +Comment=fore:#008000 +Command=bold +Number=fore:#FF8000 +Keyword=bold; fore:#00007F +String=fore:#7F007F +FileNameExtensions=matlab; m; sce; sci +[Nim Source Code] +Comment=fore:#880000 +Keyword=bold; fore:#000088 +String Double Quoted=fore:#008800 +String Single Quoted=fore:#008800 +String Triple Double Quotes=fore:#008800 +String Triple Single Quotes=fore:#008800 +Number=fore:#FF4000 +Operator=bold; fore:#666600 +Function name=fore:#4B4B4B +Parsing Error=italic; fore:#FFFF00; back:#A00000 +FileNameExtensions=nim; nimrod +[NSIS Script] +Comment=fore:#008000 +String=fore:#666666; back:#EEEEEE +Function=fore:#0033CC +Variable=fore:#CC3300 +Variable within String=fore:#CC3300; back:#EEEEEE +Number=fore:#FF0000 +Constant=fore:#FF9900 +Section=fore:#0033CC +Sub Section=fore:#0033CC +Section Group=fore:#0033CC +Function Definition=fore:#0033CC +PageEx=fore:#0033CC +If Definition=fore:#0033CC +Macro Definition=fore:#0033CC +FileNameExtensions=nsi; nsh +[Pascal Source Code] +Comment=fore:#646464 +Keyword=fore:#F92672 +String=fore:#E0A596 +Number=fore:#AE81FF +Operator=bold +Inline Asm=fore:#0000FF +Preprocessor=fore:#75715E +FileNameExtensions=pas; dpr; dpk; dfm; pp; lfm; lpr; fpd +[Perl Script] +Comment=fore:#75715E +Keyword=fore:#F92672 +String Double Quoted=fore:#E0A596 +String Single Quoted=fore:#E0A596 +Number=fore:#AE81FF +Operator=bold +Scalar $var=fore:#0A246A +Array @var=fore:#003CE6 +Hash %var=fore:#B000B0 +Symbol Table *var=fore:#3A6EA5 +Regex /re/ or m{re}=fore:#E6DB74 +Substitution s/re/ore/=fore:#E6DB74 +Back Ticks=fore:#E24000; back:#FFF1A8 +Here-Doc (Delimiter)=fore:#75715E +Here-Doc (Single Quoted, q)=fore:#75715E +Here-Doc (Double Quoted, qq)=fore:#75715E +Here-Doc (Back Ticks, qx)=fore:#75715E +Single Quoted String (Generic, q)=fore:#E0A596 +Double Quoted String (qq)=fore:#E0A596 +Back Ticks (qx)=fore:#E24000; back:#FFF1A8 +Regex (qr)=fore:#E6DB74 +Array (qw)=fore:#003CE6 +Prototype=fore:#800080; back:#FFE2FF +Format Identifier=bold; fore:#648000; back:#FFF1A8 +Format Body=fore:#648000; back:#FFF1A8 +POD (Common)=fore:#A46000; back:#FFFFC0; eolfilled +POD (Verbatim)=fore:#A46000; back:#FFFFC0; eolfilled +Data Section=fore:#A46000; back:#FFFFC0; eolfilled +Parsing Error=fore:#F8F8F0; back:#F92672 +FileNameExtensions=pl; pm; cgi; pod; plx; stp +[PowerShell Script] +Comment=fore:#75715E +Keyword=fore:#F92672 +String=fore:#E0A596 +Number=fore:#AE81FF +Operator=bold +Variable=fore:#0A246A +Cmdlet=fore:#804000; back:#FFF1A8 +Alias=bold; fore:#0A246A +FileNameExtensions=ps1; psd1; psm1; psc1 +[Python Script] +Comment=fore:#75715E +Keyword=fore:#F92672 +Keyword 2nd=fore:#000088 +Attribute=fore:#008E8E +String Single Quoted=fore:#E0A596 +String Double Quoted=fore:#E0A596 +String Triple Single Quotes=fore:#E0A596 +String Triple Double Quotes=fore:#E0A596 +Decorator=fore:#F2B600 +Number=fore:#AE81FF +Operator=fore:#F92672 +Function Name=fore:#A6E22E +Class Name=fore:#A6E22E +FileNameExtensions=py; pyw; pyx; pxd; pxi; boo; empy; cobra; gs +[Registry Files] +Comment=fore:#0D8206 +Value Name=fore:#6ABAE6 +String=fore:#E0A596 +Value Type=fore:#8AB3DB +Hex=fore:#A0DCAB +Added Key=semibold; fore:#2563A0 +Deleted Key=fore:#BB0000 +Escaped=fore:#E0A596 +GUID in Key Path=fore:#95D09C +Parameter=fore:#0B6561 +Operator=bold +FileNameExtensions=reg +[Resource Script] +Comment=fore:#75715E +Keyword=fore:#F92672 +String=fore:#E0A596 +Number=fore:#80FF80 +Operator=fore:#F92672 +Preprocessor=fore:#75715E +Comment Doc=fore:#808080 +Comment Doc Word=bold; fore:#808080 +Comment Doc Error=italic; fore:#800000 +Task Marker=bold; fore:#208080 +FileNameExtensions=rc; rc2; rct; rh; dlg; lang +[R-S-SPlus Statistics Code] +Comment=fore:#008000 +Keyword=bold; fore:#0A246A +Base Package Functions=bold; fore:#7F0000 +Other Package Functions=bold; fore:#7F007F +Number=fore:#0000FF +String=italic; fore:#3C6CDD +Operator=bold; fore:#B000B0 +Infix=fore:#660066 +Infix EOL=fore:#FF4000; back:#E0C0E0; eolfilled +Backticks=fore:#3C6CDD +Literal String=italic; fore:#3C6CDD +ESC Sequence=fore:#0080C0 +FileNameExtensions=r; rdata; rds; rda +[Ruby Script] +Comment=fore:#008000 +Keyword=fore:#00007F +Number=fore:#008080 +String=fore:#FF8000 +Class Name=fore:#0000FF +Function Name=fore:#007F7F +POD=fore:#004000; back:#C0FFC0; eolfilled +Regex=fore:#000000; back:#A0FFA0 +Symbol=fore:#C0A030 +Module Name=fore:#A000A0 +Instance Var=fore:#B00080 +Class Var=fore:#8000B0 +Data Section=fore:#600000; back:#FFF0D8; eolfilled +FileNameExtensions=rb; ruby; rbw; rake; rjs; rakefile; gemspec; podspec; \^Rakefile$; \^Podfile$ +[Rust Source Code] +Keyword=bold; fore:#248112 +Build-In Type=fore:#A9003D +Other Keyword=italic; fore:#248112 +Number=fore:#666666 +Comment=italic; fore:#488080 +String=fore:#B31C1B +Operator=fore:#666666 +Macro Definition=fore:#0A246A +Rust Lifetime=fore:#B000B0 +Parsing Error=fore:#F0F0F0; back:#F00000 +Byte String=fore:#C0C0C0 +FileNameExtensions=rs; rust +[Shell Script] +Comment=fore:#008000 +Number=fore:#008080 +Keyword=fore:#0000FF +String Double Quoted=fore:#008080 +String Single Quoted=fore:#800080 +Scalar=fore:#808000 +Parameter Expansion=fore:#808000; back:#FFFF99 +Back Ticks=fore:#FF0080 +Here-Doc (Single Quoted, q)=fore:#008080 +FileNameExtensions=sh; csh; zsh; bash; tcsh; m4; in; \^mozconfig$ +[SQL Query] +Default=bold; fore:#EC7600 +Comment=fore:#66747B +Keyword=bold; fore:#93C763 +Value Type=bold; fore:#000080 +String=fore:#E0A596 +Identifier=bold; fore:#93C763 +Quoted Identifier=fore:#800080; back:#FFCCFF +Number=fore:#FFD351 +Operator=fore:#FFF1A8 +FileNameExtensions=sql; mysql; hsql; pkb +[Tcl Script] +Comment=fore:#008000 +Keyword=fore:#0000FF +Number=fore:#008080 +String=fore:#008080 +Identifier=fore:#800080 +Substitution=fore:#CC0000 +Modifier=fore:#FF00FF +FileNameExtensions=tcl; itcl; tm +[TOML Config] +Keyword=bold; fore:#FF0080 +Comment=fore:#008000 +Section=bold; fore:#000000; back:#FFF1A8; eolfilled +Key=bold; fore:#5E608F +Assignment=bold; fore:#FF2020 +Value=fore:#202020 +Number=fore:#0000E0 +Date-Time=fore:#950095 +String=italic; fore:#606060 +Parsing Error=fore:#FFFF00; back:#A00000; eolfilled +FileNameExtensions=toml +[VBScript] +Comment=fore:#0D8206 +Keyword=fore:#3A6EA5 +String=fore:#E0A596 +Number=fore:#ACFBC0 +FileNameExtensions=vbs; dsm +[VHDL] +Comment=fore:#008800 +Number=fore:#FF0000 +String=fore:#008000 +Operator=fore:#B000B0 +Keyword=bold; fore:#0A246A +Standard Operator=bold; fore:#0A246A +Standard Type=fore:#FF8000 +FileNameExtensions=vhdl; vhd +[Visual Basic] +Comment=fore:#0D8206 +Keyword=fore:#3A6EA5 +Identifier=fore:#FFFFFF +String=fore:#E0A596 +Number=fore:#92FB53 +Operator=fore:#FFFFFF +Preprocessor=fore:#52A5F8 +FileNameExtensions=vb; bas; frm; cls; ctl; pag; dsr; dob +[Web Source Code] +Default=fore:#FFFFFF +HTML Tag=fore:#0080C0 +HTML Unknown Tag=fore:#C80000 +HTML Attribute=fore:#80FFFF +HTML Unknown Attribute=fore:#C80000 +HTML Value=fore:#FFFFFF +HTML String=fore:#E0A596 +HTML Other Inside Tag=fore:#FFFFFF +HTML Comment=fore:#008000 +HTML Entity=fore:#0080C0 +HTML Element Text=fore:#E0E2E4 +XML Identifier=bold; fore:#881280 +SGML=fore:#0080C0 +CDATA=fore:#E0E2E4 +ASP Start Tag=fore:#0080C0 +PHP Start Tag=fore:#FFFFFF +PHP Comment=fore:#FFFFFF +PHP Keyword=fore:#92C654 +PHP String=fore:#E0A596 +PHP Simple String=fore:#E0A596 +PHP Number=fore:#FFCD22 +PHP Operator=fore:#E7AF66 +PHP Variable=fore:#E0A596 +PHP String Variable=fore:#E0A596 +PHP Complex Variable=fore:#EB7517 +JS Comment=fore:#8F0306; back:#9F9F9F +JS Keyword=bold; fore:#3A6EA5 +JS String=fore:#E0A596 +JS Regex=fore:#FFFFFF +JS Number=fore:#2291FF +JS Symbols=fore:#FFFFFF +ASP JS Comment=fore:#75715E +ASP JS Keyword=fore:#F92672 +ASP JS String=fore:#E0A596 +ASP JS Regex=fore:#E6DB74 +ASP JS Number=fore:#AE81FF +ASP JS Symbols=fore:#F92672 +VBS Comment=fore:#75715E +VBS Keyword=fore:#F92672 +VBS String=fore:#E0A596 +VBS Number=fore:#AE81FF +ASP VBS Comment=fore:#75715E +ASP VBS Keyword=fore:#F92672 +ASP VBS String=fore:#E0A596 +ASP VBS Number=fore:#AE81FF +FileNameExtensions=html; htm; asp; aspx; shtml; htd; xhtml; php; php3; phtml; htt; cfm; tpl; dtd; hta; htc; jsp; mht; jd +[XML Document] +Default=fore:#FFFFFF; back:#000000 +XML Tag=fore:#3A6EA5 +XML Attribute=fore:#52A5F8 +XML Value=fore:#0080C0 +XML String=fore:#E0A596 +XML Other Inside Tag=fore:#0080C0 +XML Comment=fore:#008000 +XML Entity=fore:#0080C0 +XML Identifier=fore:#808080 +SGML=fore:#F92672 +CDATA=fore:#75715E +FileNameExtensions=xml; xsl; rss; svg; xul; xsd; xslt; axl; rdf; xaml; vcproj; ffs_gui; nzb; resx; plist; xrc; fbp; manifest +[YAML] +Comment=fore:#008800 +Identifier=bold; fore:#0A246A +Keyword=fore:#880088 +Number=fore:#FF8000 +Reference=fore:#008888 +Document=bold; fore:#FFFFFF; back:#000088; eolfilled +Text=fore:#404040 +Error=bold; italic; fore:#FFFFFF; back:#FF0000; eolfilled +Operator=fore:#333366 +FileNameExtensions=yaml; yml diff --git a/np3portableapp/Notepad3Portable/App/DefaultData/settings/themes/Sombra.ini b/np3portableapp/Notepad3Portable/App/DefaultData/settings/themes/Sombra.ini new file mode 100644 index 0000000000..414f8bf456 --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/DefaultData/settings/themes/Sombra.ini @@ -0,0 +1,743 @@ +# Lexer Style "NewSombra" from MadDogVachon (https://github.com/MadDogVachon) + +[Custom Colors] +01=#DEDEDE +02=#B4E1F5 +03=#A1C3D3 +04=#89ABEC +05=#71F8AD +06=#B1D765 +07=#D8F766 +08=#F6B05A +09=#141414 +10=#272702 +11=#544604 +12=#F2B50D +13=#F2460D +14=#F53C3D +15=#F651F6 +16=#BE944E +[Common Base] +Default Style=font:$Code; fore:#DEDEDE; back:#141414 +Margins and Line Numbers=size:-2; fore:#A5FAFA; back:#454545 +Matching Braces (Indicator)=fore:#0DF145; alpha:80; alpha2:80; indic_roundbox +Matching Braces Error (Indicator)=fore:#F20C80; alpha:140; alpha2:140; indic_roundbox +Control Characters (Font)=size:-1 +Indentation Guide (Color)=fore:#606060 +Selected Text (Colors)=fore:#F2460D; back:#4F51E0; eolfilled; alpha:80 +Whitespace (Colors, Size 0-12)=fore:#F2460D +Current Line Background (Color)=size:2; fore:#606060; back:#F2F20D; alpha:50 +Long Line Marker (Colors)=fore:#F2B50D +Extra Line Spacing (Size)=size:2 +Bookmarks and Folding (Colors, Size)=size:+2; fore:#DEDEDE; back:#0CE50B; alpha:100 +Mark Occurrences (Indicator)=fore:#589FE2; alpha:60; alpha2:60; indic_roundbox +Hyperlink Hotspots=fore:#8C99ED; back:#A1D8F2; indic_plain +Unicode-Point Hover=fore:#0BCF0A; alpha:60; alpha2:180; indic_compositionthick +Multi Edit Indicator=fore:#F29A0D; alpha:60; alpha2:180; indic_roundbox +Change History Marker Modified=fore:#FF8000 +Change History Marker Saved=fore:#00A000; back:#00A000 +Change History Marker Reverted to Modified=fore:#A0C000; back:#A0C000 +Change History Marker Reverted to Origin=fore:#40A0BF; back:#40A0BF +Inline-IME Color=fore:#4EF64D +FileNameExtensions= +[2nd Common Base] +2nd Default Style=font:Consolas; fore:#DEDEDE; back:#141414 +2nd Margins and Line Numbers=size:-1; fore:#A5FAFA; back:#454545 +2nd Matching Braces (Indicator)=fore:#0DF145; alpha:80; alpha2:220; indic_roundbox +2nd Matching Braces Error (Indicator)=fore:#F20C80; alpha:140; alpha2:220; indic_roundbox +2nd Control Characters (Font)=size:-1 +2nd Indentation Guide (Color)=fore:#606060 +2nd Selected Text (Colors)=fore:#F2460D; eolfilled +2nd Whitespace (Colors, Size 0-12)=fore:#F2460D +2nd Current Line Background (Color)=size:2; fore:#A1B7F2; back:#F2F20D; alpha:50 +2nd Long Line Marker (Colors)=fore:#F2B50D +2nd Bookmarks and Folding (Colors, Size)=size:+2; charset:2; fore:#DEDEDE; back:#0CE50B; case:U; alpha:100 +2nd Mark Occurrences (Indicator)=fore:#7B83E9; alpha:60; alpha2:60; indic_box +2nd Hyperlink Hotspots=fore:#1EF31D; back:#57F655; alpha:180; indic_compositionthin +2nd Unicode-Point Hover=fore:#7D86EA; alpha:60; alpha2:180; indic_compositionthick +2nd Multi Edit Indicator=fore:#7BC5E9; indic_box +2nd Change History Marker Modified=fore:#FF8000 +2nd Change History Marker Saved=fore:#00A000; back:#00A000 +2nd Change History Marker Reverted to Modified=fore:#A0C000; back:#A0C000 +2nd Change History Marker Reverted to Origin=fore:#40A0BF; back:#40A0BF +2nd Inline-IME Color=fore:#F20C0D +FileNameExtensions= +[Text Files] +Margins and Line Numbers=font:Consolas; size:-2; fore:#DEDEDE; back:#454545 +Extra Line Spacing (Size)=size:-1 +FileNameExtensions=txt; text; tmp; log; asc; doc; scp; wtx +[ANSI Art] +Default=font:Lucida Console; thin; size:11; fore:#DEDEDE; back:#141414; smoothing:aliased +Margins and Line Numbers=font:Lucida Console; size:-2; fore:#DEDEDE; back:#454545 +Extra Line Spacing (Size)=size:-1 +FileNameExtensions=nfo; diz; \^Readme$ +[Apache Config Files] +Comment=fore:#DBF873 +String=fore:#F651F6 +Number=fore:#F2460D +Directive=fore:#89ABEC +IP Address=bold; fore:#F2460D +FileNameExtensions=conf; cfg; cnf; htaccess; prefs; iface; prop; po; te; \^Kconfig$; \^Doxyfile$ +[Assembly Script] +Comment=fore:#76F873 +String=fore:#61F75F +Number=fore:#F20C0D +Operator=fore:#B4E1F5 +CPU Instruction=fore:#B4E1F5 +FPU Instruction=fore:#B4E1F5 +Extended Instruction=fore:#B4E1F5 +Directive=fore:#B4E1F5 +Directive Operand=fore:#B4E1F5 +Register=fore:#F27E0D +FileNameExtensions=asm; s; sx; inc; a51 +[AutoHotkey Script] +Comment=fore:#B7B7B7 +Escape=italic; fore:#F98488 +Syntax Operator=fore:#B02D15 +Expression Operator=fore:#FF4F00 +String=fore:#0DAE09 +Number=fore:#F28B0D +Identifier=fore:#CF2F0F +Variable Dereferencing=fore:#F761B5 +Label=fore:#80FF80 +Flow of Control=fore:#0077EE +Command=bold; fore:#9B7309 +Function=fore:#F42BF4 +Directive=italic; fore:#FA949A +Keys & Buttons=bold; fore:#AC00AC +Built-In Variables=bold; fore:#E73619 +Special=italic; fore:#8888FF +Variable Keyword=italic; fore:#CF00CF +FileNameExtensions=ahk; ahkl; ia; scriptlet +[AutoIt3 Script] +Comment=fore:#76F873 +Number=fore:#76F8F8 +Function=fore:#7B83E9 +User-Defined Function=fore:#7B83E9 +Keyword=fore:#7B83E9 +Macro=fore:#7BB6E9 +String=fore:#76F8F8 +Operator=fore:#F544F5 +Variable=fore:#F8F876 +Send Key=fore:#F20C0D +Preprocessor=fore:#F27E0D +Special=fore:#F27E0D +FileNameExtensions=au3 +[AviSynth Script] +Comment=fore:#76F873 +String=fore:#F877F8 +Number=fore:#77F8F8 +Keyword=bold; fore:#B0D1F7 +Filter=bold; fore:#B0D1F7 +Plugin=bold; fore:#9BDAF1 +Function=fore:#77F8F8 +Clip Property=fore:#B0D1F7 +FileNameExtensions=avs; avsi +[Awk Script] +Keyword=bold; fore:#A7C0F4 +Keyword 2nd=bold; italic; fore:#3031DB +Comment=fore:#7F7F7F +String=fore:#6FF76C +Number=fore:#F57C44 +Operator=fore:#F651F6 +FileNameExtensions=awk +[Batch Files] +Comment=fore:#76F873 +Keyword=bold; fore:#B4E1F5 +Identifier=fore:#89ABEC; back:#544604 +Operator=fore:#F651F6 +Command=bold +Label=fore:#F53C3D; back:#141414; eolfilled +FileNameExtensions=bat; cmd +[C# Source Code] +Comment=fore:#76F873 +Keyword=bold; fore:#F8B076 +Keyword 2nd=bold; italic; fore:#F8B076 +Global Class=fore:#9DD1DC +String=fore:#5BF659 +Number=fore:#F20C0D +Operator=fore:#F651F6 +Preprocessor=fore:#F27E0D +Verbatim String=fore:#6FF76C +Comment Doc=fore:#7F7F7F +Comment Doc Word=bold; fore:#7F7F7F +Comment Doc Error=italic; fore:#F87376 +Task Marker=bold; fore:#79DBDB +FileNameExtensions=cs; csx; vala +[C/C++ Source Code] +Comment=fore:#76F873 +Keyword=bold; fore:#B4E1F5 +Keyword 2nd=bold; italic; fore:#7B9AD2 +Typedefs/Classes=bold; italic; fore:#F87376 +String=fore:#61F75F +Number=fore:#F20C0D +Operator=fore:#F651F6 +Preprocessor=fore:#F27E0D +Verbatim=fore:#F651F6 +Comment Doc=fore:#7F7F7F +Comment Doc Word=bold; fore:#7F7F7F +Comment Doc Error=italic; fore:#F87376 +Task Marker=bold; fore:#79DBDB +FileNameExtensions=c; cpp; cxx; cc; h; hpp; hxx; hh; mm; idl; midl; inl; odl; xpm; pch +[Cmake Script] +Comment=fore:#76F873 +String=fore:#F877F8; back:#393939 +Function=fore:#B0D1F7 +Parameter=fore:#EC8577 +Variable=fore:#F5663A +While Def=fore:#B0D1F7 +For Each Def=fore:#B0D1F7 +If Def=fore:#B0D1F7 +Macro Def=fore:#B0D1F7 +Variable within String=fore:#F5663A; back:#393939 +Number=fore:#76F8F8 +FileNameExtensions=cmake; ctest; \^cmakelists\.txt$ +[Coffeescript] +Comment=fore:#999999 +String=fore:#6AF768 +Preprocessor=fore:#F27E0D +Identifier=bold; fore:#B4E1F5 +Operator=fore:#F651F6 +Number=fore:#F20C0D +Regex=fore:#81F8B5; back:#544604 +FileNameExtensions=coffee; cakefile +[Configuration Files] +Key=fore:#AADAFA +Comment=fore:#76F873 +Section=bold; fore:#DEDEDE; back:#B8430A; eolfilled +Assignment=fore:#F20C0D +Default Value=fore:#F20C0D +FileNameExtensions=ini; inf; properties; oem; sif; url; sed; theme; clw; editorconfig +[CSS Style Sheets] +Comment=fore:#999999 +HTML Tag=bold; fore:#B4E1F5 +Tag-Class=fore:#D0F548 +Tag-ID=fore:#D8F766 +Tag-Attribute=italic; fore:#D6F761 +Pseudo-Class=fore:#F651F6 +Pseudo-Element=fore:#F6509C +CSS Property=fore:#F2460D +String=fore:#6FF76C +Value=fore:#A1C3D3 +Operator=fore:#F651F6 +Important=bold; fore:#F53C3D +Directive=bold; fore:#DEDEDE; back:#544604 +Media=bold; fore:#B4E1F5 +Variable=bold; fore:#F2460D +Unknown Pseudo-Class=fore:#F53C3D; back:#7B7B06 +Unknown Property=fore:#F53C3D; back:#7B7B06 +FileNameExtensions=css; less; hss; sass; scss +[CSV Prism] +Margins and Line Numbers=fore:#DEDEDE; back:#454545 +Extra Line Spacing (Size)=size:-1 +Column 0=fore:#BAA1EE +Column 1=fore:#A8B8F2 +Column 2=fore:#81B1EA +Column 3=fore:#60AEE4 +Column 4=fore:#42F4F4 +Column 5=fore:#23F351 +Column 6=fore:#A2F426 +Column 7=fore:#E1F219 +Column 8=fore:#F1940E +Column 9=fore:#F42D2E +FileNameExtensions=csv +[D Source Code] +Comment=fore:#76F873 +Comment Doc=fore:#A7D5F4 +Number=fore:#F20C0D +Keyword=bold; fore:#B4E1F5 +Keyword 2nd=bold; fore:#B4E1F5 +Typedef=italic; fore:#B4E1F5 +String=italic; fore:#7B9AD2 +Operator=fore:#F651F6 +FileNameExtensions=d; dd; di +[Dart Source Code] +Keyword=fore:#7B83E9 +Keyword 2nd=fore:#7B83E9 +Meta-Data=fore:#F27E0D +Class=fore:#7BB6E9 +Enumeration=fore:#F27E0D +Function=fore:#F6B05A +Comment=fore:#739571 +Comment Doc=fore:#76BA74 +Task Marker=bold; fore:#7CBDBD +String=fore:#69F767 +TriQ-String=fore:#F38B1A +Verbatim String=fore:#F38B1A +ESC Sequence=fore:#9BDAF1 +Label=fore:#6950D3 +Number=fore:#F20C0D +Variable=fore:#D27F60 +Operator=fore:#6950D3 +Symbol Identifier=fore:#7C5AF3 +Symbol Operator=fore:#7C5AF3 +FileNameExtensions=dart +[Diff Files] +Comment=fore:#76F873 +Command=bold; fore:#B4E1F5 +Source and Destination=fore:#F53C3D; back:#544604; eolfilled +Position Setting=fore:#7B83E9 +Line Addition=fore:#A3FA9C; back:#045403; eolfilled +Line Removal=fore:#FBA9B2; back:#7B0506; eolfilled +Line Change=fore:#B5DCF9; back:#2324CE; eolfilled +FileNameExtensions=diff; patch +[Fortran Source Code] +Preprocessor=fore:#FF8000 +Comment=italic; fore:#808080 +Keyword=bold; fore:#0080FF +Function=bold; italic; fore:#00B3FF +User-Defined Function=bold; italic; fore:#8678FE +String Single Quoted=fore:#008800 +String Double Quoted=fore:#008800 +String EOL=fore:#008000 +Number=fore:#7C00F9 +Operator=bold; fore:#0AB456 +Label=fore:#FF0080 +Continuation=fore:#D8F766 +FileNameExtensions=f; for; ftn; fpp; f90; f95; f03; f08; f15; f2k; hf +[Go Source Code] +Comment=fore:#76F873 +Number=fore:#F20C0D +Keyword=bold; fore:#B4E1F5 +Keyword 2nd=bold; fore:#B4E1F5 +Typedef=italic; fore:#B4E1F5 +String=italic; fore:#7B9AD2 +Operator=fore:#F651F6 +FileNameExtensions=go +[Inno Setup Script] +Comment=fore:#76F873 +Keyword=fore:#7B83E9 +Parameter=fore:#7B83E9 +Section=bold; fore:#B0D1F7 +Preprocessor=fore:#F5393A +Inline Expansion=fore:#F876F8 +Pascal Comment=fore:#61F75F +Pascal Keyword=fore:#7B83E9 +FileNameExtensions=iss; isl; islu +[Java Source Code] +Comment=fore:#999999 +Keyword=bold; fore:#F6B05A +Keyword 2nd=bold; fore:#F6B05A +String=fore:#65F763 +Number=fore:#F20C0D +Operator=fore:#F651F6 +Comment Doc=fore:#7F7F7F +Comment Doc Word=bold; fore:#7F7F7F +Comment Doc Error=italic; fore:#F87376 +Task Marker=bold; fore:#79DBDB +FileNameExtensions=java; jad; aidl; bsh +[JavaScript] +Comment=fore:#999999 +Keyword=bold; fore:#F6B05A +String=fore:#65F763 +Regex=fore:#77F8B0; back:#544604 +Number=fore:#F20C0D +Operator=fore:#F651F6 +Comment Doc=fore:#7F7F7F +Comment Doc Word=bold; fore:#7F7F7F +Comment Doc Error=italic; fore:#F87376 +Task Marker=bold; fore:#79DBDB +FileNameExtensions=js; jse; jsm; as; mjs; qs +[JSON] +Comment=fore:#999999 +Keyword=bold; fore:#F7C966 +LD Keyword=bold; fore:#F36E58 +String=fore:#66F764 +Unclosed String=fore:#FFFFFF; back:#FF8040; eolfilled +Number=fore:#F20C0D +Operator=fore:#F651F6 +Property Name=fore:#A9D1F5 +ESC Sequence=fore:#3DE966 +URL/IRI=fore:#0000FF +Compact IRI=fore:#D137C1 +Parsing Error=fore:#F2F20D; back:#F75C5E; eolfilled +FileNameExtensions=json; har; ipynb; wxcp; jshintrc; eslintrc; babelrc; prettierrc; stylelintrc; jsonld; jsonc; arcconfig; arclint; jscop +[Julia Script] +Comment=fore:#7E9E7C +Number=fore:#F20C0D +Keyword=bold; fore:#7B83E9 +Keyword 2nd=bold; fore:#F76EF7 +String=fore:#F57148 +Operator=fore:#F6804D +Type Operator=fore:#F766F7 +Identifier=fore:#B1D3F7 +Symbol=fore:#CCA941 +Macro Def=fore:#7BB6E9 +Comment Doc=fore:#7F7F7F +Literal String=fore:#F651F6 +Command=bold; fore:#8E9BED +Annotation=fore:#F27E0D +Parsing Error=fore:#F2F20D; back:#F75C5E; eolfilled +FileNameExtensions=jl +[KiXtart Script] +Keyword=bold; fore:#6285E4 +Function=fore:#F761F7 +Macro=fore:#F2B50D +Comment=fore:#6FF76C +String=italic; fore:#717171 +Operator=fore:#F53C3D +Number=fore:#65F7F7 +Variable=fore:#D27F60 +FileNameExtensions=kix +[Kotlin Source Code] +Keyword=fore:#7B83E9 +Annotation=fore:#F27E0D +Class=fore:#7BB6E9 +Interface=bold; fore:#67A9E5 +Enumeration=fore:#F27E0D +Function=fore:#F6B05A +Comment=fore:#739571 +Comment Doc=fore:#7CBDBD +Comment Doc Word=fore:#7CBDBD +Task Marker=bold; fore:#79DBDB +String=fore:#65F763 +Verbatim String=fore:#F38B1A +ESC Sequence=fore:#9BDAF1 +Back Ticks=fore:#D27F60 +Label=fore:#6950D3 +Number=fore:#F20C0D +Variable=fore:#D27F60 +Operator=fore:#F651F6 +FileNameExtensions=kt; kts; ktm +[LaTeX Files] +Command=fore:#7B83E9 +Comment=fore:#61F75F +Math=fore:#F20C0D +Special Char=fore:#F6F656 +Tag=fore:#7B83E9 +Verbatim Segment=fore:#979797 +Error=fore:#F2F20D; back:#F75C5E +FileNameExtensions=tex; latex; sty; texi; texinfo; txi +[Lua Script] +Comment=fore:#76F873 +Number=fore:#76F8F8 +Keyword=fore:#B0D1F7 +Basic Functions=fore:#B0D1F7 +String, Table & Math Functions=fore:#B0D1F7 +Input, Output & System Facilities=fore:#B0D1F7 +String=fore:#F651F6 +Literal String=fore:#F651F6 +Preprocessor=fore:#F27E0D +Label=fore:#F8F876 +FileNameExtensions=lua; wlua; nse; luadoc; luax +[Makefiles] +Comment=fore:#76F873 +Identifier=fore:#89ABEC +Target=fore:#003CE6; back:#FFC000 +Preprocessor=fore:#F27E0D +FileNameExtensions=mak; make; mk; dsp; msc; msvc; am; pro; pri; gmk; ninja; dsw; \^Makefile$; \^Kbuild$ +[Markdown] +Strong=bold +Emphasis=italic +Header 1=bold; fore:#272702; back:#848DCF; eolfilled +Header 2=bold; fore:#A8CCDA; back:#1F6AB4; eolfilled +Header 3=bold; fore:#A8CCDA; back:#154B7F; eolfilled +Header 4=bold; fore:#A8CCDA; eolfilled +Header 5=bold; fore:#99B9CD; eolfilled +Header 6=bold; fore:#85A5BF; eolfilled +Pre Char=fore:#B0D1F7 +Unordered List=bold; fore:#7BB6E9 +Ordered List=bold; fore:#7BB6E9 +Block Quote=fore:#B0D1F7 +Horizontal Rule=bold +Link=fore:#7B83E9 +Code=fore:#B0D1F7; back:#141414 +FileNameExtensions=md; markdown; mdown; mkdn; mkd +[MATLAB] +Comment=fore:#76F873 +Command=bold +Number=fore:#F27E0D +Keyword=bold; fore:#B0D1F7 +String=fore:#F877F8 +FileNameExtensions=matlab; m; sce; sci +[Nim Source Code] +Comment=italic; fore:#ADC5CF +Keyword=bold; fore:#5F8E5F +String Double Quoted=fore:#D7598F +String Single Quoted=fore:#D7598F +String Triple Double Quotes=fore:#D7598F +String Triple Single Quotes=fore:#D7598F +Number=fore:#97A9DD +Operator=bold; fore:#AEAEAE +Function name=fore:#AEAEAE +Parsing Error=italic; fore:#F2F20D; back:#F75C5E +FileNameExtensions=nim; nimrod +[NSIS Script] +Comment=fore:#76F873 +String=fore:#979797; back:#393939 +Function=fore:#96B8EF +Variable=fore:#F5663A +Variable within String=fore:#F5663A; back:#393939 +Number=fore:#F20C0D +Constant=fore:#F2940D +Section=fore:#96B8EF +Sub Section=fore:#96B8EF +Section Group=fore:#96B8EF +Function Definition=fore:#96B8EF +PageEx=fore:#96B8EF +If Definition=fore:#96B8EF +Macro Definition=fore:#96B8EF +FileNameExtensions=nsi; nsh +[Pascal Source Code] +Comment=fore:#999999 +Keyword=bold; fore:#F876F8 +String=fore:#61F75F +Number=fore:#F20C0D +Operator=bold +Inline Asm=fore:#7B83E9 +Preprocessor=fore:#F20DF2 +FileNameExtensions=pas; dpr; dpk; dfm; pp; lfm; lpr; fpd +[Perl Script] +Comment=fore:#999999 +Keyword=bold; fore:#F8B076 +String Double Quoted=fore:#61F75F +String Single Quoted=fore:#64F762 +Number=fore:#F20C0D +Operator=bold +Scalar $var=fore:#B4E1F5 +Array @var=fore:#89ABEC +Hash %var=fore:#F651F6 +Symbol Table *var=fore:#A1C3D3 +Regex /re/ or m{re}=fore:#70F7AD; back:#544604 +Substitution s/re/ore/=fore:#88F9B7; back:#544604 +Back Ticks=fore:#F46027; back:#544604 +Here-Doc (Delimiter)=fore:#DBF872 +Here-Doc (Single Quoted, q)=fore:#D6F75F +Here-Doc (Double Quoted, qq)=fore:#D7F762 +Here-Doc (Back Ticks, qx)=fore:#F46027; back:#544604 +Single Quoted String (Generic, q)=fore:#75F872 +Double Quoted String (qq)=fore:#61F75F +Back Ticks (qx)=fore:#F46027; back:#544604 +Regex (qr)=fore:#88F9B7; back:#544604 +Array (qw)=fore:#89ABEC +Prototype=fore:#F876F8; back:#270227 +Format Identifier=bold; fore:#DBF873; back:#544604 +Format Body=fore:#DBF872; back:#544604 +POD (Common)=fore:#F6B05A; back:#3D3D03; eolfilled +POD (Verbatim)=fore:#F6B05A; back:#3D3D03; eolfilled +Data Section=fore:#F6B05A; back:#3D3D03; eolfilled +Parsing Error=fore:#F53C3D; back:#7B7B06 +FileNameExtensions=pl; pm; cgi; pod; plx; stp +[PowerShell Script] +Comment=fore:#999999 +Keyword=bold; fore:#F8B076 +String=fore:#61F75F +Number=fore:#F20C0D +Operator=bold +Variable=fore:#B4E1F5 +Cmdlet=fore:#F8B076; back:#544604 +Alias=bold; fore:#B4E1F5 +FileNameExtensions=ps1; psd1; psm1; psc1 +[Python Script] +Comment=fore:#F76D70 +Keyword=bold; fore:#AECDF6 +Keyword 2nd=fore:#AECDF6 +Attribute=fore:#C2C2C2 +String Single Quoted=fore:#46F545 +String Double Quoted=fore:#62F760 +String Triple Single Quotes=fore:#92C339 +String Triple Double Quotes=fore:#98C742 +Decorator=fore:#F3B819 +Number=fore:#F2460D +Operator=bold; fore:#F9F988 +Function Name=fore:#F988F9 +Class Name=fore:#F988F9 +FileNameExtensions=py; pyw; pyx; pxd; pxi; boo; empy; cobra; gs +[Registry Files] +Comment=fore:#70F76D +String=fore:#62F760 +Value Type=bold; fore:#B0D1F7 +Hex=fore:#EF7478 +Added Key=bold; fore:#DEDEDE; back:#B8430A; eolfilled +Deleted Key=fore:#F20C0D +Escaped=bold; fore:#A4B4B4 +GUID in Key Path=fore:#E6C07B +Parameter=fore:#79EDDB +Operator=bold +FileNameExtensions=reg +[Resource Script] +Comment=fore:#76F873 +Keyword=bold; fore:#B4E1F5 +String=fore:#49F548 +Number=fore:#F20C0D +Operator=fore:#B4E1F5 +Preprocessor=fore:#F27E0D +Comment Doc=fore:#7F7F7F +Comment Doc Word=bold; fore:#7F7F7F +Comment Doc Error=italic; fore:#F87376 +Task Marker=bold; fore:#79DBDB +FileNameExtensions=rc; rc2; rct; rh; dlg; lang +[R-S-SPlus Statistics Code] +Comment=fore:#76F873 +Keyword=bold; fore:#B4E1F5 +Base Package Functions=bold; fore:#F87477 +Other Package Functions=bold; fore:#F877F8 +Number=fore:#7B83E9 +String=italic; fore:#7B9AD2 +Operator=bold; fore:#F651F6 +Infix=fore:#F988F9 +Infix EOL=fore:#F2460D; back:#402040; eolfilled +Backticks=fore:#3C6CDD +Literal String=italic; fore:#3C6CDD +ESC Sequence=fore:#0080C0 +FileNameExtensions=r; rdata; rds; rda +[Ruby Script] +Comment=fore:#76F873 +Keyword=fore:#B0D1F7 +Number=fore:#76F8F8 +String=fore:#F27E0D +Class Name=fore:#7B83E9 +Function Name=fore:#77F8F8 +POD=fore:#8FF98A; back:#022701; eolfilled +Regex=fore:#DEDEDE; back:#022B01 +Symbol=fore:#CCA941 +Module Name=fore:#F75EF7 +Instance Var=fore:#F650C9 +Class Var=fore:#BEB7F2 +Data Section=fore:#F9888C; back:#271802; eolfilled +FileNameExtensions=rb; ruby; rbw; rake; rjs; rakefile; gemspec; podspec; \^Rakefile$; \^Podfile$ +[Rust Source Code] +Keyword=bold; fore:#89E973 +Build-In Type=fore:#F65490 +Other Keyword=italic; fore:#7CE665 +Number=fore:#979797 +Comment=italic; fore:#7DB4B4 +String=fore:#E04D4D +Operator=fore:#979797 +Macro Definition=fore:#B4E1F5 +Rust Lifetime=fore:#F651F6 +Parsing Error=fore:#141414; back:#F3191A +Byte String=fore:#404040 +FileNameExtensions=rs; rust +[Shell Script] +Comment=fore:#76F873 +Number=fore:#76F8F8 +Keyword=fore:#7B83E9 +String Double Quoted=fore:#76F8F8 +String Single Quoted=fore:#F876F8 +Scalar=fore:#F8F876 +Parameter Expansion=fore:#F8F876; back:#636305 +Back Ticks=fore:#F20C80 +Here-Doc (Single Quoted, q)=fore:#76F8F8 +FileNameExtensions=sh; csh; zsh; bash; tcsh; m4; in; \^mozconfig$ +[SQL Query] +Comment=fore:#00A8A8 +Keyword=bold; fore:#73B9FF +Value Type=bold; fore:#CFE3FA +String=fore:#8C8C8C +Identifier=fore:#DCDCDC +Quoted Identifier=fore:#00CCCC +Number=fore:#B973FF +Operator=bold; fore:#EC880D +FileNameExtensions=sql; mysql; hsql; pkb +[Tcl Script] +Comment=fore:#76F873 +Keyword=fore:#7B83E9 +Number=fore:#76F8F8 +String=fore:#76F8F8 +Identifier=fore:#F876F8 +Substitution=fore:#F5393A +Modifier=fore:#F20DF2 +FileNameExtensions=tcl; itcl; tm +[TOML Config] +Keyword=bold; fore:#F20C80 +Comment=fore:#6FF76C +Section=bold; fore:#DEDEDE; back:#544604; eolfilled +Key=bold; fore:#A9BDBD +Assignment=bold; fore:#D50A0B +Value=fore:#CDCDCD +Number=fore:#8C99ED +Date-Time=fore:#F766F7 +String=italic; fore:#9C9C9C +Parsing Error=fore:#F2F20D; back:#F75C5E; eolfilled +FileNameExtensions=toml +[VBScript] +Comment=fore:#7F7F7F +Keyword=bold; fore:#F651F6 +String=fore:#67F765 +Number=fore:#F20C0D +FileNameExtensions=vbs; dsm +[VHDL] +Comment=fore:#70F76D +Number=fore:#F20C0D +String=fore:#6FF76C +Operator=fore:#F651F6 +Keyword=bold; fore:#B4E1F5 +Standard Operator=bold; fore:#B4E1F5 +Standard Type=fore:#F27E0D +FileNameExtensions=vhdl; vhd +[Visual Basic] +Comment=fore:#7F7F7F +Keyword=bold; fore:#F651F6 +String=fore:#67F765 +Number=fore:#F20C0D +Preprocessor=fore:#F2960D +FileNameExtensions=vb; bas; frm; cls; ctl; pag; dsr; dob +[Web Source Code] +HTML Tag=fore:#DBF873 +HTML Unknown Tag=fore:#F53C3D; back:#7B7B06 +HTML Attribute=fore:#F2460D +HTML Unknown Attribute=fore:#F53C3D; back:#7B7B06 +HTML Value=fore:#A1C3D3 +HTML String=fore:#A1C3D3 +HTML Other Inside Tag=fore:#A1C3D3 +HTML Comment=fore:#999999 +HTML Entity=fore:#F651F6 +XML Identifier=bold; fore:#E96EE1 +SGML=fore:#E96EE1 +CDATA=fore:#999999 +ASP Start Tag=bold; fore:#B0D1F7 +PHP Start Tag=bold; fore:#B0D1F7 +PHP Comment=fore:#F27E0D +PHP Keyword=bold; fore:#F6B05A +PHP String=fore:#65F763 +PHP Simple String=fore:#63F761 +PHP Number=fore:#F20C0D +PHP Operator=fore:#F651F6 +PHP Variable=italic; fore:#B0D1F7 +PHP String Variable=italic; fore:#B0D1F7 +PHP Complex Variable=italic; fore:#B0D1F7 +JS Comment=fore:#999999 +JS Keyword=bold; fore:#F6B05A +JS String=fore:#65F763 +JS Regex=fore:#77F8B0; back:#544604 +JS Number=fore:#F20C0D +JS Symbols=fore:#F651F6 +ASP JS Comment=fore:#999999 +ASP JS Keyword=bold; fore:#F6B05A +ASP JS String=fore:#65F763 +ASP JS Regex=fore:#77F8B0; back:#544604 +ASP JS Number=fore:#F20C0D +ASP JS Symbols=fore:#F651F6 +VBS Comment=fore:#999999 +VBS Keyword=bold; fore:#F651F6 +VBS String=fore:#67F765 +VBS Number=fore:#F20C0D +ASP VBS Comment=fore:#999999 +ASP VBS Keyword=bold; fore:#F651F6 +ASP VBS String=fore:#67F765 +ASP VBS Number=fore:#F20C0D +FileNameExtensions=html; htm; asp; aspx; shtml; htd; xhtml; php; php3; phtml; htt; cfm; tpl; dtd; hta; htc; jsp; mht; jd +[XML Document] +XML Tag=fore:#E96EE1 +XML Attribute=fore:#F7A163 +XML Value=fore:#A2B7E7 +XML String=fore:#A2B7E7 +XML Other Inside Tag=fore:#A2B7E7 +XML Comment=fore:#999999 +XML Entity=fore:#F651F6 +XML Identifier=bold; fore:#E96EE1 +SGML=fore:#E96EE1 +CDATA=fore:#999999 +FileNameExtensions=xml; xsl; rss; svg; xul; xsd; xslt; axl; rdf; xaml; vcproj; ffs_gui; nzb; resx; plist; xrc; fbp; manifest +[YAML] +Comment=fore:#70F76D +Identifier=bold; fore:#B4E1F5 +Keyword=fore:#F770F7 +Number=fore:#F27E0D +Reference=fore:#70F7F7 +Document=bold; fore:#141414; back:#AECDF6; eolfilled +Text=fore:#B7B7B7 +Error=bold; italic; fore:#141414; back:#F20C0D; eolfilled +Operator=fore:#B6D8E1 +FileNameExtensions=yaml; yml diff --git a/np3portableapp/Notepad3Portable/App/Notepad3/Docs/Changes.txt b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/Changes.txt new file mode 100644 index 0000000000..4af798a461 --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/Changes.txt @@ -0,0 +1,2373 @@ +================================================================================ += = += Notepad3 - light-weight Scintilla-based text editor for Windows = += = += (c) Rizonesoft 2008-2023 = += https://www.rizonesoft.com = += = +================================================================================ +Rizonesoft Notepad3 --- CHANGELOG --- +================================================================================ + +-------------------------------------------------------- +LEGEND: +-------------------------------------------------------- +1) NEW: (Added, Feature, Optimize) +2) CHANGES: (Change, Enhancement) +3) FIXES: (Correction, Debug) +4) REMOVED: (Obsolete, Depreciate) +5) TRANSLATIONS (MUI): (New Language) + +-------------------------------------------------------- +ABBREVIATIONS: +-------------------------------------------------------- +CED - (C)ompact (E)ncoding (D)etection (by Google) +GRE - (GRE)pWinNP3 Search in Files Tool +LEX - (LEX)illa Library +MIN - (MIN)iPath Fast Browser Tool +MUI - (M)ultilingual (U)ser (I)nterface +NLS - (N)ew (L)anguage (S)trings (need for translation) +ONI - (ONI)guruma Regex engine +SCI - (SCI)ntilla Library +SUP - (S)et(UP) / Installer Package +UCD - (UCD)ARDET is an Encoding Detector Library + + +======================================================== +Current BETA/RC Version 5.23.103.(build_#) (2023-01-03) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +[.###.#]- . +[.102.1]- Allow Line Number color to be alpha blended (e.g. DarkMode). +[1223.1]- Allow "Notepad3 x64 Setup" to install on Win11 Arm (64-bit emulation). +[1212.1]- Implementation of automatic parenthesis closure. +[1029.1]- Darkmode highlight (foreground) contrast settings + default reduction to 75%. +[1018.1]- Add example for tinyexpr in Modify Lines dialog. +[1018.1]- Add option to auto-load most recent file from file history. +[1018.1]- Change History Marker: color configuration. +[.901.1]- Menu (View) Settings for "Change History" feature. +[.830.1]- Persistent settings for "Document Read-Only Mode". +[.830.1]- Add Change History Marker (by Scintilla v5.3.0). +[.828.1]- Add "char8_t" keyword for C++20. +[.220.1]- Msg box for editing read-only. +[.217.1]- F/R-dialog menu item to switch replace by clipboard tag (^c). +[.215.1]- Set keyword-lists for CSS Lexer according to SciTE's css.properties. +[.129.1]- JSON Lexer: colorizing for URL/IRI and Compact IRI. +[.128.3]- JSON Lexer: error coloring for unclosed strings. +[1130.1]- Add a Fortran Lexer. +[1130.1]- LongPath Support enhancements. + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +[.###.#]- . +[.101.1]- Refactoring and fix window positioning respecting monitor DPI. +[1230.1]- Revert to Lexilla's standard Markdown lexer (LEX). +[1230.1]- Change background color for Heading 1 to enhance contrast to std Hyperlink (LEX). +[1230.1]- Visible representation of EOL characters. +[1230.1]- Refactoring of using SCI_REPLACETARGET(MINIMAL). +[1230.1]- Lexer Registry-Files: split string and GUID String coloring (LEX). +[1228.1]- JSON lexer: Same style for SCE_JSON_COMPACTIRI and SCE_JSON_PROPERTYNAME (LEX). +[1228.1]- Status-bar double-click line-break mode: Cycle only between CR+LF <-> LF modes. +[1220.1]- Update Lexer "AutoIt3 Script" to Autoit v3.3.16.1. +[1220.1]- Adjust All dialogboxes for all Languages to fit at display scale of 125%. +[1216.1]- Replacing SCI_REPLACETARGET calls by SCI_REPLACETARGETMINIMAL calls where appropriate. +[1212.1]- Extend AutoCloseBrackets (by Matteo-Nigro PR #4318) for Selection. +[1118.2]- Using new AviSynth+ keyword lists and AviSynth colors (light/dark mode). +[1020.1]- Standard DarkMode Theme. +[1020.1]- Minor adjustment of grepWinNP3's layout and correction of some strings (GRE). +[1018.1]- Simplify WordList Set according to (https://github.com/ScintillaOrg/lexilla/issues/103). +[1018.1]- Caret style: allow std caret bar width up to max(20) and define alpha transparency (not below 20). +[1018.1]- Alow "tinyexpr" within "Modify Lines" ${...} specification, using L, I, N as expression variables. +[.926.1]- Replace old logo "rizonesoft.bmp" by new layout. +[.831.1]- Use deprecated SCI_FINDTEXT to workaround crash on new (Sci v5.2.3) SCI_FINDTEXTFULL method. +[.830.1]- "Don't ask again" for keep Read-Only view mode dialog on editing file. +[.830.1]- Decouple Read-Only file Attribute from Read-Only Document view mode. +[.829.1]- Renaming feature from obscure "Accelerated Word Navigation" to better name "Alternate Word Separators". +[.418.1]- Sync the "Sombra" Scheme Collection with the "Window Dark Mode". +[.414.1]- Using 'Cascadia Mono' as default for pure 'Text File' scheme (if available). +[.226.1]- Rainbow CSV Lexer: try to solve non-paired quotings. +[.218.1]- Show number of occurrence on sequence of marked all. +[.217.2]- Drag&drop text snippet while ALT-Key down will not scroll. +[.212.1]- Document "Read Only" view menu item for switching mode. +[.128.1]- CamelCase WordLists for AHK Lexer. +[.127.1]- Ctrl/Alt+F10 as Accelerator-Keys for Filesystem-Path to URL (and back) conversion. +[.121.1]- Renaming Spanish Latin America (es-419) to Spanish Mexican (es-MX) (MUI). +[1228.1]- Hyperlink RegEx Scanner: don't allow XML tagging brackets as part of Hyperlink text. +[1226.1]- In Windows 11, running "Notepad" from "Run" (Win+R) launches "Notepad3". +[1211.1]- Removing unnecessary "ToShortPath" operations. +[1211.1]- Small performance enhancement for large rectangle selection undo/redo del/ins. +[1211.1]- PathGetDisplayName(): strip path(dir) option, to enable to show full path in dialogs. +[1202.1]- Merged Fortran Lexer keyword/functions suggestions from zoziha. +[1202.1]- Fortran Lexer keyword/function enhancement. +[1130.1]- Default settings: LaunchInstanceWndPosOffset=28 and LaunchInstanceFullVisible=true. + +-------------------------------------------------------- +CHANGES Versions in Tools or Libraries: +-------------------------------------------------------- +[1213.1]- Update MiniPath (MIN) version 1.0.2.191 (2022-12-13). +[1212.1]- Update Oniguruma Regex (ONI) engine version 6.9.9 (2022-12-09). +[1212.1]- Update Scintilla Library (SCI) version 5.3.2 (2022-12-06). +[1212.1]- Update Lexilla Library (LEX) version 5.2.1 (2022-12-06). +[1018.1]- Update grepWinNP3 (GRE) version 2.1.11.42 (2022-10-14). + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +[.###.#]- . +[.103.1]- Load Toolbar-Bitmap handling. +[.102.1]- Minor design change and some fixes for Margin and Bookmark handling. +[1230.1]- Minor bugs related to new feature Change-History. +[1230.1]- (re)setting default window position in case of non std DPI resolution. +[1228.1]- Speedup search&replace in large text files. +[1227.1]- Use alternate path, if Path_GetKnownFolder() failed. +[1215.1]- Set alpha (80) for "highlight current line" translucency, if not given. +[1212.1]- "Notepad3 Replacement" after Win11 22H2 update (SUP). +[1212.1]- Oniguruma fix (ONIG_OPTION_FIND_LONGEST behavior) (ONI). +[1212.1]- Make current line visible after word-wrap-mode toggle. +[1125.1]- Restore and correction the line "IDM_SETPASS" in menu_fr_fr_rc. +[1115.1]- Revert relative size for ANSI Art. +[1114.1]- Reset change history except in case of "revert from file". +[1114.1]- Linker must generate Manifest. +[1114.1]- Don't store contrast adapted dark mode foreground color themes. +[1104.1]- Common base font size scheme handling. +[1104.1]- Context menu: web action handler. +[1104.1]- Modification marker based on selection history. +[1104.1]- Disable events from edit-window while in Begin/End-WaitCursor. +[1102.1]- Error message on loading empty file. +[1029.1]- Refactored of undo/redo and document modify handler. +[1028.1]- Broken reload file (broken by check for single file instance)". +[1023.1]- A warning message in "dialogs_xx_yy.rc". +[1020.1]- Respect single file instance mode for internal file loading. +[1020.1]- "unref" param in RELEASE mode. +[1020.1]- DarkTheme handling. +[1019.1]- "grepWinNP3" minor layout adjustments (GRE). +[1019.1]- Resizing the "Open Recent File" dialog box. +[1018.1]- Resizing control (files as binary), minor layout adjustments (GRE). +[1018.1]- Fixed Text box for longest text length ("el-GR") + correction typo (GRE). +[1018.1]- Avoid horizontal line scrolling on File Revert (F5). +[1018.1]- "Modify Lines" feature - correct computation of field width for tinyexpr results. +[.930.1]- Win10/11 build number to name mapping. +[.928.1]- Titlebar update on change. +[.926.1]- Margin handling (context, bookmarks). +[.926.1]- New Rizone.soft bitmap. +[.926.1]- Treat files as binary can be Accidentally Clicked (GRE). +[.902.1]- Try to fix printing scaling issue. +[.902.1]- Propagate default font to undefined-font styles. +[.902.1]- Font selection (if font face-name does not match to family-name). +[.901.1]- Bookmarks handling in case of delete (in-line, complete line, selection). +[.831.1]- Crash in SCI_FINDTEXTFULL caused by using wrong data structure. +[.830.1]- TAB (indent) usage in case of read-only mode sets doc modified flag. +[.829.1]- Directory locking of current file. +[.829.1]- Remember user data entered for dialogs: EncloseSel, ModifyLines, InsertTag, StreamComment. +[.829.1]- Uninitialized variable, causing problems on copy multi-selection. +[.829.1]- Special not found position value in case of regex search. +[.828.1]- Unicode Detection in case of pure ASCCI containing null bytes. +[.828.1]- ASCII only issue of not reliable IsTextUnicode(). +[.502.1]- Using "Cascadia Mono" over "Cascadia Code" if applicable (regarding to "Text File" Scheme change). +[.502.1]- "Text File" Scheme: using Common (2nd) Base Font. +[.430.1]- Using by error "Segoe UI" as default for pure "Text File" scheme. +[.416.1]- Lexer style config names: differences between display and .ini-config. +[.414.1]- Dark mode color style scheme global from common base/2nd. +[.414.1]- Writing wrong scheme to .ini-file. +[.414.1]- Missing assert include for Win32/x86 compile config. +[.414.1]- Compile errors for unreferenced formal parameter in release mode. +[.301.1]- DarkMode issue in Decrypt dialog. +[.226.1]- Security enhancement of AES Encryption feature. +[.226.1]- MessageBox: shortage of text buffer. +[.220.1]- Workaround to fix horizontal mouse wheel with Logitech Options utility. +[.220.1]- Occurrence counter for "current word" mode. +[.219.1]- F/R-Dialog: Initial fill of replace template box. +[.217.2]- Find-Pattern storage handling. +[.217.2]- Find Next/Prev behavior. +[.217.2]- Regression caused by previous fix. +[.217.2]- Mark all occurrences: move caret to end of main selection. +[.217.1]- Preserve Caret position (issue 3927). +[.217.1]- Fill Find pattern on F/R-dialog init, prefer clipboard over search history. +[.216.1]- ID mismatch using 'enter' to close infobox (vs. 'yes/ok' button). +[.214.1]- Allow switching encoding for empty document. +[.209.1]- Memory issues fixing and hardening. +[.128.2]- XML/HTML Stream Comment. +[.103.1]- Find/Replace pattern history: clear all not persisted to .ini file. +[.103.1]- URL detector: double-quote should not be valid URL character. +[1228.1]- Allow hyperlinks end in dashes. +[1222.1]- Support User-Doc on Recent Files Jump List. +[1222.1]- Trim line endings on Save except AutoSave. +[1222.1]- Find user docs special folder var. +[1212.1]- Performance issue on pasting clipboard. +[1212.1]- Add to recent documents issue. +[1212.1]- File History: delete file in list and .ini-file. +[1211.1]- "grepWinNP3" .ini Path issue in Notepad3 Setup version (GRE). +[1207.1]- UNC path prefix handling issues. +[1202.1]- Parsing file arg: relative from working dir. +[1201.1]- Locale settings dependent Themes Menu (Standard Config). +[1201.1]- Add to Favorites: keep base-filename + extension. +[1201.1]- Find file extension. +[1201.1]- Reading initial style config. +[1130.1]- Notification blocker on loading huge files. +[1130.1]- Heap corruption on retrieving text from combo box. + +-------------------------------------------------------- +REMOVED: +-------------------------------------------------------- +[.###.#]- . +[.###.#]- . + +-------------------------------------------------------- +TRANSLATIONS (MUI): +-------------------------------------------------------- +[.###.#]- . +[.208.1]- Turkish (tr-TR). + +-------------------------------------------------------- +Hello everybody ! 😀 +For our "Notepad3 Translation Projects", we are looking for motivated volunteers, with a priority +to resume "(incomplete...)" translation projects: + +- Greek (el-GR) (incomplete...) +- Hindi (hi-IN) (incomplete...) +- Indonesian (id-ID) (incomplete...) +- Polish (pl-PL) (incomplete...) +- Portuguese (pt-PT) (incomplete...) +- Spanish Mexican (es-MX) (incomplete...) +- Vietnamese (vi-VN) (incomplete...) +- etc... + +Please, send me a PM (mailto:hpwamr51 @ gmail.com) if you are willing to help. 🤔 +-------------------------------------------------------- + + +======================================================== +Version 5.21.1129.1 (29 November 2021) +======================================================== + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +[1125.1]- Switching to Philippe Lhoste's (PhiLho) AutoHotkey (AHK) Lexer. +[1119.1]- Migration of Solution/Projects/Src for VS2022. +[1117.1]- Switch to Scintilla default idle styling mode (none). +[1115.1]- Reverting changes to F/R behavior, correction for empty pattern. +[1021.1]- On file restore, do not notify immediately, but check against stored file attributes. +[1015.1]- Remove the max win version check for undocumented DarkMode UxTheme methods. +[1015.1]- SQL Lexer bright and dark mode highlight color enhanced. +[.924.1]- Disable actively file change polling - rely on directory change notification by default. +[.924.1]- Allow [Settings2] "FileCheckInverval" to be zero(0), means no active file change polling. +[.923.2]- Enable context menu for Statusbar. +[.923.1]- Enable context menu for Menubar. +[.916.1]- Use "round nearest displayed digit" method for estimated file size display. +[.915.1]- Limit file size: 2GB (Until WideCharToMultiByte() / MultiByteToWideChar() INT32_MAX issues are clarified). + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +[1127.1]- Correction of a typo for command "Gui" in AutoHotkey (AHK) Lexer. +[1125.1]- Sync with current Oniguruma v7.0(ß) dev. +[1125.1]- Some other findings on the positioning of multi-instance launch. +[1119.2]- Relaunch multi instances: don't cascade if pos param already defined. +[1119.2]- Positioning on separate instance launch. +[1119.1]- Positioning multi instance launch. +[1115.1]- Don't clear occurrence markers for unchanged search pattern. +[1115.1]- Correction to VS2019 project settings. +[1115.1]- Find/Repl wildcard pattern handling. +[1112.1]- Find/Repl dialog - empty search string should have no match (blue). +[1030.1]- Wrong format for reporting number of replaced occurrences "In Selection". +[1030.1]- "grepWinNP3" not intended switching file size search settings (GRE). +[1023.1]- Key "Favorites=(path)" not added in "Setup" version. +[1021.1]- "grepWinNP3" not intended switching "AllSize" settings (GRE). +[1021.1]- Don't save default values for Caret and Whitespace. +[1015.1]- SQL Lexer dark mode highlight default colors. +[1015.1]- Disabled menu items if settings file itself is locked by file change notification. +[.927.1]- Over paint annoying menu-bar bottom line. +[.926.1]- Dark-mode system menu bar coloring (except bottom line). +[.925.1]- Correction of some wrong keyboard shortcut (Alt+ Up, Alt+ Down). +[.924.1]- Translucency (alpha) settings for white-space indicator. +[.915.1]- Dark mode aware auto-completion-list-box. +[.915.1]- Goto-Dialog: digit grouping of line/column numbers. +[.914.1]- Digit grouping for replace occurrences result dialog. +[.914.1]- Better hyperlink style in dark themes "Dark" and "Obsidian". +[.913.1]- Initial factory window position. +[.910.1]- Web-Action commands should use also user-defined app to open hyperlinks. +[.907.1]- Reset background color for "visible whitespace" if not defined. + +-------------------------------------------------------- +REMOVED: +-------------------------------------------------------- +[.924.1]- Remove deprecated "AutoReloadTimeout". +[.907.1]- Remove Old and deprecated Notepad3 and grepWin icons. + + +======================================================== +Version 5.21.905.1 (5 September 2021) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +[.816.1]- Add Configuration (Properties) Lexer: add style setting for Key (of Key-Value pair). +[.811.1]- Add "Notepad3 Replacement" on Windows 11 Insider Preview which works almost like with Windows 10: + - Open (ext: .inf, .ini, .log, .ps1, .psd1, .psm1, .scp, .txt, .wtx, .compositefont, .css, .sct, .wsc). + - Edit (ext: .bat, .cmd, .jse, .reg, .text, .vbe, .wsf). +[.809.1]- Configure other application to open hyperlink (instead of default browser). +[.805.1]- File URL forced to open in new window by (Ctrl+Alt+Click). +[.805.1]- File change notification, if removed current file is recreated. +[.805.1]- Allow definition of line number for file:/// URL (separator is ':' ). +[.804.2]- File change notification Dlg: add "Indicator (silent) option. +[.804.2]- Configurable File on disk Change/Deleted indicators for title bar. +[.726.1]- "grepWinNP3" (current grepWin dev) allow multiple search paths (GRE). +[.709.2]- Add "KiXtart" lexer (new in Lexilla) (LEX). +[.709.1]- Integrating style theme "Sombra" as factory default Dark-Mode theme. +[.525.1]- Add "Julia" lexer (new in Lexilla) (LEX). +[.506.1]- Base64 Encoding/Decoding. +[.428.1]- Custom ChooseColor resource definition. +[.426.1]- Prepare Application Manifest for to grant Identity for non-package desktop apps. +[.425.1]- Add file/dir exists/not-found to hyperlink tooltip (if file-url). +[.422.1]- Support Scintilla's new feature: indicator stroke width. +[.420.1]- TXT file for Translators to comunicate Line Mumbers of the "Added/Modified" strings. +[.420.1]- Code Color for the "Change date" of the "Added/Modified" strings to translate". +[.420.1]- More intermediate font weight constants added. +[.420.1]- Remove useless font stretch handling. +[.419.3]- Add font weights retina(450), semi-light(350) and extra-black(950). +[.419.2]- Line Comment Add/Remove commands, additonal to existing Toggle. +[.415.1]- Cut lines for rectangular and multi selection. +[.412.1]- Use 'Ctrl+' key to force dropping files into new instance (Ctrl+ for new instance). +[.402.1]- ScintillaWin horizontal mouse-wheel support. +[.331.2]- Provide Mono-Language IDs. +[.331.1]- Mono-Language compiler switch for MiniPath. +[.325.1]- Compiler switch to allow Mono-language binary (no MUI DLL loading). +[.324.1]- Exclusive Lock (write) Mode shown in windows title. +[.323.1]- Menu item for excusive File Locking (write, shared read). +[.323.1]- Decorator styling for Python files. +[.321.1]- Exclusive File Lock option. +[.301.1]- About Dlg: version info for split-off Lexilla component. +[.301.1]- About Dlg: Copy-Ver-Info-Btn : add Dark-Mode information. +[.301.1]- Some filesystem path vs. file:// URL helpers (backslash invert). +[.301.1]- Converter: File-System Path to URL and vice versa. + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +[.825.2]- Non themed app: edit-window frame visibility. +[.811.1]- Current Lexilla dev (chg: HTML(PHP) Lexer) (LEX). +[.811.1]- Scintilla Python generator methods for embeddable Python (SCI). +[.811.1]- MUI base language definition moved to solution's preprocessors (C/C++ & RC) defines. +[.803.1]- Optimized default style handling for settings file (Dark Mode). +[.803.1]- Adapted other Dark Mode Theme Files. +[.802.1]- Default FileWatchingMode from "don't care" to "notify by MsgBox". +[.721.1]- Adapded "Sombra" Dark Mode default color scheme. +[.721.1]- Rename "KiX Config" to "KiXtart Script". +[.703.1]- Enable Dark Mode feature for Win11 v21H2 Insider beta. +[.529.2]- Win10 Release-ID as string (allows 20H2 or 21H1). +[.529.1]- Improved Julia Lexer (LEX). +[.526.1]- Batch-Lexer + patching Markdown-Lexer (eolfilled header lines) (LEX). +[.526.1]- Scheme-Dlg: dynamic (alloc) Style-Backup handling. +[.525.1]- Update Lexilla Lib (bug fixes for Lexer: Markdown, Cmd/Batch) (LEX). +[.515.1]- "grepWinNP3" based on current grepWin ver (boost v1.76 , upd: sktoolslib). +[.515.1]- Add some more coding fonts to prefer over Consolas (if installed). +[.515.1]- Linker: hardware-enforced stack-protection. +[.513.1]- Canonicalize style section of .ini-settings. +[.512.1]- Keep found initial common base default font in .ini. +[.507.1]- Base64 Decoding: select source code-page for decoding. +[.507.1]- Base64: default Encoding/Decoding based on current code-page +[.427.1]- Color selection dialog: NP3 icon, positioning and dark-mode. +[.427.1]- Adjust standard colors for URL Hyperlink (better standard dark-mode visual). +[.425.1]- New default for hyperlink tooltip is OFF. +[.425.1]- Immediate indicator hover response (colordef-hotspot, hyperlink-tooltip, hex-code-tooltip). +[.422.1]- Code cleanup for Font and Style Selection. +[.421.1]- Prefer "Cascadia Code" font over "Consolas" font for default if installed (ligatures). +[.420.2]- Custom Font Selection Dialog. +[.419.2]- Comment BockEdit shortcut changed (Ctl+Alt+Q => Alt+Shift+Q). +[.419.2]- Comment has separate popup menu (Edit -> Selection). +[.419.1]- Move some Lexer related functions to other module. +[.419.1]- Enable compiler warnings level 4 and issue "Warnings as Errors" (for Lexilla, Scintilla, grepWinNP3). +[.417.1]- Remove short-note from wrap around match tooltip. +[.416.1]- Save bookmarks in file history in case of "Save as...". +[.416.1]- Minimize usage of deprecated LCID/LANGID for MiniPath. +[.415.1]- Cpp-Lexer fix merged from Lexilla (5b92f7219a9fe9fb0ae4c5cc19f57c39185e4074. +[.414.2]- Minimize usage of deprecated LCID/LANGID for Notepad3. +[.414.1]- New size "4MB" for "FileLoadWarningMB=4" (Styling and Syntax Highlighting are switched off). +[.413.2]- Configurable position offset on launching new instance. +[.413.1]- Clarify menu item string (only one instance per file). +[.413.1]- Drag-n-Drop: allow multiple files to drop. +[.413.1]- Drag-n-Drop: replace current file (Ctrl+ for new instance). +[.413.1]- Menu/shortcut: launch "New Empty Wnd" <-> "Duplicate Instance". +[.411.2]- Adapt to Scintilla v5.0.1 new translucent alpha color (marker). +[.406.1]- C/C++ Lexer: styles and keywords (LEX). +[.331.1]- Cleanup code: SplitUndoTransaction() on timeout resp. line-break. +[.329.1]- Turning "Line Comment Block Edit" from option into command (Ctrl+Alt+Q). +[.326.1]- Kotlin & Dart Lexer from Zufuliu's source. +[.323.1]- File Lock: exclusive write/change, shared read. +[.323.1]- Style color for triple strings in Python Lexer. +[.316.1]- Cleanup lexilla component. +[.311.1]- Using some more Scintilla direct call methods instead of SendMessage() thread independent calls. (SCI). +[.311.1]- Refactoring for splitting Lexilla from Scintilla (SCI). +[.303.1]- Renaming Spanish Mexican to Spanish Latin America (es-419) (MUI). +[.302.1]- More liberal Hyperlink scanner (no need for validation here!). +[.302.1]- RegEx API : retun matched pattern length too. +[.302.1]- Prevent Path to URL conversion, if Hyperlink RegEx pattern does not match. +[.301.1]- Enable Dark Mode feature for Win10 v21H1 insider beta. +[.301.1]- EOL-Mode: status-bar double-click : inverted cyclic change rotation CRLF -> LF -> CR. + +-------------------------------------------------------- +CHANGES Versions in Tools or Libraries: +-------------------------------------------------------- +[.802.1]- Update Lexilla Library (LEX) version 5.1.2 (2021-07-26). +[.726.1]- Update Scintilla Library (SCI) version 5.1.1 (2021-07-26). +[.726.1]- Update grepWinNP3 (GRE) version 2.1.8.39 (2021-07-26). +[.702.5]- Update Oniguruma Regex (ONI) engine version 7.0.0 (2021-06-23). + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +[.903.1]- Broken relative paths in file history selection. +[.828.1]- Open color selection on Ctrl+Left mouse click on color indicator too. +[.828.1]- Change cursor hand on Ctrl key-Up. +[.827.1]- Broken "scroll undo/redo history via mouse (RMB+WHEEL)" feature. +[.827.1]- Don't jump on initial F/R Dialog on empty clipboard. +[.827.1]- Cursor hand on ctrl-keydown hover hyperlink. +[.826.1]- Show hand cursor on hyperlink after dwell time (if ctrl key pressed). +[.825.2]- Caret change to hand over hyperlink only if ctrl is pressed. +[.825.1]- Some minor corrections on visual appearance. +[.824.1]- Sync status bar font size on system font size change. +[.824.1]- Restore previous window position while DPI scaling changed meanwhile. +[.822.1]- Missing .ini must not have an assertion failure, allowed case here. +[.820.1]- Specify "/utf-8" compiler option for "Scintilla, Lexilla and grepWinNP3" projects. +[.813.1]- "grepWinNP3" project: post build step - xcopy .lang files to desired build output dir (GRE). +[.813.1]- Remove obsolete (by SCI Lib v5.1.1) settings. +[.809.2]- Size of visible whitespace style. +[.809.2]- Workaround for additional selection typing. +[.807.1]- RegEx line begin pattern stuck after zero-length replacement. +[.806.1]- Launching file URL (Alt+Click) with respect to flags "Reuse Window" and "Only one Instance per File". +[.805.1]- File URL tooltip. +[.804.1]- Config version dependent "FileWatchingMode" settings value. +[.804.1]- File change notification in Title Bar. +[.804.1]- Trigger reset file changed on disc flag. +[.724.1]- Remove multiple file Notification, if current file has been deleted. +[.723.1]- F/R-Dlg: show match while typing protected characters. +[.722.1]- Fixing "infinite" loop in Markdown Lexer. +[.722.1]- Forced file ext written to scheme export. +[.722.1]- File-ext writing to stxle .ini files only on export. +[.707.1]- Distinguish Win10 vs. Win11 using build number (>=22000). +[.529.2]- F/R Dialog regression: allow replace in selection (if selection not empty). +[.527.1]- Correct handling of F/R dialog pattern combo-box dropdown list. +[.527.1]- Minor fixes Markdown-Lexer. +[.513.1]- Go to doc begin after global indentation change. +[.513.1]- Minor enhancements for selection scroll to view. +[.513.1]- Optimized handling of multi-step undo/redo notifications. +[.512.1]- Slow line-break toggle. +[.511.2]- TinyExpr: expr need not start with blank. +[.511.2]- TinyExpr: UTF-8 to ANSI-CP-1252 conversion should yield invalid characters instead of blank or currency. +[.511.1]- Space-width, avgchar-width and tab-width calculation. +[.511.1]- Scintilla missing recalculation of space width (to get correct tab width for indentation). +[.511.1]- Revert to Scintilla std tabwidth calculation on font changes. +[.511.1]- Preserve "2nd Common Base" styling state across restarts. +[.511.1]- Default style settings should not be written to .ini-file. +[.429.1]- Handling of "File Vars" vs. "Encoding Tags". +[.427.1]- Minor fixes around font redrawing. +[.423.1]- Add thread COM initializations. +[.423.1]- Adding DPI awareness to MiniPath (correct toolbar handling still open point). +[.423.1]- minor corrections for customized font selection dialog (dark-mode and dpi-awareness). +[.423.1]- DWRITE font allocation needs to font.family, not font.face name (Scintilla fix). +[.421.1]- Correcting regression for icon scaling. +[.421.1]- Rendering of "Relaunch Elevated" menu icon. +[.421.1]- Regression on schema color definition. +[.421.1]- Another bug retrieving Font SIze for Common Default vs. Lexer Specific. +[.420.2]- Bug retrieving Font SIze for Common Default vs. Lexer Specific. +[.420.2]- Font Name handling retrieved from Common-Default vs. Lexer-Specific. +[.420.1]- Copy multi-selection to clipboard: separate each match by line-break. +[.419.1]- Apply provided Scintilla patch. +[.419.1]- Stream comment for .AU3 files. +[.419.1]- "grepWinNP3": fix compiler warning Release Win32 (GRE). +[.416.2]- Workaround Scintilla text-rendering bug, if line-number margin width set to 0 (so use 1 instead). +[.416.1]- Save Schema config in case of inifile from scratch. +[.415.1]- Small correction to Line Cut feature (thin selection). +[.414.2]- Minipath uses NP3 preferred language, if not configured. +[.414.2]- Compiling mono-language compiler switch version. +[.414.1]- Std windows behavior for cascading new instances (if configured). +[.413.2]- Sticky Window Flag on launching new instance. +[.413.1]- Prevent duplicate instance, if setting does not allow. +[.412.1]- Lazy styling (no need for SCN_STYLENEEDED). +[.412.1]- Caret visibility on JumpTo() after file (re-)load. +[.412.1]- FileWatching (file change notification) in some special cases. +[.411.2]- Mark occurrences: no additional bookmarker -> use invisible marker instead of background marker. +[.407.2]- New comment doc styling for C++ lexer (used for C#, RC, JS and Java too). +[.407.1]- Center dialog in parent: for system dialog and if minimized (tray or taskbar). +[.406.1]- Mark all Occurrences in case of reopened F/R dialog. +[.406.1]- Center dialog in parent. +[.406.1]- "grepWinNP3": fix missing search flags (GRE). +[.326.1]- TinyExpr regresion inserting newline after equal sign. +[.325.3]- Possible busy-loop in Kotlin and Dart Lexer. +[.325.2]- Don't keep window top-most after returning from full-screen mode (F11 toggle). +[.325.1]- Compiler switch to allow mono language binary. +[.324.1]- Read-Only-Attribute cooperating with Exclusive-Write-Lock. +[.323.1]- Lexer "Python": fixing Format-Strings (f-strings). +[.321.1]- Regression with vertical slope definition. +[.321.1]- Some regressions around external file change notification. +[.316.1]- "grepWinNP3" Language-ID "[xx-YY]" exceeds 5 chars (e.g. [es-419]) (MUI). +[.312.2]- Limit ChooseFont Dlg to CF_SCALABLEONLY for DirectWrite Technology. +[.312.1]- Rectangular selection typing issue. +[.309.1]- Replacing the "RCdll.dll" file to avoid garbage chars in foreign languages (MUI). +[.309.1]- In ".zip" version, some filenames in "gwLng" folder are incorrectly displayed (MUI). +[.303.1]- Language "Spanish Latin America" identifier correction (es-LA -> es-419) (MUI). +[.302.1]- Hyperlink RegEx pattern fixed to use valid Unicode. +[.302.1]- Handle quotes for URL <-> file-system path conversion. +[.301.1]- "grepWinNP3": hide progress bar after search finisched (GRE). +[.301.1]- ShellExecute() lpVerb for open hyperlink (Ctrl+Click) set to "open. +[.301.1]- Data type mismatch. +[.301.1]- Decoding of url-encoded file Hyperlinks ("file://..."). + +-------------------------------------------------------- +REMOVED: +-------------------------------------------------------- +[.828.1]- Open color selection on Alt+Left mouse click on color indicator. +[.807.1]- Remove deprecated (no sensible use case) "overlapping find" option. +[.506.1]- "fontsValid" extension (closer to default scintilla code base). +[.420.1]- Remove useless font stretch handling. +[.419.2]- Removing the font-style string for font selection. +[.411.1]- Remove deprecated WinXP support (no horiz. mouse wheel). +[.311.1]- Obsolete SCI_LEXER preproc symbol / no need to link lexers in Scintilla. + +-------------------------------------------------------- +TRANSLATIONS (MUI): +-------------------------------------------------------- +[.707.1]- Chinese Traditional (zh-TW). +[.417.1]- Greek (el-GR). +[.303.1]- Portuguese Brazilian (pt-BR). + + +======================================================== +Version 5.21.227.1 (27 February 2021) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +[.205.1]- Use user locale for date/time insert format: can be menu switched to preferred UI language. +[.124.1]- Enable horizontal scrolling by "Shift + Mouse-Wheel". +[.117.1]- Show search wrap-around tooltip (issue #3038). +[1222.1]- Kotlin Source Lexer based on Zufuliu's Kotlin Lexer code base. +[1222.1]- Dart Lexer based on Zufuliu's Dart Lexer code base. +[1221.1]- TinyExpr: additional number parsing for binary (0b...) and octal (0o...) number formats. +[1109.1]- Extension ".pkb" to SQL Lexer. +[1012.1]- 'Dark Mode' support for Windows 10 20H2 Version 2009 (Build 19042). +[1004.1]- Open/Save file explorer dialog: populate file filter with current lexer supported file extensions. +[.929.1]- Minipath.ini: [Settings2] FocusLostOpacity=100 (opycity level on losing focus). +[.923.1]- Hotkey 'F3': use MRU latest item before clipboard content as search pattern if prior search pattern is empty. +[.922.1]- Support Lexer switching while Customize Schemes dialog is open. +[.921.1]- Expand current lexers style tree on customize schemes dialog startup. +[.920.1]- grepWinNP3: "Stay On Top" titlebar context-menu (GRE). +[.918.1]- Faster statusbar update response / avoid flickering. +[.917.2]- Reducing Titlebar, Toolbar and Statusbar flickering. +[.916.1]- Set Light/Dark Mode for grepWinNP3 execution (GRE). +[.916.1]- Customize Schemes: show selected theme title. +[.915.2]- DarkMode: remember DarkMode chosen Scheme/Theme for next start. +[.915.2]- Configurable Dark Mode colors (non Explorer-Theme, Owner-Drawn). +[.915.2]- Menu item to switch between Default and Dark-Mode. +[.915.2]- DarkMode: Toolbar, static checkbox/listbox control. +[.915.2]- Win10 DarkMode Awareness (initial development). + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +[.223.1]- MiniPath: support mouse xbuttons for browsing direction. +[.223.1]- Code styling reformat MiniPath sources (AStyle: OTBS). +[.219.1]- Simple Line Comment Toggle handles each line separately +[.219.1]- Menu move Line/Stream Comment items to Edit -> Selection top. +[.218.1]- Find/Repl dialog - refactoring and minor fixes. +[.213.1]- JSON5 enhancements to Scintilla's original JSON-Lexer. +[.211.1]- Statusbar Selection-Info: switch to byte (instead of character) counting for huge files. +[.205.1]- Use user locale for date/time insert format: insert date before time & tab separated. +[.124.1]- Tinyexpr evaluation of math constants "e" and "pi" not being separated from prepending text. +[.116.1]- Extent static find/replace/mark occurances pattern buffer to 4095 characters. +[1223.1]- Initial start screen resolution independent fixed base font size. +[1218.1]- Avoid wrap-around requester if there is no other possible occurrence. +[1214.1]- Behavior change: copy to clipboard on empty selection -> don't copy anything if current line is empty. +[1214.1]- Update keywords list in Style INNO Lexer. +[1211.1]- No error message after decline loading file of huge size. +[1201.1]- Renaming Chinese displayed encoding according to MIME/IANA. +[1118.1]- Sci_PositionCR type reverted to long for Win32 compatibility reasons. +[1001.1]- Rebase DarkMode module on delay load version branch of win32-darkmode project. +[.930.1]- Update the KeyWordList of lexers "C# Source Code" and "SQL Query". +[.930.1]- Bookmark Occurrences Colors changed to get perceptually distinct colors. +[.929.1]- Migration from CreateLexer() by ID to CreateLexer() by Name (Lexilla IFace5 conform) (GRE). +[.928.1]- TinyExpr format floating.point with non zero fractional part. +[.927.1]- TinyExpr: change format (allow longer integer before switching to mantissa/exponent format). +[.925.1]- Prepare for Lexilla Library (Scintilla v5) (SCI). +[.925.1]- Using @zufuliu's EOL Mode detection enhancement (no SSE2 or AVX2 specializations). +[.923.1]- Unify search-pattern retrieval: (0.selection)[F/R-DLG] - 1.previous-search/MRU-List - 2.clipboard. +[.920.1]- grepWinNP3: save changed "Stay On Top" settings on exit (GRE). +[.920.1]- First part of DarkMode Theme for MiniPath. +[.917.4]- Separate DarkMode window-backgr color from button-facecolor. +[.916.1]- Opacity level on loosing focus for grepWinNP3. +[.916.1]- TinyExpr: '%' operator: distinguish between modulo and percent operation by context. +[.915.3]- Due to lack of interest, "Notepad3DLL" is discontinued. +[.915.2]- User configurable "Web Action" menu item names. +[.205.2]- Update grepWinNP3 (GRE) version 2.1.6.34 (2021-02.05). +[.124.1]- Update Oniguruma Regex (ONI) engine version 6.9.7 (2021-01-24). +[1214.1]- Update Scintilla Library (SCI) version 4.4.6 (2020-12-01). + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +[.226.2]- URL-Decoding of file Hyperlinks ("file://..."). +[.226.1]- Wrap-Around tooltip use correct encoding. +[.222.2]- Multi-Line movement: proceed to document end correctly. +[.222.2]- Toggle comment on empty selection at insertion point: keep position of selection end. +[.222.2]- MiniPath: Enable Mouse XButton usage ("browse back and forth"). +[.220.1]- Toggle Comment: proper selection handling. +[.219.1]- Do not move selection on search pattern change if in Replace-Dlg. +[.219.1]- FJSON Lexer has comments enabled now. +[.219.1]- F/R-Dialog - allow multi-line clipboard paste to Replace String combobox too. +[.218.2]- F/R: fixes some issues around RegEx zero-length match/findings. +[.218.1]- ReplaceAll. avoid busy loop (infinity) while replacing zero-length-match (RegExpr). +[.218.1]- F/R dialog don't change selection by typing search pattern. +[.218.1]- F/R show wrap-around tooltip only if message boxes are hidden. +[.215.1]- JSON5 string line continuation. +[.212.1]- Context-Menu Handling in Release Mode. +[.211.1]- Burndown some VS Analyze Mode Infos/Warnings. +[.205.1]- Wildcard search: unintentional wrap around. +[.125.1]- AHKL lexer: visual brace matching mix-ups. +[.124.1]- InfoBox message icon DPI scaling. +[.122.1]- Tinyexpr functions and constants parsing. +[.116.1]- Buffer overrun while initializing structures. +[.116.1]- Fix Font Dialog (Size handling) problems (issue #3012). +[1219.1]- F/R dialog: Transform Backslash option glitch. +[1219.1]- F/R dialog: message box in case of not matching pattern. +[1218.1]- Multi-Replace using RegExpr and Group-References. +[1211.1]- Refactoring encoding detection: pure ASCII vs. 7-bit. +[1125.2]- File encoding analysis with 7-bit ASCII only. +[1125.2]- File save problem after switching encoding to GB2312 (52936). +[1116.1]- Initial path on OpenFile dialog (load file). +[1116.1]- Compiler complaints (new VS2019 version v16.8.1). +[1024.2]- Allow single character filename on command line. +[1012.2]- Disable Copy/Cut complete lines on partial multi-selection. +[1012.1]- Find/Repl all in range algo. +[1012.1]- Oniguruma flexible EOL handling (Win CRLF, Unix LF and Mac CR) (ONI). +[1012.1]- Replace all in range. +[1012.1]- Avoid file cache lost on power failure. +[1006.1]- Copy/Cut/Delete "Focused View" lines (clipboard). +[1006.1]- Cut/cop occurrences marker line(s) if marker in first line. +[1004.1]- Initial directory for open/save file Explorer dialog. +[1001.1]- TOML Lexer performance leak. +[.928.2]- Freezing of main window caused by mixed usage of Lexer Interfaces. +[.928.1]- Setting new IFace5 Lexer (should fix line/stream comment toggle issue #2912). +[.927.1]- Lexer file extensions maintained in standard config. +[.927.1]- grepWin language switching (github.com/stefankueng/grepWin/issues/199) (GRE). +[.926.1]- Clone full .ini-file path for forked new instance (GRE). +[.926.1]- grepWinNP3: wide char path names for language files (GRE). +[.925.1]- Stop file change notification on deleted files if save is rejected. +[.925.1]- Some RegEx engine fixes (current Oniguruma dev) (ONI). +[.923.1]- Performance leak in TOML Lexer. +[.923.1]- Customize Schemes title assembling. +[.922.1]- DarkMode switching while non-modal dialogs are active. +[.921.1]- TinyExpr: interpretation of '%' operator: allow "(...)" on rhs of modulo interpretation. +[.921.1]- TinyExpr: remove the need of blank for smart interpretation of '%' operator. +[.921.1]- Failed to set DarkMode for owner drawn ComboBoxEx controls. +[.921.1]- DarkMode: toolbar button text. +[.921.1]- Let DarkMode work with 20H2. +[.920.1]- grepWinNP3 new instance: read correct .ini-file (protable) (GRE). +[.918.2]- Fix Win7 start-up crash. +[.918.1]- Final default color correction (toolbar, statusbar and margin). +[.917.4]- Allow removing of compile pre-processing switch D_NP3_WIN10_DARK_MODE. +[.917.3]- Bring back themed ReBar (Toolbar parent) for Win7. +[.917.3]- Bring back themed ReBar (Toolbar parent) for Win10 using Light Mode (DarkMode not wanted). +[.917.2]- Win7 Toolbar background back to COLOR_BTNFACE, Win10 stays with COLOR_WINDOWS. +[.916.1]- Update Titlebar on document modified. +[.916.1]- Clean .ini-config for default values. +[.916.1]- Standard margin background colors. +[.915.2]- DarkMode: switch std. background and text color too. +[.915.2]- DarkMode support / init / settings handling. + +-------------------------------------------------------- +REMOVED: +-------------------------------------------------------- +[.921.1]- TinyExpr: '%%' as percent operator is deprecated. + +-------------------------------------------------------- +TRANSLATIONS (MUI): +-------------------------------------------------------- +[1028.1]- Hindi (hi-IN). + + +======================================================== +Version 5.20.915.1 (15 September 2020) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +[.911.1]- Allow colon (:) as alternate divide operator to calculate TinyExpr. +[.825.1]- grepWinNP3: default extension on saving search result list. +[.824.1]- Focused-View: mode Fold-Only. +[.823.1]- Mark Occurrences: show additional Bookmark (Arrows). +[.823.1]- Bookmark context menu: clear marker type. +[.822.2]- FocusedView Options: Bookmarks/Line-Highlight & Folding. +[.821.1]- Bookmark margin context menu. +[.819.1]- 1st version of Occurrences Bookmarks on Focused-View. +[.816.1]- Controls to clear history (file and find/replace). +[.815.1]- Using dialog RTL option for Main window too. +[.813.1]- Right-to-left (RTL) title/frame layout for some dialogs. +[.813.1]- Edit Right-To-Left (RTL) mode (works only in GDI device context (DC)). +[.812.1]- Extended context menu (margin commands, file explorer). +[.812.1]- Context-Menu to toggle margins. +[.811.1]- Color-Definition Hotspots: support RGB+A (default), A+RGB and BGRA. +[.808.1]- Configuration for "Search in Files" toolbar label. +[.802.1]- Configuration ([Settings2]LargeIconScalePrecent) percent to switch to bigger file types icons. +[.727.1]- DPI-Aware treeview/listview lexer type icons. +[.727.1]- New string "Calculate Tiny-Expressions". +[.722.2]- ARM64_Build branch (Xperimental). + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +[.914.1]- F/R Dialog: toggle "Esc Ctrl Chr", try reverse operation if no length change +[.913.1]- Bad design: F/R dialog: remove auto Esc Ctrl Chr (changed to manual explicit). +[.901.1]- Open Recent File: Rename the Cancel button to Close button. +[.901.1]- grepWinNP3: alpha transparency on losing focus. +[.828.1]- Rearange and review "File Encoding" menu to clarify behavior. +[.826.1]- Default for file-encoding-tag parsing -> OFF. +[.826.1]- Swap file-encoding-tag parsing priority (encoding <-> coding). +[.825.1]- Revert Initial Font-Size based on DeviceCaps. +[.825.1]- Initial Font Size based on DeviceCaps (=> FullHD unchanged). +[.824.2]- grepWinNP3: Export search result list (NP3 enhancements). +[.823.1]- Delete Bookmarks (Alt+F2): 1st delete occurrence markers then std. bookmarks. +[.822.1]- Remove max count limitation for "Mark Occurrences" feature. +[.821.1]- Bookmark context menu on alpha-blend FocusedView marker line. +[.821.1]- Convenient message box text for normalizing EOLs. +[.817.2]- grepWinNP3 and minipath: special dialog box UI fonts for Asian languages. +[.816.1]- Use optimized Asian UI fonts for Notepad3 dialog boxes. +[.815.1]- Focused View: scroll to current position on each toggle. +[.805.1]- grepWinNP3: add OS architecture (x64) - AboutBox (GRE). +[.805.1]- Replace "64-bit"/"BETA" by "x64"/"beta" to shorter the version name. +[.803.1]- Title font change DPI-Awareness for About and Customize Schemes dialog. +[.802.1]- Resample scaling of info-box icons on DPI change. +[.802.1]- Revert System's Message box for "save confirmation" (if message beeps are allowed). +[.802.1]- High Quality Bitmap resampling method (Rizonesoft Bitmap). +[.729.1]- DPI-Aware About & Custom.Scheme dialog. +[.729.1]- Swap Shortcuts: "Search in Files" -> "Ctrl+Shift+F" and Toggle Folds -> "Ctrl+Alt+F". +[.723.1]- Review document modified handler (dirty-flag). +[.825.1]- Update grepWinNP3 (GRE) version 2.1.3.28 (2020-08-25). +[.813.1]- Update Oniguruma Regex (ONI) engine version 6.9.6 (2020-07-31). +[.818.1]- Update Scintilla Library (SCI) version 4.4.4 (2020-08-18). + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +[.914.1]- TinyExpr: crash on rectangular selection. +[.912.1]- TinyExpr: enable CP1252 operators '×'(mul) and '÷'(div). +[.912.1]- TinyExpr: ignoring currency chars ("$€¢£¥") in expressions. +[.912.1]- TinyExpr: "=?" result not taken into account. +[.911.2]- TinyExpr: inline evaluation on active option only. +[.911.2]- TinyExpr: allow rh equal and questionmark. +[.911.2]- TinyExpr: newline after evaluation by '='. +[.911.1]- Allow RETURN / ENTER after equal sign (=) to calculate TinyExpr. +[.908.1]- SubMenu active marker (Occurrences Indicator Options). +[.906.1]- Delete marker of (comletely) deleted lines. +[.905.1]- Initial state of "Focus View" button in F/R-Dlg. +[.901.2]- Buffer size calculation. +[.901.2]- Running out of occurrences bookmarks. +[.901.1]- Crash caused by buffer overflow. +[.831.1]- Recent File List (File History): Disable OK/Remove on empty list. +[.831.1]- Enhanced internal icon/bitmap handling. +[.830.1]- Remove needless function. +[.830.1]- F/R Dialog: Auto-Esc-Chars handling. +[.830.1]- F/R Dialog: Clear F/R History - remove entries from .ini-file too. +[.829.1]- Buffer to small in case of auto-esc ctrl-chars in find/replace edit-control. +[.825.2]- Wrong Focused-View Mode shown in menu. +[.825.2]- Try to fix (hardly reproducible) "copy Hyperlink issue (#2202). +[.825.1]- Regression: initial calculation of Print-Zoom factor. +[.824.1]- Not intended bookmarker on F/R dialog mark findings. +[.823.1]- Bookmark Occurrences too menu checked. +[.823.1]- Scroll to cursor for selection start/end jumps. +[.823.1]- Not intended "violet" bookmark. +[.821.1]- Context menu procedures for Occurrences Bookmarks on Focused-View. +[.819.3]- Single click in status bar's EOL segment will ask for consistent line-end change. +[.819.2]- Find any next/prev. bookmark (std or word). +[.818.1]- Scintilla bug fixes: SCICALL attribute (SCI). +[.817.1]- Reload language resource for about-box on init (maybe language changed). +[.815.1]- DPI Awarenes of window positions (default, sticky, ...). +[.813.1]- Center dialo in parent (if parent is minimized). +[.812.1]- Fix copy search for & path to (only one) existing instance (GRE). +[.812.1]- "grepWinNP3": fix invalid searchPath Ballon-Tip handling (GRE). +[.812.1]- [Settings2] filebrowser.exe=explorer.exe. +[.812.1]- Text contrast on hover color hotspot. +[.811.1]- Set preferred language to internal, on "not available confirmation dialog" is enabled. +[.808.1]- Center system's MessageBox in parent window. +[.808.1]- Relative calculation of title font size for AboutBox and CS dialog. +[.805.1]- Unicode Point detection and enhanced Color Tag contrast on hoover. +[.805.1]- DPI-Awareness of "Customize Schemes..." dialog icon eye sugar. +[.805.1]- DateTime and Timestamp handling. +[.803.1]- No read-only file attribute if removed externally. +[.802.1]- Some more DPI-Awareness issues. +[.801.1]- Ensure selection visible (scroll to current position). +[.801.1]- Extend selection to next find (Ctrl+Alt+F2). +[.801.1]- DPI-Awareness of About-Dlg (especially RichEdit-Ctrl). +[.801.1]- Non case sensitive style attribute search (find file extensions non case sensitive). +[.724.1]- Notepad3 should save (no ask) & exit on Shift+ESC Hotkey. +[.723.2]- Clear selection by ESC should not populate undo/redo stack. +[.722.2]- No document modified flag on forced re-decode file (recode) w/ other encoding. + +-------------------------------------------------------- +REMOVED: +-------------------------------------------------------- +[.913.1]- Nop SendMsg. + +-------------------------------------------------------- +TRANSLATIONS (MUI): +-------------------------------------------------------- + + +======================================================== +Version 5.20.722.1 (22 July 2020) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +- grepWinNP3: export search results (GRE). +- changed grepWinNP3 icon (GRE). +- Add Toolbar icon for grepWinNP3. +- Configurable Zoom-Tooltip display timeout ([Settings2] ZoomTooltipTimeout=3200). +- Add Install/Remove "Open with Notepad3" to Notepad3 Setup/Installer (SUP). +- Add additional Dark Theme "Sombra". +- Strip first char: allow multi-selection. +- Open default browser while clicking tooltip (hovering hyperlink). +- Regex multi-select feature. +- Toolbar hot-button if view is zoomed (<>100%). +- Call-Back Notepad3 (from grepWinNP3) with case-sensitive and dot-match-all flag (if applicable). +- Add "Overlapping Search" in Find/Replace dialog window. +- Integration of external Search-In-Files tool named "grepWinNP3" (GRE). + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +- "grepWinNP3" About dialog wrapping long text (GRE). +- Silent ignore write permissions missing on Inifile. +- Replace non DPI Aware MessageBox for "Save on Close" by internal InfoBox +- Set DirectWite (D2D) rendering technology as new default. +- Two stage Toolbar reset (customizing dialog): 1st -> settings 2nd -> factory default. +- DPI_CHANGED msg handler. +- Enhancement of the "build_np3portableapp.cmd" file. +- Remove duplicate readme.txt, license.txt and unused files. +- Move all readme.txt, license.txt, KeyboardShortcuts.txt, etc... files + from "Notepad3Portable\Other\Help" to "Notepad3Portable\App\Notepad3\Docs" +- Review and format the license.txt file for the dialogbox of INNO Installer. +- Font style/face-name handling. +- Extended Font selection dialog (Effects). +- Font selection refactoring. +- Revised grepWinNP3.ini file creation. +- Minor changes for dialog handling on DPI changed. +- Preparations for dpi-aware resizable "Customize Schemes..." dialog. +- DPI change handling: About & Schemes dialog. +- Markdown Lexer: new defaults for Header lines. +- Strip first char: do not apply on all text (empty selection). +- Reorganization Context menu. +- Bigger prev/next button-icons (Customize Schemes... dialog). +- Hyperlink double-click and MMB-click behavior. +- Filevar tag "fill-column" changes to support multi-column marker. +- Installer to let the user select the target directory. +- Changed Default long-line wrap settings. +- Remove spinning wait-cursor for text operations (may need reactivation for long operations). +- Add filepath to message on file locking error. +- Update grepWinNP3 (GRE) version 2.1.3.20 (2020-07-21). +- Update Oniguruma Regex (ONI) engine version 6.9.6 (2020/07/05). +- Update Scintilla Library (SCI) version 4.4.3 (2020/06/03). + +-------------------------------------------------------- +ENHANCEMENT: +-------------------------------------------------------- +- "grepWinNP3": add "Dark mode" settings (GRE). +- "grepWinNP3": asynchronous search & replace version (GRE). +- DPI awareness and multi monitor handling. + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +- Alt+W (strip trailing blanks) should work w/o selection. +- TimeStamp handling. +- Menu selection operation (disable w/o selection). +- Move view to matching brace (even if outside current work area). +- Ask before overriding read-only protected configuration file. +- Respect read-only file attribute of .ini-settings-file (configuration). +- Undo/redo empty selection redundancy. +- Multiple line-/stream-selection undo/redo. +- Disabled Find/Replace or Customize Schemes (by modal child) dialog should disable main window. +- Printing scaling problem related to DPI awareness changes. +- System MessageBox "save before close" positioning. +- Reset of Toolbar configuration dialog. +- Crash if "close after find" is enabled. +- Keep current line on reverting file. +- Limit length of (manual) commit ID. +- DPI Aware relative positioning of position managed dialog boxes. +- DPI: awareness for Find/Replace-Dlg (remove resize property). +- DPI: awareness for Lexer-Selection-Dlg (remove resize property). +- DPI scaling for Scintilla surface component (thanx zufuliu). +- Unexpected selection of hyperlink in first line on empty doubleclick. +- Missing UI update (Margin Width). +- Don't overwrite grepWinNP3's user settings for backup in folders (GRE). +- Common base font inheritance for other styles. +- "grepWinNP3" crash on invalid file path (GRE). +- "vcxproj" should use the latest installed SDK. +- Scintilla as DLL solution. +- Extended font style selection. +- Don't add recent file list (history) to taskbar's jump-list. +- Fixing some CppCheck complaints. +- Broken x86 (32-bit) build. +- Theme scheme file handling (file extension inheritance). +- Remember find pattern (Ctrl+F3). +- Customize Toolbar dialog closes immediately. +- ".ini-file" acquire lock for invalid file path. +- Cancel multi-selection on line up/down key. +- Initial behavior on open Find/Replace dialog. +- Lost Find/Replace dialog settings. +- Lazy syntax styling (copy into multi-line string, etc.). +- ToolsMenu flickering. +- "grepWinNP3": optimized single-tread worker option (GRE). +- View selection on wrapped long-lines vs. normalizing view. +- Don't protect backslash (double'\\') for pattern argument. +- "grepWinNP3" ordered map of languages for selection box (GRE). +- Translatable error message format (msgbox). +- DPI scaling window on display dependent. + +-------------------------------------------------------- +REMOVED: +-------------------------------------------------------- +- Remove DWrite Font Choose Dialog - need to type fractional font sizes manually. + +-------------------------------------------------------- +TRANSLATIONS (MUI): +-------------------------------------------------------- +- Korean (ko-KR). +- Portuguese (pt-PT). +- Spanish Mexican (es-MX). +- Slovak (sk-SK). + + +======================================================== +Version 5.20.411.2 (11 April 2020) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +- Executables and dll's are now signed. +- Fix DPI scaling of Toolbar bitmaps (avoid slicing by rounding errors). +- "Open with Notepad3" Right-Click in Explorer Context Menu (install/setup version). +- In About Resources: Data Sharing Service from https://workupload.com. +- Automatic scrolling when dragging selected text near window edge (SCI). +- break rectangular selection into multiple selection on end-of-lines (move caret). +- Infos of screen/display/dpi for "Copy Version Info" button. +- Preserve stream selection in file history (w/ text position remembering). +- Language dependent status bar abbreviations. +- Copy directory to clipboard and Open path in explorer. +- Toggle menu bar option. +- Add Lexicographical Line Sort Order. +- CSV Prism Color Lexer. +- Preserve File Modification Date/Time: Option stays until new session is started. +- Save with Original File Date/Time - Ctrl+Alt+F6. + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +- Change default settings for word/long-line wrapping. +- Update "KeyboardShortcuts.txt". +- Split undo typing sequence by line-breaks default -> true. +- Add file history to recent docs (taskbar) jumplist. +- NP3 INI file read/write using file locking (shared read / exclusive write) for multiple instances. +- Reset build-of-the-day number in AppVeyor on new day. +- Change version numbering of build_# (the build number is now daily based). +- Remove AppVeyors build number, add build-of-the-day number, add short version of commit/local build ID. +- Accelerator key remapping: move line up/down vs. jump folds. +- Separate auto esc'd control chars from "transform backslashes" switch in find/replace dialog. +- Increase encoding detection confidence threshold to 92%. +- Finetuning of Single Byte Char Set (SBCS) detection. +- Add current Encoding and Lexer to "Copy Version Text". +- Lexer keyword initializer list simplified. +- Find/Replace dialog: in case of "transform backslashes" do Esc control seqs. +- Upper confidence level for UCHARDET to: "AnalyzeReliableConfidenceLevel=92". +- UCHARDET: Enhanced confidence calculation for Single Byte Character Set (SBCS). +- Replace std messagebox "save modified file warning" by (silent) custom messagebox if message beeps are muted. +- Don't Auto-Close blank untitled document, only empty untitled document. +- Encoding detection fallback: if "Load ASCII as UTF-8" is checked use UTF-8 (if valid) else current ANSI code-page. +- Use Ctrl+Shift+L for toggle "Menu: Reuse Window" option. +- Inversion of Accelerator key Ctrl+Alt+L with Ctrl+Shift+L. +- Change wording "Administrator" to "Elevated". +- Hidden "ExitOnESCSkipLevel" feature (Exit on ESC can ignore a selection). +- ESC Key clears active selection (not exiting Notepad3 if configured) (Config: ExitOnESCSkipLevel=2). +- Set large file size limit to 2GB (INT32_MAX). +- Set big file size limit warning to 64MB (syntax highlighting is switched off) (Config: FileLoadWarningMB=64). +- New Notepad3 Icon (Notepad3 icon by Vexels.com designed by smanashova@gmail.com). +- Initial default big toolbar only for monitors > Full-HD. +- Copy to clipboard instead of insert (filename, path, GUID). +- Option [Settings2] LexerSQLNumberSignAsComment. +- Option [Settings2] LineCommentPortfixStrg= e.g. add a space to comment chars. +- Option [Settings2] NoCopyLineOnEmptySelection and NoCutLineOnEmptySelection. +- Appearance of INFOBOX4 (MB_YESNOCANCEL). +- Thin rectangular (multi) selection after toggling line-comment block for multi insertion. +- Full Work Area Mode (F11) -> Full Screen Mode (Maximize window if "full work area" is requested). +- Ctrl+Alt+Enter AutoCompletion behavior. +- Menu and behavior for copy/paste and copy/paste line. +- Allow each modification step to split undo typing sequence (set timeout 0 < to < 20ms). +- Split undo typing sequence (by line-breaks and/or timeout) (UndoTransactionTimeout=0, LnBrk via Menu). +- Update Oniguruma Regex (ONI) engine version 6.9.5 (2020/01/28). +- Update Scintilla Library (SCI) version 4.3.2 (2020/03/06). + +-------------------------------------------------------- +ENHANCEMENT: +-------------------------------------------------------- +- Load files larger than 2GB (64-bit) - Limit to 4GB (Scintilla problems). +- Parameter to set document limit for big files (switch off highlighting). +- ScintillaWin: IMEJPCancelAction (SCI). +- File locking mechanism (.ini-file) to avoid multi process file write race conditions. +- Menu entries for move line and folding control. +- Multi-line Search Find/Replace. +- Apply Start Case to AutoHotkey Lexer. +- Change to 1-pass (file open/close) to save settings in Notepad3.ini. +- Enclosing selection with HTML-Tag - Remember last pattern (session). +- Repeat selection enclosing (HTML-Tag) n-times control. +- Hyperlink detection for Unicode. + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +- Locale dependent string comparison and Logical Number comparison. +- Review scroll behavior for context menu and Stop scrolling on context menu click. +- Do not use analysis hint UTF-8, if file is invalid UTF-8. +- Configurable default ANSI code-page (locale) detection bonus. +- No AutoCompletion on empty words (busy loop bug). +- DPI Scaling Toolbar and DPI scaling selection mode. +- Common controls will use preferred/available MUI language. +- Sticky window position handling. +- Initial, default and current window position handling. +- Debug assertion (isspace() called on non ASCII char). +- Correct return result of Styles export. +- Scintilla method declaration. +- Move hardcoded lexer <-> filename (w/o .ext) associations to configurable scheme (regex def). +- Drag&drop rectangular selection shuffles chars. +- Paint() hangs due to unnecessary LockWindowsUpdate(). +- Drag&drop selection should use configured slop settings. +- Internal file-history submitted to taskbar JumpList. +- Load files larger than 2GB (64-bit) - Limit to 4GB (Scintilla problems). +- Automatic scrolling when dragging text near window edge: make caret visible after drop. +- No styling for big/large files (loading speedup and UI responsiveness). +- Esc skip level on rect/multi-selection. +- Avoid caret jump on cancel multi-selection (esc). +- In case of "Transform BS", swallow single slashes not related to a ctrl-char. +- Handling of default settings for deprecated 'SciDirectWriteTech=...' +- Concurrent access to .ini-File (lock file). +- Caret virtual space movement options: remove "SCVS_NOWRAPLINESTART". +- Jump to selection "start/end" operations. +- Word lists for LUA Lexer. +- Line Comment (Toggle) for NIM Lexer. +- Slow indentation (TAB/BACKTAB). +- AutoCompletion box. +- Find/Replace Dialog behavior. +- Transform backslashes while pasting into search/replace box. +- Some issues for lexers: YAML and JSON. +- Clipboard multi-line paste hook for Find/Replace pattern CB. +- Allow multi-line Search Find/Replace pattern. +- IME color and IME color styler. +- Wrong language reference for lexer : "Tag". +- "Recent Files" History handling. +- URL Encode/Decode (according to RFC 3986) for (Win7 API). +- Win7 "procedure entry point "SetCoalescableTimer()" could not be located. +- Wrap to Column - default=80. +- Preserve file modification time option on elevated. +- Elevated relaunch after encoding change. +- Sub dialog centering in multi monitor environment. +- Modern style message box icons. +- System MessageBox() for "not saved" warning on modified files. +- Oniguruma RegEx engine: respect EOL mode on encoding type. +- Wrong encoding detection settings for explicit config .ini-File load. +- Disable HyperLink calltip on ESC, as long as caret is in hyperlink text range. +- Crash on very large file size (rejecting too big files). +- Batch lexer: handle comment after ampersand(&) command sequence. +- Bug in replace on single step find/replace. +- Convert to Hex and vice versa: work on (stream-)selection (original source by ZuFuLiu). +- Comparison warning: signed/unsigned mismatch. +- Canonical ini-file style section order for settings from scratch. +- Prevent concurrent settings-file-access (re-launch elevated). +- Small fixes on "Relaunch Elevated" functionality. +- Minor fixes for window positioning by cmdline parameter. +- Minor correction of HotKey. +- Ctrl+Shift-C/X and Paste behavior. +- Markdown highlight overflow. +- Redo initial selection after replace (ins/del). +- Hyperlink Regex detection and Update visible indicator issue. +- Correct resource id for language sk-SK. +- Insertion handling: keep selection if non empty selection is replaced. +- TAB behavior after multi-selection undo sequence. +- Encoding tag insertion (Ctrl+F8). +- Division by zero exception (indentation and tab width). +- Selection undo/redo in case of "lean" change notify event. + +-------------------------------------------------------- +REMOVED: +-------------------------------------------------------- +- "Ctrl+Shift+Alt+F" (Code Folding) no longer works from Windows 10 19H1 1903. + +-------------------------------------------------------- +TRANSLATIONS (MUI): +-------------------------------------------------------- +- Swedish (sv-SE). + + +======================================================== +Version 5.19.815.2595 (15 August 2019) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +- Add settings for allowed AutoComplete fill-up chars. +- Advanced TOML Lexer. +- Multiselect Edit Indicator. +- Color hover and picker (HTML color def only #RRGGBB, to call color-picker: Alt+MouseClick). + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +- Encoding (Default) Settings dialog: use positive wording for all items. +- Sync Minipath Filter-Lines list with Notepad3 Lexers list. +- Use double-quotes as MRU list string limiter. +- Keep .ini backward compatibility for moved "Text Files" lexer (from "Default Text"). +- Update to Oniguruma (ONI) v.6.9.3. +- Scintilla Library (SCI) version 4.2.0 (2019-Jul-5). +- To force UTF-8 as preffered encoding: activate encoding detection failure fallback for default encoding. +- Allow Fixedsys font for GDI rendering. +- Color MarkOccurrences refactoring: use System's HighLight color as default (alpha:60). +- Replace Onigmo by Oniguruma (ONI). +- CED -> UCHARDET license and acknowledgement. + +-------------------------------------------------------- +ENHANCEMENT: +-------------------------------------------------------- +- Additional information on using copy version info button of About Dialog. +- Complete implementation of UTF-8-Sig MinPath.ini file handler. +- Use UTF-8-Sig for themes files. +- Use UTF-8-Sig for .ini-File Handler (Initial Version). +- Multi-Selection with selection restore on undo. +- Bookmark margin click. +- Some multi-selection enhancements. + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +- Multiple checks for (invalid) operations on rectangular selection. +- Lexers with empty "associated filename ext" will be intialized with default extensions. +- Load set localized menu before displaying dialog. +- Manual entry for "Suppressed Messages" set as '-1' will hide checkbox for "Don't display again". +- Issues regarding "no Notepad3.ini" file (defaults). +- The checkbox "Don't show this DialogBox again" now remembers positive answers only. +- Message "Large File Warning" now default value for large files > 256MB. +- Send NewLine to sci control, if this id no AutoComplete fill-up char. +- Obsolete newline after .ini-file sections with comments. +- Enhanced Unicode detection. +- Oniguruma (ONI) allow CRLF as newline token. +- Notepad3.ini file, remove some keys with default values (styles). +- Extended encoding detection debug information. +- Encoding detection failure fallback: current code-page or default encoding on new (if fallback forced). +- Multi-Selection while Mark-Occurrences of current word is active. + +-------------------------------------------------------- +REMOVED: +-------------------------------------------------------- +- Disable "NewLine" for AutoComplete fill-up. +- Remove (old) AHK Lexer in favour of modern AHK_L Lexer. + +-------------------------------------------------------- +TRANSLATIONS (MUI): +-------------------------------------------------------- +- Polish (pl-PL). + + +======================================================== +Version 5.19.630.2381 (30 June 2019) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +- Add another Dark Theme "Obsidian". +- Add option to disable Hyperlink Tooltip. +- ToolTip for Hyperlinks. +- 2nd Solution to build a shared library (DLL) (C++ runtime & Scintilla) version of Notepad3. +- Menu entry to mute MessageBox beeps. +- Theme Menu to load exported styles "on the fly" (e.g.: "Dark" or "Obsidian") + Factory Default, Standard Settings, a Dark Theme. +- Close Zoom Info Bubble after ~3 sec.. +- Recent History button in Toolbar. +- [Settings2] key-values (internal) to control concurrent encoding detection. +- 2nd Encoding-Detector "Mozilla's UCHARDET" concurrent to + CED (Google's Compact Encoding Detection). +- Language selection in Main Menu . +- Command line option [/Y] to search env PATH for relative filename (NLS: strings). +- Customize Schemes: Caret style 'ovrbar' (default) to switch caret style between BAR and BLOCK . +- Highlight current line Frame-Mode (+ mode toggle Ctrl+Shift*I) (NLS: strings). +- Goto-Dlg (Line/Column) accepts TinyExpr (ignoring suffixes). +- Add CED reliability option (NLS: dialogs). +- Indentation consistency check on file open (NLS: dialogs). +- End-of-Line (EOL) consistency check on file open (NLS: dialogs). +- Checkbox for transparent Find/Replace Dialogbox on losing focus. + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +- Enable Undo on FileRevert / AutoReload. +- Adapt warning dialog according to new FileRevert / AutoReload undo/redo history. +- Add an "Always On Top" toolbar button. +- Rename "Doc Tail Chasing" => "Monitoring Log". +- Optimized FileWatching interval for "Chasing Tail" mode. +- Make "Add to Favorites" dialog resizable. +- Make Custom.Schemes and Find/Replace dialog resizable. +- BOOKMARK (margin flag) style changed to vertical flavor. +- Auto-Save after elevating user right. +- Rework Chinese encoding (GBK,GB2312,GB18030) detection and selection. +- Make international language menu (language independent). +- Start dual encoding detectors in (thread) parallel for large files + (disabled, due to lack of performance profiling). +- Support (internal) DevDebugMode. +- Menu item "HighDPI Toolbar" -> "Toggle Toolbar". +- Train Dutch (CP-1252) for UCD language detection models. +- Train Belarusian (CP-1251) for UCD language detection models. +- Train Africaans (CP-1252) for UCD language detection models. +- Word-wrap-symbol show/hide accelerator-key -> "Ctrl+Shift+7. +- Menu Languange Selector to Dynamic Language Selector. +- Up-to-Date SCI (GitHub Mirror 2019-May-10). +- Update of CED (2019-Feb-01). +- SpeedUp of RegEx Replace (in case of const replace pattern). +- Update of Onigmo RegEx engine (2019-Jan-24). +- Optimized file search for items (filebrowser, .ini file, dirs). +- Goto-Dlg (Line/Column) shows max line number. +- SCI new Nim lexer replaces old Nimrod lexer (new highlighting). + +-------------------------------------------------------- +ENHANCEMENT: +-------------------------------------------------------- +- Allow customizable fileName-RegEx to extensionlist + ( \rc$; = all filenames (incl. ext) which ends on 'rc'). +- Hand cursor coupled with indicator hover style only on modifier keys. +- Allow indicator styling for Hyperlink hover rendering. +- Find/Replace dialog <-> "Focused View" enhancements. +- Rework inconsistent line-breaks in status bar. +- Rework EOL and Indentation check with dialogs. + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +- Changing .ini-file manually. +- Load external Toolbars (clear config on error, path relative to be portable). +- Focused View: refolding by lexer. +- Focused View started from Find/Replace dialog. +- Do not ignore notify change for Paste/Swap/Undo/Redo. +- Colourise bug on find next (w/ mark occurrences). +- Indentation warning dialog. +- Reworked: Consistent EOL and Indentation checks. +- Fix to support external Hot- and Disabled- Toolbar icons . +- Broken open hyperlink in web-browser (Ctrl+Click) and broken toolbar toggle. +- MUI - Replace Horizontal Ellipsis by 3 final point (ANSI Detection Issue). +- Write Language change to Settings2 on change immediately. +- Focused View not working for some Lexers. +- Find correct window for "Single File Instance". +- Single file instance: find correct window for real paths. +- Minor issue on UTF-8 encoding detection. +- High quality icon for Taskbar (big icons). +- Support high-definition icon for taskbar. +- .vcxproj files supporting VS2019 (vc142). + +-------------------------------------------------------- +REMOVED: +-------------------------------------------------------- +- Compact Encoding Detection (CED) as 2nd encoding detector + (rely on UCHARDET only). + +-------------------------------------------------------- +TRANSLATIONS (MUI): +-------------------------------------------------------- +- Hungarian (hu-HU). +- Italian (it-IT). +- Korean (ko-KR). + + +======================================================== +Version 5.19.108.1602 (8 January 2019) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +- Added initial "minipath.ini" to Visual Studio Project. +- Read undefined MiniPath settings from Notepad3.ini + (Preferred language and Favorites directory). +- MiniPath Multilingual support. +- Handle zero-length lines in line-sorting algorithm. +- Support for "Rust" source code syntax highlighting. +- Multilingual support. +- The TinyExpr module. +- Add schema related keywords Auto Completion & IME. +- Rebuilding the "Command Line Help" dialog. + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +- Encoding Detection fine tuning. +- MiniPath About dialog: visual adjustments. +- Optimize icon resource handling. +- Optimized MiniPath resource file (icon/bitmap placement). +- Enhanced MiniPath. +- Small design change of MiniPath's Copy/Move dialog box. +- Print option "Screen Colors" now prints with the same colors + used on screen including line numbers. +- Changed behavior of removing duplicate lines (ignore EOL/EOF chars). +- Line sorting: Move empty lines to end of selection (always, if not removed). +- Adapted PortableApps.com creator script to MUI structure. +- STD/2ND sync with DefaultText/2ndDefaultText handling. +- Reorganization of Menus in more sub-menu to shorter the Menus Lists. +- Show Zoom Percentage on magnification changes. +- Tidy Notepad3.ini to remove all defaulted [Setting] items +- Change Default settings to make the first experience of Notepad3 + more attractive... +- Open Find/Replace: Use most recent search pattern instead of clipboard + (if selection is empty). +- Encoding affinity: UTF-8 instead of local ANSI code-page. +- Replace dialog: tmp disable "mark all occ" in case of multi-line selection. +- Adaptations for MS Visual Studio 2019 Preview. +- Scintilla updated to 412. + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +- Do not reset scroll-width tracking on saving file + (issue #539: https://github.com/rizonesoft/Notepad3/issues/539). +- Fixed portable MiniPath redirector .ini files. +- Support Scintilla's new indicator box styles + ("INDIC_GRADIENT" and "INDIC_CRADIENTCENTRE"). +- Fixed incremental search on find/replace dialog. +- Fixed line sorting. +- Center commandline help dialog. +- In case of STD lexer only display "Default Text" in statusbar + (indicator shows which one). +- Fixed resource file problem (preproc defines). +- Fixed save window Position (Default and Initial switch) +- Fixed problem with bad brace highlighting (indicator) +- if activated, ESC will close/minimize program immediately + w/o canceling selection/tooltip first. +- Fixed broken links in About dialog. +- fixed behavior of replace (dialog) in case of multi-line selection. +- Fixed disable accelerator-key interception for universal Unicode input method. +- Fixed ASCII fallback only for selected encodings. +- Fixed Onigmo RegEx Interface: bug in returning correct matching range. + +-------------------------------------------------------- +TRANSLATIONS (MUI): +-------------------------------------------------------- +- Afrikaans (af-ZA). +- Belarusian (be-BY). +- German (de-DE). +- English (en-GB). +- Spanish (es-ES). +- French (fr-FR). +- Japanese (ja-JP). +- Dutch (nl-NL). +- Russian (ru-RU). +- Chinese Simplified (zh-CN). + + +======================================================== +Version 4.18.511.992 (12 May 2018) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +- Menu entries for (hidden) Accelerator Keys. +- Method to remove duplicate lines. +- Names under Acknowledgments on About box. +- Version info for Microsoft Visual C++ 2017 v15.7.(0-1) (VC v191426428). +- X-CaretPolicy ([Settings2] CurrentLineHorizontalSlop=0). +- 1st draft of "Toggle Visible" (hide non occurences lines). +- Initial version of Doc tail Chasing. +- StatusBar dynamic configuration. +- DPI awarenes on manual font scaling. +- Menu entry for switching HighDPI toolbar. + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +- Incremental match for search/replace dialog box. +- Default ini for Notepad3Portable. +- Scintilla library to v4.04. +- uthash library updated to current GitHub dev. +- Encoding of Notepad3 sources to UTF-8-Sig. +- Focus View icon. +- Prep Scintilla "Position" value type changes for large file support. +- Rebases internally used code page on UTF-8 (Scintilla multi-byte conversions). +- Renamed "Toggle View" to "Focused View". +- Replaced Tellenc by "Compact Encoding Detection" CED. +- Current Scintilla (404 : 05-May-2018) development. +- Focus View and Tail Function icons. +- Disabling UpdateChecker menu entry if no executable is configured. +- Adapted test to new Aboutbox calling. +- Menu Help instead of "?" +- Move File History (Recent File List) to Accel-Key Ctrl+Alt+H. + +-------------------------------------------------------- +ENHANCEMENT: +-------------------------------------------------------- +- Latest compiler tool chain recognition. +- Pad with Spaces in Rectangular Selection. +- Handling of default/standard lexer styles. +- Notepad3.ini redirection to avoid overriding settings by zipped distribution. +- Added last find pattern to file history. +- Added option to remove blank lines (containing blanks/tabs only). +- Added option to skip ANSI Code Page detection (tellenc) + (default is ON to preserve historic behavior). +- Added "Toggle View" button to toolbar. +- Compress White Spaces within rectangular selection. +- Consistent rectangular selection restauration after block operations. +- Enable "Toggle View" for main window. +- Enable "Customize Schemes" Preview button only + if selected lexer corresponds to opened file. +- External cmd tool using Google's "Compact Encoding Detection" + for encoding analysis. +- F/R dialog - enable "Ctrl+BS" to delete word in search string. +- File history dependent last search pattern option combined + with search history on/off option. +- Handling of F3 (find next - no F/R dialog). +- Kind of "incremental search" : Find/Replace "Mark All Occ" active: + typing search pattern scrolls to first match. +- Make Find Next Selected, Find Prev Selected as expected + using modern Scintilla API methods (instead of hand made operation). +- Int to DocPos type changes. +- Indication of find/replace state in FR dialog status bar. +- Non Modal Customize Schemes... dialog. +- Show or hide passphrase in dialog box. +- Selectable (and copy-able) version info header of About-Box. +- Statusbar segmentation resizing. +- Strip First/Last Char within rectangular selection. +- Strip Trailing Spaces within rectangular selection. +- "Toggle All Folds" -> "Toggle Folds" (works on selection only too now). +- "Toggle Folds": Selection range (really) toggles folds. +- "Toggle View" coop main window vs. F/R dialog. +- Delayed "mark occurrences" multi-triggering. +- Performance tuning after profiling std. handling. +- Delayed execution of time consuming update/redraw operation. +- Added user definable relative status width configuration. +- Added settings to user defined prefix strings for StatusBar sections. +- Delayed "Spinning Circle" transaction. +- Added "Extra Line Spacing" style option to ANSI Art (e.g. .nfo files) + (predefined -4). +- Minor speedup on notify changed event. + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +- Memory leakage in selection undo/redo stack. +- Remember initial search start position for incremental search. +- Some .ini-file handling stuff. +- Handling of "Mark Occ." and "Focused View" + in cooperation with find/replace dialog. +- Select initial default standard lexer. +- Missing document modified call. +- Pad with Spaces in Rectangular Selection + (correction for pure virtual space and skip empty lines). +- Renaming of UpdateChecker => Administration Tool. +- Issue regarding selection of default and 2nd default styling. +- Clear all occurrences marker on no matching search expression. +- Restore inital selection on search dialog canceling. +- Broken Hyperlink Hotspot handling. +- Brace matching for Batch Lexer. +- Y-CaretPolicy ([Settings2] CurrentLineVerticalSlop=0) default. +- Show replacement count info-box after UI update + (extended selection, replaced pattern). +- Issue regarding "Auto Complete Word" feature. +- Slow pasting of multiline clipboard. +- Style_SetLexer() should update line number margin width. +- Minor issues regarding selection anchor/current_caret in Find Next/Previous. +- Remember last search pattern on new files. +- Notepad3 window positioning. +- Initial window position handling (command line option "/pos"). +- Search Next (F3) handling (ver II). +- Reset scroll width on font (size) changes (automatically adapted). +- Missing menu shortcut for "Remove Duplicate Lines" ("o"). +- "Remove Duplicate Lines": wrong last line handling in case of no selection. +- Using process heap allocation instead of global memory allocation method + (according to MSDN guidelines). +- "Remove Duplicate Lines": skipping line on progress to next compare + when removing previous duplicate. +- Toggle line comment on empty line. +- Issue in Strip First/Last Char within rectangular selection. +- Update Toolbar,Statusbar and LinNumber Margin + on Observe NotifyEvent reactivation. +- Endless loop on "zero length match" at EOF. +- Reverting file from storage - Preserve view, cancel selection. +- Minor issue on display indication of find/replace state in FR dialog status bar. +- Small issues on Find/Replace Next/Previous operations. +- Pad with spaces in case of rectangular selection. +- HyperlinkHotspot handling while "Toggle Visibility" changes view. +- Issue with "Toggle Visibility" drawing a selection on clicking into view. +- Concurrency issue: main window vs. Find/Replace dialog. +- Folding level issue to hide non-occurrence match lines. +- Possible Deadlock. +- Avoid deadlock of occurence marker task scheduler. +- Enable FR state reset call from outside. +- Enhance indicator (redraw needed) of re-apply "Mark All Occurrences". +- "Compressed View": re-apply lexer styles on changed marked word. +- Proper view reset after reverting from compressed view. +- "Compressed View" - minor issues. +- UTF-16 LE BOM (Unicode) for Notepad3.ini. - Notepad3.ini should have + encoding UTF-16 LE BOM (Unicode) not the smaller UTF-8 Sig encoding format. +- Scroll-to issue in case of incremental search. +- Bug replacing reverse stream selection. +- Remove file-system/URL auto-completion from search box. +- F/R dialog : minor corrections. +- Occurrences marker counting. +- default "Slop" values changed. +- Undo/Redo handling in case of discarding U/R-Stack. +- Check "Toggle View" button in case of activation. +- Restore correct fold margin. +- Optimized "notify change" observation on clearing file buffer. +- Consistent "checked" for button and menu. +- "Focused View": disable encoding identifier insertion menu entry. +- Bug in toggle mechanism of "Toggle All Folds" +- "Toggle Folds": exclude fold point (headers) which have no children. +- "Toggle Folds": selection must span at least two lines. +- Matched Rizonesoft logo background with About dialog background. +- Replace in selection: Selection enlargement. +- Version to folding issue on hiding invisible/non-marked lines. +- Toggle Folds of complete document. +- Small issue reverting from "Focused View". +- Correct WordWrap after reverting from "Focused view". +- Small bug preventing Statusbar relative width settings + smaller than 1/10 of width. +- Missing last entry of statusbar configuration (ID=11). +- Bug while reading String to Vector. +- Switching modes (EOL,OVR, some other), + statusbar has not been updated accordingly. +- Deactivate "Focused View": set FoldingLevel to default + before applying Lexer's Style (-> speed-up). +- RAII (__try/__finally) for target transactions and + notify changed observation guards. +- StatusBar handling and display of "Default text" vs. "2nd Default Text". +- Added parameter to force update of Stausbar (e.g. theme change). +- Fractional font settings: add bias of 2%. +- Minor fixes and default value adjustments. +- Choose correct font size for deactivated "Hyperlink Hotspot" style. +- Force initial default position only if no window position is specified. +- Insert key into rectangular selection. +- Undo/Redo in case of selection insert/delete. +- Cleanup obsolete rectangular pasting helpers. +- Ignore notify change event on pasting rectangular selection. +- Leave Alt-Key-Down mode if keyboard focus lost. +- Broken Undo/Redo stack (in case of selection). +- Issue on recording initial selection Undo/Redo. +- Recording selection Redo/Undo action only for non empty selection. +- Statusbar line counting display. +- Modified document flag set unneccessaryly. +- Bug, where styling stopped after hotspot highligting. + +-------------------------------------------------------- +REMOVED: +-------------------------------------------------------- +- wyUpdate stuff from portable installation. + + +======================================================== +Version 3.18.311.928 (11 March 2018) +======================================================== + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +- Accelerator-Key to toggle tranparency mode (Alt+0 => Alt+G). + + +======================================================== +Version 3.18.311.925 (11 March 2018) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +- New: About Box (RichEdit library 2.0) +- New: Version string patching commands for different local builds. + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +- Accelerator Keys: (Alt+0: Toggle Transparency), + (Alt+Shift+N: Launch new empty window). +- Added "tellenc" acknowledgement to About test. +- Move "About..." dialog call to end of Help menu. +- New compiler version. +- Version info in About text. + +-------------------------------------------------------- +ENHANCEMENT: +-------------------------------------------------------- +- Pressing F3 at Find/Replace dialog performs a find and + switches focus to main window. + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +- Activation of Undo TB-Icon on operations, that can't be undone. +- Onigmo: use CR (\r) as mono line-break symbol too. +- Format number with thousand seperator and digit grouping + acording to regional settings. +- Integration of "tellenc" encoding detection ideas. +- Use Windows regional ANSI Code Page settings for fallback in case of file + encoding detection failure (instead of default encoding for created files). +- Use all ASCII line breaks for line termination ($) meta char. +- Onigmo backward search. +- Consider "load 7-bit ASCII as UTF-8" settings on encoding detection. +- Added BOM detection to encoding analysis. +- Issue regarding hyperlink positioning of AboutBoy in case of + none standard sytem font styling. +- Swap clipboard while pasting into selection. + + +======================================================== +Version 3.18.223.908 (23 February 2018) +======================================================== + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +- Critical error with automatic updates. +- Swap clipboard bug while pasting into selection. + + +======================================================== +Version 3.18.222.905 (22 February 2018) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +- Accelerator Key (Alt+A) to switch ON/OFF occurrences marker/counter. +- Feature "Scroll Past End of File" (settings). +- Menu entry to check Rizonesoft.com directly for updates. +- PortableApps AppCompactor call for UPX compression of NP3 binaries. +- R-Statistics Code lexer. +- Status/info bar in find/replace dialog. +- Seperator on help menu update entries. +- Styling for folding marks (charset:1 -> circles / case:U -> double lines). +- wyUpdate's client configuration to PortableApps version. + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +- Executables now compressed with NRV2E method. +- Scintilla version 4.0.3 and documentation update. +- Adapted VS compiler version string for About dialog. +- Change start of project on GitHub (date) to 2015 (Version.h). +- Compiler optimization flags for release build. +- Encoding type of Version.h from UTF-8 (Signature) to UTF-16 LE, + to get Copyright sign right +- Folding STyle: case:L/U for box vs. circle style; + charset:0/1/2 single line after/before/enclosing. +- Registry files lexer to support eolfilled on "Added Keys". + +-------------------------------------------------------- +ENHANCEMENT: +-------------------------------------------------------- +- Added "Shift+F1" Accelerator Key to open "About..." box. +- Allow negative values for Extra Line Spacing (compact line view). +- Automatic Updates and incorporated launch of update installer "wyUpdate.exe". +- Changed tab-stop order while navigating several dialogs. +- Dynamic horizontal scroll bar width adaption. +- More prominent replace dialog button "In Selection". +- "Registry Files" lexer: enable attribute "eolfilled" for all styles of this lexer. +- Replace (virtual) rectangular (empty) selection. +- Wrap to Column allowed w/o selection (use complete text) +- Undo/redo stack does not need to store virtual space options. +- Check for Alt-Key down/up to allow drawing rectangular selection in virtual space. +- Use faster method (SCI direct call) to set/reset virtual space access option. + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +- Minor issues in context of undo/redo (virtual) rectangular (empty) selection. +- Static URL string to open version check website. +- Tidy up menu navigation via keyboard. +- Paste multi-line clipboard into rectangular selection. +- Copy/paste and redo/undo on empty/virtual rectangular selection. +- Prepare (i) for Scintilla's Position type change to 64-bit. +- Corrupted "Page Setup..." dialog layout (after changing tab-stop order). +- Pasting into rectangular selections. +- Tab-key and indentation handling. +- Indentation and rectangular selection (final solution still open). +- "Single line selection" criteria. +- Synchronized updates for Toolbar & Statusbar. +- Empty settings string, if ToolbarButtons are reset to defaults. +- Changed navigation keys for "Edit" menu. +- Set virtual space option "SCVS_NOWRAPLINESTART" for + Alt-Key down rectangular selection only. +- Bug in calculating position for thousand separator. +- Handle case: virtual space user access not allowed. +- Selected default lexer has not been used as default startup lexer. +- Code folding integrated in margin. +- unique Style IDs. +- Disable folding operations for lexers, which don't support it. +- Default Folding Style: single line after heading. +- Bug in changed "Windows Registry Files" lexer. +- Undo/Redo action w/o selection sets/preserves selection mode (bug). +- Support styler attribute "eolfilled" in any Reg-Key case (Windows Registry Lexer). +- Small datatype correction. +- Map Toolbar Labels according to bitmap/settings file. +- Registry Files lexer: bug in GUID in Key Path with eolfilled attribute. +- Broken swap clipboard w/ selection. +- Restore selection set/replaced by replace dialog. +- Fill find/replace search box with selection/clipboard on non switching Ctrl+F/H. +- Bug detecting find/replace dialog is foreground or not. +- Initial .ini file: corrections for labeling toolbar icons. +- Performance issue: Replace All - delay status update until transaction finished. + + +======================================================== +Version 3.18.131.862 (31 January 2018) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +- Accelerator Key "Ctrl+Alt+J" -> Fuse Lines + (:= Join Lines, line-breaks NOT replaced by Space). +- Setting2 parameter to adjust "Mark Occ" and "Hyperlink" styling delay. + +-------------------------------------------------------- +ENHANCEMENT: +-------------------------------------------------------- +- Highlight current line stuff gathered. +- Customize Schemes... Style Names. +- Added Accelerator Keys: Alt+LEFT/RIGHT to FOLD/EXPAND folding section. +- add empty sections to initial settings file (.ini) to force a canonical order. +- Canonical initial Notepad3.ini. +- Make selection block indentation similar to VisualStudio's. + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +- Performance for several modify text operations. +- Correct in-memory encoding/re-coding of text. +- Join Lines (preserve paragraphs) issue. +- Byte counting for selection. +- Bug in joining lines algorithm. +- Alt+H should open history file access dialog not help menu + (add ? to revert to known access key). +- Revisit usage of "Mark Occurrences" and "Hyperlink Styling" delay usage. +- Rectangular selection: (virtual empty) selection persists after clear. +- Sentencecase some strings in "Customize Schemes...". +- SpeedUp undo/redo action collections. +- Lock NotifyUpdate and TargetSelection in case of multi action + redo/undo and target replacements. +- Handling of document modified flag in case of NotifyChange bypass. +- Redo/undo and jump-to behavior having an active selection. +- Wrong test on rectangular selection. +- More select and replace target issues. +- Toggle All folds behavior. +- TAB indentation handling according to predecessors (NP2). +- selection (anchor and current caret position) handling. +- Enh: Version check for Visual Studio 2017 v.15.5.5. +- "Line Comment" id noselection and current pos == indent pos. +- Initial .ini-file: unused section removed. +- Support scintilla msg: SCN_NEEDSHOWN (EXPAND folded sections if needed). +- Avoid some issues regarding folding, using SCI_SETAUTOMATICFOLD. +- Revert TAB + Selection action corresponding to VisualStudio's behavior. +- Sensible handling of "Block -> (Un)Indent" for different kinds of selections. +- Font selection dialog does not reset some styles correctly. +- Preserve selection on Line Comment toggle. +- Char2Hex: Remove limit single byte selection. + + +======================================================== +Version 3.18.113.828 (13 January 2018) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +- "Customize Schemes..." UI change to represent "relative sizing hierarchy". +- Initial version of Nim Lexer. Added Scintilla project and header for Nim lexer. + +-------------------------------------------------------- +CHANGES: +-------------------------------------------------------- +- Compiler version 191225834 (VS2017 v15.5.3). +- Executables not compressed with UPX. +- Menu "Mark Occurrences" whole word matching: radio button behavior. +- Onigmo RegEx syntax dialect. +- Onigmo regex engine: use PERL 5.10 syntax + + enable "\<" and "\>" word boundary matching. +- Option "after visible" for styling in background (idle time). +- Replace Windows Notepad Installer version only. +- View "2nd Default Style" as (dbl-clickable) status bar item. +- Word Wrap mode from WORD to SPACE to avoid wrapping at style change edges. +- Force position progress in case of zero-length matches. +- Re-introduce "max mark occurrence counter" to avoid lazy UI. + (Set .ini section [Settings2] MarkOccurrencesMaxCount=-1 for unlimited (MAX_INT)). + +-------------------------------------------------------- +ENHANCEMENT: +-------------------------------------------------------- +- NimLexer = NimrodLexer -> rely on Scintilla distribution for Nim(rod) lexer. +- Reasonable assumption for memory allocation of style handling (backup, save, load). +- statusbar: information about usage of 2nd Default Style. +- Statusbar: Count number of bytes in current encoding. +- structured "Mark Occurrences" menu hierarchy. +- Statusbar Partitioning. +- Cache page instead of line only. +- Mark Occurrence triggers enhancements. +- Non visible styling during idle time. +- Tuning delay parameter of "Mark Occurrences" (instantly). +- Remove test for set already, if indicator does not change. +- Redraw indicator ranges (Mark Occurrences) only if needed - + avoiding recursive SCN_UPDATEUI notifications. + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +- Several Mark Occurrences (instantly) issues. +- Regarding Scheme customizing (rel. size) and View Menu (Mark Occ.). +- Onigmo regex engine PERL syntax: supporting named groups referencing + in replacement text. +- Correct counting of found matches. +- Broken find/replace (regex) on groups. +- Some customizing scheme issues (relative font size hierarchy). +- Document modified flag not set properly (title, toolbar & statusbar only). +- Renaming menu entries Edit: "Clear" -> "Delete" +- Menu "Mark Occurrences" whole word matching: add check indicator if + one of word matching options (selected/current) is used. +- Regex replacement on look-ahead assertion. +- relative font sizing of non-default-style entries in custom schemes. +- Font selection box title display. +- clean coding for "relative sizing hierarchy". +- Update view on style change in "Customize schemes..." +- Bug regarding "Reset" button in "Customizing Schemes..." dialog. +- Bug in detect and style Hyperlink Hotspot. +- Losing state of "Transform Backslashes" while switching regex/wildcard search. +- Block "mark occurrences" event on transaction pair: + (SCI_TARGETFROMSELECTIO, SCI_REPLACETARGET). +- protect SCI target transactions by a guard to break recursion of + Mark Occurrences caused by ChangeNotification() events. +- Handle "2nd Default Styles" as separate standard (2nd) lexer module. +- Handling initial 1st or 2nd default style in case of "Default Text", + shown on int "Customize Schemes...". +- Crash on navigation between schemes beyond start/end of tree view. +- Disable (using 1st Default Style) + "Associated filename extensions" for "2nd Default Style". +- Clone associated filename extension list of Default Style (for 2nd Default Style). +- move word wrap start symbol to margin (new WW mode SPACE (instead of WORD))". +- Mark Occurrences timeout on Find/Replace. +- Optimized status bar partitioning. +- Revert naming for "2nd Default Text". +- Bug on switching between 1st and 2nd standard lexers. +- Selection of 1st or 2nd standard lexer (Default Text) based on Use2ndStandard flag. + + +======================================================== +Version 3.18.105.802 (5 January 2018) +======================================================== + +-------------------------------------------------------- +NEW: +-------------------------------------------------------- +- New: Hyperlink Hotspot Style updates on UpdateUI event (visible area only) +- New: Switch to draw all occurrences in visible area only. +- New: (Mark Occurences) instant word highligting. + +-------------------------------------------------------- +ENHANCEMENT: +-------------------------------------------------------- +- Async mark all occurrences via timer (UI response). +- Delayed mark all occurrences for better UI response. +- Fixed some issuses, which eat up CPU. +- Optimizing timer handling to avoid multiple calls of complex methods. + +-------------------------------------------------------- +FIXES: +-------------------------------------------------------- +- Custom toolbar images ini settings added. +- Add hints for free text style properties in "Customize Schemes...". +- Test version numbers for month Jan - Sep (mono digit). +- Redundant echo of expected version string. +- Toggle line comments were placed at line end. +- "Match Current Word" should not highlight partial word matches in other lines. +- Fetching wrong visible document line number in case of hidden or wrapped lines. +- Ignoring queued timer event, if timer has been killed. +- use current lexer's default text font size as base font size for + relative sizing of other styles. +- mark occurrences counter not updated in time. + + +======================================================== +Version 3.17.1228.783 (28 December 2017) +======================================================== +- New: Added batch script to bulk encrypt files of given directory with encryption tool. +- New: inticator style used for matching braces too. +- New: Java sourcecode to compile a class which acts as a standalone tool for decrypting Notepad3's encrypted files. +- New: Regex - "Dot matches all" vs. "Dot does not match line-breaks" switchable by option in find/replace dialog. +- Fix: Update coloring on window message WM_SYSCOLORCHANGE, including Hyperlink hotspot colors. +- Fix: Crash on empty password for encryption tool. +- Fix: Existing bash test script for encryption tool. +- Fix: Onigmo regex: . matches any charakter and does not stop at line breaks. +- Fix: Onigmo regex: remove extend mode, where # is used as line rest comment. +- Fix: Change hard coded default values for matching brace styling according to new style (indicator). +- Fix: font styling of Hyperlinks are not reset to default if feature is switched off. + + +======================================================== +Version 3.17.1223.778 (23 December 2017) +======================================================== +- New: More triggers for Hyperlink style updated. +- New: Online Documentation menu item. +- New: Added Scintilla's indicator styles to scheme config for "Mark Occurences". +- New: Dual configuration of Default Text Font or Current Scheme's Default Text Font. +- New: Replaced DeelX with Onigmo regular expression engine. +- Changed: uthash to version 2.0.2. +- Changed: Enhanced style copy method. +- Fix: Minor fixes for Onigmo interface class. +- Fix: Hyperlink feature related delay of font changing. +- Fix: Last hyperlink was restyled to lexer's style (not desired hotspot style). +- Fix: Default lexer style changed a litle bit after first UI update. +- Fix: Redraw bug in case of SCI_COLOURISE. +- Fix: Removed some Hyperlink dection triggerpoints, which might be collide with SEARCHINTARGET and REPLACETARGET race conditions (seperate threads). +- Fix: Removed unneccessary Hyperlink trigger-point from InitInstance(). +- Fix: Performance issue while pasting long text from clipboard. +- Fix: Local memory freeing. +- Fix: Complete set of font weights for syntax scheme. +- Fix: Prepare fixing race-condition search/replace target vs. selection. +- Fix: Set target range only for search/replace and not for paste after modifying selection (race-condition search/replace target vs. selection). +- Fix: Transform backslashes for regex find/replace. +- Fix: Out of range fallback for indicator string retrieval. +- Fix: Issue regarding TransformBackslash handler (regex vs. std & find vs. replace). +- Fix: Replace dialog: Resize regex text box to not overlay other control. +- Fix: Enable more hyperlink styling trigger points, since "replace target" race-conditions have been fixed and fast regex engine (Onigmo) is integrated. +- Fix: Issue regarding applying lexer style while hyperlink feature is active. +- Fix: Reverting to buffered draw, until screen flickering issues are clarified. +- Fix: Onigmo regex engine handling string/line end meta char '$' independent of EOL mode. +- Fix: Replace-all with look-behind assertion. +- Fix: Onigmo word boundaries issues (incl. "double" escaped esc) (not solved yet: multi escaped esc). +- Fix: Customize schemes issues (now Default Font: is applied to "Default Text" and "Current Lexers" Default Font). +- Fix: Allow (horiz.)TAB chars in selection copied to find/replace dialog search box on pop up time (Ctrl+F). +- Fix: Setting "Default Font..." will clear current lexer's default font - inherits global default font then. +- Fix: "Default Font..." configuration issue. +- Fix: "Default Font..." add check for current scheme is not default text already. +- Fix: Schemes in alphabetical order (displayed names). +- Fix: Bug on font selection - global vs. current scheme. +- Fix: More bugs regarding standard lexer handling. +- Fix: Using WYSIWYG fonts (screen vs. printer). +- Fix: Inconsistencies: cut,copy,replace,... mainmenu and context menu vs. toolbar. +- Fix: New Font selection New: 2nd Default Font not supported completely. +- Fix: setting/changing encryption pass-phrase did not trigger "file modified" flag. +- Fix: Problem with 1st vs. 2nd Default Text Scheme selection. +- Fix: Inconsistency 1st vs. 2nd Default Text Font selection. +- Fix: Use Standard Lexer on new (empty) files. +- Fix: General bug fixes and code cleanup. + + +======================================================== +Version 3.17.1210.729 (10 December 2017) +======================================================== +- New: Added Awk Script syntax highlighting (Python lexer based) +- New: Enhanced URL Hotspot highlighting. +- New: open Hyperlink in NP3 (if applicable: "file://..."). +- New: Update notification in Notepad3 setup. +- New: URL Hotspot (first version). +- Changed: [Settings2] section default values (and comment out if not changed) of initially distributed Notepad3.ini +- Enhancement: Code Cleanup +- Fix: Edit/Special : URL encoding/decoding for full UTF-8 (non ASCII) characters. +- Fix: flashing of Search text-box of find/replace dialog in case of Win7 Classic theme +- Fix: Gibberish output if URL decoded again (2nd time). +- Fix: URL decoding, if encoding has "%#nnn" formatted ASCII chars. +- Fix: HTML character encoding starts with ampersand, not percent char. +- Fix: URL encoding: Added flag URL_ESCAPE_PERCENT for UrlEscape(). +- Fix: Added version info for VS2017 v.15.5 +- Fix: Consistent texts for "Hyperlink Hotspots". +- Fix: Hyperlink Hotspots turned off by default. (not stable enough to force the feature). +- Fix: Normal setup can now clean replace Windows Notepad registry keys. +- Fix: Added some more places, where Hotspot style redrawing does not slow down responsiveness. + + +======================================================== +Version 3.17.1202.715 (2 December 2017) +======================================================== +- New: Additionally show full path to current directory in windows title. +- Changed: Move "Mark Occurrences" check box from menu to find/replace dialog options. +- Changed: Renaming of drag n' drop methods. +- Fix: Removed unused mouse wheel message interception. +- Fix: Disabling buffered draw. (Scintilla: "Current platforms perform window buffering so it is almost always better for this option to be turned off.") +- Fix: Font Smoothing: [Settings2] SciFontQuality=n has no effect on some special fonts (preserving old behavior if not defined). +- Fix: Adapt text for messagebox: no valid drop-file. +- Fix: issue regarding Accelerator keys for find/replace dialog. +- Fix: Minipath full path display in titlebar (no dbl-slash in case of drive letter only). +- Fix: Mark occurrences: Outline frame of indicator box shouls have same aplpha channel color (configurable alpha2:nnn). +- Fix: Find/replace dialog: mark occurrences: use standard save/restore settings behavior. +- Fix: #192 Drag n' drop from 32-bit process on Notepad3 x64 window + + +======================================================== +Version 3.17.1124.690 (24 November 2017) +======================================================== +- Added Book Mark style (Color Background and Alpha) to customize schemes... +- New "D" and "Go" programming language support. +- Update: Compiler version detection. +- Update: Scintilla Lib v.4.0.2 (402). +- Adapt: C/C++ styles - keyword vs. typedefs. +- Changed SDK version target to 10.0.16299.0 +- Major refactoring of find/replace regex evaluation. +- Optimized DeelX regex interface. +- Minor fix for DeelX RegEx engine. +- Move position after replacement (EditReplace()). +- Refactoring of "Replace All" methods. +- Split C++ Keywords in two parts (1st: standard keywords, 2nd: keywords starting with double underscore "__xxx"). +- Minor polish of Readme.md. +- Put changes compared to Notepad2-mod into Readme.md. +- Repair empty resource file (Notepad3.rc). +- Bookmark Enhancements +- Replaced old bookmark pixmap (visible margin) by Scintilla's BOOKMARK marker style. +- Swap text fields in Find/Replace dialog. +- Enhance: comments with useful web links. +- Enhance: Increase buffers for edit box in "Customize Schemes..." dialog. +- New: Auto remember bookmarks in recent file history. +- New: find/replace mark occurrences. +- New: Indicator in find text box, if search string is matched in document. +- New: Mark occurrences coloring is now configurable via "Customize Schemes...". +- New: "Swap Strings" button in Find/Replace dialog. +- New: validate regexpr. +- Fix: Revert to Scintilla's default mouse down and mouse wheel capture mode. +- Fix: "Mark All Occurrences" setting of find/replace dialog should only be persisted, if "Save Settings on Exit" is enabled. +- Fix: UpdateLineNumberWidth() triggers cleanup. +- Fix: Issue with update of line number margin width. +- Fix: Transform backslash issues. +- Fix: C/C++ keywords and types. +- Timer call for mark occurrences during find/replace. +- Fix: lookaround regex (DeelX) matches were not replaced. +- Fix: Issue regarding find/replace empty-string. +- Fix: Adapt DeelX RE interface according to enhanced find/replace dialog. +- Fix: Issue #173 - regex/wildcard search: replacement string not used if "Check All Occurrences" is active. +- Fix: Recoding minipath's version.h to UTF-8-Sig, because it contains codepage dependant copyright sign. +- Fix: Corrections to .vcproj settings inconsistencies (reported in release build process). +- Fix: undo/redo issues (if no selection choosen). +- Fix: Consecutive DEL/BACKSP undo/redo broken (wrapped by unconditional selection undo/redo). +- Fix: Issues found by static code analysis. +- Fix: Bug in getting string length from dialog box readout. +- Fix: Break criteria for "replace all in range". +- Fix: Issues found regarding zero-length matches using regex anchors, including infinite loops on replace all. +- Fix: RegEx start anchor adjustment. +- Fix: Problem with regex line start and replacements at line end. +- Fix: Issues regarding selection undo/redo. +- Fix: Issues regarding margins configuration. +- Fix: Issue #139 and #143 (remove selection undo/redo for non-text-changing operations on selections). +- Fix: issue #144 (Left arrow no longer moves to previous line). +- Fix: issue #145 (Mark Occurrences Counter is broken). +- Fix: Pasting clipboard content into selection box should replace text and cancel selection then. +- Minor bug fixes and more... + + +======================================================== +Version 2.17.1023.632 (23 October 2017) +======================================================== +- Add code snippet (activation only prepare for future extensions). +- Added switch ([Settings2] UseOldStyleBraceMatching) to preserve old style + brace matching behavior. +- Applied patch from Neil Hodgson (Master of Scintilla Lib - respond to + scintilla lib issue report #1976). +- Changed buffers for operating edit box in customize schemes. +- Documentation: Minor changes to Notepad3.txt. +- Documentation: doc/Notepad3.txt - add description of [Section2] .ini settings + (mostly taken from orig. Notepad2 FAQs). +- Default to modern displays settings, using Scintilla's new technology + : SciDirectWriteTech=1, SciFontQuality=3 +- First prottotype of VirtualSpace RectangularSelection by default (very old + behavior can be turned on by [Settings2] DenyVirtualSpaceAccess=1). +- Implemented Feature Request #51 (buffer size of file extension edit box). +- New: Show warning before loading file with unknown (custom schemes) file name extension. +- License.txt: switch to UTF-8 encoding. +- Restore wrongly discarded np3portableapps .ini files for NP3Portable, + redirecting .ini reading to correct path. +- Small code refactoring (replacing deprecated methods). +- Settings [Section2] (cannot be set via GUI) add all possible names and + default values, if applicable. +- Fixed .ini paths for np3portableapps. +- Fix: Crash in Favorites management. +- Fix: pasting clipboard content into selection box should replace text and + cancel selection then (in case of swapping clipboard, the selection is preserved). +- Remove settings for "Favorites" directory -> NP3 uses then users system + default folder (%USERPROFILE%\Favorites). + + +======================================================== +Version 2.17.1016.610 (16 October 2017) +======================================================== +- Added remove button for list items. +- Checkbox for "preserve caret position" settings. +- File History Dlg: rename button "Remove" -> "Discard" + (discard selected item from file history list). +- Minor bugfixes for session feature + (file history: remember caret pos and encoding). +- Removed unnecessary build artifacts from np3portable. + + +======================================================== +Version 2 Build 605 (15 October 2017) +======================================================== +- Fix: Crash on accessing UndoRedo structure while NP3 instance has + not been initialized completely (.LOG file opening bug). + + +======================================================== +Version 2 Build 600 (15 October 2017) +======================================================== +- Fix: Virtual space access: column indicator. +- Fix: Customize Schemes... Font... selection: bold/italic now detected + (bold: if selection >= FW_SEMIBOLD) + + +======================================================== +Version 2 Build 583 (11 October 2017) +======================================================== +- Cleanup AHK testing script, add test artifacts. +- Generalized internal multi-byte codepage definitions (code cleanup). +- Fix: syntax error on exit script. +- Fix: Try to retrieve correct file version for Notepad3Portable creator. +- Fix: StatusBar Col display is not correct in case of Virtual Space Access. +- Fix: locale / language independant version patching batch for Notepad3Portable +- Fix: version patching for Notepad3 PortableApps build batch. +- Fix: Recode to ANSI (in case of Chinese ANSI code-page) + + +======================================================== +Version 2 Build 568 (8 October 2017) +======================================================== +- Updated the Run Dialog icon. +- Code comment for completeness. +- Enhanced clipboard recoding detection. +- Prettier Browse Icon. +- StatusBar information enhancements. +- Fix: Reverting "reload as UTF-8 not work bugfix". +- Fix: Texture glitch on "Browse" button. +- Fix: Binary directory to build portable app. +- Fix: In-text encoding (convert encoding). +- Fix: minor StatusBar string corrections. +- Fix: Support pasting position at virtual space. +- Fix: Move caret to convenient position after pasting clipboard (no current selection). +- Fix: Virtual space navigation and rectangular selection (allow "Virtual Space Rectangular Selection" + also allows moving Caret into virtual space (beyond line end)) +- Fix: Copy/Cut & Paste of current line (in case of no selection +- Visual Studio behavior - using SCI's MSDEVLineSelect). +- Fix: Bug in code-page related text conversion. + + +======================================================== +Version 2 Build 548 (3 October 2017) +======================================================== +- Code cleanup +- Fix: Made corrections to build 505 change log (spelling, grammar, etc). +- Fix: FILE status becomes [MODIFIED] when doing CONTROL+A to select ALL. +- Fix: Paste from clipboard to ANSI code page: + unnecessary switching encoding to UTF-8. +- Fix: Undo/Redo of virtual space selection rectangle not correct. +- Fix: StatusBar SelectionCount (Sel) : count chars instead of bytes. +- Fix: Punctuation chars for "Accelerated Word Navigation" (Settings2: + ExtendedWhiteSpaceChars= add non word chars here). +- Fix: Do mouse wheel scrolling in editor area only. +- Fix: DPI awareness in manifest. +- Fix: word delimiter in case of "Accelerated Word Navigation". +- Correct UFT Spelling on Encoding menu. + + +======================================================== +Version 2 Build 505 (23 September 2017) +======================================================== +- 1st chunk of StrSafe migration. +- Some more StrSafe changes +- Fix: manually edited settings (SciDirectWriteTech, SciFontQuality) + should be placed in settings section [Settings2]. +- Extended default "space char set" for "Accelerated Word Navigation" to avoid + unexpected "accelerated word navigation" behavior, space-char extension is + restricted to 7-bit ASCII char set (ignoring specified non-7-bit-ASCII chars). +- StrSafe adaptions +- Fixed: settings SciFontQuality have been overwritten by Scheme configuration. + (Fonts: Calibri, Cambria, Candara, Consolas, Constantia, Corbel, Segoe UI are using + 'cleartype smoothing' (SC_EFF_QUALITY_LCD_OPTIMIZED) by default, if not + configured in Schema definition for Lexer) +- Added font "Source Code Pro" to list of special fonts for cleartype smoothing. +- Fix: undo destructive operation on selection (rectangle) does not restore + selection or preserves selection mode (extends selection on caret movement) + -> need to send SCI_CANCEL at the end of restored selection. +- Found bug caused by StrSafe migration + (COUNTOF() for buffer size must not be used on buffer pointer) +- migrate StrCpyN() and StrCatBuff() to corresponding StrSafe.h methods +- Adapted lstrcpyn() calls according to StrSafe.h requirements. +- Refactoring of "Accelerated Word Navigation" to be compliant with Scintillas + WhiteSpace and Punctuation defines. +- "Accelerated Word Navigation" activation influences "Mark Occurrences" (whole word) if set +- Extended: Remember selection undo / redo +- Added undo / redo selection to more operations +- Found Scintilla 400 method "SCI_CUT" (cut selection) broken: lost last char + replaced by SCI_COPY & SCI_CLEAR combination (for now). +- changes to EditGetClipboardText() solved the SCI_CUT problem, so it can be switched back + from SCI_COPY & SCI_CLEAR to SCI_CUT (byte alignment in 64-bit, i am nut sure) +- switching Scintilla internal codepage to UTF-8 only (resp. Japanese, + Chinese and Korean DBCS) single-byte encoding is supported externally and + converted (fore and back) to UTF-8 internally, this simplifies i.e. clipboard exchange, etc. +- Removed support for obsolete Korean Johab (1361) codepage. +- Fixed ConvertText() according to internal SCI codepage +- Refactoring: Encoding handling +- More operations for selections undo/redo. +- Enabled "unlimited" (as in Scintilla Lib: dep. on memory and INT_MAX) + undo / redo selection history using utarray from uthash header library + (https://troydhanson.github.io/uthash/index.html) +- Moved crypto readme to doc dir +- remove internal codepage support for Chinese, Japan, Korean DBCS use + generalized UTF-8 codepage instead + (conversions do not work as expected within scintilla lib) +- Dropping Windows XP support , using compiler toolset vc141 Win SDK 10.0. + (current VC++ redistributable needed?) +- Replaced lstrcmp() and lstrcmpi() by StrSafe (helper.h defined) methods. +- Relaunch elevated keeping current changes in a buffer. +- Fixed some problems for feature "relaunch elevated preserve changes". +- First AppVeyor config +- Remember window position in case of "relaunch elevated". +- Fixed memory initialization problem during InitInstance() +- Enhanced consistency between toolbar (save button) and titlebar (modified marker) +- "Relaunch elevated": use current .ini-file instead of new user's (Admin's) .ini +- Cleanup tmp filebuffer, if elevation has been rejected. +- Fixed crash in case of wrong Encoding (detection) +- Changed version display on Help/About. +- New Powershell script to patch version numbers +- appveyor.yml using same powershell commands to patch version +- Remove FindReplaceDlg handle declared as external from compilation unit Edit.c not really needed here. + (externals (handles / pointers) seemed to be a problem on module init instance time in 64-bit) +- Fixed: Open find dialog the first time (new NP3 instance) while + clipboard is empty, NP3 crashes (try to LocalFree() static allocated memory) +- Fixed: RegExpr "Find previous" corrected (find mode "left to right" has been + used, which has not the intended behavior). +- Updated Compiler Info. +- Added build.txt (and .ps1 changes) for Local Build Version patching + (common AppVeyor/Local script). +- Fixed issue "Convert to Title Case" while selected text is all upper case. +- Fixed broken "Complete Word" feature (Ctrl+Enter/Return). +- Changed accelerator key for feature "Complete Word" from Ctrl+Enter to Ctrl+Alt+Enter. +- Added feature "Insert New (empty) Line above current line Ctrl+Enter (as in VisualStudio). +- Code cleanup +- Added new Settings "Virtual Space on Rectangular Selection" used to select. + rectangle not delimited by line endings (but including virtual space). +- Readme.txt Updated. (Thanks Will) + + +======================================================== +Version 2 Build 450 (18 August 2017) +======================================================== +- Update to Scintilla 400 (early bird) pre-release. +- Renamed encoding menu item: "Recode No FileVars" (Alt+F8) =>> "Ignore Encoding Tags" (Alt-F8) +- UTF-8 encoding of License.txt (fixing: different ANSI codepage for copyright sign) +- Fixed "file modified" flag not set on Ctrl+X actions +- Fixed re-enable accidentally disabled toolbar buttons (find, replace, clear, toggle-folds, file-launch) +- Fixed remove obsolete settings entry, never read (SciDrawTechnology) +- Fixed crash: not a good idea to make char array (char*) external to other compilation unit. +- Fixed wrong shortcut in menu on word navigation (Ctrl+LEFT/RIGHT) + + +======================================================== +Version 2 Build 440 (16 August 2017) +======================================================== +- Added Enabling/Disabling Save-Button in toolbar according to file modified indicator. +- Added Del/Back Selection preserving on Undo/Redo +- Cut Selection (Ctrl-X) will preserve Selection on Undo/Redo +- Zero initializing string buffers (hardening code while searching an issue regarding "Recent Files" list in "relative paths" mode +- Menu integration of "hidden" commands +- Fixed unicode conversion error fixed in .rc +- Fixed Toolbar Button "Save" has to be enabled on encoding changes +- Fixed bug on path compare for editing own settings file (.ini) to disable "save settings" menu entries (should be case insensitive) +- Fixed: restore "rectangular" selection too on "Selection Cut" Undo/Redo +- Fixing and cleanup build for Notepad3Portable + + +======================================================== +Version 2 Build 432 (10 August 2017) +======================================================== +- Added command line option ( /v ) to print file immediately and quit (like Window's original notepad.exe /p option). +- Added printing additional option /v dialog to allow access to the Printer dialog (as on Menu: Print... ). +- Enlarge some string buffers for dialogs. +- Initial version of PortableApps.com Launche and Installer build. +- Build environment, to create Notepad3Portable (according to Portableapps.com) (x86/x64). +- Fixed issue #35 (preserve FileExtension settings while switching Styles / 2nd Default Scheme). +- Fixed np3encrypt vcxproj files. + + +======================================================== +Version 2 Build 422 (10 August 2017) +======================================================== +- Cleanup manifest handling +- Minipath DPI aware false + + +======================================================== +Version 2 Build 411 (9 August 2017) +======================================================== +- Added VisualStudio's Editor Behaviour for Ctrl-C and Ctrl-X +- Added VS2017 .vcproj files and adapted Compiler Tool Set accordingly +- Reintroduce HighDPI toolbar +- Integrate Scintillas DirectWrite technology +- Minor cleanups reported by CppCheck v.1.79 +- Fixed nullptr access while pressing "favorites" toolbar button on 'virgin' Notepad3 ToolBar +- Fixed broken Ctrl-Q (toggle line comments) + + +======================================================== +Version 2 Build 398 (13 June 2017) +======================================================== +- Added Microsoft Visual C++ 2017 (vc141) support. +- Updated Scintilla to version 3.7.5 +- Don't use 2nd default syntax scheme by default. (Issue #21) +- Bigger Toolbar Buttons (24px). Should be big enough now. (Issue #21) + + +======================================================== +Version 1 Build 388 (06 January 2017) +======================================================== +- Updated Scintilla to version 3.7.2 +- MiniPath now works on Windows XP + + +======================================================== +Version 1 Build 386 (08 December 2016) +======================================================== +- Added RaPeHoff to the contributors list. +- Update to Scintilla 371 (NP2 adaption due to deprecated data types). +- Clean-code Solution (instead of "magic numbers"). +- Crypto Module: code cleanup +- Crypto Module: Replaced LocalAlloc/GlobalAlloc by HeapAlloc methods. +- Integration of DeelX RegExpr engine (http://www.regexlab.com/en/deelx) +- Fixed block selecting cause crash. + + +======================================================== +Version 1 Build 350 (05 September 2016) +======================================================== +- Added Microsoft Visual C++ Update 3 version number +- Updated HTML Keywords +- Updated Scintilla to version 3.6.7 + + +======================================================== +Version 1 Build 330 (24 June 2016) +======================================================== +- Added Visual Studio 2015 Update 2 version number +- Added Support for Inno Setup 5.5.9 +- Implemented a new versioning scheme +- Updated Apache Keywords for version 2.4 +- Updated to Scintilla 3.6.6 +- Updated Rizonesoft Versions Program +- Fixed Compiler warnings +- Fixed Favorites Function +- Removed Visual Studio 2010 to 2013 Support + + + diff --git a/np3portableapp/Notepad3Portable/App/Notepad3/Docs/KeyboardShortcuts.txt b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/KeyboardShortcuts.txt new file mode 100644 index 0000000000..8f650554ef --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/KeyboardShortcuts.txt @@ -0,0 +1,483 @@ +================================================================================ += = += Notepad3 - light-weight Scintilla-based text editor for Windows = += = += (c) Rizonesoft 2008-2023 = += https://www.rizonesoft.com = += = +================================================================================ + + +*** Keyboard Shortcuts for Notepad3 *** date: 2021-08-30 +--------------------------------------------------------------------- + + + FILE + ------------------------ + Ctrl+N New file. + Ctrl+F4 Close file (identical with Ctrl+N). + Ctrl+O Open file... + F5 Reload file. + Ctrl+S Save file. + F6 Save file as... + Ctrl+F6 Save file Copy... + Ctrl+Alt+F6 Save with Original file "Date/Time". + Ctrl+P Print file... + Ctrl+M Run MiniPath file Browser plugin... + Ctrl+Alt+H Open Recent file (History)... + Alt+F4 Exit Notepad3. + Esc Cancel current state (AutoCompletion or Selection) + Minimize or Exit Notepad3 (optionally, if no state). + Shift+Esc Save file and Exit Notepad3. + + Path to Clipboard + ----------------- + Ctrl+F9 Copy Filename Only to Clipboard. + Ctrl+Shift+F9 Copy Full Path to Clipboard. + + Launch + ------ + Ctrl+Shift+F Search in Files. + Alt+N Open Document in New Window. + Alt+Shift+N Open New Empty Window. + Ctrl+L Launch Document. + Alt+L Open With... + Ctrl+R Run Command... + Ctrl+Shift+1 Web Template 1 + Ctrl+Shift+2 Web Template 2 + + Encoding + -------- + Shift+F8 Select UTF-8 as Default. + F9 Open Select Current file Encoding... + Ctrl+Shift+A Recode to ANSI. + Ctrl+Shift+O Recode to OEM. + Ctrl+Shift+F10 Recode to GB18030. + Ctrl+Shift+F8 Reload an ASCII file as UTF-8 file. + Alt+F8 Ignore Encoding Tags. + F8 Open Select Source Encoding to Reload file... + + Favorites + --------- + Alt+I Open Favorites... + Alt+K Add Current File to Favorites... + Alt+F9 Manage Favorites... + + + EDIT + ------------------------ + Ctrl+Z Undo. + Alt+Backspace Undo. + Ctrl+Shift+Y Undo. + Ctrl+Y Redo. + Ctrl+Shift+Z Redo. + Ctrl+X Cut. + Shift+Del Cut. + Ctrl+C Copy. + Alt+C Copy All. + Ctrl+E Copy Add. + Ctrl+V Paste. + Shift+Ins Paste. + Ctrl+K Swap. + Del Delete. + Ctrl+A Select All. + + Words + ----- + Ctrl+Alt+Enter Complete Word. + Ctrl+ ← Cursor Word Left. + Ctrl+ → Cursor Word Right. + Ctrl+Backspace Delete Word Before/Left. + Ctrl+Del Delete Word After/Right. + + Lines + ----- + Alt+ ↑ Move Line (Block) Up. + Alt+ ↓ Move Line (Block) Down. + Ctrl+X Cut Selection or Current Line, if No Selection. + Ctrl+Shift+X Cut Selection Whole Line(s). + Ctrl+C Copy Selection or Current Line, if No Selection. + Ctrl+Shift+C Copy Selection Whole Line(s). + Ctrl+D Duplicate Line or Selection. + Alt+D Transpose Lines. + Ctrl+Shift+D Delete Line. + Ctrl+Shift+Backspace Delete Line Left. + Ctrl+Shift+Del Delete Line Right. + Ctrl+Shift+W Column Wrap... + Ctrl+I Split Lines. + Ctrl+J Join Lines. + Ctrl+Alt+J Fuse Lines. + Ctrl+Shift+J Preserve Paragraphs. + Alt+Y Merge Empty Lines. + Ctrl+Alt+Y Merge Blank Lines. + Alt+R Remove Empty Lines. + Ctrl+Alt+B Remove Blank Lines. + Ctrl+Alt+D Remove Duplicate Lines. + + Selection + --------- + Ctrl+Shift+Q Stream Comment. + Ctrl+D Duplicate Selection or Line. + Alt+B Pad with Blanks. + Alt+Z Strip First Character. + Alt+U Strip Last Character. + Alt+W Strip Trailing Blanks. + Ctrl+Alt+P Compress Blanks. + Alt+M Modify Lines... + Alt+J Align Lines... + Alt+O Sort Lines... + Ctrl+, Jump to Selection Start. + Ctrl+. Jump to Selection End. + Tab Indent Selected Block. + Shift+Tab Unindent Selected Block. + Ctrl+Tab Insert Tabulator. + + Line Comment + ------------ + Ctrl+Q Toggle. + Ctrl+Alt+Q Add. + Ctrl+Alt+Shift+Q Remove. + Alt+Shift+Q Block Edit. + + Enclose Selection + ------------------ + Ctrl+1 Enclose within '' (Single Quotes). + Ctrl+2 Enclose within "" (Double Quotes). + Ctrl+3 Enclose within (). + Ctrl+4 Enclose within []. + Ctrl+5 Enclose within {}. + Ctrl+6 Enclose within `` (Backticks). + Alt+Q Enclose With... (Enclose Before/After Selection). + + Convert + ------- + Ctrl+Shift+U Selection in Uppercase. + Ctrl+U Selection in Lowercase. + Ctrl+Alt+U Selection in Invert Case. + Ctrl+Alt+I Selection in Title Case. + Ctrl+Alt+O Selection in Sentence Case. + Ctrl+Shift+T Convert in Selection Spaces to Tabs. + Ctrl+Shift+S Convert in Selection Tabs to Spaces. + Ctrl+Alt+T Convert in Selection Indent to Tabs. + Ctrl+Alt+S Convert in Selection Indent to Spaces. + Ctrl+Shift+E URL Encode. + Ctrl+Shift+R URL Decode. + Ctrl+Alt+X Char To HEX. + Ctrl+Alt+C Hex To Char. + + Insert + ------ + Ctrl+Enter New Line Above. + Ctrl+Shift+Enter New Line with Toggled Auto Indent Option. (orig-NP2: Ctrl+Enter) + Alt+X HTML/XML Tag... + Ctrl+F8 Encoding Identifier. + Ctrl+F5 Time/Date (Short Form). + Ctrl+Shift+F5 Time/Date (Long Form). + Shift+F5 Update Timestamps. + + Miscellaneous + ------------- + Ctrl+Shift+. Copy GUID to Clipboard. + Ctrl+Alt+E Escape C Special Chars. + Ctrl+Alt+R Unescape C Special Chars. + Ctrl+Alt+Num.keypad+ Increase Number. + Ctrl+Alt+Num.keypad- Decrease Number. + Ctrl+B Find Matching Brace. + Ctrl+Shift+B Select to Matching Brace. + Ctrl+Alt+F2 Expand Selection to Next Match. (orig-NP2: F2) + Ctrl+Alt+Shift+F2 Expand Selection to Previous Match. (orig-NP2: Shift+F2) + Ctrl+Space Select Word or Lines. + Ctrl+Shift+Space Multi-Select All Matches. + Alt+Shift+Arrows Rectangular Selection. + Alt+Left Mouse Rectangular Selection. + Ctrl+Left Mouse On hovering color indicator → Open color selection. + + Bookmarks + --------- + Ctrl+F2 Toggle. + F2 Goto Next. + Shift+F2 Goto Previous. + Alt+F2 Clear All. + + Search + ------ + Ctrl+F Find... + Alt+F3 Save Find Text. + F3 Find Next. + Shift+F3 Find Previous. + Ctrl+F3 Find Next Selected. + Ctrl+Shift+F3 Find Previous Selected. + Ctrl+H Replace... + F4 Replace Next. + Ctrl+G Goto... + Ctrl+Shift+F Search in Files. + + + VIEW + ------------------------ + Ctrl+W Word Wrap. + Ctrl+Alt+L Long Line Marker. + Ctrl+Shift+G Indentation Guides. + Ctrl+Shift+7 Show Wrap Symbols. + Ctrl+Shift+8 Show Blanks. + Ctrl+Shift+9 Show Line Endings. + Ctrl+Alt+W Hyperlink Hotspots. + Ctrl+Shift+V Visual Brace Matching. + Ctrl+Shift+I Highlight Current Line. + Ctrl+Shift+N Show Line Numbers. + Ctrl+Shift+M Bookmark Margin. + + Mark Occurences + ---------------- + Alt+A Active. + + Folding + ------- + Ctrl+Alt+F Toggle Folds. + Alt+ + Jump Next Fold. + Alt+ – Jump Prev Fold. + Alt+ ← Collapse Fold. + Alt+ → Expand Fold. + + Display + ------- + Ctrl+Alt+V Focused View. + Ctrl+PgUp/PgDn Goto Previous/Next. + Ctrl+Shift+PgUp/PgDn Select to Previous/Next. + + Zoom + ---- + Ctrl+ + Zoom In. + Ctrl+ – Zoom Out. + Ctrl+0 Reset Zoom. + + Position + -------- + Ctrl+Shift+K Copy Window Position to Clipboard. + Ctrl+Shift+P Snap to Window Default Position. + Ctrl+F11 Snap to Initial Default Position. + F11 Toggle To Full Area Window Position. + + + APPEARENCE + ------------------------- + Ctrl+F12 Customize Schemes... + F12 Select Syntax Scheme... + Shift+F12 2nd Common Base. + Alt+F12 Global Default Font... + Ctrl+Alt+F12 Current Scheme's Default Font... + + + SETTINGS + ------------------------ + Ctrl+T Tab Settings... + Ctrl+Shift+H Auto Close HTML/XML. + Ctrl+Alt+A Accelerated Word Navigation. + Alt+F5 File Change Notification... + + Windows + ------- + Ctrl+Shift+L Reuse Window. + Alt+T Always On Top. + Alt+G Transparent Mode. + + Window Title Display + -------------------- + Ctrl+9 Display Text Excerpt in Title. + + Advanced Configuration + ---------------------- + F7 Save Settings Now. + Ctrl+F7 Open Settings File "Notepad3.ini". + + + HELP + ------------------------ + F1 Online Documentation. + Shift+F1 About... + + + +================================================================================ + +*** Keyboard Shortcuts for Minipath *** date: 2020/09/29 +--------------------------------------------------------------------- + + + Enter Open selected file in an existing target window. + Shift+Enter Open selected file in a new window. + Alt+Enter Properties of selected object. + Backspace Move to upper directory. + Ctrl+Backspace Move to root directory. + Alt+Left Go to previous directory. + Alt+Right Go to next directory. + Tab Move to next control. + Shift+Tab Move to previous control. + Esc Exit or minimize metapath (optional). + Ctrl+D Change to another directory. + Ctrl+E Toggle "Activate target window" option. + Ctrl+F Launch target application without any file. + Ctrl+H Save settings. + Ctrl+K Create link. + Ctrl+L Launch selected file. + Ctrl+M Specify file filter. + Ctrl+N Create new file. + Ctrl+Q Open file with specified quickviewer. + Ctrl+P Snap to target window. + Ctrl+Shift+P Move window to default position. + Ctrl+R Open run dialog box. + Ctrl+S Save file to new location. + Ctrl+T Toggle "Keep on top" option. + Ctrl+U Toggle transparency mode. + Ctrl+1 Sort files by name. + Ctrl+2 Sort files by size. + Ctrl+3 Sort files by type. + Ctrl+4 Sort files by date. + Ctrl+5 Sort files in reverse order. + Ctrl+* Set file filter to *.* + Alt+D Create new directory. + Alt+G Goto link target. + Alt+L Open selected file with another application. + Alt+N Open new window. + Alt+S Toggle statusbar. + Alt+T Toggle toolbar. + Del Delete selected object. + Shift+Del Delete selected object (no recycling). + Ctrl+Shift+Del Delete file without confirmation. + Alt+Up Goto next file. + Alt+Down Goto previous file. + F1 Display version info. + F2 Rename seletced object. + F5 Update view of directory. + F6 Copy/move selected object to another location. + F7 Save settings now. + Ctrl+F7 Jump to ini-file. + F9 Edit "Favorites" folder. + F11 Jump to "Favorites" folder. + F12 View program settings. + Ctrl+F12 Setup metapath target application. + + + +================================================================================ + +*** Regular Expression Matching Syntax (Multi Lines) *** + (Advanced features: see .\Oniguruma_RE.txt) +--------------------------------------------------------------------- + + + . This matches any character. + + ^ This matches empty string immediately after a New Line (unless used inside a set). + + $ This matches empty string immediately before End of Line. + + \< This matches the start of a word. + + \> This matches the end of a word. + + \b Word boundary. + + [...] This indicates a set of characters, + For example, [abc] means any of the characters a, b or c. + You can also use ranges, for example [a-z] for any lower case character. + + [^...] The complement of the characters in the set. + For example, [^A-Za-z] means any character except an alphabetic character. + + \d Any decimal digit. + + \D Any character that is not a decimal digit. + + \s Any whitespace character. + + \S Any character that is not a whitespace character. + + \w Any "word" character. + + \W Any "non-word" character. + + \x This allows you to use a character x that would otherwise have a special meaning. + For example, \[ would be interpreted as [ and not as the start of a character set. + + \xHH Character with hex code HH. + + ? This matches preceding 0 or 1 times. + + * This matches 0 or more times. + For example, Sa*m matches Sm, Sam, Saam, Saaam and so on. + + + This matches 1 or more times. + For example, Sa+m matches Sam, Saam, Saaam and so on. + + *? or +? Non greedy matching of quantifiers "?" and "+". + + \( This marks the start of a region for tagging a match. + + \) This marks the end of a tagged region. + + \n Where n is 1 through 9 refers to the first through ninth tagged region when replacing. + For example, if the search string was Fred\([1-9]\)XXX and the replace string was + Sam\1YYY, when applied to Fred2XXX this would generate Sam2YYY. + + -----> Examples (don't use quotes) + - Quote lines: find "^" replace with "> " + - Unquote lines: find "^> " replace with "" + - Remove line numbers: find "^[0-9]+" replace with "" + - Convert tabs to double spaces: find "\t" replace with " " + + + +================================================================================ + +*** Command Line Help *** +--------------------------------------------------------------------- + + + Usage: + Notepad3 [/?] […[Encoding]] […[Line ending mode]] [/e] [/g] [/m] [/l] + [/q] [/s] [/d] [/h] [/x] [/c] [/b] [/n] [/r| [/p] [/t] [/i] [/o] + [/f] [/u] [/v] [/vd] [/y] [/z] [[drive:][path]filename[…]] + + file Must be the last argument, no quoted spaces by default. + + Accept multiple file arguments (with quoted spaces). + - Accept single file argument (without quoted spaces). + + Options: + /? Dispay this help message. + … Encoding (/ansi, /unicode, /unicodebe, /utf8, /utf8sig). + … Line ending mode (/crlf, /cr, /lf). + /e File source encoding. + /g Jump to specified position (/g -1 end of file). + /m Match specified text (/m- last, /mr regex, /mb backslash). + /l Auto-reload modified files. + /q Force creation of new files without prompt. + /s Select specified syntax scheme. + /d Select default text scheme. + /h Select Web Source Code scheme. + /x Select XML Document scheme. + /c Open new window and paste clipboard contents. + /b Open new paste board to collect clipboard entries. + /n Always open a new window (/ns single file instance). + /r Reuse window (/rs single file instance). + /p Set window position and size (/p0, /ps, /pf,l,t,r,b,m) + or /p ,,,, [all integers]. + /t Set window title. + /i Start as tray icon. + /o Keep window on top. + /f Specify ini-file (/f0 no ini-file). + /u Launch with elevated privileges. + /v Print file immediately and quit. + /vd Print file (open printer dialog). + /y Search environment PATH in case of relative filename. + /z Skip next (usable for registry-based Notepad replacement). + + Examples: + Notepad3 /utf8sig /crlf d:\temp\Test.txt + … Open a new file: "Test.txt" Encoding=UTF-8-BOM, EoL=CRLF. + Notepad3 /v d:\temp\Test.txt + … Print the file: "Test.txt" immediately. + + +================================================================================ + diff --git a/np3portableapp/Notepad3Portable/App/Notepad3/Docs/License.txt b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/License.txt new file mode 100644 index 0000000000..0ea27e0fcf --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/License.txt @@ -0,0 +1,52 @@ +License for Notepad3 and MiniPath. +===================== +Notepad3 and MiniPath Copyright (c) 2008-2023 Rizonesoft, All rights reserved. +https://www.rizonesoft.com + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +3. Neither the name of Florian Balmer nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +License for Scintilla and SciTE. +================== +Copyright 1998-2002 by Neil Hodgson , All Rights Reserved. + +Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. + +NEIL HODGSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL NEIL HODGSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGESWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +License for Oniguruma RegEx Engine. +======================= +Copyright (c) 2002-2020 K.Kosako , All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +License for "grepWin" (Regular expression search and replace for Windows). +============================================== +GNU General Public License v3.0, All Rights Reserved. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along with this program. If not, see . + +"grepWin" is developed by Stefan Kung (https://tools.stefankueng.com/grepWin.html). + +Original "grepWin" binaries (currently v1.9.2) and corresponding source code (according GPL to v3.0) +can be retrived at folowing location https://github.com/stefankueng/grepWin/releases/tag/1.9.2. + +Modified "grepWinNP3" binaries (Notepad3 MOD, currently v2.0.x) and corresponding source code +(according to GPL v3.0) can be retrived at folowing location: +https://github.com/rizonesoft/Notepad3/tree/master/grepWinNP3. diff --git a/np3portableapp/Notepad3Portable/App/Notepad3/Docs/Notepad3.txt b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/Notepad3.txt new file mode 100644 index 0000000000..fd1078d4bf --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/Notepad3.txt @@ -0,0 +1,980 @@ +======================================================================= += = += = += Notepad3 - light-weight Scintilla-based text editor for Windows = += = += (c) Rizonesoft 2008-2023 = += https://rizonesoft.com = += = += forked from Notepad2-mod = += maintained by XhmikosR = += https://xhmikosr.github.io/notepad2-mod = += based on: = += Notepad2 4.2.25 = += (c) Florian Balmer 2004-2011 = += https://www.flos-freeware.ch = += = += = +======================================================================= + +Notepad3 is based on code from Florian Balmer's Notepad2 and +XhmikosR's Notepad2-mod. MiniPath is based on code from +Florian Balmer's metapath. + +Changes in Notepad3 compared to original Notepad2 + + + Notepad3: + - Restore selection on undo/redo operations + - Text file encryption/decryption support + - Improved RegExp search n' replace engine (multiline support) + - Syntax highlighting support for MATLAB + - New program icon and other small cosmetic changes + - New toolbar icons based on Yusuke Kamiyaman's Fugue Icons + Purchased by Rizonesoft + - Countinuously updated Scintilla component + - Other various minor changes and tweaks + . Accelerated word navigation + . Scitilla's Direct Write support + . improved encoding and codepage handling + . Insert GUID + + + Notepad2-mod: + - Code folding + - Support for bookmarks + - Option to mark all occurrences of a word + - Updated Scintilla component + - Word auto-completion + - Syntax highlighting support for AutoHotkey, AutoIt3, AviSynth, + Bash, CMake, CoffeeScript, Inno Setup, LaTeX, Lua, Markdown, NSIS, + Ruby, Tcl, YAML and VHDL scripts + - Improved support for NFO ANSI art + - Support for replacing Windows Notepad using a clean, unintrusive + registry-based method + + +Changes in MiniPath compared to metapath + + - Project upgraded to Visual C++ 2017 + - 64-bit version + - New toolbar icons based on Yusuke Kamiyaman's Fugue Icons + Purchased by Rizonesoft + - Installation bundled with Notepad3 + - Minor cosmetic changes + +Supported Operating Systems + + Windows 7, 8, 8.1, 10 both 32-bit and 64-bit + +Contributors: + + - Florian Balmer https://www.flos-freeware.ch + - XhmikosR https://xhmikosr.github.io/notepad2-mod + - Kai Liu https://code.kliu.org/misc/notepad2 + - RL Vision https://www.rlvision.com/notepad2/about.php + - Aleksandar Lekov + - Bruno Barbieri + - RaiKoHoff https://github.com/RaiKoHoff + + +More information: +* Binaries: https://www.rizonesoft.com/downloads/notepad3 +* Source code: https://github.com/rizonesoft/Notepad3 +* https://github.com/XhmikosR/notepad2-mod +* Official Notepad2 website: https://www.flos-freeware.ch/notepad2.html +* Code folding usage guide: https://github.com/XhmikosR/notepad2-mod/wiki/Code-Folding-Usage +* Kai Liu's website: https://code.kliu.org/misc/notepad2 +* Bookmark Edition website: https://www.rlvision.com/notepad2/about.asp + + +Changed keyboard shortcuts compared to Notepad2: + +Ctrl+C (no selection) Copy current line. +Ctrl+X (no selection) Cut current line. +Ctrl+Shift+. Copy GUID to Clipboard. +Ctrl+0 Reset zoom. +Ctrl+NK_* Toggle transparency + +F2 Go to next bookmark. +Shift+F2 Go to privious bookmark. +Ctrl+F2 Set/Reset bookmark. +Alt+F2 Clear all. + +Ctrl+Alt+F Toggle all folds. + +Ctrl+Alt+F2 Expand selection to next match. +Ctrl+Alt+Shift+F2 Expand selection to previous match. +Ctrl+Shift+Enter New line with toggled auto indent option. + + +Changed command Line Switches compared to Notepad2: + + /v Print specified document and leave + /vd Print specified document, but open Print dialog before + + +======================================================================= +How to reset the Notepad3 notification messages? +======================================================================= + +To bring back the notification messages suppressed with the +"Don't display this message again" option, load the ini-file (Ctrl+F7) +and delete all the values from the [Suppressed Messages] section. + +To block the "Don't display this message again" option for an +individual notification, set the value of the corresponding ini-option to -1. +For example, MsgNotFound=-1 ensures the "Text not found" notification message +will always be displayed (non suppressable by check-box). + + +======================================================================= +What about the [Settings2] section of the .ini-file? +======================================================================= + +You may have noticed that the Notepad3 ini-file has a configuration section +named [Settings2]. This section offers some advanced Notepad3 program settings, +and can only be edited manually. Press Ctrl+F7 to open the Notepad3 ini-file. +Most changes only take effect upon restarting Notepad3. + +New (Notepad3) in [Settings2] + +SciDirectWriteTech= -1,0,1,2,3 - Scintilla's Direct Write Technology +SciFontQuality= 0,1,2,3 - default,none,standard,cleartype + (if not defined by 'smoothing:xxx' in Style Schema) +SciDirectWriteTech +SciFontQuality +Specifies Scintilla's internal rendering technology and font quality. + SciDirectWriteTech (default is 1): + 0: SC_TECHNOLOGY_DEFAULT + 1: SC_TECHNOLOGY_DIRECTWRITE + 2: SC_TECHNOLOGY_DIRECTWRITERETAIN + 3: SC_TECHNOLOGY_DIRECTWRITEDC + SciFontQuality (default is 3): + 0: SC_EFF_QUALITY_DEFAULT + 1: SC_EFF_QUALITY_NON_ANTIALIASED + 2: SC_EFF_QUALITY_ANTIALIASED + 3: SC_EFF_QUALITY_LCD_OPTIMIZED + +MarkOccurrencesMaxCount +The maximum number of counts for marking occurences, if this option is active. +The default is 2000. + +UseOldStyleBraceMatching +Switch back to (not recommended) old style brace matching. +The default is 0. + + +Notepad2 already existing settings: +----------------------------------- + +StickyWindowPosition +ReuseWindow +SingleFileInstance +These items are managed by Notepad3. + +MultiFileArg +Control if Notepad3 should allow multiple files on the command line (set to 1). +The default behaviour is to accept only a single file, without quoted spaces, +like Windows Notepad (set to 0). +The command line switches + and - can be used to override this setting on the fly, +and the /z switch has the same effect as the - switch. + +OffsetNewWindows +Determines whether positions of new windows (opened though Alt+N or Alt+0) +should be offset relative to the active Notepad3 window (1). +The new default setting for Notepad3 5.0 is to use the same window position +as the currently active Notepad3 window (0). + +RelativeFileMRU +Set to 0 to disable recent files on the same drive or network share as Notepad3.exe +being saved with relative pathnames. The default is 1 (enabled). + +PortableMyDocs +If set to 1, recent files and other path settings referring to the +My Documents directory tree are stored relative to My Documents. +This enhances USB stick portability between Windows XP and more recent versions of Windows, + which are using different locations for My Documents. + This setting has no effect if Notepad3.exe itself is located inside + My Documents (or a subdirectory thereof). + The default is 1 (enabled) if RelativeFileMRU is enabled, and 0 (disabled) otherwise. + +DefaultExtension +Specify the default extension for saved files (omit the leading dot, just like txt or html). +The default extension is 'txt', +and a value of (none) needs to specified if no default extension is preferred. +To save a file without extension (regardless of the default extension setting), +put the filename in double quotes. + +DefaultDirectory +Specify the default directory for the open and save dialogs, used if no file is opened. +Pathnames can be relative to the Notepad3 program directory. + +FileDlgFilters +Specify filters for the open and save dialogs +(Example: Text Files|*.txt;*.wtx;*.log;*.asc;*.doc;*.diz;*.nfo|All Files|*.*). + +FileCheckInverval +The interval (in milliseconds) to check for external modification +of the currently opened file. Defaults to 2000 ms. + +AutoReloadTimeout +The timeout (in milliseconds) to wait before automatically reloading modified files. +The default value of 2000 ms usually prevents read/write conflicts. + +FileLoadWarningMB +The size limit, in megabytes, to display a warning message for large files. +A value of 0 disables the warning. + +OpacityLevel +Opacity level (in %) of the Notepad3 window in transparent mode. + +NoFadeHidden +Set to 1 to disable fading of hidden objects in file lists (such as Favorites, etc.). + +ToolbarLook +Determines the look of disabled toolbar buttons. 0 means system default +(dark-grey and somewhat grainy on Windows Vista and Windows 7; not available on Windows 2000), +1 means colored and faded (the default from Notepad3 4.2.25 on Windows XP and above), +and 2 means Windows XP-style light-grey (the default from Notepad3 4.2.25 on Windows 2000; +looks better than the system default on Windows Vista and Windows 7). + +SimpleIndentGuides +Set to 1 to prevent indentation guides from jumping across empty lines. + +NoHTMLGuess +Set to 1 to disable simple HTML/XML detection for files without extensions. + +NoCGIGuess +Set to 1 to disable simple language detection for cgi and fcgi files. + +NoFileVariables +Set to 1 to disable file variable parsing. Encoding tag parsing can be disabled +in the File, Encoding, Default dialog box. + +filebrowser.exe +Specify the path of an external program that is launched +when pressing the Browse toolbar button. Defaults to metapath.exe, +which is my file browser plugin (found in the Project Archive). +You can specify additional command line switches, +and the file currently opened in Notepad3 will be appended +as the last command line parameter. +To have the current file selected in Windows Explorer +when pressing the browse toolbar button, set this entry to "explorer.exe /e,/select,%1". +Note: Due to special treatment of quotes by the Win32 ini-file APIs, +pathnames with spaces need to be quadruple-quoted (""path to/file.exe""), +but only double-quoted if there's additional command line arguments ("path to/file.exe" /arg). + +DateTimeShort +DateTimeLong +Specify the short/long date and time formats. +This is the format parameter passed to the strftime() function. +Note that the locale will be set to English +(because of the English Visual C++ Runtime Library used by Notepad3). + +TimeStamp +Regular expression used to update timestamps. + +WebTemplate1 +WebTemplate2 +Undocumented. Dangerous. ☺ + +ShellAppUserModelID +ShellUseSystemMRU +Control system MRU, taskbar and jump list behaviour. +See Replacing Windows Notepad for detailed explanations. + + +======================================================================= += = += = += Notepad3's Encryption / Decryption feature = += = += Prototype enduser documentation = += taken from NotepadCrypt (Dave Dyer) = += = += https://www.andromeda.com/people/ddyer/notepad/NotepadCrypt.html = += = += = +======================================================================= + +NotepadCrypt is a simple text editor which can optionally encrypt the +text files it edits. NotepadCrypt was designed to fill a requirement to +encrypt configuration files which had to be edited by humans but read by +programs, without the hazard that would obviously exist if editing +required the human editor to make a temporary unencrypted file. I needed +an editor which could read and write an encrypted file, for which the +encrypted format was documented and assessable to C and Perl programs. +To my surprise, none existed. + +NotepadCrypt was constructed using open source software, including a low +level implementation of AES encryption and Sha256 hashing; and Notepad2 +a really nice open source replacement for Notepad. None of this software +had to be changed in any substantial way, but the file format and key +management had to be designed and implemented to stitch it all together. +The requirement that a program be able to read the encrypted file led to +a design which included a master key, which I think is extremely useful +to anyone using NotepadCrypt to encrypt their own confidential files. + +Source code: + +Sha256 hashing implementation (used to convert passphrases to encryption +keys) based on an implementation by Christoper Devine. This file is +available from many sources on the web. AES encryption, for which there +are many open source implementations. Notepad2 editor, which also +requires the Scintilla editing widget. NotepadCrypt version 4.2.25 Full +Sources: This zip includes the as-modified source code for all of the +above, VC.net projects for NotepadCrypt and a simple command line tool +which uses the same file format. There are a couple of "extras" - a test +program that uses tcsh and a java program that can read NotepadCrypt's +file format. Unless you are a programmer, you're probably better off +getting the binary only distribution for NotepadCrypt and Notepad3CL + +Technical Details For NotepadCrypt + +Overall Design: Sha256 hash is used to convert an ascii pass phrase to a +256 bit encryption key. Pseudorandom data is used as an initialization +vector for AES-256 encryption. Optionally, a the encryption key (NOT the +passphrase) is encrypted using a second master key, and included in the +file header. This master key can be used as an emergency data recovery +key, or as a second key to be used by programs to read encrypted files. + +Overall File Format: +Consists of a preamble, the encrypted data, and some padding at the end. + +Encrypted files start with an 8 byte preamble, the first 4 bytes are a +"magic number" to identify the file type (currently 0x04030201) and a 4 +byte sub-file type, (currently either 0x00000001 or 0x00000002 if the +file has a master key). + +The next 16 bytes of the preamble are the initialization vector for the +AES engine, to be used with the file key. Each file gets a unique 16 +bytes of pseudo random noise. + +Next, for master keyed files, is a 16 byte IV for the master key, +followed by a 32 byte block containing the file key, encrypted with the +master key, using the master key IV and CBC block chaining. + +Next, is the actual file data, encrypted using the file key and the IV, +and CBC block chaining. + +Finally, are 1-16 bytes of padding to round out the last AES block. Note +that there are never 0 bytes of padding. + +Passphrase Management: 256 bit encryption keys are generated from the +ascii passphrase by passing the passphrase through a SHA256 hash. The +passphrase itself is never stored anywhere except in the dynamic memory +of the encrypting program. + +Key management over file generations: If the file is opened using a file +passphrase, the passphrase is retained and used as the default for the +passphrase dialog. If the file is opened using a master passphrase, the +recovered file key is used as the default encryption for new files. This +allows an editor who does not know the file passphrase to propogate a +file key he could not create. If the file contains a master key, and +neither the file or master passphrase is changed, then the retained, +master-encrypted file key is copied into the next file generation (It is +still valid). This allows an editor who knows only the file passphrase +to propogate a master key he could not create. + +======================================================================= += = += Notepad3 encryption - prototype enduser documentation = += = +======================================================================= + +If you open a file which was encrypted by this program, you'll be +prompted to supply a passphrase. This passphrase becomes +the default to be used when saving files. The passphrase is not the +actual encryption key, but is used to generate a 256 bit +encryption key called the file key. + +Master Keys + +An Encrypted file can optionally contain a copy of its own file key, +encrypted with a master key, derived from a master +passphrase. This allows anyone who knows the master passphrase to decode +any file encrypted with any file key which uses this +master key structure. As long as the file passphrase is not changed, the +master key can be propogated to new versions of the +file without typing the master phrase again. + + +Why use a master key? + +#1) Data recovery. It is not generally a good idea to use the same +passphrase for all files, or to continue using the same passphrase +forever. The principle hazard is that if even one key is revealed, every +encrypted file you have ever created can also be read. Consequently, +different keys should be used for different files, and over time, those +keys should change. Since the keys change, they are subject to being +lost or forgotton, resulting in lost data - it's still there, but no one +can decode it. If you use a master key, and you have misplaced the file +key, you can still recover your data. Since master key is not routinely +used to decrypt the file, and never needs to be shared with anyone, is +is much less likely to be compromised, so it is reasonable for a good +master key to be used for a very long time in a lot of different files. + +Recommendation: Use a master passphrase that will be very hard for +anyone to guess and very hard for you to forget. For example: + "My Favorite movie is Gone with the Wind" + "When it rains in New York, even Chicago is a better place to be" +Never tell anyone what it is or write it down. It's an EMERGENCY measure +to prevent catastrophic data loss, so treat it that way. Never use it to +read or open any encrypted file except for testing, or if you have +really lost the file passphrase. + +#2) Trapdoor access. Sometimes it is desirable to allow a second party +to decode the file without knowing the encryption passphrase - a good +example is where an automated program is intended to read an encrypted +file that is prepared by a human. The program has to have the passphrase +or the key embedded in it somewhere. It's possible for a dedicated +attacker to find it, but it's much more likely that the source of +compromise will be clumsy humans. Allowing the program to use the master +key and humans to use the ordinary file keys will allow the routine-use +keys to be changed as often as necesary, while still letting the program +read the files without being told the new key. + + +Technical Details: +(https://www.real-me.net/ddyer/notepad/NotepadCrypt-technotes.html) + +Passphrase Management: +256 bit encryption keys are geneated from ascii passphrases by +passing the passphrase through a SHA256 hash. Passphrases are never +Stored anywhere except in the dynamic memory of the encrypting program. + +Key management over file generations: If the file is opened +using a file passphrase, the passphrase is retained and used +as the default for the passphrase dialog. + +If the file is opened using a master passphrase, the recovered +file key is used as the default encryption for new files. This +allows an editor who does not know the file passphrase to propogate +a file key he could not create. + +If the file contains a master key, and neither the file or master +passphrase is changed, then the retained, master-encrypted file +key is copied into the next file generation. (It is still valid). +This allows an editor who knows only the file passphrase to propogate +a master key he could not create. + +Encrypted files start with an 8 byte preable, the first 4 bytes are +a "magic number" to identify the file type (currently 0x04030201) +and a 4 byte subfile type, (currently either 0x00000001 or 0x00000002) + +The next 16 bytes are the initialization vector for the AES engine, +to be used with the file key. Each file gets a unique 16 bytes of +pseudorandom noise. + +Next, for master keyed files, is a 16 byte IV for the master key, +followed by a 32 byte block containing the file key, encrypted +with the master key, using the master key IV and CBC block chaining. + +Next, is the actual file data, encrypted using the file key and the IV, +and CBC block chaining. + +Finally, are 1-16 bytes of padding to round out the AES block. +Note that there are never 0 bytes of padding. + + +A Word about pass phrases and overall security. + +While this encryption scheme uses high quality AES encryption and quite +long 256 bit keys, that is almost irrelevant to the overall security of +the system. It's like having a very expensive lock on your front door. +Thieves won't go to great lengths to pick your lock; they will simply +break a window instead. The weak link in this encryption scheme is YOU +and your selection of pass phrases. If your encrypted files are +compromised, the most likely, by far, method is the simplest; (1) they +ask, you tell. or (2) they find the scrap of paper where you wrote the +passphrase or (3) some key logger watches you type the passphrase. The +only other likely method is a dictionary-type attack using a program to +try lots of possible passphrases. Any short, word-like passphrase CAN be +compromised using a few days of computer time. + +Finally, consider the suitablility of this encryption scheme for your +purpose. + + If your goal is to prevent your wife from reading your girlfriend's + phone number in your address book: definitely. + + If your goal is to prevent disclosure of sensitive data if your laptop + is stolen: most likely. + + If your goal is to prevent fishing by the IRS, should they ever become + curious about you: don't count on it. + They'll throw you in jail until you tell them the password, or install + a key logger and wait for you to tell them voluntarily. + + If your goal is to keep secrets people who are definitely out to get + you, and are willing to shove bamboo splints under you fingernails + until you talk: don't even think about it. + + + +======================================================================= += = += = += Notepad2 - light-weight Scintilla-based text editor for Windows = += = += = += Notepad2 4.2.25 = += (c) Florian Balmer 2004-2011 = += https://www.flos-freeware.ch = += = += = +======================================================================= + + +Description + + Notepad2 is a light-weight, free and open source Notepad-like text + editor with syntax highlighting for a few commonly used languages. + It's based on the Scintilla source code editing component and works + on NT-based versions of Windows. + + +Features + + - Syntax highlighting: HTML, XML, PHP, ASP (JS, VBS), CSS, + JavaScript, VBScript, C/C++, C#, Resource Script, Makefiles, Java, + Visual Basic, Pascal, Assembly, SQL, Perl, Python, Configuration + Files, Apache Config Files, PowerShell, Batch Files, Diff Files + - Drag & drop text editing inside and outside Notepad2 + - Basic regular expression search and replace + - Useful word, line and block editing shortcuts + - Rectangular selection (Alt+Mouse) + - Brace matching, auto indent, long line marker, zoom functions + - Support for Unicode, UTF-8, Unix and Mac text files + - Open shell links + - Mostly adjustable + +Installation and Uninstallation + + Just put a copy of Notepad2.exe and Notepad2.ini to any directory on + your computer. To uninstall Notepad2, simply delete these two files. + Notepad2 does not create any registry entries on your computer. + +The Notepad2 Source Code + + This package contains the full source code of Notepad2 4.2.25 for + Windows. Project files for Visual C++ 7.0 are included. Chances are + that Notepad2 can be rebuilt with other development tools, including + the free Visual C++ Express Edition, but I haven't tested this. + + +Rebuilding from the Source Code + + Notepad2 4.2.25 is based on Scintilla 2.24 [1]. + + [1] https://www.scintilla.org + + To be able to rebuild Notepad2, the source code of the Scintilla + editing component has to be unzipped to the "scintilla" subdirectory + of the Notepad2 source code directory. + + Many of the Scintilla lexing modules are not used by Notepad2. Run + LinkLex.js to adapt the list (in "scintilla/src/Catalogue.cxx") and + make linking work properly. + + +Creating a Compact Executable Program File + + Linking to the system CRT slightly improves disk footprint, memory + usage and startup because the pages for the system CRT are already + loaded and shared in memory. To achieve this, the release version of + Notepad2.exe is built using the Windows Driver Kit (WDK) 7.1.0 tools, + available as a free download from Microsoft. The appropriate build + scripts can be found in the "wdkbuild" subdirectory. Set %WDKBASEDIR% + to the directory of the WDK tools on your system. + + +How to add or modify Syntax Schemes + + The Scintilla documentation has an overview of syntax highlighting, + and how to write your own lexing module, in case the language you + would like to add is not currently supported by Scintilla. + + Add your own lexer data structs to the global pLexArray (Styles.c), + then adjust NUMLEXERS (Styles.h) to the new total number of syntax + schemes. Include the "scintilla/lexers/Lex*.cxx" file required for + your language into your project. Ensure the new module is initialized + (in "scintilla/src/Catalogue.cxx"), either by manually uncommenting + the corresponding LINK_LEXER() macro call, or by updating and + re-running LinkLex.js. + + +Keyboard Shortcuts for Notepad2 + + File + + Ctrl+N New file. + Ctrl+F4 Close file, identical with Ctrl+N. + Ctrl+O Open file. + F5 Reload file. + F8 Recode file. + Ctrl+Shift+F Recode file as default encoding. + Ctrl+Shift+A Recode file as system default ANSI. + Ctrl+Shift+O Recode file as system default OEM. + Shift+F8 Recode 7-bit ASCII file as UTF-8. + Alt+F8 Reload file without file variable parsing. + Ctrl+S Save file. + F6 Save file as. + Ctrl+F6 Save file copy. + Ctrl+P Print file. + Alt+H Open recent file. + + Tools + + Alt+N Open document in new window. + Alt+0 Open new empty window. + Ctrl+M Run metapath file browser plugin. + Ctrl+L Launch document. + Alt+L Open with. + Ctrl+R Run command. + + Favorites + + Alt+I Open favorites. + Alt+K Add to favorites. + Alt+F9 Manage favorites. + + Edit + + Ctrl+Z Undo. + Ctrl+Shift+Z Redo. + Alt+Backspace Undo. + Ctrl+Y Redo. + Ctrl+Shift+Y Undo. + Ctrl+X Cut. + Shift+Del Cut. + Ctrl+C Copy. + Alt+C Copy all. + Ctrl+E Copy add. + Ctrl+V Paste. + Shift+Ins Paste. + Ctrl+K Swap. + Del Clear. + Ctrl+A Select all. + Alt+Shift+Arrows Rectangular selection. + Ctrl+Enter New line with toggled auto indent option. + Ctrl+PgUp/PgDn Goto previous/next block. + Ctrl+Shift+PgUp/PgDn Select to previous/next block. + + Char, Word + + Ctrl+Space Select word (or line). + Ctrl+Backspace Delete word before/left. + Ctrl+Del Delete word after/right. + Ctrl+Tab Insert tabulator. + + Lines + + Ctrl+Shift+Space Select line. + Ctrl+Shift+Up Move line (block) up. + Ctrl+Shift+Down Move line (block) down. + Ctrl+D Duplicate line. + Ctrl+Shift+X Cut line. + Ctrl+Shift+C Copy line. + Ctrl+Shift+D Delete line. + Ctrl+Shift+Backspace Delete line left. + Ctrl+Shift+Del Delete line right. + Ctrl+Shift+W Column wrap. + Ctrl+I Split lines. + Ctrl+J Join lines. + Ctrl+Shift+J Join paragraphs. + + Block + + Tab Indent selected block. + Shift+Tab Unindent selected block. + Alt+Q Enclose selection. + Alt+D Duplicate selection. + Alt+B Pad with spaces. + Alt+Z Strip first character. + Alt+U Strip last character. + Alt+W Strip trailing blanks. + Alt+P Compress whitespace. + Alt+Y Merge blank lines. + Alt+R Remove blank lines. + Alt+M Modify lines. + Alt+J Align lines. + Alt+O Sort lines. + + Convert + + Ctrl+Shift+U Make uppercase. + Ctrl+U Make lowercase. + Ctrl+Alt+U Invert case. + Ctrl+Alt+I Title case. + Ctrl+Alt+O Sentence case. + Ctrl+Shift+S Convert tabs to spaces. + Ctrl+Shift+T Convert spaces to tabs. + Ctrl+Alt+S Convert indenting tabs to spaces. + Ctrl+Alt+T Convert indenting spaces to tabs. + + Insert + + Alt+X HTML/XML tag. + Ctrl+F8 Encoding identifier. + Ctrl+F5 Time/date (short form). + Ctrl+Shift+F5 Time/date (long form). + Ctrl+F9 Filename. + Ctrl+Shift+F9 Path and filename. + + Special + + Ctrl+Q Block comment (toggle). + Ctrl+Shift+Q Stream comment. + Ctrl+Shift+E URL Encode. + Ctrl+Shift+R URL Decode. + Ctrl+Alt+E Escape C Special Chars. + Ctrl+Alt+R Unescape C Special Chars. + Ctrl+Alt+X Convert character to hex code. + Ctrl+Alt+C Convert hex code to character. + Ctrl+B Find matching brace. + Ctrl+Shift+B Select to matching brace. + F2 Expand selection to next match. + Shift+F2 Expand selection to previous match. + Ctrl+1 Enclose within ''. + Ctrl+2 Enclose within "". + Ctrl+3 Enclose within (). + Ctrl+4 Enclose within []. + Ctrl+5 Enclose within {}. + Ctrl+6 Enclose within ``. + Shift+F5 Update timestamps. + Ctrl+Alt++ Increase number. + Ctrl+Alt+- Decrease number. + Ctrl+, Jump to selection start. + Ctrl+. Jump to selection end. + + Find, Replace + + Ctrl+F Find. + Alt+F3 Save find text. + F3 Find next. + Shift+F3 Find previous. + Ctrl+F3 Find next word or selection. + Ctrl+Shift+F3 Find previous word or selection. + Ctrl+H Replace. + F4 Replace next. + Ctrl+G Jump to line. + + Syntax scheme, Font + + F12 Select syntax scheme. + Shift+F12 Select 2nd default syntax scheme. + Ctrl+F12 Customize syntax schemes. + Alt+F12 Select default font. + F11 Select default text syntax scheme. + Ctrl+F11 Select web source code syntax scheme. + Shift+F11 Select XML document syntax scheme. + + View + + Ctrl+W Toggle word wrap. + Ctrl+Shift+L Show long line marker. + Ctrl+Shift+G Show indentation guides. + Ctrl+Shift+N Show line numbers. + Ctrl+Shift+M Show selection margin. + Ctrl+Shift+7 Show wrap symbols. + Ctrl+Shift+8 Show whitespace. + Ctrl+Shift+9 Show line endings. + Ctrl+Shift+V Toggle visual brace matching. + Ctrl+Shift+I Highlight current line. + + Zoom + + Ctrl++ Zoom in. + Ctrl+- Zoom out. + Ctrl+ Reset zoom. + + Settings + + Ctrl+T Tab settings. + Alt++ Increase limit for long lines. + Alt+- Decrease limit for long lines. + Ctrl+Shift+H Toggle auto close HTML/XML. + Alt+T Always on top. + Ctrl+0 Transparent mode. + Alt+F5 File change notification settings. + Ctrl+9 Display text excerpt in title. + F7 Save settings now. + Ctrl+F7 Jump to ini-file. + + Misc. + + Shift+F9 Copy pathname to clipboard. + Ctrl+Shift+K Copy window position to clipboard. + Ctrl+Shift+P Move window to default position. + Esc Optionally minimize or exit Notepad2. + Shift+Esc Save file and exit Notepad2. + F1 Display version info. + + +Regular Expression Syntax + + Note: the Scintilla source code editing component supports only a + basic subset of regular expression syntax, and searches are limited + to single lines. + + . Matches any character. + + (...) This marks a region for tagging a match. + + \n Where n is 1 through 9 refers to the first through ninth + tagged region when replacing. For example, if the search + string was Fred([1-9])XXX and the replace string was Sam\1YYY, + when applied to Fred2XXX this would generate Sam2YYY. + + \< This matches the start of a word. + + \> This matches the end of a word. + + \x This allows you to use a character x that would otherwise + have a special meaning. For example, \[ would be interpreted + as [ and not as the start of a character set. + + [...] This indicates a set of characters, for example, [abc] means + any of the characters a, b or c. You can also use ranges, for + example [a-z] for any lower case character. + + [^...] The complement of the characters in the set. For example, + [^A-Za-z] means any character except an alphabetic character. + + ^ This matches the start of a line (unless used inside a set, + see above). + + $ This matches the end of a line. + + ? This matches 0 or 1 times. For example, a?b matches ab and b. + + * This matches 0 or more times. For example, Sa*m matches Sm, + Sam, Saam, Saaam and so on. + + + This matches 1 or more times. For example, Sa+m matches Sam, + Saam, Saaam and so on. + + *? Causes * and + to behave non-greedy. For example, <.+> matches + +? all HTML tags on a line, whereas <.+?> matches only one tag. + + \d Any decimal digit. + \D Any character that is not a decimal digit. + + \s Any whitespace character. + \S Any character that is not a whitespace character. + + \w Any "word" character. + \W Any "non-word" character. + + \xHH Character with hex code HH. + + -----> Examples (don't use quotes) + - Quote lines: find "^" replace with "> " + - Unquote lines: find "^> " replace with "" + - Remove line numbers: find "^[0-9]+" replace with "" + - Convert tabs to double spaces: find "\t" replace with " " + - Remove NULL bytes: find "\x00" replace with "" + + +Command Line Switches + + Notepad2.exe [encoding] [line-ending-mode] [/e id] [/g ln[,col]] + [/m[-][r|b] text] [/l|/l0] [/q] [/s ext] [/d] [/h] [/x] + [/c] [/b] [/n|/ns] [/r|/rs] + [/p x,y,cx,cy[,max]|/p0|/ps|/p[f|l|t|r|b|m]] + [/t title] [/i] [/o|/o0] [/f ini|/f0] [/u] [/z ...] [/?] + [+|-] [file] ... + + file File to open, can be a relative pathname, or a shell link. + Must be the last argument, no quoted spaces by default. + + Accept multiple file arguments (with quoted spaces). + - Accept single file argument (without quoted spaces). + ... Desired file encoding (can be one of /ansi, /unicode, + /unicodebe, /utf8 or /utf8sig). + ... Desired line ending mode (either /crlf, /lf, or /cr). + /e Specify file source encoding. + /g Jump to specified position, /g -1 means end of file. + /m Match specified text (/m- last, /mr regex, /mb backslash). + /l Auto-reload modified files; /l0 disable change notification. + /q Force creation of new files without prompt. + /s Select syntax scheme associated with specified extension. + /d Select default text scheme. + /h Select Web Source Code scheme. + /x Select XML Document scheme. + /c Open a new Notepad2 window and paste the clipboard contents. + /b Open a new Notepad2 paste board to collect clipboard entries. + /n Always open a new Notepad2 window (/ns single file instance). + /r Reuse Notepad2 window (/rs single file instance). + /p Set window position to x,y with size cx,cy, optional max set + to nonzero to zoom; /p0 system, /ps internal defaults; + /p(f)ull,(l)eft,(t)op,(r)ight,(b)ottom,(m)argin. + /t Set window title. + /i Start as tray icon. + /o Keep window on top; /o0 do not keep window on top. + /f Specify ini-file; /f0 use no ini-file (don't save settings). + /u Launch with elevated privileges. + /v Print specified document to default printer and quit. + /z Skip next (usable for registry-based Notepad replacement). + /? Display a brief summary about command line parameters. + + + +Source Code + + Notepad2 is based on the Scintilla source code editing component: + https://www.scintilla.org + + The full Notepad2 source code can be found at: + https://www.flos-freeware.ch + + +More Information and Resources + + For more information on Notepad2 features, how to replace Windows + Notepad, and answers to the most frequently asked questions (FAQ), + please visit the Notepad2 website: + https://www.flos-freeware.ch + + +Feature Requests + + Thank you very much for the overwhelming feedback about Notepad2! + Feature requests are always welcome, but please keep in mind that + Notepad2 has been designed as a compact Notepad replacement. + + +Credits and Special Thanks + + Here I would like to say "THANK YOU" to the developers of the great + Scintilla source code editing component [1], which is the core of + Notepad2. Without Scintilla, the rich features found in Notepad2 + wouldn't have been possible! + + [1] https://www.scintilla.org + + Many thanks to everybody for sending me bug reports and useful hints. + A special thank goes to Roland Weigelt [2] for his helpful thoughts + and comments about Notepad2 features and usability in early develop- + ment stages. I'd also like to express my thanks to Timo Kunze [3], + Kai Liu [4], Moritz Kroll, Seunghun Thomas Lee [5] and Shawn + Brenneman for sending detailed bug reports and ready-to-use patches. + + [2] https://www.roland-weigelt.de + [3] https://www.TimoSoft-Software.de + [4] https://code.kliu.org/misc/notepad2 + [5] mailto:stlee42@gmail.com + + +Copyright + + Notepad2 is FREE SOFTWARE and may be used and distributed freely. + Please do not charge any distribution or download fees for this + program, except for the cost of the distribution medium. The use of + this software is AT YOUR OWN RISK. See License.txt for full details. + + If you have comments or questions, please drop me a note: + florian.balmer@gmail.com + + (c) Florian Balmer 2004-2011 + +### diff --git a/np3portableapp/Notepad3Portable/App/Notepad3/Docs/Readme.txt b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/Readme.txt new file mode 100644 index 0000000000..4b461ea95d --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/Readme.txt @@ -0,0 +1,178 @@ +================================================================================ += = += Notepad3 - light-weight Scintilla-based text editor for Windows = += = += (c) Rizonesoft 2008-2023 = += https://www.rizonesoft.com = += = +================================================================================ +Rizonesoft Notepad3 --- README --- +================================================================================ + +-------------------------------------------------------------------------------- +Description: +------------ +Notepad like text editor is based on the Scintilla source code. +Notepad3 is based on code from Notepad2 and MiniPath on code from metapath. + +-------------------------------------------------------------------------------- +Changes compared to Flo's official Notepad2 (made in Notepad2-mod): +------------------------------------------------------------------- +- Code folding +- Support for bookmarks +- Option to mark all occurrences of a word +- Updated Scintilla component +- Word auto-completion +- Syntax highlighting support for AutoHotkey (AHK), AutoIt3, AviSynth, Bash, + CMake, CoffeeScript, Inno Setup, LaTeX, Lua, Markdown, NSIS, Ruby, Tcl, + YAML and VHDL scripts. +- Improved support for NFO ANSI art +- Other various minor changes and tweaks + +-------------------------------------------------------------------------------- +Changes compared to the Notepad2-mod fork: +------------------------------------------ +- Additional syntax highlighting support for Awk, D, golang, MATLAB +- State of the art Regular Expression search engine (Oniguruma) +- New toolbar icons based on Yusuke Kamiyaman's Fugue Icons + (Purchased by Rizonesoft) +- Hyperlink Hotspot highlighting + (single click Open in Browser (Ctrl) / Load in Editor (Alt)) +- New program icon and other small cosmetic changes +- In-App support for AES-256 Rijndael encryption/decryption of files. + (incl. external commandline tool for batch processing) +- Virtual Space rectangular selection box (Alt-Key down) +- High-DPI awareness, including high definition toolbar icons +- Undo/Redo preserves selection +- File History preserves Caret position (optional) + and remembers encoding of file +- Accelerated word navigation +- Preserve caret position of items in file history +- Count occurrences of a marked selection or word +- Count and Mark occurrences of matching search/find expression +- Visual Studio style copy/paste current line (no selection) +- Insert GUIDs +- Dropped support for Windows XP version +- Other various minor changes, tweaks and bugfixes + +-------------------------------------------------------------------------------- +Supported Operating Systems: +---------------------------- +Windows 7, 8, 8.1 and 10 both 32-bit and 64-bit + +-------------------------------------------------------------------------------- +Development: +------------ +- Florian 'Flo' Balmer (Notepad2) https://www.flos-freeware.ch +- RaiKoHoff https://github.com/RaiKoHoff + +-------------------------------------------------------------------------------- +Contributors: +------------- +Derick Payne (© Rizonesoft) https://www.rizonesoft.com +XhmikosR (Notepad2-mod) https://xhmikosr.github.io/notepad2-mod +Kai Liu (CodeFolding) https://code.kliu.org/misc/notepad2 +RL Vision (Bookmarks) https://www.rlvision.com/notepad2/about.php +Aleksandar Lekov (MarkOcc./AutoCompl.) +Bruno Barbieri +Matthew Ellis (MinimizeToTray) +Igal Tabachnik (RelaunchElevated) https://github.com/hmemcpy +Et alii @ GitHub https://github.com/XhmikosR/notepad2-mod/graphs/contributors +Some Icons by Pixel perfect (Flaticon) https://www.flaticon.com + +-------------------------------------------------------------------------------- +Open Source / Libraries: +------------------------ +N.Hodgson (Scintilla) https://www.scintilla.org +K.Kosako (Oniguruma Regex) https://github.com/kkos/oniguruma +Stefan Küng (grepWin) https://github.com/stefankueng/grepWin +D.Dyer (NotepadCrypt) https://www.real-me.net/ddyer/notepad/NotepadCrypt.html +T.D.Hanson (uthash) https://troydhanson.github.io/uthash +Carbo Kuo (Mozilla's uchardet) https://www.freedesktop.org/wiki/Software/uchardet +Lewis Van Winkle (TinyExpr) https://github.com/codeplea/tinyexpr + +-------------------------------------------------------------------------------- +Acknowledgments: +---------------- +alex-ilin https://github.com/alex-ilin +alexantr https://github.com/alexantr +ashish12phnx https://github.com/ashish12phnx +bravo-hero https://github.com/bravo-hero +craigo- https://github.com/craigo- +Crane70 https://github.com/Crane70 +engelhro https://github.com/engelhro +geogeo-gr https://github.com/geogeo-gr +Hexaae https://github.com/Hexaae +hpwamr https://github.com/hpwamr +igorruckert https://github.com/igorruckert +jupester https://github.com/jupester +kayazeren https://github.com/kayazeren +kofifus https://github.com/kofifus +Lacn0755 https://github.com/Lacn0755 +leeoniya https://github.com/leeoniya +lhmouse https://github.com/lhmouse +Lidgeu https://github.com/Lidgeu +ltGuillaume https://github.com/ltGuillaume +maboroshin https://github.com/maboroshin +MadDogVachon https://github.com/MadDogVachon +Matteo-Nigro https://github.com/Matteo-Nigro +MelchiorGaspar https://github.com/MelchiorGaspar +Mitezuss https://github.com/Mitezuss +RaiKoHoff https://github.com/RaiKoHoff +rizonesoft https://github.com/rizonesoft +Rudolfin https://github.com/Rudolfin +Stephan-P https://github.com/Stephan-P +ThreeLightsBeyond https://github.com/ThreeLightsBeyond +VenusGirl https://github.com/VenusGirl +xsak https://github.com/xsak +zufuliu https://github.com/zufuliu + +-------------------------------------------------------------------------------- +Resources: +---------- +NotepadCrypt (Version Java) https://www.nayuki.io/page/notepadcrypt-format-decryptor-java +Data Sharing Service https://workupload.com + +-------------------------------------------------------------------------------- +Licences: +--------- +Scintilla https://www.scintilla.org/License.txt +Oniguruma Regex https://github.com/kkos/oniguruma/blob/master/COPYING +grepWin https://github.com/stefankueng/grepWin/blob/master/LICENSE +uthash https://troydhanson.github.io/uthash/license.html +uchardet https://www.freedesktop.org/wiki/Software/uchardet/#license +TinyExpr https://github.com/codeplea/tinyexpr/blob/master/LICENSE +Notepad3 icon by Vexels.com https://www.vexels.com + - designed by smanashova@gmail.com + +-------------------------------------------------------------------------------- +Notepad3 Licence: +----------------- +Notepad3 and MiniPath Copyright © 2008-2023 Rizonesoft, All rights reserved. +https://www.rizonesoft.com + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of Florian Balmer nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/np3portableapp/Notepad3Portable/App/Notepad3/Docs/crypto/encryption-doc.txt b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/crypto/encryption-doc.txt new file mode 100644 index 0000000000..e75b88d658 --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/crypto/encryption-doc.txt @@ -0,0 +1,119 @@ +Prototype enduser documentation + +If you open a file which was encrypted by this program, you'll be prompted +to supply a passphrase. This passphrase becomes the default to be used +when saving files. The passphrase is not the actual encryption key, but +is used to generate a 256 bit encryption key called the file key. + +Master Keys + +An Encrypted file can optionally contain a copy of its own file key, encrypted +with a master key, derived from a master passphrase. This allows anyone who knows +the master passphrase to decode any file encrypted with any file key which uses this +master key structure. As long as the file passphrase is not changed, the master key +can be propogated to new versions of the file without typing the master phrase +again. + +Why use a master key? + +#1) Data recovery. It is not generally a good idea to use the same +passphrase for all files, or to continue using the same passphrase forever. +The principle hazard is that if even one key is revealed, every encrypted file +you have ever created can also be read. Consequently, different keys should be used +for different files, and over time, those keys should change. Since the +keys change, they are subject to being lost or forgotton, resulting in +lost data - it's still there, but no one can decode it. If you use a master key, +and you have misplaced the file key, you can still recover your data. Since master +key is not routinely used to decrypt the file, and never needs to be shared with anyone, +is is much less likely to be compromised, so it is reasonable for a good master +key to be used for a very long time in a lot of different files. + +Recommendation: Use a master passphrase that will be very hard for anyone to guess +and very hard for you to forget. For example: + "My Favorite movie is Gone with the Wind" + "When it rains in New York, even Chicago is a better place to be" +Never tell anyone what it is or write it down. It's an EMERGENCY measure to prevent +catastrophic data loss, so treat it that way. Never use it to read or open any encrypted +file except for testing, or if you have really lost the file passphrase. + + +#2) Trapdoor access. Sometimes it is desirable to allow a second party +to decode the file without knowing the encryption passphrase - a good example +is where an automated program is intended to read an encrypted file that is +prepared by a human. The program has to have the passphrase or the key embedded +in it somewhere. It's possible for a dedicated attacker to find it, but it's +much more likely that the source of compromise will be clumsy humans. Allowing +the program to use the master key and humans to use the ordinary file keys will +allow the routine-use keys to be changed as often as necesary, while still +letting the program read the files without being told the new key. + +Technical Details: + +Passphrase Management: +256 bit encryption keys are geneated from ascii passphrases by +passing the passphrase through a SHA256 hash. Passphrases are never +Stored anywhere except in the dynamic memory of the encrypting program. + +Key management over file generations: If the file is opened +using a file passphrase, the passphrase is retained and used +as the default for the passphrase dialog. + +If the file is opened using a master passphrase, the recovered +file key is used as the default encryption for new files. This +allows an editor who does not know the file passphrase to propogate +a file key he could not create. + +If the file contains a master key, and neither the file or master +passphrase is changed, then the retained, master-encrypted file +key is copied into the next file generation. (It is still valid). +This allows an editor who knows only the file passphrase to propogate +a master key he could not create. + +Encrypted files start with an 8 byte preable, the first 4 bytes are +a "magic number" to identify the file type (currently 0x04030201) +and a 4 byte subfile type, (currently either 0x00000001 or 0x00000002) + +The next 16 bytes are the initialization vector for the AES engine, +to be used with the file key. Each file gets a unique 16 bytes of +pseudorandom noise. + +Next, for master keyed files, is a 16 byte IV for the master key, +followed by a 32 byte block containing the file key, encrypted +with the master key, using the master key IV and CBC block chaining. + +Next, is the actual file data, encrypted using the file key and the IV, +and CBC block chaining. + +Finally, are 1-16 bytes of padding to round out the AES block. Note that +there are never 0 bytes of padding. + + + +A Word about pass phrases and overall security. + +While this encryption scheme uses high quality AES encryption and quite long 256 bit keys, +that is almost irrelevant to the overall security of the system. It's like having a very +expensive lock on your front door. Thieves won't go to great lengths to pick your lock; they +will simply break a window instead. The weak link in this encryption scheme is YOU and your +selection of pass phrases. If your encrypted files are compromised, the most likely, by far, +method is the simplest; (1) they ask, you tell. or (2) they find the scrap of paper where you +wrote the passphrase or (3) some key logger watches you type the passphrase. The only +other likely method is a dictionary-type attack using a program to try lots of possible +passphrases. Any short, word-like passphrase CAN be compromised using a few days of computer +time. + +Finally, consider the suitablility of this encryption scheme for your purpose. + + If your goal is to prevent your wife from reading your girlfriend's phone number + in your address book: definitely. + + If your goal is to prevent disclosure of sensitive data if your laptop is stolen: + most likely. + + If your goal is to prevent fishing by the IRS, should they ever become curious about you: + don't count on it. They'll throw you in jail until you tell them the password, or install a + key logger and wait for you to tell them voluntarily. + + If your goal is to keep secrets people who are definitely out to get you, and are willing + to shove bamboo splints under you fingernails until you talk: don't even think about it. + \ No newline at end of file diff --git a/np3portableapp/Notepad3Portable/App/Notepad3/Docs/crypto/read_me.txt b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/crypto/read_me.txt new file mode 100644 index 0000000000..612c5f2bf7 --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/crypto/read_me.txt @@ -0,0 +1,35 @@ +NotepadCrypt +sources and some technical notes + +NotepadCrypt is a simple text editor which can optionally encrypt the text files it edits. NotepadCrypt was designed to fill a requirement to encrypt configuration files which had to be edited by humans but read by programs, without the hazard that would obviously exist if editing required the human editor to make a temporary unencrypted file. I needed an editor which could read and write an encrypted file, for which the encrypted format was documented and assessable to C and Perl programs. To my surprise, none existed. + +NotepadCrypt was constructed using open source software, including a low level implementation of AES encryption and Sha256 hashing; and Notepad2 a really nice open source replacement for Notepad. None of this software had to be changed in any substantial way, but the file format and key management had to be designed and implemented to stitch it all together. The requirement that a program be able to read the encrypted file led to a design which included a master key, which I think is extremely useful to anyone using NotepadCrypt to encrypt their own confidential files. + +Source code: + + Sha256 hashing implementation (used to convert passphrases to encryption keys) based on an implementation by Christoper Devine. This file is available from many sources on the web. + AES encryption, for which there are many open source implementations. + Notepad2 editor, which also requires the Scintilla editing widget. + NotepadCrypt version 4.2.25 Full Sources: This zip includes the as-modified source code for all of the above, VC.net projects for NotepadCrypt and a simple command line tool which uses the same file format. There are a couple of "extras" - a test program that uses tcsh and a java program that can read NotepadCrypt's file format. Unless you are a programmer, you're probably better off getting the binary only distribution for NotepadCrypt and NotepadCryptCL + +Technical Details For NotepadCrypt + +Overall Design: Sha256 hash is used to convert an ascii pass phrase to a 256 bit encryption key. Pseudorandom data is used as an initialization vector for AES-256 encryption. Optionally, a the encryption key (NOT the passphrase) is encrypted using a second master key, and included in the file header. This master key can be used as an emergency data recovery key, or as a second key to be used by programs to read encrypted files. + +Overall File Format: Consists of a preamble, the encrypted data, and some padding at the end. + +Encrypted files start with an 8 byte preamble, the first 4 bytes are a "magic number" to identify the file type (currently 0x04030201) and a 4 byte sub-file type, (currently either 0x00000001 or 0x00000002 if the file has a master key). + +The next 16 bytes of the preamble are the initialization vector for the AES engine, to be used with the file key. Each file gets a unique 16 bytes of pseudo random noise. + +Next, for master keyed files, is a 16 byte IV for the master key, followed by a 32 byte block containing the file key, encrypted with the master key, using the master key IV and CBC block chaining. + +Next, is the actual file data, encrypted using the file key and the IV, and CBC block chaining. + +Finally, are 1-16 bytes of padding to round out the last AES block. Note that there are never 0 bytes of padding. + +Passphrase Management: 256 bit encryption keys are generated from the ascii passphrase by passing the passphrase through a SHA256 hash. The passphrase itself is never stored anywhere except in the dynamic memory of the encrypting program. + +Key management over file generations: If the file is opened using a file passphrase, the passphrase is retained and used as the default for the passphrase dialog. If the file is opened using a master passphrase, the recovered file key is used as the default encryption for new files. This allows an editor who does not know the file passphrase to propogate a file key he could not create. If the file contains a master key, and neither the file or master passphrase is changed, then the retained, master-encrypted file key is copied into the next file generation (It is still valid). This allows an editor who knows only the file passphrase to propogate a master key he could not create. + + diff --git a/np3portableapp/Notepad3Portable/App/Notepad3/Docs/uthash/ChangeLog.txt b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/uthash/ChangeLog.txt new file mode 100644 index 0000000000..281de80fe4 --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/uthash/ChangeLog.txt @@ -0,0 +1,267 @@ +uthash ChangeLog +================ + +Click to return to the link:index.html[uthash home page]. + +NOTE: This ChangeLog may be incomplete and/or incorrect. See the git commit log. + +Version 2.1.0 (2018-12-20) +-------------------------- +* silence some Clang static analysis warnings +* add LL_INSERT_INORDER and LL_LOWER_BOUND etc (thanks, Jeffrey Lovitz and Mattias Eriksson!) +* add uthash_bzero for platforms without +* fix a missing HASH_BLOOM_ADD in HASH_SELECT (thanks, Pawel Veselov!) +* permit malloc failure to be recoverable via HASH_NONFATAL_OOM (thanks, Pawel Veselov!) +* avoid repeated calls to uthash_strlen in HASH_FIND_STR +* rename uthash_memcmp to HASH_KEYCMP, leaving the old name for compatibility +* add utstack.h +* remove libut + +Version 2.0.2 (2017-03-02) +-------------------------- +* fix segfault in HASH_ADD_INORDER etc (thanks, Yana Kireyonok!) +* remove spurious cast to unsigned in utstring_len (thanks, Michal Sestrienka!) +* add uthash_memcmp and uthash_strlen for platforms without (thanks, Pawel Veselov!) +* fix a C++ incompatibility in utringbuffer + +Version 2.0.1 (2016-07-05) +-------------------------- +* in-order insertion macros HASH_ADD_INORDER etc (thanks, Thilo Schulz!) +* by-hashvalue insertion macros HASH_ADD_BYHASHVALUE etc +* during key comparison, check hashvalue before doing a full memcmp +* add utringbuffer.h + +Version 1.9.9.1 (2014-11-18) +---------------------------- +* inclusion of experimental libut bundle with utvector in opt/ +* use shift in Bernstein hash instead of multiply (thanks, Jimmy Zhuo!) +* switch ssize_t types in utarray/utstring to size_t (thanks, Hong Xu!) +* fix utstring pointer math on >4GB strings (thanks, Thomas Bottesch!) +* change FNV hash to FNV-1a varation (thanks, dwest1975!) +* fix bug in HASH_REPLACE_STR (thanks, Ilya Kaliman!) + +Version 1.9.9 (2014-02-25) +-------------------------- +* made HASH_ADD_STR compatible with char* or char[] (thanks, Samuel Thibault!) +* fixed header inclusion of sys/types.h for ssize_t (thanks, Fernando Campos!) +* added LL_COUNT/DL_COUNT/CDL_COUNT (thansk, Paul Praet!) +* added LRU cache example in `tests/lru_cache` (thanks, Oliver Lorenz!) +* fix LL_DELETE2 for VS2008 (thanks, Greg Davydouski!) +* fix missing argument in `HASH_REPLACE_STR` (thanks, Alex!) +* bump version number in source files to match docs (thanks, John Crow!) +* add `HASH_OVERHEAD` macro to get overhead size for hash table + +Version 1.9.8 (2013-03-10) +-------------------------- +* `HASH_REPLACE` now in uthash (thanks, Nick Vatamaniuc!) +* fixed clang warnings (thanks wynnw!) +* fixed `utarray_insert` when inserting past array end (thanks Rob Willett!) +* you can now find http://troydhanson.github.com/uthash/[uthash on GitHub] +* there's a https://groups.google.com/d/forum/uthash[uthash Google Group] +* uthash has been downloaded 29,000+ times since 2006 on SourceForge + +Version 1.9.7 (2012-10-09) +-------------------------- +* utstring now supports substring search using `utstring_find` (thanks, Joe Wei!) +* utlist now supports element 'prepend' and 'replace' (thanks, Zoltán Lajos Kis!) +* utlist element prev/next fields can now have any names (thanks, Pawel S. Veselov!) +* uthash cast quiets a clang warning (thanks, Roman Divacky and Baptiste Daroussin!) +* uthash userguide example shows how to check key uniqueness (thanks, Richard Cook!) +* uthash HASH_MUR compiles under MSVC++ 10 in C mode (thanks, Arun Kirthi Cherian!) +* `utstring_printf` now supports format checking (thanks, Donald Carr!) + +Version 1.9.6 (2012-04-28) +-------------------------- +* add utarray_prev (thanks, Ben Hiett!) +* add parens/casts for greater compatibility (thanks, Atis, Debasis Ganguly, and Steve McClellan!) +* added ifndef to uthash_malloc and related hooks (thanks, Holger Machens!) +* edit examples so they do not leak memory (thanks, 任晶磊!) + +Version 1.9.5 (2011-11-16) +-------------------------- +* added `utarray_renew` +* fixed memory leak in `uthash_clear` when using Bloom filter (thanks, Jan Hättig!) +* utarray now copies the UT_icd on array creation rather than storing a pointer +* add parentheses to `HASH_ADD` to fix preprocessing of certain arguments (thanks, Aaron Rosen!) +* more parenthesizations for greater macro argument flexibility + +Version 1.9.4 (2011-06-05) +-------------------------- +* uthash now supports MurmurHash v3 +* utlist now includes concatenation macros (`LL_CONCAT` and `DL_CONCAT`) +* utarray now supports binary search (`utarray_find`) +* utstring now supports a new-or-clear-existing macro (`utstring_renew`) +* documented technique for a multi-level hash table +* clarified scope requirements for `UT_icd` in the utarray documentation +* fixed termination when `utstring_clear` is followed by `utstring_body` +* fixed utarray_inserta macro when used with complex arguments +* on Visual Studio define missing type `uint8_t` +* Debian/Ubuntu include uthash in the package `uthash-dev`. +* uthash has been downloaded 16,211 times. + +Thanks to Yu Feng, Richard Cook, Dino Ciuffetti, Chris Groer, and Arun Cherian +for feedback and fixes in this release! + +Version 1.9.3 (2010-10-31) +-------------------------- +* fix an `ifdef` for compatibility with Intel compiler (thanks, degski!) +* fix `HASH_ITER` macro to satisfy C++ casting rules (thanks, Erik Bai!) + +Version 1.9.2 (2010-10-04) +-------------------------- +* new `HASH_ITER` macro for more convenient deletion-safe iteration +* `hashscan` can now run on FreeBSD 8.1 and later (thanks, Markus Gebert!) +* More parens to evaluate complex macro arguments properly (thanks, ngg!) +* Add sz parameter to the `uthash_free` hook for platforms that do their own memory management. Hopefully this minor API change doesn't cause too much breakage for people. (thanks, Niall Douglas!) +* uthash has been downloaded 12,294 times + +Version 1.9.1 (2010-05-15) +-------------------------- +* Fix a redefinition warning when using `uthash.h` and `utstring.h` together +* Fix a bug in `utstring_init` +* Added `HASH_FIND_PTR` and `HASH_ADD_PTR` (thanks, Niall Douglas!) + +Version 1.9 (2010-03-31) +-------------------------- +* uthash now supports Visual Studio 2008 and 2010 in C or C++ code! +* new headers link:utarray.html[utarray.h] and link:utstring.html[utstring.h] + are now included. These implement dynamic arrays and strings using macros +* link:utlist.html[utlist.h] now has deletion-safe iterators and search macros +* the test suite now runs under Visual Studio (thanks again degski!) +* special thanks for suggesting utarray and utlist features to Charalampos P.! +* uthash has been downloaded 9,616 times + +Version 1.8 (2009-09-08) +-------------------------- +* Added the `hashscan` utility that can report on the size and quality of + hash tables in a running process (Linux-only) +* Added Bloom filter support. This has the potential to speed up certain + types of programs that look up non-existant keys in sufficient numbers. +* Restored the MurmurHash, which can once again be used, if an additional + symbol is defined. This is a "safety" by which the user declares they + understand that `-fno-strict-aliasing` flag must be used if they are + using MurmurHash under gcc with optimization. +* Unified the bucket/table malloc hooks; now there is only one malloc hook +* Re-organized the manual into a main section and advanced topics section +* Fixed a bug in `utlist.h` where sorting a singly-linked list threw a + compile-time error. +* Fixed a bug in `utlist.h` where a doubly-linked list that is sorted + did not maintain the special `head->prev` pointer back to the list tail. + +Version 1.7 (2009-06-11) +-------------------------- +* The MurmurHash has been removed, and Jenkin's hash is once again the default. + While MurmurHash performed well, it's unsafe with regard to the strict + aliasing rule. This results in incorrect code when compiled with optimization. + It's not possible to enable `-fno-strict-aliasing` from within a header file. +* The linked list macros in `utlist.h` now comply with the strict-aliasing + rule so they generate correct code under high optimization levels (O2 or O3). + The use of the `__typeof__` extension, which was originally a GNU extension, + may reduce portability to other compilers that do not support this extension. + This extension is used in the singly-linked list macros and the sort macros. + +Version 1.6 (2009-05-08) +-------------------------- +Special thanks to Alfred Heisner for contributing several enhancements: + +* Support for two new hash functions: + - the Paul Hsieh hash function (`HASH_SFH`) + - Austin Appleby's MurmurHash function (`HASH_MUR`) +* Because of its excellent performance, MurmurHash is now the default hash function. +* `keystats` now has much better elapsed time accuracy under Cygwin and MinGW +* fixed casting in `HASH_FNV`, `HASH_SAX` and `HASH_OAT` for non-char keys + +This release also includes: + +* a new `HASH_CLEAR` operation clears a hash table in one step. +* a new `HASH_SELECT` operation inserts those elements from one hash that + satisfy a given condition into another hash. The selected items have + dual presence in both hash tables. For example a game could select the + visible polygons from a hash of all polygons. +* fixed a compile-time error which occurred if the final argument to + `HASH_ADD_KEYPTR` was a pointer to an array member like `&a[i]` +* added another test script `tests/all_funcs` which executes the test suite + using every supported hash function + +And lastly, + +* a new, separate header called link:utlist.html[utlist.h] is included which + provides 'linked list macros' for C structures, similar in style to the + uthash macros + +Version 1.5 (2009-02-19) +-------------------------- +* now thread-safe for concurrent readers +* use scratch variables on stack rather than in table (thanks, Petter Arvidsson!). + This change made HASH_FIND about 13% faster and enabled reader concurrency. +* made link:license.html[BSD license] terms even more permissive +* added link:userguide.pdf[PDF version] of User Guide +* added http://troydhanson.wordpress.com/feed/[update news] image:rss.png[(RSS)] + +Version 1.4 (2008-09-23) +-------------------------- +* Add `HASH_COUNT` for counting items in the hash +* Compatibility with C\+\+. Satisfy additional casting requirements. + Also in the `tests/` directory, running `make cplusplus` now compiles + all the test programs with the C++ compiler. +* Eliminate `elmt` pointer from the UT_hash_handle. Calculate elmt + from hash handle address by subtracting `hho` (hash handle offset). +* Contributed by L.S.Chin: + Cast `void*` to char* before pointer arithmetic to suppress compiler + warnings. We assume compilers abide to C standards which impose + requirement that `sizeof(void*) == sizeof(char*)`. +* Return meaningful exit status from do_tests per Tiago Cunha, + so that package manager-based install can verify tests are successful + + +Version 1.3 (2008-07-27) +------------------------ +* use integer-only math-- no floating point! Support FPU-less CPU's. +* eliminate `hash_q` metric, which measured the fraction of items with + non-ideal chain positions. We only need to know if this fraction + is below 0.5. This is now determined using fast bitwise tests. +* when an item is added to the hash, calculate the key's hash value + upfront and store it, instead of recomputing it as needed. This hashv + is stored in the hash handle. Potentially major speed benefit for + bucket expansion algorithm. Deleting is marginally improved too. +* fixed a minor bug in the calculation of the max ideal chain length; + line 446 in v1.2 erroneously calculated a/b*2 instead of a/(b*2). + The effect of this bug was that bucket expansion could occur more + readily because the per-bucket 'max chain length multiplier factor' + (which delays bucket expansion when certain buckets are overused) + was set to a lower, expansion-favoring value than intended. +* improved source commenting and improved variable names in structures +* remove `HASH_JSW`. Lengthy random number array made code less readable +* add `HASH_SRT(hh,hash,cmp)` as a generalized `HASH_SORT(hash,cmp)`. + It was an omission in uthash 1.2 that there was no sort macro for + hash handles with names other than hh. +* Corrected `HASH_FSCK` so it works with any name for the hash handle. +* behave properly in pathological `HASH_DEL(a,a)` case where the same + variable references the head and the deletee (advancing the head + then loses the correct reference to the deletee); fix by using + scratch area in the hash table to store deletee hash handle. +* made tests runnable on MinGW +* 3000+ downloads since uthash-1.0 + + +Version 1.2 (2006-11-22) +------------------------ +* new `HASH_SORT` macro +* Cygwin support +* User Guide now features a clickable Table of Contents. + (The technique for generating the TOC on the browser was contributed + back to the AsciiDoc project and incorporated into AsciiDoc v8.1.0). + + +Version 1.1 (2006-06-28) +------------------------ +* uthash-1.1 released +* supports several built-in user-selectable hash functions +* new keystats utility quantifies performance of hash functions + + +Version 1.0 (2006-06-02) +------------------------ +* Initial release + +// vim: set syntax=asciidoc: diff --git a/np3portableapp/Notepad3Portable/App/Notepad3/Docs/uthash/License.txt b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/uthash/License.txt new file mode 100644 index 0000000000..fec1494e1a --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/uthash/License.txt @@ -0,0 +1,21 @@ +Copyright (c) 2005-2018, Troy D. Hanson https://troydhanson.github.com/uthash/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/np3portableapp/Notepad3Portable/App/Notepad3/Docs/uthash/userguide.txt b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/uthash/userguide.txt new file mode 100644 index 0000000000..4d8ce8f0a9 --- /dev/null +++ b/np3portableapp/Notepad3Portable/App/Notepad3/Docs/uthash/userguide.txt @@ -0,0 +1,1901 @@ +uthash User Guide +================= +Troy D. Hanson, Arthur O'Dwyer +v2.1.0, December 2018 + +To download uthash, follow this link back to the +https://github.com/troydhanson/uthash[GitHub project page]. +Back to my http://troydhanson.github.io/[other projects]. + +A hash in C +----------- +This document is written for C programmers. Since you're reading this, chances +are that you know a hash is used for looking up items using a key. In scripting +languages, hashes or "dictionaries" are used all the time. In C, hashes don't +exist in the language itself. This software provides a hash table for C +structures. + +What can it do? +~~~~~~~~~~~~~~~~~ +This software supports these operations on items in a hash table: + +1. add/replace +2. find +3. delete +4. count +5. iterate +6. sort + +Is it fast? +~~~~~~~~~~~ +Add, find and delete are normally constant-time operations. This is influenced +by your key domain and the hash function. + +This hash aims to be minimalistic and efficient. It's around 1000 lines of C. +It inlines automatically because it's implemented as macros. It's fast as long +as the hash function is suited to your keys. You can use the default hash +function, or easily compare performance and choose from among several other +<>. + +Is it a library? +~~~~~~~~~~~~~~~~ +No, it's just a single header file: `uthash.h`. All you need to do is copy +the header file into your project, and: + + #include "uthash.h" + +Since uthash is a header file only, there is no library code to link against. + +C/C++ and platforms +~~~~~~~~~~~~~~~~~~~ +This software can be used in C and C++ programs. It has been tested on: + + * Linux + * Windows using Visual Studio 2008 and 2010 + * Solaris + * OpenBSD + * FreeBSD + * Android + +Test suite +^^^^^^^^^^ +To run the test suite, enter the `tests` directory. Then, + + * on Unix platforms, run `make` + * on Windows, run the "do_tests_win32.cmd" batch file. (You may edit the + batch file if your Visual Studio is installed in a non-standard location). + +BSD licensed +~~~~~~~~~~~~ +This software is made available under the +link:license.html[revised BSD license]. +It is free and open source. + +Download uthash +~~~~~~~~~~~~~~~ +Follow the links on https://github.com/troydhanson/uthash to clone uthash or get a zip file. + +Getting help +~~~~~~~~~~~~ +Please use the https://groups.google.com/d/forum/uthash[uthash Google Group] to +ask questions. You can email it at uthash@googlegroups.com. + +Contributing +~~~~~~~~~~~~ +You may submit pull requests through GitHub. However, the maintainers of uthash +value keeping it unchanged, rather than adding bells and whistles. + +Extras included +~~~~~~~~~~~~~~~ +Three "extras" come with uthash. These provide lists, dynamic arrays and +strings: + + * link:utlist.html[utlist.h] provides linked list macros for C structures. + * link:utarray.html[utarray.h] implements dynamic arrays using macros. + * link:utstring.html[utstring.h] implements a basic dynamic string. + +History +~~~~~~~ +I wrote uthash in 2004-2006 for my own purposes. Originally it was hosted on +SourceForge. Uthash was downloaded around 30,000 times between 2006-2013 then +transitioned to GitHub. It's been incorporated into commercial software, +academic research, and into other open-source software. It has also been added +to the native package repositories for a number of Unix-y distros. + +When uthash was written, there were fewer options for doing generic hash tables +in C than exist today. There are faster hash tables, more memory-efficient hash +tables, with very different API's today. But, like driving a minivan, uthash is +convenient, and gets the job done for many purposes. + +As of July 2016, uthash is maintained by Arthur O'Dwyer. + +Your structure +-------------- + +In uthash, a hash table is comprised of structures. Each structure represents a +key-value association. One or more of the structure fields constitute the key. +The structure pointer itself is the value. + +.Defining a structure that can be hashed +---------------------------------------------------------------------- +#include "uthash.h" + +struct my_struct { + int id; /* key */ + char name[10]; + UT_hash_handle hh; /* makes this structure hashable */ +}; +---------------------------------------------------------------------- + +Note that, in uthash, your structure will never be moved or copied into another +location when you add it into a hash table. This means that you can keep other +data structures that safely point to your structure-- regardless of whether you +add or delete it from a hash table during your program's lifetime. + +The key +~~~~~~~ +There are no restrictions on the data type or name of the key field. The key +can also comprise multiple contiguous fields, having any names and data types. + +.Any data type... really? +***************************************************************************** +Yes, your key and structure can have any data type. Unlike function calls with +fixed prototypes, uthash consists of macros-- whose arguments are untyped-- and +thus able to work with any type of structure or key. +***************************************************************************** + +Unique keys +^^^^^^^^^^^ +As with any hash, every item must have a unique key. Your application must +enforce key uniqueness. Before you add an item to the hash table, you must +first know (if in doubt, check!) that the key is not already in use. You +can check whether a key already exists in the hash table using `HASH_FIND`. + +The hash handle +~~~~~~~~~~~~~~~ +The `UT_hash_handle` field must be present in your structure. It is used for +the internal bookkeeping that makes the hash work. It does not require +initialization. It can be named anything, but you can simplify matters by +naming it `hh`. This allows you to use the easier "convenience" macros to add, +find and delete items. + +A word about memory +~~~~~~~~~~~~~~~~~~~ + +Overhead +^^^^^^^^ +The hash handle consumes about 32 bytes per item on a 32-bit system, or 56 bytes +per item on a 64-bit system. The other overhead costs-- the buckets and the +table-- are negligible in comparison. You can use `HASH_OVERHEAD` to get the +overhead size, in bytes, for a hash table. See <>. + +How clean up occurs +^^^^^^^^^^^^^^^^^^^ +Some have asked how uthash cleans up its internal memory. The answer is simple: +'when you delete the final item' from a hash table, uthash releases all the +internal memory associated with that hash table, and sets its pointer to NULL. + + +Hash operations +--------------- + +This section introduces the uthash macros by example. For a more succinct +listing, see <>. + +.Convenience vs. general macros: +***************************************************************************** +The uthash macros fall into two categories. The 'convenience' macros can be used +with integer, pointer or string keys (and require that you chose the conventional +name `hh` for the `UT_hash_handle` field). The convenience macros take fewer +arguments than the general macros, making their usage a bit simpler for these +common types of keys. + +The 'general' macros can be used for any types of keys, or for multi-field keys, +or when the `UT_hash_handle` has been named something other than `hh`. These +macros take more arguments and offer greater flexibility in return. But if the +convenience macros suit your needs, use them-- your code will be more readable. +***************************************************************************** + +Declare the hash +~~~~~~~~~~~~~~~~ +Your hash must be declared as a `NULL`-initialized pointer to your structure. + + struct my_struct *users = NULL; /* important! initialize to NULL */ + +Add item +~~~~~~~~ +Allocate and initialize your structure as you see fit. The only aspect +of this that matters to uthash is that your key must be initialized to +a unique value. Then call `HASH_ADD`. (Here we use the convenience macro +`HASH_ADD_INT`, which offers simplified usage for keys of type `int`). + +.Add an item to a hash +---------------------------------------------------------------------- +void add_user(int user_id, char *name) { + struct my_struct *s; + + s = malloc(sizeof(struct my_struct)); + s->id = user_id; + strcpy(s->name, name); + HASH_ADD_INT( users, id, s ); /* id: name of key field */ +} +---------------------------------------------------------------------- + +The first parameter to `HASH_ADD_INT` is the hash table, and the +second parameter is the 'name' of the key field. Here, this is `id`. The +last parameter is a pointer to the structure being added. + +[[validc]] +.Wait.. the field name is a parameter? +******************************************************************************* +If you find it strange that `id`, which is the 'name of a field' in the +structure, can be passed as a parameter... welcome to the world of macros. Don't +worry; the C preprocessor expands this to valid C code. +******************************************************************************* + +Key must not be modified while in-use +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Once a structure has been added to the hash, do not change the value of its key. +Instead, delete the item from the hash, change the key, and then re-add it. + +Checking uniqueness +^^^^^^^^^^^^^^^^^^^ +In the example above, we didn't check to see if `user_id` was already a key +of some existing item in the hash. *If there's any chance that duplicate keys +could be generated by your program, you must explicitly check the uniqueness* +before adding the key to the hash. If the key is already in the hash, you can +simply modify the existing structure in the hash rather than adding the item. +'It is an error to add two items with the same key to the hash table'. + +Let's rewrite the `add_user` function to check whether the id is in the hash. +Only if the id is not present in the hash, do we create the item and add it. +Otherwise we just modify the structure that already exists. + + void add_user(int user_id, char *name) { + struct my_struct *s; + + HASH_FIND_INT(users, &user_id, s); /* id already in the hash? */ + if (s==NULL) { + s = (struct my_struct *)malloc(sizeof *s); + s->id = user_id; + HASH_ADD_INT( users, id, s ); /* id: name of key field */ + } + strcpy(s->name, name); + } + + +Why doesn't uthash check key uniqueness for you? It saves the cost of a hash +lookup for those programs which don't need it- for example, programs whose keys +are generated by an incrementing, non-repeating counter. + +However, if replacement is a common operation, it is possible to use the +`HASH_REPLACE` macro. This macro, before adding the item, will try to find an +item with the same key and delete it first. It also returns a pointer to the +replaced item, so the user has a chance to de-allocate its memory. + +Passing the hash pointer into functions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +In the example above `users` is a global variable, but what if the caller wanted +to pass the hash pointer 'into' the `add_user` function? At first glance it would +appear that you could simply pass `users` as an argument, but that won't work +right. + + /* bad */ + void add_user(struct my_struct *users, int user_id, char *name) { + ... + HASH_ADD_INT( users, id, s ); + } + +You really need to pass 'a pointer' to the hash pointer: + + /* good */ + void add_user(struct my_struct **users, int user_id, char *name) { ... + ... + HASH_ADD_INT( *users, id, s ); + } + +Note that we dereferenced the pointer in the `HASH_ADD` also. + +The reason it's necessary to deal with a pointer to the hash pointer is simple: +the hash macros modify it (in other words, they modify the 'pointer itself' not +just what it points to). + + +Replace item +~~~~~~~~~~~~ +`HASH_REPLACE` macros are equivalent to HASH_ADD macros except they attempt +to find and delete the item first. If it finds and deletes an item, it will +also return that items pointer as an output parameter. + + +Find item +~~~~~~~~~ +To look up a structure in a hash, you need its key. Then call `HASH_FIND`. +(Here we use the convenience macro `HASH_FIND_INT` for keys of type `int`). + +.Find a structure using its key +---------------------------------------------------------------------- +struct my_struct *find_user(int user_id) { + struct my_struct *s; + + HASH_FIND_INT( users, &user_id, s ); /* s: output pointer */ + return s; +} +---------------------------------------------------------------------- + +Here, the hash table is `users`, and `&user_id` points to the key (an integer +in this case). Last, `s` is the 'output' variable of `HASH_FIND_INT`. The +final result is that `s` points to the structure with the given key, or +is `NULL` if the key wasn't found in the hash. + +[NOTE] +The middle argument is a 'pointer' to the key. You can't pass a literal key +value to `HASH_FIND`. Instead assign the literal value to a variable, and pass +a pointer to the variable. + + +Delete item +~~~~~~~~~~~ +To delete a structure from a hash, you must have a pointer to it. (If you only +have the key, first do a `HASH_FIND` to get the structure pointer). + +.Delete an item from a hash +---------------------------------------------------------------------- +void delete_user(struct my_struct *user) { + HASH_DEL(users, user); /* user: pointer to deletee */ + free(user); /* optional; it's up to you! */ +} +---------------------------------------------------------------------- + +Here again, `users` is the hash table, and `user` is a pointer to the +structure we want to remove from the hash. + +uthash never frees your structure +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Deleting a structure just removes it from the hash table-- it doesn't `free` +it. The choice of when to free your structure is entirely up to you; uthash +will never free your structure. For example when using `HASH_REPLACE` macros, +a replaced output argument is returned back, in order to make it possible for +the user to de-allocate it. + +Delete can change the pointer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +The hash table pointer (which initially points to the first item added to the +hash) can change in response to `HASH_DEL` (i.e. if you delete the first item +in the hash table). + +Iterative deletion +^^^^^^^^^^^^^^^^^^ +The `HASH_ITER` macro is a deletion-safe iteration construct which expands +to a simple 'for' loop. + +.Delete all items from a hash +---------------------------------------------------------------------- +void delete_all() { + struct my_struct *current_user, *tmp; + + HASH_ITER(hh, users, current_user, tmp) { + HASH_DEL(users,current_user); /* delete; users advances to next */ + free(current_user); /* optional- if you want to free */ + } +} +---------------------------------------------------------------------- + +All-at-once deletion +^^^^^^^^^^^^^^^^^^^^ +If you only want to delete all the items, but not free them or do any +per-element clean up, you can do this more efficiently in a single operation: + + HASH_CLEAR(hh,users); + +Afterward, the list head (here, `users`) will be set to `NULL`. + +Count items +~~~~~~~~~~~ + +The number of items in the hash table can be obtained using `HASH_COUNT`: + +.Count of items in the hash table +---------------------------------------------------------------------- +unsigned int num_users; +num_users = HASH_COUNT(users); +printf("there are %u users\n", num_users); +---------------------------------------------------------------------- + +Incidentally, this works even the list (`users`, here) is `NULL`, in +which case the count is 0. + +Iterating and sorting +~~~~~~~~~~~~~~~~~~~~~ + +You can loop over the items in the hash by starting from the beginning and +following the `hh.next` pointer. + +.Iterating over all the items in a hash +---------------------------------------------------------------------- +void print_users() { + struct my_struct *s; + + for(s=users; s != NULL; s=s->hh.next) { + printf("user id %d: name %s\n", s->id, s->name); + } +} +---------------------------------------------------------------------- + +There is also an `hh.prev` pointer you could use to iterate backwards through +the hash, starting from any known item. + +[[deletesafe]] +Deletion-safe iteration +^^^^^^^^^^^^^^^^^^^^^^^ +In the example above, it would not be safe to delete and free `s` in the body +of the 'for' loop, (because `s` is derefenced each time the loop iterates). +This is easy to rewrite correctly (by copying the `s->hh.next` pointer to a +temporary variable 'before' freeing `s`), but it comes up often enough that a +deletion-safe iteration macro, `HASH_ITER`, is included. It expands to a +`for`-loop header. Here is how it could be used to rewrite the last example: + + struct my_struct *s, *tmp; + + HASH_ITER(hh, users, s, tmp) { + printf("user id %d: name %s\n", s->id, s->name); + /* ... it is safe to delete and free s here */ + } + +.A hash is also a doubly-linked list. +******************************************************************************* +Iterating backward and forward through the items in the hash is possible +because of the `hh.prev` and `hh.next` fields. All the items in the hash can +be reached by repeatedly following these pointers, thus the hash is also a +doubly-linked list. +******************************************************************************* + +If you're using uthash in a C++ program, you need an extra cast on the `for` +iterator, e.g., `s=(struct my_struct*)s->hh.next`. + +Sorting +^^^^^^^ +The items in the hash are visited in "insertion order" when you follow the +`hh.next` pointer. You can sort the items into a new order using `HASH_SORT`. + + HASH_SORT( users, name_sort ); + +The second argument is a pointer to a comparison function. It must accept two +pointer arguments (the items to compare), and must return an `int` which is +less than zero, zero, or greater than zero, if the first item sorts before, +equal to, or after the second item, respectively. (This is the same convention +used by `strcmp` or `qsort` in the standard C library). + + int sort_function(void *a, void *b) { + /* compare a to b (cast a and b appropriately) + * return (int) -1 if (a < b) + * return (int) 0 if (a == b) + * return (int) 1 if (a > b) + */ + } + +Below, `name_sort` and `id_sort` are two examples of sort functions. + +.Sorting the items in the hash +---------------------------------------------------------------------- +int name_sort(struct my_struct *a, struct my_struct *b) { + return strcmp(a->name,b->name); +} + +int id_sort(struct my_struct *a, struct my_struct *b) { + return (a->id - b->id); +} + +void sort_by_name() { + HASH_SORT(users, name_sort); +} + +void sort_by_id() { + HASH_SORT(users, id_sort); +} +---------------------------------------------------------------------- + +When the items in the hash are sorted, the first item may change position. In +the example above, `users` may point to a different structure after calling +`HASH_SORT`. + +A complete example +~~~~~~~~~~~~~~~~~~ + +We'll repeat all the code and embellish it with a `main()` function to form a +working example. + +If this code was placed in a file called `example.c` in the same directory as +`uthash.h`, it could be compiled and run like this: + + cc -o example example.c + ./example + +Follow the prompts to try the program. + +.A complete program +---------------------------------------------------------------------- +#include /* gets */ +#include /* atoi, malloc */ +#include /* strcpy */ +#include "uthash.h" + +struct my_struct { + int id; /* key */ + char name[10]; + UT_hash_handle hh; /* makes this structure hashable */ +}; + +struct my_struct *users = NULL; + +void add_user(int user_id, char *name) { + struct my_struct *s; + + HASH_FIND_INT(users, &user_id, s); /* id already in the hash? */ + if (s==NULL) { + s = (struct my_struct *)malloc(sizeof *s); + s->id = user_id; + HASH_ADD_INT( users, id, s ); /* id: name of key field */ + } + strcpy(s->name, name); +} + +struct my_struct *find_user(int user_id) { + struct my_struct *s; + + HASH_FIND_INT( users, &user_id, s ); /* s: output pointer */ + return s; +} + +void delete_user(struct my_struct *user) { + HASH_DEL(users, user); /* user: pointer to deletee */ + free(user); +} + +void delete_all() { + struct my_struct *current_user, *tmp; + + HASH_ITER(hh, users, current_user, tmp) { + HASH_DEL(users, current_user); /* delete it (users advances to next) */ + free(current_user); /* free it */ + } +} + +void print_users() { + struct my_struct *s; + + for(s=users; s != NULL; s=(struct my_struct*)(s->hh.next)) { + printf("user id %d: name %s\n", s->id, s->name); + } +} + +int name_sort(struct my_struct *a, struct my_struct *b) { + return strcmp(a->name,b->name); +} + +int id_sort(struct my_struct *a, struct my_struct *b) { + return (a->id - b->id); +} + +void sort_by_name() { + HASH_SORT(users, name_sort); +} + +void sort_by_id() { + HASH_SORT(users, id_sort); +} + +int main(int argc, char *argv[]) { + char in[10]; + int id=1, running=1; + struct my_struct *s; + unsigned num_users; + + while (running) { + printf(" 1. add user\n"); + printf(" 2. add/rename user by id\n"); + printf(" 3. find user\n"); + printf(" 4. delete user\n"); + printf(" 5. delete all users\n"); + printf(" 6. sort items by name\n"); + printf(" 7. sort items by id\n"); + printf(" 8. print users\n"); + printf(" 9. count users\n"); + printf("10. quit\n"); + gets(in); + switch(atoi(in)) { + case 1: + printf("name?\n"); + add_user(id++, gets(in)); + break; + case 2: + printf("id?\n"); + gets(in); id = atoi(in); + printf("name?\n"); + add_user(id, gets(in)); + break; + case 3: + printf("id?\n"); + s = find_user(atoi(gets(in))); + printf("user: %s\n", s ? s->name : "unknown"); + break; + case 4: + printf("id?\n"); + s = find_user(atoi(gets(in))); + if (s) delete_user(s); + else printf("id unknown\n"); + break; + case 5: + delete_all(); + break; + case 6: + sort_by_name(); + break; + case 7: + sort_by_id(); + break; + case 8: + print_users(); + break; + case 9: + num_users=HASH_COUNT(users); + printf("there are %u users\n", num_users); + break; + case 10: + running=0; + break; + } + } + + delete_all(); /* free any structures */ + return 0; +} +---------------------------------------------------------------------- + +This program is included in the distribution in `tests/example.c`. You can run +`make example` in that directory to compile it easily. + +Standard key types +------------------ +This section goes into specifics of how to work with different kinds of keys. +You can use nearly any type of key-- integers, strings, pointers, structures, etc. + +[NOTE] +.A note about float +================================================================================ +You can use floating point keys. This comes with the same caveats as with any +program that tests floating point equality. In other words, even the tiniest +difference in two floating point numbers makes them distinct keys. +================================================================================ + +Integer keys +~~~~~~~~~~~~ +The preceding examples demonstrated use of integer keys. To recap, use the +convenience macros `HASH_ADD_INT` and `HASH_FIND_INT` for structures with +integer keys. (The other operations such as `HASH_DELETE` and `HASH_SORT` are +the same for all types of keys). + +String keys +~~~~~~~~~~~ +If your structure has a string key, the operations to use depend on whether your +structure 'points to' the key (`char *`) or the string resides `within` the +structure (`char a[10]`). *This distinction is important*. As we'll see below, +you need to use `HASH_ADD_KEYPTR` when your structure 'points' to a key (that is, +the key itself is 'outside' of the structure); in contrast, use `HASH_ADD_STR` +for a string key that is contained *within* your structure. + +[NOTE] +.char[ ] vs. char* +================================================================================ +The string is 'within' the structure in the first example below-- `name` is a +`char[10]` field. In the second example, the key is 'outside' of the +structure-- `name` is a `char *`. So the first example uses `HASH_ADD_STR` but +the second example uses `HASH_ADD_KEYPTR`. For information on this macro, see +the <>. +================================================================================ + +String 'within' structure +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.A string-keyed hash (string within structure) +---------------------------------------------------------------------- +#include /* strcpy */ +#include /* malloc */ +#include /* printf */ +#include "uthash.h" + +struct my_struct { + char name[10]; /* key (string is WITHIN the structure) */ + int id; + UT_hash_handle hh; /* makes this structure hashable */ +}; + + +int main(int argc, char *argv[]) { + const char *names[] = { "joe", "bob", "betty", NULL }; + struct my_struct *s, *tmp, *users = NULL; + + for (int i = 0; names[i]; ++i) { + s = (struct my_struct *)malloc(sizeof *s); + strcpy(s->name, names[i]); + s->id = i; + HASH_ADD_STR( users, name, s ); + } + + HASH_FIND_STR( users, "betty", s); + if (s) printf("betty's id is %d\n", s->id); + + /* free the hash table contents */ + HASH_ITER(hh, users, s, tmp) { + HASH_DEL(users, s); + free(s); + } + return 0; +} +---------------------------------------------------------------------- + +This example is included in the distribution in `tests/test15.c`. It prints: + + betty's id is 2 + +String 'pointer' in structure +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Now, here is the same example but using a `char *` key instead of `char [ ]`: + +.A string-keyed hash (structure points to string) +---------------------------------------------------------------------- +#include /* strcpy */ +#include /* malloc */ +#include /* printf */ +#include "uthash.h" + +struct my_struct { + const char *name; /* key */ + int id; + UT_hash_handle hh; /* makes this structure hashable */ +}; + + +int main(int argc, char *argv[]) { + const char *names[] = { "joe", "bob", "betty", NULL }; + struct my_struct *s, *tmp, *users = NULL; + + for (int i = 0; names[i]; ++i) { + s = (struct my_struct *)malloc(sizeof *s); + s->name = names[i]; + s->id = i; + HASH_ADD_KEYPTR( hh, users, s->name, strlen(s->name), s ); + } + + HASH_FIND_STR( users, "betty", s); + if (s) printf("betty's id is %d\n", s->id); + + /* free the hash table contents */ + HASH_ITER(hh, users, s, tmp) { + HASH_DEL(users, s); + free(s); + } + return 0; +} +---------------------------------------------------------------------- + +This example is included in `tests/test40.c`. + +Pointer keys +~~~~~~~~~~~~ +Your key can be a pointer. To be very clear, this means the 'pointer itself' +can be the key (in contrast, if the thing 'pointed to' is the key, this is a +different use case handled by `HASH_ADD_KEYPTR`). + +Here is a simple example where a structure has a pointer member, called `key`. + +.A pointer key +---------------------------------------------------------------------- +#include +#include +#include "uthash.h" + +typedef struct { + void *key; + int i; + UT_hash_handle hh; +} el_t; + +el_t *hash = NULL; +char *someaddr = NULL; + +int main() { + el_t *d; + el_t *e = (el_t *)malloc(sizeof *e); + if (!e) return -1; + e->key = (void*)someaddr; + e->i = 1; + HASH_ADD_PTR(hash,key,e); + HASH_FIND_PTR(hash, &someaddr, d); + if (d) printf("found\n"); + + /* release memory */ + HASH_DEL(hash,e); + free(e); + return 0; +} +---------------------------------------------------------------------- + +This example is included in `tests/test57.c`. Note that the end of the program +deletes the element out of the hash, (and since no more elements remain in the +hash), uthash releases its internal memory. + +Structure keys +~~~~~~~~~~~~~~ +Your key field can have any data type. To uthash, it is just a sequence of +bytes. Therefore, even a nested structure can be used as a key. We'll use the +general macros `HASH_ADD` and `HASH_FIND` to demonstrate. + +NOTE: Structures contain padding (wasted internal space used to fulfill +alignment requirements for the members of the structure). These padding bytes +'must be zeroed' before adding an item to the hash or looking up an item. +Therefore always zero the whole structure before setting the members of +interest. The example below does this-- see the two calls to `memset`. + +.A key which is a structure +---------------------------------------------------------------------- +#include +#include +#include "uthash.h" + +typedef struct { + char a; + int b; +} record_key_t; + +typedef struct { + record_key_t key; + /* ... other data ... */ + UT_hash_handle hh; +} record_t; + +int main(int argc, char *argv[]) { + record_t l, *p, *r, *tmp, *records = NULL; + + r = (record_t *)malloc(sizeof *r); + memset(r, 0, sizeof *r); + r->key.a = 'a'; + r->key.b = 1; + HASH_ADD(hh, records, key, sizeof(record_key_t), r); + + memset(&l, 0, sizeof(record_t)); + l.key.a = 'a'; + l.key.b = 1; + HASH_FIND(hh, records, &l.key, sizeof(record_key_t), p); + + if (p) printf("found %c %d\n", p->key.a, p->key.b); + + HASH_ITER(hh, records, p, tmp) { + HASH_DEL(records, p); + free(p); + } + return 0; +} + +---------------------------------------------------------------------- + +This usage is nearly the same as use of a compound key explained below. + +Note that the general macros require the name of the `UT_hash_handle` to be +passed as the first argument (here, this is `hh`). The general macros are +documented in <>. + +Advanced Topics +--------------- + +Compound keys +~~~~~~~~~~~~~ +Your key can even comprise multiple contiguous fields. + +.A multi-field key +---------------------------------------------------------------------- +#include /* malloc */ +#include /* offsetof */ +#include /* printf */ +#include /* memset */ +#include "uthash.h" + +#define UTF32 1 + +typedef struct { + UT_hash_handle hh; + int len; + char encoding; /* these two fields */ + int text[]; /* comprise the key */ +} msg_t; + +typedef struct { + char encoding; + int text[]; +} lookup_key_t; + +int main(int argc, char *argv[]) { + unsigned keylen; + msg_t *msg, *tmp, *msgs = NULL; + lookup_key_t *lookup_key; + + int beijing[] = {0x5317, 0x4eac}; /* UTF-32LE for 北京 */ + + /* allocate and initialize our structure */ + msg = (msg_t *)malloc( sizeof(msg_t) + sizeof(beijing) ); + memset(msg, 0, sizeof(msg_t)+sizeof(beijing)); /* zero fill */ + msg->len = sizeof(beijing); + msg->encoding = UTF32; + memcpy(msg->text, beijing, sizeof(beijing)); + + /* calculate the key length including padding, using formula */ + keylen = offsetof(msg_t, text) /* offset of last key field */ + + sizeof(beijing) /* size of last key field */ + - offsetof(msg_t, encoding); /* offset of first key field */ + + /* add our structure to the hash table */ + HASH_ADD( hh, msgs, encoding, keylen, msg); + + /* look it up to prove that it worked :-) */ + msg=NULL; + + lookup_key = (lookup_key_t *)malloc(sizeof(*lookup_key) + sizeof(beijing)); + memset(lookup_key, 0, sizeof(*lookup_key) + sizeof(beijing)); + lookup_key->encoding = UTF32; + memcpy(lookup_key->text, beijing, sizeof(beijing)); + HASH_FIND( hh, msgs, &lookup_key->encoding, keylen, msg ); + if (msg) printf("found \n"); + free(lookup_key); + + HASH_ITER(hh, msgs, msg, tmp) { + HASH_DEL(msgs, msg); + free(msg); + } + return 0; +} +---------------------------------------------------------------------- + +This example is included in the distribution in `tests/test22.c`. + +If you use multi-field keys, recognize that the compiler pads adjacent fields +(by inserting unused space between them) in order to fulfill the alignment +requirement of each field. For example a structure containing a `char` followed +by an `int` will normally have 3 "wasted" bytes of padding after the char, in +order to make the `int` field start on a multiple-of-4 address (4 is the length +of the int). + +[[multifield_note]] +.Calculating the length of a multi-field key: +******************************************************************************* +To determine the key length when using a multi-field key, you must include any +intervening structure padding the compiler adds for alignment purposes. + +An easy way to calculate the key length is to use the `offsetof` macro from +``. The formula is: + + key length = offsetof(last_key_field) + + sizeof(last_key_field) + - offsetof(first_key_field) + +In the example above, the `keylen` variable is set using this formula. +******************************************************************************* + +When dealing with a multi-field key, you must zero-fill your structure before +`HASH_ADD`'ing it to a hash table, or using its fields in a `HASH_FIND` key. + +In the previous example, `memset` is used to initialize the structure by +zero-filling it. This zeroes out any padding between the key fields. If we +didn't zero-fill the structure, this padding would contain random values. The +random values would lead to `HASH_FIND` failures; as two "identical" keys will +appear to mismatch if there are any differences within their padding. + +Alternatively, you can customize the global <> +and <> to ignore the padding in your key. +See <>. + +[[multilevel]] +Multi-level hash tables +~~~~~~~~~~~~~~~~~~~~~~~ +A multi-level hash table arises when each element of a hash table contains its +own secondary hash table. There can be any number of levels. In a scripting +language you might see: + + $items{bob}{age}=37 + +The C program below builds this example in uthash: the hash table is called +`items`. It contains one element (`bob`) whose own hash table contains one +element (`age`) with value 37. No special functions are necessary to build +a multi-level hash table. + +While this example represents both levels (`bob` and `age`) using the same +structure, it would also be fine to use two different structure definitions. +It would also be fine if there were three or more levels instead of two. + +.Multi-level hash table +---------------------------------------------------------------------- +#include +#include +#include +#include "uthash.h" + +/* hash of hashes */ +typedef struct item { + char name[10]; + struct item *sub; + int val; + UT_hash_handle hh; +} item_t; + +item_t *items=NULL; + +int main(int argc, char *argvp[]) { + item_t *item1, *item2, *tmp1, *tmp2; + + /* make initial element */ + item_t *i = malloc(sizeof(*i)); + strcpy(i->name, "bob"); + i->sub = NULL; + i->val = 0; + HASH_ADD_STR(items, name, i); + + /* add a sub hash table off this element */ + item_t *s = malloc(sizeof(*s)); + strcpy(s->name, "age"); + s->sub = NULL; + s->val = 37; + HASH_ADD_STR(i->sub, name, s); + + /* iterate over hash elements */ + HASH_ITER(hh, items, item1, tmp1) { + HASH_ITER(hh, item1->sub, item2, tmp2) { + printf("$items{%s}{%s} = %d\n", item1->name, item2->name, item2->val); + } + } + + /* clean up both hash tables */ + HASH_ITER(hh, items, item1, tmp1) { + HASH_ITER(hh, item1->sub, item2, tmp2) { + HASH_DEL(item1->sub, item2); + free(item2); + } + HASH_DEL(items, item1); + free(item1); + } + + return 0; +} +---------------------------------------------------------------------- +The example above is included in `tests/test59.c`. + +[[multihash]] +Items in several hash tables +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +A structure can be added to more than one hash table. A few reasons you might do +this include: + +- each hash table may use a different key; +- each hash table may have its own sort order; +- or you might simply use multiple hash tables for grouping purposes. E.g., + you could have users in an `admin_users` and a `users` hash table. + +Your structure needs to have a `UT_hash_handle` field for each hash table to +which it might be added. You can name them anything. E.g., + + UT_hash_handle hh1, hh2; + +Items with multiple keys +~~~~~~~~~~~~~~~~~~~~~~~~ +You might create a hash table keyed on an ID field, and another hash table keyed +on username (if usernames are unique). You can add the same user structure to +both hash tables (without duplication of the structure), allowing lookup of a +user structure by their name or ID. The way to achieve this is to have a +separate `UT_hash_handle` for each hash to which the structure may be added. + +.A structure with two different keys +---------------------------------------------------------------------- +struct my_struct { + int id; /* first key */ + char username[10]; /* second key */ + UT_hash_handle hh1; /* handle for first hash table */ + UT_hash_handle hh2; /* handle for second hash table */ +}; +---------------------------------------------------------------------- + +In the example above, the structure can now be added to two separate hash +tables. In one hash, `id` is its key, while in the other hash, `username` is +its key. (There is no requirement that the two hashes have different key +fields. They could both use the same key, such as `id`). + +Notice the structure has two hash handles (`hh1` and `hh2`). In the code +below, notice that each hash handle is used exclusively with a particular hash +table. (`hh1` is always used with the `users_by_id` hash, while `hh2` is +always used with the `users_by_name` hash table). + +.Two keys on a structure +---------------------------------------------------------------------- + struct my_struct *users_by_id = NULL, *users_by_name = NULL, *s; + int i; + char *name; + + s = malloc(sizeof(struct my_struct)); + s->id = 1; + strcpy(s->username, "thanson"); + + /* add the structure to both hash tables */ + HASH_ADD(hh1, users_by_id, id, sizeof(int), s); + HASH_ADD(hh2, users_by_name, username, strlen(s->username), s); + + /* find user by ID in the "users_by_id" hash table */ + i=1; + HASH_FIND(hh1, users_by_id, &i, sizeof(int), s); + if (s) printf("found id %d: %s\n", i, s->username); + + /* find user by username in the "users_by_name" hash table */ + name = "thanson"; + HASH_FIND(hh2, users_by_name, name, strlen(name), s); + if (s) printf("found user %s: %d\n", name, s->id); +---------------------------------------------------------------------- + + +Sorted insertion of new items +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If you would like to maintain a sorted hash you have two options. The first +option is to use the HASH_SRT() macro, which will sort any unordered list in +'O(n log(n))'. This is the best strategy if you're just filling up a hash +table with items in random order with a single final HASH_SRT() operation +when all is done. Obviously, this won't do what you want if you need +the list to be in an ordered state at times between insertion of +items. You can use HASH_SRT() after every insertion operation, but that will +yield a computational complexity of 'O(n^2 log n)'. + +The second route you can take is via the in-order add and replace macros. +The `HASH_ADD_INORDER*` macros work just like their `HASH_ADD*` counterparts, but +with an additional comparison-function argument: + + int name_sort(struct my_struct *a, struct my_struct *b) { + return strcmp(a->name,b->name); + } + + HASH_ADD_KEYPTR_INORDER(hh, items, &item->name, strlen(item->name), item, name_sort); + +New items are sorted at insertion time in 'O(n)', thus resulting in a +total computational complexity of 'O(n^2)' for the creation of the hash +table with all items. +For in-order add to work, the list must be in an ordered state before +insertion of the new item. + +Several sort orders +~~~~~~~~~~~~~~~~~~~ +It comes as no surprise that two hash tables can have different sort orders, but +this fact can also be used advantageously to sort the 'same items' in several +ways. This is based on the ability to store a structure in several hash tables. + +Extending the previous example, suppose we have many users. We have added each +user structure to the `users_by_id` hash table and the `users_by_name` hash table. +(To reiterate, this is done without the need to have two copies of each structure.) +Now we can define two sort functions, then use `HASH_SRT`. + + int sort_by_id(struct my_struct *a, struct my_struct *b) { + if (a->id == b->id) return 0; + return (a->id < b->id) ? -1 : 1; + } + + int sort_by_name(struct my_struct *a, struct my_struct *b) { + return strcmp(a->username,b->username); + } + + HASH_SRT(hh1, users_by_id, sort_by_id); + HASH_SRT(hh2, users_by_name, sort_by_name); + +Now iterating over the items in `users_by_id` will traverse them in id-order +while, naturally, iterating over `users_by_name` will traverse them in +name-order. The items are fully forward-and-backward linked in each order. +So even for one set of users, we might store them in two hash tables to provide +easy iteration in two different sort orders. + +Bloom filter (faster misses) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Programs that generate a fair miss rate (`HASH_FIND` that result in `NULL`) may +benefit from the built-in Bloom filter support. This is disabled by default, +because programs that generate only hits would incur a slight penalty from it. +Also, programs that do deletes should not use the Bloom filter. While the +program would operate correctly, deletes diminish the benefit of the filter. +To enable the Bloom filter, simply compile with `-DHASH_BLOOM=n` like: + + -DHASH_BLOOM=27 + +where the number can be any value up to 32 which determines the amount of memory +used by the filter, as shown below. Using more memory makes the filter more +accurate and has the potential to speed up your program by making misses bail +out faster. + +.Bloom filter sizes for selected values of n +[width="50%",cols="10m,30",grid="none",options="header"] +|===================================================================== +| n | Bloom filter size (per hash table) +| 16 | 8 kilobytes +| 20 | 128 kilobytes +| 24 | 2 megabytes +| 28 | 32 megabytes +| 32 | 512 megabytes +|===================================================================== + +Bloom filters are only a performance feature; they do not change the results of +hash operations in any way. The only way to gauge whether or not a Bloom filter +is right for your program is to test it. Reasonable values for the size of the +Bloom filter are 16-32 bits. + +Select +~~~~~~ +An experimental 'select' operation is provided that inserts those items from a +source hash that satisfy a given condition into a destination hash. This +insertion is done with somewhat more efficiency than if this were using +`HASH_ADD`, namely because the hash function is not recalculated for keys of the +selected items. This operation does not remove any items from the source hash. +Rather the selected items obtain dual presence in both hashes. The destination +hash may already have items in it; the selected items are added to it. In order +for a structure to be usable with `HASH_SELECT`, it must have two or more hash +handles. (As described <>, a structure can exist in many +hash tables at the same time; it must have a separate hash handle for each one). + + user_t *users=NULL, *admins=NULL; /* two hash tables */ + + typedef struct { + int id; + UT_hash_handle hh; /* handle for users hash */ + UT_hash_handle ah; /* handle for admins hash */ + } user_t; + +Now suppose we have added some users, and want to select just the administrator +users who have id's less than 1024. + + #define is_admin(x) (((user_t*)x)->id < 1024) + HASH_SELECT(ah,admins,hh,users,is_admin); + +The first two parameters are the 'destination' hash handle and hash table, the +second two parameters are the 'source' hash handle and hash table, and the last +parameter is the 'select condition'. Here we used a macro `is_admin()` but we +could just as well have used a function. + + int is_admin(void *userv) { + user_t *user = (user_t*)userv; + return (user->id < 1024) ? 1 : 0; + } + +If the select condition always evaluates to true, this operation is +essentially a 'merge' of the source hash into the destination hash. Of course, +the source hash remains unchanged under any use of `HASH_SELECT`. It only adds +items to the destination hash selectively. + +The two hash handles must differ. An example of using `HASH_SELECT` is included +in `tests/test36.c`. + +[[hash_keycompare]] +Specifying an alternate key comparison function +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When you call `HASH_FIND(hh, head, intfield, sizeof(int), out)`, uthash will +first call <>`(intfield, sizeof(int), hashvalue)` to +determine the bucket `b` in which to search, and then, for each element `elt` +of bucket `b`, uthash will evaluate +`elt->hh.hashv == hashvalue && elt.hh.keylen == sizeof(int) && HASH_KEYCMP(intfield, elt->hh.key, sizeof(int)) == 0`. +`HASH_KEYCMP` should return `0` to indicate that `elt` is a match and should be +returned, and any non-zero value to indicate that the search for a matching +element should continue. + +By default, uthash defines `HASH_KEYCMP` as an alias for `memcmp`. On platforms +that do not provide `memcmp`, you can substitute your own implementation. + +---------------------------------------------------------------------------- +#undef HASH_KEYCMP +#define HASH_KEYCMP(a,b,len) bcmp(a,b,len) +---------------------------------------------------------------------------- + +Another reason to substitute your own key comparison function is if your "key" is not +trivially comparable. In this case you will also need to substitute your own `HASH_FUNCTION`. + +---------------------------------------------------------------------------- +struct Key { + short s; + /* 2 bytes of padding */ + float f; +}; +/* do not compare the padding bytes; do not use memcmp on floats */ +unsigned key_hash(struct Key *s) { return s + (unsigned)f; } +bool key_equal(struct Key *a, struct Key *b) { return a.s == b.s && a.f == b.f; } + +#define HASH_FUNCTION(s,len,hashv) (hashv) = key_hash((struct Key *)s) +#define HASH_KEYCMP(a,b,len) (!key_equal((struct Key *)a, (struct Key *)b)) +---------------------------------------------------------------------------- + +Another reason to substitute your own key comparison function is to trade off +correctness for raw speed. During its linear search of a bucket, uthash always +compares the 32-bit `hashv` first, and calls `HASH_KEYCMP` only if the `hashv` +compares equal. This means that `HASH_KEYCMP` is called at least once per +successful find. Given a good hash function, we expect the `hashv` comparison to +produce a "false positive" equality only once in four billion times. Therefore, +we expect `HASH_KEYCMP` to produce `0` most of the time. If we expect many +successful finds, and our application doesn't mind the occasional false positive, +we might substitute a no-op comparison function: + +---------------------------------------------------------------------------- +#undef HASH_KEYCMP +#define HASH_KEYCMP(a,b,len) 0 /* occasionally wrong, but very fast */ +---------------------------------------------------------------------------- + +Note: The global equality-comparison function `HASH_KEYCMP` has no relationship +at all to the lessthan-comparison function passed as a parameter to `HASH_ADD_INORDER`. + +[[hash_functions]] +Built-in hash functions +~~~~~~~~~~~~~~~~~~~~~~~ +Internally, a hash function transforms a key into a bucket number. You don't +have to take any action to use the default hash function, currently Jenkins. + +Some programs may benefit from using another of the built-in hash functions. +There is a simple analysis utility included with uthash to help you determine +if another hash function will give you better performance. + +You can use a different hash function by compiling your program with +`-DHASH_FUNCTION=HASH_xyz` where `xyz` is one of the symbolic names listed +below. E.g., + + cc -DHASH_FUNCTION=HASH_BER -o program program.c + +.Built-in hash functions +[width="50%",cols="^5m,20",grid="none",options="header"] +|=============================================================================== +|Symbol | Name +|JEN | Jenkins (default) +|BER | Bernstein +|SAX | Shift-Add-Xor +|OAT | One-at-a-time +|FNV | Fowler/Noll/Vo +|SFH | Paul Hsieh +|=============================================================================== + +Which hash function is best? +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +You can easily determine the best hash function for your key domain. To do so, +you'll need to run your program once in a data-collection pass, and then run +the collected data through an included analysis utility. + +First you must build the analysis utility. From the top-level directory, + + cd tests/ + make + +We'll use `test14.c` to demonstrate the data-collection and analysis steps +(here using `sh` syntax to redirect file descriptor 3 to a file): + +.Using keystats +-------------------------------------------------------------------------------- +% cc -DHASH_EMIT_KEYS=3 -I../src -o test14 test14.c +% ./test14 3>test14.keys +% ./keystats test14.keys +fcn ideal% #items #buckets dup% fl add_usec find_usec del-all usec +--- ------ ---------- ---------- ----- -- ---------- ---------- ------------ +SFH 91.6% 1219 256 0% ok 92 131 25 +FNV 90.3% 1219 512 0% ok 107 97 31 +SAX 88.7% 1219 512 0% ok 111 109 32 +OAT 87.2% 1219 256 0% ok 99 138 26 +JEN 86.7% 1219 256 0% ok 87 130 27 +BER 86.2% 1219 256 0% ok 121 129 27 +-------------------------------------------------------------------------------- + +[NOTE] +The number 3 in `-DHASH_EMIT_KEYS=3` is a file descriptor. Any file descriptor +that your program doesn't use for its own purposes can be used instead of 3. +The data-collection mode enabled by `-DHASH_EMIT_KEYS=x` should not be used in +production code. + +Usually, you should just pick the first hash function that is listed. Here, this +is `SFH`. This is the function that provides the most even distribution for +your keys. If several have the same `ideal%`, then choose the fastest one +according to the `find_usec` column. + +keystats column reference +^^^^^^^^^^^^^^^^^^^^^^^^^ +fcn:: + symbolic name of hash function +ideal%:: + The percentage of items in the hash table which can be looked up within an + ideal number of steps. (Further explained below). +#items:: + the number of keys that were read in from the emitted key file +#buckets:: + the number of buckets in the hash after all the keys were added +dup%:: + the percent of duplicate keys encountered in the emitted key file. + Duplicates keys are filtered out to maintain key uniqueness. (Duplicates + are normal. For example, if the application adds an item to a hash, + deletes it, then re-adds it, the key is written twice to the emitted file.) +flags:: + this is either `ok`, or `nx` (noexpand) if the expansion inhibited flag is + set, described in <>. It is not recommended + to use a hash function that has the `noexpand` flag set. +add_usec:: + the clock time in microseconds required to add all the keys to a hash +find_usec:: + the clock time in microseconds required to look up every key in the hash +del-all usec:: + the clock time in microseconds required to delete every item in the hash + +[[ideal]] +ideal% +^^^^^^ + +.What is ideal%? +***************************************************************************** +The 'n' items in a hash are distributed into 'k' buckets. Ideally each bucket +would contain an equal share '(n/k)' of the items. In other words, the maximum +linear position of any item in a bucket chain would be 'n/k' if every bucket is +equally used. If some buckets are overused and others are underused, the +overused buckets will contain items whose linear position surpasses 'n/k'. +Such items are considered non-ideal. + +As you might guess, `ideal%` is the percentage of ideal items in the hash. These +items have favorable linear positions in their bucket chains. As `ideal%` +approaches 100%, the hash table approaches constant-time lookup performance. +***************************************************************************** + +[[hashscan]] +hashscan +~~~~~~~~ +NOTE: This utility is only available on Linux, and on FreeBSD (8.1 and up). + +A utility called `hashscan` is included in the `tests/` directory. It +is built automatically when you run `make` in that directory. This tool +examines a running process and reports on the uthash tables that it finds in +that program's memory. It can also save the keys from each table in a format +that can be fed into `keystats`. + +Here is an example of using `hashscan`. First ensure that it is built: + + cd tests/ + make + +Since `hashscan` needs a running program to inspect, we'll start up a simple +program that makes a hash table and then sleeps as our test subject: + + ./test_sleep & + pid: 9711 + +Now that we have a test program, let's run `hashscan` on it: + + ./hashscan 9711 + Address ideal items buckets mc fl bloom/sat fcn keys saved to + ------------------ ----- -------- -------- -- -- --------- --- ------------- + 0x862e038 81% 10000 4096 11 ok 16 14% JEN + +If we wanted to copy out all its keys for external analysis using `keystats`, +add the `-k` flag: + + ./hashscan -k 9711 + Address ideal items buckets mc fl bloom/sat fcn keys saved to + ------------------ ----- -------- -------- -- -- --------- --- ------------- + 0x862e038 81% 10000 4096 11 ok 16 14% JEN /tmp/9711-0.key + +Now we could run `./keystats /tmp/9711-0.key` to analyze which hash function +has the best characteristics on this set of keys. + +hashscan column reference +^^^^^^^^^^^^^^^^^^^^^^^^^ +Address:: + virtual address of the hash table +ideal:: + The percentage of items in the table which can be looked up within an ideal + number of steps. See <> in the `keystats` section. +items:: + number of items in the hash table +buckets:: + number of buckets in the hash table +mc:: + the maximum chain length found in the hash table (uthash usually tries to + keep fewer than 10 items in each bucket, or in some cases a multiple of 10) +fl:: + flags (either `ok`, or `NX` if the expansion-inhibited flag is set) +bloom/sat:: + if the hash table uses a Bloom filter, this is the size (as a power of two) + of the filter (e.g. 16 means the filter is 2^16 bits in size). The second + number is the "saturation" of the bits expressed as a percentage. The lower + the percentage, the more potential benefit to identify cache misses quickly. +fcn:: + symbolic name of hash function +keys saved to:: + file to which keys were saved, if any + +.How hashscan works +***************************************************************************** +When hashscan runs, it attaches itself to the target process, which suspends +the target process momentarily. During this brief suspension, it scans the +target's virtual memory for the signature of a uthash hash table. It then +checks if a valid hash table structure accompanies the signature and reports +what it finds. When it detaches, the target process resumes running normally. +The hashscan is performed "read-only"-- the target process is not modified. +Since hashscan is analyzing a momentary snapshot of a running process, it may +return different results from one run to another. +***************************************************************************** + +[[expansion]] +Expansion internals +~~~~~~~~~~~~~~~~~~~ +Internally this hash manages the number of buckets, with the goal of having +enough buckets so that each one contains only a small number of items. + +.Why does the number of buckets matter? +******************************************************************************** +When looking up an item by its key, this hash scans linearly through the items +in the appropriate bucket. In order for the linear scan to run in constant +time, the number of items in each bucket must be bounded. This is accomplished +by increasing the number of buckets as needed. +******************************************************************************** + +Normal expansion +^^^^^^^^^^^^^^^^ +This hash attempts to keep fewer than 10 items in each bucket. When an item is +added that would cause a bucket to exceed this number, the number of buckets in +the hash is doubled and the items are redistributed into the new buckets. In an +ideal world, each bucket will then contain half as many items as it did before. + +Bucket expansion occurs automatically and invisibly as needed. There is +no need for the application to know when it occurs. + +Per-bucket expansion threshold +++++++++++++++++++++++++++++++ +Normally all buckets share the same threshold (10 items) at which point bucket +expansion is triggered. During the process of bucket expansion, uthash can +adjust this expansion-trigger threshold on a per-bucket basis if it sees that +certain buckets are over-utilized. + +When this threshold is adjusted, it goes from 10 to a multiple of 10 (for that +particular bucket). The multiple is based on how many times greater the actual +chain length is than the ideal length. It is a practical measure to reduce +excess bucket expansion in the case where a hash function over-utilizes a few +buckets but has good overall distribution. However, if the overall distribution +gets too bad, uthash changes tactics. + +Inhibited expansion +^^^^^^^^^^^^^^^^^^^ +You usually don't need to know or worry about this, particularly if you used +the `keystats` utility during development to select a good hash for your keys. + +A hash function may yield an uneven distribution of items across the buckets. +In moderation this is not a problem. Normal bucket expansion takes place as +the chain lengths grow. But when significant imbalance occurs (because the hash +function is not well suited to the key domain), bucket expansion may be +ineffective at reducing the chain lengths. + +Imagine a very bad hash function which always puts every item in bucket 0. No +matter how many times the number of buckets is doubled, the chain length of +bucket 0 stays the same. In a situation like this, the best behavior is to +stop expanding, and accept 'O(n)' lookup performance. This is what uthash +does. It degrades gracefully if the hash function is ill-suited to the keys. + +If two consecutive bucket expansions yield `ideal%` values below 50%, uthash +inhibits expansion for that hash table. Once set, the 'bucket expansion +inhibited' flag remains in effect as long as the hash has items in it. +Inhibited expansion may cause `HASH_FIND` to exhibit worse than constant-time +performance. + +Diagnostic hooks +^^^^^^^^^^^^^^^^ + +There are two "notification" hooks which get executed if uthash is +expanding buckets, or setting the 'bucket expansion inhibited' flag. +There is no need for the application to set these hooks or take action in +response to these events. They are mainly for diagnostic purposes. +Normally both of these hooks are undefined and thus compile away to nothing. + +The `uthash_expand_fyi` hook can be defined to execute code whenever +uthash performs a bucket expansion. + +---------------------------------------------------------------------------- +#undef uthash_expand_fyi +#define uthash_expand_fyi(tbl) printf("expanded to %u buckets\n", tbl->num_buckets) +---------------------------------------------------------------------------- + +The `uthash_noexpand_fyi` hook can be defined to execute code whenever +uthash sets the 'bucket expansion inhibited' flag. + +---------------------------------------------------------------------------- +#undef uthash_noexpand_fyi +#define uthash_noexpand_fyi(tbl) printf("warning: bucket expansion inhibited\n") +---------------------------------------------------------------------------- + +Hooks +~~~~~ +You don't need to use these hooks -- they are only here if you want to modify +the behavior of uthash. Hooks can be used to replace standard library functions +that might be unavailable on some platforms, to change how uthash allocates +memory, or to run code in response to certain internal events. + +The `uthash.h` header will define these hooks to default values, unless they +are already defined. It is safe either to `#undef` and redefine them +after including `uthash.h`, or to define them before inclusion; for +example, by passing `-Duthash_malloc=my_malloc` on the command line. + +Specifying alternate memory management functions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +By default, uthash uses `malloc` and `free` to manage memory. +If your application uses its own custom allocator, uthash can use them too. + +---------------------------------------------------------------------------- +#include "uthash.h" + +/* undefine the defaults */ +#undef uthash_malloc +#undef uthash_free + +/* re-define, specifying alternate functions */ +#define uthash_malloc(sz) my_malloc(sz) +#define uthash_free(ptr,sz) my_free(ptr) + +... +---------------------------------------------------------------------------- + +Notice that `uthash_free` receives two parameters. The `sz` parameter is for +convenience on embedded platforms that manage their own memory. + +Specifying alternate standard library functions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Uthash also uses `strlen` (in the `HASH_FIND_STR` convenience macro, for +example) and `memset` (used only for zeroing memory). On platforms that do not +provide these functions, you can substitute your own implementations. + +---------------------------------------------------------------------------- +#undef uthash_bzero +#define uthash_bzero(a,len) my_bzero(a,len) + +#undef uthash_strlen +#define uthash_strlen(s) my_strlen(s) +---------------------------------------------------------------------------- + +Out of memory +^^^^^^^^^^^^^ +If memory allocation fails (i.e., the `uthash_malloc` function returns `NULL`), +the default behavior is to terminate the process by calling `exit(-1)`. This +can be modified by re-defining the `uthash_fatal` macro. + +---------------------------------------------------------------------------- +#undef uthash_fatal +#define uthash_fatal(msg) my_fatal_function(msg) +---------------------------------------------------------------------------- + +The fatal function should terminate the process or `longjmp` back to a safe +place. Note that an allocation failure may leave allocated memory that cannot +be recovered. After `uthash_fatal`, the hash table object should be considered +unusable; it might not be safe even to run `HASH_CLEAR` on the hash table +when it is in this state. + +To enable "returning a failure" if memory cannot be allocated, define the +macro `HASH_NONFATAL_OOM` before including the `uthash.h` header file. In this +case, `uthash_fatal` is not used; instead, each allocation failure results in +a single call to `uthash_nonfatal_oom(elt)` where `elt` is the address of the +element whose insertion triggered the failure. The default behavior of +`uthash_nonfatal_oom` is a no-op. + +---------------------------------------------------------------------------- +#undef uthash_nonfatal_oom +#define uthash_nonfatal_oom(elt) perhaps_recover((element_t *) elt) +---------------------------------------------------------------------------- + +Before the call to `uthash_nonfatal_oom`, the hash table is rolled back +to the state it was in prior to the problematic insertion; no memory is +leaked. It is safe to `throw` or `longjmp` out of the `uthash_nonfatal_oom` +handler. + +The `elt` argument will be of the correct pointer-to-element type, unless +`uthash_nonfatal_oom` is invoked from `HASH_SELECT`, in which case it will +be of `void*` type and must be cast before using. In any case, `elt->hh.tbl` +will be `NULL`. + +Allocation failure is possible only when adding elements to the hash table +(including the `ADD`, `REPLACE`, and `SELECT` operations). +`uthash_free` is not allowed to fail. + +Debug mode +~~~~~~~~~~ +If a program that uses this hash is compiled with `-DHASH_DEBUG=1`, a special +internal consistency-checking mode is activated. In this mode, the integrity +of the whole hash is checked following every add or delete operation. This is +for debugging the uthash software only, not for use in production code. + +In the `tests/` directory, running `make debug` will run all the tests in +this mode. + +In this mode, any internal errors in the hash data structure will cause a +message to be printed to `stderr` and the program to exit. + +The `UT_hash_handle` data structure includes `next`, `prev`, `hh_next` and +`hh_prev` fields. The former two fields determine the "application" ordering +(that is, insertion order-- the order the items were added). The latter two +fields determine the "bucket chain" order. These link the `UT_hash_handles` +together in a doubly-linked list that is a bucket chain. + +Checks performed in `-DHASH_DEBUG=1` mode: + +- the hash is walked in its entirety twice: once in 'bucket' order and a + second time in 'application' order +- the total number of items encountered in both walks is checked against the + stored number +- during the walk in 'bucket' order, each item's `hh_prev` pointer is compared + for equality with the last visited item +- during the walk in 'application' order, each item's `prev` pointer is compared + for equality with the last visited item + +.Macro debugging: +******************************************************************************** +Sometimes it's difficult to interpret a compiler warning on a line which +contains a macro call. In the case of uthash, one macro can expand to dozens of +lines. In this case, it is helpful to expand the macros and then recompile. +By doing so, the warning message will refer to the exact line within the macro. + +Here is an example of how to expand the macros and then recompile. This uses the +`test1.c` program in the `tests/` subdirectory. + + gcc -E -I../src test1.c > /tmp/a.c + egrep -v '^#' /tmp/a.c > /tmp/b.c + indent /tmp/b.c + gcc -o /tmp/b /tmp/b.c + +The last line compiles the original program (test1.c) with all macros expanded. +If there was a warning, the referenced line number can be checked in `/tmp/b.c`. +******************************************************************************** + +Thread safety +~~~~~~~~~~~~~ +You can use uthash in a threaded program. But you must do the locking. Use a +read-write lock to protect against concurrent writes. It is ok to have +concurrent readers (since uthash 1.5). + +For example using pthreads you can create an rwlock like this: + + pthread_rwlock_t lock; + if (pthread_rwlock_init(&lock,NULL) != 0) fatal("can't create rwlock"); + +Then, readers must acquire the read lock before doing any `HASH_FIND` calls or +before iterating over the hash elements: + + if (pthread_rwlock_rdlock(&lock) != 0) fatal("can't get rdlock"); + HASH_FIND_INT(elts, &i, e); + pthread_rwlock_unlock(&lock); + +Writers must acquire the exclusive write lock before doing any update. Add, +delete, and sort are all updates that must be locked. + + if (pthread_rwlock_wrlock(&lock) != 0) fatal("can't get wrlock"); + HASH_DEL(elts, e); + pthread_rwlock_unlock(&lock); + +If you prefer, you can use a mutex instead of a read-write lock, but this will +reduce reader concurrency to a single thread at a time. + +An example program using uthash with a read-write lock is included in +`tests/threads/test1.c`. + +[[Macro_reference]] +Macro reference +--------------- + +Convenience macros +~~~~~~~~~~~~~~~~~~ +The convenience macros do the same thing as the generalized macros, but +require fewer arguments. + +In order to use the convenience macros, + +1. the structure's `UT_hash_handle` field must be named `hh`, and +2. for add or find, the key field must be of type `int` or `char[]` or pointer + +.Convenience macros +[width="90%",cols="10m,30m",grid="none",options="header"] +|=============================================================================== +|macro | arguments +|HASH_ADD_INT | (head, keyfield_name, item_ptr) +|HASH_REPLACE_INT | (head, keyfiled_name, item_ptr,replaced_item_ptr) +|HASH_FIND_INT | (head, key_ptr, item_ptr) +|HASH_ADD_STR | (head, keyfield_name, item_ptr) +|HASH_REPLACE_STR | (head,keyfield_name, item_ptr, replaced_item_ptr) +|HASH_FIND_STR | (head, key_ptr, item_ptr) +|HASH_ADD_PTR | (head, keyfield_name, item_ptr) +|HASH_REPLACE_PTR | (head, keyfield_name, item_ptr, replaced_item_ptr) +|HASH_FIND_PTR | (head, key_ptr, item_ptr) +|HASH_DEL | (head, item_ptr) +|HASH_SORT | (head, cmp) +|HASH_COUNT | (head) +|=============================================================================== + +General macros +~~~~~~~~~~~~~~ + +These macros add, find, delete and sort the items in a hash. You need to +use the general macros if your `UT_hash_handle` is named something other +than `hh`, or if your key's data type isn't `int` or `char[]`. + +.General macros +[width="90%",cols="10m,30m",grid="none",options="header"] +|=============================================================================== +|macro | arguments +|HASH_ADD | (hh_name, head, keyfield_name, key_len, item_ptr) +|HASH_ADD_BYHASHVALUE | (hh_name, head, keyfield_name, key_len, hashv, item_ptr) +|HASH_ADD_KEYPTR | (hh_name, head, key_ptr, key_len, item_ptr) +|HASH_ADD_KEYPTR_BYHASHVALUE | (hh_name, head, key_ptr, key_len, hashv, item_ptr) +|HASH_ADD_INORDER | (hh_name, head, keyfield_name, key_len, item_ptr, cmp) +|HASH_ADD_BYHASHVALUE_INORDER | (hh_name, head, keyfield_name, key_len, hashv, item_ptr, cmp) +|HASH_ADD_KEYPTR_INORDER | (hh_name, head, key_ptr, key_len, item_ptr, cmp) +|HASH_ADD_KEYPTR_BYHASHVALUE_INORDER | (hh_name, head, key_ptr, key_len, hashv, item_ptr, cmp) +|HASH_REPLACE | (hh_name, head, keyfield_name, key_len, item_ptr, replaced_item_ptr) +|HASH_REPLACE_BYHASHVALUE | (hh_name, head, keyfield_name, key_len, hashv, item_ptr, replaced_item_ptr) +|HASH_REPLACE_INORDER | (hh_name, head, keyfield_name, key_len, item_ptr, replaced_item_ptr, cmp) +|HASH_REPLACE_BYHASHVALUE_INORDER | (hh_name, head, keyfield_name, key_len, hashv, item_ptr, replaced_item_ptr, cmp) +|HASH_FIND | (hh_name, head, key_ptr, key_len, item_ptr) +|HASH_FIND_BYHASHVALUE | (hh_name, head, key_ptr, key_len, hashv, item_ptr) +|HASH_DELETE | (hh_name, head, item_ptr) +|HASH_VALUE | (key_ptr, key_len, hashv) +|HASH_SRT | (hh_name, head, cmp) +|HASH_CNT | (hh_name, head) +|HASH_CLEAR | (hh_name, head) +|HASH_SELECT | (dst_hh_name, dst_head, src_hh_name, src_head, condition) +|HASH_ITER | (hh_name, head, item_ptr, tmp_item_ptr) +|HASH_OVERHEAD | (hh_name, head) +|=============================================================================== + +[NOTE] +`HASH_ADD_KEYPTR` is used when the structure contains a pointer to the +key, rather than the key itself. + +The `HASH_VALUE` and `..._BYHASHVALUE` macros are a performance mechanism mainly for the +special case of having different structures, in different hash tables, having +identical keys. It allows the hash value to be obtained once and then passed +in to the `..._BYHASHVALUE` macros, saving the expense of re-computing the hash value. + + +Argument descriptions +^^^^^^^^^^^^^^^^^^^^^ +hh_name:: + name of the `UT_hash_handle` field in the structure. Conventionally called + `hh`. +head:: + the structure pointer variable which acts as the "head" of the hash. So + named because it initially points to the first item that is added to the hash. +keyfield_name:: + the name of the key field in the structure. (In the case of a multi-field + key, this is the first field of the key). If you're new to macros, it + might seem strange to pass the name of a field as a parameter. See + <>. +key_len:: + the length of the key field in bytes. E.g. for an integer key, this is + `sizeof(int)`, while for a string key it's `strlen(key)`. (For a + multi-field key, see <>.) +key_ptr:: + for `HASH_FIND`, this is a pointer to the key to look up in the hash + (since it's a pointer, you can't directly pass a literal value here). For + `HASH_ADD_KEYPTR`, this is the address of the key of the item being added. +hashv:: + the hash value of the provided key. This is an input parameter for the + `..._BYHASHVALUE` macros, and an output parameter for `HASH_VALUE`. + Reusing a cached hash value can be a performance optimization if + you're going to do repeated lookups for the same key. +item_ptr:: + pointer to the structure being added, deleted, replaced, or looked up, or the current + pointer during iteration. This is an input parameter for the `HASH_ADD`, + `HASH_DELETE`, and `HASH_REPLACE` macros, and an output parameter for `HASH_FIND` + and `HASH_ITER`. (When using `HASH_ITER` to iterate, `tmp_item_ptr` + is another variable of the same type as `item_ptr`, used internally). +replaced_item_ptr:: + used in `HASH_REPLACE` macros. This is an output parameter that is set to point + to the replaced item (if no item is replaced it is set to NULL). +cmp:: + pointer to comparison function which accepts two arguments (pointers to + items to compare) and returns an int specifying whether the first item + should sort before, equal to, or after the second item (like `strcmp`). +condition:: + a function or macro which accepts a single argument (a void pointer to a + structure, which needs to be cast to the appropriate structure type). The + function or macro should evaluate to a non-zero value if the + structure should be "selected" for addition to the destination hash. + +// vim: set tw=80 wm=2 syntax=asciidoc: diff --git a/np3portableapp/Notepad3Portable/App/Notepad3/x64/np3/Notepad3.ini b/np3portableapp/Notepad3Portable/App/Notepad3/x64/Notepad3.ini similarity index 100% rename from np3portableapp/Notepad3Portable/App/Notepad3/x64/np3/Notepad3.ini rename to np3portableapp/Notepad3Portable/App/Notepad3/x64/Notepad3.ini diff --git a/np3portableapp/Notepad3Portable/App/Notepad3/x86/np3/Notepad3.ini b/np3portableapp/Notepad3Portable/App/Notepad3/x86/Notepad3.ini similarity index 100% rename from np3portableapp/Notepad3Portable/App/Notepad3/x86/np3/Notepad3.ini rename to np3portableapp/Notepad3Portable/App/Notepad3/x86/Notepad3.ini diff --git a/np3portableapp/_buildname.txt b/np3portableapp/_buildname.txt new file mode 100644 index 0000000000..b396bf6ae3 --- /dev/null +++ b/np3portableapp/_buildname.txt @@ -0,0 +1 @@ +"_DEV" diff --git a/src/Notepad3.c b/src/Notepad3.c index 47492f8b7a..ad92387aa7 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -82,9 +82,9 @@ CONSTANTS_T const Constants = { 2 // StdDefaultLexerID , L"minipath.exe" // FileBrowserMiniPath #ifdef _WIN64 - , L"grepWin-64.exe" // FileSearchGrepWin + , L"grepWin-x64_portable.exe" // FileSearchGrepWin #else - , L"grepWin-32.exe" // FileSearchGrepWin + , L"grepWin-x86_portable.exe" // FileSearchGrepWin #endif , L"Settings" // Inifile Section "Settings" , L"Settings2" // Inifile Section "Settings2"