mirror of
https://github.com/utleysam/codeblock-crbasic.git
synced 2026-07-22 07:32:57 +00:00
Manual upload of main.js
This commit is contained in:
parent
a6f9fac67c
commit
398f07cad3
1 changed files with 761 additions and 0 deletions
761
main.js
Normal file
761
main.js
Normal file
|
|
@ -0,0 +1,761 @@
|
|||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
|
||||
// src/main.ts
|
||||
var main_exports = {};
|
||||
__export(main_exports, {
|
||||
default: () => CodeBlockCRBasicPlugin
|
||||
});
|
||||
module.exports = __toCommonJS(main_exports);
|
||||
var import_obsidian = require("obsidian");
|
||||
|
||||
// src/cm6-crbasic.ts
|
||||
var import_view = require("@codemirror/view");
|
||||
var import_state = require("@codemirror/state");
|
||||
|
||||
// src/crbasic-tokens.ts
|
||||
var KEYWORDS = [
|
||||
"Alias",
|
||||
"ArrayIndex",
|
||||
"BeginProg",
|
||||
"EndProg",
|
||||
"Call",
|
||||
"CallTable",
|
||||
"Case",
|
||||
"Is",
|
||||
"Const",
|
||||
"ConstTable",
|
||||
"EndConstTable",
|
||||
"ContinueScan",
|
||||
"Delay",
|
||||
"Dim",
|
||||
"Do",
|
||||
"Else",
|
||||
"ElseIf",
|
||||
"Then",
|
||||
"EndIf",
|
||||
"EndSequence",
|
||||
"ESSInitialize",
|
||||
"EssVariables",
|
||||
"Exit",
|
||||
"ExitDo",
|
||||
"ExitFor",
|
||||
"ExitFunction",
|
||||
"ExitScan",
|
||||
"ExitSub",
|
||||
"FileManage",
|
||||
"To",
|
||||
"Function",
|
||||
"EndFunction",
|
||||
"If",
|
||||
"IfTime",
|
||||
"IIF",
|
||||
"Include",
|
||||
"IncludeSection",
|
||||
"Loop",
|
||||
"NewFieldNames",
|
||||
"Optional",
|
||||
"Public",
|
||||
"ReadOnly",
|
||||
"Scan",
|
||||
"NextScan",
|
||||
"Select",
|
||||
"EndSelect",
|
||||
"SemaphoreGet",
|
||||
"SemaphoreRelease",
|
||||
"SlowSequence",
|
||||
"Step",
|
||||
"Sub",
|
||||
"EndSub",
|
||||
"SubScan",
|
||||
"NextSubScan",
|
||||
"TriggerSequence",
|
||||
"Units",
|
||||
"Until",
|
||||
"WaitDigTrig",
|
||||
"WaitTriggerSequence",
|
||||
"While",
|
||||
"Wend",
|
||||
"For",
|
||||
"Next"
|
||||
];
|
||||
var PREPROCESSOR = [
|
||||
"#If",
|
||||
"#Else",
|
||||
"#ElseIf",
|
||||
"#EndIf",
|
||||
"#IfDev",
|
||||
"#If_no_remove",
|
||||
"#UnDef"
|
||||
];
|
||||
var LOGICAL_OPERATORS = [
|
||||
"AND",
|
||||
"IMP",
|
||||
"INTDV",
|
||||
"MOD",
|
||||
"NOT",
|
||||
"OR",
|
||||
"XOR"
|
||||
];
|
||||
var CONSTANTS = [
|
||||
"As",
|
||||
"True",
|
||||
"False",
|
||||
"LoggerType",
|
||||
"LoggerEndian",
|
||||
"CR_LITTLE_ENDIAN",
|
||||
"CR_BIG_ENDIAN"
|
||||
];
|
||||
var CDM = [
|
||||
"CDM_ACPower",
|
||||
"CDM_Battery",
|
||||
"CDM_BrFull",
|
||||
"CDM_BrFull6W",
|
||||
"CDM_BrHalf",
|
||||
"CDM_BrHalf3W",
|
||||
"CDM_BrHalf4W",
|
||||
"CDM_BridgeFilt",
|
||||
"CDM_Delay",
|
||||
"CDM_ExciteI",
|
||||
"CDM_ExciteV",
|
||||
"CDM_FFTFilt",
|
||||
"CDM_MuxSelect",
|
||||
"CDM_PanelTemp",
|
||||
"CDM_PeriodAvg",
|
||||
"CDM_PulsePort",
|
||||
"CDM_Resistance",
|
||||
"CDM_Resistance3W",
|
||||
"CDM_SW12",
|
||||
"CDM_SW5",
|
||||
"CDM_TCComp",
|
||||
"CDM_TCDiff",
|
||||
"CDM_TCSE",
|
||||
"CDM_Therm107",
|
||||
"CDM_Therm108",
|
||||
"CDM_Therm109",
|
||||
"CDM_VoltDiff",
|
||||
"CDM_VoltFilt",
|
||||
"CDM_VoltSE",
|
||||
"CDM_VW300Config",
|
||||
"CDM_VW300Dynamic",
|
||||
"CDM_VW300Rainflow",
|
||||
"CDM_VW300Static",
|
||||
"CPIAddModule",
|
||||
"CPIFileSend",
|
||||
"CPISpeed",
|
||||
"RainFlowSample"
|
||||
];
|
||||
var CUSTOM_MENUS = [
|
||||
"DisplayLine",
|
||||
"DisplayMenu",
|
||||
"EndMenu",
|
||||
"DisplayValue",
|
||||
"MenuItem",
|
||||
"MenuPick",
|
||||
"MenuRecompile",
|
||||
"SubMenu",
|
||||
"EndSubMenu"
|
||||
];
|
||||
var DATA_TABLE = [
|
||||
"Average",
|
||||
"CardFlush",
|
||||
"CardOut",
|
||||
"DataEvent",
|
||||
"DataInterval",
|
||||
"DataTable",
|
||||
"EndTable",
|
||||
"DataTime",
|
||||
"ETsz",
|
||||
"FFTSample",
|
||||
"FieldClassify",
|
||||
"FieldNames",
|
||||
"FieldOrigin",
|
||||
"FileMark",
|
||||
"FillStop",
|
||||
"GOESAppend",
|
||||
"GOESField",
|
||||
"GoesTable",
|
||||
"Histogram",
|
||||
"Histogram4D",
|
||||
"LevelCrossing",
|
||||
"Maximum",
|
||||
"Median",
|
||||
"Minimum",
|
||||
"Moment",
|
||||
"OpenInterval",
|
||||
"ResetTable",
|
||||
"Sample",
|
||||
"SampleFieldCal",
|
||||
"SampleMaxMin",
|
||||
"StdDev",
|
||||
"StructureType",
|
||||
"EndStructureType",
|
||||
"TableFieldNames",
|
||||
"TableFile",
|
||||
"TableHide",
|
||||
"Totalize",
|
||||
"WindVector",
|
||||
"WorstCase"
|
||||
];
|
||||
var DATALOGGER_STATUS = [
|
||||
"ApplyandRestartSequence",
|
||||
"EndApplyandRestartSequence",
|
||||
"ArrayLength",
|
||||
"CalFile",
|
||||
"Calibrate",
|
||||
"CheckPort",
|
||||
"ClockChange",
|
||||
"ClockSet",
|
||||
"ComPortIsActive",
|
||||
"Data",
|
||||
"DataLong",
|
||||
"DaylightSaving",
|
||||
"DaylightSavingUS",
|
||||
"Debug",
|
||||
"DebugBreak",
|
||||
"Encryption",
|
||||
"Erase",
|
||||
"EthernetPower",
|
||||
"FieldCal",
|
||||
"FieldCalStrain",
|
||||
"GetRecord",
|
||||
"GPS",
|
||||
"InstructionTimes",
|
||||
"LineNum",
|
||||
"LoadFieldCal",
|
||||
"MonitorComms",
|
||||
"Move",
|
||||
"MuxSelect",
|
||||
"NewFieldCal",
|
||||
"NewFile",
|
||||
"PipeLineMode",
|
||||
"PortBridge",
|
||||
"PortGet",
|
||||
"PortPairConfig",
|
||||
"PortsConfig",
|
||||
"PortSet",
|
||||
"PreserveVariables",
|
||||
"PulsePort",
|
||||
"PWM",
|
||||
"Read",
|
||||
"ReadIO",
|
||||
"RealTime",
|
||||
"Restart",
|
||||
"Restore",
|
||||
"SDI12SensorSetup",
|
||||
"SDI12SensorResponse",
|
||||
"SecsSince1990",
|
||||
"SequentialMode",
|
||||
"SetSecurity",
|
||||
"SetSetting",
|
||||
"SetStatus",
|
||||
"ShutDownBegin",
|
||||
"ShutDownEnd",
|
||||
"Signature",
|
||||
"StationName",
|
||||
"SW12",
|
||||
"SWVX",
|
||||
"TimeIntoInterval",
|
||||
"TimeIsBetween",
|
||||
"Timer",
|
||||
"WatchdogTimer",
|
||||
"WriteIO"
|
||||
];
|
||||
var FILE_IO = [
|
||||
"FileClose",
|
||||
"FileCopy",
|
||||
"FileEncrypt",
|
||||
"FileList",
|
||||
"FileManage",
|
||||
"FileOpen",
|
||||
"FileRead",
|
||||
"FileReadLine",
|
||||
"FileRename",
|
||||
"FileSize",
|
||||
"FileTime",
|
||||
"FileWrite",
|
||||
"GetFile",
|
||||
"GZip",
|
||||
"NewFile",
|
||||
"SendFile"
|
||||
];
|
||||
var INTERNET = [
|
||||
"DHCPRenew",
|
||||
"EmailRecv",
|
||||
"EmailRelay",
|
||||
"EmailSend",
|
||||
"EthernetPower",
|
||||
"FTPClient",
|
||||
"HTTPGet",
|
||||
"HTTPOut",
|
||||
"HTTPPost",
|
||||
"HTTPPut",
|
||||
"IPInfo",
|
||||
"IPNetPower",
|
||||
"IPRoute",
|
||||
"IPTrace",
|
||||
"MQTTConnect",
|
||||
"MQTTPublish",
|
||||
"MQTTPublishConstTable",
|
||||
"MQTTPublishTable",
|
||||
"NetworkTimeProtocol",
|
||||
"PingIP",
|
||||
"PPPClose",
|
||||
"PPPOpen",
|
||||
"SMSRecv",
|
||||
"SMSSend",
|
||||
"SNMPVariable",
|
||||
"TCPActiveConnections",
|
||||
"TCPClose",
|
||||
"TCPOpen",
|
||||
"DNSQuery",
|
||||
"UDPDataGram",
|
||||
"UDPOpen",
|
||||
"UDPSocketClose",
|
||||
"UDPSocketOpen",
|
||||
"UDPSocketRecv",
|
||||
"UDPSocketSend",
|
||||
"WebPageBegin",
|
||||
"WebPageEnd",
|
||||
"XMLParse"
|
||||
];
|
||||
var MATH = [
|
||||
"ABS",
|
||||
"ACOS",
|
||||
"AddPrecise",
|
||||
"AngleDegrees",
|
||||
"ASCII",
|
||||
"ASIN",
|
||||
"ATN",
|
||||
"ATN2",
|
||||
"AvgRun",
|
||||
"AvgSpa",
|
||||
"Ceiling",
|
||||
"CheckSum",
|
||||
"COS",
|
||||
"COSH",
|
||||
"Covariance",
|
||||
"CovSpa",
|
||||
"CTYPE",
|
||||
"DewPoint",
|
||||
"EXP",
|
||||
"FFT",
|
||||
"FFTSpa",
|
||||
"FindSpa",
|
||||
"FIX",
|
||||
"Floor",
|
||||
"FRAC",
|
||||
"Hex",
|
||||
"HexToDec",
|
||||
"INT",
|
||||
"LN",
|
||||
"LOG",
|
||||
"LOG10",
|
||||
"Matrix",
|
||||
"MaxRun",
|
||||
"MaxSpa",
|
||||
"MinRun",
|
||||
"MinSpa",
|
||||
"MoveBytes",
|
||||
"MovePrecise",
|
||||
"PeakValley",
|
||||
"PRT",
|
||||
"PRTCalc",
|
||||
"PWR",
|
||||
"Rainflow",
|
||||
"Randomize",
|
||||
"RectPolar",
|
||||
"RMSSpa",
|
||||
"RND",
|
||||
"Round",
|
||||
"SatVP",
|
||||
"SGN",
|
||||
"SIN",
|
||||
"SINH",
|
||||
"SolarPosition",
|
||||
"SortSpa",
|
||||
"SortSpaIndexed",
|
||||
"SQR",
|
||||
"StdDevRun",
|
||||
"StdDevSpa",
|
||||
"StrainCalc",
|
||||
"TAN",
|
||||
"TANH",
|
||||
"TotalRun",
|
||||
"VaporPressure",
|
||||
"WetDryBulb"
|
||||
];
|
||||
var MEASUREMENTS = [
|
||||
"ACPower",
|
||||
"AM25T",
|
||||
"AVW200",
|
||||
"Battery",
|
||||
"BrFull",
|
||||
"BrFull6W",
|
||||
"BrHalf",
|
||||
"BrHalf3W",
|
||||
"BrHalf4W",
|
||||
"CS616",
|
||||
"CS7500",
|
||||
"CSAT3",
|
||||
"CSAT3B",
|
||||
"CSAT3BMonitor",
|
||||
"CurrentSE",
|
||||
"CWB100",
|
||||
"CWB100Diagnostics",
|
||||
"CWB100Routes",
|
||||
"CWB100RSSI",
|
||||
"EC100",
|
||||
"EC100Configure",
|
||||
"ExciteI",
|
||||
"ExciteV",
|
||||
"HydraProbe",
|
||||
"LI7200",
|
||||
"LI7700",
|
||||
"PanelTemp",
|
||||
"PeriodAvg",
|
||||
"PulseCount",
|
||||
"PulseCountReset",
|
||||
"Quadrature",
|
||||
"Resistance",
|
||||
"Resistance3W",
|
||||
"SDI12Recorder",
|
||||
"TCDiff",
|
||||
"TCSE",
|
||||
"TDR100",
|
||||
"TDR200",
|
||||
"TGA",
|
||||
"Therm107",
|
||||
"Therm108",
|
||||
"Therm109",
|
||||
"TimerInput",
|
||||
"VoltDiff",
|
||||
"VoltSE"
|
||||
];
|
||||
var PAKBUS = [
|
||||
"AcceptDataRecords",
|
||||
"Broadcast",
|
||||
"ClockReport",
|
||||
"DataGram",
|
||||
"EncryptExempt",
|
||||
"GetDataRecord",
|
||||
"GetFile",
|
||||
"GetVariables",
|
||||
"NetWork",
|
||||
"PakBusCLock",
|
||||
"Route",
|
||||
"RouteNeighbors",
|
||||
"Routes",
|
||||
"SendData",
|
||||
"SendFile",
|
||||
"SendGetVariables",
|
||||
"SendTableDef",
|
||||
"SendVariables",
|
||||
"StaticRoute",
|
||||
"TimeUntilTransmit"
|
||||
];
|
||||
var SDM = [
|
||||
"SDMAO4",
|
||||
"SDMAO4A",
|
||||
"SDMBeginPort",
|
||||
"SDMCAN",
|
||||
"SDMCD16AC",
|
||||
"SDMCD16Mask",
|
||||
"SDMCVO4",
|
||||
"SDMGeneric",
|
||||
"SDMINT8",
|
||||
"SDMIO16",
|
||||
"SDMSIO2R",
|
||||
"SDMSIO4",
|
||||
"SDMSpeed",
|
||||
"SDMSW8A",
|
||||
"SDMTrigger",
|
||||
"SDMX50"
|
||||
];
|
||||
var SPECIAL_COMM = [
|
||||
"ArgosData",
|
||||
"ArgosDataRepeat",
|
||||
"ArgosError",
|
||||
"ArgosSetup",
|
||||
"ArgosTransmit",
|
||||
"DialModem",
|
||||
"DialSequence",
|
||||
"DialEndSequence",
|
||||
"DNP",
|
||||
"DNPUpdate",
|
||||
"DNPVariable",
|
||||
"GOESData",
|
||||
"GOESGPS",
|
||||
"GOESSetup",
|
||||
"GOESStatus",
|
||||
"GPS",
|
||||
"I2COpen",
|
||||
"I2CRead",
|
||||
"I2CWrite",
|
||||
"ModBusClient",
|
||||
"ModBusServer",
|
||||
"ModemCallBack",
|
||||
"ModemHangup",
|
||||
"EndModemHangup",
|
||||
"SPIOpen",
|
||||
"SPIRead",
|
||||
"SPIWrite"
|
||||
];
|
||||
var SERIAL_IO = [
|
||||
"CheckSum",
|
||||
"ComPortIsActive",
|
||||
"MoveBytes",
|
||||
"SerialBrk",
|
||||
"SerialClose",
|
||||
"SerialFlush",
|
||||
"SerialIn",
|
||||
"SerialInBlock",
|
||||
"SerialInChk",
|
||||
"SerialInRecord",
|
||||
"SerialOpen",
|
||||
"SerialOut",
|
||||
"SerialOutBlock"
|
||||
];
|
||||
var STRING_MANIP = [
|
||||
"ASCII",
|
||||
"Base64Encode",
|
||||
"CHR",
|
||||
"FormatFloat",
|
||||
"FormatLong",
|
||||
"FormatLongLong",
|
||||
"Hex",
|
||||
"HexToDec",
|
||||
"InStr",
|
||||
"Left",
|
||||
"Len",
|
||||
"LowerCase",
|
||||
"LTrim",
|
||||
"Mid",
|
||||
"Replace",
|
||||
"Right",
|
||||
"RTrim",
|
||||
"SplitStr",
|
||||
"Sprintf",
|
||||
"StrComp",
|
||||
"Trim",
|
||||
"TypeOf",
|
||||
"UpperCase"
|
||||
];
|
||||
var FUNCTIONS = Array.from(/* @__PURE__ */ new Set([
|
||||
...CDM,
|
||||
...CUSTOM_MENUS,
|
||||
...DATA_TABLE,
|
||||
...DATALOGGER_STATUS,
|
||||
...FILE_IO,
|
||||
...INTERNET,
|
||||
...MATH,
|
||||
...MEASUREMENTS,
|
||||
...PAKBUS,
|
||||
...SDM,
|
||||
...SPECIAL_COMM,
|
||||
...SERIAL_IO,
|
||||
...STRING_MANIP
|
||||
]));
|
||||
function wordSet(words) {
|
||||
return new Set(words.map((w) => w.toLowerCase()));
|
||||
}
|
||||
|
||||
// src/tokenizer.ts
|
||||
var kwSet = wordSet(KEYWORDS);
|
||||
var opsSet = wordSet(LOGICAL_OPERATORS);
|
||||
var constsSet = wordSet(CONSTANTS);
|
||||
var fnsSet = wordSet(FUNCTIONS);
|
||||
var preprocSet = new Set(PREPROCESSOR.map((p) => p.toLowerCase()));
|
||||
function tokenizeLine(line, offset) {
|
||||
const tokens = [];
|
||||
let i = 0;
|
||||
const len = line.length;
|
||||
while (i < len) {
|
||||
if (/\s/.test(line[i])) {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if (line[i] === "'") {
|
||||
tokens.push({ from: offset + i, to: offset + len, type: "comment" });
|
||||
break;
|
||||
}
|
||||
if (line[i] === '"') {
|
||||
const start = i;
|
||||
i++;
|
||||
while (i < len && line[i] !== '"') i++;
|
||||
if (i < len) i++;
|
||||
tokens.push({ from: offset + start, to: offset + i, type: "string" });
|
||||
continue;
|
||||
}
|
||||
if (line[i] === "#") {
|
||||
const m = line.slice(i).match(/^#\w+/i);
|
||||
if (m && preprocSet.has(m[0].toLowerCase())) {
|
||||
tokens.push({ from: offset + i, to: offset + i + m[0].length, type: "meta" });
|
||||
i += m[0].length;
|
||||
continue;
|
||||
}
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if (/\d/.test(line[i])) {
|
||||
const m = line.slice(i).match(/^\d+(\.\d+)?/);
|
||||
if (m) {
|
||||
tokens.push({ from: offset + i, to: offset + i + m[0].length, type: "number" });
|
||||
i += m[0].length;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
const opMatch = line.slice(i).match(/^(<>|>>|<<|>=|<=|\*=|\+=|-=|\/=|\\=|\^=|&=)/);
|
||||
if (opMatch) {
|
||||
tokens.push({ from: offset + i, to: offset + i + opMatch[0].length, type: "operator" });
|
||||
i += opMatch[0].length;
|
||||
continue;
|
||||
}
|
||||
if (/[+\-*/\\^<>=&@!]/.test(line[i])) {
|
||||
tokens.push({ from: offset + i, to: offset + i + 1, type: "operator" });
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if (/[A-Za-z_]/.test(line[i])) {
|
||||
const m = line.slice(i).match(/^[A-Za-z_]\w*/);
|
||||
if (m) {
|
||||
const word = m[0].toLowerCase();
|
||||
let type = null;
|
||||
if (kwSet.has(word)) type = "keyword";
|
||||
else if (opsSet.has(word)) type = "operator";
|
||||
else if (constsSet.has(word)) type = "atom";
|
||||
else if (fnsSet.has(word)) type = "builtin";
|
||||
if (type) {
|
||||
tokens.push({ from: offset + i, to: offset + i + m[0].length, type });
|
||||
}
|
||||
i += m[0].length;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return tokens;
|
||||
}
|
||||
function cmClass(type) {
|
||||
return `cm-${type}`;
|
||||
}
|
||||
|
||||
// src/cm6-crbasic.ts
|
||||
var decoCache = {};
|
||||
function getDeco(type) {
|
||||
const cls = cmClass(type);
|
||||
if (!decoCache[cls]) {
|
||||
decoCache[cls] = import_view.Decoration.mark({ class: cls });
|
||||
}
|
||||
return decoCache[cls];
|
||||
}
|
||||
var CRBasicHighlighter = class {
|
||||
constructor(view) {
|
||||
this.decorations = this.buildDecorations(view);
|
||||
}
|
||||
update(update) {
|
||||
if (update.docChanged || update.viewportChanged) {
|
||||
this.decorations = this.buildDecorations(update.view);
|
||||
}
|
||||
}
|
||||
buildDecorations(view) {
|
||||
const builder = new import_state.RangeSetBuilder();
|
||||
const doc = view.state.doc;
|
||||
let inCrbasicBlock = false;
|
||||
const contentLines = [];
|
||||
for (let i = 1; i <= doc.lines; i++) {
|
||||
const line = doc.line(i);
|
||||
const trimmed = line.text.trim().toLowerCase();
|
||||
if (!inCrbasicBlock) {
|
||||
if (/^```crbasic\s*$/i.test(line.text.trim())) {
|
||||
inCrbasicBlock = true;
|
||||
contentLines.length = 0;
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
if (/^```\s*$/.test(line.text.trim())) {
|
||||
for (const cl of contentLines) {
|
||||
const tokens = tokenizeLine(cl.text, cl.from);
|
||||
for (const tok of tokens) {
|
||||
if (tok.from < tok.to) {
|
||||
builder.add(tok.from, tok.to, getDeco(tok.type));
|
||||
}
|
||||
}
|
||||
}
|
||||
inCrbasicBlock = false;
|
||||
continue;
|
||||
}
|
||||
contentLines.push({ from: line.from, text: line.text });
|
||||
}
|
||||
}
|
||||
return builder.finish();
|
||||
}
|
||||
};
|
||||
var crbasicHighlighter = import_view.ViewPlugin.fromClass(CRBasicHighlighter, {
|
||||
decorations: (v) => v.decorations
|
||||
});
|
||||
|
||||
// src/main.ts
|
||||
var PRISM_CLASSES = {
|
||||
keyword: ["token", "keyword"],
|
||||
builtin: ["token", "function"],
|
||||
operator: ["token", "operator"],
|
||||
atom: ["token", "boolean"],
|
||||
number: ["token", "number"],
|
||||
string: ["token", "string"],
|
||||
comment: ["token", "comment"],
|
||||
meta: ["token", "keyword"]
|
||||
};
|
||||
var CodeBlockCRBasicPlugin = class extends import_obsidian.Plugin {
|
||||
async onload() {
|
||||
this.registerEditorExtension(crbasicHighlighter);
|
||||
this.registerMarkdownCodeBlockProcessor("crbasic", (source, el) => {
|
||||
const pre = el.createEl("pre", { cls: ["language-crbasic"] });
|
||||
const code = pre.createEl("code", { cls: ["language-crbasic", "is-loaded"] });
|
||||
const lines = source.split("\n");
|
||||
for (let li = 0; li < lines.length; li++) {
|
||||
const lineText = lines[li];
|
||||
const tokens = tokenizeLine(lineText, 0);
|
||||
if (tokens.length === 0) {
|
||||
code.appendText(lineText);
|
||||
} else {
|
||||
let cursor = 0;
|
||||
for (const tok of tokens) {
|
||||
if (tok.from > cursor) {
|
||||
code.appendText(lineText.slice(cursor, tok.from));
|
||||
}
|
||||
code.createEl("span", {
|
||||
cls: PRISM_CLASSES[tok.type],
|
||||
text: lineText.slice(tok.from, tok.to)
|
||||
});
|
||||
cursor = tok.to;
|
||||
}
|
||||
if (cursor < lineText.length) {
|
||||
code.appendText(lineText.slice(cursor));
|
||||
}
|
||||
}
|
||||
if (li < lines.length - 1) {
|
||||
code.appendText("\n");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
onunload() {
|
||||
}
|
||||
};
|
||||
Loading…
Reference in a new issue