bool FrTextSpans::addMetaData(FrSymbol *key, const FrObject *value) { FrStructField *field = m_metadata.getField(key) ; if (!field) return setMetaData(key,value) ; FrObject *oldvalue = field->get() ; if (oldvalue) { if (oldvalue->consp()) { FrList *list = (FrList*)oldvalue ; if (value && value->consp()) { FrList *newvalue = ((FrList*)value)->difference(list) ; list = newvalue->nconc(list) ; } else if (!list->member(value,::equal)) pushlist(value?value->deepcopy():0,list) ; field->set(list) ; } else return false ; } else if (value && value->consp()) field->set(value->deepcopy()) ; else field->set(new FrList(value?value->deepcopy():0)) ; return true ; }
FrList *FramepaC_to_FrameKit(const FrFrame *frame) { if (!frame) return 0 ; FrList *temp_FrameKit_slots = nullptr ; FrList *list = new FrList(FrSymbolTable::add(stringMAKEFRAME), FrSymbolTable::add(frame->frameName()->symbolName())); if (do_slots(frame,FramepaC_to_FrameKit_slot,&temp_FrameKit_slots)) return list->nconc(temp_FrameKit_slots) ; else { FrWarning("error encountered while converting frame to FrameKit format.") ; return 0 ; } }
bool FrTextSpan::addMetaData(FrSymbol *key, const FrObject *value) { if (!metaData()) { setMetaData(new FrStruct(FrSymbolTable::add(METADATA_TYPENAME))) ; if (!metaData()) return false ; } FrObject *oldvalue = m_metadata->get(key) ; if (oldvalue) { if (oldvalue->consp()) { FrList *list = (FrList*)oldvalue->deepcopy() ; if (value && value->consp()) { FrList *newvalue = ((FrList*)value)->difference(list) ; list = newvalue->nconc(list) ; m_metadata->put(key,list,false) ; } else if (!list->member(value,::equal)) { pushlist(value?value->deepcopy():0,list) ; m_metadata->put(key,list,false) ; } else free_object(list) ; } else return false ; } else if (value && value->consp()) m_metadata->put(key,value->deepcopy(),false) ; else m_metadata->put(key,new FrList(value?value->deepcopy():0),false) ; return true ; }