@specs-feup/lara
Version:
A js port of the popular framework for building source-to-source compilers
43 lines • 1.66 kB
JavaScript
import Unit from "./Unit.js";
/**
* ! If you are ever in need of using this class, please PLEASE refactor it.
* ! Just do it. I did not have the time to do it myself and did not want to break compatibility with the old Margot APIs.
*/
export default class UnitWithModifier extends Unit {
_unitModifier;
_baseUnit;
_modifier;
constructor(unitModifier, baseUnit, modifier) {
super();
this._unitModifier = unitModifier;
if (modifier == undefined) {
modifier = unitModifier.getBase();
}
this._unitModifier.checkModifier(modifier, "UnitWithModifier::modifier");
this._baseUnit = baseUnit;
this._modifier = modifier;
}
getName() {
return this._modifier + this._baseUnit;
}
/**
* @param unit - Unit of the value.
*/
convert(value, unit, unitHasBaseName = false) {
const fromModifier = this._extractModifier(unit, unitHasBaseName);
return this._unitModifier.convert(value, fromModifier, this._modifier);
}
_extractModifier(unit, unitHasBaseName) {
let currentModifier = unit;
// Check that unit ends with the baseUnit
if (unitHasBaseName) {
if (currentModifier.endsWith(this._baseUnit)) {
currentModifier = currentModifier.substring(0, currentModifier.length - this._baseUnit.length);
}
}
currentModifier = this._unitModifier.normalize(currentModifier);
this._unitModifier.checkModifier(currentModifier, "UnitWithModifier._extractModifier::unit");
return currentModifier;
}
}
//# sourceMappingURL=UnitWithModifier.js.map