def _addCloze(self, notes): data = [] notes = list(notes.values()) for orig in notes: # create a foreign note object n = ForeignNote() n.fields = [] fld = orig.get("text", "") fld = re.sub("\r?\n", "<br>", fld) state = dict(n=1) def repl(match): # pylint: disable=cell-var-from-loop # replace [...] with cloze refs res = "{{c%d::%s}}" % (state["n"], match.group(1)) state["n"] += 1 return res fld = re.sub(r"\[(.+?)\]", repl, fld) fld = self._mungeField(fld) n.fields.append(fld) n.fields.append("") # extra n.tags = orig["tags"] n.cards = orig.get("cards", {}) data.append(n) # add cloze model model = addClozeModel(self.col) model["name"] = "Mnemosyne-Cloze" mm = self.col.models mm.save(model) mm.setCurrent(model) self.model = model self._fields = len(model["flds"]) self.initMapping() self.importNotes(data)
def _addCloze(self, notes): data = [] notes = list(notes.values()) for orig in notes: # create a foreign note object n = ForeignNote() n.fields = [] fld = orig.get("text", "") fld = re.sub("\r?\n", "<br>", fld) state = dict(n=1) def repl(match): # replace [...] with cloze refs res = ("{{c%d::%s}}" % (state['n'], match.group(1))) state['n'] += 1 return res fld = re.sub("\[(.+?)\]", repl, fld) fld = self._mungeField(fld) n.fields.append(fld) n.fields.append("") # extra n.tags = orig['tags'] n.cards = orig.get('cards', {}) data.append(n) # add cloze model model = addClozeModel(self.col) model['name'] = "Mnemosyne-Cloze" mm = self.col.models mm.save(model) mm.setCurrent(model) self.model = model self._fields = len(model['flds']) self.initMapping() self.importNotes(data)
def _addCloze(self, notes): data = [] notes = notes.values() for orig in notes: # create a foreign note object n = ForeignNote() n.fields = [] fld = orig.get("text", "") fld = re.sub("\r?\n", "<br>", fld) state = dict(n=1) def repl(match): # replace [...] with cloze refs res = ("{{c%d::%s}}" % (state['n'], match.group(1))) state['n'] += 1 return res fld = re.sub("\[(.+?)\]", repl, fld) fld = self._mungeField(fld) n.fields.append(fld) n.fields.append("") # extra n.tags = orig['tags'] n.cards = orig.get('cards', {}) data.append(n) # add cloze model model = addClozeModel(self.col) model['name'] = "Mnemosyne-Cloze" mm = self.col.models mm.save(model) mm.setCurrent(model) self.model = model self._fields = len(model['flds']) self.initMapping() self.importNotes(data)
def foreignNotes(self): with open(self.file, 'r') as f: content = f.read().decode('utf-8') notes = [] entries = json.loads(content) for entry in entries: row = [] empty = True for f in self.mappingFields: value = entry.get(f) if value: empty = False if '.' in value: ext = value[value.rfind('.') + 1:].lower() if ext in MEDIA_EXTENSIONS: path = os.path.join(self.fileDir, value) if os.path.exists(path): filename = self.col.media.addFile(os.path.join(self.fileDir, value)) if ext in AUDIO_EXTENSIONS: value = u'[sound:%s]' % filename else: value = u'<img src="%s">' % filename row.append(value) if empty: # empty entry continue note = ForeignNote() note.fields = row notes.append(note) return notes
def foreignNotes(self): """Build and return a list of notes.""" notes = [] try: f = gzip.open(self.file) tree = ET.parse(f) lesson = tree.getroot() assert lesson.tag == "Lesson" finally: f.close() index = -4 for batch in lesson.findall('./Batch'): index += 1 for card in batch.findall('./Card'): # Create a note for this card. front = card.findtext('./FrontSide/Text') back = card.findtext('./ReverseSide/Text') note = ForeignNote() note.fields = [ cgi.escape(x.strip()).replace('\n', '<br>').replace( ' ', ' ') for x in [front, back]] notes.append(note) # Determine due date for cards. frontdue = card.find('./FrontSide[@LearnedTimestamp]') backdue = card.find('./ReverseSide[@Batch][@LearnedTimestamp]') if frontdue is not None: note.cards[0] = self._learnedCard( index, int(frontdue.attrib['LearnedTimestamp'])) if backdue is not None: note.cards[1] = self._learnedCard( int(backdue.attrib['Batch']), int(backdue.attrib['LearnedTimestamp'])) return notes
def foreignNotes(self): """Build and return a list of notes.""" notes = [] try: f = gzip.open(self.file) tree = ET.parse(f) lesson = tree.getroot() assert lesson.tag == "Lesson" finally: f.close() index = -4 for batch in lesson.findall('./Batch'): index += 1 for card in batch.findall('./Card'): # Create a note for this card. front = card.findtext('./FrontSide/Text') back = card.findtext('./ReverseSide/Text') note = ForeignNote() note.fields = [ cgi.escape(x.strip()).replace('\n', '<br>').replace( ' ', ' ') for x in [front, back] ] notes.append(note) # Determine due date for cards. frontdue = card.find('./FrontSide[@LearnedTimestamp]') backdue = card.find('./ReverseSide[@Batch][@LearnedTimestamp]') if frontdue is not None: note.cards[0] = self._learnedCard( index, int(frontdue.attrib['LearnedTimestamp'])) if backdue is not None: note.cards[1] = self._learnedCard( int(backdue.attrib['Batch']), int(backdue.attrib['LearnedTimestamp'])) return notes
def foreignNotes(self): with open(self.file, 'r') as f: content = f.read().decode('utf-8') notes = [] entries = json.loads(content) for entry in entries: row = [] empty = True for f in self.mappingFields: value = entry.get(f) if value: empty = False if '.' in value: ext = value[value.rfind('.') + 1:].lower() if ext in MEDIA_EXTENSIONS: path = os.path.join(self.fileDir, value) if os.path.exists(path): filename = self.col.media.addFile( os.path.join(self.fileDir, value)) if ext in AUDIO_EXTENSIONS: value = u'[sound:%s]' % filename else: value = u'<img src="%s">' % filename row.append(value) if empty: # empty entry continue note = ForeignNote() note.fields = row notes.append(note) return notes
def foreignNotes(self): """Parse notes from the rows read in ``open``. """ self.open() out = [] for word, senses in groupby(0, self._rows).items(): back = [] usually_written_using_kana_alone = False for row in senses: reading = row[1] if row[-1]: usually_written_using_kana_alone = True back.append(f'{row[3]}: {row[2]}') back = '\n'.join(back) note = ForeignNote() note.fields = [ reading if usually_written_using_kana_alone else word, reading, back, ] out.append(note) return out
def entriesToNotes(self, entries): notes = [] for entry in entries: row = self._read_row(entry) if len(row) == 0: # empty entry continue note = ForeignNote() note.fields = row notes.append(note) return notes
def entriesToNotes(self, entries): notes = [] for entry in entries: row = self._read_row(entry) if len(row) == 0: # empty entry continue note = ForeignNote() note.fields = row notes.append(note) return notes
def questionToNote(self, question): """Convert a Question object to a ForeignNote.""" displayedAnswers = [] for letter, answer in zip(string.lowercase, question.answers): displayedAnswers.append(letter + ") " + answer) questionField = question.question + "\n\n" + "\n".join(displayedAnswers) answerField = displayedAnswers[question.iCorrectAnswer] note = ForeignNote() note.fields = [questionField, answerField] return note
def foreignNotes(self): """Build and return a list of notes.""" notes = [] try: f = gzip.open(self.file) tree = ET.parse(f) # type: ignore lesson = tree.getroot() assert lesson.tag == "Lesson" finally: f.close() index = -4 for batch in lesson.findall("./Batch"): index += 1 for card in batch.findall("./Card"): # Create a note for this card. front = card.findtext("./FrontSide/Text") back = card.findtext("./ReverseSide/Text") note = ForeignNote() assert front and back note.fields = [ html.escape(x.strip()) .replace("\n", "<br>") .replace(" ", " ") for x in [front, back] ] notes.append(note) # Determine due date for cards. frontdue = card.find("./FrontSide[@LearnedTimestamp]") backdue = card.find("./ReverseSide[@Batch][@LearnedTimestamp]") if frontdue is not None: note.cards[0] = self._learnedCard( index, int(frontdue.attrib["LearnedTimestamp"]) ) if backdue is not None: note.cards[1] = self._learnedCard( int(backdue.attrib["Batch"]), int(backdue.attrib["LearnedTimestamp"]), ) return notes
def readData(self, mapping): from anki.importing.noteimp import ForeignNote if not self.hasOpenWorkbook(): self._log.append("xlimport: Error reading data: no open worksheet.") return assert self._dataDim assert self._headerCells self._notes = [] for row in tuple(self.worksheet.iter_rows(self._dataDim, row_offset = self._rowOffset)): flds = [] isEmpty = True for c in xrange(0, len(mapping)): hdr = self._headerCells[c].value if hdr and hdr in mapping: v = row[c].value if row[c].value else '' isEmpty = False if row[c].value else isEmpty flds.append(v if row[c].data_type == 's' else str(v)) if not isEmpty: note = ForeignNote() note.fields = flds self._notes.append(note)
def _addFronts(self, notes, model=None, fields=("f", "b")): data = [] for orig in notes: # create a foreign note object n = ForeignNote() n.fields = [] for f in fields: n.fields.append(orig.get(f, '')) n.tags = orig['tags'] n.cards = orig.get('cards', {}) data.append(n) # add a basic model if not model: model = addBasicModel(self.col) model['name'] = "Mnemosyne-FrontOnly" mm = self.col.models mm.save(model) mm.setCurrent(model) self.model = model self._fields = len(model['flds']) self.initMapping() # import self.importNotes(data)
def _addFronts(self, notes, model=None, fields=("f", "b")): data = [] for orig in notes: # create a foreign note object n = ForeignNote() n.fields = [] for f in fields: n.fields.append(orig.get(f, '')) n.tags = orig['tags'] n.cards = orig.get('cards', {}) data.append(n) # add a basic model if not model: model = addBasicModel(self.col) model['name'] = "Mnemosyne-FrontOnly" mm = self.col.models mm.save(model) mm.setCurrent(model) self.model = model self._fields = len(model['flds']) self.initMapping() # import self.importNotes(data)
def _addFronts(self, notes, model=None, fields=("f", "b")): data = [] for orig in notes: # create a foreign note object n = ForeignNote() n.fields = [] for f in fields: fld = self._mungeField(orig.get(f, "")) n.fields.append(fld) n.tags = orig["tags"] n.cards = orig.get("cards", {}) data.append(n) # add a basic model if not model: model = _legacy_add_basic_model(self.col) model["name"] = "Mnemosyne-FrontOnly" mm = self.col.models mm.save(model) mm.set_current(model) self.model = model self._fields = len(model["flds"]) self.initMapping() # import self.importNotes(data)