示例#1
0
文件: mnemo.py 项目: lovac42/CCBC
    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)
示例#2
0
文件: mnemo.py 项目: jdennis/anki
 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)
示例#3
0
文件: mnemo.py 项目: fenildf/libanki3
    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)
示例#4
0
    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
示例#5
0
文件: pauker.py 项目: ospalh/libanki3
    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(
                        '  ', ' &nbsp;') 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
示例#6
0
    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(
                        '  ', ' &nbsp;') 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
示例#7
0
    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
示例#8
0
    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
示例#9
0
    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
示例#10
0
    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
示例#11
0
    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
示例#12
0
文件: pauker.py 项目: yycmmc/anki
    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("  ", " &nbsp;")
                    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
示例#13
0
 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)
示例#14
0
 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)
示例#15
0
 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)
示例#16
0
 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)