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);
}
}