@mdfriday/foundry
Version:
The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.
87 lines • 2.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseBytes = parseBytes;
exports.posFromInput = posFromInput;
const log_1 = require("../../../../pkg/log");
const pageparser_1 = require("../../../../pkg/md/parser/pageparser");
// Create a domain-specific logger for markdown operations
const log = (0, log_1.getDomainLogger)('markdown', { component: 'pageparser' });
/**
* Parse bytes into items
*/
function parseBytes(input, config = {}) {
const [items, err] = (0, pageparser_1.ParseBytes)(input, config);
if (err) {
log.error('Error parsing bytes:', err);
throw err; // Re-throw the error for upstream handling
}
return items;
}
/**
* Create position from input and offset
*/
function posFromInput(filename, input, offset) {
const inputBytes = typeof input === 'string' ? stringToBytes(input) : input;
if (offset < 0) {
return {
filename,
line: 1,
column: 1,
offset: 0,
};
}
let lineNumber = 1;
let columnNumber = 1;
for (let i = 0; i < Math.min(offset, inputBytes.length); i++) {
if (inputBytes[i] === 10) { // '\n'
lineNumber++;
columnNumber = 1;
}
else {
columnNumber++;
}
}
return {
filename,
line: lineNumber,
column: columnNumber,
offset,
};
}
/**
* Find index of pattern in array
*/
function findIndex(array, pattern) {
if (pattern.length === 0) {
return 0;
}
if (pattern.length > array.length) {
return -1;
}
for (let i = 0; i <= array.length - pattern.length; i++) {
let found = true;
for (let j = 0; j < pattern.length; j++) {
if (array[i + j] !== pattern[j]) {
found = false;
break;
}
}
if (found) {
return i;
}
}
return -1;
}
/**
* Convert string to bytes
*/
function stringToBytes(str) {
return new TextEncoder().encode(str);
}
/**
* Convert bytes to string
*/
function bytesToString(bytes) {
return new TextDecoder().decode(bytes);
}
//# sourceMappingURL=pageparser.js.map