Commit graph

32 commits

Author SHA1 Message Date
Alan Du
63a0b36d91 Monkeytype qt/aqt/reviewer.py 2020-03-01 10:16:08 -05:00
Damien Elmes
ba97457e8a add nfd tag fix to db check
we already normalize in the editor and importing, so perhaps these
tags were from an old version

https://anki.tenderapp.com/discussions/ankidesktop/39120-bug-filter-do-not-work-with-tags-which-contain-german-letters-like
2020-03-01 11:21:25 +10:00
Damien Elmes
2de865d7f0 migrate strings with trailing newlines to fluent 2020-02-27 20:36:40 +10:00
Alan Du
a095c44f40 Improve mypy config
- Make mypy stricter
- Warn for unnecessary workarounds
2020-02-26 22:22:40 -05:00
Damien Elmes
5d09981667 add self.col.tr() shortcut 2020-02-27 12:33:15 +10:00
Damien Elmes
8cfb4d47ab more changes to the template code
- _renderQA() has moved to template.py:render_card()
- dropped QAData in favour of a properly typed dict
- render_card() returns a TemplateRenderOutput struct instead of a dict
- card_did_render now takes that output as the first arg, and can
mutate it
- TemplateRenderContext now stores the original card, so it can return
a card even in the add screen case

The old mungeFields and mungeQA hook have been removed as part of this
change. mungeQA can be replaced with the card_did_render hook.
In the mungeFields case, please switch to using field_filter instead.
2020-01-24 13:44:13 +10:00
Damien Elmes
766155665b renderQA() wasn't used in the codebase 2020-01-24 11:09:38 +10:00
Damien Elmes
46c6a7f7e4 extract and flag AV tags as part of the render process
We can now show replay buttons for the audio contained in {{FrontSide}}
without having to play it again when the answer is shown.

The template code now always defers FrontSide rendering, as it wasn't
a big saving, and meant the logic had to be implemented twice.
2020-01-24 11:06:11 +10:00
Damien Elmes
a9378b1e99 _localOffsetForDate() was broken
It was including the elapsed time of day when calculating
the offset, leading to incorrect results
2020-01-17 18:52:36 -07:00
Damien Elmes
5d29ad51da move types.py into the files responsible for each type 2020-01-17 10:17:33 +10:00
Damien Elmes
55314d6d30 add context to card rendering, and rework related hooks
- the context exists for the lifecycle of one card's render,
and caches calls to things like .card() to avoid add-ons needing to
do their own cache management.
- add-ons can optionally add extra data to the context if they need
it across multiple filters
- removed card_will_render. the legacy hook is still available for
now
- card_did_render is now called only once, with both front and back
text
2020-01-17 09:30:42 +10:00
Damien Elmes
d778f9b0af i18n 2020-01-16 21:05:29 +10:00
Damien Elmes
a254b140a7 fix empty cloze message not appearing 2020-01-16 18:47:21 +10:00
Damien Elmes
52bd10063e more useful template error message 2020-01-16 18:47:21 +10:00
Damien Elmes
73fe9f12cb simplify previewCards() and use existing card ids where possible
The type arg is no longer used, as neither type 0 nor 1 appears to
have been used in the codebase.

By using the existing card ids, it allows add-ons that gather
information about a card to work properly in the card template screen
without extra hacks.
2020-01-16 09:19:41 +10:00
Damien Elmes
b22dc71810 more tweaks for readability/consistency 2020-01-15 17:45:35 +10:00
Damien Elmes
dd780b2898 more hook tweaks, and merge the pre-render field and template hooks 2020-01-15 17:18:11 +10:00
Damien Elmes
8bad40152d remove _hook/_filter suffix 2020-01-15 16:53:24 +10:00
Damien Elmes
a38b5c1bb6 tweak the hook names in anki/
still a work in progress
2020-01-15 16:43:22 +10:00
Damien Elmes
66ffc1a432 fix broken answer displaying 2020-01-14 09:00:52 +10:00
Damien Elmes
7352e0f43b switch to classes for hooks
This allows us to add a docstring to .append() so users can see
the names of the arguments that are being passed, and means we
don't have to remember to prepend run_ when calling a hook.
2020-01-14 08:54:07 +10:00
Damien Elmes
6fe2d06b16 add hook to modify template prior to rendering 2020-01-13 21:57:15 +10:00
Damien Elmes
3d94af972e update the rest of the anki/ hooks/filters 2020-01-13 17:59:52 +10:00
Damien Elmes
ae4ea8db22 New type-safe approach to hooks/filters
Still todo:
- Add separate module for GUI hooks
- Update the remaining runHook/runFilter() calls
- Document the changes, including defensive registration
2020-01-13 13:57:51 +10:00
Damien Elmes
8eceedd2e5 more template rendering tweaks
- The front and back are rendered in one call now. If the front
side contains no custom filters, we can bake {{FrontSide}} into the
rear side. If it did contain custom filters, we return the partially
complete rear template instead, and the calling code can inject
the FrontSide in after it has been fully rendered.

- Instead of modifying "cloze" into something like "cq-2", the card
ordinal and whether we're rendering the question or answer are now
passed in to the rendering filters as context.

- The Rust code doesn't need to support filter names split on '-'
anymore.

- Drop the "Show" part of hint descriptions so i18n support can be
deferred.

- Ignore blank filter names caused by user using two colons instead
of one.

- Fixed hint field and text transposition.
2020-01-12 21:34:07 +10:00
Damien Elmes
718bb3fae8 drop pystache and move legacy code into separate file 2020-01-11 19:38:30 +10:00
Damien Elmes
31ebf0473f rework new timezone code
We now store the UTC offset that was in effect at creation time,
and use that to determine the starting date.
2020-01-09 16:58:27 +10:00
Damien Elmes
520275bea3 handle conditional replacement in Rust
This extends the existing Rust code to handle conditional
replacement. The replacement of field names and filters to text
remains in Python, so that add-ons can still define their own
field modifiers.

The code is currently running the old Pystache rendering and the
new implementation in parallel, and will print a message to the
console if they don't match. If you notice any problems, please
let me know.
2020-01-08 20:28:04 +10:00
Damien Elmes
4fe3d686a6 move the rest of Anki's code out of pystache
In the process of factoring out the field filtering, the "extra"
and "fullname" args are just passed in as a blank string now.
Extra was functionality that allowed a field modifier to be defined
as "filtername(arg1,arg2):field", and fullname was the name of the
field including any provided field modifiers. From grepping through
the add-ons on AnkiWeb, neither appears to have been used.
2020-01-08 17:15:46 +10:00
Damien Elmes
edc989f308 clean up _renderQA(), and split rendering part out 2020-01-08 12:07:44 +10:00
Damien Elmes
6afb8c5056 add a partial Python implementation of the backend 2020-01-06 12:24:47 +10:00
Damien Elmes
2a00e0a6b0 tweaking the folder names again
hopefully that's the last of it
2020-01-03 07:48:38 +10:00
Renamed from lib-python/anki/collection.py (Browse further)