mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-01-07 07:50:26 +00:00
feat: refine the ast type
This commit is contained in:
parent
c56afea741
commit
06204b1580
@ -15,6 +15,9 @@ Wiki text rule for code blocks. For example:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {import("$:/core/modules/parsers/base.js").ParseTreeAttribute} ParseTreeAttribute
|
* @typedef {import("$:/core/modules/parsers/base.js").ParseTreeAttribute} ParseTreeAttribute
|
||||||
|
* @typedef {import('../wikirulebase.js').WikiRuleBase} WikiRuleBase
|
||||||
|
* @typedef {import('../../base.js').Parser} Parser
|
||||||
|
* @typedef {typeof exports & WikiRuleBase} ThisRule
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -48,6 +51,7 @@ exports.init = function(parser) {
|
|||||||
/**
|
/**
|
||||||
* Parses the code block and returns an array of `codeblock` widgets.
|
* Parses the code block and returns an array of `codeblock` widgets.
|
||||||
*
|
*
|
||||||
|
* @this {ThisRule}
|
||||||
* @returns {ParseTreeCodeblockNode[]} An array containing a single codeblock widget object.
|
* @returns {ParseTreeCodeblockNode[]} An array containing a single codeblock widget object.
|
||||||
*/
|
*/
|
||||||
exports.parse = function() {
|
exports.parse = function() {
|
||||||
|
@ -21,6 +21,9 @@ This is a widget invocation
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {import("$:/core/modules/parsers/base.js").ParseTreeAttribute} ParseTreeAttribute
|
* @typedef {import("$:/core/modules/parsers/base.js").ParseTreeAttribute} ParseTreeAttribute
|
||||||
|
* @typedef {import('../wikirulebase.js').WikiRuleBase} WikiRuleBase
|
||||||
|
* @typedef {import('../../base.js').Parser} Parser
|
||||||
|
* @typedef {typeof exports & WikiRuleBase & {nextTag?:ParseTreeHtmlNode;}} ThisRule
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -51,10 +54,18 @@ This is a widget invocation
|
|||||||
exports.name = "html";
|
exports.name = "html";
|
||||||
exports.types = {inline: true, block: true};
|
exports.types = {inline: true, block: true};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Parser} parser
|
||||||
|
*/
|
||||||
exports.init = function(parser) {
|
exports.init = function(parser) {
|
||||||
this.parser = parser;
|
this.parser = parser;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @this {ThisRule}
|
||||||
|
* @param {number} startPos
|
||||||
|
* @returns {number | undefined} Start position of next HTML tag
|
||||||
|
*/
|
||||||
exports.findNextMatch = function(startPos) {
|
exports.findNextMatch = function(startPos) {
|
||||||
// Find the next tag
|
// Find the next tag
|
||||||
this.nextTag = this.findNextTag(this.parser.source,startPos,{
|
this.nextTag = this.findNextTag(this.parser.source,startPos,{
|
||||||
@ -65,7 +76,7 @@ exports.findNextMatch = function(startPos) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse most recent match
|
* Parse most recent match
|
||||||
*
|
* @this {ThisRule}
|
||||||
* @returns {ParseTreeHtmlNode[]} Array containing parsed HTML tag object
|
* @returns {ParseTreeHtmlNode[]} Array containing parsed HTML tag object
|
||||||
*/
|
*/
|
||||||
exports.parse = function() {
|
exports.parse = function() {
|
||||||
@ -191,6 +202,15 @@ exports.parseTag = function(source,pos,options) {
|
|||||||
return node;
|
return node;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the next HTML tag in the source
|
||||||
|
*
|
||||||
|
* @this {ThisRule}
|
||||||
|
* @param {string} source
|
||||||
|
* @param {number} pos - Position to start searching from
|
||||||
|
* @param {Object} options
|
||||||
|
* @returns {Object|null} Parsed tag object or null if no valid tag is found
|
||||||
|
*/
|
||||||
exports.findNextTag = function(source,pos,options) {
|
exports.findNextTag = function(source,pos,options) {
|
||||||
// A regexp for finding candidate HTML tags
|
// A regexp for finding candidate HTML tags
|
||||||
var reLookahead = /<([a-zA-Z\-\$\.]+)/g;
|
var reLookahead = /<([a-zA-Z\-\$\.]+)/g;
|
||||||
|
@ -12,22 +12,46 @@ Base class for wiki parser rules
|
|||||||
/*global $tw: false */
|
/*global $tw: false */
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
/*
|
/**
|
||||||
This constructor is always overridden with a blank constructor, and so shouldn't be used
|
* @typedef {import('../base').Parser} Parser
|
||||||
*/
|
*/
|
||||||
var WikiRuleBase = function() {
|
|
||||||
|
/**
|
||||||
|
* Base class for wiki rules.
|
||||||
|
* This constructor is always overridden with a blank constructor, and so shouldn't be used
|
||||||
|
*
|
||||||
|
* @class
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
function WikiRuleBase() {
|
||||||
|
/**
|
||||||
|
* Inject by parser
|
||||||
|
* @type {Record<"pragma"|"block"|"inline", boolean>}
|
||||||
|
*/
|
||||||
|
this.is = {};
|
||||||
|
/**
|
||||||
|
* @type {RegExp}
|
||||||
|
*/
|
||||||
|
this.matchRegExp;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/**
|
||||||
To be overridden by individual rules
|
* Initialize rule with given parser instance
|
||||||
*/
|
* To be overridden by individual rules
|
||||||
|
*
|
||||||
|
* @param {Parser} parser - Parser instance to initialize with
|
||||||
|
*/
|
||||||
WikiRuleBase.prototype.init = function(parser) {
|
WikiRuleBase.prototype.init = function(parser) {
|
||||||
this.parser = parser;
|
this.parser = parser;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/**
|
||||||
Default implementation of findNextMatch uses RegExp matching
|
* Default implementation of findNextMatch uses RegExp matching
|
||||||
*/
|
* Find next match in source starting from given position using RegExp matching
|
||||||
|
*
|
||||||
|
* @param {number} startPos - Position to start searching from
|
||||||
|
* @returns {number|undefined} Index of next match or undefined if no match is found
|
||||||
|
*/
|
||||||
WikiRuleBase.prototype.findNextMatch = function(startPos) {
|
WikiRuleBase.prototype.findNextMatch = function(startPos) {
|
||||||
this.matchRegExp.lastIndex = startPos;
|
this.matchRegExp.lastIndex = startPos;
|
||||||
this.match = this.matchRegExp.exec(this.parser.source);
|
this.match = this.matchRegExp.exec(this.parser.source);
|
||||||
|
8
types/ast.d.ts
vendored
8
types/ast.d.ts
vendored
@ -1,6 +1,6 @@
|
|||||||
import { ParseTreeCodeblockNode } from './core/modules/parsers/wikiparser/rules/codeblock';
|
import { ParseTreeCodeblockNode } from '$:/core/modules/parsers/wikiparser/rules/codeblock.js';
|
||||||
export { ParseTreeCodeblockNode } from './core/modules/parsers/wikiparser/rules/codeblock';
|
export { ParseTreeCodeblockNode } from '$:/core/modules/parsers/wikiparser/rules/codeblock.js';
|
||||||
import { ParseTreeHtmlNode } from './core/modules/parsers/wikiparser/rules/html';
|
import { ParseTreeHtmlNode } from '$:/core/modules/parsers/wikiparser/rules/html.js';
|
||||||
export { ParseTreeHtmlNode } from './core/modules/parsers/wikiparser/rules/html';
|
export { ParseTreeHtmlNode } from '$:/core/modules/parsers/wikiparser/rules/html.js';
|
||||||
|
|
||||||
export type WikiASTNode = ParseTreeCodeblockNode | ParseTreeHtmlNode;
|
export type WikiASTNode = ParseTreeCodeblockNode | ParseTreeHtmlNode;
|
||||||
|
Loading…
Reference in New Issue
Block a user