1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-06-17 19:09:55 +00:00

Initial commit

This commit is contained in:
jeremy@jermolene.com 2023-02-27 13:41:23 +00:00
parent 6479c26b59
commit 2d9d2fbc2c
3 changed files with 13 additions and 12 deletions

View File

@ -84,7 +84,8 @@ exports.parseTokenString = function(source,pos,token) {
}; };
/* /*
Look for a token matching a regex. Returns null if not found, otherwise returns {type: "regexp", match:, start:, end:,} Look for a token matching a regex at a specified position. Returns null if not found, otherwise returns {type: "regexp", match:, start:, end:,}
Use the "Y" (sticky) flag to avoid searching the entire rest of the string
*/ */
exports.parseTokenRegExp = function(source,pos,reToken) { exports.parseTokenRegExp = function(source,pos,reToken) {
var node = { var node = {
@ -145,7 +146,7 @@ exports.parseMacroParameter = function(source,pos) {
start: pos start: pos
}; };
// Define our regexp // Define our regexp
var reMacroParameter = /(?:([A-Za-z0-9\-_]+)\s*:)?(?:\s*(?:"""([\s\S]*?)"""|"([^"]*)"|'([^']*)'|\[\[([^\]]*)\]\]|((?:(?:>(?!>))|[^\s>"'])+)))/g; var reMacroParameter = /(?:([A-Za-z0-9\-_]+)\s*:)?(?:\s*(?:"""([\s\S]*?)"""|"([^"]*)"|'([^']*)'|\[\[([^\]]*)\]\]|((?:(?:>(?!>))|[^\s>"'])+)))/y;
// Skip whitespace // Skip whitespace
pos = $tw.utils.skipWhiteSpace(source,pos); pos = $tw.utils.skipWhiteSpace(source,pos);
// Look for the parameter // Look for the parameter
@ -184,7 +185,7 @@ exports.parseMacroInvocation = function(source,pos) {
params: [] params: []
}; };
// Define our regexps // Define our regexps
var reMacroName = /([^\s>"'=]+)/g; var reMacroName = /([^\s>"'=]+)/y;
// Skip whitespace // Skip whitespace
pos = $tw.utils.skipWhiteSpace(source,pos); pos = $tw.utils.skipWhiteSpace(source,pos);
// Look for a double less than sign // Look for a double less than sign
@ -221,7 +222,7 @@ exports.parseFilterVariable = function(source) {
params: [], params: [],
}, },
pos = 0, pos = 0,
reName = /([^\s"']+)/g; reName = /([^\s"']+)/y;
// If there is no whitespace or it is an empty string then there are no macro parameters // If there is no whitespace or it is an empty string then there are no macro parameters
if(/^\S*$/.test(source)) { if(/^\S*$/.test(source)) {
node.name = source; node.name = source;
@ -246,10 +247,10 @@ exports.parseAttribute = function(source,pos) {
start: pos start: pos
}; };
// Define our regexps // Define our regexps
var reAttributeName = /([^\/\s>"'=]+)/g, var reAttributeName = /([^\/\s>"'=]+)/y,
reUnquotedAttribute = /([^\/\s<>"'=]+)/g, reUnquotedAttribute = /([^\/\s<>"'=]+)/y,
reFilteredValue = /\{\{\{([\S\s]+?)\}\}\}/g, reFilteredValue = /\{\{\{([\S\s]+?)\}\}\}/y,
reIndirectValue = /\{\{([^\}]+)\}\}/g; reIndirectValue = /\{\{([^\}]+)\}\}/y;
// Skip whitespace // Skip whitespace
pos = $tw.utils.skipWhiteSpace(source,pos); pos = $tw.utils.skipWhiteSpace(source,pos);
// Get the attribute name // Get the attribute name

View File

@ -48,7 +48,7 @@ exports.parse = function() {
// Advance the parser position to past the tag // Advance the parser position to past the tag
this.parser.pos = tag.end; this.parser.pos = tag.end;
// Check for an immediately following double linebreak // Check for an immediately following double linebreak
var hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\S\n\r]*\r?\n(?:[^\S\n\r]*\r?\n|$))/g); var hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\S\n\r]*\r?\n(?:[^\S\n\r]*\r?\n|$))/y);
// Set whether we're in block mode // Set whether we're in block mode
tag.isBlock = this.is.block || hasLineBreak; tag.isBlock = this.is.block || hasLineBreak;
// Parse the body if we need to // Parse the body if we need to
@ -78,7 +78,7 @@ exports.parseTag = function(source,pos,options) {
orderedAttributes: [] orderedAttributes: []
}; };
// Define our regexps // Define our regexps
var reTagName = /([a-zA-Z0-9\-\$]+)/g; var reTagName = /([a-zA-Z0-9\-\$]+)/y;
// Skip whitespace // Skip whitespace
pos = $tw.utils.skipWhiteSpace(source,pos); pos = $tw.utils.skipWhiteSpace(source,pos);
// Look for a less than sign // Look for a less than sign
@ -129,7 +129,7 @@ exports.parseTag = function(source,pos,options) {
pos = token.end; pos = token.end;
// Check for a required line break // Check for a required line break
if(options.requireLineBreak) { if(options.requireLineBreak) {
token = $tw.utils.parseTokenRegExp(source,pos,/([^\S\n\r]*\r?\n(?:[^\S\n\r]*\r?\n|$))/g); token = $tw.utils.parseTokenRegExp(source,pos,/([^\S\n\r]*\r?\n(?:[^\S\n\r]*\r?\n|$))/y);
if(!token) { if(!token) {
return null; return null;
} }

View File

@ -116,7 +116,7 @@ exports.parseImage = function(source,pos) {
// Skip whitespace // Skip whitespace
pos = $tw.utils.skipWhiteSpace(source,pos); pos = $tw.utils.skipWhiteSpace(source,pos);
// Get the source up to the terminating `]]` // Get the source up to the terminating `]]`
token = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\]]*?)\|)?([^\]]+?)\]\]/g); token = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\]]*?)\|)?([^\]]+?)\]\]/y);
if(!token) { if(!token) {
return null; return null;
} }