@@ -343,6 +343,13 @@ object WNJSON extends Format {
343343 (s.senseExamples.map(metaExampleFormat.write).toList match {
344344 case Nil => Map ()
345345 case vals => Map (" example" -> JsArray (vals:_* ))
346+ }) ++
347+ (s.adjposition.map(x => " adjposition" -> JsString (x.shortForm)).toMap) ++
348+ (s.n.map(x => " n" -> JsNumber (x)).toMap) ++
349+ (if (s.lexicalized) Map () else Map (" lexicalized" -> JsFalse )) ++
350+ (s.subcats.map(x => JsString (x)).toList match {
351+ case Nil => Map ()
352+ case vals => Map (" subcat" -> JsArray (vals:_* ))
346353 }))
347354 def read (v : JsValue ) = v match {
348355 case JsObject (m) =>
@@ -360,7 +367,27 @@ object WNJSON extends Format {
360367 counts= m.getOrElse(" count" , JsArray ()) match {
361368 case JsArray (x) => x.map(metaCountFormat.read)
362369 case _ => throw new WNJsonException (" Counts should be a list of values" )
370+ },
371+ adjposition= m.get(" adjposition" ).map(stringOrFail).map(AdjPosition .fromString),
372+ n= m.get(" n" ) match {
373+ case Some (JsNumber (x)) => Some (x.toInt)
374+ case Some (JsString (x)) => Some (x.toInt)
375+ case None => None
376+ case _ => throw new WNJsonException (" Sense n should be a number or string" )
377+ },
378+ lexicalized= m.get(" lexicalized" ) match {
379+ case Some (JsBoolean (b)) => b
380+ case None => true
381+ case _ => throw new WNJsonException (" Sense lexicalized should be a boolean" )
382+ },
383+ subcats= m.getOrElse(" subcat" , JsArray ()) match {
384+ case JsArray (x) => x.map({
385+ case JsString (s) => s
386+ case _ => throw new WNJsonException (" Sense subcat should be a string" )
387+ })
388+ case _ => throw new WNJsonException (" Sense subcat should be a list of strings" )
363389 })
390+
364391 case _ =>
365392 throw new WNJsonException (" Sense should be an object" )
366393 }
@@ -408,6 +435,10 @@ object WNJSON extends Format {
408435 (e.syntacticBehaviours.map(syntacticBehaviourFormat.write).toList match {
409436 case Nil => Map ()
410437 case vals => Map (" synBehavior" -> JsArray (vals:_* ))
438+ }) ++
439+ (e.index match {
440+ case Some (i) => Map (" index" -> JsString (i))
441+ case None => Map ()
411442 }))
412443 def read (v : JsValue ) = v match {
413444 case JsObject (m) =>
@@ -451,7 +482,12 @@ object WNJSON extends Format {
451482 case JsArray (x) => x.map(syntacticBehaviourFormat.read)
452483 case _ => throw new WNJsonException (" Syntactic behaviour must be a list of objects" )
453484 },
454- id= stringOrFail(m.getOrElse(" @id" , throw new WNJsonException (" Lexical entry must have an id" ))))
485+ id= stringOrFail(m.getOrElse(" @id" , throw new WNJsonException (" Lexical entry must have an id" ))),
486+ index= m.get(" index" ) match {
487+ case Some (JsString (i)) => Some (i)
488+ case Some (_) => None
489+ case None => None
490+ })
455491 case _ =>
456492 throw new WNJsonException (" Lexical entry must be an object" )
457493 }
@@ -475,7 +511,14 @@ object WNJSON extends Format {
475511 case Nil => Map ()
476512 case vals => Map (" example" -> JsArray (vals:_* ))
477513 }) ++
478- (s.iliDefinition.map(x => Map (" iliDefinition" -> metaILIDefinitionFormat.write(x))).getOrElse(Map ())))
514+ (s.iliDefinition.map(x => Map (" iliDefinition" -> metaILIDefinitionFormat.write(x))).getOrElse(Map ())) ++
515+ ((s.members.map(x => JsString (x))).toList match {
516+ case Nil => Map ()
517+ case vals => Map (" member" -> JsArray (vals:_* ))
518+ }) ++
519+ (if (s.lexicalized) Map () else Map (" lexicalized" -> JsFalse )) ++
520+ (if (s.lexfile.isDefined) Map (" lexfile" -> JsString (s.lexfile.get)) else Map ()))
521+
479522 def read (v : JsValue ) = v match {
480523 case JsObject (m) =>
481524 Synset (
@@ -494,7 +537,25 @@ object WNJSON extends Format {
494537 case JsArray (x) => x.map(metaExampleFormat.read)
495538 case _ => throw new WNJsonException (" Synset exampels must be list of objects" )
496539 },
497- partOfSpeech= m.get(" partOfSpeech" ).map(pos => PartOfSpeech .fromName(stringOrFail(pos))))
540+ partOfSpeech= m.get(" partOfSpeech" ).map(pos => PartOfSpeech .fromName(stringOrFail(pos))),
541+ members= m.getOrElse(" member" , JsArray ()) match {
542+ case JsArray (x) => x.map({
543+ case JsString (s) => s
544+ case _ => throw new WNJsonException (" Synset member must be a string" )
545+ })
546+ case _ => throw new WNJsonException (" Synset member must be a list of strings" )
547+ },
548+ lexicalized= m.get(" lexicalized" ) match {
549+ case Some (JsBoolean (b)) => b
550+ case None => true
551+ case _ => throw new WNJsonException (" Synset lexicalized must be a boolean" +
552+ " but got: " + m.get(" lexicalized" ))
553+ },
554+ lexfile= m.get(" lexfile" ) match {
555+ case Some (JsString (s)) => Some (s)
556+ case Some (_) => None
557+ case None => None
558+ })
498559 case _ =>
499560 throw new WNJsonException (" Synset must be an object" )
500561 }
@@ -520,7 +581,8 @@ object WNJSON extends Format {
520581 case vals => Map (" synset" -> JsArray (vals:_* ))
521582 }) ++
522583 l.url.map(u => Map (" url" -> JsString (u))).getOrElse(Map ()) ++
523- l.citation.map(u => Map (" citation" -> JsString (u))).getOrElse(Map ()))
584+ l.citation.map(u => Map (" citation" -> JsString (u))).getOrElse(Map ()) ++
585+ l.logo.map(u => Map (" logo" -> JsString (u))).getOrElse(Map ()))
524586 def read (v : JsValue ) = v match {
525587 case JsObject (m) =>
526588 Lexicon (
@@ -539,7 +601,8 @@ object WNJSON extends Format {
539601 license= stringOrFail(m.getOrElse(" license" , throw new WNJsonException (" License is required on a lexicon" ))),
540602 version= stringOrFail(m.getOrElse(" version" , throw new WNJsonException (" Version is required on a lexicon" ))),
541603 url= m.get(" url" ).map(stringOrFail),
542- citation= m.get(" citation" ).map(stringOrFail))
604+ citation= m.get(" citation" ).map(stringOrFail),
605+ logo= m.get(" logo" ).map(stringOrFail))
543606 case _ =>
544607 throw new WNJsonException (" Lexicon must be an object" )
545608 }
0 commit comments