writeString()

in packages/miew/src/io/exporters/PDBResult.js [90:149]


  writeString(string, begin, end) {
    let curStr = this._resultArray[this._currentStr];
    let str;

    const curStrLength = curStr ? curStr.length : 0;

    if (_.isUndefined(string)) {
      return;
    }

    if (!_.isNumber(begin)) {
      begin = curStrLength + 1;
    }

    if (!_.isNumber(end)) {
      end = curStrLength + string.length;
    }

    if (!_.isString(string)) {
      str = string.toString();
    } else {
      str = string;
    }

    const finish = begin < end ? end : begin;
    const start = begin < end ? begin : end;

    if (str.length > Math.abs(begin - end) + 1) {
      str = str.substr(0, Math.abs(begin - end + 1));
    }

    // spaces before start of new data
    if (start > curStrLength + 1) {
      this._resultArray[this._currentStr] += ' '.repeat(start - curStrLength - 1);
    } else if (start <= curStrLength) {
      const cStr = this._resultArray[this._currentStr];
      this._resultArray[this._currentStr] = cStr.slice(0, start - 1);
    }

    // if reverse order
    // reverse order of end and begin means that user wants to align text right
    if (end < begin) {
      const len = begin - end + 1;
      str = ' '.repeat(len - str.length) + str;
    }

    // some hardcode fix for space between string numeration and data
    // (see pdb file format description)
    if (start === 11 && this._numeration && this._tagStrNum !== 1) {
      str = ` ${str}`;
    }

    // append new data to string
    this._resultArray[this._currentStr] += str;
    curStr = this._resultArray[this._currentStr];

    if (finish > curStr.length) {
      this._resultArray[this._currentStr] += ' '.repeat(finish - curStr.length);
    }
  }