예제 #1
0
def RecoveryModel():
    m = Model(_('Recovery'))
    m.addFieldModel(FieldModel(u'Question', False, False))
    m.addFieldModel(FieldModel(u'Answer', False, False))
    m.addCardModel(CardModel(u'Single', u'{{{Question}}}', u'{{{Answer}}}'))
    m.tags = u"Recovery"
    return m
예제 #2
0
def JapaneseModel():
    m = Model(_("Japanese"))
    # expression
    f = FieldModel(u'Expression', True, True)
    font = u"Mincho"
    f.quizFontSize = 50
    f.quizFontFamily = font
    f.editFontFamily = font
    m.addFieldModel(f)
    # meaning
    m.addFieldModel(FieldModel(u'Meaning', False, False))
    # reading
    f = FieldModel(u'Reading', False, False)
    font = u"Arial"
    f.quizFontSize = 50
    f.quizFontFamily = font
    f.editFontFamily = font
    m.addFieldModel(f)
    m.addCardModel(CardModel(u"Recognition",
                   u"%(Expression)s",
                   u"%(Reading)s<br>%(Meaning)s"))
    m.addCardModel(CardModel(u"Recall",
                             u"%(Meaning)s",
                             u"%(Reading)s",
                             active=False))
    m.tags = u"Japanese"
    return m
def doImport():
    # add an iknow model
    if not [m for m in mw.deck.models if m.name == 'Smart.fm']:
        m = Model(u'Smart.fm')
        m.addFieldModel(FieldModel(u'Expression', False, False))
        m.addFieldModel(FieldModel(u'Meaning', False, False))
        m.addFieldModel(FieldModel(u'Reading', False, False))
        m.addFieldModel(FieldModel(u'Audio', False, False))
        m.addFieldModel(FieldModel(u'Image', False, False))
        m.addCardModel(CardModel(
            u'Listening',
            u'Listen.%(Audio)s',
            u'%(Expression)s<br>%(Reading)s<br>%(Meaning)s<br>%(Image)s'))
        mw.deck.addModel(m)
    while 1:
        mw.reset()
        url = getOnlyText("Enter list URL:")
        if not url:
            return
        id = re.search("/lists/(\d+)", url).group(1)
        # get sentences
        f = urllib2.urlopen(
            "http://api.smart.fm/lists/%s/sentences.json" % id)
        d = simplejson.load(f)
        # add facts
        diag = QProgressDialog(_("Importing..."), "", 0, 0, mw)
        diag.setCancelButton(None)
        diag.setMaximum(len(d))
        diag.setMinimumDuration(0)
        for i, sen in enumerate(d):
            diag.setValue(i)
            diag.setLabelText(sen['text'])
            mw.app.processEvents()
            f = mw.deck.newFact()
            f['Expression'] = sen['text']
            f['Meaning'] = sen['translations'] and sen['translations'][0]['text'] or u""
            try:
                f['Reading'] = sen['transliterations']['Hrkt'] or u""
                # reading is sometimes missing
                if not f['Reading'] and kakasi:
                    f['Reading'] = kakasi.toFurigana(f['Expression'])
            except KeyError:
                f['Reading'] = u""
            if includeSounds and sen['sound']:
                (file, headers) = urllib.urlretrieve(sen['sound'])
                path = mw.deck.addMedia(file)
                f['Audio'] = u'[sound:%s]' % path
            else:
                f['Audio'] = u""
            if includeImages and sen['image']:
                (file, headers) = urllib.urlretrieve(sen['image'])
                path = mw.deck.addMedia(file)
                f['Image'] = u'<img src="%s">' % path
            else:
                f['Image'] = u""
            mw.deck.addFact(f)
        diag.cancel()
        mw.deck.save()
예제 #4
0
def BasicModel():
    m = Model(_('Basic'))
    m.addFieldModel(FieldModel(u'Front', True, True))
    m.addFieldModel(FieldModel(u'Back', False, False))
    m.addCardModel(CardModel(u'Forward', u'%(Front)s', u'%(Back)s'))
    m.addCardModel(CardModel(u'Reverse', u'%(Back)s', u'%(Front)s',
                             active=False))
    m.tags = u"Basic"
    return m
