Copy disabled (too large)
Download .txt
Showing preview only (13,815K chars total). Download the full file to get everything.
Repository: vnotex/vnote
Branch: master
Commit: 7c59d0d061d3
Files: 1239
Total size: 13.0 MB
Directory structure:
gitextract_d9rrwo1t/
├── .clang-format
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── workflows/
│ ├── ci-linux.yml
│ ├── ci-macos.yml
│ └── ci-win.yml
├── .gitignore
├── .gitmodules
├── AGENTS.md
├── CMakeLists.txt
├── COPYING.LESSER
├── README.md
├── README_zh_CN.md
├── SECURITY.md
├── changes.md
├── libs/
│ └── CMakeLists.txt
├── package/
│ ├── QtWebEngineProcess.entitlements.xml
│ ├── entitlements.xml
│ ├── lgpl-3.0.rtf
│ └── qt.conf
├── privacy_policy.md
├── scripts/
│ ├── init.cmd
│ ├── init.sh
│ ├── pre-commit
│ └── update_version.py
├── src/
│ ├── CMakeLists.txt
│ ├── CPackLinuxDeployQt.cmake.in
│ ├── CPackMacDeployQt.cmake.in
│ ├── Packaging.cmake
│ ├── application.cpp
│ ├── application.h
│ ├── commandlineoptions.cpp
│ ├── commandlineoptions.h
│ ├── core/
│ │ ├── CMakeLists.txt
│ │ ├── buffer/
│ │ │ ├── buffer.cpp
│ │ │ ├── buffer.h
│ │ │ ├── bufferprovider.cpp
│ │ │ ├── bufferprovider.h
│ │ │ ├── filebufferprovider.cpp
│ │ │ ├── filebufferprovider.h
│ │ │ ├── filetypehelper.cpp
│ │ │ ├── filetypehelper.h
│ │ │ ├── ibufferfactory.h
│ │ │ ├── markdownbuffer.cpp
│ │ │ ├── markdownbuffer.h
│ │ │ ├── markdownbufferfactory.cpp
│ │ │ ├── markdownbufferfactory.h
│ │ │ ├── mindmapbuffer.cpp
│ │ │ ├── mindmapbuffer.h
│ │ │ ├── mindmapbufferfactory.cpp
│ │ │ ├── mindmapbufferfactory.h
│ │ │ ├── nodebufferprovider.cpp
│ │ │ ├── nodebufferprovider.h
│ │ │ ├── pdfbuffer.cpp
│ │ │ ├── pdfbuffer.h
│ │ │ ├── pdfbufferfactory.cpp
│ │ │ ├── pdfbufferfactory.h
│ │ │ ├── textbuffer.cpp
│ │ │ ├── textbuffer.h
│ │ │ ├── textbufferfactory.cpp
│ │ │ ├── textbufferfactory.h
│ │ │ └── urlbasedbufferprovider.h
│ │ ├── buffermgr.cpp
│ │ ├── buffermgr.h
│ │ ├── clipboarddata.cpp
│ │ ├── clipboarddata.h
│ │ ├── configmgr.cpp
│ │ ├── configmgr.h
│ │ ├── coreconfig.cpp
│ │ ├── coreconfig.h
│ │ ├── editorconfig.cpp
│ │ ├── editorconfig.h
│ │ ├── events.h
│ │ ├── exception.h
│ │ ├── externalfile.cpp
│ │ ├── externalfile.h
│ │ ├── file.cpp
│ │ ├── file.h
│ │ ├── filelocator.h
│ │ ├── fileopenparameters.h
│ │ ├── global.cpp
│ │ ├── global.h
│ │ ├── historyitem.cpp
│ │ ├── historyitem.h
│ │ ├── historymgr.cpp
│ │ ├── historymgr.h
│ │ ├── htmltemplatehelper.cpp
│ │ ├── htmltemplatehelper.h
│ │ ├── iconfig.h
│ │ ├── location.h
│ │ ├── logger.cpp
│ │ ├── logger.h
│ │ ├── mainconfig.cpp
│ │ ├── mainconfig.h
│ │ ├── markdowneditorconfig.cpp
│ │ ├── markdowneditorconfig.h
│ │ ├── mindmapeditorconfig.cpp
│ │ ├── mindmapeditorconfig.h
│ │ ├── namebasedserver.h
│ │ ├── noncopyable.h
│ │ ├── notebook/
│ │ │ ├── bundlenotebook.cpp
│ │ │ ├── bundlenotebook.h
│ │ │ ├── bundlenotebookfactory.cpp
│ │ │ ├── bundlenotebookfactory.h
│ │ │ ├── externalnode.cpp
│ │ │ ├── externalnode.h
│ │ │ ├── historyi.h
│ │ │ ├── inotebookfactory.h
│ │ │ ├── node.cpp
│ │ │ ├── node.h
│ │ │ ├── nodeparameters.cpp
│ │ │ ├── nodeparameters.h
│ │ │ ├── nodevisual.cpp
│ │ │ ├── nodevisual.h
│ │ │ ├── notebook.cpp
│ │ │ ├── notebook.h
│ │ │ ├── notebookdatabaseaccess.cpp
│ │ │ ├── notebookdatabaseaccess.h
│ │ │ ├── notebookparameters.cpp
│ │ │ ├── notebookparameters.h
│ │ │ ├── notebooktagmgr.cpp
│ │ │ ├── notebooktagmgr.h
│ │ │ ├── tag.cpp
│ │ │ ├── tag.h
│ │ │ ├── tagi.h
│ │ │ ├── vxnode.cpp
│ │ │ ├── vxnode.h
│ │ │ ├── vxnodefile.cpp
│ │ │ └── vxnodefile.h
│ │ ├── notebookbackend/
│ │ │ ├── inotebookbackend.cpp
│ │ │ ├── inotebookbackend.h
│ │ │ ├── inotebookbackendfactory.h
│ │ │ ├── localnotebookbackend.cpp
│ │ │ ├── localnotebookbackend.h
│ │ │ ├── localnotebookbackendfactory.cpp
│ │ │ └── localnotebookbackendfactory.h
│ │ ├── notebookconfigmgr/
│ │ │ ├── bundlenotebookconfigmgr.cpp
│ │ │ ├── bundlenotebookconfigmgr.h
│ │ │ ├── inotebookconfigmgr.cpp
│ │ │ ├── inotebookconfigmgr.h
│ │ │ ├── inotebookconfigmgrfactory.h
│ │ │ ├── notebookconfig.cpp
│ │ │ ├── notebookconfig.h
│ │ │ ├── vxnodeconfig.cpp
│ │ │ ├── vxnodeconfig.h
│ │ │ ├── vxnotebookconfigmgr.cpp
│ │ │ ├── vxnotebookconfigmgr.h
│ │ │ ├── vxnotebookconfigmgrfactory.cpp
│ │ │ └── vxnotebookconfigmgrfactory.h
│ │ ├── notebookmgr.cpp
│ │ ├── notebookmgr.h
│ │ ├── pdfviewerconfig.cpp
│ │ ├── pdfviewerconfig.h
│ │ ├── quickaccesshelper.cpp
│ │ ├── quickaccesshelper.h
│ │ ├── sessionconfig.cpp
│ │ ├── sessionconfig.h
│ │ ├── singleinstanceguard.cpp
│ │ ├── singleinstanceguard.h
│ │ ├── templatemgr.cpp
│ │ ├── templatemgr.h
│ │ ├── texteditorconfig.cpp
│ │ ├── texteditorconfig.h
│ │ ├── theme.cpp
│ │ ├── theme.h
│ │ ├── thememgr.cpp
│ │ ├── thememgr.h
│ │ ├── versioncontroller/
│ │ │ ├── dummyversioncontroller.cpp
│ │ │ ├── dummyversioncontroller.h
│ │ │ ├── dummyversioncontrollerfactory.cpp
│ │ │ ├── dummyversioncontrollerfactory.h
│ │ │ ├── iversioncontroller.h
│ │ │ ├── iversioncontrollerfactory.h
│ │ │ ├── versioncontrollerserver.cpp
│ │ │ └── versioncontrollerserver.h
│ │ ├── vnotex.cpp
│ │ ├── vnotex.h
│ │ ├── webresource.h
│ │ ├── widgetconfig.cpp
│ │ └── widgetconfig.h
│ ├── data/
│ │ ├── core/
│ │ │ ├── Info.plist
│ │ │ ├── core.qrc
│ │ │ ├── fun.vnote.app.VNote.metainfo.xml
│ │ │ ├── icons/
│ │ │ │ ├── vnote.icns
│ │ │ │ └── vnote.rc
│ │ │ ├── translations/
│ │ │ │ ├── qdialogbuttonbox_zh_CN.qm
│ │ │ │ ├── qtbase_ja.qm
│ │ │ │ ├── qtbase_zh_CN.qm
│ │ │ │ ├── qtv_ja.qm
│ │ │ │ ├── qtv_zh_CN.qm
│ │ │ │ ├── qwebengine_zh_CN.qm
│ │ │ │ ├── vnote_ja.ts
│ │ │ │ └── vnote_zh_CN.ts
│ │ │ ├── vnote.desktop
│ │ │ └── vnotex.json
│ │ └── extra/
│ │ ├── dicts/
│ │ │ ├── en_US.aff
│ │ │ └── en_US.dic
│ │ ├── docs/
│ │ │ ├── en/
│ │ │ │ ├── about_vnotex.txt
│ │ │ │ ├── external_programs.md
│ │ │ │ ├── features_tips.txt
│ │ │ │ ├── get_started.txt
│ │ │ │ ├── markdown_guide.md
│ │ │ │ ├── shortcuts.md
│ │ │ │ └── welcome.md
│ │ │ └── zh_CN/
│ │ │ ├── about_vnotex.txt
│ │ │ ├── external_programs.md
│ │ │ ├── features_tips.txt
│ │ │ ├── get_started.txt
│ │ │ ├── markdown_guide.md
│ │ │ ├── shortcuts.md
│ │ │ └── welcome.md
│ │ ├── extra.qrc
│ │ ├── syntax-highlighting/
│ │ │ ├── syntax/
│ │ │ │ ├── 4dos.xml
│ │ │ │ ├── abap.xml
│ │ │ │ ├── abc.xml
│ │ │ │ ├── actionscript.xml
│ │ │ │ ├── ada.xml
│ │ │ │ ├── adblock.xml
│ │ │ │ ├── agda.xml
│ │ │ │ ├── ahdl.xml
│ │ │ │ ├── ahk.xml
│ │ │ │ ├── alert.xml
│ │ │ │ ├── ample.xml
│ │ │ │ ├── ansforth94.xml
│ │ │ │ ├── ansic89.xml
│ │ │ │ ├── ansys.xml
│ │ │ │ ├── apache.xml
│ │ │ │ ├── apparmor.xml
│ │ │ │ ├── asciidoc.xml
│ │ │ │ ├── asm-avr.xml
│ │ │ │ ├── asm-dsp56k.xml
│ │ │ │ ├── asm-m68k.xml
│ │ │ │ ├── asm6502.xml
│ │ │ │ ├── asn1.xml
│ │ │ │ ├── asp.xml
│ │ │ │ ├── awk.xml
│ │ │ │ ├── bash.xml
│ │ │ │ ├── bibtex.xml
│ │ │ │ ├── bitbake.xml
│ │ │ │ ├── bmethod.xml
│ │ │ │ ├── boo.xml
│ │ │ │ ├── brightscript.xml
│ │ │ │ ├── c.xml
│ │ │ │ ├── carto-css.xml
│ │ │ │ ├── ccss.xml
│ │ │ │ ├── cg.xml
│ │ │ │ ├── cgis.xml
│ │ │ │ ├── changelog.xml
│ │ │ │ ├── chicken.xml
│ │ │ │ ├── cil.xml
│ │ │ │ ├── cisco.xml
│ │ │ │ ├── clipper.xml
│ │ │ │ ├── clist.xml
│ │ │ │ ├── clojure.xml
│ │ │ │ ├── cmake.xml
│ │ │ │ ├── coffee.xml
│ │ │ │ ├── coldfusion.xml
│ │ │ │ ├── commonlisp.xml
│ │ │ │ ├── component-pascal.xml
│ │ │ │ ├── context.xml
│ │ │ │ ├── cpp.xml
│ │ │ │ ├── crk.xml
│ │ │ │ ├── cs.xml
│ │ │ │ ├── css.xml
│ │ │ │ ├── cubescript.xml
│ │ │ │ ├── cue.xml
│ │ │ │ ├── curry.xml
│ │ │ │ ├── d.xml
│ │ │ │ ├── debianchangelog.xml
│ │ │ │ ├── debiancontrol.xml
│ │ │ │ ├── desktop.xml
│ │ │ │ ├── diff.xml
│ │ │ │ ├── djangotemplate.xml
│ │ │ │ ├── dockerfile.xml
│ │ │ │ ├── dosbat.xml
│ │ │ │ ├── dot.xml
│ │ │ │ ├── doxyfile.xml
│ │ │ │ ├── doxygen.xml
│ │ │ │ ├── doxygenlua.xml
│ │ │ │ ├── dtd.xml
│ │ │ │ ├── e.xml
│ │ │ │ ├── eiffel.xml
│ │ │ │ ├── elixir.xml
│ │ │ │ ├── elm.xml
│ │ │ │ ├── email.xml
│ │ │ │ ├── erlang.xml
│ │ │ │ ├── euphoria.xml
│ │ │ │ ├── fasm.xml
│ │ │ │ ├── fastq.xml
│ │ │ │ ├── ferite.xml
│ │ │ │ ├── fgl-4gl.xml
│ │ │ │ ├── fgl-per.xml
│ │ │ │ ├── fish.xml
│ │ │ │ ├── flatbuffers.xml
│ │ │ │ ├── fortran-fixed.xml
│ │ │ │ ├── fortran-free.xml
│ │ │ │ ├── freebasic.xml
│ │ │ │ ├── fsharp.xml
│ │ │ │ ├── fstab.xml
│ │ │ │ ├── ftl.xml
│ │ │ │ ├── gap.xml
│ │ │ │ ├── gcc.xml
│ │ │ │ ├── gcode.xml
│ │ │ │ ├── gdb-bt.xml
│ │ │ │ ├── gdb.xml
│ │ │ │ ├── gdbinit.xml
│ │ │ │ ├── gdl.xml
│ │ │ │ ├── gettext.xml
│ │ │ │ ├── git-ignore.xml
│ │ │ │ ├── git-rebase.xml
│ │ │ │ ├── gitolite.xml
│ │ │ │ ├── glosstex.xml
│ │ │ │ ├── glsl.xml
│ │ │ │ ├── gnuassembler.xml
│ │ │ │ ├── gnuplot.xml
│ │ │ │ ├── go.xml
│ │ │ │ ├── grammar.xml
│ │ │ │ ├── groovy.xml
│ │ │ │ ├── haml.xml
│ │ │ │ ├── hamlet.xml
│ │ │ │ ├── haskell.xml
│ │ │ │ ├── haxe.xml
│ │ │ │ ├── html.xml
│ │ │ │ ├── hunspell-aff.xml
│ │ │ │ ├── hunspell-dat.xml
│ │ │ │ ├── hunspell-dic.xml
│ │ │ │ ├── hunspell-idx.xml
│ │ │ │ ├── idconsole.xml
│ │ │ │ ├── idl.xml
│ │ │ │ ├── ilerpg.xml
│ │ │ │ ├── inform.xml
│ │ │ │ ├── ini.xml
│ │ │ │ ├── intelhex.xml
│ │ │ │ ├── isocpp.xml
│ │ │ │ ├── j.xml
│ │ │ │ ├── jam.xml
│ │ │ │ ├── java.xml
│ │ │ │ ├── javadoc.xml
│ │ │ │ ├── javascript-react.xml
│ │ │ │ ├── javascript.xml
│ │ │ │ ├── jcl.xml
│ │ │ │ ├── jira.xml
│ │ │ │ ├── json.xml
│ │ │ │ ├── jsp.xml
│ │ │ │ ├── julia.xml
│ │ │ │ ├── k.xml
│ │ │ │ ├── kbasic.xml
│ │ │ │ ├── kconfig.xml
│ │ │ │ ├── kdesrc-buildrc.xml
│ │ │ │ ├── kotlin.xml
│ │ │ │ ├── latex.xml
│ │ │ │ ├── ld.xml
│ │ │ │ ├── ldif.xml
│ │ │ │ ├── less.xml
│ │ │ │ ├── lex.xml
│ │ │ │ ├── lilypond.xml
│ │ │ │ ├── literate-curry.xml
│ │ │ │ ├── literate-haskell.xml
│ │ │ │ ├── logcat.xml
│ │ │ │ ├── logtalk.xml
│ │ │ │ ├── lpc.xml
│ │ │ │ ├── lsl.xml
│ │ │ │ ├── lua.xml
│ │ │ │ ├── m3u.xml
│ │ │ │ ├── m4.xml
│ │ │ │ ├── mab.xml
│ │ │ │ ├── magma.xml
│ │ │ │ ├── makefile.xml
│ │ │ │ ├── mako.xml
│ │ │ │ ├── mandoc.xml
│ │ │ │ ├── markdown.xml
│ │ │ │ ├── mason.xml
│ │ │ │ ├── mathematica.xml
│ │ │ │ ├── matlab.xml
│ │ │ │ ├── maxima.xml
│ │ │ │ ├── mediawiki.xml
│ │ │ │ ├── mel.xml
│ │ │ │ ├── mergetagtext.xml
│ │ │ │ ├── meson.xml
│ │ │ │ ├── metafont.xml
│ │ │ │ ├── metamath.xml
│ │ │ │ ├── mib.xml
│ │ │ │ ├── mips.xml
│ │ │ │ ├── modelica.xml
│ │ │ │ ├── modelines.xml
│ │ │ │ ├── modula-2-iso-only.xml
│ │ │ │ ├── modula-2-pim-only.xml
│ │ │ │ ├── modula-2-r10-only.xml
│ │ │ │ ├── modula-2.xml
│ │ │ │ ├── monobasic.xml
│ │ │ │ ├── mup.xml
│ │ │ │ ├── mustache.xml
│ │ │ │ ├── nagios.xml
│ │ │ │ ├── nasm.xml
│ │ │ │ ├── nemerle.xml
│ │ │ │ ├── nesc.xml
│ │ │ │ ├── ninja.xml
│ │ │ │ ├── noweb.xml
│ │ │ │ ├── nsis.xml
│ │ │ │ ├── objectivec.xml
│ │ │ │ ├── objectivecpp.xml
│ │ │ │ ├── ocaml.xml
│ │ │ │ ├── ocamllex.xml
│ │ │ │ ├── ocamlyacc.xml
│ │ │ │ ├── octave.xml
│ │ │ │ ├── oors.xml
│ │ │ │ ├── opal.xml
│ │ │ │ ├── opencl.xml
│ │ │ │ ├── openscad.xml
│ │ │ │ ├── pango.xml
│ │ │ │ ├── pascal.xml
│ │ │ │ ├── perl.xml
│ │ │ │ ├── pgn.xml
│ │ │ │ ├── php.xml
│ │ │ │ ├── picsrc.xml
│ │ │ │ ├── pig.xml
│ │ │ │ ├── pike.xml
│ │ │ │ ├── pli.xml
│ │ │ │ ├── ply.xml
│ │ │ │ ├── pony.xml
│ │ │ │ ├── postscript.xml
│ │ │ │ ├── povray.xml
│ │ │ │ ├── powershell.xml
│ │ │ │ ├── ppd.xml
│ │ │ │ ├── praat.xml
│ │ │ │ ├── progress.xml
│ │ │ │ ├── prolog.xml
│ │ │ │ ├── protobuf.xml
│ │ │ │ ├── pug.xml
│ │ │ │ ├── puppet.xml
│ │ │ │ ├── purebasic.xml
│ │ │ │ ├── python.xml
│ │ │ │ ├── q.xml
│ │ │ │ ├── qdocconf.xml
│ │ │ │ ├── qmake.xml
│ │ │ │ ├── qml.xml
│ │ │ │ ├── r.xml
│ │ │ │ ├── rapidq.xml
│ │ │ │ ├── rdoc.xml
│ │ │ │ ├── relaxng.xml
│ │ │ │ ├── relaxngcompact.xml
│ │ │ │ ├── replicode.xml
│ │ │ │ ├── rest.xml
│ │ │ │ ├── rexx.xml
│ │ │ │ ├── rhtml.xml
│ │ │ │ ├── rib.xml
│ │ │ │ ├── rmarkdown.xml
│ │ │ │ ├── roff.xml
│ │ │ │ ├── rpmspec.xml
│ │ │ │ ├── rsiidl.xml
│ │ │ │ ├── rtf.xml
│ │ │ │ ├── ruby.xml
│ │ │ │ ├── rust.xml
│ │ │ │ ├── sass.xml
│ │ │ │ ├── sather.xml
│ │ │ │ ├── scala.xml
│ │ │ │ ├── scheme.xml
│ │ │ │ ├── sci.xml
│ │ │ │ ├── scss.xml
│ │ │ │ ├── sed.xml
│ │ │ │ ├── selinux-cil.xml
│ │ │ │ ├── selinux-fc.xml
│ │ │ │ ├── selinux.xml
│ │ │ │ ├── sgml.xml
│ │ │ │ ├── sieve.xml
│ │ │ │ ├── sisu.xml
│ │ │ │ ├── smali.xml
│ │ │ │ ├── sml.xml
│ │ │ │ ├── spice.xml
│ │ │ │ ├── sql-mysql.xml
│ │ │ │ ├── sql-oracle.xml
│ │ │ │ ├── sql-postgresql.xml
│ │ │ │ ├── sql.xml
│ │ │ │ ├── stan.xml
│ │ │ │ ├── stata.xml
│ │ │ │ ├── stl.xml
│ │ │ │ ├── systemc.xml
│ │ │ │ ├── systemverilog.xml
│ │ │ │ ├── tads3.xml
│ │ │ │ ├── taskjuggler.xml
│ │ │ │ ├── tcl.xml
│ │ │ │ ├── tcsh.xml
│ │ │ │ ├── template-toolkit.xml
│ │ │ │ ├── texinfo.xml
│ │ │ │ ├── textile.xml
│ │ │ │ ├── tibasic.xml
│ │ │ │ ├── tiger.xml
│ │ │ │ ├── toml.xml
│ │ │ │ ├── txt2tags.xml
│ │ │ │ ├── typescript-react.xml
│ │ │ │ ├── typescript.xml
│ │ │ │ ├── uscript.xml
│ │ │ │ ├── vala.xml
│ │ │ │ ├── valgrind-suppression.xml
│ │ │ │ ├── varnish.xml
│ │ │ │ ├── varnish4.xml
│ │ │ │ ├── varnishcc.xml
│ │ │ │ ├── varnishcc4.xml
│ │ │ │ ├── varnishtest.xml
│ │ │ │ ├── varnishtest4.xml
│ │ │ │ ├── vcard.xml
│ │ │ │ ├── velocity.xml
│ │ │ │ ├── vera.xml
│ │ │ │ ├── verilog.xml
│ │ │ │ ├── vhdl.xml
│ │ │ │ ├── vrml.xml
│ │ │ │ ├── wavefront-obj.xml
│ │ │ │ ├── wayland-trace.xml
│ │ │ │ ├── winehq.xml
│ │ │ │ ├── wml.xml
│ │ │ │ ├── xharbour.xml
│ │ │ │ ├── xml.xml
│ │ │ │ ├── xmldebug.xml
│ │ │ │ ├── xonotic-console.xml
│ │ │ │ ├── xorg.xml
│ │ │ │ ├── xslt.xml
│ │ │ │ ├── xul.xml
│ │ │ │ ├── yacas.xml
│ │ │ │ ├── yacc.xml
│ │ │ │ ├── yaml.xml
│ │ │ │ ├── yang.xml
│ │ │ │ ├── zonnon.xml
│ │ │ │ └── zsh.xml
│ │ │ └── themes/
│ │ │ ├── breeze-dark.theme
│ │ │ ├── default.theme
│ │ │ ├── markdown-breeze-dark.theme
│ │ │ ├── markdown-default.theme
│ │ │ ├── printing.theme
│ │ │ ├── solarized-dark.theme
│ │ │ ├── solarized-light.theme
│ │ │ └── vscode-dark.theme
│ │ ├── tasks/
│ │ │ └── git/
│ │ │ └── git.json
│ │ ├── themes/
│ │ │ ├── moonlight/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ ├── native/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ ├── pure/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ ├── solarized-dark/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ ├── solarized-light/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ ├── vscode-dark/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── readme.md
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ ├── vue-dark/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ ├── vue-light/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ └── vx-idea/
│ │ │ ├── README.md
│ │ │ ├── code_highlight/
│ │ │ │ ├── highlight-dark.css
│ │ │ │ └── highlight-one-light.css
│ │ │ ├── highlight.css
│ │ │ ├── interface.qss
│ │ │ ├── palette.json
│ │ │ ├── text-editor.theme
│ │ │ ├── tips_components/
│ │ │ │ └── sytle.css
│ │ │ └── web.css
│ │ └── web/
│ │ ├── css/
│ │ │ ├── exportglobalstyles.css
│ │ │ ├── globalstyles.css
│ │ │ ├── imageviewer.css
│ │ │ ├── markdownit.css
│ │ │ ├── outline.css
│ │ │ └── user.css
│ │ ├── js/
│ │ │ ├── computed-style-to-inline-style.js
│ │ │ ├── crosscopy.js
│ │ │ ├── easyaccess.js
│ │ │ ├── eventemitter.js
│ │ │ ├── flowchart.js/
│ │ │ │ └── README.md
│ │ │ ├── flowchartjs.js
│ │ │ ├── graphcache.js
│ │ │ ├── graphpreviewer.js
│ │ │ ├── graphrenderer.js
│ │ │ ├── graphviz.js
│ │ │ ├── imageviewer.js
│ │ │ ├── lrucache.js
│ │ │ ├── mark.js/
│ │ │ │ └── README.md
│ │ │ ├── markdown-it/
│ │ │ │ ├── README.md
│ │ │ │ ├── markdown-it-front-matter.js
│ │ │ │ ├── markdown-it-implicit-figure.js
│ │ │ │ ├── markdown-it-inject-linenumbers.js
│ │ │ │ ├── markdown-it-task-lists.js
│ │ │ │ ├── markdown-it-texmath.js
│ │ │ │ ├── markdown-it-xss.js
│ │ │ │ ├── markdownItAnchor.umd.js
│ │ │ │ └── markdownItTocDoneRight.umd.js
│ │ │ ├── markdownit.js
│ │ │ ├── markdownviewer.js
│ │ │ ├── markdownviewercore.js
│ │ │ ├── markjs.js
│ │ │ ├── mathjax.js
│ │ │ ├── mermaid/
│ │ │ │ └── README.md
│ │ │ ├── mermaid.js
│ │ │ ├── mindmap/
│ │ │ │ ├── core/
│ │ │ │ │ └── mindmap-core.js
│ │ │ │ ├── features/
│ │ │ │ │ ├── link-handler/
│ │ │ │ │ │ └── link-handler.js
│ │ │ │ │ └── outline/
│ │ │ │ │ └── outline.js
│ │ │ │ ├── lib/
│ │ │ │ │ └── mind-elixir/
│ │ │ │ │ ├── MindElixir.js
│ │ │ │ │ └── README.md
│ │ │ │ └── mindmap-readme.md
│ │ │ ├── mindmapeditor.js
│ │ │ ├── nodelinemapper.js
│ │ │ ├── outline.js
│ │ │ ├── plantuml/
│ │ │ │ ├── README.md
│ │ │ │ └── synchro2.js
│ │ │ ├── plantuml.js
│ │ │ ├── prism/
│ │ │ │ └── README.md
│ │ │ ├── prism.js
│ │ │ ├── qwebchannel.js
│ │ │ ├── svg-to-image.js
│ │ │ ├── turndown/
│ │ │ │ ├── README.md
│ │ │ │ ├── turndown-plugin-gfm.js
│ │ │ │ └── turndown.js
│ │ │ ├── turndown.js
│ │ │ ├── utils.js
│ │ │ ├── viz.js/
│ │ │ │ ├── README.md
│ │ │ │ ├── lite.render.js
│ │ │ │ └── viz.js
│ │ │ ├── vxcore.js
│ │ │ ├── vxworker.js
│ │ │ ├── wavedrom/
│ │ │ │ ├── README.md
│ │ │ │ └── theme-default.js
│ │ │ └── wavedrom.js
│ │ ├── markdown-export-template.html
│ │ ├── markdown-viewer-template.html
│ │ ├── mindmap-editor-template.html
│ │ └── pdf.js/
│ │ ├── README.md
│ │ ├── pdfviewer.css
│ │ ├── pdfviewer.js
│ │ ├── pdfviewercore.js
│ │ └── web/
│ │ ├── cmaps/
│ │ │ ├── 78-EUC-H.bcmap
│ │ │ ├── 78-EUC-V.bcmap
│ │ │ ├── 78-H.bcmap
│ │ │ ├── 78-RKSJ-H.bcmap
│ │ │ ├── 78-RKSJ-V.bcmap
│ │ │ ├── 78-V.bcmap
│ │ │ ├── 78ms-RKSJ-H.bcmap
│ │ │ ├── 78ms-RKSJ-V.bcmap
│ │ │ ├── 83pv-RKSJ-H.bcmap
│ │ │ ├── 90ms-RKSJ-H.bcmap
│ │ │ ├── 90ms-RKSJ-V.bcmap
│ │ │ ├── 90msp-RKSJ-H.bcmap
│ │ │ ├── 90msp-RKSJ-V.bcmap
│ │ │ ├── 90pv-RKSJ-H.bcmap
│ │ │ ├── 90pv-RKSJ-V.bcmap
│ │ │ ├── Add-H.bcmap
│ │ │ ├── Add-RKSJ-H.bcmap
│ │ │ ├── Add-RKSJ-V.bcmap
│ │ │ ├── Add-V.bcmap
│ │ │ ├── Adobe-CNS1-0.bcmap
│ │ │ ├── Adobe-CNS1-1.bcmap
│ │ │ ├── Adobe-CNS1-2.bcmap
│ │ │ ├── Adobe-CNS1-3.bcmap
│ │ │ ├── Adobe-CNS1-4.bcmap
│ │ │ ├── Adobe-CNS1-5.bcmap
│ │ │ ├── Adobe-CNS1-6.bcmap
│ │ │ ├── Adobe-CNS1-UCS2.bcmap
│ │ │ ├── Adobe-GB1-0.bcmap
│ │ │ ├── Adobe-GB1-1.bcmap
│ │ │ ├── Adobe-GB1-2.bcmap
│ │ │ ├── Adobe-GB1-3.bcmap
│ │ │ ├── Adobe-GB1-4.bcmap
│ │ │ ├── Adobe-GB1-5.bcmap
│ │ │ ├── Adobe-GB1-UCS2.bcmap
│ │ │ ├── Adobe-Japan1-0.bcmap
│ │ │ ├── Adobe-Japan1-1.bcmap
│ │ │ ├── Adobe-Japan1-2.bcmap
│ │ │ ├── Adobe-Japan1-3.bcmap
│ │ │ ├── Adobe-Japan1-4.bcmap
│ │ │ ├── Adobe-Japan1-5.bcmap
│ │ │ ├── Adobe-Japan1-6.bcmap
│ │ │ ├── Adobe-Japan1-UCS2.bcmap
│ │ │ ├── Adobe-Korea1-0.bcmap
│ │ │ ├── Adobe-Korea1-1.bcmap
│ │ │ ├── Adobe-Korea1-2.bcmap
│ │ │ ├── Adobe-Korea1-UCS2.bcmap
│ │ │ ├── B5-H.bcmap
│ │ │ ├── B5-V.bcmap
│ │ │ ├── B5pc-H.bcmap
│ │ │ ├── B5pc-V.bcmap
│ │ │ ├── CNS-EUC-H.bcmap
│ │ │ ├── CNS-EUC-V.bcmap
│ │ │ ├── CNS1-H.bcmap
│ │ │ ├── CNS1-V.bcmap
│ │ │ ├── CNS2-H.bcmap
│ │ │ ├── CNS2-V.bcmap
│ │ │ ├── ETHK-B5-H.bcmap
│ │ │ ├── ETHK-B5-V.bcmap
│ │ │ ├── ETen-B5-H.bcmap
│ │ │ ├── ETen-B5-V.bcmap
│ │ │ ├── ETenms-B5-H.bcmap
│ │ │ ├── ETenms-B5-V.bcmap
│ │ │ ├── EUC-H.bcmap
│ │ │ ├── EUC-V.bcmap
│ │ │ ├── Ext-H.bcmap
│ │ │ ├── Ext-RKSJ-H.bcmap
│ │ │ ├── Ext-RKSJ-V.bcmap
│ │ │ ├── Ext-V.bcmap
│ │ │ ├── GB-EUC-H.bcmap
│ │ │ ├── GB-EUC-V.bcmap
│ │ │ ├── GB-H.bcmap
│ │ │ ├── GB-V.bcmap
│ │ │ ├── GBK-EUC-H.bcmap
│ │ │ ├── GBK-EUC-V.bcmap
│ │ │ ├── GBK2K-H.bcmap
│ │ │ ├── GBK2K-V.bcmap
│ │ │ ├── GBKp-EUC-H.bcmap
│ │ │ ├── GBKp-EUC-V.bcmap
│ │ │ ├── GBT-EUC-H.bcmap
│ │ │ ├── GBT-EUC-V.bcmap
│ │ │ ├── GBT-H.bcmap
│ │ │ ├── GBT-V.bcmap
│ │ │ ├── GBTpc-EUC-H.bcmap
│ │ │ ├── GBTpc-EUC-V.bcmap
│ │ │ ├── GBpc-EUC-H.bcmap
│ │ │ ├── GBpc-EUC-V.bcmap
│ │ │ ├── H.bcmap
│ │ │ ├── HKdla-B5-H.bcmap
│ │ │ ├── HKdla-B5-V.bcmap
│ │ │ ├── HKdlb-B5-H.bcmap
│ │ │ ├── HKdlb-B5-V.bcmap
│ │ │ ├── HKgccs-B5-H.bcmap
│ │ │ ├── HKgccs-B5-V.bcmap
│ │ │ ├── HKm314-B5-H.bcmap
│ │ │ ├── HKm314-B5-V.bcmap
│ │ │ ├── HKm471-B5-H.bcmap
│ │ │ ├── HKm471-B5-V.bcmap
│ │ │ ├── HKscs-B5-H.bcmap
│ │ │ ├── HKscs-B5-V.bcmap
│ │ │ ├── Hankaku.bcmap
│ │ │ ├── Hiragana.bcmap
│ │ │ ├── KSC-EUC-H.bcmap
│ │ │ ├── KSC-EUC-V.bcmap
│ │ │ ├── KSC-H.bcmap
│ │ │ ├── KSC-Johab-H.bcmap
│ │ │ ├── KSC-Johab-V.bcmap
│ │ │ ├── KSC-V.bcmap
│ │ │ ├── KSCms-UHC-H.bcmap
│ │ │ ├── KSCms-UHC-HW-H.bcmap
│ │ │ ├── KSCms-UHC-HW-V.bcmap
│ │ │ ├── KSCms-UHC-V.bcmap
│ │ │ ├── KSCpc-EUC-H.bcmap
│ │ │ ├── KSCpc-EUC-V.bcmap
│ │ │ ├── Katakana.bcmap
│ │ │ ├── LICENSE
│ │ │ ├── NWP-H.bcmap
│ │ │ ├── NWP-V.bcmap
│ │ │ ├── RKSJ-H.bcmap
│ │ │ ├── RKSJ-V.bcmap
│ │ │ ├── Roman.bcmap
│ │ │ ├── UniCNS-UCS2-H.bcmap
│ │ │ ├── UniCNS-UCS2-V.bcmap
│ │ │ ├── UniCNS-UTF16-H.bcmap
│ │ │ ├── UniCNS-UTF16-V.bcmap
│ │ │ ├── UniCNS-UTF32-H.bcmap
│ │ │ ├── UniCNS-UTF32-V.bcmap
│ │ │ ├── UniCNS-UTF8-H.bcmap
│ │ │ ├── UniCNS-UTF8-V.bcmap
│ │ │ ├── UniGB-UCS2-H.bcmap
│ │ │ ├── UniGB-UCS2-V.bcmap
│ │ │ ├── UniGB-UTF16-H.bcmap
│ │ │ ├── UniGB-UTF16-V.bcmap
│ │ │ ├── UniGB-UTF32-H.bcmap
│ │ │ ├── UniGB-UTF32-V.bcmap
│ │ │ ├── UniGB-UTF8-H.bcmap
│ │ │ ├── UniGB-UTF8-V.bcmap
│ │ │ ├── UniJIS-UCS2-H.bcmap
│ │ │ ├── UniJIS-UCS2-HW-H.bcmap
│ │ │ ├── UniJIS-UCS2-HW-V.bcmap
│ │ │ ├── UniJIS-UCS2-V.bcmap
│ │ │ ├── UniJIS-UTF16-H.bcmap
│ │ │ ├── UniJIS-UTF16-V.bcmap
│ │ │ ├── UniJIS-UTF32-H.bcmap
│ │ │ ├── UniJIS-UTF32-V.bcmap
│ │ │ ├── UniJIS-UTF8-H.bcmap
│ │ │ ├── UniJIS-UTF8-V.bcmap
│ │ │ ├── UniJIS2004-UTF16-H.bcmap
│ │ │ ├── UniJIS2004-UTF16-V.bcmap
│ │ │ ├── UniJIS2004-UTF32-H.bcmap
│ │ │ ├── UniJIS2004-UTF32-V.bcmap
│ │ │ ├── UniJIS2004-UTF8-H.bcmap
│ │ │ ├── UniJIS2004-UTF8-V.bcmap
│ │ │ ├── UniJISPro-UCS2-HW-V.bcmap
│ │ │ ├── UniJISPro-UCS2-V.bcmap
│ │ │ ├── UniJISPro-UTF8-V.bcmap
│ │ │ ├── UniJISX0213-UTF32-H.bcmap
│ │ │ ├── UniJISX0213-UTF32-V.bcmap
│ │ │ ├── UniJISX02132004-UTF32-H.bcmap
│ │ │ ├── UniJISX02132004-UTF32-V.bcmap
│ │ │ ├── UniKS-UCS2-H.bcmap
│ │ │ ├── UniKS-UCS2-V.bcmap
│ │ │ ├── UniKS-UTF16-H.bcmap
│ │ │ ├── UniKS-UTF16-V.bcmap
│ │ │ ├── UniKS-UTF32-H.bcmap
│ │ │ ├── UniKS-UTF32-V.bcmap
│ │ │ ├── UniKS-UTF8-H.bcmap
│ │ │ ├── UniKS-UTF8-V.bcmap
│ │ │ ├── V.bcmap
│ │ │ └── WP-Symbol.bcmap
│ │ ├── locale/
│ │ │ ├── br/
│ │ │ │ └── viewer.properties
│ │ │ ├── ca/
│ │ │ │ └── viewer.properties
│ │ │ ├── de/
│ │ │ │ └── viewer.properties
│ │ │ ├── en-CA/
│ │ │ │ └── viewer.properties
│ │ │ ├── en-GB/
│ │ │ │ └── viewer.properties
│ │ │ ├── en-US/
│ │ │ │ └── viewer.properties
│ │ │ ├── eu/
│ │ │ │ └── viewer.properties
│ │ │ ├── fr/
│ │ │ │ └── viewer.properties
│ │ │ ├── ja/
│ │ │ │ └── viewer.properties
│ │ │ ├── locale.properties
│ │ │ ├── ru/
│ │ │ │ └── viewer.properties
│ │ │ ├── uk/
│ │ │ │ └── viewer.properties
│ │ │ ├── zh-CN/
│ │ │ │ └── viewer.properties
│ │ │ └── zh-TW/
│ │ │ └── viewer.properties
│ │ ├── pdf-viewer-template.html
│ │ ├── viewer.css
│ │ └── viewer.js
│ ├── export/
│ │ ├── CMakeLists.txt
│ │ ├── exportdata.cpp
│ │ ├── exportdata.h
│ │ ├── exporter.cpp
│ │ ├── exporter.h
│ │ ├── webviewexporter.cpp
│ │ └── webviewexporter.h
│ ├── fakeaccessible.cpp
│ ├── fakeaccessible.h
│ ├── imagehost/
│ │ ├── CMakeLists.txt
│ │ ├── giteeimagehost.cpp
│ │ ├── giteeimagehost.h
│ │ ├── githubimagehost.cpp
│ │ ├── githubimagehost.h
│ │ ├── imagehost.cpp
│ │ ├── imagehost.h
│ │ ├── imagehostmgr.cpp
│ │ ├── imagehostmgr.h
│ │ ├── imagehostutils.cpp
│ │ ├── imagehostutils.h
│ │ ├── repoimagehost.cpp
│ │ └── repoimagehost.h
│ ├── main.cpp
│ ├── search/
│ │ ├── CMakeLists.txt
│ │ ├── filesearchengine.cpp
│ │ ├── filesearchengine.h
│ │ ├── isearchengine.h
│ │ ├── isearchinfoprovider.h
│ │ ├── searchdata.cpp
│ │ ├── searchdata.h
│ │ ├── searcher.cpp
│ │ ├── searcher.h
│ │ ├── searchhelper.cpp
│ │ ├── searchhelper.h
│ │ ├── searchresultitem.cpp
│ │ ├── searchresultitem.h
│ │ ├── searchtoken.cpp
│ │ └── searchtoken.h
│ ├── snippet/
│ │ ├── CMakeLists.txt
│ │ ├── dynamicsnippet.cpp
│ │ ├── dynamicsnippet.h
│ │ ├── snippet.cpp
│ │ ├── snippet.h
│ │ ├── snippetmgr.cpp
│ │ └── snippetmgr.h
│ ├── task/
│ │ ├── CMakeLists.txt
│ │ ├── shellexecution.cpp
│ │ ├── shellexecution.h
│ │ ├── task.cpp
│ │ ├── task.h
│ │ ├── taskmgr.cpp
│ │ ├── taskmgr.h
│ │ ├── taskvariablemgr.cpp
│ │ └── taskvariablemgr.h
│ ├── unitedentry/
│ │ ├── CMakeLists.txt
│ │ ├── entrypopup.cpp
│ │ ├── entrypopup.h
│ │ ├── entrywidgetfactory.cpp
│ │ ├── entrywidgetfactory.h
│ │ ├── findunitedentry.cpp
│ │ ├── findunitedentry.h
│ │ ├── helpunitedentry.cpp
│ │ ├── helpunitedentry.h
│ │ ├── iunitedentry.cpp
│ │ ├── iunitedentry.h
│ │ ├── unitedentry.cpp
│ │ ├── unitedentry.h
│ │ ├── unitedentryalias.cpp
│ │ ├── unitedentryalias.h
│ │ ├── unitedentryhelper.cpp
│ │ ├── unitedentryhelper.h
│ │ ├── unitedentrymgr.cpp
│ │ └── unitedentrymgr.h
│ ├── utils/
│ │ ├── CMakeLists.txt
│ │ ├── asyncworker.cpp
│ │ ├── asyncworker.h
│ │ ├── callbackpool.cpp
│ │ ├── callbackpool.h
│ │ ├── clipboardutils.cpp
│ │ ├── clipboardutils.h
│ │ ├── contentmediautils.cpp
│ │ ├── contentmediautils.h
│ │ ├── docsutils.cpp
│ │ ├── docsutils.h
│ │ ├── fileutils.cpp
│ │ ├── fileutils.h
│ │ ├── htmlutils.cpp
│ │ ├── htmlutils.h
│ │ ├── iconutils.cpp
│ │ ├── iconutils.h
│ │ ├── imageutils.cpp
│ │ ├── imageutils.h
│ │ ├── pathutils.cpp
│ │ ├── pathutils.h
│ │ ├── printutils.cpp
│ │ ├── printutils.h
│ │ ├── processutils.cpp
│ │ ├── processutils.h
│ │ ├── urldragdroputils.cpp
│ │ ├── urldragdroputils.h
│ │ ├── utils.cpp
│ │ ├── utils.h
│ │ ├── vxurlutils.cpp
│ │ ├── vxurlutils.h
│ │ ├── webutils.cpp
│ │ ├── webutils.h
│ │ ├── widgetutils.cpp
│ │ └── widgetutils.h
│ └── widgets/
│ ├── CMakeLists.txt
│ ├── attachmentdragdropareaindicator.cpp
│ ├── attachmentdragdropareaindicator.h
│ ├── attachmentpopup.cpp
│ ├── attachmentpopup.h
│ ├── biaction.cpp
│ ├── biaction.h
│ ├── buttonpopup.cpp
│ ├── buttonpopup.h
│ ├── combobox.cpp
│ ├── combobox.h
│ ├── consoleviewer.cpp
│ ├── consoleviewer.h
│ ├── dialogs/
│ │ ├── deleteconfirmdialog.cpp
│ │ ├── deleteconfirmdialog.h
│ │ ├── dialog.cpp
│ │ ├── dialog.h
│ │ ├── exportdialog.cpp
│ │ ├── exportdialog.h
│ │ ├── filepropertiesdialog.cpp
│ │ ├── filepropertiesdialog.h
│ │ ├── folderfilesfilterwidget.cpp
│ │ ├── folderfilesfilterwidget.h
│ │ ├── folderpropertiesdialog.cpp
│ │ ├── folderpropertiesdialog.h
│ │ ├── imageinsertdialog.cpp
│ │ ├── imageinsertdialog.h
│ │ ├── importfolderdialog.cpp
│ │ ├── importfolderdialog.h
│ │ ├── importfolderutils.cpp
│ │ ├── importfolderutils.h
│ │ ├── importnotebookdialog.cpp
│ │ ├── importnotebookdialog.h
│ │ ├── levellabelwithupbutton.cpp
│ │ ├── levellabelwithupbutton.h
│ │ ├── linkinsertdialog.cpp
│ │ ├── linkinsertdialog.h
│ │ ├── managenotebooksdialog.cpp
│ │ ├── managenotebooksdialog.h
│ │ ├── newfolderdialog.cpp
│ │ ├── newfolderdialog.h
│ │ ├── newnotebookdialog.cpp
│ │ ├── newnotebookdialog.h
│ │ ├── newnotebookfromfolderdialog.cpp
│ │ ├── newnotebookfromfolderdialog.h
│ │ ├── newnotedialog.cpp
│ │ ├── newnotedialog.h
│ │ ├── newsnippetdialog.cpp
│ │ ├── newsnippetdialog.h
│ │ ├── newtagdialog.cpp
│ │ ├── newtagdialog.h
│ │ ├── nodeinfowidget.cpp
│ │ ├── nodeinfowidget.h
│ │ ├── notebookinfowidget.cpp
│ │ ├── notebookinfowidget.h
│ │ ├── notepropertiesdialog.cpp
│ │ ├── notepropertiesdialog.h
│ │ ├── notetemplateselector.cpp
│ │ ├── notetemplateselector.h
│ │ ├── renametagdialog.cpp
│ │ ├── renametagdialog.h
│ │ ├── scrolldialog.cpp
│ │ ├── scrolldialog.h
│ │ ├── selectdialog.cpp
│ │ ├── selectdialog.h
│ │ ├── selectionitemwidget.cpp
│ │ ├── selectionitemwidget.h
│ │ ├── settings/
│ │ │ ├── appearancepage.cpp
│ │ │ ├── appearancepage.h
│ │ │ ├── editorpage.cpp
│ │ │ ├── editorpage.h
│ │ │ ├── fileassociationpage.cpp
│ │ │ ├── fileassociationpage.h
│ │ │ ├── generalpage.cpp
│ │ │ ├── generalpage.h
│ │ │ ├── imagehostpage.cpp
│ │ │ ├── imagehostpage.h
│ │ │ ├── markdowneditorpage.cpp
│ │ │ ├── markdowneditorpage.h
│ │ │ ├── miscpage.cpp
│ │ │ ├── miscpage.h
│ │ │ ├── newimagehostdialog.cpp
│ │ │ ├── newimagehostdialog.h
│ │ │ ├── notemanagementpage.cpp
│ │ │ ├── notemanagementpage.h
│ │ │ ├── quickaccesspage.cpp
│ │ │ ├── quickaccesspage.h
│ │ │ ├── settingsdialog.cpp
│ │ │ ├── settingsdialog.h
│ │ │ ├── settingspage.cpp
│ │ │ ├── settingspage.h
│ │ │ ├── texteditorpage.cpp
│ │ │ ├── texteditorpage.h
│ │ │ ├── themepage.cpp
│ │ │ ├── themepage.h
│ │ │ ├── vipage.cpp
│ │ │ └── vipage.h
│ │ ├── snippetinfowidget.cpp
│ │ ├── snippetinfowidget.h
│ │ ├── snippetpropertiesdialog.cpp
│ │ ├── snippetpropertiesdialog.h
│ │ ├── sortdialog.cpp
│ │ ├── sortdialog.h
│ │ ├── tableinsertdialog.cpp
│ │ ├── tableinsertdialog.h
│ │ ├── updater.cpp
│ │ ├── updater.h
│ │ ├── viewtagsdialog.cpp
│ │ └── viewtagsdialog.h
│ ├── dockwidgethelper.cpp
│ ├── dockwidgethelper.h
│ ├── dragdropareaindicator.cpp
│ ├── dragdropareaindicator.h
│ ├── editors/
│ │ ├── graphhelper.cpp
│ │ ├── graphhelper.h
│ │ ├── graphvizhelper.cpp
│ │ ├── graphvizhelper.h
│ │ ├── markdowneditor.cpp
│ │ ├── markdowneditor.h
│ │ ├── markdowntable.cpp
│ │ ├── markdowntable.h
│ │ ├── markdowntablehelper.cpp
│ │ ├── markdowntablehelper.h
│ │ ├── markdownviewer.cpp
│ │ ├── markdownviewer.h
│ │ ├── markdownvieweradapter.cpp
│ │ ├── markdownvieweradapter.h
│ │ ├── mindmapeditor.cpp
│ │ ├── mindmapeditor.h
│ │ ├── mindmapeditoradapter.cpp
│ │ ├── mindmapeditoradapter.h
│ │ ├── pdfviewer.cpp
│ │ ├── pdfviewer.h
│ │ ├── pdfvieweradapter.cpp
│ │ ├── pdfvieweradapter.h
│ │ ├── plantumlhelper.cpp
│ │ ├── plantumlhelper.h
│ │ ├── previewhelper.cpp
│ │ ├── previewhelper.h
│ │ ├── statuswidget.cpp
│ │ ├── statuswidget.h
│ │ ├── texteditor.cpp
│ │ ├── texteditor.h
│ │ ├── webviewadapter.cpp
│ │ └── webviewadapter.h
│ ├── editreaddiscardaction.cpp
│ ├── editreaddiscardaction.h
│ ├── filesystemviewer.cpp
│ ├── filesystemviewer.h
│ ├── findandreplacewidget.cpp
│ ├── findandreplacewidget.h
│ ├── floatingwidget.cpp
│ ├── floatingwidget.h
│ ├── framelessmainwindow/
│ │ ├── framelessmainwindow.cpp
│ │ ├── framelessmainwindow.h
│ │ ├── framelessmainwindowimpl.h
│ │ ├── framelessmainwindowlinux.cpp
│ │ ├── framelessmainwindowlinux.h
│ │ ├── framelessmainwindowwin.cpp
│ │ └── framelessmainwindowwin.h
│ ├── fullscreentoggleaction.cpp
│ ├── fullscreentoggleaction.h
│ ├── historypanel.cpp
│ ├── historypanel.h
│ ├── itemproxystyle.cpp
│ ├── itemproxystyle.h
│ ├── labelwithbuttonswidget.cpp
│ ├── labelwithbuttonswidget.h
│ ├── lineedit.cpp
│ ├── lineedit.h
│ ├── lineeditdelegate.cpp
│ ├── lineeditdelegate.h
│ ├── lineeditwithsnippet.cpp
│ ├── lineeditwithsnippet.h
│ ├── listwidget.cpp
│ ├── listwidget.h
│ ├── locationinputwithbrowsebutton.cpp
│ ├── locationinputwithbrowsebutton.h
│ ├── locationlist.cpp
│ ├── locationlist.h
│ ├── mainwindow.cpp
│ ├── mainwindow.h
│ ├── markdownviewwindow.cpp
│ ├── markdownviewwindow.h
│ ├── messageboxhelper.cpp
│ ├── messageboxhelper.h
│ ├── mindmapviewwindow.cpp
│ ├── mindmapviewwindow.h
│ ├── navigationmode.cpp
│ ├── navigationmode.h
│ ├── navigationmodemgr.cpp
│ ├── navigationmodemgr.h
│ ├── navigationmodewrapper.h
│ ├── notebookexplorer.cpp
│ ├── notebookexplorer.h
│ ├── notebookexplorersession.cpp
│ ├── notebookexplorersession.h
│ ├── notebooknodeexplorer.cpp
│ ├── notebooknodeexplorer.h
│ ├── notebookselector.cpp
│ ├── notebookselector.h
│ ├── outlinepopup.cpp
│ ├── outlinepopup.h
│ ├── outlineprovider.cpp
│ ├── outlineprovider.h
│ ├── outlineviewer.cpp
│ ├── outlineviewer.h
│ ├── pdfviewwindow.cpp
│ ├── pdfviewwindow.h
│ ├── propertydefs.cpp
│ ├── propertydefs.h
│ ├── qtreewidgetstatecache.h
│ ├── quickselector.cpp
│ ├── quickselector.h
│ ├── searchinfoprovider.cpp
│ ├── searchinfoprovider.h
│ ├── searchpanel.cpp
│ ├── searchpanel.h
│ ├── simplesegmenthighlighter.cpp
│ ├── simplesegmenthighlighter.h
│ ├── snippetpanel.cpp
│ ├── snippetpanel.h
│ ├── statusbarhelper.cpp
│ ├── statusbarhelper.h
│ ├── styleditemdelegate.cpp
│ ├── styleditemdelegate.h
│ ├── systemtrayhelper.cpp
│ ├── systemtrayhelper.h
│ ├── tagexplorer.cpp
│ ├── tagexplorer.h
│ ├── tagpopup.cpp
│ ├── tagpopup.h
│ ├── tagviewer.cpp
│ ├── tagviewer.h
│ ├── textviewwindow.cpp
│ ├── textviewwindow.h
│ ├── textviewwindowhelper.h
│ ├── titlebar.cpp
│ ├── titlebar.h
│ ├── titletoolbar.cpp
│ ├── titletoolbar.h
│ ├── toolbarhelper.cpp
│ ├── toolbarhelper.h
│ ├── toolbox.cpp
│ ├── toolbox.h
│ ├── treeview.cpp
│ ├── treeview.h
│ ├── treewidget.cpp
│ ├── treewidget.h
│ ├── treewidgetitem.cpp
│ ├── treewidgetitem.h
│ ├── viewarea.cpp
│ ├── viewarea.h
│ ├── viewareasession.cpp
│ ├── viewareasession.h
│ ├── viewsplit.cpp
│ ├── viewsplit.h
│ ├── viewwindow.cpp
│ ├── viewwindow.h
│ ├── viewwindowsession.cpp
│ ├── viewwindowsession.h
│ ├── viewwindowtoolbarhelper.cpp
│ ├── viewwindowtoolbarhelper.h
│ ├── webpage.cpp
│ ├── webpage.h
│ ├── webviewer.cpp
│ ├── webviewer.h
│ ├── widgetsfactory.cpp
│ ├── widgetsfactory.h
│ ├── windowspanel.cpp
│ ├── windowspanel.h
│ ├── windowsprovider.cpp
│ ├── windowsprovider.h
│ ├── wordcountpopup.cpp
│ └── wordcountpopup.h
└── tests/
├── CMakeLists.txt
├── test_core/
│ ├── CMakeLists.txt
│ ├── test_notebook/
│ │ ├── CMakeLists.txt
│ │ ├── dummynode.cpp
│ │ ├── dummynode.h
│ │ ├── dummynotebook.cpp
│ │ ├── dummynotebook.h
│ │ ├── test_notebook.cpp
│ │ ├── test_notebook.h
│ │ ├── testnotebookdatabase.cpp
│ │ └── testnotebookdatabase.h
│ └── test_theme/
│ ├── test_theme.cpp
│ └── test_theme.h
├── test_task/
│ ├── test_task.cpp
│ └── test_task.h
└── test_utils/
├── test_utils.cpp
└── test_utils.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .clang-format
================================================
---
Language: Cpp
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignArrayOfStructures: None
AlignConsecutiveAssignments:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
AlignFunctionDeclarations: false
AlignFunctionPointers: false
PadOperators: true
AlignConsecutiveBitFields:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
AlignFunctionDeclarations: false
AlignFunctionPointers: false
PadOperators: false
AlignConsecutiveDeclarations:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
AlignFunctionDeclarations: true
AlignFunctionPointers: false
PadOperators: false
AlignConsecutiveMacros:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
AlignFunctionDeclarations: false
AlignFunctionPointers: false
PadOperators: false
AlignConsecutiveShortCaseStatements:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCaseArrows: false
AlignCaseColons: false
AlignConsecutiveTableGenBreakingDAGArgColons:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
AlignFunctionDeclarations: false
AlignFunctionPointers: false
PadOperators: false
AlignConsecutiveTableGenCondOperatorColons:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
AlignFunctionDeclarations: false
AlignFunctionPointers: false
PadOperators: false
AlignConsecutiveTableGenDefinitionColons:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
AlignFunctionDeclarations: false
AlignFunctionPointers: false
PadOperators: false
AlignEscapedNewlines: Right
AlignOperands: Align
AlignTrailingComments:
Kind: Always
OverEmptyLines: 0
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowBreakBeforeNoexceptSpecifier: Never
AllowShortBlocksOnASingleLine: Never
AllowShortCaseExpressionOnASingleLine: true
AllowShortCaseLabelsOnASingleLine: false
AllowShortCompoundRequirementOnASingleLine: true
AllowShortEnumsOnASingleLine: true
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: Never
AllowShortLambdasOnASingleLine: All
AllowShortLoopsOnASingleLine: false
AllowShortNamespacesOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AttributeMacros:
- __capability
BinPackArguments: true
BinPackLongBracedList: true
BinPackParameters: BinPack
BitFieldColonSpacing: Both
BracedInitializerIndentWidth: -1
BraceWrapping:
AfterCaseLabel: false
AfterClass: false
AfterControlStatement: Never
AfterEnum: false
AfterExternBlock: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
BeforeCatch: false
BeforeElse: false
BeforeLambdaBody: false
BeforeWhile: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakAdjacentStringLiterals: true
BreakAfterAttributes: Leave
BreakAfterJavaFieldAnnotations: false
BreakAfterReturnType: None
BreakArrays: true
BreakBeforeBinaryOperators: None
BreakBeforeConceptDeclarations: Always
BreakBeforeBraces: Attach
BreakBeforeInlineASMColon: OnlyMultiline
BreakBeforeTemplateCloser: false
BreakBeforeTernaryOperators: true
BreakBinaryOperations: Never
BreakConstructorInitializers: BeforeColon
BreakFunctionDefinitionParameters: false
BreakInheritanceList: BeforeColon
BreakStringLiterals: true
BreakTemplateDeclarations: MultiLine
ColumnLimit: 100
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: LogicalBlock
EnumTrailingComma: Leave
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IfMacros:
- KJ_IF_MAYBE
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
SortPriority: 0
CaseSensitive: false
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
SortPriority: 0
CaseSensitive: false
- Regex: '.*'
Priority: 1
SortPriority: 0
CaseSensitive: false
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
IndentAccessModifiers: false
IndentCaseBlocks: false
IndentCaseLabels: false
IndentExportBlock: true
IndentExternBlock: AfterExternBlock
IndentGotoLabels: true
IndentPPDirectives: None
IndentRequiresClause: true
IndentWidth: 2
IndentWrappedFunctionNames: false
InsertBraces: false
InsertNewlineAtEOF: false
InsertTrailingCommas: None
IntegerLiteralSeparator:
Binary: 0
BinaryMinDigits: 0
Decimal: 0
DecimalMinDigits: 0
Hex: 0
HexMinDigits: 0
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLines:
AtEndOfFile: false
AtStartOfBlock: true
AtStartOfFile: true
KeepFormFeed: false
LambdaBodyIndentation: Signature
LineEnding: DeriveLF
MacroBlockBegin: ''
MacroBlockEnd: ''
MainIncludeChar: Quote
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCBreakBeforeNestedBlockParam: true
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
OneLineFormatOffRegex: ''
PackConstructorInitializers: BinPack
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakBeforeMemberAccess: 150
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakOpenParenthesis: 0
PenaltyBreakScopeResolution: 500
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyIndentedWhitespace: 0
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
PPIndentWidth: -1
QualifierAlignment: Leave
ReferenceAlignment: Pointer
ReflowComments: Always
RemoveBracesLLVM: false
RemoveEmptyLinesInUnwrappedLines: false
RemoveParentheses: Leave
RemoveSemicolon: false
RequiresClausePosition: OwnLine
RequiresExpressionIndentation: OuterScope
SeparateDefinitionBlocks: Leave
ShortNamespaceLines: 1
SkipMacroDefinitionBody: false
SortIncludes:
Enabled: true
IgnoreCase: false
SortJavaStaticImport: Before
SortUsingDeclarations: LexicographicNumeric
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterOperatorKeyword: false
SpaceAfterTemplateKeyword: true
SpaceAroundPointerQualifiers: Default
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeJsonColon: false
SpaceBeforeParens: ControlStatements
SpaceBeforeParensOptions:
AfterControlStatements: true
AfterForeachMacros: true
AfterFunctionDefinitionName: false
AfterFunctionDeclarationName: false
AfterIfMacros: true
AfterNot: false
AfterOverloadedOperator: false
AfterPlacementOperator: true
AfterRequiresInClause: false
AfterRequiresInExpression: false
BeforeNonEmptyParentheses: false
SpaceBeforeRangeBasedForLoopColon: true
SpaceBeforeSquareBrackets: false
SpaceInEmptyBlock: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: Never
SpacesInContainerLiterals: true
SpacesInLineCommentPrefix:
Minimum: 1
Maximum: -1
SpacesInParens: Never
SpacesInParensOptions:
ExceptDoubleParentheses: false
InCStyleCasts: false
InConditionalStatements: false
InEmptyParentheses: false
Other: false
SpacesInSquareBrackets: false
Standard: Latest
StatementAttributeLikeMacros:
- Q_EMIT
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TableGenBreakInsideDAGArg: DontBreak
TabWidth: 8
UseTab: Never
VerilogBreakBetweenInstancePorts: true
WhitespaceSensitiveMacros:
- BOOST_PP_STRINGIZE
- CF_SWIFT_NAME
- NS_SWIFT_NAME
- PP_STRINGIZE
- STRINGIZE
WrapNamespaceBodyWithEmptyLines: Leave
...
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. Windows 10]
- Version [e.g. 3.0.0]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/workflows/ci-linux.yml
================================================
name: CI-Linux
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab.
workflow_dispatch:
inputs:
debug_enabled:
type: boolean
description: 'Run the build with tmate debugging enabled'
required: false
default: false
env:
VNOTE_VER: 3.20.1
CMAKE_VER: 3.24.3
jobs:
build-linux:
name: Build On Ubuntu
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
# Checks-out your repository under $GITHUB_WORKSPACE.
- uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Init Submodules
run: |
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
git submodule sync --recursive
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
- name: Install a Fresh CMake
run: |
wget --no-verbose https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-Linux-x86_64.sh
chmod +x cmake-${CMAKE_VER}-Linux-x86_64.sh
mkdir ${{runner.workspace}}/cmake
sudo ./cmake-${CMAKE_VER}-Linux-x86_64.sh --skip-license --prefix=${{runner.workspace}}/cmake
sudo rm -f /usr/local/bin/cmake /usr/local/bin/cpack
sudo ln -s ${{runner.workspace}}/cmake/bin/cmake /usr/local/bin/cmake
sudo ln -s ${{runner.workspace}}/cmake/bin/cpack /usr/local/bin/cpack
- name: Install linuxdeploy
uses: miurahr/install-linuxdeploy-action@v1
with:
plugins: qt appimage
- name: Install Dependencies
run: |
sudo DEBIAN_FRONTEND=noninteractive apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libfcitx5-qt-dev fcitx-libs-dev extra-cmake-modules libxkbcommon-dev
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y tree
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y fuse libxcb-cursor-dev
python3 -m pip config set global.break-system-packages true
- name: Cache Qt
id: cache-qt
uses: actions/cache@v4
with:
path: ${{runner.workspace}}/Qt
key: ${{ runner.os }}-QtCache-6.8
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: 6.8.3
target: desktop
modules: 'qtwebengine qtwebchannel qtpositioning qtpdf qtimageformats qt5compat qtserialport'
tools: 'tools_opensslv3_src'
cache: 'true'
- name: Compile OpenSSLV3
run: |
cd ${Qt6_DIR}/../../Tools/OpenSSLv3/src
./Configure
make -j2
sudo make install
- name: Create Build Dir
run: mkdir build
working-directory: ${{runner.workspace}}
- name: Compile fcitxqt5
run: |
git clone https://github.com/fcitx/fcitx-qt5
cd fcitx-qt5
mkdir build && cd build
cmake -DENABLE_QT5=OFF -DENABLE_QT6=ON ..
make -j2
sudo make install
working-directory: ${{runner.workspace}}/build
- name: Compile qt6ct
run: |
git clone https://github.com/trialuser02/qt6ct qt6ct.git
cd qt6ct.git
qmake
make -j$(nproc) && sudo make install
working-directory: ${{runner.workspace}}/build
- name: Configure Project
run: |
qmake -v
cmake --version
cmake ${GITHUB_WORKSPACE}
working-directory: ${{runner.workspace}}/build
- name: Build Project
run: |
# Remove the libqsqlmimer.so as libmimerapi.so is not deployed with Qt6
rm ${{runner.workspace}}/Qt/6.*/gcc_64/plugins/sqldrivers/libqsqlmimer.so
cmake --build . --target pack
working-directory: ${{runner.workspace}}/build
- name: Fix Package
run: |
mkdir fixpackage
mv VNote*.AppImage ./fixpackage
pushd fixpackage
# Extract the AppImage
./VNote*.AppImage --appimage-extract
# Remove libnss3.so and libnssutil3.so
rm ./squashfs-root/usr/lib/libnss*.so
# Re-package
rm VNote*.AppImage
linuxdeploy-plugin-appimage-x86_64.AppImage --appdir=./squashfs-root
mv VNote*.AppImage ../
popd
mv VNote*.AppImage VNote-${{env.VNOTE_VER}}-linux-x64.AppImage
working-directory: ${{runner.workspace}}/build
- name: Archive Artifacts
uses: actions/upload-artifact@v4
with:
name: VNote-${{env.VNOTE_VER}}-linux-x64.AppImage
path: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-linux-x64.AppImage
- name: Update Tag
if: github.ref == 'refs/heads/master'
run: |
git tag --force continuous-build ${GITHUB_SHA}
git push --force --tags
- name: Update Continuous Build Release
if: github.ref == 'refs/heads/master'
uses: johnwbyrd/update-release@v1.0.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
files: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-linux-x64.AppImage
release: Continuous Build
tag: continuous-build
- name: Release
if: github.ref == 'refs/heads/master' && startsWith(github.event.head_commit.message, '[Release]')
uses: ncipollo/release-action@v1.11.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
artifacts: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-linux-x64.AppImage
commit: master
tag: v${{env.VNOTE_VER}}
allowUpdates: true
draft: true
================================================
FILE: .github/workflows/ci-macos.yml
================================================
name: CI-MacOS
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab.
workflow_dispatch:
inputs:
debug_enabled:
type: boolean
description: 'Run the build with tmate debugging enabled'
required: false
default: false
env:
VNOTE_VER: 3.20.1
CMAKE_VER: 3.24.3
jobs:
build:
environment: Mac-code-sign
name: Build On MacOS
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
config:
- name: "Build on Arm64"
os: macos-latest
arch: universal
qt: 6.8.3
runs-on: ${{matrix.config.os}}
steps:
# Checks-out your repository under $GITHUB_WORKSPACE.
- uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Init Submodules
run: |
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
git submodule sync --recursive
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
- name: Install Dependencies
run: |
brew install tree libiodbc libpq
- name: Fix SQL
run: |
sudo mkdir -p /usr/local/opt/libiodbc/lib
sudo ln -s /opt/homebrew/opt/libiodbc/lib/libiodbc.2.dylib /usr/local/opt/libiodbc/lib/libiodbc.2.dylib
sudo mkdir -p /Applications/Postgres.app/Contents/Versions/14/lib
sudo ln -s /opt/homebrew/Cellar/libpq/16.3/lib/libpq.5.dylib /Applications/Postgres.app/Contents/Versions/14/lib/libpq.5.dylib
- name: Install a fresh CMake
run: |
wget --no-verbose https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-macos-universal.tar.gz
tar xzf cmake-${CMAKE_VER}-macos-universal.tar.gz
sudo rm -f /usr/local/bin/cmake /usr/local/bin/cpack
sudo ln -s ${{runner.workspace}}/cmake-${CMAKE_VER}-macos-universal/CMake.app/Contents/bin/cmake /usr/local/bin/cmake
sudo ln -s ${{runner.workspace}}/cmake-${CMAKE_VER}-macos-universal/CMake.app/Contents/bin/cpack /usr/local/bin/cpack
working-directory: ${{runner.workspace}}
- name: Install macdeployqtfix
run: |
git clone https://github.com/tamlok/macdeployqtfix.git macdeployqtfix --depth=1
working-directory: ${{runner.workspace}}
- name: Install optool
run: |
wget --no-verbose https://github.com/alexzielenski/optool/releases/download/0.1/optool.zip
unzip ./optool.zip
sudo ln -s ./optool /usr/local/bin/optool
working-directory: ${{runner.workspace}}
- name: Cache Qt
id: cache-qt
uses: actions/cache@v4
with:
path: ${{runner.workspace}}/Qt
key: ${{ runner.os }}-QtCache-6.8
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: ${{matrix.config.qt}}
target: desktop
modules: 'qtwebengine qtwebchannel qtpositioning qtpdf qtimageformats qt5compat qtserialport'
cache: 'true'
- name: Create Build Dir
run: mkdir build
working-directory: ${{runner.workspace}}
- name: Configure Project
run: |
qmake -v
cmake --version
cmake -DMACDEPLOYQTFIX_EXECUTABLE=${{runner.workspace}}/macdeployqtfix/macdeployqtfix.py -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" ${GITHUB_WORKSPACE}
working-directory: ${{runner.workspace}}/build
- name: Build Project
run: |
# Keep only required SQL drivers
rm ${{env.Qt6_DIR}}/plugins/sqldrivers/libqsqlmimer.dylib
rm ${{env.Qt6_DIR}}/plugins/sqldrivers/libqsqlodbc.dylib
rm ${{env.Qt6_DIR}}/plugins/sqldrivers/libqsqlpsql.dylib
# Build the project
cmake --build . --target pack
# Fix Qt frameworks
python3 ${{runner.workspace}}/macdeployqtfix/macdeployqtfix.py ./src/VNote.app/Contents/MacOS/VNote ${{env.Qt6_DIR}}/../..
# Only delete rpaths that exist to avoid errors
for rpath in $(otool -l ./src/VNote.app/Contents/MacOS/VNote | awk '/LC_RPATH/ {getline; getline; print $2}' | grep 'vnote'); do
echo "Checking rpath: $rpath"
if otool -l ./src/VNote.app/Contents/MacOS/VNote | grep -q "$rpath"; then
echo "Deleting rpath: $rpath"
install_name_tool -delete_rpath "$rpath" ./src/VNote.app/Contents/MacOS/VNote
else
echo "Rpath not found: $rpath"
fi
done
for rpath in $(otool -l ./src/VNote.app/Contents/Frameworks/libVTextEdit.dylib | awk '/LC_RPATH/ {getline; getline; print $2}' | grep 'vnote'); do
echo "Checking rpath: $rpath"
if otool -l ./src/VNote.app/Contents/Frameworks/libVTextEdit.dylib | grep -q "$rpath"; then
echo "Deleting rpath: $rpath"
install_name_tool -delete_rpath "$rpath" ./src/VNote.app/Contents/Frameworks/libVTextEdit.dylib
else
echo "Rpath not found: $rpath"
fi
done
# Run macdeployqtfix again to ensure all dependencies are properly fixed
python3 ${{runner.workspace}}/macdeployqtfix/macdeployqtfix.py ./src/VNote.app/Contents/MacOS/VNote ${{env.Qt6_DIR}}/../..
working-directory: ${{runner.workspace}}/build
- name: Codesign Bundle
# Extract the secrets we defined earlier as environment variables
env:
MACOS_CERTIFICATE: ${{ secrets.CLI_MACOS_CERTIFICATE }}
MACOS_CERTIFICATE_PWD: ${{ secrets.CLI_MACOS_CERTIFICATE_PWD }}
MACOS_CERTIFICATE_NAME: ${{ secrets.CLI_MACOS_CERTIFICATE_NAME }}
MACOS_CI_KEYCHAIN_PWD: ${{ secrets.CLI_MACOS_CERTIFICATE }}
run: |
# Turn our base64-encoded certificate back to a regular .p12 file
echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12
# We need to create a new keychain, otherwise using the certificate will prompt
# with a UI dialog asking for the certificate password, which we can't
# use in a headless CI environment
security create-keychain -p "$MACOS_CI_KEYCHAIN_PWD" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "$MACOS_CI_KEYCHAIN_PWD" build.keychain
security import certificate.p12 -k build.keychain -P "$MACOS_CERTIFICATE_PWD" -T /usr/bin/codesign
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$MACOS_CI_KEYCHAIN_PWD" build.keychain
echo "Codesigning main app bundle"
codesign --force --deep -s "$MACOS_CERTIFICATE_NAME" --entitlements ${{github.workspace}}/package/entitlements.xml --options runtime ./src/VNote.app
codesign -v -vvv ./src/VNote.app
hdiutil create -volname "VNote" -srcfolder ./src/VNote.app -ov -format UDZO VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg
codesign --force --deep -s "$MACOS_CERTIFICATE_NAME" --entitlements ${{github.workspace}}/package/entitlements.xml --options runtime ./VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg
codesign -v -vvv ./VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg
working-directory: ${{runner.workspace}}/build
- name: "Notarize Bundle"
# Extract the secrets we defined earlier as environment variables
env:
PROD_MACOS_NOTARIZATION_APPLE_ID: ${{ secrets.CLI_MACOS_NOTARY_USER }}
PROD_MACOS_NOTARIZATION_TEAM_ID: ${{ secrets.CLI_MACOS_TEAM_ID }}
PROD_MACOS_NOTARIZATION_PWD: ${{ secrets.CLI_MACOS_NOTARY_PWD }}
run: |
# Store the notarization credentials so that we can prevent a UI password dialog
# from blocking the CI
echo "Create keychain profile"
xcrun notarytool store-credentials "notarytool-profile" --apple-id "$PROD_MACOS_NOTARIZATION_APPLE_ID" --team-id "$PROD_MACOS_NOTARIZATION_TEAM_ID" --password "$PROD_MACOS_NOTARIZATION_PWD"
# Here we send the notarization request to the Apple's Notarization service, waiting for the result.
# This typically takes a few seconds inside a CI environment, but it might take more depending on the App
# characteristics. Visit the Notarization docs for more information and strategies on how to optimize it if
# you're curious
echo "Notarize app"
xcrun notarytool submit "${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg" --keychain-profile "notarytool-profile" --wait
# Finally, we need to "attach the staple" to our executable, which will allow our app to be
# validated by macOS even when an internet connection is not available.
echo "Attach staple"
xcrun stapler staple "${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg"
# Enable tmate debugging of manually-triggered workflows if the input option was provided
- name: Setup tmate session
uses: mxschmitt/action-tmate@v3
if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }}
- name: Archive DMG
uses: actions/upload-artifact@v4
with:
name: VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}
path: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg
- name: Update Tag
if: github.ref == 'refs/heads/master'
run: |
git tag --force continuous-build ${GITHUB_SHA}
git push --force --tags
- name: Update Continuous Build Release
if: github.ref == 'refs/heads/master'
uses: johnwbyrd/update-release@v1.0.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
files: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg
release: Continuous Build
tag: continuous-build
- name: Release
if: github.ref == 'refs/heads/master' && startsWith(github.event.head_commit.message, '[Release]')
uses: ncipollo/release-action@v1.11.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
artifacts: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-mac-${{matrix.config.arch}}.dmg
commit: master
tag: v${{env.VNOTE_VER}}
allowUpdates: true
draft: true
================================================
FILE: .github/workflows/ci-win.yml
================================================
name: CI-Windows
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab.
workflow_dispatch:
inputs:
debug_enabled:
type: boolean
description: 'Run the build with tmate debugging enabled'
required: false
default: false
env:
VNOTE_VER: 3.20.1
jobs:
build:
name: ${{ matrix.config.name }}
runs-on: windows-${{ matrix.config.vs_version }}
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
config:
- name: "Build on Win64 Qt 6"
arch: win64_msvc2022_64
vs_version: 2022
vs_cmd: "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Auxiliary\\Build\\vcvars64.bat"
qt: 6.8.3
qt_modules: "qtwebengine qtwebchannel qtpositioning qtpdf qtimageformats qt5compat"
qt_tools: tools_opensslv3_x64
qt_major: 6
suffix: ""
steps:
# Checks-out your repository under $GITHUB_WORKSPACE.
- uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Init Submodules
shell: bash
run: |
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
git submodule sync --recursive
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
- name: Cache Qt
id: cache-qt
uses: actions/cache@v4
with:
path: ${{runner.workspace}}/Qt
key: ${{runner.os}}-${{matrix.config.arch}}-QtCache-${{matrix.config.qt}}
- name: Install Qt Official Build
uses: jurplel/install-qt-action@v3
with:
version: ${{matrix.config.qt}}
target: desktop
arch: ${{matrix.config.arch}}
modules: ${{matrix.config.qt_modules}}
tools: ${{matrix.config.qt_tools}}
cache: 'true'
- name: Create Build Dir
shell: bash
run: mkdir build
working-directory: ${{runner.workspace}}
# Enable tmate debugging of manually-triggered workflows if the input option was provided
- name: Setup tmate session
uses: mxschmitt/action-tmate@v3
if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }}
- name: Configure and Build Project
shell: cmd
run: |
cmake --version
call "${{matrix.config.vs_cmd}}"
cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DQT_DEFAULT_MAJOR_VERSION=${{matrix.config.qt_major}} -DOPENSSL_EXTRA_LIB_DIR=${{runner.workspace}}\build\openssl-utils.git\1.1.1j\Win_x64 %GITHUB_WORKSPACE%
cmake --build .
cmake --build . --target=pack
7z x VNote*.zip -o*
dir
working-directory: ${{runner.workspace}}/build
- name: Archive Artifacts
uses: actions/upload-artifact@v4
with:
name: VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}
path: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}
- name: Archive Installer
uses: actions/upload-artifact@v4
with:
name: VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}.msi
path: ${{runner.workspace}}/build/VNote*.msi
- name: Update Tag
if: github.ref == 'refs/heads/master'
shell: bash
run: |
git tag --force continuous-build ${GITHUB_SHA}
git push --force --tags
- name: Update Continuous Build Release
if: github.ref == 'refs/heads/master'
uses: johnwbyrd/update-release@v1.0.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
# glob not supported
files: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}.zip
release: Continuous Build
tag: continuous-build
- name: Release
if: github.ref == 'refs/heads/master' && startsWith(github.event.head_commit.message, '[Release]')
uses: ncipollo/release-action@v1.11.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
# glob not supported
artifacts: ${{runner.workspace}}/build/VNote-${{env.VNOTE_VER}}-win64${{matrix.config.suffix}}
commit: master
tag: v${{env.VNOTE_VER}}
allowUpdates: true
draft: true
================================================
FILE: .gitignore
================================================
*.pro.user
*.pro.user.*
.ccls
compile_commands.json
compile_commands.json.*
compile_flags.txt
.cache
.tasks
.vimspector.json
GPATH
GRTAGS
GTAGS
aqtinstall.log
tags
CMakeLists.txt.user
build
build.*
build*
.DS_Store
.vscode
dev.sh
================================================
FILE: .gitmodules
================================================
[submodule "libs/vtextedit"]
path = libs/vtextedit
url = https://github.com/vnotex/vtextedit.git
[submodule "libs/QHotkey"]
path = libs/QHotkey
url = https://github.com/vnotex/QHotkey.git
================================================
FILE: AGENTS.md
================================================
# VNote Agent Development Guide
## Setup
After cloning the repository, run the init script to set up your development environment:
* **Linux/macOS**: `bash scripts/init.sh`
* **Windows**: `scripts\init.cmd`
## Build/Lint/Test Commands
* **Build**: `mkdir build && cd build && cmake .. && cmake --build . --config Release`
* **Debug Build**: `cmake .. -DCMAKE_BUILD_TYPE=Debug && cmake --build . --config Debug`
* **Run Tests**: Uncomment `add_subdirectory(tests)` in root CMakeLists.txt, rebuild, then `ctest`
* **Run Single Test**: `ctest -R test_task` (use test name pattern matching)
* **Format Code**: Use clang-format with provided `.clang-format` (100 char line limit, 2-space indent)
## C++ Code Style Guidelines
* **Standards**: C++14, Qt 5/6 framework with CMAKE_AUTOMOC/AUTOUIC/AUTORCC enabled
* **Includes**: Order: system includes, Qt includes, local includes (blank line between groups)
* **Namespaces**: Use `vnotex` namespace for all core classes; `using namespace vnotex;` in .cpp files
* **Headers**: Use header guards (`#ifndef CLASSNAME_H`), forward declarations preferred in headers
* **Classes**: CamelCase, private inheritance for utility classes (Noncopyable pattern)
* **Methods**: camelCase with getter prefixes (`getInst()`, `getThemeMgr()`), parameters prefixed with `p_`
* **Members**: Prefix private members with `m_` (e.g., `m_jobj`, `m_themeMgr`)
* **Singletons**: Use static instance pattern: `static Type &getInst() { static Type inst; return inst; }`
* **Qt Integration**: Use signals/slots, QObject inheritance, Q_OBJECT macro for MOC
* **Memory**: Use Qt smart pointers (QScopedPointer, QSharedPointer), not raw new/delete
* **Config**: Access via ConfigMgr::getInst(), JSON-based hierarchical config system
* **Architecture**: Layered structure - core/ for logic, widgets/ for UI, utils/ for helpers
* **Error Handling**: Use custom Exception class with Exception::throwOne(), qCritical/qWarning/qInfo for logging
* **Formatting**: 2-space indent, 100 char line limit, pointer alignment right (e.g., `int *ptr`)
## Architecture Notes
* Core singleton VNoteX coordinates all managers (ThemeMgr, TaskMgr, NotebookMgr, BufferMgr)
* ConfigMgr provides MainConfig, SessionConfig, CoreConfig, EditorConfig, WidgetConfig
* Test framework uses Qt Test (QObject-based tests with initTestCase() and test methods)
================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required (VERSION 3.20)
set(CMAKE_OSX_DEPLOYMENT_TARGET "12.1" CACHE STRING "Minimum OS X deployment version")
project(VNote
VERSION 3.20.1
DESCRIPTION "A pleasant note-taking platform"
HOMEPAGE_URL "https://app.vnote.fun"
LANGUAGES C CXX)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type, defaults to Release")
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(QHOTKEY_INSTALL OFF CACHE BOOL "Disable installing QHotKey" FORCE)
add_subdirectory(libs)
add_subdirectory(src)
# TODO: find a better way to organize tests
# add_subdirectory(tests)
================================================
FILE: COPYING.LESSER
================================================
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
================================================
FILE: README.md
================================================
# VNote
  
[简体中文](README_zh_CN.md)
[Project on Gitee](https://gitee.com/vnotex/vnote)
A pleasant note-taking platform.
For more information, please visit [**VNote's Home Page**](https://vnotex.github.io/vnote).

## Description
**VNote** is a Qt-based, free and open source note-taking application, focusing on Markdown now. VNote is designed to provide a pleasant note-taking platform with excellent editing experience.
VNote is **NOT** just a simple editor for Markdown. By providing notes management, VNote makes taking notes in Markdown simpler. In the future, VNote will support more formats besides Markdown.
Utilizing Qt, VNote could run on **Linux**, **Windows**, and **macOS**.


## Downloads
Continuous builds on `master` branch could be found at the [Continuous Build](https://github.com/vnotex/vnote/releases/tag/continuous-build) release.
Latest stable builds could be found at the [latest release](https://github.com/vnotex/vnote/releases/latest). Alternative download services are available:
* [Tianyi Netdisk](https://cloud.189.cn/t/Av67NvmEJVBv)
* [Baidu Netdisk](https://pan.baidu.com/s/1lX69oMBw8XuJshQDN3HiHw?pwd=f8fk)
## Supports
* [GitHub Issues](https://github.com/vnotex/vnote/issues);
* Email: `tamlokveer at gmail.com`;
* [Telegram](https://t.me/vnotex);
* WeChat Public Account: vnotex;
Thank [users who donated to VNote](https://github.com/vnotex/vnote/wiki/Donate-List)!
## Development
After cloning the repository, run the initialization script to set up your development environment:
**Linux/macOS:**
```bash
bash scripts/init.sh
```
**Windows:**
```cmd
scripts\init.cmd
```
This script will:
* Initialize and update all git submodules
* Install pre-commit hooks for automatic code formatting with clang-format
* Set up the vtextedit submodule pre-commit hook
For more development guidelines, see [AGENTS.md](AGENTS.md).
## License
VNote is licensed under [GNU LGPLv3](https://opensource.org/licenses/LGPL-3.0). Code base of VNote could be used freely by VNoteX.
================================================
FILE: README_zh_CN.md
================================================
# VNote
  
[English](README.md)
[Gitee托管项目](https://gitee.com/vnotex/vnote)
一个舒适的笔记平台!
更多信息,请访问[VNote主页](https://vnotex.github.io/vnote)。

## 简介
**VNote**是一个专注于Markdown的基于Qt的开源免费的笔记应用。VNote希望能提供一个拥有完美编辑体验的舒适的笔记平台。
VNote不是一个简单的Markdown编辑器。通过提供强大的笔记管理,VNote使得使用Markdown记笔记更轻松简单。将来,VNote会支持更多的文档格式。
得益于Qt,VNote当前可以高效地运行在**Linux**,**Windows**,以及**macOS**平台上。


## 下载
基于`master`分支的[持续构建版本发布](https://github.com/vnotex/vnote/releases/tag/continuous-build)。
最新的[稳定版本发布](https://github.com/vnotex/vnote/releases/latest)。其他下载选项:
* [天翼云盘](https://cloud.189.cn/t/Av67NvmEJVBv)
* [百度云盘](https://pan.baidu.com/s/1lX69oMBw8XuJshQDN3HiHw?pwd=f8fk)
## 支持
* [GitHub Issues](https://github.com/vnotex/vnote/issues);
* 邮件:`tamlokveer at gmail.com`;
* [Telegram](https://t.me/vnotex);
* 微信公众号:`vnotex`;
感谢这些[捐赠用户](https://github.com/vnotex/vnote/wiki/Donate-List)!
## 开发
克隆仓库后,运行初始化脚本来设置开发环境:
**Linux/macOS:**
```bash
bash scripts/init.sh
```
**Windows:**
```cmd
scripts\init.cmd
```
此脚本将会:
* 初始化并更新所有 git 子模块
* 安装用于自动代码格式化的 pre-commit 钩子(需要 clang-format)
* 设置 vtextedit 子模块的 pre-commit 钩子
更多开发指南,请参考 [AGENTS.md](AGENTS.md)。
## 许可
VNote遵循[GNU LGPLv3](https://opensource.org/licenses/LGPL-3.0)许可。VNote项目的代码可以自由给VNoteX项目使用。
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Supported Versions
Only the latest version is supported with security updates.
## Reporting a Vulnerability
Please [contact support](mailto:tamlokveer@gmail.com) **with a proof of concept** that shows the security vulnerability. Please do not contact us without this proof of concept, as we cannot fix anything without this.
For general opinions on what makes an app more or less secure, please use the forum.
## Bounty
We **do not** offer a bounty for discovering vulnerabilities, please do not ask. We can however credit you and link to your website/profile in the changelog and release announcement.
================================================
FILE: changes.md
================================================
# Changes
## v3.20.0
* MindMap: add outline and linking support
* Refine themes
* Support searching tags
* Enhanced QuickAccess with unique id
* NoteExplorer: support customizing node's color/background/outline
* MarkdownEditor: support copying local GIF
* Fix attachment and tag popup
* InputMode: add VSCode input mode and keep the default Normal input mode simple
## v3.19.2
* Codesign MacOS Bundle
* Fix toolbar expansion button style
* Support hot-reloading of theme via --watch-themes option
## v3.19.1
* Fix toolbar button in Qt 6.8
## v3.19.0
* Add VSCode-sytle editor shortcuts
## v3.18.1
* Fix crash caused by Qt6 change
* Fix XSS protection exemption
* Check link before open
## v3.18.0
* Upgrade to Qt6
* Support MacOS universal build
* Upgrade Mermaid, Flowchart.js, and markdown-it
* Markdown-it
* Fix XSS protection and turn it on by default
* Support mark by `==xx==`
## v3.17.0
* Quick note: create note in given scheme (@feloxx)
* MarkdownEditor: support inserting multiple images (@feloxx)
* Mermaid: upgrade and fix preview issue (@ygcaicn)
* Flowchart.js: upgrade
## v3.16.0
* Support reading PDF format
* Support Ming Map editor in suffix `*.emind`
* Support "View By" for notebooks selector
* ViewWindow: add shortcut Ctrl+G,V to alternate among view modes
* Bug fixes
## v3.15.1
* Add two themes
* Bug fixes
## v3.15.0
* Editor supports Word Count
* Add Open Windows panel
* Theme: add Vue-light theme
* Support default open mode
* NotebookSelector: support dynamic icons for notebooks
## v3.14.0
* Theme: support custom icons
* Theme: refine icons
* NavigationMode: fix issue for input method
## v3.13.1
* Shortcuts for Copy/Paste/Properties in node explorer
* Global shortcut to call out main window
* UnitedEntry: bug fix for macOS
## v3.13.0
* United Entry: migration of Universal Entry
## v3.12.888
* Fix shortcuts in key sequence with input method (like `Ctrl+G, E`)
* Add line ending settings for config files
* FindAndReplace: fix zero-length search
* QuickAccess: support folders
* Upgrade to Qt 5.15.2
* Support file associations
* NewNoteDialog: remember default file type
## v3.12.0
* NotebookExplorer: support separate node explorer
* Theme: add user-provided VSCode-Dark theme
* MarkdownEditor: use web to highlight code blocks
* MarkdownViewWindow
* Add switch for code block line number
* Fix ParseToMarkdown `<style>` issue
* Add config for overridding MathJax script
* SortDialog: fix sorting issue of date
* FramelessMainWindow: fix StayOnTop issue
## v3.11.0
* Task: support a simple task system (@tootal)
* Theme: add user-provided Solarized-Dark and Solarized-Light themes
* Export: fix wkhtmltopdf table-of-contents translation
* Support equation begin in MathJax
* MainWindow: decide DPI on the screen vnote starts
* Settings: support searching
* Fix crash caused by Youdao Dict
## v3.10.1
* MarkdownEditor: fix view mode issue
* Support print
* Refine icons
## v3.10.0
* MarkdownEditor
* Support side-by-side edit with preview
* Support config for highlighting whitespace
* Tag: fix input method issue on macOS
## v3.9.0
* Remove recycle bin node (now recycle bin is just a simple folder)
* Quick Access: support removing items directly
* MarkdownEditor
* Support centering images in read mode
* Add user.css for user styles in read mode
* Add debugger by F12
* Support context-sensitive context menu for images and links
## v3.8.0
* Support tags
* Introduce notebook database using SQLITE
* A perfect frameless main window on Windows
* Add switch to control whether store history in notebook
* Refine dock widgets of main window
* NotebookExplorer: support scan notebook and import external files
## v3.7.0
* PlantUml/Graphviz: support relative path executable
* macOS: support opening file with VNote in Finder
* Sort notes by name case-insensitively
* Export
* Support All-in-One in PDF format
* Support Custom export format (like Pandoc)
* Allow minimizing the export dialog and doing export at background
* MainWindow: use icon-only bar for docks
* Support update check
* Add shortcuts for CloseOtherTabs and CloseTabsToTheRight
* Search: highlight matched items in opened files
* Editor: support specifying line ending
## v3.6.0
* Support **Image Host**: GitHub and Gitee
* Add config page for Vi
## v3.5.1
* LocationList: fix recently introduced regression when highlighting segments of text
## v3.5.0
* Support History
* ViewArea
* `Ctrl+G, H/J/K/L` to navigate through ViewSplits
* `Ctrl+G, Shift+H/J/K/L` to move ViewWindow across ViewSplits
* MarkdownEditor
* Add configs for in-place preview sources
* Add a tool button to disable in-place preview
* Vi: support align and indent commands `=` and `>`
* LocationList: highlight matched text segments
* SelectDialog: support shortcuts (such as Rich Paste)
## v3.4.0
* Support Snippet
* `Ctrl+G S` to insert a snippet
* `%snippet_name%` to insert a snippet (the legacy Magic Word)
* Snippet is supported in some dialogs (such as creating a new note)
* Support note template (snippet is supported)
* Remove `'` and `"` from auot-brackets
## v3.3.0
* Editor: support auto indent, auto list
* Support opening notes with external programs
* Add a delay after code/math blocks update before preview
## v3.2.0
* Support local PlantUml and Graphviz rendering
* Add shortcuts to tab navigation in ViewSplit
* Editor: support auto bracket and overridding font family
## v3.1.0
* Support Japanese translation (Thanks @miurahr)
* MarkdownEditor: guess image suffix when fetching to local
* Refine read mode styles (Thanks @heartnn)
* Support recovering edit session on start
* Support recovering notebook explorer session on start
* Support Flash Page
* Support Quick Access
* Allow to keep docks (like Outline) when expanding content area
## v3.0.1
* Support spell check via Hunspell
* `Ctrl+Alt+F` to trigger full-text search
* Auto focus to the input widget when activating full-text search
* Fix Expand Content Area with panels
## v3.0.0-beta.11
* Full-text search
## v3.0.0-beta.10
* Show more tips
* Add exclude patterns for external nodes
* Add command line parser and support opening files from command line
* Update Mermaid.js to 8.9.1
* Support exporting current note
* Add ExpandAll to node explorer
## v3.0.0-beta.9
* Fix crash when exporting external files
* Support manual sorting folders and notes
* Support showing external files in notebook
## v3.0.0-beta.8
* Note explorer supports different view orders
* Fix `Ctrl+V` paste in editor
* Fix Linux HTTPS crash bug
* Add button to show/hide recycle bin node
* Other small fixes
## v3.0.0-beta.7
* Support export to Markdown/HTML/PDF
* Support base level 1/2/3 for section number in read mode
* Support opening link to folder in read mode
## v3.0.0-beta.6
* Add theme **pure** for light mode
* Small fixes
## v3.0.0-beta.5
* Refine themes
* Add section number style "1.1" and "1.1.", and use the later as default
* Support indentation of first line of paragraph in read mode
* Add file type combo box in NewNoteDialog
* Add "Insert Mark" in tool bar
* Support **Smart Table**
* Support `*.rmd` as Markdown suffix
* Turn on system title bar by default
* Enable AutoBreak by default
## v3.0.0-beta.4
* Add theme **moonlight** for dark mode
* Add shortcuts for split and workspace
* Bug fix
* More configs in Settings dialog for Markdown viewer
* Support section number in edit mode (without the dot suffix)
* Support link jump in Markdown viewer
* Use socket for single instance guard
## v3.0.0-beta.3
* Support `[TOC]`
* Fix MathJax
* Add shortcut for StayOnTop
* Add Markdown guide and shortcuts guide
* Show hovered link in read mode
* Smart Input Method in Vi mode
* Bug fix in Markdown editor when finding current heading index
* Add custom Info.plist on macOS
* Support minimizing to system tray
* Support restart
* Add read and edit in Markdown ViewWindow
* Add Chinese translations
## v3.0.0-beta.2
* Fix Import Legacy Notebook
* Refine toolbar
* Fix Outline viewer
================================================
FILE: libs/CMakeLists.txt
================================================
add_subdirectory(QHotkey)
add_subdirectory(vtextedit)
================================================
FILE: package/QtWebEngineProcess.entitlements.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.get-task-allow</key>
<true/>
<key>com.apple.security.cs.debugger</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
</dict>
</plist>
================================================
FILE: package/entitlements.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.get-task-allow</key>
<true/>
<key>com.apple.security.cs.debugger</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
</dict>
</plist>
================================================
FILE: package/lgpl-3.0.rtf
================================================
{\rtf1\ansi\deff3\adeflang1025
{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Liberation Serif{\*\falt Times New Roman};}{\f4\fswiss\fprq2\fcharset0 Liberation Sans{\*\falt Arial};}{\f5\froman\fprq0\fcharset128 Helvetica{\*\falt Arial};}{\f6\fnil\fprq2\fcharset0 Droid Sans Fallback;}{\f7\fnil\fprq2\fcharset0 FreeSans;}{\f8\fswiss\fprq0\fcharset128 FreeSans;}}
{\colortbl;\red0\green0\blue0;\red0\green0\blue128;\red128\green128\blue128;}
{\stylesheet{\s0\snext0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033 Normal;}
{\*\cs15\snext15\cf2\ul\ulc0\langfe255\alang255\lang255 Internet Link;}
{\s16\sbasedon0\snext17\sb240\sa120\keepn\dbch\af6\dbch\af7\afs28\loch\f4\fs28 Heading;}
{\s17\sbasedon0\snext17\sl288\slmult1\sb0\sa140 Text Body;}
{\s18\sbasedon17\snext18\sl288\slmult1\sb0\sa140\dbch\af8 List;}
{\s19\sbasedon0\snext19\sb120\sa120\noline\i\dbch\af8\afs24\ai\fs24 Caption;}
{\s20\sbasedon0\snext20\noline\dbch\af8 Index;}
}{\info{\creatim\yr0\mo0\dy0\hr0\min0}{\revtim\yr0\mo0\dy0\hr0\min0}{\printim\yr0\mo0\dy0\hr0\min0}{\comment LibreOffice}{\vern67241986}}\deftab720
\viewscale100
{\*\pgdsctbl
{\pgdsc0\pgdscuse451\pgwsxn12240\pghsxn15840\marglsxn1800\margrsxn1800\margtsxn1440\margbsxn1440\pgdscnxt0 Default Style;}}
\formshade{\*\pgdscno0}\paperh15840\paperw12240\margl1800\margr1800\margt1440\margb1440\sectd\sbknone\sectunlocked1\pgndec\pgwsxn12240\pghsxn15840\marglsxn1800\margrsxn1800\margtsxn1440\margbsxn1440\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
\pgndec\pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\b\rtlch \ltrch\loch\fs28\loch\f5
GNU LESSER GENERAL PUBLIC LICENSE}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
Version 3, 29 June 2007}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
Copyright \u169\'3f 2007 Free Software Foundation, Inc. <}{{\field{\*\fldinst HYPERLINK "https://fsf.org/" }{\fldrslt {\cf2\ul\ulc0\langfe255\alang255\lang255\ul\ulc0\rtlch \ltrch\loch\loch\f5
https://fsf.org/}{}}}\rtlch \ltrch\loch\loch\f5
>}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\b\rtlch \ltrch\loch\fs24\loch\f5
0. Additional Definitions.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
As used herein, \uc2 \u8220\'81\'67this License\u8221\'81\'68 refers to version 3 of the GNU Lesser General Public License, and the \u8220\'81\'67GNU GPL\u8221\'81\'68 refers to version 3 of the GNU General Public License.\uc1 }
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\f5
\uc2 \u8220\'81\'67\uc1 }{\rtlch \ltrch\loch\loch\f5
The Library\uc2 \u8221\'81\'68 refers to a covered work governed by this License, other than an Application or a Combined Work as defined below.\uc1 }
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
An \uc2 \u8220\'81\'67Application\u8221\'81\'68 is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library.\uc1 }
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
A \uc2 \u8220\'81\'67Combined Work\u8221\'81\'68 is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the \u8220\'81\'67Linked Version\u8221\'81\'68.\uc1 }
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
The \uc2 \u8220\'81\'67Minimal Corresponding Source\u8221\'81\'68 for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version.\uc1 }
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
The \uc2 \u8220\'81\'67Corresponding Application Code\u8221\'81\'68 for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work.\uc1 }
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\b\rtlch \ltrch\loch\fs24\loch\f5
1. Exception to Section 3 of the GNU GPL.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\b\rtlch \ltrch\loch\fs24\loch\f5
2. Conveying Modified Versions.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version:}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\rtlch \ltrch\loch\f5
\u8226\'3f}{\rtlch \ltrch\loch\loch\f5
\tab a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\rtlch \ltrch\loch\f5
\u8226\'3f}{\rtlch \ltrch\loch\loch\f5
\tab b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\b\rtlch \ltrch\loch\fs24\loch\f5
3. Object Code Incorporating Material from Library Header Files.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following:}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\rtlch \ltrch\loch\f5
\u8226\'3f}{\rtlch \ltrch\loch\loch\f5
\tab a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\rtlch \ltrch\loch\f5
\u8226\'3f}{\rtlch \ltrch\loch\loch\f5
\tab b) Accompany the object code with a copy of the GNU GPL and this license document.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\b\rtlch \ltrch\loch\fs24\loch\f5
4. Combined Works.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following:}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\rtlch \ltrch\loch\f5
\u8226\'3f}{\rtlch \ltrch\loch\loch\f5
\tab a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\rtlch \ltrch\loch\f5
\u8226\'3f}{\rtlch \ltrch\loch\loch\f5
\tab b) Accompany the Combined Work with a copy of the GNU GPL and this license document.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\rtlch \ltrch\loch\f5
\u8226\'3f}{\rtlch \ltrch\loch\loch\f5
\tab c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\rtlch \ltrch\loch\f5
\u8226\'3f}{\rtlch \ltrch\loch\loch\f5
\tab d) Do one of the following:}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li720\ri0\lin720\rin0\fi-360\sb0\sa0{\rtlch \ltrch\loch\f5
\u8211\'3f}{\rtlch \ltrch\loch\loch\f5
\tab 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li720\ri0\lin720\rin0\fi-360\sb0\sa0{\rtlch \ltrch\loch\f5
\u8211\'3f}{\rtlch \ltrch\loch\loch\f5
\tab 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\rtlch \ltrch\loch\f5
\u8226\'3f}{\rtlch \ltrch\loch\loch\f5
\tab e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.)}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\b\rtlch \ltrch\loch\fs24\loch\f5
5. Combined Libraries.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following:}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\rtlch \ltrch\loch\f5
\u8226\'3f}{\rtlch \ltrch\loch\loch\f5
\tab a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li360\ri0\lin360\rin0\fi-360\sb0\sa0{\rtlch \ltrch\loch\f5
\u8226\'3f}{\rtlch \ltrch\loch\loch\f5
\tab b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\b\rtlch \ltrch\loch\fs24\loch\f5
6. Revised Versions of the GNU Lesser General Public License.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.}
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License \uc2 \u8220\'81\'67or any later version\u8221\'81\'68 applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation.\uc1 }
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af6\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1033\ql\li0\ri0\lin0\rin0\fi0\sb0\sa180{\rtlch \ltrch\loch\loch\f5
If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.}
\par }
================================================
FILE: package/qt.conf
================================================
[Platforms]
WindowsArguments = fontengine=freetype
================================================
FILE: privacy_policy.md
================================================
# Privacy Policy
## Introduction
Welcome to VNote! We value your privacy and are committed to protecting your personal information. This Privacy Policy explains how we handle your information when you use our application.
## Information We Collect
VNote does not collect any personal or usage data from its users. Your interactions with the app remain private and are not stored or shared.
## How We Use Your Information
Since VNote does not collect any user data, we do not use, store, or process any personal information.
## Sharing Your Information
As VNote does not collect any user data, we do not share any personal information with third parties.
## Security
While VNote does not collect any user data, we still implement security measures to ensure the integrity and safety of the application itself.
## Your Choices
Since no data is collected, there are no choices or actions required from users regarding their personal information.
## Children's Privacy
Our services are not intended for children under the age of 13. We do not knowingly collect personal information from children under 13.
## Changes to This Privacy Policy
We may update this Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on our app. You are advised to review this Privacy Policy periodically for any changes.
================================================
FILE: scripts/init.cmd
================================================
@echo off
REM Initialization script for VNote development environment on Windows
REM This script calls init.sh using Git Bash
setlocal
echo ========================================
echo Initializing VNote development environment
echo ========================================
echo.
REM Check if Git Bash is available
where bash.exe >nul 2>&1
if %errorlevel% neq 0 (
echo Error: Git Bash not found in PATH
echo.
echo Please ensure Git for Windows is installed and bash.exe is in your PATH.
echo You can download Git for Windows from: https://git-scm.com/download/win
echo.
echo Alternatively, run the init.sh script directly from Git Bash:
echo bash scripts/init.sh
echo.
pause
exit /b 1
)
REM Get the directory where this script is located
set SCRIPT_DIR=%~dp0
set SCRIPT_DIR=%SCRIPT_DIR:~0,-1%
REM Convert Windows path to Unix-style path for Git Bash
REM Change C:\path\to\file to /c/path/to/file
set UNIX_PATH=%SCRIPT_DIR:\=/%
set UNIX_PATH=%UNIX_PATH::=%
set UNIX_PATH=/%UNIX_PATH%
REM Run the bash script
bash.exe "%UNIX_PATH%/init.sh"
if %errorlevel% neq 0 (
echo.
echo Error: Initialization failed
pause
exit /b 1
)
echo.
echo You can now start developing VNote!
echo.
pause
================================================
FILE: scripts/init.sh
================================================
#!/bin/bash
#
# Initialization script for VNote development environment
# Run this script once after cloning the repository
#
set -e
echo "========================================"
echo "Initializing VNote development environment"
echo "========================================"
# Get the script directory and project root
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$PROJECT_ROOT"
# Step 1: Initialize and update git submodules
echo ""
echo "[1/3] Initializing and updating git submodules..."
if ! git submodule update --init --recursive; then
echo "Error: Failed to initialize submodules"
exit 1
fi
echo "✓ Submodules initialized successfully"
# Step 2: Install pre-commit hook for main repository
echo ""
echo "[2/3] Installing pre-commit hook for main repository..."
HOOKS_DIR=".git/hooks"
if [ ! -d "$HOOKS_DIR" ]; then
echo "Error: .git/hooks directory not found. Are you in a git repository?"
exit 1
fi
if [ -f "$HOOKS_DIR/pre-commit" ]; then
echo "Warning: pre-commit hook already exists. Creating backup..."
cp "$HOOKS_DIR/pre-commit" "$HOOKS_DIR/pre-commit.backup"
fi
cp "scripts/pre-commit" "$HOOKS_DIR/pre-commit"
chmod +x "$HOOKS_DIR/pre-commit"
echo "✓ Main repository pre-commit hook installed"
# Step 3: Install pre-commit hook for vtextedit submodule
echo ""
echo "[3/3] Installing pre-commit hook for vtextedit submodule..."
VTEXTEDIT_HOOKS_DIR="libs/vtextedit/.git/hooks"
# Check if vtextedit is using .git file (submodule) or directory
if [ -f "libs/vtextedit/.git" ]; then
# It's a submodule, read the actual git directory path
GIT_DIR=$(grep "gitdir:" "libs/vtextedit/.git" | cut -d' ' -f2)
VTEXTEDIT_HOOKS_DIR="libs/vtextedit/$GIT_DIR/hooks"
elif [ -d "libs/vtextedit/.git" ]; then
# It's a regular git directory
VTEXTEDIT_HOOKS_DIR="libs/vtextedit/.git/hooks"
fi
if [ ! -d "$VTEXTEDIT_HOOKS_DIR" ]; then
echo "Error: vtextedit hooks directory not found at $VTEXTEDIT_HOOKS_DIR"
exit 1
fi
if [ -f "$VTEXTEDIT_HOOKS_DIR/pre-commit" ]; then
echo "Warning: vtextedit pre-commit hook already exists. Creating backup..."
cp "$VTEXTEDIT_HOOKS_DIR/pre-commit" "$VTEXTEDIT_HOOKS_DIR/pre-commit.backup"
fi
cp "libs/vtextedit/scripts/pre-commit" "$VTEXTEDIT_HOOKS_DIR/pre-commit"
chmod +x "$VTEXTEDIT_HOOKS_DIR/pre-commit"
echo "✓ vtextedit submodule pre-commit hook installed"
# Done
echo ""
echo "========================================"
echo "✓ Initialization complete!"
echo "========================================"
echo ""
echo "Note: The pre-commit hooks require clang-format to be installed."
echo "If you don't have it installed, the hooks will skip formatting with a warning."
echo ""
================================================
FILE: scripts/pre-commit
================================================
#!/bin/sh
#
# Pre-commit hook to format C++ files with clang-format
# Excludes third-party library folders
# Folders to exclude (third-party sources)
EXCLUDE_DIRS="libs"
# Get list of staged C++ files
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(cpp|h|c|cc|cxx|hpp)$')
if [ -z "$STAGED_FILES" ]; then
exit 0
fi
# Check if clang-format is available
if ! command -v clang-format >/dev/null 2>&1; then
echo "Warning: clang-format not found. Skipping formatting."
echo "Install clang-format to enable automatic formatting."
exit 0
fi
# Format each file that is not in excluded directories
for FILE in $STAGED_FILES; do
# Check if file is in excluded directory
EXCLUDED=0
for EXCLUDE_DIR in $EXCLUDE_DIRS; do
case "$FILE" in
$EXCLUDE_DIR/*)
EXCLUDED=1
break
;;
esac
done
if [ $EXCLUDED -eq 0 ]; then
echo "Formatting: $FILE"
clang-format -i "$FILE"
git add "$FILE"
else
echo "Skipping (third-party): $FILE"
fi
done
exit 0
================================================
FILE: scripts/update_version.py
================================================
import fileinput
import sys
import re
if len(sys.argv) < 2:
print("Please provide a new version string!")
exit
newVersion = sys.argv[1]
shortVersion = re.match('^(\\d+\\.\\d+).', newVersion).group(1)
print("New version: {0}".format(newVersion))
# CMakeList
regExp = re.compile('(\\s+)VERSION \\S+')
for line in fileinput.input(['CMakeLists.txt'], inplace = True):
print(regExp.sub('\\1VERSION ' + newVersion, line), end='')
# vnotex.json
regExp = re.compile('(\\s+)"version" : "\\S+"')
for line in fileinput.input(['src/data/core/vnotex.json'], inplace = True):
print(regExp.sub('\\1"version" : "' + newVersion + '"', line), end='')
# ci-xxx.yml
regExp = re.compile('(\\s+)VNOTE_VER: \\S+')
for line in fileinput.input(['.github/workflows/ci-win.yml', '.github/workflows/ci-linux.yml', '.github/workflows/ci-macos.yml'], inplace = True):
print(regExp.sub('\\1VNOTE_VER: ' + newVersion, line), end='')
# Info.plist
regExp = re.compile('(\\s+)<string>(?!10\\.15)\\d+\\.\\d+</string>')
for line in fileinput.input(['src/data/core/Info.plist'], inplace = True):
print(regExp.sub('\\1<string>' + shortVersion + '</string>', line), end='')
regExp = re.compile('(\\s+)<string>\\d+\\.\\d+\\.\\d+</string>')
for line in fileinput.input(['src/data/core/Info.plist'], inplace = True):
print(regExp.sub('\\1<string>' + newVersion + '</string>', line), end='')
regExp = re.compile('(\\s+)<string>\\d+\\.\\d+\\.\\d+\\.\\d+</string>')
for line in fileinput.input(['src/data/core/Info.plist'], inplace = True):
print(regExp.sub('\\1<string>' + newVersion + '.1</string>', line), end='')
================================================
FILE: src/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.20)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_INSTALL_BINDIR "." CACHE STRING "Binary dir for install")
set(QT_DEFAULT_MAJOR_VERSION 6 CACHE STRING "Qt version to use (5 or 6), defaults to 6")
find_package(Qt${QT_DEFAULT_MAJOR_VERSION} REQUIRED COMPONENTS Core Gui Network PrintSupport Sql Svg Widgets WebChannel WebEngineWidgets LinguistTools)
find_package(Qt${QT_DEFAULT_MAJOR_VERSION} OPTIONAL_COMPONENTS Core5Compat)
if ((QT_DEFAULT_MAJOR_VERSION GREATER 5))
qt_standard_project_setup()
else()
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
endif()
# Application icon on Windows
set(VX_APP_ICON_RC_WIN data/core/icons/vnote.rc)
# The MACOSX_BUNDLE_ICON_FILE variable is added to the Info.plist
# generated by CMake. This variable contains the .icns file name,
# without the path.
set(MACOSX_BUNDLE_ICON_FILE vnote.icns)
# And the following tells CMake where to find and install the file itself.
set(VX_APP_ICON_MACOS data/core/icons/vnote.icns)
set_source_files_properties(${VX_APP_ICON_MACOS} PROPERTIES
MACOSX_PACKAGE_LOCATION "Resources")
# Translations
set(VX_TS_FILES data/core/translations/vnote_zh_CN.ts
data/core/translations/vnote_ja.ts)
# Generate .qm files from .ts files (lrelease)
set_source_files_properties(${VX_TS_FILES} PROPERTIES
OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/translations")
qt_add_translation(VX_QM_FILES ${VX_TS_FILES})
add_custom_target(lrelease DEPENDS ${VX_QM_FILES})
# TODO: VTextEdit translations
list(APPEND VX_QM_FILES
${CMAKE_CURRENT_LIST_DIR}/data/core/translations/qdialogbuttonbox_zh_CN.qm
${CMAKE_CURRENT_LIST_DIR}/data/core/translations/qtbase_ja.qm
${CMAKE_CURRENT_LIST_DIR}/data/core/translations/qtbase_zh_CN.qm
${CMAKE_CURRENT_LIST_DIR}/data/core/translations/qtv_ja.qm
${CMAKE_CURRENT_LIST_DIR}/data/core/translations/qtv_zh_CN.qm
${CMAKE_CURRENT_LIST_DIR}/data/core/translations/qwebengine_zh_CN.qm
)
# Resources
set(VX_RESOURCE_FILES data/core/core.qrc)
set(VX_EXTRA_RESOURCE_FILES_RCC ${CMAKE_CURRENT_BINARY_DIR}/vnote_extra.rcc)
qt_add_binary_resources(VX_EXTRA_RESOURCE data/extra/extra.qrc DESTINATION ${VX_EXTRA_RESOURCE_FILES_RCC} OPTIONS -compress 9)
add_executable(vnote WIN32 MACOSX_BUNDLE
application.cpp application.h
commandlineoptions.cpp commandlineoptions.h
fakeaccessible.cpp fakeaccessible.h
main.cpp
${VX_APP_ICON_RC_WIN} ${VX_APP_ICON_MACOS} ${VX_RESOURCE_FILES}
)
# Translations
if((QT_DEFAULT_MAJOR_VERSION EQUAL 6))
if((Qt6Widgets_VERSION VERSION_GREATER_EQUAL 6.7.0))
qt_add_lupdate(TS_FILES ${VX_TS_FILES}
SOURCE_TARGETS vnote)
else()
qt_add_lupdate(vnote TS_FILES ${VX_TS_FILES})
endif()
endif()
add_dependencies(vnote VX_EXTRA_RESOURCE)
set(VX_LIBS_FOLDER ../libs)
target_include_directories(vnote PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
)
find_program(GOLD_LINKER "ld.gold")
if (NOT ${GOLD_LINKER} STREQUAL GOLD_LINKER-NOTFOUND)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
endif()
target_compile_definitions(vnote PRIVATE
QT_MESSAGELOGCONTEXT
)
add_subdirectory(core)
add_subdirectory(export)
add_subdirectory(imagehost)
add_subdirectory(search)
add_subdirectory(snippet)
add_subdirectory(task)
add_subdirectory(unitedentry)
add_subdirectory(utils)
add_subdirectory(widgets)
target_link_libraries(vnote PRIVATE
Qt::Core
Qt::Gui
Qt::Network
Qt::PrintSupport
Qt::Sql
Qt::Svg
Qt::WebChannel
Qt::WebEngineWidgets
Qt::Widgets
VTextEdit
qhotkey
)
if((QT_DEFAULT_MAJOR_VERSION GREATER 5))
target_link_libraries(vnote PRIVATE
Qt::Core5Compat
)
endif()
# Copy the qt.conf on Windows
if(WIN32)
add_custom_command(TARGET vnote POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${PROJECT_SOURCE_DIR}/package/qt.conf" $<TARGET_FILE_DIR:vnote>)
endif()
# Installation
if (WIN32)
install(TARGETS vnote RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES "${PROJECT_SOURCE_DIR}/package/qt.conf" DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES ${VX_EXTRA_RESOURCE_FILES_RCC} DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES ${VX_QM_FILES} DESTINATION "${CMAKE_INSTALL_BINDIR}/translations" OPTIONAL)
elseif(APPLE)
set(CMAKE_MACOSX_RPATH ON)
# TODO: declare install for macOS if necessary. For packing, we will manually copy files into
# the src/vnote.app bundle.
# The generated Info.plist will be overridden.
set_target_properties(vnote
PROPERTIES
OUTPUT_NAME "${PROJECT_NAME}"
MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME}"
MACOSX_BUNDLE_INFO_STRING "${PROJECT_DESCRIPTION}"
MACOSX_BUNDLE_GUI_IDENTIFIER "fun.vnote.vnote"
MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_VERSION}"
MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}"
MACOSX_BUNDLE_COPYRIGHT "Distributed under LGPL-3.0 license. Copyright (c) 2024 app.vnote.fun"
)
else()
install(TARGETS vnote
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(FILES ${VX_EXTRA_RESOURCE_FILES_RCC} DESTINATION ${CMAKE_INSTALL_DATADIR})
install(FILES ${VX_QM_FILES} DESTINATION "${CMAKE_INSTALL_DATADIR}/translations" OPTIONAL)
set(desktop.path applications)
set(desktop.files data/core/vnote.desktop)
set(icon16.path icons/hicolor/16x16/apps)
set(icon16.files data/core/logo/16x16/vnote.png)
set(icon32.path icons/hicolor/32x32/apps)
set(icon32.files data/core/logo/32x32/vnote.png)
set(icon48.path icons/hicolor/48x48/apps)
set(icon48.files data/core/logo/48x48/vnote.png)
set(icon64.path icons/hicolor/64x64/apps)
set(icon64.files data/core/logo/64x64/vnote.png)
set(icon128.path icons/hicolor/128x128/apps)
set(icon128.files data/core/logo/128x128/vnote.png)
set(icon256.path icons/hicolor/256x256/apps)
set(icon256.files data/core/logo/256x256/vnote.png)
set(iconsvg.path icons/hicolor/scalable/apps)
set(iconsvg.files data/core/logo/vnote.svg)
foreach(item IN ITEMS desktop icon16 icon32 icon48 icon64 icon128 icon256 iconsvg)
install(FILES ${CMAKE_CURRENT_LIST_DIR}/${${item}.files}
DESTINATION ${CMAKE_INSTALL_DATADIR}/${${item}.path}
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
endforeach()
endif()
include(${CMAKE_CURRENT_LIST_DIR}/Packaging.cmake)
================================================
FILE: src/CPackLinuxDeployQt.cmake.in
================================================
message(STATUS "VX_APPIMAGE_DEST_DIR ${VX_APPIMAGE_DEST_DIR}")
message(STATUS "VX_APPIMAGE_DESKTOP_FILE ${VX_APPIMAGE_DESKTOP_FILE}")
execute_process(
COMMAND ${CMAKE_MAKE_PROGRAM} DESTDIR=${VX_APPIMAGE_DEST_DIR} install
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
execute_process(
COMMAND env QMAKE=${QMAKE_EXECUTABLE} LD_LIBRARY_PATH=/usr/local/lib64:$ENV{LD_LIBRARY_PATH} "${LINUXDEPLOY_EXECUTABLE}" --plugin=qt --output=appimage
--appdir=${VX_APPIMAGE_DEST_DIR} -e ${CMAKE_CURRENT_BINARY_DIR}/vnote -d ${VX_APPIMAGE_DESKTOP_FILE}
-i ${CMAKE_CURRENT_LIST_DIR}/data/core/logo/64x64/vnote.png
-l ${QT_PLUGINS_DIR}/platformthemes/libqgtk3.so
-l /usr/local/lib64/libcrypto.so.3
-l /usr/local/lib64/libssl.so.3
# --exclude-library option does not work as expected
# --exclude-library=libssl.so.1.1,libcrypto.so.1.1,libnss3.so,libnssutil3.so
WORKING_DIRECTORY ${CPACK_PACKAGE_DIRECTORY})
================================================
FILE: src/CPackMacDeployQt.cmake.in
================================================
execute_process(COMMAND "optool" strip -t ${CMAKE_CURRENT_BINARY_DIR}/VNote.app
WORKING_DIRECTORY ${CPACK_PACKAGE_DIRECTORY}
)
execute_process(COMMAND "${MACDEPLOYQT_EXECUTABLE}" ${CMAKE_CURRENT_BINARY_DIR}/VNote.app -always-overwrite -verbose=1
WORKING_DIRECTORY ${CPACK_PACKAGE_DIRECTORY}
)
================================================
FILE: src/Packaging.cmake
================================================
# from: https://github.com/miurahr/cmake-qt-packaging-example
find_package(Qt${QT_DEFAULT_MAJOR_VERSION} REQUIRED COMPONENTS Core)
get_target_property(QMAKE_EXECUTABLE Qt::qmake IMPORTED_LOCATION)
get_filename_component(QT_BIN_DIR "${QMAKE_EXECUTABLE}" DIRECTORY)
execute_process(COMMAND ${QMAKE_EXECUTABLE} -query QT_VERSION OUTPUT_VARIABLE QT_VERSION)
set(QT_TOOLS_DIR "${QT_BIN_DIR}/../../../Tools")
cmake_path(NORMAL_PATH QT_TOOLS_DIR OUTPUT_VARIABLE QT_TOOLS_DIR)
set(QT_PLUGINS_DIR "${QT_BIN_DIR}/../plugins")
cmake_path(NORMAL_PATH QT_PLUGINS_DIR OUTPUT_VARIABLE QT_PLUGINS_DIR)
# To use the specific version of Qt
set(WINDEPLOYQT_EXECUTABLE "${QT_BIN_DIR}/windeployqt.exe")
find_program(LINUXDEPLOY_EXECUTABLE linuxdeploy linuxdeploy-x86_64.AppImage HINTS "${QT_BIN_DIR}")
find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${QT_BIN_DIR}")
find_program(MACDEPLOYQTFIX_EXECUTABLE macdeployqtfix.py HINTS "${QT_BIN_DIR}")
find_package(Python)
function(windeployqt target)
# Bundle Library Files
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPPER)
if ((QT_DEFAULT_MAJOR_VERSION GREATER 5))
if(CMAKE_BUILD_TYPE_UPPER STREQUAL "DEBUG")
set(WINDEPLOYQT_ARGS --debug)
else()
set(WINDEPLOYQT_ARGS --release)
endif()
endif()
add_custom_target(deploy
COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/winqt/"
COMMAND "${CMAKE_COMMAND}" -E
env PATH="${QT_BIN_DIR}" "${WINDEPLOYQT_EXECUTABLE}"
${WINDEPLOYQT_ARGS}
--no-quick-import
--no-opengl-sw
--no-compiler-runtime
--translations zh_CN,ja
--dir "${CMAKE_CURRENT_BINARY_DIR}/winqt/"
$<TARGET_FILE:${target}>
COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/winqt/generic/"
COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/winqt/styles/"
COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/winqt/qmltooling/"
COMMENT "Deploying Qt..."
DEPENDS vnote lrelease
)
add_dependencies(pack deploy)
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/winqt/" DESTINATION "${CMAKE_INSTALL_BINDIR}" OPTIONAL)
set(OPENSSL_ROOT_DIR "${QT_TOOLS_DIR}/OpenSSL/Win_x64" CACHE STRING "OpenSSL dir")
file(GLOB OPENSSL_LIBS_FILES "${OPENSSL_ROOT_DIR}/bin/lib*.dll")
cmake_path(NORMAL_PATH OPENSSL_LIBS_FILES OUTPUT_VARIABLE OPENSSL_LIBS_FILES)
install(FILES ${OPENSSL_LIBS_FILES} DESTINATION "${CMAKE_INSTALL_BINDIR}" OPTIONAL)
message(STATUS "OpenSSLExtraLIBDIR:${OPENSSL_EXTRA_LIB_DIR}")
file(GLOB OPENSSL_EXTRA_LIB_FILES "${OPENSSL_EXTRA_LIB_DIR}/lib*.dll")
cmake_path(NORMAL_PATH OPENSSL_EXTRA_LIB_FILES OUTPUT_VARIABLE OPENSSL_EXTRA_LIB_FILES)
message(STATUS "OpenSSLExtraLibFiles:${OPENSSL_EXTRA_LIB_FILES}")
install(FILES ${OPENSSL_EXTRA_LIB_FILES} DESTINATION "${CMAKE_INSTALL_BINDIR}" OPTIONAL)
set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
include(InstallRequiredSystemLibraries)
endfunction()
set(CPACK_PACKAGE_VENDOR "VNoteX")
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
set(CPACK_PACKAGE_CONTACT "Le Tan <tamlokveer@gmail.com>")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/README.md")
set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/COPYING.LESSER")
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}")
set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}")
# Start menu entry on Windows
set(CPACK_PACKAGE_EXECUTABLES "vnote" "VNote")
# Desktop link on Windows
set(CPACK_CREATE_DESKTOP_LINKS "vnote")
set(CPACK_STRIP_FILES TRUE)
# WIX generator
set(CPACK_WIX_UPGRADE_GUID BA25F337-991A-4893-9D8A-AD5E89BAF5C4)
set(CPACK_WIX_PRODUCT_GUID BA25F337-991A-4893-9D8A-AD5E89BAF5C4)
set(CPACK_WIX_LICENSE_RTF "${PROJECT_SOURCE_DIR}/package/lgpl-3.0.rtf")
set(CPACK_WIX_PRODUCT_ICON "${CMAKE_CURRENT_LIST_DIR}/data/core/icons/vnote.ico")
set(CPACK_WIX_UI_BANNER "${PROJECT_SOURCE_DIR}/package/wix_banner.png")
set(CPACK_WIX_UI_DIALOG "${PROJECT_SOURCE_DIR}/package/wix_dialog.png")
#------------------------------------------------------------------------------
# include CPack, so we get target for packages
set(CPACK_OUTPUT_CONFIG_FILE "${CMAKE_BINARY_DIR}/BundleConfig.cmake")
add_custom_target(pack
COMMAND ${CMAKE_CPACK_COMMAND} "--config" "${CMAKE_BINARY_DIR}/BundleConfig.cmake" "--verbose"
COMMENT "Running CPACK. Please wait..."
DEPENDS vnote)
add_dependencies(pack lrelease)
set(CPACK_GENERATOR)
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_LIST_DIR}/data/core/logo/64x64/vnote.png")
if(WIN32)
find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${QT_BIN_DIR}" DOC "Path to the windeployqt utility")
list(APPEND CPACK_GENERATOR ZIP)
message(STATUS "Package generation - Windows - Zip")
find_program(WIX_EXECUTABLE wix HINTS "${QT_BIN_DIR}" DOC "Path to the WiX utility")
if (NOT WIX_EXECUTABLE-NOTFOUND)
list(APPEND CPACK_GENERATOR WIX)
message(STATUS "Package generation - Windows - WiX")
endif()
windeployqt(vnote)
elseif(APPLE)
# Manually copy resources.
set(VX_BUNDLE_CONTENTS_DIR $<TARGET_FILE_DIR:vnote>/..)
add_custom_target(deploy
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_CURRENT_LIST_DIR}/data/core/Info.plist" ${VX_BUNDLE_CONTENTS_DIR}
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${VX_EXTRA_RESOURCE_FILES_RCC} ${VX_BUNDLE_CONTENTS_DIR}/Resources
COMMAND ${CMAKE_COMMAND} -E make_directory ${VX_BUNDLE_CONTENTS_DIR}/Resources/translations
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${VX_QM_FILES} ${VX_BUNDLE_CONTENTS_DIR}/Resources/translations
COMMENT "Copying resources into bundle Contents ${VX_BUNDLE_CONTENTS_DIR}"
DEPENDS vnote lrelease
)
add_dependencies(pack deploy)
message(STATUS "MACDeployQtExecutable: ${MACDEPLOYQT_EXECUTABLE}")
if (MACDEPLOYQT_EXECUTABLE)
message(STATUS "Package generation - MacOS - DMG")
list(APPEND CPACK_GENERATOR External)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CPackMacDeployQt.cmake.in "${CMAKE_BINARY_DIR}/CPackExternal.cmake")
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${CMAKE_BINARY_DIR}/CPackExternal.cmake")
include(InstallRequiredSystemLibraries)
endif()
else()
message(STATUS "LinuxDeployExecutable: ${LINUXDEPLOY_EXECUTABLE}")
if(LINUXDEPLOY_EXECUTABLE)
message(STATUS "Package generation - Linux - AppImage")
list(APPEND CPACK_GENERATOR External)
set(VX_APPIMAGE_DEST_DIR "${CPACK_PACKAGE_DIRECTORY}/_CPack_Packages/Linux/External/AppImage")
set(VX_APPIMAGE_DESKTOP_FILE "${VX_APPIMAGE_DEST_DIR}${CMAKE_INSTALL_PREFIX}/share/applications/vnote.desktop")
configure_file(${CMAKE_CURRENT_LIST_DIR}/CPackLinuxDeployQt.cmake.in "${CMAKE_BINARY_DIR}/CPackExternal.cmake")
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${CMAKE_BINARY_DIR}/CPackExternal.cmake")
endif()
endif()
include(CPack)
================================================
FILE: src/application.cpp
================================================
#include "application.h"
#include <QDebug>
#include <QDir>
#include <QFileOpenEvent>
#include <QFileSystemWatcher>
#include <QStyle>
#include <QTimer>
#include <core/vnotex.h>
using namespace vnotex;
Application::Application(int &p_argc, char **p_argv) : QApplication(p_argc, p_argv) {}
void Application::watchThemeFolder(const QString &p_themeFolderPath) {
if (p_themeFolderPath.isEmpty()) {
return;
}
// Initialize watchers only when needed
if (!m_styleWatcher) {
m_styleWatcher = new QFileSystemWatcher(this);
}
if (!m_reloadTimer) {
m_reloadTimer = new QTimer(this);
m_reloadTimer->setSingleShot(true);
m_reloadTimer->setInterval(500); // 500ms debounce delay
connect(m_reloadTimer, &QTimer::timeout, this, &Application::reloadThemeResources);
// Connect file watcher to timer
connect(m_styleWatcher, &QFileSystemWatcher::directoryChanged, m_reloadTimer,
qOverload<>(&QTimer::start));
connect(m_styleWatcher, &QFileSystemWatcher::fileChanged, m_reloadTimer,
qOverload<>(&QTimer::start));
}
// Watch the theme folder and its files
m_styleWatcher->addPath(p_themeFolderPath);
// Also watch individual files in the theme folder
QDir themeDir(p_themeFolderPath);
QStringList files = themeDir.entryList(QDir::Files);
for (const QString &file : files) {
m_styleWatcher->addPath(themeDir.filePath(file));
}
}
void Application::reloadThemeResources() {
VNoteX::getInst().getThemeMgr().refreshCurrentTheme();
auto stylesheet = VNoteX::getInst().getThemeMgr().fetchQtStyleSheet();
if (!stylesheet.isEmpty()) {
setStyleSheet(stylesheet);
style()->unpolish(this);
style()->polish(this);
}
}
bool Application::event(QEvent *p_event) {
// On macOS, we need this to open file from Finder.
if (p_event->type() == QEvent::FileOpen) {
QFileOpenEvent *openEvent = static_cast<QFileOpenEvent *>(p_event);
qDebug() << "request to open file" << openEvent->file();
emit openFileRequested(openEvent->file());
}
return QApplication::event(p_event);
}
================================================
FILE: src/application.h
================================================
#ifndef APPLICATION_H
#define APPLICATION_H
#include <QApplication>
class QFileSystemWatcher;
class QTimer;
namespace vnotex {
class Application : public QApplication {
Q_OBJECT
public:
Application(int &p_argc, char **p_argv);
// Set up theme folder watcher for hot-reload
void watchThemeFolder(const QString &p_themeFolderPath);
// Reload the theme resources (stylesheet, icons, etc)
void reloadThemeResources();
signals:
void openFileRequested(const QString &p_filePath);
protected:
bool event(QEvent *p_event) Q_DECL_OVERRIDE;
private:
QFileSystemWatcher *m_styleWatcher = nullptr;
QTimer *m_reloadTimer = nullptr;
};
} // namespace vnotex
#endif // APPLICATION_H
================================================
FILE: src/commandlineoptions.cpp
================================================
#include "commandlineoptions.h"
#include <QCommandLineOption>
#include <QCommandLineParser>
#include <QCoreApplication>
#include <QDebug>
#include <widgets/mainwindow.h>
using vnotex::MainWindow;
CommandLineOptions::ParseResult CommandLineOptions::parse(const QStringList &p_arguments) {
QCommandLineParser parser;
parser.setApplicationDescription(MainWindow::tr("A pleasant note-taking platform."));
const auto helpOpt = parser.addHelpOption();
const auto versionOpt = parser.addVersionOption();
// Positional arguments.
parser.addPositionalArgument("paths", MainWindow::tr("Files or folders to open."));
const QCommandLineOption verboseOpt("verbose", MainWindow::tr("Print more logs."));
parser.addOption(verboseOpt);
const QCommandLineOption logStderrOpt("log-stderr", MainWindow::tr("Log to stderr."));
parser.addOption(logStderrOpt);
const QCommandLineOption watchThemesOpt("watch-themes",
MainWindow::tr("Watch theme folder for changes."));
parser.addOption(watchThemesOpt);
// WebEngine options.
// No need to handle them. Just add them to the parser to avoid parse error.
{
QCommandLineOption webRemoteDebuggingPortOpt("remote-debugging-port",
MainWindow::tr("WebEngine remote debugging port."),
MainWindow::tr("port_number"));
webRemoteDebuggingPortOpt.setFlags(QCommandLineOption::HiddenFromHelp);
parser.addOption(webRemoteDebuggingPortOpt);
QCommandLineOption webNoSandboxOpt("no-sandbox", MainWindow::tr("WebEngine without sandbox."));
webNoSandboxOpt.setFlags(QCommandLineOption::HiddenFromHelp);
parser.addOption(webNoSandboxOpt);
QCommandLineOption webDisableGpu("disable-gpu", MainWindow::tr("WebEngine with GPU disabled."));
webDisableGpu.setFlags(QCommandLineOption::HiddenFromHelp);
parser.addOption(webDisableGpu);
}
if (!parser.parse(p_arguments)) {
m_errorMsg = parser.errorText();
return ParseResult::Error;
}
// Handle results.
m_helpText = parser.helpText();
if (parser.isSet(helpOpt)) {
return ParseResult::HelpRequested;
}
if (parser.isSet(versionOpt)) {
return ParseResult::VersionRequested;
}
// Position arguments.
const auto args = parser.positionalArguments();
m_pathsToOpen = args;
if (parser.isSet(verboseOpt)) {
m_verbose = true;
}
if (parser.isSet(logStderrOpt)) {
m_logToStderr = true;
}
if (parser.isSet(watchThemesOpt)) {
m_watchThemes = true;
}
return ParseResult::Ok;
}
================================================
FILE: src/commandlineoptions.h
================================================
#ifndef COMMANDLINEOPTIONS_H
#define COMMANDLINEOPTIONS_H
#include <QStringList>
class CommandLineOptions {
public:
enum ParseResult { Ok, Error, VersionRequested, HelpRequested };
CommandLineOptions() = default;
ParseResult parse(const QStringList &p_arguments);
QString m_errorMsg;
QString m_helpText;
QStringList m_pathsToOpen;
bool m_verbose = false;
bool m_logToStderr = false;
// Whether to watch theme folder for changes
bool m_watchThemes = false;
};
#endif // COMMANDLINEOPTIONS_H
================================================
FILE: src/core/CMakeLists.txt
================================================
target_sources(vnote PRIVATE
buffer/buffer.cpp buffer/buffer.h
buffer/bufferprovider.cpp buffer/bufferprovider.h
buffer/filebufferprovider.cpp buffer/filebufferprovider.h
buffer/filetypehelper.cpp buffer/filetypehelper.h
buffer/ibufferfactory.h
buffer/markdownbuffer.cpp buffer/markdownbuffer.h
buffer/markdownbufferfactory.cpp buffer/markdownbufferfactory.h
buffer/mindmapbuffer.cpp buffer/mindmapbuffer.h
buffer/mindmapbufferfactory.cpp buffer/mindmapbufferfactory.h
buffer/nodebufferprovider.cpp buffer/nodebufferprovider.h
buffer/pdfbuffer.cpp buffer/pdfbuffer.h
buffer/pdfbufferfactory.cpp buffer/pdfbufferfactory.h
buffer/textbuffer.cpp buffer/textbuffer.h
buffer/textbufferfactory.cpp buffer/textbufferfactory.h
buffer/urlbasedbufferprovider.h
buffermgr.cpp buffermgr.h
clipboarddata.cpp clipboarddata.h
configmgr.cpp configmgr.h
coreconfig.cpp coreconfig.h
editorconfig.cpp editorconfig.h
events.h
exception.h
externalfile.cpp externalfile.h
file.cpp file.h
filelocator.h
fileopenparameters.h
global.cpp global.h
historyitem.cpp historyitem.h
historymgr.cpp historymgr.h
htmltemplatehelper.cpp htmltemplatehelper.h
iconfig.h
location.h
logger.cpp logger.h
mainconfig.cpp mainconfig.h
markdowneditorconfig.cpp markdowneditorconfig.h
mindmapeditorconfig.cpp mindmapeditorconfig.h
namebasedserver.h
noncopyable.h
notebook/bundlenotebook.cpp notebook/bundlenotebook.h
notebook/bundlenotebookfactory.cpp notebook/bundlenotebookfactory.h
notebook/externalnode.cpp notebook/externalnode.h
notebook/historyi.h
notebook/inotebookfactory.h
notebook/node.cpp notebook/node.h
notebook/nodeparameters.cpp notebook/nodeparameters.h
notebook/nodevisual.cpp notebook/nodevisual.h
notebook/notebook.cpp notebook/notebook.h
notebook/notebookdatabaseaccess.cpp notebook/notebookdatabaseaccess.h
notebook/notebookparameters.cpp notebook/notebookparameters.h
notebook/notebooktagmgr.cpp notebook/notebooktagmgr.h
notebook/tag.cpp notebook/tag.h
notebook/tagi.h
notebook/vxnode.cpp notebook/vxnode.h
notebook/vxnodefile.cpp notebook/vxnodefile.h
notebookbackend/inotebookbackend.cpp notebookbackend/inotebookbackend.h
notebookbackend/inotebookbackendfactory.h
notebookbackend/localnotebookbackend.cpp notebookbackend/localnotebookbackend.h
notebookbackend/localnotebookbackendfactory.cpp notebookbackend/localnotebookbackendfactory.h
notebookconfigmgr/bundlenotebookconfigmgr.cpp notebookconfigmgr/bundlenotebookconfigmgr.h
notebookconfigmgr/inotebookconfigmgr.cpp notebookconfigmgr/inotebookconfigmgr.h
notebookconfigmgr/inotebookconfigmgrfactory.h
notebookconfigmgr/notebookconfig.cpp notebookconfigmgr/notebookconfig.h
notebookconfigmgr/vxnodeconfig.cpp notebookconfigmgr/vxnodeconfig.h
notebookconfigmgr/vxnotebookconfigmgr.cpp notebookconfigmgr/vxnotebookconfigmgr.h
notebookconfigmgr/vxnotebookconfigmgrfactory.cpp notebookconfigmgr/vxnotebookconfigmgrfactory.h
notebookmgr.cpp notebookmgr.h
pdfviewerconfig.cpp pdfviewerconfig.h
quickaccesshelper.cpp quickaccesshelper.h
sessionconfig.cpp sessionconfig.h
singleinstanceguard.cpp singleinstanceguard.h
templatemgr.cpp templatemgr.h
texteditorconfig.cpp texteditorconfig.h
theme.cpp theme.h
thememgr.cpp thememgr.h
versioncontroller/dummyversioncontroller.cpp versioncontroller/dummyversioncontroller.h
versioncontroller/dummyversioncontrollerfactory.cpp versioncontroller/dummyversioncontrollerfactory.h
versioncontroller/iversioncontroller.h
versioncontroller/iversioncontrollerfactory.h
versioncontroller/versioncontrollerserver.cpp versioncontroller/versioncontrollerserver.h
vnotex.cpp vnotex.h
webresource.h
widgetconfig.cpp widgetconfig.h
)
target_include_directories(vnote PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
)
================================================
FILE: src/core/buffer/buffer.cpp
================================================
#include "buffer.h"
#include <QTimer>
#include <notebook/node.h>
#include <utils/fileutils.h>
#include <utils/pathutils.h>
#include <widgets/viewwindow.h>
#include <core/configmgr.h>
#include <core/editorconfig.h>
#include "bufferprovider.h"
#include "exception.h"
using namespace vnotex;
static vnotex::ID generateBufferID() {
static vnotex::ID id = 0;
return ++id;
}
Buffer::Buffer(const BufferParameters &p_parameters, QObject *p_parent)
: QObject(p_parent), m_provider(p_parameters.m_provider), m_id(generateBufferID()),
m_readOnly(m_provider->isReadOnly()) {
m_autoSaveTimer = new QTimer(this);
m_autoSaveTimer->setSingleShot(true);
m_autoSaveTimer->setInterval(1000);
connect(m_autoSaveTimer, &QTimer::timeout, this, &Buffer::autoSave);
readContent();
checkBackupFileOfPreviousSession();
}
Buffer::~Buffer() {
Q_ASSERT(m_attachedViewWindowCount == 0);
Q_ASSERT(!m_viewWindowToSync);
Q_ASSERT(!isModified());
Q_ASSERT(m_backupFilePath.isEmpty());
}
int Buffer::getAttachViewWindowCount() const { return m_attachedViewWindowCount; }
void Buffer::attachViewWindow(ViewWindow *p_win) {
Q_UNUSED(p_win);
Q_ASSERT(!(m_state & StateFlag::Discarded));
++m_attachedViewWindowCount;
}
void Buffer::detachViewWindow(ViewWindow *p_win) {
Q_UNUSED(p_win);
Q_ASSERT(p_win != m_viewWindowToSync);
--m_attachedViewWindowCount;
Q_ASSERT(m_attachedViewWindowCount >= 0);
if (m_attachedViewWindowCount == 0) {
emit attachedViewWindowEmpty();
}
}
ViewWindow *Buffer::createViewWindow(const QSharedPointer<FileOpenParameters> &p_paras,
QWidget *p_parent) {
auto window = createViewWindowInternal(p_paras, p_parent);
Q_ASSERT(window);
window->attachToBuffer(this, p_paras);
return window;
}
bool Buffer::match(const Node *p_node) const {
Q_ASSERT(p_node);
return m_provider->match(p_node);
}
bool Buffer::match(const QString &p_filePath) const { return m_provider->match(p_filePath); }
QString Buffer::getName() const { return m_provider->getName(); }
QString Buffer::getPath() const { return m_provider->getPath(); }
QString Buffer::getContentPath() const { return m_provider->getContentPath(); }
QString Buffer::getResourcePath() const { return m_provider->getResourcePath(); }
ID Buffer::getId() const { return m_id; }
const QString &Buffer::getContent() const {
const_cast<Buffer *>(this)->syncContent();
return m_content;
}
void Buffer::setContent(const QString &p_content, int &p_revision) {
m_viewWindowToSync = nullptr;
m_content = p_content;
p_revision = ++m_revision;
setModified(true);
m_autoSaveTimer->start();
emit contentsChanged();
}
void Buffer::invalidateContent(const ViewWindow *p_win,
const std::function<void(int)> &p_setRevision) {
Q_ASSERT(!m_viewWindowToSync || m_viewWindowToSync == p_win);
++m_revision;
p_setRevision(m_revision);
m_viewWindowToSync = p_win;
m_autoSaveTimer->start();
emit contentsChanged();
}
int Buffer::getRevision() const { return m_revision; }
void Buffer::syncContent(const ViewWindow *p_win) {
if (m_viewWindowToSync == p_win) {
syncContent();
}
}
void Buffer::syncContent() {
if (m_viewWindowToSync) {
// Need to sync content.
m_content = m_viewWindowToSync->getLatestContent();
m_viewWindowToSync = nullptr;
}
}
bool Buffer::isModified() const { return m_modified; }
void Buffer::setModified(bool p_modified) {
if (m_modified == p_modified) {
return;
}
m_modified = p_modified;
emit modified(m_modified);
}
bool Buffer::isReadOnly() const { return m_readOnly; }
Buffer::OperationCode Buffer::save(bool p_force) {
Q_ASSERT(!m_readOnly);
if (m_readOnly) {
return OperationCode::Failed;
}
if (m_modified || p_force ||
m_state & (StateFlag::FileMissingOnDisk | StateFlag::FileChangedOutside)) {
syncContent();
// We do not involve user here to handle file missing and changed outside cases.
// The active ViewWindow will check this periodically.
// Check if file still exists.
if (!p_force && !checkFileExistsOnDisk()) {
qWarning() << "failed to save buffer due to file missing on disk" << getPath();
return OperationCode::FileMissingOnDisk;
}
// Check if file is modified outside.
if (!p_force && checkFileChangedOutside()) {
qWarning() << "failed to save buffer due to file changed from outside" << getPath();
return OperationCode::FileChangedOutside;
}
try {
m_provider->write(m_content);
} catch (Exception &p_e) {
qWarning() << "failed to write the buffer content" << getPath() << p_e.what();
return OperationCode::Failed;
}
setModified(false);
m_state &= ~(StateFlag::FileMissingOnDisk | StateFlag::FileChangedOutside);
}
return OperationCode::Success;
}
Buffer::OperationCode Buffer::reload() {
// Check if file is missing.
if (!checkFileExistsOnDisk()) {
qWarning() << "failed to save buffer due to file missing on disk" << getPath();
return OperationCode::FileMissingOnDisk;
}
if (m_modified || m_state & (StateFlag::FileMissingOnDisk | StateFlag::FileChangedOutside)) {
readContent();
emit modified(m_modified);
emit contentsChanged();
}
return OperationCode::Success;
}
void Buffer::readContent() {
m_content = m_provider->read();
++m_revision;
// Reset state.
m_viewWindowToSync = nullptr;
m_modified = false;
}
void Buffer::discard() {
Q_ASSERT(!(m_state & StateFlag::Discarded));
Q_ASSERT(m_attachedViewWindowCount == 1);
m_autoSaveTimer->stop();
m_content.clear();
m_state |= StateFlag::Discarded;
++m_revision;
m_viewWindowToSync = nullptr;
m_modified = false;
}
void Buffer::close() {
// Delete the backup file if exists.
m_autoSaveTimer->stop();
if (!m_backupFilePath.isEmpty()) {
FileUtils::removeFile(m_backupFilePath);
m_backupFilePath.clear();
}
}
QString Buffer::getImageFolderPath() const {
return const_cast<Buffer *>(this)->m_provider->fetchImageFolderPath();
}
QString Buffer::insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) {
Q_UNUSED(p_srcImagePath);
Q_UNUSED(p_imageFileName);
Q_ASSERT_X(false, "insertImage", "image insert is not supported");
return QString();
}
QString Buffer::insertImage(const QImage &p_image, const QString &p_imageFileName) {
Q_UNUSED(p_image);
Q_UNUSED(p_imageFileName);
Q_ASSERT_X(false, "insertImage", "image insert is not supported");
return QString();
}
void Buffer::removeImage(const QString &p_imagePath) {
Q_UNUSED(p_imagePath);
Q_ASSERT_X(false, "removeImage", "image remove is not supported");
}
void Buffer::autoSave() {
if (m_readOnly) {
m_autoSaveTimer->stop();
return;
}
if (m_state & (StateFlag::FileMissingOnDisk | StateFlag::FileChangedOutside)) {
qDebug() << "disable AutoSave due to file missing on disk or changed outside";
return;
}
Q_ASSERT(!(m_state & StateFlag::Discarded));
auto policy = ConfigMgr::getInst().getEditorConfig().getAutoSavePolicy();
switch (policy) {
case EditorConfig::AutoSavePolicy::None:
return;
case EditorConfig::AutoSavePolicy::AutoSave:
if (save(false) != OperationCode::Success) {
qWarning() << "AutoSave failed to save buffer, retry later";
} else {
emit autoSaved();
}
break;
case EditorConfig::AutoSavePolicy::BackupFile:
try {
writeBackupFile();
} catch (Exception &p_e) {
qWarning() << "AutoSave failed to write backup file, retry later" << p_e.what();
}
break;
}
}
void Buffer::writeBackupFile() {
if (m_backupFilePath.isEmpty()) {
const auto &config = ConfigMgr::getInst().getEditorConfig();
QString backupDirPath(QDir(getResourcePath()).filePath(config.getBackupFileDirectory()));
backupDirPath = QDir::cleanPath(backupDirPath);
auto backupFileName = FileUtils::generateFileNameWithSequence(backupDirPath, getName(),
config.getBackupFileExtension());
QDir backupDir(backupDirPath);
backupDir.mkpath(backupDirPath);
m_backupFilePath = backupDir.filePath(backupFileName);
}
Q_ASSERT(m_backupFilePathOfPreviousSession.isEmpty());
// Just use FileUtils instead of notebook backend.
FileUtils::writeFile(m_backupFilePath, generateBackupFileHead() + getContent());
}
QString Buffer::generateBackupFileHead() const {
return QStringLiteral("vnotex_backup_file %1|").arg(getContentPath());
}
void Buffer::checkBackupFileOfPreviousSession() {
const auto &config = ConfigMgr::getInst().getEditorConfig();
if (config.getAutoSavePolicy() != EditorConfig::AutoSavePolicy::BackupFile) {
return;
}
QString backupDirPath(QDir(getResourcePath()).filePath(config.getBackupFileDirectory()));
backupDirPath = QDir::cleanPath(backupDirPath);
QDir backupDir(backupDirPath);
QStringList backupFiles;
{
const QString nameFilter =
QStringLiteral("%1*%2").arg(getName(), config.getBackupFileExtension());
backupFiles =
backupDir.entryList(QStringList(nameFilter),
QDir::Files | QDir::Hidden | QDir::NoSymLinks | QDir::NoDotAndDotDot);
}
if (backupFiles.isEmpty()) {
return;
}
for (const auto &file : backupFiles) {
const auto filePath = backupDir.filePath(file);
if (isBackupFileOfBuffer(filePath)) {
const auto backupContent = readBackupFile(filePath);
if (backupContent == getContent()) {
// Found backup file with identical content.
// Just discard the backup file.
FileUtils::removeFile(filePath);
qInfo() << "delete identical backup file of previous session" << filePath;
} else {
m_backupFilePathOfPreviousSession = filePath;
qInfo() << "found backup file of previous session" << filePath;
}
break;
}
}
}
bool Buffer::isBackupFileOfBuffer(const QString &p_file) const {
QFile file(p_file);
if (!file.open(QFile::ReadOnly | QIODevice::Text)) {
return false;
}
QTextStream st(&file);
const auto head = st.readLine();
return head.startsWith(generateBackupFileHead());
}
const QString &Buffer::getBackupFileOfPreviousSession() const {
return m_backupFilePathOfPreviousSession;
}
QString Buffer::readBackupFile(const QString &p_filePath) {
auto content = FileUtils::readTextFile(p_filePath);
return content.mid(content.indexOf(QLatin1Char('|')) + 1);
}
void Buffer::discardBackupFileOfPreviousSession() {
Q_ASSERT(!m_backupFilePathOfPreviousSession.isEmpty());
FileUtils::removeFile(m_backupFilePathOfPreviousSession);
qInfo() << "discard backup file of previous session" << m_backupFilePathOfPreviousSession;
m_backupFilePathOfPreviousSession.clear();
}
void Buffer::recoverFromBackupFileOfPreviousSession() {
Q_ASSERT(!m_backupFilePathOfPreviousSession.isEmpty());
m_content = readBackupFile(m_backupFilePathOfPreviousSession);
m_provider->write(m_content);
++m_revision;
FileUtils::removeFile(m_backupFilePathOfPreviousSession);
qInfo() << "recover from backup file of previous session" << m_backupFilePathOfPreviousSession;
m_backupFilePathOfPreviousSession.clear();
// Reset state.
m_viewWindowToSync = nullptr;
m_modified = false;
emit modified(m_modified);
emit contentsChanged();
}
bool Buffer::isChildOf(const Node *p_node) const { return m_provider->isChildOf(p_node); }
bool Buffer::isAttachmentSupported() const {
return !m_readOnly && m_provider->isAttachmentSupported();
}
bool Buffer::hasAttachment() const {
if (!isAttachmentSupported()) {
return false;
}
if (m_provider->getAttachmentFolder().isEmpty()) {
return false;
}
QDir dir(getAttachmentFolderPath());
return !dir.isEmpty();
}
QString Buffer::getAttachmentFolderPath() const {
Q_ASSERT(isAttachmentSupported());
return const_cast<Buffer *>(this)->m_provider->fetchAttachmentFolderPath();
}
QStringList Buffer::addAttachment(const QString &p_destFolderPath, const QStringList &p_files) {
if (p_files.isEmpty()) {
return QStringList();
}
auto destFolderPath = p_destFolderPath.isEmpty() ? getAttachmentFolderPath() : p_destFolderPath;
Q_ASSERT(PathUtils::pathContains(getAttachmentFolderPath(), destFolderPath));
auto files = m_provider->addAttachment(destFolderPath, p_files);
if (!files.isEmpty()) {
emit attachmentChanged();
}
return files;
}
QString Buffer::newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) {
Q_ASSERT(PathUtils::pathContains(getAttachmentFolderPath(), p_destFolderPath));
auto filePath = m_provider->newAttachmentFile(p_destFolderPath, p_name);
emit attachmentChanged();
return filePath;
}
QString Buffer::newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) {
Q_ASSERT(PathUtils::pathContains(getAttachmentFolderPath(), p_destFolderPath));
auto folderPath = m_provider->newAttachmentFolder(p_destFolderPath, p_name);
emit attachmentChanged();
return folderPath;
}
QString Buffer::renameAttachment(const QString &p_path, const QString &p_name) {
Q_ASSERT(PathUtils::pathContains(getAttachmentFolderPath(), p_path));
return m_provider->renameAttachment(p_path, p_name);
}
void Buffer::removeAttachment(const QStringList &p_paths) {
m_provider->removeAttachment(p_paths);
emit attachmentChanged();
}
bool Buffer::isAttachment(const QString &p_path) const {
return PathUtils::pathContains(getAttachmentFolderPath(), p_path);
}
bool Buffer::isTagSupported() const { return m_provider->isTagSupported(); }
Buffer::ProviderType Buffer::getProviderType() const { return m_provider->getType(); }
Node *Buffer::getNode() const { return m_provider->getNode(); }
bool Buffer::checkFileExistsOnDisk() {
if (m_provider->checkFileExistsOnDisk()) {
m_state &= ~StateFlag::FileMissingOnDisk;
return true;
} else {
m_state |= StateFlag::FileMissingOnDisk;
return false;
}
}
bool Buffer::checkFileChangedOutside() {
if (m_provider->checkFileChangedOutside()) {
m_state |= StateFlag::FileChangedOutside;
return true;
} else {
m_state &= ~StateFlag::FileChangedOutside;
return false;
}
}
Buffer::StateFlags Buffer::state() const { return m_state; }
QSharedPointer<File> Buffer::getFile() const { return m_provider->getFile(); }
================================================
FILE: src/core/buffer/buffer.h
================================================
#ifndef BUFFER_H
#define BUFFER_H
#include <QObject>
#include <QSharedPointer>
#include <functional>
#include <global.h>
class QWidget;
class QTimer;
namespace vnotex {
class Node;
class Buffer;
class ViewWindow;
struct FileOpenParameters;
class BufferProvider;
class File;
struct BufferParameters {
QSharedPointer<BufferProvider> m_provider;
};
class Buffer : public QObject {
Q_OBJECT
public:
enum class ProviderType { Internal, External };
enum class OperationCode { Success, FileMissingOnDisk, FileChangedOutside, Failed };
enum StateFlag { Normal = 0, FileMissingOnDisk = 0x1, FileChangedOutside = 0x2, Discarded = 0x4 };
Q_DECLARE_FLAGS(StateFlags, StateFlag);
Buffer(const BufferParameters &p_parameters, QObject *p_parent = nullptr);
virtual ~Buffer();
int getAttachViewWindowCount() const;
void attachViewWindow(ViewWindow *p_win);
void detachViewWindow(ViewWindow *p_win);
// Create a view window to show the content of this buffer.
// Attach the created view window to this buffer.
ViewWindow *createViewWindow(const QSharedPointer<FileOpenParameters> &p_paras,
QWidget *p_parent);
// Whether this buffer matches @p_node.
bool match(const Node *p_node) const;
// Whether this buffer matches @p_filePath.
bool match(const QString &p_filePath) const;
// Buffer name.
QString getName() const;
QString getPath() const;
// In some cases, getPath() may point to a container containting all the stuffs.
// getContentPath() will return the real path to the file providing the content.
QString getContentPath() const;
// Get the base path to resolve resources.
QString getResourcePath() const;
// Return nullptr if not available.
QSharedPointer<File> getFile() const;
ID getId() const;
// Get buffer content.
// It may differ from the content on disk.
// For performance, we need to sync the content with ViewWindow before returning
// the latest content.
const QString &getContent() const;
// @p_revision will be set before contentsChanged is emitted.
void setContent(const QString &p_content, int &p_revision);
// Invalidate the content of buffer.
// Need to sync with @p_win to get the latest content.
// @p_setRevision will be called to set revision before contentsChanged is emitted.
void invalidateContent(const ViewWindow *p_win, const std::function<void(int)> &p_setRevision);
// Sync content with @p_win if @p_win is the window needed to sync.
void syncContent(const ViewWindow *p_win);
int getRevision() const;
bool isModified() const;
void setModified(bool p_modified);
bool isReadOnly() const;
// Save buffer content to file.
OperationCode save(bool p_force);
// Discard changes and reload file.
OperationCode reload();
// Discard the buffer which will invalidate the buffer.
void discard();
// Buffer is about to be deleted.
void close();
// Insert image from @p_srcImagePath.
// Return inserted image file path.
virtual QString insertImage(const QString &p_srcImagePath, const QString &p_imageFileName);
virtual QString insertImage(const QImage &p_image, const QString &p_imageFileName);
virtual void removeImage(const QString &p_imagePath);
const QString &getBackupFileOfPreviousSession() const;
void discardBackupFileOfPreviousSession();
void recoverFromBackupFileOfPreviousSession();
// Whether this buffer's provider is a child of @p_node or an attachment of @p_node.
bool isChildOf(const Node *p_node) const;
Node *getNode() const;
bool isAttachmentSupported() const;
bool hasAttachment() const;
QString getAttachmentFolderPath() const;
// @p_destFolderPath: folder path locating in attachment folder. Use the root folder if empty.
QStringList addAttachment(const QString &p_destFolderPath, const QStringList &p_files);
QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name);
QString newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name);
QString renameAttachment(const QString &p_path, const QString &p_name);
void removeAttachment(const QStringList &p_paths);
// Judge whether file @p_path is attachment.
bool isAttachment(const QString &p_path) const;
bool isTagSupported() const;
ProviderType getProviderType() const;
bool checkFileExistsOnDisk();
bool checkFileChangedOutside();
StateFlags state() const;
static QString readBackupFile(const QString &p_filePath);
signals:
void attachedViewWindowEmpty();
void modified(bool p_modified);
void contentsChanged();
void nameChanged();
void attachmentChanged();
// This buffer is AutoSavePolicy::AutoSave.
void autoSaved();
protected:
virtual ViewWindow *createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,
QWidget *p_parent) = 0;
QSharedPointer<BufferProvider> m_provider;
private slots:
void autoSave();
private:
void syncContent();
void readContent();
// Get the path of the image folder.
QString getImageFolderPath() const;
void writeBackupFile();
// Generate backup file head.
QString generateBackupFileHead() const;
void checkBackupFileOfPreviousSession();
bool isBackupFileOfBuffer(const QString &p_file) const;
// Will be assigned uniquely once created.
const ID m_id = 0;
// Revision of contents.
int m_revision = 0;
// If the buffer is modified, m_content reflect the latest changes instead
// of the file content.
QString m_content;
bool m_readOnly = false;
bool m_modified = false;
int m_attachedViewWindowCount = 0;
const ViewWindow *m_viewWindowToSync = nullptr;
// Managed by QObject.
QTimer *m_autoSaveTimer = nullptr;
QString m_backupFilePath;
QString m_backupFilePathOfPreviousSession;
StateFlags m_state = StateFlag::Normal;
};
} // namespace vnotex
Q_DECLARE_OPERATORS_FOR_FLAGS(vnotex::Buffer::StateFlags)
#endif // BUFFER_H
================================================
FILE: src/core/buffer/bufferprovider.cpp
================================================
#include "bufferprovider.h"
#include <QFileInfo>
using namespace vnotex;
bool BufferProvider::checkFileExistsOnDisk() const { return QFileInfo::exists(getContentPath()); }
QDateTime BufferProvider::getLastModifiedFromFile() const {
return QFileInfo(getContentPath()).lastModified();
}
bool BufferProvider::checkFileChangedOutside() const {
// TODO: support non-local URLs.
QFileInfo info(getContentPath());
if (!info.exists() || m_lastModified != info.lastModified()) {
return true;
}
return false;
}
================================================
FILE: src/core/buffer/bufferprovider.h
================================================
#ifndef BUFFERPROVIDER_H
#define BUFFERPROVIDER_H
#include <QDateTime>
#include <QObject>
#include "buffer.h"
namespace vnotex {
class Node;
// Content provider for Buffer.
class BufferProvider : public QObject {
Q_OBJECT
public:
BufferProvider(QObject *p_parent = nullptr) : QObject(p_parent) {}
virtual ~BufferProvider() {}
virtual Buffer::ProviderType getType() const = 0;
virtual bool match(const Node *p_node) const = 0;
virtual bool match(const QString &p_filePath) const = 0;
virtual QString getName() const = 0;
virtual QString getPath() const = 0;
virtual QString getContentPath() const = 0;
virtual QString getResourcePath() const = 0;
virtual void write(const QString &p_content) = 0;
virtual QString read() const = 0;
virtual QString fetchImageFolderPath() = 0;
virtual bool isChildOf(const Node *p_node) const = 0;
virtual Node *getNode() const = 0;
virtual QString getAttachmentFolder() const = 0;
virtual QString fetchAttachmentFolderPath() = 0;
virtual QStringList addAttachment(const QString &p_destFolderPath,
const QStringList &p_files) = 0;
virtual QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) = 0;
virtual QString newAttachmentFolder(const QString &p_destFolderPath, const QString &p_name) = 0;
virtual QString renameAttachment(const QString &p_path, const QString &p_name) = 0;
virtual void removeAttachment(const QStringList &p_paths) = 0;
virtual QString insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) = 0;
virtual QString insertImage(const QImage &p_image, const QString &p_imageFileName) = 0;
virtual void removeImage(const QString &p_imagePath) = 0;
virtual bool isAttachmentSupported() const = 0;
virtual bool isTagSupported() const = 0;
virtual bool checkFileExistsOnDisk() const;
virtual bool checkFileChangedOutside() const;
virtual bool isReadOnly() const = 0;
// Return nullptr if not available.
virtual QSharedPointer<File> getFile() const = 0;
protected:
virtual QDateTime getLastModifiedFromFile() const;
QDateTime m_lastModified;
};
} // namespace vnotex
#endif // BUFFERPROVIDER_H
================================================
FILE: src/core/buffer/filebufferprovider.cpp
================================================
#include "filebufferprovider.h"
#include <QFileInfo>
#include <core/exception.h>
#include <core/file.h>
#include <notebook/node.h>
#include <utils/fileutils.h>
#include <utils/pathutils.h>
using namespace vnotex;
FileBufferProvider::FileBufferProvider(const QSharedPointer<File> &p_file, Node *p_nodeAttachedTo,
bool p_readOnly, QObject *p_parent)
: BufferProvider(p_parent), m_file(p_file), c_nodeAttachedTo(p_nodeAttachedTo),
m_readOnly(p_readOnly) {}
Buffer::ProviderType FileBufferProvider::getType() const { return Buffer::ProviderType::External; }
bool FileBufferProvider::match(const Node *p_node) const {
Q_UNUSED(p_node);
return false;
}
bool FileBufferProvider::match(const QString &p_filePath) const {
return PathUtils::areSamePaths(m_file->getFilePath(), p_filePath);
}
QString FileBufferProvider::getName() const { return m_file->getName(); }
QString FileBufferProvider::getPath() const { return m_file->getFilePath(); }
QString FileBufferProvider::getContentPath() const { return m_file->getContentPath(); }
QString FileBufferProvider::getResourcePath() const { return m_file->getResourcePath(); }
void FileBufferProvider::write(const QString &p_content) {
m_file->write(p_content);
m_lastModified = getLastModifiedFromFile();
}
QString FileBufferProvider::read() const {
const_cast<FileBufferProvider *>(this)->m_lastModified = getLastModifiedFromFile();
return m_file->read();
}
QString FileBufferProvider::fetchImageFolderPath() {
auto file = m_file->getImageInterface();
if (file) {
return file->fetchImageFolderPath();
} else {
return QString();
}
}
bool FileBufferProvider::isChildOf(const Node *p_node) const {
if (c_nodeAttachedTo) {
return c_nodeAttachedTo == p_node || Node::isAncestor(p_node, c_nodeAttachedTo);
}
return false;
}
QString FileBufferProvider::getAttachmentFolder() const {
Q_ASSERT(false);
return QString();
}
QString FileBufferProvider::fetchAttachmentFolderPath() {
Q_ASSERT(false);
return QString();
}
QStringList FileBufferProvider::addAttachment(const QString &p_destFolderPath,
const QStringList &p_files) {
Q_UNUSED(p_destFolderPath);
Q_UNUSED(p_files);
Q_ASSERT(false);
return QStringList();
}
QString FileBufferProvider::newAttachmentFile(const QString &p_destFolderPath,
const QString &p_name) {
Q_UNUSED(p_destFolderPath);
Q_UNUSED(p_name);
Q_ASSERT(false);
return QString();
}
QString FileBufferProvider::newAttachmentFolder(const QString &p_destFolderPath,
const QString &p_name) {
Q_UNUSED(p_destFolderPath);
Q_UNUSED(p_name);
Q_ASSERT(false);
return QString();
}
QString FileBufferProvider::renameAttachment(const QString &p_path, const QString &p_name) {
Q_UNUSED(p_path);
Q_UNUSED(p_name);
Q_ASSERT(false);
return QString();
}
void FileBufferProvider::removeAttachment(const QStringList &p_paths) {
Q_UNUSED(p_paths);
Q_ASSERT(false);
}
QString FileBufferProvider::insertImage(const QString &p_srcImagePath,
const QString &p_imageFileName) {
auto file = m_file->getImageInterface();
if (file) {
return file->insertImage(p_srcImagePath, p_imageFileName);
} else {
return QString();
}
}
QString FileBufferProvider::insertImage(const QImage &p_image, const QString &p_imageFileName) {
auto file = m_file->getImageInterface();
if (file) {
return file->insertImage(p_image, p_imageFileName);
} else {
return QString();
}
}
void FileBufferProvider::removeImage(const QString &p_imagePath) {
auto file = m_file->getImageInterface();
if (file) {
try {
file->removeImage(p_imagePath);
} catch (Exception &e) {
qWarning() << "failed to remove image" << p_imagePath << e.what();
}
}
}
bool FileBufferProvider::isAttachmentSupported() const { return false; }
bool FileBufferProvider::isTagSupported() const { return false; }
Node *FileBufferProvider::getNode() const { return c_nodeAttachedTo; }
bool FileBufferProvider::isReadOnly() const { return m_readOnly; }
QSharedPointer<File> FileBufferProvider::getFile() const { return m_file; }
================================================
FILE: src/core/buffer/filebufferprovider.h
================================================
#ifndef FILEBUFFERPROVIDER_H
#define FILEBUFFERPROVIDER_H
#include "bufferprovider.h"
namespace vnotex {
class File;
// Buffer provider based on external file.
class FileBufferProvider : public BufferProvider {
Q_OBJECT
public:
FileBufferProvider(const QSharedPointer<File> &m_file, Node *p_nodeAttachedTo, bool p_readOnly,
QObject *p_parent = nullptr);
Buffer::ProviderType getType() const Q_DECL_OVERRIDE;
bool match(const Node *p_node) const Q_DECL_OVERRIDE;
bool match(const QString &p_filePath) const Q_DECL_OVERRIDE;
QString getName() const Q_DECL_OVERRIDE;
QString getPath() const Q_DECL_OVERRIDE;
QString getContentPath() const Q_DECL_OVERRIDE;
QString getResourcePath() const Q_DECL_OVERRIDE;
void write(const QString &p_content) Q_DECL_OVERRIDE;
QString read() const Q_DECL_OVERRIDE;
QString fetchImageFolderPath() Q_DECL_OVERRIDE;
bool isChildOf(const Node *p_node) const Q_DECL_OVERRIDE;
Node *getNode() const Q_DECL_OVERRIDE;
QString getAttachmentFolder() const Q_DECL_OVERRIDE;
QString fetchAttachmentFolderPath() Q_DECL_OVERRIDE;
QStringList addAttachment(const QString &p_destFolderPath,
const QStringList &p_files) Q_DECL_OVERRIDE;
QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) Q_DECL_OVERRIDE;
QString newAttachmentFolder(const QString &p_destFolderPath,
const QString &p_name) Q_DECL_OVERRIDE;
QString renameAttachment(const QString &p_path, const QString &p_name) Q_DECL_OVERRIDE;
void removeAttachment(const QStringList &p_paths) Q_DECL_OVERRIDE;
QString insertImage(const QString &p_srcImagePath,
const QString &p_imageFileName) Q_DECL_OVERRIDE;
QString insertImage(const QImage &p_image, const QString &p_imageFileName) Q_DECL_OVERRIDE;
void removeImage(const QString &p_imagePath) Q_DECL_OVERRIDE;
bool isAttachmentSupported() const Q_DECL_OVERRIDE;
bool isTagSupported() const Q_DECL_OVERRIDE;
bool isReadOnly() const Q_DECL_OVERRIDE;
QSharedPointer<File> getFile() const Q_DECL_OVERRIDE;
private:
QSharedPointer<File> m_file;
Node *c_nodeAttachedTo = nullptr;
bool m_readOnly = false;
};
} // namespace vnotex
#endif // FILEBUFFERPROVIDER_H
================================================
FILE: src/core/buffer/filetypehelper.cpp
================================================
#include "filetypehelper.h"
#include <QDebug>
#include <QFileInfo>
#include "buffer.h"
#include <core/configmgr.h>
#include <core/coreconfig.h>
#include <utils/fileutils.h>
using namespace vnotex;
QString FileType::preferredSuffix() const {
return m_suffixes.isEmpty() ? QString() : m_suffixes.first();
}
bool FileType::isMarkdown() const { return m_type == Type::Markdown; }
QString FileTypeHelper::s_systemDefaultProgram = QStringLiteral("System");
FileTypeHelper::FileTypeHelper() { reload(); }
void FileTypeHelper::reload() {
setupBuiltInTypes();
setupSuffixTypeMap();
}
void FileTypeHelper::setupBuiltInTypes() {
m_fileTypes.clear();
const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();
{
FileType type;
type.m_type = FileType::Markdown;
type.m_typeName = QStringLiteral("Markdown");
type.m_displayName = Buffer::tr("Markdown");
auto suffixes = coreConfig.findFileTypeSuffix(type.m_typeName);
if (suffixes && !suffixes->isEmpty()) {
type.m_suffixes = *suffixes;
} else {
type.m_suffixes << QStringLiteral("md") << QStringLiteral("mkd") << QStringLiteral("rmd")
<< QStringLiteral("markdown");
}
m_fileTypes.push_back(type);
}
{
FileType type;
type.m_type = FileType::Text;
type.m_typeName = QStringLiteral("Text");
type.m_displayName = Buffer::tr("Text");
auto suffixes = coreConfig.findFileTypeSuffix(type.m_typeName);
if (suffixes && !suffixes->isEmpty()) {
type.m_suffixes = *suffixes;
} else {
type.m_suffixes << QStringLiteral("txt") << QStringLiteral("text") << QStringLiteral("log");
}
m_fileTypes.push_back(type);
}
{
FileType type;
type.m_type = FileType::Pdf;
type.m_typeName = QStringLiteral("PDF");
type.m_displayName = Buffer::tr("Portable Document Format");
type.m_isNewable = false;
auto suffixes = coreConfig.findFileTypeSuffix(type.m_typeName);
if (suffixes && !suffixes->isEmpty()) {
type.m_suffixes = *suffixes;
} else {
type.m_suffixes << QStringLiteral("pdf");
}
m_fileTypes.push_back(type);
}
{
FileType type;
type.m_type = FileType::MindMap;
type.m_typeName = QStringLiteral("MindMap");
type.m_displayName = Buffer::tr("Mind Map");
auto suffixes = coreConfig.findFileTypeSuffix(type.m_typeName);
if (suffixes && !suffixes->isEmpty()) {
type.m_suffixes = *suffixes;
} else {
type.m_suffixes << QStringLiteral("emind");
}
m_fileTypes.push_back(type);
}
{
FileType type;
type.m_type = FileType::Others;
type.m_typeName = QStringLiteral("Others");
type.m_displayName = Buffer::tr("Others");
m_fileTypes.push_back(type);
}
}
const FileType &FileTypeHelper::getFileType(const QString &p_filePath) const {
Q_ASSERT(!p_filePath.isEmpty());
QFileInfo fi(p_filePath);
auto suffix = fi.suffix().toLower();
auto it = m_suffixTypeMap.find(suffix);
if (it != m_suffixTypeMap.end()) {
return m_fileTypes.at(it.value());
}
// Treat all unknown text files as plain text files.
if (FileUtils::isText(p_filePath)) {
return m_fileTypes[FileType::Text];
}
return m_fileTypes[FileType::Others];
}
const FileType &FileTypeHelper::getFileTypeBySuffix(const QString &p_suffix) const {
auto it = m_suffixTypeMap.find(p_suffix.toLower());
if (it != m_suffixTypeMap.end()) {
return m_fileTypes.at(it.value());
} else {
return m_fileTypes[FileType::Others];
}
}
void FileTypeHelper::setupSuffixTypeMap() {
m_suffixTypeMap.clear();
for (int i = 0; i < m_fileTypes.size(); ++i) {
for (const auto &suffix : m_fileTypes[i].m_suffixes) {
if (m_suffixTypeMap.contains(suffix)) {
qWarning() << "suffix conflicts detected" << suffix << m_fileTypes[i].m_type;
}
m_suffixTypeMap.insert(suffix, i);
}
}
}
const QVector<FileType> &FileTypeHelper::getAllFileTypes() const { return m_fileTypes; }
const FileType &FileTypeHelper::getFileType(int p_type) const {
if (p_type >= m_fileTypes.size()) {
p_type = FileType::Others;
}
return m_fileTypes[p_type];
}
FileTypeHelper &FileTypeHelper::getInst() {
static FileTypeHelper helper;
return helper;
}
bool FileTypeHelper::checkFileType(const QString &p_filePath, int p_type) const {
return getFileType(p_filePath).m_type == p_type;
}
const FileType &FileTypeHelper::getFileTypeByName(const QString &p_typeName) const {
for (const auto &ft : m_fileTypes) {
if (ft.m_typeName == p_typeName) {
return ft;
}
}
Q_ASSERT(false);
return m_fileTypes[FileType::Others];
}
================================================
FILE: src/core/buffer/filetypehelper.h
================================================
#ifndef FILETYPEHELPER_H
#define FILETYPEHELPER_H
#include <QMap>
#include <QString>
#include <QVector>
namespace vnotex {
class FileType {
public:
// There may be other types after Others.
enum Type { Markdown = 0, Text, Pdf, MindMap, Others };
QString preferredSuffix() const;
bool isMarkdown() const;
// Type.
int m_type = -1;
QString m_typeName;
QString m_displayName;
QStringList m_suffixes;
// Whether we can new this type of file.
bool m_isNewable = true;
};
// Only handle built-in editors.
class FileTypeHelper {
public:
const FileType &getFileType(const QString &p_filePath) const;
const FileType &getFileType(int p_type) const;
const FileType &getFileTypeByName(const QString &p_typeName) const;
const FileType &getFileTypeBySuffix(const QString &p_suffix) const;
const QVector<FileType> &getAllFileTypes() const;
bool checkFileType(const QString &p_filePath, int p_type) const;
void reload();
static FileTypeHelper &getInst();
static QString s_systemDefaultProgram;
private:
FileTypeHelper();
void setupBuiltInTypes();
void setupSuffixTypeMap();
// Built-in Type could be accessed via enum Type.
QVector<FileType> m_fileTypes;
// suffix -> index of m_fileTypes.
// TODO: handle suffix conflicts.
QMap<QString, int> m_suffixTypeMap;
};
} // namespace vnotex
#endif // FILETYPEHELPER_H
================================================
FILE: src/core/buffer/ibufferfactory.h
================================================
#ifndef IBUFFERFACTORY_H
#define IBUFFERFACTORY_H
#include <QSharedPointer>
namespace vnotex {
class Buffer;
struct BufferParameters;
// Abstract factory to create buffer.
class IBufferFactory {
public:
virtual ~IBufferFactory() {}
virtual Buffer *createBuffer(const BufferParameters &p_parameters, QObject *p_parent) = 0;
virtual bool isBufferCreatedByFactory(const Buffer *p_buffer) const = 0;
};
} // namespace vnotex
#endif // IBUFFERFACTORY_H
================================================
FILE: src/core/buffer/markdownbuffer.cpp
================================================
#include "markdownbuffer.h"
#include <QDir>
#include <buffer/bufferprovider.h>
#include <notebook/node.h>
#include <utils/pathutils.h>
#include <widgets/markdownviewwindow.h>
using namespace vnotex;
MarkdownBuffer::MarkdownBuffer(const BufferParameters &p_parameters, QObject *p_parent)
: Buffer(p_parameters, p_parent) {
fetchInitialImages();
}
ViewWindow *
MarkdownBuffer::createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,
QWidget *p_parent) {
Q_UNUSED(p_paras);
return new MarkdownViewWindow(p_parent);
}
QString MarkdownBuffer::insertImage(const QString &p_srcImagePath, const QString &p_imageFileName) {
return m_provider->insertImage(p_srcImagePath, p_imageFileName);
}
QString MarkdownBuffer::insertImage(const QImage &p_image, const QString &p_imageFileName) {
return m_provider->insertImage(p_image, p_imageFileName);
}
void MarkdownBuffer::fetchInitialImages() {
Q_ASSERT(m_initialImages.isEmpty());
// There is compilation error on Linux and macOS using TypeFlags directly.
int linkFlags =
vte::MarkdownLink::TypeFlag::LocalRelativeInternal | vte::MarkdownLink::TypeFlag::Remote;
m_initialImages = vte::MarkdownUtils::fetchImagesFromMarkdownText(
getContent(), getResourcePath(), static_cast<vte::MarkdownLink::TypeFlags>(linkFlags));
}
void MarkdownBuffer::addInsertedImage(const QString &p_imagePath, const QString &p_urlInLink) {
vte::MarkdownLink link;
link.m_path = p_imagePath;
link.m_urlInLink = p_urlInLink;
// There are two types: local internal and remote for image host.
link.m_type = PathUtils::isLocalFile(p_imagePath)
? vte::MarkdownLink::TypeFlag::LocalRelativeInternal
: vte::MarkdownLink::TypeFlag::Remote;
m_insertedImages.append(link);
}
QHash<QString, bool> MarkdownBuffer::clearObsoleteImages() {
QHash<QString, bool> obsoleteImages;
Q_ASSERT(!isModified());
const bool discarded = state() & StateFlag::Discarded;
const int linkFlags =
vte::MarkdownLink::TypeFlag::LocalRelativeInternal | vte::MarkdownLink::TypeFlag::Remote;
const auto latestImages = vte::MarkdownUtils::fetchImagesFromMarkdownText(
!discarded ? getContent() : m_provider->read(), getResourcePath(),
static_cast<vte::MarkdownLink::TypeFlags>(linkFlags));
QSet<QString> latestImagesPath;
for (const auto &link : latestImages) {
if (link.m_type & vte::MarkdownLink::TypeFlag::Remote) {
latestImagesPath.insert(link.m_path);
} else {
latestImagesPath.insert(PathUtils::normalizePath(link.m_path));
}
}
for (const auto &link : m_insertedImages) {
if (!(link.m_type & linkFlags)) {
continue;
}
const bool isRemote = link.m_type & vte::MarkdownLink::TypeFlag::Remote;
const auto linkPath = isRemote ? link.m_path : PathUtils::normalizePath(link.m_path);
if (!latestImagesPath.contains(linkPath)) {
obsoleteImages.insert(link.m_path, isRemote);
}
}
m_insertedImages.clear();
for (const auto &link : m_initialImages) {
Q_ASSERT(link.m_type & linkFlags);
const bool isRemote = link.m_type & vte::MarkdownLink::TypeFlag::Remote;
const auto linkPath = isRemote ? link.m_path : PathUtils::normalizePath(link.m_path);
if (!latestImagesPath.contains(linkPath)) {
obsoleteImages.insert(link.m_path, isRemote);
}
}
m_initialImages = latestImages;
return obsoleteImages;
}
void MarkdownBuffer::removeImage(const QString &p_imagePath) {
qDebug() << "remove obsolete image" << p_imagePath;
m_provider->removeImage(p_imagePath);
}
================================================
FILE: src/core/buffer/markdownbuffer.h
================================================
#ifndef MARKDOWNBUFFER_H
#define MARKDOWNBUFFER_H
#include "buffer.h"
#include <QHash>
#include <QVector>
#include <vtextedit/markdownutils.h>
namespace vnotex {
class MarkdownBuffer : public Buffer {
Q_OBJECT
public:
MarkdownBuffer(const BufferParameters &p_parameters, QObject *p_parent = nullptr);
QString insertImage(const QString &p_srcImagePath,
const QString &p_imageFileName) Q_DECL_OVERRIDE;
QString insertImage(const QImage &p_image, const QString &p_imageFileName) Q_DECL_OVERRIDE;
void removeImage(const QString &p_imagePath) Q_DECL_OVERRIDE;
void addInsertedImage(const QString &p_imagePath, const QString &p_urlInLink);
// Clear obsolete images.
// Won't delete images, just return a list of obsolete images path.
// Will re-init m_initialImages and clear m_insertedImages.
// Return [ImagePath] -> IsRemote.
QHash<QString, bool> clearObsoleteImages();
protected:
ViewWindow *createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,
QWidget *p_parent) Q_DECL_OVERRIDE;
private:
void fetchInitialImages();
// Images referenced in the file before opening this buffer.
QVector<vte::MarkdownLink> m_initialImages;
// Images newly inserted during this buffer's lifetime.
QVector<vte::MarkdownLink> m_insertedImages;
};
} // namespace vnotex
#endif // MARKDOWNBUFFER_H
================================================
FILE: src/core/buffer/markdownbufferfactory.cpp
================================================
#include "markdownbufferfactory.h"
#include "markdownbuffer.h"
using namespace vnotex;
Buffer *MarkdownBufferFactory::createBuffer(const BufferParameters &p_parameters,
QObject *p_parent) {
return new MarkdownBuffer(p_parameters, p_parent);
}
bool MarkdownBufferFactory::isBufferCreatedByFactory(const Buffer *p_buffer) const {
return dynamic_cast<const MarkdownBuffer *>(p_buffer) != nullptr;
}
================================================
FILE: src/core/buffer/markdownbufferfactory.h
================================================
#ifndef MARKDOWNBUFFERFACTORY_H
#define MARKDOWNBUFFERFACTORY_H
#include "ibufferfactory.h"
namespace vnotex {
// Buffer factory for Markdown file.
class MarkdownBufferFactory : public IBufferFactory {
public:
Buffer *createBuffer(const BufferParameters &p_parameters, QObject *p_parent) Q_DECL_OVERRIDE;
bool isBufferCreatedByFactory(const Buffer *p_buffer) const Q_DECL_OVERRIDE;
};
} // namespace vnotex
#endif // MARKDOWNBUFFERFACTORY_H
================================================
FILE: src/core/buffer/mindmapbuffer.cpp
================================================
#include "mindmapbuffer.h"
#include <widgets/mindmapviewwindow.h>
using namespace vnotex;
MindMapBuffer::MindMapBuffer(const BufferParameters &p_parameters, QObject *p_parent)
: Buffer(p_parameters, p_parent) {}
ViewWindow *
MindMapBuffer::createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,
QWidget *p_parent) {
Q_UNUSED(p_paras);
return new MindMapViewWindow(p_parent);
}
================================================
FILE: src/core/buffer/mindmapbuffer.h
================================================
#ifndef MINDMAPBUFFER_H
#define MINDMAPBUFFER_H
#include "buffer.h"
namespace vnotex {
class MindMapBuffer : public Buffer {
Q_OBJECT
public:
MindMapBuffer(const BufferParameters &p_parameters, QObject *p_parent = nullptr);
protected:
ViewWindow *createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,
QWidget *p_parent) Q_DECL_OVERRIDE;
};
} // namespace vnotex
#endif // MINDMAPBUFFER_H
================================================
FILE: src/core/buffer/mindmapbufferfactory.cpp
================================================
#include "mindmapbufferfactory.h"
#include "mindmapbuffer.h"
using namespace vnotex;
Buffer *MindMapBufferFactory::createBuffer(const BufferParameters &p_parameters,
QObject *p_parent) {
return new MindMapBuffer(p_parameters, p_parent);
}
bool MindMapBufferFactory::isBufferCreatedByFactory(const Buffer *p_buffer) const {
return dynamic_cast<const MindMapBuffer *>(p_buffer) != nullptr;
}
================================================
FILE: src/core/buffer/mindmapbufferfactory.h
================================================
#ifndef MINDMAPBUFFERFACTORY_H
#define MINDMAPBUFFERFACTORY_H
#include "ibufferfactory.h"
namespace vnotex {
// Buffer factory for MindMap file.
class MindMapBufferFactory : public IBufferFactory {
public:
Buffer *createBuffer(const BufferParameters &p_parameters, QObject *p_parent) Q_DECL_OVERRIDE;
bool isBufferCreatedByFactory(const Buffer *p_buffer) const Q_DECL_OVERRIDE;
};
} // namespace vnotex
#endif // MINDMAPBUFFERFACTORY_H
================================================
FILE: src/core/buffer/nodebufferprovider.cpp
================================================
#include "nodebufferprovider.h"
#include <QFileInfo>
#include <core/exception.h>
#include <core/file.h>
#include <notebook/node.h>
#include <notebook/notebook.h>
#include <utils/pathutils.h>
using namespace vnotex;
NodeBufferProvider::NodeBufferProvider(const QSharedPointer<Node> &p_node,
const QSharedPointer<File> &p_file, QObject *p_parent)
: BufferProvider(p_parent), m_node(p_node), m_nodeFile(p_file) {}
Buffer::ProviderType NodeBufferProvider::getType() const { return Buffer::ProviderType::Internal; }
bool NodeBufferProvider::match(const Node *p_node) const { return m_node.data() == p_node; }
bool NodeBufferProvider::match(const QString &p_filePath) const {
return PathUtils::areSamePaths(getPath(), p_filePath);
}
QString NodeBufferProvider::getName() const { return m_node->getName(); }
QString NodeBufferProvider::getPath() const { return m_nodeFile->getFilePath(); }
QString NodeBufferProvider::getContentPath() const { return m_nodeFile->getContentPath(); }
QString NodeBufferProvider::getResourcePath() const { return m_nodeFile->getResourcePath(); }
void NodeBufferProvider::write(const QString &p_content) {
m_nodeFile->write(p_content);
m_lastModified = getLastModifiedFromFile();
}
QString NodeBufferProvider::read() const {
const_cast<NodeBufferProvider *>(this)->m_lastModified = getLastModifiedFromFile();
return m_nodeFile->read();
}
QString NodeBufferProvider::fetchImageFolderPath() {
auto file = m_nodeFile->getImageInterface();
if (file) {
return file->fetchImageFolderPath();
} else {
Q_ASSERT(false);
return getContentPath();
}
}
bool NodeBufferProvider::isChildOf(const Node *p_node) const {
return Node::isAncestor(p_node, m_node.data());
}
QString NodeBufferProvider::getAttachmentFolder() const { return m_node->getAttachmentFolder(); }
QString NodeBufferProvider::fetchAttachmentFolderPath() {
return m_node->fetchAttachmentFolderPath();
}
QStringList NodeBufferProvider::addAttachment(const QString &p_destFolderPath,
const QStringList &p_files) {
return m_node->addAttachment(p_destFolderPath, p_files);
}
QString NodeBufferProvider::newAttachmentFile(const QString &p_destFolderPath,
const QString &p_name) {
return m_node->newAttachmentFile(p_destFolderPath, p_name);
}
QString NodeBufferProvider::newAttachmentFolder(const QString &p_destFolderPath,
const QString &p_name) {
return m_node->newAttachmentFolder(p_destFolderPath, p_name);
}
QString NodeBufferProvider::renameAttachment(const QString &p_path, const QString &p_name) {
return m_node->renameAttachment(p_path, p_name);
}
void NodeBufferProvider::removeAttachment(const QStringList &p_paths) {
return m_node->removeAttachment(p_paths);
}
QString NodeBufferProvider::insertImage(const QString &p_srcImagePath,
const QString &p_imageFileName) {
auto file = m_nodeFile->getImageInterface();
if (file) {
return file->insertImage(p_srcImagePath, p_imageFileName);
} else {
return QString();
}
}
QString NodeBufferProvider::insertImage(const QImage &p_image, const QString &p_imageFileName) {
auto file = m_nodeFile->getImageInterface();
if (file) {
return file->insertImage(p_image, p_imageFileName);
} else {
return QString();
}
}
void NodeBufferProvider::removeImage(const QString &p_imagePath) {
auto file = m_nodeFile->getImageInterface();
if (file) {
try {
file->removeImage(p_imagePath);
} catch (Exception &e) {
qWarning() << "failed to remove image" << p_imagePath << e.what();
}
}
}
bool NodeBufferProvider::isAttachmentSupported() const { return true; }
bool NodeBufferProvider::isTagSupported() const { return m_node->getNotebook()->tag() != nullptr; }
Node *NodeBufferProvider::getNode() const { return m_node.data(); }
bool NodeBufferProvider::isReadOnly() const { return m_node->isReadOnly(); }
QSharedPointer<File> NodeBufferProvider::getFile() const { return m_nodeFile; }
================================================
FILE: src/core/buffer/nodebufferprovider.h
================================================
#ifndef NODEBUFFERPROVIDER_H
#define NODEBUFFERPROVIDER_H
#include <QSharedPointer>
#include "bufferprovider.h"
namespace vnotex {
class File;
class IFileWithImage;
// Buffer provider based on an internal node.
class NodeBufferProvider : public BufferProvider {
Q_OBJECT
public:
NodeBufferProvider(const QSharedPointer<Node> &p_node, const QSharedPointer<File> &p_file,
QObject *p_parent = nullptr);
Buffer::ProviderType getType() const Q_DECL_OVERRIDE;
bool match(const Node *p_node) const Q_DECL_OVERRIDE;
bool match(const QString &p_filePath) const Q_DECL_OVERRIDE;
QString getName() const Q_DECL_OVERRIDE;
QString getPath() const Q_DECL_OVERRIDE;
QString getContentPath() const Q_DECL_OVERRIDE;
QString getResourcePath() const Q_DECL_OVERRIDE;
void write(const QString &p_content) Q_DECL_OVERRIDE;
QString read() const Q_DECL_OVERRIDE;
QString fetchImageFolderPath() Q_DECL_OVERRIDE;
bool isChildOf(const Node *p_node) const Q_DECL_OVERRIDE;
Node *getNode() const Q_DECL_OVERRIDE;
QString getAttachmentFolder() const Q_DECL_OVERRIDE;
QString fetchAttachmentFolderPath() Q_DECL_OVERRIDE;
QStringList addAttachment(const QString &p_destFolderPath,
const QStringList &p_files) Q_DECL_OVERRIDE;
QString newAttachmentFile(const QString &p_destFolderPath, const QString &p_name) Q_DECL_OVERRIDE;
QString newAttachmentFolder(const QString &p_destFolderPath,
const QString &p_name) Q_DECL_OVERRIDE;
QString renameAttachment(const QString &p_path, const QString &p_name) Q_DECL_OVERRIDE;
void removeAttachment(const QStringList &p_paths) Q_DECL_OVERRIDE;
QString insertImage(const QString &p_srcImagePath,
const QString &p_imageFileName) Q_DECL_OVERRIDE;
QString insertImage(const QImage &p_image, const QString &p_imageFileName) Q_DECL_OVERRIDE;
void removeImage(const QString &p_imagePath) Q_DECL_OVERRIDE;
bool isAttachmentSupported() const Q_DECL_OVERRIDE;
bool isTagSupported() const Q_DECL_OVERRIDE;
bool isReadOnly() const Q_DECL_OVERRIDE;
QSharedPointer<File> getFile() const Q_DECL_OVERRIDE;
private:
QSharedPointer<Node> m_node;
QSharedPointer<File> m_nodeFile;
};
} // namespace vnotex
#endif // NODEBUFFERPROVIDER_H
================================================
FILE: src/core/buffer/pdfbuffer.cpp
================================================
#include "pdfbuffer.h"
#include <widgets/pdfviewwindow.h>
using namespace vnotex;
PdfBuffer::PdfBuffer(const BufferParameters &p_parameters, QObject *p_parent)
: Buffer(p_parameters, p_parent) {}
ViewWindow *PdfBuffer::createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,
QWidget *p_parent) {
Q_UNUSED(p_paras);
return new PdfViewWindow(p_parent);
}
================================================
FILE: src/core/buffer/pdfbuffer.h
================================================
#ifndef PDFBUFFER_H
#define PDFBUFFER_H
#include "buffer.h"
namespace vnotex {
class PdfBuffer : public Buffer {
Q_OBJECT
public:
PdfBuffer(const BufferParameters &p_parameters, QObject *p_parent = nullptr);
protected:
ViewWindow *createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,
QWidget *p_parent) Q_DECL_OVERRIDE;
};
} // namespace vnotex
#endif // PDFBUFFER_H
================================================
FILE: src/core/buffer/pdfbufferfactory.cpp
================================================
#include "pdfbufferfactory.h"
#include "pdfbuffer.h"
#include "urlbasedbufferprovider.h"
using namespace vnotex;
Buffer *PdfBufferFactory::createBuffer(const BufferParameters &p_parameters, QObject *p_parent) {
BufferParameters paras;
paras.m_provider = QSharedPointer<UrlBasedBufferProvider>::create(p_parameters.m_provider);
return new PdfBuffer(paras, p_parent);
}
bool PdfBufferFactory::isBufferCreatedByFactory(const Buffer *p_buffer) const {
return dynamic_cast<const PdfBuffer *>(p_buffer) != nullptr;
}
================================================
FILE: src/core/buffer/pdfbufferfactory.h
================================================
#ifndef PDFBUFFERFACTORY_H
#define PDFBUFFERFACTORY_H
#include "ibufferfactory.h"
namespace vnotex {
// Buffer factory for Pdf file.
class PdfBufferFactory : public IBufferFactory {
public:
Buffer *createBuffer(const BufferParameters &p_parameters, QObject *p_parent) Q_DECL_OVERRIDE;
bool isBufferCreatedByFactory(const Buffer *p_buffer) const Q_DECL_OVERRIDE;
};
} // namespace vnotex
#endif // PDFBUFFERFACTORY_H
================================================
FILE: src/core/buffer/textbuffer.cpp
================================================
#include "textbuffer.h"
#include <widgets/textviewwindow.h>
using namespace vnotex;
TextBuffer::TextBuffer(const BufferParameters &p_parameters, QObject *p_parent)
: Buffer(p_parameters, p_parent) {}
ViewWindow *TextBuffer::createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,
QWidget *p_parent) {
Q_UNUSED(p_paras);
return new TextViewWindow(p_parent);
}
================================================
FILE: src/core/buffer/textbuffer.h
================================================
#ifndef TEXTBUFFER_H
#define TEXTBUFFER_H
#include "buffer.h"
namespace vnotex {
class TextBuffer : public Buffer {
Q_OBJECT
public:
TextBuffer(const BufferParameters &p_parameters, QObject *p_parent = nullptr);
protected:
ViewWindow *createViewWindowInternal(const QSharedPointer<FileOpenParameters> &p_paras,
QWidget *p_parent) Q_DECL_OVERRIDE;
};
} // namespace vnotex
#endif // TEXTBUFFER_H
================================================
FILE: src/core/buffer/textbufferfactory.cpp
================================================
#include "textbufferfactory.h"
#include "textbuffer.h"
using namespace vnotex;
Buffer *TextBufferFactory::createBuffer(const BufferParameters &p_parameters, QObject *p_parent) {
return new TextBuffer(p_parameters, p_parent);
}
bool TextBufferFactory::isBufferCreatedByFactory(const Buffer *p_buffer) const {
return dynamic_cast<const TextBuffer *>(p_buffer) != nullptr;
}
================================================
FILE: src/core/buffer/textbufferfactory.h
================================================
#ifndef TEXTBUFFERFACTORY_H
#define TEXTBUFFERFACTORY_H
#include "ibufferfactory.h"
namespace vnotex {
// Buffer factory for text file.
class TextBufferFactory : public IBufferFactory {
public:
Buffer *createBuffer(const BufferParameters &p_parameters, QObject *p_parent) Q_DECL_OVERRIDE;
bool isBufferCreatedByFactory(const Buffer *p_buffer) const Q_DECL_OVERRIDE;
};
} // namespace vnotex
#endif // TEXTBUFFERFACTORY_H
================================================
FILE: src/core/buffer/urlbasedbufferprovider.h
================================================
#ifndef URLBASEDBUFFERPROVIDER_H
#define URLBASEDBUFFERPROVIDER_H
#include "bufferprovider.h"
#include <QSharedPointer>
namespace vnotex {
// A wrapper provider to provide URL-based buffer (instead of content-based).
class UrlBasedBufferProvider : public BufferProvider {
Q_OBJECT
public:
// Will own @p_provider.
UrlBasedBufferProvider(const QSharedPointer<BufferProvider> &p_provider,
QObject *p_parent = nullptr)
: BufferProvider(p_parent), m_provider(p_provider) {}
Buffer::ProviderType getType() const Q_DECL_OVERRIDE { return m_provider->getType(); }
bool match(const Node *p_node) const Q_DECL_OVERRIDE { return m_provider->match(p_node); }
bool match(const QString &p_filePath) const Q_DECL_OVERRIDE {
return m_provider->match(p_filePath);
}
QString getName() const Q_DECL_OVERRIDE { return m_provider->getName(); }
QString getPath() const Q_DECL_OVERRIDE { return m_provider->getPath(); }
QString getContentPath() const Q_DECL_OVERRIDE { return m_provider->getContentPath(); }
QString getResourcePath() const Q_DECL_OVERRIDE { return m_provider->getResourcePath(); }
void write(const QString &p_content) Q_DECL_OVERRIDE { Q_UNUSED(p_content); }
QString read() const Q_DECL_OVERRIDE {
const_cast<UrlBasedBufferProvider *>(this)->m_lastModified = getLastModifiedFromFile();
return QString();
}
QString fetchImageFolderPath() Q_DECL_OVERRIDE { return m_provider->fetchImageFolderPath(); }
bool isChildOf(const Node *p_node) const Q_DECL_OVERRIDE { return m_provider->isChildOf(p_node); }
Node *getNode() const Q_DECL_OVERRIDE { return m_provider->getNode(); }
QString getAttachmentFolder() const Q_DECL_OVERRIDE { return m_provider->getAttachmentFolder(); }
QString fetchAttachmentFolderPath() Q_DECL_OVERRIDE {
return m_provider->fetchAttachmentFolderPath();
}
QStringList addAttachment(const QString &p_destFolderPath,
const QStringList &p_files) Q_DECL_OVERRIDE {
return m_provider->addAttachment(p_destFolderPath, p_files);
}
QString newAttachmentFile(const QString &p_destFolderPath,
const QString &p_name) Q_DECL_OVERRIDE {
return m_provider->newAttachmentFile(p_destFolderPath, p_name);
}
QString newAttachmentFolder(const QString &p_destFolderPath,
const QString &p_name) Q_DECL_OVERRIDE {
return m_provider->newAttachmentFolder(p_destFolderPath, p_name);
}
QString renameAttachment(const QString &p_path, const QString &p_name) Q_DECL_OVERRIDE {
return m_provider->renameAttachment(p_path, p_name);
}
void removeAttachment(const QStringList &p_paths) Q_DECL_OVERRIDE {
m_provider->removeAttachment(p_paths);
}
QString insertImage(const QString &p_srcImagePath,
const QString &p_imageFileName) Q_DECL_OVERRIDE {
return m_provider->insertImage(p_srcImagePath, p_imageFileName);
}
QString insertImage(const QImage &p_image, const QString &p_imageFileName) Q_DECL_OVERRIDE {
return m_provider->insertImage(p_image, p_imageFileName);
}
void removeImage(const QString &p_imagePath) Q_DECL_OVERRIDE {
m_provider->removeImage(p_imagePath);
}
bool isAttachmentSupported() const Q_DECL_OVERRIDE { return m_provider->isAttachmentSupported(); }
bool isTagSupported() const Q_DECL_OVERRIDE { return m_provider->isTagSupported(); }
bool isReadOnly() const Q_DECL_OVERRIDE { return true; }
QSharedPointer<File> getFile() const Q_DECL_OVERRIDE { return m_provider->getFile(); }
private:
QSharedPointer<BufferProvider> m_provider;
};
} // namespace vnotex
#endif // URLBASEDBUFFERPROVIDER_H
================================================
FILE: src/core/buffermgr.cpp
================================================
#include "buffermgr.h"
#include <QDebug>
#include <QUrl>
#include "configmgr.h"
#include "externalfile.h"
#include "notebookmgr.h"
#include "sessionconfig.h"
#include "vnotex.h"
#include <buffer/buffer.h>
#include <buffer/filebufferprovider.h>
#include <buffer/filetypehelper.h>
#include <buffer/markdownbufferfactory.h>
#include <buffer/mindmapbufferfactory.h>
#include <buffer/nodebufferprovider.h>
#include <buffer/pdfbufferfactory.h>
#include <buffer/textbufferfactory.h>
#include <notebook/node.h>
#include <utils/processutils.h>
#include <utils/widgetutils.h>
#include "fileopenparameters.h"
using namespace vnotex;
QMap<QString, QString> BufferMgr::s_suffixToFileType;
BufferMgr::BufferMgr(QObject *p_parent) : QObject(p_parent) {}
BufferMgr::~BufferMgr() { Q_ASSERT(m_buffers.isEmpty()); }
void BufferMgr::init() { initBufferServer(); }
void BufferMgr::initBufferServer() {
m_bufferServer.reset(new NameBasedServer<IBufferFactory>);
const auto &helper = FileTypeHelper::getInst();
// Markdown.
auto markdownFactory = QSharedPointer<MarkdownBufferFactory>::create();
m_bufferServer->registerItem(helper.getFileType(FileType::Markdown).m_typeName, markdownFactory);
// Text.
auto textFactory = QSharedPointer<TextBufferFactory>::create();
m_bufferServer->registerItem(helper.getFileType(FileType::Text).m_typeName, textFactory);
// Pdf.
auto pdfFactory = QSharedPointer<PdfBufferFactory>::create();
m_bufferServer->registerItem(helper.getFileType(FileType::Pdf).m_typeName, pdfFactory);
// MindMap.
auto mindMapFactory = QSharedPointer<MindMapBufferFactory>::create();
m_bufferServer->registerItem(helper.getFileType(FileType::MindMap).m_typeName, mindMapFactory);
}
void BufferMgr::open(Node *p_node, const QSharedPointer<FileOpenParameters> &p_paras) {
if (!p_node) {
return;
}
if (p_node->isContainer()) {
return;
}
if (!p_node->checkExists()) {
auto msg = QStringLiteral("Failed to open node that does not exist (%1)")
.arg(p_node->fetchAbsolutePath());
qWarning() << msg;
VNoteX::getInst().showStatusMessageShort(msg);
return;
}
const auto nodePath = p_node->fetchAbsolutePath();
auto fileType = p_paras->m_fileType;
if (fileType.isEmpty()) {
// Check if we need to open it with external program by default according to the suffix.
fileType = findFileTypeByFile(nodePath);
if (openWithExternalProgram(nodePath, fileType)) {
return;
}
}
auto buffer = findBuffer(p_node);
if (!buffer || !isSameTypeBuffer(buffer, fileType)) {
auto nodeFile = p_node->getContentFile();
Q_ASSERT(nodeFile);
if (fileType.isEmpty()) {
fileType = nodeFile->getContentType().m_typeName;
} else if (fileType != nodeFile->getContentType().m_typeName) {
nodeFile->setContentType(FileTypeHelper::getInst().getFileTypeByName(fileType).m_type);
}
auto factory = m_bufferServer->getItem(fileType);
if (!factory) {
// No factory to open this file type.
qInfo() << "file will be opened by default program" << nodePath;
WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(nodePath));
return;
}
BufferParameters paras;
paras.m_provider.reset(new NodeBufferProvider(p_node->sharedFromThis(), nodeFile));
buffer = factory->createBuffer(paras, this);
addBuffer(buffer);
}
Q_ASSERT(buffer);
emit bufferRequested(buffer, p_paras);
}
void BufferMgr::open(const QString &p_filePath, const QSharedPointer<FileOpenParameters> &p_paras) {
if (p_filePath.isEmpty()) {
return;
}
// Check if it is requested to open with external program.
if (openWithExternalProgram(p_filePath, p_paras->m_fileType)) {
return;
}
QFileInfo finfo(p_filePath);
if (!finfo.exists()) {
auto msg = QStringLiteral("Failed to open file that does not exist (%1)").arg(p_filePath);
qWarning() << msg;
VNoteX::getInst().showStatusMessageShort(msg);
WidgetUtils::openUrlByDesktop(QUrl::fromUserInput(p_filePath));
return;
}
// Check if it is an internal node or not.
auto node = VNoteX::getInst().getNotebookMgr().loadNodeByPath(p_filePath);
if (node) {
if (node->hasContent()) {
open(node.data(), p_paras);
return;
} else {
// Folder node. Currently just locate to it.
emit VNoteX::getInst().locateNodeRequested(node.data());
return;
}
}
if (finfo.isDir()) {
WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(p_filePath));
return;
}
auto fileType = p_paras->m_fileType;
if (fileType.isEmpty()) {
// Check if we need to open it with external program by default according to the suffix.
fileType = findFileTypeByFile(p_filePath);
if (openWithExternalProgram(p_filePath, fileType)) {
return;
}
}
auto buffer = findBuffer(p_filePath);
if (!buffer || !isSameTypeBuffer(buffer, fileType)) {
// Open it as external file.
auto externalFile = QSharedPointer<ExternalFile>::create(p_filePath);
if (fileType.isEmpty()) {
fileType = externalFile->getContentType().m_typeName;
} else if (fileType != externalFile->getContentType().m_typeName) {
externalFile->setContentType(FileTypeHelper::getInst().getFileTypeByName(fileType).m_type);
}
auto factory = m_bufferServer->getItem(fileType);
if (!factory) {
// No factory to open this file type.
qInfo() << "file will be opened by default program" << p_filePath;
WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(p_filePath));
return;
}
BufferParameters paras;
paras.m_provider.reset(
new FileBufferProvider(externalFile, p_paras->m_nodeAttachedTo, p_paras->m_readOnly));
buffer = factory->createBuffer(paras, this);
addBuffer(buffer);
}
Q_ASSERT(buffer);
emit bufferRequested(buffer, p_paras);
}
Buffer *BufferMgr::findBuffer(const Node *p_node) const {
auto it = std::find_if(m_buffers.constBegin(), m_buffers.constEnd(),
[p_node](const Buffer *p_buffer) { return p_buffer->match(p_node); });
if (it != m_buffers.constEnd()) {
return *it;
}
return nullptr;
}
Buffer *BufferMgr::findBuffer(const QString &p_filePath) const {
auto it =
std::find_if(m_buffers.constBegin(), m_buffers.constEnd(),
[p_filePath](const Buffer *p_buffer) { return p_buffer->match(p_filePath); });
if (it != m_buffers.constEnd()) {
return *it;
}
return nullptr;
}
void BufferMgr::addBuffer(Buffer *p_buffer) {
m_buffers.push_back(p_buffer);
connect(p_buffer, &Buffer::attachedViewWindowEmpty, this, [this, p_buffer]() {
qDebug() << "delete buffer without attached view window" << p_buffer->getName();
m_buffers.removeAll(p_buffer);
p_buffer->close();
p_buffer->deleteLater();
});
}
bool BufferMgr::openWithExternalProgram(const QString &p_filePath, const QString &p_name) const {
if (p_name.isEmpty()) {
return false;
}
if (p_name == FileTypeHelper::s_systemDefaultProgram) {
// Open it by system default program.
qInfo() << "file will be opened by default program" << p_filePath;
WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(p_filePath));
return true;
}
if (auto pro = ConfigMgr::getInst().getSessionConfig().findExternalProgram(p_name)) {
const auto command = pro->fetchCommand(p_filePath);
qDebug() << "external program" << command;
if (!command.isEmpty()) {
ProcessUtils::startDetached(command);
}
return true;
}
return false;
}
bool BufferMgr::isSameTypeBuffer(const Buffer *p_buffer, const QString &p_typeName) const {
if (p_typeName.isEmpty()) {
return true;
}
auto factory = m_bufferServer->getItem(p_typeName);
Q_ASSERT(factory);
if (factory) {
return factory->isBufferCreatedByFactory(p_buffer);
}
return true;
}
void BufferMgr::updateSuffixToFileType(
const QVector<CoreConfig::FileTypeSuffix> &p_fileTypeSuffixes) {
s_suffixToFileType.clear();
for (const auto &fts : p_fileTypeSuffixes) {
for (const auto &suf : fts.m_suffixes) {
auto it = s_suffixToFileType.find(suf);
if (it != s_suffixToFileType.end()) {
qWarning() << "suffix conflicts for file types" << fts.m_name << it.value();
it.value() = fts.m_name;
} else {
s_suffixToFileType.insert(suf, fts.m_name);
}
}
}
}
QString BufferMgr::findFileTypeByFile(const QString &p_filePath) {
QFileInfo fi(p_filePath);
auto suffix = fi.suffix().toLower();
auto it = s_suffixToFileType.find(suffix);
if (it != s_suffixToFileType.end()) {
return it.value();
} else {
return QString();
}
}
================================================
FILE: src/core/buffermgr.h
================================================
#ifndef BUFFERMGR_H
#define BUFFERMGR_H
#include <QMap>
#include <QObject>
#include <QScopedPointer>
#include <QSharedPointer>
#include <QVector>
#include "coreconfig.h"
#include "namebasedserver.h"
namespace vnotex {
class IBufferFactory;
class Node;
class Buffer;
struct FileOpenParameters;
class BufferMgr : public QObject {
Q_OBJECT
public:
explicit BufferMgr(QObject *p_parent = nullptr);
~BufferMgr();
void init();
public slots:
void open(Node *p_node, const QSharedPointer<FileOpenParameters> &p_paras);
void open(const QString &p_filePath, const QSharedPointer<FileOpenParameters> &p_paras);
static void updateSuffixToFileType(const QVector<CoreConfig::FileTypeSuffix> &p_fileTypeSuffixes);
signals:
void bufferRequested(Buffer *p_buffer, const QSharedPointer<FileOpenParameters> &p_paras);
private:
void initBufferServer();
Buffer *findBuffer(const Node *p_node) const;
Buffer *findBuffer(const QString &p_filePath) const;
void addBuffer(Buffer *p_buffer);
bool openWithExternalProgram(const QString &p_filePath, const QString &p_name) const;
bool isSameTypeBuffer(const Buffer *p_buffer, const QString &p_typeName) const;
static QString findFileTypeByFile(const QString &p_filePath);
QSharedPointer<NameBasedServer<IBufferFactory>> m_bufferServer;
// Managed by QObject.
QVector<Buffer *> m_buffers;
// Mapping from suffix to file type or external program name.
static QMap<QString, QString> s_suffixToFileType;
};
} // namespace vnotex
#endif // BUFFERMGR_H
================================================
FILE: src/core/clipboarddata.cpp
================================================
#include "clipboarddata.h"
#include <QJsonArray>
#include <QJsonDocument>
#include "exception.h"
using namespace vnotex;
const QString NodeClipboardDataItem::c_notebookId = "notebook_id";
const QString NodeClipboardDataItem::c_nodePath = "node_path";
NodeClipboardDataItem::NodeClipboardDataItem() {}
NodeClipboardDataItem::NodeClipboardDataItem(ID p_notebookId, const QString &p_nodePath)
: m_notebookId(p_notebookId), m_nodeRelativePath(p_nodePath) {}
QJsonObject NodeClipboardDataItem::toJson() const {
QJsonObject jobj;
jobj[c_notebookId] = QString::number(m_notebookId);
jobj[c_nodePath] = m_nodeRelativePath;
return jobj;
}
void NodeClipboardDataItem::fromJson(const QJsonObject &p_jobj) {
Q_ASSERT(p_jobj.contains(c_notebookId) && p_jobj.contains(c_nodePath));
auto idRet = stringToID(p_jobj[c_notebookId].toString());
Q_ASSERT(idRet.first);
m_notebookId = idRet.second;
m_nodeRelativePath = p_jobj[c_nodePath].toString();
}
const QString ClipboardData::c_instanceId = "instance_id";
const QString ClipboardData::c_action = "action";
const QString ClipboardData::c_data = "data";
ClipboardData::ClipboardData() {}
ClipboardData::ClipboardData(ID p_instanceId, Action p_action)
: m_instanceId(p_instanceId), m_action(p_action) {}
void ClipboardData::fromJson(const QJsonObject &p_jobj) {
clear();
if (!p_jobj.contains(c_instanceId) || !p_jobj.contains(c_action) || !p_jobj.contains(c_data)) {
Exception::throwOne(
Exception::Type::InvalidArgument,
QStringLiteral("fail to parse ClipboardData from json (%1)").arg(p_jobj.keys().join(',')));
return;
}
auto idRet = stringToID(p_jobj[c_instanceId].toString());
if (!idRet.first) {
Exception::throwOne(
Exception::Type::InvalidArgument,
QStringLiteral("fail to parse ClipboardData from json (%1)").arg(p_jobj.keys().join(',')));
return;
}
m_instanceId = idRet.second;
int act = p_jobj[c_action].toInt(Action::Invalid);
m_action = intToAction(act);
if (m_action == Action::Invalid) {
Exception::throwOne(
Exception::Type::InvalidArgument,
QStringLiteral("fail to parse ClipboardData from json (%1)").arg(p_jobj.keys().join(',')));
return;
}
const auto itemArr = p_jobj[c_data].toArray();
for (int i = 0; i < itemArr.size(); ++i) {
auto dataItem = createClipboardDataItem(m_action);
dataItem->fromJson(itemArr[i].toObject());
m_data.push_back(dataItem);
}
}
QJsonObject ClipboardData::toJson() const {
QJsonObject jobj;
jobj[c_instanceId] = QString::number(m_instanceId);
jobj[c_action] = static_cast<int>(m_action);
QJsonArray data;
for (const auto &item : m_data) {
data.append(item->toJson());
}
jobj[c_data] = data;
return jobj;
}
ClipboardData::Action ClipboardData::intToAction(int p_act) const {
Action act = Action::Invalid;
if (p_act >= Action::CopyNode && p_act < Action::Invalid) {
act = static_cast<Action>(p_act);
}
return act;
}
void ClipboardData::clear() {
m_instanceId = 0;
m_action = Action::Invalid;
m_data.clear();
}
QSharedPointer<ClipboardDataItem> ClipboardData::createClipboardDataItem(Action p_act) {
switch (p_act) {
case Action::CopyNode:
case Action::MoveNode:
return QSharedPointer<NodeClipboardDataItem>::create();
case Action::Invalid:
Q_ASSERT(false);
return nullptr;
}
return nullptr;
}
void ClipboardData::addItem(const QSharedPointer<ClipboardDataItem> &p_item) {
Q_ASSERT(p_item);
m_data.push_back(p_item);
}
QString ClipboardData::toJsonText() const {
auto data = QJsonDocument(toJson()).toJson();
return QString::fromUtf8(data);
}
QSharedPointer<ClipboardData> ClipboardData::fromJsonText(const QString &p_json) {
if (p_json.isEmpty()) {
return nullptr;
}
auto data = QSharedPointer<ClipboardData>::create();
auto jobj = QJsonDocument::fromJson(p_json.toUtf8()).object();
if (jobj.isEmpty()) {
return nullptr;
}
try {
data->fromJson(jobj);
} catch (Exception &p_e) {
Q_UNUSED(p_e);
return nullptr;
}
return data;
}
const QVector<QSharedPointer<ClipboardDataItem>> &ClipboardData::getData() const { return m_data; }
ID ClipboardData::getInstanceId() const { return m_instanceId; }
ClipboardData::Action ClipboardData::getAction() const { return m_action; }
================================================
FILE: src/core/clipboarddata.h
================================================
#ifndef CLIPBOARDDATA_H
#define CLIPBOARDDATA_H
#include <QJsonObject>
#include <QSharedPointer>
#include <QVector>
#include "global.h"
namespace vnotex {
class ClipboardDataItem {
public:
virtual ~ClipboardDataItem() {}
virtual QJsonObject toJson() const = 0;
virtual void fromJson(const QJsonObject &p_jobj) = 0;
};
class NodeClipboardDataItem : public ClipboardDataItem {
public:
NodeClipboardDataItem();
NodeClipboardDataItem(ID p_notebookId, const QString &p_nodePath);
QJsonObject toJson() const Q_DECL_OVERRIDE;
void fromJson(const QJsonObject &p_jobj) Q_DECL_OVERRIDE;
ID m_notebookId;
QString m_nodeRelativePath;
private:
static const QString c_notebookId;
static const QString c_nodePath;
};
class ClipboardData {
public:
enum Action { CopyNode, MoveNode, Invalid };
ClipboardData();
ClipboardData(ID p_instanceId, Action p_action);
ID getInstanceId() const;
ClipboardData::Action getAction() const;
const QVector<QSharedPointer<ClipboardDataItem>> &getData() const;
void addItem(const QSharedPointer<ClipboardDataItem> &p_item);
QString toJsonText() const;
static QSharedPointer<ClipboardData> fromJsonText(const QString &p_json);
private:
void fromJson(const QJsonObject &p_jobj);
QJsonObject toJson() const;
ClipboardData::Action intToAction(int p_act) const;
void clear();
static QSharedPointer<ClipboardDataItem> createClipboardDataItem(Action p_act);
ID m_instanceId = 0;
Action m_action = Action::Invalid;
QVector<QSharedPointer<ClipboardDataItem>> m_data;
static const QString c_instanceId;
static const QString c_action;
static const QString c_data;
};
} // namespace vnotex
#endif // CLIPBOARDDATA_H
================================================
FILE: src/core/configmgr.cpp
================================================
#include "configmgr.h"
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QFileInfo>
#include <QJsonDocument>
#include <QPixmap>
#include <QResource>
#include <QScopeGuard>
#include <QScopedPointer>
#include <QSplashScreen>
#include <QStandardPaths>
#include <QTemporaryDir>
#include "exception.h"
#include <utils/fileutils.h>
#include <utils/pathutils.h>
#include <utils/utils.h>
#include "coreconfig.h"
#include "mainconfig.h"
#include "sessionconfig.h"
using namespace vnotex;
#ifndef QT_NO_DEBUG
// #define VX_DEBUG_WEB
#endif
const QString ConfigMgr::c_orgName = "VNote";
const QString ConfigMgr::c_appName = "VNote";
const QString ConfigMgr::c_configFileName = "vnotex.json";
const QString ConfigMgr::c_sessionFileName = "session.json";
const QString ConfigMgr::c_userFilesFolder = "user_files";
const QString ConfigMgr::c_appFilesFolder = "vnotex_files";
const QJsonObject &ConfigMgr::Settings::getJson() const { return m_jobj; }
QSharedPointer<ConfigMgr::Settings> ConfigMgr::Settings::fromFile(const QString &p_jsonFilePath) {
if (!QFileInfo::exists(p_jsonFilePath)) {
qWarning() << "return empty Settings from non-exist config file" << p_jsonFilePath;
return QSharedPointer<Settings>::create();
}
auto bytes = FileUtils::readFile(p_jsonFilePath);
return QSharedPointer<Settings>::create(QJsonDocument::fromJson(bytes).object());
}
void ConfigMgr::Settings::writeToFile(const QString &p_jsonFilePath) const {
FileUtils::writeFile(p_jsonFilePath, QJsonDocument(this->m_jobj).toJson());
}
ConfigMgr::ConfigMgr(bool p_isUnitTest, QObject *p_parent)
: QObject(p_parent), m_config(new MainConfig(this)), m_sessionConfig(new SessionConfig(this)) {
if (p_isUnitTest) {
m_dirForUnitTest.reset(new QTemporaryDir());
if (!m_dirForUnitTest->isValid()) {
qWarning() << "failed to init ConfigMgr for UnitTest";
return;
}
QDir dir(m_dirForUnitTest->path());
dir.mkdir(c_appFilesFolder);
dir.mkdir(c_userFilesFolder);
m_appConfigFolderPath = m_dirForUnitTest->filePath(c_appFilesFolder);
m_userConfigFolderPath = m_dirForUnitTest->filePath(c_userFilesFolder);
return;
}
locateConfigFolder();
bool needUpdate = checkAppConfig();
if (needUpdate) {
checkUserConfig();
}
m_config->init();
m_sessionConfig->init();
}
ConfigMgr::~ConfigMgr() {}
ConfigMgr &ConfigMgr::getInst(bool p_isUnitTest) {
static ConfigMgr inst(p_isUnitTest);
return inst;
}
void ConfigMgr::initForUnitTest() { getInst(true); }
void ConfigMgr::locateConfigFolder() {
const auto appDirPath = getApplicationDirPath();
qInfo() << "app folder" << appDirPath;
// Check app config.
{
QString folderPath(appDirPath + '/' + c_appFilesFolder);
if (QDir(folderPath).exists()) {
// Config folder in app/.
m_appConfigFolderPath = PathUtils::cleanPath(folderPath);
} else {
m_appConfigFolderPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
}
}
// Check user config.
{
QString folderPath(appDirPath + '/' + c_userFilesFolder);
if (QDir(folderPath).exists()) {
// Config folder in app/.
m_userConfigFolderPath = PathUtils::cleanPath(folderPath);
} else {
m_userConfigFolderPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
// Make sure it exists.
QDir dir(m_userConfigFolderPath);
dir.mkpath(m_userConfigFolderPath);
}
}
Q_ASSERT(m_appConfigFolderPath != m_userConfigFolderPath);
qInfo() << "app config folder" << m_appConfigFolderPath;
qInfo() << "user config folder" << m_userConfigFolderPath;
}
bool ConfigMgr::checkAppConfig() {
bool needUpdate = false;
QDir appConfigDir(m_appConfigFolderPath);
if (!appConfigDir.exists()) {
needUpdate = true;
appConfigDir.mkpath(m_appConfigFolderPath);
} else {
if (!appConfigDir.exists(c_configFileName)) {
needUpdate = true;
} else {
// Check version of config file.
auto defaultSettings = getSettings(Source::Default);
auto appSettings = getSettings(Source::App);
auto defaultVersion = MainConfig::getVersion(defaultSettings->getJson());
auto appVersion = MainConfig::getVersion(appSettings->getJson());
if (defaultVersion != appVersion) {
qInfo() << "new version" << appVersion << defaultVersion;
needUpdate = true;
}
}
if (needUpdate) {
FileUtils::removeDir(m_appConfigFolderPath);
// Wait for the OS delete the folder.
Utils::sleepWait(1000);
appConfigDir.mkpath(m_appConfigFolderPath);
}
}
const auto mainConfigFilePath = appConfigDir.filePath(c_configFileName);
#ifndef VX_DEBUG_WEB
if (!needUpdate) {
return false;
}
#endif
qInfo() << "update app config files in" << m_appConfigFolderPath;
Q_ASSERT(appConfigDir.exists());
QPixmap pixmap(":/vnotex/data/core/logo/vnote.png");
QScopedPointer<QSplashScreen> splash(new QSplashScreen(pixmap));
splash->show();
// Load extra data.
splash->showMessage("Loading extra resource data");
const QString extraRcc("app:vnote_extra.rcc");
bool ret = QResource::registerResource(extraRcc);
if (!ret) {
Exception::throwOne(Exception::Type::FailToReadFile,
QStringLiteral("failed to register resource file %1").arg(extraRcc));
}
auto cleanup = qScopeGuard([extraRcc]() { QResource::unregisterResource(extraRcc); });
const QString extraDataRoot(QStringLiteral(":/vnotex/data/extra"));
#ifdef VX_DEBUG_WEB
if (!needUpdate) {
// Always update main config file and web folder.
qDebug() << "forced to update main config file and web folder for debugging";
splash->showMessage("update main config file and web folder for debugging");
// Cancel the read-only permission of the main config file.
QFile::setPermissions(mainConfigFilePath, QFile::WriteUser);
FileUtils::removeFile(mainConfigFilePath);
FileUtils::removeDir(appConfigDir.filePath(QStringLiteral("web")));
// Wait for the OS delete the folder.
Utils::sleepWait(1000);
FileUtils::copyFile(getConfigFilePath(Source::Default), mainConfigFilePath);
FileUtils::copyDir(extraDataRoot + QStringLiteral("/web"),
appConfigDir.filePath(QStringLiteral("web")));
return false;
}
#else
Q_ASSERT(needUpdate);
#endif
// Copy themes.
qApp->processEvents();
splash->showMessage("Copying themes");
FileUtils::copyDir(extraDataRoot + QStringLiteral("/themes"),
appConfigDir.filePath(QStringLiteral("themes")));
// Copy tasks.
qApp->processEvents();
splash->showMessage("Copying tasks");
FileUtils::copyDir(extraDataRoot + QStringLiteral("/tasks"),
appConfigDir.filePath(QStringLiteral("tasks")));
// Copy docs.
qApp->processEvents();
splash->showMessage("Copying docs");
FileUtils::copyDir(extraDataRoot + QStringLiteral("/docs"),
appConfigDir.filePath(QStringLiteral("docs")));
// Copy syntax-highlighting.
qApp->processEvents();
splash->showMessage("Copying syntax-highlighting");
FileUtils::copyDir(extraDataRoot + QStringLiteral("/syntax-highlighting"),
appConfigDir.filePath(QStringLiteral("syntax-highlighting")));
// Copy web.
qApp->processEvents();
splash->showMessage("Copying web");
FileUtils::copyDir(extraDataRoot + QStringLiteral("/web"),
appConfigDir.filePath(QStringLiteral("web")));
// Copy dicts.
qApp->processEvents();
splash->showMessage("Copying dicts");
FileUtils::copyDir(extraDataRoot + QStringLiteral("/dicts"),
appConfigDir.filePath(QStringLiteral("dicts")));
// Main config file.
FileUtils::copyFile(getConfigFilePath(Source::Default), appConfigDir.filePath(c_configFileName));
return needUpdate;
}
void ConfigMgr::checkUserConfig() {
// Mainly check if the user config and session config is read-only.
const auto userFile = getConfigFilePath(Source::User);
if (QFileInfo::exists(userFile)) {
if (!(QFile::permissions(userFile) & QFile::WriteUser)) {
qDebug() << "make user config file writable" << userFile;
QFile::setPermissions(userFile, QFile::WriteUser);
}
}
const auto sessionFile = getConfigFilePath(Source::Session);
if (QFileInfo::exists(sessionFile)) {
if (!(QFile::permissions(sessionFile) & QFile::WriteUser)) {
qDebug() << "make session config file writable" << sessionFile;
QFile::setPermissions(sessionFile, QFile::WriteUser);
}
}
}
QString ConfigMgr::getConfigFilePath(Source p_src) const {
QString configPath;
switch (p_src) {
case Source::Default:
configPath = getDefaultConfigFilePath();
break;
case Source::App:
configPath = m_appConfigFolderPath + QLatin1Char('/') + c_configFileName;
break;
case Source::User: {
configPath = m_userConfigFolderPath + QLatin1Char('/') + c_configFileName;
break;
}
case Source::Session: {
configPath = m_userConfigFolderPath + QLatin1Char('/') + c_sessionFileName;
break;
}
default:
Q_ASSERT(false);
}
return configPath;
}
QString ConfigMgr::getDefaultConfigFilePath() {
return QStringLiteral(":/vnotex/data/core/") + c_configFileName;
}
QSharedPointer<ConfigMgr::Settings> ConfigMgr::getSettings(Source p_src) const {
return ConfigMgr::Settings::fromFile(getConfigFilePath(p_src));
}
void ConfigMgr::writeUserSettings(const
gitextract_d9rrwo1t/
├── .clang-format
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── workflows/
│ ├── ci-linux.yml
│ ├── ci-macos.yml
│ └── ci-win.yml
├── .gitignore
├── .gitmodules
├── AGENTS.md
├── CMakeLists.txt
├── COPYING.LESSER
├── README.md
├── README_zh_CN.md
├── SECURITY.md
├── changes.md
├── libs/
│ └── CMakeLists.txt
├── package/
│ ├── QtWebEngineProcess.entitlements.xml
│ ├── entitlements.xml
│ ├── lgpl-3.0.rtf
│ └── qt.conf
├── privacy_policy.md
├── scripts/
│ ├── init.cmd
│ ├── init.sh
│ ├── pre-commit
│ └── update_version.py
├── src/
│ ├── CMakeLists.txt
│ ├── CPackLinuxDeployQt.cmake.in
│ ├── CPackMacDeployQt.cmake.in
│ ├── Packaging.cmake
│ ├── application.cpp
│ ├── application.h
│ ├── commandlineoptions.cpp
│ ├── commandlineoptions.h
│ ├── core/
│ │ ├── CMakeLists.txt
│ │ ├── buffer/
│ │ │ ├── buffer.cpp
│ │ │ ├── buffer.h
│ │ │ ├── bufferprovider.cpp
│ │ │ ├── bufferprovider.h
│ │ │ ├── filebufferprovider.cpp
│ │ │ ├── filebufferprovider.h
│ │ │ ├── filetypehelper.cpp
│ │ │ ├── filetypehelper.h
│ │ │ ├── ibufferfactory.h
│ │ │ ├── markdownbuffer.cpp
│ │ │ ├── markdownbuffer.h
│ │ │ ├── markdownbufferfactory.cpp
│ │ │ ├── markdownbufferfactory.h
│ │ │ ├── mindmapbuffer.cpp
│ │ │ ├── mindmapbuffer.h
│ │ │ ├── mindmapbufferfactory.cpp
│ │ │ ├── mindmapbufferfactory.h
│ │ │ ├── nodebufferprovider.cpp
│ │ │ ├── nodebufferprovider.h
│ │ │ ├── pdfbuffer.cpp
│ │ │ ├── pdfbuffer.h
│ │ │ ├── pdfbufferfactory.cpp
│ │ │ ├── pdfbufferfactory.h
│ │ │ ├── textbuffer.cpp
│ │ │ ├── textbuffer.h
│ │ │ ├── textbufferfactory.cpp
│ │ │ ├── textbufferfactory.h
│ │ │ └── urlbasedbufferprovider.h
│ │ ├── buffermgr.cpp
│ │ ├── buffermgr.h
│ │ ├── clipboarddata.cpp
│ │ ├── clipboarddata.h
│ │ ├── configmgr.cpp
│ │ ├── configmgr.h
│ │ ├── coreconfig.cpp
│ │ ├── coreconfig.h
│ │ ├── editorconfig.cpp
│ │ ├── editorconfig.h
│ │ ├── events.h
│ │ ├── exception.h
│ │ ├── externalfile.cpp
│ │ ├── externalfile.h
│ │ ├── file.cpp
│ │ ├── file.h
│ │ ├── filelocator.h
│ │ ├── fileopenparameters.h
│ │ ├── global.cpp
│ │ ├── global.h
│ │ ├── historyitem.cpp
│ │ ├── historyitem.h
│ │ ├── historymgr.cpp
│ │ ├── historymgr.h
│ │ ├── htmltemplatehelper.cpp
│ │ ├── htmltemplatehelper.h
│ │ ├── iconfig.h
│ │ ├── location.h
│ │ ├── logger.cpp
│ │ ├── logger.h
│ │ ├── mainconfig.cpp
│ │ ├── mainconfig.h
│ │ ├── markdowneditorconfig.cpp
│ │ ├── markdowneditorconfig.h
│ │ ├── mindmapeditorconfig.cpp
│ │ ├── mindmapeditorconfig.h
│ │ ├── namebasedserver.h
│ │ ├── noncopyable.h
│ │ ├── notebook/
│ │ │ ├── bundlenotebook.cpp
│ │ │ ├── bundlenotebook.h
│ │ │ ├── bundlenotebookfactory.cpp
│ │ │ ├── bundlenotebookfactory.h
│ │ │ ├── externalnode.cpp
│ │ │ ├── externalnode.h
│ │ │ ├── historyi.h
│ │ │ ├── inotebookfactory.h
│ │ │ ├── node.cpp
│ │ │ ├── node.h
│ │ │ ├── nodeparameters.cpp
│ │ │ ├── nodeparameters.h
│ │ │ ├── nodevisual.cpp
│ │ │ ├── nodevisual.h
│ │ │ ├── notebook.cpp
│ │ │ ├── notebook.h
│ │ │ ├── notebookdatabaseaccess.cpp
│ │ │ ├── notebookdatabaseaccess.h
│ │ │ ├── notebookparameters.cpp
│ │ │ ├── notebookparameters.h
│ │ │ ├── notebooktagmgr.cpp
│ │ │ ├── notebooktagmgr.h
│ │ │ ├── tag.cpp
│ │ │ ├── tag.h
│ │ │ ├── tagi.h
│ │ │ ├── vxnode.cpp
│ │ │ ├── vxnode.h
│ │ │ ├── vxnodefile.cpp
│ │ │ └── vxnodefile.h
│ │ ├── notebookbackend/
│ │ │ ├── inotebookbackend.cpp
│ │ │ ├── inotebookbackend.h
│ │ │ ├── inotebookbackendfactory.h
│ │ │ ├── localnotebookbackend.cpp
│ │ │ ├── localnotebookbackend.h
│ │ │ ├── localnotebookbackendfactory.cpp
│ │ │ └── localnotebookbackendfactory.h
│ │ ├── notebookconfigmgr/
│ │ │ ├── bundlenotebookconfigmgr.cpp
│ │ │ ├── bundlenotebookconfigmgr.h
│ │ │ ├── inotebookconfigmgr.cpp
│ │ │ ├── inotebookconfigmgr.h
│ │ │ ├── inotebookconfigmgrfactory.h
│ │ │ ├── notebookconfig.cpp
│ │ │ ├── notebookconfig.h
│ │ │ ├── vxnodeconfig.cpp
│ │ │ ├── vxnodeconfig.h
│ │ │ ├── vxnotebookconfigmgr.cpp
│ │ │ ├── vxnotebookconfigmgr.h
│ │ │ ├── vxnotebookconfigmgrfactory.cpp
│ │ │ └── vxnotebookconfigmgrfactory.h
│ │ ├── notebookmgr.cpp
│ │ ├── notebookmgr.h
│ │ ├── pdfviewerconfig.cpp
│ │ ├── pdfviewerconfig.h
│ │ ├── quickaccesshelper.cpp
│ │ ├── quickaccesshelper.h
│ │ ├── sessionconfig.cpp
│ │ ├── sessionconfig.h
│ │ ├── singleinstanceguard.cpp
│ │ ├── singleinstanceguard.h
│ │ ├── templatemgr.cpp
│ │ ├── templatemgr.h
│ │ ├── texteditorconfig.cpp
│ │ ├── texteditorconfig.h
│ │ ├── theme.cpp
│ │ ├── theme.h
│ │ ├── thememgr.cpp
│ │ ├── thememgr.h
│ │ ├── versioncontroller/
│ │ │ ├── dummyversioncontroller.cpp
│ │ │ ├── dummyversioncontroller.h
│ │ │ ├── dummyversioncontrollerfactory.cpp
│ │ │ ├── dummyversioncontrollerfactory.h
│ │ │ ├── iversioncontroller.h
│ │ │ ├── iversioncontrollerfactory.h
│ │ │ ├── versioncontrollerserver.cpp
│ │ │ └── versioncontrollerserver.h
│ │ ├── vnotex.cpp
│ │ ├── vnotex.h
│ │ ├── webresource.h
│ │ ├── widgetconfig.cpp
│ │ └── widgetconfig.h
│ ├── data/
│ │ ├── core/
│ │ │ ├── Info.plist
│ │ │ ├── core.qrc
│ │ │ ├── fun.vnote.app.VNote.metainfo.xml
│ │ │ ├── icons/
│ │ │ │ ├── vnote.icns
│ │ │ │ └── vnote.rc
│ │ │ ├── translations/
│ │ │ │ ├── qdialogbuttonbox_zh_CN.qm
│ │ │ │ ├── qtbase_ja.qm
│ │ │ │ ├── qtbase_zh_CN.qm
│ │ │ │ ├── qtv_ja.qm
│ │ │ │ ├── qtv_zh_CN.qm
│ │ │ │ ├── qwebengine_zh_CN.qm
│ │ │ │ ├── vnote_ja.ts
│ │ │ │ └── vnote_zh_CN.ts
│ │ │ ├── vnote.desktop
│ │ │ └── vnotex.json
│ │ └── extra/
│ │ ├── dicts/
│ │ │ ├── en_US.aff
│ │ │ └── en_US.dic
│ │ ├── docs/
│ │ │ ├── en/
│ │ │ │ ├── about_vnotex.txt
│ │ │ │ ├── external_programs.md
│ │ │ │ ├── features_tips.txt
│ │ │ │ ├── get_started.txt
│ │ │ │ ├── markdown_guide.md
│ │ │ │ ├── shortcuts.md
│ │ │ │ └── welcome.md
│ │ │ └── zh_CN/
│ │ │ ├── about_vnotex.txt
│ │ │ ├── external_programs.md
│ │ │ ├── features_tips.txt
│ │ │ ├── get_started.txt
│ │ │ ├── markdown_guide.md
│ │ │ ├── shortcuts.md
│ │ │ └── welcome.md
│ │ ├── extra.qrc
│ │ ├── syntax-highlighting/
│ │ │ ├── syntax/
│ │ │ │ ├── 4dos.xml
│ │ │ │ ├── abap.xml
│ │ │ │ ├── abc.xml
│ │ │ │ ├── actionscript.xml
│ │ │ │ ├── ada.xml
│ │ │ │ ├── adblock.xml
│ │ │ │ ├── agda.xml
│ │ │ │ ├── ahdl.xml
│ │ │ │ ├── ahk.xml
│ │ │ │ ├── alert.xml
│ │ │ │ ├── ample.xml
│ │ │ │ ├── ansforth94.xml
│ │ │ │ ├── ansic89.xml
│ │ │ │ ├── ansys.xml
│ │ │ │ ├── apache.xml
│ │ │ │ ├── apparmor.xml
│ │ │ │ ├── asciidoc.xml
│ │ │ │ ├── asm-avr.xml
│ │ │ │ ├── asm-dsp56k.xml
│ │ │ │ ├── asm-m68k.xml
│ │ │ │ ├── asm6502.xml
│ │ │ │ ├── asn1.xml
│ │ │ │ ├── asp.xml
│ │ │ │ ├── awk.xml
│ │ │ │ ├── bash.xml
│ │ │ │ ├── bibtex.xml
│ │ │ │ ├── bitbake.xml
│ │ │ │ ├── bmethod.xml
│ │ │ │ ├── boo.xml
│ │ │ │ ├── brightscript.xml
│ │ │ │ ├── c.xml
│ │ │ │ ├── carto-css.xml
│ │ │ │ ├── ccss.xml
│ │ │ │ ├── cg.xml
│ │ │ │ ├── cgis.xml
│ │ │ │ ├── changelog.xml
│ │ │ │ ├── chicken.xml
│ │ │ │ ├── cil.xml
│ │ │ │ ├── cisco.xml
│ │ │ │ ├── clipper.xml
│ │ │ │ ├── clist.xml
│ │ │ │ ├── clojure.xml
│ │ │ │ ├── cmake.xml
│ │ │ │ ├── coffee.xml
│ │ │ │ ├── coldfusion.xml
│ │ │ │ ├── commonlisp.xml
│ │ │ │ ├── component-pascal.xml
│ │ │ │ ├── context.xml
│ │ │ │ ├── cpp.xml
│ │ │ │ ├── crk.xml
│ │ │ │ ├── cs.xml
│ │ │ │ ├── css.xml
│ │ │ │ ├── cubescript.xml
│ │ │ │ ├── cue.xml
│ │ │ │ ├── curry.xml
│ │ │ │ ├── d.xml
│ │ │ │ ├── debianchangelog.xml
│ │ │ │ ├── debiancontrol.xml
│ │ │ │ ├── desktop.xml
│ │ │ │ ├── diff.xml
│ │ │ │ ├── djangotemplate.xml
│ │ │ │ ├── dockerfile.xml
│ │ │ │ ├── dosbat.xml
│ │ │ │ ├── dot.xml
│ │ │ │ ├── doxyfile.xml
│ │ │ │ ├── doxygen.xml
│ │ │ │ ├── doxygenlua.xml
│ │ │ │ ├── dtd.xml
│ │ │ │ ├── e.xml
│ │ │ │ ├── eiffel.xml
│ │ │ │ ├── elixir.xml
│ │ │ │ ├── elm.xml
│ │ │ │ ├── email.xml
│ │ │ │ ├── erlang.xml
│ │ │ │ ├── euphoria.xml
│ │ │ │ ├── fasm.xml
│ │ │ │ ├── fastq.xml
│ │ │ │ ├── ferite.xml
│ │ │ │ ├── fgl-4gl.xml
│ │ │ │ ├── fgl-per.xml
│ │ │ │ ├── fish.xml
│ │ │ │ ├── flatbuffers.xml
│ │ │ │ ├── fortran-fixed.xml
│ │ │ │ ├── fortran-free.xml
│ │ │ │ ├── freebasic.xml
│ │ │ │ ├── fsharp.xml
│ │ │ │ ├── fstab.xml
│ │ │ │ ├── ftl.xml
│ │ │ │ ├── gap.xml
│ │ │ │ ├── gcc.xml
│ │ │ │ ├── gcode.xml
│ │ │ │ ├── gdb-bt.xml
│ │ │ │ ├── gdb.xml
│ │ │ │ ├── gdbinit.xml
│ │ │ │ ├── gdl.xml
│ │ │ │ ├── gettext.xml
│ │ │ │ ├── git-ignore.xml
│ │ │ │ ├── git-rebase.xml
│ │ │ │ ├── gitolite.xml
│ │ │ │ ├── glosstex.xml
│ │ │ │ ├── glsl.xml
│ │ │ │ ├── gnuassembler.xml
│ │ │ │ ├── gnuplot.xml
│ │ │ │ ├── go.xml
│ │ │ │ ├── grammar.xml
│ │ │ │ ├── groovy.xml
│ │ │ │ ├── haml.xml
│ │ │ │ ├── hamlet.xml
│ │ │ │ ├── haskell.xml
│ │ │ │ ├── haxe.xml
│ │ │ │ ├── html.xml
│ │ │ │ ├── hunspell-aff.xml
│ │ │ │ ├── hunspell-dat.xml
│ │ │ │ ├── hunspell-dic.xml
│ │ │ │ ├── hunspell-idx.xml
│ │ │ │ ├── idconsole.xml
│ │ │ │ ├── idl.xml
│ │ │ │ ├── ilerpg.xml
│ │ │ │ ├── inform.xml
│ │ │ │ ├── ini.xml
│ │ │ │ ├── intelhex.xml
│ │ │ │ ├── isocpp.xml
│ │ │ │ ├── j.xml
│ │ │ │ ├── jam.xml
│ │ │ │ ├── java.xml
│ │ │ │ ├── javadoc.xml
│ │ │ │ ├── javascript-react.xml
│ │ │ │ ├── javascript.xml
│ │ │ │ ├── jcl.xml
│ │ │ │ ├── jira.xml
│ │ │ │ ├── json.xml
│ │ │ │ ├── jsp.xml
│ │ │ │ ├── julia.xml
│ │ │ │ ├── k.xml
│ │ │ │ ├── kbasic.xml
│ │ │ │ ├── kconfig.xml
│ │ │ │ ├── kdesrc-buildrc.xml
│ │ │ │ ├── kotlin.xml
│ │ │ │ ├── latex.xml
│ │ │ │ ├── ld.xml
│ │ │ │ ├── ldif.xml
│ │ │ │ ├── less.xml
│ │ │ │ ├── lex.xml
│ │ │ │ ├── lilypond.xml
│ │ │ │ ├── literate-curry.xml
│ │ │ │ ├── literate-haskell.xml
│ │ │ │ ├── logcat.xml
│ │ │ │ ├── logtalk.xml
│ │ │ │ ├── lpc.xml
│ │ │ │ ├── lsl.xml
│ │ │ │ ├── lua.xml
│ │ │ │ ├── m3u.xml
│ │ │ │ ├── m4.xml
│ │ │ │ ├── mab.xml
│ │ │ │ ├── magma.xml
│ │ │ │ ├── makefile.xml
│ │ │ │ ├── mako.xml
│ │ │ │ ├── mandoc.xml
│ │ │ │ ├── markdown.xml
│ │ │ │ ├── mason.xml
│ │ │ │ ├── mathematica.xml
│ │ │ │ ├── matlab.xml
│ │ │ │ ├── maxima.xml
│ │ │ │ ├── mediawiki.xml
│ │ │ │ ├── mel.xml
│ │ │ │ ├── mergetagtext.xml
│ │ │ │ ├── meson.xml
│ │ │ │ ├── metafont.xml
│ │ │ │ ├── metamath.xml
│ │ │ │ ├── mib.xml
│ │ │ │ ├── mips.xml
│ │ │ │ ├── modelica.xml
│ │ │ │ ├── modelines.xml
│ │ │ │ ├── modula-2-iso-only.xml
│ │ │ │ ├── modula-2-pim-only.xml
│ │ │ │ ├── modula-2-r10-only.xml
│ │ │ │ ├── modula-2.xml
│ │ │ │ ├── monobasic.xml
│ │ │ │ ├── mup.xml
│ │ │ │ ├── mustache.xml
│ │ │ │ ├── nagios.xml
│ │ │ │ ├── nasm.xml
│ │ │ │ ├── nemerle.xml
│ │ │ │ ├── nesc.xml
│ │ │ │ ├── ninja.xml
│ │ │ │ ├── noweb.xml
│ │ │ │ ├── nsis.xml
│ │ │ │ ├── objectivec.xml
│ │ │ │ ├── objectivecpp.xml
│ │ │ │ ├── ocaml.xml
│ │ │ │ ├── ocamllex.xml
│ │ │ │ ├── ocamlyacc.xml
│ │ │ │ ├── octave.xml
│ │ │ │ ├── oors.xml
│ │ │ │ ├── opal.xml
│ │ │ │ ├── opencl.xml
│ │ │ │ ├── openscad.xml
│ │ │ │ ├── pango.xml
│ │ │ │ ├── pascal.xml
│ │ │ │ ├── perl.xml
│ │ │ │ ├── pgn.xml
│ │ │ │ ├── php.xml
│ │ │ │ ├── picsrc.xml
│ │ │ │ ├── pig.xml
│ │ │ │ ├── pike.xml
│ │ │ │ ├── pli.xml
│ │ │ │ ├── ply.xml
│ │ │ │ ├── pony.xml
│ │ │ │ ├── postscript.xml
│ │ │ │ ├── povray.xml
│ │ │ │ ├── powershell.xml
│ │ │ │ ├── ppd.xml
│ │ │ │ ├── praat.xml
│ │ │ │ ├── progress.xml
│ │ │ │ ├── prolog.xml
│ │ │ │ ├── protobuf.xml
│ │ │ │ ├── pug.xml
│ │ │ │ ├── puppet.xml
│ │ │ │ ├── purebasic.xml
│ │ │ │ ├── python.xml
│ │ │ │ ├── q.xml
│ │ │ │ ├── qdocconf.xml
│ │ │ │ ├── qmake.xml
│ │ │ │ ├── qml.xml
│ │ │ │ ├── r.xml
│ │ │ │ ├── rapidq.xml
│ │ │ │ ├── rdoc.xml
│ │ │ │ ├── relaxng.xml
│ │ │ │ ├── relaxngcompact.xml
│ │ │ │ ├── replicode.xml
│ │ │ │ ├── rest.xml
│ │ │ │ ├── rexx.xml
│ │ │ │ ├── rhtml.xml
│ │ │ │ ├── rib.xml
│ │ │ │ ├── rmarkdown.xml
│ │ │ │ ├── roff.xml
│ │ │ │ ├── rpmspec.xml
│ │ │ │ ├── rsiidl.xml
│ │ │ │ ├── rtf.xml
│ │ │ │ ├── ruby.xml
│ │ │ │ ├── rust.xml
│ │ │ │ ├── sass.xml
│ │ │ │ ├── sather.xml
│ │ │ │ ├── scala.xml
│ │ │ │ ├── scheme.xml
│ │ │ │ ├── sci.xml
│ │ │ │ ├── scss.xml
│ │ │ │ ├── sed.xml
│ │ │ │ ├── selinux-cil.xml
│ │ │ │ ├── selinux-fc.xml
│ │ │ │ ├── selinux.xml
│ │ │ │ ├── sgml.xml
│ │ │ │ ├── sieve.xml
│ │ │ │ ├── sisu.xml
│ │ │ │ ├── smali.xml
│ │ │ │ ├── sml.xml
│ │ │ │ ├── spice.xml
│ │ │ │ ├── sql-mysql.xml
│ │ │ │ ├── sql-oracle.xml
│ │ │ │ ├── sql-postgresql.xml
│ │ │ │ ├── sql.xml
│ │ │ │ ├── stan.xml
│ │ │ │ ├── stata.xml
│ │ │ │ ├── stl.xml
│ │ │ │ ├── systemc.xml
│ │ │ │ ├── systemverilog.xml
│ │ │ │ ├── tads3.xml
│ │ │ │ ├── taskjuggler.xml
│ │ │ │ ├── tcl.xml
│ │ │ │ ├── tcsh.xml
│ │ │ │ ├── template-toolkit.xml
│ │ │ │ ├── texinfo.xml
│ │ │ │ ├── textile.xml
│ │ │ │ ├── tibasic.xml
│ │ │ │ ├── tiger.xml
│ │ │ │ ├── toml.xml
│ │ │ │ ├── txt2tags.xml
│ │ │ │ ├── typescript-react.xml
│ │ │ │ ├── typescript.xml
│ │ │ │ ├── uscript.xml
│ │ │ │ ├── vala.xml
│ │ │ │ ├── valgrind-suppression.xml
│ │ │ │ ├── varnish.xml
│ │ │ │ ├── varnish4.xml
│ │ │ │ ├── varnishcc.xml
│ │ │ │ ├── varnishcc4.xml
│ │ │ │ ├── varnishtest.xml
│ │ │ │ ├── varnishtest4.xml
│ │ │ │ ├── vcard.xml
│ │ │ │ ├── velocity.xml
│ │ │ │ ├── vera.xml
│ │ │ │ ├── verilog.xml
│ │ │ │ ├── vhdl.xml
│ │ │ │ ├── vrml.xml
│ │ │ │ ├── wavefront-obj.xml
│ │ │ │ ├── wayland-trace.xml
│ │ │ │ ├── winehq.xml
│ │ │ │ ├── wml.xml
│ │ │ │ ├── xharbour.xml
│ │ │ │ ├── xml.xml
│ │ │ │ ├── xmldebug.xml
│ │ │ │ ├── xonotic-console.xml
│ │ │ │ ├── xorg.xml
│ │ │ │ ├── xslt.xml
│ │ │ │ ├── xul.xml
│ │ │ │ ├── yacas.xml
│ │ │ │ ├── yacc.xml
│ │ │ │ ├── yaml.xml
│ │ │ │ ├── yang.xml
│ │ │ │ ├── zonnon.xml
│ │ │ │ └── zsh.xml
│ │ │ └── themes/
│ │ │ ├── breeze-dark.theme
│ │ │ ├── default.theme
│ │ │ ├── markdown-breeze-dark.theme
│ │ │ ├── markdown-default.theme
│ │ │ ├── printing.theme
│ │ │ ├── solarized-dark.theme
│ │ │ ├── solarized-light.theme
│ │ │ └── vscode-dark.theme
│ │ ├── tasks/
│ │ │ └── git/
│ │ │ └── git.json
│ │ ├── themes/
│ │ │ ├── moonlight/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ ├── native/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ ├── pure/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ ├── solarized-dark/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ ├── solarized-light/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ ├── vscode-dark/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── readme.md
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ ├── vue-dark/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ ├── vue-light/
│ │ │ │ ├── highlight.css
│ │ │ │ ├── interface.qss
│ │ │ │ ├── palette.json
│ │ │ │ ├── text-editor.theme
│ │ │ │ └── web.css
│ │ │ └── vx-idea/
│ │ │ ├── README.md
│ │ │ ├── code_highlight/
│ │ │ │ ├── highlight-dark.css
│ │ │ │ └── highlight-one-light.css
│ │ │ ├── highlight.css
│ │ │ ├── interface.qss
│ │ │ ├── palette.json
│ │ │ ├── text-editor.theme
│ │ │ ├── tips_components/
│ │ │ │ └── sytle.css
│ │ │ └── web.css
│ │ └── web/
│ │ ├── css/
│ │ │ ├── exportglobalstyles.css
│ │ │ ├── globalstyles.css
│ │ │ ├── imageviewer.css
│ │ │ ├── markdownit.css
│ │ │ ├── outline.css
│ │ │ └── user.css
│ │ ├── js/
│ │ │ ├── computed-style-to-inline-style.js
│ │ │ ├── crosscopy.js
│ │ │ ├── easyaccess.js
│ │ │ ├── eventemitter.js
│ │ │ ├── flowchart.js/
│ │ │ │ └── README.md
│ │ │ ├── flowchartjs.js
│ │ │ ├── graphcache.js
│ │ │ ├── graphpreviewer.js
│ │ │ ├── graphrenderer.js
│ │ │ ├── graphviz.js
│ │ │ ├── imageviewer.js
│ │ │ ├── lrucache.js
│ │ │ ├── mark.js/
│ │ │ │ └── README.md
│ │ │ ├── markdown-it/
│ │ │ │ ├── README.md
│ │ │ │ ├── markdown-it-front-matter.js
│ │ │ │ ├── markdown-it-implicit-figure.js
│ │ │ │ ├── markdown-it-inject-linenumbers.js
│ │ │ │ ├── markdown-it-task-lists.js
│ │ │ │ ├── markdown-it-texmath.js
│ │ │ │ ├── markdown-it-xss.js
│ │ │ │ ├── markdownItAnchor.umd.js
│ │ │ │ └── markdownItTocDoneRight.umd.js
│ │ │ ├── markdownit.js
│ │ │ ├── markdownviewer.js
│ │ │ ├── markdownviewercore.js
│ │ │ ├── markjs.js
│ │ │ ├── mathjax.js
│ │ │ ├── mermaid/
│ │ │ │ └── README.md
│ │ │ ├── mermaid.js
│ │ │ ├── mindmap/
│ │ │ │ ├── core/
│ │ │ │ │ └── mindmap-core.js
│ │ │ │ ├── features/
│ │ │ │ │ ├── link-handler/
│ │ │ │ │ │ └── link-handler.js
│ │ │ │ │ └── outline/
│ │ │ │ │ └── outline.js
│ │ │ │ ├── lib/
│ │ │ │ │ └── mind-elixir/
│ │ │ │ │ ├── MindElixir.js
│ │ │ │ │ └── README.md
│ │ │ │ └── mindmap-readme.md
│ │ │ ├── mindmapeditor.js
│ │ │ ├── nodelinemapper.js
│ │ │ ├── outline.js
│ │ │ ├── plantuml/
│ │ │ │ ├── README.md
│ │ │ │ └── synchro2.js
│ │ │ ├── plantuml.js
│ │ │ ├── prism/
│ │ │ │ └── README.md
│ │ │ ├── prism.js
│ │ │ ├── qwebchannel.js
│ │ │ ├── svg-to-image.js
│ │ │ ├── turndown/
│ │ │ │ ├── README.md
│ │ │ │ ├── turndown-plugin-gfm.js
│ │ │ │ └── turndown.js
│ │ │ ├── turndown.js
│ │ │ ├── utils.js
│ │ │ ├── viz.js/
│ │ │ │ ├── README.md
│ │ │ │ ├── lite.render.js
│ │ │ │ └── viz.js
│ │ │ ├── vxcore.js
│ │ │ ├── vxworker.js
│ │ │ ├── wavedrom/
│ │ │ │ ├── README.md
│ │ │ │ └── theme-default.js
│ │ │ └── wavedrom.js
│ │ ├── markdown-export-template.html
│ │ ├── markdown-viewer-template.html
│ │ ├── mindmap-editor-template.html
│ │ └── pdf.js/
│ │ ├── README.md
│ │ ├── pdfviewer.css
│ │ ├── pdfviewer.js
│ │ ├── pdfviewercore.js
│ │ └── web/
│ │ ├── cmaps/
│ │ │ ├── 78-EUC-H.bcmap
│ │ │ ├── 78-EUC-V.bcmap
│ │ │ ├── 78-H.bcmap
│ │ │ ├── 78-RKSJ-H.bcmap
│ │ │ ├── 78-RKSJ-V.bcmap
│ │ │ ├── 78-V.bcmap
│ │ │ ├── 78ms-RKSJ-H.bcmap
│ │ │ ├── 78ms-RKSJ-V.bcmap
│ │ │ ├── 83pv-RKSJ-H.bcmap
│ │ │ ├── 90ms-RKSJ-H.bcmap
│ │ │ ├── 90ms-RKSJ-V.bcmap
│ │ │ ├── 90msp-RKSJ-H.bcmap
│ │ │ ├── 90msp-RKSJ-V.bcmap
│ │ │ ├── 90pv-RKSJ-H.bcmap
│ │ │ ├── 90pv-RKSJ-V.bcmap
│ │ │ ├── Add-H.bcmap
│ │ │ ├── Add-RKSJ-H.bcmap
│ │ │ ├── Add-RKSJ-V.bcmap
│ │ │ ├── Add-V.bcmap
│ │ │ ├── Adobe-CNS1-0.bcmap
│ │ │ ├── Adobe-CNS1-1.bcmap
│ │ │ ├── Adobe-CNS1-2.bcmap
│ │ │ ├── Adobe-CNS1-3.bcmap
│ │ │ ├── Adobe-CNS1-4.bcmap
│ │ │ ├── Adobe-CNS1-5.bcmap
│ │ │ ├── Adobe-CNS1-6.bcmap
│ │ │ ├── Adobe-CNS1-UCS2.bcmap
│ │ │ ├── Adobe-GB1-0.bcmap
│ │ │ ├── Adobe-GB1-1.bcmap
│ │ │ ├── Adobe-GB1-2.bcmap
│ │ │ ├── Adobe-GB1-3.bcmap
│ │ │ ├── Adobe-GB1-4.bcmap
│ │ │ ├── Adobe-GB1-5.bcmap
│ │ │ ├── Adobe-GB1-UCS2.bcmap
│ │ │ ├── Adobe-Japan1-0.bcmap
│ │ │ ├── Adobe-Japan1-1.bcmap
│ │ │ ├── Adobe-Japan1-2.bcmap
│ │ │ ├── Adobe-Japan1-3.bcmap
│ │ │ ├── Adobe-Japan1-4.bcmap
│ │ │ ├── Adobe-Japan1-5.bcmap
│ │ │ ├── Adobe-Japan1-6.bcmap
│ │ │ ├── Adobe-Japan1-UCS2.bcmap
│ │ │ ├── Adobe-Korea1-0.bcmap
│ │ │ ├── Adobe-Korea1-1.bcmap
│ │ │ ├── Adobe-Korea1-2.bcmap
│ │ │ ├── Adobe-Korea1-UCS2.bcmap
│ │ │ ├── B5-H.bcmap
│ │ │ ├── B5-V.bcmap
│ │ │ ├── B5pc-H.bcmap
│ │ │ ├── B5pc-V.bcmap
│ │ │ ├── CNS-EUC-H.bcmap
│ │ │ ├── CNS-EUC-V.bcmap
│ │ │ ├── CNS1-H.bcmap
│ │ │ ├── CNS1-V.bcmap
│ │ │ ├── CNS2-H.bcmap
│ │ │ ├── CNS2-V.bcmap
│ │ │ ├── ETHK-B5-H.bcmap
│ │ │ ├── ETHK-B5-V.bcmap
│ │ │ ├── ETen-B5-H.bcmap
│ │ │ ├── ETen-B5-V.bcmap
│ │ │ ├── ETenms-B5-H.bcmap
│ │ │ ├── ETenms-B5-V.bcmap
│ │ │ ├── EUC-H.bcmap
│ │ │ ├── EUC-V.bcmap
│ │ │ ├── Ext-H.bcmap
│ │ │ ├── Ext-RKSJ-H.bcmap
│ │ │ ├── Ext-RKSJ-V.bcmap
│ │ │ ├── Ext-V.bcmap
│ │ │ ├── GB-EUC-H.bcmap
│ │ │ ├── GB-EUC-V.bcmap
│ │ │ ├── GB-H.bcmap
│ │ │ ├── GB-V.bcmap
│ │ │ ├── GBK-EUC-H.bcmap
│ │ │ ├── GBK-EUC-V.bcmap
│ │ │ ├── GBK2K-H.bcmap
│ │ │ ├── GBK2K-V.bcmap
│ │ │ ├── GBKp-EUC-H.bcmap
│ │ │ ├── GBKp-EUC-V.bcmap
│ │ │ ├── GBT-EUC-H.bcmap
│ │ │ ├── GBT-EUC-V.bcmap
│ │ │ ├── GBT-H.bcmap
│ │ │ ├── GBT-V.bcmap
│ │ │ ├── GBTpc-EUC-H.bcmap
│ │ │ ├── GBTpc-EUC-V.bcmap
│ │ │ ├── GBpc-EUC-H.bcmap
│ │ │ ├── GBpc-EUC-V.bcmap
│ │ │ ├── H.bcmap
│ │ │ ├── HKdla-B5-H.bcmap
│ │ │ ├── HKdla-B5-V.bcmap
│ │ │ ├── HKdlb-B5-H.bcmap
│ │ │ ├── HKdlb-B5-V.bcmap
│ │ │ ├── HKgccs-B5-H.bcmap
│ │ │ ├── HKgccs-B5-V.bcmap
│ │ │ ├── HKm314-B5-H.bcmap
│ │ │ ├── HKm314-B5-V.bcmap
│ │ │ ├── HKm471-B5-H.bcmap
│ │ │ ├── HKm471-B5-V.bcmap
│ │ │ ├── HKscs-B5-H.bcmap
│ │ │ ├── HKscs-B5-V.bcmap
│ │ │ ├── Hankaku.bcmap
│ │ │ ├── Hiragana.bcmap
│ │ │ ├── KSC-EUC-H.bcmap
│ │ │ ├── KSC-EUC-V.bcmap
│ │ │ ├── KSC-H.bcmap
│ │ │ ├── KSC-Johab-H.bcmap
│ │ │ ├── KSC-Johab-V.bcmap
│ │ │ ├── KSC-V.bcmap
│ │ │ ├── KSCms-UHC-H.bcmap
│ │ │ ├── KSCms-UHC-HW-H.bcmap
│ │ │ ├── KSCms-UHC-HW-V.bcmap
│ │ │ ├── KSCms-UHC-V.bcmap
│ │ │ ├── KSCpc-EUC-H.bcmap
│ │ │ ├── KSCpc-EUC-V.bcmap
│ │ │ ├── Katakana.bcmap
│ │ │ ├── LICENSE
│ │ │ ├── NWP-H.bcmap
│ │ │ ├── NWP-V.bcmap
│ │ │ ├── RKSJ-H.bcmap
│ │ │ ├── RKSJ-V.bcmap
│ │ │ ├── Roman.bcmap
│ │ │ ├── UniCNS-UCS2-H.bcmap
│ │ │ ├── UniCNS-UCS2-V.bcmap
│ │ │ ├── UniCNS-UTF16-H.bcmap
│ │ │ ├── UniCNS-UTF16-V.bcmap
│ │ │ ├── UniCNS-UTF32-H.bcmap
│ │ │ ├── UniCNS-UTF32-V.bcmap
│ │ │ ├── UniCNS-UTF8-H.bcmap
│ │ │ ├── UniCNS-UTF8-V.bcmap
│ │ │ ├── UniGB-UCS2-H.bcmap
│ │ │ ├── UniGB-UCS2-V.bcmap
│ │ │ ├── UniGB-UTF16-H.bcmap
│ │ │ ├── UniGB-UTF16-V.bcmap
│ │ │ ├── UniGB-UTF32-H.bcmap
│ │ │ ├── UniGB-UTF32-V.bcmap
│ │ │ ├── UniGB-UTF8-H.bcmap
│ │ │ ├── UniGB-UTF8-V.bcmap
│ │ │ ├── UniJIS-UCS2-H.bcmap
│ │ │ ├── UniJIS-UCS2-HW-H.bcmap
│ │ │ ├── UniJIS-UCS2-HW-V.bcmap
│ │ │ ├── UniJIS-UCS2-V.bcmap
│ │ │ ├── UniJIS-UTF16-H.bcmap
│ │ │ ├── UniJIS-UTF16-V.bcmap
│ │ │ ├── UniJIS-UTF32-H.bcmap
│ │ │ ├── UniJIS-UTF32-V.bcmap
│ │ │ ├── UniJIS-UTF8-H.bcmap
│ │ │ ├── UniJIS-UTF8-V.bcmap
│ │ │ ├── UniJIS2004-UTF16-H.bcmap
│ │ │ ├── UniJIS2004-UTF16-V.bcmap
│ │ │ ├── UniJIS2004-UTF32-H.bcmap
│ │ │ ├── UniJIS2004-UTF32-V.bcmap
│ │ │ ├── UniJIS2004-UTF8-H.bcmap
│ │ │ ├── UniJIS2004-UTF8-V.bcmap
│ │ │ ├── UniJISPro-UCS2-HW-V.bcmap
│ │ │ ├── UniJISPro-UCS2-V.bcmap
│ │ │ ├── UniJISPro-UTF8-V.bcmap
│ │ │ ├── UniJISX0213-UTF32-H.bcmap
│ │ │ ├── UniJISX0213-UTF32-V.bcmap
│ │ │ ├── UniJISX02132004-UTF32-H.bcmap
│ │ │ ├── UniJISX02132004-UTF32-V.bcmap
│ │ │ ├── UniKS-UCS2-H.bcmap
│ │ │ ├── UniKS-UCS2-V.bcmap
│ │ │ ├── UniKS-UTF16-H.bcmap
│ │ │ ├── UniKS-UTF16-V.bcmap
│ │ │ ├── UniKS-UTF32-H.bcmap
│ │ │ ├── UniKS-UTF32-V.bcmap
│ │ │ ├── UniKS-UTF8-H.bcmap
│ │ │ ├── UniKS-UTF8-V.bcmap
│ │ │ ├── V.bcmap
│ │ │ └── WP-Symbol.bcmap
│ │ ├── locale/
│ │ │ ├── br/
│ │ │ │ └── viewer.properties
│ │ │ ├── ca/
│ │ │ │ └── viewer.properties
│ │ │ ├── de/
│ │ │ │ └── viewer.properties
│ │ │ ├── en-CA/
│ │ │ │ └── viewer.properties
│ │ │ ├── en-GB/
│ │ │ │ └── viewer.properties
│ │ │ ├── en-US/
│ │ │ │ └── viewer.properties
│ │ │ ├── eu/
│ │ │ │ └── viewer.properties
│ │ │ ├── fr/
│ │ │ │ └── viewer.properties
│ │ │ ├── ja/
│ │ │ │ └── viewer.properties
│ │ │ ├── locale.properties
│ │ │ ├── ru/
│ │ │ │ └── viewer.properties
│ │ │ ├── uk/
│ │ │ │ └── viewer.properties
│ │ │ ├── zh-CN/
│ │ │ │ └── viewer.properties
│ │ │ └── zh-TW/
│ │ │ └── viewer.properties
│ │ ├── pdf-viewer-template.html
│ │ ├── viewer.css
│ │ └── viewer.js
│ ├── export/
│ │ ├── CMakeLists.txt
│ │ ├── exportdata.cpp
│ │ ├── exportdata.h
│ │ ├── exporter.cpp
│ │ ├── exporter.h
│ │ ├── webviewexporter.cpp
│ │ └── webviewexporter.h
│ ├── fakeaccessible.cpp
│ ├── fakeaccessible.h
│ ├── imagehost/
│ │ ├── CMakeLists.txt
│ │ ├── giteeimagehost.cpp
│ │ ├── giteeimagehost.h
│ │ ├── githubimagehost.cpp
│ │ ├── githubimagehost.h
│ │ ├── imagehost.cpp
│ │ ├── imagehost.h
│ │ ├── imagehostmgr.cpp
│ │ ├── imagehostmgr.h
│ │ ├── imagehostutils.cpp
│ │ ├── imagehostutils.h
│ │ ├── repoimagehost.cpp
│ │ └── repoimagehost.h
│ ├── main.cpp
│ ├── search/
│ │ ├── CMakeLists.txt
│ │ ├── filesearchengine.cpp
│ │ ├── filesearchengine.h
│ │ ├── isearchengine.h
│ │ ├── isearchinfoprovider.h
│ │ ├── searchdata.cpp
│ │ ├── searchdata.h
│ │ ├── searcher.cpp
│ │ ├── searcher.h
│ │ ├── searchhelper.cpp
│ │ ├── searchhelper.h
│ │ ├── searchresultitem.cpp
│ │ ├── searchresultitem.h
│ │ ├── searchtoken.cpp
│ │ └── searchtoken.h
│ ├── snippet/
│ │ ├── CMakeLists.txt
│ │ ├── dynamicsnippet.cpp
│ │ ├── dynamicsnippet.h
│ │ ├── snippet.cpp
│ │ ├── snippet.h
│ │ ├── snippetmgr.cpp
│ │ └── snippetmgr.h
│ ├── task/
│ │ ├── CMakeLists.txt
│ │ ├── shellexecution.cpp
│ │ ├── shellexecution.h
│ │ ├── task.cpp
│ │ ├── task.h
│ │ ├── taskmgr.cpp
│ │ ├── taskmgr.h
│ │ ├── taskvariablemgr.cpp
│ │ └── taskvariablemgr.h
│ ├── unitedentry/
│ │ ├── CMakeLists.txt
│ │ ├── entrypopup.cpp
│ │ ├── entrypopup.h
│ │ ├── entrywidgetfactory.cpp
│ │ ├── entrywidgetfactory.h
│ │ ├── findunitedentry.cpp
│ │ ├── findunitedentry.h
│ │ ├── helpunitedentry.cpp
│ │ ├── helpunitedentry.h
│ │ ├── iunitedentry.cpp
│ │ ├── iunitedentry.h
│ │ ├── unitedentry.cpp
│ │ ├── unitedentry.h
│ │ ├── unitedentryalias.cpp
│ │ ├── unitedentryalias.h
│ │ ├── unitedentryhelper.cpp
│ │ ├── unitedentryhelper.h
│ │ ├── unitedentrymgr.cpp
│ │ └── unitedentrymgr.h
│ ├── utils/
│ │ ├── CMakeLists.txt
│ │ ├── asyncworker.cpp
│ │ ├── asyncworker.h
│ │ ├── callbackpool.cpp
│ │ ├── callbackpool.h
│ │ ├── clipboardutils.cpp
│ │ ├── clipboardutils.h
│ │ ├── contentmediautils.cpp
│ │ ├── contentmediautils.h
│ │ ├── docsutils.cpp
│ │ ├── docsutils.h
│ │ ├── fileutils.cpp
│ │ ├── fileutils.h
│ │ ├── htmlutils.cpp
│ │ ├── htmlutils.h
│ │ ├── iconutils.cpp
│ │ ├── iconutils.h
│ │ ├── imageutils.cpp
│ │ ├── imageutils.h
│ │ ├── pathutils.cpp
│ │ ├── pathutils.h
│ │ ├── printutils.cpp
│ │ ├── printutils.h
│ │ ├── processutils.cpp
│ │ ├── processutils.h
│ │ ├── urldragdroputils.cpp
│ │ ├── urldragdroputils.h
│ │ ├── utils.cpp
│ │ ├── utils.h
│ │ ├── vxurlutils.cpp
│ │ ├── vxurlutils.h
│ │ ├── webutils.cpp
│ │ ├── webutils.h
│ │ ├── widgetutils.cpp
│ │ └── widgetutils.h
│ └── widgets/
│ ├── CMakeLists.txt
│ ├── attachmentdragdropareaindicator.cpp
│ ├── attachmentdragdropareaindicator.h
│ ├── attachmentpopup.cpp
│ ├── attachmentpopup.h
│ ├── biaction.cpp
│ ├── biaction.h
│ ├── buttonpopup.cpp
│ ├── buttonpopup.h
│ ├── combobox.cpp
│ ├── combobox.h
│ ├── consoleviewer.cpp
│ ├── consoleviewer.h
│ ├── dialogs/
│ │ ├── deleteconfirmdialog.cpp
│ │ ├── deleteconfirmdialog.h
│ │ ├── dialog.cpp
│ │ ├── dialog.h
│ │ ├── exportdialog.cpp
│ │ ├── exportdialog.h
│ │ ├── filepropertiesdialog.cpp
│ │ ├── filepropertiesdialog.h
│ │ ├── folderfilesfilterwidget.cpp
│ │ ├── folderfilesfilterwidget.h
│ │ ├── folderpropertiesdialog.cpp
│ │ ├── folderpropertiesdialog.h
│ │ ├── imageinsertdialog.cpp
│ │ ├── imageinsertdialog.h
│ │ ├── importfolderdialog.cpp
│ │ ├── importfolderdialog.h
│ │ ├── importfolderutils.cpp
│ │ ├── importfolderutils.h
│ │ ├── importnotebookdialog.cpp
│ │ ├── importnotebookdialog.h
│ │ ├── levellabelwithupbutton.cpp
│ │ ├── levellabelwithupbutton.h
│ │ ├── linkinsertdialog.cpp
│ │ ├── linkinsertdialog.h
│ │ ├── managenotebooksdialog.cpp
│ │ ├── managenotebooksdialog.h
│ │ ├── newfolderdialog.cpp
│ │ ├── newfolderdialog.h
│ │ ├── newnotebookdialog.cpp
│ │ ├── newnotebookdialog.h
│ │ ├── newnotebookfromfolderdialog.cpp
│ │ ├── newnotebookfromfolderdialog.h
│ │ ├── newnotedialog.cpp
│ │ ├── newnotedialog.h
│ │ ├── newsnippetdialog.cpp
│ │ ├── newsnippetdialog.h
│ │ ├── newtagdialog.cpp
│ │ ├── newtagdialog.h
│ │ ├── nodeinfowidget.cpp
│ │ ├── nodeinfowidget.h
│ │ ├── notebookinfowidget.cpp
│ │ ├── notebookinfowidget.h
│ │ ├── notepropertiesdialog.cpp
│ │ ├── notepropertiesdialog.h
│ │ ├── notetemplateselector.cpp
│ │ ├── notetemplateselector.h
│ │ ├── renametagdialog.cpp
│ │ ├── renametagdialog.h
│ │ ├── scrolldialog.cpp
│ │ ├── scrolldialog.h
│ │ ├── selectdialog.cpp
│ │ ├── selectdialog.h
│ │ ├── selectionitemwidget.cpp
│ │ ├── selectionitemwidget.h
│ │ ├── settings/
│ │ │ ├── appearancepage.cpp
│ │ │ ├── appearancepage.h
│ │ │ ├── editorpage.cpp
│ │ │ ├── editorpage.h
│ │ │ ├── fileassociationpage.cpp
│ │ │ ├── fileassociationpage.h
│ │ │ ├── generalpage.cpp
│ │ │ ├── generalpage.h
│ │ │ ├── imagehostpage.cpp
│ │ │ ├── imagehostpage.h
│ │ │ ├── markdowneditorpage.cpp
│ │ │ ├── markdowneditorpage.h
│ │ │ ├── miscpage.cpp
│ │ │ ├── miscpage.h
│ │ │ ├── newimagehostdialog.cpp
│ │ │ ├── newimagehostdialog.h
│ │ │ ├── notemanagementpage.cpp
│ │ │ ├── notemanagementpage.h
│ │ │ ├── quickaccesspage.cpp
│ │ │ ├── quickaccesspage.h
│ │ │ ├── settingsdialog.cpp
│ │ │ ├── settingsdialog.h
│ │ │ ├── settingspage.cpp
│ │ │ ├── settingspage.h
│ │ │ ├── texteditorpage.cpp
│ │ │ ├── texteditorpage.h
│ │ │ ├── themepage.cpp
│ │ │ ├── themepage.h
│ │ │ ├── vipage.cpp
│ │ │ └── vipage.h
│ │ ├── snippetinfowidget.cpp
│ │ ├── snippetinfowidget.h
│ │ ├── snippetpropertiesdialog.cpp
│ │ ├── snippetpropertiesdialog.h
│ │ ├── sortdialog.cpp
│ │ ├── sortdialog.h
│ │ ├── tableinsertdialog.cpp
│ │ ├── tableinsertdialog.h
│ │ ├── updater.cpp
│ │ ├── updater.h
│ │ ├── viewtagsdialog.cpp
│ │ └── viewtagsdialog.h
│ ├── dockwidgethelper.cpp
│ ├── dockwidgethelper.h
│ ├── dragdropareaindicator.cpp
│ ├── dragdropareaindicator.h
│ ├── editors/
│ │ ├── graphhelper.cpp
│ │ ├── graphhelper.h
│ │ ├── graphvizhelper.cpp
│ │ ├── graphvizhelper.h
│ │ ├── markdowneditor.cpp
│ │ ├── markdowneditor.h
│ │ ├── markdowntable.cpp
│ │ ├── markdowntable.h
│ │ ├── markdowntablehelper.cpp
│ │ ├── markdowntablehelper.h
│ │ ├── markdownviewer.cpp
│ │ ├── markdownviewer.h
│ │ ├── markdownvieweradapter.cpp
│ │ ├── markdownvieweradapter.h
│ │ ├── mindmapeditor.cpp
│ │ ├── mindmapeditor.h
│ │ ├── mindmapeditoradapter.cpp
│ │ ├── mindmapeditoradapter.h
│ │ ├── pdfviewer.cpp
│ │ ├── pdfviewer.h
│ │ ├── pdfvieweradapter.cpp
│ │ ├── pdfvieweradapter.h
│ │ ├── plantumlhelper.cpp
│ │ ├── plantumlhelper.h
│ │ ├── previewhelper.cpp
│ │ ├── previewhelper.h
│ │ ├── statuswidget.cpp
│ │ ├── statuswidget.h
│ │ ├── texteditor.cpp
│ │ ├── texteditor.h
│ │ ├── webviewadapter.cpp
│ │ └── webviewadapter.h
│ ├── editreaddiscardaction.cpp
│ ├── editreaddiscardaction.h
│ ├── filesystemviewer.cpp
│ ├── filesystemviewer.h
│ ├── findandreplacewidget.cpp
│ ├── findandreplacewidget.h
│ ├── floatingwidget.cpp
│ ├── floatingwidget.h
│ ├── framelessmainwindow/
│ │ ├── framelessmainwindow.cpp
│ │ ├── framelessmainwindow.h
│ │ ├── framelessmainwindowimpl.h
│ │ ├── framelessmainwindowlinux.cpp
│ │ ├── framelessmainwindowlinux.h
│ │ ├── framelessmainwindowwin.cpp
│ │ └── framelessmainwindowwin.h
│ ├── fullscreentoggleaction.cpp
│ ├── fullscreentoggleaction.h
│ ├── historypanel.cpp
│ ├── historypanel.h
│ ├── itemproxystyle.cpp
│ ├── itemproxystyle.h
│ ├── labelwithbuttonswidget.cpp
│ ├── labelwithbuttonswidget.h
│ ├── lineedit.cpp
│ ├── lineedit.h
│ ├── lineeditdelegate.cpp
│ ├── lineeditdelegate.h
│ ├── lineeditwithsnippet.cpp
│ ├── lineeditwithsnippet.h
│ ├── listwidget.cpp
│ ├── listwidget.h
│ ├── locationinputwithbrowsebutton.cpp
│ ├── locationinputwithbrowsebutton.h
│ ├── locationlist.cpp
│ ├── locationlist.h
│ ├── mainwindow.cpp
│ ├── mainwindow.h
│ ├── markdownviewwindow.cpp
│ ├── markdownviewwindow.h
│ ├── messageboxhelper.cpp
│ ├── messageboxhelper.h
│ ├── mindmapviewwindow.cpp
│ ├── mindmapviewwindow.h
│ ├── navigationmode.cpp
│ ├── navigationmode.h
│ ├── navigationmodemgr.cpp
│ ├── navigationmodemgr.h
│ ├── navigationmodewrapper.h
│ ├── notebookexplorer.cpp
│ ├── notebookexplorer.h
│ ├── notebookexplorersession.cpp
│ ├── notebookexplorersession.h
│ ├── notebooknodeexplorer.cpp
│ ├── notebooknodeexplorer.h
│ ├── notebookselector.cpp
│ ├── notebookselector.h
│ ├── outlinepopup.cpp
│ ├── outlinepopup.h
│ ├── outlineprovider.cpp
│ ├── outlineprovider.h
│ ├── outlineviewer.cpp
│ ├── outlineviewer.h
│ ├── pdfviewwindow.cpp
│ ├── pdfviewwindow.h
│ ├── propertydefs.cpp
│ ├── propertydefs.h
│ ├── qtreewidgetstatecache.h
│ ├── quickselector.cpp
│ ├── quickselector.h
│ ├── searchinfoprovider.cpp
│ ├── searchinfoprovider.h
│ ├── searchpanel.cpp
│ ├── searchpanel.h
│ ├── simplesegmenthighlighter.cpp
│ ├── simplesegmenthighlighter.h
│ ├── snippetpanel.cpp
│ ├── snippetpanel.h
│ ├── statusbarhelper.cpp
│ ├── statusbarhelper.h
│ ├── styleditemdelegate.cpp
│ ├── styleditemdelegate.h
│ ├── systemtrayhelper.cpp
│ ├── systemtrayhelper.h
│ ├── tagexplorer.cpp
│ ├── tagexplorer.h
│ ├── tagpopup.cpp
│ ├── tagpopup.h
│ ├── tagviewer.cpp
│ ├── tagviewer.h
│ ├── textviewwindow.cpp
│ ├── textviewwindow.h
│ ├── textviewwindowhelper.h
│ ├── titlebar.cpp
│ ├── titlebar.h
│ ├── titletoolbar.cpp
│ ├── titletoolbar.h
│ ├── toolbarhelper.cpp
│ ├── toolbarhelper.h
│ ├── toolbox.cpp
│ ├── toolbox.h
│ ├── treeview.cpp
│ ├── treeview.h
│ ├── treewidget.cpp
│ ├── treewidget.h
│ ├── treewidgetitem.cpp
│ ├── treewidgetitem.h
│ ├── viewarea.cpp
│ ├── viewarea.h
│ ├── viewareasession.cpp
│ ├── viewareasession.h
│ ├── viewsplit.cpp
│ ├── viewsplit.h
│ ├── viewwindow.cpp
│ ├── viewwindow.h
│ ├── viewwindowsession.cpp
│ ├── viewwindowsession.h
│ ├── viewwindowtoolbarhelper.cpp
│ ├── viewwindowtoolbarhelper.h
│ ├── webpage.cpp
│ ├── webpage.h
│ ├── webviewer.cpp
│ ├── webviewer.h
│ ├── widgetsfactory.cpp
│ ├── widgetsfactory.h
│ ├── windowspanel.cpp
│ ├── windowspanel.h
│ ├── windowsprovider.cpp
│ ├── windowsprovider.h
│ ├── wordcountpopup.cpp
│ └── wordcountpopup.h
└── tests/
├── CMakeLists.txt
├── test_core/
│ ├── CMakeLists.txt
│ ├── test_notebook/
│ │ ├── CMakeLists.txt
│ │ ├── dummynode.cpp
│ │ ├── dummynode.h
│ │ ├── dummynotebook.cpp
│ │ ├── dummynotebook.h
│ │ ├── test_notebook.cpp
│ │ ├── test_notebook.h
│ │ ├── testnotebookdatabase.cpp
│ │ └── testnotebookdatabase.h
│ └── test_theme/
│ ├── test_theme.cpp
│ └── test_theme.h
├── test_task/
│ ├── test_task.cpp
│ └── test_task.h
└── test_utils/
├── test_utils.cpp
└── test_utils.h
Showing preview only (457K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4877 symbols across 518 files)
FILE: src/application.h
function namespace (line 8) | namespace vnotex {
FILE: src/commandlineoptions.h
function class (line 6) | class CommandLineOptions {
FILE: src/core/buffer/buffer.cpp
function generateBufferID (line 18) | static vnotex::ID generateBufferID() {
function ViewWindow (line 63) | ViewWindow *Buffer::createViewWindow(const QSharedPointer<FileOpenParame...
function QString (line 78) | QString Buffer::getName() const { return m_provider->getName(); }
function QString (line 80) | QString Buffer::getPath() const { return m_provider->getPath(); }
function QString (line 82) | QString Buffer::getContentPath() const { return m_provider->getContentPa...
function QString (line 84) | QString Buffer::getResourcePath() const { return m_provider->getResource...
function ID (line 86) | ID Buffer::getId() const { return m_id; }
function QString (line 88) | const QString &Buffer::getContent() const {
function QString (line 224) | QString Buffer::getImageFolderPath() const {
function QString (line 228) | QString Buffer::insertImage(const QString &p_srcImagePath, const QString...
function QString (line 235) | QString Buffer::insertImage(const QImage &p_image, const QString &p_imag...
function QString (line 299) | QString Buffer::generateBackupFileHead() const {
function QString (line 354) | const QString &Buffer::getBackupFileOfPreviousSession() const {
function QString (line 358) | QString Buffer::readBackupFile(const QString &p_filePath) {
function QString (line 409) | QString Buffer::getAttachmentFolderPath() const {
function QStringList (line 414) | QStringList Buffer::addAttachment(const QString &p_destFolderPath, const...
function QString (line 427) | QString Buffer::newAttachmentFile(const QString &p_destFolderPath, const...
function QString (line 434) | QString Buffer::newAttachmentFolder(const QString &p_destFolderPath, con...
function QString (line 441) | QString Buffer::renameAttachment(const QString &p_path, const QString &p...
function Node (line 459) | Node *Buffer::getNode() const { return m_provider->getNode(); }
FILE: src/core/buffer/buffer.h
type FileOpenParameters (line 18) | struct FileOpenParameters
type BufferParameters (line 22) | struct BufferParameters {
type class (line 29) | enum class
type class (line 31) | enum class
type StateFlag (line 33) | enum StateFlag { Normal = 0, FileMissingOnDisk = 0x1, FileChangedOutside...
FILE: src/core/buffer/bufferprovider.cpp
function QDateTime (line 9) | QDateTime BufferProvider::getLastModifiedFromFile() const {
FILE: src/core/buffer/bufferprovider.h
function namespace (line 9) | namespace vnotex {
FILE: src/core/buffer/filebufferprovider.cpp
function QString (line 29) | QString FileBufferProvider::getName() const { return m_file->getName(); }
function QString (line 31) | QString FileBufferProvider::getPath() const { return m_file->getFilePath...
function QString (line 33) | QString FileBufferProvider::getContentPath() const { return m_file->getC...
function QString (line 35) | QString FileBufferProvider::getResourcePath() const { return m_file->get...
function QString (line 42) | QString FileBufferProvider::read() const {
function QString (line 47) | QString FileBufferProvider::fetchImageFolderPath() {
function QString (line 63) | QString FileBufferProvider::getAttachmentFolder() const {
function QString (line 68) | QString FileBufferProvider::fetchAttachmentFolderPath() {
function QStringList (line 73) | QStringList FileBufferProvider::addAttachment(const QString &p_destFolde...
function QString (line 81) | QString FileBufferProvider::newAttachmentFile(const QString &p_destFolde...
function QString (line 89) | QString FileBufferProvider::newAttachmentFolder(const QString &p_destFol...
function QString (line 97) | QString FileBufferProvider::renameAttachment(const QString &p_path, cons...
function QString (line 109) | QString FileBufferProvider::insertImage(const QString &p_srcImagePath,
function QString (line 119) | QString FileBufferProvider::insertImage(const QImage &p_image, const QSt...
function Node (line 143) | Node *FileBufferProvider::getNode() const { return c_nodeAttachedTo; }
FILE: src/core/buffer/filebufferprovider.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/buffer/filetypehelper.cpp
function QString (line 13) | QString FileType::preferredSuffix() const {
function FileType (line 109) | const FileType &FileTypeHelper::getFileType(const QString &p_filePath) c...
function FileType (line 127) | const FileType &FileTypeHelper::getFileTypeBySuffix(const QString &p_suf...
function FileType (line 151) | const FileType &FileTypeHelper::getFileType(int p_type) const {
function FileTypeHelper (line 158) | FileTypeHelper &FileTypeHelper::getInst() {
function FileType (line 167) | const FileType &FileTypeHelper::getFileTypeByName(const QString &p_typeN...
FILE: src/core/buffer/filetypehelper.h
function class (line 9) | class FileType {
FILE: src/core/buffer/ibufferfactory.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/buffer/markdownbuffer.cpp
function ViewWindow (line 17) | ViewWindow *
function QString (line 24) | QString MarkdownBuffer::insertImage(const QString &p_srcImagePath, const...
function QString (line 28) | QString MarkdownBuffer::insertImage(const QImage &p_image, const QString...
FILE: src/core/buffer/markdownbuffer.h
function namespace (line 11) | namespace vnotex {
FILE: src/core/buffer/markdownbufferfactory.cpp
function Buffer (line 7) | Buffer *MarkdownBufferFactory::createBuffer(const BufferParameters &p_pa...
FILE: src/core/buffer/markdownbufferfactory.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/buffer/mindmapbuffer.cpp
function ViewWindow (line 10) | ViewWindow *
FILE: src/core/buffer/mindmapbuffer.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/buffer/mindmapbufferfactory.cpp
function Buffer (line 7) | Buffer *MindMapBufferFactory::createBuffer(const BufferParameters &p_par...
FILE: src/core/buffer/mindmapbufferfactory.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/buffer/nodebufferprovider.cpp
function QString (line 25) | QString NodeBufferProvider::getName() const { return m_node->getName(); }
function QString (line 27) | QString NodeBufferProvider::getPath() const { return m_nodeFile->getFile...
function QString (line 29) | QString NodeBufferProvider::getContentPath() const { return m_nodeFile->...
function QString (line 31) | QString NodeBufferProvider::getResourcePath() const { return m_nodeFile-...
function QString (line 38) | QString NodeBufferProvider::read() const {
function QString (line 43) | QString NodeBufferProvider::fetchImageFolderPath() {
function QString (line 57) | QString NodeBufferProvider::getAttachmentFolder() const { return m_node-...
function QString (line 59) | QString NodeBufferProvider::fetchAttachmentFolderPath() {
function QStringList (line 63) | QStringList NodeBufferProvider::addAttachment(const QString &p_destFolde...
function QString (line 68) | QString NodeBufferProvider::newAttachmentFile(const QString &p_destFolde...
function QString (line 73) | QString NodeBufferProvider::newAttachmentFolder(const QString &p_destFol...
function QString (line 78) | QString NodeBufferProvider::renameAttachment(const QString &p_path, cons...
function QString (line 86) | QString NodeBufferProvider::insertImage(const QString &p_srcImagePath,
function QString (line 96) | QString NodeBufferProvider::insertImage(const QImage &p_image, const QSt...
function Node (line 120) | Node *NodeBufferProvider::getNode() const { return m_node.data(); }
FILE: src/core/buffer/nodebufferprovider.h
function namespace (line 8) | namespace vnotex {
FILE: src/core/buffer/pdfbuffer.cpp
function ViewWindow (line 10) | ViewWindow *PdfBuffer::createViewWindowInternal(const QSharedPointer<Fil...
FILE: src/core/buffer/pdfbuffer.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/buffer/pdfbufferfactory.cpp
function Buffer (line 8) | Buffer *PdfBufferFactory::createBuffer(const BufferParameters &p_paramet...
FILE: src/core/buffer/pdfbufferfactory.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/buffer/textbuffer.cpp
function ViewWindow (line 10) | ViewWindow *TextBuffer::createViewWindowInternal(const QSharedPointer<Fi...
FILE: src/core/buffer/textbuffer.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/buffer/textbufferfactory.cpp
function Buffer (line 7) | Buffer *TextBufferFactory::createBuffer(const BufferParameters &p_parame...
FILE: src/core/buffer/textbufferfactory.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/buffer/urlbasedbufferprovider.h
function namespace (line 8) | namespace vnotex {
FILE: src/core/buffermgr.cpp
function Buffer (line 188) | Buffer *BufferMgr::findBuffer(const Node *p_node) const {
function Buffer (line 198) | Buffer *BufferMgr::findBuffer(const QString &p_filePath) const {
function QString (line 274) | QString BufferMgr::findFileTypeByFile(const QString &p_filePath) {
FILE: src/core/buffermgr.h
function namespace (line 13) | namespace vnotex {
FILE: src/core/clipboarddata.cpp
function QJsonObject (line 19) | QJsonObject NodeClipboardDataItem::toJson() const {
function QJsonObject (line 81) | QJsonObject ClipboardData::toJson() const {
function QString (line 129) | QString ClipboardData::toJsonText() const {
function ID (line 157) | ID ClipboardData::getInstanceId() const { return m_instanceId; }
FILE: src/core/clipboarddata.h
function virtual (line 15) | virtual QJsonObject toJson() const = 0;
type Action (line 40) | enum Action { CopyNode, MoveNode, Invalid }
FILE: src/core/configmgr.cpp
function QJsonObject (line 43) | const QJsonObject &ConfigMgr::Settings::getJson() const { return m_jobj; }
function ConfigMgr (line 90) | ConfigMgr &ConfigMgr::getInst(bool p_isUnitTest) {
function QString (line 272) | QString ConfigMgr::getConfigFilePath(Source p_src) const {
function QString (line 300) | QString ConfigMgr::getDefaultConfigFilePath() {
function MainConfig (line 318) | MainConfig &ConfigMgr::getConfig() { return *m_config; }
function SessionConfig (line 320) | SessionConfig &ConfigMgr::getSessionConfig() { return *m_sessionConfig; }
function CoreConfig (line 322) | CoreConfig &ConfigMgr::getCoreConfig() { return m_config->getCoreConfig(...
function EditorConfig (line 324) | EditorConfig &ConfigMgr::getEditorConfig() { return m_config->getEditorC...
function WidgetConfig (line 326) | WidgetConfig &ConfigMgr::getWidgetConfig() { return m_config->getWidgetC...
function QString (line 328) | QString ConfigMgr::getAppFolder() const { return m_appConfigFolderPath; }
function QString (line 330) | QString ConfigMgr::getUserFolder() const { return m_userConfigFolderPath; }
function QString (line 332) | QString ConfigMgr::getAppThemeFolder() const {
function QString (line 336) | QString ConfigMgr::getUserThemeFolder() const {
function QString (line 343) | QString ConfigMgr::getAppTaskFolder() const {
function QString (line 347) | QString ConfigMgr::getUserTaskFolder() const {
function QString (line 353) | QString ConfigMgr::getAppWebStylesFolder() const {
function QString (line 357) | QString ConfigMgr::getUserWebStylesFolder() const {
function QString (line 364) | QString ConfigMgr::getAppDocsFolder() const {
function QString (line 368) | QString ConfigMgr::getUserDocsFolder() const {
function QString (line 374) | QString ConfigMgr::getAppSyntaxHighlightingFolder() const {
function QString (line 379) | QString ConfigMgr::getUserSyntaxHighlightingFolder() const {
function QString (line 386) | QString ConfigMgr::getAppDictsFolder() const {
function QString (line 390) | QString ConfigMgr::getUserDictsFolder() const {
function QString (line 396) | QString ConfigMgr::getUserTemplateFolder() const {
function QString (line 403) | QString ConfigMgr::getUserSnippetFolder() const {
function QString (line 410) | QString ConfigMgr::getUserMarkdownUserStyleFile() const {
function QString (line 421) | QString ConfigMgr::getUserOrAppFile(const QString &p_filePath) const {
function QString (line 438) | QString ConfigMgr::locateSessionConfigFilePathAtBootstrap() {
function QString (line 451) | QString ConfigMgr::getLogFile() const {
function QString (line 455) | QString ConfigMgr::getApplicationFilePath() {
function QString (line 475) | QString ConfigMgr::getApplicationDirPath() {
function QString (line 479) | QString ConfigMgr::getDocumentOrHomePath() {
function QString (line 493) | QString ConfigMgr::getApplicationVersion() {
function QJsonValue (line 538) | QJsonValue ConfigMgr::parseAndReadConfig(const QString &p_exp) const {
FILE: src/core/configmgr.h
type class (line 23) | enum class
function m_jobj (line 29) | Settings(const QJsonObject &p_jobj) : m_jobj(p_jobj) {}
FILE: src/core/coreconfig.cpp
function QString (line 29) | const QString &CoreConfig::getTheme() const { return m_theme; }
function QJsonObject (line 86) | QJsonObject CoreConfig::toJson() const {
function QString (line 105) | const QString &CoreConfig::getLocale() const { return m_locale; }
function QString (line 109) | QString CoreConfig::getLocaleToUse() const { return QLocale().name(); }
function QStringList (line 111) | const QStringList &CoreConfig::getAvailableLocales() {
function QJsonObject (line 148) | QJsonObject CoreConfig::saveShortcuts() const {
function QString (line 161) | const QString &CoreConfig::getShortcut(Shortcut p_shortcut) const {
function QStringList (line 180) | const QStringList &CoreConfig::getExternalNodeExcludePatterns() const {
function QString (line 206) | const QString &CoreConfig::getShortcutLeaderKey() const { return m_short...
function LineEndingPolicy (line 208) | LineEndingPolicy CoreConfig::getLineEndingPolicy() const { return m_line...
function QJsonArray (line 249) | QJsonArray CoreConfig::saveFileTypeSuffixes() const {
function QJsonObject (line 271) | QJsonObject CoreConfig::saveUnitedEntry() const {
function QStringList (line 286) | const QStringList *CoreConfig::findFileTypeSuffix(const QString &p_name)...
function QJsonArray (line 300) | const QJsonArray &CoreConfig::getUnitedEntryAlias() const { return m_uni...
function ViewWindowMode (line 306) | ViewWindowMode CoreConfig::getDefaultOpenMode() const { return m_default...
function ViewWindowMode (line 312) | ViewWindowMode CoreConfig::stringToViewWindowMode(const QString &p_mode) {
function QString (line 320) | QString CoreConfig::viewWindowModeToString(ViewWindowMode p_mode) {
FILE: src/core/coreconfig.h
function namespace (line 12) | namespace vnotex {
FILE: src/core/editorconfig.cpp
function QJsonObject (line 29) | QJsonObject EditorConfig::ImageHostItem::toJson() const {
function QJsonObject (line 99) | QJsonObject EditorConfig::saveCore() const {
function QJsonObject (line 126) | QJsonObject EditorConfig::saveShortcuts() const {
function QJsonObject (line 139) | QJsonObject EditorConfig::toJson() const {
function TextEditorConfig (line 155) | TextEditorConfig &EditorConfig::getTextEditorConfig() { return *m_textEd...
function TextEditorConfig (line 157) | const TextEditorConfig &EditorConfig::getTextEditorConfig() const { retu...
function MarkdownEditorConfig (line 159) | MarkdownEditorConfig &EditorConfig::getMarkdownEditorConfig() { return *...
function MarkdownEditorConfig (line 161) | const MarkdownEditorConfig &EditorConfig::getMarkdownEditorConfig() const {
function PdfViewerConfig (line 165) | PdfViewerConfig &EditorConfig::getPdfViewerConfig() { return *m_pdfViewe...
function PdfViewerConfig (line 167) | const PdfViewerConfig &EditorConfig::getPdfViewerConfig() const { return...
function MindMapEditorConfig (line 169) | MindMapEditorConfig &EditorConfig::getMindMapEditorConfig() { return *m_...
function MindMapEditorConfig (line 171) | const MindMapEditorConfig &EditorConfig::getMindMapEditorConfig() const {
function QString (line 182) | const QString &EditorConfig::getShortcut(Shortcut p_shortcut) const {
function QString (line 187) | QString EditorConfig::autoSavePolicyToString(AutoSavePolicy p_policy) co...
function LineEndingPolicy (line 217) | LineEndingPolicy EditorConfig::getLineEndingPolicy() const { return m_li...
function QString (line 223) | const QString &EditorConfig::getBackupFileDirectory() const { return m_b...
function QString (line 225) | const QString &EditorConfig::getBackupFileExtension() const { return m_b...
function QString (line 231) | const QString &EditorConfig::getSpellCheckDefaultDictionary() const {
function QJsonObject (line 255) | QJsonObject EditorConfig::saveImageHost() const {
function QString (line 280) | const QString &EditorConfig::getDefaultImageHost() const { return m_defa...
FILE: src/core/editorconfig.h
function namespace (line 13) | namespace vte {
type Shortcut (line 26) | enum Shortcut {
FILE: src/core/events.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/exception.h
function namespace (line 8) | namespace vnotex {
FILE: src/core/externalfile.cpp
function QString (line 12) | QString ExternalFile::read() const { return FileUtils::readTextFile(getC...
function QString (line 18) | QString ExternalFile::getName() const { return PathUtils::fileName(c_fil...
function QString (line 20) | QString ExternalFile::getFilePath() const { return c_filePath; }
function QString (line 22) | QString ExternalFile::getContentPath() const { return c_filePath; }
function QString (line 24) | QString ExternalFile::getResourcePath() const { return PathUtils::parent...
function IFileWithImage (line 26) | IFileWithImage *ExternalFile::getImageInterface() { return this; }
function Node (line 28) | Node *ExternalFile::getNode() const { return nullptr; }
function QString (line 30) | QString ExternalFile::fetchImageFolderPath() {
function QString (line 36) | QString ExternalFile::insertImage(const QString &p_srcImagePath, const Q...
function QString (line 44) | QString ExternalFile::insertImage(const QImage &p_image, const QString &...
FILE: src/core/externalfile.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/file.cpp
function FileType (line 5) | const FileType &File::getContentType() const {
FILE: src/core/file.h
function namespace (line 10) | namespace vnotex {
FILE: src/core/filelocator.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/fileopenparameters.h
function namespace (line 10) | namespace vnotex {
FILE: src/core/global.h
type quint64 (line 10) | typedef quint64 ID;
function QPair (line 12) | inline QPair<bool, ID> stringToID(const QString &p_str) {
function QString (line 18) | inline QString IDToString(ID p_id) { return QString::number(p_id); }
type quint64 (line 20) | typedef quint64 TimeStamp;
type Info (line 22) | struct Info {
function QString (line 37) | inline QString QJsonObjectToString(const QJsonObject &p_obj) {
function LineEndingPolicy (line 96) | enum class LineEndingPolicy { Platform, File, LF, CRLF, CR };
FILE: src/core/historyitem.cpp
function QJsonObject (line 11) | QJsonObject HistoryItem::toJson() const {
FILE: src/core/historyitem.h
function namespace (line 8) | namespace vnotex {
FILE: src/core/historymgr.cpp
function historyPtrCmp (line 36) | static bool historyPtrCmp(const QSharedPointer<HistoryItemFull> &p_a,
FILE: src/core/historymgr.h
function namespace (line 12) | namespace vnotex {
FILE: src/core/htmltemplatehelper.cpp
function QString (line 25) | QString MarkdownWebGlobalOptions::toJavascriptObject() const {
function fillGlobalStyles (line 60) | static void fillGlobalStyles(QString &p_template, const WebResource &p_r...
function QString (line 87) | static QString fillStyleTag(const QString &p_styleFile) {
function QString (line 96) | static QString fillScriptTag(const QString &p_scriptFile) {
function fillThemeStyles (line 105) | static void fillThemeStyles(QString &p_template, const QString &p_webSty...
function fillGlobalOptions (line 116) | static void fillGlobalOptions(QString &p_template, const MarkdownWebGlob...
function fillResources (line 122) | static void fillResources(QString &p_template, const WebResource &p_reso...
function fillResourcesByContent (line 151) | static void fillResourcesByContent(QString &p_template, const WebResourc...
function QString (line 184) | const QString &HtmlTemplateHelper::getMarkdownViewerTemplate() {
function QString (line 204) | QString HtmlTemplateHelper::generateMarkdownViewerTemplate(const Markdow...
function QString (line 252) | QString HtmlTemplateHelper::generateMarkdownExportTemplate(const Markdow...
function QString (line 321) | QString HtmlTemplateHelper::errorPage() {
function QString (line 326) | const QString &HtmlTemplateHelper::getPdfViewerTemplate() { return s_pdf...
function QString (line 328) | const QString &HtmlTemplateHelper::getPdfViewerTemplatePath() {
function QString (line 356) | const QString &HtmlTemplateHelper::getMindMapEditorTemplate() {
FILE: src/core/htmltemplatehelper.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/iconfig.h
function virtual (line 20) | virtual ~IConfig() {}
function virtual (line 23) | virtual void init() { Q_ASSERT(false); }
function virtual (line 26) | virtual void init(const QJsonObject &p_default, const QJsonObject &p_use...
function virtual (line 32) | virtual void writeToSettings() const {
function update (line 43) | void update() {
function QJsonValue (line 52) | static QJsonValue read(const QJsonObject &p_default, const QJsonObject &...
function QString (line 62) | static QString readString(const QJsonObject &p_default, const QJsonObjec...
function QStringList (line 67) | static QStringList readStringList(const QJsonObject &p_default, const QJ...
function QStringList (line 78) | static QStringList readStringList(const QJsonObject &p_obj, const QStrin...
FILE: src/core/location.h
function namespace (line 8) | namespace vnotex {
function LocationType (line 25) | enum class LocationType { Buffer, File, Folder, Notebook };
FILE: src/core/logger.cpp
function QString (line 36) | static QString getFileName(const char *p_file) {
FILE: src/core/logger.h
function namespace (line 9) | namespace vnotex {
FILE: src/core/mainconfig.cpp
function QJsonObject (line 57) | QJsonObject MainConfig::saveMetaData() const {
function CoreConfig (line 66) | CoreConfig &MainConfig::getCoreConfig() { return *m_coreConfig; }
function EditorConfig (line 68) | EditorConfig &MainConfig::getEditorConfig() { return *m_editorConfig; }
function WidgetConfig (line 70) | WidgetConfig &MainConfig::getWidgetConfig() { return *m_widgetConfig; }
function QJsonObject (line 74) | QJsonObject MainConfig::toJson() const {
function QString (line 83) | const QString &MainConfig::getVersion() const { return m_version; }
function QString (line 85) | QString MainConfig::getVersion(const QJsonObject &p_jobj) {
FILE: src/core/mainconfig.h
function namespace (line 11) | namespace vnotex {
FILE: src/core/markdowneditorconfig.cpp
function QJsonObject (line 87) | QJsonObject MarkdownEditorConfig::toJson() const {
function TextEditorConfig (line 143) | TextEditorConfig &MarkdownEditorConfig::getTextEditorConfig() { return *...
function TextEditorConfig (line 145) | const TextEditorConfig &MarkdownEditorConfig::getTextEditorConfig() const {
function QJsonObject (line 170) | QJsonObject MarkdownEditorConfig::saveViewerResource() const { return m_...
function QJsonObject (line 191) | QJsonObject MarkdownEditorConfig::saveExportResource() const { return m_...
function WebResource (line 193) | const WebResource &MarkdownEditorConfig::getViewerResource() const { ret...
function WebResource (line 195) | const WebResource &MarkdownEditorConfig::getExportResource() const { ret...
function QString (line 203) | const QString &MarkdownEditorConfig::getPlantUmlJar() const { return m_p...
function QString (line 209) | const QString &MarkdownEditorConfig::getPlantUmlCommand() const { return...
function QString (line 211) | const QString &MarkdownEditorConfig::getPlantUmlWebService() const { ret...
function QString (line 223) | const QString &MarkdownEditorConfig::getGraphvizExe() const { return m_g...
function QString (line 229) | const QString &MarkdownEditorConfig::getMathJaxScript() const { return m...
function qreal (line 275) | qreal MarkdownEditorConfig::getZoomFactorInReadMode() const { return m_z...
function QString (line 323) | QString MarkdownEditorConfig::sectionNumberModeToString(SectionNumberMod...
function QString (line 348) | QString MarkdownEditorConfig::sectionNumberStyleToString(SectionNumberSt...
function QString (line 368) | QString MarkdownEditorConfig::inplacePreviewSourceToString(InplacePrevie...
function QString (line 434) | const QString &MarkdownEditorConfig::getEditorOverriddenFontFamily() con...
function QString (line 450) | QString MarkdownEditorConfig::editViewModeToString(EditViewMode p_mode) ...
FILE: src/core/markdowneditorconfig.h
type SectionNumberMode (line 16) | enum SectionNumberMode { None, Read, Edit }
type SectionNumberStyle (line 18) | enum SectionNumberStyle {
type InplacePreviewSource (line 25) | enum InplacePreviewSource { NoInplacePreview = 0, ImageLink = 0x1, CodeB...
type EditViewMode (line 28) | enum EditViewMode { EditOnly, EditPreview }
FILE: src/core/mindmapeditorconfig.cpp
function QJsonObject (line 23) | QJsonObject MindMapEditorConfig::toJson() const {
function QJsonObject (line 48) | QJsonObject MindMapEditorConfig::saveEditorResource() const { return m_e...
function WebResource (line 50) | const WebResource &MindMapEditorConfig::getEditorResource() const { retu...
FILE: src/core/mindmapeditorconfig.h
function namespace (line 8) | namespace vnotex {
FILE: src/core/namebasedserver.h
function namespace (line 9) | namespace vnotex {
FILE: src/core/noncopyable.h
function namespace (line 4) | namespace vnotex {
FILE: src/core/notebook/bundlenotebook.cpp
function BundleNotebookConfigMgr (line 29) | BundleNotebookConfigMgr *BundleNotebook::getBundleNotebookConfigMgr() co...
function HistoryI (line 86) | HistoryI *BundleNotebook::history() { return this; }
function QJsonObject (line 110) | const QJsonObject &BundleNotebook::getExtraConfigs() const { return m_ex...
function NotebookDatabaseAccess (line 135) | NotebookDatabaseAccess *BundleNotebook::getDatabaseAccess() const { retu...
function QString (line 165) | const QString &BundleNotebook::getTagGraph() const { return m_tagGraph; }
function NotebookTagMgr (line 211) | NotebookTagMgr *BundleNotebook::getTagMgr() const {
function TagI (line 220) | TagI *BundleNotebook::tag() { return getTagMgr(); }
FILE: src/core/notebook/bundlenotebook.h
function namespace (line 8) | namespace vnotex {
FILE: src/core/notebook/bundlenotebookfactory.cpp
function QString (line 18) | QString BundleNotebookFactory::getName() const { return QStringLiteral("...
function QString (line 20) | QString BundleNotebookFactory::getDisplayName() const { return QObject::...
function QString (line 22) | QString BundleNotebookFactory::getDescription() const {
function checkRootFolderForNewNotebook (line 27) | static void checkRootFolderForNewNotebook(const NotebookParameters &p_pa...
FILE: src/core/notebook/bundlenotebookfactory.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/notebook/externalnode.cpp
function Node (line 13) | Node *ExternalNode::getNode() const { return m_parentNode; }
function QString (line 15) | const QString &ExternalNode::getName() const { return m_name; }
function QString (line 19) | QString ExternalNode::fetchAbsolutePath() const {
FILE: src/core/notebook/externalnode.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/notebook/historyi.h
function namespace (line 8) | namespace vnotex {
FILE: src/core/notebook/inotebookfactory.h
function namespace (line 7) | namespace vnotex {
FILE: src/core/notebook/node.cpp
function QString (line 57) | const QString &Node::getName() const { return m_name; }
function Node (line 111) | Node *Node::getParent() const { return m_parent; }
function ID (line 119) | ID Node::getId() const { return m_id; }
function ID (line 131) | ID Node::getSignature() const { return m_signature; }
function QDateTime (line 133) | const QDateTime &Node::getCreatedTimeUtc() const { return m_createdTimeU...
function QDateTime (line 135) | const QDateTime &Node::getModifiedTimeUtc() const { return m_modifiedTim...
function Notebook (line 161) | Notebook *Node::getNotebook() const { return m_notebook; }
function QStringList (line 178) | const QStringList &Node::getTags() const { return m_tags; }
function QString (line 200) | QString Node::fetchPath() const {
function QDir (line 212) | QDir Node::toDir() const {
function INotebookConfigMgr (line 230) | INotebookConfigMgr *Node::getConfigMgr() const { return m_notebook->getC...
function QString (line 232) | const QString &Node::getAttachmentFolder() const { return m_attachmentFo...
function QString (line 238) | QString Node::fetchAttachmentFolderPath() {
function INotebookBackend (line 242) | INotebookBackend *Node::getBackend() const { return m_notebook->getBacke...
function ID (line 359) | ID Node::generateSignature() {
function NodeVisual (line 371) | const NodeVisual &Node::getVisual() const { return m_visual; }
function QString (line 376) | const QString &Node::getBackgroundColor() const { return m_visual.getBac...
function QString (line 382) | const QString &Node::getBorderColor() const { return m_visual.getBorderC...
function QString (line 386) | const QString &Node::getNameColor() const { return m_visual.getNameColor...
function QString (line 390) | QString Node::getEffectiveBackgroundColor() const { return getBackground...
function QString (line 392) | QString Node::getEffectiveBorderColor() const { return getBorderColor(); }
FILE: src/core/notebook/node.h
type Flag (line 24) | enum Flag {
FILE: src/core/notebook/nodeparameters.h
function namespace (line 12) | namespace vnotex {
FILE: src/core/notebook/nodevisual.h
function namespace (line 12) | namespace vnotex {
FILE: src/core/notebook/notebook.cpp
function generateNotebookID (line 21) | static vnotex::ID generateNotebookID() {
function QString (line 61) | const QString &Notebook::getType() const { return m_type; }
function QString (line 63) | const QString &Notebook::getName() const { return m_name; }
function QString (line 78) | const QString &Notebook::getDescription() const { return m_description; }
function QString (line 92) | const QString &Notebook::getRootFolderPath() const { return m_rootFolder...
function QString (line 94) | QString Notebook::getRootFolderAbsolutePath() const {
function QString (line 98) | QString Notebook::getConfigFolderAbsolutePath() const {
function QIcon (line 107) | const QIcon &Notebook::getIcon() const { return m_icon; }
function QString (line 111) | const QString &Notebook::getImageFolder() const { return m_imageFolder; }
function QString (line 113) | const QString &Notebook::getAttachmentFolder() const { return m_attachme...
function QString (line 115) | const QString &Notebook::getRecycleBinFolder() const { return m_recycleB...
function QString (line 117) | QString Notebook::getRecycleBinFolderAbsolutePath() const {
function QDateTime (line 155) | const QDateTime &Notebook::getCreatedTimeUtc() const { return m_createdT...
function QString (line 216) | QString Notebook::getOrCreateRecycleBinDateFolder() {
function QJsonObject (line 272) | QJsonObject Notebook::getExtraConfig(const QString &p_key) const {
function QStringList (line 293) | QStringList Notebook::scanAndImportExternalFiles() {
function HistoryI (line 299) | HistoryI *Notebook::history() { return nullptr; }
function TagI (line 301) | TagI *Notebook::tag() { return nullptr; }
FILE: src/core/notebook/notebook.h
function namespace (line 12) | namespace vnotex {
FILE: src/core/notebook/notebookdatabaseaccess.cpp
function QSqlDatabase (line 233) | QSqlDatabase NotebookDatabaseAccess::getDatabase() const {
function QStringList (line 259) | QStringList NotebookDatabaseAccess::queryNodeParentPath(ID p_id) {
function QString (line 293) | QString NotebookDatabaseAccess::queryNodePath(ID p_id) {
function QStringList (line 590) | QStringList NotebookDatabaseAccess::queryNodeTags(ID p_id) {
function QStringList (line 692) | QStringList NotebookDatabaseAccess::queryTagAndChildren(const QString &p...
function QStringList (line 722) | QStringList NotebookDatabaseAccess::getNodesOfTags(const QStringList &p_...
FILE: src/core/notebook/notebookdatabaseaccess.h
function namespace (line 11) | namespace tests {
function namespace (line 15) | namespace vnotex {
FILE: src/core/notebook/notebookparameters.h
function namespace (line 8) | namespace vnotex {
FILE: src/core/notebook/notebooktagmgr.cpp
function QString (line 40) | QString NotebookTagMgr::tagGraphToString(const QVector<TagGraphPair> &p_...
function QStringList (line 112) | QStringList NotebookTagMgr::findNodesOfTag(const QString &p_name) {
FILE: src/core/notebook/notebooktagmgr.h
function namespace (line 15) | namespace vnotex {
FILE: src/core/notebook/tag.cpp
function QString (line 18) | const QString &Tag::name() const { return m_name; }
function Tag (line 20) | Tag *Tag::getParent() const { return m_parent; }
function QString (line 22) | QString Tag::fetchPath() const {
FILE: src/core/notebook/tag.h
function namespace (line 9) | namespace vnotex {
FILE: src/core/notebook/tagi.h
function namespace (line 8) | namespace vnotex {
FILE: src/core/notebook/vxnode.cpp
function QString (line 20) | QString VXNode::fetchAbsolutePath() const {
function QStringList (line 30) | QStringList VXNode::addAttachment(const QString &p_destFolderPath, const...
function QString (line 50) | QString VXNode::newAttachmentFile(const QString &p_destFolderPath, const...
function QString (line 60) | QString VXNode::newAttachmentFolder(const QString &p_destFolderPath, con...
function QString (line 70) | QString VXNode::renameAttachment(const QString &p_path, const QString &p...
FILE: src/core/notebook/vxnode.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/notebook/vxnodefile.cpp
function QString (line 19) | QString VXNodeFile::read() const { return m_node->getBackend()->readText...
function QString (line 28) | QString VXNodeFile::getName() const { return m_node->getName(); }
function QString (line 30) | QString VXNodeFile::getFilePath() const { return m_node->fetchAbsolutePa...
function QString (line 32) | QString VXNodeFile::getContentPath() const { return m_node->fetchAbsolut...
function QString (line 34) | QString VXNodeFile::getResourcePath() const { return PathUtils::parentDi...
function IFileWithImage (line 36) | IFileWithImage *VXNodeFile::getImageInterface() { return this; }
function Node (line 38) | Node *VXNodeFile::getNode() const { return m_node.data(); }
function QString (line 40) | QString VXNodeFile::fetchImageFolderPath() {
function QString (line 45) | QString VXNodeFile::insertImage(const QString &p_srcImagePath, const QSt...
function QString (line 54) | QString VXNodeFile::insertImage(const QImage &p_image, const QString &p_...
FILE: src/core/notebook/vxnodefile.h
function namespace (line 8) | namespace vnotex {
FILE: src/core/notebookbackend/inotebookbackend.cpp
function QString (line 18) | QString INotebookBackend::getFullPath(const QString &p_path) const {
function QString (line 23) | QString INotebookBackend::getRelativePath(const QString &p_path) const {
FILE: src/core/notebookbackend/inotebookbackend.h
function namespace (line 11) | namespace vnotex {
FILE: src/core/notebookbackend/inotebookbackendfactory.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/notebookbackend/localnotebookbackend.cpp
function QString (line 24) | QString LocalNotebookBackend::getName() const { return m_info.m_name; }
function QString (line 26) | QString LocalNotebookBackend::getDisplayName() const { return m_info.m_d...
function QString (line 28) | QString LocalNotebookBackend::getDescription() const { return m_info.m_d...
function QString (line 90) | QString LocalNotebookBackend::readTextFile(const QString &p_filePath) {
function QByteArray (line 95) | QByteArray LocalNotebookBackend::readFile(const QString &p_filePath) {
function QString (line 175) | QString LocalNotebookBackend::renameIfExistsCaseInsensitive(const QStrin...
FILE: src/core/notebookbackend/localnotebookbackend.h
function namespace (line 8) | namespace vnotex {
FILE: src/core/notebookbackend/localnotebookbackendfactory.cpp
function QString (line 11) | QString LocalNotebookBackendFactory::getName() const { return QStringLit...
function QString (line 13) | QString LocalNotebookBackendFactory::getDisplayName() const {
function QString (line 17) | QString LocalNotebookBackendFactory::getDescription() const {
FILE: src/core/notebookbackend/localnotebookbackendfactory.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/notebookconfigmgr/bundlenotebookconfigmgr.cpp
function QString (line 55) | const QString &BundleNotebookConfigMgr::getConfigFolderName() { return c...
function QString (line 57) | const QString &BundleNotebookConfigMgr::getConfigName() { return c_confi...
function QString (line 59) | QString BundleNotebookConfigMgr::getConfigFilePath() {
function QString (line 63) | QString BundleNotebookConfigMgr::getDatabasePath() {
function BundleNotebook (line 67) | BundleNotebook *BundleNotebookConfigMgr::getBundleNotebook() const {
function QString (line 87) | QString BundleNotebookConfigMgr::getConfigFolderPath() const { return c_...
FILE: src/core/notebookconfigmgr/bundlenotebookconfigmgr.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/notebookconfigmgr/inotebookconfigmgr.cpp
function Notebook (line 15) | Notebook *INotebookConfigMgr::getNotebook() const { return m_notebook; }
FILE: src/core/notebookconfigmgr/inotebookconfigmgr.h
function namespace (line 10) | namespace vnotex {
FILE: src/core/notebookconfigmgr/inotebookconfigmgrfactory.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/notebookconfigmgr/notebookconfig.cpp
function QJsonObject (line 28) | QJsonObject NotebookConfig::toJson() const {
function QJsonArray (line 96) | QJsonArray NotebookConfig::saveHistory() const {
FILE: src/core/notebookconfigmgr/notebookconfig.h
function namespace (line 14) | namespace vnotex {
FILE: src/core/notebookconfigmgr/vxnodeconfig.cpp
function ID (line 36) | static ID stringToNodeId(const QString &p_idStr) {
function QJsonObject (line 44) | QJsonObject NodeFileConfig::toJson() const {
function NodeParameters (line 101) | NodeParameters NodeFileConfig::toNodeParameters() const {
function QJsonObject (line 118) | QJsonObject NodeFolderConfig::toJson() const {
function NodeParameters (line 152) | NodeParameters NodeFolderConfig::toNodeParameters() const {
function QJsonObject (line 170) | QJsonObject NodeConfig::toJson() const {
function NodeParameters (line 241) | NodeParameters NodeConfig::toNodeParameters() const {
FILE: src/core/notebookconfigmgr/vxnodeconfig.h
function namespace (line 12) | namespace vnotex {
FILE: src/core/notebookconfigmgr/vxnotebookconfigmgr.cpp
function QString (line 56) | QString VXNotebookConfigMgr::getName() const { return VXNotebookConfigMg...
function QString (line 58) | QString VXNotebookConfigMgr::getDisplayName() const {
function QString (line 62) | QString VXNotebookConfigMgr::getDescription() const {
function QString (line 133) | QString VXNotebookConfigMgr::getNodeConfigFilePath(const Node *p_node) c...
function QString (line 745) | QString VXNotebookConfigMgr::fetchNodeImageFolderPath(Node *p_node) {
function QString (line 755) | QString VXNotebookConfigMgr::fetchNodeAttachmentFolderPath(Node *p_node) {
function QString (line 776) | QString VXNotebookConfigMgr::fetchNodeAttachmentFolder(const QString &p_...
function QStringList (line 957) | QStringList VXNotebookConfigMgr::scanAndImportExternalFiles(Node *p_node) {
function NotebookDatabaseAccess (line 1011) | NotebookDatabaseAccess *VXNotebookConfigMgr::getDatabaseAccess() const {
FILE: src/core/notebookconfigmgr/vxnotebookconfigmgr.h
function namespace (line 14) | namespace vnotex {
FILE: src/core/notebookconfigmgr/vxnotebookconfigmgrfactory.cpp
function QString (line 20) | QString VXNotebookConfigMgrFactory::getName() const { return c_name; }
function QString (line 22) | QString VXNotebookConfigMgrFactory::getDisplayName() const { return c_di...
function QString (line 24) | QString VXNotebookConfigMgrFactory::getDescription() const { return c_de...
FILE: src/core/notebookconfigmgr/vxnotebookconfigmgrfactory.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/notebookmgr.cpp
function SessionConfig (line 140) | static SessionConfig &getSessionConfig() { return ConfigMgr::getInst().g...
function notebookToSessionConfig (line 190) | static SessionConfig::NotebookItem
function ID (line 242) | ID NotebookMgr::getCurrentNotebookId() const { return m_currentNotebookI...
function QStringList (line 365) | const QStringList &NotebookMgr::getNotebooksFailedToLoad() const { retur...
FILE: src/core/notebookmgr.h
function namespace (line 15) | namespace vnotex {
FILE: src/core/pdfviewerconfig.cpp
function QJsonObject (line 23) | QJsonObject PdfViewerConfig::toJson() const {
function QJsonObject (line 48) | QJsonObject PdfViewerConfig::saveViewerResource() const { return m_viewe...
function WebResource (line 50) | const WebResource &PdfViewerConfig::getViewerResource() const { return m...
FILE: src/core/pdfviewerconfig.h
function namespace (line 8) | namespace vnotex {
FILE: src/core/quickaccesshelper.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/sessionconfig.cpp
function QJsonObject (line 32) | QJsonObject SessionConfig::NotebookItem::toJson() const {
function QJsonObject (line 54) | QJsonObject SessionConfig::QuickNoteScheme::toJson() const {
function QJsonObject (line 71) | QJsonObject SessionConfig::ExternalProgram::toJson() const {
function QString (line 81) | QString SessionConfig::ExternalProgram::fetchCommand(const QString &p_fi...
function QJsonObject (line 158) | QJsonObject SessionConfig::saveCore() const {
function QString (line 174) | const QString &SessionConfig::getNewNotebookDefaultRootFolderPath() const {
function QString (line 182) | const QString &SessionConfig::getExternalMediaDefaultPath() const {
function QJsonArray (line 206) | QJsonArray SessionConfig::saveNotebooks() const {
function QString (line 214) | const QString &SessionConfig::getCurrentNotebookRootFolderPath() const {
function QJsonObject (line 224) | QJsonObject SessionConfig::toJson() const {
function QJsonObject (line 239) | QJsonObject SessionConfig::saveStateAndGeometry() const {
function QString (line 281) | QString SessionConfig::openGLToString(OpenGL p_option) {
function ExportOption (line 327) | const ExportOption &SessionConfig::getExportOption() const { return m_ex...
function SearchOption (line 341) | const SearchOption &SessionConfig::getSearchOption() const { return m_se...
function QByteArray (line 362) | QByteArray SessionConfig::getViewAreaSessionAndClear() {
function QByteArray (line 372) | QByteArray SessionConfig::getNotebookExplorerSessionAndClear() {
function QString (line 382) | const QString &SessionConfig::getFlashPage() const { return m_flashPage; }
function QStringList (line 386) | const QStringList &SessionConfig::getQuickAccessFiles() const { return m...
function QJsonArray (line 489) | QJsonArray SessionConfig::saveExternalPrograms() const {
function QJsonArray (line 505) | QJsonArray SessionConfig::saveQuickNoteSchemes() const {
function QJsonArray (line 552) | QJsonArray SessionConfig::saveHistory() const {
function QJsonObject (line 572) | QJsonObject SessionConfig::saveExportOption() const {
FILE: src/core/sessionconfig.h
function namespace (line 13) | namespace vnotex {
FILE: src/core/singleinstanceguard.h
function namespace (line 11) | namespace vnotex {
FILE: src/core/templatemgr.cpp
function QString (line 11) | QString TemplateMgr::getTemplateFolder() const {
function QStringList (line 15) | QStringList TemplateMgr::getTemplates() const {
function QString (line 21) | QString TemplateMgr::getTemplateFilePath(const QString &p_name) const {
function QString (line 28) | QString TemplateMgr::getTemplateContent(const QString &p_name) const {
FILE: src/core/templatemgr.h
function namespace (line 9) | namespace vnotex {
FILE: src/core/texteditorconfig.cpp
function QJsonObject (line 51) | QJsonObject TextEditorConfig::toJson() const {
function QString (line 66) | QString TextEditorConfig::lineNumberTypeToString(LineNumberType p_type) ...
function QString (line 91) | QString TextEditorConfig::inputModeToString(InputMode p_mode) const {
function QString (line 115) | QString TextEditorConfig::centerCursorToString(CenterCursor p_cursor) co...
function QString (line 139) | QString TextEditorConfig::wrapModeToString(WrapMode p_mode) const {
FILE: src/core/texteditorconfig.h
type class (line 11) | enum class
type class (line 13) | enum class
type class (line 15) | enum class
type class (line 17) | enum class
FILE: src/core/theme.cpp
function QString (line 21) | QString vnotex::Theme::getThemeFolder() const { return m_themeFolderPath; }
function QString (line 40) | QString Theme::getDisplayName(const QString &p_folder, const QString &p_...
function Theme (line 64) | Theme *Theme::fromFolder(const QString &p_folder) {
function QJsonObject (line 86) | QJsonObject Theme::backfillSystemPalette(QJsonObject p_obj) {
function QString (line 237) | QString Theme::fetchQtStyleSheet() const {
function QString (line 337) | QString Theme::paletteColor(const QString &p_name) const {
function QJsonObject (line 346) | QJsonObject Theme::readJsonFile(const QString &p_filePath) {
function QJsonObject (line 351) | QJsonObject Theme::readPaletteFile(const QString &p_folder) {
function QJsonValue (line 356) | QJsonValue Theme::findValueByKeyPath(const Palette &p_palette, const QSt...
function QString (line 373) | QString Theme::getFile(File p_fileType) const { return getFile(m_themeFo...
function QString (line 375) | QString Theme::getFile(const QString &p_themeFolder, File p_fileType) {
function QString (line 388) | QString Theme::getFileName(File p_fileType) {
function QString (line 416) | QString Theme::getEditorHighlightTheme() const {
function QString (line 425) | QString Theme::getMarkdownEditorHighlightTheme() const {
function QString (line 438) | QString Theme::name() const { return PathUtils::dirName(m_themeFolderPat...
function QPixmap (line 440) | QPixmap Theme::getCover(const QString &p_folder) {
FILE: src/core/theme.h
function namespace (line 10) | namespace tests {
function namespace (line 14) | namespace vnotex {
FILE: src/core/thememgr.cpp
function QString (line 27) | QString ThemeMgr::getIconFile(const QString &p_icon) const {
function Theme (line 80) | const Theme &ThemeMgr::getCurrentTheme() const { return *m_currentTheme; }
function Theme (line 102) | Theme *ThemeMgr::loadTheme(const QString &p_themeFolder) {
function QString (line 117) | QString ThemeMgr::findThemeFolder(const QString &p_name) const {
function QString (line 135) | QString ThemeMgr::fetchQtStyleSheet() const {
function QString (line 144) | QString ThemeMgr::paletteColor(const QString &p_name) const {
function QString (line 151) | QString ThemeMgr::getFile(Theme::File p_fileType) const {
function QString (line 155) | QString ThemeMgr::getEditorHighlightTheme() const {
function QString (line 159) | QString ThemeMgr::getMarkdownEditorHighlightTheme() const {
function QColor (line 167) | const QColor &ThemeMgr::getBaseBackground() const { return m_baseBackgro...
function QPixmap (line 173) | QPixmap ThemeMgr::getThemePreview(const QString &p_name) const {
FILE: src/core/thememgr.h
function namespace (line 15) | namespace vnotex {
FILE: src/core/versioncontroller/dummyversioncontroller.cpp
function QString (line 9) | QString DummyVersionController::getName() const { return m_info.m_name; }
function QString (line 11) | QString DummyVersionController::getDisplayName() const { return m_info.m...
function QString (line 13) | QString DummyVersionController::getDescription() const { return m_info.m...
FILE: src/core/versioncontroller/dummyversioncontroller.h
function namespace (line 8) | namespace vnotex {
FILE: src/core/versioncontroller/dummyversioncontrollerfactory.cpp
function QString (line 11) | QString DummyVersionControllerFactory::getName() const { return QStringL...
function QString (line 13) | QString DummyVersionControllerFactory::getDisplayName() const {
function QString (line 17) | QString DummyVersionControllerFactory::getDescription() const {
FILE: src/core/versioncontroller/dummyversioncontrollerfactory.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/versioncontroller/iversioncontroller.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/versioncontroller/iversioncontrollerfactory.h
function namespace (line 6) | namespace vnotex {
FILE: src/core/versioncontroller/versioncontrollerserver.h
function namespace (line 7) | namespace vnotex {
FILE: src/core/vnotex.cpp
function ThemeMgr (line 62) | ThemeMgr &VNoteX::getThemeMgr() const { return *m_themeMgr; }
function TaskMgr (line 64) | TaskMgr &VNoteX::getTaskMgr() const { return *m_taskMgr; }
function MainWindow (line 71) | MainWindow *VNoteX::getMainWindow() const {
function NotebookMgr (line 97) | NotebookMgr &VNoteX::getNotebookMgr() const { return *m_notebookMgr; }
function BufferMgr (line 99) | BufferMgr &VNoteX::getBufferMgr() const { return *m_bufferMgr; }
function ID (line 113) | ID VNoteX::getInstanceId() const { return m_instanceId; }
FILE: src/core/vnotex.h
function namespace (line 11) | namespace vnotex {
FILE: src/core/webresource.h
function namespace (line 9) | namespace vnotex {
function init (line 60) | void init(const QJsonObject &p_obj) {
FILE: src/core/widgetconfig.cpp
function QJsonObject (line 58) | QJsonObject WidgetConfig::toJson() const {
function FindOptions (line 99) | FindOptions WidgetConfig::getFindAndReplaceOptions() const { return m_fi...
function QStringList (line 155) | const QStringList &WidgetConfig::getMainWindowKeepDocksExpandingContentA...
FILE: src/core/widgetconfig.h
function namespace (line 10) | namespace vnotex {
FILE: src/data/extra/web/js/computed-style-to-inline-style.js
function computedStyleToInlineStyle (line 19) | function computedStyleToInlineStyle(element) {
FILE: src/data/extra/web/js/crosscopy.js
class CrossCopy (line 2) | class CrossCopy {
method constructor (line 3) | constructor(p_adapter) {
method updateTargets (line 28) | updateTargets() {
method addTarget (line 38) | addTarget(p_name, p_callback) {
method addTargetNoBackground (line 42) | addTargetNoBackground() {
method addTargetEvernote (line 53) | addTargetEvernote() {
method addTargetOneNote (line 65) | addTargetOneNote() {
method addTargetMicrosoftWord (line 80) | addTargetMicrosoftWord() {
method addTargetWeChatPublicAccountEditor (line 94) | addTargetWeChatPublicAccountEditor() {
method addTargetRawHtml (line 106) | addTargetRawHtml() {
method crossCopy (line 116) | crossCopy(p_id, p_timeStamp, p_target, p_baseUrl, p_html) {
method executeRules (line 132) | executeRules(p_rules, p_info, p_html) {
method getMarkStyle (line 158) | getMarkStyle() {
method rule_addFragment (line 175) | static rule_addFragment(p_info, p_doc) {
method rule_removeBackground (line 189) | static rule_removeBackground(p_tagsToExclude, p_info, p_doc) {
method rule_fixRelativeImage (line 193) | static rule_fixRelativeImage(p_info, p_doc) {
method rule_removeMarginPadding (line 226) | static rule_removeMarginPadding(p_tagsToExclude, p_info, p_doc) {
method removeStyles (line 232) | static removeStyles(p_tagsToExclude, p_styles, p_doc) {
method rule_transformMarkToSpan (line 246) | static rule_transformMarkToSpan(p_info, p_doc) {
method rule_useCodeBackgroundForPre (line 264) | static rule_useCodeBackgroundForPre(p_info, p_doc) {
method rule_replaceLocalImageWithLabel (line 274) | static rule_replaceLocalImageWithLabel(p_info, p_doc) {
method rule_removeAllStyles (line 296) | static rule_removeAllStyles(p_tagsToExclude, p_info, p_doc) {
method rule_replaceSvgWithLabel (line 308) | static rule_replaceSvgWithLabel(p_info, p_doc) {
FILE: src/data/extra/web/js/easyaccess.js
class EasyAccess (line 1) | class EasyAccess {
method constructor (line 2) | constructor() {
method setupMouseMove (line 22) | setupMouseMove() {
method setupViNavigation (line 80) | setupViNavigation() {
method jumpTitle (line 344) | jumpTitle(forward, relativeLevel, repeat) {
method setupZoomOnWheel (line 412) | setupZoomOnWheel() {
method scroll (line 425) | static scroll(p_up) {
FILE: src/data/extra/web/js/eventemitter.js
class EventEmitter (line 2) | class EventEmitter {
method constructor (line 3) | constructor() {
method on (line 7) | on(event, listener) {
method removeListener (line 15) | removeListener(event, listener) {
method emit (line 24) | emit(event, ...args) {
method once (line 31) | once(event, listener) {
FILE: src/data/extra/web/js/flowchartjs.js
class FlowchartJs (line 2) | class FlowchartJs extends GraphRenderer {
method constructor (line 3) | constructor() {
method renderOne (line 15) | renderOne(p_node, p_idx) {
method renderText (line 63) | renderText(p_container, p_text, p_idx, p_callback) {
method fixStandAloneGraph (line 101) | fixStandAloneGraph(p_graph) {
FILE: src/data/extra/web/js/graphcache.js
class GraphCache (line 3) | class GraphCache {
method constructor (line 4) | constructor() {
method generateKey (line 8) | generateKey(p_type, p_format, p_text) {
method set (line 12) | set(p_type, p_format, p_text, p_graph) {
method get (line 16) | get(p_type, p_format, p_text, p_graph) {
FILE: src/data/extra/web/js/graphpreviewer.js
class GraphPreviewer (line 1) | class GraphPreviewer {
method constructor (line 2) | constructor(p_vxcore, p_container) {
method previewGraph (line 30) | previewGraph(p_id, p_timeStamp, p_lang, p_text) {
method previewMath (line 91) | previewMath(p_id, p_timeStamp, p_text) {
method initOnFirstPreview (line 103) | initOnFirstPreview() {
method renderMath (line 113) | renderMath(p_id, p_timeStamp, p_text, p_dataSetter) {
method processGraph (line 129) | processGraph(p_id, p_timeStamp, p_graphDiv) {
method processSvgAsPng (line 141) | processSvgAsPng(p_id, p_timeStamp, p_svgNode, p_dataSetter = null) {
method fixSvgRelativeWidth (line 184) | fixSvgRelativeWidth(p_svgNode) {
method fixSvgCurrentColor (line 201) | fixSvgCurrentColor(p_svgNode) {
method scaleSvg (line 217) | scaleSvg(p_svgNode) {
method setGraphPreviewData (line 233) | setGraphPreviewData(p_id, p_timeStamp, p_format = '', p_data = '', p_b...
method setMathPreviewData (line 245) | setMathPreviewData(p_id, p_timeStamp, p_format = '', p_data = '', p_ba...
FILE: src/data/extra/web/js/graphrenderer.js
class GraphRenderer (line 2) | class GraphRenderer extends VxWorker {
method constructor (line 3) | constructor() {
method reset (line 24) | reset() {
method registerInternal (line 30) | registerInternal() {
method initialize (line 42) | initialize(p_callback) {
method render (line 60) | render(p_node, p_classList) {
method renderCodeNodes (line 81) | renderCodeNodes() {
method doRender (line 87) | doRender() {
method renderNodes (line 100) | renderNodes() {
method renderOne (line 108) | renderOne(p_node, p_idx) {
method finishRenderingOne (line 113) | finishRenderingOne() {
FILE: src/data/extra/web/js/graphviz.js
class Graphviz (line 1) | class Graphviz extends GraphRenderer {
method constructor (line 2) | constructor() {
method registerInternal (line 23) | registerInternal() {
method initialize (line 36) | initialize(p_callback) {
method render (line 46) | render(p_node, p_classList, p_format) {
method renderCodeNodes (line 53) | renderCodeNodes(p_format) {
method renderOne (line 59) | renderOne(p_node, p_idx) {
method renderOnline (line 67) | renderOnline(p_node, p_idx) {
method renderLocal (line 110) | renderLocal(p_node) {
method renderText (line 153) | renderText(p_text, p_callback) {
FILE: src/data/extra/web/js/imageviewer.js
class ImageViewer (line 1) | class ImageViewer {
method constructor (line 2) | constructor() {
method setupImageViewBox (line 16) | setupImageViewBox() {
method closeImageViewBox (line 123) | closeImageViewBox() {
method setupForAllImages (line 127) | setupForAllImages(p_container) {
method setupIMGToView (line 140) | setupIMGToView(p_node) {
method viewImage (line 156) | viewImage(p_imgSrc, p_background = 'transparent') {
method viewIMG (line 169) | viewIMG(p_imgNode) {
method isViewingImage (line 173) | isViewingImage() {
method setupSVGToView (line 177) | setupSVGToView(p_node, p_forceBackground = false) {
method viewSVG (line 221) | viewSVG(p_svgNode, p_background = 'transparent') {
FILE: src/data/extra/web/js/lrucache.js
class LruCache (line 1) | class LruCache {
method constructor (line 2) | constructor(p_capacity = 100) {
method get (line 7) | get(p_key) {
method set (line 16) | set(p_key, p_val) {
method first (line 26) | first() {
FILE: src/data/extra/web/js/markdown-it/markdown-it-front-matter.js
function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
function frontMatter (line 12) | function frontMatter(state, startLine, endLine, silent) {
FILE: src/data/extra/web/js/markdown-it/markdown-it-implicit-figure.js
function s (line 2) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
function implicitFigures (line 8) | function implicitFigures(state) {
FILE: src/data/extra/web/js/markdown-it/markdown-it-inject-linenumbers.js
function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
function injectLineNumbers (line 11) | function injectLineNumbers(tokens, idx, options, env, slf) {
function addLineNumber (line 19) | function addLineNumber(token, line) {
function injectLineNumbersForFence (line 28) | function injectLineNumbersForFence(tokens, idx, options, env, slf) {
function injectLineNumbersForCodeBlock (line 39) | function injectLineNumbersForCodeBlock(tokens, idx, options, env, slf) {
FILE: src/data/extra/web/js/markdown-it/markdown-it-task-lists.js
function e (line 2) | function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof requi...
function attrSet (line 31) | function attrSet(token, name, value) {
function parentToken (line 42) | function parentToken(tokens, index) {
function isTodoItem (line 52) | function isTodoItem(tokens, index) {
function todoify (line 59) | function todoify(token, TokenConstructor) {
function makeCheckbox (line 79) | function makeCheckbox(token, TokenConstructor) {
function beginLabel (line 92) | function beginLabel(TokenConstructor) {
function endLabel (line 98) | function endLabel(TokenConstructor) {
function afterLabel (line 104) | function afterLabel(content, id, TokenConstructor) {
function isInline (line 111) | function isInline(token) { return token.type === 'inline'; }
function isParagraph (line 112) | function isParagraph(token) { return token.type === 'paragraph_open'; }
function isListItem (line 113) | function isListItem(token) { return token.type === 'list_item_open'; }
function startsWithTodoMarkdown (line 115) | function startsWithTodoMarkdown(token) {
FILE: src/data/extra/web/js/markdown-it/markdown-it-texmath.js
function escapeHTML (line 7) | function escapeHTML(text) {
function texmath (line 16) | function texmath(md, options) {
FILE: src/data/extra/web/js/markdown-it/markdown-it-xss.js
function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
function protectFromXSS (line 12) | function protectFromXSS(html) {
function filterContent (line 16) | function filterContent(tokens, idx, options, env, slf, fallback) {
FILE: src/data/extra/web/js/markdown-it/markdownItTocDoneRight.umd.js
function e (line 1) | function e(e){return encodeURIComponent(String(e).trim().toLowerCase().r...
function n (line 1) | function n(e){return String(e).replace(/&/g,"&").replace(/"/g,""...
FILE: src/data/extra/web/js/markdownit.js
class MarkdownItOptions (line 1) | class MarkdownItOptions {
method constructor (line 2) | constructor() {
class CodeNodeStoreByLang (line 19) | class CodeNodeStoreByLang {
method constructor (line 20) | constructor() {
method registerLangs (line 31) | registerLangs(p_langs) {
method addNode (line 38) | addNode(p_node) {
method clearNodes (line 61) | clearNodes() {
method getNodes (line 69) | getNodes(p_langs) {
class MarkdownIt (line 90) | class MarkdownIt extends VxWorker {
method constructor (line 91) | constructor(p_options) {
method registerInternal (line 254) | registerInternal() {
method render (line 265) | render(p_node, p_text, p_finishCbStr) {
method loadedGuard (line 298) | loadedGuard(p_cbStr) {
method addLangsToSkipHighlight (line 307) | addLangsToSkipHighlight(p_langs) {
method markdownRenderFinished (line 316) | markdownRenderFinished() {
method getCodeNodes (line 321) | getCodeNodes(p_langs) {
method generateHeaderId (line 337) | generateHeaderId(p_headerIds, p_str) {
FILE: src/data/extra/web/js/markdownviewercore.js
class MarkdownViewerCore (line 7) | class MarkdownViewerCore extends VXCore {
method constructor (line 8) | constructor() {
method initOnLoad (line 32) | initOnLoad() {
method setContentContainerOption (line 68) | setContentContainerOption(p_class, p_enabled) {
method setBodyOption (line 76) | setBodyOption(p_class, p_enabled) {
method registerWorker (line 84) | registerWorker(p_worker) {
method finishWorker (line 90) | finishWorker(p_name) {
method getWorker (line 106) | getWorker(p_name) {
method kickOffMarkdown (line 110) | kickOffMarkdown() {
method setMarkdownText (line 121) | setMarkdownText(p_text) {
method scrollToLine (line 134) | scrollToLine(p_lineNumber) {
method scrollToAnchor (line 147) | scrollToAnchor(p_anchor) {
method setBasicMarkdownRendered (line 160) | setBasicMarkdownRendered() {
method muteScroll (line 164) | muteScroll() {
method unmuteScroll (line 168) | unmuteScroll() {
method isScrollMuted (line 179) | isScrollMuted() {
method setTopLineNumber (line 183) | setTopLineNumber(p_lineNumber) {
method previewGraph (line 187) | previewGraph(p_id, p_timeStamp, p_lang, p_text) {
method previewMath (line 193) | previewMath(p_id, p_timeStamp, p_text) {
method setGraphPreviewData (line 199) | setGraphPreviewData(p_data) {
method setMathPreviewData (line 208) | setMathPreviewData(p_data) {
method setHeadings (line 217) | setHeadings(p_headings) {
method setCurrentHeadingAnchor (line 221) | setCurrentHeadingAnchor(p_idx, p_anchor) {
method setSectionNumberEnabled (line 225) | setSectionNumberEnabled(p_enabled) {
method scroll (line 232) | scroll(p_up) {
method setKeyPress (line 236) | setKeyPress(p_key, p_ctrl, p_shift, p_meta) {
method zoom (line 240) | zoom(p_zoomIn) {
method htmlToMarkdown (line 244) | htmlToMarkdown(p_id, p_timeStamp, p_html) {
method highlightCodeBlock (line 253) | highlightCodeBlock(p_idx, p_timeStamp, p_text) {
method parseStyleSheet (line 271) | parseStyleSheet(p_id, p_styleSheet) {
method setCrossCopyTargets (line 296) | setCrossCopyTargets(p_targets) {
method crossCopy (line 300) | crossCopy(p_id, p_timeStamp, p_target, p_baseUrl, p_html) {
method setCrossCopyResult (line 304) | setCrossCopyResult(p_id, p_timeStamp, p_html) {
method findText (line 308) | findText(p_texts, p_options, p_currentMatchLine) {
method showFindResult (line 312) | showFindResult(p_texts, p_totalMatches, p_currentMatchIndex) {
method saveContent (line 316) | saveContent() {
method setBodySize (line 328) | setBodySize(p_width, p_height) {
method renderGraph (line 338) | renderGraph(p_id, p_index, p_format, p_lang, p_text, p_callback) {
method graphRenderDataReady (line 343) | graphRenderDataReady(p_id, p_index, p_format, p_data) {
FILE: src/data/extra/web/js/markjs.js
class MarkJs (line 1) | class MarkJs {
method constructor (line 2) | constructor(p_adapter, p_container) {
method findText (line 27) | findText(p_texts, p_options, p_currentMatchLine) {
method createMarkjsOptions (line 81) | createMarkjsOptions(p_options) {
method findByOneRegExp (line 101) | findByOneRegExp(p_paras) {
method clearCache (line 127) | clearCache() {
method findInCache (line 136) | findInCache(p_texts, p_options, p_currentMatchLine) {
method updateCurrentMatch (line 162) | updateCurrentMatch(p_texts, p_forward, p_currentMatchLine) {
method binarySearchCurrentIndexForLineNumber (line 211) | binarySearchCurrentIndexForLineNumber(p_lineNumber) {
FILE: src/data/extra/web/js/mathjax.js
class MathJaxRenderer (line 26) | class MathJaxRenderer extends VxWorker {
method constructor (line 27) | constructor() {
method registerInternal (line 44) | registerInternal() {
method initialize (line 52) | initialize(p_callback) {
method setMathJaxReady (line 67) | setMathJaxReady() {
method render (line 73) | render(p_node, p_className) {
method renderText (line 99) | renderText(p_container, p_text, p_callback) {
method transformExtraNodes (line 132) | transformExtraNodes(p_node, p_className, p_extraNodes) {
method transformNode (line 138) | static transformNode(p_node, p_className) {
method renderNodes (line 150) | renderNodes() {
method postProcessMathJax (line 171) | postProcessMathJax() {
method removeTextGuard (line 176) | removeTextGuard(p_text) {
FILE: src/data/extra/web/js/mermaid.js
class Mermaid (line 1) | class Mermaid extends GraphRenderer {
method constructor (line 2) | constructor() {
method initialize (line 17) | initialize(p_callback) {
method renderOne (line 29) | async renderOne(p_node, p_idx) {
method renderTextInternal (line 75) | async renderTextInternal(p_container, p_text, p_idx) {
method renderText (line 112) | async renderText(p_container, p_text, p_idx, p_callback) {
FILE: src/data/extra/web/js/mindmap/core/mindmap-core.js
class MindMapCore (line 5) | class MindMapCore {
method constructor (line 6) | constructor() {
method init (line 26) | init() {
method on (line 60) | on(event, callback) {
method emit (line 69) | emit(event, ...args) {
method initMindElixir (line 78) | initMindElixir() {
method setupMindElixirEvents (line 139) | setupMindElixirEvents() {
method setupMutationObserver (line 190) | setupMutationObserver() {
method disableObserver (line 218) | disableObserver() {
method enableObserver (line 228) | enableObserver() {
method processNodesAndRelayout (line 242) | processNodesAndRelayout() {
method setupFeatures (line 278) | setupFeatures() {
method initFeatures (line 289) | initFeatures() {
method registerFeature (line 311) | registerFeature(name, feature) {
method getFeature (line 324) | getFeature(name) {
method setData (line 338) | setData(p_data) {
method setupKeyboardShortcuts (line 397) | setupKeyboardShortcuts() {
method saveData (line 420) | saveData(p_id) {
method emitSaveResult (line 468) | emitSaveResult(id, success, error = '', data = '') {
FILE: src/data/extra/web/js/mindmap/features/link-handler/link-handler.js
class LinkHandlerFeature (line 5) | class LinkHandlerFeature {
method constructor (line 6) | constructor() {
method setCore (line 15) | setCore(core) {
method init (line 22) | init() {
method processNodeWithData (line 38) | processNodeWithData(domNode, nodeDataMapOrNodeData) {
method setupDragEvents (line 206) | setupDragEvents(linkTag) {
method extractNodeText (line 305) | extractNodeText(domNode) {
method findTextContainer (line 333) | findTextContainer(nodeElement) {
method extractFileExtension (line 352) | extractFileExtension(hyperLink) {
method getLinkTagStyle (line 380) | getLinkTagStyle(extension) {
method createLinkTag (line 423) | createLinkTag(textContainer, nodeId, hyperLink, extension) {
method showDragIndicator (line 578) | showDragIndicator(startX, startY, deltaX, deltaY, initialDirection) {
method updateDragIndicator (line 707) | updateDragIndicator(startX, startY, deltaX, deltaY) {
method hideDragIndicator (line 799) | hideDragIndicator() {
method calculateDragDirection (line 815) | calculateDragDirection(deltaX, deltaY) {
method handleUrlClickWithDirection (line 838) | handleUrlClickWithDirection(url, direction) {
method setupLinkTagClickListener (line 853) | setupLinkTagClickListener() {
method handleUrlClick (line 869) | handleUrlClick(url) {
method removeAllLinkTags (line 882) | removeAllLinkTags() {
method onDataChange (line 901) | onDataChange(data) {
method validateNodeDataMap (line 927) | validateNodeDataMap() {
method buildNodeDataMapRecursive (line 950) | buildNodeDataMapRecursive(data, map) {
method isMindmapNode (line 975) | isMindmapNode(element) {
method processAllNodes (line 992) | processAllNodes() {
FILE: src/data/extra/web/js/mindmap/features/outline/outline.js
class OutlineFeature (line 5) | class OutlineFeature {
method constructor (line 6) | constructor() {
method setCore (line 32) | setCore(core) {
method init (line 42) | init() {
method createOutlineWindow (line 66) | createOutlineWindow() {
method setupWindowDrag (line 323) | setupWindowDrag(titleBar) {
method setupWindowResize (line 406) | setupWindowResize(handle) {
method setupResizeObserver (line 471) | setupResizeObserver() {
method toggleCollapse (line 520) | toggleCollapse(forceCollapse) {
method isWindowSmall (line 585) | isWindowSmall() {
method updateOutlineWindow (line 600) | updateOutlineWindow() {
method doUpdateOutlineWindow (line 631) | doUpdateOutlineWindow() {
method nodeMatchesSearch (line 672) | nodeMatchesSearch(nodeData) {
method nodeOrChildrenMatchSearch (line 679) | nodeOrChildrenMatchSearch(nodeData) {
method renderOutlineNode (line 701) | renderOutlineNode(nodeData, container, level) {
method toggleNodeCollapse (line 812) | toggleNodeCollapse(nodeId) {
method highlightOutlineNode (line 829) | highlightOutlineNode(nodeElement) {
method locateNodeInMindMap (line 867) | locateNodeInMindMap(nodeId) {
method setupDOMObserver (line 1001) | setupDOMObserver() {
method cleanupObservers (line 1076) | cleanupObservers() {
method onDataChange (line 1101) | onDataChange(data) {
method buildNodeDataMap (line 1112) | buildNodeDataMap(data) {
method buildNodeDataMapRecursive (line 1122) | buildNodeDataMapRecursive(nodeData, map) {
method destroy (line 1137) | destroy() {
FILE: src/data/extra/web/js/mindmap/lib/mind-elixir/MindElixir.js
function n (line 1) | function n(e){for(var n=-1,i=0;i<t.length;i++)if(t[i].identifier===e){n=...
function i (line 1) | function i(e,i){for(var a={},s=[],r=0;r<e.length;r++){var l=e[r],c=i.bas...
function o (line 1) | function o(e,t){var n=t.domAPI(t);n.update(e);return function(t){if(t){i...
function c (line 1) | function c(){a||(a=!0,i())}
function n (line 1) | function n(i){var o=t[i];if(void 0!==o)return o.exports;var a=t[i]={id:i...
function e (line 1) | function e(e){return e.replace(/&/g,"&").replace(/</g,"<").replac...
function s (line 1) | function s(e){if(e.id=h(),e.children)for(let t=0;t<e.children.length;t++...
function l (line 1) | function l(e,t,n,i){const o=i-t,a=e-n;let s=Math.atan(Math.abs(o)/Math.a...
function c (line 1) | function c(e,t,n){let i,o;const a=(e.cy-n)/(t-e.cx);return a>e.h/e.w||a<...
function d (line 1) | function d(e,t,n){let i,o;const a=(e.cy-n)/(t-e.cx);return a>e.h/e.w||a<...
function h (line 1) | function h(){return((new Date).getTime().toString(16)+Math.random().toSt...
function p (line 1) | function p(e){const t=e.parent.children,n=t.indexOf(e);return t.splice(n...
method onMove (line 1) | onMove(e,t){if(this.mousedown){if(this.afterMoving=!0,!this.lastX)return...
method clear (line 1) | clear(){this.afterMoving=!1,this.mousedown=!1,this.lastX=null,this.lastY...
function m (line 1) | function m(e){this.dom=e,this.mousedown=!1,this.lastX=null,this.lastY=null}
function C (line 1) | function C(e){return e.isFocusMode?e.nodeDataBackup:e.nodeData}
function j (line 1) | function j(e,t,n){let i="";const o=t.offsetTop,a=t.offsetLeft,s=t.offset...
function L (line 1) | function L({x1:e,y1:t,x2:n,y2:i}){return`M ${e} 10000 V ${i>t?i-20:i+20}...
function E (line 1) | function E({x1:e,y1:t,x2:n,y2:i}){return`M ${e} ${t} Q ${e} ${i} ${n} ${...
function S (line 1) | function S({x1:e,y1:t,x2:n,y2:i,xMiddle:o}){return i<t+50&&i>t-50?`M ${e...
function U (line 1) | function U(t,n){const i=(t,n,i)=>{const o=document.createElement("li");r...
function J (line 1) | function J(e){e.container.append(function(e){const t=document.createElem...
function s (line 1) | function s(e){try{l(i.next(e))}catch(e){a(e)}}
function r (line 1) | function r(e){try{l(i.throw(e))}catch(e){a(e)}}
function l (line 1) | function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(...
function se (line 1) | function se(e){let t,n,i;e.map.addEventListener("dragstart",(function(e)...
function ce (line 1) | function ce(){this.handlers={}}
function s (line 1) | function s(e){try{l(i.next(e))}catch(e){a(e)}}
function r (line 1) | function r(e){try{l(i.throw(e))}catch(e){a(e)}}
function l (line 1) | function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(...
function fe (line 1) | function fe({el:e,direction:t,locale:n,draggable:i,editable:o,contextMen...
function ge (line 1) | function ge(e,t){return function(...n){return pe(this,void 0,void 0,(fun...
method install (line 1) | install(e){e(this)}
method init (line 1) | init(e){if(!e||!e.nodeData)return new Error("MindElixir: `data` is requi...
FILE: src/data/extra/web/js/mindmapeditor.js
class MindMapEditor (line 11) | class MindMapEditor extends VXCore {
method constructor (line 18) | constructor() {
method initOnLoad (line 33) | initOnLoad() {
method setupFeatures (line 66) | setupFeatures() {
method generateNumericId (line 78) | generateNumericId() {
method setupEventListeners (line 85) | setupEventListeners() {
method setData (line 126) | setData(data) {
method saveData (line 137) | saveData(id) {
method getFeature (line 148) | getFeature(name) {
FILE: src/data/extra/web/js/nodelinemapper.js
class NodeLineMapper (line 2) | class NodeLineMapper {
method constructor (line 3) | constructor(p_adapter, p_container) {
method fetchAllNodesWithLineNumber (line 35) | fetchAllNodesWithLineNumber() {
method getHeadingContent (line 41) | getHeadingContent(p_node) {
method updateHeadingNodes (line 45) | updateHeadingNodes() {
method getViewYOfLine (line 68) | getViewYOfLine(p_lineNumber) {
method scrollToLine (line 84) | scrollToLine(p_lineNumber) {
method scrollToAnchor (line 101) | scrollToAnchor(p_anchor) {
method isValidY (line 109) | isValidY(p_pos) {
method scrollToY (line 114) | scrollToY(p_pos, p_smooth, p_deferred) {
method scrollToNode (line 131) | scrollToNode(p_node, p_smooth, p_deferred) {
method binarySearchNodeForLineNumber (line 145) | binarySearchNodeForLineNumber(p_nodes, p_lineNumber) {
method binarySearchTopNode (line 170) | binarySearchTopNode(p_nodes) {
method updateTopLineNumber (line 197) | updateTopLineNumber() {
method updateCurrentHeading (line 211) | updateCurrentHeading() {
method currentHeadingIndex (line 221) | currentHeadingIndex() {
method updateAfterScrollUnmuted (line 225) | updateAfterScrollUnmuted() {
FILE: src/data/extra/web/js/plantuml.js
class PlantUml (line 1) | class PlantUml extends GraphRenderer {
method constructor (line 2) | constructor() {
method registerInternal (line 23) | registerInternal() {
method initialize (line 37) | initialize(p_callback) {
method render (line 51) | render(p_node, p_format) {
method renderCodeNodes (line 58) | renderCodeNodes(p_format) {
method renderOne (line 64) | renderOne(p_node, p_idx) {
method renderText (line 86) | renderText(p_text, p_callback) {
method renderOnline (line 105) | renderOnline(p_serverUrl, p_format, p_text, p_callback) {
method getPlantUMLOnlineUrl (line 127) | getPlantUMLOnlineUrl(p_serverUrl, p_format, p_text) {
method renderLocal (line 141) | renderLocal(p_format, p_text, p_callback) {
method handlePlantUmlResult (line 152) | handlePlantUmlResult(p_node, p_format, p_result) {
FILE: src/data/extra/web/js/plantuml/synchro2.js
function encode64_ (line 3) | function encode64_(data) {
function append3bytes (line 17) | function append3bytes(b1, b2, b3) {
function encode6bit (line 30) | function encode6bit(b) {
FILE: src/data/extra/web/js/prism.js
class PrismRenderer (line 11) | class PrismRenderer extends VxWorker {
method constructor (line 12) | constructor() {
method registerInternal (line 20) | registerInternal() {
method initialize (line 26) | initialize() {
method render (line 47) | render(p_node) {
method renderCodeNodes (line 58) | renderCodeNodes(p_node) {
method hasLangSpecified (line 66) | hasLangSpecified(p_node) {
method doRender (line 77) | doRender(p_containerNode, p_nodes) {
method removeToolBar (line 97) | removeToolBar(p_containerNode) {
FILE: src/data/extra/web/js/qwebchannel.js
function QObject (line 175) | function QObject(name, data, webChannel)
FILE: src/data/extra/web/js/svg-to-image.js
class SvgToImage (line 1) | class SvgToImage {
method constructor (line 2) | constructor() {
method loadImage (line 6) | static loadImage(p_src, p_opt, p_callback) {
method svgToImage (line 38) | static svgToImage(p_svg, p_opt, p_callback) {
method getUrl (line 74) | static getUrl() {
method checkCanvasToDataURL (line 78) | static checkCanvasToDataURL(p_image) {
FILE: src/data/extra/web/js/turndown.js
class TurndownConverter (line 2) | class TurndownConverter {
method constructor (line 3) | constructor(p_adapter) {
method turndown (line 31) | turndown(p_html) {
method trimString (line 37) | trimString(p_str) {
method fixMark (line 65) | fixMark() {
method fixParagraph (line 78) | fixParagraph() {
method fixImage (line 97) | fixImage() {
FILE: src/data/extra/web/js/turndown/turndown-plugin-gfm.js
function highlightedCodeBlock (line 6) | function highlightedCodeBlock (turndownService) {
function strikethrough (line 30) | function strikethrough (turndownService) {
function isFirstRow (line 115) | function isFirstRow (tr) {
function isHeadingRow (line 126) | function isHeadingRow (tr) {
function isFirstTbody (line 138) | function isFirstTbody (element) {
function cell (line 153) | function cell (content, node) {
function tables (line 160) | function tables (turndownService) {
function taskListItems (line 170) | function taskListItems (turndownService) {
function gfm (line 181) | function gfm (turndownService) {
FILE: src/data/extra/web/js/turndown/turndown.js
function extend (line 4) | function extend (destination) {
function repeat (line 14) | function repeat (character, count) {
function isBlock (line 27) | function isBlock (node) {
function isVoid (line 36) | function isVoid (node) {
function hasVoid (line 40) | function hasVoid (node) {
function isMeaningfulWhenBlank (line 49) | function isMeaningfulWhenBlank (node) {
function hasMeaningfulWhenBlank (line 53) | function hasMeaningfulWhenBlank (node) {
function is (line 57) | function is (node, tagNames) {
function has (line 61) | function has (node, tagNames) {
function cleanAttribute (line 331) | function cleanAttribute (attribute) {
function Rules (line 339) | function Rules (options) {
function findRule (line 395) | function findRule (rules, node, options) {
function filterValue (line 403) | function filterValue (rule, node, options) {
function collapseWhitespace (line 448) | function collapseWhitespace (options) {
function remove (line 520) | function remove (node) {
function next (line 537) | function next (prev, current, isPre) {
function canParseHTMLNatively (line 555) | function canParseHTMLNatively () {
function createHTMLParser (line 571) | function createHTMLParser () {
function shouldUseActiveX (line 597) | function shouldUseActiveX () {
function RootNode (line 609) | function RootNode (input) {
function htmlParser (line 633) | function htmlParser () {
function Node (line 638) | function Node (node) {
function isBlank (line 646) | function isBlank (node) {
function flankingWhitespace (line 656) | function flankingWhitespace (node) {
function isFlankedByWhitespace (line 677) | function isFlankedByWhitespace (side, node) {
function TurndownService (line 719) | function TurndownService (options) {
function process (line 852) | function process (parentNode) {
function postProcess (line 876) | function postProcess (output) {
function replacementForNode (line 895) | function replacementForNode (node) {
function separatingNewlines (line 916) | function separatingNewlines (output, replacement) {
function join (line 925) | function join (string1, string2) {
function canConvert (line 943) | function canConvert (input) {
FILE: src/data/extra/web/js/utils.js
class Utils (line 1) | class Utils {
method constructor (line 2) | constructor() {
method parentFolder (line 5) | static parentFolder(p_path) {
method httpGet (line 10) | static httpGet(p_url, p_type, p_callback) {
method loadScript (line 22) | static loadScript(p_src, p_callback) {
method loadScripts (line 32) | static loadScripts(p_srcs, p_callback) {
method addPrefix (line 56) | static addPrefix(p_prefix, p_elements) {
method checkSourceLine (line 65) | static checkSourceLine(p_node, p_newNode) {
method replaceNodeWithPreCheck (line 73) | static replaceNodeWithPreCheck(p_node, p_newNode) {
method viewPortRect (line 83) | static viewPortRect() {
method nodeRectInContent (line 92) | static nodeRectInContent(p_node) {
method isVisible (line 103) | static isVisible(p_node) {
method headingSequenceRegExp (line 113) | static headingSequenceRegExp() {
method fetchStyleContent (line 117) | static fetchStyleContent() {
method translateCssUrlToAbsolute (line 146) | static translateCssUrlToAbsolute(p_baseUrl, p_css) {
method getUrlScheme (line 159) | static getUrlScheme(p_url) {
FILE: src/data/extra/web/js/viz.js/lite.render.js
function staticAlloc (line 7) | function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATI...
function dynamicAlloc (line 7) | function dynamicAlloc(size){assert(DYNAMICTOP_PTR);var ret=HEAP32[DYNAMI...
function alignMemory (line 7) | function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=...
function getNativeTypeSize (line 7) | function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1...
function warnOnce (line 7) | function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnc...
function dynCall (line 7) | function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynC...
function assert (line 7) | function assert(condition,text){if(!condition){abort("Assertion failed: ...
function getCFunc (line 7) | function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot ...
function ccall (line 7) | function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(id...
function setValue (line 7) | function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(...
function allocate (line 7) | function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof ...
function Pointer_stringify (line 7) | function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var ...
function UTF8ArrayToString (line 7) | function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[end...
function UTF8ToString (line 7) | function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}
function stringToUTF8Array (line 7) | function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(m...
function stringToUTF8 (line 7) | function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Arr...
function lengthBytesUTF8 (line 7) | function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){va...
function allocateUTF8 (line 7) | function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_mall...
function demangle (line 7) | function demangle(func){return func}
function demangleAll (line 7) | function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(...
function jsStackTrace (line 7) | function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new E...
function stackTrace (line 7) | function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"]...
function updateGlobalBufferViews (line 7) | function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(b...
function abortOnCannotGrowMemory (line 7) | function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. ...
function enlargeMemory (line 7) | function enlargeMemory(){abortOnCannotGrowMemory()}
function getTotalMemory (line 7) | function getTotalMemory(){return TOTAL_MEMORY}
function callRuntimeCallbacks (line 7) | function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var c...
function preRun (line 7) | function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="func...
function ensureInitRuntime (line 7) | function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitial...
function preMain (line 7) | function preMain(){callRuntimeCallbacks(__ATMAIN__)}
function exitRuntime (line 7) | function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}
function postRun (line 7) | function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="f...
function addOnPreRun (line 7) | function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}
function addOnPostRun (line 7) | function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}
function writeArrayToMemory (line 7) | function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}
function writeAsciiToMemory (line 7) | function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.le...
function getUniqueRunDependency (line 7) | function getUniqueRunDependency(id){return id}
function addRunDependency (line 7) | function addRunDependency(id){runDependencies++;if(Module["monitorRunDep...
function removeRunDependency (line 7) | function removeRunDependency(id){runDependencies--;if(Module["monitorRun...
function isDataURI (line 7) | function isDataURI(filename){return String.prototype.startsWith?filename...
function _emscripten_asm_const_iii (line 7) | function _emscripten_asm_const_iii(code,a0,a1){return ASM_CONSTS[code](a...
function ___assert_fail (line 7) | function ___assert_fail(condition,filename,line,func){abort("Assertion f...
function _emscripten_get_now (line 7) | function _emscripten_get_now(){abort()}
function _emscripten_get_now_is_monotonic (line 7) | function _emscripten_get_now_is_monotonic(){return ENVIRONMENT_IS_NODE||...
function ___setErrNo (line 7) | function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module...
function _clock_gettime (line 7) | function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()...
function ___clock_gettime (line 7) | function ___clock_gettime(){return _clock_gettime.apply(null,arguments)}
function ___lock (line 7) | function ___lock(){}
function ___map_file (line 7) | function ___map_file(pathname,size){___setErrNo(ERRNO_CODES.EPERM);retur...
function trim (line 7) | function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[sta...
function isRealDir (line 7) | function isRealDir(p){return p!=="."&&p!==".."}
function toAbsolute (line 7) | function toAbsolute(root){return(function(p){return PATH.join2(root,p)})}
function done (line 7) | function done(err){if(err){if(!done.errored){done.errored=true;return ca...
function ensureParent (line 7) | function ensureParent(path){var parts=path.split("/");var parent=root;fo...
function base (line 7) | function base(path){var parts=path.split("/");return parts[parts.length-1]}
function doCallback (line 7) | function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--...
function done (line 7) | function done(err){if(err){if(!done.errored){done.errored=true;return do...
function LazyUint8Array (line 7) | function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}
function processData (line 7) | function processData(byteArray){function finish(byteArray){if(preFinish)...
function finish (line 7) | function finish(){if(fail==0)onload();else onerror()}
function finish (line 7) | function finish(){if(fail==0)onload();else onerror()}
function ___syscall10 (line 7) | function ___syscall10(which,varargs){SYSCALLS.varargs=varargs;try{var pa...
function ___syscall140 (line 7) | function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var s...
function ___syscall145 (line 7) | function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var s...
function ___syscall146 (line 7) | function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var s...
function ___syscall192 (line 7) | function ___syscall192(which,varargs){SYSCALLS.varargs=varargs;try{var a...
function ___syscall195 (line 7) | function ___syscall195(which,varargs){SYSCALLS.varargs=varargs;try{var p...
function ___syscall197 (line 7) | function ___syscall197(which,varargs){SYSCALLS.varargs=varargs;try{var s...
function ___syscall221 (line 7) | function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var s...
function ___syscall33 (line 7) | function ___syscall33(which,varargs){SYSCALLS.varargs=varargs;try{var pa...
function ___syscall5 (line 7) | function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pat...
function ___syscall54 (line 7) | function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var st...
function ___syscall6 (line 7) | function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var str...
function ___syscall91 (line 7) | function ___syscall91(which,varargs){SYSCALLS.varargs=varargs;try{var ad...
function ___unlock (line 7) | function ___unlock(){}
function __exit (line 7) | function __exit(status){Module["exit"](status)}
function _exit (line 7) | function _exit(status){__exit(status)}
function ___buildEnvironment (line 7) | function ___buildEnvironment(env){var MAX_ENV_VALUES=64;var TOTAL_ENV_SI...
function _getenv (line 7) | function _getenv(name){if(name===0)return 0;name=Pointer_stringify(name)...
function _llvm_trap (line 7) | function _llvm_trap(){abort("trap!")}
function _longjmp (line 7) | function _longjmp(env,value){Module["setThrew"](env,value||1);throw"long...
function _emscripten_memcpy_big (line 7) | function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray...
function _setenv (line 7) | function _setenv(envname,envval,overwrite){if(envname===0){___setErrNo(E...
function _times (line 7) | function _times(buffer){if(buffer!==0){_memset(buffer,0,16)}return 0}
function intArrayFromString (line 7) | function intArrayFromString(stringy,dontAddNull,length){var len=length>0...
function intArrayToString (line 7) | function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i...
function intArrayFromBase64 (line 7) | function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE==="boolean"...
function tryParseAsDataURI (line 7) | function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}ret...
function invoke_d (line 7) | function invoke_d(index){try{return Module["dynCall_d"](index)}catch(e){...
function invoke_dddd (line 7) | function invoke_dddd(index,a1,a2,a3){try{return Module["dynCall_dddd"](i...
function invoke_i (line 7) | function invoke_i(index){try{return Module["dynCall_i"](index)}catch(e){...
function invoke_ii (line 7) | function invoke_ii(index,a1){try{return Module["dynCall_ii"](index,a1)}c...
function invoke_iii (line 7) | function invoke_iii(index,a1,a2){try{return Module["dynCall_iii"](index,...
function invoke_iiii (line 7) | function invoke_iiii(index,a1,a2,a3){try{return Module["dynCall_iiii"](i...
function invoke_iiiii (line 7) | function invoke_iiiii(index,a1,a2,a3,a4){try{return Module["dynCall_iiii...
function invoke_iiiiii (line 7) | function invoke_iiiiii(index,a1,a2,a3,a4,a5){try{return Module["dynCall_...
function invoke_iiiiiii (line 7) | function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){try{return Module["dynC...
function invoke_v (line 7) | function invoke_v(index){try{Module["dynCall_v"](index)}catch(e){if(type...
function invoke_vi (line 7) | function invoke_vi(index,a1){try{Module["dynCall_vi"](index,a1)}catch(e)...
function invoke_vii (line 7) | function invoke_vii(index,a1,a2){try{Module["dynCall_vii"](index,a1,a2)}...
function invoke_viii (line 7) | function invoke_viii(index,a1,a2,a3){try{Module["dynCall_viii"](index,a1...
function invoke_viiiddi (line 7) | function invoke_viiiddi(index,a1,a2,a3,a4,a5,a6){try{Module["dynCall_vii...
function invoke_viiii (line 7) | function invoke_viiii(index,a1,a2,a3,a4){try{Module["dynCall_viiii"](ind...
function invoke_viiiii (line 7) | function invoke_viiiii(index,a1,a2,a3,a4,a5){try{Module["dynCall_viiiii"...
function invoke_viiiiii (line 7) | function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){try{Module["dynCall_vii...
function nb (line 11) | function nb(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}
function ob (line 11) | function ob(){return l|0}
function pb (line 11) | function pb(a){a=a|0;l=a}
function qb (line 11) | function qb(a,b){a=a|0;b=b|0;l=a;m=b}
function rb (line 11) | function rb(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}
function sb (line 11) | function sb(a){a=a|0;z=a}
function tb (line 11) | function tb(){return z|0}
function ub (line 11) | function ub(a){a=a|0;c[41840]=a;return 0}
function vb (line 11) | function vb(){return c[41840]|0}
function wb (line 11) | function wb(a,b){a=a|0;b=b|0;Ia(0,a|0,b|0)|0;return}
function xb (line 11) | function xb(a){a=a|0;c[42184]=a;return}
function yb (line 11) | function yb(a){a=a|0;if(a|0)c[42179]=a;return}
function zb (line 11) | function zb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|...
function Ab (line 11) | function Ab(a){a=a|0;var d=0,e=0,f=0,g=0;g=l;l=l+16|0;d=g+4|0;e=g;f=c[(c...
function Bb (line 11) | function Bb(a){a=a|0;var b=0,d=0,e=0,f=0;d=c[(c[a+16>>2]|0)+8>>2]|0;if(!...
function Cb (line 11) | function Cb(b){b=b|0;var d=0,e=0;d=c[41845]|0;if((d|0)!=(c[41844]|0)){e=...
function Db (line 11) | function Db(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=_I(8240)|...
function Eb (line 11) | function Eb(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+1040|0;h=j;...
function Fb (line 11) | function Fb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;d=c[c[41876]...
function Gb (line 11) | function Gb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;b=c[41849]|0...
function Hb (line 11) | function Hb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;b=c[41849]|0...
function Ib (line 11) | function Ib(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function Jb (line 11) | function Jb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;i=l;l=l+1040|0;...
function Kb (line 11) | function Kb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Nb(a);Ob(a);if(!d)Pb(a,112,...
function Lb (line 11) | function Lb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Nb(a);Ob(a)...
function Mb (line 11) | function Mb(a,b,c){a=a|0;b=b|0;c=c|0;Nb(a);Ob(a);Pb(a,76,b,c);return}
function Nb (line 11) | function Nb(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+1...
function Ob (line 11) | function Ob(a){a=a|0;Tb((c[a+16>>2]|0)+16|0);Ub(a,68667,173886);return}
function Pb (line 11) | function Pb(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=l...
function Qb (line 11) | function Qb(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+1024|0;d=c;Rb(d,+h[b>>3...
function Rb (line 11) | function Rb(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;h[d>>3]=b>-1.0e...
function Sb (line 11) | function Sb(b,c){b=b|0;c=c|0;var d=0,e=0;d=XJ(b,46)|0;if(!d){if(c|0){d=b...
function Tb (line 11) | function Tb(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+32|0;i=j+16|0;h...
function Ub (line 11) | function Ub(a,b,d){a=a|0;b=b|0;d=d|0;Vb(c[11344+(c[(c[a+16>>2]|0)+12>>2]...
function Vb (line 11) | function Vb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+1040|0;...
function Wb (line 11) | function Wb(b,d,f,i){b=b|0;d=d|0;f=f|0;i=i|0;var j=0.0,k=0,m=0.0,n=0.0,o...
function Xb (line 11) | function Xb(a){a=a|0;Tb((c[a+16>>2]|0)+56|0);Ub(a,59728,173886);return}
function Yb (line 11) | function Yb(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+1024|0;d=c;Rb(d,b);gm(a,...
function Zb (line 11) | function Zb(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0;d=l;l=l+1040|0;f=d;e...
function _b (line 11) | function _b(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0;e=l;l=l+104...
function $b (line 11) | function $b(a){a=a|0;var b=0;switch(c[a+64>>2]|0){case 0:{b=zr(c[a>>2]|0...
function ac (line 11) | function ac(b){b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;e=c[(c[b+16>>2...
function bc (line 11) | function bc(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[a>>2]&-9;d=Kp(a)|0;while(...
function cc (line 11) | function cc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0...
function dc (line 11) | function dc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((to(a)|0)!=(a|0)){e=b+1|...
function ec (line 11) | function ec(a,b){a=a|0;b=b|0;a=bb[c[a>>2]&31](a,b,512)|0;if(!a)a=-1;else...
function fc (line 11) | function fc(a,b){a=a|0;b=b|0;while(1){if((b|0)<=0)break;nr(a,60598)|0;b=...
function gc (line 11) | function gc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=l...
function hc (line 11) | function hc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0...
function ic (line 11) | function ic(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l...
function jc (line 11) | function jc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=eo(a)...
function kc (line 11) | function kc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=eo(a)...
function lc (line 11) | function lc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l...
function mc (line 11) | function mc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l...
function nc (line 11) | function nc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+4|0;if(a[g>>0]|0)b=zB(b...
function oc (line 11) | function oc(a,b,c){a=a|0;b=b|0;c=c|0;cc(a,b,0,c);a=Kp(a)|0;while(1){if(!...
function pc (line 11) | function pc(b){b=b|0;var c=0;c=b+1|0;a:do if((a[b>>0]|0)==95){b=(a[c>>0]...
function qc (line 11) | function qc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=...
function rc (line 11) | function rc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0...
function sc (line 11) | function sc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0.0;j=l;l=l+4...
function tc (line 11) | function tc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0;e=l;l=l+32|0;...
function uc (line 11) | function uc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0;e=l;l=l...
function vc (line 11) | function vc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0...
function wc (line 11) | function wc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;e=...
function xc (line 11) | function xc(a,b,d){a=a|0;b=b|0;d=d|0;$I(c[b+8>>2]|0);$I(b);return}
function yc (line 11) | function yc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=...
function zc (line 11) | function zc(a){a=a|0;nr(a,61437)|0;return}
function Ac (line 11) | function Ac(a){a=a|0;c[41896]=2;return}
function Bc (line 11) | function Bc(a){a=a|0;c[41896]=1;return}
function Cc (line 11) | function Cc(a){a=a|0;c[41896]=2;return}
function Dc (line 11) | function Dc(a){a=a|0;c[41896]=0;return}
function Ec (line 11) | function Ec(a){a=a|0;c[41896]=2;return}
function Fc (line 11) | function Fc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0.0,m=0,n...
function Gc (line 11) | function Gc(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l...
function Hc (line 11) | function Hc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0...
function Ic (line 11) | function Ic(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0,k=0,m...
function Jc (line 11) | function Jc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0...
function Kc (line 11) | function Kc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n...
function Lc (line 11) | function Lc(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;tr(a...
function Mc (line 11) | function Mc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){cas...
function Nc (line 11) | function Nc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m...
function Oc (line 11) | function Oc(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0...
function Pc (line 11) | function Pc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[41...
function Qc (line 11) | function Qc(b){b=b|0;var d=0,e=0,f=0;e=c[b+16>>2]|0;switch(c[b+64>>2]|0)...
function Rc (line 11) | function Rc(a){a=a|0;var b=0;b=c[a+16>>2]|0;switch(c[a+64>>2]|0){case 2:...
function Sc (line 11) | function Sc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=c[a+16>>2...
function Tc (line 11) | function Tc(b,d,e,f,g,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k...
function Uc (line 11) | function Uc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=...
function Vc (line 11) | function Vc(a){a=a|0;nr(a,61437)|0;return}
function Wc (line 11) | function Wc(a){a=a|0;c[41902]=2;return}
function Xc (line 11) | function Xc(a){a=a|0;c[41902]=1;return}
function Yc (line 11) | function Yc(a){a=a|0;c[41902]=2;return}
function Zc (line 11) | function Zc(a){a=a|0;c[41902]=0;return}
function _c (line 11) | function _c(a){a=a|0;c[41902]=2;return}
function $c (line 11) | function $c(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0,m=0,n=0...
function ad (line 11) | function ad(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l...
function bd (line 11) | function bd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0...
function cd (line 11) | function cd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0,k=0,m...
function dd (line 11) | function dd(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0...
function ed (line 11) | function ed(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n...
function fd (line 11) | function fd(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;tr(a...
function gd (line 11) | function gd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){cas...
function hd (line 11) | function hd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m...
function id (line 11) | function id(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0...
function jd (line 11) | function jd(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[41...
function kd (line 11) | function kd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;b=d;nr(a,66165...
function ld (line 11) | function ld(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g+8|0;e=g;nr...
function md (line 11) | function md(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l...
function nd (line 11) | function nd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;b=l;l=l+16|0;f=b;c[...
function od (line 11) | function od(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function pd (line 11) | function pd(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=a+12|0;if(c[(c[b...
function qd (line 11) | function qd(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=En(c[(c[a+16>>...
function rd (line 11) | function rd(a){a=a|0;nr(a,77394)|0;return}
function sd (line 11) | function sd(a){a=a|0;nr(a,61951)|0;return}
function td (line 11) | function td(a){a=a|0;nr(a,77394)|0;return}
function ud (line 11) | function ud(a){a=a|0;nr(a,61951)|0;return}
function vd (line 11) | function vd(a){a=a|0;nr(a,77394)|0;return}
function wd (line 11) | function wd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;e=l;l=l+16|...
function xd (line 11) | function xd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,m=0,n=0;m...
function yd (line 11) | function yd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;c[...
function zd (line 11) | function zd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l...
function Ad (line 11) | function Ad(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0...
function Bd (line 11) | function Bd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;g=l;l=l+16|0;f=...
function Cd (line 11) | function Cd(a,b){a=a|0;b=b|0;nr(a,61682)|0;nr(a,b)|0;nr(a,134901)|0;return}
function Dd (line 11) | function Dd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0...
function Ed (line 11) | function Ed(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;f=l;l=l+32|0;e=...
function Fd (line 11) | function Fd(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;k=...
function Gd (line 11) | function Gd(b){b=b|0;var d=0;nr(b,67671)|0;d=Jm(c[(c[b>>2]|0)+168>>2]|0,...
function Hd (line 11) | function Hd(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0;i=l;l=l+4...
function Id (line 11) | function Id(a){a=a|0;nr(a,67498)|0;return}
function Jd (line 11) | function Jd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;ee(a,b,0,86583,c[(c[a+16>>2...
function Kd (line 11) | function Kd(a){a=a|0;nr(a,67346)|0;return}
function Ld (line 11) | function Ld(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=c[b+16>>2]|0...
function Md (line 11) | function Md(a){a=a|0;nr(a,67346)|0;return}
function Nd (line 11) | function Nd(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=d+8|0;ee(a,c[d+212>>2]...
function Od (line 11) | function Od(a){a=a|0;nr(a,67346)|0;return}
function Pd (line 11) | function Pd(a){a=a|0;var b=0,d=0,e=0;d=c[a+16>>2]|0;b=c[a+160>>2]|0;if((...
function Qd (line 11) | function Qd(a){a=a|0;nr(a,67346)|0;return}
function Rd (line 11) | function Rd(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=d+8|0;ee(a,c[d+212>>2]...
function Sd (line 11) | function Sd(a){a=a|0;nr(a,67346)|0;return}
function Td (line 11) | function Td(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;nr(b,67352)|0;if(f|...
function Ud (line 11) | function Ud(a){a=a|0;nr(a,69176)|0;nr(a,67346)|0;return}
function Vd (line 11) | function Vd(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0...
function Wd (line 11) | function Wd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;switch(c|0){case 2:{d=be(a,...
function Xd (line 11) | function Xd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;switch(d|0){case 2:...
function Yd (line 11) | function Yd(a,d,e,f,g,h){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;g=c[a+16>>2...
function Zd (line 11) | function Zd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;nr(a,66237)|0;$d(a,0,0);nr(...
function _d (line 11) | function _d(a,b){a=a|0;b=b|0;nr(a,66231)|0;nr(a,sw(b)|0)|0;nr(a,68291)|0...
function $d (line 11) | function $d(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0...
function ae (line 11) | function ae(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do s...
function be (line 11) | function be(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p...
function ce (line 11) | function ce(b){b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q...
function de (line 11) | function de(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;i=l;l=l+16|0;g=...
function ee (line 11) | function ee(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l...
function fe (line 11) | function fe(a){a=a|0;var b=0;nr(a,68251)|0;b=a+12|0;nr(a,pe(c[c[c[b>>2]>...
function ge (line 11) | function ge(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=c[b+16>>2]|0;nr(...
function he (line 11) | function he(a){a=a|0;c[41909]=1;return}
function ie (line 11) | function ie(a){a=a|0;c[41909]=-1;return}
function je (line 11) | function je(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0;n=l...
function ke (line 11) | function ke(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0.0,m=0.0...
function le (line 11) | function le(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l...
function me (line 11) | function me(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0...
function ne (line 11) | function ne(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|...
function oe (line 11) | function oe(a,b){a=a|0;b=b|0;nr(a,67971)|0;nr(a,pe(b)|0)|0;nr(a,134901)|...
function pe (line 11) | function pe(a){a=a|0;return a|0}
function qe (line 11) | function qe(b){b=b|0;if(!(a[b+144>>0]|0))nr(b,68096)|0;else nr(b,c[b+148...
function re (line 11) | function re(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do s...
function se (line 11) | function se(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=c[a+...
function te (line 11) | function te(a){a=a|0;var b=0;nr(a,70986)|0;nr(a,70994)|0;b=a+12|0;nr(a,E...
function ue (line 11) | function ue(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;i=j+24|0;g...
function ve (line 11) | function ve(a){a=a|0;nr(a,69224)|0;nr(a,69236)|0;nr(a,69244)|0;nr(a,6930...
function we (line 11) | function we(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l...
function xe (line 11) | function xe(a){a=a|0;nr(a,69176)|0;return}
function ye (line 11) | function ye(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0...
function ze (line 11) | function ze(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m...
function Ae (line 11) | function Ae(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0.0,j=0,k=0...
function Be (line 11) | function Be(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;f=l...
function Ce (line 11) | function Ce(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0.0;k...
function De (line 11) | function De(a,b){a=a|0;b=b|0;nr(a,68279)|0;nr(a,Ee(b)|0)|0;nr(a,68291)|0...
function Ee (line 11) | function Ee(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function Fe (line 11) | function Fe(b){b=b|0;var c=0,d=0;d=b+1|0;c=a[d>>0]|0;a:do if(c<<24>>24==...
function Ge (line 11) | function Ge(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;k=l;l=l+48|0;...
function He (line 11) | function He(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do s...
function Ie (line 11) | function Ie(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+48|0;f=g;if(!b)...
function Je (line 11) | function Je(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0;i=l...
function Ke (line 11) | function Ke(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;nr(a,73284...
function Le (line 11) | function Le(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0;b=l;l=l+64|...
function Me (line 11) | function Me(a){a=a|0;nr(a,72220)|0;return}
function Ne (line 11) | function Ne(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0;f=l;l=l+16|0;h=...
function Oe (line 11) | function Oe(a){a=a|0;nr(a,72173)|0;return}
function Pe (line 11) | function Pe(a){a=a|0;nr(a,72155)|0;return}
function Qe (line 11) | function Qe(a){a=a|0;nr(a,72139)|0;return}
function Re (line 11) | function Re(a){a=a|0;nr(a,72118)|0;g[41914]=+g[41914]+-2.0;return}
function Se (line 11) | function Se(a){a=a|0;nr(a,72099)|0;return}
function Te (line 11) | function Te(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=En(c[(c[a+16>>...
function Ue (line 11) | function Ue(a){a=a|0;nr(a,72061)|0;return}
function Ve (line 11) | function Ve(a){a=a|0;nr(a,72043)|0;g[41914]=+g[41914]+-5.0;return}
function We (line 11) | function We(a){a=a|0;nr(a,72027)|0;g[41914]=+g[41914]+5.0;return}
function Xe (line 11) | function Xe(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p...
function Ye (line 11) | function Ye(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,i=0.0,j=0.0,k=0.0,m=0,n...
function Ze (line 11) | function Ze(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0...
function _e (line 11) | function _e(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0...
function $e (line 11) | function $e(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0...
function af (line 11) | function af(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;tr(a...
function bf (line 11) | function bf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+105...
function cf (line 11) | function cf(a,b,e){a=a|0;b=b|0;e=+e;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,...
function df (line 11) | function df(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=...
function ef (line 11) | function ef(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=73927;tr(a,764...
function ff (line 11) | function ff(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o...
function gf (line 11) | function gf(a){a=a|0;var b=0;b=l;l=l+16|0;tr(a,74107,b);l=b;return}
function hf (line 11) | function hf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0,m=0,n...
function jf (line 11) | function jf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0...
function kf (line 11) | function kf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;e=l;l=l+16|0;of(c[a+16>>2]|...
function lf (line 11) | function lf(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0...
function mf (line 11) | function mf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=l;l=l+16|0;of(c[a+16>>2]|...
function nf (line 11) | function nf(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=73927;...
function of (line 11) | function of(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){cas...
function pf (line 11) | function pf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m...
function qf (line 11) | function qf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;a:while(1)...
function rf (line 11) | function rf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[41...
function sf (line 11) | function sf(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=74088;c[b+4>>2]=76485...
function tf (line 11) | function tf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0...
function uf (line 11) | function uf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k...
function vf (line 11) | function vf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}
function wf (line 11) | function wf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0,k=0...
function xf (line 11) | function xf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0...
function yf (line 11) | function yf(a){a=a|0;oJ(c[a+52>>2]|0,c[a+56>>2]|0)|0;return}
function zf (line 11) | function zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+80|0;f=...
function Af (line 11) | function Af(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0...
function Bf (line 11) | function Bf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0...
function Cf (line 11) | function Cf(a){a=a|0;var b=0,c=0;b=eo(a)|0;while(1){if(!b)break;Df(b);b=...
function Df (line 11) | function Df(a){a=a|0;var b=0,d=0;Oo(a,122241,304,1)|0;XA(a);LB(a,c[(c[(s...
function Ef (line 11) | function Ef(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;Oo(d,122254,176,1)|0;YA(d)|...
function Ff (line 11) | function Ff(a){a=a|0;var b=0,d=0;Gf(c[(c[a+16>>2]|0)+192>>2]|0);d=eo(a)|...
function Gf (line 11) | function Gf(b){b=b|0;var d=0,e=0,f=0,g=0;while(1){if(!b)break;f=b+16|0;g...
function Hf (line 11) | function Hf(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;b=c[e>>2]|0;d=c[b+172>>2]|...
function If (line 11) | function If(a){a=a|0;var d=0,e=0,f=0;d=Kp(a)|0;while(1){if(!d)break;If(d...
function Jf (line 11) | function Jf(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;d=c[e>>2]|0;b=c[d+176>>2]|...
function Kf (line 11) | function Kf(a){a=a|0;if(nn(a)|0)Lf(a);ay(a);return}
function Lf (line 11) | function Lf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+48|0;g=h+32|0;f...
function Mf (line 11) | function Mf(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l...
function Nf (line 11) | function Nf(b,d){b=b|0;d=d|0;var e=0,f=0;Oo(b,122277,280,1)|0;e=ww(96)|0...
function Of (line 11) | function Of(a){a=a|0;var b=0,d=0,e=0;b=ww((nn(a)|0)<<4)|0;d=eo(a)|0;whil...
function Pf (line 11) | function Pf(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[(c[(eo(a)|0)+16>>2]|0)+132>...
function Qf (line 11) | function Qf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=0;f=0;whi...
function Rf (line 11) | function Rf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;Oo(d,122277,280,1)|0;g=d+16...
function Sf (line 11) | function Sf(a,b){a=a|0;b=b|0;if((to(a)|0)!=(a|0))Oo(a,122277,280,1)|0;if...
function Tf (line 11) | function Tf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l...
function Uf (line 11) | function Uf(a){a=a|0;var b=0,c=0,d=0;c=Jp(a,79522,0)|0;if(c|0){b=eo(c)|0...
function Vf (line 11) | function Vf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=c[(c[b+16...
function Wf (line 11) | function Wf(a){a=a|0;return c[(c[(to(a)|0)+16>>2]|0)+188>>2]|0}
function Xf (line 11) | function Xf(b,c){b=b|0;c=c|0;var d=0;d=a[b+28>>0]|0;if(a[c+28>>0]|0)if(d...
function Yf (line 11) | function Yf(a){a=a|0;Zf(a,1);return}
function Zf (line 11) | function Zf(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0...
function _f (line 11) | function _f(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=eo(a)|0;while(1){if(!b)brea...
function $f (line 11) | function $f(b){b=b|0;var d=0,e=0,f=0,g=0;d=(c[b+16>>2]|0)+192|0;a:while(...
function ag (line 11) | function ag(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;do if(!d){g=c[b>>2]...
function bg (line 11) | function bg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function cg (line 11) | function cg(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;f=b+16|0;d=c[f>>2]|0;if...
function dg (line 11) | function dg(a){a=a|0;var b=0,d=0;while(1){b=c[a+16>>2]|0;d=c[b+172>>2]|0...
function eg (line 11) | function eg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var...
function fg (line 11) | function fg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var...
function gg (line 11) | function gg(a){a=a|0;var b=0,d=0,e=0;b=eo(a)|0;while(1){if(!b)break;d=Qm...
function hg (line 11) | function hg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[a+4>>2]|0;g=xw(f*48|0)|...
function ig (line 11) | function ig(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=c[a+4>>2]|0;h=xw(...
function jg (line 11) | function jg(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,m...
function kg (line 11) | function kg(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k...
function lg (line 11) | function lg(b){b=b|0;b=c[b+16>>2]|0;if((a[b+156>>0]|0)==1)if((c[b+176>>2...
function mg (line 11) | function mg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=l;l=l+32|0;f=g...
function ng (line 11) | function ng(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0...
function og (line 11) | function og(b){b=b|0;var d=0,e=0;b=c[b+16>>2]|0;e=b+16|0;d=0;while(1){b=...
function pg (line 11) | function pg(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0...
function qg (line 11) | function qg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[e>>2]|0;whi...
function rg (line 11) | function rg(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0,l=0,m=0;m=d...
function sg (line 11) | function sg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a+16>>2]|0;h[a+16>>3]=+...
function tg (line 11) | function tg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=c...
function ug (line 11) | function ug(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=c...
function vg (line 11) | function vg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0,k=0,l=0,m...
function wg (line 11) | function wg(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h...
function xg (line 11) | function xg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0...
function yg (line 11) | function yg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;d=c[d+16>>2]|0;...
function zg (line 11) | function zg(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0;d=c[a+16>>2]|0;a=c[b+16...
function Ag (line 11) | function Ag(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=c[b+1...
function Bg (line 11) | function Bg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];...
function Cg (line 11) | function Cg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b...
function Dg (line 11) | function Dg(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0...
function Eg (line 11) | function Eg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0...
function Fg (line 11) | function Fg(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j...
function Gg (line 11) | function Gg(a,d,e,f,g,i,j,k){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k...
function Hg (line 11) | function Hg(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var...
function Ig (line 11) | function Ig(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var...
function Jg (line 11) | function Jg(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}
function Kg (line 11) | function Kg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var...
function Lg (line 11) | function Lg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0;g=l;l=l+16|0;f=...
function Mg (line 11) | function Mg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;a=oo(a,En(...
function Ng (line 11) | function Ng(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=bn(a,b,c,0,1)|0;Oo(c,1222...
function Og (line 11) | function Og(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0;i=l;l...
function Pg (line 11) | function Pg(a,b){a=a|0;b=b|0;c[42234]=c[b>>2];c[42238]=c[b+4>>2];c[42239...
function Qg (line 11) | function Qg(a,b){a=a|0;b=b|0;c[b>>2]=c[42234];c[b+4>>2]=c[42238];c[b+8>>...
function Rg (line 11) | function Rg(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0;d=c[(c[(c[a...
function Sg (line 11) | function Sg(a){a=a|0;var b=0,d=0,e=0;while(1){b=c[(c[a+16>>2]|0)+116>>2]...
function Tg (line 11) | function Tg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|...
function Ug (line 11) | function Ug(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[b+4>>2]|0;a...
function Vg (line 11) | function Vg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|...
function Wg (line 11) | function Wg(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+48|0;d=c[(c[((c[a>>2]&3|0)=...
function Xg (line 11) | function Xg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=a+4|0;f=c[e>>...
function Yg (line 11) | function Yg(a){a=a|0;if(!a)ma(78393,78403,117,78412);else{Xg((c[(c[((c[a...
function Zg (line 11) | function Zg(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+48|0;d=c[(c[((c[a>>2]&3|0)=...
function _g (line 11) | function _g(a){a=a|0;$g(a,(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16...
function $g (line 11) | function $g(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=b+4|0;e=c[h>>2]|0...
function ah (line 11) | function ah(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0...
function bh (line 11) | function bh(a,b,c){a=a|0;b=b|0;c=c|0;return Wg(ah(a,b,c)|0)|0}
function ch (line 11) | function ch(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a=(c[a+16>>2]|0)+192|0;f=c[...
function dh (line 11) | function dh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if((a|0)==(b|0))ma(78455,78...
function eh (line 11) | function eh(a,b){a=a|0;b=b|0;var d=0,e=0;if(!(fh(a,b)|0))ma(78494,78403,...
function fh (line 11) | function fh(a,b){a=a|0;b=b|0;a=(c[a+16>>2]|0)+192|0;while(1){a=c[a>>2]|0...
function gh (line 11) | function gh(b){b=b|0;var d=0,e=0,f=0,g=0;d=ww(64)|0;c[d>>2]=c[d>>2]&-4|1...
function hh (line 11) | function hh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=d+48|0;e=c[(c[((c[d>>...
function ih (line 11) | function ih(a){a=a|0;var b=0,d=0;if(!a)ma(78393,78403,269,78532);b=c[(c[...
function jh (line 11) | function jh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;d=(c[a+16>>2]|...
function kh (line 11) | function kh(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0;f=(c[d+16>>2]|0)+170|0;...
function lh (line 11) | function lh(d){d=d|0;var e=0,f=0,g=0,h=0;f=d+16|0;e=c[(c[f>>2]|0)+172>>2...
function mh (line 11) | function mh(a,d){a=a|0;d=d|0;var f=0;f=c[d+16>>2]|0;d=c[a+16>>2]|0;a=d+1...
function nh (line 11) | function nh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(!a)ma(78393,78403,128,78...
function oh (line 11) | function oh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0...
function ph (line 11) | function ph(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=0;h=e...
function qh (line 11) | function qh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=c...
function rh (line 11) | function rh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=0;while(1){e=uh(a...
function sh (line 11) | function sh(a,b){a=a|0;b=b|0;return (c[a>>2]|0)-(c[b>>2]|0)|0}
function th (line 11) | function th(a){a=a|0;var b=0,c=0;b=eo(a)|0;while(1){if(!b)break;c=fo(a,b...
function uh (line 11) | function uh(a,b){a=a|0;b=b|0;var c=0;c=eo(b)|0;while(1){if(!c){c=0;break...
function vh (line 11) | function vh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;wh(b);i=b+16|0;f=0;...
function wh (line 11) | function wh(d){d=d|0;var e=0;if(0)yA();a[173897]=0;c[41927]=d;e=((on(Wf(...
function xh (line 11) | function xh(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;a=c[a+16>>2]|0;c[a+192>>2]=...
function yh (line 11) | function yh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0...
function zh (line 11) | function zh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function Ah (line 11) | function Ah(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;Tk(a);Ih(a);Jh(a);Kh(a)...
function Bh (line 11) | function Bh(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0...
function Ch (line 11) | function Ch(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=a+16|0;d=1;wh...
function Dh (line 11) | function Dh(a){a=a|0;if(a|0){$I(c[a+8>>2]|0);$I(a)}return}
function Eh (line 11) | function Eh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=b;while(1){b=Fh(b,c)|...
function Fh (line 11) | function Fh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!a)ma(78703,78628,10...
function Gh (line 11) | function Gh(b,d){b=b|0;d=d|0;if(!(a[(c[d+16>>2]|0)+156>>0]|0))b=(Co(b,d)...
function Hh (line 11) | function Hh(b,d){b=b|0;d=d|0;var e=0,f=0;d=c[d+16>>2]|0;if(((a[d+156>>0]...
function Ih (line 11) | function Ih(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=c[42185]|0;a:do ...
function Jh (line 11) | function Jh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;e=c[k>>2]|...
function Kh (line 11) | function Kh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0...
function Lh (line 11) | function Lh(a){a=a|0;var d=0,e=0;e=a+16|0;a=c[e>>2]|0;a:do if(c[a+268>>2...
function Mh (line 11) | function Mh(a,b){a=a|0;b=b|0;if((c[(c[b+16>>2]|0)+156>>2]|0)!=0?(Ph(a,c[...
function Nh (line 11) | function Nh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0...
function Oh (line 11) | function Oh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=c...
function Ph (line 11) | function Ph(a,b){a=a|0;b=b|0;var c=0;c=Gh(a,b)|0;return Hh(a,b)|0|c|0}
function Qh (line 11) | function Qh(a,b){a=a|0;b=b|0;var d=0;d=ww(12)|0;c[d>>2]=a;c[d+4>>2]=b;c[...
function Rh (line 11) | function Rh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0...
function Sh (line 11) | function Sh(a,b){a=a|0;b=b|0;var c=0;c=eo(a)|0;while(1){if(!c)break;Uh(a...
function Th (line 11) | function Th(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g;d=eo(b)|0;...
function Uh (line 11) | function Uh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[41926]|...
function Vh (line 11) | function Vh(a){a=a|0;var b=0;while(1){b=c[(c[a+16>>2]|0)+116>>2]|0;if(!b...
function Wh (line 11) | function Wh(a,b){a=a|0;b=b|0;return ((c[c[a>>2]>>2]|0)>>>4)-((c[c[b>>2]>...
function Xh (line 11) | function Xh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=c[a+16>>2]|0;g=f+...
function Yh (line 11) | function Yh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=c[41927]|0;j=i+16|0;f...
function Zh (line 11) | function Zh(a){a=a|0;var d=0,e=0,f=0,g=0,i=0,j=0;a=c[a+16>>2]|0;g=b[a+23...
function _h (line 11) | function _h(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function $h (line 11) | function $h(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=d+16|...
function ai (line 11) | function ai(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=((d|0)%4|0|0)<2&1;e=c[a+1...
function bi (line 11) | function bi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;g=c[k>...
function ci (line 11) | function ci(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0...
function di (line 11) | function di(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=c[d+1...
function ei (line 11) | function ei(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;l=a...
function fi (line 11) | function fi(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;l=a...
function gi (line 11) | function gi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0...
function hi (line 11) | function hi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[a+16>>2]|0;e=c[...
function ii (line 11) | function ii(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0...
function ji (line 11) | function ji(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,i=0.0,j=0,k=0,l=0,m=0,n=0,o...
function ki (line 11) | function ki(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0...
function li (line 11) | function li(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;g=c[a+16>>2]|0;if((c[g+20...
function mi (line 11) | function mi(a,b){a=a|0;b=b|0;return (c[(c[(c[a>>2]|0)+16>>2]|0)+236>>2]|...
function ni (line 11) | function ni(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0...
function oi (line 11) | function oi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=d+16|0;a:do if(!e...
function pi (line 11) | function pi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function qi (line 11) | function qi(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;n=(...
function ri (line 11) | function ri(a){a=a|0;var b=0.0,d=0.0;c[41930]=8;c[42181]=24;h[20878]=.99...
function si (line 11) | function si(a){a=a|0;var d=0,e=0;e=(b[(c[a+16>>2]|0)+238>>1]|0)+2|0;d=ww...
function Vq (line 12) | function Vq(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=(b|0)==2;d=(c[42039]|0)+2...
function Wq (line 12) | function Wq(a){a=a|0;Xq(c[a>>2]|0);c[a+4>>2]=0;c[a>>2]=0;return}
function Xq (line 12) | function Xq(a){a=a|0;var b=0;while(1){if(!a)break;b=c[a+12>>2]|0;switch(...
function Yq (line 12) | function Yq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+1040|0;f=h;...
function Zq (line 12) | function Zq(a,b){a=a|0;b=b|0;return Tq(259,a,b)|0}
function _q (line 12) | function _q(a){a=a|0;return Tq(265,a,0)|0}
function $q (line 12) | function $q(a){a=a|0;return Tq(262,a,0)|0}
function ar (line 12) | function ar(a){a=a|0;var b=0,d=0;b=(c[42039]|0)+24|0;while(1){b=c[b>>2]|...
function br (line 12) | function br(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=d+4|0;a:do if((c[...
function cr (line 12) | function cr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;d=bn(c[c[42...
function dr (line 12) | function dr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(d|0){e=zm(c[c[42039]>>2]...
function er (line 12) | function er(a,b,d){a=a|0;b=b|0;d=d|0;c[42007]=b;c[42038]=a;c[41987]=0;a=...
function fr (line 12) | function fr(a,b){a=a|0;b=b|0;return er(0,a,b)|0}
function gr (line 12) | function gr(a,b){a=a|0;b=b|0;b=Kr(a,1,b)|0;if(!b)b=999;else{b=c[b+16>>2]...
function hr (line 12) | function hr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=...
function ir (line 12) | function ir(a,b){a=a|0;b=b|0;var d=0,e=0;if(Oo(b,122277,0,1)|0){d=b+16|0...
function jr (line 12) | function jr(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=...
function kr (line 12) | function kr(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+112|0;e=h;g=h+4...
function lr (line 12) | function lr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=...
function mr (line 12) | function mr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0...
function nr (line 12) | function nr(a,b){a=a|0;b=b|0;var c=0;c=sJ(b)|0;b=(lr(a,b,c)|0)==(c|0);re...
function or (line 12) | function or(b,c){b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;a[e>>0]=c;b=(l...
function pr (line 12) | function pr(b){b=b|0;var d=0;d=c[b+36>>2]|0;if(((d|0)!=0?(a[b+144>>0]|0)...
function qr (line 12) | function qr(a){a=a|0;var b=0,d=0;b=c[a+76>>2]|0;if(b|0?(d=c[b+4>>2]|0,d|...
function rr (line 12) | function rr(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=c[a+76>>2]|0;if(c[a+...
function sr (line 12) | function sr(b){b=b|0;var d=0,e=0,f=0;d=b+32|0;if((c[d>>2]|0?(e=b+36|0,f=...
function tr (line 12) | function tr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+105...
function ur (line 12) | function ur(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=vr(e,b)|0...
function vr (line 12) | function vr(b,d){b=b|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!(d<-...
function wr (line 12) | function wr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=vr(e,+h[...
function xr (line 12) | function xr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=...
function yr (line 12) | function yr(a,b){a=a|0;b=b|0;var d=0;d=ww(392)|0;if(d|0){c[d>>2]=19212;c...
function zr (line 12) | function zr(a){a=a|0;var b=0,d=0,e=0,f=0;b=ww(392)|0;d=b;e=a;f=d+40|0;do...
function Ar (line 12) | function Ar(a){a=a|0;Hr(a);$I(a);return}
function Br (line 12) | function Br(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+160|0;d=c[e>>2]|0;if(d){e=c...
function Cr (line 12) | function Cr(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+160|0;d=c[e>>2]|0;if(d){e=c...
function Dr (line 12) | function Dr(a){a=a|0;var b=0;b=c[a+160>>2]|0;c[a+164>>2]=b;return b|0}
function Er (line 12) | function Er(a){a=a|0;var b=0,d=0,e=0;a=a+164|0;b=c[a>>2]|0;d=c[b+4>>2]|0...
function Fr (line 12) | function Fr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+8|0;f=b+10|0;if((c[...
function Gr (line 12) | function Gr(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0)$I(b);c[a>>2]=0;c[a+8>>2...
function Hr (line 12) | function Hr(a){a=a|0;var b=0,d=0,e=0;d=a+160|0;b=c[d>>2]|0;while(1){if(!...
function Ir (line 12) | function Ir(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0...
function Jr (line 12) | function Jr(a,b){a=a|0;b=b|0;b=l;l=l+16|0;$l(1,83366,b)|0;l=b;return 0}
function Kr (line 12) | function Kr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0...
function Lr (line 12) | function Lr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;do if(!e)e=0;el...
function Mr (line 12) | function Mr(b){b=b|0;var d=0;if(!b)ma(96030,83414,573,83428);if(!(a[b>>0...
function Nr (line 12) | function Nr(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=...
function Or (line 12) | function Or(b){b=b|0;var d=0,e=0;if(a[b+17>>0]|0?(d=b+20|0,e=c[d>>2]|0,e...
function Pr (line 12) | function Pr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0;if(!b){e=-1;d=-...
function Qr (line 12) | function Qr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0.0;m...
function Rr (line 12) | function Rr(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=f;if(!a)ma(96030...
function Sr (line 12) | function Sr(a){a=a|0;var b=0;b=c[a+8>>2]|0;if(b|0)cp(0,b)|0;$I(a);return}
function Tr (line 12) | function Tr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+224|0;f...
function Ur (line 12) | function Ur(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48...
function Vr (line 12) | function Vr(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48...
function Wr (line 12) | function Wr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;b=h+12|0;d...
function Xr (line 12) | function Xr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l...
function Yr (line 12) | function Yr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l...
function Zr (line 12) | function Zr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;b=g+4|0;d=...
function _r (line 12) | function _r(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0...
function $r (line 12) | function $r(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0.0;d=l;l=l+32|0;b=d;c[a+48...
function as (line 12) | function as(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48...
function bs (line 12) | function bs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;c[d>>2]=0;e=0;while(1){...
function cs (line 12) | function cs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+1040|0;d=h;...
function ds (line 12) | function ds(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+1024|0;f=g;es(b);e=...
function es (line 12) | function es(b){b=b|0;var d=0;d=c[b>>2]|0;while(1){d=a[d>>0]|0;if(!(d<<24...
function fs (line 12) | function fs(b){b=b|0;var d=0;d=b+4|0;if(!(hL(c[d>>2]|0,1024,c[b+8>>2]|0)...
function gs (line 12) | function gs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;es(b);e=0;f=c[b>>2]|0;while...
function hs (line 12) | function hs(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0;e=l;l=l+16|0;f=e;d=+uM(a,...
function is (line 12) | function is(a,b){a=+a;b=b|0;var c=0.0;do if(!(yJ(b,83705)|0)){a=a*72.0;c...
function js (line 12) | function js(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;c[d>>2]=0;e=0;while(1){...
function ks (line 12) | function ks(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=c[b+20>>2]|0;if(a|0)ML(a)...
function ls (line 12) | function ls(){var a=0;zm(0,1,86240,90527)|0;a=yr(0,1)|0;tE(a,0);return a|0}
function ms (line 12) | function ms(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0.0,n=0.0...
function ns (line 12) | function ns(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l...
function os (line 12) | function os(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l...
function ps (line 12) | function ps(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0...
function qs (line 12) | function qs(a,b){a=a|0;b=b|0;rE(a,0,b);return}
function rs (line 12) | function rs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if(!((a|0)!=0?(zs(a)|0)...
function ss (line 12) | function ss(a,b){a=a|0;b=b|0;jo(b,a,1)|0;return}
function ts (line 12) | function ts(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[b>>2]=d;c[b+4>>2]...
function us (line 12) | function us(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0...
function vs (line 12) | function vs(a){a=a|0;var b=0;a=c[(c[a>>2]|0)+12>>2]|0;while(1){if(!a)bre...
function ws (line 12) | function ws(a){a=a|0;$I(c[a>>2]|0);$I(a);return}
function xs (line 12) | function xs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l...
function ys (line 12) | function ys(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+8|0;b=c[f>>2]|0;d=a+4|0...
function zs (line 12) | function zs(b){b=b|0;var c=0;a:while(1){c=b;b=b+1|0;c=a[c>>0]|0;switch(c...
function As (line 12) | function As(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=0;f=eo(a)|0;while(1){if(!...
function Bs (line 12) | function Bs(a){a=a|0;a=Mo(a,84012,0)|0;if(!a)ma(84017,84020,529,84029);e...
function Cs (line 12) | function Cs(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0...
function Ds (line 12) | function Ds(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;a[h>>0...
function Es (line 12) | function Es(b,d){b=b|0;d=d|0;var e=0;b=(c[b+16>>2]|0)+8|0;e=a[b>>0]|0;if...
function Fs (line 12) | function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=eo(a)|0;while(1){if(!e)br...
function Gs (line 12) | function Gs(a){a=a|0;return As(a,c[a+60>>2]|0)|0}
function Hs (line 12) | function Hs(a,b){a=a|0;b=b|0;Is(a,b,0);return}
function Is (line 12) | function Is(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;g=(d|0)==0;b=Kp(b)|...
function Js (line 12) | function Js(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=0;g=eo(a)|0;while...
function Ks (line 12) | function Ks(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l...
function Ls (line 12) | function Ls(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0...
function Ms (line 12) | function Ms(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0...
function Ns (line 12) | function Ns(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0...
function Os (line 12) | function Os(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0,k=0,m=0.0...
function Ps (line 12) | function Ps(a,b){a=a|0;b=b|0;var d=0;d=c[42101]|0;a=c[d+(c[(c[a>>2]|0)+1...
function Qs (line 12) | function Qs(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a>>2]|0;b=c[b>>2]|0;e=+...
function Rs (line 12) | function Rs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k...
function Ss (line 12) | function Ss(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0...
function Ts (line 12) | function Ts(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0...
function Us (line 12) | function Us(a,b){a=a|0;b=b|0;return (c[c[b>>2]>>2]|0)-(c[c[a>>2]>>2]|0)|0}
function Vs (line 12) | function Vs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0...
function Ws (line 12) | function Ws(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var...
function Xs (line 12) | function Xs(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var...
function Ys (line 12) | function Ys(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[b+4>>2]|0)-(c[d+4>>2]|...
function Zs (line 12) | function Zs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[d+4>>2]|0)+(c[b+4>>2]|...
function _s (line 12) | function _s(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var...
function $s (line 12) | function $s(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0...
function at (line 12) | function at(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0,l=0.0...
function bt (line 12) | function bt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0.0,l=0.0...
function ct (line 12) | function ct(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=Ms(a,b,d,e)|0;if(...
function dt (line 12) | function dt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0...
function et (line 12) | function et(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=l;l=l+16|...
function ft (line 12) | function ft(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=...
function gt (line 12) | function gt(a,b,c){a=a|0;b=b|0;c=c|0;return ht(Jm(a,84591)|0,b,c)|0}
function ht (line 12) | function ht(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function it (line 12) | function it(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;a:do if((a[b>>0]|0)==95){f=...
function jt (line 12) | function jt(a){a=a|0;switch(a|0){case 1:{a=93039;break}case 2:{a=96273;b...
function kt (line 12) | function kt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0...
function lt (line 12) | function lt(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l...
function mt (line 12) | function mt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0;i=l;l=l+16|0;e=i;h[...
function nt (line 12) | function nt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0;k=l;l=l+16|...
function ot (line 12) | function ot(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=...
function pt (line 12) | function pt(b,d){b=b|0;d=d|0;var e=0;e=a[b>>0]|0;switch(e|0){case 91:{b=...
function qt (line 12) | function qt(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0;f=l;l=l+16|0;d=f;e=+uM(a,...
function rt (line 12) | function rt(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=tt(a,e)|0;e=...
function st (line 12) | function st(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[b>>2]=ZJ(a,e...
function tt (line 12) | function tt(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[b>>2]=CL(a,e...
function ut (line 12) | function ut(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l...
function vt (line 12) | function vt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function wt (line 12) | function wt(a,b,c){a=a|0;b=b|0;c=c|0;return kt(a,b,c,0)|0}
function xt (line 12) | function xt(a){a=a|0;return wt(a,0,0)|0}
function yt (line 12) | function yt(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=c[a+12>>2]|0;if(a|0){...
function zt (line 12) | function zt(a){a=a|0;switch(c[a>>2]|0){case 3:case 2:{$I(c[a+8+4>>2]|0);...
function At (line 12) | function At(a){a=a|0;var b=0,d=0,e=0;switch(c[a>>2]|0){case 1:{e=a+40|0;...
function Bt (line 12) | function Bt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0...
function Ct (line 12) | function Ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0...
function Dt (line 12) | function Dt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=0;...
function Et (line 12) | function Et(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;while(1){e=c[b>>2]|...
function Ft (line 12) | function Ft(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,i=0;g=0;d=0.0;while(1...
function Gt (line 12) | function Gt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0...
function Ht (line 12) | function Ht(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0...
function It (line 12) | function It(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0...
function Jt (line 12) | function Jt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0...
function Kt (line 12) | function Kt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0,j=0,k...
function Lt (line 12) | function Lt(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;var g=0,i=0,j...
function Mt (line 12) | function Mt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0...
function Nt (line 12) | function Nt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0;g=l;l...
function Ot (line 12) | function Ot(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j...
function Pt (line 12) | function Pt(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[a>>2]|0;d=+h[b>>3]-...
function Qt (line 12) | function Qt(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0...
function Rt (line 12) | function Rt(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var...
function St (line 12) | function St(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0....
function Tt (line 12) | function Tt(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=i|0;var j...
function Ut (line 12) | function Ut(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=i|0;var j...
function Vt (line 12) | function Vt(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i+8|0;f=...
function Wt (line 12) | function Wt(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+16|0;f=ww(304)|0;if...
function Xt (line 12) | function Xt(a){a=a|0;var b=0;a=a+16|0;b=c[a>>2]|0;if(!b)ma(84921,84925,1...
function Yt (line 12) | function Yt(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var...
function Zt (line 12) | function Zt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+80|...
function _t (line 12) | function _t(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+144|0;h=i;g...
function $t (line 12) | function $t(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,i=0.0,j=0,k=0.0,m=0.0...
function au (line 12) | function au(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0,m=0.0,n...
function bu (line 12) | function bu(a){a=a|0;$I(c[a+4>>2]|0);$I(c[a+8>>2]|0);$I(a);return}
function cu (line 12) | function cu(b){b=b|0;var d=0.0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;b=XJ(b,59)|0...
function du (line 12) | function du(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0.0...
function eu (line 12) | function eu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[a+16>>2]|0;e=c[...
function fu (line 12) | function fu(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0,f=0,g=0,i=0.0,j=0.0,k=0.0...
function gu (line 12) | function gu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,h=0,i=0;b=l;l=l+48|0;d=b+...
function hu (line 12) | function hu(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0.0...
function iu (line 12) | function iu(a,b){a=a|0;b=b|0;var d=0;d=Wt(a)|0;c[d+4>>2]=0;c[d+8>>2]=b;c...
function ju (line 12) | function ju(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;ED(b,119592);d=Jm(c,854...
function ku (line 12) | function ku(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=...
function lu (line 12) | function lu(a){a=a|0;return (c[a+160>>2]|0)<=(c[a+156>>2]|0)|0}
function mu (line 12) | function mu(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+316>>2]|0;return c[((b|0)==...
function nu (line 12) | function nu(a){a=a|0;var b=0,d=0;d=a+172|0;b=c[d+4>>2]|0;a=a+196|0;c[a>>...
function ou (line 12) | function ou(a){a=a|0;var b=0,d=0;d=c[a+196>>2]|0;if(((d|0)>-1?(d|0)<(c[a...
function pu (line 12) | function pu(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function qu (line 12) | function qu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;d=...
function ru (line 12) | function ru(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;if(!d){d=a+160|0;c[d>>2...
function su (line 12) | function su(a){a=a|0;iD(a);Xt(a);return}
function tu (line 12) | function tu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[d+4>>2]|0)+(c[b+4>>2]|...
function uu (line 12) | function uu(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0...
function vu (line 12) | function vu(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p...
function wu (line 12) | function wu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(c[a>>2]|0)+28|0;...
function xu (line 12) | function xu(e,f,i){e=e|0;f=f|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r...
function yu (line 12) | function yu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+32|...
function zu (line 12) | function zu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;g=h;e=...
function Au (line 12) | function Au(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+16|0;a=1;while(1){e=c[d>>2]...
function Bu (line 12) | function Bu(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+16|0;a=1;while(1){e=c[d>>2]...
function Cu (line 12) | function Cu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+64|0;i=...
function Du (line 12) | function Du(b,d){b=b|0;d=d|0;var e=0,f=0;a:do if((c[b+156>>2]|0)>=2?(e=G...
function Eu (line 12) | function Eu(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function Fu (line 12) | function Fu(d,f,g){d=d|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q...
function Gu (line 12) | function Gu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function Hu (line 12) | function Hu(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function Iu (line 12) | function Iu(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l...
function Ju (line 12) | function Ju(b,d,e,f,g,h,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0...
function Ku (line 12) | function Ku(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;d=c[a+16>>2]|0;...
function Lu (line 12) | function Lu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0...
function Mu (line 12) | function Mu(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}
function Nu (line 12) | function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0;d=c[a+1...
function Ou (line 12) | function Ou(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;i=+i;var j...
function Pu (line 12) | function Pu(b,d){b=b|0;d=d|0;var e=0,f=0;e=1;a:while(1){switch(a[b>>0]|0...
function Qu (line 12) | function Qu(b){b=b|0;var d=0,e=0;d=c[42229]|0;a:do if(!d)e=7;else{d=Km(b...
function Ru (line 12) | function Ru(a){a=a|0;if(a|0){$I(c[a+8>>2]|0);$I(a)}return}
function Su (line 12) | function Su(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;e=+h[b>>3]-+h...
function Tu (line 12) | function Tu(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0...
function Uu (line 12) | function Uu(a,b,c){a=+a;b=+b;c=+c;return +(c*.5*(1.0-a/b))}
function Vu (line 12) | function Vu(a,b,c){a=+a;b=+b;c=+c;return +(c*.5)}
function Wu (line 12) | function Wu(a,b,c){a=+a;b=+b;c=+c;return +(c*.5*(a/b))}
function Xu (line 12) | function Xu(a,b,c){a=+a;b=+b;c=+c;b=a/b;return +((!(b<=.5)?1.0-b:b)*c)}
function Yu (line 12) | function Yu(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0.0,g=0,i=0,j=0,k=0,m=...
function Zu (line 12) | function Zu(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0;e=+h[a+16>>3];d=+...
function _u (line 12) | function _u(b,d){b=b|0;d=d|0;d=to(d)|0;if((a[(c[d+16>>2]|0)+115>>0]|0)==...
function $u (line 12) | function $u(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,h=0,i=0,j=0,...
function av (line 12) | function av(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+144|0;f=g+128|0...
function bv (line 12) | function bv(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var i=0.0,j=...
function cv (line 12) | function cv(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0...
function dv (line 12) | function dv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;f=+h[b+8>>3];...
function ev (line 12) | function ev(a,b){a=a|0;b=b|0;var d=0;d=xw(24)|0;c[d+16>>2]=0;c[d>>2]=c[a...
function fv (line 12) | function fv(b){b=b|0;var c=0,d=0,e=0,f=0,g=0;c=b;f=b;a:while(1){e=0;whil...
function gv (line 12) | function gv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=c[b>>2]|0;while(1...
function hv (line 12) | function hv(a){a=a|0;switch(a|0){case 0:case 44:case 41:case 40:{a=1;bre...
function iv (line 12) | function iv(a,b){a=a|0;b=b|0;return jv(c[a>>2]|0,c[a+160>>2]|0,c[a+156>>...
function jv (line 12) | function jv(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0...
function kv (line 12) | function kv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=a[d>>0]|0;if(!(h<...
function lv (line 12) | function lv(b){b=b|0;var c=0;while(1){c=a[b>>0]|0;if(!(c<<24>>24)){b=1;b...
function mv (line 12) | function mv(a,b){a=a|0;b=b|0;if((+h[a+16>>3]>=+h[b>>3]?+h[b+16>>3]>=+h[a...
function nv (line 12) | function nv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;a:do if((c[b+156>>2]|0)...
function ov (line 12) | function ov(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+64|0;e=d+32|0;f=d;a...
function pv (line 12) | function pv(a,d){a=a|0;d=d|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p...
function qv (line 12) | function qv(a){a=a|0;uD(a);Xt(a);return}
function rv (line 12) | function rv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l...
function sv (line 12) | function sv(b){b=b|0;var d=0,e=0;b=HA(b,c[42202]|0,174185)|0;a:do if(!(a...
function tv (line 12) | function tv(a){a=a|0;var b=0.0;if(((c[a+8>>2]|0)==4?(b=+h[a+16>>3],((~~(...
function uv (line 12) | function uv(a,b,c){a=+a;b=+b;c=c|0;var d=0.0,e=0,f=0.0,g=0;f=6.283185307...
function vv (line 12) | function vv(b,d){b=b|0;d=d|0;var e=0;a:do if((c[b+156>>2]|0)>=2?(e=GA(d,...
function wv (line 12) | function wv(a,b){a=a|0;b=b|0;var d=0;d=Wt(a)|0;c[d+4>>2]=1;c[d+8>>2]=b;c...
function xv (line 12) | function xv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;b=Jm(b,86479)|0;a:do if...
function yv (line 12) | function yv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l...
function zv (line 12) | function zv(a,b){a=a|0;b=b|0;oD(a,b);Xt(a);return}
function Av (line 12) | function Av(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0...
function Bv (line 12) | function Bv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[b>>2]|0;f=g...
function Cv (line 12) | function Cv(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;c[a>>2]=c[b+4>>2];c[a+4...
function Dv (line 12) | function Dv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+16|0;f=1;while(1){d=c[g...
function Ev (line 12) | function Ev(a){a=a|0;var b=0,d=0,e=0;b=c[42172]|0;if(!b){b=Rl(19684,c[43...
function Fv (line 12) | function Fv(a,b,c){a=a|0;b=b|0;c=c|0;$I(b);return}
function Gv (line 12) | function Gv(a){a=a|0;var b=0;b=c[42173]|0;if(!a){if((b|0)>0?(b=b+-1|0,c[...
function Hv (line 12) | function Hv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0...
function Iv (line 12) | function Iv(a){a=a|0;var b=0;b=eo(a)|0;while(1){if(!b)break;Vv(a,b);b=fo...
function Jv (line 12) | function Jv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function Kv (line 12) | function Kv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=b+304|0;f=c[e>>2]|0;if(f|...
function Lv (line 12) | function Lv(b){b=b|0;b=Jm(b,85852)|0;a:do if(!b)b=0;else switch(a[b>>0]|...
function Mv (line 12) | function Mv(b){b=b|0;var d=0.0,e=0;e=c[b>>2]|0;if(!(a[e+292>>0]|0)){if((...
function Nv (line 12) | function Nv(b){b=b|0;var d=0;d=c[b>>2]|0;a:do if(!(a[d+293>>0]|0))switch...
function Ov (line 12) | function Ov(b,d){b=b|0;d=d|0;var e=0.0,f=0;f=c[(c[b>>2]|0)+192>>2]|0;e=+...
function Pv (line 12) | function Pv(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0.0,j=0.0,k=0.0,m=0,n...
function Qv (line 12) | function Qv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m=0.0,n=0...
function Rv (line 12) | function Rv(a,b){a=a|0;b=b|0;var c=0.0;c=+h[b>>3];h[a>>3]=+h[b+8>>3];h[a...
function Sv (line 12) | function Sv(a,b,d){a=a|0;b=b|0;d=d|0;d=(d<<24>>24)+-66|0;switch(d>>>1|d<...
function Tv (line 12) | function Tv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|...
function Uv (line 12) | function Uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l...
function Vv (line 12) | function Vv(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0;d=c[b+16>>2]|0;g=...
function Wv (line 12) | function Wv(a){a=a|0;a=c[(c[a+16>>2]|0)+8>>2]|0;if(a|0)Xv(a);return}
function Xv (line 12) | function Xv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function Yv (line 12) | function Yv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0...
function Zv (line 12) | function Zv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0.0...
function _v (line 12) | function _v(a){a=a|0;var b=0,c=0.0;b=a+16|0;c=+h[b>>3];h[a+32>>3]=c;h[a+...
function $v (line 12) | function $v(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;if((c[4...
function aw (line 12) | function aw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0,j=0,k=0;k=l...
function bw (line 12) | function bw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0,j=0,k=0;k=l...
function cw (line 12) | function cw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;g=+h[c>...
function dw (line 12) | function dw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;f=+h[a>...
function ew (line 12) | function ew(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l...
function fw (line 12) | function fw(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;a=HA(a,zm(a,0,86883,0)...
function gw (line 12) | function gw(b){b=b|0;var d=0.0,e=0,f=0;e=Jm(b,86841)|0;a:do if(e|0?(f=a[...
function hw (line 12) | function hw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0,k=0,m=0,n=0...
function iw (line 12) | function iw(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0;d=Jm(b,86240)|0;do if(d...
function jw (line 12) | function jw(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;d=c[e>>2]|0;b=c[d+8>>2]|0;...
function kw (line 12) | function kw(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=c[d>>...
function lw (line 12) | function lw(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0...
function mw (line 12) | function mw(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=i|0;j=j|0;var k=0,m=0,...
function nw (line 12) | function nw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0...
function ow (line 12) | function ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(a|0){d=a;e=0;while(1...
function pw (line 12) | function pw(d){d=d|0;var e=0;if(d|0){$I(c[d>>2]|0);e=d+72|0;if(a[d+82>>0...
function qw (line 12) | function qw(d,e,f){d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0...
function rw (line 12) | function rw(a,b){a=a|0;b=b|0;return nw(a,b,1)|0}
function sw (line 12) | function sw(a){a=a|0;return tw(a,0)|0}
function tw (line 12) | function tw(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[42252]|...
function uw (line 12) | function uw(b){b=b|0;var c=0,d=0;d=b+1|0;c=a[d>>0]|0;a:do if(c<<24>>24==...
function vw (line 12) | function vw(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[42254]|0;if(!d)...
function ww (line 12) | function ww(a){a=a|0;var b=0;if(!a)a=0;else{b=xw(a)|0;WN(b|0,0,a|0)|0;a=...
function xw (line 12) | function xw(a){a=a|0;if(a){a=_I(a)|0;if(!a){YL(96532,14,1,c[13918]|0)|0;...
function yw (line 12) | function yw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=bJ(a,O(d,b)|0)|0;if(!((b|...
function zw (line 12) | function zw(a,b){a=a|0;b=b|0;a=bJ(a,b)|0;if((b|0)!=0&(a|0)==0)YL(96532,1...
function Aw (line 12) | function Aw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m...
function Bw (line 12) | function Bw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;a=(c[a+16>>2]|0...
function Cw (line 12) | function Cw(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;c[42299]=b;c[42...
function Dw (line 12) | function Dw(){var a=0,b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=...
function Ew (line 12) | function Ew(){var b=0,d=0,e=0;b=(c[(c[42299]|0)+16>>2]|0)+192|0;while(1)...
function Fw (line 12) | function Fw(){var a=0,b=0,d=0,e=0,f=0;a=(c[(c[42299]|0)+16>>2]|0)+192|0;...
function Gw (line 12) | function Gw(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=c[42306]|0;f...
function Hw (line 12) | function Hw(a){a=a|0;var b=0,d=0;b=c[a>>2]&3;d=c[((b|0)==3?a:a+48|0)+40>...
function Iw (line 12) | function Iw(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0...
function Jw (line 12) | function Jw(){var b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;Lw();m...
function Kw (line 12) | function Kw(){var a=0,b=0,d=0,f=0,g=0,h=0;b=0;while(1){if((b|0)>=(c[4230...
function Lw (line 12) | function Lw(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;h=i;c[h>>...
function Mw (line 12) | function Mw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+16|0;a=c[f>>2]|0;e=a+23...
function Nw (line 12) | function Nw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=(...
function Ow (line 12) | function Ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=a+16|...
function Pw (line 12) | function Pw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+16|0;a=c[g>>2]|...
function Qw (line 12) | function Qw(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0;i=a+16|0;g=0;while(...
function Rw (line 12) | function Rw(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0;i=a+16|0;g=0;while(...
function Sw (line 12) | function Sw(a){a=a|0;var b=0;b=ww(16)|0;c[b>>2]=a;c[b+4>>2]=gx(a,b)|0;c[...
function Tw (line 12) | function Tw(a,b){a=a|0;b=b|0;var d=0,e=0;e=ww(8)|0;c[e>>2]=a;c[e+4>>2]=b...
function Uw (line 12) | function Uw(a){a=a|0;return c[a+4>>2]|0}
function Vw (line 12) | function Vw(a){a=a|0;var b=0,d=0,e=0,f=0;f=c[a>>2]|0;b=c[f>>2]|0;c[b+8>>...
function Ww (line 12) | function Ww(a){a=a|0;return fx(c[a>>2]|0,0,0)|0}
function Xw (line 12) | function Xw(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0;b=a+16|0;if((c[(c[b>>2]...
function Yw (line 12) | function Yw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]|0;g=c...
function Zw (line 12) | function Zw(){Pw(c[(c[(c[42299]|0)+16>>2]|0)+192>>2]|0,0,1)|0;_w(c[(c[(c...
function _w (line 12) | function _w(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+16|0;d=0;while(1){a=c[f...
function $w (line 12) | function $w(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=c[a>>2]&3;d=c[((b...
function ax (line 12) | function ax(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3...
function bx (line 12) | function bx(a){a=a|0;var b=0,d=0;a=c[(c[a+16>>2]|0)+280>>2]|0;while(1){b...
function cx (line 12) | function cx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=a+16|0;e=c[h>...
function dx (line 12) | function dx(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;d=(c[b+16>...
function ex (line 12) | function ex(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;while(1){g=...
function fx (line 12) | function fx(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0...
function gx (line 12) | function gx(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0...
function hx (line 12) | function hx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=Jm(a,87620)|0;if(!d)d=30;...
function ix (line 12) | function ix(a){a=+a;return +((c[42184]|0)==0?a:+h[20895]-a)}
function jx (line 12) | function jx(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0...
function kx (line 12) | function kx(a){a=a|0;var b=0.0;if(c[42184]|0){a=c[a+16>>2]|0;b=+h[a+24>>...
function lx (line 12) | function lx(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0;f=l;l=l+1040|0;e=f;d...
function mx (line 12) | function mx(b){b=b|0;a[174081]=10;ab[c[42309]&63](b,174081)|0;return}
function nx (line 12) | function nx(a,b,c){a=a|0;b=b|0;c=c|0;if(b|0)sx(b,a);sx(c,a);return}
function ox (line 12) | function ox(a,b){a=a|0;b=b|0;var d=0.0;lx(a,87638,+h[b>>3]*.013888888888...
function px (line 12) | function px(a,b){a=a|0;b=b|0;var c=0;c=ap(a,b)|0;b=Xp(c)|0;cp(a,c)|0;ret...
function qx (line 12) | function qx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!(a[(c[d+16>>2]|0)+118>>...
function rx (line 12) | function rx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+1040|0;f=d;e=d+8|0;...
function sx (line 12) | function sx(a,b){a=a|0;b=b|0;ab[c[42309]&63](b,a)|0;return}
function FB (line 13) | function FB(a,b){a=a|0;b=b|0;if((+h[a+16>>3]>=+h[b>>3]?+h[b+16>>3]>=+h[a...
function GB (line 13) | function GB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0...
function HB (line 13) | function HB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0...
function IB (line 13) | function IB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;a:do if((b...
function JB (line 13) | function JB(d,f){d=d|0;f=f|0;var g=0;g=Jm(d,94878)|0;if(g)if(!(a[g>>0]|0...
function KB (line 13) | function KB(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0....
function LB (line 13) | function LB(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0;e=a+16|0;f=c[e>>2]|0;if(!...
function MB (line 13) | function MB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0...
function NB (line 13) | function NB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0...
function OB (line 13) | function OB(a){a=a|0;var b=0.0,d=0.0,e=0,f=0;f=c[a>>2]&3;e=c[(c[((f|0)==...
function PB (line 13) | function PB(a,b){a=a|0;b=b|0;return (c[a>>2]|0)-(c[b>>2]|0)|0}
function QB (line 13) | function QB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0...
function RB (line 13) | function RB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l...
function SB (line 13) | function SB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0.0,m=0.0...
function TB (line 13) | function TB(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;j=Rl(24676,c[43...
function UB (line 13) | function UB(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;j=Rl(24676,c[43...
function VB (line 13) | function VB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=e+20|...
function WB (line 13) | function WB(a){a=a|0;var b=0,d=0;d=a+20|0;eC(c[d>>2]|0);b=a+24|0;eC(c[b>...
function XB (line 13) | function XB(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0...
function YB (line 13) | function YB(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k...
function ZB (line 13) | function ZB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]+ +h[d>>3];...
function _B (line 13) | function _B(a,b){a=a|0;b=b|0;var d=0.0,e=0;b=cC(c[b+24>>2]|0,a)|0;e=c[b+...
function $B (line 13) | function $B(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=cC(c[b+20>>2]|0,a)|0;b=c[e+...
function aC (line 13) | function aC(a){a=a|0;return 0}
function bC (line 13) | function bC(a){a=a|0;return 0}
function cC (line 13) | function cC(a,b){a=a|0;b=b|0;a=bb[c[a>>2]&31](a,b+8|0,512)|0;if(!a)ma(94...
function dC (line 13) | function dC(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0...
function eC (line 13) | function eC(a){a=a|0;var b=0;a=Pl(a)|0;while(1){if(!a)break;b=Pl(c[a+16>...
function fC (line 13) | function fC(a){a=a|0;var b=0;a=Pl(a)|0;while(1){if(!a)break;b=Pl(c[a+16>...
function gC (line 13) | function gC(a,b){a=a|0;b=b|0;var d=0;d=Pl(a)|0;while(1){if(!d)break;a=Pl...
function hC (line 13) | function hC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0;e=Pl(a)|0;while(1){if(!...
function iC (line 13) | function iC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l...
function jC (line 13) | function jC(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0;g=l;l...
function kC (line 13) | function kC(a){a=a|0;switch(a|0){case 0:{a=95643;break}case 1:{a=95638;b...
function lC (line 13) | function lC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0...
function mC (line 13) | function mC(a,b){a=a|0;b=b|0;if(!(+h[a+8>>3]==+h[b+8>>3]))ma(95714,94983...
function nC (line 13) | function nC(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=0...
function oC (line 13) | function oC(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0...
function pC (line 13) | function pC(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;while(1){if(!(mC(b,...
function qC (line 13) | function qC(a,b){a=a|0;b=b|0;if(!a)ma(95650,94983,798,95654);else return...
function rC (line 13) | function rC(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=a[b>>0]|...
function sC (line 13) | function sC(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0;j=1;while(1...
function tC (line 13) | function tC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k...
function uC (line 13) | function uC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0;i=+...
function vC (line 13) | function vC(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)==(c|0)?((b|0)==(c|0))...
function wC (line 13) | function wC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)==(d|0)){b=(a|0)==0...
function xC (line 13) | function xC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=c[a+28>>2]|0;h=c[a+24...
function yC (line 13) | function yC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+24|0;e=c[f>>2]|0;d=e+1|...
function zC (line 13) | function zC(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;h[f...
function AC (line 13) | function AC(a,b,d){a=a|0;b=b|0;d=d|0;KC(c[b+32>>2]|0);$I(c[b+28>>2]|0);$...
function BC (line 13) | function BC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b>>3];...
function CC (line 13) | function CC(a,b,d){a=a|0;b=b|0;d=d|0;Ll(c[b+16>>2]|0)|0;$I(b);return}
function DC (line 13) | function DC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+h[b>>3];...
function EC (line 13) | function EC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0;i=(a[d+36>>...
function FC (line 13) | function FC(a,b){a=a|0;b=b|0;var d=0;d=c[a+20>>2]|0;if((d|0)!=(c[b+20>>2...
function GC (line 13) | function GC(a,b){a=a|0;b=b|0;var c=0.0;c=(+h[b+64>>3]+ +h[b+48>>3])*.5;h...
function HC (line 13) | function HC(b,d,e,f,g,i,j){b=b|0;d=d|0;e=+e;f=+f;g=+g;i=i|0;j=j|0;var k=...
function IC (line 13) | function IC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[b+36>>2]|0;do if((c[e+4...
function JC (line 13) | function JC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=ww(8)|0;c[d>>2]=a;e=d+4|0...
function KC (line 13) | function KC(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=0;while(1){e=c[d>>2]|0;if...
function LC (line 13) | function LC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2...
function MC (line 13) | function MC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;c[...
function NC (line 13) | function NC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2...
function OC (line 13) | function OC(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;switch(b|0){case 0:...
function PC (line 13) | function PC(a){a=a|0;var b=0;b=ww(8)|0;c[b+4>>2]=ww(a<<2)|0;c[b>>2]=-1;r...
function QC (line 13) | function QC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=a...
function RC (line 13) | function RC(a){a=a|0;var b=0,d=0;b=c[a>>2]|0;if((b|0)==-1)a=-1;else{d=c[...
function SC (line 13) | function SC(a){a=a|0;$I(c[a+4>>2]|0);$I(a);return}
function TC (line 13) | function TC(a,b){a=a|0;b=b|0;var d=0;d=(c[a>>2]|0)+1|0;c[a>>2]=d;c[(c[a+...
function UC (line 13) | function UC(a){a=a|0;var d=0,e=0,f=0;e=c[a>>2]|0;c[a+8>>2]=e;c[a+12>>2]=...
function VC (line 13) | function VC(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;c[a>>2]=d;c[a+4>>2]=c...
function WC (line 13) | function WC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=ww(((c[a>>2]|0)*6|0)+(b<<...
function XC (line 13) | function XC(a){a=a|0;var b=0;b=ww(24)|0;c[b>>2]=0;c[b+16>>2]=ww(a*40|0)|...
function YC (line 13) | function YC(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=c[a>>2]|0;c[d+(b*40|0)...
function ZC (line 13) | function ZC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=a+4|0;f=c[g>>2...
function _C (line 13) | function _C(a,d){a=a|0;d=d|0;var e=0,f=0;e=a+16|0;f=b[e>>1]|0;c[(c[a+28>...
function $C (line 13) | function $C(a){a=a|0;var b=0;b=a+16|0;$I(c[(c[b>>2]|0)+28>>2]|0);$I(c[b>...
function aD (line 13) | function aD(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0...
function bD (line 13) | function bD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[b+12>>2]|0;if((e|0)==(c...
function cD (line 13) | function cD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=c[a>>2]|0;Kr(...
function dD (line 13) | function dD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(!(jr(a)|0))if((b|0)!=...
function eD (line 13) | function eD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+4>>2]|0,d|...
function fD (line 13) | function fD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;e=+h[b+...
function gD (line 13) | function gD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0...
function hD (line 13) | function hD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+8>>2]|...
function iD (line 13) | function iD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+12>>2]|0,d...
function jD (line 13) | function jD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+24>>2]|0,d...
function kD (line 13) | function kD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+28>>2]|0,d...
function lD (line 13) | function lD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+16>>2]|0,d...
function mD (line 13) | function mD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+20>>2]|0,d...
function nD (line 13) | function nD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+32>>2]...
function oD (line 13) | function oD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+36>>2]...
function pD (line 13) | function pD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+40>>2]|0,d...
function qD (line 13) | function qD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+44>>2]|0,d...
function rD (line 13) | function rD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+48>>2]|0,d...
function sD (line 13) | function sD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+52>>2]|0,d...
function tD (line 13) | function tD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+56>>2]...
function uD (line 13) | function uD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+60>>2]|0,d...
function vD (line 13) | function vD(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+64>>2]...
function wD (line 13) | function wD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+68>>2]|0,d...
function xD (line 13) | function xD(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=c[a+6...
function yD (line 13) | function yD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+76>>2]|0,d...
function zD (line 13) | function zD(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+60>>2]|0;if(d|0?(e=c[d+80...
function AD (line 13) | function AD(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+84>>2]|0,d...
function BD (line 13) | function BD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l...
function CD (line 13) | function CD(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=c[b+60>>2]|0;g=(c...
function DD (line 13) | function DD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l...
function ED (line 13) | function ED(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=c[b+60>>2]|0;g=(c...
function FD (line 13) | function FD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,j=0;h=c[a+60...
function GD (line 13) | function GD(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|...
function HD (line 13) | function HD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l...
function ID (line 13) | function ID(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0...
function JD (line 13) | function JD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+64|0;f=e;c[...
function KD (line 13) | function KD(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0...
function LD (line 13) | function LD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a+60>>2]|0;do i...
function MD (line 13) | function MD(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+60>>2]|0;if((d|0?!((e|0)=...
function ND (line 13) | function ND(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k...
function OD (line 13) | function OD(b){b=b|0;if(a[b>>0]|0)if(jK(b,96043)|0)if(jK(b,96049)|0)if(!...
function PD (line 13) | function PD(a,b){a=a|0;b=+b;if(c[a+60>>2]|0)h[(c[a+16>>2]|0)+152>>3]=b;r...
function QD (line 13) | function QD(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0...
function RD (line 13) | function RD(a,b){a=a|0;b=b|0;b=Kr(c[a>>2]|0,4,b)|0;if(!b)b=999;else{b=c[...
function SD (line 13) | function SD(a){a=a|0;return 1}
function TD (line 13) | function TD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+336|0;h[c>>3]=+h[c>>3]+10...
function UD (line 13) | function UD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+336|0;h[c>>3]=+h[c>>3]-10...
function VD (line 13) | function VD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+344|0;h[c>>3]=+h[c>>3]-10...
function WD (line 13) | function WD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+344|0;h[c>>3]=+h[c>>3]+10...
function XD (line 13) | function XD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+352|0;h[c>>3]=+h[c>>3]*1....
function YD (line 13) | function YD(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+352|0;h[c>>3]=+h[c>>3]*.9...
function ZD (line 13) | function ZD(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;e=b+536|0;d=(a[e>>0]|0)...
function _D (line 13) | function _D(b){b=b|0;var d=0,e=0;d=c[(c[b>>2]|0)+168>>2]|0;e=b+580|0;if(...
function $D (line 13) | function $D(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0;k=l;l=l...
function aE (line 13) | function aE(b,c,d){b=b|0;c=c|0;d=d|0;a[b+538>>0]=0;a[b+541>>0]=0;return}
function bE (line 13) | function bE(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0;k=l;l=l+1...
function cE (line 13) | function cE(a,b,c){a=a|0;b=b|0;c=c|0;return}
function dE (line 13) | function dE(a){a=a|0;return}
function eE (line 13) | function eE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[b>>2]|0...
function fE (line 13) | function fE(a,b){a=a|0;b=b|0;a=c[a>>2]|0;ms(a,c[a+168>>2]|0,b)|0;return}
function gE (line 13) | function gE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=c[a>>2]|0...
function hE (line 13) | function hE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,m=0;f=l;l...
function iE (line 13) | function iE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0;if(!(c[b+...
function jE (line 13) | function jE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=eo(a...
function kE (line 13) | function kE(b){b=b|0;var d=0;d=c[b+576>>2]|0;a:do if(d|0)switch(Do(d)|0)...
function lE (line 13) | function lE(b){b=b|0;var d=0,e=0;e=b+584|0;d=c[e>>2]|0;if(d|0){$I(d);c[e...
function mE (line 13) | function mE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o...
function nE (line 13) | function nE(b){b=b|0;var d=0,e=0,f=0;f=b+580|0;d=c[f>>2]|0;a:do if(d|0)s...
function oE (line 13) | function oE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a+592|0;do if((to(b)|...
function pE (line 13) | function pE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=a+592|0;Fr(f,0,96...
function qE (line 13) | function qE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=a...
function rE (line 13) | function rE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=sE(a,b,c[d>>2]|0)...
function sE (line 13) | function sE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=xw(12)|0;if(!b)b=0;else b...
function tE (line 13) | function tE(b,c){b=b|0;c=c|0;uE(b);a[b+44>>0]=0;vE(b)|0;uA(b)|0;return}
function uE (line 13) | function uE(b){b=b|0;var d=0,e=0;d=c[b+32>>2]|0;a:do if(d|0)while(1){e=c...
function vE (line 13) | function vE(a){a=a|0;var b=0;b=Kr(a,2,96314)|0;if(!b)a=999;else{c[a+148>...
function wE (line 13) | function wE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=c[a+148>>2]|0;if((a|0)!=0...
function xE (line 13) | function xE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return (c[b>>2]|0)-(c[d>>2]...
function yE (line 13) | function yE(a){a=a|0;var b=0.0,d=0.0;a=c[a+16>>2]|0;d=+h[a+16>>3];b=+h[a...
function zE (line 13) | function zE(a){a=a|0;var b=0,c=0;if(!a)a=-1;else{c=a>>>0>65535;a=c?a>>>1...
function AE (line 13) | function AE(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0...
function BE (line 13) | function BE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0...
function CE (line 13) | function CE(a){a=a|0;var b=0;b=NE(a)|0;if((b|0)>=0){OE(a);PE(a);b=Ll(c[a...
function DE (line 13) | function DE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0,j=0,k=0.0,m...
function EE (line 13) | function EE(a){a=a|0;mH(c[a+24>>2]|0)|0;$I(a);return}
function FE (line 13) | function FE(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0,k=0,m=0,n...
function GE (line 13) | function GE(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,g=0.0;a=c[a+32>>2]|0;...
function HE (line 13) | function HE(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a+32>>2]|0;e=+h[a+16>>3...
function IE (line 13) | function IE(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;e=+h[a>>3];c[b>>2]=~~e;d=+h...
function JE (line 13) | function JE(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;i...
function KE (line 13) | function KE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,...
function LE (line 13) | function LE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,...
function ME (line 13) | function ME(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=c[b+3...
function NE (line 13) | function NE(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0...
function OE (line 13) | function OE(a){a=a|0;var b=0,d=0,e=0;d=a+20|0;e=c[d>>2]|0;b=a+24|0;a=bb[...
function PE (line 13) | function PE(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=a+20|0;f=Tl(c[e>>2]|0...
function QE (line 13) | function QE(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0,k=0,l=0.0...
function RE (line 13) | function RE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=0;e=c[a>>2]|0...
function SE (line 13) | function SE(b){b=b|0;var d=0,e=0,f=0,g=0;d=sJ(b)|0;if(d>>>0>=(c[42409]|0...
function TE (line 13) | function TE(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0.0,m=0,n=0,o...
function UE (line 13) | function UE(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var g=0.0,i=0....
function VE (line 13) | function VE(a,b,c,d,e,f,g){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h[d>>3...
function WE (line 13) | function WE(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var g=0.0,i=0....
function XE (line 13) | function XE(b){b=b|0;var d=0,e=0;d=a[b>>0]|0;if(((d<<24>>24!=98?(e=b+1|0...
function YE (line 13) | function YE(a,b){a=a|0;b=b|0;return jK(c[a>>2]|0,c[b>>2]|0)|0}
function ZE (line 13) | function ZE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=sJ(a...
function _E (line 13) | function _E(a){a=a|0;c[42414]=a;return}
function $E (line 13) | function $E(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,g=0;f=l;l=l+208...
function aF (line 13) | function aF(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;var i=0,j...
function bF (line 13) | function bF(a){a=a|0;var b=0,c=0.0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0,k=0,l...
function cF (line 13) | function cF(a,b,c){a=a|0;b=+b;c=+c;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;d=c...
function dF (line 13) | function dF(a,b,d){a=a|0;b=+b;d=+d;var e=0;c[42417]=100;e=ww(1600)|0;c[a...
function eF (line 13) | function eF(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;f=c[a>>2]|0;e=(c[a+4>>2]|...
function fF (line 13) | function fF(a,b,d,e,f,g,i){a=a|0;b=+b;d=+d;e=+e;f=+f;g=+g;i=+i;var j=0,k...
function gF (line 13) | function gF(a){a=a|0;var b=0;b=c[a>>2]|0;eF(a,+h[b>>3],+h[b+8>>3]);c[a>>...
function hF (line 13) | function hF(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0;d=+h[a+16>>3];b=+h[a+24...
function iF (line 13) | function iF(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0...
function jF (line 13) | function jF(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0...
function kF (line 13) | function kF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0.0,m=0,n=0...
function lF (line 13) | function lF(a){a=a|0;var d=0,e=0,f=0;d=Wt(a)|0;e=c[d>>2]|0;a=c[e+4>>2]|0...
function mF (line 13) | function mF(b){b=b|0;var d=0.0,e=0,f=0;switch(a[b+4>>0]|0){case 1:{e=c[b...
function nF (line 13) | function nF(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p...
function oF (line 13) | function oF(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0...
function pF (line 13) | function pF(a){a=a|0;var b=0;b=c[a+16>>2]|0;c[b+208>>2]=0;c[b+228>>2]=0;...
function qF (line 13) | function qF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0;i=a+16|0;f=c[...
function rF (line 13) | function rF(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0...
function sF (line 13) | function sF(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0;j...
function tF (line 13) | function tF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0;c[a...
function uF (line 13) | function uF(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0...
function vF (line 13) | function vF(f,g,i,j,k){f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0.0,n=0,o=0.0...
function wF (line 13) | function wF(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0...
function xF (line 13) | function xF(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=c[d+16>>2]|0;f=h+208|0;if...
function yF (line 13) | function yF(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=c[b>>2]|0;if(e|0)c[a+16>>2]...
function zF (line 13) | function zF(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0,i=0;f=l;l=l+64|0;...
function AF (line 13) | function AF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0,k=0.0,m=0.0,n...
function BF (line 13) | function BF(d,e,f,g,i,j,k,m){d=d|0;e=e|0;f=f|0;g=g|0;i=+i;j=j|0;k=k|0;m=...
function CF (line 13) | function CF(a){a=a|0;$I(c[a>>2]|0);$I(c[a+4>>2]|0);$I(c[a+8>>2]|0);$I(c[...
function DF (line 13) | function DF(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(a|0){j=a+4|0...
function EF (line 13) | function EF(a){a=a|0;$I(c[a+32>>2]|0);$I(a);return}
function FF (line 13) | function FF(b,d){b=b|0;d=d|0;switch(a[b+4>>0]|0){case 1:{GF(c[b>>2]|0);b...
function GF (line 13) | function GF(a){a=a|0;var b=0,d=0,e=0;e=a+84|0;if((c[a+100>>2]|0)==-1)Ll(...
function HF (line 13) | function HF(a){a=a|0;FF(a+88|0,0);CF(a);$I(a);return}
function IF (line 13) | function IF(b,e,f){b=b|0;e=e|0;f=f|0;var g=0;b=c[(c[(c[b+16>>2]|0)+104>>...
function JF (line 13) | function JF(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+4>>2]|0;if(!((d|0)!=0?(jK...
function KF (line 13) | function KF(b,d){b=b|0;d=d|0;var e=0;e=c[b+4>>2]|0;if(!((e|0)!=0?(jK(e,d...
function LF (line 13) | function LF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}
function MF (line 13) | function MF(d){d=d|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r...
function NF (line 13) | function NF(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;if(a>>>0<21)a=c[54824+...
function OF (line 13) | function OF(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0...
function PF (line 13) | function PF(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0;h=bn(a,d,f,0,0)...
function QF (line 13) | function QF(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[(c[a+16>>2]|0)+192>...
function RF (line 13) | function RF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=a+92|0;e=0;f=...
function SF (line 13) | function SF(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h+4|0;d=h;c[...
function TF (line 13) | function TF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=(c[b+16>>2]|0)+192|0;whil...
function UF (line 13) | function UF(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function VF (line 13) | function VF(b,d){b=b|0;d=d|0;var e=0;a:do switch(Do(b)|0){case 0:{gm(d,E...
function WF (line 13) | function WF(b){b=b|0;var c=0,d=0;c=Jm(b,122531)|0;if(!((c|0)!=0?(a[c>>0]...
function XF (line 13) | function XF(f,g,i,j){f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0...
function YF (line 13) | function YF(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h...
function ZF (line 13) | function ZF(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0...
function _F (line 13) | function _F(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0...
function $F (line 13) | function $F(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0...
function aG (line 13) | function aG(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>...
function bG (line 13) | function bG(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;g=b[d+4>>1]|0;f=0;while(1){...
function cG (line 13) | function cG(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0...
function dG (line 13) | function dG(f,g,i,j){f=f|0;g=g|0;i=i|0;j=j|0;var k=0.0,m=0.0,n=0,o=0,p=0...
function eG (line 13) | function eG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;j=d...
function fG (line 13) | function fG(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0;m=l;l=l...
function gG (line 13) | function gG(){return Rl(54908,c[4345]|0)|0}
function hG (line 13) | function hG(a,b,d){a=a|0;b=b|0;d=d|0;d=ww(12)|0;c[d>>2]=c[b>>2];return d|0}
function iG (line 13) | function iG(a,b,c){a=a|0;b=b|0;c=c|0;$I(b);return}
function jG (line 13) | function jG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b>>2]|0;e=c[d>>2]|0;ret...
function kG (line 13) | function kG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;bb[c...
function lG (line 13) | function lG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=(b...
function mG (line 13) | function mG(a){a=a|0;var b=0;if(!(c[42419]|0)){b=ww((a<<2)+4|0)|0;c[4241...
function nG (line 13) | function nG(){$I(c[42419]|0);c[42419]=0;c[42431]=0;return}
function oG (line 13) | function oG(){c[42431]=0;return}
function pG (line 13) | function pG(){var a=0,b=0,d=0;b=c[42431]|0;d=c[42419]|0;a=1;while(1){if(...
function qG (line 13) | function qG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;f=c[42419]|0;g=c[f+(a<<...
function rG (line 13) | function rG(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=c[42431]|0;if((b|0)==(c[...
function sG (line 13) | function sG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=c[424...
function tG (line 13) | function tG(){var a=0,b=0,d=0,e=0;b=c[42431]|0;if(!b)a=0;else{e=c[42419]...
function uG (line 13) | function uG(a,b){a=a|0;b=b|0;c[a>>2]=b;qG(c[a+4>>2]|0);pG();return}
function vG (line 13) | function vG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0...
function wG (line 13) | function wG(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+8|0;e=c[d>>2]|0;c[d>>2]=e+1...
function xG (line 13) | function xG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o...
function yG (line 13) | function yG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0,k...
function zG (line 13) | function zG(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o...
function AG (line 13) | function AG(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=bb[c[...
function BG (line 13) | function BG(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;a:do if((+h[b+64>>3]+-3...
function CG (line 13) | function CG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,l=0,m...
function DG (line 13) | function DG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=...
function EG (line 13) | function EG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3...
function FG (line 13) | function FG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b>>3];...
function GG (line 13) | function GG(a){a=a|0;var b=0,d=0;d=a+8|0;$I(c[(c[d>>2]|0)+36>>2]|0);b=a+...
function HG (line 13) | function HG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0...
function IG (line 13) | function IG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0...
function JG (line 13) | function JG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=0;while(1){if((d|...
function KG (line 13) | function KG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0...
function LG (line 13) | function LG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;g=+h[(+...
function MG (line 13) | function MG(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[a+4>>2]|0;do if((c[...
function NG (line 13) | function NG(a,b,d,e,f,g,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i...
function OG (line 13) | function OG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0...
function PG (line 13) | function PG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,h=0,i=0,j=0.0...
function QG (line 13) | function QG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;g...
function RG (line 13) | function RG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,l...
function SG (line 13) | function SG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0...
function TG (line 13) | function TG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0...
function UG (line 13) | function UG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0...
function VG (line 13) | function VG(a){a=a|0;var b=0.0;b=+(a|0);a=0;while(1){if(!(b>=1.0))break;...
function WG (line 13) | function WG(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+(a|0);c=d;a=0;while(1){i...
function XG (line 13) | function XG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0...
function YG (line 13) | function YG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!(c[b+(a...
function ZG (line 13) | function ZG(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0...
function _G (line 13) | function _G(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k...
function $G (line 13) | function $G(a,b,d){a=a|0;b=b|0;d=d|0;return c[b+((c[((d|0)==1?b+(a*56|0)...
function aH (line 13) | function aH(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=c[42439]|0;if((b...
function bH (line 13) | function bH(){var a=0;a=c[42440]|0;if((a|0)<(c[42437]|0)){c[42440]=a+1;r...
function cH (line 13) | function cH(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];i...
function dH (line 13) | function dH(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];i...
function eH (line 13) | function eH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0...
function fH (line 13) | function fH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[d...
function gH (line 13) | function gH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[d...
function hH (line 13) | function hH(a){a=a|0;var b=0;b=ww(8)|0;if(b|0){c[b+4>>2]=a;c[b>>2]=0}ret...
function iH (line 13) | function iH(a,b){a=a|0;b=b|0;if(b){b=hH(b)|0;c[b>>2]=a;a=b}return a|0}
function jH (line 13) | function jH(a){a=a|0;var b=0;do{b=a;a=c[a>>2]|0;$I(b)}while((a|0)!=0);re...
function kH (line 13) | function kH(){var a=0;a=ww(1992)|0;if(a|0)c[a>>2]=lH(a)|0;return a|0}
function lH (line 13) | function lH(a){a=a|0;var b=0;b=rH(a)|0;c[b+4>>2]=0;a=a+1972|0;c[a>>2]=(c...
function mH (line 13) | function mH(a){a=a|0;nH(a,c[a>>2]|0);$I(c[a>>2]|0);$I(a);return 0}
function nH (line 13) | function nH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=a+1980|0;h=a+...
function oH (line 13) | function oH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!b)ma(12...
function pH (line 13) | function pH(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0...
function qH (line 13) | function qH(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0...
function rH (line 13) | function rH(a){a=a|0;a=a+1968|0;c[a>>2]=(c[a>>2]|0)+1;a=_I(1288)|0;sH(a)...
function sH (line 13) | function sH(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=-1;b=0;while(1){if((b|0...
function tH (line 13) | function tH(a){a=a|0;yH(a);c[a+16>>2]=0;return}
function uH (line 13) | function uH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;g=...
function vH (line 13) | function vH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0...
function wH (line 13) | function wH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!b)ma(12...
function xH (line 13) | function xH(a,b){a=a|0;b=b|0;if(!((a|0)!=0&b>>>0<64))ma(123591,123529,20...
function yH (line 13) | function yH(a){a=a|0;var b=0;b=0;while(1){if((b|0)==4)break;c[a+(b<<2)>>...
function zH (line 13) | function zH(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;c[d>>2]=1;c[d+8>>2...
function AH (line 13) | function AH(a){a=a|0;var b=0,d=0,e=0;if(!a)ma(123632,123634,128,123646);...
function BH (line 13) | function BH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;g=l;l=l...
function CH (line 13) | function CH(a,b){a=a|0;b=b|0;var d=0,e=0;if((a|0)!=0&(b|0)!=0)d=0;else m...
function DH (line 13) | function DH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0;if(!b)m...
function EH (line 13) | function EH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;
Copy disabled (too large)
Download .json
Condensed preview — 1239 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (14,452K chars).
[
{
"path": ".clang-format",
"chars": 8337,
"preview": "---\nLanguage: Cpp\nAccessModifierOffset: -2\nAlignAfterOpenBracket: Align\nAlignArrayOfStructures: None\nAlignConsecu"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 642,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the b"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 595,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your fea"
},
{
"path": ".github/workflows/ci-linux.yml",
"chars": 5791,
"preview": "name: CI-Linux\n\non:\n push:\n branches: [ master ]\n pull_request:\n branches: [ master ]\n\n # Allows you to run thi"
},
{
"path": ".github/workflows/ci-macos.yml",
"chars": 10622,
"preview": "name: CI-MacOS\n\non:\n push:\n branches: [ master ]\n pull_request:\n branches: [ master ]\n\n # Allows you to run thi"
},
{
"path": ".github/workflows/ci-win.yml",
"chars": 4609,
"preview": "name: CI-Windows\r\n\r\non:\r\n push:\r\n branches: [ master ]\r\n pull_request:\r\n branches: [ master ]\r\n\r\n # Allows you "
},
{
"path": ".gitignore",
"chars": 230,
"preview": "*.pro.user\n*.pro.user.*\n.ccls\ncompile_commands.json\ncompile_commands.json.*\ncompile_flags.txt\n.cache\n.tasks\n.vimspector."
},
{
"path": ".gitmodules",
"chars": 192,
"preview": "[submodule \"libs/vtextedit\"]\n\tpath = libs/vtextedit\n\turl = https://github.com/vnotex/vtextedit.git\n[submodule \"libs/QHot"
},
{
"path": "AGENTS.md",
"chars": 2347,
"preview": "# VNote Agent Development Guide\n\n## Setup\n\nAfter cloning the repository, run the init script to set up your development "
},
{
"path": "CMakeLists.txt",
"chars": 670,
"preview": "cmake_minimum_required (VERSION 3.20)\n\nset(CMAKE_OSX_DEPLOYMENT_TARGET \"12.1\" CACHE STRING \"Minimum OS X deployment vers"
},
{
"path": "COPYING.LESSER",
"chars": 7652,
"preview": " GNU LESSER GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007"
},
{
"path": "README.md",
"chars": 2382,
"preview": "# VNote\n  \nadd_subdirectory(vtextedit)\n"
},
{
"path": "package/QtWebEngineProcess.entitlements.xml",
"chars": 800,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "package/entitlements.xml",
"chars": 880,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "package/lgpl-3.0.rtf",
"chars": 18666,
"preview": "{\\rtf1\\ansi\\deff3\\adeflang1025\n{\\fonttbl{\\f0\\froman\\fprq2\\fcharset0 Times New Roman;}{\\f1\\froman\\fprq2\\fcharset2 Symbol;"
},
{
"path": "package/qt.conf",
"chars": 51,
"preview": "[Platforms]\nWindowsArguments = fontengine=freetype\n"
},
{
"path": "privacy_policy.md",
"chars": 1354,
"preview": "# Privacy Policy\n\n## Introduction\nWelcome to VNote! We value your privacy and are committed to protecting your personal "
},
{
"path": "scripts/init.cmd",
"chars": 1246,
"preview": "@echo off\nREM Initialization script for VNote development environment on Windows\nREM This script calls init.sh using Git"
},
{
"path": "scripts/init.sh",
"chars": 2748,
"preview": "#!/bin/bash\n#\n# Initialization script for VNote development environment\n# Run this script once after cloning the reposit"
},
{
"path": "scripts/pre-commit",
"chars": 1032,
"preview": "#!/bin/sh\n#\n# Pre-commit hook to format C++ files with clang-format\n# Excludes third-party library folders\n\n# Folders to"
},
{
"path": "scripts/update_version.py",
"chars": 1611,
"preview": "import fileinput\nimport sys\nimport re\n\nif len(sys.argv) < 2:\n print(\"Please provide a new version string!\")\n exit\n"
},
{
"path": "src/CMakeLists.txt",
"chars": 6589,
"preview": "cmake_minimum_required(VERSION 3.20)\n\nset(CMAKE_INCLUDE_CURRENT_DIR ON)\n\nset(CMAKE_INSTALL_BINDIR \".\" CACHE STRING \"Bina"
},
{
"path": "src/CPackLinuxDeployQt.cmake.in",
"chars": 953,
"preview": "message(STATUS \"VX_APPIMAGE_DEST_DIR ${VX_APPIMAGE_DEST_DIR}\")\nmessage(STATUS \"VX_APPIMAGE_DESKTOP_FILE ${VX_APPIMAGE_DE"
},
{
"path": "src/CPackMacDeployQt.cmake.in",
"chars": 301,
"preview": "execute_process(COMMAND \"optool\" strip -t ${CMAKE_CURRENT_BINARY_DIR}/VNote.app\n WORKING_DIRECTORY ${CPACK_PACKAGE_DI"
},
{
"path": "src/Packaging.cmake",
"chars": 7353,
"preview": "# from: https://github.com/miurahr/cmake-qt-packaging-example\nfind_package(Qt${QT_DEFAULT_MAJOR_VERSION} REQUIRED COMPON"
},
{
"path": "src/application.cpp",
"chars": 2074,
"preview": "#include \"application.h\"\n\n#include <QDebug>\n#include <QDir>\n#include <QFileOpenEvent>\n#include <QFileSystemWatcher>\n#inc"
},
{
"path": "src/application.h",
"chars": 695,
"preview": "#ifndef APPLICATION_H\n#define APPLICATION_H\n#include <QApplication>\n\nclass QFileSystemWatcher;\nclass QTimer;\n\nnamespace "
},
{
"path": "src/commandlineoptions.cpp",
"chars": 2603,
"preview": "#include \"commandlineoptions.h\"\n\n#include <QCommandLineOption>\n#include <QCommandLineParser>\n#include <QCoreApplication>"
},
{
"path": "src/commandlineoptions.h",
"chars": 521,
"preview": "#ifndef COMMANDLINEOPTIONS_H\n#define COMMANDLINEOPTIONS_H\n\n#include <QStringList>\n\nclass CommandLineOptions {\npublic:\n "
},
{
"path": "src/core/CMakeLists.txt",
"chars": 3993,
"preview": "target_sources(vnote PRIVATE\n buffer/buffer.cpp buffer/buffer.h\n buffer/bufferprovider.cpp buffer/bufferprovider.h"
},
{
"path": "src/core/buffer/buffer.cpp",
"chars": 14355,
"preview": "#include \"buffer.h\"\n\n#include <QTimer>\n\n#include <notebook/node.h>\n#include <utils/fileutils.h>\n#include <utils/pathutil"
},
{
"path": "src/core/buffer/buffer.h",
"chars": 5986,
"preview": "#ifndef BUFFER_H\n#define BUFFER_H\n\n#include <QObject>\n#include <QSharedPointer>\n\n#include <functional>\n\n#include <global"
},
{
"path": "src/core/buffer/bufferprovider.cpp",
"chars": 522,
"preview": "#include \"bufferprovider.h\"\n\n#include <QFileInfo>\n\nusing namespace vnotex;\n\nbool BufferProvider::checkFileExistsOnDisk()"
},
{
"path": "src/core/buffer/bufferprovider.h",
"chars": 2224,
"preview": "#ifndef BUFFERPROVIDER_H\n#define BUFFERPROVIDER_H\n\n#include <QDateTime>\n#include <QObject>\n\n#include \"buffer.h\"\n\nnamespa"
},
{
"path": "src/core/buffer/filebufferprovider.cpp",
"chars": 4289,
"preview": "#include \"filebufferprovider.h\"\n\n#include <QFileInfo>\n\n#include <core/exception.h>\n#include <core/file.h>\n#include <note"
},
{
"path": "src/core/buffer/filebufferprovider.h",
"chars": 2299,
"preview": "#ifndef FILEBUFFERPROVIDER_H\n#define FILEBUFFERPROVIDER_H\n\n#include \"bufferprovider.h\"\n\nnamespace vnotex {\nclass File;\n\n"
},
{
"path": "src/core/buffer/filetypehelper.cpp",
"chars": 4630,
"preview": "#include \"filetypehelper.h\"\n\n#include <QDebug>\n#include <QFileInfo>\n\n#include \"buffer.h\"\n#include <core/configmgr.h>\n#in"
},
{
"path": "src/core/buffer/filetypehelper.h",
"chars": 1376,
"preview": "#ifndef FILETYPEHELPER_H\n#define FILETYPEHELPER_H\n\n#include <QMap>\n#include <QString>\n#include <QVector>\n\nnamespace vnot"
},
{
"path": "src/core/buffer/ibufferfactory.h",
"chars": 460,
"preview": "#ifndef IBUFFERFACTORY_H\n#define IBUFFERFACTORY_H\n\n#include <QSharedPointer>\n\nnamespace vnotex {\nclass Buffer;\nstruct Bu"
},
{
"path": "src/core/buffer/markdownbuffer.cpp",
"chars": 3620,
"preview": "#include \"markdownbuffer.h\"\n\n#include <QDir>\n\n#include <buffer/bufferprovider.h>\n#include <notebook/node.h>\n#include <ut"
},
{
"path": "src/core/buffer/markdownbuffer.h",
"chars": 1405,
"preview": "#ifndef MARKDOWNBUFFER_H\n#define MARKDOWNBUFFER_H\n\n#include \"buffer.h\"\n\n#include <QHash>\n#include <QVector>\n\n#include <v"
},
{
"path": "src/core/buffer/markdownbufferfactory.cpp",
"chars": 448,
"preview": "#include \"markdownbufferfactory.h\"\n\n#include \"markdownbuffer.h\"\n\nusing namespace vnotex;\n\nBuffer *MarkdownBufferFactory:"
},
{
"path": "src/core/buffer/markdownbufferfactory.h",
"chars": 449,
"preview": "#ifndef MARKDOWNBUFFERFACTORY_H\n#define MARKDOWNBUFFERFACTORY_H\n\n#include \"ibufferfactory.h\"\n\nnamespace vnotex {\n// Buff"
},
{
"path": "src/core/buffer/mindmapbuffer.cpp",
"chars": 450,
"preview": "#include \"mindmapbuffer.h\"\n\n#include <widgets/mindmapviewwindow.h>\n\nusing namespace vnotex;\n\nMindMapBuffer::MindMapBuffe"
},
{
"path": "src/core/buffer/mindmapbuffer.h",
"chars": 459,
"preview": "#ifndef MINDMAPBUFFER_H\n#define MINDMAPBUFFER_H\n\n#include \"buffer.h\"\n\nnamespace vnotex {\nclass MindMapBuffer : public Bu"
},
{
"path": "src/core/buffer/mindmapbufferfactory.cpp",
"chars": 441,
"preview": "#include \"mindmapbufferfactory.h\"\n\n#include \"mindmapbuffer.h\"\n\nusing namespace vnotex;\n\nBuffer *MindMapBufferFactory::cr"
},
{
"path": "src/core/buffer/mindmapbufferfactory.h",
"chars": 444,
"preview": "#ifndef MINDMAPBUFFERFACTORY_H\n#define MINDMAPBUFFERFACTORY_H\n\n#include \"ibufferfactory.h\"\n\nnamespace vnotex {\n// Buffer"
},
{
"path": "src/core/buffer/nodebufferprovider.cpp",
"chars": 4146,
"preview": "#include \"nodebufferprovider.h\"\n\n#include <QFileInfo>\n\n#include <core/exception.h>\n#include <core/file.h>\n#include <note"
},
{
"path": "src/core/buffer/nodebufferprovider.h",
"chars": 2317,
"preview": "#ifndef NODEBUFFERPROVIDER_H\n#define NODEBUFFERPROVIDER_H\n\n#include <QSharedPointer>\n\n#include \"bufferprovider.h\"\n\nnames"
},
{
"path": "src/core/buffer/pdfbuffer.cpp",
"chars": 433,
"preview": "#include \"pdfbuffer.h\"\n\n#include <widgets/pdfviewwindow.h>\n\nusing namespace vnotex;\n\nPdfBuffer::PdfBuffer(const BufferPa"
},
{
"path": "src/core/buffer/pdfbuffer.h",
"chars": 439,
"preview": "#ifndef PDFBUFFER_H\n#define PDFBUFFER_H\n\n#include \"buffer.h\"\n\nnamespace vnotex {\nclass PdfBuffer : public Buffer {\n Q_O"
},
{
"path": "src/core/buffer/pdfbufferfactory.cpp",
"chars": 523,
"preview": "#include \"pdfbufferfactory.h\"\n\n#include \"pdfbuffer.h\"\n#include \"urlbasedbufferprovider.h\"\n\nusing namespace vnotex;\n\nBuff"
},
{
"path": "src/core/buffer/pdfbufferfactory.h",
"chars": 424,
"preview": "#ifndef PDFBUFFERFACTORY_H\n#define PDFBUFFERFACTORY_H\n\n#include \"ibufferfactory.h\"\n\nnamespace vnotex {\n// Buffer factory"
},
{
"path": "src/core/buffer/textbuffer.cpp",
"chars": 440,
"preview": "#include \"textbuffer.h\"\n\n#include <widgets/textviewwindow.h>\n\nusing namespace vnotex;\n\nTextBuffer::TextBuffer(const Buff"
},
{
"path": "src/core/buffer/textbuffer.h",
"chars": 444,
"preview": "#ifndef TEXTBUFFER_H\n#define TEXTBUFFER_H\n\n#include \"buffer.h\"\n\nnamespace vnotex {\nclass TextBuffer : public Buffer {\n "
},
{
"path": "src/core/buffer/textbufferfactory.cpp",
"chars": 380,
"preview": "#include \"textbufferfactory.h\"\n\n#include \"textbuffer.h\"\n\nusing namespace vnotex;\n\nBuffer *TextBufferFactory::createBuffe"
},
{
"path": "src/core/buffer/textbufferfactory.h",
"chars": 429,
"preview": "#ifndef TEXTBUFFERFACTORY_H\n#define TEXTBUFFERFACTORY_H\n\n#include \"ibufferfactory.h\"\n\nnamespace vnotex {\n// Buffer facto"
},
{
"path": "src/core/buffer/urlbasedbufferprovider.h",
"chars": 3689,
"preview": "#ifndef URLBASEDBUFFERPROVIDER_H\n#define URLBASEDBUFFERPROVIDER_H\n\n#include \"bufferprovider.h\"\n\n#include <QSharedPointer"
},
{
"path": "src/core/buffermgr.cpp",
"chars": 8647,
"preview": "#include \"buffermgr.h\"\n\n#include <QDebug>\n#include <QUrl>\n\n#include \"configmgr.h\"\n#include \"externalfile.h\"\n#include \"no"
},
{
"path": "src/core/buffermgr.h",
"chars": 1530,
"preview": "#ifndef BUFFERMGR_H\n#define BUFFERMGR_H\n\n#include <QMap>\n#include <QObject>\n#include <QScopedPointer>\n#include <QSharedP"
},
{
"path": "src/core/clipboarddata.cpp",
"chars": 4329,
"preview": "#include \"clipboarddata.h\"\n\n#include <QJsonArray>\n#include <QJsonDocument>\n\n#include \"exception.h\"\n\nusing namespace vnot"
},
{
"path": "src/core/clipboarddata.h",
"chars": 1710,
"preview": "#ifndef CLIPBOARDDATA_H\n#define CLIPBOARDDATA_H\n\n#include <QJsonObject>\n#include <QSharedPointer>\n#include <QVector>\n\n#i"
},
{
"path": "src/core/configmgr.cpp",
"chars": 17377,
"preview": "#include \"configmgr.h\"\n\n#include <QCoreApplication>\n#include <QDebug>\n#include <QDir>\n#include <QFileInfo>\n#include <QJs"
},
{
"path": "src/core/configmgr.h",
"chars": 3873,
"preview": "#ifndef CONFIGMGR_H\n#define CONFIGMGR_H\n\n#include <QJsonObject>\n#include <QObject>\n#include <QScopedPointer>\n#include <Q"
},
{
"path": "src/core/coreconfig.cpp",
"chars": 10741,
"preview": "#include \"coreconfig.h\"\n\n#include <QLocale>\n#include <QMetaEnum>\n\n#include <buffer/filetypehelper.h>\n#include <utils/uti"
},
{
"path": "src/core/coreconfig.h",
"chars": 5038,
"preview": "#ifndef CORECONFIG_H\n#define CORECONFIG_H\n\n#include \"iconfig.h\"\n\n#include <QString>\n#include <QStringList>\n#include <QtG"
},
{
"path": "src/core/editorconfig.cpp",
"chars": 10222,
"preview": "#include \"editorconfig.h\"\n\n#include <QDebug>\n#include <QMetaEnum>\n\n#include \"markdowneditorconfig.h\"\n#include \"mindmaped"
},
{
"path": "src/core/editorconfig.h",
"chars": 4648,
"preview": "#ifndef VNOTEX_EDITORCONFIG_H\n#define VNOTEX_EDITORCONFIG_H\n\n#include \"iconfig.h\"\n\n#include <QObject>\n#include <QScopedP"
},
{
"path": "src/core/events.h",
"chars": 443,
"preview": "#ifndef EVENTS_H\n#define EVENTS_H\n\n#include <QVariant>\n\nnamespace vnotex {\nclass Event {\npublic:\n void reset() {\n m_"
},
{
"path": "src/core/exception.h",
"chars": 2162,
"preview": "#ifndef EXCEPTION_H\n#define EXCEPTION_H\n\n#include <QDebug>\n#include <QString>\n#include <stdexcept>\n\nnamespace vnotex {\nc"
},
{
"path": "src/core/externalfile.cpp",
"chars": 1899,
"preview": "#include \"externalfile.h\"\n\n#include <utils/fileutils.h>\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nExternalF"
},
{
"path": "src/core/externalfile.h",
"chars": 1209,
"preview": "#ifndef EXTERNALFILE_H\n#define EXTERNALFILE_H\n\n#include \"file.h\"\n\nnamespace vnotex {\nclass ExternalFile : public File, p"
},
{
"path": "src/core/file.cpp",
"chars": 223,
"preview": "#include \"file.h\"\n\nusing namespace vnotex;\n\nconst FileType &File::getContentType() const {\n return FileTypeHelper::getI"
},
{
"path": "src/core/file.h",
"chars": 1472,
"preview": "#ifndef FILE_H\n#define FILE_H\n\n#include <QString>\n\n#include <buffer/filetypehelper.h>\n\nclass QImage;\n\nnamespace vnotex {"
},
{
"path": "src/core/filelocator.h",
"chars": 616,
"preview": "#ifndef FILELOCATOR_H\n#define FILELOCATOR_H\n\n#include <QString>\n\nnamespace vnotex {\nclass Node;\n\n// A unique locator for"
},
{
"path": "src/core/fileopenparameters.h",
"chars": 1257,
"preview": "#ifndef FILEOPENPARAMETERS_H\n#define FILEOPENPARAMETERS_H\n\n#include <functional>\n\n#include <QSharedPointer>\n\n#include \"g"
},
{
"path": "src/core/global.cpp",
"chars": 45,
"preview": "#include \"global.h\"\n\nusing namespace vnotex;\n"
},
{
"path": "src/core/global.h",
"chars": 3553,
"preview": "#ifndef VNOTEX_GLOBAL_H\n#define VNOTEX_GLOBAL_H\n\n#include <QDebug>\n#include <QJsonObject>\n#include <QPair>\n#include <QSt"
},
{
"path": "src/core/historyitem.cpp",
"chars": 881,
"preview": "#include \"historyitem.h\"\n\n#include <utils/utils.h>\n\nusing namespace vnotex;\n\nHistoryItem::HistoryItem(const QString &p_p"
},
{
"path": "src/core/historyitem.h",
"chars": 548,
"preview": "#ifndef HISTORYITEM_H\n#define HISTORYITEM_H\n\n#include <QDateTime>\n#include <QJsonObject>\n#include <QString>\n\nnamespace v"
},
{
"path": "src/core/historymgr.cpp",
"chars": 6085,
"preview": "#include \"historymgr.h\"\n\n#include <QDebug>\n\n#include \"configmgr.h\"\n#include \"coreconfig.h\"\n#include \"exception.h\"\n#inclu"
},
{
"path": "src/core/historymgr.h",
"chars": 1800,
"preview": "#ifndef HISTORYMGR_H\n#define HISTORYMGR_H\n\n#include <QObject>\n#include <QSharedPointer>\n#include <QVector>\n\n#include \"gl"
},
{
"path": "src/core/htmltemplatehelper.cpp",
"chars": 15441,
"preview": "#include \"htmltemplatehelper.h\"\n\n#include <QDebug>\n\n#include <core/configmgr.h>\n#include <core/exception.h>\n#include <co"
},
{
"path": "src/core/htmltemplatehelper.h",
"chars": 4238,
"preview": "#ifndef HTMLTEMPLATEHELPER_H\n#define HTMLTEMPLATEHELPER_H\n\n#include <QString>\n\nnamespace vnotex {\nclass MarkdownEditorCo"
},
{
"path": "src/core/iconfig.h",
"chars": 5160,
"preview": "#ifndef ICONFIG_H\n#define ICONFIG_H\n\n#include <QBitArray>\n#include <QDataStream>\n#include <QIODevice>\n#include <QJsonArr"
},
{
"path": "src/core/location.h",
"chars": 1383,
"preview": "#ifndef LOCATION_H\n#define LOCATION_H\n\n#include <QDebug>\n\n#include \"global.h\"\n\nnamespace vnotex {\nstruct Location {\n fr"
},
{
"path": "src/core/logger.cpp",
"chars": 2912,
"preview": "#include \"logger.h\"\n\n#include \"configmgr.h\"\n#include <QFile>\n#include <QTextStream>\n\nusing namespace vnotex;\n\nQFile Logg"
},
{
"path": "src/core/logger.h",
"chars": 450,
"preview": "#ifndef LOGGER_H\n#define LOGGER_H\n\n#include <QMessageLogContext>\n#include <QString>\n\nclass QFile;\n\nnamespace vnotex {\ncl"
},
{
"path": "src/core/mainconfig.cpp",
"chars": 2835,
"preview": "#include \"mainconfig.h\"\n\n#include <QDebug>\n#include <QJsonObject>\n\n#include \"configmgr.h\"\n#include \"coreconfig.h\"\n#inclu"
},
{
"path": "src/core/mainconfig.h",
"chars": 1158,
"preview": "#ifndef MAINCONFIG_H\n#define MAINCONFIG_H\n\n#include \"iconfig.h\"\n\n#include <QString>\n#include <QtGlobal>\n\nclass QJsonObje"
},
{
"path": "src/core/markdowneditorconfig.cpp",
"chars": 17684,
"preview": "#include \"markdowneditorconfig.h\"\n\n#include <QDebug>\n\n#include \"mainconfig.h\"\n#include \"texteditorconfig.h\"\n\nusing names"
},
{
"path": "src/core/markdowneditorconfig.h",
"chars": 7543,
"preview": "#ifndef MARKDOWNEDITORCONFIG_H\n#define MARKDOWNEDITORCONFIG_H\n\n#include \"iconfig.h\"\n\n#include \"webresource.h\"\n\n#include "
},
{
"path": "src/core/mindmapeditorconfig.cpp",
"chars": 1648,
"preview": "#include \"mindmapeditorconfig.h\"\n\n#include \"mainconfig.h\"\n\n#define READSTR(key) readString(appObj, userObj, (key))\n#defi"
},
{
"path": "src/core/mindmapeditorconfig.h",
"chars": 674,
"preview": "#ifndef MINDMAPEDITORCONFIG_H\n#define MINDMAPEDITORCONFIG_H\n\n#include \"iconfig.h\"\n\n#include \"webresource.h\"\n\nnamespace v"
},
{
"path": "src/core/namebasedserver.h",
"chars": 903,
"preview": "#ifndef NAMEBASEDSERVER_H\n#define NAMEBASEDSERVER_H\n\n#include <QDebug>\n#include <QHash>\n#include <QList>\n#include <QShar"
},
{
"path": "src/core/noncopyable.h",
"chars": 311,
"preview": "#ifndef NONCOPYABLE_H\n#define NONCOPYABLE_H\n\nnamespace vnotex {\nclass Noncopyable {\nprotected:\n Noncopyable() = default"
},
{
"path": "src/core/notebook/bundlenotebook.cpp",
"chars": 6194,
"preview": "#include \"bundlenotebook.h\"\n\n#include <QCoreApplication>\n#include <QDebug>\n\n#include <core/exception.h>\n#include <core/h"
},
{
"path": "src/core/notebook/bundlenotebook.h",
"chars": 2049,
"preview": "#ifndef BUNDLENOTEBOOK_H\n#define BUNDLENOTEBOOK_H\n\n#include \"global.h\"\n#include \"historyi.h\"\n#include \"notebook.h\"\n\nname"
},
{
"path": "src/core/notebook/bundlenotebookfactory.cpp",
"chars": 3202,
"preview": "#include \"bundlenotebookfactory.h\"\n\n#include <QDebug>\n#include <QObject>\n\n#include \"../exception.h\"\n#include \"bundlenote"
},
{
"path": "src/core/notebook/bundlenotebookfactory.h",
"chars": 1123,
"preview": "#ifndef BUNDLENOTEBOOKFACTORY_H\n#define BUNDLENOTEBOOKFACTORY_H\n\n#include \"inotebookfactory.h\"\n\nnamespace vnotex {\nclass"
},
{
"path": "src/core/notebook/externalnode.cpp",
"chars": 606,
"preview": "#include \"externalnode.h\"\n\n#include \"node.h\"\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nExternalNode::Extern"
},
{
"path": "src/core/notebook/externalnode.h",
"chars": 638,
"preview": "#ifndef EXTERNALNODE_H\n#define EXTERNALNODE_H\n\n#include <QString>\n\nnamespace vnotex {\nclass Node;\n\n// External node not "
},
{
"path": "src/core/notebook/historyi.h",
"chars": 468,
"preview": "#ifndef HISTORYI_H\n#define HISTORYI_H\n\n#include <QVector>\n\n#include <core/historyitem.h>\n\nnamespace vnotex {\n// History "
},
{
"path": "src/core/notebook/inotebookfactory.h",
"chars": 1266,
"preview": "#ifndef INOTEBOOKFACTORY_H\n#define INOTEBOOKFACTORY_H\n\n#include <QIcon>\n#include <QSharedPointer>\n\nnamespace vnotex {\ncl"
},
{
"path": "src/core/notebook/node.cpp",
"chars": 10208,
"preview": "#include \"node.h\"\n\n#include <QDir>\n\n#include \"nodeparameters.h\"\n#include \"notebook.h\"\n#include <QRandomGenerator>\n#inclu"
},
{
"path": "src/core/notebook/node.h",
"chars": 5597,
"preview": "#ifndef NODE_H\n#define NODE_H\n\n#include <QDateTime>\n#include <QDir>\n#include <QEnableSharedFromThis>\n#include <QSharedPo"
},
{
"path": "src/core/notebook/nodeparameters.cpp",
"chars": 115,
"preview": "#include \"nodeparameters.h\"\r\n\r\nusing namespace vnotex;\r\n\r\nNodeParameters::NodeParameters(ID p_id) : m_id(p_id) {}\r\n"
},
{
"path": "src/core/notebook/nodeparameters.h",
"chars": 602,
"preview": "#ifndef NODEPARAMETERS_H\n#define NODEPARAMETERS_H\n\n#include <QDateTime>\n#include <QStringList>\n\n#include <core/global.h>"
},
{
"path": "src/core/notebook/nodevisual.cpp",
"chars": 586,
"preview": "#include \"nodevisual.h\"\n\n#include <QColor>\n#include <QtMath>\n\nusing namespace vnotex;\n\nNodeVisual::NodeVisual(const QStr"
},
{
"path": "src/core/notebook/nodevisual.h",
"chars": 1090,
"preview": "#ifndef NODEVISUAL_H\n#define NODEVISUAL_H\n\n#include <QString>\n\n/*\n * 节点视觉效果类\n * 自定义节点名称,背景颜色,边框颜色,节点名称颜色\n * 支持清除所有颜色,包括背"
},
{
"path": "src/core/notebook/notebook.cpp",
"chars": 9729,
"preview": "#include \"notebook.h\"\n\n#include <QFileInfo>\n\n#include \"nodeparameters.h\"\n#include <core/exception.h>\n#include <notebookb"
},
{
"path": "src/core/notebook/notebook.h",
"chars": 5832,
"preview": "#ifndef NOTEBOOK_H\n#define NOTEBOOK_H\n\n#include <QIcon>\n#include <QObject>\n#include <QSharedPointer>\n\n#include \"node.h\"\n"
},
{
"path": "src/core/notebook/notebookdatabaseaccess.cpp",
"chars": 23773,
"preview": "#include \"notebookdatabaseaccess.h\"\r\n\r\n#include <QDebug>\r\n#include <QSet>\r\n#include <QtSql>\r\n\r\n#include <core/exception."
},
{
"path": "src/core/notebook/notebookdatabaseaccess.h",
"chars": 3521,
"preview": "#ifndef NOTEBOOKDATABASEACCESS_H\r\n#define NOTEBOOKDATABASEACCESS_H\r\n\r\n#include <QObject>\r\n#include <QSet>\r\n#include <QSh"
},
{
"path": "src/core/notebook/notebookparameters.cpp",
"chars": 1951,
"preview": "#include \"notebookparameters.h\"\n\n#include \"notebookmgr.h\"\n\nusing namespace vnotex;\n\nQSharedPointer<NotebookParameters> N"
},
{
"path": "src/core/notebook/notebookparameters.h",
"chars": 1883,
"preview": "#ifndef NOTEBOOKPARAMETERS_H\n#define NOTEBOOKPARAMETERS_H\n\n#include <QDateTime>\n#include <QIcon>\n#include <QSharedPointe"
},
{
"path": "src/core/notebook/notebooktagmgr.cpp",
"chars": 7938,
"preview": "#include \"notebooktagmgr.h\"\r\n\r\n#include <QDebug>\r\n#include <QHash>\r\n\r\n#include \"bundlenotebook.h\"\r\n#include \"tag.h\"\r\n\r\nu"
},
{
"path": "src/core/notebook/notebooktagmgr.h",
"chars": 1990,
"preview": "#ifndef NOTEBOOKTAGMGR_H\r\n#define NOTEBOOKTAGMGR_H\r\n\r\n#include <QObject>\r\n\r\n#include \"tagi.h\"\r\n\r\n#include <functional>\r\n"
},
{
"path": "src/core/notebook/tag.cpp",
"chars": 748,
"preview": "#include \"tag.h\"\n\n#include <QRegularExpression>\n\n#include <utils/pathutils.h>\n\nusing namespace vnotex;\n\nTag::Tag(const Q"
},
{
"path": "src/core/notebook/tag.h",
"chars": 626,
"preview": "#ifndef TAG_H\n#define TAG_H\n\n#include <QEnableSharedFromThis>\n#include <QSharedPointer>\n#include <QString>\n#include <QVe"
},
{
"path": "src/core/notebook/tagi.h",
"chars": 861,
"preview": "#ifndef TAGI_H\n#define TAGI_H\n\n#include <QVector>\n\n#include \"tag.h\"\n\nnamespace vnotex {\nclass Node;\n\n// Tag interface fo"
},
{
"path": "src/core/notebook/vxnode.cpp",
"chars": 3070,
"preview": "#include \"vxnode.h\"\n\n#include <QDir>\n\n#include \"notebook.h\"\n#include \"vxnodefile.h\"\n#include <notebookbackend/inotebookb"
},
{
"path": "src/core/notebook/vxnode.h",
"chars": 1062,
"preview": "#ifndef VXNODE_H\n#define VXNODE_H\n\n#include \"node.h\"\n\nnamespace vnotex {\n// Node of VXNotebookConfigMgr.\nclass VXNode : "
},
{
"path": "src/core/notebook/vxnodefile.cpp",
"chars": 2430,
"preview": "#include \"vxnodefile.h\"\n\n#include <QImage>\n\n#include \"notebook.h\"\n#include \"vxnode.h\"\n#include <notebookbackend/inoteboo"
},
{
"path": "src/core/notebook/vxnodefile.h",
"chars": 1257,
"preview": "#ifndef VXNODEFILE_H\n#define VXNODEFILE_H\n\n#include <QSharedPointer>\n\n#include <core/file.h>\n\nnamespace vnotex {\nclass V"
},
{
"path": "src/core/notebookbackend/inotebookbackend.cpp",
"chars": 715,
"preview": "#include \"inotebookbackend.h\"\n\n#include <QDir>\n\n#include <exception.h>\n#include <utils/pathutils.h>\n\nusing namespace vno"
},
{
"path": "src/core/notebookbackend/inotebookbackend.h",
"chars": 3399,
"preview": "#ifndef INOTEBOOKBACKEND_H\n#define INOTEBOOKBACKEND_H\n\n#include <QObject>\n\n#include <utils/pathutils.h>\n\nclass QByteArra"
},
{
"path": "src/core/notebookbackend/inotebookbackendfactory.h",
"chars": 546,
"preview": "#ifndef INOTEBOOKBACKENDFACTORY_H\n#define INOTEBOOKBACKENDFACTORY_H\n\n#include <QSharedPointer>\n\nnamespace vnotex {\nclass"
},
{
"path": "src/core/notebookbackend/localnotebookbackend.cpp",
"chars": 5915,
"preview": "#include \"localnotebookbackend.h\"\n\n#include <QDir>\n#include <QFile>\n#include <QJsonDocument>\n#include <QJsonObject>\n#inc"
},
{
"path": "src/core/notebookbackend/localnotebookbackend.h",
"chars": 2968,
"preview": "#ifndef LOCALNOTEBOOKBACKEND_H\n#define LOCALNOTEBOOKBACKEND_H\n\n#include \"inotebookbackend.h\"\n\n#include \"../global.h\"\n\nna"
},
{
"path": "src/core/notebookbackend/localnotebookbackendfactory.cpp",
"chars": 786,
"preview": "#include \"localnotebookbackendfactory.h\"\n\n#include <QObject>\n\n#include \"localnotebookbackend.h\"\n\nusing namespace vnotex;"
},
{
"path": "src/core/notebookbackend/localnotebookbackendfactory.h",
"chars": 558,
"preview": "#ifndef LOCALNOTEBOOKBACKENDFACTORY_H\n#define LOCALNOTEBOOKBACKENDFACTORY_H\n\n#include \"inotebookbackendfactory.h\"\n\nnames"
},
{
"path": "src/core/notebookconfigmgr/bundlenotebookconfigmgr.cpp",
"chars": 2974,
"preview": "#include \"bundlenotebookconfigmgr.h\"\n\n#include <QJsonDocument>\n\n#include \"notebookconfig.h\"\n#include <notebook/bundlenot"
},
{
"path": "src/core/notebookconfigmgr/bundlenotebookconfigmgr.h",
"chars": 1604,
"preview": "#ifndef BUNDLENOTEBOOKCONFIGMGR_H\n#define BUNDLENOTEBOOKCONFIGMGR_H\n\n#include \"inotebookconfigmgr.h\"\n\nnamespace vnotex {"
},
{
"path": "src/core/notebookconfigmgr/inotebookconfigmgr.cpp",
"chars": 613,
"preview": "#include \"inotebookconfigmgr.h\"\n\n#include <notebookbackend/inotebookbackend.h>\n\nusing namespace vnotex;\n\nINotebookConfig"
},
{
"path": "src/core/notebookconfigmgr/inotebookconfigmgr.h",
"chars": 3196,
"preview": "#ifndef INOTEBOOKCONFIGMGR_H\n#define INOTEBOOKCONFIGMGR_H\n\n#include <QObject>\n#include <QSharedPointer>\n\n#include \"noteb"
},
{
"path": "src/core/notebookconfigmgr/inotebookconfigmgrfactory.h",
"chars": 614,
"preview": "#ifndef INOTEBOOKCONFIGMGRFACTORY_H\n#define INOTEBOOKCONFIGMGRFACTORY_H\n\n#include <QSharedPointer>\n\nnamespace vnotex {\nc"
},
{
"path": "src/core/notebookconfigmgr/notebookconfig.cpp",
"chars": 4205,
"preview": "#include \"notebookconfig.h\"\n\n#include \"exception.h\"\n#include \"global.h\"\n#include <notebook/bundlenotebook.h>\n#include <n"
},
{
"path": "src/core/notebookconfigmgr/notebookconfig.h",
"chars": 1495,
"preview": "#ifndef NOTEBOOKCONFIG_H\n#define NOTEBOOKCONFIG_H\n\n#include <QDateTime>\n#include <QJsonArray>\n#include <QJsonObject>\n#in"
},
{
"path": "src/core/notebookconfigmgr/vxnodeconfig.cpp",
"chars": 8133,
"preview": "#include \"vxnodeconfig.h\"\r\n\r\n#include <QJsonArray>\r\n#include <utils/utils.h>\r\n\r\nusing namespace vnotex;\r\n\r\nusing namespa"
},
{
"path": "src/core/notebookconfigmgr/vxnodeconfig.h",
"chars": 2428,
"preview": "#ifndef VXNODECONFIG_H\r\n#define VXNODECONFIG_H\r\n\r\n#include <QDateTime>\r\n#include <QJsonObject>\r\n#include <QVector>\r\n\r\n#i"
},
{
"path": "src/core/notebookconfigmgr/vxnotebookconfigmgr.cpp",
"chars": 34455,
"preview": "#include \"vxnotebookconfigmgr.h\"\n\n#include <QDebug>\n#include <QJsonArray>\n#include <QJsonDocument>\n#include <QJsonObject"
},
{
"path": "src/core/notebookconfigmgr/vxnotebookconfigmgr.h",
"chars": 6267,
"preview": "#ifndef VXNOTEBOOKCONFIGMGR_H\n#define VXNOTEBOOKCONFIGMGR_H\n\n#include \"bundlenotebookconfigmgr.h\"\n\n#include <QDateTime>\n"
},
{
"path": "src/core/notebookconfigmgr/vxnotebookconfigmgrfactory.cpp",
"chars": 994,
"preview": "#include \"vxnotebookconfigmgrfactory.h\"\n\n#include <QObject>\n\n#include \"../notebookbackend/inotebookbackend.h\"\n#include \""
},
{
"path": "src/core/notebookconfigmgr/vxnotebookconfigmgrfactory.h",
"chars": 697,
"preview": "#ifndef VXNOTEBOOKCONFIGMGRFACTORY_H\n#define VXNOTEBOOKCONFIGMGRFACTORY_H\n\n#include \"inotebookconfigmgrfactory.h\"\n\nnames"
},
{
"path": "src/core/notebookmgr.cpp",
"chars": 11056,
"preview": "#include \"notebookmgr.h\"\n\n#include \"configmgr.h\"\n#include \"exception.h\"\n#include <notebook/bundlenotebookfactory.h>\n#inc"
},
{
"path": "src/core/notebookmgr.h",
"chars": 3695,
"preview": "#ifndef NOTEBOOKMGR_H\n#define NOTEBOOKMGR_H\n\n#include <QList>\n#include <QObject>\n#include <QScopedPointer>\n#include <QVe"
},
{
"path": "src/core/pdfviewerconfig.cpp",
"chars": 1612,
"preview": "#include \"pdfviewerconfig.h\"\n\n#include \"mainconfig.h\"\n\n#define READSTR(key) readString(appObj, userObj, (key))\n#define R"
},
{
"path": "src/core/pdfviewerconfig.h",
"chars": 654,
"preview": "#ifndef PDFVIEWERCONFIG_H\n#define PDFVIEWERCONFIG_H\n\n#include \"iconfig.h\"\n\n#include \"webresource.h\"\n\nnamespace vnotex {\n"
},
{
"path": "src/core/quickaccesshelper.cpp",
"chars": 493,
"preview": "#include \"quickaccesshelper.h\"\n\n#include \"configmgr.h\"\n#include \"sessionconfig.h\"\n\nusing namespace vnotex;\n\nvoid QuickAc"
},
{
"path": "src/core/quickaccesshelper.h",
"chars": 283,
"preview": "#ifndef QUICKACCESSHELPER_H\n#define QUICKACCESSHELPER_H\n\n#include <QStringList>\n\nnamespace vnotex {\nclass QuickAccessHel"
},
{
"path": "src/core/sessionconfig.cpp",
"chars": 19095,
"preview": "#include \"sessionconfig.h\"\n\n#include <QDebug>\n#include <QDir>\n#include <QJsonArray>\n#include <QJsonDocument>\n\n#include <"
},
{
"path": "src/core/sessionconfig.h",
"chars": 6323,
"preview": "#ifndef SESSIONCONFIG_H\n#define SESSIONCONFIG_H\n\n#include \"iconfig.h\"\n\n#include <QString>\n#include <QVector>\n\n#include \""
},
{
"path": "src/core/singleinstanceguard.cpp",
"chars": 5643,
"preview": "#include \"singleinstanceguard.h\"\n\n#include <QByteArray>\n#include <QDataStream>\n#include <QDebug>\n#include <QLocalServer>"
},
{
"path": "src/core/singleinstanceguard.h",
"chars": 1444,
"preview": "#ifndef SINGLEINSTANCEGUARD_H\n#define SINGLEINSTANCEGUARD_H\n\n#include <QObject>\n#include <QSharedPointer>\n#include <QStr"
},
{
"path": "src/core/templatemgr.cpp",
"chars": 792,
"preview": "#include \"templatemgr.h\"\n\n#include <QDir>\n\n#include <utils/fileutils.h>\n\n#include \"configmgr.h\"\n\nusing namespace vnotex;"
},
{
"path": "src/core/templatemgr.h",
"chars": 577,
"preview": "#ifndef TEMPLATEMGR_H\n#define TEMPLATEMGR_H\n\n#include <QObject>\n#include <QStringList>\n\n#include \"noncopyable.h\"\n\nnamesp"
},
{
"path": "src/core/texteditorconfig.cpp",
"chars": 7050,
"preview": "#include \"texteditorconfig.h\"\n\nusing namespace vnotex;\n\n#define READSTR(key) readString(appObj, userObj, (key))\n#define "
},
{
"path": "src/core/texteditorconfig.h",
"chars": 2592,
"preview": "#ifndef VNOTEX_TEXTEDITORCONFIG_H\n#define VNOTEX_TEXTEDITORCONFIG_H\n\n#include \"iconfig.h\"\n\nnamespace vnotex {\nclass Main"
},
{
"path": "src/core/theme.cpp",
"chars": 15072,
"preview": "#include \"theme.h\"\n\n#include <QApplication>\n#include <QDir>\n#include <QFileInfo>\n#include <QJsonDocument>\n#include <QReg"
},
{
"path": "src/core/theme.h",
"chars": 3475,
"preview": "#ifndef THEME_H\n#define THEME_H\n\n#include <QHash>\n#include <QJsonObject>\n#include <QPair>\n#include <QPixmap>\n#include <Q"
},
{
"path": "src/core/thememgr.cpp",
"chars": 6358,
"preview": "#include \"thememgr.h\"\n\n#include <QDebug>\n#include <QDir>\n#include <QRegularExpression>\n\n#include \"configmgr.h\"\n#include "
},
{
"path": "src/core/thememgr.h",
"chars": 2636,
"preview": "#ifndef THEMEMGR_H\n#define THEMEMGR_H\n\n#include <QObject>\n\n#include <QColor>\n#include <QPixmap>\n#include <QScopedPointer"
},
{
"path": "src/core/versioncontroller/dummyversioncontroller.cpp",
"chars": 595,
"preview": "#include \"dummyversioncontroller.h\"\n\nusing namespace vnotex;\n\nDummyVersionController::DummyVersionController(const QStri"
},
{
"path": "src/core/versioncontroller/dummyversioncontroller.h",
"chars": 631,
"preview": "#ifndef DUMMYVERSIONCONTROLLER_H\n#define DUMMYVERSIONCONTROLLER_H\n\n#include \"iversioncontroller.h\"\n\n#include <global.h>\n"
},
{
"path": "src/core/versioncontroller/dummyversioncontrollerfactory.cpp",
"chars": 775,
"preview": "#include \"dummyversioncontrollerfactory.h\"\n\nusing namespace vnotex;\n\n#include <QObject>\n\n#include \"dummyversioncontrolle"
},
{
"path": "src/core/versioncontroller/dummyversioncontrollerfactory.h",
"chars": 551,
"preview": "#ifndef DUMMYVERSIONCONTROLLERFACTORY_H\n#define DUMMYVERSIONCONTROLLERFACTORY_H\n\n#include \"iversioncontrollerfactory.h\"\n"
},
{
"path": "src/core/versioncontroller/iversioncontroller.h",
"chars": 509,
"preview": "#ifndef IVERSIONCONTROLLER_H\n#define IVERSIONCONTROLLER_H\n\n#include <QObject>\n\nnamespace vnotex {\n// Abstract class for "
},
{
"path": "src/core/versioncontroller/iversioncontrollerfactory.h",
"chars": 539,
"preview": "#ifndef IVERSIONCONTROLLERFACTORY_H\n#define IVERSIONCONTROLLERFACTORY_H\n\n#include <QSharedPointer>\n\nnamespace vnotex {\nc"
},
{
"path": "src/core/versioncontroller/versioncontrollerserver.cpp",
"chars": 1002,
"preview": "#include \"versioncontrollerserver.h\"\n\n#include <QDebug>\n\n#include \"iversioncontroller.h\"\n#include \"iversioncontrollerfac"
},
{
"path": "src/core/versioncontroller/versioncontrollerserver.h",
"chars": 688,
"preview": "#ifndef VERSIONCONTROLLERSERVER_H\n#define VERSIONCONTROLLERSERVER_H\n\n#include <QHash>\n#include <QSharedPointer>\n\nnamespa"
},
{
"path": "src/core/vnotex.cpp",
"chars": 3640,
"preview": "#include \"vnotex.h\"\n\n#include <QDateTime>\n#include <QRandomGenerator>\n\n#include \"buffermgr.h\"\n#include \"configmgr.h\"\n#in"
},
{
"path": "src/core/vnotex.h",
"chars": 3921,
"preview": "#ifndef VNOTEX_H\n#define VNOTEX_H\n\n#include <QObject>\n#include <QScopedPointer>\n\n#include \"global.h\"\n#include \"noncopyab"
},
{
"path": "src/core/webresource.h",
"chars": 2251,
"preview": "#ifndef WEBRESOURCE_H\n#define WEBRESOURCE_H\n\n#include <QJsonArray>\n#include <QJsonObject>\n#include <QStringList>\n#includ"
},
{
"path": "src/core/widgetconfig.cpp",
"chars": 7553,
"preview": "#include \"widgetconfig.h\"\n\nusing namespace vnotex;\n\n#define READINT(key) readInt(appObj, userObj, (key))\n#define READBOO"
},
{
"path": "src/core/widgetconfig.h",
"chars": 2912,
"preview": "#ifndef WIDGETCONFIG_H\n#define WIDGETCONFIG_H\n\n#include \"iconfig.h\"\n\n#include \"global.h\"\n\n#include <QString>\n\nnamespace "
},
{
"path": "src/data/core/Info.plist",
"chars": 1783,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "src/data/core/core.qrc",
"chars": 4401,
"preview": "<RCC>\n <qresource prefix=\"/vnotex/data/core\">\n <file>vnotex.json</file>\n <file>icons/vnote.icns</file>\n"
},
{
"path": "src/data/core/fun.vnote.app.VNote.metainfo.xml",
"chars": 2957,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component type=\"desktop-application\">\n <id>fun.vnote.app.VNote</id>\n <name>V"
},
{
"path": "src/data/core/icons/vnote.rc",
"chars": 60,
"preview": "IDI_ICON1 ICON DISCARDABLE \"vnote.ico\"\n"
},
{
"path": "src/data/core/translations/vnote_ja.ts",
"chars": 254995,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ja_JP\">\n<context>\n <name>QMessageBox"
},
{
"path": "src/data/core/translations/vnote_zh_CN.ts",
"chars": 251110,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\">\n<context>\n <name>QMessageBox"
},
{
"path": "src/data/core/vnote.desktop",
"chars": 263,
"preview": "[Desktop Entry]\nType=Application\nName=VNote\nName[zh]=VNote笔记\nGenericName=Note-taking Application\nGenericName[zh]=笔记软件\nCo"
},
{
"path": "src/data/core/vnotex.json",
"chars": 25820,
"preview": "{\n \"//comment\" : \"This is the default configuration file of VNoteX. User should modify the one in user configuration "
},
{
"path": "src/data/extra/dicts/en_US.aff",
"chars": 3088,
"preview": "SET UTF-8\nTRY esianrtolcdugmphbyfvkwzESIANRTOLCDUGMPHBYFVKWZ'\nICONV 1\nICONV ’ '\nNOSUGGEST !\n\n# ordinal numbers\nCOMPOUNDM"
},
{
"path": "src/data/extra/dicts/en_US.dic",
"chars": 551260,
"preview": "49524\n0/nm\n0th/pt\n1/n1\n1st/p\n1th/tc\n2/nm\n2nd/p\n2th/tc\n3/nm\n3rd/p\n3th/tc\n4/nm\n4th/pt\n5/nm\n5th/pt\n6/nm\n6th/pt\n7/nm\n7th/pt\n"
},
{
"path": "src/data/extra/docs/en/about_vnotex.txt",
"chars": 463,
"preview": "<p>\nVNoteX is designed to be a pleasant note-taking platform, refactored from VNote, which is an open source note-taking"
},
{
"path": "src/data/extra/docs/en/external_programs.md",
"chars": 1053,
"preview": "# External Programs\nVNote allows user to open notes with **external programs** via the `Open With` in the context menu o"
},
{
"path": "src/data/extra/docs/en/features_tips.txt",
"chars": 432,
"preview": "<p>Some features not to be missed in VNote:</p>\n<h3>Markdown Editor</h3>\n<ul>\n<li><strong>Parse to Markdown and Paste</s"
},
{
"path": "src/data/extra/docs/en/get_started.txt",
"chars": 187,
"preview": "<div style=\"color: grey; margin-left: 30px;\">\n<h1>Get Started</h1>\n<ul>\n <li>Create a notebook and create notes withi"
},
{
"path": "src/data/extra/docs/en/markdown_guide.md",
"chars": 6634,
"preview": "# Markdown Guide\nThis is a quick guide [^1] for Markdown, a lightweight and easy-to-use syntax for writing.\n\n## What is "
},
{
"path": "src/data/extra/docs/en/shortcuts.md",
"chars": 4581,
"preview": "# Shortcuts\n1. All the keys without special notice are **case insensitive**\n2. On macOS, `Ctrl` corresponds to `Command`"
},
{
"path": "src/data/extra/docs/en/welcome.md",
"chars": 922,
"preview": "# Welcome to VNote\nA pleasant note-taking platform.\n\nFor more information, please visit [**VNote's Home Page**](https://"
},
{
"path": "src/data/extra/docs/zh_CN/about_vnotex.txt",
"chars": 255,
"preview": "<p>\nVNoteX致力于成为一个舒适的笔记平台。VNoteX重构自VNote,后者是一个始于2016年的专注于Markdown的开源笔记软件。VNote在版本3之后会和VNoteX共享大部分源代码,并继续开源。\n<br/><br/>\nVN"
},
{
"path": "src/data/extra/docs/zh_CN/external_programs.md",
"chars": 603,
"preview": "# 外部程序\nVNote支持通过在节点浏览器上下文菜单中的`打开方式`来调用**外部程序**打开笔记。\n\n用户需要编辑会话配置(用户配置文件夹下的`session.json`文件)来添加自定义外部程序。一个例子如下:\n\n```json\n{\n"
},
{
"path": "src/data/extra/docs/zh_CN/features_tips.txt",
"chars": 252,
"preview": "<p>VNote中一些不容错过的特性:</p>\n<h3 id=\"markdown-\">Markdown编辑器</h3>\n<ul>\n<li>上下文菜单中的<strong>解析为Markdown并粘贴</strong>:解析富文本为Markdo"
}
]
// ... and 1039 more files (download for full content)
About this extraction
This page contains the full source code of the vnotex/vnote GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1239 files (13.0 MB), approximately 3.5M tokens, and a symbol index with 4877 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.