/** * A symbology-specific configuration object. * * See https://docs.scandit.com/stable/c_api/symbologies.html for more details. */ export class SymbologySettings { private enabled: boolean; private colorInvertedEnabled: boolean; private activeSymbolCounts: number[]; private extensions: Set; private checksums: Set; private customExtensions: boolean; private customChecksums: boolean; /** * Create a SymbologySettings instance. * * @param enabled
Default = false
* Whether the symbology is enabled for recognition. * @param colorInvertedEnabled
Default = false
* Whether color inverted recognition is enabled. * @param activeSymbolCounts *
Default = []  (default symbology range)
* The list of active symbol counts. * @param extensions *
Default = undefined  (default symbology extensions)
* The list/set of enabled extensions. * @param checksums *
Default = undefined  (default symbology checksums)
* The list/set of enabled checksums. */ constructor({ enabled = false, colorInvertedEnabled = false, activeSymbolCounts = [], extensions, checksums }: { enabled?: boolean; colorInvertedEnabled?: boolean; activeSymbolCounts?: number[]; extensions?: SymbologySettings.Extension[] | Set; checksums?: SymbologySettings.Checksum[] | Set; } = {}) { this.enabled = enabled; this.colorInvertedEnabled = colorInvertedEnabled; this.activeSymbolCounts = activeSymbolCounts; this.customExtensions = extensions != null; this.customChecksums = checksums != null; if (extensions == null) { extensions = []; } if (checksums == null) { checksums = []; } this.extensions = new Set( Array.from(extensions).filter(extension => { return this.isValidExtension(extension); }) ); this.checksums = new Set( Array.from(checksums).filter(checksum => { return this.isValidChecksum(checksum); }) ); } /** * @returns Whether the symbology enabled for recognition. */ public isEnabled(): boolean { return this.enabled; } /** * Enable or disable recognition of the symbology. * * @param enabled Whether the symbology is enabled for recognition. * @returns The updated [[SymbologySettings]] object. */ public setEnabled(enabled: boolean): SymbologySettings { this.enabled = enabled; return this; } /** * @returns Whether color inverted recognition is enabled. */ public isColorInvertedEnabled(): boolean { return this.colorInvertedEnabled; } /** * Enable or disable recognition of inverted-color symbology (in addition to normal colors). * * @param enabled Whether color inverted recognition is enabled. * @returns The updated [[SymbologySettings]] object. */ public setColorInvertedEnabled(enabled: boolean): SymbologySettings { this.colorInvertedEnabled = enabled; return this; } /** * Get the currently set custom list of active symbol counts. * If never set, an empty array is returned * but the Scandit Engine library will use the default list for the symbology. * * @returns The list of active symbol counts. */ public getActiveSymbolCounts(): number[] { return this.activeSymbolCounts; } /** * Set the list of active symbol counts. * * @param activeSymbolCounts The list of active symbol counts. * @returns The updated [[SymbologySettings]] object. */ public setActiveSymbolCounts(activeSymbolCounts: number[]): SymbologySettings { this.activeSymbolCounts = activeSymbolCounts; return this; } /** * Set the (inclusive) range of active symbol counts. * * @param minCount The minimum accepted number of symbols. * @param maxCount The maximum accepted number of symbols. * @returns The updated [[SymbologySettings]] object. */ public setActiveSymbolCountsRange(minCount: number, maxCount: number): SymbologySettings { this.activeSymbolCounts = Array.from({ length: maxCount - minCount + 1 }, (_, k) => { return k + minCount; }); return this; } /** * Get the currently set custom set of extensions. * If never set, an empty set is returned * but the Scandit Engine library will use the default extension set for the symbology. * * @returns The set of enabled extensions. */ public getEnabledExtensions(): Set { return this.extensions; } /** * Enable an extension or list/set of extensions * * @param extension The single extension or list/set of extensions to enable. * @returns The updated [[SymbologySettings]] object. */ public enableExtensions( extension: SymbologySettings.Extension | SymbologySettings.Extension[] | Set ): SymbologySettings { this.customExtensions = true; if (typeof extension === "object") { this.extensions = new Set([ ...this.extensions, ...Array.from(extension).filter(e => { return this.isValidExtension(e); }) ]); } else { if (this.isValidExtension(extension)) { this.extensions.add(extension); } } return this; } /** * Disable an extension or list/set of extensions. * * @param extension The single extension or list/set of extensions to disable. * @returns The updated [[SymbologySettings]] object. */ public disableExtensions( extension: SymbologySettings.Extension | SymbologySettings.Extension[] | Set ): SymbologySettings { if (typeof extension === "object") { this.extensions = new Set( [...this.extensions].filter(x => { return extension instanceof Array ? !extension.includes(x) : !extension.has(x); }) ); } else { this.extensions.delete(extension); } return this; } /** * Get the currently set custom set of checksums. * If never set, an empty set is returned * but the Scandit Engine library will use the default checksum set for the symbology. * * @returns The set of enabled checksums. */ public getEnabledChecksums(): Set { return this.checksums; } /** * Enable a checksum or list/set of checksums. * * @param checksum The single checksum or list/set of checksums to enable. * @returns The updated [[SymbologySettings]] object. */ public enableChecksums( checksum: SymbologySettings.Checksum | SymbologySettings.Checksum[] | Set ): SymbologySettings { this.customChecksums = true; if (typeof checksum === "object") { this.checksums = new Set([ ...this.checksums, ...Array.from(checksum).filter(c => { return this.isValidChecksum(c); }) ]); } else { if (this.isValidChecksum(checksum)) { this.checksums.add(checksum); } } return this; } /** * Disable a checksum or list/set of checksums. * * @param checksum The single checksum or list/set of checksums to disable. * @returns The updated [[SymbologySettings]] object. */ public disableChecksums( checksum: SymbologySettings.Checksum | SymbologySettings.Checksum[] | Set ): SymbologySettings { if (typeof checksum === "object") { this.checksums = new Set( [...this.checksums].filter(x => { return checksum instanceof Array ? !checksum.includes(x) : !checksum.has(x); }) ); } else { this.checksums.delete(checksum); } return this; } protected toJSON(): object { return { enabled: this.enabled, colorInvertedEnabled: this.colorInvertedEnabled, activeSymbolCounts: this.activeSymbolCounts.length === 0 ? undefined : this.activeSymbolCounts, extensions: this.customExtensions ? Array.from(this.extensions) : undefined, checksums: this.customChecksums ? Array.from(this.checksums) : undefined }; } private isValidExtension(extension: string | SymbologySettings.Extension): boolean { return ( extension in SymbologySettings.Extension || (Object.values(SymbologySettings.Extension)).includes(extension.toLowerCase()) ); } private isValidChecksum(checksum: string | SymbologySettings.Checksum): boolean { return ( checksum in SymbologySettings.Checksum || (Object.values(SymbologySettings.Checksum)).includes(checksum.toLowerCase()) ); } } // istanbul ignore next export namespace SymbologySettings { /** * Symbology extensions for particular functionalities, only applicable to specific barcodes. * See: https://docs.scandit.com/stable/c_api/symbologies.html. */ export enum Extension { /** * Improve scan performance when reading direct part marked (DPM) Data Matrix codes. * Enabling this extension comes at the cost of increased frame processing times. */ DIRECT_PART_MARKING_MODE = "direct_part_marking_mode", /** * Interpret the Code 39 / Code 93 code data using two symbols per output character to encode all ASCII characters. */ FULL_ASCII = "full_ascii", /** * Enable scanning codes that have quiet zones (white area before and after the code) significantly smaller * than what's allowed by the symbology specification. */ RELAXED_SHARP_QUIET_ZONE_CHECK = "relaxed_sharp_quiet_zone_check", /** * Remove the leading zero digit from the result. */ REMOVE_LEADING_ZERO = "remove_leading_zero", /** * Remove the leading zero digit from the result if the UPC-A representation extension "RETURN_AS_UPCA" is enabled. */ REMOVE_LEADING_UPCA_ZERO = "remove_leading_upca_zero", /** * Transform the UPC-E result into its UPC-A representation. */ RETURN_AS_UPCA = "return_as_upca", /** * Remove the leading FNC1 character that indicates a GS1 code. */ STRIP_LEADING_FNC1 = "strip_leading_fnc1" } /** * Checksum algorithms, only applicable to specific barcodes. * See: https://docs.scandit.com/stable/c_api/symbologies.html. */ export enum Checksum { /** * Modulo 10 checksum. */ MOD_10 = "mod10", /** * Modulo 11 checksum. */ MOD_11 = "mod11", /** * Modulo 16 checksum. */ MOD_16 = "mod16", /** * Modulo 43 checksum. */ MOD_43 = "mod43", /** * Modulo 47 checksum. */ MOD_47 = "mod47", /** * Modulo 103 checksum. */ MOD_103 = "mod103", /** * Two modulo 10 checksums. */ MOD_1010 = "mod1010", /** * Modulo 11 and modulo 10 checksum. */ MOD_1110 = "mod1110" } }