예제 #5
0
def test_modelChange():
    deck = DeckStorage.Deck()
    m = Model(u"Japanese")
    m1 = m
    f = FieldModel(u'Expression', True, True)
    m.addFieldModel(f)
    m.addFieldModel(FieldModel(u'Meaning', False, False))
    f = FieldModel(u'Reading', False, False)
    m.addFieldModel(f)
    m.addCardModel(
        CardModel(u"Recognition", u"%(Expression)s",
                  u"%(Reading)s<br>%(Meaning)s"))
    m.addCardModel(
        CardModel(u"Recall",
                  u"%(Meaning)s",
                  u"%(Expression)s<br>%(Reading)s",
                  active=False))
    m.tags = u"Japanese"
    m1.cardModels[1].active = True
    deck.addModel(m1)
    f = deck.newFact()
    f['Expression'] = u'e'
    f['Meaning'] = u'm'
    f['Reading'] = u'r'
    f = deck.addFact(f)
    f2 = deck.newFact()
    f2['Expression'] = u'e2'
    f2['Meaning'] = u'm2'
    f2['Reading'] = u'r2'
    deck.addFact(f2)
    m2 = BasicModel()
    m2.cardModels[1].active = True
    deck.addModel(m2)
    # convert to basic
    assert deck.modelUseCount(m1) == 2
    assert deck.modelUseCount(m2) == 0
    assert deck.cardCount == 4
    assert deck.factCount == 2
    fmap = {
        m1.fieldModels[0]: m2.fieldModels[0],
        m1.fieldModels[1]: None,
        m1.fieldModels[2]: m2.fieldModels[1]
    }
    cmap = {m1.cardModels[0]: m2.cardModels[0], m1.cardModels[1]: None}
    deck.changeModel([f.id], m2, fmap, cmap)
    assert deck.modelUseCount(m1) == 1
    assert deck.modelUseCount(m2) == 1
    assert deck.cardCount == 3
    assert deck.factCount == 2
    (q, a) = deck.s.first("""
select question, answer from cards where factId = :id""",
                          id=f.id)
    assert stripHTML(q) == u"e"
    assert stripHTML(a) == u"r"
예제 #6
0
파일: model.py 프로젝트: fqhuy/JpEnVi_Anki
def JpEnViModel():
    m = Model(_("JpEnVi"))
    # expression
    f = FieldModel(u'Japanese', True, True)
    font = u"Mincho"
    f.quizFontSize = 50
    f.quizFontFamily = font
    f.editFontFamily = font
    m.addFieldModel(f)
    # meaning
    f = FieldModel(u'English', False, False)
    font = u"Mincho"
    f.quizFontSize = 20
    f.quizFontFamily = font
    f.editFontFamily = font
    m.addFieldModel(f)
    # reading
    f = FieldModel(u'Sino-Vietnamese', False, False)  #for Kanji only (?)
    font = u"Arial"
    f.quizFontSize = 20
    f.quizFontFamily = font
    f.editFontFamily = font
    m.addFieldModel(f)
    #vietnamese
    f = FieldModel(u'Vietnamese', False, False)
    font = u"Mincho"
    f.quizFontSize = 20
    f.quizFontFamily = font
    f.editFontFamily = font
    m.addFieldModel(f)

    f = FieldModel(u'Example', False, False)
    font = u"Mincho"
    f.quizFontSize = 20
    f.quizFontFamily = font
    f.editFontFamily = font
    m.addFieldModel(f)

    m.addCardModel(
        CardModel(
            u"Recognition", u"%(Japanese)s",
            u"<div align='left'>English</div><hr> <br> %(English)s <div align='left'>Sino-Vietnamese</div><hr><br>%(Sino-Vietnamese)s <div align='left'>Vietnamese</div><hr><br>%(Vietnamese)s <div align='left'>Examples from tratu.vn</div><hr><br>%(Example)s"
        ))
    m.addCardModel(
        CardModel(u"Recall", u"%(Vietnamese)s", u"%(Japanese)s", active=False))

    m.tags = u"JpEnVi, JpEnVi_offline"
    return m
