| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- /* eslint-disable
- no-undef,
- */
- // TODO: This file was created by bulk-decaffeinate.
- // Fix any style issues and re-enable lint.
- /*
- * decaffeinate suggestions:
- * DS101: Remove unnecessary use of Array.from
- * DS102: Remove unnecessary code created because of implicit returns
- * DS205: Consider reworking code to avoid use of IIFEs
- * DS207: Consider shorter variations of null checks
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
- */
- // Text document API for text-tp2
- let type
- if (typeof WEB !== 'undefined' && WEB !== null) {
- type = exports.types['text-tp2']
- } else {
- type = require('./text-tp2')
- }
- const { _takeDoc: takeDoc, _append: append } = type
- const appendSkipChars = (op, doc, pos, maxlength) =>
- (() => {
- const result = []
- while (
- (maxlength === undefined || maxlength > 0) &&
- pos.index < doc.data.length
- ) {
- const part = takeDoc(doc, pos, maxlength, true)
- if (maxlength !== undefined && typeof part === 'string') {
- maxlength -= part.length
- }
- result.push(append(op, part.length || part))
- }
- return result
- })()
- type.api = {
- provides: { text: true },
- // The number of characters in the string
- getLength() {
- return this.snapshot.charLength
- },
- // Flatten a document into a string
- getText() {
- const strings = Array.from(this.snapshot.data).filter(
- elem => typeof elem === 'string'
- )
- return strings.join('')
- },
- insert(pos, text, callback) {
- if (pos === undefined) {
- pos = 0
- }
- const op = []
- const docPos = { index: 0, offset: 0 }
- appendSkipChars(op, this.snapshot, docPos, pos)
- append(op, { i: text })
- appendSkipChars(op, this.snapshot, docPos)
- this.submitOp(op, callback)
- return op
- },
- del(pos, length, callback) {
- const op = []
- const docPos = { index: 0, offset: 0 }
- appendSkipChars(op, this.snapshot, docPos, pos)
- while (length > 0) {
- const part = takeDoc(this.snapshot, docPos, length, true)
- if (typeof part === 'string') {
- append(op, { d: part.length })
- length -= part.length
- } else {
- append(op, part)
- }
- }
- appendSkipChars(op, this.snapshot, docPos)
- this.submitOp(op, callback)
- return op
- },
- _register() {
- // Interpret recieved ops + generate more detailed events for them
- return this.on('remoteop', function (op, snapshot) {
- let textPos = 0
- const docPos = { index: 0, offset: 0 }
- for (const component of Array.from(op)) {
- var part, remainder
- if (typeof component === 'number') {
- // Skip
- remainder = component
- while (remainder > 0) {
- part = takeDoc(snapshot, docPos, remainder)
- if (typeof part === 'string') {
- textPos += part.length
- }
- remainder -= part.length || part
- }
- } else if (component.i !== undefined) {
- // Insert
- if (typeof component.i === 'string') {
- this.emit('insert', textPos, component.i)
- textPos += component.i.length
- }
- } else {
- // Delete
- remainder = component.d
- while (remainder > 0) {
- part = takeDoc(snapshot, docPos, remainder)
- if (typeof part === 'string') {
- this.emit('delete', textPos, part)
- }
- remainder -= part.length || part
- }
- }
- }
- })
- },
- }
|