Upstream spencermountain/compromise state of the touched files before 7334dc16a6
This commit is contained in:
1 parent
7ccd4a2b95
commit
8124553282
2 files changed
+189
No files matched your search
@@ -0,0 +1,175 @@
|
||||
import find from '../find.js'
|
||||
import coordinate from './conjugate/coordinate.js'
|
||||
import toJSON from './toJSON.js'
|
||||
import parseVerb from './parse/index.js'
|
||||
import toInf from './conjugate/toInfinitive.js'
|
||||
import toPast from './conjugate/toPast.js'
|
||||
import toParticiple from './conjugate/toParticiple.js'
|
||||
import toPresent from './conjugate/toPresent.js'
|
||||
import toFuture from './conjugate/toFuture.js'
|
||||
import toGerund from './conjugate/toGerund.js'
|
||||
import getSubject from './parse/getSubject.js'
|
||||
import getGrammar from './parse/grammar/index.js'
|
||||
import toNegative from './conjugate/toNegative.js'
|
||||
import { getTense } from './lib.js'
|
||||
|
||||
|
||||
const api = function (View) {
|
||||
class Verbs extends View {
|
||||
constructor(document, pointer, groups) {
|
||||
super(document, pointer, groups)
|
||||
this.viewType = 'Verbs'
|
||||
}
|
||||
parse(n) {
|
||||
return this.getNth(n).map(parseVerb)
|
||||
}
|
||||
json(opts, n) {
|
||||
const m = this.getNth(n)
|
||||
const arr = m.map(vb => {
|
||||
const json = vb.toView().json(opts)[0] || {}
|
||||
json.verb = toJSON(vb)
|
||||
return json
|
||||
}, [])
|
||||
return arr
|
||||
}
|
||||
subjects(n) {
|
||||
return this.getNth(n).map(vb => {
|
||||
const parsed = parseVerb(vb)
|
||||
return getSubject(vb, parsed).subject
|
||||
})
|
||||
}
|
||||
adverbs(n) {
|
||||
return this.getNth(n).map(vb => vb.match('#Adverb'))
|
||||
}
|
||||
isSingular(n) {
|
||||
return this.getNth(n).filter(vb => {
|
||||
return getSubject(vb).plural !== true
|
||||
})
|
||||
}
|
||||
isPlural(n) {
|
||||
return this.getNth(n).filter(vb => {
|
||||
return getSubject(vb).plural === true
|
||||
})
|
||||
}
|
||||
isImperative(n) {
|
||||
return this.getNth(n).filter(vb => vb.has('#Imperative'))
|
||||
}
|
||||
toInfinitive(n) {
|
||||
return coordinate(this.getNth(n), 'infinitive', vb => {
|
||||
const parsed = parseVerb(vb)
|
||||
const info = getGrammar(vb, parsed)
|
||||
if (info.isInfinitive) {
|
||||
return vb
|
||||
}
|
||||
return toInf(vb, parsed, info.form)
|
||||
})
|
||||
}
|
||||
toPresentTense(n) {
|
||||
return coordinate(this.getNth(n), 'present', vb => {
|
||||
const parsed = parseVerb(vb)
|
||||
const info = getGrammar(vb, parsed)
|
||||
if (info.isInfinitive) {
|
||||
return vb
|
||||
}
|
||||
return toPresent(vb, parsed, info.form)
|
||||
})
|
||||
}
|
||||
toPastTense(n) {
|
||||
return coordinate(this.getNth(n), 'past', vb => {
|
||||
const parsed = parseVerb(vb)
|
||||
const info = getGrammar(vb, parsed)
|
||||
if (info.isInfinitive) {
|
||||
return vb
|
||||
}
|
||||
return toPast(vb, parsed, info.form)
|
||||
})
|
||||
}
|
||||
toFutureTense(n) {
|
||||
return coordinate(this.getNth(n), 'future', vb => {
|
||||
const parsed = parseVerb(vb)
|
||||
const info = getGrammar(vb, parsed)
|
||||
if (info.isInfinitive) {
|
||||
return vb
|
||||
}
|
||||
return toFuture(vb, parsed, info.form)
|
||||
})
|
||||
}
|
||||
toGerund(n) {
|
||||
return coordinate(this.getNth(n), 'gerund', vb => {
|
||||
const parsed = parseVerb(vb)
|
||||
const info = getGrammar(vb, parsed)
|
||||
if (info.isInfinitive) {
|
||||
return vb
|
||||
}
|
||||
return toGerund(vb, parsed, info.form)
|
||||
})
|
||||
}
|
||||
toPastParticiple(n) {
|
||||
return coordinate(this.getNth(n), 'participle', vb => {
|
||||
const parsed = parseVerb(vb)
|
||||
const info = getGrammar(vb, parsed)
|
||||
if (info.isInfinitive) {
|
||||
return vb
|
||||
}
|
||||
return toParticiple(vb, parsed, info.form)
|
||||
})
|
||||
}
|
||||
conjugate(n) {
|
||||
const { conjugate, toInfinitive } = this.world.methods.two.transform.verb
|
||||
return this.getNth(n).map(vb => {
|
||||
const parsed = parseVerb(vb)
|
||||
const info = getGrammar(vb, parsed)
|
||||
// allow imperatives like 'go!' to be conjugated here (only)
|
||||
if (info.form === 'imperative') {
|
||||
info.form = 'simple-present'
|
||||
}
|
||||
let inf = parsed.root.text('normal')
|
||||
if (!parsed.root.has('#Infinitive')) {
|
||||
const tense = getTense(parsed.root)
|
||||
inf = toInfinitive(inf, vb.model, tense) || inf
|
||||
}
|
||||
return conjugate(inf, vb.model)
|
||||
}, [])
|
||||
}
|
||||
|
||||
/** return only verbs with 'not'*/
|
||||
isNegative() {
|
||||
return this.if('#Negative')
|
||||
}
|
||||
/** return only verbs without 'not'*/
|
||||
isPositive() {
|
||||
return this.ifNo('#Negative')
|
||||
}
|
||||
/** remove 'not' from these verbs */
|
||||
toPositive() {
|
||||
const m = this.match('do not #Verb')
|
||||
if (m.found) {
|
||||
m.remove('do not')
|
||||
}
|
||||
return this.remove('#Negative')
|
||||
}
|
||||
toNegative(n) {
|
||||
return this.getNth(n).map(vb => {
|
||||
const parsed = parseVerb(vb)
|
||||
const info = getGrammar(vb, parsed)
|
||||
return toNegative(vb, parsed, info.form)
|
||||
})
|
||||
}
|
||||
// overloaded - keep Verb class
|
||||
update(pointer) {
|
||||
const m = new Verbs(this.document, pointer)
|
||||
m._cache = this._cache // share this full thing
|
||||
return m
|
||||
}
|
||||
}
|
||||
Verbs.prototype.toPast = Verbs.prototype.toPastTense
|
||||
Verbs.prototype.toPresent = Verbs.prototype.toPresentTense
|
||||
Verbs.prototype.toFuture = Verbs.prototype.toFutureTense
|
||||
|
||||
View.prototype.verbs = function (n) {
|
||||
let vb = find(this)
|
||||
vb = vb.getNth(n)
|
||||
return new Verbs(this.document, vb.pointer)
|
||||
}
|
||||
}
|
||||
export default api
|
||||
@@ -0,0 +1,14 @@
|
||||
import test from 'tape'
|
||||
import nlp from '../_lib.js'
|
||||
const here = '[three/sentence-negative] '
|
||||
|
||||
test('sentences.toPositive', function (t) {
|
||||
const doc = nlp(`do not use reverse psychology.`)
|
||||
doc.sentences().toPositive()
|
||||
t.equal(doc.text(), 'use reverse psychology.', here + 'neg')
|
||||
|
||||
doc.sentences().toNegative()
|
||||
t.equal(doc.text(), 'do not use reverse psychology.', here + 'back to neg')
|
||||
|
||||
t.end()
|
||||
})
|
||||
Reference in new issue
Block a user