예제 #7
0
 def getFieldModel(self, model, remote):
     for fm in model.fieldModels:
         if fm.id == remote['id']:
             return fm
     fm = FieldModel()
     model.addFieldModel(fm)
     return fm
예제 #8
0
 def MandarinModel():
    m = Model(_("Mandarin"))
    f = FieldModel(u'Expression')
    f.quizFontSize = 72
    m.addFieldModel(f)
    m.addFieldModel(FieldModel(u'Meaning', False, False))
    m.addFieldModel(FieldModel(u'Reading', False, False))
    m.addCardModel(CardModel(u"Recognition",
                             u"%(Expression)s",
                             u"%(Reading)s<br>%(Meaning)s"))
    m.addCardModel(CardModel(u"Recall",
                             u"%(Meaning)s",
                             u"%(Expression)s<br>%(Reading)s",
                             active=False))
    m.tags = u"Mandarin"
    return m
예제 #9
0
def VocabModel():
    m = Model(_("Vocab"))
    m.addFieldModel(FieldModel(u'Expression', True, False))
    m.addFieldModel(FieldModel(u'Reading', False, False))
    m.addFieldModel(FieldModel(u'Meaning', False, False))
    m.addFieldModel(FieldModel(u'From', False, False))
    
    m.addCardModel(CardModel(u"Recognition",
                             #Question side
                             u"%(Expression)s",
                             #Answer side
                             u"%(Reading)s<br>"+
                             u"%(Meaning)s<br>"+
                             u"%(From)s"))
    
    m.tags = u"Japanese Vocab Vocabulary"
    return m
예제 #10
0
 def createModel(self, modelName, production, listening, reading):
     model = Model(modelName)
     model.addFieldModel(FieldModel(u'Expression', True, False))
     model.addFieldModel(FieldModel(u'Meaning', True, False))
     model.addFieldModel(FieldModel(u'Reading', False, False))
     model.addFieldModel(FieldModel(u'Audio', False, False))
     model.addFieldModel(FieldModel(u'Image_URI', False, False))
     model.addFieldModel(FieldModel(u'iKnowID', True, True))
     model.addFieldModel(FieldModel(u'iKnowType', False, False))
     if listening:
         model.addCardModel(CardModel(
             u'Listening',
             u'Listen.%(Audio)s',
             u'%(Expression)s<br>%(Reading)s<br>%(Meaning)s'))
     if production:
         model.addCardModel(CardModel(
             u'Production',
             u'%(Meaning)s<br>%(Image_URI)s',
             u'%(Expression)s<br>%(Reading)s<br>%(Audio)s'))
     if reading:
         model.addCardModel(CardModel(
             u'Reading',
             u'%(Expression)s',
             u'%(Reading)s<br>%(Meaning)s<br>%(Audio)s'))
     mw.deck.addModel(model)
예제 #11
0
    def createModel(self, attrs):
        """Makes a new Anki (fact) model from an entry type.
        The card models are made each time from scratch in order that evt. model specific fields (attributes) can make part."""
        m = Model(attrs["n"])
        # field model for standard fields
        m.addFieldModel(
            FieldModel(self.labels["b"], True,
                       False))  #there is no uniqueness check in DingsBums?!
        m.addFieldModel(FieldModel(self.labels["t"], True, False))
        for aField in ["exp", "ex", "pro", "rel"]:
            if self.visibility[aField] in "012":
                m.addFieldModel(FieldModel(self.labels[aField], False, False))
        # field models for attributes
        for attr in ["a1", "a2" "a3", "a4"]:
            if attr in attrs.keys():
                m.addFieldModel(
                    FieldModel(self.attributes[attrs[attr]], False, False))
                self.typeAttributes[attrs["eid"] + "_" +
                                    attr] = self.attributes[attrs[attr]]

        # card model for front
        frontStrings = ["%(" + self.labels["b"] + ")s"]
        backStrings = ["%(" + self.labels["t"] + ")s"]
        for aField in ["exp", "ex", "pro", "rel"]:
            if self.visibility[aField] in "01":
                frontStrings.append("%(" + self.labels[aField] + ")s")
            if self.visibility[aField] in "02":
                backStrings.append("%(" + self.labels[aField] + ")s")
        m.addCardModel(
            CardModel(u'Forward', "<br>".join(frontStrings),
                      "<br>".join(backStrings)))
        # card model for back
        m.addCardModel(
            CardModel(u'Reverse', unicode("%(" + self.labels["t"] + ")s"),
                      unicode("%(" + self.labels["b"] + ")s")))
        # tags is just the name without spaces
        m.tags = self.prepareTag(m.name)

        # link
        self.models[attrs["eid"]] = m
        self.deck.addModel(m)
