init
This commit is contained in:
commit
d70addf7ca
|
|
@ -0,0 +1,624 @@
|
||||||
|
# SQLI DB
|
||||||
|
*.db
|
||||||
|
|
||||||
|
# BLOGS
|
||||||
|
blogs/
|
||||||
|
|
||||||
|
# Created by https://www.toptal.com/developers/gitignore/api/csharp,aspnetcore,rider,visualstudiocode
|
||||||
|
# Edit at https://www.toptal.com/developers/gitignore?templates=csharp,aspnetcore,rider,visualstudiocode
|
||||||
|
|
||||||
|
### ASPNETCore ###
|
||||||
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.userosscache
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
|
*.userprefs
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Dd]ebug/
|
||||||
|
[Dd]ebugPublic/
|
||||||
|
[Rr]elease/
|
||||||
|
[Rr]eleases/
|
||||||
|
x64/
|
||||||
|
x86/
|
||||||
|
bld/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
[Ll]og/
|
||||||
|
|
||||||
|
# Visual Studio 2015 cache/options directory
|
||||||
|
.vs/
|
||||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||||
|
#wwwroot/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
[Tt]est[Rr]esult*/
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
|
# NUNIT
|
||||||
|
*.VisualState.xml
|
||||||
|
TestResult.xml
|
||||||
|
|
||||||
|
# Build Results of an ATL Project
|
||||||
|
[Dd]ebugPS/
|
||||||
|
[Rr]eleasePS/
|
||||||
|
dlldata.c
|
||||||
|
|
||||||
|
# DNX
|
||||||
|
project.lock.json
|
||||||
|
project.fragment.lock.json
|
||||||
|
artifacts/
|
||||||
|
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*_i.h
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*.log
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.svclog
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
_Chutzpah*
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opendb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
*.VC.db
|
||||||
|
*.VC.VC.opendb
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
*.sap
|
||||||
|
|
||||||
|
# TFS 2012 Local Workspace
|
||||||
|
$tf/
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
*.gpState
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
_ReSharper*/
|
||||||
|
*.[Rr]e[Ss]harper
|
||||||
|
*.DotSettings.user
|
||||||
|
|
||||||
|
# JustCode is a .NET coding add-in
|
||||||
|
.JustCode
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
_TeamCity*
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
*.dotCover
|
||||||
|
|
||||||
|
# Visual Studio code coverage results
|
||||||
|
*.coverage
|
||||||
|
*.coveragexml
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
_NCrunch_*
|
||||||
|
.*crunch*.local.xml
|
||||||
|
nCrunchTemp_*
|
||||||
|
|
||||||
|
# MightyMoose
|
||||||
|
*.mm.*
|
||||||
|
AutoTest.Net/
|
||||||
|
|
||||||
|
# Web workbench (sass)
|
||||||
|
.sass-cache/
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
[Ee]xpress/
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
DocProject/buildhelp/
|
||||||
|
DocProject/Help/*.HxT
|
||||||
|
DocProject/Help/*.HxC
|
||||||
|
DocProject/Help/*.hhc
|
||||||
|
DocProject/Help/*.hhk
|
||||||
|
DocProject/Help/*.hhp
|
||||||
|
DocProject/Help/Html2
|
||||||
|
DocProject/Help/html
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
publish/
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.azurePubxml
|
||||||
|
# TODO: Comment the next line if you want to checkin your web deploy settings
|
||||||
|
# but database connection strings (with potential passwords) will be unencrypted
|
||||||
|
*.pubxml
|
||||||
|
*.publishproj
|
||||||
|
|
||||||
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||||
|
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||||
|
# in these scripts will be unencrypted
|
||||||
|
PublishScripts/
|
||||||
|
|
||||||
|
# NuGet Packages
|
||||||
|
*.nupkg
|
||||||
|
# The packages folder can be ignored because of Package Restore
|
||||||
|
**/packages/*
|
||||||
|
# except build/, which is used as an MSBuild target.
|
||||||
|
!**/packages/build/
|
||||||
|
# Uncomment if necessary however generally it will be regenerated when needed
|
||||||
|
#!**/packages/repositories.config
|
||||||
|
# NuGet v3's project.json files produces more ignoreable files
|
||||||
|
*.nuget.props
|
||||||
|
*.nuget.targets
|
||||||
|
|
||||||
|
# Microsoft Azure Build Output
|
||||||
|
csx/
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Microsoft Azure Emulator
|
||||||
|
ecf/
|
||||||
|
rcf/
|
||||||
|
|
||||||
|
# Windows Store app package directories and files
|
||||||
|
AppPackages/
|
||||||
|
BundleArtifacts/
|
||||||
|
Package.StoreAssociation.xml
|
||||||
|
_pkginfo.txt
|
||||||
|
|
||||||
|
# Visual Studio cache files
|
||||||
|
# files ending in .cache can be ignored
|
||||||
|
*.[Cc]ache
|
||||||
|
# but keep track of directories ending in .cache
|
||||||
|
!*.[Cc]ache/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
ClientBin/
|
||||||
|
~$*
|
||||||
|
*~
|
||||||
|
*.dbmdl
|
||||||
|
*.dbproj.schemaview
|
||||||
|
*.jfm
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
node_modules/
|
||||||
|
orleans.codegen.cs
|
||||||
|
|
||||||
|
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||||
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||||
|
#bower_components/
|
||||||
|
|
||||||
|
# RIA/Silverlight projects
|
||||||
|
Generated_Code/
|
||||||
|
|
||||||
|
# Backup & report files from converting an old project file
|
||||||
|
# to a newer Visual Studio version. Backup files are not needed,
|
||||||
|
# because we have git ;-)
|
||||||
|
_UpgradeReport_Files/
|
||||||
|
Backup*/
|
||||||
|
UpgradeLog*.XML
|
||||||
|
UpgradeLog*.htm
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
*.mdf
|
||||||
|
*.ldf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rdl.data
|
||||||
|
*.bim.layout
|
||||||
|
*.bim_*.settings
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
FakesAssemblies/
|
||||||
|
|
||||||
|
# GhostDoc plugin setting file
|
||||||
|
*.GhostDoc.xml
|
||||||
|
|
||||||
|
# Node.js Tools for Visual Studio
|
||||||
|
.ntvs_analysis.dat
|
||||||
|
|
||||||
|
# Visual Studio 6 build log
|
||||||
|
*.plg
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace options file
|
||||||
|
*.opt
|
||||||
|
|
||||||
|
# Visual Studio LightSwitch build output
|
||||||
|
**/*.HTMLClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/ModelManifest.xml
|
||||||
|
**/*.Server/GeneratedArtifacts
|
||||||
|
**/*.Server/ModelManifest.xml
|
||||||
|
_Pvt_Extensions
|
||||||
|
|
||||||
|
# Paket dependency manager
|
||||||
|
.paket/paket.exe
|
||||||
|
paket-files/
|
||||||
|
|
||||||
|
# FAKE - F# Make
|
||||||
|
.fake/
|
||||||
|
|
||||||
|
# JetBrains Rider
|
||||||
|
.idea/
|
||||||
|
*.sln.iml
|
||||||
|
|
||||||
|
# CodeRush
|
||||||
|
.cr/
|
||||||
|
|
||||||
|
# Python Tools for Visual Studio (PTVS)
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Cake - Uncomment if you are using it
|
||||||
|
# tools/
|
||||||
|
|
||||||
|
### Csharp ###
|
||||||
|
##
|
||||||
|
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.rsuser
|
||||||
|
|
||||||
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
|
|
||||||
|
# Mono auto generated files
|
||||||
|
mono_crash.*
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Ww][Ii][Nn]32/
|
||||||
|
[Aa][Rr][Mm]/
|
||||||
|
[Aa][Rr][Mm]64/
|
||||||
|
[Ll]ogs/
|
||||||
|
|
||||||
|
# Visual Studio 2015/2017 cache/options directory
|
||||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||||
|
|
||||||
|
# Visual Studio 2017 auto generated files
|
||||||
|
Generated\ Files/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
|
||||||
|
# NUnit
|
||||||
|
nunit-*.xml
|
||||||
|
|
||||||
|
# Build Results of an ATL Project
|
||||||
|
|
||||||
|
# Benchmark Results
|
||||||
|
BenchmarkDotNet.Artifacts/
|
||||||
|
|
||||||
|
# .NET Core
|
||||||
|
|
||||||
|
# ASP.NET Scaffolding
|
||||||
|
ScaffoldingReadMe.txt
|
||||||
|
|
||||||
|
# StyleCop
|
||||||
|
StyleCopReport.xml
|
||||||
|
|
||||||
|
# Files built by Visual Studio
|
||||||
|
*_h.h
|
||||||
|
*.iobj
|
||||||
|
*.ipdb
|
||||||
|
*_wpftmp.csproj
|
||||||
|
*.tlog
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
|
||||||
|
# Visual Studio Trace Files
|
||||||
|
*.e2e
|
||||||
|
|
||||||
|
# TFS 2012 Local Workspace
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
|
||||||
|
# AxoCover is a Code Coverage Tool
|
||||||
|
.axoCover/*
|
||||||
|
!.axoCover/settings.json
|
||||||
|
|
||||||
|
# Coverlet is a free, cross platform Code Coverage Tool
|
||||||
|
coverage*.json
|
||||||
|
coverage*.xml
|
||||||
|
coverage*.info
|
||||||
|
|
||||||
|
# Visual Studio code coverage results
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
|
||||||
|
# MightyMoose
|
||||||
|
|
||||||
|
# Web workbench (sass)
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||||
|
# but database connection strings (with potential passwords) will be unencrypted
|
||||||
|
|
||||||
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||||
|
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||||
|
# in these scripts will be unencrypted
|
||||||
|
|
||||||
|
# NuGet Packages
|
||||||
|
# NuGet Symbol Packages
|
||||||
|
*.snupkg
|
||||||
|
# The packages folder can be ignored because of Package Restore
|
||||||
|
**/[Pp]ackages/*
|
||||||
|
# except build/, which is used as an MSBuild target.
|
||||||
|
!**/[Pp]ackages/build/
|
||||||
|
# Uncomment if necessary however generally it will be regenerated when needed
|
||||||
|
#!**/[Pp]ackages/repositories.config
|
||||||
|
# NuGet v3's project.json files produces more ignorable files
|
||||||
|
|
||||||
|
# Microsoft Azure Build Output
|
||||||
|
|
||||||
|
# Microsoft Azure Emulator
|
||||||
|
|
||||||
|
# Windows Store app package directories and files
|
||||||
|
*.appx
|
||||||
|
*.appxbundle
|
||||||
|
*.appxupload
|
||||||
|
|
||||||
|
# Visual Studio cache files
|
||||||
|
# files ending in .cache can be ignored
|
||||||
|
# but keep track of directories ending in .cache
|
||||||
|
!?*.[Cc]ache/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
|
||||||
|
# Including strong name files can present a security risk
|
||||||
|
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||||
|
#*.snk
|
||||||
|
|
||||||
|
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||||
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||||
|
|
||||||
|
# RIA/Silverlight projects
|
||||||
|
|
||||||
|
# Backup & report files from converting an old project file
|
||||||
|
# to a newer Visual Studio version. Backup files are not needed,
|
||||||
|
# because we have git ;-)
|
||||||
|
ServiceFabricBackup/
|
||||||
|
*.rptproj.bak
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
*.ndf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rptproj.rsuser
|
||||||
|
*- [Bb]ackup.rdl
|
||||||
|
*- [Bb]ackup ([0-9]).rdl
|
||||||
|
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
|
||||||
|
# GhostDoc plugin setting file
|
||||||
|
|
||||||
|
# Node.js Tools for Visual Studio
|
||||||
|
|
||||||
|
# Visual Studio 6 build log
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace options file
|
||||||
|
|
||||||
|
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||||
|
*.vbw
|
||||||
|
|
||||||
|
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
|
||||||
|
*.vbp
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
|
||||||
|
*.dsw
|
||||||
|
*.dsp
|
||||||
|
|
||||||
|
# Visual Studio 6 technical files
|
||||||
|
|
||||||
|
# Visual Studio LightSwitch build output
|
||||||
|
|
||||||
|
# Paket dependency manager
|
||||||
|
|
||||||
|
# FAKE - F# Make
|
||||||
|
|
||||||
|
# CodeRush personal settings
|
||||||
|
.cr/personal
|
||||||
|
|
||||||
|
# Python Tools for Visual Studio (PTVS)
|
||||||
|
|
||||||
|
# Cake - Uncomment if you are using it
|
||||||
|
# tools/**
|
||||||
|
# !tools/packages.config
|
||||||
|
|
||||||
|
# Tabs Studio
|
||||||
|
*.tss
|
||||||
|
|
||||||
|
# Telerik's JustMock configuration file
|
||||||
|
*.jmconfig
|
||||||
|
|
||||||
|
# BizTalk build output
|
||||||
|
*.btp.cs
|
||||||
|
*.btm.cs
|
||||||
|
*.odx.cs
|
||||||
|
*.xsd.cs
|
||||||
|
|
||||||
|
# OpenCover UI analysis results
|
||||||
|
OpenCover/
|
||||||
|
|
||||||
|
# Azure Stream Analytics local run output
|
||||||
|
ASALocalRun/
|
||||||
|
|
||||||
|
# MSBuild Binary and Structured Log
|
||||||
|
*.binlog
|
||||||
|
|
||||||
|
# NVidia Nsight GPU debugger configuration file
|
||||||
|
*.nvuser
|
||||||
|
|
||||||
|
# MFractors (Xamarin productivity tool) working folder
|
||||||
|
.mfractor/
|
||||||
|
|
||||||
|
# Local History for Visual Studio
|
||||||
|
.localhistory/
|
||||||
|
|
||||||
|
# Visual Studio History (VSHistory) files
|
||||||
|
.vshistory/
|
||||||
|
|
||||||
|
# BeatPulse healthcheck temp database
|
||||||
|
healthchecksdb
|
||||||
|
|
||||||
|
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||||
|
MigrationBackup/
|
||||||
|
|
||||||
|
# Ionide (cross platform F# VS Code tools) working folder
|
||||||
|
.ionide/
|
||||||
|
|
||||||
|
# Fody - auto-generated XML schema
|
||||||
|
FodyWeavers.xsd
|
||||||
|
|
||||||
|
# VS Code files for those working on multiple tools
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/extensions.json
|
||||||
|
*.code-workspace
|
||||||
|
|
||||||
|
# Local History for Visual Studio Code
|
||||||
|
.history/
|
||||||
|
|
||||||
|
# Windows Installer files from build outputs
|
||||||
|
*.cab
|
||||||
|
*.msi
|
||||||
|
*.msix
|
||||||
|
*.msm
|
||||||
|
*.msp
|
||||||
|
|
||||||
|
# JetBrains Rider
|
||||||
|
|
||||||
|
### Rider ###
|
||||||
|
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
||||||
|
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||||
|
|
||||||
|
# User-specific stuff
|
||||||
|
.idea/**/workspace.xml
|
||||||
|
.idea/**/tasks.xml
|
||||||
|
.idea/**/usage.statistics.xml
|
||||||
|
.idea/**/dictionaries
|
||||||
|
.idea/**/shelf
|
||||||
|
|
||||||
|
# AWS User-specific
|
||||||
|
.idea/**/aws.xml
|
||||||
|
|
||||||
|
# Generated files
|
||||||
|
.idea/**/contentModel.xml
|
||||||
|
|
||||||
|
# Sensitive or high-churn files
|
||||||
|
.idea/**/dataSources/
|
||||||
|
.idea/**/dataSources.ids
|
||||||
|
.idea/**/dataSources.local.xml
|
||||||
|
.idea/**/sqlDataSources.xml
|
||||||
|
.idea/**/dynamic.xml
|
||||||
|
.idea/**/uiDesigner.xml
|
||||||
|
.idea/**/dbnavigator.xml
|
||||||
|
|
||||||
|
# Gradle
|
||||||
|
.idea/**/gradle.xml
|
||||||
|
.idea/**/libraries
|
||||||
|
|
||||||
|
# Gradle and Maven with auto-import
|
||||||
|
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||||
|
# since they will be recreated, and may cause churn. Uncomment if using
|
||||||
|
# auto-import.
|
||||||
|
# .idea/artifacts
|
||||||
|
# .idea/compiler.xml
|
||||||
|
# .idea/jarRepositories.xml
|
||||||
|
# .idea/modules.xml
|
||||||
|
# .idea/*.iml
|
||||||
|
# .idea/modules
|
||||||
|
# *.iml
|
||||||
|
# *.ipr
|
||||||
|
|
||||||
|
# CMake
|
||||||
|
cmake-build-*/
|
||||||
|
|
||||||
|
# Mongo Explorer plugin
|
||||||
|
.idea/**/mongoSettings.xml
|
||||||
|
|
||||||
|
# File-based project format
|
||||||
|
*.iws
|
||||||
|
|
||||||
|
# IntelliJ
|
||||||
|
out/
|
||||||
|
|
||||||
|
# mpeltonen/sbt-idea plugin
|
||||||
|
.idea_modules/
|
||||||
|
|
||||||
|
# JIRA plugin
|
||||||
|
atlassian-ide-plugin.xml
|
||||||
|
|
||||||
|
# Cursive Clojure plugin
|
||||||
|
.idea/replstate.xml
|
||||||
|
|
||||||
|
# SonarLint plugin
|
||||||
|
.idea/sonarlint/
|
||||||
|
|
||||||
|
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||||
|
com_crashlytics_export_strings.xml
|
||||||
|
crashlytics.properties
|
||||||
|
crashlytics-build.properties
|
||||||
|
fabric.properties
|
||||||
|
|
||||||
|
# Editor-based Rest Client
|
||||||
|
.idea/httpRequests
|
||||||
|
|
||||||
|
# Android studio 3.1+ serialized cache file
|
||||||
|
.idea/caches/build_file_checksums.ser
|
||||||
|
|
||||||
|
### VisualStudioCode ###
|
||||||
|
!.vscode/*.code-snippets
|
||||||
|
|
||||||
|
# Local History for Visual Studio Code
|
||||||
|
|
||||||
|
# Built Visual Studio Code Extensions
|
||||||
|
*.vsix
|
||||||
|
|
||||||
|
### VisualStudioCode Patch ###
|
||||||
|
# Ignore all local history of files
|
||||||
|
.history
|
||||||
|
.ionide
|
||||||
|
|
||||||
|
# End of https://www.toptal.com/developers/gitignore/api/csharp,aspnetcore,rider,visualstudiocode
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.0.31903.59
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{D7A1C18D-CC03-4704-B5B7-2F8B1A04E279}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastBlog.Web", "src\FastBlog.Web\FastBlog.Web.csproj", "{C9A19395-1E93-488F-AD10-2C7D2DB78EB0}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastBlog.Core", "src\FastBlog.Core\FastBlog.Core.csproj", "{B8CDA182-8097-4EF5-8EE2-CB73AF4B58AC}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{C9A19395-1E93-488F-AD10-2C7D2DB78EB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{C9A19395-1E93-488F-AD10-2C7D2DB78EB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{C9A19395-1E93-488F-AD10-2C7D2DB78EB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{C9A19395-1E93-488F-AD10-2C7D2DB78EB0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{B8CDA182-8097-4EF5-8EE2-CB73AF4B58AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{B8CDA182-8097-4EF5-8EE2-CB73AF4B58AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{B8CDA182-8097-4EF5-8EE2-CB73AF4B58AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{B8CDA182-8097-4EF5-8EE2-CB73AF4B58AC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(NestedProjects) = preSolution
|
||||||
|
{C9A19395-1E93-488F-AD10-2C7D2DB78EB0} = {D7A1C18D-CC03-4704-B5B7-2F8B1A04E279}
|
||||||
|
{B8CDA182-8097-4EF5-8EE2-CB73AF4B58AC} = {D7A1C18D-CC03-4704-B5B7-2F8B1A04E279}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
using FluentMigrator;
|
||||||
|
|
||||||
|
namespace FastBlog.Core.Db.Migrations;
|
||||||
|
|
||||||
|
[Migration(202409212014, "Initial migration")]
|
||||||
|
public class Init : Migration
|
||||||
|
{
|
||||||
|
public override void Up()
|
||||||
|
{
|
||||||
|
Create.Table("Blogs")
|
||||||
|
.WithColumn("Id").AsInt32().PrimaryKey().Unique().Identity()
|
||||||
|
.WithColumn("Title").AsString()
|
||||||
|
.WithColumn("SourceLocation").AsString()
|
||||||
|
.WithColumn("Slug").AsString().Unique().Nullable()
|
||||||
|
.WithColumn("ShowDetails").AsBoolean()
|
||||||
|
.WithColumn("ImageUrl").AsString().Nullable()
|
||||||
|
.WithColumn("CreatedAt").AsDateTime()
|
||||||
|
.WithColumn("ModifiedAt").AsDateTime()
|
||||||
|
.WithColumn("Signature").AsString().Nullable()
|
||||||
|
.WithColumn("FullWidth").AsBoolean()
|
||||||
|
.WithColumn("Deleted").AsBoolean()
|
||||||
|
.WithColumn("Visible").AsBoolean();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Down()
|
||||||
|
{
|
||||||
|
Delete.Table("Blogs");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
using System.Data;
|
||||||
|
using Microsoft.Data.Sqlite;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
|
namespace FastBlog.Core.Db;
|
||||||
|
|
||||||
|
public class SqliteConnectionFactory(IConfiguration configuration)
|
||||||
|
{
|
||||||
|
public IDbConnection Create() =>
|
||||||
|
new SqliteConnection(configuration.GetConnectionString("Sqlite"));
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,80 @@
|
||||||
|
using System.Data;
|
||||||
|
using FastBlog.Core.Abstractions.Repositories.Blogs;
|
||||||
|
using FastBlog.Core.Db;
|
||||||
|
using FastBlog.Core.Errors.Blogs;
|
||||||
|
using FastBlog.Core.Models.Blogs;
|
||||||
|
using FastBlog.Core.Options;
|
||||||
|
using FastBlog.Core.Repositories;
|
||||||
|
using FastBlog.Core.Services;
|
||||||
|
using FluentMigrator.Runner;
|
||||||
|
using Microsoft.Data.Sqlite;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
|
namespace FastBlog.Core;
|
||||||
|
|
||||||
|
public static class DependencyInjection
|
||||||
|
{
|
||||||
|
public static IServiceCollection AddCore(this IServiceCollection services, IConfiguration configuration)
|
||||||
|
{
|
||||||
|
// applicatrion
|
||||||
|
services.AddSingleton<BlogService>();
|
||||||
|
|
||||||
|
// options
|
||||||
|
services.Configure<FileStoreOptions>(configuration.GetSection("FileStore"));
|
||||||
|
|
||||||
|
// infrastructure
|
||||||
|
services.AddSingleton<IBlogMetaRepository, BlogMetaRepository>();
|
||||||
|
services.AddSingleton<IBlogSourceRepository, BlogSourceRepository>();
|
||||||
|
|
||||||
|
// storage
|
||||||
|
var connectionString = configuration.GetConnectionString("Sqlite");
|
||||||
|
|
||||||
|
services.AddScoped<IDbConnection>(_ => new SqliteConnection());
|
||||||
|
services.AddTransient<SqliteConnection>(_ => new(connectionString));
|
||||||
|
services.AddSingleton<SqliteConnectionFactory>(_ => new(configuration));
|
||||||
|
|
||||||
|
services.AddFluentMigratorCore()
|
||||||
|
.ConfigureRunner(rb =>
|
||||||
|
rb.AddSQLite()
|
||||||
|
.WithGlobalConnectionString(connectionString)
|
||||||
|
.ScanIn(typeof(Db.Migrations.Init).Assembly).For.Migrations())
|
||||||
|
.AddLogging(lb => lb.AddFluentMigratorConsole());
|
||||||
|
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task MigrateUp(this IServiceProvider provider, IConfiguration configuration)
|
||||||
|
{
|
||||||
|
await using var scope = provider.CreateAsyncScope();
|
||||||
|
var runner = scope.ServiceProvider.GetRequiredService<IMigrationRunner>();
|
||||||
|
runner.MigrateUp();
|
||||||
|
|
||||||
|
var blogService = scope.ServiceProvider.GetRequiredService<BlogService>();
|
||||||
|
var mainPage = await blogService.Get(null);
|
||||||
|
if (mainPage.IsOk)
|
||||||
|
return;
|
||||||
|
|
||||||
|
await blogService.UpdateBlog(new Blog
|
||||||
|
{
|
||||||
|
Text = BlogDefaultBody,
|
||||||
|
Metadata = new BlogMeta
|
||||||
|
{
|
||||||
|
Title = "Welcome",
|
||||||
|
Slug = null,
|
||||||
|
CreatedAt = DateTime.UtcNow,
|
||||||
|
ModifiedAt = DateTime.UtcNow,
|
||||||
|
SourceLocation = "welcome.md",
|
||||||
|
ShowDetails = false,
|
||||||
|
Deleted = false,
|
||||||
|
Visible = false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private const string BlogDefaultBody = """
|
||||||
|
# Index Page
|
||||||
|
---
|
||||||
|
Welcome to your first blog
|
||||||
|
""";
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
namespace FastBlog.Core.Errors;
|
||||||
|
|
||||||
|
public enum FileError
|
||||||
|
{
|
||||||
|
NotFound,
|
||||||
|
AlreadyExists,
|
||||||
|
InvalidDirectory
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.Extensions.Configuration.Abstractions">
|
||||||
|
<HintPath>..\..\..\..\..\..\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.4\Microsoft.Extensions.Configuration.Abstractions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions">
|
||||||
|
<HintPath>..\..\..\..\..\..\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.4\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Dapper" Version="2.1.35" />
|
||||||
|
<PackageReference Include="FluentMigrator" Version="5.2.0" />
|
||||||
|
<PackageReference Include="FluentMigrator.Runner.SQLite" Version="5.2.0" />
|
||||||
|
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.8" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Options" Version="8.0.2" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="8.0.0" />
|
||||||
|
<PackageReference Include="RhoMicro.CodeAnalysis.UnionsGenerator" Version="15.1.7">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="SQLite" Version="3.13.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
using RhoMicro.CodeAnalysis;
|
||||||
|
|
||||||
|
namespace FastBlog.Core.Models;
|
||||||
|
|
||||||
|
public readonly partial struct Result<[UnionType(Alias = "Ok")] TOk, [UnionType(Alias = "Error")] TErr>;
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
namespace FastBlog.Core.Options;
|
||||||
|
|
||||||
|
public class FileStoreOptions
|
||||||
|
{
|
||||||
|
public required string SourcePath { get; init; }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
using Dapper;
|
||||||
|
using FastBlog.Core.Abstractions.Repositories.Blogs;
|
||||||
|
using FastBlog.Core.Db;
|
||||||
|
using FastBlog.Core.Errors.Blogs;
|
||||||
|
using FastBlog.Core.Models;
|
||||||
|
using FastBlog.Core.Models.Blogs;
|
||||||
|
using Microsoft.Data.Sqlite;
|
||||||
|
|
||||||
|
namespace FastBlog.Core.Repositories;
|
||||||
|
|
||||||
|
public sealed class BlogMetaRepository(SqliteConnectionFactory connectionFactory) : IBlogMetaRepository
|
||||||
|
{
|
||||||
|
public async Task<Result<BlogMeta, BlogError>> Get(string? slug)
|
||||||
|
{
|
||||||
|
using var connection = connectionFactory.Create();
|
||||||
|
|
||||||
|
const string sqlNull = """
|
||||||
|
select * from Blogs
|
||||||
|
where slug is null
|
||||||
|
and CreatedAt <= datetime('now')
|
||||||
|
""";
|
||||||
|
|
||||||
|
const string sql = """
|
||||||
|
select * from Blogs
|
||||||
|
where (slug = @slug or id = cast(@slug as integer))
|
||||||
|
and deleted = 0
|
||||||
|
and CreatedAt <= datetime('now')
|
||||||
|
""";
|
||||||
|
|
||||||
|
if (slug is null)
|
||||||
|
{
|
||||||
|
var resultNull = await connection.QueryFirstOrDefaultAsync<BlogMeta>(sqlNull);
|
||||||
|
if (resultNull is null) return BlogError.NotFound;
|
||||||
|
return resultNull;
|
||||||
|
}
|
||||||
|
|
||||||
|
var result = await connection.QueryFirstOrDefaultAsync<BlogMeta>(sql, new { slug });
|
||||||
|
if (result is null) return BlogError.NotFound;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Result<BlogMeta, BlogError>> GetForEdit(int id)
|
||||||
|
{
|
||||||
|
using var connection = connectionFactory.Create();
|
||||||
|
|
||||||
|
const string sql = """
|
||||||
|
select * from Blogs
|
||||||
|
where id = @id
|
||||||
|
and deleted = 0
|
||||||
|
""";
|
||||||
|
|
||||||
|
var result = await connection.QueryFirstOrDefaultAsync<BlogMeta>(sql, new { id });
|
||||||
|
if (result is null) return BlogError.NotFound;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Result<BlogMeta, BlogError>> Add(BlogMeta meta)
|
||||||
|
{
|
||||||
|
using var connection = connectionFactory.Create();
|
||||||
|
|
||||||
|
const string sql = """
|
||||||
|
insert into Blogs (Title, SourceLocation, Slug, ShowDetails, ImageUrl, CreatedAt, ModifiedAt, Signature, FullWidth, Deleted, Visible)
|
||||||
|
values (@Title, @SourceLocation, @Slug, @ShowDetails, @ImageUrl, @CreatedAt, @ModifiedAt, @Signature, @FullWidth, @Deleted, @Visible)
|
||||||
|
returning *
|
||||||
|
""";
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var result = await connection.QueryFirstOrDefaultAsync<BlogMeta>(sql, meta);
|
||||||
|
if (result is null) return BlogError.NotFound;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
catch (SqliteException ex)
|
||||||
|
{
|
||||||
|
if (ex.SqliteErrorCode == 19) // Unique constraint violation
|
||||||
|
return BlogError.AlreadyExists; // You need to define this error in the BlogError enum
|
||||||
|
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Result<BlogMeta, BlogError>> Update(BlogMeta meta)
|
||||||
|
{
|
||||||
|
using var connection = connectionFactory.Create();
|
||||||
|
|
||||||
|
const string sql = """
|
||||||
|
update Blogs
|
||||||
|
set Title = @Title, SourceLocation = @SourceLocation, Slug = @Slug, ShowDetails = @ShowDetails, ImageUrl = @ImageUrl, CreatedAt = @CreatedAt, ModifiedAt = @ModifiedAt, Signature = @Signature, FullWidth = @FullWidth, Deleted = @Deleted, Visible = @Visible
|
||||||
|
where id = @Id
|
||||||
|
returning *
|
||||||
|
""";
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var result = await connection.QueryFirstOrDefaultAsync<BlogMeta>(sql, meta);
|
||||||
|
if (result is null) return BlogError.NotFound;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
catch (SqliteException ex)
|
||||||
|
{
|
||||||
|
if (ex.SqliteErrorCode == 19) // Unique constraint violation
|
||||||
|
return BlogError.AlreadyExists;
|
||||||
|
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
using FastBlog.Core.Abstractions.Repositories.Blogs;
|
||||||
|
using FastBlog.Core.Errors;
|
||||||
|
using FastBlog.Core.Models;
|
||||||
|
using FastBlog.Core.Options;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
|
||||||
|
namespace FastBlog.Core.Repositories;
|
||||||
|
|
||||||
|
public sealed class BlogSourceRepository(IOptionsMonitor<FileStoreOptions> fileOptions) : IBlogSourceRepository
|
||||||
|
{
|
||||||
|
public async Task<Result<string, FileError>> Read(string path)
|
||||||
|
{
|
||||||
|
var targetPath = Path.Combine(fileOptions.CurrentValue.SourcePath, path);
|
||||||
|
if (!File.Exists(targetPath))
|
||||||
|
return FileError.NotFound;
|
||||||
|
return await File.ReadAllTextAsync(targetPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Result<bool, FileError>> Write(string path, string text)
|
||||||
|
{
|
||||||
|
var targetPath = Path.Combine(fileOptions.CurrentValue.SourcePath, path);
|
||||||
|
|
||||||
|
var directoryPath = Path.GetDirectoryName(targetPath);
|
||||||
|
|
||||||
|
if (!Directory.Exists(directoryPath))
|
||||||
|
Directory.CreateDirectory(directoryPath!);
|
||||||
|
|
||||||
|
if (File.Exists(targetPath))
|
||||||
|
return FileError.AlreadyExists;
|
||||||
|
|
||||||
|
await File.WriteAllTextAsync(targetPath, text);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Result<bool, FileError> DeleteSync(string path)
|
||||||
|
{
|
||||||
|
//TODO: If folder is empty, delete
|
||||||
|
var targetPath = Path.Combine(fileOptions.CurrentValue.SourcePath, path);
|
||||||
|
if (!File.Exists(targetPath))
|
||||||
|
return FileError.NotFound;
|
||||||
|
File.Delete(targetPath);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,112 @@
|
||||||
|
using System.Diagnostics;
|
||||||
|
using FastBlog.Core.Abstractions.Repositories.Blogs;
|
||||||
|
using FastBlog.Core.Errors;
|
||||||
|
using FastBlog.Core.Errors.Blogs;
|
||||||
|
using FastBlog.Core.Models;
|
||||||
|
using FastBlog.Core.Models.Blogs;
|
||||||
|
|
||||||
|
namespace FastBlog.Core.Services;
|
||||||
|
|
||||||
|
public sealed class BlogService(IBlogMetaRepository metaRepository, IBlogSourceRepository sourceRepository)
|
||||||
|
{
|
||||||
|
public async Task<Result<Blog, BlogError>> Get(string? slug)
|
||||||
|
{
|
||||||
|
var metaResult = await metaRepository.Get(slug);
|
||||||
|
if (metaResult.IsError)
|
||||||
|
return metaResult.AsError;
|
||||||
|
var sourceResult = await sourceRepository.Read(metaResult.AsOk.SourceLocation);
|
||||||
|
|
||||||
|
if (sourceResult.IsError)
|
||||||
|
{
|
||||||
|
throw new FileNotFoundException("Blog with metadata cannot be found");
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Blog
|
||||||
|
{
|
||||||
|
Metadata = metaResult.AsOk,
|
||||||
|
Text = sourceResult.AsOk
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Result<Blog, BlogError>> GetForEdit(int id)
|
||||||
|
{
|
||||||
|
var metaResult = await metaRepository.GetForEdit(id);
|
||||||
|
if (metaResult.IsError)
|
||||||
|
return metaResult.AsError;
|
||||||
|
var sourceResult = await sourceRepository.Read(metaResult.AsOk.SourceLocation);
|
||||||
|
|
||||||
|
if (sourceResult.IsError)
|
||||||
|
{
|
||||||
|
throw new FileNotFoundException("Blog with metadata cannot be found");
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Blog
|
||||||
|
{
|
||||||
|
Metadata = metaResult.AsOk,
|
||||||
|
Text = sourceResult.AsOk
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Task<Result<Blog, BlogError>> UpdateBlog(Blog blog)
|
||||||
|
{
|
||||||
|
return blog.Metadata.Id is null ? CreateBlog(blog) : UpdateBlogInternal(blog);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<Result<Blog, BlogError>> CreateBlog(Blog newBlog)
|
||||||
|
{
|
||||||
|
var metaResult = await metaRepository.Add(newBlog.Metadata);
|
||||||
|
if (metaResult.IsError)
|
||||||
|
return metaResult.AsError;
|
||||||
|
|
||||||
|
var sourceResult = await sourceRepository.Write(metaResult.AsOk.SourceLocation, newBlog.Text);
|
||||||
|
|
||||||
|
if (sourceResult.IsError)
|
||||||
|
return sourceResult.AsError switch
|
||||||
|
{
|
||||||
|
FileError.AlreadyExists => BlogError.AlreadyExists,
|
||||||
|
FileError.InvalidDirectory => throw new Exception(
|
||||||
|
"Invalid configuration: Directory for blog storage not found"),
|
||||||
|
_ => throw new UnreachableException()
|
||||||
|
};
|
||||||
|
|
||||||
|
return new Blog
|
||||||
|
{
|
||||||
|
Metadata = metaResult.AsOk,
|
||||||
|
Text = newBlog.Text
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private async Task<Result<Blog, BlogError>> UpdateBlogInternal(Blog blog)
|
||||||
|
{
|
||||||
|
var oldMeta = await metaRepository.GetForEdit(blog.Metadata.Id!.Value);
|
||||||
|
if (oldMeta.IsError)
|
||||||
|
return BlogError.NotFound;
|
||||||
|
|
||||||
|
var toDelete = oldMeta.AsOk.SourceLocation;
|
||||||
|
|
||||||
|
var metaResult = await metaRepository.Update(blog.Metadata);
|
||||||
|
if (metaResult.IsError)
|
||||||
|
return metaResult.AsError;
|
||||||
|
|
||||||
|
_ = sourceRepository.DeleteSync(toDelete);
|
||||||
|
|
||||||
|
var sourceResult = await sourceRepository.Write(metaResult.AsOk.SourceLocation, blog.Text);
|
||||||
|
|
||||||
|
if (sourceResult.IsError)
|
||||||
|
return sourceResult.AsError switch
|
||||||
|
{
|
||||||
|
FileError.AlreadyExists => BlogError.AlreadyExists,
|
||||||
|
FileError.InvalidDirectory => throw new Exception(
|
||||||
|
"Invalid configuration: Directory for blog storage not found"),
|
||||||
|
_ => throw new UnreachableException()
|
||||||
|
};
|
||||||
|
|
||||||
|
return new Blog
|
||||||
|
{
|
||||||
|
Metadata = metaResult.AsOk,
|
||||||
|
Text = blog.Text
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,162 @@
|
||||||
|
using System.Diagnostics;
|
||||||
|
using FastBlog.Core.Errors.Blogs;
|
||||||
|
using FastBlog.Core.Models.Blogs;
|
||||||
|
using FastBlog.Core.Services;
|
||||||
|
using FastBlog.Web.Models;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace FastBlog.Web.Controllers;
|
||||||
|
|
||||||
|
[Route("")]
|
||||||
|
[Route("blog")]
|
||||||
|
public class BlogController(BlogService service) : Controller
|
||||||
|
{
|
||||||
|
[HttpGet]
|
||||||
|
[Route("{*slug}")]
|
||||||
|
public async Task<IActionResult> Index(string? slug)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(slug))
|
||||||
|
slug = null;
|
||||||
|
|
||||||
|
var blog = await service.Get(slug);
|
||||||
|
|
||||||
|
if (blog.IsError)
|
||||||
|
{
|
||||||
|
return blog.AsError switch
|
||||||
|
{
|
||||||
|
BlogError.NotFound => NotFound(),
|
||||||
|
_ => throw new ArgumentOutOfRangeException()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(blog.AsOk);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("")]
|
||||||
|
public async Task<IActionResult> Index()
|
||||||
|
{
|
||||||
|
var blog = await service.Get(null);
|
||||||
|
|
||||||
|
if (blog.IsError)
|
||||||
|
{
|
||||||
|
return blog.AsError switch
|
||||||
|
{
|
||||||
|
BlogError.NotFound => NotFound(),
|
||||||
|
_ => throw new ArgumentOutOfRangeException()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(blog.AsOk);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("edit/{id:int?}")]
|
||||||
|
public async ValueTask<IActionResult> Edit(int? id)
|
||||||
|
{
|
||||||
|
if (!id.HasValue)
|
||||||
|
{
|
||||||
|
var date = DateTime.Now;
|
||||||
|
return View(
|
||||||
|
new EditBlog
|
||||||
|
{
|
||||||
|
Text = "# My new blog",
|
||||||
|
Title = "Blog from " + DateTime.Now.ToString("g"),
|
||||||
|
SourceLocation = $"{date:yyyy-MM-dd-HH-mm}_blog.md",
|
||||||
|
CreatedAt = date,
|
||||||
|
ModifiedAt = date,
|
||||||
|
FullWidth = false,
|
||||||
|
ShowDetails = true,
|
||||||
|
Slug = "blog-" + date.ToString("yyyy-MM-dd-HH-mm"),
|
||||||
|
Visible = false
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
var result = await service.GetForEdit(id.Value);
|
||||||
|
if (result.IsError)
|
||||||
|
{
|
||||||
|
return result.AsError switch
|
||||||
|
{
|
||||||
|
BlogError.NotFound => NotFound(),
|
||||||
|
_ => throw new UnreachableException()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var blog = result.AsOk;
|
||||||
|
|
||||||
|
return View(new EditBlog
|
||||||
|
{
|
||||||
|
Id = blog.Metadata.Id,
|
||||||
|
Text = blog.Text,
|
||||||
|
Title = blog.Metadata.Title,
|
||||||
|
SourceLocation = blog.Metadata.SourceLocation,
|
||||||
|
CreatedAt = blog.Metadata.CreatedAt,
|
||||||
|
ModifiedAt = blog.Metadata.ModifiedAt,
|
||||||
|
FullWidth = blog.Metadata.FullWidth,
|
||||||
|
ShowDetails = blog.Metadata.ShowDetails,
|
||||||
|
Slug = blog.Metadata.Slug,
|
||||||
|
Visible = blog.Metadata.Visible,
|
||||||
|
ImageUrl = blog.Metadata.ImageUrl,
|
||||||
|
Signature = blog.Metadata.Signature
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Route("edit")]
|
||||||
|
public async Task<IActionResult> Edit([FromForm] EditBlog editBlog)
|
||||||
|
{
|
||||||
|
var result = await service.UpdateBlog(new()
|
||||||
|
{
|
||||||
|
Text = editBlog.Text,
|
||||||
|
Metadata = new()
|
||||||
|
{
|
||||||
|
Id = editBlog.Id,
|
||||||
|
Title = editBlog.Title,
|
||||||
|
Slug = editBlog.Slug,
|
||||||
|
ShowDetails = editBlog.ShowDetailsStr is not null,
|
||||||
|
ImageUrl = editBlog.ImageUrl,
|
||||||
|
CreatedAt = editBlog.CreatedAt,
|
||||||
|
ModifiedAt = editBlog.ModifiedAt,
|
||||||
|
Signature = editBlog.Signature,
|
||||||
|
FullWidth = editBlog.FullWidthStr is not null,
|
||||||
|
Visible = editBlog.VisibleStr is not null,
|
||||||
|
SourceLocation = editBlog.SourceLocation
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (result.IsError)
|
||||||
|
{
|
||||||
|
return result.AsError switch
|
||||||
|
{
|
||||||
|
BlogError.AlreadyExists => Conflict(),
|
||||||
|
_ => throw new ArgumentOutOfRangeException()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return Redirect($"/blog/{editBlog.Slug}");
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Route("preview")]
|
||||||
|
public IActionResult Preview([FromForm] EditBlog editBlog)
|
||||||
|
{
|
||||||
|
return View("Index", new Blog
|
||||||
|
{
|
||||||
|
Text = editBlog.Text,
|
||||||
|
Metadata = new()
|
||||||
|
{
|
||||||
|
Title = editBlog.Title,
|
||||||
|
Slug = editBlog.Slug,
|
||||||
|
ShowDetails = editBlog.ShowDetailsStr is not null,
|
||||||
|
ImageUrl = editBlog.ImageUrl,
|
||||||
|
CreatedAt = editBlog.CreatedAt,
|
||||||
|
ModifiedAt = editBlog.ModifiedAt,
|
||||||
|
Signature = editBlog.Signature,
|
||||||
|
FullWidth = editBlog.FullWidthStr is not null,
|
||||||
|
Visible = editBlog.VisibleStr is not null,
|
||||||
|
SourceLocation = editBlog.SourceLocation
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\FastBlog.Core\FastBlog.Core.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="HtmlSanitizer" Version="8.1.870" />
|
||||||
|
<PackageReference Include="Markdig" Version="0.37.0" />
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="8.0.8" />
|
||||||
|
<PackageReference Include="Pek.Markdig.HighlightJs" Version="0.5.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-grid.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-grid.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-grid.min.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-grid.min.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-grid.rtl.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-grid.rtl.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-grid.rtl.min.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-grid.rtl.min.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-reboot.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-reboot.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-reboot.min.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-reboot.min.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-reboot.rtl.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-reboot.rtl.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-reboot.rtl.min.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-reboot.rtl.min.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-utilities.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-utilities.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-utilities.min.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-utilities.min.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-utilities.rtl.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-utilities.rtl.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-utilities.rtl.min.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-utilities.rtl.min.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap.min.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap.min.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap.rtl.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap.rtl.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap.rtl.min.css" />
|
||||||
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap.rtl.min.css.map" />
|
||||||
|
<_ContentIncludedByDefault Remove="Views\Home\Index.cshtml" />
|
||||||
|
<_ContentIncludedByDefault Remove="Views\Home\Privacy.cshtml" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
namespace FastBlog.Web.Models;
|
||||||
|
|
||||||
|
public sealed class EditBlog
|
||||||
|
{
|
||||||
|
public int? Id { get; init; }
|
||||||
|
public required string Text { get; init; }
|
||||||
|
public required string Title { get; init; }
|
||||||
|
public required string SourceLocation { get; init; }
|
||||||
|
public string? Slug { get; init; }
|
||||||
|
public bool ShowDetails { get; init; }
|
||||||
|
public string? ShowDetailsStr { get; init; }
|
||||||
|
public string? ImageUrl { get; init; }
|
||||||
|
public DateTime CreatedAt { get; init; }
|
||||||
|
public DateTime ModifiedAt { get; init; }
|
||||||
|
public string? Signature { get; init; }
|
||||||
|
public bool FullWidth { get; init; }
|
||||||
|
public string? FullWidthStr { get; init; }
|
||||||
|
public bool Visible { get; init; }
|
||||||
|
public string? VisibleStr { get; init; }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
namespace FastBlog.Web.Models;
|
||||||
|
|
||||||
|
public class ErrorViewModel
|
||||||
|
{
|
||||||
|
public string? RequestId { get; set; }
|
||||||
|
|
||||||
|
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
using FastBlog.Core;
|
||||||
|
|
||||||
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
|
// Add services to the container.
|
||||||
|
if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == Environments.Development)
|
||||||
|
builder.Services.AddControllersWithViews().AddRazorRuntimeCompilation();
|
||||||
|
else
|
||||||
|
builder.Services.AddControllersWithViews();
|
||||||
|
|
||||||
|
builder.Services.AddCore(builder.Configuration);
|
||||||
|
|
||||||
|
var app = builder.Build();
|
||||||
|
|
||||||
|
// Configure the HTTP request pipeline.
|
||||||
|
if (!app.Environment.IsDevelopment())
|
||||||
|
{
|
||||||
|
app.UseExceptionHandler("/Home/Error");
|
||||||
|
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
|
||||||
|
}
|
||||||
|
|
||||||
|
app.UseHttpsRedirection();
|
||||||
|
app.UseStaticFiles();
|
||||||
|
|
||||||
|
app.UseRouting();
|
||||||
|
|
||||||
|
app.UseAuthorization();
|
||||||
|
|
||||||
|
app.MapControllerRoute(
|
||||||
|
name: "default",
|
||||||
|
pattern: "{controller=Blog}/{action=Index}/{slug?}");
|
||||||
|
|
||||||
|
await app.Services.MigrateUp(app.Configuration);
|
||||||
|
|
||||||
|
app.Run();
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||||
|
"iisSettings": {
|
||||||
|
"windowsAuthentication": false,
|
||||||
|
"anonymousAuthentication": true,
|
||||||
|
"iisExpress": {
|
||||||
|
"applicationUrl": "http://localhost:12739",
|
||||||
|
"sslPort": 44385
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"profiles": {
|
||||||
|
"http": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"dotnetRunMessages": true,
|
||||||
|
"launchBrowser": true,
|
||||||
|
"applicationUrl": "http://localhost:5000",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"https": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"dotnetRunMessages": true,
|
||||||
|
"launchBrowser": true,
|
||||||
|
"applicationUrl": "https://localhost:7122;http://localhost:5000",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"IIS Express": {
|
||||||
|
"commandName": "IISExpress",
|
||||||
|
"launchBrowser": true,
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,81 @@
|
||||||
|
@model EditBlog
|
||||||
|
|
||||||
|
<div id="preview">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if (Model.Id is null)
|
||||||
|
{
|
||||||
|
<h2>New Blog</h2>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<h2>Edit "@Model.Title"</h2>
|
||||||
|
}
|
||||||
|
|
||||||
|
<form action="~/blog/edit/" method="post">
|
||||||
|
<input type="hidden" id="id" name="id" value="@Model.Id"/>
|
||||||
|
<div>
|
||||||
|
<label for="title">Title:</label>
|
||||||
|
<input type="text" id="title" name="title" value="@Model.Title" required>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="sourceLocation">Source Location:</label>
|
||||||
|
<input type="text" id="sourceLocation" name="sourceLocation" value="@Model.SourceLocation" required>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="slug">Slug:</label>
|
||||||
|
<input type="text" id="slug" name="slug" value="@Model.Slug">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input type="checkbox" id="showDetails" name="showDetailsStr" @(Model.ShowDetails ? "checked" : "")>
|
||||||
|
<label for="showDetails">Show Details</label>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="imageUrl">Image URL:</label>
|
||||||
|
<input type="text" id="imageUrl" name="imageUrl" value="@Model.ImageUrl">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="createdAt">Created At:</label>
|
||||||
|
<input type="datetime-local" id="createdAt" name="createdAt" value="@Model.CreatedAt.ToString("yyyy-MM-ddTHH:mm")" required>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="modifiedAt">Modified At:</label>
|
||||||
|
<input type="datetime-local" id="modifiedAt" name="modifiedAt" value="@Model.ModifiedAt.ToString("yyyy-MM-ddTHH:mm")" required>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="signature">Signature:</label>
|
||||||
|
<input type="text" id="signature" name="signature" value="@Model.Signature">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input type="checkbox" id="fullWidth" name="fullWidthStr" @(Model.FullWidth ? "checked" : "")>
|
||||||
|
<label for="visible">FullWidth</label>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input type="checkbox" id="visible" name="visibleStr" @(Model.Visible ? "checked" : "")>
|
||||||
|
<label for="visible">Visible</label>
|
||||||
|
</div>
|
||||||
|
<br/>
|
||||||
|
<div>
|
||||||
|
<label for="text">Text:</label>
|
||||||
|
<textarea style="field-sizing: content" id="text" name="text" required>@Model.Text</textarea>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<button type="submit" class="create-btn">
|
||||||
|
@if (Model.Id is null)
|
||||||
|
{
|
||||||
|
<span>Create</span>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<span>Update</span>
|
||||||
|
}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<button class="preview-btn secondary" hx-post="/blog/preview" hx-target="#preview" hx-swap="OuterHTML">Preview</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
.preview-btn {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
@using Ganss.Xss
|
||||||
|
@using Markdig;
|
||||||
|
@using Pek.Markdig.HighlightJs
|
||||||
|
@model FastBlog.Core.Models.Blogs.Blog
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewBag.Title = Model.Metadata.Title;
|
||||||
|
var pipelineBuilder = new MarkdownPipelineBuilder().UseAdvancedExtensions().UseHighlightJs();
|
||||||
|
var sanitizer = new HtmlSanitizer();
|
||||||
|
sanitizer.AllowedAttributes.Add("class");
|
||||||
|
var pipeline = pipelineBuilder.Build();
|
||||||
|
}
|
||||||
|
|
||||||
|
<div class="@(Model.Metadata.FullWidth ? "fw" : "container") markdown">
|
||||||
|
|
||||||
|
@if (Model.Metadata.ShowDetails)
|
||||||
|
{
|
||||||
|
<hr/>
|
||||||
|
@if (Model.Metadata.ImageUrl is not null)
|
||||||
|
{
|
||||||
|
<img src="@Model.Metadata.ImageUrl" alt="@Model.Metadata.Title" class="blog-image"/>
|
||||||
|
<hr/>
|
||||||
|
}
|
||||||
|
|
||||||
|
<div class="blog-details">
|
||||||
|
<h1>@Model.Metadata.Title</h1>
|
||||||
|
@if (Model.Metadata.Signature is not null)
|
||||||
|
{
|
||||||
|
<h3>
|
||||||
|
<span style="opacity: 0.4">by</span> @Model.Metadata.Signature
|
||||||
|
</h3>
|
||||||
|
}
|
||||||
|
<p>@($"{Model.Metadata.CreatedAt:MMMM dd, yyyy}, updated {Model.Metadata.ModifiedAt:MMMM dd, yyyy}")</p>
|
||||||
|
</div>
|
||||||
|
<hr/>
|
||||||
|
<br/>
|
||||||
|
}
|
||||||
|
|
||||||
|
@Html.Raw(sanitizer.Sanitize(Markdown.ToHtml(Model.Text, pipeline)))
|
||||||
|
</div>
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
@using Ganss.Xss
|
||||||
|
@using Markdig;
|
||||||
|
@using Pek.Markdig.HighlightJs
|
||||||
|
@model FastBlog.Core.Models.Blogs.Blog
|
||||||
|
|
||||||
|
@await Html.PartialAsync("Index", Model);
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
@model ErrorViewModel
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Error";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h1 class="text-danger">Error.</h1>
|
||||||
|
<h2 class="text-danger">An error occurred while processing your request.</h2>
|
||||||
|
|
||||||
|
@if (Model.ShowRequestId)
|
||||||
|
{
|
||||||
|
<p>
|
||||||
|
<strong>Request ID:</strong> <code>@Model.RequestId</code>
|
||||||
|
</p>
|
||||||
|
}
|
||||||
|
|
||||||
|
<h3>Development Mode</h3>
|
||||||
|
<p>
|
||||||
|
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
|
||||||
|
It can result in displaying sensitive information from exceptions to end users.
|
||||||
|
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
|
||||||
|
and restarting the app.
|
||||||
|
</p>
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
@{
|
||||||
|
ViewContext.HttpContext.Response.Headers.Add("Vary", "Hx-Request");
|
||||||
|
}
|
||||||
|
|
||||||
|
@if (ViewContext.HttpContext.Request.Headers["Hx-Request"].Contains("true"))
|
||||||
|
{
|
||||||
|
@RenderBody()
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" data-theme="dark">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||||
|
<title>@ViewData["Title"] | FastBlog.Web</title>
|
||||||
|
<link rel="stylesheet" href="~/css/pico.min.css" asp-append-version="true"/>
|
||||||
|
<link rel="stylesheet" href="~/css/pico.colors.min.css" asp-append-version="true"/>
|
||||||
|
<link rel="stylesheet" href="~/FastBlog.Web.styles.css" asp-append-version="true"/>
|
||||||
|
<link rel="stylesheet" href="~/lib/highlight-js/styles/github-dark.min.css" asp-append-version="true"/>
|
||||||
|
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script src="~/js/htmx.min.js"></script>
|
||||||
|
<header class="nav-container">
|
||||||
|
<div>
|
||||||
|
<nav>
|
||||||
|
<ul>
|
||||||
|
<li><a href="~/"><h1>the1mason</h1></a></li>
|
||||||
|
<li><a href="~/blog/list">Blog</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://github.com/the1mason">GitHub</a></li>
|
||||||
|
<li><a href="mailto://mail@the1mason.com">Mail</a></li>
|
||||||
|
<li><a href="https://linkedin.com/in/the1mason">LinkedIn</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="body" id="body">
|
||||||
|
<main role="main">
|
||||||
|
@RenderBody()
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
<script src="~/lib/jquery/dist/jquery.min.js"></script>
|
||||||
|
<script src="~/js/site.js" asp-append-version="true"></script>
|
||||||
|
<script src="~/lib/highlight-js/highlight.min.js" asp-append-version="true"></script>
|
||||||
|
@await RenderSectionAsync("Scripts", required: false)
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
|
||||||
|
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
@using FastBlog.Web
|
||||||
|
@using FastBlog.Web.Models
|
||||||
|
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
@{
|
||||||
|
Layout = "_Layout";
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Information",
|
||||||
|
"Microsoft.AspNetCore": "Warning"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Information",
|
||||||
|
"Microsoft.AspNetCore": "Warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AllowedHosts": "*",
|
||||||
|
"FileStore": {
|
||||||
|
"SourcePath": "blogs"
|
||||||
|
},
|
||||||
|
"ConnectionStrings": {
|
||||||
|
"Sqlite": "Data Source=app.db"
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,72 @@
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Fira Code';
|
||||||
|
src: url('fonts/FiraCode-VF.woff2') format('woff2');
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
--pico-font-family: 'Fira Code', Roboto, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-size: 14px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
position: relative;
|
||||||
|
min-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin-bottom: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-container {
|
||||||
|
margin-left: 20px;
|
||||||
|
margin-right: 20px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
margin-top: 0px;
|
||||||
|
padding-top: 0px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-container li {
|
||||||
|
font-size: 16px;
|
||||||
|
color: #C3EAFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-container li a {
|
||||||
|
font-size: 17px;
|
||||||
|
color: inherit;
|
||||||
|
font-family: 'Fira Code', Roboto, sans-serif !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.nav-container h1 {
|
||||||
|
color: #C3EAFF;
|
||||||
|
font-size: 24px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.body {
|
||||||
|
margin-left: 15px;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown p {
|
||||||
|
font-size: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown hr {
|
||||||
|
margin-bottom: 35px;
|
||||||
|
margin-top: 35px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-image {
|
||||||
|
display: block;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
max-height: 30rem;
|
||||||
|
border: 7px solid rgba(0, 0, 0, 0);
|
||||||
|
border-radius: 0; box-shadow: 0 0 0 5px #C3EAFF;
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 5.3 KiB |
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,4 @@
|
||||||
|
// Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
|
||||||
|
// for details on configuring this project to bundle and minify static web assets.
|
||||||
|
|
||||||
|
// Write your JavaScript code.
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
BSD 3-Clause License
|
||||||
|
|
||||||
|
Copyright (c) 2006, Ivan Sagalaev.
|
||||||
|
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.
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
* Neither the name of the copyright holder 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 HOLDER 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.
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,307 @@
|
||||||
|
/*!
|
||||||
|
Highlight.js v11.10.0 (git: 366a8bd012)
|
||||||
|
(c) 2006-2024 Josh Goebel <hello@joshgoebel.com> and other contributors
|
||||||
|
License: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
function e(t){return t instanceof Map?t.clear=t.delete=t.set=()=>{
|
||||||
|
throw Error("map is read-only")}:t instanceof Set&&(t.add=t.clear=t.delete=()=>{
|
||||||
|
throw Error("set is read-only")
|
||||||
|
}),Object.freeze(t),Object.getOwnPropertyNames(t).forEach((n=>{
|
||||||
|
const i=t[n],s=typeof i;"object"!==s&&"function"!==s||Object.isFrozen(i)||e(i)
|
||||||
|
})),t}class t{constructor(e){
|
||||||
|
void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}
|
||||||
|
ignoreMatch(){this.isMatchIgnored=!0}}function n(e){
|
||||||
|
return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")
|
||||||
|
}function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t]
|
||||||
|
;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const s=e=>!!e.scope
|
||||||
|
;class r{constructor(e,t){
|
||||||
|
this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){
|
||||||
|
this.buffer+=n(e)}openNode(e){if(!s(e))return;const t=((e,{prefix:t})=>{
|
||||||
|
if(e.startsWith("language:"))return e.replace("language:","language-")
|
||||||
|
;if(e.includes(".")){const n=e.split(".")
|
||||||
|
;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ")
|
||||||
|
}return`${t}${e}`})(e.scope,{prefix:this.classPrefix});this.span(t)}
|
||||||
|
closeNode(e){s(e)&&(this.buffer+="</span>")}value(){return this.buffer}span(e){
|
||||||
|
this.buffer+=`<span class="${e}">`}}const o=(e={})=>{const t={children:[]}
|
||||||
|
;return Object.assign(t,e),t};class a{constructor(){
|
||||||
|
this.rootNode=o(),this.stack=[this.rootNode]}get top(){
|
||||||
|
return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){
|
||||||
|
this.top.children.push(e)}openNode(e){const t=o({scope:e})
|
||||||
|
;this.add(t),this.stack.push(t)}closeNode(){
|
||||||
|
if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){
|
||||||
|
for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}
|
||||||
|
walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){
|
||||||
|
return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),
|
||||||
|
t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){
|
||||||
|
"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{
|
||||||
|
a._collapse(e)})))}}class c extends a{constructor(e){super(),this.options=e}
|
||||||
|
addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){
|
||||||
|
this.closeNode()}__addSublanguage(e,t){const n=e.root
|
||||||
|
;t&&(n.scope="language:"+t),this.add(n)}toHTML(){
|
||||||
|
return new r(this,this.options).value()}finalize(){
|
||||||
|
return this.closeAllNodes(),!0}}function l(e){
|
||||||
|
return e?"string"==typeof e?e:e.source:null}function g(e){return h("(?=",e,")")}
|
||||||
|
function u(e){return h("(?:",e,")*")}function d(e){return h("(?:",e,")?")}
|
||||||
|
function h(...e){return e.map((e=>l(e))).join("")}function f(...e){const t=(e=>{
|
||||||
|
const t=e[e.length-1]
|
||||||
|
;return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}
|
||||||
|
})(e);return"("+(t.capture?"":"?:")+e.map((e=>l(e))).join("|")+")"}
|
||||||
|
function p(e){return RegExp(e.toString()+"|").exec("").length-1}
|
||||||
|
const b=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./
|
||||||
|
;function m(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n
|
||||||
|
;let i=l(e),s="";for(;i.length>0;){const e=b.exec(i);if(!e){s+=i;break}
|
||||||
|
s+=i.substring(0,e.index),
|
||||||
|
i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+t):(s+=e[0],
|
||||||
|
"("===e[0]&&n++)}return s})).map((e=>`(${e})`)).join(t)}
|
||||||
|
const E="[a-zA-Z]\\w*",x="[a-zA-Z_]\\w*",w="\\b\\d+(\\.\\d+)?",y="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",_="\\b(0b[01]+)",O={
|
||||||
|
begin:"\\\\[\\s\\S]",relevance:0},k={scope:"string",begin:"'",end:"'",
|
||||||
|
illegal:"\\n",contains:[O]},v={scope:"string",begin:'"',end:'"',illegal:"\\n",
|
||||||
|
contains:[O]},N=(e,t,n={})=>{const s=i({scope:"comment",begin:e,end:t,
|
||||||
|
contains:[]},n);s.contains.push({scope:"doctag",
|
||||||
|
begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
|
||||||
|
end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0})
|
||||||
|
;const r=f("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/)
|
||||||
|
;return s.contains.push({begin:h(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s
|
||||||
|
},S=N("//","$"),M=N("/\\*","\\*/"),R=N("#","$");var A=Object.freeze({
|
||||||
|
__proto__:null,APOS_STRING_MODE:k,BACKSLASH_ESCAPE:O,BINARY_NUMBER_MODE:{
|
||||||
|
scope:"number",begin:_,relevance:0},BINARY_NUMBER_RE:_,COMMENT:N,
|
||||||
|
C_BLOCK_COMMENT_MODE:M,C_LINE_COMMENT_MODE:S,C_NUMBER_MODE:{scope:"number",
|
||||||
|
begin:y,relevance:0},C_NUMBER_RE:y,END_SAME_AS_BEGIN:e=>Object.assign(e,{
|
||||||
|
"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{
|
||||||
|
t.data._beginMatch!==e[1]&&t.ignoreMatch()}}),HASH_COMMENT_MODE:R,IDENT_RE:E,
|
||||||
|
MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+x,relevance:0},
|
||||||
|
NUMBER_MODE:{scope:"number",begin:w,relevance:0},NUMBER_RE:w,
|
||||||
|
PHRASAL_WORDS_MODE:{
|
||||||
|
begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
|
||||||
|
},QUOTE_STRING_MODE:v,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/,
|
||||||
|
end:/\/[gimuy]*/,contains:[O,{begin:/\[/,end:/\]/,relevance:0,contains:[O]}]},
|
||||||
|
RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",
|
||||||
|
SHEBANG:(e={})=>{const t=/^#![ ]*\//
|
||||||
|
;return e.binary&&(e.begin=h(t,/.*\b/,e.binary,/\b.*/)),i({scope:"meta",begin:t,
|
||||||
|
end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},
|
||||||
|
TITLE_MODE:{scope:"title",begin:E,relevance:0},UNDERSCORE_IDENT_RE:x,
|
||||||
|
UNDERSCORE_TITLE_MODE:{scope:"title",begin:x,relevance:0}});function j(e,t){
|
||||||
|
"."===e.input[e.index-1]&&t.ignoreMatch()}function I(e,t){
|
||||||
|
void 0!==e.className&&(e.scope=e.className,delete e.className)}function T(e,t){
|
||||||
|
t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",
|
||||||
|
e.__beforeBegin=j,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,
|
||||||
|
void 0===e.relevance&&(e.relevance=0))}function L(e,t){
|
||||||
|
Array.isArray(e.illegal)&&(e.illegal=f(...e.illegal))}function B(e,t){
|
||||||
|
if(e.match){
|
||||||
|
if(e.begin||e.end)throw Error("begin & end are not supported with match")
|
||||||
|
;e.begin=e.match,delete e.match}}function P(e,t){
|
||||||
|
void 0===e.relevance&&(e.relevance=1)}const D=(e,t)=>{if(!e.beforeMatch)return
|
||||||
|
;if(e.starts)throw Error("beforeMatch cannot be used with starts")
|
||||||
|
;const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]
|
||||||
|
})),e.keywords=n.keywords,e.begin=h(n.beforeMatch,g(n.begin)),e.starts={
|
||||||
|
relevance:0,contains:[Object.assign(n,{endsParent:!0})]
|
||||||
|
},e.relevance=0,delete n.beforeMatch
|
||||||
|
},H=["of","and","for","in","not","or","if","then","parent","list","value"],C="keyword"
|
||||||
|
;function $(e,t,n=C){const i=Object.create(null)
|
||||||
|
;return"string"==typeof e?s(n,e.split(" ")):Array.isArray(e)?s(n,e):Object.keys(e).forEach((n=>{
|
||||||
|
Object.assign(i,$(e[n],t,n))})),i;function s(e,n){
|
||||||
|
t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|")
|
||||||
|
;i[n[0]]=[e,U(n[0],n[1])]}))}}function U(e,t){
|
||||||
|
return t?Number(t):(e=>H.includes(e.toLowerCase()))(e)?0:1}const z={},W=e=>{
|
||||||
|
console.error(e)},X=(e,...t)=>{console.log("WARN: "+e,...t)},G=(e,t)=>{
|
||||||
|
z[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),z[`${e}/${t}`]=!0)
|
||||||
|
},K=Error();function F(e,t,{key:n}){let i=0;const s=e[n],r={},o={}
|
||||||
|
;for(let e=1;e<=t.length;e++)o[e+i]=s[e],r[e+i]=!0,i+=p(t[e-1])
|
||||||
|
;e[n]=o,e[n]._emit=r,e[n]._multi=!0}function Z(e){(e=>{
|
||||||
|
e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,
|
||||||
|
delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={
|
||||||
|
_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope
|
||||||
|
}),(e=>{if(Array.isArray(e.begin)){
|
||||||
|
if(e.skip||e.excludeBegin||e.returnBegin)throw W("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),
|
||||||
|
K
|
||||||
|
;if("object"!=typeof e.beginScope||null===e.beginScope)throw W("beginScope must be object"),
|
||||||
|
K;F(e,e.begin,{key:"beginScope"}),e.begin=m(e.begin,{joinWith:""})}})(e),(e=>{
|
||||||
|
if(Array.isArray(e.end)){
|
||||||
|
if(e.skip||e.excludeEnd||e.returnEnd)throw W("skip, excludeEnd, returnEnd not compatible with endScope: {}"),
|
||||||
|
K
|
||||||
|
;if("object"!=typeof e.endScope||null===e.endScope)throw W("endScope must be object"),
|
||||||
|
K;F(e,e.end,{key:"endScope"}),e.end=m(e.end,{joinWith:""})}})(e)}function V(e){
|
||||||
|
function t(t,n){
|
||||||
|
return RegExp(l(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":""))
|
||||||
|
}class n{constructor(){
|
||||||
|
this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}
|
||||||
|
addRule(e,t){
|
||||||
|
t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),
|
||||||
|
this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null)
|
||||||
|
;const e=this.regexes.map((e=>e[1]));this.matcherRe=t(m(e,{joinWith:"|"
|
||||||
|
}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex
|
||||||
|
;const t=this.matcherRe.exec(e);if(!t)return null
|
||||||
|
;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n]
|
||||||
|
;return t.splice(0,n),Object.assign(t,i)}}class s{constructor(){
|
||||||
|
this.rules=[],this.multiRegexes=[],
|
||||||
|
this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){
|
||||||
|
if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n
|
||||||
|
;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),
|
||||||
|
t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){
|
||||||
|
return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){
|
||||||
|
this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){
|
||||||
|
const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex
|
||||||
|
;let n=t.exec(e)
|
||||||
|
;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{
|
||||||
|
const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}
|
||||||
|
return n&&(this.regexIndex+=n.position+1,
|
||||||
|
this.regexIndex===this.count&&this.considerAll()),n}}
|
||||||
|
if(e.compilerExtensions||(e.compilerExtensions=[]),
|
||||||
|
e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.")
|
||||||
|
;return e.classNameAliases=i(e.classNameAliases||{}),function n(r,o){const a=r
|
||||||
|
;if(r.isCompiled)return a
|
||||||
|
;[I,B,Z,D].forEach((e=>e(r,o))),e.compilerExtensions.forEach((e=>e(r,o))),
|
||||||
|
r.__beforeBegin=null,[T,L,P].forEach((e=>e(r,o))),r.isCompiled=!0;let c=null
|
||||||
|
;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords),
|
||||||
|
c=r.keywords.$pattern,
|
||||||
|
delete r.keywords.$pattern),c=c||/\w+/,r.keywords&&(r.keywords=$(r.keywords,e.case_insensitive)),
|
||||||
|
a.keywordPatternRe=t(c,!0),
|
||||||
|
o&&(r.begin||(r.begin=/\B|\b/),a.beginRe=t(a.begin),r.end||r.endsWithParent||(r.end=/\B|\b/),
|
||||||
|
r.end&&(a.endRe=t(a.end)),
|
||||||
|
a.terminatorEnd=l(a.end)||"",r.endsWithParent&&o.terminatorEnd&&(a.terminatorEnd+=(r.end?"|":"")+o.terminatorEnd)),
|
||||||
|
r.illegal&&(a.illegalRe=t(r.illegal)),
|
||||||
|
r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>i(e,{
|
||||||
|
variants:null},t)))),e.cachedVariants?e.cachedVariants:q(e)?i(e,{
|
||||||
|
starts:e.starts?i(e.starts):null
|
||||||
|
}):Object.isFrozen(e)?i(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{n(e,a)
|
||||||
|
})),r.starts&&n(r.starts,o),a.matcher=(e=>{const t=new s
|
||||||
|
;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"
|
||||||
|
}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"
|
||||||
|
}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(a),a}(e)}function q(e){
|
||||||
|
return!!e&&(e.endsWithParent||q(e.starts))}class J extends Error{
|
||||||
|
constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}}
|
||||||
|
const Y=n,Q=i,ee=Symbol("nomatch"),te=n=>{
|
||||||
|
const i=Object.create(null),s=Object.create(null),r=[];let o=!0
|
||||||
|
;const a="Could not find the language '{}', did you forget to load/include a language module?",l={
|
||||||
|
disableAutodetect:!0,name:"Plain text",contains:[]};let p={
|
||||||
|
ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,
|
||||||
|
languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",
|
||||||
|
cssSelector:"pre code",languages:null,__emitter:c};function b(e){
|
||||||
|
return p.noHighlightRe.test(e)}function m(e,t,n){let i="",s=""
|
||||||
|
;"object"==typeof t?(i=e,
|
||||||
|
n=t.ignoreIllegals,s=t.language):(G("10.7.0","highlight(lang, code, ...args) has been deprecated."),
|
||||||
|
G("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),
|
||||||
|
s=e,i=t),void 0===n&&(n=!0);const r={code:i,language:s};N("before:highlight",r)
|
||||||
|
;const o=r.result?r.result:E(r.language,r.code,n)
|
||||||
|
;return o.code=r.code,N("after:highlight",o),o}function E(e,n,s,r){
|
||||||
|
const c=Object.create(null);function l(){if(!N.keywords)return void M.addText(R)
|
||||||
|
;let e=0;N.keywordPatternRe.lastIndex=0;let t=N.keywordPatternRe.exec(R),n=""
|
||||||
|
;for(;t;){n+=R.substring(e,t.index)
|
||||||
|
;const s=_.case_insensitive?t[0].toLowerCase():t[0],r=(i=s,N.keywords[i]);if(r){
|
||||||
|
const[e,i]=r
|
||||||
|
;if(M.addText(n),n="",c[s]=(c[s]||0)+1,c[s]<=7&&(A+=i),e.startsWith("_"))n+=t[0];else{
|
||||||
|
const n=_.classNameAliases[e]||e;u(t[0],n)}}else n+=t[0]
|
||||||
|
;e=N.keywordPatternRe.lastIndex,t=N.keywordPatternRe.exec(R)}var i
|
||||||
|
;n+=R.substring(e),M.addText(n)}function g(){null!=N.subLanguage?(()=>{
|
||||||
|
if(""===R)return;let e=null;if("string"==typeof N.subLanguage){
|
||||||
|
if(!i[N.subLanguage])return void M.addText(R)
|
||||||
|
;e=E(N.subLanguage,R,!0,S[N.subLanguage]),S[N.subLanguage]=e._top
|
||||||
|
}else e=x(R,N.subLanguage.length?N.subLanguage:null)
|
||||||
|
;N.relevance>0&&(A+=e.relevance),M.__addSublanguage(e._emitter,e.language)
|
||||||
|
})():l(),R=""}function u(e,t){
|
||||||
|
""!==e&&(M.startScope(t),M.addText(e),M.endScope())}function d(e,t){let n=1
|
||||||
|
;const i=t.length-1;for(;n<=i;){if(!e._emit[n]){n++;continue}
|
||||||
|
const i=_.classNameAliases[e[n]]||e[n],s=t[n];i?u(s,i):(R=s,l(),R=""),n++}}
|
||||||
|
function h(e,t){
|
||||||
|
return e.scope&&"string"==typeof e.scope&&M.openNode(_.classNameAliases[e.scope]||e.scope),
|
||||||
|
e.beginScope&&(e.beginScope._wrap?(u(R,_.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),
|
||||||
|
R=""):e.beginScope._multi&&(d(e.beginScope,t),R="")),N=Object.create(e,{parent:{
|
||||||
|
value:N}}),N}function f(e,n,i){let s=((e,t)=>{const n=e&&e.exec(t)
|
||||||
|
;return n&&0===n.index})(e.endRe,i);if(s){if(e["on:end"]){const i=new t(e)
|
||||||
|
;e["on:end"](n,i),i.isMatchIgnored&&(s=!1)}if(s){
|
||||||
|
for(;e.endsParent&&e.parent;)e=e.parent;return e}}
|
||||||
|
if(e.endsWithParent)return f(e.parent,n,i)}function b(e){
|
||||||
|
return 0===N.matcher.regexIndex?(R+=e[0],1):(T=!0,0)}function m(e){
|
||||||
|
const t=e[0],i=n.substring(e.index),s=f(N,e,i);if(!s)return ee;const r=N
|
||||||
|
;N.endScope&&N.endScope._wrap?(g(),
|
||||||
|
u(t,N.endScope._wrap)):N.endScope&&N.endScope._multi?(g(),
|
||||||
|
d(N.endScope,e)):r.skip?R+=t:(r.returnEnd||r.excludeEnd||(R+=t),
|
||||||
|
g(),r.excludeEnd&&(R=t));do{
|
||||||
|
N.scope&&M.closeNode(),N.skip||N.subLanguage||(A+=N.relevance),N=N.parent
|
||||||
|
}while(N!==s.parent);return s.starts&&h(s.starts,e),r.returnEnd?0:t.length}
|
||||||
|
let w={};function y(i,r){const a=r&&r[0];if(R+=i,null==a)return g(),0
|
||||||
|
;if("begin"===w.type&&"end"===r.type&&w.index===r.index&&""===a){
|
||||||
|
if(R+=n.slice(r.index,r.index+1),!o){const t=Error(`0 width match regex (${e})`)
|
||||||
|
;throw t.languageName=e,t.badRule=w.rule,t}return 1}
|
||||||
|
if(w=r,"begin"===r.type)return(e=>{
|
||||||
|
const n=e[0],i=e.rule,s=new t(i),r=[i.__beforeBegin,i["on:begin"]]
|
||||||
|
;for(const t of r)if(t&&(t(e,s),s.isMatchIgnored))return b(n)
|
||||||
|
;return i.skip?R+=n:(i.excludeBegin&&(R+=n),
|
||||||
|
g(),i.returnBegin||i.excludeBegin||(R=n)),h(i,e),i.returnBegin?0:n.length})(r)
|
||||||
|
;if("illegal"===r.type&&!s){
|
||||||
|
const e=Error('Illegal lexeme "'+a+'" for mode "'+(N.scope||"<unnamed>")+'"')
|
||||||
|
;throw e.mode=N,e}if("end"===r.type){const e=m(r);if(e!==ee)return e}
|
||||||
|
if("illegal"===r.type&&""===a)return 1
|
||||||
|
;if(I>1e5&&I>3*r.index)throw Error("potential infinite loop, way more iterations than matches")
|
||||||
|
;return R+=a,a.length}const _=O(e)
|
||||||
|
;if(!_)throw W(a.replace("{}",e)),Error('Unknown language: "'+e+'"')
|
||||||
|
;const k=V(_);let v="",N=r||k;const S={},M=new p.__emitter(p);(()=>{const e=[]
|
||||||
|
;for(let t=N;t!==_;t=t.parent)t.scope&&e.unshift(t.scope)
|
||||||
|
;e.forEach((e=>M.openNode(e)))})();let R="",A=0,j=0,I=0,T=!1;try{
|
||||||
|
if(_.__emitTokens)_.__emitTokens(n,M);else{for(N.matcher.considerAll();;){
|
||||||
|
I++,T?T=!1:N.matcher.considerAll(),N.matcher.lastIndex=j
|
||||||
|
;const e=N.matcher.exec(n);if(!e)break;const t=y(n.substring(j,e.index),e)
|
||||||
|
;j=e.index+t}y(n.substring(j))}return M.finalize(),v=M.toHTML(),{language:e,
|
||||||
|
value:v,relevance:A,illegal:!1,_emitter:M,_top:N}}catch(t){
|
||||||
|
if(t.message&&t.message.includes("Illegal"))return{language:e,value:Y(n),
|
||||||
|
illegal:!0,relevance:0,_illegalBy:{message:t.message,index:j,
|
||||||
|
context:n.slice(j-100,j+100),mode:t.mode,resultSoFar:v},_emitter:M};if(o)return{
|
||||||
|
language:e,value:Y(n),illegal:!1,relevance:0,errorRaised:t,_emitter:M,_top:N}
|
||||||
|
;throw t}}function x(e,t){t=t||p.languages||Object.keys(i);const n=(e=>{
|
||||||
|
const t={value:Y(e),illegal:!1,relevance:0,_top:l,_emitter:new p.__emitter(p)}
|
||||||
|
;return t._emitter.addText(e),t})(e),s=t.filter(O).filter(v).map((t=>E(t,e,!1)))
|
||||||
|
;s.unshift(n);const r=s.sort(((e,t)=>{
|
||||||
|
if(e.relevance!==t.relevance)return t.relevance-e.relevance
|
||||||
|
;if(e.language&&t.language){if(O(e.language).supersetOf===t.language)return 1
|
||||||
|
;if(O(t.language).supersetOf===e.language)return-1}return 0})),[o,a]=r,c=o
|
||||||
|
;return c.secondBest=a,c}function w(e){let t=null;const n=(e=>{
|
||||||
|
let t=e.className+" ";t+=e.parentNode?e.parentNode.className:""
|
||||||
|
;const n=p.languageDetectRe.exec(t);if(n){const t=O(n[1])
|
||||||
|
;return t||(X(a.replace("{}",n[1])),
|
||||||
|
X("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}
|
||||||
|
return t.split(/\s+/).find((e=>b(e)||O(e)))})(e);if(b(n))return
|
||||||
|
;if(N("before:highlightElement",{el:e,language:n
|
||||||
|
}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e)
|
||||||
|
;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),
|
||||||
|
console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),
|
||||||
|
console.warn("The element with unescaped HTML:"),
|
||||||
|
console.warn(e)),p.throwUnescapedHTML))throw new J("One of your code blocks includes unescaped HTML.",e.innerHTML)
|
||||||
|
;t=e;const i=t.textContent,r=n?m(i,{language:n,ignoreIllegals:!0}):x(i)
|
||||||
|
;e.innerHTML=r.value,e.dataset.highlighted="yes",((e,t,n)=>{const i=t&&s[t]||n
|
||||||
|
;e.classList.add("hljs"),e.classList.add("language-"+i)
|
||||||
|
})(e,n,r.language),e.result={language:r.language,re:r.relevance,
|
||||||
|
relevance:r.relevance},r.secondBest&&(e.secondBest={
|
||||||
|
language:r.secondBest.language,relevance:r.secondBest.relevance
|
||||||
|
}),N("after:highlightElement",{el:e,result:r,text:i})}let y=!1;function _(){
|
||||||
|
"loading"!==document.readyState?document.querySelectorAll(p.cssSelector).forEach(w):y=!0
|
||||||
|
}function O(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}
|
||||||
|
function k(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{
|
||||||
|
s[e.toLowerCase()]=t}))}function v(e){const t=O(e)
|
||||||
|
;return t&&!t.disableAutodetect}function N(e,t){const n=e;r.forEach((e=>{
|
||||||
|
e[n]&&e[n](t)}))}
|
||||||
|
"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{
|
||||||
|
y&&_()}),!1),Object.assign(n,{highlight:m,highlightAuto:x,highlightAll:_,
|
||||||
|
highlightElement:w,
|
||||||
|
highlightBlock:e=>(G("10.7.0","highlightBlock will be removed entirely in v12.0"),
|
||||||
|
G("10.7.0","Please use highlightElement now."),w(e)),configure:e=>{p=Q(p,e)},
|
||||||
|
initHighlighting:()=>{
|
||||||
|
_(),G("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},
|
||||||
|
initHighlightingOnLoad:()=>{
|
||||||
|
_(),G("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")
|
||||||
|
},registerLanguage:(e,t)=>{let s=null;try{s=t(n)}catch(t){
|
||||||
|
if(W("Language definition for '{}' could not be registered.".replace("{}",e)),
|
||||||
|
!o)throw t;W(t),s=l}
|
||||||
|
s.name||(s.name=e),i[e]=s,s.rawDefinition=t.bind(null,n),s.aliases&&k(s.aliases,{
|
||||||
|
languageName:e})},unregisterLanguage:e=>{delete i[e]
|
||||||
|
;for(const t of Object.keys(s))s[t]===e&&delete s[t]},
|
||||||
|
listLanguages:()=>Object.keys(i),getLanguage:O,registerAliases:k,
|
||||||
|
autoDetection:v,inherit:Q,addPlugin:e=>{(e=>{
|
||||||
|
e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{
|
||||||
|
e["before:highlightBlock"](Object.assign({block:t.el},t))
|
||||||
|
}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{
|
||||||
|
e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),r.push(e)},
|
||||||
|
removePlugin:e=>{const t=r.indexOf(e);-1!==t&&r.splice(t,1)}}),n.debugMode=()=>{
|
||||||
|
o=!1},n.safeMode=()=>{o=!0},n.versionString="11.10.0",n.regex={concat:h,
|
||||||
|
lookahead:g,either:f,optional:d,anyNumberOfTimes:u}
|
||||||
|
;for(const t in A)"object"==typeof A[t]&&e(A[t]);return Object.assign(n,A),n
|
||||||
|
},ne=te({});ne.newInstance=()=>te({});export{ne as default};
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,307 @@
|
||||||
|
/*!
|
||||||
|
Highlight.js v11.10.0 (git: 366a8bd012)
|
||||||
|
(c) 2006-2024 Josh Goebel <hello@joshgoebel.com> and other contributors
|
||||||
|
License: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
function e(t){return t instanceof Map?t.clear=t.delete=t.set=()=>{
|
||||||
|
throw Error("map is read-only")}:t instanceof Set&&(t.add=t.clear=t.delete=()=>{
|
||||||
|
throw Error("set is read-only")
|
||||||
|
}),Object.freeze(t),Object.getOwnPropertyNames(t).forEach((n=>{
|
||||||
|
const i=t[n],s=typeof i;"object"!==s&&"function"!==s||Object.isFrozen(i)||e(i)
|
||||||
|
})),t}class t{constructor(e){
|
||||||
|
void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}
|
||||||
|
ignoreMatch(){this.isMatchIgnored=!0}}function n(e){
|
||||||
|
return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")
|
||||||
|
}function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t]
|
||||||
|
;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const s=e=>!!e.scope
|
||||||
|
;class r{constructor(e,t){
|
||||||
|
this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){
|
||||||
|
this.buffer+=n(e)}openNode(e){if(!s(e))return;const t=((e,{prefix:t})=>{
|
||||||
|
if(e.startsWith("language:"))return e.replace("language:","language-")
|
||||||
|
;if(e.includes(".")){const n=e.split(".")
|
||||||
|
;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ")
|
||||||
|
}return`${t}${e}`})(e.scope,{prefix:this.classPrefix});this.span(t)}
|
||||||
|
closeNode(e){s(e)&&(this.buffer+="</span>")}value(){return this.buffer}span(e){
|
||||||
|
this.buffer+=`<span class="${e}">`}}const o=(e={})=>{const t={children:[]}
|
||||||
|
;return Object.assign(t,e),t};class a{constructor(){
|
||||||
|
this.rootNode=o(),this.stack=[this.rootNode]}get top(){
|
||||||
|
return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){
|
||||||
|
this.top.children.push(e)}openNode(e){const t=o({scope:e})
|
||||||
|
;this.add(t),this.stack.push(t)}closeNode(){
|
||||||
|
if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){
|
||||||
|
for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}
|
||||||
|
walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){
|
||||||
|
return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),
|
||||||
|
t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){
|
||||||
|
"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{
|
||||||
|
a._collapse(e)})))}}class c extends a{constructor(e){super(),this.options=e}
|
||||||
|
addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){
|
||||||
|
this.closeNode()}__addSublanguage(e,t){const n=e.root
|
||||||
|
;t&&(n.scope="language:"+t),this.add(n)}toHTML(){
|
||||||
|
return new r(this,this.options).value()}finalize(){
|
||||||
|
return this.closeAllNodes(),!0}}function l(e){
|
||||||
|
return e?"string"==typeof e?e:e.source:null}function g(e){return h("(?=",e,")")}
|
||||||
|
function u(e){return h("(?:",e,")*")}function d(e){return h("(?:",e,")?")}
|
||||||
|
function h(...e){return e.map((e=>l(e))).join("")}function f(...e){const t=(e=>{
|
||||||
|
const t=e[e.length-1]
|
||||||
|
;return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}
|
||||||
|
})(e);return"("+(t.capture?"":"?:")+e.map((e=>l(e))).join("|")+")"}
|
||||||
|
function p(e){return RegExp(e.toString()+"|").exec("").length-1}
|
||||||
|
const b=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./
|
||||||
|
;function m(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n
|
||||||
|
;let i=l(e),s="";for(;i.length>0;){const e=b.exec(i);if(!e){s+=i;break}
|
||||||
|
s+=i.substring(0,e.index),
|
||||||
|
i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+t):(s+=e[0],
|
||||||
|
"("===e[0]&&n++)}return s})).map((e=>`(${e})`)).join(t)}
|
||||||
|
const E="[a-zA-Z]\\w*",x="[a-zA-Z_]\\w*",w="\\b\\d+(\\.\\d+)?",y="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",_="\\b(0b[01]+)",O={
|
||||||
|
begin:"\\\\[\\s\\S]",relevance:0},k={scope:"string",begin:"'",end:"'",
|
||||||
|
illegal:"\\n",contains:[O]},v={scope:"string",begin:'"',end:'"',illegal:"\\n",
|
||||||
|
contains:[O]},N=(e,t,n={})=>{const s=i({scope:"comment",begin:e,end:t,
|
||||||
|
contains:[]},n);s.contains.push({scope:"doctag",
|
||||||
|
begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
|
||||||
|
end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0})
|
||||||
|
;const r=f("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/)
|
||||||
|
;return s.contains.push({begin:h(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s
|
||||||
|
},S=N("//","$"),M=N("/\\*","\\*/"),R=N("#","$");var A=Object.freeze({
|
||||||
|
__proto__:null,APOS_STRING_MODE:k,BACKSLASH_ESCAPE:O,BINARY_NUMBER_MODE:{
|
||||||
|
scope:"number",begin:_,relevance:0},BINARY_NUMBER_RE:_,COMMENT:N,
|
||||||
|
C_BLOCK_COMMENT_MODE:M,C_LINE_COMMENT_MODE:S,C_NUMBER_MODE:{scope:"number",
|
||||||
|
begin:y,relevance:0},C_NUMBER_RE:y,END_SAME_AS_BEGIN:e=>Object.assign(e,{
|
||||||
|
"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{
|
||||||
|
t.data._beginMatch!==e[1]&&t.ignoreMatch()}}),HASH_COMMENT_MODE:R,IDENT_RE:E,
|
||||||
|
MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+x,relevance:0},
|
||||||
|
NUMBER_MODE:{scope:"number",begin:w,relevance:0},NUMBER_RE:w,
|
||||||
|
PHRASAL_WORDS_MODE:{
|
||||||
|
begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
|
||||||
|
},QUOTE_STRING_MODE:v,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/,
|
||||||
|
end:/\/[gimuy]*/,contains:[O,{begin:/\[/,end:/\]/,relevance:0,contains:[O]}]},
|
||||||
|
RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",
|
||||||
|
SHEBANG:(e={})=>{const t=/^#![ ]*\//
|
||||||
|
;return e.binary&&(e.begin=h(t,/.*\b/,e.binary,/\b.*/)),i({scope:"meta",begin:t,
|
||||||
|
end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},
|
||||||
|
TITLE_MODE:{scope:"title",begin:E,relevance:0},UNDERSCORE_IDENT_RE:x,
|
||||||
|
UNDERSCORE_TITLE_MODE:{scope:"title",begin:x,relevance:0}});function j(e,t){
|
||||||
|
"."===e.input[e.index-1]&&t.ignoreMatch()}function I(e,t){
|
||||||
|
void 0!==e.className&&(e.scope=e.className,delete e.className)}function T(e,t){
|
||||||
|
t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",
|
||||||
|
e.__beforeBegin=j,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,
|
||||||
|
void 0===e.relevance&&(e.relevance=0))}function L(e,t){
|
||||||
|
Array.isArray(e.illegal)&&(e.illegal=f(...e.illegal))}function B(e,t){
|
||||||
|
if(e.match){
|
||||||
|
if(e.begin||e.end)throw Error("begin & end are not supported with match")
|
||||||
|
;e.begin=e.match,delete e.match}}function P(e,t){
|
||||||
|
void 0===e.relevance&&(e.relevance=1)}const D=(e,t)=>{if(!e.beforeMatch)return
|
||||||
|
;if(e.starts)throw Error("beforeMatch cannot be used with starts")
|
||||||
|
;const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]
|
||||||
|
})),e.keywords=n.keywords,e.begin=h(n.beforeMatch,g(n.begin)),e.starts={
|
||||||
|
relevance:0,contains:[Object.assign(n,{endsParent:!0})]
|
||||||
|
},e.relevance=0,delete n.beforeMatch
|
||||||
|
},H=["of","and","for","in","not","or","if","then","parent","list","value"],C="keyword"
|
||||||
|
;function $(e,t,n=C){const i=Object.create(null)
|
||||||
|
;return"string"==typeof e?s(n,e.split(" ")):Array.isArray(e)?s(n,e):Object.keys(e).forEach((n=>{
|
||||||
|
Object.assign(i,$(e[n],t,n))})),i;function s(e,n){
|
||||||
|
t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|")
|
||||||
|
;i[n[0]]=[e,U(n[0],n[1])]}))}}function U(e,t){
|
||||||
|
return t?Number(t):(e=>H.includes(e.toLowerCase()))(e)?0:1}const z={},W=e=>{
|
||||||
|
console.error(e)},X=(e,...t)=>{console.log("WARN: "+e,...t)},G=(e,t)=>{
|
||||||
|
z[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),z[`${e}/${t}`]=!0)
|
||||||
|
},K=Error();function F(e,t,{key:n}){let i=0;const s=e[n],r={},o={}
|
||||||
|
;for(let e=1;e<=t.length;e++)o[e+i]=s[e],r[e+i]=!0,i+=p(t[e-1])
|
||||||
|
;e[n]=o,e[n]._emit=r,e[n]._multi=!0}function Z(e){(e=>{
|
||||||
|
e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,
|
||||||
|
delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={
|
||||||
|
_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope
|
||||||
|
}),(e=>{if(Array.isArray(e.begin)){
|
||||||
|
if(e.skip||e.excludeBegin||e.returnBegin)throw W("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),
|
||||||
|
K
|
||||||
|
;if("object"!=typeof e.beginScope||null===e.beginScope)throw W("beginScope must be object"),
|
||||||
|
K;F(e,e.begin,{key:"beginScope"}),e.begin=m(e.begin,{joinWith:""})}})(e),(e=>{
|
||||||
|
if(Array.isArray(e.end)){
|
||||||
|
if(e.skip||e.excludeEnd||e.returnEnd)throw W("skip, excludeEnd, returnEnd not compatible with endScope: {}"),
|
||||||
|
K
|
||||||
|
;if("object"!=typeof e.endScope||null===e.endScope)throw W("endScope must be object"),
|
||||||
|
K;F(e,e.end,{key:"endScope"}),e.end=m(e.end,{joinWith:""})}})(e)}function V(e){
|
||||||
|
function t(t,n){
|
||||||
|
return RegExp(l(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":""))
|
||||||
|
}class n{constructor(){
|
||||||
|
this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}
|
||||||
|
addRule(e,t){
|
||||||
|
t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),
|
||||||
|
this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null)
|
||||||
|
;const e=this.regexes.map((e=>e[1]));this.matcherRe=t(m(e,{joinWith:"|"
|
||||||
|
}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex
|
||||||
|
;const t=this.matcherRe.exec(e);if(!t)return null
|
||||||
|
;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n]
|
||||||
|
;return t.splice(0,n),Object.assign(t,i)}}class s{constructor(){
|
||||||
|
this.rules=[],this.multiRegexes=[],
|
||||||
|
this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){
|
||||||
|
if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n
|
||||||
|
;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),
|
||||||
|
t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){
|
||||||
|
return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){
|
||||||
|
this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){
|
||||||
|
const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex
|
||||||
|
;let n=t.exec(e)
|
||||||
|
;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{
|
||||||
|
const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}
|
||||||
|
return n&&(this.regexIndex+=n.position+1,
|
||||||
|
this.regexIndex===this.count&&this.considerAll()),n}}
|
||||||
|
if(e.compilerExtensions||(e.compilerExtensions=[]),
|
||||||
|
e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.")
|
||||||
|
;return e.classNameAliases=i(e.classNameAliases||{}),function n(r,o){const a=r
|
||||||
|
;if(r.isCompiled)return a
|
||||||
|
;[I,B,Z,D].forEach((e=>e(r,o))),e.compilerExtensions.forEach((e=>e(r,o))),
|
||||||
|
r.__beforeBegin=null,[T,L,P].forEach((e=>e(r,o))),r.isCompiled=!0;let c=null
|
||||||
|
;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords),
|
||||||
|
c=r.keywords.$pattern,
|
||||||
|
delete r.keywords.$pattern),c=c||/\w+/,r.keywords&&(r.keywords=$(r.keywords,e.case_insensitive)),
|
||||||
|
a.keywordPatternRe=t(c,!0),
|
||||||
|
o&&(r.begin||(r.begin=/\B|\b/),a.beginRe=t(a.begin),r.end||r.endsWithParent||(r.end=/\B|\b/),
|
||||||
|
r.end&&(a.endRe=t(a.end)),
|
||||||
|
a.terminatorEnd=l(a.end)||"",r.endsWithParent&&o.terminatorEnd&&(a.terminatorEnd+=(r.end?"|":"")+o.terminatorEnd)),
|
||||||
|
r.illegal&&(a.illegalRe=t(r.illegal)),
|
||||||
|
r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>i(e,{
|
||||||
|
variants:null},t)))),e.cachedVariants?e.cachedVariants:q(e)?i(e,{
|
||||||
|
starts:e.starts?i(e.starts):null
|
||||||
|
}):Object.isFrozen(e)?i(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{n(e,a)
|
||||||
|
})),r.starts&&n(r.starts,o),a.matcher=(e=>{const t=new s
|
||||||
|
;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"
|
||||||
|
}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"
|
||||||
|
}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(a),a}(e)}function q(e){
|
||||||
|
return!!e&&(e.endsWithParent||q(e.starts))}class J extends Error{
|
||||||
|
constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}}
|
||||||
|
const Y=n,Q=i,ee=Symbol("nomatch"),te=n=>{
|
||||||
|
const i=Object.create(null),s=Object.create(null),r=[];let o=!0
|
||||||
|
;const a="Could not find the language '{}', did you forget to load/include a language module?",l={
|
||||||
|
disableAutodetect:!0,name:"Plain text",contains:[]};let p={
|
||||||
|
ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,
|
||||||
|
languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",
|
||||||
|
cssSelector:"pre code",languages:null,__emitter:c};function b(e){
|
||||||
|
return p.noHighlightRe.test(e)}function m(e,t,n){let i="",s=""
|
||||||
|
;"object"==typeof t?(i=e,
|
||||||
|
n=t.ignoreIllegals,s=t.language):(G("10.7.0","highlight(lang, code, ...args) has been deprecated."),
|
||||||
|
G("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),
|
||||||
|
s=e,i=t),void 0===n&&(n=!0);const r={code:i,language:s};N("before:highlight",r)
|
||||||
|
;const o=r.result?r.result:E(r.language,r.code,n)
|
||||||
|
;return o.code=r.code,N("after:highlight",o),o}function E(e,n,s,r){
|
||||||
|
const c=Object.create(null);function l(){if(!N.keywords)return void M.addText(R)
|
||||||
|
;let e=0;N.keywordPatternRe.lastIndex=0;let t=N.keywordPatternRe.exec(R),n=""
|
||||||
|
;for(;t;){n+=R.substring(e,t.index)
|
||||||
|
;const s=_.case_insensitive?t[0].toLowerCase():t[0],r=(i=s,N.keywords[i]);if(r){
|
||||||
|
const[e,i]=r
|
||||||
|
;if(M.addText(n),n="",c[s]=(c[s]||0)+1,c[s]<=7&&(A+=i),e.startsWith("_"))n+=t[0];else{
|
||||||
|
const n=_.classNameAliases[e]||e;u(t[0],n)}}else n+=t[0]
|
||||||
|
;e=N.keywordPatternRe.lastIndex,t=N.keywordPatternRe.exec(R)}var i
|
||||||
|
;n+=R.substring(e),M.addText(n)}function g(){null!=N.subLanguage?(()=>{
|
||||||
|
if(""===R)return;let e=null;if("string"==typeof N.subLanguage){
|
||||||
|
if(!i[N.subLanguage])return void M.addText(R)
|
||||||
|
;e=E(N.subLanguage,R,!0,S[N.subLanguage]),S[N.subLanguage]=e._top
|
||||||
|
}else e=x(R,N.subLanguage.length?N.subLanguage:null)
|
||||||
|
;N.relevance>0&&(A+=e.relevance),M.__addSublanguage(e._emitter,e.language)
|
||||||
|
})():l(),R=""}function u(e,t){
|
||||||
|
""!==e&&(M.startScope(t),M.addText(e),M.endScope())}function d(e,t){let n=1
|
||||||
|
;const i=t.length-1;for(;n<=i;){if(!e._emit[n]){n++;continue}
|
||||||
|
const i=_.classNameAliases[e[n]]||e[n],s=t[n];i?u(s,i):(R=s,l(),R=""),n++}}
|
||||||
|
function h(e,t){
|
||||||
|
return e.scope&&"string"==typeof e.scope&&M.openNode(_.classNameAliases[e.scope]||e.scope),
|
||||||
|
e.beginScope&&(e.beginScope._wrap?(u(R,_.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),
|
||||||
|
R=""):e.beginScope._multi&&(d(e.beginScope,t),R="")),N=Object.create(e,{parent:{
|
||||||
|
value:N}}),N}function f(e,n,i){let s=((e,t)=>{const n=e&&e.exec(t)
|
||||||
|
;return n&&0===n.index})(e.endRe,i);if(s){if(e["on:end"]){const i=new t(e)
|
||||||
|
;e["on:end"](n,i),i.isMatchIgnored&&(s=!1)}if(s){
|
||||||
|
for(;e.endsParent&&e.parent;)e=e.parent;return e}}
|
||||||
|
if(e.endsWithParent)return f(e.parent,n,i)}function b(e){
|
||||||
|
return 0===N.matcher.regexIndex?(R+=e[0],1):(T=!0,0)}function m(e){
|
||||||
|
const t=e[0],i=n.substring(e.index),s=f(N,e,i);if(!s)return ee;const r=N
|
||||||
|
;N.endScope&&N.endScope._wrap?(g(),
|
||||||
|
u(t,N.endScope._wrap)):N.endScope&&N.endScope._multi?(g(),
|
||||||
|
d(N.endScope,e)):r.skip?R+=t:(r.returnEnd||r.excludeEnd||(R+=t),
|
||||||
|
g(),r.excludeEnd&&(R=t));do{
|
||||||
|
N.scope&&M.closeNode(),N.skip||N.subLanguage||(A+=N.relevance),N=N.parent
|
||||||
|
}while(N!==s.parent);return s.starts&&h(s.starts,e),r.returnEnd?0:t.length}
|
||||||
|
let w={};function y(i,r){const a=r&&r[0];if(R+=i,null==a)return g(),0
|
||||||
|
;if("begin"===w.type&&"end"===r.type&&w.index===r.index&&""===a){
|
||||||
|
if(R+=n.slice(r.index,r.index+1),!o){const t=Error(`0 width match regex (${e})`)
|
||||||
|
;throw t.languageName=e,t.badRule=w.rule,t}return 1}
|
||||||
|
if(w=r,"begin"===r.type)return(e=>{
|
||||||
|
const n=e[0],i=e.rule,s=new t(i),r=[i.__beforeBegin,i["on:begin"]]
|
||||||
|
;for(const t of r)if(t&&(t(e,s),s.isMatchIgnored))return b(n)
|
||||||
|
;return i.skip?R+=n:(i.excludeBegin&&(R+=n),
|
||||||
|
g(),i.returnBegin||i.excludeBegin||(R=n)),h(i,e),i.returnBegin?0:n.length})(r)
|
||||||
|
;if("illegal"===r.type&&!s){
|
||||||
|
const e=Error('Illegal lexeme "'+a+'" for mode "'+(N.scope||"<unnamed>")+'"')
|
||||||
|
;throw e.mode=N,e}if("end"===r.type){const e=m(r);if(e!==ee)return e}
|
||||||
|
if("illegal"===r.type&&""===a)return 1
|
||||||
|
;if(I>1e5&&I>3*r.index)throw Error("potential infinite loop, way more iterations than matches")
|
||||||
|
;return R+=a,a.length}const _=O(e)
|
||||||
|
;if(!_)throw W(a.replace("{}",e)),Error('Unknown language: "'+e+'"')
|
||||||
|
;const k=V(_);let v="",N=r||k;const S={},M=new p.__emitter(p);(()=>{const e=[]
|
||||||
|
;for(let t=N;t!==_;t=t.parent)t.scope&&e.unshift(t.scope)
|
||||||
|
;e.forEach((e=>M.openNode(e)))})();let R="",A=0,j=0,I=0,T=!1;try{
|
||||||
|
if(_.__emitTokens)_.__emitTokens(n,M);else{for(N.matcher.considerAll();;){
|
||||||
|
I++,T?T=!1:N.matcher.considerAll(),N.matcher.lastIndex=j
|
||||||
|
;const e=N.matcher.exec(n);if(!e)break;const t=y(n.substring(j,e.index),e)
|
||||||
|
;j=e.index+t}y(n.substring(j))}return M.finalize(),v=M.toHTML(),{language:e,
|
||||||
|
value:v,relevance:A,illegal:!1,_emitter:M,_top:N}}catch(t){
|
||||||
|
if(t.message&&t.message.includes("Illegal"))return{language:e,value:Y(n),
|
||||||
|
illegal:!0,relevance:0,_illegalBy:{message:t.message,index:j,
|
||||||
|
context:n.slice(j-100,j+100),mode:t.mode,resultSoFar:v},_emitter:M};if(o)return{
|
||||||
|
language:e,value:Y(n),illegal:!1,relevance:0,errorRaised:t,_emitter:M,_top:N}
|
||||||
|
;throw t}}function x(e,t){t=t||p.languages||Object.keys(i);const n=(e=>{
|
||||||
|
const t={value:Y(e),illegal:!1,relevance:0,_top:l,_emitter:new p.__emitter(p)}
|
||||||
|
;return t._emitter.addText(e),t})(e),s=t.filter(O).filter(v).map((t=>E(t,e,!1)))
|
||||||
|
;s.unshift(n);const r=s.sort(((e,t)=>{
|
||||||
|
if(e.relevance!==t.relevance)return t.relevance-e.relevance
|
||||||
|
;if(e.language&&t.language){if(O(e.language).supersetOf===t.language)return 1
|
||||||
|
;if(O(t.language).supersetOf===e.language)return-1}return 0})),[o,a]=r,c=o
|
||||||
|
;return c.secondBest=a,c}function w(e){let t=null;const n=(e=>{
|
||||||
|
let t=e.className+" ";t+=e.parentNode?e.parentNode.className:""
|
||||||
|
;const n=p.languageDetectRe.exec(t);if(n){const t=O(n[1])
|
||||||
|
;return t||(X(a.replace("{}",n[1])),
|
||||||
|
X("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}
|
||||||
|
return t.split(/\s+/).find((e=>b(e)||O(e)))})(e);if(b(n))return
|
||||||
|
;if(N("before:highlightElement",{el:e,language:n
|
||||||
|
}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e)
|
||||||
|
;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),
|
||||||
|
console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),
|
||||||
|
console.warn("The element with unescaped HTML:"),
|
||||||
|
console.warn(e)),p.throwUnescapedHTML))throw new J("One of your code blocks includes unescaped HTML.",e.innerHTML)
|
||||||
|
;t=e;const i=t.textContent,r=n?m(i,{language:n,ignoreIllegals:!0}):x(i)
|
||||||
|
;e.innerHTML=r.value,e.dataset.highlighted="yes",((e,t,n)=>{const i=t&&s[t]||n
|
||||||
|
;e.classList.add("hljs"),e.classList.add("language-"+i)
|
||||||
|
})(e,n,r.language),e.result={language:r.language,re:r.relevance,
|
||||||
|
relevance:r.relevance},r.secondBest&&(e.secondBest={
|
||||||
|
language:r.secondBest.language,relevance:r.secondBest.relevance
|
||||||
|
}),N("after:highlightElement",{el:e,result:r,text:i})}let y=!1;function _(){
|
||||||
|
"loading"!==document.readyState?document.querySelectorAll(p.cssSelector).forEach(w):y=!0
|
||||||
|
}function O(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}
|
||||||
|
function k(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{
|
||||||
|
s[e.toLowerCase()]=t}))}function v(e){const t=O(e)
|
||||||
|
;return t&&!t.disableAutodetect}function N(e,t){const n=e;r.forEach((e=>{
|
||||||
|
e[n]&&e[n](t)}))}
|
||||||
|
"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{
|
||||||
|
y&&_()}),!1),Object.assign(n,{highlight:m,highlightAuto:x,highlightAll:_,
|
||||||
|
highlightElement:w,
|
||||||
|
highlightBlock:e=>(G("10.7.0","highlightBlock will be removed entirely in v12.0"),
|
||||||
|
G("10.7.0","Please use highlightElement now."),w(e)),configure:e=>{p=Q(p,e)},
|
||||||
|
initHighlighting:()=>{
|
||||||
|
_(),G("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},
|
||||||
|
initHighlightingOnLoad:()=>{
|
||||||
|
_(),G("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")
|
||||||
|
},registerLanguage:(e,t)=>{let s=null;try{s=t(n)}catch(t){
|
||||||
|
if(W("Language definition for '{}' could not be registered.".replace("{}",e)),
|
||||||
|
!o)throw t;W(t),s=l}
|
||||||
|
s.name||(s.name=e),i[e]=s,s.rawDefinition=t.bind(null,n),s.aliases&&k(s.aliases,{
|
||||||
|
languageName:e})},unregisterLanguage:e=>{delete i[e]
|
||||||
|
;for(const t of Object.keys(s))s[t]===e&&delete s[t]},
|
||||||
|
listLanguages:()=>Object.keys(i),getLanguage:O,registerAliases:k,
|
||||||
|
autoDetection:v,inherit:Q,addPlugin:e=>{(e=>{
|
||||||
|
e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{
|
||||||
|
e["before:highlightBlock"](Object.assign({block:t.el},t))
|
||||||
|
}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{
|
||||||
|
e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),r.push(e)},
|
||||||
|
removePlugin:e=>{const t=r.indexOf(e);-1!==t&&r.splice(t,1)}}),n.debugMode=()=>{
|
||||||
|
o=!1},n.safeMode=()=>{o=!0},n.versionString="11.10.0",n.regex={concat:h,
|
||||||
|
lookahead:g,either:f,optional:d,anyNumberOfTimes:u}
|
||||||
|
;for(const t in A)"object"==typeof A[t]&&e(A[t]);return Object.assign(n,A),n
|
||||||
|
},ne=te({});ne.newInstance=()=>te({});export{ne as default};
|
||||||
|
|
@ -0,0 +1,552 @@
|
||||||
|
/*! `1c` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: 1C:Enterprise
|
||||||
|
Author: Stanislav Belov <stbelov@gmail.com>
|
||||||
|
Description: built-in language 1C:Enterprise (v7, v8)
|
||||||
|
Category: enterprise
|
||||||
|
*/
|
||||||
|
|
||||||
|
function _1c(hljs) {
|
||||||
|
// общий паттерн для определения идентификаторов
|
||||||
|
const UNDERSCORE_IDENT_RE = '[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]+';
|
||||||
|
|
||||||
|
// v7 уникальные ключевые слова, отсутствующие в v8 ==> keyword
|
||||||
|
const v7_keywords =
|
||||||
|
'далее ';
|
||||||
|
|
||||||
|
// v8 ключевые слова ==> keyword
|
||||||
|
const v8_keywords =
|
||||||
|
'возврат вызватьисключение выполнить для если и из или иначе иначеесли исключение каждого конецесли '
|
||||||
|
+ 'конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл экспорт ';
|
||||||
|
|
||||||
|
// keyword : ключевые слова
|
||||||
|
const KEYWORD = v7_keywords + v8_keywords;
|
||||||
|
|
||||||
|
// v7 уникальные директивы, отсутствующие в v8 ==> meta-keyword
|
||||||
|
const v7_meta_keywords =
|
||||||
|
'загрузитьизфайла ';
|
||||||
|
|
||||||
|
// v8 ключевые слова в инструкциях препроцессора, директивах компиляции, аннотациях ==> meta-keyword
|
||||||
|
const v8_meta_keywords =
|
||||||
|
'вебклиент вместо внешнеесоединение клиент конецобласти мобильноеприложениеклиент мобильноеприложениесервер '
|
||||||
|
+ 'наклиенте наклиентенасервере наклиентенасерверебезконтекста насервере насерверебезконтекста область перед '
|
||||||
|
+ 'после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент ';
|
||||||
|
|
||||||
|
// meta-keyword : ключевые слова в инструкциях препроцессора, директивах компиляции, аннотациях
|
||||||
|
const METAKEYWORD = v7_meta_keywords + v8_meta_keywords;
|
||||||
|
|
||||||
|
// v7 системные константы ==> built_in
|
||||||
|
const v7_system_constants =
|
||||||
|
'разделительстраниц разделительстрок символтабуляции ';
|
||||||
|
|
||||||
|
// v7 уникальные методы глобального контекста, отсутствующие в v8 ==> built_in
|
||||||
|
const v7_global_context_methods =
|
||||||
|
'ansitooem oemtoansi ввестивидсубконто ввестиперечисление ввестипериод ввестиплансчетов выбранныйплансчетов '
|
||||||
|
+ 'датагод датамесяц датачисло заголовоксистемы значениевстроку значениеизстроки каталогиб каталогпользователя '
|
||||||
|
+ 'кодсимв конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца '
|
||||||
|
+ 'коннедели лог лог10 максимальноеколичествосубконто названиеинтерфейса названиенабораправ назначитьвид '
|
||||||
|
+ 'назначитьсчет найтиссылки началопериодаби началостандартногоинтервала начгода начквартала начмесяца '
|
||||||
|
+ 'начнедели номерднягода номерднянедели номернеделигода обработкаожидания основнойжурналрасчетов '
|
||||||
|
+ 'основнойплансчетов основнойязык очиститьокносообщений периодстр получитьвремята получитьдатута '
|
||||||
|
+ 'получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта '
|
||||||
|
+ 'префиксавтонумерации пропись пустоезначение разм разобратьпозициюдокумента рассчитатьрегистрына '
|
||||||
|
+ 'рассчитатьрегистрыпо симв создатьобъект статусвозврата стрколичествострок сформироватьпозициюдокумента '
|
||||||
|
+ 'счетпокоду текущеевремя типзначения типзначениястр установитьтана установитьтапо фиксшаблон шаблон ';
|
||||||
|
|
||||||
|
// v8 методы глобального контекста ==> built_in
|
||||||
|
const v8_global_context_methods =
|
||||||
|
'acos asin atan base64значение base64строка cos exp log log10 pow sin sqrt tan xmlзначение xmlстрока '
|
||||||
|
+ 'xmlтип xmlтипзнч активноеокно безопасныйрежим безопасныйрежимразделенияданных булево ввестидату ввестизначение '
|
||||||
|
+ 'ввестистроку ввестичисло возможностьчтенияxml вопрос восстановитьзначение врег выгрузитьжурналрегистрации '
|
||||||
|
+ 'выполнитьобработкуоповещения выполнитьпроверкуправдоступа вычислить год данныеформывзначение дата день деньгода '
|
||||||
|
+ 'деньнедели добавитьмесяц заблокироватьданныедляредактирования заблокироватьработупользователя завершитьработусистемы '
|
||||||
|
+ 'загрузитьвнешнююкомпоненту закрытьсправку записатьjson записатьxml записатьдатуjson записьжурналарегистрации '
|
||||||
|
+ 'заполнитьзначениясвойств запроситьразрешениепользователя запуститьприложение запуститьсистему зафиксироватьтранзакцию '
|
||||||
|
+ 'значениевданныеформы значениевстрокувнутр значениевфайл значениезаполнено значениеизстрокивнутр значениеизфайла '
|
||||||
|
+ 'изxmlтипа импортмоделиxdto имякомпьютера имяпользователя инициализироватьпредопределенныеданные информацияобошибке '
|
||||||
|
+ 'каталогбиблиотекимобильногоустройства каталогвременныхфайлов каталогдокументов каталогпрограммы кодироватьстроку '
|
||||||
|
+ 'кодлокализацииинформационнойбазы кодсимвола командасистемы конецгода конецдня конецквартала конецмесяца конецминуты '
|
||||||
|
+ 'конецнедели конецчаса конфигурациябазыданныхизмененадинамически конфигурацияизменена копироватьданныеформы '
|
||||||
|
+ 'копироватьфайл краткоепредставлениеошибки лев макс местноевремя месяц мин минута монопольныйрежим найти '
|
||||||
|
+ 'найтинедопустимыесимволыxml найтиокнопонавигационнойссылке найтипомеченныенаудаление найтипоссылкам найтифайлы '
|
||||||
|
+ 'началогода началодня началоквартала началомесяца началоминуты началонедели началочаса начатьзапросразрешенияпользователя '
|
||||||
|
+ 'начатьзапускприложения начатькопированиефайла начатьперемещениефайла начатьподключениевнешнейкомпоненты '
|
||||||
|
+ 'начатьподключениерасширенияработыскриптографией начатьподключениерасширенияработысфайлами начатьпоискфайлов '
|
||||||
|
+ 'начатьполучениекаталогавременныхфайлов начатьполучениекаталогадокументов начатьполучениерабочегокаталогаданныхпользователя '
|
||||||
|
+ 'начатьполучениефайлов начатьпомещениефайла начатьпомещениефайлов начатьсозданиедвоичныхданныхизфайла начатьсозданиекаталога '
|
||||||
|
+ 'начатьтранзакцию начатьудалениефайлов начатьустановкувнешнейкомпоненты начатьустановкурасширенияработыскриптографией '
|
||||||
|
+ 'начатьустановкурасширенияработысфайлами неделягода необходимостьзавершениясоединения номерсеансаинформационнойбазы '
|
||||||
|
+ 'номерсоединенияинформационнойбазы нрег нстр обновитьинтерфейс обновитьнумерациюобъектов обновитьповторноиспользуемыезначения '
|
||||||
|
+ 'обработкапрерыванияпользователя объединитьфайлы окр описаниеошибки оповестить оповеститьобизменении '
|
||||||
|
+ 'отключитьобработчикзапросанастроекклиенталицензирования отключитьобработчикожидания отключитьобработчикоповещения '
|
||||||
|
+ 'открытьзначение открытьиндекссправки открытьсодержаниесправки открытьсправку открытьформу открытьформумодально '
|
||||||
|
+ 'отменитьтранзакцию очиститьжурналрегистрации очиститьнастройкипользователя очиститьсообщения параметрыдоступа '
|
||||||
|
+ 'перейтипонавигационнойссылке переместитьфайл подключитьвнешнююкомпоненту '
|
||||||
|
+ 'подключитьобработчикзапросанастроекклиенталицензирования подключитьобработчикожидания подключитьобработчикоповещения '
|
||||||
|
+ 'подключитьрасширениеработыскриптографией подключитьрасширениеработысфайлами подробноепредставлениеошибки '
|
||||||
|
+ 'показатьвводдаты показатьвводзначения показатьвводстроки показатьвводчисла показатьвопрос показатьзначение '
|
||||||
|
+ 'показатьинформациюобошибке показатьнакарте показатьоповещениепользователя показатьпредупреждение полноеимяпользователя '
|
||||||
|
+ 'получитьcomобъект получитьxmlтип получитьадреспоместоположению получитьблокировкусеансов получитьвремязавершенияспящегосеанса '
|
||||||
|
+ 'получитьвремязасыпанияпассивногосеанса получитьвремяожиданияблокировкиданных получитьданныевыбора '
|
||||||
|
+ 'получитьдополнительныйпараметрклиенталицензирования получитьдопустимыекодылокализации получитьдопустимыечасовыепояса '
|
||||||
|
+ 'получитьзаголовокклиентскогоприложения получитьзаголовоксистемы получитьзначенияотборажурналарегистрации '
|
||||||
|
+ 'получитьидентификаторконфигурации получитьизвременногохранилища получитьимявременногофайла '
|
||||||
|
+ 'получитьимяклиенталицензирования получитьинформациюэкрановклиента получитьиспользованиежурналарегистрации '
|
||||||
|
+ 'получитьиспользованиесобытияжурналарегистрации получитькраткийзаголовокприложения получитьмакетоформления '
|
||||||
|
+ 'получитьмаскувсефайлы получитьмаскувсефайлыклиента получитьмаскувсефайлысервера получитьместоположениепоадресу '
|
||||||
|
+ 'получитьминимальнуюдлинупаролейпользователей получитьнавигационнуюссылку получитьнавигационнуюссылкуинформационнойбазы '
|
||||||
|
+ 'получитьобновлениеконфигурациибазыданных получитьобновлениепредопределенныхданныхинформационнойбазы получитьобщиймакет '
|
||||||
|
+ 'получитьобщуюформу получитьокна получитьоперативнуюотметкувремени получитьотключениебезопасногорежима '
|
||||||
|
+ 'получитьпараметрыфункциональныхопцийинтерфейса получитьполноеимяпредопределенногозначения '
|
||||||
|
+ 'получитьпредставлениянавигационныхссылок получитьпроверкусложностипаролейпользователей получитьразделительпути '
|
||||||
|
+ 'получитьразделительпутиклиента получитьразделительпутисервера получитьсеансыинформационнойбазы '
|
||||||
|
+ 'получитьскоростьклиентскогосоединения получитьсоединенияинформационнойбазы получитьсообщенияпользователю '
|
||||||
|
+ 'получитьсоответствиеобъектаиформы получитьсоставстандартногоинтерфейсаodata получитьструктурухранениябазыданных '
|
||||||
|
+ 'получитьтекущийсеансинформационнойбазы получитьфайл получитьфайлы получитьформу получитьфункциональнуюопцию '
|
||||||
|
+ 'получитьфункциональнуюопциюинтерфейса получитьчасовойпоясинформационнойбазы пользователиос поместитьвовременноехранилище '
|
||||||
|
+ 'поместитьфайл поместитьфайлы прав праводоступа предопределенноезначение представлениекодалокализации представлениепериода '
|
||||||
|
+ 'представлениеправа представлениеприложения представлениесобытияжурналарегистрации представлениечасовогопояса предупреждение '
|
||||||
|
+ 'прекратитьработусистемы привилегированныйрежим продолжитьвызов прочитатьjson прочитатьxml прочитатьдатуjson пустаястрока '
|
||||||
|
+ 'рабочийкаталогданныхпользователя разблокироватьданныедляредактирования разделитьфайл разорватьсоединениесвнешнимисточникомданных '
|
||||||
|
+ 'раскодироватьстроку рольдоступна секунда сигнал символ скопироватьжурналрегистрации смещениелетнеговремени '
|
||||||
|
+ 'смещениестандартноговремени соединитьбуферыдвоичныхданных создатькаталог создатьфабрикуxdto сокрл сокрлп сокрп сообщить '
|
||||||
|
+ 'состояние сохранитьзначение сохранитьнастройкипользователя сред стрдлина стрзаканчиваетсяна стрзаменить стрнайти стрначинаетсяс '
|
||||||
|
+ 'строка строкасоединенияинформационнойбазы стрполучитьстроку стрразделить стрсоединить стрсравнить стрчисловхождений '
|
||||||
|
+ 'стрчислострок стршаблон текущаядата текущаядатасеанса текущаяуниверсальнаядата текущаяуниверсальнаядатавмиллисекундах '
|
||||||
|
+ 'текущийвариантинтерфейсаклиентскогоприложения текущийвариантосновногошрифтаклиентскогоприложения текущийкодлокализации '
|
||||||
|
+ 'текущийрежимзапуска текущийязык текущийязыксистемы тип типзнч транзакцияактивна трег удалитьданныеинформационнойбазы '
|
||||||
|
+ 'удалитьизвременногохранилища удалитьобъекты удалитьфайлы универсальноевремя установитьбезопасныйрежим '
|
||||||
|
+ 'установитьбезопасныйрежимразделенияданных установитьблокировкусеансов установитьвнешнююкомпоненту '
|
||||||
|
+ 'установитьвремязавершенияспящегосеанса установитьвремязасыпанияпассивногосеанса установитьвремяожиданияблокировкиданных '
|
||||||
|
+ 'установитьзаголовокклиентскогоприложения установитьзаголовоксистемы установитьиспользованиежурналарегистрации '
|
||||||
|
+ 'установитьиспользованиесобытияжурналарегистрации установитькраткийзаголовокприложения '
|
||||||
|
+ 'установитьминимальнуюдлинупаролейпользователей установитьмонопольныйрежим установитьнастройкиклиенталицензирования '
|
||||||
|
+ 'установитьобновлениепредопределенныхданныхинформационнойбазы установитьотключениебезопасногорежима '
|
||||||
|
+ 'установитьпараметрыфункциональныхопцийинтерфейса установитьпривилегированныйрежим '
|
||||||
|
+ 'установитьпроверкусложностипаролейпользователей установитьрасширениеработыскриптографией '
|
||||||
|
+ 'установитьрасширениеработысфайлами установитьсоединениесвнешнимисточникомданных установитьсоответствиеобъектаиформы '
|
||||||
|
+ 'установитьсоставстандартногоинтерфейсаodata установитьчасовойпоясинформационнойбазы установитьчасовойпояссеанса '
|
||||||
|
+ 'формат цел час часовойпояс часовойпояссеанса число числопрописью этоадресвременногохранилища ';
|
||||||
|
|
||||||
|
// v8 свойства глобального контекста ==> built_in
|
||||||
|
const v8_global_context_property =
|
||||||
|
'wsссылки библиотекакартинок библиотекамакетовоформлениякомпоновкиданных библиотекастилей бизнеспроцессы '
|
||||||
|
+ 'внешниеисточникиданных внешниеобработки внешниеотчеты встроенныепокупки главныйинтерфейс главныйстиль '
|
||||||
|
+ 'документы доставляемыеуведомления журналыдокументов задачи информацияобинтернетсоединении использованиерабочейдаты '
|
||||||
|
+ 'историяработыпользователя константы критерииотбора метаданные обработки отображениерекламы отправкадоставляемыхуведомлений '
|
||||||
|
+ 'отчеты панельзадачос параметрзапуска параметрысеанса перечисления планывидоврасчета планывидовхарактеристик '
|
||||||
|
+ 'планыобмена планысчетов полнотекстовыйпоиск пользователиинформационнойбазы последовательности проверкавстроенныхпокупок '
|
||||||
|
+ 'рабочаядата расширенияконфигурации регистрыбухгалтерии регистрынакопления регистрырасчета регистрысведений '
|
||||||
|
+ 'регламентныезадания сериализаторxdto справочники средствагеопозиционирования средствакриптографии средствамультимедиа '
|
||||||
|
+ 'средстваотображениярекламы средствапочты средствателефонии фабрикаxdto файловыепотоки фоновыезадания хранилищанастроек '
|
||||||
|
+ 'хранилищевариантовотчетов хранилищенастроекданныхформ хранилищеобщихнастроек хранилищепользовательскихнастроекдинамическихсписков '
|
||||||
|
+ 'хранилищепользовательскихнастроекотчетов хранилищесистемныхнастроек ';
|
||||||
|
|
||||||
|
// built_in : встроенные или библиотечные объекты (константы, классы, функции)
|
||||||
|
const BUILTIN =
|
||||||
|
v7_system_constants
|
||||||
|
+ v7_global_context_methods + v8_global_context_methods
|
||||||
|
+ v8_global_context_property;
|
||||||
|
|
||||||
|
// v8 системные наборы значений ==> class
|
||||||
|
const v8_system_sets_of_values =
|
||||||
|
'webцвета windowsцвета windowsшрифты библиотекакартинок рамкистиля символы цветастиля шрифтыстиля ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - интерфейсные ==> class
|
||||||
|
const v8_system_enums_interface =
|
||||||
|
'автоматическоесохранениеданныхформывнастройках автонумерациявформе автораздвижениесерий '
|
||||||
|
+ 'анимациядиаграммы вариантвыравниванияэлементовизаголовков вариантуправлениявысотойтаблицы '
|
||||||
|
+ 'вертикальнаяпрокруткаформы вертикальноеположение вертикальноеположениеэлемента видгруппыформы '
|
||||||
|
+ 'виддекорацииформы виддополненияэлементаформы видизмененияданных видкнопкиформы видпереключателя '
|
||||||
|
+ 'видподписейкдиаграмме видполяформы видфлажка влияниеразмеранапузырекдиаграммы горизонтальноеположение '
|
||||||
|
+ 'горизонтальноеположениеэлемента группировкаколонок группировкаподчиненныхэлементовформы '
|
||||||
|
+ 'группыиэлементы действиеперетаскивания дополнительныйрежимотображения допустимыедействияперетаскивания '
|
||||||
|
+ 'интервалмеждуэлементамиформы использованиевывода использованиеполосыпрокрутки '
|
||||||
|
+ 'используемоезначениеточкибиржевойдиаграммы историявыборапривводе источникзначенийоситочекдиаграммы '
|
||||||
|
+ 'источникзначенияразмерапузырькадиаграммы категориягруппыкоманд максимумсерий начальноеотображениедерева '
|
||||||
|
+ 'начальноеотображениесписка обновлениетекстаредактирования ориентациядендрограммы ориентациядиаграммы '
|
||||||
|
+ 'ориентацияметокдиаграммы ориентацияметоксводнойдиаграммы ориентацияэлементаформы отображениевдиаграмме '
|
||||||
|
+ 'отображениевлегендедиаграммы отображениегруппыкнопок отображениезаголовкашкалыдиаграммы '
|
||||||
|
+ 'отображениезначенийсводнойдиаграммы отображениезначенияизмерительнойдиаграммы '
|
||||||
|
+ 'отображениеинтерваладиаграммыганта отображениекнопки отображениекнопкивыбора отображениеобсужденийформы '
|
||||||
|
+ 'отображениеобычнойгруппы отображениеотрицательныхзначенийпузырьковойдиаграммы отображениепанелипоиска '
|
||||||
|
+ 'отображениеподсказки отображениепредупрежденияприредактировании отображениеразметкиполосырегулирования '
|
||||||
|
+ 'отображениестраницформы отображениетаблицы отображениетекстазначениядиаграммыганта '
|
||||||
|
+ 'отображениеуправленияобычнойгруппы отображениефигурыкнопки палитрацветовдиаграммы поведениеобычнойгруппы '
|
||||||
|
+ 'поддержкамасштабадендрограммы поддержкамасштабадиаграммыганта поддержкамасштабасводнойдиаграммы '
|
||||||
|
+ 'поисквтаблицепривводе положениезаголовкаэлементаформы положениекартинкикнопкиформы '
|
||||||
|
+ 'положениекартинкиэлементаграфическойсхемы положениекоманднойпанелиформы положениекоманднойпанелиэлементаформы '
|
||||||
|
+ 'положениеопорнойточкиотрисовки положениеподписейкдиаграмме положениеподписейшкалызначенийизмерительнойдиаграммы '
|
||||||
|
+ 'положениесостоянияпросмотра положениестрокипоиска положениетекстасоединительнойлинии положениеуправленияпоиском '
|
||||||
|
+ 'положениешкалывремени порядокотображенияточекгоризонтальнойгистограммы порядоксерийвлегендедиаграммы '
|
||||||
|
+ 'размеркартинки расположениезаголовкашкалыдиаграммы растягиваниеповертикалидиаграммыганта '
|
||||||
|
+ 'режимавтоотображениясостояния режимвводастроктаблицы режимвыборанезаполненного режимвыделениядаты '
|
||||||
|
+ 'режимвыделениястрокитаблицы режимвыделениятаблицы режимизмененияразмера режимизменениясвязанногозначения '
|
||||||
|
+ 'режимиспользованиядиалогапечати режимиспользованияпараметракоманды режиммасштабированияпросмотра '
|
||||||
|
+ 'режимосновногоокнаклиентскогоприложения режимоткрытияокнаформы режимотображениявыделения '
|
||||||
|
+ 'режимотображениягеографическойсхемы режимотображениязначенийсерии режимотрисовкисеткиграфическойсхемы '
|
||||||
|
+ 'режимполупрозрачностидиаграммы режимпробеловдиаграммы режимразмещениянастранице режимредактированияколонки '
|
||||||
|
+ 'режимсглаживаниядиаграммы режимсглаживанияиндикатора режимсписказадач сквозноевыравнивание '
|
||||||
|
+ 'сохранениеданныхформывнастройках способзаполнениятекстазаголовкашкалыдиаграммы '
|
||||||
|
+ 'способопределенияограничивающегозначениядиаграммы стандартнаягруппакоманд стандартноеоформление '
|
||||||
|
+ 'статусоповещенияпользователя стильстрелки типаппроксимациилиниитрендадиаграммы типдиаграммы '
|
||||||
|
+ 'типединицышкалывремени типимпортасерийслоягеографическойсхемы типлиниигеографическойсхемы типлиниидиаграммы '
|
||||||
|
+ 'типмаркерагеографическойсхемы типмаркерадиаграммы типобластиоформления '
|
||||||
|
+ 'типорганизацииисточникаданныхгеографическойсхемы типотображениясериислоягеографическойсхемы '
|
||||||
|
+ 'типотображенияточечногообъектагеографическойсхемы типотображенияшкалыэлементалегендыгеографическойсхемы '
|
||||||
|
+ 'типпоискаобъектовгеографическойсхемы типпроекциигеографическойсхемы типразмещенияизмерений '
|
||||||
|
+ 'типразмещенияреквизитовизмерений типрамкиэлементауправления типсводнойдиаграммы '
|
||||||
|
+ 'типсвязидиаграммыганта типсоединениязначенийпосериямдиаграммы типсоединенияточекдиаграммы '
|
||||||
|
+ 'типсоединительнойлинии типстороныэлементаграфическойсхемы типформыотчета типшкалырадарнойдиаграммы '
|
||||||
|
+ 'факторлиниитрендадиаграммы фигуракнопки фигурыграфическойсхемы фиксациявтаблице форматдняшкалывремени '
|
||||||
|
+ 'форматкартинки ширинаподчиненныхэлементовформы ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - свойства прикладных объектов ==> class
|
||||||
|
const v8_system_enums_objects_properties =
|
||||||
|
'виддвижениябухгалтерии виддвижениянакопления видпериодарегистрарасчета видсчета видточкимаршрутабизнеспроцесса '
|
||||||
|
+ 'использованиеагрегатарегистранакопления использованиегруппиэлементов использованиережимапроведения '
|
||||||
|
+ 'использованиесреза периодичностьагрегатарегистранакопления режимавтовремя режимзаписидокумента режимпроведениядокумента ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - планы обмена ==> class
|
||||||
|
const v8_system_enums_exchange_plans =
|
||||||
|
'авторегистрацияизменений допустимыйномерсообщения отправкаэлементаданных получениеэлементаданных ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - табличный документ ==> class
|
||||||
|
const v8_system_enums_tabular_document =
|
||||||
|
'использованиерасшифровкитабличногодокумента ориентациястраницы положениеитоговколоноксводнойтаблицы '
|
||||||
|
+ 'положениеитоговстроксводнойтаблицы положениетекстаотносительнокартинки расположениезаголовкагруппировкитабличногодокумента '
|
||||||
|
+ 'способчтениязначенийтабличногодокумента типдвустороннейпечати типзаполненияобластитабличногодокумента '
|
||||||
|
+ 'типкурсоровтабличногодокумента типлиниирисункатабличногодокумента типлинииячейкитабличногодокумента '
|
||||||
|
+ 'типнаправленияпереходатабличногодокумента типотображениявыделениятабличногодокумента типотображениялинийсводнойтаблицы '
|
||||||
|
+ 'типразмещениятекстатабличногодокумента типрисункатабличногодокумента типсмещениятабличногодокумента '
|
||||||
|
+ 'типузоратабличногодокумента типфайлатабличногодокумента точностьпечати чередованиерасположениястраниц ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - планировщик ==> class
|
||||||
|
const v8_system_enums_sheduler =
|
||||||
|
'отображениевремениэлементовпланировщика ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - форматированный документ ==> class
|
||||||
|
const v8_system_enums_formatted_document =
|
||||||
|
'типфайлаформатированногодокумента ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - запрос ==> class
|
||||||
|
const v8_system_enums_query =
|
||||||
|
'обходрезультатазапроса типзаписизапроса ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - построитель отчета ==> class
|
||||||
|
const v8_system_enums_report_builder =
|
||||||
|
'видзаполнениярасшифровкипостроителяотчета типдобавленияпредставлений типизмеренияпостроителяотчета типразмещенияитогов ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - работа с файлами ==> class
|
||||||
|
const v8_system_enums_files =
|
||||||
|
'доступкфайлу режимдиалогавыборафайла режимоткрытияфайла ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - построитель запроса ==> class
|
||||||
|
const v8_system_enums_query_builder =
|
||||||
|
'типизмеренияпостроителязапроса ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - анализ данных ==> class
|
||||||
|
const v8_system_enums_data_analysis =
|
||||||
|
'видданныханализа методкластеризации типединицыинтервалавременианализаданных типзаполнениятаблицырезультатаанализаданных '
|
||||||
|
+ 'типиспользованиячисловыхзначенийанализаданных типисточникаданныхпоискаассоциаций типколонкианализаданныхдереворешений '
|
||||||
|
+ 'типколонкианализаданныхкластеризация типколонкианализаданныхобщаястатистика типколонкианализаданныхпоискассоциаций '
|
||||||
|
+ 'типколонкианализаданныхпоискпоследовательностей типколонкимоделипрогноза типмерырасстоянияанализаданных '
|
||||||
|
+ 'типотсеченияправилассоциации типполяанализаданных типстандартизациианализаданных типупорядочиванияправилассоциациианализаданных '
|
||||||
|
+ 'типупорядочиванияшаблоновпоследовательностейанализаданных типупрощениядереварешений ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - xml, json, xs, dom, xdto, web-сервисы ==> class
|
||||||
|
const v8_system_enums_xml_json_xs_dom_xdto_ws =
|
||||||
|
'wsнаправлениепараметра вариантxpathxs вариантзаписидатыjson вариантпростоготипаxs видгруппымоделиxs видфасетаxdto '
|
||||||
|
+ 'действиепостроителяdom завершенностьпростоготипаxs завершенностьсоставноготипаxs завершенностьсхемыxs запрещенныеподстановкиxs '
|
||||||
|
+ 'исключениягруппподстановкиxs категорияиспользованияатрибутаxs категорияограниченияидентичностиxs категорияограниченияпространствименxs '
|
||||||
|
+ 'методнаследованияxs модельсодержимогоxs назначениетипаxml недопустимыеподстановкиxs обработкапробельныхсимволовxs обработкасодержимогоxs '
|
||||||
|
+ 'ограничениезначенияxs параметрыотбораузловdom переносстрокjson позициявдокументеdom пробельныесимволыxml типатрибутаxml типзначенияjson '
|
||||||
|
+ 'типканоническогоxml типкомпонентыxs типпроверкиxml типрезультатаdomxpath типузлаdom типузлаxml формаxml формапредставленияxs '
|
||||||
|
+ 'форматдатыjson экранированиесимволовjson ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - система компоновки данных ==> class
|
||||||
|
const v8_system_enums_data_composition_system =
|
||||||
|
'видсравнениякомпоновкиданных действиеобработкирасшифровкикомпоновкиданных направлениесортировкикомпоновкиданных '
|
||||||
|
+ 'расположениевложенныхэлементоврезультатакомпоновкиданных расположениеитоговкомпоновкиданных расположениегруппировкикомпоновкиданных '
|
||||||
|
+ 'расположениеполейгруппировкикомпоновкиданных расположениеполякомпоновкиданных расположениереквизитовкомпоновкиданных '
|
||||||
|
+ 'расположениересурсовкомпоновкиданных типбухгалтерскогоостаткакомпоновкиданных типвыводатекстакомпоновкиданных '
|
||||||
|
+ 'типгруппировкикомпоновкиданных типгруппыэлементовотборакомпоновкиданных типдополненияпериодакомпоновкиданных '
|
||||||
|
+ 'типзаголовкаполейкомпоновкиданных типмакетагруппировкикомпоновкиданных типмакетаобластикомпоновкиданных типостаткакомпоновкиданных '
|
||||||
|
+ 'типпериодакомпоновкиданных типразмещениятекстакомпоновкиданных типсвязинаборовданныхкомпоновкиданных типэлементарезультатакомпоновкиданных '
|
||||||
|
+ 'расположениелегендыдиаграммыкомпоновкиданных типпримененияотборакомпоновкиданных режимотображенияэлементанастройкикомпоновкиданных '
|
||||||
|
+ 'режимотображениянастроеккомпоновкиданных состояниеэлементанастройкикомпоновкиданных способвосстановлениянастроеккомпоновкиданных '
|
||||||
|
+ 'режимкомпоновкирезультата использованиепараметракомпоновкиданных автопозицияресурсовкомпоновкиданных '
|
||||||
|
+ 'вариантиспользованиягруппировкикомпоновкиданных расположениересурсоввдиаграммекомпоновкиданных фиксациякомпоновкиданных '
|
||||||
|
+ 'использованиеусловногооформлениякомпоновкиданных ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - почта ==> class
|
||||||
|
const v8_system_enums_email =
|
||||||
|
'важностьинтернетпочтовогосообщения обработкатекстаинтернетпочтовогосообщения способкодированияинтернетпочтовоговложения '
|
||||||
|
+ 'способкодированиянеasciiсимволовинтернетпочтовогосообщения типтекстапочтовогосообщения протоколинтернетпочты '
|
||||||
|
+ 'статусразборапочтовогосообщения ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - журнал регистрации ==> class
|
||||||
|
const v8_system_enums_logbook =
|
||||||
|
'режимтранзакциизаписижурналарегистрации статустранзакциизаписижурналарегистрации уровеньжурналарегистрации ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - криптография ==> class
|
||||||
|
const v8_system_enums_cryptography =
|
||||||
|
'расположениехранилищасертификатовкриптографии режимвключениясертификатовкриптографии режимпроверкисертификатакриптографии '
|
||||||
|
+ 'типхранилищасертификатовкриптографии ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - ZIP ==> class
|
||||||
|
const v8_system_enums_zip =
|
||||||
|
'кодировкаименфайловвzipфайле методсжатияzip методшифрованияzip режимвосстановленияпутейфайловzip режимобработкиподкаталоговzip '
|
||||||
|
+ 'режимсохраненияпутейzip уровеньсжатияzip ';
|
||||||
|
|
||||||
|
// v8 системные перечисления -
|
||||||
|
// Блокировка данных, Фоновые задания, Автоматизированное тестирование,
|
||||||
|
// Доставляемые уведомления, Встроенные покупки, Интернет, Работа с двоичными данными ==> class
|
||||||
|
const v8_system_enums_other =
|
||||||
|
'звуковоеоповещение направлениепереходакстроке позициявпотоке порядокбайтов режимблокировкиданных режимуправленияблокировкойданных '
|
||||||
|
+ 'сервисвстроенныхпокупок состояниефоновогозадания типподписчикадоставляемыхуведомлений уровеньиспользованиязащищенногосоединенияftp ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - схема запроса ==> class
|
||||||
|
const v8_system_enums_request_schema =
|
||||||
|
'направлениепорядкасхемызапроса типдополненияпериодамисхемызапроса типконтрольнойточкисхемызапроса типобъединениясхемызапроса '
|
||||||
|
+ 'типпараметрадоступнойтаблицысхемызапроса типсоединениясхемызапроса ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - свойства объектов метаданных ==> class
|
||||||
|
const v8_system_enums_properties_of_metadata_objects =
|
||||||
|
'httpметод автоиспользованиеобщегореквизита автопрефиксномеразадачи вариантвстроенногоязыка видиерархии видрегистранакопления '
|
||||||
|
+ 'видтаблицывнешнегоисточникаданных записьдвиженийприпроведении заполнениепоследовательностей индексирование '
|
||||||
|
+ 'использованиебазыпланавидоврасчета использованиебыстроговыбора использованиеобщегореквизита использованиеподчинения '
|
||||||
|
+ 'использованиеполнотекстовогопоиска использованиеразделяемыхданныхобщегореквизита использованиереквизита '
|
||||||
|
+ 'назначениеиспользованияприложения назначениерасширенияконфигурации направлениепередачи обновлениепредопределенныхданных '
|
||||||
|
+ 'оперативноепроведение основноепредставлениевидарасчета основноепредставлениевидахарактеристики основноепредставлениезадачи '
|
||||||
|
+ 'основноепредставлениепланаобмена основноепредставлениесправочника основноепредставлениесчета перемещениеграницыприпроведении '
|
||||||
|
+ 'периодичностьномерабизнеспроцесса периодичностьномерадокумента периодичностьрегистрарасчета периодичностьрегистрасведений '
|
||||||
|
+ 'повторноеиспользованиевозвращаемыхзначений полнотекстовыйпоискпривводепостроке принадлежностьобъекта проведение '
|
||||||
|
+ 'разделениеаутентификацииобщегореквизита разделениеданныхобщегореквизита разделениерасширенийконфигурацииобщегореквизита '
|
||||||
|
+ 'режимавтонумерацииобъектов режимзаписирегистра режимиспользованиямодальности '
|
||||||
|
+ 'режимиспользованиясинхронныхвызововрасширенийплатформыивнешнихкомпонент режимповторногоиспользованиясеансов '
|
||||||
|
+ 'режимполученияданныхвыборапривводепостроке режимсовместимости режимсовместимостиинтерфейса '
|
||||||
|
+ 'режимуправленияблокировкойданныхпоумолчанию сериикодовпланавидовхарактеристик сериикодовпланасчетов '
|
||||||
|
+ 'сериикодовсправочника созданиепривводе способвыбора способпоискастрокипривводепостроке способредактирования '
|
||||||
|
+ 'типданныхтаблицывнешнегоисточникаданных типкодапланавидоврасчета типкодасправочника типмакета типномерабизнеспроцесса '
|
||||||
|
+ 'типномерадокумента типномеразадачи типформы удалениедвижений ';
|
||||||
|
|
||||||
|
// v8 системные перечисления - разные ==> class
|
||||||
|
const v8_system_enums_differents =
|
||||||
|
'важностьпроблемыприменениярасширенияконфигурации вариантинтерфейсаклиентскогоприложения вариантмасштабаформклиентскогоприложения '
|
||||||
|
+ 'вариантосновногошрифтаклиентскогоприложения вариантстандартногопериода вариантстандартнойдатыначала видграницы видкартинки '
|
||||||
|
+ 'видотображенияполнотекстовогопоиска видрамки видсравнения видцвета видчисловогозначения видшрифта допустимаядлина допустимыйзнак '
|
||||||
|
+ 'использованиеbyteordermark использованиеметаданныхполнотекстовогопоиска источникрасширенийконфигурации клавиша кодвозвратадиалога '
|
||||||
|
+ 'кодировкаxbase кодировкатекста направлениепоиска направлениесортировки обновлениепредопределенныхданных обновлениеприизмененииданных '
|
||||||
|
+ 'отображениепанелиразделов проверказаполнения режимдиалогавопрос режимзапускаклиентскогоприложения режимокругления режимоткрытияформприложения '
|
||||||
|
+ 'режимполнотекстовогопоиска скоростьклиентскогосоединения состояниевнешнегоисточникаданных состояниеобновленияконфигурациибазыданных '
|
||||||
|
+ 'способвыборасертификатаwindows способкодированиястроки статуссообщения типвнешнейкомпоненты типплатформы типповеденияклавишиenter '
|
||||||
|
+ 'типэлементаинформацииовыполненииобновленияконфигурациибазыданных уровеньизоляциитранзакций хешфункция частидаты';
|
||||||
|
|
||||||
|
// class: встроенные наборы значений, системные перечисления (содержат дочерние значения, обращения к которым через разыменование)
|
||||||
|
const CLASS =
|
||||||
|
v8_system_sets_of_values
|
||||||
|
+ v8_system_enums_interface
|
||||||
|
+ v8_system_enums_objects_properties
|
||||||
|
+ v8_system_enums_exchange_plans
|
||||||
|
+ v8_system_enums_tabular_document
|
||||||
|
+ v8_system_enums_sheduler
|
||||||
|
+ v8_system_enums_formatted_document
|
||||||
|
+ v8_system_enums_query
|
||||||
|
+ v8_system_enums_report_builder
|
||||||
|
+ v8_system_enums_files
|
||||||
|
+ v8_system_enums_query_builder
|
||||||
|
+ v8_system_enums_data_analysis
|
||||||
|
+ v8_system_enums_xml_json_xs_dom_xdto_ws
|
||||||
|
+ v8_system_enums_data_composition_system
|
||||||
|
+ v8_system_enums_email
|
||||||
|
+ v8_system_enums_logbook
|
||||||
|
+ v8_system_enums_cryptography
|
||||||
|
+ v8_system_enums_zip
|
||||||
|
+ v8_system_enums_other
|
||||||
|
+ v8_system_enums_request_schema
|
||||||
|
+ v8_system_enums_properties_of_metadata_objects
|
||||||
|
+ v8_system_enums_differents;
|
||||||
|
|
||||||
|
// v8 общие объекты (у объектов есть конструктор, экземпляры создаются методом НОВЫЙ) ==> type
|
||||||
|
const v8_shared_object =
|
||||||
|
'comобъект ftpсоединение httpзапрос httpсервисответ httpсоединение wsопределения wsпрокси xbase анализданных аннотацияxs '
|
||||||
|
+ 'блокировкаданных буфердвоичныхданных включениеxs выражениекомпоновкиданных генераторслучайныхчисел географическаясхема '
|
||||||
|
+ 'географическиекоординаты графическаясхема группамоделиxs данныерасшифровкикомпоновкиданных двоичныеданные дендрограмма '
|
||||||
|
+ 'диаграмма диаграммаганта диалогвыборафайла диалогвыборацвета диалогвыборашрифта диалограсписаниярегламентногозадания '
|
||||||
|
+ 'диалогредактированиястандартногопериода диапазон документdom документhtml документацияxs доставляемоеуведомление '
|
||||||
|
+ 'записьdom записьfastinfoset записьhtml записьjson записьxml записьzipфайла записьданных записьтекста записьузловdom '
|
||||||
|
+ 'запрос защищенноесоединениеopenssl значенияполейрасшифровкикомпоновкиданных извлечениетекста импортxs интернетпочта '
|
||||||
|
+ 'интернетпочтовоесообщение интернетпочтовыйпрофиль интернетпрокси интернетсоединение информациядляприложенияxs '
|
||||||
|
+ 'использованиеатрибутаxs использованиесобытияжурналарегистрации источникдоступныхнастроеккомпоновкиданных '
|
||||||
|
+ 'итераторузловdom картинка квалификаторыдаты квалификаторыдвоичныхданных квалификаторыстроки квалификаторычисла '
|
||||||
|
+ 'компоновщикмакетакомпоновкиданных компоновщикнастроеккомпоновкиданных конструктормакетаоформлениякомпоновкиданных '
|
||||||
|
+ 'конструкторнастроеккомпоновкиданных конструкторформатнойстроки линия макеткомпоновкиданных макетобластикомпоновкиданных '
|
||||||
|
+ 'макетоформлениякомпоновкиданных маскаxs менеджеркриптографии наборсхемxml настройкикомпоновкиданных настройкисериализацииjson '
|
||||||
|
+ 'обработкакартинок обработкарасшифровкикомпоновкиданных обходдереваdom объявлениеатрибутаxs объявлениенотацииxs '
|
||||||
|
+ 'объявлениеэлементаxs описаниеиспользованиясобытиядоступжурналарегистрации '
|
||||||
|
+ 'описаниеиспользованиясобытияотказвдоступежурналарегистрации описаниеобработкирасшифровкикомпоновкиданных '
|
||||||
|
+ 'описаниепередаваемогофайла описаниетипов определениегруппыатрибутовxs определениегруппымоделиxs '
|
||||||
|
+ 'определениеограниченияидентичностиxs определениепростоготипаxs определениесоставноготипаxs определениетипадокументаdom '
|
||||||
|
+ 'определенияxpathxs отборкомпоновкиданных пакетотображаемыхдокументов параметрвыбора параметркомпоновкиданных '
|
||||||
|
+ 'параметрызаписиjson параметрызаписиxml параметрычтенияxml переопределениеxs планировщик полеанализаданных '
|
||||||
|
+ 'полекомпоновкиданных построительdom построительзапроса построительотчета построительотчетаанализаданных '
|
||||||
|
+ 'построительсхемxml поток потоквпамяти почта почтовоесообщение преобразованиеxsl преобразованиекканоническомуxml '
|
||||||
|
+ 'процессорвыводарезультатакомпоновкиданныхвколлекциюзначений процессорвыводарезультатакомпоновкиданныхвтабличныйдокумент '
|
||||||
|
+ 'процессоркомпоновкиданных разыменовательпространствименdom рамка расписаниерегламентногозадания расширенноеимяxml '
|
||||||
|
+ 'результатчтенияданных своднаядиаграмма связьпараметравыбора связьпотипу связьпотипукомпоновкиданных сериализаторxdto '
|
||||||
|
+ 'сертификатклиентаwindows сертификатклиентафайл сертификаткриптографии сертификатыудостоверяющихцентровwindows '
|
||||||
|
+ 'сертификатыудостоверяющихцентровфайл сжатиеданных системнаяинформация сообщениепользователю сочетаниеклавиш '
|
||||||
|
+ 'сравнениезначений стандартнаядатаначала стандартныйпериод схемаxml схемакомпоновкиданных табличныйдокумент '
|
||||||
|
+ 'текстовыйдокумент тестируемоеприложение типданныхxml уникальныйидентификатор фабрикаxdto файл файловыйпоток '
|
||||||
|
+ 'фасетдлиныxs фасетколичестваразрядовдробнойчастиxs фасетмаксимальноговключающегозначенияxs '
|
||||||
|
+ 'фасетмаксимальногоисключающегозначенияxs фасетмаксимальнойдлиныxs фасетминимальноговключающегозначенияxs '
|
||||||
|
+ 'фасетминимальногоисключающегозначенияxs фасетминимальнойдлиныxs фасетобразцаxs фасетобщегоколичестваразрядовxs '
|
||||||
|
+ 'фасетперечисленияxs фасетпробельныхсимволовxs фильтрузловdom форматированнаястрока форматированныйдокумент '
|
||||||
|
+ 'фрагментxs хешированиеданных хранилищезначения цвет чтениеfastinfoset чтениеhtml чтениеjson чтениеxml чтениеzipфайла '
|
||||||
|
+ 'чтениеданных чтениетекста чтениеузловdom шрифт элементрезультатакомпоновкиданных ';
|
||||||
|
|
||||||
|
// v8 универсальные коллекции значений ==> type
|
||||||
|
const v8_universal_collection =
|
||||||
|
'comsafearray деревозначений массив соответствие списокзначений структура таблицазначений фиксированнаяструктура '
|
||||||
|
+ 'фиксированноесоответствие фиксированныймассив ';
|
||||||
|
|
||||||
|
// type : встроенные типы
|
||||||
|
const TYPE =
|
||||||
|
v8_shared_object
|
||||||
|
+ v8_universal_collection;
|
||||||
|
|
||||||
|
// literal : примитивные типы
|
||||||
|
const LITERAL = 'null истина ложь неопределено';
|
||||||
|
|
||||||
|
// number : числа
|
||||||
|
const NUMBERS = hljs.inherit(hljs.NUMBER_MODE);
|
||||||
|
|
||||||
|
// string : строки
|
||||||
|
const STRINGS = {
|
||||||
|
className: 'string',
|
||||||
|
begin: '"|\\|',
|
||||||
|
end: '"|$',
|
||||||
|
contains: [ { begin: '""' } ]
|
||||||
|
};
|
||||||
|
|
||||||
|
// number : даты
|
||||||
|
const DATE = {
|
||||||
|
begin: "'",
|
||||||
|
end: "'",
|
||||||
|
excludeBegin: true,
|
||||||
|
excludeEnd: true,
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
className: 'number',
|
||||||
|
begin: '\\d{4}([\\.\\\\/:-]?\\d{2}){0,5}'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
const PUNCTUATION = {
|
||||||
|
match: /[;()+\-:=,]/,
|
||||||
|
className: "punctuation",
|
||||||
|
relevance: 0
|
||||||
|
};
|
||||||
|
|
||||||
|
// comment : комментарии
|
||||||
|
const COMMENTS = hljs.inherit(hljs.C_LINE_COMMENT_MODE);
|
||||||
|
|
||||||
|
// meta : инструкции препроцессора, директивы компиляции
|
||||||
|
const META = {
|
||||||
|
className: 'meta',
|
||||||
|
|
||||||
|
begin: '#|&',
|
||||||
|
end: '$',
|
||||||
|
keywords: {
|
||||||
|
$pattern: UNDERSCORE_IDENT_RE,
|
||||||
|
keyword: KEYWORD + METAKEYWORD
|
||||||
|
},
|
||||||
|
contains: [ COMMENTS ]
|
||||||
|
};
|
||||||
|
|
||||||
|
// symbol : метка goto
|
||||||
|
const SYMBOL = {
|
||||||
|
className: 'symbol',
|
||||||
|
begin: '~',
|
||||||
|
end: ';|:',
|
||||||
|
excludeEnd: true
|
||||||
|
};
|
||||||
|
|
||||||
|
// function : объявление процедур и функций
|
||||||
|
const FUNCTION = {
|
||||||
|
className: 'function',
|
||||||
|
variants: [
|
||||||
|
{
|
||||||
|
begin: 'процедура|функция',
|
||||||
|
end: '\\)',
|
||||||
|
keywords: 'процедура функция'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
begin: 'конецпроцедуры|конецфункции',
|
||||||
|
keywords: 'конецпроцедуры конецфункции'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
begin: '\\(',
|
||||||
|
end: '\\)',
|
||||||
|
endsParent: true,
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
className: 'params',
|
||||||
|
begin: UNDERSCORE_IDENT_RE,
|
||||||
|
end: ',',
|
||||||
|
excludeEnd: true,
|
||||||
|
endsWithParent: true,
|
||||||
|
keywords: {
|
||||||
|
$pattern: UNDERSCORE_IDENT_RE,
|
||||||
|
keyword: 'знач',
|
||||||
|
literal: LITERAL
|
||||||
|
},
|
||||||
|
contains: [
|
||||||
|
NUMBERS,
|
||||||
|
STRINGS,
|
||||||
|
DATE
|
||||||
|
]
|
||||||
|
},
|
||||||
|
COMMENTS
|
||||||
|
]
|
||||||
|
},
|
||||||
|
hljs.inherit(hljs.TITLE_MODE, { begin: UNDERSCORE_IDENT_RE })
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: '1C:Enterprise',
|
||||||
|
case_insensitive: true,
|
||||||
|
keywords: {
|
||||||
|
$pattern: UNDERSCORE_IDENT_RE,
|
||||||
|
keyword: KEYWORD,
|
||||||
|
built_in: BUILTIN,
|
||||||
|
class: CLASS,
|
||||||
|
type: TYPE,
|
||||||
|
literal: LITERAL
|
||||||
|
},
|
||||||
|
contains: [
|
||||||
|
META,
|
||||||
|
FUNCTION,
|
||||||
|
COMMENTS,
|
||||||
|
SYMBOL,
|
||||||
|
NUMBERS,
|
||||||
|
STRINGS,
|
||||||
|
DATE,
|
||||||
|
PUNCTUATION
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return _1c;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,91 @@
|
||||||
|
/*! `abnf` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: Augmented Backus-Naur Form
|
||||||
|
Author: Alex McKibben <alex@nullscope.net>
|
||||||
|
Website: https://tools.ietf.org/html/rfc5234
|
||||||
|
Category: syntax
|
||||||
|
Audit: 2020
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function abnf(hljs) {
|
||||||
|
const regex = hljs.regex;
|
||||||
|
const IDENT = /^[a-zA-Z][a-zA-Z0-9-]*/;
|
||||||
|
|
||||||
|
const KEYWORDS = [
|
||||||
|
"ALPHA",
|
||||||
|
"BIT",
|
||||||
|
"CHAR",
|
||||||
|
"CR",
|
||||||
|
"CRLF",
|
||||||
|
"CTL",
|
||||||
|
"DIGIT",
|
||||||
|
"DQUOTE",
|
||||||
|
"HEXDIG",
|
||||||
|
"HTAB",
|
||||||
|
"LF",
|
||||||
|
"LWSP",
|
||||||
|
"OCTET",
|
||||||
|
"SP",
|
||||||
|
"VCHAR",
|
||||||
|
"WSP"
|
||||||
|
];
|
||||||
|
|
||||||
|
const COMMENT = hljs.COMMENT(/;/, /$/);
|
||||||
|
|
||||||
|
const TERMINAL_BINARY = {
|
||||||
|
scope: "symbol",
|
||||||
|
match: /%b[0-1]+(-[0-1]+|(\.[0-1]+)+)?/
|
||||||
|
};
|
||||||
|
|
||||||
|
const TERMINAL_DECIMAL = {
|
||||||
|
scope: "symbol",
|
||||||
|
match: /%d[0-9]+(-[0-9]+|(\.[0-9]+)+)?/
|
||||||
|
};
|
||||||
|
|
||||||
|
const TERMINAL_HEXADECIMAL = {
|
||||||
|
scope: "symbol",
|
||||||
|
match: /%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+)?/
|
||||||
|
};
|
||||||
|
|
||||||
|
const CASE_SENSITIVITY = {
|
||||||
|
scope: "symbol",
|
||||||
|
match: /%[si](?=".*")/
|
||||||
|
};
|
||||||
|
|
||||||
|
const RULE_DECLARATION = {
|
||||||
|
scope: "attribute",
|
||||||
|
match: regex.concat(IDENT, /(?=\s*=)/)
|
||||||
|
};
|
||||||
|
|
||||||
|
const ASSIGNMENT = {
|
||||||
|
scope: "operator",
|
||||||
|
match: /=\/?/
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'Augmented Backus-Naur Form',
|
||||||
|
illegal: /[!@#$^&',?+~`|:]/,
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
contains: [
|
||||||
|
ASSIGNMENT,
|
||||||
|
RULE_DECLARATION,
|
||||||
|
COMMENT,
|
||||||
|
TERMINAL_BINARY,
|
||||||
|
TERMINAL_DECIMAL,
|
||||||
|
TERMINAL_HEXADECIMAL,
|
||||||
|
CASE_SENSITIVITY,
|
||||||
|
hljs.QUOTE_STRING_MODE,
|
||||||
|
hljs.NUMBER_MODE
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return abnf;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
/*! `abnf` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return a=>{
|
||||||
|
const e=a.regex,s=a.COMMENT(/;/,/$/);return{name:"Augmented Backus-Naur Form",
|
||||||
|
illegal:/[!@#$^&',?+~`|:]/,
|
||||||
|
keywords:["ALPHA","BIT","CHAR","CR","CRLF","CTL","DIGIT","DQUOTE","HEXDIG","HTAB","LF","LWSP","OCTET","SP","VCHAR","WSP"],
|
||||||
|
contains:[{scope:"operator",match:/=\/?/},{scope:"attribute",
|
||||||
|
match:e.concat(/^[a-zA-Z][a-zA-Z0-9-]*/,/(?=\s*=)/)},s,{scope:"symbol",
|
||||||
|
match:/%b[0-1]+(-[0-1]+|(\.[0-1]+)+)?/},{scope:"symbol",
|
||||||
|
match:/%d[0-9]+(-[0-9]+|(\.[0-9]+)+)?/},{scope:"symbol",
|
||||||
|
match:/%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+)?/},{scope:"symbol",
|
||||||
|
match:/%[si](?=".*")/},a.QUOTE_STRING_MODE,a.NUMBER_MODE]}}})()
|
||||||
|
;export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,100 @@
|
||||||
|
/*! `accesslog` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: Apache Access Log
|
||||||
|
Author: Oleg Efimov <efimovov@gmail.com>
|
||||||
|
Description: Apache/Nginx Access Logs
|
||||||
|
Website: https://httpd.apache.org/docs/2.4/logs.html#accesslog
|
||||||
|
Category: web, logs
|
||||||
|
Audit: 2020
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function accesslog(hljs) {
|
||||||
|
const regex = hljs.regex;
|
||||||
|
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
|
||||||
|
const HTTP_VERBS = [
|
||||||
|
"GET",
|
||||||
|
"POST",
|
||||||
|
"HEAD",
|
||||||
|
"PUT",
|
||||||
|
"DELETE",
|
||||||
|
"CONNECT",
|
||||||
|
"OPTIONS",
|
||||||
|
"PATCH",
|
||||||
|
"TRACE"
|
||||||
|
];
|
||||||
|
return {
|
||||||
|
name: 'Apache Access Log',
|
||||||
|
contains: [
|
||||||
|
// IP
|
||||||
|
{
|
||||||
|
className: 'number',
|
||||||
|
begin: /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?\b/,
|
||||||
|
relevance: 5
|
||||||
|
},
|
||||||
|
// Other numbers
|
||||||
|
{
|
||||||
|
className: 'number',
|
||||||
|
begin: /\b\d+\b/,
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
// Requests
|
||||||
|
{
|
||||||
|
className: 'string',
|
||||||
|
begin: regex.concat(/"/, regex.either(...HTTP_VERBS)),
|
||||||
|
end: /"/,
|
||||||
|
keywords: HTTP_VERBS,
|
||||||
|
illegal: /\n/,
|
||||||
|
relevance: 5,
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
begin: /HTTP\/[12]\.\d'/,
|
||||||
|
relevance: 5
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// Dates
|
||||||
|
{
|
||||||
|
className: 'string',
|
||||||
|
// dates must have a certain length, this prevents matching
|
||||||
|
// simple array accesses a[123] and [] and other common patterns
|
||||||
|
// found in other languages
|
||||||
|
begin: /\[\d[^\]\n]{8,}\]/,
|
||||||
|
illegal: /\n/,
|
||||||
|
relevance: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'string',
|
||||||
|
begin: /\[/,
|
||||||
|
end: /\]/,
|
||||||
|
illegal: /\n/,
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
// User agent / relevance boost
|
||||||
|
{
|
||||||
|
className: 'string',
|
||||||
|
begin: /"Mozilla\/\d\.\d \(/,
|
||||||
|
end: /"/,
|
||||||
|
illegal: /\n/,
|
||||||
|
relevance: 3
|
||||||
|
},
|
||||||
|
// Strings
|
||||||
|
{
|
||||||
|
className: 'string',
|
||||||
|
begin: /"/,
|
||||||
|
end: /"/,
|
||||||
|
illegal: /\n/,
|
||||||
|
relevance: 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return accesslog;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
/*! `accesslog` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{
|
||||||
|
const n=e.regex,a=["GET","POST","HEAD","PUT","DELETE","CONNECT","OPTIONS","PATCH","TRACE"]
|
||||||
|
;return{name:"Apache Access Log",contains:[{className:"number",
|
||||||
|
begin:/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?\b/,relevance:5},{
|
||||||
|
className:"number",begin:/\b\d+\b/,relevance:0},{className:"string",
|
||||||
|
begin:n.concat(/"/,n.either(...a)),end:/"/,keywords:a,illegal:/\n/,relevance:5,
|
||||||
|
contains:[{begin:/HTTP\/[12]\.\d'/,relevance:5}]},{className:"string",
|
||||||
|
begin:/\[\d[^\]\n]{8,}\]/,illegal:/\n/,relevance:1},{className:"string",
|
||||||
|
begin:/\[/,end:/\]/,illegal:/\n/,relevance:0},{className:"string",
|
||||||
|
begin:/"Mozilla\/\d\.\d \(/,end:/"/,illegal:/\n/,relevance:3},{
|
||||||
|
className:"string",begin:/"/,end:/"/,illegal:/\n/,relevance:0}]}}})()
|
||||||
|
;export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,161 @@
|
||||||
|
/*! `actionscript` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: ActionScript
|
||||||
|
Author: Alexander Myadzel <myadzel@gmail.com>
|
||||||
|
Category: scripting
|
||||||
|
Audit: 2020
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function actionscript(hljs) {
|
||||||
|
const regex = hljs.regex;
|
||||||
|
const IDENT_RE = /[a-zA-Z_$][a-zA-Z0-9_$]*/;
|
||||||
|
const PKG_NAME_RE = regex.concat(
|
||||||
|
IDENT_RE,
|
||||||
|
regex.concat("(\\.", IDENT_RE, ")*")
|
||||||
|
);
|
||||||
|
const IDENT_FUNC_RETURN_TYPE_RE = /([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)/;
|
||||||
|
|
||||||
|
const AS3_REST_ARG_MODE = {
|
||||||
|
className: 'rest_arg',
|
||||||
|
begin: /[.]{3}/,
|
||||||
|
end: IDENT_RE,
|
||||||
|
relevance: 10
|
||||||
|
};
|
||||||
|
|
||||||
|
const KEYWORDS = [
|
||||||
|
"as",
|
||||||
|
"break",
|
||||||
|
"case",
|
||||||
|
"catch",
|
||||||
|
"class",
|
||||||
|
"const",
|
||||||
|
"continue",
|
||||||
|
"default",
|
||||||
|
"delete",
|
||||||
|
"do",
|
||||||
|
"dynamic",
|
||||||
|
"each",
|
||||||
|
"else",
|
||||||
|
"extends",
|
||||||
|
"final",
|
||||||
|
"finally",
|
||||||
|
"for",
|
||||||
|
"function",
|
||||||
|
"get",
|
||||||
|
"if",
|
||||||
|
"implements",
|
||||||
|
"import",
|
||||||
|
"in",
|
||||||
|
"include",
|
||||||
|
"instanceof",
|
||||||
|
"interface",
|
||||||
|
"internal",
|
||||||
|
"is",
|
||||||
|
"namespace",
|
||||||
|
"native",
|
||||||
|
"new",
|
||||||
|
"override",
|
||||||
|
"package",
|
||||||
|
"private",
|
||||||
|
"protected",
|
||||||
|
"public",
|
||||||
|
"return",
|
||||||
|
"set",
|
||||||
|
"static",
|
||||||
|
"super",
|
||||||
|
"switch",
|
||||||
|
"this",
|
||||||
|
"throw",
|
||||||
|
"try",
|
||||||
|
"typeof",
|
||||||
|
"use",
|
||||||
|
"var",
|
||||||
|
"void",
|
||||||
|
"while",
|
||||||
|
"with"
|
||||||
|
];
|
||||||
|
const LITERALS = [
|
||||||
|
"true",
|
||||||
|
"false",
|
||||||
|
"null",
|
||||||
|
"undefined"
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'ActionScript',
|
||||||
|
aliases: [ 'as' ],
|
||||||
|
keywords: {
|
||||||
|
keyword: KEYWORDS,
|
||||||
|
literal: LITERALS
|
||||||
|
},
|
||||||
|
contains: [
|
||||||
|
hljs.APOS_STRING_MODE,
|
||||||
|
hljs.QUOTE_STRING_MODE,
|
||||||
|
hljs.C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
hljs.C_NUMBER_MODE,
|
||||||
|
{
|
||||||
|
match: [
|
||||||
|
/\bpackage/,
|
||||||
|
/\s+/,
|
||||||
|
PKG_NAME_RE
|
||||||
|
],
|
||||||
|
className: {
|
||||||
|
1: "keyword",
|
||||||
|
3: "title.class"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
match: [
|
||||||
|
/\b(?:class|interface|extends|implements)/,
|
||||||
|
/\s+/,
|
||||||
|
IDENT_RE
|
||||||
|
],
|
||||||
|
className: {
|
||||||
|
1: "keyword",
|
||||||
|
3: "title.class"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'meta',
|
||||||
|
beginKeywords: 'import include',
|
||||||
|
end: /;/,
|
||||||
|
keywords: { keyword: 'import include' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
beginKeywords: 'function',
|
||||||
|
end: /[{;]/,
|
||||||
|
excludeEnd: true,
|
||||||
|
illegal: /\S/,
|
||||||
|
contains: [
|
||||||
|
hljs.inherit(hljs.TITLE_MODE, { className: "title.function" }),
|
||||||
|
{
|
||||||
|
className: 'params',
|
||||||
|
begin: /\(/,
|
||||||
|
end: /\)/,
|
||||||
|
contains: [
|
||||||
|
hljs.APOS_STRING_MODE,
|
||||||
|
hljs.QUOTE_STRING_MODE,
|
||||||
|
hljs.C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
AS3_REST_ARG_MODE
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ begin: regex.concat(/:\s*/, IDENT_FUNC_RETURN_TYPE_RE) }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
hljs.METHOD_GUARD
|
||||||
|
],
|
||||||
|
illegal: /#/
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return actionscript;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
/*! `actionscript` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{
|
||||||
|
const a=e.regex,t=/[a-zA-Z_$][a-zA-Z0-9_$]*/,n=a.concat(t,a.concat("(\\.",t,")*")),s={
|
||||||
|
className:"rest_arg",begin:/[.]{3}/,end:t,relevance:10};return{
|
||||||
|
name:"ActionScript",aliases:["as"],keywords:{
|
||||||
|
keyword:["as","break","case","catch","class","const","continue","default","delete","do","dynamic","each","else","extends","final","finally","for","function","get","if","implements","import","in","include","instanceof","interface","internal","is","namespace","native","new","override","package","private","protected","public","return","set","static","super","switch","this","throw","try","typeof","use","var","void","while","with"],
|
||||||
|
literal:["true","false","null","undefined"]},
|
||||||
|
contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{
|
||||||
|
match:[/\bpackage/,/\s+/,n],className:{1:"keyword",3:"title.class"}},{
|
||||||
|
match:[/\b(?:class|interface|extends|implements)/,/\s+/,t],className:{
|
||||||
|
1:"keyword",3:"title.class"}},{className:"meta",beginKeywords:"import include",
|
||||||
|
end:/;/,keywords:{keyword:"import include"}},{beginKeywords:"function",
|
||||||
|
end:/[{;]/,excludeEnd:!0,illegal:/\S/,contains:[e.inherit(e.TITLE_MODE,{
|
||||||
|
className:"title.function"}),{className:"params",begin:/\(/,end:/\)/,
|
||||||
|
contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]
|
||||||
|
},{begin:a.concat(/:\s*/,/([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)/)}]},e.METHOD_GUARD],
|
||||||
|
illegal:/#/}}})();export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,273 @@
|
||||||
|
/*! `ada` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: Ada
|
||||||
|
Author: Lars Schulna <kartoffelbrei.mit.muskatnuss@gmail.org>
|
||||||
|
Description: Ada is a general-purpose programming language that has great support for saftey critical and real-time applications.
|
||||||
|
It has been developed by the DoD and thus has been used in military and safety-critical applications (like civil aviation).
|
||||||
|
The first version appeared in the 80s, but it's still actively developed today with
|
||||||
|
the newest standard being Ada2012.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// We try to support full Ada2012
|
||||||
|
//
|
||||||
|
// We highlight all appearances of types, keywords, literals (string, char, number, bool)
|
||||||
|
// and titles (user defined function/procedure/package)
|
||||||
|
// CSS classes are set accordingly
|
||||||
|
//
|
||||||
|
// Languages causing problems for language detection:
|
||||||
|
// xml (broken by Foo : Bar type), elm (broken by Foo : Bar type), vbscript-html (broken by body keyword)
|
||||||
|
// sql (ada default.txt has a lot of sql keywords)
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function ada(hljs) {
|
||||||
|
// Regular expression for Ada numeric literals.
|
||||||
|
// stolen form the VHDL highlighter
|
||||||
|
|
||||||
|
// Decimal literal:
|
||||||
|
const INTEGER_RE = '\\d(_|\\d)*';
|
||||||
|
const EXPONENT_RE = '[eE][-+]?' + INTEGER_RE;
|
||||||
|
const DECIMAL_LITERAL_RE = INTEGER_RE + '(\\.' + INTEGER_RE + ')?' + '(' + EXPONENT_RE + ')?';
|
||||||
|
|
||||||
|
// Based literal:
|
||||||
|
const BASED_INTEGER_RE = '\\w+';
|
||||||
|
const BASED_LITERAL_RE = INTEGER_RE + '#' + BASED_INTEGER_RE + '(\\.' + BASED_INTEGER_RE + ')?' + '#' + '(' + EXPONENT_RE + ')?';
|
||||||
|
|
||||||
|
const NUMBER_RE = '\\b(' + BASED_LITERAL_RE + '|' + DECIMAL_LITERAL_RE + ')';
|
||||||
|
|
||||||
|
// Identifier regex
|
||||||
|
const ID_REGEX = '[A-Za-z](_?[A-Za-z0-9.])*';
|
||||||
|
|
||||||
|
// bad chars, only allowed in literals
|
||||||
|
const BAD_CHARS = `[]\\{\\}%#'"`;
|
||||||
|
|
||||||
|
// Ada doesn't have block comments, only line comments
|
||||||
|
const COMMENTS = hljs.COMMENT('--', '$');
|
||||||
|
|
||||||
|
// variable declarations of the form
|
||||||
|
// Foo : Bar := Baz;
|
||||||
|
// where only Bar will be highlighted
|
||||||
|
const VAR_DECLS = {
|
||||||
|
// TODO: These spaces are not required by the Ada syntax
|
||||||
|
// however, I have yet to see handwritten Ada code where
|
||||||
|
// someone does not put spaces around :
|
||||||
|
begin: '\\s+:\\s+',
|
||||||
|
end: '\\s*(:=|;|\\)|=>|$)',
|
||||||
|
// endsWithParent: true,
|
||||||
|
// returnBegin: true,
|
||||||
|
illegal: BAD_CHARS,
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
// workaround to avoid highlighting
|
||||||
|
// named loops and declare blocks
|
||||||
|
beginKeywords: 'loop for declare others',
|
||||||
|
endsParent: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// properly highlight all modifiers
|
||||||
|
className: 'keyword',
|
||||||
|
beginKeywords: 'not null constant access function procedure in out aliased exception'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'type',
|
||||||
|
begin: ID_REGEX,
|
||||||
|
endsParent: true,
|
||||||
|
relevance: 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
const KEYWORDS = [
|
||||||
|
"abort",
|
||||||
|
"else",
|
||||||
|
"new",
|
||||||
|
"return",
|
||||||
|
"abs",
|
||||||
|
"elsif",
|
||||||
|
"not",
|
||||||
|
"reverse",
|
||||||
|
"abstract",
|
||||||
|
"end",
|
||||||
|
"accept",
|
||||||
|
"entry",
|
||||||
|
"select",
|
||||||
|
"access",
|
||||||
|
"exception",
|
||||||
|
"of",
|
||||||
|
"separate",
|
||||||
|
"aliased",
|
||||||
|
"exit",
|
||||||
|
"or",
|
||||||
|
"some",
|
||||||
|
"all",
|
||||||
|
"others",
|
||||||
|
"subtype",
|
||||||
|
"and",
|
||||||
|
"for",
|
||||||
|
"out",
|
||||||
|
"synchronized",
|
||||||
|
"array",
|
||||||
|
"function",
|
||||||
|
"overriding",
|
||||||
|
"at",
|
||||||
|
"tagged",
|
||||||
|
"generic",
|
||||||
|
"package",
|
||||||
|
"task",
|
||||||
|
"begin",
|
||||||
|
"goto",
|
||||||
|
"pragma",
|
||||||
|
"terminate",
|
||||||
|
"body",
|
||||||
|
"private",
|
||||||
|
"then",
|
||||||
|
"if",
|
||||||
|
"procedure",
|
||||||
|
"type",
|
||||||
|
"case",
|
||||||
|
"in",
|
||||||
|
"protected",
|
||||||
|
"constant",
|
||||||
|
"interface",
|
||||||
|
"is",
|
||||||
|
"raise",
|
||||||
|
"use",
|
||||||
|
"declare",
|
||||||
|
"range",
|
||||||
|
"delay",
|
||||||
|
"limited",
|
||||||
|
"record",
|
||||||
|
"when",
|
||||||
|
"delta",
|
||||||
|
"loop",
|
||||||
|
"rem",
|
||||||
|
"while",
|
||||||
|
"digits",
|
||||||
|
"renames",
|
||||||
|
"with",
|
||||||
|
"do",
|
||||||
|
"mod",
|
||||||
|
"requeue",
|
||||||
|
"xor"
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'Ada',
|
||||||
|
case_insensitive: true,
|
||||||
|
keywords: {
|
||||||
|
keyword: KEYWORDS,
|
||||||
|
literal: [
|
||||||
|
"True",
|
||||||
|
"False"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
contains: [
|
||||||
|
COMMENTS,
|
||||||
|
// strings "foobar"
|
||||||
|
{
|
||||||
|
className: 'string',
|
||||||
|
begin: /"/,
|
||||||
|
end: /"/,
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
begin: /""/,
|
||||||
|
relevance: 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// characters ''
|
||||||
|
{
|
||||||
|
// character literals always contain one char
|
||||||
|
className: 'string',
|
||||||
|
begin: /'.'/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// number literals
|
||||||
|
className: 'number',
|
||||||
|
begin: NUMBER_RE,
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Attributes
|
||||||
|
className: 'symbol',
|
||||||
|
begin: "'" + ID_REGEX
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// package definition, maybe inside generic
|
||||||
|
className: 'title',
|
||||||
|
begin: '(\\bwith\\s+)?(\\bprivate\\s+)?\\bpackage\\s+(\\bbody\\s+)?',
|
||||||
|
end: '(is|$)',
|
||||||
|
keywords: 'package body',
|
||||||
|
excludeBegin: true,
|
||||||
|
excludeEnd: true,
|
||||||
|
illegal: BAD_CHARS
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// function/procedure declaration/definition
|
||||||
|
// maybe inside generic
|
||||||
|
begin: '(\\b(with|overriding)\\s+)?\\b(function|procedure)\\s+',
|
||||||
|
end: '(\\bis|\\bwith|\\brenames|\\)\\s*;)',
|
||||||
|
keywords: 'overriding function procedure with is renames return',
|
||||||
|
// we need to re-match the 'function' keyword, so that
|
||||||
|
// the title mode below matches only exactly once
|
||||||
|
returnBegin: true,
|
||||||
|
contains:
|
||||||
|
[
|
||||||
|
COMMENTS,
|
||||||
|
{
|
||||||
|
// name of the function/procedure
|
||||||
|
className: 'title',
|
||||||
|
begin: '(\\bwith\\s+)?\\b(function|procedure)\\s+',
|
||||||
|
end: '(\\(|\\s+|$)',
|
||||||
|
excludeBegin: true,
|
||||||
|
excludeEnd: true,
|
||||||
|
illegal: BAD_CHARS
|
||||||
|
},
|
||||||
|
// 'self'
|
||||||
|
// // parameter types
|
||||||
|
VAR_DECLS,
|
||||||
|
{
|
||||||
|
// return type
|
||||||
|
className: 'type',
|
||||||
|
begin: '\\breturn\\s+',
|
||||||
|
end: '(\\s+|;|$)',
|
||||||
|
keywords: 'return',
|
||||||
|
excludeBegin: true,
|
||||||
|
excludeEnd: true,
|
||||||
|
// we are done with functions
|
||||||
|
endsParent: true,
|
||||||
|
illegal: BAD_CHARS
|
||||||
|
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// new type declarations
|
||||||
|
// maybe inside generic
|
||||||
|
className: 'type',
|
||||||
|
begin: '\\b(sub)?type\\s+',
|
||||||
|
end: '\\s+',
|
||||||
|
keywords: 'type',
|
||||||
|
excludeBegin: true,
|
||||||
|
illegal: BAD_CHARS
|
||||||
|
},
|
||||||
|
|
||||||
|
// see comment above the definition
|
||||||
|
VAR_DECLS
|
||||||
|
|
||||||
|
// no markup
|
||||||
|
// relevance boosters for small snippets
|
||||||
|
// {begin: '\\s*=>\\s*'},
|
||||||
|
// {begin: '\\s*:=\\s*'},
|
||||||
|
// {begin: '\\s+:=\\s+'},
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return ada;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
/*! `ada` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{
|
||||||
|
const n="\\d(_|\\d)*",s="[eE][-+]?"+n,a="\\b("+n+"#\\w+(\\.\\w+)?#("+s+")?|"+n+"(\\."+n+")?("+s+")?)",r="[A-Za-z](_?[A-Za-z0-9.])*",i="[]\\{\\}%#'\"",t=e.COMMENT("--","$"),l={
|
||||||
|
begin:"\\s+:\\s+",end:"\\s*(:=|;|\\)|=>|$)",illegal:i,contains:[{
|
||||||
|
beginKeywords:"loop for declare others",endsParent:!0},{className:"keyword",
|
||||||
|
beginKeywords:"not null constant access function procedure in out aliased exception"
|
||||||
|
},{className:"type",begin:r,endsParent:!0,relevance:0}]};return{name:"Ada",
|
||||||
|
case_insensitive:!0,keywords:{
|
||||||
|
keyword:["abort","else","new","return","abs","elsif","not","reverse","abstract","end","accept","entry","select","access","exception","of","separate","aliased","exit","or","some","all","others","subtype","and","for","out","synchronized","array","function","overriding","at","tagged","generic","package","task","begin","goto","pragma","terminate","body","private","then","if","procedure","type","case","in","protected","constant","interface","is","raise","use","declare","range","delay","limited","record","when","delta","loop","rem","while","digits","renames","with","do","mod","requeue","xor"],
|
||||||
|
literal:["True","False"]},contains:[t,{className:"string",begin:/"/,end:/"/,
|
||||||
|
contains:[{begin:/""/,relevance:0}]},{className:"string",begin:/'.'/},{
|
||||||
|
className:"number",begin:a,relevance:0},{className:"symbol",begin:"'"+r},{
|
||||||
|
className:"title",
|
||||||
|
begin:"(\\bwith\\s+)?(\\bprivate\\s+)?\\bpackage\\s+(\\bbody\\s+)?",
|
||||||
|
end:"(is|$)",keywords:"package body",excludeBegin:!0,excludeEnd:!0,illegal:i},{
|
||||||
|
begin:"(\\b(with|overriding)\\s+)?\\b(function|procedure)\\s+",
|
||||||
|
end:"(\\bis|\\bwith|\\brenames|\\)\\s*;)",
|
||||||
|
keywords:"overriding function procedure with is renames return",returnBegin:!0,
|
||||||
|
contains:[t,{className:"title",
|
||||||
|
begin:"(\\bwith\\s+)?\\b(function|procedure)\\s+",end:"(\\(|\\s+|$)",
|
||||||
|
excludeBegin:!0,excludeEnd:!0,illegal:i},l,{className:"type",
|
||||||
|
begin:"\\breturn\\s+",end:"(\\s+|;|$)",keywords:"return",excludeBegin:!0,
|
||||||
|
excludeEnd:!0,endsParent:!0,illegal:i}]},{className:"type",
|
||||||
|
begin:"\\b(sub)?type\\s+",end:"\\s+",keywords:"type",excludeBegin:!0,illegal:i
|
||||||
|
},l]}}})();export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,186 @@
|
||||||
|
/*! `angelscript` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: AngelScript
|
||||||
|
Author: Melissa Geels <melissa@nimble.tools>
|
||||||
|
Category: scripting
|
||||||
|
Website: https://www.angelcode.com/angelscript/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function angelscript(hljs) {
|
||||||
|
const builtInTypeMode = {
|
||||||
|
className: 'built_in',
|
||||||
|
begin: '\\b(void|bool|int8|int16|int32|int64|int|uint8|uint16|uint32|uint64|uint|string|ref|array|double|float|auto|dictionary)'
|
||||||
|
};
|
||||||
|
|
||||||
|
const objectHandleMode = {
|
||||||
|
className: 'symbol',
|
||||||
|
begin: '[a-zA-Z0-9_]+@'
|
||||||
|
};
|
||||||
|
|
||||||
|
const genericMode = {
|
||||||
|
className: 'keyword',
|
||||||
|
begin: '<',
|
||||||
|
end: '>',
|
||||||
|
contains: [
|
||||||
|
builtInTypeMode,
|
||||||
|
objectHandleMode
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
builtInTypeMode.contains = [ genericMode ];
|
||||||
|
objectHandleMode.contains = [ genericMode ];
|
||||||
|
|
||||||
|
const KEYWORDS = [
|
||||||
|
"for",
|
||||||
|
"in|0",
|
||||||
|
"break",
|
||||||
|
"continue",
|
||||||
|
"while",
|
||||||
|
"do|0",
|
||||||
|
"return",
|
||||||
|
"if",
|
||||||
|
"else",
|
||||||
|
"case",
|
||||||
|
"switch",
|
||||||
|
"namespace",
|
||||||
|
"is",
|
||||||
|
"cast",
|
||||||
|
"or",
|
||||||
|
"and",
|
||||||
|
"xor",
|
||||||
|
"not",
|
||||||
|
"get|0",
|
||||||
|
"in",
|
||||||
|
"inout|10",
|
||||||
|
"out",
|
||||||
|
"override",
|
||||||
|
"set|0",
|
||||||
|
"private",
|
||||||
|
"public",
|
||||||
|
"const",
|
||||||
|
"default|0",
|
||||||
|
"final",
|
||||||
|
"shared",
|
||||||
|
"external",
|
||||||
|
"mixin|10",
|
||||||
|
"enum",
|
||||||
|
"typedef",
|
||||||
|
"funcdef",
|
||||||
|
"this",
|
||||||
|
"super",
|
||||||
|
"import",
|
||||||
|
"from",
|
||||||
|
"interface",
|
||||||
|
"abstract|0",
|
||||||
|
"try",
|
||||||
|
"catch",
|
||||||
|
"protected",
|
||||||
|
"explicit",
|
||||||
|
"property"
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'AngelScript',
|
||||||
|
aliases: [ 'asc' ],
|
||||||
|
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
|
||||||
|
// avoid close detection with C# and JS
|
||||||
|
illegal: '(^using\\s+[A-Za-z0-9_\\.]+;$|\\bfunction\\s*[^\\(])',
|
||||||
|
|
||||||
|
contains: [
|
||||||
|
{ // 'strings'
|
||||||
|
className: 'string',
|
||||||
|
begin: '\'',
|
||||||
|
end: '\'',
|
||||||
|
illegal: '\\n',
|
||||||
|
contains: [ hljs.BACKSLASH_ESCAPE ],
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
|
||||||
|
// """heredoc strings"""
|
||||||
|
{
|
||||||
|
className: 'string',
|
||||||
|
begin: '"""',
|
||||||
|
end: '"""'
|
||||||
|
},
|
||||||
|
|
||||||
|
{ // "strings"
|
||||||
|
className: 'string',
|
||||||
|
begin: '"',
|
||||||
|
end: '"',
|
||||||
|
illegal: '\\n',
|
||||||
|
contains: [ hljs.BACKSLASH_ESCAPE ],
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
|
||||||
|
hljs.C_LINE_COMMENT_MODE, // single-line comments
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE, // comment blocks
|
||||||
|
|
||||||
|
{ // metadata
|
||||||
|
className: 'string',
|
||||||
|
begin: '^\\s*\\[',
|
||||||
|
end: '\\]'
|
||||||
|
},
|
||||||
|
|
||||||
|
{ // interface or namespace declaration
|
||||||
|
beginKeywords: 'interface namespace',
|
||||||
|
end: /\{/,
|
||||||
|
illegal: '[;.\\-]',
|
||||||
|
contains: [
|
||||||
|
{ // interface or namespace name
|
||||||
|
className: 'symbol',
|
||||||
|
begin: '[a-zA-Z0-9_]+'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{ // class declaration
|
||||||
|
beginKeywords: 'class',
|
||||||
|
end: /\{/,
|
||||||
|
illegal: '[;.\\-]',
|
||||||
|
contains: [
|
||||||
|
{ // class name
|
||||||
|
className: 'symbol',
|
||||||
|
begin: '[a-zA-Z0-9_]+',
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
begin: '[:,]\\s*',
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
className: 'symbol',
|
||||||
|
begin: '[a-zA-Z0-9_]+'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
builtInTypeMode, // built-in types
|
||||||
|
objectHandleMode, // object handles
|
||||||
|
|
||||||
|
{ // literals
|
||||||
|
className: 'literal',
|
||||||
|
begin: '\\b(null|true|false)'
|
||||||
|
},
|
||||||
|
|
||||||
|
{ // numbers
|
||||||
|
className: 'number',
|
||||||
|
relevance: 0,
|
||||||
|
begin: '(-?)(\\b0[xXbBoOdD][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?f?|\\.\\d+f?)([eE][-+]?\\d+f?)?)'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return angelscript;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*! `angelscript` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{const n={className:"built_in",
|
||||||
|
begin:"\\b(void|bool|int8|int16|int32|int64|int|uint8|uint16|uint32|uint64|uint|string|ref|array|double|float|auto|dictionary)"
|
||||||
|
},a={className:"symbol",begin:"[a-zA-Z0-9_]+@"},i={className:"keyword",
|
||||||
|
begin:"<",end:">",contains:[n,a]};return n.contains=[i],a.contains=[i],{
|
||||||
|
name:"AngelScript",aliases:["asc"],
|
||||||
|
keywords:["for","in|0","break","continue","while","do|0","return","if","else","case","switch","namespace","is","cast","or","and","xor","not","get|0","in","inout|10","out","override","set|0","private","public","const","default|0","final","shared","external","mixin|10","enum","typedef","funcdef","this","super","import","from","interface","abstract|0","try","catch","protected","explicit","property"],
|
||||||
|
illegal:"(^using\\s+[A-Za-z0-9_\\.]+;$|\\bfunction\\s*[^\\(])",contains:[{
|
||||||
|
className:"string",begin:"'",end:"'",illegal:"\\n",
|
||||||
|
contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"string",begin:'"""',
|
||||||
|
end:'"""'},{className:"string",begin:'"',end:'"',illegal:"\\n",
|
||||||
|
contains:[e.BACKSLASH_ESCAPE],relevance:0
|
||||||
|
},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",
|
||||||
|
begin:"^\\s*\\[",end:"\\]"},{beginKeywords:"interface namespace",end:/\{/,
|
||||||
|
illegal:"[;.\\-]",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+"}]},{
|
||||||
|
beginKeywords:"class",end:/\{/,illegal:"[;.\\-]",contains:[{className:"symbol",
|
||||||
|
begin:"[a-zA-Z0-9_]+",contains:[{begin:"[:,]\\s*",contains:[{className:"symbol",
|
||||||
|
begin:"[a-zA-Z0-9_]+"}]}]}]},n,a,{className:"literal",
|
||||||
|
begin:"\\b(null|true|false)"},{className:"number",relevance:0,
|
||||||
|
begin:"(-?)(\\b0[xXbBoOdD][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?f?|\\.\\d+f?)([eE][-+]?\\d+f?)?)"
|
||||||
|
}]}}})();export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,109 @@
|
||||||
|
/*! `apache` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: Apache config
|
||||||
|
Author: Ruslan Keba <rukeba@gmail.com>
|
||||||
|
Contributors: Ivan Sagalaev <maniac@softwaremaniacs.org>
|
||||||
|
Website: https://httpd.apache.org
|
||||||
|
Description: language definition for Apache configuration files (httpd.conf & .htaccess)
|
||||||
|
Category: config, web
|
||||||
|
Audit: 2020
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function apache(hljs) {
|
||||||
|
const NUMBER_REF = {
|
||||||
|
className: 'number',
|
||||||
|
begin: /[$%]\d+/
|
||||||
|
};
|
||||||
|
const NUMBER = {
|
||||||
|
className: 'number',
|
||||||
|
begin: /\b\d+/
|
||||||
|
};
|
||||||
|
const IP_ADDRESS = {
|
||||||
|
className: "number",
|
||||||
|
begin: /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/
|
||||||
|
};
|
||||||
|
const PORT_NUMBER = {
|
||||||
|
className: "number",
|
||||||
|
begin: /:\d{1,5}/
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
name: 'Apache config',
|
||||||
|
aliases: [ 'apacheconf' ],
|
||||||
|
case_insensitive: true,
|
||||||
|
contains: [
|
||||||
|
hljs.HASH_COMMENT_MODE,
|
||||||
|
{
|
||||||
|
className: 'section',
|
||||||
|
begin: /<\/?/,
|
||||||
|
end: />/,
|
||||||
|
contains: [
|
||||||
|
IP_ADDRESS,
|
||||||
|
PORT_NUMBER,
|
||||||
|
// low relevance prevents us from claming XML/HTML where this rule would
|
||||||
|
// match strings inside of XML tags
|
||||||
|
hljs.inherit(hljs.QUOTE_STRING_MODE, { relevance: 0 })
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'attribute',
|
||||||
|
begin: /\w+/,
|
||||||
|
relevance: 0,
|
||||||
|
// keywords aren’t needed for highlighting per se, they only boost relevance
|
||||||
|
// for a very generally defined mode (starts with a word, ends with line-end
|
||||||
|
keywords: { _: [
|
||||||
|
"order",
|
||||||
|
"deny",
|
||||||
|
"allow",
|
||||||
|
"setenv",
|
||||||
|
"rewriterule",
|
||||||
|
"rewriteengine",
|
||||||
|
"rewritecond",
|
||||||
|
"documentroot",
|
||||||
|
"sethandler",
|
||||||
|
"errordocument",
|
||||||
|
"loadmodule",
|
||||||
|
"options",
|
||||||
|
"header",
|
||||||
|
"listen",
|
||||||
|
"serverroot",
|
||||||
|
"servername"
|
||||||
|
] },
|
||||||
|
starts: {
|
||||||
|
end: /$/,
|
||||||
|
relevance: 0,
|
||||||
|
keywords: { literal: 'on off all deny allow' },
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
className: 'meta',
|
||||||
|
begin: /\s\[/,
|
||||||
|
end: /\]$/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'variable',
|
||||||
|
begin: /[\$%]\{/,
|
||||||
|
end: /\}/,
|
||||||
|
contains: [
|
||||||
|
'self',
|
||||||
|
NUMBER_REF
|
||||||
|
]
|
||||||
|
},
|
||||||
|
IP_ADDRESS,
|
||||||
|
NUMBER,
|
||||||
|
hljs.QUOTE_STRING_MODE
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
illegal: /\S/
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return apache;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
/*! `apache` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{const a={className:"number",
|
||||||
|
begin:/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/};return{
|
||||||
|
name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,
|
||||||
|
contains:[e.HASH_COMMENT_MODE,{className:"section",begin:/<\/?/,end:/>/,
|
||||||
|
contains:[a,{className:"number",begin:/:\d{1,5}/
|
||||||
|
},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",
|
||||||
|
begin:/\w+/,relevance:0,keywords:{
|
||||||
|
_:["order","deny","allow","setenv","rewriterule","rewriteengine","rewritecond","documentroot","sethandler","errordocument","loadmodule","options","header","listen","serverroot","servername"]
|
||||||
|
},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},
|
||||||
|
contains:[{className:"meta",begin:/\s\[/,end:/\]$/},{className:"variable",
|
||||||
|
begin:/[\$%]\{/,end:/\}/,contains:["self",{className:"number",begin:/[$%]\d+/}]
|
||||||
|
},a,{className:"number",begin:/\b\d+/},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}
|
||||||
|
})();export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,157 @@
|
||||||
|
/*! `applescript` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: AppleScript
|
||||||
|
Authors: Nathan Grigg <nathan@nathanamy.org>, Dr. Drang <drdrang@gmail.com>
|
||||||
|
Category: scripting
|
||||||
|
Website: https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html
|
||||||
|
Audit: 2020
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function applescript(hljs) {
|
||||||
|
const regex = hljs.regex;
|
||||||
|
const STRING = hljs.inherit(
|
||||||
|
hljs.QUOTE_STRING_MODE, { illegal: null });
|
||||||
|
const PARAMS = {
|
||||||
|
className: 'params',
|
||||||
|
begin: /\(/,
|
||||||
|
end: /\)/,
|
||||||
|
contains: [
|
||||||
|
'self',
|
||||||
|
hljs.C_NUMBER_MODE,
|
||||||
|
STRING
|
||||||
|
]
|
||||||
|
};
|
||||||
|
const COMMENT_MODE_1 = hljs.COMMENT(/--/, /$/);
|
||||||
|
const COMMENT_MODE_2 = hljs.COMMENT(
|
||||||
|
/\(\*/,
|
||||||
|
/\*\)/,
|
||||||
|
{ contains: [
|
||||||
|
'self', // allow nesting
|
||||||
|
COMMENT_MODE_1
|
||||||
|
] }
|
||||||
|
);
|
||||||
|
const COMMENTS = [
|
||||||
|
COMMENT_MODE_1,
|
||||||
|
COMMENT_MODE_2,
|
||||||
|
hljs.HASH_COMMENT_MODE
|
||||||
|
];
|
||||||
|
|
||||||
|
const KEYWORD_PATTERNS = [
|
||||||
|
/apart from/,
|
||||||
|
/aside from/,
|
||||||
|
/instead of/,
|
||||||
|
/out of/,
|
||||||
|
/greater than/,
|
||||||
|
/isn't|(doesn't|does not) (equal|come before|come after|contain)/,
|
||||||
|
/(greater|less) than( or equal)?/,
|
||||||
|
/(starts?|ends|begins?) with/,
|
||||||
|
/contained by/,
|
||||||
|
/comes (before|after)/,
|
||||||
|
/a (ref|reference)/,
|
||||||
|
/POSIX (file|path)/,
|
||||||
|
/(date|time) string/,
|
||||||
|
/quoted form/
|
||||||
|
];
|
||||||
|
|
||||||
|
const BUILT_IN_PATTERNS = [
|
||||||
|
/clipboard info/,
|
||||||
|
/the clipboard/,
|
||||||
|
/info for/,
|
||||||
|
/list (disks|folder)/,
|
||||||
|
/mount volume/,
|
||||||
|
/path to/,
|
||||||
|
/(close|open for) access/,
|
||||||
|
/(get|set) eof/,
|
||||||
|
/current date/,
|
||||||
|
/do shell script/,
|
||||||
|
/get volume settings/,
|
||||||
|
/random number/,
|
||||||
|
/set volume/,
|
||||||
|
/system attribute/,
|
||||||
|
/system info/,
|
||||||
|
/time to GMT/,
|
||||||
|
/(load|run|store) script/,
|
||||||
|
/scripting components/,
|
||||||
|
/ASCII (character|number)/,
|
||||||
|
/localized string/,
|
||||||
|
/choose (application|color|file|file name|folder|from list|remote application|URL)/,
|
||||||
|
/display (alert|dialog)/
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'AppleScript',
|
||||||
|
aliases: [ 'osascript' ],
|
||||||
|
keywords: {
|
||||||
|
keyword:
|
||||||
|
'about above after against and around as at back before beginning '
|
||||||
|
+ 'behind below beneath beside between but by considering '
|
||||||
|
+ 'contain contains continue copy div does eighth else end equal '
|
||||||
|
+ 'equals error every exit fifth first for fourth from front '
|
||||||
|
+ 'get given global if ignoring in into is it its last local me '
|
||||||
|
+ 'middle mod my ninth not of on onto or over prop property put ref '
|
||||||
|
+ 'reference repeat returning script second set seventh since '
|
||||||
|
+ 'sixth some tell tenth that the|0 then third through thru '
|
||||||
|
+ 'timeout times to transaction try until where while whose with '
|
||||||
|
+ 'without',
|
||||||
|
literal:
|
||||||
|
'AppleScript false linefeed return pi quote result space tab true',
|
||||||
|
built_in:
|
||||||
|
'alias application boolean class constant date file integer list '
|
||||||
|
+ 'number real record string text '
|
||||||
|
+ 'activate beep count delay launch log offset read round '
|
||||||
|
+ 'run say summarize write '
|
||||||
|
+ 'character characters contents day frontmost id item length '
|
||||||
|
+ 'month name|0 paragraph paragraphs rest reverse running time version '
|
||||||
|
+ 'weekday word words year'
|
||||||
|
},
|
||||||
|
contains: [
|
||||||
|
STRING,
|
||||||
|
hljs.C_NUMBER_MODE,
|
||||||
|
{
|
||||||
|
className: 'built_in',
|
||||||
|
begin: regex.concat(
|
||||||
|
/\b/,
|
||||||
|
regex.either(...BUILT_IN_PATTERNS),
|
||||||
|
/\b/
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'built_in',
|
||||||
|
begin: /^\s*return\b/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'literal',
|
||||||
|
begin:
|
||||||
|
/\b(text item delimiters|current application|missing value)\b/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'keyword',
|
||||||
|
begin: regex.concat(
|
||||||
|
/\b/,
|
||||||
|
regex.either(...KEYWORD_PATTERNS),
|
||||||
|
/\b/
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
beginKeywords: 'on',
|
||||||
|
illegal: /[${=;\n]/,
|
||||||
|
contains: [
|
||||||
|
hljs.UNDERSCORE_TITLE_MODE,
|
||||||
|
PARAMS
|
||||||
|
]
|
||||||
|
},
|
||||||
|
...COMMENTS
|
||||||
|
],
|
||||||
|
illegal: /\/\/|->|=>|\[\[/
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return applescript;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
/*! `applescript` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{
|
||||||
|
const t=e.regex,r=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),a={
|
||||||
|
className:"params",begin:/\(/,end:/\)/,contains:["self",e.C_NUMBER_MODE,r]
|
||||||
|
},i=e.COMMENT(/--/,/$/),n=[i,e.COMMENT(/\(\*/,/\*\)/,{contains:["self",i]
|
||||||
|
}),e.HASH_COMMENT_MODE];return{name:"AppleScript",aliases:["osascript"],
|
||||||
|
keywords:{
|
||||||
|
keyword:"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without",
|
||||||
|
literal:"AppleScript false linefeed return pi quote result space tab true",
|
||||||
|
built_in:"alias application boolean class constant date file integer list number real record string text activate beep count delay launch log offset read round run say summarize write character characters contents day frontmost id item length month name|0 paragraph paragraphs rest reverse running time version weekday word words year"
|
||||||
|
},contains:[r,e.C_NUMBER_MODE,{className:"built_in",
|
||||||
|
begin:t.concat(/\b/,t.either(/clipboard info/,/the clipboard/,/info for/,/list (disks|folder)/,/mount volume/,/path to/,/(close|open for) access/,/(get|set) eof/,/current date/,/do shell script/,/get volume settings/,/random number/,/set volume/,/system attribute/,/system info/,/time to GMT/,/(load|run|store) script/,/scripting components/,/ASCII (character|number)/,/localized string/,/choose (application|color|file|file name|folder|from list|remote application|URL)/,/display (alert|dialog)/),/\b/)
|
||||||
|
},{className:"built_in",begin:/^\s*return\b/},{className:"literal",
|
||||||
|
begin:/\b(text item delimiters|current application|missing value)\b/},{
|
||||||
|
className:"keyword",
|
||||||
|
begin:t.concat(/\b/,t.either(/apart from/,/aside from/,/instead of/,/out of/,/greater than/,/isn't|(doesn't|does not) (equal|come before|come after|contain)/,/(greater|less) than( or equal)?/,/(starts?|ends|begins?) with/,/contained by/,/comes (before|after)/,/a (ref|reference)/,/POSIX (file|path)/,/(date|time) string/,/quoted form/),/\b/)
|
||||||
|
},{beginKeywords:"on",illegal:/[${=;\n]/,contains:[e.UNDERSCORE_TITLE_MODE,a]
|
||||||
|
},...n],illegal:/\/\/|->|=>|\[\[/}}})();export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,425 @@
|
||||||
|
/*! `arcade` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: ArcGIS Arcade
|
||||||
|
Category: scripting
|
||||||
|
Author: John Foster <jfoster@esri.com>
|
||||||
|
Website: https://developers.arcgis.com/arcade/
|
||||||
|
Description: ArcGIS Arcade is an expression language used in many Esri ArcGIS products such as Pro, Online, Server, Runtime, JavaScript, and Python
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function arcade(hljs) {
|
||||||
|
const regex = hljs.regex;
|
||||||
|
const IDENT_RE = '[A-Za-z_][0-9A-Za-z_]*';
|
||||||
|
const KEYWORDS = {
|
||||||
|
keyword: [
|
||||||
|
"break",
|
||||||
|
"case",
|
||||||
|
"catch",
|
||||||
|
"continue",
|
||||||
|
"debugger",
|
||||||
|
"do",
|
||||||
|
"else",
|
||||||
|
"export",
|
||||||
|
"for",
|
||||||
|
"function",
|
||||||
|
"if",
|
||||||
|
"import",
|
||||||
|
"in",
|
||||||
|
"new",
|
||||||
|
"return",
|
||||||
|
"switch",
|
||||||
|
"try",
|
||||||
|
"var",
|
||||||
|
"void",
|
||||||
|
"while"
|
||||||
|
],
|
||||||
|
literal: [
|
||||||
|
"BackSlash",
|
||||||
|
"DoubleQuote",
|
||||||
|
"ForwardSlash",
|
||||||
|
"Infinity",
|
||||||
|
"NaN",
|
||||||
|
"NewLine",
|
||||||
|
"PI",
|
||||||
|
"SingleQuote",
|
||||||
|
"Tab",
|
||||||
|
"TextFormatting",
|
||||||
|
"false",
|
||||||
|
"null",
|
||||||
|
"true",
|
||||||
|
"undefined"
|
||||||
|
],
|
||||||
|
built_in: [
|
||||||
|
"Abs",
|
||||||
|
"Acos",
|
||||||
|
"All",
|
||||||
|
"Angle",
|
||||||
|
"Any",
|
||||||
|
"Area",
|
||||||
|
"AreaGeodetic",
|
||||||
|
"Array",
|
||||||
|
"Asin",
|
||||||
|
"Atan",
|
||||||
|
"Atan2",
|
||||||
|
"Attachments",
|
||||||
|
"Average",
|
||||||
|
"Back",
|
||||||
|
"Bearing",
|
||||||
|
"Boolean",
|
||||||
|
"Buffer",
|
||||||
|
"BufferGeodetic",
|
||||||
|
"Ceil",
|
||||||
|
"Centroid",
|
||||||
|
"ChangeTimeZone",
|
||||||
|
"Clip",
|
||||||
|
"Concatenate",
|
||||||
|
"Console",
|
||||||
|
"Constrain",
|
||||||
|
"Contains",
|
||||||
|
"ConvertDirection",
|
||||||
|
"ConvexHull",
|
||||||
|
"Cos",
|
||||||
|
"Count",
|
||||||
|
"Crosses",
|
||||||
|
"Cut",
|
||||||
|
"Date|0",
|
||||||
|
"DateAdd",
|
||||||
|
"DateDiff",
|
||||||
|
"DateOnly",
|
||||||
|
"Day",
|
||||||
|
"Decode",
|
||||||
|
"DefaultValue",
|
||||||
|
"Densify",
|
||||||
|
"DensifyGeodetic",
|
||||||
|
"Dictionary",
|
||||||
|
"Difference",
|
||||||
|
"Disjoint",
|
||||||
|
"Distance",
|
||||||
|
"DistanceGeodetic",
|
||||||
|
"Distinct",
|
||||||
|
"Domain",
|
||||||
|
"DomainCode",
|
||||||
|
"DomainName",
|
||||||
|
"EnvelopeIntersects",
|
||||||
|
"Equals",
|
||||||
|
"Erase",
|
||||||
|
"Exp",
|
||||||
|
"Expects",
|
||||||
|
"Extent",
|
||||||
|
"Feature",
|
||||||
|
"FeatureSet",
|
||||||
|
"FeatureSetByAssociation",
|
||||||
|
"FeatureSetById",
|
||||||
|
"FeatureSetByName",
|
||||||
|
"FeatureSetByPortalItem",
|
||||||
|
"FeatureSetByRelationshipClass",
|
||||||
|
"FeatureSetByRelationshipName",
|
||||||
|
"Filter",
|
||||||
|
"Find",
|
||||||
|
"First|0",
|
||||||
|
"Floor",
|
||||||
|
"FromCharCode",
|
||||||
|
"FromCodePoint",
|
||||||
|
"FromJSON",
|
||||||
|
"Front",
|
||||||
|
"GdbVersion",
|
||||||
|
"Generalize",
|
||||||
|
"Geometry",
|
||||||
|
"GetEnvironment",
|
||||||
|
"GetFeatureSet",
|
||||||
|
"GetFeatureSetInfo",
|
||||||
|
"GetUser",
|
||||||
|
"GroupBy",
|
||||||
|
"Guid",
|
||||||
|
"HasKey",
|
||||||
|
"HasValue",
|
||||||
|
"Hash",
|
||||||
|
"Hour",
|
||||||
|
"IIf",
|
||||||
|
"ISOMonth",
|
||||||
|
"ISOWeek",
|
||||||
|
"ISOWeekday",
|
||||||
|
"ISOYear",
|
||||||
|
"Includes",
|
||||||
|
"IndexOf",
|
||||||
|
"Insert",
|
||||||
|
"Intersection",
|
||||||
|
"Intersects",
|
||||||
|
"IsEmpty",
|
||||||
|
"IsNan",
|
||||||
|
"IsSelfIntersecting",
|
||||||
|
"IsSimple",
|
||||||
|
"Left|0",
|
||||||
|
"Length",
|
||||||
|
"Length3D",
|
||||||
|
"LengthGeodetic",
|
||||||
|
"Log",
|
||||||
|
"Lower",
|
||||||
|
"Map",
|
||||||
|
"Max",
|
||||||
|
"Mean",
|
||||||
|
"Mid",
|
||||||
|
"Millisecond",
|
||||||
|
"Min",
|
||||||
|
"Minute",
|
||||||
|
"Month",
|
||||||
|
"MultiPartToSinglePart",
|
||||||
|
"Multipoint",
|
||||||
|
"NearestCoordinate",
|
||||||
|
"NearestVertex",
|
||||||
|
"NextSequenceValue",
|
||||||
|
"None",
|
||||||
|
"Now",
|
||||||
|
"Number",
|
||||||
|
"Offset",
|
||||||
|
"OrderBy",
|
||||||
|
"Overlaps",
|
||||||
|
"Point",
|
||||||
|
"Polygon",
|
||||||
|
"Polyline",
|
||||||
|
"Pop",
|
||||||
|
"Portal",
|
||||||
|
"Pow",
|
||||||
|
"Proper",
|
||||||
|
"Push",
|
||||||
|
"Random",
|
||||||
|
"Reduce",
|
||||||
|
"Relate",
|
||||||
|
"Replace",
|
||||||
|
"Resize",
|
||||||
|
"Reverse",
|
||||||
|
"Right|0",
|
||||||
|
"RingIsClockwise",
|
||||||
|
"Rotate",
|
||||||
|
"Round",
|
||||||
|
"Schema",
|
||||||
|
"Second",
|
||||||
|
"SetGeometry",
|
||||||
|
"Simplify",
|
||||||
|
"Sin",
|
||||||
|
"Slice",
|
||||||
|
"Sort",
|
||||||
|
"Splice",
|
||||||
|
"Split",
|
||||||
|
"Sqrt",
|
||||||
|
"StandardizeGuid",
|
||||||
|
"Stdev",
|
||||||
|
"SubtypeCode",
|
||||||
|
"SubtypeName",
|
||||||
|
"Subtypes",
|
||||||
|
"Sum",
|
||||||
|
"SymmetricDifference",
|
||||||
|
"Tan",
|
||||||
|
"Text",
|
||||||
|
"Time",
|
||||||
|
"TimeZone",
|
||||||
|
"TimeZoneOffset",
|
||||||
|
"Timestamp",
|
||||||
|
"ToCharCode",
|
||||||
|
"ToCodePoint",
|
||||||
|
"ToHex",
|
||||||
|
"ToLocal",
|
||||||
|
"ToUTC",
|
||||||
|
"Today",
|
||||||
|
"Top|0",
|
||||||
|
"Touches",
|
||||||
|
"TrackAccelerationAt",
|
||||||
|
"TrackAccelerationWindow",
|
||||||
|
"TrackCurrentAcceleration",
|
||||||
|
"TrackCurrentDistance",
|
||||||
|
"TrackCurrentSpeed",
|
||||||
|
"TrackCurrentTime",
|
||||||
|
"TrackDistanceAt",
|
||||||
|
"TrackDistanceWindow",
|
||||||
|
"TrackDuration",
|
||||||
|
"TrackFieldWindow",
|
||||||
|
"TrackGeometryWindow",
|
||||||
|
"TrackIndex",
|
||||||
|
"TrackSpeedAt",
|
||||||
|
"TrackSpeedWindow",
|
||||||
|
"TrackStartTime",
|
||||||
|
"TrackWindow",
|
||||||
|
"Trim",
|
||||||
|
"TypeOf",
|
||||||
|
"Union",
|
||||||
|
"Upper",
|
||||||
|
"UrlEncode",
|
||||||
|
"Variance",
|
||||||
|
"Week",
|
||||||
|
"Weekday",
|
||||||
|
"When|0",
|
||||||
|
"Within",
|
||||||
|
"Year|0",
|
||||||
|
]
|
||||||
|
};
|
||||||
|
const PROFILE_VARS = [
|
||||||
|
"aggregatedFeatures",
|
||||||
|
"analytic",
|
||||||
|
"config",
|
||||||
|
"datapoint",
|
||||||
|
"datastore",
|
||||||
|
"editcontext",
|
||||||
|
"feature",
|
||||||
|
"featureSet",
|
||||||
|
"feedfeature",
|
||||||
|
"fencefeature",
|
||||||
|
"fencenotificationtype",
|
||||||
|
"join",
|
||||||
|
"layer",
|
||||||
|
"locationupdate",
|
||||||
|
"map",
|
||||||
|
"measure",
|
||||||
|
"measure",
|
||||||
|
"originalFeature",
|
||||||
|
"record",
|
||||||
|
"reference",
|
||||||
|
"rowindex",
|
||||||
|
"sourcedatastore",
|
||||||
|
"sourcefeature",
|
||||||
|
"sourcelayer",
|
||||||
|
"target",
|
||||||
|
"targetdatastore",
|
||||||
|
"targetfeature",
|
||||||
|
"targetlayer",
|
||||||
|
"value",
|
||||||
|
"view"
|
||||||
|
];
|
||||||
|
const SYMBOL = {
|
||||||
|
className: 'symbol',
|
||||||
|
begin: '\\$' + regex.either(...PROFILE_VARS)
|
||||||
|
};
|
||||||
|
const NUMBER = {
|
||||||
|
className: 'number',
|
||||||
|
variants: [
|
||||||
|
{ begin: '\\b(0[bB][01]+)' },
|
||||||
|
{ begin: '\\b(0[oO][0-7]+)' },
|
||||||
|
{ begin: hljs.C_NUMBER_RE }
|
||||||
|
],
|
||||||
|
relevance: 0
|
||||||
|
};
|
||||||
|
const SUBST = {
|
||||||
|
className: 'subst',
|
||||||
|
begin: '\\$\\{',
|
||||||
|
end: '\\}',
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
contains: [] // defined later
|
||||||
|
};
|
||||||
|
const TEMPLATE_STRING = {
|
||||||
|
className: 'string',
|
||||||
|
begin: '`',
|
||||||
|
end: '`',
|
||||||
|
contains: [
|
||||||
|
hljs.BACKSLASH_ESCAPE,
|
||||||
|
SUBST
|
||||||
|
]
|
||||||
|
};
|
||||||
|
SUBST.contains = [
|
||||||
|
hljs.APOS_STRING_MODE,
|
||||||
|
hljs.QUOTE_STRING_MODE,
|
||||||
|
TEMPLATE_STRING,
|
||||||
|
NUMBER,
|
||||||
|
hljs.REGEXP_MODE
|
||||||
|
];
|
||||||
|
const PARAMS_CONTAINS = SUBST.contains.concat([
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
hljs.C_LINE_COMMENT_MODE
|
||||||
|
]);
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'ArcGIS Arcade',
|
||||||
|
case_insensitive: true,
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
contains: [
|
||||||
|
hljs.APOS_STRING_MODE,
|
||||||
|
hljs.QUOTE_STRING_MODE,
|
||||||
|
TEMPLATE_STRING,
|
||||||
|
hljs.C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
SYMBOL,
|
||||||
|
NUMBER,
|
||||||
|
{ // object attr container
|
||||||
|
begin: /[{,]\s*/,
|
||||||
|
relevance: 0,
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
begin: IDENT_RE + '\\s*:',
|
||||||
|
returnBegin: true,
|
||||||
|
relevance: 0,
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
className: 'attr',
|
||||||
|
begin: IDENT_RE,
|
||||||
|
relevance: 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ // "value" container
|
||||||
|
begin: '(' + hljs.RE_STARTERS_RE + '|\\b(return)\\b)\\s*',
|
||||||
|
keywords: 'return',
|
||||||
|
contains: [
|
||||||
|
hljs.C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
hljs.REGEXP_MODE,
|
||||||
|
{
|
||||||
|
className: 'function',
|
||||||
|
begin: '(\\(.*?\\)|' + IDENT_RE + ')\\s*=>',
|
||||||
|
returnBegin: true,
|
||||||
|
end: '\\s*=>',
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
className: 'params',
|
||||||
|
variants: [
|
||||||
|
{ begin: IDENT_RE },
|
||||||
|
{ begin: /\(\s*\)/ },
|
||||||
|
{
|
||||||
|
begin: /\(/,
|
||||||
|
end: /\)/,
|
||||||
|
excludeBegin: true,
|
||||||
|
excludeEnd: true,
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
contains: PARAMS_CONTAINS
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
beginKeywords: 'function',
|
||||||
|
end: /\{/,
|
||||||
|
excludeEnd: true,
|
||||||
|
contains: [
|
||||||
|
hljs.inherit(hljs.TITLE_MODE, {
|
||||||
|
className: "title.function",
|
||||||
|
begin: IDENT_RE
|
||||||
|
}),
|
||||||
|
{
|
||||||
|
className: 'params',
|
||||||
|
begin: /\(/,
|
||||||
|
end: /\)/,
|
||||||
|
excludeBegin: true,
|
||||||
|
excludeEnd: true,
|
||||||
|
contains: PARAMS_CONTAINS
|
||||||
|
}
|
||||||
|
],
|
||||||
|
illegal: /\[|%/
|
||||||
|
},
|
||||||
|
{ begin: /\$[(.]/ }
|
||||||
|
],
|
||||||
|
illegal: /#(?!!)/
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return arcade;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*! `arcade` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{
|
||||||
|
const t="[A-Za-z_][0-9A-Za-z_]*",n={
|
||||||
|
keyword:["break","case","catch","continue","debugger","do","else","export","for","function","if","import","in","new","return","switch","try","var","void","while"],
|
||||||
|
literal:["BackSlash","DoubleQuote","ForwardSlash","Infinity","NaN","NewLine","PI","SingleQuote","Tab","TextFormatting","false","null","true","undefined"],
|
||||||
|
built_in:["Abs","Acos","All","Angle","Any","Area","AreaGeodetic","Array","Asin","Atan","Atan2","Attachments","Average","Back","Bearing","Boolean","Buffer","BufferGeodetic","Ceil","Centroid","ChangeTimeZone","Clip","Concatenate","Console","Constrain","Contains","ConvertDirection","ConvexHull","Cos","Count","Crosses","Cut","Date|0","DateAdd","DateDiff","DateOnly","Day","Decode","DefaultValue","Densify","DensifyGeodetic","Dictionary","Difference","Disjoint","Distance","DistanceGeodetic","Distinct","Domain","DomainCode","DomainName","EnvelopeIntersects","Equals","Erase","Exp","Expects","Extent","Feature","FeatureSet","FeatureSetByAssociation","FeatureSetById","FeatureSetByName","FeatureSetByPortalItem","FeatureSetByRelationshipClass","FeatureSetByRelationshipName","Filter","Find","First|0","Floor","FromCharCode","FromCodePoint","FromJSON","Front","GdbVersion","Generalize","Geometry","GetEnvironment","GetFeatureSet","GetFeatureSetInfo","GetUser","GroupBy","Guid","HasKey","HasValue","Hash","Hour","IIf","ISOMonth","ISOWeek","ISOWeekday","ISOYear","Includes","IndexOf","Insert","Intersection","Intersects","IsEmpty","IsNan","IsSelfIntersecting","IsSimple","Left|0","Length","Length3D","LengthGeodetic","Log","Lower","Map","Max","Mean","Mid","Millisecond","Min","Minute","Month","MultiPartToSinglePart","Multipoint","NearestCoordinate","NearestVertex","NextSequenceValue","None","Now","Number","Offset","OrderBy","Overlaps","Point","Polygon","Polyline","Pop","Portal","Pow","Proper","Push","Random","Reduce","Relate","Replace","Resize","Reverse","Right|0","RingIsClockwise","Rotate","Round","Schema","Second","SetGeometry","Simplify","Sin","Slice","Sort","Splice","Split","Sqrt","StandardizeGuid","Stdev","SubtypeCode","SubtypeName","Subtypes","Sum","SymmetricDifference","Tan","Text","Time","TimeZone","TimeZoneOffset","Timestamp","ToCharCode","ToCodePoint","ToHex","ToLocal","ToUTC","Today","Top|0","Touches","TrackAccelerationAt","TrackAccelerationWindow","TrackCurrentAcceleration","TrackCurrentDistance","TrackCurrentSpeed","TrackCurrentTime","TrackDistanceAt","TrackDistanceWindow","TrackDuration","TrackFieldWindow","TrackGeometryWindow","TrackIndex","TrackSpeedAt","TrackSpeedWindow","TrackStartTime","TrackWindow","Trim","TypeOf","Union","Upper","UrlEncode","Variance","Week","Weekday","When|0","Within","Year|0"]
|
||||||
|
},a={className:"symbol",
|
||||||
|
begin:"\\$"+e.regex.either("aggregatedFeatures","analytic","config","datapoint","datastore","editcontext","feature","featureSet","feedfeature","fencefeature","fencenotificationtype","join","layer","locationupdate","map","measure","measure","originalFeature","record","reference","rowindex","sourcedatastore","sourcefeature","sourcelayer","target","targetdatastore","targetfeature","targetlayer","value","view")
|
||||||
|
},r={className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{
|
||||||
|
begin:"\\b(0[oO][0-7]+)"},{begin:e.C_NUMBER_RE}],relevance:0},i={
|
||||||
|
className:"subst",begin:"\\$\\{",end:"\\}",keywords:n,contains:[]},o={
|
||||||
|
className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,i]}
|
||||||
|
;i.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,o,r,e.REGEXP_MODE]
|
||||||
|
;const s=i.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE])
|
||||||
|
;return{name:"ArcGIS Arcade",case_insensitive:!0,keywords:n,
|
||||||
|
contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,o,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,r,{
|
||||||
|
begin:/[{,]\s*/,relevance:0,contains:[{begin:t+"\\s*:",returnBegin:!0,
|
||||||
|
relevance:0,contains:[{className:"attr",begin:t,relevance:0}]}]},{
|
||||||
|
begin:"("+e.RE_STARTERS_RE+"|\\b(return)\\b)\\s*",keywords:"return",
|
||||||
|
contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{
|
||||||
|
className:"function",begin:"(\\(.*?\\)|"+t+")\\s*=>",returnBegin:!0,
|
||||||
|
end:"\\s*=>",contains:[{className:"params",variants:[{begin:t},{begin:/\(\s*\)/
|
||||||
|
},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,contains:s}]}]
|
||||||
|
}],relevance:0},{beginKeywords:"function",end:/\{/,excludeEnd:!0,
|
||||||
|
contains:[e.inherit(e.TITLE_MODE,{className:"title.function",begin:t}),{
|
||||||
|
className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:s
|
||||||
|
}],illegal:/\[|%/},{begin:/\$[(.]/}],illegal:/#(?!!)/}}})()
|
||||||
|
;export default hljsGrammar;
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*! `arduino` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{const t={
|
||||||
|
type:["boolean","byte","word","String"],
|
||||||
|
built_in:["KeyboardController","MouseController","SoftwareSerial","EthernetServer","EthernetClient","LiquidCrystal","RobotControl","GSMVoiceCall","EthernetUDP","EsploraTFT","HttpClient","RobotMotor","WiFiClient","GSMScanner","FileSystem","Scheduler","GSMServer","YunClient","YunServer","IPAddress","GSMClient","GSMModem","Keyboard","Ethernet","Console","GSMBand","Esplora","Stepper","Process","WiFiUDP","GSM_SMS","Mailbox","USBHost","Firmata","PImage","Client","Server","GSMPIN","FileIO","Bridge","Serial","EEPROM","Stream","Mouse","Audio","Servo","File","Task","GPRS","WiFi","Wire","TFT","GSM","SPI","SD"],
|
||||||
|
_hints:["setup","loop","runShellCommandAsynchronously","analogWriteResolution","retrieveCallingNumber","printFirmwareVersion","analogReadResolution","sendDigitalPortPair","noListenOnLocalhost","readJoystickButton","setFirmwareVersion","readJoystickSwitch","scrollDisplayRight","getVoiceCallStatus","scrollDisplayLeft","writeMicroseconds","delayMicroseconds","beginTransmission","getSignalStrength","runAsynchronously","getAsynchronously","listenOnLocalhost","getCurrentCarrier","readAccelerometer","messageAvailable","sendDigitalPorts","lineFollowConfig","countryNameWrite","runShellCommand","readStringUntil","rewindDirectory","readTemperature","setClockDivider","readLightSensor","endTransmission","analogReference","detachInterrupt","countryNameRead","attachInterrupt","encryptionType","readBytesUntil","robotNameWrite","readMicrophone","robotNameRead","cityNameWrite","userNameWrite","readJoystickY","readJoystickX","mouseReleased","openNextFile","scanNetworks","noInterrupts","digitalWrite","beginSpeaker","mousePressed","isActionDone","mouseDragged","displayLogos","noAutoscroll","addParameter","remoteNumber","getModifiers","keyboardRead","userNameRead","waitContinue","processInput","parseCommand","printVersion","readNetworks","writeMessage","blinkVersion","cityNameRead","readMessage","setDataMode","parsePacket","isListening","setBitOrder","beginPacket","isDirectory","motorsWrite","drawCompass","digitalRead","clearScreen","serialEvent","rightToLeft","setTextSize","leftToRight","requestFrom","keyReleased","compassRead","analogWrite","interrupts","WiFiServer","disconnect","playMelody","parseFloat","autoscroll","getPINUsed","setPINUsed","setTimeout","sendAnalog","readSlider","analogRead","beginWrite","createChar","motorsStop","keyPressed","tempoWrite","readButton","subnetMask","debugPrint","macAddress","writeGreen","randomSeed","attachGPRS","readString","sendString","remotePort","releaseAll","mouseMoved","background","getXChange","getYChange","answerCall","getResult","voiceCall","endPacket","constrain","getSocket","writeJSON","getButton","available","connected","findUntil","readBytes","exitValue","readGreen","writeBlue","startLoop","IPAddress","isPressed","sendSysex","pauseMode","gatewayIP","setCursor","getOemKey","tuneWrite","noDisplay","loadImage","switchPIN","onRequest","onReceive","changePIN","playFile","noBuffer","parseInt","overflow","checkPIN","knobRead","beginTFT","bitClear","updateIR","bitWrite","position","writeRGB","highByte","writeRed","setSpeed","readBlue","noStroke","remoteIP","transfer","shutdown","hangCall","beginSMS","endWrite","attached","maintain","noCursor","checkReg","checkPUK","shiftOut","isValid","shiftIn","pulseIn","connect","println","localIP","pinMode","getIMEI","display","noBlink","process","getBand","running","beginSD","drawBMP","lowByte","setBand","release","bitRead","prepare","pointTo","readRed","setMode","noFill","remove","listen","stroke","detach","attach","noTone","exists","buffer","height","bitSet","circle","config","cursor","random","IRread","setDNS","endSMS","getKey","micros","millis","begin","print","write","ready","flush","width","isPIN","blink","clear","press","mkdir","rmdir","close","point","yield","image","BSSID","click","delay","read","text","move","peek","beep","rect","line","open","seek","fill","size","turn","stop","home","find","step","tone","sqrt","RSSI","SSID","end","bit","tan","cos","sin","pow","map","abs","max","min","get","run","put"],
|
||||||
|
literal:["DIGITAL_MESSAGE","FIRMATA_STRING","ANALOG_MESSAGE","REPORT_DIGITAL","REPORT_ANALOG","INPUT_PULLUP","SET_PIN_MODE","INTERNAL2V56","SYSTEM_RESET","LED_BUILTIN","INTERNAL1V1","SYSEX_START","INTERNAL","EXTERNAL","DEFAULT","OUTPUT","INPUT","HIGH","LOW"]
|
||||||
|
},r=(e=>{const t=e.regex,r=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]
|
||||||
|
}),a="decltype\\(auto\\)",n="[a-zA-Z_]\\w*::",i="(?!struct)("+a+"|"+t.optional(n)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",s={
|
||||||
|
className:"type",begin:"\\b[a-z\\d_]*_t\\b"},o={className:"string",variants:[{
|
||||||
|
begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{
|
||||||
|
begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
|
||||||
|
end:"'",illegal:"."},e.END_SAME_AS_BEGIN({
|
||||||
|
begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={
|
||||||
|
className:"number",variants:[{
|
||||||
|
begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"
|
||||||
|
},{
|
||||||
|
begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"
|
||||||
|
}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{
|
||||||
|
keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"
|
||||||
|
},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{
|
||||||
|
className:"string",begin:/<.*?>/},r,e.C_BLOCK_COMMENT_MODE]},d={
|
||||||
|
className:"title",begin:t.optional(n)+e.IDENT_RE,relevance:0
|
||||||
|
},u=t.optional(n)+e.IDENT_RE+"\\s*\\(",p={
|
||||||
|
type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],
|
||||||
|
keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],
|
||||||
|
literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],
|
||||||
|
_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"]
|
||||||
|
},m={className:"function.dispatch",relevance:0,keywords:{
|
||||||
|
_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"]
|
||||||
|
},
|
||||||
|
begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/))
|
||||||
|
},g=[m,c,s,r,e.C_BLOCK_COMMENT_MODE,l,o],_={variants:[{begin:/=/,end:/;/},{
|
||||||
|
begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],
|
||||||
|
keywords:p,contains:g.concat([{begin:/\(/,end:/\)/,keywords:p,
|
||||||
|
contains:g.concat(["self"]),relevance:0}]),relevance:0},h={className:"function",
|
||||||
|
begin:"("+i+"[\\*&\\s]+)+"+u,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,
|
||||||
|
keywords:p,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:p,relevance:0},{
|
||||||
|
begin:u,returnBegin:!0,contains:[d],relevance:0},{begin:/::/,relevance:0},{
|
||||||
|
begin:/:/,endsWithParent:!0,contains:[o,l]},{relevance:0,match:/,/},{
|
||||||
|
className:"params",begin:/\(/,end:/\)/,keywords:p,relevance:0,
|
||||||
|
contains:[r,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/,end:/\)/,keywords:p,
|
||||||
|
relevance:0,contains:["self",r,e.C_BLOCK_COMMENT_MODE,o,l,s]}]
|
||||||
|
},s,r,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C++",
|
||||||
|
aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:p,illegal:"</",
|
||||||
|
classNameAliases:{"function.dispatch":"built_in"},
|
||||||
|
contains:[].concat(_,h,m,g,[c,{
|
||||||
|
begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\s*<(?!<)",
|
||||||
|
end:">",keywords:p,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:p},{
|
||||||
|
match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],
|
||||||
|
className:{1:"keyword",3:"title.class"}}])}})(e),a=r.keywords
|
||||||
|
;return a.type=[...a.type,...t.type],
|
||||||
|
a.literal=[...a.literal,...t.literal],a.built_in=[...a.built_in,...t.built_in],
|
||||||
|
a._hints=t._hints,r.name="Arduino",r.aliases=["ino"],r.supersetOf="cpp",r}})()
|
||||||
|
;export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,132 @@
|
||||||
|
/*! `armasm` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: ARM Assembly
|
||||||
|
Author: Dan Panzarella <alsoelp@gmail.com>
|
||||||
|
Description: ARM Assembly including Thumb and Thumb2 instructions
|
||||||
|
Category: assembler
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function armasm(hljs) {
|
||||||
|
// local labels: %?[FB]?[AT]?\d{1,2}\w+
|
||||||
|
|
||||||
|
const COMMENT = { variants: [
|
||||||
|
hljs.COMMENT('^[ \\t]*(?=#)', '$', {
|
||||||
|
relevance: 0,
|
||||||
|
excludeBegin: true
|
||||||
|
}),
|
||||||
|
hljs.COMMENT('[;@]', '$', { relevance: 0 }),
|
||||||
|
hljs.C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE
|
||||||
|
] };
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'ARM Assembly',
|
||||||
|
case_insensitive: true,
|
||||||
|
aliases: [ 'arm' ],
|
||||||
|
keywords: {
|
||||||
|
$pattern: '\\.?' + hljs.IDENT_RE,
|
||||||
|
meta:
|
||||||
|
// GNU preprocs
|
||||||
|
'.2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg '
|
||||||
|
// ARM directives
|
||||||
|
+ 'ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ',
|
||||||
|
built_in:
|
||||||
|
'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 ' // standard registers
|
||||||
|
+ 'w0 w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12 w13 w14 w15 ' // 32 bit ARMv8 registers
|
||||||
|
+ 'w16 w17 w18 w19 w20 w21 w22 w23 w24 w25 w26 w27 w28 w29 w30 '
|
||||||
|
+ 'x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 ' // 64 bit ARMv8 registers
|
||||||
|
+ 'x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 '
|
||||||
|
+ 'pc lr sp ip sl sb fp ' // typical regs plus backward compatibility
|
||||||
|
+ 'a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 ' // more regs and fp
|
||||||
|
+ 'p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 ' // coprocessor regs
|
||||||
|
+ 'c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 ' // more coproc
|
||||||
|
+ 'q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 ' // advanced SIMD NEON regs
|
||||||
|
|
||||||
|
// program status registers
|
||||||
|
+ 'cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf '
|
||||||
|
+ 'spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf '
|
||||||
|
|
||||||
|
// NEON and VFP registers
|
||||||
|
+ 's0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 '
|
||||||
|
+ 's16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 '
|
||||||
|
+ 'd0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 '
|
||||||
|
+ 'd16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 '
|
||||||
|
|
||||||
|
+ '{PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @'
|
||||||
|
},
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
className: 'keyword',
|
||||||
|
begin: '\\b(' // mnemonics
|
||||||
|
+ 'adc|'
|
||||||
|
+ '(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|'
|
||||||
|
+ 'and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|'
|
||||||
|
+ 'bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|'
|
||||||
|
+ 'setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|'
|
||||||
|
+ 'ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|'
|
||||||
|
+ 'mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|'
|
||||||
|
+ 'mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|'
|
||||||
|
+ 'mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|'
|
||||||
|
+ 'rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|'
|
||||||
|
+ 'stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|'
|
||||||
|
+ '[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|'
|
||||||
|
+ 'wfe|wfi|yield'
|
||||||
|
+ ')'
|
||||||
|
+ '(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?' // condition codes
|
||||||
|
+ '[sptrx]?' // legal postfixes
|
||||||
|
+ '(?=\\s)' // followed by space
|
||||||
|
},
|
||||||
|
COMMENT,
|
||||||
|
hljs.QUOTE_STRING_MODE,
|
||||||
|
{
|
||||||
|
className: 'string',
|
||||||
|
begin: '\'',
|
||||||
|
end: '[^\\\\]\'',
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'title',
|
||||||
|
begin: '\\|',
|
||||||
|
end: '\\|',
|
||||||
|
illegal: '\\n',
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'number',
|
||||||
|
variants: [
|
||||||
|
{ // hex
|
||||||
|
begin: '[#$=]?0x[0-9a-f]+' },
|
||||||
|
{ // bin
|
||||||
|
begin: '[#$=]?0b[01]+' },
|
||||||
|
{ // literal
|
||||||
|
begin: '[#$=]\\d+' },
|
||||||
|
{ // bare number
|
||||||
|
begin: '\\b\\d+' }
|
||||||
|
],
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'symbol',
|
||||||
|
variants: [
|
||||||
|
{ // GNU ARM syntax
|
||||||
|
begin: '^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:' },
|
||||||
|
{ // ARM syntax
|
||||||
|
begin: '^[a-z_\\.\\$][a-z0-9_\\.\\$]+' },
|
||||||
|
{ // label reference
|
||||||
|
begin: '[=#]\\w+' }
|
||||||
|
],
|
||||||
|
relevance: 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return armasm;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
/*! `armasm` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return s=>{const r={
|
||||||
|
variants:[s.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0
|
||||||
|
}),s.COMMENT("[;@]","$",{relevance:0
|
||||||
|
}),s.C_LINE_COMMENT_MODE,s.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",
|
||||||
|
case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+s.IDENT_RE,
|
||||||
|
meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",
|
||||||
|
built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 w0 w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12 w13 w14 w15 w16 w17 w18 w19 w20 w21 w22 w23 w24 w25 w26 w27 w28 w29 w30 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"
|
||||||
|
},contains:[{className:"keyword",
|
||||||
|
begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"
|
||||||
|
},r,s.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0
|
||||||
|
},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{
|
||||||
|
className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"
|
||||||
|
},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",
|
||||||
|
variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{
|
||||||
|
begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}})()
|
||||||
|
;export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,269 @@
|
||||||
|
/*! `asciidoc` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: AsciiDoc
|
||||||
|
Requires: xml.js
|
||||||
|
Author: Dan Allen <dan.j.allen@gmail.com>
|
||||||
|
Website: http://asciidoc.org
|
||||||
|
Description: A semantic, text-based document format that can be exported to HTML, DocBook and other backends.
|
||||||
|
Category: markup
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function asciidoc(hljs) {
|
||||||
|
const regex = hljs.regex;
|
||||||
|
const HORIZONTAL_RULE = {
|
||||||
|
begin: '^\'{3,}[ \\t]*$',
|
||||||
|
relevance: 10
|
||||||
|
};
|
||||||
|
const ESCAPED_FORMATTING = [
|
||||||
|
// escaped constrained formatting marks (i.e., \* \_ or \`)
|
||||||
|
{ begin: /\\[*_`]/ },
|
||||||
|
// escaped unconstrained formatting marks (i.e., \\** \\__ or \\``)
|
||||||
|
// must ignore until the next formatting marks
|
||||||
|
// this rule might not be 100% compliant with Asciidoctor 2.0 but we are entering undefined behavior territory...
|
||||||
|
{ begin: /\\\\\*{2}[^\n]*?\*{2}/ },
|
||||||
|
{ begin: /\\\\_{2}[^\n]*_{2}/ },
|
||||||
|
{ begin: /\\\\`{2}[^\n]*`{2}/ },
|
||||||
|
// guard: constrained formatting mark may not be preceded by ":", ";" or
|
||||||
|
// "}". match these so the constrained rule doesn't see them
|
||||||
|
{ begin: /[:;}][*_`](?![*_`])/ }
|
||||||
|
];
|
||||||
|
const STRONG = [
|
||||||
|
// inline unconstrained strong (single line)
|
||||||
|
{
|
||||||
|
className: 'strong',
|
||||||
|
begin: /\*{2}([^\n]+?)\*{2}/
|
||||||
|
},
|
||||||
|
// inline unconstrained strong (multi-line)
|
||||||
|
{
|
||||||
|
className: 'strong',
|
||||||
|
begin: regex.concat(
|
||||||
|
/\*\*/,
|
||||||
|
/((\*(?!\*)|\\[^\n]|[^*\n\\])+\n)+/,
|
||||||
|
/(\*(?!\*)|\\[^\n]|[^*\n\\])*/,
|
||||||
|
/\*\*/
|
||||||
|
),
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
// inline constrained strong (single line)
|
||||||
|
{
|
||||||
|
className: 'strong',
|
||||||
|
// must not precede or follow a word character
|
||||||
|
begin: /\B\*(\S|\S[^\n]*?\S)\*(?!\w)/
|
||||||
|
},
|
||||||
|
// inline constrained strong (multi-line)
|
||||||
|
{
|
||||||
|
className: 'strong',
|
||||||
|
// must not precede or follow a word character
|
||||||
|
begin: /\*[^\s]([^\n]+\n)+([^\n]+)\*/
|
||||||
|
}
|
||||||
|
];
|
||||||
|
const EMPHASIS = [
|
||||||
|
// inline unconstrained emphasis (single line)
|
||||||
|
{
|
||||||
|
className: 'emphasis',
|
||||||
|
begin: /_{2}([^\n]+?)_{2}/
|
||||||
|
},
|
||||||
|
// inline unconstrained emphasis (multi-line)
|
||||||
|
{
|
||||||
|
className: 'emphasis',
|
||||||
|
begin: regex.concat(
|
||||||
|
/__/,
|
||||||
|
/((_(?!_)|\\[^\n]|[^_\n\\])+\n)+/,
|
||||||
|
/(_(?!_)|\\[^\n]|[^_\n\\])*/,
|
||||||
|
/__/
|
||||||
|
),
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
// inline constrained emphasis (single line)
|
||||||
|
{
|
||||||
|
className: 'emphasis',
|
||||||
|
// must not precede or follow a word character
|
||||||
|
begin: /\b_(\S|\S[^\n]*?\S)_(?!\w)/
|
||||||
|
},
|
||||||
|
// inline constrained emphasis (multi-line)
|
||||||
|
{
|
||||||
|
className: 'emphasis',
|
||||||
|
// must not precede or follow a word character
|
||||||
|
begin: /_[^\s]([^\n]+\n)+([^\n]+)_/
|
||||||
|
},
|
||||||
|
// inline constrained emphasis using single quote (legacy)
|
||||||
|
{
|
||||||
|
className: 'emphasis',
|
||||||
|
// must not follow a word character or be followed by a single quote or space
|
||||||
|
begin: '\\B\'(?![\'\\s])',
|
||||||
|
end: '(\\n{2}|\')',
|
||||||
|
// allow escaped single quote followed by word char
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
begin: '\\\\\'\\w',
|
||||||
|
relevance: 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
relevance: 0
|
||||||
|
}
|
||||||
|
];
|
||||||
|
const ADMONITION = {
|
||||||
|
className: 'symbol',
|
||||||
|
begin: '^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+',
|
||||||
|
relevance: 10
|
||||||
|
};
|
||||||
|
const BULLET_LIST = {
|
||||||
|
className: 'bullet',
|
||||||
|
begin: '^(\\*+|-+|\\.+|[^\\n]+?::)\\s+'
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'AsciiDoc',
|
||||||
|
aliases: [ 'adoc' ],
|
||||||
|
contains: [
|
||||||
|
// block comment
|
||||||
|
hljs.COMMENT(
|
||||||
|
'^/{4,}\\n',
|
||||||
|
'\\n/{4,}$',
|
||||||
|
// can also be done as...
|
||||||
|
// '^/{4,}$',
|
||||||
|
// '^/{4,}$',
|
||||||
|
{ relevance: 10 }
|
||||||
|
),
|
||||||
|
// line comment
|
||||||
|
hljs.COMMENT(
|
||||||
|
'^//',
|
||||||
|
'$',
|
||||||
|
{ relevance: 0 }
|
||||||
|
),
|
||||||
|
// title
|
||||||
|
{
|
||||||
|
className: 'title',
|
||||||
|
begin: '^\\.\\w.*$'
|
||||||
|
},
|
||||||
|
// example, admonition & sidebar blocks
|
||||||
|
{
|
||||||
|
begin: '^[=\\*]{4,}\\n',
|
||||||
|
end: '\\n^[=\\*]{4,}$',
|
||||||
|
relevance: 10
|
||||||
|
},
|
||||||
|
// headings
|
||||||
|
{
|
||||||
|
className: 'section',
|
||||||
|
relevance: 10,
|
||||||
|
variants: [
|
||||||
|
{ begin: '^(={1,6})[ \t].+?([ \t]\\1)?$' },
|
||||||
|
{ begin: '^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// document attributes
|
||||||
|
{
|
||||||
|
className: 'meta',
|
||||||
|
begin: '^:.+?:',
|
||||||
|
end: '\\s',
|
||||||
|
excludeEnd: true,
|
||||||
|
relevance: 10
|
||||||
|
},
|
||||||
|
// block attributes
|
||||||
|
{
|
||||||
|
className: 'meta',
|
||||||
|
begin: '^\\[.+?\\]$',
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
// quoteblocks
|
||||||
|
{
|
||||||
|
className: 'quote',
|
||||||
|
begin: '^_{4,}\\n',
|
||||||
|
end: '\\n_{4,}$',
|
||||||
|
relevance: 10
|
||||||
|
},
|
||||||
|
// listing and literal blocks
|
||||||
|
{
|
||||||
|
className: 'code',
|
||||||
|
begin: '^[\\-\\.]{4,}\\n',
|
||||||
|
end: '\\n[\\-\\.]{4,}$',
|
||||||
|
relevance: 10
|
||||||
|
},
|
||||||
|
// passthrough blocks
|
||||||
|
{
|
||||||
|
begin: '^\\+{4,}\\n',
|
||||||
|
end: '\\n\\+{4,}$',
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
begin: '<',
|
||||||
|
end: '>',
|
||||||
|
subLanguage: 'xml',
|
||||||
|
relevance: 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
relevance: 10
|
||||||
|
},
|
||||||
|
|
||||||
|
BULLET_LIST,
|
||||||
|
ADMONITION,
|
||||||
|
...ESCAPED_FORMATTING,
|
||||||
|
...STRONG,
|
||||||
|
...EMPHASIS,
|
||||||
|
|
||||||
|
// inline smart quotes
|
||||||
|
{
|
||||||
|
className: 'string',
|
||||||
|
variants: [
|
||||||
|
{ begin: "``.+?''" },
|
||||||
|
{ begin: "`.+?'" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// inline unconstrained emphasis
|
||||||
|
{
|
||||||
|
className: 'code',
|
||||||
|
begin: /`{2}/,
|
||||||
|
end: /(\n{2}|`{2})/
|
||||||
|
},
|
||||||
|
// inline code snippets (TODO should get same treatment as strong and emphasis)
|
||||||
|
{
|
||||||
|
className: 'code',
|
||||||
|
begin: '(`.+?`|\\+.+?\\+)',
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
// indented literal block
|
||||||
|
{
|
||||||
|
className: 'code',
|
||||||
|
begin: '^[ \\t]',
|
||||||
|
end: '$',
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
HORIZONTAL_RULE,
|
||||||
|
// images and links
|
||||||
|
{
|
||||||
|
begin: '(link:)?(http|https|ftp|file|irc|image:?):\\S+?\\[[^[]*?\\]',
|
||||||
|
returnBegin: true,
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
begin: '(link|image:?):',
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'link',
|
||||||
|
begin: '\\w',
|
||||||
|
end: '[^\\[]+',
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'string',
|
||||||
|
begin: '\\[',
|
||||||
|
end: '\\]',
|
||||||
|
excludeBegin: true,
|
||||||
|
excludeEnd: true,
|
||||||
|
relevance: 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
relevance: 10
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return asciidoc;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*! `asciidoc` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{const n=e.regex,a=[{
|
||||||
|
className:"strong",begin:/\*{2}([^\n]+?)\*{2}/},{className:"strong",
|
||||||
|
begin:n.concat(/\*\*/,/((\*(?!\*)|\\[^\n]|[^*\n\\])+\n)+/,/(\*(?!\*)|\\[^\n]|[^*\n\\])*/,/\*\*/),
|
||||||
|
relevance:0},{className:"strong",begin:/\B\*(\S|\S[^\n]*?\S)\*(?!\w)/},{
|
||||||
|
className:"strong",begin:/\*[^\s]([^\n]+\n)+([^\n]+)\*/}],s=[{
|
||||||
|
className:"emphasis",begin:/_{2}([^\n]+?)_{2}/},{className:"emphasis",
|
||||||
|
begin:n.concat(/__/,/((_(?!_)|\\[^\n]|[^_\n\\])+\n)+/,/(_(?!_)|\\[^\n]|[^_\n\\])*/,/__/),
|
||||||
|
relevance:0},{className:"emphasis",begin:/\b_(\S|\S[^\n]*?\S)_(?!\w)/},{
|
||||||
|
className:"emphasis",begin:/_[^\s]([^\n]+\n)+([^\n]+)_/},{className:"emphasis",
|
||||||
|
begin:"\\B'(?!['\\s])",end:"(\\n{2}|')",contains:[{begin:"\\\\'\\w",relevance:0
|
||||||
|
}],relevance:0}];return{name:"AsciiDoc",aliases:["adoc"],
|
||||||
|
contains:[e.COMMENT("^/{4,}\\n","\\n/{4,}$",{relevance:10
|
||||||
|
}),e.COMMENT("^//","$",{relevance:0}),{className:"title",begin:"^\\.\\w.*$"},{
|
||||||
|
begin:"^[=\\*]{4,}\\n",end:"\\n^[=\\*]{4,}$",relevance:10},{className:"section",
|
||||||
|
relevance:10,variants:[{begin:"^(={1,6})[ \t].+?([ \t]\\1)?$"},{
|
||||||
|
begin:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$"}]},{className:"meta",
|
||||||
|
begin:"^:.+?:",end:"\\s",excludeEnd:!0,relevance:10},{className:"meta",
|
||||||
|
begin:"^\\[.+?\\]$",relevance:0},{className:"quote",begin:"^_{4,}\\n",
|
||||||
|
end:"\\n_{4,}$",relevance:10},{className:"code",begin:"^[\\-\\.]{4,}\\n",
|
||||||
|
end:"\\n[\\-\\.]{4,}$",relevance:10},{begin:"^\\+{4,}\\n",end:"\\n\\+{4,}$",
|
||||||
|
contains:[{begin:"<",end:">",subLanguage:"xml",relevance:0}],relevance:10},{
|
||||||
|
className:"bullet",begin:"^(\\*+|-+|\\.+|[^\\n]+?::)\\s+"},{className:"symbol",
|
||||||
|
begin:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",relevance:10},{
|
||||||
|
begin:/\\[*_`]/},{begin:/\\\\\*{2}[^\n]*?\*{2}/},{begin:/\\\\_{2}[^\n]*_{2}/},{
|
||||||
|
begin:/\\\\`{2}[^\n]*`{2}/},{begin:/[:;}][*_`](?![*_`])/},...a,...s,{
|
||||||
|
className:"string",variants:[{begin:"``.+?''"},{begin:"`.+?'"}]},{
|
||||||
|
className:"code",begin:/`{2}/,end:/(\n{2}|`{2})/},{className:"code",
|
||||||
|
begin:"(`.+?`|\\+.+?\\+)",relevance:0},{className:"code",begin:"^[ \\t]",
|
||||||
|
end:"$",relevance:0},{begin:"^'{3,}[ \\t]*$",relevance:10},{
|
||||||
|
begin:"(link:)?(http|https|ftp|file|irc|image:?):\\S+?\\[[^[]*?\\]",
|
||||||
|
returnBegin:!0,contains:[{begin:"(link|image:?):",relevance:0},{
|
||||||
|
className:"link",begin:"\\w",end:"[^\\[]+",relevance:0},{className:"string",
|
||||||
|
begin:"\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0,relevance:0}],relevance:10}]
|
||||||
|
}}})();export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,239 @@
|
||||||
|
/*! `aspectj` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: AspectJ
|
||||||
|
Author: Hakan Ozler <ozler.hakan@gmail.com>
|
||||||
|
Website: https://www.eclipse.org/aspectj/
|
||||||
|
Description: Syntax Highlighting for the AspectJ Language which is a general-purpose aspect-oriented extension to the Java programming language.
|
||||||
|
Category: system
|
||||||
|
Audit: 2020
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function aspectj(hljs) {
|
||||||
|
const regex = hljs.regex;
|
||||||
|
const KEYWORDS = [
|
||||||
|
"false",
|
||||||
|
"synchronized",
|
||||||
|
"int",
|
||||||
|
"abstract",
|
||||||
|
"float",
|
||||||
|
"private",
|
||||||
|
"char",
|
||||||
|
"boolean",
|
||||||
|
"static",
|
||||||
|
"null",
|
||||||
|
"if",
|
||||||
|
"const",
|
||||||
|
"for",
|
||||||
|
"true",
|
||||||
|
"while",
|
||||||
|
"long",
|
||||||
|
"throw",
|
||||||
|
"strictfp",
|
||||||
|
"finally",
|
||||||
|
"protected",
|
||||||
|
"import",
|
||||||
|
"native",
|
||||||
|
"final",
|
||||||
|
"return",
|
||||||
|
"void",
|
||||||
|
"enum",
|
||||||
|
"else",
|
||||||
|
"extends",
|
||||||
|
"implements",
|
||||||
|
"break",
|
||||||
|
"transient",
|
||||||
|
"new",
|
||||||
|
"catch",
|
||||||
|
"instanceof",
|
||||||
|
"byte",
|
||||||
|
"super",
|
||||||
|
"volatile",
|
||||||
|
"case",
|
||||||
|
"assert",
|
||||||
|
"short",
|
||||||
|
"package",
|
||||||
|
"default",
|
||||||
|
"double",
|
||||||
|
"public",
|
||||||
|
"try",
|
||||||
|
"this",
|
||||||
|
"switch",
|
||||||
|
"continue",
|
||||||
|
"throws",
|
||||||
|
"privileged",
|
||||||
|
"aspectOf",
|
||||||
|
"adviceexecution",
|
||||||
|
"proceed",
|
||||||
|
"cflowbelow",
|
||||||
|
"cflow",
|
||||||
|
"initialization",
|
||||||
|
"preinitialization",
|
||||||
|
"staticinitialization",
|
||||||
|
"withincode",
|
||||||
|
"target",
|
||||||
|
"within",
|
||||||
|
"execution",
|
||||||
|
"getWithinTypeName",
|
||||||
|
"handler",
|
||||||
|
"thisJoinPoint",
|
||||||
|
"thisJoinPointStaticPart",
|
||||||
|
"thisEnclosingJoinPointStaticPart",
|
||||||
|
"declare",
|
||||||
|
"parents",
|
||||||
|
"warning",
|
||||||
|
"error",
|
||||||
|
"soft",
|
||||||
|
"precedence",
|
||||||
|
"thisAspectInstance"
|
||||||
|
];
|
||||||
|
const SHORTKEYS = [
|
||||||
|
"get",
|
||||||
|
"set",
|
||||||
|
"args",
|
||||||
|
"call"
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'AspectJ',
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
illegal: /<\/|#/,
|
||||||
|
contains: [
|
||||||
|
hljs.COMMENT(
|
||||||
|
/\/\*\*/,
|
||||||
|
/\*\//,
|
||||||
|
{
|
||||||
|
relevance: 0,
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
// eat up @'s in emails to prevent them to be recognized as doctags
|
||||||
|
begin: /\w+@/,
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'doctag',
|
||||||
|
begin: /@[A-Za-z]+/
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
),
|
||||||
|
hljs.C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
hljs.APOS_STRING_MODE,
|
||||||
|
hljs.QUOTE_STRING_MODE,
|
||||||
|
{
|
||||||
|
className: 'class',
|
||||||
|
beginKeywords: 'aspect',
|
||||||
|
end: /[{;=]/,
|
||||||
|
excludeEnd: true,
|
||||||
|
illegal: /[:;"\[\]]/,
|
||||||
|
contains: [
|
||||||
|
{ beginKeywords: 'extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton' },
|
||||||
|
hljs.UNDERSCORE_TITLE_MODE,
|
||||||
|
{
|
||||||
|
begin: /\([^\)]*/,
|
||||||
|
end: /[)]+/,
|
||||||
|
keywords: KEYWORDS.concat(SHORTKEYS),
|
||||||
|
excludeEnd: false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'class',
|
||||||
|
beginKeywords: 'class interface',
|
||||||
|
end: /[{;=]/,
|
||||||
|
excludeEnd: true,
|
||||||
|
relevance: 0,
|
||||||
|
keywords: 'class interface',
|
||||||
|
illegal: /[:"\[\]]/,
|
||||||
|
contains: [
|
||||||
|
{ beginKeywords: 'extends implements' },
|
||||||
|
hljs.UNDERSCORE_TITLE_MODE
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// AspectJ Constructs
|
||||||
|
beginKeywords: 'pointcut after before around throwing returning',
|
||||||
|
end: /[)]/,
|
||||||
|
excludeEnd: false,
|
||||||
|
illegal: /["\[\]]/,
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\s*\(/),
|
||||||
|
returnBegin: true,
|
||||||
|
contains: [ hljs.UNDERSCORE_TITLE_MODE ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
begin: /[:]/,
|
||||||
|
returnBegin: true,
|
||||||
|
end: /[{;]/,
|
||||||
|
relevance: 0,
|
||||||
|
excludeEnd: false,
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
illegal: /["\[\]]/,
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\s*\(/),
|
||||||
|
keywords: KEYWORDS.concat(SHORTKEYS),
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
hljs.QUOTE_STRING_MODE
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// this prevents 'new Name(...), or throw ...' from being recognized as a function definition
|
||||||
|
beginKeywords: 'new throw',
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// the function class is a bit different for AspectJ compared to the Java language
|
||||||
|
className: 'function',
|
||||||
|
begin: /\w+ +\w+(\.\w+)?\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,
|
||||||
|
returnBegin: true,
|
||||||
|
end: /[{;=]/,
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
excludeEnd: true,
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\s*\(/),
|
||||||
|
returnBegin: true,
|
||||||
|
relevance: 0,
|
||||||
|
contains: [ hljs.UNDERSCORE_TITLE_MODE ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'params',
|
||||||
|
begin: /\(/,
|
||||||
|
end: /\)/,
|
||||||
|
relevance: 0,
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
contains: [
|
||||||
|
hljs.APOS_STRING_MODE,
|
||||||
|
hljs.QUOTE_STRING_MODE,
|
||||||
|
hljs.C_NUMBER_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE
|
||||||
|
]
|
||||||
|
},
|
||||||
|
hljs.C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE
|
||||||
|
]
|
||||||
|
},
|
||||||
|
hljs.C_NUMBER_MODE,
|
||||||
|
{
|
||||||
|
// annotation is also used in this language
|
||||||
|
className: 'meta',
|
||||||
|
begin: /@[A-Za-z]+/
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return aspectj;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*! `aspectj` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{
|
||||||
|
const n=e.regex,t=["false","synchronized","int","abstract","float","private","char","boolean","static","null","if","const","for","true","while","long","throw","strictfp","finally","protected","import","native","final","return","void","enum","else","extends","implements","break","transient","new","catch","instanceof","byte","super","volatile","case","assert","short","package","default","double","public","try","this","switch","continue","throws","privileged","aspectOf","adviceexecution","proceed","cflowbelow","cflow","initialization","preinitialization","staticinitialization","withincode","target","within","execution","getWithinTypeName","handler","thisJoinPoint","thisJoinPointStaticPart","thisEnclosingJoinPointStaticPart","declare","parents","warning","error","soft","precedence","thisAspectInstance"],i=["get","set","args","call"]
|
||||||
|
;return{name:"AspectJ",keywords:t,illegal:/<\/|#/,
|
||||||
|
contains:[e.COMMENT(/\/\*\*/,/\*\//,{relevance:0,contains:[{begin:/\w+@/,
|
||||||
|
relevance:0},{className:"doctag",begin:/@[A-Za-z]+/}]
|
||||||
|
}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{
|
||||||
|
className:"class",beginKeywords:"aspect",end:/[{;=]/,excludeEnd:!0,
|
||||||
|
illegal:/[:;"\[\]]/,contains:[{
|
||||||
|
beginKeywords:"extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton"
|
||||||
|
},e.UNDERSCORE_TITLE_MODE,{begin:/\([^\)]*/,end:/[)]+/,keywords:t.concat(i),
|
||||||
|
excludeEnd:!1}]},{className:"class",beginKeywords:"class interface",end:/[{;=]/,
|
||||||
|
excludeEnd:!0,relevance:0,keywords:"class interface",illegal:/[:"\[\]]/,
|
||||||
|
contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{
|
||||||
|
beginKeywords:"pointcut after before around throwing returning",end:/[)]/,
|
||||||
|
excludeEnd:!1,illegal:/["\[\]]/,contains:[{
|
||||||
|
begin:n.concat(e.UNDERSCORE_IDENT_RE,/\s*\(/),returnBegin:!0,
|
||||||
|
contains:[e.UNDERSCORE_TITLE_MODE]}]},{begin:/[:]/,returnBegin:!0,end:/[{;]/,
|
||||||
|
relevance:0,excludeEnd:!1,keywords:t,illegal:/["\[\]]/,contains:[{
|
||||||
|
begin:n.concat(e.UNDERSCORE_IDENT_RE,/\s*\(/),keywords:t.concat(i),relevance:0
|
||||||
|
},e.QUOTE_STRING_MODE]},{beginKeywords:"new throw",relevance:0},{
|
||||||
|
className:"function",
|
||||||
|
begin:/\w+ +\w+(\.\w+)?\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,returnBegin:!0,
|
||||||
|
end:/[{;=]/,keywords:t,excludeEnd:!0,contains:[{
|
||||||
|
begin:n.concat(e.UNDERSCORE_IDENT_RE,/\s*\(/),returnBegin:!0,relevance:0,
|
||||||
|
contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,
|
||||||
|
relevance:0,keywords:t,
|
||||||
|
contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]
|
||||||
|
},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_NUMBER_MODE,{
|
||||||
|
className:"meta",begin:/@[A-Za-z]+/}]}}})();export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,83 @@
|
||||||
|
/*! `autohotkey` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: AutoHotkey
|
||||||
|
Author: Seongwon Lee <dlimpid@gmail.com>
|
||||||
|
Description: AutoHotkey language definition
|
||||||
|
Category: scripting
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function autohotkey(hljs) {
|
||||||
|
const BACKTICK_ESCAPE = { begin: '`[\\s\\S]' };
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'AutoHotkey',
|
||||||
|
case_insensitive: true,
|
||||||
|
aliases: [ 'ahk' ],
|
||||||
|
keywords: {
|
||||||
|
keyword: 'Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group',
|
||||||
|
literal: 'true false NOT AND OR',
|
||||||
|
built_in: 'ComSpec Clipboard ClipboardAll ErrorLevel'
|
||||||
|
},
|
||||||
|
contains: [
|
||||||
|
BACKTICK_ESCAPE,
|
||||||
|
hljs.inherit(hljs.QUOTE_STRING_MODE, { contains: [ BACKTICK_ESCAPE ] }),
|
||||||
|
hljs.COMMENT(';', '$', { relevance: 0 }),
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
{
|
||||||
|
className: 'number',
|
||||||
|
begin: hljs.NUMBER_RE,
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// subst would be the most accurate however fails the point of
|
||||||
|
// highlighting. variable is comparably the most accurate that actually
|
||||||
|
// has some effect
|
||||||
|
className: 'variable',
|
||||||
|
begin: '%[a-zA-Z0-9#_$@]+%'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'built_in',
|
||||||
|
begin: '^\\s*\\w+\\s*(,|%)'
|
||||||
|
// I don't really know if this is totally relevant
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// symbol would be most accurate however is highlighted just like
|
||||||
|
// built_in and that makes up a lot of AutoHotkey code meaning that it
|
||||||
|
// would fail to highlight anything
|
||||||
|
className: 'title',
|
||||||
|
variants: [
|
||||||
|
{ begin: '^[^\\n";]+::(?!=)' },
|
||||||
|
{
|
||||||
|
begin: '^[^\\n";]+:(?!=)',
|
||||||
|
// zero relevance as it catches a lot of things
|
||||||
|
// followed by a single ':' in many languages
|
||||||
|
relevance: 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'meta',
|
||||||
|
begin: '^\\s*#\\w+',
|
||||||
|
end: '$',
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'built_in',
|
||||||
|
begin: 'A_[a-zA-Z0-9]+'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// consecutive commas, not for highlighting but just for relevance
|
||||||
|
begin: ',\\s*,' }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return autohotkey;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
/*! `autohotkey` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{const a={begin:"`[\\s\\S]"}
|
||||||
|
;return{name:"AutoHotkey",case_insensitive:!0,aliases:["ahk"],keywords:{
|
||||||
|
keyword:"Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group",
|
||||||
|
literal:"true false NOT AND OR",
|
||||||
|
built_in:"ComSpec Clipboard ClipboardAll ErrorLevel"},
|
||||||
|
contains:[a,e.inherit(e.QUOTE_STRING_MODE,{contains:[a]}),e.COMMENT(";","$",{
|
||||||
|
relevance:0}),e.C_BLOCK_COMMENT_MODE,{className:"number",begin:e.NUMBER_RE,
|
||||||
|
relevance:0},{className:"variable",begin:"%[a-zA-Z0-9#_$@]+%"},{
|
||||||
|
className:"built_in",begin:"^\\s*\\w+\\s*(,|%)"},{className:"title",variants:[{
|
||||||
|
begin:'^[^\\n";]+::(?!=)'},{begin:'^[^\\n";]+:(?!=)',relevance:0}]},{
|
||||||
|
className:"meta",begin:"^\\s*#\\w+",end:"$",relevance:0},{className:"built_in",
|
||||||
|
begin:"A_[a-zA-Z0-9]+"},{begin:",\\s*,"}]}}})();export default hljsGrammar;
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,86 @@
|
||||||
|
/*! `avrasm` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: AVR Assembly
|
||||||
|
Author: Vladimir Ermakov <vooon341@gmail.com>
|
||||||
|
Category: assembler
|
||||||
|
Website: https://www.microchip.com/webdoc/avrassembler/avrassembler.wb_instruction_list.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function avrasm(hljs) {
|
||||||
|
return {
|
||||||
|
name: 'AVR Assembly',
|
||||||
|
case_insensitive: true,
|
||||||
|
keywords: {
|
||||||
|
$pattern: '\\.?' + hljs.IDENT_RE,
|
||||||
|
keyword:
|
||||||
|
/* mnemonic */
|
||||||
|
'adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs '
|
||||||
|
+ 'brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr '
|
||||||
|
+ 'clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor '
|
||||||
|
+ 'fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul '
|
||||||
|
+ 'muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs '
|
||||||
|
+ 'sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub '
|
||||||
|
+ 'subi swap tst wdr',
|
||||||
|
built_in:
|
||||||
|
/* general purpose registers */
|
||||||
|
'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 '
|
||||||
|
+ 'r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl '
|
||||||
|
/* IO Registers (ATMega128) */
|
||||||
|
+ 'ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h '
|
||||||
|
+ 'tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c '
|
||||||
|
+ 'ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg '
|
||||||
|
+ 'ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk '
|
||||||
|
+ 'tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al '
|
||||||
|
+ 'ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr '
|
||||||
|
+ 'porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 '
|
||||||
|
+ 'ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf',
|
||||||
|
meta:
|
||||||
|
'.byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list '
|
||||||
|
+ '.listmac .macro .nolist .org .set'
|
||||||
|
},
|
||||||
|
contains: [
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
hljs.COMMENT(
|
||||||
|
';',
|
||||||
|
'$',
|
||||||
|
{ relevance: 0 }
|
||||||
|
),
|
||||||
|
hljs.C_NUMBER_MODE, // 0x..., decimal, float
|
||||||
|
hljs.BINARY_NUMBER_MODE, // 0b...
|
||||||
|
{
|
||||||
|
className: 'number',
|
||||||
|
begin: '\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)' // $..., 0o...
|
||||||
|
},
|
||||||
|
hljs.QUOTE_STRING_MODE,
|
||||||
|
{
|
||||||
|
className: 'string',
|
||||||
|
begin: '\'',
|
||||||
|
end: '[^\\\\]\'',
|
||||||
|
illegal: '[^\\\\][^\']'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'symbol',
|
||||||
|
begin: '^[A-Za-z0-9_.$]+:'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'meta',
|
||||||
|
begin: '#',
|
||||||
|
end: '$'
|
||||||
|
},
|
||||||
|
{ // substitution within a macro
|
||||||
|
className: 'subst',
|
||||||
|
begin: '@[0-9]+'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return avrasm;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
/*! `avrasm` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return r=>({name:"AVR Assembly",
|
||||||
|
case_insensitive:!0,keywords:{$pattern:"\\.?"+r.IDENT_RE,
|
||||||
|
keyword:"adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub subi swap tst wdr",
|
||||||
|
built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf",
|
||||||
|
meta:".byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list .listmac .macro .nolist .org .set"
|
||||||
|
},contains:[r.C_BLOCK_COMMENT_MODE,r.COMMENT(";","$",{relevance:0
|
||||||
|
}),r.C_NUMBER_MODE,r.BINARY_NUMBER_MODE,{className:"number",
|
||||||
|
begin:"\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)"},r.QUOTE_STRING_MODE,{className:"string",
|
||||||
|
begin:"'",end:"[^\\\\]'",illegal:"[^\\\\][^']"},{className:"symbol",
|
||||||
|
begin:"^[A-Za-z0-9_.$]+:"},{className:"meta",begin:"#",end:"$"},{
|
||||||
|
className:"subst",begin:"@[0-9]+"}]})})();export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
/*! `awk` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: Awk
|
||||||
|
Author: Matthew Daly <matthewbdaly@gmail.com>
|
||||||
|
Website: https://www.gnu.org/software/gawk/manual/gawk.html
|
||||||
|
Description: language definition for Awk scripts
|
||||||
|
Category: scripting
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function awk(hljs) {
|
||||||
|
const VARIABLE = {
|
||||||
|
className: 'variable',
|
||||||
|
variants: [
|
||||||
|
{ begin: /\$[\w\d#@][\w\d_]*/ },
|
||||||
|
{ begin: /\$\{(.*?)\}/ }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
const KEYWORDS = 'BEGIN END if else while do for in break continue delete next nextfile function func exit|10';
|
||||||
|
const STRING = {
|
||||||
|
className: 'string',
|
||||||
|
contains: [ hljs.BACKSLASH_ESCAPE ],
|
||||||
|
variants: [
|
||||||
|
{
|
||||||
|
begin: /(u|b)?r?'''/,
|
||||||
|
end: /'''/,
|
||||||
|
relevance: 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
begin: /(u|b)?r?"""/,
|
||||||
|
end: /"""/,
|
||||||
|
relevance: 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
begin: /(u|r|ur)'/,
|
||||||
|
end: /'/,
|
||||||
|
relevance: 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
begin: /(u|r|ur)"/,
|
||||||
|
end: /"/,
|
||||||
|
relevance: 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
begin: /(b|br)'/,
|
||||||
|
end: /'/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
begin: /(b|br)"/,
|
||||||
|
end: /"/
|
||||||
|
},
|
||||||
|
hljs.APOS_STRING_MODE,
|
||||||
|
hljs.QUOTE_STRING_MODE
|
||||||
|
]
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
name: 'Awk',
|
||||||
|
keywords: { keyword: KEYWORDS },
|
||||||
|
contains: [
|
||||||
|
VARIABLE,
|
||||||
|
STRING,
|
||||||
|
hljs.REGEXP_MODE,
|
||||||
|
hljs.HASH_COMMENT_MODE,
|
||||||
|
hljs.NUMBER_MODE
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return awk;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
/*! `awk` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>({name:"Awk",keywords:{
|
||||||
|
keyword:"BEGIN END if else while do for in break continue delete next nextfile function func exit|10"
|
||||||
|
},contains:[{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{
|
||||||
|
begin:/\$\{(.*?)\}/}]},{className:"string",contains:[e.BACKSLASH_ESCAPE],
|
||||||
|
variants:[{begin:/(u|b)?r?'''/,end:/'''/,relevance:10},{begin:/(u|b)?r?"""/,
|
||||||
|
end:/"""/,relevance:10},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{
|
||||||
|
begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{
|
||||||
|
begin:/(b|br)"/,end:/"/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]
|
||||||
|
},e.REGEXP_MODE,e.HASH_COMMENT_MODE,e.NUMBER_MODE]})})()
|
||||||
|
;export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,196 @@
|
||||||
|
/*! `axapta` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: Microsoft X++
|
||||||
|
Description: X++ is a language used in Microsoft Dynamics 365, Dynamics AX, and Axapta.
|
||||||
|
Author: Dmitri Roudakov <dmitri@roudakov.ru>
|
||||||
|
Website: https://dynamics.microsoft.com/en-us/ax-overview/
|
||||||
|
Category: enterprise
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function axapta(hljs) {
|
||||||
|
const IDENT_RE = hljs.UNDERSCORE_IDENT_RE;
|
||||||
|
const BUILT_IN_KEYWORDS = [
|
||||||
|
'anytype',
|
||||||
|
'boolean',
|
||||||
|
'byte',
|
||||||
|
'char',
|
||||||
|
'container',
|
||||||
|
'date',
|
||||||
|
'double',
|
||||||
|
'enum',
|
||||||
|
'guid',
|
||||||
|
'int',
|
||||||
|
'int64',
|
||||||
|
'long',
|
||||||
|
'real',
|
||||||
|
'short',
|
||||||
|
'str',
|
||||||
|
'utcdatetime',
|
||||||
|
'var'
|
||||||
|
];
|
||||||
|
|
||||||
|
const LITERAL_KEYWORDS = [
|
||||||
|
'default',
|
||||||
|
'false',
|
||||||
|
'null',
|
||||||
|
'true'
|
||||||
|
];
|
||||||
|
|
||||||
|
const NORMAL_KEYWORDS = [
|
||||||
|
'abstract',
|
||||||
|
'as',
|
||||||
|
'asc',
|
||||||
|
'avg',
|
||||||
|
'break',
|
||||||
|
'breakpoint',
|
||||||
|
'by',
|
||||||
|
'byref',
|
||||||
|
'case',
|
||||||
|
'catch',
|
||||||
|
'changecompany',
|
||||||
|
'class',
|
||||||
|
'client',
|
||||||
|
'client',
|
||||||
|
'common',
|
||||||
|
'const',
|
||||||
|
'continue',
|
||||||
|
'count',
|
||||||
|
'crosscompany',
|
||||||
|
'delegate',
|
||||||
|
'delete_from',
|
||||||
|
'desc',
|
||||||
|
'display',
|
||||||
|
'div',
|
||||||
|
'do',
|
||||||
|
'edit',
|
||||||
|
'else',
|
||||||
|
'eventhandler',
|
||||||
|
'exists',
|
||||||
|
'extends',
|
||||||
|
'final',
|
||||||
|
'finally',
|
||||||
|
'firstfast',
|
||||||
|
'firstonly',
|
||||||
|
'firstonly1',
|
||||||
|
'firstonly10',
|
||||||
|
'firstonly100',
|
||||||
|
'firstonly1000',
|
||||||
|
'flush',
|
||||||
|
'for',
|
||||||
|
'forceliterals',
|
||||||
|
'forcenestedloop',
|
||||||
|
'forceplaceholders',
|
||||||
|
'forceselectorder',
|
||||||
|
'forupdate',
|
||||||
|
'from',
|
||||||
|
'generateonly',
|
||||||
|
'group',
|
||||||
|
'hint',
|
||||||
|
'if',
|
||||||
|
'implements',
|
||||||
|
'in',
|
||||||
|
'index',
|
||||||
|
'insert_recordset',
|
||||||
|
'interface',
|
||||||
|
'internal',
|
||||||
|
'is',
|
||||||
|
'join',
|
||||||
|
'like',
|
||||||
|
'maxof',
|
||||||
|
'minof',
|
||||||
|
'mod',
|
||||||
|
'namespace',
|
||||||
|
'new',
|
||||||
|
'next',
|
||||||
|
'nofetch',
|
||||||
|
'notexists',
|
||||||
|
'optimisticlock',
|
||||||
|
'order',
|
||||||
|
'outer',
|
||||||
|
'pessimisticlock',
|
||||||
|
'print',
|
||||||
|
'private',
|
||||||
|
'protected',
|
||||||
|
'public',
|
||||||
|
'readonly',
|
||||||
|
'repeatableread',
|
||||||
|
'retry',
|
||||||
|
'return',
|
||||||
|
'reverse',
|
||||||
|
'select',
|
||||||
|
'server',
|
||||||
|
'setting',
|
||||||
|
'static',
|
||||||
|
'sum',
|
||||||
|
'super',
|
||||||
|
'switch',
|
||||||
|
'this',
|
||||||
|
'throw',
|
||||||
|
'try',
|
||||||
|
'ttsabort',
|
||||||
|
'ttsbegin',
|
||||||
|
'ttscommit',
|
||||||
|
'unchecked',
|
||||||
|
'update_recordset',
|
||||||
|
'using',
|
||||||
|
'validtimestate',
|
||||||
|
'void',
|
||||||
|
'where',
|
||||||
|
'while'
|
||||||
|
];
|
||||||
|
|
||||||
|
const KEYWORDS = {
|
||||||
|
keyword: NORMAL_KEYWORDS,
|
||||||
|
built_in: BUILT_IN_KEYWORDS,
|
||||||
|
literal: LITERAL_KEYWORDS
|
||||||
|
};
|
||||||
|
|
||||||
|
const CLASS_DEFINITION = {
|
||||||
|
variants: [
|
||||||
|
{ match: [
|
||||||
|
/(class|interface)\s+/,
|
||||||
|
IDENT_RE,
|
||||||
|
/\s+(extends|implements)\s+/,
|
||||||
|
IDENT_RE
|
||||||
|
] },
|
||||||
|
{ match: [
|
||||||
|
/class\s+/,
|
||||||
|
IDENT_RE
|
||||||
|
] }
|
||||||
|
],
|
||||||
|
scope: {
|
||||||
|
2: "title.class",
|
||||||
|
4: "title.class.inherited"
|
||||||
|
},
|
||||||
|
keywords: KEYWORDS
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'X++',
|
||||||
|
aliases: [ 'x++' ],
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
contains: [
|
||||||
|
hljs.C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
hljs.APOS_STRING_MODE,
|
||||||
|
hljs.QUOTE_STRING_MODE,
|
||||||
|
hljs.C_NUMBER_MODE,
|
||||||
|
{
|
||||||
|
className: 'meta',
|
||||||
|
begin: '#',
|
||||||
|
end: '$'
|
||||||
|
},
|
||||||
|
CLASS_DEFINITION
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return axapta;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
/*! `axapta` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{const t=e.UNDERSCORE_IDENT_RE,s={
|
||||||
|
keyword:["abstract","as","asc","avg","break","breakpoint","by","byref","case","catch","changecompany","class","client","client","common","const","continue","count","crosscompany","delegate","delete_from","desc","display","div","do","edit","else","eventhandler","exists","extends","final","finally","firstfast","firstonly","firstonly1","firstonly10","firstonly100","firstonly1000","flush","for","forceliterals","forcenestedloop","forceplaceholders","forceselectorder","forupdate","from","generateonly","group","hint","if","implements","in","index","insert_recordset","interface","internal","is","join","like","maxof","minof","mod","namespace","new","next","nofetch","notexists","optimisticlock","order","outer","pessimisticlock","print","private","protected","public","readonly","repeatableread","retry","return","reverse","select","server","setting","static","sum","super","switch","this","throw","try","ttsabort","ttsbegin","ttscommit","unchecked","update_recordset","using","validtimestate","void","where","while"],
|
||||||
|
built_in:["anytype","boolean","byte","char","container","date","double","enum","guid","int","int64","long","real","short","str","utcdatetime","var"],
|
||||||
|
literal:["default","false","null","true"]},r={variants:[{
|
||||||
|
match:[/(class|interface)\s+/,t,/\s+(extends|implements)\s+/,t]},{
|
||||||
|
match:[/class\s+/,t]}],scope:{2:"title.class",4:"title.class.inherited"},
|
||||||
|
keywords:s};return{name:"X++",aliases:["x++"],keywords:s,
|
||||||
|
contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{
|
||||||
|
className:"meta",begin:"#",end:"$"},r]}}})();export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,415 @@
|
||||||
|
/*! `bash` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: Bash
|
||||||
|
Author: vah <vahtenberg@gmail.com>
|
||||||
|
Contributrors: Benjamin Pannell <contact@sierrasoftworks.com>
|
||||||
|
Website: https://www.gnu.org/software/bash/
|
||||||
|
Category: common, scripting
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function bash(hljs) {
|
||||||
|
const regex = hljs.regex;
|
||||||
|
const VAR = {};
|
||||||
|
const BRACED_VAR = {
|
||||||
|
begin: /\$\{/,
|
||||||
|
end: /\}/,
|
||||||
|
contains: [
|
||||||
|
"self",
|
||||||
|
{
|
||||||
|
begin: /:-/,
|
||||||
|
contains: [ VAR ]
|
||||||
|
} // default values
|
||||||
|
]
|
||||||
|
};
|
||||||
|
Object.assign(VAR, {
|
||||||
|
className: 'variable',
|
||||||
|
variants: [
|
||||||
|
{ begin: regex.concat(/\$[\w\d#@][\w\d_]*/,
|
||||||
|
// negative look-ahead tries to avoid matching patterns that are not
|
||||||
|
// Perl at all like $ident$, @ident@, etc.
|
||||||
|
`(?![\\w\\d])(?![$])`) },
|
||||||
|
BRACED_VAR
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
const SUBST = {
|
||||||
|
className: 'subst',
|
||||||
|
begin: /\$\(/,
|
||||||
|
end: /\)/,
|
||||||
|
contains: [ hljs.BACKSLASH_ESCAPE ]
|
||||||
|
};
|
||||||
|
const COMMENT = hljs.inherit(
|
||||||
|
hljs.COMMENT(),
|
||||||
|
{
|
||||||
|
match: [
|
||||||
|
/(^|\s)/,
|
||||||
|
/#.*$/
|
||||||
|
],
|
||||||
|
scope: {
|
||||||
|
2: 'comment'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
const HERE_DOC = {
|
||||||
|
begin: /<<-?\s*(?=\w+)/,
|
||||||
|
starts: { contains: [
|
||||||
|
hljs.END_SAME_AS_BEGIN({
|
||||||
|
begin: /(\w+)/,
|
||||||
|
end: /(\w+)/,
|
||||||
|
className: 'string'
|
||||||
|
})
|
||||||
|
] }
|
||||||
|
};
|
||||||
|
const QUOTE_STRING = {
|
||||||
|
className: 'string',
|
||||||
|
begin: /"/,
|
||||||
|
end: /"/,
|
||||||
|
contains: [
|
||||||
|
hljs.BACKSLASH_ESCAPE,
|
||||||
|
VAR,
|
||||||
|
SUBST
|
||||||
|
]
|
||||||
|
};
|
||||||
|
SUBST.contains.push(QUOTE_STRING);
|
||||||
|
const ESCAPED_QUOTE = {
|
||||||
|
match: /\\"/
|
||||||
|
};
|
||||||
|
const APOS_STRING = {
|
||||||
|
className: 'string',
|
||||||
|
begin: /'/,
|
||||||
|
end: /'/
|
||||||
|
};
|
||||||
|
const ESCAPED_APOS = {
|
||||||
|
match: /\\'/
|
||||||
|
};
|
||||||
|
const ARITHMETIC = {
|
||||||
|
begin: /\$?\(\(/,
|
||||||
|
end: /\)\)/,
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
begin: /\d+#[0-9a-f]+/,
|
||||||
|
className: "number"
|
||||||
|
},
|
||||||
|
hljs.NUMBER_MODE,
|
||||||
|
VAR
|
||||||
|
]
|
||||||
|
};
|
||||||
|
const SH_LIKE_SHELLS = [
|
||||||
|
"fish",
|
||||||
|
"bash",
|
||||||
|
"zsh",
|
||||||
|
"sh",
|
||||||
|
"csh",
|
||||||
|
"ksh",
|
||||||
|
"tcsh",
|
||||||
|
"dash",
|
||||||
|
"scsh",
|
||||||
|
];
|
||||||
|
const KNOWN_SHEBANG = hljs.SHEBANG({
|
||||||
|
binary: `(${SH_LIKE_SHELLS.join("|")})`,
|
||||||
|
relevance: 10
|
||||||
|
});
|
||||||
|
const FUNCTION = {
|
||||||
|
className: 'function',
|
||||||
|
begin: /\w[\w\d_]*\s*\(\s*\)\s*\{/,
|
||||||
|
returnBegin: true,
|
||||||
|
contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /\w[\w\d_]*/ }) ],
|
||||||
|
relevance: 0
|
||||||
|
};
|
||||||
|
|
||||||
|
const KEYWORDS = [
|
||||||
|
"if",
|
||||||
|
"then",
|
||||||
|
"else",
|
||||||
|
"elif",
|
||||||
|
"fi",
|
||||||
|
"for",
|
||||||
|
"while",
|
||||||
|
"until",
|
||||||
|
"in",
|
||||||
|
"do",
|
||||||
|
"done",
|
||||||
|
"case",
|
||||||
|
"esac",
|
||||||
|
"function",
|
||||||
|
"select"
|
||||||
|
];
|
||||||
|
|
||||||
|
const LITERALS = [
|
||||||
|
"true",
|
||||||
|
"false"
|
||||||
|
];
|
||||||
|
|
||||||
|
// to consume paths to prevent keyword matches inside them
|
||||||
|
const PATH_MODE = { match: /(\/[a-z._-]+)+/ };
|
||||||
|
|
||||||
|
// http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html
|
||||||
|
const SHELL_BUILT_INS = [
|
||||||
|
"break",
|
||||||
|
"cd",
|
||||||
|
"continue",
|
||||||
|
"eval",
|
||||||
|
"exec",
|
||||||
|
"exit",
|
||||||
|
"export",
|
||||||
|
"getopts",
|
||||||
|
"hash",
|
||||||
|
"pwd",
|
||||||
|
"readonly",
|
||||||
|
"return",
|
||||||
|
"shift",
|
||||||
|
"test",
|
||||||
|
"times",
|
||||||
|
"trap",
|
||||||
|
"umask",
|
||||||
|
"unset"
|
||||||
|
];
|
||||||
|
|
||||||
|
const BASH_BUILT_INS = [
|
||||||
|
"alias",
|
||||||
|
"bind",
|
||||||
|
"builtin",
|
||||||
|
"caller",
|
||||||
|
"command",
|
||||||
|
"declare",
|
||||||
|
"echo",
|
||||||
|
"enable",
|
||||||
|
"help",
|
||||||
|
"let",
|
||||||
|
"local",
|
||||||
|
"logout",
|
||||||
|
"mapfile",
|
||||||
|
"printf",
|
||||||
|
"read",
|
||||||
|
"readarray",
|
||||||
|
"source",
|
||||||
|
"sudo",
|
||||||
|
"type",
|
||||||
|
"typeset",
|
||||||
|
"ulimit",
|
||||||
|
"unalias"
|
||||||
|
];
|
||||||
|
|
||||||
|
const ZSH_BUILT_INS = [
|
||||||
|
"autoload",
|
||||||
|
"bg",
|
||||||
|
"bindkey",
|
||||||
|
"bye",
|
||||||
|
"cap",
|
||||||
|
"chdir",
|
||||||
|
"clone",
|
||||||
|
"comparguments",
|
||||||
|
"compcall",
|
||||||
|
"compctl",
|
||||||
|
"compdescribe",
|
||||||
|
"compfiles",
|
||||||
|
"compgroups",
|
||||||
|
"compquote",
|
||||||
|
"comptags",
|
||||||
|
"comptry",
|
||||||
|
"compvalues",
|
||||||
|
"dirs",
|
||||||
|
"disable",
|
||||||
|
"disown",
|
||||||
|
"echotc",
|
||||||
|
"echoti",
|
||||||
|
"emulate",
|
||||||
|
"fc",
|
||||||
|
"fg",
|
||||||
|
"float",
|
||||||
|
"functions",
|
||||||
|
"getcap",
|
||||||
|
"getln",
|
||||||
|
"history",
|
||||||
|
"integer",
|
||||||
|
"jobs",
|
||||||
|
"kill",
|
||||||
|
"limit",
|
||||||
|
"log",
|
||||||
|
"noglob",
|
||||||
|
"popd",
|
||||||
|
"print",
|
||||||
|
"pushd",
|
||||||
|
"pushln",
|
||||||
|
"rehash",
|
||||||
|
"sched",
|
||||||
|
"setcap",
|
||||||
|
"setopt",
|
||||||
|
"stat",
|
||||||
|
"suspend",
|
||||||
|
"ttyctl",
|
||||||
|
"unfunction",
|
||||||
|
"unhash",
|
||||||
|
"unlimit",
|
||||||
|
"unsetopt",
|
||||||
|
"vared",
|
||||||
|
"wait",
|
||||||
|
"whence",
|
||||||
|
"where",
|
||||||
|
"which",
|
||||||
|
"zcompile",
|
||||||
|
"zformat",
|
||||||
|
"zftp",
|
||||||
|
"zle",
|
||||||
|
"zmodload",
|
||||||
|
"zparseopts",
|
||||||
|
"zprof",
|
||||||
|
"zpty",
|
||||||
|
"zregexparse",
|
||||||
|
"zsocket",
|
||||||
|
"zstyle",
|
||||||
|
"ztcp"
|
||||||
|
];
|
||||||
|
|
||||||
|
const GNU_CORE_UTILS = [
|
||||||
|
"chcon",
|
||||||
|
"chgrp",
|
||||||
|
"chown",
|
||||||
|
"chmod",
|
||||||
|
"cp",
|
||||||
|
"dd",
|
||||||
|
"df",
|
||||||
|
"dir",
|
||||||
|
"dircolors",
|
||||||
|
"ln",
|
||||||
|
"ls",
|
||||||
|
"mkdir",
|
||||||
|
"mkfifo",
|
||||||
|
"mknod",
|
||||||
|
"mktemp",
|
||||||
|
"mv",
|
||||||
|
"realpath",
|
||||||
|
"rm",
|
||||||
|
"rmdir",
|
||||||
|
"shred",
|
||||||
|
"sync",
|
||||||
|
"touch",
|
||||||
|
"truncate",
|
||||||
|
"vdir",
|
||||||
|
"b2sum",
|
||||||
|
"base32",
|
||||||
|
"base64",
|
||||||
|
"cat",
|
||||||
|
"cksum",
|
||||||
|
"comm",
|
||||||
|
"csplit",
|
||||||
|
"cut",
|
||||||
|
"expand",
|
||||||
|
"fmt",
|
||||||
|
"fold",
|
||||||
|
"head",
|
||||||
|
"join",
|
||||||
|
"md5sum",
|
||||||
|
"nl",
|
||||||
|
"numfmt",
|
||||||
|
"od",
|
||||||
|
"paste",
|
||||||
|
"ptx",
|
||||||
|
"pr",
|
||||||
|
"sha1sum",
|
||||||
|
"sha224sum",
|
||||||
|
"sha256sum",
|
||||||
|
"sha384sum",
|
||||||
|
"sha512sum",
|
||||||
|
"shuf",
|
||||||
|
"sort",
|
||||||
|
"split",
|
||||||
|
"sum",
|
||||||
|
"tac",
|
||||||
|
"tail",
|
||||||
|
"tr",
|
||||||
|
"tsort",
|
||||||
|
"unexpand",
|
||||||
|
"uniq",
|
||||||
|
"wc",
|
||||||
|
"arch",
|
||||||
|
"basename",
|
||||||
|
"chroot",
|
||||||
|
"date",
|
||||||
|
"dirname",
|
||||||
|
"du",
|
||||||
|
"echo",
|
||||||
|
"env",
|
||||||
|
"expr",
|
||||||
|
"factor",
|
||||||
|
// "false", // keyword literal already
|
||||||
|
"groups",
|
||||||
|
"hostid",
|
||||||
|
"id",
|
||||||
|
"link",
|
||||||
|
"logname",
|
||||||
|
"nice",
|
||||||
|
"nohup",
|
||||||
|
"nproc",
|
||||||
|
"pathchk",
|
||||||
|
"pinky",
|
||||||
|
"printenv",
|
||||||
|
"printf",
|
||||||
|
"pwd",
|
||||||
|
"readlink",
|
||||||
|
"runcon",
|
||||||
|
"seq",
|
||||||
|
"sleep",
|
||||||
|
"stat",
|
||||||
|
"stdbuf",
|
||||||
|
"stty",
|
||||||
|
"tee",
|
||||||
|
"test",
|
||||||
|
"timeout",
|
||||||
|
// "true", // keyword literal already
|
||||||
|
"tty",
|
||||||
|
"uname",
|
||||||
|
"unlink",
|
||||||
|
"uptime",
|
||||||
|
"users",
|
||||||
|
"who",
|
||||||
|
"whoami",
|
||||||
|
"yes"
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'Bash',
|
||||||
|
aliases: [
|
||||||
|
'sh',
|
||||||
|
'zsh'
|
||||||
|
],
|
||||||
|
keywords: {
|
||||||
|
$pattern: /\b[a-z][a-z0-9._-]+\b/,
|
||||||
|
keyword: KEYWORDS,
|
||||||
|
literal: LITERALS,
|
||||||
|
built_in: [
|
||||||
|
...SHELL_BUILT_INS,
|
||||||
|
...BASH_BUILT_INS,
|
||||||
|
// Shell modifiers
|
||||||
|
"set",
|
||||||
|
"shopt",
|
||||||
|
...ZSH_BUILT_INS,
|
||||||
|
...GNU_CORE_UTILS
|
||||||
|
]
|
||||||
|
},
|
||||||
|
contains: [
|
||||||
|
KNOWN_SHEBANG, // to catch known shells and boost relevancy
|
||||||
|
hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang
|
||||||
|
FUNCTION,
|
||||||
|
ARITHMETIC,
|
||||||
|
COMMENT,
|
||||||
|
HERE_DOC,
|
||||||
|
PATH_MODE,
|
||||||
|
QUOTE_STRING,
|
||||||
|
ESCAPED_QUOTE,
|
||||||
|
APOS_STRING,
|
||||||
|
ESCAPED_APOS,
|
||||||
|
VAR
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return bash;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*! `bash` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{const s=e.regex,t={},a={
|
||||||
|
begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]}
|
||||||
|
;Object.assign(t,{className:"variable",variants:[{
|
||||||
|
begin:s.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const n={
|
||||||
|
className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]
|
||||||
|
},i=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),c={
|
||||||
|
begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,
|
||||||
|
end:/(\w+)/,className:"string"})]}},o={className:"string",begin:/"/,end:/"/,
|
||||||
|
contains:[e.BACKSLASH_ESCAPE,t,n]};n.contains.push(o);const r={begin:/\$?\(\(/,
|
||||||
|
end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]
|
||||||
|
},l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10
|
||||||
|
}),m={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,
|
||||||
|
contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{
|
||||||
|
name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,
|
||||||
|
keyword:["if","then","else","elif","fi","for","while","until","in","do","done","case","esac","function","select"],
|
||||||
|
literal:["true","false"],
|
||||||
|
built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]
|
||||||
|
},contains:[l,e.SHEBANG(),m,r,i,c,{match:/(\/[a-z._-]+)+/},o,{match:/\\"/},{
|
||||||
|
className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}}})()
|
||||||
|
;export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,238 @@
|
||||||
|
/*! `basic` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: BASIC
|
||||||
|
Author: Raphaël Assénat <raph@raphnet.net>
|
||||||
|
Description: Based on the BASIC reference from the Tandy 1000 guide
|
||||||
|
Website: https://en.wikipedia.org/wiki/Tandy_1000
|
||||||
|
Category: system
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function basic(hljs) {
|
||||||
|
const KEYWORDS = [
|
||||||
|
"ABS",
|
||||||
|
"ASC",
|
||||||
|
"AND",
|
||||||
|
"ATN",
|
||||||
|
"AUTO|0",
|
||||||
|
"BEEP",
|
||||||
|
"BLOAD|10",
|
||||||
|
"BSAVE|10",
|
||||||
|
"CALL",
|
||||||
|
"CALLS",
|
||||||
|
"CDBL",
|
||||||
|
"CHAIN",
|
||||||
|
"CHDIR",
|
||||||
|
"CHR$|10",
|
||||||
|
"CINT",
|
||||||
|
"CIRCLE",
|
||||||
|
"CLEAR",
|
||||||
|
"CLOSE",
|
||||||
|
"CLS",
|
||||||
|
"COLOR",
|
||||||
|
"COM",
|
||||||
|
"COMMON",
|
||||||
|
"CONT",
|
||||||
|
"COS",
|
||||||
|
"CSNG",
|
||||||
|
"CSRLIN",
|
||||||
|
"CVD",
|
||||||
|
"CVI",
|
||||||
|
"CVS",
|
||||||
|
"DATA",
|
||||||
|
"DATE$",
|
||||||
|
"DEFDBL",
|
||||||
|
"DEFINT",
|
||||||
|
"DEFSNG",
|
||||||
|
"DEFSTR",
|
||||||
|
"DEF|0",
|
||||||
|
"SEG",
|
||||||
|
"USR",
|
||||||
|
"DELETE",
|
||||||
|
"DIM",
|
||||||
|
"DRAW",
|
||||||
|
"EDIT",
|
||||||
|
"END",
|
||||||
|
"ENVIRON",
|
||||||
|
"ENVIRON$",
|
||||||
|
"EOF",
|
||||||
|
"EQV",
|
||||||
|
"ERASE",
|
||||||
|
"ERDEV",
|
||||||
|
"ERDEV$",
|
||||||
|
"ERL",
|
||||||
|
"ERR",
|
||||||
|
"ERROR",
|
||||||
|
"EXP",
|
||||||
|
"FIELD",
|
||||||
|
"FILES",
|
||||||
|
"FIX",
|
||||||
|
"FOR|0",
|
||||||
|
"FRE",
|
||||||
|
"GET",
|
||||||
|
"GOSUB|10",
|
||||||
|
"GOTO",
|
||||||
|
"HEX$",
|
||||||
|
"IF",
|
||||||
|
"THEN",
|
||||||
|
"ELSE|0",
|
||||||
|
"INKEY$",
|
||||||
|
"INP",
|
||||||
|
"INPUT",
|
||||||
|
"INPUT#",
|
||||||
|
"INPUT$",
|
||||||
|
"INSTR",
|
||||||
|
"IMP",
|
||||||
|
"INT",
|
||||||
|
"IOCTL",
|
||||||
|
"IOCTL$",
|
||||||
|
"KEY",
|
||||||
|
"ON",
|
||||||
|
"OFF",
|
||||||
|
"LIST",
|
||||||
|
"KILL",
|
||||||
|
"LEFT$",
|
||||||
|
"LEN",
|
||||||
|
"LET",
|
||||||
|
"LINE",
|
||||||
|
"LLIST",
|
||||||
|
"LOAD",
|
||||||
|
"LOC",
|
||||||
|
"LOCATE",
|
||||||
|
"LOF",
|
||||||
|
"LOG",
|
||||||
|
"LPRINT",
|
||||||
|
"USING",
|
||||||
|
"LSET",
|
||||||
|
"MERGE",
|
||||||
|
"MID$",
|
||||||
|
"MKDIR",
|
||||||
|
"MKD$",
|
||||||
|
"MKI$",
|
||||||
|
"MKS$",
|
||||||
|
"MOD",
|
||||||
|
"NAME",
|
||||||
|
"NEW",
|
||||||
|
"NEXT",
|
||||||
|
"NOISE",
|
||||||
|
"NOT",
|
||||||
|
"OCT$",
|
||||||
|
"ON",
|
||||||
|
"OR",
|
||||||
|
"PEN",
|
||||||
|
"PLAY",
|
||||||
|
"STRIG",
|
||||||
|
"OPEN",
|
||||||
|
"OPTION",
|
||||||
|
"BASE",
|
||||||
|
"OUT",
|
||||||
|
"PAINT",
|
||||||
|
"PALETTE",
|
||||||
|
"PCOPY",
|
||||||
|
"PEEK",
|
||||||
|
"PMAP",
|
||||||
|
"POINT",
|
||||||
|
"POKE",
|
||||||
|
"POS",
|
||||||
|
"PRINT",
|
||||||
|
"PRINT]",
|
||||||
|
"PSET",
|
||||||
|
"PRESET",
|
||||||
|
"PUT",
|
||||||
|
"RANDOMIZE",
|
||||||
|
"READ",
|
||||||
|
"REM",
|
||||||
|
"RENUM",
|
||||||
|
"RESET|0",
|
||||||
|
"RESTORE",
|
||||||
|
"RESUME",
|
||||||
|
"RETURN|0",
|
||||||
|
"RIGHT$",
|
||||||
|
"RMDIR",
|
||||||
|
"RND",
|
||||||
|
"RSET",
|
||||||
|
"RUN",
|
||||||
|
"SAVE",
|
||||||
|
"SCREEN",
|
||||||
|
"SGN",
|
||||||
|
"SHELL",
|
||||||
|
"SIN",
|
||||||
|
"SOUND",
|
||||||
|
"SPACE$",
|
||||||
|
"SPC",
|
||||||
|
"SQR",
|
||||||
|
"STEP",
|
||||||
|
"STICK",
|
||||||
|
"STOP",
|
||||||
|
"STR$",
|
||||||
|
"STRING$",
|
||||||
|
"SWAP",
|
||||||
|
"SYSTEM",
|
||||||
|
"TAB",
|
||||||
|
"TAN",
|
||||||
|
"TIME$",
|
||||||
|
"TIMER",
|
||||||
|
"TROFF",
|
||||||
|
"TRON",
|
||||||
|
"TO",
|
||||||
|
"USR",
|
||||||
|
"VAL",
|
||||||
|
"VARPTR",
|
||||||
|
"VARPTR$",
|
||||||
|
"VIEW",
|
||||||
|
"WAIT",
|
||||||
|
"WHILE",
|
||||||
|
"WEND",
|
||||||
|
"WIDTH",
|
||||||
|
"WINDOW",
|
||||||
|
"WRITE",
|
||||||
|
"XOR"
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'BASIC',
|
||||||
|
case_insensitive: true,
|
||||||
|
illegal: '^\.',
|
||||||
|
// Support explicitly typed variables that end with $%! or #.
|
||||||
|
keywords: {
|
||||||
|
$pattern: '[a-zA-Z][a-zA-Z0-9_$%!#]*',
|
||||||
|
keyword: KEYWORDS
|
||||||
|
},
|
||||||
|
contains: [
|
||||||
|
hljs.QUOTE_STRING_MODE,
|
||||||
|
hljs.COMMENT('REM', '$', { relevance: 10 }),
|
||||||
|
hljs.COMMENT('\'', '$', { relevance: 0 }),
|
||||||
|
{
|
||||||
|
// Match line numbers
|
||||||
|
className: 'symbol',
|
||||||
|
begin: '^[0-9]+ ',
|
||||||
|
relevance: 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Match typed numeric constants (1000, 12.34!, 1.2e5, 1.5#, 1.2D2)
|
||||||
|
className: 'number',
|
||||||
|
begin: '\\b\\d+(\\.\\d+)?([edED]\\d+)?[#\!]?',
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Match hexadecimal numbers (&Hxxxx)
|
||||||
|
className: 'number',
|
||||||
|
begin: '(&[hH][0-9a-fA-F]{1,4})'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Match octal numbers (&Oxxxxxx)
|
||||||
|
className: 'number',
|
||||||
|
begin: '(&[oO][0-7]{1,6})'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return basic;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
/*! `basic` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return E=>({name:"BASIC",case_insensitive:!0,
|
||||||
|
illegal:"^.",keywords:{$pattern:"[a-zA-Z][a-zA-Z0-9_$%!#]*",
|
||||||
|
keyword:["ABS","ASC","AND","ATN","AUTO|0","BEEP","BLOAD|10","BSAVE|10","CALL","CALLS","CDBL","CHAIN","CHDIR","CHR$|10","CINT","CIRCLE","CLEAR","CLOSE","CLS","COLOR","COM","COMMON","CONT","COS","CSNG","CSRLIN","CVD","CVI","CVS","DATA","DATE$","DEFDBL","DEFINT","DEFSNG","DEFSTR","DEF|0","SEG","USR","DELETE","DIM","DRAW","EDIT","END","ENVIRON","ENVIRON$","EOF","EQV","ERASE","ERDEV","ERDEV$","ERL","ERR","ERROR","EXP","FIELD","FILES","FIX","FOR|0","FRE","GET","GOSUB|10","GOTO","HEX$","IF","THEN","ELSE|0","INKEY$","INP","INPUT","INPUT#","INPUT$","INSTR","IMP","INT","IOCTL","IOCTL$","KEY","ON","OFF","LIST","KILL","LEFT$","LEN","LET","LINE","LLIST","LOAD","LOC","LOCATE","LOF","LOG","LPRINT","USING","LSET","MERGE","MID$","MKDIR","MKD$","MKI$","MKS$","MOD","NAME","NEW","NEXT","NOISE","NOT","OCT$","ON","OR","PEN","PLAY","STRIG","OPEN","OPTION","BASE","OUT","PAINT","PALETTE","PCOPY","PEEK","PMAP","POINT","POKE","POS","PRINT","PRINT]","PSET","PRESET","PUT","RANDOMIZE","READ","REM","RENUM","RESET|0","RESTORE","RESUME","RETURN|0","RIGHT$","RMDIR","RND","RSET","RUN","SAVE","SCREEN","SGN","SHELL","SIN","SOUND","SPACE$","SPC","SQR","STEP","STICK","STOP","STR$","STRING$","SWAP","SYSTEM","TAB","TAN","TIME$","TIMER","TROFF","TRON","TO","USR","VAL","VARPTR","VARPTR$","VIEW","WAIT","WHILE","WEND","WIDTH","WINDOW","WRITE","XOR"]
|
||||||
|
},contains:[E.QUOTE_STRING_MODE,E.COMMENT("REM","$",{relevance:10
|
||||||
|
}),E.COMMENT("'","$",{relevance:0}),{className:"symbol",begin:"^[0-9]+ ",
|
||||||
|
relevance:10},{className:"number",begin:"\\b\\d+(\\.\\d+)?([edED]\\d+)?[#!]?",
|
||||||
|
relevance:0},{className:"number",begin:"(&[hH][0-9a-fA-F]{1,4})"},{
|
||||||
|
className:"number",begin:"(&[oO][0-7]{1,6})"}]})})();export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*! `bnf` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: Backus–Naur Form
|
||||||
|
Website: https://en.wikipedia.org/wiki/Backus–Naur_form
|
||||||
|
Category: syntax
|
||||||
|
Author: Oleg Efimov <efimovov@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function bnf(hljs) {
|
||||||
|
return {
|
||||||
|
name: 'Backus–Naur Form',
|
||||||
|
contains: [
|
||||||
|
// Attribute
|
||||||
|
{
|
||||||
|
className: 'attribute',
|
||||||
|
begin: /</,
|
||||||
|
end: />/
|
||||||
|
},
|
||||||
|
// Specific
|
||||||
|
{
|
||||||
|
begin: /::=/,
|
||||||
|
end: /$/,
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
begin: /</,
|
||||||
|
end: />/
|
||||||
|
},
|
||||||
|
// Common
|
||||||
|
hljs.C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
hljs.APOS_STRING_MODE,
|
||||||
|
hljs.QUOTE_STRING_MODE
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return bnf;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
/*! `bnf` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return a=>({name:"Backus\u2013Naur Form",
|
||||||
|
contains:[{className:"attribute",begin:/</,end:/>/},{begin:/::=/,end:/$/,
|
||||||
|
contains:[{begin:/</,end:/>/
|
||||||
|
},a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE]
|
||||||
|
}]})})();export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
/*! `brainfuck` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: Brainfuck
|
||||||
|
Author: Evgeny Stepanischev <imbolk@gmail.com>
|
||||||
|
Website: https://esolangs.org/wiki/Brainfuck
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function brainfuck(hljs) {
|
||||||
|
const LITERAL = {
|
||||||
|
className: 'literal',
|
||||||
|
begin: /[+-]+/,
|
||||||
|
relevance: 0
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
name: 'Brainfuck',
|
||||||
|
aliases: [ 'bf' ],
|
||||||
|
contains: [
|
||||||
|
hljs.COMMENT(
|
||||||
|
/[^\[\]\.,\+\-<> \r\n]/,
|
||||||
|
/[\[\]\.,\+\-<> \r\n]/,
|
||||||
|
{
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
match: /[ ]+[^\[\]\.,\+\-<> \r\n]/,
|
||||||
|
relevance: 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
returnEnd: true,
|
||||||
|
relevance: 0
|
||||||
|
}
|
||||||
|
),
|
||||||
|
{
|
||||||
|
className: 'title',
|
||||||
|
begin: '[\\[\\]]',
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'string',
|
||||||
|
begin: '[\\.,]',
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// this mode works as the only relevance counter
|
||||||
|
// it looks ahead to find the start of a run of literals
|
||||||
|
// so only the runs are counted as relevant
|
||||||
|
begin: /(?=\+\+|--)/,
|
||||||
|
contains: [ LITERAL ]
|
||||||
|
},
|
||||||
|
LITERAL
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return brainfuck;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
/*! `brainfuck` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{const a={className:"literal",
|
||||||
|
begin:/[+-]+/,relevance:0};return{name:"Brainfuck",aliases:["bf"],
|
||||||
|
contains:[e.COMMENT(/[^\[\]\.,\+\-<> \r\n]/,/[\[\]\.,\+\-<> \r\n]/,{contains:[{
|
||||||
|
match:/[ ]+[^\[\]\.,\+\-<> \r\n]/,relevance:0}],returnEnd:!0,relevance:0}),{
|
||||||
|
className:"title",begin:"[\\[\\]]",relevance:0},{className:"string",
|
||||||
|
begin:"[\\.,]",relevance:0},{begin:/(?=\+\+|--)/,contains:[a]},a]}}})()
|
||||||
|
;export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,340 @@
|
||||||
|
/*! `c` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: C
|
||||||
|
Category: common, system
|
||||||
|
Website: https://en.wikipedia.org/wiki/C_(programming_language)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function c(hljs) {
|
||||||
|
const regex = hljs.regex;
|
||||||
|
// added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does
|
||||||
|
// not include such support nor can we be sure all the grammars depending
|
||||||
|
// on it would desire this behavior
|
||||||
|
const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\n/ } ] });
|
||||||
|
const DECLTYPE_AUTO_RE = 'decltype\\(auto\\)';
|
||||||
|
const NAMESPACE_RE = '[a-zA-Z_]\\w*::';
|
||||||
|
const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';
|
||||||
|
const FUNCTION_TYPE_RE = '('
|
||||||
|
+ DECLTYPE_AUTO_RE + '|'
|
||||||
|
+ regex.optional(NAMESPACE_RE)
|
||||||
|
+ '[a-zA-Z_]\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)
|
||||||
|
+ ')';
|
||||||
|
|
||||||
|
|
||||||
|
const TYPES = {
|
||||||
|
className: 'type',
|
||||||
|
variants: [
|
||||||
|
{ begin: '\\b[a-z\\d_]*_t\\b' },
|
||||||
|
{ match: /\batomic_[a-z]{3,6}\b/ }
|
||||||
|
]
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// https://en.cppreference.com/w/cpp/language/escape
|
||||||
|
// \\ \x \xFF \u2837 \u00323747 \374
|
||||||
|
const CHARACTER_ESCAPES = '\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)';
|
||||||
|
const STRINGS = {
|
||||||
|
className: 'string',
|
||||||
|
variants: [
|
||||||
|
{
|
||||||
|
begin: '(u8?|U|L)?"',
|
||||||
|
end: '"',
|
||||||
|
illegal: '\\n',
|
||||||
|
contains: [ hljs.BACKSLASH_ESCAPE ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
begin: '(u8?|U|L)?\'(' + CHARACTER_ESCAPES + "|.)",
|
||||||
|
end: '\'',
|
||||||
|
illegal: '.'
|
||||||
|
},
|
||||||
|
hljs.END_SAME_AS_BEGIN({
|
||||||
|
begin: /(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,
|
||||||
|
end: /\)([^()\\ ]{0,16})"/
|
||||||
|
})
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
const NUMBERS = {
|
||||||
|
className: 'number',
|
||||||
|
variants: [
|
||||||
|
{ begin: '\\b(0b[01\']+)' },
|
||||||
|
{ begin: '(-?)\\b([\\d\']+(\\.[\\d\']*)?|\\.[\\d\']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)' },
|
||||||
|
{ begin: '(-?)(\\b0[xX][a-fA-F0-9\']+|(\\b[\\d\']+(\\.[\\d\']*)?|\\.[\\d\']+)([eE][-+]?[\\d\']+)?)' }
|
||||||
|
],
|
||||||
|
relevance: 0
|
||||||
|
};
|
||||||
|
|
||||||
|
const PREPROCESSOR = {
|
||||||
|
className: 'meta',
|
||||||
|
begin: /#\s*[a-z]+\b/,
|
||||||
|
end: /$/,
|
||||||
|
keywords: { keyword:
|
||||||
|
'if else elif endif define undef warning error line '
|
||||||
|
+ 'pragma _Pragma ifdef ifndef elifdef elifndef include' },
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
begin: /\\\n/,
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
hljs.inherit(STRINGS, { className: 'string' }),
|
||||||
|
{
|
||||||
|
className: 'string',
|
||||||
|
begin: /<.*?>/
|
||||||
|
},
|
||||||
|
C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
const TITLE_MODE = {
|
||||||
|
className: 'title',
|
||||||
|
begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,
|
||||||
|
relevance: 0
|
||||||
|
};
|
||||||
|
|
||||||
|
const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\s*\\(';
|
||||||
|
|
||||||
|
const C_KEYWORDS = [
|
||||||
|
"asm",
|
||||||
|
"auto",
|
||||||
|
"break",
|
||||||
|
"case",
|
||||||
|
"continue",
|
||||||
|
"default",
|
||||||
|
"do",
|
||||||
|
"else",
|
||||||
|
"enum",
|
||||||
|
"extern",
|
||||||
|
"for",
|
||||||
|
"fortran",
|
||||||
|
"goto",
|
||||||
|
"if",
|
||||||
|
"inline",
|
||||||
|
"register",
|
||||||
|
"restrict",
|
||||||
|
"return",
|
||||||
|
"sizeof",
|
||||||
|
"typeof",
|
||||||
|
"typeof_unqual",
|
||||||
|
"struct",
|
||||||
|
"switch",
|
||||||
|
"typedef",
|
||||||
|
"union",
|
||||||
|
"volatile",
|
||||||
|
"while",
|
||||||
|
"_Alignas",
|
||||||
|
"_Alignof",
|
||||||
|
"_Atomic",
|
||||||
|
"_Generic",
|
||||||
|
"_Noreturn",
|
||||||
|
"_Static_assert",
|
||||||
|
"_Thread_local",
|
||||||
|
// aliases
|
||||||
|
"alignas",
|
||||||
|
"alignof",
|
||||||
|
"noreturn",
|
||||||
|
"static_assert",
|
||||||
|
"thread_local",
|
||||||
|
// not a C keyword but is, for all intents and purposes, treated exactly like one.
|
||||||
|
"_Pragma"
|
||||||
|
];
|
||||||
|
|
||||||
|
const C_TYPES = [
|
||||||
|
"float",
|
||||||
|
"double",
|
||||||
|
"signed",
|
||||||
|
"unsigned",
|
||||||
|
"int",
|
||||||
|
"short",
|
||||||
|
"long",
|
||||||
|
"char",
|
||||||
|
"void",
|
||||||
|
"_Bool",
|
||||||
|
"_BitInt",
|
||||||
|
"_Complex",
|
||||||
|
"_Imaginary",
|
||||||
|
"_Decimal32",
|
||||||
|
"_Decimal64",
|
||||||
|
"_Decimal96",
|
||||||
|
"_Decimal128",
|
||||||
|
"_Decimal64x",
|
||||||
|
"_Decimal128x",
|
||||||
|
"_Float16",
|
||||||
|
"_Float32",
|
||||||
|
"_Float64",
|
||||||
|
"_Float128",
|
||||||
|
"_Float32x",
|
||||||
|
"_Float64x",
|
||||||
|
"_Float128x",
|
||||||
|
// modifiers
|
||||||
|
"const",
|
||||||
|
"static",
|
||||||
|
"constexpr",
|
||||||
|
// aliases
|
||||||
|
"complex",
|
||||||
|
"bool",
|
||||||
|
"imaginary"
|
||||||
|
];
|
||||||
|
|
||||||
|
const KEYWORDS = {
|
||||||
|
keyword: C_KEYWORDS,
|
||||||
|
type: C_TYPES,
|
||||||
|
literal: 'true false NULL',
|
||||||
|
// TODO: apply hinting work similar to what was done in cpp.js
|
||||||
|
built_in: 'std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream '
|
||||||
|
+ 'auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set '
|
||||||
|
+ 'unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos '
|
||||||
|
+ 'asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp '
|
||||||
|
+ 'fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper '
|
||||||
|
+ 'isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow '
|
||||||
|
+ 'printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp '
|
||||||
|
+ 'strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan '
|
||||||
|
+ 'vfprintf vprintf vsprintf endl initializer_list unique_ptr',
|
||||||
|
};
|
||||||
|
|
||||||
|
const EXPRESSION_CONTAINS = [
|
||||||
|
PREPROCESSOR,
|
||||||
|
TYPES,
|
||||||
|
C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
NUMBERS,
|
||||||
|
STRINGS
|
||||||
|
];
|
||||||
|
|
||||||
|
const EXPRESSION_CONTEXT = {
|
||||||
|
// This mode covers expression context where we can't expect a function
|
||||||
|
// definition and shouldn't highlight anything that looks like one:
|
||||||
|
// `return some()`, `else if()`, `(x*sum(1, 2))`
|
||||||
|
variants: [
|
||||||
|
{
|
||||||
|
begin: /=/,
|
||||||
|
end: /;/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
begin: /\(/,
|
||||||
|
end: /\)/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
beginKeywords: 'new throw return else',
|
||||||
|
end: /;/
|
||||||
|
}
|
||||||
|
],
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
contains: EXPRESSION_CONTAINS.concat([
|
||||||
|
{
|
||||||
|
begin: /\(/,
|
||||||
|
end: /\)/,
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
contains: EXPRESSION_CONTAINS.concat([ 'self' ]),
|
||||||
|
relevance: 0
|
||||||
|
}
|
||||||
|
]),
|
||||||
|
relevance: 0
|
||||||
|
};
|
||||||
|
|
||||||
|
const FUNCTION_DECLARATION = {
|
||||||
|
begin: '(' + FUNCTION_TYPE_RE + '[\\*&\\s]+)+' + FUNCTION_TITLE,
|
||||||
|
returnBegin: true,
|
||||||
|
end: /[{;=]/,
|
||||||
|
excludeEnd: true,
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
illegal: /[^\w\s\*&:<>.]/,
|
||||||
|
contains: [
|
||||||
|
{ // to prevent it from being confused as the function title
|
||||||
|
begin: DECLTYPE_AUTO_RE,
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
begin: FUNCTION_TITLE,
|
||||||
|
returnBegin: true,
|
||||||
|
contains: [ hljs.inherit(TITLE_MODE, { className: "title.function" }) ],
|
||||||
|
relevance: 0
|
||||||
|
},
|
||||||
|
// allow for multiple declarations, e.g.:
|
||||||
|
// extern void f(int), g(char);
|
||||||
|
{
|
||||||
|
relevance: 0,
|
||||||
|
match: /,/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'params',
|
||||||
|
begin: /\(/,
|
||||||
|
end: /\)/,
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
relevance: 0,
|
||||||
|
contains: [
|
||||||
|
C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
STRINGS,
|
||||||
|
NUMBERS,
|
||||||
|
TYPES,
|
||||||
|
// Count matching parentheses.
|
||||||
|
{
|
||||||
|
begin: /\(/,
|
||||||
|
end: /\)/,
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
relevance: 0,
|
||||||
|
contains: [
|
||||||
|
'self',
|
||||||
|
C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
STRINGS,
|
||||||
|
NUMBERS,
|
||||||
|
TYPES
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
TYPES,
|
||||||
|
C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
PREPROCESSOR
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: "C",
|
||||||
|
aliases: [ 'h' ],
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
// Until differentiations are added between `c` and `cpp`, `c` will
|
||||||
|
// not be auto-detected to avoid auto-detect conflicts between C and C++
|
||||||
|
disableAutodetect: true,
|
||||||
|
illegal: '</',
|
||||||
|
contains: [].concat(
|
||||||
|
EXPRESSION_CONTEXT,
|
||||||
|
FUNCTION_DECLARATION,
|
||||||
|
EXPRESSION_CONTAINS,
|
||||||
|
[
|
||||||
|
PREPROCESSOR,
|
||||||
|
{
|
||||||
|
begin: hljs.IDENT_RE + '::',
|
||||||
|
keywords: KEYWORDS
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'class',
|
||||||
|
beginKeywords: 'enum class struct union',
|
||||||
|
end: /[{;:<>=]/,
|
||||||
|
contains: [
|
||||||
|
{ beginKeywords: "final class struct" },
|
||||||
|
hljs.TITLE_MODE
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]),
|
||||||
|
exports: {
|
||||||
|
preprocessor: PREPROCESSOR,
|
||||||
|
strings: STRINGS,
|
||||||
|
keywords: KEYWORDS
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return c;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*! `c` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{
|
||||||
|
const n=e.regex,t=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]
|
||||||
|
}),a="decltype\\(auto\\)",s="[a-zA-Z_]\\w*::",r="("+a+"|"+n.optional(s)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",i={
|
||||||
|
className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{
|
||||||
|
match:/\batomic_[a-z]{3,6}\b/}]},l={className:"string",variants:[{
|
||||||
|
begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{
|
||||||
|
begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
|
||||||
|
end:"'",illegal:"."},e.END_SAME_AS_BEGIN({
|
||||||
|
begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={
|
||||||
|
className:"number",variants:[{begin:"\\b(0b[01']+)"},{
|
||||||
|
begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"
|
||||||
|
},{
|
||||||
|
begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
|
||||||
|
}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{
|
||||||
|
keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include"
|
||||||
|
},contains:[{begin:/\\\n/,relevance:0},e.inherit(l,{className:"string"}),{
|
||||||
|
className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={
|
||||||
|
className:"title",begin:n.optional(s)+e.IDENT_RE,relevance:0
|
||||||
|
},_=n.optional(s)+e.IDENT_RE+"\\s*\\(",m={
|
||||||
|
keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","typeof","typeof_unqual","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],
|
||||||
|
type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_BitInt","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal96","_Decimal128","_Decimal64x","_Decimal128x","_Float16","_Float32","_Float64","_Float128","_Float32x","_Float64x","_Float128x","const","static","constexpr","complex","bool","imaginary"],
|
||||||
|
literal:"true false NULL",
|
||||||
|
built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"
|
||||||
|
},u=[c,i,t,e.C_BLOCK_COMMENT_MODE,o,l],g={variants:[{begin:/=/,end:/;/},{
|
||||||
|
begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],
|
||||||
|
keywords:m,contains:u.concat([{begin:/\(/,end:/\)/,keywords:m,
|
||||||
|
contains:u.concat(["self"]),relevance:0}]),relevance:0},p={
|
||||||
|
begin:"("+r+"[\\*&\\s]+)+"+_,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,
|
||||||
|
keywords:m,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:m,relevance:0},{
|
||||||
|
begin:_,returnBegin:!0,contains:[e.inherit(d,{className:"title.function"})],
|
||||||
|
relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,
|
||||||
|
keywords:m,relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,l,o,i,{begin:/\(/,
|
||||||
|
end:/\)/,keywords:m,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,l,o,i]
|
||||||
|
}]},i,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:m,
|
||||||
|
disableAutodetect:!0,illegal:"</",contains:[].concat(g,p,u,[c,{
|
||||||
|
begin:e.IDENT_RE+"::",keywords:m},{className:"class",
|
||||||
|
beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{
|
||||||
|
beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:c,
|
||||||
|
strings:l,keywords:m}}}})();export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,168 @@
|
||||||
|
/*! `cal` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: C/AL
|
||||||
|
Author: Kenneth Fuglsang Christensen <kfuglsang@gmail.com>
|
||||||
|
Description: Provides highlighting of Microsoft Dynamics NAV C/AL code files
|
||||||
|
Website: https://docs.microsoft.com/en-us/dynamics-nav/programming-in-c-al
|
||||||
|
Category: enterprise
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function cal(hljs) {
|
||||||
|
const regex = hljs.regex;
|
||||||
|
const KEYWORDS = [
|
||||||
|
"div",
|
||||||
|
"mod",
|
||||||
|
"in",
|
||||||
|
"and",
|
||||||
|
"or",
|
||||||
|
"not",
|
||||||
|
"xor",
|
||||||
|
"asserterror",
|
||||||
|
"begin",
|
||||||
|
"case",
|
||||||
|
"do",
|
||||||
|
"downto",
|
||||||
|
"else",
|
||||||
|
"end",
|
||||||
|
"exit",
|
||||||
|
"for",
|
||||||
|
"local",
|
||||||
|
"if",
|
||||||
|
"of",
|
||||||
|
"repeat",
|
||||||
|
"then",
|
||||||
|
"to",
|
||||||
|
"until",
|
||||||
|
"while",
|
||||||
|
"with",
|
||||||
|
"var"
|
||||||
|
];
|
||||||
|
const LITERALS = 'false true';
|
||||||
|
const COMMENT_MODES = [
|
||||||
|
hljs.C_LINE_COMMENT_MODE,
|
||||||
|
hljs.COMMENT(
|
||||||
|
/\{/,
|
||||||
|
/\}/,
|
||||||
|
{ relevance: 0 }
|
||||||
|
),
|
||||||
|
hljs.COMMENT(
|
||||||
|
/\(\*/,
|
||||||
|
/\*\)/,
|
||||||
|
{ relevance: 10 }
|
||||||
|
)
|
||||||
|
];
|
||||||
|
const STRING = {
|
||||||
|
className: 'string',
|
||||||
|
begin: /'/,
|
||||||
|
end: /'/,
|
||||||
|
contains: [ { begin: /''/ } ]
|
||||||
|
};
|
||||||
|
const CHAR_STRING = {
|
||||||
|
className: 'string',
|
||||||
|
begin: /(#\d+)+/
|
||||||
|
};
|
||||||
|
const DATE = {
|
||||||
|
className: 'number',
|
||||||
|
begin: '\\b\\d+(\\.\\d+)?(DT|D|T)',
|
||||||
|
relevance: 0
|
||||||
|
};
|
||||||
|
const DBL_QUOTED_VARIABLE = {
|
||||||
|
className: 'string', // not a string technically but makes sense to be highlighted in the same style
|
||||||
|
begin: '"',
|
||||||
|
end: '"'
|
||||||
|
};
|
||||||
|
|
||||||
|
const PROCEDURE = {
|
||||||
|
match: [
|
||||||
|
/procedure/,
|
||||||
|
/\s+/,
|
||||||
|
/[a-zA-Z_][\w@]*/,
|
||||||
|
/\s*/
|
||||||
|
],
|
||||||
|
scope: {
|
||||||
|
1: "keyword",
|
||||||
|
3: "title.function"
|
||||||
|
},
|
||||||
|
contains: [
|
||||||
|
{
|
||||||
|
className: 'params',
|
||||||
|
begin: /\(/,
|
||||||
|
end: /\)/,
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
contains: [
|
||||||
|
STRING,
|
||||||
|
CHAR_STRING,
|
||||||
|
hljs.NUMBER_MODE
|
||||||
|
]
|
||||||
|
},
|
||||||
|
...COMMENT_MODES
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
const OBJECT_TYPES = [
|
||||||
|
"Table",
|
||||||
|
"Form",
|
||||||
|
"Report",
|
||||||
|
"Dataport",
|
||||||
|
"Codeunit",
|
||||||
|
"XMLport",
|
||||||
|
"MenuSuite",
|
||||||
|
"Page",
|
||||||
|
"Query"
|
||||||
|
];
|
||||||
|
const OBJECT = {
|
||||||
|
match: [
|
||||||
|
/OBJECT/,
|
||||||
|
/\s+/,
|
||||||
|
regex.either(...OBJECT_TYPES),
|
||||||
|
/\s+/,
|
||||||
|
/\d+/,
|
||||||
|
/\s+(?=[^\s])/,
|
||||||
|
/.*/,
|
||||||
|
/$/
|
||||||
|
],
|
||||||
|
relevance: 3,
|
||||||
|
scope: {
|
||||||
|
1: "keyword",
|
||||||
|
3: "type",
|
||||||
|
5: "number",
|
||||||
|
7: "title"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const PROPERTY = {
|
||||||
|
match: /[\w]+(?=\=)/,
|
||||||
|
scope: "attribute",
|
||||||
|
relevance: 0
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'C/AL',
|
||||||
|
case_insensitive: true,
|
||||||
|
keywords: {
|
||||||
|
keyword: KEYWORDS,
|
||||||
|
literal: LITERALS
|
||||||
|
},
|
||||||
|
illegal: /\/\*/,
|
||||||
|
contains: [
|
||||||
|
PROPERTY,
|
||||||
|
STRING,
|
||||||
|
CHAR_STRING,
|
||||||
|
DATE,
|
||||||
|
DBL_QUOTED_VARIABLE,
|
||||||
|
hljs.NUMBER_MODE,
|
||||||
|
OBJECT,
|
||||||
|
PROCEDURE
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return cal;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
/*! `cal` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{
|
||||||
|
const r=e.regex,a=["div","mod","in","and","or","not","xor","asserterror","begin","case","do","downto","else","end","exit","for","local","if","of","repeat","then","to","until","while","with","var"],n=[e.C_LINE_COMMENT_MODE,e.COMMENT(/\{/,/\}/,{
|
||||||
|
relevance:0}),e.COMMENT(/\(\*/,/\*\)/,{relevance:10})],t={className:"string",
|
||||||
|
begin:/'/,end:/'/,contains:[{begin:/''/}]},s={className:"string",begin:/(#\d+)+/
|
||||||
|
},i={match:[/procedure/,/\s+/,/[a-zA-Z_][\w@]*/,/\s*/],scope:{1:"keyword",
|
||||||
|
3:"title.function"},contains:[{className:"params",begin:/\(/,end:/\)/,
|
||||||
|
keywords:a,contains:[t,s,e.NUMBER_MODE]},...n]},o={
|
||||||
|
match:[/OBJECT/,/\s+/,r.either("Table","Form","Report","Dataport","Codeunit","XMLport","MenuSuite","Page","Query"),/\s+/,/\d+/,/\s+(?=[^\s])/,/.*/,/$/],
|
||||||
|
relevance:3,scope:{1:"keyword",3:"type",5:"number",7:"title"}};return{
|
||||||
|
name:"C/AL",case_insensitive:!0,keywords:{keyword:a,literal:"false true"},
|
||||||
|
illegal:/\/\*/,contains:[{match:/[\w]+(?=\=)/,scope:"attribute",relevance:0
|
||||||
|
},t,s,{className:"number",begin:"\\b\\d+(\\.\\d+)?(DT|D|T)",relevance:0},{
|
||||||
|
className:"string",begin:'"',end:'"'},e.NUMBER_MODE,o,i]}}})()
|
||||||
|
;export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,107 @@
|
||||||
|
/*! `capnproto` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: Cap’n Proto
|
||||||
|
Author: Oleg Efimov <efimovov@gmail.com>
|
||||||
|
Description: Cap’n Proto message definition format
|
||||||
|
Website: https://capnproto.org/capnp-tool.html
|
||||||
|
Category: protocols
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function capnproto(hljs) {
|
||||||
|
const KEYWORDS = [
|
||||||
|
"struct",
|
||||||
|
"enum",
|
||||||
|
"interface",
|
||||||
|
"union",
|
||||||
|
"group",
|
||||||
|
"import",
|
||||||
|
"using",
|
||||||
|
"const",
|
||||||
|
"annotation",
|
||||||
|
"extends",
|
||||||
|
"in",
|
||||||
|
"of",
|
||||||
|
"on",
|
||||||
|
"as",
|
||||||
|
"with",
|
||||||
|
"from",
|
||||||
|
"fixed"
|
||||||
|
];
|
||||||
|
const TYPES = [
|
||||||
|
"Void",
|
||||||
|
"Bool",
|
||||||
|
"Int8",
|
||||||
|
"Int16",
|
||||||
|
"Int32",
|
||||||
|
"Int64",
|
||||||
|
"UInt8",
|
||||||
|
"UInt16",
|
||||||
|
"UInt32",
|
||||||
|
"UInt64",
|
||||||
|
"Float32",
|
||||||
|
"Float64",
|
||||||
|
"Text",
|
||||||
|
"Data",
|
||||||
|
"AnyPointer",
|
||||||
|
"AnyStruct",
|
||||||
|
"Capability",
|
||||||
|
"List"
|
||||||
|
];
|
||||||
|
const LITERALS = [
|
||||||
|
"true",
|
||||||
|
"false"
|
||||||
|
];
|
||||||
|
const CLASS_DEFINITION = {
|
||||||
|
variants: [
|
||||||
|
{ match: [
|
||||||
|
/(struct|enum|interface)/,
|
||||||
|
/\s+/,
|
||||||
|
hljs.IDENT_RE
|
||||||
|
] },
|
||||||
|
{ match: [
|
||||||
|
/extends/,
|
||||||
|
/\s*\(/,
|
||||||
|
hljs.IDENT_RE,
|
||||||
|
/\s*\)/
|
||||||
|
] }
|
||||||
|
],
|
||||||
|
scope: {
|
||||||
|
1: "keyword",
|
||||||
|
3: "title.class"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
name: 'Cap’n Proto',
|
||||||
|
aliases: [ 'capnp' ],
|
||||||
|
keywords: {
|
||||||
|
keyword: KEYWORDS,
|
||||||
|
type: TYPES,
|
||||||
|
literal: LITERALS
|
||||||
|
},
|
||||||
|
contains: [
|
||||||
|
hljs.QUOTE_STRING_MODE,
|
||||||
|
hljs.NUMBER_MODE,
|
||||||
|
hljs.HASH_COMMENT_MODE,
|
||||||
|
{
|
||||||
|
className: 'meta',
|
||||||
|
begin: /@0x[\w\d]{16};/,
|
||||||
|
illegal: /\n/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
className: 'symbol',
|
||||||
|
begin: /@\d+\b/
|
||||||
|
},
|
||||||
|
CLASS_DEFINITION
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return capnproto;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
/*! `capnproto` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return t=>{const n={variants:[{
|
||||||
|
match:[/(struct|enum|interface)/,/\s+/,t.IDENT_RE]},{
|
||||||
|
match:[/extends/,/\s*\(/,t.IDENT_RE,/\s*\)/]}],scope:{1:"keyword",
|
||||||
|
3:"title.class"}};return{name:"Cap\u2019n Proto",aliases:["capnp"],keywords:{
|
||||||
|
keyword:["struct","enum","interface","union","group","import","using","const","annotation","extends","in","of","on","as","with","from","fixed"],
|
||||||
|
type:["Void","Bool","Int8","Int16","Int32","Int64","UInt8","UInt16","UInt32","UInt64","Float32","Float64","Text","Data","AnyPointer","AnyStruct","Capability","List"],
|
||||||
|
literal:["true","false"]},
|
||||||
|
contains:[t.QUOTE_STRING_MODE,t.NUMBER_MODE,t.HASH_COMMENT_MODE,{
|
||||||
|
className:"meta",begin:/@0x[\w\d]{16};/,illegal:/\n/},{className:"symbol",
|
||||||
|
begin:/@\d+\b/},n]}}})();export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,148 @@
|
||||||
|
/*! `ceylon` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: Ceylon
|
||||||
|
Author: Lucas Werkmeister <mail@lucaswerkmeister.de>
|
||||||
|
Website: https://ceylon-lang.org
|
||||||
|
Category: system
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function ceylon(hljs) {
|
||||||
|
// 2.3. Identifiers and keywords
|
||||||
|
const KEYWORDS = [
|
||||||
|
"assembly",
|
||||||
|
"module",
|
||||||
|
"package",
|
||||||
|
"import",
|
||||||
|
"alias",
|
||||||
|
"class",
|
||||||
|
"interface",
|
||||||
|
"object",
|
||||||
|
"given",
|
||||||
|
"value",
|
||||||
|
"assign",
|
||||||
|
"void",
|
||||||
|
"function",
|
||||||
|
"new",
|
||||||
|
"of",
|
||||||
|
"extends",
|
||||||
|
"satisfies",
|
||||||
|
"abstracts",
|
||||||
|
"in",
|
||||||
|
"out",
|
||||||
|
"return",
|
||||||
|
"break",
|
||||||
|
"continue",
|
||||||
|
"throw",
|
||||||
|
"assert",
|
||||||
|
"dynamic",
|
||||||
|
"if",
|
||||||
|
"else",
|
||||||
|
"switch",
|
||||||
|
"case",
|
||||||
|
"for",
|
||||||
|
"while",
|
||||||
|
"try",
|
||||||
|
"catch",
|
||||||
|
"finally",
|
||||||
|
"then",
|
||||||
|
"let",
|
||||||
|
"this",
|
||||||
|
"outer",
|
||||||
|
"super",
|
||||||
|
"is",
|
||||||
|
"exists",
|
||||||
|
"nonempty"
|
||||||
|
];
|
||||||
|
// 7.4.1 Declaration Modifiers
|
||||||
|
const DECLARATION_MODIFIERS = [
|
||||||
|
"shared",
|
||||||
|
"abstract",
|
||||||
|
"formal",
|
||||||
|
"default",
|
||||||
|
"actual",
|
||||||
|
"variable",
|
||||||
|
"late",
|
||||||
|
"native",
|
||||||
|
"deprecated",
|
||||||
|
"final",
|
||||||
|
"sealed",
|
||||||
|
"annotation",
|
||||||
|
"suppressWarnings",
|
||||||
|
"small"
|
||||||
|
];
|
||||||
|
// 7.4.2 Documentation
|
||||||
|
const DOCUMENTATION = [
|
||||||
|
"doc",
|
||||||
|
"by",
|
||||||
|
"license",
|
||||||
|
"see",
|
||||||
|
"throws",
|
||||||
|
"tagged"
|
||||||
|
];
|
||||||
|
const SUBST = {
|
||||||
|
className: 'subst',
|
||||||
|
excludeBegin: true,
|
||||||
|
excludeEnd: true,
|
||||||
|
begin: /``/,
|
||||||
|
end: /``/,
|
||||||
|
keywords: KEYWORDS,
|
||||||
|
relevance: 10
|
||||||
|
};
|
||||||
|
const EXPRESSIONS = [
|
||||||
|
{
|
||||||
|
// verbatim string
|
||||||
|
className: 'string',
|
||||||
|
begin: '"""',
|
||||||
|
end: '"""',
|
||||||
|
relevance: 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// string literal or template
|
||||||
|
className: 'string',
|
||||||
|
begin: '"',
|
||||||
|
end: '"',
|
||||||
|
contains: [ SUBST ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// character literal
|
||||||
|
className: 'string',
|
||||||
|
begin: "'",
|
||||||
|
end: "'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// numeric literal
|
||||||
|
className: 'number',
|
||||||
|
begin: '#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?',
|
||||||
|
relevance: 0
|
||||||
|
}
|
||||||
|
];
|
||||||
|
SUBST.contains = EXPRESSIONS;
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: 'Ceylon',
|
||||||
|
keywords: {
|
||||||
|
keyword: KEYWORDS.concat(DECLARATION_MODIFIERS),
|
||||||
|
meta: DOCUMENTATION
|
||||||
|
},
|
||||||
|
illegal: '\\$[^01]|#[^0-9a-fA-F]',
|
||||||
|
contains: [
|
||||||
|
hljs.C_LINE_COMMENT_MODE,
|
||||||
|
hljs.COMMENT('/\\*', '\\*/', { contains: [ 'self' ] }),
|
||||||
|
{
|
||||||
|
// compiler annotation
|
||||||
|
className: 'meta',
|
||||||
|
begin: '@[a-z]\\w*(?::"[^"]*")?'
|
||||||
|
}
|
||||||
|
].concat(EXPRESSIONS)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return ceylon;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
/*! `ceylon` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar=(()=>{"use strict";return e=>{
|
||||||
|
const a=["assembly","module","package","import","alias","class","interface","object","given","value","assign","void","function","new","of","extends","satisfies","abstracts","in","out","return","break","continue","throw","assert","dynamic","if","else","switch","case","for","while","try","catch","finally","then","let","this","outer","super","is","exists","nonempty"],s={
|
||||||
|
className:"subst",excludeBegin:!0,excludeEnd:!0,begin:/``/,end:/``/,keywords:a,
|
||||||
|
relevance:10},n=[{className:"string",begin:'"""',end:'"""',relevance:10},{
|
||||||
|
className:"string",begin:'"',end:'"',contains:[s]},{className:"string",
|
||||||
|
begin:"'",end:"'"},{className:"number",
|
||||||
|
begin:"#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?",
|
||||||
|
relevance:0}];return s.contains=n,{name:"Ceylon",keywords:{
|
||||||
|
keyword:a.concat(["shared","abstract","formal","default","actual","variable","late","native","deprecated","final","sealed","annotation","suppressWarnings","small"]),
|
||||||
|
meta:["doc","by","license","see","throws","tagged"]},
|
||||||
|
illegal:"\\$[^01]|#[^0-9a-fA-F]",
|
||||||
|
contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]}),{
|
||||||
|
className:"meta",begin:'@[a-z]\\w*(?::"[^"]*")?'}].concat(n)}}})()
|
||||||
|
;export default hljsGrammar;
|
||||||
|
|
@ -0,0 +1,75 @@
|
||||||
|
/*! `clean` grammar compiled for Highlight.js 11.10.0 */
|
||||||
|
var hljsGrammar = (function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Language: Clean
|
||||||
|
Author: Camil Staps <info@camilstaps.nl>
|
||||||
|
Category: functional
|
||||||
|
Website: http://clean.cs.ru.nl
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type LanguageFn */
|
||||||
|
function clean(hljs) {
|
||||||
|
const KEYWORDS = [
|
||||||
|
"if",
|
||||||
|
"let",
|
||||||
|
"in",
|
||||||
|
"with",
|
||||||
|
"where",
|
||||||
|
"case",
|
||||||
|
"of",
|
||||||
|
"class",
|
||||||
|
"instance",
|
||||||
|
"otherwise",
|
||||||
|
"implementation",
|
||||||
|
"definition",
|
||||||
|
"system",
|
||||||
|
"module",
|
||||||
|
"from",
|
||||||
|
"import",
|
||||||
|
"qualified",
|
||||||
|
"as",
|
||||||
|
"special",
|
||||||
|
"code",
|
||||||
|
"inline",
|
||||||
|
"foreign",
|
||||||
|
"export",
|
||||||
|
"ccall",
|
||||||
|
"stdcall",
|
||||||
|
"generic",
|
||||||
|
"derive",
|
||||||
|
"infix",
|
||||||
|
"infixl",
|
||||||
|
"infixr"
|
||||||
|
];
|
||||||
|
return {
|
||||||
|
name: 'Clean',
|
||||||
|
aliases: [
|
||||||
|
'icl',
|
||||||
|
'dcl'
|
||||||
|
],
|
||||||
|
keywords: {
|
||||||
|
keyword: KEYWORDS,
|
||||||
|
built_in:
|
||||||
|
'Int Real Char Bool',
|
||||||
|
literal:
|
||||||
|
'True False'
|
||||||
|
},
|
||||||
|
contains: [
|
||||||
|
hljs.C_LINE_COMMENT_MODE,
|
||||||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||||||
|
hljs.APOS_STRING_MODE,
|
||||||
|
hljs.QUOTE_STRING_MODE,
|
||||||
|
hljs.C_NUMBER_MODE,
|
||||||
|
{ // relevance booster
|
||||||
|
begin: '->|<-[|:]?|#!?|>>=|\\{\\||\\|\\}|:==|=:|<>' }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return clean;
|
||||||
|
|
||||||
|
})();
|
||||||
|
;
|
||||||
|
export default hljsGrammar;
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue