--- /dev/null
+/**
+ * Copyright (c) 2018 The xterm.js authors. All rights reserved.
+ * @license MIT
+ */
+
+import { IAttributeData, IColorRGB } from 'common/Types';
+import { Attributes, FgFlags, BgFlags } from 'common/buffer/Constants';
+
+export class AttributeData implements IAttributeData {
+ static toColorRGB(value: number): IColorRGB {
+ return [
+ value >>> Attributes.RED_SHIFT & 255,
+ value >>> Attributes.GREEN_SHIFT & 255,
+ value & 255
+ ];
+ }
+ static fromColorRGB(value: IColorRGB): number {
+ return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;
+ }
+
+ public clone(): IAttributeData {
+ const newObj = new AttributeData();
+ newObj.fg = this.fg;
+ newObj.bg = this.bg;
+ return newObj;
+ }
+
+ // data
+ public fg: number = 0;
+ public bg: number = 0;
+
+ // flags
+ public isInverse(): number { return this.fg & FgFlags.INVERSE; }
+ public isBold(): number { return this.fg & FgFlags.BOLD; }
+ public isUnderline(): number { return this.fg & FgFlags.UNDERLINE; }
+ public isBlink(): number { return this.fg & FgFlags.BLINK; }
+ public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }
+ public isItalic(): number { return this.bg & BgFlags.ITALIC; }
+ public isDim(): number { return this.bg & BgFlags.DIM; }
+
+ // color modes
+ public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }
+ public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }
+ public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }
+ public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }
+ public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }
+ public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }
+ public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }
+ public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }
+
+ // colors
+ public getFgColor(): number {
+ switch (this.fg & Attributes.CM_MASK) {
+ case Attributes.CM_P16:
+ case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;
+ case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;
+ default: return -1; // CM_DEFAULT defaults to -1
+ }
+ }
+ public getBgColor(): number {
+ switch (this.bg & Attributes.CM_MASK) {
+ case Attributes.CM_P16:
+ case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;
+ case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;
+ default: return -1; // CM_DEFAULT defaults to -1
+ }
+ }
+}