예제 #12
0
def test_localsync_models():
    client.sync()
    # add a model
    deck1.addModel(BasicModel())
    assert len(deck1.models) == 3
    assert len(deck2.models) == 2
    client.sync()
    assert len(deck2.models) == 3
    assert deck1.currentModel.id == deck2.currentModel.id
    # delete the recently added model
    deck2.deleteModel(deck2.currentModel)
    assert len(deck2.models) == 2
    client.sync()
    assert len(deck1.models) == 2
    assert deck1.currentModel.id == deck2.currentModel.id
    # make a card model inactive
    assert deck1.currentModel.cardModels[1].active == True
    deck2.currentModel.cardModels[1].active = False
    deck2.currentModel.setModified()
    deck2.setModified()
    client.sync()
    assert deck1.currentModel.cardModels[1].active == False
    # remove a card model
    deck1.deleteCardModel(deck1.currentModel, deck1.currentModel.cardModels[1])
    deck1.currentModel.setModified()
    deck1.setModified()
    assert len(deck1.currentModel.cardModels) == 1
    client.sync()
    assert len(deck2.currentModel.cardModels) == 1
    # add a field
    c = deck1.getCard()
    deck1.addFieldModel(c.fact.model, FieldModel(u"yo"))
    deck1.s.refresh(c.fact)
    assert len(c.fact.fields) == 3
    assert c.fact['yo'] == u""
    client.sync()
    c2 = deck2.s.query(Card).get(c.id)
    deck2.s.refresh(c2.fact)
    assert c2.fact['yo'] == u""
    # remove the field
    assert "yo" in c2.fact.keys()
    deck2.deleteFieldModel(c2.fact.model, c2.fact.model.fieldModels[2])
    deck2.s.refresh(c2.fact)
    assert "yo" not in c2.fact.keys()
    client.sync()
    deck1.s.refresh(c.fact)
    assert "yo" not in c.fact.keys()
    # rename a field
    assert u"Front" in c.fact.keys()
    deck1.renameFieldModel(deck1.currentModel,
                           deck1.currentModel.fieldModels[0], u"Sideways")
    client.sync()
    assert deck2.currentModel.fieldModels[0].name == u"Sideways"
예제 #13
0
 def ensureKanjiModelExists(self):
     model = None
     for m in mw.deck.models:
         if m.name.lower() == RTKImportDialog.KANJI_MODEL.lower():
             return m
     if not model:
         model = Model(RTKImportDialog.KANJI_MODEL)
         model.addFieldModel(FieldModel(u'Kanji', True, True))
         model.addFieldModel(FieldModel(u'HeisigFrameID', True, True))
         model.addFieldModel(FieldModel(u'Keyword', True, True))
         model.addFieldModel(FieldModel(u'Story', True, True))
         model.addFieldModel(FieldModel(u'PrimitiveMeanings', False, False))
         model.addFieldModel(
             FieldModel(u'Image_StrokeOrderDiagram', False, False))
         model.addFieldModel(
             FieldModel(u'Image_StrokeOrderAnimation', False, False))
         model.addCardModel(
             CardModel(
                 u'Remembering', u'%(Keyword)s',
                 u'%(Kanji)s<br>%(Story)s<br>%(PrimitiveMeanings)s<br>%(Image_StrokeOrderAnimation)s<br>%(Image_StrokeOrderDiagram)s'
             ))
         mw.deck.addModel(model)
     return model