Test reverse lookup with no leading zeros

This commit is contained in:
2026-03-26 13:55:50 +01:00
parent 9a4a0a490e
commit 15028da9ff
2 changed files with 45 additions and 9 deletions

View File

@@ -37,6 +37,27 @@ const namePos = {
dn: 2 dn: 2
}; };
/**
* Remove leading zeroes
* from canvas and image file
* name segments (parts)
* @see getCanvasName()
* @see ManifestBuilder.getImageName()
* @param {String} segment
*/
const normaliseSegment = (segment) => {
segment.replaceAll(/^([a-z]+)?0*(\d+)/ig, '$1$2');
}
/**
* Normalize a full canvas name
* @param {String} name
*/
const normaliseName = (name) => {
// Account for separate parts in name
// and rejoin them after normalisation
name.split('&').map(normaliseSegment).join('&');
}
/** /**
* @param {string} imgFilename * @param {string} imgFilename
* @returns {ParsedMetadata} * @returns {ParsedMetadata}
@@ -180,15 +201,31 @@ export function getCanvasName(imgFilename, technique) {
canvasName += imgFilename.split('_')[3].replace(/\..*$/,''); canvasName += imgFilename.split('_')[3].replace(/\..*$/,'');
} }
// Check if name is of `fr01&02` type... return normaliseName(canvasName);
let names = canvasName.split('&'); }
/**
* Get image name for given canvas
* @param {Canvas} canvas The Canvas object
* @returns {string}
*/
async function getImageName(canvas) {
const images = await getImageList(canvas.resourceId);
let adjustedCanvasName = canvas.name;
// Remove leading zeroes everywhere // Adjust canvas name for HSI with PCA...
names = names.map(name => name.replaceAll(/^([a-z]+)?0*(\d+)/ig, '$1$2')); if (/pc(1|3)/.test(canvas.name)) {
// Rejoin if needed... adjustedCanvasName = canvas.name.replace(
canvasName = names.join('&'); /pc((1|3))/,
function (match, group1) {
return `_HSI_PC${group1}`;
}
);
}
return canvasName; return images.filter(i => {
const segment = i.split('_')[namePos[canvas.technique]];
return normaliseName(segment) === adjustedCanvasName;
});
} }
/** /**
* Generate canvas label from canvasName * Generate canvas label from canvasName

View File

@@ -52,7 +52,7 @@ export async function buildManifest(manifestId) {
export async function buildCanvas(manifestId, name) { export async function buildCanvas(manifestId, name) {
const manifest = new Manifest(IIIF_API_VERSION, BASE_URL); const manifest = new Manifest(IIIF_API_VERSION, BASE_URL);
manifest.generateID(manifestId); manifest.generateID(manifestId);
let filename = await getImageName(name, manifestId); let filename = await getImageName(name, manifest);
return createCanvas(manifest, filename); return createCanvas(manifest, filename);
} }
@@ -143,7 +143,6 @@ async function populateCanvases (manifest, images) {
} }
/** /**
* Get image name for given canvas * Get image name for given canvas
* @todo Use regex in filter!!
* @param {String} name The canvas name * @param {String} name The canvas name
* @param {String} manifestId The manifest (resource) id * @param {String} manifestId The manifest (resource) id
* @returns {string} * @returns {string}