pax_global_header00006660000000000000000000000064147334633700014524gustar00rootroot0000000000000052 comment=5ea0a6cb2dfa128549863cc43ba4f408b5ce8be3 dde-calendar-5.14.13/000077500000000000000000000000001473346337000142025ustar00rootroot00000000000000dde-calendar-5.14.13/.clang-format000066400000000000000000000136611473346337000165640ustar00rootroot00000000000000# This is the clang-format style used by qt releated deepin projects. # # This file is modified from https://github.com/qt/qt5/blob/5b22f8ec2e4fbb58e362b709ee82f2dbd8afdfd3/_clang-format # based on the rules from https://github.com/linuxdeepin/deepin-styleguide, # https://wiki.qt.io/Qt_Coding_Style and https://wiki.qt.io/Coding_Conventions # # This is for clang-format >= 14.0.0 --- # Webkit style was loosely based on the Qt style BasedOnStyle: WebKit # deepin project might not use same standard. Standard: Auto # Column width is limited to 100 in accordance with Qt Coding Style. # https://wiki.qt.io/Qt_Coding_Style # Note that this may be changed at some point in the future. ColumnLimit: 100 # How much weight do extra characters after the line length limit have. # PenaltyExcessCharacter: 4 # Disable reflow of some specific comments # qdoc comments: indentation rules are different. # Translation comments and SPDX license identifiers are also excluded. CommentPragmas: "^!|^:|^ SPDX-License-Identifier:" PointerAlignment: Right # We use template< without space. SpaceAfterTemplateKeyword: false # We want to break before the operators, but not before a '='. BreakBeforeBinaryOperators: NonAssignment # Braces are usually attached, but not after functions or class declarations. BreakBeforeBraces: Custom BraceWrapping: AfterClass: true AfterControlStatement: false AfterEnum: false AfterFunction: true AfterNamespace: false AfterObjCDeclaration: false AfterStruct: true AfterUnion: false BeforeCatch: false BeforeElse: false IndentBraces: false # Indent initializers by 4 spaces ConstructorInitializerIndentWidth: 4 # Indent width for line continuations. ContinuationIndentWidth: 4 # No indentation for namespaces. NamespaceIndentation: None # Allow indentation for preprocessing directives (if/ifdef/endif). https://reviews.llvm.org/rL312125 IndentPPDirectives: AfterHash # We only indent with 2 spaces for preprocessor directives PPIndentWidth: 2 # Horizontally align arguments after an open bracket. # The coding style does not specify the following, but this is what gives # results closest to the existing code. AlignAfterOpenBracket: true AlwaysBreakTemplateDeclarations: true # Ideally we should also allow less short function in a single line, but # clang-format does not handle that. AllowShortFunctionsOnASingleLine: Inline # As clang-format 13 can regroup includes we enable this feature. # basically according to https://wiki.qt.io/Coding_Conventions#Including_headers # and https://github.com/linuxdeepin/deepin-styleguide IncludeBlocks: Regroup IncludeCategories: # gtest/gmock's h files - Regex: '^$' Priority: 6 CaseSensitive: true # C system headers. - Regex: '^<(aio|arpa/inet|assert|complex|cpio|ctype|curses|dirent|dlfcn|errno|fcntl|fenv|float|fmtmsg|fnmatch|ftw|glob|grp|iconv|inttypes|iso646|langinfo|libgen|limits|locale|math|monetary|mqueue|ndbm|netdb|net/if|netinet/in|netinet/tcp|nl_types|poll|pthread|pwd|regex|sched|search|semaphore|setjmp|signal|spawn|stdalign|stdarg|stdatomic|stdbool|stddef|stdint|stdio|stdlib|stdnoreturn|string|strings|stropts|sys/ipc|syslog|sys/mman|sys/msg|sys/resource|sys/select|sys/sem|sys/shm|sys/socket|sys/stat|sys/statvfs|sys/time|sys/times|sys/types|sys/uio|sys/un|sys/utsname|sys/wait|tar|term|termios|tgmath|threads|time|trace|uchar|ulimit|uncntrl|unistd|utime|utmpx|wchar|wctype|wordexp)\.h>$' Priority: 7 CaseSensitive: true # other libraries' h files. - Regex: '^<' Priority: 3 IncludeIsMainRegex: '((T|t)est)?$' SortIncludes: true # macros for which the opening brace stays attached. ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH, forever, Q_FOREVER, QBENCHMARK, QBENCHMARK_ONCE ] # Break constructor initializers before the colon and after the commas. BreakConstructorInitializers: BeforeComma # Add "// namespace " comments on closing brace for a namespace # Ignored for namespaces that qualify as a short namespace, # see 'ShortNamespaceLines' FixNamespaceComments: true # Definition of how short a short namespace is, default 1 ShortNamespaceLines: 1 # When escaping newlines in a macro attach the '\' as far left as possible, e.g. ##define a \ # something; \ # other; \ # thelastlineislong; AlignEscapedNewlines: Left # Avoids the addition of a space between an identifier and the # initializer list in list-initialization. SpaceBeforeCpp11BracedList: false AllowAllArgumentsOnNextLine: false AllowShortLambdasOnASingleLine: Empty AlignTrailingComments: true BinPackArguments: false BinPackParameters: false PackConstructorInitializers: Never PenaltyReturnTypeOnItsOwnLine: 100 SeparateDefinitionBlocks: Always WhitespaceSensitiveMacros: - Q_PROPERTY - Q_INTERFACESdde-calendar-5.14.13/.github/000077500000000000000000000000001473346337000155425ustar00rootroot00000000000000dde-calendar-5.14.13/.github/workflows/000077500000000000000000000000001473346337000175775ustar00rootroot00000000000000dde-calendar-5.14.13/.github/workflows/backup-to-gitlab.yml000066400000000000000000000005371473346337000234540ustar00rootroot00000000000000name: backup to gitlab on: [push] concurrency: group: ${{ github.workflow }} cancel-in-progress: true jobs: backup-to-gitlabwh: uses: linuxdeepin/.github/.github/workflows/backup-to-gitlabwh.yml@master secrets: inherit backup-to-gitee: uses: linuxdeepin/.github/.github/workflows/backup-to-gitee.yml@master secrets: inherit dde-calendar-5.14.13/.github/workflows/call-api-check.yml000066400000000000000000000004351473346337000230610ustar00rootroot00000000000000name: apiCheck on: pull_request_target: types: [opened, synchronize, reopened] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: api-check: uses: linuxdeepin/.github/.github/workflows/api-check.yml@master secrets: inheritdde-calendar-5.14.13/.github/workflows/call-auto-tag.yml000066400000000000000000000005171473346337000227570ustar00rootroot00000000000000name: auto tag on: pull_request_target: types: [opened, synchronize, closed] paths: - "debian/changelog" concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: auto_tag: uses: linuxdeepin/.github/.github/workflows/auto-tag.yml@master secrets: inherit dde-calendar-5.14.13/.github/workflows/call-build-distribution.yml000066400000000000000000000004321473346337000250460ustar00rootroot00000000000000name: Call build-distribution on: push: paths-ignore: - ".github/workflows/**" pull_request_target: paths-ignore: - ".github/workflows/**" jobs: check_job: uses: linuxdeepin/.github/.github/workflows/build-distribution.yml@master secrets: inherit dde-calendar-5.14.13/.github/workflows/call-chatOps.yml000066400000000000000000000002421473346337000226320ustar00rootroot00000000000000name: chatOps on: issue_comment: types: [created] jobs: chatopt: uses: linuxdeepin/.github/.github/workflows/chatOps.yml@master secrets: inherit dde-calendar-5.14.13/.github/workflows/call-clacheck.yml000066400000000000000000000005251473346337000227720ustar00rootroot00000000000000name: Call CLA check on: issue_comment: types: [created] pull_request_target: types: [opened, closed, synchronize] concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: clacheck: uses: linuxdeepin/.github/.github/workflows/cla-check.yml@master secrets: inherit dde-calendar-5.14.13/.github/workflows/call-commitlint.yml000066400000000000000000000003641473346337000234150ustar00rootroot00000000000000name: Call commitlint on: pull_request_target: concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: check_job: uses: linuxdeepin/.github/.github/workflows/commitlint.yml@master dde-calendar-5.14.13/.github/workflows/call-debian-check.yml000066400000000000000000000004461473346337000235340ustar00rootroot00000000000000name: debianCheck on: pull_request_target: types: [opened, synchronize, reopened] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: debian-check: uses: linuxdeepin/.github/.github/workflows/debian-check.yml@master secrets: inheritdde-calendar-5.14.13/.github/workflows/call-license-check.yml000066400000000000000000000005521473346337000237320ustar00rootroot00000000000000name: Call License and README Check on: pull_request_target: types: [opened, synchronize, reopened] permissions: pull-requests: write contents: read concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: license-check: uses: linuxdeepin/.github/.github/workflows/license-check.yml@master dde-calendar-5.14.13/.github/workflows/call-static-check.yml000066400000000000000000000004461473346337000236010ustar00rootroot00000000000000name: staticCheck on: pull_request_target: types: [opened, synchronize, reopened] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: static-check: uses: linuxdeepin/.github/.github/workflows/static-check.yml@master secrets: inheritdde-calendar-5.14.13/.github/workflows/cppcheck.yml000066400000000000000000000012651473346337000221060ustar00rootroot00000000000000name: cppcheck on: pull_request_target: paths-ignore: - ".github/workflows/**" concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: cppchceck: name: cppcheck runs-on: ubuntu-latest steps: - run: export - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha }} persist-credentials: false - uses: linuxdeepin/action-cppcheck@main with: github_token: ${{ secrets.GITHUB_TOKEN }} repository: ${{ github.repository }} pull_request_id: ${{ github.event.pull_request.number }} allow_approve: false dde-calendar-5.14.13/.gitignore000066400000000000000000000006731473346337000162000ustar00rootroot00000000000000# Compiled Object files *.slo *.lo *.o # Compiled Dynamic libraries *.so *.dylib # Compiled Static libraries *.lai *.la *.a build*/ .linglong-target *.pro.user* *.DS_Store *.core *.autosave # qm file is auto generate from .ts file *.qm # vim tmp file *.swp .vscode/ build/ .cache/ .qmake.stash Makefile !debian/[source,changelog,compat,control,copyright,rules] CMakeLists.txt.user *.user.* binaries #linglong building dir linglong build dde-calendar-5.14.13/.obs/000077500000000000000000000000001473346337000150435ustar00rootroot00000000000000dde-calendar-5.14.13/.obs/workflows.yml000066400000000000000000000017321473346337000176260ustar00rootroot00000000000000test_build: steps: - link_package: source_project: deepin:Develop:dde source_package: %{SCM_REPOSITORY_NAME} target_project: deepin:CI - configure_repositories: project: deepin:CI repositories: - name: deepin_develop paths: - target_project: deepin:CI target_repository: deepin_develop architectures: - x86_64 - aarch64 - name: debian paths: - target_project: deepin:CI target_repository: debian_sid architectures: - x86_64 filters: event: pull_request tag_build: steps: - trigger_services: project: deepin:Unstable:dde package: %{SCM_REPOSITORY_NAME} filters: event: tag_push commit_build: steps: - trigger_services: project: deepin:Develop:dde package: %{SCM_REPOSITORY_NAME} filters: event: push dde-calendar-5.14.13/.project.json000066400000000000000000000004221473346337000166170ustar00rootroot00000000000000{ "type": "homebrew", "3rdparty": [], "ignore": ["debian", ".tx", "assets", "translations", ".git", "README.md", "*.conf", "CMakeLists.txt", "*.user", "*.o", "*.desktop", "*.qrc", "*.svg", "*.png", "*.qm", "*.ts", "LICENSE", "*.pro"], "license": ["GPLv3"] }dde-calendar-5.14.13/.reuse/000077500000000000000000000000001473346337000154035ustar00rootroot00000000000000dde-calendar-5.14.13/.reuse/dep5000066400000000000000000000035141473346337000161660ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: dde-calendar Upstream-Contact: haifeng.chen Source: # README Files: README.md CHANGELOG.md README.zh_CN.md calendar-client/README.md docs/* Copyright: None License: CC-BY-4.0 # assets Files: calendar-client/assets/* schedule-plugin/assets/* calendar-service/assets/* # 匹配这个文件夹下所有文件 Copyright: UnionTech Software Technology Co., Ltd. License: GPL-3.0-or-later # Project file Files: *.pro *.prf *.pri *.txt *.cmake Copyright: None License: CC0-1.0 # format Files: .clang-format Copyright: None License: CC0-1.0 # css Files: *.css Copyright: None License: CC0-1.0 # ts Files: *.ts Copyright: None License: CC0-1.0 # qrc Files: *.qrc Copyright: None License: CC0-1.0 # png svg Files: calendar-client/assets/dde-calendar/calendar/common/*.svg calendar-client/assets/dde-calendar/calendar/en_US/fig/*.png calendar-client/assets/resources/DynamicIcon/*.svg calendar-client/assets/resources/icon/*.svg schedule-plugin/assets/resources/DynamicIcon/*.svg Copyright: None License: CC0-1.0 # sh Files: *.sh Copyright: None License: CC0-1.0 # ci Files: .github/* .gitlab-ci.yml .obs/workflows.yml Copyright: None License: CC0-1.0 # gitignore Files: .gitignore Copyright: None License: CC0-1.0 # xml toml json conf yaml Files: *.xml *.toml *.json *conf *.yaml Copyright: None License: CC0-1.0 # rpm Files: rpm/* Copyright: None License: CC0-1.0 # debian Files: debian/* Copyright: None License: CC0-1.0 # Arch Files: archlinux/* Copyright: None License: CC0-1.0 # other files Files: *.db Copyright: None License: CC0-1.0 # linglong Files: install_dep arm64/org.dde.calendar.install org.dde.calendar.install loong64/org.dde.calendar.install Copyright: UnionTech Software Technology Co., Ltd. License: GPL-3.0-or-later dde-calendar-5.14.13/.tx/000077500000000000000000000000001473346337000147135ustar00rootroot00000000000000dde-calendar-5.14.13/.tx/transifex.yaml000066400000000000000000000013751473346337000176100ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. # # SPDX-License-Identifier: CC0-1.0 filters: - filter_type: file source_file: translations/dde-calendar_en_US.ts file_format: QT source_language: en_US translation_files_expression: translations/dde-calendar_.ts - filter_type: file source_file: translations/desktop/desktop.ts file_format: QT source_language: en_US translation_files_expression: translations/desktop/desktop_.ts - filter_type: file source_file: translations/dde-calendar-service_en_US.ts file_format: QT source_language: en_US translation_files_expression: translations/dde-calendar-service_.ts settings: pr_branch_name: transifex_update_dde-calendar-5.14.13/3rdparty/000077500000000000000000000000001473346337000157525ustar00rootroot00000000000000dde-calendar-5.14.13/3rdparty/kcalendarcore/000077500000000000000000000000001473346337000205475ustar00rootroot00000000000000dde-calendar-5.14.13/3rdparty/kcalendarcore/CMakeLists.txt000066400000000000000000000015541473346337000233140ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) project(kcalendarcore) # Find the library find_package(PkgConfig REQUIRED) find_package(Qt5Gui REQUIRED) find_package(Qt5 COMPONENTS Core DBus REQUIRED) #set(LibIcal_MIN_VERSION "3.0") #find_package(ical ${LibIcal_MIN_VERSION}) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) pkg_check_modules(3rd_lib REQUIRED libical ) #安全编译参数 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong -z noexecstack -pie -fPIC -z lazy") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src ${3rd_lib_INCLUDE_DIRS}) aux_source_directory(src CALENDARCORE_SRCS) add_library(${PROJECT_NAME} STATIC ${CALENDARCORE_SRCS}) target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::DBus Qt5::Gui ${3rd_lib_LIBRARIES} ${Libical_LIBRARIES} icalvcal icalss) dde-calendar-5.14.13/3rdparty/kcalendarcore/src/000077500000000000000000000000001473346337000213365ustar00rootroot00000000000000dde-calendar-5.14.13/3rdparty/kcalendarcore/src/alarm.cpp000066400000000000000000000515371473346337000231510ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2003 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Alarm class. @brief Represents an alarm notification. @author Cornelius Schumacher \ */ #include "alarm.h" #include "incidence.h" #include "utils_p.h" #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Alarm::Private { public: Private() : mParent(nullptr) , mType(Alarm::Invalid) , mAlarmSnoozeTime(5) , mAlarmRepeatCount(0) , mEndOffset(false) , mHasTime(false) , mAlarmEnabled(false) , mHasLocationRadius(false) , mLocationRadius(0) { } Incidence *mParent = nullptr; // the incidence which this alarm belongs to Type mType; // type of alarm QString mDescription; // text to display/email body/procedure arguments QString mFile; // program to run/optional audio file to play QString mMailSubject; // subject of email QStringList mMailAttachFiles; // filenames to attach to email Person::List mMailAddresses; // who to mail for reminder QDateTime mAlarmTime; // time at which to trigger the alarm Duration mAlarmSnoozeTime; // how long after alarm to snooze before // triggering again int mAlarmRepeatCount; // number of times for alarm to repeat // after the initial time Duration mOffset; // time relative to incidence DTSTART // to trigger the alarm bool mEndOffset; // if true, mOffset relates to DTEND, not DTSTART bool mHasTime; // use mAlarmTime, not mOffset bool mAlarmEnabled; bool mHasLocationRadius; int mLocationRadius; // location radius for the alarm }; //@endcond Alarm::Alarm(Incidence *parent) : d(new KCalendarCore::Alarm::Private) { d->mParent = parent; } Alarm::Alarm(const Alarm &other) : CustomProperties(other) , d(new KCalendarCore::Alarm::Private(*other.d)) { } Alarm::~Alarm() { delete d; } Alarm &Alarm::operator=(const Alarm &a) { if (&a != this) { d->mParent = a.d->mParent; d->mType = a.d->mType; d->mDescription = a.d->mDescription; d->mFile = a.d->mFile; d->mMailAttachFiles = a.d->mMailAttachFiles; d->mMailAddresses = a.d->mMailAddresses; d->mMailSubject = a.d->mMailSubject; d->mAlarmSnoozeTime = a.d->mAlarmSnoozeTime; d->mAlarmRepeatCount = a.d->mAlarmRepeatCount; d->mAlarmTime = a.d->mAlarmTime; d->mOffset = a.d->mOffset; d->mEndOffset = a.d->mEndOffset; d->mHasTime = a.d->mHasTime; d->mAlarmEnabled = a.d->mAlarmEnabled; } return *this; } static bool compareMailAddresses(const Person::List &list1, const Person::List &list2) { if (list1.count() == list2.count()) { for (int i = 0; i < list1.count(); ++i) { if (list1.at(i) != list2.at(i)) { return false; } } return true; } return false; } bool Alarm::operator==(const Alarm &rhs) const { if (d->mType != rhs.d->mType // || d->mAlarmSnoozeTime != rhs.d->mAlarmSnoozeTime // || d->mAlarmRepeatCount != rhs.d->mAlarmRepeatCount // || d->mAlarmEnabled != rhs.d->mAlarmEnabled // || d->mHasTime != rhs.d->mHasTime // || d->mHasLocationRadius != rhs.d->mHasLocationRadius // || d->mLocationRadius != rhs.d->mLocationRadius) { return false; } if (d->mHasTime) { if (d->mAlarmTime != rhs.d->mAlarmTime) { return false; } } else { if (d->mOffset != rhs.d->mOffset || d->mEndOffset != rhs.d->mEndOffset) { return false; } } switch (d->mType) { case Display: return d->mDescription == rhs.d->mDescription; case Email: return d->mDescription == rhs.d->mDescription // && d->mMailAttachFiles == rhs.d->mMailAttachFiles // && compareMailAddresses(d->mMailAddresses, rhs.d->mMailAddresses) // && d->mMailSubject == rhs.d->mMailSubject; case Procedure: return d->mFile == rhs.d->mFile && d->mDescription == rhs.d->mDescription; case Audio: return d->mFile == rhs.d->mFile; case Invalid: break; } return false; } bool Alarm::operator!=(const Alarm &a) const { return !operator==(a); } void Alarm::setType(Alarm::Type type) { if (type == d->mType) { return; } if (d->mParent) { d->mParent->update(); } switch (type) { case Display: d->mDescription.clear(); break; case Procedure: d->mFile.clear(); d->mDescription.clear(); break; case Audio: d->mFile.clear(); break; case Email: d->mMailSubject.clear(); d->mDescription.clear(); d->mMailAddresses.clear(); d->mMailAttachFiles.clear(); break; case Invalid: break; default: if (d->mParent) { d->mParent->updated(); // not really } return; } d->mType = type; if (d->mParent) { d->mParent->updated(); } } Alarm::Type Alarm::type() const { return d->mType; } void Alarm::setAudioAlarm(const QString &audioFile) { if (d->mParent) { d->mParent->update(); } d->mType = Audio; d->mFile = audioFile; if (d->mParent) { d->mParent->updated(); } } void Alarm::setAudioFile(const QString &audioFile) { if (d->mType == Audio) { if (d->mParent) { d->mParent->update(); } d->mFile = audioFile; if (d->mParent) { d->mParent->updated(); } } } QString Alarm::audioFile() const { return (d->mType == Audio) ? d->mFile : QString(); } void Alarm::setProcedureAlarm(const QString &programFile, const QString &arguments) { if (d->mParent) { d->mParent->update(); } d->mType = Procedure; d->mFile = programFile; d->mDescription = arguments; if (d->mParent) { d->mParent->updated(); } } void Alarm::setProgramFile(const QString &programFile) { if (d->mType == Procedure) { if (d->mParent) { d->mParent->update(); } d->mFile = programFile; if (d->mParent) { d->mParent->updated(); } } } QString Alarm::programFile() const { return (d->mType == Procedure) ? d->mFile : QString(); } void Alarm::setProgramArguments(const QString &arguments) { if (d->mType == Procedure) { if (d->mParent) { d->mParent->update(); } d->mDescription = arguments; if (d->mParent) { d->mParent->updated(); } } } QString Alarm::programArguments() const { return (d->mType == Procedure) ? d->mDescription : QString(); } void Alarm::setEmailAlarm(const QString &subject, const QString &text, const Person::List &addressees, const QStringList &attachments) { if (d->mParent) { d->mParent->update(); } d->mType = Email; d->mMailSubject = subject; d->mDescription = text; d->mMailAddresses = addressees; d->mMailAttachFiles = attachments; if (d->mParent) { d->mParent->updated(); } } void Alarm::setMailAddress(const Person &mailAddress) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mMailAddresses.clear(); d->mMailAddresses.append(mailAddress); if (d->mParent) { d->mParent->updated(); } } } void Alarm::setMailAddresses(const Person::List &mailAddresses) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mMailAddresses += mailAddresses; if (d->mParent) { d->mParent->updated(); } } } void Alarm::addMailAddress(const Person &mailAddress) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mMailAddresses.append(mailAddress); if (d->mParent) { d->mParent->updated(); } } } Person::List Alarm::mailAddresses() const { return (d->mType == Email) ? d->mMailAddresses : Person::List(); } void Alarm::setMailSubject(const QString &mailAlarmSubject) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mMailSubject = mailAlarmSubject; if (d->mParent) { d->mParent->updated(); } } } QString Alarm::mailSubject() const { return (d->mType == Email) ? d->mMailSubject : QString(); } void Alarm::setMailAttachment(const QString &mailAttachFile) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mMailAttachFiles.clear(); d->mMailAttachFiles += mailAttachFile; if (d->mParent) { d->mParent->updated(); } } } void Alarm::setMailAttachments(const QStringList &mailAttachFiles) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mMailAttachFiles = mailAttachFiles; if (d->mParent) { d->mParent->updated(); } } } void Alarm::addMailAttachment(const QString &mailAttachFile) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mMailAttachFiles += mailAttachFile; if (d->mParent) { d->mParent->updated(); } } } QStringList Alarm::mailAttachments() const { return (d->mType == Email) ? d->mMailAttachFiles : QStringList(); } void Alarm::setMailText(const QString &text) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mDescription = text; if (d->mParent) { d->mParent->updated(); } } } QString Alarm::mailText() const { return (d->mType == Email) ? d->mDescription : QString(); } void Alarm::setDisplayAlarm(const QString &text) { if (d->mParent) { d->mParent->update(); } d->mType = Display; if (!text.isNull()) { d->mDescription = text; } if (d->mParent) { d->mParent->updated(); } } void Alarm::setText(const QString &text) { if (d->mType == Display) { if (d->mParent) { d->mParent->update(); } d->mDescription = text; if (d->mParent) { d->mParent->updated(); } } } QString Alarm::text() const { return (d->mType == Display) ? d->mDescription : QString(); } void Alarm::setTime(const QDateTime &alarmTime) { if (d->mParent) { d->mParent->update(); } d->mAlarmTime = alarmTime; d->mHasTime = true; if (d->mParent) { d->mParent->updated(); } } QDateTime Alarm::time() const { if (hasTime()) { return d->mAlarmTime; } else if (d->mParent) { if (d->mEndOffset) { QDateTime dt = d->mParent->dateTime(Incidence::RoleAlarmEndOffset); return d->mOffset.end(dt); } else { QDateTime dt = d->mParent->dateTime(Incidence::RoleAlarmStartOffset); return d->mOffset.end(dt); } } else { return QDateTime(); } } QDateTime Alarm::nextTime(const QDateTime &preTime, bool ignoreRepetitions) const { if (d->mParent && d->mParent->recurs()) { QDateTime dtEnd = d->mParent->dateTime(Incidence::RoleAlarmEndOffset); QDateTime dtStart = d->mParent->dtStart(); // Find the incidence's earliest alarm // Alarm time is defined by an offset from the event start or end time. QDateTime alarmStart = d->mOffset.end(d->mEndOffset ? dtEnd : dtStart); // Find the offset from the event start time, which is also used as the // offset from the recurrence time. Duration alarmOffset(dtStart, alarmStart); /* qDebug() << "dtStart " << dtStart; qDebug() << "dtEnd " << dtEnd; qDebug() << "alarmStart " << alarmStart; qDebug() << "alarmOffset " << alarmOffset.value(); qDebug() << "preTime " << preTime; */ if (alarmStart > preTime) { // No need to go further. return alarmStart; } if (d->mAlarmRepeatCount && !ignoreRepetitions) { // The alarm has repetitions, so check whether repetitions of previous // recurrences happen after given time. QDateTime prevRecurrence = d->mParent->recurrence()->getPreviousDateTime(preTime); if (prevRecurrence.isValid()) { QDateTime prevLastRepeat = alarmOffset.end(duration().end(prevRecurrence)); // qDebug() << "prevRecurrence" << prevRecurrence; // qDebug() << "prevLastRepeat" << prevLastRepeat; if (prevLastRepeat > preTime) { // Yes they did, return alarm offset to previous recurrence. QDateTime prevAlarm = alarmOffset.end(prevRecurrence); // qDebug() << "prevAlarm " << prevAlarm; return prevAlarm; } } } // Check the next recurrence now. QDateTime nextRecurrence = d->mParent->recurrence()->getNextDateTime(preTime); if (nextRecurrence.isValid()) { QDateTime nextAlarm = alarmOffset.end(nextRecurrence); /* qDebug() << "nextRecurrence" << nextRecurrence; qDebug() << "nextAlarm " << nextAlarm; */ if (nextAlarm > preTime) { // It's first alarm takes place after given time. return nextAlarm; } } } else { // Not recurring. QDateTime alarmTime = time(); if (alarmTime > preTime) { return alarmTime; } } return QDateTime(); } bool Alarm::hasTime() const { return d->mHasTime; } void Alarm::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { if (d->mParent) { d->mParent->update(); } d->mAlarmTime = d->mAlarmTime.toTimeZone(oldZone); d->mAlarmTime.setTimeZone(newZone); if (d->mParent) { d->mParent->updated(); } } void Alarm::setSnoozeTime(const Duration &alarmSnoozeTime) { if (alarmSnoozeTime.value() > 0) { if (d->mParent) { d->mParent->update(); } d->mAlarmSnoozeTime = alarmSnoozeTime; if (d->mParent) { d->mParent->updated(); } } } Duration Alarm::snoozeTime() const { return d->mAlarmSnoozeTime; } void Alarm::setRepeatCount(int alarmRepeatCount) { if (d->mParent) { d->mParent->update(); } d->mAlarmRepeatCount = alarmRepeatCount; if (d->mParent) { d->mParent->updated(); } } int Alarm::repeatCount() const { return d->mAlarmRepeatCount; } Duration Alarm::duration() const { return Duration(d->mAlarmSnoozeTime.value() * d->mAlarmRepeatCount, d->mAlarmSnoozeTime.type()); } QDateTime Alarm::nextRepetition(const QDateTime &preTime) const { QDateTime at = nextTime(preTime); if (at > preTime) { return at; } if (!d->mAlarmRepeatCount) { // there isn't an occurrence after the specified time return QDateTime(); } qint64 repetition; int interval = d->mAlarmSnoozeTime.value(); bool daily = d->mAlarmSnoozeTime.isDaily(); if (daily) { qint64 daysTo = at.daysTo(preTime); if (preTime.time() <= at.time()) { --daysTo; } repetition = daysTo / interval + 1; } else { repetition = at.secsTo(preTime) / interval + 1; } if (repetition > d->mAlarmRepeatCount) { // all repetitions have finished before the specified time return QDateTime(); } return daily ? at.addDays(int(repetition * interval)) : at.addSecs(repetition * interval); } QDateTime Alarm::previousRepetition(const QDateTime &afterTime) const { QDateTime at = time(); if (at >= afterTime) { // alarm's first/only time is at/after the specified time return QDateTime(); } if (!d->mAlarmRepeatCount) { return at; } qint64 repetition; int interval = d->mAlarmSnoozeTime.value(); bool daily = d->mAlarmSnoozeTime.isDaily(); if (daily) { qint64 daysTo = at.daysTo(afterTime); if (afterTime.time() <= at.time()) { --daysTo; } repetition = daysTo / interval; } else { repetition = (at.secsTo(afterTime) - 1) / interval; } if (repetition > d->mAlarmRepeatCount) { repetition = d->mAlarmRepeatCount; } return daily ? at.addDays(int(repetition * interval)) : at.addSecs(repetition * interval); } QDateTime Alarm::endTime() const { if (!d->mAlarmRepeatCount) { return time(); } if (d->mAlarmSnoozeTime.isDaily()) { return time().addDays(d->mAlarmRepeatCount * d->mAlarmSnoozeTime.asDays()); } else { return time().addSecs(d->mAlarmRepeatCount * d->mAlarmSnoozeTime.asSeconds()); } } void Alarm::toggleAlarm() { if (d->mParent) { d->mParent->update(); } d->mAlarmEnabled = !d->mAlarmEnabled; if (d->mParent) { d->mParent->updated(); } } void Alarm::setEnabled(bool enable) { if (d->mParent) { d->mParent->update(); } d->mAlarmEnabled = enable; if (d->mParent) { d->mParent->updated(); } } bool Alarm::enabled() const { return d->mAlarmEnabled; } void Alarm::setStartOffset(const Duration &offset) { if (d->mParent) { d->mParent->update(); } d->mOffset = offset; d->mEndOffset = false; d->mHasTime = false; if (d->mParent) { d->mParent->updated(); } } Duration Alarm::startOffset() const { return (d->mHasTime || d->mEndOffset) ? Duration(0) : d->mOffset; } bool Alarm::hasStartOffset() const { return !d->mHasTime && !d->mEndOffset; } bool Alarm::hasEndOffset() const { return !d->mHasTime && d->mEndOffset; } void Alarm::setEndOffset(const Duration &offset) { if (d->mParent) { d->mParent->update(); } d->mOffset = offset; d->mEndOffset = true; d->mHasTime = false; if (d->mParent) { d->mParent->updated(); } } Duration Alarm::endOffset() const { return (d->mHasTime || !d->mEndOffset) ? Duration(0) : d->mOffset; } void Alarm::setParent(Incidence *parent) { d->mParent = parent; } QString Alarm::parentUid() const { return d->mParent ? d->mParent->uid() : QString(); } void Alarm::customPropertyUpdated() { if (d->mParent) { d->mParent->update(); d->mParent->updated(); } } void Alarm::setHasLocationRadius(bool hasLocationRadius) { if (d->mParent) { d->mParent->update(); } d->mHasLocationRadius = hasLocationRadius; if (hasLocationRadius) { setNonKDECustomProperty("X-LOCATION-RADIUS", QString::number(d->mLocationRadius)); } else { removeNonKDECustomProperty("X-LOCATION-RADIUS"); } if (d->mParent) { d->mParent->updated(); } } bool Alarm::hasLocationRadius() const { return d->mHasLocationRadius; } void Alarm::setLocationRadius(int locationRadius) { if (d->mParent) { d->mParent->update(); } d->mLocationRadius = locationRadius; if (d->mParent) { d->mParent->updated(); } } int Alarm::locationRadius() const { return d->mLocationRadius; } QDataStream &KCalendarCore::operator<<(QDataStream &out, const KCalendarCore::Alarm::Ptr &a) { if (a) { out << ((quint32)a->d->mType) << a->d->mAlarmSnoozeTime << a->d->mAlarmRepeatCount << a->d->mEndOffset << a->d->mHasTime << a->d->mAlarmEnabled << a->d->mHasLocationRadius << a->d->mLocationRadius << a->d->mOffset; serializeQDateTimeAsKDateTime(out, a->d->mAlarmTime); out << a->d->mFile << a->d->mMailSubject << a->d->mDescription << a->d->mMailAttachFiles << a->d->mMailAddresses; } return out; } QDataStream &KCalendarCore::operator>>(QDataStream &in, const KCalendarCore::Alarm::Ptr &a) { if (a) { quint32 type; in >> type; a->d->mType = static_cast(type); in >> a->d->mAlarmSnoozeTime >> a->d->mAlarmRepeatCount >> a->d->mEndOffset >> a->d->mHasTime >> a->d->mAlarmEnabled >> a->d->mHasLocationRadius >> a->d->mLocationRadius >> a->d->mOffset; deserializeKDateTimeAsQDateTime(in, a->d->mAlarmTime); in >> a->d->mFile >> a->d->mMailSubject >> a->d->mDescription >> a->d->mMailAttachFiles >> a->d->mMailAddresses; } return in; } void Alarm::virtual_hook(int id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/alarm.h000066400000000000000000000504101473346337000226030ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003 David Jarvie SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB, a KDAB Group company SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Alarm class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_ALARM_H #define KCALCORE_ALARM_H #include "customproperties.h" #include "duration.h" #include "person.h" #include #include #include #include #include #include #include class QTimeZone; namespace KCalendarCore { class Incidence; /** @brief Represents an alarm notification. Alarms are user notifications that occur at specified times. Notifications can be on-screen pop-up dialogs, email messages, the playing of audio files, or the running of another program. Alarms always belong to a parent Incidence. */ class Q_CORE_EXPORT Alarm : public CustomProperties { public: /** The different types of alarms. */ enum Type { Invalid, /**< Invalid, or no alarm */ Display, /**< Display a dialog box */ Procedure, /**< Call a script */ Email, /**< Send email */ Audio, /**< Play an audio file */ }; /** A shared pointer to an Alarm object. */ typedef QSharedPointer Ptr; /** List of alarms. */ typedef QVector List; /** Constructs an alarm belonging to the @p parent Incidence. @param parent is the Incidence this alarm will belong to. */ // Can't find a way to use a shared pointer here. // 在这里找不到使用共享指针的方法。 // Inside incidence.cpp, it does alarm->setParent( this ) explicit Alarm(Incidence *parent); /** Copy constructor. @param other is the alarm to copy. */ Alarm(const Alarm &other); /** Destroys the alarm. */ ~Alarm() override; /** Copy operator. */ Alarm &operator=(const Alarm &); /** Compares two alarms for equality. @param a is the comparison alarm. */ bool operator==(const Alarm &a) const; /** Compares two alarms for inequality. @param a is the comparison alarm. */ bool operator!=(const Alarm &a) const; /** Sets the @p parent Incidence of the alarm. @param parent is alarm parent Incidence to set. @see parentUid() */ // Is there a way to use QSharedPointer here? // although it's safe, Incidence's dtor calls setParent( 0 ) // se we don't dereference a deleted pointer here. // Also, I renamed "Incidence *parent()" to "QString parentUid()" // So we don't return raw pointers void setParent(Incidence *parent); /** Returns the parent's incidence UID of the alarm. @see setParent() */ // We don't have a share pointer to return, so return the UID. Q_REQUIRED_RESULT QString parentUid() const; /** Sets the #Type for this alarm to @p type. If the specified type is different from the current type of the alarm, then the alarm's type-specific properties are re-initialized. @param type is the alarm #Type to set. @see type() */ void setType(Type type); /** Returns the #Type of the alarm. @see setType() */ Q_REQUIRED_RESULT Type type() const; /** Sets the #Display type for this alarm. If @p text is specified non-empty, then it is used as the description text to display when the alarm is triggered. @param text is the description to display when the alarm is triggered. @see setText(), text() */ void setDisplayAlarm(const QString &text = QString()); /** Sets the description @p text to be displayed when the alarm is triggered. Ignored if the alarm is not a display alarm. @param text is the description to display when the alarm is triggered. @see setDisplayAlarm(), text() */ void setText(const QString &text); /** Returns the display text string for a #Display alarm type. Returns an empty string if the alarm is not a #Display type. @see setDisplayAlarm(), setText() */ Q_REQUIRED_RESULT QString text() const; /** Sets the #Audio type for this alarm and the name of the audio file to play when the alarm is triggered. @param audioFile is the name of the audio file to play when the alarm is triggered. @see setAudioFile(), audioFile() */ void setAudioAlarm(const QString &audioFile = QString()); /** Sets the name of the audio file to play when the audio alarm is triggered. Ignored if the alarm is not an #Audio type. @param audioFile is the name of the audio file to play when the alarm is triggered. @see setAudioAlarm(), audioFile() */ void setAudioFile(const QString &audioFile); /** Returns the audio file name for an #Audio alarm type. Returns an empty string if the alarm is not an #Audio type. @see setAudioAlarm(), setAudioFile() */ Q_REQUIRED_RESULT QString audioFile() const; /** Sets the #Procedure type for this alarm and the program (with arguments) to execute when the alarm is triggered. @param programFile is the name of the program file to execute when the alarm is triggered. @param arguments is a string of arguments to supply to @p programFile. @see setProgramFile(), programFile(), setProgramArguments(), programArguments() */ void setProcedureAlarm(const QString &programFile, const QString &arguments = QString()); /** Sets the program file to execute when the alarm is triggered. Ignored if the alarm is not a #Procedure type. @param programFile is the name of the program file to execute when the alarm is triggered. @see setProcedureAlarm(), programFile(), setProgramArguments(), programArguments() */ void setProgramFile(const QString &programFile); /** Returns the program file name for a #Procedure alarm type. Returns an empty string if the alarm is not a #Procedure type. @see setProcedureAlarm(), setProgramFile(), setProgramArguments(), programArguments() */ Q_REQUIRED_RESULT QString programFile() const; /** Sets the program arguments string when the alarm is triggered. Ignored if the alarm is not a #Procedure type. @param arguments is a string of arguments to supply to the program. @see setProcedureAlarm(), setProgramFile(), programFile(), programArguments() */ void setProgramArguments(const QString &arguments); /** Returns the program arguments string for a #Procedure alarm type. Returns an empty string if the alarm is not a #Procedure type. @see setProcedureAlarm(), setProgramFile(), programFile(), setProgramArguments() */ Q_REQUIRED_RESULT QString programArguments() const; /** Sets the #Email type for this alarm and the email @p subject, @p text, @p addresses, and @p attachments that make up an email message to be sent when the alarm is triggered. @param subject is the email subject. @param text is a string containing the body of the email message. @param addressees is Person list of email addresses. @param attachments is a a QStringList of optional file names of email attachments. @see setMailSubject(), setMailText(), setMailAddresses(), setMailAttachments() */ void setEmailAlarm(const QString &subject, const QString &text, const Person::List &addressees, const QStringList &attachments = QStringList()); /** Sets the email address of an #Email type alarm. Ignored if the alarm is not an #Email type. @param mailAlarmAddress is a Person to receive a mail message when an #Email type alarm is triggered. @see setMailSubject(), setMailText(), setMailAddresses(), setMailAttachment(), setMailAttachments(), mailAddresses() */ void setMailAddress(const Person &mailAlarmAddress); /** Sets a list of email addresses of an #Email type alarm. Ignored if the alarm is not an #Email type. @param mailAlarmAddresses is a Person list to receive a mail message when an #Email type alarm is triggered. @see setMailSubject(), setMailText(), setMailAddress(), setMailAttachments(), setMailAttachment(), mailAddresses() */ void setMailAddresses(const Person::List &mailAlarmAddresses); /** Adds an address to the list of email addresses to send mail to when the alarm is triggered. Ignored if the alarm is not an #Email type. @param mailAlarmAddress is a Person to add to the list of addresses to receive a mail message when an #Email type alarm is triggered. @see setMailAddress(), setMailAddresses(), mailAddresses() */ void addMailAddress(const Person &mailAlarmAddress); /** Returns the list of addresses for an #Email alarm type. Returns an empty list if the alarm is not an #Email type. @see addMailAddress(), setMailAddress(), setMailAddresses() */ Q_REQUIRED_RESULT Person::List mailAddresses() const; /** Sets the subject line of a mail message for an #Email alarm type. Ignored if the alarm is not an #Email type. @param mailAlarmSubject is a string to be used as a subject line of an email message to send when the #Email type alarm is triggered. @see setMailText(), setMailAddress(), setMailAddresses(), setMailAttachment(), setMailAttachments(), mailSubject() */ void setMailSubject(const QString &mailAlarmSubject); /** Returns the subject line string for an #Email alarm type. Returns an empty string if the alarm is not an #Email type. @see setMailSubject() */ Q_REQUIRED_RESULT QString mailSubject() const; /** Sets the filename to attach to a mail message for an #Email alarm type. Ignored if the alarm is not an #Email type. @param mailAttachFile is a string containing a filename to be attached to an email message to send when the #Email type alarm is triggered. @see setMailSubject(), setMailText(), setMailAddress(), setMailAddresses(), setMailAttachments(), mailAttachments() */ void setMailAttachment(const QString &mailAttachFile); /** Sets a list of filenames to attach to a mail message for an #Email alarm type. Ignored if the alarm is not an #Email type. @param mailAttachFiles is a QString list of filenames to attach to a mail message when an #Email type alarm is triggered. @see setMailSubject(), setMailText(), setMailAttachment(), setMailAddress(), setMailAddresses() */ void setMailAttachments(const QStringList &mailAttachFiles); /** Adds a filename to the list of files to attach to a mail message for an #Email alarm type. Ignored if the alarm is not an #Email type. @param mailAttachFile is a string containing a filename to be attached to an email message to send when the #Email type alarm is triggered. @see setMailAttachment(), setMailAttachments(), mailAttachments() */ void addMailAttachment(const QString &mailAttachFile); /** Returns the list of attachment filenames for an #Email alarm type. Returns an empty list if the alarm is not an #Email type. @see addMailAttachment(), setMailAttachment(), setMailAttachments() */ Q_REQUIRED_RESULT QStringList mailAttachments() const; /** Sets the body text for an #Email alarm type. Ignored if the alarm is not an #Email type. @param text is a string containing the body text of a mail message when an #Email type alarm is triggered. @see setMailSubject(), setMailAddress(), setMailAddresses(), setMailAttachment(), setMailAttachments() */ void setMailText(const QString &text); /** Returns the body text for an #Email alarm type. Returns an empty string if the alarm is not an #Email type. @see setMailText() */ Q_REQUIRED_RESULT QString mailText() const; /** Sets the trigger time of the alarm. @param alarmTime is the QDateTime alarm trigger. @see time() */ void setTime(const QDateTime &alarmTime); /** Returns the alarm trigger date/time. @see setTime() */ Q_REQUIRED_RESULT QDateTime time() const; /** Returns the next alarm trigger date/time after given date/time. Takes recurrent incidences into account. 返回给定日期/时间后的下一个报警触发日期/时间。 将反复发生的事件考虑在内。 @param preTime date/time from where to start @param ignoreRepetitions don't take repetitions into account @see nextRepetition() */ Q_REQUIRED_RESULT QDateTime nextTime(const QDateTime &preTime, bool ignoreRepetitions = false) const; /** Returns the date/time when the last repetition of the alarm goes off. If the alarm does not repeat this is equivalent to calling time(). 返回上次重复报警的日期/时间。 如果警报没有重复,这相当于调用时间()。 @see setTime() */ Q_REQUIRED_RESULT QDateTime endTime() const; /** Returns true if the alarm has a trigger date/time. */ Q_REQUIRED_RESULT bool hasTime() const; /** Sets the alarm offset relative to the start of the parent Incidence. @param offset is a Duration to be used as a time relative to the start of the parent Incidence to be used as the alarm trigger. @see setEndOffset(), startOffset(), endOffset() */ void setStartOffset(const Duration &offset); /** Returns offset of alarm in time relative to the start of the parent Incidence. If the alarm's time is not defined in terms of an offset relative to the start of the event, returns zero. @see setStartOffset(), hasStartOffset() */ Q_REQUIRED_RESULT Duration startOffset() const; /** Returns whether the alarm is defined in terms of an offset relative to the start of the parent Incidence. @see startOffset(), setStartOffset() */ bool hasStartOffset() const; /** Sets the alarm offset relative to the end of the parent Incidence. @param offset is a Duration to be used as a time relative to the end of the parent Incidence to be used as the alarm trigger. @see setStartOffset(), startOffset(), endOffset() */ void setEndOffset(const Duration &offset); /** Returns offset of alarm in time relative to the end of the event. If the alarm's time is not defined in terms of an offset relative to the end of the event, returns zero. @see setEndOffset(), hasEndOffset() */ Q_REQUIRED_RESULT Duration endOffset() const; /** Returns whether the alarm is defined in terms of an offset relative to the end of the event. @see endOffset(), setEndOffset() */ bool hasEndOffset() const; /** Shift the times of the alarm so that they appear at the same clock time as before but in a new time zone. The shift is done from a viewing time zone rather than from the actual alarm time zone. For example, shifting an alarm whose start time is 09:00 America/New York, using an old viewing time zone (@p oldZone) of Europe/London, to a new time zone (@p newZone) of Europe/Paris, will result in the time being shifted from 14:00 (which is the London time of the alarm start) to 14:00 Paris time. @param oldZone the time zone which provides the clock times @param newZone the new time zone */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone); /** Sets the snooze time interval for the alarm. @param alarmSnoozeTime the time between snoozes. @see snoozeTime() */ void setSnoozeTime(const Duration &alarmSnoozeTime); /** Returns the snooze time interval. @see setSnoozeTime() */ Q_REQUIRED_RESULT Duration snoozeTime() const; /** Sets how many times an alarm is to repeat itself after its initial occurrence (w/snoozes). @param alarmRepeatCount is the number of times an alarm may repeat, excluding the initial occurrence. @see repeatCount() */ void setRepeatCount(int alarmRepeatCount); /** Returns how many times an alarm may repeats after its initial occurrence. 返回警报在初始发生后可能重复的次数。 @see setRepeatCount() */ Q_REQUIRED_RESULT int repeatCount() const; /** Returns the date/time of the alarm's initial occurrence or its next repetition after a given time. @param preTime the date/time after which to find the next repetition. @return the date/time of the next repetition, or an invalid date/time if the specified time is at or after the alarm's last repetition. @see previousRepetition() */ Q_REQUIRED_RESULT QDateTime nextRepetition(const QDateTime &preTime) const; /** Returns the date/time of the alarm's latest repetition or, if none, its initial occurrence before a given time. @param afterTime is the date/time before which to find the latest repetition. @return the date and time of the latest repetition, or an invalid date/time if the specified time is at or before the alarm's initial occurrence. @see nextRepetition() */ Q_REQUIRED_RESULT QDateTime previousRepetition(const QDateTime &afterTime) const; /** Returns the interval between the alarm's initial occurrence and its final repetition. */ Q_REQUIRED_RESULT Duration duration() const; /** Toggles the alarm status, i.e, an enable alarm becomes disabled and a disabled alarm becomes enabled. @see enabled(), setEnabled() */ void toggleAlarm(); /** Sets the enabled status of the alarm. @param enable if true, then enable the alarm; else disable the alarm. @see enabled(), toggleAlarm() */ void setEnabled(bool enable); /** Returns the alarm enabled status: true (enabled) or false (disabled). @see setEnabled(), toggleAlarm() */ Q_REQUIRED_RESULT bool enabled() const; /** Set if the location radius for the alarm has been defined. @param hasLocationRadius if true, then this alarm has a location radius. @see setLocationRadius() */ void setHasLocationRadius(bool hasLocationRadius); /** Returns true if alarm has location radius defined. @see setLocationRadius() */ Q_REQUIRED_RESULT bool hasLocationRadius() const; /** Set location radius for the alarm. This means that alarm will be triggered when user approaches the location. Given value will be stored into custom properties as X-LOCATION-RADIUS. @param locationRadius radius in meters @see locationRadius() */ void setLocationRadius(int locationRadius); /** Returns the location radius in meters. @see setLocationRadius() */ Q_REQUIRED_RESULT int locationRadius() const; protected: /** @copydoc CustomProperties::customPropertyUpdated() */ void customPropertyUpdated() override; /** @copydoc IncidenceBase::virtual_hook() */ virtual void virtual_hook(int id, void *data); private: //@cond PRIVATE class Private; Private *const d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &s, const KCalendarCore::Alarm::Ptr &); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &s, const KCalendarCore::Alarm::Ptr &); }; /** * Alarm serializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::Alarm::Ptr &); /** * Alarm deserializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, const KCalendarCore::Alarm::Ptr &); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Alarm::Ptr, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Alarm::Ptr) //@endcond #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/attachment.cpp000066400000000000000000000106071473346337000241760ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002 Michael Brade SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Attachment class. @brief Represents information related to an attachment for a Calendar Incidence. @author Michael Brade \ */ #include "attachment.h" #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Attachment::Private : public QSharedData { public: Private() = default; Private(const QString &mime, bool binary) : mMimeType(mime) , mBinary(binary) { } Private(const Private &other) = default; ~Private() { } mutable uint mSize = 0; mutable QByteArray mDecodedDataCache; QString mMimeType; QString mUri; QByteArray mEncodedData; QString mLabel; bool mBinary = false; bool mLocal = false; bool mShowInline = false; }; //@endcond Attachment::Attachment() : d(new Attachment::Private) { } Attachment::Attachment(const Attachment &attachment) = default; Attachment::Attachment(const QString &uri, const QString &mime) : d(new Attachment::Private(mime, false)) { d->mUri = uri; } Attachment::Attachment(const QByteArray &base64, const QString &mime) : d(new Attachment::Private(mime, true)) { d->mEncodedData = base64; } Attachment::~Attachment() = default; bool Attachment::isEmpty() const { return d->mMimeType.isEmpty() && d->mUri.isEmpty() && d->mEncodedData.isEmpty(); } bool Attachment::isUri() const { return !d->mBinary; } QString Attachment::uri() const { if (!d->mBinary) { return d->mUri; } else { return QString(); } } void Attachment::setUri(const QString &uri) { d->mUri = uri; d->mBinary = false; } bool Attachment::isBinary() const { return d->mBinary; } QByteArray Attachment::data() const { if (d->mBinary) { return d->mEncodedData; } else { return QByteArray(); } } QByteArray Attachment::decodedData() const { if (d->mDecodedDataCache.isNull()) { d->mDecodedDataCache = QByteArray::fromBase64(d->mEncodedData); } return d->mDecodedDataCache; } void Attachment::setDecodedData(const QByteArray &data) { setData(data.toBase64()); d->mDecodedDataCache = data; d->mSize = d->mDecodedDataCache.size(); } void Attachment::setData(const QByteArray &base64) { d->mEncodedData = base64; d->mBinary = true; d->mDecodedDataCache = QByteArray(); d->mSize = 0; } uint Attachment::size() const { if (isUri()) { return 0; } if (!d->mSize) { d->mSize = decodedData().size(); } return d->mSize; } QString Attachment::mimeType() const { return d->mMimeType; } void Attachment::setMimeType(const QString &mime) { d->mMimeType = mime; } bool Attachment::showInline() const { return d->mShowInline; } void Attachment::setShowInline(bool showinline) { d->mShowInline = showinline; } QString Attachment::label() const { return d->mLabel; } void Attachment::setLabel(const QString &label) { d->mLabel = label; } bool Attachment::isLocal() const { return d->mLocal; } void Attachment::setLocal(bool local) { d->mLocal = local; } Attachment &Attachment::operator=(const Attachment &other) = default; bool Attachment::operator==(const Attachment &a2) const { return uri() == a2.uri() // && d->mLabel == a2.label() // && d->mLocal == a2.isLocal() // && d->mBinary == a2.isBinary() // && d->mShowInline == a2.showInline() // && size() == a2.size() // && decodedData() == a2.decodedData(); } bool Attachment::operator!=(const Attachment &a2) const { return !(*this == a2); } QDataStream &KCalendarCore::operator<<(QDataStream &out, const KCalendarCore::Attachment &a) { out << a.d->mSize << a.d->mMimeType << a.d->mUri << a.d->mEncodedData << a.d->mLabel << a.d->mBinary << a.d->mLocal << a.d->mShowInline; return out; } QDataStream &KCalendarCore::operator>>(QDataStream &in, KCalendarCore::Attachment &a) { in >> a.d->mSize >> a.d->mMimeType >> a.d->mUri >> a.d->mEncodedData >> a.d->mLabel >> a.d->mBinary >> a.d->mLocal >> a.d->mShowInline; return in; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/attachment.h000066400000000000000000000166351473346337000236520ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002 Michael Brade SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Attachment class. @author Michael Brade \ */ #ifndef KCALCORE_ATTACHMENT_H #define KCALCORE_ATTACHMENT_H #include #include #include #include namespace KCalendarCore { /** @brief Represents information related to an attachment for a Calendar Incidence. 表示与日历事件的附件相关的信息。 This is not an email message attachment. Calendar Incidence attachments consist of: - A Uniform Resource Identifier (URI) or a base64 encoded binary blob. - A Multipurpose Internet Mail Extensions (MIME) type. This class is used to associate files (local or remote) or other resources with a Calendar Incidence. */ class Q_CORE_EXPORT Attachment { Q_GADGET Q_PROPERTY(bool isEmpty READ isEmpty) Q_PROPERTY(QString uri READ uri WRITE setUri) Q_PROPERTY(bool isUri READ isUri) Q_PROPERTY(bool isBinary READ isBinary) Q_PROPERTY(int size READ size) Q_PROPERTY(QString mimeType READ mimeType WRITE setMimeType) Q_PROPERTY(bool showInline READ showInline WRITE setShowInline) Q_PROPERTY(QString label READ label WRITE setLabel) Q_PROPERTY(bool isLocal READ isLocal WRITE setLocal) public: /** List of attachments. */ typedef QVector List; /** Constructs an empty attachment. */ explicit Attachment(); /** Constructs an attachment consisting of a @p uri and a @p mime type. @param uri is the @acronym URI referred to by this attachment. @param mime is the (optional) @acronym MIME type of the @p uri */ explicit Attachment(const QString &uri, const QString &mime = QString()); /** Constructs an attachment consisting of a binary blob of data and a @p mime type. @param base64 is the binary data in base64 format for the attachment. @param mime is the (optional) @acronym MIME type of the attachment */ explicit Attachment(const QByteArray &base64, const QString &mime = QString()); /** Constructs an attachment by copying another attachment. @param attachment is the attachment to be copied. */ Attachment(const Attachment &attachment); /** Destroys the attachment. */ ~Attachment(); /** Returns whether this is an empty or default constructed object. */ bool isEmpty() const; /** Sets the @acronym URI for this attachment to @p uri. @param uri is the @acronym URI to use for the attachment. @see uri(), isUri() */ void setUri(const QString &uri); /** Returns the @acronym URI of the attachment. @see setUri(), isUri() */ Q_REQUIRED_RESULT QString uri() const; /** Returns true if the attachment has a @acronym URI; false otherwise. @see uri(), setUri(I), isBinary() */ Q_REQUIRED_RESULT bool isUri() const; /** Returns true if the attachment has a binary blob; false otherwise. @see isUri() */ Q_REQUIRED_RESULT bool isBinary() const; /** Sets the base64 encoded binary blob data of the attachment. @param base64 contains the base64 encoded binary data. @see data(), decodedData() */ void setData(const QByteArray &base64); /** Returns a pointer to a QByteArray containing the base64 encoded binary data of the attachment. @see setData(), setDecodedData() */ Q_REQUIRED_RESULT QByteArray data() const; /** Sets the decoded attachment data. @param data is the decoded base64 binary data. @see decodedData(), data() */ void setDecodedData(const QByteArray &data); /** Returns a QByteArray containing the decoded base64 binary data of the attachment. @see setDecodedData(), setData() */ Q_REQUIRED_RESULT QByteArray decodedData() const; /** Returns the size of the attachment, in bytes. If the attachment is binary (i.e, there is no @acronym URI associated with the attachment) then a value of 0 is returned. */ uint size() const; /** Sets the @acronym MIME-type of the attachment to @p mime. @param mime is the string to use for the attachment @acronym MIME-type. @see mimeType() */ void setMimeType(const QString &mime); /** Returns the @acronym MIME-type of the attachment. @see setMimeType() */ Q_REQUIRED_RESULT QString mimeType() const; /** Sets the attachment "show in-line" option, which is derived from the Calendar Incidence @b X-CONTENT-DISPOSITION parameter. @param showinline is the flag to set (true) or unset (false) for the attachment "show in-line" option. @see showInline() */ void setShowInline(bool showinline); /** Returns the attachment "show in-line" flag. @see setShowInline() */ Q_REQUIRED_RESULT bool showInline() const; /** Sets the attachment label to @p label, which is derived from the Calendar Incidence @b X-LABEL parameter. @param label is the string to use for the attachment label. @see label() */ void setLabel(const QString &label); /** Returns the attachment label string. */ Q_REQUIRED_RESULT QString label() const; /** Sets the attachment "local" option, which is derived from the Calendar Incidence @b X-KONTACT-TYPE parameter. @param local is the flag to set (true) or unset (false) for the attachment "local" option. @see local() */ void setLocal(bool local); /** Returns the attachment "local" flag. */ Q_REQUIRED_RESULT bool isLocal() const; /** Assignment operator. @param attachment is the attachment to assign. */ Attachment &operator=(const Attachment &attachment); /** Compare this with @p attachment for equality. @param attachment is the attachment to compare. @return true if the attachments are equal; false otherwise. */ bool operator==(const Attachment &attachment) const; /** Compare this with @p attachment for inequality. @param attachment is the attachment to compare. @return true if the attachments are /not/ equal; false otherwise. */ bool operator!=(const Attachment &attachment) const; private: //@cond PRIVATE class Private; QSharedDataPointer d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &s, const KCalendarCore::Attachment &); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &s, KCalendarCore::Attachment &); }; /** * Attachment serializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::Attachment &); /** * Attachment deserializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, KCalendarCore::Attachment &); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Attachment, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Attachment) //@endcond #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/attendee.cpp000066400000000000000000000200221473346337000236270ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2010 Casey Link SPDX-FileCopyrightText: 2009-2010 Klaralvdalens Datakonsult AB, a KDAB Group company SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Attendee class. @brief Represents information related to an attendee of an Calendar Incidence. @author Cornelius Schumacher \ */ #include "attendee.h" #include "person.h" #include "person_p.h" #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Attendee::Private : public QSharedData { public: void setCuType(CuType cuType); void setCuType(const QString &cuType); CuType cuType() const; QString cuTypeStr() const; bool mRSVP = false; Role mRole; PartStat mStatus; mutable QString mUid; QString mDelegate; QString mDelegator; CustomProperties mCustomProperties; QString mName; QString mEmail; private: QString sCuType; CuType mCuType; }; //@endcond void KCalendarCore::Attendee::Private::setCuType(Attendee::CuType cuType) { mCuType = cuType; sCuType.clear(); } void KCalendarCore::Attendee::Private::setCuType(const QString &cuType) { const QString upper = cuType.toUpper(); if (upper == QLatin1String("INDIVIDUAL")) { setCuType(Attendee::Individual); } else if (upper == QLatin1String("GROUP")) { setCuType(Attendee::Group); } else if (upper == QLatin1String("RESOURCE")) { setCuType(Attendee::Resource); } else if (upper == QLatin1String("ROOM")) { setCuType(Attendee::Room); } else { setCuType(Attendee::Unknown); if (upper.startsWith(QLatin1String("X-")) || upper.startsWith(QLatin1String("IANA-"))) { sCuType = upper; } } } Attendee::CuType KCalendarCore::Attendee::Private::cuType() const { return mCuType; } QString KCalendarCore::Attendee::Private::cuTypeStr() const { switch (mCuType) { case Attendee::Individual: return QStringLiteral("INDIVIDUAL"); case Attendee::Group: return QStringLiteral("GROUP"); case Attendee::Resource: return QStringLiteral("RESOURCE"); case Attendee::Room: return QStringLiteral("ROOM"); case Attendee::Unknown: if (sCuType.isEmpty()) { return QStringLiteral("UNKNOWN"); } else { return sCuType; } } return QStringLiteral("UNKNOWN"); } Attendee::Attendee() : d(new Attendee::Private) { } Attendee::Attendee(const QString &name, const QString &email, bool rsvp, Attendee::PartStat status, Attendee::Role role, const QString &uid) : d(new Attendee::Private) { setName(name); setEmail(email); d->mRSVP = rsvp; d->mStatus = status; d->mRole = role; d->mUid = uid; d->setCuType(Attendee::Individual); } Attendee::Attendee(const Attendee &attendee) : d(attendee.d) { } Attendee::~Attendee() = default; bool Attendee::isNull() const { // isNull rather than isEmpty, as user code is actually creating empty but non-null attendees... return d->mName.isNull() && d->mEmail.isNull(); } bool KCalendarCore::Attendee::operator==(const Attendee &attendee) const { return d->mUid == attendee.d->mUid && d->mRSVP == attendee.d->mRSVP && d->mRole == attendee.d->mRole && d->mStatus == attendee.d->mStatus && d->mDelegate == attendee.d->mDelegate && d->mDelegator == attendee.d->mDelegator && d->cuTypeStr() == attendee.d->cuTypeStr() && d->mName == attendee.d->mName && d->mEmail == attendee.d->mEmail; } bool KCalendarCore::Attendee::operator!=(const Attendee &attendee) const { return !operator==(attendee); } Attendee &KCalendarCore::Attendee::operator=(const Attendee &attendee) { // check for self assignment if (&attendee == this) { return *this; } d = attendee.d; return *this; } QString Attendee::name() const { return d->mName; } void Attendee::setName(const QString &name) { if (name.startsWith(QLatin1String("mailto:"), Qt::CaseInsensitive)) { d->mName = name.mid(7); } else { d->mName = name; } } QString Attendee::fullName() const { return fullNameHelper(d->mName, d->mEmail); } QString Attendee::email() const { return d->mEmail; } void Attendee::setEmail(const QString &email) { if (email.startsWith(QLatin1String("mailto:"), Qt::CaseInsensitive)) { d->mEmail = email.mid(7); } else { d->mEmail = email; } } void Attendee::setRSVP(bool r) { d->mRSVP = r; } bool Attendee::RSVP() const { return d->mRSVP; } void Attendee::setStatus(Attendee::PartStat status) { d->mStatus = status; } Attendee::PartStat Attendee::status() const { return d->mStatus; } void Attendee::setCuType(Attendee::CuType cuType) { d->setCuType(cuType); } void Attendee::setCuType(const QString &cuType) { d->setCuType(cuType); } Attendee::CuType Attendee::cuType() const { return d->cuType(); } QString Attendee::cuTypeStr() const { return d->cuTypeStr(); } void Attendee::setRole(Attendee::Role role) { d->mRole = role; } Attendee::Role Attendee::role() const { return d->mRole; } void Attendee::setUid(const QString &uid) { d->mUid = uid; } QString Attendee::uid() const { /* If Uid is empty, just use the pointer to Attendee (encoded to * string) as Uid. Only thing that matters is that the Uid is unique * insofar IncidenceBase is concerned, and this does that (albeit * not very nicely). If these are ever saved to disk, should use * (considerably more expensive) CalFormat::createUniqueId(). As Uid * is not part of Attendee in iCal std, it's fairly safe bet that * these will never hit disc though so faster generation speed is * more important than actually being forever unique.*/ if (d->mUid.isEmpty()) { d->mUid = QString::number((qlonglong)d.constData()); } return d->mUid; } void Attendee::setDelegate(const QString &delegate) { d->mDelegate = delegate; } QString Attendee::delegate() const { return d->mDelegate; } void Attendee::setDelegator(const QString &delegator) { d->mDelegator = delegator; } QString Attendee::delegator() const { return d->mDelegator; } void Attendee::setCustomProperty(const QByteArray &xname, const QString &xvalue) { d->mCustomProperties.setNonKDECustomProperty(xname, xvalue); } CustomProperties &Attendee::customProperties() { return d->mCustomProperties; } const CustomProperties &Attendee::customProperties() const { return d->mCustomProperties; } QDataStream &KCalendarCore::operator<<(QDataStream &stream, const KCalendarCore::Attendee &attendee) { KCalendarCore::Person p(attendee.name(), attendee.email()); stream << p; return stream << attendee.d->mRSVP << int(attendee.d->mRole) << int(attendee.d->mStatus) << attendee.d->mUid << attendee.d->mDelegate << attendee.d->mDelegator << attendee.d->cuTypeStr() << attendee.d->mCustomProperties; } QDataStream &KCalendarCore::operator>>(QDataStream &stream, KCalendarCore::Attendee &attendee) { bool RSVP; Attendee::Role role; Attendee::PartStat status; QString uid; QString delegate; QString delegator; QString cuType; CustomProperties customProperties; uint role_int; uint status_int; KCalendarCore::Person person; stream >> person; stream >> RSVP >> role_int >> status_int >> uid >> delegate >> delegator >> cuType >> customProperties; role = Attendee::Role(role_int); status = Attendee::PartStat(status_int); attendee = Attendee(person.name(), person.email(), RSVP, status, role, uid); attendee.setDelegate(delegate); attendee.setDelegator(delegator); attendee.setCuType(cuType); attendee.d->mCustomProperties = customProperties; return stream; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/attendee.h000066400000000000000000000233651473346337000233110ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Attendee class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_ATTENDEE_H #define KCALCORE_ATTENDEE_H #include #include #include "customproperties.h" namespace KCalendarCore { /** @brief Represents information related to an attendee of an Calendar Incidence, typically a meeting or task (to-do). Attendees are people with a name and (optional) email address who are invited to participate in some way in a meeting or task. This class also tracks that status of the invitation: accepted; tentatively accepted; declined; delegated to another person; in-progress; completed. Attendees may optionally be asked to @acronym RSVP ("Respond Please") to the invitation. Note that each attendee be can optionally associated with a @acronym UID (unique identifier) derived from a Calendar Incidence, Email Message, or any other thing you want. */ class Q_CORE_EXPORT Attendee { Q_GADGET Q_PROPERTY(bool isNull READ isNull) Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(QString fullName READ fullName) Q_PROPERTY(QString email READ email WRITE setEmail) Q_PROPERTY(Role role READ role WRITE setRole) Q_PROPERTY(QString uid READ uid WRITE setUid) Q_PROPERTY(PartStat status READ status WRITE setStatus) Q_PROPERTY(CuType cuType READ cuType WRITE setCuType) Q_PROPERTY(bool rsvp READ RSVP WRITE setRSVP) Q_PROPERTY(QString delegate READ delegate WRITE setDelegate) Q_PROPERTY(QString delegator READ delegator WRITE setDelegator) public: /** The different types of participant status. The meaning is specific to the incidence type in context. */ enum PartStat { NeedsAction, /**< Event, to-do or journal needs action (default) */ Accepted, /**< Event, to-do or journal accepted */ Declined, /**< Event, to-do or journal declined */ Tentative, /**< Event or to-do tentatively accepted */ Delegated, /**< Event or to-do delegated */ Completed, /**< To-do completed */ InProcess, /**< To-do in process of being completed */ None, }; Q_ENUM(PartStat) /** The different types of participation roles. */ enum Role { ReqParticipant, /**< Participation is required (default) */ OptParticipant, /**< Participation is optional */ NonParticipant, /**< Non-Participant; copied for information purposes */ Chair, /**< Chairperson */ }; Q_ENUM(Role) /** * The different types of a participant. * * @since 4.14 */ enum CuType { Individual, /**< An individual (default) */ Group, /**< A group of individuals */ Resource, /**< A physical resource */ Room, /**< A room resource */ Unknown, /**< Otherwise not known */ /** * Parameters that have to set via the QString variant of @setCuType() and @cuType() * x-name ; Experimental cuType * iana-token ; Other IANA-registered */ }; Q_ENUM(CuType) /** List of attendees. */ typedef QVector List; /** Create a null Attendee. */ Attendee(); /** Constructs an attendee consisting of a person name (@p name) and email address (@p email); invitation status and #Role; an optional @acronym RSVP flag and @acronym UID. @param name is person name of the attendee. @param email is person email address of the attendee. @param rsvp if true, the attendee is requested to reply to invitations. @param status is the #PartStat status of the attendee. @param role is the #Role of the attendee. @param uid is the @acronym UID of the attendee. */ Attendee(const QString &name, const QString &email, bool rsvp = false, PartStat status = None, Role role = ReqParticipant, const QString &uid = QString()); /** Constructs an attendee by copying another attendee. @param attendee is the attendee to be copied. */ Attendee(const Attendee &attendee); /** Destroys the attendee. */ ~Attendee(); /** * Returns @c true if this is a default-constructed Attendee instance. */ bool isNull() const; /** Returns the name of the attendee. */ Q_REQUIRED_RESULT QString name() const; /** Sets the name of the attendee to @p name. */ void setName(const QString &name); /** Returns the full name and email address of this attendee @return A QString containing the person's full name in the form "FirstName LastName \". */ Q_REQUIRED_RESULT QString fullName() const; /** Returns the email address for this attendee. */ Q_REQUIRED_RESULT QString email() const; /** Sets the email address for this attendee to @p email. */ void setEmail(const QString &email); /** Sets the Role of the attendee to @p role. @param role is the Role to use for the attendee. @see role() */ void setRole(Role role); /** Returns the Role of the attendee. @see setRole() */ Q_REQUIRED_RESULT Role role() const; /** Sets the @acronym UID of the attendee to @p uid. @param uid is the @acronym UID to use for the attendee. @see uid() */ void setUid(const QString &uid); /** Returns the @acronym UID of the attendee. @see setUid() */ Q_REQUIRED_RESULT QString uid() const; /** Sets the #PartStat of the attendee to @p status. @param status is the #PartStat to use for the attendee. @see status() */ void setStatus(PartStat status); /** Returns the #PartStat of the attendee. @see setStatus() */ Q_REQUIRED_RESULT PartStat status() const; /** Sets the #CuType of the attendee to @p cuType. @param cuType is the #CuType to use for the attendee. @see cuType() @since 4.14 */ void setCuType(CuType cuType); /** Sets the #CuType of the attendee to @p cuType. @param cuType is the #CuType to use for the attendee. @see cuType() @since 4.14 */ void setCuType(const QString &cuType); /** Returns the #CuType of the attendee. @see setCuType() @since 4.14 */ Q_REQUIRED_RESULT CuType cuType() const; /** Returns the #CuType of the attendee. @see setCuType() @since 4.14 */ Q_REQUIRED_RESULT QString cuTypeStr() const; /** Sets the @acronym RSVP flag of the attendee to @p rsvp. @param rsvp if set (true), the attendee is requested to reply to invitations. @see RSVP() */ void setRSVP(bool rsvp); /** Returns the attendee @acronym RSVP flag. @see setRSVP() */ Q_REQUIRED_RESULT bool RSVP() const; /** Compares this with @p attendee for equality. @param attendee the attendee to compare. */ bool operator==(const Attendee &attendee) const; /** Compares this with @p attendee for inequality. @param attendee the attendee to compare. */ bool operator!=(const Attendee &attendee) const; /** Sets the delegate. @param delegate is a string containing a MAILTO URI of those delegated to attend the meeting. @see delegate(), setDelegator(). */ void setDelegate(const QString &delegate); /** Returns the delegate. @see setDelegate(). */ Q_REQUIRED_RESULT QString delegate() const; /** Sets the delegator. @param delegator is a string containing a MAILTO URI of those who have delegated their meeting attendance. @see delegator(), setDelegate(). */ void setDelegator(const QString &delegator); /** Returns the delegator. @see setDelegator(). */ Q_REQUIRED_RESULT QString delegator() const; /** Adds a custom property. If the property already exists it will be overwritten. @param xname is the name of the property. @param xvalue is its value. */ void setCustomProperty(const QByteArray &xname, const QString &xvalue); /** Returns a reference to the CustomProperties object */ Q_REQUIRED_RESULT CustomProperties &customProperties(); /** Returns a const reference to the CustomProperties object */ const CustomProperties &customProperties() const; /** Sets this attendee equal to @p attendee. @param attendee is the attendee to copy. */ Attendee &operator=(const Attendee &attendee); private: //@cond PRIVATE class Private; QSharedDataPointer d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &s, const KCalendarCore::Attendee &attendee); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &s, KCalendarCore::Attendee &attendee); }; /** Serializes an Attendee object into a data stream. @param stream is a QDataStream. @param attendee is a pointer to a Attendee object to be serialized. */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::Attendee &attendee); /** Initializes an Attendee object from a data stream. @param stream is a QDataStream. @param attendee is a pointer to a Attendee object to be initialized. */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::Attendee &attendee); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Attendee, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Attendee) //@endcond #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/calendar.cpp000066400000000000000000001164401473346337000236210ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2000-2004 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2006 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Calendar class. @brief Represents the main calendar class. @author Preston Brown \ @author Cornelius Schumacher \ @author Reinhold Kainhofer \ @author David Jarvie \ */ #include "calendar.h" #include "calendar_p.h" #include "calfilter.h" #include "icaltimezones_p.h" #include "sorting.h" #include "visitor.h" //extern "C" { //#include //} #include #include // for std::remove() using namespace KCalendarCore; /** Make a QHash::value that returns a QVector. */ template QVector values(const QMultiHash &c) { QVector v; v.reserve(c.size()); for (typename QMultiHash::const_iterator it = c.begin(), end = c.end(); it != end; ++it) { v.push_back(it.value()); } return v; } template QVector values(const QMultiHash &c, const K &x) { QVector v; typename QMultiHash::const_iterator it = c.find(x); while (it != c.end() && it.key() == x) { v.push_back(it.value()); ++it; } return v; } /** Template for a class that implements a visitor for adding an Incidence to a resource supporting addEvent(), addTodo() and addJournal() calls. */ template class AddVisitor : public Visitor { public: AddVisitor(T *r) : mResource(r) { } bool visit(const Event::Ptr &e) override { return mResource->addEvent(e); } bool visit(const Todo::Ptr &t) override { return mResource->addTodo(t); } bool visit(const Journal::Ptr &j) override { return mResource->addJournal(j); } bool visit(const FreeBusy::Ptr &) override { return false; } private: T *mResource; }; /** Template for a class that implements a visitor for deleting an Incidence from a resource supporting deleteEvent(), deleteTodo() and deleteJournal() calls. */ template class DeleteVisitor : public Visitor { public: DeleteVisitor(T *r) : mResource(r) { } bool visit(const Event::Ptr &e) override { mResource->deleteEvent(e); return true; } bool visit(const Todo::Ptr &t) override { mResource->deleteTodo(t); return true; } bool visit(const Journal::Ptr &j) override { mResource->deleteJournal(j); return true; } bool visit(const FreeBusy::Ptr &) override { return false; } private: T *mResource; }; //@endcond Calendar::Calendar(const QTimeZone &timeZone) : d(new KCalendarCore::Calendar::Private) { if (timeZone.isValid()) { d->mTimeZone = timeZone; } else { d->mTimeZone = QTimeZone::systemTimeZone(); } } Calendar::Calendar(const QByteArray &timeZoneId) : d(new KCalendarCore::Calendar::Private) { setTimeZoneId(timeZoneId); } Calendar::~Calendar() { delete d; } Person Calendar::owner() const { return d->mOwner; } void Calendar::setOwner(const Person &owner) { if (owner != d->mOwner) { d->mOwner = owner; setModified(true); Q_EMIT ownerChanged(); } } void Calendar::setTimeZone(const QTimeZone &timeZone) { if (timeZone.isValid()) { d->mTimeZone = timeZone; } else { d->mTimeZone = QTimeZone::systemTimeZone(); } doSetTimeZone(d->mTimeZone); } QTimeZone Calendar::timeZone() const { return d->mTimeZone; } void Calendar::setTimeZoneId(const QByteArray &timeZoneId) { d->mTimeZone = d->timeZoneIdSpec(timeZoneId); doSetTimeZone(d->mTimeZone); // NOLINT false clang-analyzer-optin.cplusplus.VirtualCall } //@cond PRIVATE QTimeZone Calendar::Private::timeZoneIdSpec(const QByteArray &timeZoneId) { if (timeZoneId == QByteArrayLiteral("UTC")) { return QTimeZone::utc(); } auto tz = QTimeZone(timeZoneId); if (tz.isValid()) { return tz; } return QTimeZone::systemTimeZone(); } //@endcond QByteArray Calendar::timeZoneId() const { return d->mTimeZone.id(); } void Calendar::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { setTimeZone(newZone); int i, end; Event::List ev = events(); for (i = 0, end = ev.count(); i < end; ++i) { ev[i]->shiftTimes(oldZone, newZone); } Todo::List to = todos(); for (i = 0, end = to.count(); i < end; ++i) { to[i]->shiftTimes(oldZone, newZone); } Journal::List jo = journals(); for (i = 0, end = jo.count(); i < end; ++i) { jo[i]->shiftTimes(oldZone, newZone); } } void Calendar::setFilter(CalFilter *filter) { if (filter) { d->mFilter = filter; } else { d->mFilter = d->mDefaultFilter; } Q_EMIT filterChanged(); } CalFilter *Calendar::filter() const { return d->mFilter; } QStringList Calendar::categories() const { Incidence::List rawInc(rawIncidences()); QStringList cats, thisCats; // @TODO: For now just iterate over all incidences. In the future, // the list of categories should be built when reading the file. for (Incidence::List::ConstIterator i = rawInc.constBegin(); i != rawInc.constEnd(); ++i) { thisCats = (*i)->categories(); for (QStringList::ConstIterator si = thisCats.constBegin(); si != thisCats.constEnd(); ++si) { if (!cats.contains(*si)) { cats.append(*si); } } } return cats; } Incidence::List Calendar::incidences(const QDate &date) const { return mergeIncidenceList(events(date), todos(date), journals(date)); } Incidence::List Calendar::incidences() const { return mergeIncidenceList(events(), todos(), journals()); } Incidence::List Calendar::rawIncidences() const { return mergeIncidenceList(rawEvents(), rawTodos(), rawJournals()); } Incidence::List Calendar::instances(const Incidence::Ptr &incidence) const { if (incidence) { Event::List elist; Todo::List tlist; Journal::List jlist; if (incidence->type() == Incidence::TypeEvent) { elist = eventInstances(incidence); } else if (incidence->type() == Incidence::TypeTodo) { tlist = todoInstances(incidence); } else if (incidence->type() == Incidence::TypeJournal) { jlist = journalInstances(incidence); } return mergeIncidenceList(elist, tlist, jlist); } else { return Incidence::List(); } } Incidence::List Calendar::duplicates(const Incidence::Ptr &incidence) { if (incidence) { Incidence::List list; Incidence::List vals = values(d->mNotebookIncidences); Incidence::List::const_iterator it; for (it = vals.constBegin(); it != vals.constEnd(); ++it) { if (((incidence->dtStart() == (*it)->dtStart()) || (!incidence->dtStart().isValid() && !(*it)->dtStart().isValid())) && (incidence->summary() == (*it)->summary())) { list.append(*it); } } return list; } else { return Incidence::List(); } } bool Calendar::addNotebook(const QString ¬ebook, bool isVisible) { if (d->mNotebooks.contains(notebook)) { return false; } else { d->mNotebooks.insert(notebook, isVisible); return true; } } bool Calendar::updateNotebook(const QString ¬ebook, bool isVisible) { if (!d->mNotebooks.contains(notebook)) { return false; } else { d->mNotebooks.insert(notebook, isVisible); const QList incidences = d->mNotebookIncidences.values(notebook); for (Incidence::Ptr incidence : incidences) { QHash::Iterator it = d->mIncidenceVisibility.find(incidence); if (it != d->mIncidenceVisibility.end()) *it = isVisible; } return true; } } bool Calendar::deleteNotebook(const QString ¬ebook) { if (!d->mNotebooks.contains(notebook)) { return false; } else { return d->mNotebooks.remove(notebook); } } bool Calendar::setDefaultNotebook(const QString ¬ebook) { if (!d->mNotebooks.contains(notebook)) { return false; } else { d->mDefaultNotebook = notebook; return true; } } QString Calendar::defaultNotebook() const { return d->mDefaultNotebook; } bool Calendar::hasValidNotebook(const QString ¬ebook) const { return d->mNotebooks.contains(notebook); } bool Calendar::isVisible(const Incidence::Ptr &incidence) const { if (d->mIncidenceVisibility.contains(incidence)) { return d->mIncidenceVisibility[incidence]; } const QString nuid = notebook(incidence); bool rv; if (d->mNotebooks.contains(nuid)) { rv = d->mNotebooks.value(nuid); } else { // NOTE returns true also for nonexisting notebooks for compatibility rv = true; } d->mIncidenceVisibility[incidence] = rv; return rv; } bool Calendar::isVisible(const QString ¬ebook) const { QHash::ConstIterator it = d->mNotebooks.constFind(notebook); return (it != d->mNotebooks.constEnd()) ? *it : true; } void Calendar::clearNotebookAssociations() { d->mNotebookIncidences.clear(); d->mUidToNotebook.clear(); d->mIncidenceVisibility.clear(); } bool Calendar::setNotebook(const Incidence::Ptr &inc, const QString ¬ebook) { if (!inc) { return false; } if (!notebook.isEmpty() && !incidence(inc->uid(), inc->recurrenceId())) { qWarning() << "cannot set notebook until incidence has been added"; return false; } if (d->mUidToNotebook.contains(inc->uid())) { QString old = d->mUidToNotebook.value(inc->uid()); if (!old.isEmpty() && notebook != old) { if (inc->hasRecurrenceId()) { qWarning() << "cannot set notebook for child incidences"; return false; } // Move all possible children also. Incidence::List list = instances(inc); Incidence::List::Iterator it; for (it = list.begin(); it != list.end(); ++it) { d->mNotebookIncidences.remove(old, *it); d->mNotebookIncidences.insert(notebook, *it); } notifyIncidenceChanged(inc); // for removing from old notebook // don not remove from mUidToNotebook to keep deleted incidences d->mNotebookIncidences.remove(old, inc); } } if (!notebook.isEmpty()) { d->mUidToNotebook.insert(inc->uid(), notebook); d->mNotebookIncidences.insert(notebook, inc); qWarning() << "setting notebook" << notebook << "for" << inc->uid(); notifyIncidenceChanged(inc); // for inserting into new notebook } return true; } QString Calendar::notebook(const Incidence::Ptr &incidence) const { if (incidence) { return d->mUidToNotebook.value(incidence->uid()); } else { return QString(); } } QString Calendar::notebook(const QString &uid) const { return d->mUidToNotebook.value(uid); } QStringList Calendar::notebooks() const { return d->mNotebookIncidences.uniqueKeys(); } Incidence::List Calendar::incidences(const QString ¬ebook) const { if (notebook.isEmpty()) { return values(d->mNotebookIncidences); } else { return values(d->mNotebookIncidences, notebook); } } /** static */ Event::List Calendar::sortEvents(const Event::List &eventList, EventSortField sortField, SortDirection sortDirection) { if (eventList.isEmpty()) { return Event::List(); } Event::List eventListSorted; // Notice we alphabetically presort Summaries first. // We do this so comparison "ties" stay in a nice order. eventListSorted = eventList; switch (sortField) { case EventSortUnsorted: break; case EventSortStartDate: if (sortDirection == SortDirectionAscending) { std::sort(eventListSorted.begin(), eventListSorted.end(), Events::startDateLessThan); } else { std::sort(eventListSorted.begin(), eventListSorted.end(), Events::startDateMoreThan); } break; case EventSortEndDate: if (sortDirection == SortDirectionAscending) { std::sort(eventListSorted.begin(), eventListSorted.end(), Events::endDateLessThan); } else { std::sort(eventListSorted.begin(), eventListSorted.end(), Events::endDateMoreThan); } break; case EventSortSummary: if (sortDirection == SortDirectionAscending) { std::sort(eventListSorted.begin(), eventListSorted.end(), Events::summaryLessThan); } else { std::sort(eventListSorted.begin(), eventListSorted.end(), Events::summaryMoreThan); } break; } return eventListSorted; } Event::List Calendar::events(const QDate &date, const QTimeZone &timeZone, EventSortField sortField, SortDirection sortDirection) const { Event::List el = rawEventsForDate(date, timeZone, sortField, sortDirection); d->mFilter->apply(&el); return el; } Event::List Calendar::events(const QDateTime &dt) const { Event::List el = rawEventsForDate(dt); d->mFilter->apply(&el); return el; } Event::List Calendar::events(const QDate &start, const QDate &end, const QTimeZone &timeZone, bool inclusive) const { Event::List el = rawEvents(start, end, timeZone, inclusive); d->mFilter->apply(&el); return el; } Event::List Calendar::events(EventSortField sortField, SortDirection sortDirection) const { Event::List el = rawEvents(sortField, sortDirection); d->mFilter->apply(&el); return el; } bool Calendar::addIncidence(const Incidence::Ptr &incidence) { if (!incidence) { return false; } AddVisitor v(this); return incidence->accept(v, incidence); } bool Calendar::deleteIncidence(const Incidence::Ptr &incidence) { if (!incidence) { return false; } if (beginChange(incidence)) { DeleteVisitor v(this); const bool result = incidence->accept(v, incidence); endChange(incidence); return result; } else { return false; } } Incidence::Ptr Calendar::createException(const Incidence::Ptr &incidence, const QDateTime &recurrenceId, bool thisAndFuture) { Q_ASSERT(recurrenceId.isValid()); if (!incidence || !incidence->recurs() || !recurrenceId.isValid()) { return Incidence::Ptr(); } Incidence::Ptr newInc(incidence->clone()); newInc->setCreated(QDateTime::currentDateTimeUtc()); newInc->setRevision(0); // Recurring exceptions are not support for now newInc->clearRecurrence(); newInc->setRecurrenceId(recurrenceId); newInc->setThisAndFuture(thisAndFuture); newInc->setDtStart(recurrenceId); // Calculate and set the new end of the incidence QDateTime end = incidence->dateTime(IncidenceBase::RoleEnd); if (end.isValid()) { if (incidence->allDay()) { qint64 offset = incidence->dtStart().daysTo(recurrenceId); end = end.addDays(offset); } else { qint64 offset = incidence->dtStart().secsTo(recurrenceId); end = end.addSecs(offset); } newInc->setDateTime(end, IncidenceBase::RoleEnd); } return newInc; } Incidence::Ptr Calendar::incidence(const QString &uid, const QDateTime &recurrenceId) const { Incidence::Ptr i = event(uid, recurrenceId); if (i) { return i; } i = todo(uid, recurrenceId); if (i) { return i; } i = journal(uid, recurrenceId); return i; } Incidence::Ptr Calendar::deleted(const QString &uid, const QDateTime &recurrenceId) const { Incidence::Ptr i = deletedEvent(uid, recurrenceId); if (i) { return i; } i = deletedTodo(uid, recurrenceId); if (i) { return i; } i = deletedJournal(uid, recurrenceId); return i; } Incidence::List Calendar::incidencesFromSchedulingID(const QString &sid) const { Incidence::List result; const Incidence::List incidences = rawIncidences(); Incidence::List::const_iterator it = incidences.begin(); for (; it != incidences.end(); ++it) { if ((*it)->schedulingID() == sid) { result.append(*it); } } return result; } Incidence::Ptr Calendar::incidenceFromSchedulingID(const QString &uid) const { const Incidence::List incidences = rawIncidences(); Incidence::List::const_iterator it = incidences.begin(); for (; it != incidences.end(); ++it) { if ((*it)->schedulingID() == uid) { // Touchdown, and the crowd goes wild return *it; } } // Not found return Incidence::Ptr(); } /** static */ Todo::List Calendar::sortTodos(const Todo::List &todoList, TodoSortField sortField, SortDirection sortDirection) { if (todoList.isEmpty()) { return Todo::List(); } Todo::List todoListSorted; // Notice we alphabetically presort Summaries first. // We do this so comparison "ties" stay in a nice order. // Note that To-dos may not have Start DateTimes nor due DateTimes. todoListSorted = todoList; switch (sortField) { case TodoSortUnsorted: break; case TodoSortStartDate: if (sortDirection == SortDirectionAscending) { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::startDateLessThan); } else { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::startDateMoreThan); } break; case TodoSortDueDate: if (sortDirection == SortDirectionAscending) { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::dueDateLessThan); } else { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::dueDateMoreThan); } break; case TodoSortPriority: if (sortDirection == SortDirectionAscending) { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::priorityLessThan); } else { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::priorityMoreThan); } break; case TodoSortPercentComplete: if (sortDirection == SortDirectionAscending) { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::percentLessThan); } else { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::percentMoreThan); } break; case TodoSortSummary: if (sortDirection == SortDirectionAscending) { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::summaryLessThan); } else { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::summaryMoreThan); } break; case TodoSortCreated: if (sortDirection == SortDirectionAscending) { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::createdLessThan); } else { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::createdMoreThan); } break; case TodoSortCategories: if (sortDirection == SortDirectionAscending) { std::sort(todoListSorted.begin(), todoListSorted.end(), Incidences::categoriesLessThan); } else { std::sort(todoListSorted.begin(), todoListSorted.end(), Incidences::categoriesMoreThan); } break; } return todoListSorted; } Todo::List Calendar::todos(TodoSortField sortField, SortDirection sortDirection) const { Todo::List tl = rawTodos(sortField, sortDirection); d->mFilter->apply(&tl); return tl; } Todo::List Calendar::todos(const QDate &date) const { Todo::List el = rawTodosForDate(date); d->mFilter->apply(&el); return el; } Todo::List Calendar::todos(const QDate &start, const QDate &end, const QTimeZone &timeZone, bool inclusive) const { Todo::List tl = rawTodos(start, end, timeZone, inclusive); d->mFilter->apply(&tl); return tl; } /** static */ Journal::List Calendar::sortJournals(const Journal::List &journalList, JournalSortField sortField, SortDirection sortDirection) { if (journalList.isEmpty()) { return Journal::List(); } Journal::List journalListSorted = journalList; switch (sortField) { case JournalSortUnsorted: break; case JournalSortDate: if (sortDirection == SortDirectionAscending) { std::sort(journalListSorted.begin(), journalListSorted.end(), Journals::dateLessThan); } else { std::sort(journalListSorted.begin(), journalListSorted.end(), Journals::dateMoreThan); } break; case JournalSortSummary: if (sortDirection == SortDirectionAscending) { std::sort(journalListSorted.begin(), journalListSorted.end(), Journals::summaryLessThan); } else { std::sort(journalListSorted.begin(), journalListSorted.end(), Journals::summaryMoreThan); } break; } return journalListSorted; } Journal::List Calendar::journals(JournalSortField sortField, SortDirection sortDirection) const { Journal::List jl = rawJournals(sortField, sortDirection); d->mFilter->apply(&jl); return jl; } Journal::List Calendar::journals(const QDate &date) const { Journal::List el = rawJournalsForDate(date); d->mFilter->apply(&el); return el; } // When this is called, the to-dos have already been added to the calendar. // This method is only about linking related to-dos. void Calendar::setupRelations(const Incidence::Ptr &forincidence) { if (!forincidence) { return; } const QString uid = forincidence->uid(); // First, go over the list of orphans and see if this is their parent Incidence::List l = values(d->mOrphans, uid); d->mOrphans.remove(uid); if (!l.isEmpty()) { Incidence::List &relations = d->mIncidenceRelations[uid]; relations.reserve(relations.count() + l.count()); for (int i = 0, end = l.count(); i < end; ++i) { relations.append(l[i]); d->mOrphanUids.remove(l[i]->uid()); } } // Now see about this incidences parent if (forincidence->relatedTo().isEmpty() && !forincidence->relatedTo().isEmpty()) { // Incidence has a uid it is related to but is not registered to it yet. // Try to find it Incidence::Ptr parent = incidence(forincidence->relatedTo()); if (parent) { // Found it // look for hierarchy loops if (isAncestorOf(forincidence, parent)) { forincidence->setRelatedTo(QString()); qWarning() << "hierarchy loop between " << forincidence->uid() << " and " << parent->uid(); } else { d->mIncidenceRelations[parent->uid()].append(forincidence); } } else { // Not found, put this in the mOrphans list // Note that the mOrphans dict might contain multiple entries with the // same key! which are multiple children that wait for the parent // incidence to be inserted. d->mOrphans.insert(forincidence->relatedTo(), forincidence); d->mOrphanUids.insert(forincidence->uid(), forincidence); } } } // If a to-do with sub-to-dos is deleted, move it's sub-to-dos to the orphan list void Calendar::removeRelations(const Incidence::Ptr &incidence) { if (!incidence) { qWarning() << "Warning: incidence is 0"; return; } const QString uid = incidence->uid(); for (const Incidence::Ptr &i : qAsConst(d->mIncidenceRelations[uid])) { if (!d->mOrphanUids.contains(i->uid())) { d->mOrphans.insert(uid, i); d->mOrphanUids.insert(i->uid(), i); i->setRelatedTo(uid); } } const QString parentUid = incidence->relatedTo(); // If this incidence is related to something else, tell that about it if (!parentUid.isEmpty()) { Incidence::List &relations = d->mIncidenceRelations[parentUid]; relations.erase(std::remove(relations.begin(), relations.end(), incidence), relations.end()); } // Remove this one from the orphans list if (d->mOrphanUids.remove(uid)) { // This incidence is located in the orphans list - it should be removed // Since the mOrphans dict might contain the same key (with different // child incidence pointers!) multiple times, take care that we remove // the correct one. So we need to remove all items with the given // parent UID, and re-add those that are not for this item. Also, there // might be other entries with different UID that point to this // incidence (this might happen when the relatedTo of the item is // changed before its parent is inserted. This might happen with // groupware servers....). Remove them, too QStringList relatedToUids; // First, create a list of all keys in the mOrphans list which point // to the removed item relatedToUids << incidence->relatedTo(); for (QMultiHash::Iterator it = d->mOrphans.begin(); it != d->mOrphans.end(); ++it) { if (it.value()->uid() == uid) { relatedToUids << it.key(); } } // now go through all uids that have one entry that point to the incidence for (QStringList::const_iterator uidit = relatedToUids.constBegin(); uidit != relatedToUids.constEnd(); ++uidit) { Incidence::List tempList; // Remove all to get access to the remaining entries const Incidence::List l = values(d->mOrphans, *uidit); d->mOrphans.remove(*uidit); for (const Incidence::Ptr &i : l) { if (i != incidence) { tempList.append(i); } } // Re-add those that point to a different orphan incidence for (Incidence::List::Iterator incit = tempList.begin(); incit != tempList.end(); ++incit) { d->mOrphans.insert(*uidit, *incit); } } } // Make sure the deleted incidence doesn't relate to a non-deleted incidence, // since that would cause trouble in MemoryCalendar::close(), as the deleted // incidences are destroyed after the non-deleted incidences. The destructor // of the deleted incidences would then try to access the already destroyed // non-deleted incidence, which would segfault. // // So in short: Make sure dead incidences don't point to alive incidences // via the relation. // // This crash is tested in MemoryCalendarTest::testRelationsCrash(). // incidence->setRelatedTo( Incidence::Ptr() ); } bool Calendar::isAncestorOf(const Incidence::Ptr &ancestor, const Incidence::Ptr &incidence) const { if (!incidence || incidence->relatedTo().isEmpty()) { return false; } else if (incidence->relatedTo() == ancestor->uid()) { return true; } else { return isAncestorOf(ancestor, this->incidence(incidence->relatedTo())); } } Incidence::List Calendar::relations(const QString &uid) const { return d->mIncidenceRelations[uid]; } Calendar::CalendarObserver::~CalendarObserver() { } void Calendar::CalendarObserver::calendarModified(bool modified, Calendar *calendar) { Q_UNUSED(modified); Q_UNUSED(calendar); } void Calendar::CalendarObserver::calendarIncidenceAdded(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); } void Calendar::CalendarObserver::calendarIncidenceChanged(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); } void Calendar::CalendarObserver::calendarIncidenceAboutToBeDeleted(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); } void Calendar::CalendarObserver::calendarIncidenceDeleted(const Incidence::Ptr &incidence, const Calendar *calendar) { Q_UNUSED(incidence); Q_UNUSED(calendar); } void Calendar::CalendarObserver::calendarIncidenceAdditionCanceled(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); } void Calendar::registerObserver(CalendarObserver *observer) { if (!observer) { return; } if (!d->mObservers.contains(observer)) { d->mObservers.append(observer); } else { d->mNewObserver = true; } } void Calendar::unregisterObserver(CalendarObserver *observer) { if (!observer) { return; } else { d->mObservers.removeAll(observer); } } bool Calendar::isSaving() const { return false; } void Calendar::setModified(bool modified) { if (modified != d->mModified || d->mNewObserver) { d->mNewObserver = false; for (CalendarObserver *observer : qAsConst(d->mObservers)) { observer->calendarModified(modified, this); } d->mModified = modified; } } bool Calendar::isModified() const { return d->mModified; } bool Calendar::save() { return true; } bool Calendar::reload() { return true; } void Calendar::incidenceUpdated(const QString &uid, const QDateTime &recurrenceId) { Incidence::Ptr inc = incidence(uid, recurrenceId); if (!inc) { return; } inc->setLastModified(QDateTime::currentDateTimeUtc()); // we should probably update the revision number here, // or internally in the Event itself when certain things change. // need to verify with ical documentation. notifyIncidenceChanged(inc); setModified(true); } void Calendar::doSetTimeZone(const QTimeZone &timeZone) { Q_UNUSED(timeZone); } void Calendar::notifyIncidenceAdded(const Incidence::Ptr &incidence) { if (!incidence) { return; } if (!d->mObserversEnabled) { return; } for (CalendarObserver *observer : qAsConst(d->mObservers)) { observer->calendarIncidenceAdded(incidence); } for (auto role : {IncidenceBase::RoleStartTimeZone, IncidenceBase::RoleEndTimeZone}) { const auto dt = incidence->dateTime(role); if (dt.isValid() && dt.timeZone() != QTimeZone::utc()) { if (!d->mTimeZones.contains(dt.timeZone())) { d->mTimeZones.push_back(dt.timeZone()); } } } } void Calendar::notifyIncidenceChanged(const Incidence::Ptr &incidence) { if (!incidence) { return; } if (!d->mObserversEnabled) { return; } for (CalendarObserver *observer : qAsConst(d->mObservers)) { observer->calendarIncidenceChanged(incidence); } } void Calendar::notifyIncidenceAboutToBeDeleted(const Incidence::Ptr &incidence) { if (!incidence) { return; } if (!d->mObserversEnabled) { return; } for (CalendarObserver *observer : qAsConst(d->mObservers)) { observer->calendarIncidenceAboutToBeDeleted(incidence); } } void Calendar::notifyIncidenceDeleted(const Incidence::Ptr &incidence) { if (!incidence) { return; } if (!d->mObserversEnabled) { return; } for (CalendarObserver *observer : qAsConst(d->mObservers)) { observer->calendarIncidenceDeleted(incidence, this); } } void Calendar::notifyIncidenceAdditionCanceled(const Incidence::Ptr &incidence) { if (!incidence) { return; } if (!d->mObserversEnabled) { return; } for (CalendarObserver *observer : qAsConst(d->mObservers)) { observer->calendarIncidenceAdditionCanceled(incidence); } } void Calendar::customPropertyUpdated() { setModified(true); } void Calendar::setProductId(const QString &id) { d->mProductId = id; } QString Calendar::productId() const { return d->mProductId; } /** static */ Incidence::List Calendar::mergeIncidenceList(const Event::List &events, const Todo::List &todos, const Journal::List &journals) { Incidence::List incidences; incidences.reserve(events.count() + todos.count() + journals.count()); int i, end; for (i = 0, end = events.count(); i < end; ++i) { incidences.append(events[i]); } for (i = 0, end = todos.count(); i < end; ++i) { incidences.append(todos[i]); } for (i = 0, end = journals.count(); i < end; ++i) { incidences.append(journals[i]); } return incidences; } bool Calendar::beginChange(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); return true; } bool Calendar::endChange(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); return true; } void Calendar::setObserversEnabled(bool enabled) { d->mObserversEnabled = enabled; } void Calendar::appendAlarms(Alarm::List &alarms, const Incidence::Ptr &incidence, const QDateTime &from, const QDateTime &to) const { QDateTime preTime = from.addSecs(-1); Alarm::List alarmlist = incidence->alarms(); for (int i = 0, iend = alarmlist.count(); i < iend; ++i) { if (alarmlist[i]->enabled()) { QDateTime dt = alarmlist[i]->nextRepetition(preTime); if (dt.isValid() && dt <= to) { qWarning() << incidence->summary() << "':" << dt.toString(); alarms.append(alarmlist[i]); } } } } void Calendar::appendRecurringAlarms(Alarm::List &alarms, const Incidence::Ptr &incidence, const QDateTime &from, const QDateTime &to) const { QDateTime dt; bool endOffsetValid = false; Duration endOffset(0); Duration period(from, to); Alarm::List alarmlist = incidence->alarms(); for (int i = 0, iend = alarmlist.count(); i < iend; ++i) { Alarm::Ptr a = alarmlist[i]; if (a->enabled()) { if (a->hasTime()) { // The alarm time is defined as an absolute date/time dt = a->nextRepetition(from.addSecs(-1)); if (!dt.isValid() || dt > to) { continue; } } else { // Alarm time is defined by an offset from the event start or end time. // Find the offset from the event start time, which is also used as the // offset from the recurrence time. Duration offset(0); if (a->hasStartOffset()) { offset = a->startOffset(); } else if (a->hasEndOffset()) { offset = a->endOffset(); if (!endOffsetValid) { endOffset = Duration(incidence->dtStart(), incidence->dateTime(Incidence::RoleAlarmEndOffset)); endOffsetValid = true; } } // Find the incidence's earliest alarm QDateTime alarmStart = offset.end(a->hasEndOffset() ? incidence->dateTime(Incidence::RoleAlarmEndOffset) : incidence->dtStart()); if (alarmStart > to) { continue; } QDateTime baseStart = incidence->dtStart(); if (from > alarmStart) { alarmStart = from; // don't look earlier than the earliest alarm baseStart = (-offset).end((-endOffset).end(alarmStart)); } // Adjust the 'alarmStart' date/time and find the next recurrence at or after it. // Treat the two offsets separately in case one is daily and the other not. dt = incidence->recurrence()->getNextDateTime(baseStart.addSecs(-1)); if (!dt.isValid() || (dt = endOffset.end(offset.end(dt))) > to) { // adjust 'dt' to get the alarm time // The next recurrence is too late. if (!a->repeatCount()) { continue; } // The alarm has repetitions, so check whether repetitions of previous // recurrences fall within the time period. bool found = false; Duration alarmDuration = a->duration(); for (QDateTime base = baseStart; (dt = incidence->recurrence()->getPreviousDateTime(base)).isValid(); base = dt) { if (a->duration().end(dt) < base) { break; // this recurrence's last repetition is too early, so give up } // The last repetition of this recurrence is at or after 'alarmStart' time. // Check if a repetition occurs between 'alarmStart' and 'to'. int snooze = a->snoozeTime().value(); // in seconds or days if (a->snoozeTime().isDaily()) { Duration toFromDuration(dt, base); int toFrom = toFromDuration.asDays(); if (a->snoozeTime().end(from) <= to || (toFromDuration.isDaily() && toFrom % snooze == 0) || (toFrom / snooze + 1) * snooze <= toFrom + period.asDays()) { found = true; #ifndef NDEBUG // for debug output dt = offset.end(dt).addDays(((toFrom - 1) / snooze + 1) * snooze); #endif break; } } else { int toFrom = dt.secsTo(base); if (period.asSeconds() >= snooze || toFrom % snooze == 0 || (toFrom / snooze + 1) * snooze <= toFrom + period.asSeconds()) { found = true; #ifndef NDEBUG // for debug output dt = offset.end(dt).addSecs(((toFrom - 1) / snooze + 1) * snooze); #endif break; } } } if (!found) { continue; } } } qWarning() << incidence->summary() << "':" << dt.toString(); alarms.append(a); } } } void Calendar::startBatchAdding() { d->batchAddingInProgress = true; } void Calendar::endBatchAdding() { d->batchAddingInProgress = false; } bool Calendar::batchAdding() const { return d->batchAddingInProgress; } void Calendar::setDeletionTracking(bool enable) { d->mDeletionTracking = enable; } bool Calendar::deletionTracking() const { return d->mDeletionTracking; } Alarm::List Calendar::alarmsTo(const QDateTime &to) const { return alarms(QDateTime(QDate(1900, 1, 1), QTime(0, 0, 0)), to); } void Calendar::virtual_hook(int id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } QString Calendar::id() const { return d->mId; } void Calendar::setId(const QString &id) { if (d->mId != id) { d->mId = id; Q_EMIT idChanged(); } } QString Calendar::name() const { return d->mName; } void Calendar::setName(const QString &name) { if (d->mName != name) { d->mName = name; Q_EMIT nameChanged(); } } QIcon Calendar::icon() const { return d->mIcon; } void Calendar::setIcon(const QIcon &icon) { d->mIcon = icon; Q_EMIT iconChanged(); } AccessMode Calendar::accessMode() const { return d->mAccessMode; } void Calendar::setAccessMode(const AccessMode mode) { if (d->mAccessMode != mode) { d->mAccessMode = mode; Q_EMIT accessModeChanged(); } } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/calendar.h000066400000000000000000001372161473346337000232720ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText 2001, 2003, 2004 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2006 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Calendar class. @author Preston Brown \ @author Cornelius Schumacher \ @author Reinhold Kainhofer \ @author David Jarvie \ */ /* TODO: KDE5: This API needs serious cleaning up: - Most (all) methods aren't async ( deleteIncidence(), addIncidence(), load(), save(), ... ) so it's not very easy to make a derived class that loads from akonadi. - It has too many methods. Why do we need fooEvent()/fooJournal()/fooTodo() when fooIncidence() should be enough. */ #ifndef KCALCORE_CALENDAR_H #define KCALCORE_CALENDAR_H #include "customproperties.h" #include "event.h" #include "incidence.h" #include "journal.h" #include "todo.h" #include #include #include #include /** Namespace for all KCalendarCore types. */ namespace KCalendarCore { class CalFilter; class Person; class ICalFormat; /** Calendar Incidence sort directions. */ enum SortDirection { SortDirectionAscending, /**< Sort in ascending order (first to last) */ SortDirectionDescending, /**< Sort in descending order (last to first) */ }; /** Calendar Event sort keys. */ enum EventSortField { EventSortUnsorted, /**< Do not sort Events */ EventSortStartDate, /**< Sort Events chronologically, by start date */ EventSortEndDate, /**< Sort Events chronologically, by end date */ EventSortSummary, /**< Sort Events alphabetically, by summary */ }; /** Calendar Todo sort keys. */ enum TodoSortField { TodoSortUnsorted, /**< Do not sort Todos */ TodoSortStartDate, /**< Sort Todos chronologically, by start date */ TodoSortDueDate, /**< Sort Todos chronologically, by due date */ TodoSortPriority, /**< Sort Todos by priority */ TodoSortPercentComplete, /**< Sort Todos by percentage completed */ TodoSortSummary, /**< Sort Todos alphabetically, by summary */ TodoSortCreated, /**< Sort Todos chronologically, by creation date */ TodoSortCategories, /**< Sort Todos by categories (tags) @since 5.83 */ }; /** Calendar Journal sort keys. */ enum JournalSortField { JournalSortUnsorted, /**< Do not sort Journals */ JournalSortDate, /**< Sort Journals chronologically by date */ JournalSortSummary, /**< Sort Journals alphabetically, by summary */ }; /** The calendar's access mode, i.e. whether it can be written to or is read only. @since 5.85 */ enum AccessMode { ReadOnly, ReadWrite, }; /** @brief Represents the main calendar class. A calendar contains information like incidences (events, to-dos, journals), alarms, time zones, and other useful information. This is an abstract base class defining the interface to a calendar. It is implemented by subclasses like MemoryCalendar, which use different methods to store and access the data. Ownership of Incidences: Incidence ownership is handled by the following policy: as soon as an incidence (or any other subclass of IncidenceBase) is added to the Calendar by an add...() method it is owned by the Calendar object. The Calendar takes care of deleting the incidence using the delete...() methods. All Incidences returned by the query functions are returned as pointers so that changes to the returned Incidences are immediately visible in the Calendar. Do Not attempt to 'delete' any Incidence object you get from Calendar -- use the delete...() methods. */ class Q_CORE_EXPORT Calendar : public QObject , public CustomProperties , public IncidenceBase::IncidenceObserver { Q_OBJECT Q_PROPERTY(QString productId READ productId WRITE setProductId) // clazy:exclude=qproperty-without-notify Q_PROPERTY(KCalendarCore::Person owner READ owner WRITE setOwner NOTIFY ownerChanged) Q_PROPERTY(QString id READ id WRITE setId NOTIFY idChanged) Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) Q_PROPERTY(QIcon icon READ icon WRITE setIcon NOTIFY iconChanged) Q_PROPERTY(AccessMode accessMode READ accessMode WRITE setAccessMode NOTIFY accessModeChanged) public: /** A shared pointer to a Calendar */ typedef QSharedPointer Ptr; /** Constructs a calendar with a specified time zone @p timeZone. The time zone is used as the default for creating or modifying incidences in the Calendar. The time zone does not alter existing incidences. @param timeZone time specification */ explicit Calendar(const QTimeZone &timeZone); /** Construct Calendar object using a time zone ID. The time zone ID is used as the default for creating or modifying incidences in the Calendar. The time zone does not alter existing incidences. @param timeZoneId is a string containing a time zone ID, which is assumed to be valid. If no time zone is found, the viewing time specification is set to local time zone. @e Example: "Europe/Berlin" */ explicit Calendar(const QByteArray &timeZoneId); /** Destroys the calendar. */ ~Calendar() override; /** Sets the calendar Product ID to @p id. @param id is a string containing the Product ID. @see productId() const */ void setProductId(const QString &id); /** Returns the calendar's Product ID. @see setProductId() */ Q_REQUIRED_RESULT QString productId() const; /** Sets the owner of the calendar to @p owner. @param owner is a Person object. Must be a non-null pointer. @see owner() */ void setOwner(const Person &owner); /** Returns the owner of the calendar. @return the owner Person object. @see setOwner() */ Q_REQUIRED_RESULT Person owner() const; /** Sets the default time specification zone used for creating or modifying incidences in the Calendar. @param timeZone The time zone */ void setTimeZone(const QTimeZone &timeZone); /** Get the time zone used for creating or modifying incidences in the Calendar. @return time specification */ Q_REQUIRED_RESULT QTimeZone timeZone() const; /** Sets the time zone ID used for creating or modifying incidences in the Calendar. This method has no effect on existing incidences. @param timeZoneId is a string containing a time zone ID, which is assumed to be valid. The time zone ID is used to set the time zone for viewing Incidence date/times. If no time zone is found, the viewing time specification is set to local time zone. @e Example: "Europe/Berlin" @see setTimeZone() */ void setTimeZoneId(const QByteArray &timeZoneId); /** Returns the time zone ID used for creating or modifying incidences in the calendar. @return the string containing the time zone ID, or empty string if the creation/modification time specification is not a time zone. */ Q_REQUIRED_RESULT QByteArray timeZoneId() const; /** Shifts the times of all incidences so that they appear at the same clock time as before but in a new time zone. The shift is done from a viewing time zone rather than from the actual incidence time zone. For example, shifting an incidence whose start time is 09:00 America/New York, using an old viewing time zone (@p oldSpec) of Europe/London, to a new time zone (@p newSpec) of Europe/Paris, will result in the time being shifted from 14:00 (which is the London time of the incidence start) to 14:00 Paris time. @param oldZone the time zone which provides the clock times @param newZone the new time zone */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone); /** Sets if the calendar has been modified. @param modified is true if the calendar has been modified since open or last save. @see isModified() */ void setModified(bool modified); /** Determine the calendar's modification status. 确定日历的修改状态。 @return true if the calendar has been modified since open or last save. @see setModified() */ Q_REQUIRED_RESULT bool isModified() const; /** * A unique identifier for this calendar. * @since 5.85 * @see setId() */ QString id() const; /** * set a unique identifier for this calendar. * 设置此日历的唯一标识符。 * @since 5.85 * @see id() */ void setId(const QString &id); /** * The user-visible name for this calendar. * 此日历的用户可见名称。 * @since 5.85 * @see setName() */ QString name() const; /** * Set the user-visible name for this calendar. * @since 5.85 * @see name() */ void setName(const QString &name); /** * This calendar's icon. * @since 5.85 * @see setIconName() */ QIcon icon() const; /** * Set this calendar's icon. * @since 5.85 * @see icon() */ void setIcon(const QIcon &icon); /** * This calendar's AccessMode, i.e. whether it is writable or read-only. * 此日历的访问模式,即它是可写的还是只读的。 * Defaults to ReadWrite. * @since 5.85 * @see setAccessMode() */ AccessMode accessMode() const; /** * Set this calendar's AccessMode, i.e. whether it is writable or read-only. * 设置此日历的访问模式,即它是可写的还是只读的。 * @since 5.85 * @see accessMode() */ void setAccessMode(const AccessMode mode); /** Clears out the current calendar, freeing all used memory etc. 清除当前日历,释放所有已用内存等。 */ virtual void close() = 0; /** Syncs changes in memory to persistent storage. 将内存中的更改同步到永久性存储。 @return true if the save was successful; false otherwise. Base implementation returns true. */ virtual bool save(); /** Loads the calendar contents from storage. This requires that the calendar has been previously loaded (initialized). @return true if the reload was successful; otherwise false. Base implementation returns true. */ virtual bool reload(); /** Determine if the calendar is currently being saved. @return true if the calendar is currently being saved; false otherwise. */ virtual bool isSaving() const; /** Returns a list of all categories used by Incidences in this Calendar. @return a QStringList containing all the categories. */ Q_REQUIRED_RESULT QStringList categories() const; // Incidence Specific Methods // /** Call this to tell the calendar that you're adding a batch of incidences. So it doesn't, for example, ask the destination for each incidence. @see endBatchAdding() */ virtual void startBatchAdding(); /** Tells the Calendar that you stopped adding a batch of incidences. @see startBatchAdding() */ virtual void endBatchAdding(); /** @return true if batch adding is in progress */ Q_REQUIRED_RESULT bool batchAdding() const; /** Inserts an Incidence into the calendar. 将事件插入日历。 @param incidence is a pointer to the Incidence to insert. @return true if the Incidence was successfully inserted; false otherwise. @see deleteIncidence() */ virtual bool addIncidence(const Incidence::Ptr &incidence); /** Removes an Incidence from the calendar. @param incidence is a pointer to the Incidence to remove. @return true if the Incidence was successfully removed; false otherwise. @see addIncidence() */ virtual bool deleteIncidence(const Incidence::Ptr &incidence); /** Returns a filtered list of all Incidences for this Calendar. 返回此日历的所有事件的筛选列表。 @return the list of all filtered Incidences. */ virtual Incidence::List incidences() const; /** Returns a filtered list of all Incidences which occur on the given date. 返回给定日期发生的所有事件的筛选列表。 @param date request filtered Incidence list for this QDate only. @return the list of filtered Incidences occurring on the specified date. */ virtual Incidence::List incidences(const QDate &date) const; /** Returns an unfiltered list of all Incidences for this Calendar. 返回此日历的所有事件的未筛选列表。 @return the list of all unfiltered Incidences. */ virtual Incidence::List rawIncidences() const; /** Returns an unfiltered list of all exceptions of this recurring incidence. 所有未筛选异常的重复发生率列表。 @param incidence incidence to check @return the list of all unfiltered exceptions. */ virtual Incidence::List instances(const Incidence::Ptr &incidence) const; // Notebook Specific Methods // /** Clears notebook associations from hash-tables for incidences. Called when in-memory content of the calendar is cleared. */ virtual void clearNotebookAssociations(); /** Associate notebook for an incidence. @param incidence incidence @param notebook notebook uid @return true if the operation was successful; false otherwise. */ virtual bool setNotebook(const Incidence::Ptr &incidence, const QString ¬ebook); /** Get incidence's notebook. @param incidence incidence @return notebook uid */ virtual QString notebook(const Incidence::Ptr &incidence) const; /** Get incidence's notebook. @param uid is a unique identifier string @return notebook uid */ virtual QString notebook(const QString &uid) const; /** List all uids of notebooks currently in the memory. @return list of uids of notebooks */ virtual QStringList notebooks() const; /** Check if calendar knows about the given notebook. This means that it will be saved by one of the attached storages. @param notebook notebook uid @return true if calendar has valid notebook */ Q_REQUIRED_RESULT bool hasValidNotebook(const QString ¬ebook) const; /** Add notebook information into calendar. Is usually called by storages only. @param notebook notebook uid @param isVisible notebook visibility @return true if operation succeeded @see isVisible() */ Q_REQUIRED_RESULT bool addNotebook(const QString ¬ebook, bool isVisible); /** Update notebook information in calendar. Is usually called by storages only. @param notebook notebook uid @param isVisible notebook visibility @return true if operation succeeded @see isVisible() */ Q_REQUIRED_RESULT bool updateNotebook(const QString ¬ebook, bool isVisible); /** Delete notebook information from calendar. Is usually called by storages only. @param notebook notebook uid @return true if operation succeeded @see isVisible() */ Q_REQUIRED_RESULT bool deleteNotebook(const QString ¬ebook); /** set DefaultNotebook information to calendar. @param notebook notebook uid @return true if operation was successful; false otherwise. */ Q_REQUIRED_RESULT bool setDefaultNotebook(const QString ¬ebook); /** Get uid of default notebook. @return notebook uid */ Q_REQUIRED_RESULT QString defaultNotebook() const; /** Check if incidence is visible. @param incidence is a pointer to the Incidence to check for visibility. @return true if incidence is visible, false otherwise */ Q_REQUIRED_RESULT bool isVisible(const Incidence::Ptr &incidence) const; /** Check if notebook is visible. @param notebook notebook uid. @return true if notebook is visible, false otherwise */ Q_REQUIRED_RESULT bool isVisible(const QString ¬ebook) const; /** List all notebook incidences in the memory. @param notebook is the notebook uid. @return a list of incidences for the notebook. */ virtual Incidence::List incidences(const QString ¬ebook) const; /** List all possible duplicate incidences. @param incidence is the incidence to check. @return a list of duplicate incidences. */ virtual Incidence::List duplicates(const Incidence::Ptr &incidence); /** Returns the Incidence associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceid of incidence, default is null @return a pointer to the Incidence. A null pointer is returned if no such Incidence exists. */ Incidence::Ptr incidence(const QString &uid, const QDateTime &recurrenceId = {}) const; /** Returns the deleted Incidence associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceid of incidence, default is null @return a pointer to the Incidence. A null pointer is returned if no such Incidence exists. */ Incidence::Ptr deleted(const QString &uid, const QDateTime &recurrenceId = {}) const; /** Delete all incidences that are instances of recurring incidence @p incidence. @param incidence is a pointer to a deleted Incidence @return true if delete was successful; false otherwise */ virtual bool deleteIncidenceInstances(const Incidence::Ptr &incidence) = 0; /** Returns the Incidence associated with the given scheduling identifier. @param sid is a unique scheduling identifier string. @return a pointer to the Incidence. A null pointer is returned if no such Incidence exists. */ virtual Incidence::Ptr incidenceFromSchedulingID(const QString &sid) const; /** Searches all events and todos for an incidence with this scheduling identifier. Returns a list of matching results. @param sid is a unique scheduling identifier string. */ virtual Incidence::List incidencesFromSchedulingID(const QString &sid) const; /** Create a merged list of Events, Todos, and Journals. 创建事件、待办事项和日志的合并列表。 @param events is an Event list to merge. @param todos is a Todo list to merge. @param journals is a Journal list to merge. @return a list of merged Incidences. */ static Incidence::List mergeIncidenceList(const Event::List &events, const Todo::List &todos, const Journal::List &journals); /** Flag that a change to a Calendar Incidence is starting. @param incidence is a pointer to the Incidence that will be changing. */ virtual bool beginChange(const Incidence::Ptr &incidence); /** Flag that a change to a Calendar Incidence has completed. @param incidence is a pointer to the Incidence that was changed. */ virtual bool endChange(const Incidence::Ptr &incidence); /** Creates an exception for an occurrence from a recurring Incidence. The returned exception is not automatically inserted into the calendar. @param incidence is a pointer to a recurring Incidence. @param recurrenceId specifies the specific occurrence for which the exception applies. @param thisAndFuture specifies if the exception applies only this specific occcurrence or also to all future occurrences. @return a pointer to a new exception incidence with @param recurrenceId set. @since 4.11 */ static Incidence::Ptr createException(const Incidence::Ptr &incidence, const QDateTime &recurrenceId, bool thisAndFuture = false); // Event Specific Methods // /** Inserts an Event into the calendar. @param event is a pointer to the Event to insert. @return true if the Event was successfully inserted; false otherwise. @see deleteEvent() */ virtual bool addEvent(const Event::Ptr &event) = 0; /** Removes an Event from the calendar. @param event is a pointer to the Event to remove. @return true if the Event was successfully remove; false otherwise. @see addEvent() */ virtual bool deleteEvent(const Event::Ptr &event) = 0; /** Delete all events that are instances of recurring event @p event. @param event is a pointer to a deleted Event @return true if delete was successful; false otherwise */ virtual bool deleteEventInstances(const Event::Ptr &event) = 0; /** Sort a list of Events. @param eventList is a pointer to a list of Events. @param sortField specifies the EventSortField. @param sortDirection specifies the SortDirection. @return a list of Events sorted as specified. */ static Event::List sortEvents(const Event::List &eventList, EventSortField sortField, SortDirection sortDirection); /** Returns a sorted, filtered list of all Events for this Calendar. @param sortField specifies the EventSortField. @param sortDirection specifies the SortDirection. @return the list of all filtered Events sorted as specified. */ virtual Event::List events(EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const; /** Returns a filtered list of all Events which occur on the given timestamp. @param dt request filtered Event list for this QDateTime only. @return the list of filtered Events occurring on the specified timestamp. */ Q_REQUIRED_RESULT Event::List events(const QDateTime &dt) const; /** Returns a filtered list of all Events occurring within a date range. @param start is the starting date. @param end is the ending date. @param timeZone time zone to interpret @p start and @p end, or the calendar's default time zone if none is specified @param inclusive if true only Events which are completely included within the date range are returned. @return the list of filtered Events occurring within the specified date range. */ Q_REQUIRED_RESULT Event::List events(const QDate &start, const QDate &end, const QTimeZone &timeZone = {}, bool inclusive = false) const; /** Returns a sorted, filtered list of all Events which occur on the given date. The Events are sorted according to @a sortField and @a sortDirection. @param date request filtered Event list for this QDate only. @param timeZone time zone to interpret @p start and @p end, or the calendar's default time zone if none is specified @param sortField specifies the EventSortField. @param sortDirection specifies the SortDirection. @return the list of sorted, filtered Events occurring on @a date. */ Q_REQUIRED_RESULT Event::List events(const QDate &date, const QTimeZone &timeZone = {}, EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const; /** Returns a sorted, unfiltered list of all Events for this Calendar. @param sortField specifies the EventSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered Events sorted as specified. */ virtual Event::List rawEvents(EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; /** Returns an unfiltered list of all Events which occur on the given timestamp. @param dt request unfiltered Event list for this QDateTime only. @return the list of unfiltered Events occurring on the specified timestamp. */ virtual Event::List rawEventsForDate(const QDateTime &dt) const = 0; /** Returns an unfiltered list of all Events occurring within a date range. @param start is the starting date @param end is the ending date @param timeZone time zone to interpret @p start and @p end, or the calendar's default time zone if none is specified @param inclusive if true only Events which are completely included within the date range are returned. @return the list of unfiltered Events occurring within the specified date range. */ virtual Event::List rawEvents(const QDate &start, const QDate &end, const QTimeZone &timeZone = {}, bool inclusive = false) const = 0; /** Returns a sorted, unfiltered list of all Events which occur on the given date. The Events are sorted according to @a sortField and @a sortDirection. @param date request unfiltered Event list for this QDate only @param timeZone time zone to interpret @p date, or the calendar's default time zone if none is specified @param sortField specifies the EventSortField @param sortDirection specifies the SortDirection @return the list of sorted, unfiltered Events occurring on @p date */ virtual Event::List rawEventsForDate(const QDate &date, const QTimeZone &timeZone = {}, EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; /** Returns the Event associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceId of event, default is null @return a pointer to the Event. A null pointer is returned if no such Event exists. */ virtual Event::Ptr event(const QString &uid, const QDateTime &recurrenceId = {}) const = 0; /** Returns the deleted Event associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceId of event, default is null @return a pointer to the deleted Event. A null pointer is returned if no such deleted Event exists, or if deletion tracking is disabled. @see deletionTracking() */ virtual Event::Ptr deletedEvent(const QString &uid, const QDateTime &recurrenceId = {}) const = 0; /** Returns a sorted, unfiltered list of all deleted Events for this Calendar. @param sortField specifies the EventSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered deleted Events sorted as specified. An empty list is returned if deletion tracking is disabled. @see deletionTracking() */ virtual Event::List deletedEvents(EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; /** Returns a sorted, unfiltered list of all possible instances for this recurring Event. @param event event to check for. Caller guarantees it's of type Event. @param sortField specifies the EventSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered event instances sorted as specified. */ virtual Event::List eventInstances(const Incidence::Ptr &event, EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; // Todo Specific Methods // /** Inserts a Todo into the calendar. @param todo is a pointer to the Todo to insert. @return true if the Todo was successfully inserted; false otherwise. @see deleteTodo() */ virtual bool addTodo(const Todo::Ptr &todo) = 0; /** Removes a Todo from the calendar. @param todo is a pointer to the Todo to remove. @return true if the Todo was successfully removed; false otherwise. @see addTodo() */ virtual bool deleteTodo(const Todo::Ptr &todo) = 0; /** Delete all to-dos that are instances of recurring to-do @p todo. @param todo is a pointer to a deleted Todo @return true if delete was successful; false otherwise */ virtual bool deleteTodoInstances(const Todo::Ptr &todo) = 0; /** Sort a list of Todos. @param todoList is a pointer to a list of Todos. @param sortField specifies the TodoSortField. @param sortDirection specifies the SortDirection. @return a list of Todos sorted as specified. */ static Todo::List sortTodos(const Todo::List &todoList, TodoSortField sortField, SortDirection sortDirection); /** Returns a sorted, filtered list of all Todos for this Calendar. @param sortField specifies the TodoSortField. @param sortDirection specifies the SortDirection. @return the list of all filtered Todos sorted as specified. */ virtual Todo::List todos(TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const; /** Returns a filtered list of all Todos which are due on the specified date. @param date request filtered Todos due on this QDate. @return the list of filtered Todos due on the specified date. */ virtual Todo::List todos(const QDate &date) const; /** Returns a filtered list of all Todos occurring within a date range. @param start is the starting date @param end is the ending date @param timeZone time zone to interpret @p start and @p end, or the calendar's default time zone if none is specified @param inclusive if true only Todos which are completely included within the date range are returned. @return the list of filtered Todos occurring within the specified date range. */ virtual Todo::List todos(const QDate &start, const QDate &end, const QTimeZone &timeZone = {}, bool inclusive = false) const; /** Returns a sorted, unfiltered list of all Todos for this Calendar. @param sortField specifies the TodoSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered Todos sorted as specified. */ virtual Todo::List rawTodos(TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; /** Returns an unfiltered list of all Todos which due on the specified date. @param date request unfiltered Todos due on this QDate. @return the list of unfiltered Todos due on the specified date. */ virtual Todo::List rawTodosForDate(const QDate &date) const = 0; /** Returns an unfiltered list of all Todos occurring within a date range. @param start is the starting date @param end is the ending date @param timeZone time zone to interpret @p start and @p end, or the calendar's default time zone if none is specified @param inclusive if true only Todos which are completely included within the date range are returned. @return the list of unfiltered Todos occurring within the specified date range. */ virtual Todo::List rawTodos(const QDate &start, const QDate &end, const QTimeZone &timeZone = {}, bool inclusive = false) const = 0; /** Returns the Todo associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceId of todo, default is null @return a pointer to the Todo. A null pointer is returned if no such Todo exists. */ virtual Todo::Ptr todo(const QString &uid, const QDateTime &recurrenceId = {}) const = 0; /** Returns the deleted Todo associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceId of todo, default is null @return a pointer to the deleted Todo. A null pointer is returned if no such deleted Todo exists or if deletion tracking is disabled. @see deletionTracking() */ virtual Todo::Ptr deletedTodo(const QString &uid, const QDateTime &recurrenceId = {}) const = 0; /** Returns a sorted, unfiltered list of all deleted Todos for this Calendar. @param sortField specifies the TodoSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered deleted Todos sorted as specified. An empty list is returned if deletion tracking is disabled. @see deletionTracking() */ virtual Todo::List deletedTodos(TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; /** Returns a sorted, unfiltered list of all possible instances for this recurring Todo. @param todo todo to check for. Caller guarantees it's of type Todo. @param sortField specifies the TodoSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered todo instances sorted as specified. */ virtual Todo::List todoInstances(const Incidence::Ptr &todo, TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; // Journal Specific Methods // /** Inserts a Journal into the calendar. @param journal is a pointer to the Journal to insert. @return true if the Journal was successfully inserted; false otherwise. @see deleteJournal() */ virtual bool addJournal(const Journal::Ptr &journal) = 0; /** Removes a Journal from the calendar. @param journal is a pointer to the Journal to remove. @return true if the Journal was successfully removed; false otherwise. @see addJournal() */ virtual bool deleteJournal(const Journal::Ptr &journal) = 0; /** Delete all journals that are instances of recurring journal @p journal. @param journal is a pointer to a deleted Journal @return true if delete was successful; false otherwise */ virtual bool deleteJournalInstances(const Journal::Ptr &journal) = 0; /** Sort a list of Journals. @param journalList is a pointer to a list of Journals. @param sortField specifies the JournalSortField. @param sortDirection specifies the SortDirection. @return a list of Journals sorted as specified. */ static Journal::List sortJournals(const Journal::List &journalList, JournalSortField sortField, SortDirection sortDirection); /** Returns a sorted, filtered list of all Journals for this Calendar. @param sortField specifies the JournalSortField. @param sortDirection specifies the SortDirection. @return the list of all filtered Journals sorted as specified. */ virtual Journal::List journals(JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const; /** Returns a filtered list of all Journals for on the specified date. @param date request filtered Journals for this QDate only. @return the list of filtered Journals for the specified date. */ virtual Journal::List journals(const QDate &date) const; /** Returns a sorted, unfiltered list of all Journals for this Calendar. @param sortField specifies the JournalSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered Journals sorted as specified. */ virtual Journal::List rawJournals(JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; /** Returns an unfiltered list of all Journals for on the specified date. @param date request unfiltered Journals for this QDate only. @return the list of unfiltered Journals for the specified date. */ virtual Journal::List rawJournalsForDate(const QDate &date) const = 0; /** Returns the Journal associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceId of journal, default is null @return a pointer to the Journal. A null pointer is returned if no such Journal exists. */ virtual Journal::Ptr journal(const QString &uid, const QDateTime &recurrenceId = {}) const = 0; /** Returns the deleted Journal associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceId of journal, default is null @return a pointer to the deleted Journal. A null pointer is returned if no such deleted Journal exists or if deletion tracking is disabled. @see deletionTracking() */ virtual Journal::Ptr deletedJournal(const QString &uid, const QDateTime &recurrenceId = {}) const = 0; /** Returns a sorted, unfiltered list of all deleted Journals for this Calendar. @param sortField specifies the JournalSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered deleted Journals sorted as specified. An empty list is returned if deletion tracking is disabled. @see deletionTracking() */ virtual Journal::List deletedJournals(JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; /** Returns a sorted, unfiltered list of all instances for this recurring Journal. @param journal journal to check for. Caller guarantees it's of type Journal. @param sortField specifies the JournalSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered journal instances sorted as specified. */ virtual Journal::List journalInstances(const Incidence::Ptr &journal, JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; // Relations Specific Methods // /** Setup Relations for an Incidence. @param incidence is a pointer to the Incidence to have a Relation setup. */ virtual void setupRelations(const Incidence::Ptr &incidence); /** Removes all Relations from an Incidence. @param incidence is a pointer to the Incidence to have a Relation removed. */ virtual void removeRelations(const Incidence::Ptr &incidence); /** Checks if @p ancestor is an ancestor of @p incidence @param ancestor is the incidence we are testing to be an ancestor. @param incidence is the incidence we are testing to be descended from @p ancestor. */ bool isAncestorOf(const Incidence::Ptr &ancestor, const Incidence::Ptr &incidence) const; /** Returns a list of incidences that have a relation of RELTYPE parent to incidence @p uid. @param uid The parent identifier whose children we want to obtain. */ Incidence::List relations(const QString &uid) const; // Filter Specific Methods // /** Sets the calendar filter. @param filter a pointer to a CalFilter object which will be used to filter Calendar Incidences. The Calendar takes ownership of @p filter. @see filter() */ void setFilter(CalFilter *filter); /** Returns the calendar filter. @return a pointer to the calendar CalFilter. A null pointer is returned if no such CalFilter exists. @see setFilter() */ CalFilter *filter() const; // Alarm Specific Methods // /** Returns a list of Alarms within a time range for this Calendar. @param from is the starting timestamp. @param to is the ending timestamp. @param excludeBlockedAlarms if true, alarms belonging to blocked collections aren't returned. @return the list of Alarms for the for the specified time range. */ virtual Alarm::List alarms(const QDateTime &from, const QDateTime &to, bool excludeBlockedAlarms = false) const = 0; /** Return a list of Alarms that occur before the specified timestamp. @param to is the ending timestamp. @return the list of Alarms occurring before the specified QDateTime. @since 5.77 */ Q_REQUIRED_RESULT Alarm::List alarmsTo(const QDateTime &to) const; // Observer Specific Methods // /** @class CalendarObserver The CalendarObserver class. */ class Q_CORE_EXPORT CalendarObserver // krazy:exclude=dpointer { public: /** Destructor. */ virtual ~CalendarObserver(); /** Notify the Observer that a Calendar has been modified. @param modified set if the calendar has been modified. @param calendar is a pointer to the Calendar object that is being observed. */ virtual void calendarModified(bool modified, Calendar *calendar); /** Notify the Observer that an Incidence has been inserted. @param incidence is a pointer to the Incidence that was inserted. */ virtual void calendarIncidenceAdded(const Incidence::Ptr &incidence); /** Notify the Observer that an Incidence has been modified. @param incidence is a pointer to the Incidence that was modified. */ virtual void calendarIncidenceChanged(const Incidence::Ptr &incidence); /** Notify the Observer that an Incidence will be removed. @param incidence is a pointer to the Incidence that will be removed. */ virtual void calendarIncidenceAboutToBeDeleted(const Incidence::Ptr &incidence); /** Notify the Observer that an Incidence has been removed. @param incidence is a pointer to the Incidence that was removed. @param calendar is a pointer to the calendar where the incidence was part of, because the incidence was deleted, there is now way to determine the calendar @since 4.83.0 */ virtual void calendarIncidenceDeleted(const Incidence::Ptr &incidence, const Calendar *calendar); /** Notify the Observer that an addition of Incidence has been canceled. @param incidence is a pointer to the Incidence that was removed. */ virtual void calendarIncidenceAdditionCanceled(const Incidence::Ptr &incidence); }; /** Registers an Observer for this Calendar. @param observer is a pointer to an Observer object that will be watching this Calendar. @see unregisterObserver() */ void registerObserver(CalendarObserver *observer); /** Unregisters an Observer for this Calendar. @param observer is a pointer to an Observer object that has been watching this Calendar. @see registerObserver() */ void unregisterObserver(CalendarObserver *observer); using QObject::event; // prevent warning about hidden virtual method protected: /** The Observer interface. So far not implemented. @param uid is the UID for the Incidence that has been updated. @param recurrenceId is possible recurrenceid of incidence. */ void incidenceUpdated(const QString &uid, const QDateTime &recurrenceId) override; /** Let Calendar subclasses set the time specification. @param timeZone is the time specification (time zone, etc.) for viewing Incidence dates.\n */ virtual void doSetTimeZone(const QTimeZone &timeZone); /** Let Calendar subclasses notify that they inserted an Incidence. @param incidence is a pointer to the Incidence object that was inserted. */ void notifyIncidenceAdded(const Incidence::Ptr &incidence); /** Let Calendar subclasses notify that they modified an Incidence. @param incidence is a pointer to the Incidence object that was modified. */ void notifyIncidenceChanged(const Incidence::Ptr &incidence); /** Let Calendar subclasses notify that they will remove an Incidence. @param incidence is a pointer to the Incidence object that will be removed. */ void notifyIncidenceAboutToBeDeleted(const Incidence::Ptr &incidence); /** Let Calendar subclasses notify that they removed an Incidence. @param incidence is a pointer to the Incidence object that has been removed. */ void notifyIncidenceDeleted(const Incidence::Ptr &incidence); /** Let Calendar subclasses notify that they canceled addition of an Incidence. @param incidence is a pointer to the Incidence object that addition as canceled. */ void notifyIncidenceAdditionCanceled(const Incidence::Ptr &incidence); /** @copydoc CustomProperties::customPropertyUpdated() */ void customPropertyUpdated() override; /** Let Calendar subclasses notify that they enabled an Observer. @param enabled if true tells the calendar that a subclass has enabled an Observer. */ void setObserversEnabled(bool enabled); /** Appends alarms of incidence in interval to list of alarms. @param alarms is a List of Alarms to be appended onto. @param incidence is a pointer to an Incidence containing the Alarm to be appended. @param from is the lower range of the next Alarm repetition. @param to is the upper range of the next Alarm repetition. */ void appendAlarms(Alarm::List &alarms, const Incidence::Ptr &incidence, const QDateTime &from, const QDateTime &to) const; /** Appends alarms of recurring events in interval to list of alarms. @param alarms is a List of Alarms to be appended onto. @param incidence is a pointer to an Incidence containing the Alarm to be appended. @param from is the lower range of the next Alarm repetition. @param to is the upper range of the next Alarm repetition. */ void appendRecurringAlarms(Alarm::List &alarms, const Incidence::Ptr &incidence, const QDateTime &from, const QDateTime &to) const; /** Enables or disabled deletion tracking. Default is true. @see deletedEvent() @see deletedTodo() @see deletedJournal() @since 4.11 */ void setDeletionTracking(bool enable); /** Returns if deletion tracking is enabled. Default is true. @since 4.11 */ bool deletionTracking() const; /** @copydoc IncidenceBase::virtual_hook() */ virtual void virtual_hook(int id, void *data); Q_SIGNALS: /** Emitted when setFilter() is called. @since 4.11 */ void filterChanged(); /** * Emitted when the id changes. * @since 5.85 * @see id() */ void idChanged(); /** * Emitted when the name changes. * @since 5.85 * @see name() */ void nameChanged(); /** * Emitted when the icon name changes. * @since 5.85 * @see icon() */ void iconChanged(); /** * Emitted when the AccessMode changes. * @since 5.85 * @see accessMode() */ void accessModeChanged(); /** * Emitted when the owner changes. * @since 5.85 * @see owner() */ void ownerChanged(); private: friend class ICalFormat; //@cond PRIVATE class Private; Private *const d; //@endcond Q_DISABLE_COPY(Calendar) }; } // namespace KCalendarCore Q_DECLARE_METATYPE(KCalendarCore::Calendar::Ptr) #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/calendar_p.h000066400000000000000000000046131473346337000236030ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2000-2004 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2006 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_CALENDAR_P_H #define KCALCORE_CALENDAR_P_H #include "calendar.h" #include "calfilter.h" namespace KCalendarCore { /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN Calendar::Private { public: Private() : mModified(false) , mNewObserver(false) , mObserversEnabled(true) , mDefaultFilter(new CalFilter) , batchAddingInProgress(false) , mDeletionTracking(true) { // Setup default filter, which does nothing mFilter = mDefaultFilter; mFilter->setEnabled(false); mOwner.setName(QStringLiteral("Unknown Name")); mOwner.setEmail(QStringLiteral("unknown@nowhere")); } ~Private() { if (mFilter != mDefaultFilter) { delete mFilter; } delete mDefaultFilter; } QTimeZone timeZoneIdSpec(const QByteArray &timeZoneId); QString mProductId; Person mOwner; QTimeZone mTimeZone; QVector mTimeZones; bool mModified = false; bool mNewObserver = false; bool mObserversEnabled = false; QList mObservers; CalFilter *mDefaultFilter = nullptr; CalFilter *mFilter = nullptr; // These lists are used to put together related To-dos QMultiHash mOrphans; QMultiHash mOrphanUids; // Lists for associating incidences to notebooks QMultiHash mNotebookIncidences; QHash mUidToNotebook; QHash mNotebooks; // name to visibility QHash mIncidenceVisibility; // incidence -> visibility QString mDefaultNotebook; // uid of default notebook QMap mIncidenceRelations; bool batchAddingInProgress = false; bool mDeletionTracking = false; QString mId; QString mName; QIcon mIcon; AccessMode mAccessMode = ReadWrite; }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/calendarplugin.cpp000066400000000000000000000005321473346337000250320ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2020 Nicolas Fella SPDX-License-Identifier: LGPL-2.0-or-later */ #include "calendarplugin.h" using namespace KCalendarCore; CalendarPlugin::CalendarPlugin(QObject *parent, const QVariantList &args) : QObject(parent) { Q_UNUSED(args) } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/calendarplugin.h000066400000000000000000000016261473346337000245040ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2020 Nicolas Fella SPDX-License-Identifier: LGPL-2.0-or-later */ #pragma once #include "calendar.h" #include namespace KCalendarCore { /** @brief A plugin that provides calendar data. It allows calendar applications to consume data provided by multiple sources, e.g. local ical files or remote calendars. @since 5.85 */ class Q_CORE_EXPORT CalendarPlugin : public QObject { Q_OBJECT public: CalendarPlugin(QObject *parent, const QVariantList &args); /** * The set of calendars defined by this plugin. * * @return QVector of calendars. */ virtual QVector calendars() const = 0; Q_SIGNALS: /** * Emitted when the set of calendars changed. */ void calendarsChanged(); private: void *d; }; } // namespace KCalendarCore dde-calendar-5.14.13/3rdparty/kcalendarcore/src/calfilter.cpp000066400000000000000000000137761473346337000240250ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2004 Bram Schoenmakers SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CalFilter class. @brief Provides a filter for calendars. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ @author Bram Schoenmakers \ */ #include "calfilter.h" using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::CalFilter::Private { public: Private() { } QString mName; // filter name QStringList mCategoryList; QStringList mEmailList; int mCriteria = 0; int mCompletedTimeSpan = 0; bool mEnabled = true; }; //@endcond CalFilter::CalFilter() : d(new KCalendarCore::CalFilter::Private) { } CalFilter::CalFilter(const QString &name) : d(new KCalendarCore::CalFilter::Private) { d->mName = name; } CalFilter::~CalFilter() { delete d; } bool KCalendarCore::CalFilter::operator==(const CalFilter &filter) const { return d->mName == filter.d->mName && d->mCriteria == filter.d->mCriteria && d->mCategoryList == filter.d->mCategoryList && d->mEmailList == filter.d->mEmailList && d->mCompletedTimeSpan == filter.d->mCompletedTimeSpan; } void CalFilter::apply(Event::List *eventList) const { if (!d->mEnabled) { return; } Event::List::Iterator it = eventList->begin(); while (it != eventList->end()) { if (!filterIncidence(*it)) { it = eventList->erase(it); } else { ++it; } } } // TODO: avoid duplicating apply() code void CalFilter::apply(Todo::List *todoList) const { if (!d->mEnabled) { return; } Todo::List::Iterator it = todoList->begin(); while (it != todoList->end()) { if (!filterIncidence(*it)) { it = todoList->erase(it); } else { ++it; } } } void CalFilter::apply(Journal::List *journalList) const { if (!d->mEnabled) { return; } Journal::List::Iterator it = journalList->begin(); while (it != journalList->end()) { if (!filterIncidence(*it)) { it = journalList->erase(it); } else { ++it; } } } bool CalFilter::filterIncidence(const Incidence::Ptr &incidence) const { if (!d->mEnabled) { return true; } Todo::Ptr todo = incidence.dynamicCast(); if (todo) { if ((d->mCriteria & HideCompletedTodos) && todo->isCompleted()) { // Check if completion date is suffently long ago: if (todo->completed().addDays(d->mCompletedTimeSpan) < QDateTime::currentDateTimeUtc()) { return false; } } if ((d->mCriteria & HideInactiveTodos) && ((todo->hasStartDate() && QDateTime::currentDateTimeUtc() < todo->dtStart()) || todo->isCompleted())) { return false; } if (d->mCriteria & HideNoMatchingAttendeeTodos) { bool iAmOneOfTheAttendees = false; const Attendee::List &attendees = todo->attendees(); if (!todo->attendees().isEmpty()) { Attendee::List::ConstIterator it; for (it = attendees.begin(); it != attendees.end(); ++it) { if (d->mEmailList.contains((*it).email())) { iAmOneOfTheAttendees = true; break; } } } else { // no attendees, must be me only iAmOneOfTheAttendees = true; } if (!iAmOneOfTheAttendees) { return false; } } } if (d->mCriteria & HideRecurring) { if (incidence->recurs() || incidence->hasRecurrenceId()) { return false; } } if (d->mCriteria & ShowCategories) { for (QStringList::ConstIterator it = d->mCategoryList.constBegin(); it != d->mCategoryList.constEnd(); ++it) { QStringList incidenceCategories = incidence->categories(); for (QStringList::ConstIterator it2 = incidenceCategories.constBegin(); it2 != incidenceCategories.constEnd(); ++it2) { if ((*it) == (*it2)) { return true; } } } return false; } else { for (QStringList::ConstIterator it = d->mCategoryList.constBegin(); it != d->mCategoryList.constEnd(); ++it) { QStringList incidenceCategories = incidence->categories(); for (QStringList::ConstIterator it2 = incidenceCategories.constBegin(); it2 != incidenceCategories.constEnd(); ++it2) { if ((*it) == (*it2)) { return false; } } } return true; } } void CalFilter::setName(const QString &name) { d->mName = name; } QString CalFilter::name() const { return d->mName; } void CalFilter::setEnabled(bool enabled) { d->mEnabled = enabled; } bool CalFilter::isEnabled() const { return d->mEnabled; } void CalFilter::setCriteria(int criteria) { d->mCriteria = criteria; } int CalFilter::criteria() const { return d->mCriteria; } void CalFilter::setCategoryList(const QStringList &categoryList) { d->mCategoryList = categoryList; } QStringList CalFilter::categoryList() const { return d->mCategoryList; } void CalFilter::setEmailList(const QStringList &emailList) { d->mEmailList = emailList; } QStringList CalFilter::emailList() const { return d->mEmailList; } void CalFilter::setCompletedTimeSpan(int timespan) { d->mCompletedTimeSpan = timespan; } int CalFilter::completedTimeSpan() const { return d->mCompletedTimeSpan; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/calfilter.h000066400000000000000000000132171473346337000234600ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001, 2003, 2004 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CalFilter class. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #ifndef KCALCORE_CALFILTER_H #define KCALCORE_CALFILTER_H #include "event.h" #include "journal.h" #include "todo.h" namespace KCalendarCore { /** @brief Provides a filter for calendars. 提供日历的筛选器。 This class provides a means for filtering calendar incidences by a list of email addresses, a list of categories, or other #Criteria. The following #Criteria are available: - remove recurring Incidences - keep Incidences with a matching category (see setCategoryList()) - remove completed To-dos (see setCompletedTimeSpan()) - remove inactive To-dos - remove To-dos without a matching attendee (see setEmailList()) */ class Q_CORE_EXPORT CalFilter { public: /** Filtering Criteria. */ enum Criteria { HideRecurring = 1, /**< Remove incidences that recur */ HideCompletedTodos = 2, /**< Remove completed to-dos */ ShowCategories = 4, /**< Show incidences with at least one matching category */ HideInactiveTodos = 8, /**< Remove to-dos that haven't started yet */ HideNoMatchingAttendeeTodos = 16, /**< Remove to-dos without a matching attendee */ }; /** Constructs an empty filter -- a filter without a name or criteria. */ CalFilter(); /** Constructs a filter with @p name. @param name is the name of this filter. */ explicit CalFilter(const QString &name); /** Destroys this filter. */ ~CalFilter(); /** Sets the filter name. @param name is the name of this filter. @see name(). */ void setName(const QString &name); /** Returns the filter name. @see setName(). */ Q_REQUIRED_RESULT QString name() const; /** Sets the criteria which must be fulfilled for an Incidence to pass the filter. @param criteria is a combination of #Criteria. @see criteria(). */ void setCriteria(int criteria); /** Returns the inclusive filter criteria. @see setCriteria(). */ Q_REQUIRED_RESULT int criteria() const; /** Applies the filter to a list of Events. All events not matching the filter criteria are removed from the list. @param eventList is a list of Events to filter. */ void apply(Event::List *eventList) const; /** Applies the filter to a list of To-dos. All to-dos not matching the filter criteria are removed from the list. @param todoList is a list of To-dos to filter. */ void apply(Todo::List *todoList) const; /** Applies the filter to a list of Journals. All journals not matching the filter criteria are removed from the list. @param journalList is a list of Journals to filter. */ void apply(Journal::List *journalList) const; /** Applies the filter criteria to the specified Incidence. @param incidence is the Incidence to filter. @return true if the Incidence passes the criteria; false otherwise. */ Q_REQUIRED_RESULT bool filterIncidence(const Incidence::Ptr &incidence) const; /** Enables or disables the filter. @param enabled is true if the filter is to be enabled; false otherwise. @see isEnabled(). */ void setEnabled(bool enabled); /** Returns whether the filter is enabled or not. @see setEnabled(). */ Q_REQUIRED_RESULT bool isEnabled() const; /** Sets the list of categories to be considered when filtering incidences according to the #ShowCategories criteria. @param categoryList is a QStringList of categories. @see categoryList(). */ void setCategoryList(const QStringList &categoryList); /** Returns the category list for this filter. @see setCategoryList(). */ Q_REQUIRED_RESULT QStringList categoryList() const; /** Sets the list of email addresses to be considered when filtering incidences according to the #HideNoMatchingAttendeeTodos criteria. @param emailList is a QStringList of email addresses. @see emailList(). */ void setEmailList(const QStringList &emailList); /** Returns the email list for this filter. @see setEmailList(). */ Q_REQUIRED_RESULT QStringList emailList() const; /** Sets the number of days for the #HideCompletedTodos criteria. If a to-do has been completed within the recent @p timespan days, then that to-do will be removed during filtering. If a time span is not specified in the filter, then all completed to-dos will be removed if the #HideCompletedTodos criteria is set. @param timespan is an integer representing a time span in days. @see completedTimeSpan(). */ void setCompletedTimeSpan(int timespan); /** Returns the completed time span for this filter. @see setCompletedTimeSpan() */ Q_REQUIRED_RESULT int completedTimeSpan() const; /** Compares this with @p filter for equality. @param filter the CalFilter to compare. */ bool operator==(const CalFilter &filter) const; private: //@cond PRIVATE Q_DISABLE_COPY(CalFilter) class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/calformat.cpp000066400000000000000000000045231473346337000240160ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CalFormat base class. @brief Base class providing an interface to various calendar formats. @author Cornelius Schumacher \ */ #include "calformat.h" #include "exceptions.h" #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::CalFormat::Private { public: Private() { } ~Private() { delete mException; } static QString mApplication; // Name of application, for creating unique ID strings static QString mProductId; // PRODID string to write to calendar files QString mLoadedProductId; // PRODID string loaded from calendar file 从日历文件加载的PRODID字符串 Exception *mException = nullptr; }; QString CalFormat::Private::mApplication = QStringLiteral("libkcal"); QString CalFormat::Private::mProductId = QStringLiteral("-//K Desktop Environment//NONSGML libkcal 4.3//EN"); //@endcond CalFormat::CalFormat() : d(new KCalendarCore::CalFormat::Private) { } CalFormat::~CalFormat() { clearException(); delete d; } void CalFormat::clearException() { delete d->mException; d->mException = nullptr; } void CalFormat::setException(Exception *exception) { delete d->mException; d->mException = exception; } Exception *CalFormat::exception() const { return d->mException; } void CalFormat::setApplication(const QString &application, const QString &productID) { Private::mApplication = application; Private::mProductId = productID; } const QString &CalFormat::application() { return Private::mApplication; } const QString &CalFormat::productId() { return Private::mProductId; } QString CalFormat::loadedProductId() { return d->mLoadedProductId; } void CalFormat::setLoadedProductId(const QString &id) { d->mLoadedProductId = id; } QString CalFormat::createUniqueId() { return QUuid::createUuid().toString().mid(1, 36); } void CalFormat::virtual_hook(int id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/calformat.h000066400000000000000000000122151473346337000234600ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CalFormat abstract base class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_CALFORMAT_H #define KCALCORE_CALFORMAT_H #include "calendar.h" #include namespace KCalendarCore { class Exception; /** @brief An abstract base class that provides an interface to various calendar formats. This is the base class for calendar formats. It provides an interface for the generation/interpretation of a textual representation of a calendar. */ class Q_CORE_EXPORT CalFormat { public: /** Constructs a new Calendar Format object. */ CalFormat(); /** Destructor. */ virtual ~CalFormat(); /** Loads a calendar on disk into the calendar associated with this format. 将磁盘上的日历加载到与此格式关联的日历中。 @param calendar is the Calendar to be loaded. @param fileName is the name of the disk file containing the Calendar data. @return true if successful; false otherwise. */ virtual bool load(const Calendar::Ptr &calendar, const QString &fileName) = 0; /** Writes the calendar to disk. @param calendar is the Calendar containing the data to be saved. @param fileName is the name of the file to write the calendar data. @return true if successful; false otherwise. */ virtual bool save(const Calendar::Ptr &calendar, const QString &fileName) = 0; /** Loads a calendar from a string @param calendar is the Calendar to be loaded. @param string is the QString containing the Calendar data. @param deleted use deleted incidences @param notebook notebook uid @return true if successful; false otherwise. @see fromRawString(), toString(). */ virtual bool fromString(const Calendar::Ptr &calendar, const QString &string, bool deleted = false, const QString ¬ebook = QString()) = 0; /** Parses a utf8 encoded string, returning the first iCal component encountered in that string. This is an overload used for efficient reading to avoid utf8 conversions, which are expensive when reading from disk. @param calendar is the Calendar to be loaded. @param string is the QByteArray containing the Calendar data. @param deleted use deleted incidences @param notebook notebook uid @return true if successful; false otherwise. @see fromString(), toString(). */ virtual bool fromRawString(const Calendar::Ptr &calendar, const QByteArray &string, bool deleted = false, const QString ¬ebook = QString()) = 0; /** Returns the calendar as a string. @param calendar is the Calendar containing the data to be saved. @param notebook uid use only incidences with given notebook @param deleted use deleted incidences @return a QString containing the Calendar data if successful; an empty string otherwise. @see fromString(), fromRawString(). */ virtual QString toString(const Calendar::Ptr &calendar, const QString ¬ebook = QString(), bool deleted = false) = 0; /** Clears the exception status. */ void clearException(); /** Returns an exception, if there is any, containing information about the last error that occurred. */ Exception *exception() const; /** Sets the application name for use in unique IDs and error messages, and product ID for incidence PRODID property @param application is a string containing the application name. @param productID is a string containing the product identifier. */ static void setApplication(const QString &application, const QString &productID); /** Returns the application name used in unique IDs and error messages. */ static const QString &application(); // krazy:exclude=constref /** Returns the our library's PRODID string to write into calendar files. */ static const QString &productId(); // krazy:exclude=constref /** Returns the PRODID string loaded from calendar file. @see setLoadedProductId() */ QString loadedProductId(); /** Creates a unique id string. */ static QString createUniqueId(); /** Sets an exception that is to be used by the functions of this class to report errors. @param error is a pointer to an Exception which contains the exception. */ void setException(Exception *error); protected: /** Sets the PRODID string loaded from calendar file. @param id is a pruduct Id string to set for the calendar file. @see loadedProductId() */ void setLoadedProductId(const QString &id); /** @copydoc IncidenceBase::virtual_hook() */ virtual void virtual_hook(int id, void *data); private: //@cond PRIVATE Q_DISABLE_COPY(CalFormat) class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/calstorage.cpp000066400000000000000000000017761473346337000242010ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002, 2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CalStorage abstract base class. @brief An abstract base class that provides a calendar storage interface. @author Cornelius Schumacher \ */ #include "calstorage.h" using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::CalStorage::Private { public: Private(const Calendar::Ptr &cal) : mCalendar(cal) { } Calendar::Ptr mCalendar; }; //@endcond CalStorage::CalStorage(const Calendar::Ptr &calendar) : d(new KCalendarCore::CalStorage::Private(calendar)) { } CalStorage::~CalStorage() { delete d; } Calendar::Ptr CalStorage::calendar() const { return d->mCalendar; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/calstorage.h000066400000000000000000000035751473346337000236450ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002, 2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CalStorage abstract base class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_CALSTORAGE_H #define KCALCORE_CALSTORAGE_H #include "calendar.h" #include namespace KCalendarCore { /** @brief An abstract base class that provides a calendar storage interface. This is the base class for calendar storage. It provides an interface for the loading and saving of calendars. */ class Q_CORE_EXPORT CalStorage : public QObject { Q_OBJECT public: /** Constructs a new storage object for a calendar. @param calendar is a pointer to a valid Calendar object. */ explicit CalStorage(const Calendar::Ptr &calendar); /** Destuctor. */ ~CalStorage() override; /** Returns the calendar for this storage object. @return A pointer to the calendar whose storage is being managed. */ Calendar::Ptr calendar() const; /** Opens the calendar for storage. @return true if the open was successful; false otherwise. */ virtual bool open() = 0; /** Loads the calendar into memory. @return true if the load was successful; false otherwise. */ virtual bool load() = 0; /** Saves the calendar. @return true if the save was successful; false otherwise. */ virtual bool save() = 0; /** Closes the calendar storage. @return true if the close was successful; false otherwise. */ virtual bool close() = 0; private: //@cond PRIVATE Q_DISABLE_COPY(CalStorage) class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/compat.cpp000066400000000000000000000251521473346337000233320ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2012 Christian Mollekopf SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines classes for managing compatibility between different calendar formats. @brief Classes that provide compatibility to older or "broken" calendar formats. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #include "compat_p.h" #include "incidence.h" #include #include #include #include using namespace KCalendarCore; Compat *CompatFactory::createCompat(const QString &productId, const QString &implementationVersion) { Compat *compat = nullptr; int korg = productId.indexOf(QLatin1String("KOrganizer")); int outl9 = productId.indexOf(QLatin1String("Outlook 9.0")); if (korg >= 0) { int versionStart = productId.indexOf(QLatin1Char(' '), korg); if (versionStart >= 0) { int versionStop = productId.indexOf(QRegularExpression(QStringLiteral("[ /]")), versionStart + 1); if (versionStop >= 0) { QString version = productId.mid(versionStart + 1, versionStop - versionStart - 1); int versionNum = version.section(QLatin1Char('.'), 0, 0).toInt() * 10000 + version.section(QLatin1Char('.'), 1, 1).toInt() * 100 + version.section(QLatin1Char('.'), 2, 2).toInt(); int releaseStop = productId.indexOf(QLatin1Char('/'), versionStop); QString release; if (releaseStop > versionStop) { release = productId.mid(versionStop + 1, releaseStop - versionStop - 1); } if (versionNum < 30100) { compat = new CompatPre31; } else if (versionNum < 30200) { compat = new CompatPre32; } else if (versionNum == 30200 && release == QLatin1String("pre")) { qDebug() << "Generating compat for KOrganizer 3.2 pre"; compat = new Compat32PrereleaseVersions; } else if (versionNum < 30400) { compat = new CompatPre34; } else if (versionNum < 30500) { compat = new CompatPre35; } } } } else if (outl9 >= 0) { qDebug() << "Generating compat for Outlook < 2000 (Outlook 9.0)"; compat = new CompatOutlook9; } if (!compat) { compat = new Compat; } // Older implementations lacked the implementation version, // so apply this fix if it is a file from kontact and the version is missing. if (implementationVersion.isEmpty() && (productId.contains(QLatin1String("libkcal")) || productId.contains(QLatin1String("KOrganizer")) || productId.contains(QLatin1String("KAlarm")))) { compat = new CompatPre410(compat); } return compat; } Compat::Compat() : d(nullptr) { } Compat::~Compat() { } void Compat::fixEmptySummary(const Incidence::Ptr &incidence) { // some stupid vCal exporters ignore the standard and use Description // instead of Summary for the default field. Correct for this: Copy the // first line of the description to the summary (if summary is just one // line, move it) if (incidence->summary().isEmpty() && !(incidence->description().isEmpty())) { QString oldDescription = incidence->description().trimmed(); QString newSummary(oldDescription); newSummary.remove(QRegularExpression(QStringLiteral("\n.*"))); incidence->setSummary(newSummary); if (oldDescription == newSummary) { incidence->setDescription(QLatin1String("")); } } } void Compat::fixAlarms(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); } void Compat::fixFloatingEnd(QDate &date) { Q_UNUSED(date); } void Compat::fixRecurrence(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); // Prevent use of compatibility mode during subsequent changes by the application // incidence->recurrence()->setCompatVersion(); } int Compat::fixPriority(int priority) { return priority; } bool Compat::useTimeZoneShift() const { return true; } void Compat::setCreatedToDtStamp(const Incidence::Ptr &incidence, const QDateTime &dtstamp) { Q_UNUSED(incidence); Q_UNUSED(dtstamp); } class Q_DECL_HIDDEN CompatDecorator::Private { public: Compat *compat; }; CompatDecorator::CompatDecorator(Compat *compat) : d(new CompatDecorator::Private) { d->compat = compat; } CompatDecorator::~CompatDecorator() { delete d->compat; delete d; } void CompatDecorator::fixEmptySummary(const Incidence::Ptr &incidence) { d->compat->fixEmptySummary(incidence); } void CompatDecorator::fixAlarms(const Incidence::Ptr &incidence) { d->compat->fixAlarms(incidence); } void CompatDecorator::fixFloatingEnd(QDate &date) { d->compat->fixFloatingEnd(date); } void CompatDecorator::fixRecurrence(const Incidence::Ptr &incidence) { d->compat->fixRecurrence(incidence); } int CompatDecorator::fixPriority(int priority) { return d->compat->fixPriority(priority); } bool CompatDecorator::useTimeZoneShift() const { return d->compat->useTimeZoneShift(); } void CompatDecorator::setCreatedToDtStamp(const Incidence::Ptr &incidence, const QDateTime &dtstamp) { d->compat->setCreatedToDtStamp(incidence, dtstamp); } CompatPre35::CompatPre35() : d(nullptr) { } CompatPre35::~CompatPre35() { } void CompatPre35::fixRecurrence(const Incidence::Ptr &incidence) { Recurrence *recurrence = incidence->recurrence(); if (recurrence) { QDateTime start(incidence->dtStart()); // kde < 3.5 only had one rrule, so no need to loop over all RRULEs. RecurrenceRule *r = recurrence->defaultRRule(); if (r && !r->dateMatchesRules(start)) { recurrence->addExDateTime(start); } } // Call base class method now that everything else is done Compat::fixRecurrence(incidence); } CompatPre34::CompatPre34() : d(nullptr) { } CompatPre34::~CompatPre34() { } int CompatPre34::fixPriority(int priority) { if (0 < priority && priority < 6) { // adjust 1->1, 2->3, 3->5, 4->7, 5->9 return 2 * priority - 1; } else { return priority; } } CompatPre32::CompatPre32() : d(nullptr) { } CompatPre32::~CompatPre32() { } void CompatPre32::fixRecurrence(const Incidence::Ptr &incidence) { Recurrence *recurrence = incidence->recurrence(); if (recurrence->recurs() && recurrence->duration() > 0) { recurrence->setDuration(recurrence->duration() + incidence->recurrence()->exDates().count()); } // Call base class method now that everything else is done CompatPre35::fixRecurrence(incidence); } CompatPre31::CompatPre31() : d(nullptr) { } CompatPre31::~CompatPre31() { } void CompatPre31::fixFloatingEnd(QDate &endDate) { endDate = endDate.addDays(1); } void CompatPre31::fixRecurrence(const Incidence::Ptr &incidence) { CompatPre32::fixRecurrence(incidence); Recurrence *recur = incidence->recurrence(); RecurrenceRule *r = nullptr; if (recur) { r = recur->defaultRRule(); } if (recur && r) { int duration = r->duration(); if (duration > 0) { // Backwards compatibility for KDE < 3.1. // rDuration was set to the number of time periods to recur, // with week start always on a Monday. // Convert this to the number of occurrences. r->setDuration(-1); QDate end(r->startDt().date()); bool doNothing = false; // # of periods: int tmp = (duration - 1) * r->frequency(); switch (r->recurrenceType()) { case RecurrenceRule::rWeekly: { end = end.addDays(tmp * 7 + 7 - end.dayOfWeek()); break; } case RecurrenceRule::rMonthly: { int month = end.month() - 1 + tmp; end.setDate(end.year() + month / 12, month % 12 + 1, 31); break; } case RecurrenceRule::rYearly: { end.setDate(end.year() + tmp, 12, 31); break; } default: doNothing = true; break; } if (!doNothing) { duration = r->durationTo(QDateTime(end, QTime(0, 0, 0), incidence->dtStart().timeZone())); r->setDuration(duration); } } /* addYearlyNum */ // Dates were stored as day numbers, with a fiddle to take account of // leap years. Convert the day number to a month. QList days = r->byYearDays(); if (!days.isEmpty()) { QList months = r->byMonths(); for (int i = 0; i < months.size(); ++i) { int newmonth = QDate(r->startDt().date().year(), 1, 1).addDays(months.at(i) - 1).month(); if (!months.contains(newmonth)) { months.append(newmonth); } } r->setByMonths(months); days.clear(); r->setByYearDays(days); } } } CompatOutlook9::CompatOutlook9() : d(nullptr) { } CompatOutlook9::~CompatOutlook9() { } void CompatOutlook9::fixAlarms(const Incidence::Ptr &incidence) { if (!incidence) { return; } Alarm::List alarms = incidence->alarms(); Alarm::List::Iterator end(alarms.end()); for (Alarm::List::Iterator it = alarms.begin(); it != end; ++it) { Alarm::Ptr al = *it; if (al && al->hasStartOffset()) { Duration offsetDuration = al->startOffset(); int offs = offsetDuration.asSeconds(); if (offs > 0) { offsetDuration = Duration(-offs); } al->setStartOffset(offsetDuration); } } } Compat32PrereleaseVersions::Compat32PrereleaseVersions() : d(nullptr) { } Compat32PrereleaseVersions::~Compat32PrereleaseVersions() { } bool Compat32PrereleaseVersions::useTimeZoneShift() const { return false; } CompatPre410::CompatPre410(Compat *decoratedCompat) : CompatDecorator(decoratedCompat) , d(nullptr) { } CompatPre410::~CompatPre410() { } void CompatPre410::setCreatedToDtStamp(const Incidence::Ptr &incidence, const QDateTime &dtstamp) { if (dtstamp.isValid()) { incidence->setCreated(dtstamp); } } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/compat_p.h000066400000000000000000000204671473346337000233220ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2012 Christian Mollekopf SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines classes for managing compatibility between different calendar formats. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #ifndef KCALCORE_COMPAT_P_H #define KCALCORE_COMPAT_P_H #include "incidence.h" #include // for Q_DISABLE_COPY() class QDate; class QString; namespace KCalendarCore { class Compat; /** @brief Factory for creating the right Compat object. @internal */ class CompatFactory { public: /** Creates the appropriate Compat class as determined by the Product ID. @param productId is a string containing a valid Product ID from a supported calendar format. @return A pointer to a Compat object which is owned by the caller. */ static Compat *createCompat(const QString &productId, const QString &implementationVersion); }; /** @brief This class provides compatibility to older or broken calendar files. @internal */ class Compat { public: /** Constructor. */ Compat(); /** Destructor. */ virtual ~Compat(); /** Fixes the recurrence rule for an incidence. @param incidence is a pointer to an Incidence object that may need its recurrence rule fixed. */ virtual void fixRecurrence(const Incidence::Ptr &incidence); /** Fixes an empty summary for an incidence. @param incidence is a pointer to an Incidence object that may need its summary fixed. */ virtual void fixEmptySummary(const Incidence::Ptr &incidence); /** Fixes the alarms list an incidence. @param incidence is a pointer to an Incidence object that may need its alarms fixed. */ virtual void fixAlarms(const Incidence::Ptr &incidence); /** Fixes the end date for floating events. @param date is the end date to fix. */ virtual void fixFloatingEnd(QDate &date); /** Fixes the priority. @param priority is the priority value to fix. @return an integer representing a valid priority value. */ virtual int fixPriority(int priority); /** Returns true if a timezone shift should be used; false otherwise. */ virtual bool useTimeZoneShift() const; /** Sets the created and dtstamp. */ virtual void setCreatedToDtStamp(const Incidence::Ptr &incidence, const QDateTime &dtstamp); private: //@cond PRIVATE Q_DISABLE_COPY(Compat) class Private; Private *const d; //@endcond }; /** @brief Decorator so multiple compatibility classes can be stacked. */ class CompatDecorator : public Compat { public: explicit CompatDecorator(Compat *decoratedCompat); ~CompatDecorator() override; /** @copydoc Compat::fixRecurrence() */ void fixRecurrence(const Incidence::Ptr &incidence) override; /** @copydoc Compat::fixEmptySummary() */ void fixEmptySummary(const Incidence::Ptr &incidence) override; /** @copydoc Compat::fixAlarms() */ void fixAlarms(const Incidence::Ptr &incidence) override; /** @copydoc Compat::fixFloatingEnd() */ void fixFloatingEnd(QDate &date) override; /** @copydoc Compat::fixPriority() */ int fixPriority(int priority) override; /** @copydoc Compat::useTimeZoneShift() */ bool useTimeZoneShift() const override; /** @copydoc Compat::setCreatedToDtStamp() */ void setCreatedToDtStamp(const Incidence::Ptr &incidence, const QDateTime &dtstamp) override; private: //@cond PRIVATE Q_DISABLE_COPY(CompatDecorator) class Private; Private *const d; //@endcond }; /** @brief Compatibility class for KOrganizer pre-3.5 calendar files. Before kde 3.5, the start date was not automatically a recurring date. So, if the start date doesn't match the recurrence rule, we need to add an ex-date for the date start. If a duration was given, the DTSTART was only counted if it matched, so by accident this was already the correct behavior, so we don't need to adjust the duration. */ class CompatPre35 : public Compat { public: CompatPre35(); ~CompatPre35() override; /** @copydoc Compat::fixRecurrence() */ void fixRecurrence(const Incidence::Ptr &incidence) override; private: //@cond PRIVATE class Private; Private *const d; //@endcond }; /** @brief Compatibility class for KOrganizer pre-3.4 calendar files. */ class CompatPre34 : public CompatPre35 { public: CompatPre34(); ~CompatPre34() override; /** @copydoc Compat::fixPriority() */ int fixPriority(int priority) override; private: //@cond PRIVATE class Private; Private *const d; //@endcond }; /** @brief Compatibility class for KOrganizer pre-3.2 calendar files. The recurrence has a specified number of repetitions. Pre-3.2, this was extended by the number of exception dates. This is also rfc 2445-compliant. The duration of an RRULE also counts events that are later excluded via EXDATE or EXRULE. */ class CompatPre32 : public CompatPre34 { public: CompatPre32(); ~CompatPre32() override; /** @copydoc Compat::fixRecurrence() */ void fixRecurrence(const Incidence::Ptr &incidence) override; private: //@cond PRIVATE class Private; Private *const d; //@endcond }; /** @brief Compatibility class for KOrganizer pre-3.1 calendar files. Before kde 3.1, floating events (events without a date) had 0:00 of their last day as the end date. E.g. 28.5.2005 0:00 until 28.5.2005 0:00 for an event that lasted the whole day on May 28, 2005. According to RFC 2445, the end date for such an event needs to be 29.5.2005 0:00. Update: We misunderstood rfc 2445 in this regard. For all-day events, the DTEND is the last day of the event. See a mail from the Author or rfc 2445: http://www.imc.org/ietf-calendar/archive1/msg03648.html However, as all other applications also got this wrong, we'll just leave it as it is and use the wrong interpretation (was also discussed on ietf-calsify) */ class CompatPre31 : public CompatPre32 { public: CompatPre31(); ~CompatPre31(); /** @copydoc Compat::fixFloatingEnd() */ void fixFloatingEnd(QDate &date) override; /** @copydoc Compat::fixRecurrence() */ void fixRecurrence(const Incidence::Ptr &incidence) override; private: //@cond PRIVATE class Private; Private *const d; //@endcond }; /** @brief Compatibility class for KOrganizer prerelease 3.2 calendar files. */ class Compat32PrereleaseVersions : public Compat { public: Compat32PrereleaseVersions(); ~Compat32PrereleaseVersions() override; /** @copydoc Compat::useTimeZoneShift() */ bool useTimeZoneShift() const override; private: //@cond PRIVATE class Private; Private *const d; //@endcond }; /** @brief Compatibility class for Outlook 9 calendar files. In Outlook 9, alarms have the wrong sign. I.e. RFC 2445 says that negative values for the trigger are before the event's start. Outlook/exchange, however used positive values. */ class CompatOutlook9 : public Compat { public: CompatOutlook9(); ~CompatOutlook9() override; /** @copydoc Compat::fixAlarms() */ void fixAlarms(const Incidence::Ptr &incidence) override; private: //@cond PRIVATE class Private; Private *const d; //@endcond }; /** @brief Compatibility class for Kontact < 4.10 calendar files. */ class CompatPre410 : public CompatDecorator { public: explicit CompatPre410(Compat *decoratedCompat); ~CompatPre410() override; /** @copydoc Compat::setCreatedToDtStamp() */ void setCreatedToDtStamp(const Incidence::Ptr &incidence, const QDateTime &dtstamp) override; private: //@cond PRIVATE class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/conference.cpp000066400000000000000000000062161473346337000241560ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2020 Daniel Vrátil SPDX-License-Identifier: LGPL-2.0-or-later */ #include "conference.h" #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Conference::Private : public QSharedData { public: QString label; QString language; QStringList features; QUrl uri; CustomProperties customProperties; }; //@endcond Conference::Conference() : d(new Conference::Private) { } Conference::Conference(const QUrl &uri, const QString &label, const QStringList &features, const QString &language) : d(new Conference::Private) { setUri(uri); setLabel(label); setFeatures(features); setLanguage(language); } Conference::Conference(const Conference &) = default; Conference::~Conference() = default; bool Conference::isNull() const { // isNull rather than isEmpty, as user code is actually creating empty but non-null conferences... return !d->uri.isValid() && d->label.isNull(); } bool KCalendarCore::Conference::operator==(const Conference &other) const { return std::tie(d->label, d->language, d->features, d->uri) == std::tie(other.d->label, other.d->language, other.d->features, other.d->uri); } bool KCalendarCore::Conference::operator!=(const Conference &other) const { return !operator==(other); } Conference &KCalendarCore::Conference::operator=(const Conference &) = default; QUrl Conference::uri() const { return d->uri; } void Conference::setUri(const QUrl &uri) { d->uri = uri; } QString Conference::label() const { return d->label; } void Conference::setLabel(const QString &label) { d->label = label; } QStringList Conference::features() const { return d->features; } void Conference::addFeature(const QString &feature) { d->features.push_back(feature); } void Conference::removeFeature(const QString &feature) { d->features.removeAll(feature); } void Conference::setFeatures(const QStringList &features) { d->features = features; } QString Conference::language() const { return d->language; } void Conference::setLanguage(const QString &language) { d->language = language; } void Conference::setCustomProperty(const QByteArray &xname, const QString &xvalue) { d->customProperties.setNonKDECustomProperty(xname, xvalue); } CustomProperties &Conference::customProperties() { return d->customProperties; } const CustomProperties &Conference::customProperties() const { return d->customProperties; } QDataStream &KCalendarCore::operator<<(QDataStream &stream, const KCalendarCore::Conference &conference) { return stream << conference.d->uri << conference.d->label << conference.d->features << conference.d->language << conference.d->customProperties; } QDataStream &KCalendarCore::operator>>(QDataStream &stream, KCalendarCore::Conference &conference) { Conference conf; stream >> conf.d->uri >> conf.d->label >> conf.d->features >> conf.d->language >> conf.d->customProperties; conference = conf; return stream; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/conference.h000066400000000000000000000125721473346337000236250ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2020 Daniel Vrátil SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_CONFERENCE_H #define KCALCORE_CONFERENCE_H #include #include #include #include "customproperties.h" namespace KCalendarCore { /** @brief Represents information related to a conference information of an Calendar Incidence, typically a meeting or task (to-do). 表示与会议相关的信息日历事件的信息,通常是会议或任务(待办事项)。 Conference contains information needed to join a remote conference system (e.g. phone call, audio/video meeting etc.) @since 5.77 */ class Q_CORE_EXPORT Conference { Q_GADGET Q_PROPERTY(bool isNull READ isNull) Q_PROPERTY(QStringList features READ features WRITE setFeatures) Q_PROPERTY(QString label READ label WRITE setLabel) Q_PROPERTY(QUrl uri READ uri WRITE setUri) Q_PROPERTY(QString language READ language WRITE setLanguage) public: using List = QVector; /** Create a null Conference. */ explicit Conference(); /** Constructs a conference consisting of a @p uri, description of the URI (@p label), list of features of the conference (@p features) and @p language. @param uri Uri to join the conference. @param label Label of the URI. @param features Features of this particular conference method. @param language Language of the information present in other fields. */ Conference(const QUrl &uri, const QString &label, const QStringList &features = {}, const QString &language = {}); /** Constructs a conference by copying another conference. @param conference is the conference to be copied. */ Conference(const Conference &conference); /** Destroys the conference. */ ~Conference(); /** Compares this with @p conference for equality. @param conference the conference to compare. */ bool operator==(const Conference &conference) const; /** Compares this with @p conference for inequality. @param conference the conference to compare. */ bool operator!=(const Conference &other) const; /** * Returns @c true if this is a default-constructed Conference instance. */ Q_REQUIRED_RESULT bool isNull() const; /** * Returns URI to join the conference, with access code included. */ Q_REQUIRED_RESULT QUrl uri() const; /** * Sets the URI to @uri. */ void setUri(const QUrl &uri); /** * Returns label with additional details regarding further use of the URI. */ Q_REQUIRED_RESULT QString label() const; /** * Sets the URI label to @p label. */ void setLabel(const QString &label); /** * Returns the list of features of the conferencing system at given URI. * * This can be e.g. CHAT, AUDIO, VIDEO, PHONE, etc. */ Q_REQUIRED_RESULT QStringList features() const; /** * Adds @p feature to the list of features. * * @param feature Feature to add. */ void addFeature(const QString &feature); /** * Removes @p feature from the list of features. * * @param feature Feature to remove. */ void removeFeature(const QString &feature); /** * Sets the list of features to @p features. */ void setFeatures(const QStringList &features); /** * Returns the language of the text present in other properties of this object. */ Q_REQUIRED_RESULT QString language() const; /** * Sets the language to @p language. */ void setLanguage(const QString &language); /** Sets this conference equal to @p conference. @param conference is the conference to copy. */ Conference &operator=(const Conference &conference); /** Adds a custom property. If the property already exists it will be overwritten. @param xname is the name of the property. @param xvalue is its value. */ void setCustomProperty(const QByteArray &xname, const QString &xvalue); /** Returns a reference to the CustomProperties object */ Q_REQUIRED_RESULT CustomProperties &customProperties(); /** Returns a const reference to the CustomProperties object */ const CustomProperties &customProperties() const; private: //@cond PRIVATE class Private; QSharedDataPointer d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const KCalendarCore::Conference &); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, KCalendarCore::Conference &); }; /** Serializes a Conference object into a data stream. @param stream is a QDataStream. @param conference is a reference to a Conference object to be serialized. */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::Conference &conference); /** Initializes a Conference object from a data stream. @param stream is a QDataStream. @param conference is a reference to a Conference object to be initialized. */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::Conference &conference); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Conference, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Conference) //@endcond #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/customproperties.cpp000066400000000000000000000163311473346337000254750ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002, 2006, 2010 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CustomProperties class. @brief A class to manage custom calendar properties. @author David Jarvie \ */ #include "customproperties.h" #include #include using namespace KCalendarCore; //@cond PRIVATE static bool checkName(const QByteArray &name); class Q_DECL_HIDDEN CustomProperties::Private { public: bool operator==(const Private &other) const; QMap mProperties; // custom calendar properties QMap mPropertyParameters; // Volatile properties are not written back to the serialized format and are not compared in operator== // They are only used for runtime purposes and are not part of the payload. QMap mVolatileProperties; bool isVolatileProperty(const QString &name) const { return name.startsWith(QLatin1String("X-KDE-VOLATILE")); } }; bool CustomProperties::Private::operator==(const CustomProperties::Private &other) const { if (mProperties.count() != other.mProperties.count()) { // qDebug() << "Property count is different:" << mProperties << other.mProperties; return false; } for (QMap::ConstIterator it = mProperties.begin(); it != mProperties.end(); ++it) { QMap::ConstIterator itOther = other.mProperties.find(it.key()); if (itOther == other.mProperties.end() || itOther.value() != it.value()) { return false; } } for (QMap::ConstIterator it = mPropertyParameters.begin(); it != mPropertyParameters.end(); ++it) { QMap::ConstIterator itOther = other.mPropertyParameters.find(it.key()); if (itOther == other.mPropertyParameters.end() || itOther.value() != it.value()) { return false; } } return true; } //@endcond CustomProperties::CustomProperties() : d(new Private) { } CustomProperties::CustomProperties(const CustomProperties &cp) : d(new Private(*cp.d)) { } CustomProperties &CustomProperties::operator=(const CustomProperties &other) { // check for self assignment if (&other == this) { return *this; } *d = *other.d; return *this; } CustomProperties::~CustomProperties() { delete d; } bool CustomProperties::operator==(const CustomProperties &other) const { return *d == *other.d; } void CustomProperties::setCustomProperty(const QByteArray &app, const QByteArray &key, const QString &value) { if (value.isNull() || key.isEmpty() || app.isEmpty()) { return; } QByteArray property = "X-KDE-" + app + '-' + key; if (!checkName(property)) { return; } customPropertyUpdate(); if (d->isVolatileProperty(QLatin1String(property))) { d->mVolatileProperties[property] = value; } else { d->mProperties[property] = value; } customPropertyUpdated(); } void CustomProperties::removeCustomProperty(const QByteArray &app, const QByteArray &key) { removeNonKDECustomProperty(QByteArray("X-KDE-" + app + '-' + key)); } QString CustomProperties::customProperty(const QByteArray &app, const QByteArray &key) const { return nonKDECustomProperty(QByteArray("X-KDE-" + app + '-' + key)); } QByteArray CustomProperties::customPropertyName(const QByteArray &app, const QByteArray &key) { QByteArray property("X-KDE-" + app + '-' + key); if (!checkName(property)) { return QByteArray(); } return property; } void CustomProperties::setNonKDECustomProperty(const QByteArray &name, const QString &value, const QString ¶meters) { if (value.isNull() || !checkName(name)) { return; } customPropertyUpdate(); if (d->isVolatileProperty(QLatin1String(name))) { d->mVolatileProperties[name] = value; } else { d->mProperties[name] = value; d->mPropertyParameters[name] = parameters; } customPropertyUpdated(); } void CustomProperties::removeNonKDECustomProperty(const QByteArray &name) { if (d->mProperties.contains(name)) { customPropertyUpdate(); d->mProperties.remove(name); d->mPropertyParameters.remove(name); customPropertyUpdated(); } else if (d->mVolatileProperties.contains(name)) { customPropertyUpdate(); d->mVolatileProperties.remove(name); customPropertyUpdated(); } } QString CustomProperties::nonKDECustomProperty(const QByteArray &name) const { return d->isVolatileProperty(QLatin1String(name)) ? d->mVolatileProperties.value(name) : d->mProperties.value(name); } QString CustomProperties::nonKDECustomPropertyParameters(const QByteArray &name) const { return d->mPropertyParameters.value(name); } void CustomProperties::setCustomProperties(const QMap &properties) { bool changed = false; for (QMap::ConstIterator it = properties.begin(); it != properties.end(); ++it) { // Validate the property name and convert any null string to empty string if (checkName(it.key())) { if (d->isVolatileProperty(QLatin1String(it.key()))) { d->mVolatileProperties[it.key()] = it.value().isNull() ? QLatin1String("") : it.value(); } else { d->mProperties[it.key()] = it.value().isNull() ? QLatin1String("") : it.value(); } if (!changed) { customPropertyUpdate(); } changed = true; } } if (changed) { customPropertyUpdated(); } } QMap CustomProperties::customProperties() const { QMap result = d->mProperties; for (auto it = d->mVolatileProperties.begin(), end = d->mVolatileProperties.end(); it != end; ++it) { result.insert(it.key(), it.value()); } return result; } void CustomProperties::customPropertyUpdate() { } void CustomProperties::customPropertyUpdated() { } //@cond PRIVATE bool checkName(const QByteArray &name) { // Check that the property name starts with 'X-' and contains //检查属性名称是否以“X-”开头,并包含 // only the permitted characters //只有允许的字符 const char *n = name.constData(); int len = name.length(); if (len < 2 || n[0] != 'X' || n[1] != '-') { return false; } for (int i = 2; i < len; ++i) { char ch = n[i]; if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9') || ch == '-') { continue; } return false; // invalid character found } return true; } //@endcond QDataStream &KCalendarCore::operator<<(QDataStream &stream, const KCalendarCore::CustomProperties &properties) { return stream << properties.d->mProperties << properties.d->mPropertyParameters; } QDataStream &KCalendarCore::operator>>(QDataStream &stream, KCalendarCore::CustomProperties &properties) { properties.d->mVolatileProperties.clear(); return stream >> properties.d->mProperties >> properties.d->mPropertyParameters; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/customproperties.h000066400000000000000000000154621473346337000251460ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002, 2006, 2010 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CustomProperties class. @author David Jarvie \ */ #ifndef KCALCORE_CUSTOMPROPERTIES_H #define KCALCORE_CUSTOMPROPERTIES_H #include #include namespace KCalendarCore { /** @brief A class to manage custom calendar properties. 用于管理自定义日历属性的类。 This class represents custom calendar properties. It is used as a base class for classes which represent calendar components. A custom property name written by the kcalcore library has the form X-KDE-APP-KEY where APP represents the application name, and KEY distinguishes individual properties for the application. In keeping with RFC2445, property names must be composed only of the characters A-Z, a-z, 0-9 and '-'. */ class Q_CORE_EXPORT CustomProperties { friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &s, const KCalendarCore::CustomProperties &properties); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &s, KCalendarCore::CustomProperties &properties); public: /** Constructs an empty custom properties instance. */ CustomProperties(); /** Copy constructor. @param other is the one to copy. */ CustomProperties(const CustomProperties &other); /** Destructor. */ virtual ~CustomProperties(); /** Compare this with @p properties for equality. @param properties is the one to compare. @warning The comparison is not polymorphic. */ bool operator==(const CustomProperties &properties) const; /** Create or modify a custom calendar property. @param app Application name as it appears in the custom property name. 在自定义属性名称中显示的应用程序名称。 @param key Property identifier specific to the application. 特定于应用程序的属性标识符。 @param value The property's value. A call with a value of QString() will be ignored. @see removeCustomProperty(). */ void setCustomProperty(const QByteArray &app, const QByteArray &key, const QString &value); /** Delete a custom calendar property. @param app Application name as it appears in the custom property name. @param key Property identifier specific to the application. @see setCustomProperty(). */ void removeCustomProperty(const QByteArray &app, const QByteArray &key); /** Return the value of a custom calendar property. @param app Application name as it appears in the custom property name. @param key Property identifier specific to the application. @return Property value, or QString() if (and only if) the property does not exist. */ Q_REQUIRED_RESULT QString customProperty(const QByteArray &app, const QByteArray &key) const; /** Validate and return the full name of a custom calendar property. @param app Application name as it appears in the custom property name. @param key Property identifier specific to the application. @return Full property name, or empty string if it would contain invalid characters */ Q_REQUIRED_RESULT static QByteArray customPropertyName(const QByteArray &app, const QByteArray &key); /** Create or modify a non-KDE or non-standard custom calendar property. 创建或修改非KDE或非标准自定义日历属性。 @param name Full property name @param value The property's value. A call with a value of QString() will be ignored. @param parameters The formatted list of parameters for the property. They should be formatted as RFC specifies, that is, KEY=VALUE;KEY2=VALUE2. We're mostly concerned about passing them through as-is albeit they can be of course parsed if need be. @see removeNonKDECustomProperty(). */ void setNonKDECustomProperty(const QByteArray &name, const QString &value, const QString ¶meters = QString()); /** Delete a non-KDE or non-standard custom calendar property. @param name Full property name @see setNonKDECustomProperty(). */ void removeNonKDECustomProperty(const QByteArray &name); /** Return the value of a non-KDE or non-standard custom calendar property. 返回非KDE或非标准自定义日历属性的值。 @param name Full property name @return Property value, or QString() if (and only if) the property does not exist. */ Q_REQUIRED_RESULT QString nonKDECustomProperty(const QByteArray &name) const; /** Return the parameters of a non-KDE or non-standard custom calendar property. @param name Full property name @return The parameters for the given property. Empty string is returned if none are set. */ Q_REQUIRED_RESULT QString nonKDECustomPropertyParameters(const QByteArray &name) const; /** Initialise the alarm's custom calendar properties to the specified key/value pairs. 将报警的自定义日历属性初始化为指定的键/值对。 @param properties is a QMap of property key/value pairs. @see customProperties(). */ void setCustomProperties(const QMap &properties); /** Returns all custom calendar property key/value pairs. @see setCustomProperties(). */ Q_REQUIRED_RESULT QMap customProperties() const; /** Assignment operator. @warning The assignment is not polymorphic. @param other is the CustomProperty to assign. */ CustomProperties &operator=(const CustomProperties &other); protected: /** Called before a custom property will be changed. 在更改自定义属性之前调用。 The default implementation does nothing: override in derived classes to perform change processing. 默认实现不做任何事情:重写派生类以执行更改处理。 */ virtual void customPropertyUpdate(); /** Called when a custom property has been changed. The default implementation does nothing: override in derived classes to perform change processing. */ virtual void customPropertyUpdated(); private: //@cond PRIVATE class Private; Private *const d; //@endcond }; /** Serializes the @p properties object into the @p stream. */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::CustomProperties &properties); /** Initializes the @p properties object from the @p stream. */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::CustomProperties &properties); } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/duration.cpp000066400000000000000000000115571473346337000237000ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2007 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Duration class. @brief Represents a span of time measured in seconds. @author Cornelius Schumacher \ @author David Jarvie \ */ #include "duration.h" #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Duration::Private { public: int seconds() const { return mDaily ? mDuration * 86400 : mDuration; } int mDuration; // number of seconds or days in the duration bool mDaily = false; // specified in terms of days rather than seconds }; //@endcond Duration::Duration() : d(new KCalendarCore::Duration::Private()) { } Duration::Duration(const QDateTime &start, const QDateTime &end) : d(new KCalendarCore::Duration::Private()) { if (start.time() == end.time() && start.timeZone() == end.timeZone()) { d->mDuration = start.daysTo(end); d->mDaily = true; } else { d->mDuration = start.secsTo(end); d->mDaily = false; } } Duration::Duration(const QDateTime &start, const QDateTime &end, Type type) : d(new KCalendarCore::Duration::Private()) { if (type == Days) { QDateTime endSt(end.toTimeZone(start.timeZone())); d->mDuration = start.daysTo(endSt); if (d->mDuration) { // Round down to whole number of days if necessary if (start < endSt) { if (endSt.time() < start.time()) { --d->mDuration; } } else { if (endSt.time() > start.time()) { ++d->mDuration; } } } d->mDaily = true; } else { d->mDuration = start.secsTo(end); d->mDaily = false; } } Duration::Duration(int duration, Type type) : d(new KCalendarCore::Duration::Private()) { d->mDuration = duration; d->mDaily = (type == Days); } Duration::Duration(const Duration &duration) : d(new KCalendarCore::Duration::Private(*duration.d)) { } Duration::~Duration() { delete d; } Duration &Duration::operator=(const Duration &duration) { // check for self assignment if (&duration == this) { return *this; } *d = *duration.d; return *this; } Duration::operator bool() const { return d->mDuration; } bool Duration::operator<(const Duration &other) const { if (d->mDaily == other.d->mDaily) { // guard against integer overflow for two daily durations return d->mDuration < other.d->mDuration; } return d->seconds() < other.d->seconds(); } bool Duration::operator==(const Duration &other) const { // Note: daily and non-daily durations are always unequal, since a day's // duration may differ from 24 hours if it happens to span a daylight saving // time change. return d->mDuration == other.d->mDuration && d->mDaily == other.d->mDaily; } Duration &Duration::operator+=(const Duration &other) { if (d->mDaily == other.d->mDaily) { d->mDuration += other.d->mDuration; } else if (d->mDaily) { d->mDuration = d->mDuration * 86400 + other.d->mDuration; d->mDaily = false; } else { d->mDuration += other.d->mDuration + 86400; } return *this; } Duration Duration::operator-() const { return Duration(-d->mDuration, (d->mDaily ? Days : Seconds)); } Duration &Duration::operator-=(const Duration &duration) { return operator+=(-duration); } Duration &Duration::operator*=(int value) { d->mDuration *= value; return *this; } Duration &Duration::operator/=(int value) { d->mDuration /= value; return *this; } QDateTime Duration::end(const QDateTime &start) const { return d->mDaily ? start.addDays(d->mDuration) : start.addSecs(d->mDuration); } Duration::Type Duration::type() const { return d->mDaily ? Days : Seconds; } bool Duration::isDaily() const { return d->mDaily; } int Duration::asSeconds() const { return d->seconds(); } int Duration::asDays() const { return d->mDaily ? d->mDuration : d->mDuration / 86400; } int Duration::value() const { return d->mDuration; } bool Duration::isNull() const { return d->mDuration == 0; } QDataStream &KCalendarCore::operator<<(QDataStream &out, const KCalendarCore::Duration &duration) { out << duration.d->mDuration << duration.d->mDaily; return out; } QDataStream &KCalendarCore::operator>>(QDataStream &in, KCalendarCore::Duration &duration) { in >> duration.d->mDuration >> duration.d->mDaily; return in; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/duration.h000066400000000000000000000217451473346337000233450ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2007 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Duration class. @author Cornelius Schumacher \ @author David Jarvie \ */ #ifndef KCALCORE_DURATION_H #define KCALCORE_DURATION_H #include #include #include class QDateTime; namespace KCalendarCore { /** @brief Represents a span of time measured in seconds or days. 表示以秒或天为单位的时间跨度。 A duration is a span of time measured in seconds or days. Construction can be done by specifying a stop and end time, or simply by specifying the number of seconds or days. Much of the time, it does not matter whether a duration is specified in seconds or in days. But it does make a difference when a duration is used to define a time period encompassing a daylight saving time change. */ class Q_CORE_EXPORT Duration { public: /** The unit of time used to define the duration. */ enum Type { Seconds, /**< duration is a number of seconds */ //秒 Days, /**< duration is a number of days */ //天 }; /** Constructs a duration of 0 seconds. */ Duration(); /** Constructs a duration from @p start to @p end. If the time of day in @p start and @p end is equal, and their time specifications (i.e. time zone etc.) are the same, the duration will be set in terms of days. Otherwise, the duration will be set in terms of seconds. @param start is the time the duration begins. @param end is the time the duration ends. */ Duration(const QDateTime &start, const QDateTime &end); /** Constructs a duration from @p start to @p end. If @p type is Days, and the time of day in @p start's time zone differs between @p start and @p end, the duration will be rounded down to the nearest whole number of days. @param start is the time the duration begins. @param end is the time the duration ends. @param type the unit of time to use (seconds or days) */ Duration(const QDateTime &start, const QDateTime &end, Type type); /** Constructs a duration with a number of seconds or days. @param duration the number of seconds or days in the duration @param type the unit of time to use (seconds or days) */ // Keep the following implicit since instances are often used in integer evaluations. Duration(int duration, Type type = Seconds); // krazy:exclude=explicit /** Constructs a duration by copying another duration object. @param duration is the duration to copy. */ Duration(const Duration &duration); /** Destroys a duration. */ ~Duration(); /** Sets this duration equal to @p duration. @param duration is the duration to copy. */ Duration &operator=(const Duration &duration); /** Returns true if this duration is non-zero. */ operator bool() const; /** Returns true if this duration is zero. */ bool operator!() const { return !operator bool(); } /** Returns true if this duration is smaller than the @p other. @param other is the other duration to compare. */ bool operator<(const Duration &other) const; /** Returns true if this duration is smaller than or equal to the @p other. @param other is the other duration to compare. */ bool operator<=(const Duration &other) const { return !other.operator<(*this); } /** Returns true if this duration is greater than the @p other. @param other is the other duration to compare. */ bool operator>(const Duration &other) const { return other.operator<(*this); } /** Returns true if this duration is greater than or equal to the @p other. @param other is the other duration to compare. */ bool operator>=(const Duration &other) const { return !operator<(other); } /** Returns true if this duration is equal to the @p other. Daily and non-daily durations are always considered unequal, since a day's duration may differ from 24 hours if it happens to span a daylight saving time change. @param other the other duration to compare */ bool operator==(const Duration &other) const; /** Returns true if this duration is not equal to the @p other. Daily and non-daily durations are always considered unequal, since a day's duration may differ from 24 hours if it happens to span a daylight saving time change. @param other is the other duration to compare. */ bool operator!=(const Duration &other) const { return !operator==(other); } /** Adds another duration to this one. If one is in terms of days and the other in terms of seconds, the result is in terms of seconds. @param other the other duration to add */ Duration &operator+=(const Duration &other); /** Adds two durations. If one is in terms of days and the other in terms of seconds, the result is in terms of seconds. @param other the other duration to add @return combined duration */ Duration operator+(const Duration &other) const { return Duration(*this) += other; } /** Returns the negative of this duration. */ Duration operator-() const; /** Subtracts another duration from this one. If one is in terms of days and the other in terms of seconds, the result is in terms of seconds. @param other the other duration to subtract */ Duration &operator-=(const Duration &other); /** Returns the difference between another duration and this. If one is in terms of days and the other in terms of seconds, the result is in terms of seconds. @param other the other duration to subtract @return difference in durations */ Duration operator-(const Duration &other) const { return Duration(*this) += other; } /** Multiplies this duration by a value. @param value value to multiply by */ Duration &operator*=(int value); /** Multiplies a duration by a value. @param value value to multiply by @return resultant duration */ Duration operator*(int value) const { return Duration(*this) *= value; } /** Divides this duration by a value. @param value value to divide by */ Duration &operator/=(int value); /** Divides a duration by a value. @param value value to divide by @return resultant duration */ Duration operator/(int value) const { return Duration(*this) /= value; } /** Computes a duration end time by adding the number of seconds or days in the duration to the specified @p start time. @param start is the start time. @return end time. */ Q_REQUIRED_RESULT QDateTime end(const QDateTime &start) const; /** Returns the time units (seconds or days) used to specify the duration. */ Q_REQUIRED_RESULT Type type() const; /** Returns whether the duration is specified in terms of days rather than seconds. */ Q_REQUIRED_RESULT bool isDaily() const; /** Returns the length of the duration in seconds. */ Q_REQUIRED_RESULT int asSeconds() const; /** Returns the length of the duration in days. If the duration is not an exact number of days, it is rounded down to return the number of whole days. */ Q_REQUIRED_RESULT int asDays() const; /** Returns the length of the duration in seconds or days. @return if isDaily(), duration in days, else duration in seconds */ Q_REQUIRED_RESULT int value() const; /** Returns true if the duration is 0 seconds. */ Q_REQUIRED_RESULT bool isNull() const; private: //@cond PRIVATE class Private; Private *const d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &s, const KCalendarCore::Duration &); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &s, KCalendarCore::Duration &); }; /** * Duration serializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::Duration &); /** * Duration deserializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, KCalendarCore::Duration &); inline uint qHash(const Duration &duration, uint seed = 0) { QtPrivate::QHashCombine hash; seed = hash(seed, duration.isDaily()); seed = hash(seed, duration.asSeconds()); return seed; } } // namespace KCalendarCore Q_DECLARE_METATYPE(KCalendarCore::Duration) #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/event.cpp000066400000000000000000000170441473346337000231710ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Event class. @brief This class provides an Event in the sense of RFC2445. @author Cornelius Schumacher \ */ #include "event.h" #include "utils_p.h" #include "visitor.h" #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Event::Private { public: QDateTime mDtEnd; Transparency mTransparency = Opaque; bool mMultiDayValid = false; bool mMultiDay = false; bool mIsLunnar = false; //是否为农历 }; //@endcond Event::Event() : d(new KCalendarCore::Event::Private) { } Event::Event(const Event &other) : Incidence(other) , d(new KCalendarCore::Event::Private(*other.d)) { } Event::Event(const Incidence &other) : Incidence(other) , d(new KCalendarCore::Event::Private) { } Event::~Event() { delete d; } Event *Event::clone() const { return new Event(*this); } IncidenceBase &Event::assign(const IncidenceBase &other) { if (&other != this) { Incidence::assign(other); const Event *e = static_cast(&other); *d = *(e->d); } return *this; } bool Event::equals(const IncidenceBase &event) const { if (!Incidence::equals(event)) { return false; } else { // If they weren't the same type IncidenceBase::equals would had returned false already const Event *e = static_cast(&event); return ((dtEnd() == e->dtEnd()) || (!dtEnd().isValid() && !e->dtEnd().isValid())) && transparency() == e->transparency(); } } Incidence::IncidenceType Event::type() const { return TypeEvent; } QByteArray Event::typeStr() const { return QByteArrayLiteral("Event"); } void Event::setDtStart(const QDateTime &dt) { d->mMultiDayValid = false; Incidence::setDtStart(dt); } void Event::setDtEnd(const QDateTime &dtEnd) { if (mReadOnly) { return; } if (d->mDtEnd != dtEnd || hasDuration() == dtEnd.isValid()) { update(); d->mDtEnd = dtEnd; d->mMultiDayValid = false; setHasDuration(!dtEnd.isValid()); setFieldDirty(FieldDtEnd); updated(); } } QDateTime Event::dtEnd() const { if (d->mDtEnd.isValid()) { return d->mDtEnd; } if (hasDuration()) { if (allDay()) { // For all day events, dtEnd is always inclusive QDateTime end = duration().end(dtStart().addDays(-1)); return end >= dtStart() ? end : dtStart(); } else { return duration().end(dtStart()); } } // It is valid for a VEVENT to be without a DTEND. See RFC2445, Sect4.6.1. // Be careful to use Event::dateEnd() as appropriate due to this possibility. return dtStart(); } QDate Event::dateEnd() const { QDateTime end = dtEnd().toTimeZone(dtStart().timeZone()); if (allDay()) { return end.date(); } else { return end.addSecs(-1).date(); } } bool Event::hasEndDate() const { return d->mDtEnd.isValid(); } bool Event::isMultiDay(const QTimeZone &zone) const { // First off, if spec's not valid, we can check for cache if (!zone.isValid() && d->mMultiDayValid) { return d->mMultiDay; } // Not in cache -> do it the hard way QDateTime start, end; if (!zone.isValid()) { start = dtStart(); end = dtEnd(); } else { start = dtStart().toTimeZone(zone); end = dtEnd().toTimeZone(zone); } bool multi = (start < end && start.date() != end.date()); // End date is non inclusive // If we have an incidence that duration is one day and ends with a start of a new day // than it is not a multiday event if (multi && end.time() == QTime(0, 0, 0)) { multi = start.daysTo(end) > 1; } // Update the cache // Also update Cache if spec is invalid d->mMultiDayValid = true; d->mMultiDay = multi; return multi; } void Event::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { Incidence::shiftTimes(oldZone, newZone); if (d->mDtEnd.isValid()) { d->mDtEnd = d->mDtEnd.toTimeZone(oldZone); d->mDtEnd.setTimeZone(newZone); } } void Event::setTransparency(Event::Transparency transparency) { if (mReadOnly) { return; } update(); d->mTransparency = transparency; setFieldDirty(FieldTransparency); updated(); } Event::Transparency Event::transparency() const { return d->mTransparency; } void Event::setDuration(const Duration &duration) { setDtEnd(QDateTime()); Incidence::setDuration(duration); } void Event::setAllDay(bool allday) { if (allday != allDay() && !mReadOnly) { setFieldDirty(FieldDtEnd); Incidence::setAllDay(allday); } } void Event::setLunnar(bool lunnar) { if (d->mIsLunnar == lunnar) return; update(); d->mIsLunnar = lunnar; updated(); } bool Event::lunnar() const { return d->mIsLunnar; } bool Event::accept(Visitor &v, const IncidenceBase::Ptr &incidence) { return v.visit(incidence.staticCast()); } QDateTime Event::dateTime(DateTimeRole role) const { switch (role) { case RoleRecurrenceStart: case RoleAlarmStartOffset: case RoleStartTimeZone: case RoleSort: return dtStart(); case RoleCalendarHashing: return !recurs() && !isMultiDay() ? dtStart() : QDateTime(); case RoleAlarmEndOffset: case RoleEndTimeZone: case RoleEndRecurrenceBase: case RoleEnd: case RoleDisplayEnd: return dtEnd(); case RoleDisplayStart: return dtStart(); case RoleAlarm: if (alarms().isEmpty()) { return QDateTime(); } else { Alarm::Ptr alarm = alarms().at(0); return alarm->hasStartOffset() ? dtStart() : dtEnd(); } default: return QDateTime(); } } void Event::setDateTime(const QDateTime &dateTime, DateTimeRole role) { switch (role) { case RoleDnD: { const qint64 duration = dtStart().secsTo(dtEnd()); setDtStart(dateTime); setDtEnd(dateTime.addSecs(duration <= 0 ? 3600 : duration)); break; } case RoleEnd: setDtEnd(dateTime); break; default: qDebug() << "Unhandled role" << role; } } void Event::virtual_hook(VirtualHook id, void *data) { Q_UNUSED(id); Q_UNUSED(data); } QLatin1String KCalendarCore::Event::mimeType() const { return Event::eventMimeType(); } QLatin1String Event::eventMimeType() { return QLatin1String("application/x-vnd.akonadi.calendar.event"); } QLatin1String Event::iconName(const QDateTime &) const { return QLatin1String("view-calendar-day"); } void Event::serialize(QDataStream &out) const { Incidence::serialize(out); serializeQDateTimeAsKDateTime(out, d->mDtEnd); out << hasEndDate() << static_cast(d->mTransparency) << d->mMultiDayValid << d->mMultiDay; } void Event::deserialize(QDataStream &in) { Incidence::deserialize(in); bool hasEndDateDummy = true; deserializeKDateTimeAsQDateTime(in, d->mDtEnd); in >> hasEndDateDummy; quint32 transp; in >> transp; d->mTransparency = static_cast(transp); in >> d->mMultiDayValid >> d->mMultiDay; } bool Event::supportsGroupwareCommunication() const { return true; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/event.h000066400000000000000000000170151473346337000226340ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Event class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_EVENT_H #define KCALCORE_EVENT_H #include "incidence.h" #include namespace KCalendarCore { /** @brief This class provides an Event in the sense of RFC2445. 此类提供RFC2445意义上的事件。 */ class Q_CORE_EXPORT Event : public Incidence { Q_GADGET Q_PROPERTY(QDateTime dtEnd READ dtEnd WRITE setDtEnd) Q_PROPERTY(KCalendarCore::Event::Transparency transparency READ transparency WRITE setTransparency) public: /** The different Event transparency types. */ enum Transparency { Opaque, /**< Event appears in free/busy time */ Transparent, /**< Event does @b not appear in free/busy time */ }; Q_ENUM(Transparency) /** A shared pointer to an Event object. */ typedef QSharedPointer Ptr; /** List of events. */ typedef QVector List; ///@cond PRIVATE // needed for Akonadi polymorphic payload support typedef Incidence SuperClass; ///@endcond /** Constructs an event. */ Event(); /** Copy constructor. @param other is the event to copy. */ Event(const Event &other); /** Costructs an event out of an incidence This constructs allows to make it easy to create an event from a todo. @param other is the incidence to copy. @since 4.14 */ Event(const Incidence &other); // krazy:exclude=explicit (copy ctor) /** Destroys the event. */ ~Event() override; /** @copydoc IncidenceBase::type() */ Q_REQUIRED_RESULT IncidenceType type() const override; /** @copydoc IncidenceBase::typeStr() */ Q_REQUIRED_RESULT QByteArray typeStr() const override; /** Returns an exact copy of this Event. The caller owns the returned object. */ Event *clone() const override; /** Sets the incidence starting date/time. 设置事件开始日期/时间。 @param dt is the starting date/time. @see IncidenceBase::dtStart(). */ void setDtStart(const QDateTime &dt) override; /** Sets the event end date and time. Important note for all day events: the end date is inclusive, the event will still occur during dtEnd(). When serializing to iCalendar DTEND will be dtEnd()+1, because the RFC states that DTEND is exclusive. @param dtEnd is a QDateTime specifying when the event ends. @see dtEnd(), dateEnd(). */ void setDtEnd(const QDateTime &dtEnd); /** Returns the event end date and time. Important note for all day events: the returned end date is inclusive, the event will still occur during dtEnd(). When serializing to iCalendar DTEND will be dtEnd()+1, because the RFC states that DTEND is exclusive. @see setDtEnd(). */ virtual QDateTime dtEnd() const; /** Returns the date when the event ends. This might be different from dtEnd().date, since the end date/time is non-inclusive. So timed events ending at 0:00 have their end date on the day before. 返回事件结束的日期。这可能与dtEnd()的日期不同,因为结束日期/时间不包括在内。因此,在0:00结束的定时事件的结束日期为前一天 */ Q_REQUIRED_RESULT QDate dateEnd() const; /** Returns whether the event has an end date/time. */ Q_REQUIRED_RESULT bool hasEndDate() const; /** Returns true if the event spans multiple days, otherwise return false. 如果事件跨越多天,则返回true,否则返回false。 For recurring events, it returns true if the first occurrence spans multiple days, otherwise returns false. Other occurrences might have a different span due to day light savings changes. 对于重复发生的事件,如果第一次发生跨越多天,则返回true,否则返回false。由于日光节约的变化,其他事件可能会有不同的跨度 @param zone If set, looks if the event is multiday for the given zone. If not set, looks if event this multiday for its zone. */ Q_REQUIRED_RESULT bool isMultiDay(const QTimeZone &zone = {}) const; /** @copydoc IncidenceBase::shiftTimes() */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) override; /** Sets the event's time transparency level. 设置事件的时间透明度级别。 @param transparency is the event Transparency level. */ void setTransparency(Transparency transparency); /** Returns the event's time transparency level. */ Q_REQUIRED_RESULT Transparency transparency() const; /** Sets the duration of this event. 设置此事件的持续时间。 @param duration is the event Duration. */ void setDuration(const Duration &duration) override; /** @copydoc IncidenceBase::setAllDay(). */ void setAllDay(bool allDay) override; //设置是否为农历日程 void setLunnar(bool lunnar); bool lunnar() const; /** @copydoc IncidenceBase::dateTime() */ Q_REQUIRED_RESULT QDateTime dateTime(DateTimeRole role) const override; /** @copydoc IncidenceBase::setDateTime() */ void setDateTime(const QDateTime &dateTime, DateTimeRole role) override; /** @copydoc IncidenceBase::mimeType() */ Q_REQUIRED_RESULT QLatin1String mimeType() const override; /** @copydoc Incidence::iconName() */ Q_REQUIRED_RESULT QLatin1String iconName(const QDateTime &recurrenceId = {}) const override; /** @copydoc Incidence::supportsGroupwareCommunication() 支持群件通信 */ Q_REQUIRED_RESULT bool supportsGroupwareCommunication() const override; /** Returns the Akonadi specific sub MIME type of a KCalendarCore::Event. */ Q_REQUIRED_RESULT static QLatin1String eventMimeType(); protected: /** Compares two events for equality. 比较两个事件是否相等。 @param event is the event to compare. */ bool equals(const IncidenceBase &event) const override; /** @copydoc IncidenceBase::assign() */ IncidenceBase &assign(const IncidenceBase &other) override; /** @copydoc IncidenceBase::virtual_hook() */ void virtual_hook(VirtualHook id, void *data) override; private: /** @copydoc IncidenceBase::accept() */ bool accept(Visitor &v, const IncidenceBase::Ptr &incidence) override; /** Disabled, otherwise could be dangerous if you subclass Event. Use IncidenceBase::operator= which is safe because it calls virtual function assign(). @param other is another Event object to assign to this one. */ Event &operator=(const Event &other); // For polymorfic serialization void serialize(QDataStream &out) const override; void deserialize(QDataStream &in) override; //@cond PRIVATE class Private; Private *const d; //@endcond }; } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Event::Ptr, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Event::Ptr) Q_DECLARE_METATYPE(KCalendarCore::Event *) //@endcond #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/exceptions.cpp000066400000000000000000000022631473346337000242260ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Exception class. We don't use actual C++ exceptions right now. These classes are currently returned by an error function; but we can build upon them, if/when we start to use C++ exceptions. @brief Exception base class. @author Cornelius Schumacher \ */ #include "exceptions.h" #include "calformat.h" using namespace KCalendarCore; namespace KCalendarCore { class ExceptionPrivate { public: /** The current exception code. */ Exception::ErrorCode mCode; /** Arguments to pass to i18n(). */ QStringList mArguments; }; } // namespace KCalendarCore Exception::Exception(const ErrorCode code, const QStringList &arguments) : d(new ExceptionPrivate) { d->mCode = code; d->mArguments = arguments; } Exception::~Exception() { } Exception::ErrorCode Exception::code() const { return d->mCode; } QStringList Exception::arguments() const { return d->mArguments; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/exceptions.h000066400000000000000000000052601473346337000236730ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Exception class. We don't use actual C++ exceptions right now. These classes are currently returned by an error function; but we can build upon them, if/when we start to use C++ exceptions. @brief Exception base class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_EXCEPTIONS_H #define KCALCORE_EXCEPTIONS_H #include #include #include namespace KCalendarCore { class ExceptionPrivate; /** Exception base class, currently used as a fancy kind of error code and not as an C++ exception. */ class Q_CORE_EXPORT Exception { public: /** The different types of error codes */ enum ErrorCode { LoadError, /**< Load error */ SaveError, /**< Save error */ ParseErrorIcal, /**< Parse error in libical */ ParseErrorKcal, /**< Parse error in libkcal */ NoCalendar, /**< No calendar component found */ CalVersion1, /**< vCalendar v1.0 detected */ CalVersion2, /**< iCalendar v2.0 detected */ CalVersionUnknown, /**< Unknown calendar format detected */ Restriction, /**< Restriction violation */ UserCancel, /**< User canceled the operation */ NoWritableFound, /**< No writable resource is available */ SaveErrorOpenFile, SaveErrorSaveFile, LibICalError, VersionPropertyMissing, ExpectedCalVersion2, ExpectedCalVersion2Unknown, ParseErrorNotIncidence, ParseErrorEmptyMessage, ParseErrorUnableToParse, ParseErrorMethodProperty, }; /** Construct an exception. @param code is the error code. @param arguments is a list of arguments that can be passed to an i18n engine to help build a descriptive message for the user, a common argument is for example the filename where the error occurred. */ explicit Exception(const ErrorCode code, const QStringList &arguments = QStringList()); /** Destructor. */ virtual ~Exception(); /** Returns the error code. @return The ErrorCode for this exception. */ Q_REQUIRED_RESULT virtual ErrorCode code() const; /** Returns the arguments. @return A QStringList with the argument list for this exception. */ Q_REQUIRED_RESULT virtual QStringList arguments() const; private: std::unique_ptr d; }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/filestorage.cpp000066400000000000000000000101451473346337000243470ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the FileStorage class. @brief This class provides a calendar storage as a local file. @author Cornelius Schumacher \ */ #include "filestorage.h" #include "exceptions.h" #include "icalformat.h" #include "memorycalendar.h" #include "vcalformat.h" #include using namespace KCalendarCore; /* Private class that helps to provide binary compatibility between releases. */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::FileStorage::Private { public: Private(const QString &fileName, CalFormat *format) : mFileName(fileName) , mSaveFormat(format) { } ~Private() { delete mSaveFormat; } QString mFileName; CalFormat *mSaveFormat = nullptr; }; //@endcond FileStorage::FileStorage(const Calendar::Ptr &cal, const QString &fileName, CalFormat *format) : CalStorage(cal) , d(new Private(fileName, format)) { } FileStorage::~FileStorage() { delete d; } void FileStorage::setFileName(const QString &fileName) { d->mFileName = fileName; } QString FileStorage::fileName() const { return d->mFileName; } void FileStorage::setSaveFormat(CalFormat *format) { delete d->mSaveFormat; d->mSaveFormat = format; } CalFormat *FileStorage::saveFormat() const { return d->mSaveFormat; } bool FileStorage::open() { return true; } bool FileStorage::load() { if (d->mFileName.isEmpty()) { qWarning() << "Empty filename while trying to load"; return false; } // Always try to load with iCalendar. It will detect, if it is actually a // vCalendar file. bool success; QString productId; // First try the supplied format. Otherwise fall through to iCalendar, then // to vCalendar success = saveFormat() && saveFormat()->load(calendar(), d->mFileName); if (success) { productId = saveFormat()->loadedProductId(); } else { ICalFormat iCal; success = iCal.load(calendar(), d->mFileName); if (success) { productId = iCal.loadedProductId(); } else { if (iCal.exception()) { if ((iCal.exception()->code() == Exception::ParseErrorIcal) || (iCal.exception()->code() == Exception::CalVersion1)) { // Possible vCalendar or invalid iCalendar encountered qDebug() << d->mFileName << " is an invalid iCalendar or possibly a vCalendar."; qDebug() << "Try to load it as a vCalendar"; VCalFormat vCal; success = vCal.load(calendar(), d->mFileName); productId = vCal.loadedProductId(); if (!success) { if (vCal.exception()) { qWarning() << d->mFileName << " is not a valid vCalendar file." << " exception code " << vCal.exception()->code(); } return false; } } else { return false; } } else { qWarning() << "There should be an exception set."; return false; } } } calendar()->setProductId(productId); calendar()->setModified(false); return true; } bool FileStorage::save() { if (d->mFileName.isEmpty()) { return false; } CalFormat *format = d->mSaveFormat ? d->mSaveFormat : new ICalFormat; bool success = format->save(calendar(), d->mFileName); if (success) { calendar()->setModified(false); } else { if (!format->exception()) { qDebug() << "Error. There should be an exception set."; } else { qDebug() << int(format->exception()->code()); } } if (!d->mSaveFormat) { delete format; } return success; } bool FileStorage::close() { return true; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/filestorage.h000066400000000000000000000057411473346337000240220ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002, 2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the FileStorage class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_FILESTORAGE_H #define KCALCORE_FILESTORAGE_H #include "calstorage.h" namespace KCalendarCore { class CalFormat; class Calendar; /** @brief This class provides a calendar storage as a local file. 此类将日历存储作为本地文件提供。 */ class Q_CORE_EXPORT FileStorage : public CalStorage { Q_OBJECT public: /** A shared pointer to a FileStorage. */ typedef QSharedPointer Ptr; /** Constructs a new FileStorage object for Calendar @p calendar with format @p format, and storage to file @p fileName. @param calendar is a pointer to a valid Calendar object. @param fileName is the name of the disk file containing the calendar data. @param format is a pointer to a valid CalFormat object that specifies the calendar format to be used. FileStorage takes ownership; i.e., the memory for @p format is deleted by this destructor. If no format is specified, then iCalendar format is assumed. */ explicit FileStorage(const Calendar::Ptr &calendar, const QString &fileName = QString(), KCalendarCore::CalFormat *format = nullptr); /** Destructor. */ ~FileStorage() override; /** Sets the name of the file that contains the calendar data. @param fileName is the name of the disk file containing the calendar data. @see fileName(). */ void setFileName(const QString &fileName); /** Returns the calendar file name. @return A QString with the name of the calendar file for this storge. @see setFileName(). */ Q_REQUIRED_RESULT QString fileName() const; /** Sets the CalFormat object to use for this storage. @param format is a pointer to a valid CalFormat object that specifies the calendar format to be used. FileStorage takes ownership. @see saveFormat(). */ void setSaveFormat(KCalendarCore::CalFormat *format); /** Returns the CalFormat object used by this storage. @return A pointer to the CalFormat object used by this storage. @see setSaveFormat(). */ CalFormat *saveFormat() const; /** @copydoc CalStorage::open() */ Q_REQUIRED_RESULT bool open() override; /** @copydoc CalStorage::load() */ Q_REQUIRED_RESULT bool load() override; /** @copydoc CalStorage::save() */ Q_REQUIRED_RESULT bool save() override; /** @copydoc CalStorage::close() */ Q_REQUIRED_RESULT bool close() override; private: //@cond PRIVATE Q_DISABLE_COPY(FileStorage) class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/freebusy.cpp000066400000000000000000000261421473346337000236730ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the FreeBusy class. @brief Provides information about the free/busy time of a calendar user. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #include "freebusy.h" #include "utils_p.h" #include "visitor.h" #include "icalformat.h" #include #include using namespace KCalendarCore; //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::FreeBusy::Private { private: FreeBusy *q; public: Private(FreeBusy *qq) : q(qq) { } Private(const KCalendarCore::FreeBusy::Private &other, FreeBusy *qq) : q(qq) { init(other); } Private(const FreeBusyPeriod::List &busyPeriods, FreeBusy *qq) : q(qq) , mBusyPeriods(busyPeriods) { } void init(const KCalendarCore::FreeBusy::Private &other); void init(const Event::List &events, const QDateTime &start, const QDateTime &end); QDateTime mDtEnd; // end datetime FreeBusyPeriod::List mBusyPeriods; // list of periods // This is used for creating a freebusy object for the current user bool addLocalPeriod(FreeBusy *fb, const QDateTime &start, const QDateTime &end); }; void KCalendarCore::FreeBusy::Private::init(const KCalendarCore::FreeBusy::Private &other) { mDtEnd = other.mDtEnd; mBusyPeriods = other.mBusyPeriods; } //@endcond FreeBusy::FreeBusy() : d(new KCalendarCore::FreeBusy::Private(this)) { } FreeBusy::FreeBusy(const FreeBusy &other) : IncidenceBase(other) , d(new KCalendarCore::FreeBusy::Private(*other.d, this)) { } FreeBusy::FreeBusy(const QDateTime &start, const QDateTime &end) : d(new KCalendarCore::FreeBusy::Private(this)) { setDtStart(start); // NOLINT false clang-analyzer-optin.cplusplus.VirtualCall setDtEnd(end); // NOLINT false clang-analyzer-optin.cplusplus.VirtualCall } FreeBusy::FreeBusy(const Event::List &events, const QDateTime &start, const QDateTime &end) : d(new KCalendarCore::FreeBusy::Private(this)) { setDtStart(start); // NOLINT false clang-analyzer-optin.cplusplus.VirtualCall setDtEnd(end); // NOLINT false clang-analyzer-optin.cplusplus.VirtualCall d->init(events, start, end); } //@cond PRIVATE void FreeBusy::Private::init(const Event::List &eventList, const QDateTime &start, const QDateTime &end) { const qint64 duration = start.daysTo(end); QDate day; QDateTime tmpStart; QDateTime tmpEnd; // Loops through every event in the calendar Event::List::ConstIterator it; for (it = eventList.constBegin(); it != eventList.constEnd(); ++it) { Event::Ptr event = *it; // If this event is transparent it shouldn't be in the freebusy list. if (event->transparency() == Event::Transparent) { continue; } // The code below can not handle all-day events. Fixing this resulted // in a lot of duplicated code. Instead, make a copy of the event and // set the period to the full day(s). This trick works for recurring, // multiday, and single day all-day events. Event::Ptr allDayEvent; if (event->allDay()) { // addDay event. Do the hack qDebug() << "All-day event"; allDayEvent = Event::Ptr(new Event(*event)); // Set the start and end times to be on midnight QDateTime st = allDayEvent->dtStart(); st.setTime(QTime(0, 0)); QDateTime nd = allDayEvent->dtEnd(); nd.setTime(QTime(23, 59, 59, 999)); allDayEvent->setAllDay(false); allDayEvent->setDtStart(st); allDayEvent->setDtEnd(nd); qDebug() << "Use:" << st.toString() << "to" << nd.toString(); // Finally, use this event for the setting below event = allDayEvent; } // This whole for loop is for recurring events, it loops through // each of the days of the freebusy request for (qint64 i = 0; i <= duration; ++i) { day = start.addDays(i).date(); tmpStart.setDate(day); tmpEnd.setDate(day); if (event->recurs()) { if (event->isMultiDay()) { // FIXME: This doesn't work for sub-daily recurrences or recurrences with // a different time than the original event. const qint64 extraDays = event->dtStart().daysTo(event->dtEnd()); for (qint64 x = 0; x <= extraDays; ++x) { if (event->recursOn(day.addDays(-x), start.timeZone())) { tmpStart.setDate(day.addDays(-x)); tmpStart.setTime(event->dtStart().time()); tmpEnd = event->duration().end(tmpStart); addLocalPeriod(q, tmpStart, tmpEnd); break; } } } else { if (event->recursOn(day, start.timeZone())) { tmpStart.setTime(event->dtStart().time()); tmpEnd.setTime(event->dtEnd().time()); addLocalPeriod(q, tmpStart, tmpEnd); } } } } // Non-recurring events addLocalPeriod(q, event->dtStart(), event->dtEnd()); } q->sortList(); } //@endcond FreeBusy::FreeBusy(const Period::List &busyPeriods) : d(new KCalendarCore::FreeBusy::Private(this)) { addPeriods(busyPeriods); } FreeBusy::FreeBusy(const FreeBusyPeriod::List &busyPeriods) : d(new KCalendarCore::FreeBusy::Private(busyPeriods, this)) { } FreeBusy::~FreeBusy() { delete d; } IncidenceBase::IncidenceType FreeBusy::type() const { return TypeFreeBusy; } QByteArray FreeBusy::typeStr() const { return QByteArrayLiteral("FreeBusy"); } void FreeBusy::setDtStart(const QDateTime &start) { IncidenceBase::setDtStart(start.toUTC()); updated(); } void FreeBusy::setDtEnd(const QDateTime &end) { d->mDtEnd = end; } QDateTime FreeBusy::dtEnd() const { return d->mDtEnd; } Period::List FreeBusy::busyPeriods() const { Period::List res; res.reserve(d->mBusyPeriods.count()); for (const FreeBusyPeriod &p : qAsConst(d->mBusyPeriods)) { res << p; } return res; } FreeBusyPeriod::List FreeBusy::fullBusyPeriods() const { return d->mBusyPeriods; } void FreeBusy::sortList() { std::sort(d->mBusyPeriods.begin(), d->mBusyPeriods.end()); } void FreeBusy::addPeriods(const Period::List &list) { d->mBusyPeriods.reserve(d->mBusyPeriods.count() + list.count()); for (const Period &p : qAsConst(list)) { d->mBusyPeriods << FreeBusyPeriod(p); } sortList(); } void FreeBusy::addPeriods(const FreeBusyPeriod::List &list) { d->mBusyPeriods += list; sortList(); } void FreeBusy::addPeriod(const QDateTime &start, const QDateTime &end) { d->mBusyPeriods.append(FreeBusyPeriod(start, end)); sortList(); } void FreeBusy::addPeriod(const QDateTime &start, const Duration &duration) { d->mBusyPeriods.append(FreeBusyPeriod(start, duration)); sortList(); } void FreeBusy::merge(const FreeBusy::Ptr &freeBusy) { if (freeBusy->dtStart() < dtStart()) { setDtStart(freeBusy->dtStart()); } if (freeBusy->dtEnd() > dtEnd()) { setDtEnd(freeBusy->dtEnd()); } Period::List periods = freeBusy->busyPeriods(); Period::List::ConstIterator it; d->mBusyPeriods.reserve(d->mBusyPeriods.count() + periods.count()); for (it = periods.constBegin(); it != periods.constEnd(); ++it) { d->mBusyPeriods.append(FreeBusyPeriod((*it).start(), (*it).end())); } sortList(); } void FreeBusy::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { if (oldZone.isValid() && newZone.isValid() && oldZone != newZone) { IncidenceBase::shiftTimes(oldZone, newZone); d->mDtEnd = d->mDtEnd.toTimeZone(oldZone); d->mDtEnd.setTimeZone(newZone); for (FreeBusyPeriod p : qAsConst(d->mBusyPeriods)) { p.shiftTimes(oldZone, newZone); } } } IncidenceBase &FreeBusy::assign(const IncidenceBase &other) { if (&other != this) { IncidenceBase::assign(other); const FreeBusy *f = static_cast(&other); d->init(*(f->d)); } return *this; } bool FreeBusy::equals(const IncidenceBase &freeBusy) const { if (!IncidenceBase::equals(freeBusy)) { return false; } else { // If they weren't the same type IncidenceBase::equals would had returned false already const FreeBusy *fb = static_cast(&freeBusy); return dtEnd() == fb->dtEnd() && d->mBusyPeriods == fb->d->mBusyPeriods; } } bool FreeBusy::accept(Visitor &v, const IncidenceBase::Ptr &incidence) { return v.visit(incidence.staticCast()); } QDateTime FreeBusy::dateTime(DateTimeRole role) const { Q_UNUSED(role); // No roles affecting freeBusy yet return QDateTime(); } void FreeBusy::setDateTime(const QDateTime &dateTime, DateTimeRole role) { Q_UNUSED(dateTime); Q_UNUSED(role); } void FreeBusy::virtual_hook(VirtualHook id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } //@cond PRIVATE bool FreeBusy::Private::addLocalPeriod(FreeBusy *fb, const QDateTime &eventStart, const QDateTime &eventEnd) { QDateTime tmpStart; QDateTime tmpEnd; // Check to see if the start *or* end of the event is // between the start and end of the freebusy dates. QDateTime start = fb->dtStart(); if (!(((start.secsTo(eventStart) >= 0) && (eventStart.secsTo(mDtEnd) >= 0)) || ((start.secsTo(eventEnd) >= 0) && (eventEnd.secsTo(mDtEnd) >= 0)))) { return false; } if (eventStart.secsTo(start) >= 0) { tmpStart = start; } else { tmpStart = eventStart; } if (eventEnd.secsTo(mDtEnd) <= 0) { tmpEnd = mDtEnd; } else { tmpEnd = eventEnd; } FreeBusyPeriod p(tmpStart, tmpEnd); mBusyPeriods.append(p); return true; } //@endcond QLatin1String FreeBusy::mimeType() const { return FreeBusy::freeBusyMimeType(); } QLatin1String KCalendarCore::FreeBusy::freeBusyMimeType() { return QLatin1String("application/x-vnd.akonadi.calendar.freebusy"); } QDataStream &KCalendarCore::operator<<(QDataStream &stream, const KCalendarCore::FreeBusy::Ptr &freebusy) { KCalendarCore::ICalFormat format; QString data = format.createScheduleMessage(freebusy, iTIPPublish); return stream << data; } QDataStream &KCalendarCore::operator>>(QDataStream &stream, KCalendarCore::FreeBusy::Ptr &freebusy) { QString freeBusyVCal; stream >> freeBusyVCal; KCalendarCore::ICalFormat format; freebusy = format.parseFreeBusy(freeBusyVCal); if (!freebusy) { qDebug() << "Error parsing free/busy"; qDebug() << freeBusyVCal; } return stream; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/freebusy.h000066400000000000000000000164271473346337000233450ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the FreeBusy class. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #ifndef KCALCORE_FREEBUSY_H #define KCALCORE_FREEBUSY_H #include "event.h" #include "freebusyperiod.h" #include "incidencebase.h" #include "period.h" #include namespace KCalendarCore { class FreeBusy; /** @brief Provides information about the free/busy time of a calendar. A free/busy is a collection of Periods. @see Period. */ class Q_CORE_EXPORT FreeBusy : public IncidenceBase { friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &s, const KCalendarCore::FreeBusy::Ptr &freebusy); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &s, KCalendarCore::FreeBusy::Ptr &freebusy); public: /** A shared pointer to a FreeBusy object. */ typedef QSharedPointer Ptr; /** List of FreeBusy objects. */ typedef QVector List; /** Constructs an free/busy without any periods. */ FreeBusy(); /** Copy constructor. @param other is the free/busy to copy. */ FreeBusy(const FreeBusy &other); /** Constructs a free/busy from a list of periods. @param busyPeriods is a list of periods. */ explicit FreeBusy(const Period::List &busyPeriods); /** Constructs a free/busy from a list of periods. @param busyPeriods is a list of periods. */ explicit FreeBusy(const FreeBusyPeriod::List &busyPeriods); /** Constructs a free/busy from a single period. @param start is the start date/time of the period. @param end is the end date/time of the period. */ FreeBusy(const QDateTime &start, const QDateTime &end); /** Constructs a freebusy for a specified list of events given a single period. @param events list of events. @param start is the start date/time of the period. @param end is the end date/time of the period. */ FreeBusy(const Event::List &events, const QDateTime &start, const QDateTime &end); /** Destroys a free/busy. */ ~FreeBusy() override; /** @copydoc IncidenceBase::type() */ Q_REQUIRED_RESULT IncidenceType type() const override; /** @copydoc IncidenceBase::typeStr() */ Q_REQUIRED_RESULT QByteArray typeStr() const override; /** Sets the start date/time for the free/busy. Note that this date/time may be later or earlier than all periods within the free/busy. @param start is a QDateTime specifying an start datetime. @see IncidenceBase::dtStart(), setDtEnd(). */ void setDtStart(const QDateTime &start) override; /** Sets the end datetime for the free/busy. Note that this datetime may be later or earlier than all periods within the free/busy. @param end is a QDateTime specifying an end datetime. @see dtEnd(), setDtStart(). */ void setDtEnd(const QDateTime &end); /** Returns the end datetime for the free/busy. FIXME: calling addPeriod() does not change mDtEnd. Is that incorrect? @see setDtEnd(). */ Q_REQUIRED_RESULT virtual QDateTime dtEnd() const; /** @copydoc IncidenceBase::shiftTimes() */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) override; /** Returns the list of all periods within the free/busy. */ Q_REQUIRED_RESULT Period::List busyPeriods() const; /** Returns the list of all periods within the free/busy. */ Q_REQUIRED_RESULT FreeBusyPeriod::List fullBusyPeriods() const; /** Adds a period to the freebusy list and sorts the list. @param start is the start datetime of the period. @param end is the end datetime of the period. */ void addPeriod(const QDateTime &start, const QDateTime &end); /** Adds a period to the freebusy list and sorts the list. @param start is the start datetime of the period. @param duration is the Duration of the period. */ void addPeriod(const QDateTime &start, const Duration &duration); /** Adds a list of periods to the freebusy object and then sorts that list. Use this if you are adding many items, instead of the addPeriod method, to avoid sorting repeatedly. @param list is a list of Period objects. */ void addPeriods(const Period::List &list); /** Adds a list of periods to the freebusy object and then sorts that list. Use this if you are adding many items, instead of the addPeriod method, to avoid sorting repeatedly. @param list is a list of FreeBusyPeriod objects. */ void addPeriods(const FreeBusyPeriod::List &list); /** Sorts the list of free/busy periods into ascending order. */ void sortList(); /** Merges another free/busy into this free/busy. @param freebusy is a pointer to a valid FreeBusy object. */ void merge(const FreeBusy::Ptr &freebusy); /** @copydoc IncidenceBase::dateTime() */ Q_REQUIRED_RESULT QDateTime dateTime(DateTimeRole role) const override; /** @copydoc IncidenceBase::setDateTime() */ void setDateTime(const QDateTime &dateTime, DateTimeRole role) override; /** @copydoc IncidenceBase::mimeType() */ Q_REQUIRED_RESULT QLatin1String mimeType() const override; /** Returns the Akonadi specific sub MIME type of a KCalendarCore::FreeBusy. */ Q_REQUIRED_RESULT static QLatin1String freeBusyMimeType(); protected: /** Compare this with @p freebusy for equality. @param freebusy is the FreeBusy to compare. */ bool equals(const IncidenceBase &freebusy) const override; /** @copydoc IncidenceBase::assign() */ IncidenceBase &assign(const IncidenceBase &other) override; /** @copydoc IncidenceBase::virtual_hook() */ void virtual_hook(VirtualHook id, void *data) override; private: /** @copydoc IncidenceBase::accept() */ bool accept(Visitor &v, const IncidenceBase::Ptr &incidence) override; /** Disabled, otherwise could be dangerous if you subclass FreeBusy. Use IncidenceBase::operator= which is safe because it calls virtual function assign(). @param other is another FreeBusy object to assign to this one. */ FreeBusy &operator=(const FreeBusy &other); //@cond PRIVATE class Private; Private *const d; //@endcond }; /** Serializes the @p freebusy object into the @p stream. */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::FreeBusy::Ptr &freebusy); /** Initializes the @p freebusy object from the @p stream. */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::FreeBusy::Ptr &freebusy); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::FreeBusy::Ptr, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::FreeBusy::Ptr) //@endcond #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/freebusycache.cpp000066400000000000000000000010661473346337000246550ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2004 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the FreeBusyCache abstract base class. @author Cornelius Schumacher \ */ #include "freebusycache.h" using namespace KCalendarCore; FreeBusyCache::~FreeBusyCache() { } void FreeBusyCache::virtual_hook(int id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/freebusycache.h000066400000000000000000000032341473346337000243210ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2004 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the FreeBusyCache abstract base class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_FREEBUSYCACHE_H #define KCALCORE_FREEBUSYCACHE_H #include "freebusy.h" class QString; namespace KCalendarCore { class Person; /** @brief An abstract base class to allow different implementations of storing free busy information, e.g. local storage or storage on a Kolab server. */ class Q_CORE_EXPORT FreeBusyCache { public: /** Destructor. */ virtual ~FreeBusyCache(); /** Save freebusy information belonging to an email. @param freebusy is a pointer to a valid FreeBusy instance. @param person is a valid Person instance. @return true if the save was successful; false otherwise. */ virtual bool saveFreeBusy(const FreeBusy::Ptr &freebusy, const Person &person) = 0; /** Load freebusy information belonging to an email. @param email is a QString containing a email string in the "FirstName LastName " format. @return A pointer to the FreeBusy object loaded for the specified email; returns 0 if there was some problem attempting to load the FreeBusy information. */ virtual FreeBusy::Ptr loadFreeBusy(const QString &email) = 0; protected: /** @copydoc IncidenceBase::virtual_hook() */ virtual void virtual_hook(int id, void *data); }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/freebusyperiod.cpp000066400000000000000000000056311473346337000250760ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2007 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the FreeBusyPeriod class. @brief Represents a period of time. @author Cornelius Schumacher \ */ #include "freebusyperiod.h" using namespace KCalendarCore; //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::FreeBusyPeriod::Private { public: Private() : mType(Unknown) { } QString mSummary; QString mLocation; FreeBusyType mType; }; //@endcond FreeBusyPeriod::FreeBusyPeriod() : Period() , d(new KCalendarCore::FreeBusyPeriod::Private()) { } FreeBusyPeriod::FreeBusyPeriod(const QDateTime &start, const QDateTime &end) : Period(start, end) , d(new KCalendarCore::FreeBusyPeriod::Private()) { } FreeBusyPeriod::FreeBusyPeriod(const QDateTime &start, const Duration &duration) : Period(start, duration) , d(new KCalendarCore::FreeBusyPeriod::Private()) { } FreeBusyPeriod::FreeBusyPeriod(const FreeBusyPeriod &period) : Period(period) , d(new KCalendarCore::FreeBusyPeriod::Private(*period.d)) { } FreeBusyPeriod::FreeBusyPeriod(const Period &period) : Period(period) , d(new KCalendarCore::FreeBusyPeriod::Private()) { } FreeBusyPeriod::~FreeBusyPeriod() { delete d; } FreeBusyPeriod &FreeBusyPeriod::operator=(const FreeBusyPeriod &other) { // check for self assignment if (&other == this) { return *this; } Period::operator=(other); *d = *other.d; return *this; } QString FreeBusyPeriod::summary() const { return d->mSummary; } void FreeBusyPeriod::setSummary(const QString &summary) { d->mSummary = summary; } QString FreeBusyPeriod::location() const { return d->mLocation; } void FreeBusyPeriod::setLocation(const QString &location) { d->mLocation = location; } FreeBusyPeriod::FreeBusyType FreeBusyPeriod::type() const { return d->mType; } void FreeBusyPeriod::setType(FreeBusyPeriod::FreeBusyType type) { d->mType = type; } QDataStream &KCalendarCore::operator<<(QDataStream &stream, const KCalendarCore::FreeBusyPeriod &period) { KCalendarCore::Period periodParent = static_cast(period); stream << periodParent; stream << period.summary() << period.location() << static_cast(period.type()); return stream; } QDataStream &KCalendarCore::operator>>(QDataStream &stream, FreeBusyPeriod &period) { KCalendarCore::Period periodParent; QString summary, location; int type; stream >> periodParent >> summary >> location >> type; period = periodParent; period.setLocation(location); period.setSummary(summary); period.setType(static_cast(type)); return stream; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/freebusyperiod.h000066400000000000000000000072061473346337000245430ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Period class. @brief Represents a period of time. @author Cornelius Schumacher \ */ #ifndef KCALCORE_FREEBUSYPERIOD_H #define KCALCORE_FREEBUSYPERIOD_H #include "period.h" #include namespace KCalendarCore { /** The period can be defined by either a start time and an end time or by a start time and a duration. */ class Q_CORE_EXPORT FreeBusyPeriod : public Period { public: enum FreeBusyType { Free, Busy, BusyUnavailable, BusyTentative, Unknown, }; /** List of periods. */ typedef QVector List; /** Constructs a period without a duration. */ FreeBusyPeriod(); /** Constructs a period from @p start to @p end. @param start the time the period begins. @param end the time the period ends. */ FreeBusyPeriod(const QDateTime &start, const QDateTime &end); /** Constructs a period from @p start and lasting @p duration. @param start the time when the period starts. @param duration how long the period lasts. */ FreeBusyPeriod(const QDateTime &start, const Duration &duration); /** Constructs a period by copying another period object @param period the period to copy */ FreeBusyPeriod(const FreeBusyPeriod &period); /** Constructs a period by copying another period object @param period the period to copy */ FreeBusyPeriod(const Period &period); // krazy:exclude=explicit /** Destroys a period. */ ~FreeBusyPeriod(); /** Sets this period equal to the @p other one. @param other is the other period to compare. */ FreeBusyPeriod &operator=(const FreeBusyPeriod &other); /** Sets the period summary. @param summary is the period summary string. @see summary(). */ void setSummary(const QString &summary); /** Returns the period summary. @see setSummary() */ Q_REQUIRED_RESULT QString summary() const; /** Sets the period location. @param location is the period location string. @see location(). */ void setLocation(const QString &location); /** Returns the period location. @see setLocation() */ Q_REQUIRED_RESULT QString location() const; /** Sets the free/busy type. @param type is the type of free/busy period @see type(). @since 5.0 */ void setType(FreeBusyType type); /** Returns free/busy type @see setType(). @since 5.0 */ Q_REQUIRED_RESULT FreeBusyType type() const; private: //@cond PRIVATE class Private; Private *const d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::FreeBusyPeriod &period); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::FreeBusyPeriod &period); }; /** Write @p period to the datastream @p stream, in binary format. */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::FreeBusyPeriod &period); /** Read a Period object into @p period from @p stream, in binary format. */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::FreeBusyPeriod &period); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_METATYPE(KCalendarCore::FreeBusyPeriod) //@endcond #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/icalformat.cpp000066400000000000000000000501371473346337000241710ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the ICalFormat class. @brief iCalendar format implementation: a layer of abstraction for libical. @author Cornelius Schumacher \ */ #include "icalformat.h" #include "calendar_p.h" #include "icalformat_p.h" #include "icaltimezones_p.h" #include "memorycalendar.h" #include #include #include #include extern "C" { #include "libical/ical.h" #include "libical/icalmemory.h" #include "libical/icalparser.h" #include "libical/icalrestriction.h" #include "libical/icalss.h" } using namespace KCalendarCore; //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::ICalFormat::Private { public: Private(ICalFormat *parent) : mImpl(new ICalFormatImpl(parent)) , mTimeZone(QTimeZone::utc()) { } ~Private() { delete mImpl; } ICalFormatImpl *mImpl = nullptr; QTimeZone mTimeZone; }; //@endcond ICalFormat::ICalFormat() : d(new Private(this)) { } ICalFormat::~ICalFormat() { icalmemory_free_ring(); delete d; } bool ICalFormat::load(const Calendar::Ptr &calendar, const QString &fileName) { qDebug() << fileName; clearException(); QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) { qCritical() << "load error: unable to open " << fileName; setException(new Exception(Exception::LoadError)); return false; } const QByteArray text = file.readAll().trimmed(); file.close(); if (!text.isEmpty()) { if (!fromRawString(calendar, text, false, fileName)) { qWarning() << fileName << " is not a valid iCalendar file"; setException(new Exception(Exception::ParseErrorIcal)); return false; } } // Note: we consider empty files to be valid return true; } bool ICalFormat::save(const Calendar::Ptr &calendar, const QString &fileName) { qDebug() << fileName; clearException(); QString text = toString(calendar); if (text.isEmpty()) { return false; } // Write backup file const QString backupFile = fileName + QLatin1Char('~'); QFile::remove(backupFile); QFile::copy(fileName, backupFile); QSaveFile file(fileName); if (!file.open(QIODevice::WriteOnly)) { qCritical() << "file open error: " << file.errorString() << ";filename=" << fileName; setException(new Exception(Exception::SaveErrorOpenFile, QStringList(fileName))); return false; } // Convert to UTF8 and save QByteArray textUtf8 = text.toUtf8(); file.write(textUtf8.data(), textUtf8.size()); // QSaveFile doesn't report a write error when the device is full (see Qt // bug 75077), so check that the data can actually be written. if (!file.flush()) { qDebug() << "file write error (flush failed)"; setException(new Exception(Exception::SaveErrorSaveFile, QStringList(fileName))); return false; } if (!file.commit()) { qDebug() << "file finalize error:" << file.errorString(); setException(new Exception(Exception::SaveErrorSaveFile, QStringList(fileName))); return false; } return true; } bool ICalFormat::fromString(const Calendar::Ptr &cal, const QString &string, bool deleted, const QString ¬ebook) { return fromRawString(cal, string.toUtf8(), deleted, notebook); } Incidence::Ptr ICalFormat::readIncidence(const QByteArray &string) { // Let's defend const correctness until the very gates of hell^Wlibical icalcomponent *calendar = icalcomponent_new_from_string(const_cast(string.constData())); if (!calendar) { qCritical() << "parse error from icalcomponent_new_from_string. string=" << QString::fromLatin1(string); setException(new Exception(Exception::ParseErrorIcal)); return Incidence::Ptr(); } ICalTimeZoneCache tzCache; ICalTimeZoneParser parser(&tzCache); parser.parse(calendar); Incidence::Ptr incidence; if (icalcomponent_isa(calendar) == ICAL_VCALENDAR_COMPONENT) { incidence = d->mImpl->readOneIncidence(calendar, &tzCache); } else if (icalcomponent_isa(calendar) == ICAL_XROOT_COMPONENT) { icalcomponent *comp = icalcomponent_get_first_component(calendar, ICAL_VCALENDAR_COMPONENT); if (comp) { incidence = d->mImpl->readOneIncidence(comp, &tzCache); } } if (!incidence) { qDebug() << "No VCALENDAR component found"; setException(new Exception(Exception::NoCalendar)); } icalcomponent_free(calendar); icalmemory_free_ring(); return incidence; } bool ICalFormat::fromRawString(const Calendar::Ptr &cal, const QByteArray &string, bool deleted, const QString ¬ebook) { Q_UNUSED(notebook); // Get first VCALENDAR component. // TODO: Handle more than one VCALENDAR or non-VCALENDAR top components icalcomponent *calendar; // Let's defend const correctness until the very gates of hell^Wlibical calendar = icalcomponent_new_from_string(const_cast(string.constData())); if (!calendar) { qCritical() << "parse error from icalcomponent_new_from_string. string=" << QString::fromLatin1(string); setException(new Exception(Exception::ParseErrorIcal)); return false; } bool success = true; if (icalcomponent_isa(calendar) == ICAL_XROOT_COMPONENT) { icalcomponent *comp; for (comp = icalcomponent_get_first_component(calendar, ICAL_VCALENDAR_COMPONENT); comp; comp = icalcomponent_get_next_component(calendar, ICAL_VCALENDAR_COMPONENT)) { // put all objects into their proper places if (!d->mImpl->populate(cal, comp, deleted)) { qCritical() << "Could not populate calendar"; if (!exception()) { setException(new Exception(Exception::ParseErrorKcal)); } success = false; } else { setLoadedProductId(d->mImpl->loadedProductId()); } } } else if (icalcomponent_isa(calendar) != ICAL_VCALENDAR_COMPONENT) { qDebug() << "No VCALENDAR component found"; setException(new Exception(Exception::NoCalendar)); success = false; } else { // put all objects into their proper places if (!d->mImpl->populate(cal, calendar, deleted)) { qDebug() << "Could not populate calendar"; if (!exception()) { setException(new Exception(Exception::ParseErrorKcal)); } success = false; } else { setLoadedProductId(d->mImpl->loadedProductId()); } } icalcomponent_free(calendar); icalmemory_free_ring(); return success; } Incidence::Ptr ICalFormat::fromString(const QString &string) { MemoryCalendar::Ptr cal(new MemoryCalendar(d->mTimeZone)); fromString(cal, string); const Incidence::List list = cal->incidences(); return !list.isEmpty() ? list.first() : Incidence::Ptr(); } QString ICalFormat::toString(const Calendar::Ptr &cal, const QString ¬ebook, bool deleted) { icalcomponent *calendar = d->mImpl->createCalendarComponent(cal); icalcomponent *component; QVector tzUsedList; TimeZoneEarliestDate earliestTz; // todos Todo::List todoList = deleted ? cal->deletedTodos() : cal->rawTodos(); for (auto it = todoList.cbegin(), end = todoList.cend(); it != end; ++it) { if (!deleted || !cal->todo((*it)->uid(), (*it)->recurrenceId())) { // use existing ones, or really deleted ones if (notebook.isEmpty() || (!cal->notebook(*it).isEmpty() && notebook.endsWith(cal->notebook(*it)))) { component = d->mImpl->writeTodo(*it, &tzUsedList); icalcomponent_add_component(calendar, component); ICalTimeZoneParser::updateTzEarliestDate((*it), &earliestTz); } } } // events Event::List events = deleted ? cal->deletedEvents() : cal->rawEvents(); for (auto it = events.cbegin(), end = events.cend(); it != end; ++it) { if (!deleted || !cal->event((*it)->uid(), (*it)->recurrenceId())) { // use existing ones, or really deleted ones if (notebook.isEmpty() || (!cal->notebook(*it).isEmpty() && notebook.endsWith(cal->notebook(*it)))) { component = d->mImpl->writeEvent(*it, &tzUsedList); icalcomponent_add_component(calendar, component); ICalTimeZoneParser::updateTzEarliestDate((*it), &earliestTz); } } } // journals Journal::List journals = deleted ? cal->deletedJournals() : cal->rawJournals(); for (auto it = journals.cbegin(), end = journals.cend(); it != end; ++it) { if (!deleted || !cal->journal((*it)->uid(), (*it)->recurrenceId())) { // use existing ones, or really deleted ones if (notebook.isEmpty() || (!cal->notebook(*it).isEmpty() && notebook.endsWith(cal->notebook(*it)))) { component = d->mImpl->writeJournal(*it, &tzUsedList); icalcomponent_add_component(calendar, component); ICalTimeZoneParser::updateTzEarliestDate((*it), &earliestTz); } } } // time zones if (todoList.isEmpty() && events.isEmpty() && journals.isEmpty()) { // no incidences means no used timezones, use all timezones // this will export a calendar having only timezone definitions tzUsedList = cal->d->mTimeZones; } for (const auto &qtz : qAsConst(tzUsedList)) { if (qtz != QTimeZone::utc()) { icaltimezone *tz = ICalTimeZoneParser::icaltimezoneFromQTimeZone(qtz, earliestTz[qtz]); if (!tz) { qCritical() << "bad time zone"; } else { component = icalcomponent_new_clone(icaltimezone_get_component(tz)); icalcomponent_add_component(calendar, component); icaltimezone_free(tz, 1); } } } char *const componentString = icalcomponent_as_ical_string_r(calendar); const QString &text = QString::fromUtf8(componentString); free(componentString); icalcomponent_free(calendar); icalmemory_free_ring(); if (text.isEmpty()) { setException(new Exception(Exception::LibICalError)); } return text; } QString ICalFormat::toICalString(const Incidence::Ptr &incidence) { MemoryCalendar::Ptr cal(new MemoryCalendar(d->mTimeZone)); cal->addIncidence(Incidence::Ptr(incidence->clone())); return toString(cal.staticCast()); } QString ICalFormat::toString(const Incidence::Ptr &incidence) { return QString::fromUtf8(toRawString(incidence)); } QByteArray ICalFormat::toRawString(const Incidence::Ptr &incidence) { TimeZoneList tzUsedList; icalcomponent *component = d->mImpl->writeIncidence(incidence, iTIPRequest, &tzUsedList); QByteArray text = icalcomponent_as_ical_string(component); TimeZoneEarliestDate earliestTzDt; ICalTimeZoneParser::updateTzEarliestDate(incidence, &earliestTzDt); // time zones for (const auto &qtz : qAsConst(tzUsedList)) { if (qtz != QTimeZone::utc()) { icaltimezone *tz = ICalTimeZoneParser::icaltimezoneFromQTimeZone(qtz, earliestTzDt[qtz]); if (!tz) { qCritical() << "bad time zone"; } else { icalcomponent *tzcomponent = icaltimezone_get_component(tz); icalcomponent_add_component(component, component); text.append(icalcomponent_as_ical_string(tzcomponent)); icaltimezone_free(tz, 1); } } } icalcomponent_free(component); return text; } QString ICalFormat::toString(RecurrenceRule *recurrence) { icalproperty *property = icalproperty_new_rrule(d->mImpl->writeRecurrenceRule(recurrence)); QString text = QString::fromUtf8(icalproperty_as_ical_string(property)); icalproperty_free(property); return text; } bool ICalFormat::fromString(RecurrenceRule *recurrence, const QString &rrule) { if (!recurrence) { return false; } bool success = true; icalerror_clear_errno(); struct icalrecurrencetype recur = icalrecurrencetype_from_string(rrule.toLatin1().constData()); if (icalerrno != ICAL_NO_ERROR) { qDebug() << "Recurrence parsing error:" << icalerror_strerror(icalerrno); success = false; } if (success) { d->mImpl->readRecurrence(recur, recurrence); } return success; } QString ICalFormat::createScheduleMessage(const IncidenceBase::Ptr &incidence, iTIPMethod method) { icalcomponent *message = nullptr; if (incidence->type() == Incidence::TypeEvent || incidence->type() == Incidence::TypeTodo) { Incidence::Ptr i = incidence.staticCast(); // Recurring events need timezone information to allow proper calculations // across timezones with different DST. const bool useUtcTimes = !i->recurs(); const bool hasSchedulingId = (i->schedulingID() != i->uid()); const bool incidenceNeedChanges = (useUtcTimes || hasSchedulingId); if (incidenceNeedChanges) { // The incidence need changes, so clone it before we continue i = Incidence::Ptr(i->clone()); // Handle conversion to UTC times if (useUtcTimes) { i->shiftTimes(QTimeZone::utc(), QTimeZone::utc()); } // Handle scheduling ID being present if (hasSchedulingId) { // We have a separation of scheduling ID and UID i->setSchedulingID(QString(), i->schedulingID()); } // Build the message with the cloned incidence message = d->mImpl->createScheduleComponent(i, method); } } if (message == nullptr) { message = d->mImpl->createScheduleComponent(incidence, method); } QString messageText = QString::fromUtf8(icalcomponent_as_ical_string(message)); icalcomponent_free(message); return messageText; } FreeBusy::Ptr ICalFormat::parseFreeBusy(const QString &str) { clearException(); icalcomponent *message = icalparser_parse_string(str.toUtf8().constData()); if (!message) { return FreeBusy::Ptr(); } FreeBusy::Ptr freeBusy; icalcomponent *c = nullptr; for (c = icalcomponent_get_first_component(message, ICAL_VFREEBUSY_COMPONENT); c != nullptr; c = icalcomponent_get_next_component(message, ICAL_VFREEBUSY_COMPONENT)) { FreeBusy::Ptr fb = d->mImpl->readFreeBusy(c); if (freeBusy) { freeBusy->merge(fb); } else { freeBusy = fb; } } if (!freeBusy) { qDebug() << "object is not a freebusy."; } icalcomponent_free(message); return freeBusy; } ScheduleMessage::Ptr ICalFormat::parseScheduleMessage(const Calendar::Ptr &cal, const QString &messageText) { setTimeZone(cal->timeZone()); clearException(); if (messageText.isEmpty()) { setException(new Exception(Exception::ParseErrorEmptyMessage)); return ScheduleMessage::Ptr(); } icalcomponent *message = icalparser_parse_string(messageText.toUtf8().constData()); if (!message) { setException(new Exception(Exception::ParseErrorUnableToParse)); return ScheduleMessage::Ptr(); } icalproperty *m = icalcomponent_get_first_property(message, ICAL_METHOD_PROPERTY); if (!m) { setException(new Exception(Exception::ParseErrorMethodProperty)); return ScheduleMessage::Ptr(); } // Populate the message's time zone collection with all VTIMEZONE components ICalTimeZoneCache tzlist; ICalTimeZoneParser parser(&tzlist); parser.parse(message); IncidenceBase::Ptr incidence; icalcomponent *c = icalcomponent_get_first_component(message, ICAL_VEVENT_COMPONENT); if (c) { incidence = d->mImpl->readEvent(c, &tzlist).staticCast(); } if (!incidence) { c = icalcomponent_get_first_component(message, ICAL_VTODO_COMPONENT); if (c) { incidence = d->mImpl->readTodo(c, &tzlist).staticCast(); } } if (!incidence) { c = icalcomponent_get_first_component(message, ICAL_VJOURNAL_COMPONENT); if (c) { incidence = d->mImpl->readJournal(c, &tzlist).staticCast(); } } if (!incidence) { c = icalcomponent_get_first_component(message, ICAL_VFREEBUSY_COMPONENT); if (c) { incidence = d->mImpl->readFreeBusy(c).staticCast(); } } if (!incidence) { qDebug() << "object is not a freebusy, event, todo or journal"; setException(new Exception(Exception::ParseErrorNotIncidence)); return ScheduleMessage::Ptr(); } icalproperty_method icalmethod = icalproperty_get_method(m); iTIPMethod method; switch (icalmethod) { case ICAL_METHOD_PUBLISH: method = iTIPPublish; break; case ICAL_METHOD_REQUEST: method = iTIPRequest; break; case ICAL_METHOD_REFRESH: method = iTIPRefresh; break; case ICAL_METHOD_CANCEL: method = iTIPCancel; break; case ICAL_METHOD_ADD: method = iTIPAdd; break; case ICAL_METHOD_REPLY: method = iTIPReply; break; case ICAL_METHOD_COUNTER: method = iTIPCounter; break; case ICAL_METHOD_DECLINECOUNTER: method = iTIPDeclineCounter; break; default: method = iTIPNoMethod; qDebug() << "Unknown method"; break; } if (!icalrestriction_check(message)) { qWarning() << "\nkcalcore library reported a problem while parsing:"; qWarning() << ScheduleMessage::methodName(method) << ":" << d->mImpl->extractErrorProperty(c); } Incidence::Ptr existingIncidence = cal->incidence(incidence->uid()); icalcomponent *calendarComponent = nullptr; if (existingIncidence) { calendarComponent = d->mImpl->createCalendarComponent(cal); // TODO: check, if cast is required, or if it can be done by virtual funcs. // TODO: Use a visitor for this! if (existingIncidence->type() == Incidence::TypeTodo) { Todo::Ptr todo = existingIncidence.staticCast(); icalcomponent_add_component(calendarComponent, d->mImpl->writeTodo(todo)); } if (existingIncidence->type() == Incidence::TypeEvent) { Event::Ptr event = existingIncidence.staticCast(); icalcomponent_add_component(calendarComponent, d->mImpl->writeEvent(event)); } } else { icalcomponent_free(message); return ScheduleMessage::Ptr(new ScheduleMessage(incidence, method, ScheduleMessage::Unknown)); } icalproperty_xlicclass result = icalclassify(message, calendarComponent, static_cast("")); ScheduleMessage::Status status; switch (result) { case ICAL_XLICCLASS_PUBLISHNEW: status = ScheduleMessage::PublishNew; break; case ICAL_XLICCLASS_PUBLISHUPDATE: status = ScheduleMessage::PublishUpdate; break; case ICAL_XLICCLASS_OBSOLETE: status = ScheduleMessage::Obsolete; break; case ICAL_XLICCLASS_REQUESTNEW: status = ScheduleMessage::RequestNew; break; case ICAL_XLICCLASS_REQUESTUPDATE: status = ScheduleMessage::RequestUpdate; break; case ICAL_XLICCLASS_UNKNOWN: default: status = ScheduleMessage::Unknown; break; } icalcomponent_free(message); icalcomponent_free(calendarComponent); return ScheduleMessage::Ptr(new ScheduleMessage(incidence, method, status)); } void ICalFormat::setTimeZone(const QTimeZone &timeZone) { d->mTimeZone = timeZone; } QTimeZone ICalFormat::timeZone() const { return d->mTimeZone; } QByteArray ICalFormat::timeZoneId() const { return d->mTimeZone.id(); } void ICalFormat::virtual_hook(int id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/icalformat.h000066400000000000000000000156771473346337000236500ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the ICalFormat class. 该文件是用于处理日历数据的API的一部分,并定义了ICalFormat类。 @author Cornelius Schumacher \ */ #ifndef KCALCORE_ICALFORMAT_H #define KCALCORE_ICALFORMAT_H #include "calformat.h" #include "freebusy.h" #include "incidence.h" #include "schedulemessage.h" namespace KCalendarCore { class FreeBusy; class Incidence; class IncidenceBase; class RecurrenceRule; /** @brief iCalendar format implementation. This class implements the iCalendar format. It provides methods for loading/saving/converting iCalendar format data into the internal representation as Calendar and Incidences. @warning When importing/loading to a Calendar, there is only duplicate check if those Incidences are loaded into the Calendar. If they are not loaded it will create duplicates. */ class Q_CORE_EXPORT ICalFormat : public CalFormat { public: /** Constructor a new iCalendar Format object. */ ICalFormat(); /** Destructor. */ ~ICalFormat() override; /** @copydoc CalFormat::load() */ bool load(const Calendar::Ptr &calendar, const QString &fileName) override; /** @copydoc CalFormat::save() */ bool save(const Calendar::Ptr &calendar, const QString &fileName) override; /** @copydoc CalFormat::fromString() @note The notebook is ignored and the default one is used */ bool fromString(const Calendar::Ptr &calendar, const QString &string, bool deleted = false, const QString ¬ebook = QString()) override; /** Parses a string, returning the first iCal component as an Incidence. 解析字符串,将第一个iCal组件作为关联返回。 @param string is a QString containing the data to be parsed. @return non-zero pointer if the parsing was successful; 0 otherwise. @see fromString(const Calendar::Ptr &, const QString &), fromRawString() */ Incidence::Ptr fromString(const QString &string); /** Parses a bytearray, returning the first iCal component as an Incidence, ignoring timezone information. 解析字节数组,将第一个iCal组件作为关联返回,忽略时区信息。 This function is significantly faster than fromString by avoiding the overhead of parsing timezone information. Timezones are instead solely interpreted by using system-timezones. @param string is a utf8 QByteArray containing the data to be parsed. @return non-zero pointer if the parsing was successful; 0 otherwise. @see fromString(const QString &), fromRawString() */ Incidence::Ptr readIncidence(const QByteArray &string); /** Parses a string and fills a RecurrenceRule object with the information. 解析字符串并用信息填充RecurrenceRule对象。 @param rule is a pointer to a RecurrenceRule object. @param string is a QString containing the data to be parsed. @return true if successful; false otherwise. */ Q_REQUIRED_RESULT bool fromString(RecurrenceRule *rule, const QString &string); /** @copydoc CalFormat::fromRawString() */ Q_REQUIRED_RESULT bool fromRawString(const Calendar::Ptr &calendar, const QByteArray &string, bool deleted = false, const QString ¬ebook = QString()) override; /** @copydoc CalFormat::toString() */ Q_REQUIRED_RESULT QString toString(const Calendar::Ptr &calendar, const QString ¬ebook = QString(), bool deleted = false) override; /** Converts an Incidence to a QString. @param incidence is a pointer to an Incidence object to be converted into a QString. @return the QString will be Null if the conversion was unsuccessful. */ Q_REQUIRED_RESULT QString toString(const Incidence::Ptr &incidence); /** Converts an Incidence to a QByteArray. @param incidence is a pointer to an Incidence object to be converted into a QByteArray. @return the QString will be Null if the conversion was unsuccessful. @since 4.7 */ Q_REQUIRED_RESULT QByteArray toRawString(const Incidence::Ptr &incidence); /** Converts a RecurrenceRule to a QString. @param rule is a pointer to a RecurrenceRule object to be converted into a QString. @return the QString will be Null if the conversion was unsuccessful. */ Q_REQUIRED_RESULT QString toString(RecurrenceRule *rule); /** Converts an Incidence to iCalendar formatted text. @param incidence is a pointer to an Incidence object to be converted into iCal formatted text. @return the QString will be Null if the conversion was unsuccessful. */ Q_REQUIRED_RESULT QString toICalString(const Incidence::Ptr &incidence); /** Creates a scheduling message string for an Incidence. @param incidence is a pointer to an IncidenceBase object to be scheduled. @param method is a Scheduler::Method @return a QString containing the message if successful; 0 otherwise. */ Q_REQUIRED_RESULT QString createScheduleMessage(const IncidenceBase::Ptr &incidence, iTIPMethod method); /** Parses a Calendar scheduling message string into ScheduleMessage object. @param calendar is a pointer to a Calendar object associated with the scheduling message. @param string is a QString containing the data to be parsed. @return a pointer to a ScheduleMessage object if successful; 0 otherwise. The calling routine may later free the return memory. */ ScheduleMessage::Ptr parseScheduleMessage(const Calendar::Ptr &calendar, const QString &string); /** Converts a QString into a FreeBusy object. @param string is a QString containing the data to be parsed. @return a pointer to a FreeBusy object if successful; 0 otherwise. @note Do not attempt to free the FreeBusy memory from the calling routine. */ FreeBusy::Ptr parseFreeBusy(const QString &string); /** Sets the iCalendar time zone. @param timeZone is the time zone to set. @see timeZone(). */ void setTimeZone(const QTimeZone &timeZone); /** Returns the iCalendar time zone. @see setTimeZone(). */ Q_REQUIRED_RESULT QTimeZone timeZone() const; /** Returns the timezone id string used by the iCalendar; an empty string if the iCalendar does not have a timezone. */ Q_REQUIRED_RESULT QByteArray timeZoneId() const; protected: /** @copydoc IncidenceBase::virtual_hook() */ void virtual_hook(int id, void *data) override; private: //@cond PRIVATE Q_DISABLE_COPY(ICalFormat) class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/icalformat_p.cpp000066400000000000000000003175471473346337000245230ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2006 David Jarvie SPDX-FileCopyrightText: 2012 Christian Mollekopf SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the internal ICalFormat classes. @brief This class provides the libical dependent functions for ICalFormat. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ @author David Jarvie \ */ #include "icalformat_p.h" #include "compat_p.h" #include "icalformat.h" #include "icaltimezones_p.h" #include "incidencebase.h" #include "memorycalendar.h" #include "visitor.h" #include #include #include using namespace KCalendarCore; static const char APP_NAME_FOR_XPROPERTIES[] = "KCALCORE"; static const char ENABLED_ALARM_XPROPERTY[] = "ENABLED"; static const char IMPLEMENTATION_VERSION_XPROPERTY[] = "X-KDE-ICAL-IMPLEMENTATION-VERSION"; //EVENT农历日程标识 static const char VEVENT_LUNNAR_XPROPERTY[] = "X-DDE-ICAL-LUNNAR"; /* Static helpers */ /* static void _dumpIcaltime( const icaltimetype& t) { qDebug() << "--- Y:" << t.year << "M:" << t.month << "D:" << t.day; qDebug() << "--- H:" << t.hour << "M:" << t.minute << "S:" << t.second; qDebug() << "--- isUtc:" << icaltime_is_utc( t ); qDebug() << "--- zoneId:" << icaltimezone_get_tzid( const_cast( t.zone ) ); } */ //@cond PRIVATE template void removeAllICal(QVector> &c, const QSharedPointer &x) { if (c.count() < 1) { return; } int cnt = c.count(x); if (cnt != 1) { qCritical() << "There number of relatedTos for this incidence is " << cnt << " (there must be 1 relatedTo only)"; Q_ASSERT_X(false, "removeAllICal", "Count is not 1."); return; } c.remove(c.indexOf(x)); } const int gSecondsPerMinute = 60; const int gSecondsPerHour = gSecondsPerMinute * 60; const int gSecondsPerDay = gSecondsPerHour * 24; const int gSecondsPerWeek = gSecondsPerDay * 7; class ToComponentVisitor : public Visitor { public: ToComponentVisitor(ICalFormatImpl *impl, iTIPMethod m, TimeZoneList *tzUsedList = nullptr) : mImpl(impl) , mComponent(nullptr) , mMethod(m) , mTzUsedList(tzUsedList) { } ~ToComponentVisitor(); bool visit(const Event::Ptr &e) override { mComponent = mImpl->writeEvent(e, mTzUsedList); return true; } bool visit(const Todo::Ptr &t) override { mComponent = mImpl->writeTodo(t, mTzUsedList); return true; } bool visit(const Journal::Ptr &j) override { mComponent = mImpl->writeJournal(j, mTzUsedList); return true; } bool visit(const FreeBusy::Ptr &fb) override { mComponent = mImpl->writeFreeBusy(fb, mMethod); return true; } icalcomponent *component() { return mComponent; } private: ICalFormatImpl *mImpl = nullptr; icalcomponent *mComponent = nullptr; iTIPMethod mMethod; TimeZoneList *mTzUsedList = nullptr; }; ToComponentVisitor::~ToComponentVisitor() { } class Q_DECL_HIDDEN ICalFormatImpl::Private { public: Private(ICalFormatImpl *impl, ICalFormat *parent) : mImpl(impl) , mParent(parent) , mCompat(new Compat) { } ~Private() { delete mCompat; } void writeIncidenceBase(icalcomponent *parent, const IncidenceBase::Ptr &); void readIncidenceBase(icalcomponent *parent, const IncidenceBase::Ptr &); void writeCustomProperties(icalcomponent *parent, CustomProperties *); void readCustomProperties(icalcomponent *parent, CustomProperties *); ICalFormatImpl *mImpl = nullptr; ICalFormat *mParent = nullptr; QString mLoadedProductId; // PRODID string loaded from calendar file Event::List mEventsRelate; // events with relations Todo::List mTodosRelate; // todos with relations Compat *mCompat = nullptr; }; //@endcond inline icaltimetype ICalFormatImpl::writeICalUtcDateTime(const QDateTime &dt, bool dayOnly) { return writeICalDateTime(dt.toUTC(), dayOnly); } ICalFormatImpl::ICalFormatImpl(ICalFormat *parent) : d(new Private(this, parent)) { } ICalFormatImpl::~ICalFormatImpl() { delete d; } QString ICalFormatImpl::loadedProductId() const { return d->mLoadedProductId; } icalcomponent *ICalFormatImpl::writeIncidence(const IncidenceBase::Ptr &incidence, iTIPMethod method, TimeZoneList *tzUsedList) { ToComponentVisitor v(this, method, tzUsedList); if (incidence->accept(v, incidence)) { return v.component(); } else { return nullptr; } } icalcomponent *ICalFormatImpl::writeTodo(const Todo::Ptr &todo, TimeZoneList *tzUsedList) { icalcomponent *vtodo = icalcomponent_new(ICAL_VTODO_COMPONENT); writeIncidence(vtodo, todo.staticCast(), tzUsedList); // due date icalproperty *prop; if (todo->hasDueDate()) { icaltimetype due; if (todo->allDay()) { due = writeICalDate(todo->dtDue(true).date()); prop = icalproperty_new_due(due); } else { prop = writeICalDateTimeProperty(ICAL_DUE_PROPERTY, todo->dtDue(true), tzUsedList); } icalcomponent_add_property(vtodo, prop); } // start time if (todo->hasStartDate()) { icaltimetype start; if (todo->allDay()) { start = writeICalDate(todo->dtStart(true).date()); prop = icalproperty_new_dtstart(start); } else { prop = writeICalDateTimeProperty(ICAL_DTSTART_PROPERTY, todo->dtStart(true), tzUsedList); } icalcomponent_add_property(vtodo, prop); } // completion date (UTC) if (todo->isCompleted()) { if (!todo->hasCompletedDate()) { // If the todo was created by KOrganizer<2.2 it does not have // a correct completion date. Set one now. todo->setCompleted(QDateTime::currentDateTimeUtc()); } icaltimetype completed = writeICalUtcDateTime(todo->completed()); icalcomponent_add_property(vtodo, icalproperty_new_completed(completed)); } icalcomponent_add_property(vtodo, icalproperty_new_percentcomplete(todo->percentComplete())); if (todo->isCompleted()) { if (icalcomponent_count_properties(vtodo, ICAL_STATUS_PROPERTY)) { icalproperty *p = icalcomponent_get_first_property(vtodo, ICAL_STATUS_PROPERTY); icalcomponent_remove_property(vtodo, p); icalproperty_free(p); } icalcomponent_add_property(vtodo, icalproperty_new_status(ICAL_STATUS_COMPLETED)); } if (todo->recurs() && todo->dtStart(false).isValid()) { prop = writeICalDateTimeProperty(ICAL_X_PROPERTY, todo->dtStart(false), tzUsedList); icalproperty_set_x_name(prop, "X-KDE-LIBKCAL-DTRECURRENCE"); icalcomponent_add_property(vtodo, prop); } return vtodo; } icalcomponent *ICalFormatImpl::writeEvent(const Event::Ptr &event, TimeZoneList *tzUsedList) { icalcomponent *vevent = icalcomponent_new(ICAL_VEVENT_COMPONENT); writeIncidence(vevent, event.staticCast(), tzUsedList); // start time icalproperty *prop = nullptr; icaltimetype start; QDateTime dt = event->dtStart(); if (dt.isValid()) { if (event->allDay()) { start = writeICalDate(event->dtStart().date()); prop = icalproperty_new_dtstart(start); } else { prop = writeICalDateTimeProperty(ICAL_DTSTART_PROPERTY, event->dtStart(), tzUsedList); } icalcomponent_add_property(vevent, prop); } if (event->hasEndDate()) { // End time. // RFC2445 says that if DTEND is present, it has to be greater than DTSTART. icaltimetype end; QDateTime dt = event->dtEnd(); if (event->allDay()) { // +1 day because end date is non-inclusive. end = writeICalDate(dt.date().addDays(1)); icalcomponent_add_property(vevent, icalproperty_new_dtend(end)); } else { if (dt != event->dtStart()) { icalcomponent_add_property(vevent, writeICalDateTimeProperty(ICAL_DTEND_PROPERTY, dt, tzUsedList)); } } } // TODO: resources #if 0 // resources QStringList tmpStrList = anEvent->resources(); QString tmpStr = tmpStrList.join(";"); if (!tmpStr.isEmpty()) { addPropValue(vevent, VCResourcesProp, tmpStr.toUtf8()); } #endif // Transparency switch (event->transparency()) { case Event::Transparent: icalcomponent_add_property(vevent, icalproperty_new_transp(ICAL_TRANSP_TRANSPARENT)); break; case Event::Opaque: icalcomponent_add_property(vevent, icalproperty_new_transp(ICAL_TRANSP_OPAQUE)); break; } //农历 if (event->lunnar()) { event->setNonKDECustomProperty(VEVENT_LUNNAR_XPROPERTY, QStringLiteral("TRUE")); } // Custom properties const QMap custom = event->customProperties(); for (QMap::ConstIterator c = custom.begin(); c != custom.end(); ++c) { icalproperty *p = icalproperty_new_x(c.value().toUtf8().constData()); icalproperty_set_x_name(p, c.key().constData()); icalcomponent_add_property(vevent, p); } return vevent; } icalcomponent *ICalFormatImpl::writeFreeBusy(const FreeBusy::Ptr &freebusy, iTIPMethod method) { icalcomponent *vfreebusy = icalcomponent_new(ICAL_VFREEBUSY_COMPONENT); d->writeIncidenceBase(vfreebusy, freebusy.staticCast()); icalcomponent_add_property(vfreebusy, icalproperty_new_dtstart(writeICalUtcDateTime(freebusy->dtStart()))); icalcomponent_add_property(vfreebusy, icalproperty_new_dtend(writeICalUtcDateTime(freebusy->dtEnd()))); Q_UNUSED(method); icalcomponent_add_property(vfreebusy, icalproperty_new_uid(freebusy->uid().toUtf8().constData())); // Loops through all the periods in the freebusy object FreeBusyPeriod::List list = freebusy->fullBusyPeriods(); icalperiodtype period = icalperiodtype_null_period(); for (int i = 0, count = list.count(); i < count; ++i) { const FreeBusyPeriod fbPeriod = list[i]; period.start = writeICalUtcDateTime(fbPeriod.start()); if (fbPeriod.hasDuration()) { period.duration = writeICalDuration(fbPeriod.duration()); } else { period.end = writeICalUtcDateTime(fbPeriod.end()); } icalproperty *property = icalproperty_new_freebusy(period); icalparameter_fbtype fbType; switch (fbPeriod.type()) { case FreeBusyPeriod::Free: fbType = ICAL_FBTYPE_FREE; break; case FreeBusyPeriod::Busy: fbType = ICAL_FBTYPE_BUSY; break; case FreeBusyPeriod::BusyTentative: fbType = ICAL_FBTYPE_BUSYTENTATIVE; break; case FreeBusyPeriod::BusyUnavailable: fbType = ICAL_FBTYPE_BUSYUNAVAILABLE; break; case FreeBusyPeriod::Unknown: fbType = ICAL_FBTYPE_X; break; default: fbType = ICAL_FBTYPE_NONE; break; } icalproperty_set_parameter(property, icalparameter_new_fbtype(fbType)); if (!fbPeriod.summary().isEmpty()) { icalparameter *param = icalparameter_new_x("X-SUMMARY"); icalparameter_set_xvalue(param, fbPeriod.summary().toUtf8().toBase64().constData()); icalproperty_set_parameter(property, param); } if (!fbPeriod.location().isEmpty()) { icalparameter *param = icalparameter_new_x("X-LOCATION"); icalparameter_set_xvalue(param, fbPeriod.location().toUtf8().toBase64().constData()); icalproperty_set_parameter(property, param); } icalcomponent_add_property(vfreebusy, property); } return vfreebusy; } icalcomponent *ICalFormatImpl::writeJournal(const Journal::Ptr &journal, TimeZoneList *tzUsedList) { icalcomponent *vjournal = icalcomponent_new(ICAL_VJOURNAL_COMPONENT); writeIncidence(vjournal, journal.staticCast(), tzUsedList); // start time icalproperty *prop = nullptr; QDateTime dt = journal->dtStart(); if (dt.isValid()) { icaltimetype start; if (journal->allDay()) { start = writeICalDate(dt.date()); prop = icalproperty_new_dtstart(start); } else { prop = writeICalDateTimeProperty(ICAL_DTSTART_PROPERTY, dt, tzUsedList); } icalcomponent_add_property(vjournal, prop); } return vjournal; } void ICalFormatImpl::writeIncidence(icalcomponent *parent, const Incidence::Ptr &incidence, TimeZoneList *tzUsedList) { if (incidence->schedulingID() != incidence->uid()) { // We need to store the UID in here. The rawSchedulingID will // go into the iCal UID component incidence->setCustomProperty("LIBKCAL", "ID", incidence->uid()); } else { incidence->removeCustomProperty("LIBKCAL", "ID"); } d->writeIncidenceBase(parent, incidence.staticCast()); // creation date in storage icalcomponent_add_property(parent, writeICalDateTimeProperty(ICAL_CREATED_PROPERTY, incidence->created())); // unique id // If the scheduling ID is different from the real UID, the real // one is stored on X-REALID above if (!incidence->schedulingID().isEmpty()) { icalcomponent_add_property(parent, icalproperty_new_uid(incidence->schedulingID().toUtf8().constData())); } // revision if (incidence->revision() > 0) { // 0 is default, so don't write that out icalcomponent_add_property(parent, icalproperty_new_sequence(incidence->revision())); } // last modification date if (incidence->lastModified().isValid()) { icalcomponent_add_property(parent, writeICalDateTimeProperty(ICAL_LASTMODIFIED_PROPERTY, incidence->lastModified())); } // description if (!incidence->description().isEmpty()) { icalcomponent_add_property(parent, writeDescription(incidence->description(), incidence->descriptionIsRich())); } // summary if (!incidence->summary().isEmpty()) { icalcomponent_add_property(parent, writeSummary(incidence->summary(), incidence->summaryIsRich())); } // location if (!incidence->location().isEmpty()) { icalcomponent_add_property(parent, writeLocation(incidence->location(), incidence->locationIsRich())); } // status icalproperty_status status = ICAL_STATUS_NONE; switch (incidence->status()) { case Incidence::StatusTentative: status = ICAL_STATUS_TENTATIVE; break; case Incidence::StatusConfirmed: status = ICAL_STATUS_CONFIRMED; break; case Incidence::StatusCompleted: status = ICAL_STATUS_COMPLETED; break; case Incidence::StatusNeedsAction: status = ICAL_STATUS_NEEDSACTION; break; case Incidence::StatusCanceled: status = ICAL_STATUS_CANCELLED; break; case Incidence::StatusInProcess: status = ICAL_STATUS_INPROCESS; break; case Incidence::StatusDraft: status = ICAL_STATUS_DRAFT; break; case Incidence::StatusFinal: status = ICAL_STATUS_FINAL; break; case Incidence::StatusX: { icalproperty *p = icalproperty_new_status(ICAL_STATUS_X); icalvalue_set_x(icalproperty_get_value(p), incidence->customStatus().toUtf8().constData()); icalcomponent_add_property(parent, p); break; } case Incidence::StatusNone: default: break; } if (status != ICAL_STATUS_NONE) { icalcomponent_add_property(parent, icalproperty_new_status(status)); } // secrecy icalproperty_class secClass; switch (incidence->secrecy()) { case Incidence::SecrecyPublic: secClass = ICAL_CLASS_PUBLIC; break; case Incidence::SecrecyConfidential: secClass = ICAL_CLASS_CONFIDENTIAL; break; case Incidence::SecrecyPrivate: default: secClass = ICAL_CLASS_PRIVATE; break; } if (secClass != ICAL_CLASS_PUBLIC) { icalcomponent_add_property(parent, icalproperty_new_class(secClass)); } // color if (!incidence->color().isEmpty()) { icalcomponent_add_property(parent, icalproperty_new_color(incidence->color().toUtf8().constData())); } // geo if (incidence->hasGeo()) { icalgeotype geo; geo.lat = incidence->geoLatitude(); geo.lon = incidence->geoLongitude(); icalcomponent_add_property(parent, icalproperty_new_geo(geo)); } // priority if (incidence->priority() > 0) { // 0 is undefined priority icalcomponent_add_property(parent, icalproperty_new_priority(incidence->priority())); } // categories QString categories = incidence->categories().join(QLatin1Char(',')); if (!categories.isEmpty()) { icalcomponent_add_property(parent, icalproperty_new_categories(categories.toUtf8().constData())); } // related event if (!incidence->relatedTo().isEmpty()) { icalcomponent_add_property(parent, icalproperty_new_relatedto(incidence->relatedTo().toUtf8().constData())); } // recurrenceid if (incidence->hasRecurrenceId()) { icalproperty *p = writeICalDateTimeProperty(ICAL_RECURRENCEID_PROPERTY, incidence->recurrenceId(), tzUsedList); if (incidence->thisAndFuture()) { icalproperty_add_parameter(p, icalparameter_new_range(ICAL_RANGE_THISANDFUTURE)); } icalcomponent_add_property(parent, p); } RecurrenceRule::List rrules(incidence->recurrence()->rRules()); RecurrenceRule::List::ConstIterator rit; for (rit = rrules.constBegin(); rit != rrules.constEnd(); ++rit) { icalcomponent_add_property(parent, icalproperty_new_rrule(writeRecurrenceRule((*rit)))); } RecurrenceRule::List exrules(incidence->recurrence()->exRules()); RecurrenceRule::List::ConstIterator exit; for (exit = exrules.constBegin(); exit != exrules.constEnd(); ++exit) { icalcomponent_add_property(parent, icalproperty_new_exrule(writeRecurrenceRule((*exit)))); } DateList dateList = incidence->recurrence()->exDates(); DateList::ConstIterator exIt; for (exIt = dateList.constBegin(); exIt != dateList.constEnd(); ++exIt) { icalcomponent_add_property(parent, icalproperty_new_exdate(writeICalDate(*exIt))); } auto dateTimeList = incidence->recurrence()->exDateTimes(); for (auto extIt = dateTimeList.constBegin(); extIt != dateTimeList.constEnd(); ++extIt) { icalcomponent_add_property(parent, writeICalDateTimeProperty(ICAL_EXDATE_PROPERTY, *extIt, tzUsedList)); } dateList = incidence->recurrence()->rDates(); DateList::ConstIterator rdIt; for (rdIt = dateList.constBegin(); rdIt != dateList.constEnd(); ++rdIt) { icalcomponent_add_property(parent, icalproperty_new_rdate(writeICalDatePeriod(*rdIt))); } dateTimeList = incidence->recurrence()->rDateTimes(); for (auto rdtIt = dateTimeList.constBegin(); rdtIt != dateTimeList.constEnd(); ++rdtIt) { icalcomponent_add_property(parent, writeICalDateTimeProperty(ICAL_RDATE_PROPERTY, *rdtIt, tzUsedList)); } // attachments Attachment::List attachments = incidence->attachments(); Attachment::List::ConstIterator atIt; for (atIt = attachments.constBegin(); atIt != attachments.constEnd(); ++atIt) { icalcomponent_add_property(parent, writeAttachment(*atIt)); } // alarms auto alarms = incidence->alarms(); for (auto it = alarms.cbegin(), end = alarms.cend(); it != end; ++it) { icalcomponent_add_component(parent, writeAlarm(*it)); } // conferences const auto conferences = incidence->conferences(); for (const auto &conf : conferences) { icalcomponent_add_property(parent, writeConference(conf)); } // duration if (incidence->hasDuration()) { icaldurationtype duration; duration = writeICalDuration(incidence->duration()); icalcomponent_add_property(parent, icalproperty_new_duration(duration)); } } //@cond PRIVATE void ICalFormatImpl::Private::writeIncidenceBase(icalcomponent *parent, const IncidenceBase::Ptr &incidenceBase) { // organizer stuff if (!incidenceBase->organizer().isEmpty()) { icalproperty *p = mImpl->writeOrganizer(incidenceBase->organizer()); if (p) { icalcomponent_add_property(parent, p); } } icalcomponent_add_property(parent, icalproperty_new_dtstamp(writeICalUtcDateTime(incidenceBase->lastModified()))); // attendees if (incidenceBase->attendeeCount() > 0) { auto attendees = incidenceBase->attendees(); for (auto it = attendees.constBegin(); it != attendees.constEnd(); ++it) { icalproperty *p = mImpl->writeAttendee(*it); if (p) { icalcomponent_add_property(parent, p); } } } // contacts QStringList contacts = incidenceBase->contacts(); for (QStringList::const_iterator it = contacts.constBegin(); it != contacts.constEnd(); ++it) { icalcomponent_add_property(parent, icalproperty_new_contact((*it).toUtf8().constData())); } // comments QStringList comments = incidenceBase->comments(); for (QStringList::const_iterator it = comments.constBegin(); it != comments.constEnd(); ++it) { icalcomponent_add_property(parent, icalproperty_new_comment((*it).toUtf8().constData())); } // url const QUrl url = incidenceBase->url(); if (url.isValid()) { icalcomponent_add_property(parent, icalproperty_new_url(url.toString().toUtf8().constData())); } // custom properties writeCustomProperties(parent, incidenceBase.data()); } void ICalFormatImpl::Private::writeCustomProperties(icalcomponent *parent, CustomProperties *properties) { const QMap custom = properties->customProperties(); for (QMap::ConstIterator c = custom.begin(); c != custom.end(); ++c) { if (c.key().startsWith("X-KDE-VOLATILE")) { // krazy:exclude=strings // We don't write these properties to disk to disk continue; } icalproperty *p = icalproperty_new_x(c.value().toUtf8().constData()); QString parameters = properties->nonKDECustomPropertyParameters(c.key()); // Minimalist parameter handler: extract icalparameter's out of // the given input text (not really parsing as such) if (!parameters.isEmpty()) { const QStringList sl = parameters.split(QLatin1Char(';')); for (const QString ¶meter : sl) { icalparameter *param = icalparameter_new_from_string(parameter.toUtf8().constData()); if (param) { icalproperty_add_parameter(p, param); } } } icalproperty_set_x_name(p, c.key().constData()); icalcomponent_add_property(parent, p); } } //@endcond icalproperty *ICalFormatImpl::writeOrganizer(const Person &organizer) { if (organizer.email().isEmpty()) { return nullptr; } icalproperty *p = icalproperty_new_organizer(QByteArray(QByteArray("MAILTO:") + organizer.email().toUtf8()).constData()); if (!organizer.name().isEmpty()) { icalproperty_add_parameter(p, icalparameter_new_cn(organizer.name().toUtf8().constData())); } // TODO: Write dir, sent-by and language return p; } icalproperty *ICalFormatImpl::writeDescription(const QString &description, bool isRich) { icalproperty *p = icalproperty_new_description(description.toUtf8().constData()); if (isRich) { icalproperty_add_parameter(p, icalparameter_new_from_string("X-KDE-TEXTFORMAT=HTML")); } return p; } icalproperty *ICalFormatImpl::writeSummary(const QString &summary, bool isRich) { icalproperty *p = icalproperty_new_summary(summary.toUtf8().constData()); if (isRich) { icalproperty_add_parameter(p, icalparameter_new_from_string("X-KDE-TEXTFORMAT=HTML")); } return p; } icalproperty *ICalFormatImpl::writeLocation(const QString &location, bool isRich) { icalproperty *p = icalproperty_new_location(location.toUtf8().constData()); if (isRich) { icalproperty_add_parameter(p, icalparameter_new_from_string("X-KDE-TEXTFORMAT=HTML")); } return p; } icalproperty *ICalFormatImpl::writeAttendee(const Attendee &attendee) { if (attendee.email().isEmpty()) { return nullptr; } icalproperty *p = icalproperty_new_attendee(QByteArray(QByteArray("mailto:") + attendee.email().toUtf8()).constData()); if (!attendee.name().isEmpty()) { icalproperty_add_parameter(p, icalparameter_new_cn(attendee.name().toUtf8().constData())); } icalproperty_add_parameter(p, icalparameter_new_rsvp(attendee.RSVP() ? ICAL_RSVP_TRUE : ICAL_RSVP_FALSE)); icalparameter_partstat status = ICAL_PARTSTAT_NEEDSACTION; switch (attendee.status()) { default: case Attendee::NeedsAction: status = ICAL_PARTSTAT_NEEDSACTION; break; case Attendee::Accepted: status = ICAL_PARTSTAT_ACCEPTED; break; case Attendee::Declined: status = ICAL_PARTSTAT_DECLINED; break; case Attendee::Tentative: status = ICAL_PARTSTAT_TENTATIVE; break; case Attendee::Delegated: status = ICAL_PARTSTAT_DELEGATED; break; case Attendee::Completed: status = ICAL_PARTSTAT_COMPLETED; break; case Attendee::InProcess: status = ICAL_PARTSTAT_INPROCESS; break; } icalproperty_add_parameter(p, icalparameter_new_partstat(status)); icalparameter_role role = ICAL_ROLE_REQPARTICIPANT; switch (attendee.role()) { case Attendee::Chair: role = ICAL_ROLE_CHAIR; break; default: case Attendee::ReqParticipant: role = ICAL_ROLE_REQPARTICIPANT; break; case Attendee::OptParticipant: role = ICAL_ROLE_OPTPARTICIPANT; break; case Attendee::NonParticipant: role = ICAL_ROLE_NONPARTICIPANT; break; } icalproperty_add_parameter(p, icalparameter_new_role(role)); icalparameter_cutype cutype = ICAL_CUTYPE_INDIVIDUAL; switch (attendee.cuType()) { case Attendee::Unknown: cutype = ICAL_CUTYPE_UNKNOWN; break; default: case Attendee::Individual: cutype = ICAL_CUTYPE_INDIVIDUAL; break; case Attendee::Group: cutype = ICAL_CUTYPE_GROUP; break; case Attendee::Resource: cutype = ICAL_CUTYPE_RESOURCE; break; case Attendee::Room: cutype = ICAL_CUTYPE_ROOM; break; } icalproperty_add_parameter(p, icalparameter_new_cutype(cutype)); if (!attendee.uid().isEmpty()) { icalparameter *icalparameter_uid = icalparameter_new_x(attendee.uid().toUtf8().constData()); icalparameter_set_xname(icalparameter_uid, "X-UID"); icalproperty_add_parameter(p, icalparameter_uid); } if (!attendee.delegate().isEmpty()) { icalparameter *icalparameter_delegate = icalparameter_new_delegatedto(attendee.delegate().toUtf8().constData()); icalproperty_add_parameter(p, icalparameter_delegate); } if (!attendee.delegator().isEmpty()) { icalparameter *icalparameter_delegator = icalparameter_new_delegatedfrom(attendee.delegator().toUtf8().constData()); icalproperty_add_parameter(p, icalparameter_delegator); } return p; } icalproperty *ICalFormatImpl::writeAttachment(const Attachment &att) { icalattach *attach; if (att.isUri()) { attach = icalattach_new_from_url(att.uri().toUtf8().data()); } else { attach = icalattach_new_from_data((const char *)att.data().constData(), nullptr, nullptr); } icalproperty *p = icalproperty_new_attach(attach); icalattach_unref(attach); if (!att.mimeType().isEmpty()) { icalproperty_add_parameter(p, icalparameter_new_fmttype(att.mimeType().toUtf8().data())); } if (att.isBinary()) { icalproperty_add_parameter(p, icalparameter_new_value(ICAL_VALUE_BINARY)); icalproperty_add_parameter(p, icalparameter_new_encoding(ICAL_ENCODING_BASE64)); } if (att.showInline()) { icalparameter *icalparameter_inline = icalparameter_new_x("inline"); icalparameter_set_xname(icalparameter_inline, "X-CONTENT-DISPOSITION"); icalproperty_add_parameter(p, icalparameter_inline); } if (!att.label().isEmpty()) { icalparameter *icalparameter_label = icalparameter_new_x(att.label().toUtf8().constData()); icalparameter_set_xname(icalparameter_label, "X-LABEL"); icalproperty_add_parameter(p, icalparameter_label); } if (att.isLocal()) { icalparameter *icalparameter_local = icalparameter_new_x("local"); icalparameter_set_xname(icalparameter_local, "X-KONTACT-TYPE"); icalproperty_add_parameter(p, icalparameter_local); } return p; } icalrecurrencetype ICalFormatImpl::writeRecurrenceRule(RecurrenceRule *recur) { icalrecurrencetype r; icalrecurrencetype_clear(&r); switch (recur->recurrenceType()) { case RecurrenceRule::rSecondly: r.freq = ICAL_SECONDLY_RECURRENCE; break; case RecurrenceRule::rMinutely: r.freq = ICAL_MINUTELY_RECURRENCE; break; case RecurrenceRule::rHourly: r.freq = ICAL_HOURLY_RECURRENCE; break; case RecurrenceRule::rDaily: r.freq = ICAL_DAILY_RECURRENCE; break; case RecurrenceRule::rWeekly: r.freq = ICAL_WEEKLY_RECURRENCE; break; case RecurrenceRule::rMonthly: r.freq = ICAL_MONTHLY_RECURRENCE; break; case RecurrenceRule::rYearly: r.freq = ICAL_YEARLY_RECURRENCE; break; default: r.freq = ICAL_NO_RECURRENCE; qDebug() << "no recurrence"; break; } int index = 0; QList bys; QList::ConstIterator it; // Now write out the BY* parts: bys = recur->bySeconds(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { r.by_second[index++] = *it; r.by_second[index++] = static_cast(*it); } bys = recur->byMinutes(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { r.by_minute[index++] = *it; r.by_minute[index++] = static_cast(*it); } bys = recur->byHours(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { r.by_hour[index++] = *it; r.by_hour[index++] = static_cast(*it); } bys = recur->byMonthDays(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { short dShort = static_cast((*it) * 8); r.by_month_day[index++] = static_cast(icalrecurrencetype_day_position(dShort)); } bys = recur->byYearDays(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { r.by_year_day[index++] = static_cast(*it); } bys = recur->byWeekNumbers(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { r.by_week_no[index++] = static_cast(*it); } bys = recur->byMonths(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { r.by_month[index++] = static_cast(*it); } bys = recur->bySetPos(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { r.by_set_pos[index++] = static_cast(*it); } const QList &byd = recur->byDays(); int day; index = 0; for (QList::ConstIterator dit = byd.constBegin(); dit != byd.constEnd(); ++dit) { day = (*dit).day() % 7 + 1; // convert from Monday=1 to Sunday=1 if ((*dit).pos() < 0) { day += (-(*dit).pos()) * 8; day = -day; } else { day += (*dit).pos() * 8; } r.by_day[index++] = static_cast(day); } r.week_start = static_cast(recur->weekStart() % 7 + 1); if (recur->frequency() > 1) { // Don't write out INTERVAL=1, because that's the default anyway r.interval = static_cast(recur->frequency()); } if (recur->duration() > 0) { r.count = recur->duration(); } else if (recur->duration() == -1) { r.count = 0; } else { if (recur->allDay()) { r.until = writeICalDate(recur->endDt().date()); } else { r.until = writeICalDateTime(recur->endDt()); } } return r; } icalcomponent *ICalFormatImpl::writeAlarm(const Alarm::Ptr &alarm) { if (alarm->enabled()) { alarm->setCustomProperty(APP_NAME_FOR_XPROPERTIES, ENABLED_ALARM_XPROPERTY, QStringLiteral("TRUE")); } else { alarm->setCustomProperty(APP_NAME_FOR_XPROPERTIES, ENABLED_ALARM_XPROPERTY, QStringLiteral("FALSE")); } icalcomponent *a = icalcomponent_new(ICAL_VALARM_COMPONENT); icalproperty_action action; icalattach *attach = nullptr; switch (alarm->type()) { case Alarm::Procedure: action = ICAL_ACTION_PROCEDURE; attach = icalattach_new_from_url(QFile::encodeName(alarm->programFile()).data()); icalcomponent_add_property(a, icalproperty_new_attach(attach)); if (!alarm->programArguments().isEmpty()) { icalcomponent_add_property(a, icalproperty_new_description(alarm->programArguments().toUtf8().constData())); } break; case Alarm::Audio: action = ICAL_ACTION_AUDIO; if (!alarm->audioFile().isEmpty()) { attach = icalattach_new_from_url(QFile::encodeName(alarm->audioFile()).data()); icalcomponent_add_property(a, icalproperty_new_attach(attach)); } break; case Alarm::Email: { action = ICAL_ACTION_EMAIL; const Person::List addresses = alarm->mailAddresses(); for (Person::List::ConstIterator ad = addresses.constBegin(); ad != addresses.constEnd(); ++ad) { if (!(*ad).email().isEmpty()) { icalproperty *p = icalproperty_new_attendee(QByteArray(QByteArray("MAILTO:") + (*ad).email().toUtf8()).constData()); if (!(*ad).name().isEmpty()) { icalproperty_add_parameter(p, icalparameter_new_cn((*ad).name().toUtf8().constData())); } icalcomponent_add_property(a, p); } } icalcomponent_add_property(a, icalproperty_new_summary(alarm->mailSubject().toUtf8().constData())); icalcomponent_add_property(a, icalproperty_new_description(alarm->mailText().toUtf8().constData())); const QStringList attachments = alarm->mailAttachments(); if (!attachments.isEmpty()) { for (QStringList::const_iterator at = attachments.constBegin(), end = attachments.constEnd(); at != end; ++at) { attach = icalattach_new_from_url(QFile::encodeName(*at).data()); icalcomponent_add_property(a, icalproperty_new_attach(attach)); } } break; } case Alarm::Display: action = ICAL_ACTION_DISPLAY; icalcomponent_add_property(a, icalproperty_new_description(alarm->text().toUtf8().constData())); break; case Alarm::Invalid: default: qDebug() << "Unknown type of alarm"; action = ICAL_ACTION_NONE; break; } icalcomponent_add_property(a, icalproperty_new_action(action)); // Trigger time icaltriggertype trigger; if (alarm->hasTime()) { trigger.time = writeICalUtcDateTime(alarm->time(), false); trigger.duration = icaldurationtype_null_duration(); } else { trigger.time = icaltime_null_time(); Duration offset; if (alarm->hasStartOffset()) { offset = alarm->startOffset(); } else { offset = alarm->endOffset(); } trigger.duration = writeICalDuration(offset); } icalproperty *p = icalproperty_new_trigger(trigger); if (alarm->hasEndOffset()) { icalproperty_add_parameter(p, icalparameter_new_related(ICAL_RELATED_END)); } icalcomponent_add_property(a, p); // Repeat count and duration if (alarm->repeatCount()) { icalcomponent_add_property(a, icalproperty_new_repeat(alarm->repeatCount())); icalcomponent_add_property(a, icalproperty_new_duration(writeICalDuration(alarm->snoozeTime()))); } // Custom properties const QMap custom = alarm->customProperties(); for (QMap::ConstIterator c = custom.begin(); c != custom.end(); ++c) { icalproperty *p = icalproperty_new_x(c.value().toUtf8().constData()); icalproperty_set_x_name(p, c.key().constData()); icalcomponent_add_property(a, p); } icalattach_unref(attach); return a; } icalproperty *ICalFormatImpl::writeConference(const Conference &conference) { icalproperty *p = icalproperty_new_conference(conference.uri().toString().toUtf8().constData()); icalproperty_set_parameter_from_string(p, "VALUE", "URI"); icalproperty_set_parameter_from_string(p, "FEATURE", conference.features().join(QLatin1Char(',')).toUtf8().constData()); icalproperty_set_parameter_from_string(p, "LABEL", conference.label().toUtf8().constData()); return p; } Todo::Ptr ICalFormatImpl::readTodo(icalcomponent *vtodo, const ICalTimeZoneCache *tzlist) { Todo::Ptr todo(new Todo); readIncidence(vtodo, todo, tzlist); icalproperty *p = icalcomponent_get_first_property(vtodo, ICAL_ANY_PROPERTY); while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_DUE_PROPERTY: { // due date/time bool allDay = false; QDateTime kdt = readICalDateTimeProperty(p, tzlist, false, &allDay); todo->setDtDue(kdt, true); todo->setAllDay(allDay); break; } case ICAL_COMPLETED_PROPERTY: // completion date/time todo->setCompleted(readICalDateTimeProperty(p, tzlist)); break; case ICAL_PERCENTCOMPLETE_PROPERTY: // Percent completed todo->setPercentComplete(icalproperty_get_percentcomplete(p)); break; case ICAL_RELATEDTO_PROPERTY: // related todo (parent) todo->setRelatedTo(QString::fromUtf8(icalproperty_get_relatedto(p))); d->mTodosRelate.append(todo); break; case ICAL_DTSTART_PROPERTY: // Flag that todo has start date. Value is read in by readIncidence(). if (!todo->comments().filter(QStringLiteral("NoStartDate")).isEmpty()) { todo->setDtStart(QDateTime()); } break; case ICAL_X_PROPERTY: { const char *name = icalproperty_get_x_name(p); if (QLatin1String(name) == QLatin1String("X-KDE-LIBKCAL-DTRECURRENCE")) { const QDateTime dateTime = readICalDateTimeProperty(p, tzlist); if (dateTime.isValid()) { todo->setDtRecurrence(dateTime); } else { qDebug() << "Invalid dateTime"; } } } break; default: // TODO: do something about unknown properties? break; } p = icalcomponent_get_next_property(vtodo, ICAL_ANY_PROPERTY); } if (d->mCompat) { d->mCompat->fixEmptySummary(todo); } todo->resetDirtyFields(); return todo; } Event::Ptr ICalFormatImpl::readEvent(icalcomponent *vevent, const ICalTimeZoneCache *tzlist) { Event::Ptr event(new Event); readIncidence(vevent, event, tzlist); icalproperty *p = icalcomponent_get_first_property(vevent, ICAL_ANY_PROPERTY); bool dtEndProcessed = false; while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_DTEND_PROPERTY: { // end date and time bool allDay = false; QDateTime kdt = readICalDateTimeProperty(p, tzlist, false, &allDay); if (allDay) { // End date is non-inclusive QDate endDate = kdt.date().addDays(-1); if (d->mCompat) { d->mCompat->fixFloatingEnd(endDate); } if (endDate < event->dtStart().date()) { endDate = event->dtStart().date(); } event->setDtEnd(QDateTime(endDate, {}, event->dtStart().timeZone())); event->setAllDay(true); } else { event->setDtEnd(kdt); event->setAllDay(false); } dtEndProcessed = true; break; } case ICAL_RELATEDTO_PROPERTY: // related event (parent) event->setRelatedTo(QString::fromUtf8(icalproperty_get_relatedto(p))); d->mEventsRelate.append(event); break; case ICAL_TRANSP_PROPERTY: { // Transparency icalproperty_transp transparency = icalproperty_get_transp(p); if (transparency == ICAL_TRANSP_TRANSPARENT) { event->setTransparency(Event::Transparent); } else { event->setTransparency(Event::Opaque); } break; } default: // TODO: do something about unknown properties? break; } p = icalcomponent_get_next_property(vevent, ICAL_ANY_PROPERTY); } // according to rfc2445 the dtend shouldn't be written when it equals // start date. so assign one equal to start date. if (!dtEndProcessed && !event->hasDuration()) { event->setDtEnd(event->dtStart()); } //全天 QString msade = event->nonKDECustomProperty("X-MICROSOFT-CDO-ALLDAYEVENT"); if (!msade.isEmpty()) { bool allDay = (msade == QLatin1String("TRUE")); event->setAllDay(allDay); } //农历 QString lunnar = event->nonKDECustomProperty(VEVENT_LUNNAR_XPROPERTY); if (!lunnar.isEmpty()) { //TODO:多次转换时会出现多个TRUE,待跟踪 bool isLunnar = (lunnar.contains(QLatin1String("TRUE"))); event->setLunnar(isLunnar); } if (d->mCompat) { d->mCompat->fixEmptySummary(event); } event->resetDirtyFields(); return event; } FreeBusy::Ptr ICalFormatImpl::readFreeBusy(icalcomponent *vfreebusy) { FreeBusy::Ptr freebusy(new FreeBusy); d->readIncidenceBase(vfreebusy, freebusy); icalproperty *p = icalcomponent_get_first_property(vfreebusy, ICAL_ANY_PROPERTY); FreeBusyPeriod::List periods; while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_DTSTART_PROPERTY: // start date and time (UTC) freebusy->setDtStart(readICalUtcDateTimeProperty(p, nullptr)); break; case ICAL_DTEND_PROPERTY: // end Date and Time (UTC) freebusy->setDtEnd(readICalUtcDateTimeProperty(p, nullptr)); break; case ICAL_FREEBUSY_PROPERTY: { // Any FreeBusy Times (UTC) icalperiodtype icalperiod = icalproperty_get_freebusy(p); QDateTime period_start = readICalUtcDateTime(p, icalperiod.start); FreeBusyPeriod period; if (!icaltime_is_null_time(icalperiod.end)) { QDateTime period_end = readICalUtcDateTime(p, icalperiod.end); period = FreeBusyPeriod(period_start, period_end); } else { Duration duration(readICalDuration(icalperiod.duration)); period = FreeBusyPeriod(period_start, duration); } icalparameter *param = icalproperty_get_first_parameter(p, ICAL_FBTYPE_PARAMETER); if (param) { icalparameter_fbtype fbType = icalparameter_get_fbtype(param); switch (fbType) { case ICAL_FBTYPE_FREE: period.setType(FreeBusyPeriod::Free); break; case ICAL_FBTYPE_BUSY: period.setType(FreeBusyPeriod::Busy); break; case ICAL_FBTYPE_BUSYTENTATIVE: period.setType(FreeBusyPeriod::BusyTentative); break; case ICAL_FBTYPE_BUSYUNAVAILABLE: period.setType(FreeBusyPeriod::BusyUnavailable); break; case ICAL_FBTYPE_X: period.setType(FreeBusyPeriod::Unknown); break; case ICAL_FBTYPE_NONE: period.setType(FreeBusyPeriod::Free); break; } } param = icalproperty_get_first_parameter(p, ICAL_X_PARAMETER); while (param) { if (strncmp(icalparameter_get_xname(param), "X-SUMMARY", 9) == 0) { period.setSummary(QString::fromUtf8(QByteArray::fromBase64(icalparameter_get_xvalue(param)))); } if (strncmp(icalparameter_get_xname(param), "X-LOCATION", 10) == 0) { period.setLocation(QString::fromUtf8(QByteArray::fromBase64(icalparameter_get_xvalue(param)))); } param = icalproperty_get_next_parameter(p, ICAL_X_PARAMETER); } periods.append(period); break; } default: // TODO: do something about unknown properties? break; } p = icalcomponent_get_next_property(vfreebusy, ICAL_ANY_PROPERTY); } freebusy->addPeriods(periods); freebusy->resetDirtyFields(); return freebusy; } Journal::Ptr ICalFormatImpl::readJournal(icalcomponent *vjournal, const ICalTimeZoneCache *tzList) { Journal::Ptr journal(new Journal); readIncidence(vjournal, journal, tzList); journal->resetDirtyFields(); return journal; } Attendee ICalFormatImpl::readAttendee(icalproperty *attendee) { // the following is a hack to support broken calendars (like WebCalendar 1.0.x) // that include non-RFC-compliant attendees. Otherwise libical 0.42 asserts. if (!icalproperty_get_value(attendee)) { return {}; } icalparameter *p = nullptr; QString email = QString::fromUtf8(icalproperty_get_attendee(attendee)); if (email.startsWith(QLatin1String("mailto:"), Qt::CaseInsensitive)) { email.remove(0, 7); } // libical may return everything after ATTENDEE tag if the rest is // not meaningful. Verify the address to filter out these cases. if (!Person::isValidEmail(email)) { return {}; } QString name; QString uid; p = icalproperty_get_first_parameter(attendee, ICAL_CN_PARAMETER); if (p) { name = QString::fromUtf8(icalparameter_get_cn(p)); } else { } bool rsvp = false; p = icalproperty_get_first_parameter(attendee, ICAL_RSVP_PARAMETER); if (p) { icalparameter_rsvp rsvpParameter = icalparameter_get_rsvp(p); if (rsvpParameter == ICAL_RSVP_TRUE) { rsvp = true; } } Attendee::PartStat status = Attendee::NeedsAction; p = icalproperty_get_first_parameter(attendee, ICAL_PARTSTAT_PARAMETER); if (p) { icalparameter_partstat partStatParameter = icalparameter_get_partstat(p); switch (partStatParameter) { default: case ICAL_PARTSTAT_NEEDSACTION: status = Attendee::NeedsAction; break; case ICAL_PARTSTAT_ACCEPTED: status = Attendee::Accepted; break; case ICAL_PARTSTAT_DECLINED: status = Attendee::Declined; break; case ICAL_PARTSTAT_TENTATIVE: status = Attendee::Tentative; break; case ICAL_PARTSTAT_DELEGATED: status = Attendee::Delegated; break; case ICAL_PARTSTAT_COMPLETED: status = Attendee::Completed; break; case ICAL_PARTSTAT_INPROCESS: status = Attendee::InProcess; break; } } Attendee::Role role = Attendee::ReqParticipant; p = icalproperty_get_first_parameter(attendee, ICAL_ROLE_PARAMETER); if (p) { icalparameter_role roleParameter = icalparameter_get_role(p); switch (roleParameter) { case ICAL_ROLE_CHAIR: role = Attendee::Chair; break; default: case ICAL_ROLE_REQPARTICIPANT: role = Attendee::ReqParticipant; break; case ICAL_ROLE_OPTPARTICIPANT: role = Attendee::OptParticipant; break; case ICAL_ROLE_NONPARTICIPANT: role = Attendee::NonParticipant; break; } } Attendee::CuType cuType = Attendee::Individual; p = icalproperty_get_first_parameter(attendee, ICAL_CUTYPE_PARAMETER); if (p) { icalparameter_cutype cutypeParameter = icalparameter_get_cutype(p); switch (cutypeParameter) { case ICAL_CUTYPE_X: case ICAL_CUTYPE_UNKNOWN: cuType = Attendee::Unknown; break; default: case ICAL_CUTYPE_NONE: case ICAL_CUTYPE_INDIVIDUAL: cuType = Attendee::Individual; break; case ICAL_CUTYPE_GROUP: cuType = Attendee::Group; break; case ICAL_CUTYPE_RESOURCE: cuType = Attendee::Resource; break; case ICAL_CUTYPE_ROOM: cuType = Attendee::Room; break; } } p = icalproperty_get_first_parameter(attendee, ICAL_X_PARAMETER); QMap custom; while (p) { QString xname = QString::fromLatin1(icalparameter_get_xname(p)).toUpper(); QString xvalue = QString::fromUtf8(icalparameter_get_xvalue(p)); if (xname == QLatin1String("X-UID")) { uid = xvalue; } else { custom[xname.toUtf8()] = xvalue; } p = icalproperty_get_next_parameter(attendee, ICAL_X_PARAMETER); } Attendee a(name, email, rsvp, status, role, uid); a.setCuType(cuType); a.customProperties().setCustomProperties(custom); p = icalproperty_get_first_parameter(attendee, ICAL_DELEGATEDTO_PARAMETER); if (p) { a.setDelegate(QLatin1String(icalparameter_get_delegatedto(p))); } p = icalproperty_get_first_parameter(attendee, ICAL_DELEGATEDFROM_PARAMETER); if (p) { a.setDelegator(QLatin1String(icalparameter_get_delegatedfrom(p))); } return a; } Person ICalFormatImpl::readOrganizer(icalproperty *organizer) { QString email = QString::fromUtf8(icalproperty_get_organizer(organizer)); if (email.startsWith(QLatin1String("mailto:"), Qt::CaseInsensitive)) { email.remove(0, 7); } QString cn; icalparameter *p = icalproperty_get_first_parameter(organizer, ICAL_CN_PARAMETER); if (p) { cn = QString::fromUtf8(icalparameter_get_cn(p)); } Person org(cn, email); // TODO: Treat sent-by, dir and language here, too return org; } Attachment ICalFormatImpl::readAttachment(icalproperty *attach) { Attachment attachment; QByteArray p; icalvalue *value = icalproperty_get_value(attach); switch (icalvalue_isa(value)) { case ICAL_ATTACH_VALUE: { icalattach *a = icalproperty_get_attach(attach); if (!icalattach_get_is_url(a)) { p = QByteArray(reinterpret_cast(icalattach_get_data(a))); if (!p.isEmpty()) { attachment = Attachment(p); } } else { p = icalattach_get_url(a); if (!p.isEmpty()) { attachment = Attachment(QString::fromUtf8(p)); } } break; } case ICAL_BINARY_VALUE: { icalattach *a = icalproperty_get_attach(attach); p = QByteArray(reinterpret_cast(icalattach_get_data(a))); if (!p.isEmpty()) { attachment = Attachment(p); } break; } case ICAL_URI_VALUE: p = icalvalue_get_uri(value); attachment = Attachment(QString::fromUtf8(p)); break; default: break; } if (!attachment.isEmpty()) { icalparameter *p = icalproperty_get_first_parameter(attach, ICAL_FMTTYPE_PARAMETER); if (p) { attachment.setMimeType(QLatin1String(icalparameter_get_fmttype(p))); } p = icalproperty_get_first_parameter(attach, ICAL_X_PARAMETER); while (p) { QString xname = QString::fromLatin1(icalparameter_get_xname(p)).toUpper(); QString xvalue = QString::fromUtf8(icalparameter_get_xvalue(p)); if (xname == QLatin1String("X-CONTENT-DISPOSITION")) { attachment.setShowInline(xvalue.toLower() == QLatin1String("inline")); } else if (xname == QLatin1String("X-LABEL")) { attachment.setLabel(xvalue); } else if (xname == QLatin1String("X-KONTACT-TYPE")) { attachment.setLocal(xvalue.toLower() == QLatin1String("local")); } p = icalproperty_get_next_parameter(attach, ICAL_X_PARAMETER); } p = icalproperty_get_first_parameter(attach, ICAL_X_PARAMETER); while (p) { if (strncmp(icalparameter_get_xname(p), "X-LABEL", 7) == 0) { attachment.setLabel(QString::fromUtf8(icalparameter_get_xvalue(p))); } p = icalproperty_get_next_parameter(attach, ICAL_X_PARAMETER); } } return attachment; } void ICalFormatImpl::readIncidence(icalcomponent *parent, const Incidence::Ptr &incidence, const ICalTimeZoneCache *tzlist) { d->readIncidenceBase(parent, incidence); icalproperty *p = icalcomponent_get_first_property(parent, ICAL_ANY_PROPERTY); const char *text; int intvalue, inttext; icaldurationtype icalduration; QDateTime kdt; QDateTime dtstamp; QStringList categories; while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_CREATED_PROPERTY: incidence->setCreated(readICalDateTimeProperty(p, tzlist)); break; case ICAL_DTSTAMP_PROPERTY: dtstamp = readICalDateTimeProperty(p, tzlist); break; case ICAL_SEQUENCE_PROPERTY: // sequence intvalue = icalproperty_get_sequence(p); incidence->setRevision(intvalue); break; case ICAL_LASTMODIFIED_PROPERTY: // last modification UTC date/time incidence->setLastModified(readICalDateTimeProperty(p, tzlist)); break; case ICAL_DTSTART_PROPERTY: { // start date and time bool allDay = false; kdt = readICalDateTimeProperty(p, tzlist, false, &allDay); incidence->setDtStart(kdt); incidence->setAllDay(allDay); break; } case ICAL_DURATION_PROPERTY: // start date and time icalduration = icalproperty_get_duration(p); incidence->setDuration(readICalDuration(icalduration)); break; case ICAL_DESCRIPTION_PROPERTY: { // description QString textStr = QString::fromUtf8(icalproperty_get_description(p)); if (!textStr.isEmpty()) { QString valStr = QString::fromUtf8(icalproperty_get_parameter_as_string(p, "X-KDE-TEXTFORMAT")); if (!valStr.compare(QLatin1String("HTML"), Qt::CaseInsensitive)) { incidence->setDescription(textStr, true); } else { incidence->setDescription(textStr, false); } } } break; case ICAL_SUMMARY_PROPERTY: { // summary QString textStr = QString::fromUtf8(icalproperty_get_summary(p)); if (!textStr.isEmpty()) { QString valStr = QString::fromUtf8(icalproperty_get_parameter_as_string(p, "X-KDE-TEXTFORMAT")); if (!valStr.compare(QLatin1String("HTML"), Qt::CaseInsensitive)) { incidence->setSummary(textStr, true); } else { incidence->setSummary(textStr, false); } } } break; case ICAL_LOCATION_PROPERTY: { // location if (!icalproperty_get_value(p)) { // Fix for #191472. This is a pre-crash guard in case libical was // compiled in superstrict mode (--enable-icalerrors-are-fatal) // TODO: pre-crash guard other property getters too. break; } QString textStr = QString::fromUtf8(icalproperty_get_location(p)); if (!textStr.isEmpty()) { QString valStr = QString::fromUtf8(icalproperty_get_parameter_as_string(p, "X-KDE-TEXTFORMAT")); if (!valStr.compare(QLatin1String("HTML"), Qt::CaseInsensitive)) { incidence->setLocation(textStr, true); } else { incidence->setLocation(textStr, false); } } } break; case ICAL_STATUS_PROPERTY: { // status Incidence::Status stat; switch (icalproperty_get_status(p)) { case ICAL_STATUS_TENTATIVE: stat = Incidence::StatusTentative; break; case ICAL_STATUS_CONFIRMED: stat = Incidence::StatusConfirmed; break; case ICAL_STATUS_COMPLETED: stat = Incidence::StatusCompleted; break; case ICAL_STATUS_NEEDSACTION: stat = Incidence::StatusNeedsAction; break; case ICAL_STATUS_CANCELLED: stat = Incidence::StatusCanceled; break; case ICAL_STATUS_INPROCESS: stat = Incidence::StatusInProcess; break; case ICAL_STATUS_DRAFT: stat = Incidence::StatusDraft; break; case ICAL_STATUS_FINAL: stat = Incidence::StatusFinal; break; case ICAL_STATUS_X: incidence->setCustomStatus(QString::fromUtf8(icalvalue_get_x(icalproperty_get_value(p)))); stat = Incidence::StatusX; break; case ICAL_STATUS_NONE: default: stat = Incidence::StatusNone; break; } if (stat != Incidence::StatusX) { incidence->setStatus(stat); } break; } case ICAL_GEO_PROPERTY: { // geo icalgeotype geo = icalproperty_get_geo(p); incidence->setGeoLatitude(geo.lat); incidence->setGeoLongitude(geo.lon); incidence->setHasGeo(true); break; } case ICAL_PRIORITY_PROPERTY: // priority intvalue = icalproperty_get_priority(p); if (d->mCompat) { intvalue = d->mCompat->fixPriority(intvalue); } incidence->setPriority(intvalue); break; case ICAL_CATEGORIES_PROPERTY: { // categories // We have always supported multiple CATEGORIES properties per component // even though the RFC seems to indicate only 1 is permitted. // We can't change that -- in order to retain backwards compatibility. text = icalproperty_get_categories(p); const QString val = QString::fromUtf8(text); const QStringList lstVal = val.split(QLatin1Char(','), Qt::SkipEmptyParts); for (const QString &cat : lstVal) { // ensure no duplicates if (!categories.contains(cat)) { categories.append(cat); } } break; } case ICAL_RECURRENCEID_PROPERTY: // recurrenceId kdt = readICalDateTimeProperty(p, tzlist); if (kdt.isValid()) { incidence->setRecurrenceId(kdt); const icalparameter *param = icalproperty_get_first_parameter(p, ICAL_RANGE_PARAMETER); if (param && icalparameter_get_range(param) == ICAL_RANGE_THISANDFUTURE) { incidence->setThisAndFuture(true); } else { // A workaround for a bug in libical (https://github.com/libical/libical/issues/185) // If a recurrenceId has both tzid and range, both parameters end up in the tzid. // This results in invalid tzid's like: "Europe/Berlin;RANGE=THISANDFUTURE" const icalparameter *param = icalproperty_get_first_parameter(p, ICAL_TZID_PARAMETER); QString tzid = QString::fromLatin1(icalparameter_get_tzid(param)); const QStringList parts = tzid.toLower().split(QLatin1Char(';')); for (const QString &part : parts) { if (part == QLatin1String("range=thisandfuture")) { incidence->setThisAndFuture(true); break; } } } } break; case ICAL_RRULE_PROPERTY: readRecurrenceRule(p, incidence); break; case ICAL_RDATE_PROPERTY: { bool allDay = false; kdt = readICalDateTimeProperty(p, tzlist, false, &allDay); if (kdt.isValid()) { if (allDay) { incidence->recurrence()->addRDate(kdt.date()); } else { incidence->recurrence()->addRDateTime(kdt); } } else { // TODO: RDates as period are not yet implemented! } break; } case ICAL_EXRULE_PROPERTY: readExceptionRule(p, incidence); break; case ICAL_EXDATE_PROPERTY: { bool allDay = false; kdt = readICalDateTimeProperty(p, tzlist, false, &allDay); if (allDay) { incidence->recurrence()->addExDate(kdt.date()); } else { incidence->recurrence()->addExDateTime(kdt); } break; } case ICAL_CLASS_PROPERTY: inttext = icalproperty_get_class(p); if (inttext == ICAL_CLASS_PUBLIC) { incidence->setSecrecy(Incidence::SecrecyPublic); } else if (inttext == ICAL_CLASS_CONFIDENTIAL) { incidence->setSecrecy(Incidence::SecrecyConfidential); } else { incidence->setSecrecy(Incidence::SecrecyPrivate); } break; case ICAL_ATTACH_PROPERTY: // attachments incidence->addAttachment(readAttachment(p)); break; case ICAL_COLOR_PROPERTY: incidence->setColor(QString::fromUtf8(icalproperty_get_color(p))); break; default: // TODO: do something about unknown properties? break; } p = icalcomponent_get_next_property(parent, ICAL_ANY_PROPERTY); } // Set the scheduling ID const QString uid = incidence->customProperty("LIBKCAL", "ID"); if (!uid.isNull()) { // The UID stored in incidencebase is actually the scheduling ID // It has to be stored in the iCal UID component for compatibility // with other iCal applications incidence->setSchedulingID(incidence->uid(), uid); } // Now that recurrence and exception stuff is completely set up, // do any backwards compatibility adjustments. if (incidence->recurs() && d->mCompat) { d->mCompat->fixRecurrence(incidence); } // add categories incidence->setCategories(categories); // iterate through all alarms for (icalcomponent *alarm = icalcomponent_get_first_component(parent, ICAL_VALARM_COMPONENT); alarm; alarm = icalcomponent_get_next_component(parent, ICAL_VALARM_COMPONENT)) { readAlarm(alarm, incidence); } // iterate through all conferences Conference::List conferences; for (auto *conf = icalcomponent_get_first_property(parent, ICAL_CONFERENCE_PROPERTY); conf; conf = icalcomponent_get_next_property(parent, ICAL_CONFERENCE_PROPERTY)) { conferences.push_back(readConference(conf)); } incidence->setConferences(conferences); if (d->mCompat) { // Fix incorrect alarm settings by other applications (like outloook 9) d->mCompat->fixAlarms(incidence); d->mCompat->setCreatedToDtStamp(incidence, dtstamp); } } //@cond PRIVATE void ICalFormatImpl::Private::readIncidenceBase(icalcomponent *parent, const IncidenceBase::Ptr &incidenceBase) { icalproperty *p = icalcomponent_get_first_property(parent, ICAL_ANY_PROPERTY); bool uidProcessed = false; while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_UID_PROPERTY: // unique id uidProcessed = true; incidenceBase->setUid(QString::fromUtf8(icalproperty_get_uid(p))); break; case ICAL_ORGANIZER_PROPERTY: // organizer incidenceBase->setOrganizer(mImpl->readOrganizer(p)); break; case ICAL_ATTENDEE_PROPERTY: // attendee incidenceBase->addAttendee(mImpl->readAttendee(p)); break; case ICAL_COMMENT_PROPERTY: incidenceBase->addComment(QString::fromUtf8(icalproperty_get_comment(p))); break; case ICAL_CONTACT_PROPERTY: incidenceBase->addContact(QString::fromUtf8(icalproperty_get_contact(p))); break; case ICAL_URL_PROPERTY: incidenceBase->setUrl(QUrl(QString::fromUtf8(icalproperty_get_url(p)))); break; default: break; } p = icalcomponent_get_next_property(parent, ICAL_ANY_PROPERTY); } if (!uidProcessed) { qWarning() << "The incidence didn't have any UID! Report a bug " << "to the application that generated this file."; // Our in-memory incidence has a random uid generated in Event's ctor. // Make it empty so it matches what's in the file: incidenceBase->setUid(QString()); // Otherwise, next time we read the file, this function will return // an event with another random uid and we will have two events in the calendar. } // custom properties readCustomProperties(parent, incidenceBase.data()); } void ICalFormatImpl::Private::readCustomProperties(icalcomponent *parent, CustomProperties *properties) { QByteArray property; QString value, parameters; icalproperty *p = icalcomponent_get_first_property(parent, ICAL_X_PROPERTY); icalparameter *param = nullptr; while (p) { QString nvalue = QString::fromUtf8(icalproperty_get_x(p)); if (nvalue.isEmpty()) { icalvalue *value = icalproperty_get_value(p); if (icalvalue_isa(value) == ICAL_TEXT_VALUE) { // Calling icalvalue_get_text( value ) on a datetime value crashes. nvalue = QString::fromUtf8(icalvalue_get_text(value)); } else { p = icalcomponent_get_next_property(parent, ICAL_X_PROPERTY); continue; } } const char *name = icalproperty_get_x_name(p); QByteArray nproperty(name); if (property != nproperty) { // New property if (!property.isEmpty()) { properties->setNonKDECustomProperty(property, value, parameters); } property = name; value = nvalue; QStringList parametervalues; for (param = icalproperty_get_first_parameter(p, ICAL_ANY_PARAMETER); param; param = icalproperty_get_next_parameter(p, ICAL_ANY_PARAMETER)) { // 'c' is owned by ical library => all we need to do is just use it const char *c = icalparameter_as_ical_string(param); parametervalues.push_back(QLatin1String(c)); } parameters = parametervalues.join(QLatin1Char(';')); } else { value = value.append(QLatin1Char(',')).append(nvalue); } p = icalcomponent_get_next_property(parent, ICAL_X_PROPERTY); } if (!property.isEmpty()) { properties->setNonKDECustomProperty(property, value, parameters); } } //@endcond void ICalFormatImpl::readRecurrenceRule(icalproperty *rrule, const Incidence::Ptr &incidence) { Recurrence *recur = incidence->recurrence(); struct icalrecurrencetype r = icalproperty_get_rrule(rrule); // dumpIcalRecurrence(r); RecurrenceRule *recurrule = new RecurrenceRule(/*incidence*/); recurrule->setStartDt(incidence->dtStart()); readRecurrence(r, recurrule); recur->addRRule(recurrule); } void ICalFormatImpl::readExceptionRule(icalproperty *rrule, const Incidence::Ptr &incidence) { struct icalrecurrencetype r = icalproperty_get_exrule(rrule); // dumpIcalRecurrence(r); RecurrenceRule *recurrule = new RecurrenceRule(/*incidence*/); recurrule->setStartDt(incidence->dtStart()); readRecurrence(r, recurrule); Recurrence *recur = incidence->recurrence(); recur->addExRule(recurrule); } void ICalFormatImpl::readRecurrence(const struct icalrecurrencetype &r, RecurrenceRule *recur) { // Generate the RRULE string recur->setRRule(QLatin1String(icalrecurrencetype_as_string(const_cast(&r)))); // Period switch (r.freq) { case ICAL_SECONDLY_RECURRENCE: recur->setRecurrenceType(RecurrenceRule::rSecondly); break; case ICAL_MINUTELY_RECURRENCE: recur->setRecurrenceType(RecurrenceRule::rMinutely); break; case ICAL_HOURLY_RECURRENCE: recur->setRecurrenceType(RecurrenceRule::rHourly); break; case ICAL_DAILY_RECURRENCE: recur->setRecurrenceType(RecurrenceRule::rDaily); break; case ICAL_WEEKLY_RECURRENCE: recur->setRecurrenceType(RecurrenceRule::rWeekly); break; case ICAL_MONTHLY_RECURRENCE: recur->setRecurrenceType(RecurrenceRule::rMonthly); break; case ICAL_YEARLY_RECURRENCE: recur->setRecurrenceType(RecurrenceRule::rYearly); break; case ICAL_NO_RECURRENCE: default: recur->setRecurrenceType(RecurrenceRule::rNone); } // Frequency recur->setFrequency(r.interval); // Duration & End Date if (!icaltime_is_null_time(r.until)) { icaltimetype t = r.until; //结束时间不切换零时区 recur->setEndDt(readICalDateTime(nullptr, t, nullptr, false)); } else { if (r.count == 0) { recur->setDuration(-1); } else { recur->setDuration(r.count); } } // Week start setting short wkst = static_cast((r.week_start + 5) % 7 + 1); recur->setWeekStart(wkst); // And now all BY* QList lst; int i; int index = 0; // clang-format off //@cond PRIVATE #define readSetByList( rrulecomp, setfunc ) \ index = 0; \ lst.clear(); \ while ( ( i = r.rrulecomp[index++] ) != ICAL_RECURRENCE_ARRAY_MAX ) { \ lst.append( i ); \ } \ if ( !lst.isEmpty() ) { \ recur->setfunc( lst ); \ } //@endcond // clang-format on // BYSECOND, MINUTE and HOUR, MONTHDAY, YEARDAY, WEEKNUMBER, MONTH // and SETPOS are standard int lists, so we can treat them with the // same macro readSetByList(by_second, setBySeconds); readSetByList(by_minute, setByMinutes); readSetByList(by_hour, setByHours); readSetByList(by_month_day, setByMonthDays); readSetByList(by_year_day, setByYearDays); readSetByList(by_week_no, setByWeekNumbers); readSetByList(by_month, setByMonths); readSetByList(by_set_pos, setBySetPos); #undef readSetByList // BYDAY is a special case, since it's not an int list QList wdlst; short day; index = 0; while ((day = r.by_day[index++]) != ICAL_RECURRENCE_ARRAY_MAX) { RecurrenceRule::WDayPos pos; pos.setDay(static_cast((icalrecurrencetype_day_day_of_week(day) + 5) % 7 + 1)); pos.setPos(icalrecurrencetype_day_position(day)); wdlst.append(pos); } if (!wdlst.isEmpty()) { recur->setByDays(wdlst); } // TODO: Store all X- fields of the RRULE inside the recurrence (so they are // preserved } void ICalFormatImpl::readAlarm(icalcomponent *alarm, const Incidence::Ptr &incidence) { Alarm::Ptr ialarm = incidence->newAlarm(); ialarm->setRepeatCount(0); ialarm->setEnabled(true); // Determine the alarm's action type icalproperty *p = icalcomponent_get_first_property(alarm, ICAL_ACTION_PROPERTY); Alarm::Type type = Alarm::Display; icalproperty_action action = ICAL_ACTION_DISPLAY; if (!p) { qDebug() << "Unknown type of alarm, using default"; // TODO: do something about unknown alarm type? } else { action = icalproperty_get_action(p); switch (action) { case ICAL_ACTION_DISPLAY: type = Alarm::Display; break; case ICAL_ACTION_AUDIO: type = Alarm::Audio; break; case ICAL_ACTION_PROCEDURE: type = Alarm::Procedure; break; case ICAL_ACTION_EMAIL: type = Alarm::Email; break; default: break; // TODO: do something about invalid alarm type? } } ialarm->setType(type); p = icalcomponent_get_first_property(alarm, ICAL_ANY_PROPERTY); while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_TRIGGER_PROPERTY: { icaltriggertype trigger = icalproperty_get_trigger(p); if (!icaltime_is_null_time(trigger.time)) { // set the trigger to a specific time (which is not in rfc2445, btw) ialarm->setTime(readICalUtcDateTime(p, trigger.time)); } else { // set the trigger to an offset from the incidence start or end time. if (!icaldurationtype_is_bad_duration(trigger.duration)) { Duration duration(readICalDuration(trigger.duration)); icalparameter *param = icalproperty_get_first_parameter(p, ICAL_RELATED_PARAMETER); if (param && icalparameter_get_related(param) == ICAL_RELATED_END) { ialarm->setEndOffset(duration); } else { ialarm->setStartOffset(duration); } } else { // a bad duration was encountered, just set a 0 duration from start ialarm->setStartOffset(Duration(0)); } } break; } case ICAL_DURATION_PROPERTY: { icaldurationtype duration = icalproperty_get_duration(p); ialarm->setSnoozeTime(readICalDuration(duration)); break; } case ICAL_REPEAT_PROPERTY: ialarm->setRepeatCount(icalproperty_get_repeat(p)); break; case ICAL_DESCRIPTION_PROPERTY: { // Only in DISPLAY and EMAIL and PROCEDURE alarms QString description = QString::fromUtf8(icalproperty_get_description(p)); switch (action) { case ICAL_ACTION_DISPLAY: ialarm->setText(description); break; case ICAL_ACTION_PROCEDURE: ialarm->setProgramArguments(description); break; case ICAL_ACTION_EMAIL: ialarm->setMailText(description); break; default: break; } break; } case ICAL_SUMMARY_PROPERTY: // Only in EMAIL alarm ialarm->setMailSubject(QString::fromUtf8(icalproperty_get_summary(p))); break; case ICAL_ATTENDEE_PROPERTY: { // Only in EMAIL alarm QString email = QString::fromUtf8(icalproperty_get_attendee(p)); if (email.startsWith(QLatin1String("mailto:"), Qt::CaseInsensitive)) { email.remove(0, 7); } QString name; icalparameter *param = icalproperty_get_first_parameter(p, ICAL_CN_PARAMETER); if (param) { name = QString::fromUtf8(icalparameter_get_cn(param)); } ialarm->addMailAddress(Person(name, email)); break; } case ICAL_ATTACH_PROPERTY: { // Only in AUDIO and EMAIL and PROCEDURE alarms Attachment attach = readAttachment(p); if (!attach.isEmpty() && attach.isUri()) { switch (action) { case ICAL_ACTION_AUDIO: ialarm->setAudioFile(attach.uri()); break; case ICAL_ACTION_PROCEDURE: ialarm->setProgramFile(attach.uri()); break; case ICAL_ACTION_EMAIL: ialarm->addMailAttachment(attach.uri()); break; default: break; } } else { qDebug() << "Alarm attachments currently only support URIs," << "but no binary data"; } break; } default: break; } p = icalcomponent_get_next_property(alarm, ICAL_ANY_PROPERTY); } // custom properties d->readCustomProperties(alarm, ialarm.data()); QString locationRadius = ialarm->nonKDECustomProperty("X-LOCATION-RADIUS"); if (!locationRadius.isEmpty()) { ialarm->setLocationRadius(locationRadius.toInt()); ialarm->setHasLocationRadius(true); } if (ialarm->customProperty(APP_NAME_FOR_XPROPERTIES, ENABLED_ALARM_XPROPERTY) == QLatin1String("FALSE")) { ialarm->setEnabled(false); } // TODO: check for consistency of alarm properties } icaldatetimeperiodtype ICalFormatImpl::writeICalDatePeriod(const QDate &date) { icaldatetimeperiodtype t; t.time = writeICalDate(date); t.period = icalperiodtype_null_period(); return t; } Conference ICalFormatImpl::readConference(icalproperty *prop) { Conference conf; conf.setUri(QUrl(QString::fromUtf8(icalproperty_get_conference(prop)))); conf.setLabel(QString::fromUtf8(icalproperty_get_parameter_as_string(prop, "LABEL"))); conf.setFeatures(QString::fromUtf8(icalproperty_get_parameter_as_string(prop, "FEATURE")).split(QLatin1Char(','))); conf.setLanguage(QString::fromUtf8(icalproperty_get_parameter_as_string(prop, "LANGUAGE"))); return conf; } icaltimetype ICalFormatImpl::writeICalDate(const QDate &date) { icaltimetype t = icaltime_null_time(); t.year = date.year(); t.month = date.month(); t.day = date.day(); t.hour = 0; t.minute = 0; t.second = 0; t.is_date = 1; t.zone = nullptr; return t; } icaltimetype ICalFormatImpl::writeICalDateTime(const QDateTime &datetime, bool dateOnly) { icaltimetype t = icaltime_null_time(); t.year = datetime.date().year(); t.month = datetime.date().month(); t.day = datetime.date().day(); t.is_date = dateOnly; if (!t.is_date) { t.hour = datetime.time().hour(); t.minute = datetime.time().minute(); t.second = datetime.time().second(); } t.zone = nullptr; // zone is NOT set if (datetime.timeSpec() == Qt::UTC || (datetime.timeSpec() == Qt::TimeZone && datetime.timeZone() == QTimeZone::utc()) || (datetime.timeSpec() == Qt::OffsetFromUTC && datetime.offsetFromUtc() == 0)) { t = icaltime_convert_to_zone(t, icaltimezone_get_utc_timezone()); } return t; } icalproperty *ICalFormatImpl::writeICalDateTimeProperty(const icalproperty_kind type, const QDateTime &dt, TimeZoneList *tzUsedList) { icaltimetype t; switch (type) { case ICAL_DTSTAMP_PROPERTY: case ICAL_CREATED_PROPERTY: case ICAL_LASTMODIFIED_PROPERTY: t = writeICalDateTime(dt.toUTC()); break; default: t = writeICalDateTime(dt); break; } icalproperty *p; switch (type) { case ICAL_DTSTAMP_PROPERTY: p = icalproperty_new_dtstamp(t); break; case ICAL_CREATED_PROPERTY: p = icalproperty_new_created(t); break; case ICAL_LASTMODIFIED_PROPERTY: p = icalproperty_new_lastmodified(t); break; case ICAL_DTSTART_PROPERTY: // start date and time p = icalproperty_new_dtstart(t); break; case ICAL_DTEND_PROPERTY: // end date and time p = icalproperty_new_dtend(t); break; case ICAL_DUE_PROPERTY: p = icalproperty_new_due(t); break; case ICAL_RECURRENCEID_PROPERTY: p = icalproperty_new_recurrenceid(t); break; case ICAL_EXDATE_PROPERTY: p = icalproperty_new_exdate(t); break; case ICAL_X_PROPERTY: { p = icalproperty_new_x(""); icaltimetype timeType = writeICalDateTime(dt); icalvalue *text = icalvalue_new_datetime(timeType); icalproperty_set_value(p, text); } break; default: { icaldatetimeperiodtype tp; tp.time = t; tp.period = icalperiodtype_null_period(); switch (type) { case ICAL_RDATE_PROPERTY: p = icalproperty_new_rdate(tp); break; default: return nullptr; } } } QTimeZone qtz; if (!icaltime_is_utc(t)) { qtz = dt.timeZone(); } if (qtz.isValid()) { if (tzUsedList) { if (!tzUsedList->contains(qtz)) { tzUsedList->push_back(qtz); } } icalproperty_add_parameter(p, icalparameter_new_tzid(qtz.id().constData())); } return p; } QDateTime ICalFormatImpl::readICalDateTime(icalproperty *p, const icaltimetype &t, const ICalTimeZoneCache *tzCache, bool utc) { // qDebug(); // _dumpIcaltime( t ); QTimeZone timeZone; if (icaltime_is_utc(t) || t.zone == icaltimezone_get_utc_timezone()) { timeZone = QTimeZone::utc(); // the time zone is UTC utc = false; // no need to convert to UTC } else { icalparameter *param = p ? icalproperty_get_first_parameter(p, ICAL_TZID_PARAMETER) : nullptr; QByteArray tzid = param ? QByteArray(icalparameter_get_tzid(param)) : QByteArray(); // A workaround for a bug in libical (https://github.com/libical/libical/issues/185) // If a recurrenceId has both tzid and range, both parameters end up in the tzid. // This results in invalid tzid's like: "Europe/Berlin;RANGE=THISANDFUTURE" QStringList parts = QString::fromLatin1(tzid).split(QLatin1Char(';')); if (parts.count() > 1) { tzid = parts.first().toLatin1(); } if (tzCache) { // First try to get the timezone from cache timeZone = tzCache->tzForTime(QDateTime({t.year, t.month, t.day}, {}), tzid); } if (!timeZone.isValid()) { // Fallback to trying to match against Qt timezone timeZone = QTimeZone(tzid); } if (!timeZone.isValid()) { // Finally, give up and assume local timezone timeZone = QTimeZone::systemTimeZone(); } } QDateTime result; if (t.is_date) { result = QDateTime(QDate(t.year, t.month, t.day), {}, timeZone); } else { result = QDateTime(QDate(t.year, t.month, t.day), QTime(t.hour, t.minute, t.second), timeZone); } return utc ? result.toUTC() : result; } QDate ICalFormatImpl::readICalDate(const icaltimetype &t) { return QDate(t.year, t.month, t.day); } QDateTime ICalFormatImpl::readICalDateTimeProperty(icalproperty *p, const ICalTimeZoneCache *tzList, bool utc, bool *allDay) { icaldatetimeperiodtype tp; icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_CREATED_PROPERTY: // UTC date/time tp.time = icalproperty_get_created(p); utc = true; break; case ICAL_DTSTAMP_PROPERTY: // UTC date/time tp.time = icalproperty_get_dtstamp(p); utc = true; break; case ICAL_LASTMODIFIED_PROPERTY: // last modification UTC date/time tp.time = icalproperty_get_lastmodified(p); utc = true; break; case ICAL_DTSTART_PROPERTY: // start date and time (UTC for freebusy) tp.time = icalproperty_get_dtstart(p); break; case ICAL_DTEND_PROPERTY: // end date and time (UTC for freebusy) tp.time = icalproperty_get_dtend(p); break; case ICAL_DUE_PROPERTY: // due date/time tp.time = icalproperty_get_due(p); break; case ICAL_COMPLETED_PROPERTY: // UTC completion date/time tp.time = icalproperty_get_completed(p); utc = true; break; case ICAL_RECURRENCEID_PROPERTY: tp.time = icalproperty_get_recurrenceid(p); break; case ICAL_EXDATE_PROPERTY: tp.time = icalproperty_get_exdate(p); break; case ICAL_X_PROPERTY: { const char *name = icalproperty_get_x_name(p); if (QLatin1String(name) == QLatin1String("X-KDE-LIBKCAL-DTRECURRENCE")) { const char *value = icalvalue_as_ical_string(icalproperty_get_value(p)); icalvalue *v = icalvalue_new_from_string(ICAL_DATETIME_VALUE, value); tp.time = icalvalue_get_datetime(v); icalvalue_free(v); break; } } // end of ICAL_X_PROPERTY Q_FALLTHROUGH(); default: switch (kind) { case ICAL_RDATE_PROPERTY: tp = icalproperty_get_rdate(p); break; default: return QDateTime(); } if (!icaltime_is_valid_time(tp.time)) { return QDateTime(); // a time period was found (not implemented yet) } break; } if (allDay) { *allDay = tp.time.is_date; } if (tp.time.is_date) { return QDateTime(readICalDate(tp.time), QTime()); } else { return readICalDateTime(p, tp.time, tzList, utc); } } icaldurationtype ICalFormatImpl::writeICalDuration(const Duration &duration) { // should be able to use icaldurationtype_from_int(), except we know // that some older tools do not properly support weeks. So we never // set a week duration, only days icaldurationtype d; int value = duration.value(); d.is_neg = (value < 0) ? 1 : 0; if (value < 0) { value = -value; } // RFC2445 states that an ical duration value must be // EITHER weeks OR days/time, not both. if (duration.isDaily()) { if (!(value % 7)) { d.weeks = value / 7; d.days = 0; } else { d.weeks = 0; d.days = value; } d.hours = d.minutes = d.seconds = 0; } else { if (!(value % gSecondsPerWeek)) { d.weeks = value / gSecondsPerWeek; d.days = d.hours = d.minutes = d.seconds = 0; } else { d.weeks = 0; d.days = value / gSecondsPerDay; value %= gSecondsPerDay; d.hours = value / gSecondsPerHour; value %= gSecondsPerHour; d.minutes = value / gSecondsPerMinute; value %= gSecondsPerMinute; d.seconds = value; } } return d; } Duration ICalFormatImpl::readICalDuration(const icaldurationtype &d) { int days = d.weeks * 7; days += d.days; int seconds = d.hours * gSecondsPerHour; seconds += d.minutes * gSecondsPerMinute; seconds += d.seconds; if (seconds || !days) { // Create second-type duration for 0 delay durations. seconds += days * gSecondsPerDay; if (d.is_neg) { seconds = -seconds; } return Duration(seconds, Duration::Seconds); } else { if (d.is_neg) { days = -days; } return Duration(days, Duration::Days); } } icalcomponent *ICalFormatImpl::createCalendarComponent(const Calendar::Ptr &cal) { icalcomponent *calendar; // Root component calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); // Product Identifier icalproperty *p = icalproperty_new_prodid(CalFormat::productId().toUtf8().constData()); icalcomponent_add_property(calendar, p); // iCalendar version (2.0) p = icalproperty_new_version(const_cast(_ICAL_VERSION)); icalcomponent_add_property(calendar, p); // Implementation Version p = icalproperty_new_x(_ICAL_IMPLEMENTATION_VERSION); icalproperty_set_x_name(p, IMPLEMENTATION_VERSION_XPROPERTY); icalcomponent_add_property(calendar, p); // Add time zone // NOTE: Commented out since relevant timezones are added by the caller. // Previously we got some timezones listed twice in the ical file. /* if ( cal && cal->timeZones() ) { const ICalTimeZones::ZoneMap zmaps = cal->timeZones()->zones(); for ( ICalTimeZones::ZoneMap::ConstIterator it=zmaps.constBegin(); it != zmaps.constEnd(); ++it ) { icaltimezone *icaltz = (*it).icalTimezone(); if ( !icaltz ) { qCritical() << "bad time zone"; } else { icalcomponent *tz = icalcomponent_new_clone( icaltimezone_get_component( icaltz ) ); icalcomponent_add_component( calendar, tz ); icaltimezone_free( icaltz, 1 ); } } } */ // Custom properties if (cal != nullptr) { d->writeCustomProperties(calendar, cal.data()); } return calendar; } Incidence::Ptr ICalFormatImpl::readOneIncidence(icalcomponent *calendar, const ICalTimeZoneCache *tzlist) { if (!calendar) { qWarning() << "Populate called with empty calendar"; return Incidence::Ptr(); } icalcomponent *c = icalcomponent_get_first_component(calendar, ICAL_VEVENT_COMPONENT); if (c) { return readEvent(c, tzlist); } c = icalcomponent_get_first_component(calendar, ICAL_VTODO_COMPONENT); if (c) { return readTodo(c, tzlist); } c = icalcomponent_get_first_component(calendar, ICAL_VJOURNAL_COMPONENT); if (c) { return readJournal(c, tzlist); } qWarning() << "Found no incidence"; return Incidence::Ptr(); } // take a raw vcalendar (i.e. from a file on disk, clipboard, etc. etc. // and break it down from its tree-like format into the dictionary format // that is used internally in the ICalFormatImpl. //获取原始vcalendar(即,从磁盘上的文件、剪贴板等),并将其从树状格式分解为ICalFormatImpl内部使用的字典格式。 bool ICalFormatImpl::populate(const Calendar::Ptr &cal, icalcomponent *calendar, bool deleted, const QString ¬ebook) { Q_UNUSED(notebook); // qDebug()<<"Populate called"; // this function will populate the caldict dictionary and other event // lists. It turns vevents into Events and then inserts them. // if (!calendar) { qWarning() << "Populate called with empty calendar"; return false; } // TODO: check for METHOD icalproperty *p = icalcomponent_get_first_property(calendar, ICAL_X_PROPERTY); QString implementationVersion; while (p) { const char *name = icalproperty_get_x_name(p); QByteArray nproperty(name); if (nproperty == QByteArray(IMPLEMENTATION_VERSION_XPROPERTY)) { QString nvalue = QString::fromUtf8(icalproperty_get_x(p)); if (nvalue.isEmpty()) { icalvalue *value = icalproperty_get_value(p); if (icalvalue_isa(value) == ICAL_TEXT_VALUE) { nvalue = QString::fromUtf8(icalvalue_get_text(value)); } } implementationVersion = nvalue; icalcomponent_remove_property(calendar, p); icalproperty_free(p); } p = icalcomponent_get_next_property(calendar, ICAL_X_PROPERTY); } p = icalcomponent_get_first_property(calendar, ICAL_PRODID_PROPERTY); if (!p) { qDebug() << "No PRODID property found"; d->mLoadedProductId.clear(); } else { d->mLoadedProductId = QString::fromUtf8(icalproperty_get_prodid(p)); delete d->mCompat; d->mCompat = CompatFactory::createCompat(d->mLoadedProductId, implementationVersion); } p = icalcomponent_get_first_property(calendar, ICAL_VERSION_PROPERTY); if (!p) { qDebug() << "No VERSION property found"; d->mParent->setException(new Exception(Exception::CalVersionUnknown)); return false; } else { const char *version = icalproperty_get_version(p); if (!version) { qDebug() << "No VERSION property found"; d->mParent->setException(new Exception(Exception::VersionPropertyMissing)); return false; } if (strcmp(version, "1.0") == 0) { qDebug() << "Expected iCalendar, got vCalendar"; d->mParent->setException(new Exception(Exception::CalVersion1)); return false; } else if (strcmp(version, "2.0") != 0) { qDebug() << "Expected iCalendar, got unknown format"; d->mParent->setException(new Exception(Exception::CalVersionUnknown)); return false; } } // Populate the calendar's time zone collection with all VTIMEZONE components ICalTimeZoneCache timeZoneCache; ICalTimeZoneParser parser(&timeZoneCache); parser.parse(calendar); // custom properties d->readCustomProperties(calendar, cal.data()); // Store all events with a relatedTo property in a list for post-processing d->mEventsRelate.clear(); d->mTodosRelate.clear(); // TODO: make sure that only actually added events go to this lists. icalcomponent *c = icalcomponent_get_first_component(calendar, ICAL_VTODO_COMPONENT); while (c) { Todo::Ptr todo = readTodo(c, &timeZoneCache); if (todo) { // qDebug() << "todo is not zero and deleted is " << deleted; Todo::Ptr old = cal->todo(todo->uid(), todo->recurrenceId()); if (old) { if (old->uid().isEmpty()) { qWarning() << "Skipping invalid VTODO"; c = icalcomponent_get_next_component(calendar, ICAL_VTODO_COMPONENT); continue; } // qDebug() << "Found an old todo with uid " << old->uid(); if (deleted) { // qDebug() << "Todo " << todo->uid() << " already deleted"; cal->deleteTodo(old); // move old to deleted removeAllICal(d->mTodosRelate, old); } else if (todo->revision() > old->revision()) { // qDebug() << "Replacing old todo " << old.data() << " with this one " << todo.data(); cal->deleteTodo(old); // move old to deleted removeAllICal(d->mTodosRelate, old); cal->addTodo(todo); // and replace it with this one } } else if (deleted) { // qDebug() << "Todo " << todo->uid() << " already deleted"; old = cal->deletedTodo(todo->uid(), todo->recurrenceId()); if (!old) { cal->addTodo(todo); // add this one cal->deleteTodo(todo); // and move it to deleted } } else { // qDebug() << "Adding todo " << todo.data() << todo->uid(); cal->addTodo(todo); // just add this one } } c = icalcomponent_get_next_component(calendar, ICAL_VTODO_COMPONENT); } // Iterate through all events c = icalcomponent_get_first_component(calendar, ICAL_VEVENT_COMPONENT); while (c) { Event::Ptr event = readEvent(c, &timeZoneCache); if (event) { // qDebug() << "event is not zero and deleted is " << deleted; Event::Ptr old = cal->event(event->uid(), event->recurrenceId()); if (old) { if (old->uid().isEmpty()) { qWarning() << "Skipping invalid VEVENT"; c = icalcomponent_get_next_component(calendar, ICAL_VEVENT_COMPONENT); continue; } // qDebug() << "Found an old event with uid " << old->uid(); if (deleted) { // qDebug() << "Event " << event->uid() << " already deleted"; cal->deleteEvent(old); // move old to deleted removeAllICal(d->mEventsRelate, old); } else if (event->revision() > old->revision()) { // qDebug() << "Replacing old event " << old.data() // << " with this one " << event.data(); cal->deleteEvent(old); // move old to deleted removeAllICal(d->mEventsRelate, old); cal->addEvent(event); // and replace it with this one } } else if (deleted) { // qDebug() << "Event " << event->uid() << " already deleted"; old = cal->deletedEvent(event->uid(), event->recurrenceId()); if (!old) { cal->addEvent(event); // add this one cal->deleteEvent(event); // and move it to deleted } } else { // qDebug() << "Adding event " << event.data() << event->uid(); cal->addEvent(event); // just add this one } } c = icalcomponent_get_next_component(calendar, ICAL_VEVENT_COMPONENT); } // Iterate through all journals c = icalcomponent_get_first_component(calendar, ICAL_VJOURNAL_COMPONENT); while (c) { Journal::Ptr journal = readJournal(c, &timeZoneCache); if (journal) { Journal::Ptr old = cal->journal(journal->uid(), journal->recurrenceId()); if (old) { if (deleted) { cal->deleteJournal(old); // move old to deleted } else if (journal->revision() > old->revision()) { cal->deleteJournal(old); // move old to deleted cal->addJournal(journal); // and replace it with this one } } else if (deleted) { old = cal->deletedJournal(journal->uid(), journal->recurrenceId()); if (!old) { cal->addJournal(journal); // add this one cal->deleteJournal(journal); // and move it to deleted } } else { cal->addJournal(journal); // just add this one } } c = icalcomponent_get_next_component(calendar, ICAL_VJOURNAL_COMPONENT); } // TODO: Remove any previous time zones no longer referenced in the calendar return true; } QString ICalFormatImpl::extractErrorProperty(icalcomponent *c) { QString errorMessage; icalproperty *error = icalcomponent_get_first_property(c, ICAL_XLICERROR_PROPERTY); while (error) { errorMessage += QLatin1String(icalproperty_get_xlicerror(error)); errorMessage += QLatin1Char('\n'); error = icalcomponent_get_next_property(c, ICAL_XLICERROR_PROPERTY); } return errorMessage; } /* void ICalFormatImpl::dumpIcalRecurrence( const icalrecurrencetype &r ) { int i; qDebug() << " Freq:" << int( r.freq ); qDebug() << " Until:" << icaltime_as_ical_string( r.until ); qDebug() << " Count:" << r.count; if ( r.by_day[0] != ICAL_RECURRENCE_ARRAY_MAX ) { int index = 0; QString out = " By Day: "; while ( ( i = r.by_day[index++] ) != ICAL_RECURRENCE_ARRAY_MAX ) { out.append( QString::number( i ) + ' ' ); } qDebug() << out; } if ( r.by_month_day[0] != ICAL_RECURRENCE_ARRAY_MAX ) { int index = 0; QString out = " By Month Day: "; while ( ( i = r.by_month_day[index++] ) != ICAL_RECURRENCE_ARRAY_MAX ) { out.append( QString::number( i ) + ' ' ); } qDebug() << out; } if ( r.by_year_day[0] != ICAL_RECURRENCE_ARRAY_MAX ) { int index = 0; QString out = " By Year Day: "; while ( ( i = r.by_year_day[index++] ) != ICAL_RECURRENCE_ARRAY_MAX ) { out.append( QString::number( i ) + ' ' ); } qDebug() << out; } if ( r.by_month[0] != ICAL_RECURRENCE_ARRAY_MAX ) { int index = 0; QString out = " By Month: "; while ( ( i = r.by_month[index++] ) != ICAL_RECURRENCE_ARRAY_MAX ) { out.append( QString::number( i ) + ' ' ); } qDebug() << out; } if ( r.by_set_pos[0] != ICAL_RECURRENCE_ARRAY_MAX ) { int index = 0; QString out = " By Set Pos: "; while ( ( i = r.by_set_pos[index++] ) != ICAL_RECURRENCE_ARRAY_MAX ) { qDebug() << "=========" << i; out.append( QString::number( i ) + ' ' ); } qDebug() << out; } } */ icalcomponent *ICalFormatImpl::createScheduleComponent(const IncidenceBase::Ptr &incidence, iTIPMethod method) { icalcomponent *message = createCalendarComponent(); // Create VTIMEZONE components for this incidence TimeZoneList zones; if (incidence) { const QDateTime kd1 = incidence->dateTime(IncidenceBase::RoleStartTimeZone); const QDateTime kd2 = incidence->dateTime(IncidenceBase::RoleEndTimeZone); if (kd1.isValid() && kd1.timeZone() != QTimeZone::utc()) { zones << kd1.timeZone(); } if (kd2.isValid() && kd2.timeZone() != QTimeZone::utc() && kd1.timeZone() != kd2.timeZone()) { zones << kd2.timeZone(); } TimeZoneEarliestDate earliestTz; ICalTimeZoneParser::updateTzEarliestDate(incidence, &earliestTz); for (const auto &qtz : qAsConst(zones)) { icaltimezone *icaltz = ICalTimeZoneParser::icaltimezoneFromQTimeZone(qtz, earliestTz[qtz]); if (!icaltz) { qCritical() << "bad time zone"; } else { icalcomponent *tz = icalcomponent_new_clone(icaltimezone_get_component(icaltz)); icalcomponent_add_component(message, tz); icaltimezone_free(icaltz, 1); } } } else { qDebug() << "No incidence"; return message; } icalproperty_method icalmethod = ICAL_METHOD_NONE; switch (method) { case iTIPPublish: icalmethod = ICAL_METHOD_PUBLISH; break; case iTIPRequest: icalmethod = ICAL_METHOD_REQUEST; break; case iTIPRefresh: icalmethod = ICAL_METHOD_REFRESH; break; case iTIPCancel: icalmethod = ICAL_METHOD_CANCEL; break; case iTIPAdd: icalmethod = ICAL_METHOD_ADD; break; case iTIPReply: icalmethod = ICAL_METHOD_REPLY; break; case iTIPCounter: icalmethod = ICAL_METHOD_COUNTER; break; case iTIPDeclineCounter: icalmethod = ICAL_METHOD_DECLINECOUNTER; break; default: qDebug() << "Unknown method"; return message; } icalcomponent_add_property(message, icalproperty_new_method(icalmethod)); icalcomponent *inc = writeIncidence(incidence, method); if (method != KCalendarCore::iTIPNoMethod) { // Not very nice, but since dtstamp changes semantics if used in scheduling, we have to adapt icalcomponent_set_dtstamp(inc, writeICalUtcDateTime(QDateTime::currentDateTimeUtc())); } /* * RFC 2446 states in section 3.4.3 ( REPLY to a VTODO ), that * a REQUEST-STATUS property has to be present. For the other two, event and * free busy, it can be there, but is optional. Until we do more * fine grained handling, assume all is well. Note that this is the * status of the _request_, not the attendee. Just to avoid confusion. * - till */ if (icalmethod == ICAL_METHOD_REPLY) { struct icalreqstattype rst; rst.code = ICAL_2_0_SUCCESS_STATUS; rst.desc = nullptr; rst.debug = nullptr; icalcomponent_add_property(inc, icalproperty_new_requeststatus(rst)); } icalcomponent_add_component(message, inc); return message; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/icalformat_p.h000066400000000000000000000201051473346337000241450ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2006 David Jarvie SPDX-FileCopyrightText: 2012 Christian Mollekopf SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the internal ICalFormatImpl class. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ @author David Jarvie \ */ #ifndef KCALCORE_ICALFORMAT_P_H #define KCALCORE_ICALFORMAT_P_H #include "calendar.h" #include "event.h" #include "exceptions.h" #include "freebusy.h" #include "journal.h" #include "person.h" #include "schedulemessage.h" #include "todo.h" #include class QDate; namespace KCalendarCore { class Alarm; class Attachment; class Attendee; class Conference; class Duration; class Event; class FreeBusy; class ICalFormat; class ICalTimeZoneCache; class Incidence; class Journal; class Recurrence; class RecurrenceRule; class Todo; using TimeZoneList = QVector; /** Tell the Libical library that we are using ICal Version 2.0. @internal */ #define _ICAL_VERSION "2.0" /** Version of this library implementation @internal */ #define _ICAL_IMPLEMENTATION_VERSION "1.0" /** @brief This class provides the libical dependent functions for ICalFormat. This class implements the iCalendar format. It provides methods for loading/saving/converting iCalendar format data into the internal representation as Calendar and Incidences. @internal */ class ICalFormatImpl { public: /** Construct a new iCal format for calendar object. @param parent is a pointer to a valid ICalFormat object. */ explicit ICalFormatImpl(ICalFormat *parent); /** Destructor. */ virtual ~ICalFormatImpl(); /** Updates a calendar with data from a raw iCalendar. Incidences already existing in @p calendar are not affected except that if a new incidence with the same UID is found, the existing incidence is replaced. */ bool populate(const Calendar::Ptr &calendar, icalcomponent *fs, bool deleted = false, const QString ¬ebook = QString()); Incidence::Ptr readOneIncidence(icalcomponent *calendar, const ICalTimeZoneCache *tzlist); icalcomponent *writeIncidence(const IncidenceBase::Ptr &incidence, iTIPMethod method = iTIPRequest, TimeZoneList *tzUsedList = nullptr); icalcomponent *writeTodo(const Todo::Ptr &todo, TimeZoneList *tzUsedList = nullptr); icalcomponent *writeEvent(const Event::Ptr &event, TimeZoneList *tzUsedList = nullptr); icalcomponent *writeJournal(const Journal::Ptr &journal, TimeZoneList *tzUsedList = nullptr); icalcomponent *writeFreeBusy(const FreeBusy::Ptr &freebusy, iTIPMethod method = iTIPPublish); void writeIncidence(icalcomponent *parent, const Incidence::Ptr &incidence, TimeZoneList *tzUsedList = nullptr); icalproperty *writeDescription(const QString &description, bool isRich = false); icalproperty *writeSummary(const QString &summary, bool isRich = false); icalproperty *writeLocation(const QString &location, bool isRich = false); icalproperty *writeAttendee(const Attendee &attendee); icalproperty *writeOrganizer(const Person &organizer); icalproperty *writeAttachment(const Attachment &attach); icalproperty *writeRecurrenceRule(Recurrence *); icalrecurrencetype writeRecurrenceRule(RecurrenceRule *recur); icalcomponent *writeAlarm(const Alarm::Ptr &alarm); icalproperty *writeConference(const Conference &conference); QString extractErrorProperty(icalcomponent *); Todo::Ptr readTodo(icalcomponent *vtodo, const ICalTimeZoneCache *tzList); Event::Ptr readEvent(icalcomponent *vevent, const ICalTimeZoneCache *tzList); FreeBusy::Ptr readFreeBusy(icalcomponent *vfreebusy); Journal::Ptr readJournal(icalcomponent *vjournal, const ICalTimeZoneCache *tzList); Attendee readAttendee(icalproperty *attendee); Person readOrganizer(icalproperty *organizer); Attachment readAttachment(icalproperty *attach); void readIncidence(icalcomponent *parent, const Incidence::Ptr &incidence, const ICalTimeZoneCache *tzList); void readRecurrenceRule(icalproperty *rrule, const Incidence::Ptr &event); void readExceptionRule(icalproperty *rrule, const Incidence::Ptr &incidence); void readRecurrence(const struct icalrecurrencetype &r, RecurrenceRule *recur); void readAlarm(icalcomponent *alarm, const Incidence::Ptr &incidence); Conference readConference(icalproperty *conference); /** Returns the PRODID string loaded from calendar file. */ QString loadedProductId() const; static icaltimetype writeICalDate(const QDate &); static QDate readICalDate(const icaltimetype &); static icaltimetype writeICalDateTime(const QDateTime &, bool dayOnly = false); static icaltimetype writeICalUtcDateTime(const QDateTime &, bool dayOnly = false); /** Creates an ical property from a date/time value. If a time zone is specified for the value, a TZID parameter is inserted into the ical property, @p tzlist and @p tzUsedList are updated to include the time zone. Note that while @p tzlist owns any time zone instances in its collection, @p tzUsedList does not. @param kind kind of property @param dt date/time value @param tzlist time zones collection @param tzUsedList time zones collection, only updated if @p tzlist is also specified @return property, or null if error. It is the caller's responsibility to free the returned property. */ static icalproperty *writeICalDateTimeProperty(const icalproperty_kind kind, const QDateTime &dt, TimeZoneList *tzUsedList = nullptr); /** Converts a date/time from ICal format. @param p property from which @p t has been obtained @param t ICal format date/time @param utc UTC date/time is expected @return date/time, converted to UTC if @p utc is @c true */ static QDateTime readICalDateTime(icalproperty *p, const icaltimetype &t, const ICalTimeZoneCache *tzList, bool utc = false); /** Converts a UTC date/time from ICal format. If @p t is not a UTC date/time, it is treated as invalid. @param p ical parameter to read from @param t ICal format date/time @return date/time, or invalid if @p t is not UTC */ static QDateTime readICalUtcDateTime(icalproperty *p, icaltimetype &t, const ICalTimeZoneCache *tzList = nullptr) { return readICalDateTime(p, t, tzList, true); } /** Reads a date or date/time value from a property. @param p ical parameter to read from @param utc true to read a UTC value, false to allow time zone to be specified. @return date or date/time, or invalid if property doesn't contain a time value. */ static QDateTime readICalDateTimeProperty(icalproperty *p, const ICalTimeZoneCache *tzList, bool utc = false, bool *allDay = nullptr); /** Reads a UTC date/time value from a property. @param p is a pointer to a valid icalproperty structure. */ static QDateTime readICalUtcDateTimeProperty(icalproperty *p, const ICalTimeZoneCache *tzList, bool *allDay = nullptr) { return readICalDateTimeProperty(p, tzList, true, allDay); } static icaldurationtype writeICalDuration(const Duration &duration); static Duration readICalDuration(const icaldurationtype &d); static icaldatetimeperiodtype writeICalDatePeriod(const QDate &date); icalcomponent *createCalendarComponent(const Calendar::Ptr &calendar = Calendar::Ptr()); icalcomponent *createScheduleComponent(const IncidenceBase::Ptr &incidence, iTIPMethod method); protected: // void dumpIcalRecurrence( const icalrecurrencetype &r ); private: //@cond PRIVATE class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/icaltimezones.cpp000066400000000000000000000635441473346337000247240ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2005-2007 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ #include "icalformat.h" #include "icalformat_p.h" #include "icaltimezones_p.h" #include "recurrence.h" #include "recurrencehelper_p.h" #include "recurrencerule.h" #include #include #include extern "C" { //#include #include } using namespace KCalendarCore; // Minimum repetition counts for VTIMEZONE RRULEs static const int minRuleCount = 5; // for any RRULE static const int minPhaseCount = 8; // for separate STANDARD/DAYLIGHT component // Convert an ical time to QDateTime, preserving the UTC indicator static QDateTime toQDateTime(const icaltimetype &t) { return QDateTime(QDate(t.year, t.month, t.day), QTime(t.hour, t.minute, t.second), (icaltime_is_utc(t) ? Qt::UTC : Qt::LocalTime)); } // Maximum date for time zone data. // It's not sensible to try to predict them very far in advance, because // they can easily change. Plus, it limits the processing required. static QDateTime MAX_DATE() { static QDateTime dt; if (!dt.isValid()) { dt = QDateTime(QDate::currentDate().addYears(20), QTime(0, 0, 0)); } return dt; } static icaltimetype writeLocalICalDateTime(const QDateTime &utc, int offset) { const QDateTime local = utc.addSecs(offset); icaltimetype t = icaltime_null_time(); t.year = local.date().year(); t.month = local.date().month(); t.day = local.date().day(); t.hour = local.time().hour(); t.minute = local.time().minute(); t.second = local.time().second(); t.is_date = 0; t.zone = nullptr; return t; } namespace KCalendarCore { void ICalTimeZonePhase::dump() { qDebug() << " ~~~ ICalTimeZonePhase ~~~"; qDebug() << " Abbreviations:" << abbrevs; qDebug() << " UTC offset:" << utcOffset; qDebug() << " Transitions:" << transitions; qDebug() << " ~~~~~~~~~~~~~~~~~~~~~~~~~"; } void ICalTimeZone::dump() { qDebug() << "~~~ ICalTimeZone ~~~"; qDebug() << "ID:" << id; qDebug() << "QZONE:" << qZone.id(); qDebug() << "STD:"; standard.dump(); qDebug() << "DST:"; daylight.dump(); qDebug() << "~~~~~~~~~~~~~~~~~~~~"; } ICalTimeZoneCache::ICalTimeZoneCache() { } void ICalTimeZoneCache::insert(const QByteArray &id, const ICalTimeZone &tz) { mCache.insert(id, tz); } namespace { template typename T::const_iterator greatestSmallerThan(const T &c, const typename T::value_type &v) { auto it = std::lower_bound(c.cbegin(), c.cend(), v); if (it != c.cbegin()) { return --it; } return c.cend(); } } // namespace QTimeZone ICalTimeZoneCache::tzForTime(const QDateTime &dt, const QByteArray &tzid) const { if (QTimeZone::isTimeZoneIdAvailable(tzid)) { return QTimeZone(tzid); } const ICalTimeZone tz = mCache.value(tzid); if (!tz.qZone.isValid()) { return QTimeZone::systemTimeZone(); } // If the matched timezone is one of the UTC offset timezones, we need to make // sure it's in the correct DTS. // The lookup in ICalTimeZoneParser will only find TZ in standard time, but // if the datetim in question fits in the DTS zone, we need to use another UTC // offset timezone if (tz.qZone.id().startsWith("UTC")) { // krazy:exclude=strings // Find the nearest standard and DST transitions that occur BEFORE the "dt" const auto stdPrev = greatestSmallerThan(tz.standard.transitions, dt); const auto dstPrev = greatestSmallerThan(tz.daylight.transitions, dt); if (stdPrev != tz.standard.transitions.cend() && dstPrev != tz.daylight.transitions.cend()) { if (*dstPrev > *stdPrev) { // Previous DTS is closer to "dt" than previous standard, which // means we are in DTS right now const auto tzids = QTimeZone::availableTimeZoneIds(tz.daylight.utcOffset); auto dtsTzId = std::find_if(tzids.cbegin(), tzids.cend(), [](const QByteArray &id) { return id.startsWith("UTC"); // krazy:exclude=strings }); if (dtsTzId != tzids.cend()) { return QTimeZone(*dtsTzId); } } } } return tz.qZone; } ICalTimeZoneParser::ICalTimeZoneParser(ICalTimeZoneCache *cache) : mCache(cache) { } void ICalTimeZoneParser::updateTzEarliestDate(const IncidenceBase::Ptr &incidence, TimeZoneEarliestDate *earliest) { for (auto role : {IncidenceBase::RoleStartTimeZone, IncidenceBase::RoleEndTimeZone}) { const auto dt = incidence->dateTime(role); if (dt.isValid()) { if (dt.timeZone() == QTimeZone::utc()) { continue; } const auto prev = earliest->value(incidence->dtStart().timeZone()); if (!prev.isValid() || incidence->dtStart() < prev) { earliest->insert(incidence->dtStart().timeZone(), prev); } } } } icalcomponent *ICalTimeZoneParser::icalcomponentFromQTimeZone(const QTimeZone &tz, const QDateTime &earliest) { // VTIMEZONE RRULE types enum { DAY_OF_MONTH = 0x01, WEEKDAY_OF_MONTH = 0x02, LAST_WEEKDAY_OF_MONTH = 0x04, }; // Write the time zone data into an iCal component icalcomponent *tzcomp = icalcomponent_new(ICAL_VTIMEZONE_COMPONENT); icalcomponent_add_property(tzcomp, icalproperty_new_tzid(tz.id().constData())); // icalcomponent_add_property(tzcomp, icalproperty_new_location( tz.name().toUtf8() )); // Compile an ordered list of transitions so that we can know the phases // which occur before and after each transition. QTimeZone::OffsetDataList transits = tz.transitions(QDateTime(), MAX_DATE()); if (transits.isEmpty()) { // If there is no way to compile a complete list of transitions // transitions() can return an empty list // In that case try get one transition to write a valid VTIMEZONE entry. if (transits.isEmpty()) { qDebug() << "No transition information available VTIMEZONE will be invalid."; } } if (earliest.isValid()) { // Remove all transitions earlier than those we are interested in for (int i = 0, end = transits.count(); i < end; ++i) { if (transits.at(i).atUtc >= earliest) { if (i > 0) { transits.erase(transits.begin(), transits.begin() + i); } break; } } } int trcount = transits.count(); QVector transitionsDone(trcount, false); // Go through the list of transitions and create an iCal component for each // distinct combination of phase after and UTC offset before the transition. icaldatetimeperiodtype dtperiod; dtperiod.period = icalperiodtype_null_period(); for (;;) { int i = 0; for (; i < trcount && transitionsDone[i]; ++i) { ; } if (i >= trcount) { break; } // Found a phase combination which hasn't yet been processed const int preOffset = (i > 0) ? transits.at(i - 1).offsetFromUtc : 0; const auto &transit = transits.at(i); if (transit.offsetFromUtc == preOffset) { transitionsDone[i] = true; while (++i < trcount) { if (transitionsDone[i] || transits.at(i).offsetFromUtc != transit.offsetFromUtc || transits.at(i).daylightTimeOffset != transit.daylightTimeOffset || transits.at(i - 1).offsetFromUtc != preOffset) { continue; } transitionsDone[i] = true; } continue; } const bool isDst = transit.daylightTimeOffset > 0; icalcomponent *phaseComp = icalcomponent_new(isDst ? ICAL_XDAYLIGHT_COMPONENT : ICAL_XSTANDARD_COMPONENT); if (!transit.abbreviation.isEmpty()) { icalcomponent_add_property(phaseComp, icalproperty_new_tzname(static_cast(transit.abbreviation.toUtf8().constData()))); } icalcomponent_add_property(phaseComp, icalproperty_new_tzoffsetfrom(preOffset)); icalcomponent_add_property(phaseComp, icalproperty_new_tzoffsetto(transit.offsetFromUtc)); // Create a component to hold initial RRULE if any, plus all RDATEs icalcomponent *phaseComp1 = icalcomponent_new_clone(phaseComp); icalcomponent_add_property(phaseComp1, icalproperty_new_dtstart(writeLocalICalDateTime(transits.at(i).atUtc, preOffset))); bool useNewRRULE = false; // Compile the list of UTC transition dates/times, and check // if the list can be reduced to an RRULE instead of multiple RDATEs. QTime time; QDate date; int year = 0, month = 0, daysInMonth = 0, dayOfMonth = 0; // avoid compiler warnings int dayOfWeek = 0; // Monday = 1 int nthFromStart = 0; // nth (weekday) of month int nthFromEnd = 0; // nth last (weekday) of month int newRule; int rule = 0; QList rdates; // dates which (probably) need to be written as RDATEs QList times; QDateTime qdt = transits.at(i).atUtc; // set 'qdt' for start of loop times += qdt; transitionsDone[i] = true; do { if (!rule) { // Initialise data for detecting a new rule rule = DAY_OF_MONTH | WEEKDAY_OF_MONTH | LAST_WEEKDAY_OF_MONTH; time = qdt.time(); date = qdt.date(); year = date.year(); month = date.month(); daysInMonth = date.daysInMonth(); dayOfWeek = date.dayOfWeek(); // Monday = 1 dayOfMonth = date.day(); nthFromStart = (dayOfMonth - 1) / 7 + 1; // nth (weekday) of month nthFromEnd = (daysInMonth - dayOfMonth) / 7 + 1; // nth last (weekday) of month } if (++i >= trcount) { newRule = 0; times += QDateTime(); // append a dummy value since last value in list is ignored } else { if (transitionsDone[i] || transits.at(i).offsetFromUtc != transit.offsetFromUtc || transits.at(i).daylightTimeOffset != transit.daylightTimeOffset || transits.at(i - 1).offsetFromUtc != preOffset) { continue; } transitionsDone[i] = true; qdt = transits.at(i).atUtc; if (!qdt.isValid()) { continue; } newRule = rule; times += qdt; date = qdt.date(); if (qdt.time() != time || date.month() != month || date.year() != ++year) { newRule = 0; } else { const int day = date.day(); if ((newRule & DAY_OF_MONTH) && day != dayOfMonth) { newRule &= ~DAY_OF_MONTH; } if (newRule & (WEEKDAY_OF_MONTH | LAST_WEEKDAY_OF_MONTH)) { if (date.dayOfWeek() != dayOfWeek) { newRule &= ~(WEEKDAY_OF_MONTH | LAST_WEEKDAY_OF_MONTH); } else { if ((newRule & WEEKDAY_OF_MONTH) && (day - 1) / 7 + 1 != nthFromStart) { newRule &= ~WEEKDAY_OF_MONTH; } if ((newRule & LAST_WEEKDAY_OF_MONTH) && (daysInMonth - day) / 7 + 1 != nthFromEnd) { newRule &= ~LAST_WEEKDAY_OF_MONTH; } } } } } if (!newRule) { // The previous rule (if any) no longer applies. // Write all the times up to but not including the current one. // First check whether any of the last RDATE values fit this rule. int yr = times[0].date().year(); while (!rdates.isEmpty()) { qdt = rdates.last(); date = qdt.date(); if (qdt.time() != time || date.month() != month || date.year() != --yr) { break; } const int day = date.day(); if (rule & DAY_OF_MONTH) { if (day != dayOfMonth) { break; } } else { if (date.dayOfWeek() != dayOfWeek || ((rule & WEEKDAY_OF_MONTH) && (day - 1) / 7 + 1 != nthFromStart) || ((rule & LAST_WEEKDAY_OF_MONTH) && (daysInMonth - day) / 7 + 1 != nthFromEnd)) { break; } } times.prepend(qdt); rdates.pop_back(); } if (times.count() > (useNewRRULE ? minPhaseCount : minRuleCount)) { // There are enough dates to combine into an RRULE icalrecurrencetype r; icalrecurrencetype_clear(&r); r.freq = ICAL_YEARLY_RECURRENCE; r.by_month[0] = month; if (rule & DAY_OF_MONTH) { r.by_month_day[0] = dayOfMonth; } else if (rule & WEEKDAY_OF_MONTH) { r.by_day[0] = (dayOfWeek % 7 + 1) + (nthFromStart * 8); // Sunday = 1 } else if (rule & LAST_WEEKDAY_OF_MONTH) { r.by_day[0] = -(dayOfWeek % 7 + 1) - (nthFromEnd * 8); // Sunday = 1 } r.until = writeLocalICalDateTime(times.takeAt(times.size() - 1), preOffset); icalproperty *prop = icalproperty_new_rrule(r); if (useNewRRULE) { // This RRULE doesn't start from the phase start date, so set it into // a new STANDARD/DAYLIGHT component in the VTIMEZONE. icalcomponent *c = icalcomponent_new_clone(phaseComp); icalcomponent_add_property(c, icalproperty_new_dtstart(writeLocalICalDateTime(times[0], preOffset))); icalcomponent_add_property(c, prop); icalcomponent_add_component(tzcomp, c); } else { icalcomponent_add_property(phaseComp1, prop); } } else { // Save dates for writing as RDATEs for (int t = 0, tend = times.count() - 1; t < tend; ++t) { rdates += times[t]; } } useNewRRULE = true; // All date/time values but the last have been added to the VTIMEZONE. // Remove them from the list. qdt = times.last(); // set 'qdt' for start of loop times.clear(); times += qdt; } rule = newRule; } while (i < trcount); // Write remaining dates as RDATEs for (int rd = 0, rdend = rdates.count(); rd < rdend; ++rd) { dtperiod.time = writeLocalICalDateTime(rdates[rd], preOffset); icalcomponent_add_property(phaseComp1, icalproperty_new_rdate(dtperiod)); } icalcomponent_add_component(tzcomp, phaseComp1); icalcomponent_free(phaseComp); } return tzcomp; } icaltimezone *ICalTimeZoneParser::icaltimezoneFromQTimeZone(const QTimeZone &tz, const QDateTime &earliest) { auto itz = icaltimezone_new(); icaltimezone_set_component(itz, icalcomponentFromQTimeZone(tz, earliest)); return itz; } void ICalTimeZoneParser::parse(icalcomponent *calendar) { for (auto *c = icalcomponent_get_first_component(calendar, ICAL_VTIMEZONE_COMPONENT); c; c = icalcomponent_get_next_component(calendar, ICAL_VTIMEZONE_COMPONENT)) { auto icalZone = parseTimeZone(c); // icalZone.dump(); if (!icalZone.id.isEmpty()) { if (!icalZone.qZone.isValid()) { icalZone.qZone = resolveICalTimeZone(icalZone); } if (!icalZone.qZone.isValid()) { qWarning() << "Failed to map" << icalZone.id << "to a known IANA timezone"; continue; } mCache->insert(icalZone.id, icalZone); } } } QTimeZone ICalTimeZoneParser::resolveICalTimeZone(const ICalTimeZone &icalZone) { const auto phase = icalZone.standard; const auto now = QDateTime::currentDateTimeUtc(); const auto candidates = QTimeZone::availableTimeZoneIds(phase.utcOffset); QMap matchedCandidates; for (const auto &tzid : candidates) { const QTimeZone candidate(tzid); // This would be a fallback, candidate has transitions, but the phase does not if (candidate.hasTransitions() == phase.transitions.isEmpty()) { matchedCandidates.insert(0, candidate); continue; } // Without transitions, we can't do any more precise matching, so just // accept this candidate and be done with it if (!candidate.hasTransitions() && phase.transitions.isEmpty()) { return candidate; } // Calculate how many transitions this candidate shares with the phase. // The candidate with the most matching transitions will win. auto begin = std::lower_bound(phase.transitions.cbegin(), phase.transitions.cend(), now.addYears(-20)); // If no transition older than 20 years is found, we will start from beginning if (begin == phase.transitions.cend()) { begin = phase.transitions.cbegin(); } auto end = std::upper_bound(begin, phase.transitions.cend(), now); int matchedTransitions = 0; for (auto it = begin; it != end; ++it) { const auto &transition = *it; const QTimeZone::OffsetDataList candidateTransitions = candidate.transitions(transition, transition); if (candidateTransitions.isEmpty()) { continue; } ++matchedTransitions; // 1 point for a matching transition const auto candidateTransition = candidateTransitions[0]; // FIXME: THIS IS HOW IT SHOULD BE: // const auto abvs = transition.abbreviations(); const auto abvs = phase.abbrevs; for (const auto &abv : abvs) { if (candidateTransition.abbreviation == QString::fromUtf8(abv)) { matchedTransitions += 1024; // lots of points for a transition with a matching abbreviation break; } } } matchedCandidates.insert(matchedTransitions, candidate); } if (!matchedCandidates.isEmpty()) { return matchedCandidates.value(matchedCandidates.lastKey()); } return {}; } ICalTimeZone ICalTimeZoneParser::parseTimeZone(icalcomponent *vtimezone) { ICalTimeZone icalTz; if (auto tzidProp = icalcomponent_get_first_property(vtimezone, ICAL_TZID_PROPERTY)) { icalTz.id = icalproperty_get_value_as_string(tzidProp); // If the VTIMEZONE is a known IANA time zone don't bother parsing the rest // of the VTIMEZONE, get QTimeZone directly from Qt if (QTimeZone::isTimeZoneIdAvailable(icalTz.id)) { icalTz.qZone = QTimeZone(icalTz.id); return icalTz; } else { // Not IANA, but maybe we can match it from Windows ID? const auto ianaTzid = QTimeZone::windowsIdToDefaultIanaId(icalTz.id); if (!ianaTzid.isEmpty()) { icalTz.qZone = QTimeZone(ianaTzid); return icalTz; } } } for (icalcomponent *c = icalcomponent_get_first_component(vtimezone, ICAL_ANY_COMPONENT); c; c = icalcomponent_get_next_component(vtimezone, ICAL_ANY_COMPONENT)) { icalcomponent_kind kind = icalcomponent_isa(c); switch (kind) { case ICAL_XSTANDARD_COMPONENT: // qDebug() << "---standard phase: found"; parsePhase(c, false, icalTz.standard); break; case ICAL_XDAYLIGHT_COMPONENT: // qDebug() << "---daylight phase: found"; parsePhase(c, true, icalTz.daylight); break; default: qDebug() << "Unknown component:" << int(kind); break; } } return icalTz; } bool ICalTimeZoneParser::parsePhase(icalcomponent *c, bool daylight, ICalTimeZonePhase &phase) { // Read the observance data for this standard/daylight savings phase int utcOffset = 0; int prevOffset = 0; bool recurs = false; bool found_dtstart = false; bool found_tzoffsetfrom = false; bool found_tzoffsetto = false; icaltimetype dtstart = icaltime_null_time(); QSet abbrevs; // Now do the ical reading. icalproperty *p = icalcomponent_get_first_property(c, ICAL_ANY_PROPERTY); while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_TZNAME_PROPERTY: { // abbreviated name for this time offset // TZNAME can appear multiple times in order to provide language // translations of the time zone offset name. // TODO: Does this cope with multiple language specifications? QByteArray name = icalproperty_get_tzname(p); // Outlook (2000) places "Standard Time" and "Daylight Time" in the TZNAME // strings, which is totally useless. So ignore those. if ((!daylight && name == "Standard Time") || (daylight && name == "Daylight Time")) { break; } abbrevs.insert(name); break; } case ICAL_DTSTART_PROPERTY: // local time at which phase starts dtstart = icalproperty_get_dtstart(p); found_dtstart = true; break; case ICAL_TZOFFSETFROM_PROPERTY: // UTC offset immediately before start of phase prevOffset = icalproperty_get_tzoffsetfrom(p); found_tzoffsetfrom = true; break; case ICAL_TZOFFSETTO_PROPERTY: utcOffset = icalproperty_get_tzoffsetto(p); found_tzoffsetto = true; break; case ICAL_RDATE_PROPERTY: case ICAL_RRULE_PROPERTY: recurs = true; break; default: break; } p = icalcomponent_get_next_property(c, ICAL_ANY_PROPERTY); } // Validate the phase data if (!found_dtstart || !found_tzoffsetfrom || !found_tzoffsetto) { qDebug() << "DTSTART/TZOFFSETFROM/TZOFFSETTO missing"; return false; } // Convert DTSTART to QDateTime, and from local time to UTC dtstart.second -= prevOffset; dtstart = icaltime_convert_to_zone(dtstart, icaltimezone_get_utc_timezone()); const QDateTime utcStart = toQDateTime(icaltime_normalize(dtstart)); // UTC phase.abbrevs.unite(abbrevs); phase.utcOffset = utcOffset; phase.transitions += utcStart; if (recurs) { /* RDATE or RRULE is specified. There should only be one or the other, but * it doesn't really matter - the code can cope with both. * Note that we had to get DTSTART, TZOFFSETFROM, TZOFFSETTO before reading * recurrences. */ const QDateTime maxTime(MAX_DATE()); Recurrence recur; icalproperty *p = icalcomponent_get_first_property(c, ICAL_ANY_PROPERTY); while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_RDATE_PROPERTY: { icaltimetype t = icalproperty_get_rdate(p).time; if (icaltime_is_date(t)) { // RDATE with a DATE value inherits the (local) time from DTSTART t.hour = dtstart.hour; t.minute = dtstart.minute; t.second = dtstart.second; t.is_date = 0; } // RFC2445 states that RDATE must be in local time, // but we support UTC as well to be safe. if (!icaltime_is_utc(t)) { t.second -= prevOffset; // convert to UTC t = icaltime_convert_to_zone(t, icaltimezone_get_utc_timezone()); t = icaltime_normalize(t); } phase.transitions += toQDateTime(t); break; } case ICAL_RRULE_PROPERTY: { RecurrenceRule r; ICalFormat icf; ICalFormatImpl impl(&icf); impl.readRecurrence(icalproperty_get_rrule(p), &r); r.setStartDt(utcStart); // The end date time specified in an RRULE must be in UTC. // We can not guarantee correctness if this is not the case. if (r.duration() == 0 && r.endDt().timeSpec() != Qt::UTC) { qWarning() << "UNTIL in RRULE must be specified in UTC"; break; } const auto dts = r.timesInInterval(utcStart, maxTime); for (int i = 0, end = dts.count(); i < end; ++i) { phase.transitions += dts[i]; } break; } default: break; } p = icalcomponent_get_next_property(c, ICAL_ANY_PROPERTY); } sortAndRemoveDuplicates(phase.transitions); } return true; } QByteArray ICalTimeZoneParser::vcaltimezoneFromQTimeZone(const QTimeZone &qtz, const QDateTime &earliest) { auto icalTz = icalcomponentFromQTimeZone(qtz, earliest); const QByteArray result(icalcomponent_as_ical_string(icalTz)); icalmemory_free_ring(); icalcomponent_free(icalTz); return result; } } // namespace KCalendarCore dde-calendar-5.14.13/3rdparty/kcalendarcore/src/icaltimezones_p.h000066400000000000000000000044021473346337000246740ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2005-2007 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_ICALTIMEZONES_P_H #define KCALCORE_ICALTIMEZONES_P_H #include "incidencebase.h" #include #include #include #ifndef ICALCOMPONENT_H typedef struct icalcomponent_impl icalcomponent; #endif #ifndef ICALTIMEZONE_DEFINED #define ICALTIMEZONE_DEFINED typedef struct _icaltimezone icaltimezone; #endif namespace KCalendarCore { class ICalTimeZonePhase; class ICalTimeZonePhase { public: void dump(); QSet abbrevs; // abbreviations of the phase int utcOffset = 0; // UTC offset of the phase QVector transitions; // times on which transition into this phase occurs }; class ICalTimeZone { public: void dump(); QByteArray id; // original TZID QTimeZone qZone; // QTimeZone mapped from TZID ICalTimeZonePhase standard; // standard time ICalTimeZonePhase daylight; // DST time }; class Q_CORE_EXPORT ICalTimeZoneCache { public: explicit ICalTimeZoneCache(); void insert(const QByteArray &id, const ICalTimeZone &tz); QTimeZone tzForTime(const QDateTime &dt, const QByteArray &tzid) const; private: QHash mCache; }; using TimeZoneEarliestDate = QHash; class Q_CORE_EXPORT ICalTimeZoneParser { public: explicit ICalTimeZoneParser(ICalTimeZoneCache *cache); void parse(icalcomponent *calendar); static void updateTzEarliestDate(const IncidenceBase::Ptr &incidence, TimeZoneEarliestDate *earliestDate); static icaltimezone *icaltimezoneFromQTimeZone(const QTimeZone &qtz, const QDateTime &earliest); static QByteArray vcaltimezoneFromQTimeZone(const QTimeZone &qtz, const QDateTime &earliest); private: static icalcomponent *icalcomponentFromQTimeZone(const QTimeZone &qtz, const QDateTime &earliest); ICalTimeZone parseTimeZone(icalcomponent *zone); bool parsePhase(icalcomponent *c, bool daylight, ICalTimeZonePhase &phase); QTimeZone resolveICalTimeZone(const ICalTimeZone &icalZone); ICalTimeZoneCache *mCache; }; } // namespace KCalendarCore inline uint qHash(const QTimeZone &tz) { return qHash(tz.id()); } #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/incidence.cpp000066400000000000000000000760421473346337000237740ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Incidence class. @brief Provides the class common to non-FreeBusy (Events, To-dos, Journals) calendar components known as incidences. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #include "incidence.h" #include "calformat.h" #include "utils_p.h" #include #include // for .toHtmlEscaped() and Qt::mightBeRichText() #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Incidence::Private { public: Private() : mGeoLatitude(INVALID_LATLON) , mGeoLongitude(INVALID_LATLON) , mRecurrence(nullptr) , mRevision(0) , mPriority(0) , mStatus(StatusNone) , mSecrecy(SecrecyPublic) , mDescriptionIsRich(false) , mSummaryIsRich(false) , mLocationIsRich(false) , mHasGeo(false) , mThisAndFuture(false) , mLocalOnly(false) { } Private(const Private &p) : mCreated(p.mCreated) , mDescription(p.mDescription) , mSummary(p.mSummary) , mLocation(p.mLocation) , mCategories(p.mCategories) , mResources(p.mResources) , mStatusString(p.mStatusString) , mSchedulingID(p.mSchedulingID) , mRelatedToUid(p.mRelatedToUid) , mRecurrenceId(p.mRecurrenceId) , mConferences(p.mConferences) , mGeoLatitude(p.mGeoLatitude) , mGeoLongitude(p.mGeoLongitude) , mRecurrence(nullptr) , mRevision(p.mRevision) , mPriority(p.mPriority) , mStatus(p.mStatus) , mSecrecy(p.mSecrecy) , mColor(p.mColor) , mDescriptionIsRich(p.mDescriptionIsRich) , mSummaryIsRich(p.mSummaryIsRich) , mLocationIsRich(p.mLocationIsRich) , mHasGeo(p.mHasGeo) , mThisAndFuture(p.mThisAndFuture) , mLocalOnly(false) { } void clear() { mAlarms.clear(); mAttachments.clear(); delete mRecurrence; mRecurrence = nullptr; } void init(Incidence *dest, const Incidence &src) { mRevision = src.d->mRevision; mCreated = src.d->mCreated; mDescription = src.d->mDescription; mDescriptionIsRich = src.d->mDescriptionIsRich; mSummary = src.d->mSummary; mSummaryIsRich = src.d->mSummaryIsRich; mCategories = src.d->mCategories; mRelatedToUid = src.d->mRelatedToUid; mResources = src.d->mResources; mStatusString = src.d->mStatusString; mStatus = src.d->mStatus; mSecrecy = src.d->mSecrecy; mPriority = src.d->mPriority; mLocation = src.d->mLocation; mLocationIsRich = src.d->mLocationIsRich; mGeoLatitude = src.d->mGeoLatitude; mGeoLongitude = src.d->mGeoLongitude; mHasGeo = src.d->mHasGeo; mRecurrenceId = src.d->mRecurrenceId; mConferences = src.d->mConferences; mThisAndFuture = src.d->mThisAndFuture; mLocalOnly = src.d->mLocalOnly; mColor = src.d->mColor; // Alarms and Attachments are stored in ListBase<...>, which is a QValueList<...*>. // We need to really duplicate the objects stored therein, otherwise deleting // i will also delete all attachments from this object (setAutoDelete...) mAlarms.reserve(src.d->mAlarms.count()); for (const Alarm::Ptr &alarm : qAsConst(src.d->mAlarms)) { Alarm::Ptr b(new Alarm(*alarm.data())); b->setParent(dest); mAlarms.append(b); } mAttachments = src.d->mAttachments; if (src.d->mRecurrence) { mRecurrence = new Recurrence(*(src.d->mRecurrence)); mRecurrence->addObserver(dest); } else { mRecurrence = nullptr; } } QDateTime mCreated; // creation datetime QString mDescription; // description string QString mSummary; // summary string QString mLocation; // location string QStringList mCategories; // category list Attachment::List mAttachments; // attachments list Alarm::List mAlarms; // alarms list QStringList mResources; // resources list (not calendar resources) QString mStatusString; // status string, for custom status QString mSchedulingID; // ID for scheduling mails QMap mRelatedToUid; // incidence uid this is related to, for each relType QDateTime mRecurrenceId; // recurrenceId Conference::List mConferences; // conference list float mGeoLatitude; // Specifies latitude in decimal degrees float mGeoLongitude; // Specifies longitude in decimal degrees mutable Recurrence *mRecurrence; // recurrence int mRevision; // revision number int mPriority; // priority: 1 = highest, 2 = less, etc. Status mStatus; // status Secrecy mSecrecy; // secrecy QString mColor; // background color bool mDescriptionIsRich = false; // description string is richtext. bool mSummaryIsRich = false; // summary string is richtext. bool mLocationIsRich = false; // location string is richtext. bool mHasGeo = false; // if incidence has geo data bool mThisAndFuture = false; bool mLocalOnly = false; // allow changes that won't go to the server }; //@endcond Incidence::Incidence() : IncidenceBase() , d(new KCalendarCore::Incidence::Private) { recreate(); resetDirtyFields(); } Incidence::Incidence(const Incidence &i) : IncidenceBase(i) , Recurrence::RecurrenceObserver() , d(new KCalendarCore::Incidence::Private(*i.d)) { d->init(this, i); resetDirtyFields(); } Incidence::~Incidence() { // Alarm has a raw incidence pointer, so we must set it to 0 // so Alarm doesn't use it after Incidence is destroyed for (const Alarm::Ptr &alarm : qAsConst(d->mAlarms)) { alarm->setParent(nullptr); } delete d->mRecurrence; delete d; } //@cond PRIVATE // A string comparison that considers that null and empty are the same static bool stringCompare(const QString &s1, const QString &s2) { return (s1.isEmpty() && s2.isEmpty()) || (s1 == s2); } //@endcond IncidenceBase &Incidence::assign(const IncidenceBase &other) { if (&other != this) { d->clear(); // TODO: should relations be cleared out, as in destructor??? IncidenceBase::assign(other); const Incidence *i = static_cast(&other); d->init(this, *i); } return *this; } bool Incidence::equals(const IncidenceBase &incidence) const { if (!IncidenceBase::equals(incidence)) { return false; } // If they weren't the same type IncidenceBase::equals would had returned false already const Incidence *i2 = static_cast(&incidence); const auto alarmList = alarms(); const auto otherAlarmsList = i2->alarms(); if (alarmList.count() != otherAlarmsList.count()) { return false; } Alarm::List::ConstIterator a1 = alarmList.constBegin(); Alarm::List::ConstIterator a1end = alarmList.constEnd(); Alarm::List::ConstIterator a2 = otherAlarmsList.constBegin(); Alarm::List::ConstIterator a2end = otherAlarmsList.constEnd(); for (; a1 != a1end && a2 != a2end; ++a1, ++a2) { if (**a1 == **a2) { continue; } else { return false; } } const auto attachmentList = attachments(); const auto otherAttachmentList = i2->attachments(); if (attachmentList.count() != otherAttachmentList.count()) { return false; } Attachment::List::ConstIterator att1 = attachmentList.constBegin(); const Attachment::List::ConstIterator att1end = attachmentList.constEnd(); Attachment::List::ConstIterator att2 = otherAttachmentList.constBegin(); const Attachment::List::ConstIterator att2end = otherAttachmentList.constEnd(); for (; att1 != att1end && att2 != att2end; ++att1, ++att2) { if (*att1 == *att2) { continue; } else { return false; } } bool recurrenceEqual = (d->mRecurrence == nullptr && i2->d->mRecurrence == nullptr); if (!recurrenceEqual) { recurrence(); // create if doesn't exist i2->recurrence(); // create if doesn't exist recurrenceEqual = d->mRecurrence != nullptr && i2->d->mRecurrence != nullptr && *d->mRecurrence == *i2->d->mRecurrence; } if (d->mHasGeo == i2->d->mHasGeo) { if (d->mHasGeo && (!qFuzzyCompare(d->mGeoLatitude, i2->d->mGeoLatitude) || !qFuzzyCompare(d->mGeoLongitude, i2->d->mGeoLongitude))) { return false; } } else { return false; } // clang-format off return recurrenceEqual && created() == i2->created() && stringCompare(description(), i2->description()) && descriptionIsRich() == i2->descriptionIsRich() && stringCompare(summary(), i2->summary()) && summaryIsRich() == i2->summaryIsRich() && categories() == i2->categories() && stringCompare(relatedTo(), i2->relatedTo()) && resources() == i2->resources() && d->mStatus == i2->d->mStatus && (d->mStatus == StatusNone || stringCompare(d->mStatusString, i2->d->mStatusString)) && secrecy() == i2->secrecy() && priority() == i2->priority() && stringCompare(location(), i2->location()) && locationIsRich() == i2->locationIsRich() && stringCompare(color(), i2->color()) && stringCompare(schedulingID(), i2->schedulingID()) && recurrenceId() == i2->recurrenceId() && conferences() == i2->conferences() && thisAndFuture() == i2->thisAndFuture(); // clang-format on } QString Incidence::instanceIdentifier() const { if (hasRecurrenceId()) { return uid() + recurrenceId().toString(Qt::ISODate); } return uid(); } void Incidence::recreate() { const QDateTime nowUTC = QDateTime::currentDateTimeUtc(); setCreated(nowUTC); setSchedulingID(QString(), CalFormat::createUniqueId()); setRevision(0); setLastModified(nowUTC); // NOLINT false clang-analyzer-optin.cplusplus.VirtualCall } void Incidence::setLastModified(const QDateTime &lm) { if (!d->mLocalOnly) { IncidenceBase::setLastModified(lm); } } void Incidence::setReadOnly(bool readOnly) { IncidenceBase::setReadOnly(readOnly); if (d->mRecurrence) { d->mRecurrence->setRecurReadOnly(readOnly); } } void Incidence::setLocalOnly(bool localOnly) { if (mReadOnly) { return; } d->mLocalOnly = localOnly; } bool Incidence::localOnly() const { return d->mLocalOnly; } void Incidence::setAllDay(bool allDay) { if (mReadOnly) { return; } if (d->mRecurrence) { d->mRecurrence->setAllDay(allDay); } IncidenceBase::setAllDay(allDay); } void Incidence::setCreated(const QDateTime &created) { if (mReadOnly || d->mLocalOnly) { return; } d->mCreated = created.toUTC(); const auto ct = d->mCreated.time(); // Remove milliseconds d->mCreated.setTime(QTime(ct.hour(), ct.minute(), ct.second())); setFieldDirty(FieldCreated); // FIXME: Shouldn't we call updated for the creation date, too? // updated(); } QDateTime Incidence::created() const { return d->mCreated; } void Incidence::setRevision(int rev) { if (mReadOnly || d->mLocalOnly) { return; } update(); d->mRevision = rev; setFieldDirty(FieldRevision); updated(); } int Incidence::revision() const { return d->mRevision; } void Incidence::setDtStart(const QDateTime &dt) { IncidenceBase::setDtStart(dt); if (d->mRecurrence && dirtyFields().contains(FieldDtStart)) { d->mRecurrence->setStartDateTime(dt, allDay()); } } void Incidence::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { IncidenceBase::shiftTimes(oldZone, newZone); if (d->mRecurrence) { d->mRecurrence->shiftTimes(oldZone, newZone); } for (int i = 0, end = d->mAlarms.count(); i < end; ++i) { d->mAlarms[i]->shiftTimes(oldZone, newZone); } } void Incidence::setDescription(const QString &description, bool isRich) { if (mReadOnly) { return; } update(); d->mDescription = description; d->mDescriptionIsRich = isRich; setFieldDirty(FieldDescription); updated(); } void Incidence::setDescription(const QString &description) { setDescription(description, Qt::mightBeRichText(description)); } QString Incidence::description() const { return d->mDescription; } QString Incidence::richDescription() const { if (descriptionIsRich()) { return d->mDescription; } else { return d->mDescription.toHtmlEscaped().replace(QLatin1Char('\n'), QStringLiteral("
")); } } bool Incidence::descriptionIsRich() const { return d->mDescriptionIsRich; } void Incidence::setSummary(const QString &summary, bool isRich) { if (mReadOnly) { return; } if (d->mSummary != summary || d->mSummaryIsRich != isRich) { update(); d->mSummary = summary; d->mSummaryIsRich = isRich; setFieldDirty(FieldSummary); updated(); } } void Incidence::setSummary(const QString &summary) { setSummary(summary, Qt::mightBeRichText(summary)); } QString Incidence::summary() const { return d->mSummary; } QString Incidence::richSummary() const { if (summaryIsRich()) { return d->mSummary; } else { return d->mSummary.toHtmlEscaped().replace(QLatin1Char('\n'), QStringLiteral("
")); } } bool Incidence::summaryIsRich() const { return d->mSummaryIsRich; } void Incidence::setCategories(const QStringList &categories) { if (mReadOnly) { return; } update(); d->mCategories = categories; updated(); } void Incidence::setCategories(const QString &catStr) { if (mReadOnly) { return; } update(); setFieldDirty(FieldCategories); d->mCategories.clear(); if (catStr.isEmpty()) { updated(); return; } d->mCategories = catStr.split(QLatin1Char(',')); QStringList::Iterator it; for (it = d->mCategories.begin(); it != d->mCategories.end(); ++it) { *it = (*it).trimmed(); } updated(); } QStringList Incidence::categories() const { return d->mCategories; } QString Incidence::categoriesStr() const { return d->mCategories.join(QLatin1Char(',')); } void Incidence::setRelatedTo(const QString &relatedToUid, RelType relType) { // TODO: RFC says that an incidence can have more than one related-to field // even for the same relType. if (d->mRelatedToUid[relType] != relatedToUid) { update(); d->mRelatedToUid[relType] = relatedToUid; setFieldDirty(FieldRelatedTo); updated(); } } QString Incidence::relatedTo(RelType relType) const { return d->mRelatedToUid.value(relType); } void Incidence::setColor(const QString &colorName) { if (mReadOnly) { return; } if (!stringCompare(d->mColor, colorName)) { update(); d->mColor = colorName; setFieldDirty(FieldColor); updated(); } } QString Incidence::color() const { return d->mColor; } // %%%%%%%%%%%% Recurrence-related methods %%%%%%%%%%%%%%%%%%%% Recurrence *Incidence::recurrence() const { if (!d->mRecurrence) { d->mRecurrence = new Recurrence(); d->mRecurrence->setStartDateTime(dateTime(RoleRecurrenceStart), allDay()); d->mRecurrence->setAllDay(allDay()); d->mRecurrence->setRecurReadOnly(mReadOnly); d->mRecurrence->addObserver(const_cast(this)); } return d->mRecurrence; } void Incidence::clearRecurrence() { delete d->mRecurrence; d->mRecurrence = nullptr; } ushort Incidence::recurrenceType() const { if (d->mRecurrence) { return d->mRecurrence->recurrenceType(); } else { return Recurrence::rNone; } } bool Incidence::recurs() const { if (d->mRecurrence) { return d->mRecurrence->recurs(); } else { return false; } } bool Incidence::recursOn(const QDate &date, const QTimeZone &timeZone) const { return d->mRecurrence && d->mRecurrence->recursOn(date, timeZone); } bool Incidence::recursAt(const QDateTime &qdt) const { return d->mRecurrence && d->mRecurrence->recursAt(qdt); } QList Incidence::startDateTimesForDate(const QDate &date, const QTimeZone &timeZone) const { QDateTime start = dtStart(); QDateTime end = dateTime(RoleEndRecurrenceBase); QList result; // TODO_Recurrence: Also work if only due date is given... if (!start.isValid() && !end.isValid()) { return result; } // if the incidence doesn't recur, QDateTime kdate(date, {}, timeZone); if (!recurs()) { if (start.date() <= date && end.date() >= date) { result << start; } return result; } qint64 days = start.daysTo(end); // Account for possible recurrences going over midnight, while the original event doesn't QDate tmpday(date.addDays(-days - 1)); QDateTime tmp; while (tmpday <= date) { if (recurrence()->recursOn(tmpday, timeZone)) { const QList times = recurrence()->recurTimesOn(tmpday, timeZone); for (const QTime &time : times) { tmp = QDateTime(tmpday, time, start.timeZone()); if (endDateForStart(tmp) >= kdate) { result << tmp; } } } tmpday = tmpday.addDays(1); } return result; } QList Incidence::startDateTimesForDateTime(const QDateTime &datetime) const { QDateTime start = dtStart(); QDateTime end = dateTime(RoleEndRecurrenceBase); QList result; // TODO_Recurrence: Also work if only due date is given... if (!start.isValid() && !end.isValid()) { return result; } // if the incidence doesn't recur, if (!recurs()) { if (!(start > datetime || end < datetime)) { result << start; } return result; } qint64 days = start.daysTo(end); // Account for possible recurrences going over midnight, while the original event doesn't QDate tmpday(datetime.date().addDays(-days - 1)); QDateTime tmp; while (tmpday <= datetime.date()) { if (recurrence()->recursOn(tmpday, datetime.timeZone())) { // Get the times during the day (in start date's time zone) when recurrences happen const QList times = recurrence()->recurTimesOn(tmpday, start.timeZone()); for (const QTime &time : times) { tmp = QDateTime(tmpday, time, start.timeZone()); if (!(tmp > datetime || endDateForStart(tmp) < datetime)) { result << tmp; } } } tmpday = tmpday.addDays(1); } return result; } QDateTime Incidence::endDateForStart(const QDateTime &startDt) const { QDateTime start = dtStart(); QDateTime end = dateTime(RoleEndRecurrenceBase); if (!end.isValid()) { return start; } if (!start.isValid()) { return end; } return startDt.addSecs(start.secsTo(end)); } void Incidence::addAttachment(const Attachment &attachment) { if (mReadOnly || attachment.isEmpty()) { return; } update(); d->mAttachments.append(attachment); setFieldDirty(FieldAttachment); updated(); } void Incidence::deleteAttachments(const QString &mime) { Attachment::List result; Attachment::List::Iterator it = d->mAttachments.begin(); while (it != d->mAttachments.end()) { if ((*it).mimeType() != mime) { result += *it; } ++it; } d->mAttachments = result; setFieldDirty(FieldAttachment); } Attachment::List Incidence::attachments() const { return d->mAttachments; } Attachment::List Incidence::attachments(const QString &mime) const { Attachment::List attachments; for (const Attachment &attachment : qAsConst(d->mAttachments)) { if (attachment.mimeType() == mime) { attachments.append(attachment); } } return attachments; } void Incidence::clearAttachments() { setFieldDirty(FieldAttachment); d->mAttachments.clear(); } void Incidence::setResources(const QStringList &resources) { if (mReadOnly) { return; } update(); d->mResources = resources; setFieldDirty(FieldResources); updated(); } QStringList Incidence::resources() const { return d->mResources; } void Incidence::setPriority(int priority) { if (mReadOnly) { return; } update(); d->mPriority = priority; setFieldDirty(FieldPriority); updated(); } int Incidence::priority() const { return d->mPriority; } void Incidence::setStatus(Incidence::Status status) { if (mReadOnly || status == StatusX) { return; } update(); d->mStatus = status; d->mStatusString.clear(); setFieldDirty(FieldStatus); updated(); } void Incidence::setCustomStatus(const QString &status) { if (mReadOnly) { return; } update(); d->mStatus = status.isEmpty() ? StatusNone : StatusX; d->mStatusString = status; setFieldDirty(FieldStatus); updated(); } Incidence::Status Incidence::status() const { return d->mStatus; } QString Incidence::customStatus() const { if (d->mStatus == StatusX) { return d->mStatusString; } else { return QString(); } } void Incidence::setSecrecy(Incidence::Secrecy secrecy) { if (mReadOnly) { return; } update(); d->mSecrecy = secrecy; setFieldDirty(FieldSecrecy); updated(); } Incidence::Secrecy Incidence::secrecy() const { return d->mSecrecy; } Alarm::List Incidence::alarms() const { return d->mAlarms; } Alarm::Ptr Incidence::newAlarm() { Alarm::Ptr alarm(new Alarm(this)); d->mAlarms.append(alarm); return alarm; } void Incidence::addAlarm(const Alarm::Ptr &alarm) { update(); d->mAlarms.append(alarm); setFieldDirty(FieldAlarms); updated(); } void Incidence::removeAlarm(const Alarm::Ptr &alarm) { const int index = d->mAlarms.indexOf(alarm); if (index > -1) { update(); d->mAlarms.remove(index); setFieldDirty(FieldAlarms); updated(); } } void Incidence::clearAlarms() { update(); d->mAlarms.clear(); setFieldDirty(FieldAlarms); updated(); } bool Incidence::hasEnabledAlarms() const { for (const Alarm::Ptr &alarm : qAsConst(d->mAlarms)) { if (alarm->enabled()) { return true; } } return false; } Conference::List Incidence::conferences() const { return d->mConferences; } void Incidence::addConference(const Conference &conference) { update(); d->mConferences.push_back(conference); setFieldDirty(FieldConferences); updated(); } void Incidence::setConferences(const Conference::List &conferences) { update(); d->mConferences = conferences; setFieldDirty(FieldConferences); updated(); } void Incidence::clearConferences() { update(); d->mConferences.clear(); setFieldDirty(FieldConferences); updated(); } void Incidence::setLocation(const QString &location, bool isRich) { if (mReadOnly) { return; } if (d->mLocation != location || d->mLocationIsRich != isRich) { update(); d->mLocation = location; d->mLocationIsRich = isRich; setFieldDirty(FieldLocation); updated(); } } void Incidence::setLocation(const QString &location) { setLocation(location, Qt::mightBeRichText(location)); } QString Incidence::location() const { return d->mLocation; } QString Incidence::richLocation() const { if (locationIsRich()) { return d->mLocation; } else { return d->mLocation.toHtmlEscaped().replace(QLatin1Char('\n'), QStringLiteral("
")); } } bool Incidence::locationIsRich() const { return d->mLocationIsRich; } void Incidence::setSchedulingID(const QString &sid, const QString &uid) { if (!uid.isEmpty()) { setUid(uid); } if (sid != d->mSchedulingID) { d->mSchedulingID = sid; setFieldDirty(FieldSchedulingId); } } QString Incidence::schedulingID() const { if (d->mSchedulingID.isNull()) { // Nothing set, so use the normal uid return uid(); } return d->mSchedulingID; } bool Incidence::hasGeo() const { return d->mHasGeo; } void Incidence::setHasGeo(bool hasGeo) { if (mReadOnly) { return; } if (hasGeo == d->mHasGeo) { return; } update(); d->mHasGeo = hasGeo; setFieldDirty(FieldGeoLatitude); setFieldDirty(FieldGeoLongitude); updated(); } float Incidence::geoLatitude() const { return d->mGeoLatitude; } void Incidence::setGeoLatitude(float geolatitude) { if (mReadOnly) { return; } update(); d->mGeoLatitude = geolatitude; setFieldDirty(FieldGeoLatitude); updated(); } float Incidence::geoLongitude() const { return d->mGeoLongitude; } void Incidence::setGeoLongitude(float geolongitude) { if (!mReadOnly) { update(); d->mGeoLongitude = geolongitude; setFieldDirty(FieldGeoLongitude); updated(); } } bool Incidence::hasRecurrenceId() const { return (allDay() && d->mRecurrenceId.date().isValid()) || d->mRecurrenceId.isValid(); } QDateTime Incidence::recurrenceId() const { return d->mRecurrenceId; } void Incidence::setThisAndFuture(bool thisAndFuture) { d->mThisAndFuture = thisAndFuture; } bool Incidence::thisAndFuture() const { return d->mThisAndFuture; } void Incidence::setRecurrenceId(const QDateTime &recurrenceId) { if (!mReadOnly) { update(); d->mRecurrenceId = recurrenceId; setFieldDirty(FieldRecurrenceId); updated(); } } /** Observer interface for the recurrence class. If the recurrence is changed, this method will be called for the incidence the recurrence object belongs to. */ void Incidence::recurrenceUpdated(Recurrence *recurrence) { if (recurrence == d->mRecurrence) { update(); setFieldDirty(FieldRecurrence); updated(); } } //@cond PRIVATE #define ALT_DESC_FIELD "X-ALT-DESC" #define ALT_DESC_PARAMETERS QStringLiteral("FMTTYPE=text/html") //@endcond bool Incidence::hasAltDescription() const { const QString value = nonKDECustomProperty(ALT_DESC_FIELD); const QString parameter = nonKDECustomPropertyParameters(ALT_DESC_FIELD); return parameter == ALT_DESC_PARAMETERS && !value.isEmpty(); } void Incidence::setAltDescription(const QString &altdescription) { if (altdescription.isEmpty()) { removeNonKDECustomProperty(ALT_DESC_FIELD); } else { setNonKDECustomProperty(ALT_DESC_FIELD, altdescription, ALT_DESC_PARAMETERS); } } QString Incidence::altDescription() const { if (!hasAltDescription()) { return QString(); } else { return nonKDECustomProperty(ALT_DESC_FIELD); } } /** static */ QStringList Incidence::mimeTypes() { return QStringList() << QStringLiteral("text/calendar") << KCalendarCore::Event::eventMimeType() << KCalendarCore::Todo::todoMimeType() << KCalendarCore::Journal::journalMimeType(); } void Incidence::serialize(QDataStream &out) const { serializeQDateTimeAsKDateTime(out, d->mCreated); out << d->mRevision << d->mDescription << d->mDescriptionIsRich << d->mSummary << d->mSummaryIsRich << d->mLocation << d->mLocationIsRich << d->mCategories << d->mResources << d->mStatusString << d->mPriority << d->mSchedulingID << d->mGeoLatitude << d->mGeoLongitude << d->mHasGeo; serializeQDateTimeAsKDateTime(out, d->mRecurrenceId); out << d->mThisAndFuture << d->mLocalOnly << d->mStatus << d->mSecrecy << (d->mRecurrence ? true : false) << d->mAttachments.count() << d->mAlarms.count() << d->mConferences.count() << d->mRelatedToUid; if (d->mRecurrence) { out << d->mRecurrence; } for (const Attachment &attachment : qAsConst(d->mAttachments)) { out << attachment; } for (const Alarm::Ptr &alarm : qAsConst(d->mAlarms)) { out << alarm; } for (const Conference &conf : qAsConst(d->mConferences)) { out << conf; } } void Incidence::deserialize(QDataStream &in) { quint32 status, secrecy; bool hasRecurrence; int attachmentCount, alarmCount, conferencesCount; QMap relatedToUid; deserializeKDateTimeAsQDateTime(in, d->mCreated); in >> d->mRevision >> d->mDescription >> d->mDescriptionIsRich >> d->mSummary >> d->mSummaryIsRich >> d->mLocation >> d->mLocationIsRich >> d->mCategories >> d->mResources >> d->mStatusString >> d->mPriority >> d->mSchedulingID >> d->mGeoLatitude >> d->mGeoLongitude >> d->mHasGeo; deserializeKDateTimeAsQDateTime(in, d->mRecurrenceId); in >> d->mThisAndFuture >> d->mLocalOnly >> status >> secrecy >> hasRecurrence >> attachmentCount >> alarmCount >> conferencesCount >> relatedToUid; if (hasRecurrence) { d->mRecurrence = new Recurrence(); d->mRecurrence->addObserver(const_cast(this)); in >> d->mRecurrence; } d->mAttachments.clear(); d->mAlarms.clear(); d->mConferences.clear(); d->mAttachments.reserve(attachmentCount); for (int i = 0; i < attachmentCount; ++i) { Attachment attachment; in >> attachment; d->mAttachments.append(attachment); } d->mAlarms.reserve(alarmCount); for (int i = 0; i < alarmCount; ++i) { Alarm::Ptr alarm = Alarm::Ptr(new Alarm(this)); in >> alarm; d->mAlarms.append(alarm); } d->mConferences.reserve(conferencesCount); for (int i = 0; i < conferencesCount; ++i) { Conference conf; in >> conf; d->mConferences.push_back(conf); } d->mStatus = static_cast(status); d->mSecrecy = static_cast(secrecy); d->mRelatedToUid.clear(); auto it = relatedToUid.cbegin(), end = relatedToUid.cend(); for (; it != end; ++it) { d->mRelatedToUid.insert(static_cast(it.key()), it.value()); } } namespace { template QVariantList toVariantList(int size, typename QVector::ConstIterator begin, typename QVector::ConstIterator end) { QVariantList l; l.reserve(size); std::transform(begin, end, std::back_inserter(l), [](const T &val) { return QVariant::fromValue(val); }); return l; } } // namespace QVariantList Incidence::attachmentsVariant() const { return toVariantList(d->mAttachments.size(), d->mAttachments.cbegin(), d->mAttachments.cend()); } QVariantList Incidence::conferencesVariant() const { return toVariantList(d->mConferences.size(), d->mConferences.cbegin(), d->mConferences.cend()); } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/incidence.h000066400000000000000000000703111473346337000234320ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Incidence class. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #ifndef KCALCORE_INCIDENCE_H #define KCALCORE_INCIDENCE_H #include "alarm.h" #include "attachment.h" #include "conference.h" #include "incidencebase.h" #include "recurrence.h" #include //@cond PRIVATE // Value used to signal invalid/unset latitude or longitude. #define INVALID_LATLON 255.0 // krazy:exclude=defines (part of the API) //@endcond namespace KCalendarCore { /** @brief Provides the abstract base class common to non-FreeBusy (Events, To-dos, Journals) calendar components known as incidences. Several properties are not allowed for VFREEBUSY objects (see rfc:2445), so they are not in IncidenceBase. The hierarchy is: IncidenceBase + FreeBusy + Incidence + Event + Todo + Journal So IncidenceBase contains all properties that are common to all classes, and Incidence contains all additional properties that are common to Events, Todos and Journals, but are not allowed for FreeBusy entries. */ class Q_CORE_EXPORT Incidence : public IncidenceBase , public Recurrence::RecurrenceObserver { Q_GADGET Q_PROPERTY(QString description READ description WRITE setDescription) Q_PROPERTY(QString summary READ summary WRITE setSummary) Q_PROPERTY(QString location READ location WRITE setLocation) Q_PROPERTY(bool hasGeo READ hasGeo WRITE setHasGeo) Q_PROPERTY(float geoLatitude READ geoLatitude WRITE setGeoLatitude) Q_PROPERTY(float geoLongitude READ geoLongitude WRITE setGeoLongitude) Q_PROPERTY(QStringList categories READ categories WRITE setCategories) Q_PROPERTY(int priority READ priority WRITE setPriority) Q_PROPERTY(QDateTime created READ created WRITE setCreated) Q_PROPERTY(KCalendarCore::Incidence::Secrecy secrecy READ secrecy WRITE setSecrecy) Q_PROPERTY(KCalendarCore::Incidence::Status status READ status WRITE setStatus) Q_PROPERTY(QVariantList attachments READ attachmentsVariant) Q_PROPERTY(QVariantList conferences READ conferencesVariant) public: /** The different types of overall incidence status or confirmation. The meaning is specific to the incidence type in context. */ enum Status { StatusNone, /**< No status */ StatusTentative, /**< event is tentative */ StatusConfirmed, /**< event is definite */ StatusCompleted, /**< to-do completed */ StatusNeedsAction, /**< to-do needs action */ StatusCanceled, /**< event or to-do canceled; journal removed */ StatusInProcess, /**< to-do in process */ StatusDraft, /**< journal is draft */ StatusFinal, /**< journal is final */ StatusX, /**< a non-standard status string */ }; Q_ENUM(Status) /** The different types of incidence access classifications. */ enum Secrecy { SecrecyPublic, /**< Not secret (default) */ SecrecyPrivate, /**< Secret to the owner */ SecrecyConfidential, /**< Secret to the owner and some others */ }; Q_ENUM(Secrecy) /** The different types of RELTYPE values specified by the RFC. Only RelTypeParent is supported for now. */ enum RelType { RelTypeParent, /**< The related incidence is a parent. */ RelTypeChild, /**< The related incidence is a child. */ RelTypeSibling, /**< The related incidence is a peer. */ }; /** A shared pointer to an Incidence. */ typedef QSharedPointer Ptr; /** List of incidences. */ typedef QVector List; /** Constructs an empty incidence.* */ Incidence(); /** Destroys an incidence. */ ~Incidence() override; /** Returns an exact copy of this incidence. The returned object is owned by the caller. Dirty fields are cleared. */ virtual Incidence *clone() const = 0; /** Returns a unique identifier for a specific instance of an incidence. 返回事件的特定实例的唯一标识符 Due to the recurrence-id, the uid is not unique for a KCalendarCore::Incidence. @since 4.11 */ Q_REQUIRED_RESULT QString instanceIdentifier() const; /** Set readonly state of incidence. 设置关联的只读状态。 @param readonly If true, the incidence is set to readonly, if false the incidence is set to readwrite. */ void setReadOnly(bool readonly) override; /** @copydoc IncidenceBase::setLastModified(). */ void setLastModified(const QDateTime &lm) override; /** Set localOnly state of incidence. A local only incidence can be updated but it will not increase the revision number neither the modified date. 设置事件的本地唯一状态。 一个只在本地发生的事件可以被更新,但它不会增加修订号和修改日期,编号,也不增加修改日期。 @param localonly If true, the incidence is set to localonly, if false the incidence is set to normal stat. */ void setLocalOnly(bool localonly); /** Get the localOnly status. @return true if Local only, false otherwise. @see setLocalOnly() */ Q_REQUIRED_RESULT bool localOnly() const; /** @copydoc IncidenceBase::setAllDay(). */ void setAllDay(bool allDay) override; /** Recreate incidence. The incidence is made a new unique incidence, but already stored information is preserved. Sets unique id, creation date, last modification date and revision number. 重新创建事件。该事件被制成一个新的唯一事件,但已经存储的信息被保留下来。设置唯一的ID、创建日期、最后修改日期和修订号。 */ void recreate(); /** Sets the incidence creation date/time. It is stored as a UTC date/time. @param dt is the creation date/time. @see created(). */ void setCreated(const QDateTime &dt); /** Returns the incidence creation date/time. @see setCreated(). */ Q_REQUIRED_RESULT QDateTime created() const; /** Sets the number of revisions this incidence has seen. 设置此事件已看到的修订数。 @param rev is the incidence revision number. @see revision(). */ void setRevision(int rev); /** Returns the number of revisions this incidence has seen. @see setRevision(). */ Q_REQUIRED_RESULT int revision() const; /** Sets the incidence starting date/time. @param dt is the starting date/time. @see IncidenceBase::dtStart(). */ void setDtStart(const QDateTime &dt) override; /** @copydoc IncidenceBase::shiftTimes() */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) override; /** Sets the incidence description. @param description is the incidence description string. @param isRich if true indicates the description string contains richtext. @see description(). */ void setDescription(const QString &description, bool isRich); /** Sets the incidence description and tries to guess if the description is rich text. @param description is the incidence description string. @see description(). */ void setDescription(const QString &description); /** Returns the incidence description. @see setDescription(). @see richDescription(). */ Q_REQUIRED_RESULT QString description() const; /** Returns the incidence description in rich text format. @see setDescription(). @see description(). */ Q_REQUIRED_RESULT QString richDescription() const; /** Returns true if incidence description contains RichText; false otherwise. @see setDescription(), description(). */ Q_REQUIRED_RESULT bool descriptionIsRich() const; /** Sets the incidence summary. 设置事件摘要。 @param summary is the incidence summary string. @param isRich if true indicates the summary string contains richtext. @see summary(). */ void setSummary(const QString &summary, bool isRich); /** Sets the incidence summary and tries to guess if the summary is richtext. @param summary is the incidence summary string. @see summary(). */ void setSummary(const QString &summary); /** Returns the incidence summary. @see setSummary(). @see richSummary(). */ Q_REQUIRED_RESULT QString summary() const; /** Returns the incidence summary in rich text format. @see setSummary(). @see summary(). */ Q_REQUIRED_RESULT QString richSummary() const; /** Returns true if incidence summary contains RichText; false otherwise. @see setSummary(), summary(). */ Q_REQUIRED_RESULT bool summaryIsRich() const; /** Sets the incidence location. Do _not_ use with journals. 设置关联位置。 不要和日记一起使用。 @param location is the incidence location string. @param isRich if true indicates the location string contains richtext. @see location(). */ void setLocation(const QString &location, bool isRich); /** Sets the incidence location and tries to guess if the location is richtext. Do _not_ use with journals. @param location is the incidence location string. @see location(). */ void setLocation(const QString &location); /** Returns the incidence location. Do _not_ use with journals. @see setLocation(). @see richLocation(). */ Q_REQUIRED_RESULT QString location() const; /** Returns the incidence location in rich text format. @see setLocation(). @see location(). */ Q_REQUIRED_RESULT QString richLocation() const; /** Returns true if incidence location contains RichText; false otherwise. @see setLocation(), location(). */ Q_REQUIRED_RESULT bool locationIsRich() const; /** Sets the incidence category list. @param categories is a list of category strings. @see setCategories( const QString &), categories(). */ void setCategories(const QStringList &categories); /** Sets the incidence category list based on a comma delimited string. @param catStr is a QString containing a list of categories which are delimited by a comma character. @see setCategories( const QStringList &), categories(). */ void setCategories(const QString &catStr); /** Returns the incidence categories as a list of strings. @see setCategories( const QStringList &), setCategories( const QString &). */ Q_REQUIRED_RESULT QStringList categories() const; /** Returns the incidence categories as a comma separated string. @see categories(). */ Q_REQUIRED_RESULT QString categoriesStr() const; /** Relates another incidence to this one, by UID. This function should only be used when constructing a calendar before the related incidence exists. @param uid is a QString containing a UID for another incidence. @param relType specifies the relation type. @warning KCalendarCore only supports one related-to field per reltype for now. @see relatedTo(). */ void setRelatedTo(const QString &uid, RelType relType = RelTypeParent); /** Returns a UID string for the incidence that is related to this one. This function should only be used when constructing a calendar before the related incidence exists. @warning KCalendarCore only supports one related-to field per reltype for now. @param relType specifies the relation type. @see setRelatedTo(). */ Q_REQUIRED_RESULT QString relatedTo(RelType relType = RelTypeParent) const; /** Set the incidence color, as added in RFC7986. 参考RFC7986,设置关联颜色。 @param colorName a named color as defined in CSS3 color name, see https://www.w3.org/TR/css-color-3/#svg-color. @since: 5.76 */ void setColor(const QString &colorName); /** Returns the color, if any is defined, for this incidence. @since: 5.76 */ Q_REQUIRED_RESULT QString color() const; // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Convenience wrappers for property handling // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** Returns true if the alternative (=text/html) description is available. @see setAltDescription(), altDescription() */ Q_REQUIRED_RESULT bool hasAltDescription() const; /** Sets the incidence's alternative (=text/html) description. If the text is empty, the property is removed. @param altdescription is the incidence altdescription string. @see altAltdescription(). */ void setAltDescription(const QString &altdescription); /** Returns the incidence alternative (=text/html) description. @see setAltDescription(). */ Q_REQUIRED_RESULT QString altDescription() const; // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Recurrence-related methods // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** Returns the recurrence rule associated with this incidence. If there is none, returns an appropriate (non-0) object. 返回与此事件关联的重复规则。如果没有,则返回适当的(非0)对象。 */ Recurrence *recurrence() const; /** Removes all recurrence and exception rules and dates. 删除所有重复和异常规则和日期。 */ void clearRecurrence(); /** @copydoc Recurrence::recurs() */ Q_REQUIRED_RESULT bool recurs() const; /** @copydoc Recurrence::recurrenceType() */ Q_REQUIRED_RESULT ushort recurrenceType() const; /** @copydoc Recurrence::recursOn() */ virtual bool recursOn(const QDate &date, const QTimeZone &timeZone) const; /** @copydoc Recurrence::recursAt() */ Q_REQUIRED_RESULT bool recursAt(const QDateTime &dt) const; /** Calculates the start date/time for all recurrences that happen at some time on the given date (might start before that date, but end on or after the given date). @param date the date when the incidence should occur @param timeSpec time specification for @p date. @return the start date/time of all occurrences that overlap with the given date; an empty list if the incidence does not overlap with the date at all. */ virtual QList startDateTimesForDate(const QDate &date, const QTimeZone &timeZone) const; /** Calculates the start date/time for all recurrences that happen at the given time. @param datetime the date/time when the incidence should occur. @return the start date/time of all occurrences that overlap with the given date/time; an empty list if the incidence does not happen at the given time at all. */ Q_REQUIRED_RESULT virtual QList startDateTimesForDateTime(const QDateTime &datetime) const; /** Returns the end date/time of the incidence occurrence if it starts at specified date/time. @param startDt is the specified starting date/time. @return the corresponding end date/time for the occurrence; or the start date/time if the end date/time is invalid; or the end date/time if the start date/time is invalid. */ Q_REQUIRED_RESULT virtual QDateTime endDateForStart(const QDateTime &startDt) const; // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Attachment-related methods // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** Adds an attachment to the incidence. @param attachment a valid Attachment object. */ void addAttachment(const Attachment &attachment); /** Removes all attachments of the specified MIME type from the incidence. The memory used by all the removed attachments is freed. @param mime is a QString containing the MIME type. @see deleteAttachment(). */ void deleteAttachments(const QString &mime); /** Returns a list of all incidence attachments. @see attachments( const QString &). */ Q_REQUIRED_RESULT Attachment::List attachments() const; /** Returns a list of all incidence attachments with the specified MIME type. @param mime is a QString containing the MIME type. @see attachments(). */ Q_REQUIRED_RESULT Attachment::List attachments(const QString &mime) const; /** Removes all attachments and frees the memory used by them. @see deleteAttachments( const QString &). */ void clearAttachments(); // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Secrecy and Status methods // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** Sets the incidence #Secrecy. @param secrecy is the incidence #Secrecy to set. @see secrecy(), secrecyStr(). */ void setSecrecy(Secrecy secrecy); /** Returns the incidence #Secrecy. @see setSecrecy(), secrecyStr(). */ Q_REQUIRED_RESULT Secrecy secrecy() const; /** Sets the incidence status to a standard #Status value. Note that StatusX cannot be specified. @param status is the incidence #Status to set. @see status(), setCustomStatus(). */ void setStatus(Status status); /** Sets the incidence #Status to a non-standard status value. @param status is a non-standard status string. If empty, the incidence #Status will be set to StatusNone. @see setStatus(), status() customStatus(). */ void setCustomStatus(const QString &status); /** Returns the non-standard status value. @see setCustomStatus(). */ Q_REQUIRED_RESULT QString customStatus() const; /** Returns the incidence #Status. @see setStatus(), setCustomStatus(), statusStr(). */ Q_REQUIRED_RESULT Status status() const; // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Other methods // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** Sets a list of incidence resources. (Note: resources in this context means items used by the incidence such as money, fuel, hours, etc). @param resources is a list of resource strings. @see resources(). */ void setResources(const QStringList &resources); /** Returns the incidence resources as a list of strings. @see setResources(). */ Q_REQUIRED_RESULT QStringList resources() const; /** Sets the incidences priority. The priority must be an integer value between 0 and 9, where 0 is undefined, 1 is the highest, and 9 is the lowest priority (decreasing order). @param priority is the incidence priority to set. @see priority(). */ void setPriority(int priority); /** Returns the incidence priority. @see setPriority(). */ Q_REQUIRED_RESULT int priority() const; /** Returns true if the incidence has geo data, otherwise return false. @see setHasGeo(), setGeoLatitude(float), setGeoLongitude(float). */ Q_REQUIRED_RESULT bool hasGeo() const; /** Sets if the incidence has geo data. @param hasGeo true if incidence has geo data, otherwise false @see hasGeo(), geoLatitude(), geoLongitude(). */ void setHasGeo(bool hasGeo); /** Set the incidences geoLatitude. 设置事件地理纬度。 @param geolatitude is the incidence geolatitude to set @see geoLatitude(). */ void setGeoLatitude(float geolatitude); /** Returns the incidence geoLatidude. @return incidences geolatitude value @see setGeoLatitude(). */ Q_REQUIRED_RESULT float geoLatitude() const; /** Set the incidencesgeoLongitude. @param geolongitude is the incidence geolongitude to set @see geoLongitude(). */ void setGeoLongitude(float geolongitude); /** Returns the incidence geoLongitude. @return incidences geolongitude value @see setGeoLongitude(). */ Q_REQUIRED_RESULT float geoLongitude() const; /** Returns true if the incidence has recurrenceId, otherwise return false. @see setRecurrenceId(QDateTime) */ Q_REQUIRED_RESULT bool hasRecurrenceId() const; /** Set the incidences recurrenceId. 设置重复ID This field indicates that this is an exception to a recurring incidence. The uid of this incidence MUST be the same as the one of the recurring main incidence. @param recurrenceId is the incidence recurrenceId to set @see recurrenceId(). */ void setRecurrenceId(const QDateTime &recurrenceId); /** Returns the incidence recurrenceId. @return incidences recurrenceId value @see setRecurrenceId(). */ Q_REQUIRED_RESULT QDateTime recurrenceId() const override; /** Set to true if the exception also applies to all future occurrences. 如果异常也适用于将来的所有事件,则设置为 true。 This option is only relevant if the incidence has a recurrenceId set. 仅当发生率设置了重复 ID 时,此选项才相关。 @param thisAndFuture value @see thisAndFuture(), setRecurrenceId() @since 4.11 */ void setThisAndFuture(bool thisAndFuture); /** Returns true if the exception also applies to all future occurrences. @return incidences thisAndFuture value @see setThisAndFuture() @since 4.11 */ Q_REQUIRED_RESULT bool thisAndFuture() const; // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Alarm-related methods // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** Returns a list of all incidence alarms. 返回所有事件警报的列表。 */ Q_REQUIRED_RESULT Alarm::List alarms() const; /** Create a new incidence alarm. */ Alarm::Ptr newAlarm(); /** Adds an alarm to the incidence. @param alarm is a pointer to a valid Alarm object. @see removeAlarm(). */ void addAlarm(const Alarm::Ptr &alarm); /** Removes the specified alarm from the incidence. @param alarm is a pointer to a valid Alarm object. @see addAlarm(). */ void removeAlarm(const Alarm::Ptr &alarm); /** Removes all alarms. @see removeAlarm(). */ void clearAlarms(); /** Returns true if any of the incidence alarms are enabled; false otherwise. 如果任何一个事件警报被启用,返回true;否则返回false。 */ Q_REQUIRED_RESULT bool hasEnabledAlarms() const; // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Conferences-related method // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** * Returns list of all incidence conferencing methods. * @since 5.77 */ Q_REQUIRED_RESULT Conference::List conferences() const; /** * Replaces all conferences in the incidence with given @p conferences * * @param conferences New conferences to store in the incidence. * @since 5.77 */ void setConferences(const Conference::List &conferences); /** * Adds a conference to the incidence. * * @param conferene A conference to add. * @since 5.77 */ void addConference(const Conference &conference); /** * Removes all conferences from the incidence. * @since 5.77 */ void clearConferences(); // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Other methods // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** Set the incidence scheduling ID. Do _not_ use with journals. This is used for accepted invitations as the place to store the UID of the invitation. It is later used again if updates to the invitation comes in. If we did not set a new UID on incidences from invitations, we can end up with more than one resource having events with the same UID, if you have access to other peoples resources. While constructing an incidence, when setting the scheduling ID, you will always want to set the incidence UID too. Instead of calling setUID() separately, you can pass the UID through @p uid so both members are changed in one atomic operation ( don't forget that setUID() emits incidenceUpdated() and whoever catches that signal will have an half-initialized incidence, therefore, always set the schedulingID and UID at the same time, and never with two separate calls). @param sid is a QString containing the scheduling ID. @param uid is a QString containing the incidence UID to set, if not specified, the current UID isn't changed, and this parameter is ignored. @see schedulingID(). */ void setSchedulingID(const QString &sid, const QString &uid = QString()); /** Returns the incidence scheduling ID. Do _not_ use with journals. If a scheduling ID is not set, then return the incidence UID. @see setSchedulingID(). */ Q_REQUIRED_RESULT QString schedulingID() const; /** Observer interface for the recurrence class. If the recurrence is changed, this method will be called for the incidence the recurrence object belongs to. 递归类的观察者接口。如果重复发生更改,将根据重复发生对象所属的发生率调用此方法。 @param recurrence is a pointer to a valid Recurrence object. */ void recurrenceUpdated(Recurrence *recurrence) override; /** Returns the name of the icon that best represents this incidence. @param recurrenceId Some recurring incidences might use a different icon, for example, completed to-do occurrences. Use this parameter to identify the specific occurrence in a recurring serie. */ virtual QLatin1String iconName(const QDateTime &recurrenceId = {}) const = 0; /** * Returns true if the incidence type supports groupware communication. * @since 4.10 */ virtual bool supportsGroupwareCommunication() const = 0; /** Returns the list of possible mime types in an Incidence object: "text/calendar" "application/x-vnd.akonadi.calendar.event" "application/x-vnd.akonadi.calendar.todo" "application/x-vnd.akonadi.calendar.journal" @since 4.12 */ Q_REQUIRED_RESULT static QStringList mimeTypes(); protected: /** Copy constructor. @param other is the incidence to copy. */ Incidence(const Incidence &other); /** Compares this with Incidence @p incidence for equality. @param incidence is the Incidence to compare against. @return true if the incidences are equal; false otherwise. */ bool equals(const IncidenceBase &incidence) const override; /** @copydoc IncidenceBase::assign() */ IncidenceBase &assign(const IncidenceBase &other) override; void serialize(QDataStream &out) const override; void deserialize(QDataStream &in) override; private: /** Disabled, not polymorphic. Use IncidenceBase::operator= which is safe because it calls virtual function assign. @param other is another Incidence object to assign to this one. */ Incidence &operator=(const Incidence &other); Q_DECL_HIDDEN QVariantList attachmentsVariant() const; Q_DECL_HIDDEN QVariantList conferencesVariant() const; //@cond PRIVATE class Private; Private *const d; //@endcond }; } // namespace KCalendarCore //@cond PRIVATE inline uint qHash(const QSharedPointer &key) { return qHash(key.data()); } //@endcond //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Incidence::Ptr, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Incidence *) //@endcond #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/incidencebase.cpp000066400000000000000000000415141473346337000246230ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001,2004 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. SPDX-FileContributor: Alvaro Manera SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the IncidenceBase class. @brief An abstract base class that provides a common base for all calendar incidence classes. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #include "incidencebase.h" #include "calformat.h" #include "utils_p.h" #include "visitor.h" #include #include #include #define KCALCORE_MAGIC_NUMBER 0xCA1C012E #define KCALCORE_SERIALIZATION_VERSION 1 using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::IncidenceBase::Private { public: Private() : mUpdateGroupLevel(0) , mUpdatedPending(false) , mAllDay(false) , mHasDuration(false) { } Private(const Private &other) : mUpdateGroupLevel(0) , mUpdatedPending(false) , mAllDay(true) , mHasDuration(false) { init(other); } ~Private() { } void init(const Private &other); QDateTime mLastModified; // incidence last modified date QDateTime mDtStart; // incidence start time Person mOrganizer; // incidence person (owner) QString mUid; // incidence unique id Duration mDuration; // incidence duration int mUpdateGroupLevel; // if non-zero, suppresses update() calls bool mUpdatedPending = false; // true if an update has occurred since startUpdates() bool mAllDay = false; // true if the incidence is all-day bool mHasDuration = false; // true if the incidence has a duration Attendee::List mAttendees; // list of incidence attendees QStringList mComments; // list of incidence comments QStringList mContacts; // list of incidence contacts QList mObservers; // list of incidence observers QSet mDirtyFields; // Fields that changed since last time the incidence was created // or since resetDirtyFlags() was called QUrl mUrl; // incidence url property }; void IncidenceBase::Private::init(const Private &other) { mLastModified = other.mLastModified; mDtStart = other.mDtStart; mOrganizer = other.mOrganizer; mUid = other.mUid; mDuration = other.mDuration; mAllDay = other.mAllDay; mHasDuration = other.mHasDuration; mComments = other.mComments; mContacts = other.mContacts; mAttendees = other.mAttendees; mAttendees.reserve(other.mAttendees.count()); mUrl = other.mUrl; } //@endcond IncidenceBase::IncidenceBase() : d(new KCalendarCore::IncidenceBase::Private) { mReadOnly = false; setUid(CalFormat::createUniqueId()); } IncidenceBase::IncidenceBase(const IncidenceBase &i) : CustomProperties(i) , d(new KCalendarCore::IncidenceBase::Private(*i.d)) { mReadOnly = i.mReadOnly; } IncidenceBase::~IncidenceBase() { delete d; } IncidenceBase &IncidenceBase::operator=(const IncidenceBase &other) { Q_ASSERT(type() == other.type()); startUpdates(); // assign is virtual, will call the derived class's IncidenceBase &ret = assign(other); endUpdates(); return ret; } IncidenceBase &IncidenceBase::assign(const IncidenceBase &other) { CustomProperties::operator=(other); d->init(*other.d); mReadOnly = other.mReadOnly; d->mDirtyFields.clear(); d->mDirtyFields.insert(FieldUnknown); return *this; } bool IncidenceBase::operator==(const IncidenceBase &i2) const { if (i2.type() != type()) { return false; } else { // equals is virtual, so here we're calling the derived class method return equals(i2); } } bool IncidenceBase::operator!=(const IncidenceBase &i2) const { return !operator==(i2); } bool IncidenceBase::equals(const IncidenceBase &i2) const { if (attendees().count() != i2.attendees().count()) { // qDebug() << "Attendee count is different"; return false; } Attendee::List al1 = attendees(); Attendee::List al2 = i2.attendees(); Attendee::List::ConstIterator a1 = al1.constBegin(); Attendee::List::ConstIterator a2 = al2.constBegin(); // TODO Does the order of attendees in the list really matter? // Please delete this comment if you know it's ok, kthx for (; a1 != al1.constEnd() && a2 != al2.constEnd(); ++a1, ++a2) { if (!(*a1 == *a2)) { // qDebug() << "Attendees are different"; return false; } } if (!CustomProperties::operator==(i2)) { // qDebug() << "Properties are different"; return false; } // Don't compare lastModified, otherwise the operator is not // of much use. We are not comparing for identity, after all. // no need to compare mObserver bool a = ((dtStart() == i2.dtStart()) || (!dtStart().isValid() && !i2.dtStart().isValid())); bool b = organizer() == i2.organizer(); bool c = uid() == i2.uid(); bool d = allDay() == i2.allDay(); bool e = duration() == i2.duration(); bool f = hasDuration() == i2.hasDuration(); bool g = url() == i2.url(); // qDebug() << a << b << c << d << e << f << g; return a && b && c && d && e && f && g; } bool IncidenceBase::accept(Visitor &v, const IncidenceBase::Ptr &incidence) { Q_UNUSED(v); Q_UNUSED(incidence); return false; } void IncidenceBase::setUid(const QString &uid) { if (d->mUid != uid) { update(); d->mUid = uid; d->mDirtyFields.insert(FieldUid); updated(); } } QString IncidenceBase::uid() const { return d->mUid; } void IncidenceBase::setLastModified(const QDateTime &lm) { // DON'T! updated() because we call this from // Calendar::updateEvent(). d->mDirtyFields.insert(FieldLastModified); // Convert to UTC and remove milliseconds part. QDateTime current = lm.toUTC(); QTime t = current.time(); t.setHMS(t.hour(), t.minute(), t.second(), 0); current.setTime(t); d->mLastModified = current; } QDateTime IncidenceBase::lastModified() const { return d->mLastModified; } void IncidenceBase::setOrganizer(const Person &organizer) { update(); // we don't check for readonly here, because it is // possible that by setting the organizer we are changing // the event's readonly status... d->mOrganizer = organizer; d->mDirtyFields.insert(FieldOrganizer); updated(); } void IncidenceBase::setOrganizer(const QString &o) { QString mail(o); if (mail.startsWith(QLatin1String("MAILTO:"), Qt::CaseInsensitive)) { mail.remove(0, 7); } // split the string into full name plus email. const Person organizer = Person::fromFullName(mail); setOrganizer(organizer); } Person IncidenceBase::organizer() const { return d->mOrganizer; } void IncidenceBase::setReadOnly(bool readOnly) { mReadOnly = readOnly; } bool IncidenceBase::isReadOnly() const { return mReadOnly; } void IncidenceBase::setDtStart(const QDateTime &dtStart) { // if ( mReadOnly ) return; if (!dtStart.isValid() && type() != IncidenceBase::TypeTodo) { qWarning() << "Invalid dtStart"; } if (d->mDtStart != dtStart) { update(); d->mDtStart = dtStart; d->mDirtyFields.insert(FieldDtStart); updated(); } } QDateTime IncidenceBase::dtStart() const { return d->mDtStart; } bool IncidenceBase::allDay() const { return d->mAllDay; } void IncidenceBase::setAllDay(bool f) { if (mReadOnly || f == d->mAllDay) { return; } update(); d->mAllDay = f; if (d->mDtStart.isValid()) { d->mDirtyFields.insert(FieldDtStart); } updated(); } void IncidenceBase::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { update(); d->mDtStart = d->mDtStart.toTimeZone(oldZone); d->mDtStart.setTimeZone(newZone); d->mDirtyFields.insert(FieldDtStart); d->mDirtyFields.insert(FieldDtEnd); updated(); } void IncidenceBase::addComment(const QString &comment) { d->mComments += comment; } bool IncidenceBase::removeComment(const QString &comment) { bool found = false; QStringList::Iterator i; for (i = d->mComments.begin(); !found && i != d->mComments.end(); ++i) { if ((*i) == comment) { found = true; d->mComments.erase(i); } } if (found) { d->mDirtyFields.insert(FieldComment); } return found; } void IncidenceBase::clearComments() { d->mDirtyFields.insert(FieldComment); d->mComments.clear(); } QStringList IncidenceBase::comments() const { return d->mComments; } void IncidenceBase::addContact(const QString &contact) { if (!contact.isEmpty()) { d->mContacts += contact; d->mDirtyFields.insert(FieldContact); } } bool IncidenceBase::removeContact(const QString &contact) { bool found = false; QStringList::Iterator i; for (i = d->mContacts.begin(); !found && i != d->mContacts.end(); ++i) { if ((*i) == contact) { found = true; d->mContacts.erase(i); } } if (found) { d->mDirtyFields.insert(FieldContact); } return found; } void IncidenceBase::clearContacts() { d->mDirtyFields.insert(FieldContact); d->mContacts.clear(); } QStringList IncidenceBase::contacts() const { return d->mContacts; } void IncidenceBase::addAttendee(const Attendee &a, bool doupdate) { if (a.isNull() || mReadOnly) { return; } Q_ASSERT(!a.uid().isEmpty()); if (doupdate) { update(); } d->mAttendees.append(a); if (doupdate) { d->mDirtyFields.insert(FieldAttendees); updated(); } } Attendee::List IncidenceBase::attendees() const { return d->mAttendees; } int IncidenceBase::attendeeCount() const { return d->mAttendees.count(); } void IncidenceBase::setAttendees(const Attendee::List &attendees, bool doUpdate) { if (mReadOnly) { return; } if (doUpdate) { update(); } // don't simply assign, we need the logic in addAttendee here too clearAttendees(); d->mAttendees.reserve(attendees.size()); for (const auto &a : attendees) { addAttendee(a, false); } if (doUpdate) { d->mDirtyFields.insert(FieldAttendees); updated(); } } void IncidenceBase::clearAttendees() { if (mReadOnly) { return; } d->mDirtyFields.insert(FieldAttendees); d->mAttendees.clear(); } Attendee IncidenceBase::attendeeByMail(const QString &email) const { Attendee::List::ConstIterator it; for (it = d->mAttendees.constBegin(); it != d->mAttendees.constEnd(); ++it) { if ((*it).email() == email) { return *it; } } return {}; } Attendee IncidenceBase::attendeeByMails(const QStringList &emails, const QString &email) const { QStringList mails = emails; if (!email.isEmpty()) { mails.append(email); } Attendee::List::ConstIterator itA; for (itA = d->mAttendees.constBegin(); itA != d->mAttendees.constEnd(); ++itA) { for (QStringList::const_iterator it = mails.constBegin(); it != mails.constEnd(); ++it) { if ((*itA).email() == (*it)) { return *itA; } } } return {}; } Attendee IncidenceBase::attendeeByUid(const QString &uid) const { Attendee::List::ConstIterator it; for (it = d->mAttendees.constBegin(); it != d->mAttendees.constEnd(); ++it) { if ((*it).uid() == uid) { return *it; } } return {}; } void IncidenceBase::setDuration(const Duration &duration) { update(); d->mDuration = duration; setHasDuration(true); d->mDirtyFields.insert(FieldDuration); updated(); } Duration IncidenceBase::duration() const { return d->mDuration; } void IncidenceBase::setHasDuration(bool hasDuration) { d->mHasDuration = hasDuration; } bool IncidenceBase::hasDuration() const { return d->mHasDuration; } void IncidenceBase::setUrl(const QUrl &url) { d->mDirtyFields.insert(FieldUrl); d->mUrl = url; } QUrl IncidenceBase::url() const { return d->mUrl; } void IncidenceBase::registerObserver(IncidenceBase::IncidenceObserver *observer) { if (observer && !d->mObservers.contains(observer)) { d->mObservers.append(observer); } } void IncidenceBase::unRegisterObserver(IncidenceBase::IncidenceObserver *observer) { d->mObservers.removeAll(observer); } void IncidenceBase::update() { if (!d->mUpdateGroupLevel) { d->mUpdatedPending = true; const auto rid = recurrenceId(); for (IncidenceObserver *o : qAsConst(d->mObservers)) { o->incidenceUpdate(uid(), rid); } } } void IncidenceBase::updated() { if (d->mUpdateGroupLevel) { d->mUpdatedPending = true; } else { const auto rid = recurrenceId(); for (IncidenceObserver *o : qAsConst(d->mObservers)) { o->incidenceUpdated(uid(), rid); } } } void IncidenceBase::startUpdates() { update(); ++d->mUpdateGroupLevel; } void IncidenceBase::endUpdates() { if (d->mUpdateGroupLevel > 0) { if (--d->mUpdateGroupLevel == 0 && d->mUpdatedPending) { d->mUpdatedPending = false; updated(); } } } void IncidenceBase::customPropertyUpdate() { update(); } void IncidenceBase::customPropertyUpdated() { updated(); } QDateTime IncidenceBase::recurrenceId() const { return QDateTime(); } void IncidenceBase::resetDirtyFields() { d->mDirtyFields.clear(); } QSet IncidenceBase::dirtyFields() const { return d->mDirtyFields; } void IncidenceBase::setFieldDirty(IncidenceBase::Field field) { d->mDirtyFields.insert(field); } QUrl IncidenceBase::uri() const { return QUrl(QStringLiteral("urn:x-ical:") + uid()); } void IncidenceBase::setDirtyFields(const QSet &dirtyFields) { d->mDirtyFields = dirtyFields; } void IncidenceBase::serialize(QDataStream &out) const { Q_UNUSED(out); } void IncidenceBase::deserialize(QDataStream &in) { Q_UNUSED(in); } /** static */ quint32 IncidenceBase::magicSerializationIdentifier() { return KCALCORE_MAGIC_NUMBER; } QDataStream &KCalendarCore::operator<<(QDataStream &out, const KCalendarCore::IncidenceBase::Ptr &i) { if (!i) { return out; } out << static_cast(KCALCORE_MAGIC_NUMBER); // Magic number to identify KCalendarCore data out << static_cast(KCALCORE_SERIALIZATION_VERSION); out << static_cast(i->type()); out << *(static_cast(i.data())); serializeQDateTimeAsKDateTime(out, i->d->mLastModified); serializeQDateTimeAsKDateTime(out, i->d->mDtStart); out << i->organizer() << i->d->mUid << i->d->mDuration << i->d->mAllDay << i->d->mHasDuration << i->d->mComments << i->d->mContacts << i->d->mAttendees.count() << i->d->mUrl; for (const Attendee &attendee : qAsConst(i->d->mAttendees)) { out << attendee; } // Serialize the sub-class data. i->serialize(out); return out; } QDataStream &KCalendarCore::operator>>(QDataStream &in, KCalendarCore::IncidenceBase::Ptr &i) { if (!i) { return in; } qint32 attendeeCount, type; quint32 magic, version; in >> magic; if (magic != KCALCORE_MAGIC_NUMBER) { qWarning() << "Invalid magic on serialized data"; return in; } in >> version; if (version > KCALCORE_MAGIC_NUMBER) { qWarning() << "Invalid version on serialized data"; return in; } in >> type; in >> *(static_cast(i.data())); deserializeKDateTimeAsQDateTime(in, i->d->mLastModified); deserializeKDateTimeAsQDateTime(in, i->d->mDtStart); in >> i->d->mOrganizer >> i->d->mUid >> i->d->mDuration >> i->d->mAllDay >> i->d->mHasDuration >> i->d->mComments >> i->d->mContacts >> attendeeCount >> i->d->mUrl; i->d->mAttendees.clear(); i->d->mAttendees.reserve(attendeeCount); for (int it = 0; it < attendeeCount; it++) { Attendee attendee; in >> attendee; i->d->mAttendees.append(attendee); } // Deserialize the sub-class data. i->deserialize(in); return in; } IncidenceBase::IncidenceObserver::~IncidenceObserver() { } QVariantList IncidenceBase::attendeesVariant() const { QVariantList l; l.reserve(d->mAttendees.size()); std::transform(d->mAttendees.begin(), d->mAttendees.end(), std::back_inserter(l), [](const Attendee &a) { return QVariant::fromValue(a); }); return l; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/incidencebase.h000066400000000000000000000615121473346337000242700ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2005 Rafal Rzepecki SPDX-FileCopyrightText: 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. SPDX-FileContributor: Alvaro Manera SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the IncidenceBase class. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ @author Rafal Rzepecki \ @glossary @anchor incidence @b incidence: General term for a calendar component. Examples are events, to-dos, and journals. @glossary @anchor event @b event: An @ref incidence that has a start and end time, typically representing some occurrence of social or personal importance. May be recurring. Examples are appointments, meetings, or holidays. @glossary @anchor to-do @b to-do: An @ref incidence that has an optional start time and an optional due time typically representing some undertaking to be performed. May be recurring. Examples are "fix the bug" or "pay the bills". @glossary @anchor todo @b todo: See @ref to-do. @glossary @anchor journal @b journal: An @ref incidence with a start date that represents a diary or daily record of one's activities. May @b not be recurring. */ #ifndef KCALCORE_INCIDENCEBASE_H #define KCALCORE_INCIDENCEBASE_H #include "attendee.h" #include "customproperties.h" #include "duration.h" #include "person.h" #include #include #include #include #include class QUrl; class QDate; class QTimeZone; namespace KCalendarCore { /** List of dates */ typedef QList DateList; /** List of times */ typedef QList DateTimeList; class Event; class Todo; class Journal; class FreeBusy; class Visitor; /** @brief An abstract class that provides a common base for all calendar incidence classes. define: organizer (person) define: uid (same as the attendee uid?) Several properties are not allowed for VFREEBUSY objects (see rfc:2445), so they are not in IncidenceBase. The hierarchy is: IncidenceBase + FreeBusy + Incidence + Event + Todo + Journal So IncidenceBase contains all properties that are common to all classes, and Incidence contains all additional properties that are common to Events, Todos and Journals, but are not allowed for FreeBusy entries. */ class Q_CORE_EXPORT IncidenceBase : public CustomProperties { Q_GADGET Q_PROPERTY(QString uid READ uid WRITE setUid) Q_PROPERTY(QDateTime lastModified READ lastModified WRITE setLastModified) Q_PROPERTY(QDateTime dtStart READ dtStart WRITE setDtStart) Q_PROPERTY(bool allDay READ allDay WRITE setAllDay) Q_PROPERTY(KCalendarCore::Person organizer READ organizer WRITE setOrganizer) Q_PROPERTY(QVariantList attendees READ attendeesVariant) public: /** A shared pointer to an IncidenceBase. */ typedef QSharedPointer Ptr; /** The different types of incidences, per RFC2445. @see type(), typeStr() */ enum IncidenceType { TypeEvent = 0, /**< Type is an event */ TypeTodo, /**< Type is a to-do */ TypeJournal, /**< Type is a journal */ TypeFreeBusy, /**< Type is a free/busy */ TypeUnknown, /**< Type unknown */ }; /** The different types of incidence date/times roles. 不同类型的事件日期/时间角色。 @see dateTime() */ enum DateTimeRole { RoleAlarmStartOffset = 0, /**< Role for an incidence alarm's starting offset date/time */ RoleAlarmEndOffset, /**< Role for an incidence alarm's ending offset date/time */ RoleSort, /**< Role for an incidence's date/time used when sorting */ RoleCalendarHashing, /**< Role for looking up an incidence in a Calendar */ RoleStartTimeZone, /**< Role for determining an incidence's starting timezone */ RoleEndTimeZone, /**< Role for determining an incidence's ending timezone */ RoleEndRecurrenceBase, RoleEnd, /**< Role for determining an incidence's dtEnd, will return an invalid QDateTime if the incidence does not support dtEnd */ RoleDisplayEnd, /**< Role used for display purposes, represents the end boundary if an incidence supports dtEnd */ RoleAlarm, /**< Role for determining the date/time of the first alarm. Returns invalid time if the incidence doesn't have any alarm */ RoleRecurrenceStart, /**< Role for determining the start of the recurrence. Currently that's DTSTART for an event and DTDUE for a to-do. (NOTE: If the incidence is a to-do, recurrence should be calculated having DTSTART for a reference, not DT-DUE. This is one place KCalendarCore isn't compliant with RFC2445) */ RoleDisplayStart, /**< Role for display purposes, represents the start boundary of an incidence. To-dos return dtDue here, for historical reasons */ RoleDnD, /**< Role for determining new start and end dates after a DnD */ }; /** The different types of incidence fields. //不同类型的入射场。 */ enum Field { FieldDtStart, ///< Field representing the DTSTART component. FieldDtEnd, ///< Field representing the DTEND component. FieldLastModified, ///< Field representing the LAST-MODIFIED component. FieldDescription, ///< Field representing the DESCRIPTION component. FieldSummary, ///< Field representing the SUMMARY component. FieldLocation, ///< Field representing the LOCATION component. FieldCompleted, ///< Field representing the COMPLETED component. FieldPercentComplete, ///< Field representing the PERCENT-COMPLETE component. FieldDtDue, ///< Field representing the DUE component. FieldCategories, ///< Field representing the CATEGORIES component. FieldRelatedTo, ///< Field representing the RELATED-TO component. FieldRecurrence, ///< Field representing the EXDATE, EXRULE, RDATE, and RRULE components. FieldAttachment, ///< Field representing the ATTACH component. FieldSecrecy, ///< Field representing the CLASS component. FieldStatus, ///< Field representing the STATUS component. FieldTransparency, ///< Field representing the TRANSPARENCY component. FieldResources, ///< Field representing the RESOURCES component. FieldPriority, ///< Field representing the PRIORITY component. FieldGeoLatitude, ///< Field representing the latitude part of the GEO component. FieldGeoLongitude, ///< Field representing the longitude part of the GEO component. FieldRecurrenceId, ///< Field representing the RECURRENCE-ID component. FieldAlarms, ///< Field representing the VALARM component. FieldSchedulingId, ///< Field representing the X-KDE-LIBKCAL-ID component. FieldAttendees, ///< Field representing the ATTENDEE component. FieldOrganizer, ///< Field representing the ORGANIZER component. FieldCreated, ///< Field representing the CREATED component. FieldRevision, ///< Field representing the SEQUENCE component. FieldDuration, ///< Field representing the DURATION component. FieldContact, ///< Field representing the CONTACT component. FieldComment, ///< Field representing the COMMENT component. FieldUid, ///< Field representing the UID component. FieldUnknown, ///< Something changed. Always set when you use the assignment operator. FieldUrl, ///< Field representing the URL component. FieldConferences, ///< Field representing the CONFERENCE component. FieldColor, ///< Field representing the COLOR component. }; /** The IncidenceObserver class. 事件观察者类。 */ class Q_CORE_EXPORT IncidenceObserver { public: /** Destroys the IncidenceObserver. */ virtual ~IncidenceObserver(); /** The IncidenceObserver interface. This function is called before any changes are made. @param uid is the string containing the incidence @ref uid. @param recurrenceId is possible recurrenceid of incidence. */ virtual void incidenceUpdate(const QString &uid, const QDateTime &recurrenceId) = 0; /** The IncidenceObserver interface. This function is called after changes are completed. @param uid is the string containing the incidence @ref uid. @param recurrenceId is possible recurrenceid of incidence. */ virtual void incidenceUpdated(const QString &uid, const QDateTime &recurrenceId) = 0; }; /** Constructs an empty IncidenceBase. */ IncidenceBase(); /** Destroys the IncidenceBase. */ ~IncidenceBase() override; /** Assignment operator. All data belonging to derived classes are also copied. @see assign(). The caller guarantees that both types match. @code if ( i1.type() == i2.type() ) { i1 = i2; } else { qDebug() << "Invalid assignment!"; } @endcode Dirty field FieldUnknown will be set. @param other is the IncidenceBase to assign. */ IncidenceBase &operator=(const IncidenceBase &other); /** Compares this with IncidenceBase @p ib for equality. All data belonging to derived classes are also compared. @see equals(). @param ib is the IncidenceBase to compare against. @return true if the incidences are equal; false otherwise. */ bool operator==(const IncidenceBase &ib) const; /** Compares this with IncidenceBase @p ib for inequality. @param ib is the IncidenceBase to compare against. @return true if the incidences are /not/ equal; false otherwise. */ bool operator!=(const IncidenceBase &ib) const; /** Accept IncidenceVisitor. A class taking part in the visitor mechanism has to provide this implementation:
       bool accept(Visitor &v) { return v.visit(this); }
     
@param v is a reference to a Visitor object. @param incidence is a valid IncidenceBase object for visiting. */ virtual bool accept(Visitor &v, const IncidenceBase::Ptr &incidence); /** Returns the incidence type. */ virtual IncidenceType type() const = 0; /** Prints the type of incidence as a string. 将事件类型打印为字符串。 */ virtual QByteArray typeStr() const = 0; /** Sets the unique id for the incidence to @p uid. 将事件的唯一 id 设置为 uid。 @param uid is the string containing the incidence @ref uid. @see uid() */ void setUid(const QString &uid); /** Returns the unique id (@ref uid) for the incidence. @see setUid() */ Q_REQUIRED_RESULT QString uid() const; /** Returns the uri for the incidence, of form urn:x-ical:\ 返回事件的uri, */ Q_REQUIRED_RESULT QUrl uri() const; /** Sets the time the incidence was last modified to @p lm. It is stored as a UTC date/time. @param lm is the QDateTime when the incidence was last modified. @see lastModified() */ virtual void setLastModified(const QDateTime &lm); /** Returns the time the incidence was last modified. 返回上次修改事件的时间。 @see setLastModified() */ Q_REQUIRED_RESULT QDateTime lastModified() const; /** Sets the organizer for the incidence. 设置事件的组织者。 @param organizer is a non-null Person to use as the incidence @ref organizer. @see organizer(), setOrganizer(const QString &) */ void setOrganizer(const Person &organizer); /** Sets the incidence organizer to any string @p organizer. @param organizer is a string to use as the incidence @ref organizer. @see organizer(), setOrganizer(const Person &) */ void setOrganizer(const QString &organizer); /** Returns the Person associated with this incidence. If no Person was set through setOrganizer(), a default Person() is returned. @see setOrganizer(const QString &), setOrganizer(const Person &) */ Person organizer() const; /** Sets readonly status. 设置只读状态。 @param readOnly if set, the incidence is read-only; else the incidence can be modified. @see isReadOnly(). */ virtual void setReadOnly(bool readOnly); /** Returns true the object is read-only; false otherwise. @see setReadOnly() */ Q_REQUIRED_RESULT bool isReadOnly() const; /** Sets the incidence's starting date/time with a QDateTime. @param dtStart is the incidence start date/time. @see dtStart(). */ virtual void setDtStart(const QDateTime &dtStart); /** Returns an incidence's starting date/time as a QDateTime. @see setDtStart(). */ virtual QDateTime dtStart() const; /** Sets the incidence duration. @param duration the incidence duration @see duration() */ virtual void setDuration(const Duration &duration); /** Returns the length of the incidence duration. @see setDuration() */ Q_REQUIRED_RESULT Duration duration() const; /** Sets if the incidence has a duration. @param hasDuration true if the incidence has a duration; false otherwise. @see hasDuration() */ void setHasDuration(bool hasDuration); /** Returns true if the incidence has a duration; false otherwise. @see setHasDuration() */ Q_REQUIRED_RESULT bool hasDuration() const; /** Returns true or false depending on whether the incidence is all-day. i.e. has a date but no time attached to it. @see setAllDay() */ Q_REQUIRED_RESULT bool allDay() const; /** Sets whether the incidence is all-day, i.e. has a date but no time attached to it. @param allDay sets whether the incidence is all-day. @see allDay() */ virtual void setAllDay(bool allDay); /** Shift the times of the incidence so that they appear at the same clock time as before but in a new time zone. The shift is done from a viewing time zone rather than from the actual incidence time zone. For example, shifting an incidence whose start time is 09:00 America/New York, using an old viewing time zone (@p oldSpec) of Europe/London, to a new time zone (@p newSpec) of Europe/Paris, will result in the time being shifted from 14:00 (which is the London time of the incidence start) to 14:00 Paris time. @param oldZone the time zone which provides the clock times @param newZone the new time zone */ virtual void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone); /** Adds a comment to the incidence. Does not add a linefeed character; simply appends the text as specified. 向事件添加注释。不添加换行字符; 仅按指定附加文本。 @param comment is the QString containing the comment to add. @see removeComment(). */ void addComment(const QString &comment); /** Removes a comment from the incidence. Removes the first comment whose string is an exact match for the specified string in @p comment. @param comment is the QString containing the comment to remove. @return true if match found, false otherwise. @see addComment(). */ Q_REQUIRED_RESULT bool removeComment(const QString &comment); /** Deletes all incidence comments. */ void clearComments(); /** Returns all incidence comments as a list of strings. 将所有关联注释作为字符串列表返回。 */ Q_REQUIRED_RESULT QStringList comments() const; /** Adds a contact to thieincidence. Does not add a linefeed character; simply appends the text as specified. @param contact is the QString containing the contact to add. @see removeContact(). */ void addContact(const QString &contact); /** Removes a contact from the incidence. Removes the first contact whose string is an exact match for the specified string in @p contact. @param contact is the QString containing the contact to remove. @return true if match found, false otherwise. @see addContact(). */ Q_REQUIRED_RESULT bool removeContact(const QString &contact); /** Deletes all incidence contacts. */ void clearContacts(); /** Returns all incidence contacts as a list of strings. */ Q_REQUIRED_RESULT QStringList contacts() const; /** Add Attendee to this incidence. @param attendee the attendee to add @param doUpdate If true the Observers are notified, if false they are not. */ void addAttendee(const Attendee &attendee, bool doUpdate = true); /** Removes all attendees from the incidence. */ void clearAttendees(); /** Set the attendees of this incidence. This replaces all previously set attendees, unlike addAttendee. @param attendees A list of attendees. @param doUpdate If true the Observers are notified, if false they are not. */ void setAttendees(const Attendee::List &attendees, bool doUpdate = true); /** Returns a list of incidence attendees. All pointers in the list are valid. */ Q_REQUIRED_RESULT Attendee::List attendees() const; /** Returns the number of incidence attendees. */ Q_REQUIRED_RESULT int attendeeCount() const; /** Returns the attendee with the specified email address. @param email is a QString containing an email address of the form "FirstName LastName ". @see attendeeByMails(), attendeesByUid(). */ Attendee attendeeByMail(const QString &email) const; /** Returns the first incidence attendee with one of the specified email addresses. @param emails is a list of QStrings containing email addresses of the form "FirstName LastName ". @param email is a QString containing a single email address to search in addition to the list specified in @p emails. @see attendeeByMail(), attendeesByUid(). */ Attendee attendeeByMails(const QStringList &emails, const QString &email = QString()) const; /** Returns the incidence attendee with the specified attendee @acronym UID. @param uid is a QString containing an attendee @acronym UID. @see attendeeByMail(), attendeeByMails(). */ Attendee attendeeByUid(const QString &uid) const; /** Sets the incidences url. This property can be used to point to a more dynamic rendition of the incidence. I.e. a website related to the incidence. @param url of the incience. @see url() @since 4.12 */ void setUrl(const QUrl &url); /** Returns the url. @return incidences url value @see setUrl() @since 4.12 */ Q_REQUIRED_RESULT QUrl url() const; /** Register observer. The observer is notified when the observed object changes. @param observer is a pointer to an IncidenceObserver object that will be watching this incidence. @see unRegisterObserver() */ void registerObserver(IncidenceObserver *observer); /** Unregister observer. It isn't notified anymore about changes. @param observer is a pointer to an IncidenceObserver object that will be watching this incidence. @see registerObserver(). */ void unRegisterObserver(IncidenceObserver *observer); /** Call this to notify the observers after the IncidenceBase object will be changed. 调用此选项可在IncidenceBase对象发生更改后通知观察者。 */ void update(); /** Call this to notify the observers after the IncidenceBase object has changed. */ void updated(); /** Call this when a group of updates is going to be made. This suppresses change notifications until endUpdates() is called, at which point updated() will automatically be called. */ void startUpdates(); /** Call this when a group of updates is complete, to notify observers that the instance has changed. This should be called in conjunction with startUpdates(). */ void endUpdates(); /** Returns a date/time corresponding to the specified DateTimeRole. @param role is a DateTimeRole. */ virtual QDateTime dateTime(DateTimeRole role) const = 0; /** Sets the date/time corresponding to the specified DateTimeRole. @param dateTime is QDateTime value to set. @param role is a DateTimeRole. */ virtual void setDateTime(const QDateTime &dateTime, DateTimeRole role) = 0; /** Returns the Akonadi specific sub MIME type of a KCalendarCore::IncidenceBase item, e.g. getting "application/x-vnd.akonadi.calendar.event" for a KCalendarCore::Event. */ virtual QLatin1String mimeType() const = 0; /** Returns the incidence recurrenceId. @return incidences recurrenceId value @see setRecurrenceId(). */ virtual QDateTime recurrenceId() const; /** Returns a QSet with all Fields that were changed since the incidence was created or resetDirtyFields() was called. @see resetDirtyFields() */ QSet dirtyFields() const; /** Sets which fields are dirty. @see dirtyFields() @since 4.8 */ void setDirtyFields(const QSet &); /** Resets dirty fields. @see dirtyFields() */ void resetDirtyFields(); /** * Constant that identifies KCalendarCore data in a binary stream. * * @since 4.12 */ Q_REQUIRED_RESULT static quint32 magicSerializationIdentifier(); protected: /** Marks Field @p field as dirty. @param field is the Field type to mark as dirty. @see dirtyFields() */ void setFieldDirty(IncidenceBase::Field field); /** @copydoc CustomProperties::customPropertyUpdate() */ void customPropertyUpdate() override; /** @copydoc CustomProperties::customPropertyUpdated() */ void customPropertyUpdated() override; /** Constructs an IncidenceBase as a copy of another IncidenceBase object. @param ib is the IncidenceBase to copy. */ IncidenceBase(const IncidenceBase &ib); /** Provides polymorfic comparison for equality. Only called by IncidenceBase::operator==() which guarantees that @p incidenceBase is of the right type. @param incidenceBase is the IncidenceBase to compare against. @return true if the incidences are equal; false otherwise. */ virtual bool equals(const IncidenceBase &incidenceBase) const; /** Provides polymorfic assignment. @param other is the IncidenceBase to assign. */ virtual IncidenceBase &assign(const IncidenceBase &other); /** * Sub-type specific serialization. */ virtual void serialize(QDataStream &out) const; /** * Sub-type specific deserialization. */ virtual void deserialize(QDataStream &in); enum VirtualHook {}; /** Standard trick to add virtuals later. @param id is any integer unique to this class which we will use to identify the method to be called. @param data is a pointer to some glob of data, typically a struct. */ virtual void virtual_hook(VirtualHook id, void *data) = 0; /** Identifies a read-only incidence. */ bool mReadOnly; private: //@cond PRIVATE class Private; Private *const d; Q_DECL_HIDDEN QVariantList attendeesVariant() const; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::IncidenceBase::Ptr &); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::IncidenceBase::Ptr &); }; /** * Incidence serializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::IncidenceBase::Ptr &); /** * Incidence deserializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, KCalendarCore::IncidenceBase::Ptr &); } // namespace KCalendarCore Q_DECLARE_METATYPE(KCalendarCore::IncidenceBase *) Q_DECLARE_METATYPE(KCalendarCore::IncidenceBase::Ptr) #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/journal.cpp000066400000000000000000000044361473346337000235230ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Journal class. @brief Provides a Journal in the sense of RFC2445. @author Cornelius Schumacher \ */ #include "journal.h" #include "visitor.h" #include using namespace KCalendarCore; Journal::Journal() : d(nullptr) { } Journal::Journal(const Journal &) = default; Journal::~Journal() = default; Incidence::IncidenceType Journal::type() const { return TypeJournal; } QByteArray Journal::typeStr() const { return QByteArrayLiteral("Journal"); } Journal *Journal::clone() const { return new Journal(*this); } IncidenceBase &Journal::assign(const IncidenceBase &other) { Incidence::assign(other); return *this; } bool Journal::equals(const IncidenceBase &journal) const { return Incidence::equals(journal); } bool Journal::accept(Visitor &v, const IncidenceBase::Ptr &incidence) { return v.visit(incidence.staticCast()); } QDateTime Journal::dateTime(DateTimeRole role) const { switch (role) { case RoleEnd: case RoleEndTimeZone: return QDateTime(); case RoleDisplayStart: case RoleDisplayEnd: return dtStart(); default: return dtStart(); } } void Journal::setDateTime(const QDateTime &dateTime, DateTimeRole role) { switch (role) { case RoleDnD: { setDtStart(dateTime); break; } default: qDebug() << "Unhandled role" << role; } } void Journal::virtual_hook(VirtualHook id, void *data) { Q_UNUSED(id); Q_UNUSED(data); } QLatin1String Journal::mimeType() const { return Journal::journalMimeType(); } /* static */ QLatin1String Journal::journalMimeType() { return QLatin1String("application/x-vnd.akonadi.calendar.journal"); } QLatin1String Journal::iconName(const QDateTime &) const { return QLatin1String("view-pim-journal"); } void Journal::serialize(QDataStream &out) const { Incidence::serialize(out); } void Journal::deserialize(QDataStream &in) { Incidence::deserialize(in); } bool Journal::supportsGroupwareCommunication() const { return false; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/journal.h000066400000000000000000000074541473346337000231730ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Journal class. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #ifndef KCALCORE_JOURNAL_H #define KCALCORE_JOURNAL_H #include "incidence.h" namespace KCalendarCore { /** @brief Provides a Journal in the sense of RFC2445. */ class Q_CORE_EXPORT Journal : public Incidence { public: /** A shared pointer to a Journal object. */ typedef QSharedPointer Ptr; /** List of journals. */ typedef QVector List; ///@cond PRIVATE // needed for Akonadi polymorphic payload support typedef Incidence SuperClass; ///@endcond /** Constructs an empty journal. */ Journal(); /** Copy a journey object. */ Journal(const Journal &); /** Destroys a journal. */ ~Journal() override; /** @copydoc IncidenceBase::type() */ Q_REQUIRED_RESULT IncidenceType type() const override; /** @copydoc IncidenceBase::typeStr() */ Q_REQUIRED_RESULT QByteArray typeStr() const override; /** Returns an exact copy of this journal. The returned object is owned by the caller. */ Journal *clone() const override; /** @copydoc IncidenceBase::dateTime(DateTimeRole)const */ Q_REQUIRED_RESULT QDateTime dateTime(DateTimeRole role) const override; /** @copydoc IncidenceBase::setDateTime(const QDateTime &, DateTimeRole ) */ void setDateTime(const QDateTime &dateTime, DateTimeRole role) override; /** @copydoc IncidenceBase::mimeType() */ Q_REQUIRED_RESULT QLatin1String mimeType() const override; /** @copydoc Incidence::iconName() */ Q_REQUIRED_RESULT QLatin1String iconName(const QDateTime &recurrenceId = {}) const override; /** @copydoc Incidence::supportsGroupwareCommunication() */ Q_REQUIRED_RESULT bool supportsGroupwareCommunication() const override; /** Returns the Akonadi specific sub MIME type of a KCalendarCore::Journal. */ Q_REQUIRED_RESULT static QLatin1String journalMimeType(); protected: /** Compare this with @p journal for equality. @param journal is the journal to compare. */ bool equals(const IncidenceBase &journal) const override; /** @copydoc IncidenceBase::assign() */ IncidenceBase &assign(const IncidenceBase &other) override; /** @copydoc IncidenceBase::virtual_hook() */ void virtual_hook(VirtualHook id, void *data) override; private: /** @copydoc IncidenceBase::accept(Visitor &, const IncidenceBase::Ptr &) */ bool accept(Visitor &v, const IncidenceBase::Ptr &incidence) override; /** Disabled, otherwise could be dangerous if you subclass Journal. Use IncidenceBase::operator= which is safe because it calls virtual function assign(). @param other is another Journal object to assign to this one. */ Journal &operator=(const Journal &other) = delete; // For polymorfic serialization void serialize(QDataStream &out) const override; void deserialize(QDataStream &in) override; //@cond PRIVATE class Private; Private *const d; //@endcond }; } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Journal::Ptr, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Journal::Ptr) Q_DECLARE_METATYPE(KCalendarCore::Journal *) //@endcond #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/memorycalendar.cpp000066400000000000000000000627771473346337000250670ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001, 2003, 2004 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the MemoryCalendar class. @brief This class provides a calendar stored as a local file. @author Preston Brown \ @author Cornelius Schumacher \ */ #include "memorycalendar.h" #include "calformat.h" #include #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::MemoryCalendar::Private { private: static constexpr int incidenceTypeCount = 4; public: Private(MemoryCalendar *qq) : q(qq) , mFormat(nullptr) , mUpdateLastModified(true) { } ~Private() { } MemoryCalendar *q; CalFormat *mFormat; // calendar format QString mIncidenceBeingUpdated; // Instance identifier of Incidence currently being updated bool mUpdateLastModified; // Call setLastModified() on incidence modific ations /** * List of all incidences. * First indexed by incidence->type(), then by incidence->uid(); */ QMultiHash mIncidences[incidenceTypeCount]; /** * Has all incidences, indexed by identifier. */ QHash mIncidencesByIdentifier; /** * List of all deleted incidences. * First indexed by incidence->type(), then by incidence->uid(); */ QMultiHash mDeletedIncidences[incidenceTypeCount]; /** * Contains incidences ( to-dos; non-recurring, non-multiday events; journals; ) * indexed by start/due date. * * The QMap key is the incidence->type(). * The QMultiHash key is the dtStart/dtDue() converted to calendar's timezone * * Note: We had 3 variables, mJournalsForDate, mTodosForDate and mEventsForDate * but i merged them into one (indexed by type) because it simplifies code using * it. No need to if else based on type. */ QMultiHash mIncidencesForDate[incidenceTypeCount]; void insertIncidence(const Incidence::Ptr &incidence); Incidence::Ptr incidence(const QString &uid, IncidenceBase::IncidenceType type, const QDateTime &recurrenceId = {}) const; bool deleteIncidence(const QString &uid, IncidenceBase::IncidenceType type, const QDateTime &recurrenceId = {}); Incidence::Ptr deletedIncidence(const QString &uid, const QDateTime &recurrenceId, IncidenceBase::IncidenceType type) const; void deleteAllIncidences(IncidenceBase::IncidenceType type); template void forIncidences(const QMultiHash &incidences, const Key &key, std::function &&op) const { for (auto it = incidences.constFind(key), end = incidences.cend(); it != end && it.key() == key; ++it) { op(it.value().template staticCast()); } } template void forIncidences(const QMultiHash &incidences, std::function &&op) const { for (const auto &incidence : incidences) { op(incidence.template staticCast()); } } template typename IncidenceType::List castIncidenceList(const QMultiHash &incidences) const { typename IncidenceType::List list; list.reserve(incidences.size()); std::transform(incidences.cbegin(), incidences.cend(), std::back_inserter(list), [](const Incidence::Ptr &inc) { return inc.staticCast(); }); return list; } template typename IncidenceType::List incidenceInstances(IncidenceBase::IncidenceType type, const Incidence::Ptr &incidence) const { typename IncidenceType::List list; forIncidences(mIncidences[type], incidence->uid(), [&list](const typename IncidenceType::Ptr &incidence) { if (incidence->hasRecurrenceId()) { list.push_back(incidence); } }); return list; } Incidence::Ptr findIncidence(const QMultiHash &incidences, const QString &uid, const QDateTime &recurrenceId) const { for (auto it = incidences.constFind(uid), end = incidences.cend(); it != end && it.key() == uid; ++it) { const auto &incidence = it.value(); if (recurrenceId.isNull() && !incidence->hasRecurrenceId()) { return incidence; } else if (!recurrenceId.isNull() && incidence->hasRecurrenceId() && recurrenceId == incidence->recurrenceId()) { return incidence; } } return {}; } }; //@endcond MemoryCalendar::MemoryCalendar(const QTimeZone &timeZone) : Calendar(timeZone) , d(new KCalendarCore::MemoryCalendar::Private(this)) { } MemoryCalendar::MemoryCalendar(const QByteArray &timeZoneId) : Calendar(timeZoneId) , d(new KCalendarCore::MemoryCalendar::Private(this)) { } MemoryCalendar::~MemoryCalendar() { close(); // NOLINT false clang-analyzer-optin.cplusplus.VirtualCall delete d; } void MemoryCalendar::doSetTimeZone(const QTimeZone &timeZone) { // Reset date based hashes before storing for the new zone. for (auto &table : d->mIncidencesForDate) { table.clear(); } for (auto &table : d->mIncidences) { for (const auto &incidence : table) { const QDateTime dt = incidence->dateTime(Incidence::RoleCalendarHashing); if (dt.isValid()) { d->mIncidencesForDate[incidence->type()].insert(dt.toTimeZone(timeZone).date(), incidence); } } } } void MemoryCalendar::close() { setObserversEnabled(false); // Don't call the virtual function deleteEvents() etc, the base class might have // other ways of deleting the data. d->deleteAllIncidences(Incidence::TypeEvent); d->deleteAllIncidences(Incidence::TypeTodo); d->deleteAllIncidences(Incidence::TypeJournal); d->mIncidencesByIdentifier.clear(); for (auto &table : d->mDeletedIncidences) { table.clear(); } clearNotebookAssociations(); setModified(false); setObserversEnabled(true); } bool MemoryCalendar::deleteIncidence(const Incidence::Ptr &incidence) { // Handle orphaned children // relations is an Incidence's property, not a Todo's, so // we remove relations in deleteIncidence, not in deleteTodo. removeRelations(incidence); // Notify while the incidence is still available, // this is necessary so korganizer still has time to query for exceptions notifyIncidenceAboutToBeDeleted(incidence); incidence->unRegisterObserver(this); const Incidence::IncidenceType type = incidence->type(); const QString &uid = incidence->uid(); bool deleted = d->deleteIncidence(uid, type, incidence->recurrenceId()); if (deleted) { setModified(true); if (deletionTracking()) { d->mDeletedIncidences[type].insert(uid, incidence); } // Delete child-incidences. if (!incidence->hasRecurrenceId() && incidence->recurs()) { deleteIncidenceInstances(incidence); } } else { qWarning() << incidence->typeStr() << " not found. uid=" << uid; } notifyIncidenceDeleted(incidence); return deleted; } bool MemoryCalendar::deleteIncidenceInstances(const Incidence::Ptr &incidence) { Incidence::List instances; for (auto it = d->mIncidences[incidence->type()].constFind(incidence->uid()), end = d->mIncidences[incidence->type()].constEnd(); it != end && it.key() == incidence->uid(); ++it) { if (it.value()->hasRecurrenceId()) { qDebug() << "deleting child" << ", type=" << int(incidence->type()) << ", uid=" << incidence->uid() // << ", start=" << i->dtStart() << " from calendar"; // Don't call deleteIncidence() now since it's modifying the // mIncidences map we're iterating over. instances.append(it.value()); } } for (Incidence::Ptr instance : instances) { deleteIncidence(instance); } return true; } //@cond PRIVATE bool MemoryCalendar::Private::deleteIncidence(const QString &uid, IncidenceBase::IncidenceType type, const QDateTime &recurrenceId) { for (auto it = mIncidences[type].find(uid), end = mIncidences[type].end(); it != end && it.key() == uid; ++it) { Incidence::Ptr incidence = it.value(); if (recurrenceId.isNull() && incidence->hasRecurrenceId()) { continue; } else if (!recurrenceId.isNull() && (!incidence->hasRecurrenceId() || recurrenceId != incidence->recurrenceId())) { continue; } mIncidences[type].erase(it); mIncidencesByIdentifier.remove(incidence->instanceIdentifier()); const QDateTime dt = incidence->dateTime(Incidence::RoleCalendarHashing); if (dt.isValid()) { mIncidencesForDate[type].remove(dt.toTimeZone(q->timeZone()).date(), incidence); } return true; } return false; } void MemoryCalendar::Private::deleteAllIncidences(Incidence::IncidenceType incidenceType) { for (auto &incidence : mIncidences[incidenceType]) { q->notifyIncidenceAboutToBeDeleted(incidence); incidence->unRegisterObserver(q); } mIncidences[incidenceType].clear(); mIncidencesForDate[incidenceType].clear(); } Incidence::Ptr MemoryCalendar::Private::incidence(const QString &uid, Incidence::IncidenceType type, const QDateTime &recurrenceId) const { return findIncidence(mIncidences[type], uid, recurrenceId); } Incidence::Ptr MemoryCalendar::Private::deletedIncidence(const QString &uid, const QDateTime &recurrenceId, IncidenceBase::IncidenceType type) const { if (!q->deletionTracking()) { return Incidence::Ptr(); } return findIncidence(mDeletedIncidences[type], uid, recurrenceId); } void MemoryCalendar::Private::insertIncidence(const Incidence::Ptr &incidence) { const QString uid = incidence->uid(); const Incidence::IncidenceType type = incidence->type(); if (!mIncidences[type].contains(uid, incidence)) { mIncidences[type].insert(uid, incidence); mIncidencesByIdentifier.insert(incidence->instanceIdentifier(), incidence); const QDateTime dt = incidence->dateTime(Incidence::RoleCalendarHashing); if (dt.isValid()) { mIncidencesForDate[type].insert(dt.toTimeZone(q->timeZone()).date(), incidence); } } else { #ifndef NDEBUG // if we already have an to-do with this UID, it must be the same incidence, // otherwise something's really broken Q_ASSERT(mIncidences[type].value(uid) == incidence); #endif } } //@endcond bool MemoryCalendar::addIncidence(const Incidence::Ptr &incidence) { d->insertIncidence(incidence); notifyIncidenceAdded(incidence); incidence->registerObserver(this); setupRelations(incidence); setModified(true); return true; } bool MemoryCalendar::addEvent(const Event::Ptr &event) { return addIncidence(event); } bool MemoryCalendar::deleteEvent(const Event::Ptr &event) { return deleteIncidence(event); } bool MemoryCalendar::deleteEventInstances(const Event::Ptr &event) { return deleteIncidenceInstances(event); } Event::Ptr MemoryCalendar::event(const QString &uid, const QDateTime &recurrenceId) const { return d->incidence(uid, Incidence::TypeEvent, recurrenceId).staticCast(); } Event::Ptr MemoryCalendar::deletedEvent(const QString &uid, const QDateTime &recurrenceId) const { return d->deletedIncidence(uid, recurrenceId, Incidence::TypeEvent).staticCast(); } bool MemoryCalendar::addTodo(const Todo::Ptr &todo) { return addIncidence(todo); } bool MemoryCalendar::deleteTodo(const Todo::Ptr &todo) { return deleteIncidence(todo); } bool MemoryCalendar::deleteTodoInstances(const Todo::Ptr &todo) { return deleteIncidenceInstances(todo); } Todo::Ptr MemoryCalendar::todo(const QString &uid, const QDateTime &recurrenceId) const { return d->incidence(uid, Incidence::TypeTodo, recurrenceId).staticCast(); } Todo::Ptr MemoryCalendar::deletedTodo(const QString &uid, const QDateTime &recurrenceId) const { return d->deletedIncidence(uid, recurrenceId, Incidence::TypeTodo).staticCast(); } Todo::List MemoryCalendar::rawTodos(TodoSortField sortField, SortDirection sortDirection) const { return Calendar::sortTodos(d->castIncidenceList(d->mIncidences[Incidence::TypeTodo]), sortField, sortDirection); } Todo::List MemoryCalendar::deletedTodos(TodoSortField sortField, SortDirection sortDirection) const { if (!deletionTracking()) { return Todo::List(); } return Calendar::sortTodos(d->castIncidenceList(d->mDeletedIncidences[Incidence::TypeTodo]), sortField, sortDirection); } Todo::List MemoryCalendar::todoInstances(const Incidence::Ptr &todo, TodoSortField sortField, SortDirection sortDirection) const { return Calendar::sortTodos(d->incidenceInstances(Incidence::TypeTodo, todo), sortField, sortDirection); } Todo::List MemoryCalendar::rawTodosForDate(const QDate &date) const { Todo::List todoList; d->forIncidences(d->mIncidencesForDate[Incidence::TypeTodo], date, [&todoList](const Todo::Ptr &todo) { todoList.append(todo); }); // Iterate over all todos. Look for recurring todoss that occur on this date d->forIncidences(d->mIncidences[Incidence::TypeTodo], [this, &todoList, &date](const Todo::Ptr &todo) { if (todo->recurs() && todo->recursOn(date, timeZone())) { todoList.append(todo); } }); return todoList; } Todo::List MemoryCalendar::rawTodos(const QDate &start, const QDate &end, const QTimeZone &timeZone, bool inclusive) const { Q_UNUSED(inclusive); // use only exact dtDue/dtStart, not dtStart and dtEnd Todo::List todoList; const auto ts = timeZone.isValid() ? timeZone : this->timeZone(); QDateTime st(start, QTime(0, 0, 0), ts); QDateTime nd(end, QTime(23, 59, 59, 999), ts); // Get todos for (const auto &incidence : d->mIncidences[Incidence::TypeTodo]) { const auto todo = incidence.staticCast(); if (!isVisible(todo)) { continue; } QDateTime rStart = todo->hasDueDate() ? todo->dtDue() : todo->hasStartDate() ? todo->dtStart() : QDateTime(); if (!rStart.isValid()) { continue; } if (!todo->recurs()) { // non-recurring todos if (nd.isValid() && nd < rStart) { continue; } if (st.isValid() && rStart < st) { continue; } } else { // recurring events switch (todo->recurrence()->duration()) { case -1: // infinite break; case 0: // end date given default: // count given QDateTime rEnd(todo->recurrence()->endDate(), QTime(23, 59, 59, 999), ts); if (!rEnd.isValid()) { continue; } if (st.isValid() && rEnd < st) { continue; } break; } // switch(duration) } // if(recurs) todoList.append(todo); } return todoList; } Alarm::List MemoryCalendar::alarmsTo(const QDateTime &to) const { return alarms(QDateTime(QDate(1900, 1, 1), QTime(0, 0, 0)), to); } Alarm::List MemoryCalendar::alarms(const QDateTime &from, const QDateTime &to, bool excludeBlockedAlarms) const { Q_UNUSED(excludeBlockedAlarms); Alarm::List alarmList; d->forIncidences(d->mIncidences[Incidence::TypeEvent], [this, &alarmList, &from, &to](const Event::Ptr &e) { if (e->recurs()) { appendRecurringAlarms(alarmList, e, from, to); } else { appendAlarms(alarmList, e, from, to); } }); d->forIncidences(d->mIncidences[IncidenceBase::TypeTodo], [this, &alarmList, &from, &to](const Todo::Ptr &t) { if (!t->isCompleted()) { appendAlarms(alarmList, t, from, to); if (t->recurs()) { appendRecurringAlarms(alarmList, t, from, to); } else { appendAlarms(alarmList, t, from, to); } } }); return alarmList; } bool MemoryCalendar::updateLastModifiedOnChange() const { return d->mUpdateLastModified; } void MemoryCalendar::setUpdateLastModifiedOnChange(bool update) { d->mUpdateLastModified = update; } void MemoryCalendar::incidenceUpdate(const QString &uid, const QDateTime &recurrenceId) { Incidence::Ptr inc = incidence(uid, recurrenceId); if (inc) { if (!d->mIncidenceBeingUpdated.isEmpty()) { qWarning() << "Incidence::update() called twice without an updated() call in between."; } // Save it so we can detect changes to uid or recurringId. d->mIncidenceBeingUpdated = inc->instanceIdentifier(); const QDateTime dt = inc->dateTime(Incidence::RoleCalendarHashing); if (dt.isValid()) { d->mIncidencesForDate[inc->type()].remove(dt.toTimeZone(timeZone()).date(), inc); } } } void MemoryCalendar::incidenceUpdated(const QString &uid, const QDateTime &recurrenceId) { Incidence::Ptr inc = incidence(uid, recurrenceId); if (inc) { if (d->mIncidenceBeingUpdated.isEmpty()) { qWarning() << "Incidence::updated() called twice without an update() call in between."; } else if (inc->instanceIdentifier() != d->mIncidenceBeingUpdated) { // Instance identifier changed, update our hash table d->mIncidencesByIdentifier.remove(d->mIncidenceBeingUpdated); d->mIncidencesByIdentifier.insert(inc->instanceIdentifier(), inc); } d->mIncidenceBeingUpdated = QString(); if (d->mUpdateLastModified) { inc->setLastModified(QDateTime::currentDateTimeUtc()); } // we should probably update the revision number here, // or internally in the Event itself when certain things change. // need to verify with ical documentation. const QDateTime dt = inc->dateTime(Incidence::RoleCalendarHashing); if (dt.isValid()) { d->mIncidencesForDate[inc->type()].insert(dt.toTimeZone(timeZone()).date(), inc); } notifyIncidenceChanged(inc); setModified(true); } } Event::List MemoryCalendar::rawEventsForDate(const QDate &date, const QTimeZone &timeZone, EventSortField sortField, SortDirection sortDirection) const { Event::List eventList; if (!date.isValid()) { // There can't be events on invalid dates return eventList; } if (timeZone.isValid() && timeZone != this->timeZone()) { // We cannot use the hash table on date, since time zone is different. eventList = rawEvents(date, date, timeZone, false); return Calendar::sortEvents(eventList, sortField, sortDirection); } // Iterate over all non-recurring, single-day events that start on this date d->forIncidences(d->mIncidencesForDate[Incidence::TypeEvent], date, [&eventList](const Event::Ptr &event) { eventList.append(event); }); // Iterate over all events. Look for recurring events that occur on this date const auto ts = timeZone.isValid() ? timeZone : this->timeZone(); for (const auto &event : d->mIncidences[Incidence::TypeEvent]) { const auto ev = event.staticCast(); if (ev->recurs()) { if (ev->isMultiDay()) { int extraDays = ev->dtStart().date().daysTo(ev->dtEnd().date()); for (int i = 0; i <= extraDays; ++i) { if (ev->recursOn(date.addDays(-i), ts)) { eventList.append(ev); break; } } } else { if (ev->recursOn(date, ts)) { eventList.append(ev); } } } else { if (ev->isMultiDay()) { if (ev->dtStart().toTimeZone(ts).date() <= date && ev->dtEnd().toTimeZone(ts).date() >= date) { eventList.append(ev); } } } } return Calendar::sortEvents(eventList, sortField, sortDirection); } Event::List MemoryCalendar::rawEvents(const QDate &start, const QDate &end, const QTimeZone &timeZone, bool inclusive) const { Event::List eventList; const auto ts = timeZone.isValid() ? timeZone : this->timeZone(); QDateTime st(start, QTime(0, 0, 0), ts); QDateTime nd(end, QTime(23, 59, 59, 999), ts); // Get non-recurring events for (const auto &e : d->mIncidences[Incidence::TypeEvent]) { const auto event = e.staticCast(); QDateTime rStart = event->dtStart(); if (nd.isValid() && nd < rStart) { continue; } if (inclusive && st.isValid() && rStart < st) { continue; } if (!event->recurs()) { // non-recurring events QDateTime rEnd = event->dtEnd(); if (st.isValid() && rEnd < st) { continue; } if (inclusive && nd.isValid() && nd < rEnd) { continue; } } else { // recurring events switch (event->recurrence()->duration()) { case -1: // infinite if (inclusive) { continue; } break; case 0: // end date given default: // count given QDateTime rEnd(event->recurrence()->endDate(), QTime(23, 59, 59, 999), ts); if (!rEnd.isValid()) { continue; } if (st.isValid() && rEnd < st) { continue; } if (inclusive && nd.isValid() && nd < rEnd) { continue; } break; } // switch(duration) } // if(recurs) eventList.append(event); } return eventList; } Event::List MemoryCalendar::rawEventsForDate(const QDateTime &kdt) const { return rawEventsForDate(kdt.date(), kdt.timeZone()); } Event::List MemoryCalendar::rawEvents(EventSortField sortField, SortDirection sortDirection) const { return Calendar::sortEvents(d->castIncidenceList(d->mIncidences[Incidence::TypeEvent]), sortField, sortDirection); } Event::List MemoryCalendar::deletedEvents(EventSortField sortField, SortDirection sortDirection) const { if (!deletionTracking()) { return Event::List(); } return Calendar::sortEvents(d->castIncidenceList(d->mDeletedIncidences[Incidence::TypeEvent]), sortField, sortDirection); } Event::List MemoryCalendar::eventInstances(const Incidence::Ptr &event, EventSortField sortField, SortDirection sortDirection) const { return Calendar::sortEvents(d->incidenceInstances(Incidence::TypeEvent, event), sortField, sortDirection); } bool MemoryCalendar::addJournal(const Journal::Ptr &journal) { return addIncidence(journal); } bool MemoryCalendar::deleteJournal(const Journal::Ptr &journal) { return deleteIncidence(journal); } bool MemoryCalendar::deleteJournalInstances(const Journal::Ptr &journal) { return deleteIncidenceInstances(journal); } Journal::Ptr MemoryCalendar::journal(const QString &uid, const QDateTime &recurrenceId) const { return d->incidence(uid, Incidence::TypeJournal, recurrenceId).staticCast(); } Journal::Ptr MemoryCalendar::deletedJournal(const QString &uid, const QDateTime &recurrenceId) const { return d->deletedIncidence(uid, recurrenceId, Incidence::TypeJournal).staticCast(); } Journal::List MemoryCalendar::rawJournals(JournalSortField sortField, SortDirection sortDirection) const { return Calendar::sortJournals(d->castIncidenceList(d->mIncidences[Incidence::TypeJournal]), sortField, sortDirection); } Journal::List MemoryCalendar::deletedJournals(JournalSortField sortField, SortDirection sortDirection) const { if (!deletionTracking()) { return Journal::List(); } return Calendar::sortJournals(d->castIncidenceList(d->mDeletedIncidences[Incidence::TypeJournal]), sortField, sortDirection); } Journal::List MemoryCalendar::journalInstances(const Incidence::Ptr &journal, JournalSortField sortField, SortDirection sortDirection) const { return Calendar::sortJournals(d->incidenceInstances(Incidence::TypeJournal, journal), sortField, sortDirection); } Journal::List MemoryCalendar::rawJournalsForDate(const QDate &date) const { Journal::List journalList; d->forIncidences(d->mIncidencesForDate[Incidence::TypeJournal], date, [&journalList](const Journal::Ptr &journal) { journalList.append(journal); }); return journalList; } Incidence::Ptr MemoryCalendar::instance(const QString &identifier) const { return d->mIncidencesByIdentifier.value(identifier); } void MemoryCalendar::virtual_hook(int id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/memorycalendar.h000066400000000000000000000247421473346337000245220ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001, 2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the MemoryCalendar class. Very simple implementation of a Calendar that is only in memory @author Preston Brown \ @author Cornelius Schumacher \ */ #ifndef KCALCORE_MEMORYCALENDAR_H #define KCALCORE_MEMORYCALENDAR_H #include "calendar.h" namespace KCalendarCore { /** @brief This class provides a calendar stored in memory. 此类提供存储在内存中的日历 */ class Q_CORE_EXPORT MemoryCalendar : public Calendar { Q_OBJECT public: /** A shared pointer to a MemoryCalendar */ typedef QSharedPointer Ptr; /** @copydoc Calendar::Calendar(const QTimeZone &) */ explicit MemoryCalendar(const QTimeZone &timeZone); /** @copydoc Calendar::Calendar(const QString &) */ explicit MemoryCalendar(const QByteArray &timeZoneId); /** @copydoc Calendar::~Calendar() */ ~MemoryCalendar() override; /** Clears out the current calendar, freeing all used memory etc. etc. */ void close() override; /** @copydoc Calendar::doSetTimeZone() */ void doSetTimeZone(const QTimeZone &timeZone) override; /** @copydoc Calendar::deleteIncidence() */ bool deleteIncidence(const Incidence::Ptr &incidence) override; /** @copydoc Calendar::deleteIncidenceInstances */ bool deleteIncidenceInstances(const Incidence::Ptr &incidence) override; /** @copydoc Calendar::addIncidence() */ bool addIncidence(const Incidence::Ptr &incidence) override; // Event Specific Methods // /** @copydoc Calendar::addEvent() */ bool addEvent(const Event::Ptr &event) override; /** @copydoc Calendar::deleteEvent() */ bool deleteEvent(const Event::Ptr &event) override; /** @copydoc Calendar::deleteEventInstances() */ bool deleteEventInstances(const Event::Ptr &event) override; /** @copydoc Calendar::rawEvents(EventSortField, SortDirection)const */ Q_REQUIRED_RESULT Event::List rawEvents(EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; /** @copydoc Calendar::rawEvents(const QDate &, const QDate &, const QTimeZone &, bool)const */ Q_REQUIRED_RESULT Event::List rawEvents(const QDate &start, const QDate &end, const QTimeZone &timeZone = {}, bool inclusive = false) const override; /** Returns an unfiltered list of all Events which occur on the given date. @param date request unfiltered Event list for this QDate only. @param timeZone time zone to interpret @p date, or the calendar's default time zone if none is specified @param sortField specifies the EventSortField. @param sortDirection specifies the SortDirection. @return the list of unfiltered Events occurring on the specified QDate. */ Q_REQUIRED_RESULT Event::List rawEventsForDate(const QDate &date, const QTimeZone &timeZone = {}, EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; /** @copydoc Calendar::rawEventsForDate(const QDateTime &)const */ Q_REQUIRED_RESULT Event::List rawEventsForDate(const QDateTime &dt) const override; /** * Returns an incidence by identifier. * @see Incidence::instanceIdentifier() * @since 4.11 */ Incidence::Ptr instance(const QString &identifier) const; /** @copydoc Calendar::event() */ Q_REQUIRED_RESULT Event::Ptr event(const QString &uid, const QDateTime &recurrenceId = {}) const override; /** @copydoc Calendar::deletedEvent() */ Q_REQUIRED_RESULT Event::Ptr deletedEvent(const QString &uid, const QDateTime &recurrenceId = {}) const override; /** @copydoc Calendar::deletedEvents(EventSortField, SortDirection)const */ Q_REQUIRED_RESULT Event::List deletedEvents(EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; /** @copydoc Calendar::eventInstances(const Incidence::Ptr &, EventSortField, SortDirection)const */ Q_REQUIRED_RESULT Event::List eventInstances(const Incidence::Ptr &event, EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; // To-do Specific Methods // /** @copydoc Calendar::addTodo() */ bool addTodo(const Todo::Ptr &todo) override; /** @copydoc Calendar::deleteTodo() */ bool deleteTodo(const Todo::Ptr &todo) override; /** @copydoc Calendar::deleteTodoInstances() */ bool deleteTodoInstances(const Todo::Ptr &todo) override; /** @copydoc Calendar::rawTodos(TodoSortField, SortDirection)const */ Q_REQUIRED_RESULT Todo::List rawTodos(TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; /** @copydoc Calendar::rawTodos(const QDate &, const QDate &, const QTimeZone &, bool)const */ Q_REQUIRED_RESULT Todo::List rawTodos(const QDate &start, const QDate &end, const QTimeZone &timeZone = {}, bool inclusive = false) const override; /** @copydoc Calendar::rawTodosForDate() */ Q_REQUIRED_RESULT Todo::List rawTodosForDate(const QDate &date) const override; /** @copydoc Calendar::todo() */ Q_REQUIRED_RESULT Todo::Ptr todo(const QString &uid, const QDateTime &recurrenceId = {}) const override; /** @copydoc Calendar::deletedTodo() */ Q_REQUIRED_RESULT Todo::Ptr deletedTodo(const QString &uid, const QDateTime &recurrenceId = {}) const override; /** @copydoc Calendar::deletedTodos(TodoSortField, SortDirection)const */ Q_REQUIRED_RESULT Todo::List deletedTodos(TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; /** @copydoc Calendar::todoInstances(const Incidence::Ptr &, TodoSortField, SortDirection)const */ Q_REQUIRED_RESULT Todo::List todoInstances(const Incidence::Ptr &todo, TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; // Journal Specific Methods // /** @copydoc Calendar::addJournal() */ bool addJournal(const Journal::Ptr &journal) override; /** @copydoc Calendar::deleteJournal() */ bool deleteJournal(const Journal::Ptr &journal) override; /** @copydoc Calendar::deleteJournalInstances() */ bool deleteJournalInstances(const Journal::Ptr &journal) override; /** @copydoc Calendar::rawJournals() */ Q_REQUIRED_RESULT Journal::List rawJournals(JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; /** @copydoc Calendar::rawJournalsForDate() */ Q_REQUIRED_RESULT Journal::List rawJournalsForDate(const QDate &date) const override; /** @copydoc Calendar::journal() */ Journal::Ptr journal(const QString &uid, const QDateTime &recurrenceId = {}) const override; /** @copydoc Calendar::deletedJournal() */ Journal::Ptr deletedJournal(const QString &uid, const QDateTime &recurrenceId = {}) const override; /** @copydoc Calendar::deletedJournals(JournalSortField, SortDirection)const */ Q_REQUIRED_RESULT Journal::List deletedJournals(JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; /** @copydoc Calendar::journalInstances(const Incidence::Ptr &, JournalSortField, SortDirection)const */ Q_REQUIRED_RESULT Journal::List journalInstances(const Incidence::Ptr &journal, JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; // Alarm Specific Methods // /** @copydoc Calendar::alarms() */ Q_REQUIRED_RESULT Alarm::List alarms(const QDateTime &from, const QDateTime &to, bool excludeBlockedAlarms = false) const override; /** Return a list of Alarms that occur before the specified timestamp. @param to is the ending timestamp. @return the list of Alarms occurring before the specified QDateTime. */ Q_REQUIRED_RESULT Alarm::List alarmsTo(const QDateTime &to) const; // TODO KF6 remove, already defined in Calendar /** Return true if the memory calendar is updating the lastModified field of incidence owned by the calendar on any incidence change. @since 5.80 */ bool updateLastModifiedOnChange() const; /** Govern if the memory calendar is changing the lastModified field of incidence it owns, on incidence updates. @param update, when true, the lastModified field of an incidence owned by the calendar is set to the current date time on any change of the incidence. @since 5.80 */ void setUpdateLastModifiedOnChange(bool update); /** @copydoc Calendar::incidenceUpdate(const QString &,const QDateTime &) */ void incidenceUpdate(const QString &uid, const QDateTime &recurrenceId) override; /** @copydoc Calendar::incidenceUpdated(const QString &,const QDateTime &) */ void incidenceUpdated(const QString &uid, const QDateTime &recurrenceId) override; using QObject::event; // prevent warning about hidden virtual method protected: /** @copydoc IncidenceBase::virtual_hook() */ void virtual_hook(int id, void *data) override; private: //@cond PRIVATE class Private; Private *const d; //@endcond Q_DISABLE_COPY(MemoryCalendar) }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/occurrenceiterator.cpp000066400000000000000000000173511473346337000257530ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2013 Christian Mollekopf SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the OccurrenceIterator class. @brief This class provides an iterator to iterate over all occurrences of incidences. @author Christian Mollekopf \ */ #include "occurrenceiterator.h" #include "calendar.h" #include "calfilter.h" #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::OccurrenceIterator::Private { public: Private(OccurrenceIterator *qq) : q(qq) , occurrenceIt(occurrenceList) { } OccurrenceIterator *q; QDateTime start; QDateTime end; struct Occurrence { Occurrence() { } Occurrence(const Incidence::Ptr &i, const QDateTime &recurrenceId, const QDateTime &startDate) : incidence(i) , recurrenceId(recurrenceId) , startDate(startDate) { } Incidence::Ptr incidence; QDateTime recurrenceId; QDateTime startDate; }; QList occurrenceList; QListIterator occurrenceIt; Occurrence current; /* * KCalendarCore::CalFilter can't handle individual occurrences. * When filtering completed to-dos, the CalFilter doesn't hide * them if it's a recurring to-do. */ bool occurrenceIsHidden(const Calendar &calendar, const Incidence::Ptr &inc, const QDateTime &occurrenceDate) { if ((inc->type() == Incidence::TypeTodo) && calendar.filter() && (calendar.filter()->criteria() & KCalendarCore::CalFilter::HideCompletedTodos)) { if (inc->recurs()) { const Todo::Ptr todo = inc.staticCast(); if (todo && (occurrenceDate < todo->dtDue())) { return true; } } else if (inc->hasRecurrenceId()) { const Todo::Ptr mainTodo = calendar.todo(inc->uid()); if (mainTodo && mainTodo->isCompleted()) { return true; } } } return false; } void setupIterator(const Calendar &calendar, const Incidence::List &incidences) { for (const Incidence::Ptr &inc : qAsConst(incidences)) { if (inc->hasRecurrenceId()) { continue; } if (inc->recurs()) { QHash recurrenceIds; QDateTime incidenceRecStart = inc->dateTime(Incidence::RoleRecurrenceStart); // const bool isAllDay = inc->allDay(); const auto lstInstances = calendar.instances(inc); for (const Incidence::Ptr &exception : lstInstances) { if (incidenceRecStart.isValid()) { recurrenceIds.insert(exception->recurrenceId().toTimeZone(incidenceRecStart.timeZone()), exception); } } const auto occurrences = inc->recurrence()->timesInInterval(start, end); Incidence::Ptr incidence(inc), lastInc(inc); qint64 offset(0), lastOffset(0); QDateTime occurrenceStartDate; for (const auto &recurrenceId : qAsConst(occurrences)) { occurrenceStartDate = recurrenceId; bool resetIncidence = false; if (recurrenceIds.contains(recurrenceId)) { // TODO: exclude exceptions where the start/end is not within // (so the occurrence of the recurrence is omitted, but no exception is added) if (recurrenceIds.value(recurrenceId)->status() == Incidence::StatusCanceled) { continue; } incidence = recurrenceIds.value(recurrenceId); occurrenceStartDate = incidence->dtStart(); resetIncidence = !incidence->thisAndFuture(); offset = incidence->recurrenceId().secsTo(incidence->dtStart()); if (incidence->thisAndFuture()) { lastInc = incidence; lastOffset = offset; } } else if (inc != incidence) { // thisAndFuture exception is active occurrenceStartDate = occurrenceStartDate.addSecs(offset); } if (!occurrenceIsHidden(calendar, incidence, occurrenceStartDate)) { occurrenceList << Private::Occurrence(incidence, recurrenceId, occurrenceStartDate); } if (resetIncidence) { incidence = lastInc; offset = lastOffset; } } } else { occurrenceList << Private::Occurrence(inc, {}, inc->dtStart()); } } occurrenceIt = QListIterator(occurrenceList); } }; //@endcond /** * Right now there is little point in the iterator, but: * With an iterator it should be possible to solve this more memory efficiently * and with immediate results at the beginning of the selected timeframe. * Either all events are iterated simoulatneously, resulting in occurrences * of all events in parallel in the correct time-order, or incidence after * incidence, which would be even more efficient. * * By making this class a friend of calendar, we could also use the internally * available data structures. */ OccurrenceIterator::OccurrenceIterator(const Calendar &calendar, const QDateTime &start, const QDateTime &end) : d(new KCalendarCore::OccurrenceIterator::Private(this)) { d->start = start; d->end = end; Event::List events = calendar.rawEvents(start.date(), end.date(), start.timeZone()); if (calendar.filter()) { calendar.filter()->apply(&events); } Todo::List todos = calendar.rawTodos(start.date(), end.date(), start.timeZone()); if (calendar.filter()) { calendar.filter()->apply(&todos); } Journal::List journals; const Journal::List allJournals = calendar.rawJournals(); for (const KCalendarCore::Journal::Ptr &journal : allJournals) { const QDate journalStart = journal->dtStart().toTimeZone(start.timeZone()).date(); if (journal->dtStart().isValid() && journalStart >= start.date() && journalStart <= end.date()) { journals << journal; } } if (calendar.filter()) { calendar.filter()->apply(&journals); } const Incidence::List incidences = KCalendarCore::Calendar::mergeIncidenceList(events, todos, journals); d->setupIterator(calendar, incidences); } OccurrenceIterator::OccurrenceIterator(const Calendar &calendar, const Incidence::Ptr &incidence, const QDateTime &start, const QDateTime &end) : d(new KCalendarCore::OccurrenceIterator::Private(this)) { Q_ASSERT(incidence); d->start = start; d->end = end; d->setupIterator(calendar, Incidence::List() << incidence); } OccurrenceIterator::~OccurrenceIterator() { } bool OccurrenceIterator::hasNext() const { return d->occurrenceIt.hasNext(); } void OccurrenceIterator::next() { d->current = d->occurrenceIt.next(); } Incidence::Ptr OccurrenceIterator::incidence() const { return d->current.incidence; } QDateTime OccurrenceIterator::occurrenceStartDate() const { return d->current.startDate; } QDateTime OccurrenceIterator::recurrenceId() const { return d->current.recurrenceId; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/occurrenceiterator.h000066400000000000000000000044541473346337000254200ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2013 Christian Mollekopf SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the OccurrenceIterator class. @author Christian Mollekopf \ */ #ifndef KCALCORE_OCCURRENCEITERATOR_H #define KCALCORE_OCCURRENCEITERATOR_H #include "incidence.h" namespace KCalendarCore { class Calendar; /** * Iterate over calendar items in a calendar. * * The iterator takes recurrences and exceptions to recurrences into account * * The iterator does not iterate the occurrences of all incidences chronologically. * @since 4.11 */ class Q_CORE_EXPORT OccurrenceIterator { public: /** * Creates iterator that iterates over all occurrences of all incidences * between @param start and @param end (inclusive) */ explicit OccurrenceIterator(const Calendar &calendar, const QDateTime &start = QDateTime(), const QDateTime &end = QDateTime()); /** * Creates iterator that iterates over all occurrences * of @param incidence between @param start and @param end (inclusive) */ OccurrenceIterator(const Calendar &calendar, const KCalendarCore::Incidence::Ptr &incidence, const QDateTime &start = QDateTime(), const QDateTime &end = QDateTime()); ~OccurrenceIterator(); bool hasNext() const; /** * Advance iterator to the next occurrence. */ void next(); /** * Returns either main incidence or exception, depending on occurrence. */ Incidence::Ptr incidence() const; /** * Returns the start date of the occurrence * * This is either the occurrence date, or the start date of an exception * which overrides that occurrence. */ QDateTime occurrenceStartDate() const; /** * Returns the recurrence Id. * * This is the date where the occurrence starts without exceptions, * this id is used to identify one exact occurrence. */ QDateTime recurrenceId() const; private: Q_DISABLE_COPY(OccurrenceIterator) //@cond PRIVATE class Private; QScopedPointer d; //@endcond }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/period.cpp000066400000000000000000000075411473346337000233330ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2007 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Period class. @brief Represents a period of time. @author Cornelius Schumacher \ */ #include "period.h" #include "utils_p.h" #include #include using namespace KCalendarCore; //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Period::Private { public: Private() : mHasDuration(false) , mDailyDuration(false) { } Private(const QDateTime &start, const QDateTime &end, bool hasDuration) : mStart(start) , mEnd(end) , mHasDuration(hasDuration) , mDailyDuration(false) { } QDateTime mStart; // period starting date/time QDateTime mEnd; // period ending date/time bool mHasDuration = false; // does period have a duration? bool mDailyDuration = false; // duration is defined as number of days, not seconds }; //@endcond Period::Period() : d(new KCalendarCore::Period::Private()) { } Period::Period(const QDateTime &start, const QDateTime &end) : d(new KCalendarCore::Period::Private(start, end, false)) { } Period::Period(const QDateTime &start, const Duration &duration) : d(new KCalendarCore::Period::Private(start, duration.end(start), true)) { d->mDailyDuration = duration.isDaily(); } Period::Period(const Period &period) : d(new KCalendarCore::Period::Private(*period.d)) { } Period::~Period() { delete d; } bool Period::operator<(const Period &other) const { return d->mStart < other.d->mStart; } bool Period::operator==(const Period &other) const { return ((d->mStart == other.d->mStart) || (!d->mStart.isValid() && !other.d->mStart.isValid())) && ((d->mEnd == other.d->mEnd) || (!d->mEnd.isValid() && !other.d->mEnd.isValid())) && d->mHasDuration == other.d->mHasDuration; } Period &Period::operator=(const Period &other) { // check for self assignment if (&other == this) { return *this; } *d = *other.d; return *this; } QDateTime Period::start() const { return d->mStart; } QDateTime Period::end() const { return d->mEnd; } Duration Period::duration() const { if (d->mHasDuration) { return Duration(d->mStart, d->mEnd, d->mDailyDuration ? Duration::Days : Duration::Seconds); } else { return Duration(d->mStart, d->mEnd); } } Duration Period::duration(Duration::Type type) const { return Duration(d->mStart, d->mEnd, type); } bool Period::hasDuration() const { return d->mHasDuration; } void Period::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { if (oldZone.isValid() && newZone.isValid() && oldZone != newZone) { d->mStart = d->mStart.toTimeZone(oldZone); d->mStart.setTimeZone(newZone); d->mEnd = d->mEnd.toTimeZone(oldZone); d->mEnd.setTimeZone(newZone); } } QDataStream &KCalendarCore::operator<<(QDataStream &stream, const KCalendarCore::Period &period) { serializeQDateTimeAsKDateTime(stream, period.d->mStart); serializeQDateTimeAsKDateTime(stream, period.d->mEnd); return stream << period.d->mDailyDuration << period.d->mHasDuration; } QDataStream &KCalendarCore::operator>>(QDataStream &stream, KCalendarCore::Period &period) { deserializeKDateTimeAsQDateTime(stream, period.d->mStart); deserializeKDateTimeAsQDateTime(stream, period.d->mEnd); stream >> period.d->mDailyDuration >> period.d->mHasDuration; return stream; } uint KCalendarCore::qHash(const KCalendarCore::Period &key) { if (key.hasDuration()) { return qHash(key.duration()); } else { return qHash(key.start().toString() + key.end().toString()); } } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/period.h000066400000000000000000000133611473346337000227750ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Period class. @brief Represents a period of time. @author Cornelius Schumacher \ */ #ifndef KCALCORE_PERIOD_H #define KCALCORE_PERIOD_H #include "duration.h" #include #include #include #include class QTimeZone; namespace KCalendarCore { /** The period can be defined by either a start time and an end time or by a start time and a duration. */ class Q_CORE_EXPORT Period { public: /** List of periods. */ typedef QVector List; /** Constructs a period without a duration. */ Period(); /** Constructs a period from @p start to @p end. @param start the time the period begins. @param end the time the period ends. */ Period(const QDateTime &start, const QDateTime &end); /** Constructs a period from @p start and lasting @p duration. @param start the time when the period starts. @param duration how long the period lasts. */ Period(const QDateTime &start, const Duration &duration); /** Constructs a period by copying another period object @param period the period to copy */ Period(const Period &period); /** Destroys a period. */ ~Period(); /** Returns true if the start of this period is earlier than the start of the @p other one. @param other is the other period to compare. */ bool operator<(const Period &other) const; /** Returns true if the start of this period is later than the start of the @p other one. @param other the other period to compare */ bool operator>(const Period &other) const { return other.operator<(*this); } /** Returns true if this period is equal to the @p other one. Even if their start and end times are the same, two periods are considered not equal if one is defined in terms of a duration and the other in terms of a start and end time. @param other the other period to compare */ bool operator==(const Period &other) const; /** Returns true if this period is not equal to the @p other one. @param other the other period to compare @see operator==() */ bool operator!=(const Period &other) const { return !operator==(other); } /** Sets this period equal to the @p other one. @param other is the other period to compare. */ Period &operator=(const Period &other); /** Returns when this period starts. */ Q_REQUIRED_RESULT QDateTime start() const; /** Returns when this period ends. */ Q_REQUIRED_RESULT QDateTime end() const; /** Returns the duration of the period. If the period is defined in terms of a start and end time, the duration is computed from these. In this case, if the time of day in @p start and @p end is equal, and their time specifications (i.e. time zone etc.) are the same, the duration will be set in terms of days. Otherwise, the duration will be set in terms of seconds. If the period is defined in terms of a duration, that duration is returned unchanged. */ Q_REQUIRED_RESULT Duration duration() const; /** Returns the duration of the period. If the period is defined in terms of a start and end time, the duration is first computed from these. If @p type is Days, and the duration is not an exact number of days, the duration will be rounded down to the nearest whole number of days. @param type the unit of time to use (seconds or days) */ Q_REQUIRED_RESULT Duration duration(Duration::Type type) const; /** Returns true if this period has a set duration, false if it just has a start and an end. */ Q_REQUIRED_RESULT bool hasDuration() const; /** Shift the times of the period so that they appear at the same clock time as before but in a new time zone. The shift is done from a viewing time zone rather than from the actual period time zone. For example, shifting a period whose start time is 09:00 America/New York, using an old viewing time zone (@p oldSpec) of Europe/London, to a new time zone (@p newSpec) of Europe/Paris, will result in the time being shifted from 14:00 (which is the London time of the period start) to 14:00 Paris time. @param oldZone the time zone which provides the clock times @param newZone the new time zone */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone); private: //@cond PRIVATE class Private; Private *const d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::Period &period); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::Period &period); }; /** Write @p period to the datastream @p stream, in binary format. */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::Period &period); /** Read a Period object into @p period from @p stream, in binary format. */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::Period &period); /** Return a hash value for a Period argument. @param key is a Period. */ Q_CORE_EXPORT uint qHash(const KCalendarCore::Period &key); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_METATYPE(KCalendarCore::Period) Q_DECLARE_TYPEINFO(KCalendarCore::Period, Q_MOVABLE_TYPE); //@endcond #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/person.cpp000066400000000000000000000246431473346337000233610ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2010 Casey Link SPDX-FileCopyrightText: 2009-2010 Klaralvdalens Datakonsult AB, a KDAB Group company SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Person class. @brief Represents a person, by name and email address. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #include "person.h" #include "person_p.h" #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Person::Private : public QSharedData { public: QString mName; // person name QString mEmail; // person email address }; //@endcond Person::Person() : d(new KCalendarCore::Person::Private) { } Person::Person(const QString &name, const QString &email) : d(new KCalendarCore::Person::Private) { d->mName = name; d->mEmail = email; } Person::Person(const Person &person) : d(person.d) { } Person::~Person() = default; bool KCalendarCore::Person::operator==(const Person &person) const { return d->mName == person.d->mName && d->mEmail == person.d->mEmail; } bool KCalendarCore::Person::operator!=(const Person &person) const { return !(*this == person); } Person &KCalendarCore::Person::operator=(const Person &person) { // check for self assignment if (&person == this) { return *this; } d = person.d; return *this; } QString KCalendarCore::fullNameHelper(const QString &name, const QString &email) { if (name.isEmpty()) { return email; } if (email.isEmpty()) { return name; } // Taken from KContacts::Addressee::fullEmail QString fullName = name; const QRegularExpression needQuotes(QStringLiteral("[^ 0-9A-Za-z\\x{0080}-\\x{FFFF}]")); bool weNeedToQuote = name.indexOf(needQuotes) != -1; if (weNeedToQuote) { if (fullName[0] != QLatin1Char('"')) { fullName.prepend(QLatin1Char('"')); } if (fullName[fullName.length() - 1] != QLatin1Char('"')) { fullName.append(QLatin1Char('"')); } } return fullName + QStringLiteral(" <") + email + QLatin1Char('>'); } QString Person::fullName() const { return fullNameHelper(d->mName, d->mEmail); } QString Person::name() const { return d->mName; } QString Person::email() const { return d->mEmail; } bool Person::isEmpty() const { return d->mEmail.isEmpty() && d->mName.isEmpty(); } void Person::setName(const QString &name) { d->mName = name; } void Person::setEmail(const QString &email) { if (email.startsWith(QLatin1String("mailto:"), Qt::CaseInsensitive)) { d->mEmail = email.mid(7); } else { d->mEmail = email; } } bool Person::isValidEmail(const QString &email) { const int pos = email.lastIndexOf(QLatin1Char('@')); return (pos > 0) && (email.lastIndexOf(QLatin1Char('.')) > pos) && ((email.length() - pos) > 4); } uint KCalendarCore::qHash(const KCalendarCore::Person &key) { return qHash(key.fullName()); } QDataStream &KCalendarCore::operator<<(QDataStream &stream, const KCalendarCore::Person &person) { return stream << person.d->mName << person.d->mEmail << (int)(0); } QDataStream &KCalendarCore::operator>>(QDataStream &stream, Person &person) { int count; stream >> person.d->mName >> person.d->mEmail >> count; return stream; } // The following function was lifted directly from KPIMUtils // in order to eliminate the dependency on that library. // Any changes made here should be ported there, and vice versa. static bool extractEmailAddressAndName(const QString &aStr, QString &mail, QString &name) { name.clear(); mail.clear(); const int len = aStr.length(); const char cQuotes = '"'; bool bInComment = false; bool bInQuotesOutsideOfEmail = false; int i = 0, iAd = 0, iMailStart = 0, iMailEnd = 0; QChar c; unsigned int commentstack = 0; // Find the '@' of the email address // skipping all '@' inside "(...)" comments: while (i < len) { c = aStr[i]; if (QLatin1Char('(') == c) { commentstack++; } if (QLatin1Char(')') == c) { commentstack--; } bInComment = commentstack != 0; if (QLatin1Char('"') == c && !bInComment) { bInQuotesOutsideOfEmail = !bInQuotesOutsideOfEmail; } if (!bInComment && !bInQuotesOutsideOfEmail) { if (QLatin1Char('@') == c) { iAd = i; break; // found it } } ++i; } if (!iAd) { // We suppose the user is typing the string manually and just // has not finished typing the mail address part. // So we take everything that's left of the '<' as name and the rest as mail for (i = 0; len > i; ++i) { c = aStr[i]; if (QLatin1Char('<') != c) { name.append(c); } else { break; } } mail = aStr.mid(i + 1); if (mail.endsWith(QLatin1Char('>'))) { mail.chop(1); } } else { // Loop backwards until we find the start of the string // or a ',' that is outside of a comment // and outside of quoted text before the leading '<'. bInComment = false; bInQuotesOutsideOfEmail = false; for (i = iAd - 1; 0 <= i; --i) { c = aStr[i]; if (bInComment) { if (QLatin1Char('(') == c) { if (!name.isEmpty()) { name.prepend(QLatin1Char(' ')); } bInComment = false; } else { name.prepend(c); // all comment stuff is part of the name } } else if (bInQuotesOutsideOfEmail) { if (QLatin1Char(cQuotes) == c) { bInQuotesOutsideOfEmail = false; } else if (c != QLatin1Char('\\')) { name.prepend(c); } } else { // found the start of this addressee ? if (QLatin1Char(',') == c) { break; } // stuff is before the leading '<' ? if (iMailStart) { if (QLatin1Char(cQuotes) == c) { bInQuotesOutsideOfEmail = true; // end of quoted text found } else { name.prepend(c); } } else { switch (c.toLatin1()) { case '<': iMailStart = i; break; case ')': if (!name.isEmpty()) { name.prepend(QLatin1Char(' ')); } bInComment = true; break; default: if (QLatin1Char(' ') != c) { mail.prepend(c); } } } } } name = name.simplified(); mail = mail.simplified(); if (mail.isEmpty()) { return false; } mail.append(QLatin1Char('@')); // Loop forward until we find the end of the string // or a ',' that is outside of a comment // and outside of quoted text behind the trailing '>'. bInComment = false; bInQuotesOutsideOfEmail = false; int parenthesesNesting = 0; for (i = iAd + 1; len > i; ++i) { c = aStr[i]; if (bInComment) { if (QLatin1Char(')') == c) { if (--parenthesesNesting == 0) { bInComment = false; if (!name.isEmpty()) { name.append(QLatin1Char(' ')); } } else { // nested ")", add it name.append(QLatin1Char(')')); // name can't be empty here } } else { if (QLatin1Char('(') == c) { // nested "(" ++parenthesesNesting; } name.append(c); // all comment stuff is part of the name } } else if (bInQuotesOutsideOfEmail) { if (QLatin1Char(cQuotes) == c) { bInQuotesOutsideOfEmail = false; } else if (c != QLatin1Char('\\')) { name.append(c); } } else { // found the end of this addressee ? if (QLatin1Char(',') == c) { break; } // stuff is behind the trailing '>' ? if (iMailEnd) { if (QLatin1Char(cQuotes) == c) { bInQuotesOutsideOfEmail = true; // start of quoted text found } else { name.append(c); } } else { switch (c.toLatin1()) { case '>': iMailEnd = i; break; case '(': if (!name.isEmpty()) { name.append(QLatin1Char(' ')); } if (++parenthesesNesting > 0) { bInComment = true; } break; default: if (QLatin1Char(' ') != c) { mail.append(c); } } } } } } name = name.simplified(); mail = mail.simplified(); return !(name.isEmpty() || mail.isEmpty()); } Person Person::fromFullName(const QString &fullName) { QString email, name; extractEmailAddressAndName(fullName, email, name); return Person(name, email); } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/person.h000066400000000000000000000115521473346337000230210ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Person class. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #ifndef KCALCORE_PERSON_H #define KCALCORE_PERSON_H #include #include #include #include namespace KCalendarCore { /** @brief Represents a person, by name and email address. This class represents a person, with a name and an email address. It supports the "FirstName LastName\ " format. */ class Q_CORE_EXPORT Person { Q_GADGET Q_PROPERTY(bool isEmpty READ isEmpty) Q_PROPERTY(QString fullName READ fullName) Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(QString email READ email WRITE setEmail) public: /** List of persons. */ typedef QVector List; /** Constructs a blank person. */ Person(); /** Constructs a person with name and email address taken from @p fullName. @param fullName is the name and email of the person in the form "FirstName LastName \". @return A Person object. */ static Person fromFullName(const QString &fullName); /** Constructs a person with the name @p name and email address @p email. @param name is the name of this person. @param email is the email address of this person. */ Person(const QString &name, const QString &email); /** Constructs a person as a copy of another person object. @param person is the person to copy. */ Person(const Person &person); /** Destroys a person. */ virtual ~Person(); /** Returns true if the person name and email address are empty. */ Q_REQUIRED_RESULT bool isEmpty() const; /** Returns the full name of this person. @return A QString containing the person's full name in the form "FirstName LastName \". */ Q_REQUIRED_RESULT QString fullName() const; /** Sets the name of the person to @p name. @param name is the name of this person. @see name() */ void setName(const QString &name); /** Returns the person name string. @see setName() */ Q_REQUIRED_RESULT QString name() const; /** Sets the email address for this person to @p email. @param email is the email address for this person. @see email() */ void setEmail(const QString &email); /** Returns the email address for this person. @return A QString containing the person's email address. @see setEmail() */ Q_REQUIRED_RESULT QString email() const; /** Returns true if person's email address is valid. Simple email validity check, test that there: * is at least one @ * is at least one character in the local part * is at least one dot in the domain part * is at least four characters in the domain (assuming that no-one has an address at the tld, that the tld is at least 2 chars) @param email is the email address to validate */ Q_REQUIRED_RESULT static bool isValidEmail(const QString &email); /** Compares this with @p person for equality. @param person is the person to compare. */ bool operator==(const Person &person) const; /** Compares this with @p person for non-equality. @param person is the person to compare. */ bool operator!=(const Person &person) const; /** Sets this person equal to @p person. @param person is the person to copy. */ Person &operator=(const Person &person); private: //@cond PRIVATE class Private; QSharedDataPointer d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &s, const KCalendarCore::Person &person); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &s, KCalendarCore::Person &person); }; /** Serializes the @p person object into the @p stream. */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::Person &person); /** Initializes the @p person object from the @p stream. */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::Person &person); /** Return a hash value for a Person argument. @param key is a Person. */ Q_CORE_EXPORT uint qHash(const KCalendarCore::Person &key); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Person, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Person) //@endcond #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/person_p.h000066400000000000000000000005221473346337000233330ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2019 Volker Krause SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_PERSON_P_H #define KCALCORE_PERSON_P_H class QString; namespace KCalendarCore { QString fullNameHelper(const QString &name, const QString &email); } #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/recurrence.cpp000066400000000000000000001175631473346337000242140ustar00rootroot00000000000000/* This file is part of kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2002, 2006 David Jarvie SPDX-FileCopyrightText: 2005 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ #include "recurrence.h" #include "recurrencehelper_p.h" #include "utils_p.h" #include #include #include #include #include using namespace KCalendarCore; //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Recurrence::Private { public: Private() : mCachedType(rMax) , mAllDay(false) , mRecurReadOnly(false) { } Private(const Private &p) : mRDateTimes(p.mRDateTimes) , mRDates(p.mRDates) , mExDateTimes(p.mExDateTimes) , mExDates(p.mExDates) , mStartDateTime(p.mStartDateTime) , mCachedType(p.mCachedType) , mAllDay(p.mAllDay) , mRecurReadOnly(p.mRecurReadOnly) { } bool operator==(const Private &p) const; RecurrenceRule::List mExRules; RecurrenceRule::List mRRules; QList mRDateTimes; DateList mRDates; QList mExDateTimes; DateList mExDates; QDateTime mStartDateTime; // date/time of first recurrence QList mObservers; // Cache the type of the recurrence with the old system (e.g. MonthlyPos) //使用旧系统缓存重复发生的类型 mutable ushort mCachedType; bool mAllDay = false; // the recurrence has no time, just a date bool mRecurReadOnly = false; }; bool Recurrence::Private::operator==(const Recurrence::Private &p) const { // qDebug() << mStartDateTime << p.mStartDateTime; if ((mStartDateTime != p.mStartDateTime && (mStartDateTime.isValid() || p.mStartDateTime.isValid())) || mAllDay != p.mAllDay || mRecurReadOnly != p.mRecurReadOnly || mExDates != p.mExDates || mExDateTimes != p.mExDateTimes || mRDates != p.mRDates || mRDateTimes != p.mRDateTimes) { return false; } // Compare the rrules, exrules! Assume they have the same order... This only // matters if we have more than one rule (which shouldn't be the default anyway) int i; int end = mRRules.count(); if (end != p.mRRules.count()) { return false; } for (i = 0; i < end; ++i) { if (*mRRules[i] != *p.mRRules[i]) { return false; } } end = mExRules.count(); if (end != p.mExRules.count()) { return false; } for (i = 0; i < end; ++i) { if (*mExRules[i] != *p.mExRules[i]) { return false; } } return true; } //@endcond Recurrence::Recurrence() : d(new KCalendarCore::Recurrence::Private()) { } Recurrence::Recurrence(const Recurrence &r) : RecurrenceRule::RuleObserver() , d(new KCalendarCore::Recurrence::Private(*r.d)) { int i, end; d->mRRules.reserve(r.d->mRRules.count()); for (i = 0, end = r.d->mRRules.count(); i < end; ++i) { RecurrenceRule *rule = new RecurrenceRule(*r.d->mRRules[i]); d->mRRules.append(rule); rule->addObserver(this); } d->mExRules.reserve(r.d->mExRules.count()); for (i = 0, end = r.d->mExRules.count(); i < end; ++i) { RecurrenceRule *rule = new RecurrenceRule(*r.d->mExRules[i]); d->mExRules.append(rule); rule->addObserver(this); } } Recurrence::~Recurrence() { qDeleteAll(d->mExRules); qDeleteAll(d->mRRules); delete d; } bool Recurrence::operator==(const Recurrence &recurrence) const { return *d == *recurrence.d; } void Recurrence::addObserver(RecurrenceObserver *observer) { if (!d->mObservers.contains(observer)) { d->mObservers.append(observer); } } void Recurrence::removeObserver(RecurrenceObserver *observer) { d->mObservers.removeAll(observer); } QDateTime Recurrence::startDateTime() const { return d->mStartDateTime; } bool Recurrence::allDay() const { return d->mAllDay; } void Recurrence::setAllDay(bool allDay) { if (d->mRecurReadOnly || allDay == d->mAllDay) { return; } d->mAllDay = allDay; for (int i = 0, end = d->mRRules.count(); i < end; ++i) { d->mRRules[i]->setAllDay(allDay); } for (int i = 0, end = d->mExRules.count(); i < end; ++i) { d->mExRules[i]->setAllDay(allDay); } updated(); } RecurrenceRule *Recurrence::defaultRRule(bool create) const { if (d->mRRules.isEmpty()) { if (!create || d->mRecurReadOnly) { return nullptr; } RecurrenceRule *rrule = new RecurrenceRule(); rrule->setStartDt(startDateTime()); const_cast(this)->addRRule(rrule); return rrule; } else { return d->mRRules[0]; } } RecurrenceRule *Recurrence::defaultRRuleConst() const { return d->mRRules.isEmpty() ? nullptr : d->mRRules[0]; } void Recurrence::updated() { // recurrenceType() re-calculates the type if it's rMax d->mCachedType = rMax; for (int i = 0, end = d->mObservers.count(); i < end; ++i) { if (d->mObservers[i]) { d->mObservers[i]->recurrenceUpdated(this); } } } bool Recurrence::recurs() const { return !d->mRRules.isEmpty() || !d->mRDates.isEmpty() || !d->mRDateTimes.isEmpty(); } ushort Recurrence::recurrenceType() const { if (d->mCachedType == rMax) { d->mCachedType = recurrenceType(defaultRRuleConst()); } return d->mCachedType; } ushort Recurrence::recurrenceType(const RecurrenceRule *rrule) { if (!rrule) { return rNone; } RecurrenceRule::PeriodType type = rrule->recurrenceType(); // BYSETPOS, BYWEEKNUMBER and BYSECOND were not supported in old versions if (!rrule->bySetPos().isEmpty() || !rrule->bySeconds().isEmpty() || !rrule->byWeekNumbers().isEmpty()) { return rOther; } // It wasn't possible to set BYMINUTES, BYHOUR etc. by the old code. So if // it's set, it's none of the old types if (!rrule->byMinutes().isEmpty() || !rrule->byHours().isEmpty()) { return rOther; } // Possible combinations were: // BYDAY: with WEEKLY, MONTHLY, YEARLY // BYMONTHDAY: with MONTHLY, YEARLY // BYMONTH: with YEARLY // BYYEARDAY: with YEARLY if ((!rrule->byYearDays().isEmpty() && type != RecurrenceRule::rYearly) || (!rrule->byMonths().isEmpty() && type != RecurrenceRule::rYearly)) { return rOther; } if (!rrule->byDays().isEmpty()) { if (type != RecurrenceRule::rYearly && type != RecurrenceRule::rMonthly && type != RecurrenceRule::rWeekly) { return rOther; } } switch (type) { case RecurrenceRule::rNone: return rNone; case RecurrenceRule::rMinutely: return rMinutely; case RecurrenceRule::rHourly: return rHourly; case RecurrenceRule::rDaily: return rDaily; case RecurrenceRule::rWeekly: return rWeekly; case RecurrenceRule::rMonthly: { if (rrule->byDays().isEmpty()) { return rMonthlyDay; } else if (rrule->byMonthDays().isEmpty()) { return rMonthlyPos; } else { return rOther; // both position and date specified } } case RecurrenceRule::rYearly: { // Possible combinations: // rYearlyMonth: [BYMONTH &] BYMONTHDAY // rYearlyDay: BYYEARDAY // rYearlyPos: [BYMONTH &] BYDAY if (!rrule->byDays().isEmpty()) { // can only by rYearlyPos if (rrule->byMonthDays().isEmpty() && rrule->byYearDays().isEmpty()) { return rYearlyPos; } else { return rOther; } } else if (!rrule->byYearDays().isEmpty()) { // Can only be rYearlyDay if (rrule->byMonths().isEmpty() && rrule->byMonthDays().isEmpty()) { return rYearlyDay; } else { return rOther; } } else { return rYearlyMonth; } } default: return rOther; } } bool Recurrence::recursOn(const QDate &qd, const QTimeZone &timeZone) const { // Don't waste time if date is before the start of the recurrence if (QDateTime(qd, QTime(23, 59, 59), timeZone) < d->mStartDateTime) { return false; } // First handle dates. Exrules override if (std::binary_search(d->mExDates.constBegin(), d->mExDates.constEnd(), qd)) { return false; } int i, end; // For all-day events a matching exrule excludes the whole day // since exclusions take precedence over inclusions, we know it can't occur on that day. if (allDay()) { for (i = 0, end = d->mExRules.count(); i < end; ++i) { if (d->mExRules[i]->recursOn(qd, timeZone)) { return false; } } } if (std::binary_search(d->mRDates.constBegin(), d->mRDates.constEnd(), qd)) { return true; } // Check if it might recur today at all. bool recurs = (startDate() == qd); for (i = 0, end = d->mRDateTimes.count(); i < end && !recurs; ++i) { recurs = (d->mRDateTimes[i].toTimeZone(timeZone).date() == qd); } for (i = 0, end = d->mRRules.count(); i < end && !recurs; ++i) { recurs = d->mRRules[i]->recursOn(qd, timeZone); } // If the event wouldn't recur at all, simply return false, don't check ex* if (!recurs) { return false; } // Check if there are any times for this day excluded, either by exdate or exrule: bool exon = false; for (i = 0, end = d->mExDateTimes.count(); i < end && !exon; ++i) { exon = (d->mExDateTimes[i].toTimeZone(timeZone).date() == qd); } if (!allDay()) { // we have already checked all-day times above for (i = 0, end = d->mExRules.count(); i < end && !exon; ++i) { exon = d->mExRules[i]->recursOn(qd, timeZone); } } if (!exon) { // Simple case, nothing on that day excluded, return the value from before return recurs; } else { // Harder part: I don't think there is any way other than to calculate the // whole list of items for that day. // TODO: consider whether it would be more efficient to call // Rule::recurTimesOn() instead of Rule::recursOn() from the start TimeList timesForDay(recurTimesOn(qd, timeZone)); return !timesForDay.isEmpty(); } } bool Recurrence::recursAt(const QDateTime &dt) const { // Convert to recurrence's time zone for date comparisons, and for more efficient time comparisons const auto dtrecur = dt.toTimeZone(d->mStartDateTime.timeZone()); // if it's excluded anyway, don't bother to check if it recurs at all. if (std::binary_search(d->mExDateTimes.constBegin(), d->mExDateTimes.constEnd(), dtrecur) || std::binary_search(d->mExDates.constBegin(), d->mExDates.constEnd(), dtrecur.date())) { return false; } int i, end; for (i = 0, end = d->mExRules.count(); i < end; ++i) { if (d->mExRules[i]->recursAt(dtrecur)) { return false; } } // Check explicit recurrences, then rrules. if (startDateTime() == dtrecur || std::binary_search(d->mRDateTimes.constBegin(), d->mRDateTimes.constEnd(), dtrecur)) { return true; } for (i = 0, end = d->mRRules.count(); i < end; ++i) { if (d->mRRules[i]->recursAt(dtrecur)) { return true; } } return false; } /** Calculates the cumulative end of the whole recurrence (rdates and rrules). If any rrule is infinite, or the recurrence doesn't have any rrules or rdates, an invalid date is returned. */ QDateTime Recurrence::endDateTime() const { QList dts; dts << startDateTime(); if (!d->mRDates.isEmpty()) { dts << QDateTime(d->mRDates.last(), QTime(0, 0, 0), d->mStartDateTime.timeZone()); } if (!d->mRDateTimes.isEmpty()) { dts << d->mRDateTimes.last(); } for (int i = 0, end = d->mRRules.count(); i < end; ++i) { auto rl = d->mRRules[i]->endDt(); // if any of the rules is infinite, the whole recurrence is if (!rl.isValid()) { return QDateTime(); } dts << rl; } sortAndRemoveDuplicates(dts); return dts.isEmpty() ? QDateTime() : dts.last(); } /** Calculates the cumulative end of the whole recurrence (rdates and rrules). If any rrule is infinite, or the recurrence doesn't have any rrules or rdates, an invalid date is returned. */ QDate Recurrence::endDate() const { QDateTime end(endDateTime()); return end.isValid() ? end.date() : QDate(); } void Recurrence::setEndDate(const QDate &date) { QDateTime dt(date, d->mStartDateTime.time(), d->mStartDateTime.timeZone()); if (allDay()) { dt.setTime(QTime(23, 59, 59)); } setEndDateTime(dt); } void Recurrence::setEndDateTime(const QDateTime &dateTime) { if (d->mRecurReadOnly) { return; } RecurrenceRule *rrule = defaultRRule(true); if (!rrule) { return; } // If the recurrence rule has a duration, and we're trying to set an invalid end date, // we have to skip setting it to avoid setting the field dirty. // The end date is already invalid since the duration is set and end date/duration // are mutually exclusive. // We can't use inequality check below, because endDt() also returns a valid date // for a duration (it is calculated from the duration). if (rrule->duration() > 0 && !dateTime.isValid()) { return; } if (dateTime != rrule->endDt()) { rrule->setEndDt(dateTime); updated(); } } int Recurrence::duration() const { RecurrenceRule *rrule = defaultRRuleConst(); return rrule ? rrule->duration() : 0; } int Recurrence::durationTo(const QDateTime &datetime) const { // Emulate old behavior: This is just an interface to the first rule! RecurrenceRule *rrule = defaultRRuleConst(); return rrule ? rrule->durationTo(datetime) : 0; } int Recurrence::durationTo(const QDate &date) const { return durationTo(QDateTime(date, QTime(23, 59, 59), d->mStartDateTime.timeZone())); } void Recurrence::setDuration(int duration) { if (d->mRecurReadOnly) { return; } RecurrenceRule *rrule = defaultRRule(true); if (!rrule) { return; } if (duration != rrule->duration()) { rrule->setDuration(duration); updated(); } } void Recurrence::shiftTimes(const QTimeZone &oldTz, const QTimeZone &newTz) { if (d->mRecurReadOnly) { return; } d->mStartDateTime = d->mStartDateTime.toTimeZone(oldTz); d->mStartDateTime.setTimeZone(newTz); int i, end; for (i = 0, end = d->mRDateTimes.count(); i < end; ++i) { d->mRDateTimes[i] = d->mRDateTimes[i].toTimeZone(oldTz); d->mRDateTimes[i].setTimeZone(newTz); } for (i = 0, end = d->mExDateTimes.count(); i < end; ++i) { d->mExDateTimes[i] = d->mExDateTimes[i].toTimeZone(oldTz); d->mExDateTimes[i].setTimeZone(newTz); } for (i = 0, end = d->mRRules.count(); i < end; ++i) { d->mRRules[i]->shiftTimes(oldTz, newTz); } for (i = 0, end = d->mExRules.count(); i < end; ++i) { d->mExRules[i]->shiftTimes(oldTz, newTz); } } void Recurrence::unsetRecurs() { if (d->mRecurReadOnly) { return; } qDeleteAll(d->mRRules); d->mRRules.clear(); updated(); } void Recurrence::clear() { if (d->mRecurReadOnly) { return; } qDeleteAll(d->mRRules); d->mRRules.clear(); qDeleteAll(d->mExRules); d->mExRules.clear(); d->mRDates.clear(); d->mRDateTimes.clear(); d->mExDates.clear(); d->mExDateTimes.clear(); d->mCachedType = rMax; updated(); } void Recurrence::setRecurReadOnly(bool readOnly) { d->mRecurReadOnly = readOnly; } bool Recurrence::recurReadOnly() const { return d->mRecurReadOnly; } QDate Recurrence::startDate() const { return d->mStartDateTime.date(); } void Recurrence::setStartDateTime(const QDateTime &start, bool isAllDay) { if (d->mRecurReadOnly) { return; } d->mStartDateTime = start; setAllDay(isAllDay); // set all RRULEs and EXRULEs int i, end; for (i = 0, end = d->mRRules.count(); i < end; ++i) { d->mRRules[i]->setStartDt(start); } for (i = 0, end = d->mExRules.count(); i < end; ++i) { d->mExRules[i]->setStartDt(start); } updated(); } int Recurrence::frequency() const { RecurrenceRule *rrule = defaultRRuleConst(); return rrule ? rrule->frequency() : 0; } // Emulate the old behaviour. Make this methods just an interface to the // first rrule void Recurrence::setFrequency(int freq) { if (d->mRecurReadOnly || freq <= 0) { return; } RecurrenceRule *rrule = defaultRRule(true); if (rrule) { rrule->setFrequency(freq); } updated(); } // WEEKLY int Recurrence::weekStart() const { RecurrenceRule *rrule = defaultRRuleConst(); return rrule ? rrule->weekStart() : 1; } // Emulate the old behavior QBitArray Recurrence::days() const { QBitArray days(7); days.fill(0); RecurrenceRule *rrule = defaultRRuleConst(); if (rrule) { const QList &bydays = rrule->byDays(); for (int i = 0; i < bydays.size(); ++i) { if (bydays.at(i).pos() == 0) { days.setBit(bydays.at(i).day() - 1); } } } return days; } // MONTHLY // Emulate the old behavior QList Recurrence::monthDays() const { RecurrenceRule *rrule = defaultRRuleConst(); if (rrule) { return rrule->byMonthDays(); } else { return QList(); } } // Emulate the old behavior QList Recurrence::monthPositions() const { RecurrenceRule *rrule = defaultRRuleConst(); return rrule ? rrule->byDays() : QList(); } // YEARLY QList Recurrence::yearDays() const { RecurrenceRule *rrule = defaultRRuleConst(); return rrule ? rrule->byYearDays() : QList(); } QList Recurrence::yearDates() const { return monthDays(); } QList Recurrence::yearMonths() const { RecurrenceRule *rrule = defaultRRuleConst(); return rrule ? rrule->byMonths() : QList(); } QList Recurrence::yearPositions() const { return monthPositions(); } RecurrenceRule *Recurrence::setNewRecurrenceType(RecurrenceRule::PeriodType type, int freq) { if (d->mRecurReadOnly || freq <= 0) { return nullptr; } // Ignore the call if nothing has change if (defaultRRuleConst() && defaultRRuleConst()->recurrenceType() == type && frequency() == freq) { return nullptr; } qDeleteAll(d->mRRules); d->mRRules.clear(); updated(); RecurrenceRule *rrule = defaultRRule(true); if (!rrule) { return nullptr; } rrule->setRecurrenceType(type); rrule->setFrequency(freq); rrule->setDuration(-1); return rrule; } void Recurrence::setMinutely(int _rFreq) { if (setNewRecurrenceType(RecurrenceRule::rMinutely, _rFreq)) { updated(); } } void Recurrence::setHourly(int _rFreq) { if (setNewRecurrenceType(RecurrenceRule::rHourly, _rFreq)) { updated(); } } void Recurrence::setDaily(int _rFreq) { if (setNewRecurrenceType(RecurrenceRule::rDaily, _rFreq)) { updated(); } } void Recurrence::setWeekly(int freq, int weekStart) { RecurrenceRule *rrule = setNewRecurrenceType(RecurrenceRule::rWeekly, freq); if (!rrule) { return; } rrule->setWeekStart(weekStart); updated(); } void Recurrence::setWeekly(int freq, const QBitArray &days, int weekStart) { setWeekly(freq, weekStart); addMonthlyPos(0, days); } void Recurrence::addWeeklyDays(const QBitArray &days) { addMonthlyPos(0, days); } void Recurrence::setMonthly(int freq) { if (setNewRecurrenceType(RecurrenceRule::rMonthly, freq)) { updated(); } } void Recurrence::addMonthlyPos(short pos, const QBitArray &days) { // Allow 53 for yearly! if (d->mRecurReadOnly || pos > 53 || pos < -53) { return; } RecurrenceRule *rrule = defaultRRule(false); if (!rrule) { return; } bool changed = false; QList positions = rrule->byDays(); for (int i = 0; i < 7; ++i) { if (days.testBit(i)) { RecurrenceRule::WDayPos p(pos, i + 1); if (!positions.contains(p)) { changed = true; positions.append(p); } } } if (changed) { rrule->setByDays(positions); updated(); } } void Recurrence::addMonthlyPos(short pos, ushort day) { // Allow 53 for yearly! if (d->mRecurReadOnly || pos > 53 || pos < -53) { return; } RecurrenceRule *rrule = defaultRRule(false); if (!rrule) { return; } QList positions = rrule->byDays(); RecurrenceRule::WDayPos p(pos, day); if (!positions.contains(p)) { positions.append(p); setMonthlyPos(positions); } } void Recurrence::setMonthlyPos(const QList &monthlyDays) { if (d->mRecurReadOnly) { return; } RecurrenceRule *rrule = defaultRRule(true); if (!rrule) { return; } // TODO: sort lists // the position inside the list has no meaning, so sort the list before testing if it changed if (monthlyDays != rrule->byDays()) { rrule->setByDays(monthlyDays); updated(); } } void Recurrence::addMonthlyDate(short day) { if (d->mRecurReadOnly || day > 31 || day < -31) { return; } RecurrenceRule *rrule = defaultRRule(true); if (!rrule) { return; } QList monthDays = rrule->byMonthDays(); if (!monthDays.contains(day)) { monthDays.append(day); setMonthlyDate(monthDays); } } void Recurrence::setMonthlyDate(const QList &monthlyDays) { if (d->mRecurReadOnly) { return; } RecurrenceRule *rrule = defaultRRule(true); if (!rrule) { return; } QList mD(monthlyDays); QList rbD(rrule->byMonthDays()); sortAndRemoveDuplicates(mD); sortAndRemoveDuplicates(rbD); if (mD != rbD) { rrule->setByMonthDays(monthlyDays); updated(); } } void Recurrence::setYearly(int freq) { if (setNewRecurrenceType(RecurrenceRule::rYearly, freq)) { updated(); } } // Daynumber within year void Recurrence::addYearlyDay(int day) { RecurrenceRule *rrule = defaultRRule(false); // It must already exist! if (!rrule) { return; } QList days = rrule->byYearDays(); if (!days.contains(day)) { days << day; setYearlyDay(days); } } void Recurrence::setYearlyDay(const QList &days) { RecurrenceRule *rrule = defaultRRule(false); // It must already exist! if (!rrule) { return; } QList d(days); QList bYD(rrule->byYearDays()); sortAndRemoveDuplicates(d); sortAndRemoveDuplicates(bYD); if (d != bYD) { rrule->setByYearDays(days); updated(); } } // day part of date within year void Recurrence::addYearlyDate(int day) { addMonthlyDate(day); } void Recurrence::setYearlyDate(const QList &dates) { setMonthlyDate(dates); } // day part of date within year, given as position (n-th weekday) void Recurrence::addYearlyPos(short pos, const QBitArray &days) { addMonthlyPos(pos, days); } void Recurrence::setYearlyPos(const QList &days) { setMonthlyPos(days); } // month part of date within year void Recurrence::addYearlyMonth(short month) { if (d->mRecurReadOnly || month < 1 || month > 12) { return; } RecurrenceRule *rrule = defaultRRule(false); if (!rrule) { return; } QList months = rrule->byMonths(); if (!months.contains(month)) { months << month; setYearlyMonth(months); } } void Recurrence::setYearlyMonth(const QList &months) { if (d->mRecurReadOnly) { return; } RecurrenceRule *rrule = defaultRRule(false); if (!rrule) { return; } QList m(months); QList bM(rrule->byMonths()); sortAndRemoveDuplicates(m); sortAndRemoveDuplicates(bM); if (m != bM) { rrule->setByMonths(months); updated(); } } TimeList Recurrence::recurTimesOn(const QDate &date, const QTimeZone &timeZone) const { // qDebug() << "recurTimesOn(" << date << ")"; int i, end; TimeList times; // The whole day is excepted if (std::binary_search(d->mExDates.constBegin(), d->mExDates.constEnd(), date)) { return times; } // EXRULE takes precedence over RDATE entries, so for all-day events, // a matching excule also excludes the whole day automatically if (allDay()) { for (i = 0, end = d->mExRules.count(); i < end; ++i) { if (d->mExRules[i]->recursOn(date, timeZone)) { return times; } } } QDateTime dt = startDateTime().toTimeZone(timeZone); if (dt.date() == date) { times << dt.time(); } bool foundDate = false; for (i = 0, end = d->mRDateTimes.count(); i < end; ++i) { dt = d->mRDateTimes[i].toTimeZone(timeZone); if (dt.date() == date) { times << dt.time(); foundDate = true; } else if (foundDate) { break; // <= Assume that the rdatetime list is sorted } } for (i = 0, end = d->mRRules.count(); i < end; ++i) { times += d->mRRules[i]->recurTimesOn(date, timeZone); } sortAndRemoveDuplicates(times); foundDate = false; TimeList extimes; for (i = 0, end = d->mExDateTimes.count(); i < end; ++i) { dt = d->mExDateTimes[i].toTimeZone(timeZone); if (dt.date() == date) { extimes << dt.time(); foundDate = true; } else if (foundDate) { break; } } if (!allDay()) { // we have already checked all-day times above for (i = 0, end = d->mExRules.count(); i < end; ++i) { extimes += d->mExRules[i]->recurTimesOn(date, timeZone); } } sortAndRemoveDuplicates(extimes); inplaceSetDifference(times, extimes); return times; } QList Recurrence::timesInInterval(const QDateTime &start, const QDateTime &end) const { int i, count; QList times; for (i = 0, count = d->mRRules.count(); i < count; ++i) { times += d->mRRules[i]->timesInInterval(start, end); } // add rdatetimes that fit in the interval for (i = 0, count = d->mRDateTimes.count(); i < count; ++i) { if (d->mRDateTimes[i] >= start && d->mRDateTimes[i] <= end) { times += d->mRDateTimes[i]; } } // add rdates that fit in the interval QDateTime kdt = d->mStartDateTime; for (i = 0, count = d->mRDates.count(); i < count; ++i) { kdt.setDate(d->mRDates[i]); if (kdt >= start && kdt <= end) { times += kdt; } } // Recurrence::timesInInterval(...) doesn't explicitly add mStartDateTime to the list // of times to be returned. It calls mRRules[i]->timesInInterval(...) which include // mStartDateTime. // So, If we have rdates/rdatetimes but don't have any rrule we must explicitly // add mStartDateTime to the list, otherwise we won't see the first occurrence. if ((!d->mRDates.isEmpty() || !d->mRDateTimes.isEmpty()) && d->mRRules.isEmpty() && start <= d->mStartDateTime && end >= d->mStartDateTime) { times += d->mStartDateTime; } sortAndRemoveDuplicates(times); // Remove excluded times int idt = 0; int enddt = times.count(); for (i = 0, count = d->mExDates.count(); i < count && idt < enddt; ++i) { while (idt < enddt && times[idt].date() < d->mExDates[i]) { ++idt; } while (idt < enddt && times[idt].date() == d->mExDates[i]) { times.removeAt(idt); --enddt; } } QList extimes; for (i = 0, count = d->mExRules.count(); i < count; ++i) { extimes += d->mExRules[i]->timesInInterval(start, end); } extimes += d->mExDateTimes; sortAndRemoveDuplicates(extimes); inplaceSetDifference(times, extimes); return times; } QDateTime Recurrence::getNextDateTime(const QDateTime &preDateTime) const { QDateTime nextDT = preDateTime; // prevent infinite loops, e.g. when an exrule extinguishes an rrule (e.g. // the exrule is identical to the rrule). If an occurrence is found, break // out of the loop by returning that QDateTime // TODO_Recurrence: Is a loop counter of 1000 really okay? I mean for secondly // recurrence, an exdate might exclude more than 1000 intervals! int loop = 0; while (loop < 1000) { // Outline of the algo: // 1) Find the next date/time after preDateTime when the event could recur // 1.0) Add the start date if it's after preDateTime // 1.1) Use the next occurrence from the explicit RDATE lists // 1.2) Add the next recurrence for each of the RRULEs // 2) Take the earliest recurrence of these = QDateTime nextDT // 3) If that date/time is not excluded, either explicitly by an EXDATE or // by an EXRULE, return nextDT as the next date/time of the recurrence // 4) If it's excluded, start all at 1), but starting at nextDT (instead // of preDateTime). Loop at most 1000 times. ++loop; // First, get the next recurrence from the RDate lists QList dates; if (nextDT < startDateTime()) { dates << startDateTime(); } // Assume that the rdatetime list is sorted const auto it = std::upper_bound(d->mRDateTimes.constBegin(), d->mRDateTimes.constEnd(), nextDT); if (it != d->mRDateTimes.constEnd()) { dates << *it; } QDateTime kdt(startDateTime()); for (const auto &date : qAsConst(d->mRDates)) { kdt.setDate(date); if (kdt > nextDT) { dates << kdt; break; } } // Add the next occurrences from all RRULEs. for (const auto &rule : qAsConst(d->mRRules)) { QDateTime dt = rule->getNextDate(nextDT); if (dt.isValid()) { dates << dt; } } // Take the first of these (all others can't be used later on) sortAndRemoveDuplicates(dates); if (dates.isEmpty()) { return QDateTime(); } nextDT = dates.first(); // Check if that date/time is excluded explicitly or by an exrule: if (!std::binary_search(d->mExDates.constBegin(), d->mExDates.constEnd(), nextDT.date()) && !std::binary_search(d->mExDateTimes.constBegin(), d->mExDateTimes.constEnd(), nextDT)) { bool allowed = true; for (const auto &rule : qAsConst(d->mExRules)) { allowed = allowed && !rule->recursAt(nextDT); } if (allowed) { return nextDT; } } } // Couldn't find a valid occurrences in 1000 loops, something is wrong! return QDateTime(); } QDateTime Recurrence::getPreviousDateTime(const QDateTime &afterDateTime) const { QDateTime prevDT = afterDateTime; // prevent infinite loops, e.g. when an exrule extinguishes an rrule (e.g. // the exrule is identical to the rrule). If an occurrence is found, break // out of the loop by returning that QDateTime int loop = 0; while (loop < 1000) { // Outline of the algo: // 1) Find the next date/time after preDateTime when the event could recur // 1.1) Use the next occurrence from the explicit RDATE lists // 1.2) Add the next recurrence for each of the RRULEs // 2) Take the earliest recurrence of these = QDateTime nextDT // 3) If that date/time is not excluded, either explicitly by an EXDATE or // by an EXRULE, return nextDT as the next date/time of the recurrence // 4) If it's excluded, start all at 1), but starting at nextDT (instead // of preDateTime). Loop at most 1000 times. ++loop; // First, get the next recurrence from the RDate lists QList dates; if (prevDT > startDateTime()) { dates << startDateTime(); } const auto it = strictLowerBound(d->mRDateTimes.constBegin(), d->mRDateTimes.constEnd(), prevDT); if (it != d->mRDateTimes.constEnd()) { dates << *it; } QDateTime kdt(startDateTime()); for (const auto &date : qAsConst(d->mRDates)) { kdt.setDate(date); if (kdt < prevDT) { dates << kdt; break; } } // Add the previous occurrences from all RRULEs. for (const auto &rule : qAsConst(d->mRRules)) { QDateTime dt = rule->getPreviousDate(prevDT); if (dt.isValid()) { dates << dt; } } // Take the last of these (all others can't be used later on) sortAndRemoveDuplicates(dates); if (dates.isEmpty()) { return QDateTime(); } prevDT = dates.last(); // Check if that date/time is excluded explicitly or by an exrule: if (!std::binary_search(d->mExDates.constBegin(), d->mExDates.constEnd(), prevDT.date()) && !std::binary_search(d->mExDateTimes.constBegin(), d->mExDateTimes.constEnd(), prevDT)) { bool allowed = true; for (const auto &rule : qAsConst(d->mExRules)) { allowed = allowed && !rule->recursAt(prevDT); } if (allowed) { return prevDT; } } } // Couldn't find a valid occurrences in 1000 loops, something is wrong! return QDateTime(); } /***************************** PROTECTED FUNCTIONS ***************************/ RecurrenceRule::List Recurrence::rRules() const { return d->mRRules; } void Recurrence::addRRule(RecurrenceRule *rrule) { if (d->mRecurReadOnly || !rrule) { return; } rrule->setAllDay(d->mAllDay); d->mRRules.append(rrule); rrule->addObserver(this); updated(); } void Recurrence::removeRRule(RecurrenceRule *rrule) { if (d->mRecurReadOnly) { return; } d->mRRules.removeAll(rrule); rrule->removeObserver(this); updated(); } void Recurrence::deleteRRule(RecurrenceRule *rrule) { if (d->mRecurReadOnly) { return; } d->mRRules.removeAll(rrule); delete rrule; updated(); } RecurrenceRule::List Recurrence::exRules() const { return d->mExRules; } void Recurrence::addExRule(RecurrenceRule *exrule) { if (d->mRecurReadOnly || !exrule) { return; } exrule->setAllDay(d->mAllDay); d->mExRules.append(exrule); exrule->addObserver(this); updated(); } void Recurrence::removeExRule(RecurrenceRule *exrule) { if (d->mRecurReadOnly) { return; } d->mExRules.removeAll(exrule); exrule->removeObserver(this); updated(); } void Recurrence::deleteExRule(RecurrenceRule *exrule) { if (d->mRecurReadOnly) { return; } d->mExRules.removeAll(exrule); delete exrule; updated(); } QList Recurrence::rDateTimes() const { return d->mRDateTimes; } void Recurrence::setRDateTimes(const QList &rdates) { if (d->mRecurReadOnly) { return; } d->mRDateTimes = rdates; sortAndRemoveDuplicates(d->mRDateTimes); updated(); } void Recurrence::addRDateTime(const QDateTime &rdate) { if (d->mRecurReadOnly) { return; } setInsert(d->mRDateTimes, rdate); updated(); } DateList Recurrence::rDates() const { return d->mRDates; } void Recurrence::setRDates(const DateList &rdates) { if (d->mRecurReadOnly) { return; } d->mRDates = rdates; sortAndRemoveDuplicates(d->mRDates); updated(); } void Recurrence::addRDate(const QDate &rdate) { if (d->mRecurReadOnly) { return; } setInsert(d->mRDates, rdate); updated(); } QList Recurrence::exDateTimes() const { return d->mExDateTimes; } void Recurrence::setExDateTimes(const QList &exdates) { if (d->mRecurReadOnly) { return; } d->mExDateTimes = exdates; sortAndRemoveDuplicates(d->mExDateTimes); } void Recurrence::addExDateTime(const QDateTime &exdate) { if (d->mRecurReadOnly) { return; } setInsert(d->mExDateTimes, exdate); updated(); } DateList Recurrence::exDates() const { return d->mExDates; } void Recurrence::setExDates(const DateList &exdates) { if (d->mRecurReadOnly) { return; } DateList l = exdates; sortAndRemoveDuplicates(l); if (d->mExDates != l) { d->mExDates = l; updated(); } } void Recurrence::addExDate(const QDate &exdate) { if (d->mRecurReadOnly) { return; } setInsert(d->mExDates, exdate); updated(); } void Recurrence::recurrenceChanged(RecurrenceRule *) { updated(); } // %%%%%%%%%%%%%%%%%% end:Recurrencerule %%%%%%%%%%%%%%%%%% void Recurrence::dump() const { int i; int count = d->mRRules.count(); qDebug() << " -)" << count << "RRULEs:"; for (i = 0; i < count; ++i) { qDebug() << " -) RecurrenceRule: "; d->mRRules[i]->dump(); } count = d->mExRules.count(); qDebug() << " -)" << count << "EXRULEs:"; for (i = 0; i < count; ++i) { qDebug() << " -) ExceptionRule :"; d->mExRules[i]->dump(); } count = d->mRDates.count(); qDebug() << " -)" << count << "Recurrence Dates:"; for (i = 0; i < count; ++i) { qDebug() << " " << d->mRDates[i]; } count = d->mRDateTimes.count(); qDebug() << " -)" << count << "Recurrence Date/Times:"; for (i = 0; i < count; ++i) { qDebug() << " " << d->mRDateTimes[i]; } count = d->mExDates.count(); qDebug() << " -)" << count << "Exceptions Dates:"; for (i = 0; i < count; ++i) { qDebug() << " " << d->mExDates[i]; } count = d->mExDateTimes.count(); qDebug() << " -)" << count << "Exception Date/Times:"; for (i = 0; i < count; ++i) { qDebug() << " " << d->mExDateTimes[i]; } } Recurrence::RecurrenceObserver::~RecurrenceObserver() { } Q_CORE_EXPORT QDataStream &KCalendarCore::operator<<(QDataStream &out, KCalendarCore::Recurrence *r) { if (!r) { return out; } serializeQDateTimeList(out, r->d->mRDateTimes); serializeQDateTimeList(out, r->d->mExDateTimes); out << r->d->mRDates; serializeQDateTimeAsKDateTime(out, r->d->mStartDateTime); out << r->d->mCachedType << r->d->mAllDay << r->d->mRecurReadOnly << r->d->mExDates << r->d->mExRules.count() << r->d->mRRules.count(); for (RecurrenceRule *rule : qAsConst(r->d->mExRules)) { out << rule; } for (RecurrenceRule *rule : qAsConst(r->d->mRRules)) { out << rule; } return out; } Q_CORE_EXPORT QDataStream &KCalendarCore::operator>>(QDataStream &in, KCalendarCore::Recurrence *r) { if (!r) { return in; } int rruleCount, exruleCount; deserializeQDateTimeList(in, r->d->mRDateTimes); deserializeQDateTimeList(in, r->d->mExDateTimes); in >> r->d->mRDates; deserializeKDateTimeAsQDateTime(in, r->d->mStartDateTime); in >> r->d->mCachedType >> r->d->mAllDay >> r->d->mRecurReadOnly >> r->d->mExDates >> exruleCount >> rruleCount; r->d->mExRules.clear(); r->d->mRRules.clear(); for (int i = 0; i < exruleCount; ++i) { RecurrenceRule *rule = new RecurrenceRule(); rule->addObserver(r); in >> rule; r->d->mExRules.append(rule); } for (int i = 0; i < rruleCount; ++i) { RecurrenceRule *rule = new RecurrenceRule(); rule->addObserver(r); in >> rule; r->d->mRRules.append(rule); } return in; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/recurrence.h000066400000000000000000000665361473346337000236640ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001, 2003 Cornelius Schumacher SPDX-FileCopyrightText: 2002, 2006 David Jarvie SPDX-FileCopyrightText: 2005 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_RECURRENCE_H #define KCALCORE_RECURRENCE_H #include "recurrencerule.h" class QBitArray; class QTimeZone; namespace KCalendarCore { class RecurrenceRule; /** This class represents a recurrence rule for a calendar incidence. 此类表示日历事件的重复规则。 It manages all recurrence rules, recurrence date/times, exception rules and exception date times that can appear inside calendar items. Each recurrence rule and exception rule is represented as an object of type RecurrenceRule. 它管理日历项中可能出现的所有定期规则、定期日期/时间、异常规则和异常日期时间。 每个递归规则和异常规则都表示为RecurrenceRule类型的对象。 For the simple case where at most one recurrence rule is present, this class provides shortcut methods to set the type: setMinutely() setHourly() setDaily() setWeekly() setMonthly() setYearly() to set/get general information about the recurrence: setEndDate() setEndDateTime() duration() durationTo() setDuration() frequency() setFrequency() and to set/get specific information about the recurrence within the interval: days() monthDays() monthPositions() yearDays() yearDates() yearMonths() yearPositions() addMonthlyPos() addMonthlyDate() addYearlyDay() addYearlyDate() addYearlyPos() addYearlyMonth() These are all available so that you don't have to work on the RecurrenceRule objects themselves. In other words, in that simple situation the interface stays almost the same compared to the old Recurrence class, which allowed only one recurrence rule. As soon as your recurrence consists of multiple recurrence rules or exception rules, you cannot use the methods mentioned above any more (since each rule will have a different type and different settings). If you still call any of them, the set*ly methods will remove all rules and add one rule with the specified type. The add* and the other set* methods will change only the first recurrence rule, but leave the others untouched. */ class Q_CORE_EXPORT Recurrence : public RecurrenceRule::RuleObserver { public: class RecurrenceObserver { public: virtual ~RecurrenceObserver(); /** This method will be called on each change of the recurrence object */ virtual void recurrenceUpdated(Recurrence *r) = 0; }; /** enumeration for describing how an event recurs, if at all. */ enum { rNone = 0, rMinutely = 0x001, rHourly = 0x0002, rDaily = 0x0003, rWeekly = 0x0004, rMonthlyPos = 0x0005, rMonthlyDay = 0x0006, rYearlyMonth = 0x0007, rYearlyDay = 0x0008, rYearlyPos = 0x0009, rOther = 0x000A, rMax = 0x00FF, }; /** Constructs an empty recurrence. */ Recurrence(); /** Copy constructor. @param r instance to copy from */ Recurrence(const Recurrence &r); /** Destructor. */ ~Recurrence() override; /** Comparison operator for equality. @param r instance to compare with @return true if recurrences are the same, false otherwise */ bool operator==(const Recurrence &r) const; /** Comparison operator for inequality. @param r instance to compare with @return true if recurrences are the different, false if the same */ bool operator!=(const Recurrence &r) const { return !operator==(r); } Recurrence &operator=(const Recurrence &r) = delete; /** Return the start date/time of the recurrence (Time for all-day recurrences will be 0:00). * 返回重复的开始日期/时间 (全天重复的时间为0:00) @return the current start/time of the recurrence. */ Q_REQUIRED_RESULT QDateTime startDateTime() const; /** Return the start date/time of the recurrence * 返回重复的开始日期/时间 */ Q_REQUIRED_RESULT QDate startDate() const; /** Set start of recurrence. @param start the new start date or date/time of the recurrence. @param isAllDay if true, the recurrence is set to all-day. Otherwise the recurrence is set to non-all-day. */ void setStartDateTime(const QDateTime &start, bool isAllDay); /** Set whether the recurrence has no time, just a date. * All-day means -- according to rfc2445 -- that the event has no time * associated. * N.B. This property is derived by default from whether setStartDateTime() is * called with a date-only or date/time parameter. * @return whether the recurrence has a time (false) or it is just a date (true). */ Q_REQUIRED_RESULT bool allDay() const; /** Sets whether the dtstart is a all-day (i.e. has no time attached) @param allDay If the recurrence is for all-day item (true) or has a time associated (false). */ void setAllDay(bool allDay); /** Set if recurrence is read-only or can be changed. */ void setRecurReadOnly(bool readOnly); /** Returns true if the recurrence is read-only, or false if it can be changed. */ //如果重复周期是只读的,则返回 true;如果可以更改,则返回 false。 Q_REQUIRED_RESULT bool recurReadOnly() const; /** Returns whether the event recurs at all. */ //返回事件是否再次发生 Q_REQUIRED_RESULT bool recurs() const; /** Returns the event's recurrence status. See the enumeration at the top * of this file for possible values. */ Q_REQUIRED_RESULT ushort recurrenceType() const; /** Returns the recurrence status for a recurrence rule. * 返回重复规则的重复状态。 * See the enumeration at the top of this file for possible values. * 有关可能的值,请参阅此文件顶部的枚举。 * * @param rrule the recurrence rule to get the type for */ static ushort recurrenceType(const RecurrenceRule *rrule); /** Returns true if the date specified is one on which the event will recur. @param date date to check. @param timeZone time zone for the @p date. */ bool recursOn(const QDate &date, const QTimeZone &timeZone) const; /** Returns true if the date/time specified is one at which the event will recur. Times are rounded down to the nearest minute to determine the result. 如果指定的日期/时间是事件将再次发生的日期/时间,则返回true。时间四舍五入到最近的分钟以确定结果。 @param dt is the date/time to check. */ bool recursAt(const QDateTime &dt) const; /** Removes all recurrence rules. Recurrence dates and exceptions are not removed. 删除所有重复规则。不会删除重复日期和例外情况。 */ void unsetRecurs(); /** Removes all recurrence and exception rules and dates. */ void clear(); /** Returns a list of the times on the specified date at which the * recurrence will occur. The returned times should be interpreted in the * context of @p timeSpec. * @param date the date for which to find the recurrence times * @param timeZone timezone for @p date */ Q_REQUIRED_RESULT TimeList recurTimesOn(const QDate &date, const QTimeZone &timeZone) const; /** Returns a list of all the times at which the recurrence will occur * between two specified times. * * There is a (large) maximum limit to the number of times returned. If due to * this limit the list is incomplete, this is indicated by the last entry being * set to an invalid QDateTime value. If you need further values, call the * method again with a start time set to just after the last valid time returned. * * @param start inclusive start of interval * @param end inclusive end of interval * @return list of date/time values */ Q_REQUIRED_RESULT QList timesInInterval(const QDateTime &start, const QDateTime &end) const; /** Returns the start date/time of the earliest recurrence with a start date/time after * the specified date/time. * If the recurrence has no time, the next date after the specified date is returned. * @param preDateTime the date/time after which to find the recurrence. * @return start date/time of next recurrence (strictly later than the given * QDateTime), or invalid date if none. */ Q_REQUIRED_RESULT QDateTime getNextDateTime(const QDateTime &preDateTime) const; /** Returns the date and time of the last previous recurrence, before the specified date/time. * If a time later than 00:00:00 is specified and the recurrence has no time, 00:00:00 on * the specified date is returned if that date recurs. * * @param afterDateTime the date/time before which to find the recurrence. * @return date/time of previous recurrence (strictly earlier than the given * QDateTime), or invalid date if none. */ Q_REQUIRED_RESULT QDateTime getPreviousDateTime(const QDateTime &afterDateTime) const; /** Returns frequency of recurrence, in terms of the recurrence time period type. */ Q_REQUIRED_RESULT int frequency() const; /** Sets the frequency of recurrence, in terms of the recurrence time period type. */ void setFrequency(int freq); /** * Returns -1 if the event recurs infinitely, 0 if the end date is set, * otherwise the total number of recurrences, including the initial occurrence. * 如果事件无限重复,则返回-1;如果设置了结束日期,则返回0;否则返回包括初始事件在内的重复总数。 */ Q_REQUIRED_RESULT int duration() const; /** Sets the total number of times the event is to occur, including both the * first and last. */ void setDuration(int duration); /** Returns the number of recurrences up to and including the date/time specified. * 返回指定日期/时间之前(包括指定日期/时间)的重复次数。 * @warning This function can be very time consuming - use it sparingly! */ Q_REQUIRED_RESULT int durationTo(const QDateTime &dt) const; /** Returns the number of recurrences up to and including the date specified. * @warning This function can be very time consuming - use it sparingly! */ Q_REQUIRED_RESULT int durationTo(const QDate &date) const; /** Returns the date/time of the last recurrence. * An invalid date is returned if the recurrence has no end. */ Q_REQUIRED_RESULT QDateTime endDateTime() const; /** Returns the date of the last recurrence. * 返回最后一次重复的日期。 * An invalid date is returned if the recurrence has no end. */ Q_REQUIRED_RESULT QDate endDate() const; /** Sets the date of the last recurrence. The end time is set to the recurrence start time. * @param endDate the ending date after which to stop recurring. If the * recurrence is not all-day, the end time will be 23:59.*/ void setEndDate(const QDate &endDate); /** Sets the date and time of the last recurrence. * @param endDateTime the ending date/time after which to stop recurring. */ void setEndDateTime(const QDateTime &endDateTime); /** Shift the times of the recurrence so that they appear at the same clock time as before but in a new time zone. The shift is done from a viewing time zone rather than from the actual recurrence time zone. For example, shifting a recurrence whose start time is 09:00 America/New York, using an old viewing time zone (@p oldSpec) of Europe/London, to a new time zone (@p newSpec) of Europe/Paris, will result in the time being shifted from 14:00 (which is the London time of the recurrence start) to 14:00 Paris time. @param oldZone the time specification which provides the clock times @param newZone the new time specification */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone); /** Sets an event to recur minutely. By default infinite recurrence is used. To set an end date use the method setEndDate and to set the number of occurrences use setDuration. This method clears all recurrence rules and adds one rule with a minutely recurrence. All other recurrence components (recurrence date/times, exception date/times and exception rules) are not modified. * @param freq the frequency to recur, e.g. 2 is every other minute */ void setMinutely(int freq); /** Sets an event to recur hourly. By default infinite recurrence is used. The minute of the recurrence is taken from the start date (if you need to change it, you will have to modify the defaultRRule's byMinute list manually. To set an end date use the method setEndDate and to set the number of occurrences use setDuration. This method clears all recurrence rules and adds one rule with a hourly recurrence. All other recurrence components (recurrence date/times, exception date/times and exception rules) are not modified. * @param freq the frequency to recur, e.g. 2 is every other hour */ void setHourly(int freq); /** Sets an event to recur daily. By default infinite recurrence is used. The minute and second of the recurrence is taken from the start date (if you need to change them, you will have to modify the defaultRRule's byMinute list manually. To set an end date use the method setEndDate and to set the number of occurrences use setDuration. This method clears all recurrence rules and adds one rule with a daily recurrence. All other recurrence components (recurrence date/times, exception date/times and exception rules) are not modified. * @param freq the frequency to recur, e.g. 2 is every other day */ void setDaily(int freq); /** Sets an event to recur weekly. By default infinite recurrence is used. To set an end date use the method setEndDate and to set the number of occurrences use setDuration. This method clears all recurrence rules and adds one rule with a weekly recurrence. All other recurrence components (recurrence date/times, exception date/times and exception rules) are not modified. * @param freq the frequency to recur, e.g. every other week etc. * @param weekStart the first day of the week (Monday=1 .. Sunday=7, default is Monday). */ void setWeekly(int freq, int weekStart = 1); /** Sets an event to recur weekly. By default infinite recurrence is used. To set an end date use the method setEndDate and to set the number of occurrences use setDuration. This method clears all recurrence rules and adds one rule with a weekly recurrence. All other recurrence components (recurrence date/times, exception date/times and exception rules) are not modified. * @param freq the frequency to recur, e.g. every other week etc. * @param days a 7 bit array indicating which days on which to recur (bit 0 = Monday). * @param weekStart the first day of the week (Monday=1 .. Sunday=7, default is Monday). */ void setWeekly(int freq, const QBitArray &days, int weekStart = 1); /** Adds days to the weekly day recurrence list. * @param days a 7 bit array indicating which days on which to recur (bit 0 = Monday). */ void addWeeklyDays(const QBitArray &days); /** Returns the first day of the week. Uses only the * first RRULE if present (i.e. a second RRULE as well as all EXRULES are * ignored! * @return Weekday of the first day of the week (Monday=1 .. Sunday=7) */ int weekStart() const; /** Returns week day mask (bit 0 = Monday). */ Q_REQUIRED_RESULT QBitArray days() const; // Emulate the old behavior /** Sets an event to recur monthly. By default infinite recurrence is used. The date of the monthly recurrence will be taken from the start date unless you explicitly add one or more recurrence dates with addMonthlyDate or a recurrence position in the month (e.g. first monday) using addMonthlyPos. To set an end date use the method setEndDate and to set the number of occurrences use setDuration. This method clears all recurrence rules and adds one rule with a monthly recurrence. All other recurrence components (recurrence date/times, exception date/times and exception rules) are not modified. * @param freq the frequency to recur, e.g. 3 for every third month. */ void setMonthly(int freq); /** Adds a position (e.g. first monday) to the monthly recurrence rule. * @param pos the position in the month for the recurrence, with valid * values being 1-5 (5 weeks max in a month). * @param days the days for the position to recur on (bit 0 = Monday). * Example: pos = 2, and bits 0 and 2 are set in days: * the rule is to repeat every 2nd Monday and Wednesday in the month. */ void addMonthlyPos(short pos, const QBitArray &days); void addMonthlyPos(short pos, ushort day); void setMonthlyPos(const QList &monthlyDays); /** Adds a date (e.g. the 15th of each month) to the monthly day * recurrence list. * @param day the date in the month to recur. */ void addMonthlyDate(short day); void setMonthlyDate(const QList &monthlyDays); /** Returns list of day positions in months. */ Q_REQUIRED_RESULT QList monthPositions() const; /** Returns list of day numbers of a month. */ // Emulate old behavior Q_REQUIRED_RESULT QList monthDays() const; /** Sets an event to recur yearly. By default, this will recur every year * on the same date (e.g. every year on April 15 if the start date was * April 15). * The day of the year can be specified with addYearlyDay(). * The day of the month can be specified with addYearlyByDate * If both a month and a day ar specified with addYearlyMonth and * addYearlyDay, the day is understood as day number within the month. * * A position (e.g. 3rd Sunday of year/month, or last Friday of year/month) * can be specified with addYearlyPos. Again, if a month is specified, * this position is understood as within that month, otherwise within * the year. * * By default infinite recurrence is used. To set an end date use the * method setEndDate and to set the number of occurrences use setDuration. This method clears all recurrence rules and adds one rule with a yearly recurrence. All other recurrence components (recurrence date/times, exception date/times and exception rules) are not modified. * @param freq the frequency to recur, e.g. 3 for every third year. */ void setYearly(int freq); /** Adds day number of year within a yearly recurrence. * By default infinite recurrence is used. To set an end date use the * method setEndDate and to set the number of occurrences use setDuration. * @param day the day of the year for the event. E.g. if day is 60, this * means Feb 29 in leap years and March 1 in non-leap years. */ void addYearlyDay(int day); void setYearlyDay(const QList &days); /** Adds date within a yearly recurrence. The month(s) for the recurrence * can be specified with addYearlyMonth(), otherwise the month of the * start date is used. * * By default infinite recurrence is used. To set an end date use the * method setEndDate and to set the number of occurrences use setDuration. * @param date the day of the month for the event */ void addYearlyDate(int date); void setYearlyDate(const QList &dates); /** Adds month in yearly recurrence. You can specify specific day numbers * within the months (by calling addYearlyDate()) or specific day positions * within the month (by calling addYearlyPos). * @param _rNum the month in which the event shall recur. */ void addYearlyMonth(short _rNum); void setYearlyMonth(const QList &months); /** Adds position within month/year within a yearly recurrence. If months * are specified (via addYearlyMonth()), the parameters are understood as * position within these months, otherwise within the year. * * 在每年重复的月/年内增加头寸。如果指定了月份 (通过添加年度月份 ()),则参数应理解为这些月份内的位置,否则应理解为年份内的位置。 * * By default infinite recurrence is used. * To set an end date use the method setEndDate and to set the number * of occurrences use setDuration. * @param pos the position in the month/year for the recurrence, with valid * values being 1 to 53 and -1 to -53 (53 weeks max in a year). * @param days the days for the position to recur on (bit 0 = Monday). * Example: pos = 2, and bits 0 and 2 are set in days * If months are specified (via addYearlyMonth), e.g. March, the rule is * to repeat every year on the 2nd Monday and Wednesday of March. * If no months are specified, the file is to repeat every year on the * 2nd Monday and Wednesday of the year. */ void addYearlyPos(short pos, const QBitArray &days); void setYearlyPos(const QList &days); /** Returns the day numbers within a yearly recurrence. * @return the days of the year for the event. E.g. if the list contains * 60, this means the recurrence happens on day 60 of the year, i.e. * on Feb 29 in leap years and March 1 in non-leap years. */ Q_REQUIRED_RESULT QList yearDays() const; /** Returns the dates within a yearly recurrence. * @return the days of the month for the event. E.g. if the list contains * 13, this means the recurrence happens on the 13th of the month. * The months for the recurrence can be obtained through * yearlyMonths(). If this list is empty, the month of the start * date is used. */ Q_REQUIRED_RESULT QList yearDates() const; /** Returns the months within a yearly recurrence. * @return the months for the event. E.g. if the list contains * 11, this means the recurrence happens in November. * The days for the recurrence can be obtained either through * yearDates() if they are given as dates within the month or * through yearlyPositions() if they are given as positions within the * month. If none is specified, the date of the start date is used. */ Q_REQUIRED_RESULT QList yearMonths() const; /** Returns the positions within a yearly recurrence. * @return the positions for the event, either within a month (if months * are set through addYearlyMonth()) or within the year. * E.g. if the list contains {Pos=3, Day=5}, this means the third * friday. If a month is set this position is understoodas third * Friday in the given months, otherwise as third Friday of the * year. */ /** Returns list of day positions in months, for a recursYearlyPos recurrence rule. */ Q_REQUIRED_RESULT QList yearPositions() const; /** Upper date limit for recurrences */ static const QDate MAX_DATE; /** Debug output. */ void dump() const; // RRULE Q_REQUIRED_RESULT RecurrenceRule::List rRules() const; /** Add a recurrence rule to the recurrence. 将重复规则添加到重复中。 @param rrule the recurrence rule to add */ void addRRule(RecurrenceRule *rrule); /** Remove a recurrence rule from the recurrence. @p rrule is not deleted; it is the responsibility of the caller to ensure that it is deleted. @param rrule the recurrence rule to remove */ void removeRRule(RecurrenceRule *rrule); /** Remove a recurrence rule from the recurrence and delete it. @param rrule the recurrence rule to remove */ void deleteRRule(RecurrenceRule *rrule); // EXRULE Q_REQUIRED_RESULT RecurrenceRule::List exRules() const; /** Add an exception rule to the recurrence. 向重复添加例外规则。 @param exrule the exception rule to add */ void addExRule(RecurrenceRule *exrule); /** Remove an exception rule from the recurrence. @p exrule is not deleted; it is the responsibility of the caller to ensure that it is deleted. @param exrule the exception rule to remove */ void removeExRule(RecurrenceRule *exrule); /** Remove an exception rule from the recurrence and delete it. @param exrule the exception rule to remove */ void deleteExRule(RecurrenceRule *exrule); // RDATE Q_REQUIRED_RESULT QList rDateTimes() const; Q_REQUIRED_RESULT DateList rDates() const; void setRDateTimes(const QList &rdates); void setRDates(const DateList &rdates); void addRDateTime(const QDateTime &rdate); void addRDate(const QDate &rdate); // ExDATE Q_REQUIRED_RESULT QList exDateTimes() const; Q_REQUIRED_RESULT DateList exDates() const; void setExDateTimes(const QList &exdates); void setExDates(const DateList &exdates); void addExDateTime(const QDateTime &exdate); void addExDate(const QDate &exdate); RecurrenceRule *defaultRRule(bool create = false) const; RecurrenceRule *defaultRRuleConst() const; void updated(); /** Installs an observer. Whenever some setting of this recurrence object is changed, the recurrenceUpdated( Recurrence* ) method of each observer will be called to inform it of changes. @param observer the Recurrence::Observer-derived object, which will be installed as an observer of this object. */ void addObserver(RecurrenceObserver *observer); /** Removes an observer that was added with addObserver. If the given object was not an observer, it does nothing. @param observer the Recurrence::Observer-derived object to be removed from the list of observers of this object. */ void removeObserver(RecurrenceObserver *observer); void recurrenceChanged(RecurrenceRule *) override; protected: RecurrenceRule *setNewRecurrenceType(RecurrenceRule::PeriodType type, int freq); private: //@cond PRIVATE class Private; Private *const d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, KCalendarCore::Recurrence *); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, KCalendarCore::Recurrence *); }; /** * Recurrence serializer and deserializer. * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, KCalendarCore::Recurrence *); Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, KCalendarCore::Recurrence *); } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/recurrencehelper_p.h000066400000000000000000000025051473346337000253650ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2019 Volker Krause SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_RECURRENCEHELPER_P_H #define KCALCORE_RECURRENCEHELPER_P_H #include namespace KCalendarCore { template inline void sortAndRemoveDuplicates(T &container) { std::sort(container.begin(), container.end()); container.erase(std::unique(container.begin(), container.end()), container.end()); } template inline void inplaceSetDifference(T &set1, const T &set2) { auto beginIt = set1.begin(); for (const auto &elem : set2) { const auto it = std::lower_bound(beginIt, set1.end(), elem); if (it != set1.end() && *it == elem) { beginIt = set1.erase(it); } } } template inline void setInsert(Container &c, const Value &v) { const auto it = std::lower_bound(c.begin(), c.end(), v); if (it == c.end() || *it != v) { c.insert(it, v); } } template inline It strictLowerBound(It begin, It end, const Value &v) { const auto it = std::lower_bound(begin, end, v); if (it == end || (*it) >= v) { return it == begin ? end : (it - 1); } return it; } } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/recurrencerule.cpp000066400000000000000000002141541473346337000250760ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2005 Reinhold Kainhofer SPDX-FileCopyrightText: 2006-2008 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ #include "recurrencerule.h" #include "recurrencehelper_p.h" #include "utils_p.h" #include #include #include #include #include using namespace KCalendarCore; // Maximum number of intervals to process //要处理的最大间隔数 const int LOOP_LIMIT = 10000; #ifndef NDEBUG static QString dumpTime(const QDateTime &dt, bool allDay); // for debugging #endif /*========================================================================= = = = IMPORTANT CODING NOTE: = = = = Recurrence handling code is time critical, especially for sub-daily = = recurrences. For example, if getNextDate() is called repeatedly to = = check all consecutive occurrences over a few years, on a slow machine = = this could take many seconds to complete in the worst case. Simple = = sub-daily recurrences are optimised by use of mTimedRepetition. = = = ==========================================================================*/ /************************************************************************** * DateHelper * **************************************************************************/ //@cond PRIVATE class DateHelper { public: #ifndef NDEBUG static QString dayName(short day); #endif static QDate getNthWeek(int year, int weeknumber, short weekstart = 1); static int weekNumbersInYear(int year, short weekstart = 1); static int getWeekNumber(const QDate &date, short weekstart, int *year = nullptr); static int getWeekNumberNeg(const QDate &date, short weekstart, int *year = nullptr); // Convert to QDate, allowing for day < 0. // month and day must be non-zero. static QDate getDate(int year, int month, int day) { if (day >= 0) { return QDate(year, month, day); } else { if (++month > 12) { month = 1; ++year; } return QDate(year, month, 1).addDays(day); } } }; #ifndef NDEBUG // TODO: Move to a general library / class, as we need the same in the iCal // generator and in the xcal format QString DateHelper::dayName(short day) { switch (day) { case 1: return QStringLiteral("MO"); case 2: return QStringLiteral("TU"); case 3: return QStringLiteral("WE"); case 4: return QStringLiteral("TH"); case 5: return QStringLiteral("FR"); case 6: return QStringLiteral("SA"); case 7: return QStringLiteral("SU"); default: return QStringLiteral("??"); } } #endif QDate DateHelper::getNthWeek(int year, int weeknumber, short weekstart) { if (weeknumber == 0) { return QDate(); } // Adjust this to the first day of week #1 of the year and add 7*weekno days. QDate dt(year, 1, 4); // Week #1 is the week that contains Jan 4 int adjust = -(7 + dt.dayOfWeek() - weekstart) % 7; if (weeknumber > 0) { dt = dt.addDays(7 * (weeknumber - 1) + adjust); } else if (weeknumber < 0) { dt = dt.addYears(1); dt = dt.addDays(7 * weeknumber + adjust); } return dt; } int DateHelper::getWeekNumber(const QDate &date, short weekstart, int *year) { int y = date.year(); QDate dt(y, 1, 4); // <= definitely in week #1 dt = dt.addDays(-(7 + dt.dayOfWeek() - weekstart) % 7); // begin of week #1 qint64 daysto = dt.daysTo(date); if (daysto < 0) { // in first week of year --y; dt = QDate(y, 1, 4); dt = dt.addDays(-(7 + dt.dayOfWeek() - weekstart) % 7); // begin of week #1 daysto = dt.daysTo(date); } else if (daysto > 355) { // near the end of the year - check if it's next year QDate dtn(y + 1, 1, 4); // <= definitely first week of next year dtn = dtn.addDays(-(7 + dtn.dayOfWeek() - weekstart) % 7); qint64 dayston = dtn.daysTo(date); if (dayston >= 0) { // in first week of next year; ++y; daysto = dayston; } } if (year) { *year = y; } return daysto / 7 + 1; } int DateHelper::weekNumbersInYear(int year, short weekstart) { QDate dt(year, 1, weekstart); QDate dt1(year + 1, 1, weekstart); return dt.daysTo(dt1) / 7; } // Week number from the end of the year int DateHelper::getWeekNumberNeg(const QDate &date, short weekstart, int *year) { int weekpos = getWeekNumber(date, weekstart, year); return weekNumbersInYear(*year, weekstart) - weekpos - 1; } //@endcond /************************************************************************** * WDayPos * **************************************************************************/ bool RecurrenceRule::WDayPos::operator==(const RecurrenceRule::WDayPos &pos2) const { return mDay == pos2.mDay && mPos == pos2.mPos; } bool RecurrenceRule::WDayPos::operator!=(const RecurrenceRule::WDayPos &pos2) const { return !operator==(pos2); } /************************************************************************** * Constraint * **************************************************************************/ //@cond PRIVATE class Constraint { public: typedef QVector List; Constraint() { } explicit Constraint(const QTimeZone &, int wkst = 1); Constraint(const QDateTime &dt, RecurrenceRule::PeriodType type, int wkst); void clear(); void setYear(int n) { year = n; useCachedDt = false; } void setMonth(int n) { month = n; useCachedDt = false; } void setDay(int n) { day = n; useCachedDt = false; } void setHour(int n) { hour = n; useCachedDt = false; } void setMinute(int n) { minute = n; useCachedDt = false; } void setSecond(int n) { second = n; useCachedDt = false; } void setWeekday(int n) { weekday = n; useCachedDt = false; } void setWeekdaynr(int n) { weekdaynr = n; useCachedDt = false; } void setWeeknumber(int n) { weeknumber = n; useCachedDt = false; } void setYearday(int n) { yearday = n; useCachedDt = false; } void setWeekstart(int n) { weekstart = n; useCachedDt = false; } int year; // 0 means unspecified int month; // 0 means unspecified int day; // 0 means unspecified int hour; // -1 means unspecified int minute; // -1 means unspecified int second; // -1 means unspecified int weekday; // 0 means unspecified int weekdaynr; // index of weekday in month/year (0=unspecified) int weeknumber; // 0 means unspecified int yearday; // 0 means unspecified int weekstart; // first day of week (1=monday, 7=sunday, 0=unspec.) QTimeZone timeZone; // time zone etc. to use bool readDateTime(const QDateTime &dt, RecurrenceRule::PeriodType type); bool matches(const QDate &dt, RecurrenceRule::PeriodType type) const; bool matches(const QDateTime &dt, RecurrenceRule::PeriodType type) const; bool merge(const Constraint &interval); bool isConsistent(RecurrenceRule::PeriodType period) const; bool increase(RecurrenceRule::PeriodType type, int freq); QDateTime intervalDateTime(RecurrenceRule::PeriodType type) const; QList dateTimes(RecurrenceRule::PeriodType type) const; void appendDateTime(const QDate &date, const QTime &time, QList &list) const; void dump() const; private: mutable bool useCachedDt; mutable QDateTime cachedDt; }; Constraint::Constraint(const QTimeZone &timeZone, int wkst) : weekstart(wkst) , timeZone(timeZone) { clear(); } Constraint::Constraint(const QDateTime &dt, RecurrenceRule::PeriodType type, int wkst) : weekstart(wkst) , timeZone(dt.timeZone()) { clear(); readDateTime(dt, type); } void Constraint::clear() { year = 0; month = 0; day = 0; hour = -1; minute = -1; second = -1; weekday = 0; weekdaynr = 0; weeknumber = 0; yearday = 0; useCachedDt = false; } bool Constraint::matches(const QDate &dt, RecurrenceRule::PeriodType type) const { // If the event recurs in week 53 or 1, the day might not belong to the same // year as the week it is in. E.g. Jan 1, 2005 is in week 53 of year 2004. // So we can't simply check the year in that case! if (weeknumber == 0) { if (year > 0 && year != dt.year()) { return false; } } else { int y = 0; if (weeknumber > 0 && weeknumber != DateHelper::getWeekNumber(dt, weekstart, &y)) { return false; } if (weeknumber < 0 && weeknumber != DateHelper::getWeekNumberNeg(dt, weekstart, &y)) { return false; } if (year > 0 && year != y) { return false; } } if (month > 0 && month != dt.month()) { return false; } if (day > 0 && day != dt.day()) { return false; } if (day < 0 && dt.day() != (dt.daysInMonth() + day + 1)) { return false; } if (weekday > 0) { if (weekday != dt.dayOfWeek()) { return false; } if (weekdaynr != 0) { // If it's a yearly recurrence and a month is given, the position is // still in the month, not in the year. if ((type == RecurrenceRule::rMonthly) || (type == RecurrenceRule::rYearly && month > 0)) { // Monthly if (weekdaynr > 0 && weekdaynr != (dt.day() - 1) / 7 + 1) { return false; } if (weekdaynr < 0 && weekdaynr != -((dt.daysInMonth() - dt.day()) / 7 + 1)) { return false; } } else { // Yearly if (weekdaynr > 0 && weekdaynr != (dt.dayOfYear() - 1) / 7 + 1) { return false; } if (weekdaynr < 0 && weekdaynr != -((dt.daysInYear() - dt.dayOfYear()) / 7 + 1)) { return false; } } } } if (yearday > 0 && yearday != dt.dayOfYear()) { return false; } if (yearday < 0 && yearday != dt.daysInYear() - dt.dayOfYear() + 1) { return false; } return true; } /* Check for a match with the specified date/time. * The date/time's time specification must correspond with that of the start date/time. */ bool Constraint::matches(const QDateTime &dt, RecurrenceRule::PeriodType type) const { if ((hour >= 0 && hour != dt.time().hour()) || (minute >= 0 && minute != dt.time().minute()) || (second >= 0 && second != dt.time().second()) || !matches(dt.date(), type)) { return false; } return true; } bool Constraint::isConsistent(RecurrenceRule::PeriodType /*period*/) const { // TODO: Check for consistency, e.g. byyearday=3 and bymonth=10 return true; } // Return a date/time set to the constraint values, but with those parts less // significant than the given period type set to 1 (for dates) or 0 (for times). QDateTime Constraint::intervalDateTime(RecurrenceRule::PeriodType type) const { if (useCachedDt) { return cachedDt; } QDate d; QTime t(0, 0, 0); bool subdaily = true; switch (type) { case RecurrenceRule::rSecondly: t.setHMS(hour, minute, second); break; case RecurrenceRule::rMinutely: t.setHMS(hour, minute, 0); break; case RecurrenceRule::rHourly: t.setHMS(hour, 0, 0); break; case RecurrenceRule::rDaily: break; case RecurrenceRule::rWeekly: d = DateHelper::getNthWeek(year, weeknumber, weekstart); subdaily = false; break; case RecurrenceRule::rMonthly: d.setDate(year, month, 1); subdaily = false; break; case RecurrenceRule::rYearly: d.setDate(year, 1, 1); subdaily = false; break; default: break; } if (subdaily) { d = DateHelper::getDate(year, (month > 0) ? month : 1, day ? day : 1); } cachedDt = QDateTime(d, t, timeZone); useCachedDt = true; return cachedDt; } bool Constraint::merge(const Constraint &interval) { // clang-format off #define mergeConstraint( name, cmparison ) \ if ( interval.name cmparison ) { \ if ( !( name cmparison ) ) { \ name = interval.name; \ } else if ( name != interval.name ) { \ return false;\ } \ } // clang-format on useCachedDt = false; mergeConstraint(year, > 0); mergeConstraint(month, > 0); mergeConstraint(day, != 0); mergeConstraint(hour, >= 0); mergeConstraint(minute, >= 0); mergeConstraint(second, >= 0); mergeConstraint(weekday, != 0); mergeConstraint(weekdaynr, != 0); mergeConstraint(weeknumber, != 0); mergeConstraint(yearday, != 0); #undef mergeConstraint return true; } // Y M D | H Mn S | WD #WD | WN | YD // required: // x | x x x | | | // 0) Trivial: Exact date given, maybe other restrictions // x x x | x x x | | | // 1) Easy case: no weekly restrictions -> at most a loop through possible dates // x + + | x x x | - - | - | - // 2) Year day is given -> date known // x | x x x | | | + // 3) week number is given -> loop through all days of that week. Further // restrictions will be applied in the end, when we check all dates for // consistency with the constraints // x | x x x | | + | (-) // 4) week day is specified -> // x | x x x | x ? | (-)| (-) // 5) All possiblecases have already been treated, so this must be an error! QList Constraint::dateTimes(RecurrenceRule::PeriodType type) const { QList result; if (!isConsistent(type)) { return result; } // TODO_Recurrence: Handle all-day QTime tm(hour, minute, second); bool done = false; if (day && month > 0) { appendDateTime(DateHelper::getDate(year, month, day), tm, result); done = true; } if (!done && weekday == 0 && weeknumber == 0 && yearday == 0) { // Easy case: date is given, not restrictions by week or yearday uint mstart = (month > 0) ? month : 1; uint mend = (month <= 0) ? 12 : month; for (uint m = mstart; m <= mend; ++m) { uint dstart, dend; if (day > 0) { dstart = dend = day; } else if (day < 0) { QDate date(year, month, 1); dstart = dend = date.daysInMonth() + day + 1; } else { QDate date(year, month, 1); dstart = 1; dend = date.daysInMonth(); } uint d = dstart; for (QDate dt(year, m, dstart);; dt = dt.addDays(1)) { appendDateTime(dt, tm, result); if (++d > dend) { break; } } } done = true; } // Else: At least one of the week / yearday restrictions was given... // If we have a yearday (and of course a year), we know the exact date if (!done && yearday != 0) { // yearday < 0 means from end of year, so we'll need Jan 1 of the next year QDate d(year + ((yearday > 0) ? 0 : 1), 1, 1); d = d.addDays(yearday - ((yearday > 0) ? 1 : 0)); appendDateTime(d, tm, result); done = true; } // Else: If we have a weeknumber, we have at most 7 possible dates, loop through them if (!done && weeknumber != 0) { QDate wst(DateHelper::getNthWeek(year, weeknumber, weekstart)); if (weekday != 0) { wst = wst.addDays((7 + weekday - weekstart) % 7); appendDateTime(wst, tm, result); } else { for (int i = 0; i < 7; ++i) { appendDateTime(wst, tm, result); wst = wst.addDays(1); } } done = true; } // weekday is given if (!done && weekday != 0) { QDate dt(year, 1, 1); // If type == yearly and month is given, pos is still in month not year! // TODO_Recurrence: Correct handling of n-th BYDAY... int maxloop = 53; bool inMonth = (type == RecurrenceRule::rMonthly) || (type == RecurrenceRule::rYearly && month > 0); if (inMonth && month > 0) { dt = QDate(year, month, 1); maxloop = 5; } if (weekdaynr < 0) { // From end of period (month, year) => relative to begin of next period if (inMonth) { dt = dt.addMonths(1); } else { dt = dt.addYears(1); } } int adj = (7 + weekday - dt.dayOfWeek()) % 7; dt = dt.addDays(adj); // correct first weekday of the period if (weekdaynr > 0) { dt = dt.addDays((weekdaynr - 1) * 7); appendDateTime(dt, tm, result); } else if (weekdaynr < 0) { dt = dt.addDays(weekdaynr * 7); appendDateTime(dt, tm, result); } else { // loop through all possible weeks, non-matching will be filtered later for (int i = 0; i < maxloop; ++i) { appendDateTime(dt, tm, result); dt = dt.addDays(7); } } } // weekday != 0 // Only use those times that really match all other constraints, too QList valid; for (int i = 0, iend = result.count(); i < iend; ++i) { if (matches(result[i], type)) { valid.append(result[i]); } } // Don't sort it here, would be unnecessary work. The results from all // constraints will be merged to one big list of the interval. Sort that one! return valid; } void Constraint::appendDateTime(const QDate &date, const QTime &time, QList &list) const { QDateTime dt(date, time, timeZone); if (dt.isValid()) { list.append(dt); } } bool Constraint::increase(RecurrenceRule::PeriodType type, int freq) { // convert the first day of the interval to QDateTime intervalDateTime(type); // Now add the intervals switch (type) { case RecurrenceRule::rSecondly: cachedDt = cachedDt.addSecs(freq); break; case RecurrenceRule::rMinutely: cachedDt = cachedDt.addSecs(60 * freq); break; case RecurrenceRule::rHourly: cachedDt = cachedDt.addSecs(3600 * freq); break; case RecurrenceRule::rDaily: cachedDt = cachedDt.addDays(freq); break; case RecurrenceRule::rWeekly: cachedDt = cachedDt.addDays(7 * freq); break; case RecurrenceRule::rMonthly: cachedDt = cachedDt.addMonths(freq); break; case RecurrenceRule::rYearly: cachedDt = cachedDt.addYears(freq); break; default: break; } // Convert back from QDateTime to the Constraint class readDateTime(cachedDt, type); useCachedDt = true; // readDateTime() resets this return true; } // Set the constraint's value appropriate to 'type', to the value contained in a date/time. bool Constraint::readDateTime(const QDateTime &dt, RecurrenceRule::PeriodType type) { switch (type) { // Really fall through! Only weekly needs to be treated differently! case RecurrenceRule::rSecondly: second = dt.time().second(); Q_FALLTHROUGH(); case RecurrenceRule::rMinutely: minute = dt.time().minute(); Q_FALLTHROUGH(); case RecurrenceRule::rHourly: hour = dt.time().hour(); Q_FALLTHROUGH(); case RecurrenceRule::rDaily: day = dt.date().day(); Q_FALLTHROUGH(); case RecurrenceRule::rMonthly: month = dt.date().month(); Q_FALLTHROUGH(); case RecurrenceRule::rYearly: year = dt.date().year(); break; case RecurrenceRule::rWeekly: // Determine start day of the current week, calculate the week number from that weeknumber = DateHelper::getWeekNumber(dt.date(), weekstart, &year); break; default: break; } useCachedDt = false; return true; } //@endcond /************************************************************************** * RecurrenceRule::Private * **************************************************************************/ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::RecurrenceRule::Private { public: Private(RecurrenceRule *parent) : mParent(parent) , mPeriod(rNone) , mFrequency(0) , mDuration(-1) , mWeekStart(1) , mIsReadOnly(false) , mAllDay(false) { setDirty(); } Private(RecurrenceRule *parent, const Private &p); Private &operator=(const Private &other); bool operator==(const Private &other) const; void clear(); void setDirty(); void buildConstraints(); bool buildCache() const; Constraint getNextValidDateInterval(const QDateTime &preDate, PeriodType type) const; Constraint getPreviousValidDateInterval(const QDateTime &afterDate, PeriodType type) const; QList datesForInterval(const Constraint &interval, PeriodType type) const; RecurrenceRule *mParent; QString mRRule; // RRULE string PeriodType mPeriod; QDateTime mDateStart; // start of recurrence (but mDateStart is not an occurrence // unless it matches the rule) uint mFrequency; /** how often it recurs: < 0 means no end date, < 0表示没有结束日期, 0 means an explicit end date, 0表示明确的结束日期, positive values give the number of occurrences */ int mDuration; QDateTime mDateEnd; QList mBySeconds; // values: second 0-59 QList mByMinutes; // values: minute 0-59 QList mByHours; // values: hour 0-23 QList mByDays; // n-th weekday of the month or year QList mByMonthDays; // values: day -31 to -1 and 1-31 QList mByYearDays; // values: day -366 to -1 and 1-366 QList mByWeekNumbers; // values: week -53 to -1 and 1-53 QList mByMonths; // values: month 1-12 QList mBySetPos; // values: position -366 to -1 and 1-366 short mWeekStart; // first day of the week (1=Monday, 7=Sunday) 一周的第一天 Constraint::List mConstraints; QList mObservers; // Cache for duration mutable QList mCachedDates; mutable QDateTime mCachedDateEnd; mutable QDateTime mCachedLastDate; // when mCachedDateEnd invalid, last date checked 当mCachedDateEnd无效时,检查最后日期 mutable bool mCached; bool mIsReadOnly; bool mAllDay; bool mNoByRules; // no BySeconds, ByMinutes, ... rules exist uint mTimedRepetition; // repeats at a regular number of seconds interval, or 0 }; RecurrenceRule::Private::Private(RecurrenceRule *parent, const Private &p) : mParent(parent) , mRRule(p.mRRule) , mPeriod(p.mPeriod) , mDateStart(p.mDateStart) , mFrequency(p.mFrequency) , mDuration(p.mDuration) , mDateEnd(p.mDateEnd) , mBySeconds(p.mBySeconds) , mByMinutes(p.mByMinutes) , mByHours(p.mByHours) , mByDays(p.mByDays) , mByMonthDays(p.mByMonthDays) , mByYearDays(p.mByYearDays) , mByWeekNumbers(p.mByWeekNumbers) , mByMonths(p.mByMonths) , mBySetPos(p.mBySetPos) , mWeekStart(p.mWeekStart) , mIsReadOnly(p.mIsReadOnly) , mAllDay(p.mAllDay) , mNoByRules(p.mNoByRules) { setDirty(); } RecurrenceRule::Private &RecurrenceRule::Private::operator=(const Private &p) { // check for self assignment if (&p == this) { return *this; } mRRule = p.mRRule; mPeriod = p.mPeriod; mDateStart = p.mDateStart; mFrequency = p.mFrequency; mDuration = p.mDuration; mDateEnd = p.mDateEnd; mBySeconds = p.mBySeconds; mByMinutes = p.mByMinutes; mByHours = p.mByHours; mByDays = p.mByDays; mByMonthDays = p.mByMonthDays; mByYearDays = p.mByYearDays; mByWeekNumbers = p.mByWeekNumbers; mByMonths = p.mByMonths; mBySetPos = p.mBySetPos; mWeekStart = p.mWeekStart; mIsReadOnly = p.mIsReadOnly; mAllDay = p.mAllDay; mNoByRules = p.mNoByRules; setDirty(); return *this; } bool RecurrenceRule::Private::operator==(const Private &r) const { return mPeriod == r.mPeriod && ((mDateStart == r.mDateStart) || (!mDateStart.isValid() && !r.mDateStart.isValid())) && mDuration == r.mDuration && ((mDateEnd == r.mDateEnd) || (!mDateEnd.isValid() && !r.mDateEnd.isValid())) && mFrequency == r.mFrequency && mIsReadOnly == r.mIsReadOnly && mAllDay == r.mAllDay && mBySeconds == r.mBySeconds && mByMinutes == r.mByMinutes && mByHours == r.mByHours && mByDays == r.mByDays && mByMonthDays == r.mByMonthDays && mByYearDays == r.mByYearDays && mByWeekNumbers == r.mByWeekNumbers && mByMonths == r.mByMonths && mBySetPos == r.mBySetPos && mWeekStart == r.mWeekStart && mNoByRules == r.mNoByRules; } void RecurrenceRule::Private::clear() { if (mIsReadOnly) { return; } mPeriod = rNone; mBySeconds.clear(); mByMinutes.clear(); mByHours.clear(); mByDays.clear(); mByMonthDays.clear(); mByYearDays.clear(); mByWeekNumbers.clear(); mByMonths.clear(); mBySetPos.clear(); mWeekStart = 1; mNoByRules = false; setDirty(); } void RecurrenceRule::Private::setDirty() { buildConstraints(); mCached = false; mCachedDates.clear(); for (int i = 0, iend = mObservers.count(); i < iend; ++i) { if (mObservers[i]) { mObservers[i]->recurrenceChanged(mParent); } } } //@endcond /************************************************************************** * RecurrenceRule * **************************************************************************/ RecurrenceRule::RecurrenceRule() : d(new Private(this)) { } RecurrenceRule::RecurrenceRule(const RecurrenceRule &r) : d(new Private(this, *r.d)) { } RecurrenceRule::~RecurrenceRule() { delete d; } bool RecurrenceRule::operator==(const RecurrenceRule &r) const { return *d == *r.d; } RecurrenceRule &RecurrenceRule::operator=(const RecurrenceRule &r) { // check for self assignment if (&r == this) { return *this; } *d = *r.d; return *this; } void RecurrenceRule::addObserver(RuleObserver *observer) { if (!d->mObservers.contains(observer)) { d->mObservers.append(observer); } } void RecurrenceRule::removeObserver(RuleObserver *observer) { d->mObservers.removeAll(observer); } void RecurrenceRule::setRecurrenceType(PeriodType period) { if (isReadOnly()) { return; } d->mPeriod = period; d->setDirty(); } QDateTime RecurrenceRule::endDt(bool *result) const { if (result) { *result = false; } if (d->mPeriod == rNone) { return QDateTime(); } if (d->mDuration < 0) { return QDateTime(); } if (d->mDuration == 0) { if (result) { *result = true; } return d->mDateEnd; } // N occurrences. Check if we have a full cache. If so, return the cached end date. if (!d->mCached) { // If not enough occurrences can be found (i.e. inconsistent constraints) if (!d->buildCache()) { return QDateTime(); } } if (result) { *result = true; } return d->mCachedDateEnd; } void RecurrenceRule::setEndDt(const QDateTime &dateTime) { if (isReadOnly()) { return; } d->mDateEnd = dateTime; if (d->mDateEnd.isValid()) { d->mDuration = 0; // set to 0 because there is an end date/time } d->setDirty(); } void RecurrenceRule::setDuration(int duration) { if (isReadOnly()) { return; } d->mDuration = duration; d->setDirty(); } void RecurrenceRule::setAllDay(bool allDay) { if (isReadOnly()) { return; } d->mAllDay = allDay; d->setDirty(); } void RecurrenceRule::clear() { d->clear(); } void RecurrenceRule::setDirty() { d->setDirty(); } void RecurrenceRule::setStartDt(const QDateTime &start) { if (isReadOnly()) { return; } d->mDateStart = start; d->setDirty(); } void RecurrenceRule::setFrequency(int freq) { if (isReadOnly() || freq <= 0) { return; } d->mFrequency = freq; d->setDirty(); } void RecurrenceRule::setBySeconds(const QList &bySeconds) { if (isReadOnly()) { return; } d->mBySeconds = bySeconds; d->setDirty(); } void RecurrenceRule::setByMinutes(const QList &byMinutes) { if (isReadOnly()) { return; } d->mByMinutes = byMinutes; d->setDirty(); } void RecurrenceRule::setByHours(const QList &byHours) { if (isReadOnly()) { return; } d->mByHours = byHours; d->setDirty(); } void RecurrenceRule::setByDays(const QList &byDays) { if (isReadOnly()) { return; } d->mByDays = byDays; d->setDirty(); } void RecurrenceRule::setByMonthDays(const QList &byMonthDays) { if (isReadOnly()) { return; } d->mByMonthDays = byMonthDays; d->setDirty(); } void RecurrenceRule::setByYearDays(const QList &byYearDays) { if (isReadOnly()) { return; } d->mByYearDays = byYearDays; d->setDirty(); } void RecurrenceRule::setByWeekNumbers(const QList &byWeekNumbers) { if (isReadOnly()) { return; } d->mByWeekNumbers = byWeekNumbers; d->setDirty(); } void RecurrenceRule::setByMonths(const QList &byMonths) { if (isReadOnly()) { return; } d->mByMonths = byMonths; d->setDirty(); } void RecurrenceRule::setBySetPos(const QList &bySetPos) { if (isReadOnly()) { return; } d->mBySetPos = bySetPos; d->setDirty(); } void RecurrenceRule::setWeekStart(short weekStart) { if (isReadOnly()) { return; } d->mWeekStart = weekStart; d->setDirty(); } void RecurrenceRule::shiftTimes(const QTimeZone &oldTz, const QTimeZone &newTz) { d->mDateStart = d->mDateStart.toTimeZone(oldTz); d->mDateStart.setTimeZone(newTz); if (d->mDuration == 0) { d->mDateEnd = d->mDateEnd.toTimeZone(oldTz); d->mDateEnd.setTimeZone(newTz); } d->setDirty(); } // Taken from recurrence.cpp // int RecurrenceRule::maxIterations() const // { // /* Find the maximum number of iterations which may be needed to reach the // * next actual occurrence of a monthly or yearly recurrence. // * More than one iteration may be needed if, for example, it's the 29th February, // * the 31st day of the month or the 5th Monday, and the month being checked is // * February or a 30-day month. // * The following recurrences may never occur: // * - For rMonthlyDay: if the frequency is a whole number of years. // * - For rMonthlyPos: if the frequency is an even whole number of years. // * - For rYearlyDay, rYearlyMonth: if the frequency is a multiple of 4 years. // * - For rYearlyPos: if the frequency is an even number of years. // * The maximum number of iterations needed, assuming that it does actually occur, // * was found empirically. // */ // switch (recurs) { // case rMonthlyDay: // return (rFreq % 12) ? 6 : 8; // // case rMonthlyPos: // if (rFreq % 12 == 0) { // // Some of these frequencies may never occur // return (rFreq % 84 == 0) ? 364 // frequency = multiple of 7 years // : (rFreq % 48 == 0) ? 7 // frequency = multiple of 4 years // : (rFreq % 24 == 0) ? 14 : 28; // frequency = multiple of 2 or 1 year // } // // All other frequencies will occur sometime // if (rFreq > 120) // return 364; // frequencies of > 10 years will hit the date limit first // switch (rFreq) { // case 23: return 50; // case 46: return 38; // case 56: return 138; // case 66: return 36; // case 89: return 54; // case 112: return 253; // default: return 25; // most frequencies will need < 25 iterations // } // // case rYearlyMonth: // case rYearlyDay: // return 8; // only 29th Feb or day 366 will need more than one iteration // // case rYearlyPos: // if (rFreq % 7 == 0) // return 364; // frequencies of a multiple of 7 years will hit the date limit first // if (rFreq % 2 == 0) { // // Some of these frequencies may never occur // return (rFreq % 4 == 0) ? 7 : 14; // frequency = even number of years // } // return 28; // } // return 1; // } //@cond PRIVATE void RecurrenceRule::Private::buildConstraints() { mTimedRepetition = 0; mNoByRules = mBySetPos.isEmpty(); mConstraints.clear(); Constraint con(mDateStart.timeZone()); if (mWeekStart > 0) { con.setWeekstart(mWeekStart); } mConstraints.append(con); int c, cend; int i, iend; Constraint::List tmp; // clang-format off #define intConstraint( list, setElement ) \ if ( !list.isEmpty() ) { \ mNoByRules = false; \ iend = list.count(); \ if ( iend == 1 ) { \ for ( c = 0, cend = mConstraints.count(); c < cend; ++c ) { \ mConstraints[c].setElement( list[0] ); \ } \ } else { \ tmp.reserve(mConstraints.count() * iend); \ for ( c = 0, cend = mConstraints.count(); c < cend; ++c ) { \ for ( i = 0; i < iend; ++i ) { \ con = mConstraints[c]; \ con.setElement( list[i] ); \ tmp.append( con ); \ } \ } \ mConstraints = tmp; \ tmp.clear(); \ } \ } // clang-format on intConstraint(mBySeconds, setSecond); intConstraint(mByMinutes, setMinute); intConstraint(mByHours, setHour); intConstraint(mByMonthDays, setDay); intConstraint(mByMonths, setMonth); intConstraint(mByYearDays, setYearday); intConstraint(mByWeekNumbers, setWeeknumber); #undef intConstraint if (!mByDays.isEmpty()) { mNoByRules = false; tmp.reserve(mConstraints.count() * mByDays.count()); for (c = 0, cend = mConstraints.count(); c < cend; ++c) { for (i = 0, iend = mByDays.count(); i < iend; ++i) { con = mConstraints[c]; con.setWeekday(mByDays[i].day()); con.setWeekdaynr(mByDays[i].pos()); tmp.append(con); } } mConstraints = tmp; tmp.clear(); } // clang-format off #define fixConstraint( setElement, value ) \ { \ for ( c = 0, cend = mConstraints.count(); c < cend; ++c ) { \ mConstraints[c].setElement( value ); \ } \ } // clang-format on // Now determine missing values from DTSTART. This can speed up things, // because we have more restrictions and save some loops. // TODO: Does RFC 2445 intend to restrict the weekday in all cases of weekly? if (mPeriod == rWeekly && mByDays.isEmpty()) { fixConstraint(setWeekday, mDateStart.date().dayOfWeek()); } // Really fall through in the cases, because all smaller time intervals are // constrained from dtstart switch (mPeriod) { case rYearly: if (mByDays.isEmpty() && mByWeekNumbers.isEmpty() && mByYearDays.isEmpty() && mByMonths.isEmpty()) { fixConstraint(setMonth, mDateStart.date().month()); } Q_FALLTHROUGH(); case rMonthly: if (mByDays.isEmpty() && mByWeekNumbers.isEmpty() && mByYearDays.isEmpty() && mByMonthDays.isEmpty()) { fixConstraint(setDay, mDateStart.date().day()); } Q_FALLTHROUGH(); case rWeekly: case rDaily: if (mByHours.isEmpty()) { fixConstraint(setHour, mDateStart.time().hour()); } Q_FALLTHROUGH(); case rHourly: if (mByMinutes.isEmpty()) { fixConstraint(setMinute, mDateStart.time().minute()); } Q_FALLTHROUGH(); case rMinutely: if (mBySeconds.isEmpty()) { fixConstraint(setSecond, mDateStart.time().second()); } Q_FALLTHROUGH(); case rSecondly: default: break; } #undef fixConstraint if (mNoByRules) { switch (mPeriod) { case rHourly: mTimedRepetition = mFrequency * 3600; break; case rMinutely: mTimedRepetition = mFrequency * 60; break; case rSecondly: mTimedRepetition = mFrequency; break; default: break; } } else { for (c = 0, cend = mConstraints.count(); c < cend;) { if (mConstraints[c].isConsistent(mPeriod)) { ++c; } else { mConstraints.removeAt(c); --cend; } } } } // Build and cache a list of all occurrences. //生成并缓存所有事件的列表。 // Only call buildCache() if mDuration > 0. bool RecurrenceRule::Private::buildCache() const { Q_ASSERT(mDuration > 0); // Build the list of all occurrences of this event (we need that to determine // the end date!) Constraint interval(getNextValidDateInterval(mDateStart, mPeriod)); auto dts = datesForInterval(interval, mPeriod); // Only use dates after the event has started (start date is only included // if it matches) const auto it = strictLowerBound(dts.begin(), dts.end(), mDateStart); if (it != dts.end()) { dts.erase(dts.begin(), it + 1); } // some validity checks to avoid infinite loops (i.e. if we have // done this loop already 10000 times, bail out ) for (int loopnr = 0; loopnr < LOOP_LIMIT && dts.count() < mDuration; ++loopnr) { interval.increase(mPeriod, mFrequency); // The returned date list is already sorted! dts += datesForInterval(interval, mPeriod); } if (dts.count() > mDuration) { // we have picked up more occurrences than necessary, remove them // 我们发现了更多不必要的事件,将其删除 dts.erase(dts.begin() + mDuration, dts.end()); } mCached = true; mCachedDates = dts; // it = dts.begin(); // while ( it != dts.end() ) { // qDebug() << " -=>" << dumpTime(*it); // ++it; // } if (int(dts.count()) == mDuration) { mCachedDateEnd = dts.last(); return true; } else { // The cached date list is incomplete mCachedDateEnd = QDateTime(); mCachedLastDate = interval.intervalDateTime(mPeriod); return false; } } //@endcond bool RecurrenceRule::dateMatchesRules(const QDateTime &kdt) const { QDateTime dt = kdt.toTimeZone(d->mDateStart.timeZone()); for (int i = 0, iend = d->mConstraints.count(); i < iend; ++i) { if (d->mConstraints[i].matches(dt, recurrenceType())) { return true; } } return false; } bool RecurrenceRule::recursOn(const QDate &qd, const QTimeZone &timeZone) const { int i, iend; if (!qd.isValid() || !d->mDateStart.isValid()) { // There can't be recurrences on invalid dates return false; } if (allDay()) { // It's a date-only rule, so it has no time specification. // Therefore ignore 'timeSpec'. if (qd < d->mDateStart.date()) { return false; } // Start date is only included if it really matches QDate endDate; if (d->mDuration >= 0) { endDate = endDt().date(); if (qd > endDate) { return false; } } // The date must be in an appropriate interval (getNextValidDateInterval), // Plus it must match at least one of the constraints bool match = false; for (i = 0, iend = d->mConstraints.count(); i < iend && !match; ++i) { match = d->mConstraints[i].matches(qd, recurrenceType()); } if (!match) { return false; } QDateTime start(qd, QTime(0, 0, 0), timeZone); // d->mDateStart.timeZone()); Constraint interval(d->getNextValidDateInterval(start, recurrenceType())); // Constraint::matches is quite efficient, so first check if it can occur at // all before we calculate all actual dates. if (!interval.matches(qd, recurrenceType())) { return false; } // We really need to obtain the list of dates in this interval, since // otherwise BYSETPOS will not work (i.e. the date will match the interval, // but BYSETPOS selects only one of these matching dates! QDateTime end = start.addDays(1); do { auto dts = d->datesForInterval(interval, recurrenceType()); for (i = 0, iend = dts.count(); i < iend; ++i) { if (dts[i].date() >= qd) { return dts[i].date() == qd; } } interval.increase(recurrenceType(), frequency()); } while (interval.intervalDateTime(recurrenceType()) < end); return false; } // It's a date-time rule, so we need to take the time specification into account. QDateTime start(qd, QTime(0, 0, 0), timeZone); QDateTime end = start.addDays(1).toTimeZone(d->mDateStart.timeZone()); start = start.toTimeZone(d->mDateStart.timeZone()); if (end < d->mDateStart) { return false; } if (start < d->mDateStart) { start = d->mDateStart; } // Start date is only included if it really matches if (d->mDuration >= 0) { QDateTime endRecur = endDt(); if (endRecur.isValid()) { if (start > endRecur) { return false; } if (end > endRecur) { end = endRecur; // limit end-of-day time to end of recurrence rule } } } if (d->mTimedRepetition) { // It's a simple sub-daily recurrence with no constraints int n = static_cast((d->mDateStart.secsTo(start) - 1) % d->mTimedRepetition); return start.addSecs(d->mTimedRepetition - n) < end; } // Find the start and end dates in the time spec for the rule QDate startDay = start.date(); QDate endDay = end.addSecs(-1).date(); int dayCount = startDay.daysTo(endDay) + 1; // The date must be in an appropriate interval (getNextValidDateInterval), // Plus it must match at least one of the constraints bool match = false; for (i = 0, iend = d->mConstraints.count(); i < iend && !match; ++i) { match = d->mConstraints[i].matches(startDay, recurrenceType()); for (int day = 1; day < dayCount && !match; ++day) { match = d->mConstraints[i].matches(startDay.addDays(day), recurrenceType()); } } if (!match) { return false; } Constraint interval(d->getNextValidDateInterval(start, recurrenceType())); // Constraint::matches is quite efficient, so first check if it can occur at // all before we calculate all actual dates. Constraint intervalm = interval; do { match = intervalm.matches(startDay, recurrenceType()); for (int day = 1; day < dayCount && !match; ++day) { match = intervalm.matches(startDay.addDays(day), recurrenceType()); } if (match) { break; } intervalm.increase(recurrenceType(), frequency()); } while (intervalm.intervalDateTime(recurrenceType()).isValid() && intervalm.intervalDateTime(recurrenceType()) < end); if (!match) { return false; } // We really need to obtain the list of dates in this interval, since // otherwise BYSETPOS will not work (i.e. the date will match the interval, // but BYSETPOS selects only one of these matching dates! do { auto dts = d->datesForInterval(interval, recurrenceType()); const auto it = std::lower_bound(dts.constBegin(), dts.constEnd(), start); if (it != dts.constEnd()) { return *it <= end; } interval.increase(recurrenceType(), frequency()); } while (interval.intervalDateTime(recurrenceType()).isValid() && interval.intervalDateTime(recurrenceType()) < end); return false; } bool RecurrenceRule::recursAt(const QDateTime &kdt) const { // Convert to the time spec used by this recurrence rule QDateTime dt(kdt.toTimeZone(d->mDateStart.timeZone())); if (allDay()) { return recursOn(dt.date(), dt.timeZone()); } if (dt < d->mDateStart) { return false; } // Start date is only included if it really matches if (d->mDuration >= 0 && dt > endDt()) { return false; } if (d->mTimedRepetition) { // It's a simple sub-daily recurrence with no constraints return !(d->mDateStart.secsTo(dt) % d->mTimedRepetition); } // The date must be in an appropriate interval (getNextValidDateInterval), // Plus it must match at least one of the constraints if (!dateMatchesRules(dt)) { return false; } // if it recurs every interval, speed things up... // if ( d->mFrequency == 1 && d->mBySetPos.isEmpty() && d->mByDays.isEmpty() ) return true; Constraint interval(d->getNextValidDateInterval(dt, recurrenceType())); // TODO_Recurrence: Does this work with BySetPos??? if (interval.matches(dt, recurrenceType())) { return true; } return false; } TimeList RecurrenceRule::recurTimesOn(const QDate &date, const QTimeZone &timeZone) const { TimeList lst; if (allDay()) { return lst; } QDateTime start(date, QTime(0, 0, 0), timeZone); QDateTime end = start.addDays(1).addSecs(-1); auto dts = timesInInterval(start, end); // returns between start and end inclusive for (int i = 0, iend = dts.count(); i < iend; ++i) { lst += dts[i].toTimeZone(timeZone).time(); } return lst; } /** Returns the number of recurrences up to and including the date/time specified. */ int RecurrenceRule::durationTo(const QDateTime &dt) const { // Convert to the time spec used by this recurrence rule QDateTime toDate(dt.toTimeZone(d->mDateStart.timeZone())); // Easy cases: // either before start, or after all recurrences and we know their number if (toDate < d->mDateStart) { return 0; } // Start date is only included if it really matches if (d->mDuration > 0 && toDate >= endDt()) { return d->mDuration; } if (d->mTimedRepetition) { // It's a simple sub-daily recurrence with no constraints return static_cast(d->mDateStart.secsTo(toDate) / d->mTimedRepetition); } return timesInInterval(d->mDateStart, toDate).count(); } int RecurrenceRule::durationTo(const QDate &date) const { return durationTo(QDateTime(date, QTime(23, 59, 59), d->mDateStart.timeZone())); } QDateTime RecurrenceRule::getPreviousDate(const QDateTime &afterDate) const { // Convert to the time spec used by this recurrence rule QDateTime toDate(afterDate.toTimeZone(d->mDateStart.timeZone())); // Invalid starting point, or beyond end of recurrence if (!toDate.isValid() || toDate < d->mDateStart) { return QDateTime(); } if (d->mTimedRepetition) { // It's a simple sub-daily recurrence with no constraints QDateTime prev = toDate; if (d->mDuration >= 0 && endDt().isValid() && toDate > endDt()) { prev = endDt().addSecs(1).toTimeZone(d->mDateStart.timeZone()); } int n = static_cast((d->mDateStart.secsTo(prev) - 1) % d->mTimedRepetition); if (n < 0) { return QDateTime(); // before recurrence start } prev = prev.addSecs(-n - 1); return prev >= d->mDateStart ? prev : QDateTime(); } // If we have a cache (duration given), use that if (d->mDuration > 0) { if (!d->mCached) { d->buildCache(); } const auto it = strictLowerBound(d->mCachedDates.constBegin(), d->mCachedDates.constEnd(), toDate); if (it != d->mCachedDates.constEnd()) { return *it; } return QDateTime(); } QDateTime prev = toDate; if (d->mDuration >= 0 && endDt().isValid() && toDate > endDt()) { prev = endDt().addSecs(1).toTimeZone(d->mDateStart.timeZone()); } Constraint interval(d->getPreviousValidDateInterval(prev, recurrenceType())); const auto dts = d->datesForInterval(interval, recurrenceType()); const auto it = strictLowerBound(dts.begin(), dts.end(), prev); if (it != dts.end()) { return ((*it) >= d->mDateStart) ? (*it) : QDateTime(); } // Previous interval. As soon as we find an occurrence, we're done. while (interval.intervalDateTime(recurrenceType()) > d->mDateStart) { interval.increase(recurrenceType(), -int(frequency())); // The returned date list is sorted auto dts = d->datesForInterval(interval, recurrenceType()); // The list is sorted, so take the last one. if (!dts.isEmpty()) { prev = dts.last(); if (prev.isValid() && prev >= d->mDateStart) { return prev; } else { return QDateTime(); } } } return QDateTime(); } QDateTime RecurrenceRule::getNextDate(const QDateTime &preDate) const { // Convert to the time spec used by this recurrence rule QDateTime fromDate(preDate.toTimeZone(d->mDateStart.timeZone())); // Beyond end of recurrence if (d->mDuration >= 0 && endDt().isValid() && fromDate >= endDt()) { return QDateTime(); } // Start date is only included if it really matches if (fromDate < d->mDateStart) { fromDate = d->mDateStart.addSecs(-1); } if (d->mTimedRepetition) { // It's a simple sub-daily recurrence with no constraints int n = static_cast((d->mDateStart.secsTo(fromDate) + 1) % d->mTimedRepetition); QDateTime next = fromDate.addSecs(d->mTimedRepetition - n + 1); return d->mDuration < 0 || !endDt().isValid() || next <= endDt() ? next : QDateTime(); } if (d->mDuration > 0) { if (!d->mCached) { d->buildCache(); } const auto it = std::upper_bound(d->mCachedDates.constBegin(), d->mCachedDates.constEnd(), fromDate); if (it != d->mCachedDates.constEnd()) { return *it; } } QDateTime end = endDt(); Constraint interval(d->getNextValidDateInterval(fromDate, recurrenceType())); const auto dts = d->datesForInterval(interval, recurrenceType()); const auto it = std::upper_bound(dts.begin(), dts.end(), fromDate); if (it != dts.end()) { return (d->mDuration < 0 || *it <= end) ? *it : QDateTime(); } interval.increase(recurrenceType(), frequency()); if (d->mDuration >= 0 && interval.intervalDateTime(recurrenceType()) > end) { return QDateTime(); } // Increase the interval. The first occurrence that we find is the result (if // if's before the end date). // TODO: some validity checks to avoid infinite loops for contradictory constraints int loop = 0; do { auto dts = d->datesForInterval(interval, recurrenceType()); if (!dts.isEmpty()) { QDateTime ret(dts[0]); if (d->mDuration >= 0 && ret > end) { return QDateTime(); } else { return ret; } } interval.increase(recurrenceType(), frequency()); } while (++loop < LOOP_LIMIT && (d->mDuration < 0 || interval.intervalDateTime(recurrenceType()) < end)); return QDateTime(); } QList RecurrenceRule::timesInInterval(const QDateTime &dtStart, const QDateTime &dtEnd) const { const QDateTime start = dtStart.toTimeZone(d->mDateStart.timeZone()); const QDateTime end = dtEnd.toTimeZone(d->mDateStart.timeZone()); QList result; if (end < d->mDateStart) { return result; // before start of recurrence } QDateTime enddt = end; if (d->mDuration >= 0) { const QDateTime endRecur = endDt(); if (endRecur.isValid()) { if (start > endRecur) { return result; // beyond end of recurrence } if (end >= endRecur) { enddt = endRecur; // limit end time to end of recurrence rule } } } if (d->mTimedRepetition) { // It's a simple sub-daily recurrence with no constraints // Seconds to add to interval start, to get first occurrence which is within interval qint64 offsetFromNextOccurrence; if (d->mDateStart < start) { offsetFromNextOccurrence = d->mTimedRepetition - (d->mDateStart.secsTo(start) % d->mTimedRepetition); } else { offsetFromNextOccurrence = -(d->mDateStart.secsTo(start) % d->mTimedRepetition); } QDateTime dt = start.addSecs(offsetFromNextOccurrence); if (dt <= enddt) { int numberOfOccurrencesWithinInterval = static_cast(dt.secsTo(enddt) / d->mTimedRepetition) + 1; // limit n by a sane value else we can "explode". numberOfOccurrencesWithinInterval = qMin(numberOfOccurrencesWithinInterval, LOOP_LIMIT); for (int i = 0; i < numberOfOccurrencesWithinInterval; dt = dt.addSecs(d->mTimedRepetition), ++i) { result += dt; } } return result; } QDateTime st = start < d->mDateStart ? d->mDateStart : start; bool done = false; if (d->mDuration > 0) { if (!d->mCached) { d->buildCache(); } if (d->mCachedDateEnd.isValid() && start > d->mCachedDateEnd) { return result; // beyond end of recurrence } const auto it = std::lower_bound(d->mCachedDates.constBegin(), d->mCachedDates.constEnd(), start); if (it != d->mCachedDates.constEnd()) { const auto itEnd = std::upper_bound(it, d->mCachedDates.constEnd(), enddt); if (itEnd != d->mCachedDates.constEnd()) { done = true; } std::copy(it, itEnd, std::back_inserter(result)); } if (d->mCachedDateEnd.isValid()) { done = true; } else if (!result.isEmpty()) { result += QDateTime(); // indicate that the returned list is incomplete done = true; } if (done) { return result; } // We don't have any result yet, but we reached the end of the incomplete cache st = d->mCachedLastDate.addSecs(1); } Constraint interval(d->getNextValidDateInterval(st, recurrenceType())); int loop = 0; do { auto dts = d->datesForInterval(interval, recurrenceType()); auto it = dts.begin(); auto itEnd = dts.end(); if (loop == 0) { it = std::lower_bound(dts.begin(), dts.end(), st); } itEnd = std::upper_bound(it, dts.end(), enddt); if (itEnd != dts.end()) { loop = LOOP_LIMIT; } std::copy(it, itEnd, std::back_inserter(result)); // Increase the interval. interval.increase(recurrenceType(), frequency()); } while (++loop < LOOP_LIMIT && interval.intervalDateTime(recurrenceType()) <= end); return result; } //@cond PRIVATE // Find the date/time of the occurrence at or before a date/time, // for a given period type. // Return a constraint whose value appropriate to 'type', is set to // the value contained in the date/time. Constraint RecurrenceRule::Private::getPreviousValidDateInterval(const QDateTime &dt, PeriodType type) const { long periods = 0; QDateTime start = mDateStart; QDateTime nextValid(start); int modifier = 1; QDateTime toDate(dt.toTimeZone(start.timeZone())); // for super-daily recurrences, don't care about the time part // Find the #intervals since the dtstart and round to the next multiple of // the frequency switch (type) { // Really fall through for sub-daily, since the calculations only differ // by the factor 60 and 60*60! Same for weekly and daily (factor 7) case rHourly: modifier *= 60; Q_FALLTHROUGH(); case rMinutely: modifier *= 60; Q_FALLTHROUGH(); case rSecondly: periods = static_cast(start.secsTo(toDate) / modifier); // round it down to the next lower multiple of frequency: if (mFrequency > 0) { periods = (periods / mFrequency) * mFrequency; } nextValid = start.addSecs(modifier * periods); break; case rWeekly: toDate = toDate.addDays(-(7 + toDate.date().dayOfWeek() - mWeekStart) % 7); start = start.addDays(-(7 + start.date().dayOfWeek() - mWeekStart) % 7); modifier *= 7; Q_FALLTHROUGH(); case rDaily: periods = start.daysTo(toDate) / modifier; // round it down to the next lower multiple of frequency: if (mFrequency > 0) { periods = (periods / mFrequency) * mFrequency; } nextValid = start.addDays(modifier * periods); break; case rMonthly: { periods = 12 * (toDate.date().year() - start.date().year()) + (toDate.date().month() - start.date().month()); // round it down to the next lower multiple of frequency: if (mFrequency > 0) { periods = (periods / mFrequency) * mFrequency; } // set the day to the first day of the month, so we don't have problems // with non-existent days like Feb 30 or April 31 start.setDate(QDate(start.date().year(), start.date().month(), 1)); nextValid.setDate(start.date().addMonths(periods)); break; } case rYearly: periods = (toDate.date().year() - start.date().year()); // round it down to the next lower multiple of frequency: if (mFrequency > 0) { periods = (periods / mFrequency) * mFrequency; } nextValid.setDate(start.date().addYears(periods)); break; default: break; } return Constraint(nextValid, type, mWeekStart); } // Find the date/time of the next occurrence at or after a date/time, // for a given period type. // Return a constraint whose value appropriate to 'type', is set to the // value contained in the date/time. Constraint RecurrenceRule::Private::getNextValidDateInterval(const QDateTime &dt, PeriodType type) const { // TODO: Simplify this! long periods = 0; QDateTime start = mDateStart; QDateTime nextValid(start); int modifier = 1; QDateTime toDate(dt.toTimeZone(start.timeZone())); // for super-daily recurrences, don't care about the time part // Find the #intervals since the dtstart and round to the next multiple of // the frequency switch (type) { // Really fall through for sub-daily, since the calculations only differ // by the factor 60 and 60*60! Same for weekly and daily (factor 7) case rHourly: modifier *= 60; Q_FALLTHROUGH(); case rMinutely: modifier *= 60; Q_FALLTHROUGH(); case rSecondly: periods = static_cast(start.secsTo(toDate) / modifier); periods = qMax(0L, periods); if (periods > 0 && mFrequency > 0) { periods += (mFrequency - 1 - ((periods - 1) % mFrequency)); } nextValid = start.addSecs(modifier * periods); break; case rWeekly: // correct both start date and current date to start of week toDate = toDate.addDays(-(7 + toDate.date().dayOfWeek() - mWeekStart) % 7); start = start.addDays(-(7 + start.date().dayOfWeek() - mWeekStart) % 7); modifier *= 7; Q_FALLTHROUGH(); case rDaily: periods = start.daysTo(toDate) / modifier; periods = qMax(0L, periods); if (periods > 0 && mFrequency > 0) { periods += (mFrequency - 1 - ((periods - 1) % mFrequency)); } nextValid = start.addDays(modifier * periods); break; case rMonthly: { periods = 12 * (toDate.date().year() - start.date().year()) + (toDate.date().month() - start.date().month()); periods = qMax(0L, periods); if (periods > 0 && mFrequency > 0) { periods += (mFrequency - 1 - ((periods - 1) % mFrequency)); } // set the day to the first day of the month, so we don't have problems // with non-existent days like Feb 30 or April 31 start.setDate(QDate(start.date().year(), start.date().month(), 1)); nextValid.setDate(start.date().addMonths(periods)); break; } case rYearly: periods = (toDate.date().year() - start.date().year()); periods = qMax(0L, periods); if (periods > 0 && mFrequency > 0) { periods += (mFrequency - 1 - ((periods - 1) % mFrequency)); } nextValid.setDate(start.date().addYears(periods)); break; default: break; } return Constraint(nextValid, type, mWeekStart); } QList RecurrenceRule::Private::datesForInterval(const Constraint &interval, PeriodType type) const { /* -) Loop through constraints, -) merge interval with each constraint -) if merged constraint is not consistent => ignore that constraint -) if complete => add that one date to the date list -) Loop through all missing fields => For each add the resulting */ QList lst; for (int i = 0, iend = mConstraints.count(); i < iend; ++i) { Constraint merged(interval); if (merged.merge(mConstraints[i])) { // If the information is incomplete, we can't use this constraint if (merged.year > 0 && merged.hour >= 0 && merged.minute >= 0 && merged.second >= 0) { // We have a valid constraint, so get all datetimes that match it and // append it to all date/times of this interval QList lstnew = merged.dateTimes(type); lst += lstnew; } } } // Sort it so we can apply the BySetPos. Also some logic relies on this being sorted sortAndRemoveDuplicates(lst); /*if ( lst.isEmpty() ) { qDebug() << " No Dates in Interval"; } else { qDebug() << " Dates:"; for ( int i = 0, iend = lst.count(); i < iend; ++i ) { qDebug()<< " -)" << dumpTime(lst[i]); } qDebug() << " ---------------------"; }*/ if (!mBySetPos.isEmpty()) { auto tmplst = lst; lst.clear(); for (int i = 0, iend = mBySetPos.count(); i < iend; ++i) { int pos = mBySetPos[i]; if (pos > 0) { --pos; } if (pos < 0) { pos += tmplst.count(); } if (pos >= 0 && pos < tmplst.count()) { lst.append(tmplst[pos]); } } sortAndRemoveDuplicates(lst); } return lst; } //@endcond void RecurrenceRule::dump() const { #ifndef NDEBUG if (!d->mRRule.isEmpty()) { qDebug() << " RRULE=" << d->mRRule; } qDebug() << " Read-Only:" << isReadOnly(); qDebug() << " Period type:" << int(recurrenceType()) << ", frequency:" << frequency(); qDebug() << " #occurrences:" << duration(); qDebug() << " start date:" << dumpTime(startDt(), allDay()) << ", end date:" << dumpTime(endDt(), allDay()); // clang-format off #define dumpByIntList(list,label) \ if ( !list.isEmpty() ) {\ QStringList lst;\ for ( int i = 0, iend = list.count(); i < iend; ++i ) {\ lst.append( QString::number( list[i] ) );\ }\ qDebug() << " " << label << lst.join(QLatin1String(", ") );\ } // clang-format on dumpByIntList(d->mBySeconds, QStringLiteral("BySeconds: ")); dumpByIntList(d->mByMinutes, QStringLiteral("ByMinutes: ")); dumpByIntList(d->mByHours, QStringLiteral("ByHours: ")); if (!d->mByDays.isEmpty()) { QStringList lst; for (int i = 0, iend = d->mByDays.count(); i < iend; ++i) { lst.append((d->mByDays[i].pos() ? QString::number(d->mByDays[i].pos()) : QLatin1String("")) + DateHelper::dayName(d->mByDays[i].day())); } qDebug() << " ByDays: " << lst.join(QLatin1String(", ")); } dumpByIntList(d->mByMonthDays, QStringLiteral("ByMonthDays:")); dumpByIntList(d->mByYearDays, QStringLiteral("ByYearDays: ")); dumpByIntList(d->mByWeekNumbers, QStringLiteral("ByWeekNr: ")); dumpByIntList(d->mByMonths, QStringLiteral("ByMonths: ")); dumpByIntList(d->mBySetPos, QStringLiteral("BySetPos: ")); #undef dumpByIntList qDebug() << " Week start:" << DateHelper::dayName(d->mWeekStart); qDebug() << " Constraints:"; // dump constraints for (int i = 0, iend = d->mConstraints.count(); i < iend; ++i) { d->mConstraints[i].dump(); } #endif } //@cond PRIVATE void Constraint::dump() const { qDebug() << " ~> Y=" << year << ", M=" << month << ", D=" << day << ", H=" << hour << ", m=" << minute << ", S=" << second << ", wd=" << weekday << ",#wd=" << weekdaynr << ", #w=" << weeknumber << ", yd=" << yearday; } //@endcond QString dumpTime(const QDateTime &dt, bool isAllDay) { #ifndef NDEBUG if (!dt.isValid()) { return QString(); } QString result; if (isAllDay) { result = dt.toString(QStringLiteral("ddd yyyy-MM-dd t")); } else { result = dt.toString(QStringLiteral("ddd yyyy-MM-dd hh:mm:ss t")); } return result; #else Q_UNUSED(dt); Q_UNUSED(isAllDay); return QString(); #endif } QDateTime RecurrenceRule::startDt() const { return d->mDateStart; } RecurrenceRule::PeriodType RecurrenceRule::recurrenceType() const { return d->mPeriod; } uint RecurrenceRule::frequency() const { return d->mFrequency; } int RecurrenceRule::duration() const { return d->mDuration; } QString RecurrenceRule::rrule() const { return d->mRRule; } void RecurrenceRule::setRRule(const QString &rrule) { d->mRRule = rrule; } bool RecurrenceRule::isReadOnly() const { return d->mIsReadOnly; } void RecurrenceRule::setReadOnly(bool readOnly) { d->mIsReadOnly = readOnly; } bool RecurrenceRule::recurs() const { return d->mPeriod != rNone; } bool RecurrenceRule::allDay() const { return d->mAllDay; } const QList &RecurrenceRule::bySeconds() const { return d->mBySeconds; } const QList &RecurrenceRule::byMinutes() const { return d->mByMinutes; } const QList &RecurrenceRule::byHours() const { return d->mByHours; } const QList &RecurrenceRule::byDays() const { return d->mByDays; } const QList &RecurrenceRule::byMonthDays() const { return d->mByMonthDays; } const QList &RecurrenceRule::byYearDays() const { return d->mByYearDays; } const QList &RecurrenceRule::byWeekNumbers() const { return d->mByWeekNumbers; } const QList &RecurrenceRule::byMonths() const { return d->mByMonths; } const QList &RecurrenceRule::bySetPos() const { return d->mBySetPos; } short RecurrenceRule::weekStart() const { return d->mWeekStart; } RecurrenceRule::RuleObserver::~RuleObserver() { } RecurrenceRule::WDayPos::WDayPos(int ps, short dy) : mDay(dy) , mPos(ps) { } void RecurrenceRule::WDayPos::setDay(short dy) { mDay = dy; } short RecurrenceRule::WDayPos::day() const { return mDay; } void RecurrenceRule::WDayPos::setPos(int ps) { mPos = ps; } int RecurrenceRule::WDayPos::pos() const { return mPos; } QDataStream &operator<<(QDataStream &out, const Constraint &c) { out << c.year << c.month << c.day << c.hour << c.minute << c.second << c.weekday << c.weekdaynr << c.weeknumber << c.yearday << c.weekstart; serializeQTimeZoneAsSpec(out, c.timeZone); out << false; // for backwards compatibility return out; } QDataStream &operator>>(QDataStream &in, Constraint &c) { bool secondOccurrence; // no longer used in >> c.year >> c.month >> c.day >> c.hour >> c.minute >> c.second >> c.weekday >> c.weekdaynr >> c.weeknumber >> c.yearday >> c.weekstart; deserializeSpecAsQTimeZone(in, c.timeZone); in >> secondOccurrence; return in; } Q_CORE_EXPORT QDataStream &KCalendarCore::operator<<(QDataStream &out, const KCalendarCore::RecurrenceRule::WDayPos &w) { out << w.mDay << w.mPos; return out; } Q_CORE_EXPORT QDataStream &KCalendarCore::operator>>(QDataStream &in, KCalendarCore::RecurrenceRule::WDayPos &w) { in >> w.mDay >> w.mPos; return in; } Q_CORE_EXPORT QDataStream &KCalendarCore::operator<<(QDataStream &out, const KCalendarCore::RecurrenceRule *r) { if (!r) { return out; } RecurrenceRule::Private *d = r->d; out << d->mRRule << static_cast(d->mPeriod); serializeQDateTimeAsKDateTime(out, d->mDateStart); out << d->mFrequency << d->mDuration; serializeQDateTimeAsKDateTime(out, d->mDateEnd); out << d->mBySeconds << d->mByMinutes << d->mByHours << d->mByDays << d->mByMonthDays << d->mByYearDays << d->mByWeekNumbers << d->mByMonths << d->mBySetPos << d->mWeekStart << d->mConstraints << d->mAllDay << d->mNoByRules << d->mTimedRepetition << d->mIsReadOnly; return out; } Q_CORE_EXPORT QDataStream &KCalendarCore::operator>>(QDataStream &in, const KCalendarCore::RecurrenceRule *r) { if (!r) { return in; } RecurrenceRule::Private *d = r->d; quint32 period; in >> d->mRRule >> period; deserializeKDateTimeAsQDateTime(in, d->mDateStart); in >> d->mFrequency >> d->mDuration; deserializeKDateTimeAsQDateTime(in, d->mDateEnd); in >> d->mBySeconds >> d->mByMinutes >> d->mByHours >> d->mByDays >> d->mByMonthDays >> d->mByYearDays >> d->mByWeekNumbers >> d->mByMonths >> d->mBySetPos >> d->mWeekStart >> d->mConstraints >> d->mAllDay >> d->mNoByRules >> d->mTimedRepetition >> d->mIsReadOnly; d->mPeriod = static_cast(period); return in; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/recurrencerule.h000066400000000000000000000350261473346337000245420ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001, 2003 Cornelius Schumacher SPDX-FileCopyrightText: 2002, 2006, 2007 David Jarvie SPDX-FileCopyrightText: 2005 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_RECURRENCERULE_H #define KCALCORE_RECURRENCERULE_H #include #include class QTimeZone; namespace KCalendarCore { // These two are duplicates wrt. incidencebase.h typedef QList DateList; /* List of times */ typedef QList TimeList; /** This class represents a recurrence rule for a calendar incidence. 此类表示日历事件的重复规则。 */ class Q_CORE_EXPORT RecurrenceRule { public: class RuleObserver { public: virtual ~RuleObserver(); /** This method is called on each change of the recurrence object * 对递归对象的每次更改都会调用此方法 */ virtual void recurrenceChanged(RecurrenceRule *) = 0; }; typedef QList List; /** enum for describing the frequency how an event recurs, if at all. * 枚举,用于描述事件递归的频率(如果有)。 */ enum PeriodType { rNone = 0, rSecondly, rMinutely, rHourly, rDaily, rWeekly, rMonthly, rYearly, }; /** structure for describing the n-th weekday of the month/year. * 用于描述月/年的第n个工作日的结构。 */ class Q_CORE_EXPORT WDayPos // krazy:exclude=dpointer { public: explicit WDayPos(int ps = 0, short dy = 0); void setDay(short dy); short day() const; void setPos(int ps); int pos() const; bool operator==(const RecurrenceRule::WDayPos &pos2) const; bool operator!=(const RecurrenceRule::WDayPos &pos2) const; protected: short mDay; // Weekday, 1=monday, 7=sunday int mPos; // week of the day (-1 for last, 1 for first, 0 for all weeks) // Bounded by -366 and +366, 0 means all weeks in that period friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::RecurrenceRule::WDayPos &); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, KCalendarCore::RecurrenceRule::WDayPos &); }; RecurrenceRule(); RecurrenceRule(const RecurrenceRule &r); ~RecurrenceRule(); bool operator==(const RecurrenceRule &r) const; bool operator!=(const RecurrenceRule &r) const { return !operator==(r); } RecurrenceRule &operator=(const RecurrenceRule &r); /** Set if recurrence is read-only or can be changed. * .设置重复周期是只读的还是可以更改的 * */ void setReadOnly(bool readOnly); /** Returns true if the recurrence is read-only; false if it can be changed. 如果重复周期为只读,则返回true;如果可以更改,则为false。 */ Q_REQUIRED_RESULT bool isReadOnly() const; /** Returns the event's recurrence status. See the enumeration at the top of this file for possible values. 返回事件的重复状态。有关可能的值,请参阅此文件顶部的枚举。 */ Q_REQUIRED_RESULT bool recurs() const; void setRecurrenceType(PeriodType period); Q_REQUIRED_RESULT PeriodType recurrenceType() const; /** Turns off recurrence for the event. */ void clear(); /** Returns the recurrence frequency, in terms of the recurrence time period type. 返回按重复时间段类型表示的重复频率。 */ Q_REQUIRED_RESULT uint frequency() const; /** Sets the recurrence frequency, in terms of the recurrence time period type. 根据重复时间段类型设置重复频率。 */ void setFrequency(int freq); /** Returns the recurrence start date/time. Note that the recurrence does not necessarily occur on the start date/time. For this to happen, it must actually match the rule. 返回定期开始日期/时间。 请注意,重复不一定发生在开始日期/时间。 要做到这一点,它必须符合规则。 */ Q_REQUIRED_RESULT QDateTime startDt() const; /** Sets the recurrence start date/time. Note that setting the start date/time does not make the recurrence occur on that date/time, it simply sets a lower limit to when the recurrences take place (this applies only for the by- rules, not for i.e. an hourly rule where the startDt is the first occurrence). 设置定期开始日期/时间。 请注意,设置开始日期/时间不会使重复发生在该日期/时间,它只会设置重复发生的时间下限(这仅适用于by规则,而不适用于startDt是第一次发生的每小时规则)。 Note that setting @p start to a date-only value does not make an all-day recurrence: to do this, call setAllDay(true). @param start the recurrence's start date and time */ void setStartDt(const QDateTime &start); /** Returns whether the start date has no time associated. All-Day means -- according to rfc2445 -- that the event has no time associate. */ Q_REQUIRED_RESULT bool allDay() const; /** Sets whether the dtstart is all-day (i.e. has no time attached) * * @param allDay Whether start datetime is all-day */ void setAllDay(bool allDay); /** Returns the date and time of the last recurrence. * An invalid date is returned if the recurrence has no end. * @param result if non-null, *result is updated to true if successful, * or false if there is no recurrence or its end date cannot be determined. */ Q_REQUIRED_RESULT QDateTime endDt(bool *result = nullptr) const; /** Sets the date and time of the last recurrence. * @param endDateTime the ending date/time after which to stop recurring. */ void setEndDt(const QDateTime &endDateTime); /** * Returns -1 if the event recurs infinitely, 0 if the end date is set, * otherwise the total number of recurrences, including the initial occurrence. * 如果事件无限重复,则返回-1;如果设置了结束日期,则返回0;否则返回包括初始事件在内的重复总数。 */ Q_REQUIRED_RESULT int duration() const; /** Sets the total number of times the event is to occur, including both the * first and last. * 设置事件发生的总次数,包括第一次和最后一次。 */ void setDuration(int duration); /** Returns the number of recurrences up to and including the date/time specified. */ //返回指定日期/时间之前(包括指定日期/时间)的复发次数 Q_REQUIRED_RESULT int durationTo(const QDateTime &dt) const; /** Returns the number of recurrences up to and including the date specified. * 返回指定日期之前(包括指定日期)的重复次数。 */ Q_REQUIRED_RESULT int durationTo(const QDate &date) const; /** Shift the times of the rule so that they appear at the same clock time as before but in a new time zone. The shift is done from a viewing time zone rather than from the actual rule time zone. For example, shifting a rule whose start time is 09:00 America/New York, using an old viewing time zone (@p oldTz) of Europe/London, to a new time zone (@p newTz) of Europe/Paris, will result in the time being shifted from 14:00 (which is the London time of the rule start) to 14:00 Paris time. @param oldTz the time specification which provides the clock times @param newTz the new time specification */ void shiftTimes(const QTimeZone &oldTz, const QTimeZone &newTz); /** Returns true if the date specified is one on which the event will * recur. The start date returns true only if it actually matches the rule. * 如果指定的日期是事件将再次发生的日期,则返回true。仅当开始日期与规则实际匹配时,才会返回true。 * @param date date to check * @param timeZone time specification for @p date */ Q_REQUIRED_RESULT bool recursOn(const QDate &date, const QTimeZone &timeZone) const; /** Returns true if the date/time specified is one at which the event will * recur. Times are rounded down to the nearest minute to determine the result. * The start date/time returns true only if it actually matches the rule. * 如果指定的日期/时间是事件将重复出现的日期/时间,则返回 true。时间向下舍入到最接近的分钟以确定结果。开始日期/时间仅当实际与规则匹配时才返回 true。 * @param dt the date+time to check for recurrency */ Q_REQUIRED_RESULT bool recursAt(const QDateTime &dt) const; /** Returns true if the date matches the rules. It does not necessarily mean that this is an actual occurrence. In particular, the method does not check if the date is after the end date, or if the frequency interval matches. @param dt the date+time to check for matching the rules */ Q_REQUIRED_RESULT bool dateMatchesRules(const QDateTime &dt) const; /** Returns a list of the times on the specified date at which the * recurrence will occur. The returned times should be interpreted in the * context of @p timeZone. * 返回在指定日期重复发生的时间列表。 * @param date the date for which to find the recurrence times * @param timeZone time specification for @p date */ Q_REQUIRED_RESULT TimeList recurTimesOn(const QDate &date, const QTimeZone &timeZone) const; /** Returns a list of all the times at which the recurrence will occur * between two specified times. * 返回在两个指定时间之间重复发生的所有时间的列表。 * There is a (large) maximum limit to the number of times returned. If due to * this limit the list is incomplete, this is indicated by the last entry being * set to an invalid QDateTime value. If you need further values, call the * method again with a start time set to just after the last valid time returned. * @param start inclusive start of interval * @param end inclusive end of interval * @return list of date/time values */ Q_REQUIRED_RESULT QList timesInInterval(const QDateTime &start, const QDateTime &end) const; /** Returns the date and time of the next recurrence, after the specified date/time. * 返回指定日期/时间之后下次重复的日期和时间。 * If the recurrence has no time, the next date after the specified date is returned. * @param preDateTime the date/time after which to find the recurrence. * @return date/time of next recurrence, or invalid date if none. */ Q_REQUIRED_RESULT QDateTime getNextDate(const QDateTime &preDateTime) const; /** Returns the date and time of the last previous recurrence, before the specified date/time. * 返回指定日期/时间之前上次重复的日期和时间。 * If a time later than 00:00:00 is specified and the recurrence has no time, 00:00:00 on * the specified date is returned if that date recurs. * @param afterDateTime the date/time before which to find the recurrence. * @return date/time of previous recurrence, or invalid date if none. */ Q_REQUIRED_RESULT QDateTime getPreviousDate(const QDateTime &afterDateTime) const; void setBySeconds(const QList &bySeconds); void setByMinutes(const QList &byMinutes); void setByHours(const QList &byHours); void setByDays(const QList &byDays); void setByMonthDays(const QList &byMonthDays); void setByYearDays(const QList &byYearDays); void setByWeekNumbers(const QList &byWeekNumbers); void setByMonths(const QList &byMonths); void setBySetPos(const QList &bySetPos); void setWeekStart(short weekStart); const QList &bySeconds() const; const QList &byMinutes() const; const QList &byHours() const; const QList &byDays() const; const QList &byMonthDays() const; const QList &byYearDays() const; const QList &byWeekNumbers() const; const QList &byMonths() const; const QList &bySetPos() const; short weekStart() const; /** Set the RRULE string for the rule. This is merely stored for future reference. The string is not used in any way by the RecurrenceRule. @param rrule the RRULE string */ void setRRule(const QString &rrule); Q_REQUIRED_RESULT QString rrule() const; void setDirty(); /** Installs an observer. Whenever some setting of this recurrence object is changed, the recurrenceUpdated( Recurrence* ) method of each observer will be called to inform it of changes. 安装一个观察者。每当此递归对象的某些设置发生更改时,将调用每个观察者的recurrenceUpdated(recurrence*)方法来通知其更改。 @param observer the Recurrence::Observer-derived object, which will be installed as an observer of this object. */ void addObserver(RuleObserver *observer); /** Removes an observer that was added with addObserver. If the given object was not an observer, it does nothing. @param observer the Recurrence::Observer-derived object to be removed from the list of observers of this object. */ void removeObserver(RuleObserver *observer); /** Debug output. */ void dump() const; private: //@cond PRIVATE class Private; Private *const d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::RecurrenceRule *); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, const KCalendarCore::RecurrenceRule *); }; /** * RecurrenceRule serializer and deserializer. * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::RecurrenceRule *); Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, const KCalendarCore::RecurrenceRule *); /** * RecurrenceRule::WDayPos serializer and deserializer. * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::RecurrenceRule::WDayPos &); Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, KCalendarCore::RecurrenceRule::WDayPos &); } // namespace KCalendarCore Q_DECLARE_TYPEINFO(KCalendarCore::RecurrenceRule::WDayPos, Q_MOVABLE_TYPE); #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/schedulemessage.cpp000066400000000000000000000035061473346337000252070ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001, 2004 Cornelius Schumacher SPDX-FileCopyrightText: 2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ #include "schedulemessage.h" #include using namespace KCalendarCore; //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::ScheduleMessage::Private { public: Private() { } IncidenceBase::Ptr mIncidence; iTIPMethod mMethod; Status mStatus; QString mError; ~Private() { } }; //@endcond ScheduleMessage::ScheduleMessage(const IncidenceBase::Ptr &incidence, iTIPMethod method, ScheduleMessage::Status status) : d(new KCalendarCore::ScheduleMessage::Private) { d->mIncidence = incidence; d->mMethod = method; d->mStatus = status; } ScheduleMessage::~ScheduleMessage() { delete d; } IncidenceBase::Ptr ScheduleMessage::event() const { return d->mIncidence; } iTIPMethod ScheduleMessage::method() const { return d->mMethod; } QString ScheduleMessage::methodName(iTIPMethod method) { switch (method) { case iTIPPublish: return QStringLiteral("Publish"); case iTIPRequest: return QStringLiteral("Request"); case iTIPRefresh: return QStringLiteral("Refresh"); case iTIPCancel: return QStringLiteral("Cancel"); case iTIPAdd: return QStringLiteral("Add"); case iTIPReply: return QStringLiteral("Reply"); case iTIPCounter: return QStringLiteral("Counter"); case iTIPDeclineCounter: return QStringLiteral("Decline Counter"); default: return QStringLiteral("Unknown"); } } ScheduleMessage::Status ScheduleMessage::status() const { return d->mStatus; } QString ScheduleMessage::error() const { return d->mError; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/schedulemessage.h000066400000000000000000000054301473346337000246520ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_SCHEDULEMESSAGE_H #define KCALCORE_SCHEDULEMESSAGE_H #include "incidencebase.h" namespace KCalendarCore { class IncidenceBase; /** iTIP methods. */ enum iTIPMethod { iTIPPublish, /**< Event, to-do, journal or freebusy posting */ iTIPRequest, /**< Event, to-do or freebusy scheduling request */ iTIPReply, /**< Event, to-do or freebusy reply to request */ iTIPAdd, /**< Event, to-do or journal additional property request */ iTIPCancel, /**< Event, to-do or journal cancellation notice */ iTIPRefresh, /**< Event or to-do description update request */ iTIPCounter, /**< Event or to-do submit counter proposal */ iTIPDeclineCounter, /**< Event or to-do decline a counter proposal */ iTIPNoMethod, /**< No method */ }; /** @brief A Scheduling message class. This class provides an encapsulation of a scheduling message. It associates an incidence with an iTIPMethod and status information. */ class Q_CORE_EXPORT ScheduleMessage { public: /** Message status. */ enum Status { PublishNew, /**< New message posting */ PublishUpdate, /**< Updated message */ Obsolete, /**< obsolete */ RequestNew, /**< Request new message posting */ RequestUpdate, /**< Request updated message */ Unknown, /**< No status */ }; /** A shared pointer to a ScheduleMessage. */ typedef QSharedPointer Ptr; /** Creates a scheduling message with method as defined in iTIPMethod and a status. @param incidence a pointer to a valid Incidence to be associated with this message. @param method an iTIPMethod. @param status a Status. */ ScheduleMessage(const IncidenceBase::Ptr &incidence, iTIPMethod method, Status status); /** Destructor. */ ~ScheduleMessage(); /** Returns the event associated with this message. */ IncidenceBase::Ptr event() const; /** Returns the iTIP method associated with this message. */ Q_REQUIRED_RESULT iTIPMethod method() const; /** Returns a machine-readable (not translatable) name for a iTIP method. @param method an iTIPMethod. */ Q_REQUIRED_RESULT static QString methodName(iTIPMethod method); /** Returns the status of this message. */ Q_REQUIRED_RESULT Status status() const; /** Returns the error message if there is any. */ Q_REQUIRED_RESULT QString error() const; private: //@cond PRIVATE Q_DISABLE_COPY(ScheduleMessage) class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/sorting.cpp000066400000000000000000000404021473346337000235270ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. SPDX-FileContributor: Alvaro Manera SPDX-License-Identifier: LGPL-2.0-or-later */ #include "sorting.h" // PENDING(kdab) Review // The QString::compare() need to be replace by a DUI string comparisons. // See http://qt.gitorious.org/maemo-6-ui-framework/libdui // If not compiled in "meego-mode" should we be using locale compares? using namespace KCalendarCore; /** * How one QDateTime compares with another. * * If any all-day events are involved, comparison of QDateTime values * requires them to be considered as representing time periods. An all-day * instance represents a time period from 00:00:00 to 23:59:59.999 on a given * date, while a date/time instance can be considered to represent a time * period whose start and end times are the same. They may therefore be * earlier or later, or may overlap or be contained one within the other. * * Values may be OR'ed with each other in any combination of 'consecutive' * intervals to represent different types of relationship. * * In the descriptions of the values below, * - s1 = start time of first instance * - e1 = end time of first instance * - s2 = start time of second instance * - e2 = end time of second instance. */ enum DateTimeComparison { Before = 0x01, /**< The first QDateTime is strictly earlier than the second, * i.e. e1 < s2. */ AtStart = 0x02, /**< The first QDateTime starts at the same time as the second, * and ends before the end of the second, * i.e. s1 = s2, e1 < e2. */ Inside = 0x04, /**< The first QDateTime starts after the start of the second, * and ends before the end of the second, * i.e. s1 > s2, e1 < e2. */ AtEnd = 0x08, /**< The first QDateTime starts after the start of the second, * and ends at the same time as the second, * i.e. s1 > s2, e1 = e2. */ After = 0x10, /**< The first QDateTime is strictly later than the second, * i.e. s1 > e2. */ Equal = AtStart | Inside | AtEnd, /**< Simultaneous, i.e. s1 = s2 && e1 = e2. */ Outside = Before | AtStart | Inside | AtEnd | After, /**< The first QDateTime starts before the start of the other, * and ends after the end of the other, * i.e. s1 < s2, e1 > e2. */ StartsAt = AtStart | Inside | AtEnd | After, /**< The first QDateTime starts at the same time as the other, * and ends after the end of the other, * i.e. s1 = s2, e1 > e2. */ EndsAt = Before | AtStart | Inside | AtEnd, /**< The first QDateTime starts before the start of the other, * and ends at the same time as the other, * i.e. s1 < s2, e1 = e2. */ }; /** * Compare two QDateTime instances to determine whether they are * simultaneous, earlier or later. * The comparison takes time zones into account: if the two instances have * different time zones, they are first converted to UTC before comparing. * * If both instances are not all-day values, the first instance is considered to * be either simultaneous, earlier or later, and does not overlap. * * If one instance is all-day and the other is a not all-day, the first instance * is either strictly earlier, strictly later, or overlaps. * * If both instance are all-day, they are considered simultaneous if both * their start of day and end of day times are simultaneous with each * other. (Both start and end of day times need to be considered in case a * daylight savings change occurs during that day.) Otherwise, the first instance * can be strictly earlier, earlier but overlapping, later but overlapping, * or strictly later. * * Note that if either instance is a local time (Qt::TimeSpec of Qt::LocalTime), * the result cannot be guaranteed to be correct, since by definition they * contain no information about time zones or daylight savings changes. * * @return DateTimeComparison indicating the relationship of dt1 to dt2 * @see operator==(), operator!=(), operator<(), operator<=(), operator>=(), operator>() */ DateTimeComparison compare(const QDateTime &dt1, bool isAllDay1, const QDateTime &dt2, bool isAllDay2) { QDateTime start1, start2; // FIXME When secondOccurrence is available in QDateTime // const bool conv = (!d->equalSpec(*other.d) || d->secondOccurrence() != other.d->secondOccurrence()); const bool conv = dt1.timeSpec() != dt2.timeSpec() || (dt1.timeSpec() == Qt::OffsetFromUTC && dt1.offsetFromUtc() != dt2.offsetFromUtc()) || (dt1.timeSpec() == Qt::TimeZone && dt1.timeZone() != dt2.timeZone()); if (conv) { // Different time specs or one is a time which occurs twice, // so convert to UTC before comparing start1 = dt1.toUTC(); start2 = dt2.toUTC(); } else { // Same time specs, so no need to convert to UTC start1 = dt1; start2 = dt2; } if (isAllDay1 || isAllDay2) { // At least one of the instances is date-only, so we need to compare // time periods rather than just times. QDateTime end1, end2; if (conv) { if (isAllDay1) { QDateTime dt(dt1); dt.setTime(QTime(23, 59, 59, 999)); end1 = dt.toUTC(); } else { end1 = start1; } if (isAllDay2) { QDateTime dt(dt2); dt.setTime(QTime(23, 59, 59, 999)); end2 = dt.toUTC(); } else { end2 = start2; } } else { if (isAllDay1) { end1 = QDateTime(dt1.date(), QTime(23, 59, 59, 999), Qt::LocalTime); } else { end1 = dt1; } if (isAllDay2) { end2 = QDateTime(dt2.date(), QTime(23, 59, 59, 999), Qt::LocalTime); } else { end2 = dt2; } } if (start1 == start2) { return !isAllDay1 ? AtStart : (end1 == end2) ? Equal : (end1 < end2) ? static_cast(AtStart | Inside) : static_cast(AtStart | Inside | AtEnd | After); } if (start1 < start2) { return (end1 < start2) ? Before : (end1 == end2) ? static_cast(Before | AtStart | Inside | AtEnd) : (end1 == start2) ? static_cast(Before | AtStart) : (end1 < end2) ? static_cast(Before | AtStart | Inside) : Outside; } else { return (start1 > end2) ? After : (start1 == end2) ? (end1 == end2 ? AtEnd : static_cast(AtEnd | After)) : (end1 == end2) ? static_cast(Inside | AtEnd) : (end1 < end2) ? Inside : static_cast(Inside | AtEnd | After); } } return (start1 == start2) ? Equal : (start1 < start2) ? Before : After; } bool KCalendarCore::Events::startDateLessThan(const Event::Ptr &e1, const Event::Ptr &e2) { DateTimeComparison res = compare(e1->dtStart(), e1->allDay(), e2->dtStart(), e2->allDay()); if (res == Equal) { return Events::summaryLessThan(e1, e2); } else { return (res & Before || res & AtStart); } } bool KCalendarCore::Events::startDateMoreThan(const Event::Ptr &e1, const Event::Ptr &e2) { DateTimeComparison res = compare(e1->dtStart(), e1->allDay(), e2->dtStart(), e2->allDay()); if (res == Equal) { return Events::summaryMoreThan(e1, e2); } else { return (res & After || res & AtEnd); } } bool KCalendarCore::Events::summaryLessThan(const Event::Ptr &e1, const Event::Ptr &e2) { return QString::compare(e1->summary(), e2->summary(), Qt::CaseInsensitive) < 0; } bool KCalendarCore::Events::summaryMoreThan(const Event::Ptr &e1, const Event::Ptr &e2) { return QString::compare(e1->summary(), e2->summary(), Qt::CaseInsensitive) > 0; } bool KCalendarCore::Events::endDateLessThan(const Event::Ptr &e1, const Event::Ptr &e2) { DateTimeComparison res = compare(e1->dtEnd(), e1->allDay(), e2->dtEnd(), e2->allDay()); if (res == Equal) { return Events::summaryLessThan(e1, e2); } else { return (res & Before || res & AtStart); } } bool KCalendarCore::Events::endDateMoreThan(const Event::Ptr &e1, const Event::Ptr &e2) { DateTimeComparison res = compare(e1->dtEnd(), e1->allDay(), e2->dtEnd(), e2->allDay()); if (res == Equal) { return Events::summaryMoreThan(e1, e2); } else { return (res & After || res & AtEnd); } } bool KCalendarCore::Journals::dateLessThan(const Journal::Ptr &j1, const Journal::Ptr &j2) { DateTimeComparison res = compare(j1->dtStart(), j1->allDay(), j2->dtStart(), j2->allDay()); return (res & Before || res & AtStart); } bool KCalendarCore::Journals::dateMoreThan(const Journal::Ptr &j1, const Journal::Ptr &j2) { DateTimeComparison res = compare(j1->dtStart(), j1->allDay(), j2->dtStart(), j2->allDay()); return (res & After || res & AtEnd); } bool KCalendarCore::Journals::summaryLessThan(const Journal::Ptr &j1, const Journal::Ptr &j2) { return QString::compare(j1->summary(), j2->summary(), Qt::CaseInsensitive) < 0; } bool KCalendarCore::Journals::summaryMoreThan(const Journal::Ptr &j1, const Journal::Ptr &j2) { return QString::compare(j1->summary(), j2->summary(), Qt::CaseInsensitive) > 0; } bool KCalendarCore::Todos::startDateLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { DateTimeComparison res = compare(t1->dtStart(), t1->allDay(), t2->dtStart(), t2->allDay()); if (res == Equal) { return Todos::summaryLessThan(t1, t2); } else { return (res & Before || res & AtStart); } } bool KCalendarCore::Todos::startDateMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { DateTimeComparison res = compare(t1->dtStart(), t1->allDay(), t2->dtStart(), t2->allDay()); if (res == Equal) { return Todos::summaryMoreThan(t1, t2); } else { return (res & After || res & AtEnd); } } bool KCalendarCore::Todos::dueDateLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { if (!t1->hasDueDate()) { return false; } if (!t2->hasDueDate()) { return true; } DateTimeComparison res = compare(t1->dtDue(), t1->allDay(), t2->dtDue(), t2->allDay()); if (res == Equal) { return Todos::summaryLessThan(t1, t2); } else { return (res & Before || res & AtStart); } } bool KCalendarCore::Todos::dueDateMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { if (!t2->hasDueDate()) { return false; } if (!t1->hasDueDate()) { return true; } DateTimeComparison res = compare(t1->dtDue(), t1->allDay(), t2->dtDue(), t2->allDay()); if (res == Equal) { return Todos::summaryMoreThan(t1, t2); } else { return (res & After || res & AtEnd); } } bool KCalendarCore::Todos::priorityLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { if (t1->priority() < t2->priority()) { return true; } else if (t1->priority() == t2->priority()) { return Todos::summaryLessThan(t1, t2); } else { return false; } } bool KCalendarCore::Todos::priorityMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { if (t1->priority() > t2->priority()) { return true; } else if (t1->priority() == t2->priority()) { return Todos::summaryMoreThan(t1, t2); } else { return false; } } bool KCalendarCore::Todos::percentLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { if (t1->percentComplete() < t2->percentComplete()) { return true; } else if (t1->percentComplete() == t2->percentComplete()) { return Todos::summaryLessThan(t1, t2); } else { return false; } } bool KCalendarCore::Todos::percentMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { if (t1->percentComplete() > t2->percentComplete()) { return true; } else if (t1->percentComplete() == t2->percentComplete()) { return Todos::summaryMoreThan(t1, t2); } else { return false; } } bool KCalendarCore::Todos::summaryLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { return QString::compare(t1->summary(), t2->summary(), Qt::CaseInsensitive) < 0; } bool KCalendarCore::Todos::summaryMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { return QString::compare(t1->summary(), t2->summary(), Qt::CaseInsensitive) > 0; } bool KCalendarCore::Todos::createdLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { DateTimeComparison res = compare(t1->created(), t1->allDay(), t2->created(), t2->allDay()); if (res == Equal) { return Todos::summaryLessThan(t1, t2); } else { return (res & Before || res & AtStart); } } bool KCalendarCore::Todos::createdMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { DateTimeComparison res = compare(t1->created(), t1->allDay(), t2->created(), t2->allDay()); if (res == Equal) { return Todos::summaryMoreThan(t1, t2); } else { return (res & After || res & AtEnd); } } bool KCalendarCore::Incidences::dateLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { DateTimeComparison res = compare(i1->dateTime(Incidence::RoleSort), i1->allDay(), i2->dateTime(Incidence::RoleSort), i2->allDay()); if (res == Equal) { return Incidences::summaryLessThan(i1, i2); } else { return (res & Before || res & AtStart); } } bool KCalendarCore::Incidences::dateMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { DateTimeComparison res = compare(i1->dateTime(Incidence::RoleSort), i1->allDay(), i2->dateTime(Incidence::RoleSort), i2->allDay()); if (res == Equal) { return Incidences::summaryMoreThan(i1, i2); } else { return (res & After || res & AtEnd); } } bool KCalendarCore::Incidences::createdLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { DateTimeComparison res = compare(i1->created(), i1->allDay(), i2->created(), i2->allDay()); if (res == Equal) { return Incidences::summaryLessThan(i1, i2); } else { return (res & Before || res & AtStart); } } bool KCalendarCore::Incidences::createdMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { DateTimeComparison res = compare(i1->created(), i1->allDay(), i2->created(), i2->allDay()); if (res == Equal) { return Incidences::summaryMoreThan(i1, i2); } else { return (res & After || res & AtEnd); } } bool KCalendarCore::Incidences::summaryLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { return QString::compare(i1->summary(), i2->summary(), Qt::CaseInsensitive) < 0; } bool KCalendarCore::Incidences::summaryMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { return QString::compare(i1->summary(), i2->summary(), Qt::CaseInsensitive) > 0; } bool KCalendarCore::Incidences::categoriesLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { const auto res = QString::compare(i1->categoriesStr(), i2->categoriesStr(), Qt::CaseSensitive); if (res == 0) { return Incidences::summaryLessThan(i1, i2); } else { return res < 0; } } bool KCalendarCore::Incidences::categoriesMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { const auto res = QString::compare(i1->categoriesStr(), i2->categoriesStr(), Qt::CaseSensitive); if (res == 0) { return Incidences::summaryMoreThan(i1, i2); } else { return res > 0; } } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/sorting.h000066400000000000000000000065761473346337000232120ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. SPDX-FileContributor: Alvaro Manera SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_SORTING_H #define KCALCORE_SORTING_H #include "event.h" #include "freebusy.h" #include "journal.h" #include "person.h" #include "todo.h" namespace KCalendarCore { namespace Events { Q_CORE_EXPORT bool startDateLessThan(const Event::Ptr &e1, const Event::Ptr &e2); Q_CORE_EXPORT bool summaryLessThan(const Event::Ptr &e1, const Event::Ptr &e2); Q_CORE_EXPORT bool summaryMoreThan(const Event::Ptr &e1, const Event::Ptr &e2); Q_CORE_EXPORT bool startDateMoreThan(const Event::Ptr &e1, const Event::Ptr &e2); Q_CORE_EXPORT bool endDateLessThan(const Event::Ptr &e1, const Event::Ptr &e2); Q_CORE_EXPORT bool endDateMoreThan(const Event::Ptr &e1, const Event::Ptr &e2); } // namespace Events namespace Todos { Q_CORE_EXPORT bool startDateLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool startDateMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool dueDateLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool dueDateMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool priorityLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool priorityMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool percentLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool percentMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool summaryLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool summaryMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool createdLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool createdMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2); } // namespace Todos namespace Journals { Q_CORE_EXPORT bool dateLessThan(const Journal::Ptr &j1, const Journal::Ptr &j2); Q_CORE_EXPORT bool dateMoreThan(const Journal::Ptr &j1, const Journal::Ptr &j2); Q_CORE_EXPORT bool summaryLessThan(const Journal::Ptr &j1, const Journal::Ptr &j2); Q_CORE_EXPORT bool summaryMoreThan(const Journal::Ptr &j1, const Journal::Ptr &j2); } // namespace Journals namespace Incidences { Q_CORE_EXPORT bool dateLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); Q_CORE_EXPORT bool dateMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); Q_CORE_EXPORT bool createdLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); Q_CORE_EXPORT bool createdMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); Q_CORE_EXPORT bool summaryLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); Q_CORE_EXPORT bool summaryMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); /** * Compare the categories (tags) of two incidences, as returned by categoriesStr(). * If they are equal, return summaryLessThan(). * @since 5.83 */ Q_CORE_EXPORT bool categoriesLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); /** * Compare the categories (tags) of two incidences, as returned by categoriesStr(). * If they are equal, return summaryMoreThan(). * @since 5.83 */ Q_CORE_EXPORT bool categoriesMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); } // namespace Incidences } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/todo.cpp000066400000000000000000000350311473346337000230110ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2009 Allen Winter SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Todo class. @brief Provides a To-do in the sense of RFC2445. @author Cornelius Schumacher \ @author Allen Winter \ */ #include "todo.h" #include "recurrence.h" #include "utils_p.h" #include "visitor.h" #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Todo::Private { public: Private() { } Private(const KCalendarCore::Todo::Private &other) { init(other); } void init(const KCalendarCore::Todo::Private &other); QDateTime mDtDue; // to-do due date (if there is one) // ALSO the first occurrence of a recurring to-do QDateTime mDtRecurrence; // next occurrence (for recurring to-dos) QDateTime mCompleted; // to-do completion date (if it has been completed) int mPercentComplete = 0; // to-do percent complete [0,100] /** Returns true if the todo got a new date, else false will be returned. */ bool recurTodo(Todo *todo); }; void KCalendarCore::Todo::Private::init(const KCalendarCore::Todo::Private &other) { mDtDue = other.mDtDue; mDtRecurrence = other.mDtRecurrence; mCompleted = other.mCompleted; mPercentComplete = other.mPercentComplete; } //@endcond Todo::Todo() : d(new KCalendarCore::Todo::Private) { } Todo::Todo(const Todo &other) : Incidence(other) , d(new KCalendarCore::Todo::Private(*other.d)) { } Todo::Todo(const Incidence &other) : Incidence(other) , d(new KCalendarCore::Todo::Private) { } Todo::~Todo() { delete d; } Todo *Todo::clone() const { return new Todo(*this); } IncidenceBase &Todo::assign(const IncidenceBase &other) { if (&other != this) { Incidence::assign(other); const Todo *t = static_cast(&other); d->init(*(t->d)); } return *this; } bool Todo::equals(const IncidenceBase &todo) const { if (!Incidence::equals(todo)) { return false; } else { // If they weren't the same type IncidenceBase::equals would had returned false already const Todo *t = static_cast(&todo); return ((dtDue() == t->dtDue()) || (!dtDue().isValid() && !t->dtDue().isValid())) && hasDueDate() == t->hasDueDate() && hasStartDate() == t->hasStartDate() && ((completed() == t->completed()) || (!completed().isValid() && !t->completed().isValid())) && hasCompletedDate() == t->hasCompletedDate() && percentComplete() == t->percentComplete(); } } Incidence::IncidenceType Todo::type() const { return TypeTodo; } QByteArray Todo::typeStr() const { return QByteArrayLiteral("Todo"); } void Todo::setDtDue(const QDateTime &dtDue, bool first) { startUpdates(); // int diffsecs = d->mDtDue.secsTo(dtDue); /*if (mReadOnly) return; const Alarm::List& alarms = alarms(); for (Alarm *alarm = alarms.first(); alarm; alarm = alarms.next()) { if (alarm->enabled()) { alarm->setTime(alarm->time().addSecs(diffsecs)); } }*/ if (recurs() && !first) { d->mDtRecurrence = dtDue; } else { d->mDtDue = dtDue; } if (recurs() && dtDue.isValid() && (!dtStart().isValid() || dtDue < recurrence()->startDateTime())) { qDebug() << "To-do recurrences are now calculated against DTSTART. Fixing legacy to-do."; setDtStart(dtDue); } /*const Alarm::List& alarms = alarms(); for (Alarm *alarm = alarms.first(); alarm; alarm = alarms.next()) alarm->setAlarmStart(d->mDtDue);*/ setFieldDirty(FieldDtDue); endUpdates(); } QDateTime Todo::dtDue(bool first) const { if (!hasDueDate()) { return QDateTime(); } const QDateTime start = IncidenceBase::dtStart(); if (recurs() && !first && d->mDtRecurrence.isValid()) { if (start.isValid()) { // This is the normal case, recurring to-dos have a valid DTSTART. const qint64 duration = start.daysTo(d->mDtDue); QDateTime dt = d->mDtRecurrence.addDays(duration); dt.setTime(d->mDtDue.time()); return dt; } else { // This is a legacy case, where recurrence was calculated against DTDUE return d->mDtRecurrence; } } return d->mDtDue; } bool Todo::hasDueDate() const { return d->mDtDue.isValid(); } bool Todo::hasStartDate() const { return IncidenceBase::dtStart().isValid(); } QDateTime Todo::dtStart() const { return dtStart(/*first=*/false); } QDateTime Todo::dtStart(bool first) const { if (!hasStartDate()) { return QDateTime(); } if (recurs() && !first && d->mDtRecurrence.isValid()) { return d->mDtRecurrence; } else { return IncidenceBase::dtStart(); } } bool Todo::isCompleted() const { return d->mPercentComplete == 100 || status() == StatusCompleted || hasCompletedDate(); } void Todo::setCompleted(bool completed) { update(); if (completed) { d->mPercentComplete = 100; } else { d->mPercentComplete = 0; if (hasCompletedDate()) { d->mCompleted = QDateTime(); setFieldDirty(FieldCompleted); } } setFieldDirty(FieldPercentComplete); updated(); setStatus(completed ? StatusCompleted : StatusNone); // Calls update()/updated(). } QDateTime Todo::completed() const { if (hasCompletedDate()) { return d->mCompleted; } else { return QDateTime(); } } void Todo::setCompleted(const QDateTime &completed) { update(); if (!d->recurTodo(this)) { if (d->mPercentComplete != 100) { d->mPercentComplete = 100; setFieldDirty(FieldPercentComplete); } if (d->mCompleted.isValid() != completed.isValid()) { d->mCompleted = completed.toUTC(); setFieldDirty(FieldCompleted); } } updated(); if (status() != StatusNone) { setStatus(StatusCompleted); // Calls update()/updated() } } bool Todo::hasCompletedDate() const { return d->mCompleted.isValid(); } int Todo::percentComplete() const { return d->mPercentComplete; } void Todo::setPercentComplete(int percent) { if (percent > 100) { percent = 100; } else if (percent < 0) { percent = 0; } update(); if (percent != d->mPercentComplete) { d->mPercentComplete = percent; setFieldDirty(FieldPercentComplete); } if (percent != 100 && d->mCompleted.isValid()) { d->mCompleted = QDateTime(); setFieldDirty(FieldCompleted); } updated(); if (percent != 100 && status() == Incidence::StatusCompleted) { setStatus(Incidence::StatusNone); // Calls update()/updated(). } } bool Todo::isInProgress(bool first) const { if (isOverdue()) { return false; } if (d->mPercentComplete > 0) { return true; } if (hasStartDate() && hasDueDate()) { if (allDay()) { QDate currDate = QDate::currentDate(); if (dtStart(first).date() <= currDate && currDate < dtDue(first).date()) { return true; } } else { QDateTime currDate = QDateTime::currentDateTimeUtc(); if (dtStart(first) <= currDate && currDate < dtDue(first)) { return true; } } } return false; } bool Todo::isOpenEnded() const { if (!hasDueDate() && !isCompleted()) { return true; } return false; } bool Todo::isNotStarted(bool first) const { if (d->mPercentComplete > 0) { return false; } if (!hasStartDate()) { return false; } if (allDay()) { if (dtStart(first).date() >= QDate::currentDate()) { return false; } } else { if (dtStart(first) >= QDateTime::currentDateTimeUtc()) { return false; } } return true; } void Todo::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { Incidence::shiftTimes(oldZone, newZone); d->mDtDue = d->mDtDue.toTimeZone(oldZone); d->mDtDue.setTimeZone(newZone); if (recurs()) { d->mDtRecurrence = d->mDtRecurrence.toTimeZone(oldZone); d->mDtRecurrence.setTimeZone(newZone); } if (hasCompletedDate()) { d->mCompleted = d->mCompleted.toTimeZone(oldZone); d->mCompleted.setTimeZone(newZone); } } void Todo::setDtRecurrence(const QDateTime &dt) { d->mDtRecurrence = dt; setFieldDirty(FieldRecurrence); } QDateTime Todo::dtRecurrence() const { return d->mDtRecurrence.isValid() ? d->mDtRecurrence : d->mDtDue; } bool Todo::recursOn(const QDate &date, const QTimeZone &timeZone) const { QDate today = QDate::currentDate(); return Incidence::recursOn(date, timeZone) && !(date < today && d->mDtRecurrence.date() < today && d->mDtRecurrence > recurrence()->startDateTime()); } bool Todo::isOverdue() const { if (!dtDue().isValid()) { return false; // if it's never due, it can't be overdue } const bool inPast = allDay() ? dtDue().date() < QDate::currentDate() : dtDue() < QDateTime::currentDateTimeUtc(); return inPast && !isCompleted(); } void Todo::setAllDay(bool allday) { if (allday != allDay() && !mReadOnly) { if (hasDueDate()) { setFieldDirty(FieldDtDue); } Incidence::setAllDay(allday); } } //@cond PRIVATE bool Todo::Private::recurTodo(Todo *todo) { if (todo && todo->recurs()) { Recurrence *r = todo->recurrence(); const QDateTime recurrenceEndDateTime = r->endDateTime(); QDateTime nextOccurrenceDateTime = r->getNextDateTime(todo->dtStart()); if ((r->duration() == -1 || (nextOccurrenceDateTime.isValid() && recurrenceEndDateTime.isValid() && nextOccurrenceDateTime <= recurrenceEndDateTime))) { // We convert to the same timeSpec so we get the correct .date() const auto rightNow = QDateTime::currentDateTimeUtc().toTimeZone(nextOccurrenceDateTime.timeZone()); const bool isDateOnly = todo->allDay(); /* Now we search for the occurrence that's _after_ the currentUtcDateTime, or * if it's dateOnly, the occurrrence that's _during or after today_. * The reason we use "<" for date only, but "<=" for occurrences with time is that * if it's date only, the user can still complete that occurrence today, so that's * the current occurrence that needs completing. */ while (!todo->recursAt(nextOccurrenceDateTime) || (!isDateOnly && nextOccurrenceDateTime <= rightNow) || (isDateOnly && nextOccurrenceDateTime.date() < rightNow.date())) { if (!nextOccurrenceDateTime.isValid() || (nextOccurrenceDateTime > recurrenceEndDateTime && r->duration() != -1)) { return false; } nextOccurrenceDateTime = r->getNextDateTime(nextOccurrenceDateTime); } todo->setDtRecurrence(nextOccurrenceDateTime); todo->setCompleted(false); todo->setRevision(todo->revision() + 1); return true; } } return false; } //@endcond bool Todo::accept(Visitor &v, const IncidenceBase::Ptr &incidence) { return v.visit(incidence.staticCast()); } QDateTime Todo::dateTime(DateTimeRole role) const { switch (role) { case RoleAlarmStartOffset: return dtStart(); case RoleAlarmEndOffset: return dtDue(); case RoleSort: // Sorting to-dos first compares dtDue, then dtStart if // dtDue doesn't exist return hasDueDate() ? dtDue() : dtStart(); case RoleCalendarHashing: return dtDue(); case RoleStartTimeZone: return dtStart(); case RoleEndTimeZone: return dtDue(); case RoleEndRecurrenceBase: return dtDue(); case RoleDisplayStart: case RoleDisplayEnd: return dtDue().isValid() ? dtDue() : dtStart(); case RoleAlarm: if (alarms().isEmpty()) { return QDateTime(); } else { Alarm::Ptr alarm = alarms().at(0); if (alarm->hasStartOffset() && hasStartDate()) { return dtStart(); } else if (alarm->hasEndOffset() && hasDueDate()) { return dtDue(); } else { // The application shouldn't add alarms on to-dos without dates. return QDateTime(); } } case RoleRecurrenceStart: if (dtStart().isValid()) { return dtStart(); } return dtDue(); // For the sake of backwards compatibility // where we calculated recurrences based on dtDue case RoleEnd: return dtDue(); default: return QDateTime(); } } void Todo::setDateTime(const QDateTime &dateTime, DateTimeRole role) { switch (role) { case RoleDnD: setDtDue(dateTime); break; case RoleEnd: setDtDue(dateTime, true); break; default: qDebug() << "Unhandled role" << role; } } void Todo::virtual_hook(VirtualHook id, void *data) { Q_UNUSED(id); Q_UNUSED(data); } QLatin1String Todo::mimeType() const { return Todo::todoMimeType(); } QLatin1String Todo::todoMimeType() { return QLatin1String("application/x-vnd.akonadi.calendar.todo"); } QLatin1String Todo::iconName(const QDateTime &recurrenceId) const { const bool usesCompletedTaskPixmap = isCompleted() || (recurs() && recurrenceId.isValid() && (recurrenceId < dtStart(/*first=*/false))); if (usesCompletedTaskPixmap) { return QLatin1String("task-complete"); } else { return QLatin1String("view-calendar-tasks"); } } void Todo::serialize(QDataStream &out) const { Incidence::serialize(out); serializeQDateTimeAsKDateTime(out, d->mDtDue); serializeQDateTimeAsKDateTime(out, d->mDtRecurrence); serializeQDateTimeAsKDateTime(out, d->mCompleted); out << d->mPercentComplete; } void Todo::deserialize(QDataStream &in) { Incidence::deserialize(in); deserializeKDateTimeAsQDateTime(in, d->mDtDue); deserializeKDateTimeAsQDateTime(in, d->mDtRecurrence); deserializeKDateTimeAsQDateTime(in, d->mCompleted); in >> d->mPercentComplete; } bool Todo::supportsGroupwareCommunication() const { return true; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/todo.h000066400000000000000000000254561473346337000224700ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2009 Allen Winter SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Todo class. @author Cornelius Schumacher \ @author Allen Winter \ */ #ifndef KCALCORE_TODO_H #define KCALCORE_TODO_H #include "incidence.h" namespace KCalendarCore { /** @brief Provides a To-do in the sense of RFC2445. */ class Q_CORE_EXPORT Todo : public Incidence { public: /** A shared pointer to a Todo object. */ typedef QSharedPointer Ptr; /** List of to-dos. */ typedef QVector List; ///@cond PRIVATE // needed for Akonadi polymorphic payload support typedef Incidence SuperClass; ///@endcond /** Constructs an empty to-do. */ Todo(); /** Copy constructor. @param other is the to-do to copy. */ Todo(const Todo &other); /** Costructs a todo out of an incidence This constructs allows to make it easy to create a todo from an event. @param other is the incidence to copy. @since 4.14 */ Todo(const Incidence &other); // krazy:exclude=explicit (copy ctor) /** Destroys a to-do. */ ~Todo() override; /** @copydoc IncidenceBase::type() */ Q_REQUIRED_RESULT IncidenceType type() const override; /** @copydoc IncidenceBase::typeStr() */ Q_REQUIRED_RESULT QByteArray typeStr() const override; /** Returns an exact copy of this todo. The returned object is owned by the caller. @return A pointer to a Todo containing an exact copy of this object. */ Todo *clone() const override; /** Sets due date and time. @param dtDue The due date/time. @param first If true and the todo recurs, the due date of the first occurrence will be returned. If false and recurrent, the date of the current occurrence will be returned. If non-recurrent, the normal due date will be returned. */ void setDtDue(const QDateTime &dtDue, bool first = false); /** Returns the todo due datetime. @param first If true and the todo recurs, the due datetime of the first occurrence will be returned. If false and recurrent, the datetime of the current occurrence will be returned. If non-recurrent, the normal due datetime will be returned. @return A QDateTime containing the todo due datetime. */ Q_REQUIRED_RESULT QDateTime dtDue(bool first = false) const; /** Returns if the todo has a due datetime. @return true if the todo has a due datetime; false otherwise. */ Q_REQUIRED_RESULT bool hasDueDate() const; /** Returns if the todo has a start datetime. @return true if the todo has a start datetime; false otherwise. */ Q_REQUIRED_RESULT bool hasStartDate() const; /** @copydoc IncidenceBase::dtStart() */ Q_REQUIRED_RESULT QDateTime dtStart() const override; /** Returns the start datetime of the todo. @param first If true, the start datetime of the todo will be returned; also, if the todo recurs, the start datetime of the first occurrence will be returned. If false and the todo recurs, the relative start datetime will be returned, based on the datetime returned by dtRecurrence(). @return A QDateTime for the start datetime of the todo. */ Q_REQUIRED_RESULT QDateTime dtStart(bool first) const; /** Returns whether the todo is completed or not. @return true if the todo is 100% completed, has status @c StatusCompleted, or has a completed date; false otherwise. @see isOverdue, isInProgress(), isOpenEnded(), isNotStarted(bool), setCompleted(), percentComplete() */ Q_REQUIRED_RESULT bool isCompleted() const; /** Sets completion percentage and status. @param completed If @c true, percentage complete is set to 100%, and status is set to @c StatusCompleted; the completion date is @b not set or cleared. If @c false, percentage complete is set to 0%, status is set to @c StatusNone, and the completion date is cleared. @see isCompleted(), percentComplete(), hasCompletedDate() */ void setCompleted(bool completed); /** Returns what percentage of the to-do is completed. @return The percentage complete of the to-do as an integer between 0 and 100, inclusive. @see setPercentComplete(), isCompleted() */ Q_REQUIRED_RESULT int percentComplete() const; /** Sets what percentage of the to-do is completed. To prevent inconsistency, if @p percent is not 100, completed() is cleared, and if status() is StatusCompleted it is reset to StatusNone. @param percent is the completion percentage. Values greater than 100 are treated as 100; values less than p are treated as 0. @see isCompleted(), setCompleted() */ void setPercentComplete(int percent); /** Returns the to-do was completion datetime. @return A QDateTime for the completion datetime of the to-do. @see hasCompletedDate() */ Q_REQUIRED_RESULT QDateTime completed() const; /** Marks this Todo, or its current recurrence, as completed. If the todo does not recur, its completion percentage is set to 100%, and its completion date is set to @p completeDate. If its status is not StatusNone, it is set to StatusCompleted. @note If @p completeDate is invalid, the completion date is cleared, but the todo is still "complete". If the todo recurs, the first incomplete recurrence is marked complete. @param completeDate is the to-do completion date. @see completed(), hasCompletedDate() */ void setCompleted(const QDateTime &completeDate); /** Returns if the to-do has a completion datetime. @return true if the to-do has a date associated with completion; false otherwise. @see setCompleted(), completed() */ bool hasCompletedDate() const; /** Returns true, if the to-do is in-progress (started, or >0% completed); otherwise return false. If the to-do is overdue, then it is not considered to be in-progress. @param first If true, the start and due dates of the todo will be used; also, if the todo recurs, the start date and due date of the first occurrence will be used. If false and the todo recurs, the relative start and due dates will be used, based on the date returned by dtRecurrence(). @see isOverdue(), isCompleted(), isOpenEnded(), isNotStarted(bool) */ Q_REQUIRED_RESULT bool isInProgress(bool first) const; /** Returns true, if the to-do is open-ended (no due date); false otherwise. @see isOverdue(), isCompleted(), isInProgress(), isNotStarted(bool) */ Q_REQUIRED_RESULT bool isOpenEnded() const; /** Returns true, if the to-do has yet to be started (no start date and 0% completed); otherwise return false. @param first If true, the start date of the todo will be used; also, if the todo recurs, the start date of the first occurrence will be used. If false and the todo recurs, the relative start date will be used, based on the date returned by dtRecurrence(). @see isOverdue(), isCompleted(), isInProgress(), isOpenEnded() */ Q_REQUIRED_RESULT bool isNotStarted(bool first) const; /** @copydoc IncidenceBase::shiftTimes() */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) override; /** @copydoc IncidenceBase::setAllDay(). */ void setAllDay(bool allDay) override; /** Sets the due date/time of the current occurrence if recurrent. @param dt is the */ void setDtRecurrence(const QDateTime &dt); /** Returns the due date/time of the current occurrence if recurrent. */ Q_REQUIRED_RESULT QDateTime dtRecurrence() const; /** Returns true if the @p date specified is one on which the to-do will recur. Todos are a special case, hence the overload. It adds an extra check, which make it return false if there's an occurrence between the recur start and today. @param date is the date to check. @param timeZone is the time zone */ bool recursOn(const QDate &date, const QTimeZone &timeZone) const override; /** Returns true if this todo is overdue (e.g. due date is lower than today and not completed), else false. @see isCompleted(), isInProgress(), isOpenEnded(), isNotStarted(bool) */ bool isOverdue() const; /** @copydoc IncidenceBase::dateTime() */ Q_REQUIRED_RESULT QDateTime dateTime(DateTimeRole role) const override; /** @copydoc IncidenceBase::setDateTime() */ void setDateTime(const QDateTime &dateTime, DateTimeRole role) override; /** @copydoc IncidenceBase::mimeType() */ Q_REQUIRED_RESULT QLatin1String mimeType() const override; /** @copydoc Incidence::iconName() */ Q_REQUIRED_RESULT QLatin1String iconName(const QDateTime &recurrenceId = {}) const override; /** @copydoc Incidence::supportsGroupwareCommunication() */ bool supportsGroupwareCommunication() const override; /** Returns the Akonadi specific sub MIME type of a KCalendarCore::Todo. */ Q_REQUIRED_RESULT static QLatin1String todoMimeType(); protected: /** Compare this with @p todo for equality. @param todo is the to-do to compare. */ bool equals(const IncidenceBase &todo) const override; /** @copydoc IncidenceBase::assign() */ IncidenceBase &assign(const IncidenceBase &other) override; /** @copydoc IncidenceBase::virtual_hook() */ void virtual_hook(VirtualHook id, void *data) override; private: /** @copydoc IncidenceBase::accept() */ bool accept(Visitor &v, const IncidenceBase::Ptr &incidence) override; /** Disabled, otherwise could be dangerous if you subclass Todo. Use IncidenceBase::operator= which is safe because it calls virtual function assign(). @param other is another Todo object to assign to this one. */ Todo &operator=(const Todo &other); // For polymorfic serialization void serialize(QDataStream &out) const override; void deserialize(QDataStream &in) override; //@cond PRIVATE class Private; Private *const d; //@endcond }; } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Todo::Ptr, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Todo::Ptr) Q_DECLARE_METATYPE(KCalendarCore::Todo *) //@endcond #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/utils.cpp000066400000000000000000000055551473346337000232140ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2017 Daniel Vrátil SPDX-License-Identifier: LGPL-2.0-or-later */ #include "utils_p.h" #include #include // To remain backwards compatible we need to (de)serialize QDateTime the way KDateTime // was (de)serialized void KCalendarCore::serializeQDateTimeAsKDateTime(QDataStream &out, const QDateTime &dt) { out << dt.date() << dt.time(); switch (dt.timeSpec()) { case Qt::UTC: out << static_cast('u'); break; case Qt::OffsetFromUTC: out << static_cast('o') << dt.offsetFromUtc(); break; case Qt::TimeZone: serializeQTimeZoneAsSpec(out, dt.timeZone()); break; case Qt::LocalTime: out << static_cast('c'); break; } const bool isDateOnly = dt.date().isValid() && !dt.time().isValid(); out << quint8(isDateOnly ? 0x01 : 0x00); } void KCalendarCore::deserializeKDateTimeAsQDateTime(QDataStream &in, QDateTime &dt) { QDate date; QTime time; quint8 ts, flags; in >> date >> time >> ts; switch (static_cast(ts)) { case 'u': dt = QDateTime(date, time, Qt::UTC); break; case 'o': { int offset; in >> offset; dt = QDateTime(date, time, Qt::OffsetFromUTC, offset); break; } case 'z': { QString tzid; in >> tzid; dt = QDateTime(date, time, QTimeZone(tzid.toUtf8())); break; } case 'c': dt = QDateTime(date, time, Qt::LocalTime); break; } // unused, we don't have a special handling for date-only QDateTime in >> flags; } void KCalendarCore::serializeQTimeZoneAsSpec(QDataStream &out, const QTimeZone &tz) { out << static_cast('z') << (tz.isValid() ? QString::fromUtf8(tz.id()) : QString()); } void KCalendarCore::deserializeSpecAsQTimeZone(QDataStream &in, QTimeZone &tz) { quint8 ts; in >> ts; switch (static_cast(ts)) { case 'u': tz = QTimeZone::utc(); return; case 'o': { int offset; in >> offset; tz = QTimeZone(offset); return; } case 'z': { QString tzid; in >> tzid; tz = QTimeZone(tzid.toUtf8()); return; } case 'c': tz = QTimeZone::systemTimeZone(); break; } } void KCalendarCore::serializeQDateTimeList(QDataStream &out, const QList &list) { out << list.size(); for (const auto &i : list) { serializeQDateTimeAsKDateTime(out, i); } } void KCalendarCore::deserializeQDateTimeList(QDataStream &in, QList &list) { int size; in >> size; list.clear(); list.reserve(size); for (int i = 0; i < size; ++i) { QDateTime dt; deserializeKDateTimeAsQDateTime(in, dt); list << dt; } } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/utils_p.h000066400000000000000000000015131473346337000231660ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2017 Daniel Vrátil SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_UTILS_H #define KCALCORE_UTILS_H #include class QDataStream; namespace KCalendarCore { /** * Helpers to retain backwards compatibility of binary serialization. */ void serializeQDateTimeAsKDateTime(QDataStream &out, const QDateTime &dt); Q_CORE_EXPORT void deserializeKDateTimeAsQDateTime(QDataStream &in, QDateTime &dt); void serializeQDateTimeList(QDataStream &out, const QList &list); void deserializeQDateTimeList(QDataStream &in, QList &list); void serializeQTimeZoneAsSpec(QDataStream &out, const QTimeZone &tz); void deserializeSpecAsQTimeZone(QDataStream &in, QTimeZone &tz); } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/vcalformat.cpp000066400000000000000000001714511473346337000242110ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the VCalFormat base class. This class implements the vCalendar format. It provides methods for loading/saving/converting vCalendar format data into the internal representation as Calendar and Incidences. @brief vCalendar format implementation. @author Preston Brown \ @author Cornelius Schumacher \ */ #include "vcalformat.h" #include "calendar.h" #include "exceptions.h" extern "C" { #include "libical/vcc.h" #include "libical/vobject.h" } #include #include #include // for .toHtmlEscaped() and Qt::mightBeRichText() #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE template void removeAllVCal(QVector> &c, const QSharedPointer &x) { if (c.count() < 1) { return; } int cnt = c.count(x); if (cnt != 1) { qCritical() << "There number of relatedTos for this incidence is " << cnt << " (there must be 1 relatedTo only)"; Q_ASSERT_X(false, "removeAllVCal", "Count is not 1."); return; } c.remove(c.indexOf(x)); } class Q_DECL_HIDDEN KCalendarCore::VCalFormat::Private { public: Calendar::Ptr mCalendar; Event::List mEventsRelate; // Events with relations Todo::List mTodosRelate; // To-dos with relations QSet mManuallyWrittenExtensionFields; // X- fields that are manually dumped }; //@endcond VCalFormat::VCalFormat() : d(new KCalendarCore::VCalFormat::Private) { } VCalFormat::~VCalFormat() { delete d; } bool VCalFormat::load(const Calendar::Ptr &calendar, const QString &fileName) { d->mCalendar = calendar; clearException(); // this is not necessarily only 1 vcal. Could be many vcals, or include // a vcard... VObject *vcal = Parse_MIME_FromFileName(const_cast(QFile::encodeName(fileName).data())); if (!vcal) { setException(new Exception(Exception::CalVersionUnknown)); return false; } // any other top-level calendar stuff should be added/initialized here // put all vobjects into their proper places auto savedTimeZoneId = d->mCalendar->timeZoneId(); populate(vcal, false, fileName); d->mCalendar->setTimeZoneId(savedTimeZoneId); // clean up from vcal API stuff cleanVObjects(vcal); cleanStrTbl(); return true; } bool VCalFormat::save(const Calendar::Ptr &calendar, const QString &fileName) { Q_UNUSED(calendar); Q_UNUSED(fileName); qWarning() << "Saving VCAL is not supported"; return false; } bool VCalFormat::fromString(const Calendar::Ptr &calendar, const QString &string, bool deleted, const QString ¬ebook) { return fromRawString(calendar, string.toUtf8(), deleted, notebook); } bool VCalFormat::fromRawString(const Calendar::Ptr &calendar, const QByteArray &string, bool deleted, const QString ¬ebook) { d->mCalendar = calendar; if (!string.size()) { return false; } VObject *vcal = Parse_MIME(string.data(), string.size()); if (!vcal) { return false; } VObjectIterator i; initPropIterator(&i, vcal); // put all vobjects into their proper places auto savedTimeZoneId = d->mCalendar->timeZoneId(); populate(vcal, deleted, notebook); d->mCalendar->setTimeZoneId(savedTimeZoneId); // clean up from vcal API stuff cleanVObjects(vcal); cleanStrTbl(); return true; } QString VCalFormat::toString(const Calendar::Ptr &calendar, const QString ¬ebook, bool deleted) { Q_UNUSED(calendar); Q_UNUSED(notebook); Q_UNUSED(deleted); qWarning() << "Exporting into VCAL is not supported"; return {}; } Todo::Ptr VCalFormat::VTodoToEvent(VObject *vtodo) { VObject *vo = nullptr; VObjectIterator voi; char *s = nullptr; Todo::Ptr anEvent(new Todo); // creation date if ((vo = isAPropertyOf(vtodo, VCDCreatedProp)) != nullptr) { anEvent->setCreated(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); } // unique id vo = isAPropertyOf(vtodo, VCUniqueStringProp); // while the UID property is preferred, it is not required. We'll use the // default Event UID if none is given. if (vo) { anEvent->setUid(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); } // last modification date if ((vo = isAPropertyOf(vtodo, VCLastModifiedProp)) != nullptr) { anEvent->setLastModified(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); } else { anEvent->setLastModified(QDateTime::currentDateTimeUtc()); } // organizer // if our extension property for the event's ORGANIZER exists, add it. if ((vo = isAPropertyOf(vtodo, ICOrganizerProp)) != nullptr) { anEvent->setOrganizer(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); } else { if (d->mCalendar->owner().name() != QLatin1String("Unknown Name")) { anEvent->setOrganizer(d->mCalendar->owner()); } } // attendees. initPropIterator(&voi, vtodo); while (moreIteration(&voi)) { vo = nextVObject(&voi); if (strcmp(vObjectName(vo), VCAttendeeProp) == 0) { Attendee a; VObject *vp; s = fakeCString(vObjectUStringZValue(vo)); QString tmpStr = QString::fromUtf8(s); deleteStr(s); tmpStr = tmpStr.simplified(); int emailPos1; if ((emailPos1 = tmpStr.indexOf(QLatin1Char('<'))) > 0) { // both email address and name int emailPos2 = tmpStr.lastIndexOf(QLatin1Char('>')); a = Attendee(tmpStr.left(emailPos1 - 1), tmpStr.mid(emailPos1 + 1, emailPos2 - (emailPos1 + 1))); } else if (tmpStr.indexOf(QLatin1Char('@')) > 0) { // just an email address a = Attendee(QString(), tmpStr); } else { // just a name // WTF??? Replacing the spaces of a name and using this as email? QString email = tmpStr.replace(QLatin1Char(' '), QLatin1Char('.')); a = Attendee(tmpStr, email); } // is there an RSVP property? if ((vp = isAPropertyOf(vo, VCRSVPProp)) != nullptr) { a.setRSVP(vObjectStringZValue(vp)); } // is there a status property? if ((vp = isAPropertyOf(vo, VCStatusProp)) != nullptr) { a.setStatus(readStatus(vObjectStringZValue(vp))); } // add the attendee anEvent->addAttendee(a); } } // description for todo if ((vo = isAPropertyOf(vtodo, VCDescriptionProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); anEvent->setDescription(QString::fromUtf8(s), Qt::mightBeRichText(QString::fromUtf8(s))); deleteStr(s); } // summary if ((vo = isAPropertyOf(vtodo, VCSummaryProp))) { s = fakeCString(vObjectUStringZValue(vo)); anEvent->setSummary(QString::fromUtf8(s), Qt::mightBeRichText(QString::fromUtf8(s))); deleteStr(s); } // location if ((vo = isAPropertyOf(vtodo, VCLocationProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); anEvent->setLocation(QString::fromUtf8(s), Qt::mightBeRichText(QString::fromUtf8(s))); deleteStr(s); } // completed // was: status if ((vo = isAPropertyOf(vtodo, VCStatusProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); if (s && strcmp(s, "COMPLETED") == 0) { anEvent->setCompleted(true); } else { anEvent->setCompleted(false); } deleteStr(s); } else { anEvent->setCompleted(false); } // completion date if ((vo = isAPropertyOf(vtodo, VCCompletedProp)) != nullptr) { anEvent->setCompleted(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); } // priority if ((vo = isAPropertyOf(vtodo, VCPriorityProp))) { s = fakeCString(vObjectUStringZValue(vo)); if (s) { anEvent->setPriority(atoi(s)); deleteStr(s); } } anEvent->setAllDay(false); // due date if ((vo = isAPropertyOf(vtodo, VCDueProp)) != nullptr) { anEvent->setDtDue(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); if (anEvent->dtDue().time().hour() == 0 && anEvent->dtDue().time().minute() == 0 && anEvent->dtDue().time().second() == 0) { anEvent->setAllDay(true); } } else { anEvent->setDtDue(QDateTime()); } // start time if ((vo = isAPropertyOf(vtodo, VCDTstartProp)) != nullptr) { anEvent->setDtStart(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); if (anEvent->dtStart().time().hour() == 0 && anEvent->dtStart().time().minute() == 0 && anEvent->dtStart().time().second() == 0) { anEvent->setAllDay(true); } } else { anEvent->setDtStart(QDateTime()); } // recurrence stuff if ((vo = isAPropertyOf(vtodo, VCRRuleProp)) != nullptr) { uint recurrenceType = Recurrence::rNone; int recurrenceTypeAbbrLen = 0; QString tmpStr = (QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); tmpStr = tmpStr.simplified(); const int tmpStrLen = tmpStr.length(); if (tmpStrLen > 0) { tmpStr = tmpStr.toUpper(); // first, read the type of the recurrence recurrenceTypeAbbrLen = 1; if (tmpStr.at(0) == QLatin1Char('D')) { recurrenceType = Recurrence::rDaily; } else if (tmpStr.at(0) == QLatin1Char('W')) { recurrenceType = Recurrence::rWeekly; } else if (tmpStrLen > 1) { recurrenceTypeAbbrLen = 2; if (tmpStr.leftRef(2) == QLatin1String("MP")) { recurrenceType = Recurrence::rMonthlyPos; } else if (tmpStr.leftRef(2) == QLatin1String("MD")) { recurrenceType = Recurrence::rMonthlyDay; } else if (tmpStr.leftRef(2) == QLatin1String("YM")) { recurrenceType = Recurrence::rYearlyMonth; } else if (tmpStr.leftRef(2) == QLatin1String("YD")) { recurrenceType = Recurrence::rYearlyDay; } } } if (recurrenceType != Recurrence::rNone) { // Immediately after the type is the frequency int index = tmpStr.indexOf(QLatin1Char(' ')); int last = tmpStr.lastIndexOf(QLatin1Char(' ')) + 1; // find last entry int rFreq = tmpStr.midRef(recurrenceTypeAbbrLen, (index - 1)).toInt(); ++index; // advance to beginning of stuff after freq // Read the type-specific settings switch (recurrenceType) { case Recurrence::rDaily: anEvent->recurrence()->setDaily(rFreq); break; case Recurrence::rWeekly: { QBitArray qba(7); QString dayStr; if (index == last) { // e.g. W1 #0 qba.setBit(anEvent->dtStart().date().dayOfWeek() - 1); } else { // e.g. W1 SU #0 while (index < last) { dayStr = tmpStr.mid(index, 3); int dayNum = numFromDay(dayStr); if (dayNum >= 0) { qba.setBit(dayNum); } index += 3; // advance to next day, or possibly "#" } } anEvent->recurrence()->setWeekly(rFreq, qba); break; } case Recurrence::rMonthlyPos: { anEvent->recurrence()->setMonthly(rFreq); QBitArray qba(7); short tmpPos; if (index == last) { // e.g. MP1 #0 tmpPos = anEvent->dtStart().date().day() / 7 + 1; if (tmpPos == 5) { tmpPos = -1; } qba.setBit(anEvent->dtStart().date().dayOfWeek() - 1); anEvent->recurrence()->addMonthlyPos(tmpPos, qba); } else { // e.g. MP1 1+ SU #0 while (index < last) { tmpPos = tmpStr.mid(index, 1).toShort(); index += 1; if (tmpStr.mid(index, 1) == QLatin1String("-")) { // convert tmpPos to negative tmpPos = 0 - tmpPos; } index += 2; // advance to day(s) while (numFromDay(tmpStr.mid(index, 3)) >= 0) { int dayNum = numFromDay(tmpStr.mid(index, 3)); qba.setBit(dayNum); index += 3; // advance to next day, or possibly pos or "#" } anEvent->recurrence()->addMonthlyPos(tmpPos, qba); qba.detach(); qba.fill(false); // clear out } // while != "#" } break; } case Recurrence::rMonthlyDay: anEvent->recurrence()->setMonthly(rFreq); if (index == last) { // e.g. MD1 #0 short tmpDay = anEvent->dtStart().date().day(); anEvent->recurrence()->addMonthlyDate(tmpDay); } else { // e.g. MD1 3 #0 while (index < last) { int index2 = tmpStr.indexOf(QLatin1Char(' '), index); if ((tmpStr.mid((index2 - 1), 1) == QLatin1String("-")) || (tmpStr.mid((index2 - 1), 1) == QLatin1String("+"))) { index2 = index2 - 1; } short tmpDay = tmpStr.mid(index, (index2 - index)).toShort(); index = index2; if (tmpStr.mid(index, 1) == QLatin1String("-")) { tmpDay = 0 - tmpDay; } index += 2; // advance the index; anEvent->recurrence()->addMonthlyDate(tmpDay); } // while != # } break; case Recurrence::rYearlyMonth: anEvent->recurrence()->setYearly(rFreq); if (index == last) { // e.g. YM1 #0 short tmpMonth = anEvent->dtStart().date().month(); anEvent->recurrence()->addYearlyMonth(tmpMonth); } else { // e.g. YM1 3 #0 while (index < last) { int index2 = tmpStr.indexOf(QLatin1Char(' '), index); short tmpMonth = tmpStr.mid(index, (index2 - index)).toShort(); index = index2 + 1; anEvent->recurrence()->addYearlyMonth(tmpMonth); } // while != # } break; case Recurrence::rYearlyDay: anEvent->recurrence()->setYearly(rFreq); if (index == last) { // e.g. YD1 #0 short tmpDay = anEvent->dtStart().date().dayOfYear(); anEvent->recurrence()->addYearlyDay(tmpDay); } else { // e.g. YD1 123 #0 while (index < last) { int index2 = tmpStr.indexOf(QLatin1Char(' '), index); short tmpDay = tmpStr.mid(index, (index2 - index)).toShort(); index = index2 + 1; anEvent->recurrence()->addYearlyDay(tmpDay); } // while != # } break; default: break; } // find the last field, which is either the duration or the end date index = last; if (tmpStr.mid(index, 1) == QLatin1String("#")) { // Nr of occurrences index++; int rDuration = tmpStr.midRef(index, tmpStr.length() - index).toInt(); if (rDuration > 0) { anEvent->recurrence()->setDuration(rDuration); } } else if (tmpStr.indexOf(QLatin1Char('T'), index) != -1) { QDateTime rEndDate = ISOToQDateTime(tmpStr.mid(index, tmpStr.length() - index)); anEvent->recurrence()->setEndDateTime(rEndDate); } } else { qDebug() << "we don't understand this type of recurrence!"; } // if known recurrence type } // repeats // recurrence exceptions if ((vo = isAPropertyOf(vtodo, VCExpDateProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); QStringList exDates = QString::fromUtf8(s).split(QLatin1Char(',')); QStringList::ConstIterator it; for (it = exDates.constBegin(); it != exDates.constEnd(); ++it) { QDateTime exDate = ISOToQDateTime(*it); if (exDate.time().hour() == 0 && exDate.time().minute() == 0 && exDate.time().second() == 0) { anEvent->recurrence()->addExDate(ISOToQDate(*it)); } else { anEvent->recurrence()->addExDateTime(exDate); } } deleteStr(s); } // alarm stuff if ((vo = isAPropertyOf(vtodo, VCDAlarmProp))) { Alarm::Ptr alarm; VObject *a = isAPropertyOf(vo, VCRunTimeProp); VObject *b = isAPropertyOf(vo, VCDisplayStringProp); if (a || b) { alarm = anEvent->newAlarm(); if (a) { alarm->setTime(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(a))))); deleteStr(s); } alarm->setEnabled(true); if (b) { s = fakeCString(vObjectUStringZValue(b)); alarm->setDisplayAlarm(QString::fromUtf8(s)); deleteStr(s); } else { alarm->setDisplayAlarm(QString()); } } } if ((vo = isAPropertyOf(vtodo, VCAAlarmProp))) { Alarm::Ptr alarm; VObject *a; VObject *b; a = isAPropertyOf(vo, VCRunTimeProp); b = isAPropertyOf(vo, VCAudioContentProp); if (a || b) { alarm = anEvent->newAlarm(); if (a) { alarm->setTime(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(a))))); deleteStr(s); } alarm->setEnabled(true); if (b) { s = fakeCString(vObjectUStringZValue(b)); alarm->setAudioAlarm(QFile::decodeName(s)); deleteStr(s); } else { alarm->setAudioAlarm(QString()); } } } if ((vo = isAPropertyOf(vtodo, VCPAlarmProp))) { Alarm::Ptr alarm; VObject *a = isAPropertyOf(vo, VCRunTimeProp); VObject *b = isAPropertyOf(vo, VCProcedureNameProp); if (a || b) { alarm = anEvent->newAlarm(); if (a) { alarm->setTime(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(a))))); deleteStr(s); } alarm->setEnabled(true); if (b) { s = fakeCString(vObjectUStringZValue(b)); alarm->setProcedureAlarm(QFile::decodeName(s)); deleteStr(s); } else { alarm->setProcedureAlarm(QString()); } } } // related todo if ((vo = isAPropertyOf(vtodo, VCRelatedToProp)) != nullptr) { anEvent->setRelatedTo(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); d->mTodosRelate.append(anEvent); } // secrecy Incidence::Secrecy secrecy = Incidence::SecrecyPublic; if ((vo = isAPropertyOf(vtodo, VCClassProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); if (s && strcmp(s, "PRIVATE") == 0) { secrecy = Incidence::SecrecyPrivate; } else if (s && strcmp(s, "CONFIDENTIAL") == 0) { secrecy = Incidence::SecrecyConfidential; } deleteStr(s); } anEvent->setSecrecy(secrecy); // categories if ((vo = isAPropertyOf(vtodo, VCCategoriesProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); QString categories = QString::fromUtf8(s); deleteStr(s); QStringList tmpStrList = categories.split(QLatin1Char(';')); anEvent->setCategories(tmpStrList); } return anEvent; } Event::Ptr VCalFormat::VEventToEvent(VObject *vevent) { VObject *vo = nullptr; VObjectIterator voi; char *s = nullptr; Event::Ptr anEvent(new Event); // creation date if ((vo = isAPropertyOf(vevent, VCDCreatedProp)) != nullptr) { anEvent->setCreated(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); } // unique id vo = isAPropertyOf(vevent, VCUniqueStringProp); // while the UID property is preferred, it is not required. We'll use the // default Event UID if none is given. if (vo) { anEvent->setUid(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); } // revision // again NSCAL doesn't give us much to work with, so we improvise... anEvent->setRevision(0); if ((vo = isAPropertyOf(vevent, VCSequenceProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); if (s) { anEvent->setRevision(atoi(s)); deleteStr(s); } } // last modification date if ((vo = isAPropertyOf(vevent, VCLastModifiedProp)) != nullptr) { anEvent->setLastModified(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); } else { anEvent->setLastModified(QDateTime::currentDateTimeUtc()); } // organizer // if our extension property for the event's ORGANIZER exists, add it. if ((vo = isAPropertyOf(vevent, ICOrganizerProp)) != nullptr) { // FIXME: Also use the full name, not just the email address anEvent->setOrganizer(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); } else { if (d->mCalendar->owner().name() != QLatin1String("Unknown Name")) { anEvent->setOrganizer(d->mCalendar->owner()); } } // deal with attendees. initPropIterator(&voi, vevent); while (moreIteration(&voi)) { vo = nextVObject(&voi); if (strcmp(vObjectName(vo), VCAttendeeProp) == 0) { Attendee a; VObject *vp = nullptr; s = fakeCString(vObjectUStringZValue(vo)); QString tmpStr = QString::fromUtf8(s); deleteStr(s); tmpStr = tmpStr.simplified(); int emailPos1; if ((emailPos1 = tmpStr.indexOf(QLatin1Char('<'))) > 0) { // both email address and name int emailPos2 = tmpStr.lastIndexOf(QLatin1Char('>')); a = Attendee(tmpStr.left(emailPos1 - 1), tmpStr.mid(emailPos1 + 1, emailPos2 - (emailPos1 + 1))); } else if (tmpStr.indexOf(QLatin1Char('@')) > 0) { // just an email address a = Attendee(QString(), tmpStr); } else { // just a name QString email = tmpStr.replace(QLatin1Char(' '), QLatin1Char('.')); a = Attendee(tmpStr, email); } // is there an RSVP property? if ((vp = isAPropertyOf(vo, VCRSVPProp)) != nullptr) { a.setRSVP(vObjectStringZValue(vp)); } // is there a status property? if ((vp = isAPropertyOf(vo, VCStatusProp)) != nullptr) { a.setStatus(readStatus(vObjectStringZValue(vp))); } // add the attendee anEvent->addAttendee(a); } } // This isn't strictly true. An event that doesn't have a start time // or an end time isn't all-day, it has an anchor in time but it doesn't // "take up" any time. /*if ((isAPropertyOf(vevent, VCDTstartProp) == 0) || (isAPropertyOf(vevent, VCDTendProp) == 0)) { anEvent->setAllDay(true); } else { }*/ anEvent->setAllDay(false); // start time if ((vo = isAPropertyOf(vevent, VCDTstartProp)) != nullptr) { anEvent->setDtStart(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); if (anEvent->dtStart().time().hour() == 0 && anEvent->dtStart().time().minute() == 0 && anEvent->dtStart().time().second() == 0) { anEvent->setAllDay(true); } } // stop time if ((vo = isAPropertyOf(vevent, VCDTendProp)) != nullptr) { anEvent->setDtEnd(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); if (anEvent->dtEnd().time().hour() == 0 && anEvent->dtEnd().time().minute() == 0 && anEvent->dtEnd().time().second() == 0) { anEvent->setAllDay(true); } } // at this point, there should be at least a start or end time. // fix up for events that take up no time but have a time associated if (!isAPropertyOf(vevent, VCDTstartProp)) { anEvent->setDtStart(anEvent->dtEnd()); } if (!isAPropertyOf(vevent, VCDTendProp)) { anEvent->setDtEnd(anEvent->dtStart()); } /////////////////////////////////////////////////////////////////////////// // recurrence stuff if ((vo = isAPropertyOf(vevent, VCRRuleProp)) != nullptr) { uint recurrenceType = Recurrence::rNone; int recurrenceTypeAbbrLen = 0; QString tmpStr = (QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); tmpStr = tmpStr.simplified(); const int tmpStrLen = tmpStr.length(); if (tmpStrLen > 0) { tmpStr = tmpStr.toUpper(); // first, read the type of the recurrence recurrenceTypeAbbrLen = 1; if (tmpStr.at(0) == QLatin1Char('D')) { recurrenceType = Recurrence::rDaily; } else if (tmpStr.at(0) == QLatin1Char('W')) { recurrenceType = Recurrence::rWeekly; } else if (tmpStrLen > 1) { recurrenceTypeAbbrLen = 2; if (tmpStr.leftRef(2) == QLatin1String("MP")) { recurrenceType = Recurrence::rMonthlyPos; } else if (tmpStr.leftRef(2) == QLatin1String("MD")) { recurrenceType = Recurrence::rMonthlyDay; } else if (tmpStr.leftRef(2) == QLatin1String("YM")) { recurrenceType = Recurrence::rYearlyMonth; } else if (tmpStr.leftRef(2) == QLatin1String("YD")) { recurrenceType = Recurrence::rYearlyDay; } } } if (recurrenceType != Recurrence::rNone) { // Immediately after the type is the frequency int index = tmpStr.indexOf(QLatin1Char(' ')); int last = tmpStr.lastIndexOf(QLatin1Char(' ')) + 1; // find last entry int rFreq = tmpStr.midRef(recurrenceTypeAbbrLen, (index - 1)).toInt(); ++index; // advance to beginning of stuff after freq // Read the type-specific settings switch (recurrenceType) { case Recurrence::rDaily: anEvent->recurrence()->setDaily(rFreq); break; case Recurrence::rWeekly: { QBitArray qba(7); QString dayStr; if (index == last) { // e.g. W1 #0 qba.setBit(anEvent->dtStart().date().dayOfWeek() - 1); } else { // e.g. W1 SU #0 while (index < last) { dayStr = tmpStr.mid(index, 3); int dayNum = numFromDay(dayStr); if (dayNum >= 0) { qba.setBit(dayNum); } index += 3; // advance to next day, or possibly "#" } } anEvent->recurrence()->setWeekly(rFreq, qba); break; } case Recurrence::rMonthlyPos: { anEvent->recurrence()->setMonthly(rFreq); QBitArray qba(7); short tmpPos; if (index == last) { // e.g. MP1 #0 tmpPos = anEvent->dtStart().date().day() / 7 + 1; if (tmpPos == 5) { tmpPos = -1; } qba.setBit(anEvent->dtStart().date().dayOfWeek() - 1); anEvent->recurrence()->addMonthlyPos(tmpPos, qba); } else { // e.g. MP1 1+ SU #0 while (index < last) { tmpPos = tmpStr.mid(index, 1).toShort(); index += 1; if (tmpStr.mid(index, 1) == QLatin1String("-")) { // convert tmpPos to negative tmpPos = 0 - tmpPos; } index += 2; // advance to day(s) while (numFromDay(tmpStr.mid(index, 3)) >= 0) { int dayNum = numFromDay(tmpStr.mid(index, 3)); qba.setBit(dayNum); index += 3; // advance to next day, or possibly pos or "#" } anEvent->recurrence()->addMonthlyPos(tmpPos, qba); qba.detach(); qba.fill(false); // clear out } // while != "#" } break; } case Recurrence::rMonthlyDay: anEvent->recurrence()->setMonthly(rFreq); if (index == last) { // e.g. MD1 #0 short tmpDay = anEvent->dtStart().date().day(); anEvent->recurrence()->addMonthlyDate(tmpDay); } else { // e.g. MD1 3 #0 while (index < last) { int index2 = tmpStr.indexOf(QLatin1Char(' '), index); if ((tmpStr.mid((index2 - 1), 1) == QLatin1String("-")) || (tmpStr.mid((index2 - 1), 1) == QLatin1String("+"))) { index2 = index2 - 1; } short tmpDay = tmpStr.mid(index, (index2 - index)).toShort(); index = index2; if (tmpStr.mid(index, 1) == QLatin1String("-")) { tmpDay = 0 - tmpDay; } index += 2; // advance the index; anEvent->recurrence()->addMonthlyDate(tmpDay); } // while != # } break; case Recurrence::rYearlyMonth: anEvent->recurrence()->setYearly(rFreq); if (index == last) { // e.g. YM1 #0 short tmpMonth = anEvent->dtStart().date().month(); anEvent->recurrence()->addYearlyMonth(tmpMonth); } else { // e.g. YM1 3 #0 while (index < last) { int index2 = tmpStr.indexOf(QLatin1Char(' '), index); short tmpMonth = tmpStr.mid(index, (index2 - index)).toShort(); index = index2 + 1; anEvent->recurrence()->addYearlyMonth(tmpMonth); } // while != # } break; case Recurrence::rYearlyDay: anEvent->recurrence()->setYearly(rFreq); if (index == last) { // e.g. YD1 #0 const int tmpDay = anEvent->dtStart().date().dayOfYear(); anEvent->recurrence()->addYearlyDay(tmpDay); } else { // e.g. YD1 123 #0 while (index < last) { int index2 = tmpStr.indexOf(QLatin1Char(' '), index); short tmpDay = tmpStr.mid(index, (index2 - index)).toShort(); index = index2 + 1; anEvent->recurrence()->addYearlyDay(tmpDay); } // while != # } break; default: break; } // find the last field, which is either the duration or the end date index = last; if (tmpStr.mid(index, 1) == QLatin1String("#")) { // Nr of occurrences index++; int rDuration = tmpStr.midRef(index, tmpStr.length() - index).toInt(); if (rDuration > 0) { anEvent->recurrence()->setDuration(rDuration); } } else if (tmpStr.indexOf(QLatin1Char('T'), index) != -1) { QDateTime rEndDate = ISOToQDateTime(tmpStr.mid(index, tmpStr.length() - index)); anEvent->recurrence()->setEndDateTime(rEndDate); } // anEvent->recurrence()->dump(); } else { qDebug() << "we don't understand this type of recurrence!"; } // if known recurrence type } // repeats // recurrence exceptions if ((vo = isAPropertyOf(vevent, VCExpDateProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); QStringList exDates = QString::fromUtf8(s).split(QLatin1Char(',')); QStringList::ConstIterator it; for (it = exDates.constBegin(); it != exDates.constEnd(); ++it) { QDateTime exDate = ISOToQDateTime(*it); if (exDate.time().hour() == 0 && exDate.time().minute() == 0 && exDate.time().second() == 0) { anEvent->recurrence()->addExDate(ISOToQDate(*it)); } else { anEvent->recurrence()->addExDateTime(exDate); } } deleteStr(s); } // summary if ((vo = isAPropertyOf(vevent, VCSummaryProp))) { s = fakeCString(vObjectUStringZValue(vo)); anEvent->setSummary(QString::fromUtf8(s), Qt::mightBeRichText(QString::fromUtf8(s))); deleteStr(s); } // description if ((vo = isAPropertyOf(vevent, VCDescriptionProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); bool isRich = Qt::mightBeRichText(QString::fromUtf8(s)); if (!anEvent->description().isEmpty()) { anEvent->setDescription(anEvent->description() + QLatin1Char('\n') + QString::fromUtf8(s), isRich); } else { anEvent->setDescription(QString::fromUtf8(s), isRich); } deleteStr(s); } // location if ((vo = isAPropertyOf(vevent, VCLocationProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); anEvent->setLocation(QString::fromUtf8(s), Qt::mightBeRichText(QString::fromUtf8(s))); deleteStr(s); } // some stupid vCal exporters ignore the standard and use Description // instead of Summary for the default field. Correct for this. if (anEvent->summary().isEmpty() && !(anEvent->description().isEmpty())) { QString tmpStr = anEvent->description().simplified(); anEvent->setDescription(QString()); anEvent->setSummary(tmpStr); } #if 0 // status if ((vo = isAPropertyOf(vevent, VCStatusProp)) != 0) { QString tmpStr(s = fakeCString(vObjectUStringZValue(vo))); deleteStr(s); // TODO: Define Event status // anEvent->setStatus( tmpStr ); } else { // anEvent->setStatus( "NEEDS ACTION" ); } #endif // secrecy Incidence::Secrecy secrecy = Incidence::SecrecyPublic; if ((vo = isAPropertyOf(vevent, VCClassProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); if (s && strcmp(s, "PRIVATE") == 0) { secrecy = Incidence::SecrecyPrivate; } else if (s && strcmp(s, "CONFIDENTIAL") == 0) { secrecy = Incidence::SecrecyConfidential; } deleteStr(s); } anEvent->setSecrecy(secrecy); // categories if ((vo = isAPropertyOf(vevent, VCCategoriesProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); QString categories = QString::fromUtf8(s); deleteStr(s); QStringList tmpStrList = categories.split(QLatin1Char(',')); anEvent->setCategories(tmpStrList); } // attachments initPropIterator(&voi, vevent); while (moreIteration(&voi)) { vo = nextVObject(&voi); if (strcmp(vObjectName(vo), VCAttachProp) == 0) { s = fakeCString(vObjectUStringZValue(vo)); anEvent->addAttachment(Attachment(QString::fromUtf8(s))); deleteStr(s); } } // resources if ((vo = isAPropertyOf(vevent, VCResourcesProp)) != nullptr) { QString resources = (QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); QStringList tmpStrList = resources.split(QLatin1Char(';')); anEvent->setResources(tmpStrList); } // alarm stuff if ((vo = isAPropertyOf(vevent, VCDAlarmProp))) { Alarm::Ptr alarm; VObject *a = isAPropertyOf(vo, VCRunTimeProp); VObject *b = isAPropertyOf(vo, VCDisplayStringProp); if (a || b) { alarm = anEvent->newAlarm(); if (a) { alarm->setTime(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(a))))); deleteStr(s); } alarm->setEnabled(true); if (b) { s = fakeCString(vObjectUStringZValue(b)); alarm->setDisplayAlarm(QString::fromUtf8(s)); deleteStr(s); } else { alarm->setDisplayAlarm(QString()); } } } if ((vo = isAPropertyOf(vevent, VCAAlarmProp))) { Alarm::Ptr alarm; VObject *a; VObject *b; a = isAPropertyOf(vo, VCRunTimeProp); b = isAPropertyOf(vo, VCAudioContentProp); if (a || b) { alarm = anEvent->newAlarm(); if (a) { alarm->setTime(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(a))))); deleteStr(s); } alarm->setEnabled(true); if (b) { s = fakeCString(vObjectUStringZValue(b)); alarm->setAudioAlarm(QFile::decodeName(s)); deleteStr(s); } else { alarm->setAudioAlarm(QString()); } } } if ((vo = isAPropertyOf(vevent, VCPAlarmProp))) { Alarm::Ptr alarm; VObject *a; VObject *b; a = isAPropertyOf(vo, VCRunTimeProp); b = isAPropertyOf(vo, VCProcedureNameProp); if (a || b) { alarm = anEvent->newAlarm(); if (a) { alarm->setTime(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(a))))); deleteStr(s); } alarm->setEnabled(true); if (b) { s = fakeCString(vObjectUStringZValue(b)); alarm->setProcedureAlarm(QFile::decodeName(s)); deleteStr(s); } else { alarm->setProcedureAlarm(QString()); } } } // priority if ((vo = isAPropertyOf(vevent, VCPriorityProp))) { s = fakeCString(vObjectUStringZValue(vo)); if (s) { anEvent->setPriority(atoi(s)); deleteStr(s); } } // transparency if ((vo = isAPropertyOf(vevent, VCTranspProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); if (s) { int i = atoi(s); anEvent->setTransparency(i == 1 ? Event::Transparent : Event::Opaque); deleteStr(s); } } // related event if ((vo = isAPropertyOf(vevent, VCRelatedToProp)) != nullptr) { anEvent->setRelatedTo(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); d->mEventsRelate.append(anEvent); } /* Rest of the custom properties */ readCustomProperties(vevent, anEvent); return anEvent; } QString VCalFormat::parseTZ(const QByteArray &timezone) const { // qDebug() << timezone; QString pZone = QString::fromUtf8(timezone.mid(timezone.indexOf("TZID:VCAL") + 9)); return pZone.mid(0, pZone.indexOf(QLatin1Char('\n'))); } QString VCalFormat::parseDst(QByteArray &timezone) const { if (!timezone.contains("BEGIN:DAYLIGHT")) { return QString(); } timezone = timezone.mid(timezone.indexOf("BEGIN:DAYLIGHT")); timezone = timezone.mid(timezone.indexOf("TZNAME:") + 7); QString sStart = QString::fromUtf8(timezone.mid(0, (timezone.indexOf("COMMENT:")))); sStart.chop(2); timezone = timezone.mid(timezone.indexOf("TZOFFSETTO:") + 11); QString sOffset = QString::fromUtf8(timezone.mid(0, (timezone.indexOf("DTSTART:")))); sOffset.chop(2); sOffset.insert(3, QLatin1Char(':')); timezone = timezone.mid(timezone.indexOf("TZNAME:") + 7); QString sEnd = QString::fromUtf8(timezone.mid(0, (timezone.indexOf("COMMENT:")))); sEnd.chop(2); return QStringLiteral("TRUE;") + sOffset + QLatin1Char(';') + sStart + QLatin1Char(';') + sEnd + QLatin1String(";;"); } QString VCalFormat::qDateToISO(const QDate &qd) { if (!qd.isValid()) { return QString(); } return QString::asprintf("%.2d%.2d%.2d", qd.year(), qd.month(), qd.day()); } QString VCalFormat::qDateTimeToISO(const QDateTime &dt, bool zulu) { if (!dt.isValid()) { return QString(); } QDateTime tmpDT; if (zulu) { tmpDT = dt.toUTC(); } else { tmpDT = dt.toTimeZone(d->mCalendar->timeZone()); } QString tmpStr = QString::asprintf("%.2d%.2d%.2dT%.2d%.2d%.2d", tmpDT.date().year(), tmpDT.date().month(), tmpDT.date().day(), tmpDT.time().hour(), tmpDT.time().minute(), tmpDT.time().second()); if (zulu || dt.timeZone() == QTimeZone::utc()) { tmpStr += QLatin1Char('Z'); } return tmpStr; } QDateTime VCalFormat::ISOToQDateTime(const QString &dtStr) { QDate tmpDate; QTime tmpTime; QString tmpStr; int year, month, day, hour, minute, second; tmpStr = dtStr; year = tmpStr.leftRef(4).toInt(); month = tmpStr.midRef(4, 2).toInt(); day = tmpStr.midRef(6, 2).toInt(); hour = tmpStr.midRef(9, 2).toInt(); minute = tmpStr.midRef(11, 2).toInt(); second = tmpStr.midRef(13, 2).toInt(); tmpDate.setDate(year, month, day); tmpTime.setHMS(hour, minute, second); if (tmpDate.isValid() && tmpTime.isValid()) { // correct for GMT if string is in Zulu format if (dtStr.at(dtStr.length() - 1) == QLatin1Char('Z')) { return QDateTime(tmpDate, tmpTime, Qt::UTC); } else { return QDateTime(tmpDate, tmpTime, d->mCalendar->timeZone()); } } else { return QDateTime(); } } QDate VCalFormat::ISOToQDate(const QString &dateStr) { int year, month, day; year = dateStr.leftRef(4).toInt(); month = dateStr.midRef(4, 2).toInt(); day = dateStr.midRef(6, 2).toInt(); return QDate(year, month, day); } bool VCalFormat::parseTZOffsetISO8601(const QString &s, int &result) { // ISO8601 format(s): // +- hh : mm // +- hh mm // +- hh // We also accept broken one without + int mod = 1; int v = 0; QString str = s.trimmed(); int ofs = 0; result = 0; // Check for end if (str.size() <= ofs) { return false; } if (str[ofs] == QLatin1Char('-')) { mod = -1; ofs++; } else if (str[ofs] == QLatin1Char('+')) { ofs++; } if (str.size() <= ofs) { return false; } // Make sure next two values are numbers bool ok; if (str.size() < (ofs + 2)) { return false; } v = str.midRef(ofs, 2).toInt(&ok) * 60; if (!ok) { return false; } ofs += 2; if (str.size() > ofs) { if (str[ofs] == QLatin1Char(':')) { ofs++; } if (str.size() > ofs) { if (str.size() < (ofs + 2)) { return false; } v += str.midRef(ofs, 2).toInt(&ok); if (!ok) { return false; } } } result = v * mod * 60; return true; } // take a raw vcalendar (i.e. from a file on disk, clipboard, etc. etc. // and break it down from it's tree-like format into the dictionary format // that is used internally in the VCalFormat. void VCalFormat::populate(VObject *vcal, bool deleted, const QString ¬ebook) { Q_UNUSED(notebook); // this function will populate the caldict dictionary and other event // lists. It turns vevents into Events and then inserts them. VObjectIterator i; VObject *curVO; Event::Ptr anEvent; bool hasTimeZone = false; // The calendar came with a TZ and not UTC QTimeZone previousZone; // If we add a new TZ we should leave the spec as it was before if ((curVO = isAPropertyOf(vcal, ICMethodProp)) != nullptr) { char *methodType = fakeCString(vObjectUStringZValue(curVO)); // qDebug() << "This calendar is an iTIP transaction of type '" << methodType << "'"; deleteStr(methodType); } // warn the user that we might have trouble reading non-known calendar. if ((curVO = isAPropertyOf(vcal, VCProdIdProp)) != nullptr) { char *s = fakeCString(vObjectUStringZValue(curVO)); if (!s || strcmp(productId().toUtf8().constData(), s) != 0) { qDebug() << "This vCalendar file was not created by KOrganizer or" << "any other product we support. Loading anyway..."; } setLoadedProductId(QString::fromUtf8(s)); deleteStr(s); } // warn the user we might have trouble reading this unknown version. if ((curVO = isAPropertyOf(vcal, VCVersionProp)) != nullptr) { char *s = fakeCString(vObjectUStringZValue(curVO)); if (!s || strcmp(_VCAL_VERSION, s) != 0) { qDebug() << "This vCalendar file has version" << s << "We only support" << _VCAL_VERSION; } deleteStr(s); } // set the time zone (this is a property of the view, so just discard!) if ((curVO = isAPropertyOf(vcal, VCTimeZoneProp)) != nullptr) { char *s = fakeCString(vObjectUStringZValue(curVO)); QString ts = QString::fromUtf8(s); QString name = QLatin1String("VCAL") + ts; deleteStr(s); // TODO: While using the timezone-offset + vcal as timezone is is // most likely unique, we should REALLY actually create something // like vcal-tzoffset-daylightoffsets, or better yet, // vcal-hash QStringList tzList; QString tz; int utcOffset; int utcOffsetDst; if (parseTZOffsetISO8601(ts, utcOffset)) { // qDebug() << "got standard offset" << ts << utcOffset; // standard from tz // starting date for now 01011900 QDateTime dt = QDateTime(QDateTime(QDate(1900, 1, 1), QTime(0, 0, 0))); tz = QStringLiteral("STD;%1;false;%2").arg(QString::number(utcOffset), dt.toString()); tzList.append(tz); // go through all the daylight tags initPropIterator(&i, vcal); while (moreIteration(&i)) { curVO = nextVObject(&i); if (strcmp(vObjectName(curVO), VCDayLightProp) == 0) { char *s = fakeCString(vObjectUStringZValue(curVO)); QString dst = QLatin1String(s); QStringList argl = dst.split(QLatin1Char(',')); deleteStr(s); // Too short -> not interesting if (argl.size() < 4) { continue; } // We don't care about the non-DST periods if (argl[0] != QLatin1String("TRUE")) { continue; } if (parseTZOffsetISO8601(argl[1], utcOffsetDst)) { // qDebug() << "got DST offset" << argl[1] << utcOffsetDst; // standard QString strEndDate = argl[3]; QDateTime endDate = ISOToQDateTime(strEndDate); // daylight QString strStartDate = argl[2]; QDateTime startDate = ISOToQDateTime(strStartDate); QString strRealEndDate = strEndDate; QString strRealStartDate = strStartDate; QDateTime realEndDate = endDate; QDateTime realStartDate = startDate; // if we get dates for some reason in wrong order, earlier is used for dst if (endDate < startDate) { strRealEndDate = strStartDate; strRealStartDate = strEndDate; realEndDate = startDate; realStartDate = endDate; } tz = QStringLiteral("%1;%2;false;%3").arg(strRealEndDate, QString::number(utcOffset), realEndDate.toString()); tzList.append(tz); tz = QStringLiteral("%1;%2;true;%3").arg(strRealStartDate, QString::number(utcOffsetDst), realStartDate.toString()); tzList.append(tz); } else { qDebug() << "unable to parse dst" << argl[1]; } } } if (!QTimeZone::isTimeZoneIdAvailable(name.toLatin1())) { qDebug() << "zone is not valid, parsing error" << tzList; } else { previousZone = d->mCalendar->timeZone(); d->mCalendar->setTimeZoneId(name.toUtf8()); hasTimeZone = true; } } else { qDebug() << "unable to parse tzoffset" << ts; } } // Store all events with a relatedTo property in a list for post-processing d->mEventsRelate.clear(); d->mTodosRelate.clear(); initPropIterator(&i, vcal); // go through all the vobjects in the vcal while (moreIteration(&i)) { curVO = nextVObject(&i); /************************************************************************/ // now, check to see that the object is an event or todo. if (strcmp(vObjectName(curVO), VCEventProp) == 0) { if (!isAPropertyOf(curVO, VCDTstartProp) && !isAPropertyOf(curVO, VCDTendProp)) { qDebug() << "found a VEvent with no DTSTART and no DTEND! Skipping..."; goto SKIP; } anEvent = VEventToEvent(curVO); if (anEvent) { if (hasTimeZone && !anEvent->allDay() && anEvent->dtStart().timeZone() == QTimeZone::utc()) { // This sounds stupid but is how others are doing it, so here // we go. If there is a TZ in the VCALENDAR even if the dtStart // and dtend are in UTC, clients interpret it using also the TZ defined // in the Calendar. I know it sounds braindead but oh well int utcOffSet = anEvent->dtStart().offsetFromUtc(); QDateTime dtStart(anEvent->dtStart().addSecs(utcOffSet)); dtStart.setTimeZone(d->mCalendar->timeZone()); QDateTime dtEnd(anEvent->dtEnd().addSecs(utcOffSet)); dtEnd.setTimeZone(d->mCalendar->timeZone()); anEvent->setDtStart(dtStart); anEvent->setDtEnd(dtEnd); } Event::Ptr old = !anEvent->hasRecurrenceId() ? d->mCalendar->event(anEvent->uid()) : d->mCalendar->event(anEvent->uid(), anEvent->recurrenceId()); if (old) { if (deleted) { d->mCalendar->deleteEvent(old); // move old to deleted removeAllVCal(d->mEventsRelate, old); } else if (anEvent->revision() > old->revision()) { d->mCalendar->deleteEvent(old); // move old to deleted removeAllVCal(d->mEventsRelate, old); d->mCalendar->addEvent(anEvent); // and replace it with this one } } else if (deleted) { old = !anEvent->hasRecurrenceId() ? d->mCalendar->deletedEvent(anEvent->uid()) : d->mCalendar->deletedEvent(anEvent->uid(), anEvent->recurrenceId()); if (!old) { d->mCalendar->addEvent(anEvent); // add this one d->mCalendar->deleteEvent(anEvent); // and move it to deleted } } else { d->mCalendar->addEvent(anEvent); // just add this one } } } else if (strcmp(vObjectName(curVO), VCTodoProp) == 0) { Todo::Ptr aTodo = VTodoToEvent(curVO); if (aTodo) { if (hasTimeZone && !aTodo->allDay() && aTodo->dtStart().timeZone() == QTimeZone::utc()) { // This sounds stupid but is how others are doing it, so here // we go. If there is a TZ in the VCALENDAR even if the dtStart // and dtend are in UTC, clients interpret it using also the TZ defined // in the Calendar. I know it sounds braindead but oh well int utcOffSet = aTodo->dtStart().offsetFromUtc(); QDateTime dtStart(aTodo->dtStart().addSecs(utcOffSet)); dtStart.setTimeZone(d->mCalendar->timeZone()); aTodo->setDtStart(dtStart); if (aTodo->hasDueDate()) { QDateTime dtDue(aTodo->dtDue().addSecs(utcOffSet)); dtDue.setTimeZone(d->mCalendar->timeZone()); aTodo->setDtDue(dtDue); } } Todo::Ptr old = !aTodo->hasRecurrenceId() ? d->mCalendar->todo(aTodo->uid()) : d->mCalendar->todo(aTodo->uid(), aTodo->recurrenceId()); if (old) { if (deleted) { d->mCalendar->deleteTodo(old); // move old to deleted removeAllVCal(d->mTodosRelate, old); } else if (aTodo->revision() > old->revision()) { d->mCalendar->deleteTodo(old); // move old to deleted removeAllVCal(d->mTodosRelate, old); d->mCalendar->addTodo(aTodo); // and replace it with this one } } else if (deleted) { old = d->mCalendar->deletedTodo(aTodo->uid(), aTodo->recurrenceId()); if (!old) { d->mCalendar->addTodo(aTodo); // add this one d->mCalendar->deleteTodo(aTodo); // and move it to deleted } } else { d->mCalendar->addTodo(aTodo); // just add this one } } } else if ((strcmp(vObjectName(curVO), VCVersionProp) == 0) || (strcmp(vObjectName(curVO), VCProdIdProp) == 0) || (strcmp(vObjectName(curVO), VCTimeZoneProp) == 0)) { // do nothing, we know these properties and we want to skip them. // we have either already processed them or are ignoring them. ; } else if (strcmp(vObjectName(curVO), VCDayLightProp) == 0) { // do nothing daylights are already processed ; } else { qDebug() << "Ignoring unknown vObject \"" << vObjectName(curVO) << "\""; } SKIP:; } // while // Post-Process list of events with relations, put Event objects in relation Event::List::ConstIterator eIt; for (eIt = d->mEventsRelate.constBegin(); eIt != d->mEventsRelate.constEnd(); ++eIt) { (*eIt)->setRelatedTo((*eIt)->relatedTo()); } Todo::List::ConstIterator tIt; for (tIt = d->mTodosRelate.constBegin(); tIt != d->mTodosRelate.constEnd(); ++tIt) { (*tIt)->setRelatedTo((*tIt)->relatedTo()); } // Now lets put the TZ back as it was if we have changed it. if (hasTimeZone) { d->mCalendar->setTimeZone(previousZone); } } int VCalFormat::numFromDay(const QString &day) { if (day == QLatin1String("MO ")) { return 0; } if (day == QLatin1String("TU ")) { return 1; } if (day == QLatin1String("WE ")) { return 2; } if (day == QLatin1String("TH ")) { return 3; } if (day == QLatin1String("FR ")) { return 4; } if (day == QLatin1String("SA ")) { return 5; } if (day == QLatin1String("SU ")) { return 6; } return -1; // something bad happened. :) } Attendee::PartStat VCalFormat::readStatus(const char *s) const { QString statStr = QString::fromUtf8(s); statStr = statStr.toUpper(); Attendee::PartStat status; if (statStr == QLatin1String("X-ACTION")) { status = Attendee::NeedsAction; } else if (statStr == QLatin1String("NEEDS ACTION")) { status = Attendee::NeedsAction; } else if (statStr == QLatin1String("ACCEPTED")) { status = Attendee::Accepted; } else if (statStr == QLatin1String("SENT")) { status = Attendee::NeedsAction; } else if (statStr == QLatin1String("TENTATIVE")) { status = Attendee::Tentative; } else if (statStr == QLatin1String("CONFIRMED")) { status = Attendee::Accepted; } else if (statStr == QLatin1String("DECLINED")) { status = Attendee::Declined; } else if (statStr == QLatin1String("COMPLETED")) { status = Attendee::Completed; } else if (statStr == QLatin1String("DELEGATED")) { status = Attendee::Delegated; } else { qDebug() << "error setting attendee mStatus, unknown mStatus!"; status = Attendee::NeedsAction; } return status; } QByteArray VCalFormat::writeStatus(Attendee::PartStat status) const { switch (status) { default: case Attendee::NeedsAction: return "NEEDS ACTION"; case Attendee::Accepted: return "ACCEPTED"; case Attendee::Declined: return "DECLINED"; case Attendee::Tentative: return "TENTATIVE"; case Attendee::Delegated: return "DELEGATED"; case Attendee::Completed: return "COMPLETED"; case Attendee::InProcess: return "NEEDS ACTION"; } } void VCalFormat::readCustomProperties(VObject *o, const Incidence::Ptr &i) { VObjectIterator iter; char *s; initPropIterator(&iter, o); while (moreIteration(&iter)) { VObject *cur = nextVObject(&iter); const char *curname = vObjectName(cur); Q_ASSERT(curname); if ((curname[0] == 'X' && curname[1] == '-') && strcmp(curname, ICOrganizerProp) != 0) { // TODO - for the time being, we ignore the parameters part // and just do the value handling here i->setNonKDECustomProperty(curname, QString::fromUtf8(s = fakeCString(vObjectUStringZValue(cur)))); deleteStr(s); } } } void VCalFormat::writeCustomProperties(VObject *o, const Incidence::Ptr &i) { const QMap custom = i->customProperties(); for (QMap::ConstIterator c = custom.begin(); c != custom.end(); ++c) { if (d->mManuallyWrittenExtensionFields.contains(c.key()) || c.key().startsWith("X-KDE-VOLATILE")) { // krazy:exclude=strings continue; } addPropValue(o, c.key().constData(), c.value().toUtf8().constData()); } } void VCalFormat::virtual_hook(int id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/vcalformat.h000066400000000000000000000141001473346337000236410ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the VCalFormat base class. 该文件是用于处理日历数据的API的一部分,并定义VCalFormat基类。 This class implements the vCalendar format. It provides methods for loading/saving/converting vCalendar format data into the internal representation as Calendar and Incidences. 此类实现vCalendar格式。它提供了将vCalendar格式数据加载/保存/转换为日历和事件等内部表示形式的方法。 @brief vCalendar format implementation. @author Preston Brown \ @author Cornelius Schumacher \ */ #ifndef KCALCORE_VCALFORMAT_H #define KCALCORE_VCALFORMAT_H #include "attendee.h" #include "calformat.h" #include "event.h" #include "journal.h" #include "todo.h" struct VObject; class QDate; #define _VCAL_VERSION "1.0" /* extensions for iMIP / iTIP */ #define ICOrganizerProp "X-ORGANIZER" #define ICMethodProp "X-METHOD" #define ICRequestStatusProp "X-REQUEST-STATUS" namespace KCalendarCore { class Event; class Todo; /** @brief vCalendar format implementation. This class implements the vCalendar format. It provides methods for loading/saving/converting vCalendar format data into the internal representation as Calendar and Incidences. */ class Q_CORE_EXPORT VCalFormat : public CalFormat { public: /** Constructor a new vCalendar Format object. */ VCalFormat(); /** Destructor. */ ~VCalFormat() override; /** @copydoc CalFormat::load() */ bool load(const Calendar::Ptr &calendar, const QString &fileName) override; /** @copydoc CalFormat::save() */ bool save(const Calendar::Ptr &calendar, const QString &fileName) override; /** @copydoc CalFormat::fromString() */ Q_REQUIRED_RESULT bool fromString(const Calendar::Ptr &calendar, const QString &string, bool deleted = false, const QString ¬ebook = QString()) override; /** @copydoc CalFormat::toString() */ Q_REQUIRED_RESULT QString toString(const Calendar::Ptr &calendar, const QString ¬ebook = QString(), bool deleted = false) override; /** @copydoc CalFormat::fromRawString() */ Q_REQUIRED_RESULT bool fromRawString(const Calendar::Ptr &calendar, const QByteArray &string, bool deleted = false, const QString ¬ebook = QString()) override; protected: /** Translates a VObject of the TODO type into an Event. @param vtodo is a pointer to a valid VObject object. */ Todo::Ptr VTodoToEvent(VObject *vtodo); /** Translates a VObject into a Event and returns a pointer to it. @param vevent is a pointer to a valid VObject object. */ Event::Ptr VEventToEvent(VObject *vevent); /** Parse TZ tag from vtimezone. */ QString parseTZ(const QByteArray &timezone) const; /** Parse DAYLIGHT tag from vtimezone. */ QString parseDst(QByteArray &timezone) const; /** Takes a QDate and returns a string in the format YYYYMMDDTHHMMSS. @param date is the date to format. */ QString qDateToISO(const QDate &date); /** Takes a QDateTime and returns a string in format YYYYMMDDTHHMMSS. @param date is the date to format. @param zulu if true, then shift the date to UTC. */ QString qDateTimeToISO(const QDateTime &date, bool zulu = true); /** Takes a string in YYYYMMDDTHHMMSS format and returns a valid QDateTime. @param dtStr is a QString containing the date to convert. If this value is invalid, then QDateTime() is returned. */ QDateTime ISOToQDateTime(const QString &dtStr); /** Takes a string in the YYYYMMDD format and returns a valid QDate. @param dtStr is a QString containing the date to convert. If this value is invalid, then QDateTime() is returned. */ QDate ISOToQDate(const QString &dtStr); /** Parse one of the myriad of ISO8601 timezone offset formats, e.g. +- hh : mm +- hh mm +- hh @param s string to be parsed. @param result timezone offset in seconds, if parse succeeded. @return Whether the parse succeeded or not. */ bool parseTZOffsetISO8601(const QString &s, int &result); /** Takes a vCalendar tree of VObjects, and puts all of them that have the "event" property into the dictionary, todos in the todo-list, etc. */ void populate(VObject *vcal, bool deleted = false, const QString ¬ebook = QString()); /** Converts a two letter representation of the day (i.e. MO, TU, WE, etc) and returns a number 0-6 corresponding to that ordinal day of the week. @param day is the QString containing the two letter day representation. */ int numFromDay(const QString &day); /** Converts a status string into an Attendee::PartStat. @param s is a null-terminated character string containing the status to convert. @return a valid Attendee::PartStat. If the string provided is empty, null, or the contents are unrecognized, then Attendee::NeedsAction is returned. */ Attendee::PartStat readStatus(const char *s) const; /** Converts an Attendee::PartStat into a QByteArray string. @param status is the Attendee::PartStat to convert. @return a QByteArray containing the status string. */ QByteArray writeStatus(Attendee::PartStat status) const; void readCustomProperties(VObject *o, const Incidence::Ptr &i); void writeCustomProperties(VObject *o, const Incidence::Ptr &i); protected: /** @copydoc IncidenceBase::virtual_hook() */ void virtual_hook(int id, void *data) override; private: //@cond PRIVATE Q_DISABLE_COPY(VCalFormat) class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/3rdparty/kcalendarcore/src/visitor.cpp000066400000000000000000000017071473346337000235460ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2005 Rafal Rzepecki SPDX-FileCopyrightText: 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. SPDX-FileContributor: Alvaro Manera SPDX-License-Identifier: LGPL-2.0-or-later */ #include "visitor.h" using namespace KCalendarCore; Visitor::Visitor() { } Visitor::~Visitor() { } bool Visitor::visit(const Event::Ptr &event) { Q_UNUSED(event); return false; } bool Visitor::visit(const Todo::Ptr &todo) { Q_UNUSED(todo); return false; } bool Visitor::visit(const Journal::Ptr &journal) { Q_UNUSED(journal); return false; } bool Visitor::visit(const FreeBusy::Ptr &freebusy) { Q_UNUSED(freebusy); return false; } dde-calendar-5.14.13/3rdparty/kcalendarcore/src/visitor.h000066400000000000000000000044031473346337000232070ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2005 Rafal Rzepecki SPDX-FileCopyrightText: 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. SPDX-FileContributor: Alvaro Manera SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_VISITOR_H #define KCALCORE_VISITOR_H #include "event.h" #include "freebusy.h" #include "journal.h" #include "todo.h" namespace KCalendarCore { /** This class provides the interface for a visitor of calendar components. It serves as base class for concrete visitors, which implement certain actions on calendar components. It allows to add functions, which operate on the concrete types of calendar components, without changing the calendar component classes. */ class Q_CORE_EXPORT Visitor // krazy:exclude=dpointer { public: /** Destruct Incidence::Visitor */ virtual ~Visitor(); /** Reimplement this function in your concrete subclass of IncidenceBase::Visitor to perform actions on an Event object. @param event is a pointer to a valid Event object. */ virtual bool visit(const Event::Ptr &event); /** Reimplement this function in your concrete subclass of IncidenceBase::Visitor to perform actions on a Todo object. @param todo is a pointer to a valid Todo object. */ virtual bool visit(const Todo::Ptr &todo); /** Reimplement this function in your concrete subclass of IncidenceBase::Visitor to perform actions on an Journal object. @param journal is a pointer to a valid Journal object. */ virtual bool visit(const Journal::Ptr &journal); /** Reimplement this function in your concrete subclass of IncidenceBase::Visitor to perform actions on a FreeBusy object. @param freebusy is a pointer to a valid FreeBusy object. */ virtual bool visit(const FreeBusy::Ptr &freebusy); protected: /** Constructor is protected to prevent direct creation of visitor base class. */ Visitor(); }; } // namespace KCalendarCore #endif dde-calendar-5.14.13/CMakeLists.txt000066400000000000000000000055771473346337000167600ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) project(dde-calendar) if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX /usr) endif () include(GNUInstallDirs) #compile flags if (CMAKE_BUILD_TYPE MATCHES Debug) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -Wextra") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra") # Enable Qt builtin debug mode add_definitions("-DQT_MESSAGELOGCONTEXT") else() # -Wl, -O2 Enable linker optimizations # -Wl, --gc-sections Remove unused code resulting from -fdsta-sections and # -ffunction-sections set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2 -Wl,--gc-sections") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2 -Wl,--gc-sections") endif() #代码覆盖率开关 if(CMAKE_COVERAGE_ARG STREQUAL "CMAKE_COVERAGE_ARG_ON") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -fprofile-arcs -ftest-coverage") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -fprofile-arcs -ftest-coverage") endif() macro(SUBDIRLIST result curdir) file(GLOB children RELATIVE ${curdir} ${curdir}/*) set(dirlist "") foreach(child ${children}) if(IS_DIRECTORY ${curdir}/${child}) LIST(APPEND dirlist ${child}) endif() endforeach() set(${result} ${dirlist}) endmacro() ADD_SUBDIRECTORY(3rdparty/kcalendarcore) ADD_SUBDIRECTORY(calendar-common) ADD_SUBDIRECTORY(calendar-client) ADD_SUBDIRECTORY(calendar-service) ADD_SUBDIRECTORY(schedule-plugin) #ADD_SUBDIRECTORY(tests) #前后端都有翻译所以将翻译放到更高层级 find_package(Qt5LinguistTools REQUIRED) #lupdate start #此处其实只有当没有自动翻译需要手动翻译.ts文件才有意义可以创建不同语言名称的ts文件,下同 set(TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/translations/${PROJECT_NAME}_en_US.ts" ) find_program(LUPDATE_EXECUTABLE lupdate) foreach(_ts_file ${TS_FILES}) execute_process( COMMAND ${LUPDATE_EXECUTABLE} -recursive ${CMAKE_CURRENT_SOURCE_DIR}/calendar-client -ts ${_ts_file}) endforeach() set(TS_SERVICEFILES "${CMAKE_CURRENT_SOURCE_DIR}/translations/${PROJECT_NAME}-service_en_US.ts" ) foreach(_ts_file ${TS_SERVICEFILES}) execute_process( COMMAND ${LUPDATE_EXECUTABLE} -recursive ${CMAKE_CURRENT_SOURCE_DIR}/calendar-service -ts ${_ts_file}) endforeach() #lupdate end file (GLOB DTNG_TS_FILES translations/*.ts) #lrelease start #发布qm文件 find_program(LRELEASE_EXECUTABLE lrelease) foreach(_ts_file ${DTNG_TS_FILES}) execute_process(COMMAND ${LRELEASE_EXECUTABLE} ${_ts_file}) endforeach() #lrelease end qt5_create_translation(DTNG_QM_FILES ${DTNG_TS_FILES} ${DTNG_QM_FILES} ) file(GLOB APP_QM_FILES "translations/*.qm") install(FILES ${APP_QM_FILES} DESTINATION ${CMAKE_INSTALL_DATADIR}/dde-calendar/translations) # 安装日志搜集工具的配置 install(FILES "org.deepin.calendar.json" DESTINATION ${CMAKE_INSTALL_DATADIR}/deepin-log-viewer/deepin-log.conf.d/) dde-calendar-5.14.13/DDav/000077500000000000000000000000001473346337000150205ustar00rootroot00000000000000dde-calendar-5.14.13/DDav/CMakeLists.txt000066400000000000000000000010641473346337000175610ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) project(kdav) # Find the library find_package(PkgConfig REQUIRED) find_package(Qt5 COMPONENTS Core DBus REQUIRED) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) #安全编译参数 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong -z noexecstack -pie -fPIC -z lazy") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) aux_source_directory(src KDAV_SRCS) link_libraries(${Qt5CORE_LIBRARIES} ${Qt5DBus_LIBRARIES}) add_library(${PROJECT_NAME} STATIC ${KDAV_SRCS}) dde-calendar-5.14.13/DDav/README.md000066400000000000000000000000001473346337000162650ustar00rootroot00000000000000dde-calendar-5.14.13/DDav/src/000077500000000000000000000000001473346337000156075ustar00rootroot00000000000000dde-calendar-5.14.13/DDav/src/ddavbase.cpp000066400000000000000000000002611473346337000200630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ddavbase.h" DDavBase::DDavBase() { } dde-calendar-5.14.13/DDav/src/ddavbase.h000066400000000000000000000003511473346337000175300ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DDAVBASE_H #define DDAVBASE_H class DDavBase { public: DDavBase(); }; #endif // DDAVBASE_Hdde-calendar-5.14.13/LICENSE000066400000000000000000001045051473346337000152140ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. {one line to give the program's name and a brief idea of what it does.} Copyright (C) {year} {name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: {project} Copyright (C) {year} {fullname} This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . dde-calendar-5.14.13/LICENSES/000077500000000000000000000000001473346337000154075ustar00rootroot00000000000000dde-calendar-5.14.13/LICENSES/CC-BY-4.0.txt000066400000000000000000000411771473346337000172560ustar00rootroot00000000000000Creative Commons Attribution 4.0 International Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors. Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public. Creative Commons Attribution 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 – Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 – Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: A. reproduce and Share the Licensed Material, in whole or in part; and B. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. 5. Downstream recipients. A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 – License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: A. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. Section 4 – Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 – Disclaimer of Warranties and Limitation of Liability. a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 – Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 – Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 – Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. dde-calendar-5.14.13/LICENSES/CC0-1.0.txt000066400000000000000000000156101473346337000170140ustar00rootroot00000000000000Creative Commons Legal Code CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. Statement of Purpose The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; ii. moral rights retained by the original author(s) and/or performer(s); iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; v. rights protecting the extraction, dissemination, use and reuse of data in a Work; vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 4. Limitations and Disclaimers. a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. dde-calendar-5.14.13/LICENSES/GPL-3.0-or-later.txt000066400000000000000000001035561473346337000206250ustar00rootroot00000000000000GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. “This License” refers to version 3 of the GNU General Public License. “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. A “covered work” means either the unmodified Program or a work based on the Program. To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . dde-calendar-5.14.13/LICENSES/LGPL-2.0-or-later.txt000066400000000000000000001221621473346337000207320ustar00rootroot00000000000000GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. 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. GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. “This License” refers to version 3 of the GNU General Public License. “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. A “covered work” means either the unmodified Program or a work based on the Program. To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . dde-calendar-5.14.13/LICENSES/LGPL-3.0-or-later.txt000066400000000000000000001221621473346337000207330ustar00rootroot00000000000000GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. 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. GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. “This License” refers to version 3 of the GNU General Public License. “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. A “covered work” means either the unmodified Program or a work based on the Program. To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . dde-calendar-5.14.13/README.md000066400000000000000000000035521473346337000154660ustar00rootroot00000000000000# dde-calendar Calendar is a small management tool for personal life that combines time and events and integrates the function of memorizing and scheduling. ### Dependencies ### Build dependencies _The **master** branch is current development branch, build dependencies may changes without update README.md, refer to `./debian/control` for a working build depends list_ * debhelper-compat (=11) * cmake * deepin-gettext-tools * libdtkgui-dev (>= 5.5.17~) * libdtkwidget-dev (>= 5.5.17~) * libgtest-dev * libqt5svg5-dev * pkg-config * qtbase5-dev * qttools5-dev * qttools5-dev-tools ## Installation ### Build from source code 1. Make sure you have installed all dependencies. _Package name may be different between distros, if dde-calendar is available from your distro, check the packaging script delivered from your distro is a better idea._ Assume you are using [Deepin](https://distrowatch.com/table.php?distribution=deepin) or other debian-based distro which got dde-calendar delivered: ``` shell $ sudo apt-get build-dep dde-calendar ``` 2. Build: ``` $ cd dde-calendar $ mkdir Build $ cd Build $ cmake ../ $ make ``` 3. Install: ``` $ sudo make install ``` The executable binary file could be found at `/usr/bin/dde-calendar ## Usage Execute `dde-calendar` ## Documentations - [Development Documentation](https://linuxdeepin.github.io/) ## Getting help Any usage issues can ask for help via * [Gitter](https://gitter.im/orgs/linuxdeepin/rooms) * [IRC channel](https://webchat.freenode.net/?channels=deepin) * [Forum](https://bbs.deepin.org) * [WiKi](https://wiki.deepin.org/) ## Getting involved We encourage you to report issues and contribute changes * [Contribution guide for developers](https://github.com/linuxdeepin/developer-center/wiki/Contribution-Guidelines-for-Developers-en). ## License dde-calendar is licensed under [GPL-3.0-or-later](LICENSE.txt).dde-calendar-5.14.13/README.zh_CN.md000066400000000000000000000032051473346337000164610ustar00rootroot00000000000000# 日历 日历是一款查看日期、管理日程的小工具。 ### 依赖 ### 编译依赖 _**master**分支是当前开发分支,编译依赖可能在未更新README.md文件的情况下变更,请参考./debian/control文件获取有效的编译依赖列表_ * debhelper-compat (=11) * cmake * deepin-gettext-tools * libdtkgui-dev (>= 5.5.17~) * libdtkwidget-dev (>= 5.5.17~) * libgtest-dev * libqt5svg5-dev * pkg-config * qtbase5-dev * qttools5-dev * qttools5-dev-tools ## 安装 ### 构建过程 1. 确保已安装所有依赖库. _不同发行版的软件包名称可能不同,如果您的发行版提供了日历,请检查发行版提供的打包脚本。_ 如果你使用的是 [Deepin](https://distrowatch.com/table.php?distribution=deepin) 或者其它提供了日历的发行版: ``` shell $ sudo apt-get build-dep dde-calendar ``` 2. 构建: ``` $ cd dde-calendar $ mkdir Build $ cd Build $ cmake ../ $ make ``` 3. 安装: ``` $ sudo make install ``` 可执行程序为 `/usr/bin/dde-calendar ## 使用 命令行执行 `dde-calendar` ## 文档 - [Development Documentation](https://linuxdeepin.github.io/) ## 帮助 任何使用问题都可以通过以下方式寻求帮助: * [Gitter](https://gitter.im/orgs/linuxdeepin/rooms) * [IRC channel](https://webchat.freenode.net/?channels=deepin) * [Forum](https://bbs.deepin.org) * [WiKi](https://wiki.deepin.org/) ## 贡献指南 我们鼓励您报告问题并做出更改 * [开发者代码贡献指南](https://github.com/linuxdeepin/developer-center/wiki/Contribution-Guidelines-for-Developers) ## 开源许可证 日历是在 [GPL-3.0-or-later](LICENSE.txt) 下发布.dde-calendar-5.14.13/arm64/000077500000000000000000000000001473346337000151335ustar00rootroot00000000000000dde-calendar-5.14.13/arm64/linglong.yaml000066400000000000000000000140031473346337000176260ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2023-2024 UnionTech Software Technology Co., Ltd. # # SPDX-License-Identifier: GPL-3.0-or-later version: "1" package: id: org.dde.calendar name: dde-calendar version: 5.14.13.1 kind: app description: | calendar for deepin os. base: org.deepin.base/23.1.0/arm64 runtime: org.deepin.runtime.dtk/23.2.0/arm64 command: - dde-calendar build: | cat /var/lib/dpkg/status|grep "^Package: " > ${PREFIX}/packages.list bash ./install_dep linglong/sources "${PREFIX}" # 获取版本号 VERSION=$(head -1 debian/changelog | awk -F'[()]' '{print $2}') cmake -B build ${conf_args} \ -DCMAKE_SAFETYTEST_ARG="CMAKE_SAFETYTEST_ARG_OFF" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="${PREFIX}" \ -DVERSION=${VERSION} \ -DEXEC_DDE_CALENDAR="dde-calendar" \ -DEXEC_DDE_CALENDAR_SERVICE="/opt/apps/org.dde.calendar/files/libexec/deepin-daemon/dde-calendar-service" cmake --build build -j`nproc` cmake --build build --target install >app.install 2>&1 cp arm64/org.dde.calendar.install . sources: # - kind: git # url: https://github.com/linuxdeepin/dde-calendar # commit: 2dd86328e0257f9833d405b49b8729302519c1c1 # linglong:gen_deb_source sources arm64 https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2 beige main community # linglong:gen_deb_source install deepin-gettext-tools, gir1.2-ical-3.0, install-info, libconfig-tiny-perl, libdb5.3-dev, libdb-dev, libfile-basedir-perl, libfile-desktopentry-perl, libfile-mimeinfo-perl, libgcrypt20-dev, libgpg-error-dev, libical-dev, libipc-system-simple-perl, libmng1, libxml-libxml-perl, libxml-namespacesupport-perl, libxml-sax-base-perl, libxml-sax-perl, lshw - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/d/deepin-gettext-tools/deepin-gettext-tools_1.0.6-1_all.deb digest: 732eb3781699b6fe8134a06fdb4e779279014751075ea67eb72b03015f9eae4e - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libi/libical3/gir1.2-ical-3.0_3.0.11-deepin+rb1_arm64.deb digest: 9362e6a191e387420b2dd57f583b8a2a9a00e63eb7cfd8cc8b57125669c21e80 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/t/texinfo/install-info_7.1-2_arm64.deb digest: a6225910f9568cd916b86df498fd843112b2c3947334a0c7f80d3b9fde206619 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libc/libconfig-tiny-perl/libconfig-tiny-perl_2.27-1_all.deb digest: 30d01706b0063d0b4aaef7cffd79a6b70d8365ad887ada4c8cc1f8a5df8eb84a - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/d/db-defaults/libdb-dev_5.3.3_arm64.deb digest: 1a96764fe4454b45bc3e5541f2eef85e44557fad4000a78de5ef49db278e0b46 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/d/db5.3/libdb5.3-dev_5.3.28+dfsg1-0.8_arm64.deb digest: c8a3cfdc890ab0e38d2f18537fdd2826e5fee25adc2735d34f5e5c91f30aa61f - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libf/libfile-basedir-perl/libfile-basedir-perl_0.09-1_all.deb digest: 79f5ef747c15be92e24a1adeea98e3d4c01b1b90b730a184a8ca4959a1aa4684 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libf/libfile-desktopentry-perl/libfile-desktopentry-perl_0.22-2_all.deb digest: 19ed7f791a824bd6525c02cc6011bbd614880f3408e78eff5e16e1e9990334a8 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libf/libfile-mimeinfo-perl/libfile-mimeinfo-perl_0.30-1_all.deb digest: 4d9cecdc4b82cee837e74512293b8c84a554d3cdf6c760627cd9c42d6c752b92 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.10.3-2_arm64.deb digest: 63ef7a756243b2726138c2c959438e684e87d9bdcfcfb9b42f167ca95d4a6df8 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libg/libgpg-error/libgpg-error-dev_1.47-3_arm64.deb digest: eb8cb105f5785ec8abdbf4eaec45302aac65c04b0a0356e21a705f9bb944ac20 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libi/libical3/libical-dev_3.0.11-deepin+rb1_arm64.deb digest: c94f89635103255716d8e0ac68e9cb4bf6c256ca1615ad81a61bc1f661c9429e - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libi/libipc-system-simple-perl/libipc-system-simple-perl_1.30-1_all.deb digest: a528ecfa70fd8f3b4cc024947ff264e3952b0245be9a7147e556d8e1a037007c - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libm/libmng/libmng1_1.0.10+dfsg-3.1-deepin1_arm64.deb digest: 15763cf880b4073ba036e05f2a3b9b46aa43802f9d2c49848fd315a9229d9be8 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxml-libxml-perl/libxml-libxml-perl_2.0207+dfsg+really+2.0134-1_arm64.deb digest: ba2dfe816d804219fc5ff69752ca25d69ac8ea5b4ec455c7c55cec36a37ed47e - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxml-namespacesupport-perl/libxml-namespacesupport-perl_1.12-1.1_all.deb digest: 9588edfba6a50bf6702eac9ec3aca6f19a8b14a4260dc86615a93181040bd040 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxml-sax-base-perl/libxml-sax-base-perl_1.09-1.1_all.deb digest: 8271fec055eb0dabdfef211ce005a2b0ac78feaa5c31ebf35c7c8fe6bbf1482a - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxml-sax-perl/libxml-sax-perl_1.02+dfsg-3_all.deb digest: 4751449b0ce407282bf5ea9a721fa3ae1cd4d488ea3f21c6a40e6e4889d9fd6d - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/l/lshw/lshw_02.19.git.2021.06.19.996aaad9c7-2_arm64.deb digest: 9c5f80f960ac9998dd4a35dfa6e8425736f81b8c1b74978676a9a6067ef59b7c dde-calendar-5.14.13/arm64/org.dde.calendar.install000066400000000000000000000505601473346337000216230ustar00rootroot00000000000000/opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_am_ET.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ar.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_az.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_bo.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ca.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_cs.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_da.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_de.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_de_DE.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_el.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_en.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_en_AU.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_en_GB.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_en_US.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_es.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_fa.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_fi.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_fr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_gl_ES.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_hi_IN.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_hr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_hu.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_id.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_it.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ja.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ka.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_kab.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_km_KH.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ko.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_lt.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_lv.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ms.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_nl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_pl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_pt.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_pt_BR.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ro.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ru.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_si.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_sk.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_sl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_sq.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_sr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_th.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_tr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ug.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_uk.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_vi.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_zh_CN.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_zh_HK.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_zh_TW.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ar.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_az.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_bo.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ca.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_cs.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_da.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_de.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_de_DE.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_el.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_en.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_en_AU.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_en_GB.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_en_US.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_es.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_fi.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_fr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_gl_ES.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_hr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_hu.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_id.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_it.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ja.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ka.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_kab.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_km_KH.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ko.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_lt.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_lv.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ms.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_nl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_pl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_pt.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_pt_BR.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ro.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ru.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_si.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_sk.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_sl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_sq.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_sr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_th.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_tr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ug.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_uk.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_vi.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_zh_CN.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_zh_HK.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_zh_TW.qm /opt/apps/org.dde.calendar/files/share/deepin-log-viewer/deepin-log.conf.d/org.deepin.calendar.json /opt/apps/org.dde.calendar/files/bin/dde-calendar /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/calendar.md /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/type.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/create.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/main.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/hotkey.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/repeat.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/calendar.md /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/type.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/create.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/main.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/hotkey.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/repeat.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/notes.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/close_icon.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/side_menu.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/tips.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/Ctrl.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/Shift.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/edit.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/search.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/icon_menu.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/add1.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/QM.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/deepin_launcher.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/attention.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/delete.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/dde-calendar.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/add.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/dde_calendar.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/calendar.md /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/type.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/create.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/main.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/hotkey.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/repeat.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/calendar.md /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/manage.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/create.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/main.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/hotkey.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/repeat.png /opt/apps/org.dde.calendar/files/share/applications/dde-calendar.desktop /opt/apps/org.dde.calendar/files/share/dbus-1/services/com.deepin.Calendar.service /opt/apps/org.dde.calendar/files/share/metainfo/org.deepin.calendar.metainfo.xml /opt/apps/org.dde.calendar/files/libexec/deepin-daemon/dde-calendar-service /opt/apps/org.dde.calendar/files/share/dbus-1/services/com.deepin.dataserver.Calendar.service /opt/apps/org.dde.calendar/files/etc/xdg/autostart/dde-calendar-service.desktop /opt/apps/org.dde.calendar/files/share/dde-calendar/data/huangli.db /opt/apps/org.dde.calendar/files/lib/systemd/user/com.dde.calendarserver.calendar.service /opt/apps/org.dde.calendar/files/lib/systemd/user/dde-calendar.service /opt/apps/org.dde.calendar/files/lib/systemd/user/com.dde.calendarserver.calendar.timer /opt/apps/org.dde.calendar/files/lib/deepin-aiassistant/serivce-plugins/libuosschedulex-plugin.so /opt/apps/org.dde.calendar/files/share /opt/apps/org.dde.calendar/files/share/doc /opt/apps/org.dde.calendar/files/share/doc/libfile-mimeinfo-perl /opt/apps/org.dde.calendar/files/share/doc/libfile-mimeinfo-perl/copyright /opt/apps/org.dde.calendar/files/share/doc/libfile-mimeinfo-perl/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-mimeinfo-perl/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-desktopentry-perl /opt/apps/org.dde.calendar/files/share/doc/libfile-desktopentry-perl/copyright /opt/apps/org.dde.calendar/files/share/doc/libfile-desktopentry-perl/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-desktopentry-perl/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/libmng1 /opt/apps/org.dde.calendar/files/share/doc/libmng1/copyright /opt/apps/org.dde.calendar/files/share/doc/libmng1/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libmng1/README /opt/apps/org.dde.calendar/files/share/doc/libmng1/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/copyright /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/examples /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/examples/rsync-backup.pl /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-basedir-perl /opt/apps/org.dde.calendar/files/share/doc/libfile-basedir-perl/copyright /opt/apps/org.dde.calendar/files/share/doc/libfile-basedir-perl/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-basedir-perl/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/lshw /opt/apps/org.dde.calendar/files/share/doc/lshw/copyright /opt/apps/org.dde.calendar/files/share/doc/lshw/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/lshw/changelog.gz /opt/apps/org.dde.calendar/files/share/perl5 /opt/apps/org.dde.calendar/files/share/perl5/IPC /opt/apps/org.dde.calendar/files/share/perl5/IPC/System /opt/apps/org.dde.calendar/files/share/perl5/IPC/System/Simple.pm /opt/apps/org.dde.calendar/files/share/perl5/File /opt/apps/org.dde.calendar/files/share/perl5/File/DesktopEntry.pm /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo/Applications.pm /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo/Cookbook.pod /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo/Magic.pm /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo/Rox.pm /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo.pm /opt/apps/org.dde.calendar/files/share/perl5/File/BaseDir.pm /opt/apps/org.dde.calendar/files/share/perl5/File/IconTheme.pm /opt/apps/org.dde.calendar/files/share/perl5/File/UserDirs.pm /opt/apps/org.dde.calendar/files/share/man /opt/apps/org.dde.calendar/files/share/man/man3 /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo::Magic.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo::Cookbook.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::BaseDir.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::IconTheme.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/IPC::System::Simple.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::UserDirs.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo::Rox.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::DesktopEntry.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo::Applications.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man1 /opt/apps/org.dde.calendar/files/share/man/man1/mimeopen.1p.gz /opt/apps/org.dde.calendar/files/share/man/man1/mimetype.1p.gz /opt/apps/org.dde.calendar/files/share/man/man1/lshw.1.gz /opt/apps/org.dde.calendar/files/share/lintian /opt/apps/org.dde.calendar/files/share/lintian/overrides /opt/apps/org.dde.calendar/files/share/lintian/overrides/libfile-desktopentry-perl /opt/apps/org.dde.calendar/files/share/locale /opt/apps/org.dde.calendar/files/share/locale/fr /opt/apps/org.dde.calendar/files/share/locale/fr/LC_MESSAGES /opt/apps/org.dde.calendar/files/share/locale/fr/LC_MESSAGES/lshw.mo /opt/apps/org.dde.calendar/files/bin /opt/apps/org.dde.calendar/files/bin/mimetype /opt/apps/org.dde.calendar/files/bin/mimeopen /opt/apps/org.dde.calendar/files/bin/lshw /opt/apps/org.dde.calendar/files/lib /opt/apps/org.dde.calendar/files/lib/aarch64-linux-gnu /opt/apps/org.dde.calendar/files/lib/aarch64-linux-gnu/libmng.so.1 /opt/apps/org.dde.calendar/files/lib/aarch64-linux-gnu/libmng.so.1.1.0.10dde-calendar-5.14.13/calendar-client/000077500000000000000000000000001473346337000172275ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/CMakeLists.txt000066400000000000000000000075231473346337000217760ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) if (NOT DEFINED VERSION) message(WARNING "Not defined version, about dialog version set 5.10.0") set(VERSION 5.10.0) endif () #common resource names set(APP_RES_DIR "assets") set(APP_BIN_NAME "dde-calendar") set(APP_DESKTOP "${APP_RES_DIR}/dde-calendar.desktop") set(APP_QRC "${APP_RES_DIR}/resources.qrc") set(APP_SERVICE_IN "${APP_RES_DIR}/dbus/com.deepin.Calendar.service.in") project(${APP_BIN_NAME}) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--as-needed -fPIE") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "sw_64") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mieee") elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "mips64") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -ftree-vectorize -march=loongson3a -mhard-float -mno-micromips -mno-mips16 -flax-vector-conversions -mloongson-ext2 -mloongson-mmi -Wl,--as-needed") endif () #compile flags if (CMAKE_BUILD_TYPE MATCHES Debug) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -Wextra") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra") # Enable Qt builtin debug mode add_definitions("-DQT_MESSAGELOGCONTEXT") else() # -Wl, -O2 Enable linker optimizations # -Wl, --gc-sections Remove unused code resulting from -fdsta-sections and # -ffunction-sections set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2 -Wl,-O1 -Wl,--gc-sections") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2 -Wl,-O1 -Wl,--gc-sections") endif() #安全编译参数 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong -z noexecstack -pie -fPIC -z lazy") configure_file(${APP_RES_DIR}/environments.h.in environments.h @ONLY) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) SUBDIRLIST(all_src ${CMAKE_CURRENT_SOURCE_DIR}/src) #Include all app own subdirectories foreach(subdir ${all_src}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/${subdir}) endforeach() file(GLOB_RECURSE Calendar_SRC ${CMAKE_CURRENT_LIST_DIR}/src/*.cpp) find_package(PkgConfig REQUIRED) find_package(DtkCore REQUIRED) find_package(Qt5Gui REQUIRED) find_package(Qt5Widgets REQUIRED) find_package(Qt5Svg REQUIRED) find_package(Qt5DBus REQUIRED) find_package(Qt5Svg REQUIRED) find_package(DtkWidget REQUIRED) find_package(DtkGui REQUIRED) find_package(Qt5Network REQUIRED) set_source_files_properties(src/dbus/org.deepin.dde.ControlCenter.xml PROPERTIES CLASSNAME ControlCenterProxy) qt5_add_dbus_interface(Calendar_SRC src/dbus/org.deepin.dde.ControlCenter.xml controlCenterProxy) include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) # Tell CMake to create the executable add_executable(${PROJECT_NAME} ${Calendar_SRC} ${APP_QRC}) target_include_directories(${PROJECT_NAME} PUBLIC ${DtkWidget_INCLUDE_DIRS} ${OBJECT_BINARY_DIR} ../calendar-common/src) target_link_libraries(${PROJECT_NAME} ${DtkWidget_LIBRARIES} ${DtkCore_LIBRARIES} ${DtkGui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Svg_LIBRARIES} ${Qt5DBus_LIBRARIES} ${Qt5Network_LIBRARIES} commondata ) #修改dbus服务文件 set (EXEC_DDE_CALENDAR "${CMAKE_INSTALL_FULL_BINDIR}/${APP_BIN_NAME}" CACHE STRING "Command to execute dde-calendar") configure_file(${APP_SERVICE_IN} ${CMAKE_CURRENT_BINARY_DIR}/dbus/com.deepin.Calendar.service @ONLY) # Install files install(TARGETS dde-calendar DESTINATION ${CMAKE_INSTALL_BINDIR}) install(DIRECTORY ${APP_RES_DIR}/dde-calendar DESTINATION ${CMAKE_INSTALL_DATADIR}/deepin-manual/manual-assets/application/) install(FILES ${APP_DESKTOP} DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dbus/com.deepin.Calendar.service DESTINATION ${CMAKE_INSTALL_DATADIR}/dbus-1/services) install(FILES assets/org.deepin.calendar.metainfo.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)dde-calendar-5.14.13/calendar-client/README.md000066400000000000000000000000221473346337000205000ustar00rootroot00000000000000# calendar-client dde-calendar-5.14.13/calendar-client/assets/000077500000000000000000000000001473346337000205315ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/builtin/000077500000000000000000000000001473346337000221775ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/builtin/dark/000077500000000000000000000000001473346337000231205ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/builtin/dark/icons/000077500000000000000000000000001473346337000242335ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/builtin/dark/icons/dde_calendar_account_32px.svg000066400000000000000000000024671473346337000317420ustar00rootroot00000000000000 账户- dark dde-calendar-5.14.13/calendar-client/assets/builtin/dark/icons/dde_calendar_create_32px.svg000066400000000000000000000017671473346337000315530ustar00rootroot00000000000000 编组 21 dde-calendar-5.14.13/calendar-client/assets/builtin/dark/icons/dde_calendar_sidebar_32px.svg000066400000000000000000000027511473346337000317130ustar00rootroot00000000000000 视图切换 dde-calendar-5.14.13/calendar-client/assets/builtin/icons/000077500000000000000000000000001473346337000233125ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/builtin/icons/dde_calendar_ban_32px.svg000066400000000000000000000015731473346337000301220ustar00rootroot00000000000000 类型 Created with Sketch. dde-calendar-5.14.13/calendar-client/assets/builtin/icons/dde_calendar_delete_32px.svg000066400000000000000000000064111473346337000306200ustar00rootroot00000000000000 icon/schedule/delete dde-calendar-5.14.13/calendar-client/assets/builtin/icons/dde_calendar_edit_32px.svg000066400000000000000000000043171473346337000303060ustar00rootroot00000000000000 编组 18 dde-calendar-5.14.13/calendar-client/assets/builtin/icons/dde_calendar_fail_200px.png000066400000000000000000000334441473346337000303410ustar00rootroot00000000000000PNG  IHDRXsRGB IDATx^} $WYwN-{Β 3A! F¢@ !~$y@&;~P'1eBȄ A%L2;s^j9tuU]<]UgysA~%+&@.x gG.O\9@9K r& @ 輛$$&D9@&dnf@lr λM9@-kB$dB:f6 & @ 輛$$&D9@&dnf@lr λM9@-kB$dB:f6 & @ 輛$$2%r&0aAM ` >|hy` X O5ԀZdoo9~쓁' w^1}ppG~Įp& }8Yy! *(Y,0V;7oA#ebR^o=4`p<[0S3K 6v\}=X9cwkժ)fTPBb v jۍ/`lOd#$BN-Pk4jB"/MMj] Tk {pϙ[9@2i+B+8dϚU{UC0q gߢ^`ht]Z;|^U;h8m-sz$`e".b;`t)6q+Y̅58<=&V&(`/!v"=-qIHºrƩ~} /}Q%ID o; ^!'l8DM׭T?Uc]IʚH0Y5 'Z/xZnzZf5 .pg W[df~]p͗n6Ysƛ_Y0[xeu}qqg v2Ptd N=녀cZY^X+a>{# Uw\uk-xןd@8Ǥ?@8 o5^$c8p?9c ь뼪Iu1#/qX$x\. q)(cU^̦ ]ƛHZ ~r1 x3 O[nU>Va֋/O 3{do8q\C79' c{SqɊ$ϼ=p/a[|u*RɯNze&~!/7`1N Y1Dem5ޑn?t$ .sl9>XœJ[NxuSh\H8}:GqN]MG/G]}?. ϟ ׺; d^?gy\쑑$(^]6 @[%0 Ks$V: &ޤ6&6 u+lg$?WP/OiV\Z!v3m<h.^{#:ւ7GBtdU .?vpJ2WMc_3˛Nz_IUkAhP(pztoA׹Aۓ#qR4KZjI^[)Cz4JnɨXd$iGHM].UXS{EL4"{VJ@Ԁ KKsgw ''F/Dڤd?c#kNJvyj  i *03Ag`}$ζ=fXZ[ֈ~GaK"W*{Rk n'FF";lsP(x6u$c*=PO|ﻷ,g_7Z?T}:nE02h @е{Mlߎi%{/{^#PV!A ɮn Sk9)(p Em߃JŃ}|عSwBŃM s5=zg%$UޭwNjckZ0`jpȆ {Hqhia64<Ad`*Vkwfƨ=&Vq[E%Aa?䪶>C$YI ծ'SWJO*nr,@( 8tl,.//h'rAGoV?m6s4o^ CVIp:2՟5qm;˞ظхCdbDW[6#z>i8V[dB&9}غխ -לŦz%.åًpCQ exx:6ELr @$yVp|RI[8c߶l-}Vd}pQ BMO86~N{` I__9tZ:jr0aY}D^OsUw;a[B\={"p\IoV`Ӷ~,0L5kLLlW^%|w|bzqV+ αF6 m1 S@B߷ !mb*u؇&p`&II :p| ;W ҇sz2aZiu6PuZZ VБ \q8oGֆ~ &@މޭkZV1pVj0xra`N4ԓ7_woy֒E z%VJŪP,/iD?s[] _ 'T{c-Rc4$U?@TCIND=L,8X?~u~p ~H7y74$lg, s4͡Yp߲̗i!ɋYKrE+J?HޭXjZոbwkW&{].~ !^}ǎHDU۾+>59Lҩn%cJ S必R( ݨo|O;MZ_?|~T^[ո|!_8P>6{%z(nG<$@Gp t˲kG |UQ$ݗm~ׯ~ث')>6{ ΃u z㊫2U:9QRQ\W r^wP >[\2БAK/2bLɗ֔ê'I/aHɭ'}%?A(`H:sn GЛ?@ӴsB~K&x92IZثx3>WIߤx٧J˗6Zzj`z06iڵ }!rIHLI\q!՟$:{htQ5-_!sή-/_m5>OV`*Vm74tܦc&vu [T|;[loJs_[XjX1 VAia#xGڇ$]o`==P)'C+KϓFzLd~wO$o`7#|1T){$ {ѻ}>-%e3V匳J3KunޚD\T.GRiu B8v% ĮDq?Vt 32$ E|׿Poz_x,צG$߃$Ԁz߰M~qqʼa<fz5?oƍ& R?R=uKS=04#SIw>i[:etۯEfA3w˽Sd%OoZltCpQWzWFB&qi+];R;sD ePL*ַVIo5 x;$v֊ 8[ZLX\XpZ e/9 ANZTz3k9K+o x (c-a+~# @i&M{҂ﺥ]뢔9x:iB_2Gop.ڭ0NR]z&_OH@B&+ yX{Ӵ~uAb 8!s(PO@&р{;$XJ3&˛J(tc-@<)#g%,=N{$WږsQT|XBWPai=CChE^9~GV]vmZ.Y:{ KicmX}U,|!zBF:Qnyս2=)\3YrCjU#HJMq4u+ڻI5;Zgc+#q͋6HP ?VÊC$mG )ѫ-qMI}gJK~MFI-_PX%PK""@rwPL:i{)&avȗg!խ'$b $@ b2?Þ)kd` ycRMY^z]T~_nw (+]xb6dY{ JLѕ):k[_`'dxd >ԯL]x'&wpz5Ɋ"nB9=ƞ >Z:& w9T;4LB Q߾hw2"s]_h}^u; ,ǑINC\t鬴paII7:س) S$^AY'|ZOj$6˵,vnaeI#}L)/mGq=H o͋g.j3?)q3U׃G ?1)(st O5 8N1m~C(-ݱA̦  @ҜIHI "4YrvAco*3k Yϟ-U wn%դ[~D VsLS2 vsP^L!s[=@ ٩iqpU\$?|&]ٞޭ[ԄOWTrPZ#aQ'֗t0vrI,jU/pIUAt$eH>?'D<TS_ d,R!)v 5,Tm1YK[}_<>$]vC1~'$] i=\9BHqz;ͫ<^:x]@Ϡp+0 !\ן8NߓqӋw$9y/>TK&XK0${ @.^ܟaCu%]`T\ RV}D^ T$G!MC"煀S`ʽRȽK{nwc`*VjU]TSSIDAT%JiW^Z0돖@[%ҔիX]["~kkDW0c!r!8l!^s^D]9qݗ^]9RaMmt!k)1~om4\x ԫ$`(e"Uo 0,g~`\'Igιs^7ђVv>q+u!kWd2s{`իK {ff 8p4ln@Y1~+t!?%`ũc37ov`~ރ =Et) UKBF9s=aԡJJ9CQUg Uf3J|. s { %88EAY1tZ`Qzݾk$b{X(xg Rr>G 086@ZXGY䦛 ؾzBF UKꁚ>yН%8fRnMΟ@ ]EWL-ٷχ;=Jm${ T`pLROLSEh!Z ش4g]'6DO$03Õ76 @Av-X $N=f4whXhXdk' ,)r C,RB{ 0-{A]2̇`S3,3 fBAYU-̅ƹ Lk5%:{Nf]T] nzwySj==0^f!CH,֤(!c0c=G\p OvL*ݣ MWK ; EQg9n fA@"*s,-y:;V#VH#c[X$2 gD" O+E X~Fj~|mvZǮ*t4)KJSFCu.FxNZ=F QZ=YvF"@5c)QOĴӕz_pY-sLa;G@{!U\h/1@(-UBѐkG@Z-[?hۻ_}}-AsL.BFUv:EY^ZFyѶ;VXZ$`Gzr76]"UvVI8gvNwR%`⺥O| G Vi$dSRr ㏗ pjZXE o˕(*z j'O&[ool]')W%cZ?nPj3=[;1^*IР jBݡdTg u[2e٢b 2ܑEPB#H8gys#y.?Mͩ.~Kj'u҇T?Lӿ<[0E0 ?`Td^vd >sj5/w 8cW+ Z2]lE$lYR,.cb4 5X]*3b&=BZI ϹT_[X<WuJU?58~+CQ8 زWw "H(&A*TT.d#œUmyQ}"G[8 o-Zf%|&<E u!kpVHC9,K 'ժUaXUKǑ^.C!?p5S@D xJϮW3}=Ek1 xPtn.OW H#m[*k eb'i"p@AZ&ٰk98I wR*Dϓ^.4ѣϪK֗͗?YI}[è[x1 ;VRC@ ` r9 rD5ި=8aё;j*QF z0NFxd2fKwpfV_rG ]!4º"1^aM֕(sS\i|6GAm qJG($k 0eU/01Asp%$R$LĈ;j(hOLymBDTh+D)@RF<|R' _9yW  TFRq ?J l8dHۍ08 0E/H9W8 =- &H pZ 7˖A4)."$xG /ب'.OxpG)K S@  C@Xuh d|x&!N@& *`̱Tb-)X$u챬#V [*1 IJ6!P@1 &NQPU4qͧz..|$W- 2*}FQ,B[&c έ\o>9_-B D Fx`Ȫ2.4͂`)0  S(CU 9*@^:E@@ A{Q_.ݺUDVpeΝ\Xx U6QmbʥE ~Wml(1 ~h|mX`k B0*hCIjz` @ BLA[-,V* A2XRMЅK T*:qW$rґʵ/r!0fgyQ '*P(ꮲj!2 1rQ ؁,==qQU" P* 軪N(@`Yj¡ R2Ƒ#$l5e|cTṖn@ovJ$&r>6MpR]@B xS(* fzT$U)i>2%CYאl TذArJ<17]W-@ =HMԘ 8$HP,(y[`|.F5H/F!Tb - Ia $` #FHZ>H&;To]h"@!JrUcj3 RTO=JYlb,W3?zKZMzUKh_uhl k ؄Ԯ': b,Ǒ|$aHt[T_URQ,R0*HޠP") JEnIZìɚuJ&hģrYNrS%o] 4=G)m0Nx-(9 0+b0$0\WlA @P2LIFLD|ƚH&(EcD jɌ`yB!P9fb$J3f T-~JBR z v ihc*2cͩXQM)Yb'*@Ter_‚d Ų$8\WN#HUy;&3?,U 7@@PiA$Sl؀N  j'en]CYםH;ejAl Fb8 B`P QB`;@*h4 A0(,.Jը9Q}B@yK̈#QX&K%+p4c"B=@# dWY]0d!SA!'قr`Fey<%""'G; ^첸 @Y',L{\DQI`߉!SSxPah*x!eZm5 ˘  h ][+'h?`B' Td[MG) WZ$B("'[@9xm9#x !t I<`# 9(ty>F|Z5 'v0$P] nzФW#o 6h!P ?%IV 'H)5TAZ'9ڡN~Bz"E_+Ɋ<ث{& 8j$c"I6@1wk3`@@\R׈r̻1 \R׈r̻1  3IENDB`dde-calendar-5.14.13/calendar-client/assets/builtin/icons/dde_calendar_ji_32px.svg000077500000000000000000000025701473346337000277650ustar00rootroot00000000000000 icon_ji Created with Sketch. dde-calendar-5.14.13/calendar-client/assets/builtin/icons/dde_calendar_spinner_32px.svg000066400000000000000000000147701473346337000310430ustar00rootroot00000000000000 -mockplus- dde-calendar-5.14.13/calendar-client/assets/builtin/icons/dde_calendar_success_200px.png000066400000000000000000000377771473346337000311130ustar00rootroot00000000000000PNG  IHDRXsRGB IDATx^} Uwk%yY0`qEDEPԙY\+ˆm!,!!$@loVUwuuWW^}޺s-H @X"D%$*H H2= $I@"$h\5E$d t$6%WM $"t6 $MnUSD @@'ݬM @j[r@)2I7k@\5E$d t$6%WM $"t6 $MnUSD @@'ݬM @j[r@)2I7k@\5E$d t$6tջL8a?qg9g9zέ'uGhptu @6MOg3 x/ DqQ0_ymG8Pg @~΅ޱV;J?s(jbNhgFF1 0n~j1}ZjqI45C6;1~&|-˙k+ <|uC4L-38g@$`7 3if2s,pUĮQqN<`laAI79j!%%0bJ3&t) vcl= ]vq.HoygbWsׅʉpPO|w'ber$76M8? 2 vI ʙ| .-ܢ3]ou~E 85Ho}p;$[LK%. ~{[6| Ξn眿=Lveo%4Qg R]'3P&@ [4fp>a]&BfN.{E.UA8Nڶ ձsk?lnv"}38_99J/&H=Zq˔yiY:Wp/)>ÃYK;>}2iǿ]ߕe_w |Wy\ z*%~= 2x|P5*ݫKHpD'} %4VuZi 28왛E}_~!koݮItݶ7u3=AҚ)^ ouޢ(H AuFAeV9wlDwbkR٩<%p~IS͒cWqܫ\pk[pKai^Uֺ7j.$Erat|ޝ_y'i]@BqNREFM褞qc;VIk$׮afIeqAT;qÈQ9Q.z5ivZ$- lӽC#b1^,(r{鎚qE'vxhCGv<<ۊi)2UXt1x5'rqkwE~e/cu:?U V8Nzhii1ն#JwTqqKcV$5zؑg ώ35}GrQ'veUzvnƒw_ݵL٭eyGZwȶ6lFb%~^CA\$?ߊU[=@BR]3cz90͜[ ^/iTܥ'H=0;uG>a [3cxW:q`wgO<ޮ%`Y5G W8sDgVZ8r>(%*UO˟qX#Þ|@b'4v 1tbߋ&n 0vϽxZ=K:~η*_ArjI{X:Ow| C)*˳TӇ7eg-w%A1"c(6*ͽ lHvaXF\Æ ? N?9^VR:~wߙ2֭ &,HV-ej!@`h~1rt3(IX`ρ- {^&ZHP{^+Iǽ47Hڙ݊^`jV1H11G"y?R{aGw%Xt߼^SsNFi5ao@*hW^EC({gC``mV_ * MJ<ܛXk1=z$y8NxGԪ+Wo)YR%""/kg}ύ>XK)ii@´vy K͞n6Nͨ< 4n}ͪwJ*.=R"Znz֥py3OeGwk5V\ hvE>-+%KP:rWDdo|"/A_ J7}7tԚK/}i`xHyJɫutt4jBWOkT(Өvơsx W<zåiQ:۲[YUV4j<@RrvE^63ͭ\4/<' t!~qX$;s矃?;rT88i)й{h~DZ,E~֍i.@|q C9fQEe_"0Zf|؊.iv|v#!%r*t}nߖطbfYVHc5_X\T=8F.W(730?e/@bR;4g?QNX&-j[~{oao H}2E͑;Wfya`"*QMWޕ}ipWأS?gG;7CMfY Hy=7ڶ@9m!t?w Ĉb'ipaśg>D'Ps } -"g7M.NeFifj^>-+5~lN(M/:#x[80>_e^ T| k 4]%*c)K_J[Q#7@vQbh!Aw"?<6dAJ7Ts-m8 a<>e>!t :̬~x}3.ڛ~})gjpr¶yW\-̪_>=P}rnX~%t,}_jJ~XX1޽uq0y#2gRzIR0 oĂXoū_+b)he +R-_l^yށOrfD1+;VBE^]s W_uX9^إ{DAC{`.eM6qXczcB?YmIs-bijQ 3?Uwyϯ9m6 o9Z%ڔ .Է N""᜶dd%Ώ]cXcB3vm}X|pn{kxdLĿmUhO9vC"[ubI:.^;Q]SŢs9'GU}Ň7;6 =zM=]>2x\ȯhӵkߺ<뫧rw]_sߔ[RJǨdEɪ t)Էۦ{Mr_GW\Emž} _rQ0_,nl^lѮȺwx)Hh ڹBAB:^Syh{Xqs_ZWtGq$U~^ڤ~sa{Z74yc uQ7FTn?m`03ʼn`pwHDd񚮉%k/9HYʓRq׫N#O3:޺3F=;8=V 'x߆c@WUc)ZVg R݅z,ldTXJ^Ýu{kZ/UĻqڶ5 {}c9xKo5U{_n@c"Tԟ<}WhF>R 29gFQ#ZG;K>:h-lCQ.x>pPZu<ݐ zP]RTήݫTcg @}!-AY wc hU`u齫՗;ZM˷UxJ-yo§y[KQo8Lyf֣Uud(R!k\M Y1/CJuJ&ZJ?{q?^JpE}DO6p- xPG?JN˥[K'W;:):X, wENn>;%k3^o2/t=onax;}?<a3~ӟx*&V ^IK2s(=S^B],wkvKX9|`õжX`Zݵ7,hg`s])ǹBkߔ< heR$ 7/Bz|=̐~rv}*}kxKs1wo[FF}~P7 ,(QO+iبz㎓WO*V;_pb -)($WKs][nBL(N\]8s5xH3qʶn/TSmiGK DE/L $j[`MAuֈS/9,^KM~Fe]O6ڇ3{ɍRf1?=#^t-gҍMj#\sBʍL5fKټdE 0:d?Qr7V.߭/s6O]Dcփ~K}OM7̟5iN6}@C[6YBLmQmrܡtU4L`N 9 n'Yj֬W{Fݓ{tuO~ kyE7F훒~W?Z6=зa,86-1 5+.@oɍtkKx׆orfTpWsw zoG>{ƹ[ntG1{p=`#ݮqqH#?}.kUijf>KSE6e+`Cչ<5ub#Cȡ 150I7pOd.ퟍaS|$kٲs!e^c|x.Wkj$ ?gczlpz&5s{hd]zpN0"i`v)v|̏Ziϕ|@%߻wЀOY T)~rcY?dfqֆbO~_/c S~Ŏ~NME )spiC&k=/[ё ob?,"TQy9#Gf,>+vrc@rl-_EX0;CtpU=8?X;zYCCZis?po%gw\ IIDATm F*ܽ g1ʢcSov>n58Edxacod֑t݄-uBFVwSZsZReZ q??=`jG߃L&P>0});,dxyUm0GpƟm@EZѠ#f -rk-ZbcLkj– hخǙ+G`v ^Bv?n߻{O (Mcl@ Ʊb#g8\֡!G[:'+ L-,f!kt?JkCN ةSywpוk7p@W|7Dݟ L,0}̡ſ9Fz_|^,)P2-T VƐ1nb *`j̳AM=t/^rt?*V+JP]pߵ^A]IV+[q׮.ĜGңRL,wɃ { pCET ut닎jfDQ@?ҶËgL5{gX#GAӓCAcVWkc(}yɗr(*w|pL/WANyR.vN{#0!ir.BM..*zVa,Cwaj֓[rJJ%; n4i.ݟt'}ykzy^k<@z?M\$ftH5:DYB1Q\+͒?wu}/˓sG :GM,}^!z$ls (my]wGkSSƌ+㫫T@N{;8T׽+[:FP|ݖY000[}Mu k~!y1TK/¥WٍW%kφXU3qH0D敮yCm[_ybjV[> WmxG.~oIFy%ܻM6ў2 ~UGcL @țÛ{(62sk:DMjw\ZJCmTz}.BXL#Why8DYt 94v}ⶑ? >ۨډVSWd}G-]*g>2=*; e5 UR { r"]PdA3V&&)?a$`ɣo UaZFAz,y  f-WPnY6yT6|MK$((z%*i Jz" 39f=-=[kwHQrEij ݠ!(dYo3T Ⱥj0$AY-?Y q6 QJ&jUQ95R/^>p7`@}|[6-:VCN$d4ri'Pl"D3x򗘝~ s"|8[/x]Nw8R/;39ȹ)"s7垿=]21[ V>ڣy⏉1M!Ch hzՏ?U1T v]~,c; s=SQL=伥7'EH u*C> '&jvZvUΞxk Dk~Yq=a%CsϾ"=sdGI{4!<+Cz.BP +J\(YorI.[U}2M*=<푒"׮`GM,o\$Od\Eh~ݷgTK-uWmھ-Ou4cseF{@B׼D΃rkDOAN'/zZ.T$ Ehjq(u춡zJo ʦ=IdprvC*hJRb#' LAUGsRV<+{t=c+(6.a'>bjU3$ N{J_݂[!O[s;pM+0tI:$ÀLҞmZX8C"ttw E|u oʼ d9rV_m/Xv&N<ס;,rqrĜܺ#ʹ* jS֓>kAAMGL-afdIT}W2;}t-S0t[{[or}.es99  32tbb ;bB`]g;9W& L-٢l_"?Edȴ|Y vR%듀G]Wd2:tb UiUO p eRa+@ܔxrBb2$ȤIp ڄլ7Hw$t\HÆ @$Ӏ.1)bXh݌OLv\㖯\I%IZo"y4UiY%x )dY|iw]:.pkZԞ-5oΙCD}1I2犀AUsUvFsNEA^oj"WUGe a'H0l*$YS 7>BS IO\D;V] <Ϥra@Oa :iËwx#LP@P-VckZ3@\j lSv ,,@9!>v5@L_-IQG/iWl$Ԫ_MrR+*=lz;ڃL+KʉwYEyV:}OeadA[$#Z1+o!xL-?({ ) 2}7 ͹ 2[[Rˤ G*)z\7}R^+p2=LK! `hy_j|4H9xP_|*N\˦M'-Ə0{[Q`FMGsios1`҃mi2<`8tA#xL Zh-+=G蠇} R=؁hQH%{9ضdW^~t@6*rdh1{=-3H]DDFLC0߂6DxG_ 8RD}|,H,g8eȪqS9#UkI=g3.Lڃۂ{*AMP&38 f KI$*ʳ"R^^tB8i5R/yVBz!y;%g+"خݢHq`F١ AXNs9M^UH|vޛ=CI9"'ʙE-Iî*,/gpHH{I !skI(xzMTIm mbgT e.G ;sdd[G8ېd m m!ȹ; hs*8:-Ks{8Z tkH{$h;wݲTX"L."DEĝlɉ\$d_Ϲzh0rM|j >m\33׵m^bR ,_E J2N*"9 p6;W鴍ZͪF5\ROU$I[90f +J@rBjPwa=tخb`p=T2w![¥KH1gGrG\yeM[鲊Eު5BwI Q% *2Fe1M.rDh$w+O@ Lq0ѕ1s ̚~2'/(ʐ7#[j'faN.ﻏ+[Cg 3ӢxcJ ysʋ 8|B&.}Ld, G'8Z5Ľ҃ޔ5,Qv@=]XT%].GB|%p7{9\Tx&L;Mfb+IGRPL<=+@>K`Ϝ"yBNZ WnFڴ1M[/ h]R$BLqsRC ;AY, Ka5ꂄ#"H) $lKq yЎ*>沥̘}Υ闃3-|Vi(Q"':Xi)(OngHx(ݦ$t8p9  DɔR,]V!srs9A,\t=Uݶ e"bn]5B9 /s1R@ЙL$9#0˕ hEaRΖ\ /A܉x.V)}No+q 5s}r$6dbs @ޮ!(9 2ioH3%tI " ,N0- K=f0e;K(~^RbRAZDuCqM*5TˆB[ tF#c N;%`95sN.196"M@phB`&yYP$`1MG,gr)LA&B{ 4{P^4}c*1~R oħ=t2,mp!j A5cnSi^7S'ɣAsxQF$h) ɠK2,"A1$\̈́vL,ano3Gdb34ƫ; ierYK% ytrA2m*94A8tm63 0&?@ʚ]b+xcI8΄Vդ.jz*RSCD]>x(uSH2dC$C`{@9H̹҅I,2G:1*1v#@5JM+\ [%S2(Vm(NSS IV.5āЯK`#3Lg F`C>Ќf0jo?=9݂6 .:~7cE4/z8"A"7cj"PZX^eO,C0Œ"И Lft*8ދ4 :{ދ4:]0tQ|-WC>ZPL1AB_y faT 2\2`yQyqstd&ы[sމ`Ns r}\>AZ|*4 @I'{ɉxw͡/+,q(\"'-AS8jDq^g, 앀@u'`#2&ői\ 4XNu @"֤" e$~4E @"֤" e$~4EhIENDB`dde-calendar-5.14.13/calendar-client/assets/builtin/icons/dde_calendar_sync_schedule_32px.svg000066400000000000000000000072501473346337000322100ustar00rootroot00000000000000 icon/unionID/日程类型 dde-calendar-5.14.13/calendar-client/assets/builtin/icons/dde_calendar_sync_setting_32px.svg000066400000000000000000000133371473346337000320740ustar00rootroot00000000000000 icon/unionID/设置 dde-calendar-5.14.13/calendar-client/assets/builtin/icons/dde_calendar_warning.svg000066400000000000000000000065321473346337000301530ustar00rootroot00000000000000 deepin-cloudprint-config-helper Created with Sketch. dde-calendar-5.14.13/calendar-client/assets/builtin/icons/dde_calendar_warning_light_32px.svg000066400000000000000000000051671473346337000322210ustar00rootroot00000000000000 形状结合 dde-calendar-5.14.13/calendar-client/assets/builtin/icons/dde_calendar_xiu.svg000066400000000000000000000015731473346337000273130ustar00rootroot00000000000000 类型 Created with Sketch. dde-calendar-5.14.13/calendar-client/assets/builtin/icons/dde_calendar_yi_32px.svg000077500000000000000000000025701473346337000300040ustar00rootroot00000000000000 icon_yi Created with Sketch. dde-calendar-5.14.13/calendar-client/assets/builtin/icons/icon_refresh.svg000066400000000000000000000035501473346337000265040ustar00rootroot00000000000000 路径 dde-calendar-5.14.13/calendar-client/assets/builtin/light/000077500000000000000000000000001473346337000233065ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/builtin/light/icons/000077500000000000000000000000001473346337000244215ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/builtin/light/icons/dde_calendar_account_32px.svg000066400000000000000000000024451473346337000321240ustar00rootroot00000000000000 账户- light dde-calendar-5.14.13/calendar-client/assets/builtin/light/icons/dde_calendar_create_32px.svg000066400000000000000000000017671473346337000317410ustar00rootroot00000000000000 编组 21 dde-calendar-5.14.13/calendar-client/assets/builtin/light/icons/dde_calendar_sidebar_32px.svg000066400000000000000000000027511473346337000321010ustar00rootroot00000000000000 视图切换 dde-calendar-5.14.13/calendar-client/assets/dbus/000077500000000000000000000000001473346337000214665ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/dbus/com.deepin.Calendar.service.in000066400000000000000000000001451473346337000272060ustar00rootroot00000000000000[D-BUS Service] Name=com.deepin.Calendar Exec=@EXEC_DDE_CALENDAR@ SystemdService=dde-calendar.servicedde-calendar-5.14.13/calendar-client/assets/dbus/com.deepin.Calendar.xml000066400000000000000000000003221473346337000257360ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/dde-calendar.desktop000066400000000000000000000173731473346337000244420ustar00rootroot00000000000000[Desktop Entry] Categories=Application;Utility;Calendar; Comment=Calendar is a date tool. Exec=dde-calendar GenericName=Calendar Icon=dde-calendar Keywords=calendar;date;deepin;dde; Name=Deepin Calendar StartupNotify=false Terminal=false Type=Application #X-Deepin-TurboType=dtkwidget X-Deepin-Vendor=deepin X-MultipleArgs=false # Translations: # Do not manually modify! Comment[am_ET]=ቀን መቁጠሪያ Comment[ar]=التقويم هو أداة عرض التاريخ . Comment[ast]=Calendariu ye una ferramienta de dates. Comment[az]=Kalendar tarix alətidir Comment[bg]=Календарът е приложение за показване на датата. Comment[bn]=ক্যালেন্ডার একটি তারিখ টুল Comment[bo]=ལོ་ཐོ་ནི་ཚེས་གྲངས་ལྟ་བའི་ཡོ་བྱད་ཆུང་ཆུང་ཞིག་རེད། Comment[ca]=El calendari és una eina de cites. Comment[cs]=Kalendář je nástroj pro práci s datumy. Comment[da]=Kalender er et datoværktøj. Comment[de]=Kalender ist ein Datumswerkzeug. Comment[el]=Εφαρμογή Ημερολογίου Comment[en_AU]=Calendar is a date tool. Comment[en_GB]=Calendar is a date tool Comment[eo]=Kalendaro estas datilo. Comment[es]=Calendario de Deepin es una herramienta de gestión de eventos. Comment[et]=Kalender on kuupäeva tööriist. Comment[fa]=تقویم یک ابزار تاریخ است. Comment[fi]=Kalenteri on ajankäytön apuohjelma. Comment[fr]=Simple calendrier. Comment[gl_ES]=O calendario é unha ferramenta de datas. Comment[hi_IN]=दिनदर्शिका तिथि हेतु एक साधन है। Comment[hr]=Kalendar je alat za rad sa vremenom. Comment[hu]=A Naptár egy dátum megjelenítő eszköz. Comment[id]=Kalender adalah sebuah peralatan penanggalan. Comment[it]=Calendario è un tool calendario. Localizzazione italiana a cura di Carofano Massimo Antonio. Comment[ja]=カレンダーは日付ツールです。 Comment[ka]=კალენდარი არის თარიღებთან სამუშაო ხელსაწყო Comment[kab]=Awitay d afecku n wazemz. Comment[km_KH]=ប្រតិទិនគឺជាឧបករណ៍កាលបរិច្ឆេទ។ Comment[ko]=달력은 날짜 도구입니다. Comment[ku]=Salname navgîneke tarîxê ye. Comment[ku_IQ]=ساڵنامە ئامرازێکی بەروارە Comment[lt]=Kalendorius yra datų įrankis. Comment[lv]=Kalendārs ir datumu rīks. Comment[ml]=കലണ്ടർ ഒരു തീയതി ഉപകരണം ആണ് Comment[mn]=Хуанли нь огноо, цагалбарын хэрэгсэл. Comment[ms]=Kalendar merupakan alat tarikh. Comment[nb]=Kalander er et redskap for å organisere hendelser etter dato og klokkeslett. Comment[ne]=क्यालेन्डर एक मिति उपकरण हो। Comment[nl]=Kalender is een hulpmiddel voor het bijhouden van afspraken. Comment[pa]=ਕੈਲੰਡਰ ਤਾਰੀਖ ਸਾਧਨ ਹੈ। Comment[pl]=Kalendarz to narzędzie do zarządzania czasem. Comment[pt]=O Calendário é uma ferramenta de data. Comment[pt_BR]=O Calendário é uma ferramenta que permite agendar e visualizar eventos. Comment[ro]=Calendarul este un instrument pentru date Comment[ru]=Календарь является приложением для планирования Вашего времени. Comment[si]=දින දසුන දින මෙවලමකි. Comment[sk]=Kalendár je dátumový nástroj. Comment[sl]=Koledar je orodje za urejanje datumov. Comment[sq]=Kalendari është një mjet datash. Comment[sr]=Календар је алат за приказивање датума. Comment[sv]=Kalender är ett datumverktyg. Comment[sw]=Kalenda ni chombo ya tarehe Comment[tr]=Takvim, tarihi görüntüleyen bir araçtır. Comment[ug]=كالېندار ۋاقىتنى تەكشۈرىدىغان كىچىك قورال Comment[uk]=Календар Comment[vi]=Lịch là một công cụ ngày tháng. Comment[zh_CN]=日历是一款查看日期的小工具。 Comment[zh_HK]=日曆是一款查看日期的小工具。 Comment[zh_TW]=簡易日期顯示工具 GenericName[am_ET]=ቀን መቁጠሪያ GenericName[ar]=التقويم GenericName[ast]=Calendariu GenericName[az]=Kalendar GenericName[bg]=Календар GenericName[bn]=ক্যালেন্ডার GenericName[bo]=ལོ་ཐོ། GenericName[ca]=Calendari GenericName[cs]=Kalendář GenericName[da]=Kalender GenericName[de]=Kalender GenericName[el]=Ημερολόγιο GenericName[en_AU]=Calendar GenericName[en_GB]=Calendar GenericName[eo]=Kalendaro GenericName[es]=Calendario GenericName[et]=Kalender GenericName[fa]=تقویم GenericName[fi]=Kalenteri GenericName[fr]=Calendrier GenericName[gl_ES]=Calendario GenericName[hi_IN]=दिनदर्शिका GenericName[hr]=Kalendar GenericName[hu]=Naptár GenericName[id]=Kalender GenericName[it]=Calendario GenericName[ja]=カレンダー GenericName[ka]=კალენდარი GenericName[kab]=Awitay GenericName[km_KH]=ប្រតិទិន GenericName[ko]=달력 GenericName[ku]=Salname GenericName[ku_IQ]=Salname GenericName[lt]=Kalendorius GenericName[lv]=Kalendārs GenericName[ml]=കലണ്ടർ GenericName[mn]=Хуанли GenericName[ms]=Kalendar GenericName[nb]=Kalender GenericName[ne]=क्यालेन्डर GenericName[nl]=Kalender GenericName[pa]=ਕੈਲੰਡਰ GenericName[pl]=Kalendarz GenericName[pt]=Calendário GenericName[pt_BR]=Calendário GenericName[ro]=Calendar GenericName[ru]=Календарь GenericName[si]=දින දසුන GenericName[sk]=Kalendár GenericName[sl]=Koledar GenericName[sq]=Kalendar GenericName[sr]=Календар GenericName[sv]=Kalender GenericName[sw]=Kalenda GenericName[tr]=Takvim GenericName[ug]=كالېندار GenericName[uk]=Календар GenericName[vi]=Lịch GenericName[zh_CN]=日历 GenericName[zh_HK]=日曆 GenericName[zh_TW]=日曆 Name[am_ET]=ዲፕኢን ቀን መቁጠሪያ Name[ar]=تقويم ديبين Name[ast]=Deepin Calendar Name[az]=Deepin Kalendarı Name[bg]=Deepin Календар Name[bn]=ডিপিন ক্যালেন্ডার Name[bo]=གྲ་རྒྱས་པའི་ལོ་ཐོ། Name[ca]=Calendari del Deepin Name[cs]=Deepin kalendář Name[da]=Deepin kalender Name[de]=Deepin Kalender Name[el]=Ημερολόγιο Deepin Name[en_AU]=Deepin Calendar Name[en_GB]=Deepin Calendar Name[eo]=Deepin kalendaro Name[es]=Calendario Name[et]=Deepin Kalender Name[fa]=تقویم Deepin Name[fi]=Deepin kalenteri Name[fr]=Calendrier Deepin Name[gl_ES]=Calendario do Deepin Name[hi_IN]=डीपिन दिनदर्शिका Name[hr]=Deepin kalendar Name[hu]=Deepin® Naptár Name[id]=Kalender Deepin Name[it]=Calendario di Deepin Name[ja]=Deepin カレンダー Name[ka]=კალენდარი Name[kab]=Awitay n Deepin Name[km_KH]=ប្រតិទិន Deepin Name[ko]=Deepin 달력 Name[ku]=Salnameya Deepin Name[ku_IQ]=ساڵنامەی Deepin Name[lt]=Deepin kalendorius Name[lv]=Deepin kalendārs Name[ml]=ഡീപിൻ കലണ്ടർ Name[mn]=Деепин Хуанли Name[ms]=Kalendar Deepin Name[nb]=Deepin Kalender Name[ne]=डिपिन क्यालेन्डर Name[nl]=Deepin Kalender Name[pa]=ਡੀਪਿਨ ਕੈਲੰਡਰ Name[pl]=Kalendarz Deepin Name[pt]=Calendário Deepin Name[pt_BR]=deepin Calendário Name[ro]=Calendarul Deepin Name[ru]=Календарь Deepin Name[si]=Deepin දින දසුන Name[sk]=Deepin Kalendár Name[sl]=Deepin koledar Name[sq]=Kalendar Deepin Name[sr]=Дипин Календар Name[sv]=Deepin kalender Name[sw]=Kalenda ya Deepin Name[tr]=Deepin Takvim Name[ug]=Deepin كالېندارى Name[uk]=Календар Deepin Name[vi]=Lịch Deepin Name[zh_CN]=深度日历 Name[zh_HK]=深度日曆 Name[zh_TW]=Deepin 日曆 dde-calendar-5.14.13/calendar-client/assets/dde-calendar/000077500000000000000000000000001473346337000230345ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/000077500000000000000000000000001473346337000246055ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/000077500000000000000000000000001473346337000260755ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/Ctrl.svg000077500000000000000000000040711473346337000275270ustar00rootroot00000000000000 Ctrl Created with Sketch. dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/QM.svg000077500000000000000000000040111473346337000271320ustar00rootroot00000000000000 QM Created with Sketch. dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/Shift.svg000077500000000000000000000067711473346337000277110ustar00rootroot00000000000000 Shift Created with Sketch. dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/add.svg000077500000000000000000000040031473346337000273460ustar00rootroot00000000000000 button/add dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/add1.svg000077500000000000000000000037321473346337000274370ustar00rootroot00000000000000 新增 dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/attention.svg000077500000000000000000000020421473346337000306240ustar00rootroot00000000000000 attention dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/close_icon.svg000077500000000000000000000023671473346337000307460ustar00rootroot00000000000000 Rectangle 9 Created with Sketch. dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/dde-calendar.svg000077500000000000000000000207651473346337000311360ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/dde_calendar.svg000077500000000000000000000170741473346337000312170ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/deepin_launcher.svg000077500000000000000000000076341473346337000317600ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/delete.svg000077500000000000000000000030771473346337000300720ustar00rootroot00000000000000 icon/schedule/delete dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/edit.svg000077500000000000000000000025721473346337000275540ustar00rootroot00000000000000 icon/schedule/edit dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/icon_menu.svg000077500000000000000000000047771473346337000306140ustar00rootroot00000000000000 image/svg+xml img_upload img_upload Created with Sketch. dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/notes.svg000077500000000000000000000031531473346337000277530ustar00rootroot00000000000000 notes dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/search.svg000077500000000000000000000013361473346337000300710ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/side_menu.svg000077500000000000000000000027511473346337000305760ustar00rootroot00000000000000 视图切换 dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/common/tips.svg000077500000000000000000000030731473346337000276030ustar00rootroot00000000000000 tips dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/en_US/000077500000000000000000000000001473346337000256165ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/en_US/calendar.md000077500000000000000000000311741473346337000277220ustar00rootroot00000000000000# Calendar|dde-calendar| ## Overview Calendar is a helpful tool to view dates and manage your personal life. By creating events with specific time, you can make your schedule easily. ![0|main](fig/main.png) ## Guide You can run, exit or create a desktop shortcut of Calendar as follows. ### Run Calendar 1. Click ![deepin_launcher](../common/deepin_launcher.svg) in the Dock to enter the Launcher interface. 2. Locate ![draw](../common/dde_calendar.svg) by scrolling the mouse wheel or searching for "Calendar" on the Launcher interface and click it to run. 3. Right-click ![draw](../common/dde_calendar.svg), you can: - Click **Send to desktop** to create a desktop shortcut. - Click **Send to dock** to fix it in the Dock. - Click **Add to startup** to add it to startup and it will automatically run when the system starts up. ### Exit Calendar - On the Calendar interface, click ![close_icon](../common/close_icon.svg) to exit calendar. - Right-click ![draw](../common/dde_calendar.svg) in the Dock and select **Close All** to exit. - Click ![icon_menu](../common/icon_menu.svg) on the Calendar interface and select **Exit** to exit. ### View Shortcuts On the Calendar interface, press **Ctrl + Shift + ?** on the keyboard to view shortcuts. Proficiency in shortcuts will greatly improve your efficiency. ![0|view](fig/hotkey.png) ## Operations Calendar can be divided into yearly view, monthly view, weekly view and daily view. Monthly view is the default one and you can click to switch between different views. - Lunar calendar dates will only be displayed in the Chinese system in paring with the solar calendar dates. - The dates start from the year **1900** and you cannot view dates earlier than that year. - In the monthly and weekly view, the display of Saturday and Sunday is different from that of days between Monday to Friday. On the Calendar interface, click ![side_menu](../common/side_menu.svg) to show or hide the side pane, which shows the event types of different accounts and a small calendar. 1. By checking or unchecking the event types, the events of the types under that account show or hide on the right. 2. Click the date on the small calendar at the bottom, the calendar on the right changes accordingly.
View Description
Yearly View Display the months and days of the whole year.
Monthly View Display the days and events of the month.
Weekly View Display the days and events of the week.
Daily View Display the detailed events.
### Create Events 1. You can create events in one of the following ways: - Click the ![add](../common/add.svg) icon in the menu bar on the calendar interface. - Double-click, or right-click to select **New event** in the blank area in the monthly, weekly or daily view. - Click and drag the mouse in the monthly, weekly or daily view. 2. Set the event type, description, time, reminder, etc. in the pop-up **New Event** dialogue. ![0|create](fig/create.png)              
Field Description
Calendar Account You can create events under a local account or network accounts, such as UOS ID. Local account is selected by default.
Type There are three event types, namely "Work", "Life" and "Other" by default. You can also customize your event type.
  1. Select New event type from the Type dropdown list.
  2. The Type field becomes editable. Input the type name and select the color.
You can add, edit or delete the custom type by the Manage option in the main menu. Please refer to the Manage section in Main Menu for details.
Description Input the description information of the event.
Event Time Set the time properties for the event.
  • All day
    • Check All Day: Only dates can be selected as starts and ends.
    • Uncheck All Day: Hours and minutes are available for starts and ends as well except for dates.
  • Time
    • Solar: Starts and ends are displayed in solar time only.
    • Lunar: Starts and ends are displayed both in solar time and lunar time.
Reminder Options for Reminde Me with All Day checked: Never, On start day (9:00 AM), 1 day before, 2 days before and 1 week before.
Options for Reminde Me with All Day unchecked: Never, At time of event, 15 mins before, 30 mins before, 1 hour before, 1 day before, 2 days before, 1 week before.
Repeat Options for Repeat with Solar checked: Never, Daily, Weekdays, Weekly, Monthly, and Yealy.
Options for Repeat with Lunar checked: Never, Monthly, and Yearly.
End Repeat Only when the Repeat feature is enabled, can End Repeat be displayed. The options for End Repeat are Never, after n time(s) and on the date selected.
3. Click **Save** to create the event. ### Edit Events 1. Double-click or right-click a date with events in the monthly, weekly or daily view. 2. Select **Edit** and the **Edit Event** dialogue will pop up. 3. Set properties for the event.   4. Click **Save**. 5. If it is set as an all-day event or a repeated event, a prompt box will pop up for you to confirm information. > ![notes](../common/notes.svg) Notes: You can drag the event label created to a specified time or date to change its starts and ends. During event editing, different prompts will be displayed according to the changes of content. Descriptions of buttons in the prompts are listed as below.
Button Description
All Effective for all relevant repeating events.
Only This Event Only effective for the current event.
All Future Events All the future events on and after the selected date will be changed and the events before the selected date will remain unchanged.
Change All All repeating events will be changed.
### Set All-day or Multiple-day Events Set the **Starts** and **Ends** and you are able to set an all-day or consecutive multiple-day events when creating or editing an event. ### Set Repeating Events 1. Click the dropdown list on the right of **Repeat** and select an option as needed when creating or editing an event. 2. Click the dropdown list on the right of **End Repeat** and select the end time of the event. ![pic](fig/repeat.png) ### Search Events 1. In the top search box of the Calendar interface, you can click![search](../common/search.svg)to enter keywords. 2. Press the **Enter** key on the keyboard for searching. 3. Click ![0|close](../common/close_icon.svg) or delete the entered information in the search box to clear the current keywords or cancel the search. ### View Events Double-click an event title in the monthly, weekly or daily view and the **My Event** window will pop up. You can view events, [Edit Events](#Edit Events) or [Delete Events](#Delete Events). ### View Schedule Details Click the message to view the schedule details when the system sends out a notification. Descriptions of buttons in the prompts are listed as below.
Button Description
Remind me later If the reminder is set on the current day, when you click Remind me later on the first reminder, you will be reminded again 10 minutes later. The following reminder intervals will be increased by 5 minutes each time you click Remind me later.
You can also choose 15 mins later, 1 hour later, 4 hours later or Tomorrow from the Remind me later dropdown list.
Remind me tomorrow It is shown when the reminder is set to one day or two days ahead of the event.
One day before start It is shown when the reminder is set to one week ahead of the event.
Close Close the prompt.
### Delete Events 1. Double-click or right-click a date with event in the monthly, weekly or daily view. 2. Click **Delete** and a **You are deleting an event** prompt box will pop up. 3. Confirm and delete the event. Descriptions of icons in the deletion prompts for repeating and non-repeating events are listed as below.
Button Description
Delete Delete non-repeating events.
Delete All Delete all occurrences of this event.
Delete Only This Event Delete only the selected occurrence of the event. This is only applicable to repeating events.
Delete All Future Events Delete this occurrence and all future occurrences of the event but the occurrences of the event before the selected date will be retained. This is only applicable to repeating events.
## Main Menu On the main menu, you can manage settings, view the privacy policy, switch window themes, view the help manual and get more information about Calendar. ### Manage Click ![icon_menu](../common/icon_menu.svg) > **Manage** to open the manage window, where you can sign in UOS ID to sync events and settings to the cloud, manage event types, and make general settings. ![manage](fig/manage.png) #### Manage Accounts and Sync Calendar supports sync events and settings to the cloud by UOS ID. > ![notes](../common/notes.svg) Notes: It is not available in old system versions and deepin system at present. **UOS ID Sign In and Sign Out** 1. On the Account Settings interface, click **Sign In**. 2. In the pop-up window, sign into your UOS ID by entering your account and password, or SMS verification code, or scanning QR code with WeChat. 3. When signed in, your avatar, account info and related items are shown. Click **Sign Out** if you want. **Sync Settings** 1. When signed in, Check **Events** and **General settings** to sync them to the cloud. 2. In the dropdown list of **Sync interval**, select the time interval for auto sync, or choose **Manual**. 2. Click **Sync Now** to start syncing immediately. > ![notes](../common/notes.svg) Notes: To make sync settings available, you should turn on **UOS Cloud sync** in Control Center first. #### Manage Event Types Click ![icon_menu](../common/icon_menu.svg) > **Manage** on the Calendar interface to enter the Manage Calendar interface. You can add, edit or delete custom event types. **Add An Event Type** 1. Click ![icon_menu](../common/add1.svg) on the Manage Calendar interface. 2. Input the name and set the color for the event type in the **New event type** dialogue. 3. Click **Save**. **Edit An Event Type** 1. Select a custom event type on the Manage Calendar interface. 2. Click ![icon_menu](../common/edit.svg). 3. Input the name and set the color for the event type in the **Edit event type** dialogue. 4. Click **Save**. **Delete An Event Type** 1. Select a custom event type on the Manage Calendar interface. 2. Click ![icon_menu](../common/delete.svg)to delete the event type. #### General Settings **First day of week** In the dropdown list of **First day of week**, select **Sunday** or **Monday** as the first day of a week displayed in Calendar. **Time format** In the dropdown list of **Time**, select **24-hour clock** or **12-hour clock** as the time format shown in Calendar. ### Theme There are three window themes, namely Light Theme, Dark Theme and System Theme. 1. Click ![icon_menu](../common/icon_menu.svg) on the Calendar interface. 2. Click **Theme** to select one theme. ### Help 1. Click ![icon_menu](../common/icon_menu.svg) on the Calendar interface. 2. Click **Help** to view the manual of Calendar. ### About 1. Click ![icon_menu](../common/icon_menu.svg) on the Calendar interface. 2. Click **About** to view the version and introduction of Calendar. ### Exit 1. Click ![icon_menu](../common/icon_menu.svg) on the Calendar interface. 2. Click **Exit** to exit Calendar. dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/en_US/fig/000077500000000000000000000000001473346337000263635ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/en_US/fig/create.png000077500000000000000000000712471473346337000303520ustar00rootroot00000000000000PNG  IHDR?Eo pHYs+ IDATxw|S?W7x7 ;"%dIICMiI:|&!@x`[C,Z2m0}m}˺::H>:s%fBAv]f ШjۀBF0B#!DBF!`#h0BH4!$` F0B#!DBF!`#h0BH4!$` F0B#!D#hXxFOg&FweUz:$\sdVPVs7wua/Wwf9CFh:/f-A_ǻ`+.TydЯItYJ盓pZݠw3u<{=hd pxF0 Qh)r,xGy+ZݼL7&}т1:rho l̊=S-Hb]34O^zI}C{(C#/g?m/|$d?_x:Nnzg>dI/a@h<ߏis5SdiIq L)%h_Z?< @T|dEn#˺pPp H:~nP_yWO%Ժ/VXlqz mOz.O$@yKyzs[u~;(0ʔ|u$)Vl _Q`t%r%l8Youy_GSYصKF`/`/W\~_笎d, 6-?\;\ʂ=\\; ZI-:E{k67U VƇ6TY+Z1-f"*-}31 CfN|<5*1#5Q޲37ViZ1kF$-۳{}C1& R%[ ԛG${Z',J=Fa1,U @f+HC+'Thw0aiZU"++-<ѥMN01]𔛭4.&?1cS^Q`trپsy"L{)*2jPѳ \ {;w@(դ9.uW[3"0Vun&&EJO} U>ǚ<*R]P֖U(U;٘wݝtӸgMEyj&.`7I9vv^=%NbNz"s)&?<~ $Ho\(i"IH |7v޸e6)'pl MNT|\OIT1BK7ܕI)sw?{hpu3äN2߿o8cVԇ?n%K b4a:D'LhZb%)D9!Ss,XtONc gM4G b6v@QGW=B#!DBF!`#h0BH4!$` F0B#!DBF!`#h0BH4!$` F0B#!DBF!`#h0BH4!$` F0B#!DBF!`#h0BH4!$` F0B#!D##D"aYV"PJ !t!~~~+J²l7B2AxgR* V͘h(d2T-aTqT*j4F RU*&/B˲*+ʠT9P(nBHLra$8a! ,tjUB^0J`# xQ?!#%0BH4"D([*Q֯?\+K(]Y Τ4xxC>*â,mjbw4Mд}a/s D0m/]g-^.g A3w-egb7~埘;k<˲61({3d<1&!pjC5VGN7KݓW}66%[:sV Gw66Mr&yҌo/L3Ƣ q1zӴ] urDe]PFϽ{ΜXϥsV ?]f !z^zQXWLsуSdoYwF MƑvm>S[iҲZs/OvZ<M茕= c[vo|$w](1A_8Y=eOFtIc&& JN7f\bu^㌶sNVԤ̜㥞c 7jզ 3u6WQ|hIz^HsA61gRbQTjZZ-V0.xp0vh%ܬ;` &{tخ _ɉ5!>4:.qrf 棝 @B #R @ۛm>}tT۪|}改=6>+蘞:7Ti3;~\AsM#v.db™u~44wǫ|l{γu#TuXRDbK([- B輘+Ѷ+$>Nyi229[g2kML."Kv5*.&ϞjxSo蠼D ;h[;{sKIu5?eS-_ "Q( 2\^0l`ݵfyvLAH$!uo†O,NzOMz{+LkH5kWTI[ 4FUۚ7E##~͇GBũԩ?*$M[lu6[T9D+c1&jyWW6 a& \sCBkIY{)#8m}lV1huUӕ 1$X+j|W,#0UK}6u6TX( /mC-ks pkFx˫s˫ D0rOIi?WXW\]U}xEjTAApW:zaM0=?چ6gܑ  41mjǶj[Ruqs`B6p5v|7 {~󧯾i@=6|XoD :KOt3dZ{^}zG=dp~sumƺ3AeԳ6۲>Z@z)Ntɱچ gj}D6{JVlI$ٱbf4Byi&:.\()8b[Ɂ^ N[GzL.!(ٰ|Ww 7xF ^9y=k^)g:y6{G7^4%eޛʸ{~ӑ7^ꢦ/>z@scl[˽,hZֺ7 iSԉ lsn/]!MO^ҷ|i͏-iH^9QM@e;/7]7EE]2!wv&01N燞ݟ|[]ǒsb+߸k}$GK6lɳyo>*b'|{3%@ =Zy_T pQyDyҷֿzqOHIihDb١~lۇx#q*JV  hObo!DBA=T!4DB(`/ "xvQp:DyJ)iՂnB{Z 8o #4 <A=L&lj<\"vBHARq\Pj7N'!D*d2uIЭ3z}>4X 7G& znwqG !a$Ipz1o02YD!$` F0B#!DBF!`#h0BH4!$` |$ ˲$p3Y}fë_VUPgM ?xYa]o.Zʬ{_XFP~hŪw-w](1䅇5avIM3sN r)29HqP.,vҜ'ɋ'g)s+KϵQ` }w.p𱑙)/tC¸DsVZ&91Y"T<^1)1!q,Ow8r[9>+cl~wAHA >6/>RVQ7;S7ꇓόMMּ_V3Ea;w-*+)8}]H1,JvJiGPͫڝ +'(:;aF2ae&'@eE‹2ꫫoSF/BcT53J)ٖe*+ r%q1/~~S@&ƛ yltx݆SEI Bgj(\*4@)e=v4éF9UJb|"shqmxcĐ-i ${T^ Ʒ}~tңi톐c#^?m͏~w;4cuU%U Q9]Yo[C[gl&@HHH8ckhtj}GTIW#Фl#bL o8\n$hziz1Ƅ?eݿGo = FJW?$縗W?4d yhN*~tňse-.jsVӘ Q$6+؞Wlm;,UVP93h JotR*HI&4#MQzάLO cNKMe95;msk 2i|'fMsOϷ7c#t8+_c_֘BՕD67y{GjlHRcF2 KwnڸcԆqS TwTIL˜XʬK2qIgSFu_ }?Om6O2v]?+IIK,O?:>#G`BݱP$l>X ma b ǩTq ؍2U߳)^'ɒi#Bh8Ng@Zv0#+v$^ExN8"A) |3_>i[g uz=< }igYT=MauIx4PD7 qVLs V /5܇ A9wĠjryʩb7!$2AnH%<|+s3Ш(U'(0LC*~!Ji0oL& !4<B! H$nb$ad2ح@l8BF!`#h0BH4!$` F0B#!DBn˲r\*2 G!9J >vDRrح@ )B˲v:A"Ga"4rN0ARI$݀DR^F l p!~1_fnQRT& 4#FB <0VnEu3XAptQmuάZM4 IDATRAv;nxΎ%Y99~xlAha e3&g3`XƘhSXRU VAg5D\{oK2)ƦF>~^Rd$@cSˡsF@a}Ɣn}R9'Ө]7Ζ,;E*4/xB)%)9WX,axaKjc#J+nVת+*ORJܒɤw. al4w_FH%lؤvs;OH>s-,b 95YZRb 5;&f`i;.OtT Gd҅s&Ϝ]\|*P^Wo>)krADc-]44^0~PBJj||$9=13[xD5Tf&_yWeuAN$DFC 5u 'I,I Qu ٝ׮tAYcRbLƺk)RSo 9pϞòB%%DUԎMJ!;#YR@Jb́(PEH42pI,+- O~{K‡R/^!B0M&$y7BHNfʾbCvmC~5hT TjksO,ٝ~gYFQ_[hSho@tTؑ}~ei) aJ)HXF!(0@'8LdF`4ħ$$lM'ƽ03I}D'L;{4 :6%Nhq`v`is Iù%y?{ mO٣WxaȞO2:ʶ:on[z$%;TzhCF?K{~%Kss'VTJش/Ξ5@)"Bӓ1,òѠknKcN*CMVA zMrY׌AD+r5BϚCs"Zfv.mFz³ӓ[>IZԼDBdz Mg?ٖOXWsSˠ!~ˎLXļPp6: `=w.+X\zN}._W_k_:=j'<x, D,{YSTQY5Q+--r[uuab!ƪSa(SXMEV84:K(7z$BJ)`>#4e#1X90y0R>}X}e6 xh :)UNDg/ްOϞ=%I#nmc=,2-3eD=scl8i 3ӪLE*bƔOF jB*ar.0>q2Je ́jT N X>9B#g}~^IƈC9N,aȠD`iY(lؼta8D9f=R虯|ݯ>V{&\Q7qnKnt+0^q̝5Y4wJ/wyMP!&O02ܸdz;;wX,3eB!0tkHR!!!ጭMөRqiTgpͤ wQ+mtYy7`tZP-#)-8LvZVX\X"\bka:|\yq;j[\r^ iN5[MڮִۛY_j_v?!Wp"<{W*' ,KwnڸcԆqS7; ՛=8u"B#F0B#!DBF!`#h0BH4!$` F0B#!DBF!`#h0BH4!$` F0B#!DBF!`#h0BH4!$` F0B#!DBF!`#h0BH4!$` F0B#!DBF!`#h0BH4!$` F0B#!DBF!`#h0BH4!$` F0B#FQJnBhxx,`(AnBhxx,`('vBË` 7v9z0fa_QvT% J-td2a!b!4( x^|<ϻ\.%vCB#D h0BH4!$` F0B#!DBF!`#h0BH4!$` Fಸ'r$vCB)QϘ+LJV+hU8rh#BhXInyJO{>_0K747!4"` 3!}~gؽ!kBhı`Q֯?\+([3͋c6T(u?1TRzI[#*h`o~Xت7\'߸)Fԇ$͘?'=Q5/D*rzmdIN}{ƽ^ Сl!BhRSO aϞ^#ٔ;[-~wK}ͱϺ?^7|SR<)C_lл>G<'^a!tD0u)UO[sz˅gdU?+UC ацw6ߕ5ճ0~( ~x4%4P/:l/( K}R)"b0&OɤG.t`\V{ScG{sQ&qU- > +Ħj쫴'%+hۅw_I8 =nUXBԞ!iBhh/ziK"aV.c? q$D K͝3M=n억+D}/\z6!S>{8Eg 0@he=Z zmڵ2'#zDfn+:.̕vv"5&\zcփG!jGiz|jر#!4AϬUIu2^z(פE* /B#-k7R d'R+*I:("f  c  \!4":/~!{b^,p, !tFX0BtZBF!`#h0BH4!$` F0B#!DBF!`#h0BH4!$` F0B#!D3®1 ! .)D*}3ZRn6X(^IdR5)xՌ+gMk+^Hl~)^jn $ F4 3r,>@;xԢ^ ycFŭu61-8-vSVV!4r X0u/v T^9k-^=k 򊅶7FZ% Q_{WXJ%7B3^ֿ{-ݽ!csS[s._[a91ޤP[6N5uWHθtmUSf!'vTjս6h5rokw4>kFI ݚoc|#+')속?=3UT:u֛C:"V9$94? )z'9ׅQS|"FKS\1܆(݄T56ýsݠ~U [#V36hG[~e`0e!~˩;I:}_9ba"WOZFզyKgΊ~^Yʳ1%~̠;tyc{] aُq#TXkvK0u~nf讻Ug7l?[P SKa=Zh8Q'%FEy?{ mO٣W }wLod܃z}'&$;^[[G.gw}W&uu8XFUw:[;^?U4aj[[-D.q7y}RelB 4dE<1g3/ڙhrm:xor &_q* aխ ? ?ts+ _hQJ{aAORh.xd0JջoDqW?Z8H5~Q֤G2 XE?aJՏ ?08?BCtF)x''jY`X,D$rַ:s9X>T'cIЕcIigFԦI~H434DK$ַ@O,N9'QRjRfNR|??%ntLS~7jBs+n3Uqc/N8~末ۃ.i$Aƌ[7E##6hs !5giq]Ҩnn W.;\Z 7afD0NȟpmCpȅ.v|Nyj+nj IGٕ@bsJ]KW4YZkʋ6菏K2QrǴY_ZS2ٸ̫6N&MUw塣G4 ?1f,^_׏ d,=?q@%R|q˞҆bmnڿTiJʼ7]祜zCrS?cFp+XϟmwTOHŒc¦)= VA.8y=k^)g:za 7ٽ>Au>,t8;. Qա^Gs}a2NY<} fgUaN;z^Osy^N@bK9[vwM)dR 4Z#xJf&'l_zRx}8Y,{E0BH4ZvC#!DBF!`#h0BH4!$` F0B#!DBF!`#h0BH4!$at"D²D" \ʹ%p'ByhF;RIaY6a( PJAp\Ai'@BWh4Rd2T*x0R8TJ)h40LT~J˲*+8uH$b/-HpX0BB! dۍ%r FD"ka/`#tPFЬ s>@2`4}PwuhxF!`#hOTeS6Ϫ )3VΈ -;>j||$yjo\÷ݾUE޷4'A@M7.lvUlo-ɈQz܅]q훏y$/L P,J}Wmھ&LشGmf󾷶p?;{1uf m֪ L{=̆03IBm7껸O><;%gL!4_|㩭|7̛&SRGN#3Ƕ-e8}I16J~1&oxW'-`Vc;LW]|uh3U1Q!u[5N)!ѦOJόiJ _1:yˆTjBRCOIR^r@_me,vn!OqJmHZp|EĴXb)j)#crjhS޳U&ʝǷlZdJIT=2$L&Ls7gg$K}?!%1ZM?χgM8h1Ji/,h4tDMX%T5%,Ξc ywi˦k',s^if _0s3K~UB(@ 9 Gѩ^]KM1Pe01|om-(HV rA k-h]wAE@hi6t6H  )Q7@7!P󧿮A]'Ҁ?eeWݾHUy6+(p IDAT(1SUCB 3Mq:5@$2B3D c\쓿;hӇm/}“3-EGRV+pnVkܸLDDT>@}_)}Ůێ|SMx˩?\'LH!^~!a5NgG`aǿ[.#t]AؔW%L|GzKSy;_^t]ȴXileڸ7'gLϙQ{~<..о\h,=a5TP._n?J%%&J\ bsnݾ×(tNO֮9cRz#su'Wk^~a2Ǽ *R~}q^0G5m76Hī_ܱW1e%*0!Ygjn邽_o>9%iD~hGv{c]LR|N@w;]C5cÙ_/c\ʘ$ dŖ1 s1Ǧt2c7/ y*&-M^^pWc4^XWFL:Z&7}?=A DC-rUh&Z8W)@/ΈZX֍#]t5Y} 9ݯGѲq\5a8E[]S6cgpڽ1`f{o,e BՕ%g!ˣ7^#1m%yB21!eWg6|9tٽ񒖦*"U#uʜɉ6;kJlywda+1M'O;|T'O}faFФ.[f_m{lw̺П~@e>sq~{/qc&=fw>خ̶c뷷}DaY`Apu?yy<[%nÏ?I&r=?fZ@B&} f{2s3{0QvaX+EC ^0B$IJR_e;B#DQl͆+#`ZߝE$u=p,+ `Xz$iʲ,˲kRjXT*`#t JeZ !< ۑ}[p8N'FZ Ȳp8l6-~sB0F0Bm`gdR F0B)#!BF!`#b0BH1!`R F0B)/PF DZ,qk/CEQ$\)] #kiZB˲Yҵ%T妦&p  z <y^RɰSmݟ1&Զg\~gNʪ]snRqezkE#m:z$b Cg;kXxݻ˭9hӹ..~ף_?g}Z<9%ʬxZY}{ cJl1gmٶ"F@Ձ}m3nFF75Μ(M+}2`/D:*~ش?Uqm1侌|cc avk6`XZs;߳jH1PQ|m~:q1%M?kڔw#Uđ*=C:`~hMуSNvxs3wyY w7~ʈC*iLHzldb(`>43HܠChc~Z!i?-;Qz߳ }4`1'ObCȐ9s7g}wߟ>*.>%3eyႤnCue嚝󟘮ը銍skRn;*7o:r ."TA1T h?}|6;ﯬSꆺ#DW^?z^\K$G6J Fg6LɣE$IJG31ڌQj®tMhSZXAekl7*eU| 0AAP|8A:vNbW,G~S MVJm)Az466ㄩ6iԪ Wp?VJꢹ:]/1$ pRXJvJ*;^EZ_YCBFr:$PGRW~D~cG kQBme۾>x)a>Jdz7]^2aϬYU+6~mswpM䫊]\S֖m۝~91Tk3gRJoeZ%nc_tc ˼ג,/]Vپ8/Ƃ AWi @oyii}eGOÝ8=]@˶.q*x ]]LV'G5Uo|\|*ψzoы؛D.n ?bZOomiԼ'"]G̜F_S[ j~w>u˫~ts߇׺Cq2ɿyr=~LshS/w`F9fR_"bٱLgH͕1IV%05񺶊ɍ6~w)y#{2"" >,g,Ft/]ngz4_ SbbνvƌԞK{AXHKkz3Mgqunmi$jJ+\,z?_uĨDU?lqayNA.?ǎF;'0u΍}*ޗ#brW`WSQ@x9ؤ5Ў1żGO< E34Gwv]eOYNUH![^v eV搨C3e Igk\=OWYduXaNoPx@05K'j%^sGE@gO\U6:Y,֮,uscf6%Xo3u֮_{Ϛ;ww*HAAA}}@Hy*JuVݎWhF#!r0BH1uw!FJEfwَF2`p'Bnva%DQP+I($1;B#DQl&bgu 1 cZ];*IR.{X0BWbz)IӢeYebTxe3F*jBx5{#˔np8NJ)/jеAepl[\!a8t%`0 N!`R F0B)#!BF!`#b0BH1!`R ^|8cY8_Fݩ\BDQ$ W FWZ²7.nεR%0RYf0\ #!!lؐ v!`A؜`#7s6g6ȝV)Orf>dsfV֓.vb e!?'+Y'v @X^?4ypS KL3--?3ynZ5f?@ALALNƽ<%UYm].=W4Ҥ#T~ˉSe͌)h3 b7~0?<زs_^i3'#.aK=wryKe傭|CFL[KD!Ϡ9p\^!-bc9!L.;F>jL?lAןȩMQ  7}zk^ǍC[8ّ#w\~V>#;`ޯKV+Q9/=䱁$dbL7<-秹 Kve5ܥҙN~>|}І#o(1>ÓCm鵟9 ?P}F-Þ|潷rPeP?審uۿ|n`m=@G>G^4k?fN맼x򉾖n_ryǫ//{ڑ7w>著_|Qғ9;Q$Ygn\_ts`*Y N>#'k\6t@V4wS& kޮ6.2ؤ;hXƻg1afoX=> e 9ֈISE)=x4$lܻ#~) h =nhDY3دRu%Cfue-?-v܀w2LO/8xBlISܡ,5M;ۇϜtWo`) tFQ?g!?ɣgޕӛCO쓗^3 *"Ocw K5Y9K=t@WE'2uDg%O2)iv [cc|L~NAܬ_`煠A$ 9,e d=wq[mt^hЅ0'Kio}1Q!7o-8/NŏyyJ8Sbפ!j`^/uj5 ^9x++W?Ga/qr)s&lr]uCt6F` l~6I'q?lzvߺg^W?]Ŗp傔!S_5ܲ ª nQAKw>X/I]tPwt\`9)O9 4+1i9&$1yKMZc9\@ZZQ#zy"gsR__}r˞MQcMSK?mlAIMCU'}$7V`R}ۖ)G+;Rnӗ ?p 7^E2>si O̓;2>^+}C"O@16})4eRʨKQY]˔2u4SYt4po_YK 3gT~lԈy*{AG[$ HǙml77c}qɮ =)| -35V7D }tf<߾|feq/81Հُ.N]b]5ō?3eqp)((W݃JxoCЯ_xQVnre4C53ME  l՜_(|X|;bf??[}Q=| |h΃kG vQծU"ۓefl^z n7YމǨ\p v;0mLP!xfx!I(5:j>( &*tnaV7vam$ y]8^ X,^t:%IbZ(]/dYe5@)X,*U[ޡ#T*j%A `;hF F0B)#!sҙ_|a>Cg 7uE7MH7|H'Z:ozhK}U2gYER /߸W_ڋ<6ڧ|G,]1ʳzpظ:㒬t=Pڟ&IRJkDF3q~LiJFt3o9q1 ?v_@#Cv97cƈ> Tj[KBp3g `xYe0sVr_unW_~|).J(DŽixjV)L>x:X\s8LH2O|iOƣ_^y ΋?ZL^ 5FOŤj"WozweŔGryoN޵*V̺,{K!Ifb5IDAT+G"Cx00 Y+V޷tmںUH*9}gMsTgOOI?_scL_NLną=ppfƘ!GNuGgEߓx]:>L?/|cNȅo60<)xEW6($&Ė ;oh ;as/[0&WY>d>N/%Ygn\_ts`*Y N>#'k\6t@V4wevJL_o 8mPP2l24Zc`ʄ: _Ȅ ZXUg?꼧)*JO"Vmorѡc9Q;𱋾CzUf@9INlISܡ,k I k'K;%IpٚUyml;,dL>#QGY~pJ}<́&wT2~BFU-IM/M5X)@CmsU49)MR8UdRz㡽֕ 1_h0ƞsowJKgWFŌYن3*V; >_ýeGU$S`B8ԛD.]G߾8ֲ/77&*<B3u+V^|M0.W^Rhm~X#R6y4>QZ{ztvz,kVZwS#Ƕ PJA83#/?FCa9{q(wh@|A|kY^'P <.&*"h=+%I+<3:+iN ӆcy :Ao6LZ:w˕@B|}Kyoj)o6j5,Hee$btJRzO7v%Hi+c܉ˇme56 qpB_KsiyÂX`‚AZ`PazUb[q\Ը1)̚`‡ ;ƺښ̓i%,~ܞWT_UcKfUH`h:mʒGj(0FI),wR-y;4C}M΂UM;_V,?p0QSk*sҎ*z[7 ?"sx駭/(i*~Du /DGbv)!t̯0kZxS`㎌Jyߐݥ1nB 7{p0Bܔ4vlHVd>#0a[?!ߌ)}לwԤt4Td˅77`k.yU"b<@4~ٳ[>MIӖٙ">:LzUB;!]K1{٧^&UT*Nt-jvkd4оlBXx܄Bn/A؜(2}jw*]ɲll6AJRn,ےhư!!\gv;0׬mEC v$RzaEؐP+EPl6Q 0ju. $6!<ǂKŢN$IL 논,˲,(ER)])0MRYVB fwگFZ[p:R_ #v ˲l7]!B!a ] #61 #ҵ@uoBF!`#b0BH1!`R F0B)#!BF!`#b0BH1!`R F0B)#!BF!`#b0BH1!`R F0B)#!BF!`#b0BH1\'nX8R ߨ"~(I(Jרm-ņjme,SQr_ԈE =]VKaYaݣɲ,I,˔RYU2('xcX۳Qd Te}!gk}FyG9 y|`!jڳEwZt:9S|\8Q!_  I-`G=>.&0 Co&\uNY !,H#c^/ p\'NȹEUZ? P7@JǷF0^N*XʰF?MǷ%&^QcFZTuZCHAD4t:#̫93S_9K/PxoNg6' ~tzwFsX^IYBupW\M`+YcjƏ@hZ-)@ :_]p0,J"JW a"c折_/x`-۽LewyzX0D-<[N^x3 Q3P5:x]s- j&'̄W~N'p,X)Tmi|ۚ6G|w^TvUo6ׯo&FXXj?vǹO<>>ĊM=OyhD{LVc]#Y koÄ@Z{`j\exx9 U,,zf6O!;N?+<#Vȕ 88n)Q6xP٨GGjJd]9G#No)d@DcA%?8/X)_fUJ` Ϯ矛bĜ>2(6V%L@₅)-wFzFt\AlHˆ/ɰ}du0yqta[-^$';nܪSzOPɺ/--q qJ2L?op e@}`@0xCEY%li5~ a K$ 5D3pΓKeN-lV"Ȼ3c,qf7^00Vh4ZVZ}at Il60 :0/'4fT40,9)H|i@)߼sz8 ^dYe5 bccJRR54;~&l] s$z:*,?X^Px`4;%pBx5EhmtRJ{ ÑS'/44T6s^1L @#hx0.ۉ ,(8eB0c#6lU״X؉(3 ㅝn[,z^A#!BF!`#b0BH1!`R F0B)Ѩt5B',/]rIENDB`dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/en_US/fig/hotkey.png000077500000000000000000000143131473346337000304010ustar00rootroot00000000000000PNG  IHDR pHYs+}IDATx}TSGy#A"`XTTX]-GDRlW_=+Q4bQQ^]AmX^bE{~9Dn `~J3sy.dΝ!077|۷ tF[.==]&IRKQ^Iqرct*#Gddddo9wxCB:ߊ۷߿Ғbaaaii9jԨ8WX f0^^^9##C(REQC^Əƍ1ct?r?󒒒#GX[[S{.''7|˗;bjjzW&$$={d2]0IHHb8<<7pvvnnn~q/4iP(2eJ[[ۖ-[(bX|>?88x<oɒ%.]zL&7n\vvv?'?f̘VݑG޹s'<<' ---=`G.7~kkkJ^_78?B\\\$IHH@gΙR5}+Wx"##L緵effN4)77ar S(z}SRRRbb@ HJJgXEuuu Tꊊ؞ܲ|Kz7ݸd2YzzT*ݴiKKx|p֬Y/_蟜ujkk{)֦׷ԬZjڵUUUV Wյ/ @WWWP8lذzXk׺)þhV^|G</&&p*/_) ϗvvvŋ ϟod7t"WeeR6l!fs8sx<6=|BF40772d j,Y|ڵO|֭fff&ibbRx[3{ȑZ[[tPjj=!ʊpЪUv1~o߾~z?4 KKQFnA3 ///̝;w1xK?ƍ^:+V8r=} 'O.--U*'Nd]|޴fjjzW&$$={d2]0IHH c޽/NJJmtgMދ8q$66r{1cֶꎴ=ztݺu6mj>>>%%%ZO8v}o>۸ި"66'PF/zzzaȐ!~~~,VފM^e2YzzT*ݴiKKvՐ@ ppp0fmPM,B(--~))))11Q $%%'GGV@{gml\.wǎ=&M2,{[&)ڻwoDDn%ULDGG޽xp477 aÆԳb]ͭݸqD"QO}h4իW}Nj[#>Kc(>:99RMo^SSjժkVUUZ*<<\pM6EEEi4g>>> .'?RuVWWWH, FtW7Ox&Lpuui@ӝ;w:::/˓t C!!!K,/?nccSEBץK~˗/{yyݻW,ӡ?xr\.GGG]x1>>͛˗/y@@KBBBxϟWnnn??ݻwzy X^*JR=l0B611imm311a3f̠o6փ%חoݺ̌d2MLLT*{<o۶m111ӧOYYYfx&&&͓dBkلWW׌3f|駟|Z(Hx%JT*GE"ц D"O?}9a(;;[P8p 22ں}˖-555ӦM٥KRRR\J"dgg{{{M6mգjwܩR.\ HRlhh8yEzV´Z-!eΜ9)))&//.33S$ѷjCݵkW||@ x'JJJt/^;eʔ?K.=M߹s'<<<;;p^N`0,Xpʕ iBXsE1NooTBY^^K( 8bĈ'߿_Ѱ얖NOOϖaÆݼyS,ϙ3'33beeemmT*oݺE&桘(&9~x{{rtez 2Ϛ""""""UVV Kyٮ]FEE^/Zի_zR{iϟM:5""b"赚#ͦ?`̟??44(ggApc_|=ztRRRGGƍnݺh;w<cu|>cƌ~+4 MX,P>0d2^CCիWLѣG^Is_xh(JWW>Lx &)7tuu[n۷oɒ%>Mw}===֬YSUUaÆQFB~ ݄~&9ΡC駙 >}񂂂ehmoo{ݲ2BMrwaHj4z⬗uuu**((?B'O`k7n@ŠJ233ᰥmJKKkjj***!l6[B C]]]j^KExZXXBLMM|ӧO_IiӧBX,4ķhmmmhhr }~ .\0,,lΜ9C eccs{s bϞ=R(ׯ_4ÐF9s̶md2YSSSO嗨e˖UTTO(~KK =$HҜBq#F4gB/\vJ#aX R_ףGbbbZm}}޽{ccc%y]7lؐɓ*[n̙EEE555EEE?>uk5ɟ?߲eBrtt4/))yaZZZJJJcc#=?PjBڴiuuua{޽;k֬x}|>FTRs8κue2T*g0{0cǎ;$g>xgo9>3n8BHPPЍ7^Yٳ#G4~(j立S5jT\\~hz]0!Cd2zKCBHhh~x F{VXX1tgff򢢢 BOnnnAA͛7}}}###̙#HbbbX,VHHH~~\.ONN뷄|P(ܵkׯJyZ>>>bxϞ=2ں{]Nwmmmrח`0rrr*X,Hieed2=%ɐ!CCCC !,b988\z7.==} ;-3g&$$ x===>Lzĉ(t;eʔxt6oWo@'4F/^(++'L׿ :T0sĸ'''+=<|ߵk^x1P [\0*+++882sLTjaaA\vmaaaPPPQ~x)k#GVPow^x`BȖ-[V\߿;u\0 ù>EQSN577'XZZ&&&J$oooVK>BMr7c|֭fff&ibbRx<ኈW dX3B.ٳ>{}SSEQ7o.---((5k֩S2 53} ==[YDs' h^-ظHvn-7561~ |P󓑙{հ'ri{[:oJB!'u@` Tha;߅Ч[hU:q螝72WnvK&Y+'8jn |zl_OWk[q5:ڭ-jptޝN- O4ڳCWq_ Cdu0ͷJM߶'`~Ξqp\+}zF.FreÏGI_0ŷ- P͆no+x3 ]W0wN|߇)xfʅG_`Nw4L+cSP{i+>b̌5ӗlBlyKFfm?8-͍{,r"Eѻp=g1kΪOf0/x$C貣is*vm]왿|at()m&1"ju:Z}f ;O_+lmj;w#mv|B@kTw 7X{:bHgfb[?I@OFNGbrWs,l-&@}ca)/A*_O#Wr)N]4pڰgtUoޑM?av1d7NJhwTNΞ [b}TL5Wc%VvfaBh`o'|$95UC"ڜ^s|{q;hc ϞC(,B? Nj,+WͨE[w2q4sBej؝- !?92CլoYpHd#@k:HZP(-̪43;v¼ai=le~l&ƍw [=Ps ' ܇p4a><7}Fu6:'Nk)60Vxಸݸ-´B% >?Y3l9w=&#ݶ`AQ~O+;@>@%Gϵ`U T]z'̘j){zCL(5Yt?f6i-(+=NjRp2\E/m;XLx5eAѳ'w&ve$#&XkPsG/s\wm;7Oo61@k ش[_N|^)%zF8⅙'v$A =B&ؼe6[a+"UMU(6H^ ,MSM4e Z}0ӨOr؝ c`='8n6ʓ q]I"a:TR,MĊ"SjǥiFTq7dr^<|B?v=sǎ]B-t^C۟Y x>u/y :Mb®.dڏ>@ 6݆x.]=OOOVu\_s|۸9><!\Oӱg!A'>s 2bNT$c6{w*l`B!O$ts`Aq~!wF,`쌤1מ2'ummo7ù☳vvd;;iXN`bEz"oCjimrcI &- @3Q` &tmҤ;y-*&D|*찡Bhw(X&75d1<<>}h0S318ڻ87wNզaSCmǁvZ8"7',;Ek'w.q1/iQt ۭN=IJ3 $l̟{T:}k*}?~zꩥ'{>܋+:pT*Ř}sMLSC*;3Ud/2TJ_R&m. ܸPZR9s``w}uo; |{*+*ȞMQӧN Ͼ^fs^8 De,V7i Ðfnkjaq $4~ЖBU * 6@}cwNLЯ>t+Ӧ\eX0@LjvgeoְN5_$X6}gLoy-+z33İobcs6~nߣd{f/o:pբ/Z I*̼ Tfyԑkt3^}:Nk l,O0 ApBav83vD@Km"Jkb+V 3-FCy .=3-<~޼-Z tg1'hOVva~޸oA7t7<ݶ֕s]KrUk+Ò%e/tVT\]HH` )Wܘ(Z@Z }rC?< 7zu@AV~zkdq}%8Iie ͈'HS3+փ\SӍe3hW%3ۚ U HsPk%exFe>li/$@^P(e*=oJz -̯^g 6Yhgk%+sj0L^ϚH^N?aLgDm,g;*<:@]0\Z8E&:ziyF)-HMytү??"$Lnfj8덛=}G/.YuKbk\ S29tqq=roo$$7;+* 줴|Y#|4-?eڣI95q<Y~nb^n^^R3h!8G]S* EEFH ̘aI)%Ib|T 6*[O}ȭ}Ű"I+aB3T^fK2c/_f7"3 %̘)P_Di`h fI >I[%޾t3î bAqRb@yl+ BHsrAuvX6|!$dV7J—k4ApWх v6{uuqf?rwrqϹGghf<`ywo[L '׷{h.=O@?w`k3' 8aYz$ <P)`4s&?zU'4ιA@ ¢#>=ɯt\a3lᢄ[uVg;2BhfG l[]?T7̳4#+ :Ge1QOI0\;x+5˾YD:zx3/晴mDk<F}w?+Y&!]Ko)";VF>|xgLΚ4m:>=(@]Sq7r=[Vf*#lC"!!>(HZcЄUvRlEW- M9Y}W011SCMT CCCPi[i7dfb8A?԰aj-5byxδ>NlS:hJ%&&6 Ii\.D&2/70yyy%%%FFU[)ScҠa"iå2mBHS &$&$'v{fw`[vXfWnw `}!jBLCF/\/ 0Br$V9hAuFC4MxX,MAHC h2Bх2 ԐX,2nxU0JZ(Vss8>8p8x*DDGݻA;yBNGҺPf!ԀaUBP(<ֶd5.[\\xU,*JO|uf9x#R~AGjuB\H$ӫ1/X0 E5ʰ{E1 #WZj- i;:Rf!PtD@,dTL&Ao5666nĤA%~@Fc!)j($)RiއQ%Jb&Ba4!ё 4C:Rf!Pt⼪lDBQJVE4M:y###Hk3HDӴT*nu-*J.<+B:ԭY5M @OObxHɣ޽3s}w3GgwU*ffdo>)x"pX|ޚ^E #|T*y*3D\.dH bunv''/Z~-|\]ɽtt|Oaa_73oїm EqʨoZC~Dl`L[m?ݜusҭ~ϨW>s_l}vҤzYm_YLT/6&nY_oYWkwkzTem)>l gvuny%cvLWBaa8Sly!)b,IQsn6v$IF 5l`֘/Yj 7OY|Üj K'zΙΞ `ng;.ɳ&}ݫ`頞xuha`퇓^PUjX̆yN<33lm)|zC[@ډ4׉Wr IDATt7 N`ꑣO Nl1>G'S} 4篇'g3#+m{AYߋL-f&ޡFgZnRWNpaLZv3uoİzoF (nAx󟈆6cBؘa!h]j!A ?xUKgX/>g~5/Ie&}_vv!Ϧ&Q Uv)-y#ҋ)P9}yڦҙ4¹Mvnez m1й3UToa!TYK @8ؽAX|R6á,ֵȧglihN%?ϓo6oOŋKozޑ,H{|g]|LQ k{!e-4q)r}pb߯~΄j _P-< K=+C|xF;C*a `h(FhO}T>ńW\t93{2@:Pf6fa&Unː2Y국p, V1UJU[]|;8~:wk-~a./ß$cI>Q 4otjݟ m&aRo sφ!Ooϛ2¾4v7dC>t"/=fMBX۱ckS~frlQ܌~QԹk{ VS!W̤VvQ܊Ȉ~QZ?3)409%ހYREΩHOϯ$I=B?yn|urߦYI͇~|cǣYٟqCٟ&d=*WKtn\Q[u^й) &n5 :ozY[zt˽`:n\ ~κǡ|me'jU(mmF)xQE<}Q8b8Oqt3Cl.~f6vXŐ0vJ \*5:?t1p6-|qaϑK,)g5zh"y.l ?\K?ja)q8B9"OQHƓ+R l< >?%XlIw /MV|\Oln6kRCRHsJJ ,l zMLgKOOl!Γ,;҂80{]~˂}zf}YÞ![zWl:)`YUlǂT@T1w2yzӳݱI>.xvwtfA~I~^m5ӵ,CMnv^E7]MqXPJLl9`Ir ⏮j+CUVpSя_ժ̽Lz4}EyanLM4ĪJ9h'[8$a PUH!I#80ba忐@A@X<;aIj94|r_=<_=ڻjOv6Dž[GA%輜|^/w yu^ǦqFrsYtlU-"kGۘ B TseU|׽$ g* ot[kw'@p9uۻQUro{,3SO?uce\sgNio@y ?OX%<ԭ'#;2iA,tcsT%BT̄yOVm޽arm0dO!l39~ͺB0p %F,Nl;j\Zت%}9@v>3/C``?dokQٱj,F~h'vRehhfի)$ #/zzF5=YnjYy[wlH|Q$-}23M~uoav5:wm-|Չ$mQG;{l[)nns/(ntϒ=8լ TO+oȅ#*|B]ww=G6Sǻz;4!JhwTNÛW%?7شȻ[vfqZ.SCv/̮8caؚ*oe'ٵYcoOUX[@yߘ[Y)oM# F|pDȸVg.=̈́Y͛ly;x.黆V\zyN,Ep[T?7Ieed@ZW-YACթ!x^:EkH+lZMOۍL󉴸dw)]05gtvTtU߫Ĉ8dXg+t`ϑWmءEoޮb\M3104e' %U:HTի`N0.K4U*+W7,̉"%&^Y nkyi&qAVɹe D2*4hmSFܲQM̟~_:/'1laUhwhtz19;-ɭ0FC6$@DN=IiܽƝ4_Hn:ܹϗ KRJۏ =B&ؼͮ mJ0ϢŞ8jNa nXNuͬ"]T$eVB(0BIգx/n;O o_eMPOr4I.nsaaɥ%_Lt|U@E,enuCKTnRC~DgT/b.i*FGTխUiC@/[[ ~NxԴ@8mk_F B504ReF^8uEC,bz ǡ5KY:/' _Qq7oeYY:HlljТ#q \}?9}[yj gO!OÊlXpl\߾kkdc`ױ=b@vӠ6C.Q8A<\E"}g X6>m,>g>zbUʍ SCCI'la볉 bTJ%ؕ)l`*UtIԞUH8N|U] U~\vyatЉ{%"%/chj($% 6(b1i\ػR|Mj:Bf:KU沩տ[NoVDzKzsŴ-|޲t~Nv&6Zxu:TTb|2/ХˇVva4۵Uc3׵.23Z~3S!yUNK3czG92MEdɍ-J?`YY .{|%_6{o>Υ(a¤uy҃ %1[Y%4!]ʸvwE-'3͛,((U%ORJ@r8.G]yqϿ[ͭvU.K'nɴ۴d)Q!1?:$fZw$I_aGzC3>1w_'FZjú{h :ׄnնDuІ;qyZ.Ho|;mWԣmO|c; &?8\u`m[oU)Mu\|hhKven]jStcb$,x.-`}31o tGx7fk–B93/axYXVQ1ê;N`! k5zn""ir)*% A\=E٦߽`цUG2~4)PDi^^Yo6.ل8Џcւ_n1k2▾1O̰!&eZ8he\+OXN'[).'QULqe>,6pКc|Kd?o/!EbkY)ULNtXy':`iiY<rry=S͞5\ ˫cuF9tƅ~Ac[#"?-9}k֌TD·L/&H[ioƶLZmK.,r {<j~u =BaML%d97iM͖,ևQ*JL Bi Cǫc"jGR$,#$0 I۱4:px<_"uvb8NmM15D0ͻ!Ԥ$B!*!B!*!B!*aVnj;BZ?(UC`*֝LȔB!B#  "],CR6}7B!TlPfë B\G KE#񢹽M!B5fj(Sf5a` S}Do^rqC= WTa͍qKBh!tչXہR`m)h-ZڗGǕ[,,+{QRË E !B j P(Mˆp2%? (oH_ܘ'4*V^-TPLN V-LH`$b>?nҿd_@ܻ__'D8`ԅs%{#B5Yװ*ZHp +Lx? 2ԋa![>idL{+Ng>uӷ[*}Θb*w6 VAIc8|@!Bo4ʶvޠǃ= *Xv|QO@'=7ȿA*i<ɡ.\yn}p'3Ck63pPf2&m.ɔS2m,腍!B4~j3z@V١ 1EU/sVFD(r?t  {Ҕi^.P&'\,_} "]-=LTn=zbțZDB!J㧆 v&:y>j fbςnT!p+{hʀ4)9~\,_}ٚ(M .VfHe*<ڿ'h3B!P6qn ]|`@vS3_0q:1SI ̽COƛO7'fE2hO[@ȲeYES1˪M,u IhF4M3!B I$EӘW+&up+W'5%004b6&.]L^?2b2%+E^sF%t}SŭiNz RDZ3}#S&k58[GGĔx ^OTxrsd6"kg7`$@=tHHS';ؤtۑ&?1>مNM(djHZ̳uzjSݥasH;TCѤ} !G=&WYE1#kSY Lu:;LĢtJQX3d$ "鿺nqOdlbE{7]hKԅ>wLIh}<*H~/^Ji"@wl^{##EV.!7˖h:֝Qߴ)1缏[P=ta>d|zC/M),@'_ްKsg.>ɐ95='>G4r L k]2VB*tk6*G`mcI-x [ctF͗=J^<==ϙquoX>ΌOjrբi$U aITxǭ#L FO;rd)v︜(4[%>N.T}a k O:sݼ]ʵq&2RKFN:8:9;ٓ2iiPe\d!ǍR΋2$aVG|G=Om{FsRC{?bPaG4\+_ضo@GL3ޚx{|Mtcg$Mңz|f "gOwƖ|c.ڝz?p'7U9_הѰg C_prOd ʹ_x-]8#"%- `"$ |>p`y= qR4=pdovNDkW Q?ȍZ lL?'~GL=_޻Awo!`gNsGA]ln)BhdJIUtڶ=UKWVFJBh@?u+ tJkX&vvx;§uwk }GEqmwf+ "EboQcb-jcb4{ԨK4ޱbdžHYμ@@+|NN˗˔gܹI^*ؿ]Uulݞou+"OUQ 6җ}9F1l!K !KK9qXp?Vav,>&YrPQ7$H3޳(OQ۾EՏd?%2` o*=䜉i=?wW Ew]TѝZœ xy~awve˶]Fj+scҩ{=ߢ3N~_:xZb9}ӧjg??+J|8ku|fL|Dž!DiV[ץ(=4p )oc#U/AY7_9B^t>օKoo *oDA}gg:lnJ/kkbk5@iӘ^*}~e_xWC^&z5 zAFz7"~Z >*PؖOVRW5<BH_ڿ_PPc/xє}5SSt3..' 6ߡ-%(j:xtMc=y!\A˼~3ϋ=pJņ]RTbkP"7]I9d=x~@L 7*,(^y9$;!l5XO6=\O"W@UQ 2v$afY&#MsM;kɌObQj(_2LըM{~NSЛ.%wT*mRKHQg"_, TdMRҿ1U½"K$TXn~z]кO"tqb#JE[uK[^Ge]᫪hD!^_-!ND,!|O$DCx5M{+!2B3Bo%1:*hX@ΐTfArOoçK|֓I{W8OVT$hh&)>#B^v؜zQ~Rpg]I?S)}.%ro_7wvwf< 'sc9bH,&:J˓AwgtōAti9hS3y|.Bx"ĺp)eNOtXê=hdrD˒$)_9vjofϹ[\{PBlmv&b(s:Wui>t-..%K]'vm T>y3#|XY [ITiO}|ҹޝ=6V!zeFr\KkݗDaV^kxb'˂.kжm'SFW% :5sc 78c΁."Uҝ˗.'By9g~֡LuJ ͚>]4UX(\{6׶b k{04RWAG[qFZ;nVL)|+rvfp[aܼ#jxK}Q)t~PjsӇ4T,wNJ !TV^Ca'R Ma#.&:73}=0vYP)W_(w[_@uwl_QbYЉ{E]W olR5-[nn4::յ%X{LE2xz)3 9{4$ݥ_,Џ;QycTKDNotyk~&_#U|^0;V]NJJ~'BG\HBپ ZC:B6YcP`+r!kP+A C!I,h-\>bWg/~u_u'h6e=|mkY)kߩÃ,oX=G {'MV@/$iDP훹[>\?ʛ%-\w/U9+Gˇz T^̧88ZoH[ҩ;mË9BOj8vls?;wQb\bs.Uޭ֪֋_!'ID.'gOG^3b3b{!c9OIUa4,)뉧7w yyu2|,qr!QdogpbkG-9BeG$a.~([?/۱mmINBԭ|~m,ecס aqȯ U$*,K\;߻ZQ/s* lhふ_HQ2n_bTPxhdO$%6eBč`4OC^CJ ˒uqD/#2 iܜJXȪ27w2t֛# K#qpSjU5qv%ķvZSJ"0ae`|U;yMee%Bax p  ϒ>85%k5 ϟB fAd+,dee) 8.77WPӢhZL&3v!ET2 #H]ih^4 DC*,`_^GeY' XhXq*=ˌ$hRz=R q6pA       0!l*111YYYF ( __߆  R geeݸq#11@$6n(WWjB'Nٳg5l `|z]mY~ǁ3>P <6dʬ߬-5viƣ?㷍 X;z:x)=}1syauJ<`[ڞP [臶 ?}Alˤ؃´Z-0r\PTOݻdIIIGh4"NTFGGu׈kJRݻ/_.!(5um{x\J!3'z_d>O^~ ];m;?ςva?šm4hn'=~xlkу4Tu|o^2S9B '[IEh-0 j0[[[TڤIq'55رciiinjٲe:&00UV{;wٜ1Uf!hsEFFڲ,aϽnRmy~}%c삌}tbU~3gtrKh>w~lcqrzn6|01]AhO0z~5mu[}f_"|cWcL\zj:G}>9ż2 C ڸq`NNN7&$&&>PtttNN}֭!RڰaڵkT*Rf8o%>QJ{o-Ҷ7G^$3~󅻷ϯڭ0BNf==mq 4 wWL^ !ZA#! ?y1;uʤG9>/5M3.Ne1q` 6K+^Jitt4q\d{Y lԨQϞ=%%4Bi I|'vz%f2PiԡA7piZɬ(!a,p\3ai>V~J2v9ťsqru.(8ѣGwwq\FF;NVR9Y ~)w , *IũFF~µTھ[;Ew9.ѼSYT8Ԑq ! jujj[kժ 6mn'#J)6ε?|8b}&qϝ]Hb=aaaG=@Rax7av/mӏ2ˋv_RϢo8 iټIúB]󧎟$+3>G=yM?X]{#y +!/[Elw W^C-MԤs!Q`+f?'xNHftQqvvׯ_z>66ҥKׯ_ر#)_LE0 VcP)|օ^z3vAw{ 4|]˼ٿlώ\ܨl68޲fE4&roݽBEÿ|cf#wlYgoN1݃NFC #37|,eu$QBضb,P(lggDz@ jʪSb,. j>}{ L`f̳;?imYĪowl?e]W?0-uZ dK7|L{-yB69s\HilںayH6w׿EJB\./10M(jeޡb~J5 KNm\-,u71v2fִWV|{8oSL#jBG^n/upcUR*N}6F xuV֎Bktw:ǏߌMՋN1SS>k͵N4ʠHѥdJSZZZjjG8H,bh}fqǑ_ycO[]A'T `-ːbz[C:Km#դ8Uu IԦqAq,KФlK?5 -Q>ܗ3xڴ?)'?d4B4ofʔT*/|LJRGxbO;5;^6 G4yKk&a_u| "-y)gۼ?^ض̤Ru/^͕_*l}W_qNKN UsZBxBNxt= ۣAVoh+w%/&q[څ¨\<ӈtpB̪ߎ8v2tb'7 !ګpGf ks-qϟwww,>+MBB™3g8S(/;::=rDDē'OA K~,eRkɌ=~bgM99!CvieSt&Mz lͳJmnͼmj΅L_IMi? <_~a۶Y.Mښ6,^-h IDAT6Mum|k]|1iesNg~qS!ύ$\ߟ9ٕg˗+wm~o;ʧ\XI׵q<;|72H5/ٹkߥCM@ cFNaKE?eevnA]2a;L<j[+Ⱥ+5о +;{xεr?tR}X*kuMllJcFYN5U""HG.\]]]]]+uRRڷoߪ`fW4vF'C0vZ73v5,tOA0&kQ_04= y#z8 l W WqnlB>@^,% y2WW벒#e˼?㈢s9&^iX|3 Oləkj7opyVLt7~j[NIC$As݄ dvz⇵%d&?sHjXЁ!#ϻVӗr>L^,c !s=;q*OVc&iى5S? ۏ8ڳv6S;[G;=[U88(Y YF`[> ye_oks%/ohNbўkbϋ46qrm;Q^5.[u{eQGۓdo5mGV`@^'[Do{,0nPρ6dzş5Tyvt+K}3(=B<2o~zVn =ؿu`'GOo{u lѱRV=)F&^|5ڿMHGZ·P(o_u3ZGkQ9ΔS!)8Fס_Ӊc[.啺 `r^C4|8fKGqTO<|SgyxgN_k—WDwsӡvMvqWx~&R ߵuy|Y!}6;d9꜡r9sG7 ׾+SHsPA[voa7mrTO{6#4\ǯ.{?_dhԠSߙA02*~W+fLԠN>{m7N7m}_ /}|Ϲ%GXt%{ !ma/3-qe)yدbg!s|mBma2\4}~K 8:Mיxx *ºwU nh9oWr*B))fyG4SG]]]+XB,Wnq/Zr+!)B݃=c̞咸#x[?YpIORQ?nPaP2+}t'oMF!Du}e\ ,knFaYRJnnt{{{JMbg"8ζ3v!EѨjcbZJ%T*|QKh*JJJzw(k\kR#E!^T>f{4Ckf”2RnH'n퓧Hw]L,h~Ȭg4Ʈ˸)}ml]ٰUQc̕GpUO'0-'P`:JjƮYyDj(|rS}/T>OH)yOKK8?Y}`1CV]K/l}FuĔBT^ȨUh zkeM2*^]A sхm[oz3JE/*TZS-?Jx^{go QOe-O=}o/eM+ zsT/??_@e<93HjUgۮ%\4*z_fCvjwtt4!w 1kz*(JJ(EC.e@Co dh{C+!v\S1K;-; TEüc";lՍ)c?dGQ+_P7طu0.{@i9P{ۜTM4wi.nhꊆ\ʞQBJo}}|r-h{J%~V_YG7&k:,V}7eTvUh`vt7r<79-,j`#t >E>,C ZYC%R %x]w ճ_+o'M"3>kڪ oʰ^npbQ/ՕY#G騢;o_U#Gc{7>&]'˩skՕh5ܶn5vb~_1^k#+,Bz~֥)zR3Lf_K:AƮy 57eF' @~ugQ<<ںݧ\pa\KwPCn? iiGg} (ox# VJ)djfE]|G; BD׮_6 !DᎽ_r巟|L 89;LgzYEu2~֧T$q2uSM>0cbX=2My#͞>$/Fds|ޣ??eiMr]$QPeeJ蓟Q?UTRzExz iQJM-^nZ7}(ϸ2'4l}.3|O;)jBWVr::1}'/x١5n8paKOmmWم-P}=Kh=!Z3@Xi|VF6O5)(ṌLB_~Fx5tvĦS k&qDwoÏ,ڱ}v8 *ڨSglyfW7*Ouq߲̋1RM\p ZBYku{D`|}쿕*#/l[3Zɬ,|1-OPTcV,b) 7P5c&n/ikB! _* x[8SE+? YGlju?:Lܢ‰̞wCYxN=wntSz;7SiX{к¸kn#4۪#\(aq * )!exh<"Ȅ`BO5PmeZý{ 1X"PHۃ@vhˆE>HG\f`{Uj:}E5~ၰWG,DA !?G wtQL&V<Y.'s hVV6~>yю.'3[OH] BmLAt۸XoMMmftDC033Ct/>ZY[Q«~ݲx[<'l ccT󿮺֛xNa.,8x8bq $h3lfa^ќ^ Z4Q B[׊^*IHɳ,}8=a]}^,c=Z לrS]9sC|aS΢.:n?qm4' ~or'K4"u?OEv1v1F'~c`WFwsimG;RyIAA Q-uphcڣ?J2=Q,?U5:cTޞˏĔ^̏'[WmA/in͟4[rN(ޚ6׹oۡˮ,]ws@f\d\v+ף9?>e6SwZ|iy'Ro\ϲG!F-^;)|ȪvZ臱YZ" ަ4! qSrtVӬ;~^CSl=0w^k2pkvuZ. wYcZX:mY5^z1,B.~ ֺkwt05#mcMb쬍 p^$Uch~&QGf R{!/\툻:_Ёmu_B8MAZDnѮ,!AP6Z]XyJ̴,8%33S.)-t{{{J/q\vv 1-FV`H JR*Zh4ja`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h` 0v`B0-jZ$ӒjJ&PJ] 8.//ycbZE]iQTcbZZm`_ UE.bcWarJ8NP,kBL^E4,8JKlFh4kkkcbZJ%T*Ӣh^ QPUaX(Rfy˲h a)XU^TYJAa      ̄.ȧ\ܫ2"yN'6]O窽jf)4T,_3q-fXw5h{E:x>ZeRD}~mx9ZKPj5Xsݎ[kG*}R,-s=yN|}Qbȝ7cOQe{{7Xb6]M3(f!n|^Vb+{m^{.PW/Ly f@|j;#9\Ow?xʺt=a]km\W͌~xԖۧv<Ժfxfy3's|g][>>t'*ߒKMST s.G^-??_TVO\p϶rfcfO uD֞!Ƚ)*Zm}`NzC)>y2 !Hg{|}͝1K~[A3'WG%|Ʒ[87{"m}s?CS9::YS+,Dy~o9f@ao-?wa0W z:xo3:{msw7?0>-qkڈ3S9kWu,ZMf(4n%Ey_M`gw{V qw| 1,up؎ɍmW߈e2!%a^Y,%z_ʾ@V B' ឰ95t]LNթli~X! !0 ' Z˞9[y5t4,u˜^:fX]VSޞ,K XIKnAT"SBZ*,yW.oyH^ԥ~6?J6XC$A[%ǿ.aφC޹kC3^Y3ǯ|x ^k w U 2\,Ӱ͒sD>pD7KHԹҿ~{=M |}]ѿmA@v΋F^w|fEK-מ}ZWTYL=Oer 'o`۪kש2iw4𷯻ʌ]q ;>{ek|4?\zj:GxUݳKN]{ 5<1׻p+A{|^Ҕy؈ER[c4vy&Dyn=tFa{|p_fpaD\Ӻ(xچ(,j-a(H) 9SfWPչ |efӇںrm)_1JDH [{˿۾j|Qm҆^!_f[to$΍rOO?Gh+~i7=DM&NbmbKv{OmBʩ +jd U4mQ=x}c'xۉ^Zⴚ'+*KE=[lhE^:{y"]h"Hn?`2 fvȹϲU::/5&qN/4xIN\zrG֍ ك{v=zIĞ ¬K ',6v&@{kr 6JUJtq 9zX^1*/6;=9q;$CS$>lBJDˆ`9؀);.\t͈w.{xȎC{jW ;sڦs6`'N=vYV$sm烕~TBr/.YzLө/ a^E/^4ܕjmvT<:ӚZ{E):iqo oPݼ+'mr-32^c!/|uB#G>O&L &rh?-bͧYF_ro̷ׅo8MVDWLd@Pu PIJ6lvj.3,dOyqItM*ASbئ=8ywn-K88R-sU]ytM7f{~{>rKV_?ZXx7X8ƳǛ/&̵ܼ3%>mwy_z/-&뙞/Sg{.->=GkI(W[qqvsa)u;إ2Z 2e.Pճˑ}hņG:ay/XX훫ڵboO6GPUc^^ᓮ]}MZʝۈ`O vHkuY'K-;Q&uo]W$.LS˿gozgk&%cb xj;ܙOc9b\gUĶW.rcRd֫iKۙS$C?(`O%OSі-5TЩ%-hؿ߹lWbC.}״TԤmKK^U~]r$H[OҦR2_YŗbSI(nWeS?u *oέGn7NO+>P걃&7>PHsw?[<"Uϋ:chyyY"hӇ~~4ް)|>{<-:16C!m@'9Q_vwR_viϏZ씏3ۻ#iքX.,*ϗ#[N<~E~]9{]>r&=&2&Cbo=.oᅅ=묩%?f36-lB~iw2'7vz{m"+Og}VlZIIqVB>/?zͯӓ_םG`$?%*^T-cQ7z,'!?ބ5E                                      Y(+++??ya(e0      ػ(.ow)"({Yc5FcIXb{ƊXARzv?XPewۙYJރ5E͈zYKci#KN,jX(];F[oP+~*S-d|vN^V+q_@`hذ(Yjz677y8I \ Zwq=ۚ|KCgo Pz@c0dASCUGKy8Z ݚ䩞i'RL8oFv7\g -5 Ţ囿[U 9w٬^g~ʖzW8.ӮTOkfՓR2#ĸЂjK3mR`R\z;l.U-1O_uvsrMgC('c]@j+{)NZLPǀ/^(l4cOR֡R15o2WJWщ1Jna ݴ}_nDB`ʭ E5؜Wk4zpW.2T&qHY?>m6뤫Bеks%m?Ȗ^8d9=iLj' *-[YKbLM*Ybt &P-6{ bЪ{%dp\Jd@L\ݬJxO@s.%܆]srtխCRQP,?-:5h억mfc@r쒛ʀ{u0%PϞW2;`3Y&X4vG;wҳI~>PZhnDx1 l޷Y= Cgq'VuF|!p9oNq9߮\vHo^~pYm,UFJfqG*-=މV}=fa xFfBQAZ$]n_p/ "/>Q!̫6*+(P\'/^Jʜ@Rقey1ah%6sh֩%?\3.#&3 R<10'dԪ;ZZ;g_ {Y6_MXH]-l0\3F>Yb3wu-yץ:hEc_g~a)U⾅(>o@ɩm+N᭼@)ISb㕔gnMly}tkj!8󤎭>O|0.7Ί܄X~(MRD*W&+geTq=A_=2Ҟ%>Ó+HeR9KAR.6صgv7<-LJ(E'*b~cf=~CIv)}sa?u&-ȗo 9IمrBy >\4W ł4[{;y}*8:>nVjZmg~7w'Z/upL"fm@,_6ïiVs z\U2م?ā%.hUU|k_>v :+Ǜ[XY=`zۉTm;z֫Ef8İLyU{ݿEx|ry *)>[Vmlٯ#Atc)ܛK]Y~}PUT-ۂ?VGwy vl~NyMv>ش|w{MCIf3y|Ngب'Kw߉cQnLTY-TR$@x~_2Fb8kcܾQk)F/)=g4{Q &yMSOaZ/^rFZ驱x+ni.4::&Yk^+ZJPŭmד׼J;3!SyQ, &yMjy;Ǫajre6 c©̷ƒ3)Rtc_GsʮLs1h)S]׼Tħf~#K]sq~Cz2y>a_&D))Py3dNuF16OE.[}7.RK ,p\}H-ZZ(6C7/]ס̓ /EﺸoT}-ԺZJ 6=ͻ{ (B[u6_g9t777k՞1dFQ!=fΰ#3ސUjKޕ c`('Dh,$@e2y-QamFb$K2|#?Y1=&J2A N@k&"+<4Vսٸ,vr<7ӻ֊.RO{ٳќk?kqSբJpx\=;*< %U%i^5ΕՒ陲 IDATQː__qI>zxceow۰<{~'4 t~7JKMWժ~C6t(Kwq}_"ʙ^G zJQ p\]U[PV$Ȑ0m]*ͼ<7Ȕ!F~SOؘPֺZ4R%miJ{OC*ǀv(?vLjO+}gsNOpc9P:6` })w;#ZyQj<5<6ȅK6?'%!!B)ߡqP=.!6kWI +Q-oPxoXwZ[uI@BL<^+Pja_;f3/oȊ@3Aaz*zy;[3k̟卉S=m; w0`Ix܊WOjuPJ {~=*R"blIDz15DW ʧkZ aFZչIr][5siܴCp>RH +Y-ujȾ׈3\+& f^Y 2V4uZ΋Րj]-lږn3unؼUv|MykTTOjXc@?SCy 8@8ZK)UFm}4v4`̚N革PjR*{gᘸj۲a$Z=7DR`"ss%ooP ;{'A̩IQcf/Y/\ DI*G3bHi~B%՟ b;엿{8.qS9X9uec{7߯:u hM*PL\$ӴB`)xYC&<Y8us):~Mj~1› CWz-ܜ9c[բ|$$$ۗ@SU*4^ÃHdbb֢S@m LMM9|\-ٖ8X˳@j\.LLL*^.ńC:rZk0!BajB!05D!Bj"B!5L B!!BH SCB!!B!R!BajB!05D!Bj"B!5L B!!BH SwHvi嬅Ŵu#kFlV@hKV(*7BZL >`4)޷EI?\zMG"4r*wL_s }cc |{Tqy֏9 Z9?vDt4WS~fH at%*sN ]ݔ7>ȸIA}?Tsr;7XkkLMD!6}b_\a&,X@"NlUaQbagU_"ctl~a8 01T4ơq}TM8JzrO&̋|>ىe³hcIިbÝXfZ7Y?`y>qR6nb[a?~'9 RTe~W7l!B!N E99fm}-:׷`c-l`S}ޤÚWO s"y4*!j/Z|c>ȒGc=$?)/[?Tvbr7?>2/g]OʡCF&<0`a8  ]4n]S @y|eJhݿo:ML0o9Wcٙi3y#oӡenNV4IĻ'hϴW;nz,;]V/i/KU̳hfi@5М;vBܧ=}2.[XZ;|`gLB!}mףI+eox|[ʴ0Ƌ~qGgׯOƍ4 4/4,ޯWU!ukN;Ί-@uˈ{Z"?E:W aͱ&yG{ŔDDN*TK/?w>A {MØ-^Ȧ }`ސG#rmȼkׇa9FR5 6{Fܷhvϣ}3ѭgCRkUH"ƣˢO#XBBHij=evNvr33m珚x|ڔ}[F\MalSݺE n7ߌY"̯{CB~6ٕO iQhS^Mbѳqdx례Dks$n[`#.O#b%qM|D{9Ը@?[.1pk9c٣~!v@ĉ׶!SƮ ]RC6a=wȤJ*gakӎghoX ܛx; ·kcŭB!E%Zz >IvYJ~yLd1PaLϣsKɺiú>"͕RϷ765$Ez4"! C$,ꏧyˆ@U (}ƾq}KϢ= !1kfц}lZ/ޚ?0`a;+,4sPjǦd8,[:"ez|`'0{ rۈrx,)Z,B!>4v(SCb2JTҽ;gW5&TТ+ӒlϹC7{%A\cAv,8i@avb%@"1iѾ~3aY *I|;7F6b goLs߫KFH)PenrJr7n*8v+GlALUc-;E$ȕ*Uogw$Sgg>#R(i!BGVCw12O9==9v729_XZ*2Y ʄuO4t޿)*=A4c+6obnadv [Z LaF ,5^qx4L V&f{g穸nASqh#*jygп<@Q}}/11ȼ~V߿s{揻igƑ$ B!HBB}9kj}Xd2Y+SH$211r+=CD"SSSo:ޒmiiY4zeټ< v2Ĥ]b1!PG}&LOO!B!5L B!!BH SCB!!B!R!BajB!05D!Bj"B!5L B!!BH SCB!ƭd*c B` 0zS!"B5*Yu o-O/BL` K:&NB&<*VW]!BI5I!2]#ӡv>cB!j&5L̃!S\2 "B/5*YdU2/,)%cB!B5W~"`w B!Ou2|w|wdw B!z׈rS2)!Ɏ**>!UPx/)R|#;ևC 8|u sYn*'v}K-<~1 O}ӄ$9xحb0d<:ج< rUwc Uy']kU4ҌD#[O>WBY\lojb$ɟX-%T* S15,o$4hpR20EyŊsa~h?(i@,6 -oge`kB,.gEQ6g +FtuZ)-0p8!9r;tEkPkT*4LFrk[jJ%ZJPTRuT*D"(jRP(ZJtY#RihhX:U{4/H,uukan_PT&i&? \$af?K*tk.U* /V#T9n>J/0x b¸3m xЩ>6q>|N>,R566A>aYs \é ^aƲBm JRᨨ-寣%*.!53K0A kUNs֔7ۿP ԤjjKs>>k*e/NjE@ٽܺ525T=8gN5(f&%& |œ{Y`B!TWޒVͩUgf(-#K˭Rf]9l+5=~kUiǮ?_wв%m37.8{Kso;6ȹo?[ylTjf}dYpk=aL9#BuHU&CY~AVOS8WL*^=޼x)XIzQ6M< mQ_RiwcOsYܧ_,i݀cmeS˂3@ {>B:E+Cc#C.#+s,-L6бJ]P vC]km@|>O c2LT]2Alw_yws^3u-/coe51ȿχ6f{q l۾SAw( |1s\}B!:6 e%rkKs- `7l32a[gd(bV |e3t_UCvOCZ3NƦV Ohb.10ܽomJ8MWran1@>c=O@CB! nz}])Wg4LV \ "P.P.M"ࣸaO(kO(kT<tj!K;a^B!@%\`\wyNnDZc3 fewP䓣=Iv8)ٸɴ;8UᑦQFFƥKzR԰'O$&&T*###gggSSmGJ%J !NNNM411:#44޽{g̘1u$**Ν;3 3h ++I{5q86Zlb#cÀ[m*>8o܌-w25wh|sG߃Nsj(̓Pk-\s'}3SefLkos`3 ZT޹s_L߽{]&&& =~ٳg=zpttk@FF˗ ZT>~8..>KOFjjk:Wr>_b 0L:j| V.;?C=PEZ"-[2mPhѳ-̯~x')_k,Bu?=sIi"ӶZ@~gw f>(zߤ&l!s~B~왹9ɩj4--yyy|J׮]KLL 2dHjjj|||l:W\IMMyfB"\vT*V V:xxxt,VckK'+>Z:Ϙw^}6Ae# F0>_=q9ẉkwǪSu|GW*18,c "C$˲O~왳s~p ?0 ӥK!C```о}{.[PPP7gCC!Ck.uPغuka*|,OQJoܸQTTDi^+r```PӁ&[5]g/ؗi` ϰs0.yo)zS9`w8ojѲZ /[200 TX:l2|IBBJUߤU3!|OP.&p9iVYb 8GFBE" kckU޽O_7G_ k{tg&z-9cQuaW?|R\6'O>eYU kݔjnnުU+&L z{BoϚ6{ bЮ{rdXg*kv6uBZ_ovz#: xvͬ8ώ}h>XU LfdddiiYӱ[EDDDDDݻ6iDٳH$鈪CxlhHReggt,VCqٟ FmvݻILay?KCZ7n/x_;1VkDÏ֯Nqᑑ&&&}˯+sppʪX˗/ !7n(ᘇ___!Z>8';CIfV>>7ȴ> Yoq7啻jY,p}b<ГWhjb 05ݻgff֧Oc0Ӡ:؝Z<(˲g/^.˫5ZR*Ě<,fק='I_5E멒4bg=L֦Z IDATvvX~ {G{=$TШ( ޽{9d J_xu\'^T* cƌV">_߸]8]0"F&PbU!40qH?*܅? 6M7RްuKV9GʾkI|!ujXXh;{paX`wa^e?[aiw}+,@η>x(Z@OzN=f㹃W<*z')٤/UmkǾ'.4ɳʤ͇zC)s{EDDWW7Psssoܸ!MLLj.:TJ$WG ˲nݢwrVO9O=9;hޓ t~Emk7x!eQQ XԗytpkgWFƯJ} ^K@˷{_0GIMi^SQʴIw.t}|Lq7 roٍ- 3rݷYM`-;UysE:t0_U#gVD5ujEI!vCf]1i̛=iE{I WpGXQ<9?%g گqcBH{{r֨3${5 x LLL%º6O^$ N7]VKi,* <ߖT*)<^򊏖rVHOOǖ B!!B!R!BajB!05D!Bj"B!5L B!!BH SCB!!B!R!BajB!05D!Bj"B!5L B!W-4[:l_́}kfh!R>sklq^ӷ}5К[F"<}q7Ü͉K|f̦s \啎mPDnm?Y+W)M=EB>P뀾#f2'nϷ2jN_WB!>T:̨VO4.ɞ6Z7Gj,J_h;| aJ4F nX~>ŌK)Bi_q:3T<ܵjv;)66ê W&_a5UM+OSQC(rWП<-R=Nus#Eȏd'_bn$o쩿`OD!Keo3|^%w4hu hA^)p8 !7Wi,-ŇMMb}qJ#a8aB>QOZclE23zv| B/'\Ա(UU ]*.G&vt60B6/eaȘ4ډ38AB!!ӱՐyu Od؏OU(Z$d_Uoݤk/Gh74GnI;p?h;xk9ZnLzAm45l_Om mTJy[s cqdv!{EbnHTi&.qt)|Oh#BC.CQ[״&.;O0gͅZVe`3ŏ_ǦiVz `\\Ǧr C`Cc]6ܺ$Gʜ'N?U2L]*yѻ tg9O_w4GdR#C!ݥC6ЫvOQTchn#s?A{Y-t3cߦkFL3MuW/Ww6l)y6wSE3KΉ/'-YeŞf'2o*\!0010B}0tBelșEV^P.6v}R x˜YE <T*.Ms.zU9Ջ;LYMl} DtN_;~ 1tO~]n*Z A|z iYFUlE!PZ 6~׺-ܶk}~[gwKE<͖-L BnPk*$s-:$8T%8mӤUղiۚU*/2,ELTyay&:J)ea۟ie.Lgg%RTR0h{JtzpJa`KwvB]9f.GV*q&Ff+lؓQ]AFUHˆia 2av pRFL%wN݁N6zLyRpw?6h||t⪐7n5qqfZz~Lv+ #,hnȌ+&y69.B}0HBB}9k dF#D"IG4虂Ph7 A!H ~oZJcYVPRI)pF޷-嬐/C!Bj"B!5L B!!BH SCB!!B!R!BajB!05D!Bj"B!5L B!!BH SCB!!B!R!BquH%{rg/pqr/\f%k,̏tQ Snſi&#!nЬ< rUwcsi4䷋~R=ZU\YѢǧl= >_eniך/4vW:Ĩt BáŞ'Ee[qsKYMK4-HbNYuWϪr-K`RZ]a4ȶy[7[Y5fq 4+/̄UM[PT4vݜ ѲʈM.d\.a-r4LR˲ uJJbY]T*S]ԐX4y?~mZb~ُ?T4SQ~/4 (ʦn>ykUMZ[`ipjy4Ȗܡ+zXUe&a!o$άrI_]9VK <غ"4j)8j)rZJp8*uEH%qaֺwSZ u)JY|h$QJ8^قJ vΜMf' aPTϟ>6q>|N>,Ȳ21/ *0xs_v!BZJ:4<0  S*U*o'F45ywK#Jlž4k>ٛtBaUw_P ՊJT4̭K 4ڹd\XQnf$!,:o]U"BMUMo\ ql Z!P%͹~Fw}O'h,M(Zm:Fso;6np؈o?[ylTj%FE,evv1iԮcϞIi;;BAǬ=޼x)XTAIci}D9[ynmyAۢVE,<711G@!.|?:~} R|m\cmeS˂3@ [V`҇WJbfB:=\c.6UHe \>k4n.("9)cT@Wn%. 5fmww>5sQwB{+̯ F}>̶0{c:Tз/_W⡆e~4{g5!!PCjHEPĬ fG#45ڶ~}Ze"*M'41jj,KM)G6c#e4l܍;Fgl}i[ 6ٔ0CB !h7A4{ʟ,-%r4TA$aMGQ`V}4q۷oy e#⋁@`͚5;wdlᝥTU=y$tӦM3_5۷o8̙3Z144+ȲcǎE<|#G,^UUd5̋ /Kmmw޹gϞ_+BHSSSGG!~ aQU㸭[go`1 Ĵ=cv Tp>|WWcL<]ެVkKK7oLX4 ӂ [QQp8Rԅ KnkiiY|r{{G?j?s?h!db+vXނtyy73XPoo(F1uɏ<O4X,AUUϟ?O)mhho"J1ƌFq񕕕MMMs֭[/yN PUfy:N[ZZZ wL͖@eAZӲd*(LNNZYY)cnw<zݺusBY4t]]]KTUUuuuwۼy ïXkkk[[[+$\QcsU$1x4oW4%RBH8Cx<|}LOOB(/B<w:#ni9ԩS$τm޼d2fĶm:;; %~)h4goe-i/ִvPk- 2x-Kkkk>DCXn!ʕ7xLWz_$d2q6ߢi볘Lh4Ŵ#} jժ'N߿֭uuuw}SJu:]q^Ű\F; Bn۶V E4FeBf۱c5kָn7<<+fɺe?ypq:tlٳo7\07l^}ՙ6m֭===اn jFBH$y嗓ƍ]mtL)|`0OU+$QJ{׭[jժ_pgϞ=ExxߵkWww:tj 1JKK io &H$wh4~k:s!ru/؏", Qf;w\4l+Bqe˖ٽ9FqΝVN gM$Hkۭ_wsGU.\I'x}4VROxEfsi7GDbw}Sݕ%p_>*7~S_$FK}'L~PM}AOʆ2KEMS$[̦:qrd¨*edhv()Z ;999yCJIEvOOO|%zN$) i $)PJEbGFzݞ p8|>=4 ~NWP+@ޅB}b͛7^:չ >~w^y≓2!=OygՂEgyW->gs?#9"!_zmo걷S@kƣ?x=Ғ IDATi)҈2qfɡe;\e9:ڛ6\i1 S_ݺN[E赸zh\zԔvPŃF"^[[#*FUU_um:(J$6h{gF==='O4[lRm#G|>`4=p(3h0o۶s!ɶPr'K_c,*s58B:x)-J 9l–&G6}׾3xWG1HQMQ9:q=Z~|q}gk| `o?o}Of.h:]rq\55f „d-tIEYob*hݺu`p``瞫tZbٱcG1NLLh.aӦM@?UUU%%%(~QnE7|Y~뗾n< %9sdܳhesG7ˋ5))5- DX^p쾧*cZ#%vEU7ZmٕF)kF"^gVa rXd",z'lku㸝;w655>}:HdX׮]['N0Z[[d2qgΜ<ϗ\Zil)iB Cmmjoo4BnFקm!hZ֮][,H32uFᬂ9K>۷;nQGծ7oF^eX1(nMOlN~rYټ&7wַ{gULAJ%.P%So%-_ӃXK +1yҕ+W\2) [n%ߵ(8og?prJzx؇o?wɷ~8)ʸ3zzRQBn=goާ$H3N))Q2d (J%\gwl^Qv̠'"h(_~oZQƎ>pZ ~֙LE-kg˚P7)_ZT=9"XB:>:iuX/oviU%!IsõJJq\UUc,R\e9CŸW_Hʸ;G/!CGBEBxr'=me9{ga7-s&ʓް1piEVÎ [UQUUsO$ɔ{db\hxXk 仞 IO~_|voRʮ>U)})"TwmpG=G&E*X*W_H5GHٍ_~/Iڏ|ew.RZADh|hxB)lo+MdJKLm <_h"v_؀v#w鰵(<2G28YD"( 2$a=,ˌ1,:v,rw1!@!!@!!@!!@!!@!!@!!@!TA$?yaEʖu!}Ca[XKc1,˕KNGghsf]T0d ] RsE#)Q,]uϢEQݣ$w7QJ !D H)qVf]CV\hs lBBdYYj2H}phcUS]Yk?|Ĕui juY̦@pz=l$y}ira7ྰE/(=1/D ׯiW\b%5t()%siQERF@ɱ4bT>Uk9d!SUFLhd,Z(%u5Ux*%J[G*>`0vu\QMLeK[JNK˪OE5_,c)Q2ͷ&!gWC\VCx]uUvCf[vU7(/+𨪚ui(Isq궦$9֐F!.oGUE2tZØE%$c?LzgPUQB'q)/h8 3meW6zRB)d%bE1F%FbAœ9V1USܰ~M{tdMFCCyDQ2zCBxNUYPQUrko"%>~(j 8'ks,1쓫d2gr6HLUՊ4Hl2jC3USh,^fdWZUeEUe!$LMÂpy !LiL$RI ע\aks{m3K^&%J(iYdt|h JLF|j=4E)9?ਬȽ`G㉔(}"J܃W*% V;Wif+e*S'!WCq _POqspBM!|NV6&yR\v@Z"K!*|?)rtFF OE"&B!&̰][Z"GăBvb6#BķW;m !dۻ2Bj.Ү} 8c [p3{Lz BzSb1 055?4-!^.7ome-!@YcB_^ 8YaB #g$ 6>=yo!' @y{F!:NU#BbȲ, BeQ8(3d)r޾NcYVU#B*&>2:nc@޻}}T*UZZ@ϪB!y%635ZnYmZ4662 퓑AӴ\.Dz!BKcx钻!YYY2 B 62Vjb=v Bt=DBU*2;!B&!P5IB!TMaBUS B&!P5IB!TMaBUS B&!P5IB!TMaBUS@?4MEBýw H͂\]yk2!8Cg<*:B***ɩ,j8~6RA BLl t1S%!h8.Fg8 wY*V<!PUցbP]\g+:BLI@H2lSޑJdI B2%8l_A *geJEw9Q *geJb; TB2!=~E1 C4EQz+!PQ9#}b *_ap!B;.a8cY,ogr$ 1@0B,{bʋ@ iC @Ӵ@~F"U@aw$ B½JXWt$ ;B½X]{Vik3󮍔j: B?0 m^DMFVҧ5q)φ>x6#7}&vS [F3to;UUBIQ0auoCq[l!i_Շ&f >.܂)!=l~ E!  l> cOBq W\Ԁf%5?O/D2A`Uv@ddMi_P#뗈 x(A6[:*J}} waѳQ\AB} >6 %®/E<-zA O‚6`Rh! 4Ш0-x Z)mJmk0fa~nE&$hXd@/|RZg xˣ-0p,h:Z@k<,rs-^?C`V(h[ aGmB:؛Ck7%+_O+@-HkXׯo`ZkqSqˀ5EC`a6 CBFVmx| sUm Jsc&ץIUHP;|e +WaO]X2ާG/Xc`!PIF %ChA;N C!@\ c]΀͡W]Z #^ ga>x 5{Wh@`>Pvaw3P@P Ca{ɁA zA-\zc݁LVXt}G`'9 9p?oG;v/msAZkt>A!p9u$!+***;-oA b{ÉC0IYBc 4!0@ETC=KHRVt!* L>A }k+(&B [ɐx@}1\N,BO. V>1 j }`DXtX(~rYm+PR$@3ʫ>Vr9`, }.W={-GLsOŝ?)|yӚܻ6؈Ĉ|BBzT$}҃ I)F{mgo>Z X7tC^_>sp]i{xb^fʔtq.0PӵvrJ6z|{oE ϧo;pk*RiF.8!LIzXU!8 {g%M8bր7}~|ń^5RKnv7;M=[SQZm/Xp1V&RΣg^z%IYBIz(|% ;I(*YJE-Vf<@ogsXbb 7۹c WnDQEWШ_ebw/'sPlhܤ(顅CZն0 \ 󼹞l~'çl&($=6_͍[SI^̯|6bimɁjhj 953sWHs֌qa(84=s{pzmR=W#N,ao" %6.޽\z& TM &6 w;TY|<*2ݽ; 6uu[O.:ĬP.[s-v1Dz?$ h.fEj9r;Ji(roܽۂkj6~#{9Is";.PZr8sE`Z;I/)-$eS7nE'8u:a@-inb䓠"βn]ޑ\WS]#6n,/<8+z2N(؍J tgp1z-C* &7jQ! a}n>S&=FλNKێ.oǎ{! Us7>{DK{(aGwP6Ö~_Ͻ u,_6'" T(\t;YyQx(}m9@S2(ೳyx#d2Wd md,*FE24*mRY^s(ú=gm9cU\{[nkA ibհ{/jޒ2C |"#ZɠM ^kuN;gv J8FAʖݡ6n- ۱uZ aɭ$͊aCoYţ s~eިqMr㶢fH'pniLbШ4jk?y) Jzgh]ntn{x%eѠ=>>["yUQGYY1ԅ7% WU m\ T[1MFhTl ]Ѿ܀-{9Q9G,2Gt: ^`WdKA2-_} 7V,?%n4|h#%wm^zIgˉ^m201Ql䳰R$;%HD@I 65X}e7 /CLixP(7~T՛D|Gʱ̔"(He 3Un*[OKy7)_?w>ScILueg˽{ti"Ƿsci3_V& ۩r3sNv9+ci4}_ݥT"o SS󈤭zv2;pt͠^#Ys}uw^ïtq7!)qE{1\:fAf?qrU-U -9 zH3c]K!5N~kvzY#~:3Zth^6݇¤_0UrQQQ.݇6;/՜B{ofk"f5t*&nRP$Y) (U6t0$&Ǯ8*Z.hWkCPblߠؕ#osHW;G['m"ɠOM"ڽ~;*.ѝ9D #Yn _M5r40Pjj;|[5뢎ic(ZǕX\Ě"x"xIc!m7)@SI}mZr.6܌G;<BɭycUh[pLB}BPՆIBmCӋ̴Єn^+IBUAVl۳PpSL;qE8 Fp؜'^;xpYi<|fUu80}8B"BaBUS" P3wT:۾!Ч$DyeF?ɭPn)+8B?RH3LzeˍY gҞvԽ ^Zý|ҟ;.]JLtrh1QGpA gA؈SoYmhݽ6~dOk>#ƶ RGS@{uK.f·@|ԡ-?!Tx@/x}փY﵌=(^iiGBft|ŋO Y:^2El#~}ܭi_O*S<֊m)k|'|`yk8Twǘm-3o#!PQ\8vMmGW'=k:Nu\5vcγG6uwSa:2_Eݼ Xר|uFD\>x!b*8 {l IDATЅOrʂڡMڱ΅s$=ʱQ᧑k  %GSεm_5hq1:CI XB!T%TlwDM'@Hz͓76HBU pWhGJJ !F*2 37fkɺۣ\ZHcsHkX$6w/h `j8;RGٶ62,ki_:_$`(g!PuP$FmI]jrd[ɮa-Iȿ7m[X':5)>֍d%/%E>SmOʌ >@!*>@!B B$!0 @!)LBj B$!0 @!)LBj B$!0 @!)LPeFOwkşBa*1> F]^}Y?`+:z?Kz|MďT|Ot9KA *:JwK>Ÿ&]'ދPRRK;!Ӿ@E^{e6)$7֎{ kgg@<~ʱls/NNqqE?gSz\Y2iTZw1j,r \c7a!B~xupZ]Zx džӛ+ʲ] جh% ,8fphRb_&oJv8j*v_ohOs A`m8޹Dna"arSK BU%8&UJK ᴇWc:'Wl{LF=6l홗JjmeJNZ@Uix*#6m@*&;- ,Pf$ЬlE6@TʢPBUm*l;4|yǾ^ˆX8v>,v:zd~*]Pӫ8MO%a(TI/R|O1 :*T߸qSeǾm>%oݩ<-|ޯƾ?8{24Ce(Nc aa=ߴx׭}f,vܗ1q2H 䛼e޸˘S{\}8:!^Ud@cgZwܷ u\a˅k/E-Cw{3zm.%hNO˔Ц\xϥИlJn9nnȟ6אEYrO8+ynwb,|DGZ°sG?LMkv=b,Wk zK;![Ud@9Sn]s%/tK/]`8|Vslb—E׆5ld}i?m/v7efSse֮KeAyvR2l;m̜y{oļ|>'`ߤqND޹xݪ <KnڴFb|y?d'<ͩa(_Z=.kN6k{nMz,W٥_Vb$=%QZBC%p&4׺szezo`rQu 2׍8q H +.TMoTH5>}Wg,[OL4)=7gwQxb*B!6j!]0;#E'rp0W&LM--YE/t ArtF2hK+* mђ)"<)[㱨m ڒE.EOmL gG*2)+8>#ebՀ o :nl۹N\RZF\g$@5FpiS^&>z,mjm}|Q|vNBWJ,BKKYjH,WJe'<:u=,*%WMTL-E_gli"{|-"+;#G mOʌ \v(LzSZ5Q)Đjh*'Si8J R*i#sjErTd[CʈhHT$B075Beq\RRX,m%[Fhwn TNKi0RX# sDNJx @Hkd舡ab\VN&MRmDIVV"e~\:oD,CӔM4EQg`Y䝓lSSӊ BjEcyԣJ%̦2\Zle2('Fi4 չ"K@-LIaErD.dd0BX*2jiUpĽ-QG'Kb@hjU;*ӈp<4Bb,O2t%TsjUS(V'ZS2B#1DRTZyDB(٠SoҤON^OM61J?WT}:Q: i(iZHS"Ej5hXZff0Y &GIg)Hv.(*]'Tj>GXZ$ de r4j*)Nu,Wt#TmB%D4MW` ~$!kw_)%5?ug8 |GϣZ^8%FxV)iVk3jNV"5p,Gt:ˁN-ϱDǂ%*% qOx=%Eb%/osf-CQTDiw*O,((Z )h! G:P$1$]$i+:QTJ^Ŧ4VG*]Bj*(B?Jj ۵A $Զ^ % [ }b?֩VjVqMyP@Q0 EӄcJD:iPeJŪ|N6́L6[ht@ Ϟ&Ƨn^[wȨ]fٮ~K39R aMOPGAۛHE"Ef$HMl5c}\kJ&{k[oOd6o'SPldSc>iCsSױ68r]UK3cC'sX$5uh}w2ޚj]>ǵHd`^ow=*x{{|IE_v5euZhH)$;dϜ~ML"iMϖ!"Qbg쭇X{FCӄwLpӲ@MQ<VKM*5/Ph3E@ EBDȈZHS4òNdz:Bq'tPp;&ߢGҤ6;k~~-T7Vn\s׾Xs44}pdO ːv3 uډUkqTR(R]8 %r^rt@ϡ% m}•\;$%tӫ~0嗛i|)!U;kMaԍ:ӮP~r/f5h1ߎmla"(SVu.S/Z诿X2oW=jinYN;FS'aUyĕZ4cn?`p׎tj-r$9W\qɡflg~N.t+ssE`Z;I/<!<#,Vf NE2 M1y(*<&])OB.>:$;zް<m={.F0N4_r# 9YN~] QT]O;1ޮ~me6[ ?;]x336Gs{r_dfݨͻ[,[sۏ$ k}3N;" y57B]kߋsM[PUg|0=N^ݱɜ+=Ѓ4r8djzG2q X׳ 7WL9lCVh;'k_w>5ɀ=s^跩K{"6}=ltx$N#`W67_/GLy˓3TA9}篞eo_6> w=,6۾{ukٶ￵k @ԢF^VU i4MxV MMF$!%VhUy#l+ \M.ٔDŽB@0HȲ:!%i8VGO! ,6_rx>R>=`֣5To#qէn.zl#j?mz_2܁ΩѹOs+t}x-nqRG~n)'ulw-KKο:תß}T>mko IuieQ/.ЦSDw _E_in̤ v¬>mAO[=]gTK j3dj`gU PGV]W15 PRXԡKK,<1m(d_E4Жu _;zKAhi} IDATV| ҎtAm3k<;2&ICJhu=W3gY73ع o;KO*i6݇_՟bԶ@}µB㿄Mj2<ׄRFs$?ה 4ˊeffUùVCg'WgN66u5uklnl.`qq<ws<: %E߳tg_s4]{Lݦpl`% fG=Er1HK)xgPr!Ŝ޷#nXA~TɅ!. dƒLSU^_\~kQ9o~)?YgMZ-kPA Ī6F:'&-BɘY k022Z 9i{LYI=Xg_t{cXR1xN*QrEz^JɍѨK'<` RB?N-Z4-&nĽ ^qni&_3qnm]$^ǖ8Rr:ykDiY;WhSφ5 !E4j `ÞofZ ͛'ki#U|fR š ˫Pbs[D$c )twD^GX$d @m/CAocGPrPߗuނԞ<SHvZش\] mYt/Jnd/dmU^ze?zy9 Q5md\hS֬DM$_Hk[iOx6ձ+q `Y~gϵ|HBH6z^Mmok^pp(µ7hR]bTaPekDF ADBs]Vqd5=-75R(tϢRC+k4S8PE s|7o f[oY^=}?.MmvnIg:˅<ϲw/pā<NlRḤ fDX"&ct/D&!Y=ǶQNo5C"f0 6:o7 (&li*M*N޾Sr\_#{ )Ȃ%Z׏Xy~bH|5Ͱ E\I Z %W:sZZ,HRn Y*eh@% `E<*_O4&?W>i [+iqaū?cw95vU2[h,t|o}TSoA2Ō P1P|"dfJ~FjB>؉ ؼ}.ue7.^oӮxI!AH`(CMTbA0,{~tU0Ƴ&^PeO-_~W0e- ܃Xe١d~k[tZRE ^hI:fԙjE~!23wxHƈ~owy8S\ֵzlʾ6EugoWѵW#1yu 92K):svh\|f#2P8R6,$">EQ::_f:dB RӬh32Yjv%6LGrI$.Gh2 ROr ~-=9ZBӦǜr]P#kJLY(iCh,L?Bl\V qfm933<;NFPebNYZK%]Rؕ1R/\$; lM:ߝD[u~ϟtPvB:+×[NUA竵@XHS_W 6.Iܿ|~\=\x&&_ۣJT%n5#y`w{J [Ϟ&<@!ʣW__~~LVfXƲzfyՙJox tҼ9%BCӨH!wk(4\_DZk{jN)12ӲRs33rTIsR36MVn>?g}Y,|oZ:_0,RZ\Ax޵ޯzl?e#LZ<çs<~G9ĭQ7o;mP5Gy 7oOsoC&Cm\6m]z*BY,n^_7u([/(Ҳ[VLZ5Ux6>`٤g#$NvQyx[lIK=_o&r&s]:tB;ĩӶK4C5r䆿XYR/`~ 2zĮS gnBlFkeކ>Zumcf;bʝK]_?S~5=}nEd޿|mlZ\з9C^@(9sqjߊS*(\{0Uq?l?ێh6#pmЭ3@y~w3y֚_v VO?aC@Ё2wxN<{߫OT*/T_(s98ġG?1&24[g<|-i@gj!']Mibh-)ɑ2ի 5R˒u $VNu:-;VU}~ͥs}k/dkYԶNW}|K}pL'ZnF/goa|vTHjӽm' :=Vik"M癑ᬪD O#A W|}6S)eW6a0D;дYCZ26?VZ2c S,K0,jsrU:jY1aD2ZcűyG&Pʘ-eNg[l*߹E#gtB} SA@u0 Se? <(Ѕ.g2 z0ۮ.PMmޓب5 z')0ET*"UݮaahfYV& *>{ =<\ sO#INV˔8-ۋx 7Q,s3vmZlX>U9HDQh4Aղ,窠;x<@0%I['t<$=xqBi4(^c>!uagK"*0znD \߇zg D $)-umTTB$*^*C'BU޹ )%V 'ʛWip8BHIl>98B@A`VSp(ia< IRGa>QOVu+Bs!P AB!TCaBP B5!P AB!TCaBP B5!P U3.2xVXB8g(6 uk//i8C=Be6t[A;JdZae6+4޵4wo@ފ[%Q`?z饧Z7-nBl(fv, ((C}4jV{ۏZ\ \WP @gϭ9|B|MB(^s۷o{p#s$Raj,gN$0,͖IC3E2{=r h/ڎ~fspC8tDoCav}[ߟOI},0͚mb@Wmqq&74"<ͼLvg~VmNNݛe`-~-!ݳ UMdu4_ABJFDu٘{{JhU5\iag~Quf}yϏUܴOV-->_[!>rNU?i`o 7rH)!gQiia+wAtɐD7.wBogoڣ~].GjZ.#>#OARed==bG=UR%x|ӡ[1jBhjwR3M[k0dI+? ݚ;hƲ;g6,[}eL `"nr.<%y 1Ȋ[aOMQ9"3[ǀn5-qai fUQ6l=sAR&7sm޹À kQYzJyt˚}iz]`.UG͉ڿ1rHn[Nݮ@>aEuqk'˨_md_^|"% Ģ輤OzȮ3SԬPf6uxt|cm %,Bcݺc!a m29*5i$BQ@Md3'^RL%^?~>"N`]XU?^-I6=G2-Tf`Ua'x ᕿ%qG;zh`!Rת/>n<~۲gc{9PDpz}O.[0rdJ!Gvt 0ά~:ں5?dֈJ٠e'?ҍ>qr͠_"ׯD}'eɘMgvMgX³cQʵvj#^ v$,KYᆘ0nݺHsg/S&*"ռRBh"O&RF&rBǽYcι'Y$Yy;u _A.<ջ8s%0p)fjMg=x;%8S5i#K~@,Fp{ijfD1yjIB5 4~$EFͦ=EQQ2"d:q2k`S"Ŕʀ=EJ}z9(UXed?uV.$ԋ Yk_JJ岊SektyNFÂK/j%z (ZuNjUf wť zUd2q !H ]nԯyf[8TH&!(|h^NB3+k=R(6' %<´ߺٔ}'rA[xsXSo^]&w|pIe|+y0/J -U'c*g8ϠQ!\$>:oiyN0}pk>\Qʣbx4³d9_iJF,T`V!* jʤIRB"O/[29ުrת-߽Z/;EQkߦ]EΠ/.PϝXZL!4B`RӀ/ُc_s|=Yo{% %#_z:(oK5H>y{xK-95$6ŏ#ƇnKFP'WCgO yۛL%qvp}GN{wsJ ޓog"67C+O<=>j*|:U7K['O?0Ȣ_} D.cfmءKWx+'=ݒE#|;oIǭ3y8_ߙ ʼ%: eϠI؊yNܾܡ5Së J2%7n[hJbll_x_+۷|˶ C5#[†WZ5ρ O._s6`W_vlHu`j7v 1~x=q`z+._IH}fjp۶izR]_HDƖ4@67XsAP/hLyJap!p!v vg/?B. Rlޥ#7,vO  * NIΏzxe7-pEa$l鍓v&JFI)"9!ÜBB !0@!j( B B eL&|R1`T|$K?5I+? B"Csvoag,sGN~SUVSw/ڤԧqTB͓cj7?mxQGЭ م[AT{jA@^Ȓo~OW5yշܿkNBTȴLQmmW6vǪ=\i\8\QMHcl='3؀W%$u>ZB@fqX~ß&L^2\sl%<رA6.366xji%Ŧ΁}yuvW |Gq+xA!ֿ_p5M?@yZ<֧Wnrg^&_wkPT-}V'_X6(lvj4I:m֋# _;QAo/><ϵFs` 5#aJ\Gyw7Ы/PxlƍUy[˄Bg]N]o8)uvB}v>'Mٻrw20~w~7nXիlbwmY8Iȓg~ s}i2`BW&ځ]~}lq]DYiNbU九&w8q}슂:5кYpe=;tT w"]oZ 3nod7.%Q虓L a4`k[Yضz|.X`l,3q ~OicB)p& ~ט% PZ> \y׭Vǧv_'̍)P]ٶͯ vA6gmqO۲v;B~CHr ͛cWQ7^-YeקqZ#20Q܂&9s~Ӯ¤lKQ6Xe٬M]5r] LVg/ !W$FG.h#+mo=9.kK K~wh8H[ &J6I]ݎsJ֥=:܄6Hem" dx8zLPKt*0fY!,0ѻ6QYۈHJ(&kҝqbyۚ "ƭ{+ug4@ [{XeLժM>{e '`ښ/#!wrz38Ȓ%ţxT.%kf RH4^VԬ$*~S!IIoƸ vՇk~eyK+lOq!./4Bԙ]Vt=5;`%srZ'xYϳY0*vJ/ĻD&!XFz7ѝRn+6O/Z3ib1m'k 5aKE3yh\axz7?mdfd1qʤ$C{d7+eBkg !PAtBt< EW\N_rWl-qV\I#LB@YliRWO^D(WSsɖcWE&fiI?/vm\4v.5oz_w LvVCYanD٥`r gIBJjL.zv+i! 6m|m]ˆ$R `ur;e@JdsludVvcmsuuq,eo*PL>#C!;'¶%n7H%$'rnݩӛ$+!9r^yi>r+B}:>1~zHC=}9t|oذ\8OMl:7iXNbxbXp`Sێ&qC~ awspQw^x_Zх"*` fk/8>]cX@b΍SK'ߏxC8-#q-;0V+S`E>W8۔91U,k6) ߪbVƦ/@´n?߶=OoiZ3Lntق \)'GOH!GO!RuvmŋP%uu =+TXXiaB!$I n+U(-=):x&;%k%'dӚԹq-9&E\?rG҆Nx(h.wϵV][XΟrdײIO6|9=/+ܶD)9qoW/hq˶;AM|ܜ9YOzRc7dD%\9"Ջ{Ң N =s2҄CCnmYnh;ÈvN5kGبc+9(Ȃf݇-K(-jWEs6?W5qngr2]S 0 4k'!j[ )p*2] *ƒ^[Yۧw_THHnbm;w4+:~߹?xfÒzɘC}P6sZEԾT PZaX(c&ZnʽYV;l:v{at;Op乊)k7?ZNHZv]qbV=CRll['`ЌMќ mu^}!TsNNNtQŠ#A`nNnB}B *jpa@ox(E_:aϯ+nčZ '#z]+7}\[m6obiw+UXƬ/^铄!;7b9tzT7/Se$=,>e>8IBuwn@*<1B&{lkL D!P)0@!j( @U2ToΘU1}U!Ttb]t Mm M8 T-<39abWBWh6E܇71- Yl`LfD6o΄% V^&K@}6t4t=[;?Gω* UW=!߼Ė@:e^Rg<.~6`3/X?EL !1΂Vٰb귣w^_nׂ.TXu'<-Qe=7/vg_͓4v[.>\І߽+2>>~@;QnGwv <:u.!YZOH%b!TyF$'̻ DŽA\erBAn"^=u.<޻+d3^8g8r;z'8.}םj3;4^Yu!*UUKQ0l\v)ٗ7>A  !USNYpsLYJ`)ּe Β[%Qf?WtndW.BH)Ӄ '-QǤy@>o_o?65 9w t\; V-jf }tzjA] q7%Dnwf[u[\p@im&HJ&/] C/ I6};/z=kg#^׷>0,4]Kc0@'A]%aY4"!fY R^<"h. p@ؾ h8Ѹ+V@Nb}mr & ۚ\Iέ&v6Fܼȸ$[w yC}2] 2>f[rHI+3Q9y;*GE~YOٱe7_$̽T_ӮFU3@ۿ,PY.W|:Gst\@r?wbT[O(71!*'}ہ;Bd @җW|ͷFbs sBUK^p(!a=@'@X{)xĞPxNG*pkGf7f'% @U 6> F0@՘\D!f{>yZ5k"B'Mr ?V1<{Vֳ!LU'~^+VH1NBU a69o`h5gg XwIVh_٘m|$0)ۧ,o7xޭ{~7˔675.F&}na)wݼ |NtZk4~b'ߎBf;n2ݻt (6/;f.T䅬=ad 7d9rs]_EЌߍǧ%;5&(V뙸dԃ_hsݼB!TCT="_"B5D%"3!B5!P AB!TCaBP B5!P AB!TCaBPU]:v'33;:?[D2/87:fV:Œ^&\:yg7o32͓3 n[:|6I ]H$d5댾٥̚Tj!$c={[ߡN80oMmw38yf  zMh-sxr`h0qy%~eJp|Ox w#U_[v]Yü9YqI+tm>;I*ߴ2=ds.xQʩxݝ Ptg<Db> !n%R@t~1:93HTzL>S˜ CÝ}ӱ7ˀ3tˁXKFvz60u%(BzDS; ¡~ntZiig*Xk+ɥ}TFiQMXfڪivb`YER#)x(} _GHi;M;J#}LfN~gHn :3ta tJR&3ŇAmg`c_(ťkqFk@XוW\q֣[ݸV鲮c1 w42huwU,-l IMyƘut(j*ނL6ƢcԶY^@tWu. 7GK>pI g_޸i PdR@^tJ7[!BSZ+yQ #@BnlωWn2mmH&(N,Kih(A W>z˲,^|i4P)lelx:z]5] W`#Uɪf Qe'*i*g7?Ӳ}7R>4bmf &V#_iJy4c FRqy<|E c) ёڝ;(GyNdJ#y6g$%)E< Y9_ߌ45"ޝEU}eevdXDEԴr-2+--Kn\OfݺJVz4 5wA%EYeA9jK3_!x期3s~s~۩>Uz>M5u'Y%w&7"szye+D'ФT{o%pHw{eBD.][Gԗ՜srf|q|_^ŬZx.?dJJnDjo_s7u{KJKeKDD6n\e+.k(+ٺ-LGS6bm5;>\z(L屽; ,lm-nIڶjJ?+(1mn(ȯ4jtjF<:xvf~DD˜s(Xo\5`1ʻVm_f46TXuA""[rwH/onm,/>YC>nЮi"5zz _%Ҵss2..Vf 35FN*D:C38'F{UM|M~͒o2v-'C4W.dys2:ò_V5N~Q<!b`30^7[RLNa1DD]7]|˿Yh'艈؀L׊'v5?[KDDvig_.ڧψԑDDd8 M/@vEyO&iىbw/t0EEEz&Gzrruv2pMG -SԩB^ 7u~>,C]tU.*qlRW;4wv&S҆j7VRjee%Z1 iUu&`ݦc%a^rUX KD~nб֪3Np]T,mdy90'\ϳ4fp`=؆z{7WI =4,cؾTKSR<4D@舘mK.o77КcW Ƌ_mQ#¤i6?Aw8w\Pkb/ē Rat W.ژWXm4oDAKX;!n"jl3M P̱6!PMx@G1qw&wo9"lH.u ! |^݈veFԹ`G8.e!08<ϣS ˲B#ADQu)lHEx޺itݱX,H(Z,! $ٺvA$A#m`.EzC \zu#AG"ʴ](g+lVMZ941J.q ýNqح]6`}.KDzSɄdYn6mȵ!38PQZ[[m]VCC#02DNV]jn.A܉|B@gж&VE,nj߭P 3)M_}- [^[#i-z]9w?rQzz%>^W;”'p7zf {URᷟ/Z{~:6iؼo~N ÜW }tDWwqm[FA.zUǖ=6qPᵞ7vg}'tH,+c>Λ'b#Çe>%}0|{SBX" $WNe'SS X z% gg%>*moQO}y"[OˍGs*[T:GgL\85egGe~L'ei'+]{<8mݝ 1ߑ:O#]~YZAYceg/oʵκ]^zضΜ76YBa׷_n=Y`tC>p|n&O7?,{ᢦ-]W@YKՁ1Ox-*g"GΜ݋!KO/g5'/| 3:~oSLYjҪfr;ẓIޝ[aiYمsxIE/U ! ֤+5Buw_4ܦac+$T"sZ=?y IuVi\UMWR GOڦ>Zŏ%zqU?;؊/>>]v-]"_I'"d ݇Nd@H5ƺ3:%yރ)]B'뿣(l3Ă= 7.]vtwb7ͥ/ T擫僷 kT% 4\c/X%?|c{ {\z'tw1הp |<_oe}<.hEN@ĩ9õ;?{/ٖ[vV&"R&fnH*K* Olb3c0nH_M>AZ7;'W-IMxfTLtDPr9"CRTjW~C\}{n)+7~\"(=gϸwSU{_W]ݷ>~DԫrpKYYIcz|BzN12$L]3!Hu g*8UkA$"Q}.;h)Wd acF,G҉Y;Gziuo=Ԙx[;CUe#$S;D@$VT0aw]kt=gu밈U%-omKIh<er%bu=cΟf[BBߥ3>l9>.DrKέٞSX*1rAA:22ɲVmѻ5|?+&a/sk'=j9w^&A$Y&v2m$| ݇LJch^j$B͝?'|ƶѨܻ}`?y0]C+ DD_^\wZJe.xSGzߔ\m4s=8F:"JrNz 3C$5մpUUꥁnj:њ;+;]W>p}!K!SeU~9:*ډؐA ]2V(ث @OƟ7|(;P ,ש:^kj0ڸq)Xw g붜3W;$ `VmuN""GT0$lU`dÉM)8SUp:7}Ɋ#bbn:Z}o{sZ6V痚:+Ipd!'CC=0PqMkZe'ߨQ vgSndج9WmZd|S\xE2~].vO~]}lϜٸr'͜_щWz:<m| =OD~U< 9 Ę]v+v\o~1Ǿ4.LKeKjϊjmpTŸu@DLQQ^u1!uR''*,{-~ew'S:ɯQYY!((YHDRGUaZYYQ*=]m_B88KKcS]?aL86Kϐ&==շ謴j2h&avV:\a&3rM'Y5֥@_ǔ6[,xcy(Pk܆ DD;o|zNNNiEDDfn0Z:Qcң4h4G1 j%"e`d#,9Nuqt:P9G1C4c5j<==e0eaU`%Dj(|EOiT*Ҁ`FRlB#ADQu)lHEx޺itݱX,H(Z,! $ٺvA$A#m`.EzC \zu#Bt\zu#B&:vJEh6- MNmJVZ-q." YM&`h[2LV,$Ifhny `_dY6 MMM...,E^B`_L&SSSFA8N455L&[C-`GDQ4 ....9;;766bBwilldYa h;===m]N -vl6efKљ#!e=Cu`GdYFeYtY;8) !@ SQ+]gFwrcÂn1IJ =Z޷ao=0Dssp!ctSfס 5.*kUژv! E>C&>,^im ~o~*e{vMJ3tqF}`pFɹe"yߺ_ymS"wlZe&"LOvU>;ƫ{,a)mڸheեEx6-nb¥"Iՙ9ODR[j!8&u_kW,lbVvH(;ڬK:瞃O<,\r^$hozwF#{ qu 9{d+3R|S {d4;PpZ"0!xDO" A v_D;"vK~O=?*ͯl$.q)@Y£x,Dzm$,A-׮kL =mLOR^ARuI(>aOƄhO0φFpV}c:۞B82^0p3,l]H:Q"Vdd5Gv֞eo?p3eҋ0{T5?V u ኲOwUsmG6!]Qz8f?ֵ tF0ڤG~T>? l.孧X`.ҩ+ug^-Y٥Hwd:rteMq^M9nj"">m\>XozDm>omkuQw/ c\ƒk<,qn1X\ƾ06EI..#"Zr{z[RkkFm` Q\\`oGޓbc2pTzRs2OqqqqHBND4Lik;ۺ8v}SvgpC_7N B# HIJhA{ۺpH`Ukt-3A$ͪ;r_;P[- P`x]*F6jUV!tW*dYF!Q6#:lB$ABXbA{-&b-XX (rDz,Y%I^ dYV)P P P P Qqq鈠zIENDB`dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/en_US/fig/repeat.png000077500000000000000000001050651473346337000303630ustar00rootroot00000000000000PNG  IHDRm& pHYs+ IDATxw|u?gf{O6m;$! WKD{;=O;=~}xޝzYA HХBI !!l}g>?6 - l2 y?y`g?϶~3%EEEBH"0B7!F0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$ @}#/@2W f[ ٍlWU#o}rj!1wOIOm-Gܭ{C FsUٖeB75'G)r ׼s~Qwu3{CԞTaqo2gnl˛H5g+8vPIkҶ =.gKƐiWH?Q\Ro$A 3Ғ#gC2o]?P" ǩ\߾OSګ(#.g?mYN;vx޵͙[IT[z0Wx?+4)YLٮsk]b}x̴cG לx/ O<(eפWp K69\D@Frjlɫ8 G>sV "@R5E6 -p_UQh(b}oGTQâhC^Q i#|!=+ lˆJ͹l5}y;K\{6"vܪ|el׌8 Onj@; rtv}c) wjN78L\b`SI2a~U%z~_]Q"(՟.[?:}˓|RdyscCpe]rR ĸ(8 :ndߖZyK¢ h볛ys≉_mWOeCg(?#HtD /%(hXr%7j +6aDR(h@f@GW=B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!#H$bYV$QJ/BCv9s^#V( B˲w&|4N l G0;o>YfF2n܇FIO~oo3>$Q?PkjXqoVN?[xM su)I1~>=׆nGy[Ԕv@\8bfA*R[Nj79'wc2c+>T@m'=wKsβ߬ٻ9,;[qqo' lL*N}`jqao~N|vX |}պ)KWt^0桥OE-\g*rGki?l^ ihR1T ?|z^Twj{wNZ:IQ '7)Flu4LF#{ݷdorpWnhAg38265k%<m6g8?D-);ehBFCh/و6zhB 44]k\u6e.Ԍ?)JTcKϺI kTaeDT^P$ S׶naO[WO*j\v./qD,hѥ ijL\C=gN5X8 hK/6$N-%խ\iq5o`6Gj*\QP6z@)@̍wT1Ғ+?1^*s]u-Q&"\>W:aoax}ك2eZ"HSm:ϩ(6>qM:1Ք(#Ǐ]?I4Fq'|RW[uND?T^c[^i\['|2 UWUyM#kê?|mZ 痟7BƲږJ %ڵtM}sSrMJ' 4+fU4+Μ*1Rcŕ V 4c̐u7n:yuoQo?FV q .<~ikb X2\E@zsk|^3'3N^>_]Ovw%0яeowuN6x1Dv6ϾuH#?ɚMoЄa/||Ϙo^wCMU 8$-.[SqRXߺl6V)TT*nBOX,Gv4 VBH0!$.SB vpB]E}8aڽBh@qݜၽ.8Rqxa4/FFp׸nBn7Ma,_ #4q^{ DبR\.qL+ۅA<<666JRԌeRbBbD"!mDݎ>NrQJ|k$ NnwzwBaF$yw#1 #tӚ!t3p!BF!`#`0BH0!$` F0B #!BoH$bYV$y.@vL!vs+{` BAaY/^ۛJ PJyZުjjuD,c"tcF,KRXL)U^[  v+JL^ eJV(^s D"!D. d2ݯ ǂsfB|Ch 0]w~/ꧼ @`x/ 0P#!ދ ·juǹZ3p@ 0~HW|`!+rL#;j :\D)n7֚gi'BOj`gyKbm8)!D̰z]ͣ3\ɺ2\w{[?Xl7E6Wk։7Bъ卵NKُ|ײz4N}Vx=O*Lw| bBnNn :a޼> g>~p KOIyf̆({vA~s\Zf!8 t~>#yKx͵-xOםPڋhBO'J-hK5A1)z@faV]Ȭ^t 9sd\ ;y8?o]`cbŅʜ@+s c|"Ffy /31Q1"1͌ UF}xAc'-*Y7%iC" >}Bܵ~/E B.T8ks^_PtdpO71/ rF7c.d)OM9eO Jqzؘ!L## ObaꪨlP[/Y! 5JjqеnRJ]e}NACW@Uxh߼?`ŗ<asҧ!qi r#"/e%i<(Sk.Hzœ26*)+/< Q5 P i+rk8kַBB |`+MX1d %U1)mYgCUCKl5e.u!LcUXU<|ME$r\,N ԀEe z U[W8J+}_)?e'̶N6a'+EE^_L*}}كГf ÒQ0#j6ܚe4 yiy:ssmy%u7ͥkPz{%RfJ2~"EBLUb)ʜ3EҸ0񣇘}b*Zyɨi^H5|s0a#tp?ὗУ'(3a(3ܷHٖD?9ִceͬot£ SϺQ᝛6n7O @yAXPnʋɍn$&rPh_񐤠Jhγ[> u%<_ ׏N\Umً7'02h@ t-)**2;?YE۾jKs禿}דATT*۽K-֬(;L)59-Li#BX,['#3fcS:C;[܂&sHPJ]NrQJ|k$ Nn{:BaF$yw#1 #HnBAL F0B #!BF!`#`0BH0!$` w+Xdba~B?#淿87s*p]3XqUW_3swrVp':w~w~[e;ޣ/[˥k(0>!cg\2_ *; &|E3EJk}U<Q}s?[yvr7R,tDi3 7oC-g|t^E%;M[?Izt2LFw $}ݗ_-U3[EOKmV,ɗ%țwl:ܪ[|^ sO.Dz&uHlG4~Hޔwh_yvuhó{?ҡ#>nob}c@M}t\q·ӹ uO?2Hb>O ֬,^b(?߫vFz`/K9k_˲]uK泍ĝ[ŧ @#QjBb9tA3cD;Wy|ݎ!C}ό{SON.N\tGΙ5m6sO͟/ju1wDIg9>v{;߄\j*pF^ĸwk@Y3(]wtOnSu @´#>c= $~)qJ3cTEUhI3c:#*Ѝx҅';Bi⤗g+Jg~lO!ڸ7*'d|cfN~Sa|OC(dl-GGbl^t 9sd\ ;y8?qT!WF2s?g>$'($45ד͞6=;~pVO>v"#O ʸ 覽U6sc@3'(OnyhھmKUqA,$$Tp8pmWbE˙Ck2KGw=+96V~+-e"ƏTwW댵y'T;y5N?}W#xlDL.9@yf,noɁP'zfFyJ*G8޲9e2! Vӱ %V6/&  DzdN 3&3^={(F=pkU4q/*$;._хièXsT\_(nF<O\[$tWFϸv?| m+WO\L?~-wemZKPGz[N8oN507ijk*Ok |$z*q֕mQKU%xjiM9Ai,52Z7gXQԨ4u;7Ƃ\*_5aa,yiy:ssmy%uxS슪\^Zgtb$іmp:\g9Wp/txYStf GȨD jjϝkZ-+W|R_u|[ƿ~wڣ qj7[[O_zh-=x5ئ袙WAy)p?PoyH?^cLw33Fn~O"q^:鞭6N< yiu_#rWTӋJ/kD n^#" u!G0B_!$~<p,!t>BF0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #fQJnBo~,`,nBo~,`,%tB}f 7n P߂{8Fn`wb3 \.z0 pvl6{*WjP,nJaB-B8J)Nppj1oqVj P!$` F0B #!BF!`#`0BH0!$` F0B #!B+ݺm{2.VtR 6:x֔P[:Eѳo[[껰|+ɰ6[ݓ7,ۿo{z̩F{Ԗ\;77oڕvŢnBZ/ؙ/_$?tQMUoz}aD oĩS@KL9'/5{6tnL kw_,n{]eYơ#i1B?D0m.<37ٖ.+V|}~C|>ݰ~WQrvW66:E~ID.cڥKoks?4gH,z,U/2LMgs 1ÒR5Dz-$ 8:؞[X5Q#'>zq˙xEWvVS]}6=$RC2F/ވ`.# Kg^o2N2,}!@L:2All415˻x]:g N`t?ͣ`!ԟxa ]{.` |FEݡ0hSqyj.Jx <2.>=]JĖY#G$ve!GBfe[@)4fV ic"ꕄgIviDjw@2<&+ʳNPa!?u7X8gbK΁O䞟|+R&WYYDh1bR早[C0BTw#؜{^@e դ$wmemwqNkmigǦKxJ.+r%悓;hpkJw_f  ?[qB2s8?'3+ĉ//! '/w^5IXD:Wc R&d袉uk'VI7k3+Ò7. $.9G&6:)YQm<.ۃHQQl]M:~Se4}d;;MQ^kBh42=e; ؞&K1yD5 !nTtrKlRA2sHB_'yi!xcP_ǂBh4ؑD!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!Bge|רbR4/؅nZO:]D$Pq|/|_Y =MGgCs΁OvIe/VP??}BOu<<<׸rᕅG`9'fb@ɛ*ztf<;XzrmIHmΪol8Q 7[tæ͚S^8nJJ]:lnHe +*Rq[-&g95D秕L_ۥ@JԱ$*Cbʈ@7 ƏO+xM 5cO(RDϏ 3]`/ͽ?Mqj_}ӱWdf]K]tgA `fę,5+mzT>hhh S 7{$CxV٧n\X*4r.b"SeR*n)OyR-ILvK]FP"_OgX$ g s!i)\ZF`õOc)\צK %yGgj⢙sbE5Mroğ!5ԉfpX8IP|QcMipot80q7g(hm]σmD"߮[{i ^x X$ID$WqmtӜ渥%Wnq"E!Cᆓ nk ˹˷4Y2XX Y;(,nXUlvqN%&@Ue͗AO ZBҵ)U}u҂ȺVZ.έMJ# #obqHȱAZ[eu1|J{xXPkC&U:KŌVZrER3y*SG cLͰQ-jVe; \(//2y5Y rɌ`7rz TڛL&kjjJc/"aw^0?\ޛL& e1 =ٖ#ڼUB~ #~v!$`&9kl{̈ŢY(>]\_ wcپK"UxҐ"}]K;veeUXB?b~NvojONŏQW[S#5.WG󋋸JX}{D[#nسg[Կ]%Gkxjzlvk¤wvDN(${Whsf醫:?nލ #+@pi%HG˅z,K/9[^6bBs\\nL%UmqDFӳ{Q+P&e6e).LSK>\\&e.U*U/v2Y#JbDVsk&*Z_6&xزo}Vk["Dc<.GԘ}[;V }E7lڬ:>XןN|3qK*y?)%{sBzl#Zo4V~CZsQ!)_5 p|GϾp)0>Ǭ=]68^*2!Cp[PLu濾o=T^%2 n#~L<B @͵ v}hS'LU/]tK_|p8N64ũMMJj|4"epBF-WEsK=mz!4ƗY=w?˻ǿpwb2/=2[ﯴXZ.e;__0Tf3;ے8ssn M3HV'dm$"*8{工>ځWfD(#?҃Ng /ډaWÙݻ>`۟>IP|5ؐscvG6{D+:T=dʂ5z]-O #T>B9zIAGwS 92eK=ff|_qB!J,|ݕYġឩV2+5FJL5Őw)ח=˄ brqf4\KA:SEi]ɮ uk'O/J7U}16R DAsu2j3Ӻ*桃ygDS{E5[{C'*i"멧`9=~WYԳUQ,4!!$236 ygw>|3)0D8JSlP/.u:He[^/lT7/n!}YIZK~DJ޸/~J(ݵ;qD7]J ?s6bP{D {v L5¾#iIaU!ߓ_xQ~lC;`FHݿn;4#CTqL[vlHutJ=v}J'nvS^o<C #rmX?w=rر-;ZSa)vW6>uB |p>y]-g.PQ&ZߠF cn'{1|ٺ߃sL:;e]ꊯJľOY~t?6!nc¬jVnjcF=8PkP|ZrdǷ 63ohV^KƜ2i@=VR&Г&xǶ]YX"tQz^f51$bYInm튊f-h4%!`R F0B<8n;`.k;>>:'9"jG PB!an]&8F9FmM!DQ[4i)Zj5<5ǭOC)u8L=*Jz]KBXzdCyDy-ޜgQJm6NV|Zm󼏏g%Ja F*AORR<XZ<`04Y555G ?Vv<XSSsk]Vm@ =uOk,Aᜳrokv/ϰܪNnh\.Oݛ#ZB`NH7T7 oj _H5XV{ja_0BYoNsȯtgn2fju[n;FSUUV0Bn7熭`"mh4@]֖qۼB>iג[Vm#FknDe_~F0B)F/zeQSr PۻAie}uY.'ħsY/byfN\t=NkR,}d3&t W5|9NnRYk@'.O!o=`M߸Śg1W/uۦM#s6>ѫzؕ}ֲ)RBI~٩ftUWA*˅R'YC{M3" r]W\|xΖgi=,P;W-vú& T3ە. V73L=.?w=5yX@i/a3(w灁IaiҸOG򍭇  `hnI?*1'kr_^ ]{AG4[?mܺh'ӪggjBKB^f B{>-쐐ԟ P.B-l̈ o/}cML04mך}T]8v俼|ߣȑV-;=gKSFFRii^UŅFВ"|V?{!8O &k'j(uU:u^)!ޮyL}>w߫1Q RnDW ʒrWL4Azy&dvW?߳n+䩣`O5^mj2CGw7g3} wͣQ<yOk><:+k7/J2Zwy/wU_04| LW.a=o/8rضEܤC ZS~aό[DջlnGtT;Ն7Yi@7-?˚OL$o팘6*^ F?I~QYD P_ߜ6ڠj4p)i'jo޶|1ŠP.-P7=击ңOxlZFykt<|cMu1f 4| 3]I*+/bj+ԡ1jKatbȳtZyʿϟu gTTWߊK .O !~>e.2o0mZU3..<(O7(cJJ ޼}BgI /c#|5B~n]c~jG* t,v4hFBz؞;0XUqah?o޳<ө]4s˒vX&:sw/̖ڝ}}x$zg٧v;t=D`"a)RW|U҄'}|Rlu quf=PrvV;(3A W-Z;pCn?5UTܡ}##N)*QIީsʤ5~[eKJCOx6%ێdggWVV*] Vz}fs:d`Xڬ$6vEEEfc4BHI!`jypn/|[v]fwl[y-G`#tFp;%IR[n;YBdebkA `L7nyͶnԭP-Q)5xivr{d]&hWq8 4Ju[Vil;.Z+;00fR{JhHeYLcLv$i4OuD`_0BT*vEQdj81,j6 j%Ia{8 dY,))tZfF*jfBxWT[Tv)<%uӯ~GQT, V0 !<ܭJEΓӿ5@n~#@o}(!0 q7.EQo#rUȶ5F oPCXeZ~q!`R F0B)#!BF!`#b0BH1!`R ^|8cY8"tK fI! 3+a NGaYV驙CJ8ay-ݮth1 7RxE70 jyJ`PD[`|NAc^s΢ s8#ɷ8D۷8?Br-Oӡ;[nyd(-<+a=hsG`EB2-]ȃ:!F!yo2S-֜[?ɻ=o:77p+Yj;/_l',^Ɵ{to/[hK~NV<컯8)ay߀&0rs}zh8 ӂ`jڏV˷6E:-_7܏3k R;ޛҶÚi_fO*3t-yfXG04 f>lA_q#wD@8ߛ!&7_<iͯmY;W&ҭG Ų lRQ>:rhfg}6>Ф'`X.-1>dr/?pz뛻nq>tݑEwmL/O\ߔb[}ቬ_ȀqpjRAܩnj);\EW:t䒝1\e3/|->0uZQa>͝rFTZw]% ֭_q0:yzZwoȈptٞb:ˀg$Tooƣ p곗7{޷fݯ>=+]8hC67#8f=9.ux~7ѻ̲dYs~M e3sztT p00 '!];zWnڏׯ6͜xjC9~J]SQRyG.޹)>rfkv{Zo)C;˄P֕ǝg>{oYk3&oyϟD7[+Ŭ5]Tn}fL摏4~ݴء_k u+=-E wl6r_웵 6DsFdcF1N}>#fw֞/]ɇjFvYU}'m}vr*_f#i>'K|z:`=o\߳?&w_{9;_.O|= _/'&uXo5'țB8(~>bOJϾZvlybyc[OH "D?q>ԾAf6(ψ5G՟ H5_8S7qXT'$GWA:N 7G&VUQp_8s9fB(3~T''ߏ'0w=<'}9z_~}Y4xĔ> 螣{{w5˯n1wqwB! "k 8I<=衔0.}s(:/K[p]G5(d2$=jO4+}NGo6͝G#gt\.홛9O34/(iA9w Z-v1urȸ(?M{CB>z8\u#_{bA@,=y&{bj3`GN2 n. y¤Iz"+w+/#b*SPAJ1&S T}R "Ъ2^1yG p,'J^P]-( PyÌC'+C~!&y(Ux7v(R @@ *w^KshWϻK;|]EӇYtTۯO3 e(Pg.E0c6AѴ*'=o|gU9t`Oy`ڱrk(?|}UmsemKGN2bN ]KSNW_Wp ǛDaUظ?n:mbD9MG|~Q'y@yW),yL#/E%RITSi [+lnԥ?O[Eo,yicOL4.>MoC|),~G~?̏Wl^R"{߸~cc̑w?;jTã]vʟXnq{xj,]%kJ>j)f9/n_FBH1!auBRX #epA -t:ipfBZD[-""T`EB0[F j!-%}a06MMtDQBx{R*jnQ:J y5I$I(VU~n"t'n1Zm!<ϫT*R7WB^\.M)E0oJ$r9pB01FMbFR)] P_!`R F0B)#!BF!`#b0BH1!`R ^|8cY8y&5F"(8S0Fte8 jMp nl#J`#dXZX A `0 N0BHA7}?vVPwʧ_]"t'se}uI$7yH-]:f١DL_0joT|EhyDt=1Q8J;gŨ:{i|#:KOݰ~jsɦV.>yF[eZ@tƲ4l?YGA4ԖEDC)ݚzx^,^WQ>:rhfg}6>Ф'`X.-1>dr/?pz뛩Y6m;wuԱ)̲dYs~M e3sztT !#:=VP[Oq=:#GM\xH#RqjuƠ ?j``Fѯn<1wyGP |=& *. 8wdY;eQ!Ilxi Ԗv9s+EGC/EKOɞ?0 glGN2 n. y¤Iz"+w+/#bjsP]_1:RZA%R^:_U6 Ps|3gnJ$]GBr~hOI(aP*U;ƌ.J$G-+WK~#>rpCY>w28[EE͟{>Ĵ߯76:鍆N% ~i|c9â,IK@`^ZMx@9PJ;XFghf{#G /0#nubaahҲ#_g7;޿<aio'b?\H֙Lsho?sQUP}̾- gF2w. bc63ڦRh`K_c-F D$9G*ymSB:XQ`bpF̽xča@XlM%&ǖJ/<~_Q^/6:tz٘Sjaazc]m:me⢢3i'w?0(b6K(HwӕJHq=DZ>fľ36z#c1:=J`U8?0l, ήl˗No}c; uVz}Tvoq-l6өt)FB{gPhA{`"t^Gp8=Kw9${F9#<#b)kܡum6bp_FA$Ip(]$-I16 ɰ#N'0 LP!]3ZDEJ(62B̓ nA"!x*" l6'6aME y]R*jnQ:J y5I$I(VUV+](0[LVl6B*J݉sv)FPT$\.<B! pLJ7aJt)B~!#b0BH1!`R F0B)#!BF!`#b8˲ya($nÁs 6 #&qDz,q8MjADQlLz^ѴNZ !eYpl6K0oN+'^AMgdFnf>d2q\I5 qVUx)̎3 |*J>6TD1 ZyRj0,^Wq^W^ et: zez :K&h4m0GZ8BVU }h4M/fi8Q}nÜ6#ϺMoVȵ <ϷYyچJj~'[-<@rVWnw V#7Hbo~#0PZ#yV$$z<`R,e_ʢLhUO?˜ &s'&39{?^b̨_'Ywh¤?Uy ό V%}a\(Q=.GUe{~^( KPybͭ:!&3rW&$va})TUb"nM=6kZwvi3K,޺DI/qGNr?O'g$Ey^̲dYs~M e3sztۚ3/|->3kw zrd(i9<|\ݺ-ej.}q'#ߞg=f=? .}=wϯ;%wwd]Ӌ7e3fX^PØ{2 @9,|bІ]2 K11bf/3e]G-}z)xur׮'M< nȸhف-Μ98::FbX@ꓩ:sƜ`RppwR ύN-9gaO +V-5gxuBXicg;ہn>5eQ^~2? {)a, Q=%y'xE8Su֒V~? ?y}냔n~G_,~W¢$}ղSg{ϟrXT+Li۹|)s} 7!YxjC9~J]SQRyG.޹)>rfVt\i?.^4sz{tNuT-Pˑ]/~jt]^Ph10$ןhbʞc_y7xdz5A1fќ0{gR["Tvwx`2,H~<׷CPhՑ=YF1w>T2iP> acgZ65뭑[ٷs(ތ|OrgRiƴQ&)!yO^heɽ"|Ҡzё yr g <=ރq1aJjlΧLj{e H5_8S7qXT'$GWA8|x}:mPBk+iͥ|xHDQi:cDn! e&4Sm]H6:^K@+KIh_mhB:A*Y$)cDK~nnsR ;4%vG"cK6]ݝ<3ԽnvuPK~I3k E4#r8zEE͟{>Ĵ߯76:m[k.LA"TkG8(Q }grj\|} Jpn&u6Kv5fIXn` !~Wi @Lc]߰cS[֭thL)i̴Y_pZ\ mN;Q;?Bm*LQOeYWV¨|8s` ~tџ(Jr*[$qWvq^Ԛ^ zacȈR ^ZNxڨx聾yY{-wz{Hϫ@p@ϔF`a=.-7\{:Hԓ} 1n`F@,-/ ZWlјKM3vJcSb^{BLLZKI 1yf矜p8+ N}xB@o5g-NC+ߊ]@}23cf }Kz b7pM"9K*J*J*&>`Ɣl9g9kbY71%NSFfo}J{'NJSݗWhf?u~ء<,j5̡e6B3qe՛^ jNwҌ΍.Kc۹bν&0>[jmfßڽu5" :n*g >)>'F$JF$~SI<uR޽JeNF~dـW-䢕Syd=䗧29tXVff=>qK*$]df%zI]&.ePK|<앙-~_9MG|~Q']x4 gZy]hQO^*qvV0ήTN^wvֻHV-l6+۲0m:yy\ƆS4~=i40!tnɾyU6ֳ(W:]mAcOH9t[#Ѫ[oR/^/pAX+ֹ3aJZRrA.tC$ɝnRjZUKfvm6mmt\jFy^Rɣ;l/jL} q\rͽjz4p`6#fT*I\.hzw@a8krp8jJb]\A)wӉ]vMI 4X['noBF!`#b0BH1!`R F0B)#!BF!`#b0BH1!`R F0B)#!BF!`#b0BH1!`R F0B)#!BF!`#b0BH1\+X8R Ot"?AEQK԰ ՚ue;S# {,> U>{-]YYt:B˲OM$Q%IJdە.ULl5F%DPiRt 7 IDAT홄Bwhlzf0(jZR<y^Vsx8=q`Zq@N3.(M*y|0QsxI=)a nvkFzX( vq_+vE@Fk;R8 5WkD0y5wʧ_](-q n>wa[g\Xo`N3BX^Io iBvy+.i'0{*y➰@XE z_^ptS/,pml?/O]!WxL>v,04ypO] N}pBx|6q/oԥcC%' z{ZUi@v|)8@k))!W3nuNi]#"T0H,~pWы@)A)lvڃV*؋,lxYCt?ɚ ŗ.J=-)H@%W:D#po؞YZZZ~|5 G-nǁ򊊋36-Ů`A\ GA7  K @}@.Z ^gaȁ/w7@x6!}'E"SƜ^W7=ǍjTqU9kkf{0ϸygw;/X!6 *`&L 94x3  'O+eZ 7,ɄzG)J#oA,zOwVx}Z[flN-]PYe3n_ *[YL;B5vD;ڝ<yP{ )`IțIWP$ XcэPI ?<_dB^KIV g@ AZWN'0,# p!<UNǣ~U_#XEJ(¨ D>i˲$55N i(; E!^qu{J5Jy7fj5= ffFͦh-!`RR agW)Nmat-IwM`Ů {|:Nt:}||8cٗ@$I$ TWWj uYU_'—_0QaaqĝJ u֗h=b0r!<ϫT*y7LQ_\.zC.E"ǼPRxE7 R@0 jJ%jۊ $ Im;8j6B!aH4 k,65h4 xac`EmK#!t'F!`#b0BH1!`R F0B)#!Bh4*] *IENDB`dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_CN/000077500000000000000000000000001473346337000256065ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_CN/calendar.md000077500000000000000000000304461473346337000277130ustar00rootroot00000000000000# 日历|dde-calendar| ## 概述 日历是一款查看日期、管理日程的小工具,支持查看农历、黄历、节气和常见的节日信息等,内置日程提醒功能帮您更好地规划时间。 ![0|main](fig/main.png) ## 使用入门 通过以下方式运行或关闭日历,或者创建日历的快捷方式。 ### 运行日历 1. 单击任务栏上的启动器图标 ![deepin_launcher](../common/deepin_launcher.svg) ,进入启动器界面。 2. 上下滚动鼠标滚轮浏览或通过搜索,找到日历图标 ![draw](../common/dde_calendar.svg),单击运行。 3. 右键单击 ![draw](../common/dde_calendar.svg) ,您可以: - 单击 **发送到桌面**,在桌面创建快捷方式。 - 单击 **发送到任务栏**,将应用程序固定到任务栏。 - 单击 **开机自动启动**,将应用程序添加到开机启动项,在电脑开机时自动运行该应用。 ### 关闭日历 - 在日历界面单击 ![close_icon](../common/close_icon.svg) ,退出日历。 - 在任务栏右键单击 ![draw](../common/dde_calendar.svg) ,选择 **关闭所有**,退出日历。 - 在日历界面单击 ![icon_menu](../common/icon_menu.svg) ,选择 **退出** ,退出日历。 ### 查看快捷键 在日历界面,使用快捷键 **Ctrl + Shift + ?** 打开快捷键预览界面。熟练地使用快捷键,将大大提升您的操作效率。 ![0|view](fig/hotkey.png) ## 操作介绍 日历分为年、月、周、日视图,通过不同的视图方式展示日期属性。 系统默认显示月视图,可以通过鼠标点击切换年、月、周、日视图。 - 仅在中文系统中,日历会显示日期所对应的农历日期、黄历和节日信息。 - 日期以 **1900** 年为起点,在日期切换时,不能查看早于 **1900** 年的日期。 - 在月视图、周视图中,周六、周日的日期显示会区别于周一至周五。 日历视图中的侧边栏展示日历帐户以及小日历视图。 1. 单击 ![side_menu](../common/side_menu.svg)可切换窗口中侧边栏的展示和隐藏。 2. 在日历帐户中勾选相应的日历类型,则该类型下的日程在日历视图中展示;若取消勾选,则在视图中隐藏。 3. 在侧边栏下方的小日历中点选日期,可联动控制右侧大日历视图的日期展示。
视图 说明
显示全年的月份、天数。
显示节日信息、日程安排。
显示这一周每天的日程安排。
显示节日信息、详细的日程安排和黄历。
### 新建日程 1. 通过以下方法之一新建日程。 - 在日历界面,单击菜单栏上的添加按钮 ![plus](../common/add.svg)。 - 在月、周或日视图中,双击日期空白处或单击鼠标右键选择 **新建日程**。 - 在月、周或日视图中,单击鼠标拖拽新建日程。 2. 弹出“新建日程”窗口,选择日历帐户、设置日程类型、内容、时间、提醒等信息。 ![pic](fig/create.png)
参数 说明
日历帐户 默认本地帐户,可选UOS ID等网络账户。
类型 系统默认提供“工作”、“生活”、“其他”三种日程类型,您也可以自定义日程类型。
  1. 在类型下拉列表中,选择 新增日程类型
  2. 类型框呈可编辑状态,输入类型名称,设置颜色。
您也可以通过主菜单中的管理功能新增、编辑或删除日程类型,具体操作步骤请参考“管理”章节。
内容 日程的描述信息。
日程时间 设置全天或非全天、公历或农历日程的日期和时间。
  • 全天
    • 勾选全天:开始时间和结束时间只能设置日期。
    • 取消勾选全天:开始时间和结束时间既能设置日期、也能设置小时和分钟。
  • 时间
    • 公历:开始时间和结束时间仅显示公历日期。
    • 农历:开始时间和结束时间显示公历和农历日期。
提醒 勾选全天,则提醒设置的选项包含:从不、日程发生当天(上午9点)、1天前、 2天前或1周前。
取消勾选全天,则提醒设置的选项包含:从不、日程开始时、15分钟前、30分钟前、1小时前、1天前、 2天前或1周前。
重复 选择公历日程,则重复设置的选项包含:从不、每天、工作日、每周、每月或每年。
选择农历日程,则重复设置的选项包含:从不、每月或每年。
结束重复 只有设置了重复功能,结束重复 才会出现。结束重复的选项包含:从不、于n次后或于日期。
3. 单击 **保存**,创建日程。日程创建完成后,会以标签形式呈现在日历视图中。 ### 编辑日程 1. 在月、周或日视图中,双击或右键单击日程标签。 2. 选择 **编辑**。 3. 弹出“编辑日程”窗口,设置编辑日程的相关属性,单击 **保存**。 4. 如果设置了全天或重复,则弹出提示框,确认提示信息后,完成日程编辑。 > ![notes](../common/notes.svg) 说明:已创建的日程可以通过拖拽日程标签来修改日程的开始时间和结束时间。 编辑日程时,系统会根据所更改内容的不同显示不同的提示信息。提示信息中按钮说明如下表。
按钮 说明
全部日程 修改所有与此相关的重复日程。
仅此日程 只修改当前日程。
所有将来日程 修改选中日期及以后日期的日程,选中的日期之前的日程仍然保留。
全部更改 修改所有重复日程。
### 设置全天或多天日程 在创建或编辑日程时,设置 **开始时间**、**结束时间**,可以设置全天或多天持续的日程。 ### 设置重复日程 1. 在创建或编辑日程时,在 **重复** 的下拉列表中选择重复提醒日程的周期,例如,每月。 2. 在 **结束重复** 的下拉列表中设置结束重复的次数或停止日期。 ![pic](fig/repeat.png) ### 搜索日程 1. 在日历界面顶部搜索框中,单击 ![search](../common/search.svg),输入关键字。 2. 按下键盘上的 **Enter** 键进行搜索。 3. 在搜索框中单击 ![0|close](../common/close_icon.svg) 或删除输入的信息,清除当前输入的关键字或取消搜索。 ### 查看日程 在月、周或日视图中,双击日程标签,弹出“我的日程”窗口,此时既可以查看日程,也可以 [编辑日程](#编辑日程) 或 [删除日程](#删除日程)。 ### 查看日程提醒详情 当系统发出通知后,单击通知提示框,查看日程详情。 日程提醒时,提示信息按钮说明如下表。
按钮 说明
稍后提醒 提醒设置为当天,首次提醒后,单击 稍后提醒,10分钟后再次提醒,此后每次单击“稍后提醒”增加5分钟的时间间隔。
您也可以在"稍后提醒"下拉列表中,选择15分钟后、1小时后、4小时后或明天。
明天提醒 当提醒设置为1天前或2天前时,出现该按钮。
提前1天提醒 当提醒设置为1周前时,出现该按钮。
关闭 关闭提示信息。
### 删除日程 1. 在月、周或日视图中,双击或右键单击日程标签。 2. 选择 **删除**。 3. 弹出“您正在删除日程”提示框,单击 **删除**,删除该日程。 删除日程时,重复与非重复日程提示信息中的按钮说明如下表。
按钮 说明
删除日程 删除非重复日程。
全部删除 删除所有重复日程。
仅删除此日程 针对重复日程,仅删除当前所选的日程。
删除所有将来日程 针对重复日程,删除当前选中日期及以后日期的日程,选中的日期之前的日程仍然保留。
## 主菜单 在主菜单中,您可以打开管理设置、查看隐私政策、切换窗口主题、查看帮助手册、了解日历的更多信息。 ### 管理 单击 ![icon_menu](../common/icon_menu.svg) > **管理**,进入日历管理界面,您可以管理日历帐户的日程类型、登录UOS ID将日程数据和日历配置同步至云端,同时也可以对通用配置进行设置。 ![type](fig/type.png) #### 日历云同步 日历支持通过UOS ID将日程数据及设置同步至云端。 > ![notes](../common/notes.svg) 说明:该功能暂不对老版本UOS系统和deepin系统开放。 **登录和登出UOS ID** 1. 在帐户设置界面,点击 **登录** 按钮。 2. 弹出UOS ID登录弹窗,在弹窗中通过账号密码、手机验证码或微信扫码等方式完成UOS ID登录。 3. 登录后显示账户名、头像和相关同步设置,点击 **退出登录** 按钮可将UOS ID账号登出。 **日历同步设置** 1. UOS ID登录状态下,点击 **日程** 、 **通用设置** 后的复选框,设置是否同步至云端。 2. 点击 **同步频率** 后的下拉框,可选择系统自动同步的频率,您也可以选中 **手动同步** ,关闭自动同步模式。 3. 点击 **立即同步** 按钮,立即和云端数据进行同步。 > ![notes](../common/notes.svg) 说明:需在控制中心开启 **UOS Cloud同步**,才能使用云同步功能。 #### 管理日程类型 **新增日程类型** 1. 在日历管理界面,单击添加按钮 ![icon](../common/add1.svg)。 2. 弹出“新增日程类型”窗口,输入类型名称,设置颜色。 3. 单击 **保存**。 **编辑日程类型** 1. 在日历管理界面,选择某一个自定义类型。 2. 单击编辑按钮 ![icon](../common/edit.svg)。 3. 弹出“编辑日程类型”窗口,输入类型名称,设置颜色。 4. 单击 **保存**。 **删除日程类型** 1. 在帐户设置界面,选择某一个自定义类型。 2. 单击删除按钮 ![icon](../common/delete.svg),删除该日程类型。 #### 通用设置 **一周首日** 点击 **每星期开始于** 后的下拉框,可选中 **周日** 或 **周一** 设置为每周的第一天。 **时间格式** 点击 **时间** 后的下拉框,选中 **24小时制** 或 **12小时制** ,则日历中的时间格式将按选中项进行展示。 ### 主题 窗口主题包含浅色主题、深色主题和系统主题。 1. 在日历界面,单击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **主题**,选择一个主题颜色。 ### 帮助 查看帮助手册,进一步了解和使用日历。 1. 在日历界面,单击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **帮助**。 3. 查看日历的帮助手册。 ### 关于 1. 在日历界面,单击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **关于**。 3. 查看日历的版本和介绍。 ### 退出 1. 在日历界面,单击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **退出**。 dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_CN/fig/000077500000000000000000000000001473346337000263535ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_CN/fig/create.png000077500000000000000000000762631473346337000303450ustar00rootroot00000000000000PNG  IHDR?Eo pHYs+ IDATxw|u?$@(!@(M=E,xS}=EA JG@z ZBH l}%g>%yg>3CB!.f GT\!\!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3.i~kv2Gj)@ {ԗ3^;nݹ7XZUZ^XXqzrQD_xQG;k%,zzED]Q'qw KWuzsk630$`xdXf6>?@rYcRKw]˙Mۗ\KT2)L&k_Zv#uOQsP`_1AYrK TP)f VQ Xr@͉?o+' ^O~N}ѲK?sM6;R4- ATuCBq>Y~57@U+.gFS>>Y塚.2l |޲v֣2hƚ-}s4bOx6[,Thugj-ghdrsj'T͆pwtp0QQ]ZRda9v _YҪ;0T]TRe`>QOQK{}6+k85c6JZhn_F]bK/9Pʯ\3/nX0GhS|sk~?S}̤a,;xx<;Py7 cYi r)_?f"Fc +#u !z8-%V'OJ nɔlXRZa /5.nv:=EI7Æ<ë6Y65H_M7-};6ܛD1O be@5A8gJxo șX5ϓ˽1t6I̭I`yU' Ph2BGS'&)έ|@|l'H # BK4nX ԩw|?lv:?l=iݎ_*k>νQ0=)s++x"f.z%^ѽGuc c<= PvC&Dz mYGO﯍$bxiq܌˥, l}j5<;n s׹mM%N^l C|Iӌ#> #uOdЌ;.1\LG.lK"k̂'4.S>GUr#3?\]SgF_6 zvB1hl BKd^ CGY3K~/'AP@ֶ>;QI0ZR*x=>!g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8Bs݀x<>ϲ,~"?A~RE4EQn#nHR x<'I g 4M$˲ X,wՌe eYH$ /B=$H$,* 쮊R(Lɋd2R[*>OD"!!.b$|7tb_pA$Ax +\[Uxp|@1P#! FF0' !-k#K3+ǹcZw][}Ba"tߩٲXjz/>*ilͶ0/ͽkCG0U[VZ0TZ26$!zJxr"B٘U`?EPFqwO߿?Xw^QgXQ;K6~f0',9+wҭjy?vyJbZݘMhj䱓p8꘏?.~ǥdۮ[|=_pgrkgzm3~jDjݤ Ypu{lM xIdf<;?c(-' n(!U*`4$ ~ZYf/>9ѥu X s/7gק4Eý„}((@7U4Mv[zfފ C}u\sQh<R٨rk' 'l=M{ܚU~LUL4xjׇfbjpv%e; h<%] ?dFmN,B.-/!<,C3@k[lCQSsؿzɪ'g<eZέv5MGbVM0{\[1|dx|t:iH PWY Aa)ʊcPC R jZlׁxԜGGz^ڥ+}`~iq}󱯎ж ?.ؕisv@2yD  >"{!ܧijgkb׹c_hz?_W̦{/A-k+,T9H;Ex /Բj{t.XGf3C=~. FɆ=>1zU۽ߙ*oڪ dVU@[˫JMSj-F~kz#>Z ~!֥32'Bw_|kdvp`/qXClHϸӸVk -c4{F},$ 6f\.lUd^m$ k9 Fj kjʳ󳍞c nd{fʲ ()Rͯh!+~Z@]ej_fg0\Ikg(Wh/Hô2%F΂_ѣCkm+c=u =8֫E%^"xb]bMl_S'[n;a̵?MUOb(y,p2B /M2`?Ҫ]7'0ti(ћMc׳Щ>{<^O߳}zϩڙp:TX'P2kƓya` xLan30ևY +bN'XY41#V<#LmϿpйGKJKK9:FqiI +?b~(aK쐀DV%{Ox5\ BC@Xk9!K*Jp@ OxI>-~35l~h{_BW]l^ _y竓QfEnkT)2'cS™Պg^?Ϟ~<RN&t>U|_{0.wTBm>x?_мrc~bʒRſ"~hl yИ+GO^7BsOk"x6o @4pTO6B yeY^Ѽ1\2~O9uMB+mz(iw)#nHR x<'ެN$I,0bqW͘]P(\w I@$ e jvWETJQL&Ed2EQR-bt'B"pbݯ uf B2WNuWp B}1P#! F]mtE-B>"[<1DrO3Y6,[ޕ7* (?aiOniO(gf*jH)'S $lE- 0gs ҋr*{_;gqn(Q`J?֪1KEԗ<+gQS_Y>-ymBN! xBYLn;\[_}fO=2DkN;zx=6ۭ@ `g|p(`YT٩CE3'h({/"QyN8QtN1^tEZ p A*XQa[?aJ$(כK^ܓ-}`!Ԟ9C±ݎ`kDW`"(|giy؝&WŽմ(Potǥ|Mӟݖb`ߎF0}+__^(ɀ)`|X <c?}+x`sޮkMjQ2bdMmM|C˲;f1S_~Dod?l5tD}Fϊ ?X'75?roH7nn|>1CB!$ O7 #++>?@PWoUBv;t /(6&"q.Pԫ?-om~Aӌ+{f@ujo9% jCA>e1#Ǥ}sԒD^nT:zW,_-C n`S/NfYzӊ-#|E%E?/:z‡OGObY`Y3"XezWlxoK'(8P^z>0ݎ`u+c_3u)T8Rz9V1ׂĚ.lڗ1eq\#@raSQ(icZN,;R(i7hŗӣ#ݦ2$:ƍ͑-=ypLBBN'kAթ۫^UZZ*11>ALz+w@مeYSř/SlR|e^Pd}0Fzi|_ĦS7zbiz_]Յ67~㩇@:t|*o9AGƮ=Z0>A be)1:4 awᘘkٺ ^@n`e:e x>*f0gϝk#>]xB+OP IDATlY%Vdh:B"// zl*BX,6;5(J|D0B(`/ ĝ { NdC=P(p< Yt%[1 0nv#:FQ[$f' #i1{ Ph4riluB0 øX5"-5cwH$2APNjop8Neݕ|wB!0f>މ  H֋|H  nNL F0Bq#!8BF!`#g0B3!` ^w7xITTeUUV 72PPpy_ѵ0p(%cA^ U@|^)XJmO"#`a$~jAZn{ Bȍ0Bkč% fp/Z`|#'x`t(9n_-TyMu"JOku $8hLTiO&|FM/7gP~o!}3Y2ί59;w6iMYЩ)L00L'¢YR !GoBJRU D A`.>u&hLtQ|asP!ˍPzKZnTŇv`mEZi/Fq۫K[,,U֦+[]}C7`\(Զ0~MQ?]YT4v` Qvr]_O?~+@ PuxU2^nO=RrtT.\1k.R_x@fAa~"{Ϛ<"@j[l`7[ gO7R"mN[# 8mץ/i JAr:[ٹ亰JIW%(iXrة4*1i=B[K?R4IUR :n0<?;r1nBqSGyn*jYi5w-}%>RZ{vˡLyfis<\}{<9~$/ q;nnݽ $^S-Yo:|K AVXVbibtV4jm4-qC#Cj.SS^"y[JYs:QWkD)d=i%&8~k'<(F(=aΪ^|8ܺ}l }/)2[Ea/R'_(h3PrA gM.U: 7 ѢR84ΏRԒtAc?On`{Y¡SkPu{qwB.3yͯ)y-IPK ?S pgszk-ˆ&xJYH&FNmgdS#\'>%̷N = (וa0/ \JBL @p_; w=n 2ٵlݷgŔ/ʵP{[a1OITQ=9x"5PE>m< b>)*x1BwXa@9 r8vn_^'4D֪[9ѤEY)H=ٕ+ܸ!qOR)+&>u<ѕ;cKJKK9:FёBqc+O kP$&4̗{j/zl^Am4VGP_rϮr$To|պ|Pi}!{|myR#3̈́~bOmvH\zƨl5kZ]B"//;U04EO{78OO!ZUUUDžnCT(G!t0<B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!bY& zFpg1 uBKc#N'M@.5`wf #4)jd(f%]`6#Nl6w1x,fֺ*[jyf&B!IAp"=Dz,0n4j1MbpP߆!` F0Bq#!8BF!`#g0B3!` F0Bq#!8|oUϜ語 z#Sc4gQm#@/uHxi".ڈ0&?ߑ#W2=I};&G=BP_fE{?#!d0au/Lht3eSW`7/ ^Sd]Ͳ`n}#tbro&hJ, 9P[f+I[/.=O}v0:]exdhIټy_^o uy.uDj_#Yyr߿VD4䊵=\Mz&o @]DPVݦ<_'㫺U2L@W[[{뗞a@Rv]䁁[7R%^]p]G0,/9SaUJf5֕C e]_k,vtp/Jew;Zu F`btݴ֤@Q: F&|+oTxD.nO'.#s)*V4:x'J):UK?qB}DuR:q R괞z@lHM&Rܤ?ܧO",VyDVL3WY v:>;NKUYcLU5RZҺ×v8䬁W7m?x=!>S|k=›AUo)G!nM\v(zz/&oQ>;?~ACw>%uOKzDNnJJ7Ӫ[6Pn礑ޯԔOm(*iӮM7s=>ƇKNl8Ȃd͎颤SOeW:|+9XI} `B/L`xľ PkJ'oVɘmfǦ4O?zʳ1mDny5{IViiiA׍ &,lhh$k/B`:;A!DTv#Y[Ygk G)lZVs E?>s-ҭKg .޶ug|>s@rw\leRi`!UhMz畍kץ޹߅+f Wtn]݃F vќcNM=/-~:rɁ/B=\W;[MnPwq{'yc '>s:~5չ6Tiz]k3nUu}Ɇ FK9g/xS o*!k8jJkJ+P沢Rs"BtgWx5C>Ew`A 3r+Rw#<3oM0g{5`1!N-)yItKz5xsӺcagG `*Rw쾬|bFM~|;`'"x a{ ~jD凉|3% GtƎ Nۣ^$Y"\^ p\/B== Or^>mv <0VQ>~z0y ovw S]#\/MI;K,!2>br[A$hP]e)5t8VV%r_β,wXNp{rQ!}-ڲU+Z>xQ`C KlFN*mF<\ݩJMٿ~x~|pVdi϶tsjYÉ˺2yᰀDzo" غ䝋m}2>.aoHj?aK{m9tRX'P2kƓya` xLan306&K;y6_mi& <^|\d⌱](0^U|_ޘ.B}wyyrEU*%~~Lޮ2!ֲ :H?WdkTY*[ߚ+@J / cUR^]XTu:Yׂ5?)j2v|4: C=~y3{"tOݣ;++ !(}|bן{Tv;jSQs'eHjQ:{:mVb%5f DzEUsnfAaMWC^Q{?/B7l)x|~yD!7ݬ[B >;!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3x2y<gY\?!OAPE4EQ&J xdW 04M$ɲ,0-D@BH$  $I H$XU(Z?=0j"J)dnI޶xOD"$I!2jDIAt$ IDAT[g:MpxP=>£`P&Bu0CSGpݵRJfs輳'g\Iڟ^8i*~F"P ݱp362ᣛ9 H7:yyZYmm e\4~TJ c.@u{N;D3>zn !G,fN焏=>w]VϜ>F@H|\e*FlZ6=-tYmBI}V__2s i&-(}s|r)uhnaױgRoV #DŽy%Ϝn !&Pgd׉Cc=6N>v9V#6!ap(ß0|Tۏ CoNU "qdB~zh@$C0 PiU^ b )T+Ξ(ЍOP-_jAbnXk LI0|B-UNyY=F[a5E^/W7ef9«siI;ԄΝ6<~QHjnض;yԨx~Gc3'TZꃹi?dH [+ .CghOL jgr8"6+UސE޾0Ũβ[/U zld-_e!pK/$V;To aG6>}ͪ?vŬ3^q-{ )l?t0ru7‹4gw8 ,(, *oyz,0I")y^IT@?륱Q?dPv] \}Όd}ŖtL eB6kIF - : RF?ԘЅ)1׬*TXP6], e;3VW,W +^f?-;?#~"'Z9p}㩇{T{FNҬEwBl [e;PD.rzիx z](PF@]hiKi4iӤtP~+999'ys@'^|~L8r@VwOqkڬon^>2EKAW??Cˢ=ÖU5r˿|AOD 0,FeVIO<|\MC1؞~Y~nk]n꡾6 Iə"C$VL9wS t4PN2E3>^~ŗS\2ae`cn^:6T/ϐD,o j1!1\߹=֥I>8tzTtѼw_߿2JN˛/Jન]8,?`ޠHd-cyD[~03eӒP%|ݭiȉo yI< [!K$]xǫŘ+w%u*B8`K-9RRR3wRzxu3l~ s ŖJ;sU1%w(WAA^>89[Wn%unt/,,75vFs ]R'٬+ ݦSn)wv<ަfmnvBz.RoC~fW%9"אػntH@{z{ .1 U\n%:γ41@ކk gHp u#Rn'{DL٦IWƁRj7CC+l+d,hlwn:O{'N+?k|(\Kԗ،`45Tሠi.V}j[B.¹ \9s0`/_y=E3eOL4?s|)7tBmE*Wuo;'YࢹuMY@.݄W[T2 C;lYs>`u;۪BY"U xbZ'iɃpyV3zv_aˮ}@9í5E:UĖ>ݫn״==G LR{ڽt}MVf7]V7x֪!l58cmsd<`, zeCF0BHjMTE8β =l F0FTL&J\-<ϛAh4R)^0F*jZ $ 0A@h4L&A0F0B1 h9{ $IYF$I2 59BF!`#h0BH4!$` F0B#!DBF!`#hej@4EQ4Mh0=A,qa#T\.'(_ ViRu:]ʉ JeOaDbHH$RT"RNxF\.gYVP4ѐE) eryS8Ui ''ސL&3B*GU'cͼi:a- yK #3`4g7φ*qPnws1)uZf5Ə_\R2>t- YWYdyZv4}WB>' _}QI Lױ )-CMsE$JW'WPQQ\frfI]3,ߖʤ1>=Bf`/7 tW)ʯWr &,]}PmMk.oz&/w(f幌iO>\ںjR#fmi_B1d}K<@#Q G&^K*CURWy=y 2:' jn?w#n,4"j쐎>R4%dK"GQb*8w1_(~fufIE[X~0BH۳ z!r)y=a"$FgPtin=n%Ճy B\,܉K/EH*@\7nŊ &_[x屳;\tinF jkzhz4c@d'o*#΍~f{ۯ+G/wf%5F[S0fD8RprߟǽxBQ>V7Xycqiler_Ds-Ğ oʶyu3TEm r>;/R;^q6?-dv_6ƿ:{}MMT@̤b}g~.DePT!P9}mjܬ\`gi}#^5!꽀1Sbn^֍ ״GZ%ܼȆ<۩z zN2%3?^U,)\7|rrz56#Y~}WpbܪhKK/lڛ 8s?2LZSs5+!Tpt XZZF}g4^1CmJҮMdy˒Snea7ܿ)bR[% . N`4:jtG 0}ueR3VѪ  )rŪ/[4C.=|o_+='ИzQ=0 %S_ma#jv@.>aOЯhpF쓝p?7H\h4* OBi(1sUop;/\CabBvMV=צq0)9Sdu)n N=4'tZˍ)o.`0Bjl9ն2vGs7o;S<՞o.:K%~1#fpպүO']<6D4]̑R@ b=**8y97(&Yˮػ0p+c[QlZ49m!/?gzxa+DcɝxzX=F< vtR8KOV-Ux+As|]=Jsb[/3dKK-Fy9@EH Y;·0=ʫNh~7[hۆ.'6_\;ѓ& ڄ^snU-Ɣ+ޡ\yl&j_K>ݦF_XX.njf6?,jl]/);%\Yiܳn oQ>ߦ毰4XdmnvܔWhQz!"3.)єmu{S=LJ@F #8#lh'\p  _r}-Mq J6];ؽOl>FW`r;#b6M2RM:]a3_N İ _H'䤕 Qw gT4\U\TO9}̾륮]:9_}Pw]8W.=^Afyͭk&0赥rU&ܿZ Van ɻ׈ɾm&_hMSQCn<<6Ax 5(2Cւoyk a0]8h  q'v:O|_!29_"H&-՚l-IDI e"Tl= #& udٵCﶙ<76"xgKqSc`}CR&~"qx]\e=UQ$ǡI.C诮9B+eW?_bqFSs1z4ڻۋzxU<);úx W= ndگBH9^i6&K.ȍ|m+&!n[a] \ ]&/_+{۱@iŔrrWǰI\M٪' XilJ E(/.s÷[ rmjuF0 ?[f]`(N/*ZJO3BmCLd3!駗~WzK<{J-OwZw.v/;z 9yipnU÷"q<}ȓˇxݽ<+\2q[}S-F"Gg9oVfP}ynz8z 4wNgo߈ч޾eN{kI7˫e7|q(<VO*N Z}IOײų>^o6kw7$ȷ-Dοv#I7rtdv&^|zCw!S ƫISnrbәĀ\>w?.K90{8(gpg3C|Y(uSCp/|RrPAK_ WǛWBWiKJ|;B'DŽ1oۖPrv@Rf$T4wkLn^1@]ٰIz)!6zޘh>9*.;~EyjΜ{$x}<ˇI|B|-)J-^ck^.;Ý+PU@, sCx7W.* ŕI( (:f?DrȠnv}TT+{׏wU>Zpɻ/Q^\в jM31w.? 73:3.) -!nF! yEɷ]qc5%{]ۗ?mr]*돬 ĝ\@ʮO|]ҵ˅qR)} S$I5ȯ)jtȐ"|Ld2-N.Z/:x&2ņO <4_FqX5 bk q P,0eY<I׳,+v)Cn$Z/Va#8r}`[pC1 hJd8$vCyys F*ֿj0L*jZ $ 0;د6#h4L&A0F`yѨfwAI4Mo&d #$0L!P !DBF!`#h0BH4!$` F0B#!DB ME4m @1C˲HFAPeG$IRu:%BT*yAa$ /ID*J$AT*%Bar9˲ = ˲r\ 94M$vAP&c]$><<6Ax 5(2Cւoyk a0]8h  q':'d2Yd0 zV+-)+((*>;U5?CzbPkg.H h M&ܭsգB(*5޻":kL)Բ]1&|eI;5>9yI]E\eMYN#Gv^дH G0)y m\Mkj;~hg;I< G6yIιsW~k'vŻkzBFG?j>uS6=prPM;/ǀPi() %sGӁRVUjAJ9i`S|ݲ}ZA47|c\:Euht|(}l[]9AQ$~MR.oj\SKT>]k\t9k8NW򩡬\\f];?xҔ^-M^AǮL^R/VoKHٹX%DL˜+7ʳz_-;,`hmtzזYK6^".Vi 9R ..,Zf/MڰD݈ #{6'r<^omG+>fLc/vNų0Q+?g`n Q~ $[seX] 򫟽}5t~FLz+^k6i%=9,4֓0}_y[*w(dݿ|+/?78µe5jAo.ʸϿHa~۩ n#vۧ궵P1oւN|Tv0 ӗ0Uk~<@I޽;%ۭK/~{ʿקu|mÌ mÖ"kYZ7^y~;[тسp鯭z.!*xnbO;,~`$WV*Wx\ܺ =ݲRvm?}ɳmo\ڢgΌpnٽZ說Xņ{++vP`ZֵKZ\q$0,^OMjIW3􈿯>szi{wfV|{oG ۔k{{W2s[ްg7# ]x)a#8Ug+$ZU>jЪ4tByƥun٦ߚ$p㺷 ϕ p. 8sp{Z;z>4Se.}j:rwb趘-Mp'DQ5="8?n{W= ݀%9w dzk5!1r/Opbܰ郺/~fW%9"ZFo-!e3{/P)W ^@{Ỏ!N[uvk%Fv2V>a(A=aeI~yv>'O(MnJf /M(kdQ{lƱm5ľ4+sQ%'|] Bjls_gvA%MN1qdn儲싧Εyy** 1}WƯ/tF=bP5è)3#-d(Ϝ@q!THMM-))yܩ1i{}].ķEYIəi9Ź:Y ; RBU(0r~w fʓ]uQjDV7:qB o*dx[d/:N׋] $&Z|H5-a x ! ~r]Z`0$YȄ5˲k q lj]Բ၄,0eY<I׳lPk$IjZ_ Gq#bF(JqYIr!<A4T G JZ-AapWTb4M& #Q0 hZ=  Iḯa?"$ BH4!$` F0B#!DBF!`#h0BH4!$` F0B#!DBF!`#h0BH4!$` F0B#!DBF!`#h0BH4!$` F0BnU4EQ4M 濨"eYXD5K)T ӑxVNx1!J}mHMM-))zr9AE$V[59y^u:%aonJE@R@ۺ << K%jug*JT0D"E$IJ$T*HAPTvYmI+1[v@"J -ٙ"{r'b;o,* =(R(ZV.;H]>!U F]mEYv_#i d2}W32d24-zpJlgf/iG*5>@fva;G0A$I'P4vS $ @bՅ]iEvni[~ ICC/y1On3':J )TZ188sC9:s_>lF(j1hfUzbVEs>[-D6$$^Z#Ahu&" ~<vt;χL |rv{h[R)Oؑӧ=Sn^ gwrSo Pv[k+&Gb*Rx/܀|zeAWYZ;f)#F͛Y>I4:>ˣs}뙤Q>)J]5?_6yg녡ox;ug:c6v9FnЛUad78T4{t^j"tzf~8rqt٥~J0'8}=dB{7ZV> 4{=zhlI Awr@igӔ`CÑ Vw)YBW:z﷾S+oǺZf+5!`D}g0hX: O×J55,!AK7WDL|qv1e:{6 A`ņUVVwjzd #jkS%B`(-ͫP+{Z"O?!iP4 -_׼S~ JRu_ w&`C?yP{4[Xc Fua ­눑Ɗlwoxm,.z@k_w;( ho8(Wpfx2Оy4Е ~fz>35\S{Y*ꚗ'mB@/5к!OVw@Fŵ&p'X4eU!9Ⱦ ?ǝ7bmVҊG`Ût|5Ƿ5Atp eL?Ocڎp~j/6b-59 ]+Q| > ɵu(K+wg\#`-j?f0)ԁIsv PF{** NlRiGw3ُfbooΝ@-REo4~v Ӑ ˞W^2"2jk 0$4y5뿹NھOvi4hw6l p6.Ԧ2\zݜ4 UxzT5Dq֚sa'Y`ao ռU+|#LcC! ^<Ϝ" <>#>?6z7!3WO(,4R9'%sh5l  7 m- q!O@ a!s Rx8GO0OGgOgY]ȏ!ĆHXAؒpi3Yf,8ju 9 R @~1@ 3FW}Bg/X .?[V vHMM-))d2\n{{<h( CN7.URUuBQ?B`,DJ=4ZmZ0rCFP ӚGy^"H)<xĢ >?䣅'^NMp;9/'*v $)5WCaY`0] ^zLwA^q a :X۬lKuxH +IDATxi\W73 D% @Y_ŵZRXik)bݪhbՊK Xw]P(. (B Ȫ Zk5}E+:93s3s ~ILϞ=CBB&Mt!_u5))f ;1k,kkk( 3fn f777===Oxgggu'+W4ͼ˗ޅ %K|癙Qq+Wynǟذa՝țԱFPϜ9ciiillm۶SN33SN)N:{;wfwWW׶ٳgjmߒ*ɺwﮧ8'i^qާ؞Bsuuu ì]ݻjIMӹr"''bllLQT|||rr2!ޞؿ?[ %K/W$>}{G شiϏR{n QF%%%͙3';;>X={yyy=\nttP( jmm]v͛7m4vئ&jժUVBjkkϞ=M&4445*==];jkkٓ>Ç߿_])=Zz EQl}:}t}}?8,,,<<\}2BH׮] ^0 L"xxxBBBB\\\O0 EQ D\.C"oo 77e˖]|~233ʊ7o@ 7o^[[yѥK!7o3gNPPᓎcUcϟٳj̘1>>>ZZZG ݻw'0 n:{{֭[Bݻ>>>5x~J+WTL]g ---wmhh 444.,,,..P jkk[XXyީ70r!F?z&&&zzzBPOOȈ[YYikkˊ677'$$ܼyS"EDDlٲ%..Nݺ#Gt֭k׮H~ٳv:::O cO! ϟ677Wq^E׭[ץK5k֔۷sfffWYYYZZZ}}}qq1!aj:MMMg :-gee~hjjΞ={n(̙3ٛ7oV.<Ál/J2l͚5[l0aΝ;-ZDtEEE>}|||D"Qw2 ӵkWEPSS8{lZZڊ+M6bĈ ٳwުkfΜ9dȐ><88qƍgUi:66VWWwܹ477=͟??//O-`Seff֥Kƅ EEE뗟Ozvڴ 677GEEkKt211qԩVʲپ}Mvv~TUUBj Mӛ6mbOBL&g=''gݹsG-4Ms%Kxzz۷NrJKKK@@ 577- nhh qƂ d2덍.][fee*:DFF*"#""bcc͛gmm҆0-JII={vrrurrrƌ`珦$=== ޾GZZZ=zcOԋa@BHlllQQkkk|ǏNzʕcǎ%&&Z[[+FP:Ugohh[n=ws~f͚imme#j?oooӳg444X[[S|G=_gG>s挵E 驭moo?lDrV]GGg 11QGGwݺux H͛nk/wL6cƌ&MIIIIIIo0FQaw%CQK _ H$իWO4IizŊK,Qʊ3obbUΝ#_rb@ ߿??X:V˗>|Xy|r|ʔ)v"[144NKKkiiԤiE-MWGQܹs̙{L2%??_$}aaa/۷/!$((rܸq;FFFVxb~~Opx<+uԉa?ڭAff& ~zddddddLLLJJGxx;555ǎ[TTTRR6a3?Z 455'r:33sɒ%l_ձzvBHKK {s΀_UFQT߾}cbbneef}}a:u$sv(ruux:u222իWeeeEE[YlҥK۝noݺu֭Ͽ%11111Q񲶶OVy{x}XXXDoF.'%% 2dҥ EQΝ;Z[[͵^ Jᓂ~ÇBRRRGc_HCCĄKQw}7tбc~GW\1cF[[ە+WnܸAO>}'?mܸq۶mfffqqqN&HOOO__bjjDillSap===/SuÝ?'&&]~ر/4?b __ߚO;Dĉmlmm?Z%Rhkk7 Bqrwwq㆟F||wW_}T3Ar#ݻWXXXXXXPP0q޽{uiԩ"ڛ/r۷oOJJr/YmprrڳgEBB'Op'OX]]4zhKKKBĉ={o߾78+tH,D" 333Ǐ<O,o޴iرc_p87n78x>m[[[HKhlll>Ch>󛛛T\.7<<4$$d~i||<144d/2^Ŕ)S6nܨ<ؿ}}. vɓֈxONOOonnYx;F=k,]a8Xӧeee>LMM?~|uu'|>;oܹ*^ݻ7;;ի??BQP(TYo\mmɓ'?.َ\./N8֩S'a؞Me [YYB$Ɩ 9r$$$$##m6Ŋ<O$b>/b6!ɓ%%%۷oW6Ԏᄅ3fǏ U> ]~/;vܹsGٳB,J(wrr}y5z7[Q'O>{GgddlڴGEEk2 SZZo)Wy׳eyvvݻ-,,F4gΜ({7R[[{)]]]ټysll"^[WWW(BiiiQY/|Itnn\.`S666(*>>>99booFZXX߿_q>˞,^ɓE1+Wܰa۷![lQm͚5ɓ's-**6lgϞ=q֪*UaÆ qƵ 0ٳg _:Nwwgpss[l˗'33y yL2%&&=~z߾}sν6G]ty9s _-XSSS^^-[EquuMJJ.**Rrnnnw---UyYY!k׮l/0 L"xxxBBBB\\\O#&OɓSN:uѣGo!@KKk޼y۲e͛rݻpB6Ca:DQ˭wrrjkkcUb$44IMMJ1 2sLŷ|@KtjP(322VVVڦnJp8 >>>7oޔH$EEE[l{Çegg80 [n]677#G)BD"ϟ?gww+B<<<Ο?|jzE9sfƌE-Ydw׿~>}F6RKKKWWw׮]ǎ;v~3 ʞ8 @4!a׾J$%$$ڵ(/䔚ܹsVVV666b8555::zgΜ۷ƍ\0Lrr#-Z(!dlV&=?ܡt3g2dÇvttܸqٳտh՝;w@ 055ew屑gOo߮=z${=m۶H׈#Tߡ(33.]466.\0---**]|@ hWݻڵk.\ƕE"ѝ;wǏgϞF5JWWѣzJNN9rdrr2;jdd$JUydk֬ݲe vܹh"+**#ڽa]*jjj؟) }!{Ղ;V \vmƌw-ŋd &|7o޼u `gg'..n̙nnnݺu۴i2K g.]jll4hPG# ,Z(%%e֭3fLvv K${{=zjiiP/A% ~xԩW\9vXQQQbbz%%%"߿qq/ڵkjLBBǴi455 |//ꦦ&Ufxƍ d/](+-- TJ8) 8p$>z(,,L]݇\._|G~8EQ}),,(Ḻzyy͛7/66rի555<(++SWc#Ν;,,,SRR\]]:ҿXܽ{={ 5Xuv/f^RYfF"^zҤIфWXd #BpĈUUU555QKKKyy;wt+2+++a>|obb<tLkkp\X,niZ;;;=z„ 6mߌ JJJذrPg.;m4Lvԩ~IpW$c9׮]WTe2ٌ3rss===/>}&`0 g``@QP(xfffbaflC__ҥKyݤ$FA>3>zoбzvN:dƒ@ raaaׯ_III9((\t͜9>ڰa[_۹sΝ; _QQhjj;t„ sk)/ Tryuuuff&{SOgΜ9r[8… g͚%J߯*++CBBدcҤITM->}e0޽{?SEBQڵkO8q}v\.(J5I ϟg۴;GR/ɾ3d:P5񴴴ѡi=kllܱcѵ~;w:ujCC?x **O*TUUmٲ隚DOO۷oGDD:m%A>}wn:\ԹsKzzzzyyZZZ/ d⯥e\\ܐ!CBCC܆ rÇB3nݺEiox;wJׯ+999%%%sgXb}ܭB>|ƍe˖ddd;z "{K322za 2ggoW155mjjbqqqiajjjӯ_?ccc__[n9999;;:::jhhl۶m֭w裏\nttE(z B(Zn޽{Ǎ'JE4z<6VWWpa8888p`͚5 ƍӧO.]zw;*:V߿zw}gooO?UUU^5kVZZZYY\.gF&͚5EDD߼yS.ϝ; ih޽qqqЇ~\fgϞussk7>>ܽ{%~%%%nݺ5iҤM6u҅(Tٳcǎ"ߋAerjg TY@y)vQB鯿:lذK[[;&&fĉo?AwLz/ݺu]tDٳg544D"jPCY'Odץ166VcX,wvvVw"χԩn}.~e?0==]SSwK啓Rc=mv%  y!v;3g0 SWWG]60k֬az\nxxxiiihhT*%JRchhꏴ2e̙3~EE !k׮ (n9;ŋwխ[ŋ_|ݝBӴD"ͽyfyyar6E;;}:!>}2,,,;;{̘1ܵk9bLѷo_vYvK.QO)&&-%%rĈ}w !DycKK˂ ZZZ9AЈܶmb=h'bbX[[ŋݻw'Ν;n#TUUթS'CCCOOφB̓'OƌSXXHr2L.^|d2xh6,--M5iCtnn\.`W$766(*>>>99booFZXX߿_ ŋ;wã}޽_>D4MW ӦMcnݺ^ (J[[M&Bk׮]v-// !E>}0 [okkSeڅz;;U .ۏ1B"t=; Ù6mL&;v0{6mڣG,//2d?ۿL&[f-['LsE4]QQѧOH] tU744(\vM& =; MUUU֭$|׮]{>Lݭ(0 onn...nkk{ٍ76lͿ릦&;;cǎZ)""B ̝;wto##oY͍UIENDB`dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_CN/fig/main.png000077500000000000000000002471201473346337000300160ustar00rootroot00000000000000PNG  IHDRLcȜ pHYs+ IDATxu@igv)n,[;SON@Q1AJ@]vٞ$^e}~2;̛Ddd$ B! t] B!DEEQt]B!aB!@!B!>B!B}B! !B Pr\T*uUƺ:t1f u]BRt:NuA*\.RTT$ AT*dr8!T}{P(222$L&STe'P( b|7%%E*o_-ZvWkbt] #IR D"]!3$I* B!\.#Bׅ2=@=HHMMRA0 <T*R Ԕb$JSRRq\$I\\9uY$T}xE HP( &ד@$䌌 6]_W. AT&''r RҤRijjjEPJJ!|PRT |]D $AH+t0nFFFFF˭o,/*r9r|*`r9Ai$rKz +T6]X4BQbJ챃$I8b_pГ!mǮ;iii ʨMW眖VFSbEq:Ƨ@UDIhF_%,6"H$-FP$Ii 8t8,BH%B"H g3TfR ہ,ѓgP.WϬĐb2o !+b%B"H g3AJQ y|| RRXeUUP1 329CR` LE$)y`2|>ݝHnn,ww.Ԍm&a^* 3}-t0oֻ[;oࠏBOBbB?JrJhoաu6R(x'V}r7%޺"ܶ\R{;ɿ{/CHoo* ;4*d?ҵ P{s!hJc>.O_ҿG-Wo=Kw_Ժa啪g_qLԫ(RGwuw;Ep왍UW"K9WeB?Wo>o{mK &X[dа^}5y ^k"),(w1%1jQW-#1E3y/Z4njhlsuTtuŎ_5s%m@ڽao_)l4u7l},̟/iT¸(ܦ I҇hJVQy蹱^jREH wuAҬBĤOQ6ڙCJPre[[f*: /jx۽_Wy܂[ﮭ[CS-sz:SRoRϫn-ێ:qAF]Kn2kT71)Tt:>Z`gr&˚ݷZܾH?;=:p)&ȔX5܃r=r*RӃZiUN=aLj[VӮc6vHqKS?|BH^So_^wK@?.!Kdzˮ'9RTʟgvԺJN^Qh+O-#O.?MfAWGgv׋a]"?|[4mO16* (&4n]|+OO7Tٹڶύs1iY[&6V%(3S22ŐGOe>mܭ;ic)oL:.g׸ҫv#k/۸, !5RV ޿[{ͼ1D/=­]wέM?;(yj(|'gɳ^UKzMո""2/l/*`v~Q ܿW#w=gwwjלFNA?~]wۃ^r,lVˁ l=%Z%wLR >L]$B?X0AvT8}O.j>{ū{|l[ ^S >5q׻0@t*Ho Be| )Q1@ IKNK~?CXpW|{q)\ 6n.5Y&7jK€z(ʥ/Sc_(*觤rkVG;iF̩#i4ڐ~]g< IJN`Ae]ǣ,Z ߢ벒ҕ Lɮg-mxOm m궖[~?niFtZ(D(K&[8"19| =Hp[5-ik3vsԖ^c?];'U3Z(R?qE)_3yvtէ[sS$>9\*, -}m[q?/<[t @iڲG7Ff I_ÿPv'aO*KWX_+Q>T0Џ>a/^ 5HwuvHJI#LWEϻP-|z2#;xo>П.]@ػ& L:( (2`f>oߟs6ZRe$~ 7*ᣪd2T*R.W0t $)4R‚3]7z[,@`a?]iq!'|aaO -MX)h hw2HbZRGtO; 2h15s/7o| :<\<8!6"-PSt86On(*yxv9? ӨNfisVԫ}S7W6]x$I5l}_n?RG1AebK7҃,F.bN9>r$?]wݡ 3KǥG&ץuύ qe2௿hW%A?6`gOsOa(MVJaRlD>˪ۑwКQ`huo$]g߽l( ,;l]y瞊yoyx=!{^#~?\0z(0-ԣ[>R"':{W-t`է!TLčȡƎ=Ոv|֬; :)vǞC D*mӢV*(ƵlOaZ%35ѳd 82]*[~{*P`\T:npB`ZnBh>|Z(qǼ2]_Y8 &hBO**E:Og7<4"ճGɖ:7n͊!|u"Okg|3,07Ͽ}&ygD.z@}<]p"2E &Z44~@znrP^jdzM 7ӯ\l=a3'~=|pQ֚/*A>:y}Ԡ.KqcCy51w_]-i fÒ_98vfå L~A>v||o>}>Zh%Hex۸ iبr߼2;|Ƒ^,xy_*%kO/K,geޯ]˲볓'=2nSdA%&)r dog2Nye!0/^ܸdTc|XYְJ.Ir,/y!nfيùoXs/O2Q3kVsl6w|Ϯ>*(Agatm!DPfMx_licm!^ tkq#'{“o@ui:E0&0+|j5~~+%b:u` RbUߏ1af9zm>N*%H|{o} r?iAˏfQ_~'6?=Σu #߆w(.C24"{m U*_p۳L&2g}#4MP(T*U۫ߚVh}9 |`.u+!:2˫ @B*dP5EޭCWS2tZ-zRT'{-{4_~> Ǟm:7l=yFV2|U>}Lze\!@as(Lh:iP|eՒ]oѣ@P_;Z; ++v}"HZW "hW4qQp;&K&IUCf"ݽƽrRY L4@ *., ϸ,F[yA/џcbͻOOק^Y4r;d·TY˺}ocUo;Qss<k||}ÇMj/7G74fni,wnC!XqOD>cI<;BcXYXKbJp0.2X8Lt8FDPujgcho`ho`aN-iLP(RSSMLL4[z=8woѫۯ~Z.5M.#SVCsXg r<ؐ//~>@yHң0[ dz΢;Xh~ tn-&۲̬)kyhN$͈OL PE~p70*ͳc coe4qtvg}>ۈ53ʥݬѰ6g=E6|z{ܑ3G.}_7g]=יS񠅳~ Kiƭ[ĶVQ_:&|%P9|򥧇UEq~-:/8[RJV*zIiiiYYYeKŒx U7&6TV)}0V~;<X p"}+ =èU5xF W>dX87箛)kXӣF kFOZ"omYSĒ"S 76}iߝέLjy96}p*X,(&P( ZrSy()Ric"N+9*RqX\\Hϔoֳ* |{ݗs{U8&-{$}@Җ(-zP(5,L5gjc25T}Q(cccȊQ *6R4΋J$Yb Pu1$I>0gqj臦BZ@cfA$r--D3KX1NOiA%u ZU!T}S"Hˁ~Q?rL&ɘL=VA X,OBQbIER -!AH`q8|x$IuRR*$Ix%WUL"|("w\"$AH[&xIGTD"xl6ĔfffQc277E}" !T .J׮ z -S(gll,TT*E"1+M;u1ut#z;LtB喦^Iobh4@T*)9ʑJRT2SSS###T*HQRp T*uABzdL՘D ipT*D2L*$Yր l'l6X xL&3##C=ѐD$$h|>:E@ D. BH/p\gH7G=@8 dt~._FRtzșL\.d B٤ tub B FO9=Gp8bX*.BJoL&dIPiye\B!EEE%B!B}B! !B B!2@#B!d0G!B@ !B!m}B! !B b B! kB!2@#B!dB!BkB!2@XB!}B! L R HR]!BiV;4JVryPu{!Bz5t:B~>!BUǺ|#B魒+(!B!m)9(!Bj;T*{h @![S@!BiNB!*裢แB!F!B!>B!B}B! !B B!2@4]! T*B)B$IJT*IuY~@!JFQT]! RAPTRP(t]-S*2L.Ta  B QYoC#Pt:}BzJ!u] IR$edd?1X,x<-}2!Tc]BBhPOdFFP(d?BRP(|~)c}~q䇋8nc۔SBa4ũeI4#I-;B臡nu)Bߺ.EED"Pr(?/*rBH$*.1FgJ7ʴWノ__f IQBD0{<6hpAv-XD!{.[D|(!TT R`ٺ.>bX@,ƷOJ[ʀcnn[Ogsn}ܱk2Pnu0G$°3pS "`i8F)IX_ RNMZrm˶Z< >GYS}I߭c0ƒZ{S95TSWSPՠdgy_H\s%ػY0HRckE +Mٛ'oZ9TP۲ )~~w 2K޵t΋a"94_}ɠ[y7hۣUȓݿp᫏lgȦVw+6qӠcu-$}|yvT J IDATu1G臓 CX'jۣ[BpaU]ԞWl[xJYSh1q}AC~Ӟ-:{ӯ wD\ݏJ6X3=sHPT@y\,̰ j +$^9b+GE ?۰r8%rwQ~ xҍQˣ./mc/w{IΙ oo3nȏ8》W{.Z5e #eR`ٓoyuŀW.*rlFcpm_Ҩ_M92Dk'#MOD5kCk:`{v9ul䀵ȰID|${fNZq{D6nPi~_ ~VdoWUv׃VMyҶ/zcVy(x;y,Z_>"2]{"QӻuyQEgoy*i?IkZ0TX}=hړu6퍥|jGim` őWZ--ja y{'ٵ-3HYR8tqz6'O6^}=ݤ3z[ %Zq5v_0u63G"RԴF-c˳XXp wvBL 88tkbR(+S^5WvڜuE_u5{ED ;{{lſhZPѥ׍AJ|us 且,3sV}p88%7HN= UgS²䟾x٤FWO1rӌ~;WfGGGx_8s9sBݼsfC(,~~m:{vM0je|ȍi`̡&.cggOO5Qg<$O1Uw7EynSow7)Seob9{y5gooke=SBϝxQpQ y~RZ:$yt9*GHh;z*@ N^-2mpE+3õǯ޸YMvm'Mẻ}1K|Y o똯shOu=*-ߍ0iҡI;mTFsH!S.,ߖ-`zCp+yߞؾˏ-u0yfZ{V8*S)c nlbACWJ7s[޼Өn.Ŵi dGm|fj¤yk:%yOBng ^^w`:;O4@1!׈B]~>ٝğCy_xث(v<liD7wgCjۏwv4BQqkr]OKۯ_ߤ3/)HPЁm+9Ztk)Ą' ,rSp8eFЋ/rMkҟ{ۻ 4Xdt@+knO ,IcÞ_aӣ?&@MWVyaIT+Qٶ-. m1O+5Ȼa%&-Xmբ)"q֢;*Y ˵ܚٳ#$<{"^{bdF)Ϗ;7%K$|}첪 @Ɲp­3%!AWP(54ZG+OCQqRnN k7$.~wݯVܟ<@?3#lZTJkYRUo$eT8H +[2Q1A#1Lʔ5.b7zf´u-k8 g^@gaؕ5{>]GVo+Ų)_Նc3NQPA>{a2V#[Z9|W㾃ur5}٩3{y!R 0>ܾ |RԫnYzqw/0oRF#FS ʯ/LJY%4w5nv5{HD_}[OǜfDs~9lMmAVw@2S|]*"?vMܶcDžݾȜ'oO<[.t1a-\SHpJU /$k8ZBRKYY'ys?ۍW;q%1!w22 3p@ \wcÊF. 1BT!N|c$ĄԳj*83=.,`۪='WB2oޙޘAk*33PozupsN&NA; n^ǖF$(Lx O+9MД ӢD)gu`_\6Ջl\.ЍM!.CPG'Z 2AZ~8W~ޝs)m}%jʈ"BV;!'njl`Lgytbn-Fwo /j{G\xY/.,ꨊS :3oXrF";!\\nj@[i4or^|37)|[[[ .Pw@+MR,Q@_ƹ^;եKBmk}6]{pkrF8~GDYG6n0nXB#WϽ.>ClFQC?ٵŋߋFttg8\0Ŗѷ[]S:PxEjl+# ޷6?÷vH߱b{Y(> i%rz[3}}V$5qڜژ^WԩWF]2^9Ͻ wG -< 6{`e-KzV?NXruR|F~=ѱmC<2^%V GguwV[t=%"#9V 6%ǥ(tyU+g550$f*}~˗ff ~8)S$ 4kn . 5j)ow~V&~jf^EkTOgI^d'EŽR7fP%oO6zzUn.rє+/ZSei{ xyxߞݦui;yߏ팰^PhL& K.m\J74ukcQå׳;ٵ߿6>f*EV6^ ,G l3&˩_[:{FfhzSa#ӟx9XM'2F L?Ԕ$\{T&U ͡ٳ yY-?֝=z٣o1[69=­NJO.{w"De. :iyNy4h s|IM-\1&c'Ӹn%ͶF*GxWB22:/ A>cƭݭXziͯ;z{`Q_E\G7{e0+Ƿp}ɒ̴h`SS%c꼈q|ƫ?tw7_MۮcV{3 ʤw]8{9EdhfǬܗK譎hm,2[&}U>I _9S;w˚]<{ŧS72#0o]|o 58Ml@B|zqXr~Y:L,!6jEdH`҃$>FXá Ilyi&LnT|ъ. P;r֍b$* f|j`mH;PgZfqD\;JFñ.6]{z;zX>523OG.]WBqՂ 7B>%t3_<]8}!{YDK"ϯ)CwvD?Q03?9>熪j1yXvC{e}&t6yꛐ T~$ JAlH(ϽN}B2G$&?kGB깗zԩbi}s3wni&tunp+[қڼ섾]8ɏېz*Fм-㿮c&2lhxsâv,YJ% )29@ŎUIm[q γW4jK7ZSVљVE3gsԀ?nmzydkӨo2-ÐKo/_}~Z:Ց֩^cv:w_wI9˭̑;|ϯGv6ׯN0g{6obz&ZB-_OFdD0vߢCJS}0׸]R[V| V`ӥW;7_.'f|CCu@Al~3S8 J֑xNhݠui`] n-OGwp{NNZKk^ۺ̕q-yr/2Q O /Jps.`)nz] ~{qn37Loi}͵3S)pis7niu)}qۘF?@}޲22̋?n2{B)_rYmWfWзyɭ,=Zw\ }@Eыzoi4Ӿװ} ")7|9UԸYM̪"ɩ4 ED¤ƍ~ްK /'Hi53+4f9jY^D¥MkdVDO _` +G,]kj89:u|8BvΔYPb‚މ[5q`IK,m>Fvn6ܼVJX"'` Oq 8^ tZ f'&VKPa_>'6+Ђ#q3ͫm]GB%Ji٬Gk>tɏJ rmĖ* 2ey*l.Sva>nCZ;/3EsdeVYA0wӷ ^^0{)ޯ ;3###SiƁ@U%Jh{ǖyfp{0}Lduaw="Ku}1AWba$y`D W IDAT4eN3g!fӠ[z73Gڻ!?KpZ2o7߫}ؗ&Z-!T}1pf? aIeثf 83|ʉ JEPhT*U5umAaR~.},Up/A:UAhXB IƦkB$I0. aDV5[$YlPzFIR*4S(@r2?~b g7p* o6A57܍ q, !Y 5Z;1U-Y˕H$J/)J$K9X͂A ~͋BœdպR_R ]ͽD"311)q CBB< PqHT*%C!u)*Bp8.+ KTD".pJ9R P  A8BHT*fcXꞓXCJRo<bXE.=T!T2\NѰ(BH)JÈ8JhDPHR${cEY`X,&YN#P( 0 I5.1L:d2՟>`ic}*Jڦ>BIT[BB0#vuB!BaB!@!B!~<>u9B!2?+ > LPtx"!QÚUzyB!Tr/SGp=( EjT k@tȡ\Ԏ#}$ӥui@!BTfC +2?'h@+h^%9zt0M}LB! ^eKdp}q ͠C|(_ f{Ifca=G{1 εh>ޗS#B!TmUZOĥxljk{AOZ[/wwc3}z]NϮ܍ٳ7}q.Þ{6Sh!B!T T^> 2yчR%d Hk; `;UiOn-3*_Y['=C!BHUfםk{=s*^da ORkN~(<]cPB!XOIAjP &y+45fIdS<AF_NrÅa;B!BHM2\Z&a:Q3Fc]#!B!TT~T9qA$0AD~i@ ,w\ݰB!!U~,B!P%)M>B!B}B! !B B!2@#B!d0G!BaB!@!B!>B!B}B! !B B!2@#B!d0G!BaB!@!B!>B!B}B! !BeJ_zˆV@u$ģF>FmiΫ,X&|m?Xiz#)ao2Zfƽ)Hū\ e򠊨[[$+tUH/Tغ\`8]KJ&D}`'SR'%Ч?!%З_٤ejfZ wMtoR*PڲT2[QW{^+D\WEC!{JRwf'$8mHGJ[& OrV><}çFoĦ=,փZsOV<(bH:t?Ɠ[_rÅxn)@֟\!~ 3~N'js+T]p}(^z8D,Mj`p{0@P]_v j0G}MfOD/ٿ$*W;0h)bٯn-@48IܢtI-r^AT-Ƕh0чDUpɰ+N$uO9]bi;Y\., .A܅כf5ťl|SnԵWdg5FT .͚K'rM#qH#CU{Z:YQ"(kXϕi뭥~_$,zd4u;Ի_Oע `ݍ*/0vD`mF  \Gݎ@7LH!,)epQs`V@rp w'Ս]KAԠUDa`WoWWۤBD0dٟVlxeh6j-tnm3œ eU/[A8&cR;BLh>A@^N3oM|Zbޓ ]tw *}49I˅:OmèFzUbߵ^MZ,ߕn{fE&,f8 "a- 2 d4:.2n^;?xNUw=(W<<Bo& ;ɢ pD140 M3 XjaT*8JZOj*(mVVf|f Pt?PȘލ˂`+GxBb K +_DLUP6 mK,tuN2[wCb?5nB3YS;]_PK?i{Um=*UbWǓOޞ(%3MYHlZET2}%,g׮8{F)zvDؑ9T'o2. U4Pzn]ΟF lC3<.M-Ǹ 64m:`}}3o^|\}E>=JwnH Fvڮ{veb 5Qw-H;p-vgQ'WDu[ϣ*WFOޜmِrh* n,@+x~P'DzXksTOBO%]e:0[ݞr*>|ZK,KgQ=7?e՟vs_?{q"vjq/gO,Y%oO7 ~J9@xqǨ] `UwCϣpUMzUtR}1wgޫ*ܠ˃MZ z w3HIIKE/lOv6sِ190;  ܋Pz![G5*iBAqkn@TZϼȔڪɷB]I/A__cSp$@oozUwETӦg%ڤ|:T {65V3@E{d0Jv0M_pY]!c`e(׍>A `0p]"+3wO;/}_K"[U k&@SQ@}uJ$ *cn'_zN SzUsEή?kudī6aT7Ct/.Jǎ!{쮏{u0KZU(ujus9|xLtϰx_o筙dX5nLI >~7Py~0pJ(G:ݫC7 VeR@0~Y[%JJM/cЕGq?v =xP9By`Դ+uEbY|lGܝ\yGW-+syԆVuk[j,V[}Ñ_*oexU4oF]C ]wZppm 1w hh>_ICϠ\.C_.ym|xUlIyG MQex%SFc褶{djX0E;C4'&K$sJvZmY~w~8Nݺl*35r;`TUw]50`AChe 5xm}Cm^! RR%yAQƃ_LD Lݡon5}ϛkB!|kݘôѧsU0G!uax\Q8B!O؉ !B!>B!B>}B!|&!B LB!A#B!0G!BaB!D!B!>B!B>}B!|&!B LB!A#B!0G!BaB!D!B!>B!B> ByLrOU=t#B!䓰FKTr=] _CQ99cE$y>ۇl/[^lfY,{/ =]_c 9 z' PUd# tU y*!aͺZJ>B!B}½>Pkwן3|,VJT:7Xz_OL r,'e1\fKk ʼns>RCZɎ[܇B!B۩ѝp@$qlX"}|8ٰi]6=%Gv6_Mǫ+<  4T%!B 4nѷ]l)t%WWM8%8߶ Gs^I3OxitlʘuZB%B!J*( UukwC87/~qoZNJ]q){G@FMC[sm7l8x|]{#Bj+ ?3Vf+j&JS Ѻ((.&re~Jc_ rJ{F{苵3d3ʠ|& NE!BjƮ;y )D.es*~.Jsw}z1eҙwo .{pֿtD!B]U>&SjlZG".:]>F}߸킥](K_jq^;xwRxbc̥Y7BdLq}ǨS;/dCg^3!Okw^뫷J|-ϭFe~qw9f`d'J䌚o]85-J+,~mC)[rIo^(Pk͐;VDEE/] I X% a`4bill ul6Mlr\.EQH؎9b+/:Էx<A ðΞ$lr9͍/7I\.ױP(4l{zc`۩tL&(4F[mMBzi;cS^hD|>(lǖZۚq9gتvu,rP֡1,,}%iww 0B044y, M v}|R`y-ޑ.\렡^,QΏo6(X#Fձ>W(=o@!M '[u+`48 @'=%#%M|xlE#0'd2n)::ڱfUTTsYbN M%&Ia0L&SMA8D_jzl6[PPht\4pAC3N+**;JAuQo Tf1n5jN}VRۀךsc4zބhO{)k0N`[:1Js`0 c'I +Dg4S;Cw9@&.eRmYLEOI-O{7lX1ƪSӭy۔%Շ P$9zL&R=ydMM qsk۽9f}?Uێd*--%‘ VaO5ܳmwJJJ~嗴cǎi4aÆyXF2cXJe0CBy}ijjDl)4^w(bc6fgoN}}^xb0sssIw<@$ٱu]LN|X.tѣGz=Φ RVDc`)((i:::h#ݕt,Ù2e ,K\\\FF[3: !C***bbbjoaN>}1v&f9awh4b`Zj7ȹ@ E*x<1 0 _VV}vGMXKQ-SwtvcT|!WǍ o0:z@.^{`ݪOKjȆNV_\>wջp^Gx~Cpߛ fe[,aظk/kƗI=9 .h4@0rHBѣGL*,,ܻwS⼡i=I) ]R4 ci`aՕzl1IV^ﴷCUU;vn6ܼm6$Ǐ_SS>dبO=}(Z=4ŋ[la麺:$322= |4(FT*J\~l6l.rrn ?{b\ff?~(wGm<>lŁ @.[̤O6R-D}0J!o ,Ms_NwvXlONNIIqxr̙c !!*Jm6[ǡ9X/\Z ]'\EQlO\ PkF>*ɜaC6뗕jnٲjfffFDD 6ܰaٳiTov{3""")ZmXXXjjbWGt]]@ xP]]m0b1;,#Ygoc´ۑ$F???l69sZXXxCz6pVXxO*h윀]CH,;\05X)pbh8HY{F[8'6Z{Ayݿ :~8unڵjFDDuv~w|V,448 b:VjWbح9vXg p8ohiGP8JjMy',Ku:޽{ 55]qI4bGmJ3gΝ;KJJه: IXe24 ;c/8pBjMMMA8:@ :t\.߾}3gnovc_|vI vE9,ꌡT8zb*nˮfj85B,\8Ż ѭޟ,W=d't#IgBC{Ȑbf޽uuu2l~MbX,f۝U{σ sD"s}t_u`%*:KJV vvvbl۶jFGG5Zvtv;vlIIFt#x<^u:gx. 9]B_YT<[ps듳(@N޽TFv.g-ى<;AQ9?>8!"3 ӡ70ogÄ~kawW ,!R=+up*1*..ya ;N쇚Ÿ+֡&瑑HܶmV6mZ zЎeSTBHኁngvsg鮬W } ;%b]<-xC|/sfkYoz۾I~X63#8x`~~>ϟ={:DpBgj *^>$?^R͝;6l3F-QםBg#B!B>}B!|&!B LB!A#B!pxMBn4E 6 t9Iw04mD RH颠N`>B!Ph4(s'Y>mX)?M'm|`Ͷ%$_}˦jWzc-m6c5늃/\Ab̠2mW/G!꒾ (s{| z隭VE|xSm! 1'=%bt;:\1x Mfk -&r5&KomLUˁ PY'r0Mp^'7 ,͠tMh>xs~2mP.w/{龹UUgd͉ܵn1"؇'rL5!BYWF[>w/{Sa벣ONpN?/3 ՜ ۻ&#n`CXY߫`B!r-,Yo6_ =@iR-8h;P@E|tγnY bGgIk&$iRЬ5 %R)>vX~>B!kWcG0[J5dI|W ta{ nWPشK!7o1/k쪜UN- O.#B} }Bl:O1ȌsV V\K}}Wȁ_&Zx!Ö}|~{_x+]OahD!Bo`V]U0G!onܰuٷ~b_8zNO=^~یw']rxC[D&!BTP}TDhϾDOH[B1rrO '@υCJ2޽6|tӵ_\?%+Zο?u?~v73xD&!BG5U}e9J~\p'俫.ݛ| I?hRuw[kMg?}oƈ|&Cv'L݉-sG U<\C5&;@/ܷ O})Ƣk`j1Sl냿 Y|&!B+9vtk]kf`h&{8as9`Ս; ,%aT!ݹ2<tÃtgoy1<C}-%KH-l]a @ 'w#Bef ѡFh1Ղ7 p@YHRNc2v]zTmuoé^L5|3Z9$a^<LzlX%Uxj]Zc[`oܺsͬ޶،F+Md[l406Ek(ų<"D!B5~OkvQLK>CK31!9ӟN2<ȹ8Є*ph}ѧ\j @pl9߯5Rdk&=sv?Dl򳋕F[ |տh48Qʻ cO߈ɋe7!JJJBBBB(v]ͬVkky<=I\.,@ pp>f6bK0`٬VT*d]sPWXP^BM =/4X242 wK@qd">G$eG!" tU]Ҁv"c|,_B0G!(4E 6 N uAO"%T. &!B Ra:쐊B!D!B!>B!B>}B!|&!B LB!A#B!0G!BaB!D!B!>B!B>}B!|&!B LB!A#B!0G!BaB!D!B!>B!B>}B!|&!B LB!A#B!0G!BaB!D!B!>B!B>}B!|@>$I.R6>g>7Z>g0`X Oא$) }.VU xd2D"a<]_c4R)&}d2x<[4Ml6EQv5o4}m0G"xzjJ$}jbsfY"`߷h(J"x $I R k B,{ $+VaB!B>}B!|&!B LB!A#B!0G!BaB!Dy ^ig+6zTњ} W›4}j(AqzOC6vobFWv*%ԉ{dG tE$HA'gecL~|2q/vAę˳x 8'kE?z]u̮~,>p̑Cνc˟(_䞣e~T[K䂭ofGNvAZD?OϤ;g<8}bt Gۮ {]ZS%ő)~ "u`~U!A~`)CC9@Ul}[>P&NuO|yݔ;buԩm&#Zb}i[A~CݺSLΝ k]?%%RWWRJ&9DPosZs=.\vKy5[?z\n"RUdՄ%<׶VB:d$eEjMW3 'k8߿ozPCA& ~ul{IR.0q?읱_t۲Wܕ[4&eV(ӥ#4Q3Ƅ4p3G8\aOj8ײ]Yݘ7h<+Nhވa33=2b$CINNiDt3%5a{5347i`~s?u$usbXV<]vt[;2d|f&m ]e3+{k>:+kS|mN_$!>zYwi3ڜ0O>ܹ/Oa5'4f0[(8)n5t05]sj%/=ߜX+y֛>؃!P+L7vh /wELX0*%5 9PmgXf5z^_@!w' BPvYh'|L,&5,1h.r>bx*PQfP{>xt}lǃ2Kd}zEs8o-L ؄!2_ԩy l:w,'1ɷ+ @|HRnLR޿.UxWϕK9{Z,$Q-8 e2Z/?b`& c K"m*:LoS NǣsggNߟIf6Bhp FmDygUh?*#$rB`)I%"~r}u` VwYYfG,do:gl֐q~W˛Hwg }_̂k|hf{c}#/$Baxb̹C%`T54naij6h+eY'fHLG2V~7%=SS j;]a(dJLvUnkD,9uё2`thMHi\X FPkns, 4 ( (EKM,ޢ1h4Ė[L,XcoXQl8Dv*p}Onoan3mʭWa~U%$^1*a>}?~8E4xxWON (:).q tx|&ռ{4ݳUʃBHHDZ5CZ*CODbK6%vzzn|%4|JC|m6jhÎ$m\+6ٵK2X4NMRd6WZ dѪǫO$>tQ;g&d\6GQGq*i0ҴmjzUT}VHOKKvE 7 :;JXKجj9sO:2}rG+ٌC5KKHCڼCɻӼ1=W_YI(Sg)ITb)^c,]ʣX%#^s3F@ʹ*TȥDD?V#]V5uW515+1irya" rsbTqvomF͚هA58wůMsT6dF𨝑ajeADjM ŸWr;O¢e99Ĩ;^eLGi*3bK"x"< "d^3cW~=?z厢8 ifE6qn):;Z%.[b FXſL&1Zqrh ik5,v ]NTYnFܛUH{4iQז~^N9YkT˝ш*Lz-YNF^8=dXڪ> Tk2k/>Bt}Òw\zDD{';vl@zZVUyJ[DHtva^ĶECjG_CtŇ|maӼw휘hG-N.|2Wѭbgtx߶%"l .1m0`wH/yzf 9r=kqTt;1,PEJFeI&\?_,}Bg4I,C˰}_uw1Mrj5mRML)ْV :)`ck&g׮֤ze^_;q>bB ?Q8<%V+Nmn֫MNM*|Qٻ6jH&væOmËG Ѷˌ OumlVLljL$2%]҃6ؽ> x5O;wC>7By ukTZZ HR&GC&&9[2!k_ETM\رgE~bȾrp9O{m$^?NJ9M ~}׭~vfyݶJFȤ $\(+n4rE67m7CO{D-Kd)?8qa6 5\G'nROjuhmI-H-݌R2XoۭR YT;bQCc;GCNLR;d"0ĎqiF )v6c.ܺ/^舓2"ukU/}kڤۧW]>oԫ:d*,K?;o)E- 5ʻ 95xW~mMsYIBP'mb0ΘcLTpDԥ+wȈVeXrʣHD\TCy˝NTiN۠tz}EtFcЮc> ٟ\};zJֱz..z]WtV?&qGDD/2;cTljjDx"K݈ۖ-^kJe+^u:]zz}6ψ>EX&evm**33ݟHD<,Nž=VTk*7fgg+w1$:ˮ'T*U1,&&Egb* "Bюd" >K111GaȺG ̲ٗ,BDDLdjBI^]2IsYy"ԫ3+Fn<|m0~fr\,5Ŋe"Sw6a"`bs!SxHlnZ Yz4 . \ϑ"+oN`*29uH`cqvx.@`3~ԥ GcW@= ɼ}"~oXOTooy+w*=ډDԫ#4)$vΆͧfn%Cro%*BT>R]|4(n/ $DJy)玟r(`v\]T7~֝F=w.eFY4ˍ5n\\J`^BOv_;C@w+c)d있M*SHDTڪ=LtӶS_I_'Uqs+ӷykMV#~%"Vuxߧ-٥og<&<ݦIn~~u.H&Fo2CueЫ IDAT=w%ncoippX<5:=q{| ػGpċLnkG721UDfz4Quke94aG'W >>m2F]1- 1111NNN!qcYUGIa{رSaFRݠ~-ط;"J%P붚K҇'t˃T* ݃>덃>>>>̓>Đ'B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B!}B! jK7:N@Kf).l]E[?ro㔕XJdE96v1rX&3>=3 e,‘sR_޻tXj L;S>l󻿟4{hM~:~.i٪\Œ2ުG^?{#K]\Jsq\gJ?7&ÔW0*V-/Cz|/:vq~l6/|-+*VTC+6؁^r%VQuE5;Fӱc~܍ƚCH+e63bQc\݂ܷ 7~Ο˹H滑;v&ijA&C*V'r Ouڃ.X2p˱_7/"V**/smݾsrՃmO{3O/Y7OTo+b2\:gg5sIj'v _ž[xd+oޠm[b21/6;0bjJDva &fb+Ln@DDµQY76tLêus-8rѩ; [tV~/;wd]\ҷ~1de`iYN牓;=zڀqvԕ&hh zuBF%׾imٙ D`͗d̬̬LɯK^VWLZvB={FmnJLr 3sN+)^TYXMXKeY:xᯝDyί撘l'uێ?/-&Gz5Zғ.'[.o[ ʮRiSs^V*uWev(Swy;c-BE(n<}NuQ<Ul V#05.G61Ξuhg89կfU M~)5 roXl_lB!M,2 r֕SM=f ǐ\9q/.%EpµTIl"r/{(UY  S KS}NvVVVVVs9e.ѲVlcΕwGL/ XQncgfSQ$VEl+lU"^:Щm;ʽ }u׿{ZBmΞxqo-?<}!K٥Q^9vVZXfX}+AΒ9X*oJMD>ku_V6ډg^vi%&mWt0z2_]+e2bu]reTFDN=Y)noyO5*׶cweV'j^^խ,-ƽ,_;h\P;XTlvDD iuF}vlǶq!W=AD&nNKtn>'2Q%˫M-ĭJ ~=zyzhs\wEDm5"kiDԾqaPjIaX߂H+0ZbYF!.Q>"6F 6ޝ{{ŇcѦo6(r \CONfwhT!Jwo(n1.~X, chi^D\zؘ"zsA+b惡r)9[*c//rsۤYC'!,|֠''×6 ]o%ٽNJ < W_;7cޱ]c۵YJ4#'W~w$4y+eBFDbKC}qJ>trmŹjGlYǾ@7uvsF߯[5:C?/n˜V\]ڵ_7W+RN?Q5 on\(AIwo$ݽQ;#ߔ0bTg.<q 42UK Y:j,DF }_O'bBKM5 +q'ڻKpown-݌s!h;SRTm%Lz ?lm[k덙hXzy:gef1:FiL"R,hkRSDDIV37_->ƞRu+nno V;~]mD (Ss ,CYyje9XYp{\6%nץAU!91WO+qYDD ;gq!>oƩeٯK㢳+j7!i6fDDڌ'aǶ|7w85+G'Oz*_w ;ODNM{׮䓱S5ǔ6U M5\jKR½ISw&82ҥTFOz`e챈oToJPՅvv l8ešʝ߁2u 3}榣pbn([D 4Q$X4K=w]N5P\e[=BADMs0B;SY͌S 0Eh,Zh1|QNmϚܻTlŒ[`J,.XN\m=[<_-21 M^s[i٥JNg~)nqL:9]"O:($!?ibDTBj$viiY H<-K"|,%:s~lrŘ#լs _eSM"#-ceHD83OPsOɑXƾ~v:oS@ruEr}ચMND]HxHD^8+w.Yp7v!+tاDt[iNj PVE1b n ZwFz>.N.Al51[r$~'DU{}D4.W Xsdž%4X2ȵ;=yNE ^w-e"4s]N`U+jDHL"r(ӕ5re,+h 3aOk mz n3`3ooqߘmG7F#0BS=g(\WW?,M> &pGLLTō`Y-x*e\ Ή‘=5>|r*_]7 X͹9U?KӵZml^r}Dz,Mc*z XeYV'{ru_Fn^A>=c+~.tM=R˺n1A**337 ?r3c./t mT;ψiz?^Y6;;[(U)I"l/m\ǻu1sV/+IJ*=0111NNNԱȘONSTSRD" q/IRkkkʙ\.gYإ!B] t*JR |VYD.hZ;;A\bggouJA kkk@` 0  A'xxSjZRI$co 0.^AxAxAxAxAXgĒaj,9gf1w1]3G%/}xxJz6lo[Ǖw6a *V'}xrc׼~>4cO7 oF̑WJ}XD dhn^4_fu=;1]W;s=~nJ1o"+֭ {5 Ɛ~~#?{mUtܱ{}Xw4&"NK>hUl j@Qf=M>'gl媭}<:JƚCH+()V2(uo4#7-eKs!zmbu+D'bDrGu'w[ϊ&6-., =n^>aߧ߿fתTJh%ğ^1a?ѧ]3۰l9۷}ީqȰmDeTo$Q3ݛ8gYRtj%ZAjc/~~iq7Tث]+ػq_ЮͪZQqk*ǀ7#OHF!>r~w"3ם.n_EkltT5Ut9 ˒Ie X"]X>b/AHDWo5qe/,ngW %-YZsO;"ïzet:#%[`=i.6uzۚD:_cn䏇q=>v3*bqܠNW/weMxUE#jAv]l7 p YNU[ r)Ԕsku3.]~r鈶+}:vۂ/ CˠaBgNJ H>:s^{S"mZsYv؜[ν|eVBCXJ{ĿWSe>>wYUĝZ`S|W.ձQ-)2Qf^Wͯé\ .t:- -K8R=&5LLLSi#q' G* _vQez19~~pe7~BEʎ:s޶ ;WR_{RD" ˺D/b8pn2ʷMg:QkVRʘYZ1٣Ν:mJAY?x}MSO+-#ػkZ4Y-^qKN?$l@w*yqcgu1s$洴4{{{)5~]wBw;4um48KϼKk}8̌fy;*}.hvX%aצ73/rHzFTZGˑe*idjig]z^&wMO5(`~EO~ZOذ-_VU*D")ywKMF+p]vl{kWݾ?In#7aCIg|>;xf\>ЩC=otʼr(Ʊk+Ng5z}B0E1m%6:Z8–6Aen'wjrUלg[z*@diaʐѳ6uΈ7m~گʦVY#{RRz*I=A}b씯ɑRB']N\j̣­ygg=n &F(oA)qk(tç9QdxLq3Vшb[Rem+RGzU\j#jJ #mXTfI?L~^TOH~E`zy옫SC6'yeטKӊliՅNşcɞ!"R9%ȧW;ԝI͂XNB;f)Fo$<ceM ,l*+>83kf]BiSq3b+cl׷:Lk>JMrKih6 fk)ū:mj}sR"No@&fD/5Zi Xb|[-rnNA7bxտ{ZBM'zUݯkhsγPOKzɜ,kΌ[=ĭ"Pu(^*E"r߲a6 БyAF; DVҌ!8^5B21,cX,,H A*Jm ͭ+`.!"J&*m\aцm&"KHonB$/g#̯̖gz0ЊM{񈈨sJ)VI.A]^PFv5ֳpXQJSsU2$TRSӥF6BR>!C"=cMrI. R4t%<3[$2ZDA} ^8q7 X#̚GC{xeף_rl5 }*D.uI6yBc}["D˲N9A˦"CӰU/ӭjezzOzҬ2MDV'wy4=PU$C[/JLezE);G!2`|_Ak'N:5I9T*٭ 3O,0T "ΐk8sW F$7zW6I"rkV9oKVFQ-"W6.DD3KF;FDmu\^p,t_]MD|ꔞߋ6leMx*lغj޿yt"=ժ_JŲ:<##=%/|۱ߦ̙͈LqȊݸPEUF\R,!]IQ ==}j2DZl*8uj`ݴ^\)ԉ\6+#FaWN ۲Ӡwz>.KAkNte{\_hOzxH5߻ʐS$QTȈ͊\$ n-E:ChnMT޸yඥb6ǩJmC%؁+aVDWCbkr']ӰKu!>DdQۿ3. B83WIۜGoI*ucBUY"\n7F8Zi֞gqk99LFd^ Qyz-SݻY?Osc~n愵Fٶd/~.{kۖ3_ ׿Ά]c}o†~,DccōXeBųkgJXD?s`SGj>~JOWn7Sbjo(mE65K<`ʆxj< J|(a]3'z)(j:E>TQfźwzI7"bss1c;}q뱭7b.;G)  Q_:ԭ_:vO`Hڤyɷ߭!CUy7yqs6#5Iw˩gfn˯t[|p >,xƟu,[m@Æ 숽[N' yz"jܛ d1DD$UC[ H[xZsf4)3է1 ='}0pSMe_}Pkgf7w_F1 N>WDf^&OŌDorn/;?eZKά6/t $$C66f޽&"c )MM k1m7ޤa^;ai]LsnԺY'WߌWy\mY?Wْ`2.{gO-"De-^*ɸoPzy̹mMGY%Mƍ޽z ^w/G5ָSI*q2u|V)NqpqkvDTɸv/^iι# ɸ#ʨJe7o %O5bYenY2qp^n7>>_2qrr*E"TeSRD" wQΤR@aK,--ޞ{36^/츴,;/jJ%`M9S( XX`B9S,[3&0vxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxHhN,˚0 òl+|`t,za,--mmm]4(AA B!}B!}B!}B!}B!}B!}B! P5H/n.Ɍ!,%[dPlo-bA_Fߏr{o\B>_f3 hxʖnig,6 >x Ÿ?~K^"RJ:Rex|6Mi}PcĜ>&v$I͂Uݷ~KWqӼP(XޏB!D}k,]4NO'),L*7Xi^jGKDG #=*h 'HO\ >oyzل۷L>7GZL&++VM}ܜ;@}[&aB!*k,I[ee4z*aJ @}} cTVtq 0"ЦV 6|0VESsKǮ QQ\CjS/Lmvw4Z^$cB!h>N|_|ۧ_WN9}Ο)Gق( ܛ댾,vTdʦs?7{r[6iR+&fuBN L(ѧD5Ϻ~iK eɟ-R,V?ڴzmʘzoB!&Fl_|gʼn~+1<VB tdQXlt{}|aMͥ\C6r"S)sTVK[Y/wL}嬠]SgKznw+-stG7,Z&.:^ߖ!B迡&`罶_ ްgRsk[0ą@wu'㇄]uv-k>G;q87e|}k?ԾYwTBy*:WtZ䀑||պЀw^,!B֤}݇vߺ)_~~6{nxǽlb,7Ol[6Gm>)|Ϻ`К-ckzJxڷR) E'hΣJX#¨o!B&쀀Z`X֛3lؖ#%Gq%썳Vl. }Gv Wr@PrP(ӦT*QEB{UTF`0Oqj) é{UTF$ZVŘ7" aQS~DE0wL]}DE0w{}|j#j^Y>B!j0G!BD!Bf}B!!LB!j0G!BD!BfgFRVV`0݋FR &47Jd2 BGaVk?9;ztHsc2<<B!Pv݅B~[yoRkP0G!Ù tfG>rL;#zt~vʻ:SP(ʴݥ˺s.:0C)~aʭ<;dg`ޗbۄmykNޕWypЅSe'_̐6Au`ژm[ۋ~]?̟2[LV݆27M65Z?&}ЭMyWPT[͘|u#tXr_nPV>Ƽp!읗~K̡L,H׽`0j\vz~,-NCLO^6ڣI3W~Ұ1-n{az"Ώk5zS{cLߣmӿ7yӒ@ܽ_SCz؆9kOvsMmlgD{* `# YEC( *·5'OڄcpY[Ê2ar[e"r֦Ko[-Tc;[&U9vJ%^܀!Yz}s ~}oޓjlh$MSGܕAC[~lk91V/Zՠ=C=rXG$IZ0Ԛv8Օt$J\KՋ'+~}1ls],%{GLf2lP}b:2˻J+~V;tzû;R+Lf6OϋWM$I&Q~e+-6\6$iѕA Yα/s+I$'v_w lX[۟\ vaq)owrQŏ󻏤ɫxKjz0 J\ <&!ITȋw$ ` aYl&I=yy,HWFZ\s?Tq$IRrd1I$;g=&eH4M{.gk4ՃrM4V[N$i)88+=fo-7$Iƒ+?ћT ʲ.kr#I&^N/m6h 58v|jg0jOò)Xn>GJ`Se׽`};L{o@te{~z7nD&o9?J6<[w]ǜ{qMM3"WξvҢ]|h{c\.tkW ]8e#MthLRv;؄  U*JR*V=r\(h#6oTJ;Κgۼ}^WGEn})nvь-L 6כlf=ԠXeQ=B@%0(kRˋB~!ڠI^10a×ywOgjY۶c\ǮFP(<==m&v]w'/$;yvƇD/>>to_ݺ,RKۇn|XSe-Nmٯh4 @Pem?`X.C P,ia'd0K0v/xMSnҁ Abx&FVTJRthqnb+]=qLI&SqZrw|(%M?l[/sCGs\R(*R6-ży&(BuYI!”X.Qό7r'/ΠBk4 .7$Yۑ],;qIsHu"mZn}5u|V[,Y>ucIMƽϣqW]3JSp){ep"/xB^֦<,U] w6,{ z7whvh j>=(/)8! .^?vjŻÊsck0XJ!M,"y>3d_X;! t64jJRHN=v0EcPP( EB&р1BΝWma|gCD<%}Z͜Ÿ=A}Ǿ7m}a ݗ4*K*޴Wi6針N=s]/ ~c^X^c }0) _Miav^lb)ճ%A7ho~?t=[q@c=0&Ԩ&G QTQtEvMH1;U3 +`tA膉EG ŝX^1^# &PYq5 46_ \?K DBܶM9 ϗM"& hͨcc7'r'L/ZB6[Me ˊDŽ{> /`p+jЁ~gl`<<IFTfT^N>0{|ftro?qQ:Ϧ*+]͓]=϶CExۗݎd>1[*sA@ ćP C P*JˀEб]OáOQY*<0}:E<VH Wg(,X,@@v;.eZ߉FV 5ķ`̠~OiKw~7+h\OxzUЊhclOo"$^A^"J2 Z ,2j)J&1T/jNCr>>,$ PhSMZq_cW_ t"=T^Z>QB]2w4vΖyN0۰h"?oٔ4mco+fMYlusUL\ my2joҪ ߜzZU\@lsI{9Gό>_h)RU pB}HxC%lk~> â3*MX02Y) ʃ,<(㫯>ܿ'*b&u5;PWZ@]GZ aGBk4tGըU,>wޓI8B^OYFr#V`)t:\/篕TA5 L_/_}_ zt4WHo@G!o;[7JOhh 8Q6yo #׈6e'k[Ղ  it{U2M*}&ϳMXEMYubټ/0kq?hf%j[{Y#Ui))>?KfmX8ǽ#di^ Ϧ ߤ6K ߝ7O|7CUt?io7y{xYII#:vQK@Fviǐ׻_L=$ҐSn|l[k=\{ YЄɨ(,Bt޽cmI ~J]ݙE*ssU?]:EMtOi6=qVGY˗? ."_,H0K,kd%lk dUw&j Mun =@>;fƪ/նӭĒ#KɪItI;l ^{jx=rcK&FQL۶{ёb쀁sFd.u>//geg~ZIHɑ?5'} sqAV_Ti ]i6W\Ȃ lہZE +&Ba83ۨ#3\:!45k}#[9!vzolWMk1x-Kn?~6cOK=AѬ1@$lLx Z-S7;uͩFj'koK9p 0(O @@\EzxqAyCM02,&_-D x6sF`J};[ !#]li>*3Xf+*Hm^ʕD^kbiN(UT-1ξnj ;8w<¹O1WJ Z˨/TڞrNJŸgL(OavPNAZ^1 *.H"V#n9g.W]Qr^]n [ x#qݓeq+y˵o֫fT?믾ų@lgE|o/X0J֯vOwsސk|o[;]$Ftuq+z{Z{pOt=\t|0]E/g<ߦK[]L尛K  l%yIZhd]V)Ǔ'=KGUQ @h!^I)b) --}kRЏ;|1Cahi|(ˋutՄJO+3smeMZ5;Č'm IDATnZ˕OgWzHzeJJ%W'nLmf)=~| ksjyŵ'@;2uv 0uvd&Sͻե\wa'E ۧL&3m~H$IM |š[ʚV j|mgH$QonW`\ b"jYwhn _$lXKZûлì`P*m숿$%нd$IR[LNCI{92~ DIdqyy[JZHR_LJhZ/}bBwB]yWk*@4㟢ǻ`\bt3 aN$?D\@^Ow0ѯ-ѷ' |:keZr,M袞7q$oSb pe{Md*>| c)PKo`)VwS{.řY>I>×<>zwnXnjJՏ$,!׼q>m KHniH.㖗g\uuojLM~?y-_]ZTOM{<,MMLEuωuErrfÞDoE,9鄑OkBZW(-+=a/׌ dڵ0MZZrBDӘ(KQ+bf6wT*k*M&s2;S6aӿ 7\}e}~oRS?7s-M/Nb&0q{F$kYA,cHScScScPKQ{OL6teZ8ӻX>r=!B(/{p\{aB!T7 }$xJW;ס{P !B^FHt _ y`r“ a~/{O rLB!FiaZ{(UJP!BhÀ5 D!B~<ܶr5Z^V-x\lr) 6>_P LNJKeR2UxXh@VnuíeL|7^IH&%:2,4?X"-RiDq7#d6\9R-)h`v/lY|{_^ϫQB!GFST !ʬE^ _dfS|jAQCLk:\p Jt:q5.-+Z <>+I /=P+,*P\"=DRy̺(Mms޾legiXl}tnj'vB!PspDFQ( Hl0 ju$A޺yZڃ¾nMY\YQpk>e uXTi&Hpk$I$IRBp,NoHRb==\* (GH&#,!B)~)JffXdp٬ NWnʪD" xkjfbh iFR|Db2jBfJ|lIBP[4;.a)Hڝܪpww!B9ȩ{-5]^AIXhF'<="!Lv)+BqXߩ]LtdXT.+i-*" J f11-vj:LS(@jt^ @}GB!j"Ouz>"Il\V[^B$Jq)xT㲝A*C$P(^"@&S:ֱ-vj2h4UNP'k-F x"L}T*x(N\ů{ B!d88~bYޞjA>wҳe U`D$>5rKt *slH,il6Xb1@$yzFL_|HF]>FjBB)L?!3HMΕ?n8MQ$B!TPjYŲQ"#5CWQֵS<H|BT'v55Rko}оu+n}mf4s*oֱ$2EAah -By*|=Bpj}mʲO>S8Zu[*-q5 u:lsAΐIx5/r\(hXR\d'  ;F ;~j) coh$kF,;#&.` &.ؓOB!j0G!BD!Bf}B!!LB!j0G!BD!Bf}B!!LB!j0G!BD!Bf}B!!LB!j0G!BD!BflUڱOܼUjgzl[=GU_jL;{?luƣvhngfݵ=17ȱ/Ql)w(x!ty7~}SH3:X$7\9_q1B!>&˛SM5ҩe)H7Щˠ e8?u=vmy7c۳\klN1Z {煹 _.#W_8ј̠IC=w߉/nt=ԥ;B7ƹ"nT֬̋_LľN4@@\+PP6 B!jt Ǿk`z D<ߖ*u@rtS4CtiQ %5݉+`9.>$ ŷӊo͊Ⱥd wO`<*-E/j颺7#zoY53"7#B=N- E gz'CXC sڢ(~hulzt`L4ۉA%yJ0d8=_8+Sx~qۈ(tahť]^L{!|ʭV WB!NND֞_%LO]ܟLo?.9,^ip״=f je=VI;??xﺿ+JmLR B& x~oJ0TJO4ei{+9;.a/纇B!D1rG~<c&=t hQO{to;zqۿDL~Aur=8N>u?z [yl#ڲo '~^KNw-B!V쀀fPd0C Wr@@;]:$˅B!1P R4*  g\3A #͍VP(>FvVX%!B5C#B! aB!P3>B!B&!B5C#B! aB!P3>B!B&!B5C#B! aB!P3>B!B&!B5C#B! aB!P3DwtCu湋Ξs9jW:/3s+&8ޔK=?qn|:f,c׊&; Lkk;w9u-?z}d3hXۣfu)̓?Oz&pc줿6B!ͻ :&+T R1^|s }E5 ;9&rHcMX9͢ĉz8x&x|l[(@QB͇Mm3?90vl7ը!mlh=A5Ρx@  Ez7 P( {ϨZ-0Lwwjt:Jjf04 BqwG zFqwGl08z=IA#͍dp(i1Zi^jGKs*F#o/sQ+gb\k}?AZҨpY;e"7C>Kk3xܬ m}ikXCAPX,A58_ N WKzlc0t:h4I IpESVF㱬 aJ @=C%>;>@u<GsUev-pAg{e\?\I8}UbY,1ƻ[_c/{֫ :NcO֯"ww18 xp +A$0@TG{}^b}kkJY>)oOtC?Ho}_(J{_t~V.XʵfGwLTPAFJ-rc 3+)5Ds!B5wh+B H (q> ׸Ȳ]~k!(4&W֩Gp%7}ep/_ÝRcGsmd4h5 `;sQO)&,&Τ76B!TG/T2IɊ%bKmX%|wA hcQɤZB&@,.y>|j5Fm{><5=C}9vUTor頉CtsݳTo[_F;f!B%W쓶ՉyqZ*ow ](Mb|%&!BOJvvv@@@-kؾ+%uۀ<+{>)}f5H3$;>y}bYk~!B! aB!P3-s϶ ҄q6vH Ϲ}~+~:?uWɆ|gh{3ۘL[nbooǻGQ(BsNnnVx;vvwjbXY۾}{??ght|>ǫ~ R!bGmýJ˵uڵd/1"88S' bSQVoܸjY,VPPPN<<;luUFd2Ij@`:)ELLLϞ=ݗT*=X,!!!A"[+kRTߢ1}LvQ upfszzzrrr<+V]Ӽ;}ؼz/|e4C'G/4ɟ,>gw\ʞ6Cޟ;SM)ѧzFt`e$grj| ,FvY3÷YSBxsTݿ+F$M0L&# :N Rr+AX{*Q \R}BdRX *|$mܩJh4M4Jr\"JBbֺ[Zf4_ǯ<&mjqY$;w\KX0֜brkїq DznM&ҽqzTqd2 78O&b:^}Ф f`_`Y,l...h*0GMZatq;yW,H? ;[& ʁ4i5T&s4^x$ bX_lj3^[3:/.V.+ +S*>[Y(nC-g z .KP*1-ZsOyL&uwwP{` CQQFc0$Ir8@`0yw#IR&X,T QsE-lȪY,JjNfee@HHHLm3 #`6) Ų^vu0GM_65 I7J-]3U4HXf˿jyWݬ>zp zD"VT1+Uƕ-o*?'I4i[ZV[lYEd/*KE^^.8A "C(J)2 m3M:2s@-mڦI$~N}9=9(شmӛlb+Ht:]cccDDt:Vƒ߸qCTѫW/7-jIH t>>>L}*&44 Vy$Z>s 9r$AePrcbb\J*xC#yFZu^>@Z̄$fK$__ߚ`$u:] j6=)DM!i_.p ^㓘qvW,y䖉.\`H$G̶=.t. B4j6XVKdS P(3ڵkR4 3)dŶruQ\n]]ǕJg͚mJxB:$I2=!KfhlӋD:X oPLӸJˣi:<<\d)SxZogI&VfϪka6܅98pu霌NWOHJAEH`b4|P&N8'񬛕Fx,U&E҂[tRUPPiii9ZΊe4e!Ȁ(VlPpرlf(Ga"J.1NL3^Ӻ`X D"i^| Wh41rqۄ [44F|[ttӷlb0 F e_df]@\M4MHǫ wUdXɓdJX__+JzB=^dE1NeoYG'Oj__t~TlEEESL9`h4 ⺧t҅ 3~n+fsCCC@@Sfl¹\D"i񑠠V?h4yfHڪ0[k5_u(\.o߾Ovc="$I2?2JbX6o2LPzIW NOO/((r劧%͵UP(Fc1]PI$]j>r;Ұ9oW >Cc27-0yef ]MMSBZ,dk '6~{=xطPT_?h!>bƃ;~Wkc` J Ua]{K1Ӟ7 5;xν5?d{Kf;?gTAf.;Ю_F[(l9xB߈{(;Ճ#L֝~Cu{ˊ`XwMa% 6<YL xL;nӃL=t <5azlF|^T*g.`02WUe[]i$]:ɤ]] _-0 m` 얉`D棏ڟ=w fcǙ^m;DB%r]Z*FE-򡭖[GG-ِżL[]8a%o mš%-_1f E❳I䣈՟{l:Iiѕ2}6mwf5;V|}qs^Y;=Ҟv4j l6Ph?xp{Peu}wtNjT ū>1nӏq~Y?a=LJ5hO7ĭ,NkͻjP(KdJJm Ħ%5ӣ*6)))))eggw$ 3֥򴊍(--m* =0;*-׃ҷl?,6&26&2]g;حR9hhRdDؑ}u7ju(قs=0<1.iЂ}8!kͱG,采J;p?+*=΃o̿f_GhD o_ڏpcߙ=Bgg+,tv(N?&wy}KV{H5>`rz'jIPđ#G8=Ammmb;͕Kѝu2j6\8}[$%%q8:추 BBBS,)BG:v(H7N_OVO i櫟_dT5&!Q@?FZ5TK*F4'؊F7Y4jSHؾ^#GmOw]3w{7'Fiׯ,]q`e{5#wm4njiajcDEEEO>}x&DΤRs̙U*Unn`8p{Kx<]wlc]QQQTTbb;Z.3}Ex_®jN#~ lҤ0_Vҽ\wW٠H5 5FѺhTuWuryJ7.Z Һnf~ws/|:اCןZd3_ jS}ӥ_lӔϳb oa]VXX|@Vo۶92dW쑤R)3b Î;fsFy' F}Сr>l̰&?lذ'N:uBi^~~~^15ߓ 0@Pnݺ,OPXlͣtqO(γle)yyqwUGv_0ڱF}Io?V$O ԩu̬?|E8yݨ`O,7wQ Irۣ9f4ckw5N{zj|glԶU?~a]e9N{}~~?sČ9G6RUq>]rxK/SkJԣ$IMGZPHҦ6WcVG:k֬ׯ+JF# ku~kZ"## ȽAcǎrBr %bݫ}ٍN\<_g\ y᧎<])9ؘ;V]ҳ|άvЍ6~rjڒI FYETXCĞʢmO'Ζy[р6*F#Ѝ2y5mEʶׇE)K2iE\e8P;>z?T޸zݧ8ɞ'B!jQVVSO/6UOUK>i5b3 [Oi͟rO=[htՁ;+&;o֜ ;{1s?LzXu/%TÅMkGmHs:ױn_0Ўٌ'l:Qij53ʡeع GbㅦÁݶ1C|]{F.ky5|sxUb]iłO.GjL]b9A&9#;`". &.bOO5B!z lD1V;g{8|KytG}zUhd`1xӤda WqӵT96͢^GoniTutU:V+X h{wC[+hb#':sX~m7[B[4RGҡɫ"6C}n9X)z8# 5m~[pAmNV[l(</T4*:W z=4JcG=ZPUTE꨿R+@VwD!gTG;'m¡Ǖ3ϝ[6z4a꽚)Miڠ|@}j_W:ܦ۬| މ%EFvܣ[AеJ[Lj6̍!/>BϨ\X_oz5|%j2>\ycK>틟ohO0rag~X.`דCF9hw 4z,{nRfB%UUH0CV]͖ ko}sqkÎsxax+@;`L;))hAA0#&3{ F;:xbGT# /NMش~̈k?! s<^uGaPF ̉|Pu` @Uu٧~"EHPϙQ;,;x%aA~~>~ύ_|#`x;L`.o=S2n.1&^\ 3YYhaIqn)dfڲ ?R XT 6n@@ r<s/=q'z@5Kh~዗ 7km|c bKilKɾa4hJ jk-դ/4w?6A>\ت1XK'l >A>Dy倰uwecB}Q?B}'T}?خg#BM򙿱v/8rŕ/fTRg 6Szh4|[?BTk?|`m3Tyezw𺏷<&ށaNg:=x\xS P.^soꋯ_ԵS7܋o:곋SZ5t!‹}3 ~#0A=8>sR(e&u W >94~@ 0ߜx\~;`qfy,N0yQKr엧2揈Ebl&8~=N-y] ? OxQ+G(!p:41x5_5;i]ߏp24קMu!0Q찳AG3p/i.;|ѐSEg7V5^<˜o5oEpB;5 ՞M Ҷ@B b  Нű+>ߢKO4h?d/tb4PF\uonX̄Y u=1;ӐGIYpTo~޽}YLk@?eS|-{'b/=U6>yJ0r+5>`:ºxax(56 f=1W_05ߞ5ԖQ_|q76ħcq?D㋓nC pom[#9v3Ƈ'R8w<}M=3#k `LG:-D:ėrwNx1\x'mpjwfڢy}c;B&ʎ;'r[mմ}W`@:d$Tø ,( X{8#F-d4|d:=9c8 IDAT&A};FFǧ!z6 }.ϴPz *|8{֔hP:m#\f??v-j#6,rٲY }uSeNMĈ[⇌H=k5 ֭F8tp@ ZV(UBLY ƒsݛPy+2WAB!9;!Pp>>ts[YySo?~?^ىh(=2xP:S6FşG qw;wdO?{Ggڴ0ӇA& 9LpNYhx Vۙ3Qq/]}2tΌ@JR}or:ߏB!9[GW/{K}q)0RmP 2 n{#"MK{E 1gl^^ayZ TWRbGS^|-k͗myk} 9>o }Gu88廭lYX[J)i/ĕ9B!>Yw?䙡0^,`?g=ϗ~n?-x@Cb|l5u wbV$~Er)cںldՋ>t6ԟ. K8keOAi󁶖 AtyJc3PB(94EY!Yc+ (XZ7>QaB!98X\yo]Av-dƶeNsyM?z%/ Cb'j`{SjѢ(yu9qhgo34*E&\hiw61د߃H/oV[@VȲ‰2 A0r83{*a{OO> Auɉ 2i{[u`{gyF(!Bȱ ~yw$6C>}N!.GgLNVh_?t|c=}|BGػ׿>u?یyμr0zLI h(HX};۞/`VBq&= >o_c'n,3pc+SLf϶_js}0arn"a`źn"aسa8Kr0gvQinDa". &.bOO5hX2#`ီ+ B!x{ v́{&="!BwFvt" E!`MDŐi 8DL!B#ae$pqb*# 'Ƕ|B;}8,X fN@,dE0&J!Bd7@!B B!aB!P>B!B=&!B@#B!aB!P>B!B=&!B@neUږW\ND~{D`9{6wkC:V)>)j6( 򏋉 ‰hP%3%H 6( rhf&8S$Z^)WX,Vxh`dx3B!8[kOiL})|`n+ű8\L`ZD^P(cI*܈`iuz16:`˪˫dIQNdTIk IDKDf;ESZVm0{%PVp!Bc>6j'# IpeؾjK/WBWҨ$"?AF^b?| *bP8(?O|L&s]>bc"B!ppA!x0.,SWij޶$:h4kzJd(Q֦Ir2ѧ(jܨi7!.:M7XyCBI )B!r}8{dīٞߤ4Z}LT^HdS7Me51Q<'rŊ ʴIG3[,4M,OjjIyfz*3B!9\~ecqn)ueB$I\ 83۵ɐ~{YKEםS]SgZF f E9XёbP" t`\'>&B(GEX,`t8B!r#}@pxC ][@QTQq9"8LfX_~HpVg IhuJrڅ%P|AhLQ4Al'< Ih9!BK94tڰէӧMS_@FѠ4z?دVh2I0>Hb!\+3ͽc|y5)<4 XRY@wfy̌E7*f3HRT^ v&5yPiMsB!P#9dzYj wn; ͞8e~!(74e릵eLdhr؅ o Zu- >IVǧ 'sŶsL&s0G0wL]}|Eb]}DEIB!P>B!B^,mD!B}B! #B!tۭbB!}f!B&;S,L aB!0GgZ1G!BE3nI M$I3Y!Bui$58nWy{.J\_uCgLj8y"dh_)WZFUQ;>̗^ֺ ee[`/)Pӗ~i3 i0z1:[D(KGFc ҟ޾&W ,`I8r:}/ٮCQQü'gaq۾0rmz]BmIa/`^pcƍ,;"D1X}Qq Wd hkU~yV'/c1 CQJ<+,K2:֜®_F Vz5oZPWd1?3\FRQLOzz07l.d_}gJ @OU+f%v| S,蚳<4O{r:,}F/`^!_<Ԝy?hfNI8j d_x k# kڄޣ^{Q`N$W.ˉw? ~ؗ䷜KStLJiU/5 F=[RC5-ҦHr=ThF[:1n;)zVneT#7?vmÍlʿQ۴`˿'sn&, ."{q|'=uz9y]x2KIWȧ^8|<9^^ >AG6 |}?W'78)9lBt;R@<6}GީmW !YW[d'ӟ'9w\iý" hC~ y\(n>$#60^ZOIky?!F>kQr>߼Afƨ6^& K$U6Op8( |>G{=qkVܳkD F3w֮*aSCTFG -HH\ 8\kLE-fU fk@mlXxƄ8NB#;r9vB5!`b F0B#!XBF!`#k0B5!`b F0B#!XBF!`#k0B5!`b F0B#!XBF!`#k0B5!`b F0B#!XBF!`#kl7AbP(p84M$~!pr~)X,&nr^#BTb \.=!IIRT__0Kj 9IF=p~D<%)?{GTr8.#*JT _vCBlp8b*^DͿGB,gW "&  Ba]`1I^i#!A4z0{Ͽ@5sI Lqd>7\UdQj\znϹi`7¬ۅN Z*r+V+oek۝vCW礧TX TCm^:߮K/3oB5fKڡbw$w]7cVV)ZGUΑxad`EkowpL$3.Lt͔ u`:WԀZXk"n"f֛$"qX&Ajڨ-({`Ӧ%1!ãUf8Z㺳b6k׎Z1uL!lϭiƻqVžٜVmol`]8o)]ER`{ CDw?Olŵbx72͝h eJƷ+TLH},e!~LjZ30@|\wЧW2Vz{=Q kKbkbOІSǿX{U}󣿴 n|8 kN)Z_i4קe[[l`ӷ 2YIXt5eC̅i7,ڴs#K٪rr2녡j7$VEקm>O)A%aJk|4]VQ׃l(>GOgrgbݴU.H=;o{wd k={|?[ޙ!a WǑURnjnJeEna¤Lg0&q<,Ko%q As/ VB}" b#n'g珈48wԈ~_pej m"J[4iœ;ye[b>Td&Jve^Z7G ЎNO^o{@Y R]@He`* $b<@4uW\H!$Mtck , @Cf>4QQ2pzH%Q-S;jD\&龊q]'~-͏( 6Op$۶[y>Pc~ pAm5K-z|pn`k[5o;0C[^D) O^VZ# ZFСjNq]K0   6U5@1@ 86̻2;j{#I"v'%')-oബzaPT%)Epc*M/8䗟;gAkhPEnfuj`" hX@8inX|>R1B- 8nEZVNWZҶgKz Sjf`F@*w*eUrawho)%ܾB/D4rx蝔kRi5"L&u%xzb V+(%M3U3+~fQNMi3E^S"~1x=ďRuyYD;yMŝҤјpE˯(PZgJ[bdG:}X޼ᰃC--= @&Q=4h8ڤ'֦e{EFi5Af%7t[4 QX(]Ɲ{Zmݳ:Ыݤ/M)݅`u6K`,Sg0Uy%Fn9dVc((,-Ny۵~9Wv0YX,shT`22A#ݚhdfF"(#&Dbn4A@94ޡ\WkJ,QeB.MCX7â|iE)Q"G}V;#;AٚV$*_[o#'o^:DAm[8fE`}Sru_oX]nv&NYڻJHDVǑr7neI7L m1rP`yV+ eGMy ({b#qM ]X/LՋ 1+Py.{Orrc^btK#kBt}@J.Bh@zf<T*=Mf\r9NU$0 p_}0i#! ٌ7@0 @ؓD n0ݖFp/8DQTEB/L&p5g{ :. ohУal6[]]K{CDuuli(<@Уy7555a/jz^"D"CӴK !(l4 ?t:*z5y pm #>c>Ÿ!`b F0B#!XBF!`#k0B5!`b |\.r De"zX9/E@(% n|?b1AKs8LB7*7id2f̎^d >0z$cF&fWUC"`"p8pbT9 \. HvCBl $I:aG8 Ϋ5z9s7и\.? U` Fw0B(^zU9p #b` qU?!4 \rL5AN[jӳklL޹}TY5֦R{ӳq/P.ieUz%O!x(y"ZOo]3K4"z^-BsM/^{bg룤V]u_1,T/2P0y7>,񿫔U9u\Ҟ9p/ )A<ڌ䁛7=c1*cC\$ ظQyLIВ'J!Ƿ}O|'7'jZ/Z䉺B'U뻭0s9kD슯tcOAR<sz9͙_ƅҿr!Z֗hy&=$CLM\Ns wc_nՄNe*RΦ38fHvG0?_L9e4i,EQ/ߞ=mKv&X⊹Ǧc VLQ Bo1tX)a9/ lzDك2>K%fDdXBt불_Ex_]Т105KAj~ߑiy/?M Sm2 z{_|8yxxEij %ASG%_;ayyxȸ+gyyOʬX,]o5+PUj@ YDU⫤ZJ&?k& H}CCStv*ޞno9Eopܛ @H*x5`[}w':˄ `1Cn_S#V:N- 2]VVzj[RJwoB0d 85{RN2ʒgW$^Ů[9AI0pMw~,6*_Wֽ|m\r(ionY}}n[ 6sފi!#/aCͼM|/xgh,Dva@>=7[?Y+ſ*P /;'0::g$MFChWs;0/(TvK}is٘WKiٽe {h:O>tĩ)y +ʾ6f(*6[SÖcM!Bx 1 0 ӓI 1*9M=y\P4y3ׁs+^~71ݐguyiPaϽ4'pkωyG7/+JL.\?'`h@;|Eq ]ǡ+͋?sdggL}}Ul(9ZҼGBkyvEE?OKE)bKwq0:ͷ=ȳ%[V˱}űxBFcs$p/wTA#v~~-"ܖt/Yڻe< 10 ] Ϋ#}Q72,q Z2`ܔa*Qs^2z*vvQjfIvU) qQ4I[o[7p*ɃtzϮ㭠{w]!ҋ;rAUB!:#(((뻿j Pۦ"t&b\WA=\Eq%j$uBa4 J!pa`8;|>_IRNQلv!M4M;tjT IDAT%5c@ 0Ax<><Njê3nv;0_?|>ifX\xwDA$Ir\O$IxP &B#!XBF!`#k0B5!`b F0BώG(x~ 󩬶pØq/̓\!&Q*r;#1V}΀+"c|HCѣ_7D  9?e.]93Lk42%ݽ3C0gEA}=_WwۭV}ugÃT;a>\aʹtjʥLqABrMsݽC5`>^Q!, ~|?{E5 .Pzo? y=<\+V_zyq9c_aPg3v3 _|Vy0{Ug>>n'dEm7D=X\֒dzc~dvH|~Jc|7YCm Gn!'A1i ] kؼYǸ9coy̺&6yI˧]WB_ޫ0OzЌ^@ZBEM{ȹ_L&|n'xC//(gQ42dhS+&Q3=7&Pkj f,%SUqi9tr(3@(CQyq;Ζv(9gdvvD8CCq#~IJiC[ 9&Ve.7!n4)l˪|#rX.$/ #^?,mQN߳3~ k*@@\Ca&w 6RF}|T/n\s&dQULʹ@pA+Q%q; ωr-&+d{cƫU\'?oy"MgB<=l\wұmUg~TM/Z]QQRQ0Ȑbίt5- Wu6H[o!\pxg*B*/VIrx!'B#!XBF!`#k0B5!`b F0B#!XBF!`#k0B5!`b F0B#!XBF!`#k0B5!`b F0B#!XBF!`#k0B5!`b F0B#!XBF!`#k0B5!`b F0B#!XBF!`#k0B5!`b F0B#!XS ðX)nBhp{,`ng fX,l7!4`0B,c%`4#vh4tFgXzK⺤GhX,$I-B;ahlV(WU|?(2L& l8BF!`#k0B5!`b F0B#!XBF!`#k0B5Ő4l7!4`~4bCoR'.1 ^.gA #>Y($͡B7zy12S'"~Q=C=\Lk#~"X]i۹z9Ϸ~چz8= 1STm*VfoI髑=70Ån][^V)tmK Jˮz2C㫆ƮqaxONu=몆k6saoWFtĖ|jj>`"6y0f2up׎3<{5o}߸jHdz2k}Hp5ÀiHÔ&|F"a0j5,);? {~x>}EKʾ m˞)a{ lDtM](39{9K'RߔW;5y$Wn-gvrK;,ǺH dja !W %<'OS/LL_uo<(O;\Y9C'!/ L~J.Ʌ|B>tZ7ֿ;g'ߡ˗Mz1e?ײ ˧kH-uŵ\_ #!\Bo OT)PN+x';Fw{A&|@b! D0B1c!ZF!`#k0B5!`b F0B#!XBF!`#k0B5!`b F0B#!XBqMaz*ij}aY6\XU^-._/;ݨB]?M|ٗ{X\zt9lդ[3/(*& b|̐Ql7 L;Rr@6yj1gd0crFoTK(3٤)~t[pJ.7lXTj>pl#.h!B\2S YN7.Uz%L^~}n@0IujGIGJ&;B+Cd6ܭh;gKzC'^w^XJ ,/B\sCgMKcdp'mb_S'2&{g3GN5#[/ܗѼ8F~-ēy5oW5{=Vl\ؐ} yO ]w"G4֭)9uc1e5,BȻe/BVy_.Q-|-kw/R;LzC>0ڎޙ!aAw=Klp~Xbm*,&mw[ǬBMY2ֿKXeoEQ WTy'A]^U캤@@e0X9~jMm  :j;c!!;5|elMҟ>8v6sW>ͱ*D 3'C-W,!Gmonh~fw-Q;bf~tXISWءhk0VT"$*Q_ce..2yg/KN>z1<#-rfG<3˳0 ЀqM_Ƃ5k_=φlKyȥ!`oMvI5Zg4-ˆ( ݑ/68Is:}!Xly ̩qq+HbkRB矊DgO01ne^BZX&![*E+tPvȷ ϐ{.oA :1؍K Vj=A|Wci6ؚ[=$Ş#F=a JqT1~B<|gd2_n>G9-}w/yuFjOJVM8{m֡]X#_zNP=,Sl/B52w lR4S~kVt7ߝmZ tI+$oCs?}cmqAQO(U]<9 i6G{@B|Ԝq`Ak~  m͌SkG!?a.QwQ6צ^y염r;@Zy#Yʱ;"4`Qs'X;-"[O}OZmp;~;Qn6#4~;<)XTףJ *gΚ{uƑH3(ZA)i:pPY) 4l&'\θ.u]l_ܥ# kFuǟ+fy0bGM\6e Dp<B>fႍv ޠāpeepm*nv==nvqsڰL u9a ,|}gk2&]=6F6-#+2JT\RY7'ܿQu uzą ]Bn#Ms#–ܽx0pop@D= GcAv *ۙ ]~NԠn7Tsa_|wn©q/@w5{P _d6 c?㣜?OHpu<\Um:Z/Z˳+**yZ*J1II%ivrUGzrnb嗧bT$ Rwhno4U`Ɏ} td <]_bDWyaKR=dip"bUfbvjj[L|_);g$_b/BYj~Rhv8ڣZJZpe)իk>1$U!ڃnUlXT׋UBVuAGJ+wUh@V$*_[o#'o^:DAm[8fE`;bҸ*2~Fݣu >{̘I@r'vWP+Yk u4ɽeBӖs{E vH5yyu\fh fH5?A;hsuyw/U]z؈MVF*[c(.<".VsBF!`#k0B5!`b F0B#!XBF!`#k0B5!tBr2 Mp8E9n7A`Ap8)"IaM&Kډ8P+2a@y<^Hx1 #)zda#tX,v8%ÑH$C,G聃P#.KH$ $Ir&2ǂjFIA[O8_y=P#.Oa/9a#t@F{0ÿ0/s*kk=)2yP~F"ݥtY? L]Lq{OيJ3.3ey|#gvh:7{ŋ8XYpjfv/il]p-819#~|oB-=JF E TibnZƨѕUUoDJ=<kSV.lݗ9~cM!=1RuWP4xA7m/$^^"KMoڼM<.m6Z_i4~ dο,ń 7f'8n  `Ⱦ Q7wn?'|ak̝4i<کs6Z"nq|MǧuhOoiqbkuQ.dl tUƏJ#zEW'qby0iv娏#2<:i<>ͭQq/0Bbf&ڲN&`g/<7g'9/ IDATx(mZOխV]$fDLMpTϙκ;h 7yb14E!+fD_~u&Nl1^QkaW³1m=bV5ɽ1( ]lP}`TWTczKey!lu P{K sx. d;IV$/LX.%KׯMP/9_"sżv64-zi50ҷ&q{ɪ-X7rIcr$2 ūʫj 6ފB5-ى[k315|8e55U?`d#N$ʚ?ާSl.2Bkʼnyoء;->r&_aEfzVVSf-:*R @/L4s H.M X;mn0`7;/5ʛos)9>:eqKxA;s)6'!/?37_~Z,|/ F 黳w?{ژWorh<TNe܋jԂqL۪6߹_|(pP JT3><8uȤb[ڜa<|?zҒ x_~O_?8GƂmU%ΏCp&4?'ص*`O;ǚrpb[\8s6edleX撸/N4o2Йʠi]}̎gfDJVCґǴ.ʣ9m)#絚QWQa$5-R+ O DlcNF6H斵='WE-+925C 7}^o09'FI<*nKi14BPi_ )4a.?_Wn*l)LTeN1O @&HE[ 1O&>;k^ԖW2ϭAmu (|-;<ߘ]+5|a0 +x3n zP({**6:Bu/>S,Z~= q @vITI|ssc,=ݱ%4?="q ʙTLeTUZՐ !~uc KYj; ĝzu7n2PZN6z&(" jc4I4QrMFsM5h&cDEJ˲}, LJgwvfzgϜ92yjSn̪:Ǩ2KPP$%Ӕ)C\yʤ["8qa&@Cg[R`^~ܑҎ `_ДZ3=Nͨc/COϬ֥j9I”b6Ծǥݼt<`8zb%s&^:0>잔_+wc(zW+ON : tjDd!G7h2tvq䊓,ykNP]^xg#v#B<(,uO.|>Rߜ?l Kan;neNs٧/y_{3Fag.NU-- IY܊|KuPwľ͖>~o.#.G xNc֭ێƗ)B^4{Ejz!F0!qеs皹F ]\]ÔgS:FKD"1};ǔ܆y^m N1n> T"Ŏ~^{6Jυ njLO8̹BEYOg(j/?K/m><N3/zk M-yacFIP(,2I@$ ry`I$aRi3M)IQT*eF"4QP k'ŦJPӬA4}ts FBK^[#j--Da=@F0jaX]}:d,o-)NqelS|uɆF>s%UwܹkNB&X@񭘃e-bEy: E3Ե-,V= 98U}U>m;#p{־2G֡U{2ޙ(jcBX"˜Kv&{;Ҫņ䰗^DlSֶ;~n_Rr秵W*xIGGLzUcG٤5=)^y%ox2ÞJ0ۗb$d$up̋o}7P9)iQLE'4Vc5?x]+sɇ)Wu^Ĵ+:jZ@EʄK1Wn?H.;u5""ȁj!dMTԧ !Ƣp JE =8L _ZYWх0)HdV}ŭ/?6\q=miFz1[Q/HM'd^vœrAc^;h'Y1ʚKx}ifSڬtϾoĘI!}?קq'7vU0c|76ZofWzeC\9vjUS=Æ,Q&>~vaO[ 2b}Udn;S}w'9ϻ{)X5$ǻ.CƞWFE49+"'DHs.$HPP˙/H2bGgȿ;5]^C^X<'-hP"ڑ&f転 O،cmA4t9P0 O&F64]%EI٭}!C<\:J p+OݤrAǏ'1k)%=+~rAhώ0(޸q ** $ `%CK}ҁ&pO[=[Qr/͛ zH}`NunÚ"7,R̘OJwvxx+U XHp {lWٽ[|5.m5zֲA> "Rc3NAUݝ!FJS2ES=ʽsy*1K'XXXwtqPubOWv.BTFp~^Bec%{ziYENR!tw=+b{< B$qQqٿ~oLӯY8HX%2o/2>U8wW:eʣU>ZܪJ,hp @{ǽ\TW1qOo0 ]{.UQ_Yޘ77_W05yEԓ'/~@J iERRڍς`9h5 zZB(uZu/)ݢwh5fğN xί],OIM0î1trE75פù{iA7vyqEw>fom]Y"׬KHď?#8mO5%_3(<\qB*S؄+"GD8m#rrs 'H.]_~=Yy˯ B[*2-L`'X`0^l/FzԈLCCqʀC;U߿ `c|nmF1ܳSѿ^+vҔ%^e!: 2-yu[|i{o}w55vOj9 AK~=#Ƿ\)t; {Kro?S5jN/G H#Ts'N |: vD,m-&{AnH+Ԩ9 1lyCk'~ |nHXd-wPs:W!15F{ 7Oge{ yaOy?F0@$w{ld_*;ȥ7hҹ˗b'`k nN" =)Qǃgz<6ݰvYPk}'pZYU>Mzo~Щ}~ew VuX@XSpYu#ͼt :F6~5īzx&{?d&.}]wP3|E!r6?Ć=)%zwU%U\;R羃;ع8).Sj6Srd"$UuQeqLEMVĞ %5/cDd47㲰 ]aR9vƔpoq-Begw~s<5'䁇:) .Y{iKsrss)l}3K+yx&\?pz2IK渋=Mtv3`K%|=)%/VǨ+W)PpV,2xQju*, w3CTnd=☍'MY<.,rpGF45 VeԨ)\bKsJsfuJ_;!9w`#' N^{Ss{OxytOT~>g>ӸNU-- IY܊|KuPwľ͖>~o.#.G xNc֭ێƗ)B^4{Ejz!Fk5xgVDEJ_8@ ~"*>`Wqs=nj`DVw>ʺ |C41M1هw!sЀCTϫжYI Si797BȺ攴m<˰@T{\ziQO7p5qv~ף\[\mX,n k4Ym Ek`,F,mqNn ^5jW׭񉐍U$IRTK0^_{la+ ,<ϲlë'B#j ô@NcP;P$jo35QYz = FȜP(T*2h4,KVjn98RfP-"HV!B!Aд}`0F#󘿨 F0B B N{yGA$I4F0Bu IR(īf_!d5!d5!d5!d5!d5!d5!d5!d5!d5!d5xi(M4}V!aeq`d#IH$ (2ʼnWPL3U$G"0 #J1y(J*2 #H]d0Gi ]Ժb.>`u X,Y|%)Kb )/ґ'$w2>;j[,f &oZMZiM5wދ=s|Qq&YHC[ַ[QsNn|<[`Zw%_ڜfX][ŝ? @L[nZ΁O9v?)V8KbXev\BR̅k>rT`K?D)oAP,(T^Q^Gq,dm1?2b8;ww )M`@*у(;@OW^5_'( ӫZg5ť2~d/Uފחf <={RXW#Ô?W+^;Go}/}ݴ txѓy"(oEeyc^8գVrĚ#Eه֜ ~iΣZ? x|t-U;}W4b [GO}J< ސNw&vʒEj0˲7h"ۀY_כ=[f}Q`E QpG/#|2<^)jV=ýT:q:{A/p5k-̖g9aΏ\ -TR 7o_6;ze&MW{K[t./T.C׼?B: "X5_m_7!*Z|{s_W,~ۉi˗ D"̱k{wKXA:}@seWP;;2?֧y|՚ ͈GN? qH<<%I%v Oh;ǒ_oK~nWwMϳ-D.? @9(C]4f]|K/I> IDAT^@d!v3=Rto/ya79ȿɯvPU I{ Ke?>ʣ>[SQ~>xv[LkB֡gǩ<:vsCGNܳnABI P@2ӰApԔ`1ܫ*TGѻ3C?zwGoikUln5{^O%y /Fo\qժ.j?KEK`VKw"/p&婥bSp>}070$0lw)JK@$EQ@ms)C:8?З_ Z+TVp_(<5eDZYf7q(jcGyk9\y dgKcd@U@f LIJb]+.Pc?_S,IyJҪw82crGuԳI5^j _X`]ƍ[}#p,ˁy_ܿb=c{ǃ]yP+L)fC[EXy}osM@ B,澝'zsOkM#u?eOyzڀNvo%ˤ e jVT$i\u_6,-)Jv9 G}0MVts~@fqQ_م5˭*sո kf~cTʾ׳ ;{}ڲb %$D js:uw9$4IA@ĬtZ`2{a~25L&z(SEϫ:ګ[(ѰaQ~u4 iyt&EAeC,?,{tFމ/w{ ܒG5;"--2;xlËb-F] dM ¢ltpJ5+2OHj^O/#4 zkYeYY&`70x5Ncڥ@6#HTզ؄AOe٪*ױG}% JL&3,˒].d88RD oFDj @  MWù_ѣT`4yEU0P(8`0tǙsAA$M #)NEA bb떡'g,EA"uXuˀBj Ο3<-] !@KQ.z+!,!d5!d5!d5!d5!d5!d58Gi(MD4QL0 ˲8S02$$ AE+~*Iy8Fc![hr4ߠP(A$I H$x.#HJ P%JH$. #@4Avvv.jbi`kYVF0ͺM|CMaEtVp#%`+`4F0HA'YV$d YV':sh4Ѩ7:ZQh={NLUKZ4vG5KDc+M h$=m\8ƫ5g_sە8aΒH{ J W.Ȋ:~{"s1J/7׬R;?REYY#8e[z!/,WryC% չ%y}ifSjF;M|qTkK=;p 'A(wqPb0[O: gY̟7Q=o^W1WqwdWAP)BcD={41;GX8B4cܙ;g0I}ԫ*[;6Af/)]NYhZfYv=wB\UBd^>vǁ'?^uOw!@AƋGj_5.6q?5yEJ#{{ggpa;W :zR_O @oC}0b}KK~z/OMeGO7^w)̲7﹝|܀]@d,q{6〃\"bcPUšKWDl۰T1x*5mYk^76[k^{GL1{!R4kHDe3/?"՜QV ]bt6uuv{*H}y^>a%܄PZ@?u,tP#"j )FΟ1r%G~R㌅Jj_$ SP1. ҜLJcf w\1w7ww}k\z\4|3@/Vܷe F0x_Z\^?]I B? nx *d_|uM-v?<#>iiieee拤q7@gaذx[yWX,noye)^F Kh4:ڥh)➀Bh$ Zyp\U35" àq,+2igC<^Od3"( Ml7˲<ϳ,=V$T#qC(t:q.a7Ij0 ,[U:/BRdFeY˅lqǙxW*"QB FpD"ZM@  +ܯQj`0G"0 #J1y(J*2 #H\?C,uo94Maggg킠M,+O~ӬA7ZT@biB;l7^YJW+|S+R(mYJ`#L4v# bI?qfZْQV6Ww硫Ot;mD r+˺|gRf<34Sfe壼Oy]ƔeNR{?0^FN@k>U9)gn({ѻrgS!s ×dUt3&L 2MKro[}Do_xl8]ryC% {wð4X)mT[Xu7woD|nk3<<ϟ:3t@D},{j/eu5UW7GT&/}85' +:}CLxo67[E⨀JgޚcZ59+"'DHs.$HPP˙/H2bGgď9*TP5SISrzewH?ϛ-͍?+r Be  ȽB>`T"uG䰙] +[#psA_GwK+ r@*<[˦FpG0Mw.ٙO 5ӣzNXjoHsܷG~s <"/xW sv{{Y㊷^Ɲo2+q|νK6w>JQҽTq^$ܝ<V>*ʔ*5xs;Kzv/8dlZcѿ{ޘ7£e \D#PƧj'Jl]yG+}[5>4WsabP_u־=k3/x"S_p_V")]mW+.='j&GP&֘5RR7rvk"Y=Ӗ/б R*1/%Bj &"?Oe"' X |+CC*a,X1OSS#X60"R8)j%tz :xu8кХ+jKmQG*7yhi/j,x8/G|mj_i~Sy?YkU fB(Af&NgiBgRx @WAyc]"FW;z-mnښ|ͳnɟkHKfPy ZRYU~Y_'9M]2k i/>\ *R}p%=.OGo||A։2</{5oY3u$Ag?oQb#I|{n%ٹ*0ƥL3z5^XL\ybܺ55vOj9 AK~=#Ƿ\)t; {Kro?S5jN/G HS͊ݸVO_E̛=1K ;69QK\t7}cԎV_P;@JřξbJ5"WXTyT>sLM]ʽ\(;w4\IS^,s3jr_5xX_7Ow'W{\P Z~篊+3*%:sC-M`UJRR2H;FD`Ks*FW\ZWzĥ#T1%[{ Ptx(z/9ߨaȜuCƈH⥑g,-_\ 䑟k8c~9I”b6Ծǥ$NχZc7|y^ߎP>]="L{@)J?I9<5xRܞ̎ w*J@UTm^Ul[F0aЪܟ:ӵ\Lq {Ncά6 LA#s v9ﵷ:Ŝ>Dw_:М;ώsS"Hп_Y֕3y)yF/",_{•2?7wGB.uruu#$fr+;x5cjogSe8ϱ^N oPSu>"r8{-\^`ݹuo|8`#{8/;3VO̞߱Oit0x$QkygVDE_8@ ~"](kqS$24boNN=M "9CIN܌qřG:UlWr7 IN^^6/ى@9" yR|-M@uO;]'1p2q6qHKK++1Y4.9`&Hl:,e~ ^Ǥht:ݣuvn#4陠NJo d^YoȿĶ;"l@nϮl:w\N{Й n5Vckٯf;@3X^reG k'> e3A{IP)a)] ,Yrxw`͖z m#y["xQ Jez0v³kvם\\fHNZo/QЫJ (V i?o +m/ wcA5摝0#u$ЕQ{#TN8~>1/zo}鷊%}~{ ~mt~z V 2Xy H(\cۖUȽ'lΨQj@ wBmt%ceԾ {gF`+fhu=cw:N}pxq9>FcXuJ\];" %8qmKkO[o `+?e``>82t ԽU;|,# |m}1 .< }M,{iOn|㉒φ׾.6Py*^'%vH ϥT@~ v̈́^`8hOC!Fb`?}ȉü@ x9l_/Yտv}]yR^hvWDaH3Cv.GE<@`Y0qjO[fxDZZZYYv'%_ۣ-YBv>h4Im2Z!oҵ{Ci  [lA yF]:k,jωkg#-dlٱ5hPñnv*nz$)=7caF[Y^.ƫǠS.̲,,b zTYM/ۓs,Xcѣq,T6b0M<Ƃ!/T&ݾ["BHB ,z!!B{;mhhBVh"TH$gi>}*#B ?4E"bOOR˕xzJB!Tt !&mK*<!*&E5E0<"!Et|B:S!Gyv=FiOQ]))B!t؆jV]G_: /hصOQױרwk73_;V4[}t!2X怂'(`c펎mڵcۦ3>> W,޿gǸĈ!2dr@$(``3vOothMM(B "*!!KjV:7n XWgO s1׬V;<Ia!2hPX kv@hx_Hij^:JnѤ^!2pPNXnL*5iOڱ%кylwyPNB6B=yyq#ӿ~ {[+J٬H)j?5B!d2V(hy~-ʻVѼ|F{B%!ʏlJ(h8W:Ueo?xWЭSljxB!\F<WWׯ+ddl_D"eNjfffddE!PA4d+"*F.riPJ###ccc"Bx \?h瞣O~] JeTT\. zCBD! X[7_D,e &&accc(wB!Tl ;Rt[qqqVVVr<B!T  % ]h4X!PiPLH$BT)䁁!*+0 B CB!d0 B CB!d0 B CB!d0 B CB!d0 B CB!d0 B o臾Z." z_ÖpA(\Φׂj6%]BŅgS5F?E](TBu`E{[B oKQ4 ^E!ʮ t?-B *z Oa_Q"ixI!PW aI!PW8JK!XB@`\Q:?!5;0@?²,0B;(B( Ok^KU@q"+³t_ãn86v104@PxpE̱1F h8:>GQ@ ‡G!JjBpզqAMaD=!}:4 V{ YmaaH醰!<) \gEš_`M>B!T80е$?X*t!Ц9gqnd׳,b7j X& \?&r㰿O38"lXk尪3O`;j)(sxo$#Wi[dCpY6#BeTф9`?@;u = KhdOA7"ݖރwlʼi 7PϷzV&φS%$DE+PUн3%vmThʌBeNQFu 젷] x /B"͠iNA 9! (_֦0yE zSW1˼^g'ccI\zgr))ƿt3ɣA w| lMӦMpz}yneTO i T6Nِ{WJ/~k%Iwif_d י4ϵ0!T&0y9rłN0@7C 2iQ+W!9`f Cہ}J|{ZYtc̄9֨mv֨zmsx%Uo1]cme_UהN7&s#976S{-M7SOn7k?2BbY'+`@-hmB2). rj uv@{@-h 1i kG$> tr8/~a/*649Wrfp5YF=x*6>ACUi>w.t2unG5۴!ONiF>|723kkk9R3 "cskkk\ƂښPRR :jC`n]?02s̥Žp^r)lְ Q;WMvp`; -k.OJʽ7F0e2ߘ_o7Xxzl} ][hO&y\%PƼ,$wC#FM-nXhaQ^QiφU K}BXSb7 26X !yX(_'z6_*ՠJ`uWp4@C%xaWv, ~+\_z(utfw7]+W7ήv?rέrM9)v5{jʩ]?n U?4㯊њݷ4rm,2Ql,RPC}5@STw`#Ԁm~V lB 3|O@йlBX]c vNl (UD7jp&t>|zK=`Au6:Lj V>luuiT aՠ}Ub IY`*A03a ?.X ۫rvMW-n/φB ;'Q#l3)OO03㯰&DVe(_A~N$oxۏLA)zn*q'gvks:񔅳ϴ=eEh\wk0mW M߿zE!.TM 7kg y>ҳuKڱ&D@6 B+8«lgң.gӒ.AF؈`kNx>F5/Y|˄~6)mj5aѲlZ6.Ս^ldj_Y=kF4{u*9Y]bDxgf}첟"x}Q~'#@f2lC|v Nr%]OG~_vK+q̒~]ZTw1Peئ#'8pgM#'0D|cO*w54`捛~ra㱀j6MdZkڽOC_*Q!0 @zk5I5jDk$w?jT8KRoMܳM}L*j\CCC`)WBؘ:'͊. *vJh- t8}uAqsΊ@0 BƬAq=__v讇UkJlM:-9S,m]̥E!ʼ@bR| \gSr^)_J&'i^ZB+E! ֥Z5$x74IN4.&Zr`)P=9K1 B_TLW_{1"mؿг^gLJs)BŎY L*8Y@!P.J20MgkςN{xEdm^k]D%W\T;wy4e>W7<:늓!J2ȌM%,r,xf剧q?|8Hs`]7}v^$c!UE ܌Y b[='~7KAv',pK47St]AUh?y-t쐮+>ܾ䲸Ϝ5^~gLG[;ڔǬӘ?<! Tb^nj:ɏ-!boP w{m=̏q囩[;%yѵ8Q`(t3cdxu"-9B-%4f7+tMթo.eINߎӁX)0B Pi$~o?hԼQkL*7a?U%)9Iaˮ"P&P#{$M]tD$lTGv!w`i! 'LҌ ?/TmW`2_jƶj΍p)J!jhe7U\moE- L_ GTVaE5b6 .}^1ʵEwkܩ4 M_/+ !OxDHRQMN]ߟb[w.ʉbEm}5\DPus2 ϝ8Q~g=9B!o VDXZ8jҵofe)ȩŐ?*'JuB/A]]]KLR9%$!˅:44B!!!2PB!!!2PB!!!2PB!!!2PB!U!},Xr?Xq7s:]nxw}qaQ+\Mxc~Q4 Mzo\!*L%|] 0GÈtu3|rM;Tyg͌59ISKK~?}k&j2qȅ IDAT\_y{VxA?mSGeXFݜ3j\N Q^hB_x/؏hCI |F r貹-qBV3g̜i-R^toj,a[cЌM}];3?5zf;b?&0croԼ@MkPM9,ⅬC;: h` y֖?5؇N&[ϐF@.vE(L-&vzҍ3Ff-{eFϘ8;":W*/tdш=-WC!P(@έnk5G߽{ߗcVU3۬ue(+3`=鞉K3N?؞rG~ʴOMk qO|DCPB@z8j%jA$`X7=N ?}ئA{M ;q;ygK|mF]ݫ \THB` u]re@t1*L{C }+m 42 <}\лOqo>&SS}CzfF|=Wm7&l:賈ZU^U8m]ml;)'TրXᛸNԥErKԟ!c5 nfqkw>Ħ P%21ǎ~6O?SB(J;@dXт0XV&h [q~Z BJ Xvl72u~)3 %7R{ք2۷YgRPz}:y|妍&i4  MnqҖ#NTlTl&r歝K M۴h fQ!P( cdޝԸ}z^"Q,q|<+k{c ; j{;}:{4#ܨ66'|U:k3 6Yڍ("8sּ#&|z^M=r jҫs[.pv7ΚxN !P)5!f;{aC6cTo=P*ܽjZijƩ$N%ͯV0 RȜRRX9YNc"h".ױksv\m'Ieb./Tx7xQU;U\⢢Ո5ӵp׾~1~m?e hhPkנ} œ/!B_T]E?Ʒish#@p^`bth K=|_+!ڻ_{m\;V'wf43 ӭH,=6tk1gҖ'v3{Ng\N*C#9;=iYAP*yսe,:jIUkm&V8?!P*@!QPe\zjB2ݭ7=60N_D^QBZǥHW0Wq!dX 5˅:44C@@)bh)k"`BWC@ALBVҥ@R㸢!"B(6)P @J !@)6 ʖ&!"i@8 4sHI(S @)K5*!%&&j4(`Ù' E"w}آa@eZeY]V( F4)))..N? ^$1aJ>^*|@J!2AxP~% B?e~!2xa!3 0??xss)T$ZP DB\"/j'<$(a "h v@h4yoW402EbcF@)ϲeI70SP,È%wy(|V--Eeeߢ!% )i{yS_KHt8 K (E*tRl 0%E!%<ǒ&@!@jFBR"8J,f E p0+= PkB(O$FRJgu.Oxrf8BGn\39).wMb\Ttlʿ$UsFQ燏^ĭL%0|y@@(Rjt}{* QHjG[Dhlog""|cOTٺ6& Txhv101^[:C\yMZܫLqRHjhO5&Xk`.\ӦX=Ιku,W̘7wOCD-LZY!|F3fbZvf+"&:EEbQIpё R yRQ*JA..OJr;>JK2¼0XVLlym{bsfcv|~0P^D6ߎTs->AK@}Ĕ{C/on>k?ZuI^o\*]|ZHʚ pTfoDq*RG)P(2)#bB 9!JJUk@0?euaRkb4_}=׮::IGjj2blKi8 T\~~n Ktd57FC'Or>ȸՠ^=A>v'o~ʹxof/eݼ` 2ZNP@ 8@%*2YVT((Zrb,3n^TgD ~lxa.7t뗇ɇ7ǖ +¯9kU-=]q'_:tm_K͖6LH|pBE%G˗, (;qtS1n=jZP&`X]nwnXm{uwgۈYj'B9ޅ?7Hm,? ̃o9E6$esTfh3JN%*TbHT}67qŠ l=z| ,QV/E}Yvy)'ߊR^3]C.)>>&ݬ`M&S(vm:elƳK6qv݇{$rwVZBX C*3tV?nA )GuJU@//5yP+[BD&6Lcbc/2I.1:~oG^tǭ'tkhU5ϒ5dzQT5 (^"ơI>V=ν[%c>g1+?}7KVhfkm*!@5@ݻJBѼ~&yU ;w|R,kk,}.[olu߷N\ގ* ފ3, P)g{m4hTg!e7YF$`TڢDkL@f ^H}&h]eBȰ)^^|Cc6_spU|uZ :;+I穏3iƲiw8?f"|lyaZysq ElB@X4¶gמuM^ (Ԗ[;d vUvo9M>tY/ y!~kkH<< FvۈMq=\^|ca{9023B5G|ߦsbxmֶOgΜ!GF՞hɢ&;:[*K MRQw:94~``?׿6Bribbz-k1DT(UJ ,+,+D1(c=r8U<9XhGԔQ+Qvu Tlb]H]wSȵ &( ۱_]Q&eL:ګ8|q[=|s.!tcM{k>2*^Fba芪1@$`_>u3gEQ,b!T/1vp0Tf*~q!d޽?ʭ_X VzT%3[%=& {Ty6c`Ԣ]+vXhwq}f9+ ;&F|4rB# e!XXkkBe%׈!y32yC@fZXnWAaòh?أ]lrYpGۚв[~L$4B?T,-˷E4@PbWrɣOrFg%y|阑U:uݾSoC${WA;, (d*.)P`i$-"jeqxuf:N,HCy!|ߎx7e//˸k2B\ۆ&] ޯpZu隆FG O 9RƀҔ @)%LcHކ'K;*2r\Rq9 =(rN(<΍dbzDIїcG'H#OO7nMR@svwϋƲʜ{t†WvRٗ9;'[3zˑfVUUMȫwLFh/He@D҆e+ӠF P @(e 1 CgZg90V2ۉ9w&0ŧ8`A)m칷aEbxܭ=x{*۔XזvWިw+kѨV2!e.O6O9Mү yToɔI#;."QO^zH"ȡuBbܟ]FO|+OB;Ѡ=qԟN>mBzUO2z1}7}ax Z]| >Rq6x!d! V/@. i@!TpB( !B( !B( !B( !B( !B( !B( !B( !B( !B( !B( !J)>16FS,gq?*ҡ+c<н]{i>\Y8ZDeԽpɮK*B} AIїWoM]$@c/-6ua^[qNɱG{̾Ȓv|W_;_4ߖp=62B)%+\˻&5C8yխ .YyHRNkpkTNB&޼֭w>ܧ=eگG2RT)S!j?<bѬ*^g%423/T±ႎ-e$ }7ξ @5qILLl|~ˋá i+[Ԍ*>m1YytD++m_7*7?g6oȼL)mь4h/# lW*ⳑG. ~iq=@D}l6>&kў}76e kȟQFVOWje+e(N=)n,+GOZ>3rCQMݿ\zٕ.ْ&3 ;iS9| MqYs&t+(^S;yK &acY +~e =i\̵Z9)ֿtk`s[~!d "|VzBDxSFyTV;sꌃ+tU+rkbܫN9 3u n(7;}̹}_ڧ:~-+޸{{kNioߋtx\85}w47vb>-oҼh 5k$ܝ_sJ#i [g{WM?Nye$FN9VЪA,o^μ?~̄]8Jb7yײ^uo&~JZB5v\vBCB(+[vSаEN8痜m@֞$<; A&-'45 Uwդ3'ާCT^=fD䧦'vȊ`?^twVkzsͻ߭pD^cBz6*}͑k ȥڳ]M{ 誄Fuů*B3#ѩɏN_. ~&R,9RŁۆ}?׵5f*gz8IOq1qm6brG?59$'?iBAҤM\질$ # Ѭe Ʒ-Yz}rߞ'wtk[g|_lAlޥٻ0*!v7Ue՜ 2AKg-eM]ΓS\-m<݇_bEy4*G$bA"ww/ßQZPPX`oo}8¤4xKyoG`j~NE\q7ol<_6)c pg7İsE>a).첡76ΪoyOҼ38K{6g%!!scf֔\[ΛA(AֺŧAW {h^PT eif}p{Z2t-'5\17yqDX< ,cc\~+}fEV޸M'W4EH؄ kcϷ]iVP*ST\iSFg%4 0zy`3ʺG1cavl\zKfJ.Y!C*᳛^kO' )cubd4q3ʯ$.ށӡS4T;7jW '8@l;Kب>9^t6dz̡҄ ==dw9' |:ɆzMSشw툯?{#z>}rM{li-AsTW|1l?y}zwyNoT_]fǽ?{q$ZD}k򾣪/0":`bb_=S7h_7o˶6ݤcD`ZAvm)6|Ep;m%Az ~[Ɍl̳=J ^eyef7 Ae* !H+[C@QvkHLk:u|1l j8?yJu;0arR@\U[U0~t4Dlh5\U:C2ysAXQ.v<5w1G@2ܿwU0g&lNoըvsm+u~( ~TIp,8"(\JlL2Ʈj\k<y٦YbO/]:qER`ֈNypavvp呲ؾ#dcIow!@_ya@e2gv 1tO_[O5o6wH+,\:1ս%YGJ"4wqJ($ TV%>dΟ~W_S[lQ4wcp>֦AVkXQ@YL\x`FןlFO9 IyskaK,ӭm/F!7485^=;iANs:.=>+T<}f߂-F>vi :7rsVt.tM'=d]| ףLtF(9rޣ}g7#l}'Mպq+U&ua?>{d}O0s0_g9Xa[ݽn๵^SijjJUКVyFʾPV?׷1ɼak҆.nyCN^@[Cx{ z$>4:c%gUnۮjT}oKys킣ӬK8sV<0-?8~rr#Q!!!!nnn+R}N|yS o̚]6꾃:E'O}Bh3'Ӱ +N%yU.WJ9Oܗlzԫ~gh]i@odBTRT&k?5Np4K~p8r\^zoڼk &->áE方ЏIJ56Bl=Jr9UqRwo lbț$-QbΦgcOϘyѡ@ >x W}zGغyy:9 hχխiB$ӽ-q BFuTTC*508r!'Eh@nBHa@!BHa@!BHa@!BHa@!BHa@!BHa@!BHa@!BHa@!BHa@!BHa@!O@`1 ò,q. B}?h&0 Cjw)BHt@ 4ih4BaFS!coWU}!jYw)B ,jo_ؤ'~qR恛 ?ϑġ̫(tsj'}#V0oγOϙ7sU`B>Lߥ@!0Lu@h<1wʦᬫ^z$0W^98ʯ>5}[lz!6smmzj1mǑG=zxYI!Ew{48:&&&Ñ1f ܌~hUw"cbbbbN2B(;6~}bԁ5%K2\͹#].3r.|.}.^ǁw#Vͦ,R<S/Z֫8s .κ_ye7b^&tjy+G ZlҚḧ́H '6 0ZHhZ* 8`CBW|o퐲>bպvP诵1lJGüC{Ivi'(h Z:8۪ mӡ,s|5}Zߖ~wkS>)MZ|~dE&l@ހ'X}h@ʯj߹6}[F4)j@~ZYFG,l75=:oRcNƹpǖK |]k!sG\gM,&؇k"BշH,j] ذ3ɻN/,if㬪x}:n=%j3^]74.C޽/k|ZU\z贼+\j\\H-$RȻeEzJA!Џf!/pGW s* _p篞vNyPEV3pgVi M3v%|r`v^&ߌ 6>C7l˾sw ,e_*[~*8Bמj>T\O*LQ%%+&=%!&ք`S aѠu9)_{sOphЬ>r?>T6]I' m)@iNKs4NҘicEsL\Z=&M)psڽ3'zvbУG~:Vol/P._|%:W~ichw% W W@R\*#xڍӨR@z#tPyxJ< ?..ԇWu]ťz5vt Oi'1ʸ~_t }ARpj-|L$>BЧoKZ 9cKirތ4jPyq/ҥ.ųQj(|WX! j.PS.6)ƹP\! ʕ IDATȈZGFd?p*޹v \J|Bsxzy6Q ziiFVud.]vѺNQfmW\ܩ+S+5:P.9c|eX|L0T3Wҳ}. #ΫM!)#+c`Zd,Й+lt3ޥ\kU-AfAQ@ܴ' Q>,o_g5q7_W{*:.:`oŦ^vg"?TXXLe&RD*Ħ59>5eE m ;s+;8[gC~N)tlNnR wk@78ϊPqK[ĜկȌ _䟸p5WGEdPz~m{v|䈭S +L÷נwlyiJ-1j6=%2"ZK%17!ԃ}q)Ȅp3VUw&ƥYk Uï:7qi}qyE>$هQ6N^;JS&RucA5|цS'~y/|& TBϲB`]W>6A&<|ghe>Q*  )-u o`^{BBjngiw.X&Cb~䶞5!*mhsܧ@6]GÁ2ENdPq5** YXw ]uw)`9eS^N[;"4ɚ̇ξj.ߊJj^1t)$$D$n*mvP]B*g Ƭ̾(Xp5G1E'⃽Qd!^E+:s.,ogB(W//2W^gv 뷱_UpP*\(r_3OvN}LP KS Bw徥nS>;m0Pl?~觻5eoԮX'>;k~[;\(m  >:" p^ylP.XR.~l5 R,:Dfbٯ= Vn гCwM{ȣ lL&\yM$Nf7lUL 'gYKnL)6,eۨߪ_*TIÓ5 %w¢ '#o̖,q])Ny݌W oAɳVc @Q3 Jh}>_œc?kzogW"N @ku^Ҟyrkj?|^ӧ3ڈ,32ۯ5/ְ@aɎ$%Xp=k$ΚB>ZS6&ĵ^pډ{xܹ#{oXUh Kҷbv2Ӯg+GP6gml̡x {+K Z2BytKգogznāUBY>3w52B \\-mRax1pg[N g ;Nܙꢶ;ew\˜m펠XP3~zްRÐ-(ZڬL*LLM$YTD(QUD`&.hCDڤLkOUXϔoSv8:xg\R idI95{MIsPz}96+jcd-Ss>ʷ0|9[:h}G҃dSPQ;;@p"LߐC}W;eoѴnkfpd_?38LK _I)si/]T 4+aɹROڮvi$Baφ:Ats?KH&fB~cDTeU%[hz|}@,/Yס¿mm \뫷յ:hBVay|+̊,NlԋGwtNS!d>364?5Ce>^,Xq,˲˱Yk3Z5&-gџ޾SPG%Ph/A'"(nK {'ႪQ9TDRf&"7G֖f)urW?ؼ˰9mglαg=}>զvNqϙh~~pӑέVەq];~F~zGy;!̝y03o-kYcED\xC@=7:w K.n};~#ɂr4pD՛ eaӰCOy繏m+$Y & G@GqZҺbھ| QW A cp1q{gLۛoԡ.=+YۂyW|+Mvn=gmݯoډ '67'~r)’YP4d.%qw'*fa)LcGS ݂o ^{2@Z>Ϊ򘴬#xO׸ԄuN;4qC;UMqD#*F$8e$HTh<["|?//gE<PֽN]uüCn#d pގ'5ʺs4|!!s|'\ R,g,h5K1L aU>K<&{]Tt &J4V~ViN9".$u^%&P"^а&li jh2l2= =m]?vhpM)߰>?"&>":"JO>f?T= 6,֦bKX' "qoa6C5m_'%?卷_ JSE\F rPw;M=R[|u5Cs‰;IG>򊓫>j'H(mt"Kc1i_ݶM"M4qo ;z[)/>5eFOӛn7qUAjf"їl-Cuoct`¥%&KGCg >3D0e]Nݵ˭ݻ5g%>Y#i>̬y@k3OkA&8F]GALޥ߅>C̷'9 q|xô*BPx4ښRkb1MO -3Ѥ+8񴓈T^hzj#%$ȩ4\ښ2N9 n6YÎD51J\˙ӗl|mO:Mϭ՗Hq}kԽU&>RqO߬>y6Adlr޿'2<嬸a՘Ձ7 ^sSh W\ O( RR?oOͻ622# |wK)CT e#EL&Kwz4k~XN?U+5jCfzj EXMBduTOW/jRE$7ޅD{ڃZsne4*u,V]*5Ծ'̓S_?;~!.!E! Qo_IBQ '%~TyX_D=(5B ԠSLKu37^>3u.yf)ߡGO**$,1*#$ʚ[Phv.NV[_YgOxTѣO+#vk.-P@֌F=e͠#OΚ߮=gz#| <5gV¨3[ ?v<0a'M(c~j,Lb8I :;fߡcJRf5J<?ٹm魜s Ws8 V=MVmPJ7eFE PjWڟQľz;}jsjL= >eVM=Vz0Hx9 ͜xK31$+AYno2ZBFBֲJwKA! ֔+?࿅R B&(r>nɅB%l"BF C2 D_g#+c#d@( !W M㴏!W1 BB94Xx M|y!x4M3 ò,IuBGB(X[`@R`!9!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2R<}q0 ˲,!B(iR VeFߥ@!=]1 C4Wil@G`@!a4MC2,ZeY}! ˲Z!]%KBa!L!_1  !_qt2 8oa4ZhpЍĄ/|ca@ qr<99Y7\ PV eQ(r\&I0@0 ЏTX~DQaDVkff_qTT 4-JSSSrA0 ,]D"QJJFasB RRR("`7Bbaae!9Z%EQjZo{׎B}[C@CQTq k!-08E.!%xrh+we?^?/&kpcTpɏye|sQOūUF|̷W'N<Y}U2}`#N[]QG/کي-hu!5A2HӠwh awkws\FbϥYQڗq[ggw ?o^q62T7wOcR3¸|%\ڧ>qmdΫ{^e,ܼ'4+j=O1ם:ƕPZ]*k.OT,c.͙ ʄO_+6>EPICdnvڔt6O!88~ CvQw"[ym]"S 1he-M)'i\\`Ro}toR݅ l 7S@K}t`e*S+҈s]+J,Sި?;v]g9R>{]ZcJ6H|@ 1Qȁh کr'Ӌq?hXjbʍ|{a@%ݱq|zޫ[7♘Z\%ss`#[L0i>]?s8ҹs{ABL|W -Y-Lk{~ɦ9Wr9q,SJFȦt{ۑR;4R<XI!!:e4/_{͗A21$p*mJ`O:xF'0 jWoC+yό@EJw﹧{B `#ήeKqLKg71hcӸsW3Wm*7r57j@߃jIDATW;gW4LD}ߒpJJ(Lh7ugb-zT  ǻ<.խK9~]{Sl7]fNrhԄ= )<v,_`T R>vkt ܔwʩ%N8a԰!xI0 \_aZX8q+6 h&4]ܬ3+ơR@ 6?`i#3S6=h`-rDDT4aJTLhG"|;fm_>HK֌WaaX=&de6sK.ۜT{Zg-Gn^ڊ۹g,&_Ա&MR9<'} tDB b@xw?e.۴Qǚ}}_.zqQo끇Ô1=Wo:K̊*#Bc\]uYJ=m,sDm/MdOť+`*LƔ (cDhndNٖo2jd ڎ*YUs8нaa4] R[1\bZ'kDqԖbgI@UvsAHD , Z2G}~1':V\K+)͇8`xC|s "K,6%63$W=[/iӽ|jl 1Hd"5O(rNڼNYO+q"ɵOR3c)u#bYMZF(4ޏI0o)6*c!b C*dI񘒊H|ċQiW0wW'!`/ l)}))7tq#_'vk'bT9Q0!'˱p?:VaU#ۨAնW_|7.]L9)?dB&㓇\տ%aTJ *2g8F |Q"|~8EJ k*y\T BBX{m ~h1 eYOo آB?R -2XZ?W= @T*8a}})a8J_x`@H$J.RRT$B?$ 0r\$a!cF$ ECB8D"˲4MraL.,˲VL&X B#HhxZVRq;֣,B"H(Kd@!xB B>/ uW2@4HC2 Eaf ~k"d@BW|F Ȁj] 2 4M_sdXx<dF!uRa<">!tu1"G40,bfQ!PUY0 MR Џ B!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#!!2RB!#w*q ð,q˂B!( !Ž/ iZa] %04Mx{dp4 &bF.0 âjYw)B ,joU!d@)QB߱C2 B߱C2 8!B}c8OBa4Zhp$͐ M.Q8N.''' vDz,0 B.d2T3r2,mw $$%$0TJɀ] muBS&['41ԽQmSBitSVMZF"ґAF /bm!Us].y%B!Á c,WUKQY ] P($Id-$IR( z%á0UUл!`I+ $ 2Aa`0t:nKLqTRcx\Vd2t7H$Rc龍^Cw` sJci@i'v~tEʻ?WvX`|8;2:Ӿ=`GGޟzmyu~g}B-;hn(YDDhi;H&5xLbv` 0rmvv9쥛J%"ֿ&ysŚ'6ǿ?Z4kUշ戃^.Rc}OM'_v"oݷ}=|)ћC"wmVOSO,W|@D$ɓrԨdBDD$©%px䁐<@ EoK Vq[*8_aI< :w!2mf+`݀N4"`wNݣT7X e]`_T=%WR!@0Ʌ>"{_>KlRWy7Vj_Y>q4Ͼݜ#D$HZYP*pki!._OVj}s`qy+7H 5sgфG}9ihjw%NA09ΊBAM!͛7y,}+ɅR~ACeT?R9wM*i]w Lty\?{s'8SK+oa9E]8LDJKs}޴Tsm6l]'kLDD}oԹ<{u^?QuAO0 s9)y@#"i3&;kkqaꑿfUC_ W|K0? #@ay3A6S{{8I"] p[Ƙ0 6DN׬ޒO>iX|}p;i ~RDoS=phG{&4tb޲]01`,!,ZWRégLsW'b9BoN"r#h8ʋN7k^ts ˈIJ'}oz6ڹsjkO{컋WLE !=؋/F[wۅއ%Oo趉WZbgцm]iH%-oQXc.AOg;'f~us et0{ e#;U> =cz_ZYˇ|ː5s ʧx9'O^˘7}%Sݹp咒R,jf fFQđ9#wU$)..ֻNW~? V"67MGH+1)([>\1ͱXd}fEip $IsUUnTUK4p nKz@vF$vP0Ƙ(aݎd'UU @EưF` (feYV@V@RY !҂sw݈]1BxbH bH \@_ɫ- B(( B4EQF\ !(H`>.SU5HfM\,KQUUM&c Hιi @qG3+wY ! K!d),B@BRf"jhhлptsU /SIENDB`dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_HK/000077500000000000000000000000001473346337000256105ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_HK/calendar.md000077500000000000000000000304431473346337000277120ustar00rootroot00000000000000# 日曆|dde-calendar| ## 概述 日曆是一款查看日期、管理日程的小工具,支持查看農曆、黃曆、節氣和常見的節日訊息等,內置日程提醒功能幫您更好地規劃時間。 ![0|main](fig/main.png) ## 使用入門 通過以下方式運行或關閉日曆,或者創建日曆的快捷方式。 ### 運行日曆 1. 單擊任務欄上的啟動器圖標 ![deepin_launcher](../common/deepin_launcher.svg),進入啟動器界面。 2. 上下滾動鼠標滾輪瀏覽或通過搜索,找到日曆圖標 ![draw](../common/dde_calendar.svg),單擊運行。 3. 右鍵單擊 ![draw](../common/dde_calendar.svg),您可以: - 單擊 **傳送到桌面**,在桌面創建快捷方式。 - 單擊 **傳送到任務欄**,將應用程序固定到任務欄。 - 單擊 **加至開機啟動**,將應用程序添加到開機啟動項,在電腦開機時自動運行該應用。 ### 關閉日曆 - 在日曆界面單擊 ![close_icon](../common/close_icon.svg),關閉日曆。 - 在任務欄右鍵單擊 ![draw](../common/dde_calendar.svg),選擇 **關閉所有**,關閉日曆。 - 在日曆界面單擊 ![icon_menu](../common/icon_menu.svg),選擇 **退出**,關閉日曆。 ### 查看快捷鍵 在日曆界面,使用快捷鍵 **Ctrl + Shift + ?** 打開快捷鍵預覽界面。熟練地使用快捷鍵,將大大提升您的操作效率。 ![0|view](fig/hotkey.png) ## 操作介紹 日曆分為年、月、周、日視圖,通過不同的視圖方式展示日期屬性。 系統默認顯示月視圖,可以通過鼠標單擊切換年、月、周、日視圖。 - 僅在中文系統中,日曆會顯示日期所對應的農曆日期、黃曆和節日訊息。 - 日期以 **1900** 年為起點,在日期切換時,不能查看早於 **1900** 年的日期。 - 在月視圖、周視圖中,週六、週日的日期顯示會區別於週一至週五。 日歷視圖中的側邊欄展示日歷帳戶以及小日歷視圖。 1. 單擊 ![side_menu](../common/side_menu.svg)可切換窗口中側邊欄的展示和隱藏。 2. 在日歷帳戶中勾選相應的日歷類型,則該類型下的日程在日歷視圖中展示;若取消勾選,則在視圖中隱藏。 3. 在側邊欄下方的小日歷中點選日期,可聯動控製右側大日歷視圖的日期展示。
視圖 說明
顯示全年的月份、天數。
顯示節日訊息、日程安排。
顯示這一週每天的日程安排。
顯示節日訊息、詳細的日程安排和黃曆。
### 新建日程 1. 通過以下方法之一新建日程。 - 在日曆界面,單擊菜單欄上的添加按鈕 ![plus](../common/add.svg)。 - 在月、周或日視圖中,雙擊日期空白處或單擊鼠標右鍵選擇 **新建日程**。 - 在月、周或日視圖中,單擊鼠標拖拽新建日程。 2. 彈出「新建日程」窗口,選擇日歷帳戶、設置日程類型、內容、時間、提醒等訊息。 ![pic](fig/create.png)
參數 說明
日歷帳戶 默認本地帳戶,可選UOS ID等網絡賬戶。
類型 系統默認提供「工作」、「生活」、「其他」三種日程類型,您也可以自定義日程類型。
  1. 在類型下拉列表中,選擇 新增日程類型
  2. 類型框呈可編輯狀態,輸入類型名稱,設置顏色。
您也可以通過主菜單中的管理功能新增、編輯或刪除日程類型,具體操作步驟請參考「管理」章節。
內容 日程的描述訊息。
日程時間 設置全天或非全天、公曆或農曆日程的日期和時間。
  • 全天
    • 勾選全天:開始時間和結束時間只能設置日期。
    • 取消勾選全天:開始時間和結束時間既能設置日期、也能設置小時和分鐘。
  • 時間
    • 公曆:開始時間和結束時間僅顯示公曆日期。
    • 農曆:開始時間和結束時間顯示公曆和農曆日期。
提醒 勾選全天,則提醒設置的選項包含:永不、日程發生當天(上午9點)、1天前、 2天前或1週前。
取消勾選全天,則提醒設置的選項包含:永不、日程開始時、15分鐘前、30分鐘前、1小時前、1天前、 2天前或1週前。
重複 選擇公曆日程,則重複設置的選項包含:永不、每天、工作日、每週、每月或每年。
選擇農曆日程,則重複設置的選項包含:永不、每月或每年。
結束重複 只有設置了重複功能,結束重複 才會出現。結束重複的選項包含:永不、於n次後或於日期。
3. 單擊 **保存**,創建日程。日程創建完成後,會以標籤形式呈現在日曆視圖中。 ### 編輯日程 1. 在月、周或日視圖中,雙擊或右鍵單擊日程標籤。 2. 選擇 **編輯**。 3. 彈出「編輯日程」窗口,設置編輯日程的相關屬性,單擊 **保存**。 4. 如果設置了全天或重複,則彈出提示框,確認提示訊息後,完成日程編輯。 > ![notes](../common/notes.svg) 說明:已創建的日程可以通過拖拽日程標籤來修改日程的開始時間和結束時間。 編輯日程時,系統會根據所更改內容的不同顯示不同的提示訊息。提示訊息中按鈕說明如下表。
按鈕 說明
全部日程 修改所有與此相關的重複日程。
僅此日程 只修改當前日程。
所有將來日程 修改選中日期及以後日期的日程,選中的日期之前的日程仍然保留。
全部更改 修改所有重複日程。
### 設置全天或多天日程 在創建或編輯日程時,設置 **開始時間**、**結束時間**,可以設置全天或多天持續的日程。 ### 設置重複日程 1. 在創建或編輯日程時,在 **重複** 的下拉列表中選擇重複提醒日程的週期,例如,每月。 2. 在 **結束重複** 的下拉列表中設置結束重複的次數或停止日期。 ![pic](fig/repeat.png) ### 搜索日程 1. 在日曆界面頂部搜索框中,單擊 ![search](../common/search.svg),輸入關鍵字。 2. 按下鍵盤上的 **Enter** 鍵進行搜索。 3. 在搜索框中單擊 ![0|close](../common/close_icon.svg) 或刪除輸入的訊息,清除當前輸入的關鍵字或取消搜索。 ### 查看日程 在月、周或日視圖中,雙擊日程標籤,彈出「我的日程」窗口,此時既可以查看日程,也可以 [編輯日程](#編輯日程) 或 [刪除日程](#刪除日程)。 ### 查看日程提醒詳情 當系統發出通知後,單擊通知提示框,查看日程詳情。 日程提醒時,提示訊息按鈕說明如下表。
按鈕 說明
稍後提醒 提醒設置為當天,首次提醒後,單擊 稍後提醒,10分鐘後再次提醒,此後每次單擊「稍後提醒」增加5分鐘的時間間隔。
您也可以在「稍後提醒」下拉列表中,選擇15分鐘後、1小時後、4小時後或明天。
明天提醒 當提醒設置為1天前或2天前時,出現該按鈕。
提前1天提醒 當提醒設置為1週前時,出現該按鈕。
關閉 關閉提示訊息。
### 刪除日程 1. 在月、周或日視圖中,雙擊或右鍵單擊日程標籤。 2. 選擇 **刪除**。 3. 彈出「您正在刪除日程」提示框,單擊 **刪除**,刪除該日程。 刪除日程時,重複與非重複日程提示訊息中的按鈕說明如下表。
按鈕 說明
刪除日程 刪除非重複日程。
全部刪除 刪除所有重複日程。
僅刪除此日程 針對重複日程,僅刪除當前所選的日程。
刪除所有將來日程 針對重複日程,刪除當前選中日期及以後日期的日程,選中的日期之前的日程仍然保留。
## 主菜單 在主菜單中,您可以打開管理設置、查看隱私政策、切換窗口主題、查看幫助手冊、了解日歷的更多訊息。 ### 管理 單擊 ![icon_menu](../common/icon_menu.svg) > **管理**,進入日歷管理界面,您可以管理日歷帳戶的日程類型、登錄UOS ID將日程數據和日歷配置同步至雲端,同時也可以對通用配置進行設置。 ![type](fig/type.png) #### 日历云同步 日歷支持通過UOS ID將日程數據及設置同步至雲端。 > ![notes](../common/notes.svg) 說明:該功能暫不對老版本系統和deepin系統開放。 **登錄和登出UOS ID** 1. 在帳戶設置界面,點擊 **登錄** 按鈕。 2. 彈出UOS ID登錄彈窗,在彈窗中通過賬號密碼、手機驗證碼或微信掃碼等方式完成UOS ID登錄。 3. 登錄後顯示賬戶名、頭像和相關同步設置,點擊 **退出登錄** 按鈕可將UOS ID賬號登出。 **日歷同步設置** 1. UOS ID登錄狀態下,點擊 **日程** 、 **通用設置** 後的復選框,設置是否同步至雲端。 2. 點擊 **同步頻率** 後的下拉框,可選擇系統自動同步的頻率,您也可以選中 **手動同步** ,關閉自動同步模式。 3. 點擊 **立即同步** 按鈕,立即和雲端數據進行同步。 > ![notes](../common/notes.svg) 說明:需在控制中心開啟 **UOS Cloud同步**,才能使用雲同步功能。 #### 管理日程類型 **新增日程類型** 1. 在日曆管理界面,單擊添加按鈕 ![icon](../common/add1.svg)。 2. 彈出「新增日程類型」窗口,輸入類型名稱,設置顏色。 3. 單擊 **保存**。 **編輯日程類型** 1. 在日曆管理界面,選擇某一個自定義類型。 2. 單擊編輯按鈕 ![icon](../common/edit.svg)。 3. 彈出「編輯日程類型」窗口,輸入類型名稱,設置顏色。 4. 單擊 **保存**。 **刪除日程類型** 1. 在日曆管理界面,選擇某一個自定義類型。 2. 單擊刪除按鈕 ![icon](../common/delete.svg),刪除該日程類型。 #### 通用設置 **一周首日** 點擊 **每星期開始於** 後的下拉框,可選中 **周日** 或 **周一** 設置為每周的第一天。 **時間格式** 點擊 **時間** 後的下拉框,選中 **24小時製** 或 **12小時製** ,則日歷中的時間格式將按選中項進行展示。 ### 主題 窗口主題包含淺色主題、深色主題和系統主題。 1. 在日曆界面,單擊 ![icon_menu](../common/icon_menu.svg)。 2. 選擇 **主題**,選擇一個主題顏色。 ### 幫助 查看幫助手冊,進一步了解和使用日曆。 1. 在日曆界面,單擊 ![icon_menu](../common/icon_menu.svg)。 2. 選擇 **幫助**。 3. 查看日曆的幫助手冊。 ### 關於 1. 在日曆界面,單擊 ![icon_menu](../common/icon_menu.svg)。 2. 選擇 **關於**。 3. 查看日曆的版本和介紹。 ### 退出 1. 在日曆界面,單擊 ![icon_menu](../common/icon_menu.svg)。 2. 選擇 **退出**。dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_HK/fig/000077500000000000000000000000001473346337000263555ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_HK/fig/create.png000077500000000000000000001064461473346337000303440ustar00rootroot00000000000000PNG  IHDR?Eo pHYs+ IDATxwt7gf{ת^B!4pq&88qv?^jzMBzuvwf?F,$]i<ܽs }sg(**B\F!Q*$}@F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!`s pm'3svێ'ۿ0Lqi)꼑C.gΧ;cfjF㗜&Bu=lί,(6)I,h*-.,L*iچGN2m'f Y%UKS'wwua_ڰxݘ91qʄPД[RP\yh@hkt[#uCcݏ-75E+l\*J ia l%UUQ{ֱ_vb*ĔxuU)yo[)g@oe={0Q7xd{iEFR50uCUA(2迿.%).&:tTR<=pfyӓƎYE䣓ۗA\UuF˟b?[%IozP|;嬃 [ ٳKfя!>,Wݑ!S'ظ {F암Uչ:qk_۹c?^XvPѾAP`*c#ֻ>#3 T*b^Qus1 jEBL0[XVY_۠tp/茑!>AOM~%򅴼 iyR5 D5h{8B.jf|w/d;O 8`274tv?44:;x<H$ITJs\רsneKag/`n n`RP+Iۇ8z ;hT674r\{em.:#S?YOӌ˫K犄4Z}m}SyEA8s0Q  ;V@Mœ2g_s/3鮜2a;r ٹ4@eMKYݼHNAEMҚ+< F\/,%:HmX@x<  @t\&?o_>}醭qO?:1!.ʾ}_/gOkߓ6n/Iȵ-:x1,W*7kjyhX㣃½<\U 'u-yx<ج79IRI bboB#5a# ([^aeYUCHG'[UlG@ھ'"mCU53 ewQw9=gCfLN~ؙS6h`H|GdRoPF K|t9ctr:yA)ã'G?+`˞Y= z`ul ;29v*fdW *.g^mX,m6If}X,)^SSaxj>}h,Iyda]fLNv?Fؤ9})[) ٺ,$tl=gC%,f}ieVg{.Έ3mHl;b"?nؐ;`!ջ 4̚lcymӍr-w^{8@A#bҘˇP"4 @3H@m1MZA(؞TPT*,:SrzD"H}//!g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8Bs݁{x|>a`F`ZEYV'6R MaME$0 MY-cvtB`F$ B@}$I@ 0 i-;T*Z2 ǓdVU*:ȂnAH$;X,&Iw@.wA$Iz9^s)Ǜxp|@΂1P#!΋ FF0'p!d@||zƵlsw?}t{uw^ݹxEe}K۲}#'.\Iރh4kyrD+YY}M\*,nc/?`a/{wcLr7mq4Z^&)lݖ⸘0Owu#8=+ߖ+^{=]=r:S)3 |RV̾zbٶv^{y^muڸA1amkߙ;uC|3k.Qa--/{{jJ%qQ!5 ?&]Hk,~nV.|-9x"4[klHmuތĄ[~zȉG}]?~Zů>5)-s\x/815:Caqy&*0a3&'}z3$>"eKrL$?pb1j3j؀FV`\J_6Ȥ:6zxP()KL*|=omuf %..f^.@& ~td۪Ht" mB t zkmMa>j˵Eox<4o9-s nG@2E tщ>v'>/ +4nġat aZw0 0ԤzVVgpsU|<2 NjF=\??yt޺voS~B\4M}/M`Ic5Zd^_~YمzqѼBmӄ)B-fkS͆zS#-t*DE{_{qY aA*ؤ) huF^0=-(O˗|g5Elͮt,X7FTU7 YO3 5Yœ'y5xӎ "5[q pB=UnxeGN_ⅭEZKOͲܬ9kl??;|bρ3^S&$qāl͖&acX)i!A>ox.~^p`/eZFE.7yWx[Ng>6C;OļYc>zK<2~[ R!koζ/diu?>>%Cc;tfogLKoo6nT×H9+i׷=љ&9etYmH%gM1[nd#Az6V{[EpS.ʢƷUaT7zyO˘1aȘIUK^Q='[aN4}!QSRQ/ W^߸yӮB&~_;ϳ&,w a[.'׼Ԝ@/#'..5zRi<計q#cO]^pwe {tscD N3ִ/]+P'wn}!S*dlEBD̎y-]N?:oD,X/^l!מI[{ǖ|~E=1V'0ۃ("hXJPt:CyUT*Q*bT*i}ky~En;%b=r*uЁ:P.Tԯxm^UTd|~_n\+Wo7꒺s_W )w J,оpDBk JUhބ^]]{kS.W5APpN  k@oiˣF " \\FMxҪBwBJ|`߄$//LssUyy.zx {=qU+hsVR?RCbm}Pwsl/OWvxE<0xƔ䨈`vkj__9DQQFX쬯ME d{;S*ySi#{0B(/$;|BbZ[ZZoς(aBz81 0j:8יL&)L$z=7 #(N{ P,- EQM\ !ԋhi`Y$rNbwH$AP~>wl6[,a3Bil2w=  HԋC$I »C;AL F0Bq#!8BF!`#g0B3!` F0BqoP!>|>|LB+1=AXV`FpOHR x<7>J$i`08e̎nS(B@ EG@ DaBᴖB*ZVLɋd2*J H7| $ AqI,v) A7dlm&N`>B嬳` F{0B(n|XSr #b` =aH^%BO8嚐", :. TME"B:cˮc{;ޥ'ȩ"hpH~a+C7ju/NDx:oơCbfk "vQ;G#?ݸٹ~'ϦMm-B78<9jX+YO,|csgO{E' D ̎'`Ό1~tLJuZR"9Cj\NR!B%4jI1I1/<=].(,_Ip!}Gq6->nWXSF JDJQ M:T 7#gK+W칹 . V0(&ܶmq?s([mTYU~N]xϾXtThWЃa'.ڿJQS$:e8sx].jZrF|!O\[#3`{*Bv`W{A@NA]{ݱW$baltxi'_{zdoڗ8(l6Od뎼ܻv=@j68qw/oE}nKvnq\LhF|{NxEF}O1zd<~~?Dy墯ڛ<,:f@'_lyxzRDhEB|_Uԯf;yټyCzou?Ӫ/~K)L_mS{5)3"9/ |~Ƕgz#}ηGD,jnk"]T I(\<]kS*lXOxYj%Ok]꿂Zćk[SϿrFћ+ 8g/f\*\W*IRFTT1L/Y^hnaa.۞6 2Xnm(+90vƧ$N;ޟX,b{q|Bwϫեߐ qżrT,Ws̟xd=g69Ӻ ZH$;k [8ylšI}إn~xBٖŷ Ł"(O˗|g5Elͮ9.5[Ι:btR~{tīc BoAϿںy}xGGc~}fѤ?/4m([j& jm' 1O/~Z~ݏąOItaau2 Cɰ_mw_Iu*8w_90FX$W3s`3/<5v`[?rp`dЄH zHد#+C fae! ~\6D -}ť{|\S JB}}ܒlMP4K,U lZxW{ltr2afycI˸ɚMˏɰ_]ܜC~N' 2phBH$ܾdNaUxBEkܻY O_fs+yz/Q2_7U?bH `ӭ=FFph߲gfFA)NI#I0f@wsUM4, (',^&[/5ju4A(#d2X,>EcOL&^wJ8=* X,VTNi #d2Be2`w^ Xbw/B ǟݎU. Uq6|/M.eU4I54iÖ\š/fo+qPw9~[^wMӦ3XbB >AS]ЬыE)C*2حBcC_T~@P;ì k,(o6[^jgT;GrF5V>CG]JvQxcz$ \9~:M3[:~]:aL*fnؖIJD*% 06yH:r}b!$Ήfn!pF'M󗲪jHa _ۆ~ρ3MUX\${.Ƀ]Κ1)v8=lD)I|9+B@(TTթ2T2:)z㉳W' !&Y*N k=ڷrsUe^Ϸ?_$bQUa#ԏ9'kjeuHT354۪W4>cfܕIctO̲e=D!X:=AU4Z:0P\Vpʵ[GNG?6}RDՙ.ZbMfШhcA%gD7}_)R_mxwjVx{CM7,*<4MO9y%q1[U(L}bZVoh6[,Jbm-ihoܖE`0)ҤE1zc 8t ûuYUөA^Y'$BwEEEkuN\F}fڄ&gOJNV4̝KUJJ5i.?m#K+W칹=:,/(*]d )(/|fFZmd?|7g:RB|q@QeR1CۍH <\ GYW(JGςs69._{U4x7eOgNL\2"{ؤv&KF?AvO@Ƶ<8r hjWΙ>yƲ' ]Tȥ'p)㇉E"h7Ͱ5PKʪ:I[]hZ'Ph$NI|'M3M2䡩uM_W2{ )CV}m@dF/ ?_ϫq1.*E](ח/rbjmuDDǍ32ƌ$b}l/8z]HdV`ZQY.d^/tW=u40LDZa"_9s,33vO?XV646+dbQs+^h[8r*=8Ч=&$-Ҳj/:ݝj(j%{j8cȞ]lJ+j|݁ahi '6XꟜ4V]ৗ̸}B^_X\u;jnE46i]JSYw!C@ ٹŞjw#$(D{Fee؏0. YSGu}WBNoS[h̞yM!zq-yE20%)d23[g.eMKo\TSgs"8Л◕].Itwsޘ0("*"zsG'DB {;a~ye@ꢜisWJ}{ ꊛ 3osJƑĸ۫<fH*zF?rhlvnxVVFIլOH$Hv!o9"ǖD.=.Z嫹O/VRVïGlf zЄ{cB>b+폏o;;j~=$.||J bw$=NbKilҎ=D,Wf iت=D:&~bھ&;c'98#X$twsQ*dBE5.bf._:ę,"l<{zıC ҶOFohԔTԋE$I&I)*j֤kȠ!qrD(OIoh7LZ1,׫Gx?/BL'k6Es\.:v)ɶ U5_f"c#2rج1ht&H  :">#(xgD d>#2_ !` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` FpW1 uB㱀U4MsPx,`wb l6;FpWL&_0EQ!dZl#z8B>`Xz`wOss3 #3L)MEכL&H$ I$!z04M斖,FpOPe0 Ap !8BF!`#g0B3!` F0Bq#!8BF!`#g0B3żN*N0Yp}Sg3sg#=E_N; Z[c, \r?ۑჷk?}/N8-o:TRQ. ?.[֦NQqEӝ4V(dR+n{tt+*Fui+ Ͽ0wtB./;»M40}yEUE)[{RܙcY|)-3 /_訐[..\v[Tϲ:!8r\uMo@< / ^x!Mn0LW(]D8!84M:{ntyYcRgy{ϙL-m6X BE u!8:3' ۱LqUowaxͫvwO?X`B^hF{ْ]ND)[xzG$ 5WezNSG`BhVm T*JD3D"!rRn+<J!m*2/.MBs.iu&Ԣ7l:}چ JI >v:)}@{s&9qLWمI)qMmJmu$|=gOKGvIC^,=y6+5+'vB>}RZIY]'+k^}!cG'7n)Gm \P滪U}M0,-=|&l{uj|xNQTThz=Exg]}g.^}@?&z{ؿ0́~;rE$xa_;ӯ;|1 ;Q*F0TT޵[uM}aQEҰA<^k2r'F#A{s"!P(J|d;Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0BqO󾔫o-r=S#2[jI nPZoZҊZty\w {~qQϙitMnL!_?~)%$A 4!t+-޶^o_h2د iVBP(pzgz& P+p®FWȥUctXu/实7ktͻN66ibFZhؼ|R_SܜY;'Dp/_X;?`%oSf+Ixw/kѐWtASO~1lI#K[8>rɳ Ш+i;+M~qEN~23gӽw_[Up\fJR][RʤwW.Jo_/_"7jw5<_o()Z[{ hؼ=g!/.\v[Tϲ:Zj O빥'eW/ V*d5I>k(\]U\ZM@/'kږvҸV_!qS[E(M Cmfmڼԇwa7ҳK?7[ ~~lK '0ZFE.7yW~/8z`w4諟:17"?Gsצ XNĴfA#o͖Ct3ag74jJ*"a`S\eN|umF0OL5(0j ]qS'V\Z]>t qy15c#b|>#<aZ)Z]ߖah6{H$H$b  1 0d2ZV(J$/rF0BmIR x<7)"Ia CWbFw+pAD"\.7L4Md2g0#tB0H$ a1V$ a EW2]G>N xyyQe4o}g5}@*ZVLxܯUɬ5 IDAT{m6)rJAH$ޑX,&Il[D";;bX$9c"$I/t-K>#g'ZSςj{3l{w= g"Hg'F薾5= O0}/Di9!(`y=o +u#n( "}l/]% b#jfMe_h2ّJӐ$i;B+Nm).lR;$e)|LfX%w0yl}%f[eVgkhi0z[^̜2[IҐ'B8gRڒcG o~͖$?dde|-Y5h`T*)2̉tzD"__V^~oW^ד?}imqSK*j.JXwgӳʽU&g[̖N_/q=}+Xԉ3YMZC⠰EBhGN\. bGm3?2g;vN\tsϲ{B&L7,-=bڍڨPS\Ul- a{Ng)(|5Irpĕ*J6fdlTx@m OꌉqaF7vb֥b`LRLTD`Ƀ9a ێˑUdJD Ҳ*0LU ?tʘD_FnBb~([xBFumܙcUWJQmyϙ{ΰIC:(.\v[Tϲ:_X)#3&;xwxo/7ذ`Cvn}V.J߮ج瓻鍋Lh:kʈfݦ]|ް!m{mll<64nö/>>ݾNEe''Ǹ{]!HbXp%虬Yz]41߫O~tNʈn$~`S삍ێDzr_nNXV̒A̞ϿEGmg FkH_AY7-xڈ#`Ǟk]ޮ":8)p\ OL A^rmH*b̼&Ktw$vYc )ё9in~ً#8'dȠP>u15;6?~Эu+kS.FExR![嶢Ȱ#'SGN .*Ū/Il;AFm74|pI%m??-_݋?|ū¦fmYUs'{\--(oRoDI:x!A<mrJ\\L6r>sN/;NQapZmX= ~Y;;)ǧ ?6amǢ J&9ώ2 756irZŞ\GvǬo:YR!{}"{{BM \,z{G v(y[.`2HĢro/״eg_RX\Y֊G+nFEvi}: `!qoQ`H/*T\ߠǿzkc,_hD2)G &v$ B 5;dNKFv錉C ~^zitO<,goQ4{?vΉ~#Dzomu-+3mde^o4R\:fdciG[ma`T+o=']]&JV0ϧ jtیN;i=cj1W4$FwQJI5U YQiuu"!_l$Қ O۪V/~1:dGx{{^xmsH<<hll;>2}3mnz#R !TE)" Վx~z=xRߧF*''JK7LA)-)WPҍrL~lLV)ݮWaznj#34|d&Mqa6? ]WCh4cxkyz5%'jLdb4S.O8vŪꆐnJpZh' Hޱt`7oTzN N}l23?ZzU$)%9_4B!058{dA*cB|*E]}#0׾`43g]h2;swݦI+1>bk^}i`-L&/3UQ^Q}%$!:X*adEe Go۲)j6"Bmߙ7Oh _xD +?fU[zpX/Z *`3lpBiEkxԌ\&}m˦k7>~s cU,uSS{{JPg\8U %L"\ZZ3-ozċ t>գ{#z-r3e1qMWlqo-^RZ*bCDD77rÄIQ4j7_G׈Mm&^XM㱓XM]CUh_Tk l9w`U!ҳJ?;omJQIŊ{;"+FOkф]B.]E .@Z_7mHF#bdĎ R^oOEHPZǽɩB+7hub{rsQ>6!ٚfvסtsn!eU^t#k ^,z넘05V-"'' V>/"4dfK*Q/]}hd񭴌Kn<<="adxWa17[#.JƦۨg>1kJYyw?m u/ueJd>(6'D^/KJ BNZ^XTQhq9vv 4jq7?n~5q>z?>rsk6hek/WTŒc½gwШjChЧ٪O(ɔIog^v ;=s5^[V^-vmr9OӨSs\fV~?d“٦1sFJo08>9O֬!^-WTSu*'JoDL0|M$: F3-24׳YdhnjoMeٖfCEA>Oi~xbx-VX#28v 9WG Cu KmTȘ1Ó{D`Qi {bY<Bln.;L塎V%"4) lkp*-|O7ȡ(s "n;]i^AYB r$y%wqK4*%=fd:epֳ![26#^o4on]]]>ǮյUFcZp+Pzᩖ/95oG|T&p%Bg;;ޚUWȈ!ؾxcg}Cjb2HP,˚LV2$aza:z{ոPAIEdG `0t#]6!Xm^F#˲H9:X3c9Jsg`$;>qu_RQΑ$Y]]|G;竫e2"-$I}}JX,Ǒ״sbx +B}}ԡr9/#M%%%^^^Euб3L B.T*tA0 #HĻ`3ɺlXAkX J`0[~-jF"TUUQVr9IA؉ V8NRwn@#V?JA$I4}2c$Xi#raL&;>f t!Iyb)vEBa0#`F!B!!C0B9 `r !0Ba8ޠp$Is}Vx ih'h4=A,q\f>i+T*e285Gh43H$\~G9 5P((J.'n;YKNU9 <<>>߹0>>> oiBBRǡST*Y휳boG~!ΰܡNhf{=C0BMh&{Cӭ5bmT*6wYR#DU8wBK덉CpJyd2VKZ0BMw綵`&c:g_$Id2{ ]י_Q!^tξĊݶf !t|=۽{Fҟ6]sUM_ZYkڝ9W^N:ewmybb6cBIgD鴬zZiM9o"rqLT~䃹 m6`|lS^3iǞKE֔#gLݖOB!law8;vts/s}ַOO|f.u_Xy4H/M.*X]WLpW_͛߷[SJ0ZWRV檑ˤTXTvع>.cF Mf˖],`/w`YѳiIGI%Р=x:3@C ׬j竦>oW'!:h㬋8TG vɴʨ0 pw3=Y׫Ȕ>Lyil_->~qѼǬ;n =,I!ol[|xѐ>sүȤQAI;Sg/@!jƣ)̙55 ?'ƨT pw4KSlWM#$r4t,D|L&31x45ѱCEw7 q~kV߶mQޑ7jn ;}\+-=24+7穾>]5u)\ro,~Xqؠ4MnqQg1etV7{]}͇;ƺz]p߬ùkc+j6HMJnsWOv;͏^7]"agZʸ t:ãR7A&-3^{ ݿWĠ>ѧso׋O>LQ7VZpXw7g/Rd;z~ܨ$Nөho6-;/LZ[b|ӗ_wvѨ<\mW(J4$IVی@V6hE` ݼ8{'?d`Oظm>B7WM{ح }1OKgr_񨨬I;/cz]9=~%y{+rhl4v|⸡ C:iΕc'/؆K {LJ4evlV\uK+[TDEyF WK=tvH}EwJVQ35~oQ Wl5et""*7A>|!+ G튩g# u h 0:9!!6**NɾBs/6>sz¢6'~~B|~'ׂUuuZ8ڽUĆ~/=ȚͶX ֨Λ~GE C{{ht:\+In^@QdL Ň[t$Ic{Y}}2smvJ۔ⳙo,f^S;>$ 7Wk0n0PX\;O+%oEU4o,%j FGKVq
Aeux2H$LTߕW+681d/׌-5M54NLf5{sАn{6,YyZ|{M'1o4vP(8yŽ}x_DzܰzdJ5e 5.4M?5!+lwh2T%U ɦV_-oJ*]4g*Zm]juW ʟ`䙬P__o3W&>4+k < LRS%eE g}KVYWqrS<3e]v _JQW̵'`4363 Cdv|kwlǮ!X3vq t8Hc'3s6ψq<<| FkЋO[߲%U^!6D NtsX,7LhMESЬz{f(ku*>-<Ǯ!llw68詋=cBr ZϟWPf\ꤞ[r{AQȔ>k/WTŒc½eGm~xͦ~{D r~(,&~f(|4U}&#wAkPx3:z"Bb|dYy͇/=;޺BӀ>1ֈ:N{Cp|LxP/EQߞ-yyN;p蠦1bH3d`O9BêrıCGDE4eǞԓW<ԱjAx14EmNe=9CZ{bNARBm++(tWx!By ψҟ6JIm'NܼZ!n`c;FVuZI|\][h4{ OpyQvtIK!NK!Bg;CEF |g;; k51L$IZqw(eM&S+H0}z=0vzjX F q t¤"w#m`0:؉.u,˶Ef/FeH$ɜ CvαIC0BMHtT8κ֯d)(|Hy2^ u^RY,kڹYGNPr֗钒///:ؙLJB!mfa @*t: H$]0d݂lX, 5,AJ`0-?5#H(Rr$I ynArR;o@bSAAA$MwQ/8N 8FNV9.d2̾. ZF4R%xv!`F!B!!C0B9 `r !0Ba0#`F!ME4-ބngI8A,r3![B (yh wǐ$)N]",0vZH$ `EE$0RaAjKQ(,*J.PT*Yޅq h& D$>a[p[ns~ijHC]ւyͰDPC0 <σo <σ6&`dGx:!WwgCx^xٻI$MfmT4EI$]to1U5k_OM\qw|lDqQu$% h3Rޥ˅NMܲjRzݲO>U ICg]~fN$y`=O>t6=_ԋ)#=P^/[$ ݻg|BLyɱɃnE3[`laY(پ$r lC!c"Ŕyz|}*НkgX~b! b{PXcQ-n/)tseR֎=tO^o ؿOnϡW_ۿwK< VhXV-e`ܩK< lwں#'/@P{j(37OyWl|/|v%6 K9^.@euڍ2.ar(qKe$Ć{{97 2Woؽ، oU `n4M);NoGkkyYNG1̂ H$LYyFT\k-*.pɪ~I?!}/d̙ѻs ߭ytȈ[HR7?{nbȐ[͘2&Rw?mm!AO.|ŧ߬yOSi) sp۱µJ)n֘r?zgʐ/NըeUPYU-~v ;ౌQZ^)J>lyfUמܲ_߶H}C˕,Y08 V`kq,x/ZKV~ͯ~nҟ674د6 sU9|PJ*}I3(fsѨK*V>(ZZY]b;d^*CR ;/HN!}׉Qf\Jj%f z'0 %U @_5uAoWܠdA2t[3>]\pkf~ŪWNjхBFםe%_Pr6[-0b3f$Lio78>*9aĕkv +ȹi4fEe!^b٬R\$Fo0e^ 0ԂM=GjǿC`߿YB-ݩzjR&MMvƎLz`D)j? n.JPʥ="(" I(jiV-"''jQ DzܥE A$mTժ!б4/,TGI6kj KeRW -,[QYkaٹn޲ʺɽ<=\̬Վ>vSe}{ZSzuӭk]7huÿ(ཏn /j+{`t63oh;jJy^ 97[X8X\XӦЁ[lp߫s'ر[˚yߚc{)( xoѳ#s K[uƣl?]EU]dI F$^lf⷟ (t B*28RUkOɤN}c!B]V{C`o4-$I;xZ=:nXn~Ѷ=ˏ=#4v5;.^._q0QGwޜ(0f+3r̨Ap%*MSf¥)9?:]Rψ[j󗚆|ϞN Fef A Z\R^QYCwc׵7tO]r蹧?HDDX༰@d0*616䙙 ŞMr.dۏԸcXl(DG|奙nO[B&TT=4z ;|YNxp`G.P vVfL&oYkV-8NPUZ\~Ӟ2Tk0t-IP\Z{:={ͺ3 yc?_ٷk(qܗ6"$[^n4#ԌԴˡ^:a(<<2I. -GU"­rJSG/?Iāc4-6:ܺz]vɷ7z婿!ϲ`?=џKPd&-iCZP .4L1 S[[?I u*=g̈A?A#(*2H&Ojy$+sV4-4oyzN7tҸa͜2jʜ7Ί f׿LtߺhBLXTdȀ%lY *6*t#mײX,6IRՂWoo{gؾ+±SOL>yRlTp˩i9:cUm Hr=+u瑰 n^ Fǚa5oǧ=lдT<ԣ e?{FɅGw-4oтY_.[?I!A9$ ك#XS,V"abJ8yŧoyQg ~j jCS>7o_-yKI7T 21kGG[|d01%1ǟdz1n9!A~;v_|Y'=4 eHoz2#6n?EjuyMlqچ’jT!^=zu&zy~~ؤKG(VWDTx=0 /j+;Ѐ%̵.~w{Dۯ<α\زG2`8V W:8ں6:of& ~ql3z9!g|1;۟ݜ9ggi]<}2-;JZ)6ah޾́c;۫P(JQq¾'\5yEPS`(:|h_o/lklG"k 7~x\&Hǡ/Ewdht:CVN %;iR[3a_9~vñ ,Y/5ep tFB4;ѥd2|-^wuq{چyGDB" mdx"!N &$g&DMXņ`X nAJQ;ቄ0 ˲؅h4,Rȉ IDAT ! HtXAw8)ϱGmm%HU*8y˅<ϋ K;# LL*t: H$8+b6- !Hx7FyAI4M5!.$yB2B9 `r !0Ba0#`F!B!!C0B9 `r !0Ba0#`F!B!!C0B9 `r !0Ba0#`F!B!!C0B9 `r !0Ba4MSEӴ  Y8eYGey?OW+*OخJ @NO? U;n_D~~~CCݷP((J$ݥ 9g8[g㺔J}@ۨSeA\6"˲ ZمB/4`6c2σwt@ȏ69,qsoe'IÇ yycQa5j2[ˏ^ɤXtd_“aG&w> b _VG|v wi܃/7&M_.wB$E9W J̿Z&XJ_/onm |ي$x{7ؕ"1LŢ:p.Vol5@_GÉ\ؙfuPy +rၗ^oufFL&M0T"uA]5Omqb]Mj pxhмqS1.]rP$ 쭾!+u0Hia[IMIM˱.G!8}bl3Iߕ[2d`oqå5? ~rb'~˄_S>Sዛ p @~^KsQ6D8k|@Dx {h4])({%1ɸy̚s3Rtͺ;3.& P\!^&x~5/OGpx`?ax_x~(\)Is{vN_TRf +ԭFЁ~$FZXV3g||K!z>ii? h@S:MP0$@ԛ!f)@Tka5@N(xr͇g6B^ft!Jr*u%16Ɍ²U|=jj*="'Oݧӳ<];.~‚  ̙=g\ZlA" ,:gn֥|q)"rr5Zz  ?rEɾ' fX~uctȩB744ks2L=K,Ѵ'ῇz]J:].$lu!S=FcZ0N@'/;ť#g,uWg|s[ߕfAw?U\ 6L$IRTߡ;drt)QUtḾZo!8A8(Za=Of5)a]s@n&ڭ_eǂ{Fu,C|fgn Ґs-$INht:L&ú0j8HdCCD"qtq$ɿĕ7hZuaρŐþ[B-LNv&2L*i҆}w-<p@KK eلzf?URR N>-{Ēup8#GTSS(JEEEUUܜWUUUIIBK.ˏ9R]]]5CQԂ (:ydLL+VXaaap8777mm햖/^o_~.]2<ѣL#AiiiOOO˛9sYvv_n?X,sİ/_.a#AQTT-OwVSSSSSr .TSS333zjIIIqqǙv/4iR_l6{׮]gϖuAާ^w=!r ļ"M:4Mĸ?BQ!9/XÇH<~xfffͳpB`` K~,YrŊyyy7nܘ>}'O(ڻw!D"9sѱO>***AAA=Vf}}}BP(Y&$$$###55\KKf'%%H;utt(RSSSTT400i|>_,XED" N:ekk[\\l``fMM}kNNN7o~ͺu80cƌꐐ^U"%IUUUAAADDDee_S5t,dwDUUO:v3g|3glmm%4][[[XXXSSӧOÇۗFC&]$ 2_~Lshdd4hР;vܹsť^$1$BP(&8qBAA!11… ғoA"ܺuK, |BEQǏ'1 LG :nذry<MOO>tPJJovv={?1//СCNNN+W{MX&%`;.\;rrrͫ[[[Y,֭[nJihhߘ.;wBd\BCCCvvv%'OLNNNHHU;[P(lllBu/_̄I$ŋGDDtIOO_"ݻgJΜN>x4M|--- !K.X|9MEM<}gO>ټy+Wbbbttt]zjuuիW5cfYrr޽{W\9w6M?Ӕ)SJKK===SRR.^X[[lٲ'644̛7/%%xi:$$짟~sz}C qO_#''7p8>?z۷8q?|0]paaaaAAAlllAAرcMvYIIIYYܹs%JJJۤi… FFFL?*c266~{llln߾KKKã>FӧO4А.^/3.]XKK˸/ܹlH/ ɵ߾}5>>ɓ'gΜٺukkkkJJ It}}B9EQ? !4M_Dׯp8 > aXGYj… ===#"":::F5o޼ӧ9r tĉhmmcǎmܸ'K}s8ggFooo@0vwYiCC\&T__/ ߦLtر2 3f\vǪ&EQۧM@Etlll`DjժUV 0 ###(((11ͪ(yIDDD^^^@@aÂϟ _wIb=zǎwcppGo;|vB(c,YYY1ٹ߉2p@HS洮}oKi޽{.NwimmeΗinjj:x˗ ھrG?w?SOO&..nŊO~i>^UUںu˗/?pfX}ѣG(b66_\\lbb{czyy4}͕+W:88UVVn޼Y|>]^~EC0D" D={ŋږǏ466jjjv io۶m҅LP"mذ0Otuuˀ4BH߾};G>@NN@]]}ҤID冕ޠ111IIIaaa˗/www߹sgbbәsSǏomm}%Pp$ sM Ϟ=1cUzzÇɓ'3Cc !mmm999)))ofӧOz*N]]=''GNNƍ6mڴiSDDĉ',--}}} d]̚5b޼yJ)+B+84%rrr6lГx[ utt455utt(++khhTVV3С(jܸq۷oWUUiO>bC肢#GGSS?.{  뗗?|~駟Knݺr߿ߍEN$I`` M#G.| nܸ8tuuz2ީ;VWWٙb8>>>۸q3g(5jTlllGGG{{;UPPxe@[[[$VTT?\]].zP KKK[ZZG%lvkk?Yf͙3իW^y&!D]]ŋ`޽{:::QQQH ŋ.O_GGGX3mޛXxݻHHHx~2!/4iRʥK^٣}}BG}tԩG9rd>>>]555}(fڵkٲ.Ȼ0aBAANhhh$&&vk^i&&&Gmkkc˧yyy͜9,;;/,ȮϟGGG'''\^E,+))-Y8//7o|3 a!cƌ!w^( ׬Y# O>tlBٿD"a"y<!$--_UEEȨ#99̙3bs:t蕳 Ϛ5+//oʔ)̿wܹr}||Ahh9s-Z355VH_,XkjjwrlْrJ5^vڌ3_Ix\.7==СC))){QTT ffri?.3G#*22ȈY^]]SBHSSL&;t萮S||ʕ+mS,;ͻҧ~pFI޽{###LpEGGGLLLbbbddc֭[c+%Dr-X, !ZZZEEGG?~bffD&$$H;֒!֭KKKSQQ߿?EQ=SPWWoii7o>ÇEEE塡uuu6lX~=JNN~A9NZZBZZZz7o޷o_mm-[☿RVVk˖-+Vؾ}{GGGFFϟ9s۷zsx(ŚIQQI%۷nEB&O\]],{>]OP}iӦ988Blmmo49X"DFFZjժU  JLLb9kMM x;wСC-,,G}٦n󛩪(JGGɓ'yyyÆ ?~}}4RCCK_f͚ѣGرstt x6;x,e{TK$m߾=444<<ٹ[ ;]jooi0779ljj~}EyzzVWW?K,9yd,HObXyyy>4i !ׯ_g޽~{Y%999Swĉwvvv.++iZ$͝;W[[{޽˗/r/BBBnbbbiiR|uFFFff&sUTTx5λJJJ*))霋ѡ(Ji677%??w=vm۶M0_7nrs4>5wܒﯠrMMMinlllll$ǎ뼮sfM(jڴiEZJ^^>,,C]]=777 ++(4MB"##;::ʦN駟vbr]BBӜb_zٳÇIDATGGGݹsG&*//x'Nxo9aLMM}} 绻Bʕ+"(,,lڵ7n}vU***]斔N9v] [[u1o%&&zyyN:x`iӦ>|Ãi<<<_ѡm۶ Hܹ"H6l@ mbb2{;w<}T \zUKKKSS3--!}}}]\\ yd' >@NN@]]}ҤID7U~F1c 77={&&&jjj/|>;g HW[u떕/d> O? njjbZ.*֭[w۷OYYɓXr+sH$=l6[GG" iOHHVVV.\"?>cƌ!Cܼyg>nE-ZH^^^{i:%%W}]ěSWWɑqƦM6mq KKK__߂7Ç___f!$66666ѣG666:`q8YfTTT̛7Ny+8\,09;;VWW_pawaX+VhkkKHH(,,|yƒwÛkkkkiiWWW `#H|}}lqԩb{{cǎq8'J8rm[[bD準re''BM111;vizZHc4uE{VIII]]i-blmmϜ9i&edd]z$00ǧqӧ3fr̐j@@)++{Qppߎ\nիT$ܹsРA}ѝ;wV^mhhheeiBwSWW;vstt!CBBBbq|||߾}7nhee5~x///EEEay\.WAA"4Ӌ<==?>l2L''' :ۛH$?|߾}-Z|/]=zՕWn/_\UUϯɩljjj!!!tBHrr͞2eʽ{LLLl6cP@驨ﯢpD"QJJ+$IXXƍ---/_geed%vB"rX,)((,ZHUUuܸqiii..._~ɓ'Ϟ=:uԳg2#}aFtѱ~cn?֖>}}}[nz&v5k0(nei.JzرM61mɓ:pzBIIܹs˫cbb/^pРA#FuְalgllleeUPP0g99;w]7yn!m۶%%%777wH$!!!x ={6OKKkll 7;0A*+++)))**BD"r||ʵɓ'߸qC:$t鰰9oEEg[[!$99b;/^laaCtqq@ ?~ŋ !jjjCeƚ\OUSmmmAAAaaauuk988B鄃vk=zi$!---zzz^^^yyy3g433ζ=x`bbŒ^EDq1S>|',+77*Wp=2֯_? Z"ZW\ٰa3#!MUUU=yޭO 5kքdddkiil,yyyf3{ff9s RXX8a„_A;22mڴC 0֭[̈)SlݺƦZ?jmmE+]$ɭ[b@ 'hiiQ}qB 4))nݺӧ%%%cƌ9rBovd/^0s)De˖?2yUVɺPYYI144|#if;KZXX,_\z1t++ׯeggwC cLS{{3!隚Қޙ-)))++;wth%%%]]]BMMfff|>࿃vdjgϞ8ydXXXlD۷o766wqq7o^llڵk%@ ;v V{{;Mӆ҆sE"KVV:@Ͷohh_f+ttt ^)аb؄_Nct|wwS(^r%<<\$]vƍoJEEŵkܒ;vf={7q @#;;;uН<|PWWG,M,ɺ6^Q5gf䏊ӧ-Zdjjjjj_$&&0@%xkʊ IENDB`dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_HK/fig/main.png000077500000000000000000002507051473346337000300230ustar00rootroot00000000000000PNG  IHDR8ڣ pHYs+ IDATxw@o*n]W]VZkU{׉h8@Ņ ȒHȼqb  ޽{y9{!B1&!B->>n: B!T YB!Ø!B;YB!Ø!B;YB!c5RT*jPaj.fyB$ޚd|>o TR)JrZ&IAHh4p8|>b:O=fUT"H&) {ht:fs\333&7++K.Wl_=Zyc)i4$iffVNCUCH@z$RT*D"BEtFr1E2kGH$f04f@Zfff:򬬬 /bi."ӧU$$ $HT*e[bPiV$3333339fXNgXbQeR.gggW}$kzX,ƀ}rX,6t-*H.酑Ƭ"H$  c0*deeoUA޽3t-*NTʐH$Jе #"TlWsܜJUjN$XCעR_\LcϚCi4ZUqR%ؔ"=P !}s;+!")2d2=>(Nd'A8$YPP`ZT'wCH_1\L#=|Ikp8/F(QP {XJeUJ I1fEzWC/bnj.4C5V앩, QrzWB0tB_c"Gz6]]eoސr9Vӹ\`EBBŊ;zӌyR /,$B8lˋ8\//TN[fh۾3YlƄ֖fzL^QLF{MKVMbj hgx;<\$ٮk@XakPv͚'"{mIcr/a۲Y<+HKOұuv}s@KMܹ`oR*!^T6fhn]׼+]bE<cpMaЫqp+-VŹ|D3uSۯ!DRwyݼ+wЩmIcTN<{"7k1gj^Do{WV/lokP(#_Ş74ٛӆXe=[(U8lVٹލ 75uBz&dX ?!ȷ7[NpND9"3:y^jQd9w?=}n>'q9Oh,ShjO#~V)}雚?4p_.- NdZZs9ige5+68{Nxw@MWo>VVl6unX_oP)TMi?Scn j8b[K595}\WW;[k*e%Y6'¢O cWEً۫=_GhSǝS s韥|]7>;[S歧Wqzѩm#Çn)ijg/U3Mf1gL`vV%/ ̬\&(l-̄&ԟ.v,w? hߴm|uyOwWGwWBS?8mmenj"|_EŶhf6m?jkm6om{Ϯ~ :mоǗ/hcm#N/\A~ӋLL͍ۋ L+BcCyALDž6:nˮFӳݰ{vL~t[kWzM 06<~/?NvuqRLa+F p.=/_ܸ#WÔq`oqt_ssSOwGZy\|菪ƦeW\|aYdZ*fenOn&ЙvwI+6g&9bPaO22m+Y!9%ck@'&Sj5LikNyE5Oe>;oPVEMuzavVEɗ(J;28[gZNZhjݞ]ZYZo+˶4׫CأS̎v gԌvvw2R˗X[Yy'r>ً^R۫ss<i^Gƌ(Ə}T˷pVRG;w{/,U%PU+A|uDNت*&$&;9Μ<롽da&$I2!)KFV *X[֭a}˶jy=qdjbt !_yNH|O\AH{taYsrEѱ:EfF5&RT٬"3drN1Ji,<%073 {y̍1úOLs_KsFOI|X 4&7s+LDW eZFV}:7a^ڰ%sBU`vV"QχsQ2IjjЕƛw qHMت*6mc߽pUB8cꦍݸ -W$I7[&>͛Pxe U4ԡeN֯6})c4+4xqYƴzWMy C&co=NmԶEkvuz' +z5,m~>Efx*{ū7$˷p4o@Fu}o<*ve !N|@o˼bȣ]LTK}ytzfVNzfo$~ Ge~]f 4Ĥ9t 4X@O (bPjbJ[@ ߀5o@jzAgFmaa;iρJJ&wlo6ET oFP } {2G,]|[,MI-M?qc V-֩i;8y`V]Z:ڸgJw<ϓ4k\B3o ۯg?ϢXÿE1I3Y,6/^F}"_*߳6+n͟9⳹՟] ŸFQ/|>R*bn.ǀUR^8;y׶9iC53*5ΞFθY5Ǚ6a8 o}|^Oؚr8qu찞p@,~XĦʮ[A fycv"n c;go6l;6}Bw<tq@`L)sG ʠ-ݢٴm߿ԋgh<)pv 4p&kMԌQ:7ϗtZp^Psj% \'G;MJM!Cӄz [>|}˿Qr];X$IR{Ⱥv#t᳭^kOaIlmj@=G5t(bgQ[5t{u/Ps =pw˷5oRZ&W<')+ܜ τoƾuW-5ܲu/wlާgZSAP+ Wgf.N6V7x:U&LLqt_3M0RM Ǫp'͜<{jڻh4SJKM|65at?{ ;NNճW-5vvZP ,,GфO|ߢv݇=wl͉ |gN6r9o\fˆn2ĵBU榷WBqBHMe R4!!A(ZYY7ݻw|~9FVT*.!C^^^^эdwXUe?LN؎jzݤT1KN'q^/|$>p@<1\LҗxuAm-ڶnja.ph\ɡ馦lvM4b3aA0 $kMA *;Prk1\L#=Ǭ:hW$\R(JXX,b<Fu)j.鑞c~ BPp8gg";HicRT*U~h4gZTPpЇBp1EHi=6mbbK X@($YɰHV$)|Twk T_\Lc# BJhd2PX/KKR TFEώd!Z#"/tPhjj*HxV%P(,KzwŢhuԩkXzFH/AY!#"/F;rL&S,jU( bXXXpeĄ DcPP" U*\.7tEnF7^!0Ҙ|>p8DPr$;h4bx<@ r$ 9H$Ԧ PhյF,--bDRP(|#"TyaX\.Xc'Kc0,b7ZT* JEtq޺y2`wd+3B4̌KR\N$ ])^p8'l臑\L$=B!~B!2v"B!c1+B!2v"B!c1+B!2v"B!cXlj B!T,lgE!BcVB!dPSF!B"B!c1+B!2v7!B;lgE!BYB!vVB!dM NǦYrU@!}L&o]B!T=btHB! LŠ!7R}X*!BVB!dX `0 !eP @!B88B!2v vVTn Bz`;+B!2v"B!c1+B!2v"B!c1+B!2vLCW!4Ni.$IZ&IuA1+Bb24B_2ꮕ`jJeZW(J /-ht:bl1fEN,NO!/DT* U$%H$jf-J%P(e1+Bb2_!T:d2 JH$x_NSG@VT*33215*:!5=ܿyC33S\pB+B8 ZjH$x5<,7 m쎿O2ӭQ5, [$4oӢi~llp01B d SXLM]򥍸* Ȉb R3W_*ccS2sjhDwwg>[\!$ oƞxe_viӿ=pfC; M4߹{zD苒ij%qp O<Ȕ5M3_$*??( pN+C̪P(Sӳ\uRm͜٢YQxQs; oCx lyu,0!m 2ZJGryYr!f}.v]1˻&]l⟶X4QC/*Sm@xΕv}^[?2nD&ꥤgdL[)ty٬ 1332 MM8lIr3jJ۱^?ǏοGstH}{lG:il90zAAQ2J$Ib;k tz{M!fmk1?˲>n䧭s Xu\ڣSs.RvVޞ2jogcogf3\#_;"I_&翋I4OY2 nD= IDAT?onHxK.SN9<<ɓGd޸q#F[vm-H| V\ysssxex<ުU B8v׭[o>KKK͝2eJy<A_zuPPvL~ddvzLLLLLLݺu 7BO#J`ccd2JH$$XSSSM"ɤ7oԫWO;# L6mT Tp?";OaCw}W)%5cO%:߲KAG)y%M*48TeMoBk׺=Z&4u/{95u0* HXPvnޒyc3gs"$Ieӿ[e˺GO_pзA[P\۾VO*FM6{̘1LY-ZaÆ?~&MԲeKj޽{GFF\reĈP~Ƿic6=z興AP(3gRҥ NknԨQ?}N̚aXtiÆ 78q"&&&00o߾Uvѣ2?^(feeQN[xxxxxOWW.!33s޽?6l9bkJmѢvv#w}) z5c JbqPPPhhhTTTǎN]ĦM ʔҭ[7͛7Ϛ52eqsvuԩnnfaCĵ>Ed^|~}Yʖ0%x>gGo~VZM6_ZZ}ɠiӦ|xYƿP` *V;wvּycѣ#JeXXؕ+W۷` kw-#37fa!\sG:jg }|zwm9rHY-V=uUBJp|?ǂ =UmIg}=']͓hvȀqq̟>,_"ў`3 :}☏6gɟrجQ?3?k--t[9giam„ :Ե$ɴ4 +J@@Rn:>fh4Z۶m###߿TߡC•iڴ_xA%4N咘H}-'Mb6oL}4Rii4ڨQ{ȑ;wh7cW IW*G`Ϟ=4~o߾>00ܹs~S47YwTp<ӟtmrT.**ѪU7N<ڵ kݺu{㯿ڴiӪULLLrԩ~m+Vi͚5{YzuAAIrssX¦ {S.^_~yQ^N:E]jjjgT^ I)wr>y_6\0s&ؑ}ƎSٴ㈳]eW}=|}߹ 'l{cl23/_8 <ܜhӒo41Wm[4o+4tŸNoX[G:'4ӭ?٫u 0fd‰ X,f1Zmkk @bbbnnn sSKh?"/}6??_RQJ??r 22sv8&ݥP%<6el벵oҤIrr+W ourrjҤ)(>>ŋYϏܸq$I@QGѱJFjƍ>_&MnܸQt>i&OOO*|ڵ˗+޽{,J,ȑ#|~%CRV5 ~$$sc+0ax\ԃͳQ70Jk;uT߾}̙C>Yϟ:uԴiӳgώ5\,_|[l={vzBBʕ+ϟ?O}\?0bĈ{X`ɛ*P`oܸѩS''Ry֔a6 ٩>MEI տ߮?pwAm;RgpqvrPL槾;G$ff e &b1qgr"Koow?5oXP(/\ӹCjbRSSU?>ŠM777s݊DNp111]&$$@ 4>|OO˗߼yׯ_7u6lْƠs3roL橐H CM' Pu֥R۾}{LMM&'O߿@*r8ÇS1֋/bbb:t萕EE2224VVV5w#~&N%j+&#S}ի |*ݻNruFU)<2x+"ΐ!dhTJ9l6 Y:--:?ԯ_bܸq(oZ7n\{;vLOOsN>ehR:ܹS$U#=ztwSvkenn:yoM=:6<羣>qo})2hU_h4Ky\@;`^fas;k`oXb7|<{_ܼCjV8Ng999PGlllRRRJhC%I9LJۛ7o@CcJeffK.cddddN'fyk}K~ޡ [%҂WPN [l ;III£RǐrիWR;w뫽WxxxrrrFFF~~9P( 7l-=ܜvs2+;wΒ:|xgC8!cjkk"01ٲ2#3j~6ekchkiif-x=g#_j? vsqX8k+K3jjѣ0dMbvv6:%%E; $ ³h8wtY;]vƍ f'NرcܹsX'l3Xٳgϟ?I|ɓ';v&״>|UVTWó<---66600ܪjM@ }-ͦeeeM0v A֙2?N}yu:ד'O-[GnnnZѣǀΝ;3*rssD"ѐ!CN> ={ܲeg;&^xƐߗ烸rZj{'n۶aȐ!+}bx{{nz׮]nnn\.7$$jˣf,$ ˵MNN.a9s̨QjJG 7ruqc,.CPhp=U g'UKtBd>oYY;^9S :XYTOͫu~֊zXYjXLGVU}?vYjd۵S[h_RȂ۷p֣R(;wǗ<Jcǎ=4o~y_vR)k(UӧOo߾M ԩiL1X5SF~GRq8jd]JJJPPu Fz ( .h:TL4c (99yҥW.ˀ\r%55C 9zhU#/^<{]6Zbرcƌ;v^bEcVwŋ]voYpGcUӧO7mtС_RSS5]ʋڵkԩѣG[l13ѽwfɓ&M2tED\.g] Enjl$:lV}:wY,͒-рcw92"ٻv)SPz(TKuAy/ٳ %_کu FifkN/5`///;WsXׯ_/G*RU*Uttt`` Njhkl۶fUe46dܹ3f̨|i=zC8~8uTŊ:|իWGy-H$50L&k׮}]nnnžoOСCOO L2%00099ci-m]^ͩ'bxȑͣ?~ܸq&Lxbƍ gg+WREW4...d+k׮}KTG**/] ݭNKP(ú4|Us_6H$ԶPr|͚5={ 1_nn.$IR1k-aaa;wdX˗//!`JIIYr%̟?>Bԋ271Q_}ՄԺukocǴHR\.}67::Nka/M}K믩u"j(Rdɒ[nٮСҥKRi|xeZ͛yӧSߊ/^XYY`l%M`$ to`?c+=*iii5`III֟ׯ߽{WF2 ۷ojbn#6hРÇOFo DC!E\.^{3&07ФGc\cVd`$I|Xl\.5jΘ*mkLLLfͦMVSΝ;uF)͛7p9Y[?κoϞ=ҥKj#G Ff4'''gffTǏ{yyQ^ÒN Ĩe͙3g߾}sMMM=q޵k׊ xzݒ%KΞ=ۣGKK˗/;w.$$D/^̚5̙3]tOZZҥK+SaÎ92eʔ1cƤ/]tƍ~C4{_njRJߧYٳg/[=..nٲeW|2lذauٳgRRʕ+vYDԽ%5288̬~...W5k?,ϟ~R{nP` *V`HHȐ!C.\;88́UGW.\@zXPa?}r8>ﳻМ\so8GV{{M।{X[Dڋ#MlRwޣGoذ'֭ 4ik׮ 6mڰa4-:tԩS駟"""7nz"_rٳg%T>&&&&&nݺu*4iR=[V.;uT755m߾&Bdϟ?`0~~~~~~ϟ777{@ 0`sU=bх{#72g"߾}[QS߿߷o_ppp^^^@@ĉ[\ѕogw۷*{3f̨|gĜ[^t~„ })19P+(Q&H`[M"giV\~ӧO?}YfÇݻwez޽{_^~!CP!fJo߾SNqÇ1K(@m۶Φ oPfK,Yvvme-N/^BrwԈM#vVzaMgs:{=ڹ_L1ml`;PODRjצTYQUgRo~YSSӍ7RSL7mڔ$ɫW_g^pX,8p3 XZ^x?W8*\Wz$J5kFөݔW^խ[ɩP(/_L&S.gddxxxhQ2 x<^4773U`?l0ҞxȈ|91wq5,-ɯ_PLG|jnjR5ǘUIߩ5Eԩ(GBV r˫ÇL&sݺu3߽{`SZ D"fN_hӦĉbE޽{~~~<O$Q1Zi,1+*j4:KhUX[18jjY\$JKYa$IZyݳgO''g>}d- WDȰ8 8= Wث +2F4Mg 1Ҧr0fEAӋ%5jԨy:(}-K{wy!TMDu.-S>u!h y%&1k ("j$;!Ώ`u-vyfckoTFճ6j}U˒.A&666!!d2Pk( $H΃L)X8C,lBV:TTbTZV*VVVv1XR-f ] 1R(JDnnX,6UD" HMMSPmC>@|@ H$xjPD 2vZHRh4 {hp\   1, nB!-2"j'R[Bƪ3 &)T*\.'I} Fh4&f\.1 IDAT)WTYBJR NL}HԴ.pX,ác U~T`0X,Vy[1fEf$Iq!4t:m//B!Y0fE!BcVB!d#f͕pB!QՏ"*HD pX*ĦCn[A!B5MǬ ݃@](`00%$d Я2oyT^}rnXDMy\B!TTe]}Ul ~n 5߫2?|ԛXx|_ͺ!BfvV*)% n f<6N`]8rF {r܉7ocz?ohpvv~>G!BơbV 9x`T;‡8?ϗCޥm 4wz.I)ڥm\3IzT!BðaJ ($\\4^ q5,\؃GϮxVR"5cUvxUU:!q [)c9ٰQ ]TgyzZQ^zƞ|Sd}=)yI%}=mvfjhR}GKֽO[Vs݌ cUv=Vbb\WCUU:-+6!ӆhYGY5*YI HIZw6¦uS1fEaeJrRfQ?6?>o1璃0_.b+8t48VGJryMֆQc%H6kN=Ҳjm=VϞ?}b[}1ky(7wǦ?J-Ey<~0*phFxcVE@AEd~gWw7SgKFQxdW+KsԌWQQoޏ̴9rSRZcG)K~wV)5Jnzs\;i6x@2R=VÒK(ξVƬPc Rj|@54^{7 s{w?PA\[ކPc ǐ.=uY쪩U:H`LŤۜoSDlF cVC{!4<~-=HA*[E_7]19;G++\ZMqL޿٣IS3E&|W?`Z[{Ҵ- l Zɑ0hKԫN^9LSgv:]ۊ/KQc5fꮨb2Y 71@] ARYScfs64I;*uP{)@I[TOɈdhT yѵ cVYܾQR75Y-BQ,÷w 0}{p9yËq3&з+i}vQ慨:QƮ,`h4>F:b섘woEF5cUxʮJPpy>ޭe*HKmظv>QDF{2ݷW yZUIBrw`cX??$ Cas5o<ҼS1}KSM˩a_XaZY q{D]5I*TGZݟԽb?kۘbT0_CS`KeEw:sVoO]F[⿂( ۓ{P_7|X\F[[(+;u”id Wp d/kӄO`ꢓul4(|6Z %L&_;cჹ-GrNui)INo6~2Ǿޗ5 S_?=^Ť^W/:Z.Ա0etJ03:Ղ$s|(Gì&[uqWR|eٵ}ޫO\^Y^>,8(X9f$79,".sV6u놟zCZY/{UQVhb@ 4l62*&.ӧ.Rb߻od>n;-ZxHc\ ~ix9A@ZJ&V Ņ7:Ŭz_.mԋ$ɏj}-~c߸icG_s]RsMKMzB)cFwCz;7ݘ5.>ko?zNoБz>:wm%ʸzsy+u[k E"Ql|u߯ Cp%VUP(+M&He콵;ćDŽw\ }#'o+ǧ  O.鳀gNo؟ ۻ|UhhK7Tp4ZϢ Ey^0y(ObP&V" 0,iJⸯP676OKknjeizm>l+]F[ZYL"}u?cO2ObP~>!G fG^O}F#z-GzlՓ択c~AT<ĺhb %ƷN<s)5ޠmOݍL|7?iutRVmKK}wW4sڼ|fx6SwCfM,?(rlIU\Z]*t"HtllSCD* --mFNгV&f. z=˲e]%M&׻'\jh5eh(d25!kV5@`d @`=htǕUd-Qaklճ^xEo|F_S&O F 7 v4ddߑ6ofuehhkK˞;f 5u2IcZ{poH|]ͪѥonybRk)fԶtWSurW Z6[uKm+??yEyZm5~r,+#H<8k 7G,d_kM)WtNڞ5<HV|Ͻ)PQ\ I.)Ǒe/ͩGQ7$Ghc]FcmހVU{Tމ;cKmľ" 9n9I^S\o_+ڭV,WpAbY=x'Rσ4M,<&':II=/|(3+w)ԈŗsfY`R9@複2?\]0 8{Ƥ&OX\]~0,W ;MO,B )P, ?[UO.No ;-6"PC*#>u:d CS(( k,\$VöreUFC`e5E.d{8-C]MD$FxT,xS1+4?B.j%I8ѱx/+}5>.=:|V!B׀YYvP5C[+4˜#) e(CA U7i. KSmYڛԛ/?OiDYB!-z2f=j:B$0fE!Phٹ( ( B!]9!Bj1+B!u"B!_1+B!u"B!_1+B!u"B!_1+B!u"B!_1+B!u"B!_1+B!u"B!_1+B!u"B!_1+B!u"B!_1+B!u"B!_1+B!u"B!_' iݧM?'QN BKQ(z Wu=]kcV꭭ 0NO@Ťu喺&[Ƭ!B#ƬVֶu>]: Tmm$fX` 1Ǐd=\}:ܸuWRbɉܟOB჻飠KSӵ v|⦇cf➮l6K$}g4"hrZ-vdSm߫uQf,i<@ y9,}|INQW !B]<6]߽ʩa :k;_$.מfʟzEN4߾cׁʺ'nCkom߹7/ZP7BB!-ge-˽Q&Qz+k06O8WI~T*WȒ{[\`{[jkwWC"[?B!*v:#p@YEP7Qš_e}r68 M3&廵/]ne6}B!ԓ<L |L:/e"Ï|ߺ|"n;s/Μ-4F>x2ٟ6fW׵ e߰#::\$͖G>B! Ǭ#iCsE[5Yq o.o;ZZSa3G=xb}zeǚLȈP!Bț<r4KljÃzڔo,G9%TXau:7`aZ$5"#tMfgC!y0I7HVИaxQ6|ܴnwLfTziFƲliiiIII[[0iii$IvZӍV/>>>##C$yn61**}&$$o04M fs```xxxFFEEEwaaafDjkkJ%8"(00ЩXKKX,m3ZVP2D.<"h=(˃ܱduuٳgY MMM½za:J,Kӝ H ]a5DtAAAEEE{{;AzJMMg%%%ZV,2Cr;\ RPPjժO?_j+RF4Őinn޴iӶmN>=hРs=111ެj=pȑ#}m h~h(P %Pr؏ַԅ]<]+q]O ΞrYj7]v566\.bҬsss LjO>]UU5eʔNϯWӧV5L~~~* n 0 sСBJDRTiӦOz E+ze;݅i{;avгwVJe]/TTT|^7NS$IvXQQQѡCLޮhFկ_?ǒ*((`Z[[[[[;`Ç_Ih:vKoL&`"JïnNZZZ٣h@.\XX8{lǫYamU^P ꬬ,W盛{AAAFa'O:>%fΜ ۶m3͝<---11ӕܳgϣ>ZVVֿݻwOի'LD"B(((HJJvzvr|֭.!++Nx0f*I ``7ox>dI-*,ΫXQ!T:nI/0O-3&@cdxȠ "0 IDATwVVVH$S@}}qԩ}^vrZ6]cccyU."H FNBFwء7uTd^^^]]X,1cRZ555v;wn[Νs pرuyg?RL&ә3g333+**juFFFkk3gbGǼ &ڵkEY,ꩧz:t!\n63335333iOv#F{MOO7uuuCmooP<2R2/鄡lrRڱɒdqrV?wBlaQٷk8Uvﭙq1QAPM#snjO&Q H:CZZF:{1cRddw}Çrѣ0nܸ$nT*?~jFu@MMSMMMpa7MV ᡘuz;.p[rĉ׮]V[[-˲#Ftl61DKKKKKSZV"DDDTWW'7o^>p)mV//))h4~b IC,'66699911 @ 3Qќ={vذav5v]vp l6ǀ@"v~q ;iv,u)JeVk{{T*%IeY@ H.1c',,,## p`N:ŕW* &L}v4ɓ'O ~mĬ{i:77744/Jr\GnXyGzz~:a^X,~'߿~m۶w}^Fhh(w(,, :N$qVd2\.gF.4MQ\.ў੘tBf+ 9A)`qsK>~̰ԯ?yW'kq߬KO}걻BL;wn3 ǩ|Exxx;Vv,--Z7pSyOD MDDD!u]]]pp0wJ l6>6 VWR433i\. jmmU.b؎wb1mY__miiDe2bQT^Bg???svHHFQpIJ",vE-$IvEIcǎuHDllFik;?Objl%$$r^ܹKhlltʴ1jc_}9K-iϸ'˲MNc aZ-w)[SScلBcp)eee]_WD"BfZ z~@O>鴑 )S_yr\R CDDwtιױhikg*TfNk 2D"P nqc Lw_O*(.8Rd (`İA~_F_VŢ% V,kXUUUЯ_?PEQ ?KPHd20ȱ>VNVc`ȑcEQcn 'KH$B`V\WFq3>0^ܑv[d:h[D"9Nm$I: AeeeƺS ;s`0fT*UDD߃a@@Ӵӭbbb2@A+4Ĕqjv^$22r& e r=SN;vlРA&:){z@ a#u% aA@o60`% $HD,lo> T"pr?'3ehkkNTAu9n-N>fJ*eYkz\ A+))ZQQQ\]z{ ڱBCCCBBT*޽{'NFJPVwz.b>HzZf׍"V\w0Sq|%iETr7(`1~JN!FcTT-_ AE]I0ЧOm4,lh;t^f4MfddbVu;C 99il7qCKҼ;arrrKZTb pYBCCty,BPI)$uQH$rh4r_}\Ԕ$  ?zX̟eS$KVs-"/**<:2"GuV'NܴiSEEV>|xDDΝ;`ر~gMY,r?Cr(%]h-.jkkslʲ,?hnjj6M t:Xep_AձZɓj:88xĈ\Tڱ70lZݵkÇ/L&+// à Ye2ٮ˼eٽ{?Μ9&)ONNh4܀KǶJ.HT={vƍ1 Í]HNN7jΝ :j'##q7,k0'Dn{'f:xûM"xbӥ⚫cp 4i֭[U*֭[%l?~6}Gqqd |&A+(( V¾O7YVNETA(ʆ???>+l6+ >7Tb Z>v)E8x` C7Ƭ=Wm۶ 0@vGY;o߾:^ yTXXXtttaaaHH0FQsYNme2ƍǥd2n][[۾} H$[ZZ"##=7in7kwjc^?`nuo۹֞9sH$JNN9tPcc-[f͚ս+1 q|#OqIrrrFT*0`vH4gΜFDUWT4MwGjRlii yan.N;inndܸ+n }(1ccǎ>}y̙\d2F/Q Z;ܛSTvAnRO5???-V__uH:T e/㺈 zю(NyܼEqRr[5YnT.wmP'keԩܴq\DVVV+**뮻`ʕ#=fС$I&%%qm5n8.ɄDHeZ{Vz˲gMMH$wvᩩ-o23k>wڊ$I.ݻw*'N '\oVW^3sxk֬)++NF;R!C[QZZ믿]ZvΝ&I$k# .?vݻ-R[gϞ1cFnno /eN*eT1ŝn+~w`ZN9ӦMv-[jBBB ^H$'OBZw8^$//- Jj[ <)v?N{0*No+avY]]MDhh\.tW3f>ǙLNSof+s]=~x8ydNN˲\$#HO ]ڊaÇrg۹BpҤIs2 }vvD"\.t:L~N+qYY zm'S ;3f̨'|R׫T*i,X੺4#vGŝ;1 csD"={ST*BHNN2dV7Y6:N [Yo+$LRSSSXXVryBBBZZ5s!ZCCs 3w~OOOojj2 ~OH5jTrrrqqq]]w 8pS;$9uԂbV+3dMouRVVVVV=~{RԩS\ }Yܘwyȉ~VE?+ꨫC.zvI9wY1U!B:YB!Ø!B:YB!Ø!B:ˆBnbրf5uڙ|a?+B!c951`lq40[f?~z77>d2[KȎ?Oqwyj͖CdcY@sؽ"Bfɼ3U/|(7ksY5Ys|AĬqm<$[>_|Be?_wPrT"f2YQm2[o4RH"t6#h!0Ϋ;.p)pIp|a[5u5[it'v}{V׵>~y}[M}vQ'L*":& õ[B!yQ/|i >72A|2wT,Xd^/o`ԉ#Sv)nyh&_|vLl4_Y! |5!B]/Z_lj3-Kޢ5u{KjeѴ镵A)}ߜ^Sɿ"!|؈?uA. =ظ D0 ,1+B!tqc֩7{} EuMj ͚ЀP *S{`…߾}L*_yf/[>%yEy|e⒊_6pbZsuܟ:.omt|'JOӗW4m0^|E%PXTԬrB:JBՖ}MZڛtԪmhi?SVE(d Pr? @@\*H㻿CELGGD~Ve]g:8ŬuMkR28Κok}y|tPdMy6TKGmkBT&"~}W,fӤFvlӝ}z{fB!D$<|6:,pPrLviWN"]y%9q<.U O-z]w~֌YSG>ĽMMͭ'O Zm Qay• 1(WYGT>i}ǧM&  "<zg=7=K ?|P\R n7}X-z>hɦАC!N;^lmϯ?/~FJO̻UΟYU=[衩bUX,d>+vOOK^vs[[{aQm4g˂B^s~=U=%)_ִk$_ոȴ$s7F M+*?], f3& ʫ'%ڽs%G|ɂeyŹώ/}Y(BzGM TyOnߺpOHD~)IMZ.OL< lv񗉢# xcV7+l㖧^{O4 ~ZvP``eU# ٻ(m[T"DI78t>zE;7:P+Go\\7-vo7SOD!tHfrj_M U͞80(@ieY$IHXUײPC}E jnkh w|gDL"I@ ]_7z_)`uǎ_>5\gCk~gmj I$ $`[}*\bMDI7;tʤZn}/ƏڱNVr {a~mу -*x%W/?};7@ȅ=Q!IIXTźpᎃ *mMS {ԑy' ~×&\d fM  usn fO&Xlӫ &;-z"eYn fzGdR0͎[G;p|%}㹀Ukڵ. ؘHOtQ!Ef[4hʘ\o?v_,Mא ^|3I(1+:N Y_|~}6n ,$79:{K9Y?[q@j>f\Iq7vAXq?Y_~rqڦ_ޒwuϕ9r,ݏ~p`Uy2!/Q*l% IDATM\ʬ>D(CWK|j7:Y ""4.6*8ȿ](>|7fN>~EMm+Keȥ/L}|OEO9m$:ę޽b\S,~|umC뛯<X-lΓr*j}@^0jxSeЗ촱:(B!^ VwRxd `?IpSWl0Z7&%bYdAb]XHIo/1l7\qI%Z}gԾuMK>Zeo>;K^W=bwj%u{$Bcw1 Xf0hVikՕ*{&q#*jc#kuOX$ öjt.j #geH(;eϻ˂6dO.tx n/.d 646A3nr| `j-tQ5%'x$vٓ{]o[woR>kݷ$[R.L39Srِ9ﶄ^1p;?ggK9%s5$\qwln,aXz!BU GJ_[M UZۍٔQn00:"X l"p\&)nWdmTKB" uz틾quK RYX}-W8پIQ7>`3O㈪%̇zQYJP(BV4-%_Ȕڦ $IFFq(ٳh|lT "H9~*"9=۪ݺp%*x;mZ$&nhi_9f(":& jB!`YVbcc7bV5, C3 {뺥$ƬcVazI0s:Y5ծh. 2oa hǥ OƃiCI4\*' ZӘ[FGbV㝶a>wbVlk AE(z$B7 *\f#UwMI;F`~GSJvro3F}pZz?/=8!#NY8r"B\lPd:ZE/ J|kŠ=6]'& _C -'Z[)'-vg% {&[otv;'畾Y;wϓ0fE!g?]{wd'o>DDRO_v>w+&t~&ZlЛlXo~Gp c`,VDԿ׺%r[[4O<cVByVlrޜE5ϽQ@;Wm90l蘒;&IhylveҦ̓KjЙ̑{nwv㾳iw'PӤ?N"J ?+YB!Y!!O>rv~[s&\S[5. Γ>l+uhι^[Bo1-:cTxPדe˹yNn5܇k B+@[:l S;md jubåB+F 00|ϱO $$=]Ƭ!&@ᐇ=]B!.cVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!=]th4Et-6eYH 4mZRiOW`4-KO`0zWNg2H. k]n r]y\.=]h$0wXVŢP(z"WaX \h +r`Y$ܡV ƬZ,˺.I!BåB!|Ƭ!BåB!|Ƭ!BåB!|Ƭ!BåB!|ƬWl͛7?裃 6l?qF/cZwm6+0̼y d2ysׇjjjrɓ'U*Gө_~Baaת~[緶z>.,{g}6##_~۶mEF7 :fyJN>T~k?Sw|رc;S\\VWW[rKZZڣ>vZ TM޳gOUU'k9e秤L0߯~5x'O 8µOz饗֭[SN(jŊ+V:u뽶H$R(IIINώ?>((ȑ# <...##ռmV\r333mtIMM t:?!!)PjV JRTznl6k@RRRXXʕ+W\p7|;EDDٳ'>>ٳuuuNO1s۶mC 5)))III^M>vŲk.NMx èTNwһwof{9slG}tС{/gΜ?zmܠ X]]0ɓ'3gt*oZNxf^O'MhѢ>_\niGvƬ'l޼yݺu}<{7| u,..:YfsffF9~xff&M{)))\XX8~xqZ[[{:X9reYٜ=bHk׮!Ct\166ĉfY"xs͛7ϛ]F[K#F/Od}}ŋCCCsNi>x`JJJO8PZZfYV, LrN=䡇z衇:n߸q],X0zhU[@;{ojjȑ#iii /ۋ/^|… PǏT*t̙̊ Zz/'|/]TP,m۶[ouΜ9ǎ 0 @>'8zEUv>l0B()D~~~ٚYRB&2L,]_~e2YzzcbbBappX,fY6 @.@ iZ@.rZo1^*ya_r:}nokk:uTW]̙3/R|| RSSIe˖-\ /!555==V5,,L.3 ۊK~t ›1kj//{رc`VN N~~~a^D˫~gB d2W_}坴޽{x4Mr R\. ]mѢE2_.q7_|EOWĿB`СN* ח\PR CDD˲6M$wJp3L2{̲R#GYYYcǎE"QddjMIIZu\v(1ȑ##Gzjz4fu u:n/...,,4Ad2|~WxgKG7葑P^^`Zbf@ӴoP B)BQRR#?C޲eˊ6n浝655SŇ"d2˲\:JqqqDDD@@DEEEEEy!]bbb71";; 0PTTP(+ؑ0ljTћisuj9sϞ{9Bף;6;:[D";h8"ōD 7^@S;6h 2 >ؼy3 6pSO0\ŋљ3g3 $Irq0=R1Ggậ4޽{@&1 #ˣ 2v_ YYYcWjjjZZZbqnnرcf3[ph4\lj׎N^}թSvL(JtIIIeY(hZڄB!C_yyyfs~~RB`0DFF߿?33d2q2MUY~~~ccKG >򐚚QXXؤIvUVV6p@Uw\SW?s(*`Eq@Z UGiVZ=*uShEPʼn [FBH?/#Fq_Mxs'sǏ4lt=2!ڵׯˆ ,V饐e˖,G^z^JmժUQQ:ja8ѣ !;vl۶-!ŋj5{pBLLL޽ݻGd}s`Ǐ08j嬨 //:ߚmO+WWÇx?m۶ڵZǏ|oPEE]\\wtttssUf_!f͢*V tҥmw%;;h >_ZZ*zer>s۶m;v,]UUU_[g\.OKKh4EEE}upp=z>BHBBB@@z]jpڐ>}$&&>~ 5 pThzzFs!c"2+\.>ܱcÇN:gl喔tҥW^!? ! øj\޼ysHV[3޻woҥ裏QCwqqqQRÃjX]:֭[͚5roo7nXm`uQQ!p!$222&&k׮V()urm{ 0㥦8p=zׯ_1r˗bˣG<==i1ܯJeyyaT˖- ;wl555[l9r5Ѽy:iӦ =nZ,?yN&ڵkG<OZ#""׮]-X`V;_t/-Z7ܯlv HIIņb:J΂V`( ''m>qqq{ڕ-ZvI*J$z>w:ԣͱhYj.JRlOOϞ={o%00ťv㣃Օ/ٙXmܨ$S9;;ǧLR]]m^WU[[Ki߾֭[ɓw}W$}gYYYV(?mIӧWaa>T*}]СD"1}`3JJJ*//;w5xdnݺ5j֭E"@ uVVV֓'O<<cccCBB2223ugggg8FNezC={677_fMBB¶m/_no"0]vwQuss{䉾b1ݑJ|}} T]\\ZjuϩIǮi˷4''QF5:zޭ[0gggF4`Nqqq3f̈9~xhhիWsrr~7ϏUûp8+V>{W׬Y+0X@mܸj3226n8s-[X!$//xR zÇ!'![n;|ǁLD TUU988x}lQ.h L&mݺ2uT[7?tj_ӚhB,6nXvڦ67.D۷o'r텇 wҥ)S{ B***VXq…>}ڶM4)$$_~9хѩcǎEfc„ C ot:!DP_֭Xڔ|MNf͚zj&''\gԨQ6,$447((H";۷j‹UVG]p;=p@BAm۶ՙd |'L0u>888---##cڴi{dqoF lذɓ^^^7o}}}C;υ +ߑ:0{0!!ܹsbn 2a„~vT0OT*}sRT(ϴK³gϞ9s&''G,6lo djw75P(駟~G=z„ ,QTUUyyy=kF-^ABh4IIIOy'O Я_'֙# =MKZZÇSSS%ɐ!C&N8vXJeeeỠ̄Y_Z?<#;/##Lɬ l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l ldzu%HT*KHRBFuARP(uAV+Hl])$ r.HP[[0 tJ:G;;;/Magg0 :NբLjQW&+dVS tBf5N{:G[ h4 àLA#4LD YMA  <5?+2+2+2+2+2+2+2+LYYY\\\^hl¯*$$W^={ŋS7o)Ԝ9s&22aVS(gfV+^QQٳg9L+L?}=z3?~uǪ2eQTǏ={v޽8gΜcǎ) +O*:uJ,[a[Oj|OogϞ7n$=zիֲeO?r52lm۶ dS몺:222''gݓ'OZ6))iɋ/4h% f]ܸqյM6Gfܹs؜);Ǐ9aÆiӦМ;}ӧOoذ/De˗۴iӾ}{8|]\\kUVT~Y_vrrrJJJڶmkXWŋgΜi°BBȦMbbbwݭ[7SRRjժ͛;::Zd2Ӿ}{//gd2b4 6N[  /S_>mڴ(Cի֭['Ny游8؀g/Y軪oT{Fٿ?K25ԺشiRK8ѣWX1o޼XfV{{{i\.Bޔ棏>4hC??+W3f߾}+WM)\W.{xxXŷk׮]v%ܼyӔz]6++˶U,66kL&Ч ØL+Y;NJ555555}1x*}ҥK}}}[ڴi}vb&44;;;s\D /~2~xXaÆB:qVZqsJR.럪T*F?Bnjm4MmmL&tup\\\lQ;vlt:T*< z1ҼA3>!URjiSQQݢE3fX[)uu…:}Q***\nddJhP($V̬2LRjZ\n5trrx2L,WVVdXh\]]ܴZjpѢEu:YBX"k׎0H$jѢ%JE!K)ÇBke˖'Nyϗ?𲬟_Ϟ=͸Ŧ&%%Búrww9r$wsssdm,**2{d4(Dn]UU!V \|믿nggwBXڸqÇǖ-[ mȔ7n w"lƍeeeKݻw=A=~Ύq8777777}*Zw^B~]~*jbXӳYQ5kVΝ;( ˖hlk<==ǏZPP1''r÷G!fo4*`Sջw&,[>T0jԨp۷o_RR;tPBHqqq{mذ!22rҤI:ҼL+BL&vZ޽]]]E"Qff!C0//:BmB^BBB@@@N )??^+..~1ϧ͙V`FyxxЧ-ZȰhk42+r]B|xԩs̱ayJ;plX$BHmm'|BYn{:xBܹT*iz;;;3IQQ!dĈ ###cbbhwX<ϡ2`zѣ_~٧y&EEE-Zh4%%%>>>"g߿~5z%΅VVVwߑpe}$((ח> ?~|dd$˵a! ɩm۶Ç?|p\\ܞ={лC$鋡P(lY_mٲ[n-!HTPPн{wz,e&((ɓ'6,UTTTXXXRRReeemmmvv?ǏO2چcG}[n:t'O}]Hg6 +BÇ-QKKAl^.P~7t:3v䷭;w/X 00ІŨJMMapsrrbbb ԩSm{qRSSoѱyfYhQhh3lX:4MzzzfZn_H/gff5V ,7Occc SSSccc/^lRQJRRtJV{#ÁuڟAܹsܹ˗/_m򟘛V̛TRRҦMKlX6޽{X`kk"EEEҽ{wT*E;uԫW/1Wvww?mKBgBΎzj3226n8s-[ɓ'233333/3 oZH*j儐oƢsɓ Ǎgd9̙38pĉ[nʥoիW뛞lvȬR4Dsӡ͛7hGo6E 9aoo϶VN6kҳgO>`1bKbׯߎ;rssoaB%#F'OǷnСC/67mԢECZ`]iZaz]⏝]Ϟ=B!K&:t@9wRh@rF~nم* :֭i/[oo:gqpp rJQQE3kBXܶm[UG^bquu52+D{EEaB,KPPE?EҮ];i5+VX-^7VWcWƍ~+W,Ya©igѧ)֢wj8m۶hH$\5a\_pdΧF9|6l~a ԩS !N:E7J/NHH2eҥK$sT*uA?5OOOtG`r.$$%y Zl*J޽[BBHcҌ3-w8Ef~w/^$~jjj>{۷oǰtC՟TN&>}bɒ?'0LuVBma:ϰ !ㄐ2+׫:ppBBȂ l]:hB3zݻwsRF6tҔ)SRRRXbŅ jBSTVV6iҤ_~E? KYYYtttjjرcY0a!C書8ڵTP_֭k ̝;h%Zvԩӊ+B''{FDD̚5k֭;v'ٳILSo?~4BHll m۶9;;BRSSNyttt=[p0LB /suu_^vk3e ޽{'|$H$8H())Yl};8{l:ondd lV81Zjuх ;T(t ۶msS!߿ NeddL6>Um#??_nT}tt:=cd'Y/ ܹY.^h?jkkRic~F"v #_k,KPл6Ȕ}CbnݬYFjSPPgϞAAAAAAQQQ3DUVVj_7RW۷o7Y_@V7u%92s>(..ŋ@R53 m9b䓛"BaȢŻyfRtJA̙3 6Ǐ7xGg>|RN ٳVؐu|ҥ7o޴tJKKO/_|KoԈ={L0! `ĉ111EEE )HvޡC &9rDRYl׮]},Ed2Y||{1f̘?덭lfvMt:ŋ/^ҷo߅ ?~ҷm˻p@ 8uZF0=zqN:M0᫯zu yƍBt#,{3 ~;99:ƍk˗/WUU+)j#_?bJy͛7O:uΝ|>ߌE2V n9(^|zyy >܌1j#G.\XUU3bĈWo \--iEFFΝ;g3#2+7nܸqT*g}: :yd幹={8p3,\̧Ν{qFBѣG^:O<r=zB>ӵk׮ZjΝf/H$JJJjVZ}0]6k֬Cuؑrɓ';v4i233G뛘8b.P(~y}.]j޼~5k$&&FEEmڴťbʔ){۷|`?ɓ x3n:222''gݓ'OZ6))iɋ/4h~eSlVÃf,3>|X,|1cnݺ_UUe ^ k׮ܹ޽{۫T={̝;w:u2ch4{V&$$Yb0Z2nQ(WxΣP( !}yZ3ߟ:dӋ5̀ VUU^Zk֬СCoCRa''?ݻ~^?}jժ+WD6mڴo>''ZVD_wuu ;;s)JBQ3RW&LOHH /rʠABBBRRR{#=ooaÆqVD cǎ#GvUP8zMF޻wK.>>>u޺u˼tcǎoy7 0sl˫IBBRm6o޼ݻw˳ٞue B77&&Unnɓ'Νk.]4d>/>> ݃ϝ;'ͻEg35MmmL&tp\\\[J񄐁.߿xxӧo޼iސN?k׮AXp8sY0رc=z=”Bɓ+5ܹs׮]_3 %dee9::vܙ.˫߿?ō gر+ ϟtֹRueM&֕… ֻwoBT*-))@(((H["Baffù\>ԪT*{3tRg5.ۯ_\4==pIuuu~~i=聋u>Bʕ+!!!YɐJ˖-f[nYx9c??={F>TpڴiC4\(oܸf"cȰ>aΚ(-Zi p8F:}tvvy3+ǣbz2PNNNf,UbktLfsݺu왕Vdzו5{A/Y'4ĺllK 1$@;::r8}%nnnu~7J$[lW ڵ3{ڷo߾}{X*ҫcƌ  BPpܪ*HRZlٯ_? ^Bf&ŋ-[67@V+ >s۶m7udeeUUU}vvv/O7r\Nы_VӼys}K8k񒓓C)z^N𲡣ոfСC5kfXWEEE4Y"=mBhtVhb%\v޴rʜ u_^YYY^^N{/б<r7nԩ%.dVh2!dȐ!QL޺uKPtЁҺuׯӂY;J=+++Ϟ=n:>O?+ljsss۷oJ{mVVV>yr|\\\,4Y g!77СCdIB"TUUnݺrPhé yfBȲe^{5X~kc?a-[FٰaCuu5](Jcbb֬YCaόVv .|Ŵɧ6I4}wQB2j֭[ !64>44j_?~|ݭu#pA//Ν;ϝ;wYYYcƌhy޽V۶mq ̼֭ۮ]N:E̙cJ32iegggN4iҙ3g>k988ݻw߹s9s,#l89k} F˗[Ut}.~U*LQؤsO`;w/X 00Т25ѱG-uu̙Ǐv(ÑR o6G~Ϟ=௿<==?S <~铒ѧOa|||ݥRiVVVS\r44|t:ݭ[*++G_-R: ;vlԩ111K,!7̙3K,?~yyիM-[СCofRRұc:thѢI&:tP撝m⒓ f8CK-g}fWXXhĥK܈ܼ֙W^>|m˗/uUYYI'[jn(@Zg突J{VUU8q?qӧ 8D"yfUUU~M3΃NMMDzvrr*,,ttt4+~G t+Sd(B!i`t xqqdee>}:00p'b=Q^iiMv:wg2/֕T*]xqBB”)S.]ʞ5ݺt۶m[n]PPЎ;pxga]=w%/[p(ǫ?r"B@&^wKLL?θɒ"ax3BF !gt撛;~W[tл O9!KNNa$QSSݻwݾ}DL+V.X[nmgS*ѣGk\׮]#Թ{ Y3`m:t0k֬իWHNN^r PffСC/]D'&Yb?lذɓ'ۺtVrΝ_=##c͚5~ic=k>䓢e˖{) _UVvj 3f̈{뭷vM禅XWjO:wox/)>ӈ+W/id;sŊ'`/џ 1w\: ~UVљD:ubŊ:WVVa=~T8--m6zoF lذɓ^^^7o}}}<7!EEEyyyC رc׮](!Cű͓'Of̘QYYi8W_lٲ;v;vlȑ'ODgϦk^xSL;}tttUU=|Q }Gu/_~zBH*Æ|B޽{_ kWU*՚5k֬Y3dȐ6m\~~y-[6c 1Xܞ{ 'Ny!|%1>/0D5j3g/^>>b*O??/|K$ݻw;w6HDkl VSu֭~g=5Q2L8??E46*AT&%%}aaa˗/_$bK,@}u&;)R)0!g RP(pq4nERUUŶ:$ ,7E" ]]]_ύ6BYY!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!LYVq8at:_Kl[iZa=<8}Rg޹΃;K}vQ??yK5\sIc ^=_:~\GT-H:v*e3\3ZYFY&%s)Wg7alcԈ+o,**^|~;ӧ~ˢyx7ZE%O}k߶/w7ޙN9y:uD~ǎmy?40H~MİɶV5ⓙ+j^Vx755Ԛ5}`ggj9?/{BA7|+n>h5W v{/C'Χأrr萾1!D&+*r ~~vm!JEMrwso{;lxg_ݵqONcд4./}=C!J}ڶ$ܹ_пOaq!PvmBFF#xzt$_!Vn_{7ޱOO]v2h@/JuCt.%7V-ZzY$Vx4}Ee)iY[h%M|'j~5Rwe\]0 :X*B~޷˳~7^FBt:]X*+B:bFJ-]]XV.Z~kw=SJ,ݾIoء!B/IerOO7X񨗧>+ܲ祋9::tZ$J儐j1éJި}\~FWJ+) H% 5g}/@Jq+DYgźg5b5[۵m7.JӃ0hBHBVݶ?Ys:ގ(0zw{c`^Jִo'jڶmZWw?M9e_nڹY<"fVBc맳VocW-m[jj$"]ᤢ2BH#‡mu4[@aQYaqŠ4=#sE5բJeطk% ôit|78o@ϧja\SL6r߯/mj^D"QT.E J !iJB@gShZDbggg4 صL!H8agR*Ka{=xKfݺcj3ݾ_@ EXٿoωkb4vN7nFd6狦qZ!%b򤖸ؓ6ם7^!l]Dh:Y$J2xg@F2rz@IQ$XEBfs:q>I$O_3!%3z-'D0 YKOVBRl0:ٕtrٵkG}D رclllll?xС;ה4չ :RQZZm^Wԍ7}BFw4%4+WBBB !ÇDagϞnݺu=))޼ys\\ȑ#:gܸq =77ݻo񆅦SՆiXVVRJ敛;w܄֭[4(;;;11qڵ6mZhr|G=z[VVyoc(?{IR P!H/EE HS Vi "(!DjB!_uc%0{v_~_KzBѠ^O>H$r)0=Qi<-T1|xuZ2%%待:U7 իz닋 rnt:rZV+V@ZZZjjÇᇏ?íZry׮]&L>}hڏ>hӦMɊd ׯ'%%;vվ}l碢"cH z N oFuu5x~ Y'O$I\w^d߲wzw>zz}/mٲ HR=VվSyXF9p@YYiFFƵkxq&IVmEdiiiLL ^h4ϴBY/WڪG:T\\l6\^KwQ2FqݺuXSSpzO>`oj._ls]v^DTJD M67ߠ?.sw^z5HnnnLLLLLLEEWf'IRݻWRyrn$INwRDj H,'%dTɬr֏ԸS;w>|OǿA$oܸa?.^xС{ SLϷlhgtӧ(rO&fڵ 7;w:th߾};}F)--ݷoVUT{E[n|7>d25Q~V̯(ŋ۷o?k, Zz9S]=`0"護ޚ8qꖗg?_:wgbbezPPFQ*T46d2U1cTTT̜9~QbŊ}OoVvNYOK&eddrN*޺u+$$5NVHoUO>l͚5 5t~loU iT[L&{A Сúu|֭.bfΜ/:t_l?SFFW_}e߿xǗF:{lmmvݻwhhw#WZe6}lT*ukeǎ;vY'ŋϜ93++˻t&BaS4O[/}/tFLh V0^p?1".\ z%0y@gW$I^3:uv &I/gb7o<::fegg|B!W^_˪W^;cAAAK.ݰaCFFFQQo/S(g}… Vڳgό3[0t|>_0Lnk_okK=cVZh1w\;v^_QQQ6֭[O8j*/8uI$Fs޽{#Ǐo߾}hh(*++sa'N?n۶mRR$ ,Y1$$dРA۶m+..vY۴i'E"|ԩ֭[>' fjFZ-TrBwz[[N$սz .hx<z,JT*u֬YN)嗼[ZZp~M6uC\^fJRsΨiii(ڵkt: %DOݻwSN$dFIr`N7~ ѹN x/qwqW=0#Wp0N?Mq`8P 0`Q@_2f =7` X5Ջ$IhRh?**J( c\PYU>J[٩T*{PBC [jL&{w|ԕN3L{X,fjh,|Qs۴iSXXضm[hd6b0nxɓNΟ?tĈN=AU&ZH`@3»*rR{2>PeУK}…JAөTjLLP( uo:ѣG\n###322h0fCזǎs<ձcx]V[XXJT'x'55N<)˽>Tf]z588ŋ;v4 ($I :P/ϟ?g0RRR%N?tPttӗYU4$IT*nZ aՅ^]v=zO@FILL ȧ~!C/n)[o5eʔ˗oٲAGr龨FeeKnI8&$Çz \rrXJ=@o$PPem۶}֭[;$iZ-cψ>xYVVV֩S'VѩکS@߻v Ç'ޠ͙gPPQ(ލY TTpcYYbZ Ǭ ٳX,vܾ]vMVu=G*444;;["իx5k֬Yf}H$裏f̘~ƢhOm"R}}={:tȐ!~Ԭ -))OjHn9t̜9nҹd2qO8n|3337nX]]bŊ={O??jF|Pu\(G&s8'^NGŋsΡS%-((7' EPTVVڵkʕiiik֬ ޜ %))ܹsm7nܐFEEErrRD vbgZјW_}q{UU-ZHPhŒ)))ӧ.gΜeتUaÆgرJs̙5kǛOU6_r !HNdHbz 7.h L:iЅ:ƒJ|>sbcccbb:Ծ}{Z]ZZjOlZ\9sw}/Yd޼yha7H*z>999AImQdvpY;rȁRSSGmH\\\|h4,--իcdӡCcǎݹsE>Xqq ăګ$H{97jԨs:wmh0 ^[`8Ez~mN=ܶm&L~{ĉV6lX/jPG=f͚oGUBL&'rҥy2bdrzU.اմ#ѼfΜ9ڵs^UU5}t =z/:z5t:]Kh4xZ$p&U8 ;1H 0! {c2fbo$IٌH,,,l~f0ǎgj5fΝ-KAA3gk:>w\{%4J/{*-ImڴʊBj=0Np\_LbcV,R{˖-sq5kL6sq?}r"'*MLLtx[ɑH$;Y֕+W ֝fmذah۷}:-}Fy}TRS{**33YfF3*f4`tE"ٳtI&;v,66ӦM[jg}6tпˋ3 ϟo`3QuBr@`'r\&.f=y7m@Գ;͛7OOg_?f]pA"8N .]"Iҧ3{K-[8 ڽ{cǶnjO0H$1[l￿}v劣46$P(t://Ӹn1 L&֭J=|fxE>ҢEe˖ 6lܸMއ&$oiZRR*O:%tz׮] 1110:XXˑfCİaôZKh=pԻ4{@dd۷]/MA߻_j`,G ʕ+`NQ+p[RXQnn. ~ܨLc5VyrR\nݝҚ7ot^^^ջVoW QJ$Rv$I[ߖ^X8?(f9=95mS4,q7{+Jݮ^L&bqj]Yi"$ׯ_rԍ7:M z?nѐ&5 Ș4iݱc)V-(JSk]7 0G} {/ydɕVj8 ut]ʋK͹Nϛ7Ó&MZpaٯPD뽽?O#ixh9e0yl'eIͫ'-ד>l6Ju|C-Z7o\$egg8ve߿YL&Nwjq̊Z~cE_|1gΜ6mٳ)ҔC{۷oj͛!Dxbn>u>OV>cΞ={֭._hIҦ&77gy+,X^({껕ě,B1cƌ_u̘1|f7n'|ou mT*>,^nV!R*|ڰa$h%RX?ƺӰ  n-ap ܪ@oBǀ=L6aɴnݺ#GUFO?Gs=gyƌׯ7o^uF}VZ3h?}q˅KW?Tk{4b`y7QqG=5ޗجFߟd/>Ovf8oN21n7?7n;!?ùQ4tSCzㄏbV$.]'@||իe2Ӣ7oMMʾ})M6޹sL&s\ l>}ziiڵkmۖڢEbXvСC# =~gV\hѢ#G$w^>}1bZ"zԩRԱ~С&%%vFqS*&MB}ZL&7ߔd={@N7}ݻ7CJ3fx7}0Ra`A]/ҡKsR #;H]v͞=^D]vegϞd"h͝;ܲe۷;{C jgΜ پ}caهBIА_-%.D"{).fB!At:M,q؍ΟpLfh"us.4V7}swJ*<;!Ipȑzi`͉'Ѓljl;AAAk֬^0 > B,>]C補y*l6 ]$ d*tdԥ ^q4xܕ1O6Ij |c]ol_„1xzDaoЁO>aPaA>xi᫡yob|V*ڢyΑ42jݦCtJ"5ѫEPU#KvLz)qD IDATmoSSZ;}aְlXu>?N>"U3a/jZaݻvDOG 7bh?ls:~qS\v{oӼS4-mzٹlaaE< y8q~Fo!%ًb;¬'2.BЂ`64ޘ#,п_ۅ0 ðǑZ5,3eX҄$$,`aB`5E"ts{L 5zBԻ9l6L-9"BR=nM&}W( PHՙFJF?kbfqҐ6m__q>vClHP(z{fss!WUUv0 03Zcc~;e™Q u5}ϹUX-[gzw/\-*3 rN?joM1GFh' Y1 0 )dui =)WuKIX˶Ҧy|HHR#E!"!q\˧7`͜D<q1 0 CPڤuK0ýG~&Ǭah:x9SNĉKzwl[Xg{Vw)/&i]6~V䰙K759uWs9{va1 O- cDKkRm7~޾c1+aapbGݝǽOZRjYCQW&yQaU|ZE00Y, ERa=G|\6Y8f0 0U&H#{)7Ŀ7Lt &3ŴXf".{G !:un̒O_;µ "> &pJ՞ `Z 卉*j˾}:jP) FV`lAۘ'1u0u::Xr]`i ոQd/^*oוh Ȭ[6 Hre*fXm^-Pt% 870 0h`Q&E }e3o9bF\λW\:_o&I-F h8I6[qIBR1QwZQktťUQ&F̆˩( .\ḏXovH,.TT*%:2<"ܥ%Wj-,P4<.E|4ROVR$<$&*m/-3(biv׮8t٫?+)1owDGN9v^T{T*0 Dclwoi+_XP'^ɲVo(+oԨcvGcVs3fSXNdSAaq9)7Yt8'Q4 YS$W&;eO*VU#)ԭZƙw|:vf#&7U9y'8qTaڒZ;El34D\+SVZ6 EiZ1țB/$Ӝ'GS~,߷ba8Ӓ[jUoaJk.|MĿYc0:J|ჯ6*W>ETn7LwZ0IyP `s3fmMR)H/Q<.68H%  -ϻSWքĮ0QoiF\pKk 1kҸBIlތp9*L RZ$4J Bh2@u,",X,EZTp5@G.iSzWzܵs =R/_cV 0\%`ãt6[&>fGN^X!" xڳU5:I7D߻D=$4nhhy4$V $A^qbvΝrµޢ(W.-4DTi+jjEK#I$I  !$IXQUkP7w8l1y(`JOaC%͋ywF텞ĕܬ<"Ν ͣ#BV"sml9JEfUFn/WenHBrJYl6Zz1 ҨT*ǩ*&sULգEi+oVE,hTI\(+:yj] 0q^޽!g [w9YXQEՆ]=<J˫h4*0P1  J6R^QZ W,vHk&+E\.;"aXuKk<[ba`'𺤵 e Htq/f#M`DFtOo`a3^[vqQoo?hӎG$&8UrO8=T,ǝF/rj>J@$Ф{ѣ\zWAj.:2Bd Bq=f[7669*"HJhT$*Tc>hr/F"Ftźfᓟؚ`a v _|116Z#`tyEUᡇeݩY6]ڴlI1}Ըϸؘ܌Y5Z}N^ZQw 5AW Qn&$Ifcz1W˩ei6PktSZeN٬j)t=;zNH  f\ @DXpqYX$ f%4q>TjJB?"]ՋZ4W/A-|s'Y=~fDOP,jwܲehJ+)ظJ{vi7cXPf oXώ0x`oO0 0 OcֲSg.M_Ӯ?a^t(^|*?Y0 0 üӘ5.6D=;H=y!I4-bc:ɕ;ya6ɓbX,m^Juh4UT+zt) bYh2&--<=/1+aaMY)yRԍ[OgO;ZL&ͶzOc&lBIi|.s-zsg%ybnnr{JJ+9y@zOc1[R;Z&l6O 0 0 ?uɛm!%B,M?6}lp*1^>_`4VIiJZ32贯>~{e+7Y,Vk79?zv+of[ڵnf1|'0 0 OcV:39wN)0} >3Z$yjh ɻQjP+݃Ґ;%ɉ1L&ÓBo:^, y`zh$ᡩZhaaE^{U^Y3x@O*zΩInuݺehu?kjC3v='ahHЈ]8:vԠOӡM'IHT&VI7mkGO*BܣP=۵s{\?Οa0 0 üӘu?qEf<+3#xݷJͰǏt\׫'l>oxt; PvmZ._8m΃S?[1b]T5 9vmZzX= 0 0I$`y<)2Wz p]l6LG g<&PTAAAA&S^*qP(B!F tE B xL80ͤ=>UUUxV 0 01+aa0 0 kp̊aa5u8f0 0 Ú:baaMY1 0 ðǬaaXScV 0 01+aa0 0 kp̊aa5u@W{d) :`fXl6"j6 tEFQRѨV]` ]a4m6tEV7>0_ bXCd2$f]AW.b2'еx8rb2T*O`Fh@W!N 9 0 0s3sFT x𯓿=*zuڳ-.`0?x쯣Ghiܤ1L,ʓ+Q/ꐒIihzyΊVKvQ{;ljIB|'+,*n޼eӒ0:,40 0 ü~VB$8nu_,zsʐ=\Z7]l6Y,e+n9㣗ၝ m#-c>{n'-\^lDXҐ)^NEt谭A"=)V>w᪾4]aaEǬ Կ?[ؿg ]X$<AӷyzPf#-UUK. ˜Qb m2[J'@YyՏ r-JD6BX,'ჺ |gB|̨4Oh֨aay7YsKb"Ą*/ 6 N"a==P`4U{]hOJ#Irw^|vpLēr@߼U2i̸aiyVm{_;laa6`2>a7?:50=M(|d tUvOߤP(ܿggUԾqkɉwJ)<wuʤQ5|pW}l[+pް_;Xtz,W(.->.o.aa];w)՛nQ!S"YLd._4 0 0Ox37 elYE5z|7s_y{$ae( y"-MRUjeO={1絷>q4jl2Y8llw=f&OaaX`4J\Z,~jH~iצeiYUiym.JFV7|]ڱ|s_b1KJ+8lvXK6-A}& K),.~hsORTuzF_*(qqEѨ9 >2驄ܛoϛ kϞLs3]y{.߿ٳRs=z?~|PPP=M&׷nݺnݺɓ'oݺջ5qd6Ϝ9ӣG??A555999$IKLf#FyEuuP(l3$y֭|\NDppp\\\JJgD( jjj_^UUe0x<^HHH1 T*A jAB_תaEEEGݻs]o+ZMRΐ|$I.HF:FR)ڛfRYڵkUUUfuo'y """'I<,,?KP Ǖk7XW6+Ά{󳆆gN}ό9нϝ21ۼٓݮ۵<ے-͕Wibz|%ӗNL{qtrRs+vJ~Sύ}Bt=99N .<~h@F#j2Ritt4AY###=+1 0+33355~5##ȱuРA m۶ڵ˧ CcNNX,dxB1Rt|~tt4Wڪ.$-P(t-SwJ L(l6$R)AzT7Zj%I^|יL .@zzzRRpk61pP(JtB NGB1RYYl׳/܀cV,:w%222!!)=o|>ϗJ:N"3;:G+΀d55MT*l6L~ ^t?"""׳w( ?am+Պ~M}]Ѕ#*J4itAVfC=G+FB@A$Iv7I(X,6h4 F1L\~5PT* ODA.{l6-ھul -[tzowehX,zfFC. bjVWWK$hHN|Z:H'ClW^ xbǎ :ϢK{}8Ns6BZbr.C]nb!I-^J[UVVګTTTp\?rbϥ'F&J%fC^A͚5e\"’JJJ_Uii=8hBd2 ADqLoOYVJ2bbbMsh6) T*0~;}?֭["ߎ$I\MBBBbV*jY,BAcVIعs' >uցA* $IYYquY^PG6*Jf:` tC>yOj.ѧ{%.UXXI $IԽ!ۻ_XXP((J^1Rz}TTDNa6 2 ٌ6b**;;J }4J[EDD(՟vJdZVXD`٪ItT*ugBd29p8 }~;5Ջ$ɚt!\nmm=X,?u1+0EPTVVڵkʕiiik֬qoWܸq]YhdRU&Z@aj5 &oa2T*UPP 9Nqqq*`w1fZ\Wsr* Fs-ٳgOg ,PNh4, egBBT0QsP?9}fKKKgeb[5(ftLP(=zUYuu5j:V9 u+^%p4=էz=|~uuuvvvuu5 j߾'CETL&aD"lFg˺Мp̙̊3;xɒ% ȩ.<<<:::'''44 ^j[44ukjL&ad4y<N_7jS\ z*$'']o+7>ƞf%O@$o 4M$q8Pժ쿈{`65Mxx8j= RYY _QQtz[\DDϏHIIAѷnݺ|rnn.pc~@7 fY2 {qe2|l6FS~y'dff2 Dh:uԩS'_]+J&mY꾫ܿh4hԀ3_[9.ZQ[[[[[捒:5͍7^ 8olhQ"LHRV7((H+ _?F1%%%h+;@P]]xd֝)Gv\t %%-[%I㡁 f>`{y.5kjj|0m 8_lRRRAAAiii^^4^rh4:6mjZV1+x-ZXl\.߰aƍ,YAIIIjjX,>u\.]vѣGvMNCst+ JEP췊BBB:sl믿L&SLL:Yܯ F×:D,ޒnڦ^HBEZ TX8=ErT)zr (MiHe7l1fa2a&| \r趜S4gT*H&yxxp3AAA P Jevv6)}ٶsmrrr***RiwƏU}$ITTFX<ojFFqq1Wv#((aI)@T*-K}n8^XXf%lZm``D"᪚Bi4N^HҚ"HJY-D'~g;wlߜuРABk׮QF*ҵܓ\.>[Q@@@S2۸,˲UUU>>>cǎm&U[o+W%3::{bd2Y\\\rk]l$nue=:dҪcq|qZ+ᮅz(Phߩwy%װFWWW׫w2eԝ7۰/UGF/li;N.#q"n~X=ydaaD"7n\6(Ǫ!56b{T)!!!!!CeVrcj ֕?Vo...WipMsp8vصkn?~8+ 0 sر,Աŭ 8t^ԩx233x޸q<5ձ!96UQQ>|555FaÆz̙Ӯ?zȑlX־]˲ǎ;sm Yʺp%''ӧO_zuϞ=! dffrՠAlEi4(er?^솺xں/w͖;ft׼ߧg*1sxr[n.0vc'?F˼zϸ鿞ġ359{LPV+Q*SG;gLb]FqC]~=''g„ }}-rꫯn%ŋԐ:ZQQQomn S6,ڊFqO4ܧ-psfͺuVNNNUUF޽{ݲ;=y似lJjRRRڬV"JMvʕr__ߤM>7dΪduS{GΤ~ht1Q|OdžyO?r铳M_zu.TI־~>kP^$JejY?:eW;ݳK,C̛=y{O2hDTU] 6nOO?yӄBnPEť'~p4#zΛ3Y#toƌuT4iR;vw[\][pL @5H$g7{)..AAG,ׯZ3't?i 'd.]b؀ϸLD7n*9NTٍFD#G |xf!9vLn)ݻ,CDzcynI #*-SʹxߐN.=a%xu+(,9u9l2Kw_KbMPEGQIiY|L'RxUEFc#hhM O;u՚`}L Uy_>q1mxYk}NzCde>GN\Bɉ2o+)Ujat:}"L8nh^ws "9\g7ZQxƕx-p'^^Ꚕ=qS 9f5.F7oZ^f[ Xh=]S;K==||QYaurkC~;)h""EviU3#5>.k:coxJ$ooG [%ڄ0qr?"zhzC ^V(UQNVyH7*m(":xd mtݖ+nr -PLfģT YFsh5+:f<20ʈDBqÞ^Zo0`hC5d1П4RIv^k 89Z^QPLjV,7LАf us2U#NCyPlZyE.]ݴ99*tݖ]3?1Z]SPXRviǞC%wzpj*Nv1 PUQyyBYh55ڗ_[SN|oQdrTAv`͗~ۍx|`HXc(ȬofieZ"}u: = E4Ih[蟚JDUj݌cgW,=|k[~0~kA=y삏|[y77;'^?v܈h9V%rfAʟc$~9kEvmVksfjSsRO]( !gmb,huuTu{qc|dxSq_F7,e?la"nromNBDHpC&m*kt= %eU~Iѽ|h2k!=cq6 ðϾm|d0K5$bhrM;O*+u+>)5:Fgx/=yK*IٛBvˋ@'6[nw;q+/\hIY:*ѬV=qmmwp_|=ꍡvJ`J%bY"7F\{θBQCo*RE-yQ (3yFG'4׋nb@ Rkg-߸@ (VT}ysWM{ }zW4e+% ΣUkZx\/'UTkmkFX\]s)h9kcaheZy?lWhIK "?F}H zXJfL/w?ǟ)*'@?)h0,˲P( :iKs_|d2÷"T="/X&"> mkѴ ;)gx #zǬǜF{ԅk!LmKMU.ғiC+oA_ ˟`0~0ziyMR=;m,=kS1dcIDAT~RqE%ۙ.9r!㝢螞ڜ:<k1Ց-> 񢽳ipd}Zޭdn%X>{۾7n1ӡ.\Oml(WW7Kzi!J47f2'\VwcNaowؽ'/9F _vߨe7w?#g 5S(% iWYWʢD;jD%@0sIic߾HH LL3'Y7ggF fMw??/,*}kCŊJCtȐ/?}J4?}πx[bFs:6X* 'M~GNrS gjSQUKod J{i%Z6IKM}7xBi-3~Uh_}aѓvKW_q'[j]-"-yEgzxx]7wo͜p"**Vl{ &WBiuQ!1.a7ڞG'rDsA4ۨvM5yT&zF;V,۫klLdlLdׄRY\nib#Y,5L_d7GYVS'8=y1ة9 ur/hP꺁,QdRjH&" f"\3婨ki,B:sYz`D͂Nw M Wk],% eXTzpP#)1'p?? do%&hbe/-a!c9s2={5+NhB&Dm~ XщvWy5 kh-(HJԋ.ɔFwn0v~Ag&% XLEmK&ndT7 'pͺo}jTꩫկY}Zh4UVU;bF3($$pC'](S9brfgsoR6+h>ЯwOosK _c?ԲDzd}q.뉈^Mr/ڶDSI%) oyuB߮w=, }mYk7| w+s֜寬˼)&+Wo*j]e+6w$%Ͽ\("2-fF{zh&DJ4"Xގn4|tf^wϤc9w[ֻ,V͢_l١_;wMxRO 8"JSTv-nzڀ۹ϭppɉ%`>G_}wێo.Ya(_e/qQee_ǜXtTF,}ά||~:ߟJ4"hfܯySv x_25 v/4]h,d<1,}G_ZCHUC\gZQ,ƚ]9q1 #|={"EajHrfmLh ͶeϿsFr_]}fvC]'/gfdž-;-kg> 7|F;gq|S5-xnxj,Z=?[6' [Z.:}fModžQ7]+g?.@ ܧɳA,"Roq,"8~b>kpS [նx1vOh4,+J{ 0fOz^&(:+ D" ѓi&I$Dzᏸ_vP(N]'a-B-9+Yy8V!g9+|rVs} J>-7c iCx*Bh׃$5tXHd:X95ċΦy{-H:.//9&ևn5hC&a?W{B iQ?ۛҮ,PJ*`/ 4-/k!gU5.ƱX>^>2ׇd4TU}{vJ%DzL9b-rFYz`-8bt4[,R Zbjgr9ʰ,_lX|}c#j BTY^Qwq~8/zm"ZpzP`@ jmmtd'C]ʼAD~.N@2 WPB~ ё|E"Qn~=':d63 # z$wV*odM(ăzΜOG:vWL?{S 2-n=zt oTŲl`$"l2΅(*"KxxDب03<4l NGh)NVqcp+-:a6[exzztvy)0P%jh*|9Dt+PUQ~^eX@ raZKiZ<0DIVpά `Yz5}{uקZ9r}cQF[[khkkF[ӌMed!"7xɤN c2ȱZᑺZy< KcXh@ ,U{{\uկwr+r JL&KXh@ (,VeJ~E%eJ*dRYKp ///,,veY.\"OͬVsw_<3bX$5bXVHs bZW hoJu P(5ܲkHDd2B!ne0jűa+pña@p7q)˲ øXK3rVj^,"H$Dd6{ H$±I,XcşH$f{ @ @߂SrVpwY!gwrVpwY!gwܝ E{QMBǠݥIENDB`dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_HK/fig/repeat.png000077500000000000000000001076641473346337000303640ustar00rootroot00000000000000PNG  IHDRm& pHYs+ IDATxw|u?lM6J $C)JQ좢g;ӯD{CzDk %;3?&,kv ~>q~泟~33DQQ ZVn GVB!\!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0H0啵~~,˹Mz)3gj>E t+X/O_>!ӯhq,91uƔ%4%"IfrgON6i54Wf]+1źczpf|lx`$2 rۏo4Y5nsF4j%Vv Gb0-V^x䥽/Fp}& 巍&W?MIwK9!~!I{[̏+kN͞<~mr *juwc`^XZ8=P( GOe_)F~v뫕r/gY,}G.]\|-ƶ+%3ڗÞ&ǒ7; ˥:F٬3Z)Qn*e/!{01Q/5j Zbz/T"J3V$RbWдG/je^e]c˹wM5u4\NA#m2U)zl˹e{|B!{?p^`4/_- ҆቙WK`H:^)3#B)Er#lul/g`zYaں$1Q)ưkq"oV8())z\?rPڐ89u _N7*^@_M\tǼƓجwb4YӀVH)z$%'ɦ_m6iLΤ 8~_Vz.dM_ߎ"bm_ ~";] `ԯXorHLSg~>|.2,MbAӔbmֵ+':o|] F%yp^Q?_wIzګRD^VE?`ozwFgbZ4$!c! ˝o #d2]@ AHRHC`9I`Y#!A,|;=_ \w]SjkǞ7ZxŮ8V lRz*ؤTX5SgWhd\ Ш Ff;v:je!їs/|h$ XlZkk&Ǹ)/}5m[P#E!JRc.df])L,;$1*]Caq_&K'FΚ:7H#G 9{wJԃNN6F {KopuP@/ 03^n$IrI$򚸘r\.% B54jKʪ9-V[KQ*[61}.ޚب`7eR 2M8:TRS>V).ªnk_#/ͼRsF%Vhu i09QVY;m6-huz z^74*t:2uy{f>%)8.8'rA`wӌǑ$li1V`h1YL؎L*+G:!tsL tHbŬqs['Dk\;NKxp6;u<g4Y"O&{&uޝ}Po0.?y/863T 0[lM-e5mvL^]/p! +=ݔ啵QkܔJRcOkUb1r}XZms a l9+VM 4) Nf9nHb>կs:11>W8 LJ˗\ծU?|>kܘ!jӶ|~>Cuy@nAdIw,:{ڵeZ^DfbO@B\X֕ťJ,4ʵbo ZmLqYuqY+B(R>$1*jQr\X_ɪT4\nFv}m3tSA̟39qlʇm?~$M646/?~_Nl*Gӯfgjr4WX\Y^Ye0 &b^Y@DtDPUMCqYa|4a!c#%gXq !B|3k C[/{3M0jXTv[P&n!*|DZ|?"I wuQIUyU+o|.qnֿ<ޚ'3gMJ7zA#Sf俺j_[0jgNվШ-JĮચҪب:{|ب2B֢7~v>n4E8R*d5ޡ~ux[]vxJ)fT>RP'>\.s2W/+vW2x"jrn]CV)HJ2XmWsC}kw9hdTbَHbƭ;ތ\&Q~^|IB#u*R!cY6dXe9DO?X,VBSD"'DȞ,7U ޘ[P6(.(e+\$P 'Ņ%+_k' J*`׻=wCwj>'板tedO ^r ?u_pW+E$yEB:~N#J!-#B$F];uJjrteUb va k"xPlXdX` i2I$Ar*jcJjrPt`>ތs"(D@{41 cX]8  jkkF#˲ :7Wh4չj#A* L&Xu3 c4zfs;Fpo=EwnF X1/AoaA8r~}F!`#`0BH0!$` F0B #!BF!`#`^(J$Q o튿A6a&#7r9A-E"& J, Wc*8D"iEG$MiT*ZvUCw\n &/Bw HP(l6\.wI#=@QA2L $JIa$ nA7d|EQ8W1Pz#! F{)`:F4S%8h?Gq@zì1}KPp9!DlH{~9%7YܦXl]۱ia)q!A~w95_iE9qls]~r5ǵr@7MMX.\N/]!s6}`#'2&Kֵ6>zݬm1:OVXR}3E86&X+nv y=ٮMMﷻ>IumlDag_fBVK-7Oݕ6rheRxG> sg{Z456:6TTj2VN˺\B-kvL'ƍLX|~Z~ŢySs#Scd2ilX< Ř>b\&i0 M-ArGpVfKl9۾Cp@ݚc.ee!1M͞>^b}OFDVVf\)_wlѝ!t8nsǦD2 ǥd8Wra]V%jŹr/@wԥ\{Dz`W4ncwwuG\t]SDٍ7tkE/| ",;l8y)pՓ GB>"Z@@n~ɚw@ss˷?687y hk7tq窻Chi3m4-zR qqˏWM- W>߽g|w3 IV*R -Cr. w߸xgHhֵH$9©SVO_=Q,LXh}[#!8Pw?caퟏv6~?VoJK;}ؑWP $OMLOUou# (KLPx+=1?,pj}Y<%8З `,}q²Z`9%!ᥳN_䨉iNppםQ'qlL /o)\PB"QJRRV.l}|C`Ǿ3;^Y@]?$/1fA1CSq64jK*`lK.lƱB|5@G9%+"K+rJʪ?|'Ϛ6:6" s-i>yR1qS9t(4 <4nwZm'(8kE>]kоLǗ=6wФ^!4@83sZĔaK$⭻VE.{XL3,ݏ?=Jᱳ8{mbo6Ղi:fP[C;o-",O?x \ b1U5WsG$L7)OIFKAww]5Ɨ^>|V˱c9Bm*ZR$1v@_LEEEZmwA J]TЭ`0L&gZP aqmUQ3!p]zl6$}Bwf6oG=0 q B7FFpl6''B:d\Fp$DZ0Bw a!\pψfRiZ!_>IJ,˲qkecDAӴX,/"t[,q0{G,,kXL&  $I\#Hn!M8BF!`#`0BH0!$` F0B #!BzC$IRI%#n?DZ,kZM& oc B* P"> m IDATB$/ɤ],ND􌛛/Bw8T撦0{@PP~o@EQ v0"t/BT*ua݅j{cwMBw!48p!p>0Vw|t]V+.ش헛0챓-PV^g.Ey+ B8YFU6T4tYqO'n.I.^nnT9TԻ!+0MeM:es%ޞj ZcRiف>CGou$,$KVmP|Dm]+!"Vd+3r-Ǧkg.\}pL8u6atZN~B;ju]?kƘبPx[~N]|Ԅ6ggvwkܾ~iy+y"B| Z}}ᅭj׌kjm\^5\bkhW/,i|!-S=yʡ/#z% tL/2cd&?#;xBsDD]}aX_D].k)F|dIN,Z2ow$'DoVnၧ^w|ߞm6[SM}T9Ps6u-]Y7M--GN/,8u>%rR!i7;]@Hk_"Jx}Iō_ q5❿(.|o͖s}Aעs,i? ^E_XRqwgku. fpBwg#bF]+y[r^hoUMcHxS((ZϞtdM/~JCn qWyE;>RXTַ/]G5|pja U*EToTsWw V`]G 5~>p3 F`j_ӽQbx[j^HV/ uKY QNN])|cBV[m]c*wr:OU)]pg q YF֟N\:phFX@.1 nF&D3o~C)x3K>1&Y-[_) a/uc|Aaqk._+olyh&ЀrUO/_9ԹϿ³* 1Q!%oi#E:e2'y9KyE 8}ddiv|3yvUz6Ukj}]sだ=l}K_ycc&Qknn6(p]B"g#e؄0wð3:v^[Ϳi??u9Ӯ3%G,Gޣ?l#DaqEFv^VRߠ~a ^kU^YmN@XH MUUO%Q y9ܥ܇() ӑzДw? m&Ou:ov&GMLOs}YWXZ+x{}=cB*JP(dl'=бsj{6%9Ow~Q7rV͡BG[R]RŴƼbUw>~%ӤR=>yP%RxFphHofݞX6y7G-WԿ$4[#d7iuzZWz}r;~:j1,t~C(J y'BC_\ It/)!fou)!>OBlX:Q$j=% 8~*jΔ}#5)<59FizbzJ}CsUu`鍑a>mWeې̰컫7J%%&R)>~Ȭij:ͺ{f }13ggm D"HIP'B \ ˊngt8Нɫ/oEBF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`wqBw!48 Ų]@ ,FpwYVX,-`wd #0 )3L6F0{@;GV^winnƱ0Bw8ɤj]V(zd2I$XL$AB!8cYbfa\,Fpo0 c0 Ap"!BF!`#`0BH0!$` F0B #!BF!`#`0V~pBw!4z03dQ ~"]y2$Q^1R>"4^21[5 EL|fHLm?w!tKpYWl1J^jy޺俹أ:u3VJk!g6[BE~)iJ |=)*`v_xiT*wVrk jsenHeGN\/<`0}?aϳS)uZ=~AQ+j5jT:(lpyHl/%W),y͒>O/\!tpY Ͽߥq/rSCmV铧yťy38/MrZ CM i9P{YV]S[ {`MSb1hZ'J˫;܅;0Ը<⢃]Un>~4v B* 4+#pF0˲GO\z?|ܟxp\\.}#Cf'M&sVPˏP/>xҸNv1_6/ kP;~['q!t3NDddm)ö=u6}G?zϋ/~|MXd̠%V4Ƨ5b͏mOE"P{F ?zPl_c1DpcY%g.Sғ1-ټPx՛#nָN_䨉i.Bf8Ҽ|PVMM(۞D!k"xqsg㷿\&7^=%/X " f梨#C:ܥQ[RQ/Hxݯj03SL/Lש,. FuHj*ٕô4MDŽ-.{摻|`ͻO)ד*).dD7"HD9 8 L}$puOW{Im$F0BDBi^70Yeș9d?ow9?8/S+'f !**]a3lkEB/,bMjg#*guM}aQaI"Q׃5^̝2aq+|oX`aIZ?@L $k"!P/j|pB #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B f@<󖖫n.8^2'i6 ݵb1 AQ";- \{x;C'-?&Wo8{ %$A OM$tJ˫:  M&Ke%$IŴ;,,xZE'u{W.~ kuzR^U]o0#ÃK}_/9c۔oqIIJY=jMӿG.O=4uEhsAy, ²??V2M/<=Y9eKLug~,:/׿6; ̖7nU熇|vS~qu|bO}Վ ݣ's|pvXmp0,+"I >vwxh}5Z횹GOpWf;ot,_j~ci)qp={飇LfKWTj2%u^V!|mm@Ae6쏅Etk^ԙ,:rhR)i790sbj⠈FmN^iUM9 44h+r˗.T\y:륹YؑU GNfL5þܽ /Ur+o|gz'77uDK7)Jʪ|-+('m26:qq~{djtƋK+[%6c\[m.D%/O0?)l.Ҽ\yiϯ秌T텓ǧvϬiM^B>|;)"Ŵhግ䫝7 >"όl ^XqoIoͦӇnǼ|`aA~>t`ǩ=~~O flKΗ3cQ`ۮVӾM:#.:ص]u|͵GD?WVtgXv̈d`Y$I RMT*dxKY3r~gcڐx_[ ݙ&eʚ .+\~? ~{Q\ "o\:ip'"ƿ;[ں(XRbUg<~ B:|3W?Nkqma©$IΙ6u?\3r0_9#;ݖCVG\kk>p,K#NYJ+j] )-N kSHE߸&~Ԩ_[u#.g\.xd l  ilzhL{1L۵MN :t-C'B$'DZcEqYSGFI3sD!g/\nAzɉ">Ys;PU/" DK_R4a/wS)$4XB4MSml.>jxMn[ u ,qmuOn)oOMR\S=t삘l 54ͼRsF%Vhu i09QVY;ml;ꤐ@cSf.N m;2m`/q "o\<l|my~3`Y||'iGmO0I!,&v)ewuMf,=Z&Z,P-[4`4Y"O&{&uޝ}Po0.?y,˒PxK:q%<ť5MŸdx7.ǖLU*f &" y"R$Dp+a5o(B 5Sۺ G=T#jN?{!A~ :11>=y!N]h]D|!o|E%qǑwu6aǑ)1]d)ӤҎGj?')"o\uuM m6fCw8aA4~359jbzKzhzj(6?룺w 2<4M@RBԠ?n={;0ɪT4\{Fv}=K鷻{ ceS>rg'u/$"?\Ͼ=s[BƵqs+?z{74jK*`creQ [^jE0[OzEj<.Ϸ_m1l뎻~928F!Wy |E\ݲKO>8ɬ0lpP"y׊#aࠥŐӁsMK)2NjP_s6IXlڱp!1AU: %"~~O*IxPd?^Rq_D"*uJLjcب0_wZ)W(d T!d>rcgNu%8).ߥ޾NِUG&_YXZVc'ud6J)#n2A/X2 !"ԧ` bCʤu[3FkyӔ wc].Ҩ&@S 6\o(__|f%M1#wݕS&O<±ZqiU^GD"QWwhS m8:1>&44O*gΜҘWRTZ6p F!aj|pB #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0.~|'BD"EQ=Z+Cl l60jK.!'LaYa$9cY`06J8N"b_ IiDB4q*6#rfS(.ID"Blr9>`#dGQA2?H*$IQ8 p. I gNu)i:tQ0B(pxП?8w Z&FY6p$0c7?olD:][4gBl6eo|:IOGM% gژm{OK2?8}xVdx-aw;=u|c%wXoZ u ͎5 F+o|X?Sf/d^Bל]:o w;o<FɢV)ON)KMq-zL&] YPV^C+_[Y|^3 |}/k>zlydt犪ZZ&'FIYՑW}fLė-֝{f\){_o٘/dd6 iIS' J>uXLScG&fӛ_oXs/>˦LVU]wZqQ,狝5mt_LB&m9n!~;&".dٳR!@C &Ӻ-ը"~9|~LG 3r0 A@lW~/<~:qqK0gwGv0Q\Zޚ-+璟²ؙ>"~qWs?rK +i IDAT6kh-3򵢏>ʪ%rw56L={OKN}1cδM-v)ѰAOmllև߿`"s}⥺ai1j,˝b,ȼ\p%`4C;m.Q :^47}DZ|n_2xPCg?l9)w+ ie ,I3FOuJ/fdO flKΗ3cQ`ۮVӾwuG\tK fń@Lt󹗲|=kj.fcAqs7zx i>^ ZZ:yϜqj޻cSe'\vԤ;sjbLu+k N>uw?^߾χ]`Yǽ/~ 7{|]rYOowܿp }C"DmGo;oFi~st驯`|T`^Ad1͔H) 2A]}Sc]͆1<:1oS[NFw8 V/>%MSXӔZ7@^aTByHD |h^^`2eRIB\bV\?*ٱBV++9W\-NM$.ĪkܽܣKtoN!K3{eI$5|]c_D$+׊68—_+;cbjm^o4*|ܨ/N ˾:Aa[vpWMf/Y|.?Z2Ӿ"bc (ߘ̖r{EmWTIĔ흴KkB|/u:}~q99sjtc{ff Imy8)>$qP$FpdR˫{{ Ma6P\4E8|_Ϸ)>~Hhݬmm miS(cnɤ2^G&r͍z4M4O86xnI4%6OɢDdb| &I,sX|x1Im%EUO?<^[P:(:Hc1-/-guMڰЀNzx)37UKzu|㺳VW*r>X߿}wKriW`.M)CYh0>b^\& UuATU$LJJ~[۠sld36+"x?z-R/rFm]gOHQK3oX痓Ǎ~NgX7:b/̼\4(ܱZeU{; &o_`0my4%1YԬ5 MSɤ?n[|ZuelXY/˲^!.&l֤|S&wטo[vu|FU+*뼽i hVo#"E"JO}wC'k3Qziz/s'd<óUq܆m5^|> b͸R|o/Q#_gw)`԰Aps:ԅS+ouy I^^[|/E]z_w׸);^gڤmߑKk<4j %Uu`' '"|=Mf};yPܜN_䨉iT5wY[hH:d*jU93'ߺ~3GE8n#3 y.we6KGjj=ÀEoVPlѴNjĸP\M| Bݪ\/wX4u°IeWgehӵ^bhb=yZyE Ԫ)G 1D":"WT4zX4&̑& ;z͛>2vִc.:@.پáp uAf|FjĔ訐&#+YUBð$Iԭc#DuiؑE"zȀCRikXVCj P J{¾8ZƦ+BwYN6vZ$I80V0BXy&i!] ôB^gP;P-$Z𳅚,˚w`_0BbFQ*&eYfn85DW6#`H$Z H$`3y Fd2<0K,sg4zC8  Ii@0jIb18B6B6B6B6B6B6B6B6B6B6(#)iZ 0 ˲8S0P]r VRyt:U@*JOR,D"LlFH$H$"yJm#r90 (JP0 #[b豃P- d-#T*;Bj 9'E8M9l#T5oi`$F֌sx tF0jex Tm;dza5%e}kUWmϔ n=x-qg4,&j59!p9>DV)k8-,;%,U2?EBULcYRWkX8rk8kꨦj%V`9|QHeYn³3F8:(WڟiQCo7^IԜܢ-;O.}˗\S\]Wz,~+<5mlA'c+(vrTˤf)8}ZRjC|i%fzLxj30 {k72*tёJPY=v,7_:ØV2}␟~;\Y]c>cRe#*(,u\BRҲ^!<ѿ%~'$@2k7N [e_Bq͍`zwOpYq>jEEu IRh!U*!05,do7aFد+;ebtrTz:woQ/-i p>.TOBK)?_ڿw䨡 kv8?i`JAC;Sr]iR{D4e7╤P߮w;{԰ޟok::sx/~Rif//1iϜi\lR78jn_|R%X g|~?^aYy2CIiEyE\Oc^Pۀ¢flU|wt"mEvwQk5+=.~73 1zL* d^=r/7҆\{z;KgXW$d &.*.)F?o˥eb;K55zç_na9Nh| Q!7'ex{۸';TxW("?a?Vn20wͲU]:n\wQ5bHyͲ& <iYOqw>xehWT1oTVirs: /iuݙnVUiӲ kYb\R@OOw˕q iH y߹Tdg.$J/-+bN[X=Ps#XR]K~g}MI˞Hw!P-W2rWɤ2L*Q)NwD"^bfNԯwl.^)2shuzEI,+4@dFkVv~JfB/)鷻t[Zcl|I-_XRZQ\Z!^MHI,|w٬Gzm 3VW*}Oe[/MR_r%rÏqyś~?q܆_-,z`9"͹IT댈8Βjr岗&zy_<}G/=9J\Zc1<`49:3c#yطJѴs ʄ]-r]:{=CBS7*2Om$J^2/7;F聚Z)Չe37]e2DL3|= zaoVTgD/|o̼7WG;CtsrRL")֡y}&j\8^^eIm.b‰s7>;V<sצ{x FӵĬ^+(!̫7w;Jp%•TaMiEĬy I/ɗ`R_R3r:'$e>=aL˫!&,==\jϸ8**uN_H f1 x KKJ5rݮtD9@۝.ApUUu?2lPt#YM~ϛEՎ 5ba[Sx*>֘<շSǻת<t\BϏwt!=#"A!hVkufnN="qa=o$eV /jFpiF!xT{=שNg((QqrP1zܕ="gL.sYZWiѳƌٯW;pD_r̅Ic׫]ݼ9^o-jyNϊ&g=wgxg T2k=ڶ&*278y\ۅݻ[Ƞ~QcԅS'qtT%/z~BVV(Dw tzⲪ:!Z_s#83;sG_R&^|-)ZR]v?=)4OY bښ]4E.|vܝ 7i9eU3k݄ˣES' jAXvXjp}Vv=])ۑKp\B%ϓ+\7wŸBbs`s2UeIcS9,=N^ %"MDSAXR|N[VSBxϛ\WgUW"YYY>۸{>;rHDнuj6HּN..ZP-T*۸q^nj55̗!;pE` IF.3 P(0y#(JP0 #m]d0Gi d2+oRT;AAn'PsGps nl#J`# 8h  8hFVk;W{p/,y"I$u:h\/4E"T1UT\viFJ,y5!VZqiaBVg%J}o$:Μ8_ȣ.9}rޝO&Z> bVHMfYjR㮥ʤ)Fk8=xH/Bmx8d~%,=p_)ķT3'J4cBwgM|>Q-J^[+hH9vrAQ2%eUoLѭsJn9Q.@Z̜铆 Ea#F47UZ`,+(}cYGT0P8x_ߛKQYW}+,kтͬmʺl|]ee-fDE)vΘ-šO:9Yox?zȲ񿮌Q#qWw8yǽ0W} sKZ⦿<>~9D;9}=;ukfU[ZTDhTD莘#GN]_FL?|{rgLj?K+~9p3}KS0˲_ۑd"= vڧgx 8ە)\s肰l0lV)Z<F D?ϓw!vSo~[+=ӻ_zӪ^e5H|\_8+7}uap3MJE NNptPV8.6wR܍vY[?#{{BXs6Fdx:dW IDAT 48.44د\S A>xnoEt JeZ))< {wln=u,,4% G(vwv,l_K~Uk”uw W"h~_MłbbXy:7nj'sP+s2n?9Squ;jݦpVo1%b_jf슣䰧;9( 5*b9x^X~bHV%j?-o, kJCsx::)G9x@wy JKIhV(dB7zhWg7=ΏzMxׇX~AK/:s p7cMkWlZb^_C/#H/^s[vзa*T cGD?1?2I׈H(J]GUv{{D ڐa6m=52q#CEu,S7n95[^}c鸜ܢ*Lzw6qR,.hssƬXTrz/DG͟96+JGpjZaM ÂFӷwksEy͚ 5H #iS(z=sĠ# HjOl G³/bFQ*&eY[ 58xh4]&H$Z H$;ܯ~Gh4L^ÅbZmͥ! 3n}rIߞS#55d2TEBW6 bqB. tqR:*{8%4NVZV,||ssI?o xzq2͢|ڟ/qvo"l d4M4Eį;+/PȆ /+\Nyn,rrY;9eRIkۢn䗝`D"[s{o>~/g?[k473rWk_{~\l\Rl|zRZ!p|{"vowy-Z0mQ,wj idH?ޘ' 15w+/X0t 6<=uyEe]18VZAs#ÿgּ&_ t䐞wAQraؠ{"ᩥ}c%/L 'Gs~ͬjK;||n~遅E˥*^|\2L71,{h*T"䋍]uHK+~9p3}KS0˲_ۑd"iA\zKArKwh!A.PV^] Yy{_h3*x_bmPo-z[{v>k8@G;c ̜'ӟCs [R(U=Zڨ9]}}՛V+i6Y[[˗E9ݭX'd}>bѧZ[ I {c^nZ$%-{gM޿O7űA)3*[n [?w[z֦0˲kq39sҹAm]Adwe `9Nܽz.6!6>5m3' 1#eR1<*BxXNF&d$V){GG9qFS=zѤT8 ;kFZ?$I<}l/_:/7Z۸[#xΔ n/8o1 #W`Z1|@K*ya0c@qtT_}?[v߲󸰼ӆùɃF8:(y~֓ز~*G~o/W[X֕BE7m?n~xgy?wI.^pFՄj:-(\XfݫGxX](-̛9Ow  a*o7 دJE߮zѳ72J4< K~tE ̲sB!>9yĈŢS*rtP}ݟ$єGWUiGTȰAͯm Q)*0ޞno6s;L{Msn.BЁ7o?:ui=Crj^}V~]g )O2Ry2ℤg9xG(0K+J=G KX@aQ\.{a޸_ک.!ez͙ ’oO7|}<& UUZ9x~S Nj:,4sY^pu> B.kMuvnb2sS3 v`^`ca"_bL3@b1ĵm1o!|:W=?kT׈W&_ONNS)3& ;yfX䱃iސ$a;k#A9|KpGǘ>C&$JXqۻh5 7RC;x{ ZIs#8$ÿ`1*Y=odHo۹Ů.ͬH7$1qt_!Z7{ڨ.{{FrD%QH.Dش@dffVVViŵ QX1{$Jz[.BNYZƻW5 qMAE \A'YHH&0 $I683!BM0`u-a+ XyeE@BfM0 BAͤu-]n$Z0,k>>/bFQ*&eY[ 58xh4&H$Z H$;ܯ~Gh4Lt"Љ_W8yS1OΘUGO]6{},{+#G7ƗUY]%gf>y5!䃅J.kiqwe=`շ,x9hzQqٺM&^>WBRggWE47 Fӟ/%.>é[d^*Zi.X($I8@=,g.&+t5AEQx>ucNg .}],yaBpoj;9}=;uk7ѭ+-o J*>QzEG899|OrdSCGdsťO䥩uReٯHJɊ vwujjDEFE9rݓ"n}ނ?na7wc^-Zˤ_~HXfYӯ~=$$'%=wN$I>MSEE%cG3/܂r{uA!o#67/^Y^{,zvlㅳs ^r/qZ<J%ϷX-y9+ӳ0!#+oK-FRVm&j3^@!|u~E&/7B^?4Ԩ/wWw_rUkt;2/{?)r(bt’ʗ+,*O9e$I86$ ~~A-_0gl K+&~I' ocQ!7'ex{۸';TxWt"?a?Vn20wu6~ÜiÅG{V]:Tkk6 /$qA{Ţ>Z's 񩁾n;>a0-g5FrFxUm?i0 $bڟv'ʜ5mtѠms?r[_{aʺ jEjD".+YlCA{:&-Tc zK$[vݣXxO+(6z ' ?NoYF&{(0,gWk9"͹$˗Lwsuw?qaЮGֶ_.tPdV+RDlNNjmZnlzw=)WDmM7%-arasXK6l7i̠+ 磻wiաV),-.)߶"|<&>]'<\CBQ!=|} J|ś&]qhC#L} K*=O3鮭89(|sWg1yRa<3fӶg/%ѳ_X4rhCq?!+ޘ2lcgrY{hպ Jz R2^; a!>c{v |%:e_[v^|1>99-OΘ0Fo_tw[oٺ?M`>K$y3Λ6֦\+"gg=}<3}0.s _J#&)4 [ETTG]<)Zbq~3n Ά9_W9S7eIcS=ow Ry]ՃFh OJɼ[ # _V-D`$u@q>b`ԨEJ% tM]'?og \s;uz\OLXq_ 233+++ZZuKڨV=J-BI=Қi6ٯZ\ 0?9*x (;pJ $&a`04R6vaA neygٺ3` $s [h*#aS(= ^0˴NeZ Fp0$IV+Ķ0z,˚cϲl[J>a7X,h4<ϛL&0 p8N5L: ʸɞK:[}V` JIRDӴ33 bƈd1x?A$I|C4mR$ @b5=%]Vi{~ I[p@C\"_ Kro`08)Q=#y8xnavcׯ/|sXPaQJ%~ڳץRI VYhg ]7x糰l/PbYj=9xMvʄfQ)LI <(RoWM0UJCq_$ 2/ =5d)'aU_xi=ϖ];J1l֕kk ŠaAw ii'~v1v~VNA|BZv^Z)I !k/$L)5k ZR~zq/>L)oZAh{̑ظ a$'Mȿ~35KH?|v@.Zj`aqG{V PQ+), ?8UDp׷Z[`0v ;,݇.k7RaגvdԴ+).BSUY]3upOW[1~ PY߹2 F455*vk h{h|>">;G!/ycnQ2Nlg5%rG ϱ@c Z? 4 jz=c3#9&uЀ݃ ulhtXLVUZV*b[^'IR,ۺ:@"2⊪a[ű``^#&j&+J RI4i@8HyU5/np H Hw<{A\-Z" F H$ ل0&y{ha4+d9^(V5vMlFFV5)"BGl F0p0 qmwTAA$)|7uuG,2k#E.0#I;i{!````````jB\aIENDB`dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_HK/fig/type.png000077500000000000000000001204751473346337000300600ustar00rootroot00000000000000PNG  IHDRj pHYs+ IDATxu|GgfwBp;ݝ"HѢ/PZ[)Z5H .w @BH|?[\n;3;K!BE^^^] B}P!!!B!!*0 BEBBQB" CB!TDa@!( !P!!*0 BEBBQydLy[,B!\&IwR.^ ߿XB<RoߡJ3e"B(Yw3=f42I*UǏpB9=g%B!T4j7׾QSg/GDF?_tf S8@!;Lߨ;On٪jy A{UkV0m(QB"+ 3Zez[mٴY$&&]~2bp}wjD!r@$xI=|zvmm2XY2>8`mmE!9 *ٵ1'N_xrȘɕK>~Zʋ"BEZZȫyuw@xduztmmcciѿLq( !B".-MpF'i/K1yl k渋,yrhB(x9 Bw{bؗ,t:d_T2f!* ^ȫ!@s*ӱmS(y&ȉ$dKEl @!r#qy7{AI) 𓎽K{/W}F9e6qB^3s z:9gjOwOWOwOUʫT"bxxN{"B}oQTLV$Qwuuj_^B#$$$ kq[wd`0hZ"B}R`oSF%kKR}8JBZB}0yvU ZU!B 㖀WM&dR*B} >XP`?B!Qぁ!*,0 BEBBQB" CB!TDa@!( !P!!*0 BEBBQ@?FcAW!л{p#]IJC a|ew, PHppWn65J0j?~X~W 0*nJ.WcKB^m 0Jr ꠂ_ѰWnsB+GPT !_BHb~}D_] B,W!`eP0?t%B\裳?kB(* { 43 @}swB?, ŒO,pV`J(Cфw"P{Oq>"(Î!P8Cr"•[ p%;~1S<@!p# 1;"4dx;$%|ۿ!*L t-u-%/3)@RLB)W5TgZd}CGH1M^p/uR`~ƿs]/Bx@~ ʷ<|Udxt b<<"8&%˂^t7@KF< R͙B-y`~npg,se2V0ա7 QnpmKo4dbU$@p)j`! \ buc  oCP`/^*[M-wo?b%Wq>,~a@=XPQcr"Uβp4<̺E1:PZ`^, NX 4a`\OXe`Y@Ol7_w<&?=MM\MGFrj!j'_;+Jb؈]<{];OގR]n]YiKz^zzdSvaSA֪S.#^Bs#GoMŠ*h3#\~W sƕ_ `>X/˒2`w#/g٢{l /`谨#?4:2U.\\5#^vܼr=hJh۶V/SB̹:j)svu['wêW&5v%7 sG'&|jj>FS8v̀V@_XحUkzpǡ^nn.֪7O],vZ/$Vi~dsgq_Nc%Lm@aaSh8PZ:88pFNhO0fk ~ hWrDȱ5wB;y{s(z!/E`rxN;9]18s7FCŊ).;G>w|~>wob qt\'+So8uyNHJ tS_XU\z!Pʟ ác`Mt!H@A Qp5f+rсeJ3'@հ?~p^>v=+K9) | w}ŁMص?>Zk5gNY.?*wIEuϟ2_u\AǂQ1_߸òeG~nbWip*p&h ɰ`ހY&M` vj Jh^ e&d}9 ,% yePN==$^iA6a9>052+>ߝv-:2VpZ;7/,y&V >0LZ{$ƘqB[ΑԘЈKN>wXNA!T8ظ@]9: {ࠅ .v*@m <`  b|Q6 m n8~ دOSoHz徠IN.w^]1k0 uvGW<8Ş;b9번_W?3Lz˸@QNx!8Uq9Gk^ʨft(1#RM٧Ό#rBMgzAU8-Aόe»}M/õ\tf7  եD@ ܻ S <4i0_t7a͜@k%k5{/(ml7 Xݢa βzv_}}Ek7sx1Y4p遙ˏ8?cc*=?_s=Bc޿O K ­⮀jU{Bw$ Х$($8'4J ?̪Oa?Nk$I|f}RwUW<6lskU1oZXFg 0 >ykt&Xg[qT>+ N0' 0$ :zlyAewhi +T.]9 ?WD^@|h d|75[&=VjuPbםnOH_7fM_{\sJ ,UZm{Z!PʯKGpÆ!PD;>P,L8Ljv`Xx>,@u?4/ V n^IУmu[&N࡝#h42r : =Dp0#@DQ ->u+o\(I1J;{/4p^X̥'/?]*:j{?Ln% l0gk0qqO[%cA!> ʀXqކ2]h洃eYH. _xA}~]|` 8=q,8A0ڗNM]όkE@|Wt!oԾxՠ,_I95M\Zx}+m>)>2(9/ymV Vug[)Kc5h_ekV# nZ-Eêݜ#:xdBF/Gg!n@Hl˝+8yffh=5nI;Y]¹{p0nC'sW`Yڑ0d' AXX-הw9"n'/YT68`ϳwT3 >rgBGՇ[ҿj+2@ \ŀ}o%W}oxǕs,=a3?@Jx9Bg! &:nRbSHkaw?gpY% 0U v F_ |3qc/j;fݞ[dx_>`ۺ+nέf ˟~ٯ| *x$5tΤ~w;/z`_1U;%!Th0e1!j%vK~KoN6hP={,ڑ]O4(}L̩Nվ7V}:魪Z3@| BCP@>T3}J>Y~䦳G~q]o #[qש˴yxfO?H0G9yrծ]T9!aؖզb``(}@!rԓ _)Lߴq/kSR k_~ں59hںĆӿonя3^hw6D0M!rCbRkC!_(9X U? x GhŠ_%^*2z 7G!,C!( !P!!*0 BEBBQB" CB!TDa@!( !P!!*0 BETgov?IzW(wG!~`^cbl@ ̲.2WםgE# xaFz-LFЩ !PaU!e[?52^EڿỶ%1Wӻb-ۻ8kR`UE! rı C7\0ծz/P&BM=rzll[}!PW-ĪW-W\Z&- 2@tnYXJ% @!GȸTI2$$8ϧlU@͠8<#By ,zߟM[ɴ\_FWUTfzRw@X"[YB8Bc s/{7jqʳW۽akj>U qs+aaMxA911Ņ$JIOH-Kp*6SPXh OGt,`mg}z]o <5ڡN. Ypڈ7 iaRk%t%ч G=U hݘn8`WVyl̴/?̴j}JsÞzrm)wr{5iV@Q_{JX;W?{_Rviז_W;Va؝toup{Ԑb袯.ze_e}+ !G@f?.72>S]j5;YuCvg3-PxxsLj۲zN9擯uoW! YzR;h'm c@5>kxf`qt # cO4hHOH|OHtW0I2BjD܉a%ݫκN`T fQSܾ~., |"P!BVӿgz%,Yҿuri^z.iMr|T(md˫ Rb@0K V2B/e6uWOܹ3/[(U/MHQaP_{O.뿄⽃!1#kcʹEblra7)|kn| >}`U9:`To*0<[Yc> mv; `*wڢ3Mlzpu>ʜ E!2lE"lm,N+"cƈWw_>vꃚ_t׸ɛel>=Y|>BTqL5.~OunkO v~ʘI%!r NJԺ\-ذMFkA}?0x(f}CÚ BG P2ZT%9BPcwB!TDa@!( !P!!No IDAT*0 BEBBQB" CB!TDa@!( !PU!%ܶvmKqR eI_2kzp`+qbs̯<zlΨ΍ճw^a->&Mq!P^**j'7=Sf 9v3?'2 EIWC99ڕǵZRU@a`Ҷ|v3]?M!w\ЗYt,ל|4>LZ);Tk؀es7 r?rI̶B* o!z'dcJAԔR@pȳx+KAa lܴ,SO^3r߬AW"xV}Z{jJ1GWlY3>0L,u1N q҆\ZF>"Dab%m\96H.U3kP`O7h1}࿇Wtww_mh!n%9:B(`` Vz*v%7a\IK7No6:O?)PL*%3Ok[%]e[m[yUɴ@<{غ3&7~APיg'bOq 0L?6vvpS%d\WXX(ş7S+@uJΫkƞ㏃>NlꢳsS1MIz ?/ok (TۊBRbSozW+Js'fF}1y 1]9 ߿fL 5s Dp{a+g.ٴQӆ xhc;"2)6ʉ)էX̑} /ĥS~=襳=_{ķ]^w*\ysY݊jjޥ:mD PVtͤ:=l!U #v~;y΍*Q*[%6Х8P'95۬6^kOdxi'镲ڧk&մsi7?)\ol#~xmN/ ,w/. R5k[K_g6A!χpf/ß!]K Gi wܟ  f|7/>zW-{=]{B ԡ{p}ǒ럎k&UOV6{gS3xt]ϴ3&Q8z; k9jOW ?: PڽmӍ*_ Тcr~ZF(YEC\ASY=}͞.Xsg#QY74^R@zg >+e:o"BW-Q>o {[b"xw%Zc`(ص /0CɓrkR9>cetWEc-}sVU-|kCSԦiǻw[ظjdgQ@82on8` _*KHg,Z"u\:EK;{*DY%OrA؅#[:to/[B@93jЧH|~*) !ٞ!rN}(c02/ C:6D~r"5ƈ~mO F|EVіG<~\ӓ^u?#z4e*|,~h rh8caKB|Uc;i-cwiȳOTy[ohP&ISSa,,Nqؽ,2]J:UΡL#6` ի=3$*;gw;", @Zks`ɪ5Zڨrh%f|rxC܍pRCO/}Hh@J/Z$}lT|a89T(f\4Řs_c#Bo' onuuֳőo~?X7fuh/zUeޘŜuR#%F; %ZOO gMK}+9]I++D?0Bt\ݳfJ%rL 2ӳ;@b rgX'[֬<n~J}F`h>:~T/C>N˖ kq GA󆏙4e}sDQ$m!T]IqiC3$r iqY7DǙtˢ)hYNlso?dm+n_}|^bВ?-IS]*jUiG\sժHӛA.|0X\6@w,kluXIcp7{ç.fYqB!$1!-`>0Ծکe9ڸ5M;U9zfY8pyp 92wйJo,ovo޴\$=LQcݴVC  mbj%ϧM YN9k_3e9$Fv@<GJ 8ZTy>9붞PXI?wW+E:sİ;v'l٠E[[غUJ嫇]cdz퓚BQ(<>5? |M Bٽׇ(0|~QJĈ*ɥ*B8S*H 2H+ZٙDEQ6$K2*iTF}" 3$͌xfxNR<55A):I1 2!L),KB 5ZVP @4JE&(8^VJoHD5p&5٤(NPL D83B(oHl2FۀAPt:OMEP!̤' bJ'&,6R)DTVj*{}r}XBhfI&̲ZL #h61M5!8BPF@(0RRRnW(dY$IקXZZjڂmi.Z>*$APT!)9e9D )w-,Qƛ%9!5!hIJE&P-/pc,`4JfQm-U oa@dTia6Ěe'~ VD&̌J1JSYoDT4R͢JAZc#@2G52 @(%&&RJ !Eg`n'666R )T͈ D TLLN|lnif,s dx!%IuFId8^^"aLd$I @  L&S$ C*48'!TEY:E=bjka"J`Vy$I$S(*SB  "^f!G)}|> C*4d"h\LT4QꔜR2 D9x$Y<ͼo4r">+c2eQDBTS*A@9N `JMQi,u:G[B(1ư% G" & 0f#DyNdT6&$oYjk1R*xސd eJD*$$ "B00^v"_C^CBo&$I AP(Ts<)DQGĞTc'Ǩ FAEJ2իM9Řb2pTuʱȄ1Ӧ/?!9ٽHeI?۷|޾mh~WvHE%Q$bⓀ*RYӒWj*8BqB>yX¹u}78O۶DK fwa[-uZu-9ȑI6/_^ #_|Z'9iۗ(G9t&V +pBIjtrmIBj϶,{ųU#b 9yqu UXf%B8ן6e6? i-"@V(4x(<aZK_szK++AE#FD f@&8({ QJ;tzG >ut)됥RLQ@s!/XUz"%[:icZ[Ϲo_,u2μ+E~\|| wn Lʷ۳``LMXB{Fi?a1 vjڡÏBTjl*Yb<) eTR%P^c],$Z5mZl8Q* @dRB PB a!!D&Zrk7:Dr.Yqƍ(LQ|H٥xӎmV@(=q3FR:voVUI^$>a6=]Е xf:3 sn2ibƻ{jq Q9i1Bzxƭlxr jvNκ7lQ+8AG~ڣrX w>j8OBof0I@J J%oLa,s<PD*P8Y B8B@ 9B]˶M|ZNJ(XLݔG[v|3UCлb7(tru|Z9V.mHO&ʕJ?ӯ{r/X`ao!@Z-c 0’nmJ59<٠3,{)%v۳SU%`H>E9޹xqos.ge^W_~ G{پxnT&e5Xr+-[M{8GjN88hbnZfl4B9Th<P-c8 <QB)H@ A`l[[F90J)T!4}`7d\V{_5eMTU3?-1!J k,^PBk8 6.c@I~a_K;"9_d QA#5_#/.fIl+z5=2&n,/}晘G3dS擣zmch:Hqx[ tپE A$ 0IeI"@,,,R *PQ"b4B8f6*p#J9B(p7$ʜƵLK)GϷTV:hYWywKO_6$A6S̐=|W܍0Y&^qS8- \WshеU΅I࠻N%:h`!Ç w=\kqw(Kr".Ns1 :4ҽɣUǎǘ-Pˮ~0B(`1jFL1,(T)QTED&|! S2%'< @x~O!1DX1iMG%rB&[,hzJERh}bJzVszǖZ8s\a IDAT*,C:M%1̋kjsb>lvP G/aK?mgȤN5n烚>?)cmek[ U<tǠZ+Omˁa媸ι0Bx^!HQNT'&)'%T*3J!N@B<(q J9J($1!$mH2[6k5-8tnt,Wj[nU58s'M>/eQ)o9YN- CfᄍQՄh*rVe@bN71JϞ7mJjSۄ1ט)U6~([%5|n<,*_L(($0DY" `$YԪ"=UtUf/ĭe千WqɊ;+?_Zø~آl;~])SͽUxgr5{c˵h^%뻟zwךˊ:--4<j;/1^''yV%*'%X$--4(㈫.uOͦԕ;/ DE(G)PJ) rǥw0ƀiBCBj߼]NR ȷgKOJիQZ)p95hH5 F!Uv,]Ńm&H~h{kcA7_>o#ڶ_4q/yr\W{&|#UwJ|ޡƻnRRRx"~Uxjxxx0ߦۓZY#}U-SLw^Ըe%9B˾{ˮ6r['o>5Cn{EnƘJJJNtQ qf0I%R=\ٻ(6 d A[qJqR~x)P;Cq/ !._9ߏ%l`Gvvtٝyϱ 0,Ê#,c@aجЌ>Y|69Ūqˮ-[kƾ>XrjJbBb\aФrHj4),I8T"v6ZF a30 0 ,! a،j_*rDK+r:"Щ_"ǕL=oV2%v>iI _'6qͻ<&=2y~@صxIRDG}액r>u9&9!>>>6} lnAtyѫFdG,U۞A`~kn:pÔe v8b,aKv\~ ?˄=~}P%TR>ԣEm~ph1vm$Ba#?^-bXJ,r 2,rbA"upʥ)jNgä5`)1F`"H8BA`>bDμ{ &DվڭLW4Vy}f!4V챉/pVв=|צO("`z/ׯsi>֓zoS^X_޽~WtwgIVm=uƵ[zH>b50<_%:UeVW@/baD&$8"#aMeYD P \a&- d(:qBL3Y| -?~ӣk.@ݟo<t7fnsjÆUsZ?aȵ{\/^J6ĪW˾D 'l>S;.3%T>{ 4&${P2 X`8H[IYXA0R0F^gd^3BAfi҄Cx"8Nղ\ ÿn\RqC}YW8swSgw)W"VqNj^+㳫O)3ǁhX@2VoLӮ}^ϊ!D" JpR%I aǰZZIbF!ƾ,aX]dPJA~ BR(yY qJ)v`s 88ĥ>XVaE"N'qXJyADIWHL2 9P! 2 e%%@?`k ӇTjޑE( rɘ:<X$SXl-X.k{B^`1'Ļ$]kĊb+Ki}fmm)w|v['BD~$_ڑ!~2H-;s+Hj3e8.Aʁ':B"C2*'P B0r\PܝĶ {2{Xۗ$two*-Ftgwn@^D(` X!RKa8H*+A v+iu 1c0A xƦRDHRAX5:AX T*R ] Tս1=lY ح7tn_ { @noo=zʿ_R hvTuKϻxb<FsaiӈUFmKp jf;3dk&qNB%X-'d=hY>ZqbMtf <2![ THr9˲i4j)x8N,KRDb&F&"(&jeU9E.JhT <=5PZI h mƦ5g0\+7$DO߃1}W|7ۭ'^>#媜TP[X$E0pRKޠR`2&'-r!,eR"0!҇  PaH$"H"'s˲"KA 벩 V'FE $ʭWX19?Wsxw9`3~(zO_OaY Ĵ!EʴÓWy%hn/n@~ɿ:cToG[Ѳ^;vy{[X.PXC!C4mC^-<O)l) .`"%<*?{>NK" OjVXHrXJ9!2,Vh#ܚ?(=ΞS_o3-e}p^KgO>ADy%/%j,tetSm]dqo݆K1@O  ˣ_TP+ lwCQZcڰCBӋ"^qwq5{t4\o䂏!ꐠ |o*V-BEA'ꈈlB) !B) !B) !B) !B) !B) !B) !B) !B) !B) !(>ͩ} K4ޡ#6^?v;*s>Û6}@ i Ι\ ! ;Pވ{О Y-XHGٷsHkү,?_Iz/Nޯqyׁ.ϾZx~E=22KzA>>}梇8bq珫*Mߨ.@]YJ&G\X 瑻<yX2bx*ƶJwxGTsTS?)h,8kۃʦa[Zm9F_7H [4҆f[XsQxpҒۧv>7p&j j!-x轢73oI},Zc?Xl;٧i^ڱᄉsZ.6!,r}h}/[$''V~Ya%>F&TzO;"DM&&hĭJmJ"HLa! 2ae(Kߩ"έٲ;Ħ貲Wߑ4{Sh"-BV֮kA~]xI6g@Gg'k۝X5}|~ֵdZ~؄hINWlүKc7&ˬ{͓!Y`Qj2)Bf 6ko-4/mj4z|x+nHTTY9YKQ6J׵0ƣἥlDf'z7|q.ZrK_z\ڟ3G[b%ϸpwuIZgnߺ{]i2ae=[4iSF-bw#Xz6#Tw5wel?.!C^ɫ?惑zU"M<;x]OsEʳ@5>m-?h\(!E :SI15I/u/Tҵ{xDilSƈ鳛Ӑ3V^wf rco V%_8?%"k*8jˉ ׍{w^T΅pVIΌDW]sF]OG@$4V,kSܞ&ذEho^$ogo '6Ϳs.H\bWU{6Q>Po.Yۿ @cl;ݐ5~Nۘגl?.0ny}щA5Je˿9aKP>3#̐Cb]Kɳ'6MM'2 y+>oT%Yŝ\szն"4̢5Ouo8 ѭ35g>\ M;6fw,Fawݲ*&̀;[H`D%6ax#]3MTb>S%[p;M.dlLY<{sȨ!GOI.ޤOU׿? ro`p7BkdI oΟ9_ů$$m%U~idj@&VED֞=̿ЛgW}/Οs1㭳l8}AiJSrb(,8@eQ$BcVl<{\Z \is xe)Zʸj q]`٠qI{BkUXƽҒ'Q`xtwׂmns{*vXh@ kgC;77O"_4 zU[;֚ؕ 4Y#M*bמYÁC( {|LڹjIrޟgoFRǖiLvwp8+鸵ÛDX(j@}nss9 ^!dND!9242o޾SjuܪwwXm|7g諭t$ @h1 U<{-^5sH+sGd~лLZ|~o+ծO˺{^£3uƯ-nו&?YQ_[kռ]{onok-cE7keihpw}eu@*뮛sci̿S#Mz篫Nv]=nJ,ǜQ3|r^nq ̗ɮESKhVj]?Y3q5[qM/qo-T׺E#u'm{ 7gbbu+k[Aacigj)ob\ Z2rc.]Zy Ag-g< {Gw\_l : IJr R9܌]!3]US&4vfh“0[?ܞd͙sZ赩e!Ku@:BfHAg&:@d5G/=7aï͊AjtA r6 ՄwBJ.Sŏ q['ݚjY#FnwaSQZźm| gVdMѪ:Uw倏r⩺wM*s,K8X&yV+ɽ[֪bNJĭgE.^diqbg̮Nby~>>fMwkd)E[uwԤ:yiPulȽO&2BP$.v&<8{N߆w7U>ԖkUԕ}\dLDD䛀' (]㢪mb|5($#ۗ^9.x˒ki\jZbWiaz Q WŬ+WРs=Sk[}wZֲX+-̑~'Vlb]ӓFܮҬn˸K3k[@=MJl( N/Rg}VdcB?f'kj'>ztUQAlKvX"grֱ;3!CtۼfۀhzIkxÿ{so -Y.u9ڥƹv8;Xi5~mmtA;&,`Tpufʶ}M 4XM u$ϺXн=5qҡj ^]իy)?J:*:P׹K>]~BW$Bv0P۶/ӧY @*\3NTtfӶfuKݽiBfƝ5?󐁵n*ĺG n豜ۻxy:aa1. /ane.~rl[&,ްڇ?z-vq7oczd,<댞eI޻xƕ`$JGNJZw.u{+zx1#(ed|-?[D$BeGRl\ZtlURb}J=|\:NN6R3kr4[rL!a9/3lpW agòAOkr`|ˋ:+0vjvlN/Gyv.%-S]jSLӾS2{O^/V(T]C)h2N&4ۚM8MS[m$h㦏pt{nYKF)>K+CSߝ:ƫU}䐰:l,B+!}0 PWpnBLa@!BLa@!BLa@!BLa@!BLa@!BLa@!BLa@!BLa@!BLa@!BLqF)y^J!>B0,B {[PQd0x7^ oxgY 2By^_ !A CC*B` *Bx/Q"qs-nߨ |F޽bl9uB޹$[3l3o;)JetƅOT痎ߚ[1N+}֍V?^b"s +B(;7~ܤqh4B@@@;< HIM]v[>sYؾlqufت.9"oUu5_% (iKSnc9m>jم[2s GQ55`H5{GM>Wg^dsPՍȽmIٶ+g sҬm{h͉ ߬AAZ΂* upp`6p!t@vuD^ څs,lk=dߕsbϚ;wJjo< Kk۱2}B=6폰R/WÏ[RN;XY|p9 -d |5$7  @5|elW CbddXV5onSY1@. lWZ~бGsU0[jKM,aW <[A,oaC g7 $B !sI@ ۭ k* D_nۢrygӘ;hQs,WUݻ; @ _]?y,E>X $V:NXe5f4(is "Bo߹̧*|sd&}drAbbAa#gԩ9w>U'ra(*%;..-fmЦaB(O* ƒ$%-eGm&ޱcەatEܽ@pΖS?V:Ξ^ fuZMYO昶oj}9&ٵF=NY}، ӯsG9IT_q?Jp:yrRŶLv(0Ty߯^S GY.*֞ nS.s> =fPOmA Eݦ%1" SJǒmTPigORtgOrU/ٙbI#թc T$EE[*1!]:KYejmrܬm :4,sxvd]A-uf3? :Wa9vѿdz))"O"rn1[I$VokH>>UYy :&@^ QaQ)86(DFdoC%5(XR= x֥I@ԁ5 Ϝktc2ߠQuߟcyL0s~b3+,rr W2vGVs~ŜVzհan . HGO$>ۻl]BDt2gA}’Kq$5'_ h"C՗m~)+':@PEU{ӯ0܇n7"Fn5{=1 gln&Ҿo0>!$~ Oߨ,$O;Y:aS؇]B|@@RY N y۬؝ƴn.Pƿ/?kl,Y|IH!&-|aBJs>wU&EJ)% ~)!/x83٧BŊR^s@/zՌl>tM(`8*W!йw?\-|ؘTz}fJjOiB]+-ϠqX߃SA^nHK&8fU|ğdGu˖l}GY[<fUJhxE2"GZo152.w<Nwc{%|,-Pٱ[^n^OuL/T<@~ț$bĐRi)/'+Mq!6/Kޑz<d߷S8M@V*~AWh[箽JG?r^]yn"oɧa`rx4z8'1tzv*=֩EWGG/5G.:$aIs{[5tJҤ]xc -|YAc5EPt`߅_69c|:{ҡN9/>9!ɤ"RV"ZN)Qo?NQ+Jկ~tͺ%^! @AajxOx;lF yNWصzѦ뢆]`7޽mծVCrtTHh:eӢVyw2iףaaaOE[|v8XQ;?H%GE<^# j$yq 1iyӯ>~8B-}MГHÂQ)9OM Rv_f0^?t鳾O-;Ӷ*l^fl=~V]h}~}vPW`жS.r+d g4 ./+Ρak_YB^ڭٴq݂˧: rqwnQ&VnSx:W]!k1<&fk>Qlo /f>f!r'j*BX&@~ *ӣB_ k)'љ{ay:P+I8nrHeGȋ9NIˣ£SRS#D"X$D"H$Dnu -}_T۔QɶnvN +tp)]-Ɩqi>leGYόkϱWTfcYYM;±^1axȤlL@.D_X'D@(K<~#+՗6w"Vm|x>H,-(3K'g@eUݕk}}]Ilaͣ/VoDobm+Apq)ݷUm{8XBAgLy]3aclf+}&F҇_Ös2gO!­0,&^ CQw'U(!{& FO‰.W9(oܦ1nz7wDƿ~LZA"o;PocĈq>b-mLT*TxG'x"pWR۞c@EC@B?*9(nC!e*JV>!P!B!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!dp@Tq1B POBf:!2SB!3!!2SB!3!!2SB!3!!2SB!3!!2S8b JD~2Qn.81B}iCUmٶUjФj 4 [&79z?ucOGFnn=B4* ƒ$%-eGm&1hZj7p?_3`auWdMjU! |Xwޢ轨),W~lb#)ഊ0exR9we vFyv֯C T]aTپQul:fECtik& W'8*|-f0,CBEOf(yKhJ* yCiuWʚn8-_|qˏٽKk5~:MXɚШ;'gMDsޜeϸĞ$٨T Q ,xSŝEnd+q%V{ww-V>pðrQ& `Ej߅&fF\Q@$JyMu/!#@c-|8I3GUPӧ_?߂c0 )zM’R OIZxSS}jMYPxmZM#^8 [4UETvʺMͽ\o h/$LhŐeR<!rS{ Z3gwG"[.}["K7W}Ǔ'NveG[ۇ6ޔh\Kx ~`*{˦~fgMIJ_f))z[Z{'SAT_myȞ+#/mNŢ^>IcZjnLѫ>Gne 4 ZnG`\;Kꊾkj2~}hEC@l/й_D)eQ)'.0R!Q%i= }RG{م@̂,U5&̪noFmJhy%փ)-ˌ_9-!EWk܁CvɎYS6u/xE"֊m›7k>'i4<lbHi0Օ(+wY[NW*.`̝Kwk̽r&s0'MWewT4.kZ/Sh_˗Dҳr󁚆%5Um ,XW_Ts~^=d,aѵݎihuGn^pbp Tl͋s0 0 X/Myjqˈa{P@\b'cIMSsU-}%Bgڛ @lgY5 Wmot[9ZhV!7]꺥%18+ƥ )IL[Y*^eo-׿+ `{Sww}ņj??`Ct0٭קM,Mm\zoBix6ϙxLZi~AFٛ啸Jj}Q’-p$5'_ h0`xQo]donڛ+ hWiR*{ ϒ6YQ8${Իvu 9($Pҁ*O)j{wͻm ka,Ŀ4/a 1;Oݑw pwaE.bl^s8 QV_Ց۹QT8ukdHaQ~7! ^uL>xdbƯ4#q,hND!9KKv@F' A*!ϙ?']}ÆiI-TRƿ ~""D*.B%@AWgNI541GzT,vJKJՋ9P[ @]W(|C'*Zʔd5{|gOsy 3Riadž T[6a&>\Y/fM֪?fl`x}|엾MJ) 6A7:5ˢm\1"ct.c@ 6&zgTL>׮|ccܽB㶤7f,4%Y}vڂ߬/ol`f%"6e]FV/ULzB(H8f#~Kt2Gյcjgqb1u 52Y@ YW IDATJb!=OrGbaaL^ƺRCW6AO᭽lNۺ wZb&Ju2i1 *_{{!Fm%v#w=Oދ2aRWQEJYőވKY[8d 1ۧMn|NTdƙg.yԡ3}+ƒ"˝Z$ʑ:]+<4햟?|~'Bத*MZD,egMnfEtzY|IsVs.,߲uq9{ZzZz T;6:Xrɼ%?A|l u.5V2[ \d`͟K{kՌ=rNoBU*o6rg . 6[-sjXUn|CYѸ?{5Q#C}^lh"_ܟD b4Jyg3 px$_18<|DV}*-ZdRC@|綮RbR Xx;e2EV+Xӥrqq)LL2k--y}WQCRZ$u~pA@|iֽN z;3 ~yԲ![:(5"Ƚ͐f7'c`|l㙣(]![I@b%PQd-?{$:|q/, D<3eP<5oKR.tJ˹XdbNkԚTuj:%U+]9r*Ye?ҔD"Ucm̏%uV'0@) VqDKhyA*5X,KgOEE,3d73@dU mZHFu!wu0JI8CR܏O,X/ h=^e lЗ+ Vs1M1v@mr].ָwΥGυ%ĪxV*Ke"X$uuy׵c @DeK?UZWoڻ8>8 )"R|&@'H[yNe{&ra34N/ڑT{ˆ]Զi%?g L zZ֤SS5ZےMWA3FHD/0VqfUvtѶ[CduzmjvߎïW׿iח 3pyVNZ95!a4YLf@w:j.&{p m7Xcr^j%VX߉hQ՛% Ow Brn6 (f?8]ڄΞ\b؃x2"16>9I"T$db_.58sZk|!jkszزλCMyudoOF~ pΫҊT(e/&|Jӻ.?ț *E&|B?RiEyHX]IKRߝTjDDiC)$8.}X A v`+/:x$ !)`} v *b!*eE AqRpLq 0 WB)4ve K6B!3!!`7ʩ΍P0D ܈\T,B9޹C*B!B(+e: R!>jL[5BH$bYV$᧟"Xy^AuBkBaPk2`@E!P BauB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d8SBy99Yzj[DD"XlaaG.Xx}BB)MIIIHH0v4 E <ϧ(JB(zPJd2^ a/<ϫT*`eee_z$%%) LE˲ ")))%%ńJ< L#cIDvJ$&&2 Cf_ Wbbiv$[E!t:0 LuSm!Ч1|q)uSm!ЧE)aƄ7uA6Ba@0G6-?o\xc w?(=۹|}xm|X NSƆ<™@u'dרP`N]UA]֭ZA5<a^K肮^v)R `x̫4pNN o(>I2IڤMRnQDN\9]}[a], .c=/DQX[жP(-6iy?ҖږʋLLf5ւh TWT+\Ngih}$㊨-x鷋h JKҒ]Cf͋iݣ/6νk3_Yl8~jey/^eK(Wjۼ)扗1z{"0#({?w\h̪:r̻.]Ro>nYf{Luq))1@zeG*H̻>;w@L0\#!S… f:rV鞙RӢ~:5Xۨt6ZmQߧV WDY, /698]$= ˚Y,o[kڼNTs!&v꟱c_2╛ H9シ>vwP83;F=.ޘGᄀEw9"Iaaxg?ݒGWo{?D{d!&%Z;Yb|҄gup؅ңSA3d?HIiTM=='eV^r233~Tz- qTEULںO>bzix鶇cDk2t1*{׆{UKJwW#1E{f}o'eW?mw wz̝:yb{U綽Vf$1w՝_UU}WI<%ߚq˦ "ǫآ͌T &z-'OkE/}?TU=o&BfH;YLE6xm).MVv /?b%h:INxo%'cO>whMb1OL+Z d|w/ W{omoȿ;LE✟qN _9[=5[~JpU\B&dEJ@fFҤw>xƫ=I d;RBS"@3egs;D^7?~L=kpY/^_v~,+:p~maF޳~kQi߇Ω~FD?<᷽r__-m\}WV;L^Kk$@\ۖMS1cdl7c;^4ѓ{=w/NhAqil`?{X쐑W*v_uuHEQqE TwGfm:Vf #ڒ>NApnUoLfE2oC.MgUjӲMNzp3ugt?vk#1[e2R?06jnALڐ{4/_(͞3l@Fnza(Tf%*KvmXޛ{T9&0c =c`մ:~@ -KKon;T36 !cLӚ6萦i!„$I͎iEh I^owR弛? 9WU5s*~ :0!˲jx"XVY?mE0!bQUrɲ~=SU5,p! |Ȳi(.KUUF4M4- `dYa3!"$IGQ9c1&Ihed2pH`Bc Ug2 d qbҏ@E`0{ M&@.AB~ J:tQ:qL nD :"b@_$IHfA:0j[~I$a`3DƘ A:6ԥgP ! B!D("B@BP ! B!D("B@BP ! B!D("B@BPR 8ιqC]1&(`B葢(!8RUUEI a;~ @UUԏ@}QEӴP@4MS%x:h u)tDU BAh(xu#B: ^݈:Bw\`'@TU|~&A ̐c0FcTT(.QD@ιr:)ÌF Ÿine٬VE2/! tVTTf!WUԩSv䀠B/.j"@EjVTT\P%̡UUNluABOrLTБrAccccC]|% u)Am"#]cA@GPԃ" x|p#U^糥 +@puY8}'HnpW^qq3N!?b%+Cy"ЖBS+2줖9'vV-uƦ3vV"ioRJڻvƆ Cu}k6Y屓/ϰ DKVqUGξ|ayA^O.iy킡ÐuI`DDbOKK"R=VU'g; 2K"QfFKR,ʡVC0K|9A0`j3qc&әЩ^f419VsFݲ-5رwVY_T rS/ke,G:n:a@gɽ}koo6,P'su+뜶7p6R odDD{c{EV)cY;C(A!'$˷-ղ|?X!HLu}cMP\]L[cƨXK͒yȔ,?'ҜE<6Vqn1Yb,߁%f08\X? z7TSxc V$"U?~}#&] }7s3 >E%;5""Ԗ˷S[~ >wn_\c\bi!#=5V=xvrΓ)6zgWڹoVw+O]U ],;)ZWJ/L:"ꄚ*Wa?LfhB0,)V')':J|1SVѯ.}9~˯ʘ>f38} .$hŮQۓs#򗂝w;yt(wW_{]EZjhKDdi{?6g1\u f;u;xQ}vMF+B4{Jfm4jqc&ܛSU&KJJA7_ai Jszw1uc6hES҄ƴVp2FR\VnG O3~ן۶YӰT[1mm}o8ԾmM3/.U Y9lHN6`4#,??p,y޳2L #Daał9g Ev333C];JWa#1Mmu 4M!tD$ZI?.HzE "R弛\%@GV+\UP TU[BȲlZ=F/v,jʲꂄ3t EUU%2 2HEpD"˲i(\.UU.@iiZfɲf`C"$IGQktc1IF,& C/SE6F (Ё rY#@P`[ͪ!suIDAToV 3.4 B( ME ~?.2UU~lɂ EQUUEAc.@λ|/A㜟K\dP ! B!D("B@ a(zIENDB`dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_TW/000077500000000000000000000000001473346337000256405ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_TW/calendar.md000077500000000000000000000303701473346337000277410ustar00rootroot00000000000000# 日曆|dde-calendar| ## 概述 日曆是一款查看日期、管理日程的小工具,支援查看農曆、黃曆、節氣和常見的節日訊息等,內建日程提醒功能幫您更好地規劃時間。 ![0|main](fig/main.png) ## 使用入門 透過以下方式執行或關閉日曆,或者建立日曆的捷徑。 ### 執行日曆 1. 單擊任務欄上的啟動器圖示 ![deepin_launcher](../common/deepin_launcher.svg) ,進入啟動器介面。 2. 上下滾動滑鼠滾輪瀏覽或透過搜尋,找到「日曆」圖示 ![draw](../common/dde_calendar.svg) ,單擊執行。 3. 右鍵單擊 ![draw](../common/dde_calendar.svg),您可以: - 單擊 **建立桌面捷徑**,在桌面建立捷徑。 - 單擊 **釘選到Dock**,將應用程式固定到Dock。 - 單擊 **開機啟動**,將應用程式添加到開機啟動項,在電腦開機時自動執行該應用程式。 ### 關閉日曆 - 在日曆介面單擊 ![close_icon](../common/close_icon.svg),關閉日曆。 - 在任務欄右鍵單擊 ![draw](../common/dde_calendar.svg),選擇 **全部關閉**,關閉日曆。 - 在日曆介面單擊 ![icon_menu](../common/icon_menu.svg),選擇 **退出**,關閉日曆。 ### 查看快捷鍵 在日曆介面上,使用快捷鍵 **Ctrl + Shift + ?** 打開快捷鍵預覽介面。熟練地使用快捷鍵,將大大提升您的操作效率。 ![0|view](fig/hotkey.png) ## 操作介紹 日曆分為年、月、周、日檢視,透過不同的檢視方式展示日期屬性。 系統預設顯示月檢視,可以透過滑鼠單擊切換年、月、周、日檢視。 - 僅在中文系統中,日曆會顯示日期所對應的農曆日期、黃曆和節日訊息。 - 日期以 **1900** 年為起點,在日期切換時,不能查看早於 **1900** 年的日期。 - 在月檢視、周檢視中,週六、週日的日期顯示會區別於週一至週五。 日歷視圖中的側邊欄展示日歷帳戶以及小日歷視圖。 1. 單擊 ![side_menu](../common/side_menu.svg)可切換窗口中側邊欄的展示和隱藏。 2. 在日歷帳戶中勾選相應的日歷類型,則該類型下的日程在日歷視圖中展示;若取消勾選,則在視圖中隱藏。 3. 在側邊欄下方的小日歷中點選日期,可聯動控製右側大日歷視圖的日期展示。
檢視 說明
顯示全年的月份、天數。
顯示節日訊息、日程安排。
顯示這一週每天的日程安排。
顯示節日訊息、詳細的日程安排和黃曆。
### 建立日程 1. 透過以下方法之一建立日程。 - 在日曆介面,單擊選單欄上的添加按鈕 ![plus](../common/add.svg)。 - 在月、周或日檢視中,雙擊日期空白處或者單擊滑鼠右鍵選擇 **建立日程**。 - 在月、周或日檢視中,單擊滑鼠拖曳建立日程。 2. 彈出「建立日程」視窗,選擇日歷帳戶、設定日程類型、內容、時間、提醒等訊息。 ![0|create](fig/create.png)
參數 說明
日歷帳戶 默認本地帳戶,可選UOS ID等網絡賬戶。
類型 系統預設提供「工作」、「生活」、「其他」三種日程類型,您也可以自訂日程類型。
  1. 在類型下拉選單選項中,選擇 新增日程類型
  2. 類型框呈可編輯狀態,輸入類型名稱,設定顏色。
您也可以透過主選單中的管理功能新增、編輯或刪除日程類型,具體操作步驟請參考「管理」章節。
內容 日程的描述訊息
日程時間 設定全天或非全天、公曆或農曆日程的日期和時間。
  • 全天
    • 勾選全天:開始時間和結束時間只能設定日期。
    • 取消勾選全天:開始時間和結束時間既能設定日期,也能設定小時和分鐘。
  • 時間
    • 公曆:開始時間和結束時間僅顯示公曆日期。
    • 農曆:開始時間和結束時間顯示公曆和農曆日期。
提醒 勾選全天,則提醒設置的選項包含:從不、日程發生當天(上午9點)、1天前、 2天前或1週前。
取消勾選全天,則提醒設置的選項包含:從不、日程開始時、15分鐘前、30分鐘前、1小時前、1天前、 2天前或1週前。
重複 選擇公曆日程,則重複設置的選項包含:從不、每天、工作日、每週、每月或每年。
選擇農曆日程,則重複設置的選項包含:從不、每月或每年。
結束重複 只有設定了重複功能,結束重複 才會出現。結束重複的選項包含:從不、於n次後或於日期。
3. 單擊 **儲存**,建立日程。日程建立完成後,會以標籤形式呈現在日曆檢視中。 ### 編輯日程 1. 在月、周或日檢視中,雙擊或右鍵單擊日程標籤。 2. 選擇 **編輯**,彈出 **編輯日程** 視窗。 3. 設定編輯日程的相關屬性,單擊 **儲存**。   4. 如果有設定全天或者重複,則彈出提示框,確認提示訊息後,完成日程編輯。 > ![notes](../common/notes.svg) 說明:已建立的日程可以透過拖曳日程標籤來修改日程的開始時間和結束時間。 編輯日程時,系統會根據所更改內容,顯示不同的提示訊息。提示訊息中按鈕說明如下表。
按鈕 說明
全部日程 修改所有與此相關的重複日程。
僅此日程 只修改目前日程。
所有將來日程 修改選中日期及以後日期的日程,選中的日期之前的日程仍然保留。
全部更改 修改所有重複日程。
### 設定全天或多天日程 在建立或編輯日程時,設定 **開始時間**、**結束時間**,可以設定全天或多天持續的日程。 ### 設定重複日程 1. 在建立或編輯日程時,在 **重複** 的下拉選單中選擇重複提醒日程的週期,例如,每月。 2. 在 **結束重複** 的下拉選單中設定結束重複的次數或停止日期。 ![pic](fig/repeat.png) ### 搜尋日程 1. 在日曆介面頂部搜尋框中,單擊 ![search](../common/search.svg) ,輸入關鍵字。 2. 按下鍵盤上的 **Enter** 鍵進行搜尋。 3. 在搜尋框中單擊 ![0|close](../common/close_icon.svg) 或刪除輸入的訊息,即可清除目前輸入的關鍵字或取消搜尋。 ### 查看日程 在月、周或日檢視中,雙擊日程標題,彈出「我的日程」視窗,此時既可以查看日程也可以 [編輯日程](#編輯日程) 或 [刪除日程](#刪除日程)。 ### 查看日程提醒詳情 當系統發出通知後,可以單擊通知提示框,查看日程提醒詳情。 日程提醒時,提示訊息按鈕說明如下表。
按鈕 說明
稍後提醒 提醒設定為當天,首次提醒後,單擊「稍後提醒」,10分鐘後再次提醒,此後每次單擊「稍後提醒」增加5分鐘的時間間隔。
您也可以在「稍後提醒」下拉選單中,選擇15分鐘後、1小時後、4小時後、明天。
明天提醒 當提醒設定為1天前或2天前時,出現該按鈕。
提前1天提醒 當提醒設定為1週前時,出現該按鈕。
關閉 關閉提示訊息。
### 刪除日程 1. 在月、周或日檢視中,雙擊或右鍵單擊日程標籤。 2. 選擇 **刪除**,彈出 **您正在刪除日程** 提示框。 3. 單擊 **刪除**,刪除該日程。 刪除日程時,重複與非重複日程提示訊息中按鈕說明如下表。
按鈕 說明
刪除日程 刪除非重複日程。
全部刪除 刪除所有重複日程。
僅刪除此日程 針對重複日程,僅刪除目前所選的日程。
刪除所有將來日程 針對重複日程,刪除目前選中日期及以後日期的日程,選中的日期之前的日程仍然保留。
## 主選單 在主選單中,您可以打開管理設置、查看隱私政策、切換窗口主題、查看幫助手冊、了解日歷的更多訊息。 ### 管理 單擊 ![icon_menu](../common/icon_menu.svg) > **管理**,進入日歷管理界面,您可以管理日歷帳戶的日程類型、登錄UOS ID將日程數據和日歷配置同步至雲端,同時也可以對通用配置進行設置。 ![type](fig/type.png) #### 日历云同步 日歷支持通過UOS ID將日程數據及設置同步至雲端。 > ![notes](../common/notes.svg) 說明:該功能暫不對老版本系統和deepin系統開放。 **登錄和登出UOS ID** 1. 在帳戶設置界面,點擊 **登錄** 按鈕。 2. 彈出UOS ID登錄彈窗,在彈窗中通過賬號密碼、手機驗證碼或微信掃碼等方式完成UOS ID登錄。 3. 登錄後顯示賬戶名、頭像和相關同步設置,點擊 **退出登錄** 按鈕可將UOS ID賬號登出。 **日歷同步設置** 1. UOS ID登錄狀態下,點擊 **日程** 、 **通用設置** 後的復選框,設置是否同步至雲端。 2. 點擊 **同步頻率** 後的下拉框,可選擇系統自動同步的頻率,您也可以選中 **手動同步** ,關閉自動同步模式。 3. 點擊 **立即同步** 按鈕,立即和雲端數據進行同步。 > ![notes](../common/notes.svg) 說明:需在控制中心開啟 **UOS Cloud同步**,才能使用雲同步功能。 #### 管理日程類型 **新增日程類型** 1. 在日曆管理介面,單擊添加按鈕 ![icon](../common/add1.svg)。 2. 彈出「新增日程類型」視窗,輸入類型名稱,設定顏色。 3. 單擊 **儲存**。 **編輯日程類型** 1. 在日曆管理介面,選擇某一個自訂類型。 2. 單擊編輯按鈕 ![icon](../common/edit.svg)。 3. 彈出「編輯日程類型」視窗,輸入類型名稱,設定顏色。 4. 單擊 **儲存**。 **刪除日程類型** 1. 在日曆管理介面,選擇某一個自訂類型。 2. 單擊刪除按鈕 ![icon](../common/delete.svg),刪除該日程類型。 #### 通用設置 **一周首日** 點擊 **每星期開始於** 後的下拉框,可選中 **周日** 或 **周一** 設置為每周的第一天。 **時間格式** 點擊 **時間** 後的下拉框,選中 **24小時製** 或 **12小時製** ,則日歷中的時間格式將按選中項進行展示。 ### 主題 视窗主題包含亮色主題、暗色主題和系統主題。 1. 在日曆界面,單擊 ![icon_menu](../common/icon_menu.svg) 。 2. 單擊 **主題**,選擇一個主題顏色。 ### 說明 查看說明手冊,進一步了解和使用日曆。 1. 在日曆界面,單擊 ![icon_menu](../common/icon_menu.svg) 。 2. 單擊 **說明**。 3. 查看日曆的說明手冊。 ### 關於 1. 在日曆界面,單擊 ![icon_menu](../common/icon_menu.svg) 。 2. 單擊 **關於**。 3. 查看日曆的版本和介紹。 ### 退出 1. 在日曆界面,單擊 ![icon_menu](../common/icon_menu.svg) 。 2. 單擊 **退出**。 dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_TW/fig/000077500000000000000000000000001473346337000264055ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_TW/fig/create.png000077500000000000000000001064461473346337000303740ustar00rootroot00000000000000PNG  IHDR?Eo pHYs+ IDATxwt7gf{ת^B!4pq&88qv?^jzMBzuvwf?F,$]i<ܽs }sg(**B\F!Q*$}@F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!`s pm'3svێ'ۿ0Lqi)꼑C.gΧ;cfjF㗜&Bu=lί,(6)I,h*-.,L*iچGN2m'f Y%UKS'wwua_ڰxݘ91qʄPД[RP\yh@hkt[#uCcݏ-75E+l\*J ia l%UUQ{ֱ_vb*ĔxuU)yo[)g@oe={0Q7xd{iEFR50uCUA(2迿.%).&:tTR<=pfyӓƎYE䣓ۗA\UuF˟b?[%IozP|;嬃 [ ٳKfя!>,Wݑ!S'ظ {F암Uչ:qk_۹c?^XvPѾAP`*c#ֻ>#3 T*b^Qus1 jEBL0[XVY_۠tp/茑!>AOM~%򅴼 iyR5 D5h{8B.jf|w/d;O 8`274tv?44:;x<H$ITJs\רsneKag/`n n`RP+Iۇ8z ;hT674r\{em.:#S?YOӌ˫K犄4Z}m}SyEA8s0Q  ;V@Mœ2g_s/3鮜2a;r ٹ4@eMKYݼHNAEMҚ+< F\/,%:HmX@x<  @t\&?o_>}醭qO?:1!.ʾ}_/gOkߓ6n/Iȵ-:x1,W*7kjyhX㣃½<\U 'u-yx<ج79IRI bboB#5a# ([^aeYUCHG'[UlG@ھ'"mCU53 ewQw9=gCfLN~ؙS6h`H|GdRoPF K|t9ctr:yA)ã'G?+`˞Y= z`ul ;29v*fdW *.g^mX,m6If}X,)^SSaxj>}h,Iyda]fLNv?Fؤ9})[) ٺ,$tl=gC%,f}ieVg{.Έ3mHl;b"?nؐ;`!ջ 4̚lcymӍr-w^{8@A#bҘˇP"4 @3H@m1MZA(؞TPT*,:SrzD"H}//!g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8Bs݁{x|>a`F`ZEYV'6R MaME$0 MY-cvtB`F$ B@}$I@ 0 i-;T*Z2 ǓdVU*:ȂnAH$;X,&Iw@.wA$Iz9^s)Ǜxp|@΂1P#!΋ FF0'p!d@||zƵlsw?}t{uw^ݹxEe}K۲}#'.\Iރh4kyrD+YY}M\*,nc/?`a/{wcLr7mq4Z^&)lݖ⸘0Owu#8=+ߖ+^{=]=r:S)3 |RV̾zbٶv^{y^muڸA1amkߙ;uC|3k.Qa--/{{jJ%qQ!5 ?&]Hk,~nV.|-9x"4[klHmuތĄ[~zȉG}]?~Zů>5)-s\x/815:Caqy&*0a3&'}z3$>"eKrL$?pb1j3j؀FV`\J_6Ȥ:6zxP()KL*|=omuf %..f^.@& ~td۪Ht" mB t zkmMa>j˵Eox<4o9-s nG@2E tщ>v'>/ +4nġat aZw0 0ԤzVVgpsU|<2 NjF=\??yt޺voS~B\4M}/M`Ic5Zd^_~YمzqѼBmӄ)B-fkS͆zS#-t*DE{_{qY aA*ؤ) huF^0=-(O˗|g5Elͮt,X7FTU7 YO3 5Yœ'y5xӎ "5[q pB=UnxeGN_ⅭEZKOͲܬ9kl??;|bρ3^S&$qāl͖&acX)i!A>ox.~^p`/eZFE.7yWx[Ng>6C;OļYc>zK<2~[ R!koζ/diu?>>%Cc;tfogLKoo6nT×H9+i׷=љ&9etYmH%gM1[nd#Az6V{[EpS.ʢƷUaT7zyO˘1aȘIUK^Q='[aN4}!QSRQ/ W^߸yӮB&~_;ϳ&,w a[.'׼Ԝ@/#'..5zRi<計q#cO]^pwe {tscD N3ִ/]+P'wn}!S*dlEBD̎y-]N?:oD,X/^l!מI[{ǖ|~E=1V'0ۃ("hXJPt:CyUT*Q*bT*i}ky~En;%b=r*uЁ:P.Tԯxm^UTd|~_n\+Wo7꒺s_W )w J,оpDBk JUhބ^]]{kS.W5APpN  k@oiˣF " \\FMxҪBwBJ|`߄$//LssUyy.zx {=qU+hsVR?RCbm}Pwsl/OWvxE<0xƔ䨈`vkj__9DQQFX쬯ME d{;S*ySi#{0B(/$;|BbZ[ZZoς(aBz81 0j:8יL&)L$z=7 #(N{ P,- EQM\ !ԋhi`Y$rNbwH$AP~>wl6[,a3Bil2w=  HԋC$I »C;AL F0Bq#!8BF!`#g0B3!` F0BqoP!>|>|LB+1=AXV`FpOHR x<7>J$i`08e̎nS(B@ EG@ DaBᴖB*ZVLɋd2*J H7| $ AqI,v) A7dlm&N`>B嬳` F{0B(n|XSr #b` =aH^%BO8嚐", :. TME"B:cˮc{;ޥ'ȩ"hpH~a+C7ju/NDx:oơCbfk "vQ;G#?ݸٹ~'ϦMm-B78<9jX+YO,|csgO{E' D ̎'`Ό1~tLJuZR"9Cj\NR!B%4jI1I1/<=].(,_Ip!}Gq6->nWXSF JDJQ M:T 7#gK+W칹 . V0(&ܶmq?s([mTYU~N]xϾXtThWЃa'.ڿJQS$:e8sx].jZrF|!O\[#3`{*Bv`W{A@NA]{ݱW$baltxi'_{zdoڗ8(l6Od뎼ܻv=@j68qw/oE}nKvnq\LhF|{NxEF}O1zd<~~?Dy墯ڛ<,:f@'_lyxzRDhEB|_Uԯf;yټyCzou?Ӫ/~K)L_mS{5)3"9/ |~Ƕgz#}ηGD,jnk"]T I(\<]kS*lXOxYj%Ok]꿂Zćk[SϿrFћ+ 8g/f\*\W*IRFTT1L/Y^hnaa.۞6 2Xnm(+90vƧ$N;ޟX,b{q|Bwϫեߐ qżrT,Ws̟xd=g69Ӻ ZH$;k [8ylšI}إn~xBٖŷ Ł"(O˗|g5Elͮ9.5[Ι:btR~{tīc BoAϿںy}xGGc~}fѤ?/4m([j& jm' 1O/~Z~ݏąOItaau2 Cɰ_mw_Iu*8w_90FX$W3s`3/<5v`[?rp`dЄH zHد#+C fae! ~\6D -}ť{|\S JB}}ܒlMP4K,U lZxW{ltr2afycI˸ɚMˏɰ_]ܜC~N' 2phBH$ܾdNaUxBEkܻY O_fs+yz/Q2_7U?bH `ӭ=FFph߲gfFA)NI#I0f@wsUM4, (',^&[/5ju4A(#d2X,>EcOL&^wJ8=* X,VTNi #d2Be2`w^ Xbw/B ǟݎU. Uq6|/M.eU4I54iÖ\š/fo+qPw9~[^wMӦ3XbB >AS]ЬыE)C*2حBcC_T~@P;ì k,(o6[^jgT;GrF5V>CG]JvQxcz$ \9~:M3[:~]:aL*fnؖIJD*% 06yH:r}b!$Ήfn!pF'M󗲪jHa _ۆ~ρ3MUX\${.Ƀ]Κ1)v8=lD)I|9+B@(TTթ2T2:)z㉳W' !&Y*N k=ڷrsUe^Ϸ?_$bQUa#ԏ9'kjeuHT354۪W4>cfܕIctO̲e=D!X:=AU4Z:0P\Vpʵ[GNG?6}RDՙ.ZbMfШhcA%gD7}_)R_mxwjVx{CM7,*<4MO9y%q1[U(L}bZVoh6[,Jbm-ihoܖE`0)ҤE1zc 8t ûuYUөA^Y'$BwEEEkuN\F}fڄ&gOJNV4̝KUJJ5i.?m#K+W칹=:,/(*]d )(/|fFZmd?|7g:RB|q@QeR1CۍH <\ GYW(JGςs69._{U4x7eOgNL\2"{ؤv&KF?AvO@Ƶ<8r hjWΙ>yƲ' ]Tȥ'p)㇉E"h7Ͱ5PKʪ:I[]hZ'Ph$NI|'M3M2䡩uM_W2{ )CV}m@dF/ ?_ϫq1.*E](ח/rbjmuDDǍ32ƌ$b}l/8z]HdV`ZQY.d^/tW=u40LDZa"_9s,33vO?XV646+dbQs+^h[8r*=8Ч=&$-Ҳj/:ݝj(j%{j8cȞ]lJ+j|݁ahi '6XꟜ4V]ৗ̸}B^_X\u;jnE46i]JSYw!C@ ٹŞjw#$(D{Fee؏0. YSGu}WBNoS[h̞yM!zq-yE20%)d23[g.eMKo\TSgs"8Л◕].Itwsޘ0("*"zsG'DB {;a~ye@ꢜisWJ}{ ꊛ 3osJƑĸ۫<fH*zF?rhlvnxVVFIլOH$Hv!o9"ǖD.=.Z嫹O/VRVïGlf zЄ{cB>b+폏o;;j~=$.||J bw$=NbKilҎ=D,Wf iت=D:&~bھ&;c'98#X$twsQ*dBE5.bf._:ę,"l<{zıC ҶOFohԔTԋE$I&I)*j֤kȠ!qrD(OIoh7LZ1,׫Gx?/BL'k6Es\.:v)ɶ U5_f"c#2rج1ht&H  :">#(xgD d>#2_ !` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` FpW1 uB㱀U4MsPx,`wb l6;FpWL&_0EQ!dZl#z8B>`Xz`wOss3 #3L)MEכL&H$ I$!z04M斖,FpOPe0 Ap !8BF!`#g0B3!` F0Bq#!8BF!`#g0B3żN*N0Yp}Sg3sg#=E_N; Z[c, \r?ۑჷk?}/N8-o:TRQ. ?.[֦NQqEӝ4V(dR+n{tt+*Fui+ Ͽ0wtB./;»M40}yEUE)[{RܙcY|)-3 /_訐[..\v[Tϲ:!8r\uMo@< / ^x!Mn0LW(]D8!84M:{ntyYcRgy{ϙL-m6X BE u!8:3' ۱LqUowaxͫvwO?X`B^hF{ْ]ND)[xzG$ 5WezNSG`BhVm T*JD3D"!rRn+<J!m*2/.MBs.iu&Ԣ7l:}چ JI >v:)}@{s&9qLWمI)qMmJmu$|=gOKGvIC^,=y6+5+'vB>}RZIY]'+k^}!cG'7n)Gm \P滪U}M0,-=|&l{uj|xNQTThz=Exg]}g.^}@?&z{ؿ0́~;rE$xa_;ӯ;|1 ;Q*F0TT޵[uM}aQEҰA<^k2r'F#A{s"!P(J|d;Bq#!8BF!`#g0B3!` F0Bq#!8BF!`#g0B3!` F0BqO󾔫o-r=S#2[jI nPZoZҊZty\w {~qQϙitMnL!_?~)%$A 4!t+-޶^o_h2د iVBP(pzgz& P+p®FWȥUctXu/实7ktͻN66ibFZhؼ|R_SܜY;'Dp/_X;?`%oSf+Ixw/kѐWtASO~1lI#K[8>rɳ Ш+i;+M~qEN~23gӽw_[Up\fJR][RʤwW.Jo_/_"7jw5<_o()Z[{ hؼ=g!/.\v[Tϲ:Zj O빥'eW/ V*d5I>k(\]U\ZM@/'kږvҸV_!qS[E(M Cmfmڼԇwa7ҳK?7[ ~~lK '0ZFE.7yW~/8z`w4諟:17"?Gsצ XNĴfA#o͖Ct3ag74jJ*"a`S\eN|umF0OL5(0j ]qS'V\Z]>t qy15c#b|>#<aZ)Z]ߖah6{H$H$b  1 0d2ZV(J$/rF0BmIR x<7)"Ia CWbFw+pAD"\.7L4Md2g0#tB0H$ a1V$ a EW2]G>N xyyQe4o}g5}@*ZVLxܯUɬ5 IDAT{m6)rJAH$ޑX,&Il[D";;bX$9c"$I/t-K>#g'ZSςj{3l{w= g"Hg'F薾5= O0}/Di9!(`y=o +u#n( "}l/]% b#jfMe_h2ّJӐ$i;B+Nm).lR;$e)|LfX%w0yl}%f[eVgkhi0z[^̜2[IҐ'B8gRڒcG o~͖$?dde|-Y5h`T*)2̉tzD"__V^~oW^ד?}imqSK*j.JXwgӳʽU&g[̖N_/q=}+Xԉ3YMZC⠰EBhGN\. bGm3?2g;vN\tsϲ{B&L7,-=bڍڨPS\Ul- a{Ng)(|5Irpĕ*J6fdlTx@m OꌉqaF7vb֥b`LRLTD`Ƀ9a ێˑUdJD Ҳ*0LU ?tʘD_FnBb~([xBFumܙcUWJQmyϙ{ΰIC:(.\v[Tϲ:_X)#3&;xwxo/7ذ`Cvn}V.J߮ج瓻鍋Lh:kʈfݦ]|ް!m{mll<64nö/>>ݾNEe''Ǹ{]!HbXp%虬Yz]41߫O~tNʈn$~`S삍ێDzr_nNXV̒A̞ϿEGmg FkH_AY7-xڈ#`Ǟk]ޮ":8)p\ OL A^rmH*b̼&Ktw$vYc )ё9in~ً#8'dȠP>u15;6?~Эu+kS.FExR![嶢Ȱ#'SGN .*Ū/Il;AFm74|pI%m??-_݋?|ū¦fmYUs'{\--(oRoDI:x!A<mrJ\\L6r>sN/;NQapZmX= ~Y;;)ǧ ?6amǢ J&9ώ2 756irZŞ\GvǬo:YR!{}"{{BM \,z{G v(y[.`2HĢro/״eg_RX\Y֊G+nFEvi}: `!qoQ`H/*T\ߠǿzkc,_hD2)G &v$ B 5;dNKFv錉C ~^zitO<,goQ4{?vΉ~#Dzomu-+3mde^o4R\:fdciG[ma`T+o=']]&JV0ϧ jtیN;i=cj1W4$FwQJI5U YQiuu"!_l$Қ O۪V/~1:dGx{{^xmsH<<hll;>2}3mnz#R !TE)" Վx~z=xRߧF*''JK7LA)-)WPҍrL~lLV)ݮWaznj#34|d&Mqa6? ]WCh4cxkyz5%'jLdb4S.O8vŪꆐnJpZh' Hޱt`7oTzN N}l23?ZzU$)%9_4B!058{dA*cB|*E]}#0׾`43g]h2;swݦI+1>bk^}i`-L&/3UQ^Q}%$!:X*adEe Go۲)j6"Bmߙ7Oh _xD +?fU[zpX/Z *`3lpBiEkxԌ\&}m˦k7>~s cU,uSS{{JPg\8U %L"\ZZ3-ozċ t>գ{#z-r3e1qMWlqo-^RZ*bCDD77rÄIQ4j7_G׈Mm&^XM㱓XM]CUh_Tk l9w`U!ҳJ?;omJQIŊ{;"+FOkф]B.]E .@Z_7mHF#bdĎ R^oOEHPZǽɩB+7hub{rsQ>6!ٚfvסtsn!eU^t#k ^,z넘05V-"'' V>/"4dfK*Q/]}hd񭴌Kn<<="adxWa17[#.JƦۨg>1kJYyw?m u/ueJd>(6'D^/KJ BNZ^XTQhq9vv 4jq7?n~5q>z?>rsk6hek/WTŒc½gwШjChЧ٪O(ɔIog^v ;=s5^[V^-vmr9OӨSs\fV~?d“٦1sFJo08>9O֬!^-WTSu*'JoDL0|M$: F3-24׳YdhnjoMeٖfCEA>Oi~xbx-VX#28v 9WG Cu KmTȘ1Ó{D`Qi {bY<Bln.;L塎V%"4) lkp*-|O7ȡ(s "n;]i^AYB r$y%wqK4*%=fd:epֳ![26#^o4on]]]>ǮյUFcZp+Pzᩖ/95oG|T&p%Bg;;ޚUWȈ!ؾxcg}Cjb2HP,˚LV2$aza:z{ոPAIEdG `0t#]6!Xm^F#˲H9:X3c9Jsg`$;>qu_RQΑ$Y]]|G;竫e2"-$I}}JX,Ǒ״sbx +B}}ԡr9/#M%%%^^^Euб3L B.T*tA0 #HĻ`3ɺlXAkX J`0[~-jF"TUUQVr9IA؉ V8NRwn@#V?JA$I4}2c$Xi#raL&;>f t!Iyb)vEBa0#`F!B!!C0B9 `r !0Ba8ޠp$Is}Vx ih'h4=A,q\f>i+T*e285Gh43H$\~G9 5P((J.'n;YKNU9 <<>>߹0>>> oiBBRǡST*Y휳boG~!ΰܡNhf{=C0BMh&{Cӭ5bmT*6wYR#DU8wBK덉CpJyd2VKZ0BMw綵`&c:g_$Id2{ ]י_Q!^tξĊݶf !t|=۽{Fҟ6]sUM_ZYkڝ9W^N:ewmybb6cBIgD鴬zZiM9o"rqLT~䃹 m6`|lS^3iǞKE֔#gLݖOB!law8;vts/s}ַOO|f.u_Xy4H/M.*X]WLpW_͛߷[SJ0ZWRV檑ˤTXTvع>.cF Mf˖],`/w`YѳiIGI%Р=x:3@C ׬j竦>oW'!:h㬋8TG vɴʨ0 pw3=Y׫Ȕ>Lyil_->~qѼǬ;n =,I!ol[|xѐ>sүȤQAI;Sg/@!jƣ)̙55 ?'ƨT pw4KSlWM#$r4t,D|L&31x45ѱCEw7 q~kV߶mQޑ7jn ;}\+-=24+7穾>]5u)\ro,~Xqؠ4MnqQg1etV7{]}͇;ƺz]p߬ùkc+j6HMJnsWOv;͏^7]"agZʸ t:ãR7A&-3^{ ݿWĠ>ѧso׋O>LQ7VZpXw7g/Rd;z~ܨ$Nөho6-;/LZ[b|ӗ_wvѨ<\mW(J4$IVی@V6hE` ݼ8{'?d`Oظm>B7WM{ح }1OKgr_񨨬I;/cz]9=~%y{+rhl4v|⸡ C:iΕc'/؆K {LJ4evlV\uK+[TDEyF WK=tvH}EwJVQ35~oQ Wl5et""*7A>|!+ G튩g# u h 0:9!!6**NɾBs/6>sz¢6'~~B|~'ׂUuuZ8ڽUĆ~/=ȚͶX ֨Λ~GE C{{ht:\+In^@QdL Ň[t$Ic{Y}}2smvJ۔ⳙo,f^S;>$ 7Wk0n0PX\;O+%oEU4o,%j FGKVq
Aeux2H$LTߕW+681d/׌-5M54NLf5{sАn{6,YyZ|{M'1o4vP(8yŽ}x_DzܰzdJ5e 5.4M?5!+lwh2T%U ɦV_-oJ*]4g*Zm]juW ʟ`䙬P__o3W&>4+k < LRS%eE g}KVYWqrS<3e]v _JQW̵'`4363 Cdv|kwlǮ!X3vq t8Hc'3s6ψq<<| FkЋO[߲%U^!6D NtsX,7LhMESЬz{f(ku*>-<Ǯ!llw68詋=cBr ZϟWPf\ꤞ[r{AQȔ>k/WTŒc½eGm~xͦ~{D r~(,&~f(|4U}&#wAkPx3:z"Bb|dYy͇/=;޺BӀ>1ֈ:N{Cp|LxP/EQߞ-yyN;p蠦1bH3d`O9BêrıCGDE4eǞԓW<ԱjAx14EmNe=9CZ{bNARBm++(tWx!By ψҟ6JIm'NܼZ!n`c;FVuZI|\][h4{ OpyQvtIK!NK!Bg;CEF |g;; k51L$IZqw(eM&S+H0}z=0vzjX F q t¤"w#m`0:؉.u,˶Ef/FeH$ɜ CvαIC0BMHtT8κ֯d)(|Hy2^ u^RY,kڹYGNPr֗钒///:ؙLJB!mfa @*t: H$]0d݂lX, 5,AJ`0-?5#H(Rr$I ynArR;o@bSAAA$MwQ/8N 8FNV9.d2̾. ZF4R%xv!`F!B!!C0B9 `r !0Ba0#`F!ME4-ބngI8A,r3![B (yh wǐ$)N]",0vZH$ `EE$0RaAjKQ(,*J.PT*Yޅq h& D$>a[p[ns~ijHC]ւyͰDPC0 <σo <σ6&`dGx:!WwgCx^xٻI$MfmT4EI$]to1U5k_OM\qw|lDqQu$% h3Rޥ˅NMܲjRzݲO>U ICg]~fN$y`=O>t6=_ԋ)#=P^/[$ ݻg|BLyɱɃnE3[`laY(پ$r lC!c"Ŕyz|}*НkgX~b! b{PXcQ-n/)tseR֎=tO^o ؿOnϡW_ۿwK< VhXV-e`ܩK< lwں#'/@P{j(37OyWl|/|v%6 K9^.@euڍ2.ar(qKe$Ć{{97 2Woؽ، oU `n4M);NoGkkyYNG1̂ H$LYyFT\k-*.pɪ~I?!}/d̙ѻs ߭ytȈ[HR7?{nbȐ[͘2&Rw?mm!AO.|ŧ߬yOSi) sp۱µJ)n֘r?zgʐ/NըeUPYU-~v ;ౌQZ^)J>lyfUמܲ_߶H}C˕,Y08 V`kq,x/ZKV~ͯ~nҟ674د6 sU9|PJ*}I3(fsѨK*V>(ZZY]b;d^*CR ;/HN!}׉Qf\Jj%f z'0 %U @_5uAoWܠdA2t[3>]\pkf~ŪWNjхBFםe%_Pr6[-0b3f$Lio78>*9aĕkv +ȹi4fEe!^b٬R\$Fo0e^ 0ԂM=GjǿC`߿YB-ݩzjR&MMvƎLz`D)j? n.JPʥ="(" I(jiV-"''jQ DzܥE A$mTժ!б4/,TGI6kj KeRW -,[QYkaٹn޲ʺɽ<=\̬Վ>vSe}{ZSzuӭk]7huÿ(ཏn /j+{`t63oh;jJy^ 97[X8X\XӦЁ[lp߫s'ر[˚yߚc{)( xoѳ#s K[uƣl?]EU]dI F$^lf⷟ (t B*28RUkOɤN}c!B]V{C`o4-$I;xZ=:nXn~Ѷ=ˏ=#4v5;.^._q0QGwޜ(0f+3r̨Ap%*MSf¥)9?:]Rψ[j󗚆|ϞN Fef A Z\R^QYCwc׵7tO]r蹧?HDDX༰@d0*616䙙 ŞMr.dۏԸcXl(DG|奙nO[B&TT=4z ;|YNxp`G.P vVfL&oYkV-8NPUZ\~Ӟ2Tk0t-IP\Z{:={ͺ3 yc?_ٷk(qܗ6"$[^n4#ԌԴˡ^:a(<<2I. -GU"­rJSG/?Iāc4-6:ܺz]vɷ7z婿!ϲ`?=џKPd&-iCZP .4L1 S[[?I u*=g̈A?A#(*2H&Ojy$+sV4-4oyzN7tҸa͜2jʜ7Ί f׿LtߺhBLXTdȀ%lY *6*t#mײX,6IRՂWoo{gؾ+±SOL>yRlTp˩i9:cUm Hr=+u瑰 n^ Fǚa5oǧ=lдT<ԣ e?{FɅGw-4oтY_.[?I!A9$ ك#XS,V"abJ8yŧoyQg ~j jCS>7o_-yKI7T 21kGG[|d01%1ǟdz1n9!A~;v_|Y'=4 eHoz2#6n?EjuyMlqچ’jT!^=zu&zy~~ؤKG(VWDTx=0 /j+;Ѐ%̵.~w{Dۯ<α\زG2`8V W:8ں6:of& ~ql3z9!g|1;۟ݜ9ggi]<}2-;JZ)6ah޾́c;۫P(JQq¾'\5yEPS`(:|h_o/lklG"k 7~x\&Hǡ/Ewdht:CVN %;iR[3a_9~vñ ,Y/5ep tFB4;ѥd2|-^wuq{چyGDB" mdx"!N &$g&DMXņ`X nAJQ;ቄ0 ˲؅h4,Rȉ IDAT ! HtXAw8)ϱGmm%HU*8y˅<ϋ K;# LL*t: H$8+b6- !Hx7FyAI4M5!.$yB2B9 `r !0Ba0#`F!B!!C0B9 `r !0Ba0#`F!B!!C0B9 `r !0Ba0#`F!B!!C0B9 `r !0Ba4MSEӴ  Y8eYGey?OW+*OخJ @NO? U;n_D~~~CCݷP((J$ݥ 9g8[g㺔J}@ۨSeA\6"˲ ZمB/4`6c2σwt@ȏ69,qsoe'IÇ yycQa5j2[ˏ^ɤXtd_“aG&w> b _VG|v wi܃/7&M_.wB$E9W J̿Z&XJ_/onm |ي$x{7ؕ"1LŢ:p.Vol5@_GÉ\ؙfuPy +rၗ^oufFL&M0T"uA]5Omqb]Mj pxhмqS1.]rP$ 쭾!+u0Hia[IMIM˱.G!8}bl3Iߕ[2d`oqå5? ~rb'~˄_S>Sዛ p @~^KsQ6D8k|@Dx {h4])({%1ɸy̚s3Rtͺ;3.& P\!^&x~5/OGpx`?ax_x~(\)Is{vN_TRf +ԭFЁ~$FZXV3g||K!z>ii? h@S:MP0$@ԛ!f)@Tka5@N(xr͇g6B^ft!Jr*u%16Ɍ²U|=jj*="'Oݧӳ<];.~‚  ̙=g\ZlA" ,:gn֥|q)"rr5Zz  ?rEɾ' fX~uctȩB744ks2L=K,Ѵ'ῇz]J:].$lu!S=FcZ0N@'/;ť#g,uWg|s[ߕfAw?U\ 6L$IRTߡ;drt)QUtḾZo!8A8(Za=Of5)a]s@n&ڭ_eǂ{Fu,C|fgn Ґs-$INht:L&ú0j8HdCCD"qtq$ɿĕ7hZuaρŐþ[B-LNv&2L*i҆}w-< T{*IDATx{ T?(H5 v-]}*]Sڶ݊hItSaK)EEwtq)2ĸWL9?3?m۷v̙9^9s>MD:ttt<~xCCEQ+VDi}iӦ7ASSs4Ms\SSo짟~Ųٳ !}}]O>JJJJJJOnnnD---/_s玅Ezzi6lpiYW[XX::[PPPʚ;w͛7̙3hР!ClDbŊwZXX,X_~4MGx+V|mmm7o ill|Gy%%%ssswp8ӦM;r۷?vׇdˋB&Np߿/M]paժUCeK:;;K$Yٳ,:::99D&0a©SN>=tP?u][[o":;;;wnĉ eeeo]o߾ |~kkk 0>>>>>><ڽzDӧ_t ;vjbbP(x񢃃L",--uwwoii!$&&p8޽{ɽvzja!cǎ4ik!gϞUWWŧȻQս{ Bauu5!p֬Y <Bjjj!ʁ[BB,b:={ !E9;;988+**B TQQ0 0^;vvnܸall,{(jE>}СCf(((hii ¦&Ddɒ={^~c߿f" 哒tuu/_1sL33GFFŽs8*5yd> 6%%\]]UUU޽[XXXPPpIH0wŋ;p={̚5Kց|L]e֭[ss{lmmՇ:\OOϱcΝ;-0o<{{{r)3f {p8ǎhʕ+7n駟ddbbtz޿}􉈈`44mڴnݺ G?'##b# E"E"QBB²eRSS !\.;--ϗH$V?DӴOrrUΜ9m6Bw@UUUeiihkk{3fxxxEG!݃ݻw̙͛7꾣>"VZE)))9uꔢb\\իW 'ΝMD deeB455) ?y$!̌-˦/iӦxIII666QQQgϞLMMݻwR```sssgƓ3}5kddd|ئ8D&9;0WVTT֭[nݬGK6rA ɓ'B '=fϞ-yfϞ=eZ6?ݻ0ӧ=<<^$~׷j޼y%Mnnn엛w'%%40 ;"g{ $0ov|++#Fݹsgȑ#FxbYY~'~,666`ĈO~CCBB֭[uVyyΌŋoߎwss[f+B-;!Դy˖--*--]xMAA/Bٳ'Cߒ bnnkދ\߾}Ң|÷o߮})=,,L^^ѣ<OGG5777'''"""''rʔ)?>x`gOϙ3GZ)++BSoa^jdd4zhOwYظɓ'Ѷ>EEE tY{mmm cAAAG9r;޽{BUtttrrݻy<^'}tM~~{>i$PHtYYY~~~QQQ./_211/_>~8''틟l===V|bxƍ6mjkk{MMM$KJJBBB,,,]vL[[*<<<22ڵkB3#߾}#""6l@Ӵ@ Vkk+0ҦFZ~~z@@ooo~#G >EQ۷o2eʖ-[Ə9w\OOG/CCCUTT֮]rsseR Vyy9EQ!!!B끁7 u>>|;_ɗ# !ڄk׮X( MMMiM1<;0O 7K|~JJʜ9s ݻ"355eNqqq!O4믿>~̛bcc''00ݻϟ'=z4<<ѣG[u/`wuXܫW/eecǎ,322RWWr}:u+LF}\l]Qt.WPP`bb|ҥDKK˗ڵaY~͗.]*++知}Ν[LGGGK+++b~cbbbbb>b׵MMMUUUBŋ***uuu 3 m۶`ݻwBhشi;l1 SQQاOD[=zh_>55cDzKh0+Z-_|qU---BHvvĉmmm/\{n8dϞ=G<oƍO& >W?aׯ_Ϙ1:))iϞ=322?9n8uuudKKKZZٳg\RQQ.\dۧNz]UNMM---MNNn 9uꔕgNNbSPPoJJJ*++KKK_ϥD"TWWmڴ3kguRUUeggO---k/_~73VZ%!??~,?!yyjkk؄}óa+`gg7a„0vzKKKpp:9ȑ#G۷o…eeeg0JJJ*** bٳFFFo-@tPPՍ7wڵtRY߈,,,*++|>醆=z8wMӍnvvv7o!DKKrҥһB(++_p}ʕ++** :ԣGaÆ";;{РA\.066ə={ݻ7l؀I ennξr>uvСnݺBʞ?ڡ,e۷_|cjjq*++gee 8أGTSSSBY>+rrrŭ#. s(j:{&&&nܸDXAAqqqxgԩMMMkmmurrrss(&HVX!p Y}]n [|[|xƌK2 f'IIIoNJJZhQeeeffAtuuuuuN>p8ǎȸwޙ3g6oN2{(8p`߾};-KUUŋ.\hry|{{[nM6# E"E"QBB²eRSS !\.;--҉ TUU !.]*))_ z[z@ صkٳ-Z_UTTϝ;'HpBTTTSSSlr5ktݽ R/NOO1cNjZ٘?E__%%%DEE={355u޽JJJ5#0nj.;<44Ȉ]ZQQ+BH}}L.*322tttOf͚罹_$&&*(( 2a}xwvС'Nu7 MD )kjjR~IBtn^X6A'^tIEEwEihhtN]EQ~ƍTUUmٲ%::ԄB3ٳg'Onmm-))ٵkW'|^7n\ss Ν;וMqncc#F?߹sСC!!!֭SSS[nn///X$%''+((hkk^zd /^ܾ}o߾5k̟?_"|l3x<--[fddܹ妧B S]]]TT }||߿ߙYYY!ӧ.0 [=>oeeEYlW\) յ .|/>A}||vuXgϞ=zٳА=Zjƍٷ㓒VZ7ovN̟b``пKy.yOظɓ'Ѷ>EEE kkk0  Em߾}ʔ)[l?~|ppܹs===;-4M]VMMMKK+;;ټrssْgO+++444 ==N>}Æ )))MMMϟ쏣rSPs:$cǎׯ466vLnz嫷y? A,o߾x6liZ XZZwXaCCCo(ww Tѣ\VMo߾+WK5BĄgdd<{lر~~~FFF>4hPfffnnng}^3~۷o ¬ &ݺP6am۶gdd|WQ|>o~|>?%%eΜ9 [QQ㙚2 SWWWWWGӃ~ӧgLFQڵk僂n߾㓒BQsj øBBCCڊ'M_f;;Xi޽{󄐣G=zH&*))cƌ\d {qwgcd(++k…H$sbqPPІ BCC>|~txvd''0`:xrB-;!׵MMMUUUBŋ***uuuov(1 m۶`ݻwBhشiyTYf=zիWݻ.]b?Yuߗ0}i?ÓU]@NN@MMmرp'ճgO 3fݻ֭[mmm&&&%%%2|}9җl>%WZ{[ζljj ah֭!DKKjkkBD"QMM z/;]zR}^EKAalllΞ=+1t-_!!!Nyp8N <{LSSsɒ%7ndkϟ?U7TVV:;;RZ@AAAH$iiiaO"""***^:uGq8XiVO?EEE%..V#ܸqcBE(驩~MX4M{zzܹsb$'' jjjqR(l*ܹsP;;.;B Mӛ7o^zu=իW3fx}{7!灁8.UwڵK(Bbݻ7tG[fii>`;wJ$=zY[[=zJJJcx<[ biWWW7,,lĉ#F8qe.LLL8pU،M?|=-Z~/?~ɉͶ'0fcƌ)**>|8rܸqogذajjj+WիWqqӋ7nܨi:4  HIIa_4ֺ|-;!óa+`gg7a„0vzKKKppؒEoҡ널'O^zUOGo߾ ͟? www%%oooX|Ykkk##i:((HSSƍ^^^ֻvZt)ÑaNӴH$zsD")BQQqѢEz5jԥK͛w;99M4ޝwwwwqqy^ai/"ĉ)qZZZSGt.\vʕ++** :ԣGaÆ";;{РA\.066ə={ݻ7l@Q<]BQԶm'OС$M;w!Cߺ^zekk;k,>ҥ .888|fffF)ںu+.p|ss#GDGGظr8pWW`JJٗgYYYoU ݺoEEEʕ+؅ :tk>_NNӓ}4yKK !$11Dnnn^z50`ɄUUՁر> 8glLUUUNNNnnnEEśkۋD"W{?~m !BP^^>))IWWw3g433KMM?~|ddd\\ܛ->Ñ^QF:1bÑ dgϞY*MӁ֝;w6mΊ0LyyygB|~"h;wrŋKJJ455\w|||aat$6;.HII͛g0`@nnW_}S[[i cBpʔ)oߎӧOvv6;zd„ [n-..-//֋/RRRi;[hΖH$\SS'OBؒ:::Y !׮]{ꕕUaaȑ#;aaв1 $ !bxŊ/_&7nڵ-!O>}wIa|+++BȲerJǝ;w333UUUSSS?A<;immupp 0 SYYYTTTTTTYY5 ̙#SYYYGG0% 333{{{>_ZZq… K֭;ŋO>5bۍa~Z[[1446555dffbGGǔb!r'O\[[~ǿv~(mmmuuukkk0LIIɛO'++k…H$sbqPPІ BCC>|~tx6'Ntׯ322ƌsN s;;;u۷o?}iٳg:::WH$H$^^^ EQgfG$$$,Ztܹqqq}u/ZڹQIENDB`dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_TW/fig/main.png000077500000000000000000002507051473346337000300530ustar00rootroot00000000000000PNG  IHDR8ڣ pHYs+ IDATxw@o*n]W]VZkU{׉h8@Ņ ȒHȼqb  ޽{y9{!B1&!B->>n: B!T YB!Ø!B;YB!Ø!B;YB!c5RT*jPaj.fyB$ޚd|>o TR)JrZ&IAHh4p8|>b:O=fUT"H&) {ht:fs\333&7++K.Wl_=Zyc)i4$iffVNCUCH@z$RT*D"BEtFr1E2kGH$f04f@Zfff:򬬬 /bi."ӧU$$ $HT*e[bPiV$3333339fXNgXbQeR.gggW}$kzX,ƀ}rX,6t-*H.酑Ƭ"H$  c0*deeoUA޽3t-*NTʐH$Jе #"TlWsܜJUjN$XCעR_\LcϚCi4ZUqR%ؔ"=P !}s;+!")2d2=>(Nd'A8$YPP`ZT'wCH_1\L#=|Ikp8/F(QP {XJeUJ I1fEzWC/bnj.4C5V앩, QrzWB0tB_c"Gz6]]eoސr9Vӹ\`EBBŊ;zӌyR /,$B8lˋ8\//TN[fh۾3YlƄ֖fzL^QLF{MKVMbj hgx;<\$ٮk@XakPv͚'"{mIcr/a۲Y<+HKOұuv}s@KMܹ`oR*!^T6fhn]׼+]bE<cpMaЫqp+-VŹ|D3uSۯ!DRwyݼ+wЩmIcTN<{"7k1gj^Do{WV/lokP(#_Ş74ٛӆXe=[(U8lVٹލ 75uBz&dX ?!ȷ7[NpND9"3:y^jQd9w?=}n>'q9Oh,ShjO#~V)}雚?4p_.- NdZZs9ige5+68{Nxw@MWo>VVl6unX_oP)TMi?Scn j8b[K595}\WW;[k*e%Y6'¢O cWEً۫=_GhSǝS s韥|]7>;[S歧Wqzѩm#Çn)ijg/U3Mf1gL`vV%/ ̬\&(l-̄&ԟ.v,w? hߴm|uyOwWGwWBS?8mmenj"|_EŶhf6m?jkm6om{Ϯ~ :mоǗ/hcm#N/\A~ӋLL͍ۋ L+BcCyALDž6:nˮFӳݰ{vL~t[kWzM 06<~/?NvuqRLa+F p.=/_ܸ#WÔq`oqt_ssSOwGZy\|菪ƦeW\|aYdZ*fenOn&ЙvwI+6g&9bPaO22m+Y!9%ck@'&Sj5LikNyE5Oe>;oPVEMuzavVEɗ(J;28[gZNZhjݞ]ZYZo+˶4׫CأS̎v gԌvvw2R˗X[Yy'r>ً^R۫ss<i^Gƌ(Ə}T˷pVRG;w{/,U%PU+A|uDNت*&$&;9Μ<롽da&$I2!)KFV *X[֭a}˶jy=qdjbt !_yNH|O\AH{taYsrEѱ:EfF5&RT٬"3drN1Ji,<%073 {y̍1úOLs_KsFOI|X 4&7s+LDW eZFV}:7a^ڰ%sBU`vV"QχsQ2IjjЕƛw qHMت*6mc߽pUB8cꦍݸ -W$I7[&>͛Pxe U4ԡeN֯6})c4+4xqYƴzWMy C&co=NmԶEkvuz' +z5,m~>Efx*{ū7$˷p4o@Fu}o<*ve !N|@o˼bȣ]LTK}ytzfVNzfo$~ Ge~]f 4Ĥ9t 4X@O (bPjbJ[@ ߀5o@jzAgFmaa;iρJJ&wlo6ET oFP } {2G,]|[,MI-M?qc V-֩i;8y`V]Z:ڸgJw<ϓ4k\B3o ۯg?ϢXÿE1I3Y,6/^F}"_*߳6+n͟9⳹՟] ŸFQ/|>R*bn.ǀUR^8;y׶9iC53*5ΞFθY5Ǚ6a8 o}|^Oؚr8qu찞p@,~XĦʮ[A fycv"n c;go6l;6}Bw<tq@`L)sG ʠ-ݢٴm߿ԋgh<)pv 4p&kMԌQ:7ϗtZp^Psj% \'G;MJM!Cӄz [>|}˿Qr];X$IR{Ⱥv#t᳭^kOaIlmj@=G5t(bgQ[5t{u/Ps =pw˷5oRZ&W<')+ܜ τoƾuW-5ܲu/wlާgZSAP+ Wgf.N6V7x:U&LLqt_3M0RM Ǫp'͜<{jڻh4SJKM|65at?{ ;NNճW-5vvZP ,,GфO|ߢv݇=wl͉ |gN6r9o\fˆn2ĵBU榷WBqBHMe R4!!A(ZYY7ݻw|~9FVT*.!C^^^^эdwXUe?LN؎jzݤT1KN'q^/|$>p@<1\LҗxuAm-ڶnja.ph\ɡ馦lvM4b3aA0 $kMA *;Prk1\L#=Ǭ:hW$\R(JXX,b<Fu)j.鑞c~ BPp8gg";HicRT*U~h4gZTPpЇBp1EHi=6mbbK X@($YɰHV$)|Twk T_\Lc# BJhd2PX/KKR TFEώd!Z#"/tPhjj*HxV%P(,KzwŢhuԩkXzFH/AY!#"/F;rL&S,jU( bXXXpeĄ DcPP" U*\.7tEnF7^!0Ҙ|>p8DPr$;h4bx<@ r$ 9H$Ԧ PhյF,--bDRP(|#"TyaX\.Xc'Kc0,b7ZT* JEtq޺y2`wd+3B4̌KR\N$ ])^p8'l臑\L$=B!~B!2v"B!c1+B!2v"B!c1+B!2v"B!cXlj B!T,lgE!BcVB!dPSF!B"B!c1+B!2v7!B;lgE!BYB!vVB!dM NǦYrU@!}L&o]B!T=btHB! LŠ!7R}X*!BVB!dX `0 !eP @!B88B!2v vVTn Bz`;+B!2v"B!c1+B!2v"B!c1+B!2vLCW!4Ni.$IZ&IuA1+Bb24B_2ꮕ`jJeZW(J /-ht:bl1fEN,NO!/DT* U$%H$jf-J%P(e1+Bb2_!T:d2 JH$x_NSG@VT*33215*:!5=ܿyC33S\pB+B8 ZjH$x5<,7 m쎿O2ӭQ5, [$4oӢi~llp01B d SXLM]򥍸* Ȉb R3W_*ccS2sjhDwwg>[\!$ oƞxe_viӿ=pfC; M4߹{zD苒ij%qp O<Ȕ5M3_$*??( pN+C̪P(Sӳ\uRm͜٢YQxQs; oCx lyu,0!m 2ZJGryYr!f}.v]1˻&]l⟶X4QC/*Sm@xΕv}^[?2nD&ꥤgdL[)ty٬ 1332 MM8lIr3jJ۱^?ǏοGstH}{lG:il90zAAQ2J$Ib;k tz{M!fmk1?˲>n䧭s Xu\ڣSs.RvVޞ2jogcogf3\#_;"I_&翋I4OY2 nD= IDAT?onHxK.SN9<<ɓGd޸q#F[vm-H| V\ysssxex<ުU B8v׭[o>KKK͝2eJy<A_zuPPvL~ddvzLLLLLLݺu 7BO#J`ccd2JH$$XSSSM"ɤ7oԫWO;# L6mT Tp?";OaCw}W)%5cO%:߲KAG)y%M*48TeMoBk׺=Z&4u/{95u0* HXPvnޒyc3gs"$Ieӿ[e˺GO_pзA[P\۾VO*FM6{̘1LY-ZaÆ?~&MԲeKj޽{GFF\reĈP~Ƿic6=z興AP(3gRҥ NknԨQ?}N̚aXtiÆ 78q"&&&00o߾Uvѣ2?^(feeQN[xxxxxOWW.!33s޽?6l9bkJmѢvv#w}) z5c JbqPPPhhhTTTǎN]ĦM ʔҭ[7͛7Ϛ52eqsvuԩnnfaCĵ>Ed^|~}Yʖ0%x>gGo~VZM6_ZZ}ɠiӦ|xYƿP` *V;wvּycѣ#JeXXؕ+W۷` kw-#37fa!\sG:jg }|zwm9rHY-V=uUBJp|?ǂ =UmIg}=']͓hvȀqq̟>,_"ў`3 :}☏6gɟrجQ?3?k--t[9giam„ :Ե$ɴ4 +J@@Rn:>fh4Z۶m###߿TߡC•iڴ_xA%4N咘H}-'Mb6oL}4Rii4ڨQ{ȑ;wh7cW IW*G`Ϟ=4~o߾>00ܹs~S47YwTp<ӟtmrT.**ѪU7N<ڵ kݺu{㯿ڴiӪULLLrԩ~m+Vi͚5{YzuAAIrssX¦ {S.^_~yQ^N:E]jjjgT^ I)wr>y_6\0s&ؑ}ƎSٴ㈳]eW}=|}߹ 'l{cl23/_8 <ܜhӒo41Wm[4o+4tŸNoX[G:'4ӭ?٫u 0fd‰ X,f1Zmkk @bbbnnn sSKh?"/}6??_RQJ??r 22sv8&ݥP%<6el벵oҤIrr+W ourrjҤ)(>>ŋYϏܸq$I@QGѱJFjƍ>_&MnܸQt>i&OOO*|ڵ˗+޽{,J,ȑ#|~%CRV5 ~$$sc+0ax\ԃͳQ70Jk;uT߾}̙C>Yϟ:uԴiӳgώ5\,_|[l={vzBBʕ+ϟ?O}\?0bĈ{X`ɛ*P`oܸѩS''Ry֔a6 ٩>MEI տ߮?pwAm;RgpqvrPL槾;G$ff e &b1qgr"Koow?5oXP(/\ӹCjbRSSU?>ŠM777s݊DNp111]&$$@ 4>|OO˗߼yׯ_7u6lْƠs3roL橐H CM' Pu֥R۾}{LMM&'O߿@*r8ÇS1֋/bbb:t萕EE2224VVV5w#~&N%j+&#S}ի |*ݻNruFU)<2x+"ΐ!dhTJ9l6 Y:--:?ԯ_bܸq(oZ7n\{;vLOOsN>ehR:ܹS$U#=ztwSvkenn:yoM=:6<羣>qo})2hU_h4Ky\@;`^fas;k`oXb7|<{_ܼCjV8Ng999PGlllRRRJhC%I9LJۛ7o@CcJeffK.cddddN'fyk}K~ޡ [%҂WPN [l ;III£RǐrիWR;w뫽WxxxrrrFFF~~9P( 7l-=ܜvs2+;wΒ:|xgC8!cjkk"01ٲ2#3j~6ekchkiif-x=g#_j? vsqX8k+K3jjѣ0dMbvv6:%%E; $ ³h8wtY;]vƍ f'NرcܹsX'l3Xٳgϟ?I|ɓ';v&״>|UVTWó<---66600ܪjM@ }-ͦeeeM0v A֙2?N}yu:ד'O-[GnnnZѣǀΝ;3*rssD"ѐ!CN> ={ܲeg;&^xƐߗ烸rZj{'n۶aȐ!+}bx{{nz׮]nnn\.7$$jˣf,$ ˵MNN.a9s̨QjJG 7ruqc,.CPhp=U g'UKtBd>oYY;^9S :XYTOͫu~֊zXYjXLGVU}?vYjd۵S[h_RȂ۷p֣R(;wǗ<Jcǎ=4o~y_vR)k(UӧOo߾M ԩiL1X5SF~GRq8jd]JJJPPu Fz ( .h:TL4c (99yҥW.ˀ\r%55C 9zhU#/^<{]6Zbرcƌ;v^bEcVwŋ]voYpGcUӧO7mtС_RSS5]ʋڵkԩѣG[l13ѽwfɓ&M2tED\.g] Enjl$:lV}:wY,͒-рcw92"ٻv)SPz(TKuAy/ٳ %_کu FifkN/5`///;WsXׯ_/G*RU*Uttt`` Njhkl۶fUe46dܹ3f̨|i=zC8~8uTŊ:|իWGy-H$50L&k׮}]nnnžoOСCOO L2%00099ci-m]^ͩ'bxȑͣ?~ܸq&Lxbƍ gg+WREW4...d+k׮}KTG**/] ݭNKP(ú4|Us_6H$ԶPr|͚5={ 1_nn.$IR1k-aaa;wdX˗//!`JIIYr%̟?>Bԋ271Q_}ՄԺukocǴHR\.}67::Nka/M}K믩u"j(Rdɒ[nٮСҥKRi|xeZ͛yӧSߊ/^XYY`l%M`$ to`?c+=*iii5`III֟ׯ߽{WF2 ۷ojbn#6hРÇOFo DC!E\.^{3&07ФGc\cVd`$I|Xl\.5jΘ*mkLLLfͦMVSΝ;uF)͛7p9Y[?κoϞ=ҥKj#G Ff4'''gffTǏ{yyQ^ÒN Ĩe͙3g߾}sMMM=q޵k׊ xzݒ%KΞ=ۣGKK˗/;w.$$D/^̚5̙3]tOZZҥK+SaÎ92eʔ1cƤ/]tƍ~C4{_njRJߧYٳg/[=..nٲeW|2lذauٳgRRʕ+vYDԽ%5288̬~...W5k?,ϟ~R{nP` *V`HHȐ!C.\;88́UGW.\@zXPa?}r8>ﳻМ\so8GV{{M।{X[Dڋ#MlRwޣGoذ'֭ 4ik׮ 6mڰa4-:tԩS駟"""7nz"_rٳg%T>&&&&&nݺu*4iR=[V.;uT755m߾&Bdϟ?`0~~~~~~ϟ777{@ 0`sU=bх{#72g"߾}[QS߿߷o_ppp^^^@@ĉ[\ѕogw۷*{3f̨|gĜ[^t~„ })19P+(Q&H`[M"giV\~ӧO?}YfÇݻwez޽{_^~!CP!fJo߾SNqÇ1K(@m۶Φ oPfK,Yvvme-N/^BrwԈM#vVzaMgs:{=ڹ_L1ml`;PODRjצTYQUgRo~YSSӍ7RSL7mڔ$ɫW_g^pX,8p3 XZ^x?W8*\Wz$J5kFөݔW^խ[ɩP(/_L&S.gddxxxhQ2 x<^4773U`?l0ҞxȈ|91wq5,-ɯ_PLG|jnjR5ǘUIߩ5Eԩ(GBV r˫ÇL&sݺu3߽{`SZ D"fN_hӦĉbE޽{~~~<O$Q1Zi,1+*j4:KhUX[18jjY\$JKYa$IZyݳgO''g>}d- WDȰ8 8= Wث +2F4Mg 1Ҧr0fEAӋ%5jԨy:(}-K{wy!TMDu.-S>u!h y%&1k ("j$;!Ώ`u-vyfckoTFճ6j}U˒.A&666!!d2Pk( $H΃L)X8C,lBV:TTbTZV*VVVv1XR-f ] 1R(JDnnX,6UD" HMMSPmC>@|@ H$xjPD 2vZHRh4 {hp\   1, nB!-2"j'R[Bƪ3 &)T*\.'I} Fh4&f\.1 IDAT)WTYBJR NL}HԴ.pX,ác U~T`0X,Vy[1fEf$Iq!4t:m//B!Y0fE!BcVB!d#f͕pB!QՏ"*HD pX*ĦCn[A!B5MǬ ݃@](`00%$d Я2oyT^}rnXDMy\B!TTe]}Ul ~n 5߫2?|ԛXx|_ͺ!BfvV*)% n f<6N`]8rF {r܉7ocz?ohpvv~>G!BơbV 9x`T;‡8?ϗCޥm 4wz.I)ڥm\3IzT!BðaJ ($\\4^ q5,\؃GϮxVR"5cUvxUU:!q [)c9ٰQ ]TgyzZQ^zƞ|Sd}=)yI%}=mvfjhR}GKֽO[Vs݌ cUv=Vbb\WCUU:-+6!ӆhYGY5*YI HIZw6¦uS1fEaeJrRfQ?6?>o1璃0_.b+8t48VGJryMֆQc%H6kN=Ҳjm=VϞ?}b[}1ky(7wǦ?J-Ey<~0*phFxcVE@AEd~gWw7SgKFQxdW+KsԌWQQoޏ̴9rSRZcG)K~wV)5Jnzs\;i6x@2R=VÒK(ξVƬPc Rj|@54^{7 s{w?PA\[ކPc ǐ.=uY쪩U:H`LŤۜoSDlF cVC{!4<~-=HA*[E_7]19;G++\ZMqL޿٣IS3E&|W?`Z[{Ҵ- l Zɑ0hKԫN^9LSgv:]ۊ/KQc5fꮨb2Y 71@] ARYScfs64I;*uP{)@I[TOɈdhT yѵ cVYܾQR75Y-BQ,÷w 0}{p9yËq3&з+i}vQ慨:QƮ,`h4>F:b섘woEF5cUxʮJPpy>ޭe*HKmظv>QDF{2ݷW yZUIBrw`cX??$ Cas5o<ҼS1}KSM˩a_XaZY q{D]5I*TGZݟԽb?kۘbT0_CS`KeEw:sVoO]F[⿂( ۓ{P_7|X\F[[(+;u”id Wp d/kӄO`ꢓul4(|6Z %L&_;cჹ-GrNui)INo6~2Ǿޗ5 S_?=^Ť^W/:Z.Ա0etJ03:Ղ$s|(Gì&[uqWR|eٵ}ޫO\^Y^>,8(X9f$79,".sV6u놟zCZY/{UQVhb@ 4l62*&.ӧ.Rb߻od>n;-ZxHc\ ~ix9A@ZJ&V Ņ7:Ŭz_.mԋ$ɏj}-~c߸icG_s]RsMKMzB)cFwCz;7ݘ5.>ko?zNoБz>:wm%ʸzsy+u[k E"Ql|u߯ Cp%VUP(+M&He콵;ćDŽw\ }#'o+ǧ  O.鳀gNo؟ ۻ|UhhK7Tp4ZϢ Ey^0y(ObP&V" 0,iJⸯP676OKknjeizm>l+]F[ZYL"}u?cO2ObP~>!G fG^O}F#z-GzlՓ択c~AT<ĺhb %ƷN<s)5ޠmOݍL|7?iutRVmKK}wW4sڼ|fx6SwCfM,?(rlIU\Z]*t"HtllSCD* --mFNгV&f. z=˲e]%M&׻'\jh5eh(d25!kV5@`d @`=htǕUd-Qaklճ^xEo|F_S&O F 7 v4ddߑ6ofuehhkK˞;f 5u2IcZ{poH|]ͪѥonybRk)fԶtWSurW Z6[uKm+??yEyZm5~r,+#H<8k 7G,d_kM)WtNڞ5<HV|Ͻ)PQ\ I.)Ǒe/ͩGQ7$Ghc]FcmހVU{Tމ;cKmľ" 9n9I^S\o_+ڭV,WpAbY=x'Rσ4M,<&':II=/|(3+w)ԈŗsfY`R9@複2?\]0 8{Ƥ&OX\]~0,W ;MO,B )P, ?[UO.No ;-6"PC*#>u:d CS(( k,\$VöreUFC`e5E.d{8-C]MD$FxT,xS1+4?B.j%I8ѱx/+}5>.=:|V!B׀YYvP5C[+4˜#) e(CA U7i. KSmYڛԛ/?OiDYB!-z2f=j:B$0fE!Phٹ( ( B!]9!Bj1+B!u"B!_1+B!u"B!_1+B!u"B!_1+B!u"B!_1+B!u"B!_1+B!u"B!_1+B!u"B!_1+B!u"B!_1+B!u"B!_1+B!u"B!_' iݧM?'QN BKQ(z Wu=]kcV꭭ 0NO@Ťu喺&[Ƭ!B#ƬVֶu>]: Tmm$fX` 1Ǐd=\}:ܸuWRbɉܟOB჻飠KSӵ v|⦇cf➮l6K$}g4"hrZ-vdSm߫uQf,i<@ y9,}|INQW !B]<6]߽ʩa :k;_$.מfʟzEN4߾cׁʺ'nCkom߹7/ZP7BB!-ge-˽Q&Qz+k06O8WI~T*WȒ{[\`{[jkwWC"[?B!*v:#p@YEP7Qš_e}r68 M3&廵/]ne6}B!ԓ<L |L:/e"Ï|ߺ|"n;s/Μ-4F>x2ٟ6fW׵ e߰#::\$͖G>B! Ǭ#iCsE[5Yq o.o;ZZSa3G=xb}zeǚLȈP!Bț<r4KljÃzڔo,G9%TXau:7`aZ$5"#tMfgC!y0I7HVИaxQ6|ܴnwLfTziFƲliiiIII[[0iii$IvZӍV/>>>##C$yn61**}&$$o04M fs```xxxFFEEEwaaafDjkkJ%8"(00ЩXKKX,m3ZVP2D.<"h=(˃ܱduuٳgY MMM½za:J,Kӝ H ]a5DtAAAEEE{{;AzJMMg%%%ZV,2Cr;\ RPPjժO?_j+RF4Őinn޴iӶmN>=hРs=111ެj=pȑ#}m h~h(P %Pr؏ַԅ]<]+q]O ΞrYj7]v566\.bҬsss LjO>]UU5eʔNϯWӧV5L~~~* n 0 sСBJDRTiӦOz E+ze;݅i{;avгwVJe]/TTT|^7NS$IvXQQQѡCLޮhFկ_?ǒ*((`Z[[[[[;`Ç_Ih:vKoL&`"JïnNZZZ٣h@.\XX8{lǫYamU^P ꬬ,W盛{AAAFa'O:>%fΜ ۶m3͝<---11ӕܳgϣ>ZVVֿݻwOի'LD"B(((HJJvzvr|֭.!++Nx0f*I ``7ox>dI-*,ΫXQ!T:nI/0O-3&@cdxȠ "0 IDATwVVVH$S@}}qԩ}^vrZ6]cccyU."H FNBFwء7uTd^^^]]X,1cRZ555v;wn[Νs pرuyg?RL&ә3g333+**juFFFkk3gbGǼ &ڵkEY,ꩧz:t!\n63335333iOv#F{MOO7uuuCmooP<2R2/鄡lrRڱɒdqrV?wBlaQٷk8Uvﭙq1QAPM#snjO&Q H:CZZF:{1cRddw}Çrѣ0nܸ$nT*?~jFu@MMSMMMpa7MV ᡘuz;.p[rĉ׮]V[[-˲#Ftl61DKKKKKSZV"DDDTWW'7o^>p)mV//))h4~b IC,'66699911 @ 3Qќ={vذav5v]vp l6ǀ@"v~q ;iv,u)JeVk{{T*%IeY@ H.1c',,,## p`N:ŕW* &L}v4ɓ'O ~mĬ{i:77744/Jr\GnXyGzz~:a^X,~'߿~m۶w}^Fhh(w(,, :N$qVd2\.gF.4MQ\.ў੘tBf+ 9A)`qsK>~̰ԯ?yW'kq߬KO}걻BL;wn3 ǩ|Exxx;Vv,--Z7pSyOD MDDD!u]]]pp0wJ l6>6 VWR433i\. jmmU.b؎wb1mY__miiDe2bQT^Bg???svHHFQpIJ",vE-$IvEIcǎuHDllFik;?Objl%$$r^ܹKhlltʴ1jc_}9K-iϸ'˲MNc aZ-w)[SScلBcp)eee]_WD"BfZ z~@O>鴑 )S_yr\R CDDwtιױhikg*TfNk 2D"P nqc Lw_O*(.8Rd (`İA~_F_VŢ% V,kXUUUЯ_?PEQ ?KPHd20ȱ>VNVc`ȑcEQcn 'KH$B`V\WFq3>0^ܑv[d:h[D"9Nm$I: AeeeƺS ;s`0fT*UDD߃a@@Ӵӭbbb2@A+4Ĕqjv^$22r& e r=SN;vlРA&:){z@ a#u% aA@o60`% $HD,lo> T"pr?'3ehkkNTAu9n-N>fJ*eYkz\ A+))ZQQQ\]z{ ڱBCCCBBT*޽{'NFJPVwz.b>HzZf׍"V\w0Sq|%iETr7(`1~JN!FcTT-_ AE]I0ЧOm4,lh;t^f4MfddbVu;C 99il7qCKҼ;arrrKZTb pYBCCty,BPI)$uQH$rh4r_}\Ԕ$  ?zX̟eS$KVs-"/**<:2"GuV'NܴiSEEV>|xDDΝ;`ر~gMY,r?Cr(%]h-.jkkslʲ,?hnjj6M t:Xep_AձZɓj:88xĈ\Tڱ70lZݵkÇ/L&+// à Ye2ٮ˼eٽ{?Μ9&)ONNh4܀KǶJ.HT={vƍ1 Í]HNN7jΝ :j'##q7,k0'Dn{'f:xûM"xbӥ⚫cp 4i֭[U*֭[%l?~6}Gqqd |&A+(( V¾O7YVNETA(ʆ???>+l6+ >7Tb Z>v)E8x` C7Ƭ=Wm۶ 0@vGY;o߾:^ yTXXXtttaaaHH0FQsYNme2ƍǥd2n][[۾} H$[ZZ"##=7in7kwjc^?`nuo۹֞9sH$JNN9tPcc-[f͚ս+1 q|#OqIrrrFT*0`vH4gΜFDUWT4MwGjRlii yan.N;inndܸ+n }(1ccǎ>}y̙\d2F/Q Z;ܛSTvAnRO5???-V__uH:T e/㺈 zю(NyܼEqRr[5YnT.wmP'keԩܴq\DVVV+**뮻`ʕ#=fС$I&%%qm5n8.ɄDHeZ{Vz˲gMMH$wvᩩ-o23k>wڊ$I.ݻw*'N '\oVW^3sxk֬)++NF;R!C[QZZ믿]ZvΝ&I$k# .?vݻ-R[gϞ1cFnno /eN*eT1ŝn+~w`ZN9ӦMv-[jBBB ^H$'OBZw8^$//- Jj[ <)v?N{0*No+avY]]MDhh\.tW3f>ǙLNSof+s]=~x8ydNN˲\$#HO ]ڊaÇrg۹BpҤIs2 }vvD"\.t:L~N+qYY zm'S ;3f̨'|R׫T*i,X੺4#vGŝ;1 csD"={ST*BHNN2dV7Y6:N [Yo+$LRSSSXXVryBBBZZ5s!ZCCs 3w~OOOojj2 ~OH5jTrrrqqq]]w 8pS;$9uԂbV+3dMouRVVVVV=~{RԩS\ }Yܘwyȉ~VE?+ꨫC.zvI9wY1U!B:YB!Ø!B:YB!Ø!B:ˆBnbրf5uڙ|a?+B!c951`lq40[f?~z77>d2[KȎ?Oqwyj͖CdcY@sؽ"Bfɼ3U/|(7ksY5Ys|AĬqm<$[>_|Be?_wPrT"f2YQm2[o4RH"t6#h!0Ϋ;.p)pIp|a[5u5[it'v}{V׵>~y}[M}vQ'L*":& õ[B!yQ/|i >72A|2wT,Xd^/o`ԉ#Sv)nyh&_|vLl4_Y! |5!B]/Z_lj3-Kޢ5u{KjeѴ镵A)}ߜ^Sɿ"!|؈?uA. =ظ D0 ,1+B!tqc֩7{} EuMj ͚ЀP *S{`…߾}L*_yf/[>%yEy|e⒊_6pbZsuܟ:.omt|'JOӗW4m0^|E%PXTԬrB:JBՖ}MZڛtԪmhi?SVE(d Pr? @@\*H㻿CELGGD~Ve]g:8ŬuMkR28Κok}y|tPdMy6TKGmkBT&"~}W,fӤFvlӝ}z{fB!D$<|6:,pPrLviWN"]y%9q<.U O-z]w~֌YSG>ĽMMͭ'O Zm Qay• 1(WYGT>i}ǧM&  "<zg=7=K ?|P\R n7}X-z>hɦАC!N;^lmϯ?/~FJO̻UΟYU=[衩bUX,d>+vOOK^vs[[{aQm4g˂B^s~=U=%)_ִk$_ոȴ$s7F M+*?], f3& ʫ'%ڽs%G|ɂeyŹώ/}Y(BzGM TyOnߺpOHD~)IMZ.OL< lv񗉢# xcV7+l㖧^{O4 ~ZvP``eU# ٻ(m[T"DI78t>zE;7:P+Go\\7-vo7SOD!tHfrj_M U͞80(@ieY$IHXUײPC}E jnkh w|gDL"I@ ]_7z_)`uǎ_>5\gCk~gmj I$ $`[}*\bMDI7;tʤZn}/ƏڱNVr {a~mу -*x%W/?};7@ȅ=Q!IIXTźpᎃ *mMS {ԑy' ~×&\d fM  usn fO&Xlӫ &;-z"eYn fzGdR0͎[G;p|%}㹀Ukڵ. ؘHOtQ!Ef[4hʘ\o?v_,Mא ^|3I(1+:N Y_|~}6n ,$79:{K9Y?[q@j>f\Iq7vAXq?Y_~rqڦ_ޒwuϕ9r,ݏ~p`Uy2!/Q*l% IDATM\ʬ>D(CWK|j7:Y ""4.6*8ȿ](>|7fN>~EMm+Keȥ/L}|OEO9m$:ę޽b\S,~|umC뛯<X-lΓr*j}@^0jxSeЗ촱:(B!^ VwRxd `?IpSWl0Z7&%bYdAb]XHIo/1l7\qI%Z}gԾuMK>Zeo>;K^W=bwj%u{$Bcw1 Xf0hVikՕ*{&q#*jc#kuOX$ öjt.j #geH(;eϻ˂6dO.tx n/.d 646A3nr| `j-tQ5%'x$vٓ{]o[woR>kݷ$[R.L39Srِ9ﶄ^1p;?ggK9%s5$\qwln,aXz!BU GJ_[M UZۍٔQn00:"X l"p\&)nWdmTKB" uz틾quK RYX}-W8پIQ7>`3O㈪%̇zQYJP(BV4-%_Ȕڦ $IFFq(ٳh|lT "H9~*"9=۪ݺp%*x;mZ$&nhi_9f(":& jB!`YVbcc7bV5, C3 {뺥$ƬcVazI0s:Y5ծh. 2oa hǥ OƃiCI4\*' ZӘ[FGbV㝶a>wbVlk AE(z$B7 *\f#UwMI;F`~GSJvro3F}pZz?/=8!#NY8r"B\lPd:ZE/ J|kŠ=6]'& _C -'Z[)'-vg% {&[otv;'畾Y;wϓ0fE!g?]{wd'o>DDRO_v>w+&t~&ZlЛlXo~Gp c`,VDԿ׺%r[[4O<cVByVlrޜE5ϽQ@;Wm90l蘒;&IhylveҦ̓KjЙ̑{nwv㾳iw'PӤ?N"J ?+YB!Y!!O>rv~[s&\S[5. Γ>l+uhι^[Bo1-:cTxPדe˹yNn5܇k B+@[:l S;md jubåB+F 00|ϱO $$=]Ƭ!&@ᐇ=]B!.cVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!0fE!BcVB!=]th4Et-6eYH 4mZRiOW`4-KO`0zWNg2H. k]n r]y\.=]h$0wXVŢP(z"WaX \h +r`Y$ܡV ƬZ,˺.I!BåB!|Ƭ!BåB!|Ƭ!BåB!|Ƭ!BåB!|ƬWl͛7?裃 6l?qF/cZwm6+0̼y d2ysׇjjjrɓ'U*Gө_~Baaת~[緶z>.,{g}6##_~۶mEF7 :fyJN>T~k?Sw|رc;S\\VWW[rKZZڣ>vZ TM޳gOUU'k9e秤L0߯~5x'O 8µOz饗֭[SN(jŊ+V:u뽶H$R(IIINώ?>((ȑ# <...##ռmV\r333mtIMM t:?!!)PjV JRTznl6k@RRRXXʕ+W\p7|;EDDٳ'>>ٳuuuNO1s۶mC 5)))III^M>vŲk.NMx èTNwһwof{9slG}tС{/gΜ?zmܠ X]]0ɓ'3gt*oZNxf^O'MhѢ>_\niGvƬ'l޼yݺu}<{7| u,..:YfsffF9~xff&M{)))\XX8~xqZ[[{:X9reYٜ=bHk׮!Ct\166ĉfY"xs͛7ϛ]F[K#F/Od}}ŋCCCsNi>x`JJJO8PZZfYV, LrN=䡇z衇:n߸q],X0zhU[@;{ojjȑ#iii /ۋ/^|… PǏT*t̙̊ Zz/'|/]TP,m۶[ouΜ9ǎ 0 @>'8zEUv>l0B()D~~~ٚYRB&2L,]_~e2YzzcbbBappX,fY6 @.@ iZ@.rZo1^*ya_r:}nokk:uTW]̙3/R|| RSSIe˖-\ /!555==V5,,L.3 ۊK~t ›1kj//{رc`VN N~~~a^D˫~gB d2W_}坴޽{x4Mr R\. ]mѢE2_.q7_|EOWĿB`СN* ח\PR CDD˲6M$wJp3L2{̲R#GYYYcǎE"QddjMIIZu\v(1ȑ##Gzjz4fu u:n/...,,4Ad2|~WxgKG7葑P^^`Zbf@ӴoP B)BQRR#?C޲eˊ6n浝655SŇ"d2˲\:JqqqDDD@@DEEEEEy!]bbb71";; 0PTTP(+ؑ0ljTћisuj9sϞ{9Bף;6;:[D";h8"ōD 7^@S;6h 2 >ؼy3 6pSO0\ŋљ3g3 $Irq0=R1Ggậ4޽{@&1 #ˣ 2v_ YYYcWjjjZZZbqnnرcf3[ph4\lj׎N^}թSvL(JtIIIeY(hZڄB!C_yyyfs~~RB`0DFF߿?33d2q2MUY~~~ccKG >򐚚QXXؤIvUVV6p@Uw\SW?s(*`Eq@Z UGiVZ=*uShEPʼn [FBH?/#Fq_Mxs'sǏ4lt=2!ڵׯˆ ,V饐e˖,G^z^JmժUQQ:ja8ѣ !;vl۶-!ŋj5{pBLLL޽ݻGd}s`Ǐ08j嬨 //:ߚmO+WWÇx?m۶ڵZǏ|oPEE]\\wtttssUf_!f͢*V tҥmw%;;h >_ZZ*zer>s۶m;v,]UUU_[g\.OKKh4EEE}upp=z>BHBBB@@z]jpڐ>}$&&>~ 5 pThzzFs!c"2+\.>ܱcÇN:gl喔tҥW^!? ! øj\޼ysHV[3޻woҥ裏QCwqqqQRÃjX]:֭[͚5roo7nXm`uQQ!p!$222&&k׮V()urm{ 0㥦8p=zׯ_1r˗bˣG<==i1ܯJeyyaT˖- ;wl555[l9r5Ѽy:iӦ =nZ,?yN&ڵkG<OZ#""׮]-X`V;_t/-Z7ܯlv HIIņb:J΂V`( ''m>qqq{ڕ-ZvI*J$z>w:ԣͱhYj.JRlOOϞ={o%00ťv㣃Օ/ٙXmܨ$S9;;ǧLR]]m^WU[[Ki߾֭[ɓw}W$}gYYYV(?mIӧWaa>T*}]СD"1}`3JJJ*//;w5xdnݺ5j֭E"@ uVVV֓'O<<cccCBB2223ugggg8FNezC={677_fMBB¶m/_no"0]vwQuss{䉾b1ݑJ|}} T]\\ZjuϩIǮi˷4''QF5:zޭ[0gggF4`Nqqq3f̈9~xhhիWsrr~7ϏUûp8+V>{W׬Y+0X@mܸj3226n8s-[X!$//xR zÇ!'![n;|ǁLD TUU988x}lQ.h L&mݺ2uT[7?tj_ӚhB,6nXvڦ67.D۷o'r텇 wҥ)S{ B***VXq…>}ڶM4)$$_~9хѩcǎEfc„ C ot:!DP_֭Xڔ|MNf͚zj&''\gԨQ6,$447((H";۷j‹UVG]p;=p@BAm۶ՙd |'L0u>888---##cڴi{dqoF lذɓ^^^7o}}}C;υ +ߑ:0{0!!ܹsbn 2a„~vT0OT*}sRT(ϴK³gϞ9s&''G,6lo djw75P(駟~G=z„ ,QTUUyyy=kF-^ABh4IIIOy'O Я_'֙# =MKZZÇSSS%ɐ!C&N8vXJeeeỠ̄Y_Z?<#;/##Lɬ l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l ldzu%HT*KHRBFuARP(uAV+Hl])$ r.HP[[0 tJ:G;;;/Magg0 :NբLjQW&+dVS tBf5N{:G[ h4 àLA#4LD YMA  <5?+2+2+2+2+2+2+2+LYYY\\\^hl¯*$$W^={ŋS7o)Ԝ9s&22aVS(gfV+^QQٳg9L+L?}=z3?~uǪ2eQTǏ={v޽8gΜcǎ) +O*:uJ,[a[Oj|OogϞ7n$=zիֲeO?r52lm۶ dS몺:222''gݓ'OZ6))iɋ/4h% f]ܸqյM6Gfܹs؜);Ǐ9aÆiӦМ;}ӧOoذ/De˗۴iӾ}{8|]\\kUVT~Y_vrrrJJJڶmkXWŋgΜi°BBȦMbbbwݭ[7SRRjժ͛;::Zd2Ӿ}{//gd2b4 6N[  /S_>mڴ(Cի֭['Ny游8؀g/Y軪oT{Fٿ?K25ԺشiRK8ѣWX1o޼XfV{{{i\.Bޔ棏>4hC??+W3f߾}+WM)\W.{xxXŷk׮]v%ܼyӔz]6++˶U,66kL&Ч ØL+Y;NJ555555}1x*}ҥK}}}[ڴi}vb&44;;;s\D /~2~xXaÆB:qVZqsJR.럪T*F?Bnjm4MmmL&tup\\\lQ;vlt:T*< z1ҼA3>!URjiSQQݢE3fX[)uu…:}Q***\nddJhP($V̬2LRjZ\n5trrx2L,WVVdXh\]]ܴZjpѢEu:YBX"k׎0H$jѢ%JE!K)ÇBke˖'Nyϗ?𲬟_Ϟ=͸Ŧ&%%Búrww9r$wsssdm,**2{d4(Dn]UU!V \|믿nggwBXڸqÇǖ-[ mȔ7n w"lƍeeeKݻw=A=~Ύq8777777}*Zw^B~]~*jbXӳYQ5kVΝ;( ˖hlk<==ǏZPP1''r÷G!fo4*`Sջw&,[>T0jԨp۷o_RR;tPBHqqq{mذ!22rҤI:ҼL+BL&vZ޽]]]E"Qff!C0//:BmB^BBB@@@N )??^+..~1ϧ͙V`FyxxЧ-ZȰhk42+r]B|xԩs̱ayJ;plX$BHmm'|BYn{:xBܹT*iz;;;3IQQ!dĈ ###cbbhwX<ϡ2`zѣ_~٧y&EEE-Zh4%%%>>>"g߿~5z%΅VVVwߑpe}$((ח> ?~|dd$˵a! ɩm۶Ç?|p\\ܞ={лC$鋡P(lY_mٲ[n-!HTPPн{wz,e&((ɓ'6,UTTTXXXRRReeemmmvv?ǏO2چcG}[n:t'O}]Hg6 +BÇ-QKKAl^.P~7t:3v䷭;w/X 00ІŨJMMapsrrbbb ԩSm{qRSSoѱyfYhQhh3lX:4MzzzfZn_H/gff5V ,7Occc SSSccc/^lRQJRRtJV{#ÁuڟAܹsܹ˗/_m򟘛V̛TRRҦMKlX6޽{X`kk"EEEҽ{wT*E;uԫW/1Wvww?mKBgBΎzj3226n8s-[ɓ'233333/3 oZH*j儐oƢsɓ Ǎgd9̙38pĉ[nʥoիW뛞lvȬR4Dsӡ͛7hGo6E 9aoo϶VN6kҳgO>`1bKbׯߎ;rssoaB%#F'OǷnСC/67mԢECZ`]iZaz]⏝]Ϟ=B!K&:t@9wRh@rF~nم* :֭i/[oo:gqpp rJQQE3kBXܶm[UG^bquu52+D{EEaB,KPPE?EҮ];i5+VX-^7VWcWƍ~+W,Ya©igѧ)֢wj8m۶hH$\5a\_pdΧF9|6l~a ԩS !N:E7J/NHH2eҥK$sT*uA?5OOOtG`r.$$%y Zl*J޽[BBHcҌ3-w8Ef~w/^$~jjj>{۷oǰtC՟TN&>}bɒ?'0LuVBma:ϰ !ㄐ2+׫:ppBBȂ l]:hB3zݻwsRF6tҔ)SRRRXbŅ jBSTVV6iҤ_~E? KYYYtttjjرcY0a!C書8ڵTP_֭k ̝;h%Zvԩӊ+B''{FDD̚5k֭;v'ٳILSo?~4BHll m۶9;;BRSSNyttt=[p0LB /suu_^vk3e ޽{'|$H$8H())Yl};8{l:ondd lV81Zjuх ;T(t ۶msS!߿ NeddL6>Um#??_nT}tt:=cd'Y/ ܹY.^h?jkkRic~F"v #_k,KPл6Ȕ}CbnݬYFjSPPgϞAAAAAAQQQ3DUVVj_7RW۷o7Y_@V7u%92s>(..ŋ@R53 m9b䓛"BaȢŻyfRtJA̙3 6Ǐ7xGg>|RN ٳVؐu|ҥ7o޴tJKKO/_|KoԈ={L0! `ĉ111EEE )HvޡC &9rDRYl׮]},Ed2Y||{1f̘?덭lfvMt:ŋ/^ҷo߅ ?~ҷm˻p@ 8uZF0=zqN:M0᫯zu yƍBt#,{3 ~;99:ƍk˗/WUU+)j#_?bJy͛7O:uΝ|>ߌE2V n9(^|zyy >܌1j#G.\XUU3bĈWo \--iEFFΝ;g3#2+7nܸqT*g}: :yd幹={8p3,\̧Ν{qFBѣG^:O<r=zB>ӵk׮ZjΝf/H$JJJjVZ}0]6k֬Cuؑrɓ';v4i233G뛘8b.P(~y}.]j޼~5k$&&FEEmڴťbʔ){۷|`?ɓ x3n:222''gݓ'OZ6))iɋ/4h~eSlVÃf,3>|X,|1cnݺ_UUe ^ k׮ܹ޽{۫T={̝;w:u2ch4{V&$$Yb0Z2nQ(WxΣP( !}yZ3ߟ:dӋ5̀ VUU^Zk֬СCoCRa''?ݻ~^?}jժ+WD6mڴo>''ZVD_wuu ;;s)JBQ3RW&LOHH /rʠABBBRRR{#=ooaÆqVD cǎ#GvUP8zMF޻wK.>>>u޺u˼tcǎoy7 0sl˫IBBRm6o޼ݻw˳ٞue B77&&Unnɓ'Νk.]4d>/>> ݃ϝ;'ͻEg35MmmL&tp\\\[J񄐁.߿xxӧo޼iސN?k׮AXp8sY0رc=z=”Bɓ+5ܹs׮]_3 %dee9::vܙ.˫߿?ō gر+ ϟtֹRueM&֕… ֻwoBT*-))@(((H["Baffù\>ԪT*{3tRg5.ۯ_\4==pIuuu~~i=聋u>Bʕ+!!!YɐJ˖-f[nYx9c??={F>TpڴiC4\(oܸf"cȰ>aΚ(-Zi p8F:}tvvy3+ǣbz2PNNNf,UbktLfsݺu왕Vdzו5{A/Y'4ĺllK 1$@;::r8}%nnnu~7J$[lW ڵ3{ڷo߾}{X*ҫcƌ  BPpܪ*HRZlٯ_? ^Bf&ŋ-[67@V+ >s۶m7udeeUUU}vvv/O7r\Nы_VӼys}K8k񒓓C)z^N𲡣ոfСC5kfXWEEE4Y"=mBhtVhb%\v޴rʜ u_^YYY^^N{/б<r7nԩ%.dVh2!dȐ!QL޺uKPtЁҺuׯӂY;J=+++Ϟ=n:>O?+ljsss۷oJ{mVVV>yr|\\\,4Y g!77СCdIB"TUUnݺrPhé yfBȲe^{5X~kc?a-[FٰaCuu5](Jcbb֬YCaόVv .|Ŵɧ6I4}wQB2j֭[ !64>44j_?~|ݭu#pA//Ν;ϝ;wYYYcƌhy޽V۶mq ̼֭ۮ]N:E̙cJ32iegggN4iҙ3g>k988ݻw߹s9s,#l89k} F˗[Ut}.~U*LQؤsO`;w/X 00Т25ѱG-uu̙Ǐv(ÑR o6G~Ϟ=௿<==?S <~铒ѧOa|||ݥRiVVVS\r44|t:ݭ[*++G_-R: ;vlԩ111K,!7̙3K,?~yyիM-[СCofRRұc:thѢI&:tP撝m⒓ f8CK-g}fWXXhĥK܈ܼ֙W^>|m˗/uUYYI'[jn(@Zg突J{VUU8q?qӧ 8D"yfUUU~M3΃NMMDzvrr*,,ttt4+~G t+Sd(B!i`t xqqdee>}:00p'b=Q^iiMv:wg2/֕T*]xqBB”)S.]ʞ5ݺt۶m[n]PPЎ;pxga]=w%/[p(ǫ?r"B@&^wKLL?θɒ"ax3BF !gt撛;~W[tл O9!KNNa$QSSݻwݾ}DL+V.X[nmgS*ѣGk\׮]#Թ{ Y3`m:t0k֬իWHNN^r PffСC/]D'&Yb?lذɓ'ۺtVrΝ_=##c͚5~ic=k>䓢e˖{) _UVvj 3f̈{뭷vM禅XWjO:wox/)>ӈ+W/id;sŊ'`/џ 1w\: ~UVљD:ubŊ:WVVa=~T8--m6zoF lذɓ^^^7o}}}<7!EEEyyyC رc׮](!Cű͓'Of̘QYYi8W_lٲ;v;vlȑ'ODgϦk^xSL;}tttUU=|Q }Gu/_~zBH*Æ|B޽{_ kWU*՚5k֬Y3dȐ6m\~~y-[6c 1Xܞ{ 'Ny!|%1>/0D5j3g/^>>b*O??/|K$ݻw;w6HDkl VSu֭~g=5Q2L8??E46*AT&%%}aaa˗/_$bK,@}u&;)R)0!g RP(pq4nERUUŶ:$ ,7E" ]]]_ύ6BYY!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!LYVq8at:_Kl[iZa=<8}Rg޹΃;K}vQ??yK5\sIc ^=_:~\GT-H:v*e3\3ZYFY&%s)Wg7alcԈ+o,**^|~;ӧ~ˢyx7ZE%O}k߶/w7ޙN9y:uD~ǎmy?40H~MİɶV5ⓙ+j^Vx755Ԛ5}`ggj9?/{BA7|+n>h5W v{/C'Χأrr萾1!D&+*r ~~vm!JEMrwso{;lxg_ݵqONcд4./}=C!J}ڶ$ܹ_пOaq!PvmBFF#xzt$_!Vn_{7ޱOO]v2h@/JuCt.%7V-ZzY$Vx4}Ee)iY[h%M|'j~5Rwe\]0 :X*B~޷˳~7^FBt:]X*+B:bFJ-]]XV.Z~kw=SJ,ݾIoء!B/IerOO7X񨗧>+ܲ祋9::tZ$J儐j1éJި}\~FWJ+) H% 5g}/@Jq+DYgźg5b5[۵m7.JӃ0hBHBVݶ?Ys:ގ(0zw{c`^Jִo'jڶmZWw?M9e_nڹY<"fVBc맳VocW-m[jj$"]ᤢ2BH#‡mu4[@aQYaqŠ4=#sE5բJeطk% ôit|78o@ϧja\SL6r߯/mj^D"QT.E J !iJB@gShZDbggg4 صL!H8agR*Ka{=xKfݺcj3ݾ_@ EXٿoωkb4vN7nFd6狦qZ!%b򤖸ؓ6ם7^!l]Dh:Y$J2xg@F2rz@IQ$XEBfs:q>I$O_3!%3z-'D0 YKOVBRl0:ٕtrٵkG}D رclllll?xС;ה4չ :RQZZm^Wԍ7}BFw4%4+WBBB !ÇDagϞnݺu=))޼ys\\ȑ#:gܸq =77ݻo񆅦SՆiXVVRJ敛;w܄֭[4(;;;11qڵ6mZhr|G=z[VVyoc(?{IR P!H/EE HS Vi "(!DjB!_uc%0{v_~_KzBѠ^O>H$r)0=Qi<-T1|xuZ2%%待:U7 իz닋 rnt:rZV+V@ZZZjjÇᇏ?íZry׮]&L>}hڏ>hӦMɊd ׯ'%%;vվ}l碢"cH z N oFuu5x~ Y'O$I\w^d߲wzw>zz}/mٲ HR=VվSyXF9p@YYiFFƵkxq&IVmEdiiiLL ^h4ϴBY/WڪG:T\\l6\^KwQ2FqݺuXSSpzO>`oj._ls]v^DTJD M67ߠ?.sw^z5HnnnLLLLLLEEWf'IRݻWRyrn$INwRDj H,'%dTɬr֏ԸS;w>|OǿA$oܸa?.^xС{ SLϷlhgtӧ(rO&fڵ 7;w:th߾};}F)--ݷoVUT{E[n|7>d25Q~V̯(ŋ۷o?k, Zz9S]=`0"護ޚ8qꖗg?_:wgbbezPPFQ*T46d2U1cTTT̜9~QbŊ}OoVvNYOK&eddrN*޺u+$$5NVHoUO>l͚5 5t~loU iT[L&{A Сúu|֭.bfΜ/:t_l?SFFW_}e߿xǗF:{lmmvݻwhhw#WZe6}lT*ukeǎ;vY'ŋϜ93++˻t&BaS4O[/}/tFLh V0^p?1".\ z%0y@gW$I^3:uv &I/gb7o<::fegg|B!W^_˪W^;cAAAK.ݰaCFFFQQo/S(g}… Vڳgό3[0t|>_0Lnk_okK=cVZh1w\;v^_QQQ6֭[O8j*/8uI$Fs޽{#Ǐo߾}hh(*++sa'N?n۶mRR$ ,Y1$$dРA۶m+..vY۴i'E"|ԩ֭[>' fjFZ-TrBwz[[N$սz .hx<z,JT*u֬YN)嗼[ZZp~M6uC\^fJRsΨiii(ڵkt: %DOݻwSN$dFIr`N7~ ѹN x/qwqW=0#Wp0N?Mq`8P 0`Q@_2f =7` X5Ջ$IhRh?**J( c\PYU>J[٩T*{PBC [jL&{w|ԕN3L{X,fjh,|Qs۴iSXXضm[hd6b0nxɓNΟ?tĈN=AU&ZH`@3»*rR{2>PeУK}…JAөTjLLP( uo:ѣG\n###322h0fCזǎs<ձcx]V[XXJT'x'55N<)˽>Tf]z588ŋ;v4 ($I :P/ϟ?g0RRR%N?tPttӗYU4$IT*nZ aՅ^]v=zO@FILL ȧ~!C/n)[o5eʔ˗oٲAGr龨FeeKnI8&$Çz \rrXJ=@o$PPem۶}֭[;$iZ-cψ>xYVVV֩S'VѩکS@߻v Ç'ޠ͙gPPQ(ލY TTpcYYbZ Ǭ ٳX,vܾ]vMVu=G*444;;["իx5k֬Yf}H$裏f̘~ƢhOm"R}}={:tȐ!~Ԭ -))OjHn9t̜9nҹd2qO8n|3337nX]]bŊ={O??jF|Pu\(G&s8'^NGŋsΡS%-((7' EPTVVڵkʕiiik֬ ޜ %))ܹsm7nܐFEEErrRD vbgZјW_}q{UU-ZHPhŒ)))ӧ.gΜeتUaÆgرJs̙5kǛOU6_r !HNdHbz 7.h L:iЅ:ƒJ|>sbcccbb:Ծ}{Z]ZZjOlZ\9sw}/Yd޼yha7H*z>999AImQdvpY;rȁRSSGmH\\\|h4,--իcdӡCcǎݹsE>Xqq ăګ$H{97jԨs:wmh0 ^[`8Ez~mN=ܶm&L~{ĉV6lX/jPG=f͚oGUBL&'rҥy2bdrzU.اմ#ѼfΜ9ڵs^UU5}t =z/:z5t:]Kh4xZ$p&U8 ;1H 0! {c2fbo$IٌH,,,l~f0ǎgj5fΝ-KAA3gk:>w\{%4J/{*-ImڴʊBj=0Np\_LbcV,R{˖-sq5kL6sq?}r"'*MLLtx[ɑH$;Y֕+W ֝fmذah۷}:-}Fy}TRS{**33YfF3*f4`tE"ٳtI&;v,66ӦM[jg}6tпˋ3 ϟo`3QuBr@`'r\&.f=y7m@Գ;͛7OOg_?f]pA"8N .]"Iҧ3{K-[8 ڽ{cǶnjO0H$1[l￿}v劣46$P(t://Ӹn1 L&֭J=|fxE>ҢEe˖ 6lܸMއ&$oiZRR*O:%tz׮] 1110:XXˑfCİaôZKh=pԻ4{@dd۷]/MA߻_j`,G ʕ+`NQ+p[RXQnn. ~ܨLc5VyrR\nݝҚ7ot^^^ջVoW QJ$Rv$I[ߖ^X8?(f9=95mS4,q7{+Jݮ^L&bqj]Yi"$ׯ_rԍ7:M z?nѐ&5 Ș4iݱc)V-(JSk]7 0G} {/ydɕVj8 ut]ʋK͹Nϛ7Ó&MZpaٯPD뽽?O#ixh9e0yl'eIͫ'-ד>l6Ju|C-Z7o\$egg8ve߿YL&Nwjq̊Z~cE_|1gΜ6mٳ)ҔC{۷oj͛!Dxbn>u>OV>cΞ={֭._hIҦ&77gy+,X^({껕ě,B1cƌ_u̘1|f7n'|ou mT*>,^nV!R*|ڰa$h%RX?ƺӰ  n-ap ܪ@oBǀ=L6aɴnݺ#GUFO?Gs=gyƌׯ7o^uF}VZ3h?}q˅KW?Tk{4b`y7QqG=5ޗجFߟd/>Ovf8oN21n7?7n;!?ùQ4tSCzㄏbV$.]'@||իe2Ӣ7oMMʾ})M6޹sL&s\ l>}ziiڵkmۖڢEbXvСC# =~gV\hѢ#G$w^>}1bZ"zԩRԱ~С&%%vFqS*&MB}ZL&7ߔd={@N7}ݻ7CJ3fx7}0Ra`A]/ҡKsR #;H]v͞=^D]vegϞd"h͝;ܲe۷;{C jgΜ پ}caهBIА_-%.D"{).fB!At:M,q؍ΟpLfh"us.4V7}swJ*<;!Ipȑzi`͉'Ѓljl;AAAk֬^0 > B,>]C補y*l6 ]$ d*tdԥ ^q4xܕ1O6Ij |c]ol_„1xzDaoЁO>aPaA>xi᫡yob|V*ڢyΑ42jݦCtJ"5ѫEPU#KvLz)qD IDATmoSSZ;}aְlXu>?N>"U3a/jZaݻvDOG 7bh?ls:~qS\v{oӼS4-mzٹlaaE< y8q~Fo!%ًb;¬'2.BЂ`64ޘ#,п_ۅ0 ðǑZ5,3eX҄$$,`aB`5E"ts{L 5zBԻ9l6L-9"BR=nM&}W( PHՙFJF?kbfqҐ6m__q>vClHP(z{fss!WUUv0 03Zcc~;e™Q u5}ϹUX-[gzw/\-*3 rN?joM1GFh' Y1 0 )dui =)WuKIX˶Ҧy|HHR#E!"!q\˧7`͜D<q1 0 CPڤuK0ýG~&Ǭah:x9SNĉKzwl[Xg{Vw)/&i]6~V䰙K759uWs9{va1 O- cDKkRm7~޾c1+aapbGݝǽOZRjYCQW&yQaU|ZE00Y, ERa=G|\6Y8f0 0U&H#{)7Ŀ7Lt &3ŴXf".{G !:un̒O_;µ "> &pJ՞ `Z 卉*j˾}:jP) FV`lAۘ'1u0u::Xr]`i ոQd/^*oוh Ȭ[6 Hre*fXm^-Pt% 870 0h`Q&E }e3o9bF\λW\:_o&I-F h8I6[qIBR1QwZQktťUQ&F̆˩( .\ḏXovH,.TT*%:2<"ܥ%Wj-,P4<.E|4ROVR$<$&*m/-3(biv׮8t٫?+)1owDGN9v^T{T*0 Dclwoi+_XP'^ɲVo(+oԨcvGcVs3fSXNdSAaq9)7Yt8'Q4 YS$W&;eO*VU#)ԭZƙw|:vf#&7U9y'8qTaڒZ;El34D\+SVZ6 EiZ1țB/$Ӝ'GS~,߷ba8Ӓ[jUoaJk.|MĿYc0:J|ჯ6*W>ETn7LwZ0IyP `s3fmMR)H/Q<.68H%  -ϻSWքĮ0QoiF\pKk 1kҸBIlތp9*L RZ$4J Bh2@u,",X,EZTp5@G.iSzWzܵs =R/_cV 0\%`ãt6[&>fGN^X!" xڳU5:I7D߻D=$4nhhy4$V $A^qbvΝrµޢ(W.-4DTi+jjEK#I$I  !$IXQUkP7w8l1y(`JOaC%͋ywF텞ĕܬ<"Ν ͣ#BV"sml9JEfUFn/WenHBrJYl6Zz1 ҨT*ǩ*&sULգEi+oVE,hTI\(+:yj] 0q^޽!g [w9YXQEՆ]=<J˫h4*0P1  J6R^QZ W,vHk&+E\.;"aXuKk<[ba`'𺤵 e Htq/f#M`DFtOo`a3^[vqQoo?hӎG$&8UrO8=T,ǝF/rj>J@$Ф{ѣ\zWAj.:2Bd Bq=f[7669*"HJhT$*Tc>hr/F"Ftźfᓟؚ`a v _|116Z#`tyEUᡇeݩY6]ڴlI1}Ըϸؘ܌Y5Z}N^ZQw 5AW Qn&$Ifcz1W˩ei6PktSZeN٬j)t=;zNH  f\ @DXpqYX$ f%4q>TjJB?"]ՋZ4W/A-|s'Y=~fDOP,jwܲehJ+)ظJ{vi7cXPf oXώ0x`oO0 0 OcֲSg.M_Ӯ?a^t(^|*?Y0 0 üӘ5.6D=;H=y!I4-bc:ɕ;ya6ɓbX,m^Juh4UT+zt) bYh2&--<=/1+aaMY)yRԍ[OgO;ZL&ͶzOc&lBIi|.s-zsg%ybnnr{JJ+9y@zOc1[R;Z&l6O 0 0 ?uɛm!%B,M?6}lp*1^>_`4VIiJZ32贯>~{e+7Y,Vk79?zv+of[ڵnf1|'0 0 OcV:39wN)0} >3Z$yjh ɻQjP+݃Ґ;%ɉ1L&ÓBo:^, y`zh$ᡩZhaaE^{U^Y3x@O*zΩInuݺehu?kjC3v='ahHЈ]8:vԠOӡM'IHT&VI7mkGO*BܣP=۵s{\?Οa0 0 üӘu?qEf<+3#xݷJͰǏt\׫'l>oxt; PvmZ._8m΃S?[1b]T5 9vmZzX= 0 0I$`y<)2Wz p]l6LG g<&PTAAAA&S^*qP(B!F tE B xL80ͤ=>UUUxV 0 01+aa0 0 kp̊aa5u8f0 0 Ú:baaMY1 0 ðǬaaXScV 0 01+aa0 0 kp̊aa5u@W{d) :`fXl6"j6 tEFQRѨV]` ]a4m6tEV7>0_ bXCd2$f]AW.b2'еx8rb2T*O`Fh@W!N 9 0 0s3sFT x𯓿=*zuڳ-.`0?x쯣Ghiܤ1L,ʓ+Q/ꐒIihzyΊVKvQ{;ljIB|'+,*n޼eӒ0:,40 0 ü~VB$8nu_,zsʐ=\Z7]l6Y,e+n9㣗ၝ m#-c>{n'-\^lDXҐ)^NEt谭A"=)V>w᪾4]aaEǬ Կ?[ؿg ]X$<AӷyzPf#-UUK. ˜Qb m2[J'@YyՏ r-JD6BX,'ჺ |gB|̨4Oh֨aay7YsKb"Ą*/ 6 N"a==P`4U{]hOJ#Irw^|vpLēr@߼U2i̸aiyVm{_;laa6`2>a7?:50=M(|d tUvOߤP(ܿggUԾqkɉwJ)<wuʤQ5|pW}l[+pް_;Xtz,W(.->.o.aa];w)՛nQ!S"YLd._4 0 0Ox37 elYE5z|7s_y{$ae( y"-MRUjeO={1絷>q4jl2Y8llw=f&OaaX`4J\Z,~jH~iצeiYUiym.JFV7|]ڱ|s_b1KJ+8lvXK6-A}& K),.~hsORTuzF_*(qqEѨ9 >2驄ܛoϛ kϞLs3]y{.߿ٳRs=z?~|PPP=M&׷nݺnݺɓ'oݺջ5qd6Ϝ9ӣG??A555999$IKLf#FyEuuP(l3$y֭|\NDppp\\\JJgD( jjj_^UUe0x<^HHH1 T*A jAB_תaEEEGݻs]o+ZMRΐ|$I.HF:FR)ڛfRYڵkUUUfuo'y """'I<,,?KP Ǖk7XW6+Ά{󳆆gN}ό9нϝ21ۼٓݮ۵<ے-͕Wibz|%ӗNL{qtrRs+vJ~Sύ}Bt=99N .<~h@F#j2Ritt4AY###=+1 0+33355~5##ȱuРA m۶ڵ˧ CcNNX,dxB1Rt|~tt4Wڪ.$-P(t-SwJ L(l6$R)AzT7Zj%I^|יL .@zzzRRpk61pP(JtB NGB1RYYl׳/܀cV,:w%222!!)=o|>ϗJ:N"3;:G+΀d55MT*l6L~ ^t?"""׳w( ?am+Պ~M}]Ѕ#*J4itAVfC=G+FB@A$Iv7I(X,6h4 F1L\~5PT* ODA.{l6-ھul -[tzowehX,zfFC. bjVWWK$hHN|Z:H'ClW^ xbǎ :ϢK{}8Ns6BZbr.C]nb!I-^J[UVVګTTTp\?rbϥ'F&J%fC^A͚5e\"’JJJ_Uii=8hBd2 ADqLoOYVJ2bbbMsh6) T*0~;}?֭["ߎ$I\MBBBbV*jY,BAcVIعs' >uցA* $IYYquY^PG6*Jf:` tC>yOj.ѧ{%.UXXI $IԽ!ۻ_XXP((J^1Rz}TTDNa6 2 ٌ6b**;;J }4J[EDD(՟vJdZVXD`٪ItT*ugBd29p8 }~;5Ջ$ɚt!\nmm=X,?u1+0EPTVVڵkʕiiik֬qoWܸq]YhdRU&Z@aj5 &oa2T*UPP 9Nqqq*`w1fZ\Wsr* Fs-ٳgOg ,PNh4, egBBT0QsP?9}fKKKgeb[5(ftLP(=zUYuu5j:V9 u+^%p4=էz=|~uuuvvvuu5 j߾'CETL&aD"lFg˺Мp̙̊3;xɒ% ȩ.<<<:::'''44 ^j[44ukjL&ad4y<N_7jS\ z*$'']o+7>ƞf%O@$o 4M$q8Pժ쿈{`65Mxx8j= RYY _QQtz[\DDϏHIIAѷnݺ|rnn.pc~@7 fY2 {qe2|l6FS~y'dff2 Dh:uԩS'_]+J&mY꾫ܿh4hԀ3_[9.ZQ[[[[[捒:5͍7^ 8olhQ"LHRV7((H+ _?F1%%%h+;@P]]xd֝)Gv\t %%-[%I㡁 f>`{y.5kjj|0m 8_lRRRAAAiii^^4^rh4:6mjZV1+x-ZXl\.߰aƍ,YAIIIjjX,>u\.]vѣGvMNCst+ JEP췊BBB:sl믿L&SLL:Yܯ F×:D,ޒnڦ^HBEZ TX8=ErT)zr (MiHe7l1fa2a&| \r趜S4gT*H&yxxp3AAA P Jevv6)}ٶsmrrr***RiwƏU}$ITTFX<ojFFqq1Wv#((aI)@T*-K}n8^XXf%lZm``D"᪚Bi4N^HҚ"HJY-D'~g;wlߜuРABk׮QF*ҵܓ\.>[Q@@@S2۸,˲UUU>>>cǎm&U[o+W%3::{bd2Y\\\rk]l$nue=:dҪcq|qZ+ᮅz(Phߩwy%װFWWW׫w2eԝ7۰/UGF/li;N.#q"n~X=ydaaD"7n\6(Ǫ!56b{T)!!!!!CeVrcj ֕?Vo...WipMsp8vصkn?~8+ 0 sر,Աŭ 8t^ԩx233x޸q<5ձ!96UQQ>|555FaÆz̙Ӯ?zȑlX־]˲ǎ;sm Yʺp%''ӧO_zuϞ=! dffrՠAlEi4(er?^솺xں/w͖;ft׼ߧg*1sxr[n.0vc'?F˼zϸ鿞ġ359{LPV+Q*SG;gLb]FqC]~=''g„ }}-rꫯn%ŋԐ:ZQQQomn S6,ڊFqO4ܧ-psfͺuVNNNUUF޽{ݲ;=y似lJjRRRڬV"JMvʕr__ߤM>7dΪduS{GΤ~ht1Q|OdžyO?r铳M_zu.TI־~>kP^$JejY?:eW;ݳK,C̛=y{O2hDTU] 6nOO?yӄBnPEť'~p4#zΛ3Y#toƌuT4iR;vw[\][pL @5H$g7{)..AAG,ׯZ3't?i 'd.]b؀ϸLD7n*9NTٍFD#G |xf!9vLn)ݻ,CDzcynI #*-SʹxߐN.=a%xu+(,9u9l2Kw_KbMPEGQIiY|L'RxUEFc#hhM O;u՚`}L Uy_>q1mxYk}NzCde>GN\Bɉ2o+)Ujat:}"L8nh^ws "9\g7ZQxƕx-p'^^Ꚕ=qS 9f5.F7oZ^f[ Xh=]S;K==||QYaurkC~;)h""EviU3#5>.k:coxJ$ooG [%ڄ0qr?"zhzC ^V(UQNVyH7*m(":xd mtݖ+nr -PLfģT YFsh5+:f<20ʈDBqÞ^Zo0`hC5d1П4RIv^k 89Z^QPLjV,7LАf us2U#NCyPlZyE.]ݴ99*tݖ]3?1Z]SPXRviǞC%wzpj*Nv1 PUQyyBYh55ڗ_[SN|oQdrTAv`͗~ۍx|`HXc(ȬofieZ"}u: = E4Ih[蟚JDUj݌cgW,=|k[~0~kA=y삏|[y77;'^?v܈h9V%rfAʟc$~9kEvmVksfjSsRO]( !gmb,huuTu{qc|dxSq_F7,e?la"nromNBDHpC&m*kt= %eU~Iѽ|h2k!=cq6 ðϾm|d0K5$bhrM;O*+u+>)5:Fgx/=yK*IٛBvˋ@'6[nw;q+/\hIY:*ѬV=qmmwp_|=ꍡvJ`J%bY"7F\{θBQCo*RE-yQ (3yFG'4׋nb@ Rkg-߸@ (VT}ysWM{ }zW4e+% ΣUkZx\/'UTkmkFX\]s)h9kcaheZy?lWhIK "?F}H zXJfL/w?ǟ)*'@?)h0,˲P( :iKs_|d2÷"T="/X&"> mkѴ ;)gx #zǬǜF{ԅk!LmKMU.ғiC+oA_ ˟`0~0ziyMR=;m,=kS1dcIDAT~RqE%ۙ.9r!㝢螞ڜ:<k1Ց-> 񢽳ipd}Zޭdn%X>{۾7n1ӡ.\Oml(WW7Kzi!J47f2'\VwcNaowؽ'/9F _vߨe7w?#g 5S(% iWYWʢD;jD%@0sIic߾HH LL3'Y7ggF fMw??/,*}kCŊJCtȐ/?}J4?}πx[bFs:6X* 'M~GNrS gjSQUKod J{i%Z6IKM}7xBi-3~Uh_}aѓvKW_q'[j]-"-yEgzxx]7wo͜p"**Vl{ &WBiuQ!1.a7ڞG'rDsA4ۨvM5yT&zF;V,۫klLdlLdׄRY\nib#Y,5L_d7GYVS'8=y1ة9 ur/hP꺁,QdRjH&" f"\3婨ki,B:sYz`D͂Nw M Wk],% eXTzpP#)1'p?? do%&hbe/-a!c9s2={5+NhB&Dm~ XщvWy5 kh-(HJԋ.ɔFwn0v~Ag&% XLEmK&ndT7 'pͺo}jTꩫկY}Zh4UVU;bF3($$pC'](S9brfgsoR6+h>ЯwOosK _c?ԲDzd}q.뉈^Mr/ڶDSI%) oyuB߮w=, }mYk7| w+s֜寬˼)&+Wo*j]e+6w$%Ͽ\("2-fF{zh&DJ4"Xގn4|tf^wϤc9w[ֻ,V͢_l١_;wMxRO 8"JSTv-nzڀ۹ϭppɉ%`>G_}wێo.Ya(_e/qQee_ǜXtTF,}ά||~:ߟJ4"hfܯySv x_25 v/4]h,d<1,}G_ZCHUC\gZQ,ƚ]9q1 #|={"EajHrfmLh ͶeϿsFr_]}fvC]'/gfdž-;-kg> 7|F;gq|S5-xnxj,Z=?[6' [Z.:}fModžQ7]+g?.@ ܧɳA,"Roq,"8~b>kpS [նx1vOh4,+J{ 0fOz^&(:+ D" ѓi&I$Dzᏸ_vP(N]'a-B-9+Yy8V!g9+|rVs} J>-7c iCx*Bh׃$5tXHd:X95ċΦy{-H:.//9&ևn5hC&a?W{B iQ?ۛҮ,PJ*`/ 4-/k!gU5.ƱX>^>2ׇd4TU}{vJ%DzL9b-rFYz`-8bt4[,R Zbjgr9ʰ,_lX|}c#j BTY^Qwq~8/zm"ZpzP`@ jmmtd'C]ʼAD~.N@2 WPB~ ё|E"Qn~=':d63 # z$wV*odM(ăzΜOG:vWL?{S 2-n=zt oTŲl`$"l2΅(*"KxxDب03<4l NGh)NVqcp+-:a6[exzztvy)0P%jh*|9Dt+PUQ~^eX@ raZKiZ<0DIVpά `Yz5}{uקZ9r}cQF[[khkkF[ӌMed!"7xɤN c2ȱZᑺZy< KcXh@ ,U{{\uկwr+r JL&KXh@ (,VeJ~E%eJ*dRYKp ///,,veY.\"OͬVsw_<3bX$5bXVHs bZW hoJu P(5ܲkHDd2B!ne0jűa+pña@p7q)˲ øXK3rVj^,"H$Dd6{ H$±I,XcşH$f{ @ @߂SrVpwY!gwrVpwY!gwܝ E{QMBǠݥIENDB`dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_TW/fig/repeat.png000077500000000000000000001076641473346337000304140ustar00rootroot00000000000000PNG  IHDRm& pHYs+ IDATxw|u?lM6J $C)JQ좢g;ӯD{CzDk %;3?&,kv ~>q~泟~33DQQ ZVn GVB!\!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0H0啵~~,˹Mz)3gj>E t+X/O_>!ӯhq,91uƔ%4%"IfrgON6i54Wf]+1źczpf|lx`$2 rۏo4Y5nsF4j%Vv Gb0-V^x䥽/Fp}& 巍&W?MIwK9!~!I{[̏+kN͞<~mr *juwc`^XZ8=P( GOe_)F~v뫕r/gY,}G.]\|-ƶ+%3ڗÞ&ǒ7; ˥:F٬3Z)Qn*e/!{01Q/5j Zbz/T"J3V$RbWдG/je^e]c˹wM5u4\NA#m2U)zl˹e{|B!{?p^`4/_- ҆቙WK`H:^)3#B)Er#lul/g`zYaں$1Q)ưkq"oV8())z\?rPڐ89u _N7*^@_M\tǼƓجwb4YӀVH)z$%'ɦ_m6iLΤ 8~_Vz.dM_ߎ"bm_ ~";] `ԯXorHLSg~>|.2,MbAӔbmֵ+':o|] F%yp^Q?_wIzګRD^VE?`ozwFgbZ4$!c! ˝o #d2]@ AHRHC`9I`Y#!A,|;=_ \w]SjkǞ7ZxŮ8V lRz*ؤTX5SgWhd\ Ш Ff;v:je!їs/|h$ XlZkk&Ǹ)/}5m[P#E!JRc.df])L,;$1*]Caq_&K'FΚ:7H#G 9{wJԃNN6F {KopuP@/ 03^n$IrI$򚸘r\.% B54jKʪ9-V[KQ*[61}.ޚب`7eR 2M8:TRS>V).ªnk_#/ͼRsF%Vhu i09QVY;m6-huz z^74*t:2uy{f>%)8.8'rA`wӌǑ$li1V`h1YL؎L*+G:!tsL tHbŬqs['Dk\;NKxp6;u<g4Y"O&{&uޝ}Po0.?y/863T 0[lM-e5mvL^]/p! +=ݔ啵QkܔJRcOkUb1r}XZms a l9+VM 4) Nf9nHb>կs:11>W8 LJ˗\ծU?|>kܘ!jӶ|~>Cuy@nAdIw,:{ڵeZ^DfbO@B\X֕ťJ,4ʵbo ZmLqYuqY+B(R>$1*jQr\X_ɪT4\nFv}m3tSA̟39qlʇm?~$M646/?~_Nl*Gӯfgjr4WX\Y^Ye0 &b^Y@DtDPUMCqYa|4a!c#%gXq !B|3k C[/{3M0jXTv[P&n!*|DZ|?"I wuQIUyU+o|.qnֿ<ޚ'3gMJ7zA#Sf俺j_[0jgNվШ-JĮચҪب:{|ب2B֢7~v>n4E8R*d5ޡ~ux[]vxJ)fT>RP'>\.s2W/+vW2x"jrn]CV)HJ2XmWsC}kw9hdTbَHbƭ;ތ\&Q~^|IB#u*R!cY6dXe9DO?X,VBSD"'DȞ,7U ޘ[P6(.(e+\$P 'Ņ%+_k' J*`׻=wCwj>'板tedO ^r ?u_pW+E$yEB:~N#J!-#B$F];uJjrteUb va k"xPlXdX` i2I$Ar*jcJjrPt`>ތs"(D@{41 cX]8  jkkF#˲ :7Wh4չj#A* L&Xu3 c4zfs;Fpo=EwnF X1/AoaA8r~}F!`#`0BH0!$` F0B #!BF!`#`^(J$Q o튿A6a&#7r9A-E"& J, Wc*8D"iEG$MiT*ZvUCw\n &/Bw HP(l6\.wI#=@QA2L $JIa$ nA7d|EQ8W1Pz#! F{)`:F4S%8h?Gq@zì1}KPp9!DlH{~9%7YܦXl]۱ia)q!A~w95_iE9qls]~r5ǵr@7MMX.\N/]!s6}`#'2&Kֵ6>zݬm1:OVXR}3E86&X+nv y=ٮMMﷻ>IumlDag_fBVK-7Oݕ6rheRxG> sg{Z456:6TTj2VN˺\B-kvL'ƍLX|~Z~ŢySs#Scd2ilX< Ř>b\&i0 M-ArGpVfKl9۾Cp@ݚc.ee!1M͞>^b}OFDVVf\)_wlѝ!t8nsǦD2 ǥd8Wra]V%jŹr/@wԥ\{Dz`W4ncwwuG\t]SDٍ7tkE/| ",;l8y)pՓ GB>"Z@@n~ɚw@ss˷?687y hk7tq窻Chi3m4-zR qqˏWM- W>߽g|w3 IV*R -Cr. w߸xgHhֵH$9©SVO_=Q,LXh}[#!8Pw?caퟏv6~?VoJK;}ؑWP $OMLOUou# (KLPx+=1?,pj}Y<%8З `,}q²Z`9%!ᥳN_䨉iNppםQ'qlL /o)\PB"QJRRV.l}|C`Ǿ3;^Y@]?$/1fA1CSq64jK*`lK.lƱB|5@G9%+"K+rJʪ?|'Ϛ6:6" s-i>yR1qS9t(4 <4nwZm'(8kE>]kоLǗ=6wФ^!4@83sZĔaK$⭻VE.{XL3,ݏ?=Jᱳ8{mbo6Ղi:fP[C;o-",O?x \ b1U5WsG$L7)OIFKAww]5Ɨ^>|V˱c9Bm*ZR$1v@_LEEEZmwA J]TЭ`0L&gZP aqmUQ3!p]zl6$}Bwf6oG=0 q B7FFpl6''B:d\Fp$DZ0Bw a!\pψfRiZ!_>IJ,˲qkecDAӴX,/"t[,q0{G,,kXL&  $I\#Hn!M8BF!`#`0BH0!$` F0B #!BzC$IRI%#n?DZ,kZM& oc B* P"> m IDATB$/ɤ],ND􌛛/Bw8T撦0{@PP~o@EQ v0"t/BT*ua݅j{cwMBw!48p!p>0Vw|t]V+.ش헛0챓-PV^g.Ey+ B8YFU6T4tYqO'n.I.^nnT9TԻ!+0MeM:es%ޞj ZcRiف>CGou$,$KVmP|Dm]+!"Vd+3r-Ǧkg.\}pL8u6atZN~B;ju]?kƘبPx[~N]|Ԅ6ggvwkܾ~iy+y"B| Z}}ᅭj׌kjm\^5\bkhW/,i|!-S=yʡ/#z% tL/2cd&?#;xBsDD]}aX_D].k)F|dIN,Z2ow$'DoVnၧ^w|ߞm6[SM}T9Ps6u-]Y7M--GN/,8u>%rR!i7;]@Hk_"Jx}Iō_ q5❿(.|o͖s}Aעs,i? ^E_XRqwgku. fpBwg#bF]+y[r^hoUMcHxS((ZϞtdM/~JCn qWyE;>RXTַ/]G5|pja U*EToTsWw V`]G 5~>p3 F`j_ӽQbx[j^HV/ uKY QNN])|cBV[m]c*wr:OU)]pg q YF֟N\:phFX@.1 nF&D3o~C)x3K>1&Y-[_) a/uc|Aaqk._+olyh&ЀrUO/_9ԹϿ³* 1Q!%oi#E:e2'y9KyE 8}ddiv|3yvUz6Ukj}]sだ=l}K_ycc&Qknn6(p]B"g#e؄0wð3:v^[Ϳi??u9Ӯ3%G,Gޣ?l#DaqEFv^VRߠ~a ^kU^YmN@XH MUUO%Q y9ܥ܇() ӑzДw? m&Ou:ov&GMLOs}YWXZ+x{}=cB*JP(dl'=бsj{6%9Ow~Q7rV͡BG[R]RŴƼbUw>~%ӤR=>yP%RxFphHofݞX6y7G-WԿ$4[#d7iuzZWz}r;~:j1,t~C(J y'BC_\ It/)!fou)!>OBlX:Q$j=% 8~*jΔ}#5)<59FizbzJ}CsUu`鍑a>mWeې̰컫7J%%&R)>~Ȭij:ͺ{f }13ggm D"HIP'B \ ˊngt8Нɫ/oEBF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B #!BF!`wqBw!48 Ų]@ ,FpwYVX,-`wd #0 )3L6F0{@;GV^winnƱ0Bw8ɤj]V(zd2I$XL$AB!8cYbfa\,Fpo0 c0 Ap"!BF!`#`0BH0!$` F0B #!BF!`#`0V~pBw!4z03dQ ~"]y2$Q^1R>"4^21[5 EL|fHLm?w!tKpYWl1J^jy޺俹أ:u3VJk!g6[BE~)iJ |=)*`v_xiT*wVrk jsenHeGN\/<`0}?aϳS)uZ=~AQ+j5jT:(lpyHl/%W),y͒>O/\!tpY Ͽߥq/rSCmV铧yťy38/MrZ CM i9P{YV]S[ {`MSb1hZ'J˫;܅;0Ը<⢃]Un>~4v B* 4+#pF0˲GO\z?|ܟxp\\.}#Cf'M&sVPˏP/>xҸNv1_6/ kP;~['q!t3NDddm)ö=u6}G?zϋ/~|MXd̠%V4Ƨ5b͏mOE"P{F ?zPl_c1DpcY%g.Sғ1-ټPx՛#nָN_䨉i.Bf8Ҽ|PVMM(۞D!k"xqsg㷿\&7^=%/X " f梨#C:ܥQ[RQ/Hxݯj03SL/Lש,. FuHj*ٕô4MDŽ-.{摻|`ͻO)ד*).dD7"HD9 8 L}$puOW{Im$F0BDBi^70Yeș9d?ow9?8/S+'f !**]a3lkEB/,bMjg#*guM}aQaI"Q׃5^̝2aq+|oX`aIZ?@L $k"!P/j|pB #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0!$` F0B f@<󖖫n.8^2'i6 ݵb1 AQ";- \{x;C'-?&Wo8{ %$A OM$tJ˫:  M&Ke%$IŴ;,,xZE'u{W.~ kuzR^U]o0#ÃK}_/9c۔oqIIJY=jMӿG.O=4uEhsAy, ²??V2M/<=Y9eKLug~,:/׿6; ̖7nU熇|vS~qu|bO}Վ ݣ's|pvXmp0,+"I >vwxh}5Z횹GOpWf;ot,_j~ci)qp={飇LfKWTj2%u^V!|mm@Ae6쏅Etk^ԙ,:rhR)i790sbj⠈FmN^iUM9 44h+r˗.T\y:륹YؑU GNfL5þܽ /Ur+o|gz'77uDK7)Jʪ|-+('m26:qq~{djtƋK+[%6c\[m.D%/O0?)l.Ҽ\yiϯ秌T텓ǧvϬiM^B>|;)"Ŵhግ䫝7 >"όl ^XqoIoͦӇnǼ|`aA~>t`ǩ=~~O flKΗ3cQ`ۮVӾM:#.:ص]u|͵GD?WVtgXv̈d`Y$I RMT*dxKY3r~gcڐx_[ ݙ&eʚ .+\~? ~{Q\ "o\:ip'"ƿ;[ں(XRbUg<~ B:|3W?Nkqma©$IΙ6u?\3r0_9#;ݖCVG\kk>p,K#NYJ+j] )-N kSHE߸&~Ԩ_[u#.g\.xd l  ilzhL{1L۵MN :t-C'B$'DZcEqYSGFI3sD!g/\nAzɉ">Ys;PU/" DK_R4a/wS)$4XB4MSml.>jxMn[ u ,qmuOn)oOMR\S=t삘l 54ͼRsF%Vhu i09QVY;ml;ꤐ@cSf.N m;2m`/q "o\<l|my~3`Y||'iGmO0I!,&v)ewuMf,=Z&Z,P-[4`4Y"O&{&uޝ}Po0.?y,˒PxK:q%<ť5MŸdx7.ǖLU*f &" y"R$Dp+a5o(B 5Sۺ G=T#jN?{!A~ :11>=y!N]h]D|!o|E%qǑwu6aǑ)1]d)ӤҎGj?')"o\uuM m6fCw8aA4~359jbzKzhzj(6?룺w 2<4M@RBԠ?n={;0ɪT4\{Fv}=K鷻{ ceS>rg'u/$"?\Ͼ=s[BƵqs+?z{74jK*`creQ [^jE0[OzEj<.Ϸ_m1l뎻~928F!Wy |E\ݲKO>8ɬ0lpP"y׊#aࠥŐӁsMK)2NjP_s6IXlڱp!1AU: %"~~O*IxPd?^Rq_D"*uJLjcب0_wZ)W(d T!d>rcgNu%8).ߥ޾NِUG&_YXZVc'ud6J)#n2A/X2 !"ԧ` bCʤu[3FkyӔ wc].Ҩ&@S 6\o(__|f%M1#wݕS&O<±ZqiU^GD"QWwhS m8:1>&44O*gΜҘWRTZ6p F!aj|pB #!BF!`#`0BH0!$` F0B #!BF!`#`0BH0.~|'BD"EQ=Z+Cl l60jK.!'LaYa$9cY`06J8N"b_ IiDB4q*6#rfS(.ID"Blr9>`#dGQA2?H*$IQ8 p. I gNu)i:tQ0B(pxП?8w Z&FY6p$0c7?olD:][4gBl6eo|:IOGM% gژm{OK2?8}xVdx-aw;=u|c%wXoZ u ͎5 F+o|X?Sf/d^Bל]:o w;o<FɢV)ON)KMq-zL&] YPV^C+_[Y|^3 |}/k>zlydt犪ZZ&'FIYՑW}fLė-֝{f\){_o٘/dd6 iIS' J>uXLScG&fӛ_oXs/>˦LVU]wZqQ,狝5mt_LB&m9n!~;&".dٳR!@C &Ӻ-ը"~9|~LG 3r0 A@lW~/<~:qqK0gwGv0Q\Zޚ-+璟²ؙ>"~qWs?rK +i IDAT6kh-3򵢏>ʪ%rw56L={OKN}1cδM-v)ѰAOmllև߿`"s}⥺ai1j,˝b,ȼ\p%`4C;m.Q :^47}DZ|n_2xPCg?l9)w+ ie ,I3FOuJ/fdO flKΗ3cQ`ۮVӾwuG\tK fń@Lt󹗲|=kj.fcAqs7zx i>^ ZZ:yϜqj޻cSe'\vԤ;sjbLu+k N>uw?^߾χ]`Yǽ/~ 7{|]rYOowܿp }C"DmGo;oFi~st驯`|T`^Ad1͔H) 2A]}Sc]͆1<:1oS[NFw8 V/>%MSXӔZ7@^aTByHD |h^^`2eRIB\bV\?*ٱBV++9W\-NM$.ĪkܽܣKtoN!K3{eI$5|]c_D$+׊68—_+;cbjm^o4*|ܨ/N ˾:Aa[vpWMf/Y|.?Z2Ӿ"bc (ߘ̖r{EmWTIĔ흴KkB|/u:}~q99sjtc{ff Imy8)>$qP$FpdR˫{{ Ma6P\4E8|_Ϸ)>~Hhݬmm miS(cnɤ2^G&r͍z4M4O86xnI4%6OɢDdb| &I,sX|x1Im%EUO?<^[P:(:Hc1-/-guMڰЀNzx)37UKzu|㺳VW*r>X߿}wKriW`.M)CYh0>b^\& UuATU$LJJ~[۠sld36+"x?z-R/rFm]gOHQK3oX痓Ǎ~NgX7:b/̼\4(ܱZeU{; &o_`0my4%1YԬ5 MSɤ?n[|ZuelXY/˲^!.&l֤|S&wטo[vu|FU+*뼽i hVo#"E"JO}wC'k3Qziz/s'd<óUq܆m5^|> b͸R|o/Q#_gw)`԰Aps:ԅS+ouy I^^[|/E]z_w׸);^gڤmߑKk<4j %Uu`' '"|=Mf};yPܜN_䨉iT5wY[hH:d*jU93'ߺ~3GE8n#3 y.we6KGjj=ÀEoVPlѴNjĸP\M| Bݪ\/wX4u°IeWgehӵ^bhb=yZyE Ԫ)G 1D":"WT4zX4&̑& ;z͛>2vִc.:@.پáp uAf|FjĔ訐&#+YUBð$Iԭc#DuiؑE"zȀCRikXVCj P J{¾8ZƦ+BwYN6vZ$I80V0BXy&i!] ôB^gP;P-$Z𳅚,˚w`_0BbFQ*&eYfn85DW6#`H$Z H$`3y Fd2<0K,sg4zC8  Ii@0jIb18B6B6B6B6B6B6B6B6B6B6(#)iZ 0 ˲8S0P]r VRyt:U@*JOR,D"LlFH$H$"yJm#r90 (JP0 #[b豃P- d-#T*;Bj 9'E8M9l#T5oi`$F֌sx tF0jex Tm;dza5%e}kUWmϔ n=x-qg4,&j59!p9>DV)k8-,;%,U2?EBULcYRWkX8rk8kꨦj%V`9|QHeYn³3F8:(WڟiQCo7^IԜܢ-;O.}˗\S\]Wz,~+<5mlA'c+(vrTˤf)8}ZRjC|i%fzLxj30 {k72*tёJPY=v,7_:ØV2}␟~;\Y]c>cRe#*(,u\BRҲ^!<ѿ%~'$@2k7N [e_Bq͍`zwOpYq>jEEu IRh!U*!05,do7aFد+;ebtrTz:woQ/-i p>.TOBK)?_ڿw䨡 kv8?i`JAC;Sr]iR{D4e7╤P߮w;{԰ޟok::sx/~Rif//1iϜi\lR78jn_|R%X g|~?^aYy2CIiEyE\Oc^Pۀ¢flU|wt"mEvwQk5+=.~73 1zL* d^=r/7҆\{z;KgXW$d &.*.)F?o˥eb;K55zç_na9Nh| Q!7'ex{۸';TxW("?a?Vn20wͲU]:n\wQ5bHyͲ& <iYOqw>xehWT1oTVirs: /iuݙnVUiӲ kYb\R@OOw˕q iH y߹Tdg.$J/-+bN[X=Ps#XR]K~g}MI˞Hw!P-W2rWɤ2L*Q)NwD"^bfNԯwl.^)2shuzEI,+4@dFkVv~JfB/)鷻t[Zcl|I-_XRZQ\Z!^MHI,|w٬Gzm 3VW*}Oe[/MR_r%rÏqyś~?q܆_-,z`9"͹IT댈8Βjr岗&zy_<}G/=9J\Zc1<`49:3c#yطJѴs ʄ]-r]:{=CBS7*2Om$J^2/7;F聚Z)Չe37]e2DL3|= zaoVTgD/|o̼7WG;CtsrRL")֡y}&j\8^^eIm.b‰s7>;V<sצ{x FӵĬ^+(!̫7w;Jp%•TaMiEĬy I/ɗ`R_R3r:'$e>=aL˫!&,==\jϸ8**uN_H f1 x KKJ5rݮtD9@۝.ApUUu?2lPt#YM~ϛEՎ 5ba[Sx*>֘<շSǻת<t\BϏwt!=#"A!hVkufnN="qa=o$eV /jFpiF!xT{=שNg((QqrP1zܕ="gL.sYZWiѳƌٯW;pD_r̅Ic׫]ݼ9^o-jyNϊ&g=wgxg T2k=ڶ&*278y\ۅݻ[Ƞ~QcԅS'qtT%/z~BVV(Dw tzⲪ:!Z_s#83;sG_R&^|-)ZR]v?=)4OY bښ]4E.|vܝ 7i9eU3k݄ˣES' jAXvXjp}Vv=])ۑKp\B%ϓ+\7wŸBbs`s2UeIcS9,=N^ %"MDSAXR|N[VSBxϛ\WgUW"YYY>۸{>;rHDнuj6HּN..ZP-T*۸q^nj55̗!;pE` IF.3 P(0y#(JP0 #m]d0Gi d2+oRT;AAn'PsGps nl#J`# 8h  8hFVk;W{p/,y"I$u:h\/4E"T1UT\viFJ,y5!VZqiaBVg%J}o$:Μ8_ȣ.9}rޝO&Z> bVHMfYjR㮥ʤ)Fk8=xH/Bmx8d~%,=p_)ķT3'J4cBwgM|>Q-J^[+hH9vrAQ2%eUoLѭsJn9Q.@Z̜铆 Ea#F47UZ`,+(}cYGT0P8x_ߛKQYW}+,kтͬmʺl|]ee-fDE)vΘ-šO:9Yox?zȲ񿮌Q#qWw8yǽ0W} sKZ⦿<>~9D;9}=;ukfU[ZTDhTD莘#GN]_FL?|{rgLj?K+~9p3}KS0˲_ۑd"= vڧgx 8ە)\s肰l0lV)Z<F D?ϓw!vSo~[+=ӻ_zӪ^e5H|\_8+7}uap3MJE NNptPV8.6wR܍vY[?#{{BXs6Fdx:dW IDAT 48.44د\S A>xnoEt JeZ))< {wln=u,,4% G(vwv,l_K~Uk”uw W"h~_MłbbXy:7nj'sP+s2n?9Squ;jݦpVo1%b_jf슣䰧;9( 5*b9x^X~bHV%j?-o, kJCsx::)G9x@wy JKIhV(dB7zhWg7=ΏzMxׇX~AK/:s p7cMkWlZb^_C/#H/^s[vзa*T cGD?1?2I׈H(J]GUv{{D ڐa6m=52q#CEu,S7n95[^}c鸜ܢ*Lzw6qR,.hssƬXTrz/DG͟96+JGpjZaM ÂFӷwksEy͚ 5H #iS(z=sĠ# HjOl G³/bFQ*&eY[ 58xh4]&H$Z H$;ܯ~Gh4L^ÅbZmͥ! 3n}rIߞS#55d2TEBW6 bqB. tqR:*{8%4NVZV,||ssI?o xzq2͢|ڟ/qvo"l d4M4Eį;+/PȆ /+\Nyn,rrY;9eRIkۢn䗝`D"[s{o>~/g?[k473rWk_{~\l\Rl|zRZ!p|{"vowy-Z0mQ,wj idH?ޘ' 15w+/X0t 6<=uyEe]18VZAs#ÿgּ&_ t䐞wAQraؠ{"ᩥ}c%/L 'Gs~ͬjK;||n~遅E˥*^|\2L71,{h*T"䋍]uHK+~9p3}KS0˲_ۑd"iA\zKArKwh!A.PV^] Yy{_h3*x_bmPo-z[{v>k8@G;c ̜'ӟCs [R(U=Zڨ9]}}՛V+i6Y[[˗E9ݭX'd}>bѧZ[ I {c^nZ$%-{gM޿O7űA)3*[n [?w[z֦0˲kq39sҹAm]Adwe `9Nܽz.6!6>5m3' 1#eR1<*BxXNF&d$V){GG9qFS=zѤT8 ;kFZ?$I<}l/_:/7Z۸[#xΔ n/8o1 #W`Z1|@K*ya0c@qtT_}?[v߲󸰼ӆùɃF8:(y~֓ز~*G~o/W[X֕BE7m?n~xgy?wI.^pFՄj:-(\XfݫGxX](-̛9Ow  a*o7 دJE߮zѳ72J4< K~tE ̲sB!>9yĈŢS*rtP}ݟ$єGWUiGTȰAͯm Q)*0ޞno6s;L{Msn.BЁ7o?:ui=Crj^}V~]g )O2Ry2ℤg9xG(0K+J=G KX@aQ\.{a޸_ک.!ez͙ ’oO7|}<& UUZ9x~S Nj:,4sY^pu> B.kMuvnb2sS3 v`^`ca"_bL3@b1ĵm1o!|:W=?kT׈W&_ONNS)3& ;yfX䱃iސ$a;k#A9|KpGǘ>C&$JXqۻh5 7RC;x{ ZIs#8$ÿ`1*Y=odHo۹Ů.ͬH7$1qt_!Z7{ڨ.{{FrD%QH.Dش@dffVVViŵ QX1{$Jz[.BNYZƻW5 qMAE \A'YHH&0 $I683!BM0`u-a+ XyeE@BfM0 BAͤu-]n$Z0,k>>/bFQ*&eY[ 58xh4&H$Z H$;ܯ~Gh4Lt"Љ_W8yS1OΘUGO]6{},{+#G7ƗUY]%gf>y5!䃅J.kiqwe=`շ,x9hzQqٺM&^>WBRggWE47 Fӟ/%.>é[d^*Zi.X($I8@=,g.&+t5AEQx>ucNg .}],yaBpoj;9}=;uk7ѭ+-o J*>QzEG899|OrdSCGdsťO䥩uReٯHJɊ vwujjDEFE9rݓ"n}ނ?na7wc^-Zˤ_~HXfYӯ~=$$'%=wN$I>MSEE%cG3/܂r{uA!o#67/^Y^{,zvlㅳs ^r/qZ<J%ϷX-y9+ӳ0!#+oK-FRVm&j3^@!|u~E&/7B^?4Ԩ/wWw_rUkt;2/{?)r(bt’ʗ+,*O9e$I86$ ~~A-_0gl K+&~I' ocQ!7'ex{۸';TxWt"?a?Vn20wu6~ÜiÅG{V]:Tkk6 /$qA{Ţ>Z's 񩁾n;>a0-g5FrFxUm?i0 $bڟv'ʜ5mtѠms?r[_{aʺ jEjD".+YlCA{:&-Tc zK$[vݣXxO+(6z ' ?NoYF&{(0,gWk9"͹$˗Lwsuw?qaЮGֶ_.tPdV+RDlNNjmZnlzw=)WDmM7%-arasXK6l7i̠+ 磻wiաV),-.)߶"|<&>]'<\CBQ!=|} J|ś&]qhC#L} K*=O3鮭89(|sWg1yRa<3fӶg/%ѳ_X4rhCq?!+ޘ2lcgrY{hպ Jz R2^; a!>c{v |%:e_[v^|1>99-OΘ0Fo_tw[oٺ?M`>K$y3Λ6֦\+"gg=}<3}0.s _J#&)4 [ETTG]<)Zbq~3n Ά9_W9S7eIcS=ow Ry]ՃFh OJɼ[ # _V-D`$u@q>b`ԨEJ% tM]'?og \s;uz\OLXq_ 233+++ZZuKڨV=J-BI=Қi6ٯZ\ 0?9*x (;pJ $&a`04R6vaA neygٺ3` $s [h*#aS(= ^0˴NeZ Fp0$IV+Ķ0z,˚cϲl[J>a7X,h4<ϛL&0 p8N5L: ʸɞK:[}V` JIRDӴ33 bƈd1x?A$I|C4mR$ @b5=%]Vi{~ I[p@C\"_ Kro`08)Q=#y8xnavcׯ/|sXPaQJ%~ڳץRI VYhg ]7x糰l/PbYj=9xMvʄfQ)LI <(RoWM0UJCq_$ 2/ =5d)'aU_xi=ϖ];J1l֕kk ŠaAw ii'~v1v~VNA|BZv^Z)I !k/$L)5k ZR~zq/>L)oZAh{̑ظ a$'Mȿ~35KH?|v@.Zj`aqG{V PQ+), ?8UDp׷Z[`0v ;,݇.k7RaגvdԴ+).BSUY]3upOW[1~ PY߹2 F455*vk h{h|>">;G!/ycnQ2Nlg5%rG ϱ@c Z? 4 jz=c3#9&uЀ݃ ulhtXLVUZV*b[^'IR,ۺ:@"2⊪a[ű``^#&j&+J RI4i@8HyU5/np H Hw<{A\-Z" F H$ ل0&y{ha4+d9^(V5vMlFFV5)"BGl F0p0 qmwTAA$)|7uuG,2k#E.0#I;i{!````````jB\aIENDB`dde-calendar-5.14.13/calendar-client/assets/dde-calendar/calendar/zh_TW/fig/type.png000077500000000000000000001204751473346337000301100ustar00rootroot00000000000000PNG  IHDRj pHYs+ IDATxu|GgfwBp;ݝ"HѢ/PZ[)Z5H .w @BH|?[\n;3;K!BE^^^] B}P!!!B!!*0 BEBBQB" CB!TDa@!( !P!!*0 BEBBQydLy[,B!\&IwR.^ ߿XB<RoߡJ3e"B(Yw3=f42I*UǏpB9=g%B!T4j7׾QSg/GDF?_tf S8@!;Lߨ;On٪jy A{UkV0m(QB"+ 3Zez[mٴY$&&]~2bp}wjD!r@$xI=|zvmm2XY2>8`mmE!9 *ٵ1'N_xrȘɕK>~Zʋ"BEZZȫyuw@xduztmmcciѿLq( !B".-MpF'i/K1yl k渋,yrhB(x9 Bw{bؗ,t:d_T2f!* ^ȫ!@s*ӱmS(y&ȉ$dKEl @!r#qy7{AI) 𓎽K{/W}F9e6qB^3s z:9gjOwOWOwOUʫT"bxxN{"B}oQTLV$Qwuuj_^B#$$$ kq[wd`0hZ"B}R`oSF%kKR}8JBZB}0yvU ZU!B 㖀WM&dR*B} >XP`?B!Qぁ!*,0 BEBBQB" CB!TDa@!( !P!!*0 BEBBQ@?FcAW!л{p#]IJC a|ew, PHppWn65J0j?~X~W 0*nJ.WcKB^m 0Jr ꠂ_ѰWnsB+GPT !_BHb~}D_] B,W!`eP0?t%B\裳?kB(* { 43 @}swB?, ŒO,pV`J(Cфw"P{Oq>"(Î!P8Cr"•[ p%;~1S<@!p# 1;"4dx;$%|ۿ!*L t-u-%/3)@RLB)W5TgZd}CGH1M^p/uR`~ƿs]/Bx@~ ʷ<|Udxt b<<"8&%˂^t7@KF< R͙B-y`~npg,se2V0ա7 QnpmKo4dbU$@p)j`! \ buc  oCP`/^*[M-wo?b%Wq>,~a@=XPQcr"Uβp4<̺E1:PZ`^, NX 4a`\OXe`Y@Ol7_w<&?=MM\MGFrj!j'_;+Jb؈]<{];OގR]n]YiKz^zzdSvaSA֪S.#^Bs#GoMŠ*h3#\~W sƕ_ `>X/˒2`w#/g٢{l /`谨#?4:2U.\\5#^vܼr=hJh۶V/SB̹:j)svu['wêW&5v%7 sG'&|jj>FS8v̀V@_XحUkzpǡ^nn.֪7O],vZ/$Vi~dsgq_Nc%Lm@aaSh8PZ:88pFNhO0fk ~ hWrDȱ5wB;y{s(z!/E`rxN;9]18s7FCŊ).;G>w|~>wob qt\'+So8uyNHJ tS_XU\z!Pʟ ác`Mt!H@A Qp5f+rсeJ3'@հ?~p^>v=+K9) | w}ŁMص?>Zk5gNY.?*wIEuϟ2_u\AǂQ1_߸òeG~nbWip*p&h ɰ`ހY&M` vj Jh^ e&d}9 ,% yePN==$^iA6a9>052+>ߝv-:2VpZ;7/,y&V >0LZ{$ƘqB[ΑԘЈKN>wXNA!T8ظ@]9: {ࠅ .v*@m <`  b|Q6 m n8~ دOSoHz徠IN.w^]1k0 uvGW<8Ş;b9번_W?3Lz˸@QNx!8Uq9Gk^ʨft(1#RM٧Ό#rBMgzAU8-Aόe»}M/õ\tf7  եD@ ܻ S <4i0_t7a͜@k%k5{/(ml7 Xݢa βzv_}}Ek7sx1Y4p遙ˏ8?cc*=?_s=Bc޿O K ­⮀jU{Bw$ Х$($8'4J ?̪Oa?Nk$I|f}RwUW<6lskU1oZXFg 0 >ykt&Xg[qT>+ N0' 0$ :zlyAewhi +T.]9 ?WD^@|h d|75[&=VjuPbםnOH_7fM_{\sJ ,UZm{Z!PʯKGpÆ!PD;>P,L8Ljv`Xx>,@u?4/ V n^IУmu[&N࡝#h42r : =Dp0#@DQ ->u+o\(I1J;{/4p^X̥'/?]*:j{?Ln% l0gk0qqO[%cA!> ʀXqކ2]h洃eYH. _xA}~]|` 8=q,8A0ڗNM]όkE@|Wt!oԾxՠ,_I95M\Zx}+m>)>2(9/ymV Vug[)Kc5h_ekV# nZ-Eêݜ#:xdBF/Gg!n@Hl˝+8yffh=5nI;Y]¹{p0nC'sW`Yڑ0d' AXX-הw9"n'/YT68`ϳwT3 >rgBGՇ[ҿj+2@ \ŀ}o%W}oxǕs,=a3?@Jx9Bg! &:nRbSHkaw?gpY% 0U v F_ |3qc/j;fݞ[dx_>`ۺ+nέf ˟~ٯ| *x$5tΤ~w;/z`_1U;%!Th0e1!j%vK~KoN6hP={,ڑ]O4(}L̩Nվ7V}:魪Z3@| BCP@>T3}J>Y~䦳G~q]o #[qש˴yxfO?H0G9yrծ]T9!aؖզb``(}@!rԓ _)Lߴq/kSR k_~ں59hںĆӿonя3^hw6D0M!rCbRkC!_(9X U? x GhŠ_%^*2z 7G!,C!( !P!!*0 BEBBQB" CB!TDa@!( !P!!*0 BETgov?IzW(wG!~`^cbl@ ̲.2WםgE# xaFz-LFЩ !PaU!e[?52^EڿỶ%1Wӻb-ۻ8kR`UE! rı C7\0ծz/P&BM=rzll[}!PW-ĪW-W\Z&- 2@tnYXJ% @!GȸTI2$$8ϧlU@͠8<#By ,zߟM[ɴ\_FWUTfzRw@X"[YB8Bc s/{7jqʳW۽akj>U qs+aaMxA911Ņ$JIOH-Kp*6SPXh OGt,`mg}z]o <5ڡN. Ypڈ7 iaRk%t%ч G=U hݘn8`WVyl̴/?̴j}JsÞzrm)wr{5iV@Q_{JX;W?{_Rviז_W;Va؝toup{Ԑb袯.ze_e}+ !G@f?.72>S]j5;YuCvg3-PxxsLj۲zN9擯uoW! YzR;h'm c@5>kxf`qt # cO4hHOH|OHtW0I2BjD܉a%ݫκN`T fQSܾ~., |"P!BVӿgz%,Yҿuri^z.iMr|T(md˫ Rb@0K V2B/e6uWOܹ3/[(U/MHQaP_{O.뿄⽃!1#kcʹEblra7)|kn| >}`U9:`To*0<[Yc> mv; `*wڢ3Mlzpu>ʜ E!2lE"lm,N+"cƈWw_>vꃚ_t׸ɛel>=Y|>BTqL5.~OunkO v~ʘI%!r NJԺ\-ذMFkA}?0x(f}CÚ BG P2ZT%9BPcwB!TDa@!( !P!!No IDAT*0 BEBBQB" CB!TDa@!( !PU!%ܶvmKqR eI_2kzp`+qbs̯<zlΨ΍ճw^a->&Mq!P^**j'7=Sf 9v3?'2 EIWC99ڕǵZRU@a`Ҷ|v3]?M!w\ЗYt,ל|4>LZ);Tk؀es7 r?rI̶B* o!z'dcJAԔR@pȳx+KAa lܴ,SO^3r߬AW"xV}Z{jJ1GWlY3>0L,u1N q҆\ZF>"Dab%m\96H.U3kP`O7h1}࿇Wtww_mh!n%9:B(`` Vz*v%7a\IK7No6:O?)PL*%3Ok[%]e[m[yUɴ@<{غ3&7~APיg'bOq 0L?6vvpS%d\WXX(ş7S+@uJΫkƞ㏃>NlꢳsS1MIz ?/ok (TۊBRbSozW+Js'fF}1y 1]9 ߿fL 5s Dp{a+g.ٴQӆ xhc;"2)6ʉ)էX̑} /ĥS~=襳=_{ķ]^w*\ysY݊jjޥ:mD PVtͤ:=l!U #v~;y΍*Q*[%6Х8P'95۬6^kOdxi'镲ڧk&մsi7?)\ol#~xmN/ ,w/. R5k[K_g6A!χpf/ß!]K Gi wܟ  f|7/>zW-{=]{B ԡ{p}ǒ럎k&UOV6{gS3xt]ϴ3&Q8z; k9jOW ?: PڽmӍ*_ Тcr~ZF(YEC\ASY=}͞.Xsg#QY74^R@zg >+e:o"BW-Q>o {[b"xw%Zc`(ص /0CɓrkR9>cetWEc-}sVU-|kCSԦiǻw[ظjdgQ@82on8` _*KHg,Z"u\:EK;{*DY%OrA؅#[:to/[B@93jЧH|~*) !ٞ!rN}(c02/ C:6D~r"5ƈ~mO F|EVіG<~\ӓ^u?#z4e*|,~h rh8caKB|Uc;i-cwiȳOTy[ohP&ISSa,,Nqؽ,2]J:UΡL#6` ի=3$*;gw;", @Zks`ɪ5Zڨrh%f|rxC܍pRCO/}Hh@J/Z$}lT|a89T(f\4Řs_c#Bo' onuuֳőo~?X7fuh/zUeޘŜuR#%F; %ZOO gMK}+9]I++D?0Bt\ݳfJ%rL 2ӳ;@b rgX'[֬<n~J}F`h>:~T/C>N˖ kq GA󆏙4e}sDQ$m!T]IqiC3$r iqY7DǙtˢ)hYNlso?dm+n_}|^bВ?-IS]*jUiG\sժHӛA.|0X\6@w,kluXIcp7{ç.fYqB!$1!-`>0Ծکe9ڸ5M;U9zfY8pyp 92wйJo,ovo޴\$=LQcݴVC  mbj%ϧM YN9k_3e9$Fv@<GJ 8ZTy>9붞PXI?wW+E:sİ;v'l٠E[[غUJ嫇]cdz퓚BQ(<>5? |M Bٽׇ(0|~QJĈ*ɥ*B8S*H 2H+ZٙDEQ6$K2*iTF}" 3$͌xfxNR<55A):I1 2!L),KB 5ZVP @4JE&(8^VJoHD5p&5٤(NPL D83B(oHl2FۀAPt:OMEP!̤' bJ'&,6R)DTVj*{}r}XBhfI&̲ZL #h61M5!8BPF@(0RRRnW(dY$IקXZZjڂmi.Z>*$APT!)9e9D )w-,Qƛ%9!5!hIJE&P-/pc,`4JfQm-U oa@dTia6Ěe'~ VD&̌J1JSYoDT4R͢JAZc#@2G52 @(%&&RJ !Eg`n'666R )T͈ D TLLN|lnif,s dx!%IuFId8^^"aLd$I @  L&S$ C*48'!TEY:E=bjka"J`Vy$I$S(*SB  "^f!G)}|> C*4d"h\LT4QꔜR2 D9x$Y<ͼo4r">+c2eQDBTS*A@9N `JMQi,u:G[B(1ư% G" & 0f#DyNdT6&$oYjk1R*xސd eJD*$$ "B00^v"_C^CBo&$I AP(Ts<)DQGĞTc'Ǩ FAEJ2իM9Řb2pTuʱȄ1Ӧ/?!9ٽHeI?۷|޾mh~WvHE%Q$bⓀ*RYӒWj*8BqB>yX¹u}78O۶DK fwa[-uZu-9ȑI6/_^ #_|Z'9iۗ(G9t&V +pBIjtrmIBj϶,{ųU#b 9yqu UXf%B8ן6e6? i-"@V(4x(<aZK_szK++AE#FD f@&8({ QJ;tzG >ut)됥RLQ@s!/XUz"%[:icZ[Ϲo_,u2μ+E~\|| wn Lʷ۳``LMXB{Fi?a1 vjڡÏBTjl*Yb<) eTR%P^c],$Z5mZl8Q* @dRB PB a!!D&Zrk7:Dr.Yqƍ(LQ|H٥xӎmV@(=q3FR:voVUI^$>a6=]Е xf:3 sn2ibƻ{jq Q9i1Bzxƭlxr jvNκ7lQ+8AG~ڣrX w>j8OBof0I@J J%oLa,s<PD*P8Y B8B@ 9B]˶M|ZNJ(XLݔG[v|3UCлb7(tru|Z9V.mHO&ʕJ?ӯ{r/X`ao!@Z-c 0’nmJ59<٠3,{)%v۳SU%`H>E9޹xqos.ge^W_~ G{پxnT&e5Xr+-[M{8GjN88hbnZfl4B9Th<P-c8 <QB)H@ A`l[[F90J)T!4}`7d\V{_5eMTU3?-1!J k,^PBk8 6.c@I~a_K;"9_d QA#5_#/.fIl+z5=2&n,/}晘G3dS擣zmch:Hqx[ tپE A$ 0IeI"@,,,R *PQ"b4B8f6*p#J9B(p7$ʜƵLK)GϷTV:hYWywKO_6$A6S̐=|W܍0Y&^qS8- \WshеU΅I࠻N%:h`!Ç w=\kqw(Kr".Ns1 :4ҽɣUǎǘ-Pˮ~0B(`1jFL1,(T)QTED&|! S2%'< @x~O!1DX1iMG%rB&[,hzJERh}bJzVszǖZ8s\a IDAT*,C:M%1̋kjsb>lvP G/aK?mgȤN5n烚>?)cmek[ U<tǠZ+Omˁa媸ι0Bx^!HQNT'&)'%T*3J!N@B<(q J9J($1!$mH2[6k5-8tnt,Wj[nU58s'M>/eQ)o9YN- CfᄍQՄh*rVe@bN71JϞ7mJjSۄ1ט)U6~([%5|n<,*_L(($0DY" `$YԪ"=UtUf/ĭe千WqɊ;+?_Zø~آl;~])SͽUxgr5{c˵h^%뻟zwךˊ:--4<j;/1^''yV%*'%X$--4(㈫.uOͦԕ;/ DE(G)PJ) rǥw0ƀiBCBj߼]NR ȷgKOJիQZ)p95hH5 F!Uv,]Ńm&H~h{kcA7_>o#ڶ_4q/yr\W{&|#UwJ|ޡƻnRRRx"~Uxjxxx0ߦۓZY#}U-SLw^Ըe%9B˾{ˮ6r['o>5Cn{EnƘJJJNtQ qf0I%R=\ٻ(6 d A[qJqR~x)P;Cq/ !._9ߏ%l`Gvvtٝyϱ 0,Ê#,c@aجЌ>Y|69Ūqˮ-[kƾ>XrjJbBb\aФrHj4),I8T"v6ZF a30 0 ,! a،j_*rDK+r:"Щ_"ǕL=oV2%v>iI _'6qͻ<&=2y~@صxIRDG}액r>u9&9!>>>6} lnAtyѫFdG,U۞A`~kn:pÔe v8b,aKv\~ ?˄=~}P%TR>ԣEm~ph1vm$Ba#?^-bXJ,r 2,rbA"upʥ)jNgä5`)1F`"H8BA`>bDμ{ &DվڭLW4Vy}f!4V챉/pVв=|צO("`z/ׯsi>֓zoS^X_޽~WtwgIVm=uƵ[zH>b50<_%:UeVW@/baD&$8"#aMeYD P \a&- d(:qBL3Y| -?~ӣk.@ݟo<t7fnsjÆUsZ?aȵ{\/^J6ĪW˾D 'l>S;.3%T>{ 4&${P2 X`8H[IYXA0R0F^gd^3BAfi҄Cx"8Nղ\ ÿn\RqC}YW8swSgw)W"VqNj^+㳫O)3ǁhX@2VoLӮ}^ϊ!D" JpR%I aǰZZIbF!ƾ,aX]dPJA~ BR(yY qJ)v`s 88ĥ>XVaE"N'qXJyADIWHL2 9P! 2 e%%@?`k ӇTjޑE( rɘ:<X$SXl-X.k{B^`1'Ļ$]kĊb+Ki}fmm)w|v['BD~$_ڑ!~2H-;s+Hj3e8.Aʁ':B"C2*'P B0r\PܝĶ {2{Xۗ$two*-Ftgwn@^D(` X!RKa8H*+A v+iu 1c0A xƦRDHRAX5:AX T*R ] Tս1=lY ح7tn_ { @noo=zʿ_R hvTuKϻxb<FsaiӈUFmKp jf;3dk&qNB%X-'d=hY>ZqbMtf <2![ THr9˲i4j)x8N,KRDb&F&"(&jeU9E.JhT <=5PZI h mƦ5g0\+7$DO߃1}W|7ۭ'^>#媜TP[X$E0pRKޠR`2&'-r!,eR"0!҇  PaH$"H"'s˲"KA 벩 V'FE $ʭWX19?Wsxw9`3~(zO_OaY Ĵ!EʴÓWy%hn/n@~ɿ:cToG[Ѳ^;vy{[X.PXC!C4mC^-<O)l) .`"%<*?{>NK" OjVXHrXJ9!2,Vh#ܚ?(=ΞS_o3-e}p^KgO>ADy%/%j,tetSm]dqo݆K1@O  ˣ_TP+ lwCQZcڰCBӋ"^qwq5{t4\o䂏!ꐠ |o*V-BEA'ꈈlB) !B) !B) !B) !B) !B) !B) !B) !B) !B) !(>ͩ} K4ޡ#6^?v;*s>Û6}@ i Ι\ ! ;Pވ{О Y-XHGٷsHkү,?_Iz/Nޯqyׁ.ϾZx~E=22KzA>>}梇8bq珫*Mߨ.@]YJ&G\X 瑻<yX2bx*ƶJwxGTsTS?)h,8kۃʦa[Zm9F_7H [4҆f[XsQxpҒۧv>7p&j j!-x轢73oI},Zc?Xl;٧i^ڱᄉsZ.6!,r}h}/[$''V~Ya%>F&TzO;"DM&&hĭJmJ"HLa! 2ae(Kߩ"έٲ;Ħ貲Wߑ4{Sh"-BV֮kA~]xI6g@Gg'k۝X5}|~ֵdZ~؄hINWlүKc7&ˬ{͓!Y`Qj2)Bf 6ko-4/mj4z|x+nHTTY9YKQ6J׵0ƣἥlDf'z7|q.ZrK_z\ڟ3G[b%ϸpwuIZgnߺ{]i2ae=[4iSF-bw#Xz6#Tw5wel?.!C^ɫ?惑zU"M<;x]OsEʳ@5>m-?h\(!E :SI15I/u/Tҵ{xDilSƈ鳛Ӑ3V^wf rco V%_8?%"k*8jˉ ׍{w^T΅pVIΌDW]sF]OG@$4V,kSܞ&ذEho^$ogo '6Ϳs.H\bWU{6Q>Po.Yۿ @cl;ݐ5~Nۘגl?.0ny}щA5Je˿9aKP>3#̐Cb]Kɳ'6MM'2 y+>oT%Yŝ\szն"4̢5Ouo8 ѭ35g>\ M;6fw,Fawݲ*&̀;[H`D%6ax#]3MTb>S%[p;M.dlLY<{sȨ!GOI.ޤOU׿? ro`p7BkdI oΟ9_ů$$m%U~idj@&VED֞=̿ЛgW}/Οs1㭳l8}AiJSrb(,8@eQ$BcVl<{\Z \is xe)Zʸj q]`٠qI{BkUXƽҒ'Q`xtwׂmns{*vXh@ kgC;77O"_4 zU[;֚ؕ 4Y#M*bמYÁC( {|LڹjIrޟgoFRǖiLvwp8+鸵ÛDX(j@}nss9 ^!dND!9242o޾SjuܪwwXm|7g諭t$ @h1 U<{-^5sH+sGd~лLZ|~o+ծO˺{^£3uƯ-nו&?YQ_[kռ]{onok-cE7keihpw}eu@*뮛sci̿S#Mz篫Nv]=nJ,ǜQ3|r^nq ̗ɮESKhVj]?Y3q5[qM/qo-T׺E#u'm{ 7gbbu+k[Aacigj)ob\ Z2rc.]Zy Ag-g< {Gw\_l : IJr R9܌]!3]US&4vfh“0[?ܞd͙sZ赩e!Ku@:BfHAg&:@d5G/=7aï͊AjtA r6 ՄwBJ.Sŏ q['ݚjY#FnwaSQZźm| gVdMѪ:Uw倏r⩺wM*s,K8X&yV+ɽ[֪bNJĭgE.^diqbg̮Nby~>>fMwkd)E[uwԤ:yiPulȽO&2BP$.v&<8{N߆w7U>ԖkUԕ}\dLDD䛀' (]㢪mb|5($#ۗ^9.x˒ki\jZbWiaz Q WŬ+WРs=Sk[}wZֲX+-̑~'Vlb]ӓFܮҬn˸K3k[@=MJl( N/Rg}VdcB?f'kj'>ztUQAlKvX"grֱ;3!CtۼfۀhzIkxÿ{so -Y.u9ڥƹv8;Xi5~mmtA;&,`Tpufʶ}M 4XM u$ϺXн=5qҡj ^]իy)?J:*:P׹K>]~BW$Bv0P۶/ӧY @*\3NTtfӶfuKݽiBfƝ5?󐁵n*ĺG n豜ۻxy:aa1. /ane.~rl[&,ްڇ?z-vq7oczd,<댞eI޻xƕ`$JGNJZw.u{+zx1#(ed|-?[D$BeGRl\ZtlURb}J=|\:NN6R3kr4[rL!a9/3lpW agòAOkr`|ˋ:+0vjvlN/Gyv.%-S]jSLӾS2{O^/V(T]C)h2N&4ۚM8MS[m$h㦏pt{nYKF)>K+CSߝ:ƫU}䐰:l,B+!}0 PWpnBLa@!BLa@!BLa@!BLa@!BLa@!BLa@!BLa@!BLa@!BLa@!BLqF)y^J!>B0,B {[PQd0x7^ oxgY 2By^_ !A CC*B` *Bx/Q"qs-nߨ |F޽bl9uB޹$[3l3o;)JetƅOT痎ߚ[1N+}֍V?^b"s +B(;7~ܤqh4B@@@;< HIM]v[>sYؾlqufت.9"oUu5_% (iKSnc9m>jم[2s GQ55`H5{GM>Wg^dsPՍȽmIٶ+g sҬm{h͉ ߬AAZ΂* upp`6p!t@vuD^ څs,lk=dߕsbϚ;wJjo< Kk۱2}B=6폰R/WÏ[RN;XY|p9 -d |5$7  @5|elW CbddXV5onSY1@. lWZ~бGsU0[jKM,aW <[A,oaC g7 $B !sI@ ۭ k* D_nۢrygӘ;hQs,WUݻ; @ _]?y,E>X $V:NXe5f4(is "Bo߹̧*|sd&}drAbbAa#gԩ9w>U'ra(*%;..-fmЦaB(O* ƒ$%-eGm&ޱcەatEܽ@pΖS?V:Ξ^ fuZMYO昶oj}9&ٵF=NY}، ӯsG9IT_q?Jp:yrRŶLv(0Ty߯^S GY.*֞ nS.s> =fPOmA Eݦ%1" SJǒmTPigORtgOrU/ٙbI#թc T$EE[*1!]:KYejmrܬm :4,sxvd]A-uf3? :Wa9vѿdz))"O"rn1[I$VokH>>UYy :&@^ QaQ)86(DFdoC%5(XR= x֥I@ԁ5 Ϝktc2ߠQuߟcyL0s~b3+,rr W2vGVs~ŜVzհan . HGO$>ۻl]BDt2gA}’Kq$5'_ h"C՗m~)+':@PEU{ӯ0܇n7"Fn5{=1 gln&Ҿo0>!$~ Oߨ,$O;Y:aS؇]B|@@RY N y۬؝ƴn.Pƿ/?kl,Y|IH!&-|aBJs>wU&EJ)% ~)!/x83٧BŊR^s@/zՌl>tM(`8*W!йw?\-|ؘTz}fJjOiB]+-ϠqX߃SA^nHK&8fU|ğdGu˖l}GY[<fUJhxE2"GZo152.w<Nwc{%|,-Pٱ[^n^OuL/T<@~ț$bĐRi)/'+Mq!6/Kޑz<d߷S8M@V*~AWh[箽JG?r^]yn"oɧa`rx4z8'1tzv*=֩EWGG/5G.:$aIs{[5tJҤ]xc -|YAc5EPt`߅_69c|:{ҡN9/>9!ɤ"RV"ZN)Qo?NQ+Jկ~tͺ%^! @AajxOx;lF yNWصzѦ뢆]`7޽mծVCrtTHh:eӢVyw2iףaaaOE[|v8XQ;?H%GE<^# j$yq 1iyӯ>~8B-}MГHÂQ)9OM Rv_f0^?t鳾O-;Ӷ*l^fl=~V]h}~}vPW`жS.r+d g4 ./+Ρak_YB^ڭٴq݂˧: rqwnQ&VnSx:W]!k1<&fk>Qlo /f>f!r'j*BX&@~ *ӣB_ k)'љ{ay:P+I8nrHeGȋ9NIˣ£SRS#D"X$D"H$Dnu -}_T۔QɶnvN +tp)]-Ɩqi>leGYόkϱWTfcYYM;±^1axȤlL@.D_X'D@(K<~#+՗6w"Vm|x>H,-(3K'g@eUݕk}}]Ilaͣ/VoDobm+Apq)ݷUm{8XBAgLy]3aclf+}&F҇_Ös2gO!­0,&^ CQw'U(!{& FO‰.W9(oܦ1nz7wDƿ~LZA"o;PocĈq>b-mLT*TxG'x"pWR۞c@EC@B?*9(nC!e*JV>!P!B!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!dp@Tq1B POBf:!2SB!3!!2SB!3!!2SB!3!!2SB!3!!2S8b JD~2Qn.81B}iCUmٶUjФj 4 [&79z?ucOGFnn=B4* ƒ$%-eGm&1hZj7p?_3`auWdMjU! |Xwޢ轨),W~lb#)ഊ0exR9we vFyv֯C T]aTپQul:fECtik& W'8*|-f0,CBEOf(yKhJ* yCiuWʚn8-_|qˏٽKk5~:MXɚШ;'gMDsޜeϸĞ$٨T Q ,xSŝEnd+q%V{ww-V>pðrQ& `Ej߅&fF\Q@$JyMu/!#@c-|8I3GUPӧ_?߂c0 )zM’R OIZxSS}jMYPxmZM#^8 [4UETvʺMͽ\o h/$LhŐeR<!rS{ Z3gwG"[.}["K7W}Ǔ'NveG[ۇ6ޔh\Kx ~`*{˦~fgMIJ_f))z[Z{'SAT_myȞ+#/mNŢ^>IcZjnLѫ>Gne 4 ZnG`\;Kꊾkj2~}hEC@l/й_D)eQ)'.0R!Q%i= }RG{م@̂,U5&̪noFmJhy%փ)-ˌ_9-!EWk܁CvɎYS6u/xE"֊m›7k>'i4<lbHi0Օ(+wY[NW*.`̝Kwk̽r&s0'MWewT4.kZ/Sh_˗Dҳr󁚆%5Um ,XW_Ts~^=d,aѵݎihuGn^pbp Tl͋s0 0 X/Myjqˈa{P@\b'cIMSsU-}%Bgڛ @lgY5 Wmot[9ZhV!7]꺥%18+ƥ )IL[Y*^eo-׿+ `{Sww}ņj??`Ct0٭קM,Mm\zoBix6ϙxLZi~AFٛ啸Jj}Q’-p$5'_ h0`xQo]donڛ+ hWiR*{ ϒ6YQ8${Իvu 9($Pҁ*O)j{wͻm ka,Ŀ4/a 1;Oݑw pwaE.bl^s8 QV_Ց۹QT8ukdHaQ~7! ^uL>xdbƯ4#q,hND!9KKv@F' A*!ϙ?']}ÆiI-TRƿ ~""D*.B%@AWgNI541GzT,vJKJՋ9P[ @]W(|C'*Zʔd5{|gOsy 3Riadž T[6a&>\Y/fM֪?fl`x}|엾MJ) 6A7:5ˢm\1"ct.c@ 6&zgTL>׮|ccܽB㶤7f,4%Y}vڂ߬/ol`f%"6e]FV/ULzB(H8f#~Kt2Gյcjgqb1u 52Y@ YW IDATJb!=OrGbaaL^ƺRCW6AO᭽lNۺ wZb&Ju2i1 *_{{!Fm%v#w=Oދ2aRWQEJYőވKY[8d 1ۧMn|NTdƙg.yԡ3}+ƒ"˝Z$ʑ:]+<4햟?|~'Bத*MZD,egMnfEtzY|IsVs.,߲uq9{ZzZz T;6:Xrɼ%?A|l u.5V2[ \d`͟K{kՌ=rNoBU*o6rg . 6[-sjXUn|CYѸ?{5Q#C}^lh"_ܟD b4Jyg3 px$_18<|DV}*-ZdRC@|綮RbR Xx;e2EV+Xӥrqq)LL2k--y}WQCRZ$u~pA@|iֽN z;3 ~yԲ![:(5"Ƚ͐f7'c`|l㙣(]![I@b%PQd-?{$:|q/, D<3eP<5oKR.tJ˹XdbNkԚTuj:%U+]9r*Ye?ҔD"Ucm̏%uV'0@) VqDKhyA*5X,KgOEE,3d73@dU mZHFu!wu0JI8CR܏O,X/ h=^e lЗ+ Vs1M1v@mr].ָwΥGυ%ĪxV*Ke"X$uuy׵c @DeK?UZWoڻ8>8 )"R|&@'H[yNe{&ra34N/ڑT{ˆ]Զi%?g L zZ֤SS5ZےMWA3FHD/0VqfUvtѶ[CduzmjvߎïW׿iח 3pyVNZ95!a4YLf@w:j.&{p m7Xcr^j%VX߉hQ՛% Ow Brn6 (f?8]ڄΞ\b؃x2"16>9I"T$db_.58sZk|!jkszزλCMyudoOF~ pΫҊT(e/&|Jӻ.?ț *E&|B?RiEyHX]IKRߝTjDDiC)$8.}X A v`+/:x$ !)`} v *b!*eE AqRpLq 0 WB)4ve K6B!3!!`7ʩ΍P0D ܈\T,B9޹C*B!B(+e: R!>jL[5BH$bYV$᧟"Xy^AuBkBaPk2`@E!P BauB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d0 Bf CB!d8SBy99Yzj[DD"XlaaG.Xx}BB)MIIIHH0v4 E <ϧ(JB(zPJd2^ a/<ϫT*`eee_z$%%) LE˲ ")))%%ńJ< L#cIDvJ$&&2 Cf_ Wbbiv$[E!t:0 LuSm!Ч1|q)uSm!ЧE)aƄ7uA6Ba@0G6-?o\xc w?(=۹|}xm|X NSƆ<™@u'dרP`N]UA]֭ZA5<a^K肮^v)R `x̫4pNN o(>I2IڤMRnQDN\9]}[a], .c=/DQX[жP(-6iy?ҖږʋLLf5ւh TWT+\Ngih}$㊨-x鷋h JKҒ]Cf͋iݣ/6νk3_Yl8~jey/^eK(Wjۼ)扗1z{"0#({?w\h̪:r̻.]Ro>nYf{Luq))1@zeG*H̻>;w@L0\#!S… f:rV鞙RӢ~:5Xۨt6ZmQߧV WDY, /698]$= ˚Y,o[kڼNTs!&v꟱c_2╛ H9シ>vwP83;F=.ޘGᄀEw9"Iaaxg?ݒGWo{?D{d!&%Z;Yb|҄gup؅ңSA3d?HIiTM=='eV^r233~Tz- qTEULںO>bzix鶇cDk2t1*{׆{UKJwW#1E{f}o'eW?mw wz̝:yb{U綽Vf$1w՝_UU}WI<%ߚq˦ "ǫآ͌T &z-'OkE/}?TU=o&BfH;YLE6xm).MVv /?b%h:INxo%'cO>whMb1OL+Z d|w/ W{omoȿ;LE✟qN _9[=5[~JpU\B&dEJ@fFҤw>xƫ=I d;RBS"@3egs;D^7?~L=kpY/^_v~,+:p~maF޳~kQi߇Ω~FD?<᷽r__-m\}WV;L^Kk$@\ۖMS1cdl7c;^4ѓ{=w/NhAqil`?{X쐑W*v_uuHEQqE TwGfm:Vf #ڒ>NApnUoLfE2oC.MgUjӲMNzp3ugt?vk#1[e2R?06jnALڐ{4/_(͞3l@Fnza(Tf%*KvmXޛ{T9&0c =c`մ:~@ -KKon;T36 !cLӚ6萦i!„$I͎iEh I^owR弛? 9WU5s*~ :0!˲jx"XVY?mE0!bQUrɲ~=SU5,p! |Ȳi(.KUUF4M4- `dYa3!"$IGQ9c1&Ihed2pH`Bc Ug2 d qbҏ@E`0{ M&@.AB~ J:tQ:qL nD :"b@_$IHfA:0j[~I$a`3DƘ A:6ԥgP ! B!D("B@BP ! B!D("B@BP ! B!D("B@BPR 8ιqC]1&(`B葢(!8RUUEI a;~ @UUԏ@}QEӴP@4MS%x:h u)tDU BAh(xu#B: ^݈:Bw\`'@TU|~&A ̐c0FcTT(.QD@ιr:)ÌF Ÿine٬VE2/! tVTTf!WUԩSv䀠B/.j"@EjVTT\P%̡UUNluABOrLTБrAccccC]|% u)Am"#]cA@GPԃ" x|p#U^糥 +@puY8}'HnpW^qq3N!?b%+Cy"ЖBS+2줖9'vV-uƦ3vV"ioRJڻvƆ Cu}k6Y屓/ϰ DKVqUGξ|ayA^O.iy킡ÐuI`DDbOKK"R=VU'g; 2K"QfFKR,ʡVC0K|9A0`j3qc&әЩ^f419VsFݲ-5رwVY_T rS/ke,G:n:a@gɽ}koo6,P'su+뜶7p6R odDD{c{EV)cY;C(A!'$˷-ղ|?X!HLu}cMP\]L[cƨXK͒yȔ,?'ҜE<6Vqn1Yb,߁%f08\X? z7TSxc V$"U?~}#&] }7s3 >E%;5""Ԗ˷S[~ >wn_\c\bi!#=5V=xvrΓ)6zgWڹoVw+O]U ],;)ZWJ/L:"ꄚ*Wa?LfhB0,)V')':J|1SVѯ.}9~˯ʘ>f38} .$hŮQۓs#򗂝w;yt(wW_{]EZjhKDdi{?6g1\u f;u;xQ}vMF+B4{Jfm4jqc&ܛSU&KJJA7_ai Jszw1uc6hES҄ƴVp2FR\VnG O3~ן۶YӰT[1mm}o8ԾmM3/.U Y9lHN6`4#,??p,y޳2L #Daał9g Ev333C];JWa#1Mmu 4M!tD$ZI?.HzE "R弛\%@GV+\UP TU[BȲlZ=F/v,jʲꂄ3t EUU%2 2HEpD"˲i(\.UU.@iiZfɲf`C"$IGQktc1IF,& C/SE6F (Ё rY#@P`[ͪ!suIDAToV 3.4 B( ME ~?.2UU~lɂ EQUUEAc.@λ|/A㜟K\dP ! B!D("B@ a(zIENDB`dde-calendar-5.14.13/calendar-client/assets/environments.h.in000066400000000000000000000001651473346337000240400ustar00rootroot00000000000000#ifndef __ENVIRONMENTS_H_ #define __ENVIRONMENTS_H_ #define VERSION "@VERSION@" #endif // __ENVIRONMENTS_H_ dde-calendar-5.14.13/calendar-client/assets/org.deepin.calendar.metainfo.xml000066400000000000000000000026401473346337000266600ustar00rootroot00000000000000 org.deepin.calendar dde-calendar.desktop DDE DDE CC0-1.0 GPL-3.0+ DDE Qt Deepin Calendar 深度日历 Calendar is a smart daily planner to schedule all things in life. 深度日历是一款简单易用的日历工具。 deepin-calendar

Calendar is a small management tool for personal life that combines time and events and integrates the function of memorizing and scheduling.

深度日历是深度科技打造的一款简单易用的日历工具,主要是当前日期、节气、农历日期、世界节日。

https://github.com/linuxdeepin/developer-center/issues/ https://github.com/linuxdeepin/developer-center/issues/ https://bbs.deepin.org/
dde-calendar-5.14.13/calendar-client/assets/resources.qrc000066400000000000000000000100421473346337000232470ustar00rootroot00000000000000 resources/DynamicIcon/day5.svg resources/DynamicIcon/calendar_bg.svg resources/DynamicIcon/day1.svg resources/DynamicIcon/day2.svg resources/DynamicIcon/day3.svg resources/DynamicIcon/day4.svg resources/DynamicIcon/day6.svg resources/DynamicIcon/day7.svg resources/DynamicIcon/day8.svg resources/DynamicIcon/day9.svg resources/DynamicIcon/day10.svg resources/DynamicIcon/day11.svg resources/DynamicIcon/day12.svg resources/DynamicIcon/day13.svg resources/DynamicIcon/day14.svg resources/DynamicIcon/day15.svg resources/DynamicIcon/day16.svg resources/DynamicIcon/day17.svg resources/DynamicIcon/day18.svg resources/DynamicIcon/day19.svg resources/DynamicIcon/day20.svg resources/DynamicIcon/day21.svg resources/DynamicIcon/day22.svg resources/DynamicIcon/day23.svg resources/DynamicIcon/day24.svg resources/DynamicIcon/day25.svg resources/DynamicIcon/day26.svg resources/DynamicIcon/day27.svg resources/DynamicIcon/day28.svg resources/DynamicIcon/day29.svg resources/DynamicIcon/day30.svg resources/DynamicIcon/day31.svg resources/DynamicIcon/month1.svg resources/DynamicIcon/month2.svg resources/DynamicIcon/month3.svg resources/DynamicIcon/month4.svg resources/DynamicIcon/month5.svg resources/DynamicIcon/month6.svg resources/DynamicIcon/month7.svg resources/DynamicIcon/month8.svg resources/DynamicIcon/month9.svg resources/DynamicIcon/month10.svg resources/DynamicIcon/month11.svg resources/DynamicIcon/month12.svg resources/DynamicIcon/week1.svg resources/DynamicIcon/week2.svg resources/DynamicIcon/week3.svg resources/DynamicIcon/week4.svg resources/DynamicIcon/week5.svg resources/DynamicIcon/week6.svg resources/DynamicIcon/week7.svg builtin/icons/dde_calendar_ban_32px.svg builtin/icons/dde_calendar_delete_32px.svg builtin/icons/dde_calendar_edit_32px.svg builtin/icons/dde_calendar_fail_200px.png builtin/icons/dde_calendar_ji_32px.svg builtin/icons/dde_calendar_spinner_32px.svg builtin/icons/dde_calendar_success_200px.png builtin/icons/dde_calendar_sync_schedule_32px.svg builtin/icons/dde_calendar_sync_setting_32px.svg builtin/icons/dde_calendar_warning_light_32px.svg builtin/icons/dde_calendar_warning.svg builtin/icons/dde_calendar_xiu.svg builtin/icons/dde_calendar_yi_32px.svg builtin/icons/icon_refresh.svg builtin/dark/icons/dde_calendar_account_32px.svg builtin/dark/icons/dde_calendar_create_32px.svg builtin/dark/icons/dde_calendar_sidebar_32px.svg builtin/light/icons/dde_calendar_account_32px.svg builtin/light/icons/dde_calendar_create_32px.svg builtin/light/icons/dde_calendar_sidebar_32px.svg dde-calendar-5.14.13/calendar-client/assets/resources/000077500000000000000000000000001473346337000225435ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/000077500000000000000000000000001473346337000247405ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/calendar_bg.svg000066400000000000000000000050401473346337000277010ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day1.svg000066400000000000000000000016271473346337000263250ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day10.svg000066400000000000000000000035761473346337000264120ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day11.svg000066400000000000000000000022031473346337000263750ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day12.svg000066400000000000000000000035601473346337000264050ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day13.svg000066400000000000000000000052501473346337000264040ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day14.svg000066400000000000000000000024701473346337000264060ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day15.svg000066400000000000000000000050551473346337000264110ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day16.svg000066400000000000000000000120511473346337000264040ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day17.svg000066400000000000000000000022561473346337000264130ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day18.svg000066400000000000000000000057751473346337000264250ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day19.svg000066400000000000000000000117071473346337000264160ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day2.svg000066400000000000000000000032621473346337000263230ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day20.svg000066400000000000000000000051461473346337000264060ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day21.svg000066400000000000000000000035631473346337000264100ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day22.svg000066400000000000000000000051421473346337000264040ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day23.svg000066400000000000000000000066141473346337000264120ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day24.svg000066400000000000000000000040651473346337000264110ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day25.svg000066400000000000000000000065111473346337000264100ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day26.svg000066400000000000000000000134361473346337000264150ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day27.svg000066400000000000000000000036651473346337000264210ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day28.svg000066400000000000000000000073441473346337000264200ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day29.svg000066400000000000000000000131771473346337000264220ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day3.svg000066400000000000000000000047641473346337000263340ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day30.svg000066400000000000000000000066571473346337000264170ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day31.svg000066400000000000000000000052721473346337000264100ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day4.svg000066400000000000000000000020001473346337000263120ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day5.svg000066400000000000000000000046251473346337000263320ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day6.svg000066400000000000000000000115761473346337000263360ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day7.svg000066400000000000000000000016521473346337000263310ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day8.svg000066400000000000000000000055111473346337000263300ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/day9.svg000066400000000000000000000114041473346337000263270ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/month1.svg000066400000000000000000000022621473346337000266710ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/month10.svg000066400000000000000000000022471473346337000267540ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/month11.svg000066400000000000000000000023611473346337000267520ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/month12.svg000066400000000000000000000027601473346337000267560ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/month2.svg000066400000000000000000000023761473346337000267000ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/month3.svg000066400000000000000000000035501473346337000266740ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/month4.svg000066400000000000000000000032311473346337000266710ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/month5.svg000066400000000000000000000032571473346337000267020ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/month6.svg000066400000000000000000000026551473346337000267040ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/month7.svg000066400000000000000000000021551473346337000267000ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/month8.svg000066400000000000000000000033221473346337000266760ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/month9.svg000066400000000000000000000034731473346337000267060ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/week1.svg000066400000000000000000000027011473346337000264750ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/week2.svg000066400000000000000000000037371473346337000265100ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/week3.svg000066400000000000000000000031751473346337000265050ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/week4.svg000066400000000000000000000030411473346337000264760ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/week5.svg000066400000000000000000000021101473346337000264730ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/week6.svg000066400000000000000000000033171473346337000265060ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/DynamicIcon/week7.svg000066400000000000000000000030211473346337000264770ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/assets/resources/builtin/000077500000000000000000000000001473346337000242115ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/resources/builtin/dark/000077500000000000000000000000001473346337000251325ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/resources/builtin/dark/account_dark.svg000066400000000000000000000024671473346337000303210ustar00rootroot00000000000000 账户- dark dde-calendar-5.14.13/calendar-client/assets/resources/builtin/dark/create_white.svg000066400000000000000000000017671473346337000303310ustar00rootroot00000000000000 编组 21 dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons/000077500000000000000000000000001473346337000253245ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons/dde_calendar_ban_32px.svg000066400000000000000000000015731473346337000321340ustar00rootroot00000000000000 类型 Created with Sketch. dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons/dde_calendar_delete_32px.svg000066400000000000000000000064111473346337000326320ustar00rootroot00000000000000 icon/schedule/delete dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons/dde_calendar_edit_32px.svg000066400000000000000000000043171473346337000323200ustar00rootroot00000000000000 编组 18 dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons/dde_calendar_fail_200px.png000066400000000000000000000334441473346337000323530ustar00rootroot00000000000000PNG  IHDRXsRGB IDATx^} $WYwN-{Β 3A! F¢@ !~$y@&;~P'1eBȄ A%L2;s^j9tuU]<]UgysA~%+&@.x gG.O\9@9K r& @ 輛$$&D9@&dnf@lr λM9@-kB$dB:f6 & @ 輛$$&D9@&dnf@lr λM9@-kB$dB:f6 & @ 輛$$2%r&0aAM ` >|hy` X O5ԀZdoo9~쓁' w^1}ppG~Įp& }8Yy! *(Y,0V;7oA#ebR^o=4`p<[0S3K 6v\}=X9cwkժ)fTPBb v jۍ/`lOd#$BN-Pk4jB"/MMj] Tk {pϙ[9@2i+B+8dϚU{UC0q gߢ^`ht]Z;|^U;h8m-sz$`e".b;`t)6q+Y̅58<=&V&(`/!v"=-qIHºrƩ~} /}Q%ID o; ^!'l8DM׭T?Uc]IʚH0Y5 'Z/xZnzZf5 .pg W[df~]p͗n6Ysƛ_Y0[xeu}qqg v2Ptd N=녀cZY^X+a>{# Uw\uk-xןd@8Ǥ?@8 o5^$c8p?9c ь뼪Iu1#/qX$x\. q)(cU^̦ ]ƛHZ ~r1 x3 O[nU>Va֋/O 3{do8q\C79' c{SqɊ$ϼ=p/a[|u*RɯNze&~!/7`1N Y1Dem5ޑn?t$ .sl9>XœJ[NxuSh\H8}:GqN]MG/G]}?. ϟ ׺; d^?gy\쑑$(^]6 @[%0 Ks$V: &ޤ6&6 u+lg$?WP/OiV\Z!v3m<h.^{#:ւ7GBtdU .?vpJ2WMc_3˛Nz_IUkAhP(pztoA׹Aۓ#qR4KZjI^[)Cz4JnɨXd$iGHM].UXS{EL4"{VJ@Ԁ KKsgw ''F/Dڤd?c#kNJvyj  i *03Ag`}$ζ=fXZ[ֈ~GaK"W*{Rk n'FF";lsP(x6u$c*=PO|ﻷ,g_7Z?T}:nE02h @е{Mlߎi%{/{^#PV!A ɮn Sk9)(p Em߃JŃ}|عSwBŃM s5=zg%$UޭwNjckZ0`jpȆ {Hqhia64<Ad`*Vkwfƨ=&Vq[E%Aa?䪶>C$YI ծ'SWJO*nr,@( 8tl,.//h'rAGoV?m6s4o^ CVIp:2՟5qm;˞ظхCdbDW[6#z>i8V[dB&9}غխ -לŦz%.åًpCQ exx:6ELr @$yVp|RI[8c߶l-}Vd}pQ BMO86~N{` I__9tZ:jr0aY}D^OsUw;a[B\={"p\IoV`Ӷ~,0L5kLLlW^%|w|bzqV+ αF6 m1 S@B߷ !mb*u؇&p`&II :p| ;W ҇sz2aZiu6PuZZ VБ \q8oGֆ~ &@މޭkZV1pVj0xra`N4ԓ7_woy֒E z%VJŪP,/iD?s[] _ 'T{c-Rc4$U?@TCIND=L,8X?~u~p ~H7y74$lg, s4͡Yp߲̗i!ɋYKrE+J?HޭXjZոbwkW&{].~ !^}ǎHDU۾+>59Lҩn%cJ S必R( ݨo|O;MZ_?|~T^[ո|!_8P>6{%z(nG<$@Gp t˲kG |UQ$ݗm~ׯ~ث')>6{ ΃u z㊫2U:9QRQ\W r^wP >[\2БAK/2bLɗ֔ê'I/aHɭ'}%?A(`H:sn GЛ?@ӴsB~K&x92IZثx3>WIߤx٧J˗6Zzj`z06iڵ }!rIHLI\q!՟$:{htQ5-_!sή-/_m5>OV`*Vm74tܦc&vu [T|;[loJs_[XjX1 VAia#xGڇ$]o`==P)'C+KϓFzLd~wO$o`7#|1T){$ {ѻ}>-%e3V匳J3KunޚD\T.GRiu B8v% ĮDq?Vt 32$ E|׿Poz_x,צG$߃$Ԁz߰M~qqʼa<fz5?oƍ& R?R=uKS=04#SIw>i[:etۯEfA3w˽Sd%OoZltCpQWzWFB&qi+];R;sD ePL*ַVIo5 x;$v֊ 8[ZLX\XpZ e/9 ANZTz3k9K+o x (c-a+~# @i&M{҂ﺥ]뢔9x:iB_2Gop.ڭ0NR]z&_OH@B&+ yX{Ӵ~uAb 8!s(PO@&р{;$XJ3&˛J(tc-@<)#g%,=N{$WږsQT|XBWPai=CChE^9~GV]vmZ.Y:{ KicmX}U,|!zBF:Qnyս2=)\3YrCjU#HJMq4u+ڻI5;Zgc+#q͋6HP ?VÊC$mG )ѫ-qMI}gJK~MFI-_PX%PK""@rwPL:i{)&avȗg!խ'$b $@ b2?Þ)kd` ycRMY^z]T~_nw (+]xb6dY{ JLѕ):k[_`'dxd >ԯL]x'&wpz5Ɋ"nB9=ƞ >Z:& w9T;4LB Q߾hw2"s]_h}^u; ,ǑINC\t鬴paII7:س) S$^AY'|ZOj$6˵,vnaeI#}L)/mGq=H o͋g.j3?)q3U׃G ?1)(st O5 8N1m~C(-ݱA̦  @ҜIHI "4YrvAco*3k Yϟ-U wn%դ[~D VsLS2 vsP^L!s[=@ ٩iqpU\$?|&]ٞޭ[ԄOWTrPZ#aQ'֗t0vrI,jU/pIUAt$eH>?'D<TS_ d,R!)v 5,Tm1YK[}_<>$]vC1~'$] i=\9BHqz;ͫ<^:x]@Ϡp+0 !\ן8NߓqӋw$9y/>TK&XK0${ @.^ܟaCu%]`T\ RV}D^ T$G!MC"煀S`ʽRȽK{nwc`*VjU]TSSIDAT%JiW^Z0돖@[%ҔիX]["~kkDW0c!r!8l!^s^D]9qݗ^]9RaMmt!k)1~om4\x ԫ$`(e"Uo 0,g~`\'Igιs^7ђVv>q+u!kWd2s{`իK {ff 8p4ln@Y1~+t!?%`ũc37ov`~ރ =Et) UKBF9s=aԡJJ9CQUg Uf3J|. s { %88EAY1tZ`Qzݾk$b{X(xg Rr>G 086@ZXGY䦛 ؾzBF UKꁚ>yН%8fRnMΟ@ ]EWL-ٷχ;=Jm${ T`pLROLSEh!Z ش4g]'6DO$03Õ76 @Av-X $N=f4whXhXdk' ,)r C,RB{ 0-{A]2̇`S3,3 fBAYU-̅ƹ Lk5%:{Nf]T] nzwySj==0^f!CH,֤(!c0c=G\p OvL*ݣ MWK ; EQg9n fA@"*s,-y:;V#VH#c[X$2 gD" O+E X~Fj~|mvZǮ*t4)KJSFCu.FxNZ=F QZ=YvF"@5c)QOĴӕz_pY-sLa;G@{!U\h/1@(-UBѐkG@Z-[?hۻ_}}-AsL.BFUv:EY^ZFyѶ;VXZ$`Gzr76]"UvVI8gvNwR%`⺥O| G Vi$dSRr ㏗ pjZXE o˕(*z j'O&[ool]')W%cZ?nPj3=[;1^*IР jBݡdTg u[2e٢b 2ܑEPB#H8gys#y.?Mͩ.~Kj'u҇T?Lӿ<[0E0 ?`Td^vd >sj5/w 8cW+ Z2]lE$lYR,.cb4 5X]*3b&=BZI ϹT_[X<WuJU?58~+CQ8 زWw "H(&A*TT.d#œUmyQ}"G[8 o-Zf%|&<E u!kpVHC9,K 'ժUaXUKǑ^.C!?p5S@D xJϮW3}=Ek1 xPtn.OW H#m[*k eb'i"p@AZ&ٰk98I wR*Dϓ^.4ѣϪK֗͗?YI}[è[x1 ;VRC@ ` r9 rD5ި=8aё;j*QF z0NFxd2fKwpfV_rG ]!4º"1^aM֕(sS\i|6GAm qJG($k 0eU/01Asp%$R$LĈ;j(hOLymBDTh+D)@RF<|R' _9yW  TFRq ?J l8dHۍ08 0E/H9W8 =- &H pZ 7˖A4)."$xG /ب'.OxpG)K S@  C@Xuh d|x&!N@& *`̱Tb-)X$u챬#V [*1 IJ6!P@1 &NQPU4qͧz..|$W- 2*}FQ,B[&c έ\o>9_-B D Fx`Ȫ2.4͂`)0  S(CU 9*@^:E@@ A{Q_.ݺUDVpeΝ\Xx U6QmbʥE ~Wml(1 ~h|mX`k B0*hCIjz` @ BLA[-,V* A2XRMЅK T*:qW$rґʵ/r!0fgyQ '*P(ꮲj!2 1rQ ؁,==qQU" P* 軪N(@`Yj¡ R2Ƒ#$l5e|cTṖn@ovJ$&r>6MpR]@B xS(* fzT$U)i>2%CYאl TذArJ<17]W-@ =HMԘ 8$HP,(y[`|.F5H/F!Tb - Ia $` #FHZ>H&;To]h"@!JrUcj3 RTO=JYlb,W3?zKZMzUKh_uhl k ؄Ԯ': b,Ǒ|$aHt[T_URQ,R0*HޠP") JEnIZìɚuJ&hģrYNrS%o] 4=G)m0Nx-(9 0+b0$0\WlA @P2LIFLD|ƚH&(EcD jɌ`yB!P9fb$J3f T-~JBR z v ihc*2cͩXQM)Yb'*@Ter_‚d Ų$8\WN#HUy;&3?,U 7@@PiA$Sl؀N  j'en]CYםH;ejAl Fb8 B`P QB`;@*h4 A0(,.Jը9Q}B@yK̈#QX&K%+p4c"B=@# dWY]0d!SA!'قr`Fey<%""'G; ^첸 @Y',L{\DQI`߉!SSxPah*x!eZm5 ˘  h ][+'h?`B' Td[MG) WZ$B("'[@9xm9#x !t I<`# 9(ty>F|Z5 'v0$P] nzФW#o 6h!P ?%IV 'H)5TAZ'9ڡN~Bz"E_+Ɋ<ث{& 8j$c"I6@1wk3`@@\R׈r̻1 \R׈r̻1  3IENDB`dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons/dde_calendar_ji_32px.svg000077500000000000000000000025701473346337000317770ustar00rootroot00000000000000 icon_ji Created with Sketch. dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons/dde_calendar_spinner_32.svg000066400000000000000000000147701473346337000325050ustar00rootroot00000000000000 -mockplus- dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons/dde_calendar_spinner_32px.svg000066400000000000000000000147701473346337000330550ustar00rootroot00000000000000 -mockplus- dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons/dde_calendar_success_200px.png000066400000000000000000000377771473346337000331250ustar00rootroot00000000000000PNG  IHDRXsRGB IDATx^} Uwk%yY0`qEDEPԙY\+ˆm!,!!$@loVUwuuWW^}޺s-H @X"D%$*H H2= $I@"$h\5E$d t$6%WM $"t6 $MnUSD @@'ݬM @j[r@)2I7k@\5E$d t$6%WM $"t6 $MnUSD @@'ݬM @j[r@)2I7k@\5E$d t$6tջL8a?qg9g9zέ'uGhptu @6MOg3 x/ DqQ0_ymG8Pg @~΅ޱV;J?s(jbNhgFF1 0n~j1}ZjqI45C6;1~&|-˙k+ <|uC4L-38g@$`7 3if2s,pUĮQqN<`laAI79j!%%0bJ3&t) vcl= ]vq.HoygbWsׅʉpPO|w'ber$76M8? 2 vI ʙ| .-ܢ3]ou~E 85Ho}p;$[LK%. ~{[6| Ξn眿=Lveo%4Qg R]'3P&@ [4fp>a]&BfN.{E.UA8Nڶ ձsk?lnv"}38_99J/&H=Zq˔yiY:Wp/)>ÃYK;>}2iǿ]ߕe_w |Wy\ z*%~= 2x|P5*ݫKHpD'} %4VuZi 28왛E}_~!koݮItݶ7u3=AҚ)^ ouޢ(H AuFAeV9wlDwbkR٩<%p~IS͒cWqܫ\pk[pKai^Uֺ7j.$Erat|ޝ_y'i]@BqNREFM褞qc;VIk$׮afIeqAT;qÈQ9Q.z5ivZ$- lӽC#b1^,(r{鎚qE'vxhCGv<<ۊi)2UXt1x5'rqkwE~e/cu:?U V8Nzhii1ն#JwTqqKcV$5zؑg ώ35}GrQ'veUzvnƒw_ݵL٭eyGZwȶ6lFb%~^CA\$?ߊU[=@BR]3cz90͜[ ^/iTܥ'H=0;uG>a [3cxW:q`wgO<ޮ%`Y5G W8sDgVZ8r>(%*UO˟qX#Þ|@b'4v 1tbߋ&n 0vϽxZ=K:~η*_ArjI{X:Ow| C)*˳TӇ7eg-w%A1"c(6*ͽ lHvaXF\Æ ? N?9^VR:~wߙ2֭ &,HV-ej!@`h~1rt3(IX`ρ- {^&ZHP{^+Iǽ47Hڙ݊^`jV1H11G"y?R{aGw%Xt߼^SsNFi5ao@*hW^EC({gC``mV_ * MJ<ܛXk1=z$y8NxGԪ+Wo)YR%""/kg}ύ>XK)ii@´vy K͞n6Nͨ< 4n}ͪwJ*.=R"Znz֥py3OeGwk5V\ hvE>-+%KP:rWDdo|"/A_ J7}7tԚK/}i`xHyJɫutt4jBWOkT(Өvơsx W<zåiQ:۲[YUV4j<@RrvE^63ͭ\4/<' t!~qX$;s矃?;rT88i)й{h~DZ,E~֍i.@|q C9fQEe_"0Zf|؊.iv|v#!%r*t}nߖطbfYVHc5_X\T=8F.W(730?e/@bR;4g?QNX&-j[~{oao H}2E͑;Wfya`"*QMWޕ}ipWأS?gG;7CMfY Hy=7ڶ@9m!t?w Ĉb'ipaśg>D'Ps } -"g7M.NeFifj^>-+5~lN(M/:#x[80>_e^ T| k 4]%*c)K_J[Q#7@vQbh!Aw"?<6dAJ7Ts-m8 a<>e>!t :̬~x}3.ڛ~})gjpr¶yW\-̪_>=P}rnX~%t,}_jJ~XX1޽uq0y#2gRzIR0 oĂXoū_+b)he +R-_l^yށOrfD1+;VBE^]s W_uX9^إ{DAC{`.eM6qXczcB?YmIs-bijQ 3?Uwyϯ9m6 o9Z%ڔ .Է N""᜶dd%Ώ]cXcB3vm}X|pn{kxdLĿmUhO9vC"[ubI:.^;Q]SŢs9'GU}Ň7;6 =zM=]>2x\ȯhӵkߺ<뫧rw]_sߔ[RJǨdEɪ t)Էۦ{Mr_GW\Emž} _rQ0_,nl^lѮȺwx)Hh ڹBAB:^Syh{Xqs_ZWtGq$U~^ڤ~sa{Z74yc uQ7FTn?m`03ʼn`pwHDd񚮉%k/9HYʓRq׫N#O3:޺3F=;8=V 'x߆c@WUc)ZVg R݅z,ldTXJ^Ýu{kZ/UĻqڶ5 {}c9xKo5U{_n@c"Tԟ<}WhF>R 29gFQ#ZG;K>:h-lCQ.x>pPZu<ݐ zP]RTήݫTcg @}!-AY wc hU`u齫՗;ZM˷UxJ-yo§y[KQo8Lyf֣Uud(R!k\M Y1/CJuJ&ZJ?{q?^JpE}DO6p- xPG?JN˥[K'W;:):X, wENn>;%k3^o2/t=onax;}?<a3~ӟx*&V ^IK2s(=S^B],wkvKX9|`õжX`Zݵ7,hg`s])ǹBkߔ< heR$ 7/Bz|=̐~rv}*}kxKs1wo[FF}~P7 ,(QO+iبz㎓WO*V;_pb -)($WKs][nBL(N\]8s5xH3qʶn/TSmiGK DE/L $j[`MAuֈS/9,^KM~Fe]O6ڇ3{ɍRf1?=#^t-gҍMj#\sBʍL5fKټdE 0:d?Qr7V.߭/s6O]Dcփ~K}OM7̟5iN6}@C[6YBLmQmrܡtU4L`N 9 n'Yj֬W{Fݓ{tuO~ kyE7F훒~W?Z6=зa,86-1 5+.@oɍtkKx׆orfTpWsw zoG>{ƹ[ntG1{p=`#ݮqqH#?}.kUijf>KSE6e+`Cչ<5ub#Cȡ 150I7pOd.ퟍaS|$kٲs!e^c|x.Wkj$ ?gczlpz&5s{hd]zpN0"i`v)v|̏Ziϕ|@%߻wЀOY T)~rcY?dfqֆbO~_/c S~Ŏ~NME )spiC&k=/[ё ob?,"TQy9#Gf,>+vrc@rl-_EX0;CtpU=8?X;zYCCZis?po%gw\ IIDATm F*ܽ g1ʢcSov>n58Edxacod֑t݄-uBFVwSZsZReZ q??=`jG߃L&P>0});,dxyUm0GpƟm@EZѠ#f -rk-ZbcLkj– hخǙ+G`v ^Bv?n߻{O (Mcl@ Ʊb#g8\֡!G[:'+ L-,f!kt?JkCN ةSywpוk7p@W|7Dݟ L,0}̡ſ9Fz_|^,)P2-T VƐ1nb *`j̳AM=t/^rt?*V+JP]pߵ^A]IV+[q׮.ĜGңRL,wɃ { pCET ut닎jfDQ@?ҶËgL5{gX#GAӓCAcVWkc(}yɗr(*w|pL/WANyR.vN{#0!ir.BM..*zVa,Cwaj֓[rJJ%; n4i.ݟt'}ykzy^k<@z?M\$ftH5:DYB1Q\+͒?wu}/˓sG :GM,}^!z$ls (my]wGkSSƌ+㫫T@N{;8T׽+[:FP|ݖY000[}Mu k~!y1TK/¥WٍW%kφXU3qH0D敮yCm[_ybjV[> WmxG.~oIFy%ܻM6ў2 ~UGcL @țÛ{(62sk:DMjw\ZJCmTz}.BXL#Why8DYt 94v}ⶑ? >ۨډVSWd}G-]*g>2=*; e5 UR { r"]PdA3V&&)?a$`ɣo UaZFAz,y  f-WPnY6yT6|MK$((z%*i Jz" 39f=-=[kwHQrEij ݠ!(dYo3T Ⱥj0$AY-?Y q6 QJ&jUQ95R/^>p7`@}|[6-:VCN$d4ri'Pl"D3x򗘝~ s"|8[/x]Nw8R/;39ȹ)"s7垿=]21[ V>ڣy⏉1M!Ch hzՏ?U1T v]~,c; s=SQL=伥7'EH u*C> '&jvZvUΞxk Dk~Yq=a%CsϾ"=sdGI{4!<+Cz.BP +J\(YorI.[U}2M*=<푒"׮`GM,o\$Od\Eh~ݷgTK-uWmھ-Ou4cseF{@B׼D΃rkDOAN'/zZ.T$ Ehjq(u춡zJo ʦ=IdprvC*hJRb#' LAUGsRV<+{t=c+(6.a'>bjU3$ N{J_݂[!O[s;pM+0tI:$ÀLҞmZX8C"ttw E|u oʼ d9rV_m/Xv&N<ס;,rqrĜܺ#ʹ* jS֓>kAAMGL-afdIT}W2;}t-S0t[{[or}.es99  32tbb ;bB`]g;9W& L-٢l_"?Edȴ|Y vR%듀G]Wd2:tb UiUO p eRa+@ܔxrBb2$ȤIp ڄլ7Hw$t\HÆ @$Ӏ.1)bXh݌OLv\㖯\I%IZo"y4UiY%x )dY|iw]:.pkZԞ-5oΙCD}1I2犀AUsUvFsNEA^oj"WUGe a'H0l*$YS 7>BS IO\D;V] <Ϥra@Oa :iËwx#LP@P-VckZ3@\j lSv ,,@9!>v5@L_-IQG/iWl$Ԫ_MrR+*=lz;ڃL+KʉwYEyV:}OeadA[$#Z1+o!xL-?({ ) 2}7 ͹ 2[[Rˤ G*)z\7}R^+p2=LK! `hy_j|4H9xP_|*N\˦M'-Ə0{[Q`FMGsios1`҃mi2<`8tA#xL Zh-+=G蠇} R=؁hQH%{9ضdW^~t@6*rdh1{=-3H]DDFLC0߂6DxG_ 8RD}|,H,g8eȪqS9#UkI=g3.Lڃۂ{*AMP&38 f KI$*ʳ"R^^tB8i5R/yVBz!y;%g+"خݢHq`F١ AXNs9M^UH|vޛ=CI9"'ʙE-Iî*,/gpHH{I !skI(xzMTIm mbgT e.G ;sdd[G8ېd m m!ȹ; hs*8:-Ks{8Z tkH{$h;wݲTX"L."DEĝlɉ\$d_Ϲzh0rM|j >m\33׵m^bR ,_E J2N*"9 p6;W鴍ZͪF5\ROU$I[90f +J@rBjPwa=tخb`p=T2w![¥KH1gGrG\yeM[鲊Eު5BwI Q% *2Fe1M.rDh$w+O@ Lq0ѕ1s ̚~2'/(ʐ7#[j'faN.ﻏ+[Cg 3ӢxcJ ysʋ 8|B&.}Ld, G'8Z5Ľ҃ޔ5,Qv@=]XT%].GB|%p7{9\Tx&L;Mfb+IGRPL<=+@>K`Ϝ"yBNZ WnFڴ1M[/ h]R$BLqsRC ;AY, Ka5ꂄ#"H) $lKq yЎ*>沥̘}Υ闃3-|Vi(Q"':Xi)(OngHx(ݦ$t8p9  DɔR,]V!srs9A,\t=Uݶ e"bn]5B9 /s1R@ЙL$9#0˕ hEaRΖ\ /A܉x.V)}No+q 5s}r$6dbs @ޮ!(9 2ioH3%tI " ,N0- K=f0e;K(~^RbRAZDuCqM*5TˆB[ tF#c N;%`95sN.196"M@phB`&yYP$`1MG,gr)LA&B{ 4{P^4}c*1~R oħ=t2,mp!j A5cnSi^7S'ɣAsxQF$h) ɠK2,"A1$\̈́vL,ano3Gdb34ƫ; ierYK% ytrA2m*94A8tm63 0&?@ʚ]b+xcI8΄Vդ.jz*RSCD]>x(uSH2dC$C`{@9H̹҅I,2G:1*1v#@5JM+\ [%S2(Vm(NSS IV.5āЯK`#3Lg F`C>Ќf0jo?=9݂6 .:~7cE4/z8"A"7cj"PZX^eO,C0Œ"И Lft*8ދ4 :{ދ4:]0tQ|-WC>ZPL1AB_y faT 2\2`yQyqstd&ы[sމ`Ns r}\>AZ|*4 @I'{ɉxw͡/+,q(\"'-AS8jDq^g, 앀@u'`#2&ői\ 4XNu @"֤" e$~4E @"֤" e$~4EhIENDB`dde_calendar_sync_schedule_32px.svg000066400000000000000000000072501473346337000341430ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons icon/unionID/日程类型 dde_calendar_sync_setting_32px.svg000066400000000000000000000133371473346337000340270ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons icon/unionID/设置 dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons/dde_calendar_warning.svg000066400000000000000000000065321473346337000321650ustar00rootroot00000000000000 deepin-cloudprint-config-helper Created with Sketch. dde_calendar_warning_light_32px.svg000066400000000000000000000051671473346337000341540ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons 形状结合 dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons/dde_calendar_xiu.svg000066400000000000000000000015731473346337000313250ustar00rootroot00000000000000 类型 Created with Sketch. dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons/dde_calendar_yi_32px.svg000077500000000000000000000025701473346337000320160ustar00rootroot00000000000000 icon_yi Created with Sketch. dde-calendar-5.14.13/calendar-client/assets/resources/builtin/icons/icon_refresh.svg000066400000000000000000000035501473346337000305160ustar00rootroot00000000000000 路径 dde-calendar-5.14.13/calendar-client/assets/resources/builtin/light/000077500000000000000000000000001473346337000253205ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/resources/builtin/light/create_black.svg000066400000000000000000000017671473346337000304530ustar00rootroot00000000000000 编组 21 dde-calendar-5.14.13/calendar-client/assets/resources/builtin/light/dde_calaendar_sidebar_32px.svg000066400000000000000000000024151473346337000331360ustar00rootroot00000000000000 日历 dde-calendar-5.14.13/calendar-client/assets/resources/builtin/light/dde_calendar_account_32px.svg000066400000000000000000000024451473346337000330230ustar00rootroot00000000000000 账户- light dde-calendar-5.14.13/calendar-client/assets/resources/icon/000077500000000000000000000000001473346337000234735ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/assets/resources/icon/account_dark.svg000066400000000000000000000024671473346337000266620ustar00rootroot00000000000000 账户- dark dde-calendar-5.14.13/calendar-client/assets/translate_generation.sh000066400000000000000000000003501473346337000252730ustar00rootroot00000000000000#!/bin/bash # this file is used to auto-generate .qm file from .ts file. # author: shibowen at linuxdeepin.com ts_list=(`ls translations/*.ts`) for ts in "${ts_list[@]}" do printf "\nprocess ${ts}\n" lrelease "${ts}" done dde-calendar-5.14.13/calendar-client/src/000077500000000000000000000000001473346337000200165ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/KeyPress/000077500000000000000000000000001473346337000215635ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/KeyPress/calldaykeyleftdeal.cpp000066400000000000000000000015531473346337000261160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calldaykeyleftdeal.h" #include "graphicsItem/cweekdaybackgrounditem.h" #include "cgraphicsscene.h" CAllDayKeyLeftDeal::CAllDayKeyLeftDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Left, scene) { } bool CAllDayKeyLeftDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { CWeekDayBackgroundItem *backgroundItem = dynamic_cast(item); backgroundItem->initState(); //如果是第一个则切换时间 scene->setActiveSwitching(true); if (backgroundItem->getLeftItem() == nullptr) { scene->setPrePage(item->getDate().addDays(-1), true); } else { scene->signalSwitchView(backgroundItem->getDate().addDays(-1), true); } return true; } dde-calendar-5.14.13/calendar-client/src/KeyPress/calldaykeyleftdeal.h000066400000000000000000000010521473346337000255550ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CALLDAYKEYLEFTDEAL_H #define CALLDAYKEYLEFTDEAL_H #include "ckeypressdealbase.h" /** * @brief The CAllDayKeyLeftDeal class * 全体左方向键处理 */ class CAllDayKeyLeftDeal : public CKeyPressDealBase { public: explicit CAllDayKeyLeftDeal(QGraphicsScene *scene = nullptr); protected: bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CALLDAYKEYLEFTDEAL_H dde-calendar-5.14.13/calendar-client/src/KeyPress/calldaykeyrightdeal.cpp000066400000000000000000000015631473346337000263020ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calldaykeyrightdeal.h" #include "graphicsItem/cweekdaybackgrounditem.h" #include "cgraphicsscene.h" CAllDayKeyRightDeal::CAllDayKeyRightDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Right, scene) { } bool CAllDayKeyRightDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { CWeekDayBackgroundItem *backgroundItem = dynamic_cast(item); backgroundItem->initState(); //如果没有下一个则切换时间 scene->setActiveSwitching(true); if (backgroundItem->getRightItem() == nullptr) { scene->setNextPage(item->getDate().addDays(1), true); } else { scene->signalSwitchView(backgroundItem->getDate().addDays(1), true); } return true; } dde-calendar-5.14.13/calendar-client/src/KeyPress/calldaykeyrightdeal.h000066400000000000000000000010271473346337000257420ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CALLDAYKEYRIGHTDEAL_H #define CALLDAYKEYRIGHTDEAL_H #include "ckeypressdealbase.h" /** * @brief The CAllDayKeyRightDeal class * */ class CAllDayKeyRightDeal : public CKeyPressDealBase { public: explicit CAllDayKeyRightDeal(QGraphicsScene *scene = nullptr); protected: bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CALLDAYKEYRIGHTDEAL_H dde-calendar-5.14.13/calendar-client/src/KeyPress/ckeydowndeal.cpp000066400000000000000000000012761473346337000247460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ckeydowndeal.h" #include "graphicsItem/cscenebackgrounditem.h" #include "cgraphicsscene.h" #include CKeyDownDeal::CKeyDownDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Down, scene) { } bool CKeyDownDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { item->initState(); if (item->getDownItem() != nullptr) { scene->setCurrentFocusItem(item->getDownItem()); item->getDownItem()->setItemFocus(true); } else { scene->setNextPage(item->getDate().addDays(7)); } return true; } dde-calendar-5.14.13/calendar-client/src/KeyPress/ckeydowndeal.h000066400000000000000000000010011473346337000243750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CKEYDOWNDEAL_H #define CKEYDOWNDEAL_H #include "ckeypressdealbase.h" /** * @brief The CKeyDownDeal class * 下方向键处理 */ class CKeyDownDeal : public CKeyPressDealBase { public: explicit CKeyDownDeal(QGraphicsScene *scene = nullptr); protected: bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CKEYDOWNDEAL_H dde-calendar-5.14.13/calendar-client/src/KeyPress/ckeyenabledeal.cpp000066400000000000000000000051431473346337000252220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ckeyenabledeal.h" #include "cgraphicsscene.h" #include "scheduledlg.h" #include "graphicsItem/cscenebackgrounditem.h" #include "graphicsItem/draginfoitem.h" #include "myscheduleview.h" #include CKeyEnableDeal::CKeyEnableDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Return, scene) { } /** * @brief CKeyEnableDeal::focusItemDeal 焦点项处理 * @param item * @param scene * @return */ bool CKeyEnableDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { bool result = false; CFocusItem *focusItem = item->getFocusItem(); if (focusItem != nullptr) { result = true; QWidget *parentWidget = scene->views().at(0); switch (focusItem->getItemType()) { case CFocusItem::CBACK: { CSceneBackgroundItem *backgroundItem = dynamic_cast(focusItem); if (backgroundItem != nullptr) { QDateTime createDateTime; //设置创建时间 createDateTime.setDate(backgroundItem->getDate()); createDateTime.setTime(QTime(0, 0, 0)); //如果为月视图背景则根据是否为当前时间设置不一样的创建时间 if (backgroundItem->getItemOfView() == CSceneBackgroundItem::OnMonthView) { QDateTime currentDateTime = QDateTime::currentDateTime(); //如果为当前时间则设置创建开始时间为当前时间 if (backgroundItem->getDate() == currentDateTime.date()) { createDateTime.setTime(currentDateTime.time()); } else { createDateTime.setTime(QTime(8, 0, 0)); } } createSchedule(createDateTime, parentWidget); } } break; case CFocusItem::CITEM: { DragInfoItem *scheduleItem = dynamic_cast(focusItem); CMyScheduleView dlg(scheduleItem->getData(), parentWidget); dlg.exec(); } break; default: { scene->signalGotoDayView(focusItem->getDate()); } break; } } return result; } /** * @brief CKeyEnableDeal::createSchedule 创建日程 * @param createDate * @param parent */ void CKeyEnableDeal::createSchedule(const QDateTime &createDate, QWidget *parent) { CScheduleDlg dlg(1, parent); dlg.setDate(createDate); dlg.setAllDay(true); dlg.exec(); } dde-calendar-5.14.13/calendar-client/src/KeyPress/ckeyenabledeal.h000066400000000000000000000012551473346337000246670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CKEYENABLEDEAL_H #define CKEYENABLEDEAL_H #include "ckeypressdealbase.h" #include #include /** * @brief The CKeyEnableDeal class * 回车键处理 */ class CKeyEnableDeal : public CKeyPressDealBase { public: explicit CKeyEnableDeal(QGraphicsScene *scene = nullptr); protected: //焦点项处理 bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; private: //创建日程 static void createSchedule(const QDateTime &createDate, QWidget *parent); }; #endif // CKEYENABLEDEAL_H dde-calendar-5.14.13/calendar-client/src/KeyPress/ckeyleftdeal.cpp000066400000000000000000000012761473346337000247310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ckeyleftdeal.h" #include "graphicsItem/cscenebackgrounditem.h" #include "cgraphicsscene.h" #include CKeyLeftDeal::CKeyLeftDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Left, scene) { } bool CKeyLeftDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { item->initState(); if (item->getLeftItem() != nullptr) { scene->setCurrentFocusItem(item->getLeftItem()); item->getLeftItem()->setItemFocus(true); } else { scene->setPrePage(item->getDate().addDays(-1)); } return true; } dde-calendar-5.14.13/calendar-client/src/KeyPress/ckeyleftdeal.h000066400000000000000000000010011473346337000243600ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CKEYLEFTDEAL_H #define CKEYLEFTDEAL_H #include "ckeypressdealbase.h" /** * @brief The CKeyLeftDeal class * 左方向键处理 */ class CKeyLeftDeal : public CKeyPressDealBase { public: explicit CKeyLeftDeal(QGraphicsScene *scene = nullptr); protected: bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CKEYLEFTDEAL_H dde-calendar-5.14.13/calendar-client/src/KeyPress/ckeypressdealbase.cpp000066400000000000000000000016461473346337000257670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ckeypressdealbase.h" #include "cgraphicsscene.h" #include "graphicsItem/cscenebackgrounditem.h" CKeyPressDealBase::CKeyPressDealBase(Qt::Key key, QGraphicsScene *scene) : m_key(key) , m_scene(scene) { } CKeyPressDealBase::~CKeyPressDealBase() { } /** * @brief CKeyPressDealBase::getKey 获取注册的key * @return */ Qt::Key CKeyPressDealBase::getKey() const { return m_key; } bool CKeyPressDealBase::dealEvent() { CGraphicsScene *scene = qobject_cast(m_scene); if (scene != nullptr) { CSceneBackgroundItem *item = dynamic_cast(scene->getCurrentFocusItem()); if (item != nullptr) { return focusItemDeal(item, scene); } else { return false; } } return false; } dde-calendar-5.14.13/calendar-client/src/KeyPress/ckeypressdealbase.h000066400000000000000000000013021473346337000254210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CKEYPRESSDEALBASE_H #define CKEYPRESSDEALBASE_H #include class QGraphicsScene; class CSceneBackgroundItem; class CGraphicsScene; class CKeyPressDealBase { public: explicit CKeyPressDealBase(Qt::Key key, QGraphicsScene *scene = nullptr); virtual ~CKeyPressDealBase(); //获取注册的key Qt::Key getKey() const; bool dealEvent(); protected: virtual bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) = 0; private: Qt::Key m_key; protected: QGraphicsScene *m_scene; }; #endif // CKEYPRESSDEALBASE_H dde-calendar-5.14.13/calendar-client/src/KeyPress/ckeypressprxy.cpp000066400000000000000000000024061473346337000252240ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ckeypressprxy.h" #include CKeyPressPrxy::CKeyPressPrxy() { } CKeyPressPrxy::~CKeyPressPrxy() { QMap::iterator iter = m_keyEventMap.begin(); for (; iter != m_keyEventMap.end(); ++iter) { delete iter.value(); } m_keyEventMap.clear(); } /** * @brief CKeyPressPrxy::keyPressDeal 键盘事件处理 * @param event * @return */ bool CKeyPressPrxy::keyPressDeal(int key) { bool result = m_keyEventMap.contains(key); if (result) { //如果有注册对应的key事件 开始处理 result = m_keyEventMap[key]->dealEvent(); } return result; } /** * @brief CKeyPressPrxy::addkeyPressDeal 添加需要处理的键盘事件 * @param deal */ void CKeyPressPrxy::addkeyPressDeal(CKeyPressDealBase *deal) { if (deal != nullptr) m_keyEventMap[deal->getKey()] = deal; } /** * @brief CKeyPressPrxy::removeDeal 移除添加的键盘事件 * @param deal */ void CKeyPressPrxy::removeDeal(CKeyPressDealBase *deal) { if (m_keyEventMap.contains(deal->getKey())) { m_keyEventMap.remove(deal->getKey()); delete deal; } } dde-calendar-5.14.13/calendar-client/src/KeyPress/ckeypressprxy.h000066400000000000000000000012131473346337000246640ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CKEYPRESSPRXY_H #define CKEYPRESSPRXY_H #include "ckeypressdealbase.h" #include #include class CKeyPressPrxy { public: explicit CKeyPressPrxy(); ~CKeyPressPrxy(); //键盘事件处理 bool keyPressDeal(int key); //添加需要处理的键盘事件 void addkeyPressDeal(CKeyPressDealBase *deal); //移除添加的键盘事件 void removeDeal(CKeyPressDealBase *deal); private: QMap m_keyEventMap {}; }; #endif // CKEYPRESSPRXY_H dde-calendar-5.14.13/calendar-client/src/KeyPress/ckeyrightdeal.cpp000066400000000000000000000013061473346337000251060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ckeyrightdeal.h" #include "graphicsItem/cscenebackgrounditem.h" #include "cgraphicsscene.h" #include CKeyRightDeal::CKeyRightDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Right, scene) { } bool CKeyRightDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { item->initState(); if (item->getRightItem() != nullptr) { scene->setCurrentFocusItem(item->getRightItem()); item->getRightItem()->setItemFocus(true); } else { scene->setNextPage(item->getDate().addDays(1)); } return true; } dde-calendar-5.14.13/calendar-client/src/KeyPress/ckeyrightdeal.h000066400000000000000000000010071473346337000245510ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CKEYRIGHTDEAL_H #define CKEYRIGHTDEAL_H #include "ckeypressdealbase.h" /** * @brief The CKeyRightDeal class * 右方向键处理 */ class CKeyRightDeal : public CKeyPressDealBase { public: explicit CKeyRightDeal(QGraphicsScene *scene = nullptr); protected: bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CKEYRIGHTDEAL_H dde-calendar-5.14.13/calendar-client/src/KeyPress/ckeyupdeal.cpp000066400000000000000000000012561473346337000244210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ckeyupdeal.h" #include "graphicsItem/cscenebackgrounditem.h" #include "cgraphicsscene.h" #include CKeyUpDeal::CKeyUpDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Up, scene) { } bool CKeyUpDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { item->initState(); if (item->getUpItem() != nullptr) { scene->setCurrentFocusItem(item->getUpItem()); item->getUpItem()->setItemFocus(true); } else { scene->setPrePage(item->getDate().addDays(-7)); } return true; } dde-calendar-5.14.13/calendar-client/src/KeyPress/ckeyupdeal.h000066400000000000000000000007641473346337000240710ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CKEYUPDEAL_H #define CKEYUPDEAL_H #include "ckeypressdealbase.h" /** * @brief The CKeyUpDeal class * 上方向键处理 */ class CKeyUpDeal : public CKeyPressDealBase { public: explicit CKeyUpDeal(QGraphicsScene *scene = nullptr); protected: bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CKEYUPDEAL_H dde-calendar-5.14.13/calendar-client/src/KeyPress/cscenetabkeydeal.cpp000066400000000000000000000022401473346337000255530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cscenetabkeydeal.h" #include "graphicsItem/cscenebackgrounditem.h" #include "cgraphicsscene.h" #include #include CSceneTabKeyDeal::CSceneTabKeyDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Tab, scene) { } bool CSceneTabKeyDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { CSceneBackgroundItem *nextItem = qobject_cast(item->setNextItemFocusAndGetNextItem()); if (nextItem == nullptr) { scene->setCurrentFocusItem(nullptr); item->setItemFocus(false); return false; } else { CFocusItem *focusItem = nextItem->getFocusItem(); //如果当前焦点显示不为背景则定位到当前焦点item位置 if (focusItem->getItemType() != CFocusItem::CBACK) { QGraphicsView *view = scene->views().at(0); QPointF point(scene->width() / 2, focusItem->rect().y()); view->centerOn(point); } scene->setCurrentFocusItem(nextItem); return true; } } dde-calendar-5.14.13/calendar-client/src/KeyPress/cscenetabkeydeal.h000066400000000000000000000010631473346337000252220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSCENETABKEYDEAL_H #define CSCENETABKEYDEAL_H #include "ckeypressdealbase.h" /** * @brief The CSceneTabKeyDeal class * 场景tab切换处理 */ class CSceneTabKeyDeal : public CKeyPressDealBase { public: explicit CSceneTabKeyDeal(QGraphicsScene *scene = nullptr); protected: //焦点切换处理 bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CSCENETABKEYDEAL_H dde-calendar-5.14.13/calendar-client/src/KeyPress/cweekdayscenetabkeydeal.cpp000066400000000000000000000024611473346337000271320ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cweekdayscenetabkeydeal.h" #include "graphicsItem/cweekdaybackgrounditem.h" #include "cgraphicsscene.h" CWeekDaySceneTabKeyDeal::CWeekDaySceneTabKeyDeal(QGraphicsScene *scene) : CSceneTabKeyDeal(scene) { } bool CWeekDaySceneTabKeyDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { CWeekDayBackgroundItem *focusItem = dynamic_cast(item); if (focusItem != nullptr) { //如果当前背景是焦点显示则切换到另一个视图 if (focusItem->getItemFocus()) { focusItem->setItemFocus(false); scene->setActiveSwitching(true); scene->signalSwitchView(focusItem->getDate()); return true; } else { //如果该背景上还有切换显示的日程标签 if (focusItem->hasNextSubItem() || focusItem->showFocus()) { return CSceneTabKeyDeal::focusItemDeal(item, scene); } else { focusItem->initState(); scene->setActiveSwitching(true); scene->signalSwitchView(focusItem->getDate()); return true; } } } return false; } dde-calendar-5.14.13/calendar-client/src/KeyPress/cweekdayscenetabkeydeal.h000066400000000000000000000012771473346337000266030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CWEEKDAYSCENETABKEYDEAL_H #define CWEEKDAYSCENETABKEYDEAL_H #include "cscenetabkeydeal.h" /** * @brief The CWeekDaySceneTabKeyDeal class * 周/日场景tab切换 */ class CWeekDaySceneTabKeyDeal : public CSceneTabKeyDeal { public: enum TabKeyType { ALLDayDeal, PartTimeDeal }; //全体视图处理,非全天视图处理 public: explicit CWeekDaySceneTabKeyDeal(QGraphicsScene *scene = nullptr); protected: bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CWEEKDAYSCENETABKEYDEAL_H dde-calendar-5.14.13/calendar-client/src/accessible/000077500000000000000000000000001473346337000221135ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/accessible/accessible.h000066400000000000000000000137331473346337000243700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCESSIBLE_H #define ACCESSIBLE_H #include "accessibledefine.h" #include "../widget/yearWidget/yearwindow.h" #include "../widget/monthWidget/monthwindow.h" #include "../widget/weekWidget/weekwindow.h" #include "../widget/dayWidget/daywindow.h" #include "../customWidget/scheduleRemindWidget.h" #include "../view/alldayeventview.h" #include "../view/monthgraphiview.h" #include "../view/graphicsview.h" #include "../customWidget/customframe.h" #include "../customWidget/animationstackedwidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE //using namespace DCC_NAMESPACE; SET_FORM_ACCESSIBLE(CYearWindow, "YearWidget"); SET_FORM_ACCESSIBLE(CMonthWindow, "MonthWidget"); SET_FORM_ACCESSIBLE(CWeekWindow, "WeekWidget"); SET_FORM_ACCESSIBLE(CDayWindow, "DayWidget"); SET_FORM_ACCESSIBLE(ScheduleRemindWidget, "ScheduleRemindWidget"); SET_FORM_ACCESSIBLE(CAllDayEventWeekView, "CAllDayEventWeekView"); SET_FORM_ACCESSIBLE(CMonthGraphicsview, "CMonthGraphicsview"); SET_FORM_ACCESSIBLE(CGraphicsView, "CGraphicsView"); SET_FORM_ACCESSIBLE(CustomFrame, "CustomFrame"); SET_FORM_ACCESSIBLE(AnimationStackedWidget, "AnimationStackedWidget"); // Qt控件 SET_FORM_ACCESSIBLE(QFrame, m_w->objectName().isEmpty() ? "frame" : m_w->objectName()) SET_FORM_ACCESSIBLE(QWidget, m_w->objectName().isEmpty() ? "widget" : m_w->objectName()) SET_BUTTON_ACCESSIBLE(QPushButton, m_w->text().isEmpty() ? "qpushbutton" : m_w->text()) SET_SLIDER_ACCESSIBLE(QSlider, "qslider") SET_FORM_ACCESSIBLE(QMenu, "qmenu") //SET_LABEL_ACCESSIBLE(QLabel, m_w->text().isEmpty() ? "qlabel" : m_w->text()) // Dtk控件 SET_FORM_ACCESSIBLE(DFrame, m_w->objectName().isEmpty() ? "frame" : m_w->objectName()) SET_FORM_ACCESSIBLE(DWidget, m_w->objectName().isEmpty() ? "widget" : m_w->objectName()) SET_FORM_ACCESSIBLE(DBackgroundGroup, m_w->objectName().isEmpty() ? "dbackgroundgroup" : m_w->objectName()) SET_BUTTON_ACCESSIBLE(DSwitchButton, m_w->text().isEmpty() ? "switchbutton" : m_w->text()) SET_BUTTON_ACCESSIBLE(DFloatingButton, m_w->toolTip().isEmpty() ? "DFloatingButton" : m_w->toolTip()) SET_FORM_ACCESSIBLE(DSearchEdit, m_w->objectName().isEmpty() ? "DSearchEdit" : m_w->objectName()) SET_BUTTON_ACCESSIBLE(DPushButton, m_w->objectName().isEmpty() ? "DPushButton" : m_w->objectName()) SET_BUTTON_ACCESSIBLE(DIconButton, m_w->objectName().isEmpty() ? "DIconButton" : m_w->objectName()) SET_BUTTON_ACCESSIBLE(DCheckBox, m_w->objectName().isEmpty() ? "DCheckBox" : m_w->objectName()) SET_BUTTON_ACCESSIBLE(DCommandLinkButton, "DCommandLinkButton") SET_FORM_ACCESSIBLE(DTitlebar, m_w->objectName().isEmpty() ? "DTitlebar" : m_w->objectName()) //SET_LABEL_ACCESSIBLE(DLabel, m_w->text().isEmpty() ? "DLabel" : m_w->text()) SET_BUTTON_ACCESSIBLE(DToolButton, m_w->objectName().isEmpty() ? "DToolButton" : m_w->objectName()) SET_FORM_ACCESSIBLE(DDialog, m_w->objectName().isEmpty() ? "DDialog" : m_w->objectName()) SET_FORM_ACCESSIBLE(DFileDialog, m_w->objectName().isEmpty() ? "DFileDialog" : m_w->objectName()) QAccessibleInterface *accessibleFactory(const QString &classname, QObject *object) { QAccessibleInterface *interface = nullptr; USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CYearWindow); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CMonthWindow); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CWeekWindow); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CDayWindow); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), ScheduleRemindWidget); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CAllDayEventWeekView); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CMonthGraphicsview); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CGraphicsView); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CustomFrame); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), AnimationStackedWidget); // Qt 控件 USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QFrame); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QWidget); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QPushButton); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QSlider); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QMenu); // USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QLabel); // dtk 控件 USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DFrame); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DWidget); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DBackgroundGroup); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DSwitchButton); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DFloatingButton); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DSearchEdit); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DPushButton); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DIconButton); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DCheckBox); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DCommandLinkButton); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DTitlebar); // USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DLabel); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DDialog); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DFileDialog); return interface; } #endif // ACCESSIBLE_H dde-calendar-5.14.13/calendar-client/src/accessible/accessibledefine.h000066400000000000000000000343351473346337000255440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCESSIBLEDEFINE_H #define ACCESSIBLEDEFINE_H #include #include #include #include #include #include #include #include #include #include #define SEPARATOR "_" inline QString getAccessibleName(QWidget *w, QAccessible::Role r, const QString &fallback) { const QString lowerFallback = fallback.toLower(); // 避免重复生成 static QMap objnameMap; if (!objnameMap[w].isEmpty()) return objnameMap[w]; static QMap> accessibleMap; QString oldAccessName = w->accessibleName().toLower(); oldAccessName.replace(SEPARATOR, ""); // 按照类型添加固定前缀 QMetaEnum metaEnum = QMetaEnum::fromType(); QByteArray prefix = metaEnum.valueToKeys(r); switch (r) { case QAccessible::Form: prefix = "Form"; break; case QAccessible::Button: prefix = "Btn"; break; case QAccessible::StaticText: prefix = "Label"; break; case QAccessible::EditableText: prefix = "Editable"; break; case QAccessible::Slider: prefix = "Slider"; break; default: break; } // 再加上标识 QString accessibleName = QString::fromLatin1(prefix) + SEPARATOR; accessibleName += oldAccessName.isEmpty() ? lowerFallback : oldAccessName; // 检查名称是否唯一 if (accessibleMap[r].contains(accessibleName)) { // 获取编号,然后+1 int pos = accessibleName.indexOf(SEPARATOR); int id = accessibleName.mid(pos + 1).toInt(); QString newAccessibleName; do { // 一直找到一个不重复的名字 newAccessibleName = accessibleName + SEPARATOR + QString::number(++id); } while (accessibleMap[r].contains(newAccessibleName)); accessibleMap[r].append(newAccessibleName); objnameMap.insert(w, newAccessibleName); QObject::connect(w, &QWidget::destroyed, [=](QObject *obj) { // 对象销毁后移除占用名称 objnameMap.remove(obj); accessibleMap[r].removeOne(newAccessibleName); }); return newAccessibleName; } else { accessibleMap[r].append(accessibleName); objnameMap.insert(w, accessibleName); QObject::connect(w, &QWidget::destroyed, [=](QObject *obj) { // 对象销毁后移除占用名称 objnameMap.remove(obj); accessibleMap[r].removeOne(accessibleName); }); return accessibleName; } } // 公共的功能 #define FUNC_CREATE(classname, accessibletype, accessdescription) \ explicit Accessible##classname(classname *w) \ : QAccessibleWidget(w, accessibletype, #classname) \ , m_w(w) \ , m_description(accessdescription) \ { \ } #define FUNC_TEXT(classname, accessiblename) \ QString Accessible##classname::text(QAccessible::Text t) const \ { \ switch (t) { \ case QAccessible::Name: \ return getAccessibleName(m_w, this->role(), accessiblename); \ case QAccessible::Description: \ return m_description; \ default: \ return QString(); \ } \ } // button控件特有功能 #define FUNC_ACTIONNAMES(classname) \ QStringList Accessible##classname::actionNames() const \ { \ if (!m_w->isEnabled()) \ return QStringList(); \ return QStringList() << pressAction() << showMenuAction(); \ } #define FUNC_DOACTION(classname) \ void Accessible##classname::doAction(const QString &actionName) \ { \ if (actionName == pressAction()) { \ QPointF localPos = m_w->geometry().center(); \ QMouseEvent event(QEvent::MouseButtonPress, localPos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); \ qApp->sendEvent(m_w, &event); \ } else if (actionName == showMenuAction()) { \ QPointF localPos = m_w->geometry().center(); \ QMouseEvent event(QEvent::MouseButtonPress, localPos, Qt::RightButton, Qt::RightButton, Qt::NoModifier); \ qApp->sendEvent(m_w, &event); \ } \ } // Label控件特有功能 #define FUNC_TEXT_(classname) \ QString Accessible##classname::text(int startOffset, int endOffset) const \ { \ Q_UNUSED(startOffset) \ Q_UNUSED(endOffset) \ return m_w->text(); \ } // Slider控件特有功能 #define FUNC_CURRENTVALUE(classname) \ QVariant Accessible##classname::currentValue() const \ { \ return m_w->value(); \ } #define FUNC_SETCURRENTVALUE(classname) \ void Accessible##classname::setCurrentValue(const QVariant &value) \ { \ return m_w->setValue(value.toInt()); \ } #define FUNC_MAXMUMVALUE(classname) \ QVariant Accessible##classname::maximumValue() const \ { \ return QVariant(m_w->maximum()); \ } #define FUNC_FUNC_MINIMUMVALUE(classname) \ QVariant Accessible##classname::minimumValue() const \ { \ return QVariant(m_w->minimum()); \ } #define FUNC_FUNC_MINIMUMSTEPSIZE(classname) \ QVariant Accessible##classname::minimumStepSize() const \ { \ return QVariant(m_w->singleStep()); \ } #define SET_FORM_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ class Accessible##classname : public QAccessibleWidget \ { \ public: \ FUNC_CREATE(classname, QAccessible::Form, accessdescription) \ QString text(QAccessible::Text t) const override; \ void *interface_cast(QAccessible::InterfaceType t) override \ { \ switch (t) { \ case QAccessible::ActionInterface: \ return static_cast(this); \ default: \ return nullptr; \ } \ } \ \ private: \ classname *m_w; \ QString m_description; \ }; \ FUNC_TEXT(classname, accessiblename) #define SET_BUTTON_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ class Accessible##classname : public QAccessibleWidget \ { \ public: \ FUNC_CREATE(classname, QAccessible::Button, accessdescription) \ QString text(QAccessible::Text t) const override; \ void *interface_cast(QAccessible::InterfaceType t) override \ { \ switch (t) { \ case QAccessible::ActionInterface: \ return static_cast(this); \ default: \ return nullptr; \ } \ } \ QStringList actionNames() const override; \ void doAction(const QString &actionName) override; \ \ private: \ classname *m_w; \ QString m_description; \ }; \ FUNC_TEXT(classname, accessiblename) \ FUNC_ACTIONNAMES(classname) \ FUNC_DOACTION(classname) #define SET_LABEL_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ class Accessible##classname : public QAccessibleWidget \ , public QAccessibleTextInterface \ { \ public: \ FUNC_CREATE(classname, QAccessible::StaticText, accessdescription) \ QString text(QAccessible::Text t) const override; \ void *interface_cast(QAccessible::InterfaceType t) override \ { \ switch (t) { \ case QAccessible::ActionInterface: \ return static_cast(this); \ case QAccessible::TextInterface: \ return static_cast(this); \ default: \ return nullptr; \ } \ } \ QString text(int startOffset, int endOffset) const override; \ void selection(int selectionIndex, int *startOffset, int *endOffset) const override {} \ int selectionCount() const override { return 0; } \ void addSelection(int startOffset, int endOffset) override {} \ void removeSelection(int selectionIndex) override {} \ void setSelection(int selectionIndex, int startOffset, int endOffset) override {} \ int cursorPosition() const override { return 0; } \ void setCursorPosition(int position) override {} \ int characterCount() const override { return 0; } \ QRect characterRect(int offset) const override { return QRect(); } \ int offsetAtPoint(const QPoint &point) const override { return 0; } \ void scrollToSubstring(int startIndex, int endIndex) override {} \ QString attributes(int offset, int *startOffset, int *endOffset) const override { return QString(); } \ \ private: \ classname *m_w; \ QString m_description; \ }; \ FUNC_TEXT(classname, accessiblename) \ FUNC_TEXT_(classname) #define SET_SLIDER_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ class Accessible##classname : public QAccessibleWidget \ , public QAccessibleValueInterface \ { \ public: \ FUNC_CREATE(classname, QAccessible::Slider, accessdescription) \ QString text(QAccessible::Text t) const override; \ void *interface_cast(QAccessible::InterfaceType t) override \ { \ switch (t) { \ case QAccessible::ActionInterface: \ return static_cast(this); \ case QAccessible::ValueInterface: \ return static_cast(this); \ default: \ return nullptr; \ } \ } \ QVariant currentValue() const override; \ void setCurrentValue(const QVariant &value) override; \ QVariant maximumValue() const override; \ QVariant minimumValue() const override; \ QVariant minimumStepSize() const override; \ \ private: \ classname *m_w; \ QString m_description; \ }; \ FUNC_TEXT(classname, accessiblename) \ FUNC_CURRENTVALUE(classname) \ FUNC_SETCURRENTVALUE(classname) \ FUNC_MAXMUMVALUE(classname) \ FUNC_FUNC_MINIMUMVALUE(classname) \ FUNC_FUNC_MINIMUMSTEPSIZE(classname) #define SET_EDITABLE_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ class Accessible##classname : public QAccessibleWidget \ , public QAccessibleEditableTextInterface \ , public QAccessibleTextInterface \ { \ public: \ FUNC_CREATE(classname, QAccessible::EditableText, accessdescription) \ QString text(QAccessible::Text t) const override; \ QAccessibleInterface *child(int index) const override { return nullptr; } \ void *interface_cast(QAccessible::InterfaceType t) override \ { \ switch (t) { \ case QAccessible::ActionInterface: \ return static_cast(this); \ case QAccessible::TextInterface: \ return static_cast(this); \ case QAccessible::EditableTextInterface: \ return static_cast(this); \ default: \ return nullptr; \ } \ } \ QString text(int startOffset, int endOffset) const override; \ void selection(int selectionIndex, int *startOffset, int *endOffset) const override {} \ int selectionCount() const override { return 0; } \ void addSelection(int startOffset, int endOffset) override {} \ void removeSelection(int selectionIndex) override {} \ void setSelection(int selectionIndex, int startOffset, int endOffset) override {} \ int cursorPosition() const override { return 0; } \ void setCursorPosition(int position) override {} \ int characterCount() const override { return 0; } \ QRect characterRect(int offset) const override { return QRect(); } \ int offsetAtPoint(const QPoint &point) const override { return 0; } \ void scrollToSubstring(int startIndex, int endIndex) override {} \ QString attributes(int offset, int *startOffset, int *endOffset) const override { return QString(); } \ void insertText(int offset, const QString &text) override {} \ void deleteText(int startOffset, int endOffset) override {}; \ void replaceText(int startOffset, int endOffset, const QString &text) override {} \ \ private: \ classname *m_w; \ QString m_description; \ }; \ FUNC_TEXT(classname, accessiblename) \ FUNC_TEXT_(classname) #define USE_ACCESSIBLE(classnamestring, classname) \ if (classnamestring == QLatin1String(#classname) && object && object->isWidgetType()) { \ interface = new Accessible##classname(static_cast(object)); \ } // [指定objectname]---适用同一个类,但objectname不同的情况 #define USE_ACCESSIBLE_BY_OBJECTNAME(classnamestring, classname, objectname) \ if (classnamestring == QLatin1String(#classname) && object && (object->objectName() == objectname) && object->isWidgetType()) { \ interface = new Accessible##classname(static_cast(object)); \ } /*******************************************简化使用*******************************************/ #define SET_FORM_ACCESSIBLE(classname, accessiblename) SET_FORM_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") #define SET_BUTTON_ACCESSIBLE(classname, accessiblename) SET_BUTTON_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") #define SET_LABEL_ACCESSIBLE(classname, accessiblename) SET_LABEL_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") #define SET_SLIDER_ACCESSIBLE(classname, accessiblename) SET_SLIDER_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") #define SET_EDITABLE_ACCESSIBLE(classname, accessiblename) SET_EDITABLE_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") #define SET_PROGRESSBAR_ACCESSIBLE(classname, accessiblename) SET_PROGRESSBAR_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") /************************************************************************************************/ #endif // ACCESSIBLEDEFINE_H dde-calendar-5.14.13/calendar-client/src/calendarglobalenv.cpp000066400000000000000000000025771473346337000242000ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calendarglobalenv.h" CalendarGlobalEnv *CalendarGlobalEnv::getGlobalEnv() { static CalendarGlobalEnv globalEnv; return &globalEnv; } CalendarGlobalEnv *CalendarGlobalEnv::operator->() const { return getGlobalEnv(); } //注册关键字 bool CalendarGlobalEnv::registerKey(const QString &key, const QVariant &variant) { //如果不包含则添加 if (!m_GlobalEnv.contains(key)) { m_GlobalEnv[key] = variant; return true; } return false; } //修改值 bool CalendarGlobalEnv::reviseValue(const QString &key, const QVariant &variant) { //如果包含,则修改 if (m_GlobalEnv.contains(key)) { m_GlobalEnv[key] = variant; return true; } return false; } //移除注册的关键字 bool CalendarGlobalEnv::removeKey(const QString &key) { //如果包含则移除 if (m_GlobalEnv.contains(key)) { m_GlobalEnv.remove(key); return true; } return false; } //根据关键字获取对应的值 bool CalendarGlobalEnv::getValueByKey(const QString &key, QVariant &variant) { if (m_GlobalEnv.contains(key)) { variant = m_GlobalEnv.value(key); return true; } return false; } CalendarGlobalEnv::CalendarGlobalEnv() : m_GlobalEnv{} { } dde-calendar-5.14.13/calendar-client/src/calendarglobalenv.h000066400000000000000000000037061473346337000236400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CALENDARGLOBALENV_H #define CALENDARGLOBALENV_H #include /** * @brief The CalendarGlobalEnv class 日历全局环境变量类,用来保存一些全局唯一的变量 */ class CalendarGlobalEnv { public: /** * @brief getGlobalEnv * @return */ static CalendarGlobalEnv *getGlobalEnv(); CalendarGlobalEnv *operator->() const; /** * @brief registerKey 注册关键字 * @param key 关键字 * @param variant 值 * @return 是否成功,若key已经被注册返回false,否则返回true */ bool registerKey(const QString &key, const QVariant &variant); /** * @brief reviseValue 修改值 * @param key 关键字 * @param variant 值 * @return 是否成功,若key没有被注册则返回false,否则返回true */ bool reviseValue(const QString &key, const QVariant &variant); /** * @brief removeKey 移除注册的关键字 * @param key 关键字 * @return 若key没有被注册则返回false,否则返回true */ bool removeKey(const QString &key); /** * @brief getValueByKey 根据关键字获取对应的值 * @param key 关键字 * @param variant 获取到的值 * @return 若key没有被注册则返回false,否则返回true */ bool getValueByKey(const QString &key, QVariant &variant); private: CalendarGlobalEnv(); CalendarGlobalEnv(CalendarGlobalEnv &) = delete; CalendarGlobalEnv &operator=(const CalendarGlobalEnv &) = delete; private: QMap m_GlobalEnv; }; #endif // CALENDARGLOBALENV_H dde-calendar-5.14.13/calendar-client/src/configsettings.cpp000066400000000000000000000036461473346337000235610ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "configsettings.h" #include #include DCORE_USE_NAMESPACE; CConfigSettings::CConfigSettings() { init(); } CConfigSettings::~CConfigSettings() { releaseInstance(); } void CConfigSettings::init() { //如果为空则创建 if (m_settings == nullptr) { auto configFilepath = DStandardPaths::standardLocations(QStandardPaths::AppConfigLocation).value(0) + "/config.ini"; m_settings = new QSettings(configFilepath, QSettings::IniFormat); } initSetting(); } void CConfigSettings::initSetting() { m_userSidebarStatus = value("userSidebarStatus", true).toBool(); } /** * @brief CConfigSettings::releaseInstance 释放配置指针 */ void CConfigSettings::releaseInstance() { delete m_settings; m_settings = nullptr; } CConfigSettings *CConfigSettings::getInstance() { static CConfigSettings configSettings; return &configSettings; } void CConfigSettings::sync() { m_settings->sync(); } QVariant CConfigSettings::value(const QString &key, const QVariant &defaultValue) { return m_settings->value(key, defaultValue); } //设置对应key的值 void CConfigSettings::setOption(const QString &key, const QVariant &value) { m_settings->setValue(key, value); } //移除对应的配置信息 void CConfigSettings::remove(const QString &key) { m_settings->remove(key); } //判断是否包含对应的key bool CConfigSettings::contains(const QString &key) const { return m_settings->contains(key); } CConfigSettings *CConfigSettings::operator->() const { return getInstance(); } bool CConfigSettings::getUserSidebarStatus() { return m_userSidebarStatus; } void CConfigSettings::setUserSidebarStatus(bool status) { m_userSidebarStatus = status; setOption("userSidebarStatus", m_userSidebarStatus); } dde-calendar-5.14.13/calendar-client/src/configsettings.h000066400000000000000000000030231473346337000232130ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2016 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CCONFIGSETTINGS_H #define CCONFIGSETTINGS_H #include #include class CConfigSettings : QObject { Q_OBJECT public: static CConfigSettings *getInstance(); void sync(); /** * @brief value 根据key获取对应值 * @param key 对应的key * @return */ QVariant value(const QString &key, const QVariant &defaultValue = QVariant()); /** * @brief setOption 设置对应key的值 * @param key * @param value */ void setOption(const QString &key, const QVariant &value); /** * @brief remove 移除对应的配置信息 * @param key */ void remove(const QString &key); /** * @brief contains 判断是否包含对应的key * @param key * @return */ bool contains(const QString &key) const; CConfigSettings *operator->() const ; void initSetting(); //帐户侧边栏显示状态 bool getUserSidebarStatus(); void setUserSidebarStatus(bool); signals: void signalFirstDayOfWeekChange(); public slots: protected: CConfigSettings(); ~CConfigSettings(); void init(); //释放配置指针 void releaseInstance(); private: QPointer m_settings; bool m_userSidebarStatus = true; //帐户侧边栏显示状态 }; #define gSetting CConfigSettings::getInstance() #endif // CCONFIGSETTINGS_H dde-calendar-5.14.13/calendar-client/src/constants.h000066400000000000000000000114741473346337000222120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CONSTANTS_H #define CONSTANTS_H #include namespace DDECalendar { //光标坐标关键字 const QString CursorPointKey = "CursorPoint"; static const int HeaderItemWidth = 80; static const int HeaderItemHeight = 40; static const int CellWidth = 106; static const int CellHeight = 70; static const int CellHighlightWidth = 80; static const int CellHighlightHeight = 70; static const int QueryEarliestYear = 1900; static const int QueryLatestYear = 2100; static const int FestivalTypeID = 4; static const int FontSizeEleven = 11; static const int FontSizeTwelve = 12; static const int FontSizeFourteen = 14; static const int FontSizeSixteen = 16; static const int FontSizeTwentyfour = 24; static const int FontSizeTwenty = 20; static const int FontSizeTen = 10; static const int FontSizeOneHundred = 100; static const int CalendarYearWindow = 0; static const int CalendarMonthWindow = 1; static const int CalendarWeekWindow = 2; static const int CalendarDayWindow = 3; static const int ThirtyMinutesWithSec = 1800; static const int AtTimeOfEvent = 0; static const int OnStartDay = 0; static const int FifteenMinutesBefore = 15; static const int ThirtyMinutesBefore = 30; static const int OneHourBefore = 60; static const int OneDayBeforeWithDay = 1; static const int OneDayBeforeWithMinutes = 1440; static const int TwoDayBeforeWithDay = 2; static const int TwoDayBeforeWithMinutes = 2880; static const int OneWeekBeforeWithDay = 7; static const int OneWeekBeforeWithMinutes = 10080; static const int NewScheduleLabelWidth = 70; static const int QuarterOfAnhourWithMinute = 15; } // namespace DDECalendar namespace DDEYearCalendar { static const int RectSizeOfEveryMonth = 42; static const int FrameSizeOfEveryYear = 12; static const int YearScheduleListMaxcount = 5; static const int YHeaderItemWidth = 20; static const int YHeaderItemHeight = 16; static const int YCellWidth = 26; static const int YCellHeight = 20; static const int YCellHighlightWidth = 26; static const int YCellHighlightHeight = 20; static const int Y_MLabelHeight = 36; static const int Y_YLabelHeight = 45; static const int Y_MWindowWidth = 202; static const int Y_MWindowHeight = 159; } // namespace DDEYearCalendar namespace DDEMonthCalendar { static const int ItemSizeOfMonthDay = 42; static const int AFewDaysOfWeek = 7; static const int LinesNumOfMonth = 6; static const int MonthNumOfYear = 12; static const int MHeaderItemWidth = 60; static const int MHeaderItemHeight = 33; static const int MEventsItemHeight = 36; static const int MCellWidth = 120; static const int MCellHeight = 74; static const int MCellHighlightWidth = 120; static const int MCellHighlightHeight = 74; static const int MWeekCellWidth = 120; static const int MWeekCellHeight = 54; static const int MDayCellWidth = 36; static const int MDayCellHeight = 36; static const int M_YTopHeight = 66; static const int M_YLabelHeight = 36; static const int M_YLunaLabelWindth = 66; static const int M_YLunaLabelHeight = 20; static const int MTodayWindth = 100; static const int MTodayHeight = 36; static const int M_MWindowWidth = 202; static const int M_MWindowHeight = 162; } namespace DDEWeekCalendar { static const int FirstDayOfWeekend = 6; static const int AFewDaysofWeek = 7; static const int NumWeeksDisplayed = 10; static const int WCellHeaderItemWidth = 109; static const int WCellHeaderItemHeight = 54; static const int WMCellHeaderWidth = 80; static const int MCellHighlightWidth = 120; static const int MCellHighlightHeight = 74; static const int WWeekCellWidth = 36; static const int WWeekCellHeight = 36; static const int W_YLabelHeight = 36; static const int W_YLunatLabelWindth = 66; static const int W_YLunatLabelHeight = 20; static const int WTodayWindth = 100; static const int WTodayHeight = 36; static const int W_MWindowWidth = 202; static const int W_MWindowHeight = 162; } namespace DDEDayCalendar { static const int PainterCellNum = 42; static const int DCellWidth = 35; static const int DCellHeight = 28; static const int DCellHighlightWidth = 33; static const int DCellHighlightHeight = 26; static const int D_MLabelHeight = 36; static const int D_YLabelHeight = 36; static const int DDLabelHeight = 117; static const int DWLabelHeight = 22; static const int DHuangLiInfoLabelHeight = 17; static const int DHuangLiLabelHeight = 56; static const int DHuangLiLabelMaxHeight = 96; static const int DHuangLiLabelWidth = 330; static const int D_MWindowWidth = 350; static const int D_MWindowHeight = 564; } namespace DARROWRECT { //提示框圆角 static const int DRADIUS = 10; } // namespace DARROWRECT enum Week { Monday = 6, Tuesday = 5, Wednesday = 4, Thursday = 3, Friday = 2, Saturday = 1, Sunday = 0, }; #endif // CONSTANTS_H dde-calendar-5.14.13/calendar-client/src/customWidget/000077500000000000000000000000001473346337000224745ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/customWidget/animationstackedwidget.cpp000066400000000000000000000205451473346337000277300ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "animationstackedwidget.h" #include #include AnimationStackedWidget::AnimationStackedWidget(const AnimationOri ori, QWidget *parent) : QStackedWidget(parent) , m_animationOri(ori) , m_Animation(new QPropertyAnimation(this, "offset", this)) { setDuration(1000); connect(m_Animation, &QPropertyAnimation::finished, this, &AnimationStackedWidget::animationFinished); } AnimationStackedWidget::~AnimationStackedWidget() { delete m_Animation; } /** * @brief setDuration 设置动画持续时间 * @param duration 动画时间 */ void AnimationStackedWidget::setDuration(int duration) { m_Duration = duration; m_Animation->setEasingCurve(QEasingCurve::InOutQuad); } /** * @brief paintEvent 窗口绘制事件 * @param e 绘制事件 */ void AnimationStackedWidget::paintEvent(QPaintEvent *e) { Q_UNUSED(e); if (m_IsAnimation) { QPainter paint(this); paintCurrentWidget(paint, currentIndex()); paintNextWidget(paint, m_NextIndex); } } void AnimationStackedWidget::mouseMoveEvent(QMouseEvent *e) { Q_UNUSED(e); } /** * @brief animationFinished 动画切换完成 */ void AnimationStackedWidget::animationFinished() { m_IsAnimation = false; setCurrentIndex(m_NextIndex); //如果有需要跳转的页面 if (m_nextGotoIndex != -1) { setCurrent(m_nextGotoIndex); // m_nextGotoIndex = -1; return; } emit signalIsFinished(); } /** * @brief setCurrent 设置当前窗口 * @param index 索引 */ void AnimationStackedWidget::setCurrent(int index) { //设置移动方向 m_moveOri = getMoveOrientation(currentIndex(), index); setCurrentWidget(index, getBeginValue()); } /** * @brief AnimationStackedWidget::setPre设置上一个索引的窗口 */ void AnimationStackedWidget::setPre() { //获取堆窗口数 const int count = this->count(); switch (m_animationOri) { case LR: { m_moveOri = LeftToRight; } break; case TB: { m_moveOri = TopToBottom; } break; } //获取下一个窗口编号 int nextIndex = currentIndex() - 1; if (nextIndex < 0) { nextIndex = nextIndex + count; } setCurrentWidget(nextIndex, getBeginValue()); } /** * @brief setNext 设置下一个索引的窗口 */ void AnimationStackedWidget::setNext() { //获取堆窗口数 const int count = this->count(); switch (m_animationOri) { case LR: { m_moveOri = RightToLeft; } break; case TB: { m_moveOri = BottomToTop; } break; } //获取下一个窗口编号 int nextIndex = (currentIndex() + 1) % count; setCurrentWidget(nextIndex, getBeginValue()); } /** * @brief setCurrentWidget 根据索引设置当前窗口,开启动画绘制 * @param index 索引 * @param beginWidth 动画起始值 */ void AnimationStackedWidget::setCurrentWidget(int &index, int beginWidth) { //如果正在动画,那么退出 if (m_IsAnimation) { m_nextGotoIndex = index; return; } //如果索引为当前索引则退出 if (index == currentIndex()) { emit signalIsFinished(); return; } m_IsAnimation = true; m_NextIndex = index; //隐藏当前的widget this->widget(currentIndex())->hide(); m_Animation->setStartValue(beginWidth); m_Animation->setEndValue(0); m_Animation->setDuration(m_Duration); m_Animation->start(); } /** * @brief getBeginValue 获取动画起始值 * @return 返回动画起始值 */ int AnimationStackedWidget::getBeginValue() { //存储窗口高度或宽度 int value {0}; //获取窗口矩阵 QRect widgetRect = this->rect(); switch (m_animationOri) { case LR: { value = widgetRect.width(); } break; case TB: { value = widgetRect.height(); } } return value; } /** * @brief getMoveOrientation 根据当前索引和下一个索引获取动画方向 * @param currIndex 当前索引 * @param nextIndex 设置的索引 * @return 动画绘制方向 */ AnimationStackedWidget::MoveOrientation AnimationStackedWidget::getMoveOrientation(const int currIndex, const int nextIndex) { MoveOrientation moveOri{LeftToRight}; if (nextIndex < currIndex) { switch (m_animationOri) { case LR: { moveOri = LeftToRight; } break; case TB: { moveOri = TopToBottom; } break; } } else if (nextIndex > currIndex) { switch (m_animationOri) { case LR: { moveOri = RightToLeft; } break; case TB: { moveOri = BottomToTop; } break; } } return moveOri; } /** * @brief paintCurrentWidget 获取当前窗口的图片动态绘制 * @param paint 绘制对象 * @param nextIndex 窗口索引 */ void AnimationStackedWidget::paintCurrentWidget(QPainter &paint, int currentIndex) { //获得当前页面的Widget QWidget *currentWidget = widget(currentIndex); QPixmap currentPixmap(currentWidget->size()); //将当前窗口绘制到pixmap中 currentWidget->render(¤tPixmap); QRect widgetRect = this->rect(); //绘制当前的Widget double value = m_offset; //窗口宽度 const int widgetWidth = widgetRect.width(); //窗口高度 const int widgetHeight = widgetRect.height(); QRectF targetRect; QRectF sourceRect; switch (m_moveOri) { case LeftToRight: { targetRect = QRectF(widgetWidth - value, 0, value, widgetHeight); sourceRect = QRectF(0.0, 0.0, value, widgetHeight); } break; case RightToLeft: { targetRect = QRectF(0.0, 0.0, value, widgetHeight); sourceRect = QRectF(widgetWidth - value, 0, value, widgetHeight); } break; case TopToBottom: { targetRect = QRectF(0.0, widgetHeight - value, widgetWidth, value); sourceRect = QRectF(0.0, 0.0, widgetWidth, value); } break; case BottomToTop: { targetRect = QRectF(0.0, 0.0, widgetWidth, value); sourceRect = QRectF(0, widgetHeight - value, widgetWidth, value); } } paint.drawPixmap(targetRect, currentPixmap, sourceRect); } /** * @brief paintNextWidget 获取下一个窗口的图片动态绘制 * @param paint 绘制对象 * @param nextIndex 窗口索引 */ void AnimationStackedWidget::paintNextWidget(QPainter &paint, int nextIndex) { QWidget *nextWidget = widget(nextIndex); QRect widgetRect = this->rect(); //设置下一个窗口的大小 nextWidget->resize(widgetRect.width(), widgetRect.height()); QPixmap nextPixmap(nextWidget->size()); nextWidget->render(&nextPixmap); double value = m_offset; //窗口宽度 const int widgetWidth = widgetRect.width(); //窗口高度 const int widgetHeight = widgetRect.height(); QRectF targetRect; QRectF sourceRect; switch (m_moveOri) { case LeftToRight: { targetRect = QRectF(0.0, 0.0, widgetWidth - value, widgetHeight); sourceRect = QRectF(value, 0.0, widgetWidth - value, widgetHeight); } break; case RightToLeft: { targetRect = QRectF(value, 0.0, widgetWidth - value, widgetHeight); sourceRect = QRectF(0.0, 0.0, widgetWidth - value, widgetHeight); } break; case TopToBottom: { targetRect = QRectF(0.0, 0.0, widgetWidth, widgetHeight - value); sourceRect = QRectF(0.0, value, widgetWidth, widgetHeight - value); } break; case BottomToTop: { targetRect = QRectF(0.0, value, widgetWidth, widgetHeight - value); sourceRect = QRectF(0.0, 0.0, widgetWidth, widgetHeight - value); } } paint.drawPixmap(targetRect, nextPixmap, sourceRect); } /** * @brief offset 获取移动偏移量 * @return 移动偏移量 */ double AnimationStackedWidget::offset() const { return m_offset; } /** * @brief setOffset 设置移动偏移量 * @param offset 移动偏移量 */ void AnimationStackedWidget::setOffset(double offset) { m_offset = offset; update(); } dde-calendar-5.14.13/calendar-client/src/customWidget/animationstackedwidget.h000066400000000000000000000057201473346337000273730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef AnimationStackedWidget_H #define AnimationStackedWidget_H #include #include #include /** * @brief The AnimationStackedWidget class * 动画切换界面 */ class AnimationStackedWidget : public QStackedWidget { Q_OBJECT Q_PROPERTY(double offset READ offset WRITE setOffset) public: enum MoveOrientation {LeftToRight, RightToLeft, TopToBottom, BottomToTop}; enum AnimationOri {LR, TB}; //LR:Left Right ,TB:Top Bottom public: explicit AnimationStackedWidget(const AnimationOri ori = LR, QWidget *parent = nullptr); ~AnimationStackedWidget() override; //设置动画持续时间 void setDuration(int duration = 500); /** * @brief IsRunning 动画是否正在运行 * @return 动画师傅正在运行 */ bool IsRunning()const { return m_IsAnimation; } //获取移动偏移量 double offset() const; //设置移动偏移量 void setOffset(double offset); protected: //窗口绘制事件 void paintEvent(QPaintEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; signals: /** * @brief signalIsFinished 动画结束信号 */ void signalIsFinished(); public slots: //动画切换完成 void animationFinished(); //设置当前窗口 void setCurrent(int index); //setPre设置上一个索引的窗口 void setPre(); //设置下一个索引的窗口 void setNext(); private: //根据索引设置当前窗口,开启动画绘制 void setCurrentWidget(int &index, int beginWidth); //获取动画起始值 int getBeginValue(); //根据当前索引和下一个索引获取动画方向 MoveOrientation getMoveOrientation(const int currIndex, const int nextIndex); //获取当前窗口的图片动态绘制 void paintCurrentWidget(QPainter &paint, int currentIndex); //获取下一个窗口的图片动态绘制 void paintNextWidget(QPainter &paint, int nextIndex); private: /** * @brief m_animationOri 动画方向--左右还是上下 */ AnimationOri m_animationOri{LR}; /** * @brief m_Animation 动画对象 */ QPropertyAnimation *m_Animation = nullptr; /** * @brief m_Duration 动画时间(ms) */ int m_Duration{0}; /** * @brief m_IsAnimation 是否为动画状态 */ bool m_IsAnimation = false; /** * @brief m_offset 移动偏移量 */ double m_offset = 0; /** * @brief paintNext */ int m_WidgetCount{0}; /** * @brief m_NextIndex 下一个索引 */ int m_NextIndex{0}; /** * @brief m_moveOri 移动方向 */ MoveOrientation m_moveOri = MoveOrientation::LeftToRight; int m_nextGotoIndex = -1; //在动画过程中,下次需要跳转的页面 }; #endif // AnimationStackedWidget_H dde-calendar-5.14.13/calendar-client/src/customWidget/cbuttonbox.cpp000066400000000000000000000016341473346337000253730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cbuttonbox.h" #include CButtonBox::CButtonBox(QWidget *parent) : DButtonBox(parent) { //设置接受tab焦点切换 this->setFocusPolicy(Qt::TabFocus); } void CButtonBox::focusInEvent(QFocusEvent *event) { DButtonBox::focusInEvent(event); //窗口激活时,不设置Button焦点显示 if (event->reason() != Qt::ActiveWindowFocusReason) { //设置当前选中项为焦点 this->button(checkedId())->setFocus(); } } void CButtonBox::focusOutEvent(QFocusEvent *event) { DButtonBox::focusOutEvent(event); //当tab离开当前buttonbox窗口时,设置选中项为焦点 if (event->reason() == Qt::TabFocusReason) { //设置当前选中项为焦点 this->button(checkedId())->setFocus(); } } dde-calendar-5.14.13/calendar-client/src/customWidget/cbuttonbox.h000066400000000000000000000007621473346337000250410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CBUTTONBOX_H #define CBUTTONBOX_H #include DWIDGET_USE_NAMESPACE class CButtonBox : public DButtonBox { Q_OBJECT public: explicit CButtonBox(QWidget *parent = nullptr); protected: void focusInEvent(QFocusEvent *event) override; void focusOutEvent(QFocusEvent *event) override; signals: public slots: }; #endif // CBUTTONBOX_H dde-calendar-5.14.13/calendar-client/src/customWidget/ccustomtimeedit.cpp000066400000000000000000000033511473346337000264040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ccustomtimeedit.h" #include #include #include CCustomTimeEdit::CCustomTimeEdit(QWidget *parent) : QTimeEdit(parent) { //设置edit最大宽度,不影响其他控件使用 setMaximumWidth(80); setButtonSymbols(QTimeEdit::NoButtons); } /** * @brief CCustomTimeEdit::getLineEdit 获取编辑框 * @return */ QLineEdit *CCustomTimeEdit::getLineEdit() { return lineEdit(); } void CCustomTimeEdit::focusInEvent(QFocusEvent *event) { QTimeEdit::focusInEvent(event); emit signalUpdateFocus(true); } void CCustomTimeEdit::focusOutEvent(QFocusEvent *event) { QTimeEdit::focusOutEvent(event); emit signalUpdateFocus(false); } void CCustomTimeEdit::mousePressEvent(QMouseEvent *event) { //设置父类widget焦点 if (parentWidget() != nullptr) { parentWidget()->setFocus(Qt::TabFocusReason); } //设置点击位置的光标 lineEdit()->setCursorPosition(lineEdit()->cursorPositionAt(event->pos())); QAbstractSpinBox::mousePressEvent(event); } void CCustomTimeEdit::keyPressEvent(QKeyEvent *event) { QTimeEdit::keyPressEvent(event); //鼠标左右键,切换光标位置 if (event->key() == Qt::Key_Left || event->key() == Qt::Key_Right) { if (parentWidget() != nullptr) { parentWidget()->setFocus(Qt::TabFocusReason); } lineEdit()->setCursorPosition(currentSectionIndex()); } } void CCustomTimeEdit::mouseDoubleClickEvent(QMouseEvent *event) { QTimeEdit::mouseDoubleClickEvent(event); //鼠标双击,选中section setSelectedSection(currentSection()); } dde-calendar-5.14.13/calendar-client/src/customWidget/ccustomtimeedit.h000066400000000000000000000014311473346337000260460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CCUSTOMTIMEEDIT_H #define CCUSTOMTIMEEDIT_H #include /** * @brief The CCustomTimeEdit class */ class CCustomTimeEdit : public QTimeEdit { Q_OBJECT public: explicit CCustomTimeEdit(QWidget *parent = nullptr); //获取编辑框 QLineEdit *getLineEdit(); protected: void focusInEvent(QFocusEvent *event) override; void focusOutEvent(QFocusEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void keyPressEvent(QKeyEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override; signals: void signalUpdateFocus(bool showFocus); }; #endif // CCUSTOMTIMEEDIT_H dde-calendar-5.14.13/calendar-client/src/customWidget/cdateedit.cpp000066400000000000000000000163771473346337000251440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cdateedit.h" #include "lunarcalendarwidget.h" #include "lunarmanager.h" #include #include #include CDateEdit::CDateEdit(QWidget *parent) : QDateEdit(parent) { connect(this, &QDateEdit::userDateChanged, this, &CDateEdit::slotDateEidtInfo); connect(lineEdit(), &QLineEdit::textChanged, this, &CDateEdit::slotRefreshLineEditTextFormat); connect(lineEdit(), &QLineEdit::cursorPositionChanged, this, &CDateEdit::slotCursorPositionChanged); connect(lineEdit(), &QLineEdit::selectionChanged, this, &CDateEdit::slotSelectionChanged); connect(lineEdit(), &QLineEdit::editingFinished, this, [this]() { //监听完成输入信号,触发文本改变事件,保证退出文本编辑的情况下依旧能刷新文本样式 //当非手动输入时间时不会触发文本改变信号 slotRefreshLineEditTextFormat(text()); }); } void CDateEdit::setDate(QDate date) { QDateEdit::setDate(date); //只有在农历日程时,才需要获取农历信息 QString dtFormat = m_showLunarCalendar ? m_format + getLunarName(date) : m_format; m_strCurrrentDate = date.toString(dtFormat); } void CDateEdit::setDisplayFormat(QString format) { this->m_format = format; //刷新时间显示信息 slotDateEidtInfo(date()); } QString CDateEdit::displayFormat() { return m_format; } void CDateEdit::setLunarCalendarStatus(bool status) { m_showLunarCalendar = status; //刷新时间显示信息 slotDateEidtInfo(date()); //更新日历显示类型 updateCalendarWidget(); } void CDateEdit::setLunarTextFormat(QTextCharFormat format) { m_lunarTextFormat = format; //刷新文本样式 slotRefreshLineEditTextFormat(text()); } QTextCharFormat CDateEdit::getsetLunarTextFormat() { return m_lunarTextFormat; } void CDateEdit::setCalendarPopup(bool enable) { QDateEdit::setCalendarPopup(enable); //更新日历显示类型 updateCalendarWidget(); } void CDateEdit::slotDateEidtInfo(const QDate &date) { QString format = m_format; if (m_showLunarCalendar) { if (!showGongli()) { format = "yyyy/"; } m_lunarName = getLunarName(date); format += m_lunarName; } //当当前显示格式与应该显示格式一致时不再重新设置 if (QDateEdit::displayFormat() == format) { return; } //记录刷新格式前的状态 bool hasSelected = lineEdit()->hasSelectedText(); //是否选择状态 int cPos = 0; QDateTimeEdit::Section section = QDateTimeEdit::NoSection; if (hasSelected) { section = currentSection(); //选择节 } else { cPos = lineEdit()->cursorPosition(); //光标所在位置 } QDateEdit::setDisplayFormat(format); //恢复原状 if (hasSelected) { setSelectedSection(section); //设置选中节 } else { lineEdit()->setCursorPosition(cPos); //设置光标位置 } //刷新文本样式 //当非手动输入时间时不会触发文本改变信号 slotRefreshLineEditTextFormat(date.toString(format)); } void CDateEdit::slotRefreshLineEditTextFormat(const QString &text) { QFont font = lineEdit()->font(); QFontMetrics fm(font); int textWidth = fm.horizontalAdvance(text); int maxWidth = lineEdit()->width() - 25; //文本能正常显示的最大宽度 if (textWidth > maxWidth) { setToolTip(text); } else { setToolTip(""); } //不显示农历时无需处理 if (!m_showLunarCalendar) { return; } QList formats; QTextLayout::FormatRange fr_tracker; fr_tracker.start = text.size() - m_lunarName.size(); //样式起始位置 fr_tracker.length = m_lunarName.size(); //样式长度 fr_tracker.format = m_lunarTextFormat; //样式 formats.append(fr_tracker); //更改农历文本样式 setLineEditTextFormat(lineEdit(), formats); } void CDateEdit::slotCursorPositionChanged(int oldPos, int newPos) { //不显示农历时无需处理 if (!m_showLunarCalendar) { return; } Q_UNUSED(oldPos); //光标最大位置不能超过时间长度不能覆盖农历信息 int maxPos = text().length() - m_lunarName.length(); bool hasSelected = lineEdit()->hasSelectedText(); if (hasSelected) { int startPos = lineEdit()->selectionStart(); int endPos = lineEdit()->selectionEnd(); //新的光标位置与选择区域末尾位置相等则是向后选择,向前选择无需处理 if (newPos == endPos) { newPos = newPos > maxPos ? maxPos : newPos; lineEdit()->setSelection(startPos, newPos - startPos); //重新设置选择区域 } } else { //非选择情况当新光标位置大于最大位置时设置到最大位置处,重新设置选中节位最后一节 if (newPos > maxPos) { setCurrentSectionIndex(sectionCount() - 1); lineEdit()->setCursorPosition(maxPos); } } } void CDateEdit::slotSelectionChanged() { //不显示农历时无需处理 if (!m_showLunarCalendar) { return; } //全选时重新设置为只选择时间不选择农历 if (lineEdit()->hasSelectedText() && lineEdit()->selectionEnd() == text().length()) { int startPos = lineEdit()->selectionStart(); lineEdit()->setSelection(startPos, text().length() - m_lunarName.length() - startPos); } } QString CDateEdit::getLunarName(const QDate &date) { return gLunarManager->getHuangLiShortName(date); } void CDateEdit::setLineEditTextFormat(QLineEdit *lineEdit, const QList &formats) { if (!lineEdit) { return; } QList attributes; for (const QTextLayout::FormatRange &fr : formats) { QInputMethodEvent::AttributeType type = QInputMethodEvent::TextFormat; int start = fr.start - lineEdit->cursorPosition(); int length = fr.length; QVariant value = fr.format; attributes.append(QInputMethodEvent::Attribute(type, start, length, value)); } QInputMethodEvent event(QString(), attributes); QCoreApplication::sendEvent(lineEdit, &event); } void CDateEdit::changeEvent(QEvent *e) { QDateEdit::changeEvent(e); if (e->type() == QEvent::FontChange && m_showLunarCalendar) { slotDateEidtInfo(date()); } } bool CDateEdit::showGongli() { QString str = m_strCurrrentDate; QFontMetrics fontMetrice(lineEdit()->font()); if (fontMetrice.horizontalAdvance(str) > lineEdit()->width() - 20) { return false; } return true; } void CDateEdit::updateCalendarWidget() { if (calendarPopup()) { //setCalendarWidget: //The editor does not automatically take ownership of the calendar widget. if (m_showLunarCalendar) { setCalendarWidget(new LunarCalendarWidget(this)); } else { setCalendarWidget(new QCalendarWidget(this)); } } } void CDateEdit::setEditCursorPos(int pos) { QLineEdit *edit = lineEdit(); if (nullptr != edit) { edit->setCursorPosition(pos); } } dde-calendar-5.14.13/calendar-client/src/customWidget/cdateedit.h000066400000000000000000000047731473346337000246060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CDATEEDIT_H #define CDATEEDIT_H #include #include class CDateEdit : public QDateEdit { Q_OBJECT public: explicit CDateEdit(QWidget *parent = nullptr); /** * @brief setData * 设置显示时间(覆盖父类方法) */ void setDate(QDate); /** * @brief setDisplayFormat * 设置时间显示格式(覆盖父类方法) * @param format 时间格式 */ void setDisplayFormat(QString format); /** * @brief displayFormat * 获取当前时间格式(覆盖父类方法) * @return */ QString displayFormat(); /** * @brief setLunarCalendarStatus * 设置农历状态 * @param status true:显示农历 false:不显示农历 */ void setLunarCalendarStatus(bool status); /** * @brief setLunarTextFormat * 设置农历文本样式 * @param format */ void setLunarTextFormat(QTextCharFormat format); /** * @brief getsetLunarTextFormat * 获取农历文本样式 * @return */ QTextCharFormat getsetLunarTextFormat(); /** * @brief setCalendarPopup * 是否弹出日历选择界面 * @param enable */ void setCalendarPopup(bool enable); void setEditCursorPos(int pos); signals: protected: void changeEvent(QEvent *e) override; private slots: //连接时间改变信号,填充农历信息 void slotDateEidtInfo(const QDate &date); //连接输入框文本改变信号,刷新文本样式 void slotRefreshLineEditTextFormat(const QString &); //连接光标位置改变信号,限制光标位置 void slotCursorPositionChanged(int, int); //连接文本选择改变信号,处理键盘全选时情况 void slotSelectionChanged(); private: //获取农历信息 QString getLunarName(const QDate &); //设置文本样式 void setLineEditTextFormat(QLineEdit *lineEdit, const QList &formats); //更新日历显示类型 void updateCalendarWidget(); bool showGongli(); private: QString m_format = ""; //时间格式化格式 bool m_showLunarCalendar = false; //农历显示状态 true:显示 false:不显示 QString m_lunarName = ""; //农历字符串 QTextCharFormat m_lunarTextFormat; //农历文本样式 QString m_strCurrrentDate = ""; }; #endif // CDATEEDIT_H dde-calendar-5.14.13/calendar-client/src/customWidget/cdialogiconbutton.cpp000066400000000000000000000013311473346337000267050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cdialogiconbutton.h" #include "cschedulebasewidget.h" CDialogIconButton::CDialogIconButton(QWidget *parent) : DIconButton(parent) { initView(); connect(this, &DIconButton::clicked, this, &CDialogIconButton::slotIconClicked); } void CDialogIconButton::initView() { setIcon(DStyle::SP_ArrowDown); m_dialog = new TimeJumpDialog(DArrowRectangle::ArrowTop, this); setFlat(true); } void CDialogIconButton::slotIconClicked() { //获取全局时间并显示弹窗 m_dialog->showPopup(CScheduleBaseWidget::getSelectDate(), mapToGlobal(QPoint(width()/2, height()))); } dde-calendar-5.14.13/calendar-client/src/customWidget/cdialogiconbutton.h000066400000000000000000000011271473346337000263550ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CDIALOGICON_H #define CDIALOGICON_H #include "timejumpdialog.h" #include DWIDGET_USE_NAMESPACE //时间跳转控件 class CDialogIconButton : public DIconButton { Q_OBJECT public: explicit CDialogIconButton(QWidget *parent = nullptr); signals: public slots: //点击事件 void slotIconClicked(); private: void initView(); private: TimeJumpDialog *m_dialog = nullptr; //时间跳转弹窗 }; #endif // CDIALOGICON_H dde-calendar-5.14.13/calendar-client/src/customWidget/cdynamicicon.cpp000066400000000000000000000102711473346337000256410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cdynamicicon.h" #include #include #include #include #define BackgroundRatio 0.9394 #define Month_X_Ratio 0.3203 #define Month_Y_Ratio 0.1690 #define Month_W_Ratio 0.3125 #define Month_H_Ratio 0.15625 #define Day_X_Ratio 0.28125 #define Day_Y_Ratio 0.33333 #define Day_W_Ratio 0.4375 #define Day_H_Ratio 0.4160 #define Week_X_Ratio 0.4375 #define Week_Y_Ratio 0.728515625 #define Week_W_Ratio 0.21875 #define Week_H_Ratio 0.09375 CDynamicIcon *CDynamicIcon::m_Icon = nullptr; CDynamicIcon::CDynamicIcon(int width, int height) : m_pixmap(new QPixmap(QSize(width, height))) , m_Date() , m_Dayrenderer(new QSvgRenderer()) , m_Weekrenderer(new QSvgRenderer()) , m_Monthrenderer(new QSvgRenderer()) , m_backgroundrenderer(new QSvgRenderer()) { m_pixmap->fill(Qt::transparent); m_Date = QDate::currentDate(); setDate(m_Date); } CDynamicIcon::~CDynamicIcon() { delete m_pixmap; m_pixmap = nullptr; delete m_Dayrenderer; m_Dayrenderer = nullptr; delete m_Weekrenderer; m_Weekrenderer = nullptr; delete m_Monthrenderer; m_Monthrenderer = nullptr; delete m_backgroundrenderer; m_backgroundrenderer = nullptr; } CDynamicIcon *CDynamicIcon::getInstance() { if (nullptr == m_Icon) { m_Icon = new CDynamicIcon(512, 512); } return m_Icon; } void CDynamicIcon::releaseInstance() { if (m_Icon != nullptr) { delete m_Icon; m_Icon = nullptr; } } void CDynamicIcon::setDate(const QDate &date) { m_Date = date; QString dayfile = QString(":/resources/DynamicIcon/day%1.svg").arg(date.day()); m_Dayrenderer->load(dayfile); QString weekfile = QString(":/resources/DynamicIcon/week%1.svg").arg(date.dayOfWeek()); m_Weekrenderer->load(weekfile); QString monthfile = QString(":/resources/DynamicIcon/month%1.svg").arg(date.month()); m_Monthrenderer->load(monthfile); QString backgroundfile(":/resources/DynamicIcon/calendar_bg.svg"); m_backgroundrenderer->load(backgroundfile); //draw pixmap paintPixmap(m_pixmap); } void CDynamicIcon::setIcon() { QIcon icon(this->getPixmap()); qApp->setProductIcon(icon); qApp->setWindowIcon(icon); if (qApp->aboutDialog() != nullptr) qApp->aboutDialog()->setProductIcon(icon); m_Titlebar->setIcon(icon); } void CDynamicIcon::setTitlebar(DTitlebar *titlebar) { m_Titlebar = titlebar; } void CDynamicIcon::paintPixmap(QPixmap *pixmap) { QPainter painter(pixmap); //draw background qreal backgroundwidget = pixmap->size().width() * BackgroundRatio; qreal backgroundHeight = pixmap->size().height() * BackgroundRatio; QRectF backgroundRect = QRectF((pixmap->size().width() - backgroundwidget) / 2, (pixmap->size().height() - backgroundHeight) / 2, backgroundwidget, backgroundHeight); m_backgroundrenderer->render(&painter, backgroundRect); //draw month qreal month_x = pixmap->size().width() * Month_X_Ratio; qreal month_y = pixmap->size().width() * Month_Y_Ratio; qreal month_w = pixmap->size().width() * Month_W_Ratio; qreal month_h = pixmap->size().width() * Month_H_Ratio; m_Monthrenderer->render(&painter, QRectF(month_x, month_y, month_w, month_h)); //draw day qreal day_x = pixmap->size().width() * Day_X_Ratio; qreal day_y = pixmap->size().width() * Day_Y_Ratio; qreal day_w = pixmap->size().width() * Day_W_Ratio; qreal day_h = pixmap->size().width() * Day_H_Ratio; m_Dayrenderer->render(&painter, QRectF(day_x, day_y, day_w, day_h)); //draw week qreal week_x = pixmap->size().width() * Week_X_Ratio; qreal week_y = pixmap->size().width() * Week_Y_Ratio; qreal week_w = pixmap->size().width() * Week_W_Ratio; qreal week_h = pixmap->size().width() * Week_H_Ratio; m_Weekrenderer->render(&painter, QRectF(week_x, week_y, week_w, week_h)); painter.end(); } dde-calendar-5.14.13/calendar-client/src/customWidget/cdynamicicon.h000066400000000000000000000024511473346337000253070ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CDYNAMICICON_H #define CDYNAMICICON_H #include #include #include #include #include #include DWIDGET_USE_NAMESPACE DCORE_USE_NAMESPACE class CDynamicIcon { private: explicit CDynamicIcon(int width, int height); ~CDynamicIcon(); //禁用拷贝构造,拷贝赋值 CDynamicIcon(const CDynamicIcon &) = delete; CDynamicIcon &operator=(const CDynamicIcon &) = delete; public: static CDynamicIcon *getInstance(); static void releaseInstance(); public: void setDate(const QDate &date); QDate getDate() const { return m_Date; } void setIcon(); void setTitlebar(DTitlebar *titlebar); QPixmap getPixmap() const { return *m_pixmap; } public: static CDynamicIcon *m_Icon; private: void paintPixmap(QPixmap *pixmap); private: QPixmap *m_pixmap = nullptr; QDate m_Date; QSvgRenderer *m_Dayrenderer = nullptr; QSvgRenderer *m_Weekrenderer = nullptr; QSvgRenderer *m_Monthrenderer = nullptr; QSvgRenderer *m_backgroundrenderer = nullptr; DTitlebar *m_Titlebar {nullptr}; }; #endif // CDYNAMICICON_H dde-calendar-5.14.13/calendar-client/src/customWidget/colorWidget/000077500000000000000000000000001473346337000247565ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/customWidget/colorWidget/colorlabel.cpp000066400000000000000000000115671473346337000276120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "colorlabel.h" #include #include #include #include ColorLabel::ColorLabel(DWidget *parent) : DLabel(parent) , m_pressed(false) { setMouseTracking(true); m_dotCursor = pickColorCursor(); } //h∈(0, 360), s∈(0, 1), v∈(0, 1) QColor ColorLabel::getColor(qreal h, qreal s, qreal v) { int hi = int(h / 60) % 6; qreal f = h / 60 - hi; qreal p = v * (1 - s); qreal q = v * (1 - f * s); qreal t = v * (1 - (1 - f) * s); if (hi == 0) { return QColor(std::min(int(255 * p), 255), std::min(int(255 * q), 255), std::min(int(255 * v), 255)); } else if (hi == 1) { return QColor(std::min(int(255 * t), 255), std::min(int(255 * p), 255), std::min(int(255 * v), 255)); } else if (hi == 2) { return QColor(std::min(int(255 * v), 255), std::min(int(255 * p), 255), int(255 * q)); } else if (hi == 3) { return QColor(std::min(int(255 * v), 255), std::min(int(255 * t), 255), std::min(int(255 * p), 255)); } else if (hi == 4) { return QColor(std::min(int(255 * q), 255), std::min(int(255 * v), 255), std::min(int(255 * p), 255)); } else { return QColor(std::min(int(255 * p), 255), std::min(int(255 * v), 255), std::min(int(255 * t), 255)); } } void ColorLabel::setHue(int hue) { m_hue = hue; update(); } void ColorLabel::pickColor(QPoint pos, bool picked) { if (!rect().contains(pos)) { return; } QPixmap pickPixmap; pickPixmap = this->grab(QRect(0, 0, this->width(), this->height())); QImage pickImg = pickPixmap.toImage(); if (!pickImg.isNull()) { QRgb pickRgb = pickImg.pixel(pos); m_pickedColor = QColor(qRed(pickRgb), qGreen(pickRgb), qBlue(pickRgb)); } else { m_pickedColor = QColor(0, 0, 0); } if (picked) { emit signalpickedColor(m_pickedColor); } else { emit signalPreViewColor(m_pickedColor); } } void ColorLabel::paintEvent(QPaintEvent *) { if (m_entered) { setCursor(m_dotCursor); } else { setCursor(QCursor()); } QPainter painter(this); painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); QImage backgroundImage(this->width(), this->height(), QImage::Format_ARGB32); QColor penColor; for (qreal s = 0; s < this->width(); s++) { for (qreal v = 0; v < this->height(); v++) { penColor = getColor(m_hue, s / this->width(), v / this->height()); if (!penColor.isValid()) { continue; } backgroundImage.setPixelColor(int(s), this->height() - 1 - int(v), penColor); } } QPixmap pm = QPixmap::fromImage(backgroundImage); QSize size(this->width(), this->height()); QBitmap mask(size); QPainter painterMask(&mask); painterMask.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); painterMask.fillRect(0, 0, size.width(), size.height(), Qt::white); painterMask.setBrush(QColor(0, 0, 0)); painterMask.drawRoundedRect(0, 0, size.width(), size.height(), 5, 5); QPixmap image = pm.scaled(size); image.setMask(mask); painter.drawPixmap(this->rect(),image); } void ColorLabel::mousePressEvent(QMouseEvent *e) { m_pressed = true; pickColor(e->pos(), m_pressed); QLabel::mousePressEvent(e); } void ColorLabel::mouseMoveEvent(QMouseEvent *e) { if (rect().contains(e->pos())) { m_entered = true; } else { m_entered = false; } update(); pickColor(e->pos(), m_pressed); //移动事件不传递到父控件中 e->accept(); } void ColorLabel::mouseReleaseEvent(QMouseEvent *e) { if (m_pressed && rect().contains(e->pos())) { emit clicked(); } m_pressed = false; QLabel::mouseReleaseEvent(e); } QCursor ColorLabel::pickColorCursor() { int tipWidth = 11; QPixmap cursorPix = QPixmap(QSize(tipWidth, tipWidth)); cursorPix.fill(QColor(Qt::transparent)); QPen whitePen; whitePen.setWidth(1); whitePen.setCapStyle(Qt::FlatCap); whitePen.setJoinStyle(Qt::RoundJoin); whitePen.setColor(QColor(255, 255, 255, 255)); QPen blackPen; blackPen.setWidth(1); blackPen.setCapStyle(Qt::FlatCap); blackPen.setJoinStyle(Qt::RoundJoin); blackPen.setColor(QColor(0, 0, 0, 125)); QPainter painter(&cursorPix); painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); painter.setPen(blackPen); painter.drawEllipse(cursorPix.rect().center(), tipWidth / 2 - 1, tipWidth / 2 - 1); painter.drawEllipse(cursorPix.rect().center(), tipWidth / 2 - 3, tipWidth / 2 - 3); painter.setPen(whitePen); painter.drawEllipse(cursorPix.rect().center(), tipWidth / 2 - 2, tipWidth / 2 - 2); return QCursor(cursorPix, -1, -1); } dde-calendar-5.14.13/calendar-client/src/customWidget/colorWidget/colorlabel.h000066400000000000000000000036731473346337000272560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef COLORLABEL_H #define COLORLABEL_H #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class ColorLabel : public DLabel { Q_OBJECT public: explicit ColorLabel(DWidget *parent = nullptr); //h∈(0, 360), s∈(0, 1), v∈(0, 1) QColor getColor(qreal h, qreal s, qreal v); void setHue(int hue); /** * @brief pickColor 获取鼠标位置颜色 * @param pos 位置 * @param picked 是否获取 */ void pickColor(QPoint pos, bool picked = false); signals: /** * @brief clicked 鼠标点击信号 */ void clicked(); /** * @brief pickedColor 获取颜色信号 * @param color 颜色 */ void signalpickedColor(QColor color); /** * @brief signalPreViewColor 颜色预览信号 * @param color 颜色 */ void signalPreViewColor(QColor color); protected: void paintEvent(QPaintEvent *); /** * @brief mousePressEvent 鼠标点击事件 * @param e 鼠标事件 */ void mousePressEvent(QMouseEvent *e); /** * @brief mouseMoveEvent 鼠标移动事件 * @param e 鼠标事件 */ void mouseMoveEvent(QMouseEvent *e); /** * @brief mouseReleaseEvent 鼠标弹起事件 * @param e 鼠标事件 */ void mouseReleaseEvent(QMouseEvent *e); private: /** * @brief pickColorCursor * @return 返回自定义光标 */ QCursor pickColorCursor(); private: QCursor m_dotCursor; // 圆点光标 int m_hue = 0; bool m_pressed = false; //鼠标按下状态,用于判断是否发送颜色值 bool m_entered = false; //鼠标移入状态,用于判断光标显示类型 QColor m_pickedColor; }; #endif // COLORLABEL_H dde-calendar-5.14.13/calendar-client/src/customWidget/colorWidget/colorpickerWidget.cpp000066400000000000000000000122511473346337000311430ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "colorpickerWidget.h" #include "tabletconfig.h" #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CColorPickerWidget::CColorPickerWidget(QWidget *parent) : DAbstractDialog(parent) , m_colorLabel(new ColorLabel(this)) , m_colorSlider(new ColorSlider(this)) , m_colHexLineEdit(new DLineEdit(this)) , m_wordLabel(new DLabel(this)) , m_cancelBtn(new DPushButton(this)) , m_enterBtn(new DSuggestButton(this)) { initUI(); setColorHexLineEdit(); moveToCenter(); connect(m_cancelBtn, &DPushButton::clicked, this, &CColorPickerWidget::slotCancelBtnClicked); connect(m_enterBtn, &DPushButton::clicked, this, &CColorPickerWidget::slotEnterBtnClicked); connect(m_colorLabel, &ColorLabel::signalpickedColor, this, &CColorPickerWidget::slotUpdateColor); connect(m_colHexLineEdit, &DLineEdit::textChanged, this, &CColorPickerWidget::slotHexLineEditChange); connect(m_colorSlider, &ColorSlider::valueChanged, this, [this](int val) { m_colorLabel->setHue(val); }); } CColorPickerWidget::~CColorPickerWidget() { } void CColorPickerWidget::setColorHexLineEdit() { m_colHexLineEdit->setText(""); //确认按钮初始置灰 m_enterBtn->setDisabled(true); //输入框输入限制 QRegExp reg("^[0-9A-Fa-f]{6}$"); QValidator *validator = new QRegExpValidator(reg, m_colHexLineEdit->lineEdit()); m_colHexLineEdit->lineEdit()->setValidator(validator); setFocusProxy(m_colHexLineEdit); } /** * @brief CColorPickerDlg::initUI 初始化 */ void CColorPickerWidget::initUI() { QFont mlabelTitle; QFont mlabelContext; mlabelTitle.setWeight(QFont::Bold); mlabelContext.setWeight(QFont::Medium); setFixedSize(314, 276); m_colorLabel->setFixedSize(294, 136); m_colorSlider->setFixedSize(294, 14); QVBoxLayout *mLayout = new QVBoxLayout(this); mLayout->setSpacing(12); mLayout->setContentsMargins(10, 10, 10, 8); mLayout->addWidget(m_colorLabel); mLayout->addWidget(m_colorSlider); m_wordLabel->setText(tr("Color")); m_strColorLabel = m_wordLabel->text(); m_wordLabel->setFixedWidth(40); m_wordLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); m_colHexLineEdit->setClearButtonEnabled(false); //不显示清空按钮 QHBoxLayout *inputLayout = new QHBoxLayout; inputLayout->setMargin(0); inputLayout->setSpacing(6); inputLayout->addWidget(m_wordLabel); inputLayout->addWidget(m_colHexLineEdit, 1); mLayout->addLayout(inputLayout); mLayout->addSpacing(4); m_cancelBtn->setText(tr("Cancel", "button")); m_cancelBtn->setFixedSize(140, 36); m_enterBtn->setText(tr("Save", "button")); m_enterBtn->setFixedSize(140, 36); QHBoxLayout *btnLayout = new QHBoxLayout; btnLayout->setMargin(0); btnLayout->setSpacing(5); btnLayout->addWidget(m_cancelBtn); DVerticalLine *line = new DVerticalLine(this); line->setObjectName("VLine"); line->setFixedSize(3, 28); btnLayout->addWidget(line); line->show(); btnLayout->addWidget(m_enterBtn); mLayout->addLayout(btnLayout); this->setLayout(mLayout); setLabelText(); this->setFocusPolicy(Qt::TabFocus); setTabOrder(m_colHexLineEdit, m_cancelBtn); setTabOrder(m_cancelBtn, m_enterBtn); setTabOrder(m_enterBtn, m_colorSlider); } void CColorPickerWidget::setLabelText() { QLocale local; if(local.language() == QLocale::Chinese) { return; } QString str = m_strColorLabel; QFontMetrics fontMetrice(m_wordLabel->font()); if(fontMetrice.horizontalAdvance(str) > (m_wordLabel->width()+4)) { str = fontMetrice.elidedText(str,Qt::ElideRight,m_wordLabel->width()); } m_wordLabel->setText(str); } void CColorPickerWidget::changeEvent(QEvent *e) { QWidget::changeEvent(e); if(e->type() == QEvent::FontChange) { setLabelText(); } } void CColorPickerWidget::slotHexLineEditChange(const QString &text) { QString lowerText = text.toLower(); if (lowerText == text) { QRegExp rx("^[0-9a-f]{6}$"); if (rx.indexIn(lowerText) == -1) { m_enterBtn->setDisabled(true); } else { m_enterBtn->setDisabled(false); } } else { m_colHexLineEdit->setText(lowerText); } } QColor CColorPickerWidget::getSelectedColor() { return QColor("#" + m_colHexLineEdit->text()); } void CColorPickerWidget::slotUpdateColor(const QColor &color) { if (color.isValid()) { this->m_colHexLineEdit->setText(color.name().remove("#")); } } void CColorPickerWidget::slotCancelBtnClicked() { reject(); } void CColorPickerWidget::slotEnterBtnClicked() { accept(); } void CColorPickerWidget::keyPressEvent(QKeyEvent *e) { //键盘有两个Enter按键,一个为Enter一个为Return if (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return) { //暂时不处理回车事件 } else { DAbstractDialog::keyPressEvent(e); } } dde-calendar-5.14.13/calendar-client/src/customWidget/colorWidget/colorpickerWidget.h000066400000000000000000000025461473346337000306160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef COLORPICKERWIDGET_H #define COLORPICKERWIDGET_H #include "colorlabel.h" #include "colorslider.h" #include #include #include #include DWIDGET_USE_NAMESPACE class CColorPickerWidget : public DAbstractDialog { Q_OBJECT public: explicit CColorPickerWidget(QWidget *parent = nullptr); ~CColorPickerWidget(); QColor getSelectedColor(); private: void initUI(); void setColorHexLineEdit(); void setLabelText(); public slots: /** * @brief slotUpdateColor 画板颜色更新事件 */ void slotUpdateColor(const QColor &color = QColor()); /** * @brief slotHexLineEditChange * 颜色输入框文本更改事件 * @param text */ void slotHexLineEditChange(const QString &text); void slotCancelBtnClicked(); void slotEnterBtnClicked(); protected: void keyPressEvent(QKeyEvent *e) override; void changeEvent(QEvent *e) override; private: ColorLabel *m_colorLabel; ColorSlider *m_colorSlider; DLineEdit *m_colHexLineEdit; DLabel *m_wordLabel; DPushButton *m_cancelBtn; DPushButton *m_enterBtn; QString m_strColorLabel; QColor curColor; }; #endif // COLORPICKERWIDGET_H dde-calendar-5.14.13/calendar-client/src/customWidget/colorWidget/colorslider.cpp000066400000000000000000000055171473346337000300130ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "colorslider.h" #include #include #include #include const int IMAGE_HEIGHT = 10; ColorSlider::ColorSlider(QWidget *parent) : QSlider(parent) { setMinimum(0); setMaximum(359); setOrientation(Qt::Horizontal); QRect rect = this->rect(); m_backgroundImage = QImage(rect.width(), IMAGE_HEIGHT, QImage::Format_ARGB32); for (qreal s = 0; s < m_backgroundImage.width(); s++) { for (qreal v = 1; v <= m_backgroundImage.height() ; v++) { QColor penColor = getColor(qreal(s / rect.width() * maximum()), 1, 1); if (!penColor.isValid()) { continue; } m_backgroundImage.setPixelColor(std::min(int(s), rect.width()), m_backgroundImage.height() - int(v), penColor); } } } ColorSlider::~ColorSlider() { } //h∈(0, 360), s∈(0, 1), v∈(0, 1) QColor ColorSlider::getColor(qreal h, qreal s, qreal v) { int hi = int(h / 60) % 6; qreal f = h / 60 - hi; qreal p = v * (1 - s); qreal q = v * (1 - f * s); qreal t = v * (1 - (1 - f) * s); if (q < 0) { q = 0; } QColor color; if (hi == 0) { color = QColor(std::min(int(255 * p), 255), std::min(int(255 * q), 255), std::min(int(255 * v), 255)); } else if (hi == 1) { color = QColor(std::min(int(255 * t), 255), std::min(int(255 * p), 255), std::min(int(255 * v), 255)); } else if (hi == 2) { color = QColor(std::min(int(255 * v), 255), std::min(int(255 * p), 255), int(255 * q)); } else if (hi == 3) { color = QColor(std::min(int(255 * v), 255), std::min(int(255 * t), 255), std::min(int(255 * p), 255)); } else if (hi == 4) { color = QColor(std::min(int(255 * q), 255), std::min(int(255 * v), 255), std::min(int(255 * p), 255)); } else { color = QColor(std::min(int(255 * p), 255), std::min(int(255 * v), 255), std::min(int(255 * t), 255)); } return color; } void ColorSlider::paintEvent(QPaintEvent *ev) { Q_UNUSED(ev) QRect rect = this->rect(); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::SmoothPixmapTransform); painter.drawImage(QRect(rect.x(), rect.y() + 2, rect.width(), IMAGE_HEIGHT), m_backgroundImage); const int offset = 2; const qreal k = qreal(value() - minimum()) / qreal(maximum() - minimum()); qreal x = ((rect.width() - 2 * offset) * k) + offset; QPen pen; pen.setWidth(1); pen.setColor(QColor(0, 0, 0, 51)); painter.setPen(pen); painter.setBrush(QBrush(Qt::white)); painter.drawRect(QRectF(QPointF(x - offset, rect.top()), QPointF(x + offset, rect.bottom()))); } dde-calendar-5.14.13/calendar-client/src/customWidget/colorWidget/colorslider.h000066400000000000000000000011251473346337000274470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef COLORSLIDER_H #define COLORSLIDER_H //#include #include #include class ColorSlider : public QSlider { Q_OBJECT public: explicit ColorSlider(QWidget *parent = nullptr); ~ColorSlider(); //h∈(0, 360), s∈(0, 1), v∈(0, 1) QColor getColor(qreal h, qreal s, qreal v); protected: void paintEvent(QPaintEvent *ev); private: int m_value; QImage m_backgroundImage; }; #endif // COLORSLIDER_H dde-calendar-5.14.13/calendar-client/src/customWidget/colorseletorwidget.cpp000066400000000000000000000136611473346337000271270ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "colorseletorwidget.h" #include "configsettings.h" #include "units.h" #include ColorSeletorWidget::ColorSeletorWidget(QWidget *parent) : QWidget(parent) { init(); } void ColorSeletorWidget::init() { initView(); m_colorGroup = new QButtonGroup(this); m_colorGroup->setExclusive(true); connect(m_colorGroup, &QButtonGroup::idClicked, this, &ColorSeletorWidget::slotButtonClicked); m_colorInfo.reset(new DTypeColor()); } void ColorSeletorWidget::resetColorButton(const AccountItem::Ptr &account) { reset(); if (nullptr == account) { return; } DTypeColor::List colorList = account->getColorTypeList(); //添加默认颜色控件 for (DTypeColor::Ptr &var : colorList) { if (DTypeColor::PriSystem == var->privilege()) { addColor(var); } } //自定义控件单独添加 m_colorGroup->addButton(m_userColorBtn, m_userColorBtnId); m_colorLayout->addWidget(m_userColorBtn); if (m_colorGroup->buttons().size() > 0) { m_colorGroup->buttons().at(0)->click(); } } void ColorSeletorWidget::reset() { //清空所有的色彩实体和控件 m_colorEntityMap.clear(); QList buttons = m_colorGroup->buttons(); for (QAbstractButton *btn : buttons) { m_colorGroup->removeButton(btn); m_colorLayout->removeWidget(btn); //自定义控件内存不释放 if (btn == m_userColorBtn) { continue; } delete btn; btn = nullptr; } if (nullptr == m_userColorBtn) { m_userColorBtn = new CRadioButton(this); m_userColorBtn->setFixedSize(18, 18); } m_userColorBtn->hide(); } void ColorSeletorWidget::addColor(const DTypeColor::Ptr &cInfo) { static int count = 0; //静态变量,充当色彩控件id count++; m_colorEntityMap.insert(count, cInfo); //映射id与控件,从1开始 CRadioButton *radio = new CRadioButton(this); radio->setColor(QColor(cInfo->colorCode())); //设置控件颜色 radio->setFixedSize(18, 18); m_colorGroup->addButton(radio, count); m_colorLayout->addWidget(radio); } DTypeColor::Ptr ColorSeletorWidget::getSelectedColorInfo() { if ( m_colorInfo->privilege() == DTypeColor::PriSystem) { CConfigSettings::getInstance()->setOption("LastSysColorTypeNo", m_colorInfo->colorID()); } else if (!m_colorInfo->colorCode().isEmpty() ){ CConfigSettings::getInstance()->setOption("LastUserColor", m_colorInfo->colorCode()); CConfigSettings::getInstance()->setOption("LastSysColorTypeNo", ""); } return m_colorInfo; } void ColorSeletorWidget::setSelectedColorByIndex(int index) { if (index >= 0 && index < m_colorGroup->buttons().size()) { QAbstractButton *but = m_colorGroup->buttons().at(index); if (nullptr != but) { but->click(); } } } void ColorSeletorWidget::setSelectedColorById(int colorId) { //默认选择第一个 if( colorId < 0 ) { if (m_colorGroup->buttons().size() > 0) { m_colorGroup->buttons().at(0)->click(); } return; } else if ( colorId == 9 ) { m_userColorBtn->click(); return; } //系统颜色则向后移一位 if (colorId == 8) { colorId = 0; } else { ++colorId; } if (m_colorGroup->buttons().size() > colorId) { m_colorGroup->buttons().at(colorId)->click(); } } void ColorSeletorWidget::setSelectedColor(const DTypeColor &colorInfo) { bool finding = false; auto iterator = m_colorEntityMap.begin(); while (iterator != m_colorEntityMap.end()) { if (iterator.value()->colorID() == colorInfo.colorID()) { QAbstractButton *btn = m_colorGroup->button(iterator.key()); if (btn) { btn->click(); finding = true; } break; } iterator++; } if (!finding) { DTypeColor::Ptr ptr; ptr.reset(new DTypeColor(colorInfo)); setUserColor(ptr); } } void ColorSeletorWidget::initView() { m_colorLayout = new QHBoxLayout(); QHBoxLayout *hLayout = new QHBoxLayout(); hLayout->addLayout(m_colorLayout); QPushButton *addColorBut = new QPushButton(); addColorBut->setIcon(DStyle().standardIcon(DStyle::SP_IncreaseElement)); addColorBut->setFixedSize(18, 18); addColorBut->setIconSize(QSize(10, 10)); hLayout->addWidget(addColorBut); hLayout->addStretch(1); m_colorLayout->setMargin(0); m_colorLayout->setSpacing(3); hLayout->setMargin(0); hLayout->setSpacing(3); this->setLayout(hLayout); connect(addColorBut, &QPushButton::clicked, this, &ColorSeletorWidget::slotAddColorButClicked); } void ColorSeletorWidget::slotButtonClicked(int butId) { auto it = m_colorEntityMap.find(butId); if (m_colorEntityMap.end() == it) { return; } DTypeColor::Ptr info = it.value(); if (info->colorCode() != m_colorInfo->colorCode()) { m_colorInfo = info; emit signalColorChange(info); } } void ColorSeletorWidget::slotAddColorButClicked() { CColorPickerWidget colorPicker; if (colorPicker.exec()) { DTypeColor::Ptr typeColor; typeColor.reset(new DTypeColor()); typeColor->setColorCode(colorPicker.getSelectedColor().name()); typeColor->setPrivilege(DTypeColor::PriUser); setUserColor(typeColor); m_userColorBtn->click(); } } void ColorSeletorWidget::setUserColor(const DTypeColor::Ptr &colorInfo) { if (nullptr == m_userColorBtn || DTypeColor::PriUser != colorInfo->privilege()) { return; } if (!m_userColorBtn->isVisible()) { m_userColorBtn->show(); } m_userColorBtn->setColor(colorInfo->colorCode()); m_colorEntityMap[m_userColorBtnId] = colorInfo; m_userColorBtn->click(); } dde-calendar-5.14.13/calendar-client/src/customWidget/colorseletorwidget.h000066400000000000000000000045241473346337000265720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef COLORSELETOR_H #define COLORSELETOR_H #include "cradiobutton.h" #include "colorWidget/colorpickerWidget.h" #include "scheduledatamanage.h" #include "dschedule.h" #include "dtypecolor.h" #include "accountmanager.h" #include #include #include #include #include //色彩控件选择类 class ColorSeletorWidget : public QWidget { Q_OBJECT public: explicit ColorSeletorWidget(QWidget *parent = nullptr); /** * @brief reset * 重置 */ void reset(); /** * @brief getSelectColor * @return 当前已选在的色彩 */ DTypeColor::Ptr getSelectedColorInfo(); /** * @brief setUserColor 设置用户自定义的色彩 */ void setUserColor(const DTypeColor::Ptr &); /** * @brief setSelectedColorByIndex 设置选择的色彩控件 * @param index 色彩控件位置 */ void setSelectedColorByIndex(int index); /** * @brief setSelectedColorById 设置选择的色彩控件 * @param colorId 色彩id */ void setSelectedColorById(int colorId); /** * @brief setSelectedColor 设置选择的色彩控件 * @param color 色彩实例 */ void setSelectedColor(const DTypeColor&); /** * @brief resetColorButton * 重置色彩控件 * @param account 帐户 */ void resetColorButton(const AccountItem::Ptr& account); signals: //选择的色彩改变信号 void signalColorChange(DTypeColor::Ptr); public slots: //色彩控件点击信号 void slotButtonClicked(int butId); //添加自定义色彩控件点击信号 void slotAddColorButClicked(); private: void init(); void initView(); //添加色彩控件 void addColor(const DTypeColor::Ptr &); private: QMap m_colorEntityMap; //所有色彩实体 QHBoxLayout *m_colorLayout = nullptr; //色彩控件布局类 QButtonGroup *m_colorGroup = nullptr; //所有色彩控件 DTypeColor::Ptr m_colorInfo; //当前已选择的色彩 CRadioButton *m_userColorBtn = nullptr; //用户自定义的色彩控件 const int m_userColorBtnId = 999; //用户自定义的色彩控件id }; #endif // COLORSELETOR_H dde-calendar-5.14.13/calendar-client/src/customWidget/cpushbutton.cpp000066400000000000000000000055131473346337000255620ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cpushbutton.h" #include #include #include #include #include #include CPushButton::CPushButton(QWidget *parent) : QWidget(parent) { QHBoxLayout *layoutAddType = new QHBoxLayout(); m_textLabel = new QLabel(tr("New event type")); m_textLabel->setFixedSize(100,34); m_textLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_textLabel->setFixedSize(200,34); layoutAddType->setSpacing(0); layoutAddType->setMargin(0); layoutAddType->setAlignment(Qt::AlignLeft); m_iconButton = new DIconButton(this); m_iconButton->setFocusPolicy(Qt::NoFocus); m_iconButton->setFixedSize(16, 16); m_iconButton->setFlat(true); DPalette palette = DPaletteHelper::instance()->palette(this); QPalette pa = m_textLabel->palette(); //设置深浅色主题下正常状态时的文本颜色,与下拉框颜色对其 if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::DarkType) { pa.setBrush(QPalette::WindowText, QColor("#FFFFFF")); } else { pa.setBrush(QPalette::WindowText, QColor("#000000")); } m_textLabel->setPalette(pa); layoutAddType->setContentsMargins(33,0,0,0); layoutAddType->addWidget(m_iconButton); layoutAddType->addSpacing(5); layoutAddType->addWidget(m_textLabel); setFixedHeight(34); setLayout(layoutAddType); } void CPushButton::setHighlight(bool status) { if (status == m_Highlighted) { return; } m_Highlighted = status; update(); } bool CPushButton::isHighlight() { return m_Highlighted; } void CPushButton::mousePressEvent(QMouseEvent *event) { Q_UNUSED(event); m_pressed = true; } void CPushButton::mouseReleaseEvent(QMouseEvent *event) { if (m_pressed && rect().contains(event->pos())){ emit clicked(); } m_pressed = false; } void CPushButton::paintEvent(QPaintEvent *event) { QWidget::paintEvent(event); DPalette palette = DPaletteHelper::instance()->palette(this); QPainter painter(this); // 反走样 painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); m_iconButton->setIcon(QIcon::fromTheme("dde_calendar_create")); if (m_Highlighted) { //背景设置为高亮色 m_iconButton->setIcon(QIcon(":/icons/deepin/builtin/dark/icons/dde_calendar_create_32px.svg")); painter.setBrush(palette.highlight()); m_textLabel->setBackgroundRole(QPalette::Highlight); } else { //背景透明 painter.setBrush(QBrush("#00000000")); m_textLabel->setBackgroundRole(QPalette::Window); } //绘制背景 painter.drawRect(this->rect()); } dde-calendar-5.14.13/calendar-client/src/customWidget/cpushbutton.h000066400000000000000000000016471473346337000252330ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CPUSHBUTTON_H #define CPUSHBUTTON_H #include #include DWIDGET_USE_NAMESPACE class CPushButton : public QWidget { Q_OBJECT public: explicit CPushButton(QWidget *parent = nullptr); //设置高亮状态 void setHighlight(bool status); //返回高亮状态 bool isHighlight(); signals: void clicked(); protected: void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void paintEvent(QPaintEvent *event) override; private: bool m_Highlighted = false; //记录当前是否处于高亮状态 bool m_pressed = false; //记录鼠标是否按下 QLabel *m_textLabel = nullptr; //文字控件 DIconButton *m_iconButton = nullptr; //icon控件 }; #endif // CPUSHBUTTON_H dde-calendar-5.14.13/calendar-client/src/customWidget/cradiobutton.cpp000066400000000000000000000030621473346337000256760ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cradiobutton.h" #include #include #include DWIDGET_USE_NAMESPACE CRadioButton::CRadioButton(QWidget *parent) : QRadioButton(parent) { } void CRadioButton::setColor(const QColor &color) { m_color = color; } QColor CRadioButton::getColor() { return m_color; } void CRadioButton::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPainter painter(this); // 反走样 painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); int w = width(); int h = height(); if (!isChecked()) { // 设置画刷颜色 painter.setBrush(m_color); // 绘制圆 painter.drawEllipse(QPointF(w / 2, h / 2), w / 2 - 1, h / 2 - 1); //绘制黑色描边 QPainterPath path; path.addEllipse(0, 0, w, h); path.addEllipse(2, 2, w - 4, h - 4); QColor c = QColor("#000000"); c.setAlphaF(0.1); painter.setBrush(c); painter.drawPath(path); } else { DPalette palette = DPaletteHelper::instance()->palette(this); QPainterPath path; path.addEllipse(0, 0, w, h); path.addEllipse(2, 2, w - 4, h - 4); painter.setBrush(palette.highlight()); painter.drawPath(path); // 设置画刷颜色 painter.setBrush(m_color); // 绘制圆 painter.drawEllipse(QPointF(w / 2, h / 2), w / 2 - 3, h / 2 - 3); } } dde-calendar-5.14.13/calendar-client/src/customWidget/cradiobutton.h000066400000000000000000000010511473346337000253370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CRADIOBUTTON_H #define CRADIOBUTTON_H #include //自定义颜色单选按钮 class CRadioButton : public QRadioButton { Q_OBJECT public: explicit CRadioButton(QWidget *parent = nullptr); void setColor(const QColor&); QColor getColor(); signals: public slots: protected: void paintEvent(QPaintEvent *event) override; private: QColor m_color; }; #endif // CRADIOBUTTON_H dde-calendar-5.14.13/calendar-client/src/customWidget/ctimelineedit.cpp000066400000000000000000000072541473346337000260270ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ctimelineedit.h" #include #include CTimeLineEdit::CTimeLineEdit(int id, QWidget *parent) : DSpinBox(parent) , m_id(id) { initView(); connect(this, &CTimeLineEdit::editingFinished, this, &CTimeLineEdit::slotEditingFinished); connect(this->lineEdit(), &QLineEdit::textEdited, this, &CTimeLineEdit::slotTextEdited); } void CTimeLineEdit::initView() { //启用嵌入式的样式 setEnabledEmbedStyle(true); // QString str = this->styleSheet(); // this->setStyleSheet("QSpinBox:{background:transpaarent} QSpinBox::up-button{width:35px;}QSpinBox::down-button{width:35px;}"); // this->setAlignment(Qt::AlignLeft); // this->setFocusPolicy(Qt::FocusPolicy::NoFocus); // this->lineEdit()->setStyleSheet("border:none;border-style:outset"); } /** * @brief CTimeLineEdit::setNumberRange * 设置数字显示范围 * @param min 最小大小 * @param max 最大大小 */ void CTimeLineEdit::setRange(int min, int max) { DSpinBox::setRange(min, max); } /** * @brief CTimeLineEdit::setStepEnabled * 设置步状态 * @param enable 状态 */ void CTimeLineEdit::setStepEnabled(CTimeLineEdit::StepEnabled enable) { m_stepEnable = enable; } /** * @brief CTimeLineEdit::setNum * 设置显示的值 * @param num 带显示的值 */ void CTimeLineEdit::setNum(int num) { m_num = num; m_num = m_num > minimum()? m_num:minimum(); m_num = m_num < maximum()? m_num:maximum(); setValue(num); emit signalNumChange(m_id, m_num); } /** * @brief CTimeLineEdit::setNum * 设置显示的值 * @param num 带显示的数字 * @param canCarry true: 可以跳转, false: 不可以跳转 */ void CTimeLineEdit::setNum(int num, bool canCarry) { if (!canCarry) { setNum(num); return; } //若没有超过限制范围则不必发送时间跳转事件 if (num >= minimum() && num <= maximum()) { m_num = num; setValue(m_num); emit signalNumChange(m_id, m_num); return; } //发送时间跳转信号, num-m_num: 时间差 emit signalDateJump(m_id, num - m_num); } void CTimeLineEdit::slotEditingFinished() { setNum(value()); } void CTimeLineEdit::slotTextEdited(const QString &text) { //过滤掉非数字字符 QString value = ""; for (QChar c : text) { if ('0' <= c && c <= '9') { value.append(c); } } //借用字符串转整数策略使其剩余字符都符合数字规范,包括无前置0等 int v = value.toInt(); //保存光标位置,因为存在删减字符,且被删减的字符只能是在首位,因此不直接记录光标绝对位置,而是保存当前光标位置与最后位置的相对位置 int len = text.length() - lineEdit()->cursorPosition(); lineEdit()->setText(v == 0 ? "" : QString::number(v)); //恢复光标位置 lineEdit()->setCursorPosition(lineEdit()->text().length() - len); } /** * @brief CTimeLineEdit::stepEnabled * 因考虑到数字可以进位和退位,不存在真实的数字变化限制,因此返回up和down状态都可用 * @return */ CTimeLineEdit::StepEnabled CTimeLineEdit::stepEnabled() const { return m_stepEnable; } /** * @brief CTimeLineEdit::stepBy * 捕捉步长跳转事件,进行对数字变化的自定义 * @param steps 步长(数字变化后应为的值与变化前的值的差值) */ void CTimeLineEdit::stepBy(int steps) { setNum(value() + steps, true); //因为已自定义处理步长,因此再次调用父类的方法实现默认效果,并将其步长传入0 DSpinBox::stepBy(0); } dde-calendar-5.14.13/calendar-client/src/customWidget/ctimelineedit.h000066400000000000000000000026331473346337000254700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CTIMELINEEDIT_H #define CTIMELINEEDIT_H #include DWIDGET_USE_NAMESPACE //时间数字编辑器 class CTimeLineEdit : public DSpinBox { Q_OBJECT public: explicit CTimeLineEdit(int id = 0, QWidget *parent = nullptr); //设置控件数字,值将被限制在临界值范围内 void setNum(int num); //设置控件数字,如果canCaryy为true且超过临界值将进行自动跳转时间 void setNum(int num, bool canCarry); //设置数字显示范围 void setRange(int min, int max); //设置步状态 void setStepEnabled(CTimeLineEdit::StepEnabled); signals: //数字改变信号 void signalNumChange(int id, int num); //时间跳转信号 void signalDateJump(int id, int num); public slots: //编辑完成事件 void slotEditingFinished(); //编辑框编辑事件 void slotTextEdited(const QString &value); protected: //重写步状态 StepEnabled stepEnabled() const override; //重写步事件 void stepBy(int steps) override; private: void initView(); private: int m_num = 0; //当前显示的数字 const int m_id = 0; //控件id CTimeLineEdit::StepEnabled m_stepEnable = CTimeLineEdit::StepUpEnabled|CTimeLineEdit::StepDownEnabled; }; #endif // CTIMELINEEDIT_H dde-calendar-5.14.13/calendar-client/src/customWidget/ctitlewidget.cpp000066400000000000000000000255161473346337000257010ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ctitlewidget.h" #include "constants.h" #include "configsettings.h" #include #include #include #include #include CTitleWidget::CTitleWidget(QWidget *parent) : QWidget(parent) { m_sidebarIcon = new DIconButton(this); m_sidebarIcon->setFixedSize(QSize(36, 36)); m_sidebarIcon->setIconSize(QSize(19, 15)); connect(m_sidebarIcon, &DIconButton::clicked, this, &CTitleWidget::slotSidebarIconClicked); m_buttonBox = new CButtonBox(this); m_buttonBox->setObjectName("ButtonBox"); m_buttonBox->setAccessibleName("ButtonBox"); m_buttonBox->setAccessibleDescription("Year, month, week, day button box"); DButtonBoxButton *m_yearButton = new DButtonBoxButton(tr("Y"), this); //设置年辅助技术显示名称 m_yearButton->setObjectName("YearButton"); m_yearButton->setAccessibleName("YearButton"); m_yearButton->setFocusPolicy(Qt::TabFocus); m_yearButton->installEventFilter(this); QFont viewfont; viewfont.setWeight(QFont::Medium); viewfont.setPixelSize(DDECalendar::FontSizeFourteen); m_yearButton->setFixedSize(50, 36); DButtonBoxButton *m_monthButton = new DButtonBoxButton(tr("M"), this); //设置月辅助技术显示名称 m_monthButton->setObjectName("MonthButton"); m_monthButton->setAccessibleName("MonthButton"); m_monthButton->setFixedSize(50, 36); m_monthButton->setFocusPolicy(Qt::TabFocus); m_monthButton->installEventFilter(this); DButtonBoxButton *m_weekButton = new DButtonBoxButton(tr("W"), this); //设置周辅助技术显示名称 m_weekButton->setObjectName("WeekButton"); m_weekButton->setAccessibleName("WeekButton"); m_weekButton->setFixedSize(50, 36); m_weekButton->setFocusPolicy(Qt::TabFocus); m_weekButton->installEventFilter(this); DButtonBoxButton *m_dayButton = new DButtonBoxButton(tr("D"), this); //设置日辅助技术显示名称 m_dayButton->setObjectName("DayButton"); m_dayButton->setAccessibleName("DayButton"); m_dayButton->setFixedSize(50, 36); m_dayButton->setFocusPolicy(Qt::TabFocus); m_dayButton->installEventFilter(this); m_yearButton->setFont(viewfont); m_monthButton->setFont(viewfont); m_weekButton->setFont(viewfont); m_dayButton->setFont(viewfont); QList btlist; btlist.append(m_yearButton); btlist.append(m_monthButton); btlist.append(m_weekButton); btlist.append(m_dayButton); m_buttonBox->setButtonList(btlist, true); m_buttonBox->setId(m_yearButton, DDECalendar::CalendarYearWindow); m_buttonBox->setId(m_monthButton, DDECalendar::CalendarMonthWindow); m_buttonBox->setId(m_weekButton, DDECalendar::CalendarWeekWindow); m_buttonBox->setId(m_dayButton, DDECalendar::CalendarDayWindow); m_buttonBox->setFixedSize(200, 36); m_searchEdit = new DSearchEdit(this); //设置搜索框辅助技术显示名称 m_searchEdit->setObjectName("SearchEdit"); m_searchEdit->setAccessibleName("SearchEdit"); DFontSizeManager::instance()->bind(m_searchEdit, DFontSizeManager::T6); m_searchEdit->setFixedHeight(36); m_searchEdit->setFont(viewfont); m_searchEdit->lineEdit()->installEventFilter(this); m_searchEdit->setPlaceHolder(tr("Search events and festivals")); m_searchEdit->setPlaceholderText(tr("Search events and festivals")); m_strPlaceHolder = m_searchEdit->placeholderText(); connect(m_searchEdit, &DSearchEdit::searchAborted, [&] { //搜索框关闭按钮,清空数据 slotSearchEditFocusChanged(false); }); //搜索按钮,在窗口比较小的时候,显示搜索按钮隐藏搜索框 m_searchPush = new DIconButton(this); m_searchPush->setFixedSize(36, 36); m_searchPush->setIcon(QIcon::fromTheme("search")); connect(m_searchPush, &DIconButton::clicked, this, &CTitleWidget::slotShowSearchEdit); //新建日程快捷按钮 m_newScheduleBtn = new DIconButton(this); DStyle style; m_newScheduleBtn->setFixedSize(36, 36); //设置+ m_newScheduleBtn->setIcon(style.standardIcon(DStyle::SP_IncreaseElement)); //除新建日程按钮外的控件放在这个widget内,因为这些控件会根据窗口的大小显示变化而变化 QWidget *leftWidget = new QWidget(this); { QHBoxLayout *layout = new QHBoxLayout; layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(m_sidebarIcon, Qt::AlignLeft); layout->addSpacing(4); layout->addWidget(m_buttonBox, Qt::AlignLeft); layout->addStretch(); layout->addWidget(m_searchEdit, Qt::AlignCenter); layout->addStretch(); layout->addWidget(m_searchPush, Qt::AlignRight); leftWidget->setLayout(layout); } QHBoxLayout *layout = new QHBoxLayout; layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(leftWidget); layout->addWidget(m_newScheduleBtn, Qt::AlignRight); this->setLayout(layout); //设置焦点代理为m_sidebarIcon setFocusProxy(m_sidebarIcon); } void CTitleWidget::setShowState(CTitleWidget::Title_State state) { m_showState = state; stateUpdate(); } void CTitleWidget::setSidebarStatus(bool status) { m_sidebarstatus = status; updateSidebarIconStatus(); m_clickShowLeft = status; emit signalSidebarStatusChange(m_sidebarstatus & m_sidebarCanDisplay); //将状态保存在配置文件中 gSetting->setUserSidebarStatus(status); } void CTitleWidget::setSidebarCanDisplay(bool can) { m_sidebarCanDisplay = can; } bool CTitleWidget::getSidevarStatus() { return m_sidebarstatus; } DButtonBox *CTitleWidget::buttonBox() const { return m_buttonBox; } DSearchEdit *CTitleWidget::searchEdit() const { return m_searchEdit; } DIconButton *CTitleWidget::newScheduleBtn() const { return m_newScheduleBtn; } void CTitleWidget::stateUpdate() { switch (m_showState) { case Title_State_Mini: { //如果搜索框没有焦点且搜索框内没有内容则隐藏搜索框显示搜索图标按钮 if (m_searchEdit->text().isEmpty() && !m_searchEdit->lineEdit()->hasFocus()) { m_searchPush->show(); m_searchEdit->hide(); } else { miniStateShowSearchEdit(); } } break; default: { m_searchEdit->show(); if (m_searchPush->hasFocus()) { m_searchEdit->setFocus(); } m_buttonBox->show(); m_searchPush->hide(); normalStateUpdateSearchEditWidth(); } break; } } void CTitleWidget::miniStateShowSearchEdit() { m_buttonBox->hide(); m_searchPush->hide(); m_searchEdit->setMaximumWidth(width()); m_searchEdit->show(); m_searchEdit->setPlaceHolder(m_strPlaceHolder); m_searchEdit->setPlaceholderText(m_strPlaceHolder); } void CTitleWidget::normalStateUpdateSearchEditWidth() { int padding = qMax(m_buttonBox->width(), m_newScheduleBtn->width()); //更加widget宽度设置搜索框宽度 int searchWidth = width() - 2 * padding; //参考其他应用设置宽度范围为 240~354 if (searchWidth < 240) { searchWidth = 240; } else if (searchWidth > 354) { searchWidth = 354; } m_searchEdit->setMaximumWidth(searchWidth); m_searchEdit->setPlaceHolder(m_strPlaceHolder); m_searchEdit->setPlaceholderText(m_strPlaceHolder); } void CTitleWidget::updateSidebarIconStatus() { m_sidebarIcon->setIcon(QIcon::fromTheme("dde_calendar_sidebar")); } void CTitleWidget::resizeEvent(QResizeEvent *event) { QWidget::resizeEvent(event); if (m_showState == Title_State_Normal) { normalStateUpdateSearchEditWidth(); } QString str = m_strPlaceHolder; QFontMetrics fontMetrice(m_searchEdit->font()); if (fontMetrice.horizontalAdvance(str) > (m_searchEdit->width() - 30) && m_clickShowLeft == false && !m_buttonBox->isHidden()) { str = fontMetrice.elidedText(str, Qt::ElideRight, m_searchEdit->width() - 30); m_searchEdit->setPlaceHolder(str); m_searchEdit->setPlaceholderText(str); } else { m_searchEdit->setPlaceHolder(m_strPlaceHolder); m_searchEdit->setPlaceholderText(m_strPlaceHolder); m_clickShowLeft = false; } } void CTitleWidget::changeEvent(QEvent *e) { QWidget::changeEvent(e); if (e->type() == QEvent::FontChange) { updateSearchEditPlaceHolder(); } } void CTitleWidget::updateSearchEditPlaceHolder() { QString str = m_strPlaceHolder; QFontMetrics fontMetrice(m_searchEdit->font()); if (fontMetrice.horizontalAdvance(str) > (m_searchEdit->width() - 30)) { str = fontMetrice.elidedText(str, Qt::ElideRight, m_searchEdit->width() - 30); m_searchEdit->setPlaceHolder(str); m_searchEdit->setPlaceholderText(str); } else { m_searchEdit->setPlaceHolder(m_strPlaceHolder); m_searchEdit->setPlaceholderText(m_strPlaceHolder); } } bool CTitleWidget::eventFilter(QObject *o, QEvent *e) { DButtonBoxButton *btn = qobject_cast(o); if (btn != nullptr && e->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = dynamic_cast(e); if (keyEvent != nullptr && (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Space)) { emit signalSetButtonFocus(); } } if (m_searchEdit != nullptr && m_searchEdit->lineEdit() == o) { if (e->type() == QEvent::FocusOut) { QFocusEvent *focusOutEvent = dynamic_cast(e); //如果为tab切换焦点则发送焦点切换信号 if (focusOutEvent->reason() == Qt::TabFocusReason) { emit signalSearchFocusSwitch(); } //根据焦点离开原因,决定是否隐藏搜索框 if (focusOutEvent->reason() == Qt::TabFocusReason || focusOutEvent->reason() == Qt::MouseFocusReason) { slotSearchEditFocusChanged(false); } } } return QWidget::eventFilter(o, e); } void CTitleWidget::slotShowSearchEdit() { miniStateShowSearchEdit(); m_searchEdit->setFocus(); } void CTitleWidget::slotSearchEditFocusChanged(bool onFocus) { //如果获取焦点,或者搜索编辑框内容不为空则不处理 if (onFocus || !m_searchEdit->text().isEmpty()) { return; } //如果为小窗口模式则隐藏部分控件 if (m_showState == Title_State_Mini) { m_buttonBox->show(); m_searchEdit->hide(); m_searchPush->show(); } } void CTitleWidget::slotSidebarIconClicked() { //获取当前侧边栏显示状态 bool display = m_sidebarCanDisplay & m_sidebarstatus; //点击按钮后侧边栏状态重新恢复为可显示状态 m_sidebarCanDisplay = true; setSidebarStatus(!display); //切换显示状态 } dde-calendar-5.14.13/calendar-client/src/customWidget/ctitlewidget.h000066400000000000000000000053201473346337000253350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CTITLEWIDGET_H #define CTITLEWIDGET_H #include "cbuttonbox.h" #include #include #include DWIDGET_USE_NAMESPACE class CTitleWidget : public QWidget { Q_OBJECT public: enum Title_State { Title_State_Mini, //最小状态显示 Title_State_Normal //正常状态显示 }; explicit CTitleWidget(QWidget *parent = nullptr); /** * @brief setShowState 设置显示状态 * @param state */ void setShowState(Title_State state); //设置侧边栏状态,status:显示状态 void setSidebarStatus(bool status); void setSidebarCanDisplay(bool can); bool getSidevarStatus(); DButtonBox *buttonBox() const; DSearchEdit *searchEdit() const; DIconButton *newScheduleBtn() const; private: /** * @brief stateUpdate 切换显示状态 */ void stateUpdate(); /** * @brief miniStateShowSearchEdit 最小状态下搜索框显示 */ void miniStateShowSearchEdit(); /** * @brief normalStateUpdateSearchEditWidth 正常状态下搜索显示 */ void normalStateUpdateSearchEditWidth(); /** * @brief updateSidebarIconStatus * 更新侧边栏控制图标按钮的状态 */ void updateSidebarIconStatus(); void updateSearchEditPlaceHolder(); protected: void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; bool eventFilter(QObject *o, QEvent *e) override; void changeEvent(QEvent *e) override; signals: void signalSetButtonFocus(); void signalSearchFocusSwitch(); //侧边栏状态发生改变 void signalSidebarStatusChange(bool); public slots: /** * @brief slotShowSearchEdit 搜索按钮点击下切换搜索框 */ void slotShowSearchEdit(); /** * @brief slotSearchEditFocusChanged 状态切换下,根据搜索框是否有内容或焦点切换显示状态 * @param onFocus 搜索框是否有焦点 */ void slotSearchEditFocusChanged(bool onFocus); void slotSidebarIconClicked(); private: bool m_sidebarstatus = true; //侧边栏状态 bool m_sidebarCanDisplay = true; //侧边栏状态 DIconButton *m_sidebarIcon {nullptr}; //侧边栏状态控制按钮 CButtonBox *m_buttonBox {nullptr}; DSearchEdit *m_searchEdit {nullptr}; DIconButton *m_newScheduleBtn {nullptr}; //全局的新建日程按钮 DIconButton *m_searchPush {nullptr}; QString m_strPlaceHolder; Title_State m_showState {Title_State_Normal}; bool m_clickShowLeft = false; }; #endif // CTITLEWIDGET_H dde-calendar-5.14.13/calendar-client/src/customWidget/customframe.cpp000066400000000000000000000103631473346337000255300ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "customframe.h" #include "constants.h" #include #include #include #include DGUI_USE_NAMESPACE CustomFrame::CustomFrame(QWidget *parent) : QFrame(parent) { m_font.setWeight(QFont::Medium); m_font.setPixelSize(DDECalendar::FontSizeFourteen); this->setAttribute(Qt::WA_TranslucentBackground);//设置窗口背景透明 this->setWindowFlags(Qt::FramelessWindowHint); //设置无边框窗口 setContentsMargins(0, 0, 0, 0); } void CustomFrame::setBColor(QColor normalC) { m_bnormalColor = normalC; m_bflag = true; update(); } void CustomFrame::setRoundState(bool lstate, bool tstate, bool rstate, bool bstate) { m_lstate = lstate; m_tstate = tstate; m_rstate = rstate; m_bstate = bstate; } void CustomFrame::setTextStr(const QFont &font, const QColor &tc, const QString &strc, int flag) { m_font = font; m_tnormalColor = tc; m_text = strc; m_textflag = flag; } void CustomFrame::setTextStr(const QString &strc) { m_text = strc; if (!m_fixsizeflag) { QFontMetrics fm(m_font); int w = fm.horizontalAdvance(m_text); setMinimumWidth(w); } update(); } void CustomFrame::setTextColor(QColor tc) { m_tnormalColor = tc; update(); } void CustomFrame::setTextFont(const QFont &font) { m_font = font; if (!m_fixsizeflag) { QFontMetrics fm(m_font); int w = fm.horizontalAdvance(m_text); setMinimumWidth(w); } } void CustomFrame::setTextAlign(int flag) { m_textflag = flag; } void CustomFrame::setRadius(int radius) { m_radius = radius; } void CustomFrame::setboreder(int framew) { m_borderframew = framew; } void CustomFrame::setFixedSize(int w, int h) { m_fixsizeflag = true; QFrame::setFixedSize(w, h); } void CustomFrame::paintEvent(QPaintEvent *e) { int labelwidth = width() - 2 * m_borderframew; int labelheight = height() - 2 * m_borderframew; QPainter painter(this); QRect fillRect = QRect(m_borderframew, m_borderframew, labelwidth, labelheight); if (m_bflag) { painter.save(); painter.setRenderHint(QPainter::Antialiasing); // 反锯齿; painter.setBrush(QBrush(m_bnormalColor)); painter.setPen(Qt::NoPen); QPainterPath painterPath; painterPath.moveTo(m_radius, m_borderframew); if (m_lstate) { painterPath.arcTo(QRect(m_borderframew, m_borderframew, m_radius * 2, m_radius * 2), 90, 90); } else { painterPath.lineTo(m_borderframew, m_borderframew); painterPath.lineTo(m_borderframew, m_radius); } painterPath.lineTo(0, labelheight - m_radius); if (m_bstate) { painterPath.arcTo(QRect(m_borderframew, labelheight - m_radius * 2, m_radius * 2, m_radius * 2), 180, 90); } else { painterPath.lineTo(m_borderframew, labelheight); painterPath.lineTo(m_radius, labelheight); } painterPath.lineTo(labelwidth - m_radius, labelheight); if (m_rstate) { painterPath.arcTo(QRect(labelwidth - m_radius * 2, labelheight - m_radius * 2, m_radius * 2, m_radius * 2), 270, 90); } else { painterPath.lineTo(labelwidth, labelheight); painterPath.lineTo(labelwidth, labelheight - m_radius); } painterPath.lineTo(labelwidth, m_radius); if (m_tstate) { painterPath.arcTo(QRect(labelwidth - m_radius * 2, m_borderframew, m_radius * 2, m_radius * 2), 0, 90); } else { painterPath.lineTo(labelwidth, m_borderframew); painterPath.lineTo(labelwidth - m_radius, m_borderframew); } painterPath.lineTo(m_radius, m_borderframew); painterPath.closeSubpath(); painter.drawPath(painterPath); painter.restore(); } if (!m_text.isEmpty()) { painter.save(); painter.setRenderHints(QPainter::HighQualityAntialiasing); painter.setFont(m_font); painter.setPen(m_tnormalColor); painter.drawText(fillRect, m_textflag, m_text); painter.restore(); } QFrame::paintEvent(e); } dde-calendar-5.14.13/calendar-client/src/customWidget/customframe.h000066400000000000000000000030711473346337000251730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CustomFrame_H #define CustomFrame_H #include class CustomFrame : public QFrame { Q_OBJECT public: explicit CustomFrame(QWidget *parent = nullptr); void setBColor(QColor normalC); void setRoundState(bool lstate, bool tstate, bool rstate, bool bstate); void setTextStr(const QFont &font, const QColor &tc, const QString &strc, int flag = Qt::AlignCenter); void setTextStr(const QString &strc); void setTextColor(QColor tc); void setTextFont(const QFont &font); void setTextAlign(int flag = Qt::AlignCenter); void setRadius(int radius = 8); void setboreder(int framew = 0); QString getTextStr() { return m_text; } void setFixedSize(int w, int h); protected: void paintEvent(QPaintEvent *e) override; private: QColor m_bnormalColor = "#FFFFFF"; QColor m_tnormalColor = "#000000"; QFont m_font; bool m_bflag = false; bool m_fixsizeflag = false; int m_textflag = Qt::AlignCenter;//对齐方式 QString m_text; int m_radius = 8; int m_borderframew = 0; bool m_lstate = false; bool m_tstate = false; bool m_rstate = false; bool m_bstate = false; }; #endif // TODYBUTTON_H dde-calendar-5.14.13/calendar-client/src/customWidget/cweekwidget.cpp000066400000000000000000000041511473346337000255030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cweekwidget.h" #include "calendarmanage.h" #include "constants.h" #include #include #include CWeekWidget::CWeekWidget(QWidget *parent) : QPushButton(parent) , m_firstDay(CalendarManager::getInstance()->getFirstDayOfWeek()) { setMinimumHeight(10); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); setFocusPolicy(Qt::NoFocus); } void CWeekWidget::setFirstDay(Qt::DayOfWeek first) { m_firstDay = first; setAutoFirstDay(true); } void CWeekWidget::setAutoFirstDay(bool is) { m_autoFirstDay = is; } void CWeekWidget::setAutoFontSizeByWindow(bool is) { m_autoFontSizeByWindow = is; } void CWeekWidget::paintEvent(QPaintEvent *event) { QWidget::paintEvent(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); QFont font; if (m_autoFontSizeByWindow) { //字体跟随界面大小 qreal w = this->width() / 7; qreal h = this->height(); qreal r = w > h ? h : w ; if (QLocale::system().language() == QLocale::English) { r*=0.8; } //根据高度和宽度设置时间字体的大小 font.setPixelSize(int(r/20.0*12)); } else { font.setPixelSize(DDECalendar::FontSizeTwelve); } painter.setFont(font); QLocale locale; qreal setp = (width())/7.0; //获取一周首日 int firstDay = m_firstDay; if (m_autoFirstDay) { firstDay = CalendarManager::getInstance()->getFirstDayOfWeek(); } QStringList weekStr; for (auto i : { 7, 1, 2, 3, 4, 5, 6 }) { QString weekDayName = locale.dayName(i, QLocale::NarrowFormat); weekStr << weekDayName; } //绘制周一到周日 for (int i = Qt::Monday; i <= Qt::Sunday; ++i) { int index = (firstDay + i - Qt::Monday) % Qt::Sunday; QString text = weekStr[index]; QRectF rect((i-Qt::Monday)*setp, 0, setp, height()); painter.drawText(rect, Qt::AlignCenter, text); } } dde-calendar-5.14.13/calendar-client/src/customWidget/cweekwidget.h000066400000000000000000000015451473346337000251540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CWEEKWIDGET_H #define CWEEKWIDGET_H #include class CWeekWidget : public QPushButton { Q_OBJECT public: explicit CWeekWidget(QWidget *parent = nullptr); //设置一周首日 void setFirstDay(Qt::DayOfWeek); //设置是否根据配置自动设置 void setAutoFirstDay(bool); //设置字体大小是否跟随界面大小 void setAutoFontSizeByWindow(bool); signals: public slots: protected: void paintEvent(QPaintEvent *event) override; private: bool m_autoFirstDay = true; //是否根据配置自动设置 bool m_autoFontSizeByWindow = true; //字体大小是否跟随界面大小 Qt::DayOfWeek m_firstDay = Qt::Monday; //一周首日 }; #endif // CWEEKWIDGET_H dde-calendar-5.14.13/calendar-client/src/customWidget/jobtypecombobox.cpp000066400000000000000000000244271473346337000264160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "jobtypecombobox.h" #include #include #include #include #include #include #include #include #include JobTypeComboBox::JobTypeComboBox(QWidget *parent) : DComboBox(parent) { initUI(); //不启用自动匹配 setCompleter(nullptr); //设置不接受回车键插入 setInsertPolicy(QComboBox::NoInsert); this->view()->setTextElideMode(Qt::ElideRight); connect(this, QOverload::of(&QComboBox::highlighted), [this](int index) { view()->setFocus(); m_hoverSelectedIndex = index; }); } JobTypeComboBox::~JobTypeComboBox() { return; } QString JobTypeComboBox::getCurrentJobTypeNo() { if (this->currentIndex() < 0 || this->currentIndex() >= m_lstJobType.size()) { return QString(); } return m_lstJobType[this->currentIndex()]->typeID(); } void JobTypeComboBox::setCurrentJobTypeNo(const QString &strJobTypeNo) { for (int i = 0; i < m_lstJobType.size(); i++) { if (strJobTypeNo == m_lstJobType[i]->typeID()) { this->setCurrentIndex(i); break; } } return; } void JobTypeComboBox::setAlert(bool isAlert) { if (m_control) { //输入框未显示警告色? m_control->setAlert(isAlert); } } bool JobTypeComboBox::isAlert() const { if (m_control) { return m_control->isAlert(); } return false; } void JobTypeComboBox::showAlertMessage(const QString &text, int duration) { showAlertMessage(text, nullptr, duration); } void JobTypeComboBox::showAlertMessage(const QString &text, QWidget *follower, int duration) { if (m_control) { m_control->showAlertMessage(text, follower ? follower : this, duration); } } void JobTypeComboBox::setAlertMessageAlignment(Qt::Alignment alignment) { if (m_control) { m_control->setMessageAlignment(alignment); } } void JobTypeComboBox::hideAlertMessage() { if (m_control) { m_control->hideAlertMessage(); } } int JobTypeComboBox::getCurrentEditPosition() const { return m_newPos; } void JobTypeComboBox::updateJobType(const AccountItem::Ptr& account) { if (nullptr == account) { return; } //将自定义控件内存是否并置空,保存初始展示时能够进入高度调整 if (m_customWidget) { m_addBtn->deleteLater(); m_customWidget->deleteLater(); m_addBtn = nullptr; m_customWidget = nullptr; } //切换账号重置选项后需重置view的高度限制和大小策略,使其在初次显示时能跟随列表项数量动态调整高度 QFrame *viewContainer = findChild(); if (viewContainer) { viewContainer->setMinimumHeight(0); viewContainer->setMaximumHeight(16777215); viewContainer->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); } //保存现场 bool isEnit = isEditable(); QString text = currentText(); m_lstJobType = account->getScheduleTypeList(); clear(); //更新前先清空原有列表 for (m_itemNumIndex = 0; m_itemNumIndex < m_lstJobType.size(); m_itemNumIndex++) { addJobTypeItem(m_itemNumIndex, m_lstJobType[m_itemNumIndex]->getColorCode(), m_lstJobType[m_itemNumIndex]->displayName()); } //数据重置后hover标识重置为-1 m_hoverSelectedIndex = -1; //恢复原状 setEditable(isEnit); setCurrentText(text); } void JobTypeComboBox::addJobTypeItem(int idx, QString strColorHex, QString strJobType) { //绘制的pixmap为基准大小的4倍,防止缩放时出现齿距 QSize size(64, 64); QPixmap pixmap(size); pixmap.fill(Qt::transparent); QPainter painter(&pixmap); painter.setRenderHints(QPainter::Antialiasing); painter.setBrush(QColor(strColorHex)); painter.setPen(QColor(strColorHex)); painter.drawRoundedRect(0, 0, 64, 64, 16, 16); //描边 QPainterPath path; path.addRoundedRect(0, 0, 64, 64, 16, 16); path.addRoundedRect(4, 4, 56, 56, 16, 16); painter.setBrush(QColor(0, 0, 0, 255 / 10)); painter.drawPath(path); insertItem(idx, QIcon(pixmap), tr(strJobType.toLocal8Bit())); } void JobTypeComboBox::initUI() { setEditable(false); setIconSize(QSize(16, 16)); } void JobTypeComboBox::setItemSelectable(bool status) { if (-1 == m_hoverSelectedIndex) { return; } //更改当前列表框里的高亮项的可选择状态设置,将其设置为不可选中状态可实现失去选中效果,待聚焦后再恢复过来 QStandardItemModel *pItemModel = qobject_cast(model()); pItemModel->item(m_hoverSelectedIndex)->setSelectable(status); //设置“添加按键”按钮的高亮状态 if (nullptr != m_addBtn) { m_addBtn->setHighlight(!status); } } void JobTypeComboBox::addCustomWidget(QFrame *viewContainer) { if (viewContainer) { if (nullptr == m_customWidget) { //获取原控件布局 QBoxLayout *layout = qobject_cast(viewContainer->layout()); //自定义控件 QVBoxLayout *hLayout = new QVBoxLayout; DPushButton *splitter = new DPushButton(this); m_addBtn = new CPushButton(); splitter->setFixedHeight(2); splitter->setFocusPolicy(Qt::NoFocus); hLayout->addWidget(splitter); hLayout->addWidget(m_addBtn); hLayout->setContentsMargins(0, 0, 0, 0); hLayout->setSpacing(0); m_customWidget = new QWidget(this); m_customWidget->setFixedHeight(35); m_customWidget->setLayout(hLayout); //添加自定义控件到最后 layout->insertWidget(-1, m_customWidget); viewContainer->setFixedHeight(viewContainer->height() + m_customWidget->height()); //设置可接受tab焦点 m_addBtn->setFocusPolicy(Qt::TabFocus); setTabOrder(view(), m_addBtn); //注册事件监听 m_addBtn->installEventFilter(this); view()->installEventFilter(this); connect(m_addBtn, &CPushButton::clicked, this, &JobTypeComboBox::slotBtnAddItemClicked); } } } void JobTypeComboBox::showPopup() { //重置icon大小 setIconSize(QSize(16, 16)); setItemSelectable(true); if (currentIndex() < 0) setCurrentIndex(0); //设置为不可编辑模式 setEditable(false); //下拉模式取消信号关联,并释放警报控制 if (m_control) { disconnect(m_control, &DAlertControl::alertChanged, this, &JobTypeComboBox::alertChanged); delete m_control; m_control = nullptr; } emit activated(0); DComboBox::showPopup(); //获取下拉视图容器 QFrame *viewContainer = findChild(); if (nullptr == m_customWidget) { //添加自定义布局 addCustomWidget(viewContainer); } if (m_customWidget && m_lstJobType.size() >= 20) { m_customWidget->hide(); } //设置最大高度为400 if (viewContainer->height() > 400) { viewContainer->setFixedHeight(400); } //重新调整选中项的位置 view()->scrollTo(view()->currentIndex(), QAbstractItemView::PositionAtCenter); } bool JobTypeComboBox::eventFilter(QObject *obj, QEvent *event) { if (view() == obj && (event->type() == QEvent::Enter)) { view()->setFocus(); } else if (m_addBtn == obj && (event->type() == QEvent::Enter)) { m_addBtn->setFocus(); } else if (view() == obj && event->type() == QEvent::FocusIn) { //列表框控件焦点进入事件 setItemSelectable(true); } else if (m_addBtn == obj && event->type() == QEvent::FocusIn) { //“添加按键”控件焦点进入事件 setItemSelectable(false); } else if (event->type() == QEvent::KeyPress) { QKeyEvent *kEvent = dynamic_cast(event); if (view() == obj && kEvent->key() == Qt::Key_Down) { //焦点在列表框时的下方向按键按下事件 if (m_addBtn->isHighlight()) { return true; } if (m_hoverSelectedIndex == m_itemNumIndex - 1) { //列表框到达最后一项时的下方向按键按下事件 //将焦点转移到“添加按键”控件上 m_addBtn->setFocus(); } } else if (m_addBtn == obj && kEvent->key() == Qt::Key_Up) { //焦点在m_addBtn时的上方向按键按下事件 if (m_addBtn->isHighlight()) { //将焦点转移到列表控件上 view()->setFocus(); } } else if (m_addBtn->isHighlight() && kEvent->key() == Qt::Key_Return) { //回车事件 slotBtnAddItemClicked(); } //过滤掉m_addBtn的所有按键事件 if (m_addBtn == obj) { return true; } } return DComboBox::eventFilter(obj, event); } void JobTypeComboBox::slotBtnAddItemClicked() { JobTypeComboBox::hidePopup(); setIconSize(QSize(0, 0)); //设置没有选中, // setCurrentIndex(-1); setEditable(true); setCurrentText(""); //设置为编辑模式后才会创建lineEdit m_control = new DAlertControl(this->lineEdit(), this); connect(m_control, &DAlertControl::alertChanged, this, &JobTypeComboBox::alertChanged); connect(lineEdit(), &QLineEdit::editingFinished, this, &JobTypeComboBox::slotEditingFinished); connect(lineEdit(), &QLineEdit::cursorPositionChanged, this, &JobTypeComboBox::slotEditCursorPositionChanged); emit signalAddTypeBtnClicked(); return; } void JobTypeComboBox::slotEditingFinished() { //TODO:待优化,由于上下按键会匹配下拉列表内容,导致会调整lineEdit显示位置 //当前先改回设置显示图标的方法 // int oldPos = m_newPos; // QString str = lineEdit()->text(); // setCurrentIndex(-1); // setCurrentText(str); // lineEdit()->setCursorPosition(oldPos); emit editingFinished(); } void JobTypeComboBox::slotEditCursorPositionChanged(int oldPos, int newPos) { m_oldPos = oldPos; m_newPos = newPos; } dde-calendar-5.14.13/calendar-client/src/customWidget/jobtypecombobox.h000066400000000000000000000036251473346337000260600ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef JOBTYPECOMBOBOX_H #define JOBTYPECOMBOBOX_H #include "dschedule.h" #include "scheduledatamanage.h" #include "cpushbutton.h" #include "accountmanager.h" #include #include DWIDGET_USE_NAMESPACE class JobTypeComboBox : public DComboBox { Q_OBJECT public: explicit JobTypeComboBox(QWidget *parent = nullptr); ~JobTypeComboBox() override; void updateJobType(const AccountItem::Ptr&); QString getCurrentJobTypeNo(); void setCurrentJobTypeNo(const QString &strJobTypeNo); void setAlert(bool isAlert); bool isAlert() const; void showAlertMessage(const QString &text, int duration = 3000); void showAlertMessage(const QString &text, QWidget *follower, int duration = 3000); void setAlertMessageAlignment(Qt::Alignment alignment); void hideAlertMessage(); int getCurrentEditPosition() const; signals: void signalAddTypeBtnClicked(); void alertChanged(bool alert) const; void editingFinished(); public slots: protected slots: void slotBtnAddItemClicked(); void slotEditingFinished(); void slotEditCursorPositionChanged(int oldPos, int newPos); protected: void showPopup() override; bool eventFilter(QObject *, QEvent *) override; private: void initUI(); void addJobTypeItem(int idx, QString strColorHex, QString strJobType); void addCustomWidget(QFrame *); void setItemSelectable(bool status); private: QWidget *m_customWidget {nullptr}; CPushButton *m_addBtn {nullptr}; DScheduleType::List m_lstJobType; int m_hoverSelectedIndex = -1; //鼠标悬停的选项下标 int m_itemNumIndex = 0; //item数量 DAlertControl *m_control {nullptr}; QLineEdit *m_lineEdit {nullptr}; int m_oldPos = 0; int m_newPos = 0; }; #endif // JOBTYPECOMBOBOX_H dde-calendar-5.14.13/calendar-client/src/customWidget/jobtypelistview.cpp000066400000000000000000000416521473346337000264530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "jobtypelistview.h" #include "cscheduleoperation.h" #include "commondef.h" #include "scheduletypeeditdlg.h" #include "schedulectrldlg.h" #include "accountmanager.h" #include "icalformat.h" #include "memorycalendar.h" #include #include #include #include #include #include #include #include #include #include #include //Qt::UserRole + 1,会影响item的高度 static const int RoleJobTypeInfo = Qt::UserRole + 2; static const int RoleJobTypeEditable = Qt::UserRole + 3; static const int RoleJobTypeLine = Qt::UserRole + 4; JobTypeListView::JobTypeListView(QWidget *parent) : QTableView(parent) { initUI(); } JobTypeListView::~JobTypeListView() { // JobTypeInfoManager::instance()->removeFromNoticeBill(this); } void JobTypeListView::initUI() { m_modelJobType = new QStandardItemModel(this); setModel(m_modelJobType); setFrameStyle(QFrame::NoFrame); setEditTriggers(QListView::NoEditTriggers); setSelectionMode(QListView::NoSelection); setFocusPolicy(Qt::NoFocus); setItemDelegate(new JobTypeListViewStyle(this)); setShowGrid(false); setMouseTracking(true); verticalHeader()->setMinimumSectionSize(0); horizontalHeader()->setStretchLastSection(true); horizontalHeader()->hide(); verticalHeader()->hide(); // updateJobType(); // 初始化等待对话框 m_waitDialog = new DDialog(this); m_waitDialog->setFixedSize(400, 280); m_waitDialog->setModal(true); m_waitDialog->setCloseButtonVisible(false); auto progress = new DSpinner(m_waitDialog); progress->setFixedSize(100, 100); progress->start(); m_waitDialog->addContent(progress, Qt::AlignCenter); connect(gAccountManager, &AccountManager::signalScheduleTypeUpdate, this, &JobTypeListView::updateJobType); connect(this, &QTableView::entered, this, [&](const QModelIndex & index) { if (!index.isValid()) return; DScheduleType info = index.data(RoleJobTypeInfo).value(); QString displayName = info.displayName(); if (!displayName.isEmpty()) { QToolTip::showText(QCursor::pos(), info.displayName()); } }); } bool JobTypeListView::viewportEvent(QEvent *event) { QTableView::viewportEvent(event); int indexCurrentHover; if (QEvent::HoverLeave == event->type()) { QStandardItemModel *itemModel = qobject_cast(model()); if (nullptr == itemModel) { return true; } DStandardItem *itemJobType = dynamic_cast(itemModel->item(m_iIndexCurrentHover)); if (nullptr == itemJobType) { return true; } //typedef QList DViewItemActionList; for (DViewItemAction *a : itemJobType->actionList(Qt::Edge::RightEdge)) { a->setVisible(false); } m_iIndexCurrentHover = -1; } else if (QEvent::HoverEnter == event->type() || QEvent::HoverMove == event->type()) { QStandardItemModel *itemModel = qobject_cast(model()); if (nullptr == itemModel) { return true; } indexCurrentHover = indexAt(static_cast(event)->pos()).row(); if (indexCurrentHover != m_iIndexCurrentHover) { DStandardItem *itemJobType; //隐藏此前鼠标悬浮行的图标 if (m_iIndexCurrentHover >= 0) { itemJobType = dynamic_cast(m_modelJobType->item(m_iIndexCurrentHover)); if (nullptr != itemJobType) { for (DViewItemAction *a : itemJobType->actionList(Qt::Edge::RightEdge)) { a->setVisible(false); } } //typedef QList DViewItemActionList; } if (indexCurrentHover < 0) { return true; } //展示此前鼠标悬浮行的图标 m_iIndexCurrentHover = indexCurrentHover; itemJobType = dynamic_cast(m_modelJobType->item(m_iIndexCurrentHover)); if (nullptr == itemJobType) { return true; } if (itemJobType->actionList(Qt::Edge::RightEdge).size() > 0) { for (DViewItemAction *a : itemJobType->actionList(Qt::Edge::RightEdge)) { a->setVisible(true); } } else { // 设置其他style时,转换指针为空 if (DStyle *ds = qobject_cast(style())) { Q_UNUSED(ds) auto actionExport = new DViewItemAction(Qt::AlignRight, QSize(30, 0), QSize(30, 0), true); actionExport->setIconVisibleInMenu(false); actionExport->setText(tr("export")); actionExport->setParent(this); connect(actionExport, &QAction::triggered, this, &JobTypeListView::slotExportScheduleType); if (!itemJobType->data(RoleJobTypeEditable).toBool()) { if (!itemJobType->data(RoleJobTypeLine).toBool()) { itemJobType->setActionList(Qt::Edge::RightEdge, { actionExport }); } return true; } auto actionEdit = new DViewItemAction(Qt::AlignVCenter, QSize(20, 20), QSize(20, 20), true); actionEdit->setIcon(DIcon::loadNxPixmap(":/icons/deepin/builtin/icons/dde_calendar_edit_32px.svg")); actionEdit->setParent(this); connect(actionEdit, &QAction::triggered, this, &JobTypeListView::slotUpdateJobType); auto actionDelete = new DViewItemAction(Qt::AlignVCenter, QSize(20, 20), QSize(20, 20), true); actionDelete->setIcon(DIcon::loadNxPixmap(":/icons/deepin/builtin/icons/dde_calendar_delete_32px.svg")); actionDelete->setParent(this); connect(actionDelete, &QAction::triggered, this, &JobTypeListView::slotDeleteJobType); itemJobType->setActionList(Qt::Edge::RightEdge, {actionEdit, actionDelete, actionExport}); } } } } return true; } bool JobTypeListView::updateJobType() { AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_account_id); if (!account) return false; m_modelJobType->removeRows(0, m_modelJobType->rowCount());//先清理 m_iIndexCurrentHover = -1; DScheduleType::List lstJobType = account->getScheduleTypeList(); int viewHeight = 0; for (int i = 0; i < lstJobType.size(); i++) { viewHeight += addJobTypeItem(*lstJobType[i]); } setFixedHeight(viewHeight); emit signalAddStatusChanged(canAdd()); return true; } void JobTypeListView::updateCalendarAccount(QString account_id) { m_account_id = account_id; updateJobType(); } void JobTypeListView::slotAddScheduleType() { AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_account_id); if (!account) return; ScheduleTypeEditDlg dialog(this); dialog.setAccount(account); //按保存键退出则触发保存数据 if (QDialog::Accepted == dialog.exec()) { DScheduleType::Ptr type(new DScheduleType(dialog.newJsonType())); account->createJobType(type); } } void JobTypeListView::slotImportScheduleType() { // 选择ICS文件 auto docDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); auto filename = QFileDialog::getOpenFileName(nullptr, tr("import ICS file"), docDir, "ICS (*.ics)"); if (filename.isEmpty()) { return; } auto fileinfo = QFileInfo(filename); if (!fileinfo.exists()) { qCWarning(ClientLogger) << "ics file not exists"; return; } AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_account_id); if (!account) return; // 从ics文件读取内置的基本信息 KCalendarCore::ICalFormat icalformat; QTimeZone timezone = QDateTime::currentDateTime().timeZone(); KCalendarCore::MemoryCalendar::Ptr cal(new KCalendarCore::MemoryCalendar(timezone)); auto typeID = cal->nonKDECustomProperty("X-DDE-CALENDAR-TYPE-ID"); auto typeName = cal->nonKDECustomProperty("X-DDE-CALENDAR-TYPE-NAME"); auto typeColor = cal->nonKDECustomProperty("X-DDE-CALENDAR-TYPE-COLOR"); // 如果没有颜色,使用随机颜色 if (typeColor.isEmpty()) { auto colorList = account->getColorTypeList(); auto rindex = QRandomGenerator::global()->generate() % colorList.length(); typeColor = colorList[rindex]->colorCode(); } // 如果没有显示名,使用推荐的显示名 if (typeName.isEmpty()) { typeName = cal->nonKDECustomProperty("X-WR-CALNAME"); } // 如果没有推荐显示名,使用文件名 if (typeName.isEmpty()) { typeName = fileinfo.baseName(); } // 仅使用前二十个字符,避免显示名过长 typeName = typeName.mid(0, 20); // 显示等待对话框 m_waitDialog->show(); DScheduleType::Ptr type(new DScheduleType()); type->setColorCode(typeColor); type->setDisplayName(typeName); QEventLoop event; // 创建日程类型 account->createJobType(type, [&event, &typeID](CallMessge msg) { if (msg.code == 0) { // 记录创建的类型ID typeID = msg.msg.toString(); } // 延迟一秒后再退出 // 一来可以避免导入小文件时,进度过快引起等待对话框闪烁 // 二来在导入大文件时堵塞dbus调用,延迟可以避免客户端在日程类型更新信号执行的槽函数被堵塞。 QTimer::singleShot(1000, &event, &QEventLoop::quit); }); qCDebug(ClientLogger) << "import" << typeID << "from" << filename; // 等待日程创建完毕 event.exec(); // 导入ics文件 if (!typeID.isEmpty()) { account->importSchedule(filename, typeID, true, [&event](CallMessge msg) { event.quit(); }); // 等待导入完毕 event.exec(); m_waitDialog->hide(); } } void JobTypeListView::slotExportScheduleType() { DStandardItem *item = dynamic_cast(m_modelJobType->item(m_iIndexCurrentHover)); if (!item) return; AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_account_id); if (!account) return; auto docDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); DScheduleType info = item->data(RoleJobTypeInfo).value(); auto filename = QFileDialog::getSaveFileName(nullptr, "", docDir + "/" + info.displayName() + ".ics", ""); if (filename.isEmpty()) { return; } QEventLoop event; m_waitDialog->show(); auto typeID = info.typeID(); qCDebug(ClientLogger) << "export" << typeID << "to" << filename; account->exportSchedule(filename, typeID, [&filename, &event](CallMessge msg) { qCDebug(ClientLogger) << msg.code << msg.msg; if (msg.code == 0) { DDesktopServices::showFileItem(filename); } QTimer::singleShot(1000, &event, &QEventLoop::quit); }); event.exec(); m_waitDialog->hide(); } bool JobTypeListView::canAdd() { AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_account_id); if (!account) return false; //最多20个类型 return account->getScheduleTypeList().count() < 20; } void JobTypeListView::setItemEnabled(bool b) { if (!m_modelJobType) return; for (int i = 0; i < m_modelJobType->rowCount(); ++i) { QStandardItem *item = m_modelJobType->item(i); item->setEnabled(b); } } int JobTypeListView::addJobTypeItem(const DScheduleType &info) { int itemHeight = 0; DStandardItem *item = new DStandardItem; item->setData(QVariant::fromValue(info), RoleJobTypeInfo); //根据日程类型权限设置显示数据 item->setData(info.privilege() > 1, RoleJobTypeEditable); item->setData(false, RoleJobTypeLine); //首个 非默认日程类型,前面 添加分割线 if (m_modelJobType->rowCount() > 1 && !m_modelJobType->item(m_modelJobType->rowCount() - 1)->data(RoleJobTypeEditable).toBool() && item->data(RoleJobTypeEditable).toBool()) { DStandardItem *itemLine = new DStandardItem; itemLine->setData(QVariant(), RoleJobTypeInfo); itemLine->setData(false, RoleJobTypeEditable); itemLine->setData(true, RoleJobTypeLine); m_modelJobType->appendRow(itemLine); setRowHeight(m_modelJobType->rowCount() - 1, 19); itemHeight += 19; } m_modelJobType->appendRow(item); setRowHeight(m_modelJobType->rowCount() - 1, 46); itemHeight += 46; return itemHeight; } void JobTypeListView::slotUpdateJobType() { int index = indexAt(mapFromGlobal(QCursor::pos())).row(); if (index < 0 || index >= m_modelJobType->rowCount()) return; QStandardItem *item = m_modelJobType->item(index); if (!item) return; AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_account_id); if (!account) return; DScheduleType info = item->data(RoleJobTypeInfo).value(); ScheduleTypeEditDlg dialog(info, this); dialog.setAccount(account); if (QDialog::Accepted == dialog.exec()) { DScheduleType::Ptr type(new DScheduleType(dialog.newJsonType())); if (type->typeID() == "0") { account->createJobType(type); } else { account->updateScheduleType(type); } } } void JobTypeListView::slotDeleteJobType() { DStandardItem *item = dynamic_cast(m_modelJobType->item(m_iIndexCurrentHover)); if (!item) return; AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_account_id); if (!account) return; DScheduleType info = item->data(RoleJobTypeInfo).value(); //TODO:获取日程编号 QString typeNo = info.typeID(); //TODO:根据帐户获取对应信息 if (account->scheduleTypeIsUsed(typeNo)) { CScheduleCtrlDlg msgBox(this); msgBox.setText(tr("You are deleting an event type.")); msgBox.setInformativeText(tr("All events under this type will be deleted and cannot be recovered.")); msgBox.addPushButton(tr("Cancel", "button"), true); msgBox.addWaringButton(tr("Delete", "button"), true); msgBox.exec(); if (msgBox.clickButton() == 0) { return; } else if (msgBox.clickButton() == 1) { //删除日程类型时,后端会删除关联日程 account->deleteScheduleTypeByID(typeNo); } } else { account->deleteScheduleTypeByID(typeNo); } } void JobTypeListViewStyle::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItem opt = option; //draw line bool isDrawLine = index.data(RoleJobTypeLine).toBool(); if (isDrawLine) { int y = opt.rect.y() + opt.rect.height() / 2; int x = opt.rect.x(); int w = x + opt.rect.width(); painter->fillRect(x, y, w, 1, qApp->palette().color(QPalette::Button)); return; } opt.rect.adjust(0, 5, 0, -5); DStyledItemDelegate::paint(painter, opt, index); DScheduleType info = index.data(RoleJobTypeInfo).value(); //draw icon painter->save(); painter->setPen(QPen(QColor(0, 0, 0, int(255 * 0.1)), 2)); painter->setBrush(QColor(info.typeColor().colorCode())); painter->drawEllipse(QRect(opt.rect.x() + 12, opt.rect.y() + 10, 16, 16)); //draw text painter->setPen(qApp->palette().color(QPalette::Text)); QFontMetrics fontMetr(painter->font()); //如果为焦点,且不为系统自带颜色 if (opt.state & QStyle::State_HasFocus && !info.typeColor().isSysColorInfo()) { } JobTypeListView *view = qobject_cast(parent()); //如果当前的index为hover状态则空出图标位置 QString displayName = info.displayName(); // 获取当前字体的信息 QFontMetrics fontMetrics(opt.font); // 当前文字长度是否大于显示框长度 if (fontMetrics.horizontalAdvance(displayName) > (opt.rect.width() - 90)) { displayName = fontMetrics.elidedText(displayName, Qt::ElideRight, opt.rect.width() - 90); // 截取字符串长度用...代替 } if (view && view->m_iIndexCurrentHover == index.row()) { painter->drawText(opt.rect.adjusted(38, 0, -10, 0), Qt::AlignVCenter | Qt::AlignLeft, displayName); } else { painter->drawText(opt.rect.adjusted(38, 0, -10, 0), Qt::AlignVCenter | Qt::AlignLeft, displayName); } painter->restore(); } dde-calendar-5.14.13/calendar-client/src/customWidget/jobtypelistview.h000066400000000000000000000037321473346337000261150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef JOBTYPELISTVIEW_H #define JOBTYPELISTVIEW_H #include "scheduledatamanage.h" #include "daccount.h" #include "accountitem.h" #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class JobTypeListViewStyle; class JobTypeListView : public QTableView { Q_OBJECT public: explicit JobTypeListView(QWidget *parent = nullptr); ~JobTypeListView(); /** * @brief canAdd 是否可以继续新增类型 */ bool canAdd(); void setItemEnabled(bool b); protected: bool viewportEvent(QEvent *event) override; private: void initUI();//初始化 /** * @brief addJobTypeItem 添加item * @return 返回item的高度 */ int addJobTypeItem(const DScheduleType &info); //新增一行【日程类型】数据 signals: /** * @brief signalAddStatusChanged 信号:是否可以继续新增类型 */ void signalAddStatusChanged(bool); public slots: void slotUpdateJobType(); void slotDeleteJobType(); void slotAddScheduleType(); // 导入ics文件 void slotImportScheduleType(); // 导出ics文件 void slotExportScheduleType(); bool updateJobType(); void updateCalendarAccount(QString account_id); private: QStandardItemModel *m_modelJobType {nullptr}; int m_iIndexCurrentHover = -1; friend JobTypeListViewStyle; QString m_account_id; DDialog *m_waitDialog = nullptr; }; class JobTypeListViewStyle : public DStyledItemDelegate { Q_OBJECT public: explicit JobTypeListViewStyle(QAbstractItemView *parent = nullptr) : DStyledItemDelegate(parent) {} protected: // painting void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; }; #endif // JOBTYPELISTVIEW_H dde-calendar-5.14.13/calendar-client/src/customWidget/labelwidget.cpp000066400000000000000000000014161473346337000254650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "labelwidget.h" #include #include LabelWidget::LabelWidget(QWidget *parent) : QLabel(parent) { //设置焦点选中类型 setFocusPolicy(Qt::FocusPolicy::TabFocus); } LabelWidget::~LabelWidget() { } void LabelWidget::paintEvent(QPaintEvent *ev) { QPainter painter(this); if (hasFocus()) { //有焦点,绘制焦点 QStyleOptionFocusRect option; option.initFrom(this); option.backgroundColor = palette().color(QPalette::Background); style()->drawPrimitive(QStyle::PE_FrameFocusRect, &option, &painter, this); } QLabel::paintEvent(ev); } dde-calendar-5.14.13/calendar-client/src/customWidget/labelwidget.h000066400000000000000000000006251473346337000251330ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef LABELWIDGET_H #define LABELWIDGET_H #include class LabelWidget : public QLabel { public: explicit LabelWidget(QWidget *parent = nullptr); ~LabelWidget() override; protected: void paintEvent(QPaintEvent *ev) override; }; #endif // LABELWIDGET_H dde-calendar-5.14.13/calendar-client/src/customWidget/lunarcalendarwidget.cpp000066400000000000000000000337601473346337000272300ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "lunarcalendarwidget.h" #include "lunarmanager.h" #include #include #include #include #include #include #include #include #include #include /** * 实现的效果:保证原本日历不变的前提下,1.增加阴历年、2.增加阴历日、3.增加控件底部留白 * 1.增加阴历年 * 添加QLabel * * 2.增加阴历日 * 重新绘制item * 相关算法:item.height = 2px空心圆 + 1.5px空白 + 实心圆.直径 + 2px空心圆 + 1.5px空白 + 阴历日.font.height * 实心圆.直径 = 阳历日.font.height = 阴历日.font.height * 实心圆.直径 = (item.height - 7) / 2 * * 如下面代码: * int d = (rect.height() - 7) / 2;//阳历日.font.height * int h = d + 7;//阳历日在的rect的高度 * * 3.增加控件底部留白 * 添加固定高度的QWidget **/ //底部留空10px static const int BottomSpacing = 10; DWIDGET_USE_NAMESPACE class CalenderStyle : public QProxyStyle { public: CalenderStyle() {} /** * @brief getColor 获取对应palette的颜色 */ QColor getColor(const QStyleOption *option, DPalette::ColorType type, const QWidget *widget) const; QColor getColor(const QStyleOption *option, QPalette::ColorRole role) const; /** * @brief drawCalenderEllipse 绘制圆 */ void drawCalenderEllipse(QPainter *p, const QRect &rect, int offset) const; /** * @brief drawItemViewSelected 绘制选中样式 */ void drawItemViewSelected(QPainter *p, const QStyleOption *opt) const; /** * @brief drawItemViewFocus 绘制焦点样式 */ void drawItemViewFocus(QPainter *p, const QStyleOption *opt, const QWidget *w) const; /** * @brief getLunarYearDesc 获取阴历年描述 */ QString getLunarYearDesc(const QDate &date) const; /** * @brief getLunarDayName 获取阴历日 */ QString getLunarDayName(const QDate &date) const; /** * @brief updateLunarInfo 更新阴历信息 */ void updateLunarInfo(const QDate &date) const; protected: void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override; private: mutable QMap m_caHuangLiDayMap; }; QColor CalenderStyle::getColor(const QStyleOption *option, DPalette::ColorType type, const QWidget *widget) const { const DPalette &pa = DPaletteHelper::instance()->palette(widget, option->palette); return pa.brush(type).color(); } QColor CalenderStyle::getColor(const QStyleOption *option, QPalette::ColorRole role) const { return option->palette.brush(role).color(); } void CalenderStyle::drawCalenderEllipse(QPainter *p, const QRect &rect, int offset) const { int d = (rect.height() - 7) / 2; int h = d + 7; QRect r = rect.adjusted(0, 0, 0, -(rect.height() - h)); QRect ellipese = r; ellipese.setWidth(ellipese.height()); ellipese.moveCenter(r.center()); p->drawEllipse(ellipese.adjusted(offset, offset, -offset, -offset)); } void CalenderStyle::drawItemViewSelected(QPainter *p, const QStyleOption *opt) const { if (opt->state & QStyle::State_Selected) { QRect rect = opt->rect; int d = (rect.height() - 7) / 2; int h = d + 7; QRect r = rect.adjusted(0, 0, 0, -(rect.height() - h)); QRect ellipese = r; ellipese.setWidth(ellipese.height()); ellipese.moveCenter(r.center()); p->setBrush(opt->palette.brush(QPalette::Highlight)); p->setPen(Qt::NoPen); p->setRenderHint(QPainter::Antialiasing); p->drawEllipse(ellipese.adjusted(1, 1, -1, -1)); } } void CalenderStyle::drawItemViewFocus(QPainter *p, const QStyleOption *opt, const QWidget *w) const { const QColor &focus_color = getColor(opt, QPalette::Highlight); if (!focus_color.isValid() || focus_color.alpha() == 0) return; p->setRenderHint(QPainter::Antialiasing); QPen pen; pen.setWidth(2); pen.setColor(focus_color); p->setPen(pen); p->setBrush(Qt::NoBrush); bool calendar = w && (w->objectName() == "qt_calendar_calendarview"); pen.setWidth(2); int offset = 1; // 先画内框(黑or白) pen.setColor(getColor(opt, QPalette::Base)); p->setPen(pen); if (calendar) { pen.setWidth(3); p->setPen(pen); offset = 2; drawCalenderEllipse(p, opt->rect, offset); } // 再画外框(活动色即焦点) pen.setColor(focus_color); p->setPen(pen); if (calendar) { pen.setWidth(2); p->setPen(pen); offset = 1; drawCalenderEllipse(p, opt->rect, offset); } } QString CalenderStyle::getLunarDayName(const QDate &date) const { updateLunarInfo(date); CaHuangLiDayInfo &info = m_caHuangLiDayMap[date]; return info.mLunarDayName; } QString CalenderStyle::getLunarYearDesc(const QDate &date) const { updateLunarInfo(date); CaHuangLiDayInfo &info = m_caHuangLiDayMap[date]; return info.mGanZhiYear + info.mZodiac + "年 " + info.mLunarMonthName; } void CalenderStyle::updateLunarInfo(const QDate &date) const { if (m_caHuangLiDayMap.count() > 100) m_caHuangLiDayMap.clear(); if (!m_caHuangLiDayMap.contains(date)) { CaHuangLiDayInfo info = gLunarManager->getHuangLiDay(date); m_caHuangLiDayMap[date] = info; } } void CalenderStyle::drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { const QWidget *w = widget; const QStyleOption *opt = option; QPainter *p = painter; while (element == CE_ItemViewItem) { if (w && w->objectName() == "qt_calendar_calendarview") { if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { LunarCalendarWidget *calendar = qobject_cast(w->parent()); if (!calendar) break; const QAbstractTableModel *model = qobject_cast(vopt->index.model()); if (!model) break; //获取阳历和阴历 QString dayName; QString dayNumber = vopt->index.data().toString(); //获取该item的显示天。若为周x则为0 int day = vopt->index.data().toInt(); //该item的时间 QDate curDate = QDate(calendar->yearShown(), calendar->monthShown(), 1); //显示天的item需要获取每个item的显示时间 if (day > 0) { //如果是第一行会显示上个月的日期 if (vopt->index.row() < 2 && day > 20) { curDate = curDate.addMonths(-1); } else if (vopt->index.row() > 3 && day < 15) { //如果显示行数大于3且显示的天小于15则表示是下个月 curDate = curDate.addMonths(1); } curDate.setDate(curDate.year(), curDate.month(), day); dayName = getLunarDayName(curDate); //更新阴历年描述 int selectedYear = calendar->yearShown(); int selectedMonth = calendar->monthShown(); //如果为焦点状态,则根据该item的日期设置年份时间 if (vopt->state & QStyle::State_HasFocus) { QDate selectedDate = QDate(selectedYear, selectedMonth, day); calendar->setLunarYearText(getLunarYearDesc(selectedDate)); } } p->save(); p->setClipRect(vopt->rect); //绘制禁用项 if (!(vopt->state & QStyle::State_Enabled)) { p->save(); p->setPen(Qt::NoPen); p->setBrush(getColor(vopt, DPalette::Window)); p->drawRect(vopt->rect); p->restore(); } // 绘制当前选中项 drawItemViewSelected(p, vopt); // draw the text if (!vopt->text.isEmpty()) { QPalette::ColorGroup cg = (vopt->state & QStyle::State_Enabled) ? QPalette::Normal : QPalette::Disabled; if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) cg = QPalette::Inactive; QColor colorOrg; QColor colorDisable = qApp->palette().brush(QPalette::Disabled, QPalette::Text).color(); if (vopt->state & QStyle::State_Selected) { colorOrg = vopt->palette.color(cg, QPalette::HighlightedText); } else { colorOrg = vopt->palette.color(cg, QPalette::Text); } p->save(); const QRect rect = vopt->rect; int d = (rect.height() - 7) / 2; if (vopt->index.row() == 0) { p->setPen(colorOrg); p->drawText(vopt->rect, Qt::AlignCenter, dayNumber); } else { int h = d + 7; p->setPen(colorOrg); p->drawText(rect.adjusted(0, 0, 0, -(rect.height() - h)), Qt::AlignCenter, dayNumber); p->setPen(colorDisable); p->drawText(rect.adjusted(0, h, 0, 0), Qt::AlignCenter, dayName); } p->restore(); } //绘制日历分割线 if (vopt->index.row() == 0) { p->save(); QColor color = getColor(vopt, DPalette::FrameBorder, w); color.setAlpha(static_cast(255 * 0.05)); QPen pen(color, 2); p->setPen(pen); int margins = DStyle::pixelMetric(proxy(), DStyle::PM_ContentsMargins); if (vopt->index.column() == 0) p->drawLine(vopt->rect.bottomLeft() + QPoint(margins, 0), vopt->rect.bottomRight()); else if (vopt->index.column() == model->columnCount() - 1) { p->drawLine(vopt->rect.bottomLeft(), vopt->rect.bottomRight() - QPoint(margins, 0)); } else { p->drawLine(vopt->rect.bottomLeft(), vopt->rect.bottomRight()); } p->restore(); } // draw the focus rect if (vopt->state & QStyle::State_HasFocus) { QStyleOptionFocusRect o; o.QStyleOption::operator=(*vopt); o.rect = proxy()->subElementRect(SE_ItemViewItemFocusRect, vopt, w); o.state |= QStyle::State_KeyboardFocusChange; o.state |= QStyle::State_Item; QPalette::ColorGroup cg = (vopt->state & QStyle::State_Enabled) ? QPalette::Normal : QPalette::Disabled; o.backgroundColor = vopt->palette.color(cg, (vopt->state & QStyle::State_Selected) ? QPalette::Highlight : QPalette::Window); drawItemViewFocus(p, vopt, w); } p->restore(); return; } } break; } //while QProxyStyle::drawControl(element, option, painter, widget); } LunarCalendarWidget::LunarCalendarWidget(QWidget *parent) : QCalendarWidget(parent) , m_style(new CalenderStyle) { QWidget *w = findChild("qt_calendar_calendarview"); if (w) w->setStyle(m_style); QVBoxLayout *layoutV = qobject_cast(layout()); m_lunarLabel = new QLabel(this); m_lunarLabel->setObjectName("lunarLabel"); m_lunarLabel->setAutoFillBackground(true); m_lunarLabel->setBackgroundRole(QPalette::Base); m_lunarLabel->setAlignment(Qt::AlignCenter); layoutV->insertWidget(1, m_lunarLabel); //底部留空10px QLabel *label = new QLabel(this); m_lunarLabel->setObjectName("BottomSpacingLabel"); label->setAutoFillBackground(true); label->setBackgroundRole(QPalette::Base); label->setFixedHeight(BottomSpacing); layoutV->insertWidget(3, label); } LunarCalendarWidget::~LunarCalendarWidget() { //Sets the widget's GUI style to style. The ownership of the style object is not transferred. //需手动删除 delete m_style; } void LunarCalendarWidget::setLunarYearText(const QString &text) { if (m_lunarLabel->text() != text) m_lunarLabel->setText(text); } QString LunarCalendarWidget::lunarYearText() { return m_lunarLabel->text(); } QSize LunarCalendarWidget::minimumSizeHint() const { QTableView *view = findChild("qt_calendar_calendarview"); if (!view) return QSize(); QAbstractItemModel *model = view->model(); if (!model) return QSize(); QWidget *navigationbar = findChild("qt_calendar_navigationbar"); if (!navigationbar) return QSize(); int rowcount = model->rowCount(); int hf = QFontMetrics(this->font()).height(); //原生日历的宽度 QSize old = QCalendarWidget::minimumSizeHint(); int w = old.width(); //navigationbar的高度 int h = navigationbar->minimumSizeHint().height(); //m_lunarLabel的高度 h += m_lunarLabel->minimumSizeHint().height(); //CalendarView的高度 h += (hf * 2 + 7) * rowcount; //底部留空 h += BottomSpacing; return QSize(w, h); } dde-calendar-5.14.13/calendar-client/src/customWidget/lunarcalendarwidget.h000066400000000000000000000016061473346337000266670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef LUNARCALENDARWIDGET_H #define LUNARCALENDARWIDGET_H #include class QLabel; class CalenderStyle; class LunarCalendarWidget : public QCalendarWidget { Q_OBJECT public: explicit LunarCalendarWidget(QWidget *parent = nullptr); virtual ~LunarCalendarWidget(); /** * @brief setLunarYearText 设置阴历年描述语 * @param text */ void setLunarYearText(const QString &text); /** * @brief lunarYearText 返回阴历年描述语 * @return */ QString lunarYearText(); protected: virtual QSize minimumSizeHint() const override; private: QLabel *m_lunarLabel = nullptr;//阴历年的label CalenderStyle *m_style = nullptr;//阴历相关样式 }; #endif // LUNARCALENDARWIDGET_H dde-calendar-5.14.13/calendar-client/src/customWidget/monthbrefwidget.cpp000066400000000000000000000244361473346337000264010ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "monthbrefwidget.h" #include "constants.h" #include "scheduledatamanage.h" #include "calendarglobalenv.h" #include #include #include #include #include #include QDate MonthBrefWidget::GlobalData::m_selectedMonth = QDate(); QDate MonthBrefWidget::GlobalData::m_selectedDate = QDate(); MonthBrefWidget::MonthBrefWidget(QWidget *parent) : QWidget(parent) , m_globalData(new GlobalData) { QGridLayout *gridLayout = new QGridLayout(this); gridLayout->setSpacing(0); gridLayout->setMargin(0); for (int i = 0; i < DDEYearCalendar::RectSizeOfEveryMonth; ++i) { CMonthDayRectWidget *item = new CMonthDayRectWidget(m_globalData, this); m_DayItem.append(item); gridLayout->addWidget(item, i/7, i%7, 1, 1, Qt::AlignCenter); connect(item, &CMonthDayRectWidget::signalClicked, this, &MonthBrefWidget::signalPressDate); connect(item, &CMonthDayRectWidget::signalDoubleClick, this, &MonthBrefWidget::signalDoubleClickDate); } this->setLayout(gridLayout); } MonthBrefWidget::~MonthBrefWidget() { delete m_globalData; } /** * @brief MonthBrefWidget::setDate * 设置显示的月 * @param monthDate 待显示的月日期 */ void MonthBrefWidget::setShowMonthDate(const QDate& monthDate) { //获取当月第一天 QDate date = QDate(monthDate.year(), monthDate.month(), 1); int firstday = CalendarManager::getInstance()->getFirstDayOfWeek(); int day = date.dayOfWeek(); //计算当前月日历第一天该显示的时间 date = date.addDays(-(day-firstday+7)%7); for (int i = 0; i < m_DayItem.size(); ++i) { m_DayItem.at(i)->setDate(date); date = date.addDays(1); } //设置显示的月 m_globalData->m_showMonthDate = monthDate; update(); } /** * @brief MonthBrefWidget::setHasScheduleDateSet * 设置含有日程的日期集合 * @param hasScheduleSet */ void MonthBrefWidget::setHasScheduleDateSet(const QSet &hasScheduleSet) { //清空原有标识 for (int i = 0; i < 32; ++i) { m_globalData->m_scheduleDateFlag[i] = false; } //根据日程所在天设置标识 for (QDate date:hasScheduleSet) { if (m_globalData->isBelongMonth(date)) { m_globalData->m_scheduleDateFlag[date.day()] = true; } } update(); } /** * @brief MonthBrefWidget::setHasSearchScheduleSet * 设置含有搜索日程的日期集合 * @param hasScheduleSet */ void MonthBrefWidget::setHasSearchScheduleSet(const QSet &hasScheduleSet) { //清空原有标识 for (int i = 0; i < 32; ++i) { m_globalData->m_searchedDateFlag[i] = false; } //根据日程所在天设置标识 for (QDate date:hasScheduleSet) { if (m_globalData->isBelongMonth(date)) { m_globalData->m_searchedDateFlag[date.day()] = true; } } update(); } /** * @brief MonthBrefWidget::mousePressEvent * 鼠标按下事件 * @param event */ void MonthBrefWidget::mousePressEvent(QMouseEvent *event) { if (event->source() == Qt::MouseEventSynthesizedByQt) { //如果为触摸转换则设置触摸状态和触摸开始坐标 m_touchState = 1; m_touchBeginPoint = event->pos(); QWidget::mousePressEvent(event); } } /** * @brief MonthBrefWidget::mouseReleaseEvent 鼠标释放事件 * @param event */ void MonthBrefWidget::mouseReleaseEvent(QMouseEvent *event) { if (event->source() == Qt::MouseEventSynthesizedByQt) { m_touchState = 0; QWidget::mouseReleaseEvent(event); } mouseMoveEvent(event); } /** * @brief MonthBrefWidget::mouseMoveEvent 鼠标移动事件,设置hover状态 * @param event */ void MonthBrefWidget::mouseMoveEvent(QMouseEvent *event) { if (event->source() == Qt::MouseEventSynthesizedByQt) { QPoint currentPoint = event->pos(); //如果移动距离大与5则为触摸移动状态 if (QLineF(m_touchBeginPoint, currentPoint).length() > 5) { m_touchState = 2; } QWidget::mouseMoveEvent(event); } } CMonthDayRectWidget::CMonthDayRectWidget(MonthBrefWidget::GlobalData* globalData, QWidget *parent) : QPushButton(parent) , m_globaldata(globalData) { setMinimumSize(10, 10); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); setFocusPolicy(Qt::NoFocus); setTheMe(DGuiApplicationHelper::instance()->themeType()); //系统主题切换信号 QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this,&CMonthDayRectWidget::setTheMe); } /** * @brief CMonthDayRectWidget::setTheMe * 系统主题变化 * @param type */ void CMonthDayRectWidget::setTheMe(int type) { CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); if (type == 0 || type == 1) { m_ceventColor = QColor(255, 93, 0); } else if (type == 2) { m_ceventColor = QColor(204, 77, 3); } update(); } /** * @brief CMonthDayRect::setDate * 设置当天的时间 * @param date */ void CMonthDayRectWidget::setDate(const QDate &date) { m_date = date; } /** * @brief CMonthDayRect::getDate * 获取当天的时间 * @return */ QDate CMonthDayRectWidget::getDate() const { return m_date; } /** * @brief CMonthDayRectWidget::mousePressEvent * 鼠标按下事件 * @param event */ void CMonthDayRectWidget::mousePressEvent(QMouseEvent *event) { //因双击会产生两次按下事件,第二次按下事件触发在双击事件触发后,双击后要跳转页面,因此在按下时判断本控件是否出现显示状态再进行处理 if (event->button() == Qt::LeftButton && isVisible()) { m_pressed = true; //保存日程悬浮框显示位置 CalendarGlobalEnv::getGlobalEnv()->reviseValue(DDECalendar::CursorPointKey, mapToGlobal(QPoint(width()/2,height()/2))); m_globaldata->setSelectedDate(m_date); emit signalClicked(m_date); } QWidget::mousePressEvent(event); } /** * @brief CMonthDayRectWidget::mouseDoubleClickEvent * 鼠标双击事件 * @param event */ void CMonthDayRectWidget::mouseDoubleClickEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { emit signalDoubleClick(m_date); } QWidget::mouseDoubleClickEvent(event); } /** * @brief CMonthDayRectWidget::mouseReleaseEvent * 鼠标释放事件 * @param event */ void CMonthDayRectWidget::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { m_pressed = false; } update(); QWidget::mouseReleaseEvent(event); } /** * @brief CMonthDayRectWidget::paintEvent * 绘制日期以及当天状态 * @param event */ void CMonthDayRectWidget::paintEvent(QPaintEvent *event) { //获取待绘制的文字 QString text = QString::number(m_date.day()); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); //字体跟随界面大小 qreal w = this->width(); qreal h = this->height(); const qreal r = w > h ? h: w; QRectF rectf(qRound((w-r)/2), qRound((h-r)/2), r, r); //根据高度和宽度设置时间字体的大小 QFont font; font.setPixelSize(int(r/20.0*12)); painter.setFont(font); QColor highColor = DPaletteHelper::instance()->palette(this).highlight().color(); if (m_date == QDate::currentDate() && m_globaldata->isBelongMonth(m_date)) { //当天日期 painter.setBrush(highColor); painter.setPen(Qt::NoPen); painter.drawEllipse(rectf); painter.setPen(DPaletteHelper::instance()->palette(this).highlightedText().color()); painter.drawText(rectf, Qt::AlignCenter, text); } else if (m_globaldata->isSelectedDate(m_date)) { //被选中的日期 painter.setBrush(highColor); painter.setPen(Qt::NoPen); painter.setOpacity(0.3); painter.drawEllipse(rectf); painter.setPen(highColor); painter.setOpacity(1); painter.drawText(rectf, Qt::AlignCenter, text); } else if (m_globaldata->isHasSearchedByDate(m_date)) { //有被搜索日程,绘制文字 painter.setPen(highColor); painter.setOpacity(1); painter.drawText(rectf, Qt::AlignCenter, text); } else { //绘制默认文字 if (!m_globaldata->isBelongMonth(m_date)) { //置灰日期 painter.setOpacity(0.3); } painter.drawText(rectf, Qt::AlignCenter, text); } if (m_globaldata->isHasSearchedByDate(m_date)) { //有被搜索日程,绘制圆圈 QPainterPath path; path.addEllipse(rectf); path.addEllipse(rectf.x()+1, rectf.y()+1, rectf.width()-2, rectf.height()-2); painter.setBrush(highColor); painter.setPen(Qt::NoPen); painter.drawPath(path); } if (m_globaldata->isHasScheduleByDate(m_date)) { //有日程,绘制日程圆点 painter.setBrush(QBrush(m_ceventColor)); painter.setPen(Qt::NoPen); painter.setOpacity(1); qreal ellipse_r = r * (4.0 / 25); if (ellipse_r < 4) { ellipse_r = 4; } else if (ellipse_r > 7) { ellipse_r = 7; } painter.drawEllipse(QRectF(rectf.x() + rectf.width() - ellipse_r, rectf.y() + rect().y(), ellipse_r, ellipse_r)); } if (m_pressed) { //按下状态,绘制点击效果 painter.setBrush(DPaletteHelper::instance()->palette(this).text()); painter.setPen(Qt::NoPen); painter.setOpacity(0.3); painter.drawEllipse(rectf); } else if (m_hovered) { //悬浮状态,绘制悬浮效果 painter.setBrush(DPaletteHelper::instance()->palette(this).text()); painter.setOpacity(0.2); painter.setPen(Qt::NoPen); painter.drawEllipse(rectf); } QWidget::paintEvent(event); } /** * @brief CMonthDayRectWidget::enterEvent * 鼠标进入事件 * @param event */ void CMonthDayRectWidget::enterEvent(QEvent *event) { m_hovered = true; QWidget::enterEvent(event); } /** * 离开事件,设置当前选中的日期为空 * */ void CMonthDayRectWidget::leaveEvent(QEvent *event) { m_hovered = false; QWidget::leaveEvent(event); } dde-calendar-5.14.13/calendar-client/src/customWidget/monthbrefwidget.h000066400000000000000000000117141473346337000260410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MONTHBREFWIDGET_H #define MONTHBREFWIDGET_H #include "cschedulebasewidget.h" #include #include #include #include class CMonthDayRectWidget; class MonthBrefWidget : public QWidget { Q_OBJECT public: explicit MonthBrefWidget(QWidget *parent = nullptr); ~MonthBrefWidget() override; //当月所有日期共有数据 struct GlobalData { private: QDate m_showMonthDate; static QDate m_selectedMonth; //选中的月 static QDate m_selectedDate; //选中的日期 bool m_scheduleDateFlag[32] = {false}; //是否有日程 bool m_searchedDateFlag[32] = {false}; //是否有选中日程 public: //设置选中的日期 void setSelectedDate(const QDate& date) { m_selectedDate = date; m_selectedMonth = m_showMonthDate; } //判断是否是选中的日期 bool isSelectedDate(const QDate& date) { //当全局日期不等于此类静态日期时(其他界面更改日期的情况下),采用全局时间做判断 if (CScheduleBaseWidget::getSelectDate() != m_selectedDate) { return (isBelongMonth(date) && date == CScheduleBaseWidget::getSelectDate()); } //用此类静态日期做判断(内部界面操作) return m_showMonthDate == m_selectedMonth && date == m_selectedDate; } //判断日期是否是本月内的日期 bool isBelongMonth(const QDate& date) { return (m_showMonthDate.year() == date.year() && m_showMonthDate.month() == date.month()); } //判断该日期是否含有日程 bool isHasScheduleByDate(const QDate& date) { if (isBelongMonth(date)) { return m_scheduleDateFlag[date.day()]; } return false; } //判断该日期是否含有被搜索的日程 bool isHasSearchedByDate(const QDate& date) { if (isBelongMonth(date)) { return m_searchedDateFlag[date.day()]; } return false; } friend MonthBrefWidget; }; //设置显示的月 void setShowMonthDate(const QDate& monthDate); //设置含有日程的日期集合 void setHasScheduleDateSet(const QSet &hasScheduleSet); //设置含有搜索日程的日期集合 void setHasSearchScheduleSet(const QSet &hasScheduleSet); protected: //鼠标按下事件 void mousePressEvent(QMouseEvent *event) override; //鼠标释放事件 void mouseReleaseEvent(QMouseEvent *event) override; //鼠标移动事件,设置hover状态 void mouseMoveEvent(QMouseEvent *event) override; signals: /** * @brief signalPressDate 鼠标点击日期的信号 * @param date 传递时间参数 */ void signalPressDate(const QDate &date); /** * @brief signalDoubleClickDate 鼠标双击日期的信号 * @param date 传递时间参数 */ void signalDoubleClickDate(const QDate &date); private: QVector m_DayItem; GlobalData *m_globalData = nullptr; //触摸状态 0:原始 1:点击 2:移动 int m_touchState{0}; //触摸点击坐标 QPoint m_touchBeginPoint; }; /** * @brief The CMonthDayRectWidget class * 单个日期显示控件 */ class CMonthDayRectWidget : public QPushButton { Q_OBJECT public: explicit CMonthDayRectWidget(MonthBrefWidget::GlobalData* globalData, QWidget *parent = nullptr); //设置当天的时间 void setDate(const QDate &date); //获取当天的时间 QDate getDate()const; //系统主题变化 void setTheMe(int type = 0); signals: /** * @brief signalPressDate 鼠标点击日期的信号 * @param date 传递时间参数 */ void signalClicked(const QDate &date); /** * @brief signalDoubleClick 鼠标双击日期的信号 * @param date 传递时间参数 */ void signalDoubleClick(const QDate &date); protected: //鼠标按下事件 void mousePressEvent(QMouseEvent *event) override; //鼠标双击事件 void mouseDoubleClickEvent(QMouseEvent *event) override; //鼠标释放事件 void mouseReleaseEvent(QMouseEvent *event) override; //绘制日期以及当天状态 void paintEvent(QPaintEvent *event) override; //鼠标进入事件 void enterEvent(QEvent *event) override; //离开事件,设置当前选中的日期为空 void leaveEvent(QEvent *event) override; private: QDate m_date; //当前位置显示的日期 bool m_pressed = false; //按下状态 bool m_hovered = false; //悬浮状态 QColor m_ceventColor = "#FF5D00"; //日程圆点颜色 MonthBrefWidget::GlobalData* m_globaldata = nullptr; }; #endif // MONTHBREFWIDGET_H dde-calendar-5.14.13/calendar-client/src/customWidget/scheduleRemindWidget.cpp000066400000000000000000000126731473346337000273100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduleRemindWidget.h" #include "constants.h" #include #include #include DGUI_USE_NAMESPACE ScheduleRemindWidget::ScheduleRemindWidget(QWidget *parent) : DArrowRectangle(DArrowRectangle::ArrowLeft, DArrowRectangle::FloatWidget, parent) , m_centerWidget(new CenterWidget(this)) { //如果dtk版本为5.3以上则使用新接口 #if (DTK_VERSION > DTK_VERSION_CHECK(5, 3, 0, 0)) //设置显示圆角 setRadiusArrowStyleEnable(true); //设置圆角 setRadius(DARROWRECT::DRADIUS); #endif m_centerWidget->setFixedWidth(207); m_centerWidget->setFixedHeight(57); setContent(m_centerWidget); this->resizeWithContent(); QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, m_centerWidget, &CenterWidget::setTheMe); m_centerWidget->setTheMe(DGuiApplicationHelper::instance()->themeType()); } ScheduleRemindWidget::~ScheduleRemindWidget() { } void ScheduleRemindWidget::setData(const DSchedule::Ptr &vScheduleInfo, const CSchedulesColor &gcolor) { m_centerWidget->setData(vScheduleInfo, gcolor); m_ScheduleInfo = vScheduleInfo; gdcolor = gcolor; this->setHeight(m_centerWidget->height() + 10); } /** * @brief ScheduleRemindWidget::setDirection 设置箭头方向 * @param value */ void ScheduleRemindWidget::setDirection(DArrowRectangle::ArrowDirection value) { //设置箭头方向 this->setArrowDirection(value); //设置内容窗口 this->setContent(m_centerWidget); } /** * @brief ScheduleRemindWidget::setTimeFormat 设置日期显示格式 * @param timeformat 日期格式 */ void ScheduleRemindWidget::setTimeFormat(QString timeformat) { m_centerWidget->setTimeFormat(timeformat); } CenterWidget::CenterWidget(DWidget *parent) : DFrame(parent) , textwidth(0) , textheight(0) { textfont.setWeight(QFont::Medium); } CenterWidget::~CenterWidget() { } void CenterWidget::setData(const DSchedule::Ptr &vScheduleInfo, const CSchedulesColor &gcolor) { m_ScheduleInfo = vScheduleInfo; gdcolor = gcolor; textfont.setPixelSize(DDECalendar::FontSizeTwelve); UpdateTextList(); update(); } void CenterWidget::setTheMe(const int type) { if (type == 2) { timeColor = QColor("#C0C6D4"); timeColor.setAlphaF(0.7); textColor = QColor("#C0C6D4"); textColor.setAlphaF(1); } else { timeColor = QColor("#414D68"); timeColor.setAlphaF(0.7); textColor = QColor("#414D68"); textColor.setAlphaF(1); } update(); } /** * @brief CenterWidget::setTimeFormat 设置日期显示格式 * @param timeFormat 日期格式 */ void CenterWidget::setTimeFormat(QString timeFormat) { m_timeFormat = timeFormat; update(); } void CenterWidget::UpdateTextList() { testList.clear(); QFontMetrics metrics(textfont); textwidth = metrics.horizontalAdvance(m_ScheduleInfo->summary()); textheight = metrics.height(); const int h_count = qCeil(textwidth / textRectWidth); QString text; if (h_count < 1) { testList.append(m_ScheduleInfo->summary()); } else { const int text_Max_Height = 108; const int text_HeightMaxCount = qFloor(text_Max_Height / textheight); for (int i = 0; i < m_ScheduleInfo->summary().count(); ++i) { text += m_ScheduleInfo->summary().at(i); if (metrics.horizontalAdvance(text) > textRectWidth) { text.remove(text.count() - 1, 1); testList.append(text); text = ""; if (testList.count() == (text_HeightMaxCount - 1)) { text = m_ScheduleInfo->summary().right(m_ScheduleInfo->summary().count() - i); testList.append(metrics.elidedText(text, Qt::ElideRight, textRectWidth)); break; } --i; } else { if (i + 1 == m_ScheduleInfo->summary().count()) { testList.append(text); } } } } this->setFixedHeight(testList.count() * textheight + 30 + 8); } void CenterWidget::paintEvent(QPaintEvent *e) { Q_UNUSED(e); int diam = 8; int x = 40 - 13; QFont timeFont; timeFont.setPixelSize(DDECalendar::FontSizeTwelve); QPainter painter(this); //draw time QPen pen; pen.setColor(timeColor); painter.setPen(pen); painter.setFont(timeFont); QString timestr; timestr = m_ScheduleInfo->dtStart().time().toString(m_timeFormat); QFontMetrics metrics(timeFont); if (m_ScheduleInfo->allDay()) timestr = tr("All Day"); int timewidth = metrics.horizontalAdvance(timestr); int timeheight = metrics.height(); painter.drawText(QRect(x + 13, 7, timewidth, timeheight), Qt::AlignLeft | Qt::AlignTop, timestr); painter.setRenderHints(QPainter::Antialiasing); painter.setPen(Qt::NoPen); painter.setBrush(QBrush(gdcolor.orginalColor)); painter.drawEllipse(x, 7 + (timeheight - diam) / 2, diam, diam); pen.setColor(textColor); painter.setPen(pen); painter.setFont(textfont); for (int i = 0; i < testList.count(); i++) { painter.drawText( QRect(x, 30 + i * textheight, textRectWidth, textheight), Qt::AlignLeft, testList.at(i)); } } dde-calendar-5.14.13/calendar-client/src/customWidget/scheduleRemindWidget.h000066400000000000000000000031361473346337000267470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ScheduleRemindWidget_H #define ScheduleRemindWidget_H #include "dschedule.h" #include "scheduledatamanage.h" #include #include #include DWIDGET_USE_NAMESPACE class CenterWidget; class ScheduleRemindWidget : public DArrowRectangle { Q_OBJECT Q_DISABLE_COPY(ScheduleRemindWidget) public: explicit ScheduleRemindWidget(QWidget *parent = nullptr); ~ScheduleRemindWidget() override; void setData(const DSchedule::Ptr &vScheduleInfo, const CSchedulesColor &gcolor); //设置箭头方向 void setDirection(ArrowDirection value); void setTimeFormat(QString timeformat); signals: public slots: private: CenterWidget *m_centerWidget = nullptr; DSchedule::Ptr m_ScheduleInfo; CSchedulesColor gdcolor; }; class CenterWidget : public DFrame { Q_OBJECT public: explicit CenterWidget(DWidget *parent = nullptr); ~CenterWidget() override; void setData(const DSchedule::Ptr &vScheduleInfo, const CSchedulesColor &gcolor); void setTheMe(const int type = 0); void setTimeFormat(QString timeFormat = "h:mm"); private: void UpdateTextList(); protected: void paintEvent(QPaintEvent *e) override; private: QStringList testList; QFont textfont; int textwidth; int textheight; const int textRectWidth = 165; DSchedule::Ptr m_ScheduleInfo; CSchedulesColor gdcolor; QColor textColor; QColor timeColor; QString m_timeFormat; }; #endif // ScheduleRemindWidget_H dde-calendar-5.14.13/calendar-client/src/customWidget/scheduleview.cpp000066400000000000000000000472421473346337000257000ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduleview.h" #include "alldayeventview.h" #include "graphicsview.h" #include "scheduledlg.h" #include "schedulecoormanage.h" #include "scheduledatamanage.h" #include "constants.h" #include "calendarmanage.h" #include "calendarglobalenv.h" #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE static int hourTextWidth = 50; static int hourTextHeight = 20; CScheduleView::CScheduleView(QWidget *parent, ScheduleViewPos viewType) : DFrame(parent) , m_viewPos(viewType) , m_touchGesture(this) , m_timeFormat(CalendarManager::getInstance()->getTimeFormat()) { initUI(); initConnection(); setLineWidth(0); setFocusPolicy(Qt::TabFocus); } CScheduleView::~CScheduleView() { } void CScheduleView::setviewMargin(int left, int top, int right, int bottom) { m_leftMargin = left; m_topMargin = top; m_rightMargin = right; m_layout->setContentsMargins(left, 0, 0, 0); m_graphicsView->setMargins(0, 0, right, bottom); m_alldaylist->setMargins(0, 0, 0, 0); } void CScheduleView::setRange(int w, int h, QDate begin, QDate end) { Q_UNUSED(h); if (!(w > 0)) { return; } m_beginDate = begin; m_endDate = end; m_TotalDay = begin.daysTo(end) + 1; m_graphicsView->setRange(w, scheduleViewHeight(), begin, end, m_rightMargin); m_alldaylist->setRange(w, 22, m_beginDate, m_endDate, m_rightMargin); if (m_viewPos == ScheduleViewPos::DayPos) m_currteDate = begin; update(); } void CScheduleView::setRange(QDate begin, QDate end) { m_TotalDay = begin.daysTo(end) + 1; m_graphicsView->setRange(begin, end); m_alldaylist->setRange(begin, end); m_beginDate = begin; m_endDate = end; updateSchedule(); } void CScheduleView::setTheMe(int type) { if (type == 0 || type == 1) { m_linecolor = "#000000"; m_linecolor.setAlphaF(0.1); m_ALLDayColor = "#303030"; m_timeColor = "#7D7D7D"; } else if (type == 2) { m_linecolor = "#000000"; m_linecolor.setAlphaF(0.1); m_ALLDayColor = "#7D7D7D"; m_timeColor = "#7D7D7D"; } DPalette _painte; //获取外框背景色 m_outerBorderColor = _painte.color(QPalette::Active, QPalette::Window); m_graphicsView->setTheMe(type); m_alldaylist->setTheMe(type); update(); } void CScheduleView::setLunarVisible(bool state) { Q_UNUSED(state); } void CScheduleView::setTime(QTime time) { m_graphicsView->setTime(time); } void CScheduleView::setSelectSchedule(const DSchedule::Ptr &scheduleInfo) { if (scheduleInfo->allDay()) { m_alldaylist->setSelectSearchSchedule(scheduleInfo); } else { m_graphicsView->setSelectSearchSchedule(scheduleInfo); } } void CScheduleView::updateHeight() { m_graphicsView->updateHeight(); m_alldaylist->updateHeight(); } bool CScheduleView::IsDragging() { return (m_graphicsView->getDragStatus() != 4) || (m_alldaylist->getDragStatus() != 4); } void CScheduleView::setCurrentDate(const QDateTime ¤tDate) { m_graphicsView->setCurrentDate(currentDate); } /** * @brief CScheduleView::setShowScheduleInfo 设置显示日程 * @param scheduleInfo */ void CScheduleView::setShowScheduleInfo(const QMap &scheduleInfo) { m_showSchedule = scheduleInfo; updateSchedule(); } /** * @brief CScheduleView::setTimeFormat 设置日期显示格式 * @param timeformat 日期格式 */ void CScheduleView::setTimeFormat(QString timeformat) { m_timeFormat = timeformat; m_ScheduleRemindWidget->setTimeFormat(timeformat); } void CScheduleView::setDate(QDate date) { m_currteDate = date; updateAllday(); } void CScheduleView::slotupdateSchedule() { updateSchedule(); } void CScheduleView::slotPosHours(QVector vPos, QVector vHours, int currentTimeType) { m_vHours = vHours; m_vPos = vPos; m_currentTimeType = currentTimeType; update(); } void CScheduleView::paintEvent(QPaintEvent *event) { DFrame::paintEvent(event); QPainter painter(this); font.setWeight(QFont::Normal); font.setPixelSize(DDECalendar::FontSizeEleven); if (m_vPos.isEmpty()) return; QLocale locale; if (locale.language() == QLocale::Chinese) { QRect tinrect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[m_vPos.count() - 1], hourTextWidth, hourTextHeight); if (m_currentTimeType == 0) { painter.save(); painter.setFont(font); painter.setPen(m_timeColor); for (int i = 0; i < m_vPos.size(); i++) { if (m_vHours[i] == 0) continue; if (m_vHours[i] == 24) continue; if (m_topMargin - 8 + m_vPos[i] < m_topMargin) continue; painter.drawText( QRect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[i], hourTextWidth, hourTextHeight), Qt::AlignCenter, QTime(m_vHours[i], 0).toString(m_timeFormat.contains("AP") ? "AP h 时" : m_timeFormat)); } painter.restore(); } else { painter.save(); painter.setFont(font); painter.setPen(m_timeColor); for (int i = 0; i < m_vPos.size() - 1; i++) { if (m_vHours[i] == 0) continue; if (m_vHours[i] == 24) continue; if (m_topMargin - 8 + m_vPos[i] < m_topMargin) continue; QRect rr((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[i], hourTextWidth, hourTextHeight); if (rr.intersects(tinrect) && m_viewPos == ScheduleViewPos::DayPos && m_beginDate == QDate::currentDate()) { continue; } painter.drawText( QRect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[i], hourTextWidth, hourTextHeight), Qt::AlignCenter, QTime(m_vHours[i], 0).toString(m_timeFormat.contains("AP") ? "AP h 时" : m_timeFormat)); } painter.restore(); if (m_viewPos == ScheduleViewPos::DayPos && m_beginDate == QDate::currentDate()) { painter.save(); painter.setFont(font); painter.setPen(m_currenttimecolor); QString str = QTime::currentTime().toString(m_timeFormat); painter.drawText(QRect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[m_vPos.count() - 1], hourTextWidth + 1, hourTextHeight), Qt::AlignCenter, str); painter.restore(); } } } else { if (m_currentTimeType == 0) { painter.save(); painter.setFont(font); painter.setPen(m_timeColor); for (int i = 0; i < m_vPos.size(); i++) { if (m_vHours[i] == 0) continue; if (m_vHours[i] == 24) continue; if (m_topMargin - 8 + m_vPos[i] < m_topMargin) continue; painter.drawText( QRect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[i], hourTextWidth + 2, hourTextHeight), Qt::AlignCenter, QTime(m_vHours[i], 0).toString(m_timeFormat)); } painter.restore(); } else { painter.save(); painter.setFont(font); painter.setPen(m_timeColor); QRect tinrect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[m_vPos.count() - 1], hourTextWidth + 2, hourTextHeight); for (int i = 0; i < m_vPos.size() - 1; i++) { if (m_vHours[i] == 0) continue; if (m_vHours[i] == 24) continue; if (m_topMargin - 8 + m_vPos[i] < m_topMargin) continue; QRect rr((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[i], hourTextWidth + 2, hourTextHeight); if (rr.intersects(tinrect) && m_viewPos == ScheduleViewPos::DayPos && m_beginDate == QDate::currentDate()) continue; painter.drawText( QRect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[i], hourTextWidth + 2, hourTextHeight), Qt::AlignCenter, QTime(m_vHours[i], 0).toString(m_timeFormat)); } painter.restore(); if (m_viewPos == ScheduleViewPos::DayPos && m_beginDate == QDate::currentDate()) { painter.save(); painter.setFont(font); painter.setPen(m_currenttimecolor); QString str = QTime::currentTime().toString(m_timeFormat); if (m_topMargin - 8 + m_vPos[m_vPos.count() - 1] >= m_topMargin) painter.drawText(QRect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[m_vPos.count() - 1], hourTextWidth + 2, hourTextHeight), Qt::AlignCenter, str); painter.restore(); } } } painter.save(); QFont alldayfont; alldayfont.setWeight(QFont::Medium); alldayfont.setPixelSize(DDECalendar::FontSizeFourteen); painter.setFont(alldayfont); painter.setPen(m_ALLDayColor); painter.drawText(QRect(0, 0, m_leftMargin - 2, m_topMargin - 2), Qt::AlignCenter, tr("ALL DAY")); painter.restore(); //绘制全天与非全天之间的直线 painter.save(); painter.setPen(Qt::NoPen); //分割线y坐标点 const int point_y = m_alldaylist->height() + m_alldaylist->y(); //设置间隔线颜色 painter.setBrush(m_linecolor); //绘制间隔线矩阵 painter.drawRect(QRectF(0, point_y, this->width() - m_rightMargin - 2, 1)); painter.restore(); if (m_viewPos == ScheduleViewPos::WeekPos) { //如果为周视图绘制右侧背景色(否则会有一个竖线的白色背景,不协调) painter.setPen(Qt::NoPen); painter.setBrush(m_outerBorderColor); painter.drawRect(QRectF(this->width() - 1, 0, this->width(), this->height())); //绘制个三角遮住左上角圆角 QPainterPath path; path.moveTo(0,0); path.lineTo(m_radius, 0); path.lineTo(0, m_radius); path.lineTo(0, 0); painter.fillPath(path, palette().color(backgroundRole())); } } void CScheduleView::resizeEvent(QResizeEvent *event) { if (m_viewPos == ScheduleViewPos::WeekPos) { m_sMaxNum = ((width() - m_leftMargin) / 7) / 27; if (m_sMaxNum < 4) { m_sMaxNum = 4; } } m_graphicsView->setMaxNum(m_sMaxNum); m_graphicsView->setRange(width() - m_leftMargin, scheduleViewHeight(), m_beginDate, m_endDate, m_rightMargin); m_alldaylist->setRange(width() - m_leftMargin, 22, m_beginDate, m_endDate, m_rightMargin); update(); QFrame::resizeEvent(event); updateAllday(); m_graphicsView->updateInfo(); m_graphicsView->keepCenterOnScene(); } void CScheduleView::wheelEvent(QWheelEvent *e) { if (e->angleDelta().x() != 0) { emit signalAngleDelta(e->angleDelta().x()); } } bool CScheduleView::event(QEvent *e) { if (m_touchGesture.event(e)) { //获取触摸状态 switch (m_touchGesture.getTouchState()) { case touchGestureOperation::T_SLIDE: { //在滑动状态如果可以更新数据则切换月份 if (m_touchGesture.isUpdate()) { m_touchGesture.setUpdate(false); switch (m_touchGesture.getMovingDir()) { case touchGestureOperation::T_LEFT: emit signalAngleDelta(-1); break; case touchGestureOperation::T_RIGHT: emit signalAngleDelta(1); break; default: break; } } break; } default: break; } return true; } else { return DFrame::event(e); } } void CScheduleView::initUI() { m_layout = new QVBoxLayout; m_layout->setSpacing(0); m_layout->setMargin(0); m_alldaylist = new CAllDayEventWeekView(this, m_viewPos); m_layout->addWidget(m_alldaylist); m_layout->addSpacing(1); m_graphicsView = new CGraphicsView(this, m_viewPos); const int miniHeight = m_viewPos == ScheduleViewPos::WeekPos ? 300 : 380; m_graphicsView->setMinimumHeight(miniHeight); connect(m_graphicsView, SIGNAL(signalsPosHours(QVector, QVector, int)), this, SLOT(slotPosHours(QVector, QVector, int))); m_layout->addWidget(m_graphicsView); setLayout(m_layout); m_graphicsView->scrollBarValueChangedSlot(); m_ScheduleRemindWidget = new ScheduleRemindWidget(this); // move focus to m_graphicsView setFocusProxy(m_graphicsView); } void CScheduleView::initConnection() { connect(m_graphicsView, &CGraphicsView::signalsUpdateSchedule, this, &CScheduleView::slotupdateSchedule); connect(m_alldaylist, &CAllDayEventWeekView::signalsUpdateSchedule, this, &CScheduleView::slotupdateSchedule); connect(m_graphicsView, &CGraphicsView::signalsCurrentScheduleDate, this, &CScheduleView::slotCurrentScheduleDate); connect(m_graphicsView, &CGraphicsView::signalGotoDayView, this, &CScheduleView::slotCurrentScheduleDate); //切换前后时间信号关联 connect(m_graphicsView, &CAllDayEventWeekView::signalAngleDelta, this, &CScheduleView::signalAngleDelta); connect(m_alldaylist, &CAllDayEventWeekView::signalAngleDelta, this, &CScheduleView::signalAngleDelta); connect(m_graphicsView, &CGraphicsView::signalScheduleShow, this, &CScheduleView::slotScheduleShow); connect(m_alldaylist, &CAllDayEventWeekView::signalScheduleShow, this, &CScheduleView::slotScheduleShow); connect(m_alldaylist, &CAllDayEventWeekView::signalUpdatePaint, this, &CScheduleView::slotUpdatePaint); connect(m_alldaylist, &CAllDayEventWeekView::signalSceneUpdate, this, &CScheduleView::slotUpdateScene); connect(m_graphicsView, &CGraphicsView::signalSceneUpdate, this, &CScheduleView::slotUpdateScene); connect(m_alldaylist, &CAllDayEventWeekView::signaleSwitchToView, this, &CScheduleView::slotSwitchView); connect(m_graphicsView, &CGraphicsView::signaleSwitchToView, this, &CScheduleView::slotSwitchView); connect(m_alldaylist, &CAllDayEventWeekView::signalViewFocusInit, m_graphicsView, &CGraphicsView::slotViewInit); connect(m_alldaylist, &CAllDayEventWeekView::signalSwitchPrePage, this, &CScheduleView::signalSwitchPrePage); connect(m_alldaylist, &CAllDayEventWeekView::signalSwitchNextPage, this, &CScheduleView::signalSwitchNextPage); connect(m_graphicsView, &CAllDayEventWeekView::signalSwitchPrePage, this, &CScheduleView::signalSwitchPrePage); connect(m_graphicsView, &CAllDayEventWeekView::signalSwitchNextPage, this, &CScheduleView::signalSwitchNextPage); } /** * @brief CScheduleView::slotDeleteitem 快捷键删除日程 */ void CScheduleView::slotDeleteitem() { //"delete"快捷键删除日程,因为只有一个点击选中日程所以全天或非全天只需要有一个删除就可以了 m_graphicsView->slotDeleteItem(); //因添加了对焦点选中item的快捷删除,添加对全天选中日程的删除 m_alldaylist->slotDeleteItem(); } void CScheduleView::slotCurrentScheduleDate(QDate date) { if (m_viewPos == ScheduleViewPos::DayPos) return; emit signalsCurrentScheduleDate(date); } void CScheduleView::slotScheduleShow(const bool isShow, const DSchedule::Ptr &out) { if (isShow) { QVariant variant; CalendarGlobalEnv::getGlobalEnv()->getValueByKey(DDECalendar::CursorPointKey, variant); QPoint pos22 = variant.value(); //根据日程类型获取颜色 CSchedulesColor gdColor = CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType( out->scheduleTypeID()); QDesktopWidget *w = QApplication::desktop(); m_ScheduleRemindWidget->setData(out, gdColor); if ((pos22.x() + m_ScheduleRemindWidget->width() + 15) > w->width()) { m_ScheduleRemindWidget->setDirection(DArrowRectangle::ArrowRight); m_ScheduleRemindWidget->show(pos22.x() - 15, pos22.y()); } else { m_ScheduleRemindWidget->setDirection(DArrowRectangle::ArrowLeft); m_ScheduleRemindWidget->show(pos22.x() + 15, pos22.y()); } } else { m_ScheduleRemindWidget->hide(); } } void CScheduleView::slotUpdatePaint(const int topM) { m_topMargin = topM; update(); } void CScheduleView::slotUpdateScene() { m_graphicsView->slotUpdateScene(); m_alldaylist->slotUpdateScene(); } /** * @brief CScheduleView::slotSwitchView 焦点切换到某个视图 * @param viewtype */ void CScheduleView::slotSwitchView(const QDate &focusDate, CWeekDayGraphicsview::ViewType viewtype, bool setItemFocus) { if (viewtype == CWeekDayGraphicsview::ALLDayView) { m_alldaylist->setCurrentFocusItem(focusDate, setItemFocus); m_alldaylist->setFocus(Qt::TabFocusReason); } else { m_graphicsView->setCurrentFocusItem(focusDate, setItemFocus); m_graphicsView->setFocus(Qt::TabFocusReason); } } /** * @brief CScheduleView::updateSchedule 更新日程显示 */ void CScheduleView::updateSchedule() { //获取一个月的日程信息 m_graphicsView->clearSchedule(); DSchedule::List allInfo; DSchedule::List nonAllInfo; QMap::const_iterator _iterator = m_showSchedule.constBegin(); for (; _iterator != m_showSchedule.constEnd(); ++_iterator) { for (int i = 0; i < _iterator->size(); ++i) { if (_iterator.value().at(i)->allDay()) { //过滤 if (!allInfo.contains(_iterator.value().at(i))) { allInfo.append(_iterator.value().at(i)); } } else { //过滤 if (!nonAllInfo.contains(_iterator.value().at(i))) { nonAllInfo.append(_iterator.value().at(i)); } } } } m_alldaylist->setInfo(allInfo); m_graphicsView->setInfo(nonAllInfo); updateAllday(); m_graphicsView->updateInfo(); m_graphicsView->update(); m_graphicsView->scene()->update(); } void CScheduleView::updateAllday() { m_alldaylist->updateInfo(); update(); m_graphicsView->resize(m_graphicsView->width(), this->height() - m_alldaylist->height()); } int CScheduleView::scheduleViewHeight() { qreal mHeight = 0; if (m_viewPos == ScheduleViewPos::DayPos) { mHeight = 24 * (0.0968 * height() + 0.5); } else { mHeight = 24 * (0.083 * height() + 0.5); } //现在最小高度为20; mHeight = mHeight < 500 ? 1035 : mHeight; int m_minTime = qRound((20.0 / mHeight) * 86400); m_graphicsView->setMinTime(m_minTime); return qRound(mHeight); } dde-calendar-5.14.13/calendar-client/src/customWidget/scheduleview.h000066400000000000000000000067161473346337000253460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEVIEW_H #define SCHEDULEVIEW_H #include "dschedule.h" #include "scheduleRemindWidget.h" #include "../widget/touchgestureoperation.h" #include "graphicsview.h" #include #include DWIDGET_USE_NAMESPACE #define ScheduleViewPos CWeekDayGraphicsview::ViewPosition class CAllDayEventWeekView; class QVBoxLayout; class CScheduleView : public DFrame { Q_OBJECT public: CScheduleView(QWidget *parent = nullptr, ScheduleViewPos viewType = ScheduleViewPos::WeekPos); ~CScheduleView() override; void setviewMargin(int left, int top, int right, int bottom); void setRange(int w, int h, QDate begin, QDate end); void setRange(QDate begin, QDate end); void setTheMe(int type = 0); void setLunarVisible(bool state); void setTime(QTime time); void setSelectSchedule(const DSchedule::Ptr &scheduleInfo); void updateHeight(); bool IsDragging(); void setCurrentDate(const QDateTime ¤tDate); //设置显示日程 void setShowScheduleInfo(const QMap &scheduleInfo); void setTimeFormat(QString timeformat); signals: void signalsCurrentScheduleDate(QDate date); /** * @brief signalAngleDelta 发送滚动信号滚动相对量 * @param delta 滚动相对量 */ void signalAngleDelta(int delta); void signalSwitchPrePage(); void signalSwitchNextPage(); public slots: void slotPosHours(QVector vPos, QVector vHours, int currentTimeType = 0); void setDate(QDate date); void slotupdateSchedule(); //快捷键删除日程 void slotDeleteitem(); void slotCurrentScheduleDate(QDate date); void slotScheduleShow(const bool isShow, const DSchedule::Ptr &out = DSchedule::Ptr()); void slotUpdatePaint(const int topM); void slotUpdateScene(); //焦点切换到某个视图 void slotSwitchView(const QDate &focusDate, CWeekDayGraphicsview::ViewType viewtype, bool setItemFocus); protected: void paintEvent(QPaintEvent *event) override; void resizeEvent(QResizeEvent *event) override; void wheelEvent(QWheelEvent *e) override; bool event(QEvent *e) override; private: void initUI(); void initConnection(); void updateSchedule(); void updateAllday(); int scheduleViewHeight(); private: CGraphicsView *m_graphicsView = nullptr; QVector m_vPos; QVector m_vHours; CAllDayEventWeekView *m_alldaylist = nullptr; QMap m_showSchedule {}; int m_leftMargin; int m_topMargin; int m_rightMargin = 0; qint64 m_TotalDay; QDate m_currteDate; QDate m_beginDate; QDate m_endDate; // 0: 周 1:日 // int m_viewType = 0; ScheduleViewPos m_viewPos; int m_sMaxNum = 4; QColor m_linecolor = Qt::lightGray; QColor m_ALLDayColor = "#303030"; QColor m_timeColor = "#7D7D7D"; QColor m_currenttimecolor = "#F74444"; int m_currentTimeType = 0; QVBoxLayout *m_layout = nullptr; ScheduleRemindWidget *m_ScheduleRemindWidget = nullptr; int m_minTime; //最小高度对应的最小时间 QFont font; const int m_radius = 8; /** * @brief m_touchGesture 触摸手势处理 */ touchGestureOperation m_touchGesture; QColor m_outerBorderColor; //外边框背景色 QString m_timeFormat; }; #endif // SCHEDULEVIEW_H dde-calendar-5.14.13/calendar-client/src/customWidget/timeedit.cpp000066400000000000000000000166211473346337000250120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "timeedit.h" #include #include #include #include #include #include "calendarmanage.h" //视图容器最大高度 const int viewContainerMaxHeight = 305; CTimeEdit::CTimeEdit(QWidget *parent) : DComboBox(parent) , m_timeFormat(CalendarManager::getInstance()->getTimeFormat()) , m_timeEdit(new CCustomTimeEdit()) , m_hasFocus(false) , m_miniTime(QTime(0, 0, 0)) { initUI(); initConnection(); } CTimeEdit::~CTimeEdit() { delete m_timeEdit; } void CTimeEdit::setMineTime(const QTime &mineTime) { m_miniTime = mineTime; } void CTimeEdit::setTime(const QTime &time) { m_time = time; setSelectItem(m_time); m_timeEdit->getLineEdit()->setText(time.toString(m_timeFormat)); } QTime CTimeEdit::getTime() { //获取显示的text QString timetext = m_timeEdit->getLineEdit()->displayText(); //将text转换为时间 m_time = QTime::fromString(timetext, m_timeFormat); return m_time; } void CTimeEdit::updateListItem(bool isShowTimeInterval) { m_isShowTimeInterval = isShowTimeInterval; QTime topTimer(m_miniTime); if (!m_isShowTimeInterval) { // 根据开始时间的分钟数设置结束时间下拉列表的分钟数,当前默认为0,故先注释 // int m = m_miniTime.minute() >= 30 ? m_miniTime.minute() - 30 : m_miniTime.minute(); int m = 0; topTimer = QTime(0, m); } //清除列表 clear(); for (int i = 0; i < 48; ++i) { qreal timeInterval = i * 0.5; QString timeIntervalStr; if (m_isShowTimeInterval) { if (timeInterval < 1) { timeIntervalStr = tr("(%1 mins)").arg(i * 30); } else if (qFuzzyCompare(timeInterval, 1)) { timeIntervalStr = tr("(%1 hour)").arg(timeInterval); } else { timeIntervalStr = tr("(%1 hours)").arg(timeInterval); } } else { timeIntervalStr = ""; } QString userData = topTimer.addSecs(i * 30 * 60).toString(m_timeFormat); QString showStr = userData + timeIntervalStr; addItem(showStr, userData); } } void CTimeEdit::setTimeFormat(int value) { //获取edit的当前时间 QTime editCurrentTime = getTime(); //根据value值,设置时间显示格式 if (value) { m_timeFormat = "hh:mm"; } else { m_timeFormat = "h:mm"; } //先更新列表信息,更新列表信息后再设置编辑框显示时间 updateListItem(m_isShowTimeInterval); m_timeEdit->setDisplayFormat(m_timeFormat); //设置改变格式后的时间 setTime(editCurrentTime); } void CTimeEdit::slotFocusDraw(bool showFocus) { m_hasFocus = showFocus; update(); } void CTimeEdit::setSelectItem(const QTime &time) { //若有则设置选中,若没有则取消选中设置定位到相近值附近 int similarNumber = -1; int diff = 24 * 60 * 60 * 1000; for (int i = 0 ; i < count(); ++i) { QVariant &&userData = itemData(i); QTime &&listTime = QTime::fromString(userData.toString(), m_timeFormat); int &&timeDiff = qAbs(listTime.msecsTo(time)); //获取时间差较小的值 //如果时间小于第一项的时间则不算统计, //比如 第一项时间位01:00 比对时间为00:59,时间差应该为23:59 而不是00:01,所以应该定位到最后一项 if (timeDiff < diff && (!(time < listTime && 0 == i))) { diff = timeDiff; similarNumber = i; } } if (diff == 0) { setCurrentIndex(similarNumber); } else { setCurrentIndex(-1); } scrollPosition = this->model()->index(similarNumber, 0); } void CTimeEdit::slotSetPlainText(const QString &arg) { QString userData = currentData().toString(); if (userData.isEmpty()) { this->lineEdit()->setText(arg); } else { this->lineEdit()->setText(userData); } } void CTimeEdit::slotActivated(const QString &arg) { slotSetPlainText(arg); emit signaleditingFinished(); } void CTimeEdit::slotEditingFinished() { setTime(m_timeEdit->time()); emit signaleditingFinished(); } void CTimeEdit::initUI() { //关闭自动补全 this->setCompleter(nullptr); //设置edit的宽度 m_timeEdit->getLineEdit()->setFixedWidth(100); m_timeEdit->setDisplayFormat(m_timeFormat); updateListItem(m_isShowTimeInterval); setLineEdit(m_timeEdit->getLineEdit()); m_timeEdit->setParent(this); setInsertPolicy(QComboBox::NoInsert); } void CTimeEdit::initConnection() { connect(CalendarManager::getInstance(), &CalendarManager::signalTimeFormatChanged, this, &CTimeEdit::setTimeFormat); connect(m_timeEdit, &CCustomTimeEdit::signalUpdateFocus, this, &CTimeEdit::slotFocusDraw); connect(m_timeEdit->getLineEdit(), &QLineEdit::editingFinished, this, &CTimeEdit::slotEditingFinished); connect(this, &CTimeEdit::textActivated, this, &CTimeEdit::slotActivated); } void CTimeEdit::showPopup() { DComboBox::showPopup(); //获取下拉视图容器 QFrame *viewContainer = this->findChild(); if (viewContainer) { //移动前先隐藏 viewContainer->hide(); //如果显示视图容器则设置高度 viewContainer->setFixedHeight(viewContainerMaxHeight); //设置最大高度 viewContainer->setMaximumHeight(viewContainerMaxHeight + 1); //获取combobox底部坐标 QPoint showPoint = mapToGlobal(this->rect().bottomLeft()); //控制视图容器宽度 ,根据字体大小调整宽度 int maxLen = 0; QFontMetrics fontMet(view()->font()); for (int i = 0 ; i < count() ; ++i) { int &&itemWidth = fontMet.horizontalAdvance(this->itemText(i)); maxLen = qMax(maxLen, itemWidth); } maxLen += 45; //选项前√占用的大小 //如果宽度小于box宽度则设置位box宽度 maxLen = qMax(maxLen, this->width()); viewContainer->setFixedWidth(maxLen); //将视图容器移动到combobox的底部 viewContainer->move(showPoint.x(), showPoint.y()); //显示 viewContainer->show(); } //因改变了容器的高度,所以需要重新定位当前位置 if (this->view()->currentIndex() == scrollPosition) { this->view()->scrollTo(scrollPosition, QAbstractItemView::PositionAtCenter); } else { this->view()->scrollTo(scrollPosition, QAbstractItemView::PositionAtTop); } } void CTimeEdit::focusInEvent(QFocusEvent *event) { DComboBox::focusInEvent(event); // 如果为tab焦点进入则选中时间 if (event->reason() == Qt::TabFocusReason) { lineEdit()->setFocus(Qt::TabFocusReason); } } void CTimeEdit::paintEvent(QPaintEvent *e) { DComboBox::paintEvent(e); //如果有焦点则设置焦点显示效果 if (m_hasFocus) { QPainter painter(this); QStyleOptionFocusRect option; option.initFrom(this); option.backgroundColor = palette().color(QPalette::Background); style()->drawPrimitive(QStyle::PE_FrameFocusRect, &option, &painter, this); } } void CTimeEdit::resizeEvent(QResizeEvent *e) { DComboBox::resizeEvent(e); m_timeEdit->setFixedHeight(this->height()); } dde-calendar-5.14.13/calendar-client/src/customWidget/timeedit.h000066400000000000000000000043171473346337000244560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #pragma once #include "ccustomtimeedit.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE class CTimeEdit : public DComboBox { Q_OBJECT public: explicit CTimeEdit(QWidget *parent = nullptr); ~CTimeEdit() override; /** * @brief setMineTime 设置下拉列表顶端时间 * @param mineTime */ void setMineTime(const QTime &mineTime); /** * @brief setTime 设置显示时间 * @param time */ void setTime(const QTime &time); /** * @brief getTime 获取时间 * @return */ QTime getTime(); /** * @brief updateListItem 更新列表项 * @param isShowTimeInterval 是否显示时间间隔 */ void updateListItem(bool isShowTimeInterval = false); /** * @brief setSelectItem 设置选中项目和scroll定位位置 * @param time */ void setSelectItem(const QTime &time); public slots: void setTimeFormat(int value); //焦点获取效果绘制 void slotFocusDraw(bool showFocus); /** * @brief slotSetPlainText 设置当前编辑框显示文本 * @param arg */ void slotSetPlainText(const QString &arg); /** * @brief slotActivated Combobox选择项处理槽 * @param arg */ void slotActivated(const QString &arg); /** * @brief slotEditingFinished 编辑框编辑结束时,处理槽 */ void slotEditingFinished(); signals: void signalFocusOut(); void signaleditingFinished(); private: void initUI(); void initConnection(); protected: void showPopup() override; void focusInEvent(QFocusEvent *event) override; void paintEvent(QPaintEvent *e) override; void resizeEvent(QResizeEvent *e) override; private: QString m_timeFormat = "hh:mm"; QTime m_time; CCustomTimeEdit *m_timeEdit = nullptr; bool m_hasFocus; QTime m_miniTime; bool m_isShowTimeInterval = false; QModelIndex scrollPosition; //下拉列表需要滚动到的位置 }; dde-calendar-5.14.13/calendar-client/src/customWidget/todaybutton.cpp000066400000000000000000000010311473346337000255470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "todaybutton.h" #include "constants.h" #include #include #include DGUI_USE_NAMESPACE CTodayButton::CTodayButton(QWidget *parent) : DPushButton(parent) { } void CTodayButton::keyPressEvent(QKeyEvent *event) { //添加回车点击效果处理 if (event->key() == Qt::Key_Return) { click(); } DPushButton::keyPressEvent(event); } dde-calendar-5.14.13/calendar-client/src/customWidget/todaybutton.h000066400000000000000000000006621473346337000252250ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TODYBUTTON_H #define TODYBUTTON_H #include DWIDGET_USE_NAMESPACE class CTodayButton : public DPushButton { Q_OBJECT public: explicit CTodayButton(QWidget *parent = nullptr); protected: void keyPressEvent(QKeyEvent *event) override; private: }; #endif // TODYBUTTON_H dde-calendar-5.14.13/calendar-client/src/dataManage/000077500000000000000000000000001473346337000220405ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/dataManage/accountitem.cpp000066400000000000000000000323221473346337000250610ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "accountitem.h" #include "doanetworkdbus.h" AccountItem::AccountItem(const DAccount::Ptr &account, QObject *parent) : QObject(parent) , m_account(account) , m_dbusRequest(new DbusAccountRequest(account->dbusPath(), account->dbusInterface(), this)) { initConnect(); } void AccountItem::initConnect() { connect(m_dbusRequest, &DbusAccountRequest::signalGetAccountInfoFinish, this, &AccountItem::slotGetAccountInfoFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetScheduleTypeListFinish, this, &AccountItem::slotGetScheduleTypeListFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetScheduleListFinish, this, &AccountItem::slotGetScheduleListFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetSysColorsFinish, this, &AccountItem::slotGetSysColorsFinish); connect(m_dbusRequest, &DbusAccountRequest::signalSearchScheduleListFinish, this, &AccountItem::slotSearchScheduleListFinish); connect(m_dbusRequest, &DbusAccountRequest::signalDtLastUpdate, this, &AccountItem::signalDtLastUpdate); connect(m_dbusRequest, &DbusAccountRequest::signalAccountStateChange, this, &AccountItem::signalAccountStateChange); connect(m_dbusRequest, &DbusAccountRequest::signalSyncStateChange, this, &AccountItem::slotSyncStateChange); connect(m_dbusRequest, &DbusAccountRequest::signalAccountStateChange, this, &AccountItem::slotAccountStateChange); connect(m_dbusRequest, &DbusAccountRequest::signalSearchUpdate, this, &AccountItem::slotSearchUpdata); } /** * @brief AccountItem::getSyncMsg * 同步状态码转状态说明 * @param code 状态码 * @return */ QString AccountItem::getSyncMsg(DAccount::AccountSyncState code) { QString msg = ""; switch (code) { case DAccount::Sync_Normal: msg = tr("Sync successful"); break; case DAccount::Sync_NetworkAnomaly: msg = tr("Network error"); break; case DAccount::Sync_ServerException: msg = tr("Server exception"); break; case DAccount::Sync_StorageFull: msg = tr("Storage full"); break; } return msg; } /** * @brief AccountItem::resetAccount * 重新获取帐户相关数据 */ void AccountItem::resetAccount() { querySchedulesWithParameter(QDate().currentDate().year()); m_dbusRequest->getScheduleTypeList(); m_dbusRequest->getSysColors(); } /** * @brief AccountItem::getAccount * 获取帐户数据 * @return */ DAccount::Ptr AccountItem::getAccount() { return m_account; } //获取日程 QMap AccountItem::getScheduleMap() { return m_scheduleMap; } QMap AccountItem::getSearchScheduleMap() { return m_searchedScheduleMap; } /** * @brief getScheduleTypeList 获取日程类型信息集 * @return */ DScheduleType::List AccountItem::getScheduleTypeList() { DScheduleType::List list; for (DScheduleType::Ptr p : m_scheduleTypeList) { if (p->privilege() != DScheduleType::None) { list.push_back(p); } } return list; } //根据类型ID获取日程类型 DScheduleType::Ptr AccountItem::getScheduleTypeByID(const QString &typeID) { for (DScheduleType::Ptr p : m_scheduleTypeList) { if (p->typeID() == typeID) { return p; } } return nullptr; } DScheduleType::Ptr AccountItem::getScheduleTypeByName(const QString &typeName) { for (DScheduleType::Ptr p : m_scheduleTypeList) { if (p->typeName() == typeName || p->displayName() == typeName) { return p; } } return nullptr; } DTypeColor::List AccountItem::getColorTypeList() { return m_typeColorList; } /** * @brief AccountItem::isCanSyncShedule * 获取日程是否可以同步 * @return */ bool AccountItem::isCanSyncShedule() { if (getAccount()->accountType() != DAccount::Account_UnionID) { return true; } DOANetWorkDBus netManger; return getAccount()->accountState().testFlag(DAccount::Account_Calendar) && getAccount()->accountState().testFlag(DAccount::Account_Open) && netManger.getNetWorkState() == DOANetWorkDBus::Active; } /** * @brief AccountItem::isCanSyncSetting * 获取通用设置是否可以同步 * @return */ bool AccountItem::isCanSyncSetting() { if (!getAccount().isNull() && getAccount()->accountType() != DAccount::Account_UnionID) { return true; } DOANetWorkDBus netManger; return getAccount()->accountState().testFlag(DAccount::Account_Setting) && getAccount()->accountState().testFlag(DAccount::Account_Open) && netManger.getNetWorkState() == DOANetWorkDBus::Active; } bool AccountItem::isEnableForUosAccount() { if (getAccount()->accountType() != DAccount::Account_UnionID) { return false; } DOANetWorkDBus netManger; return getAccount()->accountState().testFlag(DAccount::Account_Open) && netManger.getNetWorkState() == DOANetWorkDBus::Active; } /** * @brief AccountItem::setAccountExpandStatus * 更新帐户列表展开状态 * @param expandStatus 展开状态 */ void AccountItem::setAccountExpandStatus(bool expandStatus) { m_account->setIsExpandDisplay(expandStatus); m_dbusRequest->setAccountExpandStatus(expandStatus); } void AccountItem::setAccountState(DAccount::AccountStates state) { m_account->setAccountState(state); m_dbusRequest->setAccountState(state); emit signalAccountStateChange(); } void AccountItem::setSyncFreq(DAccount::SyncFreqType freq) { m_account->setSyncFreq(freq); QString syncFreq = DAccount::syncFreqToJsonString(m_account); m_dbusRequest->setSyncFreq(syncFreq); } DAccount::AccountStates AccountItem::getAccountState() { return m_dbusRequest->getAccountState(); } bool AccountItem::getSyncState() { return m_dbusRequest->getSyncState(); } DAccount::SyncFreqType AccountItem::getSyncFreq() { QString syncFreq = m_dbusRequest->getSyncFreq(); DAccount::syncFreqFromJsonString(m_account, syncFreq); return m_account->syncFreq(); } /** * @brief AccountItem::createJobType * 创建日程类型 * @param typeInfo 日程类型数据 * @param callback */ void AccountItem::createJobType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); typeInfo->setPrivilege(DScheduleType::User); m_dbusRequest->createScheduleType(typeInfo); } /** * @brief AccountItem::updateScheduleType * 更新类型信息 * @param typeInfo 新的日程类型数据 * @param callback */ void AccountItem::updateScheduleType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->updateScheduleType(typeInfo); } /** * @brief AccountItem::updateScheduleTypeShowState * 更新类型显示状态 * @param scheduleInfo * @param callback */ void AccountItem::updateScheduleTypeShowState(const DScheduleType::Ptr &scheduleInfo, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->updateScheduleTypeShowState(scheduleInfo); } /** * @brief AccountItem::deleteScheduleTypeByID * 根据类型ID删除日程类型 * @param typeID 日程类型id * @param callback 回调函数 */ void AccountItem::deleteScheduleTypeByID(const QString &typeID, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->deleteScheduleTypeByID(typeID); } /** * @brief AccountItem::scheduleTypeIsUsed * 类型是否被日程使用 * @param typeID 日程类型id * @param callback 回调函数 */ bool AccountItem::scheduleTypeIsUsed(const QString &typeID) { return m_dbusRequest->scheduleTypeByUsed(typeID); } /** * @brief AccountItem::createSchedule * 创建日程 * @param scheduleInfo 日程数据 * @param callback 回调函数 */ void AccountItem::createSchedule(const DSchedule::Ptr &scheduleInfo, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->createSchedule(scheduleInfo); } /** * @brief AccountItem::updateSchedule * 更新日程 * @param scheduleInfo 新的日程数据 * @param callback 回调函数 */ void AccountItem::updateSchedule(const DSchedule::Ptr &scheduleInfo, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->updateSchedule(scheduleInfo); } DSchedule::Ptr AccountItem::getScheduleByScheduleID(const QString &scheduleID) { return m_dbusRequest->getScheduleByScheduleID(scheduleID); } /** * @brief AccountItem::deleteScheduleByID * 根据日程ID删除日程 * @param schedule ID日程id * @param callback 回调函数 */ void AccountItem::deleteScheduleByID(const QString &scheduleID, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->deleteScheduleByScheduleID(scheduleID); } /** * @brief AccountItem::deleteSchedulesByTypeID * 根据类型ID删除日程 * @param typeID 日程类型id * @param callback 回调函数 */ void AccountItem::deleteSchedulesByTypeID(const QString &typeID, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->deleteSchedulesByScheduleTypeID(typeID); } void AccountItem::querySchedulesWithParameter(const int year, CallbackFunc callback) { QDateTime start = QDateTime(QDate(year, 1, 1)); QDateTime end = QDateTime(QDate(year, 12, 31)); querySchedulesWithParameter(start, end, callback); } void AccountItem::querySchedulesWithParameter(const QDateTime &start, const QDateTime &end, CallbackFunc callback) { querySchedulesWithParameter("", start, end, callback); } void AccountItem::querySchedulesWithParameter(const QString &key, const QDateTime &start, const QDateTime &end, CallbackFunc callback) { DScheduleQueryPar::Ptr ptr; ptr.reset(new DScheduleQueryPar); ptr->setKey(key); ptr->setDtStart(start); ptr->setDtEnd(end); querySchedulesWithParameter(ptr, callback); } /** * @brief AccountItem::querySchedulesWithParameter * 根据查询条件查询数据 * @param params 查询条件 * @param callback 回调函数 */ void AccountItem::querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms, CallbackFunc callback) { m_preQuery = params; m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->querySchedulesWithParameter(params); } QString AccountItem::querySchedulesByExternal(const QString &key, const QDateTime &start, const QDateTime &end) { DScheduleQueryPar::Ptr ptr; ptr.reset(new DScheduleQueryPar); ptr->setKey(key); ptr->setDtStart(start); ptr->setDtEnd(end); QString json; m_dbusRequest->querySchedulesByExternal(ptr, json); return json; } bool AccountItem::querySchedulesByExternal(const QString &key, const QDateTime &start, const QDateTime &end, QMap &out) { DScheduleQueryPar::Ptr ptr; ptr.reset(new DScheduleQueryPar); ptr->setKey(key); ptr->setDtStart(start); ptr->setDtEnd(end); QString json; if (m_dbusRequest->querySchedulesByExternal(ptr, json)) { out = DSchedule::fromMapString(json); return true; } return false; } /** * @brief AccountItem::slotGetAccountInfoFinish * 获取帐户信息完成事件 * @param account 帐户数据 */ void AccountItem::slotGetAccountInfoFinish(DAccount::Ptr account) { m_account = account; emit signalAccountDataUpdate(); } /** * @brief AccountItem::slotGetScheduleTypeListFinish * 获取日程类型数据完成事件 * @param scheduleTypeList 日程类型数据 */ void AccountItem::slotGetScheduleTypeListFinish(DScheduleType::List scheduleTypeList) { m_scheduleTypeList = scheduleTypeList; emit signalScheduleTypeUpdate(); } /** * @brief AccountItem::slotGetScheduleListFinish * 获取日程数据完成事件 * @param map 日程数据 */ void AccountItem::slotGetScheduleListFinish(QMap map) { m_scheduleMap = map; emit signalScheduleUpdate(); } /** * @brief AccountItem::slotSearchScheduleListFinish * 搜索日程数据完成事件 * @param map 日程数据 */ void AccountItem::slotSearchScheduleListFinish(QMap map) { m_searchedScheduleMap = map; emit signalSearchScheduleUpdate(); } /** * @brief AccountItem::slotGetSysColorsFinish * 获取系统颜色完成事件 */ void AccountItem::slotGetSysColorsFinish(DTypeColor::List typeColorList) { m_typeColorList = typeColorList; } void AccountItem::slotAccountStateChange(DAccount::AccountStates state) { getAccount()->setAccountState(state); emit signalAccountStateChange(); } void AccountItem::slotSyncStateChange(DAccount::AccountSyncState state) { getAccount()->setSyncState(state); emit signalSyncStateChange(state); } QString AccountItem::getDtLastUpdate() { return m_dbusRequest->getDtLastUpdate(); } void AccountItem::slotSearchUpdata() { //如果存在查询则更新查询 if (nullptr != m_preQuery) { querySchedulesWithParameter(m_preQuery); } } void AccountItem::importSchedule(QString icsFilePath, QString typeID, bool cleanExists, CallbackFunc func) { m_dbusRequest->setCallbackFunc(func); m_dbusRequest->importSchedule(icsFilePath, typeID, cleanExists); } void AccountItem::exportSchedule(QString icsFilePath, QString typeID, CallbackFunc func) { m_dbusRequest->setCallbackFunc(func); m_dbusRequest->exportSchedule(icsFilePath, typeID); } dde-calendar-5.14.13/calendar-client/src/dataManage/accountitem.h000066400000000000000000000127471473346337000245370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCOUNTITEM_H #define ACCOUNTITEM_H #include "dbus/dbusaccountrequest.h" #include //单项帐户信息管理类 class AccountItem : public QObject { Q_OBJECT public: explicit AccountItem(const DAccount::Ptr &account, QObject *parent = nullptr); typedef QSharedPointer Ptr; //同步状态码转状态说明 static QString getSyncMsg(DAccount::AccountSyncState code); void resetAccount(); //获取帐户数据 DAccount::Ptr getAccount(); //获取日程 QMap getScheduleMap(); QMap getSearchScheduleMap(); // 获取日程类型信息集 DScheduleType::List getScheduleTypeList(); //根据类型ID获取日程类型 DScheduleType::Ptr getScheduleTypeByID(const QString &typeID); DScheduleType::Ptr getScheduleTypeByName(const QString &typeName); //获取颜色类型列表 DTypeColor::List getColorTypeList(); //获取日程是否可以同步 bool isCanSyncShedule(); //获取通用设置是否可以同步 bool isCanSyncSetting(); //获取uos账号是否enable bool isEnableForUosAccount(); //更新帐户列表展开状态 void setAccountExpandStatus(bool expandStatus); //设置帐号状态 void setAccountState(DAccount::AccountStates state); //设置同步频率 void setSyncFreq(DAccount::SyncFreqType freq); //获取帐号状态 DAccount::AccountStates getAccountState(); //获取同步状态 bool getSyncState(); //获取同步频率 DAccount::SyncFreqType getSyncFreq(); //创建日程类型 void createJobType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback = nullptr); //更新类型信息 void updateScheduleType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback = nullptr); //更新类型显示状态 void updateScheduleTypeShowState(const DScheduleType::Ptr &scheduleInfo, CallbackFunc callback = nullptr); //根据类型ID删除日程类型 void deleteScheduleTypeByID(const QString &typeID, CallbackFunc callback = nullptr); //类型是否被日程使用 bool scheduleTypeIsUsed(const QString &typeID); //创建日程 void createSchedule(const DSchedule::Ptr &scheduleInfo, CallbackFunc callback = nullptr); //更新日程 void updateSchedule(const DSchedule::Ptr &scheduleInfo, CallbackFunc callback = nullptr); //根据日程ID获取日程 DSchedule::Ptr getScheduleByScheduleID(const QString &scheduleID); //根据日程ID删除日程 void deleteScheduleByID(const QString &scheduleID, CallbackFunc callback = nullptr); //根据类型ID删除日程 void deleteSchedulesByTypeID(const QString &typeID, CallbackFunc callback = nullptr); //根据查询条件查询数据 void querySchedulesWithParameter(const int year, CallbackFunc callback = nullptr); void querySchedulesWithParameter(const QDateTime &start, const QDateTime &end, CallbackFunc callback = nullptr); void querySchedulesWithParameter(const QString &key, const QDateTime &start, const QDateTime &end, CallbackFunc callback = nullptr); void querySchedulesWithParameter(const DScheduleQueryPar::Ptr &, CallbackFunc callback = nullptr); //对外请求接口,同步 QString querySchedulesByExternal(const QString &key, const QDateTime &start, const QDateTime &end); bool querySchedulesByExternal(const QString &key, const QDateTime &start, const QDateTime &end, QMap& out); // 导入日程 void importSchedule(QString icsFilePath, QString TypeID, bool cleanExists, CallbackFunc func); // 导出日程 void exportSchedule(QString icsFilePath, QString TypeID, CallbackFunc func); signals: void signalAccountDataUpdate(); void signalScheduleUpdate(); void signalScheduleTypeUpdate(); void signalSearchScheduleUpdate(); void signalLogout(DAccount::Type); void signalDtLastUpdate(QString); void signalAccountStateChange(); void signalSyncStateChange(DAccount::AccountSyncState); public slots: //获取帐户信息完成事件 void slotGetAccountInfoFinish(DAccount::Ptr); //获取日程类型数据完成事件 void slotGetScheduleTypeListFinish(DScheduleType::List); //获取日程数据完成事件 void slotGetScheduleListFinish(QMap); //搜索日程数据完成事件 void slotSearchScheduleListFinish(QMap); //获取系统颜色完成 void slotGetSysColorsFinish(DTypeColor::List); //帐户状态改变事件 void slotAccountStateChange(DAccount::AccountStates); //同步状态改变事件 void slotSyncStateChange(DAccount::AccountSyncState); //获取最后一次同步时间 QString getDtLastUpdate(); void slotSearchUpdata(); private: void initConnect(); private: DAccount::Ptr m_account; //帐户数据 DScheduleType::List m_scheduleTypeList; //日程类型数据 DTypeColor::List m_typeColorList; //颜色数据 DbusAccountRequest *m_dbusRequest = nullptr; //dbus请求实例 //一年的日程信息 QMap m_scheduleMap{}; //搜索的日程信息 QMap m_searchedScheduleMap{}; QMap m_dataStatus; //数据状态 DScheduleQueryPar::Ptr m_preQuery = nullptr; //上一次查询 }; #endif // ACCOUNTITEM_H dde-calendar-5.14.13/calendar-client/src/dataManage/accountmanager.cpp000066400000000000000000000175351473346337000255460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "accountmanager.h" AccountManager *AccountManager::m_accountManager = nullptr; AccountManager::AccountManager(QObject *parent) : QObject(parent) , m_dbusRequest(new DbusAccountManagerRequest(this)) { initConnect(); m_dbusRequest->clientIsShow(true); m_isSupportUid = m_dbusRequest->getIsSupportUid(); } void AccountManager::initConnect() { connect(m_dbusRequest, &DbusAccountManagerRequest::signalGetAccountListFinish, this, &AccountManager::slotGetAccountListFinish); connect(m_dbusRequest, &DbusAccountManagerRequest::signalGetGeneralSettingsFinish, this, &AccountManager::slotGetGeneralSettingsFinish); } bool AccountManager::getIsSupportUid() const { return m_isSupportUid; } AccountManager::~AccountManager() { m_dbusRequest->clientIsShow(false); } AccountManager *AccountManager::getInstance() { static AccountManager m_accountManager; return &m_accountManager; } /** * @brief AccountManager::getAccountList * 获取帐户列表 * @return 帐户列表 */ QList AccountManager::getAccountList() { QList> accountList; if (nullptr != m_localAccountItem.data()) { accountList.append(m_localAccountItem); } if (nullptr != m_unionAccountItem.data()) { accountList.append(m_unionAccountItem); } return accountList; } /** * @brief AccountManager::getLocalAccountItem * 获取本地帐户 * @return */ AccountItem::Ptr AccountManager::getLocalAccountItem() { return m_localAccountItem; } /** * @brief AccountManager::getUnionAccountItem * 获取unionID帐户 * @return */ AccountItem::Ptr AccountManager::getUnionAccountItem() { return m_unionAccountItem; } DScheduleType::Ptr AccountManager::getScheduleTypeByScheduleTypeId(const QString &schduleTypeId) { DScheduleType::Ptr type = nullptr; for (AccountItem::Ptr p : gAccountManager->getAccountList()) { type = p->getScheduleTypeByID(schduleTypeId); if (nullptr != type) { break; } } return type; } AccountItem::Ptr AccountManager::getAccountItemByScheduleTypeId(const QString &schduleTypeId) { DScheduleType::Ptr type = getScheduleTypeByScheduleTypeId(schduleTypeId); if (nullptr == type) { return nullptr; } return getAccountItemByAccountId(type->accountID()); } AccountItem::Ptr AccountManager::getAccountItemByAccountId(const QString &accountId) { AccountItem::Ptr account = nullptr; for (AccountItem::Ptr p : gAccountManager->getAccountList()) { if (p->getAccount()->accountID() == accountId) { account = p; break; } } return account; } AccountItem::Ptr AccountManager::getAccountItemByAccountName(const QString &accountName) { AccountItem::Ptr account = nullptr; for (AccountItem::Ptr p : gAccountManager->getAccountList()) { if (p->getAccount()->accountName() == accountName) { account = p; break; } } return account; } DCalendarGeneralSettings::Ptr AccountManager::getGeneralSettings() { return m_settings; } /** * @brief AccountManager::resetAccount * 重置帐户信息 */ void AccountManager::resetAccount() { m_localAccountItem.clear(); m_unionAccountItem.clear(); m_dbusRequest->getAccountList(); m_dbusRequest->getCalendarGeneralSettings(); } /** * @brief AccountManager::downloadByAccountID * 根据帐户ID下拉数据 * @param accountID 帐户id * @param callback 回调函数 */ void AccountManager::downloadByAccountID(const QString &accountID, CallbackFunc callback) { emit signalSyncNum(); m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->downloadByAccountID(accountID); } /** * @brief AccountManager::uploadNetWorkAccountData * 更新网络帐户数据 * @param callback 回调函数 */ void AccountManager::uploadNetWorkAccountData(CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->uploadNetWorkAccountData(); } void AccountManager::setFirstDayofWeek(int value) { m_settings->setFirstDayOfWeek(static_cast(value)); m_dbusRequest->setFirstDayofWeek(value); } void AccountManager::setTimeFormatType(int value) { m_settings->setTimeShowType(static_cast(value)); m_dbusRequest->setTimeFormatType(value); } // 设置一周首日来源 void AccountManager::setFirstDayofWeekSource(DCalendarGeneralSettings::GeneralSettingSource value) { m_dbusRequest->setFirstDayofWeekSource(value); }; // 设置时间显示格式来源 void AccountManager::setTimeFormatTypeSource(DCalendarGeneralSettings::GeneralSettingSource value) { m_dbusRequest->setTimeFormatTypeSource(value); }; // 获取一周首日来源 DCalendarGeneralSettings::GeneralSettingSource AccountManager::getFirstDayofWeekSource() { return m_dbusRequest->getFirstDayofWeekSource(); }; // 获取时间显示格式来源 DCalendarGeneralSettings::GeneralSettingSource AccountManager::getTimeFormatTypeSource() { return m_dbusRequest->getTimeFormatTypeSource(); }; /** * @brief login * 帐户登录 */ void AccountManager::login() { m_dbusRequest->login(); } /** * @brief loginout * 帐户登出 */ void AccountManager::loginout() { m_dbusRequest->logout(); } /** * @brief AccountManager::slotGetAccountListFinish * 获取帐户信息完成事件 * @param accountList 帐户列表 */ void AccountManager::slotGetAccountListFinish(DAccount::List accountList) { bool hasUnionAccount = false; for (DAccount::Ptr account : accountList) { if (account->accountType() == DAccount::Account_Local) { QString localName = tr("Local account"); if (!gAccountManager->getIsSupportUid()) { localName = tr("Event types"); } account->setAccountName(localName); if (!m_localAccountItem) { m_localAccountItem.reset(new AccountItem(account, this)); } m_localAccountItem->resetAccount(); } else if (account->accountType() == DAccount::Account_UnionID) { hasUnionAccount = true; if (!m_unionAccountItem) { m_unionAccountItem.reset(new AccountItem(account, this)); m_unionAccountItem->resetAccount(); } else if (m_unionAccountItem && m_unionAccountItem->getAccount()->accountID() != account->accountID()) { emit m_unionAccountItem->signalLogout(m_unionAccountItem->getAccount()->accountType()); m_unionAccountItem.reset(new AccountItem(account, this)); m_unionAccountItem->resetAccount(); } } } if (!hasUnionAccount && m_unionAccountItem) { emit m_unionAccountItem->signalLogout(m_unionAccountItem->getAccount()->accountType()); m_unionAccountItem.reset(nullptr); } for (AccountItem::Ptr p : getAccountList()) { connect(p.data(), &AccountItem::signalScheduleUpdate, this, &AccountManager::signalScheduleUpdate); connect(p.data(), &AccountItem::signalSearchScheduleUpdate, this, &AccountManager::signalSearchScheduleUpdate); connect(p.data(), &AccountItem::signalScheduleTypeUpdate, this, &AccountManager::signalScheduleTypeUpdate); connect(p.data(), &AccountItem::signalLogout, this, &AccountManager::signalLogout); connect(p.data(), &AccountItem::signalAccountStateChange, this, &AccountManager::signalAccountStateChange); } emit signalAccountUpdate(); } /** * @brief AccountManager::slotGetGeneralSettingsFinish * 获取通用设置完成事件 * @param ptr 通用设置数据 */ void AccountManager::slotGetGeneralSettingsFinish(DCalendarGeneralSettings::Ptr ptr) { m_settings = ptr; emit signalDataInitFinished(); emit signalGeneralSettingsUpdate(); } dde-calendar-5.14.13/calendar-client/src/dataManage/accountmanager.h000066400000000000000000000061411473346337000252020ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCOUNTMANAGER_H #define ACCOUNTMANAGER_H #include "dbus/dbusaccountmanagerrequest.h" #include "accountitem.h" #include "dcalendargeneralsettings.h" //所有帐户管理类 class AccountManager : public QObject { Q_OBJECT public: ~AccountManager() override; static AccountManager *getInstance(); QList getAccountList(); AccountItem::Ptr getLocalAccountItem(); AccountItem::Ptr getUnionAccountItem(); DScheduleType::Ptr getScheduleTypeByScheduleTypeId(const QString &schduleTypeId); AccountItem::Ptr getAccountItemByScheduleTypeId(const QString &schduleTypeId); AccountItem::Ptr getAccountItemByAccountId(const QString &accountId); AccountItem::Ptr getAccountItemByAccountName(const QString &accountName); DCalendarGeneralSettings::Ptr getGeneralSettings(); //重新获取帐户信息 void resetAccount(); //根据帐户ID下拉数据 void downloadByAccountID(const QString &accountID, CallbackFunc callback = nullptr); //更新网络帐户数据 void uploadNetWorkAccountData(CallbackFunc callback = nullptr); //设置一周首日 void setFirstDayofWeek(int); //设置时间显示格式 void setTimeFormatType(int); // 设置一周首日来源 void setFirstDayofWeekSource(DCalendarGeneralSettings::GeneralSettingSource); // 设置时间显示格式来源 void setTimeFormatTypeSource(DCalendarGeneralSettings::GeneralSettingSource); // 获取一周首日来源 DCalendarGeneralSettings::GeneralSettingSource getFirstDayofWeekSource(); // 获取时间显示格式来源 DCalendarGeneralSettings::GeneralSettingSource getTimeFormatTypeSource(); //帐户登录 void login(); //帐户登出 void loginout(); bool getIsSupportUid() const; signals: void signalDataInitFinished(); void signalAccountUpdate(); void signalGeneralSettingsUpdate(); void signalAccountDataUpdate(); void signalScheduleUpdate(); void signalScheduleTypeUpdate(); void signalSearchScheduleUpdate(); void signalAccountStateChange(); //正在同步 void signalSyncNum(const int num = -1); //帐户登出信号 void signalLogout(DAccount::Type); public slots: //获取帐户信息完成事件 void slotGetAccountListFinish(DAccount::List accountList); //获取通用设置完成事件 void slotGetGeneralSettingsFinish(DCalendarGeneralSettings::Ptr ptr); protected: explicit AccountManager(QObject *parent = nullptr); private: void initConnect(); private: static AccountManager *m_accountManager; AccountItem::Ptr m_localAccountItem; AccountItem::Ptr m_unionAccountItem; DCalendarGeneralSettings::Ptr m_settings; DbusAccountManagerRequest *m_dbusRequest; bool m_isSupportUid = false; }; #define gAccountManager AccountManager::getInstance() #define gLocalAccountItem gAccountManager->getLocalAccountItem() #define gUosAccountItem gAccountManager->getUnionAccountItem() #endif // ACCOUNTMANAGER_H dde-calendar-5.14.13/calendar-client/src/dataManage/calendarmanage.cpp000066400000000000000000000246341473346337000254770ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calendarmanage.h" #include "cschedulebasewidget.h" #include "scheduledatamanage.h" #include const QString DBus_TimeDate_Name = "com.deepin.daemon.Timedate"; const QString DBus_TimeDate_Path = "/com/deepin/daemon/Timedate"; CalendarManager *CalendarManager::m_scheduleManager = nullptr; CalendarManager *CalendarManager::getInstance() { CaHuangLiDayInfo::registerMetaType(); if (m_scheduleManager == nullptr) { m_scheduleManager = new CalendarManager; qRegisterMetaType>("QMap"); qRegisterMetaType >("QMap"); qRegisterMetaType>("QMap"); } return m_scheduleManager; } void CalendarManager::releaseInstance() { if (m_scheduleManager != nullptr) { delete m_scheduleManager; m_scheduleManager = nullptr; } } //设置选择时间 void CalendarManager::setSelectDate(const QDate &selectDate, bool isSwitchYear) { m_selectDate = selectDate; if (isSwitchYear || m_showDateRange.startDate > m_selectDate || m_showDateRange.stopDate < m_selectDate) { //如果选择时间不在显示范围内则修改显示年份,开始和结束时间 setYearBeginAndEndDate(m_selectDate.year()); } } //获取选择时间 QDate CalendarManager::getSelectDate() const { return m_selectDate; } //设置当前时间 void CalendarManager::setCurrentDateTime(const QDateTime ¤tDateTime) { m_currentDateTime = currentDateTime; } //获取当前时间 QDateTime CalendarManager::getCurrentDate() const { return m_currentDateTime; } QVector CalendarManager::getMonthDate(const int &year, const int &month) { QVector _resultDate; //自然月的第一天 const QDate _monthFirstDay{year, month, 1}; //获取显示月的第一天 const QDate _firstShowDayOfMonth = getFirstDayOfWeek(_monthFirstDay); //获取该月所有显示时间 for (int i = 0; i < 42; ++i) { _resultDate.append(_firstShowDayOfMonth.addDays(i)); } return _resultDate; } QVector CalendarManager::getWeekDate(const QDate &date) { QVector _resultDate; //获取这个周的第一天日期 const QDate _firstDayofWeek = getFirstDayOfWeek(date); //获取该周所有显示时间 for (int i = 0; i < 7; ++i) { _resultDate.append(_firstDayofWeek.addDays(i)); } return _resultDate; } //设置周显示格式 void CalendarManager::setWeekDayFormatByID(const int &weekDayFormatID) { switch (weekDayFormatID) { case 0: m_weekDayFormat = "dddd"; break; default: m_weekDayFormat = "ddd"; break; } } //获取周显示格式 QString CalendarManager::getWeekDayFormat() const { return m_weekDayFormat; } //返回显示的年份,开始和结束时间 ShowDateRange CalendarManager::getShowDateRange() const { return m_showDateRange; } //根据日期获取当前周第一天的日期 QDate CalendarManager::getFirstDayOfWeek(const QDate &date) { //根据选择时间周工作日和每周第一天的周工作日得到偏移量 int _offset = date.dayOfWeek() - getFirstDayOfWeek(); //根据偏移量获取需要添加还有减去的偏移天数 const int _offsetDay = (_offset + 7) % 7; //返回这周第一天的日期 return date.addDays(-_offsetDay); } //根据日期获取该日期处于该年第多少周 int CalendarManager::getWeekNumOfYear(const QDate &date) { int _weekNum {0}; //获取选择时间所在周的最后一天 const QDate _laseDateInWeekBySelectDate = getInstance()->getFirstDayOfWeek(date).addDays(6); //该年第一天 const QDate _firstDayOfYear{_laseDateInWeekBySelectDate.year(), 1, 1}; //该年显示的第一天日期 const QDate _firstShowDayOfYear = getInstance()->getFirstDayOfWeek(_firstDayOfYear); //处于该年显示第多少天,0为第一天 const qint64 _dayOfShowYear = _firstShowDayOfYear.daysTo(_firstDayOfYear) + _laseDateInWeekBySelectDate.dayOfYear() - 1; _weekNum = qFloor(_dayOfShowYear / 7) + 1; return _weekNum; } void CalendarManager::setTimeFormatChanged(int value) { // value = 0/1,对应的时间格式不对 if (value == 0) { m_timeFormat = "h:mm"; } else { m_timeFormat = "hh:mm"; } updateData(); } void CalendarManager::setDateFormatChanged(int value) { switch (value) { case 0: { m_dateFormat = "yyyy/M/d"; } break; case 1: { m_dateFormat = "yyyy-M-d"; } break; case 2: { m_dateFormat = "yyyy.M.d"; } break; case 3: { m_dateFormat = "yyyy/MM/dd"; } break; case 4: { m_dateFormat = "yyyy-MM-dd"; } break; case 5: { m_dateFormat = "yyyy.MM.dd"; } break; case 6: { m_dateFormat = "yy/M/d"; } break; case 7: { m_dateFormat = "yy-M-d"; } break; case 8: { m_dateFormat = "yy.M.d"; } break; default: { m_dateFormat = "yyyy-MM-dd"; } break; } } QString CalendarManager::getTimeFormat() const { return m_timeFormat; } void CalendarManager::setTimeShowType(int value, bool update) { m_timeShowType = value; if (update) { updateData(); } } int CalendarManager::getTimeShowType() const { return m_timeShowType; } QString CalendarManager::getDateFormat() const { return m_dateFormat; } void CalendarManager::setYearBeginAndEndDate(const int year) { m_showDateRange.showYear = year; QDate _firstDayOfJan(year, 1, 1); m_showDateRange.startDate = getFirstDayOfWeek(_firstDayOfJan); QDate _firstDayOfDec(year, 12, 1); m_showDateRange.stopDate = getFirstDayOfWeek(_firstDayOfDec).addDays(42 - 1); //更新日程 gScheduleManager->resetSchedule(m_showDateRange.startDate.startOfDay(), m_showDateRange.stopDate.startOfDay()); if (m_showLunar) { //刷新农历和节假日信息 gLunarManager->queryLunarInfo(m_showDateRange.startDate, m_showDateRange.stopDate); gLunarManager->queryFestivalInfo(m_showDateRange.startDate, m_showDateRange.stopDate); } } /** * @brief CalendarManager::addShowWidget 添加显示界面 * @param showWidget */ void CalendarManager::addShowWidget(CScheduleBaseWidget *showWidget) { m_showWidget.append(showWidget); } /** * @brief CalendarManager::removeShowWidget 移除显示界面 * @param showWidget */ void CalendarManager::removeShowWidget(CScheduleBaseWidget *showWidget) { m_showWidget.removeOne(showWidget); } /** * @brief CalendarManager::getShowWidget 根据编号获取显示界面 * @param index * @return */ CScheduleBaseWidget *CalendarManager::getShowWidget(const int index) { if (index < 0 || index >= m_showWidget.size()) { return nullptr; } return m_showWidget.at(index); } /** * @brief CalendarManager::getShowWidgetSize 获取显示窗口的数目 * @return */ int CalendarManager::getShowWidgetSize() { return m_showWidget.size(); } /** * @brief CalendarManager::getShowLunar 获取农历信息 * @return */ bool CalendarManager::getShowLunar() const { return m_showLunar; } /** * @brief getFirstDayOfWeek * @return 一周首日 */ Qt::DayOfWeek CalendarManager::getFirstDayOfWeek() { return Qt::DayOfWeek(m_firstDayOfWeek); } void CalendarManager::setFirstDayOfWeek(int day, bool update) { m_firstDayOfWeek = day; //更新显示界面 if (update) { updateData(); } } void CalendarManager::updateData() { // 为了跟之前的代码一致,在这里发送信号出来; emit sigNotifySidebarFirstDayChanged(getFirstDayOfWeek()); for (int i = 0; i < m_showWidget.size(); ++i) { m_showWidget.at(i)->updateData(); } } CalendarManager::CalendarManager(QObject *parent) : QObject(parent) , m_timeDateDbus(new DaemonTimeDate(this)) , m_currentDateTime(QDateTime::currentDateTime()) , m_selectDate(m_currentDateTime.date()) , m_weekDayFormat("ddd") { initConnection(); initData(); } CalendarManager::~CalendarManager() { } /** * @brief CalendarManager::initData 初始化数据 */ void CalendarManager::initData() { //获取本地语言判断是否为中文 m_showLunar = QLocale::system().language() == QLocale::Chinese; //获取时间日期格式 const int _timeFormat = m_timeDateDbus->shortTimeFormat(); const int _dateFormat = m_timeDateDbus->shortDateFormat(); setYearBeginAndEndDate(m_selectDate.year()); //设置时间日期格式 setTimeFormatChanged(_timeFormat); setDateFormatChanged(_dateFormat); slotGeneralSettingsUpdate(); } /** * @brief CalendarManager::initConnection 初始化关联 */ void CalendarManager::initConnection() { connect(gAccountManager, &AccountManager::signalGeneralSettingsUpdate, this, &CalendarManager::slotGeneralSettingsUpdate); connect(m_timeDateDbus, &DaemonTimeDate::ShortTimeFormatChanged, this, &CalendarManager::signalTimeFormatChanged); connect(m_timeDateDbus, &DaemonTimeDate::ShortTimeFormatChanged, this, &CalendarManager::slotTimeFormatChanged); // add time format slot. connect(m_timeDateDbus, &DaemonTimeDate::ShortDateFormatChanged, this, &CalendarManager::slotDateFormatChanged); connect(m_timeDateDbus, &DaemonTimeDate::ShortDateFormatChanged, this, &CalendarManager::signalDateFormatChanged); } /** * @brief CalendarManager::WeekBeginsChanged 关联dbus信号,每周首日改变事触发 * @param value */ void CalendarManager::weekBeginsChanged(int value) { setFirstDayOfWeek(value); } /** * @brief CalendarManager::slotGetLunarSuccess 农历更新成功刷新界面 */ void CalendarManager::slotGetLunarSuccess() { //更新显示界面 for (int i = 0; i < m_showWidget.size(); ++i) { m_showWidget.at(i)->updateShowLunar(); } } void CalendarManager::slotGeneralSettingsUpdate() { DCalendarGeneralSettings::Ptr setting = gAccountManager->getGeneralSettings(); if (!setting) { return; } setFirstDayOfWeek(setting->firstDayOfWeek()); setTimeShowType(setting->timeShowType()); } /** * @brief CalendarManager::slotDateFormatChanged 更新日期显示格式 * @param value */ void CalendarManager::slotDateFormatChanged(int value) { setDateFormatChanged(value); } void CalendarManager::slotTimeFormatChanged(int value) { setTimeFormatChanged(value); } dde-calendar-5.14.13/calendar-client/src/dataManage/calendarmanage.h000066400000000000000000000077451473346337000251500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSCHEDULEMANAGE_H #define CSCHEDULEMANAGE_H #include "lunarmanager.h" #include "dbustimedate.h" #include struct ShowDateRange { int showYear{0}; QDate startDate; QDate stopDate; }; typedef DBusTimedate DaemonTimeDate; class CScheduleBaseWidget; /** * @brief The CalendarManage class * 日历数据管理类 */ class CalendarManager : public QObject { Q_OBJECT public: static CalendarManager *getInstance(); static void releaseInstance(); //设置选择时间 void setSelectDate(const QDate &selectDate, bool isSwitchYear = false); //获取选择时间 QDate getSelectDate() const; //设置当前时间 void setCurrentDateTime(const QDateTime ¤tDateTime = QDateTime::currentDateTime()); //获取当前时间 QDateTime getCurrentDate() const; //获取月份的所有时间 QVector getMonthDate(const int &year, const int &month); //获取一周的所有时间 QVector getWeekDate(const QDate &date); //设置周显示格式 void setWeekDayFormatByID(const int &weekDayFormatID); //获取周显示格式 QString getWeekDayFormat() const; //返回显示的年份,开始和结束时间 ShowDateRange getShowDateRange() const; //根据日期获取当前周第一天的日期 QDate getFirstDayOfWeek(const QDate &date); //根据日期获取该日期处于该年第多少周 static int getWeekNumOfYear(const QDate &date); void setTimeFormatChanged(int value); void setDateFormatChanged(int value); QString getTimeFormat() const; void setTimeShowType(int value, bool update = true); int getTimeShowType() const; QString getDateFormat() const; //添加显示界面 void addShowWidget(CScheduleBaseWidget *showWidget); //移除显示界面 void removeShowWidget(CScheduleBaseWidget *showWidget); //根据编号获取显示界面 CScheduleBaseWidget *getShowWidget(const int index); //获取显示窗口的数目 int getShowWidgetSize(); //获取是否显示农历信息 bool getShowLunar() const; //获取一周首日 Qt::DayOfWeek getFirstDayOfWeek(); //设置一周首日 void setFirstDayOfWeek(int, bool update = true); void updateData(); signals: void signalTimeFormatChanged(int value); void signalDateFormatChanged(int value); void sigNotifySidebarFirstDayChanged(int value); public slots: //关联dbus信号,每周首日改变事触发 void weekBeginsChanged(int value); //农历更新成功刷新界面 void slotGetLunarSuccess(); void slotGeneralSettingsUpdate(); void slotDateFormatChanged(int value); void slotTimeFormatChanged(int value); private: explicit CalendarManager(QObject *parent = nullptr); ~CalendarManager(); void setYearBeginAndEndDate(const int year); private: //初始化数据 void initData(); //初始化关联 void initConnection(); private: static CalendarManager *m_scheduleManager; DaemonTimeDate *m_timeDateDbus; //控制中心dbus QList m_showWidget; //日历主视图 bool m_showLunar; //显示农历 int m_firstDayOfWeek = Qt::Sunday; //一周首日 QDateTime m_currentDateTime; //当前时间 QDate m_selectDate; //当前选择的时间 QString m_weekDayFormat{"ddd"}; //周显示格式, ddd: 周一, dddd: 星期一 ShowDateRange m_showDateRange; //时间范围 QString m_timeFormat = "h:mm"; //时间显示格式 QString m_dateFormat = "yyyy-MM-dd"; //日期显示格式 int m_timeShowType = 0; }; #define gCalendarManager CalendarManager::getInstance() #endif // CSCHEDULEMANAGE_H dde-calendar-5.14.13/calendar-client/src/dataManage/lunarmanager.cpp000066400000000000000000000142251473346337000252240ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "lunarmanager.h" LunarManager::LunarManager(QObject *parent) : QObject(parent) , m_dbusRequest(new DbusHuangLiRequest) { } LunarManager* LunarManager::getInstace() { static LunarManager lunarManager; return &lunarManager; } /** * @brief LunarManager::getFestivalMonth * 按月获取节假日信息 * @param year 年 * @param month 月 * @param festivalInfo 数据保存位置 * @return */ bool LunarManager::getFestivalMonth(quint32 year, quint32 month, FestivalInfo& festivalInfo) { return m_dbusRequest->getFestivalMonth(year, month, festivalInfo); } /** * @brief LunarManager::getFestivalMonth * 按月获取节假日信息 * @param date 月所在日期 * @param festivalInfo 数据储存位置 * @return 请求成功状态 */ bool LunarManager::getFestivalMonth(const QDate &date, FestivalInfo& festivalInfo) { return m_dbusRequest->getFestivalMonth(quint32(date.year()), quint32(date.month()), festivalInfo); } /** * @brief LunarManager::getHuangLiDay * 按天获取黄历信息 * @param year 年 * @param month 月 * @param day 日 * @param info 数据储存位置 * @return 请求成功状态 */ bool LunarManager::getHuangLiDay(quint32 year, quint32 month, quint32 day, CaHuangLiDayInfo &info) { return m_dbusRequest->getHuangLiDay(year, month, day, info); } /** * @brief LunarManager::getHuangLiDay * 按天获取农历信息 * @param date 请求日期 * @param info 数据储存位置 * @return 请求成功状态 */ bool LunarManager::getHuangLiDay(const QDate &date, CaHuangLiDayInfo &info) { return getHuangLiDay(quint32(date.year()), quint32(date.month()), quint32(date.day()), info); } /** * @brief LunarManager::getHuangLiMonth * 按月获取农历信息 * @param year 年 * @param month 月 * @param info 日 * @param fill * @return 请求成功状态 */ bool LunarManager::getHuangLiMonth(quint32 year, quint32 month, CaHuangLiMonthInfo &info, bool fill) { return m_dbusRequest->getHuangLiMonth(year, month, fill, info); } /** * @brief LunarManager::getHuangLiMonth * 按月获取农历信息 * @param date 请求日期 * @param info 数据储存位置 * @return 请求成功状态 */ bool LunarManager::getHuangLiMonth(const QDate &date, CaHuangLiMonthInfo &info, bool fill) { return getHuangLiMonth(quint32(date.year()), quint32(date.month()), info, fill); } /** * @brief LunarManager::getHuangLiShortName * 获取当天的农历月日期和日日期名 * @param date 请求日期 * @return 农历名 */ QString LunarManager::getHuangLiShortName(const QDate &date) { CaHuangLiDayInfo info = getHuangLiDay(date); return info.mLunarMonthName + info.mLunarDayName; } /** * @brief LunarManager::queryLunarInfo * 查询农历信息 * @param startDate 开始时间 * @param stopDate 结束时间 */ void LunarManager::queryLunarInfo(const QDate &startDate, const QDate &stopDate) { QMap lunarInfoMap; CaHuangLiMonthInfo monthInfo; const int offsetMonth = (stopDate.year() - startDate.year()) * 12 + stopDate.month() - startDate.month(); //获取开始时间至结束时间所在月的农历和节假日信息 for (int i = 0; i <= offsetMonth; ++i) { monthInfo.clear(); QDate beginDate = startDate.addMonths(i); getHuangLiMonth(beginDate, monthInfo); QDate getDate(beginDate.year(), beginDate.month(), 1); for (int j = 0; j < monthInfo.mDays; ++j) { lunarInfoMap[getDate.addDays(j)] = monthInfo.mCaLunarDayInfo.at(j); } } m_lunarInfoMap = lunarInfoMap; } /** * @brief LunarManager::queryFestivalInfo * 查询节假日信息 * @param startDate 开始时间 * @param stopDate 结束时间 */ void LunarManager::queryFestivalInfo(const QDate &startDate, const QDate &stopDate) { QVector festivallist{}; const int offsetMonth = (stopDate.year() - startDate.year()) * 12 + stopDate.month() - startDate.month(); for (int i = 0; i <= offsetMonth; ++i) { FestivalInfo info; QDate beginDate = startDate.addMonths(i); if (getFestivalMonth(beginDate, info)) { festivallist.push_back(info); } } m_festivalDateMap.clear(); for (FestivalInfo info : festivallist) { for (HolidayInfo h : info.listHoliday) { m_festivalDateMap[h.date] = h.status; } } } /** * @brief LunarManager::getHuangLiDay * 获取农历信息 * @param date 获取日期 * @return */ CaHuangLiDayInfo LunarManager::getHuangLiDay(const QDate &date) { //首先在缓存中查找是否存在该日期的农历信息,没有则通过dbus获取 CaHuangLiDayInfo info; if (m_lunarInfoMap.contains(date)) { info = m_lunarInfoMap[date]; } else { getHuangLiDay(date, info); } return info; } /** * @brief LunarManager::getHuangLiDayMap * 获取一定时间范围内的农历数据 * @param startDate 开始时间 * @param stopDate 结束时间 * @return 农历信息 */ QMap LunarManager::getHuangLiDayMap(const QDate &startDate, const QDate &stopDate) { QMap lunarInfoMap; auto iterator = m_lunarInfoMap.begin(); while(iterator != m_lunarInfoMap.end()) { if (iterator.key() >= startDate || iterator.key() <= stopDate) { iterator.value(); lunarInfoMap[iterator.key()] = iterator.value(); } iterator++; } return lunarInfoMap; } /** * @brief LunarManager::getFestivalInfoDateMap * 获取节假日日期信息 * @param startDate 开始时间 * @param stopDate 结束时间 * @return 节假日日期信息 */ QMap LunarManager::getFestivalInfoDateMap(const QDate &startDate, const QDate &stopDate) { QMap festivalDateMap; auto iterator = m_festivalDateMap.begin(); while(iterator != m_festivalDateMap.end()) { if (iterator.key() >= startDate || iterator.key() <= stopDate) { iterator.value(); festivalDateMap[iterator.key()] = iterator.value(); } iterator++; } return festivalDateMap; } dde-calendar-5.14.13/calendar-client/src/dataManage/lunarmanager.h000066400000000000000000000041531473346337000246700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef LUNARMANAGER_H #define LUNARMANAGER_H #include "dbushuanglirequest.h" #include "huangliData/dbusdatastruct.h" #include "huangliData/lunardatastruct.h" #include class LunarManager : public QObject { Q_OBJECT public: explicit LunarManager(QObject *parent = nullptr); static LunarManager* getInstace(); //按月获取节假日信息 bool getFestivalMonth(quint32 year, quint32 month, FestivalInfo& festivalInfo); //按月获取节假日信息 bool getFestivalMonth(const QDate &date, FestivalInfo& festivalInfo); //按天获取黄历信息 bool getHuangLiDay(quint32 year, quint32 month, quint32 day, CaHuangLiDayInfo &info); //按天获取农历信息 bool getHuangLiDay(const QDate &date, CaHuangLiDayInfo &out); //按月获取黄历信息 bool getHuangLiMonth(quint32 year, quint32 month, CaHuangLiMonthInfo &info, bool fill = false); //按月获取黄历信息 bool getHuangLiMonth(const QDate &date, CaHuangLiMonthInfo &info, bool fill = false); //获取当天的农历月日期和日日期名 QString getHuangLiShortName(const QDate &date); //查询农历信息 void queryLunarInfo(const QDate &startDate, const QDate &stopDate); //查询节假日信息 void queryFestivalInfo(const QDate &startDate, const QDate &stopDate); //获取节假日日期信息 QMap getFestivalInfoDateMap(const QDate &startDate, const QDate &stopDate); //获取当天农历数据 CaHuangLiDayInfo getHuangLiDay(const QDate &date); //获取一定时间范围内的农历数据 QMap getHuangLiDayMap(const QDate &startDate, const QDate &stopDate); signals: public slots: private: DbusHuangLiRequest* m_dbusRequest = nullptr; //dbus请求实例 QMap m_lunarInfoMap; //缓存的农历数据 QMap m_festivalDateMap; //缓存的节假日数据 }; #define gLunarManager LunarManager::getInstace() #endif // LUNARMANAGER_H dde-calendar-5.14.13/calendar-client/src/dataManage/schedulecoormanage.cpp000066400000000000000000000170571473346337000264060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulecoormanage.h" #include CScheduleCoorManage::CScheduleCoorManage() { } CScheduleCoorManage::~CScheduleCoorManage() { } void CScheduleCoorManage::setRange(int w, int h, QDate begindate, QDate enddate, int rightmagin) { m_width = w; m_height = h; m_rightmagin = rightmagin; m_begindate = begindate; m_enddate = enddate; m_totalDay = begindate.daysTo(enddate) + 1; } void CScheduleCoorManage::setDateRange(QDate begindate, QDate enddate) { m_begindate = begindate; m_enddate = enddate; m_totalDay = begindate.daysTo(enddate) + 1; } QRectF CScheduleCoorManage::getDrawRegion(QDateTime begintime, QDateTime endtime) { QRectF rect; QString bb = begintime.toString("yyyyMMddhhmmsszzz"); QString ee = endtime.toString("yyyyMMddhhmmsszzz"); if (begintime > endtime) return rect; QDate begindate = begintime.date(); QDate enddate = endtime.date(); QTime beginzero(0, 0, 0); QTime beginScheduleT = begintime.time(); QTime endScheduleT = endtime.time(); if (begindate < m_begindate || enddate > m_enddate) return rect; qint64 beginday = m_begindate.daysTo(begindate) + 1; qint64 day = begindate.daysTo(enddate) + 1; int ScheduleBT = beginzero.secsTo(beginScheduleT); int ScheduleET = beginzero.secsTo(endScheduleT); qreal rWidth = m_width * (1.0 * day / m_totalDay); qreal rHeight = m_height * ((ScheduleET - ScheduleBT) / 86400.0); qreal posX = m_width * (1.0 * (beginday - 1) / m_totalDay); qreal posY = m_height * (ScheduleBT / 86400.0); rect = QRectF(posX, posY, rWidth, rHeight); return rect; } QRectF CScheduleCoorManage::getDrawRegion(QDateTime begintime, QDateTime endtime, int index, int coount) { QRectF rect; QString bb = begintime.toString("yyyyMMddhhmmsszzz"); QString ee = endtime.toString("yyyyMMddhhmmsszzz"); if (begintime > endtime) return rect; QDate begindate = begintime.date(); QDate enddate = endtime.date(); QTime beginzero(0, 0, 0); QTime beginScheduleT = begintime.time(); QTime endScheduleT = endtime.time(); if (begindate < m_begindate || enddate > m_enddate) return rect; qint64 beginday = m_begindate.daysTo(begindate) + 1; qint64 day = begindate.daysTo(enddate) + 1; int ScheduleBT = beginzero.secsTo(beginScheduleT); int ScheduleET = beginzero.secsTo(endScheduleT); qreal rWidth = m_width * (1.0 * day / m_totalDay) / coount; qreal rHeight = m_height * ((ScheduleET - ScheduleBT) / 86400.0); qreal posX = m_width * (1.0 * (beginday - 1) / m_totalDay) + (index - 1) * rWidth; qreal posY = m_height * (ScheduleBT / 86400.0); rect = QRectF(posX, posY, rWidth, rHeight); return rect; } QRectF CScheduleCoorManage::getDrawRegion(QDate date, QDateTime begintime, QDateTime endtime, int index, int coount, int maxNum, int type) { QRectF rect; QString bb = begintime.toString("yyyyMMddhhmmsszzz"); QString ee = endtime.toString("yyyyMMddhhmmsszzz"); if (begintime > endtime) return rect; QDate begindate = begintime.date(); QDate enddate = endtime.date(); QTime beginzero(0, 0, 0); QTime beginScheduleT = begintime.time(); QTime endScheduleT = endtime.time(); if (begindate < date) { begindate = date; beginScheduleT = beginzero; } if (enddate > date) { enddate = date; endScheduleT = QTime(23, 59, 59); } qint64 beginday = m_begindate.daysTo(begindate) + 1; qint64 day = begindate.daysTo(enddate) + 1; int ScheduleBT = beginzero.secsTo(beginScheduleT); int ScheduleET = beginzero.secsTo(endScheduleT); qreal rWidth = m_width * (1.0 * day / m_totalDay) / coount; qreal rHeight = m_height * ((ScheduleET - ScheduleBT) / 86400.0); qreal posX = m_width * (1.0 * (beginday - 1) / m_totalDay) + (index - 1) * rWidth; qreal posY = m_height * (ScheduleBT / 86400.0); if (coount > maxNum && type == 0) { qreal sscale = 27.0 / (m_width * (1.0 * day / m_totalDay)); if (index < maxNum + 1) { rWidth = m_width * (1.0 * day / m_totalDay) * sscale + 0.5; posX = m_width * (1.0 * (beginday - 1) / m_totalDay) + (index - 1) * rWidth; } else { qreal trWidth = m_width * (1.0 * day / m_totalDay) * sscale + 0.5; rWidth = m_width * (1.0 * day / m_totalDay) - (index - 1) * trWidth; posX = m_width * (1.0 * (beginday - 1) / m_totalDay) + (index - 1) * trWidth; } } if (rHeight < 20) { if (posY + 20 > m_height) posY = m_height - 20; rHeight = 20; } if (posX < 1) { posX = 1; rWidth = rWidth - posX; } rect = QRectF(posX, posY, rWidth, rHeight); return rect; } QRectF CScheduleCoorManage::getDrawRegionF(QDateTime begintime, QDateTime endtime) { QRectF rectf; if (begintime > endtime) return rectf; QDate begindate = begintime.date(); QDate enddate = endtime.date(); QTime beginzero(0, 0, 0); QTime beginScheduleT = begintime.time(); QTime endScheduleT = endtime.time(); if (begindate < m_begindate || enddate > m_enddate) return rectf; qint64 beginday = m_begindate.daysTo(begindate) + 1; qint64 day = begindate.daysTo(enddate) + 1; int ScheduleBT = beginzero.secsTo(beginScheduleT); int ScheduleET = beginzero.secsTo(endScheduleT); qreal rWidth = m_width * (1.0 * day / m_totalDay); qreal rHeight = m_height * ((ScheduleET - ScheduleBT) / 86400.0); qreal posX = m_width * (1.0 * (beginday - 1) / m_totalDay); qreal posY = m_height * (ScheduleBT / 86400.0); rectf = QRectF(posX, posY, rWidth, rHeight); return rectf; } QRectF CScheduleCoorManage::getAllDayDrawRegion(QDate begin, QDate end) { QRectF rect; if (begin > end) return rect; QDate begindate = begin; QDate enddate = end; if (begindate < m_begindate) begindate = m_begindate; if (enddate > m_enddate) enddate = m_enddate; qint64 beginday = m_begindate.daysTo(begindate); qint64 day = begindate.daysTo(enddate) + 1; qreal rWidth = m_width * (1.0 * day / m_totalDay) - 12; qreal rHeight = m_height; qreal posX = m_width * (1.0 * beginday / m_totalDay); qreal posY = 0; rect = QRectF(posX + 6, posY, rWidth - m_rightmagin, rHeight); return rect; } QDateTime CScheduleCoorManage::getDate(QPointF pos) { QDateTime begintime; qint64 day = static_cast((1.0 * pos.x() / m_width) * m_totalDay); if (day < 0) { day = 0; } else if (day >= m_totalDay) { day = m_totalDay - 1; } int time = static_cast((1.0 * pos.y() / m_height) * 86400.0); int hours = time / 3600; int minutes = (time - 3600 * hours) / 60; int secss = time - 3600 * hours - 60 * minutes; QDate date = m_begindate.addDays(day); begintime.setDate(date); begintime.setTime(QTime(hours, minutes, secss)); return begintime; } QDate CScheduleCoorManage::getsDate(QPointF pos) { qint64 day = static_cast((1.0 * pos.x() / m_width) * m_totalDay); if (day < 0) { day = 0; } else if (day >= m_totalDay) { day = m_totalDay - 1; } QDate date = m_begindate.addDays(day); return date; } float CScheduleCoorManage::getHeight(const QTime &time) const { QTime beginzero(0, 0, 0); int ScheduleBT = beginzero.secsTo(time); float posY = static_cast(m_height * (ScheduleBT / 86400.0)); return posY; } dde-calendar-5.14.13/calendar-client/src/dataManage/schedulecoormanage.h000066400000000000000000000024461473346337000260470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULECOORMANAGE_H #define SCHEDULECOORMANAGE_H #include #include #include class CScheduleCoorManage { public: CScheduleCoorManage(); ~CScheduleCoorManage(); void setRange(int w, int h, QDate begindate, QDate enddate, int rightmagin); void setDateRange(QDate begindate, QDate enddate); int getRightMagin() const { return m_rightmagin; } QRectF getDrawRegion(QDateTime begintime, QDateTime endtime); QRectF getDrawRegion(QDateTime begintime, QDateTime endtime, int index, int coount); QRectF getDrawRegion(QDate date, QDateTime begintime, QDateTime endtime, int index, int coount, int maxNum, int type = 0); QRectF getDrawRegionF(QDateTime begintime, QDateTime endtime); QRectF getAllDayDrawRegion(QDate begin, QDate end); QDateTime getDate(QPointF pos); QDate getsDate(QPointF pos); float getHeight(const QTime &time) const; QDate getBegindate() const { return m_begindate; } private: int m_width {0}; int m_height {0}; QDate m_begindate; QDate m_enddate; qint64 m_totalDay {0}; int m_rightmagin = 0; }; #endif // SCHEDULECOORMANAGE_H dde-calendar-5.14.13/calendar-client/src/dataManage/scheduledatamanage.cpp000066400000000000000000000035541473346337000263520ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduledatamanage.h" #include "accountmanager.h" #include "cscheduleoperation.h" #include "accountmanager.h" #include #include CScheduleDataManage *CScheduleDataManage::m_vscheduleDataManage = nullptr; // CSchedulesColor CScheduleDataManage::getScheduleColorByType(const QString &typeId) { CSchedulesColor color; DScheduleType::Ptr type = gAccountManager->getScheduleTypeByScheduleTypeId(typeId); QColor typeColor; if (nullptr != type) { typeColor = type->typeColor().colorCode(); } else if (typeId =="other"){ //如果类型不存在则设置一个默认颜色 typeColor = QColor("#BA60FA"); } color.orginalColor = typeColor; color.normalColor = color.orginalColor; color.normalColor.setAlphaF(0.2); color.pressColor = color.orginalColor; color.pressColor.setAlphaF(0.35); color.hoverColor = color.orginalColor; color.hoverColor.setAlphaF(0.3); color.hightColor = color.orginalColor; color.hightColor.setAlphaF(0.35); return color; } QColor CScheduleDataManage::getSystemActiveColor() { return DGuiApplicationHelper::instance()->applicationPalette().highlight().color(); } QColor CScheduleDataManage::getTextColor() { return DGuiApplicationHelper::instance()->applicationPalette().text().color(); } void CScheduleDataManage::setTheMe(int type) { m_theme = type; } CScheduleDataManage *CScheduleDataManage::getScheduleDataManage() { if (nullptr == m_vscheduleDataManage) { m_vscheduleDataManage = new CScheduleDataManage(); } return m_vscheduleDataManage; } CScheduleDataManage::CScheduleDataManage(QObject *parent) : QObject(parent) { } CScheduleDataManage::~CScheduleDataManage() { } dde-calendar-5.14.13/calendar-client/src/dataManage/scheduledatamanage.h000066400000000000000000000022601473346337000260100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEDATAMANAGE_H #define SCHEDULEDATAMANAGE_H #include "dschedule.h" #include "dscheduletype.h" #include #include #include #include DGUI_USE_NAMESPACE struct CSchedulesColor { QColor normalColor; //正常状态颜色 QColor hoverColor; //鼠标悬浮颜色 QColor pressColor; //鼠标点击颜色 QColor hightColor; //高亮色 QColor orginalColor; //最初的颜色 }; class CScheduleDataManage : public QObject { Q_OBJECT public: static CScheduleDataManage *getScheduleDataManage(); //根据日程类型ID获取颜色信息 CSchedulesColor getScheduleColorByType(const QString &type); static QColor getSystemActiveColor(); static QColor getTextColor(); void setTheMe(int type = 0); int getTheme() const { return m_theme; } private: explicit CScheduleDataManage(QObject *parent = nullptr); ~CScheduleDataManage(); private: int m_theme = 0; static CScheduleDataManage *m_vscheduleDataManage; }; #endif // SCHEDULEVIEW_H dde-calendar-5.14.13/calendar-client/src/dataManage/scheduledaterangeinfo.h000066400000000000000000000020671473346337000265410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEDATERANGEINFO_H #define SCHEDULEDATERANGEINFO_H #include "dschedule.h" typedef struct _tagMScheduleDateRangeInfo { QDate bdate; QDate edate; bool state; int num; DSchedule::Ptr tData; bool operator <(const _tagMScheduleDateRangeInfo &info)const { if (bdate == info.bdate) { if (bdate.daysTo(edate) == info.bdate.daysTo(info.edate)) { return tData < info.tData; } else { return bdate.daysTo(edate) > info.bdate.daysTo(info.edate); } } else { return bdate < info.bdate; } } bool operator ==(const _tagMScheduleDateRangeInfo &info)const { return bdate == info.bdate && edate == info.edate && tData == info.tData && state == info.state && num == info.num; } } MScheduleDateRangeInfo; #endif // SCHEDULEDATERANGEINFO_H dde-calendar-5.14.13/calendar-client/src/dataManage/schedulemanager.cpp000066400000000000000000000153731473346337000257040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulemanager.h" ScheduleManager::ScheduleManager(QObject *parent) : QObject(parent) { initconnect(); } ScheduleManager *ScheduleManager::getInstace() { static ScheduleManager manager; return &manager; } void ScheduleManager::initconnect() { connect(gAccountManager, &AccountManager::signalScheduleUpdate, this, &ScheduleManager::slotScheduleUpdate); connect(gAccountManager, &AccountManager::signalSearchScheduleUpdate, this, &ScheduleManager::slotSearchUpdate); } /** * @brief ScheduleManager::resetSchedule * 重新读取日程数据 * @param year 年 */ void ScheduleManager::resetSchedule(int year) { for (AccountItem::Ptr p : gAccountManager->getAccountList()) { p->querySchedulesWithParameter(year); } } void ScheduleManager::resetSchedule(const QDateTime &start, const QDateTime &end) { for (AccountItem::Ptr p : gAccountManager->getAccountList()) { p->querySchedulesWithParameter(start, end); } } /** * @brief ScheduleManager::updateSchedule * 更新日程数据 */ void ScheduleManager::updateSchedule() { m_scheduleMap.clear(); if (nullptr != gAccountManager->getLocalAccountItem()) { m_scheduleMap = gAccountManager->getLocalAccountItem()->getScheduleMap(); } if (nullptr != gAccountManager->getUnionAccountItem()) { QMap scheduleMap = gAccountManager->getUnionAccountItem()->getScheduleMap(); if (m_scheduleMap.size() == 0) { m_scheduleMap = scheduleMap; } else { auto iterator = scheduleMap.begin(); while (iterator != scheduleMap.end()) { DSchedule::List list = m_scheduleMap[iterator.key()]; list.append(iterator.value()); m_scheduleMap[iterator.key()] = list; iterator++; } } } emit signalScheduleUpdate(); } /** * @brief ScheduleManager::updateSearchSchedule * 更新被搜索的日程数据 */ void ScheduleManager::updateSearchSchedule() { m_searchScheduleMap.clear(); if (nullptr != gLocalAccountItem) { m_searchScheduleMap = gLocalAccountItem->getSearchScheduleMap(); } if (nullptr != gUosAccountItem) { QMap scheduleMap = gUosAccountItem->getSearchScheduleMap(); if (m_searchScheduleMap.size() == 0) { m_searchScheduleMap = scheduleMap; } else { auto iterator = scheduleMap.begin(); while (iterator != scheduleMap.end()) { DSchedule::List list = m_searchScheduleMap[iterator.key()]; list.append(iterator.value()); m_searchScheduleMap[iterator.key()] = list; iterator++; } } } emit signalSearchScheduleUpdate(); } /** * @brief ScheduleManager::slotScheduleUpdate * 日程数据更新事件 */ void ScheduleManager::slotScheduleUpdate() { updateSchedule(); } void ScheduleManager::slotSearchUpdate() { updateSearchSchedule(); } /** * @brief ScheduleManager::getAllScheduleMap * 获取所有的日程数据 * @return */ QMap ScheduleManager::getAllScheduleMap() { return m_scheduleMap; } /** * @brief ScheduleManager::getScheduleMap * 获取一定时间范围内的日程 * @param startDate 开始时间 * @param stopDate 结束时间 * @return */ QMap ScheduleManager::getScheduleMap(const QDate &startDate, const QDate &stopDate) const { QMap map; QDate date = startDate; while (date != stopDate) { if (m_scheduleMap.contains(date)) { map[date] = m_scheduleMap[date]; } date = date.addDays(1); } if (m_scheduleMap.contains(date)) { map[date] = m_scheduleMap[date]; } return map; } /** * @brief ScheduleManager::getAllSearchedScheduleMap * 获取所有的被搜索的日程数据 * @return */ QMap ScheduleManager::getAllSearchedScheduleMap() { return m_searchScheduleMap; } /** * @brief ScheduleManager::getAllSearchedScheduleList * 获取所有的被搜索的日程数据 * @return */ DSchedule::List ScheduleManager::getAllSearchedScheduleList() { DSchedule::List list; for (DSchedule::List l : m_searchScheduleMap.values()) { list.append(l); } return list; } /** * @brief ScheduleManager::getAllScheduleDate * 获取所有的有日程的时间 * @return */ QSet ScheduleManager::getAllScheduleDate() { QSet set; for (QDate date : m_scheduleMap.keys()) { set.insert(date); } return set; } /** * @brief ScheduleManager::getAllSearchedScheduleDate * 获取所有有被搜索日程的时间 * @return */ QSet ScheduleManager::getAllSearchedScheduleDate() { QSet set; for (QDate date : m_searchScheduleMap.keys()) { set.insert(date); } return set; } /** * @brief ScheduleManager::getScheduleByDay * 获取某天的日程 * @param date 需要获取日程的日期 * @return */ DSchedule::List ScheduleManager::getScheduleByDay(QDate date) { if (m_scheduleMap.contains(date)) { return m_scheduleMap[date]; } return DSchedule::List(); } /** * @brief ScheduleManager::getScheduleTypeByScheduleId * 根据日程类型id获取日程类型 * @param id * @return */ DScheduleType::Ptr ScheduleManager::getScheduleTypeByScheduleId(const QString &id) { DScheduleType::Ptr type = nullptr; for (AccountItem::Ptr p : gAccountManager->getAccountList()) { type = p->getScheduleTypeByID(id); if (nullptr != type) { break; } } return type; } /** * @brief ScheduleManager::searchSchedule * 搜索日程 * @param key 搜索关键字 * @param startTime 开始时间 * @param endTime 结束时间 */ void ScheduleManager::searchSchedule(const QString &key, const QDateTime &startTime, const QDateTime &endTime) { m_searchScheduleMap.clear(); static int count = 0; count = 0; m_searchQuery.reset(new DScheduleQueryPar); m_searchQuery->setKey(key); m_searchQuery->setDtStart(startTime); m_searchQuery->setDtEnd(endTime); for (AccountItem::Ptr p : gAccountManager->getAccountList()) { count ++; p->querySchedulesWithParameter(m_searchQuery, [&](CallMessge) { count--; if (count == 0) { this->updateSearchSchedule(); } }); } } /** * @brief ScheduleManager::clearSearchSchedule * 情况已搜索的如此数据 */ void ScheduleManager::clearSearchSchedule() { m_searchScheduleMap.clear(); m_searchQuery.reset(nullptr); emit signalSearchScheduleUpdate(); } dde-calendar-5.14.13/calendar-client/src/dataManage/schedulemanager.h000066400000000000000000000045071473346337000253460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEMANAGER_H #define SCHEDULEMANAGER_H #include "accountmanager.h" #include "lunarmanager.h" #include class ScheduleManager : public QObject { Q_OBJECT public: explicit ScheduleManager(QObject *parent = nullptr); static ScheduleManager* getInstace(); //获取一年的所有日程 QMap getAllScheduleMap(); //根据起始时间和结束时间获取日程 QMap getScheduleMap(const QDate &startDate, const QDate &stopDate) const; //获取所有的搜索到的日程(按日期分类) QMap getAllSearchedScheduleMap(); //获取所有搜索到的日程 DSchedule::List getAllSearchedScheduleList(); //获取所有有日程的时间 QSet getAllScheduleDate(); //获取所有有被搜索日程的时间 QSet getAllSearchedScheduleDate(); //获取某一天的日程 DSchedule::List getScheduleByDay(QDate); //根据日程id获取日程类型 DScheduleType::Ptr getAccountByScheduleId(const QString& id); DScheduleType::Ptr getScheduleTypeByScheduleId(const QString& id); //搜索日程 void searchSchedule(const QString &key, const QDateTime &startTime, const QDateTime &endTime); //清空搜索的日程 void clearSearchSchedule(); //重置一年的日程信息 void resetSchedule(int year); void resetSchedule(const QDateTime& start, const QDateTime& end); signals: //日程数据更新信号 void signalScheduleUpdate(); //被搜索日程数据更新信号 void signalSearchScheduleUpdate(); public slots: //日程数据更新事件 void slotScheduleUpdate(); void slotSearchUpdate(); private: void initconnect(); //更新日程 void updateSchedule(); //更新被搜索的日程 void updateSearchSchedule(); private: QMap m_scheduleMap; //一年的日程数据 QMap m_searchScheduleMap; //被搜索的日程数据 DScheduleQueryPar::Ptr m_searchQuery; //上一次搜索的条件 LunarManager m_lunarManager; }; #define gScheduleManager ScheduleManager::getInstace() #endif // SCHEDULEMANAGER_H dde-calendar-5.14.13/calendar-client/src/dbus/000077500000000000000000000000001473346337000207535ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/dbus/cdbuspendingcallwatcher.cpp000066400000000000000000000020451473346337000263370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cdbuspendingcallwatcher.h" CDBusPendingCallWatcher::CDBusPendingCallWatcher(const QDBusPendingCall &call, QString member, QObject *parent) : QDBusPendingCallWatcher(call, parent) , m_member(member) { connect(this, &QDBusPendingCallWatcher::finished, this, [this](){ //转发调用完成事件 emit this->signalCallFinished(this); }); } /** * @brief CDBusPendingCallWatcher::setCallbackFunc * 设置回调函数 * @param func 回调函数 */ void CDBusPendingCallWatcher::setCallbackFunc(CallbackFunc func) { m_func = func; } /** * @brief CDBusPendingCallWatcher::getCallbackFunc * 获取回调函数 * @return 回调函数 */ CallbackFunc CDBusPendingCallWatcher::getCallbackFunc() { return m_func; } /** * @brief CDBusPendingCallWatcher::getmember * 设置调用方法名 * @return 方法名 */ QString CDBusPendingCallWatcher::getmember() { return m_member; } dde-calendar-5.14.13/calendar-client/src/dbus/cdbuspendingcallwatcher.h000066400000000000000000000024131473346337000260030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CDBUSPENDINGCALLWATCHER_H #define CDBUSPENDINGCALLWATCHER_H #include /** * @brief The CallMessge struct * dbus请求回调数据 */ struct CallMessge{ int code; //返回码,0:请求成功,大于0:请求失败 QVariant msg; //返回值,根据实际需求可返回任意数据 }; /** * @brief CallbackFunc * dbus请求回调函数类型 */ typedef std::function CallbackFunc; //继承QDbus回调观察者,将部分自定义的数据包装在回调类中 class CDBusPendingCallWatcher : public QDBusPendingCallWatcher { Q_OBJECT public: explicit CDBusPendingCallWatcher(const QDBusPendingCall &call, QString member, QObject *parent = nullptr); //设置回调函数 void setCallbackFunc(CallbackFunc func); //获取回调函数 CallbackFunc getCallbackFunc(); //设置调用方法名 QString getmember(); signals: void signalCallFinished(CDBusPendingCallWatcher*); public slots: private: QString m_member; //调用的dbus方法名 CallbackFunc m_func = nullptr; //回调函数指针 }; #endif // CDBUSPENDINGCALLWATCHER_H dde-calendar-5.14.13/calendar-client/src/dbus/dbusaccountmanagerrequest.cpp000066400000000000000000000167001473346337000267410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusaccountmanagerrequest.h" #include "commondef.h" #include "dcalendargeneralsettings.h" #include #include DbusAccountManagerRequest::DbusAccountManagerRequest(QObject *parent) : DbusRequestBase("/com/deepin/dataserver/Calendar/AccountManager", "com.deepin.dataserver.Calendar.AccountManager", QDBusConnection::sessionBus(), parent) { } /** * @brief setFirstDayofWeek * 设置一周首日 */ void DbusAccountManagerRequest::setFirstDayofWeek(int value) { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); interface.setProperty("firstDayOfWeek", QVariant(value)); } /** * @brief DbusAccountManagerRequest::setTimeFormatType * 设置时间显示格式 */ void DbusAccountManagerRequest::setTimeFormatType(int value) { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); interface.setProperty("timeFormatType", QVariant(value)); } /** * @brief setFirstDayofWeekSource * 设置一周首日来源 */ void DbusAccountManagerRequest::setFirstDayofWeekSource(DCalendarGeneralSettings::GeneralSettingSource value) { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); interface.setProperty("firstDayOfWeekSource", QVariant(value)); } /** * @brief setTimeFormatTypeSource * 设置时间显示格式来源 */ void DbusAccountManagerRequest::setTimeFormatTypeSource(DCalendarGeneralSettings::GeneralSettingSource value) { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); interface.setProperty("timeFormatTypeSource", QVariant(value)); } /** * @brief getFirstDayofWeekSource * 获取一周首日来源 */ DCalendarGeneralSettings::GeneralSettingSource DbusAccountManagerRequest::getFirstDayofWeekSource() { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); bool ok; auto val = interface.property("firstDayOfWeekSource").toInt(&ok); if (ok) { return static_cast(val); } else { return DCalendarGeneralSettings::Source_Database; } } /** * @brief getTimeFormatTypeSource * 获取时间显示格式来源 */ DCalendarGeneralSettings::GeneralSettingSource DbusAccountManagerRequest::getTimeFormatTypeSource() { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); bool ok; auto val = interface.property("timeFormatTypeSource").toInt(&ok); if (ok) { return static_cast(val); } else { return DCalendarGeneralSettings::Source_Database; } } /** * @brief DbusAccountManagerRequest::getAccountList * 请求帐户列表 */ void DbusAccountManagerRequest::getAccountList() { asyncCall("getAccountList"); } /** * @brief DbusAccountManagerRequest::downloadByAccountID * 根据帐户id下拉数据 * @param accountID 帐户id */ void DbusAccountManagerRequest::downloadByAccountID(const QString &accountID) { asyncCall("downloadByAccountID", QVariant(accountID)); } /** * @brief DbusAccountManagerRequest::uploadNetWorkAccountData * 更新网络帐户数据 */ void DbusAccountManagerRequest::uploadNetWorkAccountData() { asyncCall("uploadNetWorkAccountData"); } /** * @brief DbusAccountManagerRequest::getCalendarGeneralSettings * 获取通用设置 */ void DbusAccountManagerRequest::getCalendarGeneralSettings() { asyncCall("getCalendarGeneralSettings"); } /** * @brief DbusAccountManagerRequest::login * 帐户登录 */ void DbusAccountManagerRequest::login() { asyncCall("login"); } /** * @brief DbusAccountManagerRequest::loginout * 帐户登出 */ void DbusAccountManagerRequest::logout() { asyncCall("logout"); } void DbusAccountManagerRequest::clientIsShow(bool isShow) { QList argumentList; argumentList << isShow; //不需要返回结果,发送完直接结束 callWithArgumentList(QDBus::NoBlock, QStringLiteral("calendarIsShow"), argumentList); } bool DbusAccountManagerRequest::getIsSupportUid() { QList argumentList; // QDBusMessage msg = callWithArgumentList(QDBus::Block, QStringLiteral("isSupportUid"), argumentList); if (msg.type() == QDBusMessage::ReplyMessage) { QVariant variant = msg.arguments().first(); return variant.toBool(); } else { return false; } } /** * @brief DbusAccountManagerRequest::slotCallFinished * dbus调用完成事件 * @param call 回调类 */ void DbusAccountManagerRequest::slotCallFinished(CDBusPendingCallWatcher *call) { int ret = 0; bool canCall = true; //错误处理 if (call->isError()) { //打印错误信息 qCWarning(ClientLogger) << call->reply().member() << call->error().message(); ret = 1; } else if (call->getmember() == "getAccountList") { //"getAccountList"方法回调事件 QDBusPendingReply reply = *call; //获取返回值 QString str = reply.argumentAt<0>(); DAccount::List accountList; //解析字符串 if (DAccount::fromJsonListString(accountList, str)) { emit signalGetAccountListFinish(accountList); } else { qCWarning(ClientLogger) <<"AccountList Parsing failed!"; ret = 2; } } else if (call->getmember() == "getCalendarGeneralSettings") { QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); DCalendarGeneralSettings::Ptr ptr; ptr.reset(new DCalendarGeneralSettings()); if (DCalendarGeneralSettings::fromJsonString(ptr, str)) { emit signalGetGeneralSettingsFinish(ptr); } else { qCWarning(ClientLogger) <<"AccountList Parsing failed!"; ret = 2; } } else if (call->getmember() == "setCalendarGeneralSettings") { canCall = false; setCallbackFunc(call->getCallbackFunc()); getCalendarGeneralSettings(); } //执行回调函数 if (canCall && call->getCallbackFunc() != nullptr) { call->getCallbackFunc()({ret, ""}); } //释放内存 call->deleteLater(); } void DbusAccountManagerRequest::slotDbusCall(const QDBusMessage &msg) { if (msg.member() == "accountUpdate") { getAccountList(); }else if (msg.member() == "PropertiesChanged") { QDBusPendingReply reply = msg; onPropertiesChanged(reply.argumentAt<0>(), reply.argumentAt<1>(), reply.argumentAt<2>()); } } void DbusAccountManagerRequest::onPropertiesChanged(const QString &, const QVariantMap &changedProperties, const QStringList &) { for (QVariantMap::const_iterator it = changedProperties.cbegin(), end = changedProperties.cend(); it != end; ++it) { if (it.key() == "firstDayOfWeek") { getCalendarGeneralSettings(); } else if (it.key() == "timeFormatType") { getCalendarGeneralSettings(); } } } dde-calendar-5.14.13/calendar-client/src/dbus/dbusaccountmanagerrequest.h000066400000000000000000000042071473346337000264050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSACCOUNTMANAGERREQUEST_H #define DBUSACCOUNTMANAGERREQUEST_H #include "dbusrequestbase.h" #include "daccount.h" #include "dcalendargeneralsettings.h" //所有帐户信息管理类 class DbusAccountManagerRequest : public DbusRequestBase { Q_OBJECT public: explicit DbusAccountManagerRequest(QObject *parent = nullptr); //设置一周首日 void setFirstDayofWeek(int); //设置时间显示格式 void setTimeFormatType(int); // 设置一周首日来源 void setFirstDayofWeekSource(DCalendarGeneralSettings::GeneralSettingSource); // 设置时间显示格式来源 void setTimeFormatTypeSource(DCalendarGeneralSettings::GeneralSettingSource); // 获取一周首日来源 DCalendarGeneralSettings::GeneralSettingSource getFirstDayofWeekSource(); // 获取时间显示格式来源 DCalendarGeneralSettings::GeneralSettingSource getTimeFormatTypeSource(); //获取帐户列表 void getAccountList(); //根据帐户id下拉数据 void downloadByAccountID(const QString &accountID); //更新网络帐户数据 void uploadNetWorkAccountData(); //获取通用设置 void getCalendarGeneralSettings(); // void clientIsShow(bool isShow); //获取是否支持云同步 bool getIsSupportUid(); //帐户登录 void login(); //帐户登出 void logout(); signals: //获取帐户列表数据完成信号 void signalGetAccountListFinish(DAccount::List accountList); //获取通用设置完成信号 void signalGetGeneralSettingsFinish(DCalendarGeneralSettings::Ptr ptr); public slots: //dbus调用完成事件 void slotCallFinished(CDBusPendingCallWatcher *) override; //后端发送信号事件 void slotDbusCall(const QDBusMessage &msg) override; private: void onPropertiesChanged(const QString &interfaceName, const QVariantMap &changedProperties, const QStringList &invalidatedProperties); }; #endif // DBUSACCOUNTMANAGERREQUEST_H dde-calendar-5.14.13/calendar-client/src/dbus/dbusaccountrequest.cpp000066400000000000000000000312371473346337000254100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusaccountrequest.h" #include "commondef.h" #include #include #include #include DbusAccountRequest::DbusAccountRequest(const QString &path, const QString &interface, QObject *parent) : DbusRequestBase(path, interface, QDBusConnection::sessionBus(), parent) { } /** * @brief getAccountInfo 获取帐户信息 * @return */ void DbusAccountRequest::getAccountInfo() { asyncCall("getAccountInfo"); } /** * @brief DbusAccountRequest::setAccountExpandStatus * 设置帐户列表展开状态 * @param expandStatus 展开状态 */ void DbusAccountRequest::setAccountExpandStatus(bool expandStatus) { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); interface.setProperty("isExpand", QVariant(expandStatus)); } void DbusAccountRequest::setAccountState(DAccount::AccountStates state) { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); interface.setProperty("accountState", QVariant(state)); } void DbusAccountRequest::setSyncFreq(const QString &freq) { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); interface.setProperty("syncFreq", QVariant(freq)); } DAccount::AccountStates DbusAccountRequest::getAccountState() { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); return static_cast(interface.property("accountState").toInt()); } DAccount::AccountSyncState DbusAccountRequest::getSyncState() { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); return static_cast(interface.property("syncState").toInt()) ; } QString DbusAccountRequest::getSyncFreq() { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); return interface.property("syncFreq").toString(); } /** * @brief getScheduleTypeList 获取日程类型信息集 * @return */ void DbusAccountRequest::getScheduleTypeList() { asyncCall("getScheduleTypeList"); } /** * @brief getScheduleTypeByID 根据日程类型ID获取日程类型信息 * @param typeID 日程类型ID * @return */ void DbusAccountRequest::getScheduleTypeByID(const QString &typeID) { asyncCall("getScheduleTypeByID", QVariant(typeID)); } /** * @brief createScheduleType 创建日程类型 * @param typeInfo 类型信息 * @return 日程类型ID */ void DbusAccountRequest::createScheduleType(const DScheduleType::Ptr &typeInfo) { QString jsonStr; DScheduleType::toJsonString(typeInfo, jsonStr); asyncCall("createScheduleType", QVariant(jsonStr)); } /** * @brief updateScheduleType 更新日程类型 * @param typeInfo 类型信息 * @return 是否成功,true:更新成功 */ void DbusAccountRequest::updateScheduleType(const DScheduleType::Ptr &typeInfo) { QString jsonStr; DScheduleType::toJsonString(typeInfo, jsonStr); asyncCall("updateScheduleType", QVariant(jsonStr)); } /** * @brief DbusAccountRequest::updateScheduleTypeShowState * 更新类型显示状态 * @param typeInfo */ void DbusAccountRequest::updateScheduleTypeShowState(const DScheduleType::Ptr &typeInfo) { QString jsonStr; DScheduleType::toJsonString(typeInfo, jsonStr); QString callName = "updateScheduleTypeShowState"; asyncCall("updateScheduleType", callName, QVariant(jsonStr)); } /** * @brief deleteScheduleTypeByID 根据日程类型ID删除日程类型 * @param typeID 日程类型ID * @return 是否成功,true:更新成功 */ void DbusAccountRequest::deleteScheduleTypeByID(const QString &typeID) { QList argumentList; asyncCall("deleteScheduleTypeByID", QVariant(typeID)); } /** * @brief scheduleTypeByUsed 日程类型是否被使用 * @param typeID 日程类型ID * @return */ bool DbusAccountRequest::scheduleTypeByUsed(const QString &typeID) { QDBusMessage ret = call("scheduleTypeByUsed", QVariant(typeID)); return ret.arguments().value(0).toBool(); } /** * @brief createSchedule 创建日程 * @param ScheduleInfo 日程信息 * @return 返回日程ID */ void DbusAccountRequest::createSchedule(const DSchedule::Ptr &scheduleInfo) { QString jsonStr; DSchedule::toJsonString(scheduleInfo, jsonStr); asyncCall("createSchedule", QVariant(jsonStr)); } /** * @brief updateSchedule 更新日程 * @param ScheduleInfo 日程信息 * @return 是否成功,true:更新成功 */ void DbusAccountRequest::updateSchedule(const DSchedule::Ptr &scheduleInfo) { QString jsonStr; DSchedule::toJsonString(scheduleInfo, jsonStr); asyncCall("updateSchedule", QVariant(jsonStr)); } DSchedule::Ptr DbusAccountRequest::getScheduleByScheduleID(const QString &scheduleID) { QList argumentList; argumentList << QVariant::fromValue(scheduleID); QDBusPendingCall pCall = asyncCallWithArgumentList(QStringLiteral("getScheduleByScheduleID"), argumentList); pCall.waitForFinished(); QDBusMessage reply = pCall.reply(); if (reply.type() != QDBusMessage::ReplyMessage) { qCWarning(ClientLogger) << "getScheduleTypeByID error ," << reply; return nullptr; } QDBusReply scheduleReply = reply; QString scheduleStr = scheduleReply.value(); DSchedule::Ptr schedule; DSchedule::fromJsonString(schedule, scheduleStr); return schedule; } /** * @brief deleteScheduleByScheduleID 根据日程ID删除日程 * @param ScheduleID 日程ID * @return 是否成功,true:删除成功 */ void DbusAccountRequest::deleteScheduleByScheduleID(const QString &scheduleID) { QList argumentList; asyncCall("deleteScheduleByScheduleID", QVariant(scheduleID)); } /** * @brief deleteSchedulesByScheduleTypeID 根据日程类型ID删除日程 * @param typeID 日程类型ID * @return 是否成功,true:删除成功 */ void DbusAccountRequest::deleteSchedulesByScheduleTypeID(const QString &typeID) { QList argumentList; asyncCall("deleteSchedulesByScheduleTypeID", QVariant(typeID)); } /** * @brief querySchedulesWithParameter 根据查询参数查询日程 * @param params 具体的查询参数 * @return 查询到的日程集 */ void DbusAccountRequest::querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms) { //key为空为正常日程获取,不为空则为搜索日程 QString callName = "searchSchedulesWithParameter"; if (params->key().isEmpty()) { callName = "querySchedulesWithParameter"; m_priParams = params; } QString jsonStr = DScheduleQueryPar::toJsonString(params); asyncCall("querySchedulesWithParameter", callName, QVariant(jsonStr)); } bool DbusAccountRequest::querySchedulesByExternal(const DScheduleQueryPar::Ptr ¶ms, QString &json) { QDBusPendingReply reply = call("querySchedulesWithParameter", QVariant(params)); if (reply.isError()) { qCWarning(ClientLogger) << reply.error().message(); return false; } json = reply.argumentAt<0>(); return true; } void DbusAccountRequest::getSysColors() { asyncCall("getSysColors"); } QString DbusAccountRequest::getDtLastUpdate() { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); QString datetime = interface.property("dtLastUpdate").toString(); return datetime; } void DbusAccountRequest::slotCallFinished(CDBusPendingCallWatcher *call) { int ret = 0; bool canCall = true; QVariant msg; if (call->isError()) { qCWarning(ClientLogger) << call->reply().member() << call->error().message(); ret = 1; } else { if (call->getmember() == "getAccountInfo") { QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); DAccount::Ptr ptr; ptr.reset(new DAccount()); if (DAccount::fromJsonString(ptr, str)) { emit signalGetAccountInfoFinish(ptr); } else { qCWarning(ClientLogger) << "AccountInfo Parsing failed!"; ret = 2; } } else if (call->getmember() == "getScheduleTypeList") { QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); DScheduleType::List stList; if (DScheduleType::fromJsonListString(stList, str)) { emit signalGetScheduleTypeListFinish(stList); } else { qCWarning(ClientLogger) << "ScheduleTypeList Parsing failed!"; ret = 2; } } else if (call->getmember() == "querySchedulesWithParameter") { QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); QMap map = DSchedule::fromQueryResult(str); emit signalGetScheduleListFinish(map); } else if (call->getmember() == "searchSchedulesWithParameter") { QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); QMap map = DSchedule::fromQueryResult(str); emit signalSearchScheduleListFinish(map); } else if (call->getmember() == "getSysColors") { QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); DTypeColor::List list = DTypeColor::fromJsonString(str); emit signalGetSysColorsFinish(list); } else if (call->getmember() == "createScheduleType") { //创建日程类型结束 QDBusPendingReply reply = *call; QString scheduleTypeId = reply.argumentAt<0>(); msg = scheduleTypeId; } else if (call->getmember() == "updateScheduleTypeShowState") { //更新日程类型显示状态结束 canCall = false; //重新读取日程数据 setCallbackFunc(call->getCallbackFunc()); querySchedulesWithParameter(m_priParams); } } if (canCall && call->getCallbackFunc() != nullptr) { call->getCallbackFunc()({ret, msg}); } call->deleteLater(); } void DbusAccountRequest::slotDbusCall(const QDBusMessage &msg) { if (msg.member() == "PropertiesChanged") { QDBusPendingReply reply = msg; onPropertiesChanged(reply.argumentAt<0>(), reply.argumentAt<1>(), reply.argumentAt<2>()); } else if (msg.member() == "scheduleTypeUpdate") { getScheduleTypeList(); } else if (msg.member() == "scheduleUpdate") { //更新全局数据 querySchedulesWithParameter(m_priParams); //更新搜索数据 emit signalSearchUpdate(); } } void DbusAccountRequest::onPropertiesChanged(const QString &, const QVariantMap &changedProperties, const QStringList &) { for (QVariantMap::const_iterator it = changedProperties.cbegin(), end = changedProperties.cend(); it != end; ++it) { if (it.key() == "syncState") { int state = it.value().toInt(); emit signalSyncStateChange(static_cast(state)); } else if (it.key() == "accountState") { int state = it.value().toInt(); emit signalAccountStateChange(static_cast(state)); } if (it.key() == "dtLastUpdate") { emit signalDtLastUpdate(getDtLastUpdate()); } if (it.key() == "accountState") { emit signalAccountStateChange(getAccountState()); } if (it.key() == "dtLastUpdate") { emit signalDtLastUpdate(getDtLastUpdate()); } if (it.key() == "accountState") { emit signalAccountStateChange(getAccountState()); } } } void DbusAccountRequest::importSchedule(QString icsFilePath, QString typeID, bool cleanExists) { asyncCall("importSchedule", QVariant(icsFilePath), QVariant(typeID), QVariant(cleanExists)); } void DbusAccountRequest::exportSchedule(QString icsFilePath, QString typeID) { asyncCall("exportSchedule", QVariant(icsFilePath), QVariant(typeID)); } dde-calendar-5.14.13/calendar-client/src/dbus/dbusaccountrequest.h000066400000000000000000000123721473346337000250540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSACCOUNTREQUEST_H #define DBUSACCOUNTREQUEST_H #include "dbusrequestbase.h" #include "daccount.h" #include "dschedule.h" #include "dscheduletype.h" #include "dtypecolor.h" #include "dschedulequerypar.h" //单项帐户信息请求类 class DbusAccountRequest : public DbusRequestBase { Q_OBJECT public: explicit DbusAccountRequest(const QString &path, const QString &interface, QObject *parent = nullptr); /** * @brief setAccountExpandStatus * 设置帐户列表展开状态 * @param expandStatus 展开状态 */ void setAccountExpandStatus(bool expandStatus); void setAccountState(DAccount::AccountStates state); void setSyncFreq(const QString &freq); DAccount::AccountStates getAccountState(); DAccount::AccountSyncState getSyncState(); QString getSyncFreq(); /** * @brief getAccountInfo 获取帐户信息 * @return */ void getAccountInfo(); /** * @brief getScheduleTypeList 获取日程类型信息集 * @return */ void getScheduleTypeList(); /** * @brief getScheduleTypeByID 根据日程类型ID获取日程类型信息 * @param typeID 日程类型ID * @return */ void getScheduleTypeByID(const QString &typeID); /** * @brief createScheduleType 创建日程类型 * @param typeInfo 类型信息 * @return 日程类型ID */ void createScheduleType(const DScheduleType::Ptr &typeInfo); /** * @brief updateScheduleType 更新日程类型 * @param typeInfo 类型信息 * @return 是否成功,true:更新成功 */ void updateScheduleType(const DScheduleType::Ptr &typeInfo); /** * @brief updateScheduleTypeShowState * 更新类型显示状态 * @param typeInfo */ void updateScheduleTypeShowState(const DScheduleType::Ptr &typeInfo); /** * @brief deleteScheduleTypeByID 根据日程类型ID删除日程类型 * @param typeID 日程类型ID * @return 是否成功,true:更新成功 */ void deleteScheduleTypeByID(const QString &typeID); /** * @brief scheduleTypeByUsed 日程类型是否被使用 * @param typeID 日程类型ID * @return */ bool scheduleTypeByUsed(const QString &typeID); /** * @brief createSchedule 创建日程 * @param ScheduleInfo 日程信息 * @return 返回日程ID */ void createSchedule(const DSchedule::Ptr &scheduleInfo); /** * @brief updateSchedule 更新日程 * @param ScheduleInfo 日程信息 * @return 是否成功,true:更新成功 */ void updateSchedule(const DSchedule::Ptr &scheduleInfo); DSchedule::Ptr getScheduleByScheduleID(const QString &scheduleID); /** * @brief deleteScheduleByScheduleID 根据日程ID删除日程 * @param ScheduleID 日程ID * @return 是否成功,true:删除成功 */ void deleteScheduleByScheduleID(const QString &scheduleID); /** * @brief deleteSchedulesByScheduleTypeID 根据日程类型ID删除日程 * @param typeID 日程类型ID * @return 是否成功,true:删除成功 */ void deleteSchedulesByScheduleTypeID(const QString &typeID); /** * @brief querySchedulesWithParameter 根据查询参数查询日程 * @param params 具体的查询参数 * @return 查询到的日程集 */ void querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms); //对外查询接口,同步 bool querySchedulesByExternal(const DScheduleQueryPar::Ptr ¶ms, QString &json); void getSysColors(); //获取最后一次同步时间 QString getDtLastUpdate(); void importSchedule(QString icsFilePath, QString TypeID, bool cleanExists); void exportSchedule(QString icsFilePath, QString TypeID); signals: void signalGetAccountInfoFinish(DAccount::Ptr); void signalGetScheduleTypeListFinish(DScheduleType::List); void signalGetScheduleListFinish(QMap); void signalSearchScheduleListFinish(QMap); void signalGetSysColorsFinish(DTypeColor::List); void signalDtLastUpdate(QString); void signalSyncStateChange(DAccount::AccountSyncState); void signalAccountStateChange(DAccount::AccountStates); void signalSearchUpdate(); public slots: //dbus服务端调用 void slotDbusCall(const QDBusMessage &msg) override; void slotCallFinished(CDBusPendingCallWatcher *) override; private: void onPropertiesChanged(const QString &interfaceName, const QVariantMap &changedProperties, const QStringList &invalidatedProperties); private: DScheduleQueryPar::Ptr m_priParams; //上一次查询日程的数据 }; #endif // DBUSACCOUNTREQUEST_H dde-calendar-5.14.13/calendar-client/src/dbus/dbuscalendar_adaptor.cpp000066400000000000000000000023601473346337000256210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbuscalendar_adaptor.h" #include "calendarmainwindow.h" #include "scheduledatamanage.h" #include #include #include #include #include #include #include #include /* * Implementation of adaptor class CalendarAdaptor */ CalendarAdaptor::CalendarAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent) { // constructor setAutoRelaySignals(true); } CalendarAdaptor::~CalendarAdaptor() { // destructor } void CalendarAdaptor::ActiveWindow() { // handle method call com.deepin.Calendar.RaiseWindow QMetaObject::invokeMethod(parent(), "ActiveWindow"); } void CalendarAdaptor::RaiseWindow() { QWidget *pp = qobject_cast(parent()); //取消最小化状态 pp->setWindowState(pp->windowState() & ~Qt::WindowState::WindowMinimized); pp->activateWindow(); pp->raise(); } void CalendarAdaptor::OpenSchedule(QString job) { //更新对应的槽函数 QMetaObject::invokeMethod(parent(), "slotOpenSchedule", Q_ARG(QString, job)); } dde-calendar-5.14.13/calendar-client/src/dbus/dbuscalendar_adaptor.h000077500000000000000000000025201473346337000252670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSCALENDAR_ADAPTOR_H #define DBUSCALENDAR_ADAPTOR_H #include #include QT_BEGIN_NAMESPACE class QByteArray; template class QList; template class QMap; class QString; class QStringList; class QVariant; QT_END_NAMESPACE /* * Adaptor class for interface com.deepin.Calendar */ class CalendarAdaptor: public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.deepin.Calendar") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") public: explicit CalendarAdaptor(QObject *parent); virtual ~CalendarAdaptor(); public: // PROPERTIES public Q_SLOTS: // METHODS void ActiveWindow(); void RaiseWindow(); void OpenSchedule(QString job); Q_SIGNALS: // SIGNALS }; #endif dde-calendar-5.14.13/calendar-client/src/dbus/dbushuanglirequest.cpp000066400000000000000000000116721473346337000254040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbushuanglirequest.h" #include "commondef.h" #include DbusHuangLiRequest::DbusHuangLiRequest(QObject *parent) : DbusRequestBase("/com/deepin/dataserver/Calendar/HuangLi", "com.deepin.dataserver.Calendar.HuangLi", QDBusConnection::sessionBus(), parent) { } /** * @brief DbusHuangLiRequest::getFestivalMonth * 按月获取节假日信息 * @param year * @param month */ bool DbusHuangLiRequest::getFestivalMonth(quint32 year, quint32 month, FestivalInfo &festivalInfo) { QDBusPendingReply reply = call("getFestivalMonth", QVariant(year), QVariant(month)); if (reply.isError()) { qCWarning(ClientLogger) << reply.error().message(); return false; } QString json = reply.argumentAt<0>(); QJsonParseError json_error; QJsonDocument jsonDoc(QJsonDocument::fromJson(json.toLocal8Bit(), &json_error)); if (json_error.error != QJsonParseError::NoError) { return false; } // 解析数据 QJsonArray rootarry = jsonDoc.array(); for (int i = 0; i < rootarry.size(); i++) { QJsonObject subObj = rootarry.at(i).toObject(); // 因为是预先定义好的JSON数据格式,所以这里可以这样读取 if (subObj.contains("id")) { festivalInfo.ID = subObj.value("id").toString(); } if (subObj.contains("name")) { festivalInfo.FestivalName = subObj.value("name").toString(); } if (subObj.contains("description")) { festivalInfo.description = subObj.value("description").toString(); } if (subObj.contains("rest")) { festivalInfo.Rest = subObj.value("rest").toString(); } if (subObj.contains("month")) { festivalInfo.month = subObj.value("month").toInt(); } if (subObj.contains("list")) { QJsonArray sublistArray = subObj.value("list").toArray(); for (int j = 0; j < sublistArray.size(); j++) { QJsonObject hsubObj = sublistArray.at(j).toObject(); HolidayInfo dayinfo; if (hsubObj.contains("status")) { dayinfo.status = static_cast(hsubObj.value("status").toInt()); } if (hsubObj.contains("date")) { dayinfo.date = QDate::fromString(hsubObj.value("date").toString(), "yyyy-M-d"); } festivalInfo.listHoliday.append(dayinfo); } } festivalInfo.year = static_cast(year); } return true; } /** * @brief DbusHuangLiRequest::getHuangLiDay * 按天获取黄历信息 * @param year * @param month * @param day */ bool DbusHuangLiRequest::getHuangLiDay(quint32 year, quint32 month, quint32 day, CaHuangLiDayInfo &info) { QDBusPendingReply reply = call("getHuangLiDay", QVariant(year), QVariant(month), QVariant(day)); if (reply.isError()) { qCWarning(ClientLogger) << reply.error().message(); return false; } QString json = reply.argumentAt<0>(); bool isVoild; info.strJsonToInfo(json, isVoild); return isVoild; } /** * @brief DbusHuangLiRequest::getHuangLiMonth * 按月获取黄历信息 * @param year * @param month * @param fill */ bool DbusHuangLiRequest::getHuangLiMonth(quint32 year, quint32 month, bool fill, CaHuangLiMonthInfo &info) { QDBusPendingReply reply = call("getHuangLiMonth", QVariant(year), QVariant(month), QVariant(fill)); if (reply.isError()) { qCWarning(ClientLogger) << reply.error().message(); return false; } QString json = reply.argumentAt<0>(); bool infoIsVaild; info.strJsonToInfo(json, infoIsVaild); return infoIsVaild; } /** * @brief DbusHuangLiRequest::getLunarInfoBySolar * 获取农历信息 * @param year * @param month * @param day */ void DbusHuangLiRequest::getLunarInfoBySolar(quint32 year, quint32 month, quint32 day) { asyncCall("getLunarInfoBySolar", QVariant(year), QVariant(month), QVariant(day)); } /** * @brief DbusHuangLiRequest::getLunarMonthCalendar * 获取农历月日程 * @param year * @param month * @param fill */ void DbusHuangLiRequest::getLunarMonthCalendar(quint32 year, quint32 month, bool fill) { asyncCall("getLunarMonthCalendar", QVariant(year), QVariant(month), QVariant(fill)); } void DbusHuangLiRequest::slotCallFinished(CDBusPendingCallWatcher *call) { if (call->isError()) { qCWarning(ClientLogger) << call->reply().member() << call->error().message(); return; } call->deleteLater(); } dde-calendar-5.14.13/calendar-client/src/dbus/dbushuanglirequest.h000066400000000000000000000021361473346337000250440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSHUANGLIREQUEST_H #define DBUSHUANGLIREQUEST_H #include "dbusrequestbase.h" #include "huangliData/lunardatastruct.h" #include "huangliData/dbusdatastruct.h" //黄历数据请求类 class DbusHuangLiRequest : public DbusRequestBase { Q_OBJECT public: explicit DbusHuangLiRequest(QObject *parent = nullptr); //按月获取节假日信息 bool getFestivalMonth(quint32 year, quint32 month, FestivalInfo&); //按天获取黄历信息 bool getHuangLiDay(quint32 year, quint32 month, quint32 day, CaHuangLiDayInfo &); //按月获取黄历信息 bool getHuangLiMonth(quint32 year, quint32 month, bool fill, CaHuangLiMonthInfo &); //获取农历信息 void getLunarInfoBySolar(quint32 year, quint32 month, quint32 day); //获取农历月日程 void getLunarMonthCalendar(quint32 year, quint32 month, bool fill); signals: public slots: void slotCallFinished(CDBusPendingCallWatcher*) override; }; #endif // DBUSHUANGLIREQUEST_H dde-calendar-5.14.13/calendar-client/src/dbus/dbusrequestbase.cpp000066400000000000000000000067001473346337000246630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusrequestbase.h" #include "commondef.h" #include DbusRequestBase::DbusRequestBase(const QString &path, const QString &interface, const QDBusConnection &connection, QObject *parent) : QDBusAbstractInterface(DBUS_SERVER_NAME, path, interface.toStdString().c_str(), connection, parent) { //关联后端dbus触发信号 if (!QDBusConnection::sessionBus().connect(this->service(), this->path(), this->interface(), "", this, SLOT(slotDbusCall(QDBusMessage)))) { qCWarning(ClientLogger) << "the connection was fail!" << "path: " << this->path() << "interface: " << this->interface(); }; //关联后端dbus触发信号 if (!QDBusConnection::sessionBus().connect(this->service(), this->path(), "org.freedesktop.DBus.Properties", "", this, SLOT(slotDbusCall(QDBusMessage)))) { qCWarning(ClientLogger) << "the connection was fail!" << "path: " << this->path() << "interface: " << this->interface(); }; } void DbusRequestBase::setCallbackFunc(CallbackFunc func) { m_callbackFunc = func; } /** * @brief DbusRequestBase::asyncCall * 异步访问dbus接口 * @param method dbus方法名 * @param args 参数 */ void DbusRequestBase::asyncCall(const QString &method, const QList &args) { QDBusPendingCall async = QDBusAbstractInterface::asyncCall(method, args); CDBusPendingCallWatcher *watcher = new CDBusPendingCallWatcher(async, method, this); //将回调函数放进CallWatcher中,随CallWatcher调用结果返回 watcher->setCallbackFunc(m_callbackFunc); //清楚回调函数,防止多方法调用时混淆 setCallbackFunc(nullptr); connect(watcher, &CDBusPendingCallWatcher::signalCallFinished, this, &DbusRequestBase::slotCallFinished); } /** * @brief DbusRequestBase::asyncCall * 异步访问dbus接口 * @param method dbus方法名 * @param args 参数 */ void DbusRequestBase::asyncCall(const QString &method, const QVariant &arg1, const QVariant &arg2, const QVariant &arg3, const QVariant &arg4, const QVariant &arg5, const QVariant &arg6, const QVariant &arg7, const QVariant &arg8) { asyncCall(method, method, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); } /** * @brief DbusRequestBase::asyncCall * 异步访问dbus接口 * @param method dbus方法名 * @param args 参数 */ void DbusRequestBase::asyncCall(const QString &method, const QString &callName, const QVariant &arg1, const QVariant &arg2, const QVariant &arg3, const QVariant &arg4, const QVariant &arg5, const QVariant &arg6, const QVariant &arg7, const QVariant &arg8) { QDBusPendingCall async = QDBusAbstractInterface::asyncCall(method, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); CDBusPendingCallWatcher *watcher = new CDBusPendingCallWatcher(async, callName, this); //将回调函数放进CallWatcher中,随CallWatcher调用结果返回 watcher->setCallbackFunc(m_callbackFunc); //清楚回调函数,防止多方法调用时混淆 setCallbackFunc(nullptr); connect(watcher, &CDBusPendingCallWatcher::signalCallFinished, this, &DbusRequestBase::slotCallFinished); } /** * @brief slotDbusCall * dbus服务端调用 * @param msg 调用消息 */ void DbusRequestBase::slotDbusCall(const QDBusMessage &msg) { } dde-calendar-5.14.13/calendar-client/src/dbus/dbusrequestbase.h000066400000000000000000000042021473346337000243230ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSREQUESTBASE_H #define DBUSREQUESTBASE_H #include "cdbuspendingcallwatcher.h" #include #include #define DBUS_SERVER_NAME "com.deepin.dataserver.Calendar" //继承QDbus接口类,包装自定义接口访问 class DbusRequestBase : public QDBusAbstractInterface { Q_OBJECT public: explicit DbusRequestBase(const QString &path, const QString &interface, const QDBusConnection &connection = QDBusConnection::sessionBus(), QObject *parent = nullptr); //设置回调函数 void setCallbackFunc(CallbackFunc func); signals: public slots: //dbus服务端调用 virtual void slotDbusCall(const QDBusMessage &msg); //dbus调用完成事件 virtual void slotCallFinished(CDBusPendingCallWatcher*) = 0; protected: //异步调用,包装异步调用事件 void asyncCall(const QString &method, const QList &args); void asyncCall(const QString &method, const QVariant &arg1 = QVariant(), const QVariant &arg2 = QVariant(), const QVariant &arg3 = QVariant(), const QVariant &arg4 = QVariant(), const QVariant &arg5 = QVariant(), const QVariant &arg6 = QVariant(), const QVariant &arg7 = QVariant(), const QVariant &arg8 = QVariant()); void asyncCall(const QString &method, const QString &callName, const QVariant &arg1 = QVariant(), const QVariant &arg2 = QVariant(), const QVariant &arg3 = QVariant(), const QVariant &arg4 = QVariant(), const QVariant &arg5 = QVariant(), const QVariant &arg6 = QVariant(), const QVariant &arg7 = QVariant(), const QVariant &arg8 = QVariant()); private: CallbackFunc m_callbackFunc = nullptr; //回调函数 }; #endif // DBUSREQUESTBASE_H dde-calendar-5.14.13/calendar-client/src/dbus/doanetworkdbus.cpp000066400000000000000000000044231473346337000245150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "doanetworkdbus.h" #include "commondef.h" #include #include #include #include DOANetWorkDBus::DOANetWorkDBus(QObject *parent) : QDBusAbstractInterface(NETWORK_DBUS_NAME, NETWORK_DBUS_PATH, NETWORK_DBUS_INTEERFACENAME, QDBusConnection::sessionBus(), parent) { if (!this->isValid()) { qCWarning(ClientLogger) << "Error connecting remote object, service:" << this->service() << ",path:" << this->path() << ",interface" << this->interface(); } //关联后端dbus触发信号 if (!QDBusConnection::sessionBus().connect(this->service(), this->path(), "org.freedesktop.DBus.Properties", "PropertiesChanged", "sa{sv}as", this, SLOT(propertiesChanged(QDBusMessage)))) { qCWarning(ClientLogger) << "the connection was fail!"; } } /** * @brief getUserName 获取用户名 * @return */ DOANetWorkDBus::NetWorkState DOANetWorkDBus::getNetWorkState() { return getPropertyByName("State").toInt() == 70 ? DOANetWorkDBus::Active : DOANetWorkDBus::Disconnect; } //根据属性名称获取对应属性值 QVariant DOANetWorkDBus::getPropertyByName(const char *porpertyName) { QDBusInterface dbusinterface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); return dbusinterface.property(porpertyName); } //监听服务对象信号 void DOANetWorkDBus::propertiesChanged(const QDBusMessage &msg) { QList arguments = msg.arguments(); // 参数固定长度 if (3 != arguments.count()) return; QString interfaceName = msg.arguments().at(0).toString(); if (interfaceName != this->interface()) return; QVariantMap changedProps = qdbus_cast(arguments.at(1).value()); QStringList keys = changedProps.keys(); foreach (const QString &prop, keys) { if (prop == "State") { int state = changedProps[prop].toInt(); if(70 == state){ emit sign_NetWorkChange(DOANetWorkDBus::Active); }else if(20 == state){ emit sign_NetWorkChange(DOANetWorkDBus::Disconnect); } } } } dde-calendar-5.14.13/calendar-client/src/dbus/doanetworkdbus.h000066400000000000000000000020651473346337000241620ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DOANETWORKDBUS_H #define DOANETWORKDBUS_H #include #define NETWORK_DBUS_INTEERFACENAME "org.deepin.dde.Network1" #define NETWORK_DBUS_NAME "org.deepin.dde.Network1" #define NETWORK_DBUS_PATH "/org/deepin/dde/Network1" class DOANetWorkDBus : public QDBusAbstractInterface { Q_OBJECT public: explicit DOANetWorkDBus(QObject *parent = nullptr); enum NetWorkState { Active = 1, //已连接 Disconnect, //已断开 Connecting, //连接中 unknow //未知 }; Q_ENUM(NetWorkState) /** * @brief getNetWorkState 获取网络状态 * @return */ DOANetWorkDBus::NetWorkState getNetWorkState(); signals: void sign_NetWorkChange(DOANetWorkDBus::NetWorkState); public slots: void propertiesChanged(const QDBusMessage &msg); private: QVariant getPropertyByName(const char *porpertyName); }; #endif // DOANETWORKDBUS_H dde-calendar-5.14.13/calendar-client/src/dbus/exportedinterface.cpp000066400000000000000000000071571473346337000252040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "exportedinterface.h" #include "scheduledatamanage.h" #include "calendarmainwindow.h" #include "cscheduleoperation.h" #include "accountmanager.h" #include "units.h" #include "compatibledata.h" #include #include #include #include ExportedInterface::ExportedInterface(QObject *parent) : Dtk::Core::DUtil::DExportedInterface(parent) { m_object = parent; } QVariant ExportedInterface::invoke(const QString &action, const QString ¶meters) const { //对外接口数据设置 DSchedule::Ptr info; Exportpara para; QString tstr = parameters; CScheduleOperation _scheduleOperation; if (!analysispara(tstr, info, para)) { return QVariant(false); } if (action == "CREATE") { // 创建日程 if (info.isNull()) { return QVariant(false); } bool _createSucc = _scheduleOperation.createSchedule(info); //如果创建失败 if (!_createSucc) { return QVariant(false); } } else if (action == "VIEW") { dynamic_cast(m_object)->viewWindow(para.viewType); } else if (action == "QUERY") { if (gLocalAccountItem) { DSchedule::Map scheduleMap = DSchedule::fromMapString(gLocalAccountItem->querySchedulesByExternal(para.ADTitleName, para.ADStartTime, para.ADEndTime)); QString qstr = DDE_Calendar::getExternalSchedule(scheduleMap); return QVariant(qstr); } else { return ""; } } else if (action == "CANCEL") { //对外接口删除日程 QMap out; //口查询日程 if (gLocalAccountItem && gLocalAccountItem->querySchedulesByExternal(para.ADTitleName, para.ADStartTime, para.ADEndTime, out)) { //删除查询到的日程 QMap::const_iterator _iterator = nullptr; for (_iterator = out.constBegin(); _iterator != out.constEnd(); ++_iterator) { for (int i = 0 ; i < _iterator.value().size(); ++i) { _scheduleOperation.deleteOnlyInfo(_iterator.value().at(i)); } } } else { return QVariant(false); } } return QVariant(true); } bool ExportedInterface::analysispara(QString ¶meters, DSchedule::Ptr &info, Exportpara ¶) const { //如果是创建则info有效 //如果是其他则para有效 QJsonParseError json_error; QJsonDocument jsonDoc(QJsonDocument::fromJson(parameters.toLocal8Bit(), &json_error)); if (json_error.error != QJsonParseError::NoError) { return false; } QJsonObject rootObj = jsonDoc.object(); //数据反序列化 info = DDE_Calendar::getScheduleByExported(parameters); if (rootObj.contains("ViewName")) { para.viewType = rootObj.value("ViewName").toInt(); } if (rootObj.contains("ViewTime")) { para.viewTime = QDateTime::fromString(rootObj.value("ViewTime").toString(), "yyyy-MM-ddThh:mm:ss"); } if (rootObj.contains("ADTitleName")) { para.ADTitleName = rootObj.value("ADTitleName").toString(); } if (rootObj.contains("ADStartTime")) { para.ADStartTime = QDateTime::fromString(rootObj.value("ADStartTime").toString(), "yyyy-MM-ddThh:mm:ss"); } if (rootObj.contains("ADEndTime")) { para.ADEndTime = QDateTime::fromString(rootObj.value("ADEndTime").toString(), "yyyy-MM-ddThh:mm:ss"); } return true; } dde-calendar-5.14.13/calendar-client/src/dbus/exportedinterface.h000066400000000000000000000016571473346337000246500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef EXPORTEDINTERFACE_H #define EXPORTEDINTERFACE_H #include "dschedule.h" #include #include DCORE_USE_NAMESPACE struct Exportpara { int viewType; //视图名称:year,month,week,day对应年、月、周、日视图类型 QDateTime viewTime; //表示需要查看视图上某个时间 QString ADTitleName; QDateTime ADStartTime; QDateTime ADEndTime; }; class ExportedInterface : public Dtk::Core::DUtil::DExportedInterface { public: explicit ExportedInterface(QObject *parent = nullptr); QVariant invoke(const QString &action, const QString ¶meters) const override; private: bool analysispara(QString ¶meters, DSchedule::Ptr &info, Exportpara ¶) const; private: QObject *m_object = nullptr; }; #endif // EXPORTEDINTERFACE_H dde-calendar-5.14.13/calendar-client/src/dbus/org.deepin.dde.ControlCenter.xml000066400000000000000000000002531473346337000270420ustar00rootroot00000000000000 dde-calendar-5.14.13/calendar-client/src/dialog/000077500000000000000000000000001473346337000212555ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/dialog/dcalendarddialog.cpp000066400000000000000000000054511473346337000252270ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dcalendarddialog.h" #include "constants.h" #include "calendarmanage.h" #include "tabletconfig.h" #include DCalendarDDialog::DCalendarDDialog(QWidget *parent) : DDialog(parent) , m_timeFormat(CalendarManager::getInstance()->getTimeFormat()) , m_dateFormat(CalendarManager::getInstance()->getDateFormat()) { connect(CalendarManager::getInstance(), &CalendarManager::signalTimeFormatChanged, this, &DCalendarDDialog::setTimeFormat); connect(CalendarManager::getInstance(), &CalendarManager::signalDateFormatChanged, this, &DCalendarDDialog::setDateFormat); //获取ddialog的标题栏 DTitlebar *titlebar = findChild(); if (titlebar != nullptr) { //设置ddialog的焦点代理为标题栏 this->setFocusProxy(titlebar); } } void DCalendarDDialog::mouseMoveEvent(QMouseEvent *event) { //如果为平板模式使其不可移动 if (TabletConfig::isTablet()) { Q_UNUSED(event); } else { DDialog::mouseMoveEvent(event); } } void DCalendarDDialog::keyPressEvent(QKeyEvent *event) { //如果dtk版本在5.3.0以下调用QDialog 以上调用DDialog #if (DTK_VERSION < DTK_VERSION_CHECK(5, 3, 0, 0)) return QDialog::keyPressEvent(event); #else return DDialog::keyPressEvent(event); #endif } bool DCalendarDDialog::eventFilter(QObject *o, QEvent *e) { //如果dtk版本在5.3.0以下调用QDialog 以上调用DDialog #if (DTK_VERSION < DTK_VERSION_CHECK(5, 3, 0, 0)) return QDialog::eventFilter(o, e); #else return DDialog::eventFilter(o, e); #endif } void DCalendarDDialog::updateDateTimeFormat() { } /** * @brief DCalendarDDialog::setTimeFormat 设置短时间格式,并更新显示 */ void DCalendarDDialog::setTimeFormat(int value) { if (value) { m_timeFormat = "hh:mm"; } else { m_timeFormat = "h:mm"; } updateDateTimeFormat(); } /** * @brief DCalendarDDialog::setTimeFormat 设置短日期格式,并更新显示 */ void DCalendarDDialog::setDateFormat(int value) { switch (value) { case 0: { m_dateFormat = "yyyy/M/d"; } break; case 1: { m_dateFormat = "yyyy-M-d"; } break; case 2: { m_dateFormat = "yyyy.M.d"; } break; case 3: { m_dateFormat = "yyyy/MM/dd"; } break; case 4: { m_dateFormat = "yyyy-MM-dd"; } break; case 5: { m_dateFormat = "yyyy.MM.dd"; } break; case 6: { m_dateFormat = "yy/M/d"; } break; case 7: { m_dateFormat = "yy-M-d"; } break; case 8: { m_dateFormat = "yy.M.d"; } break; default: { m_dateFormat = "yyyy-MM-dd"; } break; } updateDateTimeFormat(); } dde-calendar-5.14.13/calendar-client/src/dialog/dcalendarddialog.h000066400000000000000000000014071473346337000246710ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DCALENDARDDIALOG_H #define DCALENDARDDIALOG_H #include DWIDGET_USE_NAMESPACE class DCalendarDDialog : public DDialog { Q_OBJECT public: explicit DCalendarDDialog(QWidget *parent = nullptr); protected: void mouseMoveEvent(QMouseEvent *event) override; void keyPressEvent(QKeyEvent *event) override; bool eventFilter(QObject *o, QEvent *e) override; virtual void updateDateTimeFormat(); signals: public slots: void setTimeFormat(int value); void setDateFormat(int value); protected: QString m_timeFormat = "hh:mm"; QString m_dateFormat = "yyyy-MM-dd"; }; #endif // DCALENDARDDIALOG_H dde-calendar-5.14.13/calendar-client/src/dialog/myscheduleview.cpp000066400000000000000000000261261473346337000250250ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "myscheduleview.h" #include "scheduledlg.h" #include "scheduledatamanage.h" #include "cdynamicicon.h" #include "constants.h" #include "cscheduleoperation.h" #include "lunarmanager.h" #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CMyScheduleView::CMyScheduleView(const DSchedule::Ptr &schduleInfo, QWidget *parent) : DCalendarDDialog(parent) { setContentsMargins(0, 0, 0, 0); m_scheduleInfo = schduleInfo; initUI(); initConnection(); //根据主题type设置颜色 setLabelTextColor(DGuiApplicationHelper::instance()->themeType()); setFixedSize(400, 160); //设置初始化弹窗内容 updateDateTimeFormat(); focusNextPrevChild(false); slotAccountStateChange(); } void CMyScheduleView::setSchedules(const DSchedule::Ptr &schduleInfo) { m_scheduleInfo = schduleInfo; } void CMyScheduleView::updateFormat() { updateDateTimeFormat(); slotAccountStateChange(); } /** * @brief CMyScheduleView::AutoFeed 字体改变更改界面显示 * @param text */ void CMyScheduleView::slotAutoFeed(const QFont &font) { Q_UNUSED(font) if (nullptr == m_timeLabel || nullptr == m_scheduleLabel) { return; } QString strText = m_scheduleInfo->summary(); QString resultStr = nullptr; QFont labelF; labelF.setWeight(QFont::Medium); labelF = DFontSizeManager::instance()->get(DFontSizeManager::T6, labelF); QFontMetrics fm(labelF); int titlewidth = fm.horizontalAdvance(strText); QStringList strList; QString str; int h = fm.height(); strList.clear(); if (titlewidth < 330) { strList.append(strText); resultStr += strText; } else { for (int i = 0; i < strText.count(); i++) { str += strText.at(i); if (fm.horizontalAdvance(str) > 330) { str.remove(str.count() - 1, 1); strList.append(str); resultStr += str + "\n"; str.clear(); --i; } } strList.append(str); resultStr += str; } if (strList.count() * h > 100) { m_scheduleLabelH = 100; } else { int minH = 17; m_scheduleLabelH = strList.count() * h; m_scheduleLabelH = m_scheduleLabelH >= minH ? m_scheduleLabelH : minH; } //更新控件高度 area->setFixedHeight(m_scheduleLabelH); m_scheduleLabel->setText(resultStr); m_timeLabelH = 26; if (m_scheduleInfo->lunnar()) { QString timeName = m_timeLabel->text(); int index = timeName.indexOf("~"); //重新计算法字符串像素长度 if (index != -1) { timeName[index - 1] = ' '; QFontMetrics fm(m_timeLabel->font()); int textWidth = fm.horizontalAdvance(m_timeLabel->text()); if (textWidth > m_timeLabel->width()) { timeName[index - 1] = '\n'; m_timeLabelH = 58; } else { m_timeLabelH = 26; } } m_timeLabel->setText(timeName); } else { m_timeLabelH = 26; } //更新控件高度 m_timeLabel->setFixedHeight(m_timeLabelH); //更新界面高度 setFixedHeight(m_defaultH + m_timeLabelH + m_scheduleLabelH); } void CMyScheduleView::slotAccountStateChange() { AccountItem::Ptr item = gAccountManager->getAccountItemByScheduleTypeId(m_scheduleInfo->scheduleTypeID()); if (!item) { return; } //根据可同步状态设置删除按钮是否可用 getButtons()[0]->setEnabled(item->isCanSyncShedule()); } /** * @brief setLabelTextColor 设置label文字颜色 * @param type 主题type */ void CMyScheduleView::setLabelTextColor(const int type) { //标题显示颜色 QColor titleColor; //日程显示颜色 QColor scheduleTitleColor; //时间显示颜色 QColor timeColor; if (type == 2) { titleColor = "#C0C6D4"; scheduleTitleColor = "#FFFFFF"; timeColor = "#FFFFFF"; timeColor.setAlphaF(0.7); } else { titleColor = "#001A2E"; scheduleTitleColor = "#000000"; scheduleTitleColor.setAlphaF(0.9); timeColor = "#000000"; timeColor.setAlphaF(0.6); } //设置颜色 setPaletteTextColor(m_Title, titleColor); setPaletteTextColor(m_scheduleLabel, scheduleTitleColor); setPaletteTextColor(m_timeLabel, timeColor); } /** * @brief setPaletteTextColor 设置调色板颜色 * @param widget 需要设置的widget * @param textColor 显示颜色 */ void CMyScheduleView::setPaletteTextColor(QWidget *widget, QColor textColor) { //如果为空指针则退出 if (nullptr == widget) return; DPalette palette = widget->palette(); //设置文字显示颜色 palette.setColor(DPalette::WindowText, textColor); widget->setPalette(palette); } /** * @brief CMyScheduleView::updateDateTimeFormat 更新显示时间格式 */ void CMyScheduleView::updateDateTimeFormat() { //如果为节假日 if (CScheduleOperation::isFestival(m_scheduleInfo)) { m_timeLabel->setText(m_scheduleInfo->dtStart().toString(m_dateFormat)); } else { QString showTime; QString beginName, endName; if (m_scheduleInfo->allDay()) { if (m_scheduleInfo->isMultiDay()) { beginName = getDataByFormat(m_scheduleInfo->dtStart().date(), m_dateFormat); endName = getDataByFormat(m_scheduleInfo->dtEnd().date(), m_dateFormat); showTime = beginName + " ~ " + endName; } else { showTime = getDataByFormat(m_scheduleInfo->dtStart().date(), m_dateFormat); } } else { beginName = getDataByFormat(m_scheduleInfo->dtStart().date(), m_dateFormat) + " " + m_scheduleInfo->dtStart().time().toString(m_timeFormat); endName = getDataByFormat(m_scheduleInfo->dtEnd().date(), m_dateFormat) + " " + m_scheduleInfo->dtEnd().time().toString(m_timeFormat); showTime = beginName + " ~ " + endName; } m_timeLabel->setText(showTime); } slotAutoFeed(); } QString CMyScheduleView::getDataByFormat(const QDate &date, QString format) { QString name = date.toString(format); if (m_scheduleInfo->lunnar()) { //接入农历时间 name += gLunarManager->getHuangLiShortName(date); } return name; } /** * @brief CMyScheduleView::slotBtClick 按钮点击事件 * @param buttonIndex * @param buttonName */ void CMyScheduleView::slotBtClick(int buttonIndex, const QString &buttonName) { Q_UNUSED(buttonName); if (buttonIndex == 0) { //删除日程 if (CScheduleOperation(m_scheduleInfo->scheduleTypeID(), this).deleteSchedule(m_scheduleInfo)) { accept(); } return; } if (buttonIndex == 1) { //编辑日程 CScheduleDlg dlg(0, this); dlg.setData(m_scheduleInfo); if (dlg.exec() == DDialog::Accepted) { accept(); } return; } } /** * @brief CMyScheduleView::initUI 界面初始化 */ void CMyScheduleView::initUI() { //在点击任何对话框上的按钮后不关闭对话框,保证关闭子窗口时不被一起关掉 setOnButtonClickedClose(false); m_Title = new QLabel(this); m_Title->setFixedSize(108, 51); m_Title->setAlignment(Qt::AlignCenter); DFontSizeManager::instance()->bind(m_Title, DFontSizeManager::T5, QFont::DemiBold); //设置日期图标 QIcon t_icon(CDynamicIcon::getInstance()->getPixmap()); setIcon(t_icon); m_Title->setText(tr("My Event")); m_Title->move(137, 0); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->setMargin(0); mainLayout->setSpacing(0); area = new QScrollArea(this); //设置日程显示区域不能选中 area->setFocusPolicy(Qt::FocusPolicy::NoFocus); area->setFrameShape(QFrame::NoFrame); area->setFixedWidth(363); area->setBackgroundRole(QPalette::Background); area->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); area->setWidgetResizable(true); area->setAlignment(Qt::AlignCenter); m_scheduleLabel = new QLabel(this); m_scheduleLabel->setTextFormat(Qt::PlainText); //纯文本格式 m_scheduleLabel->installEventFilter(this); m_scheduleLabel->setFixedWidth(330); m_scheduleLabel->setAlignment(Qt::AlignCenter); DFontSizeManager::instance()->bind(m_scheduleLabel, DFontSizeManager::T6); labelF.setWeight(QFont::Medium); m_scheduleLabel->setFont(labelF); area->setWidget(m_scheduleLabel); mainLayout->addWidget(area); m_timeLabel = new DLabel(this); m_timeLabel->setFixedHeight(26); m_timeLabel->setAlignment(Qt::AlignCenter); QFont timeFont; timeFont.setWeight(QFont::Normal); m_timeLabel->setFont(timeFont); m_timeLabel->setFixedWidth(363); mainLayout->addSpacing(5); mainLayout->addWidget(m_timeLabel); //如果为节假日日程 if (CScheduleOperation::isFestival(m_scheduleInfo)) { addButton(tr("OK", "button"), false, DDialog::ButtonNormal); QAbstractButton *button_ok = getButton(0); button_ok->setFixedSize(360, 36); } else { addButton(tr("Delete", "button"), false, DDialog::ButtonNormal); addButton(tr("Edit", "button"), false, DDialog::ButtonRecommend); for (int i = 0; i < buttonCount(); i++) { QAbstractButton *button = getButton(i); button->setFixedSize(165, 36); } //TODO:如果为不可修改日程则设置删除按钮无效 } //这种中心铺满的weiget,显示日程标题和时间的控件 DWidget *centerWidget = new DWidget(this); centerWidget->setLayout(mainLayout); //获取widget的调色板 DPalette centerWidgetPalette = centerWidget->palette(); //设置背景色为透明 centerWidgetPalette.setColor(DPalette::Background, Qt::transparent); centerWidget->setPalette(centerWidgetPalette); //添加窗口为剧中对齐 addContent(centerWidget, Qt::AlignCenter); } void CMyScheduleView::initConnection() { //关联主题改变事件 QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &CMyScheduleView::setLabelTextColor); //如果为节假日日程 if (CScheduleOperation::isFestival(m_scheduleInfo)) { connect(this, &DDialog::buttonClicked, this, &CMyScheduleView::close); } else { connect(this, &DDialog::buttonClicked, this, &CMyScheduleView::slotBtClick); } QObject::connect(qGuiApp, &DApplication::fontChanged, this, &CMyScheduleView::slotAutoFeed); QShortcut *shortcut = new QShortcut(this); shortcut->setKey(QKeySequence(QLatin1String("ESC"))); connect(shortcut, SIGNAL(activated()), this, SLOT(close())); connect(gAccountManager, &AccountManager::signalAccountStateChange, this, &CMyScheduleView::slotAccountStateChange); } dde-calendar-5.14.13/calendar-client/src/dialog/myscheduleview.h000066400000000000000000000036661473346337000244760ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MYSCHEDULEVIEW_H #define MYSCHEDULEVIEW_H #include "dschedule.h" #include "dcalendarddialog.h" #include #include #include #include #include #include DWIDGET_USE_NAMESPACE /** * @brief The CMyScheduleView class * 日程概括对话框 */ class CMyScheduleView : public DCalendarDDialog { Q_OBJECT public: explicit CMyScheduleView(const DSchedule::Ptr &schduleInfo, QWidget *parent = nullptr); DSchedule::Ptr getSchedules() { return m_scheduleInfo; } void setSchedules(const DSchedule::Ptr &schduleInfo); void updateFormat(); signals: void signalsEditorDelete(int type = 0); public slots: //按钮点击事件 void slotBtClick(int buttonIndex, const QString &buttonName); void slotAutoFeed(const QFont &font = QFont()); //帐户状态更新 void slotAccountStateChange(); private: //界面初始化 void initUI(); void initConnection(); //设置label文字颜色 void setLabelTextColor(const int type); //设置调色板颜色 void setPaletteTextColor(QWidget *widget, QColor textColor); protected: void updateDateTimeFormat() override; private: /** * @brief getDataByFormat * 获取格式化后的事件字符串 * @param format 格式化规则 * @return 格式化后的字符串 */ QString getDataByFormat(const QDate &, QString format); private: QLabel *m_scheduleLabel = nullptr; QLabel *m_timeLabel = nullptr; QLabel *m_Title = nullptr; DSchedule::Ptr m_scheduleInfo; //日程 QScrollArea *area = nullptr; QFont labelF; int m_defaultH = 117; //时间显示高度 int m_timeLabelH = 0; //时间显示高度 int m_scheduleLabelH = 0; //日程详情显示高度 }; #endif // MYSCHEDULEVIEW_H dde-calendar-5.14.13/calendar-client/src/dialog/schedulectrldlg.cpp000066400000000000000000000154601473346337000251370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulectrldlg.h" #include "scheduledlg.h" #include "scheduledatamanage.h" #include "cdynamicicon.h" #include "constants.h" #include #include #include #include #include #include DGUI_USE_NAMESPACE CScheduleCtrlDlg::CScheduleCtrlDlg(QWidget *parent) : DCalendarDDialog(parent) { setContentsMargins(0, 0, 0, 0); initUI(); initConnection(); setTheMe(DGuiApplicationHelper::instance()->themeType()); resize(380, 260); } void CScheduleCtrlDlg::initUI() { //在点击任何对话框上的按钮后不关闭对话框,保证关闭子窗口时不被一起关掉 setOnButtonClickedClose(false); QIcon t_icon(CDynamicIcon::getInstance()->getPixmap());// = QIcon::fromTheme("dde-calendar"); setIcon(t_icon); m_mainBoxLayout = new QVBoxLayout(); m_mainBoxLayout->setMargin(0); m_mainBoxLayout->setSpacing(0); m_firstLabel = new QLabel(); m_firstLabel->setAlignment(Qt::AlignCenter); m_firstLabel->setFixedWidth(350); m_firstLabel->setWordWrap(true); labelF.setWeight(QFont::DemiBold); DFontSizeManager::instance()->bind(m_firstLabel, DFontSizeManager::T6); m_firstLabel->setForegroundRole(DPalette::WindowText); m_firstLabel->setFont(labelF); m_mainBoxLayout->addWidget(m_firstLabel); m_seconLabel = new QLabel(); m_seconLabel->setFixedWidth(350); m_seconLabel->setAlignment(Qt::AlignCenter); DFontSizeManager::instance()->bind(m_seconLabel, DFontSizeManager::T6); m_seconLabel->setForegroundRole(DPalette::WindowText); //设置字重 labelT.setWeight(QFont::Normal); m_seconLabel->setFont(labelT); m_seconLabel->setWordWrap(true); m_mainBoxLayout->addSpacing(3); m_mainBoxLayout->addWidget(m_seconLabel); gwi = new DFrame(this); gwi->setContentsMargins(0, 0, 0, 0); gwi->setLayout(m_mainBoxLayout); DPalette anipa = gwi->palette(); QColor color = "#F8F8F8"; color.setAlphaF(0.0); anipa.setColor(DPalette::Background, color); gwi->setAutoFillBackground(true); gwi->setPalette(anipa); gwi->setBackgroundRole(DPalette::Background); addContent(gwi, Qt::AlignCenter); } void CScheduleCtrlDlg::initConnection() { //关联主题信号 QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &CScheduleCtrlDlg::setTheMe); connect(this, &DDialog::buttonClicked, this, &CScheduleCtrlDlg::buttonJudge); //连接信号和槽 } void CScheduleCtrlDlg::setTheMe(const int type) { //标题文字颜色 QColor titleColor; //提示内容文字颜色 QColor contentColor; if (type == 2) { titleColor = "#FFFFFF"; titleColor.setAlphaF(0.9); contentColor = "#FFFFFF"; contentColor.setAlphaF(0.7); } else { titleColor = "#000000"; titleColor.setAlphaF(0.9); contentColor = "#000000"; contentColor.setAlphaF(0.7); } setPaletteTextColor(m_firstLabel, titleColor); setPaletteTextColor(m_seconLabel, contentColor); } void CScheduleCtrlDlg::setPaletteTextColor(QWidget *widget, QColor textColor) { //如果为空指针则退出 if (nullptr == widget) return; DPalette palette = widget->palette(); //设置文字显示颜色 palette.setColor(DPalette::WindowText, textColor); widget->setPalette(palette); } void CScheduleCtrlDlg::changeEvent(QEvent *event) { Q_UNUSED(event) QFont font; QFontMetrics font_button(font); QFontMetrics font_firstLabel(font); QFontMetrics font_seconLabel(font); int height_firstLabel = (font_firstLabel.horizontalAdvance(m_firstLabel->text()) / 300 + 1) * font_firstLabel.height(); int height_seconLabel = (font_seconLabel.horizontalAdvance(m_seconLabel->text()) / 300 + 1) * font_seconLabel.height(); for (int i = 0; i < buttonCount(); i++) { QAbstractButton *button = getButton(i); QString str = str_btName.at(i); QString text_button = font_button.elidedText(str, Qt::ElideRight, 112); if (str.count() == 2) { button->setText(QString().append(str.at(0)).append(QChar::Nbsp).append(str.at(1))); } else { button->setText(text_button); } } // 在changeEvent里使用setFixedHeight会导致弹出的确认对话框会显示在左上角 // 推测是窗口的问题, 先通过延迟在应用层临时解决 QTimer::singleShot(10, this, [this, height_firstLabel, height_seconLabel]{ setFixedHeight(36 + 48 + height_firstLabel + height_seconLabel + 30); gwi->setFixedHeight(height_firstLabel + height_seconLabel); }); } void CScheduleCtrlDlg::buttonJudge(int id) { m_id = id; accept(); } QAbstractButton *CScheduleCtrlDlg::addPushButton(QString btName, bool type) { addButton(btName, false, DDialog::ButtonNormal); int button_index = getButtonIndexByText(btName); QAbstractButton *button = getButton(button_index); if (type) { button->setFixedHeight(36); button->setFixedWidth(165); } else { button->setFixedHeight(36); button->setFixedWidth(129); } button->setToolTip(btName); str_btName.append(btName); return button; } QAbstractButton *CScheduleCtrlDlg::addsuggestButton(QString btName, bool type) { addButton(btName, false, DDialog::ButtonRecommend); int button_index = getButtonIndexByText(btName); QAbstractButton *suggestButton = getButton(button_index); if (type) { suggestButton->setFixedHeight(36); suggestButton->setFixedWidth(165); } else { suggestButton->setFixedHeight(36); suggestButton->setFixedWidth(129); } suggestButton->setToolTip(btName); str_btName.append(btName); return suggestButton; } QAbstractButton *CScheduleCtrlDlg::addWaringButton(QString btName, bool type) { addButton(btName, false, DDialog::ButtonWarning); int button_index = getButtonIndexByText(btName); QAbstractButton *suggestButton = getButton(button_index); if (type) { suggestButton->setFixedHeight(36); suggestButton->setFixedWidth(165); } else { suggestButton->setFixedHeight(36); suggestButton->setFixedWidth(129); } suggestButton->setToolTip(btName); str_btName.append(btName); return suggestButton; } void CScheduleCtrlDlg::setText(QString str) { m_firstLabel->setText(str); m_firstLabel->setToolTip(str); } void CScheduleCtrlDlg::setInformativeText(QString str) { m_seconLabel->setText(str); m_seconLabel->setToolTip(str); } int CScheduleCtrlDlg::clickButton() { if (m_id < 0 || m_id > buttonCount() - 1) return buttonCount(); return m_id; } dde-calendar-5.14.13/calendar-client/src/dialog/schedulectrldlg.h000066400000000000000000000031711473346337000246000ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSCHEDULECTRLDLG_H #define CSCHEDULECTRLDLG_H #include "dcalendarddialog.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE class CScheduleCtrlDlg : public DCalendarDDialog { Q_OBJECT public: explicit CScheduleCtrlDlg(QWidget *parent = nullptr); QAbstractButton *addPushButton(QString btName, bool type = false); QAbstractButton *addsuggestButton(QString btName, bool type = false); QAbstractButton *addWaringButton(QString btName, bool type = false); void setText(QString str); void setInformativeText(QString str); int clickButton(); private: void initUI(); void initConnection(); /** * @brief setTheMe 根据主题type设置颜色 * @param type 主题type */ void setTheMe(const int type); /** * @brief setPaletteTextColor 设置调色板颜色 * @param widget 需要设置的widget * @param textColor 显示颜色 */ void setPaletteTextColor(QWidget *widget, QColor textColor); protected: void changeEvent(QEvent *event) override; private slots: void buttonJudge(int id); private: QLabel *m_firstLabel = nullptr; QLabel *m_seconLabel = nullptr; int m_id = -1; QVBoxLayout *m_mainBoxLayout = nullptr; DFrame *gwi = nullptr; QFont labelF; QFont labelT; QVector str_btName; }; #endif // CSCHEDULECTRLDLG_H dde-calendar-5.14.13/calendar-client/src/dialog/scheduledlg.cpp000066400000000000000000001662201473346337000242530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduledlg.h" #include "schedulectrldlg.h" #include "scheduledatamanage.h" #include "timeedit.h" #include "constants.h" #include "cscheduleoperation.h" #include "cdynamicicon.h" #include "configsettings.h" #include "accountmanager.h" #include "units.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include #include #include const int dialog_width = 468; //对话框宽度 DGUI_USE_NAMESPACE CScheduleDlg::CScheduleDlg(int type, QWidget *parent, const bool isAllDay) : DCalendarDDialog(parent) , m_createAllDay(isAllDay) { setContentsMargins(0, 0, 0, 0); m_type = type; initUI(); initConnection(); setTabFouseOrder(); slotAccountUpdate(); if (type == 1) { m_titleLabel->setText(tr("New Event")); m_beginDateEdit->setDate(QDate::currentDate()); int hours = QTime::currentTime().hour(); int minnutes = QTime::currentTime().minute() % DDECalendar::QuarterOfAnhourWithMinute; if (minnutes != 0) { minnutes = QTime::currentTime().minute() / DDECalendar::QuarterOfAnhourWithMinute * DDECalendar::QuarterOfAnhourWithMinute + DDECalendar::QuarterOfAnhourWithMinute; } m_beginTimeEdit->setTime(QTime(hours, minnutes)); m_endDateEdit->setDate(QDate::currentDate()); m_endTimeEdit->setTime(QTime(hours, minnutes).addSecs(3600)); } else { m_titleLabel->setText(tr("Edit Event")); } setFixedSize(dialog_width, 561); if (!gAccountManager->getIsSupportUid()) { setFixedSize(dialog_width, 561 - 36); } //焦点设置到输入框 m_textEdit->setFocus(); } CScheduleDlg::~CScheduleDlg() { } void CScheduleDlg::setData(const DSchedule::Ptr &info) { m_scheduleDataInfo = info; if (m_type == 1) { //如果为新建则设置为提示信息 m_textEdit->setPlaceholderText(info->summary()); m_accountItem = gAccountManager->getLocalAccountItem(); } else { //如果为编辑则显示 m_textEdit->setPlainText(info->summary()); //光标移动到文末 m_textEdit->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); m_accountItem = gAccountManager->getAccountItemByScheduleTypeId(info->scheduleTypeID()); //编辑状态下帐户不可切换,因此将帐户选择框置灰 m_accountComBox->setEnabled(false); } if (nullptr != m_accountItem) { //更新帐户下拉框和类型选择框 m_accountComBox->setCurrentText(m_accountItem->getAccount()->accountName()); m_typeComBox->updateJobType(m_accountItem); } else { m_accountItem = gAccountManager->getLocalAccountItem(); } if (m_scheduleDataInfo) { m_typeComBox->setCurrentJobTypeNo(m_scheduleDataInfo->scheduleTypeID()); } m_beginDateEdit->setDate(info->dtStart().date()); m_beginTimeEdit->setTime(info->dtStart().time()); m_endDateEdit->setDate(info->dtEnd().date()); m_endTimeEdit->setTime(info->dtEnd().time()); m_allDayCheckbox->setChecked(info->allDay()); m_endRepeatDate->setMinimumDate(info->dtStart().date()); m_currentDate = info->dtStart(); m_EndDate = info->dtEnd(); if (info->lunnar()) { m_lunarRadioBtn->click(); } else { m_solarRadioBtn->click(); } updateEndTimeListAndTimeDiff(m_currentDate, m_EndDate); slotallDayStateChanged(info->allDay()); //根据是否为农历更新重复选项 updateRepeatCombox(info->lunnar()); initRmindRpeatUI(); setShowState(info->lunnar()); } void CScheduleDlg::setDate(const QDateTime &date) { m_currentDate = date; int hours = date.time().hour(); int minnutes = 0; //取15的整数倍 minnutes = date.time().minute() / DDECalendar::QuarterOfAnhourWithMinute * DDECalendar::QuarterOfAnhourWithMinute; //如果有余数则添加15分钟 minnutes = minnutes + (date.time().minute() % DDECalendar::QuarterOfAnhourWithMinute == 0 ? 0 : 15); if (minnutes == 60) { if (hours + 1 == 24) { m_currentDate.setTime(QTime(0, 0)); m_currentDate = m_currentDate.addDays(1); } else { m_currentDate.setTime(QTime(hours + 1, 0)); } } else { m_currentDate.setTime(QTime(hours, minnutes)); } m_beginDateEdit->setDate(m_currentDate.date()); m_beginTimeEdit->setTime(m_currentDate.time()); QDateTime datetime = m_currentDate.addSecs(3600); m_EndDate = datetime; m_endDateEdit->setDate(datetime.date()); m_endTimeEdit->setTime(m_EndDate.time()); m_endRepeatDate->setMinimumDate(date.date()); updateEndTimeListAndTimeDiff(m_currentDate, m_EndDate); setShowState(false); } void CScheduleDlg::setAllDay(bool flag) { m_allDayCheckbox->setChecked(flag); } /** * @brief CScheduleDlg::clickOkBtn 对话框确定按钮处理 * @return 返回true表示隐藏对话框 false表示不隐藏对话框 */ bool CScheduleDlg::clickOkBtn() { return selectScheduleType(); } /** * @brief CScheduleDlg::selectScheduleType * 选择日程类型 * @return 是否可关闭弹窗 */ bool CScheduleDlg::selectScheduleType() { //编辑状态,需要创建日程 if (m_typeComBox->isEditable()) { DScheduleType::Ptr type; type.reset(new DScheduleType()); type->setTypeID("0"); type->setDisplayName(m_typeComBox->lineEdit()->text()); type->setTypeColor(*m_colorSeletorWideget->getSelectedColorInfo().data()); if (m_bCanCreateType) { m_bCanCreateType = false; //创建日程类型,等待回调 m_accountItem->createJobType(type, [&](CallMessge call) { if (call.code == 0) { //返回值为日程类型id createSchedule(call.msg.toString()); } else { m_bCanCreateType = true; } //关闭本弹窗 this->close(); }); } } else if (m_typeComBox->currentIndex() >= 0) { //选择已有日程,直接创建日程 return createSchedule(m_typeComBox->getCurrentJobTypeNo()); } return false; } /** * @brief CScheduleDlg::createSchedule * 创建日程 * @param scheduleTypeId 日程所属日程类型的id * @return */ bool CScheduleDlg::createSchedule(const QString &scheduleTypeId) { //创建新的日程实例 DSchedule::Ptr schedule; schedule.reset(new DSchedule()); //设置所属日程类型id schedule->setScheduleTypeID(scheduleTypeId); QDateTime beginDateTime, endDateTime; beginDateTime.setDate(m_beginDateEdit->date()); beginDateTime.setTime(m_beginTimeEdit->getTime()); endDateTime.setDate(m_endDateEdit->date()); endDateTime.setTime(m_endTimeEdit->getTime()); schedule->setDtStart(beginDateTime); schedule->setDtEnd(endDateTime); //设置是否为农历日程 switch (m_calendarCategoryRadioGroup->checkedId()) { case 1: //农历日程 schedule->setLunnar(true); break; default: //公历日程 schedule->setLunnar(false); break; } if (m_textEdit->toPlainText().isEmpty()) { schedule->setSummary(m_textEdit->placeholderText()); } else { schedule->setSummary(m_textEdit->toPlainText().trimmed()); } if (schedule->summary().isEmpty()) { return false; } if (beginDateTime > endDateTime) { DCalendarDDialog *prompt = new DCalendarDDialog(this); prompt->setIcon(QIcon(":/icons/deepin/builtin/icons/dde_calendar_warning.svg")); prompt->setMessage(tr("End time must be greater than start time")); prompt->addButton(tr("OK", "button"), true, DDialog::ButtonNormal); prompt->exec(); return false; } schedule->setAllDay(m_allDayCheckbox->isChecked()); //设置提醒规则 DSchedule::AlarmType alarmType; if (schedule->allDay()) { alarmType = static_cast(m_rmindCombox->currentIndex() + 8); } else { alarmType = static_cast(m_rmindCombox->currentIndex()); } schedule->setAlarmType(alarmType); //设置重复规则 DSchedule::RRuleType rruleType; if (schedule->lunnar()) { //0:从不 1:每月 2:每年 if (m_beginrepeatCombox->currentIndex() == 1) { rruleType = DSchedule::RRule_Month; } else if (m_beginrepeatCombox->currentIndex() == 2) { rruleType = DSchedule::RRule_Year; } else { rruleType = DSchedule::RRule_None; } } else { //0:从不 1:每天 2:每个工作日 3:每周 4:每月 5:每年 rruleType = static_cast(m_beginrepeatCombox->currentIndex()); } schedule->setRRuleType(rruleType); if (m_endrepeatCombox->currentIndex() == 1) { //结束与次数 if (m_endrepeattimes->text().isEmpty()) { return false; } schedule->recurrence()->setDuration(m_endrepeattimes->text().toInt() + 1); } else if (m_endrepeatCombox->currentIndex() == 2) { //结束与日期 QDateTime endrpeattime = beginDateTime; endrpeattime.setDate(m_endRepeatDate->date()); if (beginDateTime > endrpeattime) { return false; } schedule->recurrence()->setDuration(0); schedule->recurrence()->setEndDateTime(endrpeattime); } else { //永不 schedule->recurrence()->setDuration(-1); } CScheduleOperation _scheduleOperation(m_accountItem, this); bool res = false; if (m_type == 1) { //创建日程 schedule->setUid("0"); res = _scheduleOperation.createSchedule(schedule); } else if (m_type == 0) { schedule->setUid(m_scheduleDataInfo->uid()); //如果有重复规则则将原来数据的忽略列表添加进来 if (schedule->recurs() && m_scheduleDataInfo->recurs()) { schedule->recurrence()->setExDateTimes(m_scheduleDataInfo->recurrence()->exDateTimes()); } res = _scheduleOperation.changeSchedule(schedule, m_scheduleDataInfo); } return res; } void CScheduleDlg::updateEndTimeListAndTimeDiff(const QDateTime &begin, const QDateTime &end) { //更新是否超过一天标识 updateIsOneMoreDay(begin, end); m_timeDiff = begin.msecsTo(end); updateEndTimeList(begin.time(), !m_isMoreThenOneDay); m_endTimeEdit->setTime(end.time()); m_endTimeEdit->setCurrentText(m_endTimeEdit->lineEdit()->text()); } void CScheduleDlg::updateEndTimeList(const QTime &begin, bool isShowTimeInterval) { m_endTimeEdit->setMineTime(begin); m_endTimeEdit->updateListItem(isShowTimeInterval); } void CScheduleDlg::slotBeginTimeChange() { if (m_currentDate.time() == m_beginTimeEdit->getTime()) return; //根据联动修改结束时间下拉列表内容和结束时间 m_currentDate.setTime(m_beginTimeEdit->getTime()); m_EndDate = m_currentDate.addMSecs(m_timeDiff); //开始时间改变需要更新是否超过一天标识,根据该标识判断结束时间下拉列表是否展示(xxx:xxx hours) //由于结束时间(endTimeEdit)自己不参加联动,所以该标识需要在开始时间中更新 updateIsOneMoreDay(m_currentDate, m_EndDate); updateEndTimeList(m_currentDate.time(), !m_isMoreThenOneDay); m_endTimeEdit->setTime(m_EndDate.time()); m_endDateEdit->setDate(m_EndDate.date()); } void CScheduleDlg::slotEndTimeChange() { if (m_EndDate.time() == m_endTimeEdit->getTime()) { return; } m_EndDate.setTime(m_endTimeEdit->getTime()); //根据结束时间修改联动时间和结束日期 //如果时间没有超过一天 if (!m_isMoreThenOneDay) { //如果时间小于一天则需要根据结束时间(time)是否大于开始时间判断计算结束日期 QTime endTime = m_endTimeEdit->getTime(); if (endTime < m_currentDate.time()) { m_EndDate.setDate(m_currentDate.date().addDays(1)); } else { m_EndDate.setDate(m_currentDate.date()); } m_endDateEdit->setDate(m_EndDate.date()); } m_timeDiff = m_currentDate.msecsTo(m_EndDate); } void CScheduleDlg::slotEndDateChange(const QDate &date) { if (m_EndDate.date() == date) return; //修改联动时间和结束时间下拉列表内容 m_EndDate.setDate(date); // 如果开始时间晚于结束时间,则将结束时间修改为开始时间 if (m_currentDate.msecsTo(m_EndDate) < 0) { m_EndDate = m_currentDate; } updateEndTimeListAndTimeDiff(m_currentDate, m_EndDate); } void CScheduleDlg::slotBtClick(int buttonIndex, const QString &buttonName) { Q_UNUSED(buttonName) //是否隐藏对话框 switch (buttonIndex) { case 0: { //取消 close(); break; } case 1: { //确定 //自动化测试会出现短时间内按钮click2次的情况。添加第一次触发后将保存按钮置灰的设置。 //若保存按钮不启用则不处理 if (getButton(1)->isEnabled() && !this->isHidden()) { m_setAccept = clickOkBtn(); //若新建或编辑成功则将保存按钮置灰 getButton(1)->setEnabled(!m_setAccept); //如果确定创建(修改)成功则关闭对话框 if (m_setAccept) { close(); } else { setFocusProxy(getButton(1)); } } break; } default: break; } } void CScheduleDlg::slotTextChange() { QString textContent = m_textEdit->toPlainText(); int length = textContent.count(); QString tStitlename = textContent; int maxLength = 256; // 最大字符数 //去除回车字符 if (tStitlename.contains("\n")) { //设置纯文本显示原始内容 tStitlename.replace("\n", ""); m_textEdit->setPlainText(tStitlename); //将焦点移动到最后 m_textEdit->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); //因设置text会再次触发textchange信号,在此直接return return; } //如果长度大于最大长度则显示原来的字符 if (length > maxLength) { m_textEdit->setPlainText(m_context); //将焦点移动到最后 m_textEdit->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); return; } setOkBtnEnabled(); m_context = m_textEdit->toPlainText().trimmed(); } void CScheduleDlg::slotendrepeatTextchange() { setOkBtnEnabled(); } void CScheduleDlg::slotBDateEidtInfo(const QDate &date) { m_endRepeatDate->setMinimumDate(date); m_endDateEdit->setMinimumDate(date); m_currentDate.setDate(m_beginDateEdit->date()); m_EndDate.setDate(m_endDateEdit->date()); if (m_EndDate < m_currentDate) { m_endTimeEdit->setTime(m_beginTimeEdit->getTime().addSecs(3600)); m_EndDate.setTime(m_endTimeEdit->getTime()); } //修改联动时间和结束时间下拉列表内容 updateEndTimeListAndTimeDiff(m_currentDate, m_EndDate); } void CScheduleDlg::slotallDayStateChanged(int state) { m_rmindCombox->clear(); if (!state) { m_rmindCombox->addItem(tr("Never")); m_rmindCombox->addItem(tr("At time of event")); m_rmindCombox->addItem(tr("15 minutes before")); m_rmindCombox->addItem(tr("30 minutes before")); m_rmindCombox->addItem(tr("1 hour before")); m_rmindCombox->addItem(tr("1 day before")); m_rmindCombox->addItem(tr("2 days before")); m_rmindCombox->addItem(tr("1 week before")); m_rmindCombox->setCurrentIndex(2); m_beginTimeEdit->setVisible(true); m_endTimeEdit->setVisible(true); if (m_type == 0) { m_beginDateEdit->setDate(m_scheduleDataInfo->dtStart().date()); m_beginTimeEdit->setTime(m_scheduleDataInfo->dtStart().time()); m_endDateEdit->setDate(m_scheduleDataInfo->dtEnd().date()); m_endTimeEdit->setTime(m_scheduleDataInfo->dtEnd().time()); if (m_scheduleDataInfo->dtStart().time() == m_scheduleDataInfo->dtEnd().time() && m_scheduleDataInfo->dtEnd().time().toString() == "00:00:00") { m_endTimeEdit->setTime(QTime(23, 59, 59)); } } else { m_beginDateEdit->setDate(m_currentDate.date()); m_beginTimeEdit->setTime(m_currentDate.time()); m_endDateEdit->setDate(m_EndDate.date()); m_endTimeEdit->setTime(m_EndDate.time()); } } else { m_rmindCombox->addItem(tr("Never")); m_rmindCombox->addItem(tr("On start day (9:00 AM)")); m_rmindCombox->addItem(tr("1 day before")); m_rmindCombox->addItem(tr("2 days before")); m_rmindCombox->addItem(tr("1 week before")); m_rmindCombox->setCurrentIndex(2); m_beginTimeEdit->setVisible(false); m_endTimeEdit->setVisible(false); if (m_type == 0) { m_beginDateEdit->setDate(m_scheduleDataInfo->dtStart().date()); m_beginTimeEdit->setTime(QTime(0, 0)); m_endDateEdit->setDate(m_scheduleDataInfo->dtEnd().date()); m_endTimeEdit->setTime(QTime(23, 59)); } else { m_beginDateEdit->setDate(m_currentDate.date()); m_endDateEdit->setDate(m_EndDate.date()); m_beginTimeEdit->setTime(QTime(0, 0)); m_endTimeEdit->setTime(QTime(23, 59)); } } } void CScheduleDlg::slotbRpeatactivated(int index) { if (index > 0) { m_endrepeatWidget->setVisible(true); } else { m_endrepeatWidget->setVisible(false); } //不论重复日程选哪种模式,结束重复都是从不 m_endrepeatCombox->setCurrentIndex(0); sloteRpeatactivated(0); setOkBtnEnabled(); resize(); } void CScheduleDlg::sloteRpeatactivated(int index) { if (index == 0) { m_endrepeattimesWidget->setVisible(false); m_endRepeatDate->setVisible(false); } else if (index == 1) { m_endrepeattimesWidget->setVisible(true); m_endRepeatDate->setVisible(false); QFont mlabelF; mlabelF.setWeight(QFont::Medium); QFontMetrics fontWidth_endrepeattimesLabel(mlabelF); QString endrepeattimesStr = fontWidth_endrepeattimesLabel.elidedText(tr("time(s)"), Qt::ElideRight, m_endrepeattimesLabel->width()); m_endrepeattimesLabel->setText(endrepeattimesStr); } else { m_endrepeattimesWidget->setVisible(false); m_endRepeatDate->setVisible(true); m_endRepeatDate->setEditCursorPos(0); } setOkBtnEnabled(); } void CScheduleDlg::slotJobComboBoxEditingFinished() { if (m_typeComBox->lineEdit()->text().isEmpty()) { //名称为空 m_typeComBox->showAlertMessage(tr("Enter a name please")); m_typeComBox->setAlert(true); } } void CScheduleDlg::slotAccoutBoxActivated(const QString &text) { m_accountItem = gAccountManager->getAccountItemByAccountName(text); m_typeComBox->updateJobType(m_accountItem); resetColor(m_accountItem); getButtons()[1]->setEnabled(true); //将焦点转移到类型选择框上 m_typeComBox->setFocus(); setShowState(m_lunarRadioBtn->isChecked()); } void CScheduleDlg::signalLogout(DAccount::Type type) { if (DAccount::Account_UnionID == type && gUosAccountItem == m_accountItem) { if (m_type) { //TODO:弹窗提示? qCInfo(ClientLogger) << m_accountComBox->currentText() << "帐户已退出"; getButtons()[1]->setEnabled(false); m_accountItem.reset(nullptr); } else { m_accountComBox->setEnabled(true); m_type = 1; m_titleLabel->setText(tr("New Event")); } } } void CScheduleDlg::slotTypeRpeatactivated(int index) { Q_UNUSED(index); if (m_typeComBox->isEditable()) { m_typeComBox->setIconSize(QSize(0, 0)); m_colorSeletorWideget->show(); } else { //若下拉选择隐藏提醒消息 m_typeComBox->hideAlertMessage(); m_typeComBox->setIconSize(QSize(16, 16)); m_typeEditStatus = false; m_colorSeletorWideget->hide(); } //设置保存按钮状态 setOkBtnEnabled(); resize(); } void CScheduleDlg::slotRadioBtnClicked(int btnId) { //与上一次选项一致不做重置处理 if (m_prevCheckRadioID == btnId) { return; } m_prevCheckRadioID = btnId; bool jobIsLunar = RadioLunarId == btnId; setShowState(jobIsLunar); //更新重复规则下拉显示和保存按钮的显示状态 updateRepeatCombox(jobIsLunar); } void CScheduleDlg::slotBtnAddItemClicked() { m_colorSeletorWideget->show(); m_typeEditStatus = true; //添加日程类型的时候需要判断保存按钮是否可用 setOkBtnEnabled(); resize(); } void CScheduleDlg::slotTypeEditTextChanged(const QString &text) { if (!m_typeEditStatus) { return; } QString tStitlename = text; //去除回车字符 if (tStitlename.contains("\n")) { //设置纯文本显示原始内容 tStitlename.replace("\n", ""); m_typeComBox->setEditText(tStitlename); return; } //最大限制20个字符,超出后过滤掉 if (tStitlename.length() > 20) { m_typeComBox->setEditText(m_TypeContext); return; } else { m_TypeContext = tStitlename; } //如果内容不为空且去除空格内容为空表示为全空格 if (!tStitlename.isEmpty() && tStitlename.trimmed().isEmpty()) { //名称为全空格,返回 m_typeComBox->showAlertMessage(tr("The name can not only contain whitespaces")); m_typeComBox->setAlert(true); } else { //如果日程类型编辑框存在焦点(没有编辑结束)且有警告则取消警告和提示信息 if (m_typeComBox->hasFocus() && m_typeComBox->isAlert()) { m_typeComBox->hideAlertMessage(); m_typeComBox->setAlert(false); } } setOkBtnEnabled(); m_TypeContext = tStitlename; } bool CScheduleDlg::eventFilter(QObject *obj, QEvent *pEvent) { if (obj == m_textEdit) { if (pEvent->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = dynamic_cast(pEvent); if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter) { return true; } if (keyEvent->key() == Qt::Key_Tab) { //如果为tab则切换到全天checkbox m_allDayCheckbox->setFocus(Qt::TabFocusReason); return true; } } } return DCalendarDDialog::eventFilter(obj, pEvent); } void CScheduleDlg::showEvent(QShowEvent *event) { DDialog::showEvent(event); //更新窗口大小 resize(); } void CScheduleDlg::closeEvent(QCloseEvent *event) { DDialog::closeEvent(event); //如果为true 这设置返回值为Accepted 否则设置为Rejected if (m_setAccept) { accept(); } else { reject(); } } void CScheduleDlg::changeEvent(QEvent *event) { Q_UNUSED(event); QFont mlabelF; mlabelF.setWeight(QFont::Medium); QFontMetrics fontWidth_typeLabel(mlabelF); QString str_typelabel = fontWidth_typeLabel.elidedText(tr("Type:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_typeLabel->setText(str_typelabel); QFontMetrics fontWidth_contentlabel(mlabelF); QString str_contentlabel = fontWidth_contentlabel.elidedText(tr("Description:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_contentLabel->setText(str_contentlabel); QFontMetrics fontWidth_allDayLabel(mlabelF); QString str_allDayLabel = fontWidth_allDayLabel.elidedText(tr("All Day:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_adllDayLabel->setText(str_allDayLabel); QFontMetrics fontWidth_beginTimeLabel(mlabelF); QString str_beginTimeLabel = fontWidth_beginTimeLabel.elidedText(tr("Starts:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_beginTimeLabel->setText(str_beginTimeLabel); QFontMetrics fontWidth_endTimeLabel(mlabelF); QString str_endTimeLabel = fontWidth_endTimeLabel.elidedText(tr("Ends:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_endTimeLabel->setText(str_endTimeLabel); QFontMetrics fontWidth_remindSetLabel(mlabelF); QString str_remindSetLabel = fontWidth_remindSetLabel.elidedText(tr("Remind Me:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_remindSetLabel->setText(str_remindSetLabel); QFontMetrics fontWidth_beginRepeatLabel(mlabelF); QString str_beginRepeatLabel = fontWidth_beginRepeatLabel.elidedText(tr("Repeat:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_beginrepeatLabel->setText(str_beginRepeatLabel); QFontMetrics fontWidth_endrepeatLabel(mlabelF); QString str_endrepeatLabel = fontWidth_endrepeatLabel.elidedText(tr("End Repeat:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_endrepeatLabel->setText(str_endrepeatLabel); if (m_endrepeattimesWidget->isVisible()) { //如果结束与次数显示,则根据label大小设置显示内容 QFontMetrics fontWidth_endrepeattimesLabel(mlabelF); QString endrepeattimesStr = fontWidth_endrepeattimesLabel.elidedText(tr("time(s)"), Qt::ElideRight, m_endrepeattimesLabel->width()); m_endrepeattimesLabel->setText(endrepeattimesStr); } } /** * @brief CScheduleDlg::updateDateTimeFormat 更新日期显示格式 */ void CScheduleDlg::updateDateTimeFormat() { m_beginDateEdit->setDisplayFormat(m_dateFormat); m_endDateEdit->setDisplayFormat(m_dateFormat); m_endRepeatDate->setDisplayFormat(m_dateFormat); } void CScheduleDlg::initUI() { const int label_Fixed_Width = 78; const int item_Fixed_Height = 36; //设置对象名称和辅助显示名称 this->setObjectName("ScheduleEditDialog"); this->setAccessibleName("ScheduleEditDialog"); //在点击任何对话框上的按钮后不关闭对话框,保证关闭子窗口时不被一起关掉 setOnButtonClickedClose(false); m_titleLabel = new QLabel(this); QFont titlelabelF; titlelabelF.setWeight(QFont::DemiBold); titlelabelF.setPixelSize(17); m_titleLabel->setFixedSize(148, 51); m_titleLabel->setAlignment(Qt::AlignCenter | Qt::AlignVCenter); m_titleLabel->move(145, 0); m_titleLabel->setFont(titlelabelF); setSpacing(0); QFont mlabelF; mlabelF.setWeight(QFont::Medium); QVBoxLayout *maintlayout = new QVBoxLayout; maintlayout->setMargin(0); maintlayout->setSpacing(10); //帐户 { QHBoxLayout *hlayout = new QHBoxLayout; hlayout->setSpacing(0); hlayout->setMargin(0); DLabel *aLabel = new DLabel(tr("Calendar account:")); aLabel->setToolTip(tr("Calendar account")); DFontSizeManager::instance()->bind(aLabel, DFontSizeManager::T6); aLabel->setElideMode(Qt::ElideRight); aLabel->setFont(mlabelF); aLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); aLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); m_accountComBox = new DComboBox(this); m_accountComBox->setFixedSize(350, item_Fixed_Height); hlayout->addWidget(aLabel); hlayout->addWidget(m_accountComBox); QWidget *widget = new QWidget; widget->setLayout(hlayout); widget->setFixedHeight(item_Fixed_Height); maintlayout->addWidget(widget); if (!gAccountManager->getIsSupportUid()) { widget->hide(); } } //类型 { //使用网格布局 QGridLayout *typelayout = new QGridLayout; typelayout->setSpacing(0); typelayout->setMargin(0); m_typeLabel = new QLabel(); m_typeLabel->setToolTip(tr("Type")); DFontSizeManager::instance()->bind(m_typeLabel, DFontSizeManager::T6); QFontMetrics fontWidth_typeLabel(mlabelF); QString str_typelabel = fontWidth_typeLabel.elidedText(tr("Type:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_typeLabel->setText(str_typelabel); m_typeLabel->setFont(mlabelF); m_typeLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_typeLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); //m_typeComBox = new DComboBox(this); m_typeComBox = new JobTypeComboBox(this); //设置对象名称和辅助显示名称 m_typeComBox->setObjectName("ScheduleTypeCombobox"); m_typeComBox->setAccessibleName("ScheduleTypeCombobox"); m_typeComBox->setFixedSize(350, item_Fixed_Height); m_colorSeletorWideget = new ColorSeletorWidget(); m_colorSeletorWideget->hide(); typelayout->addWidget(m_typeLabel, 0, 0); typelayout->addWidget(m_typeComBox, 0, 1); typelayout->addWidget(m_colorSeletorWideget, 1, 1); //添加垂直间隔 typelayout->setVerticalSpacing(10); QWidget *widget = new QWidget; widget->setLayout(typelayout); maintlayout->addWidget(widget); } //内容 { QHBoxLayout *contentLabellayout = new QHBoxLayout; contentLabellayout->setSpacing(0); contentLabellayout->setMargin(0); m_contentLabel = new QLabel(this); DFontSizeManager::instance()->bind(m_contentLabel, DFontSizeManager::T6); QFontMetrics fontWidth_contentlabel(mlabelF); QString str_contentlabel = fontWidth_contentlabel.elidedText(tr("Description:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_contentLabel->setText(str_contentlabel); m_contentLabel->setFont(mlabelF); m_contentLabel->setToolTip(tr("Description")); m_contentLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_contentLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); m_textEdit = new DTextEdit(this); //设置对象名称和辅助显示名称 m_textEdit->setObjectName("ScheduleTitleEdit"); m_textEdit->setAccessibleName("ScheduleTitleEdit"); m_textEdit->setFixedSize(350, 86); m_textEdit->setAcceptRichText(false); m_textEdit->setPlaceholderText(tr("New Event")); //设置关联控件,用于QTextEdit控件捕获MouseButtonPress等事件 QWidget *mpContentWidget = m_textEdit->viewport(); //设置事件过滤器 m_textEdit->installEventFilter(this); mpContentWidget->installEventFilter(this); contentLabellayout->addWidget(m_contentLabel, 0, Qt::AlignTop); contentLabellayout->addWidget(m_textEdit); contentLabellayout->addStretch(); maintlayout->addLayout(contentLabellayout); } //全天 { QHBoxLayout *alldayLabellayout = new QHBoxLayout; alldayLabellayout->setSpacing(0); alldayLabellayout->setMargin(0); m_adllDayLabel = new QLabel(this); m_adllDayLabel->setToolTip(tr("All Day")); DFontSizeManager::instance()->bind(m_adllDayLabel, DFontSizeManager::T6); QFontMetrics fontWidth_allDayLabel(mlabelF); QString str_allDayLabel = fontWidth_allDayLabel.elidedText(tr("All Day:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_adllDayLabel->setText(str_allDayLabel); m_adllDayLabel->setFont(mlabelF); m_adllDayLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_adllDayLabel->setFixedSize(label_Fixed_Width, 25); m_allDayCheckbox = new DCheckBox(this); m_allDayCheckbox->setFixedHeight(25); //设置对象名称和辅助显示名称 m_allDayCheckbox->setObjectName("AllDayCheckBox"); m_allDayCheckbox->setAccessibleName("AllDayCheckBox"); alldayLabellayout->addWidget(m_adllDayLabel); alldayLabellayout->addWidget(m_allDayCheckbox); QWidget *widget = new QWidget; widget->setLayout(alldayLabellayout); widget->setFixedHeight(25); maintlayout->addWidget(widget); } //时间 { DLabel *tLabel = new DLabel(tr("Time:")); tLabel->setToolTip(tr("Time")); DFontSizeManager::instance()->bind(tLabel, DFontSizeManager::T6); tLabel->setElideMode(Qt::ElideRight); tLabel->setFont(mlabelF); tLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); tLabel->setFixedSize(DDECalendar::NewScheduleLabelWidth, 25); m_solarRadioBtn = new DRadioButton(tr("Solar")); m_lunarRadioBtn = new DRadioButton(tr("Lunar")); m_solarRadioBtn->setMinimumWidth(72); m_lunarRadioBtn->setMinimumWidth(72); m_solarRadioBtn->setFixedHeight(25); m_lunarRadioBtn->setFixedHeight(25); m_calendarCategoryRadioGroup = new QButtonGroup(this); m_calendarCategoryRadioGroup->setExclusive(true); m_calendarCategoryRadioGroup->addButton(m_solarRadioBtn, RadioSolarId); m_calendarCategoryRadioGroup->addButton(m_lunarRadioBtn, RadioLunarId); QHBoxLayout *tLayout = new QHBoxLayout; tLayout->setSpacing(8); tLayout->setMargin(0); tLayout->addWidget(tLabel); tLayout->addWidget(m_solarRadioBtn); tLayout->addWidget(m_lunarRadioBtn); tLayout->addStretch(1); tLayout->setAlignment(m_solarRadioBtn, Qt::AlignVCenter); tLayout->setAlignment(m_lunarRadioBtn, Qt::AlignVCenter); QWidget *widget = new QWidget; widget->setLayout(tLayout); widget->setFixedHeight(25); maintlayout->addWidget(widget); } //开始时间 { QHBoxLayout *beginLabellayout = new QHBoxLayout; beginLabellayout->setSpacing(0); beginLabellayout->setMargin(0); m_beginTimeLabel = new QLabel(this); m_beginTimeLabel->setToolTip(tr("Starts")); DFontSizeManager::instance()->bind(m_beginTimeLabel, DFontSizeManager::T6); QFontMetrics fontWidth_beginTimeLabel(mlabelF); QString str_beginTimeLabel = fontWidth_beginTimeLabel.elidedText(tr("Starts:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_beginTimeLabel->setText(str_beginTimeLabel); m_beginTimeLabel->setFont(mlabelF); m_beginTimeLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_beginTimeLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); m_beginDateEdit = new CDateEdit(this); m_beginDateEdit->setDisplayFormat(m_dateFormat); //设置对象名称和辅助显示名称 m_beginDateEdit->setObjectName("ScheduleBeginDateEdit"); m_beginDateEdit->setAccessibleName("ScheduleBeginDateEdit"); m_beginDateEdit->setFixedSize(200, item_Fixed_Height); m_beginDateEdit->setCalendarPopup(true); m_beginTimeEdit = new CTimeEdit(this); //设置对象名称和辅助显示名称 m_beginTimeEdit->setObjectName("ScheduleBeginTimeEdit"); m_beginTimeEdit->setAccessibleName("ScheduleBeginTimeEdit"); m_beginTimeEdit->setFixedSize(140, item_Fixed_Height); beginLabellayout->addWidget(m_beginTimeLabel); beginLabellayout->addWidget(m_beginDateEdit); beginLabellayout->addSpacing(8); beginLabellayout->addWidget(m_beginTimeEdit); beginLabellayout->addStretch(); QWidget *widget = new QWidget; widget->setLayout(beginLabellayout); widget->setFixedHeight(item_Fixed_Height); maintlayout->addWidget(widget); } //结束时间 { QHBoxLayout *enQLabellayout = new QHBoxLayout; enQLabellayout->setSpacing(0); enQLabellayout->setMargin(0); m_endTimeLabel = new QLabel(this); m_endTimeLabel->setToolTip(tr("Ends")); DFontSizeManager::instance()->bind(m_endTimeLabel, DFontSizeManager::T6); QFontMetrics fontWidth_endTimeLabel(mlabelF); QString str_endTimeLabel = fontWidth_endTimeLabel.elidedText(tr("Ends:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_endTimeLabel->setText(str_endTimeLabel); m_endTimeLabel->setFont(mlabelF); m_endTimeLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_endTimeLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); m_endDateEdit = new CDateEdit(this); m_endDateEdit->setDisplayFormat(m_dateFormat); //设置对象名称和辅助显示名称 m_endDateEdit->setObjectName("ScheduleEndDateEdit"); m_endDateEdit->setAccessibleName("ScheduleEndDateEdit"); m_endDateEdit->setFixedSize(200, item_Fixed_Height); m_endDateEdit->setCalendarPopup(true); m_endTimeEdit = new CTimeEdit(this); //设置对象名称和辅助显示名称 m_endTimeEdit->setObjectName("ScheduleEndTimeEdit"); m_endTimeEdit->setAccessibleName("ScheduleEndTimeEdit"); m_endTimeEdit->setFixedSize(140, item_Fixed_Height); enQLabellayout->addWidget(m_endTimeLabel); enQLabellayout->addWidget(m_endDateEdit); enQLabellayout->addSpacing(8); enQLabellayout->addWidget(m_endTimeEdit); enQLabellayout->addStretch(); QWidget *widget = new QWidget; widget->setLayout(enQLabellayout); widget->setFixedHeight(item_Fixed_Height); maintlayout->addWidget(widget); } //提醒 { QHBoxLayout *rminQLabellayout = new QHBoxLayout; rminQLabellayout->setSpacing(0); rminQLabellayout->setMargin(0); m_remindSetLabel = new QLabel(); DFontSizeManager::instance()->bind(m_remindSetLabel, DFontSizeManager::T6); QFontMetrics fontWidth_remindSetLabel(mlabelF); QString str_remindSetLabel = fontWidth_remindSetLabel.elidedText(tr("Remind Me:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_remindSetLabel->setToolTip(tr("Remind Me")); m_remindSetLabel->setText(str_remindSetLabel); m_remindSetLabel->setFont(mlabelF); m_remindSetLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_remindSetLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); m_rmindCombox = new DComboBox(this); //设置对象名称和辅助显示名称 m_rmindCombox->setObjectName("RmindComboBox"); m_rmindCombox->setAccessibleName("RmindComboBox"); m_rmindCombox->setFixedSize(200, item_Fixed_Height); m_rmindCombox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); rminQLabellayout->addWidget(m_remindSetLabel); rminQLabellayout->addWidget(m_rmindCombox); rminQLabellayout->addStretch(); QWidget *widget = new QWidget; widget->setLayout(rminQLabellayout); widget->setFixedHeight(item_Fixed_Height); maintlayout->addWidget(widget); } //重复 { QHBoxLayout *repeatLabellayout = new QHBoxLayout; repeatLabellayout->setSpacing(0); repeatLabellayout->setMargin(0); m_beginrepeatLabel = new QLabel(); m_beginrepeatLabel->setToolTip(tr("Repeat")); DFontSizeManager::instance()->bind(m_beginrepeatLabel, DFontSizeManager::T6); QFontMetrics fontWidth_beginRepeatLabel(mlabelF); QString str_beginRepeatLabel = fontWidth_beginRepeatLabel.elidedText(tr("Repeat:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_beginrepeatLabel->setText(str_beginRepeatLabel); m_beginrepeatLabel->setFont(mlabelF); m_beginrepeatLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_beginrepeatLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); m_beginrepeatCombox = new DComboBox(this); //设置对象名称和辅助显示名称 m_beginrepeatCombox->setObjectName("BeginRepeatComboBox"); m_beginrepeatCombox->setAccessibleName("BeginRepeatComboBox"); m_beginrepeatCombox->setFixedSize(200, item_Fixed_Height); m_beginrepeatCombox->addItem(tr("Never")); m_beginrepeatCombox->addItem(tr("Daily")); m_beginrepeatCombox->addItem(tr("Weekdays")); m_beginrepeatCombox->addItem(tr("Weekly")); m_beginrepeatCombox->addItem(tr("Monthly")); m_beginrepeatCombox->addItem(tr("Yearly")); repeatLabellayout->addWidget(m_beginrepeatLabel); repeatLabellayout->addWidget(m_beginrepeatCombox); repeatLabellayout->addStretch(); QWidget *widget = new QWidget; widget->setLayout(repeatLabellayout); widget->setFixedHeight(item_Fixed_Height); maintlayout->addWidget(widget); } //结束重复 { QHBoxLayout *endrepeatLabellayout = new QHBoxLayout; endrepeatLabellayout->setSpacing(0); endrepeatLabellayout->setMargin(0); m_endrepeatLabel = new QLabel(); DFontSizeManager::instance()->bind(m_endrepeatLabel, DFontSizeManager::T6); QFontMetrics fontWidth_endrepeatLabel(mlabelF); QString str_endrepeatLabel = fontWidth_endrepeatLabel.elidedText(tr("End Repeat:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_endrepeatLabel->setToolTip(tr("End Repeat")); m_endrepeatLabel->setText(str_endrepeatLabel); m_endrepeatLabel->setFont(mlabelF); m_endrepeatLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_endrepeatLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); m_endrepeatCombox = new DComboBox(this); //设置对象名称和辅助显示名称 m_endrepeatCombox->setObjectName("EndRepeatComboBox"); m_endrepeatCombox->setAccessibleName("EndRepeatComboBox"); m_endrepeatCombox->setFixedSize(200, item_Fixed_Height); m_endrepeatCombox->addItem(tr("Never")); m_endrepeatCombox->addItem(tr("After")); m_endrepeatCombox->addItem(tr("On")); endrepeatLabellayout->addWidget(m_endrepeatLabel); endrepeatLabellayout->addWidget(m_endrepeatCombox); endrepeatLabellayout->addSpacing(8); QHBoxLayout *endrepeattimeslayout = new QHBoxLayout; endrepeattimeslayout->setSpacing(0); endrepeattimeslayout->setMargin(0); endrepeattimeslayout->setContentsMargins(0, 0, 0, 0); m_endrepeattimes = new DLineEdit(this); //设置对象名称和辅助显示名称 m_endrepeattimes->setObjectName("EndRepeatTimeEidt"); m_endrepeattimes->setAccessibleName("EndRepeatTimeEidt"); m_endrepeattimes->setFixedSize(71, item_Fixed_Height); m_endrepeattimes->setText(QString::number(10)); m_endrepeattimes->setClearButtonEnabled(false); QRegExp rx("^[1-9]\\d{0,2}$"); QValidator *validator = new QRegExpValidator(rx, this); m_endrepeattimes->lineEdit()->setValidator(validator); m_endrepeattimesLabel = new QLabel(tr("time(s)")); m_endrepeattimesLabel->setToolTip(tr("time(s)")); m_endrepeattimesLabel->setFont(mlabelF); m_endrepeattimesLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_endrepeattimesLabel->setFixedHeight(item_Fixed_Height); endrepeattimeslayout->addWidget(m_endrepeattimes); endrepeattimeslayout->addWidget(m_endrepeattimesLabel); m_endrepeattimesWidget = new DWidget; //设置对象名称和辅助显示名称 m_endrepeattimesWidget->setObjectName("EndRepeatTimeWidget"); m_endrepeattimesWidget->setAccessibleName("EndRepeatTimeWidget"); m_endrepeattimesWidget->setLayout(endrepeattimeslayout); m_endrepeattimesWidget->setVisible(false); m_endrepeattimesWidget->setFixedSize(140, item_Fixed_Height); endrepeatLabellayout->addWidget(m_endrepeattimesWidget); m_endRepeatDate = new CDateEdit; //设置对象名称和辅助显示名称 m_endRepeatDate->setObjectName("EndRepeatDateEdit"); m_endRepeatDate->setAccessibleName("EndRepeatDateEdit"); m_endRepeatDate->setCalendarPopup(true); m_endRepeatDate->setFixedSize(140, item_Fixed_Height); m_endRepeatDate->setDate(QDate::currentDate()); m_endRepeatDate->setDisplayFormat(m_dateFormat); m_endRepeatDate->setCurrentSectionIndex(2); QFont enddatefont; enddatefont.setWeight(QFont::Medium); m_endRepeatDate->setFont(enddatefont); endrepeatLabellayout->addWidget(m_endRepeatDate); endrepeatLabellayout->addStretch(); m_endRepeatDate->setVisible(false); //设置最大日期 m_endRepeatDate->setMaximumDate(QDate(2100, 12, 31)); m_endrepeatWidget = new DWidget; //设置对象名称和辅助显示名称 m_endrepeatWidget->setObjectName("EndRepeatDateWidget"); m_endrepeatWidget->setAccessibleName("EndRepeatDateWidget"); m_endrepeatWidget->setLayout(endrepeatLabellayout); m_endrepeatWidget->setFixedHeight(item_Fixed_Height); maintlayout->addWidget(m_endrepeatWidget); m_endrepeatWidget->setVisible(false); } m_gwi = new DFrame(this); m_gwi->setFrameShape(QFrame::NoFrame); m_gwi->setLayout(maintlayout); addContent(m_gwi, Qt::AlignCenter); initDateEdit(); if (m_type == 1) slotallDayStateChanged(0); //添加按钮 addButton(tr("Cancel", "button")); addButton(tr("Save", "button"), false, DDialog::ButtonRecommend); for (int i = 0; i < buttonCount(); i++) { QAbstractButton *button = getButton(i); button->setFixedSize(189, 36); } } void CScheduleDlg::initConnection() { QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &CScheduleDlg::setTheMe); connect(this, &DDialog::buttonClicked, this, &CScheduleDlg::slotBtClick); connect(m_textEdit, &DTextEdit::textChanged, this, &CScheduleDlg::slotTextChange); connect(m_endrepeattimes, &DLineEdit::textChanged, this, &CScheduleDlg::slotendrepeatTextchange); connect(m_allDayCheckbox, &DCheckBox::stateChanged, this, &CScheduleDlg::slotallDayStateChanged); connect(m_beginrepeatCombox, QOverload::of(&QComboBox::activated), this, &CScheduleDlg::slotbRpeatactivated); connect(m_endrepeatCombox, QOverload::of(&QComboBox::activated), this, &CScheduleDlg::sloteRpeatactivated); connect(m_typeComBox, QOverload::of(&QComboBox::activated), this, &CScheduleDlg::slotTypeRpeatactivated); connect(m_accountComBox, &QComboBox::textActivated, this, &CScheduleDlg::slotAccoutBoxActivated); connect(m_beginDateEdit, &DDateEdit::userDateChanged, this, &CScheduleDlg::slotBDateEidtInfo); QShortcut *shortcut = new QShortcut(this); shortcut->setKey(QKeySequence(QLatin1String("ESC"))); connect(shortcut, SIGNAL(activated()), this, SLOT(close())); connect(m_beginTimeEdit, &CTimeEdit::signaleditingFinished, this, &CScheduleDlg::slotBeginTimeChange); connect(m_endTimeEdit, &CTimeEdit::signaleditingFinished, this, &CScheduleDlg::slotEndTimeChange); connect(m_endDateEdit, &QDateEdit::userDateChanged, this, &CScheduleDlg::slotEndDateChange); connect(m_calendarCategoryRadioGroup, &QButtonGroup::idClicked, this, &CScheduleDlg::slotRadioBtnClicked); connect(m_typeComBox, &JobTypeComboBox::signalAddTypeBtnClicked, this, &CScheduleDlg::slotBtnAddItemClicked); connect(m_typeComBox, &JobTypeComboBox::editTextChanged, this, &CScheduleDlg::slotTypeEditTextChanged); connect(m_typeComBox, &JobTypeComboBox::editingFinished, this, &CScheduleDlg::slotJobComboBoxEditingFinished); connect(gAccountManager, &AccountManager::signalLogout, this, &CScheduleDlg::signalLogout); connect(gAccountManager, &AccountManager::signalAccountUpdate, this, &CScheduleDlg::slotAccountUpdate); connect(gAccountManager, &AccountManager::signalAccountStateChange, this, &CScheduleDlg::slotAccountStateChange); } void CScheduleDlg::slotAccountUpdate() { m_accountComBox->clear(); QList accountList = gAccountManager->getAccountList(); for (AccountItem::Ptr p : accountList) { m_accountComBox->addItem(p->getAccount()->accountName()); } initJobTypeComboBox(); } /** * @brief CScheduleDlg::slotAccountStateChange * 帐户状态发生改变,刷新界面显示 */ void CScheduleDlg::slotAccountStateChange() { setShowState(m_lunarRadioBtn->isChecked()); } void CScheduleDlg::initDateEdit() { m_beginDateEdit->setMinimumDate(QDate(DDECalendar::QueryEarliestYear, 1, 1)); // 0天 m_beginDateEdit->setMaximumDate(QDate(DDECalendar::QueryLatestYear, 12, 31)); m_endDateEdit->setMinimumDate(QDate(DDECalendar::QueryEarliestYear, 1, 1)); // 0天 m_endDateEdit->setMaximumDate(QDate(DDECalendar::QueryLatestYear, 12, 31)); return; } void CScheduleDlg::initJobTypeComboBox() { m_accountItem = gAccountManager->getAccountItemByAccountName(m_accountComBox->currentText()); m_typeComBox->updateJobType(m_accountItem); resetColor(m_accountItem); } void CScheduleDlg::initRmindRpeatUI() { //提醒规则 if (m_scheduleDataInfo->allDay()) { m_rmindCombox->setCurrentIndex(m_scheduleDataInfo->getAlarmType() - 8); } else { m_rmindCombox->setCurrentIndex(m_scheduleDataInfo->getAlarmType()); } //重复规则 if (m_scheduleDataInfo->lunnar()) { //如果为农历 switch (m_scheduleDataInfo->getRRuleType()) { case DSchedule::RRule_Month: m_beginrepeatCombox->setCurrentIndex(1); break; case DSchedule::RRule_Year: m_beginrepeatCombox->setCurrentIndex(2); break; default: m_beginrepeatCombox->setCurrentIndex(0); break; } } else { //如果为公历 m_beginrepeatCombox->setCurrentIndex(m_scheduleDataInfo->getRRuleType()); } slotbRpeatactivated(m_beginrepeatCombox->currentIndex()); if (m_scheduleDataInfo->recurrence()->duration() < 0) { //永不 m_endrepeatCombox->setCurrentIndex(0); } else if (m_scheduleDataInfo->recurrence()->duration() == 0) { //结束于日期 m_endrepeatCombox->setCurrentIndex(2); m_endRepeatDate->setDate(m_scheduleDataInfo->recurrence()->endDateTime().date()); } else { //结束与次数 m_endrepeatCombox->setCurrentIndex(1); m_endrepeattimes->setText(QString::number(m_scheduleDataInfo->recurrence()->duration() - 1)); } sloteRpeatactivated(m_endrepeatCombox->currentIndex()); } void CScheduleDlg::setTheMe(const int type) { //日程标题编辑框文字颜色 QColor titleColor; if (type == 2) { titleColor = "#C0C6D4"; } else { titleColor = "#414D68"; } DPalette pa = m_textEdit->palette(); //设置颜色 pa.setColor(DPalette::Text, titleColor); m_textEdit->setPalette(pa); } /** * @brief CScheduleDlg::setTabFouseOrder * 设置tab顺序 */ void CScheduleDlg::setTabFouseOrder() { setTabOrder(m_typeComBox, m_textEdit); setTabOrder(m_textEdit, m_allDayCheckbox); setTabOrder(m_allDayCheckbox, m_solarRadioBtn); setTabOrder(m_solarRadioBtn, m_lunarRadioBtn); setTabOrder(m_lunarRadioBtn, m_beginDateEdit); setTabOrder(m_beginDateEdit, m_beginTimeEdit); // setTabOrder(m_beginTimeEdit, m_endDateEdit); setTabOrder(m_endDateEdit, m_endTimeEdit); // setTabOrder(m_endTimeEdit, m_rmindCombox); setTabOrder(m_rmindCombox, m_beginrepeatCombox); setTabOrder(m_beginrepeatCombox, m_endrepeatCombox); //结束于次数,设置tab顺序 //如果为重复日程 if (!m_scheduleDataInfo.isNull() && m_scheduleDataInfo->getRRuleType() != DSchedule::RRule_None) { //如果为结束于次数 if (m_scheduleDataInfo->recurrence()->duration() > 0) { setTabOrder(m_endrepeatCombox, m_endrepeattimes); } else if (m_scheduleDataInfo->recurrence()->duration() == 0) { setTabOrder(m_endrepeatCombox, m_endRepeatDate); } } } void CScheduleDlg::updateIsOneMoreDay(const QDateTime &begin, const QDateTime &end) { // 一天毫秒数 static qint64 oneDayMses = 24 * 60 * 60 * 1000; m_isMoreThenOneDay = begin.msecsTo(end) >= oneDayMses; } void CScheduleDlg::updateRepeatCombox(bool isLunar) { if (nullptr == m_beginrepeatCombox) { return; } m_beginrepeatCombox->clear(); if (isLunar) { m_beginrepeatCombox->addItem(tr("Never")); m_beginrepeatCombox->addItem(tr("Monthly")); m_beginrepeatCombox->addItem(tr("Yearly")); } else { m_beginrepeatCombox->addItem(tr("Never")); m_beginrepeatCombox->addItem(tr("Daily")); m_beginrepeatCombox->addItem(tr("Weekdays")); m_beginrepeatCombox->addItem(tr("Weekly")); m_beginrepeatCombox->addItem(tr("Monthly")); m_beginrepeatCombox->addItem(tr("Yearly")); } //重置重复规则 m_beginrepeatCombox->setCurrentIndex(0); //默认选择第一个 slotbRpeatactivated(0); //更新“结束重复”状态 } /** * @brief CScheduleDlg::isShowLunar * 系统语言检查,根据语言类型更改控件状态和显示状态,规则如下 * 中文环境下所有功能正常显示 */ bool CScheduleDlg::isShowLunar() { return QLocale::system().name().startsWith("zh_"); } /** * @brief CScheduleDlg::setShowState * @param jobIsLunar * 非中文环境下若新建日程则不农历按钮置灰不可选 * 非中文环境下若编辑农历日程则仅公历按钮可选,其他的都置灰,当选择公历后,控件都可使用 */ void CScheduleDlg::setShowState(bool jobIsLunar) { m_solarRadioBtn->setEnabled(true); m_lunarRadioBtn->setEnabled(true); setWidgetEnabled(true); getButton(1)->setEnabled(true); if (!m_accountItem || !m_accountItem->isCanSyncShedule()) { //不可同步日程,除帐户选择外其他的控件都置灰 m_solarRadioBtn->setEnabled(false); m_lunarRadioBtn->setEnabled(false); setWidgetEnabled(false); getButton(1)->setEnabled(false); } else if (isShowLunar()) { //如果不显示农历 m_lunarRadioBtn->setEnabled(true); m_beginDateEdit->setLunarCalendarStatus(jobIsLunar); m_endDateEdit->setLunarCalendarStatus(jobIsLunar); m_endRepeatDate->setLunarCalendarStatus(jobIsLunar); } else { //在不显示农历环境下,取消农历显示 m_beginDateEdit->setLunarCalendarStatus(false); m_endDateEdit->setLunarCalendarStatus(false); m_endRepeatDate->setLunarCalendarStatus(false); m_lunarRadioBtn->setEnabled(false); //在不显示农历情况下,需要根据编辑日程是否为农历日程来判断显示状态 setWidgetEnabled(!jobIsLunar); //只有在不显示农历情况下才会根据是否显示农历来设置按钮状态 //在不显示农历情况下是无法切换到农历的,所以只有在切换公历和编辑日程时才会设置 getButton(1)->setEnabled(!jobIsLunar); } if (jobIsLunar) { //为农历日程 m_lunarRadioBtn->setChecked(true); } else { //公历日程 m_solarRadioBtn->setChecked(true); } } void CScheduleDlg::setWidgetEnabled(bool isEnabled) { m_typeComBox->setEnabled(isEnabled); m_textEdit->setEnabled(isEnabled); m_allDayCheckbox->setEnabled(isEnabled); m_beginDateEdit->setEnabled(isEnabled); m_beginTimeEdit->setEnabled(isEnabled); m_endDateEdit->setEnabled(isEnabled); m_endTimeEdit->setEnabled(isEnabled); m_rmindCombox->setEnabled(isEnabled); m_beginrepeatCombox->setEnabled(isEnabled); m_endrepeatCombox->setEnabled(isEnabled); m_endrepeattimes->setEnabled(isEnabled); m_endRepeatDate->setEnabled(isEnabled); } void CScheduleDlg::resetColor(const AccountItem::Ptr &account) { m_colorSeletorWideget->resetColorButton(account); //将用户上一次选择的自定义颜色添加进去 QString colorName = CConfigSettings::getInstance()->value("LastUserColor", "").toString(); if (!colorName.isEmpty()) { //设置颜色 DTypeColor::Ptr typeColor; typeColor.reset(new DTypeColor); typeColor->setColorCode(colorName); typeColor->setPrivilege(DTypeColor::PriUser); m_colorSeletorWideget->setUserColor(typeColor); } //选中上一次选中的颜色 QVariant colorId = CConfigSettings::getInstance()->value("LastSysColorTypeNo", -1); int colorNum = 0; if (colorId.type() == QVariant::Int) { //如果是int型表示为旧颜色编号 colorNum = colorId.toInt(); } else { QString &&colorIdStr = colorId.toString(); //如果都为空表示为初始状态,则选中第一个 if (colorName.isEmpty() && colorIdStr.isEmpty()) { colorNum = -1; } else if (!colorIdStr.isEmpty()) { //如果颜色id不为空则表示颜色为内置颜色 colorNum = GTypeColor.keys().indexOf(colorIdStr); } else { colorNum = 9; } } m_colorSeletorWideget->setSelectedColorById(colorNum); } void CScheduleDlg::resize() { int h = 0; if (m_endrepeatWidget->isVisible()) { h += 36 + 10; } if (m_colorSeletorWideget->isVisible()) { h += 18 + 10; } if (!gAccountManager->getIsSupportUid()) { h -= 36; } //573: 默认界面高度, h: 新增控件高度 setFixedSize(dialog_width, 573 + h); } void CScheduleDlg::setOkBtnEnabled() { QAbstractButton *m_OkBt = getButton(1); //根据类型输入框的内容判断保存按钮是否有效 if (m_OkBt != nullptr && m_typeComBox->lineEdit() != nullptr) { const QString &typeStr = m_typeComBox->lineEdit()->text(); if (typeStr.isEmpty() || typeStr.trimmed().isEmpty()) { m_OkBt->setEnabled(false); //若内容无效直接退出,不判断结束次数是否为空 return; } else { m_OkBt->setEnabled(true); } } //如果结束与次数为空,则保存按钮置灰 if (m_beginrepeatCombox->currentIndex() > 0 && m_endrepeatCombox->currentIndex() == 1) { m_OkBt->setEnabled(!m_endrepeattimes->text().isEmpty()); } else { //日期 //永不 m_OkBt->setEnabled(true); } if (!m_textEdit->toPlainText().isEmpty() && m_textEdit->toPlainText().trimmed().isEmpty()) { m_OkBt->setEnabled(false); } else { m_OkBt->setEnabled(true); } } dde-calendar-5.14.13/calendar-client/src/dialog/scheduledlg.h000066400000000000000000000155431473346337000237210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEDLG_H #define SCHEDULEDLG_H #include "dschedule.h" #include "dcalendarddialog.h" #include "cdateedit.h" #include "jobtypecombobox.h" #include "colorseletorwidget.h" #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class CTimeEdit; class CScheduleDlg : public DCalendarDDialog { Q_OBJECT public: enum ButtonId { RadioSolarId = 0, //公历选择按钮id RadioLunarId //农历选择按钮id }; CScheduleDlg(int type, QWidget *parent = nullptr, const bool isAllDay = true); ~CScheduleDlg() override; void setData(const DSchedule::Ptr &info); void setDate(const QDateTime &date); void setAllDay(bool flag); private: //确定按钮处理 bool clickOkBtn(); //选择日程类型 bool selectScheduleType(); //创建日程 bool createSchedule(const QString& scheduleTypeId); /** * @brief updateEndTimeListAndTimeDiff 更新结束时间(time),结束时间下拉列表和开始时间和结束时间差 * @param begin 开始时间(DateTime) * @param end 结束时间 (DateTime) */ void updateEndTimeListAndTimeDiff(const QDateTime &begin, const QDateTime &end); /** * @brief updateEndTimeList 更新结束时间下拉列表 * @param begin 开始时间(time) * @param isShowTimeInterval 是否显示时间偏移 */ void updateEndTimeList(const QTime &begin, bool isShowTimeInterval); signals: void signalScheduleUpdate(int id = 0); public slots: /** * @brief 开始时间改变 * */ void slotBeginTimeChange(); /** * @brief 结束时间改变 * */ void slotEndTimeChange(); /** * @brief 结束日期改变 * */ void slotEndDateChange(const QDate &date); /** * @brief slotRadioBtnClicked * 选择按钮控件点击时间 * @param btnId 控件id */ void slotRadioBtnClicked(int btnId); /** * @brief slotBtnAddItemClicked * 添加类型事件 */ void slotBtnAddItemClicked(); /** * @brief slotTypeEditTextChanged * 类型下拉选择框文本改变事件 */ void slotTypeEditTextChanged(const QString &); void slotTypeRpeatactivated(int index); //对话框按钮点击处理 void slotBtClick(int buttonIndex, const QString &buttonName); void slotTextChange(); void slotendrepeatTextchange(); void slotBDateEidtInfo(const QDate &date); void slotallDayStateChanged(int state); void slotbRpeatactivated(int index); void sloteRpeatactivated(int index); void slotJobComboBoxEditingFinished(); void slotAccoutBoxActivated(const QString &text); //帐户登出信号 void signalLogout(DAccount::Type); //帐户信息更新 void slotAccountUpdate(); //帐户状态 void slotAccountStateChange(); protected: bool eventFilter(QObject *obj, QEvent *pEvent) override; void showEvent(QShowEvent *event) override; void closeEvent(QCloseEvent *event) override; void changeEvent(QEvent *event) override; void updateDateTimeFormat() override; private: void initUI(); void resetColor(const AccountItem::Ptr&); void initConnection(); void initDateEdit(); void initJobTypeComboBox(); void initRmindRpeatUI(); /** * @brief setTheMe 根据主题type设置颜色 * @param type 主题type */ void setTheMe(const int type); //设置tab顺序 void setTabFouseOrder(); /** * @brief updateIsOneMoreDay 更新开始时间与结束时间标识是否超过一天 * @param begin 开始时间(datetime) * @param end 结束时间(datetime) */ void updateIsOneMoreDay(const QDateTime &begin, const QDateTime &end); /** * @brief updateRepeatCombox * 更新重复下拉列表 * @param isLunar 是否是农历 true:是 false:不是 */ void updateRepeatCombox(bool isLunar = false); /** * @brief isShowLunar * 系统语言检查,根据语言类型判断是否显示农历信息 */ bool isShowLunar(); /** * @brief setShowState 设置显示状态 * @param jobIsLunar 日程是否为农历 */ void setShowState(bool jobIsLunar); void setWidgetEnabled(bool isEnabled); void resize(); /** * @brief setOkBtnEnabled 根据选项设置保存按钮是否有效 */ void setOkBtnEnabled(); private: DComboBox *m_accountComBox = nullptr; //帐户下拉选择框 QLabel *m_typeLabel = nullptr; //DComboBox *m_typeComBox = nullptr; JobTypeComboBox *m_typeComBox = nullptr; ColorSeletorWidget *m_colorSeletorWideget = nullptr; //颜色选择器 QLabel *m_contentLabel = nullptr; DTextEdit *m_textEdit = nullptr; QLabel *m_beginTimeLabel = nullptr; CDateEdit *m_beginDateEdit = nullptr; CTimeEdit *m_beginTimeEdit = nullptr; QLabel *m_endTimeLabel = nullptr; CDateEdit *m_endDateEdit = nullptr; CTimeEdit *m_endTimeEdit = nullptr; QLabel *m_adllDayLabel = nullptr; DCheckBox *m_allDayCheckbox = nullptr; QLabel *m_remindSetLabel = nullptr; DComboBox *m_rmindCombox = nullptr; QLabel *m_beginrepeatLabel = nullptr; DComboBox *m_beginrepeatCombox = nullptr; QLabel *m_endrepeatLabel = nullptr; DComboBox *m_endrepeatCombox = nullptr; DLineEdit *m_endrepeattimes = nullptr; QLabel *m_endrepeattimesLabel = nullptr; DWidget *m_endrepeattimesWidget; CDateEdit *m_endRepeatDate = nullptr; DWidget *m_endrepeatWidget = nullptr; DFrame *m_gwi = nullptr; QLabel *m_titleLabel = nullptr; QButtonGroup *m_calendarCategoryRadioGroup = nullptr; //日历类别选择控件组 DRadioButton *m_solarRadioBtn = nullptr; //公历选择按钮 DRadioButton *m_lunarRadioBtn = nullptr; //农历选择按钮 QString m_context; QString m_TypeContext; //类型输入框上一次输入后的字符 const bool m_createAllDay; bool m_setAccept {false}; //是否设置返回代码为Rejected qint64 m_timeDiff = 0; //开始时间和结束时间差,不算日期 bool m_isMoreThenOneDay = false; private: //日程 DSchedule::Ptr m_scheduleDataInfo; AccountItem::Ptr m_accountItem; int m_type; // 1新建 0 编辑日程 QDateTime m_currentDate; QDateTime m_EndDate; bool m_typeEditStatus = false; //日程类型编辑状态 int m_prevCheckRadioID = -1; //上一次点击Radio的id编号 bool m_bCanCreateType = true;; }; #endif // SCHEDULEDLG_H dde-calendar-5.14.13/calendar-client/src/dialog/scheduletypeeditdlg.cpp000066400000000000000000000202331473346337000260140ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduletypeeditdlg.h" #include "scheduledatamanage.h" #include "cscheduleoperation.h" #include "configsettings.h" #include "units.h" #include #include #include #include #include #include ScheduleTypeEditDlg::ScheduleTypeEditDlg(QWidget *parent) : DDialog(parent) , m_title(tr("New event type")) , m_dialogType(DialogNewType) { init(); } ScheduleTypeEditDlg::ScheduleTypeEditDlg(const DScheduleType &jobTypeOld, QWidget *parent) : DDialog(parent) , m_jobTypeOld(jobTypeOld) , m_jobTypeNew(jobTypeOld) , m_title(tr("Edit event type")) , m_dialogType(DialogEditType) { init(); } ScheduleTypeEditDlg::ScheduleTypeEditDlg(const DialogType &type, QWidget *parent) : DDialog(parent) { switch (type) { case DialogImportType: m_title = tr("Import ICS file"); m_dialogType = DialogImportType; break; default: m_title = tr("New event type"); m_dialogType = DialogNewType; break; } init(); } DScheduleType ScheduleTypeEditDlg::newJsonType() { m_jobTypeNew.setTypeColor(*m_colorSeletor->getSelectedColorInfo()); return m_jobTypeNew; } void ScheduleTypeEditDlg::setAccount(AccountItem::Ptr account) { m_colorSeletor->resetColorButton(account); //将用户上一次选择的自定义颜色添加进去 QString colorName = CConfigSettings::getInstance()->value("LastUserColor", "").toString(); if (!colorName.isEmpty()) { //设置颜色 DTypeColor::Ptr typeColor; typeColor.reset(new DTypeColor); typeColor->setColorID(0); typeColor->setColorCode(colorName); typeColor->setPrivilege(DTypeColor::PriUser); m_colorSeletor->setUserColor(typeColor); } switch (m_dialogType) { case DialogEditType: { //编辑日程类型 //设置颜色 m_colorSeletor->setSelectedColor(m_jobTypeOld.typeColor()); } break; default: { //默认新建日程,选中上一次选中的颜色 //选中上一次选中的颜色 QVariant colorId = CConfigSettings::getInstance()->value("LastSysColorTypeNo", -1); int colorNum = 0; if (colorId.type() == QVariant::Int) { //如果是int型表示为旧颜色编号 colorNum = colorId.toInt(); } else { QString &&colorIdStr = colorId.toString(); if(colorName.isEmpty() && colorIdStr.isEmpty()){ colorNum = -1; } else if (!colorIdStr.isEmpty()) { colorNum = GTypeColor.keys().indexOf(colorIdStr); } else { colorNum = 9; } } m_colorSeletor->setSelectedColorById(colorNum); } break; } } void ScheduleTypeEditDlg::init() { initView(); initData(); //默认焦点在日程名称输入框中 m_lineEdit->setFocus(); //先初始化数据再关联信号,初始状态下不提示 connect(m_lineEdit, &DLineEdit::textChanged, this, &ScheduleTypeEditDlg::slotEditTextChanged); connect(m_lineEdit, &DLineEdit::focusChanged, this, &ScheduleTypeEditDlg::slotFocusChanged); connect(m_lineEdit, &DLineEdit::editingFinished, this, &ScheduleTypeEditDlg::slotEditingFinished); // 在编辑框变动时,设置确认按钮状态 connect(m_lineEdit, &DLineEdit::textChanged, this, &ScheduleTypeEditDlg::slotCheckConfirmBtn); connect(m_fileEdit, &DLineEdit::textChanged, this, &ScheduleTypeEditDlg::slotCheckConfirmBtn); } void ScheduleTypeEditDlg::initView() { setFixedSize(QSize(400, 220)); m_titleLabel = new QLabel(this); QFont titlelabelF; titlelabelF.setWeight(QFont::DemiBold); titlelabelF.setPixelSize(17); m_titleLabel->setFixedSize(400, 25); m_titleLabel->setAlignment(Qt::AlignCenter); m_titleLabel->move(0, 19); m_titleLabel->setFont(titlelabelF); m_lineEdit = new DLineEdit(); m_lineEdit->setClearButtonEnabled(false); //不显示按钮 m_colorSeletor = new ColorSeletorWidget(); m_fileEdit = new DFileChooserEdit; QFormLayout *formLayout = new QFormLayout(this); formLayout->setHorizontalSpacing(10); formLayout->setVerticalSpacing(20); formLayout->addRow(tr("Name:"), m_lineEdit); formLayout->addRow(tr("Color:"), m_colorSeletor); if (m_dialogType == DialogImportType){ setFixedSize(QSize(400, 300)); auto icsLabel = new QLabel(tr("ICS File:"), this); icsLabel->setOpenExternalLinks(true); formLayout->addRow(icsLabel, m_fileEdit); } DFrame *gwi = new DFrame(this); gwi->setFrameShape(QFrame::NoFrame); gwi->setLayout(formLayout); gwi->setMinimumWidth(360); addContent(gwi, Qt::AlignCenter); //添加按钮 addButton(tr("Cancel", "button")); addButton(tr("Save", "button"), false, DDialog::ButtonRecommend); for (int i = 0; i < buttonCount(); i++) { QAbstractButton *button = getButton(i); button->setFixedSize(170, 36); } connect(this->getButton(0), &QPushButton::clicked, this, &ScheduleTypeEditDlg::slotBtnCancel); connect(this->getButton(1), &QPushButton::clicked, this, &ScheduleTypeEditDlg::slotBtnNext); } void ScheduleTypeEditDlg::initData() { m_titleLabel->setText(m_title); m_lineEdit->setText(m_jobTypeOld.displayName()); m_typeText = m_jobTypeOld.displayName(); //编辑时要初始化数据 this->getButton(1)->setEnabled(!m_jobTypeOld.displayName().isEmpty()); //如果是新增,则保存按钮默认不可用 } void ScheduleTypeEditDlg::slotEditTextChanged(const QString &strName) { QString tStitlename = strName; //去除回车字符 if (tStitlename.contains("\n")) { //设置纯文本显示原始内容 tStitlename.replace("\n", ""); m_lineEdit->setText(tStitlename); return; } //最大限制20个字符,超出后过滤掉 if (tStitlename.length() > 20) { m_lineEdit->setText(m_typeText); return; } else { m_typeText = tStitlename; } //文本编辑框中文本改变事件 //1不能为空,2不能全空格,3不能重名 if (m_lineEdit->text().isEmpty()) { //名称为空,返回 //内容清空时,消除警告色和提示信息 m_lineEdit->setAlert(false); m_lineEdit->hideAlertMessage(); return; } if (tStitlename.trimmed().isEmpty()) { //名称为全空格,返回 m_lineEdit->showAlertMessage(tr("The name can not only contain whitespaces")); m_lineEdit->setAlert(true); return; } m_jobTypeNew.setDisplayName(tStitlename); m_lineEdit->setAlert(false); m_lineEdit->hideAlertMessage(); return; } void ScheduleTypeEditDlg::slotFocusChanged(bool onFocus) { //如果焦点移出,且输入内容为空 if (!onFocus && m_lineEdit->text().isEmpty()) { // emit m_lineEdit->textChanged(""); emit m_lineEdit->editingFinished(); } } void ScheduleTypeEditDlg::slotBtnCancel() { this->reject(); } void ScheduleTypeEditDlg::slotBtnNext() { m_jobTypeNew.setTypeColor(*m_colorSeletor->getSelectedColorInfo()); this->accept(); } void ScheduleTypeEditDlg::slotEditingFinished() { //如果编辑结束后内容为空则提示 if (m_lineEdit->text().isEmpty()) { //名称为空,返回 m_lineEdit->showAlertMessage(tr("Enter a name please")); m_lineEdit->setAlert(true); } } // 获取ICS文件路径 QString ScheduleTypeEditDlg::getIcsFile() { return m_fileEdit->text(); } // 检查并设置‘确认按钮’的状态 void ScheduleTypeEditDlg::slotCheckConfirmBtn() { auto confirmBtn = this->getButton(1); if (m_lineEdit->text().isEmpty() || m_lineEdit->isAlert()) { confirmBtn->setEnabled(false); return; } if (m_dialogType == DialogType::DialogImportType) { if (m_fileEdit->text().isEmpty() || m_fileEdit->isAlert()) { confirmBtn->setEnabled(false); return; } } confirmBtn->setEnabled(true); } dde-calendar-5.14.13/calendar-client/src/dialog/scheduletypeeditdlg.h000066400000000000000000000047271473346337000254730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULETYPEEDITDLG_H #define SCHEDULETYPEEDITDLG_H #include "colorseletorwidget.h" #include "dschedule.h" #include "dscheduletype.h" #include "daccount.h" #include "accountitem.h" #include #include #include DWIDGET_USE_NAMESPACE class ScheduleTypeEditDlg : public DDialog { Q_OBJECT public: enum DialogType { // 对话框类型 DialogNewType, // 新建日程类型 DialogEditType, // 编辑日程类型 DialogImportType // 导入日程类型 }; //新增 explicit ScheduleTypeEditDlg(QWidget *parent = nullptr); //iJobTypeNo==0 ? 新增 or 修改 explicit ScheduleTypeEditDlg(const DScheduleType &jobTypeOld, QWidget *parent = nullptr); // 新增 or 导入 explicit ScheduleTypeEditDlg(const DialogType &type, QWidget *parent = nullptr); DScheduleType newJsonType(); void setAccount(AccountItem::Ptr account); private: signals: /** * @brief refreshInfo:刷新信息信号 */ void signalRefreshScheduleType(); public slots: //编辑器文本改变事件 void slotEditTextChanged(const QString &); /** * @brief slotFocusChanged 输入框焦点改变处理 * @param onFocus */ void slotFocusChanged(bool onFocus); /** * @brief slotBtnCancel 取消按钮 */ void slotBtnCancel(); /** * @brief slotBtnNext 保存按钮,检查输入,保存、更新日程类型信息 */ void slotBtnNext(); /** * @brief slotEditingFinished 编辑框编辑结束后处理 */ void slotEditingFinished(); // 获取ICS文件 QString getIcsFile(); // 检查确认按钮是否需要禁用 void slotCheckConfirmBtn(); private: void init(); void initView(); void initData(); private: DScheduleType m_jobTypeOld; //被修改的日程类型 DScheduleType m_jobTypeNew; //修改后的日程类型 QString m_title = ""; //弹窗名 DLineEdit *m_lineEdit = nullptr; // 类型名编辑框 DFileChooserEdit *m_fileEdit = nullptr; // ics文件编辑框 QLabel *m_titleLabel = nullptr; //弹窗名控件 ColorSeletorWidget *m_colorSeletor = nullptr; //颜色选择器 DialogType m_dialogType; QString m_typeText; //输入框上一次输入后的文本 }; #endif // SCHEDULETYPEEDITDLG_H dde-calendar-5.14.13/calendar-client/src/dialog/settingdialog.cpp000066400000000000000000000676311473346337000246330ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "settingdialog.h" #include "cdynamicicon.h" #include "accountmanager.h" #include "commondef.h" #include "dcalendargeneralsettings.h" #include "settingWidget/userloginwidget.h" #include "accountmanager.h" #include "calendarmanage.h" #include "units.h" #include #include #include #include #include #include #include #include #include #include const QString ControlCenterDBusName = "org.deepin.dde.ControlCenter1"; const QString ControlCenterDBusPath = "/org/deepin/dde/ControlCenter1"; const QString ControlCenterPage = "datetime/region"; using namespace SettingWidget; //静态的翻译不会真的翻译,但是会更新ts文件 //像static QString a = QObject::tr("hello"), a实际等于hello,但是ts会有hello这个词条 //调用DSetingDialog时会用到上述场景 static CalendarSettingSetting setting_account = { "setting_account", QObject::tr("Account settings"), { { "account", QObject::tr("Account"), {{ "login", //key "", //name "login", //type "" //default } } }, { "account_sync_items", QObject::tr("Select items to be synced"), {{ "Account_Calendar", //key QObject::tr("Events"), //name "SyncTagRadioButton", //type "" //default }, { "Account_Setting", //key QObject::tr("General settings"), //name "SyncTagRadioButton", //type "" //default } } }, { "sync_interval", "", { { "Sync_interval", //key QObject::tr("Sync interval"), //name "SyncTimeCombobox", //type "" } } }, { "manual_sync", "", {{ "manual_sync", //key "", //name "ManualSyncButton", //type "" //default } } }, } }; static CalendarSettingSetting setting_base = { "setting_base", QObject::tr("Manage calendar"), { { "acccount_items", "", { { "AccountCombobox", //key QObject::tr("Calendar account"), //name "AccountCombobox", //type "" } } }, { "event_types", QObject::tr("Event types"), { { "JobTypeListView", //key "", //name "JobTypeListView", //type "" //default } } } } }; static CalendarSettingSetting setting_base_noaccount = { "setting_base", QObject::tr("Manage calendar"), { { "event_types", QObject::tr("Event types"), { { "JobTypeListView", //key "", //name "JobTypeListView", //type "" //default } } } } }; static CalendarSettingSetting setting_general = { "setting_general", QObject::tr("General settings"), { { "general", QObject::tr("General"), { { "firstday", QObject::tr("First day of week"), "FirstDayofWeek", "", "Sunday" }, { "time", QObject::tr("Time"), "Time", "" }, { "control-center-button", "", "ControlCenterLink", "" }, }, }, } }; CSettingDialog::CSettingDialog(QWidget *parent) : DSettingsDialog(parent) { m_controlCenterProxy = new ControlCenterProxy(ControlCenterDBusName, ControlCenterDBusPath, QDBusConnection::sessionBus(), this); initWidget(); initConnect(); initData(); initWidgetDisplayStatus(); initView(); } void CSettingDialog::initView() { setIcon(CDynamicIcon::getInstance()->getPixmap()); setFixedSize(682, 506); widgetFactory()->registerWidget("login", UserloginWidget::createloginButton); widgetFactory()->registerWidget("FirstDayofWeek", std::bind(&CSettingDialog::createFirstDayofWeekWidget, this, std::placeholders::_1)); widgetFactory()->registerWidget("Time", std::bind(&CSettingDialog::createTimeTypeWidget, this, std::placeholders::_1)); widgetFactory()->registerWidget("ControlCenterLink", std::bind(&CSettingDialog::createControlCenterLink, this, std::placeholders::_1)); widgetFactory()->registerWidget("AccountCombobox", std::bind(&CSettingDialog::createAccountCombobox, this, std::placeholders::_1)); widgetFactory()->registerWidget("JobTypeListView", std::bind(&CSettingDialog::createJobTypeListView, this, std::placeholders::_1)); widgetFactory()->registerWidget("SyncTagRadioButton", std::bind(&CSettingDialog::createSyncTagRadioButton, this, std::placeholders::_1)); widgetFactory()->registerWidget("SyncTimeCombobox", std::bind(&CSettingDialog::createSyncFreqCombobox, this, std::placeholders::_1)); widgetFactory()->registerWidget("ManualSyncButton", std::bind(&CSettingDialog::createManualSyncButton, this, std::placeholders::_1)); QString strJson; CalendarSettingSettings calendarSettings; if (gAccountManager->getIsSupportUid()) { calendarSettings.append(setting_account); calendarSettings.append(setting_base); } else { calendarSettings.append(setting_base_noaccount); } calendarSettings.append(setting_general); QJsonObject obj; obj.insert("groups", calendarSettings.toJson()); strJson = QJsonDocument(obj).toJson(QJsonDocument::Compact); auto settings = Dtk::Core::DSettings::fromJson(strJson.toLatin1()); setObjectName("SettingDialog"); updateSettings(settings); //恢复默认设置按钮不显示 setResetVisible(false); //QList QList lstwidget = findChildren(); if (lstwidget.size() > 0) { //accessibleName for (QWidget *wid : lstwidget) { if ("ContentWidgetForsetting_base.event_types" == wid->accessibleName() || ("ContentSubTitleText" == wid->objectName() && "setting_base.event_types" == wid->property("key").toString())) { QSpacerItem *spaceitem = new QSpacerItem(1, 1, QSizePolicy::Policy::Expanding); wid->layout()->addItem(spaceitem); DIconButton *addButton = this->createTypeAddButton(); wid->layout()->addWidget(addButton); wid->layout()->addWidget(m_typeImportBtn); //使addButton的右边距等于view的右边距 int leftMargin = wid->layout()->contentsMargins().left(); wid->layout()->setContentsMargins(leftMargin, 0, leftMargin, 0); } if (wid->accessibleName().contains("DefaultWidgetAtContentRow")) { //DefaultWidgetAtContentRow是设置对话框右边每一个option条目对应widget的accessibleName的前缀,所以如果后续有更多条目,需要做修改 wid->layout()->setMargin(0); } } } //未登录uos帐号时,移除部分选项 if (!gUosAccountItem) { setGroupVisible("setting_account.account_sync_items", false); setGroupVisible("setting_account.sync_interval", false); setGroupVisible("setting_account.manual_sync", false); } //移除立刻同步按钮的背景色 QWidget *ManualSyncWidget = this->findChild("ManualSyncWidget"); ManualSyncWidget = ManualSyncWidget == nullptr ? nullptr : ManualSyncWidget->parentWidget(); ManualSyncWidget = ManualSyncWidget == nullptr ? nullptr : ManualSyncWidget->parentWidget(); DBackgroundGroup *bk = ManualSyncWidget == nullptr ? nullptr : qobject_cast(ManualSyncWidget); if (bk) { bk->setBackgroundRole(QPalette::Base); } //首次显示JobTypeListView时,更新日程类型 m_scheduleTypeWidget->updateCalendarAccount(m_accountComboBox->currentData().toString()); //账户登出登入时,隐藏显示相关界面 connect(gAccountManager, &AccountManager::signalAccountUpdate, this, [ = ]() { if (!this->groupIsVisible("setting_account")) return; setGroupVisible("setting_account.account_sync_items", gUosAccountItem != nullptr); setGroupVisible("setting_account.sync_interval", gUosAccountItem != nullptr); setGroupVisible("setting_account.manual_sync", gUosAccountItem != nullptr); }); //同步项 m_radiobuttonAccountCalendar = qobject_cast(this->findChild("Account_Calendar")); m_radiobuttonAccountSetting = qobject_cast(this->findChild("Account_Setting")); // Q_ASSERT(m_radiobuttonAccountSetting); connect(gAccountManager, &AccountManager::signalAccountStateChange, this, &CSettingDialog::slotSyncTagButtonUpdate); connect(gAccountManager, &AccountManager::signalAccountUpdate, this, &CSettingDialog::slotSyncTagButtonUpdate); if (m_radiobuttonAccountCalendar) connect(m_radiobuttonAccountCalendar, &SyncTagRadioButton::clicked, this, &CSettingDialog::slotSyncAccountStateUpdate); if (m_radiobuttonAccountSetting) connect(m_radiobuttonAccountSetting, &SyncTagRadioButton::clicked, this, &CSettingDialog::slotSyncAccountStateUpdate); slotSyncTagButtonUpdate(); } void CSettingDialog::initWidget() { initFirstDayofWeekWidget(); initTimeTypeWidget(); initAccountComboBoxWidget(); initScheduleTypeWidget(); initTypeAddWidget(); initSyncFreqWidget(); initManualSyncButton(); } void CSettingDialog::initConnect() { connect(gAccountManager, &AccountManager::signalGeneralSettingsUpdate, this, &CSettingDialog::slotGeneralSettingsUpdate); connect(gAccountManager, &AccountManager::signalAccountUpdate, this, &CSettingDialog::slotAccountUpdate); connect(gAccountManager, &AccountManager::signalLogout, this, &CSettingDialog::slotLogout); connect(gAccountManager, &AccountManager::signalAccountStateChange, this, &CSettingDialog::slotAccountStateChange); connect(m_firstDayofWeekCombobox, QOverload::of(&QComboBox::currentIndexChanged), this, &CSettingDialog::slotFirstDayofWeekCurrentChanged); connect(m_timeTypeCombobox, QOverload::of(&QComboBox::currentIndexChanged), this, &CSettingDialog::slotTimeTypeCurrentChanged); connect(m_accountComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &CSettingDialog::slotAccountCurrentChanged); connect(m_typeAddBtn, &DIconButton::clicked, this, &CSettingDialog::slotTypeAddBtnClickded); connect(m_typeImportBtn, &DIconButton::clicked, this, &CSettingDialog::slotTypeImportBtnClickded); //当日常类型超过上限时,更新button的状态 connect(m_scheduleTypeWidget, &JobTypeListView::signalAddStatusChanged, m_typeAddBtn, &DIconButton::setEnabled); connect(m_scheduleTypeWidget, &JobTypeListView::signalAddStatusChanged, m_typeImportBtn, &DIconButton::setEnabled); //TODO:更新union帐户的的同步频率 connect(m_syncFreqComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &CSettingDialog::slotSetUosSyncFreq); connect(m_syncBtn, &QPushButton::clicked, this, &CSettingDialog::slotUosManualSync); connect(m_ptrNetworkState, &DOANetWorkDBus::sign_NetWorkChange, this, &CSettingDialog::slotNetworkStateChange); } void CSettingDialog::slotNetworkStateChange(DOANetWorkDBus::NetWorkState state) { if (DOANetWorkDBus::NetWorkState::Active == state) { if (!gUosAccountItem.isNull() && (gUosAccountItem->isCanSyncSetting() || gUosAccountItem->isCanSyncShedule())) { m_syncBtn->setEnabled(true); } } else if (DOANetWorkDBus::NetWorkState::Disconnect == state) { m_syncBtn->setEnabled(false); } } void CSettingDialog::initData() { //通用设置数据初始化 slotGeneralSettingsUpdate(); //初始化账户信息 slotAccountUpdate(); //日程类型添加按钮初始化 m_typeAddBtn->setEnabled(m_scheduleTypeWidget->canAdd()); m_typeImportBtn->setEnabled(m_scheduleTypeWidget->canAdd()); //同步频率数据初始化 { int index = 0; if (gUosAccountItem) { index = m_syncFreqComboBox->findData(gUosAccountItem->getAccount()->syncFreq()); } m_syncFreqComboBox->setCurrentIndex(index); } slotAccountStateChange(); } void CSettingDialog::initWidgetDisplayStatus() { } void CSettingDialog::initFirstDayofWeekWidget() { m_firstDayofWeekWidget = new QWidget(); m_firstDayofWeekCombobox = new QComboBox(m_firstDayofWeekWidget); m_firstDayofWeekCombobox->setFixedSize(150, 36); m_firstDayofWeekCombobox->addItem(tr("Sunday")); m_firstDayofWeekCombobox->addItem(tr("Monday")); m_firstDayofWeekCombobox->addItem(tr("Use System Setting")); QHBoxLayout *layout = new QHBoxLayout(m_firstDayofWeekWidget); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); layout->addStretch(10); layout->addWidget(m_firstDayofWeekCombobox, 1); m_firstDayofWeekWidget->setLayout(layout); } void CSettingDialog::initTimeTypeWidget() { m_timeTypeWidget = new QWidget(); m_timeTypeCombobox = new QComboBox(m_timeTypeWidget); m_timeTypeCombobox->setFixedSize(150, 36); m_timeTypeCombobox->addItem(tr("24-hour clock")); m_timeTypeCombobox->addItem(tr("12-hour clock")); m_timeTypeCombobox->addItem(tr("Use System Setting")); QHBoxLayout *layout = new QHBoxLayout(m_timeTypeWidget); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); layout->addStretch(10); layout->addWidget(m_timeTypeCombobox, 1); m_timeTypeWidget->setLayout(layout); } void CSettingDialog::initAccountComboBoxWidget() { m_accountComboBox = new QComboBox(); m_accountComboBox->setFixedSize(150, 36); } void CSettingDialog::initTypeAddWidget() { m_typeAddBtn = new DIconButton(DStyle::SP_IncreaseElement, nullptr); m_typeAddBtn->setFixedSize(20, 20); m_typeImportBtn = new DIconButton(DStyle::SP_SelectElement, nullptr); m_typeImportBtn->setToolTip(tr("import ICS file")); m_typeImportBtn->setFixedSize(20, 20); } void CSettingDialog::initScheduleTypeWidget() { m_scheduleTypeWidget = new JobTypeListView; m_scheduleTypeWidget->setObjectName("JobTypeListView"); } void CSettingDialog::initSyncFreqWidget() { m_syncFreqComboBox = new QComboBox; m_syncFreqComboBox->setMaximumWidth(150); m_syncFreqComboBox->addItem(tr("Manual"), DAccount::SyncFreq_Maunal); m_syncFreqComboBox->addItem(tr("15 mins"), DAccount::SyncFreq_15Mins); m_syncFreqComboBox->addItem(tr("30 mins"), DAccount::SyncFreq_30Mins); m_syncFreqComboBox->addItem(tr("1 hour"), DAccount::SyncFreq_1hour); m_syncFreqComboBox->addItem(tr("24 hours"), DAccount::SyncFreq_24hour); m_syncFreqComboBox->setCurrentIndex(1); // 默认15分钟 } void CSettingDialog::initManualSyncButton() { m_manualSyncWidget = new QWidget; m_ptrNetworkState = new DOANetWorkDBus(this); m_manualSyncWidget->setObjectName("ManualSyncWidget"); m_syncBtn = new QPushButton(m_manualSyncWidget); m_syncBtn->setFixedSize(266, 36); m_syncBtn->setText(tr("Sync Now")); m_syncTimeLabel = new QLabel; QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(m_syncBtn, 0, Qt::AlignCenter); layout->addWidget(m_syncTimeLabel, 0, Qt::AlignCenter); m_manualSyncWidget->setLayout(layout); } void CSettingDialog::slotGeneralSettingsUpdate() { DCalendarGeneralSettings::Ptr setting = gAccountManager->getGeneralSettings(); if (!setting) { return; } setFirstDayofWeek(setting->firstDayOfWeek()); setTimeType(setting->timeShowType()); } void CSettingDialog::slotAccountUpdate() { accountUpdate(); //判断账户是否为登录状态,并建立连接 if (gUosAccountItem) { slotLastSyncTimeUpdate(gUosAccountItem->getDtLastUpdate()); connect(gUosAccountItem.get(), &AccountItem::signalDtLastUpdate, this, &CSettingDialog::slotLastSyncTimeUpdate); } } void CSettingDialog::slotLogout(DAccount::Type type) { if (DAccount::Account_UnionID == type) { } } void CSettingDialog::slotFirstDayofWeekCurrentChanged(int index) { DCalendarGeneralSettings::Ptr setting = gAccountManager->getGeneralSettings(); //此次只设置一周首日,不刷新界面 if (index == 0) { gAccountManager->setFirstDayofWeek(7); gCalendarManager->setFirstDayOfWeek(7, false); } else if (index == 1) { gAccountManager->setFirstDayofWeek(1); gCalendarManager->setFirstDayOfWeek(1, false); } else { if (gAccountManager->getFirstDayofWeekSource() != DCalendarGeneralSettings::Source_System) { gAccountManager->setFirstDayofWeekSource(DCalendarGeneralSettings::Source_System); } } } void CSettingDialog::slotTimeTypeCurrentChanged(int index) { DCalendarGeneralSettings::Ptr setting = gAccountManager->getGeneralSettings(); if (index == 0) { gAccountManager->setTimeFormatType(DCalendarGeneralSettings::TwentyFour); gCalendarManager->setTimeShowType(DCalendarGeneralSettings::TwentyFour, false); } else if (index == 1) { gAccountManager->setTimeFormatType(DCalendarGeneralSettings::Twelve); gCalendarManager->setTimeShowType(DCalendarGeneralSettings::Twelve, false); } else { if (gAccountManager->getTimeFormatTypeSource() != DCalendarGeneralSettings::Source_System) { gAccountManager->setTimeFormatTypeSource(DCalendarGeneralSettings::Source_System); } } } void CSettingDialog::slotAccountCurrentChanged(int index) { if (m_scheduleTypeWidget) { m_scheduleTypeWidget->updateCalendarAccount(m_accountComboBox->itemData(index).toString()); setTypeEnable(index); } } void CSettingDialog::slotTypeAddBtnClickded() { if (m_scheduleTypeWidget) { m_scheduleTypeWidget->slotAddScheduleType(); } } void CSettingDialog::slotTypeImportBtnClickded() { if (m_scheduleTypeWidget) { m_scheduleTypeWidget->slotImportScheduleType(); } } void CSettingDialog::slotSetUosSyncFreq(int freq) { QComboBox *com = qobject_cast(sender()); if (!com) return; if (!gUosAccountItem) return; gUosAccountItem->setSyncFreq(DAccount::SyncFreqType(com->itemData(freq).toInt())); } void CSettingDialog::slotUosManualSync() { if (!gUosAccountItem) return; gAccountManager->downloadByAccountID(gUosAccountItem->getAccount()->accountID()); } void CSettingDialog::slotSyncTagButtonUpdate() { if (!gUosAccountItem) return; auto state = gUosAccountItem->getAccount()->accountState(); m_radiobuttonAccountCalendar->setChecked(state & DAccount::Account_Calendar); m_radiobuttonAccountSetting->setChecked(state & DAccount::Account_Setting); m_radiobuttonAccountCalendar->setEnabled(gUosAccountItem->isEnableForUosAccount()); m_radiobuttonAccountSetting->setEnabled(gUosAccountItem->isEnableForUosAccount()); } void CSettingDialog::slotSyncAccountStateUpdate(bool status) { if (!gUosAccountItem) return; auto state = gUosAccountItem->getAccountState(); if (m_radiobuttonAccountSetting->isChecked()) state = state | DAccount::Account_Setting; else state = state & ~DAccount::Account_Setting; if (m_radiobuttonAccountCalendar->isChecked()) state = state | DAccount::Account_Calendar; else state = state & ~DAccount::Account_Calendar; gUosAccountItem->setAccountState(state); if (status) { slotUosManualSync(); } } void CSettingDialog::slotLastSyncTimeUpdate(const QString &datetime) { QString dtstr; if (gCalendarManager->getTimeShowType()) { dtstr = dtFromString(datetime).toString("yyyy/MM/dd ap hh:mm"); } else { dtstr = dtFromString(datetime).toString("yyyy/MM/dd hh:mm"); } if (m_syncTimeLabel && gUosAccountItem && !dtstr.isEmpty()) { m_syncTimeLabel->setText(tr("Last sync") + ":" + dtstr); } } void CSettingDialog::slotAccountStateChange() { if (!gUosAccountItem) { return; } if (m_syncBtn) { if (gUosAccountItem->isCanSyncSetting() || gUosAccountItem->isCanSyncShedule()) { m_syncBtn->setEnabled(true); } else { m_syncBtn->setEnabled(false); } } if (m_syncFreqComboBox) { if (gUosAccountItem->isCanSyncSetting() || gUosAccountItem->isCanSyncShedule()) { m_syncFreqComboBox->setEnabled(true); } else { m_syncFreqComboBox->setEnabled(false); } } if (m_accountComboBox && m_typeAddBtn) { setTypeEnable(m_accountComboBox->currentIndex()); } } void CSettingDialog::setFirstDayofWeek(int value) { if (!m_firstDayofWeekCombobox) { return; } auto sourceSystem = gAccountManager->getFirstDayofWeekSource() == DCalendarGeneralSettings::Source_System; if (sourceSystem) { m_firstDayofWeekCombobox->setCurrentIndex(m_firstDayofWeekCombobox->count() - 1); } else { if (value == 1) { m_firstDayofWeekCombobox->setCurrentIndex(1); } else { m_firstDayofWeekCombobox->setCurrentIndex(0); } } // 设置一周首日并刷新界面 gCalendarManager->setFirstDayOfWeek(value, true); } void CSettingDialog::setTimeType(int value) { if (!m_timeTypeCombobox) { return; } if (value > 1 || value < 0) { value = 0; } auto sourceSystem = gAccountManager->getTimeFormatTypeSource() == DCalendarGeneralSettings::Source_System; // 设置时间显示格式并刷新界面 if (sourceSystem) { m_timeTypeCombobox->setCurrentIndex(m_firstDayofWeekCombobox->count() - 1); } else { m_timeTypeCombobox->setCurrentIndex(value); } gCalendarManager->setTimeShowType(value, true); } void CSettingDialog::accountUpdate() { if (nullptr == m_accountComboBox) { return; } QVariant oldAccountID = m_accountComboBox->currentData(); m_accountComboBox->blockSignals(true); m_accountComboBox->clear(); for (auto account : gAccountManager->getAccountList()) { m_accountComboBox->addItem(account->getAccount()->accountName(), account->getAccount()->accountID()); } m_accountComboBox->setCurrentIndex(m_accountComboBox->findData(oldAccountID)); if (m_accountComboBox->currentIndex() < 0) m_accountComboBox->setCurrentIndex(0); m_accountComboBox->blockSignals(false); m_syncFreqComboBox->setCurrentIndex(1); //每次登录的时候 默认15分钟 slotAccountCurrentChanged(m_accountComboBox->currentIndex()); } void CSettingDialog::setTypeEnable(int index) { if (!gUosAccountItem) return; QString accountId = m_accountComboBox->itemData(index).toString(); AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(accountId); if (account->getAccount()->accountType() == DAccount::Account_Local || gUosAccountItem->isCanSyncShedule()) { if (account->getScheduleTypeList().count() < 20) { m_typeAddBtn->setEnabled(true); m_typeImportBtn->setEnabled(true); m_scheduleTypeWidget->setItemEnabled(true); } } else { m_typeAddBtn->setEnabled(false); m_typeImportBtn->setEnabled(false); m_scheduleTypeWidget->setItemEnabled(false); } } QPair CSettingDialog::createFirstDayofWeekWidget(QObject *obj) { auto option = qobject_cast(obj); QPair optionWidget = DSettingsWidgetFactory::createStandardItem(QByteArray(), option, m_firstDayofWeekWidget); // 获取初始值 option->setValue(option->defaultValue()); return optionWidget; } QPair CSettingDialog::createTimeTypeWidget(QObject *obj) { auto option = qobject_cast(obj); QPair optionWidget = DSettingsWidgetFactory::createStandardItem(QByteArray(), option, m_timeTypeWidget); // 获取初始值 option->setValue(option->defaultValue()); return optionWidget; } QPair CSettingDialog::createAccountCombobox(QObject *obj) { auto option = qobject_cast(obj); QPair optionWidget = DSettingsWidgetFactory::createStandardItem(QByteArray(), option, m_accountComboBox); return optionWidget; } QPair CSettingDialog::createSyncFreqCombobox(QObject *obj) { auto option = qobject_cast(obj); QPair optionWidget = DSettingsWidgetFactory::createStandardItem(QByteArray(), option, m_syncFreqComboBox); return optionWidget; } QPair CSettingDialog::createSyncTagRadioButton(QObject *obj) { auto option = qobject_cast(obj); DAccount::AccountState type = DAccount::Account_Calendar; if (option->key().endsWith("Account_Calendar")) type = DAccount::Account_Calendar; if (option->key().endsWith("Account_Setting")) type = DAccount::Account_Setting; SyncTagRadioButton *widget = new SyncTagRadioButton; widget->setObjectName(option->key().section('.', -1));//设置objectname为Account_Calendar 或 Account_Setting widget->setFixedWidth(16); QPair optionWidget = DSettingsWidgetFactory::createStandardItem(QByteArray(), option, widget); //iconLabel QLabel *iconLabel = new QLabel; iconLabel->setFixedSize(24, 24); if (DAccount::Account_Calendar == type) iconLabel->setPixmap(DIcon::loadNxPixmap(":/icons/deepin/builtin/icons/dde_calendar_sync_schedule_32px.svg")); if (DAccount::Account_Setting == type) iconLabel->setPixmap(DIcon::loadNxPixmap(":/icons/deepin/builtin/icons/dde_calendar_sync_setting_32px.svg")); //iconWidget QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(iconLabel); layout->addWidget(optionWidget.first); layout->setContentsMargins(0, 1, 0, 1); QWidget *iconWidget = new QWidget; iconWidget->setLayout(layout); optionWidget.first = iconWidget; return optionWidget; } QWidget *CSettingDialog::createManualSyncButton(QObject *obj) { return m_manualSyncWidget; } QWidget *CSettingDialog::createJobTypeListView(QObject *) { return m_scheduleTypeWidget; } DIconButton *CSettingDialog::createTypeAddButton() { return m_typeAddBtn; } QWidget *CSettingDialog::createControlCenterLink(QObject *obj) { DLabel *myLabel = new DLabel(tr("Please go to the Control Center to change system settings"), this); myLabel->setTextFormat(Qt::RichText); myLabel->setFixedHeight(36); connect(myLabel, &DLabel::linkActivated, this, [this]{ qCDebug(ClientLogger) << "open deepin control center"; this->m_controlCenterProxy->ShowPage(ControlCenterPage); }); auto w = new QWidget(this); QHBoxLayout *layout = new QHBoxLayout(w); layout->setContentsMargins(0, 0, 10, 0); layout->setSpacing(0); layout->addStretch(10); layout->addWidget(myLabel, 1); w->setLayout(layout); return w; }dde-calendar-5.14.13/calendar-client/src/dialog/settingdialog.h000066400000000000000000000063141473346337000242670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SETTINGDIALOG_H #define SETTINGDIALOG_H #include "settingWidget/settingwidgets.h" #include "doanetworkdbus.h" #include "controlCenterProxy.h" #include #include #include DWIDGET_USE_NAMESPACE class CSettingDialog : public DSettingsDialog { Q_OBJECT public: explicit CSettingDialog(QWidget *parent = nullptr); private: QPair createFirstDayofWeekWidget(QObject *obj); QPair createTimeTypeWidget(QObject *obj); QPair createAccountCombobox(QObject *obj); QPair createSyncFreqCombobox(QObject *obj); QPair createSyncTagRadioButton(QObject *obj); QWidget *createManualSyncButton(QObject *obj); QWidget *createJobTypeListView(QObject *obj); DIconButton *createTypeAddButton(); QWidget *createControlCenterLink(QObject *obj); public slots: void slotGeneralSettingsUpdate(); void slotAccountUpdate(); void slotLogout(DAccount::Type); void slotLastSyncTimeUpdate(const QString &datetime); //帐户状态发送改变 void slotAccountStateChange(); void slotFirstDayofWeekCurrentChanged(int index); void slotTimeTypeCurrentChanged(int index); void slotAccountCurrentChanged(int index); void slotTypeAddBtnClickded(); void slotTypeImportBtnClickded(); void slotSetUosSyncFreq(int freq); void slotUosManualSync(); void slotNetworkStateChange(DOANetWorkDBus::NetWorkState state); //更新同步项按钮状态 void slotSyncTagButtonUpdate(); //点击同步项时,更新uos账户状态 void slotSyncAccountStateUpdate(bool); private: void initFirstDayofWeekWidget(); void initTimeTypeWidget(); void initAccountComboBoxWidget(); void initTypeAddWidget(); void initScheduleTypeWidget(); void initSyncFreqWidget(); void initManualSyncButton(); void setFirstDayofWeek(int value); void setTimeType(int value); void accountUpdate(); void setTypeEnable(int index); private: void initWidget(); void initConnect(); void initData(); void initWidgetDisplayStatus(); void initView(); private: //一周首日 QWidget *m_firstDayofWeekWidget = nullptr; QComboBox *m_firstDayofWeekCombobox= nullptr; //时间格式 QWidget *m_timeTypeWidget = nullptr; QComboBox *m_timeTypeCombobox = nullptr; //帐户选择 QComboBox *m_accountComboBox = nullptr; //同步频率 QComboBox *m_syncFreqComboBox = nullptr; DIconButton *m_typeAddBtn = nullptr; DIconButton *m_typeImportBtn = nullptr; JobTypeListView *m_scheduleTypeWidget = nullptr; //手动同步按钮和同步时间显示 QLabel *m_syncTimeLabel = nullptr; QPushButton *m_syncBtn = nullptr; QWidget *m_manualSyncWidget = nullptr; DOANetWorkDBus *m_ptrNetworkState; SettingWidget::SyncTagRadioButton *m_radiobuttonAccountCalendar = nullptr; SettingWidget::SyncTagRadioButton *m_radiobuttonAccountSetting = nullptr; ControlCenterProxy *m_controlCenterProxy; }; #endif // SETTINGDIALOG_H dde-calendar-5.14.13/calendar-client/src/dialog/timejumpdialog.cpp000066400000000000000000000157021473346337000250000ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "timejumpdialog.h" #include "cschedulebasewidget.h" #include #include TimeJumpDialog::TimeJumpDialog(ArrowDirection direction, QWidget *parent) : DArrowRectangle(direction, DArrowRectangle::FloatWindow, parent) { setWindowFlags(Qt::Popup); initView(); initConnect(); } void TimeJumpDialog::initView() { setRadius(16); //设置圆角大小 setArrowWidth(60); //设置箭头宽度 setArrowHeight(30); //设置箭头高度 setRadiusArrowStyleEnable(true); //设置箭头圆角样式 setBackgroundColor(DBlurEffectWidget::AutoColor); //设置背景样式 setMargin(10); //设置边距 m_yearEdit = new CTimeLineEdit(EditYear, this); m_monthEdit = new CTimeLineEdit(EditMonth, this); m_dayEdit = new CTimeLineEdit(EditDay, this); m_jumpButton = new DSuggestButton(tr("Go", "button"), this); m_yearEdit->setFixedSize(98, 36); m_monthEdit->setFixedSize(88, 36); m_dayEdit->setFixedSize(88, 36); m_jumpButton->setFixedSize(82, 36); QHBoxLayout *hLayout = new QHBoxLayout(this); hLayout->setMargin(0); hLayout->setSpacing(10); hLayout->addWidget(m_yearEdit); hLayout->addWidget(m_monthEdit); hLayout->addWidget(m_dayEdit); hLayout->addWidget(m_jumpButton); QWidget *wgt = new QWidget(); wgt->setLayout(hLayout); setContent(wgt); } void TimeJumpDialog::initConnect() { connect(m_yearEdit, &CTimeLineEdit::signalNumChange, this, &TimeJumpDialog::slotEditNumChange); connect(m_monthEdit, &CTimeLineEdit::signalNumChange, this, &TimeJumpDialog::slotEditNumChange); connect(m_dayEdit, &CTimeLineEdit::signalNumChange, this, &TimeJumpDialog::slotEditNumChange); connect(m_yearEdit, &CTimeLineEdit::signalDateJump, this, &TimeJumpDialog::slotDateJump); connect(m_monthEdit, &CTimeLineEdit::signalDateJump, this, &TimeJumpDialog::slotDateJump); connect(m_dayEdit, &CTimeLineEdit::signalDateJump, this, &TimeJumpDialog::slotDateJump); connect(m_jumpButton, &QPushButton::clicked, this, &TimeJumpDialog::slotJumpButtonClicked); } void TimeJumpDialog::initData() { m_yearEdit->setRange(1900, 2100); m_monthEdit->setRange(1, 12); //设置天编辑器限制范围 m_dayEdit->setRange(1, getMaxDayNum()); m_yearEdit->setNum(m_date.year()); m_monthEdit->setNum(m_date.month()); m_dayEdit->setNum(m_date.day()); resetEdietStepEnable(); } /** * @brief TimeJumpDialog::showPopup * 显示函数 * @param date 初始显示的日期 * @param pos 显示位置 */ void TimeJumpDialog::showPopup(const QDate &date, const QPoint &pos) { showPopup(date, pos.x(), pos.y()); } /** * @brief TimeJumpDialog::showPopup * 显示函数 * @param date 初始显示事件 * @param x 显示位置x坐标 * @param y 显示位置y坐标 */ void TimeJumpDialog::showPopup(const QDate &date, int x, int y) { //保存时间 m_date = date; //初始化数据 initData(); //将焦点转移到年编辑器 m_yearEdit->clearFocus(); m_monthEdit->clearFocus(); m_dayEdit->clearFocus(); //m_yearEdit->selectAll(); //显示 show(x, y); } /** * @brief TimeJumpDialog::getMaxDayNum * 获取当月最大天数 */ int TimeJumpDialog::getMaxDayNum() { static int dayNum[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int maxDay = dayNum[m_date.month() - 1]; if (m_date.month() == 2 && QDate::isLeapYear(m_date.year())) { maxDay = 29; } return maxDay; } /** * @brief TimeJumpDialog::resetEdietStepEnable * 重置编辑器状态 */ void TimeJumpDialog::resetEdietStepEnable() { //将所有编辑器调整为可上下编辑状态 m_yearEdit->setStepEnabled(CTimeLineEdit::StepUpEnabled | CTimeLineEdit::StepDownEnabled); m_monthEdit->setStepEnabled(CTimeLineEdit::StepUpEnabled | CTimeLineEdit::StepDownEnabled); m_dayEdit->setStepEnabled(CTimeLineEdit::StepUpEnabled | CTimeLineEdit::StepDownEnabled); //根据每一级当前值设置上下编辑状态 if (m_yearEdit->value() == m_yearEdit->minimum()) { m_yearEdit->setStepEnabled(CTimeLineEdit::StepUpEnabled); if (m_monthEdit->value() == m_monthEdit->minimum()) { m_monthEdit->setStepEnabled(CTimeLineEdit::StepUpEnabled); if (m_dayEdit->value() == m_dayEdit->minimum()) { m_dayEdit->setStepEnabled(CTimeLineEdit::StepUpEnabled); } } } else if (m_yearEdit->value() == m_yearEdit->maximum()) { m_yearEdit->setStepEnabled(CTimeLineEdit::StepDownEnabled); if (m_monthEdit->value() == m_monthEdit->maximum()) { m_monthEdit->setStepEnabled(CTimeLineEdit::StepDownEnabled); if (m_dayEdit->value() == m_dayEdit->maximum()) { m_dayEdit->setStepEnabled(CTimeLineEdit::StepDownEnabled); } } } } /** * @brief TimeJumpDialog::slotEditNumChange * 编辑器数字改变事件 * @param id 编辑器id * @param num 编辑器内容改变后的数字 */ void TimeJumpDialog::slotEditNumChange(int id, int num) { switch (id) { case EditYear: //更改年 { //因直接设置一年的年月日可能会造成更改月或年后该日期不存在导致的日期错误, //所以变化年或者月时先将日变为1,后续再根据实际情况更改日日期 int day = m_date.day(); m_date.setDate(num, m_date.month(), 1); int maxDay = getMaxDayNum(); day = day > maxDay ? maxDay : day; m_date.setDate(m_date.year(), m_date.month(), day); m_dayEdit->setRange(1, maxDay); } break; case EditMonth: //更改月 { int day = m_date.day(); m_date.setDate(m_date.year(), num, 1); int maxDay = getMaxDayNum(); day = day > maxDay ? maxDay : day; m_date.setDate(m_date.year(), m_date.month(), day); m_dayEdit->setRange(1, maxDay); } break; case EditDay: //更改日 m_date.setDate(m_date.year(), m_date.month(), num); break; } resetEdietStepEnable(); } /** * @brief TimeJumpDialog::slotDateJump * 编辑器事件跳转事件 * @param id 编辑器id * @param num 跳转量 */ void TimeJumpDialog::slotDateJump(int id, int num) { switch (id) { case EditYear: m_date = m_date.addYears(num); break; case EditMonth: m_date = m_date.addMonths(num); break; case EditDay: m_date = m_date.addDays(num); break; } //初始化数据 initData(); } /** * @brief TimeJumpDialog::slotJumpButtonClicked * 跳转按钮点击事件 */ void TimeJumpDialog::slotJumpButtonClicked() { //将焦点转移到button控件上,使在跳转时间前正在编辑的edit控件触发finished事件 m_jumpButton->setFocus(); //设置全局时间 CScheduleBaseWidget::setSelectDate(m_date); //隐藏控件 hide(); } dde-calendar-5.14.13/calendar-client/src/dialog/timejumpdialog.h000066400000000000000000000026701473346337000244450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TIMEJUMPDIALOG_H #define TIMEJUMPDIALOG_H #include "ctimelineedit.h" #include #include #include DWIDGET_USE_NAMESPACE //时间跳转弹窗 class TimeJumpDialog : public DArrowRectangle { Q_OBJECT public: //时间编辑控件类型 enum EditType{ EditYear = 1, EditMonth, EditDay, }; explicit TimeJumpDialog(ArrowDirection direction, QWidget *parent = nullptr); //显示控件 void showPopup(const QDate& date, const QPoint& pos); void showPopup(const QDate& date, int x, int y); signals: public slots: //时间编辑器数字改变事件 void slotEditNumChange(int id, int num); //时间编辑器时间跳转时间 void slotDateJump(int id, int num); //跳转控件点击事件 void slotJumpButtonClicked(); private: void initView(); void initConnect(); void initData(); //获取当月最大天数 int getMaxDayNum(); //重置编辑器状态 void resetEdietStepEnable(); private: QDate m_date; CTimeLineEdit *m_yearEdit = nullptr; //年编辑器 CTimeLineEdit *m_monthEdit = nullptr; //月编辑器 CTimeLineEdit *m_dayEdit = nullptr; //天编辑器 DSuggestButton *m_jumpButton = nullptr; //跳转控件 }; #endif // TIMEJUMPDIALOG_H dde-calendar-5.14.13/calendar-client/src/main.cpp000066400000000000000000000103071473346337000214470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "environments.h" #include "calendarmainwindow.h" #include "exportedinterface.h" #include "configsettings.h" #include "accessible/accessible.h" #include "tabletconfig.h" #include "schedulemanager.h" #include "commondef.h" #include #include #include #include #include #include DWIDGET_USE_NAMESPACE int main(int argc, char *argv[]) { //在root下或者非deepin/uos环境下运行不会发生异常,需要加上XDG_CURRENT_DESKTOP=Deepin环境变量; if (!QString(qgetenv("XDG_CURRENT_DESKTOP")).toLower().startsWith("deepin")) { setenv("XDG_CURRENT_DESKTOP", "Deepin", 1); } QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); //适配deepin-turbo启动加速 DApplication *app = nullptr; #if(DTK_VERSION < DTK_VERSION_CHECK(5,4,0,0)) app = new DApplication(argc, argv); #else app = DApplication::globalApplication(argc, argv); #endif app->setAutoActivateWindows(true); //如果dtk版本为5.2.0.1以上则使用新的dtk接口 #if (DTK_VERSION > DTK_VERSION_CHECK(5, 2, 0, 1)) //设置为-1将永久等待 DGuiApplicationHelper::setSingleInstanceInterval(-1); #endif if (DGuiApplicationHelper::setSingleInstance(app->applicationName(), DGuiApplicationHelper::UserScope)) { //准备数据 gAccountManager->resetAccount(); app->setOrganizationName("deepin"); app->setApplicationName("dde-calendar"); app->loadTranslator(); #ifdef QT_DEBUG // 在开发调试时使用项目内的翻译文件 auto tf = "../translations/dde-calendar_zh_CN"; qCDebug(ClientLogger) << "load translate" << tf; QTranslator translator; translator.load(tf); app->installTranslator(&translator); #endif app->setApplicationVersion(VERSION); // meta information that necessary to create the about dialog. app->setProductName(QApplication::translate("CalendarWindow", "Calendar")); QIcon t_icon = QIcon::fromTheme("dde-calendar"); app->setProductIcon(t_icon); app->setApplicationDescription(QApplication::translate("CalendarWindow", "Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ")); app->setApplicationAcknowledgementPage("https://www.deepin.org/acknowledgments/dde-calendar"); //命令行参数 QCommandLineParser _commandLine; //建立命令行解析 _commandLine.addHelpOption(); //增加-h/-help解析命令 _commandLine.addVersionOption(); //增加-v 解析命令 _commandLine.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions); _commandLine.process(*app); app->setAutoActivateWindows(true); bool isOk = false; int viewtype = CConfigSettings::getInstance()->value("base.view").toInt(&isOk); if (!isOk) viewtype = 2; DLogManager::registerConsoleAppender(); DLogManager::registerFileAppender(); DLogManager::registerJournalAppender(); //为了与老版本配置兼容 Calendarmainwindow ww(viewtype - 1); ExportedInterface einterface(&ww); einterface.registerAction("CREATE", "create a new schedule"); einterface.registerAction("VIEW", "check a date on calendar"); einterface.registerAction("QUERY", "find a schedule information"); einterface.registerAction("CANCEL", "cancel a schedule"); QDBusConnection dbus = QDBusConnection::sessionBus(); //如果注册失败打印出失败信息 if (!dbus.registerService("com.deepin.Calendar")) { qCWarning(ClientLogger) << "registerService Error:" << dbus.lastError(); } if (!dbus.registerObject("/com/deepin/Calendar", &ww)) { qCWarning(ClientLogger) << "registerObject Error:" << dbus.lastError(); } ww.slotTheme(DGuiApplicationHelper::instance()->themeType()); ww.show(); qCDebug(ClientLogger) << "dde-calendar-service start"; return app->exec(); } return 0; } dde-calendar-5.14.13/calendar-client/src/scheduleTask/000077500000000000000000000000001473346337000224355ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/scheduleTask/cscheduleoperation.cpp000066400000000000000000000442211473346337000270240ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cscheduleoperation.h" #include "commondef.h" #include "schedulectrldlg.h" #include "configsettings.h" #include "dcalendarddialog.h" #include "cdynamicicon.h" #include "accountmanager.h" #include "lunarmanager.h" #include "doanetworkdbus.h" CScheduleOperation::CScheduleOperation(const AccountItem::Ptr &accountItem, QWidget *parent) : QObject(parent) , m_accountItem(accountItem) , m_widget(parent) { //如果为空默认设置为本地帐户 if (m_accountItem.isNull()) { m_accountItem = gAccountManager->getLocalAccountItem(); } } CScheduleOperation::CScheduleOperation(const QString &scheduleTypeID, QWidget *parent) : QObject(parent) , m_accountItem(gAccountManager->getAccountItemByScheduleTypeId(scheduleTypeID)) , m_widget(parent) { //如果为空默认设置为本地帐户 if (m_accountItem.isNull()) { qCWarning(ClientLogger) << "Cannot get account by schedule type,scheduleTypeID:" << scheduleTypeID; m_accountItem = gAccountManager->getLocalAccountItem(); } } /** * @brief CScheduleOperation::createSchedule 创建日程 * @param scheduleInfo */ bool CScheduleOperation::createSchedule(const DSchedule::Ptr &scheduleInfo) { //如果为农历且重复类型为每年 if (scheduleInfo->lunnar() && scheduleInfo->getRRuleType() == DSchedule::RRule_Year) { lunarMessageDialogShow(scheduleInfo); } m_accountItem->createSchedule(scheduleInfo); return true; } /** * @brief CScheduleOperation::changeSchedule 修改日程 * @param newInfo * @param oldInfo */ bool CScheduleOperation::changeSchedule(const DSchedule::Ptr &newInfo, const DSchedule::Ptr &oldInfo) { bool _result {false}; if (newInfo->getRRuleType() == DSchedule::RRule_None && newInfo->getRRuleType() == oldInfo->getRRuleType()) { //如果为普通日程且没有修改重复类型则更新日程 if(newInfo->allDay() != oldInfo->allDay()) { if(newInfo->allDay()) { newInfo->setAlarmType(DSchedule::AlarmType::Alarm_15Hour_Front); } else { newInfo->setAlarmType(DSchedule::AlarmType::Alarm_15Min_Front); } } m_accountItem->updateSchedule(newInfo); _result = true; } else { //如果切换了全天状态则提醒是否修改全部 if (newInfo->allDay() != oldInfo->allDay()) { CScheduleCtrlDlg msgBox(m_widget); msgBox.setText( tr("All occurrences of a repeating event must have the same all-day status.")); msgBox.setInformativeText(tr("Do you want to change all occurrences?")); msgBox.addPushButton(tr("Cancel", "button"), true); msgBox.addWaringButton(tr("Change All"), true); msgBox.exec(); if (msgBox.clickButton() == 0) { _result = false; } else if (msgBox.clickButton() == 1) { //更新日程 showLunarMessageDialog(newInfo, oldInfo); m_accountItem->updateSchedule(newInfo); _result = true; } } else if (newInfo->getRRuleType() != oldInfo->getRRuleType()) { //修改重复规则 CScheduleCtrlDlg msgBox(m_widget); msgBox.setText(tr("You are changing the repeating rule of this event.")); msgBox.setInformativeText(tr("Do you want to change all occurrences?")); msgBox.addPushButton(tr("Cancel", "button"), true); msgBox.addWaringButton(tr("Change All"), true); msgBox.exec(); if (msgBox.clickButton() == 0) { _result = false; } else if (msgBox.clickButton() == 1) { //更新日程 showLunarMessageDialog(newInfo, oldInfo); m_accountItem->updateSchedule(newInfo); _result = true; } } else { _result = changeRecurInfo(newInfo, oldInfo); } } return _result; } /** * @brief CScheduleOperation::deleteSchedule 删除日程 * @param scheduleInfo */ bool CScheduleOperation::deleteSchedule(const DSchedule::Ptr &scheduleInfo) { bool _restuleBool {false}; //如果为普通日程 if (scheduleInfo->getRRuleType() == DSchedule::RRule_None) { CScheduleCtrlDlg msgBox(m_widget); msgBox.setText(tr("You are deleting an event.")); msgBox.setInformativeText(tr("Are you sure you want to delete this event?")); msgBox.addPushButton(tr("Cancel", "button"), true); msgBox.addWaringButton(tr("Delete", "button"), true); msgBox.exec(); if (msgBox.clickButton() == 0) { return false; } else if (msgBox.clickButton() == 1) { // m_DBusManager->DeleteJob(scheduleInfo.getID()); m_accountItem->deleteScheduleByID(scheduleInfo->uid()); _restuleBool = true; } } else { //获取原始日程 DSchedule::Ptr primevalSchedule = m_accountItem->getScheduleByScheduleID(scheduleInfo->uid()); //如果为重复日程的第一个 int num = DSchedule::numberOfRepetitions(primevalSchedule, scheduleInfo->dtStart()) ; if (num == 1) { CScheduleCtrlDlg msgBox(m_widget); msgBox.setText(tr("You are deleting an event.")); msgBox.setInformativeText(tr("Do you want to delete all occurrences of this event, or only the selected occurrence?")); msgBox.addPushButton(tr("Cancel", "button")); msgBox.addPushButton(tr("Delete All")); msgBox.addWaringButton(tr("Delete Only This Event")); msgBox.exec(); if (msgBox.clickButton() == 0) { return false; } else if (msgBox.clickButton() == 1) { //删除所有日程 m_accountItem->deleteScheduleByID(scheduleInfo->uid()); _restuleBool = true; } else if (msgBox.clickButton() == 2) { //仅删除此日程 primevalSchedule->recurrence()->addExDateTime(scheduleInfo->dtStart()); m_accountItem->updateSchedule(primevalSchedule); _restuleBool = true; } } else { CScheduleCtrlDlg msgBox(m_widget); msgBox.setText(tr("You are deleting an event.")); msgBox.setInformativeText(tr("Do you want to delete this and all future occurrences of this event, or only the selected occurrence?")); msgBox.addPushButton(tr("Cancel", "button")); msgBox.addPushButton(tr("Delete All Future Events")); msgBox.addWaringButton(tr("Delete Only This Event")); msgBox.exec(); if (msgBox.clickButton() == 0) { return false; } else if (msgBox.clickButton() == 1) { //删除选中日程及之后的日程 //修改重复规则 QList &&exDt = primevalSchedule->recurrence()->exDateTimes(); changeRepetitionRule(primevalSchedule, scheduleInfo); //如果修改后的日程为普通日程且忽略列表内包含日程开始时间则删除该日程 if (primevalSchedule->getRRuleType() == DSchedule::RRule_None && exDt.contains(primevalSchedule->dtStart())) { //删除日程 m_accountItem->deleteScheduleByID(primevalSchedule->uid()); } else { //更新日程 m_accountItem->updateSchedule(primevalSchedule); } _restuleBool = true; } else if (msgBox.clickButton() == 2) { primevalSchedule->recurrence()->addExDateTime(scheduleInfo->dtStart()); m_accountItem->updateSchedule(primevalSchedule); _restuleBool = true; } } } return _restuleBool; } /** * @brief CScheduleOperation::deleteOnlyInfo 删除日程 仅删除此日程 不弹框提醒 * @param scheduleInfo */ void CScheduleOperation::deleteOnlyInfo(const DSchedule::Ptr &scheduleInfo) { //如果为纪念日或节日则不处理 if (isFestival(scheduleInfo)) return; //如果为普通日程则删除 if (scheduleInfo->recurs()) { //仅删除此日程 DSchedule::Ptr newschedule = m_accountItem->getScheduleByScheduleID(scheduleInfo->uid()); newschedule->recurrence()->addExDateTime(scheduleInfo->dtStart()); m_accountItem->updateSchedule(newschedule); } else { m_accountItem->deleteScheduleByID(scheduleInfo->uid()); } } /** * @brief CScheduleOperation::ChangeRecurInfo 修改重复日程 * @param newinfo * @param oldinfo */ bool CScheduleOperation::changeRecurInfo(const DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo) { bool _result{false}; //如果为重复类型第一个 // 获取原始数据 DSchedule::Ptr primevalScheduleData = m_accountItem->getScheduleByScheduleID(oldinfo->uid()); int primevalDuration = primevalScheduleData->recurrence()->duration(); int num = DSchedule::numberOfRepetitions(primevalScheduleData, oldinfo->dtStart()); if (num == 1) { CScheduleCtrlDlg msgBox(m_widget); msgBox.setText(tr("You are changing a repeating event.")); msgBox.setInformativeText( tr("Do you want to change only this occurrence of the event, or all " "occurrences?")); msgBox.addPushButton(tr("Cancel", "button")); msgBox.addPushButton(tr("All")); msgBox.addsuggestButton(tr("Only This Event")); msgBox.exec(); if (msgBox.clickButton() == 0) { _result = false; } else if (msgBox.clickButton() == 1) { //修改所有日程 //如果此重复日程只有它一个则将修改为普通日程 DSchedule::Ptr _scheduleDataInfo(newinfo->clone()); //更新日程 showLunarMessageDialog(_scheduleDataInfo, oldinfo); //如果为非全天且结束于日期则更新结束时间 if(!_scheduleDataInfo->allDay() && _scheduleDataInfo->recurrence()->duration() ==0){ QDateTime dtEnd(_scheduleDataInfo->recurrence()->endDateTime().date(),_scheduleDataInfo->dtStart().time()); _scheduleDataInfo->recurrence()->setEndDateTime(dtEnd); } m_accountItem->updateSchedule(_scheduleDataInfo); _result = true; } else if (msgBox.clickButton() == 2) { //仅修改此日程 _result = changeOnlyInfo(newinfo, oldinfo); } } else { CScheduleCtrlDlg msgBox(m_widget); msgBox.setText(tr("You are changing a repeating event.")); msgBox.setInformativeText( tr("Do you want to change only this occurrence of the event, or this and " "all future occurrences?")); msgBox.addPushButton(tr("Cancel", "button")); msgBox.addPushButton(tr("All Future Events")); msgBox.addsuggestButton(tr("Only This Event")); msgBox.exec(); if (msgBox.clickButton() == 0) { _result = false; } else if (msgBox.clickButton() == 1) { // 根据id获取日程并修改 //修改重复规则 QList &&exDt = primevalScheduleData->recurrence()->exDateTimes(); changeRepetitionRule(primevalScheduleData, oldinfo); //如果修改后的日程为普通日程且忽略列表内包含日程开始时间则删除该日程 if (primevalScheduleData->getRRuleType() == DSchedule::RRule_None &&exDt.contains(primevalScheduleData->dtStart())) { //删除日程 m_accountItem->deleteScheduleByID(primevalScheduleData->uid()); } else { //更新日程 m_accountItem->updateSchedule(primevalScheduleData); } //创建日程 DSchedule::Ptr newschedule(newinfo->clone()); if (primevalDuration > 0) { //如果结束与次数 int newDuration = primevalDuration - num + 1; //如果重复次数大于1 if (newDuration > 1) { newschedule->recurrence()->setDuration(newDuration); } else { newschedule->setRRuleType(DSchedule::RRule_None); } newschedule->setRecurrenceId(QDateTime()); } else if (primevalDuration ==0) { //结束于日期 QDateTime dtEnd(newschedule->recurrence()->endDateTime().date(),newschedule->dtStart().time()); newschedule->recurrence()->setEndDateTime(dtEnd); } //如果结束为永不和时间则不需要修改 //创建新日程 //如果为农历且重复类型为每年 if (newschedule->lunnar() && DSchedule::RRule_Year == newschedule->getRRuleType()) { lunarMessageDialogShow(newschedule); } m_accountItem->createSchedule(newschedule); _result = true; } else if (msgBox.clickButton() == 2) { _result = changeOnlyInfo(newinfo, oldinfo); } } return _result; } /** * @brief CScheduleOperation::ChangeOnlyInfo 修改重复日程,仅修改此日程 * @param newinfo * @param oldinfo */ bool CScheduleOperation::changeOnlyInfo(const DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo) { //修改日程 DSchedule::Ptr newschedule(newinfo->clone()); newschedule->setRRuleType(DSchedule::RRule_None); newschedule->setRecurrenceId(QDateTime()); //创建日程 m_accountItem->createSchedule(newschedule); //获取原始信息 DSchedule::Ptr updatescheduleData = m_accountItem->getScheduleByScheduleID(oldinfo->uid()); updatescheduleData->recurrence()->addExDateTime(oldinfo->dtStart()); //更新原始信息 m_accountItem->updateSchedule(updatescheduleData); return true; } /** * @brief CScheduleOperation::changeRepetitionRule 修改日程重复规则 * @param newinfo * @param oldinfo */ void CScheduleOperation::changeRepetitionRule(DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo) { int num = DSchedule::numberOfRepetitions(newinfo, oldinfo->dtStart()); //修改重复规则 if (newinfo->recurrence()->duration() > 0) { //如果为结束与次数则修改结束次数 int duration = num - 1; if (duration > 1) { newinfo->recurrence()->setDuration(duration); } else { //结束次数小于等于0表示不重复,设置为普通日程 newinfo->setRRuleType(DSchedule::RRule_None); } } else { //如果该日程结束类型为永不和结束于日期则修改结束日期 newinfo->recurrence()->setDuration(0); QDateTime dtEnd(oldinfo->dtStart().addDays(-1)); newinfo->recurrence()->setEndDateTime(dtEnd); } } void CScheduleOperation::lunarMessageDialogShow(const DSchedule::Ptr &newinfo) { //如果该日程为闰月日程,因为对应的闰月需要间隔好多年,所以添加对应的提示信息 CaHuangLiDayInfo huangLiInfo = gLunarManager->getHuangLiDay(newinfo->dtStart().date());; if (huangLiInfo.mLunarMonthName.contains("闰")) { DCalendarDDialog prompt(m_widget); prompt.setIcon(QIcon(CDynamicIcon::getInstance()->getPixmap())); prompt.setDisplayPosition(DAbstractDialog::Center); prompt.setMessage(tr("You have selected a leap month, and will be reminded according to the rules of the lunar calendar.")); prompt.addButton(tr("OK", "button"), true, DDialog::ButtonNormal); if (m_widget) { //获取父窗口的中心坐标 const QPoint global = m_widget->mapToGlobal(m_widget->rect().center()); //相对父窗口居中显示 prompt.move(global.x() - prompt.width() / 2, global.y() - prompt.height() / 2); } prompt.exec(); } } void CScheduleOperation::showLunarMessageDialog(const DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo) { //在阴历每年重复情况下如果修改了开始时间或重复规则 //农历日程重复每年闰月是否提示 if (newinfo->lunnar() && DSchedule::RRule_Year == newinfo->getRRuleType()) { if (oldinfo->dtStart().date() != newinfo->dtStart().date() || oldinfo->getRRuleType() != newinfo->getRRuleType() || oldinfo->lunnar() != newinfo->lunnar()) { //判断是否为闰月 lunarMessageDialogShow(newinfo); } } } bool CScheduleOperation::isFestival(const DSchedule::Ptr &schedule) { //判断是否为节假日日程 AccountItem::Ptr account = gAccountManager->getAccountItemByScheduleTypeId(schedule->scheduleTypeID()); if (account.isNull()) { qCWarning(ClientLogger) << "Cannot get account by schedule type,scheduleTypeID:" << schedule->scheduleTypeID(); return false; } DScheduleType::Ptr scheduleType = gAccountManager->getScheduleTypeByScheduleTypeId(schedule->scheduleTypeID()); //如果为本地日程且日程类型为None则表示为节假日日程 return account->getAccount()->accountType() == DAccount::Account_Local && scheduleType->privilege() == 0; } bool CScheduleOperation::scheduleIsInvariant(const DSchedule::Ptr &schedule) { //如果为网络帐户,且没有网络或者帐户开关关闭 AccountItem::Ptr accountItem = gAccountManager->getAccountItemByScheduleTypeId(schedule->scheduleTypeID()); if (accountItem.isNull()) return false; DAccount::Ptr account = accountItem->getAccount(); if (account->accountType() == DAccount::Account_UnionID) { DOANetWorkDBus netManger; //网络判断 //如果uid日历同步关闭则日程不可修改 if (netManger.getNetWorkState() != DOANetWorkDBus::Active || !account->accountState().testFlag(DAccount::Account_Open) || !account->accountState().testFlag(DAccount::Account_Calendar)) { return true; } } return false; } dde-calendar-5.14.13/calendar-client/src/scheduleTask/cscheduleoperation.h000066400000000000000000000037711473346337000264760ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSCHEDULEOPERATION_H #define CSCHEDULEOPERATION_H #include "scheduledatamanage.h" #include "accountitem.h" #include #include class CScheduleDBus; /** * @brief The CScheduleOperation class * 日程操作类,创建,修改和删除日程 */ class CScheduleOperation : public QObject { Q_OBJECT public: explicit CScheduleOperation(const AccountItem::Ptr &accountItem = nullptr, QWidget *parent = nullptr); explicit CScheduleOperation(const QString &scheduleTypeID, QWidget *parent = nullptr); //创建日程 bool createSchedule(const DSchedule::Ptr &scheduleInfo); //修改日程 bool changeSchedule(const DSchedule::Ptr &newInfo, const DSchedule::Ptr &oldInfo); //删除日程 false :取消删除 true: 确定删除 bool deleteSchedule(const DSchedule::Ptr &scheduleInfo); //删除日程 仅删除此日程 不弹框提醒 void deleteOnlyInfo(const DSchedule::Ptr &scheduleInfo); //是否为节假日日程 static bool isFestival(const DSchedule::Ptr &schedule); //日程是不可修改的 static bool scheduleIsInvariant(const DSchedule::Ptr &schedule); private: //修改重复日程 bool changeRecurInfo(const DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo); //修改重复日程,仅修改此日程 bool changeOnlyInfo(const DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo); //修改重复规则 void changeRepetitionRule(DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo); //农历每年闰月提示信息 void lunarMessageDialogShow(const DSchedule::Ptr &newinfo); //根据新旧日程信息判断是否提示 void showLunarMessageDialog(const DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo); signals: public slots: private: AccountItem::Ptr m_accountItem; QWidget *m_widget; }; #endif // CSCHEDULEOPERATION_H dde-calendar-5.14.13/calendar-client/src/shortcut.cpp000066400000000000000000000030011473346337000223670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "shortcut.h" Shortcut::Shortcut(QObject *parent) : QObject(parent) { ShortcutGroup group1; ShortcutGroup group2; ShortcutGroup group3; ShortcutGroup group4; group1.groupName = ""; group1.groupItems << ShortcutItem(tr("Help"), "F1") << ShortcutItem(tr("Delete event"), "Delete"); group2.groupName = ""; group2.groupItems << ShortcutItem(tr("Copy"), "Ctrl+C") << ShortcutItem(tr("Cut"), "Ctrl+X") << ShortcutItem(tr("Paste"), "Ctrl+V") ; group3.groupName = ""; group3.groupItems << ShortcutItem(tr("Delete"), "Delete") << ShortcutItem(tr("Select all"), "Ctrl+A"); m_shortcutGroups << group1 << group2 << group3; //convert to json object QJsonArray jsonGroups; for (auto scg : m_shortcutGroups) { QJsonObject jsonGroup; QJsonArray jsonGroupItems; for (auto sci : scg.groupItems) { QJsonObject jsonItem; jsonItem.insert("name", sci.name); jsonItem.insert("value", sci.value); jsonGroupItems.append(jsonItem); } jsonGroup.insert("groupItems", jsonGroupItems); jsonGroups.append(jsonGroup); } m_shortcutObj.insert("shortcut", jsonGroups); } QString Shortcut::toStr() { QJsonDocument doc(m_shortcutObj); return doc.toJson().data(); } dde-calendar-5.14.13/calendar-client/src/shortcut.h000066400000000000000000000012711473346337000220430ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SHORTCUT_H #define SHORTCUT_H #include #include #include #include struct ShortcutItem { QString name; QString value; ShortcutItem(QString n, QString v): name(n), value(v) {} }; struct ShortcutGroup { QString groupName; QList groupItems; }; class Shortcut : public QObject { Q_OBJECT public: explicit Shortcut(QObject *parent = 0); QString toStr(); private: QJsonObject m_shortcutObj; QList m_shortcutGroups; }; #endif // SHORTCUT_H dde-calendar-5.14.13/calendar-client/src/singleton.h000066400000000000000000000010671473346337000221750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2016 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #pragma once #include using namespace std; namespace DCalendar { template class DSingleton { public: static inline T *instance() { static T *_instance = new T; return _instance; } protected: DSingleton(void) {} ~DSingleton(void) {} DSingleton(const DSingleton &) {} DSingleton &operator= (const DSingleton &) { return *this; } }; } // namespace DCalendar dde-calendar-5.14.13/calendar-client/src/tabletconfig.cpp000066400000000000000000000006541473346337000231700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "tabletconfig.h" //默认不为平板模式 bool TabletConfig::m_isTablet = false; TabletConfig::TabletConfig(QObject *parent) : QObject(parent) { } bool TabletConfig::isTablet() { return m_isTablet; } void TabletConfig::setIsTablet(bool isTablet) { m_isTablet = isTablet; } dde-calendar-5.14.13/calendar-client/src/tabletconfig.h000066400000000000000000000010551473346337000226310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TABLETCONFIG_H #define TABLETCONFIG_H #include /** * @brief The TabletConfig class * 平板配置类 */ class TabletConfig : public QObject { Q_OBJECT public: explicit TabletConfig(QObject *parent = nullptr); static bool isTablet(); static void setIsTablet(bool isTablet); signals: public slots: private: static bool m_isTablet; //是否为平板模式 }; #endif // TABLETCONFIG_H dde-calendar-5.14.13/calendar-client/src/view/000077500000000000000000000000001473346337000207705ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/view/alldayeventview.cpp000066400000000000000000000277701473346337000247140ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "alldayeventview.h" #include "schedulecoormanage.h" #include "schedulectrldlg.h" #include "scheduledlg.h" #include "myscheduleview.h" #include "scheduledatamanage.h" #include "constants.h" #include "scheduledaterangeinfo.h" #include #include #include #include #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE DWIDGET_USE_NAMESPACE void CAllDayEventWeekView::setTheMe(int type) { CWeekDayGraphicsview::setTheMe(type); } void CAllDayEventWeekView::changeEvent(QEvent *event) { if (event->type() == QEvent::FontChange) { updateItemHeightByFontSize(); updateInfo(); } } bool CAllDayEventWeekView::MeetCreationConditions(const QDateTime &date) { return qAbs(date.daysTo(m_PressDate)) < 7; } void CAllDayEventWeekView::slotCreate(const QDateTime &date) { CScheduleDlg dlg(1, this); dlg.setDate(date); dlg.setAllDay(true); if (dlg.exec() == DDialog::Accepted) { emit signalsUpdateSchedule(); } } bool CAllDayEventWeekView::IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) { return timeFirst.date() == timeSecond.date(); } bool CAllDayEventWeekView::JudgeIsCreate(const QPointF &pos) { return qAbs(pos.x() - m_PressPos.x()) > 20 || qAbs(m_PressDate.date().daysTo(m_coorManage->getsDate(mapFrom(this, pos.toPoint())))) > 0; } void CAllDayEventWeekView::RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) { Q_UNUSED(listItem); m_rightMenu->clear(); m_rightMenu->addAction(m_createAction); m_createDate.setDate(m_coorManage->getsDate(mapFrom(this, pos))); m_createDate.setTime(QTime::currentTime()); m_rightMenu->exec(QCursor::pos()); } void CAllDayEventWeekView::MoveInfoProcess(DSchedule::Ptr &info, const QPointF &pos) { Q_UNUSED(pos); if (info->allDay()) { qint64 offset = m_PressDate.daysTo(m_MoveDate); info->setDtStart(info->dtStart().addDays(offset)); info->setDtEnd(info->dtEnd().addDays(offset)); } else { qint64 offset = info->dtStart().daysTo(info->dtEnd()); info->setAllDay(true); info->setAlarmType(DSchedule::Alarm_15Hour_Front); m_DragScheduleInfo->setDtStart(QDateTime(m_MoveDate.date(), QTime(0, 0, 0))); m_DragScheduleInfo->setDtEnd(QDateTime(m_MoveDate.addDays(offset).date(), QTime(23, 59, 59))); } upDateInfoShow(ChangeWhole, info); } QDateTime CAllDayEventWeekView::getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) { return moveDateTime.daysTo(m_InfoEndTime) < 0 ? QDateTime(m_InfoEndTime.date(), QTime(0, 0, 0)) : QDateTime(moveDateTime.date(), QTime(0, 0, 0)); } QDateTime CAllDayEventWeekView::getDragScheduleInfoEndTime(const QDateTime &moveDateTime) { return m_InfoBeginTime.daysTo(m_MoveDate) < 0 ? QDateTime(m_InfoBeginTime.date(), QTime(23, 59, 0)) : QDateTime(moveDateTime.date(), QTime(23, 59, 0)); } void CAllDayEventWeekView::updateHeight() { for (int i = 0; i < m_baseShowItem.count(); i++) { m_baseShowItem.at(i)->update(); } } /** * @brief CAllDayEventWeekView::setSelectSearchSchedule 设置搜索选中日程 * @param info */ void CAllDayEventWeekView::setSelectSearchSchedule(const DSchedule::Ptr &info) { DragInfoGraphicsView::setSelectSearchSchedule(info); for (int i = 0; i < m_baseShowItem.size(); ++i) { CAllDayScheduleItem *item = m_baseShowItem.at(i); if (item->hasSelectSchedule(info)) { QRectF rect = item->rect(); centerOn(0, rect.y()); setTransformationAnchor(QGraphicsView::AnchorViewCenter); item->setStartValue(0); item->setEndValue(4); item->startAnimation(); } } } void CAllDayEventWeekView::setMargins(int left, int top, int right, int bottom) { setViewportMargins(QMargins(left, top, right, bottom)); } /** * @brief CAllDayEventWeekView::updateInfo 更新日程显示 */ void CAllDayEventWeekView::updateInfo() { DragInfoGraphicsView::updateInfo(); switch (m_DragStatus) { case IsCreate: upDateInfoShow(IsCreate, m_DragScheduleInfo); break; default: upDateInfoShow(); break; } } void CAllDayEventWeekView::upDateInfoShow(const DragStatus &status, const DSchedule::Ptr &info) { DSchedule::List vListData; vListData = m_scheduleInfo; switch (status) { case NONE: Q_UNUSED(info); break; case ChangeBegin: case ChangeEnd: { int index = vListData.indexOf(info); if (index >= 0) vListData[index] = info; } break; case ChangeWhole: vListData.append(info); break; case IsCreate: vListData.append(info); break; } std::sort(vListData.begin(), vListData.end()); QVector vMDaySchedule; for (int i = 0; i < vListData.count(); i++) { DSchedule::Ptr ptr = vListData.at(i); if (ptr.isNull()) { continue; } QDate tbegindate = ptr->dtStart().date(); QDate tenddate = ptr->dtEnd().date(); if (tbegindate < m_beginDate) tbegindate = m_beginDate; if (tenddate > m_endDate) tenddate = m_endDate; MScheduleDateRangeInfo sinfo; sinfo.bdate = tbegindate; sinfo.edate = tenddate; sinfo.tData = ptr; sinfo.state = false; vMDaySchedule.append(sinfo); } QVector> vCfillSchedule; vCfillSchedule.resize(vListData.count()); int tNum = static_cast(m_beginDate.daysTo(m_endDate) + 1); for (int i = 0; i < vListData.count(); i++) { vCfillSchedule[i].resize(tNum); vCfillSchedule[i].fill(-1); } //首先填充跨天日程 for (int i = 0; i < vMDaySchedule.count(); i++) { if (vMDaySchedule[i].state) continue; int bindex = static_cast(m_beginDate.daysTo(vMDaySchedule[i].bdate)); int eindex = static_cast(m_beginDate.daysTo(vMDaySchedule[i].edate)); int c = -1; for (int k = 0; k < vListData.count(); k++) { int t = 0; for (t = bindex; t <= eindex; t++) { if (vCfillSchedule[k][t] != -1) { break; } } if (t == eindex + 1) { c = k; break; } } if (c == -1) continue; bool flag = false; for (int sd = bindex; sd <= eindex; sd++) { if (vCfillSchedule[c][sd] != -1) continue; vCfillSchedule[c][sd] = i; flag = true; } if (flag) vMDaySchedule[i].state = true; } QVector vResultData; for (int i = 0; i < vListData.count(); i++) { QVector vId; for (int j = 0; j < tNum; j++) { if (vCfillSchedule[i][j] != -1) { int k = 0; for (; k < vId.count(); k++) { if (vId[k] == vCfillSchedule[i][j]) break; } if (k == vId.count()) vId.append(vCfillSchedule[i][j]); } } DSchedule::List tData; for (int j = 0; j < vId.count(); j++) { tData.append(vMDaySchedule[vId[j]].tData); } if (!tData.isEmpty()) vResultData.append(tData); } int m_topMagin; if (vResultData.count() < 2) { m_topMagin = 32; } else if (vResultData.count() < 6) { m_topMagin = 31 + (vResultData.count() - 1) * (itemHeight + 1); } else { m_topMagin = 123; } setFixedHeight(m_topMagin - 3); setDayData(vResultData); update(); emit signalUpdatePaint(m_topMagin); } CAllDayEventWeekView::CAllDayEventWeekView(QWidget *parent, ViewPosition type) : CWeekDayGraphicsview(parent, type, ViewType::ALLDayView) { updateItemHeightByFontSize(); } CAllDayEventWeekView::~CAllDayEventWeekView() { } void CAllDayEventWeekView::setDayData(const QVector &vlistData) { m_vlistData = vlistData; updateDateShow(); } void CAllDayEventWeekView::setInfo(const DSchedule::List &info) { m_scheduleInfo = info; } void CAllDayEventWeekView::slotDoubleEvent() { m_updateDflag = true; emit signalsUpdateSchedule(); } void CAllDayEventWeekView::mouseDoubleClickEvent(QMouseEvent *event) { if (event->button() == Qt::RightButton) { return; } emit signalScheduleShow(false); DGraphicsView::mouseDoubleClickEvent(event); CAllDayScheduleItem *item = dynamic_cast(itemAt(event->pos())); if (item == nullptr) { m_createDate.setDate(m_coorManage->getsDate(mapFrom(this, event->pos()))); m_createDate.setTime(QTime::currentTime()); slotCreate(m_createDate); } else { m_updateDflag = false; CMyScheduleView dlg(item->getData(), this); connect(&dlg, &CMyScheduleView::signalsEditorDelete, this, &CAllDayEventWeekView::slotDoubleEvent); dlg.exec(); disconnect(&dlg, &CMyScheduleView::signalsEditorDelete, this, &CAllDayEventWeekView::slotDoubleEvent); } } void CAllDayEventWeekView::wheelEvent(QWheelEvent *event) { //若滚轮事件为左右方向则退出 if (event->angleDelta().x() != 0 ) { return; } emit signalScheduleShow(false); DGraphicsView::wheelEvent(event); } void CAllDayEventWeekView::updateDateShow() { qreal sceneHeight; qreal itemsHeight = (itemHeight + 1) * m_vlistData.size(); if (itemsHeight < 32) { sceneHeight = 29; } else { sceneHeight = itemsHeight + 6; } //如果设置场景的高度小于viewport的高度则设置场景的高度为viewport的高度 sceneHeight = sceneHeight < viewport()->height() ? viewport()->height() : sceneHeight; setSceneRect(0, 0, m_Scene->width(), sceneHeight); for (int i = 0; i < m_baseShowItem.count(); i++) { delete m_baseShowItem[i]; } m_baseShowItem.clear(); for (int i = 0; i < m_vlistData.size(); ++i) { createItemWidget(i); } //更新每个背景上的日程标签 updateBackgroundShowItem(); } void CAllDayEventWeekView::createItemWidget(int index, bool average) { Q_UNUSED(average) for (int i = 0; i < m_vlistData[index].size(); ++i) { const DSchedule::Ptr &info = m_vlistData[index].at(i); QRectF drawrect = m_coorManage->getAllDayDrawRegion(info->dtStart().date(), info->dtEnd().date()); drawrect.setY(2 + (itemHeight + 1) * index); drawrect.setHeight(itemHeight); CAllDayScheduleItem *gwi = new CAllDayScheduleItem(drawrect, nullptr); gwi->setData(m_vlistData[index].at(i)); m_Scene->addItem(gwi); m_baseShowItem.append(gwi); } } void CAllDayEventWeekView::updateItemHeightByFontSize() { QFont font; DFontSizeManager::instance()->setFontGenericPixelSize( static_cast(DFontSizeManager::instance()->fontPixelSize(qGuiApp->font()))); font = DFontSizeManager::instance()->t8(font); QFontMetrics fm(font); int h = fm.height(); if (itemHeight != h) { itemHeight = h; } } CAllDayEventWeekView::PosInItem CAllDayEventWeekView::getPosInItem(const QPoint &p, const QRectF &itemRect) { QPointF scenePos = this->mapToScene(p); QPointF itemPos = QPointF(scenePos.x() - itemRect.x(), scenePos.y() - itemRect.y()); double bottomy = itemRect.width() - itemPos.x(); if (itemPos.x() < 5) { return LEFT; } if (bottomy < 5) { return RIGHT; } return MIDDLE; } QDateTime CAllDayEventWeekView::getPosDate(const QPoint &p) { return QDateTime(m_coorManage->getsDate(mapFrom(this, p)), QTime(0, 0, 0)); } void CAllDayEventWeekView::slotUpdateScene() { this->scene()->update(); } dde-calendar-5.14.13/calendar-client/src/view/alldayeventview.h000066400000000000000000000053201473346337000243440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ALLDAYEVENTVIEW_H #define ALLDAYEVENTVIEW_H #include "graphicsItem/calldayscheduleitem.h" #include "graphicsItem/cweekdaybackgrounditem.h" #include "cweekdaygraphicsview.h" #include #include #include DWIDGET_USE_NAMESPACE class CScheduleCoorManage; class CAllDayEventWeekView : public CWeekDayGraphicsview { Q_OBJECT public: CAllDayEventWeekView(QWidget *parent = nullptr, ViewPosition type = WeekPos); ~CAllDayEventWeekView() override; void setDayData(const QVector &vlistData); void setInfo(const DSchedule::List &info); QVector &getListData() { return m_vlistData; } void updateHeight(); //获取搜索选中日程 void setSelectSearchSchedule(const DSchedule::Ptr &info) override; void setMargins(int left, int top, int right, int bottom); //更新日程显示 void updateInfo() override; signals: void signalUpdatePaint(const int topM); void signalSceneUpdate(); public slots: void slotUpdateScene(); private slots: void slotDoubleEvent(); public: void setTheMe(int type = 0) override; private: void changeEvent(QEvent *event) override; bool MeetCreationConditions(const QDateTime &date) override; void slotCreate(const QDateTime &date) override; //判断时间是否相等 bool IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) override; //根据鼠标移动的距离判断是否创建日程 bool JudgeIsCreate(const QPointF &pos) override; void RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) override; void MoveInfoProcess(DSchedule::Ptr &info, const QPointF &pos) override; QDateTime getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) override; QDateTime getDragScheduleInfoEndTime(const QDateTime &moveDateTime) override; PosInItem getPosInItem(const QPoint &p, const QRectF &itemRect) override; QDateTime getPosDate(const QPoint &p) override; void upDateInfoShow(const DragStatus &status = NONE, const DSchedule::Ptr &info = DSchedule::Ptr()) override; protected: void mouseDoubleClickEvent(QMouseEvent *event) override; void wheelEvent(QWheelEvent *event) override; private: void updateDateShow(); void createItemWidget(int index, bool average = false); void updateItemHeightByFontSize(); private: int itemHeight = 22; QVector m_vlistData; QVector m_scheduleInfo; QVector m_baseShowItem; bool m_updateDflag = false; }; #endif // CSCHEDULEDAYVIEW_H dde-calendar-5.14.13/calendar-client/src/view/cgraphicsscene.cpp000066400000000000000000000135661473346337000244700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cgraphicsscene.h" #include "graphicsItem/cscenebackgrounditem.h" #include #include #include #include CGraphicsScene::CGraphicsScene(QObject *parent) : QGraphicsScene(parent) , firstfocusItem(nullptr) , currentFocusItem(nullptr) , m_keyPrxy(nullptr) , m_activeSwitching(false) , m_isContextMenu(false) , m_isShowCurrentItem(false) { } CGraphicsScene::~CGraphicsScene() { if (m_keyPrxy != nullptr) delete m_keyPrxy; } void CGraphicsScene::setFirstFocusItem(QGraphicsItem *item) { firstfocusItem = item; } QGraphicsItem *CGraphicsScene::getFirstFocusItem() const { return firstfocusItem; } void CGraphicsScene::setCurrentFocusItem(QGraphicsItem *item) { currentFocusItem = item; } QGraphicsItem *CGraphicsScene::getCurrentFocusItem() const { return currentFocusItem; } void CGraphicsScene::setKeyPressPrxy(CKeyPressPrxy *keyPrxy) { m_keyPrxy = keyPrxy; } void CGraphicsScene::currentFocusItemUpdate() { if (currentFocusItem != nullptr) { CFocusItem *item = dynamic_cast(currentFocusItem); item->setItemFocus(true); } } /** * @brief CGraphicsScene::setPrePage 切换上一页 * @param focusDate 切换焦点时间 * @param isSwitchView 是否切换视图 */ void CGraphicsScene::setPrePage(const QDate &focusDate, bool isSwitchView) { emit signalSwitchPrePage(focusDate, isSwitchView); } /** * @brief CGraphicsScene::setPrePage 切换下一页 * @param focusDate 切换焦点时间 * @param isSwitchView 是否切换视图 */ void CGraphicsScene::setNextPage(const QDate &focusDate, bool isSwitchView) { emit signalSwitchNextPage(focusDate, isSwitchView); } bool CGraphicsScene::event(QEvent *event) { bool dealResult = false; if (event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = dynamic_cast(event); if (m_keyPrxy != nullptr && m_keyPrxy->keyPressDeal(keyEvent->key())) { dealResult = true; } //如果为左右键处理则设置为true if (dealResult == false && (keyEvent->key() == Qt::Key_Left || keyEvent->key() == Qt::Key_Right)) { dealResult = true; } if (keyEvent->modifiers() == Qt::ALT && keyEvent->key() == Qt::Key_M) { CSceneBackgroundItem *item = dynamic_cast(currentFocusItem); if (item != nullptr && item->getFocusItem()->getItemType() == CFocusItem::CITEM) { dealResult = true; emit signalContextMenu(item->getFocusItem()); } } } if (event->type() == QEvent::FocusIn) { dealResult = focusInDeal(event); } if (event->type() == QEvent::FocusOut) { dealResult = focusOutDeal(event); } return dealResult ? true : QGraphicsScene::event(event); } bool CGraphicsScene::focusInDeal(QEvent *event) { bool dealResult = true; QFocusEvent *focusEvent = dynamic_cast(event); if (firstfocusItem != nullptr && (Qt::TabFocusReason == focusEvent->reason() || Qt::BacktabFocusReason == focusEvent->reason())) { if (m_isShowCurrentItem || currentFocusItem == nullptr) { if (currentFocusItem == nullptr) { currentFocusItem = firstfocusItem; } CFocusItem *item = dynamic_cast(currentFocusItem); item->setItemFocus(true); } else { dealResult = m_keyPrxy->keyPressDeal(Qt::Key_Tab); //如果切换过来需要设置下一个item焦点,但是已经没有下一个item时,发送焦点切换信号 if (currentFocusItem == nullptr) { emit signalsetNextFocus(); } } } if (currentFocusItem != nullptr && Qt::ActiveWindowFocusReason == focusEvent->reason()) { CFocusItem *item = dynamic_cast(currentFocusItem); item->setItemFocus(true); } return dealResult; } bool CGraphicsScene::focusOutDeal(QEvent *event) { QFocusEvent *focusEvent = dynamic_cast(event); if (currentFocusItem != nullptr) { CSceneBackgroundItem *item = dynamic_cast(currentFocusItem); if (Qt::ActiveWindowFocusReason == focusEvent->reason()) { item->setItemFocus(false); } else { //如果为右击菜单则更新焦点显示效果 if (m_isContextMenu) { item->setItemFocus(false); } else { item->initState(); //如果为被动切换焦点则初始化当前焦点item if (getActiveSwitching() == false) { currentFocusItem = nullptr; //通知另外一个视图初始化状态,因为全天和非全天之间tab切换保存了当前item信息 emit signalViewFocusInit(); } else { setActiveSwitching(false); } } } } return true; } void CGraphicsScene::setIsContextMenu(bool isContextMenu) { m_isContextMenu = isContextMenu; } void CGraphicsScene::setIsShowCurrentItem(bool isShowCurrentItem) { m_isShowCurrentItem = isShowCurrentItem; } void CGraphicsScene::currentItemInit() { if (currentFocusItem != nullptr) { CSceneBackgroundItem *item = dynamic_cast(currentFocusItem); if (item != nullptr) { item->initState(); } currentFocusItem = nullptr; } } bool CGraphicsScene::getActiveSwitching() const { return m_activeSwitching; } void CGraphicsScene::setActiveSwitching(bool activeSwitching) { m_activeSwitching = activeSwitching; } dde-calendar-5.14.13/calendar-client/src/view/cgraphicsscene.h000066400000000000000000000046551473346337000241340ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CGRAPHICSSCENE_H #define CGRAPHICSSCENE_H #include "ckeypressprxy.h" #include /** * @brief The CGraphicsScene class * */ class CFocusItem; class CGraphicsScene : public QGraphicsScene { Q_OBJECT public: explicit CGraphicsScene(QObject *parent = nullptr); ~CGraphicsScene() override; //设置Scene的第一个focus item void setFirstFocusItem(QGraphicsItem *item); //获取Scene的第一个focus item QGraphicsItem *getFirstFocusItem() const; //设置Scene当前focus item void setCurrentFocusItem(QGraphicsItem *item); //获取Scene当前focus item QGraphicsItem *getCurrentFocusItem() const; //设置keypress处理 void setKeyPressPrxy(CKeyPressPrxy *keyPrxy); //更新当前item焦点效果显示 void currentFocusItemUpdate(); //设置上一页时间 void setPrePage(const QDate &focusDate, bool isSwitchView = false); //设置下一页时间 void setNextPage(const QDate &focusDate, bool isSwitchView = false); //获取是否为主动切换 bool getActiveSwitching() const; //设置是否为主动切换 void setActiveSwitching(bool activeSwitching); void currentItemInit(); void setIsShowCurrentItem(bool isShowCurrentItem); void setIsContextMenu(bool isContextMenu); protected: bool event(QEvent *event) override; private: bool focusInDeal(QEvent *event); bool focusOutDeal(QEvent *event); signals: void signalSwitchPrePage(const QDate &focusDate, bool isSwitchView = false); void signalSwitchNextPage(const QDate &focusDate, bool isSwitchView = false); void signalSwitchView(const QDate &focusDate, bool setItemFocus = false); //通知另一个视图初始化 void signalViewFocusInit(); //切换到日视图 void signalGotoDayView(const QDate &date); //快捷键触发右击 void signalContextMenu(CFocusItem *item); //切换焦点到下一个widget void signalsetNextFocus(); private: QGraphicsItem *firstfocusItem; QGraphicsItem *currentFocusItem; CKeyPressPrxy *m_keyPrxy; bool m_activeSwitching; //是否为主动切换焦点 bool m_isContextMenu; //是否为右击菜单切换焦点 bool m_isShowCurrentItem; //true 当前item获取焦点 false 当前item的下一个item获取焦点 }; #endif // CGRAPHICSSCENE_H dde-calendar-5.14.13/calendar-client/src/view/cweekdaygraphicsview.cpp000066400000000000000000000156601473346337000257140ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cweekdaygraphicsview.h" #include "commondef.h" #include "constants.h" #include "schedulecoormanage.h" #include "cweekdayscenetabkeydeal.h" #include "ckeyenabledeal.h" #include "ckeyleftdeal.h" #include "ckeyrightdeal.h" #include "calldaykeyleftdeal.h" #include "calldaykeyrightdeal.h" #include CWeekDayGraphicsview::CWeekDayGraphicsview(QWidget *parent, ViewPosition viewPos, ViewType viewtype) : DragInfoGraphicsView(parent) , m_viewPos(viewPos) , m_viewType(viewtype) , m_coorManage(new CScheduleCoorManage) , m_rightmagin(0) { createBackgroundItem(); m_Scene->setFirstFocusItem(m_backgroundItem.first()); //添加键盘事件处理 CKeyPressPrxy *m_keyPrxy = new CKeyPressPrxy(); m_keyPrxy->addkeyPressDeal(new CWeekDaySceneTabKeyDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CKeyEnableDeal(m_Scene)); if (m_viewType == ALLDayView) { m_keyPrxy->addkeyPressDeal(new CAllDayKeyLeftDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CAllDayKeyRightDeal(m_Scene)); } else { m_keyPrxy->addkeyPressDeal(new CKeyLeftDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CKeyRightDeal(m_Scene)); } m_Scene->setKeyPressPrxy(m_keyPrxy); connect(m_Scene, &CGraphicsScene::signalSwitchView, this, &CWeekDayGraphicsview::slotSwitchView); connect(m_Scene, &CGraphicsScene::signalViewFocusInit, this, &CWeekDayGraphicsview::signalViewFocusInit); } CWeekDayGraphicsview::~CWeekDayGraphicsview() { delete m_coorManage; m_coorManage = nullptr; } void CWeekDayGraphicsview::setRange(int w, int h, QDate begindate, QDate enddate, int rightmagin) { m_MoveDate.setDate(begindate.addMonths(-2)); m_beginDate = begindate; m_endDate = enddate; //如果为全天区域 if (m_viewType == ALLDayView) { w -= 2; } else { w = w - rightmagin - 2; } setBackgroundDate(); m_coorManage->setRange(w, h, begindate, enddate, rightmagin); setSceneRect(0, 0, w, h); m_rightmagin = rightmagin; } void CWeekDayGraphicsview::setRange(QDate begin, QDate end) { m_MoveDate.setDate(begin.addMonths(-2)); m_beginDate = begin; m_endDate = end; setBackgroundDate(); getCoorManage()->setDateRange(begin, end); this->scene()->update(); } void CWeekDayGraphicsview::setTheMe(int type) { for (int i = 0; i < m_backgroundItem.size(); ++i) { m_backgroundItem.at(i)->setTheMe(type); } DragInfoGraphicsView::setTheMe(type); this->viewport()->update(); } CScheduleCoorManage *CWeekDayGraphicsview::getCoorManage() const { return m_coorManage; } void CWeekDayGraphicsview::setCurrentFocusItem(const QDate &focusDate, bool setItemFocus) { qint64 offset = m_backgroundItem.first()->getDate().daysTo(focusDate); if (offset >= 0 && offset < m_backgroundItem.size()) { m_Scene->setCurrentFocusItem(m_backgroundItem.at(static_cast(offset))); m_Scene->setIsShowCurrentItem(setItemFocus); } else { qCWarning(ClientLogger) << "set CurrentFocusItem Error,offset:" << offset << ",focusDate:" << focusDate << ",firstDate:" << m_backgroundItem.first()->getDate(); } } void CWeekDayGraphicsview::setSceneRect(qreal x, qreal y, qreal w, qreal h) { m_Scene->setSceneRect(x, y, w, h); const qreal backgroundItemHeight = h; const qreal backgroundItemWidth = w / m_backgroundItem.size(); for (int i = 0; i < m_backgroundItem.size(); ++i) { m_backgroundItem.at(i)->setDate(m_beginDate.addDays(i)); m_backgroundItem.at(i)->setRect(x + backgroundItemWidth * i, 0, backgroundItemWidth, backgroundItemHeight); } } void CWeekDayGraphicsview::createBackgroundItem() { if (m_viewPos == DayPos) { //日视图 CWeekDayBackgroundItem *backgroundItem = new CWeekDayBackgroundItem(); connect(backgroundItem, &CWeekDayBackgroundItem::signalPosOnView, this, &CWeekDayGraphicsview::slotPosOnView); backgroundItem->setZValue(-1); m_backgroundItem.append(backgroundItem); m_Scene->addItem(backgroundItem); //如果为非全天则设置背景焦点获取显示 if (m_viewType == PartTimeView) { backgroundItem->setShowFocus(true); } //设置编号 backgroundItem->setBackgroundNum(0); } else { //周视图 for (int i = 0; i < DDEWeekCalendar::AFewDaysofWeek; ++i) { CWeekDayBackgroundItem *item = new CWeekDayBackgroundItem(); connect(item, &CWeekDayBackgroundItem::signalPosOnView, this, &CWeekDayGraphicsview::slotPosOnView); item->setZValue(-1); if (m_backgroundItem.size() > 0) { //设置对应左右和下一个 关系 m_backgroundItem.last()->setNextFocusItem(item); m_backgroundItem.last()->setRightItem(item); item->setLeftItem(m_backgroundItem.last()); } //设置背景直接分隔符 item->setDrawDividingLine(true); //如果为非全天则设置背景焦点获取显示 if (m_viewType == PartTimeView) { item->setShowFocus(true); } //设置编号 item->setBackgroundNum(i); m_backgroundItem.append(item); m_Scene->addItem(item); } } } void CWeekDayGraphicsview::setSceneCurrentItemFocus(const QDate &focusDate) { int offset = static_cast(m_backgroundItem.first()->getDate().daysTo(focusDate)); if (offset >= 0 && offset < m_backgroundItem.size()) { m_Scene->setCurrentFocusItem(m_backgroundItem.at(offset)); m_Scene->currentFocusItemUpdate(); } else { qCWarning(ClientLogger) << "Switching time range error! focusDate:" << focusDate << " first item date:" << m_backgroundItem.first()->getDate(); } } /** * @brief CWeekDayGraphicsview::updateBackgroundShowItem 更新背景上显示的item */ void CWeekDayGraphicsview::updateBackgroundShowItem() { for (int i = 0; i < m_backgroundItem.size(); ++i) { m_backgroundItem.at(i)->updateShowItem(); } } /** * @brief CWeekDayGraphicsview::setBackgroundDate 设置背景时间 */ void CWeekDayGraphicsview::setBackgroundDate() { for (int i = 0; i < m_backgroundItem.size(); ++i) { m_backgroundItem.at(i)->setDate(m_beginDate.addDays(i)); } } void CWeekDayGraphicsview::slotSwitchView(const QDate &focusDate, bool setItemFocus) { if (m_viewType == ALLDayView) { emit signaleSwitchToView(focusDate, PartTimeView, setItemFocus); } else { emit signaleSwitchToView(focusDate, ALLDayView, setItemFocus); } } void CWeekDayGraphicsview::slotViewInit() { m_Scene->currentItemInit(); } void CWeekDayGraphicsview::slotPosOnView(const qreal y) { //定位到当前焦点的item QPointF point(m_Scene->width() / 2, y); centerOn(point); } dde-calendar-5.14.13/calendar-client/src/view/cweekdaygraphicsview.h000066400000000000000000000040351473346337000253530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CWEEKDAYGRAPHICSVIEW_H #define CWEEKDAYGRAPHICSVIEW_H #include "draginfographicsview.h" #include "graphicsItem/cweekdaybackgrounditem.h" /** * @brief The CWeekDayGraphicsview class * 周/日全天和非全天视图 */ class CScheduleCoorManage; class CWeekDayGraphicsview : public DragInfoGraphicsView { Q_OBJECT public: enum ViewPosition { WeekPos //周视图 , DayPos //日视图 }; enum ViewType { ALLDayView //全天 , PartTimeView //非全天 }; public: explicit CWeekDayGraphicsview(QWidget *parent = nullptr, ViewPosition viewPos = WeekPos, ViewType viewtype = ALLDayView); ~CWeekDayGraphicsview() override; void setRange(int w, int h, QDate begindate, QDate enddate, int rightmagin); void setRange(QDate begin, QDate end); void setTheMe(int type = 0) override; CScheduleCoorManage *getCoorManage() const; //设置当前焦点背景item void setCurrentFocusItem(const QDate &focusDate, bool setItemFocus = false); protected: //设置场景的矩阵 void setSceneRect(qreal x, qreal y, qreal w, qreal h); //创建背景显示项 void createBackgroundItem(); void setSceneCurrentItemFocus(const QDate &focusDate) override; //更新背景上显示的item void updateBackgroundShowItem() override; private: //设置背景时间 void setBackgroundDate(); signals: void signaleSwitchToView(const QDate &focusDate, ViewType type, bool setItemFocus); void signalViewFocusInit(); public slots: void slotSwitchView(const QDate &focusDate, bool setItemFocus); void slotViewInit(); void slotPosOnView(const qreal y); protected: ViewPosition m_viewPos; ViewType m_viewType; QDate m_beginDate; QDate m_endDate; CScheduleCoorManage *m_coorManage; int m_rightmagin; QVector m_backgroundItem; }; #endif // CWEEKDAYGRAPHICSVIEW_H dde-calendar-5.14.13/calendar-client/src/view/draginfographicsview.cpp000066400000000000000000001000131473346337000256740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "draginfographicsview.h" #include "scheduledlg.h" #include "schedulectrldlg.h" #include "myscheduleview.h" #include "constants.h" #include "cscheduleoperation.h" #include "graphicsItem/cscenebackgrounditem.h" #include "calendarglobalenv.h" #include "scheduledatamanage.h" #include "graphicsItem/scheduleitem.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //定义拖拽日程 DSchedule::Ptr DragInfoGraphicsView::m_DragScheduleInfo; bool DragInfoGraphicsView::m_hasUpdateMark = false; DragInfoGraphicsView::DragInfoGraphicsView(DWidget *parent) : DGraphicsView(parent) , m_Scene(new CGraphicsScene(this)) , m_rightMenu(new DMenu(this)) , m_MoveDate(QDateTime::currentDateTime()) { setFrameShape(QFrame::NoFrame); setScene(m_Scene); setContentsMargins(0, 0, 0, 0); m_editAction = new QAction(tr("Edit"), this); m_deleteAction = new QAction(tr("Delete"), this); m_createAction = new QAction(tr("New event"), this); connect(m_createAction, &QAction::triggered, this, static_cast(&DragInfoGraphicsView::slotCreate)); this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); this->setViewportMargins(0, 0, 0, 0); setMouseTracking(true); viewport()->setMouseTracking(true); setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); setAlignment(Qt::AlignLeft | Qt::AlignTop); setViewportUpdateMode(QGraphicsView::FullViewportUpdate); m_Drag = new QDrag(this); //设置接受触摸事件 setAttribute(Qt::WA_AcceptTouchEvents); grabGesture(Qt::TapAndHoldGesture); grabGesture(Qt::PanGesture); grabGesture(Qt::TapGesture); grabGesture(Qt::SwipeGesture); m_touchAnimation = new QPropertyAnimation(this, "touchSlidePos", this); //设置动画时间 m_touchAnimation->setDuration(1000); //设置动画曲线 m_touchAnimation->setEasingCurve(QEasingCurve::OutQuart); connect(m_Scene, &CGraphicsScene::signalSwitchPrePage, this, &DragInfoGraphicsView::slotSwitchPrePage); connect(m_Scene, &CGraphicsScene::signalSwitchNextPage, this, &DragInfoGraphicsView::slotSwitchNextPage); connect(m_Scene, &CGraphicsScene::signalGotoDayView, this, &DragInfoGraphicsView::signalGotoDayView); connect(m_Scene, &CGraphicsScene::signalContextMenu, this, &DragInfoGraphicsView::slotContextMenu); connect(m_Scene, &CGraphicsScene::signalsetNextFocus, this, &DragInfoGraphicsView::slotsetNextFocus); setFocusPolicy(Qt::StrongFocus); //日程类型发生改变,刷新界面 connect(gAccountManager, &AccountManager::signalScheduleTypeUpdate, [&]() { this->viewport()->update(); }); } DragInfoGraphicsView::~DragInfoGraphicsView() { } void DragInfoGraphicsView::mousePressEvent(QMouseEvent *event) { if (event->button() != Qt::LeftButton) { return; } stopTouchAnimation(); if (event->source() == Qt::MouseEventSynthesizedByQt) { //如果为触摸点击则记录相关状态并改变触摸状态 DGraphicsView::mousePressEvent(event); m_TouchBeginPoint = event->pos(); m_TouchBeginTime = QDateTime::currentDateTime().toMSecsSinceEpoch(); m_touchState = TS_PRESS; return; } mousePress(event->pos()); m_Scene->currentItemInit(); //更新其它view中item状态显示 emit signalSceneUpdate(); } void DragInfoGraphicsView::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::RightButton) { return; } if (event->source() == Qt::MouseEventSynthesizedByQt) { //如果为触摸点击状态则调用左击事件处理 if (m_touchState == TS_PRESS) { mousePress(m_TouchBeginPoint.toPoint()); } if (m_touchState == TS_SLIDE) { stopTouchAnimation(); const qint64 timeOffset = QDateTime::currentDateTime().toMSecsSinceEpoch() - m_TouchBeginTime; //如果为快速滑动则开启滑动动画效果 if (timeOffset < 150) { m_touchAnimation->setStartValue(verticalScrollBar()->sliderPosition()); m_touchAnimation->setEndValue(verticalScrollBar()->minimum()); switch (m_touchMovingDir) { case touchGestureOperation::T_TOP: { //如果手势往上 m_touchAnimation->setStartValue(verticalScrollBar()->sliderPosition()); m_touchAnimation->setEndValue(verticalScrollBar()->maximum()); m_touchAnimation->start(); break; } case touchGestureOperation::T_BOTTOM: { //如果手势往下 m_touchAnimation->setStartValue(verticalScrollBar()->sliderPosition()); m_touchAnimation->setEndValue(verticalScrollBar()->minimum()); m_touchAnimation->start(); break; } default: break; } } } } m_touchState = TS_NONE; mouseReleaseScheduleUpdate(); //update scene this->scene()->update(); } void DragInfoGraphicsView::mouseMoveEvent(QMouseEvent *event) { //移动偏移 const int lengthOffset = 5; if (event->source() == Qt::MouseEventSynthesizedByQt) { m_touchMovingDir = touchGestureOperation::T_MOVE_NONE; switch (m_touchState) { case TS_NONE: { break; } case TS_PRESS: { //1 点击 qint64 currentTime = QDateTime::currentDateTime().toMSecsSinceEpoch(); qint64 timeOffset = currentTime - m_TouchBeginTime; //获取移动距离 qreal movingLength = QLineF(m_TouchBeginPoint, event->pos()).length(); //如果移动距离小于5且点击时间大于250毫秒小于900毫秒则为拖拽移动状态 if (movingLength < lengthOffset && (timeOffset > 250 && timeOffset < 900)) { m_touchState = TS_DRAG_MOVE; m_touchDragMoveState = 1; } //如果移动距离大于5则为滑动状态 if (movingLength > lengthOffset) { m_touchState = TS_SLIDE; } break; } case TS_DRAG_MOVE: { //2 拖拽移动 qint64 currentTime = QDateTime::currentDateTime().toMSecsSinceEpoch(); qint64 timeOffset = currentTime - m_TouchBeginTime; qreal movingLength = QLineF(m_TouchBeginPoint, event->pos()).length(); //如果移动距离小于5且点击时间大于900毫秒则为长按状态 if (movingLength < lengthOffset && (timeOffset > 900)) { m_touchState = TS_LONG_PRESS; } if (movingLength > lengthOffset) { if (m_touchDragMoveState == 1) { mousePress(m_TouchBeginPoint.toPoint()); } m_touchDragMoveState = 2; } break; } case TS_SLIDE: { //3 滑动 QPointF _currentPoint = event->pos(); slideEvent(m_TouchBeginPoint, _currentPoint); break; } default: break; } } if (m_press) { emit signalScheduleShow(false); m_press = false; DragInfoItem::setPressFlag(false); } if (m_DragStatus == NONE) { DragInfoItem *item = dynamic_cast(itemAt(event->pos())); if (item != nullptr) { if (isCanDragge(item->getData())) { if (m_DragStatus == NONE) { switch (getPosInItem(event->pos(), item->rect())) { case LEFT: case RIGHT: setCursor(Qt::SplitHCursor); break; case TOP: case BOTTOM: setCursor(Qt::SplitVCursor); break; default: setCursor(Qt::ArrowCursor); break; } } } } else { if (m_DragStatus == NONE) { setCursor(Qt::ArrowCursor); } } } else { QDateTime gDate = getPosDate(event->pos()); switch (m_DragStatus) { case IsCreate: if (gDate.date().year() >= DDECalendar::QueryEarliestYear && gDate.date().year() <= DDECalendar::QueryLatestYear) { if (m_PressDate.date().year() >= DDECalendar::QueryEarliestYear && m_PressDate.date().year() <= DDECalendar::QueryLatestYear) { //如果拖拽创建为false则判断是否可被创建。如果为true则不需要判断 m_isCreate = m_isCreate ? m_isCreate : JudgeIsCreate(event->pos()); if (m_isCreate) { if (!IsEqualtime(m_MoveDate, gDate)) { m_MoveDate = gDate; m_DragScheduleInfo = getScheduleInfo(m_PressDate, m_MoveDate); upDateInfoShow(IsCreate, m_DragScheduleInfo); //更新背景上显示的item updateBackgroundShowItem(); setPressSelectInfo(m_DragScheduleInfo); } } } } break; case ChangeBegin: if (!IsEqualtime(m_MoveDate, gDate)) { m_MoveDate = gDate; //获取日程开始时间 QDateTime _beginTime = getDragScheduleInfoBeginTime(m_MoveDate); m_DragScheduleInfo->setDtStart(_beginTime); m_DragScheduleInfo->setDtEnd(m_InfoEndTime); upDateInfoShow(ChangeBegin, m_DragScheduleInfo); } break; case ChangeEnd: if (!IsEqualtime(m_MoveDate, gDate)) { m_MoveDate = gDate; m_DragScheduleInfo->setDtStart(m_InfoBeginTime); //获取结束时间 QDateTime _endTime = getDragScheduleInfoEndTime(m_MoveDate); m_DragScheduleInfo->setDtEnd(_endTime); upDateInfoShow(ChangeEnd, m_DragScheduleInfo); } break; case ChangeWhole: { if (!m_PressRect.contains(event->pos())) { //拖拽前设置是否已经更新日程界面标志为否 m_hasUpdateMark = false; m_Drag->exec(Qt::MoveAction); m_Drag = nullptr; m_DragStatus = NONE; setCursor(Qt::ArrowCursor); //如果拖拽结束后没有修改日程则更新下界面日程显示 if (!m_hasUpdateMark) { updateInfo(); } } } break; default: break; } } DGraphicsView::mouseMoveEvent(event); } void DragInfoGraphicsView::wheelEvent(QWheelEvent *event) { stopTouchAnimation(); DGraphicsView::wheelEvent(event); } void DragInfoGraphicsView::contextMenuEvent(QContextMenuEvent *event) { DGraphicsView::contextMenuEvent(event); //如果不为默认状态则不执行右击事件 if (m_DragStatus != NONE) { return; } emit signalScheduleShow(false); m_press = false; m_DragStatus = NONE; //触摸状态恢复为默认状态 m_touchState = TS_NONE; QGraphicsItem *listItem = itemAt(event->pos()); DragInfoItem *infoitem = dynamic_cast(listItem); CScheduleItem *tt = dynamic_cast(listItem); if (tt != nullptr && tt->getType() != 0) { return; } if (infoitem != nullptr) { //是否为节假日日程判断 if (!CScheduleOperation::isFestival(infoitem->getData())) { m_rightMenu->clear(); m_rightMenu->addAction(m_editAction); m_rightMenu->addAction(m_deleteAction); //如果日程是不可修改的则设置删除按钮无效 m_deleteAction->setEnabled(!CScheduleOperation::scheduleIsInvariant(infoitem->getData())); QAction *action_t = m_rightMenu->exec(QCursor::pos()); if (action_t == m_editAction) { CScheduleDlg dlg(0, this); dlg.setData(infoitem->getData()); if (dlg.exec() == DDialog::Accepted) { emit signalsUpdateSchedule(); } } else if (action_t == m_deleteAction) { DeleteItem(infoitem->getData()); } } else { CMyScheduleView dlg(infoitem->getData(), this); dlg.exec(); } } else { RightClickToCreate(listItem, event->pos()); } } void DragInfoGraphicsView::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasFormat("Info")) { QString str = event->mimeData()->data("Info"); DSchedule::Ptr info; DSchedule::fromJsonString(info, str); if (info.isNull()) { event->ignore(); } //如果该日程是不能被拖拽的则忽略不接受 //重复日程不能被切换全天和非全天 if ((event->source() != this && info->recurs()) || !isCanDragge(info)) { event->ignore(); } else { event->accept(); //设置被修改的日程原始信息 m_PressScheduleInfo = info; } } else { event->ignore(); } } void DragInfoGraphicsView::dragLeaveEvent(QDragLeaveEvent *event) { Q_UNUSED(event); upDateInfoShow(); m_MoveDate = m_MoveDate.addMonths(-2); } void DragInfoGraphicsView::dragMoveEvent(QDragMoveEvent *event) { QString str = event->mimeData()->data("Info"); QDateTime gDate = getPosDate(event->pos()); QJsonParseError json_error; QJsonDocument jsonDoc(QJsonDocument::fromJson(str.toLocal8Bit(), &json_error)); if (json_error.error != QJsonParseError::NoError) { return; } if (!IsEqualtime(m_MoveDate, gDate)) { m_MoveDate = gDate; QJsonObject rootobj = jsonDoc.object(); DSchedule::fromJsonString(m_DragScheduleInfo, str); m_DragScheduleInfo->setMoved(true); MoveInfoProcess(m_DragScheduleInfo, event->posF()); DragInfoItem::setPressSchedule(m_DragScheduleInfo); } } void DragInfoGraphicsView::dropEvent(QDropEvent *event) { if (event->mimeData()->hasFormat("Info")) { if (event->source() != this || m_MoveDate != m_PressDate) { //后面方法出现模态框,阻塞,导致拖拽图片不消失,手动先调用取消接口解决 QDrag::cancel(); auto startDate = m_DragScheduleInfo->dtStart(); auto endDate = m_DragScheduleInfo->dtEnd(); if (startDate.date().year() >= DDECalendar::QueryEarliestYear && endDate.date().year() <= DDECalendar::QueryLatestYear) { updateScheduleInfo(m_DragScheduleInfo); } else { emit signalsUpdateSchedule(); } m_DragStatus = NONE; m_MoveDate = m_MoveDate.addMonths(-2); } } } bool DragInfoGraphicsView::event(QEvent *e) { if (e->type() == QEvent::Leave) { if (m_DragStatus == IsCreate || m_DragStatus == ChangeBegin || m_DragStatus == ChangeEnd) mouseReleaseScheduleUpdate(); } return DGraphicsView::event(e); } void DragInfoGraphicsView::keyPressEvent(QKeyEvent *event) { DGraphicsView::keyPressEvent(event); } void DragInfoGraphicsView::paintEvent(QPaintEvent *event) { DGraphicsView::paintEvent(event); //绘制圆角效果 QPainter painter(viewport()); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); painter.setBrush(m_outerBorderColor); //左下角绘制圆角补角,颜色与外框背景色一致 if (m_leftShowRadius) { QPainterPath _leftPath; _leftPath.moveTo(0, this->height() - m_radius); _leftPath.arcTo(0, this->height() - m_radius * 2, m_radius * 2, m_radius * 2, 180, 90); _leftPath.lineTo(0, this->height()); _leftPath.lineTo(0, this->height() - m_radius); painter.drawPath(_leftPath); } //右下角绘制圆角补角 if (m_rightShowRadius) { QPainterPath _rightPath; _rightPath.moveTo(this->width() - m_radius, this->height()); _rightPath.arcTo(this->width() - m_radius * 2, this->height() - m_radius * 2, m_radius * 2, m_radius * 2, 270, 90); _rightPath.lineTo(this->width(), this->height()); _rightPath.lineTo(this->width() - m_radius, this->height()); painter.drawPath(_rightPath); painter.end(); } } void DragInfoGraphicsView::showEvent(QShowEvent *event) { //显示时重置大小 resize(this->width(), this->height()); DGraphicsView::showEvent(event); } void DragInfoGraphicsView::slotCreate() { slotCreate(m_createDate); } /** * @brief DragInfoGraphicsView::setPressSelectInfo 设置点击选中日程 * @param info */ void DragInfoGraphicsView::setPressSelectInfo(const DSchedule::Ptr &info) { DragInfoItem::setPressSchedule(info); } /** * @brief DragInfoGraphicsView::updateScheduleInfo 拖拽更新日程信息 * @param info */ void DragInfoGraphicsView::updateScheduleInfo(const DSchedule::Ptr &info) { QVariant variant; //获取主窗口指针 CalendarGlobalEnv::getGlobalEnv()->getValueByKey("MainWindow", variant); QObject *parent = static_cast(variant.value()); //设置父类为主窗口 CScheduleOperation _scheduleOperation(info->scheduleTypeID(), qobject_cast(parent)); if (_scheduleOperation.changeSchedule(info, m_PressScheduleInfo)) { //如果日程修改成功则更新更新标志 m_hasUpdateMark = true; } else { //如果取消更新则主动更新显示 updateInfo(); } } void DragInfoGraphicsView::DragPressEvent(const QPoint &pos, DragInfoItem *item) { m_PressPos = pos; m_PressDate = getPosDate(pos); m_MoveDate = m_PressDate.addMonths(-2); CalendarGlobalEnv::getGlobalEnv()->reviseValue(DDECalendar::CursorPointKey, mapToGlobal(pos)); if (item != nullptr) { PosInItem mpressstatus = getPosInItem(pos, item->boundingRect()); if (mpressstatus != MIDDLE && !isCanDragge(item->getData())) { return; } //拖拽使用副本,不更改原始日程 m_DragScheduleInfo.reset(item->getData()->clone()); m_PressScheduleInfo = item->getData(); m_InfoBeginTime = m_DragScheduleInfo->dtStart(); m_InfoEndTime = m_DragScheduleInfo->dtEnd(); switch (mpressstatus) { case TOP: m_DragStatus = ChangeBegin; setCursor(Qt::SplitVCursor); break; case BOTTOM: m_DragStatus = ChangeEnd; setCursor(Qt::SplitVCursor); break; case LEFT: m_DragStatus = ChangeBegin; setCursor(Qt::SplitHCursor); break; case RIGHT: m_DragStatus = ChangeEnd; setCursor(Qt::SplitHCursor); break; default: ShowSchedule(item); m_DragStatus = ChangeWhole; QMimeData *mimeData = new QMimeData(); mimeData->setText(m_DragScheduleInfo->summary()); QString strData; DSchedule::toJsonString(m_DragScheduleInfo, strData); //数据转换 mimeData->setData("Info", strData.toUtf8()); if (m_Drag == nullptr) { m_Drag = new QDrag(this); } m_Drag->setMimeData(mimeData); QPointF itemPos = QPointF(pos.x() - item->boundingRect().x(), pos.y() - item->boundingRect().y()); m_Drag->setHotSpot(itemPos.toPoint()); setDragPixmap(m_Drag, item); break; } } else { m_DragStatus = IsCreate; m_isCreate = false; } } /** * @brief DragInfoGraphicsView::mouseReleaseScheduleUpdate 鼠标左击释放数据处理 */ void DragInfoGraphicsView::mouseReleaseScheduleUpdate() { setCursor(Qt::ArrowCursor); m_press = false; DragInfoItem::setPressFlag(false); switch (m_DragStatus) { case IsCreate: if (MeetCreationConditions(m_MoveDate)) { //如果不添加会进入leaveEvent事件内的条件 m_DragStatus = NONE; CScheduleDlg dlg(1, this); dlg.setData(m_DragScheduleInfo); //如果取消新建则主动刷新日程信息 dlg.exec(); //因dtk override了exec函数,这里使用result判断返回值类型,如果不为Accepted则刷新界面 if (dlg.result() != DDialog::Accepted) { updateInfo(); } //设置选中日程为无效日程 setPressSelectInfo(DSchedule::Ptr()); } break; case ChangeBegin: if (!IsEqualtime(m_MoveDate, m_InfoBeginTime)) { //如果不添加会进入leaveEvent事件内的条件 m_DragStatus = NONE; updateScheduleInfo(m_DragScheduleInfo); } break; case ChangeEnd: if (!IsEqualtime(m_MoveDate, m_InfoEndTime)) { //如果不添加会进入leaveEvent事件内的条件 m_DragStatus = NONE; updateScheduleInfo(m_DragScheduleInfo); } break; default: break; } m_DragStatus = NONE; update(); } void DragInfoGraphicsView::mousePress(const QPoint &point) { setPressSelectInfo(DSchedule::Ptr()); //设置拖拽日程为无效日程 m_DragScheduleInfo = DSchedule::Ptr(); pressScheduleInit(); QGraphicsItem *listItem = itemAt(point); DragInfoItem *infoitem = dynamic_cast(listItem); //不满足拖拽条件的日程不进行拖拽事件 if (infoitem) { setPressSelectInfo(infoitem->getData()); m_PressScheduleInfo = infoitem->getData(); m_press = true; if (isCanDragge(infoitem->getData())) { //满足拖拽条件 DragInfoItem::setPressFlag(true); DragPressEvent(point, infoitem); } else { //不满足拖拽条件,只展示信息弹窗 m_PressPos = point; m_PressDate = getPosDate(point); CalendarGlobalEnv::getGlobalEnv()->reviseValue(DDECalendar::CursorPointKey, mapToGlobal(point)); ShowSchedule(infoitem); } } else { //没有日程信息,可滑动 emit signalScheduleShow(false); DragPressEvent(point, infoitem); } this->scene()->update(); update(); } int DragInfoGraphicsView::getSlidePos() const { return m_touchSlidePos; } void DragInfoGraphicsView::setSlidePos(int pos) { m_touchSlidePos = pos; verticalScrollBar()->setValue(m_touchSlidePos); } void DragInfoGraphicsView::stopTouchAnimation() { m_touchAnimation->stop(); } /** * @brief DragInfoGraphicsView::DeleteItem 删除日程 * @param info */ void DragInfoGraphicsView::DeleteItem(const DSchedule::Ptr &info) { if (info.isNull()) return; //删除日程 CScheduleOperation _scheduleOperation(info->scheduleTypeID(), this); _scheduleOperation.deleteSchedule(info); } /** * @brief DragInfoGraphicsView::setSelectSearchSchedule 设置选中搜索日程 * @param scheduleInfo */ void DragInfoGraphicsView::setSelectSearchSchedule(const DSchedule::Ptr &scheduleInfo) { setPressSelectInfo(scheduleInfo); } void DragInfoGraphicsView::setDragPixmap(QDrag *drag, DragInfoItem *item) { Q_UNUSED(item); //设置一个1*1的透明图片,要不然关闭窗口特效会有一个小黑点 QPixmap pixmap(1, 1); pixmap.fill(Qt::transparent); drag->setPixmap(pixmap); //设置图标位置为鼠标位置 drag->setHotSpot(QPoint(0, 0)); } void DragInfoGraphicsView::slotCreate(const QDateTime &date) { CScheduleDlg dlg(1, this); QDateTime tDatatime; tDatatime.setDate(date.date()); if (date.date() == QDate::currentDate()) { tDatatime.setTime(QTime::currentTime()); } else { tDatatime.setTime(QTime(8, 0)); } dlg.setDate(tDatatime); dlg.setAllDay(true); if (dlg.exec() == DDialog::Accepted) { emit signalsUpdateSchedule(); } } DSchedule::Ptr DragInfoGraphicsView::getScheduleInfo(const QDateTime &beginDate, const QDateTime &endDate) { DSchedule::Ptr info; info.reset(new DSchedule()); if (beginDate.daysTo(endDate) > 0) { info->setDtStart(QDateTime(beginDate.date(), QTime(0, 0, 0))); info->setDtEnd(QDateTime(endDate.date(), QTime(23, 59, 59))); } else { info->setDtStart(QDateTime(endDate.date(), QTime(0, 0, 0))); info->setDtEnd(QDateTime(beginDate.date(), QTime(23, 59, 00))); } info->setSummary(tr("New Event")); info->setAllDay(true); //设置默认日程类型为工作 info->setScheduleTypeID("107c369e-b13a-4d45-9ff3-de4eb3c0475b"); //设置提醒规则 info->setAlarmType(DSchedule::Alarm_15Hour_Front); return info; } void DragInfoGraphicsView::ShowSchedule(DragInfoItem *infoitem) { if (infoitem == nullptr) return; emit signalScheduleShow(true, infoitem->getData()); } void DragInfoGraphicsView::setTheMe(int type) { Q_UNUSED(type); DPalette _painte; //获取外框背景色 m_outerBorderColor = _painte.color(QPalette::Active, QPalette::Window); } void DragInfoGraphicsView::slideEvent(QPointF &startPoint, QPointF &stopPort) { qreal _movingLine {0}; //获取滑动方向 touchGestureOperation::TouchMovingDirection _touchMovingDir = touchGestureOperation::getTouchMovingDir(startPoint, stopPort, _movingLine); m_touchMovingDir = _touchMovingDir; //切换标志 0 不切换 1 下一页 -1 上一页 int delta {0}; //移动偏移 25则切换 const int moveOffset = 25; switch (_touchMovingDir) { case touchGestureOperation::T_TOP: case touchGestureOperation::T_BOTTOM: { const int pos_Diff_Y = qFloor(stopPort.y() - startPoint.y()); verticalScrollBar()->setValue(verticalScrollBar()->sliderPosition() - pos_Diff_Y); startPoint = stopPort; break; } case touchGestureOperation::T_LEFT: { if (_movingLine > moveOffset) { delta = 1; startPoint = stopPort; } break; } case touchGestureOperation::T_RIGHT: { if (_movingLine > moveOffset) { delta = -1; startPoint = stopPort; } break; } default: break; } if (delta != 0) { emit signalAngleDelta(delta); } } /** * @brief DragInfoGraphicsView::updateInfo 更新日程数据显示 */ void DragInfoGraphicsView::updateInfo() { //如果拖拽日程有效则更新为不是移动日程 if (m_DragScheduleInfo && m_DragScheduleInfo->isValid() && m_DragScheduleInfo->uid() != "0") { m_DragScheduleInfo->setMoved(false); //设置选择日程状态 setPressSelectInfo(m_DragScheduleInfo); } } int DragInfoGraphicsView::getDragStatus() const { return m_DragStatus; } void DragInfoGraphicsView::setShowRadius(bool leftShow, bool rightShow) { m_leftShowRadius = leftShow; m_rightShowRadius = rightShow; } bool DragInfoGraphicsView::isCanDragge(const DSchedule::Ptr &info) { if (info.isNull() || info->scheduleTypeID().isEmpty()) return false; //是否为节假日日程判断 if (CScheduleOperation::isFestival(info)) return false; if (info->lunnar() && !QLocale::system().name().startsWith("zh_")) return false; //日程不可被修改 if (CScheduleOperation::scheduleIsInvariant(info)) { return false; } return true; } /** * @brief DragInfoGraphicsView::slotDeleteItem 删除日程 */ void DragInfoGraphicsView::slotDeleteItem() { //获取选中日程 DSchedule::Ptr _pressSchedule = DragInfoItem::getPressSchedule(); //根据焦点状态获取当前焦点的item CSceneBackgroundItem *backgroundItem = dynamic_cast(m_Scene->getCurrentFocusItem()); if (backgroundItem != nullptr) { DragInfoItem *dFocusItem = dynamic_cast(backgroundItem->getFocusItem()); if (dFocusItem != nullptr && dFocusItem->getItemType() == CFocusItem::CITEM) { if (dFocusItem->getItemFocus()) { _pressSchedule = dFocusItem->getData(); } } } //判断是否有效,如果为有效日程且日程类型不为节日或纪念日或不可更改日程则删除 //判断日程信息 if (!_pressSchedule.isNull() && _pressSchedule->isValid() && !CScheduleOperation::isFestival(_pressSchedule) && !CScheduleOperation::scheduleIsInvariant(_pressSchedule)) { CScheduleOperation _scheduleOperation(_pressSchedule->scheduleTypeID(), this); _scheduleOperation.deleteSchedule(_pressSchedule); //设置选择日程为无效日程 setPressSelectInfo(DSchedule::Ptr()); //设置拖拽日程为无效日程 m_DragScheduleInfo = DragInfoItem::getPressSchedule(); } } void DragInfoGraphicsView::slotSwitchPrePage(const QDate &focusDate, bool isSwitchView) { emit signalSwitchPrePage(); if (isSwitchView) { m_Scene->signalSwitchView(focusDate, true); } else { setSceneCurrentItemFocus(focusDate); } } void DragInfoGraphicsView::slotSwitchNextPage(const QDate &focusDate, bool isSwitchView) { emit signalSwitchNextPage(); //如果需要切换视图则 if (isSwitchView) { m_Scene->signalSwitchView(focusDate, true); } else { setSceneCurrentItemFocus(focusDate); } } void DragInfoGraphicsView::slotContextMenu(CFocusItem *item) { DragInfoItem *infoitem = dynamic_cast(item); if (infoitem != nullptr) { //如果为节假日则退出不展示右击菜单 if (CScheduleOperation::isFestival(infoitem->getData())) return; //快捷键调出右击菜单 m_Scene->setIsContextMenu(true); m_rightMenu->clear(); m_rightMenu->addAction(m_editAction); m_rightMenu->addAction(m_deleteAction); //如果日程不可修改则设置删除无效 m_deleteAction->setEnabled(!CScheduleOperation::scheduleIsInvariant(infoitem->getData())); QPointF itemPos = QPointF(infoitem->rect().x() + infoitem->rect().width() / 2, infoitem->rect().y() + infoitem->rect().height() / 2); QPointF scene_pos = infoitem->mapToScene(itemPos); QPointF view_pos = mapFromScene(scene_pos); QPoint screen_pos = mapToGlobal(view_pos.toPoint()); QAction *action_t = m_rightMenu->exec(screen_pos); if (action_t == m_editAction) { CScheduleDlg dlg(0, this); dlg.setData(infoitem->getData()); if (dlg.exec() == DDialog::Accepted) { emit signalsUpdateSchedule(); } } else if (action_t == m_deleteAction) { DeleteItem(infoitem->getData()); } m_Scene->setIsContextMenu(false); m_Scene->currentFocusItemUpdate(); } } /** * @brief DragInfoGraphicsView::slotsetNextFocus 切换到下一个焦点 */ void DragInfoGraphicsView::slotsetNextFocus() { focusNextPrevChild(true); } void DragInfoGraphicsView::setSceneCurrentItemFocus(const QDate &focusDate) { Q_UNUSED(focusDate); } /** * @brief DragInfoGraphicsView::pressScheduleInit 初始化点击日程 */ void DragInfoGraphicsView::pressScheduleInit() { m_PressScheduleInfo = DSchedule::Ptr(); } QDate DragInfoGraphicsView::getCurrentDate() const { return m_currentDate; } void DragInfoGraphicsView::setCurrentDate(const QDate ¤tDate) { m_currentDate = currentDate; } dde-calendar-5.14.13/calendar-client/src/view/draginfographicsview.h000066400000000000000000000212101473346337000253420ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DRAGINFOGRAPHICSVIEW_H #define DRAGINFOGRAPHICSVIEW_H #include "graphicsItem/draginfoitem.h" #include "../widget/touchgestureoperation.h" #include "dschedule.h" #include "cgraphicsscene.h" #include #include #include #include DWIDGET_USE_NAMESPACE class CScheduleDataManage; class QPropertyAnimation; class DragInfoGraphicsView : public DGraphicsView { Q_OBJECT Q_PROPERTY(int touchSlidePos READ getSlidePos WRITE setSlidePos) public: explicit DragInfoGraphicsView(DWidget *parent = nullptr); ~DragInfoGraphicsView() override; public: //鼠标位置 enum PosInItem {LEFT, MIDDLE, RIGHT, TOP, BOTTOM}; //鼠标移动状态 enum DragStatus {IsCreate = 0, ChangeBegin = 1, ChangeEnd = 2, ChangeWhole = 3, NONE = 4}; /** * @brief The TouchState enum 触摸状态 */ enum TouchState { TS_NONE //默认状态 , TS_PRESS //点击 , TS_DRAG_MOVE //拖拽移动 , TS_SLIDE //滑动 , TS_LONG_PRESS //长按 }; int getDragStatus() const; void setShowRadius(bool leftShow = false, bool rightShow = false); //判断是否满足拖拽条件 bool isCanDragge(const DSchedule::Ptr &info); protected: void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void wheelEvent(QWheelEvent *event) override; void contextMenuEvent(QContextMenuEvent *event) override; void dragEnterEvent(QDragEnterEvent *event) override; void dragLeaveEvent(QDragLeaveEvent *event) override; void dragMoveEvent(QDragMoveEvent *event) override; void dropEvent(QDropEvent *event) override; bool event(QEvent *e) override; void keyPressEvent(QKeyEvent *event) override; void paintEvent(QPaintEvent *event) override; void showEvent(QShowEvent *event) override; private: void slotCreate(); //设置点击选中日程 void setPressSelectInfo(const DSchedule::Ptr &info); //拖拽更新日程信息 void updateScheduleInfo(const DSchedule::Ptr &info); void DragPressEvent(const QPoint &pos, DragInfoItem *item); //鼠标左击释放数据处理 void mouseReleaseScheduleUpdate(); /** * @brief mousePress 鼠标左击事件处理 * @param point 左击坐标 */ void mousePress(const QPoint &point); /** * @brief getSlidePos 获取滑动位置 * @return */ int getSlidePos() const; /** * @brief setSlidePos 设置滑动位置 * @param pos */ void setSlidePos(int pos); /** * @brief stopTouchAnimation 停止触摸滑动动画效果 */ void stopTouchAnimation(); protected: //删除日程 void DeleteItem(const DSchedule::Ptr &info); public: //设置搜索选中日程 virtual void setSelectSearchSchedule(const DSchedule::Ptr &scheduleInfo); //初始化点击日程 void pressScheduleInit(); QDate getCurrentDate() const; void setCurrentDate(const QDate ¤tDate); protected: virtual void setDragPixmap(QDrag *drag, DragInfoItem *item); virtual void slotCreate(const QDateTime &date); //符合创建条件 virtual bool MeetCreationConditions(const QDateTime &date) = 0; virtual void upDateInfoShow(const DragStatus &status = NONE, const DSchedule::Ptr &info = DSchedule::Ptr()) = 0; virtual QDateTime getPosDate(const QPoint &p) = 0; virtual void MoveInfoProcess(DSchedule::Ptr &info, const QPointF &pos) = 0; virtual PosInItem getPosInItem(const QPoint &p, const QRectF &itemRect) = 0; virtual DSchedule::Ptr getScheduleInfo(const QDateTime &beginDate, const QDateTime &endDate); virtual void ShowSchedule(DragInfoItem *infoitem); //设置主题 virtual void setTheMe(int type = 0); //判断时间是否相等 virtual bool IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) = 0; //根据鼠标移动的距离判断是否创建日程 virtual bool JudgeIsCreate(const QPointF &pos) = 0; virtual void RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) = 0; /** * @brief getDragScheduleInfoBeginTime 获取拖拽日程开始时间 * @param moveDateTime 当前鼠标移动坐标对应的时间 * @return */ virtual QDateTime getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) = 0; /** * @brief getDragScheduleInfoEndTime 获取拖拽日程结束时间 * @param moveDateTime 当前鼠标移动坐标对应的时间 * @return */ virtual QDateTime getDragScheduleInfoEndTime(const QDateTime &moveDateTime) = 0; /** * @brief slideEvent 触摸滑动事件处理 * @param startPoint 触摸开始坐标 * @param stopPort 触摸结束坐标 */ virtual void slideEvent(QPointF &startPoint, QPointF &stopPort); //更新日程显示 virtual void updateInfo(); //更新背景上显示的item virtual void updateBackgroundShowItem() = 0; signals: /** * @brief signalAngleDelta 发送滚动信号滚动相对量 * @param delta 滚动相对量 */ void signalAngleDelta(int delta); //更新获取日程信息 void signalsUpdateSchedule(); /** * @brief signalScheduleShow 发送日程提示框信号 * @param isShow 是否显示 * @param out 显示的日程信息 */ void signalScheduleShow(const bool isShow, const DSchedule::Ptr &out = DSchedule::Ptr()); //scene更新 void signalSceneUpdate(); void signalSwitchPrePage(); void signalSwitchNextPage(); void signalGotoDayView(const QDate &date); public slots: //删除日程 void slotDeleteItem(); void slotSwitchPrePage(const QDate &focusDate, bool isSwitchView = false); void slotSwitchNextPage(const QDate &focusDate, bool isSwitchView = false); void slotContextMenu(CFocusItem *item); //切换焦点到下一个 void slotsetNextFocus(); protected: //设置场景数据切换后当前item焦点 virtual void setSceneCurrentItemFocus(const QDate &focusDate); protected: int m_themetype = 0; CGraphicsScene *m_Scene = nullptr; bool m_press = false; QAction *m_createAction = nullptr; // 创建日程 QAction *m_editAction = nullptr; QAction *m_deleteAction = nullptr; DMenu *m_rightMenu = nullptr; QDateTime m_createDate; DragStatus m_DragStatus = NONE; bool m_isCreate; QDateTime m_PressDate; QDateTime m_MoveDate; QPoint m_PressPos; //保证月,周/日全天和非全天的拖拽日程为同一个 static DSchedule::Ptr m_DragScheduleInfo; static bool m_hasUpdateMark; //拖拽后是否需要更新显示标志 QDateTime m_InfoBeginTime; QDateTime m_InfoEndTime; QDrag *m_Drag = nullptr; //点击的原始info DSchedule::Ptr m_PressScheduleInfo; QRectF m_PressRect; /** * @brief m_TouchBeginPoint 触摸开始坐标 */ QPointF m_TouchBeginPoint; /** * @brief m_TouchBeginTime 触摸点击屏幕的事件 */ qint64 m_TouchBeginTime; /** * @brief m_touchState 触摸状态 */ TouchState m_touchState = TS_NONE; /** * @brief m_touchDragMoveState 触摸拖拽移动状态 * 0 原始状态 * 1 拖拽确认,移动的时候触发点击事件 * 2 拖拽移动 */ int m_touchDragMoveState = 0; /** * @brief m_touchState 触摸滑动位置 */ int m_touchSlidePos {0}; /** * @brief m_touchAnimation 触摸滑动动画 */ QPropertyAnimation *m_touchAnimation; /** * @brief m_touchMovingDir 记录快速滑动方向 */ touchGestureOperation::TouchMovingDirection m_touchMovingDir {touchGestureOperation::T_MOVE_NONE}; qreal m_radius{16}; //圆角半径 bool m_leftShowRadius{false}; //左下角显示圆角 bool m_rightShowRadius{false}; //右下角显示圆角 QColor m_outerBorderColor; //外边框背景色 QDate m_currentDate; }; #endif // DRAGINFOGRAPHICSVIEW_H dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/000077500000000000000000000000001473346337000234075ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/calldayscheduleitem.cpp000066400000000000000000000105201473346337000301160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calldayscheduleitem.h" #include CAllDayScheduleItem::CAllDayScheduleItem(QRectF rect, QGraphicsItem *parent) : DragInfoItem(rect, parent) { } bool CAllDayScheduleItem::hasSelectSchedule(const DSchedule::Ptr &info) { return info == m_vScheduleInfo; } void CAllDayScheduleItem::paintBackground(QPainter *painter, const QRectF &rect, const bool isPixMap) { Q_UNUSED(isPixMap); m_font = DFontSizeManager::instance()->get(m_sizeType, m_font); painter->setRenderHints(QPainter::Antialiasing); //根据日程类型获取类型颜色 CSchedulesColor gdColor = CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType(m_vScheduleInfo->scheduleTypeID()); QRectF drawrect = rect; QColor textcolor = CScheduleDataManage::getScheduleDataManage()->getTextColor(); //判断是否为选中日程 if (m_vScheduleInfo == m_pressInfo) { //判断当前日程是否为拖拽移动日程 if (m_vScheduleInfo->isMoved() == m_pressInfo->isMoved()) { m_vHighflag = true; } else { painter->setOpacity(0.4); textcolor.setAlphaF(0.4); } m_vSelectflag = m_press; } int themetype = CScheduleDataManage::getScheduleDataManage()->getTheme(); QColor brushColor = gdColor.normalColor; if (m_vHoverflag) { brushColor = gdColor.hoverColor; } else if (m_vHighflag) { brushColor = gdColor.pressColor; } else if (m_vSelectflag) { brushColor = gdColor.pressColor; textcolor.setAlphaF(0.4); } QRectF fillRect = QRectF(drawrect.x(), drawrect.y(), drawrect.width(), drawrect.height() - 2); //将直线开始点设为0,终点设为1,然后分段设置颜色 painter->setBrush(brushColor); if (getItemFocus() && isPixMap == false) { QPen framePen; framePen.setWidth(2); framePen.setColor(getSystemActiveColor()); painter->setPen(framePen); } else { painter->setPen(Qt::NoPen); } painter->drawRoundedRect(fillRect, rect.height() / 3, rect.height() / 3); painter->setFont(m_font); painter->setPen(textcolor); QFontMetrics fm = painter->fontMetrics(); QString tSTitleName = m_vScheduleInfo->summary(); tSTitleName.replace("\n", ""); QString str = tSTitleName; QString tStr; int _rightOffset = fm.horizontalAdvance("..."); //显示宽度 左侧偏移13右侧偏移8 qreal _showWidth = fillRect.width() - 13 - 8 - m_offset * 2; //如果标题总长度大于显示长度则显示长度须减去"..."的长度 if (fm.horizontalAdvance(str) > _showWidth) { _showWidth -= _rightOffset; for (int i = 0; i < str.count(); i++) { tStr.append(str.at(i)); int widthT = fm.horizontalAdvance(tStr); //如果宽度大于显示长度则去除最后添加的字符 if (widthT > _showWidth) { tStr.chop(1); break; } } if (tStr != str) { tStr = tStr + "..."; } } else { tStr = str; } painter->drawText(QRectF(fillRect.topLeft().x() + 13, fillRect.y(), fillRect.width(), fillRect.height()), Qt::AlignLeft | Qt::AlignVCenter, tStr); if (m_vHoverflag && !m_vSelectflag) { QRectF tRect = QRectF(fillRect.x() + 0.5, fillRect.y() + 0.5, fillRect.width() - 1, fillRect.height() - 1); painter->save(); QPen pen; QColor selcolor; if (themetype == 2) { selcolor = "#FFFFFF"; } else { selcolor = "#000000"; } selcolor.setAlphaF(0.08); pen.setColor(selcolor); pen.setWidthF(1); pen.setStyle(Qt::SolidLine); painter->setBrush(Qt::NoBrush); painter->setPen(pen); painter->drawRoundedRect(tRect, rect.height() / 3, rect.height() / 3); painter->restore(); } if (m_vSelectflag) { QColor selcolor = "#000000"; selcolor.setAlphaF(0.05); painter->setBrush(selcolor); painter->setPen(Qt::NoPen); painter->drawRoundedRect(fillRect, rect.height() / 3, rect.height() / 3); } } dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/calldayscheduleitem.h000066400000000000000000000011261473346337000275650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CALLDAYSCHEDULEITEM_H #define CALLDAYSCHEDULEITEM_H #include "draginfoitem.h" #include "dschedule.h" class CAllDayScheduleItem : public DragInfoItem { Q_OBJECT public: explicit CAllDayScheduleItem(QRectF rect, QGraphicsItem *parent = nullptr); bool hasSelectSchedule(const DSchedule::Ptr &info); protected: void paintBackground(QPainter *painter, const QRectF &rect, const bool isPixMap = false) override; }; #endif // CALLDAYSCHEDULEITEM_H dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/cfocusitem.cpp000066400000000000000000000035271473346337000262630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cfocusitem.h" #include "scheduledatamanage.h" #include #include CFocusItem::CFocusItem(QGraphicsItem *parent) : QGraphicsRectItem(parent) , m_NextFocusItem(nullptr) , m_itemType(CITEM) , m_isFocus(false) { } /** * @brief CFocusItem::setNextFocusItem 设置下一个FocusItem * @param nextFocusItem */ void CFocusItem::setNextFocusItem(CFocusItem *nextFocusItem) { m_NextFocusItem = nextFocusItem; } /** * @brief CFocusItem::setItemFocus 设置item是否获取focus * @param isFocus */ void CFocusItem::setItemFocus(bool isFocus) { m_isFocus = isFocus; this->scene()->update(); } /** * @brief CFocusItem::getItemFocus 获取该item是否focus * @return */ bool CFocusItem::getItemFocus() const { return m_isFocus; } /** * @brief CFocusItem::setItemType 设置item类型 * @param itemType */ void CFocusItem::setItemType(CFocusItem::CItemType itemType) { m_itemType = itemType; } /** * @brief CFocusItem::getItemType 获取item类型 * @return */ CFocusItem::CItemType CFocusItem::getItemType() const { return m_itemType; } /** * @brief CFocusItem::setNextItemFocusAndGetNextItem 设置下一个item focus状态并获取下一个Item * @return */ CFocusItem *CFocusItem::setNextItemFocusAndGetNextItem() { if (m_NextFocusItem != nullptr) { m_isFocus = false; m_NextFocusItem->setItemFocus(true); } return m_NextFocusItem; } /** * @brief CFocusItem::getSystemActiveColor 获取系统活动色 * @return */ QColor CFocusItem::getSystemActiveColor() { return CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); } void CFocusItem::setDate(const QDate &date) { m_Date = date; } dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/cfocusitem.h000066400000000000000000000024321473346337000257220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CFOCUSITEM_H #define CFOCUSITEM_H #include #include #include #include class CFocusItem : public QObject , public QGraphicsRectItem { Q_OBJECT public: enum CItemType { CBACK, CITEM, COTHER }; public: explicit CFocusItem(QGraphicsItem *parent = nullptr); //设置下一个FocusItem void setNextFocusItem(CFocusItem *nextFocusItem); //设置item是否获取focus virtual void setItemFocus(bool isFocus); //获取该item是否focus bool getItemFocus() const; //设置item类型 void setItemType(CItemType itemType); //获取item类型 CItemType getItemType() const; //设置下一个item focus状态并获取下一个Item virtual CFocusItem *setNextItemFocusAndGetNextItem(); //获取系统活动色 QColor getSystemActiveColor(); //设置显示日期 void setDate(const QDate &date); //获取显示日期 QDate getDate() const { return m_Date; } protected: QDate m_Date; private: CFocusItem *m_NextFocusItem; CItemType m_itemType; bool m_isFocus; }; #endif // CFOCUSITEM_H dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/cmonthdayitem.cpp000066400000000000000000000164421473346337000267670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cmonthdayitem.h" #include "constants.h" #include "scheduledatamanage.h" #include #include #include bool CMonthDayItem::m_LunarVisible = false; CMonthDayItem::CMonthDayItem(QGraphicsItem *parent) : CSceneBackgroundItem(CSceneBackgroundItem::OnMonthView, parent) , m_DayLunar("") , m_DayStatus(H_NONE) { //设置字体 m_dayNumFont.setPixelSize(DDECalendar::FontSizeTwentyfour); m_dayNumFont.setWeight(QFont::Light); m_LunerFont.setPixelSize(DDECalendar::FontSizeTwelve); m_LunerFont.setWeight(QFont::Normal); } CMonthDayItem::~CMonthDayItem() { } /** * @brief CMonthDayItem::setLunar 设置农历信息 * @param lunar */ void CMonthDayItem::setLunar(const QString &lunar) { m_DayLunar = lunar; } /** * @brief CMonthDayItem::setStatus 设置班休状态 * @param status */ void CMonthDayItem::setStatus(const CMonthDayItem::HolidayStatus &status) { m_DayStatus = status; } /** * @brief CMonthDayItem::setTheMe 设置主题 * @param type */ void CMonthDayItem::setTheMe(int type) { m_themetype = type; if (type == 0 || type == 1) { m_dayNumColor = "#000000"; m_dayNumCurrentColor = "#FFFFFF"; m_LunerColor = "#5E5E5E"; m_LunerColor.setAlphaF(0.5); m_fillColor = Qt::white; m_banColor = "#FF7171"; m_banColor.setAlphaF(0.1); m_xiuColor = "#ADFF71"; m_xiuColor.setAlphaF(0.1); m_BorderColor = "#000000"; m_BorderColor.setAlphaF(0.05); } else if (type == 2) { m_dayNumColor = "#C0C6D4"; m_dayNumCurrentColor = "#B8D3FF"; m_LunerColor = "#ABDAFF"; m_LunerColor.setAlphaF(0.5); m_fillColor = "#000000"; m_fillColor.setAlphaF(0.05); m_banColor = "#FF7171"; m_banColor.setAlphaF(0.1); m_xiuColor = "#ADFF71"; m_xiuColor.setAlphaF(0.1); m_BorderColor = "#000000"; m_BorderColor.setAlphaF(0.05); } update(); } void CMonthDayItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option) Q_UNUSED(widget) const int hh = 36; m_currentColor = getSystemActiveColor(); painter->setRenderHints(QPainter::Antialiasing); //绘制背景 if (m_LunarVisible) { switch (m_DayStatus) { case H_WORK: painter->setBrush(QBrush(m_banColor)); break; case H_REST: painter->setBrush(QBrush(m_xiuColor)); break; default: painter->setBrush(QBrush(m_fillColor)); break; } } else { painter->setBrush(QBrush(m_fillColor)); } if (!m_IsCurrentMonth) { painter->setOpacity(0.4); } QPen pen; pen.setWidth(1); pen.setColor(m_BorderColor); painter->setPen(pen); painter->drawRect(this->rect()); painter->save(); //绘制日期 painter->setFont(m_dayNumFont); QRectF fillRect; if (m_LunarVisible) { fillRect.setRect(this->rect().x() + 3, this->rect().y() + 4, hh, hh); } else { fillRect.setRect(this->rect().x(), this->rect().y() + 4, this->rect().width(), hh); } //如果为当前时间 if (m_Date == QDate::currentDate()) { //设置不透明度为1 painter->setOpacity(1); QFont tFont = m_dayNumFont; tFont.setPixelSize(DDECalendar::FontSizeTwenty); painter->setFont(tFont); painter->setPen(m_dayNumCurrentColor); painter->save(); painter->setBrush(QBrush(m_currentColor)); painter->setPen(Qt::NoPen); if (m_LunarVisible) painter->drawEllipse(QRectF(this->rect().x() + 6, this->rect().y() + 4, hh - 8, hh - 8)); else painter->drawEllipse(QRectF((this->rect().width() - hh + 8) / 2 + this->rect().x(), this->rect().y() + 4, hh - 8, hh - 8)); painter->restore(); } else { painter->setPen(m_dayNumColor); } fillRect.setY(fillRect.y() - 10); fillRect.setX(fillRect.x() - 1); painter->drawText(fillRect, Qt::AlignCenter, QString::number(m_Date.day())); painter->restore(); //绘制农历 if (m_LunarVisible) { QFontMetrics metrics(m_LunerFont); int Lunarwidth = metrics.horizontalAdvance(m_DayLunar); qreal filleRectX = this->rect().width() - 12 - 3 - (58 + Lunarwidth) / 2; QRectF fillRectT(this->rect().x() + filleRectX, this->rect().y() + 9, 12, 12); if (filleRectX > hh) { painter->setRenderHint(QPainter::Antialiasing); switch (m_DayStatus) { case H_WORK: { QPixmap pixmap = DIcon::loadNxPixmap(":/icons/deepin/builtin/icons/dde_calendar_ban_32px.svg"); painter->drawPixmap(fillRectT.toRect(), pixmap); } break; case H_REST: { QPixmap pixmap = DIcon::loadNxPixmap(":/icons/deepin/builtin/icons/dde_calendar_xiu.svg"); painter->drawPixmap(fillRectT.toRect(), pixmap); } break; default: break; } } painter->setFont(m_LunerFont); painter->setPen(m_LunerColor); painter->drawText(QRectF(this->rect().x() + this->rect().width() - 58, this->rect().y() + 6, 58, 18), Qt::AlignCenter, m_DayLunar); } //如果有焦点则绘制焦点效果 if (getItemFocus()) { const int offset = 1; //获取tab图形 QRectF drawRect(rect().x() + offset, rect().y() + offset, rect().width() - offset * 2, rect().height() - offset * 2); QPen framePen; //设置边框宽度 framePen.setWidth(2); //设置边框颜色 framePen.setColor(m_currentColor); painter->setPen(framePen); painter->setBrush(Qt::NoBrush); painter->setOpacity(1); //半径 qreal radius = 16; //直径 qreal diameter = radius * 2; //绘制的路径 QPainterPath path; path.moveTo(drawRect.x(), drawRect.y()); //如果为左下角则绘制圆角 if (this->getBackgroundNum() == 35) { path.lineTo(drawRect.x(), drawRect.y() + drawRect.height() - radius); QRectF arcRect(drawRect.x(), drawRect.y() + drawRect.height() - diameter, diameter, diameter); path.arcTo(arcRect, 180, 90); } else { path.lineTo(drawRect.x(), drawRect.y() + drawRect.height()); } //如果为右下角则绘制圆角 if (this->getBackgroundNum() == 41) { path.lineTo(drawRect.x() + drawRect.width() - radius, drawRect.y() + drawRect.height()); QRectF arcRect(drawRect.x() + drawRect.width() - diameter, drawRect.y() + drawRect.height() - diameter, diameter, diameter); path.arcTo(arcRect, 270, 90); } else { path.lineTo(drawRect.x() + drawRect.width(), drawRect.y() + drawRect.height()); } path.lineTo(drawRect.x() + drawRect.width(), drawRect.y()); path.lineTo(drawRect.x(), drawRect.y()); painter->drawPath(path); } } dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/cmonthdayitem.h000066400000000000000000000030351473346337000264260ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CMONTHDAYITEM_H #define CMONTHDAYITEM_H #include "cscenebackgrounditem.h" #include #include /** * @brief The CMonthDayItem class * 月视图绘制天item */ class CMonthDayItem : public CSceneBackgroundItem { Q_OBJECT public: enum HolidayStatus { H_NONE = 0x00, H_REST = 0x01, H_WORK = 0x02 }; explicit CMonthDayItem(QGraphicsItem *parent = nullptr); ~CMonthDayItem() override; //设置农历信息 void setLunar(const QString &lunar); //设置班休状态 void setStatus(const HolidayStatus &status); //设置是否为当前选择月份 void setCurrentMonth(bool isCurrent) { m_IsCurrentMonth = isCurrent; } //设置主题 void setTheMe(int type = 0); protected: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; private: QString m_DayLunar; HolidayStatus m_DayStatus; QFont m_dayNumFont; QColor m_dayNumColor; QColor m_dayNumCurrentColor; QFont m_LunerFont; QColor m_LunerColor; QColor m_BorderColor; bool m_IsCurrentMonth = false; QColor m_fillColor = Qt::white; QColor m_banColor = "#FBE9B7"; QColor m_xiuColor = "#D4FFB3"; int m_themetype = 0; QColor m_currentColor; const int m_radius = 18; public: static bool m_LunarVisible; }; #endif // CMONTHDAYITEM_H dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/cmonthscheduleitem.cpp000066400000000000000000000116151473346337000300030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cmonthscheduleitem.h" #include CMonthScheduleItem::CMonthScheduleItem(QRect rect, QGraphicsItem *parent, int edittype) : DragInfoItem(rect, parent) , m_pos(13, 5) { Q_UNUSED(edittype); } CMonthScheduleItem::~CMonthScheduleItem() { } QPixmap CMonthScheduleItem::getPixmap() { QPixmap pixmap(this->rect().size().toSize()); pixmap.fill(Qt::transparent); QPainter painter(&pixmap); paintBackground(&painter, pixmap.rect(), true); return pixmap; } void CMonthScheduleItem::paintBackground(QPainter *painter, const QRectF &rect, const bool isPixMap) { qreal labelwidth = rect.width(); qreal labelheight = rect.height(); m_font = DFontSizeManager::instance()->get(m_sizeType, m_font); int themetype = CScheduleDataManage::getScheduleDataManage()->getTheme(); //根据类型获取颜色 CSchedulesColor gdColor = CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType(m_vScheduleInfo->scheduleTypeID()); QColor brushColor = gdColor.normalColor; QColor textcolor = CScheduleDataManage::getScheduleDataManage()->getTextColor(); //判断是否为选中日程 if (!m_vScheduleInfo.isNull() && m_vScheduleInfo == m_pressInfo) { //判断当前日程是否为拖拽移动日程 if (m_vScheduleInfo->isMoved() == m_pressInfo->isMoved()) { m_vHighflag = true; } else { painter->setOpacity(0.4); textcolor.setAlphaF(0.4); } m_vSelectflag = m_press; } if (isPixMap) { painter->setOpacity(0.6); textcolor.setAlphaF(0.8); } if (m_vSelectflag) { brushColor = gdColor.pressColor; textcolor.setAlphaF(0.4); } else if (m_vHoverflag) { brushColor = gdColor.hoverColor; } else if (m_vHighflag) { brushColor = gdColor.pressColor; } QRectF fillRect = QRectF(rect.x() + 2, rect.y() + 2, labelwidth - 2, labelheight - 2); painter->save(); //将直线开始点设为0,终点设为1,然后分段设置颜色 painter->setBrush(brushColor); if (getItemFocus() && isPixMap == false) { QPen framePen; framePen.setWidth(2); framePen.setColor(getSystemActiveColor()); painter->setPen(framePen); } else { painter->setPen(Qt::NoPen); } painter->drawRoundedRect(fillRect, rect.height() / 3, rect.height() / 3); painter->restore(); painter->setFont(m_font); painter->setPen(textcolor); QFontMetrics fm = painter->fontMetrics(); QString tSTitleName = m_vScheduleInfo->summary(); tSTitleName.replace("\n", ""); QString str = tSTitleName; //右侧偏移8 qreal textWidth = labelwidth - m_pos.x() - m_offset * 2 - 8; QString tStr; int _rightOffset = fm.horizontalAdvance("..."); //显示宽度 左侧偏移13右侧偏移8 qreal _showWidth = textWidth; //如果标题总长度大于显示长度则显示长度须减去"..."的长度 if (fm.horizontalAdvance(str) > _showWidth) { _showWidth -= _rightOffset; for (int i = 0; i < str.count(); i++) { tStr.append(str.at(i)); int widthT = fm.horizontalAdvance(tStr); //如果宽度大于显示长度则去除最后添加的字符 if (widthT > _showWidth) { tStr.chop(1); break; } } if (tStr != str) { tStr = tStr + "..."; } } else { tStr = str; } painter->drawText(QRectF(rect.x() + m_pos.x(), rect.y() + 1, textWidth, labelheight - m_pos.y() + 3), Qt::AlignLeft | Qt::AlignVCenter, tStr); if (m_vHoverflag && !m_vSelectflag) { QRectF tRect = QRectF(rect.x() + 2.5, rect.y() + 2.5, labelwidth - 3, labelheight - 3); painter->save(); painter->setRenderHints(QPainter::Antialiasing); QPen pen; QColor selcolor; if (themetype == 2) { selcolor = "#FFFFFF"; } else { selcolor = "#000000"; } selcolor.setAlphaF(0.08); pen.setColor(selcolor); pen.setWidthF(1); pen.setStyle(Qt::SolidLine); painter->setBrush(Qt::NoBrush); painter->setPen(pen); painter->drawRoundedRect(tRect, rect.height() / 3, rect.height() / 3); painter->restore(); } if (m_vSelectflag) { QColor selcolor = "#000000"; selcolor.setAlphaF(0.05); painter->setBrush(selcolor); painter->setPen(Qt::NoPen); painter->drawRoundedRect(fillRect, rect.height() / 3, rect.height() / 3); } } dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/cmonthscheduleitem.h000077500000000000000000000012621473346337000274500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CMONTHSCHEDULEITEM_H #define CMONTHSCHEDULEITEM_H #include "draginfoitem.h" /** * @brief The CMonthScheduleItem class * 月视图日程标签 */ class CMonthScheduleItem : public DragInfoItem { Q_OBJECT public: explicit CMonthScheduleItem(QRect rect, QGraphicsItem *parent = nullptr, int edittype = 0); ~CMonthScheduleItem() override; QPixmap getPixmap(); private: void paintBackground(QPainter *painter, const QRectF &rect, const bool isPixMap = false) override; private: QPoint m_pos; }; #endif // CMONTHSCHEDULEITEM_H dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/cmonthschedulenumitem.cpp000066400000000000000000000051231473346337000305200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cmonthschedulenumitem.h" #include CMonthScheduleNumItem::CMonthScheduleNumItem(QGraphicsItem *parent) : CFocusItem(parent) , m_num(0) { setItemType(COTHER); } CMonthScheduleNumItem::~CMonthScheduleNumItem() { } /** * @brief CMonthScheduleNumItem::setColor 设置背景色 * @param color1 * @param color2 */ void CMonthScheduleNumItem::setColor(QColor color1, QColor color2) { m_color1 = color1; m_color2 = color2; } /** * @brief CMonthScheduleNumItem::setText 这是字体颜色 * @param tColor * @param font */ void CMonthScheduleNumItem::setText(QColor tColor, QFont font) { m_textcolor = tColor; m_font = font; } /** * @brief CMonthScheduleNumItem::setSizeType 设置字体大小 * @param sizeType */ void CMonthScheduleNumItem::setSizeType(DFontSizeManager::SizeType sizeType) { m_SizeType = sizeType; } void CMonthScheduleNumItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); qreal labelwidth = this->rect().width(); qreal labelheight = this->rect().height() - 6; qreal rectX = this->rect().x(); qreal rectY = this->rect().y(); //绘制背景 m_font = DFontSizeManager::instance()->get(m_SizeType, m_font); //将直线开始点设为0,终点设为1,然后分段设置颜色 QLinearGradient linearGradient(0, 0, labelwidth, 0); linearGradient.setColorAt(0, m_color1); linearGradient.setColorAt(1, m_color2); painter->setRenderHints(QPainter::Antialiasing); painter->setBrush(linearGradient); if (getItemFocus()) { QPen framePen; framePen.setWidth(2); framePen.setColor(getSystemActiveColor()); painter->setPen(framePen); } else { painter->setPen(Qt::NoPen); } painter->drawRoundedRect(rect(), rect().height() / 3, rect().height() / 3); //绘制文字 painter->setFont(m_font); painter->setPen(m_textcolor); QString str = QString(tr("%1 more")).arg(m_num) + "..."; QFontMetrics fm = painter->fontMetrics(); QString tStr; for (int i = 0; i < str.count(); i++) { tStr.append(str.at(i)); int widthT = fm.horizontalAdvance(tStr) + 5; if (widthT >= labelwidth) { tStr.chop(2); break; } } if (tStr != str) { tStr = tStr + "..."; } painter->drawText(QRectF(rectX, rectY, labelwidth, labelheight + 4), Qt::AlignCenter, tStr); } dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/cmonthschedulenumitem.h000066400000000000000000000023151473346337000301650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CMONTHSCHEDULENUMITEM_H #define CMONTHSCHEDULENUMITEM_H #include "cfocusitem.h" #include "dschedule.h" #include "scheduledaterangeinfo.h" #include DWIDGET_USE_NAMESPACE /** * @brief The CMonthScheduleNumItem class * 月视图 还有N项 标签 */ class CMonthScheduleNumItem : public CFocusItem { Q_OBJECT public: explicit CMonthScheduleNumItem(QGraphicsItem *parent = nullptr); ~CMonthScheduleNumItem() override; //背景色 void setColor(QColor color1, QColor color2); //设置字体颜色 void setText(QColor tColor, QFont font); //设置字体大小 void setSizeType(DFontSizeManager::SizeType sizeType); //设置显示多少项 void setData(int num) { m_num = num; } protected: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; private: QColor m_color1; QColor m_color2; QColor m_textcolor; QFont m_font; int m_num; DFontSizeManager::SizeType m_SizeType = DFontSizeManager::T8; }; #endif // CMONTHSCHEDULENUMITEM_H dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/cscenebackgrounditem.cpp000066400000000000000000000133571473346337000303030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cscenebackgrounditem.h" #include #include #include #include CSceneBackgroundItem::CSceneBackgroundItem(ItemOnView view, QGraphicsItem *parent) : CFocusItem(parent) , m_backgroundNum(0) , m_leftItem(nullptr) , m_rightItem(nullptr) , m_upItem(nullptr) , m_downItem(nullptr) , m_showItemIndex(-1) , m_itemOfView(view) { //设置item类型为背景显示 setItemType(CBACK); } /** * @brief CSceneBackgroundItem::setNextItemFocusAndGetNextItem 设置下一个item focus状态并获取下一个Item * @return */ CFocusItem *CSceneBackgroundItem::setNextItemFocusAndGetNextItem() { CFocusItem *NextFocus = this; //若该区域没有item if (m_showItemIndex < 0 && m_item.size() == 0) { NextFocus = CFocusItem::setNextItemFocusAndGetNextItem(); } else if (m_showItemIndex == m_item.size() - 1) { //若切换到最后一个item m_item.at(m_showItemIndex)->setItemFocus(false); m_showItemIndex = -1; NextFocus = CFocusItem::setNextItemFocusAndGetNextItem(); } else { //若该背景上有显示的item //若显示的item未设置focus则取消背景focus效果 if (m_showItemIndex == -1 && getItemFocus()) { this->setItemFocus(false); } //若显示的item有设置focus则取消该item focus效果 if (m_showItemIndex >= 0) { m_item.at(m_showItemIndex)->setItemFocus(false); } //当前显示的item编号+1并这是focus效果 ++m_showItemIndex; m_item.at(m_showItemIndex)->setItemFocus(true); } return NextFocus; } /** * @brief compareItemData 对现实的日程标签进行排序 * @param itemfirst * @param itemsecond * @return */ bool compareItemData(const CFocusItem *itemfirst, const CFocusItem *itemsecond) { if (itemfirst->rect() == itemsecond->rect()) { return false; } //根据从上倒下从左至右的规则对矩阵的x,y坐标进行对比排序 if (qAbs(itemfirst->rect().y() - itemsecond->rect().y()) < 0.01) { if (itemfirst->rect().x() < itemsecond->rect().x()) { return true; } else { return false; } } else if (itemfirst->rect().y() < itemsecond->rect().y()) { return true; } else { return false; } } /** * @brief CSceneBackgroundItem::updateShowItem 更新在此背景上显示的item */ void CSceneBackgroundItem::updateShowItem() { m_item.clear(); //缩小背景矩阵,防止获取到其他背景上的item QRectF offsetRect = this->rect().marginsRemoved(QMarginsF(1, 1, 1, 1)); QList mlistitem = this->scene()->items(offsetRect); for (int i = 0; i < mlistitem.count(); ++i) { CFocusItem *item = dynamic_cast(mlistitem.at(i)); if (item != nullptr && item->getItemType() != CBACK) { m_item.append(item); } } std::sort(m_item.begin(), m_item.end(), compareItemData); updateCurrentItemShow(); } int CSceneBackgroundItem::getShowItemCount() { return m_item.size(); } /** * @brief CSceneBackgroundItem::setBackgroundNum 设置背景编号 * @param num */ void CSceneBackgroundItem::setBackgroundNum(int num) { m_backgroundNum = num; } /** * @brief CSceneBackgroundItem::getBackgroundNum 获取背景编号 * @return */ int CSceneBackgroundItem::getBackgroundNum() const { return m_backgroundNum; } /** * @brief CSceneBackgroundItem::setItemFocus 设置item是否获取focus * @param isFocus */ void CSceneBackgroundItem::setItemFocus(bool isFocus) { if (m_showItemIndex < 0) { CFocusItem::setItemFocus(isFocus); } else { if (m_showItemIndex < m_item.size()) { m_item.at(m_showItemIndex)->setItemFocus(isFocus); } } } /** * @brief CSceneBackgroundItem::initState 恢复初始状态 */ void CSceneBackgroundItem::initState() { if (getItemFocus()) { setItemFocus(false); } if (m_showItemIndex > -1 && m_showItemIndex < m_item.size()) { m_item.at(m_showItemIndex)->setItemFocus(false); } m_showItemIndex = -1; } /** * @brief CSceneBackgroundItem::getFocusItem 获取当前焦点的item * @return */ CFocusItem *CSceneBackgroundItem::getFocusItem() { if (m_showItemIndex < 0) { return this; } else { return m_item.at(m_showItemIndex); } } CSceneBackgroundItem *CSceneBackgroundItem::getLeftItem() const { return m_leftItem; } void CSceneBackgroundItem::setLeftItem(CSceneBackgroundItem *leftItem) { m_leftItem = leftItem; } CSceneBackgroundItem *CSceneBackgroundItem::getRightItem() const { return m_rightItem; } void CSceneBackgroundItem::setRightItem(CSceneBackgroundItem *rightItem) { m_rightItem = rightItem; } CSceneBackgroundItem *CSceneBackgroundItem::getUpItem() const { return m_upItem; } void CSceneBackgroundItem::setUpItem(CSceneBackgroundItem *upItem) { m_upItem = upItem; } CSceneBackgroundItem *CSceneBackgroundItem::getDownItem() const { return m_downItem; } void CSceneBackgroundItem::setDownItem(CSceneBackgroundItem *downItem) { m_downItem = downItem; } void CSceneBackgroundItem::updateCurrentItemShow() { if (m_showItemIndex >= 0) { if (m_item.size() > 0) { m_showItemIndex = m_showItemIndex < m_item.size() ? m_showItemIndex : 0; m_item.at(m_showItemIndex)->setItemFocus(true); } else { m_showItemIndex = -1; setItemFocus(true); } } } CSceneBackgroundItem::ItemOnView CSceneBackgroundItem::getItemOfView() const { return m_itemOfView; } dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/cscenebackgrounditem.h000066400000000000000000000037101473346337000277400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSCENEBACKGROUNDITEM_H #define CSCENEBACKGROUNDITEM_H #include "cfocusitem.h" #include class CSceneBackgroundItem : public CFocusItem { Q_OBJECT public: //属于哪个视图的背景 enum ItemOnView { OnMonthView, OnWeekView, OnDayView }; public: explicit CSceneBackgroundItem(ItemOnView view, QGraphicsItem *parent = nullptr); //设置下一个item focus状态并获取下一个Item CFocusItem *setNextItemFocusAndGetNextItem() override; //更新在此背景上显示的item void updateShowItem(); //获取在此背景上显示item的数目 int getShowItemCount(); //设置背景编号 void setBackgroundNum(int num); //获取背景编号 int getBackgroundNum() const; //设置item是否获取focus void setItemFocus(bool isFocus) override; //恢复初始状态 void initState(); //获取当前焦点的item CFocusItem *getFocusItem(); CSceneBackgroundItem *getLeftItem() const; void setLeftItem(CSceneBackgroundItem *leftItem); CSceneBackgroundItem *getRightItem() const; void setRightItem(CSceneBackgroundItem *rightItem); CSceneBackgroundItem *getUpItem() const; void setUpItem(CSceneBackgroundItem *upItem); CSceneBackgroundItem *getDownItem() const; void setDownItem(CSceneBackgroundItem *downItem); //获取该背景属于哪个视图 ItemOnView getItemOfView() const; protected: virtual void updateCurrentItemShow(); signals: void setChangeFocus(); private: int m_backgroundNum; CSceneBackgroundItem *m_leftItem; CSceneBackgroundItem *m_rightItem; CSceneBackgroundItem *m_upItem; CSceneBackgroundItem *m_downItem; protected: QVector m_item {}; int m_showItemIndex; ItemOnView m_itemOfView; }; #endif // CSCENEBACKGROUNDITEM_H dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/cweekdaybackgrounditem.cpp000066400000000000000000000066201473346337000306320ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cweekdaybackgrounditem.h" #include #include #include CWeekDayBackgroundItem::CWeekDayBackgroundItem(QGraphicsItem *parent) : CSceneBackgroundItem(CSceneBackgroundItem::OnWeekView, parent) , m_drawDividingLine(false) , m_showFocus(false) { } void CWeekDayBackgroundItem::setTheMe(int type) { if (type == 0 || type == 1) { m_weekColor = "#00429A"; m_weekColor.setAlphaF(0.05); } else { m_weekColor = "#4F9BFF"; m_weekColor.setAlphaF(0.1); } } void CWeekDayBackgroundItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option) Q_UNUSED(widget) painter->setRenderHint(QPainter::Antialiasing); if (m_drawDividingLine) { //绘制分割线 if (this->getBackgroundNum() != 6) { // 分割线颜色 QColor m_linecolor = "#000000"; m_linecolor.setAlphaF(0.05); painter->setPen(Qt::SolidLine); painter->setPen(m_linecolor); painter->drawLine(this->rect().topRight(), this->rect().bottomRight()); } //绘制周六周日背景 if (m_Date.dayOfWeek() > 5) { painter->setBrush(m_weekColor); painter->setPen(Qt::NoPen); painter->drawRect(this->rect()); } } if (m_showFocus && getItemFocus()) { QPen framePen; //设置边框宽度 framePen.setWidth(2); //设置边框颜色 framePen.setColor(getSystemActiveColor()); painter->setPen(framePen); painter->setBrush(Qt::NoBrush); QRectF drawrect = this->rect().marginsRemoved(QMarginsF(1, 1, 1, 1)); painter->drawRect(drawrect); } } void CWeekDayBackgroundItem::updateCurrentItemShow() { if (m_showItemIndex >= 0) { if (m_item.size() > 0) { m_showItemIndex = m_showItemIndex < m_item.size() ? m_showItemIndex : 0; m_item.at(m_showItemIndex)->setItemFocus(true); //定位到当前焦点item emit signalPosOnView(m_item.at(m_showItemIndex)->rect().y()); } else { m_showItemIndex = -1; setItemFocus(true); } } } bool CWeekDayBackgroundItem::showFocus() const { return m_showFocus; } void CWeekDayBackgroundItem::setShowFocus(bool showFocus) { m_showFocus = showFocus; } void CWeekDayBackgroundItem::setItemFocus(bool isFocus) { //如果改背景不接受焦点切第一次设置进入该背景则设置该背景上第一个item接收focus if (m_showFocus == false && m_showItemIndex < 0) { if (hasNextSubItem()) { ++m_showItemIndex; m_item.at(m_showItemIndex)->setItemFocus(isFocus); } } else { CSceneBackgroundItem::setItemFocus(isFocus); } } bool CWeekDayBackgroundItem::hasNextSubItem() { bool result = true; if (m_showItemIndex < 0 && getShowItemCount() == 0) { return false; } if (m_showItemIndex == getShowItemCount() - 1) { return false; } return result; } bool CWeekDayBackgroundItem::drawDividingLine() const { return m_drawDividingLine; } void CWeekDayBackgroundItem::setDrawDividingLine(bool drawDividingLine) { m_drawDividingLine = drawDividingLine; } dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/cweekdaybackgrounditem.h000066400000000000000000000026551473346337000303030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CWEEKDAYBACKGROUNDITEM_H #define CWEEKDAYBACKGROUNDITEM_H #include "cscenebackgrounditem.h" #include /** * @brief The CWeekDayBackgroundItem class * 周和天的全天/非全天背景绘制 */ class CWeekDayBackgroundItem : public CSceneBackgroundItem { Q_OBJECT public: explicit CWeekDayBackgroundItem(QGraphicsItem *parent = nullptr); //设置主题 void setTheMe(int type = 0); //是否绘制分割线 bool drawDividingLine() const; //设置是否绘制分割线 void setDrawDividingLine(bool drawDividingLine); //获取改背景是否焦点显示 bool showFocus() const; //设置该背景是否焦点显示 void setShowFocus(bool showFocus); //设置item是否获取focus void setItemFocus(bool isFocus) override; //在该背景上是否还有下一个需要焦点切换的item bool hasNextSubItem(); protected: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; void updateCurrentItemShow() override; signals: void signalPosOnView(const qreal y); public slots: private: bool m_drawDividingLine; //是否绘制分割线 bool m_showFocus; //背景是否显示焦点效果 QColor m_weekColor; //周六周日背景色 }; #endif // CWEEKDAYBACKGROUNDITEM_H dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/draginfoitem.cpp000066400000000000000000000074211473346337000265670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "draginfoitem.h" #include #include #include bool DragInfoItem::m_press = false; DSchedule::Ptr DragInfoItem::m_HoverInfo; DSchedule::Ptr DragInfoItem::m_pressInfo; DSchedule::List DragInfoItem::m_searchScheduleInfo; DragInfoItem::DragInfoItem(QRectF rect, QGraphicsItem *parent) : CFocusItem(parent) , m_rect(rect) { setRect(m_rect); setAcceptHoverEvents(true); const int duration = 200; m_properAnimationFirst = new QPropertyAnimation(this, "offset", this); m_properAnimationFirst->setObjectName("First"); m_properAnimationSecond = new QPropertyAnimation(this, "offset", this); m_properAnimationSecond->setObjectName("Second"); m_properAnimationFirst->setDuration(duration); m_properAnimationSecond->setDuration(duration); m_properAnimationFirst->setEasingCurve(QEasingCurve::InOutQuad); m_properAnimationSecond->setEasingCurve(QEasingCurve::InOutQuad); m_Group = new QSequentialAnimationGroup(this); m_Group->addAnimation(m_properAnimationFirst); m_Group->addAnimation(m_properAnimationSecond); connect(m_Group , &QPropertyAnimation::finished , this , &DragInfoItem::animationFinished); setItemType(CITEM); } DragInfoItem::~DragInfoItem() { } void DragInfoItem::setData(const DSchedule::Ptr &vScheduleInfo) { m_vScheduleInfo = vScheduleInfo; } DSchedule::Ptr DragInfoItem::getData() const { return m_vScheduleInfo; } void DragInfoItem::setPressFlag(const bool flag) { m_press = flag; } /** * @brief DragInfoItem::setPressSchedule 记录选中日程 * @param pressSchedule */ void DragInfoItem::setPressSchedule(const DSchedule::Ptr &pressSchedule) { m_pressInfo = pressSchedule; } /** * @brief DragInfoItem::getPressSchedule 获取选中日程 * @return */ DSchedule::Ptr DragInfoItem::getPressSchedule() { return m_pressInfo; } /** * @brief DragInfoItem::setSearchScheduleInfo 设置搜索日程新 * @param searchScheduleInfo */ void DragInfoItem::setSearchScheduleInfo(const DSchedule::List &searchScheduleInfo) { m_searchScheduleInfo = searchScheduleInfo; } void DragInfoItem::setFont(DFontSizeManager::SizeType type) { m_sizeType = type; } void DragInfoItem::setOffset(const int &offset) { m_offset = offset; setRect(QRectF(m_rect.x() - offset, m_rect.y() - offset / 2, m_rect.width() + offset * 2, m_rect.height() + offset)); setZValue(offset); } void DragInfoItem::setStartValue(const int value) { m_properAnimationFirst->setStartValue(value); m_properAnimationSecond->setEndValue(value); } void DragInfoItem::setEndValue(const int value) { m_properAnimationFirst->setEndValue(value); m_properAnimationSecond->setStartValue(value); } void DragInfoItem::startAnimation() { if (m_Group->state() != QAnimationGroup::Running) { m_Group->start(); } } void DragInfoItem::animationFinished() { m_isAnimation = false; } void DragInfoItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { Q_UNUSED(event); m_HoverInfo = m_vScheduleInfo; update(); } void DragInfoItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { Q_UNUSED(event); m_HoverInfo = DSchedule::Ptr(); update(); } void DragInfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); m_vHoverflag = m_HoverInfo == m_vScheduleInfo; m_vHighflag = false; m_vSelectflag = false; m_vHighflag = m_searchScheduleInfo.contains(m_vScheduleInfo); paintBackground(painter, this->rect()); } dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/draginfoitem.h000066400000000000000000000052421473346337000262330ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DRAGINFOITEM_H #define DRAGINFOITEM_H #include "scheduledatamanage.h" #include "dschedule.h" #include "cfocusitem.h" #include DWIDGET_USE_NAMESPACE class QPropertyAnimation; class QSequentialAnimationGroup; /** * @brief The DragInfoItem class * 显示项 支持拖拽 */ class DragInfoItem : public CFocusItem { Q_OBJECT Q_PROPERTY(int offset READ readOffset WRITE setOffset) public: explicit DragInfoItem(QRectF rect, QGraphicsItem *parent = nullptr); ~DragInfoItem() override; void setData(const DSchedule::Ptr &vScheduleInfo); DSchedule::Ptr getData() const; void setFont(DFontSizeManager::SizeType type); void setOffset(const int &offset); int readOffset() const { return m_offset; } void setStartValue(const int value); void setEndValue(const int value); void startAnimation(); bool isRunning()const { return m_isAnimation; } public: static void setPressFlag(const bool flag); //设置选中日程 static void setPressSchedule(const DSchedule::Ptr &pressSchedule); //获取选中日程 static DSchedule::Ptr getPressSchedule(); //设置搜索日程 static void setSearchScheduleInfo(const DSchedule::List &searchScheduleInfo); public slots: void animationFinished(); protected: void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; protected: virtual void paintBackground(QPainter *painter, const QRectF &rect, const bool isPixMap = false) = 0; protected: DSchedule::Ptr m_vScheduleInfo; QFont m_font; bool m_vSelectflag = false; bool m_vHoverflag = false; bool m_vHighflag = false; QRectF m_rect; bool m_isAnimation = false; int m_offset = 0; DFontSizeManager::SizeType m_sizeType = DFontSizeManager::T8; QPropertyAnimation *m_properAnimationFirst = nullptr; QPropertyAnimation *m_properAnimationSecond = nullptr; QSequentialAnimationGroup *m_Group = nullptr; static bool m_press; static DSchedule::Ptr m_HoverInfo; static DSchedule::Ptr m_pressInfo; static DSchedule::List m_searchScheduleInfo; }; #endif // DRAGINFOITEM_H dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/scheduleitem.cpp000066400000000000000000000245231473346337000265740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduleitem.h" #include "schedulecoormanage.h" #include "scheduledatamanage.h" #include "calendarmanage.h" #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE CScheduleItem::CScheduleItem(QRectF rect, QGraphicsItem *parent, int type) : DragInfoItem(rect, parent) , m_type(type) , m_totalNum(0) , m_transparentcolor("#000000") , m_timeFormat(CalendarManager::getInstance()->getTimeFormat()) { m_transparentcolor.setAlphaF(0.05); connect(CalendarManager::getInstance(), &CalendarManager::signalTimeFormatChanged, this, &CScheduleItem::timeFormatChanged); } CScheduleItem::~CScheduleItem() { } /** * @brief CScheduleItem::setData 设置显示数据 * @param info * @param date * @param totalNum */ void CScheduleItem::setData(const DSchedule::Ptr &info, QDate date, int totalNum) { m_vScheduleInfo = info; m_totalNum = totalNum; setDate(date); update(); } /** * @brief CScheduleItem::hasSelectSchedule 是否含有选中日程 * @param info * @return */ bool CScheduleItem::hasSelectSchedule(const DSchedule::Ptr &info) { return info == m_vScheduleInfo; } /** * @brief CScheduleItem::splitText 根据字体大小,宽度和高度将标题切换为多行 * @param font * @param w * @param h * @param str * @param listStr * @param fontM */ void CScheduleItem::splitText(QFont font, int w, int h, QString str, QStringList &listStr, QFontMetrics &fontM) { if (str.isEmpty()) return; QFontMetrics fontMetrics(font); int heightT = fontM.height(); QString tStr; QStringList tListStr; for (int i = 0; i < str.count(); i++) { tStr.append(str.at(i)); int widthT = fontMetrics.horizontalAdvance(tStr) + 5; if (widthT >= w) { tStr.chop(1); if (tStr.isEmpty()) break; tListStr.append(tStr); tStr.clear(); i--; } } tListStr.append(tStr); if (w < 30) { QFontMetrics fm_s(fontM); QFontMetrics f_st(font); QString s = tListStr.at(0) + "..."; if (h < 23) { tListStr.append(""); } else { if (tListStr.isEmpty()) { listStr.append(""); } else { QString c = str.at(0); QString str = c + "..."; QFontMetrics fm(font); while (f_st.horizontalAdvance(str) > w && f_st.horizontalAdvance(str) > 24) { str.chop(1); } listStr.append(str); } } } else { for (int i = 0; i < tListStr.count(); i++) { if ((i + 1) * heightT <= h - 1) { listStr.append(tListStr.at(i)); } else { if (i == 0) { break; } else { QString s; QFontMetrics fm_str(fontM); if (i == tListStr.count()) s = fontM.elidedText(tListStr.at(i - 1), Qt::ElideRight, w); else { s = fontM.elidedText(tListStr.at(i - 1) + "...", Qt::ElideRight, w); } listStr.removeAt(i - 1); listStr.append(s); break; } } } } } /** * @brief CScheduleItem::timeFormatChanged 更新时间显示格式 */ void CScheduleItem::timeFormatChanged(int value) { if (value) { m_timeFormat = "hh:mm"; } else { m_timeFormat = "h:mm"; } update(); } /** * @brief CScheduleItem::paintBackground 绘制item显示效果 * @param painter * @param rect * @param isPixMap */ void CScheduleItem::paintBackground(QPainter *painter, const QRectF &rect, const bool isPixMap) { Q_UNUSED(isPixMap); //根据日程类型获取颜色 CSchedulesColor gdColor = CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType(m_vScheduleInfo->scheduleTypeID()); QColor textPenColor = CScheduleDataManage::getScheduleDataManage()->getTextColor(); //判断是否为选中日程 if (m_vScheduleInfo == m_pressInfo) { //判断当前日程是否为拖拽移动日程 if (m_vScheduleInfo->isMoved() == m_pressInfo->isMoved()) { m_vHighflag = true; } else { painter->setOpacity(0.4); textPenColor.setAlphaF(0.4); gdColor.orginalColor.setAlphaF(0.4); m_vHighflag = false; } m_vSelectflag = m_press; } int themetype = CScheduleDataManage::getScheduleDataManage()->getTheme(); QColor bColor = gdColor.normalColor; QFontMetrics fm = painter->fontMetrics(); int h = fm.height(); if (m_vHoverflag) { bColor = gdColor.hoverColor; } else if (m_vHighflag) { bColor = gdColor.hightColor; } else if (m_vSelectflag) { bColor = gdColor.pressColor; } painter->setBrush(bColor); painter->setPen(Qt::NoPen); painter->drawRect(rect); if (m_vHoverflag && !m_vSelectflag) { painter->save(); QRectF tRect = QRectF(rect.x() + 0.5, rect.y() + 0.5, rect.width() - 1, rect.height() - 1); QPen tPen; QColor cc = "#FFFFFF"; if (themetype == 2) { cc = "#FFFFFF"; } else { cc = "#000000"; } cc.setAlphaF(0.08); tPen.setColor(cc); tPen.setWidthF(1); tPen.setStyle(Qt::SolidLine); painter->setBrush(Qt::NoBrush); painter->setPen(tPen); painter->drawRect(tRect); painter->restore(); } if (m_vSelectflag) { if (themetype == 0 || themetype == 1) { textPenColor.setAlphaF(0.4); gdColor.orginalColor.setAlphaF(0.4); } else if (themetype == 2) { textPenColor.setAlphaF(0.6); gdColor.orginalColor.setAlphaF(0.6); } } painter->save(); QPen pen(gdColor.orginalColor); pen.setWidth(2); painter->setPen(pen); //左侧绘制竖线 QPointF top(rect.topLeft().x(), rect.topLeft().y() + 1); QPointF bottom(rect.bottomLeft().x(), rect.bottomLeft().y() - 1); painter->drawLine(top, bottom); painter->restore(); int tMargin = 10; if (m_totalNum > 1) tMargin = 5; if (m_type == 0) { int timeTextHight = 0; QFont font; font.setWeight(QFont::Normal); font = DFontSizeManager::instance()->get(DFontSizeManager::T8, font); //绘制日程起始时间 if (m_vScheduleInfo->dtStart().date() == getDate()) { painter->save(); painter->setFont(font); painter->setPen(gdColor.orginalColor); QTime stime = m_vScheduleInfo->dtStart().time(); QString str = stime.toString((CalendarManager::getInstance()->getTimeShowType() ? "AP " : "") + m_timeFormat); QFontMetrics fontMetrics(font); qreal drawTextWidth = rect.width() - m_offset * 2; if (fm.horizontalAdvance(str) > drawTextWidth - 5) { QString tStr; for (int i = 0; i < str.count(); i++) { tStr.append(str.at(i)); int widthT = fm.horizontalAdvance(tStr) - 5; if (widthT >= drawTextWidth) { if (i < 1) { tStr.chop(1); } else { tStr.chop(2); } tStr = tStr + "..."; break; } } QString tStrs = fontMetrics.elidedText(str, Qt::ElideRight, qRound(drawTextWidth - 5)); painter->drawText( QRectF(rect.topLeft().x() + tMargin, rect.topLeft().y() + 3, drawTextWidth - 5, h), Qt::AlignLeft, tStrs); } else { painter->drawText( QRectF(rect.topLeft().x() + tMargin, rect.topLeft().y() + 3, drawTextWidth - 5, h), Qt::AlignLeft, str); } painter->restore(); } else { timeTextHight = -20; } painter->save(); //绘制日程标题 font = DFontSizeManager::instance()->get(DFontSizeManager::T6, font); font.setLetterSpacing(QFont::PercentageSpacing, 105); painter->setFont(font); painter->setPen(textPenColor); QStringList liststr; QRect textRect = rect.toRect(); textRect.setWidth(textRect.width() - m_offset * 2); splitText(font, textRect.width() - tMargin - 8, textRect.height() - 20, m_vScheduleInfo->summary(), liststr, fm); for (int i = 0; i < liststr.count(); i++) { if ((20 + timeTextHight + (i + 1) * (h - 3)) > rect.height()) return; painter->drawText( QRect(textRect.topLeft().x() + tMargin, textRect.topLeft().y() + 20 + timeTextHight + i * (h - 3), textRect.width() - 2, h), Qt::AlignLeft, liststr.at(i)); } painter->restore(); } else { painter->save(); QFont font; font.setWeight(QFont::Normal); font = DFontSizeManager::instance()->get(DFontSizeManager::T8, font); painter->setFont(font); painter->setPen(textPenColor); painter->drawText(rect, Qt::AlignCenter | Qt::AlignVCenter, "..."); painter->restore(); } if (m_vSelectflag) { QColor selcolor = m_transparentcolor; selcolor.setAlphaF(0.05); painter->setBrush(selcolor); painter->setPen(Qt::NoPen); painter->drawRect(rect); } if (getItemFocus()) { //获取tab图形 QRectF drawRect = rect.marginsRemoved(QMarginsF(1, 1, 1, 1)); painter->setBrush(Qt::NoBrush); QPen framePen; framePen.setWidth(2); framePen.setColor(getSystemActiveColor()); painter->setPen(framePen); painter->drawRect(drawRect); } } dde-calendar-5.14.13/calendar-client/src/view/graphicsItem/scheduleitem.h000066400000000000000000000025051473346337000262350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEITEM_H #define SCHEDULEITEM_H #include "dschedule.h" #include "draginfoitem.h" #include #include #include #include class CScheduleCoorManage; class CScheduleItem : public DragInfoItem { Q_OBJECT public: CScheduleItem(QRectF rect, QGraphicsItem *parent = nullptr, int type = 0); ~CScheduleItem() override; //设置显示数据 void setData(const DSchedule::Ptr &info, QDate date, int totalNum); //是否含有选中日程 bool hasSelectSchedule(const DSchedule::Ptr &info); int getType() { return m_type; } DSchedule::Ptr getData() const { return m_vScheduleInfo; } private: //根据字体大小,宽度和高度将标题切换为多行 void splitText(QFont font, int w, int h, QString str, QStringList &listStr, QFontMetrics &fontM); private slots: void timeFormatChanged(int value); private: //绘制item显示效果 void paintBackground(QPainter *painter, const QRectF &rect, const bool isPixMap = false) override; private: int m_type = 0; int m_totalNum; QColor m_transparentcolor; QString m_timeFormat = "h:mm"; }; #endif // SCHEDULEITEM_H dde-calendar-5.14.13/calendar-client/src/view/graphicsview.cpp000066400000000000000000000542631473346337000242010ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "graphicsview.h" #include "graphicsItem/scheduleitem.h" #include "schedulecoormanage.h" #include "scheduledlg.h" #include "scheduledatamanage.h" #include "schedulectrldlg.h" #include "commondef.h" #include "myscheduleview.h" #include "constants.h" #include #include #include #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CGraphicsView::CGraphicsView(QWidget *parent, ViewPosition Type) : CWeekDayGraphicsview(parent, Type, ViewType::PartTimeView) { setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_timeInterval = height() / 24.0; setSceneRect(0, 0, width(), height()); m_LRPen.setColor(QColor(255, 255, 255)); m_LRPen.setStyle(Qt::SolidLine); m_TBPen.setColor(QColor(255, 255, 255)); m_TBPen.setStyle(Qt::SolidLine); m_LRFlag = true; m_TBFlag = true; m_margins = QMargins(0, 0, 0, 0); setLineWidth(0); //TODO 界面刷新? m_timer = new QTimer(this); connect(m_timer, SIGNAL(timeout()), this, SLOT(scrollBarValueChangedSlot())); m_timer->start(60000); setViewportUpdateMode(QGraphicsView::FullViewportUpdate); connect(this->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(scrollBarValueChangedSlot())); connect(this->verticalScrollBar(), &QScrollBar::sliderPressed, this, &CGraphicsView::slotScrollBar); //如果为周视图 if (m_viewPos == WeekPos) { //设置显示右下角圆角 setShowRadius(false, true); } } CGraphicsView::~CGraphicsView() { m_timer->stop(); m_timer->deleteLater(); clearSchedule(); } void CGraphicsView::setMargins(int left, int top, int right, int bottom) { Q_UNUSED(top) m_margins = QMargins(left, 0, right, bottom); setViewportMargins(m_margins); } void CGraphicsView::setTheMe(int type) { if (type == 0 || type == 1) { m_weekcolor = "#00429A"; m_weekcolor.setAlphaF(0.05); QColor linecolor = "#000000"; //ui图透明度为5% linecolor.setAlphaF(0.05); m_LRPen.setColor(linecolor); m_TBPen.setColor(linecolor); m_LRPen.setStyle(Qt::SolidLine); m_TBPen.setStyle(Qt::SolidLine); } else if (type == 2) { m_weekcolor = "#4F9BFF"; m_weekcolor.setAlphaF(0.1); QColor linecolor = "#000000"; //ui图透明度为5% linecolor.setAlphaF(0.05); m_LRPen.setColor(linecolor); m_TBPen.setColor(linecolor); } CWeekDayGraphicsview::setTheMe(type); } void CGraphicsView::slotCreate(const QDateTime &date) { CScheduleDlg dlg(1, this); dlg.setDate(date); if (dlg.exec() == DDialog::Accepted) { emit signalsUpdateSchedule(); } } bool CGraphicsView::MeetCreationConditions(const QDateTime &date) { return qAbs(date.daysTo(m_PressDate)) < 7; } void CGraphicsView::updateHeight() { scene()->update(); update(); } void CGraphicsView::setCurrentDate(const QDateTime ¤tDate) { m_currentDateTime = currentDate; scrollBarValueChangedSlot(); } void CGraphicsView::setInfo(const DSchedule::List &info) { m_scheduleInfo = info; } void CGraphicsView::upDateInfoShow(const CGraphicsView::DragStatus &status, const DSchedule::Ptr &info) { clearSchedule(); DSchedule::List vListData; vListData = m_scheduleInfo; switch (status) { case NONE: Q_UNUSED(info); break; case ChangeBegin: case ChangeEnd: { int index = vListData.indexOf(info); if (index >= 0) vListData[index] = info; } break; case ChangeWhole: vListData.append(info); break; case IsCreate: vListData.append(info); break; } QMap m_InfoMap; QDate currentDate; qint64 count = m_beginDate.daysTo(m_endDate); qint64 beginoffset = 0, endoffset = 0; DSchedule::List currentInfo; for (int i = 0; i <= count; ++i) { currentDate = m_beginDate.addDays(i); currentInfo.clear(); for (int j = 0; j < vListData.size(); ++j) { DSchedule::Ptr ptr = vListData.at(j); if (ptr.isNull()) { continue; } beginoffset = ptr->dtStart().date().daysTo(currentDate); endoffset = currentDate.daysTo(ptr->dtEnd().date()); if (beginoffset < 0 || endoffset < 0) { continue; } if (ptr->dtEnd().date() == currentDate && ptr->dtStart().daysTo(ptr->dtEnd()) > 0 && ptr->dtEnd().time() == QTime(0, 0, 0)) { continue; } currentInfo.append(ptr); } std::sort(currentInfo.begin(), currentInfo.end()); if (currentInfo.size() > 0) { m_InfoMap[currentDate] = currentInfo; QList info; scheduleClassificationType(currentInfo, info); for (int m = 0; m < info.count(); m++) { int tNum = info.at(m).vData.count(); //如果为周视图则要显示一个位置显示日程的数目 if (m_viewPos == WeekPos) { if (tNum > m_sMaxNum) { tNum = m_sMaxNum; for (int n = 0; n < tNum - 1; n++) { addScheduleItem(info.at(m).vData.at(n), currentDate, n + 1, tNum, 0, m_viewType, m_sMaxNum); } //添加“...”item int index = tNum - 2; if (index < 0) { qCWarning(ClientLogger) << "week view create error,tNum -2 :" << index; index = 1; } DSchedule::Ptr tdetaliinfo(info.at(m).vData.at(index)->clone()); tdetaliinfo->setSummary("1"); //如果为"..."则设置类型为other,在获取颜色时会对其进行判断 tdetaliinfo->setScheduleTypeID("other"); addScheduleItem(tdetaliinfo, currentDate, tNum, tNum, 1, m_viewType, m_sMaxNum); } else { for (int n = 0; n < tNum; n++) { addScheduleItem(info.at(m).vData.at(n), currentDate, n + 1, tNum, 0, m_viewType, m_sMaxNum); } } } else { for (int n = 0; n < tNum; n++) { addScheduleItem(info.at(m).vData.at(n), currentDate, n + 1, tNum, 0, m_viewType, m_sMaxNum); } } } } } //更新每个背景上的日程标签 updateBackgroundShowItem(); } QDateTime CGraphicsView::getPosDate(const QPoint &p) { return TimeRounding(m_coorManage->getDate(mapToScene(p))); } void CGraphicsView::ShowSchedule(DragInfoItem *infoitem) { CScheduleItem *scheduleitem = dynamic_cast(infoitem); if (scheduleitem->getType() == 1) return; DragInfoGraphicsView::ShowSchedule(infoitem); } void CGraphicsView::MoveInfoProcess(DSchedule::Ptr &info, const QPointF &pos) { Q_UNUSED(pos); if (!info->allDay()) { qint64 offset = m_PressDate.secsTo(m_MoveDate); info->setDtStart(info->dtStart().addSecs(offset)); info->setDtEnd(info->dtEnd().addSecs(offset)); } else { info->setAllDay(false); //提醒规则 info->setRRuleType(DSchedule::RRule_None); info->setDtStart(m_MoveDate); info->setDtEnd(m_MoveDate.addSecs(3600)); } upDateInfoShow(ChangeWhole, info); } void CGraphicsView::addScheduleItem(const DSchedule::Ptr &info, QDate date, int index, int totalNum, int type, int viewtype, int maxnum) { CScheduleItem *item = new CScheduleItem( m_coorManage->getDrawRegion(date, info->dtStart(), info->dtEnd(), index, totalNum, maxnum, viewtype), nullptr, type); if (type == 1) { item->setItemType(CFocusItem::COTHER); } m_Scene->addItem(item); item->setData(info, date, totalNum); m_vScheduleItem.append(item); } /** * @brief CGraphicsView::setSelectSearchSchedule 设置搜索选中日程 * @param info */ void CGraphicsView::setSelectSearchSchedule(const DSchedule::Ptr &info) { DragInfoGraphicsView::setSelectSearchSchedule(info); setTime(info->dtStart().time()); for (int i = 0; i < m_vScheduleItem.size(); ++i) { if (m_vScheduleItem.at(i)->getType() == 1) continue; //判断是否为选中日程 if (m_vScheduleItem.at(i)->hasSelectSchedule(info)) { m_vScheduleItem.at(i)->setStartValue(0); m_vScheduleItem.at(i)->setEndValue(10); m_vScheduleItem.at(i)->startAnimation(); } } } void CGraphicsView::clearSchedule() { for (int i = 0; i < m_vScheduleItem.size(); i++) { m_Scene->removeItem(m_vScheduleItem.at(i)); delete m_vScheduleItem[i]; m_vScheduleItem[i] = nullptr; } m_vScheduleItem.clear(); m_updateDflag = true; } void CGraphicsView::scheduleClassificationType(DSchedule::List &scheduleInfolist, QList &info) { DSchedule::List schedulelist = scheduleInfolist; if (schedulelist.isEmpty()) return; info.clear(); std::sort(schedulelist.begin(), schedulelist.end()); QVector containIndex; for (int k = 0; k < schedulelist.count(); k++) { QDateTime endTime = schedulelist.at(k)->dtEnd(); QDateTime begTime = schedulelist.at(k)->dtStart(); if (begTime.date().daysTo(endTime.date()) == 0 && begTime.time().secsTo(endTime.time()) < m_minTime) { endTime = begTime.addSecs(m_minTime); } if (endTime.time().hour() == 0 && endTime.time().second() == 0) { endTime = endTime.addSecs(-1); } containIndex.clear(); for (int i = 0; i < info.count(); i++) { if ((schedulelist.at(k)->dtStart() >= info.at(i).begindate && schedulelist.at(k)->dtStart() <= info.at(i).enddate) || (endTime >= info.at(i).begindate && endTime <= info.at(i).enddate)) { containIndex.append(i); } } if (containIndex.count() == 0) { ScheduleclassificationInfo firstschedule; firstschedule.begindate = schedulelist.at(k)->dtStart(); firstschedule.enddate = endTime; firstschedule.vData.append(schedulelist.at(k)); info.append(firstschedule); } else { ScheduleclassificationInfo &scheduleInfo = info[containIndex.at(0)]; int index = 0; for (int i = 1; i < containIndex.count(); ++i) { index = containIndex.at(i); if (info.at(index).begindate < scheduleInfo.begindate) scheduleInfo.begindate = info.at(index).begindate; if (info.at(index).enddate > scheduleInfo.enddate) scheduleInfo.enddate = info.at(index).enddate; scheduleInfo.vData.append(info.at(index).vData); } for (int i = containIndex.count() - 1; i > 0; --i) { info.removeAt(containIndex.at(i)); } if (schedulelist.at(k)->dtStart() < scheduleInfo.begindate) scheduleInfo.begindate = schedulelist.at(k)->dtStart(); if (endTime > scheduleInfo.enddate) scheduleInfo.enddate = endTime; scheduleInfo.vData.append(schedulelist.at(k)); } } } void CGraphicsView::mouseDoubleClickEvent(QMouseEvent *event) { emit signalScheduleShow(false); DGraphicsView::mouseDoubleClickEvent(event); CScheduleItem *item = dynamic_cast(itemAt(event->pos())); if (item == nullptr) { QPointF scenePoss = mapToScene(event->pos()); CScheduleDlg dlg(1, this); QDateTime tDatatime = m_coorManage->getDate(scenePoss); dlg.setDate(tDatatime); if (dlg.exec() == DDialog::Accepted) { emit signalsUpdateSchedule(); } return; } if (item->getType() == 1) { emit signalsCurrentScheduleDate(item->getDate()); return; } m_updateDflag = false; //TODO: item->getData()中的scheduleType为"",不是正常日程,有崩溃风险,待分析解决 CMyScheduleView dlg(item->getData(), this); connect(&dlg, &CMyScheduleView::signalsEditorDelete, this, &CGraphicsView::slotDoubleEvent); dlg.exec(); disconnect(&dlg, &CMyScheduleView::signalsEditorDelete, this, &CGraphicsView::slotDoubleEvent); } void CGraphicsView::mousePressEvent(QMouseEvent *event) { CScheduleItem *item = dynamic_cast(itemAt(event->pos())); if (item != nullptr && item->getType() == 1) { emit signalScheduleShow(false); return; } DragInfoGraphicsView::mousePressEvent(event); } void CGraphicsView::mouseMoveEvent(QMouseEvent *event) { if (m_DragStatus == NONE) { CScheduleItem *item = dynamic_cast(itemAt(event->pos())); if (item != nullptr && item->getType() == 1) { setCursor(Qt::ArrowCursor); DGraphicsView::mouseMoveEvent(event); return; } } DragInfoGraphicsView::mouseMoveEvent(event); } void CGraphicsView::slotDoubleEvent(int type) { Q_UNUSED(type); m_updateDflag = true; emit signalsUpdateSchedule(); } void CGraphicsView::slotScrollBar() { emit signalScheduleShow(false); } void CGraphicsView::slotUpdateScene() { this->scene()->update(); } #ifndef QT_NO_WHEELEVENT /************************************************************************ Function: wheelEvent() Description: 鼠标滚轮事件 Input: event 滚轮事件 Output: 无 Return: 无 Others: 无 ************************************************************************/ void CGraphicsView::wheelEvent(QWheelEvent *event) { emit signalScheduleShow(false); //非全天部分如果滚动为左右则退出 if (event->angleDelta().x() != 0 ) { return; } int test = event->angleDelta().y(); int viewWidth = viewport()->width(); int viewHeight = viewport()->height(); QPoint newCenter(viewWidth / 2, viewHeight / 2 - test); QPointF centerpos = mapToScene(newCenter); centerOnScene(centerpos); } #endif /************************************************************************ Function: resizeEvent() Description: 窗口大小改变事件 Input: event 窗口大小改变事件 Output: 无 Return: 无 Others: 无 ************************************************************************/ void CGraphicsView::resizeEvent(QResizeEvent *event) { scrollBarValueChangedSlot(); QGraphicsView::resizeEvent(event); viewport()->update(); update(); } /************************************************************************ Function: paintEvent() Description: 绘制事件 Input: event 事件 Output: 无 Return: 无 Others: 无 ************************************************************************/ void CGraphicsView::paintEvent(QPaintEvent *event) { QPainter t_painter(viewport()); int t_width = viewport()->width() + 2; //绘制水平线 if (m_LRFlag) { if (m_currentTimeType == 0) { t_painter.save(); t_painter.setPen(m_LRPen); for (int i = 0; i < m_vLRLarge.size(); ++i) t_painter.drawLine(QPoint(0, m_vLRLarge[i] - 1), QPoint(t_width, m_vLRLarge[i] - 1)); t_painter.restore(); } else { t_painter.save(); t_painter.setPen(m_LRPen); for (int i = 0; i < m_vLRLarge.size() - 1; ++i) t_painter.drawLine(QPoint(0, m_vLRLarge[i] - 1), QPoint(t_width, m_vLRLarge[i] - 1)); t_painter.restore(); if (m_viewType == 1 && m_coorManage->getBegindate() == m_currentDateTime.date()) { t_painter.save(); QPen pen = m_LRPen; pen.setColor(m_currenttimecolor); t_painter.setPen(pen); int index = m_vLRLarge.count() - 1; t_painter.drawLine(QPoint(0, m_vLRLarge[index] - 1), QPoint(t_width, m_vLRLarge[index] - 1)); t_painter.restore(); } } } DragInfoGraphicsView::paintEvent(event); } void CGraphicsView::scrollBarValueChangedSlot() { QMutexLocker locker(&m_Mutex); int viewHeight = viewport()->height(); m_vLRLarge.clear(); QPointF leftToprealPos = mapToScene(QPoint(0, 0)); QPointF leftbottomrealPos = mapToScene(QPoint(0, viewHeight)); m_timeInterval = m_Scene->height() / 24.0; qreal beginpos = static_cast(qFloor(leftToprealPos.y() / m_timeInterval) * m_timeInterval); if (beginpos < leftToprealPos.y()) { beginpos = (beginpos / m_timeInterval + 1) * m_timeInterval; } QVector vHours; for (qreal i = beginpos; i < leftbottomrealPos.y(); i = i + m_timeInterval) { QPoint point = mapFromScene(leftbottomrealPos.x(), i); m_vLRLarge.append(point.y()); vHours.append(qFloor(i / m_timeInterval + 0.5)); } qreal currentTime = static_cast(m_coorManage->getHeight(m_currentDateTime.time())); if (currentTime > beginpos && currentTime < leftbottomrealPos.y()) { m_currentTimeType = 1; QPoint point = mapFromScene(leftbottomrealPos.x(), currentTime); m_vLRLarge.append(point.y()); vHours.append(qFloor(currentTime / m_timeInterval + 0.5)); emit signalsPosHours(m_vLRLarge, vHours, m_currentTimeType); } else { m_currentTimeType = 0; emit signalsPosHours(m_vLRLarge, vHours, m_currentTimeType); } scene()->update(); update(); } CGraphicsView::PosInItem CGraphicsView::getPosInItem(const QPoint &p, const QRectF &itemRect) { QPointF scenePos = this->mapToScene(p); QPointF itemPos = QPointF(scenePos.x() - itemRect.x(), scenePos.y() - itemRect.y()); qreal bottomY = itemRect.height() - itemPos.y(); if (itemPos.y() < 5) { return TOP; } if (bottomY < 5) { return BOTTOM; } return MIDDLE; } DSchedule::Ptr CGraphicsView::getScheduleInfo(const QDateTime &beginDate, const QDateTime &endDate) { DSchedule::Ptr info(new DSchedule); if (beginDate.secsTo(endDate) > 0) { info->setDtStart(beginDate); if (beginDate.secsTo(endDate) < DDECalendar::ThirtyMinutesWithSec) { info->setDtEnd(beginDate.addSecs(DDECalendar::ThirtyMinutesWithSec)); } else { info->setDtEnd(endDate); } } else { if (endDate.secsTo(beginDate) < DDECalendar::ThirtyMinutesWithSec) { info->setDtStart(beginDate.addSecs(-DDECalendar::ThirtyMinutesWithSec)); } else { info->setDtStart(endDate); } info->setDtEnd(beginDate); } info->setSummary(tr("New Event")); info->setAllDay(false); //设置默认日程类型为工作 info->setScheduleTypeID("107c369e-b13a-4d45-9ff3-de4eb3c0475b"); info->setAlarmType(DSchedule::Alarm_15Min_Front); return info; } bool CGraphicsView::IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) { return !(qAbs(timeFirst.secsTo(timeSecond)) > 100); } bool CGraphicsView::JudgeIsCreate(const QPointF &pos) { return qAbs(pos.x() - m_PressPos.x()) > 20 || qAbs(m_PressDate.secsTo(m_coorManage->getDate(mapToScene(pos.toPoint())))) > 300; } void CGraphicsView::RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) { Q_UNUSED(listItem); m_rightMenu->clear(); m_rightMenu->addAction(m_createAction); QPointF scenePoss = mapToScene(pos); m_createDate = m_coorManage->getDate(scenePoss); m_rightMenu->exec(QCursor::pos()); } QDateTime CGraphicsView::getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) { return moveDateTime.secsTo(m_InfoEndTime) < DDECalendar::ThirtyMinutesWithSec ? m_InfoEndTime.addSecs(-DDECalendar::ThirtyMinutesWithSec) : moveDateTime; } QDateTime CGraphicsView::getDragScheduleInfoEndTime(const QDateTime &moveDateTime) { return m_InfoBeginTime.secsTo(moveDateTime) < DDECalendar::ThirtyMinutesWithSec ? m_InfoBeginTime.addSecs(DDECalendar::ThirtyMinutesWithSec) : moveDateTime; } QDateTime CGraphicsView::TimeRounding(const QDateTime &time) { int hours = time.time().hour(); int minnutes = 0; minnutes = time.time().minute() / 15; return QDateTime(time.date(), QTime(hours, minnutes * 15, 0)); } void CGraphicsView::centerOnScene(const QPointF &pos) { // view 根据鼠标下的点作为锚点来定位 scene setTransformationAnchor(QGraphicsView::AnchorUnderMouse); centerOn(pos); // scene 在 view 的中心点作为锚点 setTransformationAnchor(QGraphicsView::AnchorViewCenter); scrollBarValueChangedSlot(); setSceneHeightScale(pos); } void CGraphicsView::setSceneHeightScale(const QPointF &pos) { m_sceneHeightScale = pos.y() / this->scene()->height(); } void CGraphicsView::keepCenterOnScene() { QPointF pos; pos.setX(this->viewport()->width() / 2); pos.setY(this->scene()->height() * m_sceneHeightScale); centerOnScene(pos); } void CGraphicsView::setTime(QTime time) { int viewWidth = viewport()->width(); int viewHeight = viewport()->height(); QPoint newCenter(viewWidth / 2, viewHeight / 2); QPointF centerpos = mapToScene(newCenter); centerpos = QPointF(centerpos.x(), static_cast(m_coorManage->getHeight(time))); centerOnScene(centerpos); } /** * @brief CGraphicsView::updateInfo 更新日程数据显示 */ void CGraphicsView::updateInfo() { //更新选择日程状态 DragInfoGraphicsView::updateInfo(); switch (m_DragStatus) { case IsCreate: upDateInfoShow(IsCreate, m_DragScheduleInfo); break; default: upDateInfoShow(); break; } } dde-calendar-5.14.13/calendar-client/src/view/graphicsview.h000066400000000000000000000103141473346337000236330ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef GRAPHICSVIEW_H #define GRAPHICSVIEW_H #include "dschedule.h" #include "draginfographicsview.h" #include "graphicsItem/cweekdaybackgrounditem.h" #include "cweekdaygraphicsview.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE typedef struct _tagScheduleclassificationInfo { QDateTime begindate; QDateTime enddate; DSchedule::List vData; } ScheduleclassificationInfo; class CScheduleCoorManage; class CScheduleItem; class CGraphicsView : public CWeekDayGraphicsview { Q_OBJECT public: explicit CGraphicsView(QWidget *parent, ViewPosition Type = WeekPos); ~CGraphicsView() override; void setMargins(int left, int top, int right, int bottom); QMargins getMargins() { return m_margins; } void updateHeight(); void setCurrentDate(const QDateTime ¤tDate); void setInfo(const DSchedule::List &info); void addScheduleItem(const DSchedule::Ptr &info, QDate date, int index, int totalNum, int type, int viewtype, int maxnum); //设置搜索选中日程 void setSelectSearchSchedule(const DSchedule::Ptr &info) override; void clearSchedule(); void setMinTime(const int &minTime) { m_minTime = minTime; } void setMaxNum(const int maxnum) { m_sMaxNum = maxnum; } void keepCenterOnScene(); void scheduleClassificationType(DSchedule::List &scheduleInfolist, QList &info); void mouseDoubleClickEvent(QMouseEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; #ifndef QT_NO_WHEELEVENT void wheelEvent(QWheelEvent *event) override; #endif void resizeEvent(QResizeEvent *event) override; void setTime(QTime time); void updateInfo() override; protected: void paintEvent(QPaintEvent *event) override; public slots: void scrollBarValueChangedSlot(); void slotDoubleEvent(int type); void slotScrollBar(); void slotUpdateScene(); signals: void signalsPosHours(QVector vPos, QVector vHours, int currentTimeType = 0); void signalsCurrentScheduleDate(QDate date); private: void TimeRound(QDateTime &dtime); QDateTime TimeRounding(const QDateTime &time); void centerOnScene(const QPointF &pos); void setSceneHeightScale(const QPointF &pos); public: void setTheMe(int type = 0) override; protected: void slotCreate(const QDateTime &date) override; bool MeetCreationConditions(const QDateTime &date) override; void upDateInfoShow(const DragStatus &status = NONE, const DSchedule::Ptr &info = DSchedule::Ptr()) override; QDateTime getPosDate(const QPoint &p) override; void ShowSchedule(DragInfoItem *infoitem) override; void MoveInfoProcess(DSchedule::Ptr &info, const QPointF &pos) override; PosInItem getPosInItem(const QPoint &p, const QRectF &itemRect) override; DSchedule::Ptr getScheduleInfo(const QDateTime &beginDate, const QDateTime &endDate) override; bool IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) override; bool JudgeIsCreate(const QPointF &pos) override; void RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) override; QDateTime getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) override; QDateTime getDragScheduleInfoEndTime(const QDateTime &moveDateTime) override; private: QVector m_vScheduleItem; QMargins m_margins; //四周空白 bool m_LRFlag; //水平线 QPen m_LRPen; //水平线画笔 bool m_TBFlag; //垂直线 QPen m_TBPen; //垂直线画笔 QVector m_vLRLarge; //大刻度像素位置 qreal m_timeInterval; qreal m_sceneHeightScale = 0; QColor m_weekcolor = "#4F9BFF"; QColor m_currenttimecolor = "#F74444"; int m_currentTimeType = 0; QTimer *m_timer = nullptr; QMutex m_Mutex; bool m_updateDflag = false; DSchedule::List m_scheduleInfo; QDateTime m_currentDateTime; int m_minTime; //最小高度对应的最小时间 int m_sMaxNum = 4; }; #endif // GRAPHICSVIEW_H dde-calendar-5.14.13/calendar-client/src/view/monthgraphiview.cpp000066400000000000000000000405251473346337000247150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "monthgraphiview.h" #include "../widget/monthWidget/monthscheduleview.h" #include "../dialog/scheduledlg.h" #include "../dialog/myscheduleview.h" #include "../widget/touchgestureoperation.h" #include "constants.h" #include "commondef.h" #include "graphicsItem/cmonthschedulenumitem.h" #include "cscenetabkeydeal.h" #include "ckeyenabledeal.h" #include "ckeyleftdeal.h" #include "ckeyrightdeal.h" #include "ckeyupdeal.h" #include "ckeydowndeal.h" #include #include CMonthGraphicsview::CMonthGraphicsview(QWidget *parent) : DragInfoGraphicsView(parent) { //设置显示左右下角圆角 setShowRadius(true, true); m_MonthScheduleView = new CMonthScheduleView(this, m_Scene); connect(this, &CMonthGraphicsview::signalFontChange, m_MonthScheduleView, &CMonthScheduleView::slotFontChange); for (int i = 0; i < DDEMonthCalendar::ItemSizeOfMonthDay; ++i) { CMonthDayItem *item = new CMonthDayItem(); item->setZValue(-1); if (m_DayItem.size() > 0) { //设置对应左右和下一个 关系 m_DayItem.last()->setNextFocusItem(item); m_DayItem.last()->setRightItem(item); item->setLeftItem(m_DayItem.last()); } int upNum = i - 7; //如果对应的上一排编号大于零则设置对应的上下关系 if (upNum >= 0) { m_DayItem.at(upNum)->setDownItem(item); item->setUpItem(m_DayItem.at(upNum)); } //设置编号 item->setBackgroundNum(i); m_DayItem.append(item); m_Scene->addItem(item); } updateSize(); m_Scene->setFirstFocusItem(m_DayItem.first()); //添加键盘事件处理 CKeyPressPrxy *m_keyPrxy = new CKeyPressPrxy(); m_keyPrxy->addkeyPressDeal(new CSceneTabKeyDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CKeyEnableDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CKeyLeftDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CKeyRightDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CKeyUpDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CKeyDownDeal(m_Scene)); m_Scene->setKeyPressPrxy(m_keyPrxy); } CMonthGraphicsview::~CMonthGraphicsview() { m_DayItem.clear(); } void CMonthGraphicsview::setTheMe(int type) { m_themetype = type; DragInfoGraphicsView::setTheMe(type); for (int i = 0; i < m_DayItem.size(); ++i) { m_DayItem.at(i)->setTheMe(type); } } void CMonthGraphicsview::setDate(const QVector &showDate) { Q_ASSERT(showDate.size() == 42); if (showDate.at(0).day() != 1) { m_currentMonth = showDate.at(0).addMonths(1).month(); } else { m_currentMonth = showDate.at(0).month(); } //根据当前时间设置当前场景的第一个焦点item int currentIndex = 0; for (int i = 0; i < m_DayItem.size(); ++i) { m_DayItem.at(i)->setDate(showDate.at(i)); m_DayItem.at(i)->setCurrentMonth(showDate.at(i).month() == m_currentMonth); if (showDate.at(i) == getCurrentDate()) { currentIndex = i; } } m_Scene->setFirstFocusItem(m_DayItem.at(currentIndex)); m_schedulelistdata.clear(); this->scene()->update(); } void CMonthGraphicsview::setFestival(const QMap &festivalInfo) { m_festivallist = festivalInfo; for (int i = 0; i < m_DayItem.size(); ++i) { m_DayItem.at(i)->setStatus(static_cast(m_festivallist[m_DayItem.at(i)->getDate()])); } this->scene()->update(); } void CMonthGraphicsview::setLunarInfo(const QMap &lunarCache) { m_lunarCache = lunarCache; updateLunar(); } void CMonthGraphicsview::setLunarVisible(bool visible) { CMonthDayItem::m_LunarVisible = visible; } /** * @brief CMonthGraphicsview::setScheduleInfo 设置日程信息 * @param info */ void CMonthGraphicsview::setScheduleInfo(const QMap &info) { m_schedulelistdata = info; updateInfo(); } /** * @brief CMonthGraphicsview::setSelectSearchSchedule 设置选择搜索日程 * @param scheduleInfo */ void CMonthGraphicsview::setSelectSearchSchedule(const DSchedule::Ptr &scheduleInfo) { DragInfoGraphicsView::setSelectSearchSchedule(scheduleInfo); //获取所有的日程item QVector mScheduleShowBtn = m_MonthScheduleView->getScheduleShowItem(); for (int i = 0; i < mScheduleShowBtn.size(); ++i) { CMonthScheduleItem *item = dynamic_cast(mScheduleShowBtn.at(i)); if (item == nullptr) continue; if (scheduleInfo == item->getData()) { item->setStartValue(0); item->setEndValue(4); item->startAnimation(); } } } /** * @brief CMonthGraphicsview::setSearchScheduleInfo 设置搜索日程信息 * @param searchScheduleInfo */ void CMonthGraphicsview::setSearchScheduleInfo(const DSchedule::List &searchScheduleInfo) { DragInfoItem::setSearchScheduleInfo(searchScheduleInfo); this->scene()->update(); } void CMonthGraphicsview::updateSize() { //场景的大小和位置 QRectF sceneRect(0, 0, viewport()->rect().width(), viewport()->rect().height()); m_Scene->setSceneRect(sceneRect); qreal w = m_Scene->width() / DDEMonthCalendar::AFewDaysOfWeek; qreal h = m_Scene->height() / DDEMonthCalendar::LinesNumOfMonth; QRectF rect ; int w_offset = 0; int h_offset = 0; for (int i = 0 ; i < m_DayItem.size(); ++i) { h_offset = i / DDEMonthCalendar::AFewDaysOfWeek; w_offset = i % DDEMonthCalendar::AFewDaysOfWeek; rect.setRect(w * w_offset, h * h_offset, w, h); m_DayItem.at(i)->setRect(rect); } } void CMonthGraphicsview::updateLunar() { QDate date; CaHuangLiDayInfo info; QString lunarStr(""); for (int i = 0 ; i < m_DayItem.size(); ++i) { date = m_DayItem.at(i)->getDate(); if (m_lunarCache.contains(date)) { info = m_lunarCache.value(date); if (info.mLunarDayName == "初一") { //如果为闰月只显示月份不显示天 if (info.mLunarMonthName.contains("闰")) { info.mLunarDayName = info.mLunarMonthName; } else { info.mLunarDayName = info.mLunarMonthName + info.mLunarDayName; } } if (info.mTerm.isEmpty()) { lunarStr = info.mLunarDayName; } else { lunarStr = info.mTerm; } } else { lunarStr = ""; } m_DayItem.at(i)->setLunar(lunarStr); } } /** * @brief CMonthGraphicsview::updateInfo 更新日程数据显示 */ void CMonthGraphicsview::updateInfo() { DragInfoGraphicsView::updateInfo(); int h = m_MonthScheduleView->getScheduleHeight(); m_MonthScheduleView->setallsize(this->viewport()->width(), this->viewport()->height(), 0, 0, 0, h); m_MonthScheduleView->setData(m_schedulelistdata, 1); switch (m_DragStatus) { case IsCreate: upDateInfoShow(IsCreate, m_DragScheduleInfo); break; case ChangeWhole: upDateInfoShow(ChangeWhole, m_DragScheduleInfo); break; default: break; } viewport()->update(); update(); //更新背景上显示的item updateBackgroundShowItem(); } QPointF CMonthGraphicsview::getItemPos(const QPoint &p, const QRectF &itemRect) { QPointF scenePos = this->mapToScene(p); return QPointF(scenePos.x() - itemRect.x(), scenePos.y() - itemRect.y()); } CMonthGraphicsview::PosInItem CMonthGraphicsview::getPosInItem(const QPoint &p, const QRectF &itemRect) { QPointF scenePos = this->mapToScene(p); QPointF itemPos = QPointF(scenePos.x() - itemRect.x(), scenePos.y() - itemRect.y()); qreal bottomY = itemRect.width() - itemPos.x(); if (itemPos.x() < 5) { return LEFT; } if (bottomY < 5) { return RIGHT; } return MIDDLE; } QDateTime CMonthGraphicsview::getPosDate(const QPoint &p) { if (!this->sceneRect().contains(p)) return m_MoveDate; QRectF rect = this->sceneRect(); qreal x = 0; qreal y = 0; if (p.x() < 0) { x = 0; } else if (p.x() > (rect.width() - 10)) { x = rect.width() - 10; } else { x = p.x(); } if (p.y() < 0) { y = 0; } else if (p.y() > (rect.height() - 10)) { y = rect.height() - 10; } else { y = p.y(); } int xoffset = qFloor(x / (rect.width() / DDEMonthCalendar::AFewDaysOfWeek)) % DDEMonthCalendar::AFewDaysOfWeek; int yoffset = qFloor(y / (rect.height() / DDEMonthCalendar::LinesNumOfMonth)) % DDEMonthCalendar::LinesNumOfMonth; return QDateTime(m_DayItem[xoffset + yoffset * 7]->getDate(), QTime(0, 0, 0)); } void CMonthGraphicsview::upDateInfoShow(const CMonthGraphicsview::DragStatus &status, const DSchedule::Ptr &info) { switch (status) { case NONE: Q_UNUSED(info); break; case ChangeBegin: case ChangeEnd: { m_MonthScheduleView->changeDate(info); } break; case ChangeWhole: { } break; case IsCreate: m_MonthScheduleView->updateDate(info); break; } } void CMonthGraphicsview::slideEvent(QPointF &startPoint, QPointF &stopPort) { qreal _movingLine {0}; touchGestureOperation::TouchMovingDirection _touchMovingDir = touchGestureOperation::getTouchMovingDir(startPoint, stopPort, _movingLine); //切换月份 0 不切换 1 下一个 -1 上个月 int delta {0}; //移动偏移 25则切换月份 const int moveOffset = 25; switch (_touchMovingDir) { case touchGestureOperation::T_TOP: { if (_movingLine > moveOffset) { delta = -1; startPoint = stopPort; } break; } case touchGestureOperation::T_BOTTOM: { if (_movingLine > moveOffset) { delta = 1; startPoint = stopPort; } break; } default: break; } if (delta != 0) { emit signalAngleDelta(delta); } } void CMonthGraphicsview::mouseDoubleClickEvent(QMouseEvent *event) { if (event->button() != Qt::LeftButton) { return; } QGraphicsItem *listItem = itemAt(event->pos()); CMonthScheduleNumItem *item = dynamic_cast(listItem); if (item != nullptr) { //双击切换视图 if (item->getDate().year() > DDECalendar::QueryEarliestYear) { emit signalsViewSelectDate(item->getDate()); } return; } CMonthScheduleItem *infoitem = dynamic_cast(listItem); if (infoitem != nullptr) { CMyScheduleView dlg(infoitem->getData(), this); connect(&dlg, &CMyScheduleView::signalsEditorDelete, this, &CMonthGraphicsview::signalsUpdateSchedule); dlg.exec(); return; } CMonthDayItem *Dayitem = dynamic_cast(listItem); if (Dayitem != nullptr) { QPointF point = getItemPos(event->pos(), Dayitem->rect()); if (point.y() < 38) { //双击切换视图 if (Dayitem->getDate().year() > DDECalendar::QueryEarliestYear) { emit signalsViewSelectDate(Dayitem->getDate()); } } else { //双击新建日程 if (Dayitem->getDate().year() >= DDECalendar::QueryEarliestYear) { if (Dayitem->getDate().year() <= DDECalendar::QueryLatestYear) { slotCreate(QDateTime(Dayitem->getDate(), QTime(0, 0, 0))); } } } } } void CMonthGraphicsview::resizeEvent(QResizeEvent *event) { DragInfoGraphicsView::resizeEvent(event); updateSize(); updateInfo(); } void CMonthGraphicsview::changeEvent(QEvent *event) { if (event->type() == QEvent::FontChange) { emit signalFontChange(); } } void CMonthGraphicsview::wheelEvent(QWheelEvent *e) { //如果滚动为上下则发送信号 if (e->angleDelta().y() != 0) { emit signalAngleDelta(e->angleDelta().y()); } } /** * @brief CMonthGraphicsview::updateBackgroundShowItem 更新背景上显示的item */ void CMonthGraphicsview::updateBackgroundShowItem() { for (int i = 0; i < m_DayItem.size(); ++i) { m_DayItem.at(i)->updateShowItem(); } } void CMonthGraphicsview::setSceneCurrentItemFocus(const QDate &focusDate) { int offset = static_cast(m_DayItem.first()->getDate().daysTo(focusDate)); if (offset >= 0 && offset < m_DayItem.size()) { m_Scene->setCurrentFocusItem(m_DayItem.at(offset)); m_Scene->currentFocusItemUpdate(); } else { qCWarning(ClientLogger) << "Switching time range error! focusDate:" << focusDate << " first item date:" << m_DayItem.first()->getDate(); } } void CMonthGraphicsview::setDragPixmap(QDrag *drag, DragInfoItem *item) { CMonthScheduleItem *infoitem = dynamic_cast(item); drag->setPixmap(infoitem->getPixmap()); } bool CMonthGraphicsview::MeetCreationConditions(const QDateTime &date) { return qAbs(date.daysTo(m_PressDate)) < 43; } bool CMonthGraphicsview::IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) { return timeFirst.date() == timeSecond.date(); } bool CMonthGraphicsview::JudgeIsCreate(const QPointF &pos) { return qAbs(pos.x() - m_PressPos.x()) > 20 || qAbs(m_PressDate.daysTo(getPosDate(pos.toPoint()))) > 0; } void CMonthGraphicsview::RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) { Q_UNUSED(pos); CMonthDayItem *Dayitem = dynamic_cast(listItem); if (Dayitem != nullptr) { m_rightMenu->clear(); m_rightMenu->addAction(m_createAction); m_createDate.setDate(Dayitem->getDate()); m_rightMenu->exec(QCursor::pos()); } } void CMonthGraphicsview::MoveInfoProcess(DSchedule::Ptr &info, const QPointF &pos) { qint64 offset = m_PressDate.daysTo(m_MoveDate); info->setDtStart(info->dtStart().addDays(offset)); info->setDtEnd(info->dtEnd().addDays(offset)); qreal y = 0; QRectF rect = this->sceneRect(); if (pos.y() < 0) { y = 0; } else if (pos.y() > rect.height()) { y = rect.height(); } else { y = pos.y(); } int yoffset = qFloor(y / (rect.height() / DDEMonthCalendar::LinesNumOfMonth)) % DDEMonthCalendar::LinesNumOfMonth; m_MonthScheduleView->updateDate(yoffset, info); } /** * @brief CMonthGraphicsview::getDragScheduleInfoBeginTime 获取移动开始时间 * @param moveDateTime * @return */ QDateTime CMonthGraphicsview::getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) { //获取移动开始时间 QDateTime _beginTime = moveDateTime.daysTo(m_InfoEndTime) < 0 ? QDateTime(m_InfoEndTime.date(), m_InfoBeginTime.time()) : QDateTime(moveDateTime.date(), m_InfoBeginTime.time()); //如果开始时间晚与结束时间则减少一天 _beginTime = _beginTime > m_InfoEndTime ? _beginTime.addDays(-1) : _beginTime; return _beginTime; } /** * @brief CMonthGraphicsview::getDragScheduleInfoEndTime 获取结束时间 * @param moveDateTime * @return */ QDateTime CMonthGraphicsview::getDragScheduleInfoEndTime(const QDateTime &moveDateTime) { //获取结束时间 QDateTime _endTime = m_InfoBeginTime.daysTo(moveDateTime) < 0 ? QDateTime(m_InfoBeginTime.date(), m_InfoEndTime.time()) : QDateTime(moveDateTime.date(), m_InfoEndTime.time()); //如果结束时间小于开始时间则添加一天 _endTime = _endTime < m_InfoBeginTime ? _endTime.addDays(1) : _endTime; return _endTime; } void CMonthGraphicsview::slotCreate(const QDateTime &date) { CScheduleDlg dlg(1, this); QDateTime tDatatime; tDatatime.setDate(date.date()); if (date.date() == QDate::currentDate()) { tDatatime.setTime(QTime::currentTime()); } else { tDatatime.setTime(QTime(8, 0)); } dlg.setDate(tDatatime); dlg.setAllDay(true); if (dlg.exec() == DDialog::Accepted) { emit signalsUpdateSchedule(); emit signalsScheduleUpdate(0); } } dde-calendar-5.14.13/calendar-client/src/view/monthgraphiview.h000066400000000000000000000072371473346337000243650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MONTHGRAPHIVIEW_H #define MONTHGRAPHIVIEW_H #include "dschedule.h" #include "huangliData/lunardatastruct.h" #include "huangliData/dbusdatastruct.h" #include "draginfographicsview.h" #include "view/graphicsItem/cmonthdayitem.h" #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class CMonthScheduleView; class CMonthGraphicsview : public DragInfoGraphicsView { Q_OBJECT public: explicit CMonthGraphicsview(QWidget *parent = nullptr); ~CMonthGraphicsview() override; void setTheMe(int type = 0) override; public: void setDate(const QVector &showDate); //设置班休信息 void setFestival(const QMap &festivalInfo); //设置农历信息 void setLunarInfo(const QMap &lunarCache); //设置是否显示农历信息 void setLunarVisible(bool visible); //设置日程信息 void setScheduleInfo(const QMap &info); //设置搜索选中日程 void setSelectSearchSchedule(const DSchedule::Ptr &scheduleInfo) override; //设置搜索日程信息 void setSearchScheduleInfo(const DSchedule::List &searchScheduleInfo); private: void updateSize(); void updateLunar(); //更新日程数据显示 void updateInfo() override; QPointF getItemPos(const QPoint &p, const QRectF &itemRect); protected: void mouseDoubleClickEvent(QMouseEvent *event) override; void resizeEvent(QResizeEvent *event) override; void changeEvent(QEvent *event) override; void wheelEvent(QWheelEvent *) override; //更新背景上显示的item void updateBackgroundShowItem() override; protected: void setSceneCurrentItemFocus(const QDate &focusDate) override; private: void setDragPixmap(QDrag *drag, DragInfoItem *item) override; bool MeetCreationConditions(const QDateTime &date) override; //判断时间是否相等 bool IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) override; //根据鼠标移动的距离判断是否创建日程 bool JudgeIsCreate(const QPointF &pos) override; void RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) override; void MoveInfoProcess(DSchedule::Ptr &info, const QPointF &pos) override; QDateTime getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) override; QDateTime getDragScheduleInfoEndTime(const QDateTime &moveDateTime) override; PosInItem getPosInItem(const QPoint &p, const QRectF &itemRect)override; QDateTime getPosDate(const QPoint &p)override; void upDateInfoShow(const DragStatus &status = NONE, const DSchedule::Ptr &info = DSchedule::Ptr()) override; /** * @brief slideEvent 触摸滑动事件处理 * @param startPoint 触摸开始坐标 * @param stopPort 触摸结束坐标 */ void slideEvent(QPointF &startPoint, QPointF &stopPort) override; signals: void signalFontChange(); void signalsViewSelectDate(QDate date); void signalsScheduleUpdate(const int id = 0); public slots: void slotCreate(const QDateTime &date) override; private: QVector m_DayItem; QMap m_lunarCache; QMap m_festivallist; int m_currentMonth; CMonthScheduleView *m_MonthScheduleView = nullptr; QMap m_schedulelistdata; }; #endif // MONTHGRAPHIVIEW_H dde-calendar-5.14.13/calendar-client/src/widget/000077500000000000000000000000001473346337000213015ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/widget/calendarmainwindow.cpp000066400000000000000000001022241473346337000256540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calendarmainwindow.h" #include "widget/yearWidget/yearwindow.h" #include "widget/monthWidget/monthwindow.h" #include "dbuscalendar_adaptor.h" #include "widget/weekWidget/weekwindow.h" #include "widget/dayWidget/daywindow.h" #include "sidebarWidget/sidebarview.h" #include "colorWidget/colorpickerWidget.h" #include "scheduledatamanage.h" #include "myscheduleview.h" #include "configsettings.h" #include "shortcut.h" #include "schedulesearchview.h" #include "cdynamicicon.h" #include "constants.h" #include "scheduledlg.h" #include "ctitlewidget.h" #include "tabletconfig.h" #include "calendarglobalenv.h" #include "settingWidget/userloginwidget.h" #include "settingWidget/settingwidgets.h" #include "scheduletypeeditdlg.h" #include "accountmanager.h" #include "units.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE DWIDGET_USE_NAMESPACE static const int CalendarMWidth = 646; static const int CalendarMHeight = 634; const int CalendarSwitchWidth = 647; //当宽度小于这个尺寸时,标题栏需要切换显示逻辑 const int CalendarViewSwitchWidth = 804; //当宽度小于这个尺寸时,视图部分需要切换显示逻辑 const int Calendar_Default_Width = 860; //默认宽度 const int Calendar_Default_Height = 634; //默认高度 //静态的翻译不会真的翻译,但是会更新ts文件 //像static QString a = QObject::tr("hello"), a实际等于hello,但是ts会有hello这个词条 //调用DSetingDialog时会用到上述场景 Calendarmainwindow::Calendarmainwindow(int index, QWidget *w) : DMainWindow(w) , m_defaultIndex(index) { setContentsMargins(QMargins(0, 0, 0, 0)); initUI(); initConnection(); initData(); setMinimumSize(CalendarMWidth, CalendarMHeight); setWindowTitle(tr("Calendar")); new CalendarAdaptor(this); resize(CalendarMWidth, CalendarMHeight); //接收点击焦点 setFocusPolicy(Qt::ClickFocus); QShortcut *shortcut = new QShortcut(this); shortcut->setKey(QKeySequence(QLatin1String("Ctrl+F"))); connect(shortcut, SIGNAL(activated()), this, SLOT(slotSearchEdit())); QShortcut *viewshortcut = new QShortcut(this); viewshortcut->setKey(QKeySequence(QLatin1String("Ctrl+Shift+/"))); connect(viewshortcut, SIGNAL(activated()), this, SLOT(slotViewShortcut())); setTitlebarShadowEnabled(true); //若分辨率改变则重新设置最大尺寸 const auto screens = QGuiApplication::screens(); for (QScreen *screen : screens) { connect(screen, &QScreen::geometryChanged, this, &Calendarmainwindow::slotSetMaxSize); } //兼容以前的配置信息 if (CConfigSettings::getInstance()->contains("base.geometry")) { QByteArray arrayByte = CConfigSettings::getInstance()->value("base.geometry").toByteArray(); bool isOk = false; int state = CConfigSettings::getInstance()->value("base.state").toInt(&isOk); Qt::WindowStates winStates = static_cast(state); if (winStates.testFlag(Qt::WindowMaximized)) { showMaximized(); } else { restoreGeometry(arrayByte); Dtk::Widget::moveToCenter(this); } //移除旧的配置信息 CConfigSettings::getInstance()->remove("base.geometry"); CConfigSettings::getInstance()->remove("base.state"); } else if (CConfigSettings::getInstance()->contains("base.windowWidth")) { //获取窗口的宽度和高度 int width = CConfigSettings::getInstance()->value("base.windowWidth").toInt(); int height = CConfigSettings::getInstance()->value("base.windowHeight").toInt(); QRect rect(0, 0, width, height); this->setGeometry(rect); } else { //如果没有相关配置则设置为默认尺寸 QRect rect(0, 0, Calendar_Default_Width, Calendar_Default_Height); this->setGeometry(rect); } //在屏幕中央显示 Dtk::Widget::moveToCenter(this); //注册光标位置 CalendarGlobalEnv::getGlobalEnv()->registerKey(DDECalendar::CursorPointKey, QPoint()); //保存主窗口指针 CalendarGlobalEnv::getGlobalEnv()->registerKey("MainWindow", QVariant::fromValue(static_cast(this))); } Calendarmainwindow::~Calendarmainwindow() { CDynamicIcon::releaseInstance(); } void Calendarmainwindow::slotViewShortcut() { QRect rect = window()->geometry(); QPoint pos(rect.x() + rect.width() / 2, rect.y() + rect.height() / 2); Shortcut sc; QStringList shortcutString; QString param1 = "-j=" + sc.toStr(); QString param2 = "-p=" + QString::number(pos.x()) + "," + QString::number(pos.y()); shortcutString << param1 << param2; QProcess *shortcutViewProc = new QProcess(this); shortcutViewProc->startDetached("deepin-shortcut-viewer", shortcutString); connect(shortcutViewProc, SIGNAL(finished(int)), shortcutViewProc, SLOT(deleteLater())); } /** * @brief Calendarmainwindow::slotCurrentDateUpdate 更新当前时间 */ void Calendarmainwindow::slotCurrentDateUpdate() { //获取当前时间 const QDateTime _currentDate = QDateTime::currentDateTime(); //设置当前时间 m_DayWindow->setCurrentDateTime(_currentDate); //如果当前日期与动态图标日期不一样则重新生成动态图标 if (_currentDate.date() != CDynamicIcon::getInstance()->getDate()) { CDynamicIcon::getInstance()->setDate(QDate::currentDate()); CDynamicIcon::getInstance()->setIcon(); //更新视图数据显示 for (int i = 0; i < m_stackWidget->count(); ++i) { CScheduleBaseWidget *widget = qobject_cast(m_stackWidget->widget(i)); widget->updateData(); } //设置年视图年数据时间显示 m_yearwindow->setYearData(); //更新月视图当前周横线绘制 m_monthWindow->setCurrentDateTime(_currentDate); } } /** * @brief Calendarmainwindow::slotSetSearchFocus 设置搜索框焦点 */ void Calendarmainwindow::slotSetSearchFocus() { //设置输入框获取焦点 slotSearchEdit(); } /** * @brief Calendarmainwindow::viewWindow 切换视图 * @param type 视图索引 * @param showAnimation 是否显示动画 */ void Calendarmainwindow::viewWindow(int type, const bool showAnimation) { if (type < 0 || type >= m_stackWidget->count()) { qCWarning(ClientLogger) << "set view error,set index:" << type; return; } if (showAnimation) { m_stackWidget->setCurrent(type); } else { m_stackWidget->setCurrentIndex(type); } if (m_buttonBox->checkedId() != type) { //设置选中 m_buttonBox->button(type)->setChecked(true); } switch (type) { case DDECalendar::CalendarYearWindow: { //更新界面显示 m_yearwindow->updateData(); } break; case DDECalendar::CalendarMonthWindow: { } break; case DDECalendar::CalendarWeekWindow: { } break; case DDECalendar::CalendarDayWindow: { m_DayWindow->setTime(); m_searchflag = true; } break; } m_priindex = type == 0 ? m_priindex : type; //为了与老版本配置兼容 CConfigSettings::getInstance()->setOption("base.view", type + 1); } void Calendarmainwindow::updateHeight() { int index = m_stackWidget->currentIndex(); if (index < 0 || index > m_stackWidget->count() - 1) { return; } switch (index) { case DDECalendar::CalendarYearWindow: { } break; case DDECalendar::CalendarMonthWindow: { } break; case DDECalendar::CalendarWeekWindow: { m_weekWindow->updateHeight(); } break; case DDECalendar::CalendarDayWindow: { m_DayWindow->updateHeight(); } break; } } void Calendarmainwindow::setSearchWidth(int w) { m_contentBackground->setFixedWidth(w); } void Calendarmainwindow::slotTheme(int type) { if (type == 0) { type = DGuiApplicationHelper::instance()->themeType(); } if (type == 1) { DPalette anipa = m_contentBackground->palette(); anipa.setColor(DPalette::Background, "#F8F8F8"); m_contentBackground->setPalette(anipa); m_contentBackground->setBackgroundRole(DPalette::Background); DPalette tframepa = m_transparentFrame->palette(); QColor tColor = "#FFFFFF"; tColor.setAlphaF(0.3); tframepa.setColor(DPalette::Background, tColor); m_transparentFrame->setPalette(tframepa); m_transparentFrame->setBackgroundRole(DPalette::Background); } else { DPalette anipa = m_contentBackground->palette(); anipa.setColor(DPalette::Background, "#252525"); m_contentBackground->setPalette(anipa); m_contentBackground->setBackgroundRole(DPalette::Background); DPalette tframepa = m_transparentFrame->palette(); QColor tColor = "#000000"; tColor.setAlphaF(0.3); tframepa.setColor(DPalette::Background, tColor); m_transparentFrame->setPalette(tframepa); m_transparentFrame->setBackgroundRole(DPalette::Background); } CScheduleDataManage::getScheduleDataManage()->setTheMe(type); m_yearwindow->setTheMe(type); m_monthWindow->setTheMe(type); m_weekWindow->setTheMe(type); m_DayWindow->setTheMe(type); m_scheduleSearchView->setTheMe(type); } void Calendarmainwindow::slotOpenSchedule(QString job) { if (job.isEmpty()) return; DSchedule::Ptr out; DSchedule::fromJsonString(out, job); //设置被选中 m_buttonBox->button(DDECalendar::CalendarDayWindow)->setChecked(true); //设置获取焦点 m_buttonBox->button(DDECalendar::CalendarDayWindow)->setFocus(); //切换到日视图 m_stackWidget->setCurrentIndex(DDECalendar::CalendarDayWindow); //设置选择时间 m_DayWindow->setSelectDate(out->dtStart().date()); //更新界面显示 m_DayWindow->updateData(); //设置非全天时间定位位置 m_DayWindow->setTime(out->dtStart().time()); //弹出编辑对话框 if (m_dlg == Q_NULLPTR) { m_dlg = new CMyScheduleView(out, this); } else { m_dlg->setSchedules(out); m_dlg->updateFormat(); } if (m_dlg->isHidden()) m_dlg->exec(); slotWUpdateSchedule(); } void Calendarmainwindow::initUI() { //设置主窗口辅助技术显示名称和描述 this->setObjectName("MainWindow"); this->setAccessibleName("MainWindow"); this->setAccessibleDescription("This is the main window"); m_currentDateUpdateTimer = new QTimer(this); //1.5秒更新当前时间 m_currentDateUpdateTimer->start(1500); CDynamicIcon::getInstance()->setTitlebar(this->titlebar()); CDynamicIcon::getInstance()->setIcon(); m_titleWidget = new CTitleWidget(this); m_titleWidget->setFocusPolicy(Qt::TabFocus); this->titlebar()->setCustomWidget(m_titleWidget); setTabOrder(this->titlebar(), m_titleWidget); //设置状态栏焦点代理为标题窗口 this->titlebar()->setFocusProxy(m_titleWidget); this->titlebar()->setQuitMenuVisible(true);//先设置后,才可以获取menu内容。因为setQuitMenuVisible接口中进行了action的添加操作 QMenu *menuTitleBar = this->titlebar()->menu(); QAction *pSetting = new QAction(tr("Manage"), menuTitleBar); //menuTitleBar->addAction(pSetting); menuTitleBar->insertSeparator(menuTitleBar->actions()[0]); menuTitleBar->insertAction(menuTitleBar->actions()[0], pSetting); connect(pSetting, &QAction::triggered, this, &Calendarmainwindow::slotOpenSettingDialog); //添加隐私政策 QAction *pPrivacy = new QAction(tr("Privacy Policy"), menuTitleBar); menuTitleBar->insertSeparator(menuTitleBar->actions()[1]); menuTitleBar->insertAction(menuTitleBar->actions()[1], pPrivacy); connect(pPrivacy, &QAction::triggered, this, &Calendarmainwindow::slotShowPrivacy); //接收设置按键焦点 connect(m_titleWidget, &CTitleWidget::signalSetButtonFocus, [ = ] { m_setButtonFocus = true; }); connect(m_titleWidget, &CTitleWidget::signalSearchFocusSwitch, this, &Calendarmainwindow::slotSearchFocusSwitch); m_searchEdit = m_titleWidget->searchEdit(); m_buttonBox = m_titleWidget->buttonBox(); m_newScheduleBtn = m_titleWidget->newScheduleBtn(); QHBoxLayout *tMainLayout = new QHBoxLayout; tMainLayout->setContentsMargins(10, 10, 10, 10); tMainLayout->setSpacing(10); m_sidebarView = new SidebarView(this); tMainLayout->addWidget(m_sidebarView, 1); m_stackWidget = new AnimationStackedWidget(); m_stackWidget->setObjectName("StackedWidget"); m_stackWidget->setAccessibleName("StackedWidget"); m_stackWidget->setAccessibleDescription("Container for year window, month window, week window and day window"); m_stackWidget->setContentsMargins(0, 0, 0, 0); m_stackWidget->setDuration(250); createview(); tMainLayout->addWidget(m_stackWidget, 4); m_contentBackground = new DFrame; m_contentBackground->setAccessibleName("ScheduleSearchWidgetBackgroundFrame"); m_contentBackground->setObjectName("ScheduleSearchWidgetBackgroundFrame"); m_contentBackground->setContentsMargins(0, 0, 0, 0); DPalette anipa = m_contentBackground->palette(); anipa.setColor(DPalette::Background, "#F8F8F8"); m_contentBackground->setAutoFillBackground(true); m_contentBackground->setPalette(anipa); m_scheduleSearchView = new CScheduleSearchView(this); m_scheduleSearchView->setObjectName("ScheduleSearchWidget"); m_scheduleSearchView->setAccessibleName("ScheduleSearchWidget"); m_scheduleSearchView->setAccessibleDescription("Window showing search results"); QVBoxLayout *ssLayout = new QVBoxLayout; ssLayout->setMargin(0); ssLayout->setSpacing(0); ssLayout->addWidget(m_scheduleSearchView, 1); m_contentBackground->setLayout(ssLayout); m_contentBackground->setVisible(false); tMainLayout->addWidget(m_contentBackground); DWidget *maincentralWidget = new DWidget(this); maincentralWidget->setAccessibleName("mainCentralWidget"); maincentralWidget->setLayout(tMainLayout); setCentralWidget(maincentralWidget); m_transparentFrame = new DFrame(this); m_transparentFrame->setAutoFillBackground(true); m_transparentFrame->hide(); m_animation = new QPropertyAnimation(this); //delete快捷键 QShortcut *dShortcut = new QShortcut(this); dShortcut->setKey(QKeySequence(QLatin1String("Delete"))); connect(dShortcut, &QShortcut::activated, this, &Calendarmainwindow::slotDeleteitem); } void Calendarmainwindow::initConnection() { connect(m_stackWidget, &AnimationStackedWidget::signalIsFinished, this, &Calendarmainwindow::slotSetButtonBox); connect(m_buttonBox, &DButtonBox::buttonClicked, this, &Calendarmainwindow::slotstackWClicked); connect(m_searchEdit, &DSearchEdit::returnPressed, this, &Calendarmainwindow::slotSreturnPressed); connect(m_searchEdit, &DSearchEdit::textChanged, this, &Calendarmainwindow::slotStextChanged); connect(m_searchEdit, &DSearchEdit::focusChanged, this, &Calendarmainwindow::slotStextfocusChanged); //监听当前应用主题切换事件 connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &Calendarmainwindow::slotTheme); //编辑搜索日程刷新界面 connect(m_scheduleSearchView, &CScheduleSearchView::signalSelectSchedule, this, &Calendarmainwindow::slotSearchSelectSchedule); connect(m_scheduleSearchView, &CScheduleSearchView::signalScheduleHide, this, &Calendarmainwindow::setScheduleHide); connect(m_sidebarView, &SidebarView::signalScheduleHide, this, &Calendarmainwindow::setScheduleHide); connect(m_scheduleSearchView, &CScheduleSearchView::signalSelectCurrentItem, this, &Calendarmainwindow::slotSetSearchFocus); //更新当前时间 connect(m_currentDateUpdateTimer, &QTimer::timeout, this, &Calendarmainwindow::slotCurrentDateUpdate); //切换视图 connect(m_yearwindow, &CYearWindow::signalSwitchView, this, &Calendarmainwindow::slotSwitchView); connect(m_monthWindow, &CMonthWindow::signalSwitchView, this, &Calendarmainwindow::slotSwitchView); connect(m_weekWindow, &CWeekWindow::signalSwitchView, this, &Calendarmainwindow::slotSwitchView); //按钮关联新建日程 connect(m_newScheduleBtn, &DToolButton::clicked, this, &Calendarmainwindow::slotNewSchedule); connect(qApp, &QGuiApplication::applicationStateChanged, this, &Calendarmainwindow::slotapplicationStateChanged); connect(m_titleWidget, &CTitleWidget::signalSidebarStatusChange, this, &Calendarmainwindow::slotSidebarStatusChange); //signalAccountUpdate connect(gAccountManager, &AccountManager::signalSyncNum, this, &Calendarmainwindow::slotShowSyncToast); connect(gAccountManager, &AccountManager::signalAccountUpdate, this, &Calendarmainwindow::slotAccountUpdate); } void Calendarmainwindow::initData() { //根据配置设置侧边栏状态 m_titleWidget->setSidebarStatus(gSetting->getUserSidebarStatus()); } /** * @brief Calendarmainwindow::createview 创建视图 */ void Calendarmainwindow::createview() { m_yearwindow = new CYearWindow(this); m_yearwindow->setObjectName("yearwindow"); m_yearwindow->setAccessibleName("yearwindow"); m_yearwindow->updateData(); m_stackWidget->addWidget(m_yearwindow); m_monthWindow = new CMonthWindow(this); m_monthWindow->setObjectName("monthWindow"); m_monthWindow->setAccessibleName("monthWindow"); m_monthWindow->updateData(); m_stackWidget->addWidget(m_monthWindow); m_weekWindow = new CWeekWindow(this); m_weekWindow->updateData(); m_stackWidget->addWidget(m_weekWindow); m_DayWindow = new CDayWindow; m_DayWindow->updateData(); m_stackWidget->addWidget(m_DayWindow); //如果默认视图不在范围内则设置为月窗口显示 if (m_defaultIndex < 0 || m_defaultIndex >= m_stackWidget->count()) { m_defaultIndex = 1; qCWarning(ClientLogger) << "set default view index beyond,index:" << m_defaultIndex; } m_stackWidget->setCurrentIndex(m_defaultIndex); m_buttonBox->button(m_defaultIndex)->setChecked(true); //如果为日视图则设置非全天时间定位 if (m_defaultIndex == DDECalendar::CalendarDayWindow) { m_DayWindow->setTime(); } } void Calendarmainwindow::resizeView() { //帐户列表窗口(A),视图窗口(B),搜索结果窗口(C) //窗口由大变小先隐藏A,在隐藏B //窗口由小变大先显示B,在显示A //不能出现只显示A和C的情况 //根据界面大小改变趋势设置侧边栏可显示状态 //如果帐户列表窗口为显示状态 if (m_titleWidget->getSidevarStatus()) { //如果显示搜索窗口,若需要显示帐户列表则界面的最小尺寸需要984,否则为826 int minWidth = m_opensearchflag ? 984 : 826 ; if (width() < minWidth) { m_titleWidget->setSidebarCanDisplay(false); m_sidebarView->setVisible(false); } else if (width() > minWidth) { m_titleWidget->setSidebarCanDisplay(true); m_sidebarView->setVisible(true); } } m_transparentFrame->resize(width(), height() - 50); if (width() < CalendarSwitchWidth) { m_titleWidget->setShowState(CTitleWidget::Title_State_Mini); } else { m_titleWidget->setShowState(CTitleWidget::Title_State_Normal); } int sidWidth = 0; if (!m_sidebarView->isHidden()) { sidWidth = m_sidebarView->width(); } if (width() < CalendarViewSwitchWidth + sidWidth) { m_isNormalStateShow = false; m_stackWidget->setVisible(!m_contentBackground->isVisible()); // 如果是隐藏的状态,不需要多减去sidewidth sidWidth = sidWidth == 0 ? 0 : sidWidth + 10; m_scheduleSearchViewMaxWidth = this->width() - sidWidth; } else { m_scheduleSearchViewMaxWidth = qRound(0.2325 * (width()) + 0.5); m_isNormalStateShow = true; m_stackWidget->setVisible(true); m_contentBackground->setVisible(m_opensearchflag); } // 额外减去20 是因为ui走查控件之间的space=10,两个间隔 m_scheduleSearchView->setMaxWidth(m_scheduleSearchViewMaxWidth - 20); setSearchWidth(m_scheduleSearchViewMaxWidth - 20); setScheduleHide(); } /** * @brief Calendarmainwindow::setScheduleHide 隐藏提示框 */ void Calendarmainwindow::setScheduleHide() { m_yearwindow->slotSetScheduleHide(); m_monthWindow->slotScheduleHide(); m_weekWindow->slotScheduleHide(); m_DayWindow->slotScheduleHide(); } void Calendarmainwindow::resizeEvent(QResizeEvent *event) { DMainWindow::resizeEvent(event); resizeView(); //保存窗口大小 CConfigSettings::getInstance()->setOption("base.windowWidth", event->size().width()); CConfigSettings::getInstance()->setOption("base.windowHeight", event->size().height()); } /** * @brief Calendarmainwindow::slotstackWClicked 点击按钮切换视图 * @param bt */ void Calendarmainwindow::slotstackWClicked(QAbstractButton *bt) { setScheduleHide(); int index = m_buttonBox->id(bt); viewWindow(index, true); } void Calendarmainwindow::slotWUpdateSchedule() { if (m_opensearchflag && !m_searchEdit->text().isEmpty()) { m_scheduleSearchView->slotsetSearch(m_searchEdit->text()); } updateHeight(); return; } void Calendarmainwindow::slotSreturnPressed() { if (!m_opensearchflag && !m_searchEdit->text().isEmpty()) { m_opensearchflag = true; } //如果为搜索状态 m_contentBackground->setVisible(m_opensearchflag); m_scheduleSearchView->slotsetSearch(m_searchEdit->text()); updateHeight(); resizeView(); } void Calendarmainwindow::slotStextChanged() { if (!m_searchEdit->text().isEmpty()) { m_yearwindow->setSearchWFlag(true); m_weekWindow->setSearchWFlag(true); m_monthWindow->setSearchWFlag(true); m_DayWindow->setSearchWFlag(true); } else { m_scheduleSearchView->clearSearch(); m_yearwindow->setSearchWFlag(false); m_monthWindow->setSearchWFlag(false); m_weekWindow->setSearchWFlag(false); m_DayWindow->setSearchWFlag(false); m_contentBackground->setVisible(false); m_stackWidget->setVisible(true); m_opensearchflag = false; resizeView(); } updateHeight(); } /** * @brief Calendarmainwindow::slotStextfocusChanged 搜索框有焦点时隐藏提示框并设置搜索日程焦点 * @param onFocus */ void Calendarmainwindow::slotStextfocusChanged(bool onFocus) { if (onFocus) { setScheduleHide(); } } void Calendarmainwindow::slotSearchEdit() { m_searchEdit->lineEdit()->setFocus(); } /** * @brief Calendarmainwindow::slotSearchSelectSchedule 单击搜索日程动画设置 * @param scheduleInfo */ void Calendarmainwindow::slotSearchSelectSchedule(const DSchedule::Ptr &scheduleInfo) { //如果小尺寸显示模式,在显示搜索窗口的时候,左侧视图会被隐藏 //如果点击一个搜索结果则隐藏搜索窗口,展示左侧视图 if (!m_isNormalStateShow) { QVariant variant; CalendarGlobalEnv::getGlobalEnv()->getValueByKey("SearchItemEvent", variant); QString searchItemEvent = variant.toString(); //如果为鼠标点击操作 if (searchItemEvent == "MousePress") { m_stackWidget->setVisible(true); m_contentBackground->setVisible(false); } } //获取当前视图编号 CScheduleBaseWidget *_showWidget = dynamic_cast(m_stackWidget->currentWidget()); if (_showWidget) { //如果日程开始时间年份与选择时间年份不一样则切换年份显示 bool changeYear = _showWidget->getSelectDate().year() != scheduleInfo->dtStart().date().year(); //设置选择时间 if (_showWidget->setSelectDate(scheduleInfo->dtStart().date(), changeYear)) { //更新显示数据 _showWidget->updateData(); //设置年份信息显示 _showWidget->setYearData(); //延迟150毫秒设置选中动画 QTimer::singleShot(150, this, [ = ] { _showWidget->setSelectSearchScheduleInfo(scheduleInfo); }); } //如果当前界面不为年试图则更新年视图数据 if (_showWidget != m_yearwindow) { m_yearwindow->updateData(); } } } /** * @brief Calendarmainwindow::slotViewtransparentFrame 添加视图阴影 * @param isShow */ void Calendarmainwindow::slotViewtransparentFrame(const bool isShow) { if (isShow) { m_transparentFrame->resize(width(), height() - 50); m_transparentFrame->move(0, 50); m_transparentFrame->show(); } else { m_transparentFrame->hide(); } } /** * @brief Calendarmainwindow::slotSetButtonBox 启用buttonbox */ void Calendarmainwindow::slotSetButtonBox() { //如果为键盘操作则切换后设置焦点 if (m_setButtonFocus) { //获取焦点 m_buttonBox->button(m_buttonBox->checkedId())->setFocus(); } m_setButtonFocus = false; } /** * @brief Calendarmainwindow::slotSwitchView 切换视图 * @param viewIndex 切换类型 */ void Calendarmainwindow::slotSwitchView(const int viewIndex) { // 0:跳转上一个视图 1:月视图 2:周视图 3:日视图 switch (viewIndex) { case 0: { if (m_priindex == DDECalendar::CalendarYearWindow) m_priindex = DDECalendar::CalendarDayWindow; viewWindow(m_priindex); break; } case 1: { viewWindow(DDECalendar::CalendarMonthWindow); break; } case 2: { viewWindow(DDECalendar::CalendarWeekWindow); break; } case 3: { viewWindow(DDECalendar::CalendarDayWindow); break; } default: break; } } /** * @brief Calendarmainwindow::slotNewSchedule 全局新建日程 */ void Calendarmainwindow::slotNewSchedule() { //设置日程开始时间 QDateTime _beginTime(m_yearwindow->getSelectDate(), QTime::currentTime()); //新建日程对话框 CScheduleDlg _scheduleDig(1, this, false); //设置开始时间 _scheduleDig.setDate(_beginTime); _scheduleDig.exec(); } void Calendarmainwindow::slotDeleteitem() { if (m_scheduleSearchView->getHasScheduleShow() && m_scheduleSearchView->getScheduleStatus()) { //删除选中的schedule m_scheduleSearchView->deleteSchedule(); } else { //获取当前的 CScheduleBaseWidget *widget = qobject_cast(m_stackWidget->currentWidget()); if (widget) { widget->deleteselectSchedule(); } } } /** * @brief Calendarmainwindow::slotSetMaxSize 根据屏幕分辨率调整窗口最大尺寸 * @param size */ void Calendarmainwindow::slotSetMaxSize() { //获取屏幕大小 QSize deskSize = QApplication::desktop()->size(); //设置最大尺寸为屏幕尺寸 setMaximumSize(deskSize); if (TabletConfig::isTablet()) { setFixedSize(deskSize); } } void Calendarmainwindow::slotSearchFocusSwitch() { //设置搜索日程展示列表焦点 if (m_contentBackground->isVisible() && m_scheduleSearchView->getHasScheduleShow()) { m_scheduleSearchView->setFocus(Qt::TabFocusReason); } } void Calendarmainwindow::slotSidebarStatusChange(bool status) { //先显示再调整窗口大小 m_sidebarView->setVisible(status); if (status) { //如果显示搜索窗口,若需要显示帐户列表则界面的最小尺寸需要984,否则为826 int minWidth = m_opensearchflag ? 984 : 826 ; if (width() < minWidth) { resize(minWidth, height()); } } } void Calendarmainwindow::mouseMoveEvent(QMouseEvent *event) { //如果为平板模式则不可移动 if (TabletConfig::isTablet()) { Q_UNUSED(event); } else { DMainWindow::mouseMoveEvent(event); setScheduleHide(); } } void Calendarmainwindow::changeEvent(QEvent *event) { DMainWindow::changeEvent(event); if (event->type() == QEvent::ActivationChange) { setScheduleHide(); } } void Calendarmainwindow::mousePressEvent(QMouseEvent *event) { setScheduleHide(); if (event->button() & Qt::LeftButton) m_startPos = event->pos(); } bool Calendarmainwindow::event(QEvent *event) { //如果窗口移动,隐藏日程悬浮框 if (event->type() == QEvent::Move) { setScheduleHide(); } //如果为活动窗口则显示视图阴影 if (event->type() == QEvent::WindowActivate) { slotViewtransparentFrame(false); } //如果不为活动窗口则隐藏视图阴影 if (event->type() == QEvent::WindowDeactivate) { slotViewtransparentFrame(true); } return DMainWindow::event(event); } void Calendarmainwindow::slotapplicationStateChanged(Qt::ApplicationState state) { static QDateTime currentDateTime = QDateTime::currentDateTime(); //TODO:目前没有找到窗口显示不是激活状态的原因(会先激活然后为非激活状态)。 //当间隔时间少于10毫秒且状态为非激活时,将窗口设置显示在最顶端并设置激活状态 if (state == Qt::ApplicationInactive) { //获取当前时间 QDateTime currentTime = QDateTime::currentDateTime(); //考虑到会修改系统时间的情况,时间差在0~30毫秒内才会设置 if (currentDateTime.msecsTo(currentTime) < 30 && currentDateTime.msecsTo(currentTime) >= 0) { activateWindow(); raise(); } //断开信号连接 disconnect(qApp, &QGuiApplication::applicationStateChanged, this, &Calendarmainwindow::slotapplicationStateChanged); } } void Calendarmainwindow::slotOpenSettingDialog() { m_dsdSetting = new CSettingDialog(this); //内容定位到顶端 m_dsdSetting->exec(); //使用完后释放 delete m_dsdSetting; m_dsdSetting = nullptr; gCalendarManager->updateData(); } void Calendarmainwindow::slotShowPrivacy() { QString url = ""; QLocale locale; QLocale::Country country = locale.country(); bool isCommunityEdition = DSysInfo::isCommunityEdition(); if (country == QLocale::China) { if (isCommunityEdition) { url = "https://www.deepin.org/zh/agreement/privacy/"; } else { url = "https://www.uniontech.com/agreement/privacy-cn"; } } else { if (isCommunityEdition) { url = "https://www.deepin.org/en/agreement/privacy/"; } else { url = "https://www.uniontech.com/agreement/privacy-en"; } } QDesktopServices::openUrl(url); } void Calendarmainwindow::removeSyncToast() { QWidget *content = this->window()->findChild("_d_message_manager_content", Qt::FindDirectChildrenOnly); if (nullptr == content) return; for (DFloatingMessage *message : content->findChildren(QString(), Qt::FindDirectChildrenOnly)) { content->layout()->removeWidget(message); message->hide(); message->deleteLater(); } } void Calendarmainwindow::slotShowSyncToast(int syncNum) { //-1:正在刷新 0:正常 1:网络异常 2:服务器异常 3:存储已经满 static int preSyncNum = -2; if (preSyncNum != syncNum && syncNum == -1) { preSyncNum = -1; //同步中 removeSyncToast(); DMessageManager::instance()->sendMessage(this->window(), QIcon::fromTheme(":/icons/deepin/builtin/icons/dde_calendar_spinner_32px.svg"), tr("Syncing...")); return; } // if (preSyncNum == -1 && syncNum != -1) { preSyncNum = -2; switch (syncNum) { case 0: { //同步成功 removeSyncToast(); DMessageManager::instance()->sendMessage(this->window(), QIcon::fromTheme(":/icons/deepin/builtin/icons/dde_calendar_success_200px.png"), tr("Sync successful")); break; } case 1: case 2: case 3: { //同步失败 removeSyncToast(); DMessageManager::instance()->sendMessage(this->window(), QIcon::fromTheme(":/icons/deepin/builtin/icons/dde_calendar_fail_200px.png"), tr("Sync failed, please try later")); break; } default: break; } } } void Calendarmainwindow::slotAccountUpdate() { AccountItem::Ptr uidAccount = gUosAccountItem; if (!uidAccount.isNull()) { connect(uidAccount.get(), &AccountItem::signalSyncStateChange, this, &Calendarmainwindow::slotShowSyncToast); } } dde-calendar-5.14.13/calendar-client/src/widget/calendarmainwindow.h000066400000000000000000000102751473346337000253250ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CALENDARMAINWINDOW_H #define CALENDARMAINWINDOW_H #include "dschedule.h" #include "jobtypelistview.h" #include "settingdialog.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class CYearWindow; class CMonthWindow; class CWeekWindow; class CDayWindow; class SidebarView; class CScheduleSearchView; class AnimationStackedWidget; class CScheduleDataManage; class CTitleWidget; class CMyScheduleView; class Calendarmainwindow : public DMainWindow { Q_OBJECT public: explicit Calendarmainwindow(int index, QWidget *w = nullptr); ~Calendarmainwindow() override; void viewWindow(int type, const bool showAnimation = false); void updateHeight(); void setSearchWidth(int w); public slots: void slotTheme(int type); void slotOpenSchedule(QString job); void slotViewShortcut(); //更新当前时间 void slotCurrentDateUpdate(); void slotSetSearchFocus(); private: void initUI(); void initConnection(); void initData(); //创建视图 void createview(); //重置界面大小 void resizeView(); void removeSyncToast(); protected: void resizeEvent(QResizeEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void changeEvent(QEvent *event) override; void mousePressEvent(QMouseEvent *event) override; bool event(QEvent *event) override; private slots: //获取程序状态 void slotapplicationStateChanged(Qt::ApplicationState state); //隐藏提示框 void setScheduleHide(); //点击按钮切换视图 void slotstackWClicked(QAbstractButton *bt); void slotWUpdateSchedule(); void slotSreturnPressed(); void slotStextChanged(); //搜索框有焦点时隐藏提示框 void slotStextfocusChanged(bool onFocus); void slotSearchEdit(); //单击搜索日程动画设置 void slotSearchSelectSchedule(const DSchedule::Ptr &scheduleInfo); //添加视图阴影 void slotViewtransparentFrame(const bool isShow); //启用buttonbox void slotSetButtonBox(); //切换视图 void slotSwitchView(const int viewIndex); //新建日程 void slotNewSchedule(); void slotOpenSettingDialog(); //触发隐藏政策 void slotShowPrivacy(); //快捷键删除选中日程 void slotDeleteitem(); //设置最大大小 void slotSetMaxSize(); void slotSearchFocusSwitch(); //帐户侧边栏状态发生改变事件 void slotSidebarStatusChange(bool); //显示同步提示 void slotShowSyncToast(int syncNum); void slotAccountUpdate(); private: DLabel *m_icon = nullptr; AnimationStackedWidget *m_stackWidget = nullptr; DButtonBox *m_buttonBox = nullptr; DSearchEdit *m_searchEdit = nullptr; CYearWindow *m_yearwindow = nullptr; CMonthWindow *m_monthWindow = nullptr; CWeekWindow *m_weekWindow = nullptr; CDayWindow *m_DayWindow = nullptr; CTitleWidget *m_titleWidget = nullptr; SidebarView *m_sidebarView = nullptr; bool m_searchflag = false; CScheduleSearchView *m_scheduleSearchView = nullptr; DFrame *m_contentBackground = nullptr; int m_priindex = 3; //默认打开日视图双击 DFrame *m_transparentFrame = nullptr; bool m_opensearchflag = false; int m_scheduleSearchViewMaxWidth; QPropertyAnimation *m_animation = nullptr; QTimer *m_currentDateUpdateTimer = nullptr; DIconButton *m_newScheduleBtn {nullptr}; //全局的新建日程按钮 CSettingDialog *m_dsdSetting {nullptr}; JobTypeListView *m_jobTypeListView {nullptr}; //日历打开默认显示视图 int m_defaultIndex; bool m_setButtonFocus {false}; bool m_isNormalStateShow {true}; //是否为正常状态显示 QPoint m_startPos; CMyScheduleView *m_dlg = Q_NULLPTR; }; #endif // CALENDARMAINWINDOW_H dde-calendar-5.14.13/calendar-client/src/widget/cschedulebasewidget.cpp000066400000000000000000000124251473346337000260070ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cschedulebasewidget.h" #include "monthbrefwidget.h" CalendarManager *CScheduleBaseWidget::m_calendarManager = nullptr; CScheduleBaseWidget::CScheduleBaseWidget(QWidget *parent) : QWidget(parent) { m_dialogIconButton = new CDialogIconButton(this); m_dialogIconButton->setFixedSize(QSize(16, 16)); initConnect(); if (m_calendarManager == nullptr) { m_calendarManager = CalendarManager::getInstance(); //获取一年的日程信息 updateDBusData(); } m_calendarManager->addShowWidget(this); } CScheduleBaseWidget::~CScheduleBaseWidget() { m_calendarManager->removeShowWidget(this); if (m_calendarManager->getShowWidgetSize() == 0) { CalendarManager::releaseInstance(); m_calendarManager = nullptr; } } void CScheduleBaseWidget::initConnect() { connect(ScheduleManager::getInstace(), &ScheduleManager::signalScheduleUpdate, this, &CScheduleBaseWidget::slotScheduleUpdate); connect(ScheduleManager::getInstace(), &ScheduleManager::signalSearchScheduleUpdate, this, &CScheduleBaseWidget::slotSearchedScheduleUpdate); } /** * @brief CScheduleBaseWidget::setSelectDate 设置选择时间 * @param selectDate */ bool CScheduleBaseWidget::setSelectDate(const QDate &selectDate, const bool isSwitchYear, const QWidget *widget) { bool _result = false; //选择时间必须大于等于1900年小于2100年 if (selectDate.year() >= 1900 && selectDate.year() <=2100) { m_calendarManager->setSelectDate(selectDate, isSwitchYear); _result = true; //更新其它视图界面显示 for (int i = 0; i < m_calendarManager->getShowWidgetSize(); ++i) { //如果为当前视图则不更新 if (m_calendarManager->getShowWidget(i) == nullptr || m_calendarManager->getShowWidget(i) == widget) continue; m_calendarManager->getShowWidget(i)->setYearData(); m_calendarManager->getShowWidget(i)->updateShowDate(); } } return _result; } bool CScheduleBaseWidget::setSelectDate(const QDate &selectDate, const QWidget *widget) { return setSelectDate(selectDate, false, widget); } /** * @brief CScheduleBaseWidget::getSelectDate 获取选择时间 * @return */ QDate CScheduleBaseWidget::getSelectDate() { return m_calendarManager->getSelectDate(); } /** * @brief CScheduleBaseWidget::setCurrentDateTime 设置当前时间 * @param currentDate */ void CScheduleBaseWidget::setCurrentDateTime(const QDateTime ¤tDate) { m_calendarManager->setCurrentDateTime(currentDate); } /** * @brief CScheduleBaseWidget::getCurrendDateTime 获取当前时间 * @return */ QDateTime CScheduleBaseWidget::getCurrendDateTime() const { return m_calendarManager->getCurrentDate(); } /** * @brief CScheduleBaseWidget::getShowLunar 获取是否显示农历信息 * @return */ bool CScheduleBaseWidget::getShowLunar() { return m_calendarManager->getShowLunar(); } /** * @brief CScheduleBaseWidget::updateData 更新数据显示 */ void CScheduleBaseWidget::updateData() { updateShowDate(); updateShowSchedule(); //如果为中午环境则更新农历信息 if ( getShowLunar() ) { updateShowLunar(); } updateSearchScheduleInfo(); } /** * @brief CScheduleBaseWidget::updateDBusData 更新一年的dbus数据 */ void CScheduleBaseWidget::updateDBusData() { // ShowDateRange _showDateRange = m_calendarManager->getShowDateRange(); // //如果缓存中不包含开始或结束时间则更新dbus数据 // if (!m_calendarManager->getScheduleTask()->hasScheduleInfo(_showDateRange.startDate, _showDateRange.stopDate)) { // //获取日程开始和结束时间,考虑切换日视图会显示显示时间之外的时间所以前后多获取2个月日程数据。 // QDate _startDate = _showDateRange.startDate.addDays(-42); // QDate _stopDate = _showDateRange.stopDate.addDays(42); //getShowLunar() // if (_startDate.isValid() && _stopDate.isValid()) { // //更新日程信息 //// _task->updateInfo(_startDate, _stopDate, getShowLunar()); // } else { // qCWarning(ClientLogger) << "startDate or stopDate Err!"; // } // } } /** * @brief CScheduleBaseWidget::updateSearchScheduleInfo 更新搜索日程 * 由子类完成 */ void CScheduleBaseWidget::updateSearchScheduleInfo() { } void CScheduleBaseWidget::deleteselectSchedule() { } /** * @brief CScheduleBaseWidget::getLunarInfo 获取选择时间的农历信息 * @return */ CaHuangLiDayInfo CScheduleBaseWidget::getLunarInfo() { CaHuangLiDayInfo huangLiInfo = gLunarManager->getHuangLiDay(getSelectDate()); m_lunarYear = QString("-%0%1年-").arg(huangLiInfo.mGanZhiYear).arg(huangLiInfo.mZodiac); m_lunarDay = QString("-农历%0%1-").arg(huangLiInfo.mLunarMonthName).arg(huangLiInfo.mLunarDayName); return huangLiInfo; } void CScheduleBaseWidget::slotScheduleUpdate() { updateShowSchedule(); //刷新日程的同时也要刷新被搜索的日程,保证有搜索日程时显示正常 updateSearchScheduleInfo(); } void CScheduleBaseWidget::slotSearchedScheduleUpdate() { updateSearchScheduleInfo(); } dde-calendar-5.14.13/calendar-client/src/widget/cschedulebasewidget.h000066400000000000000000000043521473346337000254540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSCHEDULEBASEWIDGET_H #define CSCHEDULEBASEWIDGET_H #include "calendarmanage.h" #include "cdialogiconbutton.h" #include "schedulemanager.h" #include "lunarmanager.h" #include class CScheduleBaseWidget : public QWidget { Q_OBJECT public: explicit CScheduleBaseWidget(QWidget *parent = nullptr); ~CScheduleBaseWidget(); //设置选择时间 static bool setSelectDate(const QDate &selectDate, const bool isSwitchYear = false, const QWidget *widget = nullptr); bool setSelectDate(const QDate &selectDate, const QWidget *widget); //获取选择时间 static QDate getSelectDate(); //设置当前时间 virtual void setCurrentDateTime(const QDateTime ¤tDate); //获取当前时间 QDateTime getCurrendDateTime() const; //获取是否显示农历信息 static bool getShowLunar(); //更新所有数据,显示时间和日程数据 void updateData(); //更新dbus数据 static void updateDBusData(); //更新界面搜索日程显示 virtual void updateSearchScheduleInfo(); //设置年显示 virtual void setYearData() = 0; //更新显示时间 virtual void updateShowDate(const bool isUpdateBar = true) = 0; //更新显示日程数据 virtual void updateShowSchedule() = 0; //更新农历信息显示 virtual void updateShowLunar() = 0; //设置选中搜索日程 virtual void setSelectSearchScheduleInfo(const DSchedule::Ptr &info) = 0; //删除选中日程 virtual void deleteselectSchedule(); protected: //获取选择时间的农历信息 CaHuangLiDayInfo getLunarInfo(); signals: //切换视图信号 0:跳转上一个视图 1:月视图 2:周视图 3:日视图 void signalSwitchView(const int viewIndex = 0); public slots: void slotScheduleUpdate(); void slotSearchedScheduleUpdate(); private: void initConnect(); protected: static CalendarManager *m_calendarManager; QString m_lunarYear; QString m_lunarDay; CDialogIconButton *m_dialogIconButton = nullptr; //时间跳转控件 }; #endif // CSCHEDULEBASEWIDGET_H dde-calendar-5.14.13/calendar-client/src/widget/dayWidget/000077500000000000000000000000001473346337000232225ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/widget/dayWidget/dayhuangliview.cpp000066400000000000000000000053621473346337000267540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dayhuangliview.h" #include "scheduledlg.h" #include #include #include #include #include #include #include #include CDayHuangLiLabel::CDayHuangLiLabel(QWidget *parent) : DLabel(parent) { setMargin(0); } void CDayHuangLiLabel::setbackgroundColor(QColor backgroundColor) { m_backgroundColor = backgroundColor; } void CDayHuangLiLabel::setTextInfo(QColor tcolor, QFont font) { m_textcolor = tcolor; m_font = font; } void CDayHuangLiLabel::setHuangLiText(QStringList vhuangli, int type) { m_vHuangli = vhuangli; m_type = type; if (!vhuangli.isEmpty()) { QString str = vhuangli.at(0); for (int i = 1; i < vhuangli.count(); i++) { str += "." + vhuangli.at(i); } setToolTip(str); } else { setToolTip(QString()); } update(); } void CDayHuangLiLabel::paintEvent(QPaintEvent *e) { Q_UNUSED(e); int labelwidth = width(); int labelheight = height(); QPainter painter(this); QRect fillRect = QRect(0, 0, labelwidth, labelheight); painter.setRenderHints(QPainter::HighQualityAntialiasing); painter.setBrush(QBrush(m_backgroundColor)); painter.setPen(Qt::NoPen); painter.drawRoundedRect(fillRect, 12, 12); QPixmap pixmap; if (m_type == 0) pixmap = DIcon::loadNxPixmap(":/icons/deepin/builtin/icons/dde_calendar_yi_32px.svg"); else { pixmap = DIcon::loadNxPixmap(":/icons/deepin/builtin/icons/dde_calendar_ji_32px.svg"); } pixmap.setDevicePixelRatio(devicePixelRatioF()); painter.save(); painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::HighQualityAntialiasing); painter.setRenderHint(QPainter::SmoothPixmapTransform); painter.drawPixmap(QRect(m_leftMagin, m_topMagin + 1, 22, 22), pixmap); painter.restore(); painter.setFont(m_font); painter.setPen(m_textcolor); int bw = m_leftMagin + 50; int bh = m_topMagin; int ss = 14; for (int i = 0; i < m_vHuangli.count(); i++) { int currentsw = m_vHuangli.at(i).count() * ss; if (bw + currentsw + 15 >= labelwidth) { painter.drawText(QRect(bw, bh, labelwidth - bw, 21), Qt::AlignLeft, "..."); break; } else { painter.drawText(QRect(bw, bh, currentsw, 21), Qt::AlignLeft, m_vHuangli.at(i)); bw += currentsw + 10; } } } void CDayHuangLiLabel::resizeEvent(QResizeEvent *event) { m_leftMagin = static_cast(0.0424 * width() + 0.5); m_topMagin = (height() - 20) / 2; DLabel::resizeEvent(event); } dde-calendar-5.14.13/calendar-client/src/widget/dayWidget/dayhuangliview.h000066400000000000000000000014761473346337000264230ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DAYHUANGLILABEL_H #define DAYHUANGLILABEL_H #include DWIDGET_USE_NAMESPACE class CDayHuangLiLabel : public DLabel { Q_OBJECT public: explicit CDayHuangLiLabel(QWidget *parent = nullptr); void setbackgroundColor(QColor backgroundColor); void setTextInfo(QColor tcolor, QFont font); void setHuangLiText(QStringList vhuangli, int type = 0); protected: void paintEvent(QPaintEvent *e) override; void resizeEvent(QResizeEvent *event) override; private: QStringList m_vHuangli; QColor m_backgroundColor; QColor m_textcolor; QFont m_font; int m_type = 0; int m_leftMagin = 14; int m_topMagin = 18; }; #endif // DAYHUANGLILABEL_H dde-calendar-5.14.13/calendar-client/src/widget/dayWidget/daymonthview.cpp000066400000000000000000000562561473346337000264620ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "todaybutton.h" #include "scheduledatamanage.h" #include "daymonthview.h" #include "constants.h" #include "dayhuangliview.h" #include "configsettings.h" #include "calendarglobalenv.h" #include "scheduledlg.h" #include #include #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CDayMonthView::CDayMonthView(QWidget *parent) : CustomFrame(parent) { m_weeklist.append(tr("Monday")); m_weeklist.append(tr("Tuesday")); m_weeklist.append(tr("Wednesday")); m_weeklist.append(tr("Thursday")); m_weeklist.append(tr("Friday")); m_weeklist.append(tr("Saturday")); m_weeklist.append(tr("Sunday")); initUI(); initConnection(); } CDayMonthView::~CDayMonthView() { } void CDayMonthView::setShowDate(const QVector &showDate, const QDate &selectDate, const QDate ¤tDate) { m_selectDate = selectDate; m_currentDate = currentDate; m_dayMonthWidget->setShowDate(showDate, selectDate, currentDate); updateDateShow(); update(); } void CDayMonthView::setLunarVisible(bool visible) { m_huanglistate = visible; m_yiLabel->setVisible(visible); m_jiLabel->setVisible(visible); m_currentLuna->setVisible(visible); m_splitline->setVisible(visible); update(); } void CDayMonthView::setTheMe(int type) { QColor todayColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); m_dayMonthWidget->setTheMe(type); if (type == 0 || type == 1) { DPalette aniPa = this->palette(); QColor tbColor = "#FFFFFF"; aniPa.setColor(DPalette::Background, tbColor); setPalette(aniPa); setBackgroundRole(DPalette::Background); setBColor(tbColor); QColor todayhover = "#000000"; todayhover.setAlphaF(0.1); QColor todaypress = "#000000"; todaypress.setAlphaF(0.2); DPalette prevPalette = m_prevButton->palette(); prevPalette.setColor(DPalette::Dark, QColor("#E6E6E6")); prevPalette.setColor(DPalette::Light, QColor("#E3E3E3")); DPalette nextPa = m_nextButton->palette(); nextPa.setColor(DPalette::Dark, QColor("#E6E6E6")); nextPa.setColor(DPalette::Light, QColor("#E3E3E3")); m_currentMouth->setTextColor(QColor("#3B3B3B")); m_currentDay->setTextColor(todayColor); m_currentWeek->setTextColor(QColor("#414D68")); m_currentLuna->setTextColor(QColor("#414D68")); m_currentYear->setTextColor(QColor("#414D68")); QFont hLabelF; hLabelF.setPixelSize(DDECalendar::FontSizeFourteen); QColor yiColor = QColor("#75C18E"); yiColor.setAlphaF(0.1); m_yiLabel->setbackgroundColor(yiColor); m_yiLabel->setTextInfo(QColor("#7B7B7B"), hLabelF); QColor jiColor = QColor("#C17575"); jiColor.setAlphaF(0.1); m_jiLabel->setbackgroundColor(jiColor); m_jiLabel->setTextInfo(QColor("#7B7B7B"), hLabelF); m_topBorderColor = Qt::red; m_backgroundCircleColor = "#0081FF"; m_weekendsTextColor = Qt::black; m_festivalTextColor = Qt::black; } else if (type == 2) { DPalette aniPa = this->palette(); QColor tbColor = "#282828"; aniPa.setColor(DPalette::Background, tbColor); setPalette(aniPa); setBackgroundRole(DPalette::Background); setBColor(tbColor); DPalette prevPalette = m_prevButton->palette(); prevPalette.setColor(DPalette::Dark, QColor("#484848")); prevPalette.setColor(DPalette::Light, QColor("#414141")); DPalette nextPa = m_nextButton->palette(); nextPa.setColor(DPalette::Dark, QColor("#484848")); nextPa.setColor(DPalette::Light, QColor("#414141")); m_currentMouth->setTextColor(QColor("#C0C6D4")); m_currentDay->setTextColor(todayColor); m_currentWeek->setTextColor(QColor("#C0C6D4")); m_currentLuna->setTextColor(QColor("#C0C6D4")); m_currentYear->setTextColor(QColor("#C0C6D4")); QFont hLabelF; hLabelF.setPixelSize(DDECalendar::FontSizeFourteen); QColor yiColor = QColor("#2F8C4D"); yiColor.setAlphaF(0.2); m_yiLabel->setbackgroundColor(yiColor); m_yiLabel->setTextInfo(QColor("#C0C6D4"), hLabelF); QColor jiColor = QColor("#A43B3B"); jiColor.setAlphaF(0.2); m_jiLabel->setbackgroundColor(jiColor); m_jiLabel->setTextInfo(QColor("#C0C6D4"), hLabelF); m_topBorderColor = Qt::red; m_backgroundCircleColor = "#0059D2"; m_weekendsTextColor = Qt::black; m_festivalTextColor = Qt::black; } update(); } void CDayMonthView::setSearchFlag(bool flag) { m_searchflag = flag; update(); } /** * @brief CDayMonthView::setHuangLiInfo 设置黄历信息 * @param huangLiInfo */ void CDayMonthView::setHuangLiInfo(const CaHuangLiDayInfo &huangLiInfo) { m_huangLiInfo = huangLiInfo; updateDateLunarDay(); } void CDayMonthView::setHasScheduleFlag(const QVector &hasScheduleFlag) { m_dayMonthWidget->setHasScheduleFlag(hasScheduleFlag); } void CDayMonthView::initUI() { m_today = new CTodayButton; m_today->setText(QCoreApplication::translate("today", "Today", "Today")); m_today->setFixedSize(80, DDEDayCalendar::D_MLabelHeight); QFont todayfont; todayfont.setPixelSize(DDECalendar::FontSizeFourteen); m_today->setFont(todayfont); m_prevButton = new DIconButton(DStyle::SP_ArrowLeft, this); m_prevButton->setFixedSize(36, 36); m_nextButton = new DIconButton(DStyle::SP_ArrowRight, this); m_nextButton->setFixedSize(36, 36); QHBoxLayout *titleLayout = new QHBoxLayout; titleLayout->setMargin(0); titleLayout->setSpacing(0); titleLayout->setContentsMargins(0, 0, 0, 3); //add separator line m_currentMouth = new CustomFrame(this); m_currentMouth->setFixedSize(74, DDEDayCalendar::D_MLabelHeight); QFont mlabelF; mlabelF.setWeight(QFont::Medium); mlabelF.setPixelSize(DDECalendar::FontSizeTwentyfour); m_currentMouth->setTextFont(mlabelF); m_currentMouth->setTextAlign(Qt::AlignCenter); titleLayout->addWidget(m_prevButton); titleLayout->addWidget(m_currentMouth); titleLayout->addWidget(m_nextButton); titleLayout->addStretch(); titleLayout->addWidget(m_today, 0, Qt::AlignRight); //上半部分 m_upLayout = new QVBoxLayout; m_upLayout->setMargin(0); m_upLayout->setSpacing(0); m_upLayout->setContentsMargins(22, 9, 0, 7); m_upLayout->addLayout(titleLayout); m_weekWidget = new CWeekWidget(); m_weekWidget->setMaximumHeight(40); m_dayMonthWidget = new CDayMonthWidget(); m_upLayout->addWidget(m_weekWidget, 1); m_upLayout->addWidget(m_dayMonthWidget, 6); //中间部分 QVBoxLayout *midLayout = new QVBoxLayout; midLayout->setMargin(0); midLayout->setSpacing(0); midLayout->setContentsMargins(0, 0, 0, 20); m_currentDay = new CustomFrame(this); m_currentDay->setFixedHeight(DDEDayCalendar::DDLabelHeight); m_currentDay->setMinimumWidth(width()); m_currentDay->setTextAlign(Qt::AlignCenter); QFont dayLabelF; dayLabelF.setWeight(QFont::Medium); dayLabelF.setPixelSize(DDECalendar::FontSizeOneHundred); m_currentDay->setTextFont(dayLabelF); midLayout->addWidget(m_currentDay); m_currentWeek = new CustomFrame(this); m_currentWeek->setFixedHeight(DDEDayCalendar::DWLabelHeight); m_currentWeek->setTextAlign(Qt::AlignCenter); QFont wLabelF; wLabelF.setPixelSize(DDECalendar::FontSizeSixteen); m_currentWeek->setTextFont(wLabelF); midLayout->addWidget(m_currentWeek); midLayout->addSpacing(2); m_currentYear = new CustomFrame(this); m_currentYear->setFixedHeight(DDEDayCalendar::DWLabelHeight); m_currentYear->setTextAlign(Qt::AlignCenter); m_currentYear->setTextFont(wLabelF); midLayout->addWidget(m_currentYear); midLayout->addSpacing(2); m_currentLuna = new CustomFrame(this); m_currentLuna->setFixedHeight(DDEDayCalendar::DHuangLiInfoLabelHeight); m_currentLuna->setTextAlign(Qt::AlignCenter); QFont hLabelF; hLabelF.setPixelSize(DDECalendar::FontSizeTwelve); m_currentLuna->setTextFont(hLabelF); midLayout->addWidget(m_currentLuna); m_yiDownLayout = new QVBoxLayout; m_yiDownLayout->setSpacing(0); m_yiDownLayout->setContentsMargins(10, 5, 10, 0); hLabelF.setPixelSize(DDECalendar::FontSizeFourteen); m_yiLabel = new CDayHuangLiLabel(this); m_yiLabel->setbackgroundColor(QColor("#75C18E")); m_yiLabel->setTextInfo(QColor("#7B7B7B "), hLabelF); m_yiLabel->setMinimumHeight(DDEDayCalendar::DHuangLiLabelHeight); m_yiLabel->setMaximumHeight(DDEDayCalendar::DHuangLiLabelMaxHeight); m_yiLabel->setHuangLiText(QStringList()); m_yiDownLayout->addWidget(m_yiLabel, 1); m_jiDownLayout = new QVBoxLayout; m_jiDownLayout->setSpacing(0); m_jiDownLayout->setContentsMargins(10, 10, 10, 10); m_jiLabel = new CDayHuangLiLabel(this); m_jiLabel->setbackgroundColor(QColor("#C17575")); m_jiLabel->setTextInfo(QColor("#7B7B7B "), hLabelF); m_jiLabel->setMinimumHeight(DDEDayCalendar::DHuangLiLabelHeight); m_jiLabel->setMaximumHeight(DDEDayCalendar::DHuangLiLabelMaxHeight); m_jiLabel->setHuangLiText(QStringList(), 1); m_jiDownLayout->addWidget(m_jiLabel, 1); m_hhLayout = new QVBoxLayout; m_hhLayout->setMargin(0); m_hhLayout->setSpacing(0); m_hhLayout->addLayout(m_upLayout, 6); m_hhLayout->addLayout(midLayout); m_splitline = new DHorizontalLine; m_splitline->setMinimumHeight(2); QHBoxLayout *hlineLayout = new QHBoxLayout; hlineLayout->setSpacing(0); hlineLayout->setContentsMargins(50, 0, 50, 5); hlineLayout->addWidget(m_splitline); m_hhLayout->addLayout(hlineLayout); m_hhLayout->addLayout(m_yiDownLayout); m_hhLayout->addLayout(m_jiDownLayout); m_hhLayout->addStretch(); setLayout(m_hhLayout); } void CDayMonthView::initConnection() { connect(m_prevButton, &DIconButton::clicked, this, &CDayMonthView::slotprev); connect(m_today, &CTodayButton::clicked, this, &CDayMonthView::slottoday); connect(m_nextButton, &DIconButton::clicked, this, &CDayMonthView::slotnext); connect(m_dayMonthWidget, &CDayMonthWidget::signalChangeSelectDate, this, &CDayMonthView::signalChangeSelectDate); } /** * @brief CDayMonthView::updateDateShow 更新月/天界面显示 */ void CDayMonthView::updateDateShow() { QLocale locale; m_currentMouth->setTextStr(locale.monthName(m_selectDate.month(), QLocale::ShortFormat)); m_currentDay->setTextStr(QString::number(m_selectDate.day())); if (m_selectDate.dayOfWeek() > 0) m_currentWeek->setTextStr(m_weeklist.at(m_selectDate.dayOfWeek() - 1)); m_currentYear->setTextStr(m_selectDate.toString("yyyy/M")); if (m_selectDate == m_currentDate) { m_today->setText(QCoreApplication::translate("today", "Today", "Today")); } else { m_today->setText(QCoreApplication::translate("Return Today", "Today", "Return Today")); } } /** * @brief CDayMonthView::updateDateLunarDay 更新显示黄历信息 */ void CDayMonthView::updateDateLunarDay() { if (!m_huanglistate) return; m_currentLuna->setTextStr(m_huangLiInfo.mGanZhiYear + "年 " + "【" + m_huangLiInfo.mZodiac + "年】" + m_huangLiInfo.mGanZhiMonth + "月 " + m_huangLiInfo.mGanZhiDay + "日 "); QStringList yiList = m_huangLiInfo.mSuit.split(".", Qt::SkipEmptyParts); QStringList jiList = m_huangLiInfo.mAvoid.split(".", Qt::SkipEmptyParts); m_yiLabel->setHuangLiText(yiList); m_jiLabel->setHuangLiText(jiList, 1); } void CDayMonthView::changeSelectDate(const QDate &date) { emit signalChangeSelectDate(date); } void CDayMonthView::wheelEvent(QWheelEvent *event) { //如果是拖拽则退出 bool isDragging = false; emit signalIsDragging(isDragging); if (isDragging) return; if (event->angleDelta().y() < 0) { //切换前一天 changeSelectDate(m_selectDate.addDays(1)); } else { //切换后一天 changeSelectDate(m_selectDate.addDays(-1)); } } void CDayMonthView::paintEvent(QPaintEvent *e) { Q_UNUSED(e); int labelwidth = width(); int labelheight = height(); DPalette aniPa = this->palette(); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 反锯齿; painter.save(); painter.setBrush(aniPa.window()); painter.setPen(Qt::NoPen); QPainterPath painterPath; painterPath.moveTo(0, 0); painterPath.lineTo(0, labelheight); // 如果有搜索界面则为右边为直角否则为圆角 if (!m_searchflag) { painterPath.lineTo(labelwidth - m_radius, labelheight); painterPath.arcTo(QRect(labelwidth - m_radius * 2, labelheight - m_radius * 2, m_radius * 2, m_radius * 2), 270, 90); painterPath.lineTo(labelwidth, m_radius); painterPath.arcTo(QRect(labelwidth - m_radius * 2, 0, m_radius * 2, m_radius * 2), 0, 90); } else { painterPath.lineTo(labelwidth, labelheight); painterPath.lineTo(labelwidth, 0); } painterPath.lineTo(0, 0); painterPath.closeSubpath(); painter.drawPath(painterPath); painter.restore(); } void CDayMonthView::slotprev() { changeSelectDate(m_selectDate.addMonths(-1)); } void CDayMonthView::slotnext() { changeSelectDate(m_selectDate.addMonths(1)); } void CDayMonthView::slottoday() { changeSelectDate(m_currentDate); } CDayMonthWidget::CDayMonthWidget(QWidget *parent) : QWidget(parent) , m_isFocus(false) { m_gridLayout = new QGridLayout; m_gridLayout->setMargin(0); m_gridLayout->setSpacing(0); m_dayNumFont.setPixelSize(DDECalendar::FontSizeTwelve); for (int r = 0; r < 6; ++r) { for (int c = 0; c < 7; ++c) { QWidget *cell = new QWidget; cell->installEventFilter(this); m_gridLayout->addWidget(cell, r, c, 1, 1); m_cellList.append(cell); } } this->setLayout(m_gridLayout); setFocusPolicy(Qt::StrongFocus); //设置最大高度 setMaximumHeight(250); } CDayMonthWidget::~CDayMonthWidget() { } void CDayMonthWidget::setTheMe(int type) { m_currentDayTextColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); if (type == 0 || type == 1) { m_defaultTextColor = Qt::black; m_selectedTextColor = Qt::white; m_notCurrentTextColor = "#b2b2b2"; m_ceventColor = QColor(255, 93, 0); } else if (type == 2) { m_defaultTextColor = "#C0C6D4"; m_selectedTextColor = "#B8D3FF"; m_notCurrentTextColor = "#C0C6D4"; m_notCurrentTextColor.setAlphaF(0.5); m_ceventColor = QColor(204, 77, 3); } update(); } void CDayMonthWidget::setShowDate(const QVector &showDate, const QDate &selectDate, const QDate ¤tDate) { m_showDays = showDate; m_selectDate = selectDate; m_currentDate = currentDate; //当前选择index m_selectedCell = m_showDays.indexOf(m_selectDate); update(); } void CDayMonthWidget::setHasScheduleFlag(const QVector &hasScheduleFlag) { m_vlineflag = hasScheduleFlag; update(); } const QString CDayMonthWidget::getCellDayNum(int pos) { return QString::number(m_showDays[pos].day()); } const QDate CDayMonthWidget::getCellDate(int pos) { return m_showDays[pos]; } void CDayMonthWidget::paintCell(QWidget *cell) { const QRect rect = cell->rect(); const int pos = m_cellList.indexOf(cell); const bool isSelectedCell = pos == m_selectedCell; const bool isCurrentDay = getCellDate(pos) == m_currentDate; QPainter painter(cell); painter.setRenderHint(QPainter::Antialiasing); // draw selected cell background circle if (isSelectedCell) { const qreal r = rect.width() > rect.height() ? rect.height() * 0.9 : rect.width() * 0.9; const qreal x = rect.x() + (rect.width() - r) / 2; const qreal y = rect.y() + (rect.height() - r) / 2; QRectF fillRect = QRectF(x, y, r, r).marginsRemoved(QMarginsF(1.5, 2.5, 1.5, 1.5)); painter.save(); painter.setBrush(QBrush(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor())); painter.setPen(Qt::NoPen); painter.drawEllipse(fillRect); painter.restore(); if (m_isFocus) { //绘制焦点获取效果 QPen pen; pen.setWidth(2); pen.setColor(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor()); painter.setPen(pen); //在原有的选中效果外面再绘制一圈 QRectF focusRect(fillRect.x() - 2, fillRect.y() - 2, fillRect.width() + 4, fillRect.height() + 4); painter.setBrush(Qt::NoBrush); painter.drawEllipse(focusRect); } } painter.setPen(Qt::SolidLine); const QString dayNum = getCellDayNum(pos); // draw text of day if (isSelectedCell) { painter.setPen(m_selectedTextColor); } else if (isCurrentDay) { painter.setPen(m_currentDayTextColor); } else { if (m_selectDate.month() == getCellDate(pos).month()) painter.setPen(m_defaultTextColor); else painter.setPen(m_notCurrentTextColor); } QRect test; painter.setFont(m_dayNumFont); painter.drawText(rect, Qt::AlignCenter, dayNum, &test); if (m_vlineflag.count() == DDEDayCalendar::PainterCellNum) { if (m_vlineflag[pos]) { if (m_selectDate.month() == getCellDate(pos).month()) { painter.save(); QPen pen; pen.setWidth(2); pen.setColor(m_ceventColor); painter.setPen(pen); painter.setBrush(QBrush(m_ceventColor)); painter.setPen(Qt::NoPen); int r = int(cell->width() * 0.1); if (r < 4) { r = 4; } else if (r > 7) { r = 7; } painter.drawEllipse(cell->width() - r - 6, 4, r, r); painter.restore(); } } } } bool CDayMonthWidget::eventFilter(QObject *o, QEvent *e) { if (m_showDays.size() != 42) return false; QWidget *cell = qobject_cast(o); if (cell && m_cellList.contains(cell)) { const int pos = m_cellList.indexOf(cell); QDate date = m_showDays[pos]; //如果需要显示时间小于1900年则退出 if (date.year() < DDECalendar::QueryEarliestYear) return false; if (e->type() == QEvent::Paint) { paintCell(cell); } else if (e->type() == QEvent::MouseButtonPress) { m_dayMouseState = 1; } else if (e->type() == QEvent::MouseMove) { if (m_dayMouseState == 1) { m_dayMouseState = 2; } if (2 == m_dayMouseState) { QMouseEvent *mouseEvent = dynamic_cast(e); //如果m_dayCreateState为0需要判断是否离开了选择区域,否则不需要判断 if (m_dayCreateState == 0 && !cell->rect().contains(mouseEvent->pos())) { //如果离开选择日期区域则修改鼠标显示 setCursor(Qt::ClosedHandCursor); m_dayCreateState = 1; } if (m_dayCreateState != 0) { //根据是否在日历界面内设置鼠标形状和创建状态 QPoint globalPoint = QCursor::pos(); QWidget *widget = QApplication::activeWindow(); // if (widget != nullptr) { QRect rect = widget->geometry(); if (rect.contains(globalPoint)) { setCursor(Qt::ClosedHandCursor); m_dayCreateState = 1; } else { setCursor(Qt::ForbiddenCursor); m_dayCreateState = 2; } } } } } else if (e->type() == QEvent::MouseButtonRelease) { QMouseEvent *mouseEvent = dynamic_cast(e); // if (m_dayCreateState == 1) { //新建日程 const int pos = m_cellList.indexOf(cell); QDate date = m_showDays.at(pos); //设置日程开始时间 QDateTime _beginTime(date, QTime::currentTime()); //新建日程对话框 CScheduleDlg _scheduleDig(1, this, false); //设置开始时间 _scheduleDig.setDate(_beginTime); _scheduleDig.exec(); } else { //如果不在点击区域内则不跳转日期 //跳转日期 if (mouseEvent->button() == Qt::LeftButton && cell->rect().contains(mouseEvent->pos())) { cellClicked(cell); } } setCursor(Qt::ArrowCursor); m_dayMouseState = 0; m_dayCreateState = 0; } } return false; } void CDayMonthWidget::resizeEvent(QResizeEvent *event) { //获取每个时间widget的高度和宽度 qreal width = this->width() / 7; qreal height = this->height() / 6; const qreal r = width > height ? height * 0.9 : width * 0.9; //根据高度和宽度设置时间字体的大小 m_dayNumFont.setPixelSize(qRound(12 + (r - 18) * 6 / 17.0)); QWidget::resizeEvent(event); } void CDayMonthWidget::focusInEvent(QFocusEvent *event) { switch (event->reason()) { case Qt::TabFocusReason: case Qt::BacktabFocusReason: case Qt::ActiveWindowFocusReason: m_isFocus = true; break; default: m_isFocus = false; break; }; update(); } void CDayMonthWidget::focusOutEvent(QFocusEvent *event) { Q_UNUSED(event) m_isFocus = false; update(); } void CDayMonthWidget::keyPressEvent(QKeyEvent *event) { if (m_isFocus) { switch (event->key()) { case Qt::Key_Left: emit signalChangeSelectDate(m_selectDate.addDays(-1)); break; case Qt::Key_Right: emit signalChangeSelectDate(m_selectDate.addDays(1)); break; case Qt::Key_Up: emit signalChangeSelectDate(m_selectDate.addDays(-7)); break; case Qt::Key_Down: emit signalChangeSelectDate(m_selectDate.addDays(7)); break; default: break; } } QWidget::keyPressEvent(event); } void CDayMonthWidget::mousePressEvent(QMouseEvent *event) { QWidget::mousePressEvent(event); m_isFocus = false; if (event->button() & Qt::LeftButton) m_startPos = event->pos(); } void CDayMonthWidget::cellClicked(QWidget *cell) { const int pos = m_cellList.indexOf(cell); if (pos == -1) return; setSelectedCell(pos); } void CDayMonthWidget::setSelectedCell(int index) { if (m_selectedCell == index) return; emit signalChangeSelectDate(m_showDays.at(index)); } dde-calendar-5.14.13/calendar-client/src/widget/dayWidget/daymonthview.h000066400000000000000000000113431473346337000261130ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DAYMONTHVIEW_H #define DAYMONTHVIEW_H #include "customframe.h" #include "huangliData/dbusdatastruct.h" #include "cweekwidget.h" #include #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class CDayHuangLiLabel; class CTodayButton; class CDayMonthWidget; class CDayMonthView: public CustomFrame { Q_OBJECT public: explicit CDayMonthView(QWidget *parent = nullptr); ~CDayMonthView() override; //设置显示时间,选择时间和当前时间 void setShowDate(const QVector &showDate, const QDate &selectDate, const QDate ¤tDate); void setLunarVisible(bool visible); void setTheMe(int type = 0); void setSearchFlag(bool flag); //设置黄历信息 void setHuangLiInfo(const CaHuangLiDayInfo &huangLiInfo); void setHasScheduleFlag(const QVector &hasScheduleFlag); signals: //判断是否为拖拽 void signalIsDragging(bool &isDragging); //选择时间改变信号 void signalChangeSelectDate(const QDate &date); public slots: //上一个月 void slotprev(); //下一个月 void slotnext(); //返回当前时间 void slottoday(); private: void initUI(); void initConnection(); void updateDateShow(); void updateDateLunarDay(); private: void changeSelectDate(const QDate &date); protected: void wheelEvent(QWheelEvent *event) override; void paintEvent(QPaintEvent *e) override; private: DIconButton *m_prevButton = nullptr; DIconButton *m_nextButton = nullptr; CTodayButton *m_today = nullptr; CustomFrame *m_currentMouth = nullptr; CustomFrame *m_currentDay = nullptr; CustomFrame *m_currentYear = nullptr; CustomFrame *m_currentWeek = nullptr; CustomFrame *m_currentLuna = nullptr; CDayHuangLiLabel *m_yiLabel = nullptr; CDayHuangLiLabel *m_jiLabel = nullptr; QDate m_selectDate; QDate m_currentDate; int m_selectedCell = 0; QColor m_topBorderColor = Qt::red; QColor m_backgroundCircleColor = "#2ca7f8"; QColor m_weekendsTextColor = Qt::black; QColor m_festivalTextColor = Qt::black; int m_firstWeekDay; bool m_huanglistate = true; QVBoxLayout *m_hhLayout = nullptr; QVBoxLayout *m_upLayout = nullptr; DHorizontalLine *m_splitline = nullptr; QVBoxLayout *m_yiDownLayout = nullptr; QVBoxLayout *m_jiDownLayout = nullptr; QStringList m_weeklist; CaHuangLiDayInfo m_huangLiInfo; CDayMonthWidget *m_dayMonthWidget; const int m_radius = 8; bool m_searchflag = false; CWeekWidget *m_weekWidget = nullptr; //周视图显示区域 }; class CDayMonthWidget : public QWidget { Q_OBJECT public: explicit CDayMonthWidget(QWidget *parent = nullptr); ~CDayMonthWidget() override; void setTheMe(int type = 0); //设置显示时间,选择时间和当前时间 void setShowDate(const QVector &showDate, const QDate &selectDate, const QDate ¤tDate); void setHasScheduleFlag(const QVector &hasScheduleFlag); private: const QString getCellDayNum(int pos); const QDate getCellDate(int pos); void paintCell(QWidget *cell); protected: bool eventFilter(QObject *o, QEvent *e) override; void resizeEvent(QResizeEvent *event) override; void focusInEvent(QFocusEvent *event) override; void focusOutEvent(QFocusEvent *event) override; void keyPressEvent(QKeyEvent *event) override; void mousePressEvent(QMouseEvent *event) override; signals: //选择时间改变信号 void signalChangeSelectDate(const QDate &date); public slots: //点击月显示时间修改选择时间 void cellClicked(QWidget *cell); //设置选择项修改选择时间 void setSelectedCell(int index); private: QList m_cellList; QVector m_showDays; int m_selectedCell = 0; QDate m_selectDate; QDate m_currentDate; QGridLayout *m_gridLayout = nullptr; QVector m_vlineflag; //节假日和日程标识 QColor m_selectedTextColor = Qt::white; QColor m_currentDayTextColor = "#2ca7f8"; QColor m_defaultTextColor = Qt::black; QColor m_notCurrentTextColor = "#b2b2b2"; QColor m_ceventColor = "#FF5D00"; QFont m_dayNumFont; bool m_isFocus; QPoint m_startPos; //拖拽新建日程相关处理流程 int m_dayMouseState = 0; //鼠标状态 0:原始状态,1:点击状态 2:移动状态 int m_dayCreateState = 0; //创建日程状态 0:不创建 1:创建 2: 超出界面范围 }; #endif // YEARVIEW_H dde-calendar-5.14.13/calendar-client/src/widget/dayWidget/daywindow.cpp000066400000000000000000000300101473346337000257250ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daywindow.h" #include "constants.h" #include "customframe.h" #include "daymonthview.h" #include "schedulesearchview.h" #include "scheduleview.h" #include #include #include #include #include DGUI_USE_NAMESPACE CDayWindow::CDayWindow(QWidget *parent) : CScheduleBaseWidget(parent) { initUI(); initConnection(); setLunarVisible(m_calendarManager->getShowLunar()); } CDayWindow::~CDayWindow() {} void CDayWindow::setTheMe(int type) { if (type == 0 || type == 1) { m_leftground->setBColor("#FFFFFF"); DPalette ypa = m_YearLabel->palette(); ypa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(ypa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette lpa = m_LunarLabel->palette(); lpa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_LunarLabel->setPalette(lpa); m_LunarLabel->setForegroundRole(DPalette::WindowText); DPalette spa = m_SolarDay->palette(); spa.setColor(DPalette::WindowText, Qt::red); m_SolarDay->setPalette(spa); m_SolarDay->setForegroundRole(DPalette::WindowText); } else if (type == 2) { m_leftground->setBColor("#282828"); DPalette ypa = m_YearLabel->palette(); ypa.setColor(DPalette::WindowText, QColor("#C0C6D4")); m_YearLabel->setPalette(ypa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette lpa = m_LunarLabel->palette(); lpa.setColor(DPalette::WindowText, QColor("#798BA8")); m_LunarLabel->setPalette(lpa); m_LunarLabel->setForegroundRole(DPalette::WindowText); DPalette spa = m_SolarDay->palette(); spa.setColor(DPalette::WindowText, Qt::red); m_SolarDay->setPalette(spa); m_SolarDay->setForegroundRole(DPalette::WindowText); } m_daymonthView->setTheMe(type); m_scheduleView->setTheMe(type); } /** * @brief CDayWindow::setTime 设置显示时间位置 * @param time */ void CDayWindow::setTime(const QTime time) { if (time.isValid()) { //如果时间有效 m_scheduleView->setTime(time); } else { if (getSelectDate() == getCurrendDateTime().date()) { m_scheduleView->setTime(getCurrendDateTime().time()); } else { m_scheduleView->setTime(m_makeTime); } } } /** * @brief CDayWindow::updateHeight 更新全天和非全天高度 */ void CDayWindow::updateHeight() { m_scheduleView->updateHeight(); } /** * @brief CDayWindow::setCurrentDateTime 设置当前时间 * @param currentDate */ void CDayWindow::setCurrentDateTime(const QDateTime ¤tDate) { //设置当前时间 CScheduleBaseWidget::setCurrentDateTime(currentDate); //更新当前时间 m_scheduleView->setCurrentDate(getCurrendDateTime()); } /** * @brief CDayWindow::setYearData 设置选择时间年信息显示 */ void CDayWindow::setYearData() { QLocale locale; //判断是否为中文环境 if (getShowLunar()) { m_YearLabel->setText(QString::number(getSelectDate().year()) + tr("Y") + QString::number(getSelectDate().month()) + tr("M") + QString::number(getSelectDate().day()) + tr("D")); } else { m_YearLabel->setText(locale.toString(getSelectDate(), "yyyy/M/d")); } } /** * @brief CDayWindow::updateShowDate 更新显示时间 * @param isUpdateBar */ void CDayWindow::updateShowDate(const bool isUpdateBar) { Q_UNUSED(isUpdateBar) setYearData(); int w = m_scheduleView->width() - 72; m_scheduleView->setRange(w, 1032, getSelectDate(), getSelectDate()); //设置时间显示格式 m_scheduleView->setTimeFormat((m_calendarManager->getTimeShowType() ? "AP " : "") + m_calendarManager->getTimeFormat()); //获取需要显示的时间 QVector _monthDate = m_calendarManager->getMonthDate(getSelectDate().year(), getSelectDate().month()); m_daymonthView->setShowDate(_monthDate, getSelectDate(), getCurrendDateTime().date()); //如果为中文环境则显示农历信息 if (getShowLunar()) updateShowLunar(); updateShowSchedule(); } /** * @brief CDayWindow::updateShowSchedule 更新日程显示 */ void CDayWindow::updateShowSchedule() { //获取一天的日程信息 QMap _weekScheduleInfo = gScheduleManager->getScheduleMap(getSelectDate(), getSelectDate()); //设置显示日程信息 m_scheduleView->setShowScheduleInfo(_weekScheduleInfo); //获取界面显示定位时间位置 setMakeTime(_weekScheduleInfo); QSet scheduleDate = gScheduleManager->getAllScheduleDate(); QVector monthFlag{}; QVector monthDate = m_calendarManager->getMonthDate(getSelectDate().year(), getSelectDate().month()); for (QDate date : monthDate) { monthFlag.push_back((scheduleDate.find(date) != scheduleDate.end())); } //设置日视图右侧月显示日期是否有日程 m_daymonthView->setHasScheduleFlag(monthFlag); } /** * @brief CDayWindow::updateShowLunar 更新显示农历信息 */ void CDayWindow::updateShowLunar() { CaHuangLiDayInfo _huangLiInfo = getLunarInfo(); m_LunarLabel->setText(tr("Lunar") + _huangLiInfo.mLunarMonthName + _huangLiInfo.mLunarDayName); m_daymonthView->setHuangLiInfo(_huangLiInfo); } void CDayWindow::updateSearchScheduleInfo() { m_scheduleView->slotUpdateScene(); } /** * @brief CDayWindow::setSelectSearchScheduleInfo 设置选中日程 * @param info */ void CDayWindow::setSelectSearchScheduleInfo(const DSchedule::Ptr &info) { if (info->allDay()) { setTime(); } else { m_scheduleView->setTime(info->dtStart().time()); } m_scheduleView->setSelectSchedule(info); } /** * @brief CDayWindow::deleteselectSchedule 快捷键删除日程 */ void CDayWindow::deleteselectSchedule() { m_scheduleView->slotDeleteitem(); } void CDayWindow::setSearchWFlag(bool flag) { m_searchFlag = flag; m_daymonthView->setSearchFlag(flag); } void CDayWindow::setLunarVisible(bool state) { m_LunarLabel->setVisible(state); m_SolarDay->setVisible(state); m_scheduleView->setLunarVisible(state); m_daymonthView->setLunarVisible(state); } void CDayWindow::initUI() { QHBoxLayout *titleLayout = new QHBoxLayout; titleLayout->setMargin(0); titleLayout->setSpacing(0); titleLayout->setContentsMargins(10, 9, 0, 3); m_YearLabel = new QLabel(); m_YearLabel->setMinimumHeight(DDEDayCalendar::D_YLabelHeight); QFont labelF; labelF.setWeight(QFont::Medium); labelF.setPixelSize(DDECalendar::FontSizeTwentyfour); m_YearLabel->setFont(labelF); DPalette ypa = m_YearLabel->palette(); ypa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(ypa); titleLayout->addWidget(m_YearLabel); m_dialogIconButton->setFocusPolicy(Qt::NoFocus); titleLayout->addWidget(m_dialogIconButton); m_LunarLabel = new QLabel(); titleLayout->addSpacing(15); m_LunarLabel->setFixedHeight(DDEDayCalendar::D_YLabelHeight); labelF.setPixelSize(DDECalendar::FontSizeFourteen); m_LunarLabel->setFont(labelF); m_LunarLabel->setAlignment(Qt::AlignCenter); DPalette lpa = m_LunarLabel->palette(); lpa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_LunarLabel->setPalette(lpa); titleLayout->addWidget(m_LunarLabel); m_SolarDay = new QLabel(); labelF.setPixelSize(DDECalendar::FontSizeTen); m_SolarDay->setFixedHeight(DDEDayCalendar::D_YLabelHeight); m_SolarDay->setFont(labelF); m_SolarDay->setAlignment(Qt::AlignCenter); DPalette spa = m_SolarDay->palette(); spa.setColor(DPalette::WindowText, Qt::red); m_SolarDay->setPalette(spa); titleLayout->addWidget(m_SolarDay); titleLayout->addStretch(); QVBoxLayout *leftLayout = new QVBoxLayout; leftLayout->setMargin(0); leftLayout->setSpacing(0); m_scheduleView = new CScheduleView(this, ScheduleViewPos::DayPos); m_scheduleView->setviewMargin(72, 109, 20, 0); m_scheduleView->setCurrentDate(getCurrendDateTime()); leftLayout->addLayout(titleLayout); leftLayout->addWidget(m_scheduleView); m_verline = new DVerticalLine; m_verline->setFixedWidth(2); m_daymonthView = new CDayMonthView(this); QHBoxLayout *leftMainLayout = new QHBoxLayout; leftMainLayout->setMargin(0); leftMainLayout->setSpacing(1); leftMainLayout->setContentsMargins(0, 0, 0, 0); leftMainLayout->addLayout(leftLayout); leftMainLayout->addWidget(m_verline); leftMainLayout->addWidget(m_daymonthView); leftMainLayout->setStretchFactor(leftLayout, 3); leftMainLayout->setStretchFactor(m_verline, 1); leftMainLayout->setStretchFactor(m_daymonthView, 2); m_leftground = new CustomFrame(); m_leftground->setRoundState(true, true, true, true); m_leftground->setLayout(leftMainLayout); m_leftground->setBColor("#FFFFFF"); m_mainLayout = new QHBoxLayout; m_mainLayout->setMargin(0); m_mainLayout->setSpacing(0); m_mainLayout->addWidget(m_leftground); this->setLayout(m_mainLayout); } void CDayWindow::initConnection() { connect(m_daymonthView, &CDayMonthView::signalIsDragging, this, &CDayWindow::slotIsDragging); connect(m_daymonthView, &CDayMonthView::signalChangeSelectDate, this, &CDayWindow::slotChangeSelectDate); connect(m_scheduleView, &CScheduleView::signalSwitchPrePage, this, &CDayWindow::slotSwitchPrePage); connect(m_scheduleView, &CScheduleView::signalSwitchNextPage, this, &CDayWindow::slotSwitchNextPage); } /** * @brief CDayWindow::setMakeTime 界面显示定位时间位置 * @param info */ void CDayWindow::setMakeTime(QMap &info) { if (info.contains(getSelectDate())) { DSchedule::List _scheduleVector = info[getSelectDate()]; //设置当前第一个非全天默认时间 QDateTime firstscheduleBeginTime(getSelectDate().addDays(1), QTime(0, 0, 0)); //获取非全天日程 for (int i = 0 ; i < _scheduleVector.size(); ++i) { if (!_scheduleVector.at(i)->allDay()) { if (firstscheduleBeginTime > _scheduleVector.at(i)->dtStart()) { firstscheduleBeginTime = _scheduleVector.at(i)->dtStart(); } } } //如果为默认时间则表示当天没有非全天日程 if (firstscheduleBeginTime.date() > getSelectDate()) { m_makeTime.setHMS(12, 30, 0, 0); } else if (firstscheduleBeginTime.date() == getSelectDate()) { m_makeTime = firstscheduleBeginTime.time(); //设置定位的时间位置,原始时间太靠下,现向上偏移2小时 QTime onTime = m_makeTime; if (onTime.hour() + 4 >= 24) { onTime = QTime(20, 0); } else { onTime = onTime.addSecs(14400); } m_makeTime = onTime; } else { m_makeTime.setHMS(0, 0, 0, 0); } } else { //将定位的默认时间显示出8点 m_makeTime.setHMS(12, 30, 0, 0); } } void CDayWindow::slotScheduleHide() { m_scheduleView->slotScheduleShow(false); } /** * @brief CDayWindow::slotChangeSelectDate 更新选择时间 * @param date */ void CDayWindow::slotChangeSelectDate(const QDate &date) { if (setSelectDate(date, true)) { //隐藏日程悬浮框 slotScheduleHide(); updateShowDate(); setTime(); } } void CDayWindow::slotIsDragging(bool &isDragging) { isDragging = m_scheduleView->IsDragging(); } /** * @brief CDayWindow::slotSwitchPrePage 切换选择时间 */ void CDayWindow::slotSwitchPrePage() { slotChangeSelectDate(getSelectDate().addDays(-1)); } /** * @brief CDayWindow::slotSwitchNextPage 切换选择时间 */ void CDayWindow::slotSwitchNextPage() { slotChangeSelectDate(getSelectDate().addDays(1)); } dde-calendar-5.14.13/calendar-client/src/widget/dayWidget/daywindow.h000066400000000000000000000047261473346337000254110ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DAYWINDOW_H #define DAYWINDOW_H #include "dschedule.h" #include "huangliData/dbusdatastruct.h" #include "cschedulebasewidget.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE class CDayMonthView; class CScheduleView; class CScheduleSearchView; class QHBoxLayout; class CustomFrame; class CDayWindow: public CScheduleBaseWidget { Q_OBJECT public: explicit CDayWindow(QWidget *parent = nullptr); ~CDayWindow() override; void setSearchWFlag(bool flag); void setLunarVisible(bool state); void setTheMe(int type = 0); //设置显示的时间位置 void setTime(const QTime time = QTime()); //更新全天和非全天高度 void updateHeight(); //设置当前时间 void setCurrentDateTime(const QDateTime ¤tDate) override; //设置选择时间年信息显示 void setYearData() override; //更新显示时间 void updateShowDate(const bool isUpdateBar = true) override; //更新日程显示 void updateShowSchedule() override; //更新显示农历信息 void updateShowLunar() override; //更新界面搜索日程显示 void updateSearchScheduleInfo() override; //设置选中搜索日程 void setSelectSearchScheduleInfo(const DSchedule::Ptr &info) override; //删除选中日程 void deleteselectSchedule() override; private: void initUI(); void initConnection(); //获取界面显示定位时间位置 void setMakeTime(QMap &info); public slots: void slotScheduleHide(); //更新选择时间 void slotChangeSelectDate(const QDate &date); private slots: void slotIsDragging(bool &isDragging); //切换选择时间 void slotSwitchPrePage(); //切换选择时间 void slotSwitchNextPage(); signals: //拖拽结束信号 void signalNewSlot(); private: CDayMonthView *m_daymonthView = nullptr; CustomFrame *m_leftground = nullptr; DVerticalLine *m_verline = nullptr; QLabel *m_YearLabel = nullptr; QLabel *m_LunarLabel = nullptr; QLabel *m_SolarDay = nullptr; CScheduleView *m_scheduleView = nullptr; QString m_searchText; bool m_searchFlag = false; QHBoxLayout *m_mainLayout = nullptr; QTime m_makeTime{}; //界面显示定位时间位置 }; #endif // YEARWINDOW_H dde-calendar-5.14.13/calendar-client/src/widget/monthWidget/000077500000000000000000000000001473346337000235725ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/widget/monthWidget/monthdayview.cpp000066400000000000000000000306271473346337000270240ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "monthdayview.h" #include "scheduledatamanage.h" #include "constants.h" #include "units.h" #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CMonthDayView::CMonthDayView(QWidget *parent) : DFrame(parent) , m_touchGesture(this) { QHBoxLayout *hBoxLayout = new QHBoxLayout; hBoxLayout->setMargin(0); hBoxLayout->setSpacing(0); hBoxLayout->setContentsMargins(10, 0, 10, 0); m_monthWidget = new CMonthWidget(this); hBoxLayout->addWidget(m_monthWidget); setLayout(hBoxLayout); setFrameRounded(true); setLineWidth(0); setWindowFlags(Qt::FramelessWindowHint); connect(m_monthWidget, &CMonthWidget::signalsSelectDate, this, &CMonthDayView::signalsSelectDate); } CMonthDayView::~CMonthDayView() { } /** * @brief CMonthDayView::setSelectDate 设置选择时间 * @param date */ void CMonthDayView::setSelectDate(const QDate &date) { m_selectDate = date; for (int i = 0; i < DDEMonthCalendar::MonthNumOfYear; ++i) { m_days[i] = m_selectDate.addMonths(i - 5); } m_monthWidget->setDate(m_days); update(); } /** * @brief CMonthDayView::setTheMe 设置主题颜色 * @param type */ void CMonthDayView::setTheMe(int type) { QColor frameColor; if (type == 0 || type == 1) { frameColor = "#FFFFFF"; } else if (type == 2) { frameColor = "#FFFFFF"; frameColor.setAlphaF(0.05); } DPalette aniPa = palette(); aniPa.setColor(DPalette::Background, frameColor); setPalette(aniPa); setBackgroundRole(DPalette::Background); CMonthRect::setTheMe(type); } void CMonthDayView::setSearchflag(bool flag) { m_searchFlag = flag; } void CMonthDayView::wheelEvent(QWheelEvent *e) { //如果滚动为左右则触发信号 if (e->angleDelta().x() != 0) { emit signalAngleDelta(e->angleDelta().x()); } else { emit signalAngleDelta(e->angleDelta().y()); } } bool CMonthDayView::event(QEvent *e) { if (m_touchGesture.event(e)) { //获取触摸状态 switch (m_touchGesture.getTouchState()) { case touchGestureOperation::T_SLIDE: { //在滑动状态如果可以更新数据则切换月份 if (m_touchGesture.isUpdate()) { m_touchGesture.setUpdate(false); switch (m_touchGesture.getMovingDir()) { case touchGestureOperation::T_LEFT: emit signalAngleDelta(-1); break; case touchGestureOperation::T_RIGHT: emit signalAngleDelta(1); break; default: break; } } break; } default: break; } return true; } else { return DFrame::event(e); } } /** * @brief CMonthWidget 构造函数 * @param parent 父类 */ CMonthWidget::CMonthWidget(QWidget *parent) : QWidget(parent) , m_isFocus(false) { for (int i = 0; i < DDEMonthCalendar::MonthNumOfYear; ++i) { CMonthRect *monthrect = new CMonthRect(this); m_MonthItem.append(monthrect); } //获取Tab焦点 setFocusPolicy(Qt::StrongFocus); } CMonthWidget::~CMonthWidget() { for (int i = 0; i < DDEMonthCalendar::MonthNumOfYear; ++i) { CMonthRect *monthrect = m_MonthItem.at(i); delete monthrect; } m_MonthItem.clear(); } void CMonthWidget::setDate(const QDate date[12]) { for (int i = 0; i < DDEMonthCalendar::MonthNumOfYear; ++i) { m_MonthItem.at(i)->setDate(date[i]); } CMonthRect::setSelectRect(m_MonthItem.at(5)); update(); } void CMonthWidget::resizeEvent(QResizeEvent *event) { Q_UNUSED(event); updateSize(); } void CMonthWidget::mousePressEvent(QMouseEvent *event) { if (event->source() == Qt::MouseEventSynthesizedByQt) { //如果为触摸转换则设置触摸状态和触摸开始坐标 m_touchState = 1; m_touchBeginPoint = event->pos(); QWidget::mousePressEvent(event); return; } if (event->button() == Qt::RightButton) return; m_isFocus = false; mousePress(event->pos()); } void CMonthWidget::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 反锯齿; for (int i = 0; i < m_MonthItem.size(); ++i) { m_MonthItem.at(i)->paintItem(&painter, m_MonthItem.at(i)->rect(), m_isFocus); } } void CMonthWidget::mouseReleaseEvent(QMouseEvent *event) { if (event->source() == Qt::MouseEventSynthesizedByQt) { if (m_touchState == 1) { //如果为触摸且状态为点击则为触摸点击 mousePress(event->pos()); m_touchState = 0; } QWidget::mouseReleaseEvent(event); } } void CMonthWidget::mouseMoveEvent(QMouseEvent *event) { if (event->source() == Qt::MouseEventSynthesizedByQt) { QPoint currentPoint = event->pos(); //如果移动距离大与5则为触摸移动状态 if (QLineF(m_touchBeginPoint, currentPoint).length() > 5) { m_touchState = 2; } QWidget::mouseMoveEvent(event); } } void CMonthWidget::keyPressEvent(QKeyEvent *event) { //获取当前选择时间 QDate selectDate = CMonthRect::getSelectRect()->getDate(); //初始化需要设置的时间 QDate setdate = selectDate; switch (event->key()) { case Qt::Key_Left: { setdate = selectDate.addMonths(-1); } break; case Qt::Key_Right: { setdate = selectDate.addMonths(1); } break; default: QWidget::keyPressEvent(event); } if (selectDate != setdate) { //更新时间 updateShowDate(setdate); //设置更新后的时间并更新界面 setDate(m_days); emit signalsSelectDate(setdate); } } void CMonthWidget::focusInEvent(QFocusEvent *event) { QWidget::focusInEvent(event); switch (event->reason()) { case Qt::TabFocusReason: case Qt::BacktabFocusReason: case Qt::ActiveWindowFocusReason: m_isFocus = true; break; default: m_isFocus = false; break; }; update(); } void CMonthWidget::focusOutEvent(QFocusEvent *event) { QWidget::focusOutEvent(event); m_isFocus = false; update(); } void CMonthWidget::mousePress(const QPoint &point) { int itemindex = getMousePosItem(point); if (!(itemindex < 0)) { if (!withinTimeFrame(m_MonthItem.at(itemindex)->getDate())) { return; } CMonthRect::setSelectRect(m_MonthItem.at(itemindex)); emit signalsSelectDate(m_MonthItem.at(itemindex)->getDate()); } update(); } /** * @brief CMonthWidget::updateSize 更新item大小 */ void CMonthWidget::updateSize() { qreal w = this->width() / m_MonthItem.size(); for (int i = 0; i < m_MonthItem.size(); ++i) { m_MonthItem.at(i)->setRect(i * w, 0, w, this->height()); } update(); } /** * @brief CMonthWidget::getMousePosItem 获取鼠标点击的区域编号 * @param pos * @return */ int CMonthWidget::getMousePosItem(const QPointF &pos) { int res = -1; for (int i = 0 ; i < m_MonthItem.size(); ++i) { if (m_MonthItem.at(i)->rect().contains(pos)) { res = i; break; } } return res; } /** * @brief CMonthWidget::updateShowDate 根据选择时间更新显示的月份 * @param selectDate */ void CMonthWidget::updateShowDate(const QDate &selectDate) { for (int i = 0; i < DDEMonthCalendar::MonthNumOfYear; ++i) { m_days[i] = selectDate.addMonths(i - 5); } } int CMonthRect::m_themetype ; qreal CMonthRect::m_DevicePixelRatio; QColor CMonthRect::m_defaultTextColor; QColor CMonthRect::m_backgrounddefaultColor ; QColor CMonthRect::m_currentDayTextColor; QColor CMonthRect::m_backgroundcurrentDayColor; QColor CMonthRect::m_fillColor; QFont CMonthRect::m_dayNumFont; CMonthRect *CMonthRect::m_SelectRect = nullptr; CMonthRect::CMonthRect(QWidget *parent) : m_parentWidget(parent) { m_dayNumFont.setPixelSize(DDECalendar::FontSizeSixteen); m_dayNumFont.setWeight(QFont::Light); } /** * @brief CMonthRect::setDate 设置时间 * @param date */ void CMonthRect::setDate(const QDate &date) { m_Date = date; } /** * @brief CMonthRect::getDate 获取时间 * @return */ QDate CMonthRect::getDate() const { return m_Date; } /** * @brief CMonthRect::rect 获取矩阵大小 * @return */ QRectF CMonthRect::rect() const { return m_rect; } /** * @brief CMonthRect::setRect 设置矩阵大小 * @param rect */ void CMonthRect::setRect(const QRectF &rect) { m_rect = rect; } /** * @brief CMonthRect::setRect 设置矩阵大小 * @param x * @param y * @param w * @param h */ void CMonthRect::setRect(qreal x, qreal y, qreal w, qreal h) { m_rect.setRect(x, y, w, h); } /** * @brief CMonthRect::paintItem 绘制 * @param painter * @param rect */ void CMonthRect::paintItem(QPainter *painter, const QRectF &rect, bool drawFocus) { m_selectColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); if ( !withinTimeFrame(m_Date)) return; const bool isCurrentDay = (m_Date.month() == QDate::currentDate().month() && m_Date.year() == QDate::currentDate().year()); painter->setPen(Qt::SolidLine); const QString dayNum = QString::number(m_Date.month()); if (m_SelectRect == this) { QRectF fillRect((rect.width() - 36) / 2 + rect.x() + 6, (rect.height() - 36) / 2 + 7 + rect.y(), 24, 24); painter->setBrush(QBrush(m_selectColor)); painter->setPen(Qt::NoPen); painter->drawEllipse(fillRect); //如果有焦点,绘制tab选中效果 if (drawFocus) { QPen pen; pen.setWidth(2); pen.setColor(m_selectColor); painter->setPen(pen); //在原有的选中效果外面再绘制一圈 QRectF focusRect(fillRect.x() - 2, fillRect.y() - 2, fillRect.width() + 4, fillRect.height() + 4); painter->setBrush(Qt::NoBrush); painter->drawEllipse(focusRect); } painter->setRenderHint(QPainter::HighQualityAntialiasing); painter->setPen(m_currentDayTextColor); painter->setFont(m_dayNumFont); painter->drawText(rect, Qt::AlignCenter, dayNum); } else { if (isCurrentDay) { painter->setPen(m_backgroundcurrentDayColor); } else { painter->setPen(m_defaultTextColor); } painter->setFont(m_dayNumFont); painter->drawText(rect, Qt::AlignCenter, dayNum); } } /** * @brief CMonthRect::setDevicePixelRatio 设置设备缩放比例 * @param pixel */ void CMonthRect::setDevicePixelRatio(const qreal pixel) { m_DevicePixelRatio = pixel; } /** * @brief CMonthRect::setTheMe 设置主题 * @param type */ void CMonthRect::setTheMe(int type) { m_themetype = type; QColor frameColor; if (type == 0 || type == 1) { m_defaultTextColor = Qt::black; m_backgrounddefaultColor = Qt::white; m_currentDayTextColor = Qt::white; m_backgroundcurrentDayColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); m_fillColor = "#FFFFFF"; frameColor = m_fillColor; m_fillColor.setAlphaF(0); } else if (type == 2) { m_defaultTextColor = "#C0C6D4"; QColor framecolor = Qt::black; framecolor.setAlphaF(0.5); m_backgrounddefaultColor = framecolor; m_currentDayTextColor = "#C0C6D4"; m_backgroundcurrentDayColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); m_fillColor = "#FFFFFF"; m_fillColor.setAlphaF(0.05); frameColor = m_fillColor; m_fillColor.setAlphaF(0); } } /** * @brief CMonthRect::setSelectRect 设置选择的矩阵 * @param selectRect */ void CMonthRect::setSelectRect(CMonthRect *selectRect) { m_SelectRect = selectRect; } /** * @brief CMonthRect::getSelectRect 获取选择的矩阵 * @return */ CMonthRect *CMonthRect::getSelectRect() { return m_SelectRect; } dde-calendar-5.14.13/calendar-client/src/widget/monthWidget/monthdayview.h000066400000000000000000000104701473346337000264630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MONTHDAYVIEW_H #define MONTHDAYVIEW_H #include "../touchgestureoperation.h" #include #include #include DWIDGET_USE_NAMESPACE class CMonthWidget; /** * @brief The CMonthDayView class 月视图月份自定义控件 */ class CMonthDayView : public DFrame { Q_OBJECT public: explicit CMonthDayView(QWidget *parent = nullptr); ~CMonthDayView() override; //设置选择时间 void setSelectDate(const QDate &date); //设置主题颜色 void setTheMe(int type = 0); void setSearchflag(bool flag); protected: void wheelEvent(QWheelEvent *e) override; bool event(QEvent *e) override; signals: //切换月份修改选择时间 void signalsSelectDate(QDate date); /** * @brief signalAngleDelta 发送滚动信号滚动相对量 * @param delta 滚动相对量 */ void signalAngleDelta(int delta); private: /** * @brief m_touchGesture 触摸手势处理 */ touchGestureOperation m_touchGesture; CMonthWidget *m_monthWidget = nullptr; QDate m_selectDate; QDate m_days[12]; int m_fixwidth = 200; int m_realwidth = 100; bool m_searchFlag = false; }; class CMonthRect; class CMonthWidget : public QWidget { Q_OBJECT public: explicit CMonthWidget(QWidget *parent = nullptr); ~CMonthWidget() override; void setDate(const QDate date[12]); protected: void resizeEvent(QResizeEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void paintEvent(QPaintEvent *event) override; /** * @brief mouseReleaseEvent 鼠标释放事件 * @param event 鼠标事件 */ void mouseReleaseEvent(QMouseEvent *event) override; /** * @brief mouseMoveEvent 鼠标移动事件,设置hover状态 * @param event 鼠标事件 */ void mouseMoveEvent(QMouseEvent *event) override; void keyPressEvent(QKeyEvent *event) override; void focusInEvent(QFocusEvent *event) override; void focusOutEvent(QFocusEvent *event) override; private: void mousePress(const QPoint &point); //更新item大小 void updateSize(); //获取鼠标点击的区域编号 int getMousePosItem(const QPointF &pos); //根据选择时间更新显示的月份 void updateShowDate(const QDate &selectDate); signals: void signalsSelectDate(QDate date); private: QVector m_MonthItem; QDate m_days[12]; //触摸状态 0:原始 1:点击 2:移动 int m_touchState {0}; //触摸点击坐标 QPoint m_touchBeginPoint; bool m_isFocus; }; class CMonthRect { public: explicit CMonthRect(QWidget *parent = nullptr); //设置时间 void setDate(const QDate &date); //获取时间 QDate getDate()const; //获取矩阵大小 QRectF rect() const; //设置矩阵大小 void setRect(const QRectF &rect); //设置矩阵大小 inline void setRect(qreal x, qreal y, qreal w, qreal h); //绘制 void paintItem(QPainter *painter, const QRectF &rect, bool drawFocus = false); //设置设备缩放比例 static void setDevicePixelRatio(const qreal pixel); //设置主题 static void setTheMe(int type); //设置选择的矩阵 static void setSelectRect(CMonthRect *selectRect); //获取选择的矩阵 static CMonthRect *getSelectRect(); private: QRectF m_rect; QDate m_Date; static int m_themetype ; static qreal m_DevicePixelRatio; static QColor m_defaultTextColor; static QColor m_backgrounddefaultColor; static QColor m_currentDayTextColor; static QColor m_backgroundcurrentDayColor; static QColor m_fillColor; static QFont m_dayNumFont; static CMonthRect *m_SelectRect; QColor m_selectColor; QWidget *m_parentWidget; }; #endif // MONTDAYVIEW_H dde-calendar-5.14.13/calendar-client/src/widget/monthWidget/monthscheduleview.cpp000066400000000000000000000365421473346337000300450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "monthscheduleview.h" #include "monthview.h" #include "schedulectrldlg.h" #include "scheduledlg.h" #include "myscheduleview.h" #include "graphicsItem/cmonthschedulenumitem.h" #include #include #include #include #include #include DGUI_USE_NAMESPACE const int schedule_Item_Y = 31; //日程item的相对于该天的高度差 CMonthScheduleView::CMonthScheduleView(QWidget *parent, QGraphicsScene *scene) : QObject(parent) , m_Scene(scene) { for (int i = 0; i < 6; ++i) { CWeekScheduleView *weekSchedule = new CWeekScheduleView(this); m_weekSchedule.append(weekSchedule); } slotFontChange(); } CMonthScheduleView::~CMonthScheduleView() { } void CMonthScheduleView::setallsize(int w, int h, int left, int top, int buttom, int itemHeight) { m_width = w; m_height = h; m_bottomMargin = buttom; m_leftMargin = left; m_topMargin = top; m_cNum = static_cast(((m_height - m_topMargin - m_bottomMargin) / 6.0 + 0.5 - schedule_Item_Y) / (itemHeight + 1)); } void CMonthScheduleView::setData(QMap &data, int currentMonth) { m_data = data; m_currentMonth = currentMonth; updateData(); } void CMonthScheduleView::slotFontChange() { QFont font; DFontSizeManager::instance()->setFontGenericPixelSize( static_cast(DFontSizeManager::instance()->fontPixelSize(qGuiApp->font()))); font = DFontSizeManager::instance()->t8(font); QFontMetrics fm(font); int h = fm.height(); if (m_ItemHeight != h) { m_ItemHeight = h; updateData(); } } /** * @brief CMonthScheduleView::updateData 更新日程数据 */ void CMonthScheduleView::updateData() { //清空日程显示 for (int i = 0; i < m_weekSchedule.size(); ++i) { m_weekSchedule[i]->clearItem(); } //保护数据防止越界 if (m_data.count() != DDEMonthCalendar::ItemSizeOfMonthDay || m_cNum < 1) return; //开始结束时间 QMap::iterator _iter = m_data.begin(); QDate begindate = _iter.key(); _iter += (m_data.size() - 1); QDate enddate = _iter.key(); m_beginDate = begindate; m_endDate = enddate; for (int i = 0; i < m_weekSchedule.size(); ++i) { m_weekSchedule[i]->setHeight(m_ItemHeight, qRound((m_height - m_topMargin - m_bottomMargin) / 6.0 - schedule_Item_Y)); m_weekSchedule[i]->setData(m_data, begindate.addDays(i * 7), begindate.addDays(i * 7 + 6)); QVector> mSchedule = m_weekSchedule[i]->getMScheduleInfo(); updateDateShow(mSchedule, m_weekSchedule[i]->getScheduleShowItem()); } } void CMonthScheduleView::updateHeight() { for (int j = 0; j < m_weekSchedule.size(); ++j) { for (int i = 0; i < m_weekSchedule[j]->getScheduleShowItem().count(); i++) { m_weekSchedule[j]->getScheduleShowItem().at(i)->update(); } } } QVector CMonthScheduleView::getScheduleShowItem() const { QVector m_scheduleShowItem; for (int j = 0; j < m_weekSchedule.size(); ++j) { for (int i = 0; i < m_weekSchedule[j]->getScheduleShowItem().count(); i++) { m_scheduleShowItem.append(m_weekSchedule[j]->getScheduleShowItem().at(i)); } } return m_scheduleShowItem; } void CMonthScheduleView::updateDate(const DSchedule::Ptr &info) { for (int i = 0; i < m_weekSchedule.size(); ++i) { if (m_weekSchedule.at(i)->addData(info)) { } else { m_weekSchedule[i]->clearItem(); m_weekSchedule[i]->updateSchedule(true); }; QVector> mSchedule = m_weekSchedule[i]->getMScheduleInfo(); updateDateShow(mSchedule, m_weekSchedule[i]->getScheduleShowItem()); } } void CMonthScheduleView::changeDate(const DSchedule::Ptr &info) { for (int i = 0; i < m_weekSchedule.size(); ++i) { m_weekSchedule.at(i)->changeDate(info); QVector> mSchedule = m_weekSchedule[i]->getMScheduleInfo(); updateDateShow(mSchedule, m_weekSchedule[i]->getScheduleShowItem()); } } void CMonthScheduleView::updateDate(const int row, const DSchedule::Ptr &info) { for (int i = 0; i < m_weekSchedule.size(); ++i) { if (row == i) { m_weekSchedule.at(i)->addData(info); } else { m_weekSchedule[i]->clearItem(); m_weekSchedule[i]->updateSchedule(true); }; QVector> mSchedule = m_weekSchedule[i]->getMScheduleInfo(); updateDateShow(mSchedule, m_weekSchedule[i]->getScheduleShowItem()); } } void CMonthScheduleView::updateDateShow(QVector> &vCMDaySchedule, QVector &scheduleShowItem) { for (int i = 0; i < vCMDaySchedule.count(); i++) { for (int j = 0; j < vCMDaySchedule[i].count(); j++) { if (vCMDaySchedule[i].at(j).state) { createScheduleNumWidget(vCMDaySchedule[i].at(j), i + 1, scheduleShowItem); } else { createScheduleItemWidget(vCMDaySchedule[i].at(j), i + 1, scheduleShowItem); } } } } void CMonthScheduleView::createScheduleItemWidget(MScheduleDateRangeInfo info, int cNum, QVector &scheduleShowItem) { DSchedule::Ptr gd = info.tData; QPoint pos; int fw; int fh; computePos(cNum, info.bdate, info.edate, pos, fw, fh); CMonthScheduleItem *gwi = new CMonthScheduleItem(QRect(pos.x(), pos.y(), fw, fh), nullptr); m_Scene->addItem(gwi); gwi->setData(gd); QColor TransparentC = "#000000"; TransparentC.setAlphaF(0.05); scheduleShowItem.append(gwi); } void CMonthScheduleView::createScheduleNumWidget(MScheduleDateRangeInfo info, int cNum, QVector &scheduleShowItem) { int type = CScheduleDataManage::getScheduleDataManage()->getTheme(); CMonthScheduleNumItem *gwi = new CMonthScheduleNumItem(nullptr); QPoint pos; int fw; int fh; computePos(cNum, info.bdate, info.edate, pos, fw, fh); QColor gradientFromC = "#000000"; gradientFromC.setAlphaF(0.00); gwi->setColor(gradientFromC, gradientFromC); QFont font; gwi->setSizeType(DFontSizeManager::T8); if (type == 0 || type == 1) { QColor tc("#5E5E5E"); tc.setAlphaF(0.9); gwi->setText(tc, font); } else { QColor tc("#798190"); tc.setAlphaF(1); gwi->setText(tc, font); } m_Scene->addItem(gwi); gwi->setRect(pos.x(), pos.y(), fw, fh); gwi->setData(info.num); gwi->setDate(info.bdate); scheduleShowItem.append(gwi); } void CMonthScheduleView::computePos(int cNum, QDate bgeindate, QDate enddate, QPoint &pos, int &fw, int &fh) { int brow = static_cast((m_beginDate.daysTo(bgeindate)) / DDEMonthCalendar::AFewDaysOfWeek); int bcol = (m_beginDate.daysTo(bgeindate)) % DDEMonthCalendar::AFewDaysOfWeek; int ecol = (m_beginDate.daysTo(enddate)) % DDEMonthCalendar::AFewDaysOfWeek; fw = static_cast((ecol - bcol + 1) * ((m_width - m_leftMargin) / 7.0) - 11); fh = m_ItemHeight; int x = static_cast(m_leftMargin + bcol * ((m_width - m_leftMargin) / 7.0) + 5); //根据UI图调整item坐标 int y = static_cast(m_topMargin + ((m_height - m_topMargin - m_bottomMargin) / 6.0) * brow + schedule_Item_Y + (cNum - 1) * fh); pos = QPoint(x, y); } CWeekScheduleView::CWeekScheduleView(QObject *parent) : QObject(parent) , m_ScheduleHeight(22) , m_DayHeight(47) { setMaxNum(); } CWeekScheduleView::~CWeekScheduleView() { } void CWeekScheduleView::setData(QMap &data, const QDate &startDate, const QDate &stopDate) { //显示一周的日程 Q_ASSERT(startDate.daysTo(stopDate) == 6); m_ScheduleInfo.clear(); beginDate = startDate; endDate = stopDate; for (int i = 0 ; i <= beginDate.daysTo(endDate); ++i) { for (int j = 0; j < data[beginDate.addDays(i)].size(); ++j) { bool have = false; DSchedule::Ptr info = data[beginDate.addDays(i)].at(j); //过滤重复日程 for (DSchedule::Ptr p : m_ScheduleInfo) { if (p == info) { have = true; break; } } if (!have) { m_ScheduleInfo.append(info); } } } //设置日程显示列数 m_colum = static_cast(startDate.daysTo(stopDate) + 1); updateSchedule(true); } bool CWeekScheduleView::addData(const DSchedule::Ptr &info) { if (info->dtStart().date().daysTo(endDate) >= 0 && beginDate.daysTo(info->dtEnd().date()) >= 0) { clearItem(); updateSchedule(false, info); return true; } return false; } void CWeekScheduleView::changeDate(const DSchedule::Ptr &info) { int index = m_ScheduleInfo.indexOf(info); if (index < 0) { m_ScheduleInfo.append(info); } else { m_ScheduleInfo[index] = info; } clearItem(); updateSchedule(true); } void CWeekScheduleView::setHeight(const int ScheduleHeight, const int dayHeight) { m_ScheduleHeight = ScheduleHeight; m_DayHeight = dayHeight; setMaxNum(); } void CWeekScheduleView::updateSchedule(const bool isNormalDisplay, const DSchedule::Ptr &info) { DSchedule::List schedulev; schedulev.clear(); schedulev = m_ScheduleInfo; if (isNormalDisplay) { Q_UNUSED(info); } else { schedulev.append(info); } QDate tbegindate, tenddate; QVector vMDaySchedule; m_ColumnScheduleCount.clear(); m_ColumnScheduleCount.fill(0, m_colum); for (int i = 0; i < schedulev.size(); ++i) { //日程时间重新标定 tbegindate = schedulev.at(i)->dtStart().date(); tenddate = schedulev.at(i)->dtEnd().date(); if (tenddate < beginDate || tbegindate > endDate) continue; if (tbegindate < beginDate) tbegindate = beginDate; if (tenddate > endDate) tenddate = endDate; //日程信息 MScheduleDateRangeInfo _rangeInfo; _rangeInfo.bdate = tbegindate; _rangeInfo.edate = tenddate; _rangeInfo.tData = schedulev.at(i); _rangeInfo.state = false; vMDaySchedule.append(_rangeInfo); qint64 pos = beginDate.daysTo(_rangeInfo.bdate); qint64 count = _rangeInfo.bdate.daysTo(_rangeInfo.edate); int j = static_cast(pos); for (; j < (pos + count + 1); ++j) { ++m_ColumnScheduleCount[j]; } } std::sort(vMDaySchedule.begin(), vMDaySchedule.end()); sortAndFilter(vMDaySchedule); } void CWeekScheduleView::clearItem() { for (int i = 0; i < m_scheduleShowItem.count(); i++) { delete m_scheduleShowItem[i]; } m_scheduleShowItem.clear(); } void CWeekScheduleView::setMaxNum() { m_MaxNum = m_DayHeight / (m_ScheduleHeight + 1); } void CWeekScheduleView::mScheduleClear() { for (int i = 0; i < m_MScheduleInfo.size(); ++i) { m_MScheduleInfo[i].clear(); } m_MScheduleInfo.clear(); } void CWeekScheduleView::sortAndFilter(QVector &vMDaySchedule) { QVector> scheduleFill; QVector scheduf; //初始化 //m_colum列 scheduf.fill(false, m_colum); //m_MaxNum 行 scheduleFill.fill(scheduf, m_MaxNum); //标签起始位置 int postion = 0; //标签结束位置 int end = 0; mScheduleClear(); for (int i = 0; i < vMDaySchedule.size(); ++i) { //获取起始位置 postion = static_cast(beginDate.daysTo(vMDaySchedule.at(i).bdate)); //获取结束位置 end = static_cast(beginDate.daysTo(vMDaySchedule.at(i).edate)); //初始化当前行 int row = 0; int pos = postion; //日程长度 int count = 0; int scheduleRow = row; for (; postion < end + 1; ++postion) { //如果当前行等于最大显示行 if (row == m_MaxNum) { //初始化当前行 row = 0; //初始化当前位置 pos = postion; } while (row < m_MaxNum) { if (m_MScheduleInfo.size() < (row + 1)) { RowScheduleInfo ms; m_MScheduleInfo.append(ms); } //如果该位置没有被占用 if (!scheduleFill[row][postion]) { //如果该列日程总数大于最大显m_MScheduleInfo示数且该显示行没有超过最大显示行 if ((m_ColumnScheduleCount[postion] > m_MaxNum) && (row >= m_MaxNum - 1)) { //占用该位置 scheduleFill[row][postion] = true; //如果该位置不为起始位置 if (pos != postion) { addShowSchedule(pos, postion - 1, row, vMDaySchedule.at(i).tData); } //设置还有xxx项 MScheduleDateRangeInfo info; info.bdate = beginDate.addDays(postion); info.edate = info.bdate; info.num = m_ColumnScheduleCount[postion] - m_MaxNum + 1; info.state = true; m_MScheduleInfo[row].append(info); //将该位置设为日程新的起始位置 pos = postion; //从该列0行开始继续,因为for循环最后会跳转到下一列,所以在这里--以保证下次循环还在该列 --postion; row = 0; count = 0; } else { scheduleFill[row][postion] = true; ++count; scheduleRow = row; } break; } else { //如果有显示的日程 if (count > 0) { //如果该位置不为起始位置 if (pos != postion) { addShowSchedule(pos, postion - 1, scheduleRow, vMDaySchedule.at(i).tData); } } ++row; } } } //如果开始位置小于7并且长度大于0,则添加显示日程 //开始位置0-6,显示长度1-7 if (pos < 7 && count > 0) { addShowSchedule(pos, postion - 1, scheduleRow, vMDaySchedule.at(i).tData); } } } void CWeekScheduleView::addShowSchedule(const int &startPos, const int &endPos, const int &addRow, const DSchedule::Ptr &addInfo) { MScheduleDateRangeInfo scheduleInfo; //设置显示的开始日期 scheduleInfo.bdate = beginDate.addDays(startPos); //设置显示的结束日期 scheduleInfo.edate = beginDate.addDays(endPos); //false表示该信息为正常日程信息 scheduleInfo.state = false; scheduleInfo.num = 0; //设置需要显示的日程 scheduleInfo.tData = addInfo; //添加需要显示的日程 m_MScheduleInfo[addRow].append(scheduleInfo); } dde-calendar-5.14.13/calendar-client/src/widget/monthWidget/monthscheduleview.h000066400000000000000000000076211473346337000275060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MONTHSCHEDULEVIEW_H #define MONTHSCHEDULEVIEW_H #include "dschedule.h" #include "scheduledaterangeinfo.h" #include "graphicsItem/draginfoitem.h" #include "graphicsItem/cmonthscheduleitem.h" #include #include #include DWIDGET_USE_NAMESPACE class CWeekScheduleView; class CMonthScheduleView : public QObject { Q_OBJECT public: explicit CMonthScheduleView(QWidget *parent, QGraphicsScene *scene); ~CMonthScheduleView() override; void setallsize(int w, int h, int left, int top, int buttom, int itemHeight = 22); void setData(QMap &data, int currentMonth); void updateData(); void updateHeight(); QVector getScheduleShowItem() const; int getScheduleHeight() const { return m_ItemHeight; } void updateDate(const DSchedule::Ptr &info); void changeDate(const DSchedule::Ptr &info); void updateDate(const int row, const DSchedule::Ptr &info); signals: void signalsUpdateSchedule(int id = 0); void signalsCurrentScheduleDate(QDate date); void signalUpdateUI(int type); void signalPressScheduleShow(const bool isShow, const DSchedule::Ptr &out = DSchedule::Ptr()); public slots: void slotFontChange(); private: void updateDateShow(QVector> &vCMDaySchedule, QVector &scheduleShowItem); void createScheduleItemWidget(MScheduleDateRangeInfo info, int cNum, QVector &scheduleShowItem); void createScheduleNumWidget(MScheduleDateRangeInfo info, int cNum, QVector &scheduleShowItem); void computePos(int cNum, QDate bgeindate, QDate enddate, QPoint &pos, int &fw, int &fh); private: QMap m_data; int m_cNum = 2; //日程层数 int m_currentMonth = 0; QDate m_beginDate; QDate m_endDate; int m_width = 0; int m_height = 0; int m_leftMargin = 0; int m_topMargin = 0; int m_bottomMargin = 0; QVector m_weekSchedule; int m_ItemHeight = 22; QGraphicsScene *m_Scene = nullptr; }; class CWeekScheduleView : public QObject { Q_OBJECT typedef QVector RowScheduleInfo; public: explicit CWeekScheduleView(QObject *parent = nullptr); ~CWeekScheduleView() override; public: void setData(QMap &data, const QDate &startDate, const QDate &stopDate); bool addData(const DSchedule::Ptr &info); void changeDate(const DSchedule::Ptr &info); void setHeight(const int ScheduleHeight, const int dayHeight); QVector getMScheduleInfo() const { return m_MScheduleInfo; } QVector &getScheduleShowItem() { return m_scheduleShowItem; } void updateSchedule(const bool isNormalDisplay, const DSchedule::Ptr &info = DSchedule::Ptr()); void clearItem(); private: void setMaxNum(); void mScheduleClear(); void sortAndFilter(QVector &vMDaySchedule); /** * @brief addShowSchedule 添加显示的日程 * @param startPos 其实位置 * @param endPos 结束位置 * @param addRow 需要添加的行 * @param addInfo 添加的日程 */ void addShowSchedule(const int &startPos, const int &endPos, const int &addRow, const DSchedule::Ptr &addInfo); private: QVector m_scheduleShowItem; QVector m_MScheduleInfo; DSchedule::List m_ScheduleInfo; QVector m_ColumnScheduleCount; int m_ScheduleHeight = 0; int m_DayHeight = 0; int m_MaxNum = 0; QDate beginDate; QDate endDate; int m_colum = 0; }; #endif // MONTHSCHEDULEVIEW_H dde-calendar-5.14.13/calendar-client/src/widget/monthWidget/monthview.cpp000066400000000000000000000146771473346337000263350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "monthview.h" #include "scheduledlg.h" #include "scheduledatamanage.h" #include "calendarglobalenv.h" #include #include #include #include #include #include #include DGUI_USE_NAMESPACE /** * @brief setTheMe 根据系统主题类型设置颜色 * @param type 系统主题类型 */ void CMonthView::setTheMe(int type) { m_weekIndicator->setTheMe(type); m_monthGraphicsView->setTheMe(type); } CMonthView::CMonthView(QWidget *parent) : DWidget(parent) { m_weekIndicator = new CMonthWeekView; m_monthGraphicsView = new CMonthGraphicsview(this); connect(m_monthGraphicsView, &CMonthGraphicsview::signalsViewSelectDate, this, &CMonthView::signalsViewSelectDate); connect(m_monthGraphicsView, &CMonthGraphicsview::signalScheduleShow, this, &CMonthView::slotScheduleRemindWidget); connect(m_monthGraphicsView, &CMonthGraphicsview::signalAngleDelta, this, &CMonthView::signalAngleDelta); connect(m_monthGraphicsView, &CMonthGraphicsview::signalSwitchPrePage, this, &CMonthView::signalSwitchPrePage); connect(m_monthGraphicsView, &CMonthGraphicsview::signalSwitchNextPage, this, &CMonthView::signalSwitchNextPage); connect(m_monthGraphicsView, &CMonthGraphicsview::signalGotoDayView, this, &CMonthView::signalsViewSelectDate); //新建最终布局 m_mainLayout = new QVBoxLayout; m_mainLayout->setMargin(0); m_mainLayout->setSpacing(0); m_mainLayout->addWidget(m_weekIndicator); m_mainLayout->addWidget(m_monthGraphicsView); setLayout(m_mainLayout); m_createAction = new QAction(tr("New event"), this); m_remindWidget = new ScheduleRemindWidget(this); setMouseTracking(true); } CMonthView::~CMonthView() { } void CMonthView::setSelectSchedule(const DSchedule::Ptr &scheduleInfo) { m_monthGraphicsView->setSelectSearchSchedule(scheduleInfo); } void CMonthView::slotScheduleRemindWidget(const bool isShow, const DSchedule::Ptr &out) { if (isShow) { //获取当前鼠标位置 QVariant variant; CalendarGlobalEnv::getGlobalEnv()->getValueByKey(DDECalendar::CursorPointKey, variant); QPoint remindPos = variant.value(); //根据类型获取颜色 CSchedulesColor gdColor = CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType(out->scheduleTypeID()); m_remindWidget->setData(out, gdColor); // 因为将提示框从window改为widget,要转换为相对窗口的坐标 auto rPos = this->mapFromGlobal(remindPos); //根据提示框在屏幕的位置设置箭头方向 qWarning() << "window width: " << this->window()->width() << "pos:" << rPos << "remind width: " << m_remindWidget->width(); if (rPos.x() < this->window()->width() / 2) { // 显示到右侧 m_remindWidget->setDirection(DArrowRectangle::ArrowLeft); m_remindWidget->show(rPos.x()+10, rPos.y()); } else { // 显示到左侧 m_remindWidget->setDirection(DArrowRectangle::ArrowRight); m_remindWidget->show(rPos.x()-10, rPos.y()); } } else { m_remindWidget->hide(); } } void CMonthView::resizeEvent(QResizeEvent *event) { DWidget::resizeEvent(event); QMargins margins = m_mainLayout->contentsMargins(); m_weekIndicator->setFixedSize(width() - margins.left(), static_cast(height() * 0.1042 + 0.5)); } void CMonthView::mousePressEvent(QMouseEvent *event) { Q_UNUSED(event); slotScheduleRemindWidget(false); } bool CMonthView::event(QEvent *event) { if (event->type() == QEvent::FocusIn) { m_monthGraphicsView->setFocus(Qt::TabFocusReason); return true; } return DWidget::event(event); } /** * @brief setFirstWeekday 设置每周的第一天是周几 * @param weekday 周几 */ void CMonthView::setFirstWeekday(Qt::DayOfWeek weekday) { m_firstWeekDay = weekday; m_weekIndicator->setFirstDay(weekday); } /** * @brief CMonthView::setShowDate 设置显示日期 * @param showDate */ void CMonthView::setShowDate(const QVector &showDate) { m_showDate = showDate; m_monthGraphicsView->setDate(m_showDate); } /** * @brief CMonthView::setHuangLiInfo 设置黄历信息 * @param huangLiInfo */ void CMonthView::setHuangLiInfo(const QMap &huangLiInfo) { m_monthGraphicsView->setLunarInfo(huangLiInfo); } /** * @brief CMonthView::setFestival 设置班休信息 * @param festivalInfo */ void CMonthView::setFestival(const QMap &festivalInfo) { m_monthGraphicsView->setFestival(festivalInfo); } /** * @brief CMonthView::setScheduleInfo 设置显示日程 * @param scheduleInfo */ void CMonthView::setScheduleInfo(const QMap &scheduleInfo) { m_monthGraphicsView->setScheduleInfo(scheduleInfo); } /** * @brief CMonthView::setSearchScheduleInfo 设置搜索日程 * @param searchScheduleInfo */ void CMonthView::setSearchScheduleInfo(const DSchedule::List &searchScheduleInfo) { m_monthGraphicsView->setSearchScheduleInfo(searchScheduleInfo); } /** * @brief CMonthView::setCurrentDate 设置当前时间 * @param currentDate */ void CMonthView::setCurrentDate(const QDate ¤tDate) { m_weekIndicator->setCurrentDate(currentDate); m_monthGraphicsView->setCurrentDate(currentDate); } void CMonthView::setRemindWidgetTimeFormat(QString timeformat) { m_remindWidget->setTimeFormat(timeformat); } /** * @brief CMonthView::deleteSelectSchedule 快捷键删除日程 */ void CMonthView::deleteSelectSchedule() { m_monthGraphicsView->slotDeleteItem(); } void CMonthView::setLunarVisible(bool visible) { m_monthGraphicsView->setLunarVisible(visible); } DSchedule::Ptr CMonthView::getScheduleInfo(const QDate &beginDate, const QDate &endDate) { DSchedule::Ptr info; info.reset(new DSchedule()); if (beginDate.daysTo(endDate) > 0) { info->setDtStart(QDateTime(beginDate, QTime(0, 0, 0))); info->setDtEnd(QDateTime(endDate, QTime(23, 59, 59))); } else { info->setDtStart(QDateTime(endDate, QTime(0, 0, 0))); info->setDtEnd(QDateTime(beginDate, QTime(23, 59, 00))); } info->setSummary(tr("New Event")); info->setAllDay(true); info->setAlarmType(DSchedule::Alarm_15Hour_Front); return info; } dde-calendar-5.14.13/calendar-client/src/widget/monthWidget/monthview.h000066400000000000000000000071571473346337000257750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MONTHVIEW_H #define MONTHVIEW_H #include "monthweekview.h" #include "scheduleRemindWidget.h" #include "monthgraphiview.h" #include "dschedule.h" #include #include #include DWIDGET_USE_NAMESPACE class CMonthView: public DWidget { Q_OBJECT public: //根据系统主题类型设置颜色 void setTheMe(int type = 0); /** * @brief isDragging 是否可以拖拽 * @return 是否可以拖拽 */ bool isDragging()const { return m_monthGraphicsView->getDragStatus() != 4; } public: explicit CMonthView(QWidget *parent = nullptr); ~CMonthView() override; //设置每周首日 void setFirstWeekday(Qt::DayOfWeek weekday); //设置显示日期 void setShowDate(const QVector &showDate); //设置黄历信息 void setHuangLiInfo(const QMap &huangLiInfo); //设置班休信息 void setFestival(const QMap &festivalInfo); //设置显示日程 void setScheduleInfo(const QMap &scheduleInfo); //设置搜索日程 void setSearchScheduleInfo(const DSchedule::List &searchScheduleInfo); //设置当前时间 void setCurrentDate(const QDate ¤tDate); void setRemindWidgetTimeFormat(QString timeformat); void deleteSelectSchedule(); signals: /** * @brief signalsViewSelectDate 切换视图 * @param date 日期 */ void signalsViewSelectDate(QDate date); public slots: /** * @brief setLunarVisible 设置是否显示阴历信息 * @param visible 是否显示阴历信息 */ void setLunarVisible(bool visible); /** * @brief setSelectSchedule 设置选择的日程 * @param scheduleInfo 日程信息 */ void setSelectSchedule(const DSchedule::Ptr &scheduleInfo); public slots: /** * @brief slotScheduleRemindWidget 日程浮框 * @param isShow 是否显示日程浮框 * @param out 日程信息 */ void slotScheduleRemindWidget(const bool isShow, const DSchedule::Ptr &out = DSchedule::Ptr()); signals: /** * @brief signalAngleDelta 发送滚动信号滚动相对量 * @param delta 滚动相对量 */ void signalAngleDelta(int delta); void signalSwitchPrePage(); void signalSwitchNextPage(); protected: /** * @brief resizeEvent 窗口大小调整 * @param event 窗口大小调整事件 */ void resizeEvent(QResizeEvent *event) override; /** * @brief mousePressEvent 鼠标单击 * @param event 鼠标事件 */ void mousePressEvent(QMouseEvent *event) override; bool event(QEvent *event) override; private: DSchedule::Ptr getScheduleInfo(const QDate &beginDate, const QDate &endDate); private: CMonthGraphicsview *m_monthGraphicsView = nullptr; QVector m_showDate; QDate m_currentDate; QDate m_createDate; CMonthWeekView *m_weekIndicator = nullptr; int m_firstWeekDay = 0; QAction *m_createAction = nullptr; // 创建日程 QVBoxLayout *m_mainLayout = nullptr; bool m_sflag = true; ScheduleRemindWidget *m_remindWidget = nullptr; QPoint m_PressPoint; bool isCreate; QDate m_PressDate; QDate m_MoveDate; }; #endif // MYCALENDARWIDGET_H dde-calendar-5.14.13/calendar-client/src/widget/monthWidget/monthweekview.cpp000066400000000000000000000103261473346337000271740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "monthweekview.h" #include "scheduledatamanage.h" #include #include #include #include #include DGUI_USE_NAMESPACE CMonthWeekView::CMonthWeekView(QWidget *parent) : DWidget(parent) { for (int i = 0 ; i < 7 ; ++i) { m_weekRect.append(new WeekRect()); } } CMonthWeekView::~CMonthWeekView() { for (int i = 0 ; i < 7 ; ++i) { WeekRect *weekRect = m_weekRect.at(i); delete weekRect; } m_weekRect.clear(); } void CMonthWeekView::setFirstDay(const Qt::DayOfWeek weekday) { m_firstWeek = weekday; updateWeek(); } void CMonthWeekView::setTheMe(int type) { if (type == 0 || type == 1) { m_backgroundColor = "#E6EEF2"; } else if (type == 2) { m_backgroundColor = "#82AEC1"; m_backgroundColor.setAlphaF(0.10); } for (int i = 0 ; i < m_weekRect.size(); ++i) { m_weekRect.at(i)->setTheMe(type); } } void CMonthWeekView::updateWeek() { Qt::DayOfWeek _setWeek; bool _showLine{false}; for (int i = 0; i < m_weekRect.size(); ++i) { int weekNum = (m_firstWeek + i) % 7; _setWeek = static_cast(weekNum == 0 ? 7 : weekNum); //如果为当前时间所在周则绘制横线 if (_setWeek == m_currentWeek) { _showLine = true; } else { _showLine = false; } m_weekRect.at(i)->setWeek(_setWeek, _showLine); } update(); } /** * @brief CMonthWeekView::setCurrentDate 设置当前时间,获取当前时间所在周 * @param currentDate */ void CMonthWeekView::setCurrentDate(const QDate ¤tDate) { m_currentWeek = static_cast(currentDate.dayOfWeek()); updateWeek(); } void CMonthWeekView::resizeEvent(QResizeEvent *event) { qreal weekRectWith = width() / 7; QRectF _rectF; for (int i = 0 ; i < m_weekRect.size(); ++i) { _rectF.setRect(i * weekRectWith, 0, weekRectWith, this->height()); m_weekRect.at(i)->setRect(_rectF); } DWidget::resizeEvent(event); } void CMonthWeekView::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); QPainterPath painterPath; //从左下角开始 painterPath.moveTo(0, this->height()); painterPath.lineTo(this->width(), this->height()); painterPath.lineTo(this->width(), m_radius); painterPath.arcTo(QRect(this->width() - m_radius * 2, 0, m_radius * 2, m_radius * 2), 0, 90); painterPath.lineTo(m_radius, 0); painterPath.arcTo(QRect(0, 0, m_radius * 2, m_radius * 2), 90, 90); painter.setBrush(m_backgroundColor); painter.setPen(Qt::NoPen); painter.drawPath(painterPath); for (int i = 0 ; i < m_weekRect.size(); ++i) { m_weekRect.at(i)->paintRect(painter); } painter.end(); } WeekRect::WeekRect() : m_showLine(false) { m_font.setWeight(QFont::Medium); m_font.setPixelSize(DDECalendar::FontSizeSixteen); } void WeekRect::setWeek(const Qt::DayOfWeek &showWeek, const bool &showLine) { m_showWeek = showWeek; m_showLine = showLine; QLocale locale; m_weekStr = locale.dayName(m_showWeek, QLocale::ShortFormat); } void WeekRect::setRect(const QRectF &rectF) { m_rectF = rectF; } void WeekRect::paintRect(QPainter &painter) { //绘制文字 painter.save(); painter.setFont(m_font); if (m_showWeek > 5) { painter.setPen(m_activeColor); } else { painter.setPen(m_testColor); } painter.drawText(m_rectF, Qt::AlignCenter, m_weekStr); painter.restore(); if (m_showLine) { //绘制横线 painter.save(); painter.setPen(Qt::NoPen); painter.setBrush(m_activeColor); painter.drawRect(QRectF(m_rectF.x(), m_rectF.height() - m_lineHeight, m_rectF.width(), m_lineHeight)); painter.restore(); } } void WeekRect::setTheMe(int type) { m_activeColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); if (type == 0 || type == 1) { m_testColor = "#6F6F6F"; } else { m_testColor = "#C0C6D4"; } } dde-calendar-5.14.13/calendar-client/src/widget/monthWidget/monthweekview.h000066400000000000000000000030201473346337000266320ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MONTHWEEKVIEW_H #define MONTHWEEKVIEW_H #include "constants.h" #include DWIDGET_USE_NAMESPACE class WeekRect; /** * @brief The CMonthWeekView class * 月视图周显示 */ class CMonthWeekView : public DWidget { Q_OBJECT public: explicit CMonthWeekView(QWidget *parent = nullptr); ~CMonthWeekView() override; void setFirstDay(const Qt::DayOfWeek weekday); void setTheMe(int type = 0); void updateWeek(); //设置当前时间 void setCurrentDate(const QDate ¤tDate); protected: void resizeEvent(QResizeEvent *event) override; void paintEvent(QPaintEvent *event) override; private: QColor m_backgroundColor; QVector m_weekRect; int m_radius = 8; Qt::DayOfWeek m_firstWeek{Qt::Sunday}; Qt::DayOfWeek m_currentWeek{Qt::Monday}; }; class WeekRect { public: WeekRect(); void setWeek(const Qt::DayOfWeek &showWeek, const bool &showLine = false); void setRect(const QRectF &rectF); void paintRect(QPainter &painter); void setTheMe(int type = 0); private: QColor m_activeColor; QColor m_testColor; Qt::DayOfWeek m_showWeek; QString m_weekStr; QFont m_font; QRectF m_rectF; bool m_showLine; qreal m_lineHeight{2}; }; #endif // WEEKINDICATOR_H dde-calendar-5.14.13/calendar-client/src/widget/monthWidget/monthwindow.cpp000066400000000000000000000315711473346337000266620ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "monthwindow.h" #include "monthview.h" #include "monthdayview.h" #include "constants.h" #include "schedulesearchview.h" #include "todaybutton.h" #include "scheduledatamanage.h" #include #include #include DGUI_USE_NAMESPACE CMonthWindow::CMonthWindow(QWidget *parent) : CScheduleBaseWidget(parent) { initUI(); initConnection(); setLunarVisible(m_calendarManager->getShowLunar()); } CMonthWindow::~CMonthWindow() { disconnect(m_today, &CTodayButton::clicked, this, &CMonthWindow::slottoday); delete m_monthDayView; m_monthDayView = nullptr; delete m_monthView; m_monthView = nullptr; } /** * @brief setLunarVisible 设置是否显示阴历信息 * @param state 是否显示阴历信息 */ void CMonthWindow::setLunarVisible(bool state) { m_monthView->setLunarVisible(state); m_YearLunarLabel->setVisible(state); } /** * @brief setTheMe 根据系统主题类型设置颜色 * @param type 系统主题类型 */ void CMonthWindow::setTheMe(int type) { if (type == 0 || type == 1) { DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(pa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_YearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_YearLunarLabel->setPalette(LunaPa); m_YearLunarLabel->setForegroundRole(DPalette::WindowText); DPalette gpa = m_gridWidget->palette(); gpa.setColor(DPalette::Background, "#F8F8F8"); m_gridWidget->setPalette(gpa); m_gridWidget->setBackgroundRole(DPalette::Background); } else if (type == 2) { DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#C0C6D4")); m_YearLabel->setPalette(pa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_YearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#798BA8")); m_YearLunarLabel->setPalette(LunaPa); m_YearLunarLabel->setForegroundRole(DPalette::WindowText); DPalette gpa = m_gridWidget->palette(); gpa.setColor(DPalette::Background, "#252525"); m_gridWidget->setPalette(gpa); m_gridWidget->setBackgroundRole(DPalette::Background); } m_monthDayView->setTheMe(type); m_monthView->setTheMe(type); } void CMonthWindow::setYearData() { if (getSelectDate() == getCurrendDateTime().date()) { m_today->setText(QCoreApplication::translate("today", "Today", "Today")); } else { m_today->setText(QCoreApplication::translate("Return Today", "Today", "Return Today")); } if (getShowLunar()) { m_YearLabel->setText(QString::number(getSelectDate().year()) + tr("Y")); } else { m_YearLabel->setText(QString::number(getSelectDate().year())); } } /** * @brief CMonthWindow::updateShowDate 更新显示时间 * @param isUpdateBar */ void CMonthWindow::updateShowDate(const bool isUpdateBar) { setYearData(); const QDate _selectDate = m_calendarManager->getSelectDate(); Qt::DayOfWeek _firstWeek = m_calendarManager->getFirstDayOfWeek(); m_monthView->setFirstWeekday(_firstWeek); QVector _monthShowData = m_calendarManager->getMonthDate(_selectDate.year(), _selectDate.month()); m_startDate = _monthShowData.first(); m_stopDate = _monthShowData.last(); m_monthView->setShowDate(_monthShowData); m_monthView->setRemindWidgetTimeFormat((m_calendarManager->getTimeShowType() ? "AP " : "") + m_calendarManager->getTimeFormat()); if (isUpdateBar) m_monthDayView->setSelectDate(_selectDate); //设置12个月份显示 //如果为中文环境则显示班休和农历信息 if (getShowLunar()) { updateShowLunar(); } //切换月份须更新显示日程 updateShowSchedule(); } /** * @brief CMonthWindow::setCurrentDateTime 设置当前时间 * @param currentDate */ void CMonthWindow::setCurrentDateTime(const QDateTime ¤tDate) { CScheduleBaseWidget::setCurrentDateTime(currentDate); //更新当前时间 m_monthView->setCurrentDate(currentDate.date()); } /** * @brief CMonthWindow::updateShowSchedule 更新日程显示 */ void CMonthWindow::updateShowSchedule() { QMap map = gScheduleManager->getScheduleMap(m_startDate, m_stopDate); //因获取的日程中只有有日程的项,数量不等于开始时间到结束时间的天数, //但是视图显示要求数量为开始时间到结束时间的天数,所以在没有日程的时间中添加空日期列表 QDate date = m_startDate; QDate eDate = m_stopDate.addDays(1); while (date != eDate) { if (!map.contains(date)) { map[date] = DSchedule::List(); } date = date.addDays(1); } m_monthView->setScheduleInfo(map); } /** * @brief CMonthWindow::updateShowLunar 更新显示农历信息 */ void CMonthWindow::updateShowLunar() { getLunarInfo(); m_YearLunarLabel->setText(m_lunarYear); QMap _monthFestivalInfo = gLunarManager->getFestivalInfoDateMap(m_startDate, m_stopDate); m_monthView->setFestival(_monthFestivalInfo); QMap _monthHuangLiInfo = gLunarManager->getHuangLiDayMap(m_startDate, m_stopDate); m_monthView->setHuangLiInfo(_monthHuangLiInfo); } /** * @brief CMonthWindow::updateSearchScheduleInfo 更新搜索日程信息 */ void CMonthWindow::updateSearchScheduleInfo() { //获取搜索日程信息 m_monthView->setSearchScheduleInfo(gScheduleManager->getAllSearchedScheduleList()); } /** * @brief CMonthWindow::setSelectSearchScheduleInfo 设置选中日程 * @param info */ void CMonthWindow::setSelectSearchScheduleInfo(const DSchedule::Ptr &info) { m_monthView->setSelectSchedule(info); } /** * @brief CMonthWindow::setSearchWFlag 设置是否显示搜索界面 * @param flag */ void CMonthWindow::setSearchWFlag(bool flag) { m_searchFlag = flag; m_monthDayView->setSearchflag(flag); } /** * @brief CMonthWindow::deleteselectSchedule 快捷键删除日程 */ void CMonthWindow::deleteselectSchedule() { m_monthView->deleteSelectSchedule(); } /** * @brief previousMonth 选择上一个月份 */ void CMonthWindow::previousMonth() { slideMonth(false); } /** * @brief nextMonth 选择下一个月份 */ void CMonthWindow::nextMonth() { slideMonth(true); } /** * @brief initUI 初始化界面 */ void CMonthWindow::initUI() { m_today = new CTodayButton; m_today->setText(QCoreApplication::translate("today", "Today", "Today")); m_today->setFixedSize(DDEMonthCalendar::MTodayWindth, DDEMonthCalendar::MTodayHeight); QFont todayfont; todayfont.setWeight(QFont::Medium); todayfont.setPixelSize(DDECalendar::FontSizeFourteen); m_today->setFont(todayfont); m_YearLabel = new QLabel(); m_YearLabel->setFixedHeight(DDEMonthCalendar::M_YLabelHeight); m_YearLunarLabel = new QLabel(); m_YearLunarLabel->setFixedSize(DDEMonthCalendar::M_YLunaLabelWindth, DDEMonthCalendar::M_YLunaLabelHeight); QFont yLabelF; yLabelF.setWeight(QFont::Medium); yLabelF.setPixelSize(DDECalendar::FontSizeTwentyfour); m_YearLabel->setFont(yLabelF); DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(pa); yLabelF.setPixelSize(DDECalendar::FontSizeFourteen); m_YearLunarLabel->setFont(yLabelF); DPalette Lunarpa = m_YearLunarLabel->palette(); Lunarpa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_YearLunarLabel->setPalette(Lunarpa); m_monthDayView = new CMonthDayView(this); QHBoxLayout *yeartitleLayout = new QHBoxLayout; yeartitleLayout->setMargin(0); yeartitleLayout->setSpacing(0); yeartitleLayout->addSpacing(10); yeartitleLayout->addWidget(m_YearLabel); yeartitleLayout->addWidget(m_dialogIconButton); QHBoxLayout *yeartitleLayout1 = new QHBoxLayout; yeartitleLayout1->setMargin(0); yeartitleLayout1->setSpacing(0); yeartitleLayout1->addWidget(m_YearLunarLabel); yeartitleLayout->addSpacing(6); yeartitleLayout->addLayout(yeartitleLayout1); yeartitleLayout->addStretch(); yeartitleLayout->addWidget(m_monthDayView, 0, Qt::AlignCenter); yeartitleLayout->addStretch(); yeartitleLayout->addWidget(m_today, 0, Qt::AlignRight); m_monthView = new CMonthView(this); m_monthView->setObjectName("monthViewWidget"); m_monthView->setAccessibleName("monthViewWidget"); m_monthView->setCurrentDate(getCurrendDateTime().date()); QVBoxLayout *mhLayout = new QVBoxLayout; mhLayout->setMargin(0); mhLayout->setSpacing(0); mhLayout->addWidget(m_monthView); QVBoxLayout *hhLayout = new QVBoxLayout; hhLayout->setSpacing(0); hhLayout->setMargin(0); //头部控件统一高度为 M_YTopHeight QWidget *top = new QWidget(this); top->setFixedHeight(DDEMonthCalendar::M_YTopHeight); top->setLayout(yeartitleLayout); hhLayout->addWidget(top); m_gridWidget = new DWidget(); m_gridWidget->setContentsMargins(0, 0, 0, 0); m_gridWidget->setAutoFillBackground(true); m_gridWidget->setLayout(mhLayout); hhLayout->addWidget(m_gridWidget); m_tMainLayout = new QHBoxLayout; m_tMainLayout->setMargin(0); m_tMainLayout->setSpacing(0); m_tMainLayout->addLayout(hhLayout); QVBoxLayout *ssLayout = new QVBoxLayout; ssLayout->setMargin(0); ssLayout->setSpacing(0); m_tMainLayout->addLayout(ssLayout); this->setLayout(m_tMainLayout); } /** * @brief initConnection 初始化信号和槽的连接 */ void CMonthWindow::initConnection() { connect(m_today, &DPushButton::clicked, this, &CMonthWindow::slottoday); connect(m_monthDayView, &CMonthDayView::signalsSelectDate, this, &CMonthWindow::slotSetSelectDate); //双击时间修改选择时间和切换到日视图 connect(m_monthView, &CMonthView::signalsViewSelectDate, this, &CMonthWindow::slotViewSelectDate); connect(m_monthView, &CMonthView::signalAngleDelta, this, &CMonthWindow::slotAngleDelta); //月份控件区域左右滚动信号关联 connect(m_monthDayView, &CMonthDayView::signalAngleDelta, this, &CMonthWindow::slotAngleDelta); connect(m_monthView, &CMonthView::signalSwitchPrePage, this, &CMonthWindow::slotSwitchPrePage); connect(m_monthView, &CMonthView::signalSwitchNextPage, this, &CMonthWindow::slotSwitchNextPage); } /** * @brief slideMonth 切换月份,并更新信息 * @param next 是否切换到下一个月 */ void CMonthWindow::slideMonth(bool next) { slotScheduleHide(); if (m_isSwitchStatus) return; m_isSwitchStatus = true; QTimer::singleShot(5, [this, next]() { if (next) { setSelectDate(getSelectDate().addMonths(-1), true); } else { setSelectDate(getSelectDate().addMonths(1), true); } //更新日程 updateShowDate(); m_isSwitchStatus = false; }); } /** * @brief slotScheduleHide 隐藏日程浮框 */ void CMonthWindow::slotScheduleHide() { m_monthView->slotScheduleRemindWidget(false); } /** * @brief slotAngleDelta 接受滚动事件滚动相对量 * @param delta 滚动相对量 */ void CMonthWindow::slotAngleDelta(int delta) { //拖拽时禁用 if (!m_monthView->isDragging()) { if (delta > 0) { //下一个月 nextMonth(); } else { //上一个月 previousMonth(); } } } /** * @brief CMonthWindow::slotViewSelectDate 设置选择时间切换日视图 * @param date */ void CMonthWindow::slotViewSelectDate(const QDate &date) { slotScheduleHide(); if (setSelectDate(date, true)) { //更新界面 updateData(); emit signalSwitchView(3); } } void CMonthWindow::slotSwitchPrePage() { nextMonth(); } void CMonthWindow::slotSwitchNextPage() { previousMonth(); } /** * @brief resizeEvent 窗口大小调整 * @param event 窗口大小调整事件 */ void CMonthWindow::resizeEvent(QResizeEvent *event) { qreal dw = width() * 0.5023 + 0.5; int dh = 36; m_monthDayView->setFixedSize(qRound(dw), dh); QWidget::resizeEvent(event); } /** * @brief CMonthWindow::slottoday 返回当前时间 */ void CMonthWindow::slottoday() { //隐藏提示框 slotScheduleHide(); setSelectDate(getCurrendDateTime().date(), true); updateData(); } /** * @brief CMonthWindow::slotSetSelectDate 设置选择时间 * @param date */ void CMonthWindow::slotSetSelectDate(const QDate &date) { slotScheduleHide(); if (setSelectDate(date, true)) { updateShowDate(false); } } dde-calendar-5.14.13/calendar-client/src/widget/monthWidget/monthwindow.h000066400000000000000000000057021473346337000263240ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MONTHWINDOW_H #define MONTHWINDOW_H #include "cschedulebasewidget.h" #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class CScheduleSearchView; class CMonthView; class CMonthDayView; class QHBoxLayout; class CTodayButton; class CMonthWindow: public CScheduleBaseWidget { Q_OBJECT public: explicit CMonthWindow(QWidget *parent = nullptr); ~CMonthWindow() override; //设置是否显示阴历信息 void setLunarVisible(bool state); //根据系统主题类型设置颜色 void setTheMe(int type = 0); //设置年份显示 void setYearData() override; //更新显示时间 void updateShowDate(const bool isUpdateBar = true) override; //设置当前时间 void setCurrentDateTime(const QDateTime ¤tDate) override; //更新日程显示 void updateShowSchedule() override; //更新显示农历信息 void updateShowLunar() override; //更新界面搜索日程显示 void updateSearchScheduleInfo() override; //设置选中搜索日程 void setSelectSearchScheduleInfo(const DSchedule::Ptr &info) override; //设置是否显示搜索界面 void setSearchWFlag(bool flag); //删除选中日程 void deleteselectSchedule() override; public slots: //选择上一个月份 void previousMonth(); //选择下一个月份 void nextMonth(); private: //初始化界面 void initUI(); //初始化信号和槽的连接 void initConnection(); //切换月份,并更新信息 void slideMonth(bool next); signals: /** * @brief signalsCurrentScheduleDate * @param date */ void signalsCurrentScheduleDate(QDate date); public slots: //隐藏日程浮框 void slotScheduleHide(); //接受滚动事件滚动相对量 void slotAngleDelta(int delta); //设置选择时间切换日视图 void slotViewSelectDate(const QDate &date); void slotSwitchPrePage(); void slotSwitchNextPage(); protected: void resizeEvent(QResizeEvent *event) override; private slots: //返回当前时间 void slottoday(); //设置选择的月份 void slotSetSelectDate(const QDate &date); private: CMonthView *m_monthView = nullptr; CMonthDayView *m_monthDayView = nullptr; CTodayButton *m_today = nullptr; QDate m_startDate; QDate m_stopDate; QLabel *m_YearLabel = nullptr; QLabel *m_YearLunarLabel = nullptr; QSpacerItem *m_spaceitem = nullptr; DWidget *m_gridWidget = nullptr; bool m_searchFlag = false; bool m_isSwitchStatus = false; QHBoxLayout *m_tMainLayout = nullptr; }; #endif // YEARWINDOW_H dde-calendar-5.14.13/calendar-client/src/widget/schedulesearchview.cpp000066400000000000000000000770641473346337000257000ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulesearchview.h" #include "schedulectrldlg.h" #include "myscheduleview.h" #include "scheduledlg.h" #include "scheduledatamanage.h" #include "constants.h" #include "cscheduleoperation.h" #include "scheduledaterangeinfo.h" #include "calendarmanage.h" #include "calendarglobalenv.h" #include #include #include #include #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CScheduleSearchItem::CScheduleSearchItem(QWidget *parent) : DLabel(parent) , m_rightMenu(new DMenu(this)) , m_timeFormat(CalendarManager::getInstance()->getTimeFormat()) { //设置对象名称和辅助显示名称 this->setObjectName("CScheduleDataItem"); this->setAccessibleName("CScheduleDataItem"); m_editAction = new QAction(tr("Edit"), this); m_deleteAction = new QAction(tr("Delete"), this); connect(m_editAction, SIGNAL(triggered(bool)), this, SLOT(slotEdit())); connect(m_deleteAction, SIGNAL(triggered(bool)), this, SLOT(slotDelete())); setTheMe(DGuiApplicationHelper::instance()->themeType()); QObject::connect(CalendarManager::getInstance(), &CalendarManager::signalTimeFormatChanged, this, &CScheduleSearchItem::slotTimeFormatChanged); QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::paletteTypeChanged, this, &CScheduleSearchItem::setTheMe); m_mouseStatus = M_NONE; installEventFilter(this); //设置焦点类型 setFocusPolicy(Qt::TabFocus); } void CScheduleSearchItem::setBackgroundColor(QColor color1) { m_Backgroundcolor = color1; } void CScheduleSearchItem::setText(QColor tColor, QFont font) { m_tTextColor = tColor; m_tFont = font; //设置时间显示宽度 setDurationSize(font); } void CScheduleSearchItem::setTimeC(QColor tColor, QFont font) { m_timecolor = tColor; m_timefont = font; } void CScheduleSearchItem::setData(DSchedule::Ptr vScheduleInfo, QDate date) { m_ScheduleInfo = vScheduleInfo; m_date = date; update(); } void CScheduleSearchItem::setRoundtype(int rtype) { m_roundtype = rtype; update(); } void CScheduleSearchItem::setTheMe(int type) { if (type == 2) { m_presscolor.background = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); m_presscolor.background.setAlphaF(1); m_presscolor.timeColor = "#FFFFFF"; m_presscolor.timeColor.setAlphaF(1); m_presscolor.textColor = "#FFFFFF"; m_presscolor.textColor.setAlphaF(1); m_hovercolor.background = "#FFFFFF"; m_hovercolor.background.setAlphaF(0.2); m_hovercolor.timeColor = "#6D7C88"; m_hovercolor.timeColor.setAlphaF(1); m_hovercolor.textColor = "#C0C6D4"; m_hovercolor.textColor.setAlphaF(1); } else { m_presscolor.background = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); m_presscolor.background.setAlphaF(1); m_presscolor.timeColor = "#FFFFFF"; m_presscolor.timeColor.setAlphaF(1); m_presscolor.textColor = "#FFFFFF"; m_presscolor.textColor.setAlphaF(1); m_hovercolor.background = "#000000"; m_hovercolor.background.setAlphaF(0.2); m_hovercolor.timeColor = "#526A7F"; m_hovercolor.timeColor.setAlphaF(1); m_hovercolor.textColor = "#414D68"; m_hovercolor.textColor.setAlphaF(1); } } /** * @brief CScheduleSearchItem::setDurationSize 根据时间字体font设置时间宽度 */ void CScheduleSearchItem::setDurationSize(QFont font) { QFontMetrics fm1(font); QString currentTimeStr = QTime::currentTime().toString("hh:mm"); //设置时间显示最大宽度 m_durationSize = fm1.horizontalAdvance(currentTimeStr + "-" + currentTimeStr); } void CScheduleSearchItem::slotEdit() { CScheduleDlg dlg(0, this); dlg.setData(m_ScheduleInfo); dlg.exec(); } void CScheduleSearchItem::slotDelete() { //删除日程 CScheduleOperation _scheduleOperation(m_ScheduleInfo->scheduleTypeID(), this); bool _isDelete = _scheduleOperation.deleteSchedule(m_ScheduleInfo); //删除日程后,将焦点设置给父类 if (_isDelete) { parentWidget()->setFocus(Qt::TabFocusReason); } else { this->setFocus(); } } /** * @brief CScheduleSearchItem::slotTimeFormatChanged 更新时间显示格式 */ void CScheduleSearchItem::slotTimeFormatChanged(int value) { if (value) { m_timeFormat = "hh:mm"; } else { m_timeFormat = "h:mm"; } update(); } void CScheduleSearchItem::slotSchotCutClicked() { //选中该item时才可以使用快捷键 if (m_tabFocus) { //节日日程不能使用 if (CScheduleOperation::isFestival(m_ScheduleInfo)) return; m_rightMenu->clear(); m_rightMenu->addAction(m_editAction); m_rightMenu->addAction(m_deleteAction); //获取item坐标,并转换为全局坐标 QPointF itemPos = QPointF(this->rect().x() + this->rect().width() / 2, this->rect().y() + this->rect().height() / 2); QPoint shoutCurPos = mapToGlobal(itemPos.toPoint()); m_rightMenu->exec(shoutCurPos); } } void CScheduleSearchItem::paintEvent(QPaintEvent *e) { Q_UNUSED(e); int labelRightX = width() - 2; //绘制区域x方向右边界坐标点 int labelBottomY = height(); //绘制区域y方向下边界坐标点 QPainter painter(this); QColor bColor = m_Backgroundcolor; QColor textcolor = m_tTextColor; QColor timecolor = m_timecolor; switch (m_mouseStatus) { case M_NONE: { bColor = m_Backgroundcolor; textcolor = m_tTextColor; timecolor = m_timecolor; } break; case M_HOVER: { bColor = m_hovercolor.background; textcolor = m_hovercolor.textColor; timecolor = m_hovercolor.timeColor; } break; case M_PRESS: { bColor = m_presscolor.background; textcolor = m_presscolor.textColor; timecolor = m_presscolor.timeColor; } break; } painter.save(); painter.setRenderHint(QPainter::Antialiasing); // 反锯齿; painter.setBrush(QBrush(bColor)); painter.setPen(Qt::NoPen); QPainterPath painterPath; painterPath.moveTo(m_radius, m_borderframewY); if (m_roundtype == 1 || m_roundtype == 3) { painterPath.arcTo(QRect(m_borderframewX, m_borderframewY, m_radius * 2, m_radius * 2), 90, 90); } else { painterPath.lineTo(m_borderframewX, m_borderframewY); painterPath.lineTo(m_borderframewX, m_radius); } painterPath.lineTo(m_borderframewX, labelBottomY - m_radius); if (m_roundtype == 1 || m_roundtype == 2) { painterPath.arcTo(QRect(m_borderframewX, labelBottomY - m_radius * 2, m_radius * 2, m_radius * 2), 180, 90); } else { painterPath.lineTo(m_borderframewX, labelBottomY); painterPath.lineTo(m_radius, labelBottomY); } painterPath.lineTo(labelRightX - m_radius, labelBottomY); if (m_roundtype == 1 || m_roundtype == 2) { painterPath.arcTo(QRect(labelRightX - m_radius * 2, labelBottomY - m_radius * 2, m_radius * 2, m_radius * 2), 270, 90); } else { painterPath.lineTo(labelRightX, labelBottomY); painterPath.lineTo(labelRightX, labelBottomY - m_radius); } painterPath.lineTo(labelRightX, m_radius); if (m_roundtype == 1 || m_roundtype == 3) { painterPath.arcTo(QRect(labelRightX - m_radius * 2, m_borderframewY, m_radius * 2, m_radius * 2), 0, 90); } else { painterPath.lineTo(labelRightX, m_borderframewY); painterPath.lineTo(labelRightX - m_radius, m_borderframewY); } painterPath.lineTo(m_radius, m_borderframewY); painterPath.closeSubpath(); painter.drawPath(painterPath); painter.restore(); painter.setFont(m_timefont); painter.setPen(timecolor); QString datestr; datestr = m_ScheduleInfo->dtStart().toString(m_timeFormat) + "-" + m_ScheduleInfo->dtEnd().toString(m_timeFormat); int flag = Qt::AlignLeft | Qt::AlignVCenter; if (m_ScheduleInfo->allDay()) { datestr = tr("All Day"); } painter.drawText(QRect(12, 8, m_durationSize, labelBottomY - 16), flag, datestr); painter.save(); DScheduleType::Ptr type = gScheduleManager->getScheduleTypeByScheduleId(m_ScheduleInfo->scheduleTypeID()); if (nullptr != type) { bColor = type->typeColor().colorCode(); } QPen pen(bColor); pen.setWidth(2); painter.setPen(pen); //由于绘制的矩形大小的改变,所以需要调整起始和截止y坐标 painter.drawLine(m_durationSize + 17, m_borderframewY, m_durationSize + 17, labelBottomY); painter.restore(); painter.setFont(m_tFont); painter.setPen(textcolor); QString ellipsis = "..."; QFontMetrics fm = painter.fontMetrics(); //整个label宽度-文字起始位置 int tilenameW = labelRightX - m_borderframewX - (m_durationSize + 26); QString tSTitleName = m_ScheduleInfo->summary(); tSTitleName.replace("\n", ""); QString str = tSTitleName; QString tStr; for (int i = 0; i < str.count(); i++) { tStr.append(str.at(i)); tStr.append(ellipsis); int widthT = fm.horizontalAdvance(tStr); tStr.remove(ellipsis); if (widthT >= tilenameW) { tStr.chop(1); break; } } if (tStr != str) { tStr = tStr + "..."; } this->setToolTip(str); painter.drawText(QRect(m_durationSize + 17 + 9, 6, tilenameW, labelBottomY), Qt::AlignLeft, tStr); //存在焦点时绘制边框 if (m_tabFocus) { painter.setPen(Qt::NoPen); // 设置画刷颜色 painter.setBrush(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor()); QPainterPath path; int w = 2; //边框宽度 path.addRect(m_borderframewX, m_borderframewY, labelRightX - m_borderframewX, labelBottomY - m_borderframewY); path.addRect(m_borderframewX + w, m_borderframewY + w, labelRightX - 2 * w - m_borderframewX, labelBottomY - 2 * w - m_borderframewY); painter.drawPath(path); } painter.end(); } void CScheduleSearchItem::contextMenuEvent(QContextMenuEvent *event) { Q_UNUSED(event); //判断是否为节假日日程 if (CScheduleOperation::isFestival(m_ScheduleInfo)) return; //在有些环境中弹出右击菜单不会触发leaveEvent,主动更新leave对应的事件处理 m_mouseStatus = M_NONE; update(); m_rightMenu->clear(); m_rightMenu->addAction(m_editAction); m_rightMenu->addAction(m_deleteAction); //不可修改的日程删除按钮无效 m_deleteAction->setEnabled(!CScheduleOperation::scheduleIsInvariant(m_ScheduleInfo)); m_rightMenu->exec(QCursor::pos()); //恢复按钮状态 m_deleteAction->setEnabled(true); } void CScheduleSearchItem::mouseDoubleClickEvent(QMouseEvent *event) { Q_UNUSED(event); CMyScheduleView dlg(m_ScheduleInfo, this); dlg.exec(); } void CScheduleSearchItem::mousePressEvent(QMouseEvent *event) { //鼠标点击取消焦点显示 m_tabFocus = false; if (event->button() == Qt::LeftButton) { //注册为鼠标操作 if (!CalendarGlobalEnv::getGlobalEnv()->registerKey("SearchItemEvent", "MousePress")) { CalendarGlobalEnv::getGlobalEnv()->reviseValue("SearchItemEvent", "MousePress"); } emit signalSelectSchedule(m_ScheduleInfo); } DLabel::mousePressEvent(event); } void CScheduleSearchItem::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { m_mouseStatus = M_HOVER; update(); } DLabel::mouseReleaseEvent(event); } void CScheduleSearchItem::enterEvent(QEvent *event) { DLabel::enterEvent(event); m_mouseStatus = M_HOVER; update(); } void CScheduleSearchItem::leaveEvent(QEvent *event) { DLabel::leaveEvent(event); m_mouseStatus = M_NONE; update(); } bool CScheduleSearchItem::eventFilter(QObject *o, QEvent *e) { Q_UNUSED(o); if (e->type() == QEvent::MouseButtonPress) { QMouseEvent *m_press = dynamic_cast(e); if (m_press->button() == Qt::LeftButton) { m_mouseStatus = M_PRESS; } } update(); return false; } void CScheduleSearchItem::focusInEvent(QFocusEvent *e) { if (e->reason() == Qt::TabFocusReason) { //注册为键盘操作 if (!CalendarGlobalEnv::getGlobalEnv()->registerKey("SearchItemEvent", "Keyboard")) { CalendarGlobalEnv::getGlobalEnv()->reviseValue("SearchItemEvent", "Keyboard"); } emit signalSelectSchedule(m_ScheduleInfo); emit signalSelectCurrentItem(this, false); m_tabFocus = true; } if (e->reason() == Qt::ActiveWindowFocusReason || e->reason() == Qt::PopupFocusReason) { m_tabFocus = m_tabFocusBeforeActive; } DLabel::focusInEvent(e); } void CScheduleSearchItem::focusOutEvent(QFocusEvent *e) { //只针对tab的情况生效 if (e->reason() == Qt::TabFocusReason){ emit signalSelectCurrentItem(this, true); } DLabel::focusOutEvent(e); m_tabFocusBeforeActive = m_tabFocus; m_tabFocus = false; } void CScheduleSearchItem::keyPressEvent(QKeyEvent *event) { //回车显示我的日程详情 if (event->key() == Qt::Key_Return) { CMyScheduleView dlg(m_ScheduleInfo, this); dlg.exec(); } //获取Alt+m显示右击菜单 if (event->modifiers() == Qt::ALT && event->key() == Qt::Key_M) { slotSchotCutClicked(); } DLabel::keyPressEvent(event); } CScheduleSearchView::CScheduleSearchView(QWidget *parent) : DWidget(parent) { QVBoxLayout *layout = new QVBoxLayout; layout->setSpacing(0); m_gradientItemList = new CScheduleListWidget(parent); m_gradientItemList->setAlternatingRowColors(true); layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(m_gradientItemList); // set default row m_gradientItemList->setCurrentRow(0); setLayout(layout); setMouseTracking(true); m_bBackgroundcolor.setAlphaF(0.03); m_gradientItemList->setLineWidth(0); m_labellist.clear(); connect(m_gradientItemList, &CScheduleListWidget::signalListWidgetClicked, this, &CScheduleSearchView::slotListWidgetClicked); connect(gScheduleManager, &ScheduleManager::signalSearchScheduleUpdate, this, &CScheduleSearchView::slotScearedScheduleUpdate); } CScheduleSearchView::~CScheduleSearchView() { for (int i = 0; i < m_gradientItemList->count(); i++) { QListWidgetItem *item11 = m_gradientItemList->takeItem(i); m_gradientItemList->removeItemWidget(item11); delete item11; item11 = nullptr; } m_gradientItemList->clear(); } void CScheduleSearchView::setTheMe(int type) { if (type == 0 || type == 1) { m_bBackgroundcolor = "#000000"; m_bBackgroundcolor.setAlphaF(0.03); m_btimecolor = "#526A7F"; m_btTextColor = "#414D68"; m_lBackgroundcolor = Qt::white; m_lTextColor = "#001A2E"; } else if (type == 2) { m_bBackgroundcolor = "#FFFFFF"; m_bBackgroundcolor.setAlphaF(0.05); m_btimecolor = "#6D7C88"; m_btTextColor = "#C0C6D4"; m_lBackgroundcolor = "#FFFFFF"; m_lBackgroundcolor.setAlphaF(0.0); m_lTextColor = "#C0C6D4"; } updateDateShow(); } /** * @brief CScheduleSearchView::clearSearch 清空搜索 */ void CScheduleSearchView::clearSearch() { m_searchStr.clear(); m_vlistData.clear(); m_scheduleSearchItem.clear(); //窗口隐藏后初始化对应的状态 hasScheduleShow = false; m_selectItem = nullptr; for (int i = 0; i < m_gradientItemList->count(); i++) { QListWidgetItem *item11 = m_gradientItemList->takeItem(i); m_gradientItemList->removeItemWidget(item11); delete item11; item11 = nullptr; } m_labellist.clear(); m_gradientItemList->clear(); //清空搜索数据 gScheduleManager->clearSearchSchedule(); } void CScheduleSearchView::setMaxWidth(const int w) { m_maxWidth = w; } /** * @brief CScheduleSearchView::getHasScheduleShow 是否搜索到日程 */ bool CScheduleSearchView::getHasScheduleShow() { return hasScheduleShow; } /** * @brief CScheduleSearchView::getScheduleStatus 获取当前item是否有焦点 */ bool CScheduleSearchView::getScheduleStatus() { return m_scheduleSearchItem.contains(m_selectItem); } /** * @brief CScheduleSearchView::deleteSchedule 删除选中item */ void CScheduleSearchView::deleteSchedule() { currentDItemIndex = m_scheduleSearchItem.indexOf(m_selectItem); //如果存在该item且为节日日程不可操作 if (currentDItemIndex >= 0 && !CScheduleOperation::isFestival(m_selectItem->getData())) { m_selectItem->slotDelete(); } } /** * @brief CScheduleSearchView::updateDateShow 更新搜索日程显示 */ void CScheduleSearchView::updateDateShow() { m_currentItem = nullptr; //是否搜索到日程标志 hasScheduleShow = true; //清空列表之前先断开信号响应 for(auto widget : m_scheduleSearchItem){ if(nullptr != widget){ widget->disconnect(); } } m_gradientItemList->clear(); m_labellist.clear(); m_scheduleSearchItem.clear(); //找最近日程 QDate tCurrentData = QDate::currentDate(); //搜索日程过滤排序 QMap m_showData; qint64 offset = 1000; QDate topdate = tCurrentData; QMap::const_iterator _iterator = m_vlistData.constBegin(); DSchedule::List _showInfo {}; for (; _iterator != m_vlistData.constEnd(); ++_iterator) { qint64 d = qAbs(_iterator.key().daysTo(tCurrentData)); _showInfo.clear(); for (int i = 0 ; i < _iterator.value().size(); ++i) { //如果开始时间日期为显示日期则显示,跨天日程只显示一个 if (_iterator.value().at(i)->dtStart().date() == _iterator.key() || _iterator == m_vlistData.constBegin()) { _showInfo.append(_iterator.value().at(i)); } } if (_showInfo.size() > 0) { //获取跟当前时间最近的日程时间 if (d < offset) { offset = d; topdate = _iterator.key(); } //排序 std::sort(_showInfo.begin(), _showInfo.end()); m_showData[_iterator.key()] = _showInfo; } } tCurrentData = topdate; QMap::const_iterator _showIterator = m_showData.constBegin(); for (; _showIterator != m_showData.constEnd(); ++_showIterator) { //创建显示日期项 QListWidgetItem *dateItem = createItemWidget(_showIterator.key()); if (_showIterator.key() == tCurrentData) { m_currentItem = dateItem; } if (_showIterator.value().size() == 1) { createItemWidget(_showIterator.value().at(0), _showIterator.key(), 1); } else if (_showIterator.value().size() == 2) { createItemWidget(_showIterator.value().at(0), _showIterator.key(), 3); createItemWidget(_showIterator.value().at(1), _showIterator.key(), 2); } else { createItemWidget(_showIterator.value().at(0), _showIterator.key(), 3); for (int j = 1; j < _showIterator->size() - 1; j++) { createItemWidget(_showIterator.value().at(j), _showIterator.key(), 0); } createItemWidget(_showIterator.value().at(_showIterator->size() - 1), _showIterator.key(), 2); } } if (m_gradientItemList->count() == 0) { hasScheduleShow = false; QListWidgetItem *listItem = new QListWidgetItem(m_gradientItemList); DLabel *gwi = new DLabel(); gwi->setWordWrap(true); QFont font; font.setPixelSize(DDECalendar::FontSizeTwenty); gwi->setAlignment(Qt::AlignCenter); DPalette dayPalette = gwi->palette(); QColor textcolor; int themtype = CScheduleDataManage::getScheduleDataManage()->getTheme(); if (themtype == 2) { textcolor = "#C0C6D4"; textcolor.setAlphaF(0.4); } else { textcolor = "#000000"; textcolor.setAlphaF(0.3); } dayPalette.setColor(DPalette::WindowText, textcolor); dayPalette.setColor(DPalette::Window, m_lBackgroundcolor); gwi->setPalette(dayPalette); gwi->setForegroundRole(DPalette::WindowText); gwi->setFont(font); gwi->move(this->width() - 70, this->height() - 196); gwi->setText(tr("No search results")); gwi->setFixedSize(m_maxWidth - 20, 450); listItem->setSizeHint(QSize(m_maxWidth - 20, 450)); //每次改变Item的高度 listItem->setFlags(Qt::ItemIsTristate); m_gradientItemList->addItem(listItem); m_gradientItemList->setItemWidget(listItem, gwi); m_labellist.append(gwi); } if (m_currentItem != nullptr) { m_gradientItemList->scrollToItem(m_currentItem, QAbstractItemView::PositionAtTop); } if (currentDItemIndex >= 0 && m_scheduleSearchItem.size() > 0) { //删除日程后,重新设置焦点 if (currentDItemIndex < m_scheduleSearchItem.size()) { m_scheduleSearchItem.at(currentDItemIndex)->setFocus(Qt::TabFocusReason); m_selectItem = m_scheduleSearchItem.at(currentDItemIndex); } else { m_scheduleSearchItem.last()->setFocus(Qt::TabFocusReason); m_selectItem = m_scheduleSearchItem.last(); } currentDItemIndex = -1; } } void CScheduleSearchView::createItemWidget(DSchedule::Ptr info, QDate date, int rtype) { DSchedule::Ptr &gd = info; CScheduleSearchItem *gwi = new CScheduleSearchItem(this); QFont font; font.setPixelSize(DDECalendar::FontSizeFourteen); font.setWeight(QFont::Normal); gwi->setBackgroundColor(m_bBackgroundcolor); gwi->setText(m_btTextColor, font); font.setPixelSize(DDECalendar::FontSizeTwelve); gwi->setTimeC(m_btimecolor, font); gwi->setFixedSize(m_maxWidth - 15, 35); gwi->setData(gd, date); gwi->setRoundtype(rtype); //将搜索到的日程添加到容器 m_scheduleSearchItem.append(gwi); connect(gwi, &CScheduleSearchItem::signalSelectSchedule, this, &CScheduleSearchView::slotSelectSchedule); connect(gwi, &CScheduleSearchItem::signalSelectCurrentItem, this, &CScheduleSearchView::slotSelectCurrentItem); QListWidgetItem *listItem = new QListWidgetItem; listItem->setSizeHint(QSize(m_maxWidth - 15, 36)); //每次改变Item的高度 listItem->setFlags(Qt::ItemIsTristate); m_gradientItemList->addItem(listItem); m_gradientItemList->setItemWidget(listItem, gwi); m_labellist.append(gwi); } QListWidgetItem *CScheduleSearchView::createItemWidget(QDate date) { CScheduleSearchDateItem *gwi = new CScheduleSearchDateItem(); QFont font; font.setWeight(QFont::Medium); font.setPixelSize(DDECalendar::FontSizeSixteen); gwi->setBackgroundColor(m_lBackgroundcolor); gwi->setText(m_lTextColor, font); if (date == QDate::currentDate()) { gwi->setText(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(), font); } gwi->setFixedSize(m_maxWidth - 15, 35); gwi->setDate(date); connect(gwi, &CScheduleSearchDateItem::signalLabelScheduleHide, this, &CScheduleSearchView::signalScheduleHide); QListWidgetItem *listItem = new QListWidgetItem; listItem->setSizeHint(QSize(m_maxWidth - 15, 36)); //每次改变Item的高度 listItem->setFlags(Qt::ItemIsTristate); m_gradientItemList->addItem(listItem); m_gradientItemList->setItemWidget(listItem, gwi); m_labellist.append(gwi); return listItem; } /** * @brief CScheduleSearchView::slotsetSearch 需要搜索日程关键字 * @param str */ void CScheduleSearchView::slotsetSearch(QString str) { if (str.isEmpty()) return; m_searchStr = str; QDateTime date = QDateTime::currentDateTime(); QDateTime bDate = date.addMonths(-6); if (bDate.date() < QDate(1900, 1, 1)) { bDate.setDate(QDate(1900, 1, 1)); } QDateTime eDate = date.addMonths(6); //查询搜索 gScheduleManager->searchSchedule(str, bDate, eDate); } void CScheduleSearchView::slotScearedScheduleUpdate() { m_vlistData = gScheduleManager->getAllSearchedScheduleMap(); updateDateShow(); } void CScheduleSearchView::slotSelectSchedule(const DSchedule::Ptr &scheduleInfo) { emit signalSelectSchedule(scheduleInfo); } /** * @brief CScheduleSearchView::updateSearch 更新搜索信息 */ void CScheduleSearchView::updateSearch() { if (isVisible()) { slotsetSearch(m_searchStr); } } /** * @brief CScheduleSearchView::slotSelectCurrentItem 设置选中的item为嘴上面一个,实现滚动效果 * @param item 选中的item * @param itemFocusOut 是否是focusout事件 */ void CScheduleSearchView::slotSelectCurrentItem(CScheduleSearchItem *item, bool itemFocusOut) { for (int i = 0; i < m_gradientItemList->count(); i++) { QListWidgetItem *cItem = m_gradientItemList->item(i); if (item == m_gradientItemList->itemWidget(cItem)) { m_selectItem = item; //设置选中的item为最上面一个 m_gradientItemList->scrollToItem(cItem, QAbstractItemView::PositionAtTop); if (i == m_gradientItemList->count() - 1 && itemFocusOut && !keyPressUP) { //最后一个item,发送信号将焦点传递给搜索框 emit signalSelectCurrentItem(); } } } keyPressUP = false; } /** * @brief CScheduleSearchView::slotListWidgetClicked * 根据listwidget点击事件对当前tab焦点item做对应的处理 */ void CScheduleSearchView::slotListWidgetClicked() { //取消当前tab选中item m_selectItem = nullptr; emit signalScheduleHide(); } void CScheduleSearchView::resizeEvent(QResizeEvent *event) { for (int i = 0; i < m_gradientItemList->count(); i++) { QListWidgetItem *item11 = m_gradientItemList->item(i); item11->setSizeHint(QSize(m_maxWidth - 5, 36)); //每次改变Item的高度 } for (int i = 0; i < m_labellist.count(); i++) { m_labellist.at(i)->setFixedSize(m_maxWidth - 20, 35); m_labellist.at(i)->update(); } if (m_gradientItemList->count() == 1) { QListWidgetItem *item11 = m_gradientItemList->item(0); item11->setSizeHint(QSize(m_maxWidth - 20, qRound(height() * 0.7978))); //每次改变Item的高度 m_labellist.at(0)->setFixedSize(m_maxWidth - 20, qRound(height() * 0.7978)); m_labellist.at(0)->update(); } if (m_gradientItemList->count() > 1) { if (m_currentItem != nullptr) { m_gradientItemList->scrollToItem(m_currentItem, QAbstractItemView::PositionAtTop); } } DWidget::resizeEvent(event); } void CScheduleSearchView::mousePressEvent(QMouseEvent *event) { DWidget::mousePressEvent(event); } void CScheduleSearchView::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Up) { //上键,选中上一个item keyPressUP = true; int selectNum = m_scheduleSearchItem.indexOf(m_selectItem); if (selectNum > 0) m_scheduleSearchItem.at(selectNum - 1)->setFocus(Qt::TabFocusReason); } if (event->key() == Qt::Key_Down) { //下键,选中下一个item int selectNum = m_scheduleSearchItem.indexOf(m_selectItem); if (selectNum < m_scheduleSearchItem.count() - 1) m_scheduleSearchItem.at(selectNum + 1)->setFocus(Qt::TabFocusReason); } DWidget::keyPressEvent(event); } void CScheduleSearchView::focusInEvent(QFocusEvent *e) { DWidget::focusInEvent(e); if (e->reason() == Qt::TabFocusReason) { if (m_scheduleSearchItem.size() > 0) { m_scheduleSearchItem.first()->setFocus(Qt::TabFocusReason); } } } CScheduleSearchDateItem::CScheduleSearchDateItem(QWidget *parent) : DLabel(parent) { //设置对象名称和辅助显示名称 this->setObjectName("CScheduleDateItem"); this->setAccessibleName("CScheduleDateItem"); setAutoFillBackground(true); } void CScheduleSearchDateItem::setBackgroundColor(QColor color1) { m_Backgroundcolor = color1; } void CScheduleSearchDateItem::setText(QColor tColor, QFont font) { m_textcolor = tColor; m_font = font; } void CScheduleSearchDateItem::setDate(QDate date) { m_date = date; } void CScheduleSearchDateItem::paintEvent(QPaintEvent *e) { Q_UNUSED(e); int labelwidth = width(); int labelheight = height(); QPainter painter(this); painter.setRenderHints(QPainter::Antialiasing); painter.setBrush(QBrush(m_Backgroundcolor)); painter.setPen(Qt::NoPen); painter.drawRect(this->rect()); painter.setFont(m_font); painter.setPen(m_textcolor); QLocale locale; QString datestr; if (locale.language() == QLocale::Chinese) { datestr = QString::number(m_date.year()) + tr("Y") + QString::number(m_date.month()) + tr("M") + QString::number(m_date.day()) + tr("D"); } else { datestr = m_date.toString("yyyy/M/d"); } painter.drawText(QRect(12, 8, labelwidth, labelheight - 8), Qt::AlignLeft, datestr); painter.end(); } void CScheduleSearchDateItem::mousePressEvent(QMouseEvent *event) { emit signalLabelScheduleHide(); DLabel::mousePressEvent(event); } CScheduleListWidget::CScheduleListWidget(QWidget *parent) : DListWidget(parent) { //设置对象名称和辅助显示名称 this->setObjectName("CScheduleListWidget"); this->setAccessibleName("CScheduleListWidget"); //接受触摸事件 setAttribute(Qt::WA_AcceptTouchEvents); //截获相应的gesture手势 grabGesture(Qt::TapGesture); grabGesture(Qt::TapAndHoldGesture); grabGesture(Qt::PanGesture); //日程类型发生改变,刷新界面 connect(gAccountManager, &AccountManager::signalScheduleTypeUpdate, [&]() { this->viewport()->update(); }); } CScheduleListWidget::~CScheduleListWidget() { } void CScheduleListWidget::mousePressEvent(QMouseEvent *event) { DListWidget::mousePressEvent(event); emit signalListWidgetClicked(); } void CScheduleListWidget::paintEvent(QPaintEvent *e) { DListWidget::paintEvent(e); QPainter painter(this->viewport()); painter.setRenderHint(QPainter::Antialiasing); //绘制背景色 DPalette _backgroundP; QColor _backgroundColor = _backgroundP.color(QPalette::Active, QPalette::Base); painter.save(); painter.setPen(Qt::NoPen); painter.setBrush(_backgroundColor); painter.drawRect(this->rect()); painter.restore(); //绘制搜索右侧圆角效果 QColor _outBorderColor = _backgroundP.color(QPalette::Active, QPalette::Window); const qreal _radios = 8; painter.setPen(Qt::NoPen); painter.setBrush(_outBorderColor); // const qreal _outWidth = 10; //不需要outwidth const qreal _outWidth = 0; const qreal _rectX = this->width() - _outWidth; QPainterPath _showPath; _showPath.moveTo(_rectX - _radios, 0); _showPath.lineTo(this->width(), 0); _showPath.lineTo(this->width(), this->height()); _showPath.lineTo(_rectX - _radios, this->height()); _showPath.arcTo(_rectX - _radios * 2, this->height() - _radios * 2, _radios * 2, _radios * 2, 270, 90); _showPath.lineTo(_rectX, _radios); _showPath.arcTo(_rectX - _radios * 2, 0, _radios * 2, _radios * 2, 0, 90); painter.drawPath(_showPath); painter.end(); } dde-calendar-5.14.13/calendar-client/src/widget/schedulesearchview.h000066400000000000000000000133651473346337000253370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULESEARCHVIEW_H #define SCHEDULESEARCHVIEW_H #include "dschedule.h" #include "schedulemanager.h" #include #include #include DWIDGET_USE_NAMESPACE class QVBoxLayout; class CScheduleListWidget; class CScheduleSearchItem; class CScheduleSearchDateItem; /** * @brief The CScheduleSearchView class * 搜索结果展示界面 */ class CScheduleSearchView : public DWidget { Q_OBJECT public: explicit CScheduleSearchView(QWidget *parent = nullptr); ~CScheduleSearchView() override; void setTheMe(int type = 0); //清空搜索 void clearSearch(); void setMaxWidth(const int w); bool getHasScheduleShow(); bool getScheduleStatus(); void deleteSchedule(); signals: void signalSelectSchedule(const DSchedule::Ptr &scheduleInfo); void signalScheduleHide(); void signalSelectCurrentItem(); void signalSchotCutClicked(); public slots: //需要搜索日程关键字 void slotsetSearch(QString str); void slotSelectSchedule(const DSchedule::Ptr &scheduleInfo); //更新搜索信息 void updateSearch(); void slotSelectCurrentItem(CScheduleSearchItem *item, bool itemFocusOut); void slotListWidgetClicked(); void slotScearedScheduleUpdate(); protected: void resizeEvent(QResizeEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void keyPressEvent(QKeyEvent *event) override; void focusInEvent(QFocusEvent *e) override; private: void updateDateShow(); void createItemWidget(DSchedule::Ptr info, QDate date, int rtype); QListWidgetItem *createItemWidget(QDate date); private: CScheduleListWidget *m_gradientItemList = nullptr; //下拉列表窗 bool m_widgetFlag; QMap m_vlistData; QVector m_labellist; int m_type; QDate m_currentDate; QColor m_bBackgroundcolor = "#000000"; QColor m_btimecolor = "#526A7F"; QColor m_btTextColor = "#414D68"; QColor m_lBackgroundcolor = Qt::white; QColor m_lTextColor = "#001A2E"; QListWidgetItem *m_currentItem = nullptr; int m_maxWidth = 200; int currentDItemIndex = -1; QString m_searchStr{""}; bool hasScheduleShow = false; bool keyPressUP = false; CScheduleSearchItem *m_selectItem = nullptr; QVector m_scheduleSearchItem{}; }; class CScheduleListWidget : public DListWidget { Q_OBJECT public: explicit CScheduleListWidget(QWidget *parent = nullptr); ~CScheduleListWidget() override; signals: void signalListWidgetClicked(); protected: void mousePressEvent(QMouseEvent *event) override; void paintEvent(QPaintEvent *e) override; }; class CScheduleSearchItem : public DLabel { Q_OBJECT enum MouseStatus { M_NONE, M_PRESS, M_HOVER }; public: explicit CScheduleSearchItem(QWidget *parent = nullptr); void setBackgroundColor(QColor color1); void setText(QColor tColor, QFont font); void setTimeC(QColor tColor, QFont font); void setData(DSchedule::Ptr vScheduleInfo, QDate date); void setRoundtype(int rtype); void setTheMe(int type = 0); void setDurationSize(QFont font); const DSchedule::Ptr &getData() const { return m_ScheduleInfo; } signals: void signalsDelete(CScheduleSearchItem *item); void signalsEdit(CScheduleSearchItem *item); void signalSelectSchedule(const DSchedule::Ptr &scheduleInfo); void signalSelectCurrentItem(CScheduleSearchItem *item, bool focusOutStatus); public slots: void slotEdit(); void slotDelete(); void slotTimeFormatChanged(int value); void slotSchotCutClicked(); protected: void paintEvent(QPaintEvent *e) override; void contextMenuEvent(QContextMenuEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void enterEvent(QEvent *event) override; void leaveEvent(QEvent *event) override; bool eventFilter(QObject *o, QEvent *e) override; void focusInEvent(QFocusEvent *e) override; void focusOutEvent(QFocusEvent *e) override; void keyPressEvent(QKeyEvent *event) override; private: struct ColorStatus { QColor background; QColor timeColor; QColor textColor; }; DSchedule::Ptr m_ScheduleInfo; QAction *m_editAction = nullptr; QAction *m_deleteAction = nullptr; QColor m_Backgroundcolor; ColorStatus m_presscolor; ColorStatus m_hovercolor; QColor m_timecolor; QFont m_timefont; QColor m_tTextColor; QFont m_tFont; QDate m_date; MouseStatus m_mouseStatus; DMenu *m_rightMenu = nullptr; int m_roundtype = 1; const int m_radius = 8; const int m_borderframewX = 1; //绘制区域起始位置x坐标点 const int m_borderframewY = 0; //绘制区域起始位置y坐标点 QString m_timeFormat = "hh:mm"; int m_durationSize = 0; bool m_tabFocus {false}; bool m_tabFocusBeforeActive {false}; //保存应用被激活前是否存在tab焦点效果 }; class CScheduleSearchDateItem : public DLabel { Q_OBJECT public: explicit CScheduleSearchDateItem(QWidget *parent = nullptr); void setBackgroundColor(QColor color1); void setText(QColor tColor, QFont font); void setDate(QDate date); signals: void signalLabelScheduleHide(); protected: void paintEvent(QPaintEvent *e) override; void mousePressEvent(QMouseEvent *event) override; private: QColor m_Backgroundcolor; QColor m_textcolor; QFont m_font; QDate m_date; }; #endif // SCHEDULESEARCHVIEW_H dde-calendar-5.14.13/calendar-client/src/widget/settingWidget/000077500000000000000000000000001473346337000241225ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/widget/settingWidget/settingwidgets.cpp000066400000000000000000000045771473346337000277070ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "settingwidgets.h" #include "accountmanager.h" #include "calendarmanage.h" #include "units.h" #include #include #include DWIDGET_USE_NAMESPACE using namespace SettingWidget; SettingWidgets::SettingWidgets(QWidget *parent) : QObject(parent) { } SyncTagRadioButton::SyncTagRadioButton(QWidget *parent) : QWidget(parent) { } bool SyncTagRadioButton::isChecked() { return m_checked; } void SyncTagRadioButton::setChecked(bool checked) { if (m_checked == checked) return; m_checked = checked; update(); } void SyncTagRadioButton::paintEvent(QPaintEvent *event) { Q_UNUSED(event) QPainter painter(this); QIcon icon = DStyle::standardIcon(this->style(), m_checked ? DStyle::SP_IndicatorChecked : DStyle::SP_IndicatorUnchecked); int y = (this->height() - 16) / 2; int x = (this->width() - 16) / 2; icon.paint(&painter, QRect(x, y, 16, 16), Qt::AlignCenter, isEnabled() ? QIcon::Normal : QIcon::Disabled); } void SyncTagRadioButton::mouseReleaseEvent(QMouseEvent *event) { QWidget::mouseReleaseEvent(event); setChecked(!m_checked); emit clicked(isChecked()); } void CalendarSettingSettings::removeGroup(const QString &groupName, const QString &groupName2) { int index = this->indexOf(*this, groupName); if (index < 0) return; CalendarSettingGroups &groups = this->operator[](index)._groups; { int index = indexOf(groups, groupName2); if (index < 0) return; groups.removeAt(index); } if (groups.isEmpty()) { this->removeAt(index); } } void CalendarSettingSettings::removeGroup(const QString &groupName) { int index = this->indexOf(*this, groupName); if (index < 0) return; this->removeAt(index); } int CalendarSettingSettings::indexOf(const CalendarSettingGroups &groups, const QString groupName) { for (int k = 0; k < groups.count(); k++) { if (groups[k]._key == groupName) return k; } return -1; } int CalendarSettingSettings::indexOf(const CalendarSettingSettings &groups, const QString groupName) { for (int k = 0; k < groups.count(); k++) { if (groups[k]._key == groupName) return k; } return -1; } dde-calendar-5.14.13/calendar-client/src/widget/settingWidget/settingwidgets.h000066400000000000000000000107601473346337000273430ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SETTINGWIDGETS_H #define SETTINGWIDGETS_H #include "jobtypelistview.h" #include #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE namespace SettingWidget{ struct CalendarSettingOption{ CalendarSettingOption(){} CalendarSettingOption(const std::initializer_list &list){ int index = 0; for(auto d : list) { if(0 == index) _key = d; if(1 == index) _name = d; if(2 == index) _type = d; if(3 == index) _default = d; if(4 == index) _text = d; index ++; } } QJsonObject toJson(){ QJsonObject obj; obj.insert("key", _key); obj.insert("type", _type); obj.insert("name", _name); obj.insert("default", _default); obj.insert("text", _text); return obj; } QString _key; QString _type; QString _name; QString _default; QString _text; }; struct CalendarSettingOptions : public QList{ CalendarSettingOptions(){} CalendarSettingOptions(const std::initializer_list &list){ for(auto d : list) append(d); } QJsonArray tojson() { QJsonArray arr; for(auto option: *this) { arr.append(option.toJson()); } return arr; } }; struct CalendarSettingGroup{ QString _key; QString _name; CalendarSettingOptions _options; QJsonObject toJson(){ QJsonObject obj; obj.insert("key", _key); obj.insert("name", _name); obj.insert("options", _options.tojson()); return obj; } }; struct CalendarSettingGroups : public QList { CalendarSettingGroups(){} CalendarSettingGroups(const std::initializer_list &list){ for(auto d : list) append(d); } QJsonArray toJson() { QJsonArray arr; for(auto group: *this) { arr.append(group.toJson()); } return arr; } }; struct CalendarSettingSetting { QString _key; QString _name; CalendarSettingGroups _groups; QJsonObject toJson() { QJsonObject obj; obj.insert("key", _key); obj.insert("name", _name); obj.insert("groups", _groups.toJson()); return obj; } }; struct CalendarSettingSettings : public QList { CalendarSettingSettings(){} CalendarSettingSettings(const std::initializer_list &list){ for(auto d : list) append(d); } QJsonArray toJson() { QJsonArray arr; for(auto setting: *this) { arr.append(setting.toJson()); } return arr; } void removeGroup(const QString &groupName, const QString &groupName2); void removeGroup(const QString &groupName); int indexOf(const CalendarSettingGroups &groups, const QString groupName); int indexOf(const CalendarSettingSettings &groups, const QString groupName); }; /** * @brief The SyncTagRadioButton class 实现checkstate效果的类 */ class SyncTagRadioButton : public QWidget { Q_OBJECT public: SyncTagRadioButton(QWidget *parent = nullptr); bool isChecked(); /** * @brief setChecked 是否选中 */ void setChecked(bool checked); signals: void clicked(bool checked); protected: void paintEvent(QPaintEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; private: bool m_checked = true; }; }//~CalendarSetting class SettingWidgets : public QObject { Q_OBJECT public: explicit SettingWidgets(QWidget *parent = nullptr); }; #endif // SETTINGWIDGETS_H dde-calendar-5.14.13/calendar-client/src/widget/settingWidget/userloginwidget.cpp000066400000000000000000000124241473346337000300440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "userloginwidget.h" #include "accountmanager.h" #include "doanetworkdbus.h" #include #include #include #include #include UserloginWidget::UserloginWidget(QWidget *parent) : QWidget(parent) , m_loginStatus(false) { initView(); initConnect(); slotAccountUpdate(); } UserloginWidget::~UserloginWidget() { } void UserloginWidget::initView() { m_userNameLabel = new DLabel(); m_userNameLabel->setElideMode(Qt::ElideMiddle); m_userNameLabel->setTextFormat(Qt::PlainText); m_buttonImg = new DIconButton(this); m_buttonLogin = new QPushButton(this); m_buttonLoginOut = new QPushButton(this); m_buttonLogin->setFixedSize(98, 36); m_buttonLoginOut->setFixedSize(98, 36); QHBoxLayout *layout = new QHBoxLayout(this); const QIcon &icon = QIcon::fromTheme("dde_calendar_account"); m_buttonImg->setIcon(icon); m_buttonImg->setIconSize(QSize(36, 36)); m_buttonImg->setStyleSheet("border:0px solid;"); layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(m_buttonImg); layout->addSpacing(5); layout->addWidget(m_userNameLabel); layout->addStretch(); m_buttonLogin->setText(tr("Sign In", "button")); m_buttonLoginOut->setText(tr("Sign Out", "button")); m_buttonLoginOut->hide(); layout->addWidget(m_buttonLogin); layout->addWidget(m_buttonLoginOut); this->layout()->setAlignment(Qt::AlignLeft); m_ptrDoaNetwork = new DOANetWorkDBus(this); if (m_ptrDoaNetwork->getNetWorkState() == DOANetWorkDBus::NetWorkState::Active) { m_buttonLoginOut->setEnabled(true); m_buttonLogin->setEnabled(true); } else { m_buttonLogin->setEnabled(false); m_buttonLoginOut->setEnabled(false); } m_networkManager = new QNetworkAccessManager(this); } void UserloginWidget::initConnect() { connect(m_buttonLogin, &QPushButton::clicked, this, &UserloginWidget::slotLoginBtnClicked); connect(m_buttonLoginOut, &QPushButton::clicked, this, &UserloginWidget::slotLogoutBtnClicked); connect(gAccountManager, &AccountManager::signalAccountUpdate, this, &UserloginWidget::slotAccountUpdate); connect(m_networkManager, &QNetworkAccessManager::finished, this, &UserloginWidget::slotReplyPixmapLoad); connect(m_ptrDoaNetwork, &DOANetWorkDBus::sign_NetWorkChange, this, &UserloginWidget::slotNetworkStateChange); } QPixmap UserloginWidget::pixmapToRound(const QPixmap &src, int radius) { QSize size(2 * radius, 2 * radius); QPixmap pic(size); pic.fill(Qt::transparent); QPainterPath painterPath; painterPath.addEllipse(QRect(0, 0, pic.width(), pic.height())); QPainter painter(&pic); painter.setRenderHint(QPainter::Antialiasing); painter.setClipPath(painterPath); painter.drawPixmap(0, 0, src.scaled(size)); pic.setDevicePixelRatio(devicePixelRatioF()); return pic; } void UserloginWidget::slotNetworkStateChange(DOANetWorkDBus::NetWorkState state) { if (DOANetWorkDBus::NetWorkState::Disconnect == state) { m_buttonLogin->setEnabled(false); m_buttonLoginOut->setEnabled(false); } else if (DOANetWorkDBus::NetWorkState::Active == state) { m_buttonLoginOut->setEnabled(true); m_buttonLogin->setEnabled(true); } } void UserloginWidget::slotLoginBtnClicked() { gAccountManager->login(); } void UserloginWidget::slotLogoutBtnClicked() { gAccountManager->loginout(); } void UserloginWidget::slotAccountUpdate() { if (gUosAccountItem) { //账户为登录状态 m_buttonLogin->hide(); m_buttonLoginOut->show(); DAccount::Ptr account = gUosAccountItem->getAccount(); m_userNameLabel->setText(account->accountName()); m_userNameLabel->setToolTip("

" + account->accountName().toHtmlEscaped()); // 这里的url一定要带上http://头的, 跟在浏览器里输入其它链接不太一样,浏览器里面会自动转的,这里需要手动加上。 m_networkManager->get(QNetworkRequest(account->avatar())); } else { //账户为未登录状态 m_buttonLoginOut->hide(); m_buttonLogin->show(); m_userNameLabel->setText(""); m_userNameLabel->setToolTip(""); m_buttonImg->setIcon(QIcon::fromTheme("dde_calendar_account")); } } void UserloginWidget::slotReplyPixmapLoad(QNetworkReply *reply) { QPixmap pixmap; //因自定义头像路径拿到的不是真实路径,需要从请求头中拿取到真实路径再次发起请求 QUrl url = reply->header(QNetworkRequest::LocationHeader).toUrl(); if (url.url().isEmpty()) { pixmap.loadFromData(reply->readAll()); } else { m_networkManager->get(QNetworkRequest(url.url())); } if (!pixmap.isNull()) { m_buttonImg->setIcon(pixmapToRound(pixmap, 32)); } } QPair UserloginWidget::createloginButton(QObject *obj) { auto option = qobject_cast(obj); QPair optionWidget = DSettingsWidgetFactory::createStandardItem(QByteArray(), option, new UserloginWidget()); return optionWidget; } dde-calendar-5.14.13/calendar-client/src/widget/settingWidget/userloginwidget.h000066400000000000000000000025271473346337000275140ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef USERLOGIN_H #define USERLOGIN_H #include "dsettingsdialog.h" #include "doanetworkdbus.h" #include #include #include #include DWIDGET_USE_NAMESPACE //配置界面账户登录部件 class UserloginWidget: public QWidget { Q_OBJECT public: explicit UserloginWidget(QWidget *parent = nullptr); virtual ~UserloginWidget(); static QPair createloginButton(QObject *obj); signals: public slots: void slotLoginBtnClicked(); void slotLogoutBtnClicked(); void slotAccountUpdate(); //网络图片请求完成事件 void slotReplyPixmapLoad(QNetworkReply *); // 网络状态发生改变 void slotNetworkStateChange(DOANetWorkDBus::NetWorkState state); private: void initView(); void initConnect(); QPixmap pixmapToRound(const QPixmap &src, int radius); private: bool m_loginStatus; bool m_isManualQuit = false; DLabel *m_userNameLabel = nullptr; DIconButton *m_buttonImg = nullptr; QPushButton *m_buttonLogin = nullptr; QPushButton *m_buttonLoginOut = nullptr; QNetworkAccessManager *m_networkManager; DOANetWorkDBus * m_ptrDoaNetwork; }; #endif // USERLOGIN_H dde-calendar-5.14.13/calendar-client/src/widget/sidebarWidget/000077500000000000000000000000001473346337000240565ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/widget/sidebarWidget/sidebarcalendarwidget.cpp000066400000000000000000000230151473346337000310720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "sidebarcalendarwidget.h" #include "cschedulebasewidget.h" #include "constants.h" #include "units.h" #include #include QDate SidebarCalendarKeyButton::m_selectedData = QDate(); QDate SidebarCalendarKeyButton::m_displayedMonth = QDate(); SidebarCalendarWidget::SidebarCalendarWidget(QWidget *parent) : QWidget(parent) { initView(); initConnection(); initData(); } void SidebarCalendarWidget::initView() { m_dateLabel = new QLabel(); QFont font = m_dateLabel->font(); font.setPixelSize(DDECalendar::FontSizeTwelve); m_dateLabel->setFont(font); m_nextPage = new QPushButton(); m_previousPage = new QPushButton(); m_nextPage->setIcon(DStyle().standardIcon(QStyle::SP_ArrowRight)); m_previousPage->setIcon(DStyle().standardIcon(QStyle::SP_ArrowLeft)); m_nextPage->setFixedSize(20, 20); m_previousPage->setFixedSize(20, 20); m_nextPage->setIconSize(QSize(10,10)); m_previousPage->setIconSize(QSize(10,10)); m_nextPage->setFlat(true); m_previousPage->setFlat(true); m_nextPage->setFocusPolicy(Qt::NoFocus); m_previousPage->setFocusPolicy(Qt::NoFocus); QHBoxLayout *headLayout = new QHBoxLayout(); headLayout->setMargin(0); headLayout->setAlignment(Qt::AlignCenter); headLayout->addWidget(m_previousPage); headLayout->addWidget(m_dateLabel); headLayout->addWidget(m_nextPage); m_headWidget = new QWidget(this); m_headWidget->setLayout(headLayout); m_headWidget->setMinimumHeight(30); m_weekWidget = new CWeekWidget(this); m_weekWidget->setAutoFontSizeByWindow(false); m_weekWidget->setFirstDay(Qt::Sunday); m_keyWidget = new QWidget(this); m_keyLayout = new QGridLayout(); m_keyLayout->setMargin(0); m_keyLayout->setSpacing(0); m_keyWidget->setLayout(m_keyLayout); //循坏实例化6*7个日期按键 for (int i = 0; i < 42; ++i) { SidebarCalendarKeyButton *button = new SidebarCalendarKeyButton(); button->setFocusPolicy(Qt::NoFocus); m_keyButtonList.push_back(button); m_keyLayout->addWidget(button, i/7, i%7, 1, 1, Qt::AlignCenter); connect(button, &SidebarCalendarKeyButton::signaClicked, this, &SidebarCalendarWidget::slotKeyButtonClicked); } QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->setMargin(0); this->setLayout(mainLayout); mainLayout->addSpacing(6); mainLayout->addWidget(m_headWidget); mainLayout->addWidget(m_weekWidget, 1); mainLayout->addWidget(m_keyWidget, 6); } /** * @brief SidebarCalendarWidget::initConnection * 初始化信号链接 */ void SidebarCalendarWidget::initConnection() { connect(m_nextPage, &QPushButton::clicked, this, &SidebarCalendarWidget::slotNextPageClicked); connect(m_previousPage, &QPushButton::clicked, this, &SidebarCalendarWidget::slotPreviousPageClicked); connect(CalendarManager::getInstance(), &CalendarManager::sigNotifySidebarFirstDayChanged, this, &SidebarCalendarWidget::slotFirstDayChanged); } /** * @brief SidebarCalendarWidget::initData * 初始化数据 */ void SidebarCalendarWidget::initData() { m_firstday = CalendarManager::getInstance()->getFirstDayOfWeek(); QDate date = QDate::currentDate(); setDate(date); } /** * @brief SidebarCalendarWidget::setDate * 设置显示的日期 * @param date 将被选择显示的日期 */ void SidebarCalendarWidget::setDate(QDate& date) { SidebarCalendarKeyButton::setSelectedDate(date); setKeyDate(date); } /** * @brief SidebarCalendarWidget::setKeyDate * 根据选中的日期设置按钮显示的日期范围 * @param date 待显示的月日期 */ void SidebarCalendarWidget::setKeyDate(QDate date) { if(!withinTimeFrame(date)){ return; } QString fd = ""; fd.append("yyyy").append(tr("Y")).append(" ").append("MM").append(tr("M")); m_dateLabel->setText(date.toString(fd)); SidebarCalendarKeyButton::setDisplayedMonth(date); //获取当月第一天 date = QDate(date.year(), date.month(), 1); // int firstday = CalendarManager::getInstance()->getFirstDayOfWeek(); int day = date.dayOfWeek(); //计算当前月日历第一天该显示的时间 date = date.addDays(-(day - m_firstday + 7) % 7); for (SidebarCalendarKeyButton* btn : m_keyButtonList) { btn->setDate(date); date = date.addDays(1); } update(); } /** * @brief SidebarCalendarWidget::slotKeyButtonClicked * 日期按键点击事件 * @param keyButton 事件发送者 */ void SidebarCalendarWidget::slotKeyButtonClicked(SidebarCalendarKeyButton* keyButton) { QDate date = keyButton->getSelectedDate(); if(!withinTimeFrame(date)){ return; } if (date.year() ==keyButton->getDisplayedMonth().year() && date.month() == keyButton->getDisplayedMonth().month()) { //未切换月份,只刷新界面显示 update(); } else { //已切换月份,重新设置选中的日期 setDate(date); } CScheduleBaseWidget::setSelectDate(date); } /** * @brief SidebarCalendarWidget::slotNextPageClicked * 下一页切换事件 */ void SidebarCalendarWidget::slotNextPageClicked() { //设置显示月份日期 QDate date = SidebarCalendarKeyButton::getDisplayedMonth().addMonths(+1); //设置显示的日期范围 setKeyDate(date); } /** * @brief SidebarCalendarWidget::slotPreviousPageClicked * 上一页切换事件 */ void SidebarCalendarWidget::slotPreviousPageClicked() { //设置显示月份日期 QDate date = SidebarCalendarKeyButton::getDisplayedMonth().addMonths(-1); //设置显示的日期范围 setKeyDate(date); } void SidebarCalendarWidget::slotFirstDayChanged(int value) { m_firstday = value; setKeyDate(SidebarCalendarKeyButton::getSelectedDate()); } SidebarCalendarKeyButton::SidebarCalendarKeyButton(QWidget *parent) : QPushButton(parent) { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setMinimumSize(QSize(10, 10)); } /** * @brief SidebarCalendarKeyButton::setSelectedDate * 设置被选中的日期 * @param date 将被选中的日期 */ void SidebarCalendarKeyButton::setSelectedDate(const QDate& date) { m_selectedData = date; } /** * @brief SidebarCalendarKeyButton::getSelectedDate * @return 当前被选中的日期 */ QDate SidebarCalendarKeyButton::getSelectedDate() { return m_selectedData; } /** * @brief SidebarCalendarKeyButton::setDisplayedMonth * 设置显示的月份 * @param date 将显示的月份日期 */ void SidebarCalendarKeyButton::setDisplayedMonth(const QDate& date) { m_displayedMonth = date; } /** * @brief SidebarCalendarKeyButton::getDisplayedMonth * @return 当前显示的月份日期 */ QDate SidebarCalendarKeyButton::getDisplayedMonth() { return m_displayedMonth; } /** * @brief SidebarCalendarKeyButton::setDate * 设置被显示的日期 * @param date 将被显示的日期 */ void SidebarCalendarKeyButton::setDate(const QDate& date) { this->m_displayedDate = date; update(); } /** * @brief SidebarCalendarKeyButton::getDate * @return 当前显示的日期 */ QDate SidebarCalendarKeyButton::getDate() { return m_displayedDate; } /** * @brief SidebarCalendarKeyButton::click * 点击事件 */ void SidebarCalendarKeyButton::click() { if(!withinTimeFrame(m_displayedDate)){ return; } m_selectedData = m_displayedDate; emit signaClicked(this); } void SidebarCalendarKeyButton::mousePressEvent(QMouseEvent *event) { //判断鼠标左键按下事件 if (event->button() == Qt::LeftButton) { this->pressed = true; } QWidget::mousePressEvent(event); } void SidebarCalendarKeyButton::mouseReleaseEvent(QMouseEvent *event) { //判断鼠标左键释放事件 if (pressed && event->button() == Qt::LeftButton && rect().contains(event->pos())) { click(); pressed = false; } else if (event->button() == Qt::LeftButton) { pressed = false; } QWidget::mouseReleaseEvent(event); } void SidebarCalendarKeyButton::mouseMoveEvent(QMouseEvent *event) { //判断鼠标左键移动事件 if (event->button() == Qt::LeftButton && rect().contains(event->pos())) { pressed = true; } else if (event->button() == Qt::LeftButton) { pressed = false; } } void SidebarCalendarKeyButton::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); qreal w = this->width(); qreal h = this->height(); const qreal r = w > h ? h: w; QRectF rectf(qRound((w-r)/2), qRound((h-r)/2), r, r); //绘制区域 QFont font; font.setPixelSize(DDECalendar::FontSizeTwelve); painter.setFont(font); if (m_displayedDate == m_selectedData && withinTimeFrame(m_displayedDate)) { painter.setPen(Qt::NoPen); painter.setBrush(DPaletteHelper::instance()->palette(this).highlight()); //绘制高亮背景 painter.drawEllipse(rectf); //设置高亮下的字体颜色 painter.setPen(DPaletteHelper::instance()->palette(this).highlightedText().color()); } else if (!(m_displayedDate.year() == m_displayedMonth.year() && m_displayedDate.month() == m_displayedMonth.month())){ //设置正常显示状态下的字体颜色 painter.setOpacity(0.3); } //获取待绘制的文字 QString text = QString::number(m_displayedDate.day()); //绘制文字 painter.drawText(rectf, text, QTextOption(Qt::AlignCenter)); QWidget::paintEvent(event); } dde-calendar-5.14.13/calendar-client/src/widget/sidebarWidget/sidebarcalendarwidget.h000066400000000000000000000055611473346337000305450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SIDEBARCALENDARWIDGET_H #define SIDEBARCALENDARWIDGET_H #include "cweekwidget.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE class SidebarCalendarKeyButton; //小日历类 class SidebarCalendarWidget : public QWidget { Q_OBJECT public: explicit SidebarCalendarWidget(QWidget *parent = nullptr); //设置选中的日期 void setDate(QDate&); signals: public slots: //日期按键点击事件 void slotKeyButtonClicked(SidebarCalendarKeyButton*); //下一页按钮点击事件 void slotNextPageClicked(); //上一页按钮点击事件 void slotPreviousPageClicked(); //一周首日更新 void slotFirstDayChanged(int value); private: void initView(); void initConnection(); void initData(); //根据选中的日期设置按钮显示的日期范围 date:选中的日期 void setKeyDate(QDate date); private: QWidget* m_headWidget = nullptr; //头部控件 CWeekWidget* m_weekWidget = nullptr; //周显示区域控件 QWidget* m_keyWidget = nullptr; //日期按钮区域控件 QGridLayout* m_keyLayout = nullptr; //按钮布局 QLabel* m_dateLabel = nullptr; //头部日期显示label DPushButton* m_nextPage = nullptr; //下一页切换按键 DPushButton* m_previousPage = nullptr; //上一页切换按键 QList m_keyButtonList; //所有的日期按钮控件 int m_firstday = Qt::Sunday; }; //日历按键类 class SidebarCalendarKeyButton : public QPushButton { Q_OBJECT public: explicit SidebarCalendarKeyButton(QWidget *parent = nullptr); //设置当前按钮显示的日期 void setDate(const QDate&); //获取当前按钮显示的日期 QDate getDate(); signals: //点击事件信号 void signaClicked(SidebarCalendarKeyButton*); public slots: void click(); private: //设置被选中的日期 static void setSelectedDate(const QDate&); //获取当前被选中的日期 static QDate getSelectedDate(); //设置显示的月份日期 static void setDisplayedMonth(const QDate&); //获取当前显示的月份日期 static QDate getDisplayedMonth(); protected: void paintEvent(QPaintEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; private: static QDate m_selectedData; //被选中的日期 static QDate m_displayedMonth; //显示的月份日期 QDate m_displayedDate; //当前显示的日期 bool pressed = false; //是否按下 friend SidebarCalendarWidget; }; #endif // SIDEBARCALENDARWIDGET_H dde-calendar-5.14.13/calendar-client/src/widget/sidebarWidget/sidebaritemwidget.cpp000066400000000000000000000234151473346337000302630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "sidebaritemwidget.h" #include "accountmanager.h" #include #include #include #include #include SidebarItemWidget::SidebarItemWidget(QWidget *parent) : QWidget(parent) { setFixedWidth(170); } SidebarItemWidget *SidebarItemWidget::getAccountItemWidget(AccountItem::Ptr ptr) { return new SidebarAccountItemWidget(ptr); } /** * @brief SidebarItemWidget::getLocalWidget * 获取子层本地日程item控件,有复选框 * @param info 本地日程类型 * @return 子层选项控件 */ SidebarItemWidget *SidebarItemWidget::getTypeItemWidget(DScheduleType::Ptr ptr) { return new SidebarTypeItemWidget(ptr); } /** * @brief SidebarItemWidget::setSelectStatus * 设置选中状态 * @param status 将被设置的状态 */ void SidebarItemWidget::setSelectStatus(bool status) { if (status == m_selectStatus && m_item && status == m_item->isExpanded()) { return; } m_selectStatus = status; //根据控件类型设置响应控件状态 updateStatus(); if (m_item && m_item->isExpanded() != status) { //设置列表展开状态 m_item->setExpanded(status); } emit signalStatusChange(m_selectStatus, m_id); } /** * @brief SidebarItemWidget::getSelectStatus * 获取当前状态 * @return */ bool SidebarItemWidget::getSelectStatus() { return m_selectStatus; } /** * @brief SidebarItemWidget::switchState * 切换状态 */ void SidebarItemWidget::switchState() { setSelectStatus(!m_selectStatus); } /** * @brief SidebarItemWidget::setItem * 设置关联的item * @param item 待关联的item */ void SidebarItemWidget::setItem(QTreeWidgetItem *item) { m_item = item; } QTreeWidgetItem *SidebarItemWidget::getTreeItem() { return m_item; } void SidebarItemWidget::mouseDoubleClickEvent(QMouseEvent *event) { Q_UNUSED(event) switchState(); } void SidebarItemWidget::mouseReleaseEvent(QMouseEvent *) { //屏蔽鼠标释放事件,解决双击时触发重复事件的问题 } SidebarTypeItemWidget::SidebarTypeItemWidget(DScheduleType::Ptr ptr, QWidget *parent) : SidebarItemWidget(parent) , m_scheduleType(ptr) { initView(); m_id = m_scheduleType->accountID(); } void SidebarTypeItemWidget::initView() { QHBoxLayout *vLayout = new QHBoxLayout(this); vLayout->setContentsMargins(5, 0, 0, 0); vLayout->setSpacing(0); m_checkBox = new QCheckBox(this); QPalette palette = m_checkBox->palette(); palette.setBrush(QPalette::Highlight, QColor(m_scheduleType->getColorCode())); m_checkBox->setPalette(palette); m_checkBox->setFocusPolicy(Qt::NoFocus); setSelectStatus((m_scheduleType->showState() == DScheduleType::Show)); connect(m_checkBox, &QCheckBox::clicked, this, [this]() { setSelectStatus(m_checkBox->isChecked()); }); m_titleLabel = new DLabel(this); m_titleLabel->setFixedHeight(30); DFontSizeManager::instance()->bind(m_titleLabel, DFontSizeManager::T6); m_titleLabel->setElideMode(Qt::ElideRight); //设置初始字体大小 DFontSizeManager::instance()->setFontGenericPixelSize(static_cast(DFontSizeManager::fontPixelSize(QFont()))); QFont labelF = DFontSizeManager::instance()->t6(); labelF.setWeight(QFont::Normal); m_titleLabel->setFont(labelF); m_titleLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_titleLabel->setText(m_scheduleType->displayName()); m_titleLabel->setToolTip(m_scheduleType->displayName()); vLayout->addSpacing(2); vLayout->addWidget(m_checkBox); vLayout->addWidget(m_titleLabel, 1); this->setLayout(vLayout); setFixedHeight(40); } void SidebarTypeItemWidget::updateStatus() { AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_scheduleType->accountID()); if (account) { if (m_selectStatus != (m_scheduleType->showState() == DScheduleType::Show)) { m_scheduleType->setShowState(m_selectStatus ? DScheduleType::Show : DScheduleType::Hide); account->updateScheduleTypeShowState(m_scheduleType); } m_checkBox->setChecked(m_selectStatus); } } SidebarAccountItemWidget::SidebarAccountItemWidget(AccountItem::Ptr ptr, QWidget *parent) : SidebarItemWidget(parent) , m_accountItem(ptr) { initView(); initConnect(); } void SidebarAccountItemWidget::initView() { QHBoxLayout *hLayout = new QHBoxLayout(this); hLayout->setMargin(0); hLayout->setSpacing(0); m_headIconButton = new DIconButton(this); m_headIconButton->setFlat(true); m_headIconButton->setFixedSize(16, 16); m_headIconButton->setIconSize(QSize(10, 10)); m_headIconButton->setIcon(DStyle::SP_ArrowRight); m_headIconButton->setFocusPolicy(Qt::NoFocus); connect(m_headIconButton, &DIconButton::clicked, this, [this]() { setSelectStatus(!m_selectStatus); }); m_ptrDoaNetwork = new DOANetWorkDBus(this); m_titleLabel = new DLabel(this); m_titleLabel->setFixedHeight(30); DFontSizeManager::instance()->bind(m_titleLabel, DFontSizeManager::T6); m_titleLabel->setElideMode(Qt::ElideMiddle); //设置初始字体大小 DFontSizeManager::instance()->setFontGenericPixelSize(static_cast(DFontSizeManager::fontPixelSize(QFont()))); QFont labelF = DFontSizeManager::instance()->t6(); labelF.setWeight(QFont::Normal); m_titleLabel->setFont(labelF); m_titleLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_titleLabel->setTextFormat(Qt::PlainText); m_titleLabel->setText(m_accountItem->getAccount()->accountName()); m_titleLabel->setToolTip("

" + m_accountItem->getAccount()->accountName().toHtmlEscaped()); m_syncIconButton = new DIconButton(this); m_syncIconButton->setIcon(QIcon(":/icons/deepin/builtin/icons/icon_refresh.svg")); m_syncIconButton->setFixedSize(QSize(20, 20)); qreal ratio = qApp->devicePixelRatio(); if (ratio == 1){ m_syncIconButton->setIconSize(QSize(10, 10)); } m_syncIconButton->setFocusPolicy(Qt::NoFocus); m_warningLabel = new DLabel(); m_warningLabel->setFixedSize(QSize(20, 20)); m_warningLabel->setPixmap(QIcon(":/icons/deepin/builtin/icons/dde_calendar_warning_light_32px.svg").pixmap(18, 18)); hLayout->addWidget(m_headIconButton); hLayout->addWidget(m_titleLabel, 1); hLayout->addWidget(m_syncIconButton); hLayout->addWidget(m_warningLabel); //给控件右部留出足够的距离,防止被滚动条覆盖无法被点击事件 hLayout->addSpacing(15); this->setLayout(hLayout); if (m_accountItem->getAccount()->accountType() == DAccount::Account_UnionID) { resetRearIconButton(); } else { //尾部控件隐藏 m_syncIconButton->hide(); m_warningLabel->hide(); } setFixedHeight(36); } void SidebarAccountItemWidget::initConnect() { connect(m_syncIconButton, &DIconButton::clicked, this, &SidebarAccountItemWidget::slotRearIconClicked); connect(m_accountItem.data(), &AccountItem::signalSyncStateChange, this, &SidebarAccountItemWidget::slotSyncStatusChange); connect(gAccountManager, &AccountManager::signalAccountStateChange, this, &SidebarAccountItemWidget::slotAccountStateChange); connect(m_ptrDoaNetwork, &DOANetWorkDBus::sign_NetWorkChange, this, &SidebarAccountItemWidget::slotNetworkStateChange); } void SidebarAccountItemWidget::slotNetworkStateChange(DOANetWorkDBus::NetWorkState state) { //控件不显示则不处理 if (!m_accountItem || m_accountItem->getAccount()->accountType() != DAccount::Account_UnionID) { return; } if (DOANetWorkDBus::NetWorkState::Disconnect == state) { m_syncIconButton->hide(); m_warningLabel->show(); QString msg = m_accountItem->getSyncMsg(DAccount::AccountSyncState::Sync_NetworkAnomaly); m_warningLabel->setToolTip(msg); } else if (DOANetWorkDBus::NetWorkState::Active == state) { m_warningLabel->hide(); if (m_accountItem->isCanSyncSetting() || m_accountItem->isCanSyncShedule()) { m_syncIconButton->show(); } else { m_syncIconButton->hide(); } } } void SidebarAccountItemWidget::resetRearIconButton() { //控件不显示则不处理 if (m_accountItem->getAccount()->accountType() != DAccount::Account_UnionID) { return; } if (m_accountItem) { if (m_accountItem->getAccount()->syncState() == 0) { m_warningLabel->hide(); if (m_accountItem->isCanSyncSetting() || m_accountItem->isCanSyncShedule()) { m_syncIconButton->show(); } else { m_syncIconButton->hide(); } } else { m_syncIconButton->hide(); m_warningLabel->show(); QString msg = m_accountItem->getSyncMsg(m_accountItem->getAccount()->syncState()); m_warningLabel->setToolTip(msg); } } } AccountItem::Ptr SidebarAccountItemWidget::getAccountItem() { return m_accountItem; } void SidebarAccountItemWidget::updateStatus() { m_accountItem->setAccountExpandStatus(m_selectStatus); if (m_selectStatus) { m_headIconButton->setIcon(DStyle::SP_ArrowDown); } else { m_headIconButton->setIcon(DStyle::SP_ArrowRight); } } //尾部图标控件点击事件 void SidebarAccountItemWidget::slotRearIconClicked() { gAccountManager->downloadByAccountID(m_accountItem->getAccount()->accountID()); } //同步状态改变事件 void SidebarAccountItemWidget::slotSyncStatusChange(DAccount::AccountSyncState state) { m_accountItem->getAccount()->setSyncState(state); resetRearIconButton(); } void SidebarAccountItemWidget::slotAccountStateChange() { resetRearIconButton(); } dde-calendar-5.14.13/calendar-client/src/widget/sidebarWidget/sidebaritemwidget.h000066400000000000000000000057331473346337000277330ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ITEMWIDGET_H #define ITEMWIDGET_H #include "scheduledatamanage.h" #include "dscheduletype.h" #include "accountitem.h" #include #include #include #include #include #include #include #include "doanetworkdbus.h" DWIDGET_USE_NAMESPACE class SidebarItemWidget : public QWidget { Q_OBJECT public: SidebarItemWidget(QWidget *parent = nullptr); //获取顶层item控件,有箭头 static SidebarItemWidget *getAccountItemWidget(AccountItem::Ptr); //获取子层本地日程item控件,有复选框 static SidebarItemWidget *getTypeItemWidget(DScheduleType::Ptr); //设置选中状态 void setSelectStatus(bool); //获取当前状态 bool getSelectStatus(); //切换状态 void switchState(); //设置item void setItem(QTreeWidgetItem *); QTreeWidgetItem* getTreeItem(); signals: //状态改变信号 void signalStatusChange(bool status, QString id = ""); public slots: protected: void mouseDoubleClickEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; virtual void updateStatus() = 0; protected: QString m_title = ""; //标题 QString m_id = ""; //数据id bool m_selectStatus = false; //选中状态 QTreeWidgetItem *m_item = nullptr; //关联的item }; class SidebarTypeItemWidget : public SidebarItemWidget { Q_OBJECT public: SidebarTypeItemWidget(DScheduleType::Ptr, QWidget *parent = nullptr); protected: void initView(); void updateStatus() override; private: DScheduleType::Ptr m_scheduleType; DIconButton *m_rearIconButton = nullptr; //尾部icon控件 QCheckBox *m_checkBox = nullptr; //复选框 DLabel *m_titleLabel = nullptr; //标题显示区域 }; class SidebarAccountItemWidget : public SidebarItemWidget { Q_OBJECT public: SidebarAccountItemWidget(AccountItem::Ptr, QWidget *parent = nullptr); AccountItem::Ptr getAccountItem(); signals: public slots: //尾部图标控件点击事件 void slotRearIconClicked(); //同步状态改变事件 void slotSyncStatusChange(DAccount::AccountSyncState); //帐户同步状态发生改变 void slotAccountStateChange(); // 网络状态发生改变 void slotNetworkStateChange(DOANetWorkDBus::NetWorkState state); protected: void initView(); void initConnect(); void updateStatus() override; void resetRearIconButton(); private: AccountItem::Ptr m_accountItem; DIconButton *m_syncIconButton = nullptr; //尾部同步控件 DLabel *m_warningLabel = nullptr; //尾部异常警告控件 DIconButton *m_headIconButton = nullptr; //头部展开控件 DLabel *m_titleLabel = nullptr; //标题显示区域 DOANetWorkDBus * m_ptrDoaNetwork; }; #endif // ITEMWIDGET_H dde-calendar-5.14.13/calendar-client/src/widget/sidebarWidget/sidebartreewidgetitemdelegate.cpp000066400000000000000000000024011473346337000326260ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "sidebartreewidgetitemdelegate.h" #include #include #include SideBarTreeWidgetItemDelegate::SideBarTreeWidgetItemDelegate() { } void SideBarTreeWidgetItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (!index.isValid()) { QStyledItemDelegate::paint(painter, option, index); return; } painter->setRenderHint(QPainter::Antialiasing); QStyleOptionViewItem opt = option; QRect rect = opt.rect; QPainterPath path, clipPath; switch (opt.viewItemPosition) { case QStyleOptionViewItem::OnlyOne: { // 左间距 rect.setX(rect.x() + 8); // 右间距 rect.setWidth(rect.width() - 8); } break; default: { QStyledItemDelegate::paint(painter, option, index); return; } } //绘制圆角 int radius = 8; clipPath.addRoundedRect(rect, radius, radius); painter->setClipPath(clipPath); if (option.state & QStyle::State_MouseOver) { painter->fillRect(painter->clipBoundingRect(), option.palette.midlight()); } } dde-calendar-5.14.13/calendar-client/src/widget/sidebarWidget/sidebartreewidgetitemdelegate.h000066400000000000000000000010421473346337000322730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SIDEBARTREEWIDGETITEMDELEGATE_H #define SIDEBARTREEWIDGETITEMDELEGATE_H #include class SideBarTreeWidgetItemDelegate : public QStyledItemDelegate { Q_OBJECT public: SideBarTreeWidgetItemDelegate(); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; }; #endif // SIDEBARTREEWIDGETITEMDELEGATE_H dde-calendar-5.14.13/calendar-client/src/widget/sidebarWidget/sidebarview.cpp000066400000000000000000000202351473346337000270700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "sidebarview.h" #include "calendarmanage.h" #include "widget/monthWidget/monthdayview.h" #include "widget/dayWidget/daymonthview.h" #include #include SidebarView::SidebarView(QWidget *parent) : QWidget(parent) { initView(); initConnection(); //初始化数据 initData(); } /** * @brief SidebarView::initView * 初始化视图 */ void SidebarView::initView() { QVBoxLayout *vLayout = new QVBoxLayout(this); vLayout->setContentsMargins(0, 8, 0, 10); vLayout->setSpacing(0); m_treeWidget = new QTreeWidget(); delegate = new SideBarTreeWidgetItemDelegate; // 设置底色透明,否则展开/收起出现背景色 QPalette pal = m_treeWidget->palette(); pal.setBrush(QPalette::Background, QBrush(QColor(255, 255, 255, 0))); m_treeWidget->setPalette(pal); m_treeWidget->setItemDelegate(delegate); m_treeWidget->setHeaderHidden(true); m_treeWidget->setColumnCount(1); m_treeWidget->setExpandsOnDoubleClick(false); m_treeWidget->setSelectionMode(QAbstractItemView::NoSelection); //屏蔽item选择效果 m_treeWidget->setFrameStyle(QFrame::NoFrame); //去除边框 m_treeWidget->setIndentation(0); //设置item前间距为0 m_treeWidget->setFocusPolicy(Qt::NoFocus); m_calendarWidget = new SidebarCalendarWidget(this); m_calendarWidget->setFixedHeight(220); // m_calendarWidget->setFixedSize(180, 220); DPushButton *btn = new DPushButton; btn->setFocusPolicy(Qt::NoFocus); btn->setFixedHeight(1); vLayout->addWidget(m_treeWidget, 1); vLayout->addWidget(btn); vLayout->addWidget(m_calendarWidget, 1); setLayout(vLayout); setFixedWidth(180); } void SidebarView::initConnection() { //监听日程类型更新事件 connect(gAccountManager, &AccountManager::signalAccountUpdate, this, &SidebarView::slotAccountUpdate); connect(gAccountManager, &AccountManager::signalScheduleTypeUpdate, this, &SidebarView::slotScheduleTypeUpdate); connect(gAccountManager, &AccountManager::signalLogout, this, &SidebarView::signalLogout); } /** * @brief SidebarView::initData * 初始化数据 */ void SidebarView::initData() { m_treeWidget->clear(); initLocalAccountItem(); initUnionAccountItem(); //刷新列表展开状态 initExpandStatus(); } /** * @brief SidebarView::initExpandStatus * 初始化列表展开状态 */ void SidebarView::initExpandStatus() { //初始化列表展开状态 QList itemWidget; itemWidget << m_localItemWidget << m_unionItemWidget; for (SidebarAccountItemWidget *widget : itemWidget) { if (widget != nullptr) { //先进行一次反的展开状态目的是解决使用widget填充item时添加列表项后最后一项的widget没有隐藏问题 bool ret = widget->getAccountItem()->getAccount()->isExpandDisplay(); widget->getTreeItem()->setExpanded(!ret); widget->setSelectStatus(ret); } } } /** * @brief SidebarView::initLocalAccountItem * 初始化本地账户列表 */ void SidebarView::initLocalAccountItem() { if (nullptr != m_localItemWidget) { // m_localItemWidget->deleteLater(); delete m_localItemWidget; m_localItemWidget = nullptr; } QSharedPointer localAccount = gAccountManager->getLocalAccountItem(); if (nullptr == localAccount) { return; } QTreeWidgetItem *localItem = new QTreeWidgetItem(); m_treeWidget->addTopLevelItem(localItem); QString localName = localAccount->getAccount()->accountName(); m_localItemWidget = new SidebarAccountItemWidget(localAccount); m_treeWidget->setItemWidget(localItem, 0, m_localItemWidget); m_localItemWidget->setItem(localItem); } /** * @brief SidebarView::initUnionAccountItem * 初始化unionID账户列表 */ void SidebarView::initUnionAccountItem() { QSharedPointer unionAccount = gAccountManager->getUnionAccountItem(); if (nullptr == unionAccount) { return; } QTreeWidgetItem *unionItem = new QTreeWidgetItem(); m_treeWidget->addTopLevelItem(unionItem); QString unionName = unionAccount->getAccount()->accountName(); m_unionItemWidget = new SidebarAccountItemWidget(unionAccount); m_treeWidget->setItemWidget(unionItem, 0, m_unionItemWidget); unionItem->setToolTip(0,unionName); m_unionItemWidget->setItem(unionItem); } /** * @brief SidebarView::resetLocalChildItem * 重置日程类型选项 * @param parentItemWidget 父列表控件 */ void SidebarView::resetJobTypeChildItem(SidebarAccountItemWidget *parentItemWidget) { if (nullptr == parentItemWidget) { return; } QTreeWidgetItem *parentItem = parentItemWidget->getTreeItem(); int itemChildrenCounts = parentItem->childCount(); while(itemChildrenCounts--) { QTreeWidgetItem * child = parentItem->child(itemChildrenCounts); //index从大到小区做删除处理 parentItem->removeChild(child); delete child; child = nullptr; } DScheduleType::List typeList = parentItemWidget->getAccountItem()->getScheduleTypeList(); QTreeWidgetItem *item; for (DScheduleType::Ptr p : typeList) { if (nullptr != p) { item = new QTreeWidgetItem(parentItemWidget->getTreeItem()); item->setTextAlignment(0, Qt::AlignVCenter | Qt::AlignLeft); item->setSizeHint(0, QSize(220, 40)); parentItem->addChild(item); SidebarItemWidget *widget = new SidebarTypeItemWidget(p, this); m_treeWidget->setItemWidget(item, 0, widget); connect(widget,&SidebarItemWidget::signalStatusChange,this,[&](bool status, QString id){ Q_UNUSED(id) Q_UNUSED(status) emit signalScheduleHide(); }); } } //刷新列表项位置,主要用于解决初始添加时最后一项显示位置和其他项位置不一致问题 resetTreeItemPos(parentItemWidget->getTreeItem()); } /** * @brief SidebarView::resetTreeItemPos * 刷新列表项位置,主要用于解决初始添加时最后一项显示位置和其他项位置不一致问题 */ void SidebarView::resetTreeItemPos(QTreeWidgetItem *item) { if (nullptr == item) { return; } QWidget* ptmpWidget = nullptr; ptmpWidget = m_treeWidget->itemWidget(item, 0); int x = ptmpWidget->x(); QTreeWidgetItem *ptmp = nullptr; for(int i = 0; i < item->childCount(); i++) { ptmp = item->child(i); ptmpWidget = m_treeWidget->itemWidget(ptmp, 0); ptmpWidget->move(x, ptmpWidget->y()); } } /** * @brief SidebarView::slotAccountUpdate * 账户更新事件 */ void SidebarView::slotAccountUpdate() { initData(); } /** * @brief SidebarView::slotScheduleTypeUpdate * 日程类型更新事件 */ void SidebarView::slotScheduleTypeUpdate() { //初始化列表数据 resetJobTypeChildItem(m_localItemWidget); resetJobTypeChildItem(m_unionItemWidget); //刷新列表展开状态 initExpandStatus(); } /** * @brief SidebarView::signalLogout * 帐户退出事件 * @param accountType */ void SidebarView::signalLogout(DAccount::Type accountType) { //先清空列表 m_treeWidget->clear(); if (DAccount::Account_UnionID == accountType){ if (m_unionItemWidget) { //清空数据 m_unionItemWidget->getAccountItem().reset(nullptr); m_unionItemWidget->deleteLater(); m_unionItemWidget = nullptr; } //重新加载另一个帐户的数据 initLocalAccountItem(); resetJobTypeChildItem(m_localItemWidget); } } void SidebarView::paintEvent(QPaintEvent *event) { //绘制背景 QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); painter.setBrush(palette().color(QPalette::Base)); int radius = 8; //绘制圆角 painter.drawRoundedRect(0, 0, width(), height(), radius, radius); //绘制右侧直角 painter.drawRect(radius, 0, width() - radius, height()); QWidget::paintEvent(event); } dde-calendar-5.14.13/calendar-client/src/widget/sidebarWidget/sidebarview.h000066400000000000000000000031131473346337000265310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SIDEBARVIEW_H #define SIDEBARVIEW_H #include "sidebarcalendarwidget.h" #include "sidebaritemwidget.h" #include "accountmanager.h" #include #include #include #include "sidebartreewidgetitemdelegate.h" class SidebarView : public QWidget { Q_OBJECT public: explicit SidebarView(QWidget *parent = nullptr); signals: void signalScheduleHide(); public slots: //账户更新事件 void slotAccountUpdate(); //日程类型更新事件 void slotScheduleTypeUpdate(); //帐户登出信号 void signalLogout(DAccount::Type); protected: void paintEvent(QPaintEvent *event) override; private: void initView(); void initConnection(); //初始化数据 void initData(); //初始化列表展开状态 void initExpandStatus(); //初始化本地账户列表 void initLocalAccountItem(); //初始化union账户列表 void initUnionAccountItem(); //重置日程类型item void resetJobTypeChildItem(SidebarAccountItemWidget *parentItemWidget); //重置item位置 void resetTreeItemPos(QTreeWidgetItem *item); private: QTreeWidget *m_treeWidget = nullptr; //树结构 SidebarAccountItemWidget* m_localItemWidget = nullptr; SidebarAccountItemWidget* m_unionItemWidget = nullptr; SidebarCalendarWidget *m_calendarWidget = nullptr; //小日历 SideBarTreeWidgetItemDelegate *delegate = nullptr; }; #endif // SIDEBARVIEW_H dde-calendar-5.14.13/calendar-client/src/widget/touchgestureoperation.cpp000066400000000000000000000117201473346337000264500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "touchgestureoperation.h" #include #include #include #include touchGestureOperation::touchGestureOperation(QWidget *parent) : m_parentWidget(parent) { if (m_parentWidget) { m_parentWidget->setAttribute(Qt::WA_AcceptTouchEvents); //截获相应的gesture手势 m_parentWidget->grabGesture(Qt::TapGesture); m_parentWidget->grabGesture(Qt::TapAndHoldGesture); m_parentWidget->grabGesture(Qt::PanGesture); } } bool touchGestureOperation::event(QEvent *e) { bool _result {false}; if (e->type() == QEvent::Gesture) { //手势触发 _result = gestureEvent(dynamic_cast(e)); } QMouseEvent *mouseEvent = dynamic_cast(e); if (e->type() == QEvent::MouseButtonPress && mouseEvent->source() == Qt::MouseEventSynthesizedByQt) { //触摸点击转换鼠标点击事件 m_mouseState = M_PRESS; m_beginTouchPoint = mouseEvent->pos(); _result = true; } if (e->type() == QEvent::MouseMove && mouseEvent->source() == Qt::MouseEventSynthesizedByQt) { //触摸移动转换鼠标移动事件 //如果移动距离大与5则为触摸移动状态 QPointF currentPoint = mouseEvent->pos(); if (QLineF(m_beginTouchPoint, currentPoint).length() > 5) { m_mouseState = M_MOVE; //如果为单指点击状态则转换为滑动状态 switch (m_touchState) { case T_SINGLE_CLICK: { m_touchState = T_SLIDE; break; } case T_SLIDE: { //计算滑动方向和距离 calculateAzimuthAngle(m_beginTouchPoint, currentPoint); //如果移动距离大于15则更新 if (m_movelenght > 15) { m_update = true; m_beginTouchPoint = currentPoint; } break; } default: break; } } _result = true; } if (e->type() == QEvent::MouseButtonRelease && mouseEvent->source() == Qt::MouseEventSynthesizedByQt) { m_mouseState = M_NONE; _result = true; } return _result; } bool touchGestureOperation::isUpdate() const { return m_update; } void touchGestureOperation::setUpdate(bool b) { m_update = b; } touchGestureOperation::TouchState touchGestureOperation::getTouchState() const { return m_touchState; } touchGestureOperation::TouchMovingDirection touchGestureOperation::getMovingDir() const { return m_movingDir; } touchGestureOperation::TouchMovingDirection touchGestureOperation::getTouchMovingDir(QPointF &startPoint, QPointF &stopPoint, qreal &movingLine) { TouchMovingDirection _result {T_MOVE_NONE}; qreal angle = 0.0000; qreal dx = stopPoint.rx() - startPoint.rx(); qreal dy = stopPoint.ry() - startPoint.ry(); //计算方位角 angle = qAtan2(dy, dx) * 180 / M_PI; qreal line = qSqrt(dx * dx + dy * dy); //如果移动距离大于10则有效 if (line > 10) { if ((angle <= -45) && (angle >= -135)) { _result = TouchMovingDirection::T_TOP; } else if ((angle > -45) && (angle < 45)) { _result = TouchMovingDirection::T_RIGHT; } else if ((angle >= 45) && (angle <= 135)) { _result = TouchMovingDirection::T_BOTTOM; } else { _result = TouchMovingDirection::T_LEFT; } } movingLine = line; return _result; } bool touchGestureOperation::gestureEvent(QGestureEvent *event) { if (QGesture *tap = event->gesture(Qt::TapGesture)) tapGestureTriggered(dynamic_cast(tap)); if (QGesture *pan = event->gesture(Qt::PanGesture)) panTriggered(dynamic_cast(pan)); return true; } void touchGestureOperation::tapGestureTriggered(QTapGesture *tap) { switch (tap->state()) { case Qt::NoGesture: { break; } case Qt::GestureStarted: { m_beginTouchTime = QDateTime::currentDateTime().toMSecsSinceEpoch(); m_touchState = T_SINGLE_CLICK; break; } case Qt::GestureUpdated: { break; } case Qt::GestureFinished: { break; } default: { //GestureCanceled } } } void touchGestureOperation::panTriggered(QPanGesture *pan) { switch (pan->state()) { case Qt::NoGesture: { break; } case Qt::GestureStarted: { break; } case Qt::GestureUpdated: { m_touchState = T_SLIDE; break; } case Qt::GestureFinished: { break; } default: //GestureCanceled break; } } void touchGestureOperation::calculateAzimuthAngle(QPointF &startPoint, QPointF &stopPoint) { m_movingDir = getTouchMovingDir(startPoint, stopPoint, m_movelenght); } dde-calendar-5.14.13/calendar-client/src/widget/touchgestureoperation.h000066400000000000000000000070201473346337000261130ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TOUCHGESTUREOPERATION_H #define TOUCHGESTUREOPERATION_H #include class QGestureEvent; class QTapGesture; class QPanGesture; class touchGestureOperation { public: /** * @brief The TouchMovingDirection enum //手势移动方向 */ enum TouchMovingDirection { T_MOVE_NONE //默认状态 , T_LEFT //左 , T_TOP //上 , T_RIGHT //右 , T_BOTTOM //下 }; enum TouchState { T_STATE_NONE //默认状态 , T_SINGLE_CLICK //一指点击 , T_SLIDE //滑动手势 }; private: enum MouseState { M_NONE //默认状态 , M_PRESS //点击 , M_MOVE //移动 }; public: explicit touchGestureOperation(QWidget *parent = nullptr); /** * @brief event 事件处理 * @param e Qwidget事件 * @return */ bool event(QEvent *e); /** * @brief isUpdate 是否更新数据 * @return */ bool isUpdate() const; /** * @brief setUpdate 设置更新状态 * @param b */ void setUpdate(bool b); /** * @brief getTouchState 获取触摸手指状态 * @return */ TouchState getTouchState() const; /** * @brief getMovingDir 获取移动方向 * @return */ TouchMovingDirection getMovingDir() const; /** * @brief getTouchMovingDir 获取滑动方向 * @param startPoint 起始坐标 * @param stopPoint 结束坐标 * @param movingLine 移动距离 * @return */ static TouchMovingDirection getTouchMovingDir(QPointF &startPoint, QPointF &stopPoint, qreal &movingLine); private: /** * @brief gestureEvent 触摸手势处理 * @param event 手势事件 * @return */ bool gestureEvent(QGestureEvent *event); /** * @brief tapGestureTriggered 轻切手势处理 * @param tap 轻切手势事件 */ void tapGestureTriggered(QTapGesture *tap); /** * @brief panTriggered 多指滑动手势处理 * @param pan 多指滑动手势 */ void panTriggered(QPanGesture *pan); /** * @brief calculateAzimuthAngle 计算方位角 * @param startPoint 起始坐标 * @param stopPoint 结束坐标 */ void calculateAzimuthAngle(QPointF &startPoint, QPointF &stopPoint); private: /** * @brief m_parentWidget 手势窗口 */ QWidget *m_parentWidget {nullptr}; /** * @brief m_movingDir 移动方向 */ TouchMovingDirection m_movingDir {T_MOVE_NONE}; /** * @brief m_beginTouchTime 触摸点击时间 */ qint64 m_beginTouchTime {0}; /** * @brief m_beginTouchPoint 触摸点击坐标 */ QPointF m_beginTouchPoint {}; /** * @brief m_touchState 触摸状态 */ TouchState m_touchState {T_STATE_NONE}; /** * @brief m_touchState 鼠标的状态 */ MouseState m_mouseState {M_NONE}; /** * @brief m_movelenght 移动距离 */ qreal m_movelenght {0}; /** * @brief m_update 更新标志 */ bool m_update {false}; }; #endif // TOUCHGESTUREOPERATION_H dde-calendar-5.14.13/calendar-client/src/widget/weekWidget/000077500000000000000000000000001473346337000234005ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/widget/weekWidget/weekheadview.cpp000066400000000000000000000304161473346337000265600ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "weekheadview.h" #include "customframe.h" #include "scheduledatamanage.h" #include #include #include #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CWeekHeadView::CWeekHeadView(QWidget *parent) : DWidget(parent) , m_touchGesture(this) { setContentsMargins(0, 0, 0, 0); m_dayNumFont.setWeight(QFont::Medium); m_dayNumFont.setPixelSize(DDECalendar::FontSizeSixteen); m_monthFont.setWeight(QFont::Medium); m_monthFont.setPixelSize(DDECalendar::FontSizeTwenty); // cells grid QHBoxLayout *hBoxLayout = new QHBoxLayout; hBoxLayout->setMargin(0); hBoxLayout->setSpacing(0); m_monthLabel = new CustomFrame(this); m_monthLabel->setFixedWidth(DDEWeekCalendar::WMCellHeaderWidth - 5); m_monthLabel->setRoundState(true, false, false, false); QFont mlabelF; mlabelF.setWeight(QFont::Medium); mlabelF.setPixelSize(DDECalendar::FontSizeTwenty); m_monthLabel->setTextFont(mlabelF); hBoxLayout->addWidget(m_monthLabel); hBoxLayout->setStretch(0, 0); hBoxLayout->setSpacing(0); for (int c = 0; c != DDEWeekCalendar::AFewDaysofWeek; ++c) { QWidget *cell = new QWidget(this); cell->installEventFilter(this); cell->setFocusPolicy(Qt::ClickFocus); hBoxLayout->addWidget(cell); m_cellList.append(cell); } setLayout(hBoxLayout); } CWeekHeadView::~CWeekHeadView() { } /** * @brief setTheMe 根据系统主题类型设置颜色 * @param type 系统主题类型 */ void CWeekHeadView::setTheMe(int type) { m_themetype = type; if (type == 0 || type == 1) { QColor textC = "#000000"; QColor textBC(230, 238, 242); m_monthLabel->setBColor(textBC); m_monthLabel->setTextColor(textC); m_backgroundCircleColor = "#0081FF"; m_backgroundShowColor = "#2CA7F8"; m_backgroundShowColor.setAlphaF(0.4); m_Background_Weekend_Color = "#DAE4ED"; m_defaultTextColor = "#6F6F6F"; m_currentDayTextColor = "#FFFFFF"; m_defaultLunarColor = "#898989"; m_currentMonthColor = "#000000"; m_backgroundColor = "#E6EEF2"; m_solofestivalLunarColor = "#4DFF7272"; } else if (type == 2) { QColor textBC = "#82AEC1"; textBC.setAlphaF(0.1); m_monthLabel->setBColor(textBC); m_monthLabel->setTextColor("#BF1D63"); m_backgroundCircleColor = "#0059D2"; m_backgroundShowColor = "#002AAF"; m_backgroundShowColor.setAlphaF(0.4); m_Background_Weekend_Color = "#333D4A"; m_defaultTextColor = "#C0C6D4"; m_currentDayTextColor = "#C0C6D4"; m_defaultLunarColor = "#6886BA"; m_currentMonthColor = "#000000"; m_backgroundColor = "#82AEC1"; m_backgroundColor.setAlphaF(0.1); m_solofestivalLunarColor = "#4DFF7272"; } m_weekendsTextColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); update(); } /** * @brief CWeekHeadView::setWeekDay 设置一周显示时间 * @param vDays * @param selectDate */ void CWeekHeadView::setWeekDay(QVector vDays, const QDate &selectDate) { if (vDays.count() != DDEWeekCalendar::AFewDaysofWeek) return; m_days = vDays; QLocale locale; m_monthLabel->setTextStr(locale.monthName(selectDate.month(), QLocale::ShortFormat)); } /** * @brief CWeekHeadView::setHunagliInfo 设置黄历信息 * @param huangLiInfo */ void CWeekHeadView::setHunagLiInfo(const QMap &huangLiInfo) { m_huangLiInfo = huangLiInfo; update(); } /** * @brief setLunarVisible 设置是否显示阴历信息 * @param visible 是否显示阴历信息 */ void CWeekHeadView::setLunarVisible(bool visible) { int state = int(m_showState); if (visible) state |= ShowLunar; else state &= ~ShowLunar; m_showState = ShowState(state); update(); } /** * @brief eventFilter 过滤器 * @param o 事件对象 * @param e 时间类型 * @return false */ bool CWeekHeadView::eventFilter(QObject *o, QEvent *e) { QWidget *cell = qobject_cast(o); if (cell && m_cellList.contains(cell)) { if (e->type() == QEvent::Paint) { paintCell(cell); } else if (e->type() == QEvent::MouseButtonDblClick) { const int pos = m_cellList.indexOf(cell); emit signalsViewSelectDate(m_days[pos]); } } return false; } /** * @brief getCellDayNum 根据索引值获取当天是在一个月中的第几天 * @param pos 索引 * @return 日期的字符串 */ const QString CWeekHeadView::getCellDayNum(int pos) { return QString::number(m_days[pos].day()); } /** * @brief getCellDate 根据索引获取当天的日期 * @param pos 索引值 * @return 日期 */ const QDate CWeekHeadView::getCellDate(int pos) { return m_days[pos]; } /** * @brief getLunar 根据索引值获取当天的阴历信息 * @param pos 索引值 * @return 阴历信息字符串 */ const QString CWeekHeadView::getLunar(int pos) { CaHuangLiDayInfo info ; if (pos >= 0 && pos < m_days.size()) { info = m_huangLiInfo[m_days[pos]]; if (info.mLunarDayName == "初一") { info.mLunarDayName = info.mLunarMonthName; } if (info.mTerm.isEmpty()) return info.mLunarDayName; } return info.mTerm; } /** * @brief paintCell 绘制周信息 * @param cell 每天所在的widget */ void CWeekHeadView::paintCell(QWidget *cell) { m_weekendsTextColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); const QRect rect(0, 0, cell->width(), cell->height()); const int pos = m_cellList.indexOf(cell); const bool isCurrentDay = getCellDate(pos) == QDate::currentDate(); const bool isSelectedCell = isCurrentDay; int d = m_days[pos].dayOfWeek(); QPainter painter(cell); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); //根据周几设置不一样的背景色 if (d == DDEWeekCalendar::FirstDayOfWeekend || d == DDEWeekCalendar::AFewDaysofWeek) { painter.setBrush(QBrush(m_Background_Weekend_Color)); } else { painter.setBrush(QBrush(m_backgroundColor)); } if (m_cellList.last() != cell) { painter.drawRect(rect); //画矩形 //绘制分割线 QPoint point_begin(cell->width(), 0); QPoint point_end(cell->width(), cell->height()); painter.save(); QColor m_linecolor = "#000000"; m_linecolor.setAlphaF(0.1); painter.setPen(m_linecolor); painter.drawLine(point_begin, point_end); painter.restore(); } else { int labelwidth = cell->width(); int labelheight = cell->height(); QPainterPath painterPath; painterPath.moveTo(0, 0); painterPath.lineTo(0, labelheight); painterPath.lineTo(labelwidth, labelheight); painterPath.lineTo(labelwidth, labelheight - m_radius); painterPath.arcTo(QRect(labelwidth - m_radius * 2, 0, m_radius * 2, m_radius * 2), 0, 90); painterPath.lineTo(0, 0); painterPath.closeSubpath(); painter.drawPath(painterPath); } int bw = (cell->width() - 104) / 2; int bh = (cell->height() - 26) / 2; if (bw < 0) { bw = 2; } if (bh < 0) { bh = 2; } if (isSelectedCell) { if (m_showState & ShowLunar) { QRect fillRect(bw - 2, bh, 26, 26); painter.save(); painter.setRenderHint(QPainter::Antialiasing); painter.setBrush(QBrush(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor())); painter.setPen(Qt::NoPen); painter.drawEllipse(fillRect); painter.restore(); } else { QRect fillRect(cell->width() - (cell->width() / 2) + 1, bh - 1, 26, 26); painter.save(); painter.setRenderHint(QPainter::Antialiasing); painter.setBrush(QBrush(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor())); painter.setPen(Qt::NoPen); painter.drawEllipse(fillRect); painter.restore(); } } QLocale locale; const QString dayNum = getCellDayNum(pos); const QString dayLunar = getLunar(pos); QString dayWeek = locale.dayName(d ? d : DDEWeekCalendar::AFewDaysofWeek, QLocale::ShortFormat); painter.save(); painter.setPen(Qt::SolidLine); // draw text of day if (isSelectedCell) { painter.setPen(m_currentDayTextColor); } else if (isCurrentDay) { painter.setPen(m_weekendsTextColor); } else { if (d == DDEWeekCalendar::FirstDayOfWeekend || d == DDEWeekCalendar::AFewDaysofWeek) painter.setPen(m_weekendsTextColor); else painter.setPen(m_defaultTextColor); } painter.setFont(m_dayNumFont); if (m_showState & ShowLunar) { painter.drawText(QRect(bw - 1, bh, 24, 24), Qt::AlignCenter, dayNum); if (d == DDEWeekCalendar::FirstDayOfWeekend || d == DDEWeekCalendar::AFewDaysofWeek) painter.setPen(m_weekendsTextColor); else painter.setPen(m_defaultTextColor); painter.drawText(QRect(bw + 24, bh, 30, 25), Qt::AlignCenter, dayWeek); } else { QFontMetrics fm1 = painter.fontMetrics(); painter.drawText(QRect(cell->width() - (cell->width() / 2) - 4, bh - 1, 36, 26), Qt::AlignCenter, dayNum); if (d == DDEWeekCalendar::FirstDayOfWeekend || d == DDEWeekCalendar::AFewDaysofWeek) painter.setPen(m_weekendsTextColor); else painter.setPen(m_defaultTextColor); QFontMetrics fm = painter.fontMetrics(); while (fm.horizontalAdvance(dayWeek) > cell->width() / 2) dayWeek.chop(1); //水平右对齐,上下居中 painter.drawText(QRect(0, bh, (cell->width() / 2), 26), Qt::AlignRight | Qt::AlignVCenter, dayWeek); } // draw text of day type if (m_showState & ShowLunar) { if (cell->width() > 100) { if (d == DDEWeekCalendar::FirstDayOfWeekend || d == DDEWeekCalendar::AFewDaysofWeek) painter.setPen(m_weekendsTextColor); else painter.setPen(m_defaultLunarColor); if (cell->width() < 132) { QString str_dayLunar = nullptr; if (dayLunar.count() > 2) { for (int i = 0; i < 2; i++) { str_dayLunar.append(dayLunar.at(i)); } str_dayLunar.append("..."); } else { str_dayLunar = dayLunar; } //水平左对齐,上下居中 painter.drawText(QRect(bw + 52 + 10, bh, 50, 25), Qt::AlignLeft | Qt::AlignVCenter, str_dayLunar); } else { painter.drawText(QRect(bw + 52 + 10, bh, 50, 25), Qt::AlignLeft | Qt::AlignVCenter, dayLunar); } } } painter.restore(); painter.end(); } void CWeekHeadView::wheelEvent(QWheelEvent *e) { //如果滚轮为左右方向则触发信号 if (e->angleDelta().x() != 0) { emit signalAngleDelta(e->angleDelta().x()); } } bool CWeekHeadView::event(QEvent *e) { if (m_touchGesture.event(e)) { //获取触摸状态 switch (m_touchGesture.getTouchState()) { case touchGestureOperation::T_SLIDE: { //在滑动状态如果可以更新数据则切换月份 if (m_touchGesture.isUpdate()) { m_touchGesture.setUpdate(false); switch (m_touchGesture.getMovingDir()) { case touchGestureOperation::T_LEFT: emit signalAngleDelta(-1); break; case touchGestureOperation::T_RIGHT: emit signalAngleDelta(1); break; default: break; } } break; } default: break; } return true; } else { return DWidget::event(e); } } dde-calendar-5.14.13/calendar-client/src/widget/weekWidget/weekheadview.h000066400000000000000000000056641473346337000262340ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef WEEKHEADVIEW_H #define WEEKHEADVIEW_H #include "constants.h" #include "../touchgestureoperation.h" #include "huangliData/dbusdatastruct.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE class CustomFrame; /** * @brief The CWeekHeadView class * 周视图日期模块显示 */ class CWeekHeadView : public DWidget { Q_OBJECT public: enum ShowState { ShowLunar = 0x01, ShowLunarFestivalHighlight = 0x02, Normal = ShowLunar | ShowLunarFestivalHighlight, }; public: explicit CWeekHeadView(QWidget *parent = nullptr); ~CWeekHeadView() override; //根据系统主题类型设置颜色 void setTheMe(int type = 0); //设置一周的时间 void setWeekDay(QVector vDays, const QDate &selectDate); //设置黄历信息 void setHunagLiInfo(const QMap &huangLiInfo); signals: /** * @brief signalsViewSelectDate 选择日期的信号 * @param date 日期 */ void signalsViewSelectDate(QDate date); /** * @brief signalAngleDelta 发送滚动信号滚动相对量 * @param delta 滚动相对量 */ void signalAngleDelta(int delta); public slots: //设置是否显示阴历信息 void setLunarVisible(bool visible); private: //根据索引值获取当天是在一个月中的第几天 const QString getCellDayNum(int pos); //根据索引获取当天的日期 const QDate getCellDate(int pos); //根据索引值获取当天的阴历信息 const QString getLunar(int pos); //绘制周信息 void paintCell(QWidget *cell); bool eventFilter(QObject *o, QEvent *e) override; protected: void wheelEvent(QWheelEvent *e) override; bool event(QEvent *e) override; private slots: private: QList m_cellList; CustomFrame *m_monthLabel = nullptr; QVector m_days; ShowState m_showState = Normal; int m_selectedCell = 0; QMap m_huangLiInfo; QFont m_dayNumFont; QFont m_monthFont; QColor m_backgroundCircleColor = "#2ca7f8"; QColor m_backgroundShowColor = "#2CA7F8"; QColor m_defaultTextColor = "#6F6F6F"; QColor m_currentDayTextColor = "#FFFFFF"; QColor m_defaultLunarColor = "#898989"; QColor m_weekendsTextColor = "#0887FF"; QColor m_currentMonthColor = "#000000"; QColor m_backgroundColor = "#E6EEF2"; /** * @brief m_Background_Weekend_Color 周六周日背景色 */ QColor m_Background_Weekend_Color = "#00429A"; QColor m_solofestivalLunarColor = "#4DFF7272"; int m_themetype = 1; const int m_radius = 8; /** * @brief m_touchGesture 触摸手势处理 */ touchGestureOperation m_touchGesture; }; #endif // MYCALENDARWIDGET_H dde-calendar-5.14.13/calendar-client/src/widget/weekWidget/weekview.cpp000066400000000000000000000264421473346337000257420ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "weekview.h" #include "scheduledatamanage.h" #include "constants.h" #include "units.h" #include #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE CWeekView::CWeekView(const GetWeekNumOfYear &getWeekNumOfYear, QWidget *parent) : QWidget(parent) , m_touchGesture(this) , m_weekNumWidget(nullptr) { QHBoxLayout *hBoxLayout = new QHBoxLayout; hBoxLayout->setMargin(0); hBoxLayout->setSpacing(0); //上一周按钮 m_prevButton = new DIconButton(DStyle::SP_ArrowLeft, this); m_prevButton->setFixedSize(36, 36); connect(m_prevButton, &DIconButton::clicked, this, &CWeekView::signalBtnPrev); m_weekNumWidget = new CWeekNumWidget(getWeekNumOfYear, this); //下一周按钮 m_nextButton = new DIconButton(DStyle::SP_ArrowRight, this); m_nextButton->setFixedSize(36, 36); connect(m_nextButton, &DIconButton::clicked, this, &CWeekView::signalBtnNext); hBoxLayout->addWidget(m_prevButton); hBoxLayout->addWidget(m_weekNumWidget); hBoxLayout->addWidget(m_nextButton); //设置布局 setLayout(hBoxLayout); connect(m_weekNumWidget, &CWeekNumWidget::signalsSelectDate, this, &CWeekView::signalsSelectDate); connect(m_weekNumWidget, &CWeekNumWidget::signalBtnPrev, this, &CWeekView::signalBtnPrev); connect(m_weekNumWidget, &CWeekNumWidget::signalBtnNext, this, &CWeekView::signalBtnNext); } CWeekView::~CWeekView() { } /** * @brief setCurrentDate 设置选择时间,并更新 * @param date 时间 */ void CWeekView::setSelectDate(const QDate date) { m_weekNumWidget->setSelectDate(date); } /** * @brief CWeekView::setCurrent 设置当前时间 * @param date */ void CWeekView::setCurrent(const QDateTime &dateTime) { m_weekNumWidget->setCurrent(dateTime); } /** * @brief setTheMe 根据系统主题类型设置颜色 * @param type 系统主题类型 */ void CWeekView::setTheMe(int type) { m_weekNumWidget->setTheMe(type); } /** * @brief wheelEvent 鼠标滚轮切换上一周下一周 * @param event 鼠标滚轮事件 */ void CWeekView::wheelEvent(QWheelEvent *event) { bool isDragging = false; emit signalIsDragging(isDragging); //判断是否是拖拽状态 if (!isDragging) { //左移切换上周,右移切换下周 if (event->angleDelta().y() > 0) { //上一周 signalBtnPrev(); } else { //下一周 signalBtnNext(); } } } bool CWeekView::event(QEvent *e) { if (m_touchGesture.event(e)) { //获取触摸状态 switch (m_touchGesture.getTouchState()) { case touchGestureOperation::T_SLIDE: { //在滑动状态如果可以更新数据则切换月份 if (m_touchGesture.isUpdate()) { m_touchGesture.setUpdate(false); switch (m_touchGesture.getMovingDir()) { case touchGestureOperation::T_LEFT: //切换下周 signalBtnNext(); break; case touchGestureOperation::T_RIGHT: //切换上周 signalBtnPrev(); break; default: break; } } break; } default: break; } return true; } else { return DWidget::event(e); } } CWeekNumWidget::CWeekNumWidget(const GetWeekNumOfYear &getWeekNumOfYear, QWidget *parent) : QWidget(parent) , m_getWeekNumOfYear(getWeekNumOfYear) , m_isFocus(false) { m_dayNumFont.setPixelSize(DDECalendar::FontSizeSixteen); m_dayNumFont.setWeight(QFont::Light); setFocusPolicy(Qt::StrongFocus); QHBoxLayout *hBoxLayout = new QHBoxLayout; hBoxLayout->setSpacing(0); hBoxLayout->setMargin(0); //显示周数的widget for (int c = 0; c != DDEWeekCalendar::NumWeeksDisplayed; ++c) { QWidget *cell = new QWidget; //设置事件过滤器 cell->installEventFilter(this); hBoxLayout->addWidget(cell, Qt::AlignTop); m_cellList.append(cell); } this->setLayout(hBoxLayout); } CWeekNumWidget::~CWeekNumWidget() { } void CWeekNumWidget::setSelectDate(const QDate date) { m_selectDate = date; updateDate(); } void CWeekNumWidget::setCurrent(const QDateTime &dateTime) { m_currentDate = dateTime; } void CWeekNumWidget::setTheMe(int type) { if (type == 0 || type == 1) { m_defaultTextColor = Qt::black; m_backgrounddefaultColor = Qt::white; m_currentDayTextColor = Qt::white; m_backgroundcurrentDayColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); m_fillColor = "#FFFFFF"; } else if (type == 2) { m_defaultTextColor = "#C0C6D4"; m_backgrounddefaultColor = "#FFFFFF"; m_backgrounddefaultColor.setAlphaF(0.05); m_currentDayTextColor = "#B8D3FF"; m_backgroundcurrentDayColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); m_fillColor = "#000000"; m_fillColor.setAlphaF(0.05); } } void CWeekNumWidget::resizeEvent(QResizeEvent *event) { //获取当前所有cell的宽度 const int _allCellWidth = width(); //获取当前cell的宽度 int w = _allCellWidth / DDEWeekCalendar::NumWeeksDisplayed; //最小显示的宽度 const int _minWidget = 36; //默认都显示 QVector vIndex(10, true); //cell的宽度小于最小宽度则隐藏部分显示 if (w < _minWidget) { //计算前后需要隐藏的个数 int t_num = qRound((_minWidget * DDEWeekCalendar::NumWeeksDisplayed - _allCellWidth) / _minWidget / 2.0); for (int i = 0; i < t_num; i++) { vIndex[i] = false; vIndex[9 - i] = false; } } //设置是否显示 for (int i = 0; i < DDEWeekCalendar::NumWeeksDisplayed; i++) { m_cellList[i]->setVisible(vIndex[i]); } QWidget::resizeEvent(event); //更新显示 update(); } void CWeekNumWidget::focusInEvent(QFocusEvent *event) { QWidget::focusInEvent(event); switch (event->reason()) { case Qt::TabFocusReason: case Qt::BacktabFocusReason: case Qt::ActiveWindowFocusReason: m_isFocus = true; break; default: m_isFocus = false; break; }; update(); } void CWeekNumWidget::focusOutEvent(QFocusEvent *event) { QWidget::focusOutEvent(event); m_isFocus = false; update(); } void CWeekNumWidget::paintCell(QWidget *cell) { const QRect rect(0, 0, cell->width(), cell->height()); const int pos = m_cellList.indexOf(cell); //计算当前日期周数 const int _showWeekNum = m_getWeekNumOfYear(m_days[pos]); const int _currentWeekNum = m_getWeekNumOfYear(m_currentDate.date()); const bool isCurrentDay = _showWeekNum == _currentWeekNum && m_days[pos].year() == m_currentDate.date().year(); const bool isSelectDay = m_days[pos].weekNumber() == m_selectDate.weekNumber(); QPainter painter(cell); painter.setRenderHints(QPainter::Antialiasing); painter.save(); painter.setBrush(QBrush(m_fillColor)); painter.setPen(Qt::NoPen); painter.drawRect(rect); //画矩形 painter.restore(); painter.setPen(Qt::SolidLine); const QString dayNum = QString::number(_showWeekNum); if (isSelectDay) { QRect fillRect((cell->width() - 24) / 2, (cell->height() - 32) / 2 + 4, 24, 24); painter.save(); painter.setRenderHint(QPainter::Antialiasing); painter.setBrush(QBrush(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor())); painter.setPen(Qt::NoPen); painter.drawEllipse(fillRect); if (m_isFocus) { //绘制焦点获取效果 QPen pen; pen.setWidth(2); pen.setColor(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor()); painter.setPen(pen); //在原有的选中效果外面再绘制一圈 QRectF focusRect(fillRect.x() - 2, fillRect.y() - 2, fillRect.width() + 4, fillRect.height() + 4); painter.setBrush(Qt::NoBrush); painter.drawEllipse(focusRect); } painter.restore(); painter.setPen(m_currentDayTextColor); painter.setFont(m_dayNumFont); painter.drawText(QRect(0, 0, cell->width(), cell->height()), Qt::AlignCenter, dayNum); } else { if (isCurrentDay) { painter.setPen(m_backgroundcurrentDayColor); } else { painter.setPen(m_defaultTextColor); } painter.setFont(m_dayNumFont); painter.drawText(QRect(0, 0, cell->width(), cell->height()), Qt::AlignCenter, dayNum); } painter.end(); } bool CWeekNumWidget::eventFilter(QObject *o, QEvent *e) { QWidget *cell = qobject_cast(o); if (cell && m_cellList.contains(cell)) { const int pos = m_cellList.indexOf(cell); //获取每个cell的时间,如果小于1900年则过滤显示和点击操作 if (!withinTimeFrame( m_days[pos])) return false; if (e->type() == QEvent::Paint) { paintCell(cell); } else if (e->type() == QEvent::MouseButtonPress) { QMouseEvent *mouseEvent = dynamic_cast(e); if (mouseEvent->button() == Qt::LeftButton) { cellClicked(cell); } } } return false; } void CWeekNumWidget::mousePressEvent(QMouseEvent *event) { QWidget::mousePressEvent(event); m_isFocus = false; } /** * @brief setSelectedCell 设置被选择的周数 * @param index 周数所在的索引 */ void CWeekNumWidget::setSelectedCell(int index) { if (m_selectedCell == index) return; const int prevPos = m_selectedCell; m_selectedCell = index; m_cellList.at(prevPos)->update(); m_cellList.at(index)->update(); m_selectDate = m_days[index]; const QString dayNum = QString::number(m_getWeekNumOfYear(m_selectDate)); if (m_days[index].year() < DDECalendar::QueryEarliestYear && dayNum != "1") return; emit signalsSelectDate(m_days[index]); } void CWeekNumWidget::updateDate() { for (int i = 0 ; i < DDEWeekCalendar::NumWeeksDisplayed; ++i) { m_days[i] = m_selectDate.addDays((i - 4) * DDEWeekCalendar::AFewDaysofWeek); if (m_days[i] == m_selectDate) m_selectedCell = i; } update(); } bool CWeekNumWidget::event(QEvent *e) { if (e->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = dynamic_cast(e); if (focusWidget() == this) { //如果焦点在该widget上,可以左右键切换时间 if (keyEvent->key() == Qt::Key_Left) { emit signalBtnPrev(); } if (keyEvent->key() == Qt::Key_Right) { emit signalBtnNext(); } } } return DWidget::event(e); } void CWeekNumWidget::cellClicked(QWidget *cell) { const int pos = m_cellList.indexOf(cell); if (pos == -1) return; setSelectedCell(pos); update(); } dde-calendar-5.14.13/calendar-client/src/widget/weekWidget/weekview.h000066400000000000000000000066771473346337000254170ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef WEEKVIEW_H #define WEEKVIEW_H #include "../widget/touchgestureoperation.h" #include #include #include #include DWIDGET_USE_NAMESPACE typedef int(*GetWeekNumOfYear)(const QDate &); /** * @brief The CWeekView class * 周数显示类 */ class CWeekNumWidget; class CWeekView : public QWidget { Q_OBJECT public: explicit CWeekView(const GetWeekNumOfYear &getWeekNumOfYear, QWidget *parent = nullptr); ~CWeekView() override; //设置选择时间,并更新 void setSelectDate(const QDate date); //设置当前时间 void setCurrent(const QDateTime &dateTime); //根据系统主题类型设置颜色 void setTheMe(int type = 0); signals: /** * @brief signalsSelectDate 选择日期的信号 * @param date 选择的日期 */ void signalsSelectDate(const QDate &date); /** * @brief signalIsDragging 判断是否是拖拽状态 * @param isDragging 是否是拖拽状态 */ void signalIsDragging(bool &isDragging); /** * @brief signalBtnPrev 前一周按钮信号 */ void signalBtnPrev(); /** * @brief signalBtnNext 后一周按钮信号 */ void signalBtnNext(); protected: /** * @brief wheelEvent 鼠标滚轮切换上一周下一周 * @param event 鼠标滚轮事件 */ void wheelEvent(QWheelEvent *event) override; bool event(QEvent *e) override; private: //上一周按钮 DIconButton *m_prevButton = nullptr; //下一周按钮 DIconButton *m_nextButton = nullptr; //触摸手势处理 touchGestureOperation m_touchGesture; CWeekNumWidget *m_weekNumWidget; }; class CWeekNumWidget : public QWidget { Q_OBJECT public: explicit CWeekNumWidget(const GetWeekNumOfYear &getWeekNumOfYear, QWidget *parent); ~CWeekNumWidget() override; //设置选择时间,并更新 void setSelectDate(const QDate date); //设置当前时间 void setCurrent(const QDateTime &dateTime); //根据系统主题类型设置颜色 void setTheMe(int type = 0); protected: void resizeEvent(QResizeEvent *event) override; void focusInEvent(QFocusEvent *event) override; void focusOutEvent(QFocusEvent *event) override; bool event(QEvent *e) override; bool eventFilter(QObject *o, QEvent *e) override; void mousePressEvent(QMouseEvent *event) override; private: //绘制周数 void paintCell(QWidget *cell); //设置被选择的周数 void setSelectedCell(int index); //更新数据 void updateDate(); signals: //选择日期的信号 void signalsSelectDate(const QDate &date); //前一周按钮信号 void signalBtnPrev(); //后一周按钮信号 void signalBtnNext(); public slots: //选择点击的日期 void cellClicked(QWidget *cell); private: QList m_cellList; //选择的日期 QDate m_selectDate; QDate m_days[10]; int m_selectedCell = 0; QFont m_dayNumFont; QDateTime m_currentDate; GetWeekNumOfYear m_getWeekNumOfYear; QColor m_defaultTextColor = Qt::black; QColor m_backgrounddefaultColor = Qt::white; QColor m_currentDayTextColor = Qt::white; QColor m_backgroundcurrentDayColor = "#0081FF"; QColor m_fillColor = Qt::white; bool m_isFocus; }; #endif // MONTDAYVIEW_H dde-calendar-5.14.13/calendar-client/src/widget/weekWidget/weekwindow.cpp000066400000000000000000000350601473346337000262730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "weekwindow.h" #include "scheduleview.h" #include "constants.h" #include "weekheadview.h" #include "weekview.h" #include "commondef.h" #include "schedulesearchview.h" #include "todaybutton.h" #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CWeekWindow::CWeekWindow(QWidget *parent) : CScheduleBaseWidget(parent) , m_today(new CTodayButton) { setContentsMargins(0, 0, 0, 0); initUI(); initConnection(); setLunarVisible(m_calendarManager->getShowLunar()); } CWeekWindow::~CWeekWindow() { } /** * @brief setLunarVisible 设置是否显示阴历信息 * @param state 是否显示阴历信息 */ void CWeekWindow::setLunarVisible(bool state) { m_weekHeadView->setLunarVisible(state); m_YearLunarLabel->setVisible(state); m_scheduleView->setLunarVisible(state); } /** * @brief initUI 初始化界面设置 */ void CWeekWindow::initUI() { m_today->setText(QCoreApplication::translate("today", "Today", "Today")); m_today->setFixedSize(DDEWeekCalendar::WTodayWindth, DDEWeekCalendar::WTodayHeight); QFont todayfont; todayfont.setWeight(QFont::Medium); todayfont.setPixelSize(DDECalendar::FontSizeFourteen); m_today->setFont(todayfont); //新建年份label m_YearLabel = new QLabel(); m_YearLabel->setFixedHeight(DDEWeekCalendar::W_YLabelHeight); QFont t_labelF; t_labelF.setWeight(QFont::Medium); t_labelF.setPixelSize(DDECalendar::FontSizeTwentyfour); m_YearLabel->setFont(t_labelF); DPalette LunaPa = m_YearLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(LunaPa); m_YearLunarLabel = new QLabel(this); m_YearLunarLabel->setFixedSize(DDEWeekCalendar::W_YLunatLabelWindth, DDEWeekCalendar::W_YLunatLabelHeight); m_weekview = new CWeekView(&CalendarManager::getWeekNumOfYear, this); m_weekLabel = new QLabel(); m_weekLabel->setFixedHeight(DDEWeekCalendar::W_YLabelHeight); QFont weeklabelF; weeklabelF.setWeight(QFont::Medium); weeklabelF.setPixelSize(DDECalendar::FontSizeFourteen); m_weekLabel->setFont(weeklabelF); DPalette wpa = m_weekLabel->palette(); wpa.setColor(DPalette::WindowText, QColor("#717171")); m_weekLabel->setPalette(wpa); m_weekLabel->setText(tr("Week")); QFont yLabelF; yLabelF.setWeight(QFont::Medium); yLabelF.setPixelSize(DDECalendar::FontSizeFourteen); m_YearLunarLabel->setFont(yLabelF); DPalette YearLpa = m_YearLunarLabel->palette(); YearLpa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_YearLunarLabel->setPalette(YearLpa); QHBoxLayout *yeartitleLayout = new QHBoxLayout; yeartitleLayout->setMargin(0); yeartitleLayout->setSpacing(0); yeartitleLayout->addSpacing(10); yeartitleLayout->addWidget(m_YearLabel); yeartitleLayout->addWidget(m_dialogIconButton); QHBoxLayout *yeartitleLayout1 = new QHBoxLayout; yeartitleLayout1->setMargin(0); yeartitleLayout1->setSpacing(0); yeartitleLayout1->addWidget(m_YearLunarLabel); yeartitleLayout->addSpacing(6); yeartitleLayout->addLayout(yeartitleLayout1); yeartitleLayout->addStretch(); m_todayframe = new CustomFrame; m_todayframe->setContentsMargins(0, 0, 0, 0); m_todayframe->setRoundState(true, true, true, true); m_todayframe->setBColor(Qt::white); m_todayframe->setFixedHeight(DDEYearCalendar::Y_MLabelHeight); m_todayframe->setboreder(1); QHBoxLayout *todaylayout = new QHBoxLayout; todaylayout->setMargin(0); todaylayout->setSpacing(0); //将显示周数的view加入布局 todaylayout->addWidget(m_weekview); //设置布局 m_todayframe->setLayout(todaylayout); yeartitleLayout->addWidget(m_todayframe, 0, Qt::AlignCenter); yeartitleLayout->addSpacing(10); yeartitleLayout->addWidget(m_weekLabel, 0, Qt::AlignCenter); yeartitleLayout->addStretch(); yeartitleLayout->addWidget(m_today, 0, Qt::AlignRight); m_weekHeadView = new CWeekHeadView(this); m_scheduleView = new CScheduleView(this); m_scheduleView->setviewMargin(73, 109 + 30, 0, 0); m_scheduleView->setRange(763, 1032, QDate(2019, 8, 12), QDate(2019, 8, 18)); m_mainHLayout = new QVBoxLayout; m_mainHLayout->setMargin(0); m_mainHLayout->setSpacing(0); m_mainHLayout->addWidget(m_weekHeadView, 1); m_mainHLayout->addWidget(m_scheduleView, 9); QVBoxLayout *hhLayout = new QVBoxLayout; hhLayout->setMargin(0); hhLayout->setSpacing(0); //头部控件统一高度为 M_YTopHeight QWidget *top = new QWidget(this); top->setFixedHeight(DDEMonthCalendar::M_YTopHeight); top->setLayout(yeartitleLayout); hhLayout->addWidget(top); hhLayout->addLayout(m_mainHLayout); m_tMainLayout = new QHBoxLayout; m_tMainLayout->setMargin(0); m_tMainLayout->setSpacing(0); m_tMainLayout->addLayout(hhLayout); this->setLayout(m_tMainLayout); setTabOrder(m_weekview, m_today); setTabOrder(m_today, m_scheduleView); } /** * @brief initConnection 初始化信号和槽的连接 */ void CWeekWindow::initConnection() { connect(m_today, &CTodayButton::clicked, this, &CWeekWindow::slottoday); //周数信息区域前按钮点击事件关联触发前一周 connect(m_weekview, &CWeekView::signalBtnPrev, this, &CWeekWindow::slotprev); //周数信息区域后按钮点击事件关联触发后一周 connect(m_weekview, &CWeekView::signalBtnNext, this, &CWeekWindow::slotnext); connect(m_weekview, &CWeekView::signalsSelectDate, this, &CWeekWindow::slotSelectDate); connect(m_weekHeadView, &CWeekHeadView::signalsViewSelectDate, this, &CWeekWindow::slotViewSelectDate); connect(m_weekview, &CWeekView::signalIsDragging, this, &CWeekWindow::slotIsDragging); //日程信息区域滚动信号关联 connect(m_scheduleView, &CScheduleView::signalAngleDelta, this, &CWeekWindow::slotAngleDelta); //每周信息区域滚动信号关联 connect(m_weekHeadView, &CWeekHeadView::signalAngleDelta, this, &CWeekWindow::slotAngleDelta); //双击"..."标签切换日视图 connect(m_scheduleView, &CScheduleView::signalsCurrentScheduleDate, this, &CWeekWindow::slotViewSelectDate); connect(m_scheduleView, &CScheduleView::signalSwitchPrePage, this, &CWeekWindow::slotSwitchPrePage); connect(m_scheduleView, &CScheduleView::signalSwitchNextPage, this, &CWeekWindow::slotSwitchNextPage); } /** * @brief setTheMe 根据系统主题类型设置颜色 * @param type 系统主题类型 */ void CWeekWindow::setTheMe(int type) { if (type == 0 || type == 1) { //返回今天按钮的背景色 m_todayframe->setBColor(Qt::white); DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(pa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_YearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_YearLunarLabel->setPalette(LunaPa); m_YearLunarLabel->setForegroundRole(DPalette::WindowText); DPalette wpa = m_weekLabel->palette(); wpa.setColor(DPalette::WindowText, QColor("#717171")); m_weekLabel->setPalette(wpa); m_weekLabel->setForegroundRole(DPalette::WindowText); } else if (type == 2) { //设置返回今天按钮的背景色 QColor bColor = "#FFFFFF"; bColor.setAlphaF(0.05); m_todayframe->setBColor(bColor); DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#C0C6D4")); m_YearLabel->setPalette(pa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_YearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#798BA8")); m_YearLunarLabel->setPalette(LunaPa); m_YearLunarLabel->setForegroundRole(DPalette::WindowText); DPalette wpa = m_weekLabel->palette(); wpa.setColor(DPalette::WindowText, QColor("#717171")); m_weekLabel->setPalette(wpa); m_weekLabel->setForegroundRole(DPalette::WindowText); } m_weekview->setTheMe(type); m_weekHeadView->setTheMe(type); m_scheduleView->setTheMe(type); } /** * @brief setTime 设置CScheduleView的时间 * @param time 时间 */ void CWeekWindow::setTime(QTime time) { m_scheduleView->setTime(time); } /** * @brief setSearchWFlag 设置搜索标志 * @param flag 是否进行了搜索 */ void CWeekWindow::setSearchWFlag(bool flag) { m_searchFlag = flag; update(); } /** * @brief CWeekWindow::updateHeight 更新全天区域高度 */ void CWeekWindow::updateHeight() { m_scheduleView->updateHeight(); } /** * @brief CWeekWindow::setYearData 设置年显示和今天按钮显示 */ void CWeekWindow::setYearData() { if (getSelectDate() == getCurrendDateTime().date()) { m_today->setText(QCoreApplication::translate("today", "Today", "Today")); } else { m_today->setText(QCoreApplication::translate("Return Today", "Today", "Return Today")); } if (getShowLunar()) { m_YearLabel->setText(QString::number(getSelectDate().year()) + tr("Y")); } else { m_YearLabel->setText(QString::number(getSelectDate().year())); } } /** * @brief CWeekWindow::updateShowDate 更新显示时间 * @param isUpdateBar */ void CWeekWindow::updateShowDate(const bool isUpdateBar) { setYearData(); QVector _weekShowData = m_calendarManager->getWeekDate(getSelectDate()); m_weekHeadView->setWeekDay(_weekShowData, getSelectDate()); //获取一周的开始结束时间 m_startDate = _weekShowData.first(); m_stopDate = _weekShowData.last(); //如果时间无效则打印log if (m_startDate.isNull() || m_stopDate.isNull()) { qCWarning(ClientLogger) << "week start or stop date error"; } //设置全天和非全天显示时间范围 m_scheduleView->setRange(m_startDate, m_stopDate); m_scheduleView->setTimeFormat((m_calendarManager->getTimeShowType() ? "AP " : "") + m_calendarManager->getTimeFormat()); //是否更新显示周数窗口 if (isUpdateBar) { m_weekview->setCurrent(getCurrendDateTime()); m_weekview->setSelectDate(getSelectDate()); } if (getShowLunar()) updateShowLunar(); updateShowSchedule(); update(); } /** * @brief CWeekWindow::updateShowSchedule 更新日程显示 */ void CWeekWindow::updateShowSchedule() { m_scheduleView->setShowScheduleInfo(gScheduleManager->getScheduleMap(m_startDate, m_stopDate)); } /** * @brief CWeekWindow::updateShowLunar 更新显示农历信息 */ void CWeekWindow::updateShowLunar() { getLunarInfo(); m_YearLunarLabel->setText(m_lunarYear); QMap weekHuangLiInfo = gLunarManager->getHuangLiDayMap(m_startDate, m_stopDate); m_weekHeadView->setHunagLiInfo(weekHuangLiInfo); } void CWeekWindow::updateSearchScheduleInfo() { m_scheduleView->slotUpdateScene(); } /** * @brief CWeekWindow::setSelectSearchScheduleInfo 设置选中搜索日程 * @param info */ void CWeekWindow::setSelectSearchScheduleInfo(const DSchedule::Ptr &info) { m_scheduleView->setSelectSchedule(info); } /** * @brief CWeekWindow::deleteselectSchedule 快捷键删除日程 */ void CWeekWindow::deleteselectSchedule() { m_scheduleView->slotDeleteitem(); } /** * @brief CWeekWindow::slotIsDragging 判断是否可以拖拽 * @param isDragging */ void CWeekWindow::slotIsDragging(bool &isDragging) { isDragging = m_scheduleView->IsDragging(); } /** * @brief CWeekWindow::slotViewSelectDate 切换日视图并设置选择时间 * @param date */ void CWeekWindow::slotViewSelectDate(const QDate &date) { if (setSelectDate(date)) { //更加界面 updateData(); emit signalSwitchView(3); } } void CWeekWindow::slotSwitchPrePage() { slotprev(); } void CWeekWindow::slotSwitchNextPage() { slotnext(); } /** * @brief slotprev 切换到上一周,隐藏日程浮框 */ void CWeekWindow::slotprev() { if (m_isSwitchStatus) return; m_isSwitchStatus = true; QTimer::singleShot(5, [this]() { switchDate(getSelectDate().addDays(-7)); m_isSwitchStatus = false; }); } /** * @brief slotnext 切换到下一周,隐藏日程浮框 */ void CWeekWindow::slotnext() { if (m_isSwitchStatus) return; m_isSwitchStatus = true; QTimer::singleShot(5, [this]() { switchDate(getSelectDate().addDays(7)); m_isSwitchStatus = false; }); } /** * @brief slottoday 返回到当前时间,隐藏日程浮框 */ void CWeekWindow::slottoday() { switchDate(getCurrendDateTime().date()); } /** * @brief CWeekWindow::slotSelectDate 修改选择时间 * @param date */ void CWeekWindow::slotSelectDate(const QDate &date) { //更新选择时间 setSelectDate(date); updateShowDate(false); } /** * @brief slotAngleDelta 接受处理滚动相对量 * @param delta 滚动相对量 */ void CWeekWindow::slotAngleDelta(int delta) { //如果为拖拽状态则退出 if (!m_scheduleView->IsDragging()) { if (delta > 0) { slotprev(); } else if (delta < 0) { slotnext(); } } } /** * @brief CWeekWindow::switchDate 切换选择时间 * @param date */ void CWeekWindow::switchDate(const QDate &date) { //隐藏提示框 slotScheduleHide(); //设置选择时间 if (setSelectDate(date, true)) { updateData(); } } /** * @brief slotScheduleHide 隐藏日程浮框 */ void CWeekWindow::slotScheduleHide() { m_scheduleView->slotScheduleShow(false); } /** * @brief resizeEvent 调整周视图窗口 * @param event 窗口大小调整事件 */ void CWeekWindow::resizeEvent(QResizeEvent *event) { qreal dw = width() * 0.4186 + 0.5; int dh = 36; //添加1个按钮的宽度 36。原来m_weekview 不包含前后按钮(若加2个按钮的宽度,会导致窗口缩小的时候按钮显示不全) if (!m_searchFlag) { m_weekview->setFixedSize(qRound(dw + 36), dh); } else { m_weekview->setFixedSize(qRound(dw - 100 + 36), dh); } QWidget::resizeEvent(event); } /** * @brief mousePressEvent 鼠标单击隐藏日程浮框 * @param event 鼠标事件 */ void CWeekWindow::mousePressEvent(QMouseEvent *event) { Q_UNUSED(event); slotScheduleHide(); } dde-calendar-5.14.13/calendar-client/src/widget/weekWidget/weekwindow.h000066400000000000000000000065001473346337000257350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef WEEKWINDOW_H #define WEEKWINDOW_H #include "customframe.h" #include "dschedule.h" #include "cschedulebasewidget.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE class CWeekHeadView; class CaLunarDayInfo; class CWeekView; class CScheduleView; class CScheduleSearchView; class CTodayButton; class CWeekWindow: public CScheduleBaseWidget { Q_OBJECT public: explicit CWeekWindow(QWidget *parent = nullptr); ~CWeekWindow() override; //设置是否显示阴历信息 void setLunarVisible(bool state); //初始化界面设置 void initUI(); //初始化信号和槽的连接 void initConnection(); //根据系统主题类型设置颜色 void setTheMe(int type = 0); //设置CScheduleView的时间 void setTime(QTime time); //设置搜索标志 void setSearchWFlag(bool flag); //更新全天区域高度 void updateHeight(); //设置年显示和今天按钮显示 void setYearData() override; //更新显示时间 void updateShowDate(const bool isUpdateBar = true) override; //更新日程显示 void updateShowSchedule() override; //更新显示农历信息 void updateShowLunar() override; //更新界面搜索日程显示 void updateSearchScheduleInfo() override; //设置选中搜索日程 void setSelectSearchScheduleInfo(const DSchedule::Ptr &info) override; //删除选中日程 void deleteselectSchedule() override; signals: /** * @brief signalCurrentDate 设置时间信号 * @param date 时间 */ void signalCurrentDate(QDate date); /** * @brief signalsViewSelectDate 选择时间的信号 * @param date 时间 */ void signalsViewSelectDate(QDate date); public slots: //判断是否可以拖拽 void slotIsDragging(bool &isDragging); //切换日视图并设置选择时间 void slotViewSelectDate(const QDate &date); void slotSwitchPrePage(); void slotSwitchNextPage(); public slots: //隐藏日程浮框 void slotScheduleHide(); private slots: //切换上一周 void slotprev(); //切换下一周 void slotnext(); //返回到当前时间 void slottoday(); //修改选择时间 void slotSelectDate(const QDate &date); //接受处理滚动相对量 void slotAngleDelta(int delta); private: //切换选择时间 void switchDate(const QDate &date); protected: void resizeEvent(QResizeEvent *event) override; void mousePressEvent(QMouseEvent *event) override; private: CWeekHeadView *m_weekHeadView = nullptr; //周视图头 CTodayButton *m_today = nullptr; QDate m_currentdate; QLabel *m_YearLabel = nullptr; QLabel *m_YearLunarLabel = nullptr; QLabel *m_weekLabel = nullptr; //显示周数 CWeekView *m_weekview = nullptr; CustomFrame *m_todayframe = nullptr; CScheduleView *m_scheduleView = nullptr; QVBoxLayout *m_mainHLayout = nullptr; QString m_searchText; QHBoxLayout *m_tMainLayout = nullptr; bool m_searchFlag = false; bool m_isSwitchStatus = false; QDate m_startDate; QDate m_stopDate; }; #endif // YEARWINDOW_H dde-calendar-5.14.13/calendar-client/src/widget/yearWidget/000077500000000000000000000000001473346337000234055ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-client/src/widget/yearWidget/yearscheduleview.cpp000066400000000000000000000260741473346337000274720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "yearscheduleview.h" #include "scheduledlg.h" #include "scheduledatamanage.h" #include "constants.h" #include "schedulemanager.h" #include "cscheduleoperation.h" #include #include #include DGUI_USE_NAMESPACE CYearScheduleView::CYearScheduleView(QWidget *parent) : DWidget(parent) { m_textfont.setWeight(QFont::Medium); m_textfont.setPixelSize(DDECalendar::FontSizeTwelve); } CYearScheduleView::~CYearScheduleView() { } bool YScheduleDateThan(const DSchedule::Ptr &s1, const DSchedule::Ptr &s2) { QDate bDate1 = s1->dtStart().date(); QDate eDate1 = s1->dtEnd().date(); QDate bDate2 = s2->dtStart().date(); QDate eDate2 = s2->dtEnd().date(); if (bDate1 != eDate1 && bDate2 == eDate2) { return true; } else if (bDate1 == eDate1 && bDate2 != eDate2) { return false; } else if (bDate1 != eDate1 && bDate2 != eDate2) { return bDate1 < bDate2; } else { if (s1->dtStart() == s2->dtStart()) { return s1->summary() < s2->summary(); } else { return s1->dtStart() < s2->dtStart(); } } } bool YScheduleDaysThan(const DSchedule::Ptr &s1, const DSchedule::Ptr &s2) { return s1->dtStart().date().daysTo(s1->dtEnd().date()) > s2->dtStart().date().daysTo(s2->dtEnd().date()); } void CYearScheduleView::setData(DSchedule::List &vListData) { DSchedule::List valldayListData, vDaylistdata; for (int i = 0; i < vListData.count(); i++) { DSchedule::Ptr ptr = vListData.at(i); if (ptr.isNull()) { continue; } if (ptr->allDay()) { valldayListData.append(ptr); } else { vDaylistdata.append(ptr); } } std::sort(valldayListData.begin(), valldayListData.end(), YScheduleDaysThan); std::sort(valldayListData.begin(), valldayListData.end(), YScheduleDateThan); std::sort(vDaylistdata.begin(), vDaylistdata.end(), YScheduleDaysThan); std::sort(vDaylistdata.begin(), vDaylistdata.end(), YScheduleDateThan); for (int i = 0; i < valldayListData.count(); i++) { DSchedule::List::iterator iter = valldayListData.begin(); //如果为节假日日程 if (CScheduleOperation::isFestival(valldayListData.at(i))) { DSchedule::Ptr moveDate; moveDate = valldayListData.at(i); valldayListData.removeAt(i); valldayListData.insert(iter, moveDate); } } m_vlistData.clear(); m_vlistData.append(valldayListData); m_vlistData.append(vDaylistdata); if (m_vlistData.size() > DDEYearCalendar::YearScheduleListMaxcount) { DSchedule::List vTListData; for (int i = 0; i < 4; i++) { if (m_vlistData.at(i)->dtStart().date() != m_vlistData.at(i)->dtEnd().date() && !m_vlistData.at(i)->allDay()) { if (m_vlistData.at(i)->dtStart().date() != m_currentDate) { m_vlistData[i]->setAllDay(true); } } vTListData.append(m_vlistData.at(i)); } DSchedule::Ptr info; info.reset(new DSchedule()); info->setSummary("......"); info->setUid("-1"); vTListData.append(info); m_vlistData = vTListData; } } void CYearScheduleView::clearData() { m_vlistData.clear(); } void CYearScheduleView::showWindow() { if (m_vlistData.isEmpty()) { setFixedSize(130, 45); } else { updateDateShow(); } } void CYearScheduleView::setTheMe(int type) { if (type == 0 || type == 1) { m_btimecolor = "#414D68"; m_btimecolor.setAlphaF(0.7); m_btTextColor = "#414D68"; } else if (type == 2) { m_btimecolor = "#C0C6D4"; m_btimecolor.setAlphaF(0.7); m_btTextColor = "#C0C6D4"; } } void CYearScheduleView::setCurrentDate(const QDate &cdate) { m_currentDate = cdate; } QDate CYearScheduleView::getCurrentDate() { return m_currentDate; } void CYearScheduleView::setTimeFormat(const QString &format) { m_timeFormat = format; update(); } int CYearScheduleView::getPressScheduleIndex() { int resutle = -1; //获取全局坐标 QPoint currentPos = QCursor::pos(); //转换为当前坐标 currentPos = this->mapFromGlobal(currentPos); for (int i = 0; i < m_drawRect.size(); ++i) { //若坐标在绘制标签中则更新返回值 if (m_drawRect.at(i).contains(currentPos)) { resutle = i; break; } } return resutle; } void CYearScheduleView::updateDateShow() { int sViewNum = 0; if (!m_vlistData.isEmpty()) { if (m_vlistData.size() > DDEYearCalendar::YearScheduleListMaxcount) { sViewNum = DDEYearCalendar::YearScheduleListMaxcount; } else { sViewNum = m_vlistData.size(); } } if (!m_vlistData.isEmpty()) setFixedSize(240, 45 + (sViewNum - 1) * 29); update(); m_drawRect.clear(); //对绘制标签矩阵进行缓存 for (int i = 0; i < m_vlistData.size(); i++) { m_drawRect.append(QRect(30, 10 + i * 29, width() - 50, 26)); } return; } void CYearScheduleView::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 反锯齿; if (m_vlistData.isEmpty()) { paintItem(painter); } else { for (int i = 0; i < m_vlistData.size(); ++i) { paintItem(painter, m_vlistData.at(i), i); } } } void CYearScheduleView::paintItem(QPainter &painter, DSchedule::Ptr info, int index) { int labelwidth = width() - 30; int bHeight = index * 29 + 10; int labelheight = 28; DSchedule::Ptr &gd = info; if (info->uid() == "-1") { QString str = "..."; painter.save(); painter.setPen(m_btimecolor); painter.setFont(m_textfont); painter.drawText(QRect(25, bHeight, labelwidth - 80, labelheight - 2), Qt::AlignLeft | Qt::AlignVCenter, str); painter.restore(); } else { if (info->uid() != "-1") { //圆点m_solocolor QColor gdColor; DScheduleType::Ptr type = gScheduleManager->getScheduleTypeByScheduleId(info->scheduleTypeID()); if (nullptr != type) { gdColor = type->getColorCode(); } painter.save(); painter.setBrush(QBrush(gdColor)); painter.setPen(Qt::NoPen); painter.drawEllipse(QRect(25, bHeight + (labelheight - 8) / 2, 8, 8)); painter.restore(); } QString str; //左边文字 painter.save(); painter.setPen(m_btTextColor); painter.setFont(m_textfont); QFontMetrics fm = painter.fontMetrics(); QString tSTitleName = gd->summary(); tSTitleName.replace("\n", ""); str = tSTitleName; int tilenameW = labelwidth - 80; QString tStr; for (int i = 0; i < str.count(); i++) { tStr.append(str.at(i)); int widthT = fm.horizontalAdvance(tStr) + 5; if (widthT >= tilenameW) { tStr.chop(1); break; } } if (tStr != str) { tStr = tStr + "..."; } painter.drawText(QRect(41, bHeight, tilenameW, labelheight - 2), Qt::AlignLeft | Qt::AlignVCenter, tStr); painter.restore(); if (info->uid() != "-1") { //右边时间 painter.save(); painter.setPen(m_btimecolor); painter.setFont(m_textfont); if (info->allDay()) { str = tr("All Day"); } else { if (m_currentDate > info->dtStart().date()) { str = tr("All Day"); } else { str = info->dtStart().time().toString(m_timeFormat); } } painter.drawText(QRect(width() - 70, bHeight, 57, labelheight - 2), Qt::AlignRight | Qt::AlignVCenter, str); painter.restore(); } } } void CYearScheduleView::paintItem(QPainter &painter) { //左边文字 painter.save(); painter.setPen(m_btTextColor); painter.setFont(m_textfont); QString tSTitleName = tr("No event"); painter.drawText(QRect(0, 0, width(), height()), Qt::AlignCenter, tSTitleName); painter.restore(); } CYearScheduleOutView::CYearScheduleOutView(QWidget *parent) : DArrowRectangle(DArrowRectangle::ArrowLeft, DArrowRectangle::FloatWidget, parent) { //如果dtk版本为5.3以上则使用新接口 #if (DTK_VERSION > DTK_VERSION_CHECK(5, 3, 0, 0)) //设置显示圆角 setRadiusArrowStyleEnable(true); //设置圆角 setRadius(DARROWRECT::DRADIUS); #endif yearscheduleview = new CYearScheduleView(); this->setContent(yearscheduleview); } void CYearScheduleOutView::setData(DSchedule::List &vListData) { list_count = vListData.size(); yearscheduleview->setData(vListData); yearscheduleview->showWindow(); //根据widget的高度调整圆角 int value = yearscheduleview->height() / 6; //如果圆角最大为15 value = value > 15 ? 15 : value; setRadius(value); scheduleinfoList = yearscheduleview->getlistdate(); } void CYearScheduleOutView::clearData() { yearscheduleview->clearData(); } void CYearScheduleOutView::setTheMe(int type) { yearscheduleview->setTheMe(type); //根据主题设备不一样的背景色 if (type == 2) { setBackgroundColor(DBlurEffectWidget::DarkColor); } else { setBackgroundColor(DBlurEffectWidget::LightColor); } } void CYearScheduleOutView::setCurrentDate(const QDate &cDate) { currentdate = cDate; yearscheduleview->setCurrentDate(cDate); } /** * @brief CYearScheduleOutView::setDirection 设置箭头方向 * @param value */ void CYearScheduleOutView::setDirection(DArrowRectangle::ArrowDirection value) { //设置箭头方向 this->setArrowDirection(value); //设置内容窗口 this->setContent(yearscheduleview); } void CYearScheduleOutView::setTimeFormat(const QString &format) { yearscheduleview->setTimeFormat(format); } void CYearScheduleOutView::mousePressEvent(QMouseEvent *event) { Q_UNUSED(event) //获取当前点击的标签编号 int currentIndex = yearscheduleview->getPressScheduleIndex(); if (currentIndex > -1 && currentIndex < scheduleinfoList.size()) { if (currentIndex > 3 && list_count > DDEYearCalendar::YearScheduleListMaxcount) { emit signalsViewSelectDate(currentdate); this->hide(); //跳转到周视图 } else { //如果日程类型不为节假日或纪念日则显示编辑框 if (!CScheduleOperation::isFestival(scheduleinfoList.at(currentIndex))) { //因为提示框会消失,所以设置CScheduleDlg的父类为主窗口 CScheduleDlg dlg(0, qobject_cast(this->parent())); dlg.setData(scheduleinfoList.at(currentIndex)); dlg.exec(); } } } } dde-calendar-5.14.13/calendar-client/src/widget/yearWidget/yearscheduleview.h000066400000000000000000000100031473346337000271200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef YEARSCHEDULEVIEW_H #define YEARSCHEDULEVIEW_H #include "dschedule.h" #include #include DWIDGET_USE_NAMESPACE class CYearScheduleOutView; class CYearScheduleView : public DWidget { Q_OBJECT public: /** * @brief CYearScheduleView 构造函数 * @param parent 父类 */ explicit CYearScheduleView(QWidget *parent = nullptr); /** * @brief ~CYearScheduleView 析构函数 */ ~CYearScheduleView() override; /** * @brief setData 设置日程信息,并全天日程置于非全天日程之前 * @param vListData 日程信息 */ void setData(DSchedule::List &vListData); /** * @brief getlistdate 获取日程信息 * @return 日程信息 */ DSchedule::List getlistdate() { return m_vlistData; } /** * @brief clearData 清除日程信息 */ void clearData(); /** * @brief showWindow 设置日程浮框的大小 * @return 日程浮框的宽度 */ void showWindow(); /** * @brief setTheMe 根据系统主题类型设置颜色 * @param type 系统主题类型 */ void setTheMe(int type = 0); /** * @brief setCurrentDate 设置日程所在当天的日期 * @param cDate 日期 */ void setCurrentDate(const QDate &cdate); /** * @brief getCurrentDate 获取日程所在当天的日期 * @return 日期 */ QDate getCurrentDate(); void setTimeFormat(const QString &format = "h:mm"); //判断点击位置是否包含对应的日程信息 int getPressScheduleIndex(); private: /** * @brief updateDateShow 调整最多展示日程为五个,并设置浮框大小 */ void updateDateShow(); protected: /** * @brief paintEvent 绘制日程 * @param event 绘图事件 */ void paintEvent(QPaintEvent *event) override; /** * @brief paintItem 绘制日程 * @param info 日程信息 * @param index 日程的索引 */ void paintItem(QPainter &painter, DSchedule::Ptr info, int index); /** * @brief paintItem */ void paintItem(QPainter &painter); private: DSchedule::List m_vlistData; QDate m_currentDate; QColor m_btimecolor = "#526A7F"; QColor m_btTextColor = "#414D68"; QFont m_textfont; QString m_timeFormat = "h:mm"; QVector m_drawRect; }; class CYearScheduleOutView : public DArrowRectangle { Q_OBJECT public: /** * @brief CYearScheduleOutView 构造函数 * @param parent 父类 */ explicit CYearScheduleOutView(QWidget *parent = nullptr); /** * @brief setData 设置日程信息 * @param vListData 日程信息 */ void setData(DSchedule::List &vListData); /** * @brief clearData 清楚数据 */ void clearData(); /** * @brief setTheMe 设置系统主题颜色 * @param type 系统主题 */ void setTheMe(int type = 0); /** * @brief setCurrentDate 设置日程所在当天的日期 * @param cDate 日期 */ void setCurrentDate(const QDate &cDate); //设置箭头方向 void setDirection(ArrowDirection value); void setTimeFormat(const QString &format); signals: /** * @brief signalsViewSelectDate 跳转视图信号 * @param date 当天的时间 */ void signalsViewSelectDate(QDate date, const int pressType = 3); /** * @brief signalupdateschedule 更新日程信息的信号 */ void signalupdateschedule(); private: CYearScheduleView *yearscheduleview = nullptr; DSchedule::List scheduleinfoList; QDate currentdate; int list_count = 0; protected: /** * @brief mousePressEvent 鼠标单击事件,单击非节日日程进行编辑,单击"..."区域跳转到周视图。 * @param event 鼠标事件 */ void mousePressEvent(QMouseEvent *event) override; }; #endif // YEARSCHEDULEVIEW_H dde-calendar-5.14.13/calendar-client/src/widget/yearWidget/yearview.cpp000066400000000000000000000152521473346337000257510ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "yearview.h" #include "constants.h" #include "configsettings.h" #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CYearView::CYearView(QWidget *parent) : CustomFrame(parent) { //设置焦点类型 setFocusPolicy(Qt::FocusPolicy::TabFocus); setMouseTracking(true); //add separator line m_currentMouth = new CustomFrame(); m_currentMouth->setObjectName("currentMouth"); m_currentMouth->setFixedHeight(24); m_currentMouth->setContentsMargins(0, 0, 0, 0); m_currentMouth->setTextAlign(Qt::AlignLeft); m_momthFont.setWeight(QFont::Medium); m_momthFont.setPixelSize(DDECalendar::FontSizeSixteen); m_currentMouth->setTextFont(m_momthFont); QHBoxLayout *separatorLineLayout = new QHBoxLayout; separatorLineLayout->setMargin(0); separatorLineLayout->setSpacing(0); separatorLineLayout->setContentsMargins(0, 0, 0, 0); separatorLineLayout->addWidget(m_currentMouth); separatorLineLayout->addStretch(); m_currentMouth->show(); m_currentMouth->installEventFilter(this); m_weekWidget = new CWeekWidget(this); // m_weekWidget->setMinimumHeight(20); m_monthView = new MonthBrefWidget(this); connect(m_monthView, &MonthBrefWidget::signalPressDate, this, &CYearView::slotPressClickDate); connect(m_monthView, &MonthBrefWidget::signalDoubleClickDate, this, &CYearView::slotDoubleClickDate); m_hhLayout = new QVBoxLayout; m_hhLayout->addLayout(separatorLineLayout); m_hhLayout->addWidget(m_weekWidget, 1); m_hhLayout->addWidget(m_monthView, 6); m_hhLayout->setMargin(0); m_hhLayout->setSpacing(0); m_hhLayout->setContentsMargins(13, 10, 10, 10); setLayout(m_hhLayout); } /** * @brief slotDoubleClickDate 隐藏日程浮框,并发出鼠标双击的信号 * @param date 传递时间参数 */ void CYearView::slotDoubleClickDate(const QDate &date) { emit signalMousePress(date, 1); } /** * @brief slotPressClickDate 鼠标单击日期,显示日程浮框 * @param date 传递日程参数 */ void CYearView::slotPressClickDate(const QDate &date) { emit signalMousePress(date, 0); } /** * @brief setTheMe 根据系统主题类型,设置颜色 * @param type 系统主题类型 */ void CYearView::setTheMe(int type) { m_themetype = type; if (type == 0 || type == 1) { m_bnormalColor = Qt::white; m_currentMouth->setTextColor(QColor("#CF0059")); } else if (type == 2) { m_bnormalColor = "#FFFFFF"; m_bnormalColor.setAlphaF(0.05); m_currentMouth->setTextColor(QColor("#BF1D63")); } QColor monthcolor = Qt::white; monthcolor.setAlphaF(0); m_currentMouth->setBColor(monthcolor); } void CYearView::setShowMonthDate(const QDate &showMonth) { m_showMonthDate = QDate(showMonth.year(), showMonth.month(), 1); m_currentMouth->setTextStr(QLocale::system().monthName(m_showMonthDate.month(), QLocale::ShortFormat)); m_monthView->setShowMonthDate(m_showMonthDate); } //获取显示的月 QDate CYearView::getShowMonthDate() { return m_showMonthDate; } /** * @brief CYearView::setHasScheduleSet * @param hasScheduleSet * 设置含有日程的集合 */ void CYearView::setHasScheduleSet(const QSet &hasScheduleSet) { m_monthView->setHasScheduleDateSet(hasScheduleSet); } void CYearView::setHasSearchScheduleSet(const QSet &hasScheduleSet) { m_monthView->setHasSearchScheduleSet(hasScheduleSet); } /** * @brief CYearView::getStartAndStopDate 获取这个月开始结束时间 * @param startDate * @param stopDate * @return */ bool CYearView::getStartAndStopDate(QDate &startDate, QDate &stopDate) { startDate = m_showMonthDate; stopDate = m_showMonthDate.addMonths(1); stopDate = stopDate.addDays(-1); return true; } /** * @brief eventFilter 过滤器,双击年视图下的月份跳转到月视图。 * @param o 事件对象 * @param e 事件类型 * @return false */ bool CYearView::eventFilter(QObject *o, QEvent *e) { QWidget *cell = qobject_cast(o); if (cell == m_currentMouth) { if (e->type() == QEvent::MouseButtonDblClick) { emit signalMousePress(m_showMonthDate, 2); } } return false; } /** * @brief resizeEvent 更新月份框的高度 * @param event 窗口大小调整事件 */ void CYearView::resizeEvent(QResizeEvent *event) { int leftmagin = qFloor(width() * 0.06435 + 0.5); int rightmagin = leftmagin; int topmagin = qFloor(height() * 0.02955 + 0.5); int buttonmagin = qFloor(height() * 0.044 + 0.5); m_hhLayout->setContentsMargins(leftmagin, topmagin, rightmagin, buttonmagin); m_momthFont.setPixelSize(qFloor(16 + (height() - 159) / 16.75)); m_currentMouth->setTextFont(m_momthFont); m_currentMouth->setFixedHeight(24 + (height() - 159) / 12); m_currentMouth->update(); QFrame::resizeEvent(event); } /** * @brief paintEvent 绘制每个月的背景 * @param e 绘图事件 */ void CYearView::paintEvent(QPaintEvent *e) { Q_UNUSED(e); int labelwidth = width() - 2 * m_borderframew; int labelheight = height() - 2 * m_borderframew; QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 反锯齿; painter.setBrush(QBrush(m_bnormalColor)); painter.setPen(Qt::NoPen); QPainterPath painterPath; painterPath.moveTo(m_radius, m_borderframew); painterPath.arcTo(QRect(m_borderframew, m_borderframew, m_radius * 2, m_radius * 2), 90, 90); painterPath.lineTo(0, labelheight - m_radius); painterPath.arcTo(QRect(m_borderframew, labelheight - m_radius * 2, m_radius * 2, m_radius * 2), 180, 90); painterPath.lineTo(labelwidth - m_radius, labelheight); painterPath.arcTo(QRect(labelwidth - m_radius * 2, labelheight - m_radius * 2, m_radius * 2, m_radius * 2), 270, 90); painterPath.lineTo(labelwidth, m_radius); painterPath.arcTo(QRect(labelwidth - m_radius * 2, m_borderframew, m_radius * 2, m_radius * 2), 0, 90); painterPath.lineTo(m_radius, m_borderframew); painterPath.closeSubpath(); painter.drawPath(painterPath); if (hasFocus()) { //有焦点,绘制焦点 QStyleOptionFocusRect option; option.initFrom(this); option.backgroundColor = palette().color(QPalette::Background); style()->drawPrimitive(QStyle::PE_FrameFocusRect, &option, &painter, this); } } dde-calendar-5.14.13/calendar-client/src/widget/yearWidget/yearview.h000066400000000000000000000050671473346337000254210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef YEARVIEW_H #define YEARVIEW_H #include "customframe.h" #include "monthbrefwidget.h" #include "scheduledatamanage.h" #include "cweekwidget.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE class CYearMonthView; class CYearView: public CustomFrame { Q_OBJECT public: explicit CYearView(QWidget *parent = nullptr); //根据系统主题类型,设置颜色 void setTheMe(int type = 0); //设置显示的月 void setShowMonthDate(const QDate &showMonth); //获取显示的月 QDate getShowMonthDate(); //设置含有日程的日期集合 void setHasScheduleSet(const QSet &hasScheduleSet); //设置含有搜索日程的日期集合 void setHasSearchScheduleSet(const QSet &hasScheduleSet); //获取这个月开始结束时间 bool getStartAndStopDate(QDate &startDate, QDate &stopDate); signals: /** * @brief signalMousePress 鼠标点击事件触发信号 * @param selectDate 选择时间 * @param pressType 触发事件类型 * 0:点击时间 1:双击时间 2: 双击月 */ void signalMousePress(const QDate &selectDate, const int pressType = 0); public slots: void slotDoubleClickDate(const QDate &date); //鼠标单击日期,显示日程浮框 void slotPressClickDate(const QDate &date); protected: //过滤器,双击年视图下的月份跳转到月视图。 bool eventFilter(QObject *o, QEvent *e) override; //更新月份框的高度 void resizeEvent(QResizeEvent *event) override; //绘制每个月的背景 void paintEvent(QPaintEvent *e) override; private: CustomFrame *m_currentMouth = nullptr; QVector m_days{}; QDate m_showMonthDate; QFont m_momthFont; QColor m_currentDayTextColor = "#2ca7f8"; QColor m_weekendsTextColor = Qt::black; QColor m_festivalTextColor = Qt::black; QColor m_cellBackgroundColor = "#FFFFFF" ; QVBoxLayout *m_hhLayout = nullptr; int m_themetype = 1; QColor m_bnormalColor = "#FFFFFF"; const int m_radius = 8; const int m_borderframew = 0; MonthBrefWidget *m_monthView = nullptr; CWeekWidget *m_weekWidget = nullptr; //周显示区域 }; #endif // YEARVIEW_H dde-calendar-5.14.13/calendar-client/src/widget/yearWidget/yearwindow.cpp000066400000000000000000000725721473346337000263160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "yearwindow.h" #include "yearview.h" #include "constants.h" #include "schedulesearchview.h" #include "yearscheduleview.h" #include "calendarglobalenv.h" #include #include #include #include #include #include DGUI_USE_NAMESPACE CYearWindow::CYearWindow(QWidget *parent) : CScheduleBaseWidget(parent) { initUI(); initConnection(); setContentsMargins(0, 0, 0, 0); //设置接受触摸事件 this->setAttribute(Qt::WA_AcceptTouchEvents); //截获相应的gesture手势 grabGesture(Qt::TapGesture); grabGesture(Qt::TapAndHoldGesture); grabGesture(Qt::PanGesture); //设置年份显示 setYearData(); } CYearWindow::~CYearWindow() { } /** * @brief eventFilter 过滤器,过滤返回今天的按钮事件 * @param watched 事件对象 * @param event 事件类型 * @return false */ bool CYearWindow::eventFilter(QObject *watched, QEvent *event) { if (watched == m_today) { if (event->type() == QEvent::MouseButtonPress) { slottoday(); } if (event->type() == QEvent::KeyPress) { //点击 回车键 返回今天 QKeyEvent *key = dynamic_cast(event); if (key->key() == Qt::Key_Return) { //返回今天 slottoday(); } } } else if (watched == m_yearWidget) { //上下键切换年份 if (event->type() == QEvent::KeyPress) { QKeyEvent *key = dynamic_cast(event); if (key->key() == Qt::Key_Up) { //上一年 slotprev(); } else if (key->key() == Qt::Key_Down) { //下一年 slotnext(); } } } return QWidget::eventFilter(watched, event); } /** * @brief mousePressEvent 鼠标单击事件,单击日期区域外,隐藏日程浮框 * @param event 鼠标事件 */ void CYearWindow::mousePressEvent(QMouseEvent *event) { if (event->source() == Qt::MouseEventSynthesizedByQt) { //如果为触摸点击则记录开始坐标 m_touchBeginPoint = event->pos(); } QWidget::mousePressEvent(event); } /** * @brief resizeEvent 窗口大小调整事件,搜索时,调整边框大小 * @param event 窗口大小调整事件 */ void CYearWindow::resizeEvent(QResizeEvent *event) { Q_UNUSED(event); m_topWidget->setGeometry(0, 0, this->width(), DDEMonthCalendar::M_YTopHeight); } void CYearWindow::mouseMoveEvent(QMouseEvent *event) { if (event->source() == Qt::MouseEventSynthesizedByQt) { return; } QWidget::mouseMoveEvent(event); } void CYearWindow::mouseReleaseEvent(QMouseEvent *event) { if (event->source() == Qt::MouseEventSynthesizedByQt) { //如果为触摸移动状态 if (m_touchState == 2) { //获取停止位置 QPointF stopPoint = event->pos(); //计算出移动状态 TouchGestureData touchGData = calculateAzimuthAngle(m_touchBeginPoint, stopPoint); //如果方向为上下则切换年份 switch (touchGData.movingDirection) { case TouchGestureData::T_TOP: { slotnext(); break; } case TouchGestureData::T_BOTTOM: { slotprev(); break; } default: break; } } m_touchState = 0; } } bool CYearWindow::event(QEvent *e) { if (e->type() == QEvent::Gesture) return gestureEvent(dynamic_cast(e)); return QWidget::event(e); } /** * @brief gestureEvent 触摸手势处理 * @param event 手势事件 * @return */ bool CYearWindow::gestureEvent(QGestureEvent *event) { if (QGesture *tap = event->gesture(Qt::TapGesture)) tapGestureTriggered(dynamic_cast(tap)); if (QGesture *pan = event->gesture(Qt::PanGesture)) panTriggered(dynamic_cast(pan)); return true; } /** * @brief tapGestureTriggered 轻切手势处理 * @param tap 轻切手势事件 */ void CYearWindow::tapGestureTriggered(QTapGesture *tap) { switch (tap->state()) { case Qt::NoGesture: { break; } case Qt::GestureStarted: { m_touchState = 1; break; } case Qt::GestureUpdated: { m_touchState = 2; break; } case Qt::GestureFinished: { break; } default: { //GestureCanceled } } } /** * @brief panTriggered 多指滑动手势处理 * @param pan 多指滑动手势 */ void CYearWindow::panTriggered(QPanGesture *pan) { switch (pan->state()) { case Qt::GestureFinished: { QPointF zeroPoint(0, 0); QPointF offset = pan->offset(); TouchGestureData touchGData = calculateAzimuthAngle(zeroPoint, offset); switch (touchGData.movingDirection) { case TouchGestureData::T_TOP: { slotnext(); break; } case TouchGestureData::T_BOTTOM: { slotprev(); break; } default: break; } break; } default: //GestureCanceled break; } } /** * @brief calculateAzimuthAngle 计算方位角 * @param startPoint 起始坐标 * @param stopPoint 结束坐标 * @return 触摸手势数据 */ TouchGestureData CYearWindow::calculateAzimuthAngle(QPointF &startPoint, QPointF &stopPoint) { TouchGestureData _result{}; qreal angle = 0.0000; qreal dx = stopPoint.rx() - startPoint.rx(); qreal dy = stopPoint.ry() - startPoint.ry(); //计算方位角 angle = qAtan2(dy, dx) * 180 / M_PI; qreal line = qSqrt(dx * dx + dy * dy); //如果移动距离大于10则有效 if (line > 10) { if ((angle <= -45) && (angle >= -135)) { _result.movingDirection = TouchGestureData::T_TOP; } else if ((angle > -45) && (angle < 45)) { _result.movingDirection = TouchGestureData::T_RIGHT; } else if ((angle >= 45) && (angle <= 135)) { _result.movingDirection = TouchGestureData::T_BOTTOM; } else { _result.movingDirection = TouchGestureData::T_LEFT; } } _result.angle = angle; _result.length = line; return _result; } /** * @brief initUI 初始化年视图的界面显示 */ void CYearWindow::initUI() { m_today = new LabelWidget(this); m_today->setObjectName("yearToDay"); m_today->setAccessibleName("yearToDay"); m_today->installEventFilter(this); QFont todayfont; todayfont.setPixelSize(DDECalendar::FontSizeSixteen); m_today->setFont(todayfont); m_today->setAlignment(Qt::AlignCenter); m_today->setText(QCoreApplication::translate("today", "Today", "Today")); m_today->setFixedWidth(88); m_today->setAutoFillBackground(true); m_today->setFixedHeight(DDEYearCalendar::Y_MLabelHeight - 4); m_prevButton = new DIconButton(DStyle::SP_ArrowLeft, this); //设置对象名称和辅助显示名称 m_prevButton->setObjectName("PrevButton"); m_prevButton->setAccessibleName("PrevButton"); m_prevButton->setFixedWidth(DDEYearCalendar::Y_MLabelHeight); m_prevButton->setFixedHeight(DDEYearCalendar::Y_MLabelHeight); m_nextButton = new DIconButton(DStyle::SP_ArrowRight, this); //设置对象名称和辅助显示名称 m_nextButton->setObjectName("NextButton"); m_nextButton->setAccessibleName("NextButton"); m_nextButton->setFixedWidth(DDEYearCalendar::Y_MLabelHeight); m_nextButton->setFixedHeight(DDEYearCalendar::Y_MLabelHeight); m_yearLabel = new QLabel(this); m_yearLabel->setFixedHeight(DDEYearCalendar::Y_YLabelHeight); QFont t_labelF; t_labelF.setWeight(QFont::Medium); t_labelF.setPixelSize(DDECalendar::FontSizeTwentyfour); m_yearLabel->setFont(t_labelF); DPalette pa = m_yearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_yearLabel->setPalette(pa); m_yearLunarLabel = new QLabel(this); m_yearLunarLabel->setFixedSize(DDEMonthCalendar::M_YLunaLabelWindth, DDEMonthCalendar::M_YLunaLabelHeight); QFont yLabelF; yLabelF.setWeight(QFont::Medium); yLabelF.setPixelSize(DDECalendar::FontSizeFourteen); m_yearLunarLabel->setFont(yLabelF); DPalette LunaPa = m_yearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_yearLunarLabel->setPalette(LunaPa); m_yearLunarDayLabel = new QLabel(this); m_yearLunarDayLabel->setFixedSize(108, DDEMonthCalendar::M_YLunaLabelHeight); m_yearLunarDayLabel->setFont(yLabelF); m_yearLunarDayLabel->setPalette(LunaPa); m_yearLunarDayLabel->setAlignment(Qt::AlignRight); QHBoxLayout *yeartitleLayout = new QHBoxLayout; yeartitleLayout->setMargin(0); yeartitleLayout->setSpacing(0); yeartitleLayout->addSpacing(10); yeartitleLayout->addWidget(m_yearLabel); yeartitleLayout->addWidget(m_dialogIconButton); QHBoxLayout *yeartitleLayout1 = new QHBoxLayout; yeartitleLayout1->setMargin(0); yeartitleLayout1->setSpacing(0); yeartitleLayout1->addWidget(m_yearLunarLabel); yeartitleLayout1->addStretch(); yeartitleLayout1->addWidget(m_yearLunarDayLabel, 0, Qt::AlignVCenter); m_todayFrame = new CustomFrame(this); m_todayFrame->setContentsMargins(0, 0, 0, 0); m_todayFrame->setRoundState(true, true, true, true); m_todayFrame->setBColor(Qt::white); m_todayFrame->setFixedHeight(DDEYearCalendar::Y_MLabelHeight); m_todayFrame->setboreder(1); QHBoxLayout *todaylayout = new QHBoxLayout; todaylayout->setMargin(0); todaylayout->setSpacing(0); //设置tab选中顺序 setTabOrder(m_prevButton, m_today); setTabOrder(m_today, m_nextButton); todaylayout->addWidget(m_prevButton); todaylayout->addWidget(m_today, 0, Qt::AlignCenter); todaylayout->addWidget(m_nextButton); m_todayFrame->setLayout(todaylayout); yeartitleLayout1->addSpacing(10); yeartitleLayout1->addWidget(m_todayFrame); yeartitleLayout->addSpacing(6); yeartitleLayout->addLayout(yeartitleLayout1); m_firstYearWidget = new YearFrame(); m_secondYearWidget = new YearFrame(); //设置过滤事件 m_firstYearWidget->installEventFilter(this); m_secondYearWidget->installEventFilter(this); m_StackedWidget = new AnimationStackedWidget(AnimationStackedWidget::TB); m_StackedWidget->addWidget(m_firstYearWidget); m_StackedWidget->addWidget(m_secondYearWidget); m_StackedWidget->setContentsMargins(0, 0, 0, 0); m_StackedWidget->setDuration(600); m_StackedWidget->setFrameShape(QFrame::NoFrame); m_StackedWidget->setFrameShadow(QFrame::Plain); m_yearWidget = qobject_cast(m_StackedWidget->widget(0)); QVBoxLayout *hhLayout = new QVBoxLayout; hhLayout->setMargin(0); hhLayout->setSpacing(0); hhLayout->setContentsMargins(0, 0, 0, 0); hhLayout->addWidget(m_StackedWidget); m_tMainLayout = new QVBoxLayout; m_tMainLayout->setMargin(0); m_tMainLayout->setSpacing(0); m_tMainLayout->setContentsMargins(0, 0, 0, 0); m_tMainLayout->addLayout(hhLayout); this->setLayout(m_tMainLayout); m_topWidget = new DWidget(this); m_topWidget->setLayout(yeartitleLayout); m_scheduleView = new CYearScheduleOutView(this); } /** * @brief initConnection 初始化信号和槽的连接 */ void CYearWindow::initConnection() { connect(m_prevButton, &DIconButton::clicked, this, &CYearWindow::slotprev); connect(m_nextButton, &DIconButton::clicked, this, &CYearWindow::slotnext); connect(m_StackedWidget, &AnimationStackedWidget::signalIsFinished, this, &CYearWindow::setYearData); connect(m_firstYearWidget, &YearFrame::signalMousePress, this, &CYearWindow::slotMousePress); connect(m_secondYearWidget, &YearFrame::signalMousePress, this, &CYearWindow::slotMousePress); connect(m_scheduleView, &CYearScheduleOutView::signalsViewSelectDate, this, &CYearWindow::slotMousePress); } /** * @brief setTheMe 设置系统主题 * @param type 主题类型 */ void CYearWindow::setTheMe(int type) { if (type == 0 || type == 1) { DPalette todayPa = m_today->palette(); todayPa.setColor(DPalette::WindowText, QColor("#000000")); todayPa.setColor(DPalette::Background, Qt::white); m_today->setPalette(todayPa); m_today->setForegroundRole(DPalette::WindowText); m_today->setBackgroundRole(DPalette::Background); m_todayFrame->setBColor(Qt::white); DPalette pa = m_yearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_yearLabel->setPalette(pa); m_yearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_yearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_yearLunarLabel->setPalette(LunaPa); m_yearLunarLabel->setForegroundRole(DPalette::WindowText); m_yearLunarDayLabel->setPalette(LunaPa); m_yearLunarDayLabel->setForegroundRole(DPalette::WindowText); } else if (type == 2) { DPalette todayPa = m_today->palette(); todayPa.setColor(DPalette::WindowText, QColor("#C0C6D4")); QColor tbColor = "#414141"; tbColor.setAlphaF(0.0); todayPa.setColor(DPalette::Background, tbColor); m_today->setPalette(todayPa); m_today->setForegroundRole(DPalette::WindowText); m_today->setBackgroundRole(DPalette::Background); QColor tbColor2 = "#414141"; tbColor2.setAlphaF(0.3); m_todayFrame->setBColor(tbColor2); DPalette pa = m_yearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#C0C6D4")); m_yearLabel->setPalette(pa); m_yearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_yearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#798BA8")); m_yearLunarLabel->setPalette(LunaPa); m_yearLunarLabel->setForegroundRole(DPalette::WindowText); m_yearLunarDayLabel->setPalette(LunaPa); m_yearLunarDayLabel->setForegroundRole(DPalette::WindowText); } m_firstYearWidget->setTheMe(type); m_secondYearWidget->setTheMe(type); //设置提示框主题类型 m_scheduleView->setTheMe(type); DPalette palette = m_topWidget->palette(); palette.setBrush(DPalette::WindowText, palette.color(DPalette::Window)); m_topWidget->setAutoFillBackground(true); m_topWidget->setPalette(palette); } /** * @brief CYearWindow::setSearchWFlag 设置是否在进行搜索 * @param flag */ void CYearWindow::setSearchWFlag(bool flag) { m_searchFlag = flag; } /** * @brief CYearWindow::updateShowDate 更新显示时间 */ void CYearWindow::updateShowDate(const bool isUpdateBar) { Q_UNUSED(isUpdateBar); m_scheduleView->setTimeFormat((m_calendarManager->getTimeShowType()?"AP ":"") + m_calendarManager->getTimeFormat()); m_yearWidget->setShowDate(getSelectDate()); } /** * @brief CYearWindow::updateShowScheduleData 更新显示日程数据 */ void CYearWindow::updateShowSchedule() { //获取显示日期中是否包含日程信息标志 m_yearWidget->setDateHasScheduleSign(ScheduleManager::getInstace()->getAllScheduleDate()); } /** * @brief CYearWindow::updateShowLunar 更新显示农历信息 */ void CYearWindow::updateShowLunar() { //获取农历信息 getLunarInfo(); m_yearWidget->setLunarYearDate(m_lunarYear); //如果正在切换则退出 if (m_StackedWidget->IsRunning()) return; setLunarShow(); } /** * @brief CYearWindow::updateSearchScheduleInfo 更新搜索日程信息 */ void CYearWindow::updateSearchScheduleInfo() { //获取搜索日程信息 m_yearWidget->setSearchSchedule(gScheduleManager->getAllSearchedScheduleDate()); } /** * @brief CYearWindow::setSelectSearchScheduleInfo 设置选中搜索日程 * @param info */ void CYearWindow::setSelectSearchScheduleInfo(const DSchedule::Ptr &info) { Q_UNUSED(info); } /** * @brief CYearWindow::slotSetScheduleHide 隐藏日程提示框 */ void CYearWindow::slotSetScheduleHide() { m_scheduleView->hide(); } /** * @brief CYearWindow::slotprev 切换上一年 */ void CYearWindow::slotprev() { QDate minYear = getSelectDate(); if (minYear.year() > 1900) { switchYear(-1); } } /** * @brief CYearWindow::slotnext 切换下一年 */ void CYearWindow::slotnext() { QDate maxYear = getSelectDate(); if (maxYear.year() < 2100) { switchYear(1); } } /** * @brief CYearWindow::slottoday 返回当前时间 */ void CYearWindow::slottoday() { //隐藏提示 slotSetScheduleHide(); //设置选择时间为当前时间,切换年份信息 setSelectDate(getCurrendDateTime().date(), true); //更新数据 updateData(); setYearData(); } /** * @brief CYearWindow::switchYear 根据偏移值切换年份 * @param offsetYear 偏移值 */ void CYearWindow::switchYear(const int offsetYear) { slotSetScheduleHide(); //获取选择时间 QDate _selectData = getSelectDate(); //如果正在切换则退出 if (m_StackedWidget->IsRunning()) return; _selectData = _selectData.addYears(offsetYear); //获取当前显示控件的位置 int index = m_StackedWidget->currentIndex(); //当前选中的monthview的index int currentYearViewIndex = qobject_cast(m_StackedWidget->widget(index))->getViewFocusIndex(); index = qAbs(index + offsetYear) % 2; m_yearWidget = qobject_cast(m_StackedWidget->widget(index)); //设置年视图翻页后选中的monthview m_yearWidget->setViewFocus(currentYearViewIndex); //设置显示时间 m_yearWidget->setShowDate(_selectData); updateData(); if (offsetYear > 0) { //下一年 m_StackedWidget->setNext(); } else { //上一年 m_StackedWidget->setPre(); } //切换试图开始后再进行时间切换 setSelectDate(_selectData); } /** * @brief CYearWindow::setLunarShow 显示农历信息 */ void CYearWindow::setLunarShow() { m_yearLunarLabel->setText(m_lunarYear); m_yearLunarDayLabel->setText(m_lunarDay); } /** * @brief CYearWindow::setYearData 设置选择时间年 */ void CYearWindow::setYearData() { //如果选择日期为本地时间日期则显示今天,否则显示返回当天 if (getSelectDate() == getCurrendDateTime().date()) { m_today->setText(QCoreApplication::translate("today", "Today", "Today")); } else { m_today->setText(QCoreApplication::translate("Return", "Today", "Return")); } //如果是中文环境 if (getShowLunar()) { m_yearLabel->setText(QString::number(getSelectDate().year()) + tr("Y")); //获取农历信息 //获取农历信息 getLunarInfo(); //显示农历信息 setLunarShow(); } else { m_yearLabel->setText(QString::number(getSelectDate().year())); } } /** * @brief CYearWindow::slotMousePress 接收点击日期事件 * @param selectDate 选择的日期 * @param pressType 鼠标点击类型 0:单击具体日期 1:双击具体日期 2:双击月份 3:提示框跳转周视图 */ void CYearWindow::slotMousePress(const QDate &selectDate, const int pressType) { slotSetScheduleHide(); if (!selectDate.isValid()) return; //设置选择时间 setSelectDate(selectDate, this); setYearData(); switch (pressType) { case 0: { // 0:单击 DSchedule::List _scheduleInfo {}; //获取选择日期的日程信息 _scheduleInfo = gScheduleManager->getScheduleByDay(selectDate); m_scheduleView->setCurrentDate(selectDate); m_scheduleView->setData(_scheduleInfo); //使用设置的显示坐标 QVariant variant; CalendarGlobalEnv::getGlobalEnv()->getValueByKey(DDECalendar::CursorPointKey, variant); QPoint pos22 = variant.value(); // 因为将提示框从window改为widget,要转换为相对窗口的坐标 auto rPos = this->mapFromGlobal(pos22); // 根据鼠标位置,决定悬浮框显示位置 if (rPos.x() < this->width() / 2) { // 显示到右侧 m_scheduleView->setDirection(DArrowRectangle::ArrowLeft); m_scheduleView->show(rPos.x()+10, rPos.y()); } else { // 显示到左侧 m_scheduleView->setDirection(DArrowRectangle::ArrowRight); m_scheduleView->show(rPos.x()-10, rPos.y()); } update(); break; } case 1: { // 1:双击时间 signalSwitchView(); break; } case 2: { // 2: 双击月 signalSwitchView(1); break; } case 3: { // 3: 提示框跳转周视图 signalSwitchView(2); break; } default: break; } } /** * @brief wheelEvent 通过鼠标中间的滚轮滚动切换年份,并刷新年视图下的所有内容。 * @param event 鼠标滚轮事件 */ void CYearWindow::wheelEvent(QWheelEvent *event) { //如果为左右方向则退出 if (event->angleDelta().x() != 0 ) return; if (event->angleDelta().y() < 0) { slotnext(); } else { slotprev(); } } YearFrame::YearFrame(DWidget *parent) : QWidget(parent) { QGridLayout *gridLayout = new QGridLayout; gridLayout->setMargin(0); gridLayout->setSpacing(8); for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { CYearView *view = new CYearView(this); //为每个monthview设置事件过滤器 view->installEventFilter(this); gridLayout->addWidget(view, i, j); m_monthViewList.append(view); connect(view, &CYearView::signalMousePress, this, &YearFrame::signalMousePress); } } m_YearLabel = new QLabel(this); m_YearLabel->setFixedHeight(DDEYearCalendar::Y_YLabelHeight); QFont t_labelF; t_labelF.setWeight(QFont::Medium); t_labelF.setPixelSize(DDECalendar::FontSizeTwentyfour); m_YearLabel->setFont(t_labelF); DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(pa); m_YearLunarLabel = new QLabel(); m_YearLunarLabel->setFixedSize(DDEMonthCalendar::M_YLunaLabelWindth, DDEMonthCalendar::M_YLunaLabelHeight); QFont yLabelF; yLabelF.setWeight(QFont::Medium); yLabelF.setPixelSize(DDECalendar::FontSizeFourteen); m_YearLunarLabel->setFont(yLabelF); DPalette LunaPa = m_YearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_YearLunarLabel->setPalette(LunaPa); QHBoxLayout *yeartitleLayout = new QHBoxLayout; yeartitleLayout->setMargin(0); yeartitleLayout->setSpacing(0); yeartitleLayout->setContentsMargins(11, 12, 8, 10); yeartitleLayout->addWidget(m_YearLabel); QHBoxLayout *yeartitleLayout1 = new QHBoxLayout; yeartitleLayout1->setMargin(0); yeartitleLayout1->setSpacing(0); yeartitleLayout1->setContentsMargins(4, 9, 0, 7); yeartitleLayout1->addWidget(m_YearLunarLabel); yeartitleLayout1->addSpacing(390); yeartitleLayout1->addStretch(); yeartitleLayout1->addSpacing(10); yeartitleLayout->addLayout(yeartitleLayout1); m_topWidget = new DWidget(); m_topWidget->setLayout(yeartitleLayout); m_topWidget->setFixedHeight(DDEMonthCalendar::M_YTopHeight); QVBoxLayout *hhLayout = new QVBoxLayout; hhLayout->setMargin(0); hhLayout->setSpacing(0); hhLayout->addWidget(m_topWidget); hhLayout->addLayout(gridLayout); this->setLayout(hhLayout); } YearFrame::~YearFrame() { } /** * @brief YearFrame::setShowDate 设置显示时间 * @param selectDate 选择的时间 * @param showDate 需要显示一年的时间 */ void YearFrame::setShowDate(const QDate &selectDate) { QDate _showMonth(selectDate.year(), 1, 1); for (int i = 0; i < DDEYearCalendar::FrameSizeOfEveryYear; i++) { QDate _setShowMonth = _showMonth.addMonths(i); m_monthViewList.at(i)->setShowMonthDate(_setShowMonth); } m_selectDate = selectDate; //更新显示界面 update(); //设置年份显示 setYearShow(); } /** * @brief YearFrame::setLunarYearDate 设置阴历年显示 * @param lunar 显示数据 */ void YearFrame::setLunarYearDate(const QString &lunar) { m_YearLunarLabel->setText(lunar); } /** * @brief YearFrame::setDateHasScheduleSign 设置日期是否存在日程 * @param hasSchedule */ void YearFrame::setDateHasScheduleSign(const QSet &hasSchedule) { QDate _startDate; QDate _stopDate; QDate _getDate; qint64 _offset = 0; QSet _hasScheduleSet{}; for (int i = 0; i < m_monthViewList.size(); ++i) { //如果时间有效 if (m_monthViewList.at(i)->getStartAndStopDate(_startDate, _stopDate)) { _offset = _startDate.daysTo(_stopDate) + 1; _hasScheduleSet.clear(); for (int j = 0 ; j < _offset; ++j) { _getDate = _startDate.addDays(j); if (hasSchedule.contains(_getDate)) { _hasScheduleSet.insert(_getDate); } } m_monthViewList.at(i)->setHasScheduleSet(_hasScheduleSet); } } } /** * @brief YearFrame::setTheMe 设置不同主题颜色 * @param type */ void YearFrame::setTheMe(int type) { if (type == 0 || type == 1) { DPalette gpa = palette(); gpa.setColor(DPalette::Background, "#F8F8F8"); setPalette(gpa); setBackgroundRole(DPalette::Background); DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(pa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_YearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_YearLunarLabel->setPalette(LunaPa); m_YearLunarLabel->setForegroundRole(DPalette::WindowText); } else if (type == 2) { DPalette gpa = palette(); gpa.setColor(DPalette::Background, "#252525"); setPalette(gpa); setBackgroundRole(DPalette::Background); DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#C0C6D4")); m_YearLabel->setPalette(pa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_YearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#798BA8")); m_YearLunarLabel->setPalette(LunaPa); m_YearLunarLabel->setForegroundRole(DPalette::WindowText); } for (int i = 0; i < DDEYearCalendar::FrameSizeOfEveryYear; i++) { m_monthViewList.at(i)->setTheMe(type); } } /** * @brief YearFrame::setSearchSchedule 设置搜索日程 * @param searchInfo */ void YearFrame::setSearchSchedule(const QSet &hasSchedule) { QDate _startDate; QDate _stopDate; QDate _getDate; qint64 _offset = 0; QSet _hasSearchScheduleSet{}; for (int i = 0; i < m_monthViewList.size(); ++i) { //如果时间有效 if (m_monthViewList.at(i)->getStartAndStopDate(_startDate, _stopDate)) { _offset = _startDate.daysTo(_stopDate) + 1; _hasSearchScheduleSet.clear(); for (int j = 0 ; j < _offset; ++j) { _getDate = _startDate.addDays(j); if (hasSchedule.contains(_getDate)) { _hasSearchScheduleSet.insert(_getDate); } } m_monthViewList.at(i)->setHasSearchScheduleSet(_hasSearchScheduleSet); } } } /** * @brief YearFrame::setViewFocus 为选中的view设置焦点 * @param index 选中的哪一个view */ void YearFrame::setViewFocus(int index) { if (index >= 0 && index < m_monthViewList.size()) { //设置选中view的焦点类型 m_monthViewList.at(index)->setFocus(Qt::FocusReason::TabFocusReason); } } /** * @brief YearFrame::getViewFocusIndex 获取选中view的index * @return 选中的哪一个view */ int YearFrame::getViewFocusIndex() { return currentFocusView; } /** * @brief YearFrame::setYearShow 设置年信息显示 */ void YearFrame::setYearShow() { if (QLocale::system().language() == QLocale::Chinese) { m_YearLabel->setText(QString::number(m_selectDate.year()) + tr("Y")); m_YearLunarLabel->setText(m_LunarYear); } else { m_YearLabel->setText(QString::number(m_selectDate.year())); m_YearLunarLabel->setText(""); } } /** * @brief YearFrame::eventFilter 事件过滤器,获取选中monthview的index */ bool YearFrame::eventFilter(QObject *watched, QEvent *event) { //返回当前活动窗口中的焦点小部件 CYearView *monthview = qobject_cast(QApplication::focusWidget()); //焦点小部件是否为12个月份中的一个 if (m_monthViewList.contains(monthview)) { //焦点小部件在list中的index currentFocusView = m_monthViewList.indexOf(monthview); } else { currentFocusView = -1; } return QWidget::eventFilter(watched, event); } dde-calendar-5.14.13/calendar-client/src/widget/yearWidget/yearwindow.h000066400000000000000000000131671473346337000257560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef YEARWINDOW_H #define YEARWINDOW_H #include "animationstackedwidget.h" #include "cschedulebasewidget.h" #include "labelwidget.h" #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class CYearView; class CScheduleSearchView; class YearFrame; class CustomFrame; class CYearScheduleOutView; struct TouchGestureData { enum TouchMovingDirection { T_NONE, //默认状态 T_LEFT, //往左 T_TOP, //往上 T_RIGHT, //往右 T_BOTTOM //往下 }; //手势移动状态 qreal length {0}; //手势移动距离 qreal angle{0}; //手势移动角度 TouchMovingDirection movingDirection{T_NONE}; // 手势移动方向 }; class CYearWindow: public CScheduleBaseWidget { Q_OBJECT public: explicit CYearWindow(QWidget *parent = nullptr); ~CYearWindow() override; //初始化ui界面 void initUI(); //初始化信号和槽的连接 void initConnection(); //设置系统主题 void setTheMe(int type = 0); //设置是否在进行搜索 void setSearchWFlag(bool flag); //设置选择时间年 void setYearData() override; //更新显示时间 void updateShowDate(const bool isUpdateBar = true) override; //更新日程显示 void updateShowSchedule() override; //更新显示农历信息 void updateShowLunar() override; //更新界面搜索日程显示 void updateSearchScheduleInfo() override; //设置选中搜索日程 void setSelectSearchScheduleInfo(const DSchedule::Ptr &info) override; signals: /** * @brief signalsWUpdateShcedule */ void signalsWUpdateShcedule(); /** * @brief signalupdateschedule 更新日程的信号 */ void signalupdateschedule(); private slots: //切换上一年 void slotprev(); //切换到下一年 void slotnext(); //返回到当前时间 void slottoday(); public slots: //隐藏日程浮框 void slotSetScheduleHide(); //接收鼠标点击 void slotMousePress(const QDate &selectDate, const int pressType); private: //切换年份 void switchYear(const int offsetYear); //设置显示农历信息 void setLunarShow(); protected: void wheelEvent(QWheelEvent *event) override; bool eventFilter(QObject *watched, QEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void resizeEvent(QResizeEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; bool event(QEvent *e) override; private: //触摸手势处理 bool gestureEvent(QGestureEvent *event); //轻切手势处理 void tapGestureTriggered(QTapGesture *tap); //多指滑动手势处理 void panTriggered(QPanGesture *pan); //计算方位角 TouchGestureData calculateAzimuthAngle(QPointF &startPoint, QPointF &stopPoint); private: DIconButton *m_prevButton = nullptr; DIconButton *m_nextButton = nullptr; LabelWidget *m_today = nullptr; QDate m_currentdate; QLabel *m_yearLabel = nullptr; QLabel *m_yearLunarLabel = nullptr; QLabel *m_yearLunarDayLabel = nullptr; YearFrame *m_yearWidget = nullptr; YearFrame *m_firstYearWidget = nullptr; YearFrame *m_secondYearWidget = nullptr; CustomFrame *m_todayFrame = nullptr; AnimationStackedWidget *m_StackedWidget = nullptr; QVBoxLayout *m_tMainLayout = nullptr; QString m_searchText; bool m_searchFlag = false; DWidget *m_topWidget = nullptr; //触摸开始坐标 QPointF m_touchBeginPoint; //触摸状态 0:初始状态 1:点击 2:移动 int m_touchState{0}; CYearScheduleOutView *m_scheduleView {nullptr}; }; class YearFrame : public QWidget { Q_OBJECT public: explicit YearFrame(DWidget *parent = nullptr); ~YearFrame() override; //设置显示时间 void setShowDate(const QDate &selectDate); //设置阴历年显示 void setLunarYearDate(const QString &lunar = ""); //设置日期是否存在日程 void setDateHasScheduleSign(const QSet &hasSchedule); //设置不同主题颜色 void setTheMe(int type = 0); //设置搜索日程 void setSearchSchedule(const QSet &hasSchedule); void setViewFocus(int index); int getViewFocusIndex(); private: //设置年信息显示 void setYearShow(); signals: /** * @brief signalMousePress 鼠标点击事件触发信号 * @param selectDate 选择时间 * @param pressType 触发事件类型 * 0:点击时间 1:双击时间 2: 双击月 */ void signalMousePress(const QDate &selectDate, const int pressType = 0); protected: bool eventFilter(QObject *watched, QEvent *event) override; private: QList m_monthViewList; QLabel *m_YearLabel = nullptr; QLabel *m_YearLunarLabel = nullptr; QDate m_selectDate; bool m_searchFlag = false; bool m_selectFlag = false; QString m_LunarYear; QString m_LunarDay; DWidget *m_topWidget = nullptr; int currentFocusView = -1; }; #endif // YEARWINDOW_H dde-calendar-5.14.13/calendar-common/000077500000000000000000000000001473346337000172415ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-common/CMakeLists.txt000066400000000000000000000020341473346337000220000ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) project(commondata) # Find the library find_package(PkgConfig REQUIRED) find_package(Qt5 COMPONENTS Core DBus Sql REQUIRED) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) #安全编译参数 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong -z noexecstack -pie -fPIC -z lazy") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) aux_source_directory(src BASESTRUCT_SRCS) aux_source_directory(src/huangliData BASESTRUCT_SRCS_HUANGLI) aux_source_directory(src/lunarandfestival BASESTRUCT_SRCS_NONGLI) aux_source_directory(src/pinyin BASESTRUCT_SRCS_PINYIN) link_libraries(${Qt5CORE_LIBRARIES} ${Qt5DBus_LIBRARIES}) add_library(${PROJECT_NAME} STATIC ${BASESTRUCT_SRCS} ${BASESTRUCT_SRCS_HUANGLI} ${BASESTRUCT_SRCS_NONGLI} ${BASESTRUCT_SRCS_PINYIN} ) target_include_directories(${PROJECT_NAME} PUBLIC ../3rdparty/kcalendarcore/src) target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::DBus Qt5::Sql kcalendarcore ) dde-calendar-5.14.13/calendar-common/README.md000066400000000000000000000000001473346337000205060ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-common/src/000077500000000000000000000000001473346337000200305ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-common/src/commondef.h000066400000000000000000000011521473346337000221470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef COMMONDEF_H #define COMMONDEF_H #include #include #include const QString CalendarServiceName = "com.deepin.dataserver.Calendar"; const QString CalendarPath = "/com/deepin/dataserver/Calendar"; const QLoggingCategory CommonLogger("org.deepin.dde-calendar.common"); const QLoggingCategory ClientLogger("org.deepin.dde-calendar.client"); const QLoggingCategory ServiceLogger("org.deepin.dde-calendar.service"); #endif // COMMONDEF_H dde-calendar-5.14.13/calendar-common/src/compatibledata.cpp000066400000000000000000000176541473346337000235220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "compatibledata.h" #include "units.h" #include "icalformat.h" #include #include #include #include #include #include const QMap mTypeMap {{1, "107c369e-b13a-4d45-9ff3-de4eb3c0475b"}, {2, "24cf3ae3-541d-487f-83df-f068416b56b6"}, {3, "403bf009-2005-4679-9c76-e73d9f83a8b4"}}; /** * @brief JobToObject 将Job转换成QJsonObject * @param job Job结构体 * @return QJsonObject */ QJsonObject JobToObject(const DSchedule::Ptr &job) { QJsonObject obj; obj.insert("ID", job->compatibleID()); obj.insert("Type", DDE_Calendar::getOldTypeIDByNewTypeID(job->scheduleTypeID())); obj.insert("Title", job->summary()); obj.insert("Description", job->description()); obj.insert("AllDay", job->allDay()); obj.insert("Start", dtToString(job->dtStart())); obj.insert("End", dtToString(job->dtEnd())); obj.insert("RRule", job->recurrence()->defaultRRule()->rrule()); obj.insert("Remind", DDE_Calendar::getOldRemindByAlarm(job->getAlarmType())); //将QString类型转换为QJsonArray类型,方便前端解析 QJsonArray _ignoreJsonArray; for (int i = 0; i < job->recurrence()->exDateTimes().count(); i++) { _ignoreJsonArray.append(dtToString(job->recurrence()->exDateTimes().at(i))); } obj.insert("Ignore", _ignoreJsonArray); //TODO: obj.insert("RecurID", 0); return obj; } QString DDE_Calendar::getNewTypeIDByOldTypeID(int oldTypeID) { if (mTypeMap.contains(oldTypeID)) { return mTypeMap.value(oldTypeID); } else { return mTypeMap.value(3); } } int DDE_Calendar::getOldTypeIDByNewTypeID(const QString &newTypeID) { int oldTypeID = 0; QMap::const_iterator constIter = mTypeMap.constBegin(); for (; constIter != mTypeMap.constEnd(); ++constIter) { if (constIter.value() == newTypeID) { oldTypeID = constIter.key(); break; } } return oldTypeID == 0 ? 3 : oldTypeID; } QString DDE_Calendar::getExternalSchedule(const DSchedule::Map &scheduleMap) { QString strJson; QJsonDocument doc; QJsonArray jsonarr; DSchedule::Map::const_iterator constIter = scheduleMap.constBegin(); for (; constIter != scheduleMap.constEnd(); ++constIter) { QJsonObject obj; QJsonArray jobsJsonArr; QJsonObject objjob; obj.insert("Date", constIter.key().toString("yyyy-MM-dd")); foreach (DSchedule::Ptr schedule, constIter.value()) { objjob = JobToObject(schedule); jobsJsonArr.append(objjob); } obj.insert("Jobs", jobsJsonArr); jsonarr.append(obj); } doc.setArray(jsonarr); strJson = QString::fromUtf8(doc.toJson(QJsonDocument::Compact)); return strJson; } void DDE_Calendar::setAlarmByOldRemind(const DSchedule::Ptr &schedule, const QString &remind) { //提醒规则 QStringList strList = remind.split(";", Qt::SkipEmptyParts); int remindNum = strList.at(0).toInt(); //小于0表示不提醒 if (remindNum >= 0) { KCalendarCore::Alarm::Ptr alarm = KCalendarCore::Alarm::Ptr(new KCalendarCore::Alarm(schedule.data())); alarm->setEnabled(true); alarm->setType(KCalendarCore::Alarm::Display); alarm->setDisplayAlarm(schedule->summary()); if (schedule->allDay()) { //提前多少秒 int offset = 0; if (strList.size() > 1) { QTime time = QTime::fromString(strList.at(1), "hh:mm"); offset = time.hour() * 60 * 60 + time.second() * 60; } KCalendarCore::Duration duration(-(24 * 60 * 60 * remindNum - offset)); alarm->setStartOffset(duration); } else { KCalendarCore::Duration duration(-(60 * remindNum)); alarm->setStartOffset(duration); } schedule->addAlarm(alarm); } } QString DDE_Calendar::getOldRemindByAlarm(const DSchedule::AlarmType &alarmType) { QString _resultStr {""}; switch (alarmType) { case DSchedule::Alarm_Begin: _resultStr = "0"; break; case DSchedule::Alarm_15Min_Front: _resultStr = "15"; break; case DSchedule::Alarm_30Min_Front: _resultStr = "30"; break; case DSchedule::Alarm_1Hour_Front: _resultStr = "60"; break; case DSchedule::Alarm_1Day_Front: _resultStr = "1440"; break; case DSchedule::Alarm_2Day_Front: _resultStr = "2880"; break; case DSchedule::Alarm_1Week_Front: _resultStr = "10080"; break; case DSchedule::Alarm_9Hour_After: //日程当天9点(全天) _resultStr = "0;09:00"; break; case DSchedule::Alarm_15Hour_Front: //一天前(全天),为日程开始前15小时 _resultStr = "1;09:00"; break; case DSchedule::Alarm_39Hour_Front: //2天前(全天),为日程开始前39小时 _resultStr = "2;09:00"; break; case DSchedule::Alarm_159Hour_Front: //一周前(全天),为日程开始前159小时 _resultStr = "7;09:00"; break; default: break; } return _resultStr; } DSchedule::Ptr DDE_Calendar::getScheduleByExported(const QString &scheduleStr) { QJsonParseError json_error; QJsonDocument jsonDoc(QJsonDocument::fromJson(scheduleStr.toLocal8Bit(), &json_error)); if (json_error.error != QJsonParseError::NoError) { return nullptr; } QJsonObject rootObj = jsonDoc.object(); DSchedule::Ptr schedule(new DSchedule); //日程是否为全天 if (rootObj.contains("AllDay")) { schedule->setAllDay(rootObj.value("AllDay").toBool()); } //日程提醒规则 if (rootObj.contains("Remind")) { DDE_Calendar::setAlarmByOldRemind(schedule, rootObj.value("Remind").toString()); } //日程标题 if (rootObj.contains("Title")) { schedule->setSummary(rootObj.value("Title").toString()); } //日程描述 if (rootObj.contains("Description")) { schedule->setDescription(rootObj.value("Description").toString()); } //日程类型 if (rootObj.contains("Type")) { schedule->setScheduleTypeID(DDE_Calendar::getNewTypeIDByOldTypeID(rootObj.value("Type").toInt())); } //日程开始时间 if (rootObj.contains("Start")) { schedule->setDtStart(dtFromString(rootObj.value("Start").toString())); } //日程结束时间 if (rootObj.contains("End")) { schedule->setDtEnd(dtFromString(rootObj.value("End").toString())); } // //日程重复ID // if (rootObj.contains("RecurID")) { // _resultSchedule.setRecurID(rootObj.value("RecurID").toInt()); // } //日程重复规则 if (rootObj.contains("RRule")) { DDE_Calendar::setRRuleByOldRRule(schedule, rootObj.value("RRule").toString()); } //重复日程忽略日期集 if (rootObj.contains("Ignore")) { DDE_Calendar::setExDate(schedule, rootObj.value("Ignore").toArray()); } return schedule; } void DDE_Calendar::setRRuleByOldRRule(const DSchedule::Ptr &schedule, const QString &rrule) { //重复规则 KCalendarCore::Recurrence *recurrence = schedule->recurrence(); KCalendarCore::ICalFormat ical; KCalendarCore::RecurrenceRule *rule = new KCalendarCore::RecurrenceRule; if (ical.fromString(rule, rrule)) { recurrence->addRRule(rule); } } void DDE_Calendar::setExDate(const DSchedule::Ptr &schedule, const QJsonArray &ignore) { KCalendarCore::Recurrence *recurrence = schedule->recurrence(); foreach (auto ignoreTime, ignore) { if (schedule->allDay()) { recurrence->addExDate(dtFromString(ignoreTime.toString()).date()); } else { recurrence->addExDateTime(dtFromString(ignoreTime.toString())); } } } dde-calendar-5.14.13/calendar-common/src/compatibledata.h000066400000000000000000000017061473346337000231560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef COMPATIBLEDATA_H #define COMPATIBLEDATA_H #include "dschedule.h" #include namespace DDE_Calendar { //通过旧的日程id获取新的日程id QString getNewTypeIDByOldTypeID(int oldTypeID); int getOldTypeIDByNewTypeID(const QString &newTypeID); DSchedule::Ptr getScheduleByExported(const QString &scheduleStr); // void setAlarmByOldRemind(const DSchedule::Ptr &schedule, const QString &remind); void setRRuleByOldRRule(const DSchedule::Ptr &schedule, const QString &rrule); void setExDate(const DSchedule::Ptr &schedule, const QJsonArray &ignore); QString getOldRemindByAlarm(const DSchedule::AlarmType &alarmType); //将新的日程数据转换为旧的查询数据({"Date":"",Jobs:["",""]}) QString getExternalSchedule(const DSchedule::Map &scheduleMap); } // namespace DDE_Calendar #endif // COMPATIBLEDATA_H dde-calendar-5.14.13/calendar-common/src/daccount.cpp000066400000000000000000000240341473346337000223370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daccount.h" #include "units.h" #include "commondef.h" #include #include #include #include DAccount::DAccount(DAccount::Type type) : m_displayName("") , m_accountID("") , m_accountName("") , m_dbName("") , m_dbusPath("") , m_accountType(type) , m_avatar("") , m_description("") , m_syncTag(0) , m_accountState(Account_Invalid) , m_syncState(Sync_Normal) , m_syncFreq(SyncFreq_15Mins) , m_intervalTime(0) , m_isExpandDisplay(true) { } QString DAccount::displayName() const { return m_displayName; } void DAccount::setDisplayName(const QString &displayName) { m_displayName = displayName; } QString DAccount::accountID() const { return m_accountID; } void DAccount::setAccountID(const QString &accountID) { m_accountID = accountID; } QString DAccount::accountName() const { return m_accountName; } void DAccount::setAccountName(const QString &accountName) { m_accountName = accountName; } QString DAccount::dbusPath() const { return m_dbusPath; } void DAccount::setDbusPath(const QString &dbusPath) { m_dbusPath = dbusPath; } DAccount::Type DAccount::accountType() const { return m_accountType; } void DAccount::setAccountType(const Type &accountType) { m_accountType = accountType; } bool DAccount::isExpandDisplay() const { return m_isExpandDisplay; } void DAccount::setIsExpandDisplay(bool isExpandDisplay) { m_isExpandDisplay = isExpandDisplay; } bool DAccount::isNetWorkAccount() { return m_accountType != Type::Account_Local; } int DAccount::syncTag() const { return m_syncTag; } void DAccount::setSyncTag(int syncTag) { m_syncTag = syncTag; } DAccount::AccountSyncState DAccount::syncState() const { return m_syncState; } void DAccount::setSyncState(AccountSyncState syncState) { m_syncState = syncState; } QString DAccount::avatar() const { return m_avatar; } void DAccount::setAvatar(const QString &avatar) { m_avatar = avatar; } QString DAccount::description() const { return m_description; } void DAccount::setDescription(const QString &description) { m_description = description; } QDateTime DAccount::dtCreate() const { return m_dtCreate; } void DAccount::setDtCreate(const QDateTime &dtCreate) { m_dtCreate = dtCreate; } QDateTime DAccount::dtDelete() const { return m_dtDelete; } void DAccount::setDtDelete(const QDateTime &dtDelete) { m_dtDelete = dtDelete; } QDateTime DAccount::dtUpdate() const { return m_dtUpdate; } void DAccount::setDtUpdate(const QDateTime &dtUpdate) { m_dtUpdate = dtUpdate; } bool DAccount::toJsonString(const DAccount::Ptr &account, QString &jsonStr) { if (account.isNull()) { qCWarning(CommonLogger) << "hold a reference to a null pointer."; return false; } QJsonObject rootObj; rootObj.insert("accountID", account->accountID()); rootObj.insert("displayName", account->displayName()); rootObj.insert("accountName", account->accountName()); rootObj.insert("dbusPath", account->dbusPath()); rootObj.insert("dbusInterface", account->dbusInterface()); rootObj.insert("type", account->accountType()); rootObj.insert("avatar", account->avatar()); rootObj.insert("description", account->description()); rootObj.insert("syncTag", account->syncTag()); rootObj.insert("accountState", int(account->accountState())); rootObj.insert("syncState", account->syncState()); rootObj.insert("dtCreate", dtToString(account->dtCreate())); rootObj.insert("dbName", account->dbName()); rootObj.insert("isExpandDisplay", account->isExpandDisplay()); rootObj.insert("dtLastSync", dtToString(account->dtLastSync())); rootObj.insert("syncFreq", syncFreqToJsonString(account)); QJsonDocument jsonDoc; jsonDoc.setObject(rootObj); jsonStr = QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); return true; } bool DAccount::fromJsonString(Ptr &account, const QString &jsonStr) { if (account.isNull()) { account = DAccount::Ptr(new DAccount); } QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonStr.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "error:" << jsonError.errorString(); return false; } QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("accountID")) { account->setAccountID(rootObj.value("accountID").toString()); } if (rootObj.contains("displayName")) { account->setDisplayName(rootObj.value("displayName").toString()); } if (rootObj.contains("accountName")) { account->setAccountName(rootObj.value("accountName").toString()); } if (rootObj.contains("dbusPath")) { account->setDbusPath(rootObj.value("dbusPath").toString()); } if (rootObj.contains("dbusInterface")) { account->setDbusInterface(rootObj.value("dbusInterface").toString()); } if (rootObj.contains("type")) { account->setAccountType(static_cast(rootObj.value("type").toInt())); } if (rootObj.contains("avatar")) { account->setAvatar(rootObj.value("avatar").toString()); } if (rootObj.contains("description")) { account->setDescription(rootObj.value("description").toString()); } if (rootObj.contains("syncTag")) { account->setSyncTag(rootObj.value("syncTag").toInt()); } if (rootObj.contains("accountState")) { account->setAccountState(static_cast(rootObj.value("accountState").toInt())); } if (rootObj.contains("syncState")) { account->setSyncState(static_cast(rootObj.value("syncState").toInt())); } if (rootObj.contains("dtCreate")) { account->setDtCreate(dtFromString(rootObj.value("dtCreate").toString())); } if (rootObj.contains("dbName")) { account->setDbName(rootObj.value("dbName").toString()); } if (rootObj.contains("isExpandDisplay")) { account->setIsExpandDisplay(rootObj.value("isExpandDisplay").toBool()); } if (rootObj.contains("dtLastSync")) { account->setDtLastSync(dtFromString(rootObj.value("dtLastSync").toString())); } if (rootObj.contains("syncFreq")) { syncFreqFromJsonString(account, rootObj.value("syncFreq").toString()); } return true; } bool DAccount::toJsonListString(const DAccount::List &accountList, QString &jsonStr) { QJsonArray jsArr; foreach (auto account, accountList) { QJsonObject jsonAccount; QString strAccount; toJsonString(account, strAccount); jsonAccount.insert("account", strAccount); jsArr.append(jsonAccount); } QJsonObject jsObj; jsObj.insert("accounts", jsArr); QJsonDocument jsonDoc; jsonDoc.setObject(jsObj); jsonStr = QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); return true; } bool DAccount::fromJsonListString(List &accountList, const QString &jsonStr) { QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonStr.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "error:" << jsonError.errorString(); return false; } QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("accounts")) { QJsonArray jsArr = rootObj.value("accounts").toArray(); foreach (auto ja, jsArr) { QJsonObject jsObj = ja.toObject(); DAccount::Ptr account = DAccount::Ptr(new DAccount); QString strAcc = jsObj.value("account").toString(); if (fromJsonString(account, strAcc)) { accountList.append(account); } else { qCWarning(CommonLogger) << "format failed:" << strAcc; } } } return true; } QString DAccount::dbName() const { return m_dbName; } void DAccount::setDbName(const QString &dbName) { m_dbName = dbName; } QString DAccount::cloudPath() const { return m_cloudPath; } void DAccount::setCloudPath(const QString &cloudPath) { m_cloudPath = cloudPath; } DAccount::SyncFreqType DAccount::syncFreq() const { return m_syncFreq; } void DAccount::setSyncFreq(SyncFreqType syncFreq) { m_syncFreq = syncFreq; } int DAccount::intervalTime() const { return m_intervalTime; } void DAccount::setIntervalTime(int intervalTime) { m_intervalTime = intervalTime; } QString DAccount::dbusInterface() const { return m_dbusInterface; } void DAccount::setDbusInterface(const QString &dbusInterface) { m_dbusInterface = dbusInterface; } DAccount::AccountStates DAccount::accountState() const { return m_accountState; } void DAccount::setAccountState(const AccountStates &accountState) { m_accountState = accountState; } QDateTime DAccount::dtLastSync() const { return m_dtLastSync; } void DAccount::setDtLastSync(const QDateTime &dtLastSync) { m_dtLastSync = dtLastSync; } QString DAccount::syncFreqToJsonString(const DAccount::Ptr &account) { QJsonObject rootObj; rootObj.insert("syncFreq", account->syncFreq()); rootObj.insert("m_intervalTime", account->intervalTime()); QJsonDocument jsonDoc; jsonDoc.setObject(rootObj); return QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); } void DAccount::syncFreqFromJsonString(const DAccount::Ptr &account, const QString &syncFreqStr) { QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(syncFreqStr.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "error:" << jsonError.errorString(); return; } QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("syncFreq")) { account->setSyncFreq(SyncFreqType(rootObj.value("syncFreq").toInt())); } if (rootObj.contains("m_intervalTime")) { account->setIntervalTime(rootObj.value("m_intervalTime").toInt()); } } dde-calendar-5.14.13/calendar-common/src/daccount.h000066400000000000000000000104171473346337000220040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DACCOUNT_H #define DACCOUNT_H #include #include #include //帐户信息 class DAccount { public: enum Type { Account_Local, //本地帐户 Account_UnionID, //union id 帐户 Account_CalDav //caldav通用协议帐户 }; enum AccountState { Account_Invalid = 0x1, //无效 Account_Open = 0x2, //日历同步总开关开启 Account_Calendar = 0x4, //同步日程 Account_Setting = 0x8, //同步通用设置 }; Q_DECLARE_FLAGS(AccountStates, AccountState) enum AccountSyncState { Sync_Normal = 0, //正常 Sync_NetworkAnomaly, //网络异常 Sync_ServerException, //服务器异常 Sync_StorageFull, //存储已满 }; enum SyncFreqType { SyncFreq_Maunal, //手动同步 SyncFreq_15Mins, SyncFreq_30Mins, SyncFreq_1hour, SyncFreq_24hour, }; typedef QSharedPointer Ptr; typedef QVector List; explicit DAccount(Type type = Account_Local); QString displayName() const; void setDisplayName(const QString &displayName); QString accountID() const; void setAccountID(const QString &accountID); QString accountName() const; void setAccountName(const QString &accountName); QString dbusPath() const; void setDbusPath(const QString &dbusPath); Type accountType() const; void setAccountType(const Type &accountTyep); bool isExpandDisplay() const; void setIsExpandDisplay(bool isExpandDisplay); bool isNetWorkAccount(); int syncTag() const; void setSyncTag(int syncTag); AccountSyncState syncState() const; void setSyncState(AccountSyncState syncState); QString avatar() const; void setAvatar(const QString &avatar); QString description() const; void setDescription(const QString &description); QDateTime dtCreate() const; void setDtCreate(const QDateTime &dtCreate); QDateTime dtDelete() const; void setDtDelete(const QDateTime &dtDelete); QDateTime dtUpdate() const; void setDtUpdate(const QDateTime &dtUpdate); static bool toJsonString(const DAccount::Ptr &account, QString &jsonStr); static bool fromJsonString(DAccount::Ptr &account, const QString &jsonStr); static bool toJsonListString(const DAccount::List &accountList, QString &jsonStr); static bool fromJsonListString(DAccount::List &accountList, const QString &jsonStr); QString dbName() const; void setDbName(const QString &dbName); QString cloudPath() const; void setCloudPath(const QString &cloudPath); SyncFreqType syncFreq() const; void setSyncFreq(SyncFreqType syncFreq); int intervalTime() const; void setIntervalTime(int intervalTime); QString dbusInterface() const; void setDbusInterface(const QString &dbusInterface); AccountStates accountState() const; void setAccountState(const AccountStates &accountState); QDateTime dtLastSync() const; void setDtLastSync(const QDateTime &dtLastSync); static QString syncFreqToJsonString(const DAccount::Ptr &account); static void syncFreqFromJsonString(const DAccount::Ptr &account, const QString &syncFreqStr); private: QString m_displayName; //显示名称 QString m_accountID; //帐户id QString m_accountName; //帐户名称 QString m_dbName; //对应的数据库名称 QString m_dbusPath; //dbus路径 QString m_dbusInterface; //dbus接口 Type m_accountType; //帐户类型 QString m_avatar; //头像 QString m_description; //描述 int m_syncTag; //同步标识,用来与云端标识比对 AccountStates m_accountState; //帐户状态 AccountSyncState m_syncState; //同步状态 QDateTime m_dtCreate; QDateTime m_dtDelete; QDateTime m_dtUpdate; QDateTime m_dtLastSync; //最后一次同步时间 QString m_cloudPath; SyncFreqType m_syncFreq; //同步频率 int m_intervalTime; //当同步频率为自定义时,才有效,单位(min) bool m_isExpandDisplay; //左侧帐户列表信息是否展开显示 }; Q_DECLARE_OPERATORS_FOR_FLAGS(DAccount::AccountStates) #endif // DACCOUNT_H dde-calendar-5.14.13/calendar-common/src/dbustimedate.cpp000066400000000000000000000066661473346337000232240ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbustimedate.h" #include "commondef.h" #include #include #include #include #define NETWORK_DBUS_INTEERFACENAME "com.deepin.daemon.Timedate" #define NETWORK_DBUS_NAME "com.deepin.daemon.Timedate" #define NETWORK_DBUS_PATH "/com/deepin/daemon/Timedate" DBusTimedate::DBusTimedate(QObject *parent) : QDBusAbstractInterface(NETWORK_DBUS_NAME, NETWORK_DBUS_PATH, NETWORK_DBUS_INTEERFACENAME, QDBusConnection::sessionBus(), parent) { //关联后端dbus触发信号 if (!QDBusConnection::sessionBus().connect(NETWORK_DBUS_NAME, NETWORK_DBUS_PATH, "org.freedesktop.DBus.Properties", QLatin1String("PropertiesChanged"), this, SLOT(propertiesChanged(QDBusMessage)))) { qCWarning(ClientLogger) << "the PropertiesChanged was fail!"; qCWarning(ClientLogger) << this->lastError(); } m_hasDateTimeFormat = getHasDateTimeFormat(); } int DBusTimedate::shortTimeFormat() { //如果存在对应的时间设置则获取,否则默认为4 return m_hasDateTimeFormat ? getPropertyByName("ShortTimeFormat").toInt() : 4; } int DBusTimedate::shortDateFormat() { //如果存在对应的时间设置则获取,否则默认为1 return m_hasDateTimeFormat ? getPropertyByName("ShortDateFormat").toInt() : 1; } Qt::DayOfWeek DBusTimedate::weekBegins() { if (m_hasDateTimeFormat) { // WeekBegins是从0开始的,加1才能对应DayOfWeek return Qt::DayOfWeek(getPropertyByName("WeekBegins").toInt() + 1); } return Qt::Monday; } void DBusTimedate::propertiesChanged(const QDBusMessage &msg) { QList arguments = msg.arguments(); // 参数固定长度 if (3 != arguments.count()) return; QString interfaceName = msg.arguments().at(0).toString(); if (interfaceName != this->interface()) return; QVariantMap changedProps = qdbus_cast(arguments.at(1).value()); QStringList keys = changedProps.keys(); foreach (const QString &prop, keys) { if (prop == "ShortTimeFormat") { emit ShortTimeFormatChanged(changedProps[prop].toInt()); } else if (prop == "ShortDateFormat") { emit ShortDateFormatChanged(changedProps[prop].toInt()); } } } QVariant DBusTimedate::getPropertyByName(const char *porpertyName) { QDBusInterface dbusinterface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); return dbusinterface.property(porpertyName); } bool DBusTimedate::getHasDateTimeFormat() { QDBusMessage msg = QDBusMessage::createMethodCall(NETWORK_DBUS_NAME, NETWORK_DBUS_PATH, "org.freedesktop.DBus.Introspectable", QStringLiteral("Introspect")); QDBusMessage reply = QDBusConnection::sessionBus().call(msg); if (reply.type() == QDBusMessage::ReplyMessage) { QVariant variant = reply.arguments().first(); return variant.toString().contains("\"ShortDateFormat\""); } else { return false; } } dde-calendar-5.14.13/calendar-common/src/dbustimedate.h000066400000000000000000000021651473346337000226570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSTIMEDATE_H #define DBUSTIMEDATE_H #include //通过dbus获取控制中心相关时间设置 class DBusTimedate : public QDBusAbstractInterface { Q_OBJECT Q_PROPERTY(int ShortTimeFormat READ shortTimeFormat NOTIFY ShortTimeFormatChanged) Q_PROPERTY(int ShortDateFormat READ shortDateFormat NOTIFY ShortDateFormatChanged) Q_PROPERTY(int WeekBegins READ weekBegins NOTIFY WeekBeginsChanged) public: explicit DBusTimedate(QObject *parent = nullptr); int shortTimeFormat(); int shortDateFormat(); Qt::DayOfWeek weekBegins(); signals: void ShortDateFormatChanged(int value) const; void ShortTimeFormatChanged(int value) const; void WeekBeginsChanged(int value) const; public slots: void propertiesChanged(const QDBusMessage &msg); private: QVariant getPropertyByName(const char *porpertyName); bool getHasDateTimeFormat(); private: bool m_hasDateTimeFormat = false; //是否含有 }; #endif // DBUSTIMEDATE_H dde-calendar-5.14.13/calendar-common/src/dcalendargeneralsettings.cpp000066400000000000000000000043601473346337000255730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dcalendargeneralsettings.h" #include "commondef.h" #include #include #include #include DCalendarGeneralSettings::DCalendarGeneralSettings() : m_firstDayOfWeek(Qt::Sunday) , m_timeShowType(TwentyFour) { } DCalendarGeneralSettings::DCalendarGeneralSettings(const DCalendarGeneralSettings &setting) : m_firstDayOfWeek(setting.firstDayOfWeek()) , m_timeShowType(setting.timeShowType()) { } DCalendarGeneralSettings *DCalendarGeneralSettings::clone() const { return new DCalendarGeneralSettings(*this); } Qt::DayOfWeek DCalendarGeneralSettings::firstDayOfWeek() const { return m_firstDayOfWeek; } void DCalendarGeneralSettings::setFirstDayOfWeek(const Qt::DayOfWeek &firstDayOfWeek) { m_firstDayOfWeek = firstDayOfWeek; } DCalendarGeneralSettings::TimeShowType DCalendarGeneralSettings::timeShowType() const { return m_timeShowType; } void DCalendarGeneralSettings::setTimeShowType(const TimeShowType &timeShowType) { m_timeShowType = timeShowType; } void DCalendarGeneralSettings::toJsonString(const Ptr &cgSet, QString &jsonStr) { QJsonObject rootObject; rootObject.insert("firstDayOfWeek", cgSet->firstDayOfWeek()); rootObject.insert("TimeShowType", cgSet->timeShowType()); QJsonDocument jsonDoc; jsonDoc.setObject(rootObject); jsonStr = QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); } bool DCalendarGeneralSettings::fromJsonString(Ptr &cgSet, const QString &jsonStr) { QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonStr.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "error:" << jsonError.errorString(); return false; } QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("firstDayOfWeek")) { cgSet->setFirstDayOfWeek(static_cast(rootObj.value("firstDayOfWeek").toInt())); } if (rootObj.contains("TimeShowType")) { cgSet->setTimeShowType(static_cast(rootObj.value("TimeShowType").toInt())); } return true; } dde-calendar-5.14.13/calendar-common/src/dcalendargeneralsettings.h000066400000000000000000000026461473346337000252450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DCALENDARGENERALSETTINGS_H #define DCALENDARGENERALSETTINGS_H #include #include #include /** * @brief The DCalendarGeneralSettings class * 日历通用设置 */ class DCalendarGeneralSettings { public: enum TimeShowType { TwentyFour = 0, //24 Twelve, //12 }; enum GeneralSettingSource { Source_Database, // 来自系统设置(即控制中心) Source_System, // 来自数据库(旧版本日历配置存放在数据库) Source_Unknown, // 用于确定枚举边界 }; typedef QSharedPointer Ptr; DCalendarGeneralSettings(); DCalendarGeneralSettings(const DCalendarGeneralSettings &setting); DCalendarGeneralSettings *clone() const; Qt::DayOfWeek firstDayOfWeek() const; void setFirstDayOfWeek(const Qt::DayOfWeek &firstDayOfWeek); TimeShowType timeShowType() const; void setTimeShowType(const TimeShowType &timeShowType); static void toJsonString(const DCalendarGeneralSettings::Ptr &cgSet, QString &jsonStr); static bool fromJsonString(DCalendarGeneralSettings::Ptr &cgSet, const QString &jsonStr); private: Qt::DayOfWeek m_firstDayOfWeek; //一周首日 TimeShowType m_timeShowType; }; #endif // DCALENDARGENERALSETTINGS_H dde-calendar-5.14.13/calendar-common/src/dschedule.cpp000066400000000000000000000466251473346337000225110ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dschedule.h" #include "commondef.h" #include "lunarandfestival/lunardateinfo.h" #include "icalformat.h" #include "memorycalendar.h" #include "units.h" #include "commondef.h" #include #define Duration_Min 60 #define Duration_Hour 60 * 60 #define Duration_Day 24 * 60 * 60 #define Duration_Week 7 * 24 * 60 * 60 DSchedule::DSchedule() : KCalendarCore::Event() , m_fileName("") , m_scheduleTypeID("") , m_compatibleID(0) { } DSchedule::DSchedule(const DSchedule &schedule) : KCalendarCore::Event(schedule) , m_fileName("") , m_scheduleTypeID("") , m_compatibleID(0) { this->setScheduleTypeID(schedule.scheduleTypeID()); } DSchedule::DSchedule(const KCalendarCore::Event &event) : KCalendarCore::Event(event) , m_fileName("") , m_scheduleTypeID("") , m_compatibleID(0) { } DSchedule *DSchedule::clone() const { return new DSchedule(*this); } QString DSchedule::scheduleTypeID() const { return m_scheduleTypeID; } void DSchedule::setScheduleTypeID(const QString &typeID) { m_scheduleTypeID = typeID; } bool DSchedule::isMoved() { return this->m_moved; } void DSchedule::setMoved(bool moved) { this->m_moved = moved; } bool DSchedule::isValid() const { //TODO:添加判断日程是否有效 return true; } bool DSchedule::isMultiDay() const { //如果日期不一致则为跨天日程 return dtStart().date() != dtEnd().date(); } bool DSchedule::operator==(const DSchedule &schedule) const { return this->instanceIdentifier() == schedule.instanceIdentifier(); } bool operator<(const DSchedule::Ptr &s1, const DSchedule::Ptr &s2) { if (s1.isNull() || s2.isNull()) { return false; } return *s1.data() < *s2.data(); } bool DSchedule::operator<(const DSchedule &schedule) const { if (this->allDay() != schedule.allDay()) { return this->allDay() > schedule.allDay(); } if (this->dtStart() != schedule.dtStart()) { return this->dtStart() < schedule.dtStart(); } if (this->created() != schedule.created()) { return this->created() < schedule.created(); } if (this->summary() != schedule.summary()) { return this->summary() < schedule.summary(); } return true; } void DSchedule::setAlarmType(const DSchedule::AlarmType &alarmType) { //如果提醒规则没有变化则退出 if (alarmType == getAlarmType()) { return; } //清除提醒规则 this->clearAlarms(); //如果为从不则退出 if (alarmType == AlarmType::Alarm_None || alarmType == AlarmType::Alarm_AllDay_None) return; QMap alarmMap = getAlarmMap(); QMap::const_iterator iter = alarmMap.constBegin(); for (; iter != alarmMap.constEnd(); ++iter) { if (iter.value() == alarmType) { KCalendarCore::Alarm::Ptr alarm = KCalendarCore::Alarm::Ptr(new KCalendarCore::Alarm(this)); alarm->setEnabled(true); alarm->setType(KCalendarCore::Alarm::Display); alarm->setDisplayAlarm(this->summary()); KCalendarCore::Duration duration(iter.key()); alarm->setStartOffset(duration); addAlarm(alarm); break; } } } DSchedule::AlarmType DSchedule::getAlarmType() { AlarmType alarmType = allDay() ? Alarm_AllDay_None : Alarm_None; KCalendarCore::Alarm::List alarmList = this->alarms(); if (alarmList.size() > 0) { KCalendarCore::Duration duration = alarmList.at(0)->startOffset(); QMap alarmMap = getAlarmMap(); if (alarmMap.contains(duration.asSeconds())) { alarmType = alarmMap[duration.asSeconds()]; } } return alarmType; } void DSchedule::setRRuleType(const DSchedule::RRuleType &rtype) { if (getRRuleType() == rtype) return; clearRecurrence(); QString rules; switch (rtype) { case RRule_Year: rules = "FREQ=YEARLY"; break; case RRule_Month: rules = "FREQ=MONTHLY"; break; case RRule_Week: rules = "FREQ=WEEKLY"; break; case RRule_Work: rules = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR"; break; case RRule_Day: rules = "FREQ=DAILY"; break; default: rules = ""; break; } if (!rules.isEmpty()) { KCalendarCore::Recurrence *recurrence = this->recurrence(); KCalendarCore::RecurrenceRule *rrule = new KCalendarCore::RecurrenceRule(); KCalendarCore::ICalFormat ical; if (ical.fromString(rrule, rules)) { recurrence->addRRule(rrule); } } } DSchedule::RRuleType DSchedule::getRRuleType() { RRuleType rtype = RRule_None; if (this->recurs()) { KCalendarCore::RecurrenceRule *rrule = this->recurrence()->defaultRRuleConst(); switch (rrule->recurrenceType()) { case KCalendarCore::RecurrenceRule::rYearly: { rtype = RRule_Year; } break; case KCalendarCore::RecurrenceRule::rMonthly: { rtype = RRule_Month; } break; case KCalendarCore::RecurrenceRule::rWeekly: { rtype = RRule_Week; } break; case KCalendarCore::RecurrenceRule::rDaily: { if (rrule->rrule().contains("BYDAY=MO,TU,WE,TH,FR")) { rtype = RRule_Work; } else { rtype = RRule_Day; } } break; default: rtype = RRule_None; break; } } return rtype; } int DSchedule::numberOfRepetitions(const Ptr &scheudle, const QDateTime &datetime) { return scheudle->recurrence()->durationTo(datetime); } bool DSchedule::fromJsonString(DSchedule::Ptr &schedule, const QString &json) { if (schedule.isNull()) { schedule = DSchedule::Ptr(new DSchedule); } QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(json.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "error:" << jsonError.errorString(); return false; } bool resBool = false; QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("schedule")) { QString str = rootObj.value("schedule").toString(); if (fromIcsString(schedule, str)) { if (rootObj.contains("type")) { schedule->setScheduleTypeID(rootObj.value("type").toString()); } if (rootObj.contains("compatibleID")) { schedule->setcompatibleID(rootObj.value("compatibleID").toInt()); } resBool = true; } } return resBool; } bool DSchedule::toJsonString(const DSchedule::Ptr &schedule, QString &json) { if (schedule.isNull()) { qCWarning(CommonLogger) << "hold a reference to a null pointer."; return false; } QJsonObject rootObject; rootObject.insert("type", schedule->scheduleTypeID()); rootObject.insert("schedule", toIcsString(schedule)); rootObject.insert("compatibleID", schedule->compatibleID()); QJsonDocument jsonDoc; jsonDoc.setObject(rootObject); json = QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); return true; } bool DSchedule::fromIcsString(Ptr &schedule, const QString &string) { bool resBool = false; KCalendarCore::ICalFormat icalformat; QTimeZone timezone = QDateTime::currentDateTime().timeZone(); KCalendarCore::MemoryCalendar::Ptr _cal(new KCalendarCore::MemoryCalendar(timezone)); if (icalformat.fromString(_cal, string)) { KCalendarCore::Event::List eventList = _cal->events(); if (eventList.size() > 0) { schedule = DSchedule::Ptr(new DSchedule(*eventList.at(0).data())); // eventList.at(0).staticCast(); resBool = true; } } return resBool; } QString DSchedule::toIcsString(const DSchedule::Ptr &schedule) { KCalendarCore::ICalFormat icalformat; KCalendarCore::MemoryCalendar::Ptr _cal(new KCalendarCore::MemoryCalendar(nullptr)); _cal->addEvent(schedule); return icalformat.toString(_cal.staticCast()); } QMap DSchedule::fromMapString(const QString &json) { QMap scheduleMap; QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(json.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "error:" << jsonError.errorString(); return scheduleMap; } QJsonArray rootArray = jsonDoc.array(); QDate date; foreach (auto jsonValue, rootArray) { QJsonObject jsonObj = jsonValue.toObject(); if (jsonObj.contains("Date")) { date = dateFromString(jsonObj.value("Date").toString()); } if (jsonObj.contains("schedule")) { QJsonArray jsonArray = jsonObj.value("schedule").toArray(); foreach (auto scheduleValue, jsonArray) { QString scheduleStr = scheduleValue.toString(); DSchedule::Ptr schedule = DSchedule::Ptr(new DSchedule); DSchedule::fromJsonString(schedule, scheduleStr); scheduleMap[date].append(schedule); } } } return scheduleMap; } QString DSchedule::toMapString(const QMap &scheduleMap) { QJsonArray rootArray; QMap::const_iterator iter = scheduleMap.constBegin(); for (; iter != scheduleMap.constEnd(); ++iter) { QJsonObject jsonObj; jsonObj.insert("Date", dateToString(iter.key())); QJsonArray jsonArray; foreach (auto &schedule, iter.value()) { QString scheduleStr; DSchedule::toJsonString(schedule, scheduleStr); jsonArray.append(scheduleStr); } jsonObj.insert("schedule", jsonArray); rootArray.append(jsonObj); } QJsonDocument jsonDoc; jsonDoc.setArray(rootArray); return QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); } QPair DSchedule::fromListString(const QString &json) { QPair schedulePair; QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(json.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "error:" << jsonError.errorString(); return schedulePair; } QJsonObject jsonObj = jsonDoc.object(); DSchedule::List scheduleList; if (jsonObj.contains("query")) { schedulePair.first = jsonObj.value("query").toString(); } if (jsonObj.contains("schedules")) { QJsonArray jsonArray = jsonObj.value("schedules").toArray(); foreach (auto scheduleValue, jsonArray) { QString scheduleStr = scheduleValue.toString(); DSchedule::Ptr schedule = DSchedule::Ptr(new DSchedule); DSchedule::fromJsonString(schedule, scheduleStr); scheduleList.append(schedule); } } schedulePair.second = scheduleList; return schedulePair; } QString DSchedule::toListString(const QString &query, const DSchedule::List &scheduleList) { QJsonObject jsonObj; jsonObj.insert("query", query); QJsonArray jsonArray; foreach (auto &schedule, scheduleList) { QString scheduleStr; DSchedule::toJsonString(schedule, scheduleStr); jsonArray.append(scheduleStr); } jsonObj.insert("schedules", jsonArray); QJsonDocument jsonDoc; jsonDoc.setObject(jsonObj); return QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); } void DSchedule::expendRecurrence(DSchedule::Map &scheduleMap, const DSchedule::Ptr &schedule, const QDateTime &dtStart, const QDateTime &dtEnd) { QDateTime queryDtStart = dtStart; //如果日程为全天日程,则查询的开始时间设置为0点,因为全天日程的开始和结束时间都是0点 if(schedule->allDay()){ queryDtStart.setTime(QTime(0,0,0)); } if (schedule->recurs()) { //获取日程的开始结束时间差 qint64 interval = schedule->dtStart().secsTo(schedule->dtEnd()); QList dtList = schedule->recurrence()->timesInInterval(queryDtStart, dtEnd); foreach (auto &dt, dtList) { QDateTime scheduleDtEnd = dt.addSecs(interval); DSchedule::Ptr newSchedule = DSchedule::Ptr(schedule->clone()); newSchedule->setDtStart(dt); newSchedule->setDtEnd(scheduleDtEnd); //只有重复日程设置RecurrenceId if (schedule->dtStart() != dt) { newSchedule->setRecurrenceId(dt); } scheduleMap[dt.date()].append(newSchedule); } } else { if (!(schedule->dtStart() > dtEnd || schedule->dtEnd() < queryDtStart)) { scheduleMap[schedule->dtStart().date()].append(schedule); } } } QMap DSchedule::convertSchedules(const DScheduleQueryPar::Ptr &queryPar, const DSchedule::List &scheduleList) { QDateTime dtStart = queryPar->dtStart(); QDateTime dtEnd = queryPar->dtEnd(); bool extend = queryPar->queryType() == DScheduleQueryPar::Query_None; QMap scheduleMap; foreach (auto &schedule, scheduleList) { //获取日程的开始结束时间差 qint64 interval = schedule->dtStart().secsTo(schedule->dtEnd()); //如果存在重复日程 if (schedule->recurs()) { //如果为农历日程 if (schedule->lunnar()) { //农历重复日程计算 LunarDateInfo lunardate(schedule->recurrence()->defaultRRuleConst(), interval); QMap ruleStartDate = lunardate.getRRuleStartDate(dtStart.date(), dtEnd.date(), schedule->dtStart().date()); QDateTime recurDateTime; recurDateTime.setTime(schedule->dtStart().time()); QDateTime copyEnd; QMap::ConstIterator iter = ruleStartDate.constBegin(); for (; iter != ruleStartDate.constEnd(); iter++) { recurDateTime.setDate(iter.value()); //如果在忽略时间列表中,则忽略 if (schedule->recurrence()->exDateTimes().contains(recurDateTime)) continue; copyEnd = recurDateTime.addSecs(interval); DSchedule::Ptr newSchedule = DSchedule::Ptr(new DSchedule(*schedule.data())); newSchedule->setDtStart(recurDateTime); newSchedule->setDtEnd(copyEnd); //只有重复日程设置RecurrenceId if (schedule->dtStart() != recurDateTime) { newSchedule->setRecurrenceId(recurDateTime); } scheduleMap[recurDateTime.date()].append(newSchedule); } } else { //非农历日程 expendRecurrence(scheduleMap, schedule, dtStart, dtEnd); } } else { //普通日程 //如果在查询时间范围内 QDateTime queryDtStart = dtStart; //如果日程为全天日程,则查询的开始时间设置为0点,因为全天日程的开始和结束时间都是0点 if(schedule->allDay()){ queryDtStart.setTime(QTime(0,0,0)); } if (!(schedule->dtEnd() < queryDtStart || schedule->dtStart() > dtEnd)) { if (extend && schedule->isMultiDay()) { //需要扩展的天数 int extenddays = static_cast(schedule->dtStart().daysTo(schedule->dtEnd())); for (int i = 0; i <= extenddays; ++i) { //如果扩展的日期在查询范围内则添加,否则退出 if(scheduleMap.contains(schedule->dtStart().date().addDays(i))){ scheduleMap[schedule->dtStart().date().addDays(i)].append(schedule); } else { break; } } } else { scheduleMap[schedule->dtStart().date()].append(schedule); } } } } //如果为查询前N个日程,则取前N个日程 if (queryPar->queryType() == DScheduleQueryPar::Query_Top) { int scheduleNum = 0; DSchedule::Map filterSchedule; DSchedule::Map::const_iterator iter = scheduleMap.constBegin(); for (; iter != scheduleMap.constEnd(); ++iter) { if (iter.value().size() == 0) { continue; } if (scheduleNum + iter.value().size() > queryPar->queryTop()) { DSchedule::List scheduleList; int residuesNum = queryPar->queryTop() - scheduleNum; for (int i = 0; i < residuesNum; ++i) { scheduleList.append(iter.value().at(i)); } filterSchedule[iter.key()] = scheduleList; } else { filterSchedule[iter.key()] = iter.value(); } } scheduleMap = filterSchedule; } return scheduleMap; } QMap DSchedule::fromQueryResult(const QString &query) { QMap scheduleMap; QPair pair = fromListString(query); DScheduleQueryPar::Ptr queryPar = DScheduleQueryPar::fromJsonString(pair.first); if (queryPar.isNull()) { return scheduleMap; } scheduleMap = DSchedule::convertSchedules(queryPar, pair.second); return scheduleMap; } bool operator==(const DSchedule::Ptr &s1, const DSchedule::Ptr &s2) { return s1.isNull() || s2.isNull() ? s1.isNull() && s2.isNull() : s1->instanceIdentifier() == s2->instanceIdentifier(); } QMap DSchedule::getAlarmMap() { static QMap alarmMap { {0, Alarm_Begin}, {-15 * Duration_Min, Alarm_15Min_Front}, {-30 * Duration_Min, Alarm_30Min_Front}, {-Duration_Hour, Alarm_1Hour_Front}, {-Duration_Day, Alarm_1Day_Front}, {-Duration_Day * 2, Alarm_2Day_Front}, {-Duration_Week, Alarm_1Week_Front}, {9 * Duration_Hour, Alarm_9Hour_After}, {-15 * Duration_Hour, Alarm_15Hour_Front}, {-39 * Duration_Hour, Alarm_39Hour_Front}, {-159 * Duration_Hour, Alarm_159Hour_Front}}; return alarmMap; } QString DSchedule::fileName() const { return m_fileName; } void DSchedule::setFileName(const QString &fileName) { m_fileName = fileName; } int DSchedule::compatibleID() const { return m_compatibleID; } void DSchedule::setcompatibleID(int compatibleID) { m_compatibleID = compatibleID; } QDebug operator<<(QDebug debug, const DSchedule &scheduleJsonData) { QDebugStateSaver saver(debug); debug.noquote() << "dtStart:" << dtToString(scheduleJsonData.dtStart()) << " ,dtEnd:" << dtToString(scheduleJsonData.dtEnd()) << " ,dtCreate:" << dtToString(scheduleJsonData.created()) << " ,summary:" << scheduleJsonData.summary() << " ,scheduleTypeID:" << scheduleJsonData.scheduleTypeID() << ",Uid:" << scheduleJsonData.uid() << " ,rrule:" << scheduleJsonData.recurrence()->defaultRRule()->rrule(); return debug; } dde-calendar-5.14.13/calendar-common/src/dschedule.h000066400000000000000000000105471473346337000221500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DSCHEDULE_H #define DSCHEDULE_H #include "event.h" #include "dschedulequerypar.h" #include #include #include //日程信息 class DSchedule : public KCalendarCore::Event { public: //提醒规则 enum AlarmType { Alarm_None, //从不 Alarm_Begin, //日程开始时 Alarm_15Min_Front, //提前15分钟 Alarm_30Min_Front, //提前30分钟 Alarm_1Hour_Front, //提前1小时 Alarm_1Day_Front, //提前1天 Alarm_2Day_Front, //提前2天 Alarm_1Week_Front, //提前1周 Alarm_AllDay_None, //全天从不 Alarm_9Hour_After, //日程当天9点(全天) Alarm_15Hour_Front, //一天前(全天),为日程开始前15小时 Alarm_39Hour_Front, //2天前(全天),为日程开始前39小时 Alarm_159Hour_Front, //一周前(全天),为日程开始前159小时 }; //重复规则 enum RRuleType { RRule_None, //从不 RRule_Day, //每天 RRule_Work, //每工作日 RRule_Week, //每周 RRule_Month, //每月 RRule_Year, //每年 }; typedef QSharedPointer Ptr; typedef QVector List; typedef QMap Map; typedef QMap::Iterator Iter; DSchedule(); DSchedule(const DSchedule &schedule); DSchedule(const KCalendarCore::Event &event); DSchedule *clone() const override; QString scheduleTypeID() const; void setScheduleTypeID(const QString &typeID); //为了与旧数据兼容处理(与联系人交互中使用的是自增ID作为日程的ID) int dbID() const; void setDbID(int id); bool isMoved(); void setMoved(bool moved); bool isValid() const; //是否是跨天的 bool isMultiDay() const; bool operator==(const DSchedule &schedule) const; bool operator<(const DSchedule &schedule) const; void setAlarmType(const AlarmType &alarmType); AlarmType getAlarmType(); //设置重复规则,若有重复规则,规则的截止次数或日期通过RecurrenceRule::duration 判断为永不,结束与次数还是结束与日期 void setRRuleType(const RRuleType &rtype); RRuleType getRRuleType(); //重复日程相对于原始日程重复的次数,若为第一个日程则返回0 static int numberOfRepetitions(const DSchedule::Ptr &scheudle, const QDateTime &datetime); static bool fromJsonString(DSchedule::Ptr &schedule, const QString &json); static bool toJsonString(const DSchedule::Ptr &schedule, QString &json); static bool fromIcsString(DSchedule::Ptr &schedule, const QString &string); static QString toIcsString(const DSchedule::Ptr &schedule); // static QMap fromMapString(const QString &json); static QString toMapString(const QMap &scheduleMap); static QPair fromListString(const QString &json); static QString toListString(const QString &query, const DSchedule::List &scheduleList); static void expendRecurrence(DSchedule::Map &scheduleMap, const DSchedule::Ptr &schedule, const QDateTime &dtStart, const QDateTime &dtEnd); static QMap convertSchedules(const DScheduleQueryPar::Ptr &queryPar, const DSchedule::List &scheduleList); static QMap fromQueryResult(const QString &query); private: QMap getAlarmMap(); public: //日程信息调试打印 friend QDebug operator<<(QDebug debug, const DSchedule &scheduleJsonData); friend bool operator==(const DSchedule::Ptr &s1, const DSchedule::Ptr &s2); friend bool operator<(const DSchedule::Ptr &s1, const DSchedule::Ptr &s2); QString fileName() const; void setFileName(const QString &fileName); //为了与旧数据兼容处理(与联系人交互中使用的是自增ID作为日程的ID) int compatibleID() const; void setcompatibleID(int compatibleID); private: QString m_fileName; //日程对应文件名称 //日程类型 QString m_scheduleTypeID; bool m_moved = false; int m_compatibleID; //为了与旧数据兼容处理(与联系人交互中使用的是自增ID作为日程的ID) }; #endif // DSCHEDULE_H dde-calendar-5.14.13/calendar-common/src/dschedulequerypar.cpp000066400000000000000000000072311473346337000242700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dschedulequerypar.h" #include "units.h" #include "commondef.h" #include #include #include DScheduleQueryPar::DScheduleQueryPar() : m_key("") , m_queryTop(1) , m_rruleType(RRule_None) , m_queryType(Query_None) { } QDateTime DScheduleQueryPar::dtStart() const { return m_dtStart; } void DScheduleQueryPar::setDtStart(const QDateTime &dtStart) { m_dtStart = dtStart; } QDateTime DScheduleQueryPar::dtEnd() const { return m_dtEnd; } void DScheduleQueryPar::setDtEnd(const QDateTime &dtEnd) { m_dtEnd = dtEnd; } QString DScheduleQueryPar::key() const { return m_key; } void DScheduleQueryPar::setKey(const QString &key) { m_key = key; } DScheduleQueryPar::Ptr DScheduleQueryPar::fromJsonString(const QString &queryStr) { QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(queryStr.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "error:" << jsonError.errorString() << " queryStr:" << queryStr; return nullptr; } DScheduleQueryPar::Ptr queryPar = DScheduleQueryPar::Ptr(new DScheduleQueryPar); QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("key")) { queryPar->setKey(rootObj.value("key").toString()); } if (rootObj.contains("dtStart")) { queryPar->setDtStart(dtFromString(rootObj.value("dtStart").toString())); } if (rootObj.contains("dtEnd")) { queryPar->setDtEnd(dtFromString(rootObj.value("dtEnd").toString())); } QueryType qType = Query_None; if (rootObj.contains("queryType")) { qType = static_cast(rootObj.value("queryType").toInt()); queryPar->setQueryType(qType); } switch (qType) { case Query_Top: { if (rootObj.contains("queryTop")) { queryPar->setQueryTop(rootObj.value("queryTop").toInt()); } } break; case Query_RRule: { if (rootObj.contains("queryRRule")) { queryPar->setRruleType(static_cast(rootObj.value("queryRRule").toInt())); } } default: break; } return queryPar; } QString DScheduleQueryPar::toJsonString(const DScheduleQueryPar::Ptr &queryPar) { if (queryPar.isNull()) { qCWarning(CommonLogger) << "hold a reference to a null pointer."; return QString(); } QJsonObject jsonObj; jsonObj.insert("key", queryPar->key()); jsonObj.insert("dtStart", dtToString(queryPar->dtStart())); jsonObj.insert("dtEnd", dtToString(queryPar->dtEnd())); jsonObj.insert("queryType", queryPar->queryType()); switch (queryPar->queryType()) { case Query_Top: jsonObj.insert("queryTop", queryPar->queryTop()); break; case Query_RRule: jsonObj.insert("queryRRule", queryPar->rruleType()); break; default: break; } QJsonDocument jsonDoc; jsonDoc.setObject(jsonObj); return QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); } DScheduleQueryPar::QueryType DScheduleQueryPar::queryType() const { return m_queryType; } void DScheduleQueryPar::setQueryType(const QueryType &queryType) { m_queryType = queryType; } int DScheduleQueryPar::queryTop() const { return m_queryTop; } void DScheduleQueryPar::setQueryTop(int queryTop) { m_queryTop = queryTop; } DScheduleQueryPar::RRuleType DScheduleQueryPar::rruleType() const { return m_rruleType; } void DScheduleQueryPar::setRruleType(const RRuleType &rruleType) { m_rruleType = rruleType; } dde-calendar-5.14.13/calendar-common/src/dschedulequerypar.h000066400000000000000000000033431473346337000237350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DSCHEDULEQUERYPAR_H #define DSCHEDULEQUERYPAR_H #include #include #include //查询日程相关参数 class DScheduleQueryPar { public: typedef QSharedPointer Ptr; enum QueryType { Query_None, Query_RRule, //查询重复规则 Query_Top, //查询前多少个 Query_ScheduleID //查询日程ID }; enum RRuleType { RRule_None, //从不 RRule_Day, //每天 RRule_Work, //每工作日 RRule_Week, //每周 RRule_Month, //每月 RRule_Year, //每年 }; DScheduleQueryPar(); QDateTime dtStart() const; void setDtStart(const QDateTime &dtStart); QDateTime dtEnd() const; void setDtEnd(const QDateTime &dtEnd); QString key() const; void setKey(const QString &key); static DScheduleQueryPar::Ptr fromJsonString(const QString &queryStr); static QString toJsonString(const DScheduleQueryPar::Ptr &queryPar); QueryType queryType() const; void setQueryType(const QueryType &queryType); int queryTop() const; void setQueryTop(int queryTop); RRuleType rruleType() const; void setRruleType(const RRuleType &rruleType); private: QString m_key; //查询关键字,如果查询类型为日程ID,则表示日程ID int m_queryTop; //查询范围内前多少个日程 RRuleType m_rruleType; //查询对应重复规则的日程 QueryType m_queryType; //查询的类型 QDateTime m_dtStart; //查询的起始时间 QDateTime m_dtEnd; //查询的截止时间 }; #endif // DSCHEDULEQUERYPAR_H dde-calendar-5.14.13/calendar-common/src/dscheduletype.cpp000066400000000000000000000316671473346337000234130ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dscheduletype.h" #include "daccount.h" #include "units.h" #include "commondef.h" #include #include #include #include DScheduleType::DScheduleType() : DScheduleType("") { } DScheduleType::DScheduleType(const QString &accountID) : m_accountID(accountID) , m_typeID("") , m_typeName("") , m_displayName("") , m_typePath("") , m_typeColor(DTypeColor()) , m_description("") , m_privilege(None) , m_showState(Show) , m_deleted(0) , m_syncTag(0) { } QString DScheduleType::accountID() const { return m_accountID; } void DScheduleType::setAccountID(const QString &accountID) { m_accountID = accountID; } DScheduleType::Privileges DScheduleType::privilege() const { return m_privilege; } void DScheduleType::setPrivilege(const Privileges &privilege) { m_privilege = privilege; } DTypeColor DScheduleType::typeColor() const { return m_typeColor; } void DScheduleType::setTypeColor(const DTypeColor &typeColor) { m_typeColor = typeColor; } void DScheduleType::setColorID(const QString &colorID) { m_typeColor.setColorID(colorID); } QString DScheduleType::getColorID() const { return m_typeColor.colorID(); } void DScheduleType::setColorCode(const QString &colorCode) { m_typeColor.setColorCode(colorCode); } QString DScheduleType::getColorCode() const { return m_typeColor.colorCode(); } QString DScheduleType::typeID() const { return m_typeID; } void DScheduleType::setTypeID(const QString &typeID) { m_typeID = typeID; } QString DScheduleType::displayName() const { return m_displayName; } void DScheduleType::setDisplayName(const QString &displayName) { m_displayName = displayName; } DScheduleType::ShowState DScheduleType::showState() const { return m_showState; } void DScheduleType::setShowState(const ShowState &showState) { m_showState = showState; } QString DScheduleType::typeName() const { return m_typeName; } void DScheduleType::setTypeName(const QString &typeName) { m_typeName = typeName; } QString DScheduleType::typePath() const { return m_typePath; } void DScheduleType::setTypePath(const QString &typePath) { m_typePath = typePath; } QString DScheduleType::description() const { return m_description; } void DScheduleType::setDescription(const QString &description) { m_description = description; } QDateTime DScheduleType::dtCreate() const { return m_dtCreate; } void DScheduleType::setDtCreate(const QDateTime &dtCreate) { m_dtCreate = dtCreate; } QDateTime DScheduleType::dtUpdate() const { return m_dtUpdate; } void DScheduleType::setDtUpdate(const QDateTime &dtUpdate) { m_dtUpdate = dtUpdate; } QDateTime DScheduleType::dtDelete() const { return m_dtDelete; } void DScheduleType::setDtDelete(const QDateTime &dtDelete) { m_dtDelete = dtDelete; } int DScheduleType::deleted() const { return m_deleted; } void DScheduleType::setDeleted(int deleted) { m_deleted = deleted; } bool DScheduleType::fromJsonString(DScheduleType::Ptr &scheduleType, const QString &jsonStr) { if (scheduleType.isNull()) { scheduleType = DScheduleType::Ptr(new DScheduleType); } //反序列化 QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonStr.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "error:" << jsonError.errorString(); return false; } QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("accountID")) { scheduleType->setAccountID(rootObj.value("accountID").toString()); } if (rootObj.contains("typeID")) { scheduleType->setTypeID(rootObj.value("typeID").toString()); } if (rootObj.contains("typeName")) { scheduleType->setTypeName(rootObj.value("typeName").toString()); } if (rootObj.contains("displayName")) { scheduleType->setDisplayName(rootObj.value("displayName").toString()); } if (rootObj.contains("typePath")) { scheduleType->setTypePath(rootObj.value("typePath").toString()); } if (rootObj.contains("TypeColor")) { QJsonObject colorObject = rootObj.value("TypeColor").toObject(); DTypeColor typeColor; if (colorObject.contains("colorID")) { typeColor.setColorID(colorObject.value("colorID").toString()); } if (colorObject.contains("colorCode")) { typeColor.setColorCode(colorObject.value("colorCode").toString()); } if (colorObject.contains("privilege")) { typeColor.setPrivilege(static_cast(colorObject.value("privilege").toInt())); } scheduleType->setTypeColor(typeColor); } if (rootObj.contains("description")) { scheduleType->setDescription(rootObj.value("description").toString()); } if (rootObj.contains("privilege")) { scheduleType->setPrivilege(static_cast(rootObj.value("privilege").toInt())); } if (rootObj.contains("dtCreate")) { scheduleType->setDtCreate(QDateTime::fromString(rootObj.value("dtCreate").toString(), Qt::ISODate)); } if (rootObj.contains("dtDelete")) { scheduleType->setDtDelete(QDateTime::fromString(rootObj.value("dtDelete").toString(), Qt::ISODate)); } if (rootObj.contains("dtUpdate")) { scheduleType->setDtUpdate(QDateTime::fromString(rootObj.value("dtUpdate").toString(), Qt::ISODate)); } if (rootObj.contains("showState")) { scheduleType->setShowState(static_cast(rootObj.value("showState").toInt())); } if (rootObj.contains("isDeleted")) { scheduleType->setDeleted(rootObj.value("isDeleted").toInt()); } return true; } bool DScheduleType::toJsonString(const DScheduleType::Ptr &scheduleType, QString &jsonStr) { if (scheduleType.isNull()) { qCWarning(CommonLogger) << "hold a reference to a null pointer."; return false; } //序列化 QJsonObject rootObject; rootObject.insert("accountID", scheduleType->accountID()); rootObject.insert("typeID", scheduleType->typeID()); rootObject.insert("typeName", scheduleType->typeName()); rootObject.insert("displayName", scheduleType->displayName()); rootObject.insert("typePath", scheduleType->typePath()); //类型颜色信息 QJsonObject colorObject; colorObject.insert("colorID", scheduleType->typeColor().colorID()); colorObject.insert("colorCode", scheduleType->typeColor().colorCode()); colorObject.insert("privilege", scheduleType->typeColor().privilege()); rootObject.insert("TypeColor", colorObject); rootObject.insert("description", scheduleType->description()); rootObject.insert("privilege", int(scheduleType->privilege())); rootObject.insert("dtCreate", dtToString(scheduleType->dtCreate())); rootObject.insert("dtDelete", dtToString(scheduleType->dtDelete())); rootObject.insert("dtUpdate", dtToString(scheduleType->dtUpdate())); rootObject.insert("showState", scheduleType->showState()); rootObject.insert("isDeleted", scheduleType->deleted()); QJsonDocument jsonDoc; jsonDoc.setObject(rootObject); jsonStr = QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); return true; } bool DScheduleType::fromJsonListString(DScheduleType::List &stList, const QString &jsonStr) { QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonStr.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "error:" << jsonError.errorString(); return false; } QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("scheduleType")) { QJsonArray jsonArray = rootObj.value("scheduleType").toArray(); for (auto ja : jsonArray) { QJsonObject typeObject = ja.toObject(); DScheduleType::Ptr scheduleType = DScheduleType::Ptr(new DScheduleType); if (typeObject.contains("accountID")) { scheduleType->setAccountID(typeObject.value("accountID").toString()); } if (typeObject.contains("typeID")) { scheduleType->setTypeID(typeObject.value("typeID").toString()); } if (typeObject.contains("typeName")) { scheduleType->setTypeName(typeObject.value("typeName").toString()); } if (typeObject.contains("displayName")) { scheduleType->setDisplayName(typeObject.value("displayName").toString()); } if (typeObject.contains("typePath")) { scheduleType->setTypePath(typeObject.value("typePath").toString()); } if (typeObject.contains("TypeColor")) { QJsonObject colorObject = typeObject.value("TypeColor").toObject(); DTypeColor typeColor; if (colorObject.contains("colorID")) { typeColor.setColorID(colorObject.value("colorID").toString()); } if (colorObject.contains("colorCode")) { typeColor.setColorCode(colorObject.value("colorCode").toString()); } if (colorObject.contains("privilege")) { typeColor.setPrivilege(static_cast(colorObject.value("privilege").toInt())); } scheduleType->setTypeColor(typeColor); } if (typeObject.contains("description")) { scheduleType->setDescription(typeObject.value("description").toString()); } if (typeObject.contains("privilege")) { scheduleType->setPrivilege(static_cast(typeObject.value("privilege").toInt())); } if (typeObject.contains("dtCreate")) { scheduleType->setDtCreate(QDateTime::fromString(typeObject.value("dtCreate").toString(), Qt::ISODate)); } if (typeObject.contains("dtDelete")) { scheduleType->setDtDelete(QDateTime::fromString(typeObject.value("dtDelete").toString(), Qt::ISODate)); } if (typeObject.contains("dtUpdate")) { scheduleType->setDtUpdate(QDateTime::fromString(typeObject.value("dtUpdate").toString(), Qt::ISODate)); } if (typeObject.contains("showState")) { scheduleType->setShowState(static_cast(typeObject.value("showState").toInt())); } if (typeObject.contains("isDeleted")) { scheduleType->setDeleted(typeObject.value("isDeleted").toInt()); } stList.append(scheduleType); } } return true; } bool DScheduleType::toJsonListString(const DScheduleType::List &stList, QString &jsonStr) { //序列化 QJsonObject rootObject; QJsonArray jsonArray; for (auto &scheduleType : stList) { QJsonObject typeObject; typeObject.insert("accountID", scheduleType->accountID()); typeObject.insert("typeID", scheduleType->typeID()); typeObject.insert("typeName", scheduleType->typeName()); typeObject.insert("displayName", scheduleType->displayName()); typeObject.insert("typePath", scheduleType->typePath()); //类型颜色信息 QJsonObject colorObject; colorObject.insert("colorID", scheduleType->typeColor().colorID()); colorObject.insert("colorCode", scheduleType->typeColor().colorCode()); colorObject.insert("privilege", scheduleType->typeColor().privilege()); typeObject.insert("TypeColor", colorObject); typeObject.insert("description", scheduleType->description()); typeObject.insert("privilege", int(scheduleType->privilege())); typeObject.insert("dtCreate", dtToString(scheduleType->dtCreate())); typeObject.insert("dtDelete", dtToString(scheduleType->dtDelete())); typeObject.insert("dtUpdate", dtToString(scheduleType->dtUpdate())); typeObject.insert("showState", scheduleType->showState()); typeObject.insert("isDeleted", scheduleType->deleted()); jsonArray.append(typeObject); } rootObject.insert("scheduleType", jsonArray); QJsonDocument jsonDoc; jsonDoc.setObject(rootObject); jsonStr = QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); return true; } int DScheduleType::syncTag() const { return m_syncTag; } void DScheduleType::setSyncTag(int syncTag) { m_syncTag = syncTag; } bool operator<(const DScheduleType::Ptr &st1, const DScheduleType::Ptr &st2) { //权限不一致权限小的排在前面 if (st1->privilege() != st2->privilege()) { return st1->privilege() < st2->privilege(); } //权限一一致的创建时间早的排在前面 if (st1->dtCreate() != st2->dtCreate()) { return st1->dtCreate() < st2->dtCreate(); } return true; } dde-calendar-5.14.13/calendar-common/src/dscheduletype.h000066400000000000000000000064111473346337000230450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DSCHEDULEYPE_H #define DSCHEDULEYPE_H #include "dtypecolor.h" #include #include #include #include #include class DAccount; //日程类型 class DScheduleType { public: enum Privilege { None = 0x0, //不可读不可写 Read = 0x1, //可读 Write = 0x2, //可编辑 Delete = 0x4, //可删除 System = Read, //系统权限 User = Read | Write | Delete, //用户权限 }; Q_DECLARE_FLAGS(Privileges, Privilege) enum ShowState { Hide, //日程隐藏 Show, //日程显示 }; typedef QSharedPointer Ptr; typedef QVector List; DScheduleType(); explicit DScheduleType(const QString &accountID); QString accountID() const; void setAccountID(const QString &accountID); Privileges privilege() const; void setPrivilege(const Privileges &privilege); DTypeColor typeColor() const; void setTypeColor(const DTypeColor &typeColor); void setColorID(const QString &colorID); QString getColorID() const; void setColorCode(const QString &colorCode); QString getColorCode() const; QString typeID() const; void setTypeID(const QString &typeID); QString displayName() const; void setDisplayName(const QString &displayName); ShowState showState() const; void setShowState(const ShowState &showState); QString typeName() const; void setTypeName(const QString &typeName); QString typePath() const; void setTypePath(const QString &typePath); QString description() const; void setDescription(const QString &description); QDateTime dtCreate() const; void setDtCreate(const QDateTime &dtCreate); QDateTime dtUpdate() const; void setDtUpdate(const QDateTime &dtUpdate); QDateTime dtDelete() const; void setDtDelete(const QDateTime &dtDelete); int deleted() const; void setDeleted(int deleted); static bool fromJsonString(DScheduleType::Ptr &scheduleType, const QString &jsonStr); static bool toJsonString(const DScheduleType::Ptr &scheduleType, QString &jsonStr); static bool fromJsonListString(DScheduleType::List &stList, const QString &jsonStr); static bool toJsonListString(const DScheduleType::List &stList, QString &jsonStr); int syncTag() const; void setSyncTag(int syncTag); friend bool operator<(const DScheduleType::Ptr &st1, const DScheduleType::Ptr &st2); private: QString m_accountID; QString m_typeID; QString m_typeName; //类型名称 QString m_displayName; //类型显示名称 QString m_typePath; //类型云端路径 DTypeColor m_typeColor; //相关颜色信息 QString m_description; //类型相关描述 Privileges m_privilege; //类型权限 QDateTime m_dtCreate; //创建时间 QDateTime m_dtUpdate; //更新时间 QDateTime m_dtDelete; //删除时间 ShowState m_showState; //类型下日程显示状态 int m_deleted; //是否被删除 int m_syncTag; //同步标识 }; Q_DECLARE_METATYPE(DScheduleType) Q_DECLARE_OPERATORS_FOR_FLAGS(DScheduleType::Privileges) #endif // DSCHEDULEYPE_H dde-calendar-5.14.13/calendar-common/src/dtypecolor.cpp000066400000000000000000000067761473346337000227400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dtypecolor.h" #include "units.h" #include "commondef.h" #include #include #include #include DTypeColor::DTypeColor() : m_colorID("") , m_colorCode("") , m_privilege(PriUser) { } DTypeColor::DTypeColor(const DTypeColor &typeColor) : m_colorID(typeColor.colorID()) , m_colorCode(typeColor.colorCode()) , m_privilege(typeColor.privilege()) , m_dtCreate(typeColor.dtCreate()) { } QString DTypeColor::colorCode() const { return m_colorCode; } void DTypeColor::setColorCode(const QString &colorCode) { m_colorCode = colorCode; } QString DTypeColor::colorID() const { return m_colorID; } void DTypeColor::setColorID(const QString &colorID) { m_colorID = colorID; } DTypeColor::Privilege DTypeColor::privilege() const { return m_privilege; } void DTypeColor::setPrivilege(const Privilege &privilege) { m_privilege = privilege; } bool DTypeColor::isSysColorInfo() { return this->privilege() == PriSystem; } bool DTypeColor::operator!=(const DTypeColor &color) const { return this->colorID() != color.colorID() || this->colorCode() != this->colorCode() || this->privilege() != this->privilege(); } DTypeColor::List DTypeColor::fromJsonString(const QString &colorJson) { DTypeColor::List colorList; QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(colorJson.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "error:" << jsonError.errorString(); return colorList; } QJsonArray rootArr = jsonDoc.array(); foreach (auto json, rootArr) { QJsonObject colorObj = json.toObject(); DTypeColor::Ptr typeColor = DTypeColor::Ptr(new DTypeColor); if (colorObj.contains("colorID")) { typeColor->setColorID(colorObj.value("colorID").toString()); } if (colorObj.contains("colorCode")) { typeColor->setColorCode(colorObj.value("colorCode").toString()); } if (colorObj.contains("privilege")) { typeColor->setPrivilege(static_cast(colorObj.value("privilege").toInt())); } if (colorObj.contains("dtCreate")) { typeColor->setDtCreate(dtFromString(colorObj.value("dtCreate").toString())); } colorList.append(typeColor); } return colorList; } QString DTypeColor::toJsonString(const DTypeColor::List &colorList) { QJsonArray rootArr; foreach (auto color, colorList) { QJsonObject colorObj; colorObj.insert("colorID", color->colorID()); colorObj.insert("colorCode", color->colorCode()); colorObj.insert("privilege", color->privilege()); colorObj.insert("dtCreate", dtToString(color->dtCreate())); rootArr.append(colorObj); } QJsonDocument jsonDoc; jsonDoc.setArray(rootArr); return QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); } QDateTime DTypeColor::dtCreate() const { return m_dtCreate; } void DTypeColor::setDtCreate(const QDateTime &dtCreate) { m_dtCreate = dtCreate; } bool operator<(const DTypeColor::Ptr &tc1, const DTypeColor::Ptr &tc2) { if (tc1->privilege() != tc2->privilege()) { return tc1->privilege() < tc2->privilege(); } if (tc1->dtCreate() != tc2->dtCreate()) { return tc1->dtCreate() < tc2->dtCreate(); } return true; } dde-calendar-5.14.13/calendar-common/src/dtypecolor.h000066400000000000000000000025721473346337000223730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DTYPECOLOR_H #define DTYPECOLOR_H #include #include #include #include /** * @brief The DTypeColor class * 类型颜色 */ class DTypeColor { public: //用户自定义的可读可编辑 //系统默认只读 enum Privilege { PriSystem = 1, //系统默认 PriUser = 7 //用户自定义 }; typedef QSharedPointer Ptr; typedef QVector List; DTypeColor(); DTypeColor(const DTypeColor &typeColor); QString colorCode() const; void setColorCode(const QString &colorCode); QString colorID() const; void setColorID(const QString &colorID); Privilege privilege() const; void setPrivilege(const Privilege &privilege); bool isSysColorInfo(); bool operator!=(const DTypeColor &color) const; static List fromJsonString(const QString &colorJson); static QString toJsonString(const List &colorList); QDateTime dtCreate() const; void setDtCreate(const QDateTime &dtCreate); friend bool operator<(const DTypeColor::Ptr &tc1, const DTypeColor::Ptr &tc2); private: QString m_colorID; QString m_colorCode; //颜色码 Privilege m_privilege; QDateTime m_dtCreate; }; #endif // DTYPECOLOR_H dde-calendar-5.14.13/calendar-common/src/huangliData/000077500000000000000000000000001473346337000222515ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-common/src/huangliData/dbusdatastruct.cpp000066400000000000000000000237731473346337000260250ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusdatastruct.h" #include #include #include void CaLunarDayInfo::registerMetaType() { qRegisterMetaType(); qDBusRegisterMetaType(); } QDebug operator<<(QDebug argument, const CaLunarDayInfo &what) { argument << what.mGanZhiYear << what.mGanZhiMonth << what.mGanZhiDay; argument << what.mLunarMonthName << what.mLunarDayName; argument << what.mLunarLeapMonth; argument << what.mZodiac << what.mTerm; argument << what.mSolarFestival << what.mLunarFestival; argument << what.mWorktime; return argument; } QDBusArgument &operator<<(QDBusArgument &argument, const CaLunarDayInfo &what) { argument.beginStructure(); argument << what.mGanZhiYear << what.mGanZhiMonth << what.mGanZhiDay; argument << what.mLunarMonthName << what.mLunarDayName; argument << what.mLunarLeapMonth; argument << what.mZodiac << what.mTerm; argument << what.mSolarFestival << what.mLunarFestival; argument << what.mWorktime; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, CaLunarDayInfo &what) { argument.beginStructure(); argument >> what.mGanZhiYear >> what.mGanZhiMonth >> what.mGanZhiDay; argument >> what.mLunarMonthName >> what.mLunarDayName; argument >> what.mLunarLeapMonth; argument >> what.mZodiac >> what.mTerm; argument >> what.mSolarFestival >> what.mLunarFestival; argument >> what.mWorktime; argument.endStructure(); return argument; } void CaLunarMonthInfo::registerMetaType() { qRegisterMetaType(); qDBusRegisterMetaType(); } QDebug operator<<(QDebug argument, const CaLunarMonthInfo &what) { argument << what.mFirstDayWeek << what.mDays; argument << what.mCaLunarDayInfo; return argument; } QDBusArgument &operator<<(QDBusArgument &argument, const CaLunarMonthInfo &what) { argument.beginStructure(); argument << what.mFirstDayWeek << what.mDays; argument << what.mCaLunarDayInfo; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, CaLunarMonthInfo &what) { argument.beginStructure(); argument >> what.mFirstDayWeek >> what.mDays; argument >> what.mCaLunarDayInfo; argument.endStructure(); return argument; } void CaHuangLiDayInfo::registerMetaType() { qRegisterMetaType(); qDBusRegisterMetaType(); } QString CaHuangLiDayInfo::toJson() { QJsonDocument doc; QJsonObject obj; obj.insert("Suit", mSuit); obj.insert("Avoid", mAvoid); obj.insert("Worktime", mWorktime); obj.insert("LunarFestival", mLunarFestival); obj.insert("SolarFestival", mSolarFestival); obj.insert("Term", mTerm); obj.insert("Zodiac", mZodiac); obj.insert("LunarLeapMonth", mLunarLeapMonth); obj.insert("LunarDayName", mLunarDayName); obj.insert("LunarMonthName", mLunarMonthName); obj.insert("GanZhiDay", mGanZhiDay); obj.insert("GanZhiMonth", mGanZhiMonth); obj.insert("GanZhiYear", mGanZhiYear); doc.setObject(obj); QString strJson = QString::fromUtf8(doc.toJson(QJsonDocument::Compact)); return strJson; } void CaHuangLiDayInfo::strJsonToInfo(const QString &strJson, bool &isVaild) { isVaild = true; QJsonParseError json_error; QJsonDocument jsonDoc(QJsonDocument::fromJson(strJson.toLocal8Bit(), &json_error)); if (json_error.error != QJsonParseError::NoError) { isVaild = false; return ; } QJsonObject rootObj = jsonDoc.object(); jsonObjectToInfo(rootObj); } void CaHuangLiDayInfo::jsonObjectToInfo(const QJsonObject &jsonObject) { //因为是预先定义好的JSON数据格式,所以这里可以这样读取int if (jsonObject.contains("Suit")) { this->mSuit = jsonObject.value("Suit").toString(); } if (jsonObject.contains("Avoid")) { this->mAvoid = jsonObject.value("Avoid").toString(); } if (jsonObject.contains("Worktime")) { this->mWorktime = jsonObject.value("Worktime").toInt(); } if (jsonObject.contains("LunarFestival")) { this->mLunarFestival = jsonObject.value("LunarFestival").toString(); } if (jsonObject.contains("SolarFestival")) { this->mSolarFestival = jsonObject.value("SolarFestival").toString(); } if (jsonObject.contains("Term")) { this->mTerm = jsonObject.value("Term").toString(); } if (jsonObject.contains("Zodiac")) { this->mZodiac = jsonObject.value("Zodiac").toString(); } if (jsonObject.contains("LunarLeapMonth")) { this->mLunarLeapMonth = jsonObject.value("LunarLeapMonth").toInt(); } if (jsonObject.contains("LunarDayName")) { this->mLunarDayName = jsonObject.value("LunarDayName").toString(); } if (jsonObject.contains("LunarMonthName")) { this->mLunarMonthName = jsonObject.value("LunarMonthName").toString(); } if (jsonObject.contains("GanZhiDay")) { this->mGanZhiDay = jsonObject.value("GanZhiDay").toString(); } if (jsonObject.contains("GanZhiMonth")) { this->mGanZhiMonth = jsonObject.value("GanZhiMonth").toString(); } if (jsonObject.contains("GanZhiYear")) { this->mGanZhiYear = jsonObject.value("GanZhiYear").toString(); } } QDebug operator<<(QDebug argument, const CaHuangLiDayInfo &what) { argument << what.mSuit << what.mAvoid; argument << what.mWorktime; argument << what.mLunarFestival << what.mSolarFestival; argument << what.mTerm << what.mZodiac; argument << what.mLunarLeapMonth; argument << what.mLunarDayName << what.mLunarMonthName; argument << what.mGanZhiDay << what.mGanZhiMonth << what.mGanZhiYear; return argument; } QDBusArgument &operator<<(QDBusArgument &argument, const CaHuangLiDayInfo &what) { argument.beginStructure(); argument << what.mSuit << what.mAvoid; argument << what.mWorktime; argument << what.mLunarFestival << what.mSolarFestival; argument << what.mTerm << what.mZodiac; argument << what.mLunarLeapMonth; argument << what.mLunarDayName << what.mLunarMonthName; argument << what.mGanZhiDay << what.mGanZhiMonth << what.mGanZhiYear; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, CaHuangLiDayInfo &what) { argument.beginStructure(); argument >> what.mSuit >> what.mAvoid; argument >> what.mWorktime; argument >> what.mLunarFestival >> what.mSolarFestival; argument >> what.mTerm >> what.mZodiac; argument >> what.mLunarLeapMonth; argument >> what.mLunarDayName >> what.mLunarMonthName; argument >> what.mGanZhiDay >> what.mGanZhiMonth >> what.mGanZhiYear; argument.endStructure(); return argument; } void CaHuangLiMonthInfo::registerMetaType() { qRegisterMetaType(); qDBusRegisterMetaType(); } QString CaHuangLiMonthInfo::toJson() { QJsonArray daysarr; QJsonDocument doc; QJsonObject obj; obj.insert("Days", mDays); obj.insert("FirstDayWeek", mFirstDayWeek); foreach (CaHuangLiDayInfo dayinfo, mCaLunarDayInfo) { QJsonObject dayobj; dayobj.insert("Suit", dayinfo.mSuit); dayobj.insert("Avoid", dayinfo.mAvoid); dayobj.insert("Worktime", dayinfo.mWorktime); dayobj.insert("LunarFestival", dayinfo.mLunarFestival); dayobj.insert("SolarFestival", dayinfo.mSolarFestival); dayobj.insert("Term", dayinfo.mTerm); dayobj.insert("Zodiac", dayinfo.mZodiac); dayobj.insert("LunarLeapMonth", dayinfo.mLunarLeapMonth); dayobj.insert("LunarDayName", dayinfo.mLunarDayName); dayobj.insert("LunarMonthName", dayinfo.mLunarMonthName); dayobj.insert("GanZhiDay", dayinfo.mGanZhiDay); dayobj.insert("GanZhiMonth", dayinfo.mGanZhiMonth); dayobj.insert("GanZhiYear", dayinfo.mGanZhiYear); daysarr.append(dayobj); } obj.insert("Datas", daysarr); doc.setObject(obj); QString strJson = QString::fromUtf8(doc.toJson(QJsonDocument::Compact)); return strJson; } void CaHuangLiMonthInfo::strJsonToInfo(const QString &strJson, bool &isVaild) { isVaild = true; QJsonParseError json_error; QJsonDocument jsonDoc(QJsonDocument::fromJson(strJson.toLocal8Bit(), &json_error)); if (json_error.error != QJsonParseError::NoError) { isVaild = false; return; } QJsonObject rootObj = jsonDoc.object(); //因为是预先定义好的JSON数据格式,所以这里可以这样读取 if (rootObj.contains("Days")) { this->mDays = rootObj.value("Days").toInt(); } if (rootObj.contains("FirstDayWeek")) { this->mFirstDayWeek = rootObj.value("FirstDayWeek").toInt(); } if (rootObj.contains("Datas")) { QJsonArray subArray = rootObj.value("Datas").toArray(); for (int i = 0; i < subArray.size(); i++) { QJsonObject subObj = subArray.at(i).toObject(); CaHuangLiDayInfo huangliday; huangliday.jsonObjectToInfo(subObj); this->mCaLunarDayInfo.append(huangliday); } } } void CaHuangLiMonthInfo::clear() { this->mDays = 0; this->mCaLunarDayInfo.clear(); } QDebug operator<<(QDebug argument, const CaHuangLiMonthInfo &what) { argument << what.mDays << what.mFirstDayWeek; argument << what.mCaLunarDayInfo; return argument; } QDBusArgument &operator<<(QDBusArgument &argument, const CaHuangLiMonthInfo &what) { argument.beginStructure(); argument << what.mDays << what.mFirstDayWeek; argument << what.mCaLunarDayInfo; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, CaHuangLiMonthInfo &what) { argument.beginStructure(); argument >> what.mDays >> what.mFirstDayWeek; argument >> what.mCaLunarDayInfo; argument.endStructure(); return argument; } dde-calendar-5.14.13/calendar-common/src/huangliData/dbusdatastruct.h000066400000000000000000000077611473346337000254710ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSDATASTRUCT_H #define DBUSDATASTRUCT_H #include #include class CaLunarDayInfo { public: CaLunarDayInfo() : mGanZhiYear("") , mGanZhiMonth("") , mGanZhiDay("") , mLunarMonthName("") , mLunarDayName("") , mLunarLeapMonth(0) , mZodiac("") , mTerm("") , mSolarFestival("") , mLunarFestival("") , mWorktime(0) { } static void registerMetaType(); friend QDebug operator<<(QDebug argument, const CaLunarDayInfo &what); friend QDBusArgument &operator<<(QDBusArgument &argument, const CaLunarDayInfo &what); friend const QDBusArgument &operator>>(const QDBusArgument &argument, CaLunarDayInfo &what); public: QString mGanZhiYear; // 农历年的干支 QString mGanZhiMonth; // 农历月的干支 QString mGanZhiDay; // 农历日的干支 QString mLunarMonthName; // 农历月名 QString mLunarDayName; // 农历日名 qint32 mLunarLeapMonth; // 未使用 QString mZodiac; // 农历年的生肖 QString mTerm; // 农历节气 QString mSolarFestival; // 公历节日 QString mLunarFestival; // 农历节日 qint32 mWorktime; // 未使用 }; class CaLunarMonthInfo { public: CaLunarMonthInfo() : mFirstDayWeek(0) , mDays(0) { } static void registerMetaType(); friend QDebug operator<<(QDebug argument, const CaLunarMonthInfo &what); friend QDBusArgument &operator<<(QDBusArgument &argument, const CaLunarMonthInfo &what); friend const QDBusArgument &operator>>(const QDBusArgument &argument, CaLunarMonthInfo &what); public: qint32 mFirstDayWeek; qint32 mDays; QList mCaLunarDayInfo; }; class CaHuangLiDayInfo { public: CaHuangLiDayInfo() : mGanZhiYear("") , mGanZhiMonth("") , mGanZhiDay("") , mLunarMonthName("") , mLunarDayName("") , mLunarLeapMonth(0) , mZodiac("") , mTerm("") , mSolarFestival("") , mLunarFestival("") , mWorktime(0) , mSuit("") , mAvoid("") { } static void registerMetaType(); friend QDebug operator<<(QDebug argument, const CaHuangLiDayInfo &what); friend QDBusArgument &operator<<(QDBusArgument &argument, const CaHuangLiDayInfo &what); friend const QDBusArgument &operator>>(const QDBusArgument &argument, CaHuangLiDayInfo &what); QString toJson(); void strJsonToInfo(const QString &strJson, bool &isVaild); void jsonObjectToInfo(const QJsonObject &jsonObject); public: QString mGanZhiYear; //年干支 QString mGanZhiMonth; //月干支 QString mGanZhiDay; //日干支 QString mLunarMonthName; //农历月名称 QString mLunarDayName; //农历日名称 qint32 mLunarLeapMonth; //闰月 QString mZodiac; //生肖 QString mTerm; //农历节气 QString mSolarFestival; //阳历节日 QString mLunarFestival; //农历节日 qint32 mWorktime; //未使用 QString mSuit; //黄历宜 QString mAvoid; //黄历忌 }; class CaHuangLiMonthInfo { public: CaHuangLiMonthInfo() : mFirstDayWeek(0) , mDays(0) { } static void registerMetaType(); friend QDebug operator<<(QDebug argument, const CaHuangLiMonthInfo &what); friend QDBusArgument &operator<<(QDBusArgument &argument, const CaHuangLiMonthInfo &what); friend const QDBusArgument &operator>>(const QDBusArgument &argument, CaHuangLiMonthInfo &what); QString toJson(); void strJsonToInfo(const QString &strJson, bool &isVaild); void clear(); public: qint32 mFirstDayWeek; //第一天所在周 qint32 mDays; //每月天数 QVector mCaLunarDayInfo; }; Q_DECLARE_METATYPE(CaLunarDayInfo) Q_DECLARE_METATYPE(CaLunarMonthInfo) Q_DECLARE_METATYPE(CaHuangLiDayInfo) Q_DECLARE_METATYPE(CaHuangLiMonthInfo) #endif // DBUSDATASTRUCT_H dde-calendar-5.14.13/calendar-common/src/huangliData/lunardatastruct.cpp000066400000000000000000000002361473346337000261760ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "lunardatastruct.h" dde-calendar-5.14.13/calendar-common/src/huangliData/lunardatastruct.h000066400000000000000000000014031473346337000256400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef LUNARDATASTRUCT_H #define LUNARDATASTRUCT_H #include #include #include typedef struct HuangLi { qint64 ID = 0; // `json:"id"` // format: ("%s%02s%02s", year, month, day) QString Avoid {}; // `json:"avoid"` QString Suit {}; //`json:"suit"` } stHuangLi; typedef struct _tagHolidayInfo { QDate date; char status {}; } HolidayInfo; typedef struct _tagFestivalInfo { QString ID {}; QString FestivalName {}; QString description {}; QString Rest {}; int month = 0; int year = 0; QVector listHoliday {}; } FestivalInfo; #endif // LUNARDATASTRUCT_H dde-calendar-5.14.13/calendar-common/src/lunarandfestival/000077500000000000000000000000001473346337000233725ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-common/src/lunarandfestival/celestialbodies.cpp000066400000000000000000005032131473346337000272350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "celestialbodies.h" double GetEarthL0(double t) { double result = 0.0; result += 1.75347045673; result += 0.03341656456 * qCos(4.66925680417 + 6283.0758499914 * t); result += 0.00034894275 * qCos(4.62610241759 + 12566.1516999828 * t); result += 3.417571e-05 * qCos(2.82886579606 + 3.523118349 * t); result += 3.497056e-05 * qCos(2.74411800971 + 5753.3848848968 * t); result += 3.135896e-05 * qCos(3.62767041758 + 77713.7714681205 * t); result += 2.676218e-05 * qCos(4.41808351397 + 7860.4193924392 * t); result += 2.342687e-05 * qCos(6.13516237631 + 3930.2096962196 * t); result += 1.273166e-05 * qCos(2.03709655772 + 529.6909650946 * t); result += 1.324292e-05 * qCos(0.74246356352 + 11506.7697697936 * t); result += 9.01855e-06 * qCos(2.04505443513 + 26.2983197998 * t); result += 1.199167e-05 * qCos(1.10962944315 + 1577.3435424478 * t); result += 8.57223e-06 * qCos(3.50849156957 + 398.1490034082 * t); result += 7.79786e-06 * qCos(1.17882652114 + 5223.6939198022 * t); result += 9.9025e-06 * qCos(5.23268129594 + 5884.9268465832 * t); result += 7.53141e-06 * qCos(2.53339053818 + 5507.5532386674 * t); result += 5.05264e-06 * qCos(4.58292563052 + 18849.2275499742 * t); result += 4.92379e-06 * qCos(4.20506639861 + 775.522611324 * t); result += 3.56655e-06 * qCos(2.91954116867 + 0.0673103028 * t); result += 2.84125e-06 * qCos(1.89869034186 + 796.2980068164 * t); result += 2.4281e-06 * qCos(0.34481140906 + 5486.777843175 * t); result += 3.17087e-06 * qCos(5.84901952218 + 11790.6290886588 * t); result += 2.71039e-06 * qCos(0.31488607649 + 10977.078804699 * t); result += 2.0616e-06 * qCos(4.80646606059 + 2544.3144198834 * t); result += 2.05385e-06 * qCos(1.86947813692 + 5573.1428014331 * t); result += 2.02261e-06 * qCos(2.45767795458 + 6069.7767545534 * t); result += 1.26184e-06 * qCos(1.0830263021 + 20.7753954924 * t); result += 1.55516e-06 * qCos(0.83306073807 + 213.299095438 * t); result += 1.15132e-06 * qCos(0.64544911683 + 0.9803210682 * t); result += 1.02851e-06 * qCos(0.63599846727 + 4694.0029547076 * t); result += 1.01724e-06 * qCos(4.26679821365 + 7.1135470008 * t); result += 9.9206e-07 * qCos(6.20992940258 + 2146.1654164752 * t); result += 1.32212e-06 * qCos(3.41118275555 + 2942.4634232916 * t); result += 9.7607e-07 * qCos(0.6810127227 + 155.4203994342 * t); result += 8.5128e-07 * qCos(1.29870743025 + 6275.9623029906 * t); result += 7.4651e-07 * qCos(1.75508916159 + 5088.6288397668 * t); result += 1.01895e-06 * qCos(0.97569221824 + 15720.8387848784 * t); result += 8.4711e-07 * qCos(3.67080093025 + 71430.6956181291 * t); result += 7.3547e-07 * qCos(4.67926565481 + 801.8209311238 * t); result += 7.3874e-07 * qCos(3.50319443167 + 3154.6870848956 * t); result += 7.8756e-07 * qCos(3.03698313141 + 12036.4607348882 * t); result += 7.9637e-07 * qCos(1.807913307 + 17260.1546546904 * t); result += 8.5803e-07 * qCos(5.98322631256 + 161000.685737674 * t); result += 5.6963e-07 * qCos(2.78430398043 + 6286.5989683404 * t); result += 6.1148e-07 * qCos(1.81839811024 + 7084.8967811152 * t); result += 6.9627e-07 * qCos(0.83297596966 + 9437.762934887 * t); result += 5.6116e-07 * qCos(4.38694880779 + 14143.4952424306 * t); result += 6.2449e-07 * qCos(3.97763880587 + 8827.3902698748 * t); result += 5.1145e-07 * qCos(0.28306864501 + 5856.4776591154 * t); result += 5.5577e-07 * qCos(3.47006009062 + 6279.5527316424 * t); result += 4.1036e-07 * qCos(5.36817351402 + 8429.2412664666 * t); result += 5.1605e-07 * qCos(1.33282746983 + 1748.016413067 * t); result += 5.1992e-07 * qCos(0.18914945834 + 12139.5535091068 * t); result += 4.9e-07 * qCos(0.48735065033 + 1194.4470102246 * t); result += 3.92e-07 * qCos(6.16832995016 + 10447.3878396044 * t); result += 3.5566e-07 * qCos(1.77597314691 + 6812.766815086 * t); result += 3.677e-07 * qCos(6.04133859347 + 10213.285546211 * t); result += 3.6596e-07 * qCos(2.56955238628 + 1059.3819301892 * t); result += 3.3291e-07 * qCos(0.59309499459 + 17789.845619785 * t); result += 3.5954e-07 * qCos(1.70876111898 + 2352.8661537718 * t); result += 4.0938e-07 * qCos(2.39850881707 + 19651.048481098 * t); result += 3.0047e-07 * qCos(2.73975123935 + 1349.8674096588 * t); result += 3.0412e-07 * qCos(0.44294464135 + 83996.8473181119 * t); result += 2.3663e-07 * qCos(0.48473567763 + 8031.0922630584 * t); result += 2.3574e-07 * qCos(2.06527720049 + 3340.6124266998 * t); result += 2.1089e-07 * qCos(4.14825464101 + 951.7184062506 * t); result += 2.4738e-07 * qCos(0.21484762138 + 3.5904286518 * t); result += 2.5352e-07 * qCos(3.16470953405 + 4690.4798363586 * t); result += 2.282e-07 * qCos(5.22197888032 + 4705.7323075436 * t); result += 2.1419e-07 * qCos(1.42563735525 + 16730.4636895958 * t); result += 2.1891e-07 * qCos(5.55594302562 + 553.5694028424 * t); result += 1.7481e-07 * qCos(4.56052900359 + 135.0650800354 * t); result += 1.9925e-07 * qCos(5.22208471269 + 12168.0026965746 * t); result += 1.986e-07 * qCos(5.77470167653 + 6309.3741697912 * t); result += 2.03e-07 * qCos(0.37133792946 + 283.8593188652 * t); result += 1.4421e-07 * qCos(4.19315332546 + 242.728603974 * t); result += 1.6225e-07 * qCos(5.98837722564 + 11769.8536931664 * t); result += 1.5077e-07 * qCos(4.19567181073 + 6256.7775301916 * t); result += 1.9124e-07 * qCos(3.82219996949 + 23581.2581773176 * t); result += 1.8888e-07 * qCos(5.38626880969 + 149854.400134808 * t); result += 1.4346e-07 * qCos(3.72355084422 + 38.0276726358 * t); result += 1.7898e-07 * qCos(2.21490735647 + 13367.9726311066 * t); result += 1.2054e-07 * qCos(2.62229588349 + 955.5997416086 * t); result += 1.1287e-07 * qCos(0.17739328092 + 4164.311989613 * t); result += 1.3971e-07 * qCos(4.40138139996 + 6681.2248533996 * t); result += 1.3621e-07 * qCos(1.88934471407 + 7632.9432596502 * t); result += 1.2503e-07 * qCos(1.13052412208 + 5.5229243074 * t); result += 1.0498e-07 * qCos(5.35909518669 + 1592.5960136328 * t); result += 9.803e-08 * qCos(0.99947478995 + 11371.7046897582 * t); result += 9.22e-08 * qCos(4.57138609781 + 4292.3308329504 * t); result += 1.0327e-07 * qCos(6.19982566125 + 6438.4962494256 * t); result += 1.2003e-07 * qCos(1.003514567 + 632.7837393132 * t); result += 1.0827e-07 * qCos(0.32734520222 + 103.0927742186 * t); result += 8.356e-08 * qCos(4.53902685948 + 25132.3033999656 * t); result += 1.0005e-07 * qCos(6.0291496328 + 5746.271337896 * t); result += 8.409e-08 * qCos(3.29946744189 + 7234.794256242 * t); result += 8.006e-08 * qCos(5.82145271907 + 28.4491874678 * t); result += 1.0523e-07 * qCos(0.93871805506 + 11926.2544136688 * t); result += 7.686e-08 * qCos(3.12142363172 + 7238.6755916 * t); result += 9.378e-08 * qCos(2.62414241032 + 5760.4984318976 * t); result += 8.127e-08 * qCos(6.11228001785 + 4732.0306273434 * t); result += 9.232e-08 * qCos(0.48343968736 + 522.5774180938 * t); result += 9.802e-08 * qCos(5.24413991147 + 27511.4678735372 * t); result += 7.871e-08 * qCos(0.99590177926 + 5643.1785636774 * t); result += 8.123e-08 * qCos(6.2705301365 + 426.598190876 * t); result += 9.048e-08 * qCos(5.33686335897 + 6386.16862421 * t); result += 8.62e-08 * qCos(4.16538210888 + 7058.5984613154 * t); result += 6.297e-08 * qCos(4.71724819317 + 6836.6452528338 * t); result += 7.575e-08 * qCos(3.97382858911 + 11499.6562227928 * t); result += 7.756e-08 * qCos(2.95729056763 + 23013.5395395872 * t); result += 7.314e-08 * qCos(0.60652505806 + 11513.8833167944 * t); result += 5.955e-08 * qCos(2.87641047971 + 6283.14316029419 * t); result += 6.534e-08 * qCos(5.79072926033 + 18073.7049386502 * t); result += 7.188e-08 * qCos(3.99831508699 + 74.7815985673 * t); result += 7.346e-08 * qCos(4.38582365437 + 316.3918696566 * t); result += 5.413e-08 * qCos(5.39199024641 + 419.4846438752 * t); result += 5.127e-08 * qCos(2.36062848786 + 10973.55568635 * t); result += 7.056e-08 * qCos(0.32258441903 + 263.0839233728 * t); result += 6.625e-08 * qCos(3.66475158672 + 17298.1823273262 * t); result += 6.762e-08 * qCos(5.91132535899 + 90955.5516944961 * t); result += 4.938e-08 * qCos(5.73672165674 + 9917.6968745098 * t); result += 5.547e-08 * qCos(2.45152597661 + 12352.8526045448 * t); result += 5.958e-08 * qCos(3.32051344676 + 6283.0085396886 * t); result += 4.471e-08 * qCos(2.06385999536 + 7079.3738568078 * t); result += 6.153e-08 * qCos(1.45823331144 + 233141.314404362 * t); result += 4.348e-08 * qCos(4.4234217548 + 5216.5803728014 * t); result += 6.123e-08 * qCos(1.07494905258 + 19804.8272915828 * t); result += 4.488e-08 * qCos(3.6528503715 + 206.1855484372 * t); result += 4.02e-08 * qCos(0.83995823171 + 20.3553193988 * t); result += 5.188e-08 * qCos(4.06503864016 + 6208.2942514241 * t); result += 5.307e-08 * qCos(0.38217636096 + 31441.6775697568 * t); result += 3.785e-08 * qCos(2.34369213733 + 3.881335358 * t); result += 4.497e-08 * qCos(3.27230796845 + 11015.1064773348 * t); result += 4.132e-08 * qCos(0.92128915753 + 3738.761430108 * t); result += 3.521e-08 * qCos(5.97844807108 + 3894.1818295422 * t); result += 4.215e-08 * qCos(1.90601120623 + 245.8316462294 * t); result += 3.701e-08 * qCos(5.03069397926 + 536.8045120954 * t); result += 3.865e-08 * qCos(1.82634360607 + 11856.2186514245 * t); result += 3.652e-08 * qCos(1.01838584934 + 16200.7727245012 * t); result += 3.39e-08 * qCos(0.97785123922 + 8635.9420037632 * t); result += 3.737e-08 * qCos(2.95380107829 + 3128.3887650958 * t); result += 3.507e-08 * qCos(3.71291946325 + 6290.1893969922 * t); result += 3.086e-08 * qCos(3.64646921512 + 10.6366653498 * t); result += 3.397e-08 * qCos(1.10590684017 + 14712.317116458 * t); result += 3.334e-08 * qCos(0.83684924911 + 6496.3749454294 * t); result += 2.805e-08 * qCos(2.58504514144 + 14314.1681130498 * t); result += 3.65e-08 * qCos(1.08344142571 + 88860.0570709867 * t); result += 3.388e-08 * qCos(3.20185096055 + 5120.6011455836 * t); result += 3.252e-08 * qCos(3.47859752062 + 6133.5126528568 * t); result += 2.553e-08 * qCos(3.94869034189 + 1990.745017041 * t); result += 3.52e-08 * qCos(2.05559692878 + 244287.600007228 * t); result += 2.565e-08 * qCos(1.560717849 + 23543.2305046818 * t); result += 2.621e-08 * qCos(3.85639359951 + 266.6070417218 * t); result += 2.955e-08 * qCos(3.39692949667 + 9225.539273283 * t); result += 2.876e-08 * qCos(6.02635617464 + 154717.609887683 * t); result += 2.395e-08 * qCos(1.16131956403 + 10984.1923516998 * t); result += 3.161e-08 * qCos(1.32798718453 + 10873.9860304804 * t); result += 3.163e-08 * qCos(5.08946464629 + 21228.3920235458 * t); result += 2.361e-08 * qCos(4.27212906992 + 6040.3472460174 * t); result += 3.03e-08 * qCos(1.80209931347 + 35371.8872659764 * t); result += 2.343e-08 * qCos(3.576898605 + 10969.9652576982 * t); result += 2.618e-08 * qCos(2.57870156528 + 22483.8485744926 * t); result += 2.113e-08 * qCos(3.71393780256 + 65147.6197681377 * t); result += 2.019e-08 * qCos(0.81393923319 + 170.6728706192 * t); result += 2.003e-08 * qCos(0.38091017375 + 6172.869528772 * t); result += 2.506e-08 * qCos(3.74379142438 + 10575.4066829418 * t); result += 2.381e-08 * qCos(0.10581361289 + 7.046236698 * t); result += 1.949e-08 * qCos(4.86892513469 + 36.0278666774 * t); result += 2.074e-08 * qCos(4.2279477457 + 5650.2921106782 * t); result += 1.924e-08 * qCos(5.5946054986 + 6282.0955289232 * t); result += 1.949e-08 * qCos(1.07002512703 + 5230.807466803 * t); result += 1.988e-08 * qCos(5.19736046771 + 6262.300454499 * t); result += 1.887e-08 * qCos(3.74365662683 + 23.8784377478 * t); result += 1.787e-08 * qCos(1.25929682929 + 12559.038152982 * t); result += 1.883e-08 * qCos(1.90364058477 + 15.252471185 * t); result += 1.816e-08 * qCos(3.68083868442 + 15110.4661198662 * t); result += 1.701e-08 * qCos(4.4110589538 + 110.2063212194 * t); result += 1.99e-08 * qCos(3.93295788548 + 6206.8097787158 * t); result += 2.103e-08 * qCos(0.75354917468 + 13521.7514415914 * t); result += 1.774e-08 * qCos(0.48747535361 + 1551.045222648 * t); result += 1.882e-08 * qCos(0.86684493432 + 22003.9146348698 * t); result += 1.924e-08 * qCos(1.22898324132 + 709.9330485583 * t); result += 2.009e-08 * qCos(4.6285092198 + 6037.244203762 * t); result += 1.924e-08 * qCos(0.60231842508 + 6284.0561710596 * t); result += 1.596e-08 * qCos(3.98332956992 + 13916.0191096416 * t); result += 1.664e-08 * qCos(4.41939715469 + 8662.240323563 * t); result += 1.971e-08 * qCos(1.04560500503 + 18209.3302636602 * t); result += 1.942e-08 * qCos(4.31335979989 + 6244.9428143536 * t); result += 1.476e-08 * qCos(0.93271367331 + 2379.1644735716 * t); result += 1.81e-08 * qCos(0.49112137707 + 1.4844727083 * t); result += 1.346e-08 * qCos(1.51574702235 + 4136.9104335162 * t); result += 1.528e-08 * qCos(5.61835711404 + 6127.6554505572 * t); result += 1.791e-08 * qCos(3.22187270126 + 39302.096962196 * t); result += 1.747e-08 * qCos(3.05638656738 + 18319.5365848796 * t); result += 1.431e-08 * qCos(4.51153808594 + 20426.571092422 * t); result += 1.695e-08 * qCos(0.22047718414 + 25158.6017197654 * t); result += 1.242e-08 * qCos(4.46665769933 + 17256.6315363414 * t); result += 1.463e-08 * qCos(4.69242679213 + 14945.3161735544 * t); result += 1.205e-08 * qCos(1.86912144659 + 4590.910180489 * t); result += 1.192e-08 * qCos(2.74227166898 + 12569.6748183318 * t); result += 1.222e-08 * qCos(5.18120087482 + 5333.9002410216 * t); result += 1.39e-08 * qCos(5.42894648983 + 143571.324284816 * t); result += 1.473e-08 * qCos(1.70479245805 + 11712.9553182308 * t); result += 1.362e-08 * qCos(2.61069503292 + 6062.6632075526 * t); result += 1.148e-08 * qCos(6.0300180054 + 3634.6210245184 * t); result += 1.198e-08 * qCos(5.15294130422 + 10177.2576795336 * t); result += 1.266e-08 * qCos(0.11421493643 + 18422.6293590982 * t); result += 1.411e-08 * qCos(1.09908857534 + 3496.032826134 * t); result += 1.349e-08 * qCos(2.99805109633 + 17654.7805397496 * t); result += 1.253e-08 * qCos(2.79850152848 + 167283.761587666 * t); result += 1.311e-08 * qCos(1.60942984879 + 5481.2549188676 * t); result += 1.079e-08 * qCos(6.20304501787 + 3.2863574178 * t); result += 1.181e-08 * qCos(1.20653776978 + 131.5419616864 * t); result += 1.254e-08 * qCos(5.45103277798 + 6076.8903015542 * t); result += 1.035e-08 * qCos(2.32142722747 + 7342.4577801806 * t); result += 1.117e-08 * qCos(0.38838354256 + 949.1756089698 * t); result += 9.66e-09 * qCos(3.18341890851 + 11087.2851259184 * t); result += 1.171e-08 * qCos(3.39635049962 + 12562.6285816338 * t); result += 1.121e-08 * qCos(0.72627490378 + 220.4126424388 * t); result += 1.024e-08 * qCos(2.19378315386 + 11403.676995575 * t); result += 8.88e-09 * qCos(3.91173199285 + 4686.8894077068 * t); result += 9.1e-09 * qCos(1.98802695087 + 735.8765135318 * t); result += 8.3e-09 * qCos(0.48984915507 + 24072.9214697764 * t); result += 1.096e-08 * qCos(6.17377835617 + 5436.9930152402 * t); result += 9.08e-09 * qCos(0.44959639433 + 7477.522860216 * t); result += 9.74e-09 * qCos(1.52996238356 + 9623.6882766912 * t); result += 8.4e-09 * qCos(1.79543266333 + 5429.8794682394 * t); result += 7.78e-09 * qCos(6.17699177946 + 38.1330356378 * t); result += 7.76e-09 * qCos(4.09855402433 + 14.2270940016 * t); result += 1.068e-08 * qCos(4.64200173735 + 43232.3066584156 * t); result += 9.54e-09 * qCos(1.49988435748 + 1162.4747044078 * t); result += 9.07e-09 * qCos(0.86986870809 + 10344.2950653858 * t); result += 9.31e-09 * qCos(4.06044689031 + 28766.924424484 * t); result += 7.39e-09 * qCos(5.04368197372 + 639.897286314 * t); result += 9.37e-09 * qCos(3.4688469896 + 1589.0728952838 * t); result += 7.63e-09 * qCos(5.86304932998 + 16858.4825329332 * t); result += 9.53e-09 * qCos(4.20801492835 + 11190.377900137 * t); result += 7.08e-09 * qCos(1.7289998894 + 13095.8426650774 * t); result += 9.69e-09 * qCos(1.64439522215 + 29088.811415985 * t); result += 7.17e-09 * qCos(0.16688678895 + 11.729352836 * t); result += 9.62e-09 * qCos(3.53092337542 + 12416.5885028482 * t); result += 7.47e-09 * qCos(5.77866940346 + 12592.4500197826 * t); result += 6.72e-09 * qCos(1.91095796194 + 3.9321532631 * t); result += 6.71e-09 * qCos(5.46240843677 + 18052.9295431578 * t); result += 6.75e-09 * qCos(6.28311558823 + 4535.0594369244 * t); result += 6.84e-09 * qCos(0.3997501208 + 5849.3641121146 * t); result += 7.99e-09 * qCos(0.29851185294 + 12132.439962106 * t); result += 7.58e-09 * qCos(0.96370823331 + 1052.2683831884 * t); result += 7.82e-09 * qCos(5.33878339919 + 13517.8701062334 * t); result += 7.3e-09 * qCos(1.70106160291 + 17267.2682016912 * t); result += 7.49e-09 * qCos(2.59599901875 + 11609.8625440122 * t); result += 7.34e-09 * qCos(2.78417782952 + 640.8776073822 * t); result += 6.88e-09 * qCos(5.15048287468 + 16496.3613962024 * t); result += 7.7e-09 * qCos(1.62469589333 + 4701.1165017084 * t); result += 6.33e-09 * qCos(2.20587893893 + 25934.1243310894 * t); result += 7.6e-09 * qCos(4.21317219403 + 377.3736079158 * t); result += 5.84e-09 * qCos(2.13420121623 + 10557.5941608238 * t); result += 5.74e-09 * qCos(0.24250054587 + 9779.1086761254 * t); result += 5.73e-09 * qCos(3.16435264609 + 533.2140834436 * t); result += 6.85e-09 * qCos(3.19344289472 + 12146.6670561076 * t); result += 6.75e-09 * qCos(0.96179233959 + 10454.5013866052 * t); result += 6.48e-09 * qCos(1.46327342555 + 6268.8487559898 * t); result += 5.89e-09 * qCos(2.50543543638 + 3097.88382272579 * t); result += 5.51e-09 * qCos(5.28099026956 + 9388.0059094152 * t); result += 6.96e-09 * qCos(3.65342150016 + 4804.209275927 * t); result += 6.69e-09 * qCos(2.51030077026 + 2388.8940204492 * t); result += 5.5e-09 * qCos(0.06883864342 + 20199.094959633 * t); result += 6.29e-09 * qCos(4.13350995675 + 45892.730433157 * t); result += 6.78e-09 * qCos(6.09190163533 + 135.62532501 * t); result += 5.93e-09 * qCos(1.50136257618 + 226858.23855437 * t); result += 5.42e-09 * qCos(3.58573645173 + 6148.010769956 * t); result += 6.82e-09 * qCos(5.02203067788 + 17253.0411076896 * t); result += 5.65e-09 * qCos(4.2930923861 + 11933.3679606696 * t); result += 4.86e-09 * qCos(0.77746204893 + 27.4015560968 * t); result += 5.03e-09 * qCos(0.58963565969 + 15671.0817594066 * t); result += 6.16e-09 * qCos(4.06539884128 + 227.476132789 * t); result += 5.83e-09 * qCos(6.12695541996 + 18875.525869774 * t); result += 5.37e-09 * qCos(2.1505644098 + 21954.157609398 * t); result += 6.69e-09 * qCos(6.06986269566 + 47162.5163546352 * t); result += 4.75e-09 * qCos(0.4034384211 + 6915.8595893046 * t); result += 5.4e-09 * qCos(2.83444222174 + 5326.7866940208 * t); result += 5.3e-09 * qCos(5.26359885263 + 10988.808157535 * t); result += 5.82e-09 * qCos(3.24533095664 + 153.7788104848 * t); result += 6.41e-09 * qCos(3.24711791371 + 2107.0345075424 * t); result += 6.21e-09 * qCos(3.09698523779 + 33019.0211122046 * t); result += 4.66e-09 * qCos(3.14982372198 + 10440.2742926036 * t); result += 4.66e-09 * qCos(0.90708835657 + 5966.6839803348 * t); result += 5.28e-09 * qCos(0.8192645447 + 813.5502839598 * t); result += 6.03e-09 * qCos(3.81378921927 + 316428.228673915 * t); result += 5.59e-09 * qCos(1.81894804124 + 17996.0311682222 * t); result += 4.37e-09 * qCos(2.28625594435 + 6303.8512454838 * t); result += 5.18e-09 * qCos(4.86069178322 + 20597.2439630412 * t); result += 4.24e-09 * qCos(6.23520018693 + 6489.2613984286 * t); result += 5.18e-09 * qCos(6.17617826756 + 0.2438174835 * t); result += 4.04e-09 * qCos(5.72804304258 + 5642.1982426092 * t); result += 4.58e-09 * qCos(1.34117773915 + 6287.0080032545 * t); result += 5.48e-09 * qCos(5.6845445832 + 155427.542936241 * t); result += 5.47e-09 * qCos(1.03391472061 + 3646.3503773544 * t); result += 4.28e-09 * qCos(4.69800981138 + 846.0828347512 * t); result += 4.13e-09 * qCos(6.02520699406 + 6279.4854213396 * t); result += 5.34e-09 * qCos(3.03030638223 + 66567.4858652543 * t); result += 3.83e-09 * qCos(1.49056949125 + 19800.9459562248 * t); result += 4.1e-09 * qCos(5.28319622279 + 18451.078546566 * t); result += 3.52e-09 * qCos(4.68891600359 + 4907.3020501456 * t); result += 4.8e-09 * qCos(5.36572651091 + 348.924420448 * t); result += 3.44e-09 * qCos(5.89157452896 + 6546.1597733642 * t); result += 3.4e-09 * qCos(0.3755742644 + 13119.7211028252 * t); result += 4.34e-09 * qCos(4.98417785901 + 6702.5604938666 * t); result += 3.32e-09 * qCos(2.68902519126 + 29296.6153895786 * t); result += 4.48e-09 * qCos(2.16478480251 + 5905.7022420756 * t); result += 3.44e-09 * qCos(2.06546633735 + 49.7570254718 * t); result += 3.15e-09 * qCos(1.24023811803 + 4061.2192153944 * t); result += 3.24e-09 * qCos(2.30897526929 + 5017.508371365 * t); result += 4.13e-09 * qCos(0.17171692962 + 6286.6662786432 * t); result += 4.31e-09 * qCos(3.86601101393 + 12489.8856287072 * t); result += 3.49e-09 * qCos(4.55372342974 + 4933.2084403326 * t); result += 3.23e-09 * qCos(0.41971136084 + 10770.8932562618 * t); result += 3.41e-09 * qCos(2.68612860807 + 11.0457002639 * t); result += 3.16e-09 * qCos(3.52936906658 + 17782.7320727842 * t); result += 3.15e-09 * qCos(5.63357264999 + 568.8218740274 * t); result += 3.4e-09 * qCos(3.83571212349 + 10660.6869350424 * t); result += 2.97e-09 * qCos(0.62691416712 + 20995.3929664494 * t); result += 4.05e-09 * qCos(1.00085779471 + 16460.333529525 * t); result += 4.14e-09 * qCos(1.21998752076 + 51092.7260508548 * t); result += 3.36e-09 * qCos(4.71465945226 + 6179.9830757728 * t); result += 3.61e-09 * qCos(3.71227508354 + 28237.2334593894 * t); result += 3.85e-09 * qCos(6.21925225757 + 24356.7807886416 * t); result += 3.27e-09 * qCos(1.05606504715 + 11919.140866668 * t); result += 3.27e-09 * qCos(6.14222420989 + 6254.6266625236 * t); result += 2.68e-09 * qCos(2.47224339737 + 664.75604513 * t); result += 2.69e-09 * qCos(1.86207884109 + 23141.5583829246 * t); result += 3.45e-09 * qCos(0.93461290184 + 6058.7310542895 * t); result += 2.96e-09 * qCos(4.5168755718 + 6418.1409300268 * t); result += 3.53e-09 * qCos(4.50033653082 + 36949.2308084242 * t); result += 2.6e-09 * qCos(4.04963546305 + 6525.8044539654 * t); result += 2.98e-09 * qCos(2.20046722622 + 156137.475984799 * t); result += 2.53e-09 * qCos(3.49900838384 + 29864.334027309 * t); result += 2.54e-09 * qCos(2.44901693835 + 5331.3574437408 * t); result += 2.96e-09 * qCos(0.84347588787 + 5729.506447149 * t); result += 2.98e-09 * qCos(1.29194706125 + 22805.7355659936 * t); result += 2.41e-09 * qCos(2.00721280805 + 16737.5772365966 * t); result += 3.11e-09 * qCos(1.23668016334 + 6281.5913772831 * t); result += 2.4e-09 * qCos(2.51650377121 + 6245.0481773556 * t); result += 3.32e-09 * qCos(3.55576945724 + 7668.6374249425 * t); result += 2.64e-09 * qCos(4.44052061202 + 12964.300703391 * t); result += 2.57e-09 * qCos(1.79654471948 + 11080.1715789176 * t); result += 2.6e-09 * qCos(3.3307759842 + 5888.4499649322 * t); result += 2.85e-09 * qCos(0.3088636143 + 11823.1616394502 * t); result += 2.9e-09 * qCos(5.70141882483 + 77.673770428 * t); result += 2.55e-09 * qCos(4.0093966444 + 5881.4037282342 * t); result += 2.53e-09 * qCos(4.73318493678 + 16723.350142595 * t); result += 2.28e-09 * qCos(0.95333661324 + 5540.0857894588 * t); result += 3.19e-09 * qCos(1.38633229189 + 163096.180361183 * t); result += 2.24e-09 * qCos(1.65156322696 + 10027.9031957292 * t); result += 2.26e-09 * qCos(0.34106460604 + 17796.9591667858 * t); result += 2.36e-09 * qCos(4.19817431922 + 19.66976089979 * t); result += 2.8e-09 * qCos(4.1408026897 + 12539.853380183 * t); result += 2.75e-09 * qCos(5.50306930248 + 32.5325507914 * t); result += 2.23e-09 * qCos(5.23334210294 + 56.8983749356 * t); result += 2.17e-09 * qCos(6.08587881787 + 6805.6532680852 * t); result += 2.8e-09 * qCos(4.52472044653 + 6016.4688082696 * t); result += 2.27e-09 * qCos(5.06509843737 + 6277.552925684 * t); result += 2.26e-09 * qCos(5.17755154305 + 11720.0688652316 * t); result += 2.45e-09 * qCos(3.96486270306 + 22.7752014508 * t); result += 2.2e-09 * qCos(4.7207808197 + 6.62855890001 * t); result += 2.07e-09 * qCos(5.71701403951 + 41.5507909848 * t); result += 2.04e-09 * qCos(3.9122741125 + 2699.7348193176 * t); result += 2.09e-09 * qCos(0.86881969011 + 6321.1035226272 * t); result += 2e-09 * qCos(2.11984445273 + 4274.5183108324 * t); result += 2e-09 * qCos(5.39839888163 + 6019.9919266186 * t); result += 2.09e-09 * qCos(5.67606291663 + 11293.4706743556 * t); result += 2.52e-09 * qCos(1.64965729351 + 9380.9596727172 * t); result += 2.75e-09 * qCos(5.04826903506 + 73.297125859 * t); result += 2.08e-09 * qCos(1.88207277133 + 11300.5842213564 * t); result += 2.72e-09 * qCos(0.74640926842 + 1975.492545856 * t); result += 1.99e-09 * qCos(3.30836672397 + 22743.4093795164 * t); result += 2.69e-09 * qCos(4.48560812155 + 64471.9912417449 * t); result += 1.92e-09 * qCos(2.17464236325 + 5863.5912061162 * t); result += 2.28e-09 * qCos(5.85373115869 + 128.0188433374 * t); result += 2.61e-09 * qCos(2.64321183295 + 55022.9357470744 * t); result += 2.2e-09 * qCos(5.75012110079 + 29.429508536 * t); result += 1.87e-09 * qCos(4.03230554718 + 467.9649903544 * t); result += 2e-09 * qCos(5.60556112058 + 1066.49547719 * t); result += 2.31e-09 * qCos(1.09802712785 + 12341.8069042809 * t); result += 1.99e-09 * qCos(0.295006252 + 149.5631971346 * t); result += 2.49e-09 * qCos(5.10473210814 + 7875.6718636242 * t); result += 2.08e-09 * qCos(0.93013835019 + 14919.0178537546 * t); result += 1.79e-09 * qCos(0.87104393079 + 12721.572099417 * t); result += 2.03e-09 * qCos(1.56920753653 + 28286.9904848612 * t); result += 1.79e-09 * qCos(2.47036386443 + 16062.1845261168 * t); result += 1.98e-09 * qCos(3.54061588502 + 30.914125635 * t); result += 1.71e-09 * qCos(3.45356518113 + 5327.4761083828 * t); result += 1.83e-09 * qCos(0.72325421604 + 6272.0301497275 * t); result += 2.16e-09 * qCos(2.97174580686 + 19402.7969528166 * t); result += 1.68e-09 * qCos(2.51550550242 + 23937.856389741 * t); result += 1.95e-09 * qCos(0.09045393425 + 156.4007205024 * t); result += 1.79e-09 * qCos(4.4947179809 + 31415.379249957 * t); result += 2.16e-09 * qCos(0.42177594328 + 23539.7073863328 * t); result += 1.89e-09 * qCos(0.37542530191 + 9814.6041002912 * t); result += 2.18e-09 * qCos(2.36835880025 + 16627.3709153772 * t); result += 1.66e-09 * qCos(4.23182968446 + 16840.6700108152 * t); result += 2e-09 * qCos(2.02153258098 + 16097.6799502826 * t); result += 1.69e-09 * qCos(0.91318727 + 95.9792272178 * t); result += 2.11e-09 * qCos(5.73370637657 + 151.8972810852 * t); result += 2.04e-09 * qCos(0.42643085174 + 515.463871093 * t); result += 2.12e-09 * qCos(3.00233538977 + 12043.574281889 * t); result += 1.92e-09 * qCos(5.46153589821 + 6379.0550772092 * t); result += 1.65e-09 * qCos(1.38698167064 + 4171.4255366138 * t); result += 1.6e-09 * qCos(6.23798383332 + 202.2533951741 * t); result += 2.15e-09 * qCos(0.20889073407 + 5621.8429232104 * t); result += 1.81e-09 * qCos(4.12439203622 + 13341.6743113068 * t); result += 1.53e-09 * qCos(1.24460848836 + 29826.3063546732 * t); result += 1.5e-09 * qCos(3.12999753018 + 799.8211251654 * t); result += 1.75e-09 * qCos(4.55671604437 + 239424.390254353 * t); result += 1.92e-09 * qCos(1.33928820063 + 394.6258850592 * t); result += 1.49e-09 * qCos(2.65697593276 + 21.335640467 * t); result += 1.46e-09 * qCos(5.58021191726 + 412.3710968744 * t); result += 1.56e-09 * qCos(3.75650175503 + 12323.4230960088 * t); result += 1.43e-09 * qCos(3.75708566606 + 58864.5439181463 * t); result += 1.43e-09 * qCos(3.28248547724 + 29.8214381488 * t); result += 1.44e-09 * qCos(1.07862546598 + 1265.5674786264 * t); result += 1.48e-09 * qCos(0.23389236655 + 10021.8372800994 * t); result += 1.93e-09 * qCos(5.92751083086 + 40879.4405046438 * t); result += 1.4e-09 * qCos(4.97612440269 + 158.9435177832 * t); result += 1.48e-09 * qCos(2.61640453469 + 17157.0618804718 * t); result += 1.41e-09 * qCos(3.66871308723 + 26084.0218062162 * t); result += 1.47e-09 * qCos(5.09968173403 + 661.232926781 * t); result += 1.46e-09 * qCos(4.96885605695 + 57375.8019008462 * t); result += 1.42e-09 * qCos(0.78678347839 + 12779.4507954208 * t); result += 1.34e-09 * qCos(4.79432636012 + 111.1866422876 * t); result += 1.4e-09 * qCos(1.27748013377 + 107.6635239386 * t); result += 1.69e-09 * qCos(2.74893543762 + 26735.9452622132 * t); result += 1.65e-09 * qCos(3.95288000638 + 6357.8574485587 * t); result += 1.83e-09 * qCos(5.43418358741 + 369.6998159404 * t); result += 1.34e-09 * qCos(3.09132862833 + 17.812522118 * t); result += 1.32e-09 * qCos(3.05633896779 + 22490.9621214934 * t); result += 1.34e-09 * qCos(4.09472795832 + 6599.467719648 * t); result += 1.81e-09 * qCos(4.22950689891 + 966.9708774356 * t); result += 1.52e-09 * qCos(5.28885894415 + 12669.2444742014 * t); result += 1.5e-09 * qCos(5.86819430908 + 97238.6275444875 * t); result += 1.42e-09 * qCos(5.87266532526 + 22476.7350274918 * t); result += 1.45e-09 * qCos(5.07330784304 + 87.30820453981 * t); result += 1.33e-09 * qCos(5.65471067133 + 31.9723058168 * t); result += 1.24e-09 * qCos(2.83326217072 + 12566.2190102856 * t); result += 1.35e-09 * qCos(3.12861731644 + 32217.2001810808 * t); result += 1.37e-09 * qCos(0.86487461904 + 9924.8104215106 * t); result += 1.72e-09 * qCos(1.98369595114 + 174242.46596405 * t); result += 1.7e-09 * qCos(4.41115280254 + 327574.514276781 * t); result += 1.51e-09 * qCos(0.46542099527 + 39609.6545831656 * t); result += 1.48e-09 * qCos(2.13439571118 + 491.6632924588 * t); result += 1.53e-09 * qCos(3.78801830344 + 17363.247428909 * t); result += 1.65e-09 * qCos(5.31654110459 + 16943.7627850338 * t); result += 1.65e-09 * qCos(4.06747587817 + 58953.145443294 * t); result += 1.18e-09 * qCos(0.63846333239 + 6.0659156298 * t); result += 1.59e-09 * qCos(0.86086959274 + 221995.028801495 * t); result += 1.19e-09 * qCos(5.96432932413 + 1385.8952763362 * t); result += 1.14e-09 * qCos(5.16516114595 + 25685.872802808 * t); result += 1.12e-09 * qCos(3.39403722178 + 21393.5419698576 * t); result += 1.12e-09 * qCos(4.92889233335 + 56.8032621698 * t); result += 1.19e-09 * qCos(2.40637635942 + 18635.9284545362 * t); result += 1.15e-09 * qCos(0.23374479051 + 418.9243989006 * t); result += 1.22e-09 * qCos(0.93575234049 + 24492.4061136516 * t); result += 1.15e-09 * qCos(4.58880032176 + 26709.6469424134 * t); result += 1.3e-09 * qCos(4.85539251 + 22345.2603761082 * t); result += 1.4e-09 * qCos(1.09413073202 + 44809.6502008634 * t); result += 1.12e-09 * qCos(6.05401806281 + 433.7117378768 * t); result += 1.04e-09 * qCos(1.54931540602 + 127.9515330346 * t); result += 1.05e-09 * qCos(4.82620858888 + 33794.5437235286 * t); result += 1.02e-09 * qCos(4.12448497391 + 15664.0355227086 * t); result += 1.07e-09 * qCos(4.67919356465 + 77690.7595057385 * t); result += 1.18e-09 * qCos(4.5232017012 + 19004.6479494084 * t); result += 1.07e-09 * qCos(5.71774478555 + 77736.7834305025 * t); result += 1.43e-09 * qCos(1.81201813018 + 4214.0690150848 * t); result += 1.25e-09 * qCos(1.14419195615 + 625.6701923124 * t); result += 1.24e-09 * qCos(3.27736514057 + 12566.08438968 * t); result += 1.1e-09 * qCos(1.08682570828 + 2787.0430238574 * t); result += 1.05e-09 * qCos(1.78318141871 + 18139.2945014159 * t); result += 1.02e-09 * qCos(4.75119578149 + 12242.6462833254 * t); result += 1.37e-09 * qCos(1.43510636754 + 86464.6133168312 * t); result += 1.01e-09 * qCos(4.91289409429 + 401.6721217572 * t); result += 1.29e-09 * qCos(1.23567904485 + 12029.3471878874 * t); result += 1.38e-09 * qCos(2.45654707999 + 7576.560073574 * t); result += 1.03e-09 * qCos(0.40004073416 + 90279.9231681033 * t); result += 1.08e-09 * qCos(0.9898977494 + 5636.0650166766 * t); result += 1.17e-09 * qCos(5.17362872063 + 34520.3093093808 * t); result += 1e-09 * qCos(3.95534628189 + 5547.1993364596 * t); result += 9.8e-10 * qCos(1.28118280598 + 21548.9623692918 * t); result += 9.7e-10 * qCos(3.34717130592 + 16310.9790457206 * t); result += 9.8e-10 * qCos(4.37041908717 + 34513.2630726828 * t); result += 1.25e-09 * qCos(2.7216443296 + 24065.8079227756 * t); result += 1.02e-09 * qCos(0.66938025772 + 10239.5838660108 * t); result += 1.19e-09 * qCos(1.21689479331 + 1478.8665740644 * t); result += 9.4e-10 * qCos(1.99595224256 + 13362.4497067992 * t); result += 9.4e-10 * qCos(4.30965982872 + 26880.3198130326 * t); result += 9.5e-10 * qCos(2.89807657534 + 34911.412076091 * t); result += 1.06e-09 * qCos(1.0015665359 + 16522.6597160022 * t); result += 9.7e-10 * qCos(0.89642320201 + 71980.6335747312 * t); result += 1.16e-09 * qCos(4.19967201116 + 206.7007372966 * t); result += 9.9e-10 * qCos(1.37437847718 + 1039.0266107904 * t); result += 1.26e-09 * qCos(3.21642544972 + 305281.943071049 * t); result += 9.4e-10 * qCos(0.6899787606 + 7834.1210726394 * t); result += 9.4e-10 * qCos(5.58132218606 + 3104.9300594238 * t); result += 9.5e-10 * qCos(3.0382374111 + 8982.810669309 * t); result += 1.08e-09 * qCos(0.52696637156 + 276.7457718644 * t); result += 1.24e-09 * qCos(3.43899862683 + 172146.97134054 * t); result += 1.02e-09 * qCos(1.04031728553 + 95143.1329209781 * t); result += 1.04e-09 * qCos(3.39218586218 + 290.972865866 * t); result += 1.1e-09 * qCos(3.68205877433 + 22380.755800274 * t); result += 1.17e-09 * qCos(0.78475956902 + 83286.9142695536 * t); result += 8.3e-10 * qCos(0.18241793425 + 15141.390794312 * t); result += 8.9e-10 * qCos(4.45371820659 + 792.7748884674 * t); result += 8.2e-10 * qCos(4.80703651241 + 6819.8803620868 * t); result += 8.7e-10 * qCos(3.43122851097 + 27707.5424942948 * t); result += 1.01e-09 * qCos(5.32081603011 + 2301.58581590939 * t); result += 8.2e-10 * qCos(0.87060089842 + 10241.2022911672 * t); result += 8.6e-10 * qCos(4.61919461931 + 36147.4098773004 * t); result += 9.5e-10 * qCos(2.87032884659 + 23020.653086588 * t); result += 8.8e-10 * qCos(3.2113316569 + 33326.5787331742 * t); result += 8e-10 * qCos(1.84900424847 + 21424.4666443034 * t); result += 1.01e-09 * qCos(4.18796434479 + 30666.1549584328 * t); result += 1.07e-09 * qCos(5.77864921649 + 34115.1140692746 * t); result += 1.04e-09 * qCos(1.08739495962 + 6288.5987742988 * t); result += 1.1e-09 * qCos(3.32898859416 + 72140.6286666874 * t); result += 8.7e-10 * qCos(4.40657711727 + 142.1786270362 * t); result += 1.09e-09 * qCos(1.94546030825 + 24279.1070182136 * t); result += 8.7e-10 * qCos(4.32472045435 + 742.9900605326 * t); result += 1.07e-09 * qCos(4.91580912547 + 277.0349937414 * t); result += 8.8e-10 * qCos(2.10180220766 + 26482.1708096244 * t); result += 8.6e-10 * qCos(4.01887374432 + 12491.3701014155 * t); result += 1.06e-09 * qCos(5.49092372854 + 62883.3551395136 * t); result += 8e-10 * qCos(6.19781316983 + 6709.6740408674 * t); result += 8.8e-10 * qCos(2.09872810657 + 238004.524157236 * t); result += 8.3e-10 * qCos(4.90662164029 + 51.28033786241 * t); result += 9.5e-10 * qCos(4.13387406591 + 18216.443810661 * t); result += 7.8e-10 * qCos(6.0694939168 + 148434.534037691 * t); result += 7.9e-10 * qCos(3.03048221644 + 838.9692877504 * t); result += 7.4e-10 * qCos(5.49813051211 + 29026.4852295078 * t); result += 7.3e-10 * qCos(3.05008665738 + 567.7186377304 * t); result += 8.4e-10 * qCos(0.46604373274 + 45.1412196366 * t); result += 9.3e-10 * qCos(2.52267536308 + 48739.859897083 * t); result += 7.6e-10 * qCos(1.76418124905 + 41654.9631159678 * t); result += 6.7e-10 * qCos(5.77851227793 + 6311.5250374592 * t); result += 6.2e-10 * qCos(3.32967880172 + 15508.6151232744 * t); result += 7.9e-10 * qCos(5.59773841328 + 71960.3865832237 * t); result += 5.7e-10 * qCos(3.90629505268 + 5999.2165311262 * t); result += 6.1e-10 * qCos(0.05695043232 + 7856.89627409019 * t); result += 6.1e-10 * qCos(5.63297958433 + 7863.9425107882 * t); result += 6.5e-10 * qCos(3.72178394016 + 12573.2652469836 * t); result += 5.7e-10 * qCos(4.18217219541 + 26087.9031415742 * t); result += 6.6e-10 * qCos(3.92262333487 + 69853.3520756813 * t); result += 5.3e-10 * qCos(5.51119362045 + 77710.2483497715 * t); result += 5.3e-10 * qCos(4.88573986961 + 77717.2945864695 * t); result += 6.2e-10 * qCos(2.88876342225 + 9411.4646150872 * t); result += 5.1e-10 * qCos(1.12657183874 + 82576.9812209953 * t); result += 4.5e-10 * qCos(2.95671076719 + 24602.612434871 * t); result += 4e-10 * qCos(5.55145719241 + 12565.1713789146 * t); result += 3.9e-10 * qCos(1.20838190039 + 18842.1140029734 * t); result += 4.5e-10 * qCos(3.18590558749 + 45585.1728121874 * t); result += 4.9e-10 * qCos(2.44790934886 + 13613.804277336 * t); return result; } double GetEarthL1(double t) { double result = 0.0; result += 6283.31966747491; result += 0.00206058863 * qCos(2.67823455584 + 6283.0758499914 * t); result += 4.30343e-05 * qCos(2.63512650414 + 12566.1516999828 * t); result += 4.25264e-06 * qCos(1.59046980729 + 3.523118349 * t); result += 1.08977e-06 * qCos(2.96618001993 + 1577.3435424478 * t); result += 9.3478e-07 * qCos(2.59212835365 + 18849.2275499742 * t); result += 1.19261e-06 * qCos(5.79557487799 + 26.2983197998 * t); result += 7.2122e-07 * qCos(1.13846158196 + 529.6909650946 * t); result += 6.7768e-07 * qCos(1.87472304791 + 398.1490034082 * t); result += 6.7327e-07 * qCos(4.40918235168 + 5507.5532386674 * t); result += 5.9027e-07 * qCos(2.8879703846 + 5223.6939198022 * t); result += 5.5976e-07 * qCos(2.17471680261 + 155.4203994342 * t); result += 4.5407e-07 * qCos(0.39803079805 + 796.2980068164 * t); result += 3.6369e-07 * qCos(0.46624739835 + 775.522611324 * t); result += 2.8958e-07 * qCos(2.64707383882 + 7.1135470008 * t); result += 1.9097e-07 * qCos(1.84628332577 + 5486.777843175 * t); result += 2.0844e-07 * qCos(5.34138275149 + 0.9803210682 * t); result += 1.8508e-07 * qCos(4.96855124577 + 213.299095438 * t); result += 1.6233e-07 * qCos(0.03216483047 + 2544.3144198834 * t); result += 1.7293e-07 * qCos(2.99116864949 + 6275.9623029906 * t); result += 1.5832e-07 * qCos(1.43049285325 + 2146.1654164752 * t); result += 1.4615e-07 * qCos(1.20532366323 + 10977.078804699 * t); result += 1.1877e-07 * qCos(3.25804815607 + 5088.6288397668 * t); result += 1.1514e-07 * qCos(2.07502418155 + 4694.0029547076 * t); result += 9.721e-08 * qCos(4.23925472239 + 1349.8674096588 * t); result += 9.969e-08 * qCos(1.30262991097 + 6286.5989683404 * t); result += 9.452e-08 * qCos(2.69957062864 + 242.728603974 * t); result += 1.2461e-07 * qCos(2.83432285512 + 1748.016413067 * t); result += 1.1808e-07 * qCos(5.2737979048 + 1194.4470102246 * t); result += 8.577e-08 * qCos(5.64475868067 + 951.7184062506 * t); result += 1.0641e-07 * qCos(0.76614199202 + 553.5694028424 * t); result += 7.576e-08 * qCos(5.30062664886 + 2352.8661537718 * t); result += 5.834e-08 * qCos(1.76649917904 + 1059.3819301892 * t); result += 6.385e-08 * qCos(2.65033984967 + 9437.762934887 * t); result += 5.223e-08 * qCos(5.66135767624 + 71430.6956181291 * t); result += 5.305e-08 * qCos(0.90857521574 + 3154.6870848956 * t); result += 6.101e-08 * qCos(4.66632584188 + 4690.4798363586 * t); result += 4.33e-08 * qCos(0.24102555403 + 6812.766815086 * t); result += 5.041e-08 * qCos(1.42490103709 + 6438.4962494256 * t); result += 4.259e-08 * qCos(0.77355900599 + 10447.3878396044 * t); result += 5.198e-08 * qCos(1.85353197345 + 801.8209311238 * t); result += 3.744e-08 * qCos(2.00119516488 + 8031.0922630584 * t); result += 3.558e-08 * qCos(2.42901552681 + 14143.4952424306 * t); result += 3.372e-08 * qCos(3.86210700128 + 1592.5960136328 * t); result += 3.374e-08 * qCos(0.88776219727 + 12036.4607348882 * t); result += 3.175e-08 * qCos(3.18785710594 + 4705.7323075436 * t); result += 3.221e-08 * qCos(0.61599835472 + 8429.2412664666 * t); result += 4.132e-08 * qCos(5.23992859705 + 7084.8967811152 * t); result += 2.97e-08 * qCos(6.07026318493 + 4292.3308329504 * t); result += 2.9e-08 * qCos(2.32464208411 + 20.3553193988 * t); result += 3.504e-08 * qCos(4.79975694359 + 6279.5527316424 * t); result += 2.95e-08 * qCos(1.43108874817 + 5746.271337896 * t); result += 2.697e-08 * qCos(4.80368225199 + 7234.794256242 * t); result += 2.531e-08 * qCos(6.22290682655 + 6836.6452528338 * t); result += 2.745e-08 * qCos(0.93466065396 + 5760.4984318976 * t); result += 3.25e-08 * qCos(3.39954640038 + 7632.9432596502 * t); result += 2.277e-08 * qCos(5.00277837672 + 17789.845619785 * t); result += 2.075e-08 * qCos(3.95534978634 + 10213.285546211 * t); result += 2.061e-08 * qCos(2.22411683077 + 5856.4776591154 * t); result += 2.252e-08 * qCos(5.67166499885 + 11499.6562227928 * t); result += 2.148e-08 * qCos(5.20184578235 + 11513.8833167944 * t); result += 1.886e-08 * qCos(0.53198320577 + 3340.6124266998 * t); result += 1.875e-08 * qCos(4.73511970207 + 83996.8473181119 * t); result += 2.06e-08 * qCos(2.54987293999 + 25132.3033999656 * t); result += 1.794e-08 * qCos(1.47435409831 + 4164.311989613 * t); result += 1.778e-08 * qCos(3.02473091781 + 5.5229243074 * t); result += 2.029e-08 * qCos(0.90960209983 + 6256.7775301916 * t); result += 2.075e-08 * qCos(2.26767270157 + 522.5774180938 * t); result += 1.772e-08 * qCos(3.02622802353 + 5753.3848848968 * t); result += 1.569e-08 * qCos(6.12410242782 + 5216.5803728014 * t); result += 1.59e-08 * qCos(4.63713748247 + 3.2863574178 * t); result += 1.542e-08 * qCos(4.20004448567 + 13367.9726311066 * t); result += 1.427e-08 * qCos(1.19088061711 + 3894.1818295422 * t); result += 1.375e-08 * qCos(3.09301252193 + 135.0650800354 * t); result += 1.359e-08 * qCos(4.24532506641 + 426.598190876 * t); result += 1.34e-08 * qCos(5.76511818622 + 6040.3472460174 * t); result += 1.284e-08 * qCos(3.08524663344 + 5643.1785636774 * t); result += 1.25e-08 * qCos(3.07748157144 + 11926.2544136688 * t); result += 1.551e-08 * qCos(3.07665451458 + 6681.2248533996 * t); result += 1.268e-08 * qCos(2.09196018331 + 6290.1893969922 * t); result += 1.144e-08 * qCos(3.24444699514 + 12168.0026965746 * t); result += 1.248e-08 * qCos(3.44504937285 + 536.8045120954 * t); result += 1.118e-08 * qCos(2.31829670425 + 16730.4636895958 * t); result += 1.105e-08 * qCos(5.31966001019 + 23.8784377478 * t); result += 1.051e-08 * qCos(3.75015946014 + 7860.4193924392 * t); result += 1.025e-08 * qCos(2.44688534235 + 1990.745017041 * t); result += 9.62e-09 * qCos(0.81771017882 + 3.881335358 * t); result += 9.1e-09 * qCos(0.41727865299 + 7079.3738568078 * t); result += 8.83e-09 * qCos(5.16833917651 + 11790.6290886588 * t); result += 9.57e-09 * qCos(4.07673573735 + 6127.6554505572 * t); result += 1.11e-08 * qCos(3.90096793825 + 11506.7697697936 * t); result += 8.02e-09 * qCos(3.88778875582 + 10973.55568635 * t); result += 7.8e-09 * qCos(2.39934293755 + 1589.0728952838 * t); result += 7.58e-09 * qCos(1.30034364248 + 103.0927742186 * t); result += 7.49e-09 * qCos(4.962758033 + 6496.3749454294 * t); result += 7.65e-09 * qCos(3.36312388424 + 36.0278666774 * t); result += 9.15e-09 * qCos(5.41543742089 + 206.1855484372 * t); result += 7.76e-09 * qCos(2.57589093871 + 11371.7046897582 * t); result += 7.72e-09 * qCos(3.98369209464 + 955.5997416086 * t); result += 7.49e-09 * qCos(5.17890001805 + 10969.9652576982 * t); result += 8.06e-09 * qCos(0.34218864254 + 9917.6968745098 * t); result += 7.28e-09 * qCos(5.20962563787 + 38.0276726358 * t); result += 6.85e-09 * qCos(2.77592961854 + 20.7753954924 * t); result += 6.36e-09 * qCos(4.28242193632 + 28.4491874678 * t); result += 6.08e-09 * qCos(5.63278508906 + 10984.1923516998 * t); result += 7.04e-09 * qCos(5.60738823665 + 3738.761430108 * t); result += 6.85e-09 * qCos(0.38876148682 + 15.252471185 * t); result += 6.01e-09 * qCos(0.73489602442 + 419.4846438752 * t); result += 7.16e-09 * qCos(2.65279791438 + 6309.3741697912 * t); result += 5.84e-09 * qCos(5.54502568227 + 17298.1823273262 * t); result += 6.5e-09 * qCos(1.13379656406 + 7058.5984613154 * t); result += 6.88e-09 * qCos(2.59683891779 + 3496.032826134 * t); result += 4.85e-09 * qCos(0.44467180946 + 12352.8526045448 * t); result += 5.28e-09 * qCos(2.74936967681 + 3930.2096962196 * t); result += 5.97e-09 * qCos(5.27668281777 + 10575.4066829418 * t); result += 5.83e-09 * qCos(3.1892906781 + 4732.0306273434 * t); result += 5.26e-09 * qCos(5.01697321546 + 5884.9268465832 * t); result += 5.4e-09 * qCos(1.29175137075 + 640.8776073822 * t); result += 4.73e-09 * qCos(5.4995330697 + 5230.807466803 * t); result += 4.06e-09 * qCos(5.21248452189 + 220.4126424388 * t); result += 3.95e-09 * qCos(1.87474483222 + 16200.7727245012 * t); result += 3.7e-09 * qCos(3.84921354713 + 18073.7049386502 * t); result += 3.67e-09 * qCos(0.88533542778 + 6283.14316029419 * t); result += 3.79e-09 * qCos(0.37983009325 + 10177.2576795336 * t); result += 3.56e-09 * qCos(3.84145204913 + 11712.9553182308 * t); result += 3.74e-09 * qCos(5.01577520608 + 7.046236698 * t); result += 3.81e-09 * qCos(4.30250406634 + 6062.6632075526 * t); result += 4.71e-09 * qCos(0.86381834647 + 6069.7767545534 * t); result += 3.67e-09 * qCos(1.32943839763 + 6283.0085396886 * t); result += 4.6e-09 * qCos(5.19667219575 + 6284.0561710596 * t); result += 3.33e-09 * qCos(5.54256205741 + 4686.8894077068 * t); result += 3.41e-09 * qCos(4.36522989934 + 7238.6755916 * t); result += 3.36e-09 * qCos(4.00205876835 + 3097.88382272579 * t); result += 3.59e-09 * qCos(6.22679790284 + 245.8316462294 * t); result += 3.07e-09 * qCos(2.35299010924 + 170.6728706192 * t); result += 3.43e-09 * qCos(3.77164927143 + 6076.8903015542 * t); result += 2.96e-09 * qCos(5.44152227481 + 17260.1546546904 * t); result += 3.28e-09 * qCos(0.13837875384 + 11015.1064773348 * t); result += 2.68e-09 * qCos(1.1390455063 + 12569.6748183318 * t); result += 2.63e-09 * qCos(0.00538633678 + 4136.9104335162 * t); result += 2.82e-09 * qCos(5.0439983748 + 7477.522860216 * t); result += 2.88e-09 * qCos(3.13401177517 + 12559.038152982 * t); result += 2.59e-09 * qCos(0.93882269387 + 5642.1982426092 * t); result += 2.92e-09 * qCos(1.98420020514 + 12132.439962106 * t); result += 2.47e-09 * qCos(3.84244798532 + 5429.8794682394 * t); result += 2.45e-09 * qCos(5.70467521726 + 65147.6197681377 * t); result += 2.41e-09 * qCos(0.99480969552 + 3634.6210245184 * t); result += 2.46e-09 * qCos(3.06168069935 + 110.2063212194 * t); result += 2.39e-09 * qCos(6.11855909114 + 11856.2186514245 * t); result += 2.63e-09 * qCos(0.66348415419 + 21228.3920235458 * t); result += 2.62e-09 * qCos(1.51070507866 + 12146.6670561076 * t); result += 2.3e-09 * qCos(1.75927314884 + 9779.1086761254 * t); result += 2.23e-09 * qCos(2.00967043606 + 6172.869528772 * t); result += 2.46e-09 * qCos(1.10411690865 + 6282.0955289232 * t); result += 2.21e-09 * qCos(3.03945240854 + 8635.9420037632 * t); result += 2.14e-09 * qCos(4.03840869663 + 14314.1681130498 * t); result += 2.36e-09 * qCos(5.4691507058 + 13916.0191096416 * t); result += 2.24e-09 * qCos(4.68408089456 + 24072.9214697764 * t); result += 2.12e-09 * qCos(2.13695625494 + 5849.3641121146 * t); result += 2.07e-09 * qCos(3.07724246401 + 11.729352836 * t); result += 2.07e-09 * qCos(6.10306282747 + 23543.2305046818 * t); result += 2.66e-09 * qCos(1.00709566823 + 2388.8940204492 * t); result += 2.17e-09 * qCos(6.27837036335 + 17267.2682016912 * t); result += 2.04e-09 * qCos(2.34615348695 + 266.6070417218 * t); result += 1.95e-09 * qCos(5.55015549753 + 6133.5126528568 * t); result += 1.88e-09 * qCos(2.52667166175 + 6525.8044539654 * t); result += 1.85e-09 * qCos(0.90960768344 + 18319.5365848796 * t); result += 1.77e-09 * qCos(1.73429218289 + 154717.609887683 * t); result += 1.87e-09 * qCos(4.76483647432 + 4535.0594369244 * t); result += 1.86e-09 * qCos(4.63080493407 + 10440.2742926036 * t); result += 2.15e-09 * qCos(2.8125545456 + 7342.4577801806 * t); result += 1.72e-09 * qCos(1.45551888559 + 9225.539273283 * t); result += 1.62e-09 * qCos(3.30661909388 + 639.897286314 * t); result += 1.68e-09 * qCos(2.17671416605 + 27.4015560968 * t); result += 1.6e-09 * qCos(1.68164180475 + 15110.4661198662 * t); result += 1.58e-09 * qCos(0.13519771874 + 13095.8426650774 * t); result += 1.83e-09 * qCos(0.56281322071 + 13517.8701062334 * t); result += 1.79e-09 * qCos(3.58450811616 + 87.30820453981 * t); result += 1.52e-09 * qCos(2.84070476818 + 5650.2921106782 * t); result += 1.82e-09 * qCos(0.44065530624 + 17253.0411076896 * t); result += 1.6e-09 * qCos(5.95767264171 + 4701.1165017084 * t); result += 1.42e-09 * qCos(1.4629013752 + 11087.2851259184 * t); result += 1.42e-09 * qCos(2.04464036087 + 20426.571092422 * t); result += 1.31e-09 * qCos(5.40912137746 + 2699.7348193176 * t); result += 1.44e-09 * qCos(2.07312090485 + 25158.6017197654 * t); result += 1.47e-09 * qCos(6.15106982168 + 9623.6882766912 * t); result += 1.41e-09 * qCos(5.55739979498 + 10454.5013866052 * t); result += 1.35e-09 * qCos(0.06098110407 + 16723.350142595 * t); result += 1.24e-09 * qCos(5.81218025669 + 17256.6315363414 * t); result += 1.24e-09 * qCos(2.36293551623 + 4933.2084403326 * t); result += 1.26e-09 * qCos(3.47435905118 + 22483.8485744926 * t); result += 1.59e-09 * qCos(5.63954754618 + 5729.506447149 * t); result += 1.23e-09 * qCos(3.92815963256 + 17996.0311682222 * t); result += 1.48e-09 * qCos(3.02509280598 + 1551.045222648 * t); result += 1.2e-09 * qCos(5.91904349732 + 6206.8097787158 * t); result += 1.34e-09 * qCos(3.11122937825 + 21954.157609398 * t); result += 1.19e-09 * qCos(5.5214112345 + 709.9330485583 * t); result += 1.22e-09 * qCos(3.00813429479 + 19800.9459562248 * t); result += 1.27e-09 * qCos(1.37618620001 + 14945.3161735544 * t); result += 1.41e-09 * qCos(2.56889468729 + 1052.2683831884 * t); result += 1.23e-09 * qCos(2.83671175442 + 11919.140866668 * t); result += 1.18e-09 * qCos(0.81934438215 + 5331.3574437408 * t); result += 1.51e-09 * qCos(2.68731829165 + 11769.8536931664 * t); result += 1.19e-09 * qCos(5.08835797638 + 5481.2549188676 * t); result += 1.53e-09 * qCos(2.46021790779 + 11933.3679606696 * t); result += 1.08e-09 * qCos(1.04936452145 + 11403.676995575 * t); result += 1.28e-09 * qCos(0.99794735107 + 8827.3902698748 * t); result += 1.44e-09 * qCos(2.54869747042 + 227.476132789 * t); result += 1.5e-09 * qCos(4.50631437136 + 2379.1644735716 * t); result += 1.07e-09 * qCos(1.79272017026 + 13119.7211028252 * t); result += 1.07e-09 * qCos(4.43556814486 + 18422.6293590982 * t); result += 1.09e-09 * qCos(0.29269062317 + 16737.5772365966 * t); result += 1.41e-09 * qCos(3.18979826258 + 6262.300454499 * t); result += 1.22e-09 * qCos(4.23040027813 + 29.429508536 * t); result += 1.11e-09 * qCos(5.16954029551 + 17782.7320727842 * t); result += 1e-09 * qCos(3.52213872761 + 18052.9295431578 * t); result += 1.08e-09 * qCos(1.08514212991 + 16858.4825329332 * t); result += 1.06e-09 * qCos(1.9608524841 + 74.7815985673 * t); result += 1.1e-09 * qCos(2.30582372873 + 16460.333529525 * t); result += 9.7e-10 * qCos(3.5091894021 + 5333.9002410216 * t); result += 9.9e-10 * qCos(3.56417337974 + 735.8765135318 * t); result += 9.4e-10 * qCos(5.01857894228 + 3128.3887650958 * t); result += 9.7e-10 * qCos(1.65579893894 + 533.2140834436 * t); result += 9.2e-10 * qCos(0.89217162285 + 29296.6153895786 * t); result += 1.23e-09 * qCos(3.16062050433 + 9380.9596727172 * t); result += 1.02e-09 * qCos(1.20493500565 + 23020.653086588 * t); result += 8.8e-10 * qCos(2.21296088224 + 12721.572099417 * t); result += 8.9e-10 * qCos(1.5426472031 + 20199.094959633 * t); result += 1.13e-09 * qCos(4.8332070787 + 16496.3613962024 * t); result += 1.21e-09 * qCos(6.19860353182 + 9388.0059094152 * t); result += 8.9e-10 * qCos(4.08082274765 + 22805.7355659936 * t); result += 9.8e-10 * qCos(1.0918183283 + 12043.574281889 * t); result += 8.6e-10 * qCos(1.13655027605 + 143571.324284816 * t); result += 8.8e-10 * qCos(5.96980472191 + 107.6635239386 * t); result += 8.2e-10 * qCos(5.01340404594 + 22003.9146348698 * t); result += 9.4e-10 * qCos(1.69615700473 + 23006.4259925864 * t); result += 8.1e-10 * qCos(3.00657814365 + 2118.7638603784 * t); result += 9.8e-10 * qCos(1.39215287161 + 8662.240323563 * t); result += 7.7e-10 * qCos(3.3355519084 + 15720.8387848784 * t); result += 8.2e-10 * qCos(5.86880116464 + 2787.0430238574 * t); result += 7.6e-10 * qCos(5.67183650604 + 14.2270940016 * t); result += 8.1e-10 * qCos(6.16619455699 + 1039.0266107904 * t); result += 7.6e-10 * qCos(3.21449884756 + 111.1866422876 * t); result += 7.8e-10 * qCos(1.37531518377 + 21947.1113727 * t); result += 7.4e-10 * qCos(3.58814195051 + 11609.8625440122 * t); result += 7.7e-10 * qCos(4.84846488388 + 22743.4093795164 * t); result += 9e-10 * qCos(1.48869013606 + 15671.0817594066 * t); result += 8.2e-10 * qCos(3.48618399109 + 29088.811415985 * t); result += 6.9e-10 * qCos(3.55746476593 + 4590.910180489 * t); result += 6.9e-10 * qCos(1.93625656075 + 135.62532501 * t); result += 7e-10 * qCos(2.66548322237 + 18875.525869774 * t); result += 6.9e-10 * qCos(5.41478093731 + 26735.9452622132 * t); result += 7.9e-10 * qCos(5.15154513662 + 12323.4230960088 * t); result += 9.4e-10 * qCos(3.62899392448 + 77713.7714681205 * t); result += 7.8e-10 * qCos(4.17011182047 + 1066.49547719 * t); result += 7.1e-10 * qCos(3.89435637865 + 22779.4372461938 * t); result += 6.3e-10 * qCos(4.53968787714 + 8982.810669309 * t); result += 6.9e-10 * qCos(0.96028230548 + 14919.0178537546 * t); result += 7.6e-10 * qCos(3.29092216589 + 2942.4634232916 * t); result += 6.3e-10 * qCos(4.09167842893 + 16062.1845261168 * t); result += 6.5e-10 * qCos(3.34580407184 + 51.28033786241 * t); result += 6.5e-10 * qCos(5.75757544877 + 52670.0695933026 * t); result += 6.8e-10 * qCos(5.75884067555 + 21424.4666443034 * t); result += 5.7e-10 * qCos(5.4512239985 + 12592.4500197826 * t); result += 5.7e-10 * qCos(5.25043362558 + 20995.3929664494 * t); result += 7.3e-10 * qCos(0.53299090807 + 2301.58581590939 * t); result += 7e-10 * qCos(4.31243357502 + 19402.7969528166 * t); result += 6.7e-10 * qCos(2.53852336668 + 377.3736079158 * t); result += 5.6e-10 * qCos(3.20816844695 + 24889.5747959916 * t); result += 5.3e-10 * qCos(3.17816599142 + 18451.078546566 * t); result += 5.3e-10 * qCos(3.61529270216 + 77.673770428 * t); result += 5.3e-10 * qCos(0.45467549335 + 30666.1549584328 * t); result += 6.1e-10 * qCos(0.14807288453 + 23013.5395395872 * t); result += 5.1e-10 * qCos(3.32803972907 + 56.8983749356 * t); result += 5.2e-10 * qCos(3.41177624177 + 23141.5583829246 * t); result += 5.8e-10 * qCos(3.13638677202 + 309.2783226558 * t); result += 7e-10 * qCos(2.50592323465 + 31415.379249957 * t); result += 5.2e-10 * qCos(5.10673376738 + 17796.9591667858 * t); result += 6.7e-10 * qCos(6.27917920454 + 22345.2603761082 * t); result += 5e-10 * qCos(0.42577644151 + 25685.872802808 * t); result += 4.8e-10 * qCos(0.70204553333 + 1162.4747044078 * t); result += 6.6e-10 * qCos(3.64350022359 + 15265.8865193004 * t); result += 5e-10 * qCos(5.7438291744 + 19.66976089979 * t); result += 5e-10 * qCos(4.69825387775 + 28237.2334593894 * t); result += 4.7e-10 * qCos(5.74015846442 + 12139.5535091068 * t); result += 5.4e-10 * qCos(1.97301333704 + 23581.2581773176 * t); result += 4.9e-10 * qCos(4.98223579027 + 10021.8372800994 * t); result += 4.6e-10 * qCos(5.41431705539 + 33019.0211122046 * t); result += 5.1e-10 * qCos(1.23882053879 + 12539.853380183 * t); result += 4.6e-10 * qCos(2.41369976086 + 98068.5367163054 * t); result += 4.4e-10 * qCos(0.80750593746 + 167283.761587666 * t); result += 4.5e-10 * qCos(4.39613584445 + 433.7117378768 * t); result += 4.4e-10 * qCos(2.57358208785 + 12964.300703391 * t); result += 4.6e-10 * qCos(0.26142733448 + 11.0457002639 * t); result += 4.5e-10 * qCos(2.46230645202 + 51868.2486621788 * t); result += 4.8e-10 * qCos(0.89551707131 + 56600.2792895222 * t); result += 5.7e-10 * qCos(1.8641670701 + 25287.7237993998 * t); result += 4.2e-10 * qCos(5.26377513431 + 26084.0218062162 * t); result += 4.9e-10 * qCos(3.17757670611 + 6303.8512454838 * t); result += 5.2e-10 * qCos(3.65266055509 + 7872.1487452752 * t); result += 4e-10 * qCos(1.81891629936 + 34596.3646546524 * t); result += 4.3e-10 * qCos(1.94164978061 + 1903.4368125012 * t); result += 4.1e-10 * qCos(0.74461854136 + 23937.856389741 * t); result += 4.8e-10 * qCos(6.26034008181 + 28286.9904848612 * t); result += 4.5e-10 * qCos(5.4557501753 + 60530.4889857418 * t); result += 4e-10 * qCos(2.92105728682 + 21548.9623692918 * t); result += 4e-10 * qCos(0.04502010161 + 38526.574350872 * t); result += 5.3e-10 * qCos(3.64791042082 + 11925.2740926006 * t); result += 4.1e-10 * qCos(5.04048954693 + 27832.0382192832 * t); result += 4.2e-10 * qCos(5.19292937193 + 19004.6479494084 * t); result += 4e-10 * qCos(2.57120233428 + 24356.7807886416 * t); result += 3.8e-10 * qCos(3.49190341464 + 226858.23855437 * t); result += 3.9e-10 * qCos(4.61184303844 + 95.9792272178 * t); result += 4.3e-10 * qCos(2.20648228147 + 13521.7514415914 * t); result += 4e-10 * qCos(5.83461945819 + 16193.6591775004 * t); result += 4.5e-10 * qCos(3.73714372195 + 7875.6718636242 * t); result += 4.3e-10 * qCos(1.14078465002 + 49.7570254718 * t); result += 3.7e-10 * qCos(1.29390383811 + 310.8407988684 * t); result += 3.8e-10 * qCos(0.9597092595 + 664.75604513 * t); result += 3.7e-10 * qCos(4.27532649462 + 6709.6740408674 * t); result += 3.8e-10 * qCos(2.20108541046 + 28628.3362260996 * t); result += 3.9e-10 * qCos(0.85957361635 + 16522.6597160022 * t); result += 4e-10 * qCos(4.35214003837 + 48739.859897083 * t); result += 3.6e-10 * qCos(1.68167662194 + 10344.2950653858 * t); result += 4e-10 * qCos(5.13217319067 + 15664.0355227086 * t); result += 3.6e-10 * qCos(3.72187132496 + 30774.5016425748 * t); result += 3.6e-10 * qCos(3.32158458257 + 16207.886271502 * t); result += 4.5e-10 * qCos(3.94202418608 + 10988.808157535 * t); result += 3.9e-10 * qCos(1.51948786199 + 12029.3471878874 * t); result += 2.6e-10 * qCos(3.8768588318 + 6262.7205305926 * t); result += 2.4e-10 * qCos(4.91804163466 + 19651.048481098 * t); result += 2.3e-10 * qCos(0.29300197709 + 13362.4497067992 * t); result += 2.1e-10 * qCos(3.18605672363 + 6277.552925684 * t); result += 2.1e-10 * qCos(6.07546891132 + 18139.2945014159 * t); result += 2.2e-10 * qCos(2.31199937177 + 6303.4311693902 * t); result += 2.1e-10 * qCos(3.58418394393 + 18209.3302636602 * t); result += 2.6e-10 * qCos(2.068012969 + 12573.2652469836 * t); result += 2.1e-10 * qCos(1.56857722317 + 13341.6743113068 * t); result += 2.4e-10 * qCos(5.72605158675 + 29864.334027309 * t); result += 2.4e-10 * qCos(1.40237993205 + 14712.317116458 * t); result += 2.5e-10 * qCos(5.71466092822 + 25934.1243310894 * t); return result; } double GetEarthL2(double t) { double result = 0.0; result += 0.0005291887; result += 8.719837e-05 * qCos(1.07209665242 + 6283.0758499914 * t); result += 3.09125e-06 * qCos(0.86728818832 + 12566.1516999828 * t); result += 2.7339e-07 * qCos(0.05297871691 + 3.523118349 * t); result += 1.6334e-07 * qCos(5.18826691036 + 26.2983197998 * t); result += 1.5752e-07 * qCos(3.6845788943 + 155.4203994342 * t); result += 9.541e-08 * qCos(0.75742297675 + 18849.2275499742 * t); result += 8.937e-08 * qCos(2.05705419118 + 77713.7714681205 * t); result += 6.952e-08 * qCos(0.8267330541 + 775.522611324 * t); result += 5.064e-08 * qCos(4.66284525271 + 1577.3435424478 * t); result += 4.061e-08 * qCos(1.03057162962 + 7.1135470008 * t); result += 3.463e-08 * qCos(5.14074632811 + 796.2980068164 * t); result += 3.169e-08 * qCos(6.05291851171 + 5507.5532386674 * t); result += 3.02e-08 * qCos(1.19246506441 + 242.728603974 * t); result += 2.886e-08 * qCos(6.11652627155 + 529.6909650946 * t); result += 3.81e-08 * qCos(3.4405080349 + 5573.1428014331 * t); result += 2.714e-08 * qCos(0.30637881025 + 398.1490034082 * t); result += 2.371e-08 * qCos(4.38118838167 + 5223.6939198022 * t); result += 2.538e-08 * qCos(2.27992810679 + 553.5694028424 * t); result += 2.079e-08 * qCos(3.75435330484 + 0.9803210682 * t); result += 1.675e-08 * qCos(0.90216407959 + 951.7184062506 * t); result += 1.534e-08 * qCos(5.75900462759 + 1349.8674096588 * t); result += 1.224e-08 * qCos(2.97328088405 + 2146.1654164752 * t); result += 1.449e-08 * qCos(4.3641591397 + 1748.016413067 * t); result += 1.341e-08 * qCos(3.72061130861 + 1194.4470102246 * t); result += 1.254e-08 * qCos(2.94846826628 + 6438.4962494256 * t); result += 9.99e-09 * qCos(5.98640014468 + 6286.5989683404 * t); result += 9.17e-09 * qCos(4.79788687522 + 5088.6288397668 * t); result += 8.28e-09 * qCos(3.31321076572 + 213.299095438 * t); result += 1.103e-08 * qCos(1.27104454479 + 161000.685737674 * t); result += 7.62e-09 * qCos(3.41582762988 + 5486.777843175 * t); result += 1.044e-08 * qCos(0.60409577691 + 3154.6870848956 * t); result += 8.87e-09 * qCos(5.23465144638 + 7084.8967811152 * t); result += 6.45e-09 * qCos(1.60096192515 + 2544.3144198834 * t); result += 6.81e-09 * qCos(3.43155669169 + 4694.0029547076 * t); result += 6.05e-09 * qCos(2.47806340546 + 10977.078804699 * t); result += 7.06e-09 * qCos(6.19393222575 + 4690.4798363586 * t); result += 6.43e-09 * qCos(1.98042503148 + 801.8209311238 * t); result += 5.02e-09 * qCos(1.44394375363 + 6836.6452528338 * t); result += 4.9e-09 * qCos(2.34129524194 + 1592.5960136328 * t); result += 4.58e-09 * qCos(1.30876448575 + 4292.3308329504 * t); result += 4.31e-09 * qCos(0.03526421494 + 7234.794256242 * t); result += 3.79e-09 * qCos(3.17030522615 + 6309.3741697912 * t); result += 3.48e-09 * qCos(0.99049550009 + 6040.3472460174 * t); result += 3.86e-09 * qCos(1.57019797263 + 71430.6956181291 * t); result += 3.47e-09 * qCos(0.67013291338 + 1059.3819301892 * t); result += 4.58e-09 * qCos(3.81499443681 + 149854.400134808 * t); result += 3.02e-09 * qCos(1.91760044838 + 10447.3878396044 * t); result += 3.07e-09 * qCos(3.55343347416 + 8031.0922630584 * t); result += 3.95e-09 * qCos(4.93701776616 + 7632.9432596502 * t); result += 3.14e-09 * qCos(3.18093696547 + 2352.8661537718 * t); result += 2.82e-09 * qCos(4.41936437052 + 9437.762934887 * t); result += 2.76e-09 * qCos(2.71314254553 + 3894.1818295422 * t); result += 2.98e-09 * qCos(2.5203747421 + 6127.6554505572 * t); result += 2.3e-09 * qCos(1.37790215549 + 4705.7323075436 * t); result += 2.52e-09 * qCos(0.55330133471 + 6279.5527316424 * t); result += 2.55e-09 * qCos(5.26570187369 + 6812.766815086 * t); result += 2.75e-09 * qCos(0.67264264272 + 25132.3033999656 * t); result += 1.78e-09 * qCos(0.92820785174 + 1990.745017041 * t); result += 2.21e-09 * qCos(0.63897368842 + 6256.7775301916 * t); result += 1.55e-09 * qCos(0.77319790838 + 14143.4952424306 * t); result += 1.5e-09 * qCos(2.40470465561 + 426.598190876 * t); result += 1.96e-09 * qCos(6.06877865012 + 640.8776073822 * t); result += 1.37e-09 * qCos(2.21679460145 + 8429.2412664666 * t); result += 1.27e-09 * qCos(3.26094223174 + 17789.845619785 * t); result += 1.28e-09 * qCos(5.47237279946 + 12036.4607348882 * t); result += 1.22e-09 * qCos(2.16291082757 + 10213.285546211 * t); result += 1.18e-09 * qCos(0.45789822268 + 7058.5984613154 * t); result += 1.41e-09 * qCos(2.34932647403 + 11506.7697697936 * t); result += 1e-09 * qCos(0.85621569847 + 6290.1893969922 * t); result += 9.2e-10 * qCos(5.10587476002 + 7079.3738568078 * t); result += 1.26e-09 * qCos(2.65428307012 + 88860.0570709867 * t); result += 1.06e-09 * qCos(5.85646710022 + 7860.4193924392 * t); result += 8.4e-10 * qCos(3.57457554262 + 16730.4636895958 * t); result += 8.9e-10 * qCos(4.21433259618 + 83996.8473181119 * t); result += 9.7e-10 * qCos(5.57938280855 + 13367.9726311066 * t); result += 1.02e-09 * qCos(2.05853060226 + 87.30820453981 * t); result += 8e-10 * qCos(4.73792651816 + 11926.2544136688 * t); result += 8e-10 * qCos(5.41418965044 + 10973.55568635 * t); result += 1.06e-09 * qCos(4.10978997399 + 3496.032826134 * t); result += 1.02e-09 * qCos(3.62650006043 + 244287.600007228 * t); result += 7.5e-10 * qCos(4.89483161769 + 5643.1785636774 * t); result += 8.7e-10 * qCos(0.42863750683 + 11015.1064773348 * t); result += 6.9e-10 * qCos(1.8890876072 + 10177.2576795336 * t); result += 8.9e-10 * qCos(1.35567273119 + 6681.2248533996 * t); result += 6.6e-10 * qCos(0.99455837265 + 6525.8044539654 * t); result += 6.7e-10 * qCos(5.5124099707 + 3097.88382272579 * t); result += 7.6e-10 * qCos(2.72016814799 + 4164.311989613 * t); result += 6.3e-10 * qCos(1.4434990254 + 9917.6968745098 * t); result += 7.8e-10 * qCos(3.51469733747 + 11856.2186514245 * t); result += 8.5e-10 * qCos(0.50956043858 + 10575.4066829418 * t); result += 6.7e-10 * qCos(3.62043033405 + 16496.3613962024 * t); result += 5.5e-10 * qCos(5.24637517308 + 3340.6124266998 * t); result += 4.8e-10 * qCos(5.43966777314 + 20426.571092422 * t); result += 6.4e-10 * qCos(5.79535817813 + 2388.8940204492 * t); result += 4.6e-10 * qCos(5.43499966519 + 6275.9623029906 * t); result += 5e-10 * qCos(3.86263598617 + 5729.506447149 * t); result += 4.4e-10 * qCos(1.52269529228 + 12168.0026965746 * t); result += 5.7e-10 * qCos(4.96352373486 + 14945.3161735544 * t); result += 4.5e-10 * qCos(1.0086123016 + 8635.9420037632 * t); result += 4.3e-10 * qCos(3.30685683359 + 9779.1086761254 * t); result += 4.2e-10 * qCos(0.6348125893 + 2699.7348193176 * t); result += 4.1e-10 * qCos(5.67996766641 + 11712.9553182308 * t); result += 5.6e-10 * qCos(4.34024451468 + 90955.5516944961 * t); result += 4.1e-10 * qCos(5.81722212845 + 709.9330485583 * t); result += 5.3e-10 * qCos(6.17052087143 + 233141.314404362 * t); result += 3.7e-10 * qCos(3.12495025087 + 16200.7727245012 * t); result += 3.5e-10 * qCos(5.76973458495 + 12569.6748183318 * t); result += 3.7e-10 * qCos(0.31656444326 + 24356.7807886416 * t); result += 3.5e-10 * qCos(0.96229051027 + 17298.1823273262 * t); result += 3.3e-10 * qCos(5.23130355867 + 5331.3574437408 * t); result += 3.5e-10 * qCos(0.62517020593 + 25158.6017197654 * t); result += 3.5e-10 * qCos(0.80004512129 + 13916.0191096416 * t); result += 3.7e-10 * qCos(2.89336088688 + 12721.572099417 * t); result += 3e-10 * qCos(4.50198402401 + 23543.2305046818 * t); result += 3e-10 * qCos(5.31355708693 + 18319.5365848796 * t); result += 2.9e-10 * qCos(3.47275229977 + 13119.7211028252 * t); result += 2.9e-10 * qCos(3.11002782516 + 4136.9104335162 * t); result += 3.2e-10 * qCos(5.52273255667 + 5753.3848848968 * t); result += 3.5e-10 * qCos(3.7969999668 + 143571.324284816 * t); result += 2.6e-10 * qCos(1.50634201907 + 154717.609887683 * t); result += 3e-10 * qCos(3.53519084118 + 6284.0561710596 * t); result += 2.3e-10 * qCos(4.41808025967 + 5884.9268465832 * t); result += 2.5e-10 * qCos(1.38477355808 + 65147.6197681377 * t); result += 2.3e-10 * qCos(3.49782549797 + 7477.522860216 * t); result += 1.9e-10 * qCos(3.14329413716 + 6496.3749454294 * t); result += 1.9e-10 * qCos(2.20135125199 + 18073.7049386502 * t); result += 1.9e-10 * qCos(4.95020255309 + 3930.2096962196 * t); result += 1.9e-10 * qCos(0.57998702747 + 31415.379249957 * t); result += 2.1e-10 * qCos(1.75474323399 + 12139.5535091068 * t); result += 1.9e-10 * qCos(3.92233070499 + 19651.048481098 * t); result += 1.4e-10 * qCos(0.98131213224 + 12559.038152982 * t); result += 1.9e-10 * qCos(4.93309333729 + 2942.4634232916 * t); result += 1.6e-10 * qCos(5.55997534558 + 8827.3902698748 * t); result += 1.3e-10 * qCos(1.68808165516 + 4535.0594369244 * t); result += 1.3e-10 * qCos(0.33982116161 + 4933.2084403326 * t); result += 1.2e-10 * qCos(1.85426309994 + 5856.4776591154 * t); result += 1e-10 * qCos(4.82763996845 + 13095.8426650774 * t); result += 1.1e-10 * qCos(5.38005490571 + 11790.6290886588 * t); result += 1e-10 * qCos(1.40815507226 + 10988.808157535 * t); result += 1.1e-10 * qCos(3.05005267431 + 17260.1546546904 * t); result += 1e-10 * qCos(4.93364992366 + 12352.8526045448 * t); return result; } double GetEarthL3(double t) { double result = 0.0; result += 2.89226e-06 * qCos(5.84384198723 + 6283.0758499914 * t); result += 3.4955e-07; result += 1.6819e-07 * qCos(5.48766912348 + 12566.1516999828 * t); result += 2.962e-08 * qCos(5.19577265202 + 155.4203994342 * t); result += 1.288e-08 * qCos(4.72200252235 + 3.523118349 * t); result += 6.35e-09 * qCos(5.96925937141 + 242.728603974 * t); result += 7.14e-09 * qCos(5.30045809128 + 18849.2275499742 * t); result += 4.02e-09 * qCos(3.78682982419 + 553.5694028424 * t); result += 7.2e-10 * qCos(4.2976812618 + 6286.5989683404 * t); result += 6.7e-10 * qCos(0.90721687647 + 6127.6554505572 * t); result += 3.6e-10 * qCos(5.24029648014 + 6438.4962494256 * t); result += 2.4e-10 * qCos(5.16003960716 + 25132.3033999656 * t); result += 2.3e-10 * qCos(3.01921570335 + 6309.3741697912 * t); result += 1.7e-10 * qCos(5.82863573502 + 6525.8044539654 * t); result += 1.7e-10 * qCos(3.6777286393 + 71430.6956181291 * t); result += 9e-11 * qCos(4.58467294499 + 1577.3435424478 * t); result += 8e-11 * qCos(1.40626662824 + 11856.2186514245 * t); result += 8e-11 * qCos(5.07561257196 + 6256.7775301916 * t); result += 7e-11 * qCos(2.82473374405 + 83996.8473181119 * t); result += 5e-11 * qCos(2.71488713339 + 10977.078804699 * t); result += 5e-11 * qCos(3.76879847273 + 12036.4607348882 * t); result += 5e-11 * qCos(4.28412873331 + 6275.9623029906 * t); return result; } double GetEarthL4(double t) { double result = 0.0; result -= -1.14084e-06; result += 7.717e-08 * qCos(4.13446589358 + 6283.0758499914 * t); result += 7.65e-09 * qCos(3.83803776214 + 12566.1516999828 * t); result += 4.2e-09 * qCos(0.41925861858 + 155.4203994342 * t); result += 4e-10 * qCos(3.5984758584 + 18849.2275499742 * t); result += 4.1e-10 * qCos(3.14398414077 + 3.523118349 * t); result += 3.5e-10 * qCos(5.00298940826 + 5573.1428014331 * t); result += 1.3e-10 * qCos(0.48794833701 + 77713.7714681205 * t); result += 1e-10 * qCos(5.6480176635 + 6127.6554505572 * t); result += 8e-11 * qCos(2.84160570605 + 161000.685737674 * t); result += 2e-11 * qCos(0.54912904658 + 6438.4962494256 * t); return result; } double GetEarthL5(double t) { double result = 0.0; result -= -8.78e-09; result += 1.72e-09 * qCos(2.7657906951 + 6283.0758499914 * t); result += 5e-10 * qCos(2.01353298182 + 155.4203994342 * t); result += 2.8e-10 * qCos(2.21496423926 + 12566.1516999828 * t); result += 5e-11 * qCos(1.75600058765 + 18849.2275499742 * t); return result; } double GetEarthB0(double t) { double result = 0.0; result += 2.7962e-06 * qCos(3.19870156017 + 84334.6615813083 * t); result += 1.01643e-06 * qCos(5.42248619256 + 5507.5532386674 * t); result += 8.0445e-07 * qCos(3.88013204458 + 5223.6939198022 * t); result += 4.3806e-07 * qCos(3.70444689758 + 2352.8661537718 * t); result += 3.1933e-07 * qCos(4.00026369781 + 1577.3435424478 * t); result += 2.2724e-07 * qCos(3.9847383156 + 1047.7473117547 * t); result += 1.6392e-07 * qCos(3.56456119782 + 5856.4776591154 * t); result += 1.8141e-07 * qCos(4.98367470263 + 6283.0758499914 * t); result += 1.4443e-07 * qCos(3.70275614914 + 9437.762934887 * t); result += 1.4304e-07 * qCos(3.41117857525 + 10213.285546211 * t); result += 1.1246e-07 * qCos(4.8282069053 + 14143.4952424306 * t); result += 1.09e-07 * qCos(2.08574562327 + 6812.766815086 * t); result += 9.714e-08 * qCos(3.47303947752 + 4694.0029547076 * t); result += 1.0367e-07 * qCos(4.05663927946 + 71092.8813549327 * t); result += 8.775e-08 * qCos(4.44016515669 + 5753.3848848968 * t); result += 8.366e-08 * qCos(4.9925151218 + 7084.8967811152 * t); result += 6.921e-08 * qCos(4.32559054073 + 6275.9623029906 * t); result += 9.145e-08 * qCos(1.14182646613 + 6620.8901131878 * t); result += 7.194e-08 * qCos(3.60193205752 + 529.6909650946 * t); result += 7.698e-08 * qCos(5.55425745881 + 167621.575850862 * t); result += 5.285e-08 * qCos(2.48446991566 + 4705.7323075436 * t); result += 5.208e-08 * qCos(6.24992674537 + 18073.7049386502 * t); result += 4.529e-08 * qCos(2.33827747356 + 6309.3741697912 * t); result += 5.579e-08 * qCos(4.41023653738 + 7860.4193924392 * t); result += 4.743e-08 * qCos(0.70995680136 + 5884.9268465832 * t); result += 4.301e-08 * qCos(1.10255777773 + 6681.2248533996 * t); result += 3.849e-08 * qCos(1.82229412531 + 5486.777843175 * t); result += 4.093e-08 * qCos(5.11700141207 + 13367.9726311066 * t); result += 3.681e-08 * qCos(0.43793170356 + 3154.6870848956 * t); result += 3.42e-08 * qCos(5.42034800952 + 6069.7767545534 * t); result += 3.617e-08 * qCos(6.04641937526 + 3930.2096962196 * t); result += 3.67e-08 * qCos(4.58210192227 + 12194.0329146209 * t); result += 2.918e-08 * qCos(1.95463881126 + 10977.078804699 * t); result += 2.797e-08 * qCos(5.61259275048 + 11790.6290886588 * t); result += 2.502e-08 * qCos(0.60499729367 + 6496.3749454294 * t); result += 2.319e-08 * qCos(5.01648216014 + 1059.3819301892 * t); result += 2.684e-08 * qCos(1.39470396488 + 22003.9146348698 * t); result += 2.428e-08 * qCos(3.24183056052 + 78051.5857313169 * t); result += 2.12e-08 * qCos(4.30691000285 + 5643.1785636774 * t); result += 2.257e-08 * qCos(3.15557225618 + 90617.7374312997 * t); result += 1.813e-08 * qCos(3.75574218285 + 3340.6124266998 * t); result += 2.226e-08 * qCos(2.79699346659 + 12036.4607348882 * t); result += 1.888e-08 * qCos(0.86991545823 + 8635.9420037632 * t); result += 1.517e-08 * qCos(1.95852055701 + 398.1490034082 * t); result += 1.581e-08 * qCos(3.19976230948 + 5088.6288397668 * t); result += 1.421e-08 * qCos(6.25530883827 + 2544.3144198834 * t); result += 1.595e-08 * qCos(0.25619915135 + 17298.1823273262 * t); result += 1.391e-08 * qCos(4.69964175561 + 7058.5984613154 * t); result += 1.478e-08 * qCos(2.81808207569 + 25934.1243310894 * t); result += 1.481e-08 * qCos(3.65823554806 + 11506.7697697936 * t); result += 1.693e-08 * qCos(4.95689385293 + 156475.290247996 * t); result += 1.183e-08 * qCos(1.29343061246 + 775.522611324 * t); result += 1.114e-08 * qCos(2.37889311846 + 3738.761430108 * t); result += 9.94e-09 * qCos(4.30088900425 + 9225.539273283 * t); result += 9.24e-09 * qCos(3.06451026812 + 4164.311989613 * t); result += 8.67e-09 * qCos(0.55606931068 + 8429.2412664666 * t); result += 9.88e-09 * qCos(5.97286104208 + 7079.3738568078 * t); result += 8.24e-09 * qCos(1.50984806173 + 10447.3878396044 * t); result += 9.15e-09 * qCos(0.12635654592 + 11015.1064773348 * t); result += 7.42e-09 * qCos(1.99159139281 + 26087.9031415742 * t); result -= -1.039e-08; result += 8.5e-09 * qCos(4.24120016095 + 29864.334027309 * t); result += 7.55e-09 * qCos(2.8963187332 + 4732.0306273434 * t); result += 7.14e-09 * qCos(1.37548118603 + 2146.1654164752 * t); result += 7.08e-09 * qCos(1.91406542362 + 8031.0922630584 * t); result += 7.46e-09 * qCos(0.57893808616 + 796.2980068164 * t); result += 8.02e-09 * qCos(5.1233913723 + 2942.4634232916 * t); result += 7.51e-09 * qCos(1.67479850166 + 21228.3920235458 * t); result += 6.02e-09 * qCos(4.09976538826 + 64809.8055049413 * t); result += 5.94e-09 * qCos(3.49580704962 + 16496.3613962024 * t); result += 5.92e-09 * qCos(4.59481504319 + 4690.4798363586 * t); result += 5.3e-09 * qCos(5.739792952 + 8827.3902698748 * t); result += 5.03e-09 * qCos(5.66433137112 + 33794.5437235286 * t); result += 4.83e-09 * qCos(1.57106522411 + 801.8209311238 * t); result += 4.38e-09 * qCos(0.06707733767 + 3128.3887650958 * t); result += 4.23e-09 * qCos(2.86944595927 + 12566.1516999828 * t); result += 5.04e-09 * qCos(3.2620766916 + 7632.9432596502 * t); result += 5.52e-09 * qCos(1.02926440457 + 239762.204517549 * t); result += 4.27e-09 * qCos(3.6743437821 + 213.299095438 * t); result += 4.04e-09 * qCos(1.46193297142 + 15720.8387848784 * t); result += 5.03e-09 * qCos(4.85802444134 + 6290.1893969922 * t); result += 4.17e-09 * qCos(0.81920713533 + 5216.5803728014 * t); result += 3.65e-09 * qCos(0.01002966162 + 12168.0026965746 * t); result += 3.63e-09 * qCos(1.28376436579 + 6206.8097787158 * t); result += 3.53e-09 * qCos(4.7005913311 + 7234.794256242 * t); result += 4.15e-09 * qCos(0.96862624175 + 4136.9104335162 * t); result += 3.87e-09 * qCos(3.09145061418 + 25158.6017197654 * t); result += 3.73e-09 * qCos(2.65119262792 + 7342.4577801806 * t); result += 3.61e-09 * qCos(2.97762937739 + 9623.6882766912 * t); result += 4.18e-09 * qCos(3.75759994446 + 5230.807466803 * t); result += 3.96e-09 * qCos(1.22507712354 + 6438.4962494256 * t); result += 3.22e-09 * qCos(1.21162178805 + 8662.240323563 * t); result += 2.84e-09 * qCos(5.64170320068 + 1589.0728952838 * t); result += 3.79e-09 * qCos(1.72248432748 + 14945.3161735544 * t); result += 3.2e-09 * qCos(3.94161159962 + 7330.8231617461 * t); result += 3.13e-09 * qCos(5.47602376446 + 1194.4470102246 * t); result += 2.92e-09 * qCos(1.38971327603 + 11769.8536931664 * t); result += 3.05e-09 * qCos(0.80429352049 + 37724.7534197482 * t); result += 2.57e-09 * qCos(5.81382809757 + 426.598190876 * t); result += 2.65e-09 * qCos(6.10358507671 + 6836.6452528338 * t); result += 2.5e-09 * qCos(4.56452895547 + 7477.522860216 * t); result += 2.66e-09 * qCos(2.62926282354 + 7238.6755916 * t); result += 2.63e-09 * qCos(6.22089501237 + 6133.5126528568 * t); result += 3.06e-09 * qCos(2.79682380531 + 1748.016413067 * t); result += 2.36e-09 * qCos(2.46093023714 + 11371.7046897582 * t); result += 3.16e-09 * qCos(1.62662805006 + 250908.490120415 * t); result += 2.16e-09 * qCos(3.68721275185 + 5849.3641121146 * t); result += 2.3e-09 * qCos(0.36165162947 + 5863.5912061162 * t); result += 2.33e-09 * qCos(5.03509933858 + 20426.571092422 * t); result += 2e-09 * qCos(5.86073159059 + 4535.0594369244 * t); result += 2.77e-09 * qCos(4.65400292395 + 82239.1669577989 * t); result += 2.09e-09 * qCos(3.72323200804 + 10973.55568635 * t); result += 1.99e-09 * qCos(5.05186622555 + 5429.8794682394 * t); result += 2.56e-09 * qCos(2.4092327977 + 19651.048481098 * t); result += 2.1e-09 * qCos(4.50691909144 + 29088.811415985 * t); result += 1.81e-09 * qCos(6.00294783127 + 4292.3308329504 * t); result += 2.49e-09 * qCos(0.12900984422 + 154379.795624486 * t); result += 2.09e-09 * qCos(3.87759458598 + 17789.845619785 * t); result += 2.25e-09 * qCos(3.18339652605 + 18875.525869774 * t); result += 1.91e-09 * qCos(4.53897489299 + 18477.1087646123 * t); result += 1.72e-09 * qCos(2.09694183014 + 13095.8426650774 * t); result += 1.82e-09 * qCos(3.161079435 + 16730.4636895958 * t); result += 1.88e-09 * qCos(2.22746128596 + 41654.9631159678 * t); result += 1.64e-09 * qCos(5.18686275017 + 5481.2549188676 * t); result += 1.6e-09 * qCos(2.49298855159 + 12592.4500197826 * t); result += 1.55e-09 * qCos(1.5959543823 + 10021.8372800994 * t); result += 1.35e-09 * qCos(0.21349051064 + 10988.808157535 * t); result += 1.78e-09 * qCos(3.8037517797 + 23581.2581773176 * t); result += 1.23e-09 * qCos(1.66800739151 + 15110.4661198662 * t); result += 1.22e-09 * qCos(2.72678272244 + 18849.2275499742 * t); result += 1.26e-09 * qCos(1.1767551291 + 14919.0178537546 * t); result += 1.42e-09 * qCos(3.95053441332 + 337.8142631964 * t); result += 1.16e-09 * qCos(6.06340906229 + 6709.6740408674 * t); result += 1.37e-09 * qCos(3.52143246757 + 12139.5535091068 * t); result += 1.36e-09 * qCos(2.92179113542 + 32217.2001810808 * t); result += 1.1e-09 * qCos(3.51203379263 + 18052.9295431578 * t); result += 1.47e-09 * qCos(4.63371971408 + 22805.7355659936 * t); result += 1.08e-09 * qCos(5.45280814878 + 7.1135470008 * t); result += 1.48e-09 * qCos(0.65447253687 + 95480.9471841745 * t); result += 1.19e-09 * qCos(5.92110458985 + 33019.0211122046 * t); result += 1.1e-09 * qCos(5.34824206306 + 639.897286314 * t); result += 1.06e-09 * qCos(3.71081682629 + 14314.1681130498 * t); result += 1.39e-09 * qCos(6.17607198418 + 24356.7807886416 * t); result += 1.18e-09 * qCos(5.5973871267 + 161338.50000087 * t); result += 1.17e-09 * qCos(3.6506527164 + 45585.1728121874 * t); result += 1.27e-09 * qCos(4.74596574209 + 49515.382508407 * t); result += 1.2e-09 * qCos(1.04211499785 + 6915.8595893046 * t); result += 1.2e-09 * qCos(5.60638811846 + 5650.2921106782 * t); result += 1.15e-09 * qCos(3.10668213289 + 14712.317116458 * t); result += 9.9e-10 * qCos(0.69018940049 + 12779.4507954208 * t); result += 9.7e-10 * qCos(1.07908724794 + 9917.6968745098 * t); result += 9.3e-10 * qCos(2.62295197319 + 17260.1546546904 * t); result += 9.9e-10 * qCos(4.45774681732 + 4933.2084403326 * t); result += 1.23e-09 * qCos(1.37488922089 + 28286.9904848612 * t); result += 1.21e-09 * qCos(5.19767249813 + 27511.4678735372 * t); result += 1.05e-09 * qCos(0.87192267806 + 77375.9572049241 * t); result += 8.7e-10 * qCos(3.9363781295 + 17654.7805397496 * t); result += 1.22e-09 * qCos(2.2395606868 + 83997.0911355954 * t); result += 8.7e-10 * qCos(4.18201600952 + 22779.4372461938 * t); result += 1.04e-09 * qCos(4.59580877295 + 1349.8674096588 * t); result += 1.02e-09 * qCos(2.83545248411 + 12352.8526045448 * t); result += 1.02e-09 * qCos(3.97386522171 + 10818.1352869158 * t); result += 1.01e-09 * qCos(4.32892825857 + 36147.4098773004 * t); result += 9.4e-10 * qCos(5.00001709261 + 150192.214398004 * t); result += 7.7e-10 * qCos(3.97199369296 + 1592.5960136328 * t); result += 1e-09 * qCos(6.07733097102 + 26735.9452622132 * t); result += 8.6e-10 * qCos(5.2602963825 + 28313.288804661 * t); result += 9.3e-10 * qCos(4.31900620254 + 44809.6502008634 * t); result += 7.6e-10 * qCos(6.22743405935 + 13521.7514415914 * t); result += 7.2e-10 * qCos(1.55820597747 + 6256.7775301916 * t); result += 8.2e-10 * qCos(4.95202664555 + 10575.4066829418 * t); result += 8.2e-10 * qCos(1.69647647075 + 1990.745017041 * t); result += 7.5e-10 * qCos(2.29836095644 + 3634.6210245184 * t); result += 7.5e-10 * qCos(2.66367876557 + 16200.7727245012 * t); result += 8.7e-10 * qCos(0.26630214764 + 31441.6775697568 * t); result += 7.7e-10 * qCos(2.25530954137 + 5235.3285382367 * t); result += 7.6e-10 * qCos(1.09869730846 + 12903.9659631792 * t); result += 5.8e-10 * qCos(4.28246138307 + 12559.038152982 * t); result += 6.4e-10 * qCos(5.51112830114 + 173904.651700853 * t); result += 5.6e-10 * qCos(2.60133794851 + 73188.3759784421 * t); result += 5.5e-10 * qCos(5.81483150022 + 143233.51002162 * t); result += 5.4e-10 * qCos(3.38482031504 + 323049.118787103 * t); result += 3.9e-10 * qCos(3.28500401343 + 71768.5098813255 * t); result += 3.9e-10 * qCos(3.1123991069 + 96900.8132812911 * t); return result; } double GetEarthB1(double t) { double result = 0.0; result += 9.03e-08 * qCos(3.8972906189 + 5507.5532386674 * t); result += 6.177e-08 * qCos(1.73038850355 + 5223.6939198022 * t); result += 3.8e-08 * qCos(5.24404145734 + 2352.8661537718 * t); result += 2.834e-08 * qCos(2.4734503745 + 1577.3435424478 * t); result += 1.817e-08 * qCos(0.41874743765 + 6283.0758499914 * t); result += 1.499e-08 * qCos(1.83320979291 + 5856.4776591154 * t); result += 1.466e-08 * qCos(5.69401926017 + 5753.3848848968 * t); result += 1.301e-08 * qCos(2.18890066314 + 9437.762934887 * t); result += 1.233e-08 * qCos(4.95222451476 + 10213.285546211 * t); result += 1.021e-08 * qCos(0.12866660208 + 7860.4193924392 * t); result += 9.82e-09 * qCos(0.09005453285 + 14143.4952424306 * t); result += 8.65e-09 * qCos(1.73949953555 + 3930.2096962196 * t); result += 5.81e-09 * qCos(2.26949174067 + 5884.9268465832 * t); result += 5.24e-09 * qCos(5.65662503159 + 529.6909650946 * t); result += 4.73e-09 * qCos(6.22750969242 + 6309.3741697912 * t); result += 4.51e-09 * qCos(1.53288619213 + 18073.7049386502 * t); result += 3.64e-09 * qCos(3.61614477374 + 13367.9726311066 * t); result += 3.72e-09 * qCos(3.2247072132 + 6275.9623029906 * t); result += 2.68e-09 * qCos(2.34341267879 + 11790.6290886588 * t); result += 3.22e-09 * qCos(0.94084045832 + 6069.7767545534 * t); result += 2.32e-09 * qCos(0.26781182579 + 7058.5984613154 * t); result += 2.16e-09 * qCos(6.05952221329 + 10977.078804699 * t); result += 2.32e-09 * qCos(2.93325646109 + 22003.9146348698 * t); result += 2.04e-09 * qCos(3.86264841382 + 6496.3749454294 * t); result += 2.02e-09 * qCos(2.81892511133 + 15720.8387848784 * t); result += 1.85e-09 * qCos(4.93512381859 + 12036.4607348882 * t); result += 2.2e-09 * qCos(3.99305643742 + 6812.766815086 * t); result += 1.66e-09 * qCos(1.74970002999 + 11506.7697697936 * t); result += 2.12e-09 * qCos(1.57166285369 + 4694.0029547076 * t); result += 1.57e-09 * qCos(1.08259734788 + 5643.1785636774 * t); result += 1.54e-09 * qCos(5.99434678412 + 5486.777843175 * t); result += 1.44e-09 * qCos(5.23285656085 + 78051.5857313169 * t); result += 1.44e-09 * qCos(1.16454655948 + 90617.7374312997 * t); result += 1.37e-09 * qCos(2.67760436027 + 6290.1893969922 * t); result += 1.8e-09 * qCos(2.06509026215 + 7084.8967811152 * t); result += 1.21e-09 * qCos(5.90212574947 + 9225.539273283 * t); result += 1.5e-09 * qCos(2.00175038718 + 5230.807466803 * t); result += 1.49e-09 * qCos(5.06157254516 + 17298.1823273262 * t); result += 1.18e-09 * qCos(5.39979058038 + 3340.6124266998 * t); result += 1.61e-09 * qCos(3.32421999691 + 6283.3196674749 * t); result += 1.21e-09 * qCos(4.36722193162 + 19651.048481098 * t); result += 1.16e-09 * qCos(5.83462858507 + 4705.7323075436 * t); result += 1.28e-09 * qCos(4.35489873365 + 25934.1243310894 * t); result += 1.43e-09; result += 1.09e-09 * qCos(2.52157834166 + 6438.4962494256 * t); result += 9.9e-10 * qCos(2.70727488041 + 5216.5803728014 * t); result += 1.03e-09 * qCos(0.93782340879 + 8827.3902698748 * t); result += 8.2e-10 * qCos(4.2921468039 + 8635.9420037632 * t); result += 7.9e-10 * qCos(2.24085737326 + 1059.3819301892 * t); result += 9.7e-10 * qCos(5.50959692365 + 29864.334027309 * t); result += 7.2e-10 * qCos(0.21891639822 + 21228.3920235458 * t); result += 7.1e-10 * qCos(2.86755026812 + 6681.2248533996 * t); result += 7.4e-10 * qCos(2.20184828895 + 37724.7534197482 * t); result += 6.3e-10 * qCos(4.45586625948 + 7079.3738568078 * t); result += 6.1e-10 * qCos(0.63918772258 + 33794.5437235286 * t); result += 4.7e-10 * qCos(2.09070235724 + 3128.3887650958 * t); result += 4.7e-10 * qCos(3.325438433 + 26087.9031415742 * t); result += 4.9e-10 * qCos(1.60680905005 + 6702.5604938666 * t); result += 5.7e-10 * qCos(0.11215813438 + 29088.811415985 * t); result += 5.6e-10 * qCos(5.47982934911 + 775.522611324 * t); result += 5e-10 * qCos(1.89396788463 + 12139.5535091068 * t); result += 4.7e-10 * qCos(2.9721490724 + 20426.571092422 * t); result += 4.1e-10 * qCos(5.5532939489 + 11015.1064773348 * t); result += 4.1e-10 * qCos(5.91861144924 + 23581.2581773176 * t); result += 4.5e-10 * qCos(4.95273290181 + 5863.5912061162 * t); result += 5e-10 * qCos(3.62740835096 + 41654.9631159678 * t); result += 3.7e-10 * qCos(6.09033460601 + 64809.8055049413 * t); result += 3.7e-10 * qCos(5.86153655431 + 12566.1516999828 * t); result += 4.6e-10 * qCos(1.65798680284 + 25158.6017197654 * t); result += 3.8e-10 * qCos(2.00673650251 + 426.598190876 * t); result += 3.6e-10 * qCos(6.24373396652 + 6283.14316029419 * t); result += 3.6e-10 * qCos(0.40465162918 + 6283.0085396886 * t); result += 3.2e-10 * qCos(6.03707103538 + 2942.4634232916 * t); result += 4.1e-10 * qCos(4.86809570283 + 1592.5960136328 * t); result += 2.8e-10 * qCos(4.38359423735 + 7632.9432596502 * t); result += 2.8e-10 * qCos(6.03334294232 + 17789.845619785 * t); result += 2.6e-10 * qCos(3.88971333608 + 5331.3574437408 * t); result += 2.6e-10 * qCos(5.94932724051 + 16496.3613962024 * t); result += 3.1e-10 * qCos(1.44666331503 + 16730.4636895958 * t); result += 2.6e-10 * qCos(6.26376705837 + 23543.2305046818 * t); result += 3.3e-10 * qCos(0.93797239147 + 213.299095438 * t); result += 2.6e-10 * qCos(3.71858432944 + 13095.8426650774 * t); result += 2.7e-10 * qCos(0.60565274405 + 10988.808157535 * t); result += 2.3e-10 * qCos(4.4438898555 + 18849.2275499742 * t); result += 2.8e-10 * qCos(1.53862289477 + 6279.4854213396 * t); result += 2.8e-10 * qCos(1.96831814872 + 6286.6662786432 * t); result += 2.8e-10 * qCos(5.78094918529 + 15110.4661198662 * t); result += 2.6e-10 * qCos(2.48165809843 + 5729.506447149 * t); result += 2e-10 * qCos(3.85655029499 + 9623.6882766912 * t); result += 2.1e-10 * qCos(5.83006047147 + 7234.794256242 * t); result += 2.1e-10 * qCos(0.69628570421 + 398.1490034082 * t); result += 2.2e-10 * qCos(5.02222806555 + 6127.6554505572 * t); result += 2e-10 * qCos(3.4761126529 + 6148.010769956 * t); result += 2e-10 * qCos(0.90769829044 + 5481.2549188676 * t); result += 2e-10 * qCos(0.03081589303 + 6418.1409300268 * t); result += 2e-10 * qCos(3.74220084927 + 1589.0728952838 * t); result += 2.1e-10 * qCos(4.00149269576 + 3154.6870848956 * t); result += 1.8e-10 * qCos(1.58348238359 + 2118.7638603784 * t); result += 1.9e-10 * qCos(0.85407021371 + 14712.317116458 * t); return result; } double GetEarthB2(double t) { double result = 0.0; result += 1.662e-08 * qCos(1.62703209173 + 84334.6615813083 * t); result += 4.92e-09 * qCos(2.41382223971 + 1047.7473117547 * t); result += 3.44e-09 * qCos(2.24353004539 + 5507.5532386674 * t); result += 2.58e-09 * qCos(6.00906896311 + 5223.6939198022 * t); result += 1.31e-09 * qCos(0.9544734524 + 6283.0758499914 * t); result += 8.6e-10 * qCos(1.67530247303 + 7860.4193924392 * t); result += 9e-10 * qCos(0.97606804452 + 1577.3435424478 * t); result += 9e-10 * qCos(0.37899871725 + 2352.8661537718 * t); result += 8.9e-10 * qCos(6.25807507963 + 10213.285546211 * t); result += 7.5e-10 * qCos(0.84213523741 + 167621.575850862 * t); result += 5.2e-10 * qCos(1.70501566089 + 14143.4952424306 * t); result += 5.7e-10 * qCos(6.15295833679 + 12194.0329146209 * t); result += 5.1e-10 * qCos(1.2761601674 + 5753.3848848968 * t); result += 5.1e-10 * qCos(5.37229738682 + 6812.766815086 * t); result += 3.4e-10 * qCos(1.73672994279 + 7058.5984613154 * t); result += 3.8e-10 * qCos(2.77761031485 + 10988.808157535 * t); result += 4.6e-10 * qCos(3.38617099014 + 156475.290247996 * t); result += 2.1e-10 * qCos(1.95248349228 + 8827.3902698748 * t); result += 1.8e-10 * qCos(3.33419222028 + 8429.2412664666 * t); result += 1.9e-10 * qCos(4.32945160287 + 17789.845619785 * t); result += 1.7e-10 * qCos(0.66191210656 + 6283.0085396886 * t); result += 1.8e-10 * qCos(3.74885333072 + 11769.8536931664 * t); result += 1.7e-10 * qCos(4.23058370776 + 10977.078804699 * t); result += 1.7e-10 * qCos(1.78116162721 + 5486.777843175 * t); result += 2.1e-10 * qCos(1.36972913918 + 12036.4607348882 * t); result += 1.7e-10 * qCos(2.79601092529 + 796.2980068164 * t); result += 1.5e-10 * qCos(0.4308784885 + 11790.6290886588 * t); result += 1.7e-10 * qCos(1.35132152761 + 78051.5857313169 * t); result += 1.5e-10 * qCos(1.17032155085 + 213.299095438 * t); result += 1.8e-10 * qCos(2.85221514199 + 5088.6288397668 * t); result += 1.7e-10 * qCos(0.21780913672 + 6283.14316029419 * t); result += 1.3e-10 * qCos(1.21201504386 + 25132.3033999656 * t); result += 1.2e-10 * qCos(1.12953712197 + 90617.7374312997 * t); result += 1.2e-10 * qCos(5.13714452592 + 7079.3738568078 * t); result += 1.3e-10 * qCos(3.79842135217 + 4933.2084403326 * t); result += 1.2e-10 * qCos(4.89407978213 + 3738.761430108 * t); result += 1.5e-10 * qCos(6.05682328852 + 398.1490034082 * t); result += 1.4e-10 * qCos(4.81029291856 + 4694.0029547076 * t); result += 1.1e-10 * qCos(0.61684523405 + 3128.3887650958 * t); result += 1.1e-10 * qCos(5.328765385 + 6040.3472460174 * t); result += 1.4e-10 * qCos(5.27227350286 + 4535.0594369244 * t); result += 1.1e-10 * qCos(2.39292099451 + 5331.3574437408 * t); result += 1e-10 * qCos(4.4529653271 + 6525.8044539654 * t); result += 1.4e-10 * qCos(4.66400985037 + 8031.0922630584 * t); result += 1e-10 * qCos(3.22472385926 + 9437.762934887 * t); result += 1.1e-10 * qCos(3.80913404437 + 801.8209311238 * t); result += 1e-10 * qCos(5.15032130575 + 11371.7046897582 * t); result += 1.3e-10 * qCos(0.98720797401 + 5729.506447149 * t); result += 9e-11 * qCos(5.94191743597 + 7632.9432596502 * t); return result; } double GetEarthB3(double t) { double result = 0.0; result += 1.1e-10 * qCos(0.23877262399 + 7860.4193924392 * t); result += 9e-11 * qCos(1.16069982609 + 5507.5532386674 * t); result += 8e-11 * qCos(1.65357552925 + 5884.9268465832 * t); result += 8e-11 * qCos(2.86720038197 + 7058.5984613154 * t); result += 7e-11 * qCos(3.04818741666 + 5486.777843175 * t); result += 7e-11 * qCos(2.59437103785 + 529.6909650946 * t); result += 8e-11 * qCos(4.02863090524 + 6256.7775301916 * t); result += 8e-11 * qCos(2.42003508927 + 5753.3848848968 * t); result += 6e-11 * qCos(0.84181087594 + 6275.9623029906 * t); result += 6e-11 * qCos(5.40160929468 + 1577.3435424478 * t); result += 7e-11 * qCos(2.73399865247 + 6309.3741697912 * t); return result; } double GetEarthB4(double t) { double result = 0.0; result += 4e-11 * qCos(0.79662198849 + 6438.4962494256 * t); result += 5e-11 * qCos(0.84308705203 + 1047.7473117547 * t); result += 5e-11 * qCos(0.05711572303 + 84334.6615813083 * t); result += 3e-11 * qCos(3.46779895686 + 6279.5527316424 * t); result += 3e-11 * qCos(2.89822201212 + 6127.6554505572 * t); return result; } double GetEarthR0(double t) { double result = 0.0; result += 1.00013988799; result += 0.01670699626 * qCos(3.09846350771 + 6283.0758499914 * t); result += 0.00013956023 * qCos(3.0552460962 + 12566.1516999828 * t); result += 3.08372e-05 * qCos(5.19846674381 + 77713.7714681205 * t); result += 1.628461e-05 * qCos(1.17387749012 + 5753.3848848968 * t); result += 1.575568e-05 * qCos(2.84685245825 + 7860.4193924392 * t); result += 9.24799e-06 * qCos(5.45292234084 + 11506.7697697936 * t); result += 5.42444e-06 * qCos(4.56409149777 + 3930.2096962196 * t); result += 4.7211e-06 * qCos(3.66100022149 + 5884.9268465832 * t); result += 3.2878e-06 * qCos(5.89983646482 + 5223.6939198022 * t); result += 3.45983e-06 * qCos(0.96368617687 + 5507.5532386674 * t); result += 3.06784e-06 * qCos(0.29867139512 + 5573.1428014331 * t); result += 1.74844e-06 * qCos(3.01193636534 + 18849.2275499742 * t); result += 2.43189e-06 * qCos(4.27349536153 + 11790.6290886588 * t); result += 2.11829e-06 * qCos(5.84714540314 + 1577.3435424478 * t); result += 1.85752e-06 * qCos(5.02194447178 + 10977.078804699 * t); result += 1.09835e-06 * qCos(5.05510636285 + 5486.777843175 * t); result += 9.8316e-07 * qCos(0.88681311277 + 6069.7767545534 * t); result += 8.6499e-07 * qCos(5.68959778254 + 15720.8387848784 * t); result += 8.5825e-07 * qCos(1.27083733351 + 161000.685737674 * t); result += 6.2916e-07 * qCos(0.92177108832 + 529.6909650946 * t); result += 5.7056e-07 * qCos(2.01374292014 + 83996.8473181119 * t); result += 6.4903e-07 * qCos(0.27250613787 + 17260.1546546904 * t); result += 4.9384e-07 * qCos(3.24501240359 + 2544.3144198834 * t); result += 5.5736e-07 * qCos(5.24159798933 + 71430.6956181291 * t); result += 4.2515e-07 * qCos(6.01110242003 + 6275.9623029906 * t); result += 4.6963e-07 * qCos(2.57805070386 + 775.522611324 * t); result += 3.8968e-07 * qCos(5.36071738169 + 4694.0029547076 * t); result += 4.4661e-07 * qCos(5.53715807302 + 9437.762934887 * t); result += 3.566e-07 * qCos(1.67468058995 + 12036.4607348882 * t); result += 3.1921e-07 * qCos(0.18368229781 + 5088.6288397668 * t); result += 3.1846e-07 * qCos(1.77775642085 + 398.1490034082 * t); result += 3.3193e-07 * qCos(0.24370300098 + 7084.8967811152 * t); result += 3.8245e-07 * qCos(2.39255343974 + 8827.3902698748 * t); result += 2.8464e-07 * qCos(1.21344868176 + 6286.5989683404 * t); result += 3.749e-07 * qCos(0.82952922332 + 19651.048481098 * t); result += 3.6957e-07 * qCos(4.90107591914 + 12139.5535091068 * t); result += 3.4537e-07 * qCos(1.84270693282 + 2942.4634232916 * t); result += 2.6275e-07 * qCos(4.58896850401 + 10447.3878396044 * t); result += 2.4596e-07 * qCos(3.78660875483 + 8429.2412664666 * t); result += 2.3587e-07 * qCos(0.26866117066 + 796.2980068164 * t); result += 2.7793e-07 * qCos(1.89934330904 + 6279.5527316424 * t); result += 2.3927e-07 * qCos(4.99598548138 + 5856.4776591154 * t); result += 2.0349e-07 * qCos(4.65267995431 + 2146.1654164752 * t); result += 2.3287e-07 * qCos(2.80783650928 + 14143.4952424306 * t); result += 2.2103e-07 * qCos(1.95004702988 + 3154.6870848956 * t); result += 1.9506e-07 * qCos(5.38227371393 + 2352.8661537718 * t); result += 1.7958e-07 * qCos(0.19871379385 + 6812.766815086 * t); result += 1.7174e-07 * qCos(4.43315560735 + 10213.285546211 * t); result += 1.619e-07 * qCos(5.23160507859 + 17789.845619785 * t); result += 1.7314e-07 * qCos(6.15200787916 + 16730.4636895958 * t); result += 1.3814e-07 * qCos(5.18962074032 + 8031.0922630584 * t); result += 1.8833e-07 * qCos(0.67306674027 + 149854.400134808 * t); result += 1.8331e-07 * qCos(2.25348733734 + 23581.2581773176 * t); result += 1.3641e-07 * qCos(3.68516118804 + 4705.7323075436 * t); result += 1.3139e-07 * qCos(0.65289581324 + 13367.9726311066 * t); result += 1.0414e-07 * qCos(4.33285688538 + 11769.8536931664 * t); result += 9.978e-08 * qCos(4.20126336355 + 6309.3741697912 * t); result += 1.0169e-07 * qCos(1.59390681369 + 4690.4798363586 * t); result += 7.564e-08 * qCos(2.6256059739 + 6256.7775301916 * t); result += 9.661e-08 * qCos(3.6758679122 + 27511.4678735372 * t); result += 6.743e-08 * qCos(0.56270332741 + 3340.6124266998 * t); result += 8.743e-08 * qCos(6.06359123461 + 1748.016413067 * t); result += 7.786e-08 * qCos(3.67371235637 + 12168.0026965746 * t); result += 6.633e-08 * qCos(5.66149277792 + 11371.7046897582 * t); result += 7.712e-08 * qCos(0.31242577789 + 7632.9432596502 * t); result += 6.592e-08 * qCos(3.13576266188 + 801.8209311238 * t); result += 7.46e-08 * qCos(5.64757188143 + 11926.2544136688 * t); result += 6.933e-08 * qCos(2.923845864 + 6681.2248533996 * t); result += 6.802e-08 * qCos(1.4232980642 + 23013.5395395872 * t); result += 6.115e-08 * qCos(5.13393615454 + 1194.4470102246 * t); result += 6.477e-08 * qCos(2.64986648492 + 19804.8272915828 * t); result += 5.233e-08 * qCos(4.62434053374 + 6438.4962494256 * t); result += 6.147e-08 * qCos(3.02863936662 + 233141.314404362 * t); result += 4.608e-08 * qCos(1.72194702724 + 7234.794256242 * t); result += 4.221e-08 * qCos(1.55697533729 + 7238.6755916 * t); result += 5.314e-08 * qCos(2.40716580847 + 11499.6562227928 * t); result += 5.128e-08 * qCos(5.3239896569 + 11513.8833167944 * t); result += 4.77e-08 * qCos(0.25554312006 + 11856.2186514245 * t); result += 5.519e-08 * qCos(2.09089154502 + 17298.1823273262 * t); result += 5.625e-08 * qCos(4.34052903053 + 90955.5516944961 * t); result += 4.578e-08 * qCos(4.4656964157 + 5746.271337896 * t); result += 3.788e-08 * qCos(4.9072938351 + 4164.311989613 * t); result += 5.337e-08 * qCos(5.09957905104 + 31441.6775697568 * t); result += 3.967e-08 * qCos(1.20054555174 + 1349.8674096588 * t); result += 4.008e-08 * qCos(3.03007204392 + 1059.3819301892 * t); result += 3.476e-08 * qCos(0.7608027703 + 10973.55568635 * t); result += 4.232e-08 * qCos(1.05485713117 + 5760.4984318976 * t); result += 4.582e-08 * qCos(3.76570026763 + 6386.16862421 * t); result += 3.335e-08 * qCos(3.13829943354 + 6836.6452528338 * t); result += 3.418e-08 * qCos(3.00072390334 + 4292.3308329504 * t); result += 3.598e-08 * qCos(5.70718084323 + 5643.1785636774 * t); result += 3.237e-08 * qCos(4.16448773994 + 9917.6968745098 * t); result += 4.154e-08 * qCos(2.59941292162 + 7058.5984613154 * t); result += 3.362e-08 * qCos(4.54577697964 + 4732.0306273434 * t); result += 2.978e-08 * qCos(1.3056126882 + 6283.14316029419 * t); result += 2.765e-08 * qCos(0.51311975679 + 26.2983197998 * t); result += 2.802e-08 * qCos(5.66263240521 + 8635.9420037632 * t); result += 2.927e-08 * qCos(5.73787481548 + 16200.7727245012 * t); result += 3.164e-08 * qCos(1.69140262657 + 11015.1064773348 * t); result += 2.598e-08 * qCos(2.96244118586 + 25132.3033999656 * t); result += 3.519e-08 * qCos(3.62639325753 + 244287.600007228 * t); result += 2.676e-08 * qCos(4.2072570085 + 18073.7049386502 * t); result += 2.978e-08 * qCos(1.74971565805 + 6283.0085396886 * t); result += 2.287e-08 * qCos(1.06975704977 + 14314.1681130498 * t); result += 2.863e-08 * qCos(5.92838131397 + 14712.317116458 * t); result += 3.071e-08 * qCos(0.23793217002 + 35371.8872659764 * t); result += 2.656e-08 * qCos(0.8995930178 + 12352.8526045448 * t); result += 2.415e-08 * qCos(2.79975176257 + 709.9330485583 * t); result += 2.814e-08 * qCos(3.51488206882 + 21228.3920235458 * t); result += 1.977e-08 * qCos(2.6135829755 + 951.7184062506 * t); result += 2.548e-08 * qCos(2.47684686575 + 6208.2942514241 * t); result += 1.999e-08 * qCos(0.5609038816 + 7079.3738568078 * t); result += 2.305e-08 * qCos(1.05376461628 + 22483.8485744926 * t); result += 1.855e-08 * qCos(2.86090681163 + 5216.5803728014 * t); result += 2.157e-08 * qCos(1.31396741861 + 154717.609887683 * t); result += 1.97e-08 * qCos(4.36929875289 + 167283.761587666 * t); result += 1.635e-08 * qCos(5.85571606764 + 10984.1923516998 * t); result += 1.754e-08 * qCos(2.14452408833 + 6290.1893969922 * t); result += 2.154e-08 * qCos(6.03828341543 + 10873.9860304804 * t); result += 1.714e-08 * qCos(3.70157691113 + 1592.5960136328 * t); result += 1.541e-08 * qCos(6.21598380732 + 23543.2305046818 * t); result += 1.611e-08 * qCos(1.99824499377 + 10969.9652576982 * t); result += 1.712e-08 * qCos(1.34295663542 + 3128.3887650958 * t); result += 1.642e-08 * qCos(5.55026665339 + 6496.3749454294 * t); result += 1.502e-08 * qCos(5.43948825854 + 155.4203994342 * t); result += 1.827e-08 * qCos(5.91227480261 + 3738.761430108 * t); result += 1.726e-08 * qCos(2.16764983583 + 10575.4066829418 * t); result += 1.532e-08 * qCos(5.3568310707 + 13521.7514415914 * t); result += 1.829e-08 * qCos(1.66006148731 + 39302.096962196 * t); result += 1.605e-08 * qCos(1.90928637633 + 6133.5126528568 * t); result += 1.282e-08 * qCos(2.46014880418 + 13916.0191096416 * t); result += 1.211e-08 * qCos(4.4136063155 + 3894.1818295422 * t); result += 1.394e-08 * qCos(1.77801929354 + 9225.539273283 * t); result += 1.571e-08 * qCos(4.95512957592 + 25158.6017197654 * t); result += 1.205e-08 * qCos(1.19212540615 + 3.523118349 * t); result += 1.132e-08 * qCos(2.69830084955 + 6040.3472460174 * t); result += 1.504e-08 * qCos(5.77002730341 + 18209.3302636602 * t); result += 1.393e-08 * qCos(1.62621805428 + 5120.6011455836 * t); result += 1.077e-08 * qCos(2.93931554233 + 17256.6315363414 * t); result += 1.232e-08 * qCos(0.71655165307 + 143571.324284816 * t); result += 1.087e-08 * qCos(0.99769687939 + 955.5997416086 * t); result += 1.068e-08 * qCos(5.28472576231 + 65147.6197681377 * t); result += 9.8e-09 * qCos(5.10949204607 + 6172.869528772 * t); result += 1.169e-08 * qCos(3.11664290862 + 14945.3161735544 * t); result += 1.202e-08 * qCos(4.02992510402 + 553.5694028424 * t); result += 9.79e-09 * qCos(2.00000879212 + 15110.4661198662 * t); result += 9.62e-09 * qCos(4.023807714 + 6282.0955289232 * t); result += 9.99e-09 * qCos(3.6264300279 + 6262.300454499 * t); result += 1.03e-08 * qCos(5.84989900289 + 213.299095438 * t); result += 1.014e-08 * qCos(2.84221578218 + 8662.240323563 * t); result += 1.185e-08 * qCos(1.51330541132 + 17654.7805397496 * t); result += 9.67e-09 * qCos(2.67081017562 + 5650.2921106782 * t); result += 1.222e-08 * qCos(2.65423784904 + 88860.0570709867 * t); result += 9.81e-09 * qCos(2.36370360283 + 6206.8097787158 * t); result += 1.033e-08 * qCos(0.13874927606 + 11712.9553182308 * t); result += 1.103e-08 * qCos(3.08477302937 + 43232.3066584156 * t); result += 7.81e-09 * qCos(2.53372735932 + 16496.3613962024 * t); result += 1.019e-08 * qCos(3.04569392376 + 6037.244203762 * t); result += 7.95e-09 * qCos(5.80662989111 + 5230.807466803 * t); result += 8.13e-09 * qCos(3.57710279439 + 10177.2576795336 * t); result += 9.62e-09 * qCos(5.31470594766 + 6284.0561710596 * t); result += 7.21e-09 * qCos(5.96264301567 + 12559.038152982 * t); result += 9.66e-09 * qCos(2.74714939953 + 6244.9428143536 * t); result += 9.21e-09 * qCos(0.10155275926 + 29088.811415985 * t); result += 6.92e-09 * qCos(3.89764447548 + 1589.0728952838 * t); result += 7.19e-09 * qCos(5.91791450402 + 4136.9104335162 * t); result += 7.72e-09 * qCos(4.05505682353 + 6127.6554505572 * t); result += 7.12e-09 * qCos(5.49291532439 + 22003.9146348698 * t); result += 6.72e-09 * qCos(1.60700490811 + 11087.2851259184 * t); result += 6.9e-09 * qCos(4.50539825563 + 426.598190876 * t); result += 8.54e-09 * qCos(3.26104981596 + 20426.571092422 * t); result += 6.56e-09 * qCos(4.3241018294 + 16858.4825329332 * t); result += 8.4e-09 * qCos(2.59572585222 + 28766.924424484 * t); result += 6.92e-09 * qCos(0.61650089011 + 11403.676995575 * t); result += 7e-09 * qCos(3.40901167143 + 7.1135470008 * t); result += 7.26e-09 * qCos(0.04243053594 + 5481.2549188676 * t); result += 5.57e-09 * qCos(4.78317696534 + 20199.094959633 * t); result += 6.49e-09 * qCos(1.04027912958 + 6062.6632075526 * t); result += 6.33e-09 * qCos(5.70229959167 + 45892.730433157 * t); result += 5.92e-09 * qCos(6.11836729658 + 9623.6882766912 * t); result += 5.23e-09 * qCos(3.62840021266 + 5333.9002410216 * t); result += 6.04e-09 * qCos(5.57734696185 + 10344.2950653858 * t); result += 4.96e-09 * qCos(2.21023499449 + 1990.745017041 * t); result += 6.91e-09 * qCos(1.96071732602 + 12416.5885028482 * t); result += 6.4e-09 * qCos(1.59074172032 + 18319.5365848796 * t); result += 6.25e-09 * qCos(3.82362791378 + 13517.8701062334 * t); result += 6.63e-09 * qCos(5.08444996779 + 283.8593188652 * t); result += 4.75e-09 * qCos(1.17025894287 + 12569.6748183318 * t); result += 6.64e-09 * qCos(4.50029469969 + 47162.5163546352 * t); result += 5.69e-09 * qCos(0.16310365162 + 17267.2682016912 * t); result += 5.68e-09 * qCos(3.86100969474 + 6076.8903015542 * t); result += 5.39e-09 * qCos(4.83282276086 + 18422.6293590982 * t); result += 4.66e-09 * qCos(0.75872342878 + 7342.4577801806 * t); result += 5.41e-09 * qCos(3.07212190507 + 226858.23855437 * t); result += 4.58e-09 * qCos(0.26774483096 + 4590.910180489 * t); result += 6.1e-09 * qCos(1.53597051291 + 33019.0211122046 * t); result += 6.17e-09 * qCos(2.62356328726 + 11190.377900137 * t); result += 5.48e-09 * qCos(4.55798855791 + 18875.525869774 * t); result += 6.33e-09 * qCos(4.60110281228 + 66567.4858652543 * t); result += 5.96e-09 * qCos(5.78202396722 + 632.7837393132 * t); result += 5.33e-09 * qCos(5.01786882904 + 12132.439962106 * t); result += 6.03e-09 * qCos(5.38458554802 + 316428.228673915 * t); result += 4.69e-09 * qCos(0.59168241917 + 21954.157609398 * t); result += 5.48e-09 * qCos(3.50613163558 + 17253.0411076896 * t); result += 5.02e-09 * qCos(0.98804327589 + 11609.8625440122 * t); result += 5.68e-09 * qCos(1.98497313089 + 7668.6374249425 * t); result += 4.82e-09 * qCos(1.62141803864 + 12146.6670561076 * t); result += 3.91e-09 * qCos(3.68718382989 + 18052.9295431578 * t); result += 4.57e-09 * qCos(3.7720573734 + 156137.475984799 * t); result += 4.01e-09 * qCos(5.28260651958 + 15671.0817594066 * t); result += 4.69e-09 * qCos(1.80963184268 + 12562.6285816338 * t); result += 5.08e-09 * qCos(3.36399024699 + 20597.2439630412 * t); result += 4.5e-09 * qCos(5.6605429925 + 10454.5013866052 * t); result += 3.75e-09 * qCos(4.98534633105 + 9779.1086761254 * t); result += 5.23e-09 * qCos(0.97215560834 + 155427.542936241 * t); result += 4.03e-09 * qCos(5.13939866506 + 1551.045222648 * t); result += 3.72e-09 * qCos(3.69883738807 + 9388.0059094152 * t); result += 3.67e-09 * qCos(4.43875659716 + 4535.0594369244 * t); result += 4.06e-09 * qCos(4.208631566 + 12592.4500197826 * t); result += 3.6e-09 * qCos(2.53924644657 + 242.728603974 * t); result += 4.71e-09 * qCos(4.61907324819 + 5436.9930152402 * t); result += 4.41e-09 * qCos(5.83872966262 + 3496.032826134 * t); result += 3.85e-09 * qCos(4.94496680973 + 24356.7807886416 * t); result += 3.49e-09 * qCos(6.15018231784 + 19800.9459562248 * t); result += 3.55e-09 * qCos(0.21895678106 + 5429.8794682394 * t); result += 3.44e-09 * qCos(5.62993724928 + 2379.1644735716 * t); result += 3.8e-09 * qCos(2.72105213143 + 11933.3679606696 * t); result += 4.32e-09 * qCos(0.24221790536 + 17996.0311682222 * t); result += 3.78e-09 * qCos(5.22517556974 + 7477.522860216 * t); result += 3.37e-09 * qCos(5.10888041439 + 5849.3641121146 * t); result += 3.15e-09 * qCos(0.57827745123 + 10557.5941608238 * t); result += 3.18e-09 * qCos(4.49953141399 + 3634.6210245184 * t); result += 3.23e-09 * qCos(1.54274281393 + 10440.2742926036 * t); result += 3.09e-09 * qCos(5.76839284397 + 20.7753954924 * t); result += 3.01e-09 * qCos(2.34727604008 + 4686.8894077068 * t); result += 4.14e-09 * qCos(5.9323760231 + 51092.7260508548 * t); result += 3.61e-09 * qCos(2.1639860955 + 28237.2334593894 * t); result += 2.88e-09 * qCos(0.18376252189 + 13095.8426650774 * t); result += 2.77e-09 * qCos(5.12952205045 + 13119.7211028252 * t); result += 3.27e-09 * qCos(6.19222146204 + 6268.8487559898 * t); result += 2.73e-09 * qCos(0.30522428863 + 23141.5583829246 * t); result += 2.67e-09 * qCos(5.76152585786 + 5966.6839803348 * t); result += 3.08e-09 * qCos(5.99280509979 + 22805.7355659936 * t); result += 3.45e-09 * qCos(2.92489919444 + 36949.2308084242 * t); result += 2.53e-09 * qCos(5.20995219509 + 24072.9214697764 * t); result += 3.42e-09 * qCos(5.72702586209 + 16460.333529525 * t); result += 2.61e-09 * qCos(2.00304796059 + 6148.010769956 * t); result += 2.38e-09 * qCos(5.08264392839 + 6915.8595893046 * t); result += 2.49e-09 * qCos(2.94762789744 + 135.0650800354 * t); result += 3.06e-09 * qCos(3.89764686987 + 10988.808157535 * t); result += 3.05e-09 * qCos(0.05827812117 + 4701.1165017084 * t); result += 3.19e-09 * qCos(2.95712862064 + 163096.180361183 * t); result += 2.09e-09 * qCos(4.43768461442 + 6546.1597733642 * t); result += 2.7e-09 * qCos(2.06643178717 + 4804.209275927 * t); result += 2.17e-09 * qCos(0.73691592312 + 6303.8512454838 * t); result += 2.06e-09 * qCos(0.32075959415 + 25934.1243310894 * t); result += 2.18e-09 * qCos(0.18428135264 + 28286.9904848612 * t); result += 2.05e-09 * qCos(5.21312087405 + 20995.3929664494 * t); result += 1.99e-09 * qCos(0.44384292491 + 16737.5772365966 * t); result += 2.3e-09 * qCos(6.06567392849 + 6287.0080032545 * t); result += 2.19e-09 * qCos(1.291942163 + 5326.7866940208 * t); result += 2.01e-09 * qCos(1.74700937253 + 22743.4093795164 * t); result += 2.07e-09 * qCos(4.45440927276 + 6279.4854213396 * t); result += 2.69e-09 * qCos(6.0564044503 + 64471.9912417449 * t); result += 1.9e-09 * qCos(0.99256176518 + 29296.6153895786 * t); result += 2.38e-09 * qCos(5.42471431221 + 39609.6545831656 * t); result += 2.62e-09 * qCos(5.26961924198 + 522.5774180938 * t); result += 2.1e-09 * qCos(4.68618183158 + 6254.6266625236 * t); result += 1.97e-09 * qCos(2.8062455408 + 4933.2084403326 * t); result += 2.52e-09 * qCos(4.36220154608 + 40879.4405046438 * t); result += 2.61e-09 * qCos(1.07241516738 + 55022.9357470744 * t); result += 1.89e-09 * qCos(3.82966734476 + 419.4846438752 * t); result += 1.85e-09 * qCos(4.14324541379 + 5642.1982426092 * t); result += 2.47e-09 * qCos(3.44855612987 + 6702.5604938666 * t); result += 2.05e-09 * qCos(4.04424043223 + 536.8045120954 * t); result += 1.91e-09 * qCos(3.14082686083 + 16723.350142595 * t); result += 2.22e-09 * qCos(5.16263907319 + 23539.7073863328 * t); result += 1.8e-09 * qCos(4.56214752149 + 6489.2613984286 * t); result += 2.19e-09 * qCos(0.80382553358 + 16627.3709153772 * t); result += 2.27e-09 * qCos(0.60156339452 + 5905.7022420756 * t); result += 1.68e-09 * qCos(0.88753528161 + 16062.1845261168 * t); result += 1.58e-09 * qCos(0.92127725775 + 23937.856389741 * t); result += 1.57e-09 * qCos(4.69607868164 + 6805.6532680852 * t); result += 2.07e-09 * qCos(4.88410451334 + 6286.6662786432 * t); result += 1.6e-09 * qCos(4.95943826846 + 10021.8372800994 * t); result += 1.66e-09 * qCos(0.97126433565 + 3097.88382272579 * t); result += 2.09e-09 * qCos(5.75663411805 + 3646.3503773544 * t); result += 1.75e-09 * qCos(6.12762824412 + 239424.390254353 * t); result += 1.73e-09 * qCos(3.13887234973 + 6179.9830757728 * t); result += 1.57e-09 * qCos(3.62822058179 + 18451.078546566 * t); result += 1.57e-09 * qCos(4.67695912235 + 6709.6740408674 * t); result += 1.46e-09 * qCos(3.09506069735 + 4907.3020501456 * t); result += 1.65e-09 * qCos(2.2713912876 + 10660.6869350424 * t); result += 2.01e-09 * qCos(1.67701267433 + 2107.0345075424 * t); result += 1.44e-09 * qCos(3.96947747592 + 6019.9919266186 * t); result += 1.71e-09 * qCos(5.91302216729 + 6058.7310542895 * t); result += 1.44e-09 * qCos(2.1315565512 + 26084.0218062162 * t); result += 1.51e-09 * qCos(0.67417383554 + 2388.8940204492 * t); result += 1.89e-09 * qCos(5.07122281033 + 263.0839233728 * t); result += 1.46e-09 * qCos(5.10373877968 + 10770.8932562618 * t); result += 1.87e-09 * qCos(1.23915444627 + 19402.7969528166 * t); result += 1.74e-09 * qCos(0.08407293391 + 9380.9596727172 * t); result += 1.37e-09 * qCos(1.26247412309 + 12566.2190102856 * t); result += 1.37e-09 * qCos(3.52826010842 + 639.897286314 * t); result += 1.48e-09 * qCos(1.76124372592 + 5888.4499649322 * t); result += 1.64e-09 * qCos(2.39195095081 + 6357.8574485587 * t); result += 1.46e-09 * qCos(2.43675816553 + 5881.4037282342 * t); result += 1.61e-09 * qCos(1.15721259372 + 26735.9452622132 * t); result += 1.31e-09 * qCos(2.51859277344 + 6599.467719648 * t); result += 1.53e-09 * qCos(5.85203687779 + 6281.5913772831 * t); result += 1.51e-09 * qCos(3.72338532649 + 12669.2444742014 * t); result += 1.32e-09 * qCos(2.38417741883 + 6525.8044539654 * t); result += 1.29e-09 * qCos(0.75556744143 + 5017.508371365 * t); result += 1.27e-09 * qCos(0.00254936441 + 10027.9031957292 * t); result += 1.48e-09 * qCos(2.85102145528 + 6418.1409300268 * t); result += 1.43e-09 * qCos(5.74460279367 + 26087.9031415742 * t); result += 1.72e-09 * qCos(0.4128996224 + 174242.46596405 * t); result += 1.36e-09 * qCos(4.15497742275 + 6311.5250374592 * t); result += 1.7e-09 * qCos(5.98194913129 + 327574.514276781 * t); result += 1.24e-09 * qCos(1.65497607604 + 32217.2001810808 * t); result += 1.36e-09 * qCos(2.48430783417 + 13341.6743113068 * t); result += 1.65e-09 * qCos(2.496679246 + 58953.145443294 * t); result += 1.23e-09 * qCos(3.45660563754 + 6277.552925684 * t); result += 1.17e-09 * qCos(0.86065134175 + 6245.0481773556 * t); result += 1.49e-09 * qCos(5.61358280963 + 5729.506447149 * t); result += 1.53e-09 * qCos(0.2686002995 + 245.8316462294 * t); result += 1.28e-09 * qCos(0.71204006588 + 103.0927742186 * t); result += 1.59e-09 * qCos(2.43166592149 + 221995.028801495 * t); result += 1.3e-09 * qCos(2.80707316718 + 6016.4688082696 * t); result += 1.37e-09 * qCos(1.70657709294 + 12566.08438968 * t); result += 1.11e-09 * qCos(1.56305648432 + 17782.7320727842 * t); result += 1.13e-09 * qCos(3.58302904101 + 25685.872802808 * t); result += 1.09e-09 * qCos(3.26403795962 + 6819.8803620868 * t); result += 1.22e-09 * qCos(0.34120688217 + 1162.4747044078 * t); result += 1.19e-09 * qCos(5.84644718278 + 12721.572099417 * t); result += 1.44e-09 * qCos(2.28899679126 + 12489.8856287072 * t); result += 1.37e-09 * qCos(5.82029768354 + 44809.6502008634 * t); result += 1.07e-09 * qCos(2.4281854414 + 5547.1993364596 * t); result += 1.34e-09 * qCos(1.26539982939 + 5331.3574437408 * t); result += 1.03e-09 * qCos(5.96518130595 + 6321.1035226272 * t); result += 1.09e-09 * qCos(0.33808549034 + 11300.5842213564 * t); result += 1.29e-09 * qCos(5.89187277327 + 12029.3471878874 * t); result += 1.22e-09 * qCos(5.77325634636 + 11919.140866668 * t); result += 1.07e-09 * qCos(6.2499898935 + 77690.7595057385 * t); result += 1.07e-09 * qCos(1.00535580713 + 77736.7834305025 * t); result += 1.43e-09 * qCos(0.24122178432 + 4214.0690150848 * t); result += 1.43e-09 * qCos(0.88529649733 + 7576.560073574 * t); result += 1.07e-09 * qCos(2.92124030496 + 31415.379249957 * t); result += 9.9e-10 * qCos(5.70862227072 + 5540.0857894588 * t); result += 1.1e-09 * qCos(0.37528037383 + 5863.5912061162 * t); result += 1.04e-09 * qCos(4.44107178366 + 2118.7638603784 * t); result += 9.8e-10 * qCos(5.95877916706 + 4061.2192153944 * t); result += 1.13e-09 * qCos(1.24206857385 + 84672.4758445047 * t); result += 1.24e-09 * qCos(2.55619029867 + 12539.853380183 * t); result += 1.1e-09 * qCos(3.66952094329 + 238004.524157236 * t); result += 1.12e-09 * qCos(4.32512422943 + 97238.6275444875 * t); result += 9.7e-10 * qCos(3.70151541181 + 11720.0688652316 * t); result += 1.2e-09 * qCos(1.26895630252 + 12043.574281889 * t); result += 9.4e-10 * qCos(2.56461130309 + 19004.6479494084 * t); result += 1.17e-09 * qCos(3.65425622684 + 34520.3093093808 * t); result += 9.8e-10 * qCos(0.13589994287 + 11080.1715789176 * t); result += 9.7e-10 * qCos(5.38330115253 + 7834.1210726394 * t); result += 9.7e-10 * qCos(2.46722096722 + 71980.6335747312 * t); result += 9.5e-10 * qCos(5.36958330451 + 6288.5987742988 * t); result += 1.11e-09 * qCos(5.01961920313 + 11823.1616394502 * t); result += 9e-10 * qCos(2.72299804525 + 26880.3198130326 * t); result += 9.9e-10 * qCos(0.90164266377 + 18635.9284545362 * t); result += 1.26e-09 * qCos(4.78722177847 + 305281.943071049 * t); result += 9.3e-10 * qCos(0.21240380046 + 18139.2945014159 * t); result += 1.24e-09 * qCos(5.00979495566 + 172146.97134054 * t); result += 9.9e-10 * qCos(5.67090026475 + 16522.6597160022 * t); result += 9.2e-10 * qCos(2.28180963676 + 12491.3701014155 * t); result += 9e-10 * qCos(4.50544881196 + 40077.61957352 * t); result += 1e-09 * qCos(2.00639461612 + 12323.4230960088 * t); result += 9.5e-10 * qCos(5.68801979087 + 14919.0178537546 * t); result += 8.7e-10 * qCos(1.86043406047 + 27707.5424942948 * t); result += 1.05e-09 * qCos(3.02903468417 + 22345.2603761082 * t); result += 8.7e-10 * qCos(5.43970168638 + 6272.0301497275 * t); result += 8.9e-10 * qCos(1.63389387182 + 33326.5787331742 * t); result += 8.2e-10 * qCos(5.58298993353 + 10241.2022911672 * t); result += 9.4e-10 * qCos(5.47749711149 + 9924.8104215106 * t); result += 8.2e-10 * qCos(4.71988314145 + 15141.390794312 * t); result += 9.7e-10 * qCos(5.61458778738 + 2787.0430238574 * t); result += 9.6e-10 * qCos(3.89073946348 + 6379.0550772092 * t); result += 8.1e-10 * qCos(3.13038482444 + 36147.4098773004 * t); result += 1.1e-09 * qCos(4.89978492291 + 72140.6286666874 * t); result += 9.7e-10 * qCos(5.20764563059 + 6303.4311693902 * t); result += 8.2e-10 * qCos(5.26342716139 + 9814.6041002912 * t); result += 1.09e-09 * qCos(2.3555558977 + 83286.9142695536 * t); result += 9.7e-10 * qCos(2.58492958057 + 30666.1549584328 * t); result += 9.3e-10 * qCos(1.32651591333 + 23020.653086588 * t); result += 7.8e-10 * qCos(3.99588630754 + 11293.4706743556 * t); result += 9e-10 * qCos(0.57771932738 + 26482.1708096244 * t); result += 1.06e-09 * qCos(3.92012705073 + 62883.3551395136 * t); result += 9.8e-10 * qCos(2.94397773524 + 316.3918696566 * t); result += 7.6e-10 * qCos(3.96310417608 + 29026.4852295078 * t); result += 7.8e-10 * qCos(1.97068529306 + 90279.9231681033 * t); result += 7.6e-10 * qCos(0.23027966596 + 21424.4666443034 * t); result += 8e-10 * qCos(2.23099742212 + 266.6070417218 * t); result += 7.9e-10 * qCos(1.46227790922 + 8982.810669309 * t); result += 1.02e-09 * qCos(4.92129953565 + 5621.8429232104 * t); result += 1e-09 * qCos(0.39243148321 + 24279.1070182136 * t); result += 7.1e-10 * qCos(1.52014858474 + 33794.5437235286 * t); result += 7.6e-10 * qCos(0.22880641443 + 57375.8019008462 * t); result += 9.1e-10 * qCos(0.96515913904 + 48739.859897083 * t); result += 7.5e-10 * qCos(2.77638585157 + 12964.300703391 * t); result += 7.7e-10 * qCos(5.18846946344 + 11520.9968637952 * t); result += 6.8e-10 * qCos(0.50006599129 + 4274.5183108324 * t); result += 7.5e-10 * qCos(2.07323762803 + 15664.0355227086 * t); result += 7.4e-10 * qCos(1.01884134928 + 6393.2821712108 * t); result += 7.7e-10 * qCos(0.4666517878 + 16207.886271502 * t); result += 8.1e-10 * qCos(4.10452219483 + 161710.618786232 * t); result += 6.7e-10 * qCos(3.83840630887 + 6262.7205305926 * t); result += 7.1e-10 * qCos(3.91415523291 + 7875.6718636242 * t); result += 8.1e-10 * qCos(0.91938383237 + 74.7815985673 * t); result += 8.3e-10 * qCos(4.69916218791 + 23006.4259925864 * t); result += 6.3e-10 * qCos(2.32556465878 + 6279.1945146334 * t); result += 6.5e-10 * qCos(5.41938745446 + 28628.3362260996 * t); result += 6.5e-10 * qCos(3.02336771694 + 5959.570433334 * t); result += 6.4e-10 * qCos(3.3103319837 + 2636.725472637 * t); result += 6.4e-10 * qCos(0.18375587519 + 1066.49547719 * t); result += 8e-10 * qCos(5.81239171612 + 12341.8069042809 * t); result += 6.6e-10 * qCos(2.15105504851 + 38.0276726358 * t); result += 6.2e-10 * qCos(2.43313614978 + 10138.1095169486 * t); result += 6e-10 * qCos(3.1615390647 + 5490.300961524 * t); result += 6.9e-10 * qCos(0.30764736334 + 7018.9523635232 * t); result += 6.8e-10 * qCos(2.24442548639 + 24383.0791084414 * t); result += 7.8e-10 * qCos(1.39649386463 + 9411.4646150872 * t); result += 6.3e-10 * qCos(0.72976362625 + 6286.9571853494 * t); result += 7.3e-10 * qCos(4.95125917731 + 6453.7487206106 * t); result += 7.8e-10 * qCos(0.32736023459 + 6528.9074962208 * t); result += 5.9e-10 * qCos(4.95362151577 + 35707.7100829074 * t); result += 7e-10 * qCos(2.37962727525 + 15508.6151232744 * t); result += 7.3e-10 * qCos(1.35229143111 + 5327.4761083828 * t); result += 7.2e-10 * qCos(5.91833527334 + 10881.0995774812 * t); result += 5.9e-10 * qCos(5.36231868425 + 10239.5838660108 * t); result += 5.9e-10 * qCos(1.63156134967 + 61306.0115970658 * t); result += 5.4e-10 * qCos(4.29491690425 + 21947.1113727 * t); result += 5.7e-10 * qCos(5.89190132575 + 34513.2630726828 * t); result += 7.4e-10 * qCos(1.38235845304 + 9967.4538999816 * t); result += 5.3e-10 * qCos(3.86543309344 + 32370.9789915656 * t); result += 5.5e-10 * qCos(4.51794544854 + 34911.412076091 * t); result += 6.3e-10 * qCos(5.41479412056 + 11502.8376165305 * t); result += 6.3e-10 * qCos(2.34416220742 + 11510.7019230567 * t); result += 6.8e-10 * qCos(0.77493931112 + 29864.334027309 * t); result += 6e-10 * qCos(5.57024703495 + 5756.9080032458 * t); result += 7.2e-10 * qCos(2.80863088166 + 10866.8724834796 * t); result += 6.1e-10 * qCos(2.69736991384 + 82576.9812209953 * t); result += 6.3e-10 * qCos(5.32068807257 + 3116.6594122598 * t); result += 5.2e-10 * qCos(1.02278758099 + 6272.4391846416 * t); result += 6.9e-10 * qCos(5.00698550308 + 25287.7237993998 * t); result += 6.6e-10 * qCos(6.12047940728 + 12074.488407524 * t); result += 5.1e-10 * qCos(2.59519527563 + 11396.5634485742 * t); result += 5.6e-10 * qCos(2.57995973521 + 17892.9383940036 * t); result += 5.9e-10 * qCos(0.4416723762 + 250570.675857219 * t); result += 5.9e-10 * qCos(3.84070143543 + 5483.254724826 * t); result += 4.9e-10 * qCos(0.54704693048 + 22594.054895712 * t); result += 6.5e-10 * qCos(2.38423614501 + 52670.0695933026 * t); result += 6.9e-10 * qCos(5.34363738671 + 66813.5648357332 * t); result += 5.7e-10 * qCos(5.42770501007 + 310145.152823924 * t); result += 5.3e-10 * qCos(1.17760296075 + 149.5631971346 * t); result += 6.1e-10 * qCos(4.02090887211 + 34596.3646546524 * t); result += 4.9e-10 * qCos(4.18361320516 + 18606.4989460002 * t); result += 5.5e-10 * qCos(0.83886167974 + 20452.8694122218 * t); result += 5e-10 * qCos(1.46327331958 + 37455.7264959744 * t); result += 4.8e-10 * qCos(4.53854727167 + 29822.7832363242 * t); result += 5.8e-10 * qCos(3.34847975377 + 33990.6183442862 * t); result += 6.5e-10 * qCos(1.45522693982 + 76251.3277706202 * t); result += 5.6e-10 * qCos(2.35650663692 + 37724.7534197482 * t); result += 5.2e-10 * qCos(2.61551081496 + 5999.2165311262 * t); result += 5.3e-10 * qCos(0.17334326094 + 77717.2945864695 * t); result += 5.3e-10 * qCos(0.79879700631 + 77710.2483497715 * t); result += 4.7e-10 * qCos(0.43240779709 + 735.8765135318 * t); result += 5.3e-10 * qCos(4.58763261686 + 11616.976091013 * t); result += 4.8e-10 * qCos(6.20230111054 + 4171.4255366138 * t); result += 5.2e-10 * qCos(1.09723616404 + 640.8776073822 * t); result += 5.7e-10 * qCos(3.42008310383 + 50317.2034395308 * t); result += 5.3e-10 * qCos(1.01528448581 + 149144.46708625 * t); result += 4.7e-10 * qCos(3.00924906195 + 52175.8062831484 * t); result += 5.2e-10 * qCos(2.03254070404 + 6293.7125153412 * t); result += 4.8e-10 * qCos(0.12356889734 + 13362.4497067992 * t); result += 4.5e-10 * qCos(3.37963782356 + 10763.779709261 * t); result += 4.7e-10 * qCos(5.50981287869 + 12779.4507954208 * t); result += 6.2e-10 * qCos(5.45209070099 + 949.1756089698 * t); result += 6.1e-10 * qCos(2.93237974631 + 5791.4125575326 * t); result += 4.4e-10 * qCos(2.87440620802 + 8584.6616659008 * t); result += 4.6e-10 * qCos(4.0314179656 + 10667.8004820432 * t); result += 4.7e-10 * qCos(3.89902931422 + 3903.9113764198 * t); result += 4.6e-10 * qCos(2.75700467329 + 6993.0088985497 * t); result += 4.5e-10 * qCos(1.933862933 + 206.1855484372 * t); result += 4.7e-10 * qCos(2.57670800912 + 11492.542675792 * t); result += 4.4e-10 * qCos(3.62570223167 + 63658.8777508376 * t); result += 5.1e-10 * qCos(0.84536826273 + 12345.739057544 * t); result += 4.3e-10 * qCos(0.01524970172 + 37853.8754993826 * t); result += 4.1e-10 * qCos(3.27146326065 + 8858.3149443206 * t); result += 4.5e-10 * qCos(3.03765521215 + 65236.2212932854 * t); result += 4.7e-10 * qCos(1.44447548944 + 21393.5419698576 * t); result += 5.8e-10 * qCos(5.45843180927 + 1975.492545856 * t); result += 5e-10 * qCos(2.13285524146 + 12573.2652469836 * t); result += 4.1e-10 * qCos(1.32190847146 + 2547.8375382324 * t); result += 4.7e-10 * qCos(3.67579608544 + 28313.288804661 * t); result += 4.1e-10 * qCos(2.24013475126 + 8273.8208670324 * t); result += 4.7e-10 * qCos(6.21438985953 + 10991.3058987006 * t); result += 4.2e-10 * qCos(3.0163181735 + 853.196381752 * t); result += 5.6e-10 * qCos(1.09773690181 + 77376.2010224076 * t); result += 4e-10 * qCos(2.35698541041 + 2699.7348193176 * t); result += 4.3e-10 * qCos(5.28030898459 + 17796.9591667858 * t); result += 5.4e-10 * qCos(2.59175932091 + 22910.4467653686 * t); result += 5.4e-10 * qCos(0.88027764102 + 71960.3865832237 * t); result += 5.5e-10 * qCos(0.07988899477 + 83467.1563530173 * t); result += 3.9e-10 * qCos(1.12867321442 + 9910.583327509 * t); result += 4e-10 * qCos(1.35670430524 + 27177.8515292002 * t); result += 3.9e-10 * qCos(4.39624220245 + 5618.3198048614 * t); result += 4.2e-10 * qCos(4.78798367468 + 7856.89627409019 * t); result += 4.7e-10 * qCos(2.75482175292 + 18202.2167166594 * t); result += 3.9e-10 * qCos(1.97008298629 + 24491.4257925834 * t); result += 4.2e-10 * qCos(4.04346599946 + 7863.9425107882 * t); result += 3.8e-10 * qCos(0.49178679251 + 38650.173506199 * t); result += 3.6e-10 * qCos(4.86047906533 + 4157.1984426122 * t); result += 4.3e-10 * qCos(5.64354880978 + 1062.9050485382 * t); result += 3.6e-10 * qCos(3.98066313627 + 12565.1713789146 * t); result += 4.2e-10 * qCos(2.30753932657 + 6549.6828917132 * t); result += 4e-10 * qCos(5.3969491832 + 9498.2122306346 * t); result += 4e-10 * qCos(3.30603243754 + 23536.116957681 * t); result += 5e-10 * qCos(6.15760345261 + 78051.3419138334 * t); return result; } double GetEarthR1(double t) { double result = 0.0; result += 0.00103018608 * qCos(1.10748969588 + 6283.0758499914 * t); result += 1.721238e-05 * qCos(1.06442301418 + 12566.1516999828 * t); result -= -7.02215e-06; result += 3.2346e-07 * qCos(1.02169059149 + 18849.2275499742 * t); result += 3.0799e-07 * qCos(2.84353804832 + 5507.5532386674 * t); result += 2.4971e-07 * qCos(1.31906709482 + 5223.6939198022 * t); result += 1.8485e-07 * qCos(1.42429748614 + 1577.3435424478 * t); result += 1.0078e-07 * qCos(5.91378194648 + 10977.078804699 * t); result += 8.634e-08 * qCos(0.27146150602 + 5486.777843175 * t); result += 8.654e-08 * qCos(1.42046854427 + 6275.9623029906 * t); result += 5.069e-08 * qCos(1.68613426734 + 5088.6288397668 * t); result += 4.985e-08 * qCos(6.01401770704 + 6286.5989683404 * t); result += 4.669e-08 * qCos(5.98724494073 + 529.6909650946 * t); result += 4.395e-08 * qCos(0.51800238019 + 4694.0029547076 * t); result += 3.872e-08 * qCos(4.74969833437 + 2544.3144198834 * t); result += 3.75e-08 * qCos(5.07097685568 + 796.2980068164 * t); result += 4.1e-08 * qCos(1.08424786092 + 9437.762934887 * t); result += 3.518e-08 * qCos(0.02290216272 + 83996.8473181119 * t); result += 3.436e-08 * qCos(0.94937019624 + 71430.6956181291 * t); result += 3.221e-08 * qCos(6.15628775313 + 2146.1654164752 * t); result += 3.414e-08 * qCos(5.41218322538 + 775.522611324 * t); result += 2.863e-08 * qCos(5.48432847146 + 10447.3878396044 * t); result += 2.52e-08 * qCos(0.24276941146 + 398.1490034082 * t); result += 2.201e-08 * qCos(4.95216196651 + 6812.766815086 * t); result += 2.186e-08 * qCos(0.41991743105 + 8031.0922630584 * t); result += 2.838e-08 * qCos(3.42034351366 + 2352.8661537718 * t); result += 2.554e-08 * qCos(6.13241878525 + 6438.4962494256 * t); result += 1.932e-08 * qCos(5.31374608366 + 8429.2412664666 * t); result += 2.429e-08 * qCos(3.09164528262 + 4690.4798363586 * t); result += 1.73e-08 * qCos(1.5368620855 + 4705.7323075436 * t); result += 2.25e-08 * qCos(3.68863633842 + 7084.8967811152 * t); result += 2.093e-08 * qCos(1.28191783032 + 1748.016413067 * t); result += 1.441e-08 * qCos(0.81656250862 + 14143.4952424306 * t); result += 1.483e-08 * qCos(3.22225357771 + 7234.794256242 * t); result += 1.754e-08 * qCos(3.22883705112 + 6279.5527316424 * t); result += 1.583e-08 * qCos(4.09702349428 + 11499.6562227928 * t); result += 1.575e-08 * qCos(5.53890170575 + 3154.6870848956 * t); result += 1.847e-08 * qCos(1.82040335363 + 7632.9432596502 * t); result += 1.504e-08 * qCos(3.63293385726 + 11513.8833167944 * t); result += 1.337e-08 * qCos(4.64440864339 + 6836.6452528338 * t); result += 1.275e-08 * qCos(2.69341415363 + 1349.8674096588 * t); result += 1.352e-08 * qCos(6.15101580257 + 5746.271337896 * t); result += 1.125e-08 * qCos(3.35673439497 + 17789.845619785 * t); result += 1.47e-08 * qCos(3.65282991755 + 1194.4470102246 * t); result += 1.177e-08 * qCos(2.57676109092 + 13367.9726311066 * t); result += 1.101e-08 * qCos(4.49748696552 + 4292.3308329504 * t); result += 1.234e-08 * qCos(5.65036509521 + 5760.4984318976 * t); result += 9.84e-09 * qCos(0.65517395136 + 5856.4776591154 * t); result += 9.28e-09 * qCos(2.32420318751 + 10213.285546211 * t); result += 1.077e-08 * qCos(5.82812169132 + 12036.4607348882 * t); result += 9.16e-09 * qCos(0.76613009583 + 16730.4636895958 * t); result += 8.77e-09 * qCos(1.50137505051 + 11926.2544136688 * t); result += 1.023e-08 * qCos(5.62076589825 + 6256.7775301916 * t); result += 8.51e-09 * qCos(0.65709335533 + 155.4203994342 * t); result += 8.02e-09 * qCos(4.10519132088 + 951.7184062506 * t); result += 8.57e-09 * qCos(1.41661697538 + 5753.3848848968 * t); result += 9.94e-09 * qCos(1.14418521187 + 1059.3819301892 * t); result += 8.13e-09 * qCos(1.63948433322 + 6681.2248533996 * t); result += 6.62e-09 * qCos(4.5520045226 + 5216.5803728014 * t); result += 6.44e-09 * qCos(4.19478168733 + 6040.3472460174 * t); result += 6.26e-09 * qCos(1.50767713598 + 5643.1785636774 * t); result += 5.9e-09 * qCos(6.18277145205 + 4164.311989613 * t); result += 6.35e-09 * qCos(0.52413263542 + 6290.1893969922 * t); result += 6.5e-09 * qCos(0.9793569035 + 25132.3033999656 * t); result += 5.68e-09 * qCos(2.30125315873 + 10973.55568635 * t); result += 5.47e-09 * qCos(5.27256412213 + 3340.6124266998 * t); result += 5.47e-09 * qCos(2.20144422886 + 1592.5960136328 * t); result += 5.26e-09 * qCos(0.92464258226 + 11371.7046897582 * t); result += 4.9e-09 * qCos(5.90951388655 + 3894.1818295422 * t); result += 4.78e-09 * qCos(1.66857963179 + 12168.0026965746 * t); result += 5.16e-09 * qCos(3.59803483887 + 10969.9652576982 * t); result += 5.18e-09 * qCos(3.97914412373 + 17298.1823273262 * t); result += 5.34e-09 * qCos(5.03740926442 + 9917.6968745098 * t); result += 4.87e-09 * qCos(2.50545369269 + 6127.6554505572 * t); result += 4.16e-09 * qCos(4.04828175503 + 10984.1923516998 * t); result += 5.38e-09 * qCos(5.54081539805 + 553.5694028424 * t); result += 4.02e-09 * qCos(2.16544019233 + 7860.4193924392 * t); result += 5.53e-09 * qCos(2.32177369366 + 11506.7697697936 * t); result += 3.67e-09 * qCos(3.3915253225 + 6496.3749454294 * t); result += 3.6e-09 * qCos(5.34379853282 + 7079.3738568078 * t); result += 3.37e-09 * qCos(3.61563704045 + 11790.6290886588 * t); result += 4.56e-09 * qCos(0.30754294809 + 801.8209311238 * t); result += 4.17e-09 * qCos(3.70009308674 + 10575.4066829418 * t); result += 3.81e-09 * qCos(5.82033971802 + 7058.5984613154 * t); result += 3.21e-09 * qCos(0.31988767355 + 16200.7727245012 * t); result += 3.64e-09 * qCos(1.08414306177 + 6309.3741697912 * t); result += 2.94e-09 * qCos(4.54798604957 + 11856.2186514245 * t); result += 2.9e-09 * qCos(1.26473978562 + 8635.9420037632 * t); result += 3.99e-09 * qCos(4.16998866302 + 26.2983197998 * t); result += 2.62e-09 * qCos(5.08316906342 + 10177.2576795336 * t); result += 2.43e-09 * qCos(2.2574609119 + 11712.9553182308 * t); result += 2.37e-09 * qCos(1.05070575346 + 242.728603974 * t); result += 2.75e-09 * qCos(3.45319481756 + 5884.9268465832 * t); result += 2.55e-09 * qCos(5.38496831087 + 21228.3920235458 * t); result += 3.07e-09 * qCos(4.24313526604 + 3738.761430108 * t); result += 2.16e-09 * qCos(3.46037894728 + 213.299095438 * t); result += 1.96e-09 * qCos(0.69029243914 + 1990.745017041 * t); result += 1.98e-09 * qCos(5.16301829964 + 12352.8526045448 * t); result += 2.14e-09 * qCos(3.91876200279 + 13916.0191096416 * t); result += 2.12e-09 * qCos(4.00861198517 + 5230.807466803 * t); result += 1.84e-09 * qCos(5.59805976614 + 6283.14316029419 * t); result += 1.84e-09 * qCos(2.85275392124 + 7238.6755916 * t); result += 1.79e-09 * qCos(2.54259058334 + 14314.1681130498 * t); result += 2.25e-09 * qCos(1.64458698399 + 4732.0306273434 * t); result += 2.36e-09 * qCos(5.58826125715 + 6069.7767545534 * t); result += 1.87e-09 * qCos(2.72805985443 + 6062.6632075526 * t); result += 1.84e-09 * qCos(6.04216273598 + 6283.0085396886 * t); result += 2.3e-09 * qCos(3.62591335086 + 6284.0561710596 * t); result += 1.63e-09 * qCos(2.19117396803 + 18073.7049386502 * t); result += 1.72e-09 * qCos(0.9761295074 + 3930.2096962196 * t); result += 2.15e-09 * qCos(1.04672844028 + 3496.032826134 * t); result += 1.69e-09 * qCos(4.75084479006 + 17267.2682016912 * t); result += 1.52e-09 * qCos(0.19390712179 + 9779.1086761254 * t); result += 1.82e-09 * qCos(5.16288118255 + 17253.0411076896 * t); result += 1.49e-09 * qCos(0.8094418426 + 709.9330485583 * t); result += 1.63e-09 * qCos(2.1920957039 + 6076.8903015542 * t); result += 1.86e-09 * qCos(5.01159497089 + 11015.1064773348 * t); result += 1.34e-09 * qCos(0.97765485759 + 65147.6197681377 * t); result += 1.41e-09 * qCos(4.38421981312 + 4136.9104335162 * t); result += 1.58e-09 * qCos(4.60974280627 + 9623.6882766912 * t); result += 1.33e-09 * qCos(3.30508592837 + 154717.609887683 * t); result += 1.63e-09 * qCos(6.11782626245 + 3.523118349 * t); result += 1.74e-09 * qCos(1.58078542187 + 7.1135470008 * t); result += 1.41e-09 * qCos(0.49976927274 + 25158.6017197654 * t); result += 1.24e-09 * qCos(6.03440460031 + 9225.539273283 * t); result += 1.5e-09 * qCos(5.30166336812 + 13517.8701062334 * t); result += 1.27e-09 * qCos(1.92389511438 + 22483.8485744926 * t); result += 1.21e-09 * qCos(2.37813129011 + 167283.761587666 * t); result += 1.2e-09 * qCos(3.98423684853 + 4686.8894077068 * t); result += 1.17e-09 * qCos(5.81072642211 + 12569.6748183318 * t); result += 1.22e-09 * qCos(5.60973054224 + 5642.1982426092 * t); result += 1.57e-09 * qCos(3.40236426002 + 16496.3613962024 * t); result += 1.29e-09 * qCos(2.10705116371 + 1589.0728952838 * t); result += 1.16e-09 * qCos(0.55839966736 + 5849.3641121146 * t); result += 1.23e-09 * qCos(1.52961392771 + 12559.038152982 * t); result += 1.11e-09 * qCos(0.44848279675 + 6172.869528772 * t); result += 1.23e-09 * qCos(5.81645568991 + 6282.0955289232 * t); result += 1.5e-09 * qCos(4.26278409223 + 3128.3887650958 * t); result += 1.06e-09 * qCos(2.27437761356 + 5429.8794682394 * t); result += 1.04e-09 * qCos(4.42743707728 + 23543.2305046818 * t); result += 1.21e-09 * qCos(0.39459045915 + 12132.439962106 * t); result += 1.04e-09 * qCos(2.41842602527 + 426.598190876 * t); result += 1.1e-09 * qCos(5.80381480447 + 16858.4825329332 * t); result += 1e-09 * qCos(2.93805577485 + 4535.0594369244 * t); result += 9.7e-10 * qCos(3.97935904984 + 6133.5126528568 * t); result += 1.1e-09 * qCos(6.22339014386 + 12146.6670561076 * t); result += 9.8e-10 * qCos(0.87576563709 + 6525.8044539654 * t); result += 9.8e-10 * qCos(3.15248421301 + 10440.2742926036 * t); result += 9.5e-10 * qCos(2.461684111 + 3097.88382272579 * t); result += 8.8e-10 * qCos(0.23371480284 + 13119.7211028252 * t); result += 9.8e-10 * qCos(5.77016493489 + 7342.4577801806 * t); result += 9.2e-10 * qCos(6.03915555063 + 20426.571092422 * t); result += 9.6e-10 * qCos(5.56909292561 + 2388.8940204492 * t); result += 8.1e-10 * qCos(1.32131147691 + 5650.2921106782 * t); result += 8.6e-10 * qCos(3.94529200528 + 10454.5013866052 * t); result += 7.6e-10 * qCos(2.70729716925 + 143571.324284816 * t); result += 9.1e-10 * qCos(5.64100034152 + 8827.3902698748 * t); result += 7.6e-10 * qCos(1.80783856698 + 28286.9904848612 * t); result += 8.1e-10 * qCos(1.90858992196 + 29088.811415985 * t); result += 7.5e-10 * qCos(3.40955892978 + 5481.2549188676 * t); result += 6.9e-10 * qCos(4.49936170873 + 17256.6315363414 * t); result += 8.8e-10 * qCos(1.10098454357 + 11769.8536931664 * t); result += 6.6e-10 * qCos(2.78285801977 + 536.8045120954 * t); result += 6.8e-10 * qCos(3.88179770758 + 17260.1546546904 * t); result += 8.4e-10 * qCos(1.59303306354 + 9380.9596727172 * t); result += 8.8e-10 * qCos(3.88076636762 + 7477.522860216 * t); result += 6.1e-10 * qCos(6.17558202197 + 11087.2851259184 * t); result += 6e-10 * qCos(4.34824715818 + 6206.8097787158 * t); result += 8.2e-10 * qCos(4.59843208943 + 9388.0059094152 * t); result += 7.9e-10 * qCos(1.63131230601 + 4933.2084403326 * t); result += 7.8e-10 * qCos(4.20905757484 + 5729.506447149 * t); result += 5.7e-10 * qCos(5.48157926651 + 18319.5365848796 * t); result += 6e-10 * qCos(1.01261781084 + 12721.572099417 * t); result += 5.6e-10 * qCos(1.63031935692 + 15720.8387848784 * t); result += 5.5e-10 * qCos(0.24926735018 + 15110.4661198662 * t); result += 6.1e-10 * qCos(5.93059279661 + 12539.853380183 * t); result += 5.5e-10 * qCos(4.84298966314 + 13095.8426650774 * t); result += 6.7e-10 * qCos(6.11690589247 + 8662.240323563 * t); result += 5.4e-10 * qCos(5.73750638571 + 3634.6210245184 * t); result += 7.4e-10 * qCos(1.05466745829 + 16460.333529525 * t); result += 5.3e-10 * qCos(2.29084335688 + 16062.1845261168 * t); result += 6.4e-10 * qCos(2.13513767927 + 7875.6718636242 * t); result += 6.7e-10 * qCos(0.07096807518 + 14945.3161735544 * t); result += 5.1e-10 * qCos(2.31511194429 + 6262.7205305926 * t); result += 5.7e-10 * qCos(5.77055471237 + 12043.574281889 * t); result += 5.6e-10 * qCos(4.41980790431 + 4701.1165017084 * t); result += 5.9e-10 * qCos(5.87963500073 + 5331.3574437408 * t); result += 5.8e-10 * qCos(2.30546168628 + 955.5997416086 * t); result += 4.9e-10 * qCos(1.93839278478 + 5333.9002410216 * t); result += 4.8e-10 * qCos(2.69973662261 + 6709.6740408674 * t); result += 6.4e-10 * qCos(1.64379897981 + 6262.300454499 * t); result += 4.6e-10 * qCos(3.98449608961 + 98068.5367163054 * t); result += 5e-10 * qCos(3.68875893005 + 12323.4230960088 * t); result += 4.5e-10 * qCos(3.30068569697 + 22003.9146348698 * t); result += 4.7e-10 * qCos(1.26317154881 + 11919.140866668 * t); result += 4.5e-10 * qCos(0.89150445122 + 51868.2486621788 * t); result += 4.3e-10 * qCos(1.61526242998 + 6277.552925684 * t); result += 4.3e-10 * qCos(5.74295325645 + 11403.676995575 * t); result += 4.4e-10 * qCos(3.43070646822 + 10021.8372800994 * t); result += 5.6e-10 * qCos(0.02481833774 + 15671.0817594066 * t); result += 5.5e-10 * qCos(3.14274403422 + 33019.0211122046 * t); result += 4.5e-10 * qCos(3.00877289177 + 8982.810669309 * t); result += 4.6e-10 * qCos(0.73303568429 + 6303.4311693902 * t); result += 4.9e-10 * qCos(1.60455690285 + 6303.8512454838 * t); result += 4.5e-10 * qCos(0.40210030323 + 6805.6532680852 * t); result += 5.3e-10 * qCos(0.94869680175 + 10988.808157535 * t); result += 4.1e-10 * qCos(1.61122384329 + 6819.8803620868 * t); result += 5.5e-10 * qCos(0.89439119424 + 11933.3679606696 * t); result += 4.5e-10 * qCos(3.88495384656 + 60530.4889857418 * t); result += 4e-10 * qCos(4.75740908001 + 38526.574350872 * t); result += 4e-10 * qCos(1.49921251887 + 18451.078546566 * t); result += 4e-10 * qCos(3.77498297228 + 26087.9031415742 * t); result += 5.1e-10 * qCos(1.70258603562 + 1551.045222648 * t); result += 3.9e-10 * qCos(2.97100699926 + 2118.7638603784 * t); result += 5.3e-10 * qCos(5.19854123078 + 77713.7714681205 * t); result += 4.7e-10 * qCos(4.26356628717 + 21424.4666443034 * t); result += 3.7e-10 * qCos(0.62902722802 + 24356.7807886416 * t); result += 3.6e-10 * qCos(0.11087914947 + 10344.2950653858 * t); result += 3.6e-10 * qCos(0.77037556319 + 12029.3471878874 * t); result += 3.5e-10 * qCos(3.30933994515 + 24072.9214697764 * t); result += 3.5e-10 * qCos(5.93650887012 + 31570.7996493912 * t); result += 3.6e-10 * qCos(2.15108874765 + 30774.5016425748 * t); result += 3.6e-10 * qCos(1.75078825382 + 16207.886271502 * t); result += 3.3e-10 * qCos(5.06264177921 + 226858.23855437 * t); result += 3.4e-10 * qCos(6.168913788 + 24491.4257925834 * t); result += 3.5e-10 * qCos(3.19120695549 + 32217.2001810808 * t); result += 3.4e-10 * qCos(2.31528650443 + 55798.4583583984 * t); result += 3.2e-10 * qCos(4.21446357042 + 15664.0355227086 * t); result += 3.9e-10 * qCos(1.24979117796 + 6418.1409300268 * t); result += 3.7e-10 * qCos(4.1194365577 + 2787.0430238574 * t); result += 3.2e-10 * qCos(1.6288771089 + 639.897286314 * t); result += 3.8e-10 * qCos(5.89832942685 + 640.8776073822 * t); result += 3.2e-10 * qCos(1.72442327688 + 27433.889215875 * t); result += 3.1e-10 * qCos(2.78828943753 + 12139.5535091068 * t); result += 3.5e-10 * qCos(4.44608896525 + 18202.2167166594 * t); result += 3.4e-10 * qCos(3.96287980676 + 18216.443810661 * t); result += 3.3e-10 * qCos(4.73611335874 + 16723.350142595 * t); result += 3.4e-10 * qCos(1.43910280005 + 49515.382508407 * t); result += 3.1e-10 * qCos(0.23302920161 + 23581.2581773176 * t); result += 2.9e-10 * qCos(2.0263384022 + 11609.8625440122 * t); result += 3e-10 * qCos(2.5492323024 + 9924.8104215106 * t); result += 3.2e-10 * qCos(4.91793198558 + 11300.5842213564 * t); result += 2.8e-10 * qCos(0.26187189577 + 13521.7514415914 * t); result += 2.8e-10 * qCos(3.84568936822 + 2699.7348193176 * t); result += 2.9e-10 * qCos(1.83149729794 + 29822.7832363242 * t); result += 3.3e-10 * qCos(4.60320094415 + 19004.6479494084 * t); result += 2.7e-10 * qCos(4.46183450287 + 6702.5604938666 * t); result += 3e-10 * qCos(4.4649407224 + 36147.4098773004 * t); result += 2.7e-10 * qCos(0.03211931363 + 6279.7894925736 * t); result += 2.6e-10 * qCos(5.46497324333 + 6245.0481773556 * t); result += 3.5e-10 * qCos(4.52695674113 + 36949.2308084242 * t); result += 2.7e-10 * qCos(3.52528177609 + 10770.8932562618 * t); result += 2.6e-10 * qCos(1.48499438453 + 11080.1715789176 * t); result += 3.5e-10 * qCos(2.82154380962 + 19402.7969528166 * t); result += 2.5e-10 * qCos(2.46339998836 + 6279.4854213396 * t); result += 2.6e-10 * qCos(4.97688894643 + 16737.5772365966 * t); result += 2.6e-10 * qCos(2.36136541526 + 17996.0311682222 * t); result += 2.9e-10 * qCos(4.15148654061 + 45892.730433157 * t); result += 2.6e-10 * qCos(4.50714272714 + 17796.9591667858 * t); result += 2.7e-10 * qCos(4.72625223674 + 1066.49547719 * t); result += 2.5e-10 * qCos(2.89309528854 + 6286.6662786432 * t); result += 2.7e-10 * qCos(0.37462444357 + 12964.300703391 * t); result += 2.9e-10 * qCos(4.94860010533 + 5863.5912061162 * t); result += 3.1e-10 * qCos(3.93096113577 + 29864.334027309 * t); result += 2.4e-10 * qCos(6.14987193584 + 18606.4989460002 * t); result += 2.4e-10 * qCos(3.74225964547 + 29026.4852295078 * t); result += 2.5e-10 * qCos(5.70460621565 + 27707.5424942948 * t); result += 2.5e-10 * qCos(5.33928840652 + 15141.390794312 * t); result += 2.7e-10 * qCos(3.0232089714 + 6286.3622074092 * t); result += 2.3e-10 * qCos(0.28364955406 + 5327.4761083828 * t); result += 2.6e-10 * qCos(1.34240461687 + 18875.525869774 * t); result += 2.4e-10 * qCos(1.33998410121 + 19800.9459562248 * t); result += 2.5e-10 * qCos(6.00172494004 + 6489.2613984286 * t); result += 2.2e-10 * qCos(1.81777974484 + 6288.5987742988 * t); result += 2.2e-10 * qCos(3.5860360664 + 6915.8595893046 * t); result += 2.9e-10 * qCos(2.09564449439 + 15265.8865193004 * t); result += 2.2e-10 * qCos(1.02173599251 + 11925.2740926006 * t); result += 2.2e-10 * qCos(4.74660932338 + 28230.1872226914 * t); result += 2.1e-10 * qCos(2.30688751432 + 5999.2165311262 * t); result += 2.1e-10 * qCos(3.2265494443 + 25934.1243310894 * t); result += 2.1e-10 * qCos(3.04956726238 + 6566.9351688566 * t); result += 2.7e-10 * qCos(5.35653084499 + 33794.5437235286 * t); result += 2.8e-10 * qCos(3.91168324815 + 18208.349942592 * t); result += 2e-10 * qCos(1.52296293311 + 135.0650800354 * t); result += 2.2e-10 * qCos(4.66462839521 + 13362.4497067992 * t); result += 1.9e-10 * qCos(1.78121167862 + 156137.475984799 * t); result += 1.9e-10 * qCos(2.99969102221 + 19651.048481098 * t); result += 1.9e-10 * qCos(2.86664273362 + 18422.6293590982 * t); result += 2.5e-10 * qCos(0.94995632141 + 31415.379249957 * t); result += 1.9e-10 * qCos(4.71432851499 + 77690.7595057385 * t); result += 1.9e-10 * qCos(2.54227398241 + 77736.7834305025 * t); result += 2e-10 * qCos(5.91915117116 + 48739.859897083 * t); return result; } double GetEarthR2(double t) { double result = 0.0; result += 4.359385e-05 * qCos(5.78455133738 + 6283.0758499914 * t); result += 1.23633e-06 * qCos(5.57934722157 + 12566.1516999828 * t); result -= -1.2341e-07; result += 8.792e-08 * qCos(3.62777733395 + 77713.7714681205 * t); result += 5.689e-08 * qCos(1.86958905084 + 5573.1428014331 * t); result += 3.301e-08 * qCos(5.47027913302 + 18849.2275499742 * t); result += 1.471e-08 * qCos(4.48028885617 + 5507.5532386674 * t); result += 1.013e-08 * qCos(2.81456417694 + 5223.6939198022 * t); result += 8.54e-09 * qCos(3.10878241236 + 1577.3435424478 * t); result += 1.102e-08 * qCos(2.84173992403 + 161000.685737674 * t); result += 6.48e-09 * qCos(5.47349498544 + 775.522611324 * t); result += 6.09e-09 * qCos(1.37969434104 + 6438.4962494256 * t); result += 4.99e-09 * qCos(4.4164924225 + 6286.5989683404 * t); result += 4.17e-09 * qCos(0.90242451175 + 10977.078804699 * t); result += 4.02e-09 * qCos(3.2037658529 + 5088.6288397668 * t); result += 3.51e-09 * qCos(1.8107922777 + 5486.777843175 * t); result += 4.67e-09 * qCos(3.65753702738 + 7084.8967811152 * t); result += 4.58e-09 * qCos(5.38585314743 + 149854.400134808 * t); result += 3.04e-09 * qCos(3.51701098693 + 796.2980068164 * t); result += 2.66e-09 * qCos(6.17413982699 + 6836.6452528338 * t); result += 2.79e-09 * qCos(1.84120501086 + 4694.0029547076 * t); result += 2.6e-09 * qCos(1.41629543251 + 2146.1654164752 * t); result += 2.66e-09 * qCos(3.13832905677 + 71430.6956181291 * t); result += 3.21e-09 * qCos(5.35313367048 + 3154.6870848956 * t); result += 2.38e-09 * qCos(2.17720020018 + 155.4203994342 * t); result += 2.93e-09 * qCos(4.61501268144 + 4690.4798363586 * t); result += 2.29e-09 * qCos(4.7596958807 + 7234.794256242 * t); result += 2.11e-09 * qCos(0.21868065485 + 4705.7323075436 * t); result += 2.01e-09 * qCos(4.21905743357 + 1349.8674096588 * t); result += 1.95e-09 * qCos(4.57808285364 + 529.6909650946 * t); result += 2.53e-09 * qCos(2.81496293039 + 1748.016413067 * t); result += 1.82e-09 * qCos(5.70454011389 + 6040.3472460174 * t); result += 1.79e-09 * qCos(6.02897097053 + 4292.3308329504 * t); result += 1.86e-09 * qCos(1.58690991244 + 6309.3741697912 * t); result += 1.7e-09 * qCos(2.90220009715 + 9437.762934887 * t); result += 1.66e-09 * qCos(1.99984925026 + 8031.0922630584 * t); result += 1.58e-09 * qCos(0.04783713552 + 2544.3144198834 * t); result += 1.97e-09 * qCos(2.01083639502 + 1194.4470102246 * t); result += 1.65e-09 * qCos(5.78372596778 + 83996.8473181119 * t); result += 2.14e-09 * qCos(3.38285934319 + 7632.9432596502 * t); result += 1.4e-09 * qCos(0.36401486094 + 10447.3878396044 * t); result += 1.51e-09 * qCos(0.95153163031 + 6127.6554505572 * t); result += 1.36e-09 * qCos(1.48426306582 + 2352.8661537718 * t); result += 1.27e-09 * qCos(5.48475435134 + 951.7184062506 * t); result += 1.26e-09 * qCos(5.26866506592 + 6279.5527316424 * t); result += 1.25e-09 * qCos(3.75754889288 + 6812.766815086 * t); result += 1.01e-09 * qCos(4.95015746147 + 398.1490034082 * t); result += 1.02e-09 * qCos(0.68468295277 + 1592.5960136328 * t); result += 1e-09 * qCos(1.14568935785 + 3894.1818295422 * t); result += 1.29e-09 * qCos(0.76540016965 + 553.5694028424 * t); result += 1.09e-09 * qCos(5.41063597567 + 6256.7775301916 * t); result += 7.5e-10 * qCos(5.84804322893 + 242.728603974 * t); result += 9.5e-10 * qCos(1.94452244083 + 11856.2186514245 * t); result += 7.7e-10 * qCos(0.69373708195 + 8429.2412664666 * t); result += 1e-09 * qCos(5.19725292131 + 244287.600007228 * t); result += 8e-10 * qCos(6.18440483705 + 1059.3819301892 * t); result += 6.9e-10 * qCos(5.25699888595 + 14143.4952424306 * t); result += 8.5e-10 * qCos(5.39484725499 + 25132.3033999656 * t); result += 6.6e-10 * qCos(0.51779993906 + 801.8209311238 * t); result += 5.5e-10 * qCos(5.16878202461 + 7058.5984613154 * t); result += 5.1e-10 * qCos(3.88759155247 + 12036.4607348882 * t); result += 5e-10 * qCos(5.57636570536 + 6290.1893969922 * t); result += 6.1e-10 * qCos(2.24359003264 + 8635.9420037632 * t); result += 5e-10 * qCos(5.54441900966 + 1990.745017041 * t); result += 5.6e-10 * qCos(4.0030107804 + 13367.9726311066 * t); result += 5.2e-10 * qCos(4.13138898038 + 7860.4193924392 * t); result += 5.2e-10 * qCos(3.90943054011 + 26.2983197998 * t); result += 4.1e-10 * qCos(3.5712848278 + 7079.3738568078 * t); result += 5.6e-10 * qCos(2.76959005761 + 90955.5516944961 * t); result += 4.2e-10 * qCos(1.91461189199 + 7477.522860216 * t); result += 4.2e-10 * qCos(0.42728171713 + 10213.285546211 * t); result += 4.2e-10 * qCos(1.09413724455 + 709.9330485583 * t); result += 3.9e-10 * qCos(3.93298068961 + 10973.55568635 * t); result += 3.8e-10 * qCos(6.17935925345 + 9917.6968745098 * t); result += 4.9e-10 * qCos(0.83021145241 + 11506.7697697936 * t); result += 5.3e-10 * qCos(1.45828359397 + 233141.314404362 * t); result += 4.7e-10 * qCos(6.21568666789 + 6681.2248533996 * t); result += 3.7e-10 * qCos(0.3635930998 + 10177.2576795336 * t); result += 3.5e-10 * qCos(3.33024911524 + 5643.1785636774 * t); result += 3.4e-10 * qCos(5.63446915337 + 6525.8044539654 * t); result += 3.5e-10 * qCos(5.36033855038 + 25158.6017197654 * t); result += 3.4e-10 * qCos(5.36319798321 + 4933.2084403326 * t); result += 3.3e-10 * qCos(4.24722336872 + 12569.6748183318 * t); result += 4.3e-10 * qCos(5.26370903404 + 10575.4066829418 * t); result += 4.2e-10 * qCos(5.08837645072 + 11015.1064773348 * t); result += 4e-10 * qCos(1.98334703186 + 6284.0561710596 * t); result += 4.2e-10 * qCos(4.22496037505 + 88860.0570709867 * t); result += 2.9e-10 * qCos(3.1908862817 + 11926.2544136688 * t); result += 2.9e-10 * qCos(0.15217616684 + 12168.0026965746 * t); result += 3e-10 * qCos(1.61904744136 + 9779.1086761254 * t); result += 2.7e-10 * qCos(0.76388991416 + 1589.0728952838 * t); result += 3.6e-10 * qCos(2.74712003443 + 3738.761430108 * t); result += 3.3e-10 * qCos(3.08807829566 + 3930.2096962196 * t); result += 3.1e-10 * qCos(5.34906619513 + 143571.324284816 * t); result += 2.5e-10 * qCos(0.10240267494 + 22483.8485744926 * t); result += 3e-10 * qCos(3.47110495524 + 14945.3161735544 * t); result += 2.4e-10 * qCos(1.10425016019 + 4535.0594369244 * t); result += 2.4e-10 * qCos(1.5803725978 + 6496.3749454294 * t); result += 2.3e-10 * qCos(3.87710321433 + 6275.9623029906 * t); result += 2.5e-10 * qCos(3.9452977897 + 3128.3887650958 * t); result += 2.3e-10 * qCos(3.44685609601 + 4136.9104335162 * t); result += 2.3e-10 * qCos(3.83156029849 + 5753.3848848968 * t); result += 2.2e-10 * qCos(1.86956128067 + 16730.4636895958 * t); result += 2.5e-10 * qCos(2.42188933855 + 5729.506447149 * t); result += 2e-10 * qCos(1.78208352927 + 17789.845619785 * t); result += 2.1e-10 * qCos(4.303630874 + 16858.4825329332 * t); result += 2.1e-10 * qCos(0.49258939822 + 29088.811415985 * t); result += 2.5e-10 * qCos(1.33030250444 + 6282.0955289232 * t); result += 2.7e-10 * qCos(2.54785812264 + 3496.032826134 * t); result += 2.2e-10 * qCos(1.1123252195 + 12721.572099417 * t); result += 2.1e-10 * qCos(5.97759081637 + 7.1135470008 * t); result += 1.9e-10 * qCos(0.80292033311 + 16062.1845261168 * t); result += 2.3e-10 * qCos(4.12454848769 + 2388.8940204492 * t); result += 2.2e-10 * qCos(4.92663152168 + 18875.525869774 * t); result += 2.3e-10 * qCos(5.68902059771 + 16460.333529525 * t); result += 2.3e-10 * qCos(4.97346265647 + 17260.1546546904 * t); result += 2.3e-10 * qCos(3.03021283729 + 66567.4858652543 * t); result += 1.6e-10 * qCos(3.89740925257 + 5331.3574437408 * t); result += 1.7e-10 * qCos(3.08268671348 + 154717.609887683 * t); result += 1.6e-10 * qCos(3.95085099736 + 3097.88382272579 * t); result += 1.6e-10 * qCos(3.99041783945 + 6283.14316029419 * t); result += 2e-10 * qCos(6.10644140189 + 167283.761587666 * t); result += 1.5e-10 * qCos(4.09775914607 + 11712.9553182308 * t); result += 1.6e-10 * qCos(5.717699407 + 17298.1823273262 * t); result += 1.6e-10 * qCos(3.28894009404 + 5884.9268465832 * t); result += 1.5e-10 * qCos(5.64785377164 + 12559.038152982 * t); result += 1.6e-10 * qCos(4.4345208093 + 6283.0085396886 * t); result += 1.4e-10 * qCos(2.31721603062 + 5481.2549188676 * t); result += 1.4e-10 * qCos(4.43479032305 + 13517.8701062334 * t); result += 1.4e-10 * qCos(4.73209312936 + 7342.4577801806 * t); result += 1.2e-10 * qCos(0.64705975463 + 18073.7049386502 * t); result += 1.1e-10 * qCos(1.514433322 + 16200.7727245012 * t); result += 1.1e-10 * qCos(0.88708889185 + 21228.3920235458 * t); result += 1.4e-10 * qCos(4.50116508534 + 640.8776073822 * t); result += 1.1e-10 * qCos(4.64339996198 + 11790.6290886588 * t); result += 1.1e-10 * qCos(1.31064298246 + 4164.311989613 * t); result += 9e-11 * qCos(3.02238989305 + 23543.2305046818 * t); result += 9e-11 * qCos(2.04999402381 + 22003.9146348698 * t); result += 9e-11 * qCos(4.91488110218 + 213.299095438 * t); return result; } double GetEarthR3(double t) { double result = 0.0; result += 1.44595e-06 * qCos(4.27319435148 + 6283.0758499914 * t); result += 6.729e-08 * qCos(3.91697608662 + 12566.1516999828 * t); result += 7.74e-09; result += 2.47e-09 * qCos(3.73019298781 + 18849.2275499742 * t); result += 3.6e-10 * qCos(2.8008140905 + 6286.5989683404 * t); result += 3.3e-10 * qCos(5.62216602775 + 6127.6554505572 * t); result += 1.9e-10 * qCos(3.71292621802 + 6438.4962494256 * t); result += 1.6e-10 * qCos(4.26011484232 + 6525.8044539654 * t); result += 1.6e-10 * qCos(3.50416887054 + 6256.7775301916 * t); result += 1.4e-10 * qCos(3.62127621114 + 25132.3033999656 * t); result += 1.1e-10 * qCos(4.39200958819 + 4705.7323075436 * t); result += 1.1e-10 * qCos(5.22327127059 + 6040.3472460174 * t); result += 1e-10 * qCos(4.28045254647 + 83996.8473181119 * t); result += 9e-11 * qCos(1.56864096494 + 5507.5532386674 * t); result += 1.1e-10 * qCos(1.37795688024 + 6309.3741697912 * t); result += 1e-10 * qCos(5.19937959068 + 71430.6956181291 * t); result += 9e-11 * qCos(0.4727519993 + 6279.5527316424 * t); result += 9e-11 * qCos(0.74642756529 + 5729.506447149 * t); result += 7e-11 * qCos(2.9737489156 + 775.522611324 * t); result += 7e-11 * qCos(3.28615691021 + 7058.5984613154 * t); result += 7e-11 * qCos(2.19184402142 + 6812.766815086 * t); result += 5e-11 * qCos(3.15419034438 + 529.6909650946 * t); result += 6e-11 * qCos(4.54725567047 + 1059.3819301892 * t); result += 5e-11 * qCos(1.51104406936 + 7079.3738568078 * t); result += 7e-11 * qCos(2.98052059053 + 6681.2248533996 * t); result += 5e-11 * qCos(2.30961231391 + 12036.4607348882 * t); result += 5e-11 * qCos(3.71102966917 + 6290.1893969922 * t); return result; } double GetEarthR4(double t) { double result = 0.0; result += 3.858e-08 * qCos(2.56384387339 + 6283.0758499914 * t); result += 3.06e-09 * qCos(2.2676950123 + 12566.1516999828 * t); result += 5.3e-10 * qCos(3.44031471924 + 5573.1428014331 * t); result += 1.5e-10 * qCos(2.04794573436 + 18849.2275499742 * t); result += 1.3e-10 * qCos(2.05688873673 + 77713.7714681205 * t); result += 7e-11 * qCos(4.4121885448 + 161000.685737674 * t); result += 5e-11 * qCos(5.26154653107 + 6438.4962494256 * t); result += 5e-11 * qCos(4.07695126049 + 6127.6554505572 * t); result += 6e-11 * qCos(3.81514213664 + 149854.400134808 * t); result += 3e-11 * qCos(1.28175749811 + 6286.5989683404 * t); return result; } double GetEarthR5(double t) { double result = 0.0; result += 8.6e-10 * qCos(1.21579741687 + 6283.0758499914 * t); result += 1.2e-10 * qCos(0.65617264033 + 12566.1516999828 * t); result += 1e-11 * qCos(0.38068797142 + 18849.2275499742 * t); return result; } dde-calendar-5.14.13/calendar-common/src/lunarandfestival/celestialbodies.h000066400000000000000000000142071473346337000267020ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CELESTIALBODIES_H #define CELESTIALBODIES_H #include #include //弧度 typedef struct _MoonEclipticParameter { double Lp; double D; double M; double Mp; double F; double E; } MoonEclipticParameter; // 月地心黄经系数 typedef struct _MoonEclipticLongitudeCoeff { double D; double M; double Mp; double F; double EiA; double ErA; } MoonEclipticLongitudeCoeff; //弧度 typedef struct _EarthNutationParameter { double D; double M; double Mp; double F; double Omega; } EarthNutationParameter; //天体章动系数类型变量 typedef struct _NuationCoefficient { double D; double M; double Mp; double F; double Omega; double Sine1; double Sine2; double Cosine1; double Cosine2; } NuationCoefficient; /* 月球黄经周期项(ΣI)及距离(Σr). 黄经单位:0.000001度,距离单位:0.001千米. -------------------------------------------------- 角度的组合系数 ΣI的各项振幅A Σr的各项振幅A D M M' F (正弦振幅) (余弦振幅) -------------------------------------------------- */ static QVector MoonLongitude { {0, 0, 1, 0, 6288744, -20905355}, {2, 0, -1, 0, 1274027, -3699111}, {2, 0, 0, 0, 658314, -2955968}, {0, 0, 2, 0, 213618, -569925}, {0, 1, 0, 0, -185116, 48888}, {0, 0, 0, 2, -114332, -3149}, {2, 0, -2, 0, 58793, 246158}, {2, -1, -1, 0, 57066, -152138}, {2, 0, 1, 0, 53322, -170733}, {2, -1, 0, 0, 45758, -204586}, {0, 1, -1, 0, -40923, -129620}, {1, 0, 0, 0, -34720, 108743}, {0, 1, 1, 0, -30383, 104755}, {2, 0, 0, -2, 15327, 10321}, {0, 0, 1, 2, -12528, 0}, {0, 0, 1, -2, 10980, 79661}, {4, 0, -1, 0, 10675, -34782}, {0, 0, 3, 0, 10034, -23210}, {4, 0, -2, 0, 8548, -21636}, {2, 1, -1, 0, -7888, 24208}, {2, 1, 0, 0, -6766, 30824}, {1, 0, -1, 0, -5163, -8379}, {1, 1, 0, 0, 4987, -16675}, {2, -1, 1, 0, 4036, -12831}, {2, 0, 2, 0, 3994, -10445}, CELESTIALBODIES_H {4, 0, 0, 0, 3861, -11650}, {2, 0, -3, 0, 3665, 14403}, {0, 1, -2, 0, -2689, -7003}, {2, 0, -1, 2, -2602, 0}, {2, -1, -2, 0, 2390, 10056}, {1, 0, 1, 0, -2348, 6322}, {2, -2, 0, 0, 2236, -9884}, {0, 1, 2, 0, -2120, 5751}, {0, 2, 0, 0, -2069, 0}, {2, -2, -1, 0, 2048, -4950}, {2, 0, 1, -2, -1773, 4130}, {2, 0, 0, 2, -1595, 0}, {4, -1, -1, 0, 1215, -3958}, {0, 0, 2, 2, -1110, 0}, {3, 0, -1, 0, -892, 3258}, {2, 1, 1, 0, -810, 2616}, {4, -1, -2, 0, 759, -1897}, {0, 2, -1, 0, -713, -2117}, {2, 2, -1, 0, -700, 2354}, {2, 1, -2, 0, 691, 0}, {2, -1, 0, -2, 596, 0}, {4, 0, 1, 0, 549, -1423}, {0, 0, 4, 0, 537, -1117}, {4, -1, 0, 0, 520, -1571}, {1, 0, -2, 0, -487, -1739}, {2, 1, 0, -2, -399, 0}, {0, 0, 2, -2, -381, -4421}, {1, 1, 1, 0, 351, 0}, {3, 0, -2, 0, -340, 0}, {4, 0, -3, 0, 330, 0}, {2, -1, 2, 0, 327, 0}, {0, 2, 1, 0, -323, 1165}, {1, 1, -1, 0, 299, 0}, {2, 0, 3, 0, 294, 0}, {2, 0, -1, -2, 0, 8752}, }; static QVector nuation { {0, 0, 0, 0, 1, -171996, -174.2, 92025, 8.9}, {-2, 0, 0, 2, 2, -13187, -1.6, 5736, -3.1}, {0, 0, 0, 2, 2, -2274, -0.2, 977, -0.5}, {0, 0, 0, 0, 2, 2062, 0.2, -895, 0.5}, {0, 1, 0, 0, 0, 1426, -3.4, 54, -0.1}, {0, 0, 1, 0, 0, 712, 0.1, -7, 0}, {-2, 1, 0, 2, 2, -517, 1.2, 224, -0.6}, {0, 0, 0, 2, 1, -386, -0.4, 200, 0}, {0, 0, 1, 2, 2, -301, 0, 129, -0.1}, {-2, -1, 0, 2, 2, 217, -0.5, -95, 0.3}, {-2, 0, 1, 0, 0, -158, 0, 0, 0}, {-2, 0, 0, 2, 1, 129, 0.1, -70, 0}, {0, 0, -1, 2, 2, 123, 0, -53, 0}, {2, 0, 0, 0, 0, 63, 0, 0, 0}, {0, 0, 1, 0, 1, 63, 0.1, -33, 0}, {2, 0, -1, 2, 2, -59, 0, 26, 0}, {0, 0, -1, 0, 1, -58, -0.1, 32, 0}, {0, 0, 1, 2, 1, -51, 0, 27, 0}, {-2, 0, 2, 0, 0, 48, 0, 0, 0}, {0, 0, -2, 2, 1, 46, 0, -24, 0}, {2, 0, 0, 2, 2, -38, 0, 16, 0}, {0, 0, 2, 2, 2, -31, 0, 13, 0}, {0, 0, 2, 0, 0, 29, 0, 0, 0}, {-2, 0, 1, 2, 2, 29, 0, -12, 0}, {0, 0, 0, 2, 0, 26, 0, 0, 0}, {-2, 0, 0, 2, 0, -22, 0, 0, 0}, {0, 0, -1, 2, 1, 21, 0, -10, 0}, {0, 2, 0, 0, 0, 17, -0.1, 0, 0}, {2, 0, -1, 0, 1, 16, 0, -8, 0}, {-2, 2, 0, 2, 2, -16, 0.1, 7, 0}, {0, 1, 0, 0, 1, -15, 0, 9, 0}, {-2, 0, 1, 0, 1, -13, 0, 7, 0}, {0, -1, 0, 0, 1, -12, 0, 6, 0}, {0, 0, 2, -2, 0, 11, 0, 0, 0}, {2, 0, -1, 2, 1, -10, 0, 5, 0}, {2, 0, 1, 2, 2, -8, 0, 3, 0}, {0, 1, 0, 2, 2, 7, 0, -3, 0}, {-2, 1, 1, 0, 0, -7, 0, 0, 0}, {0, -1, 0, 2, 2, -7, 0, 3, 0}, {2, 0, 0, 2, 1, -7, 0, 3, 0}, {2, 0, 1, 0, 0, 6, 0, 0, 0}, {-2, 0, 2, 2, 2, 6, 0, -3, 0}, {-2, 0, 1, 2, 1, 6, 0, -3, 0}, {2, 0, -2, 0, 1, -6, 0, 3, 0}, {2, 0, 0, 0, 1, -6, 0, 3, 0}, {0, -1, 1, 0, 0, 5, 0, 0, 0}, {-2, -1, 0, 2, 1, -5, 0, 3, 0}, {-2, 0, 0, 0, 1, -5, 0, 3, 0}, {0, 0, 2, 2, 1, -5, 0, 3, 0}, {-2, 0, 2, 0, 1, 4, 0, 0, 0}, {-2, 1, 0, 2, 1, 4, 0, 0, 0}, {0, 0, 1, -2, 0, 4, 0, 0, 0}, {-1, 0, 1, 0, 0, -4, 0, 0, 0}, {-2, 1, 0, 0, 0, -4, 0, 0, 0}, {1, 0, 0, 0, 0, -4, 0, 0, 0}, {0, 0, 1, 2, 0, 3, 0, 0, 0}, {0, 0, -2, 2, 2, -3, 0, 0, 0}, {-1, -1, 1, 0, 0, -3, 0, 0, 0}, {0, 1, 1, 0, 0, -3, 0, 0, 0}, {0, -1, 1, 2, 2, -3, 0, 0, 0}, {2, -1, -1, 2, 2, -3, 0, 0, 0}, {0, 0, 3, 2, 2, -3, 0, 0, 0}, {2, -1, 0, 2, 2, -3, 0, 0, 0}, }; // Gregorian历TT2000年1月1日中午12点的儒略日 const double J2000 = 2451545.0; double GetEarthL0(double t); double GetEarthL1(double t); double GetEarthL2(double t); double GetEarthL3(double t); double GetEarthL4(double t); double GetEarthL5(double t); double GetEarthB0(double t); double GetEarthB1(double t); double GetEarthB2(double t); double GetEarthB3(double t); double GetEarthB4(double t); double GetEarthR0(double t); double GetEarthR1(double t); double GetEarthR2(double t); double GetEarthR3(double t); double GetEarthR4(double t); double GetEarthR5(double t); #endif // ABOUTCELESTIALBODIES_H dde-calendar-5.14.13/calendar-common/src/lunarandfestival/lunarandfestival.h000066400000000000000000000127001473346337000271050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef LUNARANDFESTIVAL_H #define LUNARANDFESTIVAL_H #include #include #include // MonthInfo 保存农历信息 typedef struct _lunarInfo { int LunarMonthName = 0; // 农历月名 int LunarMonthDays = 0; // 本月天数 double ShuoJD = 0; // 本月朔日时间 北京时间 儒略日 QDateTime ShuoTime; // 本月朔日时间 北京时间 bool IsLeap = false; // 是否为闰月 int LunarYear = 0; // 农历年 int LunarDay = 0; // 农历日 int MonthZhi = 0; // 农历日所在的月的地支 int SolarTerm = 0; // 0~23 二十四节气 ,-1 非节气 bool operator==(const _lunarInfo &info) { return this->LunarMonthName == info.LunarMonthName && this->LunarYear == info.LunarYear && this->LunarDay == info.LunarDay && this->IsLeap == info.IsLeap; } } lunarInfo; typedef struct _day { int Year; int Month; int Day; } stDay; typedef struct _LunarDayInfo { _LunarDayInfo() { LunarLeapMonth = 0; } QString GanZhiYear {}; // 农历年的干支 QString GanZhiMonth {}; // 农历月的干支 QString GanZhiDay {}; // 农历日的干支 QString LunarMonthName {}; // 农历月名 QString LunarDayName {}; // 农历日名 int32_t LunarLeapMonth = 0; // 未使用 QString Zodiac {}; // 农历年的生肖 QString Term {}; // 农历节气 QString SolarFestival {}; // 公历节日 QString LunarFestival {}; // 农历节日 int32_t Worktime = 0; // 未使用 } stLunarDayInfo; //农历 typedef struct _LunarMonthInfo { qint32 FirstDayWeek = 0; qint32 Days = 0; QList Datas {}; } LunarMonthInfo; //阳历 公历 typedef struct _SolarMonthInfo { qint32 FirstDayWeek = 0; qint32 Days = 0; QList Datas {}; } SolarMonthInfo; typedef struct DayFestival { QDateTime date; QStringList Festivals {}; } stDayFestival; // 十二月名 static QVector lunarMonthNames = {"正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "冬", "腊"}; static QVector monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 农历日名 // 月份分为大月和小月,大月三十天,小月二十九天 static QVector lunarDayNames = { "初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十" }; //农历节日 static QMap lunarFestival { {101, "春节"}, {115, "元宵节"}, {505, "端午节"}, {707, "七夕节"}, {815, "中秋节"}, {909, "重阳节"}, {1208, "腊八节"}}; // 十二生肖 static QVector Animals = {"鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"}; // 天干 static QVector TianGan = {"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"}; // 地支 static QVector DiZhi = {"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"}; //二十四节气,中文 static QVector SolarTermNames = { "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至", "小寒", "大寒", "立春", "雨水", "惊蛰", }; //二十四节气 enum solarTerms { ChunFen = 0, QingMing, GuYu, LiXia, XiaoMan, MangZhong, XiaZhi, XiaoShu, DaShu, LiQiu, ChuShu, BaiLu, QiuFen, HanLu, ShuangJiang, LiDong, XiaoXue, DaXue, DongZhi, XiaoHan, DaHan, LiChun, YuShui, JingZhe, }; typedef struct _Festival { QString name {}; int startYear = 0; } stSolarFestival; static QMap solarFestivals = { {101, "元旦"}, {214, "情人节"}, {305, "学雷锋纪念日"}, {308, "妇女节"}, {312, "植树节"}, {401, "愚人节"}, {415, "全民国家安全教育日"}, {501, "劳动节"}, {504, "青年节"}, {601, "儿童节"}, {701, "建党节,香港回归纪念日"}, {801, "建军节"}, {903, "抗日战争胜利纪念日"}, {910, "教师节"}, {1001, "国庆节"}, {1213, "南京大屠杀死难者国家公祭日"}, {1220, "澳门回归纪念"}, {1224, "平安夜"}, {1225, "圣诞节"}, {1226, "毛泽东诞辰纪念"} }; static QMap solarFestivalStarYear = { {"元旦", 1949}, {"情人节", 0}, {"学雷锋纪念日", 1963}, {"妇女节", 1975}, {"植树节", 1928}, {"愚人节", 0}, {"全民国家安全教育日", 2015}, {"劳动节", 0}, {"青年节", 1939}, {"儿童节", 1949}, {"建党节", 1941}, {"香港回归纪念日", 1997}, {"建军节", 1933}, {"抗日战争胜利纪念日", 2014}, {"教师节", 1985}, {"国庆节", 1949}, {"南京大屠杀死难者国家公祭日", 2014}, {"澳门回归纪念", 1999}, {"平安夜", 0}, {"圣诞节", 0}, {"毛泽东诞辰纪念", 1893} }; #endif // ABOUTLUNARANDFESTIVAL_H dde-calendar-5.14.13/calendar-common/src/lunarandfestival/lunarcalendar.cpp000066400000000000000000000117131473346337000267140ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "lunarcalendar.h" #include #include #include QMap LunarCalendar::glYearCache; LunarCalendar *LunarCalendar::GetLunarCalendar(qint32 year) { auto it = glYearCache.find(year); LunarCalendar *plcal = nullptr; if (it != glYearCache.end()) { plcal = it.value(); } else { plcal = new LunarCalendar(year); glYearCache.insert(year, plcal); } return plcal; } /** * @brief LunarCalendar::LogOffEmptyData //清空数据 */ void LunarCalendar::LogOffEmptyData() { QMap::iterator it = glYearCache.begin(); for (; it != glYearCache.end(); ++it) { delete it.value(); it.value() = nullptr; } glYearCache.clear(); } //指定年份内公历日期转换为农历日 lunarInfo LunarCalendar::SolarDayToLunarDay(qint32 month, qint32 day) { lunarInfo dayinfo; QDateTime dt(QDate(Year, month, day), QTime(0, 0, 0, 0), Qt::TimeSpec::UTC); int yd = dt.date().dayOfYear(); // 求月地支 int monthZhi = 0; while (monthZhi < solarTermYearDays.size()) { if (yd >= solarTermYearDays[monthZhi]) { monthZhi++; } else { break; } } dayinfo.MonthZhi = monthZhi; // 求农历年、月、日 foreach (lunarInfo lm, Months) { int dd = static_cast(deltaDays(lm.ShuoTime, dt)) + 1; if (1 <= dd && dd <= lm.LunarMonthDays) { dayinfo.LunarYear = lm.LunarYear; dayinfo.LunarMonthName = lm.LunarMonthName; dayinfo.LunarMonthDays = lm.LunarMonthDays; dayinfo.ShuoJD = lm.ShuoJD; dayinfo.ShuoTime = lm.ShuoTime; dayinfo.IsLeap = lm.IsLeap; dayinfo.LunarDay = dd; break; } } // 求二十四节气 dayinfo.SolarTerm = getSolarTermInfo(month, day); return dayinfo; } LunarCalendar::LunarCalendar(qint32 year) { Year = year; Months.reserve(13); calcProcData(); fillMonths(); calcLeapMonth(); } void LunarCalendar::calcProcData() { SolarTermJDs = get25SolarTermJDs(Year - 1, DongZhi); for (int i = 0; i < 25; i++) { SolarTermTimes.append(GetDateTimeFromJulianDay(SolarTermJDs[i])); } for (int i = 1; i < 25; i += 2) { int yd = SolarTermTimes[i].date().dayOfYear(); solarTermYearDays.append(yd); } double beijin2utc = JDBeijingTime2UTC(SolarTermJDs[0]); double tmpNewMoonJD = getNewMoonJD(beijin2utc); if (tmpNewMoonJD > SolarTermJDs[0]) { tmpNewMoonJD -= 29.53; } NewMoonJDs = get15NewMoonJDs(tmpNewMoonJD); } void LunarCalendar::fillMonths() { //采用夏历建寅,冬至所在月份为农历11月(冬月) int yuejian = 11; for (int i = 0; i < 14; i++) { lunarInfo info; if (yuejian <= 12) { info.LunarMonthName = yuejian; info.LunarYear = Year - 1; } else { info.LunarMonthName = yuejian - 12; info.LunarYear = Year; } info.ShuoJD = NewMoonJDs[i]; info.ShuoTime = GetDateTimeFromJulianDay(info.ShuoJD); double nextShuoJD = NewMoonJDs[i + 1]; QDateTime nextShuoTime = GetDateTimeFromJulianDay(nextShuoJD); info.LunarMonthDays = static_cast(deltaDays(info.ShuoTime, nextShuoTime)); Months.append(info); yuejian++; } } void LunarCalendar::calcLeapMonth() { // 根据节气计算是否有闰月,如果有闰月,根据农历月命名规则,调整月名称 if (int(NewMoonJDs[13] + 0.5) <= int(SolarTermJDs[24] + 0.5)) { // 第13月的月末没有超过冬至,说明今年需要闰一个月 int i = 1; while (i < 14) { if (int(NewMoonJDs[i + 1] + 0.5) <= int(SolarTermJDs[2 * i] + 0.5)) { //NewMoonJDs[i + 1] 是第i个农历月的下一个月的月首 //本该属于第i个月的中气如果比下一个月的月首还晚,或者与下个月的月首是同一天(民间历法),则说明第 i 个月没有中气, 是闰月 break; } i++; } if (i < 14) { // 找到闰月 //qCDebug(ServiceLogger)< #include class LunarCalendar { public: static LunarCalendar *GetLunarCalendar(qint32 year); //程序退出时情况数据 static void LogOffEmptyData(); lunarInfo SolarDayToLunarDay(qint32 month, qint32 day); private: explicit LunarCalendar(qint32 year); void calcProcData(); void fillMonths(); void calcLeapMonth(); qint32 getSolarTermInfo(qint32 month, qint32 day) const; public: private: static QMap glYearCache; int Year; // 公历年份 QVector SolarTermJDs; // 相关的 25 节气 北京时间 儒略日 QVector SolarTermTimes; // 对应 SolarTermJDs 转换为 time.Time 的时间 QVector NewMoonJDs; // 相关的 15 个朔日 北京时间 儒略日 QVector Months; // 月 QVector solarTermYearDays; // 十二节的 yearDay 列表 }; #endif // LUNARCALENDAR_H dde-calendar-5.14.13/calendar-common/src/lunarandfestival/lunardateinfo.cpp000066400000000000000000000227421473346337000267400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "lunardateinfo.h" #include "lunarcalendar.h" #include #define RECURENCELIMIT 3650 //递归次数限制 //农历一年最少有363天 const int LunarYearMiniDays = 353; LunarDateInfo::LunarDateInfo(KCalendarCore::RecurrenceRule *rruleStr, const qint64 interval) : m_recurenceRule(rruleStr) , m_dateInterval(interval) { m_rruleType = ParseRRule(m_recurenceRule->rrule()); } QMap LunarDateInfo::getRRuleStartDate(const QDate &beginDate, const QDate &endDate, const QDate &solarDate) { QMap solar; //不在范围内直接返回,开始时间小于结束时间或者需要计算的起始时间晚于结束时间 if (endDate < beginDate || solarDate > endDate) { return solar; } m_queryStartDate = beginDate; m_queryEndDate = endDate; //如果日程开始时间在查询起始时间之前 if (solarDate > m_queryStartDate) { m_queryStartDate = solarDate; } //如果是农历日程 //TODO: 重复类型 switch (m_rruleType) { case RRule_Month: //每月 solar = getAllNextMonthLunarDayBySolar(solarDate); break; case RRule_Year: //每年 solar = getAllNextYearLunarDayBySolar(solarDate); break; default: //默认不重复 break; } return solar; } //通过公历时间获取范围内该时间的农历天的具体公历日期 QMap LunarDateInfo::getAllNextMonthLunarDayBySolar(const QDate &solarDate) { QMap solar; //如果需要通过公历信息获取下一个对应农历信息对应的天 LunarCalendar *lunc = LunarCalendar::GetLunarCalendar(solarDate.year()); lunarInfo info = lunc->SolarDayToLunarDay(solarDate.month(), solarDate.day()); //计算时间为日程开始时间 QDate nextSolar = solarDate; int count = 0; while (true) { info = getNextMonthLunarDay(nextSolar, info); //如果超过范围则退出 if (addSolarMap(solar, nextSolar, count, info.LunarMonthDays)) { break; } } return solar; } QMap LunarDateInfo::getAllNextYearLunarDayBySolar(const QDate &solarDate) { QMap solar; //TODO: 需要优化 //日程的农历日期 LunarCalendar *solarDateLunar = LunarCalendar::GetLunarCalendar(solarDate.year()); lunarInfo info = solarDateLunar->SolarDayToLunarDay(solarDate.month(), solarDate.day()); //计算时间为日程开始时间 QDate bDate = solarDate; QDate beforeDate; int count = 0; //beforeDate == bDate时,两次执行结果相同,会进入死循环 while (bDate <= m_queryEndDate && beforeDate != bDate) { beforeDate = bDate; //开始时间农历日期 LunarCalendar *lunc = LunarCalendar::GetLunarCalendar(bDate.year()); lunarInfo startLunarInfo = lunc->SolarDayToLunarDay(bDate.month(), bDate.day()); //判断起始时间的农历月份是否大于日程的月份,如果大于则说明起始时间的农历年份没有对应的重复日程,直接计算下一个农历年份 if (startLunarInfo.LunarMonthName > info.LunarMonthName) { //更新起始时间 //农历一个月的天数范围为28-30,则农历月份最小时间查为(间隔月份*28)天 int miniInterval = (12 - startLunarInfo.LunarMonthName + info.LunarMonthName) * 28 - startLunarInfo.LunarDay; bDate = bDate.addDays(miniInterval); continue; } else if (startLunarInfo.LunarMonthName == info.LunarMonthName) { //如果为同一个月,判断是否都为闰月或都不是闰月 if (startLunarInfo.IsLeap == info.IsLeap) { //如果起始农历天日程农历天之前或为同一农历天 if (startLunarInfo.LunarDay <= info.LunarDay) { int intervalDay = info.LunarDay - startLunarInfo.LunarDay; //如果该农历月没有这一天,那就计算下一年 if (startLunarInfo.LunarDay + intervalDay > startLunarInfo.LunarMonthDays) { //农历一年最少有363天 bDate = bDate.addDays(LunarYearMiniDays); continue; } //如果有这一天则添加对应的日期 bDate = bDate.addDays(intervalDay); //如果超过范围则退出 if (addSolarMap(solar, bDate, count, LunarYearMiniDays)) { break; } continue; } else { //如果起始农历天在日程农历天之后,则更新到下一年 int offsetMiniDay = LunarYearMiniDays - (startLunarInfo.LunarDay - info.LunarDay); bDate = bDate.addDays(offsetMiniDay); continue; } } else { //如果起始时间为闰月 if (startLunarInfo.IsLeap) { //如果起始农历天在日程农历天之后,则更新到下一年 int offsetMiniDay = LunarYearMiniDays - (startLunarInfo.LunarDay - info.LunarDay); bDate = bDate.addDays(offsetMiniDay); continue; } //如果日程开始时间为闰月 if (info.IsLeap) { //更新起始时间的日期,更新为农历日期的下个月的初一 bDate = bDate.addDays(startLunarInfo.LunarMonthDays - startLunarInfo.LunarDay + 1); continue; } } } else { //如果起始时间的农历月份早于日期的月份 //农历一个月的天数范围为28-30 //相差的月份 int offsetMonth = info.LunarMonthName - startLunarInfo.LunarMonthName; int offsetMiniDay = 0; if (offsetMonth > 1) { //如果间隔大于一个月 offsetMiniDay = (info.LunarMonthName - startLunarInfo.LunarMonthName) * 28 - startLunarInfo.LunarDay + info.LunarDay; } else { //如果间隔等于一个月,因为前面已经判断了是否为同一个月,所以不存在间隔为0的情况 offsetMiniDay = startLunarInfo.LunarMonthDays - startLunarInfo.LunarDay + info.LunarDay; } bDate = bDate.addDays(offsetMiniDay); continue; } } return solar; } lunarInfo LunarDateInfo::getNextMonthLunarDay(QDate &nextDate, const lunarInfo &info) { LunarCalendar *lunc = LunarCalendar::GetLunarCalendar(nextDate.year()); lunarInfo nextinfo = lunc->SolarDayToLunarDay(nextDate.month(), nextDate.day()); //判断农历的天是否为重复的天,比如一月初一,加上一月份的天数应该为二月初一 //如果不一样,则说明这个月没有这一天,比如正月三十,加上正月的月份天数,到了二月份是没有三十的, if (nextinfo.LunarDay != info.LunarDay) { nextDate = nextDate.addDays(info.LunarDay - nextinfo.LunarDay); return getNextMonthLunarDay(nextDate, info); } return nextinfo; } /** * @brief ParseRRule 解析重复规则 * @param rule 规则字符串 * @return stRRuleOptions 包含重复规则相关字段的结构体 */ LunarDateInfo::LunnarRRule LunarDateInfo::ParseRRule(const QString &rule) { //无规则的不走这里判断所以此处默认rule不为空 //局部变量初始化 LunnarRRule options = RRule_None; QStringList rruleslist = rule.split(";", Qt::SkipEmptyParts); //rpeat重复规则 0 无 1 每天 2 每个工作日 3 每周 4每月 5每年 //type结束重复类型 0 永不 1 多少次结束 2 结束日期 if (rruleslist.contains("FREQ=MONTHLY")) { options = RRule_Month; } else if (rruleslist.contains("FREQ=YEARLY")) { options = RRule_Year; } return options; } bool LunarDateInfo::isWithinTimeFrame(const QDate &solarDate) { QDate endDate = solarDate.addDays(m_dateInterval); //如果日程结束时间在查询起始时间之前,或者日程开始时间在查询截止时间之后,说明不在获取范围内 return !(endDate < m_queryStartDate || solarDate > m_queryEndDate); } bool LunarDateInfo::addSolarMap(QMap &solarMap, QDate &nextDate, int &count, const int addDays) { //如果获取到的时间在查询范围内 if (isWithinTimeFrame(nextDate)) { solarMap[count] = nextDate; } count++; // 当结束重复为按多少次结束判断时,检查重复次数是否达到,达到则退出 // 当重复次数达到最大限制直接返回 // duration > 0 表示结束与次数 if ((m_recurenceRule->duration() > 0 && (m_recurenceRule->duration() - 1) < count) || count > RECURENCELIMIT) { return true; } //更新查询开始时间 nextDate = nextDate.addDays(addDays); //判断next是否有效,时间大于RRule的until //判断next是否大于查询的截止时间,这里应该比较date,而不是datetime,如果是非全天的日程,这个设计具体时间的问题,会导致返回的job个数出现问题 if ((m_recurenceRule->duration() == 0 && nextDate > m_recurenceRule->endDt().date()) || nextDate > m_queryEndDate) { return true; } return false; } dde-calendar-5.14.13/calendar-common/src/lunarandfestival/lunardateinfo.h000066400000000000000000000066731473346337000264120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef LUNARDATEINFO_H #define LUNARDATEINFO_H #include "lunarandfestival.h" #include "method_interface.h" #include "recurrencerule.h" #include #include /** * @brief The LunarDateInfo class * 农历时间,用于计算农历重复日程 */ class LunarDateInfo { public: //农历日程只支持每年和每月 enum LunnarRRule { RRule_None, //不重复 RRule_Month, //每月 RRule_Year, //每年 }; explicit LunarDateInfo(KCalendarCore::RecurrenceRule *rruleStr, const qint64 interval); /** * @brief getRRuleStartDate 获取重复农历日程开始时间(公历)集 * @param beginDate 查询的起始时间 * @param endDate 查询的截止时间 * @param solarDate 日程开始时间 * @return 日程的重复日程id和对应的开始时间 */ QMap getRRuleStartDate(const QDate &beginDate, const QDate &endDate, const QDate &solarDate); private: /** * @brief getAllNextMonthLunarDayBySolar 获取重复类型为每月的农历日程开始时间集 * @param solarDate 农历日程的开始时间 * @return 重复农历日程开始时间集 */ QMap getAllNextMonthLunarDayBySolar(const QDate &solarDate); /** * @brief getAllNextYearLunarDayBySolar 获取重复类型为每年的农历日程开始时间集 * @param solarDate 农历日程的开始时间 * @return 重复农历日程开始时间集 */ QMap getAllNextYearLunarDayBySolar(const QDate &solarDate); /** * @brief getNextMonthLunarDay 获取下个月对应的农历信息 * @param nextDate 需要计算的公历时间 * @param info 重复的农历信息 * @return 计算公历时间对应的农历信息 */ lunarInfo getNextMonthLunarDay(QDate &nextDate, const lunarInfo &info); /** * @brief ParseRRule 解析重复规则 * @param rule 重复规则 * @return */ LunnarRRule ParseRRule(const QString &rule); /** * @brief isWithinTimeFrame 是否在查询时间范围内 * @return */ bool isWithinTimeFrame(const QDate &solarDate); /** * @brief addSolarMap 将计算出来的时间添加到Map中,并更新时间和重复次数 * @param solarMap 符合要求的时间集合 * @param nextDate 重复农历日程对应的公历时间 * @param count 重复次数 * @param addDays 需要更新的天数 * @return 如果返回true表示计算出的次数或者时间超过范围,否则返回false */ bool addSolarMap(QMap &solarMap, QDate &nextDate, int &count, const int addDays); private: KCalendarCore::RecurrenceRule *m_recurenceRule; LunnarRRule m_rruleType; // stRRuleOptions m_options; QDate m_queryStartDate; QDate m_queryEndDate; qint64 m_dateInterval; //日程开始结束间隔天数 }; #endif // LUNARDATEINFO_H dde-calendar-5.14.13/calendar-common/src/lunarandfestival/lunarmanager.cpp000066400000000000000000000155521473346337000265620ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "lunarmanager.h" #include "lunarcalendar.h" #include "commondef.h" #include "pinyin/pinyinsearch.h" #include stLunarDayInfo SolarToLunar(qint32 year, qint32 month, qint32 day) { stLunarDayInfo info; LunarCalendar *pcalendar = LunarCalendar::GetLunarCalendar(year); lunarInfo lday = pcalendar->SolarDayToLunarDay(month, day); info.GanZhiYear = GetGanZhiYear(lday.LunarYear); info.GanZhiMonth = GetGanZhiMonth(year, lday.MonthZhi); info.GanZhiDay = GetGanZhiDay(year, month, day); info.LunarMonthName = GetLunarMonthName(lday.LunarMonthName, lday.IsLeap); info.LunarDayName = GetLunarDayName(lday.LunarDay); info.Term = GetSolarTermName(lday.SolarTerm); info.SolarFestival = GetSolarDayFestival(year, month, day); info.LunarFestival = GetLunarDayFestival(lday.LunarMonthName, lday.LunarDay, lday.LunarMonthDays, lday.SolarTerm); info.Zodiac = GetYearZodiac(lday.LunarYear); return info; } /** * 获取指定公历月份的农历数据 * year,month 公历年,月 * fill 是否用上下月数据补齐首尾空缺,首例数据从周日开始 */ LunarMonthInfo GetLunarMonthCalendar(qint32 year, qint32 month, bool fill) { SolarMonthInfo solarMonth = GetSolarMonthCalendar(year, month, fill); return GetLunarMonthCalendar(solarMonth); } LunarMonthInfo GetLunarMonthCalendar(const SolarMonthInfo &solarMonth) { LunarMonthInfo lunarmonth; lunarmonth.FirstDayWeek = solarMonth.FirstDayWeek; lunarmonth.Days = solarMonth.Days; foreach (stDay d, solarMonth.Datas) { stLunarDayInfo info = SolarToLunar(d.Year, d.Month, d.Day); lunarmonth.Datas.append(info); } return lunarmonth; } /** * 公历某月日历 * year,month 公历年,月 * fill 是否用上下月数据补齐首尾空缺,首例数据从周日开始(7*6阵列) */ SolarMonthInfo GetSolarMonthCalendar(qint32 year, qint32 month, bool fill) { SolarMonthInfo solarMonth; int weekday = GetWeekday(year, month); int daycount = GetSolarMonthDays(year, month); // 本月的数据 QList daysData = GetMonthDays(year, month, 1, daycount); QList YearMonth; if (fill) { if (weekday > 0) { //获取前一个月所在年份及月份(如果当前月份为1月则为前一年的十二月) YearMonth = GetPreMonth(year, month); int premonthyear = YearMonth.at(0); int premonth = YearMonth.at(1); GetSolarMonthDays(premonthyear, premonth); // 前一个月的天数 int preMonthDays = GetSolarMonthDays(premonthyear, premonth); // 要补充上去的前一个月的数据 QList preMonthCompleteDaysData = GetMonthDays(premonthyear, premonth, preMonthDays - weekday + 1, preMonthDays); preMonthCompleteDaysData.append(daysData); daysData = preMonthCompleteDaysData; } YearMonth = GetNextMonth(year, month); int nextmonthyear = YearMonth.at(0); int nextmonth = YearMonth.at(1); int count = 6 * 7 - (weekday + daycount); // 要补充上去的下一个月的数据 QList nextMonthCompleteDaysData = GetMonthDays(nextmonthyear, nextmonth, 1, count); daysData.append(nextMonthCompleteDaysData); } solarMonth.FirstDayWeek = weekday; solarMonth.Days = daycount; solarMonth.Datas = daysData; return solarMonth; } QList GetMonthDays(qint32 year, qint32 month, qint32 start, qint32 days) { QList DayInfo; for (int day = start; day <= days; day++) { stDay stday = {year, month, day}; DayInfo.append(stday); } return DayInfo; } QList GetPreMonth(qint32 year, qint32 month) { QList datas; int preYear, preMonth; if (month == 1) { preYear = year - 1; preMonth = 12; } else { preYear = year; preMonth = month - 1; } datas.append(preYear); datas.append(preMonth); return datas; } QList GetNextMonth(qint32 year, qint32 month) { QList datas; int nextYear, nextMonth; if (month == 12) { nextYear = year + 1; nextMonth = 1; } else { nextYear = year; nextMonth = month + 1; } datas.append(nextYear); datas.append(nextMonth); return datas; } /** * @brief GetFestivalsInRange 获取指定范围内的节日信息集合 * @param start 起始时间 * @param end 结束时间 */ QList GetFestivalsInRange(const QDateTime &start, const QDateTime &end) { QList festivaldays; if (start <= end) { //days为需要查询的天数,而不是两个时间的差值 int days = static_cast(start.daysTo(end) + 1); for (int i = 0; i < days; ++i) { stDayFestival stdayfestival; QDateTime tem = start.addDays(i); stdayfestival.date = tem; int year = tem.date().year(); int month = tem.date().month(); int day = tem.date().day(); LunarCalendar *pcalendar = LunarCalendar::GetLunarCalendar(year); lunarInfo lday = pcalendar->SolarDayToLunarDay(month, day); QString festival = GetSolarDayFestival(year, month, day); QStringList strfestivallist = festival.split(","); strfestivallist << GetLunarDayFestival(lday.LunarMonthName, lday.LunarDay, lday.LunarMonthDays, lday.SolarTerm); stdayfestival.Festivals = strfestivallist; festivaldays.append(stdayfestival); } } else { qCDebug(ServiceLogger) << __FUNCTION__ << "start day later than end day"; } return festivaldays; } /** * @brief FilterDayFestival 过滤节日信息 * @param festivaldays 节日信息 * @param querykey 拼音 * @return 节日信息 */ QList FilterDayFestival(QList &festivaldays, const QString &querykey) { QList m_festivaldays; pinyinsearch *search = pinyinsearch::getPinPinSearch(); for (int i = 0; i < festivaldays.size(); i++) { stDayFestival m_festivals{}; QStringList festivals = festivaldays.at(i).Festivals; QDateTime festivalsdate = festivaldays.at(i).date; for (int j = 0; j < festivals.size(); j++) { if (festivals.at(j).contains(querykey)) m_festivals.Festivals.append(festivals.at(j)); if (search->CanQueryByPinyin(querykey) && search->PinyinMatch(festivals.at(j), querykey)) m_festivals.Festivals.append(festivals.at(j)); } if (m_festivals.Festivals.isEmpty()) continue; m_festivals.date = festivalsdate; m_festivaldays.append(m_festivals); } return m_festivaldays; } void logOffEmptyData() { LunarCalendar::LogOffEmptyData(); } dde-calendar-5.14.13/calendar-common/src/lunarandfestival/lunarmanager.h000066400000000000000000000017141473346337000262220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef LUNARMANAGER_H #define LUNARMANAGER_H #include "lunarandfestival.h" #include "method_interface.h" stLunarDayInfo SolarToLunar(qint32 year, qint32 month, qint32 day); SolarMonthInfo GetSolarMonthCalendar(qint32 year, qint32 month, bool fill); LunarMonthInfo GetLunarMonthCalendar(qint32 year, qint32 month, bool fill); LunarMonthInfo GetLunarMonthCalendar(const SolarMonthInfo &solarMonth); QList GetMonthDays(qint32 year, qint32 month, qint32 start, qint32 days); QList GetPreMonth(qint32 year, qint32 month); QList GetNextMonth(qint32 year, qint32 month); QList GetFestivalsInRange(const QDateTime &start, const QDateTime &end); QList FilterDayFestival(QList &festivaldays, const QString &querykey); //清空黄历数据 void logOffEmptyData(); #endif // LUNARMANAGER_H dde-calendar-5.14.13/calendar-common/src/lunarandfestival/method_interface.cpp000066400000000000000000000623251473346337000274060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "method_interface.h" #include #include /** * @brief GetLunarMonthName 获取当天的农历月名称 * @param lunarmonthname 阴历月份 * @param isleap 是否为闰月 * @return 阴历月份 */ QString GetLunarMonthName(int lunarmonthname, bool isleap) { QString monthname = lunarMonthNames[lunarmonthname - 1]; if (isleap) { return "闰" + monthname + "月"; } return monthname + "月"; } /** * @brief GetLunarDayName 获取当天的农历日名 * @param lundayname 阴历哪一天 * @return 阴历日 */ QString GetLunarDayName(int lundayname) { return lunarDayNames[lundayname - 1]; } /** * @brief GetLunarDayFestival 获取当天的农历节日名,没有则返回空字符串 * @param monthname 公历月份 * @param lunarday 阴历日 * @param lunarmonthdays 阴历月份 * @param solarterm 第几个节气 * @return 农历节日名称 */ QString GetLunarDayFestival(int monthname, int lunarday, int lunarmonthdays, int solarterm) { int key = monthname * 100 + lunarday; if (lunarFestival.contains(key)) { return lunarFestival[key]; } // 农历腊月(十二月)的最后个一天 if (monthname == 12 && lunarday == lunarmonthdays) { return "除夕"; } if (solarterm == QingMing) { return "清明节"; } return ""; } /** * @brief GetSolarTermsName 获取二十四节气名,如果没有则返回空 * @param order 节气枚举值 * @return 节气名称 */ QString GetSolarTermName(int order) { if (0 <= order && order <= 23) { return SolarTermNames[order]; } return ""; } /** * @brief GetTianGanDiZhi 获取天干地支,将数字转换为天干地支 * @param num 需要转换的数字 * @return 天干地支 */ QString GetTianGanDiZhi(int num) { return TianGan[num % 10] + DiZhi[num % 12]; } /** * @brief GetGanZhiMonth 获取当天的月干支 * @param year 公历年 * @param monthzhi 月份的地支 * @return 天干地支 */ QString GetGanZhiMonth(int year, int monthzhi) { return GetTianGanDiZhi((year - 1900) * 12 + monthzhi + 12); } /** * @brief GetGanZhiYear 获取当天的年干支 * @param lunaryear 阴历年份 * @return 天干地支 */ QString GetGanZhiYear(int lunaryear) { return GetTianGanDiZhi(lunaryear - 1864); } /** * @brief GetGanZhiDay 获取当天的日干支 * @param year 公历年 * @param month 公历月 * @param day 公历日 * @return 天干地支 */ QString GetGanZhiDay(int year, int month, int day) { QDateTime unixDateTime = QDateTime(QDate(year, month, day), QTime(0, 0, 0, 0), Qt::TimeSpec::UTC); qint64 unixTime = unixDateTime.toMSecsSinceEpoch() / 1000; int dayCyclical = int(unixTime / 86400) + 29219 + 18; return GetTianGanDiZhi(dayCyclical); } /** * @brief GetYearZodiac 获取当天的生肖,即年份的生肖 * @param lunaryear 阴历年份 * @return 年份生肖 */ QString GetYearZodiac(int lunaryear) { return Animals[(lunaryear - 4) % 12]; } QVector get25SolarTermJDs(int year, int start) { // 从某一年的某个节气开始,连续计算25个节气,返回各节气的儒略日 // year 年份 // start 起始的节气 // 返回 25 个节气的 儒略日北京时间 int stOrder = start; QVector list; for (int i = 0; i < 25; i++) { double jd = GetSolarTermJD(year, stOrder); list.append(JDUTC2BeijingTime(jd)); if (stOrder == DongZhi) { year++; } stOrder = (stOrder + 1) % 24; } return list; } double GetEarthEclipticLongitudeForSun(double jd) { // 计算地球的日心黄经 double l = GetSunEclipticLongitudeForEarth(jd); // 计算地球的日心黄纬 double b = GetSunEclipticLatitudeForEarth(jd); // 修正章动 l += CalcEarthLongitudeNutation(GetJulianCentury(jd)); // 转换到fk5 l += Vsop2Fk5LongitudeCorrection(l, b, jd); // 转换成太阳的地心黄经 l = Mod2Pi(l + M_PI); // 计算光行差 // 计算日地距离 double r = GetSunRadiusForEarth(jd); // 太阳到地球的光行差参数 l -= SecondsToRadians(20.4898) / r; return l; } /** * 按儒略日计算地球的日心黄经 * * 参数: jd 儒略日 * 返回 地球的日心黄经,单位是弧度(rad) */ double GetSunEclipticLongitudeForEarth(double jd) { double t = GetJulianThousandYears(jd); double L0 = GetEarthL0(t); double L1 = GetEarthL1(t); double L2 = GetEarthL2(t); double L3 = GetEarthL3(t); double L4 = GetEarthL4(t); double L5 = GetEarthL5(t); double L = ((((L5 * t + L4) * t + L3) * t + L2) * t + L1) * t + L0; return Mod2Pi(L); } double GetJulianThousandYears(double jd) { //1000年的日数 const double DaysOf1000Years = 365250.0; return (jd - J2000) / DaysOf1000Years; } /** * 按儒略日计算地球的日心黄纬 * * 参数 jd 儒略日 * 返回 地球的日心黄纬,单位是弧度(rad) */ double GetSunEclipticLatitudeForEarth(double jd) { double t = GetJulianThousandYears(jd); double B0 = GetEarthB0(t); double B1 = GetEarthB1(t); double B2 = GetEarthB2(t); double B3 = GetEarthB3(t); double B4 = GetEarthB4(t); double B = ((((B4 * t) + B3) * t + B2) * t + B1) * t + B0; return B; } /** * 用于把vsop87理论算出来的经度转换成fk5目视系统的经度的修正值,参考 Jean Meeus 的 Astronomical * Algorithms 第二版(1998)第32章219页(32.3)式 * * 参数 l * vsop87经度(rad) * 参数 b * vsop87纬度(rad) * 参数 jd * 儒略日 * 返回 修正量(rad) */ double Vsop2Fk5LongitudeCorrection(double l, double b, double jd) { double t = GetJulianCentury(jd); double lp = l - ToRadians(1.397) * t - ToRadians(0.00031) * t * t; return SecondsToRadians(-0.09033 + 0.03916 * (qCos(lp) + qSin(lp)) * qTan(b)); } /** * 按照儒略日计算地球和太阳的距离 * * 参数 jd 儒略日 * 返回 地球和太阳的距离,单位是天文单位(au) */ double GetSunRadiusForEarth(double jd) { double t = GetJulianThousandYears(jd); double R0 = GetEarthR0(t); double R1 = GetEarthR1(t); double R2 = GetEarthR2(t); double R3 = GetEarthR3(t); double R4 = GetEarthR4(t); double R5 = GetEarthR5(t); double R = ((((R5 * t + R4) * t + R3) * t + R2) * t + R1) * t + R0; return R; } double NewtonIteration(double angle, double x0, bool IsGetSolarTermJD) { //此函数原是传入的匿名函数,这里用bool用作区分,后续可以优化 const double Epsilon = 1e-7; const double Delta = 5e-6; double x; auto func = [angle](double x) -> double { return ModPi(GetEarthEclipticLongitudeForSun(x) - angle); }; auto func1 = [](double x) -> double { double earth = GetEarthEclipticLongitudeForSun(x); double moon = GetMoonEclipticLongitudeEC(x); double res = ModPi(earth - moon); return res; // return ModPi(GetEarthEclipticLongitudeForSun(x) - GetMoonEclipticLongitudeEC(x)); }; while (1) { x = x0; double fx, fpx; if (IsGetSolarTermJD) { fx = func(x); // 导数 fpx = (func(x + Delta) - func(x - Delta)) / Delta / 2; } else { // fx = ModPi(GetEarthEclipticLongitudeForSun(x) - GetMoonEclipticLongitudeEC(x)); // // 导数 // fpx = (ModPi(GetEarthEclipticLongitudeForSun(x + Delta) - GetMoonEclipticLongitudeEC(x)) // - GetEarthEclipticLongitudeForSun(x - Delta) - GetMoonEclipticLongitudeEC(x)) / Delta / 2; fx = func1(x); // 导数 fpx = (func1(x + Delta) - func1(x - Delta)) / Delta / 2; } x0 = x - fx / fpx; if (qAbs(x0 - x) <= Epsilon) { break; } } return x; } double ModPi(double r) { while (r < -M_PI) { r += M_PI * 2; } while (r > M_PI) { r -= M_PI * 2; } return r; } double DmsToDegrees(int degrees, int mintues, double seconds) { return double(degrees) + double(mintues) / 60 + seconds / 3600; } double DmsToSeconds(int d, int m, double s) { return double(d) * 3600 + double(m) * 60 + s; } // DmsToRadians 把度分秒表示的角度换算成弧度(rad) double DmsToRadians(int d, int m, int s) { return ToRadians(DmsToDegrees(d, m, s)); } // GetSolarTermJD 使用牛顿迭代法计算24节气的时间 // f(x) = Vsop87dEarthUtil.getEarthEclipticLongitudeForSun(x) - angle = 0 // year 年 // order 节气序号 // 返回 节气的儒略日力学时间 TD double GetSolarTermJD(int year, int order) { const double RADIANS_PER_TERM = M_PI / 12.0; double angle = double(order) * RADIANS_PER_TERM; int month = ((order + 1) / 2 + 2) % 12 + 1; // 春分 order 0 // 3 月 20 号 int day = 6; if (order % 2 == 0) { day = 20; } double jd0 = ToJulianDateHMS(year, month, day, 12, 0, 0.0); double jd = NewtonIteration(angle, jd0, true); return jd; } // IsLeapYear 公历闰年判断 bool IsLeapYear(int year) { return ((year & 3) == 0 && year % 100 != 0) || year % 400 == 0; } // GetSolarMonthDays 获取公历月份的天数 int GetSolarMonthDays(int year, int month) { if (month == 2 && IsLeapYear(year)) { return 29; } else { return monthDays[month - 1]; } } // GetWeekday 计算Gregorian日历的星期几 // 算法摘自 http://en.wikipedia.org/wiki/Zeller%27s_congruence // 返回星期几的数字表示,1-6表示星期一到星期六,0表示星期日 int GetWeekday(int y, int m, int d) { if (m <= 2) { y -= 1; m += 12; } int c = int(y / 100); y = y % 100; int w = (d + 13 * (m + 1) / 5 + y + (y / 4) + (c / 4) - 2 * c - 1) % 7; if (w < 0) { w += 7; } return w; } // GetDeltaT 计算地球时和UTC的时差,算法摘自 // http://eclipse.gsfc.nasa.gov/SEhelp/deltatpoly2004.html NASA网站 // ∆T = TT - UT 此算法在-1999年到3000年有效 double GetDeltaT(int year, int month) { double y = double(year) + (double(month) - 0.5) / 12; if (year < -500) { double u = (double(year) - 1820) / 100; return -20 + 32 * u * u; } else if (year < 500) { double u = y / 100; double u2 = u * u; double u3 = u2 * u; double u4 = u3 * u; double u5 = u4 * u; double u6 = u5 * u; return 10583.6 - 1014.41 * u + 33.78311 * u2 - 5.952053 * u3 - 0.1798452 * u4 + 0.022174192 * u5 + 0.0090316521 * u6; } else if (year < 1600) { double u = (y - 1000) / 100; double u2 = u * u; double u3 = u2 * u; double u4 = u3 * u; double u5 = u4 * u; double u6 = u5 * u; return 1574.2 - 556.01 * u + 71.23472 * u2 + 0.319781 * u3 - 0.8503463 * u4 - 0.005050998 * u5 + 0.0083572073 * u6; } else if (year < 1700) { double t = y - 1600; double t2 = t * t; double t3 = t2 * t; return 120 - 0.9808 * t - 0.01532 * t2 + t3 / 7129; } else if (year < 1800) { double t = y - 1700; double t2 = t * t; double t3 = t2 * t; double t4 = t3 * t; return 8.83 + 0.1603 * t - 0.0059285 * t2 + 0.00013336 * t3 - t4 / 1174000; } else if (year < 1860) { double t = y - 1800; double t2 = t * t; double t3 = t2 * t; double t4 = t3 * t; double t5 = t4 * t; double t6 = t5 * t; double t7 = t6 * t; return 13.72 - 0.332447 * t + 0.0068612 * t2 + 0.0041116 * t3 - 0.00037436 * t4 + 0.0000121272 * t5 - 0.0000001699 * t6 + 0.000000000875 * t7; } else if (year < 1900) { double t = y - 1860; double t2 = t * t; double t3 = t2 * t; double t4 = t3 * t; double t5 = t4 * t; return 7.62 + 0.5737 * t - 0.251754 * t2 + 0.01680668 * t3 - 0.0004473624 * t4 + t5 / 233174; } else if (year < 1920) { double t = y - 1900; double t2 = t * t; double t3 = t2 * t; double t4 = t3 * t; return -2.79 + 1.494119 * t - 0.0598939 * t2 + 0.0061966 * t3 - 0.000197 * t4; } else if (year < 1941) { double t = y - 1920; double t2 = t * t; double t3 = t2 * t; return 21.20 + 0.84493 * t - 0.076100 * t2 + 0.0020936 * t3; } else if (year < 1961) { double t = y - 1950; double t2 = t * t; double t3 = t2 * t; return 29.07 + 0.407 * t - t2 / 233 + t3 / 2547; } else if (year < 1986) { double t = y - 1975; double t2 = t * t; double t3 = t2 * t; return 45.45 + 1.067 * t - t2 / 260 - t3 / 718; } else if (year < 2005) { double t = y - 2000; double t2 = t * t; double t3 = t2 * t; double t4 = t3 * t; double t5 = t4 * t; return 63.86 + 0.3345 * t - 0.060374 * t2 + 0.0017275 * t3 + 0.000651814 * t4 + 0.00002373599 * t5; } else if (year < 2050) { double t = y - 2000; double t2 = t * t; return 62.92 + 0.32217 * t + 0.005589 * t2; } else if (year < 2150) { double u = (y - 1820) / 100; double u2 = u * u; return -20 + 32 * u2 - 0.5628 * (2150 - y); } else { double u = (y - 1820) / 100; double u2 = u * u; return -20 + 32 * u2; } } // GetDateFromJulianDay 从儒略日中获取公历的日期 void GetDateFromJulianDay(double jd, int &yy, int &mm, int &dd) { /* * This algorithm is taken from * "Numerical Recipes in c, 2nd Ed." (1992), pp. 14-15 * and converted to integer math. * The electronic version of the book is freely available * at http://www.nr.com/ , under "Obsolete Versions - Older * book and code versions. */ const int JD_GREG_CAL = 2299161; const int JB_MAX_WITHOUT_OVERFLOW = 107374182; int64_t julian = int64_t(qFloor(jd + 0.5)); int64_t ta, jalpha, tb, tc, td, te; if (julian >= JD_GREG_CAL) { jalpha = (4 * (julian - 1867216) - 1) / 146097; ta = int64_t(julian) + 1 + jalpha - jalpha / 4; } else if (julian < 0) { ta = julian + 36525 * (1 - julian / 36525); } else { ta = julian; } tb = ta + 1524; if (tb <= JB_MAX_WITHOUT_OVERFLOW) { tc = (tb * 20 - 2442) / 7305; } else { tc = int64_t((uint64_t(tb) * 20 - 2442) / 7305); } td = 365 * tc + tc / 4; te = ((tb - td) * 10000) / 306001; dd = int(tb - td - (306001 * te) / 10000); mm = int(te - 1); if (mm > 12) { mm -= 12; } yy = int(tc - 4715); if (mm > 2) { yy--; } if (julian < 0) { yy -= int(100 * (1 - julian / 36525)); } } // GetTimeFromJulianDay 从儒略日中获取时间 时分秒 void GetTimeFromJulianDay(double jd, int &hour, int &minute, int &second) { double frac = jd - qFloor(jd); int s = int(qFloor(frac * 24.0 * 60.0 * 60.0)); hour = ((s / (60 * 60)) + 12) % 24; minute = (s / (60)) % 60; second = s % 60; } // GetDateTimeFromJulianDay 将儒略日转换为 time.Time // 其中包含了 TT 到 UTC 的转换 QDateTime GetDateTimeFromJulianDay(double jd) { int year, month, day; GetDateFromJulianDay(jd, year, month, day); // TT -> UTC jd -= GetDeltaT(year, month) / 86400; GetDateFromJulianDay(jd, year, month, day); int hour, minute, second; GetTimeFromJulianDay(jd, hour, minute, second); return QDateTime(QDate(year, month, day), QTime(hour, minute, second, 0), Qt::TimeSpec::UTC); } // JDUTC2BeijingTime 儒略日 UTC 时间转换到北京时间 double JDUTC2BeijingTime(double utcJD) { return utcJD + 8.0 / 24.0; } // JDBeijingTime2UTC 儒略日 北京时间到 UTC 时间 double JDBeijingTime2UTC(double bjtJD) { return bjtJD - 8.0 / 24.0; } double getNewMoonJD(double jd0) { return NewtonIteration(0, jd0, false); } QVector get15NewMoonJDs(double jd) { // 计算从某个时间之后的连续15个朔日 // 参数: jd 开始时间的 儒略日 // 返回 15个朔日时间 数组指针 儒略日北京时间 QVector list; for (int i = 0; i < 15; i++) { double newMoonJD = getNewMoonJD(jd); list.append(JDUTC2BeijingTime(newMoonJD)); // 转到下一个最接近朔日的时间 jd = newMoonJD + 29.53; } return list; } qint64 deltaDays(QDateTime t1, QDateTime t2) { // 计算两个时间相差的天数 // t2 > t1 结果为正数 return int(t1.date().daysTo(t2.date())); // return qint64((t2.toSecsSinceEpoch() - t1.toSecsSinceEpoch()) / 86400); } QString festivalForFatherAndMother(int year, int month, int day) { int disparityMotherDay, disparityFatherDay, fatherDay, motherDay; int leapYear = 0; for (int i = 1900; i <= year; i++) { if ((i % 400 == 0) || ((i % 100 != 0) && (i % 4 == 0))) { leapYear += 1; } } if (month == 5) { disparityMotherDay = (((year - 1899) * 365 + leapYear) - (31 + 30 + 31 + 31 + 30 + 31 + 30 + 31)) % 7; motherDay = 14 - disparityMotherDay; if (day == motherDay) { return "母亲节"; } else { return ""; } } if (month == 6) { disparityFatherDay = (((year - 1899) * 365 + leapYear) - (30 + 31 + 31 + 30 + 31 + 30 + 31)) % 7; fatherDay = 21 - disparityFatherDay; if (day == fatherDay) { return "父亲节"; } else { return ""; } } return ""; } /** * @brief GetMoonEclipticParameter 弧度计算 * @param T 儒略世纪数 * @return 弧度 */ void GetMoonEclipticParameter(MoonEclipticParameter &moonEclipticParameter, double T) { double T2 = T * T; double T3 = T2 * T; double T4 = T3 * T; /*月球平黄经*/ moonEclipticParameter.Lp = Mod2Pi(ToRadians(218.3164591 + 481267.88134236 * T - 0.0013268 * T2 + T3 / 538841.0 - T4 / 65194000.0)); /*月日距角*/ moonEclipticParameter.D = Mod2Pi(ToRadians(297.8502042 + 445267.1115168 * T - 0.0016300 * T2 + T3 / 545868.0 - T4 / 113065000.0)); /*太阳平近点角*/ moonEclipticParameter.M = Mod2Pi(ToRadians(357.5291092 + 35999.0502909 * T - 0.0001536 * T2 + T3 / 24490000.0)); /*月亮平近点角*/ moonEclipticParameter.Mp = Mod2Pi(ToRadians(134.9634114 + 477198.8676313 * T + 0.0089970 * T2 + T3 / 69699.0 - T4 / 14712000.0)); /*月球经度参数(到升交点的平角距离)*/ moonEclipticParameter.F = Mod2Pi(ToRadians(93.2720993 + 483202.0175273 * T - 0.0034029 * T2 - T3 / 3526000.0 + T4 / 863310000.0)); /* 反映地球轨道偏心率变化的辅助参量 */ moonEclipticParameter.E = 1 - 0.002516 * T - 0.0000074 * T2; } /** * @brief ToRadians 角度转换为弧度 * @param degrees 角度 * @return 弧度 */ double ToRadians(double degrees) { return degrees * M_PI / 180; } /** * @brief Mod2Pi 把角度限制在[0, 2π]之间 * @param r 角度 * @return 角度 */ double Mod2Pi(double r) { while (r < 0) { r += M_PI * 2; } while (r > 2 * M_PI) { r -= M_PI * 2; } return r; } /** * @brief CalcMoonECLongitudePeriodic 计算月球地心黄经周期项的和 * @param raDian 弧度 * @return 月球地心黄经周期项的和 */ double CalcMoonECLongitudePeriodic(MoonEclipticParameter &moonEclipticParameter) { double EI = 0.0; for (int i = 0; i < MoonLongitude.count(); i++) { double theta = MoonLongitude[i].D * moonEclipticParameter.D + MoonLongitude[i].M * moonEclipticParameter.M + MoonLongitude[i].Mp * moonEclipticParameter.Mp + MoonLongitude[i].F * moonEclipticParameter.F; EI += MoonLongitude[i].EiA * qSin(theta) * qPow(moonEclipticParameter.E, qAbs(MoonLongitude[i].M)); } return EI; } /** * @brief CalcMoonLongitudePerturbation 计算金星摄动,木星摄动以及地球扁率摄动对月球地心黄经的影响 * @param T 儒略世纪数 * @param raDian 弧度 * @return */ double CalcMoonLongitudePerturbation(double T, MoonEclipticParameter &moonEclipticParameter) { double A1 = Mod2Pi(ToRadians(119.75 + 131.849 * T)); double A2 = Mod2Pi(ToRadians(53.09 + 479264.290 * T)); return 3958.0 * qSin(A1) + 1962.0 * qSin(moonEclipticParameter.Lp - moonEclipticParameter.F) + 318.0 * qSin(A2); } /** * @brief GetMoonEclipticLongitudeEC 计算月球地心黄经 * @param julianDay 儒略日 * @return 弧度 */ double GetMoonEclipticLongitudeEC(double julianDay) { MoonEclipticParameter m_radian; double T = GetJulianCentury(julianDay); GetMoonEclipticParameter(m_radian, T); // Lp 计算是正确的 /*计算月球地心黄经周期项*/ double EI = CalcMoonECLongitudePeriodic(m_radian); /*修正金星,木星以及地球扁率摄动*/ EI += CalcMoonLongitudePerturbation(T, m_radian); double longitude = m_radian.Lp + ToRadians(EI / 1000000.0); /*计算天体章动干扰*/ longitude += CalcEarthLongitudeNutation(T); return longitude; } /** * @brief GetJulianCentury 计算儒略世纪数 * @param julianDay 儒略日 * @return 儒略世纪数 */ double GetJulianCentury(double julianDay) { // 100年的日数 const double DaysOfCentury = 36525.0; return (julianDay - J2000) / DaysOfCentury; } /** * @brief GetEarthNutationParameter 返回弧度 * @param earthNutationParameter 弧度 * @param T 儒略世纪数 * @return 弧度 */ void GetEarthNutationParameter(EarthNutationParameter &earthNutationParameter, double T) { double T2 = T * T; double T3 = T2 * T; /*平距角(如月对地心的角距离)*/ earthNutationParameter.D = ToRadians(297.85036 + 445267.111480 * T - 0.0019142 * T2 + T3 / 189474.0); /*太阳(地球)平近点角*/ earthNutationParameter.M = ToRadians(357.52772 + 35999.050340 * T - 0.0001603 * T2 - T3 / 300000.0); /*月亮平近点角*/ earthNutationParameter.Mp = ToRadians(134.96298 + 477198.867398 * T + 0.0086972 * T2 + T3 / 56250.0); /*月亮纬度参数*/ earthNutationParameter.F = ToRadians(93.27191 + 483202.017538 * T - 0.0036825 * T2 + T3 / 327270.0); /*黄道与月亮平轨道升交点黄经*/ earthNutationParameter.Omega = ToRadians(125.04452 - 1934.136261 * T + 0.0020708 * T2 + T3 / 450000.0); } double CalcEarthLongitudeNutation(double T) { EarthNutationParameter m_radian; GetEarthNutationParameter(m_radian, T); double result = 0.0; for (int i = 0; i < nuation.count(); i++) { double theta = nuation[i].D * m_radian.D + nuation[i].M * m_radian.M + nuation[i].Mp * m_radian.Mp + nuation[i].F * m_radian.F + nuation[i].Omega * m_radian.Omega; result += (nuation[i].Sine1 + nuation[i].Sine2 * T) * qSin(theta); } //乘以章动表的系数 0.0001 角秒 return result * coefficient(); } /** * @brief SecondsToDegrees 把角秒换算成角度 * @param seconds 角秒 * @return 角度 */ double SecondsToDegrees(double seconds) { return seconds / 3600; } double SecondsToRadians(double seconds) { return ToRadians(SecondsToDegrees(seconds)); } double CalcEarthObliquityNutation(double dt) { EarthNutationParameter m_radian; GetEarthNutationParameter(m_radian, dt); double result = 0.0; for (int i = 0; i < nuation.count(); i++) { double theta = nuation[i].D * m_radian.D + nuation[i].M * m_radian.M + nuation[i].Mp * m_radian.Mp + nuation[i].F * m_radian.F + nuation[i].Omega * m_radian.Omega; result += (nuation[i].Cosine1 + nuation[i].Cosine2 * dt) * qCos(theta); } //乘以章动表的系数 0.0001 角秒 return result * coefficient(); } double ToJulianDateHMS(int year, int month, int day, int hour, int minute, double second) { int jdn = ToJulianDate(year, month, day); return double(jdn) + (double(hour) - 12) / 24.0 + double(minute) / 1440.0 + second / 86400.0; } int ToJulianDate(int year, int month, int day) { int a = (14 - month) / 12; int y = year + 4800 - a; int m = month + 12 * a - 3; return day + (153 * m + 2) / 5 + 365 * y + y / 4 - y / 100 + y / 400 - 32045; } double coefficient() { return SecondsToRadians(0.0001); } double lightAberration() { return SecondsToRadians(20.4898); } //获取阳历节日 QString GetSolarDayFestival(int year, int month, int day) { QString festivals; if ((month == 5) || (month == 6)) { QString name = festivalForFatherAndMother(year, month, day); if (!name.isEmpty()) { festivals.append(name); } } int key = month * 100 + day; QString solarFestival = solarFestivals[key]; if (!solarFestival.isEmpty()) { QStringList temlist = solarFestival.split(","); for (int i = 0; i < temlist.size(); ++i) { //节日名称 QString temname = temlist.at(i); //带有节日映射的的迭代器 auto it = solarFestivalStarYear.find(temname); //保证不越界,并且节日的开始年份在year之前(包括year) if (it != solarFestivalStarYear.end() && *it <= year) { if (!festivals.isEmpty()) { festivals.append(','); } festivals.append(temname); festivals.append(','); } } } if (festivals.endsWith(',')) festivals = festivals.left(festivals.length() - 1); return festivals; } dde-calendar-5.14.13/calendar-common/src/lunarandfestival/method_interface.h000066400000000000000000000114471473346337000270520ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef METHOD_INTERFACE_H #define METHOD_INTERFACE_H #include "celestialbodies.h" #include "lunarandfestival.h" #include #include #include //获取当天的农历月名称 QString GetLunarMonthName(int lunarmonthname, bool isleap = false); //获取当天的农历日名 QString GetLunarDayName(int lundayname); //获取当天的农历节日名,没有则返回空字符串 QString GetLunarDayFestival(int monthname, int lunarday, int lunarmonthdays, int solarterm); //获取公历节日,没有则返回空字符串 QString GetSolarDayFestival(int year, int month, int day); //获取二十四节气名,如果没有则返回空 QString GetSolarTermName(int order); //获取天干地支,将数字转换为天干地支 QString GetTianGanDiZhi(int num); //获取当天的月干支 QString GetGanZhiMonth(int year, int monthzhi); //获取当天的年干支 QString GetGanZhiYear(int lunaryear); //获取当天的日干支 QString GetGanZhiDay(int year, int month, int day); //获取当天的生肖,即年份的生肖 QString GetYearZodiac(int lunaryear); QVector get25SolarTermJDs(int year, int start); //弧度计算 void GetMoonEclipticParameter(MoonEclipticParameter &moonEclipticParameter, double T); //角度转换为弧度 double ToRadians(double degrees); //把角度限制在[0, 2π]之间 double Mod2Pi(double r); //计算月球地心黄经周期项的和 double CalcMoonECLongitudePeriodic(MoonEclipticParameter &moonEclipticParameter); /*计算金星摄动,木星摄动以及地球扁率摄动对月球地心黄经的影响, T 是儒略世纪数,Lp和F单位是弧度*/ // A1 = 119.75 + 131.849 * T (4.13式) // A2 = 53.09 + 479264.290 * T (4.14式) // A3 = 313.45 + 481266.484 * T (4.15式) double CalcMoonLongitudePerturbation(double T, MoonEclipticParameter &moonEclipticParameter); //计算月球地心黄经 double GetMoonEclipticLongitudeEC(double julianDay); //计算儒略世纪数 double GetJulianCentury(double julianDay); //返回弧度 void GetEarthNutationParameter(EarthNutationParameter &earthNutationParameter, double T); //计算某时刻的黄经章动干扰量 double CalcEarthLongitudeNutation(double T); //把角秒换算成角度 double SecondsToDegrees(double seconds); //把角秒换算成弧度 double coefficient(); double SecondsToRadians(double seconds); /*计算某时刻的黄赤交角章动干扰量,dt是儒略千年数,返回值单位是度*/ // 计算某时刻的黄赤交角章动干扰量 // dt 是儒略世纪数 // 返回弧度 double CalcEarthObliquityNutation(double dt); // ToJulianDateHMS 计算Gregorian时间的儒略日数 // 算法摘自 http://en.wikipedia.org/wiki/Julian_day double ToJulianDateHMS(int year, int month, int day, int hour, int minute, double second); // ToJulianDate 计算Gregorian日期的儒略日数,以TT当天中午12点为准(结果是整数)。 // 算法摘自 http://en.wikipedia.org/wiki/Julian_day int ToJulianDate(int year, int month, int day); double GetEarthEclipticLongitudeForSun(double jd); double GetSunEclipticLongitudeForEarth(double jd); //计算儒略千年数 double GetJulianThousandYears(double jd); double GetSunEclipticLatitudeForEarth(double jd); double Vsop2Fk5LongitudeCorrection(double l, double b, double jd); double GetSunRadiusForEarth(double jd); /** * 计算修正后的太阳的地心视黄经 * * 参数 jd * 儒略日 * 返回 修正后的地心黄经(rad) */ // 常量 double lightAberration(); // NewtonIteration 牛顿迭代法求解方程的根 double NewtonIteration(double angle, double x0, bool IsGetSolarTermJD); // ModPi 把角度限制在[-π, π]之间 double ModPi(double r); // DmsToDegrees 把度分秒表示的角度换算成度 double DmsToDegrees(int degrees, int mintues, double seconds); // DmsToSeconds 把度分秒表示的角度换算成角秒(arcsecond) double DmsToSeconds(int d, int m, double s); double DmsToRadians(int d, int m, int s); double GetSolarTermJD(int year, int order); bool IsLeapYear(int year); int GetSolarMonthDays(int year, int month); int GetWeekday(int y, int m, int d = 1); double GetDeltaT(int year, int month); void GetDateFromJulianDay(double jd, int &yy, int &mm, int &dd); void GetTimeFromJulianDay(double jd, int &hour, int &minute, int &second); QDateTime GetDateTimeFromJulianDay(double jd); double JDUTC2BeijingTime(double utcJD); double JDBeijingTime2UTC(double bjtJD); double getNewMoonJD(double jd0); QVector get15NewMoonJDs(double jd); qint64 deltaDays(QDateTime t1, QDateTime t2); QString festivalForFatherAndMother(int year, int month, int day); #endif // LUNARANDFESTIVALALGORITHM_H dde-calendar-5.14.13/calendar-common/src/pinyin/000077500000000000000000000000001473346337000213365ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-common/src/pinyin/pinyindict.cpp000066400000000000000000000124601473346337000242170ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "pinyindict.h" /* 合法拼音列表 */ QVector validPinyinList = { "a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", "bie", "bin", "bing", "bo", "bu", "ca", "cai", "can", "cang", "cao", "ce", "cen", "ceng", "cha", "chai", "chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu", "chua", "chuai", "chuan", "chuang", "chui", "chun", "chuo", "ci", "cong", "cou", "cu", "cuan", "cui", "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de", "dei", "den", "deng", "di", "dia", "dian", "diao", "die", "ding", "diu", "dong", "dou", "du", "duan", "dui", "dun", "duo", "e", "en", "eng", "er", "fa", "fan", "fang", "fei", "fen", "feng", "fiao", "fo", "fou", "fu", "ga", "gai", "gan", "gang", "gao", "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan", "guang", "gui", "gun", "guo", "ha", "hai", "han", "hang", "hao", "he", "hei", "hen", "heng", "hong", "hou", "hu", "hua", "huai", "huan", "huang", "hui", "hun", "huo", "ji", "jia", "jian", "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "jun", "juan", "jue", "#NAME?", "ka", "kai", "kan", "kang", "kao", "ke", "ken", "keng", "kong", "kou", "ku", "kua", "kuai", "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang", "lao", "le", "lei", "leng", "li", "lia", "lian", "liang", "liao", "lie", "lin", "ling", "liu", "lo", "long", "lou", "lu", "luan", "lun", "luo", "lv", "lve", "ma", "mai", "man", "mang", "mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min", "ming", "miu", "mo", "mou", "mu", "na", "nai", "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ni", "nian", "niang", "niao", "nie", "nin", "ning", "niu", "nong", "nou", "nu", "nuan", "nun", "nuo", "nv", "nve", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen", "peng", "pi", "pian", "piao", "pie", "pin", "ping", "po", "pou", "pu", "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", "qing", "qiong", "qiu", "qu", "quan", "que", "qun", "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou", "ru", "rua", "ruan", "rui", "run", "ruo", "sa", "sai", "san", "sang", "sao", "se", "sen", "seng", "sha", "shai", "shan", "shang", "shao", "she", "shei", "shen", "sheng", "shi", "shou", "shu", "shua", "shuai", "shuan", "shuang", "shui", "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun", "suo", "ta", "tai", "tan", "tang", "tao", "te", "tei", "teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu", "tuan", "tui", "tun", "tuo", "wa", "wai", "wan", "wang", "wei", "wen", "weng", "wo", "wu", "xi", "xia", "xian", "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", "xu", "xuan", "xue", "xun", "ya", "yan", "yang", "yao", "ye", "yi", "yin", "ying", "yo", "yong", "you", "yu", "yuan", "yue", "yun", "za", "zai", "zan", "zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang", "zhao", "zhe", "zhei", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", "zong", "zou", "zu", "zuan", "zui", "zun", "zuo", }; // 带音标字符。 QMap phoneticSymbol = { {"ā", "a1"}, {"á", "a2"}, {"ǎ", "a3"}, {"à", "a4"}, {"ē", "e1"}, {"é", "e2"}, {"ě", "e3"}, {"è", "e4"}, {"ō", "o1"}, {"ó", "o2"}, {"ǒ", "o3"}, {"ò", "o4"}, {"ī", "i1"}, {"í", "i2"}, {"ǐ", "i3"}, {"ì", "i4"}, {"ū", "u1"}, {"ú", "u2"}, {"ǔ", "u3"}, {"ù", "u4"}, {"ü", "v"}, {"ǘ", "v2"}, {"ǚ", "v3"}, {"ǜ", "v4"}, {"ń", "n2"}, {"ň", "n3"}, {"ǹ", "n4"}, {"ḿ", "m2"}, }; dde-calendar-5.14.13/calendar-common/src/pinyin/pinyindict.h000066400000000000000000000006741473346337000236700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef PINYINDICT_H #define PINYINDICT_H #include #include //获取拼音字典 const QVector > getPinYinDictVector(); // 带音标字符。 extern QMap phoneticSymbol; /* 合法拼音列表 */ extern QVector validPinyinList; #endif // PINYINDICT_H dde-calendar-5.14.13/calendar-common/src/pinyin/pinyinsearch.cpp000066400000000000000000000157371473346337000245530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "pinyinsearch.h" #include "pinyindict.h" #include "commondef.h" #include #include #include #include pinyinsearch *pinyinsearch::m_pinyinsearch = nullptr; QMap pinyinsearch::pinyinDictVector {}; const QString kDictFile = ":/pinyin.dict"; /** * @brief pinyinsearch::pinyinsearch 构造函数,进行初始化 */ pinyinsearch::pinyinsearch() { for (int i = 0; i < validPinyinList.size(); i++) { QString key = validPinyinList[i]; validPinyinMap[key] = true; //拼音最大长度 if (key.size() > singlePinyinMaxLength) singlePinyinMaxLength = key.size(); } } pinyinsearch *pinyinsearch::getPinPinSearch() { if (m_pinyinsearch == nullptr) { //new pinyinsearch m_pinyinsearch = new pinyinsearch(); //获取拼音字典 initDict(); } return m_pinyinsearch; } /** * @brief pinyinsearch::canQueryByPinyin 拼音是否与正则表达式匹配 * @param str 拼音字符串 * @return bool值 */ bool pinyinsearch::CanQueryByPinyin(QString str) { QRegExp regexp("^[a-zA-Z]+$"); return regexp.exactMatch(str); } /** * @brief pinyinsearch::createPinyin 创建拼音字符串 * @param zh 汉字字符串 * @return 拼音字符串 */ QString pinyinsearch::CreatePinyin(const QString &zh) { //返回中文对应的拼音,汉字个数对应QList长度,每个汉字拥有的拼音个数对应QStringList长度 QList pyList = Pinyin(zh); QString pinyinStr; for (int i = 0; i < pyList.count(); i++) { //如果一个汉字有多个拼音,把“|”放在中间,以示区分 QString pyStr = pyList.at(i).join("|"); //将每个汉字的拼音放在[]中 if (!pyStr.isEmpty()) pinyinStr += "[" + pyStr + "]"; } return pinyinStr; } void pinyinsearch::initDict() { if (!pinyinDictVector.isEmpty()) { return; } QFile file(kDictFile); if (!file.open(QIODevice::ReadOnly)) { qCWarning(ServiceLogger) << "open dictFile error :" << file.error(); return; } QByteArray content = file.readAll(); file.close(); QTextStream stream(&content, QIODevice::ReadOnly); while (!stream.atEnd()) { const QString line = stream.readLine(); const QStringList items = line.split(QChar(':')); if (items.size() == 2) { pinyinDictVector.insert(items[0].toInt(nullptr, 16), items[1]); } } } /** * @brief pinyinsearch::createPinyinQuery 构造拼音查询表达式 * @param pinyin 拼音 * @return 按照汉字划分好的拼音字符串 */ QString pinyinsearch::CreatePinyinQuery(QString pinyin) const { QString expr; //对传入的拼音进行划分,例如:“nihao”->"[%ni%][%hao%]" while (pinyin.size() > 0) { //拼音最大长度 int i = singlePinyinMaxLength; if (i > pinyin.size()) { i = pinyin.size(); } while (i > 1) { //从拼音最大长度,递减截取拼音,是否在字典中 QString key = pinyin.mid(0, i); //如果拼音在字典中,则此拼音代表一个汉字的拼音,break if (validPinyinMap[key]) break; i--; } //一个汉字的拼音 QString key = pinyin.mid(0, i); //对剩下的字符串再次进行解析 pinyin = pinyin.mid(i, pinyin.size()); //对每个汉字的拼音进行区分 expr += "[%" + key + "%]"; } return expr; } /** * @brief pinyinsearch::createPinyinRegexp 构造拼音查询正则表达式 * @param pinyin 拼音 * @return 拼音的正则表达式 */ QString pinyinsearch::CreatePinyinRegexp(QString pinyin) const { QString expr; while (pinyin.size() > 0) { int i = singlePinyinMaxLength; if (i > pinyin.size()) { i = pinyin.size(); } while (i > 1) { QString key = pinyin.mid(0, i); if (validPinyinMap[key]) { break; } i--; } QString key = pinyin.mid(0, i); pinyin = pinyin.mid(i, pinyin.size()); expr += "\\[[a-z\\|]*" + key + "[a-z\\|]*\\]"; } return expr; } /** * @brief pinyinsearch::pinyinMatch 判断汉字和拼音是否匹配 * @param zh 汉字 * @param py 汉字对应的拼音 * @return bool值 */ bool pinyinsearch::PinyinMatch(const QString &zh, const QString &py) const { //获取汉字的拼音 QString zhPinyin = CreatePinyin(zh); //获取拼音的正则表达式 QString expr = CreatePinyinRegexp(py); //QRegularExpression类使用正则表达式提供模式匹配。 QRegularExpression regexp(expr); //根据给定的主题字符串匹配正则表达式,返回的QRegularExpressionMatch对象包含匹配的结果。 QRegularExpressionMatch match = regexp.match(zhPinyin); //拼音是否与正则表达式匹配 return match.hasMatch(); } /** * @brief pinyinsearch::Pinyin 获取汉字的拼音 * @param str 汉字 * @return 汉字对应的拼音 */ QList pinyinsearch::Pinyin(QString str) { QList pys {}; QStringList py; for (int i = 0; i < str.count(); i++) { //每个汉字对应的拼音 py = SinglePinyin(str.at(i)); if (py.size() > 0) { //将去掉音调的拼音添加到Qlist中 pys.append(RemoveYin(py)); } } return pys; } /** * @brief pinyinsearch::SinglePinyin 通过字典找到汉字对应的拼音 * @param index 汉字 * @return 拼音 */ QStringList pinyinsearch::SinglePinyin(QString index) { //通过汉字的编码找到对应的拼音 QString value; //查找对应的拼音 const int unicode = index.data()->unicode(); if (pinyinDictVector.contains(unicode)) { value = pinyinDictVector[index.data()->unicode()]; } QStringList pys {}; pys = value.split(","); return pys; } /** * @brief pinyinsearch::removeYin 去掉拼音中的音调 * @param pinyin 带有音调的拼音 * @return 不带音调的拼音 */ QStringList pinyinsearch::RemoveYin(QStringList pinyin) { QString str; QStringList strList; //遍历每个拼音 for (int i = 0; i < pinyin.size(); i++) { //遍历拼音中的每个字母,对带有音调的进行处理 for (int j = 0; j < pinyin.at(i).size(); j++) { QString s = pinyin.at(i).at(j); //如果有音调转换为不带音调的字母,否则使用原字母 if (phoneticSymbol.contains(s)) { str.append(phoneticSymbol[s][0]); } else { str.append(s); } } //一个拼音可能有多种音调,所以需要去重 if (!strList.contains(str)) strList.append(str); str.clear(); } return strList; } dde-calendar-5.14.13/calendar-common/src/pinyin/pinyinsearch.h000066400000000000000000000026261473346337000242110ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef PINYINSEARCH_H #define PINYINSEARCH_H #include #include class pinyinsearch { public: static pinyinsearch *getPinPinSearch(); /* 判断字符串是否只可以进行拼音查询 */ static bool CanQueryByPinyin(QString str); /* 创建拼音字符串 */ static QString CreatePinyin(const QString &zh); //初始化字典 static void initDict(); /* 构造拼音查询表达式 */ QString CreatePinyinQuery(QString pinyin) const; /* 构造拼音查询正则表达式 */ QString CreatePinyinRegexp(QString pinyin) const; /* 判断汉字和拼音是否匹配 */ bool PinyinMatch(const QString &zh, const QString &py) const; private: /* 初始化合法拼音表 */ pinyinsearch(); //获取汉字对应的拼音,不带音调 static QList Pinyin(QString str); //找到汉字对应的拼音 static QStringList SinglePinyin(QString index); //去掉拼音中的音调 static QStringList RemoveYin(QStringList pinyin); /* 单个合法拼音的最大长度 */ int singlePinyinMaxLength = 0; /* 合法单拼音表 */ QMap validPinyinMap {}; static pinyinsearch *m_pinyinsearch; //拼音字典 static QMap pinyinDictVector; }; #endif dde-calendar-5.14.13/calendar-common/src/units.cpp000066400000000000000000000040311473346337000216740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "units.h" #include #include #include #include #include #include QString dtToString(const QDateTime &dt) { QTime _offsetTime = QTime(0, 0).addSecs(dt.timeZone().offsetFromUtc(dt)); return QString("%1+%2").arg(dt.toString("yyyy-MM-ddThh:mm:ss")).arg(_offsetTime.toString("hh:mm")); } QDateTime dtConvert(const QDateTime &datetime) { QDateTime dt = datetime; dt.setOffsetFromUtc(dt.offsetFromUtc()); return dt; } QDateTime dtFromString(const QString &st) { QDateTime &&dtSt = QDateTime::fromString(st, Qt::ISODate); //转换为本地时区 return QDateTime(dtSt.date(),dtSt.time()); } QString getDBPath() { return getHomeConfigPath().append("/deepin/dde-calendar-service"); } QDate dateFromString(const QString &date) { return QDate::fromString(date, Qt::ISODate); } QString dateToString(const QDate &date) { return date.toString("yyyy-MM-dd"); } bool isChineseEnv() { return QLocale::system().name().startsWith("zh_"); } QString getHomeConfigPath() { //根据环境变量获取config目录 QString configPath = QString(qgetenv("XDG_CONFIG_HOME")); if(configPath.trimmed().isEmpty()) { configPath = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation); } return configPath; } QDir getAppConfigDir() { return QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); } QDir getAppCacheDir() { return QStandardPaths::writableLocation(QStandardPaths::CacheLocation); } QSharedPointer DownloadFile(QString url, QString filename) { auto process = QSharedPointer::create(); process->setEnvironment({"LANGUAGE=en"}); process->start("wget", { "-c", "-N", "-O", filename, url }); return process; } bool withinTimeFrame(const QDate &date) { return date.isValid() && (date.year() >= 1900 && date.year() <=2100); } dde-calendar-5.14.13/calendar-common/src/units.h000066400000000000000000000032561473346337000213510ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef UNITS_H #define UNITS_H #include #include #include #include #include #include const QString serviceBaseName = "com.deepin.dataserver.Calendar"; const QString serviceBasePath = "/com/deepin/dataserver/Calendar"; #define accountServiceInterface "com.deepin.dataserver.Calendar.Account" static const QMap GTypeColor = { {"0cecca8a-291b-46e2-bb92-63a527b77d46", "#FF5E97"}, {"10af78a1-3c25-4744-91db-6fbe5e88083b", "#FF9436"}, {"263d6c79-32b6-4b00-bf0d-741e50a9550f", "#FFDC00"}, {"35e70047-98bb-49b9-8ad8-02d1c942f5d0", "#5BDD80"}, {"406fc0df-87ce-4b3f-b1bc-65d89d791dbc", "#00B99B"}, {"5bf13e88-e99f-4975-80a8-149fe0a315e3", "#4293FF"}, {"6cfd1459-1085-47e9-8ca6-379d47ec319a", "#5D51FF"}, {"70080e96-e68d-40af-9cca-2f41021f6142", "#A950FF"}, {"8ac5c8bb-55ce-4264-8b0a-5d32116cf983", "#717171"}}; QString dtToString(const QDateTime &dt); QDateTime dtFromString(const QString &st); QString dateToString(const QDate &date); QDate dateFromString(const QString &date); //获取新数据库路径 QString getDBPath(); //是否为中文环境 bool isChineseEnv(); //获取家配置目录 QString getHomeConfigPath(); QDir getAppConfigDir(); QDir getAppCacheDir(); QSharedPointer DownloadFile(QString url, QString filename); //时间转换 QDateTime dtConvert(const QDateTime &datetime); //是否在显示时间范围内1900-2100 bool withinTimeFrame(const QDate &date); //TODO:获取系统版本(专业版,社区版等) #endif // UNITS_H dde-calendar-5.14.13/calendar-service/000077500000000000000000000000001473346337000174115ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-service/CMakeLists.txt000066400000000000000000000057771473346337000221710ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) project(dde-calendar-service) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) #安全编译参数 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong -z noexecstack -pie -fPIC -z lazy") set(APP_RES_DIR "assets") set( SERVER_SERVICE_IN "${APP_RES_DIR}/data/com.deepin.dataserver.Calendar.service.in") set( APP_SERVICE_IN "${APP_RES_DIR}/data/dde-calendar.service.in") set( SERVER_SYSTEMD_SERVICE "${APP_RES_DIR}/data/com.dde.calendarserver.calendar.service") set(APP_SYSTEMD_TIMER "${APP_RES_DIR}/data/com.dde.calendarserver.calendar.timer") set(AUTOSTART_DESKTOP "${APP_RES_DIR}/dde-calendar-service.desktop") set(HUANGLIDB "${APP_RES_DIR}/data/huangli.db") set(APP_QRC "${APP_RES_DIR}/resources.qrc") # Find the library find_package(PkgConfig REQUIRED) find_package(DtkCore REQUIRED) find_package(Qt5 COMPONENTS Core DBus Sql REQUIRED) set(LINK_LIBS Qt5::Core Qt5::DBus Qt5::Sql ${DtkCore_LIBRARIES} commondata -lpthread ) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) SUBDIRLIST(all_src ${CMAKE_CURRENT_SOURCE_DIR}/src) #Include all app own subdirectories foreach(subdir ${all_src}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/${subdir}) endforeach() file(GLOB_RECURSE CALENDARSERVICE_SRCS ${CMAKE_CURRENT_LIST_DIR}/src/*.cpp) #添加资源文件 QT5_ADD_RESOURCES(CALENDARSERVICE_SRCS ${APP_QRC}) #后端程序自动退出宏控制 if (NOT (CMAKE_BUILD_TYPE MATCHES Debug)) add_definitions(-DCALENDAR_SERVICE_AUTO_EXIT) endif() add_executable(${PROJECT_NAME} ${CALENDARSERVICE_SRCS}) target_include_directories(${PROJECT_NAME} PUBLIC ${DtkWidget_INCLUDE_DIRS} ${OBJECT_BINARY_DIR} ../calendar-common/src) target_link_libraries(${PROJECT_NAME} ${LINK_LIBS} ) set (SERVICE_INSTALL_DIR "${CMAKE_INSTALL_FULL_LIBEXECDIR}/deepin-daemon" CACHE STRING "Install dir for dde-calendar-service") target_compile_definitions(${PROJECT_NAME} PRIVATE CALENDAR_SERVICE_PATH="${SERVICE_INSTALL_DIR}" ) #修改dbus服务文件 set (EXEC_DDE_CALENDAR_SERVICE "${SERVICE_INSTALL_DIR}/dde-calendar-service" CACHE STRING "Command to execute dde-calendar-service") configure_file(${SERVER_SERVICE_IN} ${CMAKE_CURRENT_BINARY_DIR}/dbus/com.deepin.dataserver.Calendar.service @ONLY) configure_file(${APP_SERVICE_IN} ${CMAKE_CURRENT_BINARY_DIR}/assets/dde-calendar.service @ONLY) # Install files install(TARGETS ${PROJECT_NAME} DESTINATION ${SERVICE_INSTALL_DIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dbus/com.deepin.dataserver.Calendar.service DESTINATION ${CMAKE_INSTALL_DATADIR}/dbus-1/services/) install(FILES ${AUTOSTART_DESKTOP} DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/xdg/autostart/) install(FILES ${HUANGLIDB} DESTINATION ${CMAKE_INSTALL_DATADIR}/dde-calendar/data/) install(FILES ${SERVER_SYSTEMD_SERVICE} DESTINATION lib/systemd/user/) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/assets/dde-calendar.service DESTINATION lib/systemd/user/) install(FILES ${APP_SYSTEMD_TIMER} DESTINATION lib/systemd/user/) dde-calendar-5.14.13/calendar-service/README.md000066400000000000000000000000001473346337000206560ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-service/assets/000077500000000000000000000000001473346337000207135ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-service/assets/data/000077500000000000000000000000001473346337000216245ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-service/assets/data/com.dde.calendarserver.calendar.service000066400000000000000000000005461473346337000312730ustar00rootroot00000000000000[Unit] Description = dde-calendar date service After=dbus.socket Requires=dbus.socket [Service] Type = simple ExecStart = /bin/bash -c "dbus-send --session --dest=com.deepin.dataserver.Calendar /com/deepin/dataserver/Calendar/AccountManager com.deepin.dataserver.Calendar.AccountManager.updateRemindJob boolean:false" [Install] WantedBy=user-session.targetdde-calendar-5.14.13/calendar-service/assets/data/com.dde.calendarserver.calendar.timer000066400000000000000000000003531473346337000307470ustar00rootroot00000000000000[Unit] Description = dde-calendar date service [Timer] Unit = com.dde.calendarserver.calendar.service OnActiveSec = 1s OnUnitInactiveSec = 10m AccuracySec = 1us RandomizedDelaySec = 0 OnBootSec = 1m [Install] WantedBy = timers.targetdde-calendar-5.14.13/calendar-service/assets/data/com.deepin.dataserver.Calendar.service.in000077500000000000000000000001261473346337000315050ustar00rootroot00000000000000[D-BUS Service] Name=com.deepin.dataserver.Calendar Exec=@EXEC_DDE_CALENDAR_SERVICE@ dde-calendar-5.14.13/calendar-service/assets/data/dde-calendar.service.in000066400000000000000000000002151473346337000261140ustar00rootroot00000000000000[Unit] Description = dde-calendar date service [Service] ExecStart=@EXEC_DDE_CALENDAR@ Type=dbus BusName=com.deepin.Calendar Slice=app.slicedde-calendar-5.14.13/calendar-service/assets/data/huangli.db000066400000000000000000063700001473346337000235700ustar00rootroot00000000000000SQLite format 3@ .0:  R h   ) ''tablefestival_2023festival_2023CREATE TABLE festival_2023 (id TEXT NOT NULL PRIMARY KEY,month INTEGER NOT NULL,name TEXT,description TEXT, rest TEXT, list TEXT): M'indexsqlite_autoindex_festival_2023_1festival_2023(''tablefestival_2022festival_2022 CREATE TABLE festival_2022 (id TEXT NOT NULL PRIMARY KEY,month INTEGER NOT NULL,name TEXT,description TEXT, rest TEXT, list TEXT)9 M'indexsqlite_autoindex_festival_2022_1festival_2022(''tablefestival_2021festival_2021CREATE TABLE festival_2021 (id TEXT NOT NULL PRIMARY KEY,month INTEGER NOT NULL,name TEXT,description TEXT, rest TEXT, list TEXT)9M'indexsqlite_autoindex_festival_2021_1festival_2021+''tablefestival_2020festival_2020CREATE TABLE festival_2020 (id TEXT NOT NULL PRIMARY KEY,month INTEGER NOT NULL,name TEXT,description TEXT, rest TEXT, list TEXT):M'indexsqlite_autoindex_festival_2020_1festival_2020+''tablefestival_2019festival_2019CREATE TABLE festival_2019 (id TEXT NOT NULL PRIMARY KEY,month INTEGER NOT NULL,name TEXT,description TEXT, rest TEXT, list TEXT):M'indexsqlite_autoindex_festival_2019_1festival_2019h'tablehuanglihuangliCREATE TABLE huangli (id INTEGER NOT NULL PRIMARY KEY, avoid TEXT, suit TEXT) xph`XPH@80( xph`XPH@80(  x p h ` X P H @ 8 0 (    x p h ` X P H @ 8 0 (    x p h ` X P H @ 8 0 (    x p h ` X P H @ 8 0 (    x p h ` X P H @ 8 0 (    xph`XPH@80( xph`XPH@80( xph`XPH@80( xph`XPH@80( xph`XPH@80(  ݘ> ݗ] ݖxݖݕ3ݔTݓmݓݒ(ݑKݐaݐJ9!u[u2On !)"B#b$%6&Z'q(),*O+g, -#.C/[0ۮ1ۮ2ۭ3۬A4۫Z5۪{6۪7۩58ۨR9ۧo:ۧ;ۦ(<ۥF=z>?4@VApBC+DKEgFG H>Iڑ}JڑKڐ}LڏOMڏ7Nڎ OڍsPڍ Qڌ-RڋFSڊgTډUډVbWyXY5ZX[ٿp\ٿ]پ+^ٽM_ټe`ټMaٻbٻcFd_efg=hUixjk3lLmlnoاGpئeqئrإ sؤ<tؤ!uآvvآ]wءwxءyؠ1z؟S{؞k|(}G~b|02Lh׋$׊D׉`׈z׈ׇ-׆Gׅaׄyׄ׃.ׂKֽ ּ-ֻJֺgֺֹ ָ=ַXֶuֵֶ)ִE3Lf~Oc~8ՠxՠ՟՟՞;՝\՜~՜՛=՚]ՙwՙ՘+lQn (‰JÉkĉʼn(ƉElj_ȉyɉʉԄWˉԃt̉ԃ͉Ԃ.ΉԁLωԁ2ЉԀQщo҉Ӊ)ԉHՉb։׉Ӷ<؉ӵYىӴwډӴۉӳ3܉ӲR݉ӱlމӱ ߉Ӱ"ӯ=ӮYӭv4Lh~8Oi99VҙEҘbҗyҗҖ-ҕAҔXғ*ғҒ+ґF (Fc ?\y.J#B Z s  # =Rp )ЯfЯЮ Э9ЬRЫ"Ъ:ЩQШnШЧ$b! >!W"s#$)%D&a'z()ϓU*ϒw+ϒ],ϑ|-ϑ.ϐ8/ϏW0ώu1ώ2ύ.3όJ4ϋc5ϋ6D7g89j:;(?ο&@ξ@AνZBμxC:D!EAF`G{HI?J_K|LM2NKOhPͩ)QͨERͧcSͦ~TͦUͦVͥ"Wͤ@XͣaY͢{Z͢[͡0\͠M] ^)_I`dab%cCdae~fg4hPi̍ ǰ&k̋Bl̊[m̉xn̉ö.ṗJq̆`r̅{s̅t̄4u˾ov˾w˽x˼9y˻Tz˺n{˹A|˸W}˷r~˷˶*c{-F-?]wʢLʡjʡʠʟ6ʞNʝ!ʜ5ʛRʚmʚ Db}1JczJe oD " 8 O ec<1-f5m%E出行.治病.安葬.开市.会亲友.纳采.进人口.修造.动土.竖柱.上梁.祭祀.开光.塑绘.祈福.斋醮.嫁娶.安床.移徙.入宅.安香.纳畜.UEw嫁娶.移徙.入宅.开光.修饰垣墙.平治道涂.入殓.移柩.余事勿取.{EA作灶.掘井.谢土.入宅.出行.嫁娶.订盟.纳采.入殓.安床.启攒.安葬.祭祀.裁衣.会亲友.进人口.BEO作灶.祭祀.上梁.出行.沐浴.解除.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.移徙.入宅.除服.成服.移柩.破土.启攒.安葬.扫舍.修坟.伐木.纳财.交易.立券.,~'C诸事不宜.祭祀.解除.余事勿取.A}EM开仓.嫁娶.移徙.入宅.祭祀.沐浴.祈福.斋醮.订盟.纳采.裁衣.拆卸.起基.竖柱.上梁.安床.入殓.除服.成服.移柩.启攒.挂匾.求嗣.出行.合帐.造畜椆栖.b|E嫁娶.入殓.安葬.出行.塑绘.开光.沐浴.冠笄.会亲友.作灶.放水.造畜椆栖.;{)_开市.安床.祭祀.作灶.入殓.除服.余事勿取.XzE}开市.伐木.嫁娶.作梁.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.LySU祈福.嫁娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出火.塑绘.裁衣.会亲友.入学.拆卸.扫舍.造仓.挂匾.掘井.开池.结网.栽种.纳畜.破土.修坟.立碑.安葬.入殓.4x7C嫁娶.开市.安葬.破屋.坏垣.余事勿取.wE{造屋.开市.动土.破土.嫁娶.祭祀.沐浴.裁衣.出行.理发.移徙.捕捉.畋猎.放水.入宅.除服.成服.启攒.安葬.移柩.入殓.7v)W嫁娶.安葬.祭祀.安碓磑.结网.余事勿取.sua移徙.入宅.造庙.作灶.治病.安葬.祭祀.冠笄.嫁娶.会亲友.进人口.裁衣.结网.平治道涂.OtEi入宅.开光.开市.动土.嫁娶.订盟.纳采.祭祀.祈福.求嗣.会亲友.解除.出行.入学.纳财.开市.交易.立券.习艺.经络.安床.开仓.出货财.纳畜.安葬.启攒.修坟.入殓.|so探病.祭祀.出行.上梁.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲友.解除.求医.治病.入学.安床.安门.安香.出火.拆卸.扫舍.入宅.挂匾.开生坟.合寿木.破土.修坟.启攒.入殓.Hr7k破土.动土.安葬.祭祀.解除.教牛马.会亲友.余事勿取.qSk开光.嫁娶.开市.动土.破土.交易.立券.纳财.安床.裁衣.造畜椆栖.安葬.谢土.启攒.除服.成服.修坟.立碑.移柩.入殓.cpau造庙.嫁娶.出行.动土.安葬.行丧.订盟.纳采.会亲友.祭祀.斋醮.沐浴.塑绘.出火.开光.竖柱.上梁.开市.交易.立券.作梁.开柱眼.伐木.架马.安门.安床.拆卸.牧养.造畜椆栖.掘井.{oEA开市.安床.安葬.修坟.嫁娶.纳采.订盟.问名.祭祀.冠笄.裁衣.会亲友.进人口.纳财.捕捉.作灶.ena{造庙.入宅.修造.安葬.行丧.嫁娶.祭祀.沐浴.补垣.塞穴.断蚁.解除.余事勿取. mSW祈福.嫁娶.安床.入宅.造船.沐浴.开仓.出货财.开市.交易.立券.纳财.栽种.纳畜.牧养.畋猎.入殓.破土.安葬.;l7Q斋醮.嫁娶.开市.祭祀.破屋.坏垣.余事勿取.%k}]纳采.订盟.嫁娶.上梁.开市.斋醮.造屋.安门.沐浴.捕捉.畋猎.理发.整手足甲.入殓.除服.成服.破土.安葬.谢土.立碑.修坟.启攒.jE开市.出行.安葬.行丧.嫁娶.订盟.纳采.会亲友.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出火.挂匾.拆卸.置产."i)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+h'A诸事不宜.平治道涂.余事勿取.Ng)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jf)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=eQ;入宅.动土.破土.余事勿取.教牛马.余事勿取. g[C S Q D 1xD Lg%JE出行.嫁娶.入宅.安葬.开光.塑绘.裁衣.冠笄.伐木.拆卸.竖柱.上梁.开仓.会亲友.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5IE7栽种.作灶.安葬.嫁娶.祭祀.扫舍.塞穴.>HEG作灶.掘井.动土.栽种.祈福.开光.塑绘.酬神.订盟.纳采.裁衣.安床.开市.立券.入殓.除服.成服.移柩.启攒.安葬.立碑.赴任.会亲友.出行.交易.竖柱.GS_作灶.开光.嫁娶.开市.入宅.订盟.纳采.冠笄.拆卸.修造.动土.安床.入殓.除服.成服.移柩.安葬.破土.启攒.造仓.WF)栽种.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.嫁娶.裁衣.动土.起基.出火.拆卸.移徙.入宅.安香.修造.竖柱.上梁.纳畜.牧养.祈福.求嗣.解除.伐木.定磉.造屋.安门.CESE嫁娶.入宅.移徙.作灶.安葬.祭祀.沐浴.捕捉.栽种.4DE3造庙.嫁娶.伐木.安葬.祭祀.开光.塑绘.订盟.纳采.合帐.冠笄.拆卸.动土.起基.上梁.入宅.安香.开市.立券.纳财.沐浴.求嗣.出火.竖柱.安门.C)作梁.造庙.祭祀.出行.订盟.纳采.裁衣.合帐.冠笄.进人口.动土.安床.作灶.入殓.移柩.安葬.破土.结网.取渔.畋猎.B')诸事不宜.破屋.坏垣.AE 安床.嫁娶.作灶.入宅.祭祀.解除.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.谢土.沐浴.扫舍.捕捉.取渔.结网.畋猎.理发.I@赴任.祈福.求嗣.开光.塑绘.斋醮.订盟.纳采.嫁娶.拆卸.安床.入宅.安香.移柩.修坟.安葬.谢土.栽种.解除.冠笄.裁衣.移徙.修造.动土.竖柱.放水.启攒.立碑.X?So动土.作灶.入宅.开光.安床.祭祀.嫁娶.纳婿.除服.成服.入殓.移柩.3>E1作灶.出行.入宅.安葬.塑绘.开光.订盟.纳采.裁衣.合帐.冠笄.安机械.会亲友.纳财.开市.立券.交易.安床.竖柱.上梁.结网.栽种.解除.经络.,='C诸事不宜.扫舍.塞穴.余事勿取.t<a栽种.动土.安葬.掘井.修坟.探病.祭祀.会亲友.立券.交易.裁衣.合帐.嫁娶.冠笄.进人口.3;S#祭祀.嫁娶.出行.上梁.掘井.裁衣.经络.伐木.开柱眼.拆卸.修造.动土.上梁.合脊.合寿木.入殓.除服.成服.移柩.破土.安葬.启攒.修坟.立碑.4:S%纳采.动土.开市.交易.安门.开光.祈福.求嗣.出行.解除.伐木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除服.成服.移柩.谢土.纳畜.牧养.T9Eu纳财.开市.安葬.破土.理发.冠笄.嫁娶.进人口.栽种.捕捉.针灸.8E{祈福.嫁娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出火.拆卸.起基.修造.动土.上梁.移徙.造船.开市.交易.立券.纳财.j7S塑绘.开光.造桥.除服.成服.嫁娶.冠笄.祭祀.出行.会亲友.修造.动土.入殓.破土.;6EC嫁娶.移徙.开市.入宅.破屋.坏垣.余事勿取.g5S 纳采.开光.安床.嫁娶.开市.祈福.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~4=O纳畜.理发.合寿木.嫁娶.造车器.纳采.订盟.祭祀.祈福.安机械.移徙.入宅.开市.立券.破土.安葬._3E 开市.造屋.治病.作灶.嫁娶.冠笄.会亲友.安机械.纳财.交易.立券.置产.j27-移徙.入宅.栽种.纳财.开市.交易.立券.开光.针灸.会亲友.理发.安床.造仓.结网.J1Ea嫁娶.安葬.行丧.安门.祭祀.沐浴.解除.扫舍.塞穴.牧养.0)掘井.词讼.嫁娶.安床.开光.出行.祭祀.动土.出火.解除.会亲友.开市.交易.立券.挂匾.入宅.移徙.拆卸.破土.启攒.安葬./oQ嫁娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.裁衣.竖柱.上梁.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.启攒.u. o开光.掘井.针灸.出行.嫁娶.入宅.移徙.作灶.动土.祭祀.祈福.求嗣.入殓.启攒.安葬.移柩.-E 入殓.安葬.作灶.入宅.祭祀.沐浴.祈福.求嗣.斋醮.订盟.纳采.裁衣.冠笄.开市.立券.交易.纳财.沐浴.除服.谢土.出行.移柩. !2022100110!2022091009!2022060306!2022050105!2022040504!2022020102 ! 2022010101  n h   5 $ *~00w>eEG安葬.作灶.伐木.作梁.祭祀.求嗣.沐浴.酬神.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造仓.开池.经络.纳财.开市.立券.交易.结网.取渔.纳畜.捕捉.XdE}嫁娶.上梁.入宅.作灶.取渔.入殓.除服.成服.移柩.破土.安葬.立碑.;c)]作灶.安床.祈福.求嗣.斋醮.塑绘.开光.订盟.纳采.嫁娶.动土.入宅.安香.移柩.安葬.谢土.出行.沐浴.修造.竖柱.上梁.纳财.破土.解除.安门.放水.b')诸事不宜.求医.破屋.BaEO栽种.动土.开市.作灶.祭祀.祈福.酬神.订盟.纳采.冠笄.裁衣.合帐.嫁娶.安床.移徙.入宅.安香.入殓.移柩.启攒.安葬.解除.取渔.捕捉.伐木.安门.出火.]`E造屋.栽种.安葬.作灶.塑绘.开光.酬神.斋醮.订盟.纳采.裁衣.合帐.拆卸.动土.上梁.安床.安香.造庙.挂匾.会亲友.进人口.出行.修造.纳财.伐木.放水.出火.纳畜.沐浴.安门.A__5祭祀.祈福.安葬.安门.余事勿取.作灶.平治道涂.X^E}斋醮.作灶.安床.安葬.安床.合帐.入宅.问名.纳采.求嗣.祭祀.开仓.0]U掘井.祭祀.斋醮.裁衣.合帐.冠笄.订盟.纳采.嫁娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲友.出行.祈福.求嗣.立碑.上梁.放水.[\Su祭祀.祈福.移徙.嫁娶.入宅.裁衣.合帐.入殓.除服.成服.会亲友.纳财.[EQ出行.嫁娶.入宅.动土.祭祀.祈福.求嗣.酬神.裁衣.安床.立券.交易.入殓.除服.成服.移柩.谢土.启攒.EZEU安葬.上梁.入宅.作灶.祭祀.沐浴.开光.塑绘.祈福.求嗣.订盟.纳采.冠笄.裁衣.嫁娶.动土.除服.成服.移柩.破土.启攒.出行.安碓磑.放水.开市.立券.交易.&YS 伐木.作灶.安葬.取渔.入宅.塑绘.开光.祈福.求嗣.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.IX'}余事勿取.祭祀.结网.入殓.除服.成服.移柩.安葬.破土.&WE安床.栽种.治病.作灶.祭祀.冠笄.嫁娶.拆卸.修造.动土.起基.上梁.造屋.入宅.开市.开池.塞穴.入殓.除服.成服.移柩.安葬.破土._V7入宅.开市.安葬.祭祀.沐浴.求医.治病.扫舍.破屋.坏垣.解除.余事勿取.US]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.嫁娶.会亲友.进人口.牧养.捕捉.入殓.移柩.安葬.启攒.ETo+置产.造屋.合脊.开光.探病.安门.作灶.祈福.求嗣.斋醮.纳采.嫁娶.伐木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除服.成服.移柩.安葬.破土.谢土.ASEO嫁娶.祈福.掘井.安葬.祭祀.平治道涂.余事勿取.\RE开市.动土.安葬.破土.会亲友.求嗣.理发.冠笄.结网.捕捉.开光.理发.uQS'开光.嫁娶.作灶.掘井.纳畜.祭祀.祈福.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.jPS祭祀.移徙.入宅.动土.破土.纳采.会亲友.竖柱.上梁.立券.入殓.移柩.安葬.启攒.nOS嫁娶.动土.开光.造屋.破土.祭祀.祈福.求嗣.斋醮.入殓.除服.成服.移柩.安葬.启攒.qNS移徙.入宅.出火.安门.安葬.纳采.嫁娶.祭祀.祈福.出行.开市.会亲友.动土.破土.启攒.cME嫁娶.开市.安葬.破土.纳采.祭祀.祈福.出行.会亲友.修造.动土.移徙.入宅.CLSE嫁娶.安门.移徙.入宅.安葬.塞穴.结网.取渔.畋猎.QK) 破土.伐木.入殓.除服.成服.移柩.启攒.安葬.立碑.余事勿取.uJ)Q入宅.安床.塑绘.开光.出行.订盟.纳采.除服.成服.嫁娶.纳婿.入殓.移柩.启攒.安葬.立碑.3I'Q诸事不宜.解除.破屋.坏垣.余事勿取.ZE造屋.开市.作灶.入宅.祭祀.会亲友.出行.订盟.纳采.沐浴.修造.动土.祈福.斋醮.嫁娶.拆卸.安床.入殓.移柩.安葬.谢土.赴任.裁衣.竖柱.上梁.伐木.捕捉.栽种.破土.安门. + 8 [6 + S !WUO2021100110 国庆节10月1日至7日放假调休,共7天。9月26日(星期日)、10月9日(星期六)上班。拼假建议:10月8、9日请假,即可与10月10日一天的周末相连,形成10天长假。[{"date":"2021-9-26","status":2},{"date":"2021-10-1","status":1},{"date":"2021-10-2","status":1},{"date":"2021-10-3","status":1},{"date":"2021-10-4","status":1},{"date":"2021-10-5","status":1},{"date":"2021-10-6","status":1},{"date":"2021-10-7","status":1},{"date":"2021-10-9","status":2}]` !U O2021061206端午节6月12日至14日放假,共3天。拼假建议:请4天假(6月15-18日),可连休9天。[{"date":"2021-6-12","status":1},{"date":"2021-6-13","status":1},{"date":"2021-6-14","status":1}]  !oeM2021021202春节2月11日(除夕)至17日放假调休,共7天。2月7日(星期日)、2月20日(星期六)上班。拼假建议:2月18、19、20日请假,即可与2月21日一天的周末相连,形成11天奢华长假[{"date":"2021-2-7","status":2},{"date":"2021-2-11","status":1},{"date":"2021-2-12","status":1},{"date":"2021-2-13","status":1},{"date":"2021-2-14","status":1},{"date":"2021-2-15","status":1},{"date":"2021-2-16","status":1},{"date":"2021-2-17","status":1},{"date":"2021-2-20","status":2}]#!=/O2021021102除夕2月11日放假一天。农历腊月最后一天为除夕,即大年初一前夜,又称为年三十。[{"date":"2021-2-11","status":1}] +` ! _ I2021010101元旦2021年1月1日至3日放假,共3天。拼假建议:(12月30-31日/1月4-5日)请假,连休5天[{"date":"2021-1-1","status":1},{"date":"2021-1-2","status":1},{"date":"2021-1-3","status":1}]W !#g2021091909 中秋节9月19日至21日放假调休,共3天。9月18日(星期六)上班。拼假建议:9月22、23、24日请假,即可与9月25、26日两天的周末相连,形成8天长假。[{"date":"2021-9-18","status":2},{"date":"2021-9-19","status":1},{"date":"2021-9-20","status":1},{"date":"2021-9-21","status":1}]@ !SUC2021050105劳动节5月1日至5日放假调休,共5天。4月25日(星期日)、5月8日(星期六)上班。拼假建议:5月6、7、8日请假,即可与5月9日一天的周末相连,形成8天长假。[{"date":"2021-4-25","status":2},{"date":"2021-5-1","status":1},{"date":"2021-5-2","status":1},{"date":"2021-5-3","status":1},{"date":"2021-5-4","status":1},{"date":"2021-5-5","status":1},{"date":"2021-5-8","status":2}]_ !]I2021040304清明节4月3日至5日放假调休,共3天。拼假建议:请4天假(4月6-9日),可连休9天。[{"date":"2021-4-3","status":1},{"date":"2021-4-4","status":1},{"date":"2021-4-5","status":1}] zz!2021100110!2021021102 !2021091909!2021061206!2021050105!2021040304!2021021202 ! 2021010101  Q > =! O2022100110 国庆节[{"date":"2022-10-1","status":1},{"date":"2022-10-2","status":1},{"date":"2022-10-3","status":1},{"date":"2022-10-4","status":1},{"date":"2022-10-5","status":1},{"date":"2022-10-6","status":1},{"date":"2022-10-7","status":1},{"date":"2022-10-8","status":2},{"date":"2022-10-9","status":2}]}! O2022091009 中秋节[{"date":"2022-9-10","status":1},{"date":"2022-9-11","status":1},{"date":"2022-9-12","status":1}]z! I2022060306端午节[{"date":"2022-6-3","status":1},{"date":"2022-6-4","status":1},{"date":"2022-6-5","status":1}]x! E2022050105劳动节[{"date":"2022-4-24","status":2},{"date":"2022-4-30","status":1},{"date":"2022-5-1","status":1},{"date":"2022-5-2","status":1},{"date":"2022-5-3","status":1},{"date":"2022-5-4","status":1},{"date":"2022-5-7","status":2}]! 2022040504清明节[{"date":"2022-4-2","status":2},{"date":"2022-4-3","status":1},{"date":"2022-4-4","status":1},{"date":"2022-4-5","status":1}]4! C2022020102春节[{"date":"2022-1-29","status":2},{"date":"2022-1-30","status":2},{"date":"2022-1-31","status":1},{"date":"2022-2-1","status":1},{"date":"2022-2-2","status":1},{"date":"2022-2-3","status":1},{"date":"2022-2-4","status":1},{"date":"2022-2-5","status":1},{"date":"2022-2-6","status":1}]v!  I2022010101元旦[{"date":"2022-1-1","status":1},{"date":"2022-1-2","status":1},{"date":"2022-1-3","status":1}] R m g [ B q3uݘO m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ݘNSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ݘM'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ݘLEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ݘKEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PݘJaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cݘIS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KݘHSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SݘGaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ݘFa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ݘEE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XݘDE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ݘCS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ݘBa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.WݘAa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ݘ@S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rݘ?o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服. mb  <  Nk;m]ݘ>Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.Uݘ=oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.Tݘ<Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iݘ;';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ݘ: U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vݘ9[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ݘ8会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ݘ7oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ݘ6S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ݘ5)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ݘ4Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ݘ3E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ݘ2Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qݘ1a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SݗjSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ݗiS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ݗhaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ݗg5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ݗf伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ݗe'C诸事不宜.解除.扫舍.余事勿取.ݗdEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ݗc'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ݗb'C诸事不宜.祭祀.解除.余事勿取.ݗaa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ݗ`'O诸事不宜.祭祀.修饰垣墙.余事勿取. ݗ_5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ݗ^a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种. Je _  S : i + Q7 }<;ݗ]'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ݗ\aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ݗ[5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mݗZ37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ݗY'C诸事不宜.解除.坏垣.余事勿取.ݗXa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ݗW'Q诸事不宜.治病.破屋.坏垣.余事勿取.RݗV) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ݗU)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ݗT'A诸事不宜.平治道涂.余事勿取.NݗS)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JݗR)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ݗQQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ݗP)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.JݗO)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ݗN)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uݗM m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ݗSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ݗ'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ݗEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ݗEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PݗaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cݗS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KݗSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SݗaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ݖa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ݖ~E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.Xݖ}E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ݖ|S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ݖ{a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wݖza_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ݖyS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅. wF~M   " + JTm%Jrݖxo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ݖwSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UݖvoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TݖuKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iݖt';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ݖs U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vݖr[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ݖq会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ݖpoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ݖoS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ݖn)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ݖmKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ݖlE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ݖkSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qݖja嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SݖiSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ݖ"S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ݖ!aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ݖ 5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ݖ伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ݖ'C诸事不宜.解除.扫舍.余事勿取.ݖEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ݖ'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ݖ'C诸事不宜.祭祀.解除.余事勿取.ݖa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜. ![wq e L { = cIN8[2ݖ'O诸事不宜.祭祀.修饰垣墙.余事勿取. ݖ5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ݖa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ݖ'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ݖaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ݖ5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mݖ37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ݖ'C诸事不宜.解除.坏垣.余事勿取.ݖa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ݖ'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rݖ) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ݖ)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ݖ 'A诸事不宜.平治道涂.余事勿取.Nݖ )嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jݖ )}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ݖ Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ݖ )S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jݖ)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ݖ)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uݖ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ݖSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ݕ?'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ݕ>EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ݕ=EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.Pݕ<aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cݕ;S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.Kݕ:SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.Sݕ9aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ݕ8a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ݕ7E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.Xݕ6E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ݕ5S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ݕ4a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水. g@  R o?qygWݕ3a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ݕ2S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rݕ1o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ݕ0Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.Uݕ/oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.Tݕ.Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iݕ-';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ݕ, U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vݕ+[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ݕ*会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ݕ)oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ݕ(S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ݕ')Q移徙.入宅.破屋.坏垣.治病.余事勿取.ݕ&Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ݕ%E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ݕ$Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qݕ#a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.Sݕ"Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ݕ!S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ݔ[aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ݔZ5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ݔY伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ݔX'C诸事不宜.解除.扫舍.余事勿取.ݔWEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ݔV'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ݔU'C诸事不宜.祭祀.解除.余事勿取. ![ -   = y :-c!OPzI._[ݔTa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ݔS'O诸事不宜.祭祀.修饰垣墙.余事勿取. ݔR5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ݔQa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ݔP'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ݔOaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ݔN5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mݔM37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ݔL'C诸事不宜.解除.坏垣.余事勿取.ݔKa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ݔJ'Q诸事不宜.治病.破屋.坏垣.余事勿取.RݔI) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ݔH)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ݔG'A诸事不宜.平治道涂.余事勿取.NݔF)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JݔE)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ݔDQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ݔC)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.JݔB)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ݔA)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uݔ@ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ݔ?SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ݔ>'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ݔ=EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ݓvEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PݓuaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cݓtS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KݓsSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SݓraW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ݓqa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ݓpE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XݓoE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ݓnS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑. j2 | i ݓma5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wݓla_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ݓkS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rݓjo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ݓiSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UݓhoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TݓgKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iݓf';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ݓe U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vݓd[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ݓc会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ݓboQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ݓaS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ݓ`)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ݓ_Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ݓ^E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ݓ]Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qݓ\a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.Sݓ[Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ݓZS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ݓYaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ݓ5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ݓ伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马. #Q8 g ~ ) O 5 {:$~GN,ݓ'C诸事不宜.解除.扫舍.余事勿取.ݓEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ݓ'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ݓ'C诸事不宜.祭祀.解除.余事勿取.ݓ a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ݓ 'O诸事不宜.祭祀.修饰垣墙.余事勿取. ݓ 5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ݓ a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ݓ 'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ݓaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ݓ5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mݓ37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ݓ'C诸事不宜.解除.坏垣.余事勿取.ݓa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ݓ'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rݓ) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ݓ)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ݓ'A诸事不宜.平治道涂.余事勿取.Nݒ)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jݒ~)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ݒ}Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ݒ|)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jݒ{)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ݒz)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uݒy m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ݒxSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ݒw'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ݒvEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ݒuEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.Pݒ.aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cݒ-S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.Kݒ,SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.Sݒ+aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ݒ*a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ݒ)E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种. ;^D k t  / Z aeHn19';Xݒ(E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ݒ'S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ݒ&a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wݒ%a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ݒ$S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rݒ#o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ݒ"Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.Uݒ!oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.Tݒ Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iݒ';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ݒ U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vݒ[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ݒ会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ݒoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ݒS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ݒ)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ݒKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ݒE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ݒSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qݒa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SݒSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ݒS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ݒaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ݒ5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土. #? - O L ? u 3ab*[@q-m<tCݑK伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ݑJ'C诸事不宜.解除.扫舍.余事勿取.ݑIEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ݑH'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ݑG'C诸事不宜.祭祀.解除.余事勿取.ݑFa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ݑE'O诸事不宜.祭祀.修饰垣墙.余事勿取. ݑD5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ݑCa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ݑB'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ݑAaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ݑ@5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mݑ?37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ݑ>'C诸事不宜.解除.坏垣.余事勿取.ݑ=a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ݑ<'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rݑ;) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ݑ:)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ݑ9'A诸事不宜.平治道涂.余事勿取.Nݑ8)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jݑ7)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ݑ6Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ݑ5)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jݑ4)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ݑ3)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uݑ2 m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ݑ1SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ݑ0'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ݑ/EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ݑ.EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.Pݑ-aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cݐeS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KݐdSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SݐcaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ݐba%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴. | J g 7 iq_s)ݐaE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.Xݐ`E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ݐ_S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ݐ^a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wݐ]a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ݐ\S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rݐ[o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ݐZSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UݐYoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TݐXKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iݐW';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ݐV U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vݐU[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ݐT会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ݐSoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ݐRS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ݐQ)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ݐPKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ݐOE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ݐNSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qݐMa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SݐLSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ݐKS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟. 'sEz+ M J = s 1 _`(Y>o+k:rA sݐJaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ݐI5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ݐ伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ݐ'C诸事不宜.解除.扫舍.余事勿取.ݐEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ݐ'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ݏ'C诸事不宜.祭祀.解除.余事勿取.ݏ~a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ݏ}'O诸事不宜.祭祀.修饰垣墙.余事勿取. ݏ|5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ݏ{a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ݏz'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ݏyaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ݏx5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mݏw37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ݏv'C诸事不宜.解除.坏垣.余事勿取.ݏua_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ݏt'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rݏs) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ݏr)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ݏq'A诸事不宜.平治道涂.余事勿取.Nݏp)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jݏo)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ݏnQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ݏm)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jݏl)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ݏk)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uݏj m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ݏiSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ݏh'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ݏgEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ݏfEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PݏeaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.J?)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=>Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5=)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J<)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<;)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u: m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. b  .>z; 9SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:8'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>7EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.6EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P5aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c4S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K3SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S2aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;1a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)0E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X/E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍..S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.-a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W,a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0+S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r*o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.])Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U(oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T'Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i&';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)% U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v$[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.#会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网."oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑. !5 { :  $ ~ GN\Bir-X7!S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4Z)Q移徙.入宅.破屋.坏垣.治病.余事勿取.YKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]XE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]WSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qVa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SUSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.TS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.SaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.R5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.Q伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,P'C诸事不宜.解除.扫舍.余事勿取.OEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:N'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,M'C诸事不宜.祭祀.解除.余事勿取.La5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2K'O诸事不宜.祭祀.修饰垣墙.余事勿取. J5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.Ia_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;H'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. GaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#F5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mE37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,D'C诸事不宜.解除.坏垣.余事勿取.Ca_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3B'Q诸事不宜.治病.破屋.坏垣.余事勿取.RA) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."@)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+?'A诸事不宜.平治道涂.余事勿取.N>)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J=)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=wQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5v)S入宅.安葬.出行.沐浴.理发.补垣.塞穴. <bf I o 2 : (<teFpEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.oEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PnaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cmS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KlSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SkaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ja%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)iE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XhE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.gS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.fa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wea_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0dS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rco开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]bSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UaoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T`Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i_';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)^ U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v][嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.\会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网. y^./ Y ( ~ > : AzB y[oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ZS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4Y)Q移徙.入宅.破屋.坏垣.治病.余事勿取.Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门. S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟. aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁. 5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土. 伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马., 'C诸事不宜.解除.扫舍.余事勿取.EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,'C诸事不宜.祭祀.解除.余事勿取.a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2'O诸事不宜.祭祀.修饰垣墙.余事勿取. 5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m~37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,}'C诸事不宜.解除.坏垣.余事勿取.|a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3{'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rz) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."y)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+x'A诸事不宜.平治道涂.余事勿取.Nw)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jv)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜. ^U 2 " =7+jAXzwj)^=uQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5/)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J.)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<-)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u, m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. +SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:*'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>)EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.(EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P'aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c&S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K%SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S$aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;#a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)"E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X!E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍. S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.ro开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.) U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑. X+ P  r L^{K会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4)Q移徙.入宅.破屋.坏垣.治病.余事勿取.Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]KE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]JSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qIa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SHSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.GS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.FaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.E5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.D伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,C'C诸事不宜.解除.扫舍.余事勿取.BEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:A'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,@'C诸事不宜.祭祀.解除.余事勿取.?a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2>'O诸事不宜.祭祀.修饰垣墙.余事勿取. =5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.<a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;;'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. :aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#95嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m837伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,7'C诸事不宜.解除.坏垣.余事勿取.6a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.35'Q诸事不宜.治病.破屋.坏垣.余事勿取.R4) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."3)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬. Q .  9 3'f=Tvsf%Z +2'A诸事不宜.平治道涂.余事勿取.N1)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J0)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=/Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5.)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J-)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.bEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.aEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P`aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c_S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K^SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S]aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;\a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)[E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XZE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.YS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.Xa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.WWa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0VS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rUo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]TSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.USoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TRKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iQ';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)P U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖. b1 G  C  J  K vO[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.N会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.MoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7LS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4K)Q移徙.入宅.破屋.坏垣.治病.余事勿取.JKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]IE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.~5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.}伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,|'C诸事不宜.解除.扫舍.余事勿取.{EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:z'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,y'C诸事不宜.祭祀.解除.余事勿取.xa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2w'O诸事不宜.祭祀.修饰垣墙.余事勿取. v5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ua_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;t'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. saA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#r5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mq37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,p'C诸事不宜.解除.坏垣.余事勿取.oa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池. n&K ; V P D+ZqBw(n3n'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rm) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."l)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+k'A诸事不宜.平治道涂.余事勿取.Nj)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Ji)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=hQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5g)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jf)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.ro开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.] Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖. V x   R dQi ';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)  U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4)Q移徙.入宅.破屋.坏垣.治病.余事勿取.Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q;a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.S:Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.9S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.8aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.75嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.6伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,5'C诸事不宜.解除.扫舍.余事勿取.4EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:3'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,2'C诸事不宜.祭祀.解除.余事勿取.1a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.20'O诸事不宜.祭祀.修饰垣墙.余事勿取. /5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种..a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;-'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ,aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#+5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m*37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍. y%  0 *  ] 4Kmj]QHy,)'C诸事不宜.解除.坏垣.余事勿取.(a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3''Q诸事不宜.治病.破屋.坏垣.余事勿取.R&) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."%)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+$'A诸事不宜.平治道涂.余事勿取.N#)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J")}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=!Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5 )S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. TSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:S'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>REG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.QEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PPaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cOS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KNSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SMaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;La%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)KE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XJE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.IS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.Ha5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.WGa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0FS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rEo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]DSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UCoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬. q1 - 4  m 5  l#TBKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iA';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)@ U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v?[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.>会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.=oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7<S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4;)Q移徙.入宅.破屋.坏垣.治病.余事勿取.:Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]9E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]sSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qra嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SqSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.pS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.oaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.n5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.m伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,l'C诸事不宜.解除.扫舍.余事勿取.kEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:j'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,i'C诸事不宜.祭祀.解除.余事勿取.ha5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2g'O诸事不宜.祭祀.修饰垣墙.余事勿取. f5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ea_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;d'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. caA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种. t@  R o?2g^t#b5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.ma37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,`'C诸事不宜.解除.坏垣.余事勿取._a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3^'Q诸事不宜.治病.破屋.坏垣.余事勿取.R]) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."\)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+['A诸事不宜.平治道涂.余事勿取.NZ)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JY)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=XQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5W)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.JV)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.nUS嫁娶.入宅.作灶.纳采.订盟.祭祀.斋醮.入殓.破土.启攒.安葬.修坟.立碑.除服.成服.v/[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑..会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.-oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7,S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4+)Q移徙.入宅.破屋.坏垣.治病.余事勿取.*Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.])E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.](Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q'a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.S&Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.%S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.$aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.#5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土."伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,!'C诸事不宜.解除.扫舍.余事勿取. EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,'C诸事不宜.祭祀.解除.余事勿取. ![ -   = y :-c!OPzI._[a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2'O诸事不宜.祭祀.修饰垣墙.余事勿取. 5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,'C诸事不宜.解除.坏垣.余事勿取.a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3'Q诸事不宜.治病.破屋.坏垣.余事勿取.R) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅.")+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+J'A诸事不宜.平治道涂.余事勿取.NI)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JH)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=GQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5F)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.JE)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.@EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.?EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P>aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c=S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K<SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S;aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;:a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)9E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X8E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.7S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑. j2 | i 6a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W5a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.04S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r3o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]2Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U1oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T0Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i/';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.). U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v-[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.g会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.foQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7eS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4d)Q移徙.入宅.破屋.坏垣.治病.余事勿取.cKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]bE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]aSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q`a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.S_Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.^S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.]aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.\5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.[伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马. #Q8 g ~ ) O 5 {:$~GN,Z'C诸事不宜.解除.扫舍.余事勿取.YEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:X'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,W'C诸事不宜.祭祀.解除.余事勿取.Va5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2U'O诸事不宜.祭祀.修饰垣墙.余事勿取. T5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.Sa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;R'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. QaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#P5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mO37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,N'C诸事不宜.解除.坏垣.余事勿取.Ma_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3L'Q诸事不宜.治病.破屋.坏垣.余事勿取.RK) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."J)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+I'A诸事不宜.平治道涂.余事勿取.N)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J~)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<})a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u| m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. {SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:z'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>yEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.xEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PwaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cvS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KuSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.StaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;sa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)rE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种. ;^D k t  / Z aeHn19';XqE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.pS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.oa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wna_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0mS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rlo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]kSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UjoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TiKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.ih';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)g U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vf[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.e会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4)Q移徙.入宅.破屋.坏垣.治病.余事勿取.Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土. #? - O L ? u 3ab*[@q-m<tC伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,'C诸事不宜.解除.扫舍.余事勿取.EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,'C诸事不宜.祭祀.解除.余事勿取.a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2'O诸事不宜.祭祀.修饰垣墙.余事勿取. 5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种. a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.; 'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.# 5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,'C诸事不宜.解除.坏垣.余事勿取.a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3'Q诸事不宜.治病.破屋.坏垣.余事勿取.R) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅.")+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+'A诸事不宜.平治道涂.余事勿取.N)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J;)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=:Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.59)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J8)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<7)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u6 m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. 5SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:4'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>3EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.2EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P1aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c0S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K/SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S.aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;-a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴. | J g 7 iq_s),E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X+E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.*S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.)a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W(a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0'S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r&o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]%Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U$oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T#Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i"';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)! U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v [嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4V)Q移徙.入宅.破屋.坏垣.治病.余事勿取.UKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]TE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]SSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qRa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SQSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.PS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟. #/F h e X  L z{CtYFU\$OaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.N5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.M伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,L'C诸事不宜.解除.扫舍.余事勿取.KEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:J'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,I'C诸事不宜.祭祀.解除.余事勿取.Ha5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2G'O诸事不宜.祭祀.修饰垣墙.余事勿取. F5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.Ea_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;D'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. CaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#B5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mA37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,@'C诸事不宜.解除.坏垣.余事勿取.?a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3>'Q诸事不宜.治病.破屋.坏垣.余事勿取.R=) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."<)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+;'A诸事不宜.平治道涂.余事勿取.N:)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J9)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=sQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5r)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jq)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.lEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.kEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PjaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.ciS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KhSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.   ( 2 K(3-!`SgaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;fa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)eE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XdE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.cS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ba5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Waa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0`S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r_o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]^Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U]oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T\Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i[';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)Z U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vY[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.X会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.WoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7VS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4U)Q移徙.入宅.破屋.坏垣.治病.余事勿取.Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.] E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.] Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓. "@wt g & [ R hUd%k3@S Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门. S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,'C诸事不宜.解除.扫舍.余事勿取.EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,'C诸事不宜.祭祀.解除.余事勿取.a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2'O诸事不宜.祭祀.修饰垣墙.余事勿取. 5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.~a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;}'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. |aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#{5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mz37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,y'C诸事不宜.解除.坏垣.余事勿取.xa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3w'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rv) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."u)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+t'A诸事不宜.平治道涂.余事勿取.Ns)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jr)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=qQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5+)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J*)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<))a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u( m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. 'SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:&'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>%EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.$EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任. RH O S 6 \'q)zaRP#aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c"S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K!SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.ro开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.) U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4)Q移徙.入宅.破屋.坏垣.治病.余事勿取. Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]DE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓. #p<j ` & B  j  = b"%^&p]CSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qBa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SASc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.@S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.?aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.>5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.=伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,<'C诸事不宜.解除.扫舍.余事勿取.;EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.::'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,9'C诸事不宜.祭祀.解除.余事勿取.8a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.27'O诸事不宜.祭祀.修饰垣墙.余事勿取. 65入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.5a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;4'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. 3aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#25嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m137伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,0'C诸事不宜.解除.坏垣.余事勿取./a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3.'Q诸事不宜.治病.破屋.坏垣.余事勿取.R-) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅.",)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.++'A诸事不宜.平治道涂.余事勿取.N*)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J))}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=cQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5b)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Ja)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<`)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u_ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ^SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:]'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>\EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.  c ' + |  4 YId^R9h*[EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PZaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cYS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KXSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SWaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;Va%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)UE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XTE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.SS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.Ra5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.WQa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0PS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rOo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]NSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UMoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TLKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iK';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)J U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vI[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.H会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.GoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7FS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.ZEE造屋.开市.作灶.入宅.祭祀.会亲友.出行.订盟.纳采.沐浴.修造.动土.祈福.斋醮.嫁娶.拆卸.安床.入殓.移柩.安葬.谢土.赴任.裁衣.竖柱.上梁.伐木.捕捉.栽种.破土.安门. ~C \  9 )D>2qH_ ~:ۮ'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ۮEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ۮEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PۮaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cۮS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KۮSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SۮaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ۮa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ۮE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XۮE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ۮS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ۮa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wۮa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ۮS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rۮo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ۮSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UۮoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TۮKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iۮ ';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ۮ  U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vۮ [嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ۮ 会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ۮ oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ۮS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑. #NEz+ q 0 t=DR8_h#N4ۮ)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ۮKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ۮE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ۮSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qۮa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SۮSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ۮS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ۭ:aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ۭ95嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ۭ8伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ۭ7'C诸事不宜.解除.扫舍.余事勿取.ۭ6EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ۭ5'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ۭ4'C诸事不宜.祭祀.解除.余事勿取.ۭ3a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ۭ2'O诸事不宜.祭祀.修饰垣墙.余事勿取. ۭ15入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ۭ0a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ۭ/'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ۭ.aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ۭ-5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mۭ,37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ۭ+'C诸事不宜.解除.坏垣.余事勿取.ۭ*a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ۭ)'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rۭ() 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ۭ')+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ۭ&'A诸事不宜.平治道涂.余事勿取.Nۭ%)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jۭ$)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ۭ#Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ۭ")S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jۭ!)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ۭ )a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uۭ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. b  .>z; ۭSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ۭ'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>۬WEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.۬VEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P۬UaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c۬TS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K۬SSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S۬RaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;۬Qa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)۬PE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X۬OE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.۬NS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.۬Ma5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W۬La_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0۬KS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r۬Jo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]۬ISy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U۬HoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T۬GKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i۬F';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)۬E U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v۬D[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.۬C会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.۬BoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑. !5 { :  $ ~ GN\Bir-X7۬AS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4۬@)Q移徙.入宅.破屋.坏垣.治病.余事勿取.۬?Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]۬>E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]۬=Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q۬<a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.S۬;Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.۬:S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.۬9aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.۫r5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.۫q伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,۫p'C诸事不宜.解除.扫舍.余事勿取.۫oEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:۫n'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,۫m'C诸事不宜.祭祀.解除.余事勿取.۫la5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2۫k'O诸事不宜.祭祀.修饰垣墙.余事勿取. ۫j5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.۫ia_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;۫h'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ۫gaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#۫f5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m۫e37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,۫d'C诸事不宜.解除.坏垣.余事勿取.۫ca_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3۫b'Q诸事不宜.治病.破屋.坏垣.余事勿取.R۫a) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."۫`)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+۫_'A诸事不宜.平治道涂.余事勿取.N۫^)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J۫])}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=۫\Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5۫[)S入宅.安葬.出行.沐浴.理发.补垣.塞穴. <bf I o 2 : (<teF۫UEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.۫EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P۫aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c۫ S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K۫ SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S۫ aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;۫ a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)۫ E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X۫E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.۫S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.۫a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W۫a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0۫S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r۫o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]۫Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U۫oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T۫Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i۪';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)۪~ U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v۪}[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.۪|会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网. y^./ Y ( ~ > : AzB y۪{oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7۪zS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4۪y)Q移徙.入宅.破屋.坏垣.治病.余事勿取.۪xKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]۪wE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]۪vSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q۪ua嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.S۪tSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.۪sS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.۪raO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.۪q5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.۪+伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,۪*'C诸事不宜.解除.扫舍.余事勿取.۪)EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:۪('_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,۪''C诸事不宜.祭祀.解除.余事勿取.۪&a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2۪%'O诸事不宜.祭祀.修饰垣墙.余事勿取. ۪$5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.۪#a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;۪"'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ۪!aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#۪ 5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m۪37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,۪'C诸事不宜.解除.坏垣.余事勿取.۪a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3۪'Q诸事不宜.治病.破屋.坏垣.余事勿取.R۪) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."۪)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+۪'A诸事不宜.平治道涂.余事勿取.N۪)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J۪)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜. ^U 2 " =7+jAXzwj)^=۪Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5۪)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J۪)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<۪)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u۪ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ۪SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:۪'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>۪EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.۪EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P۪ aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c۩FS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K۩ESS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S۩DaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;۩Ca%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)۩BE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X۩AE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.۩@S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.۩?a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W۩>a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0۩=S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r۩<o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]۩;Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U۩:oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T۩9Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i۩8';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)۩7 U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v۩6[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑. X+ P  r L^{K۩5会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.۩4oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7۩3S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4۩2)Q移徙.入宅.破屋.坏垣.治病.余事勿取.۩1Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]۩0E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]۩/Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q۩.a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.S۩-Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.۩,S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.۩+aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.۩*5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.۩)伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ۨc'C诸事不宜.解除.扫舍.余事勿取.ۨbEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ۨa'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ۨ`'C诸事不宜.祭祀.解除.余事勿取.ۨ_a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ۨ^'O诸事不宜.祭祀.修饰垣墙.余事勿取. ۨ]5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ۨ\a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ۨ['a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ۨZaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ۨY5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mۨX37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ۨW'C诸事不宜.解除.坏垣.余事勿取.ۨVa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ۨU'Q诸事不宜.治病.破屋.坏垣.余事勿取.RۨT) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ۨS)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬. Q .  9 3'f=Tvsf%Z +ۨR'A诸事不宜.平治道涂.余事勿取.NۨQ)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JۨP)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ۨOQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ۨN)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.JۨM)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ۨL)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uۨK m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ۨJSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ۨI'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ۨHEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ۨGEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PۨFaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cۨES嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.Kۧ~SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.Sۧ}aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ۧ|a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ۧ{E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XۧzE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ۧyS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ۧxa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wۧwa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ۧvS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rۧuo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ۧtSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UۧsoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TۧrKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iۧq';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ۧp U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖. b1 G  C  J  K vۧo[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ۧn会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ۧmoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ۧlS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ۧk)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ۧjKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ۧiE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ۧhSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qۧga嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SۧfSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ۧeS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ۧdaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ۧc5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ۧb伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ۧa'C诸事不宜.解除.扫舍.余事勿取.ۧEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ۧ'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ۧ'C诸事不宜.祭祀.解除.余事勿取.ۧa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ۧ'O诸事不宜.祭祀.修饰垣墙.余事勿取. ۧ5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ۧa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ۧ'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ۧaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ۧ5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mۧ37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ۧ'C诸事不宜.解除.坏垣.余事勿取.ۧa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池. n&K ; V P D+ZqBw(n3ۧ'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rۧ ) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ۧ )+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ۧ 'A诸事不宜.平治道涂.余事勿取.Nۧ )嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jۧ )}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ۧQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ۧ)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jۧ)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ۧ)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uۧ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ۧSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ۧ'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ۧEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ۧEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PۦaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cۦ~S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.Kۦ}SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.Sۦ4aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ۦ3a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ۦ2E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.Xۦ1E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ۦ0S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ۦ/a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wۦ.a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ۦ-S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rۦ,o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ۦ+Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.Uۦ*oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.Tۦ)Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖. i]% G j q ! e3P{ iiۦ(';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ۦ' U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vۦ&[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ۦ%会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ۦ$oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ۦ#S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ۦ")Q移徙.入宅.破屋.坏垣.治病.余事勿取.ۦ!Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ۦ E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ۦSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qۦa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SۦSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ۦS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ۦaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ۦ5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ۦ伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ۥS'C诸事不宜.解除.扫舍.余事勿取.ۥREQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ۥQ'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ۥP'C诸事不宜.祭祀.解除.余事勿取.ۥOa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ۥN'O诸事不宜.祭祀.修饰垣墙.余事勿取. ۥM5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ۥLa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ۥK'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ۥJaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ۥI5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mۥH37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ۥG'C诸事不宜.解除.坏垣.余事勿取. ']mc) E  m  @  e % \Fb23]ۥFa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ۥE'Q诸事不宜.治病.破屋.坏垣.余事勿取.RۥD) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ۥC)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ۥB'A诸事不宜.平治道涂.余事勿取.NۥA)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jۥ@)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ۥ?Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ۥ>)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jۥ=)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ۥ<)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uۥ; m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ۥ:SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ۥ9'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ۥ8EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ۥ7EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.Pۥ6aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.&ۥ5E入宅.安门.祭祀.谢土.沐浴.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.启攒.修坟.立碑.移柩.2'O诸事不宜.祭祀.修饰垣墙.余事勿取. 5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种. a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.; 'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.# 5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m 37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,'C诸事不宜.解除.坏垣.余事勿取.a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3'Q诸事不宜.治病.破屋.坏垣.余事勿取.R) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅.")+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+'A诸事不宜.平治道涂.余事勿取.N)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J~)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<})a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u| m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. {SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒. ~C \  9 )D>2qH_ ~:z'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>yEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.xEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PwaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cvS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KuSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.StaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;sa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)rE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XqE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.*S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.)a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W(a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0'S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r&o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]%Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U$oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T#Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i"';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)! U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v [嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑. #NEz+ q 0 t=DR8_h#N4)Q移徙.入宅.破屋.坏垣.治病.余事勿取.Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,'C诸事不宜.解除.扫舍.余事勿取.EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,'C诸事不宜.祭祀.解除.余事勿取.a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2 'O诸事不宜.祭祀.修饰垣墙.余事勿取. G5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.Fa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;E'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. DaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#C5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mB37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,A'C诸事不宜.解除.坏垣.余事勿取.@a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3?'Q诸事不宜.治病.破屋.坏垣.余事勿取.R>) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."=)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+<'A诸事不宜.平治道涂.余事勿取.N;)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J:)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=9Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.58)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J7)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<6)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u5 m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. b  .>z; 4SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:3'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>2EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.1EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P0aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c/S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K.SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S-aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;,a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)+E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X*E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.)S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ba5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Waa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0`S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r_o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]^Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U]oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T\Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i[';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)Z U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vY[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.X会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.WoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑. !5 { :  $ ~ GN\Bir-X7VS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4U)Q移徙.入宅.破屋.坏垣.治病.余事勿取.TKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]SE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]RSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qQa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SPSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.OS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.NaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.M5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.L伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,K'C诸事不宜.解除.扫舍.余事勿取.JEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:I'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,H'C诸事不宜.祭祀.解除.余事勿取.Ga5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2F'O诸事不宜.祭祀.修饰垣墙.余事勿取. E5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;~'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. }aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#|5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m{37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,z'C诸事不宜.解除.坏垣.余事勿取.ya_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3x'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rw) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."v)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+u'A诸事不宜.平治道涂.余事勿取.Nt)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Js)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=rQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5q)S入宅.安葬.出行.沐浴.理发.补垣.塞穴. <bf I o 2 : (<teFkEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.jEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PiaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.chS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KgSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SfaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ea%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)dE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XcE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.bS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.aa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.ro开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.) U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网. y^./ Y ( ~ > : AzB yoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4)Q移徙.入宅.破屋.坏垣.治病.余事勿取.Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.] E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.] Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.S Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门. S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,'C诸事不宜.解除.扫舍.余事勿取.EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,'C诸事不宜.祭祀.解除.余事勿取.a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2'O诸事不宜.祭祀.修饰垣墙.余事勿取. 5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.~a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;}'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. 6aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#55嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m437伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,3'C诸事不宜.解除.坏垣.余事勿取.2a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.31'Q诸事不宜.治病.破屋.坏垣.余事勿取.R0) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."/)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+.'A诸事不宜.平治道涂.余事勿取.N-)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J,)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜. ^U 2 " =7+jAXzwj)^=+Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5*)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J))}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<()a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u' m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. &SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:%'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>$EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.#EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P"aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c!S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0SS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rRo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]QSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UPoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TOKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iN';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)M U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vL[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑. X+ P  r L^{KK会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.JoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7IS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4H)Q移徙.入宅.破屋.坏垣.治病.余事勿取.GKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]FE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ESy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qDa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SCSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.BS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.AaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.@5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.?伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,>'C诸事不宜.解除.扫舍.余事勿取.=EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:<'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,;'C诸事不宜.祭祀.解除.余事勿取.:a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.29'O诸事不宜.祭祀.修饰垣墙.余事勿取. 85入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.7a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;6'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. 5aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#n5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mm37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,l'C诸事不宜.解除.坏垣.余事勿取.ka_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3j'Q诸事不宜.治病.破屋.坏垣.余事勿取.Ri) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."h)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬. Q .  9 3'f=Tvsf%Z +g'A诸事不宜.平治道涂.余事勿取.Nf)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Je)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=dQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5c)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jb)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.]EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.\EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P[aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cZS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KYSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SXaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;Wa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)VE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XUE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.TS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.Sa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.WRa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0QS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.] Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.) U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖. Yq0  t = D R8_h#NUYv[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4)Q移徙.入宅.破屋.坏垣.治病.余事勿取.Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]~Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q}a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.S|Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.{S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.zaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.y5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.x伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,w'C诸事不宜.解除.扫舍.余事勿取.vEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:u'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,t'C诸事不宜.祭祀.解除.余事勿取.sa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2r'O诸事不宜.祭祀.修饰垣墙.余事勿取. q5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.pa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;o'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. naA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#m5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m%37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,$'C诸事不宜.解除.坏垣.余事勿取.#a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3"'Q诸事不宜.治病.破屋.坏垣.余事勿取.R!) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅.  { q %a"K g7" )+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+'A诸事不宜.平治道涂.余事勿取.N)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍. S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑. a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0 S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rCo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]BSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UAoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T@Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i?';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马. J ' X  T # [ * \'1J)> U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v=[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.<会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.;oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7:S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.49)Q移徙.入宅.破屋.坏垣.治病.余事勿取.8Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]7E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]6Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q5a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.S4Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.3S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.2aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.15嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.0伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,/'C诸事不宜.解除.扫舍.余事勿取..EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:-'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,,'C诸事不宜.祭祀.解除.余事勿取.+a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2*'O诸事不宜.祭祀.修饰垣墙.余事勿取. )5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.(a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;''a余事勿取.安葬.启攒.移柩.入殓.除服.成服. &aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.{%EA开市.安床.安葬.修坟.嫁娶.纳采.订盟.问名.祭祀.冠笄.裁衣.会亲友.进人口.纳财.捕捉.作灶.]ڑSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qڑ~a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓. "@wt g & [ R hUd%k3@Sڑ}Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ڑ|S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ڑ{aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ڑz5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ڑy伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ڑx'C诸事不宜.解除.扫舍.余事勿取.ڑwEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ڑv'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ڑu'C诸事不宜.祭祀.解除.余事勿取.ڑta5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ڑs'O诸事不宜.祭祀.修饰垣墙.余事勿取. ڑr5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ڑqa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ڑp'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ڑoaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ڑn5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mڑm37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ڑl'C诸事不宜.解除.坏垣.余事勿取.ڑka_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ڑj'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rڑi) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ڑh)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ڑg'A诸事不宜.平治道涂.余事勿取.Nڑf)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jڑe)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ڑdQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ڑc)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jڑb)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ڑa)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uڑ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ڑSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ڑ'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ڑEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ڑEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任. RH O S 6 \'q)zaRPڑaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cڑS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KڑSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SڑaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ڑa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ڑE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XڑE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ڑS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ڑ a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wڑ a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ڑ S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rڑ o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ڑ Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UڑoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TڑKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iڑ';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ڑ U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vڑ[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ڑ会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ڑoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ڑS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ڑ)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ڐKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ڐ~E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓. #p<j ` & B  j  = b"%^&p]ڐ}Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qڐ7a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.Sڐ6Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ڐ5S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ڐ4aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ڐ35嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ڐ2伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ڐ1'C诸事不宜.解除.扫舍.余事勿取.ڐ0EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ڐ/'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ڐ.'C诸事不宜.祭祀.解除.余事勿取.ڐ-a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ڐ,'O诸事不宜.祭祀.修饰垣墙.余事勿取. ڐ+5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ڐ*a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ڐ)'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ڐ(aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ڐ'5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mڐ&37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ڐ%'C诸事不宜.解除.坏垣.余事勿取.ڐ$a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ڐ#'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rڐ") 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ڐ!)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ڐ 'A诸事不宜.平治道涂.余事勿取.Nڐ)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jڐ)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ڐQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ڐ)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jڐ)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ڐ)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uڐ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ڏRSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ڏQ'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ڏPEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水. d+n 2 6  ? d  Toi ]Ds5ڏOEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PڏNaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cڏMS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KڏLSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SڏKaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ڏJa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ڏIE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XڏHE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ڏGS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ڏFa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.WڏEa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ڏDS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rڏCo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ڏBSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UڏAoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.Tڏ@Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iڏ?';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ڏ> U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vڏ=[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ڏ<会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ڏ;oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ڏ:S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ڏ9)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ڏ8Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎. "mc) E  m  @  e %!(a)s]ڏ7E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ڏ6Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qڏ5a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SڎoSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ڎnS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ڎmaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ڎl5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ڎk伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ڎj'C诸事不宜.解除.扫舍.余事勿取.ڎiEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ڎh'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ڎg'C诸事不宜.祭祀.解除.余事勿取.ڎfa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ڎe'O诸事不宜.祭祀.修饰垣墙.余事勿取. ڎd5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ڎca_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ڎb'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ڎaaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ڎ`5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mڎ_37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ڎ^'C诸事不宜.解除.坏垣.余事勿取.ڎ]a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ڎ\'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rڎ[) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ڎZ)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ڎY'A诸事不宜.平治道涂.余事勿取.NڎX)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JڎW)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ڎVQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ڎU)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.JڎT)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ڎS)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uڎR m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ڎQSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒. ~C \  9 )D>2qH_ ~:ڎ '_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ڎ EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ڎ EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PڎaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cڎS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KڎSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SڎaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ڎa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ڎE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XڎE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ڎS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ڎa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wڍa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ڍ~S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rڍ}o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ڍ|Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.Uڍ{oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TڍzKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iڍy';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ڍx U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vڍw[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ڍv会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ڍuoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ڍtS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑. #NEz+ q 0 t=DR8_h#N4ڍs)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ڍrKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ڍqE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ڍpSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qڍoa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SڍnSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ڍmS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ڍ&aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ڍ%5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ڍ$伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ڍ#'C诸事不宜.解除.扫舍.余事勿取.ڍ"EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ڍ!'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ڍ 'C诸事不宜.祭祀.解除.余事勿取.ڍa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ڍ'O诸事不宜.祭祀.修饰垣墙.余事勿取. ڍ5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ڍa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ڍ'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ڍaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ڍ5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mڍ37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ڍ'C诸事不宜.解除.坏垣.余事勿取.ڍa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ڍ'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rڍ) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ڍ)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ڍ'A诸事不宜.平治道涂.余事勿取.Nڍ)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jڍ)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ڍQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ڍ)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jڍ )}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ڍ )a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uڍ  m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. b  .>z; ڍ SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ڍ '_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ڌCEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ڌBEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PڌAaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cڌ@S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.Kڌ?SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.Sڌ>aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ڌ=a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ڌ<E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.Xڌ;E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ڌ:S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ڌ9a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wڌ8a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ڌ7S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rڌ6o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ڌ5Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.Uڌ4oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.Tڌ3Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iڌ2';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ڌ1 U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vڌ0[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ڌ/会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ڌ.oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑. !5 { :  $ ~ GN\Bir-X7ڌ-S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ڌ,)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ڌ+Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ڌ*E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ڌ)Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qڌ(a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.Sڌ'Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ڌ&S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ڌ%aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ڋ^5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ڋ]伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ڋ\'C诸事不宜.解除.扫舍.余事勿取.ڋ[EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ڋZ'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ڋY'C诸事不宜.祭祀.解除.余事勿取.ڋXa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ڋW'O诸事不宜.祭祀.修饰垣墙.余事勿取. ڋV5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ڋUa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ڋT'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ڋSaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ڋR5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mڋQ37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ڋP'C诸事不宜.解除.坏垣.余事勿取.ڋOa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ڋN'Q诸事不宜.治病.破屋.坏垣.余事勿取.RڋM) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ڋL)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ڋK'A诸事不宜.平治道涂.余事勿取.NڋJ)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JڋI)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ڋHQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ڋG)S入宅.安葬.出行.沐浴.理发.补垣.塞穴. <bf I o 2 : (<teFڋAEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ڊ{EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PڊzaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cڊyS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KڊxSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SڊwaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ڊva%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ڊuE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XڊtE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ڊsS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ڊra5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wڊqa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ڊpS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rڊoo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ڊnSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UڊmoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TڊlKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iڊk';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ڊj U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vڊi[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ڊh会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网. y^./ Y ( ~ > : AzB yڊgoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ڊfS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ڊe)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ڊdKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ڊcE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ڊbSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qڊaa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.Sڊ`Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ڊ_S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ڊ^aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ڊ]5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ڊ伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ڊ'C诸事不宜.解除.扫舍.余事勿取.ڊEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ڊ'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ڊ'C诸事不宜.祭祀.解除.余事勿取.ڊa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ڊ'O诸事不宜.祭祀.修饰垣墙.余事勿取. ڊ 5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ڊ a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ڊ 'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ڊ aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ڊ 5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mڊ37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ڊ'C诸事不宜.解除.坏垣.余事勿取.ڊa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ڊ'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rڊ) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ڊ)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ڊ'A诸事不宜.平治道涂.余事勿取.Nڊ)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jڊ)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜. ^U 2 " =7+jAXzwj)^=ډQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ډ~)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jډ})}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ډ|)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uډ{ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ډzSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ډy'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ډ3EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ډ2EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.Pډ1aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cډ0S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.Kډ/SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.Sډ.aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ډ-a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ډ,E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.Xډ+E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ډ*S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ډ)a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wډ(a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ډ'S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rډ&o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ډ%Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.Uډ$oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.Tډ#Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iډ"';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ډ! U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vډ [嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑. | J g 7 cPډ会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ډoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ډS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ډ)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ډKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ډE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ډSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qډa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SډSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ډS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.bډE嫁娶.入殓.安葬.出行.塑绘.开光.沐浴.冠笄.会亲友.作灶.放水.造畜椆栖.io';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)n U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vm[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.l会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.koQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7jS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4i)Q移徙.入宅.破屋.坏垣.治病.余事勿取.hKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]gE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]fSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qea嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SdSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.cS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟. #/F h e X  L z{CtYFU\$baO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.a5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.`伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,_'C诸事不宜.解除.扫舍.余事勿取.^EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:]'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,\'C诸事不宜.祭祀.解除.余事勿取.[a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2Z'O诸事不宜.祭祀.修饰垣墙.余事勿取. Y5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.Xa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;W'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. VaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#U5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mT37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,S'C诸事不宜.解除.坏垣.余事勿取.Ra_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3Q'Q诸事不宜.治病.破屋.坏垣.余事勿取.R ) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅." )+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+'A诸事不宜.平治道涂.余事勿取.N)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>~EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.}EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P|aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c{S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KzSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.   ( 2 K(3-!`SyaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;xa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)wE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XvE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.uS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ta5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wsa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0rS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rqo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]pSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UooK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TnKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.im';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)' U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v&[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.%会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.$oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7#S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4")Q移徙.入宅.破屋.坏垣.治病.余事勿取.!Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.] E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓. "@wt g & [ R hUd%k3@SSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,'C诸事不宜.解除.扫舍.余事勿取.EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,'C诸事不宜.祭祀.解除.余事勿取.a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2'O诸事不宜.祭祀.修饰垣墙.余事勿取. 5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m 37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍., 'C诸事不宜.解除.坏垣.余事勿取. a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3 'Q诸事不宜.治病.破屋.坏垣.余事勿取.R ) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."B)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+A'A诸事不宜.平治道涂.余事勿取.N@)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J?)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=>Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5=)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J<)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<;)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u: m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. 9SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:8'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>7EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.6EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任. RH O S 6 \'q)zaRP5aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c4S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K3SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S2aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;1a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)0E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X/E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍..S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.-a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W,a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0+S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r*o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.])Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U(oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T'Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i&';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)% U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v_[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.^会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.]oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7\S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4[)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ZKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]YE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓. #p<j ` & B  j  = b"%^&p]XSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qWa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SVSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.US;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.TaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.S5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.R伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,Q'C诸事不宜.解除.扫舍.余事勿取.PEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:O'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,N'C诸事不宜.祭祀.解除.余事勿取.Ma5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2L'O诸事不宜.祭祀.修饰垣墙.余事勿取. K5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.Ja_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;I'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. HaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#G5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mF37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,E'C诸事不宜.解除.坏垣.余事勿取.Da_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3C'Q诸事不宜.治病.破屋.坏垣.余事勿取.RB) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."A)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ٿ{'A诸事不宜.平治道涂.余事勿取.Nٿz)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jٿy)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ٿxQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ٿw)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jٿv)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ٿu)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uٿt m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ٿsSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ٿr'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ٿqEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水. d+n 2 6  ? d  Toi ]Ds5ٿpEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PٿoaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cٿnS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KٿmSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SٿlaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ٿka%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ٿjE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XٿiE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ٿhS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ٿga5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wٿfa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ٿeS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rٿdo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ٿcSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UٿboK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TٿaKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iٿ`';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ٿ_ U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vٿ^[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ٿ]会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ٿoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ٿS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ٿ)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ٿKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎. "mc) E  m  @  e %!(a)s]ٿE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ٿSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qٿa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SٿSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ٿS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ٿ aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ٿ 5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ٿ 伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ٿ 'C诸事不宜.解除.扫舍.余事勿取.ٿ EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ٿ'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ٿ'C诸事不宜.祭祀.解除.余事勿取.ٿa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ٿ'O诸事不宜.祭祀.修饰垣墙.余事勿取. ٿ5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ٿa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ٿ'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ٿaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ٿ5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mپ37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,پ~'C诸事不宜.解除.坏垣.余事勿取.پ}a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3پ|'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rپ{) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."پz)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+پy'A诸事不宜.平治道涂.余事勿取.Nپ3)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jپ2)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=پ1Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5پ0)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jپ/)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<پ.)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uپ- m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. پ,SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒. ~C \  9 )D>2qH_ ~:پ+'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>پ*EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.پ)EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.Pپ(aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cپ'S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.Kپ&SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.Sپ%aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;پ$a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)پ#E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.Xپ"E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.پ!S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.پ a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wپa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0پS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rپo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]پSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UپoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TپKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iپ';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)پ U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vپ[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.پ会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.پoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ٽNS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑. #NEz+ q 0 t=DR8_h#N4ٽM)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ٽLKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ٽKE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ٽJSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qٽIa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SٽHSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ٽGS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ٽFaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ٽE5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ٽD伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ٽC'C诸事不宜.解除.扫舍.余事勿取.ٽBEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ٽA'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ٽ@'C诸事不宜.祭祀.解除.余事勿取.ٽ?a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ٽ>'O诸事不宜.祭祀.修饰垣墙.余事勿取. ٽ=5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ٽ<a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ٽ;'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ٽ:aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ٽ95嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mٽ837伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ٽ7'C诸事不宜.解除.坏垣.余事勿取.ٽ6a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ٽ5'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rٽ4) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ٽ3)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ٽ2'A诸事不宜.平治道涂.余事勿取.Nٽ1)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jټk)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ټjQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ټi)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jټh)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ټg)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uټf m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. b  .>z; ټeSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ټd'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ټcEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ټbEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PټaaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cټ`S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.Kټ_SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.Sټ^aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ټ]a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ټ\E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.Xټ[E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ټZS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ټYa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.WټXa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ټWS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rټVo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ټUSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UټToK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TټSKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iټR';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ټQ U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vټP[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ټO会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ټNoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑. !5 { :  $ ~ GN\Bir-X7ټMS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ټ)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ټKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ټE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ټSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qټa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SٻSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ٻ~S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ٻ}aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ٻ|5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ٻ{伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ٻz'C诸事不宜.解除.扫舍.余事勿取.ٻyEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ٻx'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ٻw'C诸事不宜.祭祀.解除.余事勿取.ٻva5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ٻu'O诸事不宜.祭祀.修饰垣墙.余事勿取. ٻt5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ٻsa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ٻr'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ٻqaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ٻp5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mٻo37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ٻn'C诸事不宜.解除.坏垣.余事勿取.ٻma_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ٻl'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rٻk) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ٻj)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ٻi'A诸事不宜.平治道涂.余事勿取.Nٻ#)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jٻ")}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ٻ!Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ٻ )S入宅.安葬.出行.沐浴.理发.补垣.塞穴. <bf I o 2 : (<teFٻEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ٻEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PٻaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cٻS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KٻSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SٻaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ٻa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ٻE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XٻE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ٻS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ٻa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wٻa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ٻS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rٻ o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ٻ Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.Uٻ oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.Tٻ Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iٻ ';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ٻ U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vٻ[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ٻ会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网. I@  R o?qyIuٻ)Q入宅.安床.塑绘.开光.出行.订盟.纳采.除服.成服.嫁娶.纳婿.入殓.移柩.启攒.安葬.立碑.0_S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r^o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]]Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U\oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T[Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iZ';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)Y U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vX[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.W会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.VoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7US+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4T)Q移徙.入宅.破屋.坏垣.治病.余事勿取.SKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]RE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]QSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qPa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SOSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.NS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.MaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.L5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.K伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,J'C诸事不宜.解除.扫舍.余事勿取.IEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:H'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,G'C诸事不宜.祭祀.解除.余事勿取. ![ -   = y :-c!OPzI._[Fa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2E'O诸事不宜.祭祀.修饰垣墙.余事勿取. D5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.Ca_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;B'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. AaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#z5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.my37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,x'C诸事不宜.解除.坏垣.余事勿取.wa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3v'Q诸事不宜.治病.破屋.坏垣.余事勿取.Ru) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."t)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+s'A诸事不宜.平治道涂.余事勿取.Nr)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jq)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=pQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5o)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jn)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.iEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.hEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PgaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cfS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KeSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SdaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ca%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)bE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XaE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.`S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑. j2 | i _a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W^a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0]S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.ro开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.) U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4 )Q移徙.入宅.破屋.坏垣.治病.余事勿取. Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.] E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.] Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马. #Q8 g ~ ) O 5 {:$~GN,'C诸事不宜.解除.扫舍.余事勿取.EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,'C诸事不宜.祭祀.解除.余事勿取.a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2~'O诸事不宜.祭祀.修饰垣墙.余事勿取. }5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.|a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;{'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. zaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#y5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m237伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,1'C诸事不宜.解除.坏垣.余事勿取.0a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3/'Q诸事不宜.治病.破屋.坏垣.余事勿取.R.) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."-)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+,'A诸事不宜.平治道涂.余事勿取.N+)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J*)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=)Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5()S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J')}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<&)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u% m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. $SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:#'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>"EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.!EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种. ;^D k t  / Z aeHn19';XE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.ro开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]OSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UNoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TMKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iL';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)K U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vJ[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.I会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.HoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7GS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4F)Q移徙.入宅.破屋.坏垣.治病.余事勿取.EKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]DE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]CSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qBa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SASc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.@S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.?aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.>5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土. #? - O L ? u 3ab*[@q-m<tC=伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,<'C诸事不宜.解除.扫舍.余事勿取.;EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.::'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,9'C诸事不宜.祭祀.解除.余事勿取.8a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.27'O诸事不宜.祭祀.修饰垣墙.余事勿取. 65入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.5a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;4'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. 3aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#25嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m137伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,k'C诸事不宜.解除.坏垣.余事勿取.ja_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3i'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rh) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."g)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+f'A诸事不宜.平治道涂.余事勿取.Ne)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jd)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=cQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5b)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Ja)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<`)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u_ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ^SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:]'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>\EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.[EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PZaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cYS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KXSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SWaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;Va%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴. | J g 7 iq_s)UE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XTE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.SS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.Ra5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.WQa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0PS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rOo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]NSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UMoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.) U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4)Q移徙.入宅.破屋.坏垣.治病.余事勿取.~Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]}E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]|Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q{a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SzSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.yS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟. #/F h e X  L z{CtYFU\$xaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.w5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.v伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,u'C诸事不宜.解除.扫舍.余事勿取.tEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:s'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,r'C诸事不宜.祭祀.解除.余事勿取.qa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2p'O诸事不宜.祭祀.修饰垣墙.余事勿取. o5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.na_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;m'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. laA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#k5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mj37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,i'C诸事不宜.解除.坏垣.余事勿取.#a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3"'Q诸事不宜.治病.破屋.坏垣.余事勿取.R!) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅." )+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+'A诸事不宜.平治道涂.余事勿取.N)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.   ( 2 K(3-!`SaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍. S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑. a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0 S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.ro开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i>';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)= U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v<[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.;会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.:oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.79S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.48)Q移徙.入宅.破屋.坏垣.治病.余事勿取.7Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]6E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]5Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q4a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓. "@wt g & [ R hUd%k3@S3Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.2S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.1aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.05嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土./伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,.'C诸事不宜.解除.扫舍.余事勿取.-EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:,'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,+'C诸事不宜.祭祀.解除.余事勿取.*a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2)'O诸事不宜.祭祀.修饰垣墙.余事勿取. (5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.'a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;&'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. %aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#$5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m#37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,"'C诸事不宜.解除.坏垣.余事勿取.!a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3['Q诸事不宜.治病.破屋.坏垣.余事勿取.RZ) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."Y)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+X'A诸事不宜.平治道涂.余事勿取.NW)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JV)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=UQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5T)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.JS)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.NEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.MEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任. RH O S 6 \'q)zaRPLaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cKS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KJSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SIaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;Ha%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)GE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XFE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ES=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.Da5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.WCa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0BS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rAo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]@Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U?oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T>Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i=';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)t U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vs[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.r会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.qoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7pS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4o)Q移徙.入宅.破屋.坏垣.治病.余事勿取.nKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]mE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓. #p<j ` & B  j  = b"%^&p]lSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qka嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SjSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.iS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.haO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.g5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.f伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,e'C诸事不宜.解除.扫舍.余事勿取.dEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:c'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,b'C诸事不宜.祭祀.解除.余事勿取.aa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2`'O诸事不宜.祭祀.修饰垣墙.余事勿取. _5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.^a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;]'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. \aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#[5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mZ37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,Y'C诸事不宜.解除.坏垣.余事勿取.a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3'Q诸事不宜.治病.破屋.坏垣.余事勿取.R) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅.")+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+'A诸事不宜.平治道涂.余事勿取.N)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J )}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.= Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5 )S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J )}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.< )a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水. &K ; V P G l \wqeL{=EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)~E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X}E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.|S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.{a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wza_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0yS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rxo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]wSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UvoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.u اOS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.اNa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.WاMa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0اLS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rاKo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]اJSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UاIoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TاHKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖. V x   R dQiاG';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)اF U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vاE[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.اD会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.اCoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7اBS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4اA)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ا@Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ا?E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ا>Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qا=a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.Sا<Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ا;S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ا:aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ا95嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ا8伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ا7'C诸事不宜.解除.扫舍.余事勿取.ا6EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ا5'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ا4'C诸事不宜.祭祀.解除.余事勿取.ا3a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ا2'O诸事不宜.祭祀.修饰垣墙.余事勿取. ا15入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ئja_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ئi'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ئhaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ئg5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mئf37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍. y%  0 *  ] 4Kmj]QHy,ئe'C诸事不宜.解除.坏垣.余事勿取.ئda_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ئc'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rئb) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ئa)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ئ`'A诸事不宜.平治道涂.余事勿取.Nئ_)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jئ^)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ئ]Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ئ\)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jئ[)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ئZ)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uئY m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ئXSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ئW'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ئVEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ئUEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PئTaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cئSS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KئRSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SئQaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ئPa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ئOE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XئNE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ئMS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ئa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wئa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ئS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rئo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ئSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UئoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬. q1 - 4  m 5  l#TئKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iئ';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)إ U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vإ~[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.إ}会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.إ|oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7إ{S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4إz)Q移徙.入宅.破屋.坏垣.治病.余事勿取.إyKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]إxE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]إwSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qإva嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SإuSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.إtS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.إsaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.إr5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.إq伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,إp'C诸事不宜.解除.扫舍.余事勿取.إoEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:إn'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,إm'C诸事不宜.祭祀.解除.余事勿取.إla5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2إk'O诸事不宜.祭祀.修饰垣墙.余事勿取. إj5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.إia_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;إ"'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. إ!aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种. R m g [ B q3Y ?D#إ 5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mإ37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,إ'C诸事不宜.解除.坏垣.余事勿取.إa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3إ'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rإ) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."إ)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+إ'A诸事不宜.平治道涂.余事勿取.Nإ)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jإ)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=إQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5إ)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jإ)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<إ)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uإ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. إSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:إ'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>إEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.إEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.Pإ aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cإ S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.Kإ SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.Sإ aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;إ a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)إE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XإE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.إS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.إa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wؤ?a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ؤ>S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rؤ=o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服. mb  <  Nk;m]ؤ<Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.Uؤ;oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.Tؤ:Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iؤ9';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ؤ8 U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vؤ7[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ؤ6会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ؤ5oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ؤ4S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ؤ3)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ؤ2Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ؤ1E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ؤ0Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qؤ/a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.Sؤ.Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ؤ-S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ؤ,aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ؤ+5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ؤ*伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ؤ)'C诸事不宜.解除.扫舍.余事勿取.ؤ(EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ؤ''_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ؤ&'C诸事不宜.祭祀.解除.余事勿取.ؤ%a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ؤ$'O诸事不宜.祭祀.修饰垣墙.余事勿取. ؤ#5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ؤ"a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种. Je _  S : i + Q7 }<;ؤ!'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. أ[aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#أZ5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mأY37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,أX'C诸事不宜.解除.坏垣.余事勿取.أWa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3أV'Q诸事不宜.治病.破屋.坏垣.余事勿取.RأU) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."أT)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+أS'A诸事不宜.平治道涂.余事勿取.NأR)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JأQ)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=أPQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5أO)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.JأN)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<أM)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uأL m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. أKSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:أJ'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>أIEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.أHEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PأGaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cأFS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KأESS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SأDaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;أCa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)أBE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XأAE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.أ@S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.أ?a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wأ>a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0أ=S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅. wF~M   " + JTm%Jrآvo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]آuSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UآtoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TآsKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iآr';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)آq U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vآp[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.آo会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.آnoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7آmS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4آl)Q移徙.入宅.破屋.坏垣.治病.余事勿取.آkKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]آjE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]آiSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qآha嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SآgSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.آfS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.آeaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.آd5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.آc伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,آb'C诸事不宜.解除.扫舍.余事勿取.آaEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:آ`'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,آ_'C诸事不宜.祭祀.解除.余事勿取.آ^a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜. ![wq e L { = cIN8[2آ]'O诸事不宜.祭祀.修饰垣墙.余事勿取. آ\5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.آ[a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;آZ'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. آYaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#آ5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mآ37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,آ'C诸事不宜.解除.坏垣.余事勿取.آa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3آ'Q诸事不宜.治病.破屋.坏垣.余事勿取.Rآ) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."آ )+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+آ 'A诸事不宜.平治道涂.余事勿取.Nآ )嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Jآ )}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=آ Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5آ)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jآ)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<آ)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uآ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. آSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:آ'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>آEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.آEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PآaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cءS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.Kء~SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.Sء}aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ء|a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ء{E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XءzE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ءyS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ءxa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水. g@  R o?qygWءwa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ءvS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rءuo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ء.Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.Uء-oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.Tء,Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iء+';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ء* U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vء)[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ء(会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ء'oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ء&S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ء%)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ء$Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ء#E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ء"Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qء!a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.Sء Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ءS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ءaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ء5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ء伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ء'C诸事不宜.解除.扫舍.余事勿取.ءEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ء'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ء'C诸事不宜.祭祀.解除.余事勿取. ![ -   = y :-c!OPzI._[ءa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ء'O诸事不宜.祭祀.修饰垣墙.余事勿取. ء5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ءa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ء'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ءaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ء5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mؠK37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ؠJ'C诸事不宜.解除.坏垣.余事勿取.ؠIa_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ؠH'Q诸事不宜.治病.破屋.坏垣.余事勿取.RؠG) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ؠF)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ؠE'A诸事不宜.平治道涂.余事勿取.NؠD)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JؠC)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ؠBQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ؠA)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.Jؠ@)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ؠ?)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uؠ> m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ؠ=SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ؠ<'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ؠ;EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ؠ:EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.Pؠ9aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cؠ8S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.Kؠ7SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.Sؠ6aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ؠ5a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ؠ4E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.Xؠ3E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ؠ2S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑. j2 | i ؠ1a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wؠ0a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ؠ/S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rؠ.o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ؠ-Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U؟eoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T؟dKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i؟c';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)؟b U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v؟a[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.؟`会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.؟_oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7؟^S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4؟])Q移徙.入宅.破屋.坏垣.治病.余事勿取.؟\Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]؟[E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]؟ZSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q؟Ya嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.S؟XSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.؟WS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.؟VaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.؟U5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.؟T伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马. #Q8 g ~ ) O 5 {:$~GN,؟S'C诸事不宜.解除.扫舍.余事勿取.؟REQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:؟Q'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,؟P'C诸事不宜.祭祀.解除.余事勿取.؟Oa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2؟N'O诸事不宜.祭祀.修饰垣墙.余事勿取. ؟M5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.؟La_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;؟K'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ؟JaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#؟I5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m؟37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,؟'C诸事不宜.解除.坏垣.余事勿取.؟a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3؟'Q诸事不宜.治病.破屋.坏垣.余事勿取.R؞) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."؞~)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+؞}'A诸事不宜.平治道涂.余事勿取.N؞|)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J؞{)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=؞zQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5؞y)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J؞x)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<؞w)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u؞v m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ؞uSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:؞t'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>؞sEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.؞rEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P؞qaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c؞pS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K؞oSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S؞naW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;؞ma%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)؞lE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种. wq e L { = cI+%X؞kE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.؞jS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.؞ia5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W؞ha_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0؞gS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r؞fo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.؞e R?) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅.">)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+='A诸事不宜.平治道涂.余事勿取.N<)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J;)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=:Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.59)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J8)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<7)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u6 m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. 5SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:4'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>3EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.2EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P1aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c0S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K/SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S.aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;-a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.),E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X+E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.*S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.)a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水. 1& F Y y . (}"sW(a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0'S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅. &5嫁娶.开市.出火.栽种.破土.动土.入宅.移徙.安香.分居.掘井.作灶.开光.解除.拆卸.修造.动土.安床.纳畜.安葬.启攒.入殓.)% U嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.出行.拆卸.进人口.入宅.移徙.安床.栽种.动土.修造.纳畜.入殓.安葬.立碑.除服.成服.$}Q栽种.破土.置产.祭祀.嫁娶.动土.作灶.祈福.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.#''诸事不宜.诸事不宜.V"!开市.祭祀.祈福.斋醮.塑绘.开光.订盟.纳采.裁衣.冠笄.嫁娶.拆卸.入宅.安香.入殓.移柩.理发.安葬.修坟.谢土.赴任.移徙.沐浴.治病.破土.启攒.整手足甲.入学.作梁.S!Es嫁娶.动土.安葬.作灶.祭祀.沐浴.出行.冠笄.进人口.余事勿取.`Z)'入宅.作灶.祈福.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.Y''诸事不宜.诸事不宜.,X'C诸事不宜.沐浴.扫舍.余事勿取.jWE嫁娶.入宅.治病.赴任.祭祀.祈福.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造畜椆栖.入殓.移柩.启攒.安葬.谢土.除服.成服.会亲友.竖柱.上梁.经络.开市.交易.立券.纳财.纳畜.筑堤.^V)#造屋.治病.祭祀.解除.祈福.开光.塑绘.斋醮.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.入殓.除服.成服.移柩.启攒.安床.赴任.出行.移徙.竖柱.上梁.伐木.栽种.破土.安葬.纳畜.:U'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取. TEe开市.交易.破土.作灶.祭祀.塑绘.开光.订盟.纳采.嫁娶.安床.进人口.入殓.除服.成服.移柩.启攒.安葬.立碑.%S)1作灶.治病.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.赴任.进人口.会亲友.REK作灶.治病.伐木.作梁.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.除服.成服.入殓.移柩.安葬.谢土.赴任.会亲友.进人口.出行.竖柱.上梁.经络.开市.交易.立券.纳财.开仓.FQEY嫁娶.入宅.安门.移徙.理发.会亲友.补垣.塞穴.结网.ZPE入宅.作灶.安床.开仓.祭祀.会亲友.嫁娶.沐浴.修造.动土.祈福.开光.塑绘.出行.订盟.纳采.裁衣.入殓.除服.成服.移柩.启攒.赴任.竖柱.上梁.纳财.扫舍.栽种.纳畜.伐木.,O'C诸事不宜.祭祀.沐浴.余事勿取.pNS开光.掘井.安葬.谢土.修坟.嫁娶.冠笄.安床.纳采.会亲友.塞穴.捕捉.置产.造畜椆栖.LMSU移徙.入宅.安门.作梁.安葬.祭祀.祈福.求嗣.斋醮.沐浴.冠笄.出行.理发.拆卸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫舍.除服.成服.移柩.启攒.立碑.谢土.pLS安床.安门.破土.修坟.安葬.捕捉.畋猎.会亲友.解除.入殓.除服.成服.移柩.余事勿取.ZKSq嫁娶.开市.入宅.出火.移徙.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.会亲友.解除.入学.纳财.交易.立券.经络.起基.动土.定磉.开池.栽种.纳畜.牧养.破土.入殓.立碑.安葬.LJEc造屋.造船.动土.破土.嫁娶.纳采.订盟.祭祀.冠笄.裁衣.伐木.作梁.架马.定磉.开柱眼.作灶.移徙.安床.畋猎.结网.开池.作厕.除服.成服.启攒.入殓.移柩.安葬.4I)Q嫁娶.安葬.破屋.坏垣.祭祀.余事勿取.IHE]开市.造庙.动土.破土.嫁娶.订盟.纳采.祭祀.祈福.塑绘.开光.移徙.安床.伐木.作梁.捕捉.畋猎.结网.求医.治病.解除.安葬.除服.成服.移柩.入殓.立碑.谢土. | z & C  5Z/p(=qFvHGSM嫁娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈福.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上梁.安门.安香.出火.教牛马.会亲友.破土.JFE_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出火.修饰垣墙.平治道涂.会亲友.出行.开池.作厕.^ES{嫁娶.开市.祈福.斋醮.安葬.塑绘.会亲友.安机械.塞穴.结网.裁衣.经络._Dam开市.纳采.造庙.安床.开渠.安葬.嫁娶.造车器.出行.会亲友.移徙.入宅.修造.动土.雕刻.开光.安香.出火.理发.会亲友.造屋.合脊.起基.归岫.安门.拆卸.扫舍.栽种.造畜椆栖.ICSQ开市.动土.破土.行丧.安葬.祭祀.沐浴.出行.余事勿取.BgG动土.伐木.作梁.行丧.安葬.开生坟.祭祀.出行.裁衣.冠笄.会亲友.造畜椆栖.嫁娶.竖柱.上梁.移徙.纳财.纳畜.Ag[嫁娶.开光.会亲友.掘井.安门.栽种.祭祀.解除.裁衣.理发.安床.作灶.造畜椆栖.放水.筑堤.补垣.塞穴.整手足甲.扫舍. @}'嫁娶.作灶.修坟.安门.入宅.立碑.安葬.安床.祭祀.祈福.求嗣.开光.开市.出行.解除.动土.起基.置产.栽种.,?'C诸事不宜.祭祀.塞穴.余事勿取.g>)5斋醮.安门.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.B=)m祈福.安葬.订盟.纳采.会亲友.安机械.纳财.牧养.:w'_余事勿取.祭祀.解除.破屋.坏垣.余事勿取.`v)'开市.赴任.嫁娶.订盟.纳采.出行.祭祀.祈福.动土.移徙.入宅.破土.安葬.Cu)o移徙.入宅.入殓.除服.成服.移柩.破土.启攒.安葬.9t']余事勿取.祭祀.结网.造畜椆栖.余事勿取.?s7Y开市.动土.破土.开光.针灸.会亲友.启攒.安葬.8r)Y嫁娶.入宅.沐浴.理发.入学.习艺.进人口.&q)5行丧.安葬.作灶.造畜椆栖.?p)g动土.上梁.嫁娶.祭祀.安机械.入殓.破土.安葬.oEm作灶.入殓.安葬.安床.祭祀.祈福.斋醮.沐浴.竖柱.订盟.纳采.嫁娶.拆卸.入宅.移柩.启攒.谢土.赴任.出火.纳畜.JnEa栽种.动土.安葬.开市.祭祀.作灶.入殓.除服.成服.畋猎.ymE=开仓.冠笄.伐木.作梁.祭祀.塑绘.开光.祈福.斋醮.出行.订盟.纳采.裁衣.嫁娶.拆卸.修造.安床.入宅.安香.入殓.启攒.安葬.谢土.赴任.会亲友.进人口.出行.移徙.上梁.经络.开市.交易.立券.纳财. lE]出行.祈福.安葬.作灶.会亲友.嫁娶.订盟.纳采.纳婿.拆卸.修造.动土.起基.竖柱.上梁.安床.会亲友.纳财.,k'C诸事不宜.破屋.坏垣.余事勿取.]jSw开光.嫁娶.掘井.伐木.作梁.祭祀.祈福.求嗣.斋醮.造庙.出火.安机械.会亲友.开市.交易.立券.纳财.习艺.经络.求医.治病.开池.作厕.畋猎.结网.栽种.牧养.安葬.破土.启攒.niS嫁娶.祭祀.入宅.造屋.移徙.捕捉.结网.入殓.除服.成服.移柩.破土.安葬.启攒.立碑.\hE嫁娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治道涂.余事勿取.{gS3移徙.入宅.出行.祈福.嫁娶.沐浴.理发.冠笄.安床.开市.立券.会亲友.交易.纳财.结网.教牛马.fE 嫁娶.动土.破土.修坟.出行.造车器.造畜椆栖.解除.冠笄.裁衣.作梁.雕刻.会亲友.移徙.入宅.安机械.造畜椆栖.开市.扫舍.EeSG造庙.造船.动土.破土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.置产.求医.治病.开市.交易.立券.会亲友.移徙.竖柱.上梁.造屋.合脊.安门.放水.捕捉.纳畜. dgA开光.嫁娶.会亲友.栽种.针灸.安葬.冠笄.祭祀.沐浴.作灶.理发.整手足甲.扫舍.补垣.塞穴.入殓.破土.启攒.cg'开市.开仓.出货财.安床.安门.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.求医.治病.出火.移徙.入宅. {Q  g h RGM_PbEm动土.破土.开市.安葬.祭祀.作灶.纳财.捕捉.畋猎.余事勿取. aYO上梁.开光.造屋.架马.合寿木.造车器.嫁娶.订盟.纳采.会亲友.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j`S嫁娶.开市.入宅.祈福.安葬.订盟.纳采.会亲友.交易.立券.纳财.栽种.纳畜.牧养.0_ c嫁娶.祈福.求嗣.出行.出火.拆卸.修造.动土.上梁.开光.进人口.开市.交易.立券.挂匾.安床.入宅.移徙.栽种.伐木.入殓.破土.除服.成服.,^'C诸事不宜.破屋.坏垣.余事勿取.#]5嫁娶.出行.安床.作灶.祭祀.入宅.移徙.出火.进人口.置产.开光.解除.起基.动土.拆卸.上梁.立碑.修坟.安葬.破土.启攒.移柩.0\ c嫁娶.祭祀.祈福.求嗣.沐浴.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.入宅.移徙.安床.栽种.纳畜.入殓.安葬.启攒.除服.成服.W[E{嫁娶.移徙.入宅.开市.沐浴.入殓.移柩.除服.成服.破土.平治道涂.Z''诸事不宜.诸事不宜.:Y'_诸事不宜.祭祀.沐浴.赴任.出行.余事勿取._oa动土.冠笄.移徙.入宅.开市.竖柱.上梁.祭祀.出行.成服.除服.沐浴.入殓. Ee安床.开光.开市.交易.祭祀.裁衣.冠笄.嫁娶.安机械.拆卸.动土.起基.移徙.入宅.入殓.启攒.安葬.造仓.经络.4E5入殓.安葬.开市.交易.祭祀.诸事不宜.{EA移徙.入宅.作灶.安葬.祭祀.裁衣.冠笄.嫁娶.纳婿.会亲友.除服.成服.移柩.捕捉.进人口.入殓.u)Q定磉.安葬.祭祀.赴任.动土.上梁.开光.塑绘.冠笄.拆卸.起基.安床.开市.立券.赴任.经络.7 E9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.嫁娶.拆卸.起基.安床.入宅.开市.入殓.除服.成服.移柩.破土.谢土.挂匾.开柱眼.交易.I E_移徙.入宅.出行.栽种.祭祀.沐浴.破屋.坏垣.余事勿取. EW作灶.祭祀.入宅.嫁娶.祭祀.冠笄.会亲友.拆卸.起基.除服.成服.移柩.启攒.安葬.沐浴.捕捉.开光.塑绘.A )i入宅.伐木.祭祀.会亲友.纳采.嫁娶.开光.塑绘.斋醮.安香.开市.立券.除服.成服.入殓.移柩.安葬.赴任.进人口.出行.裁衣.修造.动土.上梁.经络.交易.: )]嫁娶.入宅.祭祀.沐浴.修饰垣墙.平治道涂.)e嫁娶.安葬.祭祀.沐浴.解除.理发.冠笄.安机械.作灶.造仓.开市.开池.作厕.补垣.塞穴.断蚁.结网.Em造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上梁.合脊.安床.移徙.入宅.开市.栽种.作厕.cS动土.作灶.行丧.安葬.修坟.祭祀.祈福.求嗣.出行.沐浴.交易.扫舍.教牛马.!))开光.安床.祭祀.出行.解除.冠笄.嫁娶.伐木.架马.开柱眼.修造.动土.移徙.入宅.开生坟.合寿木.入殓.移柩.破土.安葬.修坟.xa嫁娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲友.捕捉.畋猎.启攒.除服.成服.移柩.Jo7开光.动土.破土.开市.修造.入宅.安门.祭祀.嫁娶.捕捉.7=A行丧.安葬.合寿木.开光.求嗣.雕刻.嫁娶.订盟.纳采.出火.拆卸.修造.动土.起基.上梁.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.4a嫁娶.造庙.造桥.造船.作灶.安葬.订盟.纳采.祭祀.祈福.安香.出火.修造.动土.上梁.安门.起基.竖柱.上梁.定磉.开池.移徙.入宅.立券.破土.%5'探病.余事勿取.余事勿取.mo}祭祀.嫁娶.安床.开市.入宅.探病.上梁.沐浴.捕捉.入殓.除服.成服.破土.启攒.安葬.%~S纳采.订盟.架马.词讼.开渠.嫁娶.造车器.安机械.祭祀.祈福.开光.安香.出火.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c}aw斋醮.嫁娶.移徙.出行.上梁.入宅.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取. < H N S  zL^ q7'S\|E嫁娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出火.上梁.移徙.{嫁娶.纳财.祈福.安葬.修造.开市.交易.立券.动土.上梁.塑绘.开光.进人口.纳畜.补垣.塞穴.栽种.牧养.z %嫁娶.会亲友.进人口.出行.入宅.移徙.赴任.作灶.祭祀.解除.沐浴.理发.整手足甲.入殓.移柩.破土.安葬.扫舍.ySm破土.置产.掘井.动土.安床.祭祀.祈福.求嗣.开光.出行.解除.上梁.造屋.移徙.安门.纳财.牧养.纳畜.安葬.启攒.入殓.xa_造屋.开光.理发.造船.掘井.作灶.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.移徙.动土.安床.入殓.破土.安葬.启攒.w}入宅.作梁.安门.伐木.修造.上梁.入殓.造屋.嫁娶.祭祀.祈福.求嗣.出行.动土.安床.掘井.破土.启攒.Fv)u动土.安葬.订盟.纳采.祭祀.祈福.安机械.作灶.纳畜.gu)5开光.针灸.嫁娶.订盟.纳采.祭祀.祈福.求医.治病.动土.移徙.入宅.破土.安葬.`/)'动土.破土.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.移徙.入宅.启攒.安葬.:.'_诸事不宜.沐浴.治病.破屋.坏垣.余事勿取.5-)S嫁娶.入宅.捕捉.结网.入殓.破土.安葬.C,)o开市.安葬.嫁娶.祭祀.祈福.斋醮.动土.移徙.入宅.M+Ci嫁娶.祈福.余事勿取.沐浴.修饰垣墙.平治道涂.余事勿取.N*)开市.安葬.订盟.纳采.出行.会亲友.修造.上梁.移徙.入宅.R)) 嫁娶.开市.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.安葬.J(7o作灶.动土.破土.嫁娶.出行.纳畜.祭祀.入殓.启攒.安葬.C')o动土.破土.嫁娶.祭祀.祈福.斋醮.作灶.移徙.入宅. & 祈福.出行.订盟.纳采.嫁娶.裁衣.动土.安床.放水.开市.掘井.交易.立券.栽种.开渠.除服.成服.移柩.破土.% 3塑绘.开光.解除.订盟.纳采.嫁娶.出火.修造.动土.移徙.入宅.拆卸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养. $ 祈福.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生坟.入殓.除服.成服.移柩.破土.安葬.7#S+动土.破土.订盟.安床.开池.祈福.斋醮.出行.冠笄.嫁娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除服.成服.移柩.破土.安葬.启攒.4")Q行丧.安葬.破屋.坏垣.治病.余事勿取.|!S5嫁娶.纳采.订盟.开市.入宅.祭祀.捕捉.畋猎.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.启攒.I E]开市.立券.纳财.作灶.纳采.订盟.嫁娶.祭祀.祈福.普渡.开光.安香.出火.移徙.入宅.竖柱.修造.动土.竖柱.上梁.起基.造屋.安门.造庙.造桥.破土.启攒.安葬.gE嫁娶.安门.动土.安葬.出行.沐浴.订盟.纳采.裁衣.竖柱.上梁.移徙.纳畜.牧养. SO祈福.开市.动土.行丧.安葬.塑绘.冠笄.嫁娶.会亲友.进人口.经络.裁衣.栽种.纳畜.牧养.补垣.塞穴.捕捉.{S3嫁娶.出行.入宅.开市.安门.祭祀.沐浴.理发.整手足甲.冠笄.解除.入殓.移柩.破土.启攒.安葬.ua开市.动土.破土.安床.开仓.上梁.嫁娶.冠笄.祭祀.沐浴.普渡.出行.纳财.扫舍.纳畜.赴任.a5动土.破土.掘井.开光.上梁.词讼.嫁娶.普渡.祭祀.祈福.补垣.塞穴.断蚁.筑堤.入殓.除服.成服.安葬.OS[出火.入宅.造屋.安门.安葬.嫁娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲友.开市.纳财.修造.动土.竖柱.上梁.开光.开仓.出货财.纳畜.牧养.开池.破土.启攒.S]掘井.出行.破土.行丧.安葬.嫁娶.订盟.纳采.作灶.冠笄.裁衣.会亲友.纳畜.牧养.安机械.开市.立券.纳财.安床.>a+纳采.订盟.经络.行丧.安葬.探病.嫁娶.祭祀.祈福.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.捕捉.畋猎.结网. "1 j * J  *y$l5;}T#" G嫁娶.开光.出行.祈福.求嗣.解除.拆卸.动土.修造.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.纳畜.入殓.移柩.安葬.E{伐木.祭祀.纳畜.祭祀.嫁娶.开光.出行.理发.作梁.出火.拆卸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.栽种.,'C诸事不宜.破屋.坏垣.余事勿取.}嫁娶.入宅.移徙.作灶.开市.交易.安门.栽种.祭祀.解除.沐浴.整手足甲.入殓.移柩.破土.启攒.安葬.oW嫁娶.破土.置产.栽种.安葬.修坟.行丧.入宅.移徙.安床.开光.祈福.求嗣.进人口.开市.交易.立券.出火.拆卸.修造.动土.ja开仓.出货财.置产.安葬.动土.破土.掘井.栽种.嫁娶.祭祀.裁衣.结网.冠笄.沐浴.J7o祈福.动土.破土.嫁娶.出行.开市.安床.入殓.启攒.安葬.CK)o开市.入宅.嫁娶.祭祀.祈福.斋醮.治病.破土.安葬.JJ)}动土.安葬.嫁娶.纳采.出行.祭祀.祈福.解除.移徙.入宅.^I'%诸事不宜.补垣.塞穴.结网.入殓.除服.成服.移柩.安葬.启攒.余事勿取.JH)}造庙.安葬.嫁娶.开市.立券.祭祀.祈福.动土.移徙.入宅..G)E开市.破土.祭祀.作灶.纳财.捕捉.RF赴任.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.YE)祭祀.祈福.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.3D'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.JC7o嫁娶.移徙.入宅.纳采.祭祀.祈福.解除.动土.破土.安葬.,B'C诸事不宜.沐浴.扫舍.余事勿取.PA' 余事勿取.祭祀.冠笄.嫁娶.捕捉.结网.畋猎.取渔.余事勿取.@ !塑绘.出行.冠笄.嫁娶.进人口.裁衣.纳婿.造畜椆栖.交易.立券.牧养.开生坟.入殓.除服.成服.移柩.安葬.启攒.?S;开市.斋醮.安床.出行.经络.移徙.入宅.治病.会亲友.祭祀.祈福.斋醮.安香.移徙.嫁娶.造屋.起基.>Eo动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲友.裁衣.开仓.经络.纳畜.造畜椆栖.教牛马.牧养.W=a_移徙.开市.入宅.嫁娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿取.<aO造屋.入宅.作灶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.嫁娶.会亲友.放水.掘井.牧养.纳畜.开渠.安碓磑.b;S开市.入宅.安床.动土.安葬.祭祀.进人口.纳财.纳畜.牧养.捕捉.余事勿取.A:KG嫁娶.开市.栽种.合寿木.祭祀.祈福.斋醮.出行.纳采.订盟.安机械.出火.拆卸.修造.动土.起基.移徙.入宅.造庙.入殓.除服.成服.移柩.破土.安葬.谢土.Z9Sq祈福.上梁.开仓.掘井.牧养.纳采.订盟.嫁娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲友.安香.出火.拆卸.造屋.起基.安床.作灶.挂匾.安葬.破土.启攒.立碑.入殓.移柩.;8)_嫁娶.出行.求医.治病.破屋.坏垣.余事勿取.m7o}出火.嫁娶.入宅.作灶.破土.上梁.动土.沐浴.理发.捕捉.入殓.移柩.破土.启攒.安葬.66S)嫁娶.安葬.行丧.破土.修坟.订盟.纳采.祭祀.祈福.开光.安香.出火.立券.安机械.移徙.入宅.竖柱.上梁.会亲友.安床.拆卸.挂匾.牧养.教牛马.O5aO开市.动土.破土.嫁娶.修造.安葬.祭祀.修饰垣墙.平治道涂.L4aG斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈福.求嗣.开光.解除.扫舍.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.栽种.纳畜.牧养.n3S嫁娶.出行.纳采.入宅.作灶.祭祀.沐浴.塑绘.开光.入学.解除.扫舍.治病.开池.牧养.2E{安葬.行丧.伐木.作梁.嫁娶.祭祀.祈福.出火.开光.求嗣.出行.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.动土.,1'C诸事不宜.祭祀.解除.余事勿取. "uF \ > W j !7 s.Ue7u0E安葬.出行.祈福.栽种.求嗣.嫁娶.纳采.合帐.裁衣.冠笄.伐木.作梁.修造.动土.起基.竖柱.上梁.安门.作灶.筑堤.造畜椆栖./E{安葬.开市.交易.立券.嫁娶.开光.祭祀.祈福.求嗣.出行.解除.伐木.入宅.移徙.安床.出火.拆卸.修造.上梁.栽种.移柩.,.'C诸事不宜.祭祀.栽种.余事勿取.J-)}嫁娶.开光.开光.求医.治病.动土.上梁.入殓.破土.安葬.Jf)}开光.开市.嫁娶.订盟.纳采.祭祀.祈福.入殓.破土.安葬.e''诸事不宜.诸事不宜.Rd) 开市.安葬.订盟.纳采.出行.祭祀.祈福.修造.动土.移徙.入宅.`c5作灶.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.;b)_行丧.安葬.嫁娶.祭祀.沐浴.扫舍.修饰垣墙.Ya)动土.破土.嫁娶.纳采.出行.求医.治病.开市.移徙.入宅.启攒.安葬.M`7u移徙.入宅.安葬.订盟.纳采.出行.祈福.斋醮.安床.会亲友.<_7S上梁.动土.破土.祭祀.入殓.移柩.启攒.安葬.5^)S嫁娶.安葬.裁衣.作灶.移徙.入宅.纳畜.Y])开市.安门.嫁娶.纳采.祭祀.祈福.求医.治病.出行.动土.移徙.入宅.@\'k诸事不宜.祭祀.捕捉.取渔.修饰垣墙.余事勿取.[ #订盟.纳采.会亲友.进人口.雕刻.拆卸.修造.动土.起基.开市.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.ZEI开市.安门.掘井.作灶.嫁娶.出行.安机械.祭祀.塑绘.开光.治病.经络.安床.结网.塞穴.破土.入殓.BY)m嫁娶.入宅.破屋.坏垣.求医.治病.畋猎.余事勿取.^XS{开市.交易.嫁娶.安葬.行丧.祭祀.沐浴.捕捉.结网.畋猎.取渔.余事勿取.dWE开市.伐木.作梁.作灶.安机械.移徙.入宅.出行.祭祀.祈福.斋醮.纳采.订盟.安香.出火.解除.会亲友.修造.动土.拆卸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.uVK/斋醮.出行.治病.合寿木.祭祀.沐浴.理发.嫁娶.作灶.整手足甲.扫舍.修饰垣墙.平治道涂.qUY安床.出货财.作灶.动土.破土.开光.求嗣.出行.冠笄.嫁娶.伐木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出火.挂匾.起基.修造.开生坟.合寿木.入殓.除服.成服.移柩.安葬.RTEo行丧.伐木.作梁.作灶.嫁娶.订盟.纳采.冠笄.会亲友.安机械.造车器.祭祀.出行.纳财.入宅.安香.出火.入学.塑绘.开光.拆卸.起基.修造.动土.牧养.栽种.安门.作厕.8EG作灶.掘井.动土.栽种.祈福.开光.塑绘.酬神.订盟.纳采.裁衣.安床.开市.立券.入殓.除服.成服.移柩.启攒.安葬.立碑.赴任.会亲友.出行.交易.竖柱.7S_作灶.开光.嫁娶.开市.入宅.订盟.纳采.冠笄.拆卸.修造.动土.安床.入殓.除服.成服.移柩.安葬.破土.启攒.造仓.W6)栽种.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.嫁娶.裁衣.动土.起基.出火.拆卸.移徙.入宅.安香.修造.竖柱.上梁.纳畜.牧养.祈福.求嗣.解除.伐木.定磉.造屋.安门.C5SE嫁娶.入宅.移徙.作灶.安葬.祭祀.沐浴.捕捉.栽种.44E3造庙.嫁娶.伐木.安葬.祭祀.开光.塑绘.订盟.纳采.合帐.冠笄.拆卸.动土.起基.上梁.入宅.安香.开市.立券.纳财.沐浴.求嗣.出火.竖柱.安门.3)作梁.造庙.祭祀.出行.订盟.纳采.裁衣.合帐.冠笄.进人口.动土.安床.作灶.入殓.移柩.安葬.破土.结网.取渔.畋猎. ]z p  ND]BK_.uI2')诸事不宜.破屋.坏垣.1E 安床.嫁娶.作灶.入宅.祭祀.解除.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.谢土.沐浴.扫舍.捕捉.取渔.结网.畋猎.理发.I0赴任.祈福.求嗣.开光.塑绘.斋醮.订盟.纳采.嫁娶.拆卸.安床.入宅.安香.移柩.修坟.安葬.谢土.栽种.解除.冠笄.裁衣.移徙.修造.动土.竖柱.放水.启攒.立碑.X/So动土.作灶.入宅.开光.安床.祭祀.嫁娶.纳婿.除服.成服.入殓.移柩.3.E1作灶.出行.入宅.安葬.塑绘.开光.订盟.纳采.裁衣.合帐.冠笄.安机械.会亲友.纳财.开市.立券.交易.安床.竖柱.上梁.结网.栽种.解除.经络.,-'C诸事不宜.扫舍.塞穴.余事勿取.t,a栽种.动土.安葬.掘井.修坟.探病.祭祀.会亲友.立券.交易.裁衣.合帐.嫁娶.冠笄.进人口.3+S#祭祀.嫁娶.出行.上梁.掘井.裁衣.经络.伐木.开柱眼.拆卸.修造.动土.上梁.合脊.合寿木.入殓.除服.成服.移柩.破土.安葬.启攒.修坟.立碑.4*S%纳采.动土.开市.交易.安门.开光.祈福.求嗣.出行.解除.伐木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除服.成服.移柩.谢土.纳畜.牧养.T)Eu纳财.开市.安葬.破土.理发.冠笄.嫁娶.进人口.栽种.捕捉.针灸.(E{祈福.嫁娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出火.拆卸.起基.修造.动土.上梁.移徙.造船.开市.交易.立券.纳财.j'S塑绘.开光.造桥.除服.成服.嫁娶.冠笄.祭祀.出行.会亲友.修造.动土.入殓.破土.;&EC嫁娶.移徙.开市.入宅.破屋.坏垣.余事勿取.g%S 纳采.开光.安床.嫁娶.开市.祈福.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~$=O纳畜.理发.合寿木.嫁娶.造车器.纳采.订盟.祭祀.祈福.安机械.移徙.入宅.开市.立券.破土.安葬._#E 开市.造屋.治病.作灶.嫁娶.冠笄.会亲友.安机械.纳财.交易.立券.置产.j"7-移徙.入宅.栽种.纳财.开市.交易.立券.开光.针灸.会亲友.理发.安床.造仓.结网.!5入宅.移徙.出火.分居.安香.作灶.开市.交易.立券.安葬.动土.伐木.嫁娶.开光.求嗣.会亲友.安床.牧养.塑绘.针灸. )掘井.词讼.嫁娶.安床.开光.出行.祭祀.动土.出火.解除.会亲友.开市.交易.立券.挂匾.入宅.移徙.拆卸.破土.启攒.安葬.oQ嫁娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.裁衣.竖柱.上梁.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.启攒.u o开光.掘井.针灸.出行.嫁娶.入宅.移徙.作灶.动土.祭祀.祈福.求嗣.入殓.启攒.安葬.移柩.E 入殓.安葬.作灶.入宅.祭祀.沐浴.祈福.求嗣.斋醮.订盟.纳采.裁衣.冠笄.开市.立券.交易.纳财.沐浴.除服.谢土.出行.移柩.>TEG安葬.作灶.伐木.作梁.祭祀.求嗣.沐浴.酬神.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造仓.开池.经络.纳财.开市.立券.交易.结网.取渔.纳畜.捕捉.XSE}嫁娶.上梁.入宅.作灶.取渔.入殓.除服.成服.移柩.破土.安葬.立碑.;R)]作灶.安床.祈福.求嗣.斋醮.塑绘.开光.订盟.纳采.嫁娶.动土.入宅.安香.移柩.安葬.谢土.出行.沐浴.修造.竖柱.上梁.纳财.破土.解除.安门.放水.Q')诸事不宜.求医.破屋.BPEO栽种.动土.开市.作灶.祭祀.祈福.酬神.订盟.纳采.冠笄.裁衣.合帐.嫁娶.安床.移徙.入宅.安香.入殓.移柩.启攒.安葬.解除.取渔.捕捉.伐木.安门.出火.]OE造屋.栽种.安葬.作灶.塑绘.开光.酬神.斋醮.订盟.纳采.裁衣.合帐.拆卸.动土.上梁.安床.安香.造庙.挂匾.会亲友.进人口.出行.修造.纳财.伐木.放水.出火.纳畜.沐浴.安门.AN_5祭祀.祈福.安葬.安门.余事勿取.作灶.平治道涂.XME}斋醮.作灶.安床.安葬.安床.合帐.入宅.问名.纳采.求嗣.祭祀.开仓. c5 < b % Npm 7N0LU掘井.祭祀.斋醮.裁衣.合帐.冠笄.订盟.纳采.嫁娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲友.出行.祈福.求嗣.立碑.上梁.放水.[KSu祭祀.祈福.移徙.嫁娶.入宅.裁衣.合帐.入殓.除服.成服.会亲友.纳财.JEQ出行.嫁娶.入宅.动土.祭祀.祈福.求嗣.酬神.裁衣.安床.立券.交易.入殓.除服.成服.移柩.谢土.启攒.EIEU安葬.上梁.入宅.作灶.祭祀.沐浴.开光.塑绘.祈福.求嗣.订盟.纳采.冠笄.裁衣.嫁娶.动土.除服.成服.移柩.破土.启攒.出行.安碓磑.放水.开市.立券.交易.&HS 伐木.作灶.安葬.取渔.入宅.塑绘.开光.祈福.求嗣.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.IG'}余事勿取.祭祀.结网.入殓.除服.成服.移柩.安葬.破土.&FE安床.栽种.治病.作灶.祭祀.冠笄.嫁娶.拆卸.修造.动土.起基.上梁.造屋.入宅.开市.开池.塞穴.入殓.除服.成服.移柩.安葬.破土._E7入宅.开市.安葬.祭祀.沐浴.求医.治病.扫舍.破屋.坏垣.解除.余事勿取.DS]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.嫁娶.会亲友.进人口.牧养.捕捉.入殓.移柩.安葬.启攒.ECo+置产.造屋.合脊.开光.探病.安门.作灶.祈福.求嗣.斋醮.纳采.嫁娶.伐木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除服.成服.移柩.安葬.破土.谢土.ABEO嫁娶.祈福.掘井.安葬.祭祀.平治道涂.余事勿取.\AE开市.动土.安葬.破土.会亲友.求嗣.理发.冠笄.结网.捕捉.开光.理发.u@S'开光.嫁娶.作灶.掘井.纳畜.祭祀.祈福.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j?S祭祀.移徙.入宅.动土.破土.纳采.会亲友.竖柱.上梁.立券.入殓.移柩.安葬.启攒.n>S嫁娶.动土.开光.造屋.破土.祭祀.祈福.求嗣.斋醮.入殓.除服.成服.移柩.安葬.启攒.q=S移徙.入宅.出火.安门.安葬.纳采.嫁娶.祭祀.祈福.出行.开市.会亲友.动土.破土.启攒.c<E嫁娶.开市.安葬.破土.纳采.祭祀.祈福.出行.会亲友.修造.动土.移徙.入宅.|;EC开仓.造屋.安葬.安床.祭祀.祈福.斋醮.塑绘.开光.除服.成服.入殓.作灶.嫁娶.捕捉.畋猎.纳财.Q:) 破土.伐木.入殓.除服.成服.移柩.启攒.安葬.立碑.余事勿取.u9)Q入宅.安床.塑绘.开光.出行.订盟.纳采.除服.成服.嫁娶.纳婿.入殓.移柩.启攒.安葬.立碑.3s'Q诸事不宜.解除.破屋.坏垣.余事勿取.ZrE造屋.开市.作灶.入宅.祭祀.会亲友.出行.订盟.纳采.沐浴.修造.动土.祈福.斋醮.嫁娶.拆卸.安床.入殓.移柩.安葬.谢土.赴任.裁衣.竖柱.上梁.伐木.捕捉.栽种.破土.安门.%qE出行.治病.安葬.开市.会亲友.纳采.进人口.修造.动土.竖柱.上梁.祭祀.开光.塑绘.祈福.斋醮.嫁娶.安床.移徙.入宅.安香.纳畜.UpEw嫁娶.移徙.入宅.开光.修饰垣墙.平治道涂.入殓.移柩.余事勿取.{oEA作灶.掘井.谢土.入宅.出行.嫁娶.订盟.纳采.入殓.安床.启攒.安葬.祭祀.裁衣.会亲友.进人口.BnEO作灶.祭祀.上梁.出行.沐浴.解除.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.移徙.入宅.除服.成服.移柩.破土.启攒.安葬.扫舍.修坟.伐木.纳财.交易.立券.,m'C诸事不宜.祭祀.解除.余事勿取.AlEM开仓.嫁娶.移徙.入宅.祭祀.沐浴.祈福.斋醮.订盟.纳采.裁衣.拆卸.起基.竖柱.上梁.安床.入殓.除服.成服.移柩.启攒.挂匾.求嗣.出行.合帐.造畜椆栖.bkE嫁娶.入殓.安葬.出行.塑绘.开光.沐浴.冠笄.会亲友.作灶.放水.造畜椆栖.;j)_开市.安床.祭祀.作灶.入殓.除服.余事勿取.XiE}开市.伐木.嫁娶.作梁.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑. 9 u 6 ) _  { K Tu9bLhSU祈福.嫁娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出火.塑绘.裁衣.会亲友.入学.拆卸.扫舍.造仓.挂匾.掘井.开池.结网.栽种.纳畜.破土.修坟.立碑.安葬.入殓.4g7C嫁娶.开市.安葬.破屋.坏垣.余事勿取.fE{造屋.开市.动土.破土.嫁娶.祭祀.沐浴.裁衣.出行.理发.移徙.捕捉.畋猎.放水.入宅.除服.成服.启攒.安葬.移柩.入殓.7e)W嫁娶.安葬.祭祀.安碓磑.结网.余事勿取.sda移徙.入宅.造庙.作灶.治病.安葬.祭祀.冠笄.嫁娶.会亲友.进人口.裁衣.结网.平治道涂.OcEi入宅.开光.开市.动土.嫁娶.订盟.纳采.祭祀.祈福.求嗣.会亲友.解除.出行.入学.纳财.开市.交易.立券.习艺.经络.安床.开仓.出货财.纳畜.安葬.启攒.修坟.入殓.|bo探病.祭祀.出行.上梁.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲友.解除.求医.治病.入学.安床.安门.安香.出火.拆卸.扫舍.入宅.挂匾.开生坟.合寿木.破土.修坟.启攒.入殓.Ha7k破土.动土.安葬.祭祀.解除.教牛马.会亲友.余事勿取.`Sk开光.嫁娶.开市.动土.破土.交易.立券.纳财.安床.裁衣.造畜椆栖.安葬.谢土.启攒.除服.成服.修坟.立碑.移柩.入殓.c_au造庙.嫁娶.出行.动土.安葬.行丧.订盟.纳采.会亲友.祭祀.斋醮.沐浴.塑绘.出火.开光.竖柱.上梁.开市.交易.立券.作梁.开柱眼.伐木.架马.安门.安床.拆卸.牧养.造畜椆栖.掘井.{^EA开市.安床.安葬.修坟.嫁娶.纳采.订盟.问名.祭祀.冠笄.裁衣.会亲友.进人口.纳财.捕捉.作灶.e]a{造庙.入宅.修造.安葬.行丧.嫁娶.祭祀.沐浴.补垣.塞穴.断蚁.解除.余事勿取. \SW祈福.嫁娶.安床.入宅.造船.沐浴.开仓.出货财.开市.交易.立券.纳财.栽种.纳畜.牧养.畋猎.入殓.破土.安葬.;[7Q斋醮.嫁娶.开市.祭祀.破屋.坏垣.余事勿取.%Z}]纳采.订盟.嫁娶.上梁.开市.斋醮.造屋.安门.沐浴.捕捉.畋猎.理发.整手足甲.入殓.除服.成服.破土.安葬.谢土.立碑.修坟.启攒.YE开市.出行.安葬.行丧.嫁娶.订盟.纳采.会亲友.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出火.挂匾.拆卸.置产."X)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+W'A诸事不宜.平治道涂.余事勿取.NV)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JU)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=׋/Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5׋.)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J׋-)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<׋,)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u׋+ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ׋*SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:׋)'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>׋(EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.׋'EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P׋&aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c׋%S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒. Y  $ R n ~ M * m%J:UOC*YK׋$SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S׋#aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;׋"a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)׋!E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X׋ E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.׋S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.׋a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W׋a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0׋S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r׋o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]׋Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U׋oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T׋Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i׋';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.S׋Es嫁娶.动土.安葬.作灶.祭祀.沐浴.出行.冠笄.进人口.余事勿取.`׋)'入宅.作灶.祈福.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.׋''诸事不宜.诸事不宜.,׋'C诸事不宜.沐浴.扫舍.余事勿取.j׋E嫁娶.入宅.治病.赴任.祭祀.祈福.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造畜椆栖.入殓.移柩.启攒.安葬.谢土.除服.成服.会亲友.竖柱.上梁.经络.开市.交易.立券.纳财.纳畜.筑堤.^׋)#造屋.治病.祭祀.解除.祈福.开光.塑绘.斋醮.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.入殓.除服.成服.移柩.启攒.安床.赴任.出行.移徙.竖柱.上梁.伐木.栽种.破土.安葬.纳畜.:׊J'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取. ׊IEe开市.交易.破土.作灶.祭祀.塑绘.开光.订盟.纳采.嫁娶.安床.进人口.入殓.除服.成服.移柩.启攒.安葬.立碑.%׊H)1作灶.治病.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.赴任.进人口.会亲友.׊GEK作灶.治病.伐木.作梁.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.除服.成服.入殓.移柩.安葬.谢土.赴任.会亲友.进人口.出行.竖柱.上梁.经络.开市.交易.立券.纳财.开仓.F׊FEY嫁娶.入宅.安门.移徙.理发.会亲友.补垣.塞穴.结网.Z׊EE入宅.作灶.安床.开仓.祭祀.会亲友.嫁娶.沐浴.修造.动土.祈福.开光.塑绘.出行.订盟.纳采.裁衣.入殓.除服.成服.移柩.启攒.赴任.竖柱.上梁.纳财.扫舍.栽种.纳畜.伐木. qr# H  ^  r + 2 Lg4f^7e,׊D'C诸事不宜.祭祀.沐浴.余事勿取.p׊CS开光.掘井.安葬.谢土.修坟.嫁娶.冠笄.安床.纳采.会亲友.塞穴.捕捉.置产.造畜椆栖.L׊BSU移徙.入宅.安门.作梁.安葬.祭祀.祈福.求嗣.斋醮.沐浴.冠笄.出行.理发.拆卸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫舍.除服.成服.移柩.启攒.立碑.谢土.p׊AS安床.安门.破土.修坟.安葬.捕捉.畋猎.会亲友.解除.入殓.除服.成服.移柩.余事勿取.Z׊@Sq嫁娶.开市.入宅.出火.移徙.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.会亲友.解除.入学.纳财.交易.立券.经络.起基.动土.定磉.开池.栽种.纳畜.牧养.破土.入殓.立碑.安葬.L׊?Ec造屋.造船.动土.破土.嫁娶.纳采.订盟.祭祀.冠笄.裁衣.伐木.作梁.架马.定磉.开柱眼.作灶.移徙.安床.畋猎.结网.开池.作厕.除服.成服.启攒.入殓.移柩.安葬.4׊>)Q嫁娶.安葬.破屋.坏垣.祭祀.余事勿取.I׊=E]开市.造庙.动土.破土.嫁娶.订盟.纳采.祭祀.祈福.塑绘.开光.移徙.安床.伐木.作梁.捕捉.畋猎.结网.求医.治病.解除.安葬.除服.成服.移柩.入殓.立碑.谢土.H׊<SM嫁娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈福.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上梁.安门.安香.出火.教牛马.会亲友.破土.J׊;E_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出火.修饰垣墙.平治道涂.会亲友.出行.开池.作厕.^׊:S{嫁娶.开市.祈福.斋醮.安葬.塑绘.会亲友.安机械.塞穴.结网.裁衣.经络._׊9am开市.纳采.造庙.安床.开渠.安葬.嫁娶.造车器.出行.会亲友.移徙.入宅.修造.动土.雕刻.开光.安香.出火.理发.会亲友.造屋.合脊.起基.归岫.安门.拆卸.扫舍.栽种.造畜椆栖.I׊8SQ开市.动土.破土.行丧.安葬.祭祀.沐浴.出行.余事勿取.n׊7S嫁娶.入宅.安床.掘井.开光.祭祀.理发.置产.塞穴.除服.成服.移柩.入殓.破土.安葬.;׊6S3移徙.入宅.出火.入殓.安葬.开市.纳财.出行.祭祀.祈福.求嗣.斋醮.问名.入学.起基.定磉.置产.开渠.掘井.拆卸.栽种.纳畜.牧养.动土.破土.启攒._׊5oa嫁娶.纳采.订盟.安床.动土.破土.安葬.祭祀.沐浴.捕捉.畋猎.结网.扫舍.t׊4S%嫁娶.移徙.出火.开市.入宅.订盟.纳采.会亲友.祭祀.祈福.修造.动土.安机械.破土.安葬.{׊3S3祭祀.嫁娶.入宅.修造.动土.祭祀.扫舍.破土.安葬.除服.成服.启攒.移柩.入殓.立碑.余事勿取.B׊2)m祈福.安葬.订盟.纳采.会亲友.安机械.纳财.牧养.:׊1'_余事勿取.祭祀.解除.破屋.坏垣.余事勿取.`׊0)'开市.赴任.嫁娶.订盟.纳采.出行.祭祀.祈福.动土.移徙.入宅.破土.安葬.C׊/)o移徙.入宅.入殓.除服.成服.移柩.破土.启攒.安葬.9׊.']余事勿取.祭祀.结网.造畜椆栖.余事勿取.?׊-7Y开市.动土.破土.开光.针灸.会亲友.启攒.安葬.8׉g)Y嫁娶.入宅.沐浴.理发.入学.习艺.进人口.&׉f)5行丧.安葬.作灶.造畜椆栖.?׉e)g动土.上梁.嫁娶.祭祀.安机械.入殓.破土.安葬.׉dEm作灶.入殓.安葬.安床.祭祀.祈福.斋醮.沐浴.竖柱.订盟.纳采.嫁娶.拆卸.入宅.移柩.启攒.谢土.赴任.出火.纳畜.J׉cEa栽种.动土.安葬.开市.祭祀.作灶.入殓.除服.成服.畋猎.y׉bE=开仓.冠笄.伐木.作梁.祭祀.塑绘.开光.祈福.斋醮.出行.订盟.纳采.裁衣.嫁娶.拆卸.修造.安床.入宅.安香.入殓.启攒.安葬.谢土.赴任.会亲友.进人口.出行.移徙.上梁.经络.开市.交易.立券.纳财. ׉aE]出行.祈福.安葬.作灶.会亲友.嫁娶.订盟.纳采.纳婿.拆卸.修造.动土.起基.竖柱.上梁.安床.会亲友.纳财. }> w f  w TN<8,׉`'C诸事不宜.破屋.坏垣.余事勿取.]׉_Sw开光.嫁娶.掘井.伐木.作梁.祭祀.祈福.求嗣.斋醮.造庙.出火.安机械.会亲友.开市.交易.立券.纳财.习艺.经络.求医.治病.开池.作厕.畋猎.结网.栽种.牧养.安葬.破土.启攒.n׉^S嫁娶.祭祀.入宅.造屋.移徙.捕捉.结网.入殓.除服.成服.移柩.破土.安葬.启攒.立碑.\׉]E嫁娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治道涂.余事勿取.{׉\S3移徙.入宅.出行.祈福.嫁娶.沐浴.理发.冠笄.安床.开市.立券.会亲友.交易.纳财.结网.教牛马.׉[E 嫁娶.动土.破土.修坟.出行.造车器.造畜椆栖.解除.冠笄.裁衣.作梁.雕刻.会亲友.移徙.入宅.安机械.造畜椆栖.开市.扫舍.E׉ZSG造庙.造船.动土.破土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.置产.求医.治病.开市.交易.立券.会亲友.移徙.竖柱.上梁.造屋.合脊.安门.放水.捕捉.纳畜. ׉YgA开光.嫁娶.会亲友.栽种.针灸.安葬.冠笄.祭祀.沐浴.作灶.理发.整手足甲.扫舍.补垣.塞穴.入殓.破土.启攒.׉Xg'开市.开仓.出货财.安床.安门.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.求医.治病.出火.移徙.入宅.P׉WEm动土.破土.开市.安葬.祭祀.作灶.纳财.捕捉.畋猎.余事勿取. ׉VYO上梁.开光.造屋.架马.合寿木.造车器.嫁娶.订盟.纳采.会亲友.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j׉US嫁娶.开市.入宅.祈福.安葬.订盟.纳采.会亲友.交易.立券.纳财.栽种.纳畜.牧养.B׉T)m开市.嫁娶.祭祀.沐浴.解除.破屋.坏垣.余事勿取.E׉SKO开市.破土.掘井.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.安香.出火.造庙.移徙.出行.入宅.造庙.起基.竖柱.上梁.安床.纳畜.捕捉.纳婿.安葬.B׉RSC开市.交易.祭祀.入宅.安葬.捕捉.畋猎.余事勿取.3׉Q)O嫁娶.开市.祭祀.平治道涂.余事勿取.H׉PSM入宅.上梁.斋醮.出火.谢土.纳采.订盟.开市.交易.立券.会亲友.纳畜.牧养.问名.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.启攒.入殓.除服.成服.׉O''诸事不宜.诸事不宜.:׉N'_诸事不宜.祭祀.沐浴.赴任.出行.余事勿取._׉Moa动土.冠笄.移徙.入宅.开市.竖柱.上梁.祭祀.出行.成服.除服.沐浴.入殓. ׉LEe安床.开光.开市.交易.祭祀.裁衣.冠笄.嫁娶.安机械.拆卸.动土.起基.移徙.入宅.入殓.启攒.安葬.造仓.经络.4׉KE5入殓.安葬.开市.交易.祭祀.诸事不宜.{׉JEA移徙.入宅.作灶.安葬.祭祀.裁衣.冠笄.嫁娶.纳婿.会亲友.除服.成服.移柩.捕捉.进人口.入殓.u׉I)Q定磉.安葬.祭祀.赴任.动土.上梁.开光.塑绘.冠笄.拆卸.起基.安床.开市.立券.赴任.经络.7׉E9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.嫁娶.拆卸.起基.安床.入宅.开市.入殓.除服.成服.移柩.破土.谢土.挂匾.开柱眼.交易.I׉E_移徙.入宅.出行.栽种.祭祀.沐浴.破屋.坏垣.余事勿取.׉EW作灶.祭祀.入宅.嫁娶.祭祀.冠笄.会亲友.拆卸.起基.除服.成服.移柩.启攒.安葬.沐浴.捕捉.开光.塑绘.A׈)i入宅.伐木.祭祀.会亲友.纳采.嫁娶.开光.塑绘.斋醮.安香.开市.立券.除服.成服.入殓.移柩.安葬.赴任.进人口.出行.裁衣.修造.动土.上梁.经络.交易.:׈~)]嫁娶.入宅.祭祀.沐浴.修饰垣墙.平治道涂.׈})e嫁娶.安葬.祭祀.沐浴.解除.理发.冠笄.安机械.作灶.造仓.开市.开池.作厕.补垣.塞穴.断蚁.结网.׈|Em造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上梁.合脊.安床.移徙.入宅.开市.栽种.作厕.c׈{S动土.作灶.行丧.安葬.修坟.祭祀.祈福.求嗣.出行.沐浴.交易.扫舍.教牛马. "D N  E L x 9hZT5"C!׈z))开光.安床.祭祀.出行.解除.冠笄.嫁娶.伐木.架马.开柱眼.修造.动土.移徙.入宅.开生坟.合寿木.入殓.移柩.破土.安葬.修坟.x׈ya嫁娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲友.捕捉.畋猎.启攒.除服.成服.移柩.J׈xo7开光.动土.破土.开市.修造.入宅.安门.祭祀.嫁娶.捕捉.7׈w=A行丧.安葬.合寿木.开光.求嗣.雕刻.嫁娶.订盟.纳采.出火.拆卸.修造.动土.起基.上梁.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.4׈va嫁娶.造庙.造桥.造船.作灶.安葬.订盟.纳采.祭祀.祈福.安香.出火.修造.动土.上梁.安门.起基.竖柱.上梁.定磉.开池.移徙.入宅.立券.破土.%׈u5'探病.余事勿取.余事勿取.m׈to}祭祀.嫁娶.安床.开市.入宅.探病.上梁.沐浴.捕捉.入殓.除服.成服.破土.启攒.安葬.%׈sS纳采.订盟.架马.词讼.开渠.嫁娶.造车器.安机械.祭祀.祈福.开光.安香.出火.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c׈raw斋醮.嫁娶.移徙.出行.上梁.入宅.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.\׈qE嫁娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出火.上梁.移徙.u׈pa针灸.伐木.作梁.造庙.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.?׈og)嫁娶.入宅.修造.动土.会亲友.破土.祭祀.出行.u׈no 嫁娶.开市.祭祀.祈福.斋醮.纳采.修坟.冠笄.沐浴.出行.修造.动土.移徙.入宅.破土.安葬.׈mo-开市.祈福.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.取渔.会亲友.入学.移柩.启攒.除服.成服.L׈lYQ嫁娶.开市.造屋.作梁.合寿木.祭祀.冠笄.捕捉.余事勿取.7׈k}安葬.纳畜.出行.行丧.伐木.栽种.造庙.造桥.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.解除.进人口.入宅.移徙.出火.安床.开市.交易.立券.挂匾.g׈j)5开光.针灸.嫁娶.订盟.纳采.祭祀.祈福.求医.治病.动土.移徙.入宅.破土.安葬.`׈i)'动土.破土.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.移徙.入宅.启攒.安葬.:׈h'_诸事不宜.沐浴.治病.破屋.坏垣.余事勿取.5׈g)S嫁娶.入宅.捕捉.结网.入殓.破土.安葬.C׈f)o开市.安葬.嫁娶.祭祀.祈福.斋醮.动土.移徙.入宅.M׈eCi嫁娶.祈福.余事勿取.沐浴.修饰垣墙.平治道涂.余事勿取.N׈)开市.安葬.订盟.纳采.出行.会亲友.修造.上梁.移徙.入宅.R׈) 嫁娶.开市.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.安葬.J׈7o作灶.动土.破土.嫁娶.出行.纳畜.祭祀.入殓.启攒.安葬.C׈)o动土.破土.嫁娶.祭祀.祈福.斋醮.作灶.移徙.入宅. ׈ 祈福.出行.订盟.纳采.嫁娶.裁衣.动土.安床.放水.开市.掘井.交易.立券.栽种.开渠.除服.成服.移柩.破土.׈ 3塑绘.开光.解除.订盟.纳采.嫁娶.出火.修造.动土.移徙.入宅.拆卸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养. ׈ 祈福.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生坟.入殓.除服.成服.移柩.破土.安葬.7׈S+动土.破土.订盟.安床.开池.祈福.斋醮.出行.冠笄.嫁娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除服.成服.移柩.破土.安葬.启攒.4׈)Q行丧.安葬.破屋.坏垣.治病.余事勿取.|׈S5嫁娶.纳采.订盟.开市.入宅.祭祀.捕捉.畋猎.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.启攒.I׈E]开市.立券.纳财.作灶.纳采.订盟.嫁娶.祭祀.祈福.普渡.开光.安香.出火.移徙.入宅.竖柱.修造.动土.竖柱.上梁.起基.造屋.安门.造庙.造桥.破土.启攒.安葬.g׈E嫁娶.安门.动土.安葬.出行.沐浴.订盟.纳采.裁衣.竖柱.上梁.移徙.纳畜.牧养. !v Y \ h O z B Z Y y@]v ׈SO祈福.开市.动土.行丧.安葬.塑绘.冠笄.嫁娶.会亲友.进人口.经络.裁衣.栽种.纳畜.牧养.补垣.塞穴.捕捉.{׈S3嫁娶.出行.入宅.开市.安门.祭祀.沐浴.理发.整手足甲.冠笄.解除.入殓.移柩.破土.启攒.安葬.u׈a开市.动土.破土.安床.开仓.上梁.嫁娶.冠笄.祭祀.沐浴.普渡.出行.纳财.扫舍.纳畜.赴任.׈a5动土.破土.掘井.开光.上梁.词讼.嫁娶.普渡.祭祀.祈福.补垣.塞穴.断蚁.筑堤.入殓.除服.成服.安葬.O׈S[出火.入宅.造屋.安门.安葬.嫁娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲友.开市.纳财.修造.动土.竖柱.上梁.开光.开仓.出货财.纳畜.牧养.开池.破土.启攒.׈S]掘井.出行.破土.行丧.安葬.嫁娶.订盟.纳采.作灶.冠笄.裁衣.会亲友.纳畜.牧养.安机械.开市.立券.纳财.安床.>׈ a+纳采.订盟.经络.行丧.安葬.探病.嫁娶.祭祀.祈福.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.捕捉.畋猎.结网.׈ SC动土.破土.嫁娶.掘井.安床.订盟.纳采.祭祀.祈福.安香.出火.开市.立券.入宅.挂匾.造桥.启攒.安葬.4׈ )Q斋醮.开市.沐浴.破屋.坏垣.余事勿取.`׈ E 开市.交易.入宅.嫁娶.祭祀.普渡.捕捉.解除.结网.畋猎.入殓.破土.安葬.E׈ SG开市.立券.置产.作灶.造桥.嫁娶.纳采.订盟.祭祀.祈福.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.定磉.安门.安葬.破土.r׈}y嫁娶.栽种.祈福.造桥.安葬.安门.伐木.作梁.祭祀.理发.作灶.沐浴.修饰垣墙.平治道涂.׈-开市.入宅.动土.破土.安葬.作灶.上梁.安床.开仓.祈福.沐浴.理发.会亲友.塑绘.开光.栽种.牧养.嫁娶.经络.补垣.塞穴.J׈7o祈福.动土.破土.嫁娶.出行.开市.安床.入殓.启攒.安葬.C׈)o开市.入宅.嫁娶.祭祀.祈福.斋醮.治病.破土.安葬.J׈)}动土.安葬.嫁娶.纳采.出行.祭祀.祈福.解除.移徙.入宅.^׈'%诸事不宜.补垣.塞穴.结网.入殓.除服.成服.移柩.安葬.启攒.余事勿取.J׈)}造庙.安葬.嫁娶.开市.立券.祭祀.祈福.动土.移徙.入宅..׈)E开市.破土.祭祀.作灶.纳财.捕捉.Rׇ;赴任.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.Yׇ:)祭祀.祈福.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.3ׇ9'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.Jׇ87o嫁娶.移徙.入宅.纳采.祭祀.祈福.解除.动土.破土.安葬.,ׇ7'C诸事不宜.沐浴.扫舍.余事勿取.Pׇ6' 余事勿取.祭祀.冠笄.嫁娶.捕捉.结网.畋猎.取渔.余事勿取.ׇ5 !塑绘.出行.冠笄.嫁娶.进人口.裁衣.纳婿.造畜椆栖.交易.立券.牧养.开生坟.入殓.除服.成服.移柩.安葬.启攒.ׇ4S;开市.斋醮.安床.出行.经络.移徙.入宅.治病.会亲友.祭祀.祈福.斋醮.安香.移徙.嫁娶.造屋.起基.ׇ3Eo动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲友.裁衣.开仓.经络.纳畜.造畜椆栖.教牛马.牧养.Wׇ2a_移徙.开市.入宅.嫁娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿取.ׇ1aO造屋.入宅.作灶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.嫁娶.会亲友.放水.掘井.牧养.纳畜.开渠.安碓磑.bׇ0S开市.入宅.安床.动土.安葬.祭祀.进人口.纳财.纳畜.牧养.捕捉.余事勿取.Aׇ/KG嫁娶.开市.栽种.合寿木.祭祀.祈福.斋醮.出行.纳采.订盟.安机械.出火.拆卸.修造.动土.起基.移徙.入宅.造庙.入殓.除服.成服.移柩.破土.安葬.谢土.Zׇ.Sq祈福.上梁.开仓.掘井.牧养.纳采.订盟.嫁娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲友.安香.出火.拆卸.造屋.起基.安床.作灶.挂匾.安葬.破土.启攒.立碑.入殓.移柩.  v ) ^ % XU=l`|V(;ׇ-)_嫁娶.出行.求医.治病.破屋.坏垣.余事勿取.mׇ,o}出火.嫁娶.入宅.作灶.破土.上梁.动土.沐浴.理发.捕捉.入殓.移柩.破土.启攒.安葬.6ׇ+S)嫁娶.安葬.行丧.破土.修坟.订盟.纳采.祭祀.祈福.开光.安香.出火.立券.安机械.移徙.入宅.竖柱.上梁.会亲友.安床.拆卸.挂匾.牧养.教牛马.Oׇ*aO开市.动土.破土.嫁娶.修造.安葬.祭祀.修饰垣墙.平治道涂.Lׇ)aG斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈福.求嗣.开光.解除.扫舍.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.栽种.纳畜.牧养.nׇ(S嫁娶.出行.纳采.入宅.作灶.祭祀.沐浴.塑绘.开光.入学.解除.扫舍.治病.开池.牧养.lׇ'E#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.uׇ&S'开市.入宅.嫁娶.开光.造屋.祭祀.入殓.除服.成服.移柩.破土.启攒.安葬.塞穴.断蚁.结网.)ׇ%7+出行.安葬.造桥.纳采.订盟.嫁娶.祭祀.沐浴.塑绘.开光.出火.治病.习艺.伐木.造屋.竖柱.上梁.安床.作灶.安碓磑.挂匾.掘井.纳畜.]ׇ$gc安葬.破土.开市.开仓.出货财.启攒.纳采.订盟.嫁娶.移徙.入宅.出行.祭祀.祈福.斋醮.塑绘.开光.安香.出火.会亲友.解除.入学.竖柱.上梁.拆卸.造屋.起基.栽种.牧养.纳畜.Kׇ#YM入宅.开市.掘井.词讼.合寿木.嫁娶.订盟.纳采.祭祀.祈福.斋醮.开光.会亲友.求医.治病.造屋.起基.竖柱.上梁.安门.安碓磑.筑堤.开池.破土.安葬.除服.成服.Jׇ")}嫁娶.开光.开光.求医.治病.动土.上梁.入殓.破土.安葬.Jׇ!)}开光.开市.嫁娶.订盟.纳采.祭祀.祈福.入殓.破土.安葬.ׇ ''诸事不宜.诸事不宜.Rׇ) 开市.安葬.订盟.纳采.出行.祭祀.祈福.修造.动土.移徙.入宅.`ׇ5作灶.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.;ׇ)_行丧.安葬.嫁娶.祭祀.沐浴.扫舍.修饰垣墙.Y׆V)动土.破土.嫁娶.纳采.出行.求医.治病.开市.移徙.入宅.启攒.安葬.M׆U7u移徙.入宅.安葬.订盟.纳采.出行.祈福.斋醮.安床.会亲友.<׆T7S上梁.动土.破土.祭祀.入殓.移柩.启攒.安葬.5׆S)S嫁娶.安葬.裁衣.作灶.移徙.入宅.纳畜.Y׆R)开市.安门.嫁娶.纳采.祭祀.祈福.求医.治病.出行.动土.移徙.入宅.@׆Q'k诸事不宜.祭祀.捕捉.取渔.修饰垣墙.余事勿取.׆P #订盟.纳采.会亲友.进人口.雕刻.拆卸.修造.动土.起基.开市.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.׆OEI开市.安门.掘井.作灶.嫁娶.出行.安机械.祭祀.塑绘.开光.治病.经络.安床.结网.塞穴.破土.入殓.B׆N)m嫁娶.入宅.破屋.坏垣.求医.治病.畋猎.余事勿取.^׆MS{开市.交易.嫁娶.安葬.行丧.祭祀.沐浴.捕捉.结网.畋猎.取渔.余事勿取.d׆LE开市.伐木.作梁.作灶.安机械.移徙.入宅.出行.祭祀.祈福.斋醮.纳采.订盟.安香.出火.解除.会亲友.修造.动土.拆卸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.u׆KK/斋醮.出行.治病.合寿木.祭祀.沐浴.理发.嫁娶.作灶.整手足甲.扫舍.修饰垣墙.平治道涂.q׆JY安床.出货财.作灶.动土.破土.开光.求嗣.出行.冠笄.嫁娶.伐木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出火.挂匾.起基.修造.开生坟.合寿木.入殓.除服.成服.移柩.安葬.R׆IEo行丧.伐木.作梁.作灶.嫁娶.订盟.纳采.冠笄.会亲友.安机械.造车器.祭祀.出行.纳财.入宅.安香.出火.入学.塑绘.开光.拆卸.起基.修造.动土.牧养.栽种.安门.作厕.<׆HS7斋醮.开渠.上梁.动土.破土.祭祀.交易.纳财. !S@Q ( t 2F_.KjS&׆GS 祈福.开光.掘井.开市.安葬.嫁娶.冠笄.修造.动土.作灶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.׆FSq合帐.上梁.经络.安葬.入殓.祭祀.祈福.求嗣.斋醮.安香.解除.移徙.入宅.会亲友.求医.治病.动土.破土.开生坟.合寿木.B׆ESC开市.安葬.破土.修坟.掘井.祭祀.作灶.余事勿取.׆Da-斋醮.祭祀.移徙.入宅.上梁.嫁娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.׆CSe作灶.理发.造桥.行丧.安葬.嫁娶.安机械.交易.出行.祭祀.祈福.求嗣.斋醮.塑绘.开光.合帐.裁衣.放水.开池.掘井.B׆B7_入宅.嫁娶.移徙.祭祀.沐浴.破屋.坏垣.余事勿取.7׆AK3嫁娶.开市.合寿木.安葬.纳采.订盟.冠笄.祭祀.祈福.斋醮.出行.修造.动土.移徙.入宅.安香.出火.拆卸.造屋.起基.竖柱.上梁.定磉.安门.开池.u׆@S'开光.作灶.造屋.架马.开仓.嫁娶.纳采.祭祀.祈福.出行.立券.移徙.入宅.动土.破土.安葬.q׆?S开市.入宅.出行.修造.词讼.祭祀.沐浴.理发.整手足甲.修饰垣墙.平治道涂.余事勿取.{׆>a%嫁娶.安床.作灶.动土.破土.造船.安机械.祭祀.祈福.求嗣.沐浴.解除.纳采.开市.修造.竖柱.上梁.开柱眼.安碓磑.归岫.补垣.塞穴.拆卸.放水.出火.扫舍.开生坟.合寿木.安葬.谢土.启攒.除服.成服.J׆=QS安葬.开生坟.合寿木.行丧.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.修造.进人口.入宅.移徙.动土.安床.纳畜.栽种.纳财.交易.立券.挂匾.造畜椆栖.`׆<)'移徙.入宅.嫁娶.订盟.纳采.出行.祭祀.祈福.斋醮.动土.上梁.破土.安葬.,׆;'C诸事不宜.塞穴.结网.余事勿取.Y׆:)赴任.捕捉.嫁娶.裁衣.祭祀.出行.安床.作灶.移徙.入宅.破土.安葬.C׆9)o嫁娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<ׅs7S动土.破土.安葬.嫁娶.纳采.出行.移徙.入宅.Jׅr)}嫁娶.安葬.纳采.祭祀.祈福.开市.求医.治病.动土.纳畜.`ׅq)'祈福.斋醮.嫁娶.纳采.祭祀.祈福.出行.动土.上梁.移徙.入宅.破土.安葬.3ׅp'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.Yׅo)开市.开光.嫁娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Yׅn'安门.嫁娶.纳采.出行.祭祀.祈福.开市.动土.移徙.入宅.破土.安葬.ׅm 7会亲友.进人口.修造.动土.起基.移徙.开市.纳畜.入殓.除服.成服.移柩.破土.安葬.修坟.立碑.会亲友.开光.出行.嫁娶.Dׅl's诸事不宜.进人口.牧养.置产.塞穴.结网.余事勿取.ׅk 1开光.出行.纳采.嫁娶.伐木.架马.出火.拆卸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除服.成服.移柩.安葬.4ׅj)Q破土.安葬.塞穴.断蚁.结网.余事勿取.ׅi''余事勿取.余事勿取.}ׅhS7开市.入宅.探病.出火.造屋.嫁娶.祭祀.祈福.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.针灸.理发.会亲友.起基.修造.动土.竖柱.定磉.安床.拆卸.纳畜.牧养.放水.破土.除服.成服.修坟.立碑.PׅgaQ开市.动土.祭祀.斋醮.安葬.探病.栽种.捕捉.畋猎.余事勿取.cׅfE嫁娶.出火.移徙.入宅.开市.交易.立券.安机械.会亲友.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上梁.安门.作灶.放水.作厕.开池.栽种.牧养.造畜椆栖.破土.安葬.立碑.;ׅeEC斋醮.开市.嫁娶.作灶.沐浴.扫舍.余事勿取.Bׅd)m行丧.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取."ׅcE移徙.入宅.造屋.架马.嫁娶.纳采.订盟.斋醮.开光.祭祀.祈福.求医.治病.会亲友.动土.解除.捕捉.纳畜.牧养.入殓.破土.安葬.:ׅbE?动土.破土.嫁娶.嫁娶.祭祀.祈福.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上梁.作灶.安门.安香.出火.造屋.启攒.安葬. "P  < " }  c $ytKH^ׅaS{祈福.嫁娶.入宅.安床.作灶.祭祀.沐浴.移徙.破土.安葬.扫舍.平治道涂.~ׅ`S9开市.作灶.动土.行丧.安葬.嫁娶.纳采.订盟.会亲友.安机械.结网.冠笄.祭祀.求嗣.进人口.经络.xׅ_S-开市.出行.安床.作灶.安葬.嫁娶.纳采.订盟.祭祀.祈福.治病.造车器.修造.动土.移徙.入宅.>ׅ^)e嫁娶.安葬.祭祀.解除.断蚁.会亲友.余事勿取."ׅ]as入宅.造屋.造桥.安门.安葬.上梁.嫁娶.冠笄.祭祀.出行.移徙.入宅.作灶.造车器.补垣.塞穴.作厕.破土.启攒.除服.成服.入殓.]ׅ\7入宅.安门.安葬.祭祀.祈福.求嗣.开光.纳采.订盟.嫁娶.出行.动土.破土.会亲友.开市.交易.立券.习艺.拆卸.起基.安碓磑.放水.开池.造仓.开渠.栽种.谢土.启攒.修坟.立碑.;ׅ[7Q探病.嫁娶.开市.祭祀.结网.捕捉.余事勿取.7ׅZS+安床.上梁.裁衣.入宅.嫁娶.祭祀.祈福.求嗣.开光.订盟.纳采.解除.动土.起基.进人口.开市.交易.立券.纳财.造仓.开池.栽种.纳畜.破土.安葬.4ׅY7A作灶.开市.经络.订盟.纳采.嫁娶.解除.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.入宅.移徙.安床.栽种.纳畜.动土.破土.谢土.安葬.修坟..ׅX77嫁娶.入宅.安葬.沐浴.结网.取渔.:ׅW'_诸事不宜.祭祀.求医.治病.解除.余事勿取.JׅV7o开市.动土.破土.嫁娶.纳采.祭祀.祈福.出行.移徙.求医.JׅU7o嫁娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4ׅ)Q嫁娶.安葬.祭祀.作灶.掘井.平治道涂.Fׅ 7g嫁娶.动土.破土.祭祀.会亲友.开市.安床.启攒.安葬.Qׅ 7}嫁娶.开市.安葬.纳采.开光.求医.治病.动土.上梁.移徙.入宅.jׅ S掘井.动土.破土.安葬.开光.祭祀.进人口.嫁娶.安床.解除.冠笄.出行.裁衣.扫舍.ׅ Ek掘井.安门.嫁娶.纳采.祭祀.祈福.裁衣.合帐.安床.入殓.除服.成服.移柩.破土.启攒.安葬.谢土.立碑.造畜椆栖.%ׅ E入殓.安葬.入宅.安床.订盟.纳采.嫁娶.进人口.会亲友.交易.立券.动土.除服.谢土.移柩.破土.启攒.赴任.出行.开市.纳财.栽种.:ׅQ5造庙.嫁娶.安床.余事勿取.祭祀.余事勿取.ׅEW出火.入宅.安葬.伐木.祭祀.塑绘.开光.订盟.纳采.冠笄.裁衣.安机械.拆卸.修造.动土.安床.经络.开市.ׅ''诸事不宜.诸事不宜.fׅS 嫁娶.开市.交易.入宅.安葬.祭祀.沐浴.破屋.坏垣.求医.治病.解除.余事勿取.ׅE 开市.动土.掘井.开池.祭祀.祈福.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.取渔.解除.安葬.启攒.谢土.入殓.@ׅKE入宅.动土.开仓.出货财.造车器.祭祀.祈福.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.合脊.起基.定磉.安门.纳畜.安葬.开生坟.立碑.谢土.斋醮.OׅS]嫁娶.安葬.动土.安床.治病.祭祀.作灶.平治道涂.余事勿取.:ׅa#祈福.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.嫁娶.会亲友.进人口.安床.开市.交易.纳畜.牧养.入殓.除服.成服.移柩.安葬.启攒.~ׅa+开市.嫁娶.移徙.入宅.掘井.安葬.沐浴.斋醮.解除.求医.治病.会亲友.造畜椆栖.栽种.理发.扫舍.aׄoe动土.破土.行丧.开光.作梁.安葬.探病.祭祀.解除.教牛马.出行.余事勿取.fׄ~a}开光.嫁娶.掘井.安葬.安门.探病.祭祀.祈福.求嗣.斋醮.冠笄.作灶.纳财.交易.nׄ}S祈福.动土.破土.安葬.入殓.纳采.嫁娶.出行.开市.立券.纳畜.牧养.出火.移徙.入宅.4ׄ|)Q嫁娶.安葬.祭祀.捕捉.解除.余事勿取./ׄ{77出火.嫁娶.开市.祭祀.祈福.求嗣.斋醮.纳采.订盟.开光.竖柱.上梁.开仓.出货财.造屋.起基.定磉.安门.诸事不宜.破土.入殓.启攒.谢土.JׄzSS祭祀.嫁娶.入宅.作灶.安葬.沐浴.捕捉.畋猎.结网.取渔. B[ @ I ] , s G~*np$h_ׄyE 祈福.斋醮.开市.安葬.祭祀.沐浴.解除.求医.治病.破屋.坏垣.余事勿取.uׄxE5嫁娶.开市.纳财.出火.纳采.祭祀.祈福.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.gׄwS 移徙.入宅.嫁娶.出行.安床.祭祀.祈福.求嗣.斋醮.沐浴.纳畜.入殓.破土.安葬.KׄvK]安床.入宅.安碓磑.栽种.祭祀.作灶.平治道涂.余事勿取.ׄuae祈福.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.嫁娶.开市.出行.会亲友.安床.结网.除服.成服.启攒.安葬.移柩.%ׄtE出行.嫁娶.入宅.安葬.开光.塑绘.裁衣.冠笄.伐木.拆卸.竖柱.上梁.开仓.会亲友.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5ׄsE7栽种.作灶.安葬.嫁娶.祭祀.扫舍.塞穴.>ׄrEG作灶.掘井.动土.栽种.祈福.开光.塑绘.酬神.订盟.纳采.裁衣.安床.开市.立券.入殓.除服.成服.移柩.启攒.安葬.立碑.赴任.会亲友.出行.交易.竖柱.ׄqS_作灶.开光.嫁娶.开市.入宅.订盟.纳采.冠笄.拆卸.修造.动土.安床.入殓.除服.成服.移柩.安葬.破土.启攒.造仓.Wׄ+)栽种.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.嫁娶.裁衣.动土.起基.出火.拆卸.移徙.入宅.安香.修造.竖柱.上梁.纳畜.牧养.祈福.求嗣.解除.伐木.定磉.造屋.安门.Cׄ*SE嫁娶.入宅.移徙.作灶.安葬.祭祀.沐浴.捕捉.栽种.4ׄ)E3造庙.嫁娶.伐木.安葬.祭祀.开光.塑绘.订盟.纳采.合帐.冠笄.拆卸.动土.起基.上梁.入宅.安香.开市.立券.纳财.沐浴.求嗣.出火.竖柱.安门.ׄ()作梁.造庙.祭祀.出行.订盟.纳采.裁衣.合帐.冠笄.进人口.动土.安床.作灶.入殓.移柩.安葬.破土.结网.取渔.畋猎.ׄ'')诸事不宜.破屋.坏垣.ׄ&E 安床.嫁娶.作灶.入宅.祭祀.解除.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.谢土.沐浴.扫舍.捕捉.取渔.结网.畋猎.理发.Iׄ%赴任.祈福.求嗣.开光.塑绘.斋醮.订盟.纳采.嫁娶.拆卸.安床.入宅.安香.移柩.修坟.安葬.谢土.栽种.解除.冠笄.裁衣.移徙.修造.动土.竖柱.放水.启攒.立碑.Xׄ$So动土.作灶.入宅.开光.安床.祭祀.嫁娶.纳婿.除服.成服.入殓.移柩.3ׄ#E1作灶.出行.入宅.安葬.塑绘.开光.订盟.纳采.裁衣.合帐.冠笄.安机械.会亲友.纳财.开市.立券.交易.安床.竖柱.上梁.结网.栽种.解除.经络.,ׄ"'C诸事不宜.扫舍.塞穴.余事勿取.tׄ!a栽种.动土.安葬.掘井.修坟.探病.祭祀.会亲友.立券.交易.裁衣.合帐.嫁娶.冠笄.进人口.3ׄ S#祭祀.嫁娶.出行.上梁.掘井.裁衣.经络.伐木.开柱眼.拆卸.修造.动土.上梁.合脊.合寿木.入殓.除服.成服.移柩.破土.安葬.启攒.修坟.立碑.4ׄS%纳采.动土.开市.交易.安门.开光.祈福.求嗣.出行.解除.伐木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除服.成服.移柩.谢土.纳畜.牧养.TׄEu纳财.开市.安葬.破土.理发.冠笄.嫁娶.进人口.栽种.捕捉.针灸.ׄE{祈福.嫁娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出火.拆卸.起基.修造.动土.上梁.移徙.造船.开市.交易.立券.纳财.jׄS塑绘.开光.造桥.除服.成服.嫁娶.冠笄.祭祀.出行.会亲友.修造.动土.入殓.破土.;ׄEC嫁娶.移徙.开市.入宅.破屋.坏垣.余事勿取.gׄS 纳采.开光.安床.嫁娶.开市.祈福.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~ׄ=O纳畜.理发.合寿木.嫁娶.造车器.纳采.订盟.祭祀.祈福.安机械.移徙.入宅.开市.立券.破土.安葬._ׄE 开市.造屋.治病.作灶.嫁娶.冠笄.会亲友.安机械.纳财.交易.立券.置产.jׄ7-移徙.入宅.栽种.纳财.开市.交易.立券.开光.针灸.会亲友.理发.安床.造仓.结网.JׄEa嫁娶.安葬.行丧.安门.祭祀.沐浴.解除.扫舍.塞穴.牧养. ft,N l K ,v(CE5fbׄau嫁娶.动土.掘井.起基.定磉.破土.祭祀.会亲友.出行.立券.交易.冠笄.纳财.cׄE嫁娶.祈福.出火.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.ׄE{开市.交易.合帐.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.破土.出火.安门.安床.上梁.立碑.移柩.mׄE%入宅.造屋.竖柱.安葬.纳财.交易.立券.栽种.捕捉.结网.取渔.进人口.教牛马.理发.ׄYm嫁娶.定磉.合寿木.安葬.行丧.祭祀.祈福.求嗣.斋醮.沐浴.开光.理发.经络.解除.治病.治病.立碑.栽种.牧养.掘井.开池.XׄE}嫁娶.上梁.入宅.作灶.取渔.入殓.除服.成服.移柩.破土.安葬.立碑.;ׄ)]作灶.安床.祈福.求嗣.斋醮.塑绘.开光.订盟.纳采.嫁娶.动土.入宅.安香.移柩.安葬.谢土.出行.沐浴.修造.竖柱.上梁.纳财.破土.解除.安门.放水.ׄ')诸事不宜.求医.破屋.Bׄ EO栽种.动土.开市.作灶.祭祀.祈福.酬神.订盟.纳采.冠笄.裁衣.合帐.嫁娶.安床.移徙.入宅.安香.入殓.移柩.启攒.安葬.解除.取渔.捕捉.伐木.安门.出火.]׃DE造屋.栽种.安葬.作灶.塑绘.开光.酬神.斋醮.订盟.纳采.裁衣.合帐.拆卸.动土.上梁.安床.安香.造庙.挂匾.会亲友.进人口.出行.修造.纳财.伐木.放水.出火.纳畜.沐浴.安门.A׃C_5祭祀.祈福.安葬.安门.余事勿取.作灶.平治道涂.X׃BE}斋醮.作灶.安床.安葬.安床.合帐.入宅.问名.纳采.求嗣.祭祀.开仓.0׃AU掘井.祭祀.斋醮.裁衣.合帐.冠笄.订盟.纳采.嫁娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲友.出行.祈福.求嗣.立碑.上梁.放水.[׃@Su祭祀.祈福.移徙.嫁娶.入宅.裁衣.合帐.入殓.除服.成服.会亲友.纳财.׃?EQ出行.嫁娶.入宅.动土.祭祀.祈福.求嗣.酬神.裁衣.安床.立券.交易.入殓.除服.成服.移柩.谢土.启攒.E׃>EU安葬.上梁.入宅.作灶.祭祀.沐浴.开光.塑绘.祈福.求嗣.订盟.纳采.冠笄.裁衣.嫁娶.动土.除服.成服.移柩.破土.启攒.出行.安碓磑.放水.开市.立券.交易.&׃=S 伐木.作灶.安葬.取渔.入宅.塑绘.开光.祈福.求嗣.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I׃<'}余事勿取.祭祀.结网.入殓.除服.成服.移柩.安葬.破土.&׃;E安床.栽种.治病.作灶.祭祀.冠笄.嫁娶.拆卸.修造.动土.起基.上梁.造屋.入宅.开市.开池.塞穴.入殓.除服.成服.移柩.安葬.破土._׃:7入宅.开市.安葬.祭祀.沐浴.求医.治病.扫舍.破屋.坏垣.解除.余事勿取.׃9S]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.嫁娶.会亲友.进人口.牧养.捕捉.入殓.移柩.安葬.启攒.E׃8o+置产.造屋.合脊.开光.探病.安门.作灶.祈福.求嗣.斋醮.纳采.嫁娶.伐木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除服.成服.移柩.安葬.破土.谢土.A׃7EO嫁娶.祈福.掘井.安葬.祭祀.平治道涂.余事勿取.\׃6E开市.动土.安葬.破土.会亲友.求嗣.理发.冠笄.结网.捕捉.开光.理发.u׃5S'开光.嫁娶.作灶.掘井.纳畜.祭祀.祈福.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j׃4S祭祀.移徙.入宅.动土.破土.纳采.会亲友.竖柱.上梁.立券.入殓.移柩.安葬.启攒.n׃3S嫁娶.动土.开光.造屋.破土.祭祀.祈福.求嗣.斋醮.入殓.除服.成服.移柩.安葬.启攒.q׃2S移徙.入宅.出火.安门.安葬.纳采.嫁娶.祭祀.祈福.出行.开市.会亲友.动土.破土.启攒.c׃1E嫁娶.开市.安葬.破土.纳采.祭祀.祈福.出行.会亲友.修造.动土.移徙.入宅.C׃0SE嫁娶.安门.移徙.入宅.安葬.塞穴.结网.取渔.畋猎.׃/KQ安床.作灶.造船.会亲友.纳采.订盟.祭祀.祈福.安香.出火.修造.出行.开市.移徙.入宅.动土.安葬.破土. SX m p  j  FL%KKQ׃.) 嫁娶.安葬.祭祀.沐浴.解除.理发.扫舍.破屋.坏垣.余事勿取.g׃-7'开市.入宅.斋醮.纳采.嫁娶.祭祀.祈福.出行.修造.动土.移徙.入宅.安葬.破土.P׃,S_经络.探病.造屋.作灶.动土.嫁娶.祭祀.冠笄.修饰垣墙.置产.%׃+E出行.治病.安葬.开市.会亲友.纳采.进人口.修造.动土.竖柱.上梁.祭祀.开光.塑绘.祈福.斋醮.嫁娶.安床.移徙.入宅.安香.纳畜.U׃*Ew嫁娶.移徙.入宅.开光.修饰垣墙.平治道涂.入殓.移柩.余事勿取.{׃)EA作灶.掘井.谢土.入宅.出行.嫁娶.订盟.纳采.入殓.安床.启攒.安葬.祭祀.裁衣.会亲友.进人口.BׂcEO作灶.祭祀.上梁.出行.沐浴.解除.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.移徙.入宅.除服.成服.移柩.破土.启攒.安葬.扫舍.修坟.伐木.纳财.交易.立券.,ׂb'C诸事不宜.祭祀.解除.余事勿取.AׂaEM开仓.嫁娶.移徙.入宅.祭祀.沐浴.祈福.斋醮.订盟.纳采.裁衣.拆卸.起基.竖柱.上梁.安床.入殓.除服.成服.移柩.启攒.挂匾.求嗣.出行.合帐.造畜椆栖.bׂ`E嫁娶.入殓.安葬.出行.塑绘.开光.沐浴.冠笄.会亲友.作灶.放水.造畜椆栖.;ׂ_)_开市.安床.祭祀.作灶.入殓.除服.余事勿取.Xׂ^E}开市.伐木.嫁娶.作梁.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.Lׂ]SU祈福.嫁娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出火.塑绘.裁衣.会亲友.入学.拆卸.扫舍.造仓.挂匾.掘井.开池.结网.栽种.纳畜.破土.修坟.立碑.安葬.入殓.4ׂ\7C嫁娶.开市.安葬.破屋.坏垣.余事勿取.ׂ[E{造屋.开市.动土.破土.嫁娶.祭祀.沐浴.裁衣.出行.理发.移徙.捕捉.畋猎.放水.入宅.除服.成服.启攒.安葬.移柩.入殓.7ׂZ)W嫁娶.安葬.祭祀.安碓磑.结网.余事勿取.sׂYa移徙.入宅.造庙.作灶.治病.安葬.祭祀.冠笄.嫁娶.会亲友.进人口.裁衣.结网.平治道涂.OׂXEi入宅.开光.开市.动土.嫁娶.订盟.纳采.祭祀.祈福.求嗣.会亲友.解除.出行.入学.纳财.开市.交易.立券.习艺.经络.安床.开仓.出货财.纳畜.安葬.启攒.修坟.入殓.|ׂWo探病.祭祀.出行.上梁.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲友.解除.求医.治病.入学.安床.安门.安香.出火.拆卸.扫舍.入宅.挂匾.开生坟.合寿木.破土.修坟.启攒.入殓.HׂV7k破土.动土.安葬.祭祀.解除.教牛马.会亲友.余事勿取.ׂUSk开光.嫁娶.开市.动土.破土.交易.立券.纳财.安床.裁衣.造畜椆栖.安葬.谢土.启攒.除服.成服.修坟.立碑.移柩.入殓.cׂTau造庙.嫁娶.出行.动土.安葬.行丧.订盟.纳采.会亲友.祭祀.斋醮.沐浴.塑绘.出火.开光.竖柱.上梁.开市.交易.立券.作梁.开柱眼.伐木.架马.安门.安床.拆卸.牧养.造畜椆栖.掘井.{ׂSEA开市.安床.安葬.修坟.嫁娶.纳采.订盟.问名.祭祀.冠笄.裁衣.会亲友.进人口.纳财.捕捉.作灶.eׂRa{造庙.入宅.修造.安葬.行丧.嫁娶.祭祀.沐浴.补垣.塞穴.断蚁.解除.余事勿取. ׂQSW祈福.嫁娶.安床.入宅.造船.沐浴.开仓.出货财.开市.交易.立券.纳财.栽种.纳畜.牧养.畋猎.入殓.破土.安葬.;ׂP7Q斋醮.嫁娶.开市.祭祀.破屋.坏垣.余事勿取.%ׂO}]纳采.订盟.嫁娶.上梁.开市.斋醮.造屋.安门.沐浴.捕捉.畋猎.理发.整手足甲.入殓.除服.成服.破土.安葬.谢土.立碑.修坟.启攒.ׂNE开市.出行.安葬.行丧.嫁娶.订盟.纳采.会亲友.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出火.挂匾.拆卸.置产.RׂMuA开光.嫁娶.开仓.出货财.造船.安葬.探病.平治道涂.余事勿取.'ׂL5'挂匾.入宅.上梁.祈福.词讼.作梁.作灶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.嫁娶.栽种.入殓.移柩.安葬. K { q %a"KK?ׂKs作灶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.嫁娶.开光.解除.出火.拆卸.修造.进人口.入宅.移徙.安床.栽种.入殓.修坟.动土.除服.成服.yׂJo嫁娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲友.解除.余事勿取.7ׂI q入宅.置产.嫁娶.动土.栽种.开市.开光.动土.破土.祭祀.祈福.求嗣.沐浴.问名.交易.纳财.入殓.移柩.安葬.修坟.立碑.谢土.造畜椆栖.教牛马.5ׂH)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.JׂG)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ׂF)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uׂE m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ֽSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ֽ'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ֽEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ֽEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PֽaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cֽS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KֽSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SֽaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ֽa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ֽE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XֽE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ֽS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ֽa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wֽa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ֽS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rֽo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ֽSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UֽoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.Tֽ Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iֽ ';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马. =  K  @ ` sHB$=)ֽ  U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vֽ [嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ֽ 会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ֽoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ֽS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.^ֽ)#造屋.治病.祭祀.解除.祈福.开光.塑绘.斋醮.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.入殓.除服.成服.移柩.启攒.安床.赴任.出行.移徙.竖柱.上梁.伐木.栽种.破土.安葬.纳畜.:ֽ'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取. ֽEe开市.交易.破土.作灶.祭祀.塑绘.开光.订盟.纳采.嫁娶.安床.进人口.入殓.除服.成服.移柩.启攒.安葬.立碑.%ֽ)1作灶.治病.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.赴任.进人口.会亲友.ֽEK作灶.治病.伐木.作梁.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.除服.成服.入殓.移柩.安葬.谢土.赴任.会亲友.进人口.出行.竖柱.上梁.经络.开市.交易.立券.纳财.开仓.FֽEY嫁娶.入宅.安门.移徙.理发.会亲友.补垣.塞穴.结网.Zּ:E入宅.作灶.安床.开仓.祭祀.会亲友.嫁娶.沐浴.修造.动土.祈福.开光.塑绘.出行.订盟.纳采.裁衣.入殓.除服.成服.移柩.启攒.赴任.竖柱.上梁.纳财.扫舍.栽种.纳畜.伐木.,ּ9'C诸事不宜.祭祀.沐浴.余事勿取.pּ8S开光.掘井.安葬.谢土.修坟.嫁娶.冠笄.安床.纳采.会亲友.塞穴.捕捉.置产.造畜椆栖.Lּ7SU移徙.入宅.安门.作梁.安葬.祭祀.祈福.求嗣.斋醮.沐浴.冠笄.出行.理发.拆卸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫舍.除服.成服.移柩.启攒.立碑.谢土.pּ6S安床.安门.破土.修坟.安葬.捕捉.畋猎.会亲友.解除.入殓.除服.成服.移柩.余事勿取.Zּ5Sq嫁娶.开市.入宅.出火.移徙.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.会亲友.解除.入学.纳财.交易.立券.经络.起基.动土.定磉.开池.栽种.纳畜.牧养.破土.入殓.立碑.安葬.Lּ4Ec造屋.造船.动土.破土.嫁娶.纳采.订盟.祭祀.冠笄.裁衣.伐木.作梁.架马.定磉.开柱眼.作灶.移徙.安床.畋猎.结网.开池.作厕.除服.成服.启攒.入殓.移柩.安葬.4ּ3)Q嫁娶.安葬.破屋.坏垣.祭祀.余事勿取.Iּ2E]开市.造庙.动土.破土.嫁娶.订盟.纳采.祭祀.祈福.塑绘.开光.移徙.安床.伐木.作梁.捕捉.畋猎.结网.求医.治病.解除.安葬.除服.成服.移柩.入殓.立碑.谢土.Hּ1SM嫁娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈福.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上梁.安门.安香.出火.教牛马.会亲友.破土.Jּ0E_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出火.修饰垣墙.平治道涂.会亲友.出行.开池.作厕.^ּ/S{嫁娶.开市.祈福.斋醮.安葬.塑绘.会亲友.安机械.塞穴.结网.裁衣.经络._ּ.am开市.纳采.造庙.安床.开渠.安葬.嫁娶.造车器.出行.会亲友.移徙.入宅.修造.动土.雕刻.开光.安香.出火.理发.会亲友.造屋.合脊.起基.归岫.安门.拆卸.扫舍.栽种.造畜椆栖. n 8  ? \ + NsH -V;zIּ-SQ开市.动土.破土.行丧.安葬.祭祀.沐浴.出行.余事勿取.nּ,S嫁娶.入宅.安床.掘井.开光.祭祀.理发.置产.塞穴.除服.成服.移柩.入殓.破土.安葬.;ּ+S3移徙.入宅.出火.入殓.安葬.开市.纳财.出行.祭祀.祈福.求嗣.斋醮.问名.入学.起基.定磉.置产.开渠.掘井.拆卸.栽种.纳畜.牧养.动土.破土.启攒._ּ*oa嫁娶.纳采.订盟.安床.动土.破土.安葬.祭祀.沐浴.捕捉.畋猎.结网.扫舍.tּ)S%嫁娶.移徙.出火.开市.入宅.订盟.纳采.会亲友.祭祀.祈福.修造.动土.安机械.破土.安葬.{ּ(S3祭祀.嫁娶.入宅.修造.动土.祭祀.扫舍.破土.安葬.除服.成服.启攒.移柩.入殓.立碑.余事勿取.Iּ'){嫁娶.安葬.祭祀.解除.破屋.坏垣.求医.治病.余事勿取.ּ&am破土.动土.安门.作灶.开市.交易.嫁娶.纳采.订盟.祭祀.开光.出行.解除.伐木.出火.入宅.移徙.拆卸.修造.栽种.安葬.入殓.Eּ%EU置产.掘井.词讼.栽种.嫁娶.纳采.订盟.祭祀.斋醮.开光.安香.出火.出行.出火.拆卸.动土.祈福.进人口.纳财.交易.立券.移徙.安床.修造.安葬.除服.成服.Qּ$ %造庙.谢土.作灶.作梁.伐木.安葬.行丧.修坟.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.裁衣.会亲友.拆卸.进人口.安香.经络.出货财.修饰垣墙.平治道涂.ּ#祈福.谢土.安葬.上梁.作灶.开市.嫁娶.出行.入宅.动土.祭祀.塑绘.理发.会亲友.牧养.开池.造畜椆栖.畋猎.结网.?ּ"7Y开市.动土.破土.开光.针灸.会亲友.启攒.安葬.8ּ!)Y嫁娶.入宅.沐浴.理发.入学.习艺.进人口.&ּ )5行丧.安葬.作灶.造畜椆栖.?ּ)g动土.上梁.嫁娶.祭祀.安机械.入殓.破土.安葬.ּEm作灶.入殓.安葬.安床.祭祀.祈福.斋醮.沐浴.竖柱.订盟.纳采.嫁娶.拆卸.入宅.移柩.启攒.谢土.赴任.出火.纳畜.JּEa栽种.动土.安葬.开市.祭祀.作灶.入殓.除服.成服.畋猎.yֻWE=开仓.冠笄.伐木.作梁.祭祀.塑绘.开光.祈福.斋醮.出行.订盟.纳采.裁衣.嫁娶.拆卸.修造.安床.入宅.安香.入殓.启攒.安葬.谢土.赴任.会亲友.进人口.出行.移徙.上梁.经络.开市.交易.立券.纳财. ֻVE]出行.祈福.安葬.作灶.会亲友.嫁娶.订盟.纳采.纳婿.拆卸.修造.动土.起基.竖柱.上梁.安床.会亲友.纳财.,ֻU'C诸事不宜.破屋.坏垣.余事勿取.]ֻTSw开光.嫁娶.掘井.伐木.作梁.祭祀.祈福.求嗣.斋醮.造庙.出火.安机械.会亲友.开市.交易.立券.纳财.习艺.经络.求医.治病.开池.作厕.畋猎.结网.栽种.牧养.安葬.破土.启攒.nֻSS嫁娶.祭祀.入宅.造屋.移徙.捕捉.结网.入殓.除服.成服.移柩.破土.安葬.启攒.立碑.\ֻRE嫁娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治道涂.余事勿取.{ֻQS3移徙.入宅.出行.祈福.嫁娶.沐浴.理发.冠笄.安床.开市.立券.会亲友.交易.纳财.结网.教牛马.ֻPE 嫁娶.动土.破土.修坟.出行.造车器.造畜椆栖.解除.冠笄.裁衣.作梁.雕刻.会亲友.移徙.入宅.安机械.造畜椆栖.开市.扫舍.EֻOSG造庙.造船.动土.破土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.置产.求医.治病.开市.交易.立券.会亲友.移徙.竖柱.上梁.造屋.合脊.安门.放水.捕捉.纳畜. ֻNgA开光.嫁娶.会亲友.栽种.针灸.安葬.冠笄.祭祀.沐浴.作灶.理发.整手足甲.扫舍.补垣.塞穴.入殓.破土.启攒.ֻMg'开市.开仓.出货财.安床.安门.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.求医.治病.出火.移徙.入宅.PֻLEm动土.破土.开市.安葬.祭祀.作灶.纳财.捕捉.畋猎.余事勿取. ֻKYO上梁.开光.造屋.架马.合寿木.造车器.嫁娶.订盟.纳采.会亲友.祭祀.出行.开市.立券.移徙.入宅.破土.安葬. U B v g L Fl5Uy;J8jֻJS嫁娶.开市.入宅.祈福.安葬.订盟.纳采.会亲友.交易.立券.纳财.栽种.纳畜.牧养.BֻI)m开市.嫁娶.祭祀.沐浴.解除.破屋.坏垣.余事勿取.EֻHKO开市.破土.掘井.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.安香.出火.造庙.移徙.出行.入宅.造庙.起基.竖柱.上梁.安床.纳畜.捕捉.纳婿.安葬.BֻGSC开市.交易.祭祀.入宅.安葬.捕捉.畋猎.余事勿取.3ֻF)O嫁娶.开市.祭祀.平治道涂.余事勿取.HֻESM入宅.上梁.斋醮.出火.谢土.纳采.订盟.开市.交易.立券.会亲友.纳畜.牧养.问名.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.启攒.入殓.除服.成服.ֻDo]造庙.嫁娶.掘井.栽种.造桥.作灶.动土.祭祀.开光.出行.解除.伐木.作梁.出火.拆卸.入宅.移徙.安床.修造.造畜椆栖.扫舍.ֻC1出货财.开仓.动土.破土.安葬.行丧.伐木.开渠.栽种.祭祀.造车器.出行.修造.上梁.造屋.安门.安床.造畜椆栖.教牛马.ֻB}C开市.出行.栽种.置产.词讼.安门.掘井.开光.嫁娶.裁衣.冠笄.合帐.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.VֻASi安门.安床.裁衣.入宅.安葬.祭祀.祈福.求嗣.斋醮.开光.出行.嫁娶.求医.治病.动土.破土.入学.起基.扫舍.竖柱.上梁.开仓.出货财.置产.栽种.牧养.开生坟.谢土.立碑.[ֻ@Su嫁娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲友.纳财.理发.捕捉.{ֻ?EA移徙.入宅.作灶.安葬.祭祀.裁衣.冠笄.嫁娶.纳婿.会亲友.除服.成服.移柩.捕捉.进人口.入殓.uֻ>)Q定磉.安葬.祭祀.赴任.动土.上梁.开光.塑绘.冠笄.拆卸.起基.安床.开市.立券.赴任.经络.7ֻ=E9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.嫁娶.拆卸.起基.安床.入宅.开市.入殓.除服.成服.移柩.破土.谢土.挂匾.开柱眼.交易.Iֻ<E_移徙.入宅.出行.栽种.祭祀.沐浴.破屋.坏垣.余事勿取.ֻ;EW作灶.祭祀.入宅.嫁娶.祭祀.冠笄.会亲友.拆卸.起基.除服.成服.移柩.启攒.安葬.沐浴.捕捉.开光.塑绘.Aֻ:)i入宅.伐木.祭祀.会亲友.纳采.嫁娶.开光.塑绘.斋醮.安香.开市.立券.除服.成服.入殓.移柩.安葬.赴任.进人口.出行.裁衣.修造.动土.上梁.经络.交易.:ֻ9)]嫁娶.入宅.祭祀.沐浴.修饰垣墙.平治道涂.ֺr)e嫁娶.安葬.祭祀.沐浴.解除.理发.冠笄.安机械.作灶.造仓.开市.开池.作厕.补垣.塞穴.断蚁.结网.ֺqEm造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上梁.合脊.安床.移徙.入宅.开市.栽种.作厕.cֺpS动土.作灶.行丧.安葬.修坟.祭祀.祈福.求嗣.出行.沐浴.交易.扫舍.教牛马.!ֺo))开光.安床.祭祀.出行.解除.冠笄.嫁娶.伐木.架马.开柱眼.修造.动土.移徙.入宅.开生坟.合寿木.入殓.移柩.破土.安葬.修坟.xֺna嫁娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲友.捕捉.畋猎.启攒.除服.成服.移柩.Jֺmo7开光.动土.破土.开市.修造.入宅.安门.祭祀.嫁娶.捕捉.7ֺl=A行丧.安葬.合寿木.开光.求嗣.雕刻.嫁娶.订盟.纳采.出火.拆卸.修造.动土.起基.上梁.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.4ֺka嫁娶.造庙.造桥.造船.作灶.安葬.订盟.纳采.祭祀.祈福.安香.出火.修造.动土.上梁.安门.起基.竖柱.上梁.定磉.开池.移徙.入宅.立券.破土.%ֺj5'探病.余事勿取.余事勿取.mֺio}祭祀.嫁娶.安床.开市.入宅.探病.上梁.沐浴.捕捉.入殓.除服.成服.破土.启攒.安葬.%ֺhS纳采.订盟.架马.词讼.开渠.嫁娶.造车器.安机械.祭祀.祈福.开光.安香.出火.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬. +(  ] $ g 6^e#Dk]W8cֺgaw斋醮.嫁娶.移徙.出行.上梁.入宅.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.\ֺfE嫁娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出火.上梁.移徙.uֺea针灸.伐木.作梁.造庙.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.?ֺdg)嫁娶.入宅.修造.动土.会亲友.破土.祭祀.出行.uֺco 嫁娶.开市.祭祀.祈福.斋醮.纳采.修坟.冠笄.沐浴.出行.修造.动土.移徙.入宅.破土.安葬.ֺbo-开市.祈福.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.取渔.会亲友.入学.移柩.启攒.除服.成服.LֺaYQ嫁娶.开市.造屋.作梁.合寿木.祭祀.冠笄.捕捉.余事勿取.7ֺ`}安葬.纳畜.出行.行丧.伐木.栽种.造庙.造桥.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.解除.进人口.入宅.移徙.出火.安床.开市.交易.立券.挂匾.Sֺ_Eq开市.开仓.安门.安葬.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.上梁.合脊.放水.掘井.破土.移柩.谢土.除服.成服.;ֺ^)_移徙.入宅.破屋.坏垣.求医.治病.余事勿取.ֺ] 5出火.入宅.移徙.祈福.祭祀.安床.开市.嫁娶.探病.开光.解除.拆卸.修造.动土.竖柱.安门.牧养.安葬.修坟.破土.移柩.ֺ\u;作灶.出火.进人口.开渠.入宅.移徙.祭祀.开光.祈福.求嗣.斋醮.修造.动土.纳财.造仓.作厕.栽种.牧养.会亲友.Uֺ[Ew嫁娶.入宅.安床.出行.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.MֺZCi嫁娶.祈福.余事勿取.沐浴.修饰垣墙.平治道涂.余事勿取.NֺY)开市.安葬.订盟.纳采.出行.会亲友.修造.上梁.移徙.入宅.RֺX) 嫁娶.开市.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.安葬.JֺW7o作灶.动土.破土.嫁娶.出行.纳畜.祭祀.入殓.启攒.安葬.CֺV)o动土.破土.嫁娶.祭祀.祈福.斋醮.作灶.移徙.入宅. ֺU 祈福.出行.订盟.纳采.嫁娶.裁衣.动土.安床.放水.开市.掘井.交易.立券.栽种.开渠.除服.成服.移柩.破土.ֺ 3塑绘.开光.解除.订盟.纳采.嫁娶.出火.修造.动土.移徙.入宅.拆卸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养. ֺ 祈福.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生坟.入殓.除服.成服.移柩.破土.安葬.7ֺ S+动土.破土.订盟.安床.开池.祈福.斋醮.出行.冠笄.嫁娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除服.成服.移柩.破土.安葬.启攒.4ֺ )Q行丧.安葬.破屋.坏垣.治病.余事勿取.|ֺ S5嫁娶.纳采.订盟.开市.入宅.祭祀.捕捉.畋猎.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.启攒.Iֺ E]开市.立券.纳财.作灶.纳采.订盟.嫁娶.祭祀.祈福.普渡.开光.安香.出火.移徙.入宅.竖柱.修造.动土.竖柱.上梁.起基.造屋.安门.造庙.造桥.破土.启攒.安葬.gֺ E嫁娶.安门.动土.安葬.出行.沐浴.订盟.纳采.裁衣.竖柱.上梁.移徙.纳畜.牧养. ֺSO祈福.开市.动土.行丧.安葬.塑绘.冠笄.嫁娶.会亲友.进人口.经络.裁衣.栽种.纳畜.牧养.补垣.塞穴.捕捉.{ֺS3嫁娶.出行.入宅.开市.安门.祭祀.沐浴.理发.整手足甲.冠笄.解除.入殓.移柩.破土.启攒.安葬.uֺa开市.动土.破土.安床.开仓.上梁.嫁娶.冠笄.祭祀.沐浴.普渡.出行.纳财.扫舍.纳畜.赴任.ֺa5动土.破土.掘井.开光.上梁.词讼.嫁娶.普渡.祭祀.祈福.补垣.塞穴.断蚁.筑堤.入殓.除服.成服.安葬.OֺS[出火.入宅.造屋.安门.安葬.嫁娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲友.开市.纳财.修造.动土.竖柱.上梁.开光.开仓.出货财.纳畜.牧养.开池.破土.启攒. Nn @ N 2 H  28z8MֺS]掘井.出行.破土.行丧.安葬.嫁娶.订盟.纳采.作灶.冠笄.裁衣.会亲友.纳畜.牧养.安机械.开市.立券.纳财.安床.>ֺa+纳采.订盟.经络.行丧.安葬.探病.嫁娶.祭祀.祈福.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.捕捉.畋猎.结网.ֺSC动土.破土.嫁娶.掘井.安床.订盟.纳采.祭祀.祈福.安香.出火.开市.立券.入宅.挂匾.造桥.启攒.安葬.4ֺ)Q斋醮.开市.沐浴.破屋.坏垣.余事勿取.`ֹE 开市.交易.入宅.嫁娶.祭祀.普渡.捕捉.解除.结网.畋猎.入殓.破土.安葬.Eֹ~SG开市.立券.置产.作灶.造桥.嫁娶.纳采.订盟.祭祀.祈福.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.定磉.安门.安葬.破土.rֹ}}y嫁娶.栽种.祈福.造桥.安葬.安门.伐木.作梁.祭祀.理发.作灶.沐浴.修饰垣墙.平治道涂.ֹ|-开市.入宅.动土.破土.安葬.作灶.上梁.安床.开仓.祈福.沐浴.理发.会亲友.塑绘.开光.栽种.牧养.嫁娶.经络.补垣.塞穴.?ֹ{m出火.嫁娶.开光.进人口.出行.词讼.开市.入宅.移徙.赴任.解除.祭祀.祈福.求嗣.修造.动土.竖柱.上梁.安床.纳畜.造屋.合脊.起基.入殓.破土.安葬.&ֹza{栽种.掘井.动土.安床.破土.置产.嫁娶.纳采.订盟.祭祀.祈福.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上梁.纳畜.入殓.安葬.启攒.%ֹyay嫁娶.入宅.斋醮.开光.针灸.掘井.祭祀.出行.作梁.出火.拆卸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.*ֹxI入宅.上梁.入殓.造屋.探病.作灶.安门.安葬.纳畜.伐木.嫁娶.纳采.订盟.开光.祭祀.出行.理发.动土.安床.放水.开渠.栽种.进人口.:ֹwo行丧.安葬.出行.作梁.纳畜.伐木.造桥.嫁娶.祭祀.祈福.求嗣.裁衣.冠笄.经络.修造.进人口.安床.动土.竖柱.上梁.移徙.交易.立券.栽种.会亲友..ֹv)E开市.破土.祭祀.作灶.纳财.捕捉.Rֹu赴任.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.Yֹt)祭祀.祈福.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.3ֹs'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.Jֹr7o嫁娶.移徙.入宅.纳采.祭祀.祈福.解除.动土.破土.安葬.,ֹq'C诸事不宜.沐浴.扫舍.余事勿取.Pֹ+' 余事勿取.祭祀.冠笄.嫁娶.捕捉.结网.畋猎.取渔.余事勿取.ֹ* !塑绘.出行.冠笄.嫁娶.进人口.裁衣.纳婿.造畜椆栖.交易.立券.牧养.开生坟.入殓.除服.成服.移柩.安葬.启攒.ֹ)S;开市.斋醮.安床.出行.经络.移徙.入宅.治病.会亲友.祭祀.祈福.斋醮.安香.移徙.嫁娶.造屋.起基.ֹ(Eo动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲友.裁衣.开仓.经络.纳畜.造畜椆栖.教牛马.牧养.Wֹ'a_移徙.开市.入宅.嫁娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿取.ֹ&aO造屋.入宅.作灶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.嫁娶.会亲友.放水.掘井.牧养.纳畜.开渠.安碓磑.bֹ%S开市.入宅.安床.动土.安葬.祭祀.进人口.纳财.纳畜.牧养.捕捉.余事勿取.Aֹ$KG嫁娶.开市.栽种.合寿木.祭祀.祈福.斋醮.出行.纳采.订盟.安机械.出火.拆卸.修造.动土.起基.移徙.入宅.造庙.入殓.除服.成服.移柩.破土.安葬.谢土.Zֹ#Sq祈福.上梁.开仓.掘井.牧养.纳采.订盟.嫁娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲友.安香.出火.拆卸.造屋.起基.安床.作灶.挂匾.安葬.破土.启攒.立碑.入殓.移柩.;ֹ")_嫁娶.出行.求医.治病.破屋.坏垣.余事勿取.mֹ!o}出火.嫁娶.入宅.作灶.破土.上梁.动土.沐浴.理发.捕捉.入殓.移柩.破土.启攒.安葬. (1 j # f , ;<$SpGc=6ֹ S)嫁娶.安葬.行丧.破土.修坟.订盟.纳采.祭祀.祈福.开光.安香.出火.立券.安机械.移徙.入宅.竖柱.上梁.会亲友.安床.拆卸.挂匾.牧养.教牛马.OֹaO开市.动土.破土.嫁娶.修造.安葬.祭祀.修饰垣墙.平治道涂.LֹaG斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈福.求嗣.开光.解除.扫舍.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.栽种.纳畜.牧养.nֹS嫁娶.出行.纳采.入宅.作灶.祭祀.沐浴.塑绘.开光.入学.解除.扫舍.治病.开池.牧养.lֹE#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.uֹS'开市.入宅.嫁娶.开光.造屋.祭祀.入殓.除服.成服.移柩.破土.启攒.安葬.塞穴.断蚁.结网.)ֹ7+出行.安葬.造桥.纳采.订盟.嫁娶.祭祀.沐浴.塑绘.开光.出火.治病.习艺.伐木.造屋.竖柱.上梁.安床.作灶.安碓磑.挂匾.掘井.纳畜.]ֹgc安葬.破土.开市.开仓.出货财.启攒.纳采.订盟.嫁娶.移徙.入宅.出行.祭祀.祈福.斋醮.塑绘.开光.安香.出火.会亲友.解除.入学.竖柱.上梁.拆卸.造屋.起基.栽种.牧养.纳畜.KֹYM入宅.开市.掘井.词讼.合寿木.嫁娶.订盟.纳采.祭祀.祈福.斋醮.开光.会亲友.求医.治病.造屋.起基.竖柱.上梁.安门.安碓磑.筑堤.开池.破土.安葬.除服.成服.YֹSo祭祀.祈福.探病.谢土.造桥.嫁娶.开市.立券.移徙.入宅.安机械.会亲友.经络.安门.安床.挂匾.拆卸.开仓.出货财.开池.栽种.纳畜.牧养.破土.安葬.启攒.移柩.入殓.立碑.4ֹ)Q嫁娶.安葬.破屋.坏垣.解除.余事勿取.&ֹA嫁娶.斋醮.开市.出火.入宅.移徙.出行.作灶.安门.伐木.祭祀.祈福.解除.整手足甲.安床.沐浴.入殓.移柩.破土.启攒.安葬.谢土.Lֹo9嫁娶.作灶.出火.置产.嫁娶.入宅.安葬.纳采.订盟.会亲友.入学.祭祀.祈福.求嗣.开光.出行.解除.理发.动土.起基.开市.交易.立券.纳财.造仓.栽种.纳畜.牧养.<ֹEE动土.破土.治病.开渠.祭祀.嫁娶.畋猎.结网.;ֹ)_行丧.安葬.嫁娶.祭祀.沐浴.扫舍.修饰垣墙.Yֹ)动土.破土.嫁娶.纳采.出行.求医.治病.开市.移徙.入宅.启攒.安葬.Mֹ7u移徙.入宅.安葬.订盟.纳采.出行.祈福.斋醮.安床.会亲友.<ֹ7S上梁.动土.破土.祭祀.入殓.移柩.启攒.安葬.5ֹ)S嫁娶.安葬.裁衣.作灶.移徙.入宅.纳畜.Yֹ )开市.安门.嫁娶.纳采.祭祀.祈福.求医.治病.出行.动土.移徙.入宅.@ָF'k诸事不宜.祭祀.捕捉.取渔.修饰垣墙.余事勿取.ָE #订盟.纳采.会亲友.进人口.雕刻.拆卸.修造.动土.起基.开市.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.ָDEI开市.安门.掘井.作灶.嫁娶.出行.安机械.祭祀.塑绘.开光.治病.经络.安床.结网.塞穴.破土.入殓.BָC)m嫁娶.入宅.破屋.坏垣.求医.治病.畋猎.余事勿取.^ָBS{开市.交易.嫁娶.安葬.行丧.祭祀.沐浴.捕捉.结网.畋猎.取渔.余事勿取.dָAE开市.伐木.作梁.作灶.安机械.移徙.入宅.出行.祭祀.祈福.斋醮.纳采.订盟.安香.出火.解除.会亲友.修造.动土.拆卸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.uָ@K/斋醮.出行.治病.合寿木.祭祀.沐浴.理发.嫁娶.作灶.整手足甲.扫舍.修饰垣墙.平治道涂.qָ?Y安床.出货财.作灶.动土.破土.开光.求嗣.出行.冠笄.嫁娶.伐木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出火.挂匾.起基.修造.开生坟.合寿木.入殓.除服.成服.移柩.安葬.Rָ>Eo行丧.伐木.作梁.作灶.嫁娶.订盟.纳采.冠笄.会亲友.安机械.造车器.祭祀.出行.纳财.入宅.安香.出火.入学.塑绘.开光.拆卸.起基.修造.动土.牧养.栽种.安门.作厕. ty; 8  ? V b u+[ZjfHat<ָ=S7斋醮.开渠.上梁.动土.破土.祭祀.交易.纳财.&ָ<S 祈福.开光.掘井.开市.安葬.嫁娶.冠笄.修造.动土.作灶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.ָ;Sq合帐.上梁.经络.安葬.入殓.祭祀.祈福.求嗣.斋醮.安香.解除.移徙.入宅.会亲友.求医.治病.动土.破土.开生坟.合寿木.Bָ:SC开市.安葬.破土.修坟.掘井.祭祀.作灶.余事勿取.ָ9a-斋醮.祭祀.移徙.入宅.上梁.嫁娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.ָ8Se作灶.理发.造桥.行丧.安葬.嫁娶.安机械.交易.出行.祭祀.祈福.求嗣.斋醮.塑绘.开光.合帐.裁衣.放水.开池.掘井.Bָ77_入宅.嫁娶.移徙.祭祀.沐浴.破屋.坏垣.余事勿取.7ָ6K3嫁娶.开市.合寿木.安葬.纳采.订盟.冠笄.祭祀.祈福.斋醮.出行.修造.动土.移徙.入宅.安香.出火.拆卸.造屋.起基.竖柱.上梁.定磉.安门.开池.uָ5S'开光.作灶.造屋.架马.开仓.嫁娶.纳采.祭祀.祈福.出行.立券.移徙.入宅.动土.破土.安葬.qָ4S开市.入宅.出行.修造.词讼.祭祀.沐浴.理发.整手足甲.修饰垣墙.平治道涂.余事勿取.{ָ3a%嫁娶.安床.作灶.动土.破土.造船.安机械.祭祀.祈福.求嗣.沐浴.解除.纳采.开市.修造.竖柱.上梁.开柱眼.安碓磑.归岫.补垣.塞穴.拆卸.放水.出火.扫舍.开生坟.合寿木.安葬.谢土.启攒.除服.成服.Jָ2QS安葬.开生坟.合寿木.行丧.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.修造.进人口.入宅.移徙.动土.安床.纳畜.栽种.纳财.交易.立券.挂匾.造畜椆栖.Eָ1EW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿取.ָ0am安床.祈福.出行.安葬.行丧.开光.嫁娶.合帐.裁衣.冠笄.伐木.上梁.出火.拆卸.移徙.修造.动土.安门.纳财.筑堤.栽种.塞穴.7ָ/E9行丧.置产.入宅.安葬.嫁娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈福.求嗣.出行.解除.伐木.出火.入宅.拆卸.修造.动土.上梁.安床.栽种.破土.;ָ.EC入宅.出行.掘井.安葬.祭祀.结网.余事勿取.ָ-S_作灶.出火.祭祀.嫁娶.入宅.开市.交易.立券.挂匾.开光.解除.拆卸.动土.安床.修造.上梁.置产.栽种.破土.安葬.Jָ,)}嫁娶.安葬.纳采.祭祀.祈福.开市.求医.治病.动土.纳畜.`ָ+)'祈福.斋醮.嫁娶.纳采.祭祀.祈福.出行.动土.上梁.移徙.入宅.破土.安葬.3ָ*'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.Yָ))开市.开光.嫁娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Yַc'安门.嫁娶.纳采.出行.祭祀.祈福.开市.动土.移徙.入宅.破土.安葬.ַb 7会亲友.进人口.修造.动土.起基.移徙.开市.纳畜.入殓.除服.成服.移柩.破土.安葬.修坟.立碑.会亲友.开光.出行.嫁娶.Dַa's诸事不宜.进人口.牧养.置产.塞穴.结网.余事勿取.ַ` 1开光.出行.纳采.嫁娶.伐木.架马.出火.拆卸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除服.成服.移柩.安葬.4ַ_)Q破土.安葬.塞穴.断蚁.结网.余事勿取.ַ^''余事勿取.余事勿取.}ַ]S7开市.入宅.探病.出火.造屋.嫁娶.祭祀.祈福.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.针灸.理发.会亲友.起基.修造.动土.竖柱.定磉.安床.拆卸.纳畜.牧养.放水.破土.除服.成服.修坟.立碑.Pַ\aQ开市.动土.祭祀.斋醮.安葬.探病.栽种.捕捉.畋猎.余事勿取.cַ[E嫁娶.出火.移徙.入宅.开市.交易.立券.安机械.会亲友.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上梁.安门.作灶.放水.作厕.开池.栽种.牧养.造畜椆栖.破土.安葬.立碑.;ַZEC斋醮.开市.嫁娶.作灶.沐浴.扫舍.余事勿取.BַY)m行丧.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取. d@&  g ( } x " J=r// d"ַXE移徙.入宅.造屋.架马.嫁娶.纳采.订盟.斋醮.开光.祭祀.祈福.求医.治病.会亲友.动土.解除.捕捉.纳畜.牧养.入殓.破土.安葬.:ַWE?动土.破土.嫁娶.嫁娶.祭祀.祈福.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上梁.作灶.安门.安香.出火.造屋.启攒.安葬.^ַVS{祈福.嫁娶.入宅.安床.作灶.祭祀.沐浴.移徙.破土.安葬.扫舍.平治道涂.~ַUS9开市.作灶.动土.行丧.安葬.嫁娶.纳采.订盟.会亲友.安机械.结网.冠笄.祭祀.求嗣.进人口.经络.xַTS-开市.出行.安床.作灶.安葬.嫁娶.纳采.订盟.祭祀.祈福.治病.造车器.修造.动土.移徙.入宅.>ַS)e嫁娶.安葬.祭祀.解除.断蚁.会亲友.余事勿取."ַRas入宅.造屋.造桥.安门.安葬.上梁.嫁娶.冠笄.祭祀.出行.移徙.入宅.作灶.造车器.补垣.塞穴.作厕.破土.启攒.除服.成服.入殓.]ַQ7入宅.安门.安葬.祭祀.祈福.求嗣.开光.纳采.订盟.嫁娶.出行.动土.破土.会亲友.开市.交易.立券.习艺.拆卸.起基.安碓磑.放水.开池.造仓.开渠.栽种.谢土.启攒.修坟.立碑.;ַP7Q探病.嫁娶.开市.祭祀.结网.捕捉.余事勿取.7ַOS+安床.上梁.裁衣.入宅.嫁娶.祭祀.祈福.求嗣.开光.订盟.纳采.解除.动土.起基.进人口.开市.交易.立券.纳财.造仓.开池.栽种.纳畜.破土.安葬.4ַN7A作灶.开市.经络.订盟.纳采.嫁娶.解除.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.入宅.移徙.安床.栽种.纳畜.动土.破土.谢土.安葬.修坟.BַM)m开光.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取.OַLKc开市.立券.造船.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.修造.进人口.入宅.移徙.安床.解除.挂匾.栽种.破土.谢土.入殓.移柩.安葬.SַKSc作灶.嫁娶.移徙.入宅.理发.开市.交易.立券.挂匾.祭祀.祈福.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.启攒.除服.成服.立碑.ַJSs伐木.安葬.安床.祭祀.祈福.纳采.嫁娶.裁衣.理发.出行.修造.动土.进人口.开市.交易.立券.挂匾.移徙.上梁.栽种.纳畜.ַI 嫁娶.栽种.修造.动土.出行.伐木.作梁.安葬.谢土.开光.纳采.裁衣.冠笄.安床.作灶.进人口.造仓.塞穴.FַH7g嫁娶.动土.破土.祭祀.会亲友.开市.安床.启攒.安葬.QַG7}嫁娶.开市.安葬.纳采.开光.求医.治病.动土.上梁.移徙.入宅.jַFS掘井.动土.破土.安葬.开光.祭祀.进人口.嫁娶.安床.解除.冠笄.出行.裁衣.扫舍.ַEEk掘井.安门.嫁娶.纳采.祭祀.祈福.裁衣.合帐.安床.入殓.除服.成服.移柩.破土.启攒.安葬.谢土.立碑.造畜椆栖.%ֶ~E入殓.安葬.入宅.安床.订盟.纳采.嫁娶.进人口.会亲友.交易.立券.动土.除服.谢土.移柩.破土.启攒.赴任.出行.开市.纳财.栽种.:ֶ}Q5造庙.嫁娶.安床.余事勿取.祭祀.余事勿取.ֶ|EW出火.入宅.安葬.伐木.祭祀.塑绘.开光.订盟.纳采.冠笄.裁衣.安机械.拆卸.修造.动土.安床.经络.开市.ֶ{''诸事不宜.诸事不宜.fֶzS 嫁娶.开市.交易.入宅.安葬.祭祀.沐浴.破屋.坏垣.求医.治病.解除.余事勿取.ֶyE 开市.动土.掘井.开池.祭祀.祈福.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.取渔.解除.安葬.启攒.谢土.入殓.@ֶxKE入宅.动土.开仓.出货财.造车器.祭祀.祈福.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.合脊.起基.定磉.安门.纳畜.安葬.开生坟.立碑.谢土.斋醮.OֶwS]嫁娶.安葬.动土.安床.治病.祭祀.作灶.平治道涂.余事勿取.:ֶva#祈福.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.嫁娶.会亲友.进人口.安床.开市.交易.纳畜.牧养.入殓.除服.成服.移柩.安葬.启攒. Fb O  3  b > =QS(JF /F~ֶua+开市.嫁娶.移徙.入宅.掘井.安葬.沐浴.斋醮.解除.求医.治病.会亲友.造畜椆栖.栽种.理发.扫舍.aֶtoe动土.破土.行丧.开光.作梁.安葬.探病.祭祀.解除.教牛马.出行.余事勿取.fֶsa}开光.嫁娶.掘井.安葬.安门.探病.祭祀.祈福.求嗣.斋醮.冠笄.作灶.纳财.交易.nֶrS祈福.动土.破土.安葬.入殓.纳采.嫁娶.出行.开市.立券.纳畜.牧养.出火.移徙.入宅.4ֶq)Q嫁娶.安葬.祭祀.捕捉.解除.余事勿取./ֶp77出火.嫁娶.开市.祭祀.祈福.求嗣.斋醮.纳采.订盟.开光.竖柱.上梁.开仓.出货财.造屋.起基.定磉.安门.诸事不宜.破土.入殓.启攒.谢土.JֶoSS祭祀.嫁娶.入宅.作灶.安葬.沐浴.捕捉.畋猎.结网.取渔._ֶnE 祈福.斋醮.开市.安葬.祭祀.沐浴.解除.求医.治病.破屋.坏垣.余事勿取.uֶmE5嫁娶.开市.纳财.出火.纳采.祭祀.祈福.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.gֶlS 移徙.入宅.嫁娶.出行.安床.祭祀.祈福.求嗣.斋醮.沐浴.纳畜.入殓.破土.安葬.KֶkK]安床.入宅.安碓磑.栽种.祭祀.作灶.平治道涂.余事勿取.ֶjae祈福.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.嫁娶.开市.出行.会亲友.安床.结网.除服.成服.启攒.安葬.移柩.Hֶio1纳采.出行.修坟.安葬.开市.立券.作灶.嫁娶.祭祀.祈福.求嗣.斋醮.开光.出火.移徙.入宅.竖柱.上梁.会亲友.造屋.起基.治病.治病.安门.造车器.掘井.开池.AֶhEO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿取.2ֶga移徙.入宅.作灶.理发.开光.安门.祭祀.出行.修造.动土.合帐.造畜椆栖.安床.移徙.入殓.移柩.破土.启攒.安葬.开生坟.合寿木.补垣.塞穴.ֶfE 作灶.安葬.祭祀.入殓.安香.出火.纳采.订盟.嫁娶.开市.立券.交易.挂匾.开光.出行.解除.安床.栽种.置产.拆卸.修造.动土.Bֶe)m嫁娶.入宅.祭祀.修门.取渔.纳财.纳畜.余事勿取.'ֶd'5纳采.问名.订盟.嫁娶.入宅.开仓.出火.动土.破土.纳畜.伐木.开市.交易.立券.挂匾.祭祀.开光.祈福.求嗣.安床.解除.修造.安葬.4ֶcE3造庙.嫁娶.伐木.安葬.祭祀.开光.塑绘.订盟.纳采.合帐.冠笄.拆卸.动土.起基.上梁.入宅.安香.开市.立券.纳财.沐浴.求嗣.出火.竖柱.安门.ֶb)作梁.造庙.祭祀.出行.订盟.纳采.裁衣.合帐.冠笄.进人口.动土.安床.作灶.入殓.移柩.安葬.破土.结网.取渔.畋猎.ֶa')诸事不宜.破屋.坏垣.ֶE 安床.嫁娶.作灶.入宅.祭祀.解除.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.谢土.沐浴.扫舍.捕捉.取渔.结网.畋猎.理发.Iֶ赴任.祈福.求嗣.开光.塑绘.斋醮.订盟.纳采.嫁娶.拆卸.安床.入宅.安香.移柩.修坟.安葬.谢土.栽种.解除.冠笄.裁衣.移徙.修造.动土.竖柱.放水.启攒.立碑.XֶSo动土.作灶.入宅.开光.安床.祭祀.嫁娶.纳婿.除服.成服.入殓.移柩.3ֶE1作灶.出行.入宅.安葬.塑绘.开光.订盟.纳采.裁衣.合帐.冠笄.安机械.会亲友.纳财.开市.立券.交易.安床.竖柱.上梁.结网.栽种.解除.经络.,ֶ'C诸事不宜.扫舍.塞穴.余事勿取.tֶa栽种.动土.安葬.掘井.修坟.探病.祭祀.会亲友.立券.交易.裁衣.合帐.嫁娶.冠笄.进人口.3ֶS#祭祀.嫁娶.出行.上梁.掘井.裁衣.经络.伐木.开柱眼.拆卸.修造.动土.上梁.合脊.合寿木.入殓.除服.成服.移柩.破土.安葬.启攒.修坟.立碑.4ֶS%纳采.动土.开市.交易.安门.开光.祈福.求嗣.出行.解除.伐木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除服.成服.移柩.谢土.纳畜.牧养.TֶEu纳财.开市.安葬.破土.理发.冠笄.嫁娶.进人口.栽种.捕捉.针灸.ֶE{祈福.嫁娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出火.拆卸.起基.修造.动土.上梁.移徙.造船.开市.交易.立券.纳财. % ~  n t gCWN>o M^jֶS塑绘.开光.造桥.除服.成服.嫁娶.冠笄.祭祀.出行.会亲友.修造.动土.入殓.破土.;ֶEC嫁娶.移徙.开市.入宅.破屋.坏垣.余事勿取.gֶS 纳采.开光.安床.嫁娶.开市.祈福.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~ֶ=O纳畜.理发.合寿木.嫁娶.造车器.纳采.订盟.祭祀.祈福.安机械.移徙.入宅.开市.立券.破土.安葬._ֶ E 开市.造屋.治病.作灶.嫁娶.冠笄.会亲友.安机械.纳财.交易.立券.置产.jֶ 7-移徙.入宅.栽种.纳财.开市.交易.立券.开光.针灸.会亲友.理发.安床.造仓.结网.Jֶ Ea嫁娶.安葬.行丧.安门.祭祀.沐浴.解除.扫舍.塞穴.牧养.bֶ au嫁娶.动土.掘井.起基.定磉.破土.祭祀.会亲友.出行.立券.交易.冠笄.纳财.cֶ E嫁娶.祈福.出火.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.ֶE{开市.交易.合帐.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.破土.出火.安门.安床.上梁.立碑.移柩.mֶE%入宅.造屋.竖柱.安葬.纳财.交易.立券.栽种.捕捉.结网.取渔.进人口.教牛马.理发.ֶYm嫁娶.定磉.合寿木.安葬.行丧.祭祀.祈福.求嗣.斋醮.沐浴.开光.理发.经络.解除.治病.治病.立碑.栽种.牧养.掘井.开池.cֶ7嫁娶.开光.作灶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;ֶ)_开光.嫁娶.破屋.坏垣.求医.治病.余事勿取.&ֶ}_开市.交易.作灶.纳财.上梁.安床.造屋.造船.嫁娶.开光.祭祀.祈福.求嗣.出行.出火.入宅.移徙.解除.栽种.伐木.破土.谢土.安葬.ֶE动土.伐木.安葬.行丧.嫁娶.祭祀.开光.祈福.求嗣.出行.出火.进人口.入宅.移徙.安床.拆卸.修造.安门.挂匾.纳财.扫舍.~ֶ开仓.出货财.造屋.作灶.开市.交易.立券.栽种.祭祀.祈福.嫁娶.冠笄.修饰垣墙.置产.平治道涂.Aֶ_5祭祀.祈福.安葬.安门.余事勿取.作灶.平治道涂.XֵE}斋醮.作灶.安床.安葬.安床.合帐.入宅.问名.纳采.求嗣.祭祀.开仓.0ֵ~U掘井.祭祀.斋醮.裁衣.合帐.冠笄.订盟.纳采.嫁娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲友.出行.祈福.求嗣.立碑.上梁.放水.[ֵ}Su祭祀.祈福.移徙.嫁娶.入宅.裁衣.合帐.入殓.除服.成服.会亲友.纳财.ֵ4EQ出行.嫁娶.入宅.动土.祭祀.祈福.求嗣.酬神.裁衣.安床.立券.交易.入殓.除服.成服.移柩.谢土.启攒.Eֵ3EU安葬.上梁.入宅.作灶.祭祀.沐浴.开光.塑绘.祈福.求嗣.订盟.纳采.冠笄.裁衣.嫁娶.动土.除服.成服.移柩.破土.启攒.出行.安碓磑.放水.开市.立券.交易.&ֵ2S 伐木.作灶.安葬.取渔.入宅.塑绘.开光.祈福.求嗣.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.Iֵ1'}余事勿取.祭祀.结网.入殓.除服.成服.移柩.安葬.破土.&ֵ0E安床.栽种.治病.作灶.祭祀.冠笄.嫁娶.拆卸.修造.动土.起基.上梁.造屋.入宅.开市.开池.塞穴.入殓.除服.成服.移柩.安葬.破土._ֵ/7入宅.开市.安葬.祭祀.沐浴.求医.治病.扫舍.破屋.坏垣.解除.余事勿取.ֵ.S]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.嫁娶.会亲友.进人口.牧养.捕捉.入殓.移柩.安葬.启攒.Eֵ-o+置产.造屋.合脊.开光.探病.安门.作灶.祈福.求嗣.斋醮.纳采.嫁娶.伐木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除服.成服.移柩.安葬.破土.谢土.Aֵ,EO嫁娶.祈福.掘井.安葬.祭祀.平治道涂.余事勿取.\ֵ+E开市.动土.安葬.破土.会亲友.求嗣.理发.冠笄.结网.捕捉.开光.理发.uֵ*S'开光.嫁娶.作灶.掘井.纳畜.祭祀.祈福.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬. m a % N|xW H1] jֵ)S祭祀.移徙.入宅.动土.破土.纳采.会亲友.竖柱.上梁.立券.入殓.移柩.安葬.启攒.nֵ(S嫁娶.动土.开光.造屋.破土.祭祀.祈福.求嗣.斋醮.入殓.除服.成服.移柩.安葬.启攒.qֵ'S移徙.入宅.出火.安门.安葬.纳采.嫁娶.祭祀.祈福.出行.开市.会亲友.动土.破土.启攒.cֵ&E嫁娶.开市.安葬.破土.纳采.祭祀.祈福.出行.会亲友.修造.动土.移徙.入宅.Cֵ%SE嫁娶.安门.移徙.入宅.安葬.塞穴.结网.取渔.畋猎.ֵ$KQ安床.作灶.造船.会亲友.纳采.订盟.祭祀.祈福.安香.出火.修造.出行.开市.移徙.入宅.动土.安葬.破土.Qֵ#) 嫁娶.安葬.祭祀.沐浴.解除.理发.扫舍.破屋.坏垣.余事勿取.gֵ"7'开市.入宅.斋醮.纳采.嫁娶.祭祀.祈福.出行.修造.动土.移徙.入宅.安葬.破土.Pֵ!S_经络.探病.造屋.作灶.动土.嫁娶.祭祀.冠笄.修饰垣墙.置产.Hֵ E]祭祀.祈福.安葬.安门.作灶.解除.平治道涂.余事勿取.pֵS嫁娶.开市.动土.作灶.安葬.会亲友.冠笄.安床.会亲友.安机械.祭祀.祈福.求嗣.经络.7ֵS+移徙.入宅.出火.作灶.掘井.祭祀.祈福.求嗣.开光.嫁娶.出行.解除.伐木.拆卸.进人口.安床.动土.起基.上梁.栽种.纳畜.破土.谢土.启攒.安葬. ֵ}'入宅.出行.移徙.祭祀.嫁娶.动土.破土.作灶.开光.解除.伐木.竖柱.上梁.交易.立券.纳畜.入殓.移柩.安葬.|ֵ} 栽种.开光.出行.针灸.嫁娶.入宅.动土.破土.祭祀.祈福.求嗣.纳畜.入殓.启攒.谢土.除服.成服.ֵ{I入宅.安葬.伐木.作梁.纳畜.造畜椆栖.作灶.嫁娶.祭祀.开光.祈福.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲友.bֵE嫁娶.入殓.安葬.出行.塑绘.开光.沐浴.冠笄.会亲友.作灶.放水.造畜椆栖.;ֵ)_开市.安床.祭祀.作灶.入殓.除服.余事勿取.XִSE}开市.伐木.嫁娶.作梁.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.LִRSU祈福.嫁娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出火.塑绘.裁衣.会亲友.入学.拆卸.扫舍.造仓.挂匾.掘井.开池.结网.栽种.纳畜.破土.修坟.立碑.安葬.入殓.4ִQ7C嫁娶.开市.安葬.破屋.坏垣.余事勿取.ִPE{造屋.开市.动土.破土.嫁娶.祭祀.沐浴.裁衣.出行.理发.移徙.捕捉.畋猎.放水.入宅.除服.成服.启攒.安葬.移柩.入殓.7ִO)W嫁娶.安葬.祭祀.安碓磑.结网.余事勿取.sִNa移徙.入宅.造庙.作灶.治病.安葬.祭祀.冠笄.嫁娶.会亲友.进人口.裁衣.结网.平治道涂.OִMEi入宅.开光.开市.动土.嫁娶.订盟.纳采.祭祀.祈福.求嗣.会亲友.解除.出行.入学.纳财.开市.交易.立券.习艺.经络.安床.开仓.出货财.纳畜.安葬.启攒.修坟.入殓.|ִLo探病.祭祀.出行.上梁.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲友.解除.求医.治病.入学.安床.安门.安香.出火.拆卸.扫舍.入宅.挂匾.开生坟.合寿木.破土.修坟.启攒.入殓.HִK7k破土.动土.安葬.祭祀.解除.教牛马.会亲友.余事勿取.ִJSk开光.嫁娶.开市.动土.破土.交易.立券.纳财.安床.裁衣.造畜椆栖.安葬.谢土.启攒.除服.成服.修坟.立碑.移柩.入殓.cִIau造庙.嫁娶.出行.动土.安葬.行丧.订盟.纳采.会亲友.祭祀.斋醮.沐浴.塑绘.出火.开光.竖柱.上梁.开市.交易.立券.作梁.开柱眼.伐木.架马.安门.安床.拆卸.牧养.造畜椆栖.掘井.{ִHEA开市.安床.安葬.修坟.嫁娶.纳采.订盟.问名.祭祀.冠笄.裁衣.会亲友.进人口.纳财.捕捉.作灶.eִGa{造庙.入宅.修造.安葬.行丧.嫁娶.祭祀.沐浴.补垣.塞穴.断蚁.解除.余事勿取. ִFSW祈福.嫁娶.安床.入宅.造船.沐浴.开仓.出货财.开市.交易.立券.纳财.栽种.纳畜.牧养.畋猎.入殓.破土.安葬. ^./ Y ( ~ > Xf\!\X ;ִE7Q斋醮.嫁娶.开市.祭祀.破屋.坏垣.余事勿取.%ִD}]纳采.订盟.嫁娶.上梁.开市.斋醮.造屋.安门.沐浴.捕捉.畋猎.理发.整手足甲.入殓.除服.成服.破土.安葬.谢土.立碑.修坟.启攒.ִCE开市.出行.安葬.行丧.嫁娶.订盟.纳采.会亲友.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出火.挂匾.拆卸.置产.RִBuA开光.嫁娶.开仓.出货财.造船.安葬.探病.平治道涂.余事勿取.'ִA5'挂匾.入宅.上梁.祈福.词讼.作梁.作灶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.嫁娶.栽种.入殓.移柩.安葬.?ִ@s作灶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.嫁娶.开光.解除.出火.拆卸.修造.进人口.入宅.移徙.安床.栽种.入殓.修坟.动土.除服.成服.yִ?o嫁娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲友.解除.余事勿取.7ִ> q入宅.置产.嫁娶.动土.栽种.开市.开光.动土.破土.祭祀.祈福.求嗣.沐浴.问名.交易.纳财.入殓.移柩.安葬.修坟.立碑.谢土.造畜椆栖.教牛马..ִ=S嫁娶.合帐.入宅.行丧.安葬.纳采.订盟.祭祀.祈福.求嗣.斋醮.沐浴.进人口.会亲友.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Qִ<aS嫁娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.捕捉.畋猎.nִ;S嫁娶.入宅.作灶.纳采.订盟.祭祀.斋醮.入殓.破土.启攒.安葬.修坟.立碑.除服.成服.sִ:S#祈福.造庙.祭祀.安床.谢土.嫁娶.纳采.订盟.开光.安香.出火.纳财.开市.交易.立券.裁衣.造屋.起基.修造.动土.安门.移徙.入宅.栽种.牧养.畋猎.掘井.开池.安葬.破土.入殓.除服.成服.立碑.Bִ97_开市.动土.破土.祭祀.破屋.坏垣.解除.余事勿取.:ִ8'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ִ7EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ִ6EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.Pִ5aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取. 5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.; 'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.# 5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m 37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍., 'C诸事不宜.解除.坏垣.余事勿取.a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3'Q诸事不宜.治病.破屋.坏垣.余事勿取.R) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅.")+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+'A诸事不宜.平治道涂.余事勿取.N)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜. } NE2 !SqI2019040505清明节4月5日放假,与周末连休。拼假建议:2019年4月1日(周一)~2019年4月4日(周四)请假4天,可拼9天清明节小长假。[{"date":"2019-4-5","status":1},{"date":"2019-4-6","status":1},{"date":"2019-4-7","status":1}]M !)Y2019050104劳动节5月1日放假拼假建议:4月28日(周日)~4月30日(周二)请假3天,可拼8天劳动节小长假。[{"date":"2019-5-1","status":1},{"date":"2019-5-2","status":1},{"date":"2019-5-3","status":1},{"date":"2019-5-4","status":1},{"date":"2019-4-28","status":2},{"date":"2019-5-5","status":2}] !SqI2019040504清明节4月5日放假,与周末连休。拼假建议:2019年4月1日(周一)~2019年4月4日(周四)请假4天,可拼9天清明节小长假。[{"date":"2019-4-5","status":1},{"date":"2019-4-6","status":1},{"date":"2019-4-7","status":1}] !SqI2019040503清明节4月5日放假,与周末连休。拼假建议:2019年4月1日(周一)~2019年4月4日(周四)请假4天,可拼9天清明节小长假。[{"date":"2019-4-5","status":1},{"date":"2019-4-6","status":1},{"date":"2019-4-7","status":1}] !Mq?2019020503春节2月4日至10日放假调休,共7天。2月2日(星期六)、2月3日(星期日)上班拼假建议:2019年2月11日(周一)-2019年2月15日(周五)请假5天,可拼14天春节小长假。[{"date":"2019-2-4","status":1},{"date":"2019-2-2","status":2},{"date":"2019-2-3","status":2},{"date":"2019-2-5","status":1},{"date":"2019-2-6","status":1},{"date":"2019-2-7","status":1},{"date":"2019-2-8","status":1},{"date":"2019-2-9","status":1},{"date":"2019-2-10","status":1}]!/M2019020403除夕除夕农历腊月最后一天为除夕,即大年初一前夜,又称为年三十。[{"date":"2019-2-4","status":1}] !Mq?2019020502春节2月4日至10日放假调休,共7天。2月2日(星期六)、2月3日(星期日)上班拼假建议:2019年2月11日(周一)-2019年2月15日(周五)请假5天,可拼14天春节小长假。[{"date":"2019-2-4","status":1},{"date":"2019-2-2","status":2},{"date":"2019-2-3","status":2},{"date":"2019-2-5","status":1},{"date":"2019-2-6","status":1},{"date":"2019-2-7","status":1},{"date":"2019-2-8","status":1},{"date":"2019-2-9","status":1},{"date":"2019-2-10","status":1}]!/M2019020402除夕除夕农历腊月最后一天为除夕,即大年初一前夜,又称为年三十。[{"date":"2019-2-4","status":1}]r !Wk2019010102元旦2018年12月30日至2019年1月1日放假调休,共3天。2018年12月29日(星期六)上班。拼假建议:2019年1月2日(周三)~2019年1月4日(周五)请假3天,可拼8天元旦小长假。[{"date":"2018-12-29","status":2},{"date":"2018-12-31","status":1},{"date":"2019-1-1","status":1},{"date":"2018-12-30","status":1}] ! Mq?2019020501春节2月4日至10日放假调休,共7天。2月2日(星期六)、2月3日(星期日)上班拼假建议:2019年2月11日(周一)-2019年2月15日(周五)请假5天,可拼14天春节小长假。[{"date":"2019-2-4","status":1},{"date":"2019-2-2","status":2},{"date":"2019-2-3","status":2},{"date":"2019-2-5","status":1},{"date":"2019-2-6","status":1},{"date":"2019-2-7","status":1},{"date":"2019-2-8","status":1},{"date":"2019-2-9","status":1},{"date":"2019-2-10","status":1}]! /M2019020401除夕除夕农历腊月最后一天为除夕,即大年初一前夜,又称为年三十。[{"date":"2019-2-4","status":1}]q ! Wk2019010101元旦2018年12月30日至2019年1月1日放假调休,共3天。2018年12月29日(星期六)上班。拼假建议:2019年1月2日(周三)~2019年1月4日(周五)请假3天,可拼8天元旦小长假。[{"date":"2018-12-29","status":2},{"date":"2018-12-31","status":1},{"date":"2019-1-1","status":1},{"date":"2018-12-30","status  } NE2 !SqI2019040505清明节4月5日放假,与周末连休。拼假建议:2019年4月1日(周一)~2019年4月4日(周四)请假4天,可拼9天清明节小长假。[{"date":"2019-4-5","status":1},{"date":"2019-4-6","status":1},{"date":"2019-4-7","status":1}]M !)Y2019050104劳动节5月1日放假拼假建议:4月28日(周日)~4月30日(周二)请假3天,可拼8天劳动节小长假。[{"date":"2019-5-1","status":1},{"date":"2019-5-2","status":1},{"date":"2019-5-3","status":1},{"date":"2019-5-4","status":1},{"date":"2019-4-28","status":2},{"date":"2019-5-5","status":2}] !SqI2019040504清明节4月5日放假,与周末连休。拼假建议:2019年4月1日(周一)~2019年4月4日(周四)请假4天,可拼9天清明节小长假。[{"date":"2019-4-5","status":1},{"date":"2019-4-6","status":1},{"date":"2019-4-7","status":1}] !SqI2019040503清明节4月5日放假,与周末连休。拼假建议:2019年4月1日(周一)~2019年4月4日(周四)请假4天,可拼9天清明节小长假。[{"date":"2019-4-5","status":1},{"date":"2019-4-6","status":1},{"date":"2019-4-7","status":1}] !Mq?2019020503春节2月4日至10日放假调休,共7天。2月2日(星期六)、2月3日(星期日)上班拼假建议:2019年2月11日(周一)-2019年2月15日(周五)请假5天,可拼14天春节小长假。[{"date":"2019-2-4","status":1},{"date":"2019-2-2","status":2},{"date":"2019-2-3","status":2},{"date":"2019-2-5","status":1},{"date":"2019-2-6","status":1},{"date":"2019-2-7","status":1},{"date":"2019-2-8","status":1},{"date":"2019-2-9","status":1},{"date":"2019-2-10","status":1}]!/M2019020403除夕除夕农历腊月最后一天为除夕,即大年初一前夜,又称为年三十。[{"date":"2019-2-4","status":1}] !Mq?2019020502春节2月4日至10日放假调休,共7天。2月2日(星期六)、2月3日(星期日)上班拼假建议:2019年2月11日(周一)-2019年2月15日(周五)请假5天,可拼14天春节小长假。[{"date":"2019-2-4","status":1},{"date":"2019-2-2","status":2},{"date":"2019-2-3","status":2},{"date":"2019-2-5","status":1},{"date":"2019-2-6","status":1},{"date":"2019-2-7","status":1},{"date":"2019-2-8","status":1},{"date":"2019-2-9","status":1},{"date":"2019-2-10","status":1}]!/M2019020402除夕除夕农历腊月最后一天为除夕,即大年初一前夜,又称为年三十。[{"date":"2019-2-4","status":1}]r !Wk2019010102元旦2018年12月30日至2019年1月1日放假调休,共3天。2018年12月29日(星期六)上班。拼假建议:2019年1月2日(周三)~2019年1月4日(周五)请假3天,可拼8天元旦小长假。[{"date":"2018-12-29","status":2},{"date":"2018-12-31","status":1},{"date":"2019-1-1","status":1},{"date":"2018-12-30","status":1}] ! Mq?2019020501春节2月4日至10日放假调休,共7天。2月2日(星期六)、2月3日(星期日)上班拼假建议:2019年2月11日(周一)-2019年2月15日(周五)请假5天,可拼14天春节小长假。[{"date":"2019-2-4","status":1},{"date":"2019-2-2","status":2},{"date":"2019-2-3","status":2},{"date":"2019-2-5","status":1},{"date":"2019-2-6","status":1},{"date":"2019-2-7","status":1},{"date":"2019-2-8","status":1},{"date":"2019-2-9","status":1},{"date":"2019-2-10","status":1}]! /M2019020401除夕除夕农历腊月最后一天为除夕,即大年初一前夜,又称为年三十。[{"date":"2019-2-4","status":1}]q ! Wk2019010101元旦2018年12月30日至2019年1月1日放假调休,共3天。2018年12月29日(星期六)上班。拼假建议:2019年1月2日(周三)~2019年1月4日(周五)请假3天,可拼8天元旦小长假。[{"date":"2018-12-29","status":2},{"date":"2018-12-31","status":1},{"date":"2019-1-1","status":1},{"date":"2018-12-30","status":1}] zkM\> /!2019100111!2019100110!2019091310!2019100109!2019091309!2019091308!2019060707!2019060706!2019050106!2019060705!2019050105 !2019040505 !2019050104 !2019040504 !2019040503 !2019020503!2019020403!2019020502!2019020402!2019010102!2019020501!2019020401 ! 2019010101  M : '  !C[Q2019100111 国庆节10月1日至10月7日放假,9月29日(星期日)、10月12日(星期六)上班。拼假建议:9月29日(周日)~9月30日(周一)请2天假,可拼10天国庆节小长假。[{"date":"2019-10-1","status":1},{"date":"2019-9-29","status":2},{"date":"2019-10-2","status":1},{"date":"2019-10-3","status":1},{"date":"2019-10-4","status":1},{"date":"2019-10-7","status":1},{"date":"2019-10-12","status":2},{"date":"2019-10-5","status":1},{"date":"2019-10-6","status":1}] !C[Q2019100110 国庆节10月1日至10月7日放假,9月29日(星期日)、10月12日(星期六)上班。拼假建议:9月29日(周日)~9月30日(周一)请2天假,可拼10天国庆节小长假。[{"date":"2019-10-1","status":1},{"date":"2019-9-29","status":2},{"date":"2019-10-2","status":1},{"date":"2019-10-3","status":1},{"date":"2019-10-4","status":1},{"date":"2019-10-7","status":1},{"date":"2019-10-12","status":2},{"date":"2019-10-5","status":1},{"date":"2019-10-6","status":1}] !UsO2019091310 中秋节9月13日放假,与周末连休。拼假建议:2019年9月9日(周一)~2019年9月12日(周四)请假4天,可拼9天中秋节小长假。[{"date":"2019-9-13","status":1},{"date":"2019-9-14","status":1},{"date":"2019-9-15","status":1}] !C[Q2019100109 国庆节10月1日至10月7日放假,9月29日(星期日)、10月12日(星期六)上班。拼假建议:9月29日(周日)~9月30日(周一)请2天假,可拼10天国庆节小长假。[{"date":"2019-10-1","status":1},{"date":"2019-9-29","status":2},{"date":"2019-10-2","status":1},{"date":"2019-10-3","status":1},{"date":"2019-10-4","status":1},{"date":"2019-10-7","status":1},{"date":"2019-10-12","status":2},{"date":"2019-10-5","status":1},{"date":"2019-10-6","status":1}] !UsO2019091309 中秋节9月13日放假,与周末连休。拼假建议:2019年9月9日(周一)~2019年9月12日(周四)请假4天,可拼9天中秋节小长假。[{"date":"2019-9-13","status":1},{"date":"2019-9-14","status":1},{"date":"2019-9-15","status":1}] !UsO2019091308中秋节9月13日放假,与周末连休。拼假建议:2019年9月9日(周一)~2019年9月12日(周四)请假4天,可拼9天中秋节小长假。[{"date":"2019-9-13","status":1},{"date":"2019-9-14","status":1},{"date":"2019-9-15","status":1}] !SqI2019060707端午节6月7日放假,与周末连休。拼假建议:2019年6月3日(周一)~2019年6月6日(周四)请假4天,可拼9天端午节小长假。[{"date":"2019-6-7","status":1},{"date":"2019-6-8","status":1},{"date":"2019-6-9","status":1}] !SqI2019060706端午节6月7日放假,与周末连休。拼假建议:2019年6月3日(周一)~2019年6月6日(周四)请假4天,可拼9天端午节小长假。[{"date":"2019-6-7","status":1},{"date":"2019-6-8","status":1},{"date":"2019-6-9","status":1}]M !)Y2019050106劳动节5月1日放假拼假建议:4月28日(周日)~4月30日(周二)请假3天,可拼8天劳动节小长假。[{"date":"2019-5-1","status":1},{"date":"2019-5-2","status":1},{"date":"2019-5-3","status":1},{"date":"2019-5-4","status":1},{"date":"2019-4-28","status":2},{"date":"2019-5-5","status":2}] !SqI2019060705端午节6月7日放假,与周末连休。拼假建议:2019年6月3日(周一)~2019年6月6日(周四)请假4天,可拼9天端午节小长假。[{"date":"2019-6-7","status":1},{"date":"2019-6-8","status":1},{"date":"2019-6-9","status":1}]M !)Y2019050105劳动节5月1日放假拼假建议:4月28日(周日)~4月30日(周二)请假3天,可拼8天劳动节小长假。[{"date":"2019-5-1","status":1},{"date":"2019-5-2","status":1},{"date":"2019-5-3","status":1},{"date":"2019-5-4","status":1},{"date":"2019-4-28","status":2},{"date":"2019-5-5","status":2}] #X . #d ! 2020100110 中秋节10月1日至10月8日放假8天,9月27日,10月10日上班10月9日至10月10日请假2天,与周末连休可拼11天长假。[{"date":"2020-10-1","status":1},{"date":"2020-10-2","status":1},{"date":"2020-10-3","status":1},{"date":"2020-10-4","status":1},{"date":"2020-10-5","status":1},{"date":"2020-10-6","status":1},{"date":"2020-10-7","status":1},{"date":"2020-10-8","status":1},{"date":"2020-9-27","status":2},{"date":"2020-10-10","status":2}]! !o12020062506端午节6月25日至6月27日放假3天,6月28日上班2020年6月22日至2020年6月24日请假3天,与周末连休可拼8天长假。[{"date":"2020-6-25","status":1},{"date":"2020-6-26","status":1},{"date":"2020-6-27","status":1},{"date":"2020-6-28","status":2}] !3C2020050105劳动节5月1日至5月5日放假5天,4月26日,5月9日上班2020年4月26日至2020年4月30日请假5天,与周末连休可拼11天长假。[{"date":"2020-5-1","status":1},{"date":"2020-5-2","status":1},{"date":"2020-5-3","status":1},{"date":"2020-5-4","status":1},{"date":"2020-5-5","status":1},{"date":"2020-4-26","status":2},{"date":"2020-5-9","status":2}]i !G/I2020040404清明节4月4日至4月6日放假3天2020年4月7日至2020年4月10日请假4天,与周末连休可拼9天长假。[{"date":"2020-4-4","status":1},{"date":"2020-4-5","status":1},{"date":"2020-4-6","status":1}] ! 3K2020012501春节1月24日(除夕)至1月30日放假7天,1月19日,2月1日上班2020年1月19日至2020年1月23日请假5天,与周末连休可拼13天长假。[{"date":"2020-1-24","status":1},{"date":"2020-1-25","status":1},{"date":"2020-1-26","status":1},{"date":"2020-1-27","status":1},{"date":"2020-1-28","status":1},{"date":"2020-1-29","status":1},{"date":"2020-1-30","status":1},{"date":"2020-1-19","status":2},{"date":"2020-1-31","status":1},{"date":"2020-2-1","status":1},{"date":"2020-2-2","status":1}]! 7/O2020012401除夕1月24日放假一天农历腊月最后一天为除夕,即大年初一前夜,又称为年三十。[{"date":"2020-1-24","status":1}]%! 5?M2020010101元旦1月1日放假一天2019年12月30日和2019年12月31日请假两天,与周末连休可拼5天小长假。[{"date":"2020-1-1","status":1}] !2020100110!2020062506!2020050105!2020040404!2020012501!2020012401 ! 2020010101 !Km.J Z )  I m J P qG.EgdWK=Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<~)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u} m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. |SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:{'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>zEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.yEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PxaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cwS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KvSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖. u)置产.安床.嫁娶.开光.出行.解除.出火.拆卸.修造.进人口.动土.入宅.移徙.栽种.纳畜.掘井.安葬.除服.成服.,t'C余事勿取.祭祀.沐浴.余事勿取.s}入宅.移徙.嫁娶.掘井.作灶.出火.进人口.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.启攒.%r'5余事勿取.解除.余事勿取.qqo安床.开市.交易.出货财.安葬.修坟.嫁娶.作灶.祭祀.沐浴.结网.移柩.入殓.除服.成服.*aW入宅.作灶.词讼.移徙.出行.赴任.祭祀.祈福.求嗣.开光.解除.理发.会亲友.栽种.纳畜.牧养.安葬.修坟.立碑.启攒.))探病.安葬.嫁娶.祭祀.开光.出火.出行.拆卸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.栽种.纳畜.,('C诸事不宜.破屋.坏垣.余事勿取. '5嫁娶.开市.出火.栽种.破土.动土.入宅.移徙.安香.分居.掘井.作灶.开光.解除.拆卸.修造.动土.安床.纳畜.安葬.启攒.入殓.)& U嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.出行.拆卸.进人口.入宅.移徙.安床.栽种.动土.修造.纳畜.入殓.安葬.立碑.除服.成服.%}Q栽种.破土.置产.祭祀.嫁娶.动土.作灶.祈福.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.$''诸事不宜.诸事不宜.V#!开市.祭祀.祈福.斋醮.塑绘.开光.订盟.纳采.裁衣.冠笄.嫁娶.拆卸.入宅.安香.入殓.移柩.理发.安葬.修坟.谢土.赴任.移徙.沐浴.治病.破土.启攒.整手足甲.入学.作梁.S"Es嫁娶.动土.安葬.作灶.祭祀.沐浴.出行.冠笄.进人口.余事勿取.`!)'入宅.作灶.祈福.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网. ''诸事不宜.诸事不宜.,'C诸事不宜.沐浴.扫舍.余事勿取.jE嫁娶.入宅.治病.赴任.祭祀.祈福.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造畜椆栖.入殓.移柩.启攒.安葬.谢土.除服.成服.会亲友.竖柱.上梁.经络.开市.交易.立券.纳财.纳畜.筑堤.^)#造屋.治病.祭祀.解除.祈福.开光.塑绘.斋醮.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.入殓.除服.成服.移柩.启攒.安床.赴任.出行.移徙.竖柱.上梁.伐木.栽种.破土.安葬.纳畜.:'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取. Ee开市.交易.破土.作灶.祭祀.塑绘.开光.订盟.纳采.嫁娶.安床.进人口.入殓.除服.成服.移柩.启攒.安葬.立碑. " o + @  N  Y'7x2`%)1作灶.治病.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.赴任.进人口.会亲友.EK作灶.治病.伐木.作梁.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.除服.成服.入殓.移柩.安葬.谢土.赴任.会亲友.进人口.出行.竖柱.上梁.经络.开市.交易.立券.纳财.开仓.FEY嫁娶.入宅.安门.移徙.理发.会亲友.补垣.塞穴.结网.ZE入宅.作灶.安床.开仓.祭祀.会亲友.嫁娶.沐浴.修造.动土.祈福.开光.塑绘.出行.订盟.纳采.裁衣.入殓.除服.成服.移柩.启攒.赴任.竖柱.上梁.纳财.扫舍.栽种.纳畜.伐木.,'C诸事不宜.祭祀.沐浴.余事勿取.pS开光.掘井.安葬.谢土.修坟.嫁娶.冠笄.安床.纳采.会亲友.塞穴.捕捉.置产.造畜椆栖.LSU移徙.入宅.安门.作梁.安葬.祭祀.祈福.求嗣.斋醮.沐浴.冠笄.出行.理发.拆卸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫舍.除服.成服.移柩.启攒.立碑.谢土.pS安床.安门.破土.修坟.安葬.捕捉.畋猎.会亲友.解除.入殓.除服.成服.移柩.余事勿取.<EE安葬.开市.修坟.立碑.嫁娶.祭祀.作灶.纳财. }'纳畜.伐木.置产.作梁.行丧.安葬.修坟.立碑.嫁娶.祭祀.开市.开光.出行.入宅.移徙.出火.拆卸.修造.安床.{o上梁.作灶.伐木.出行.安葬.安门.理发.嫁娶.求嗣.纳采.进人口.纳财.结网.纳畜.牧养.会亲友.:'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.a'+余事勿取.祭祀.入殓.移柩.开生坟.破土.启攒.安葬.除服.成服.余事勿取.H '{余事勿取.入殓.破土.安葬.启攒.除服.成服.余事勿取.8G'[诸事不宜.造畜椆栖.平治道涂.余事勿取.F -嫁娶.作灶.出火.出行.入宅.移徙.安床.祈福.上梁.开市.交易.立券.纳财.会亲友.开光.理发.入殓.移柩.安葬.启攒.E}5安葬.修坟.作灶.破土.造庙.动土.嫁娶.纳采.祭祀.祈福.求嗣.开光.出行.解除.移徙.伐木.安床.纳畜.出火.拆卸.DgG动土.伐木.作梁.行丧.安葬.开生坟.祭祀.出行.裁衣.冠笄.会亲友.造畜椆栖.嫁娶.竖柱.上梁.移徙.纳财.纳畜.Cg[嫁娶.开光.会亲友.掘井.安门.栽种.祭祀.解除.裁衣.理发.安床.作灶.造畜椆栖.放水.筑堤.补垣.塞穴.整手足甲.扫舍. B}'嫁娶.作灶.修坟.安门.入宅.立碑.安葬.安床.祭祀.祈福.求嗣.开光.开市.出行.解除.动土.起基.置产.栽种.,A'C诸事不宜.祭祀.塞穴.余事勿取.g@)5斋醮.安门.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.B?)m祈福.安葬.订盟.纳采.会亲友.安机械.纳财.牧养.:>'_余事勿取.祭祀.解除.破屋.坏垣.余事勿取.`=)'开市.赴任.嫁娶.订盟.纳采.出行.祭祀.祈福.动土.移徙.入宅.破土.安葬.C<)o移徙.入宅.入殓.除服.成服.移柩.破土.启攒.安葬.9;']余事勿取.祭祀.结网.造畜椆栖.余事勿取.?:7Y开市.动土.破土.开光.针灸.会亲友.启攒.安葬.89)Y嫁娶.入宅.沐浴.理发.入学.习艺.进人口.&8)5行丧.安葬.作灶.造畜椆栖.?7)g动土.上梁.嫁娶.祭祀.安机械.入殓.破土.安葬.6Em作灶.入殓.安葬.安床.祭祀.祈福.斋醮.沐浴.竖柱.订盟.纳采.嫁娶.拆卸.入宅.移柩.启攒.谢土.赴任.出火.纳畜.J5Ea栽种.动土.安葬.开市.祭祀.作灶.入殓.除服.成服.畋猎.y4E=开仓.冠笄.伐木.作梁.祭祀.塑绘.开光.祈福.斋醮.出行.订盟.纳采.裁衣.嫁娶.拆卸.修造.安床.入宅.安香.入殓.启攒.安葬.谢土.赴任.会亲友.进人口.出行.移徙.上梁.经络.开市.交易.立券.纳财. !c}> w f  w TBh Kz/y#c 3E]出行.祈福.安葬.作灶.会亲友.嫁娶.订盟.纳采.纳婿.拆卸.修造.动土.起基.竖柱.上梁.安床.会亲友.纳财.,2'C诸事不宜.破屋.坏垣.余事勿取.]1Sw开光.嫁娶.掘井.伐木.作梁.祭祀.祈福.求嗣.斋醮.造庙.出火.安机械.会亲友.开市.交易.立券.纳财.习艺.经络.求医.治病.开池.作厕.畋猎.结网.栽种.牧养.安葬.破土.启攒.n0S嫁娶.祭祀.入宅.造屋.移徙.捕捉.结网.入殓.除服.成服.移柩.破土.安葬.启攒.立碑.0/ c嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.栽种.纳畜.入殓.安葬.除服.成服.F.'w诸事不宜.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.|-a'作灶.行丧.理发.乘船.嫁娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出火.上梁. ,SO伐木.行丧.作灶.作梁.安葬.嫁娶.祭祀.塑绘.开光.出行.解除.理发.整手足甲.动土.安床.开池.放水.扫舍.3+'Q诸事不宜.祭祀.出行.扫舍.余事勿取.*o'掘井.祈福.安床.开市.入宅.挂匾.开光.嫁娶.出行.伐木.拆卸.修造.动土.移徙.安葬.破土.修坟.立碑.H)'{余事勿取.祭祀.立碑.修坟.启攒.除服.成服.余事勿取.mba 探病.开渠.安葬.伐木.作灶.入宅.祭祀.理发.会亲友.进人口.嫁娶.针灸.入殓.移柩."a}W嫁娶.立碑.出行.伐木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人口.入宅.安床.出火.拆卸.修造.动土.栽种.0` c嫁娶.祈福.求嗣.出行.出火.拆卸.修造.动土.上梁.开光.进人口.开市.交易.立券.挂匾.安床.入宅.移徙.栽种.伐木.入殓.破土.除服.成服.,_'C诸事不宜.破屋.坏垣.余事勿取.#^5嫁娶.出行.安床.作灶.祭祀.入宅.移徙.出火.进人口.置产.开光.解除.起基.动土.拆卸.上梁.立碑.修坟.安葬.破土.启攒.移柩.0] c嫁娶.祭祀.祈福.求嗣.沐浴.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.入宅.移徙.安床.栽种.纳畜.入殓.安葬.启攒.除服.成服.W\E{嫁娶.移徙.入宅.开市.沐浴.入殓.移柩.除服.成服.破土.平治道涂.[''诸事不宜.诸事不宜.:Z'_诸事不宜.祭祀.沐浴.赴任.出行.余事勿取._Yoa动土.冠笄.移徙.入宅.开市.竖柱.上梁.祭祀.出行.成服.除服.沐浴.入殓. XEe安床.开光.开市.交易.祭祀.裁衣.冠笄.嫁娶.安机械.拆卸.动土.起基.移徙.入宅.入殓.启攒.安葬.造仓.经络.4WE5入殓.安葬.开市.交易.祭祀.诸事不宜.{VEA移徙.入宅.作灶.安葬.祭祀.裁衣.冠笄.嫁娶.纳婿.会亲友.除服.成服.移柩.捕捉.进人口.入殓.uU)Q定磉.安葬.祭祀.赴任.动土.上梁.开光.塑绘.冠笄.拆卸.起基.安床.开市.立券.赴任.经络.7TE9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.嫁娶.拆卸.起基.安床.入宅.开市.入殓.除服.成服.移柩.破土.谢土.挂匾.开柱眼.交易.ISE_移徙.入宅.出行.栽种.祭祀.沐浴.破屋.坏垣.余事勿取.REW作灶.祭祀.入宅.嫁娶.祭祀.冠笄.会亲友.拆卸.起基.除服.成服.移柩.启攒.安葬.沐浴.捕捉.开光.塑绘.AQ)i入宅.伐木.祭祀.会亲友.纳采.嫁娶.开光.塑绘.斋醮.安香.开市.立券.除服.成服.入殓.移柩.安葬.赴任.进人口.出行.裁衣.修造.动土.上梁.经络.交易.:P)]嫁娶.入宅.祭祀.沐浴.修饰垣墙.平治道涂.O)e嫁娶.安葬.祭祀.沐浴.解除.理发.冠笄.安机械.作灶.造仓.开市.开池.作厕.补垣.塞穴.断蚁.结网.NEm造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上梁.合脊.安床.移徙.入宅.开市.栽种.作厕.cMS动土.作灶.行丧.安葬.修坟.祭祀.祈福.求嗣.出行.沐浴.交易.扫舍.教牛马. !1w ' b f  @b.N< _7!L))开光.安床.祭祀.出行.解除.冠笄.嫁娶.伐木.架马.开柱眼.修造.动土.移徙.入宅.开生坟.合寿木.入殓.移柩.破土.安葬.修坟.xKa嫁娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲友.捕捉.畋猎.启攒.除服.成服.移柩.%J}]造屋.入殓.安葬.伐木.入宅.移徙.置产.纳畜.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.安床.栽种.移柩.进人口.会亲友.除服.成服.I}I动土.破土.理发.出行.入宅.分居.安香.出火.祭祀.开光.解除.移徙.裁衣.开市.立券.祈福.求嗣.进人口.交易.纳财.纳畜.HE{栽种.作灶.针灸.出行.嫁娶.出火.拆卸.祭祀.祈福.开光.伐木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.hG'9诸事不宜.祭祀.结网.入殓.移柩.启攒.安葬.移柩.除服.成服.合寿木.余事勿取.,F'C诸事不宜.破屋.坏垣.余事勿取.^E'%诸事不宜.祭祀.求医.捕捉.栽种.塞穴.入殓.破土.安葬.移柩.余事勿取.))9嫁娶.移徙.祭祀.求嗣.开光.出行.伐木.作梁.出火.解除.拆卸.进人口.修造.动土.起基.安床.栽种.纳畜.入殓.破土.安葬.除服.成服.N~'诸事不宜.祭祀.作灶.沐浴.修饰垣墙.平治道涂.余事勿取.}嫁娶.纳财.祈福.安葬.修造.开市.交易.立券.动土.上梁.塑绘.开光.进人口.纳畜.补垣.塞穴.栽种.牧养.| %嫁娶.会亲友.进人口.出行.入宅.移徙.赴任.作灶.祭祀.解除.沐浴.理发.整手足甲.入殓.移柩.破土.安葬.扫舍.{Sm破土.置产.掘井.动土.安床.祭祀.祈福.求嗣.开光.出行.解除.上梁.造屋.移徙.安门.纳财.牧养.纳畜.安葬.启攒.入殓.za_造屋.开光.理发.造船.掘井.作灶.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.移徙.动土.安床.入殓.破土.安葬.启攒.y}入宅.作梁.安门.伐木.修造.上梁.入殓.造屋.嫁娶.祭祀.祈福.求嗣.出行.动土.安床.掘井.破土.启攒.Fx)u动土.安葬.订盟.纳采.祭祀.祈福.安机械.作灶.纳畜.gw)5开光.针灸.嫁娶.订盟.纳采.祭祀.祈福.求医.治病.动土.移徙.入宅.破土.安葬.`v)'动土.破土.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.移徙.入宅.启攒.安葬.:u'_诸事不宜.沐浴.治病.破屋.坏垣.余事勿取.5t)S嫁娶.入宅.捕捉.结网.入殓.破土.安葬.Cs)o开市.安葬.嫁娶.祭祀.祈福.斋醮.动土.移徙.入宅.MrCi嫁娶.祈福.余事勿取.沐浴.修饰垣墙.平治道涂.余事勿取.Nq)开市.安葬.订盟.纳采.出行.会亲友.修造.上梁.移徙.入宅.Rp) 嫁娶.开市.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.安葬.Jo7o作灶.动土.破土.嫁娶.出行.纳畜.祭祀.入殓.启攒.安葬.Cn)o动土.破土.嫁娶.祭祀.祈福.斋醮.作灶.移徙.入宅. m 祈福.出行.订盟.纳采.嫁娶.裁衣.动土.安床.放水.开市.掘井.交易.立券.栽种.开渠.除服.成服.移柩.破土.l 3塑绘.开光.解除.订盟.纳采.嫁娶.出火.修造.动土.移徙.入宅.拆卸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养. k 祈福.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生坟.入殓.除服.成服.移柩.破土.安葬.7jS+动土.破土.订盟.安床.开池.祈福.斋醮.出行.冠笄.嫁娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除服.成服.移柩.破土.安葬.启攒.4i)Q行丧.安葬.破屋.坏垣.治病.余事勿取.|hS5嫁娶.纳采.订盟.开市.入宅.祭祀.捕捉.畋猎.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.启攒.IgE]开市.立券.纳财.作灶.纳采.订盟.嫁娶.祭祀.祈福.普渡.开光.安香.出火.移徙.入宅.竖柱.修造.动土.竖柱.上梁.起基.造屋.安门.造庙.造桥.破土.启攒.安葬. #b ,  { & n  7=V%q#{foQ嫁娶.栽种.行丧.理发.修坟.行丧.作灶.祭祀.祈福.求嗣.开光.伐木.出火.拆卸.入宅.安床.修造.动土.上梁.挂匾.纳畜.,e'C诸事不宜.祭祀.解除.余事勿取.d}5作灶.动土.上梁.栽种.入宅.移徙.修造.祈福.嫁娶.开光.解除.安床.牧养.理发.开市.入殓.启攒.移柩.安葬.扫舍."c G嫁娶.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.栽种.纳畜.入殓.启攒.除服.成服.tb_嫁娶.作灶.安葬.动土.词讼.作梁.伐木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^a'%余事勿取.祭祀.入殓.破土.除服.成服.移柩.启攒.安葬.谢土.余事勿取.m}o嫁娶.出行.安葬.入殓.入宅.作灶.冠笄.上梁.祭祀.祈福.求嗣.开光.开市.牧养.理发.i}g安葬.经络.修坟.破土.开市.安床.启攒.立碑.祭祀.作灶.纳财.栽种.纳畜.进人口." G嫁娶.开光.出行.祈福.求嗣.解除.拆卸.动土.修造.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.纳畜.入殓.移柩.安葬.E{伐木.祭祀.纳畜.祭祀.嫁娶.开光.出行.理发.作梁.出火.拆卸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.栽种.,'C诸事不宜.破屋.坏垣.余事勿取.}嫁娶.入宅.移徙.作灶.开市.交易.安门.栽种.祭祀.解除.沐浴.整手足甲.入殓.移柩.破土.启攒.安葬.oW嫁娶.破土.置产.栽种.安葬.修坟.行丧.入宅.移徙.安床.开光.祈福.求嗣.进人口.开市.交易.立券.出火.拆卸.修造.动土.ja开仓.出货财.置产.安葬.动土.破土.掘井.栽种.嫁娶.祭祀.裁衣.结网.冠笄.沐浴.J7o祈福.动土.破土.嫁娶.出行.开市.安床.入殓.启攒.安葬.C)o开市.入宅.嫁娶.祭祀.祈福.斋醮.治病.破土.安葬.J)}动土.安葬.嫁娶.纳采.出行.祭祀.祈福.解除.移徙.入宅.^'%诸事不宜.补垣.塞穴.结网.入殓.除服.成服.移柩.安葬.启攒.余事勿取.J)}造庙.安葬.嫁娶.开市.立券.祭祀.祈福.动土.移徙.入宅..)E开市.破土.祭祀.作灶.纳财.捕捉.R 赴任.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.Y )祭祀.祈福.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.3 'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.J 7o嫁娶.移徙.入宅.纳采.祭祀.祈福.解除.动土.破土.安葬., 'C诸事不宜.沐浴.扫舍.余事勿取.P' 余事勿取.祭祀.冠笄.嫁娶.捕捉.结网.畋猎.取渔.余事勿取. !塑绘.出行.冠笄.嫁娶.进人口.裁衣.纳婿.造畜椆栖.交易.立券.牧养.开生坟.入殓.除服.成服.移柩.安葬.启攒.S;开市.斋醮.安床.出行.经络.移徙.入宅.治病.会亲友.祭祀.祈福.斋醮.安香.移徙.嫁娶.造屋.起基.Eo动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲友.裁衣.开仓.经络.纳畜.造畜椆栖.教牛马.牧养.Wa_移徙.开市.入宅.嫁娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿取.aO造屋.入宅.作灶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.嫁娶.会亲友.放水.掘井.牧养.纳畜.开渠.安碓磑.bS开市.入宅.安床.动土.安葬.祭祀.进人口.纳财.纳畜.牧养.捕捉.余事勿取.,'C诸事不宜.祭祀.作灶.余事勿取.&}_嫁娶.出火.伐木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.栽种.安床.拆卸.修造.动土.上梁.入殓.安葬.破土.除服.成服.oQ嫁娶.造桥.词讼.移徙.安门.作灶.栽种.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.经络.破土. $X'  X J 0Sb"fCt2c@,~'C诸事不宜.破屋.坏垣.余事勿取.}aQ嫁娶.开市.交易.行丧.安葬.修坟.祭祀.祈福.求嗣.开光.出行.伐木.出火.拆卸.修造.动土.起基.安床.入宅.移徙.)6 U嫁娶.祭祀.开光.祈福.求嗣.出行.出火.拆卸.动土.修造.进人口.入宅.移徙.安床.挂匾.交易.立券.栽种.纳畜.入殓.破土.启攒.安葬.r5a出行.安门.修造.嫁娶.上梁.入宅.祭祀.理发.修饰垣墙.平治道涂.沐浴.整手足甲.扫舍.&4)3置产.安床.开光.求嗣.出行.解除.伐木.出火.拆卸.修造.上梁.起基.入宅.移徙.开市.交易.立券.栽种.牧养.入殓.安葬.除服.成服.3E{安葬.行丧.伐木.作梁.嫁娶.祭祀.祈福.出火.开光.求嗣.出行.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.动土.,2'C诸事不宜.祭祀.解除.余事勿取.1E安葬.出行.祈福.栽种.求嗣.嫁娶.纳采.合帐.裁衣.冠笄.伐木.作梁.修造.动土.起基.竖柱.上梁.安门.作灶.筑堤.造畜椆栖.0E{安葬.开市.交易.立券.嫁娶.开光.祭祀.祈福.求嗣.出行.解除.伐木.入宅.移徙.安床.出火.拆卸.修造.上梁.栽种.移柩.,/'C诸事不宜.祭祀.栽种.余事勿取.J.)}嫁娶.开光.开光.求医.治病.动土.上梁.入殓.破土.安葬.J-)}开光.开市.嫁娶.订盟.纳采.祭祀.祈福.入殓.破土.安葬.,''诸事不宜.诸事不宜.R+) 开市.安葬.订盟.纳采.出行.祭祀.祈福.修造.动土.移徙.入宅.`*5作灶.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.;))_行丧.安葬.嫁娶.祭祀.沐浴.扫舍.修饰垣墙.Y()动土.破土.嫁娶.纳采.出行.求医.治病.开市.移徙.入宅.启攒.安葬.M'7u移徙.入宅.安葬.订盟.纳采.出行.祈福.斋醮.安床.会亲友.<&7S上梁.动土.破土.祭祀.入殓.移柩.启攒.安葬.5%)S嫁娶.安葬.裁衣.作灶.移徙.入宅.纳畜.Y$)开市.安门.嫁娶.纳采.祭祀.祈福.求医.治病.出行.动土.移徙.入宅.@#'k诸事不宜.祭祀.捕捉.取渔.修饰垣墙.余事勿取." #订盟.纳采.会亲友.进人口.雕刻.拆卸.修造.动土.起基.开市.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.!EI开市.安门.掘井.作灶.嫁娶.出行.安机械.祭祀.塑绘.开光.治病.经络.安床.结网.塞穴.破土.入殓.B )m嫁娶.入宅.破屋.坏垣.求医.治病.畋猎.余事勿取.^S{开市.交易.嫁娶.安葬.行丧.祭祀.沐浴.捕捉.结网.畋猎.取渔.余事勿取.dE开市.伐木.作梁.作灶.安机械.移徙.入宅.出行.祭祀.祈福.斋醮.纳采.订盟.安香.出火.解除.会亲友.修造.动土.拆卸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.uK/斋醮.出行.治病.合寿木.祭祀.沐浴.理发.嫁娶.作灶.整手足甲.扫舍.修饰垣墙.平治道涂.{} 嫁娶.移徙.伐木.作梁.安床.祭祀.祈福.造屋.沐浴.平治道涂.扫舍.入殓.破土.安葬.除服.成服.Ba5塞穴.上梁.动土.伐木.安葬.词讼.进人口.会亲友.E嫁娶.安床.探病.作灶.开市.交易.立券.挂匾.开光.出行.拆卸.进人口.入宅.移柩.动土.安门.上梁.栽种.破土.修坟.安葬.,'C诸事不宜.解除.扫舍.余事勿取.S7{开光.掘井.开仓.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.动土.入宅.移徙.安床.作灶.塞穴.栽种.破土.安葬.R'纳畜.入宅.移徙.安葬.探病.伐木.上梁.安门.入殓.动土.嫁娶.祭祀.祈福.求嗣.开光.开市.交易.立券.安床.出行.拆卸.,Q'C诸事不宜.结网.解除.余事勿取."Pas入宅.移徙.理发.出火.嫁娶.出行.开市.交易.立券.祭祀.祈福.开光.伐木.进人口.安床.拆卸.修造.动土.栽种.破土.移柩.安葬. &k r [  Q l*>W&wm~%O M嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.动土.上梁.出火.进人口.入宅.移徙.安床.栽种.纳畜.牧养.竖柱.安门.修造.解除.会亲友.:N'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.*MC嫁娶.上梁.修造.拆卸.架马.入宅.伐木.动土.出火.开柱眼.祭祀.开光.出行.解除.塑绘.裁衣.入殓.移柩.破土.启攒.安葬.除服.成服."L G嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.安门.开市.交易.立券.挂匾.栽种.破土.安葬.]K'#诸事不宜.沐浴.平治道涂.扫舍.入殓.移柩.破土.启攒.安葬.余事勿取.EJ)s开市.安葬.订盟.纳采.会亲友.安床.作灶.造畜椆栖.`I)'移徙.入宅.嫁娶.订盟.纳采.出行.祭祀.祈福.斋醮.动土.上梁.破土.安葬.,H'C诸事不宜.塞穴.结网.余事勿取.YG)赴任.捕捉.嫁娶.裁衣.祭祀.出行.安床.作灶.移徙.入宅.破土.安葬.CF)o嫁娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.'s诸事不宜.进人口.牧养.置产.塞穴.结网.余事勿取.= 1开光.出行.纳采.嫁娶.伐木.架马.出火.拆卸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除服.成服.移柩.安葬.4<)Q破土.安葬.塞穴.断蚁.结网.余事勿取.;''余事勿取.余事勿取.}:S7开市.入宅.探病.出火.造屋.嫁娶.祭祀.祈福.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.针灸.理发.会亲友.起基.修造.动土.竖柱.定磉.安床.拆卸.纳畜.牧养.放水.破土.除服.成服.修坟.立碑.P9aQ开市.动土.祭祀.斋醮.安葬.探病.栽种.捕捉.畋猎.余事勿取.,8'C诸事不宜.解除.破屋.余事勿取.7 +祭祀.祈福.求嗣.开光.解除.纳采.冠笄.出火.拆卸.进人口.安床.动土.上梁.造庙.掘井.开池.入殓.移柩.安葬.破土.,6'C诸事不宜.塞穴.扫舍.余事勿取.:5'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.n}Q动土.破土.纳财.掘井.挂匾.开市.伐木.交易.祭祀.祈福.求嗣.开光.解除.出火.拆卸.入宅.安床.修造.安门.纳畜.启攒.安葬.m 进人口.出行.嫁娶.置产.安床.赴任.安葬.作灶.祭祀.祈福.开光.解除.动土.纳财.交易.纳畜.扫舍.Fl'w诸事不宜.祭祀.平治道涂.解除.修饰垣墙.余事勿取.k}I谢土.祈福.上梁.作灶.斋醮.修造.入宅.安门.纳采.嫁娶.开光.出行.理发.会亲友.开市.安床.栽种.牧养.入殓.移柩.启攒.%j}]嫁娶.纳财.安葬.出行.开市.立券.作灶.栽种.祭祀.祈福.开光.求嗣.解除.伐木.出火.入宅.移徙.安床.拆卸.修造.动土.造畜椆栖.Ii'}诸事不宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿取.|h7Q词讼.开光.开市.嫁娶.出行.合帐.冠笄.安床.除服.成服.作灶.交易.立券.入殓.移柩.破土.安葬.gaW祈福.入殓.祭祀.作灶.安葬.探病.嫁娶.开光.出行.出火.拆卸.进人口.开市.立券.交易.挂匾.入宅.移徙.安床.栽种.,f'C诸事不宜.解除.坏垣.余事勿取.e' 诸事不宜..d77嫁娶.入宅.安葬.沐浴.结网.取渔. ]<W 4 ~ L { d 5s:]:c'_诸事不宜.祭祀.求医.治病.解除.余事勿取.Jb7o开市.动土.破土.嫁娶.纳采.祭祀.祈福.出行.移徙.求医.Ja7o嫁娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4`)Q嫁娶.安葬.祭祀.作灶.掘井.平治道涂.F_7g嫁娶.动土.破土.祭祀.会亲友.开市.安床.启攒.安葬.Q^7}嫁娶.开市.安葬.纳采.开光.求医.治病.动土.上梁.移徙.入宅.j]S掘井.动土.破土.安葬.开光.祭祀.进人口.嫁娶.安床.解除.冠笄.出行.裁衣.扫舍.\Ek掘井.安门.嫁娶.纳采.祭祀.祈福.裁衣.合帐.安床.入殓.除服.成服.移柩.破土.启攒.安葬.谢土.立碑.造畜椆栖.%[E入殓.安葬.入宅.安床.订盟.纳采.嫁娶.进人口.会亲友.交易.立券.动土.除服.谢土.移柩.破土.启攒.赴任.出行.开市.纳财.栽种.:ZQ5造庙.嫁娶.安床.余事勿取.祭祀.余事勿取.YEW出火.入宅.安葬.伐木.祭祀.塑绘.开光.订盟.纳采.冠笄.裁衣.安机械.拆卸.修造.动土.安床.经络.开市.X''诸事不宜.诸事不宜.fWS 嫁娶.开市.交易.入宅.安葬.祭祀.沐浴.破屋.坏垣.求医.治病.解除.余事勿取.VE 开市.动土.掘井.开池.祭祀.祈福.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.取渔.解除.安葬.启攒.谢土.入殓.@UKE入宅.动土.开仓.出货财.造车器.祭祀.祈福.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.合脊.起基.定磉.安门.纳畜.安葬.开生坟.立碑.谢土.斋醮.OTS]嫁娶.安葬.动土.安床.治病.祭祀.作灶.平治道涂.余事勿取.EG作灶.掘井.动土.栽种.祈福.开光.塑绘.酬神.订盟.纳采.裁衣.安床.开市.立券.入殓.除服.成服.移柩.启攒.安葬.立碑.赴任.会亲友.出行.交易.竖柱. z: " { W y Ui8"S6z~S_作灶.开光.嫁娶.开市.入宅.订盟.纳采.冠笄.拆卸.修造.动土.安床.入殓.除服.成服.移柩.安葬.破土.启攒.造仓.W})栽种.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.嫁娶.裁衣.动土.起基.出火.拆卸.移徙.入宅.安香.修造.竖柱.上梁.纳畜.牧养.祈福.求嗣.解除.伐木.定磉.造屋.安门.C|SE嫁娶.入宅.移徙.作灶.安葬.祭祀.沐浴.捕捉.栽种.4{E3造庙.嫁娶.伐木.安葬.祭祀.开光.塑绘.订盟.纳采.合帐.冠笄.拆卸.动土.起基.上梁.入宅.安香.开市.立券.纳财.沐浴.求嗣.出火.竖柱.安门.z)作梁.造庙.祭祀.出行.订盟.纳采.裁衣.合帐.冠笄.进人口.动土.安床.作灶.入殓.移柩.安葬.破土.结网.取渔.畋猎.y')诸事不宜.破屋.坏垣.xE 安床.嫁娶.作灶.入宅.祭祀.解除.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.谢土.沐浴.扫舍.捕捉.取渔.结网.畋猎.理发.Iw赴任.祈福.求嗣.开光.塑绘.斋醮.订盟.纳采.嫁娶.拆卸.安床.入宅.安香.移柩.修坟.安葬.谢土.栽种.解除.冠笄.裁衣.移徙.修造.动土.竖柱.放水.启攒.立碑.XvSo动土.作灶.入宅.开光.安床.祭祀.嫁娶.纳婿.除服.成服.入殓.移柩.3uE1作灶.出行.入宅.安葬.塑绘.开光.订盟.纳采.裁衣.合帐.冠笄.安机械.会亲友.纳财.开市.立券.交易.安床.竖柱.上梁.结网.栽种.解除.经络.,t'C诸事不宜.扫舍.塞穴.余事勿取.tsa栽种.动土.安葬.掘井.修坟.探病.祭祀.会亲友.立券.交易.裁衣.合帐.嫁娶.冠笄.进人口.3rS#祭祀.嫁娶.出行.上梁.掘井.裁衣.经络.伐木.开柱眼.拆卸.修造.动土.上梁.合脊.合寿木.入殓.除服.成服.移柩.破土.安葬.启攒.修坟.立碑.4qS%纳采.动土.开市.交易.安门.开光.祈福.求嗣.出行.解除.伐木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除服.成服.移柩.谢土.纳畜.牧养.poC入宅.作灶.伐木.安葬.出火.出行.纳畜.嫁娶.开光.祈福.求嗣.解除.动土.安床.栽种.开池.掘井.祭祀.破土.启攒."o}W嫁娶.安葬.破土.作梁.纳畜.牧养.行丧.作灶.移徙.祭祀.开光.祈福.出行.解除.进人口.雇庸.安床.动土.起基.上梁.安门.解除.Bn'o诸事不宜.结网.入殓.除服.成服.移柩.安葬.破土.m7 嫁娶.作灶.安床.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.入宅.移徙.上梁.挂匾.开池.入殓.安葬.破土.启攒.;%'a余事勿取.祭祀.解除.治病.破屋.坏垣.扫舍.$E{开市.立券.理发.作灶.嫁娶.祭祀.祈福.出行.解除.出火.拆卸.动土.入宅.移徙.安床.上梁.栽种.纳畜.破土.启攒.安葬.#')诸事不宜.解除.沐浴.f"C栽种.出行.祈福.行丧.纳畜.安葬.安门.伐木.作梁.牧养.作灶.解除.平治道涂.!5入宅.移徙.出火.分居.安香.作灶.开市.交易.立券.安葬.动土.伐木.嫁娶.开光.求嗣.会亲友.安床.牧养.塑绘.针灸. )掘井.词讼.嫁娶.安床.开光.出行.祭祀.动土.出火.解除.会亲友.开市.交易.立券.挂匾.入宅.移徙.拆卸.破土.启攒.安葬.oQ嫁娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.裁衣.竖柱.上梁.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.启攒.u o开光.掘井.针灸.出行.嫁娶.入宅.移徙.作灶.动土.祭祀.祈福.求嗣.入殓.启攒.安葬.移柩.E 入殓.安葬.作灶.入宅.祭祀.沐浴.祈福.求嗣.斋醮.订盟.纳采.裁衣.冠笄.开市.立券.交易.纳财.沐浴.除服.谢土.出行.移柩.>EG安葬.作灶.伐木.作梁.祭祀.求嗣.沐浴.酬神.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造仓.开池.经络.纳财.开市.立券.交易.结网.取渔.纳畜.捕捉.XE}嫁娶.上梁.入宅.作灶.取渔.入殓.除服.成服.移柩.破土.安葬.立碑. Uu= m ] A Y0 &[r_6nJ;)]作灶.安床.祈福.求嗣.斋醮.塑绘.开光.订盟.纳采.嫁娶.动土.入宅.安香.移柩.安葬.谢土.出行.沐浴.修造.竖柱.上梁.纳财.破土.解除.安门.放水.')诸事不宜.求医.破屋.BEO栽种.动土.开市.作灶.祭祀.祈福.酬神.订盟.纳采.冠笄.裁衣.合帐.嫁娶.安床.移徙.入宅.安香.入殓.移柩.启攒.安葬.解除.取渔.捕捉.伐木.安门.出火.]E造屋.栽种.安葬.作灶.塑绘.开光.酬神.斋醮.订盟.纳采.裁衣.合帐.拆卸.动土.上梁.安床.安香.造庙.挂匾.会亲友.进人口.出行.修造.纳财.伐木.放水.出火.纳畜.沐浴.安门.A_5祭祀.祈福.安葬.安门.余事勿取.作灶.平治道涂.XE}斋醮.作灶.安床.安葬.安床.合帐.入宅.问名.纳采.求嗣.祭祀.开仓.0U掘井.祭祀.斋醮.裁衣.合帐.冠笄.订盟.纳采.嫁娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲友.出行.祈福.求嗣.立碑.上梁.放水.[Su祭祀.祈福.移徙.嫁娶.入宅.裁衣.合帐.入殓.除服.成服.会亲友.纳财.EQ出行.嫁娶.入宅.动土.祭祀.祈福.求嗣.酬神.裁衣.安床.立券.交易.入殓.除服.成服.移柩.谢土.启攒.EEU安葬.上梁.入宅.作灶.祭祀.沐浴.开光.塑绘.祈福.求嗣.订盟.纳采.冠笄.裁衣.嫁娶.动土.除服.成服.移柩.破土.启攒.出行.安碓磑.放水.开市.立券.交易.&S 伐木.作灶.安葬.取渔.入宅.塑绘.开光.祈福.求嗣.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I'}余事勿取.祭祀.结网.入殓.除服.成服.移柩.安葬.破土.&E安床.栽种.治病.作灶.祭祀.冠笄.嫁娶.拆卸.修造.动土.起基.上梁.造屋.入宅.开市.开池.塞穴.入殓.除服.成服.移柩.安葬.破土._ 7入宅.开市.安葬.祭祀.沐浴.求医.治病.扫舍.破屋.坏垣.解除.余事勿取. S]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.嫁娶.会亲友.进人口.牧养.捕捉.入殓.移柩.安葬.启攒. }-掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.开光.入宅.移徙.安床.修造.动土.进人口. }A掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.动土.会亲友.起基.造仓.纳畜.牧养.作厕.进人口.F 'w余事勿取.祭祀.解除.修饰垣墙.平治道涂.余事勿取.C'修造.上梁.入宅.祈福.探病.掘井.动土.安门.安葬.作灶.开市.交易.立券.纳财.开池.补垣.嫁娶.纳采.纳畜.取渔.安床.BE 嫁娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.伐木.作梁.出火.入宅.移徙.安床.拆卸.动土.上梁.栽种.纳畜.安葬.=A'e余事勿取.解除.扫舍.祭祀.教牛马.余事勿取.@Ek作灶.掘井.嫁娶.入宅.祭祀.祈福.斋醮.沐浴.安床.安机械.造车器.入殓.移柩.启攒.安葬.立碑.合帐.经络.交易. ?E]栽种.嫁娶.入殓.安葬.祭祀.出行.沐浴.裁衣.祈福.斋醮.订盟.纳采.嫁娶.安机械.开市.立券.安碓磑.纳畜.|>EC开仓.造屋.安葬.安床.祭祀.祈福.斋醮.塑绘.开光.除服.成服.入殓.作灶.嫁娶.捕捉.畋猎.纳财.Q=) 破土.伐木.入殓.除服.成服.移柩.启攒.安葬.立碑.余事勿取.u<)Q入宅.安床.塑绘.开光.出行.订盟.纳采.除服.成服.嫁娶.纳婿.入殓.移柩.启攒.安葬.立碑.3;'Q诸事不宜.解除.破屋.坏垣.余事勿取.Z:E造屋.开市.作灶.入宅.祭祀.会亲友.出行.订盟.纳采.沐浴.修造.动土.祈福.斋醮.嫁娶.拆卸.安床.入殓.移柩.安葬.谢土.赴任.裁衣.竖柱.上梁.伐木.捕捉.栽种.破土.安门.%9E出行.治病.安葬.开市.会亲友.纳采.进人口.修造.动土.竖柱.上梁.祭祀.开光.塑绘.祈福.斋醮.嫁娶.安床.移徙.入宅.安香.纳畜. %  0 *  @Sy@njr*U8Ew嫁娶.移徙.入宅.开光.修饰垣墙.平治道涂.入殓.移柩.余事勿取.{7EA作灶.掘井.谢土.入宅.出行.嫁娶.订盟.纳采.入殓.安床.启攒.安葬.祭祀.裁衣.会亲友.进人口.B6EO作灶.祭祀.上梁.出行.沐浴.解除.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.移徙.入宅.除服.成服.移柩.破土.启攒.安葬.扫舍.修坟.伐木.纳财.交易.立券.,5'C诸事不宜.祭祀.解除.余事勿取.A4EM开仓.嫁娶.移徙.入宅.祭祀.沐浴.祈福.斋醮.订盟.纳采.裁衣.拆卸.起基.竖柱.上梁.安床.入殓.除服.成服.移柩.启攒.挂匾.求嗣.出行.合帐.造畜椆栖.b3E嫁娶.入殓.安葬.出行.塑绘.开光.沐浴.冠笄.会亲友.作灶.放水.造畜椆栖.;2)_开市.安床.祭祀.作灶.入殓.除服.余事勿取.X1E}开市.伐木.嫁娶.作梁.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.L0SU祈福.嫁娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出火.塑绘.裁衣.会亲友.入学.拆卸.扫舍.造仓.挂匾.掘井.开池.结网.栽种.纳畜.破土.修坟.立碑.安葬.入殓.4/7C嫁娶.开市.安葬.破屋.坏垣.余事勿取..E{造屋.开市.动土.破土.嫁娶.祭祀.沐浴.裁衣.出行.理发.移徙.捕捉.畋猎.放水.入宅.除服.成服.启攒.安葬.移柩.入殓.7-)W嫁娶.安葬.祭祀.安碓磑.结网.余事勿取.s,a移徙.入宅.造庙.作灶.治病.安葬.祭祀.冠笄.嫁娶.会亲友.进人口.裁衣.结网.平治道涂.O+Ei入宅.开光.开市.动土.嫁娶.订盟.纳采.祭祀.祈福.求嗣.会亲友.解除.出行.入学.纳财.开市.交易.立券.习艺.经络.安床.开仓.出货财.纳畜.安葬.启攒.修坟.入殓.|*o探病.祭祀.出行.上梁.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲友.解除.求医.治病.入学.安床.安门.安香.出火.拆卸.扫舍.入宅.挂匾.开生坟.合寿木.破土.修坟.启攒.入殓.)a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;('a余事勿取.安葬.启攒.移柩.入殓.除服.成服. 'aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#&5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m%37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.ՠS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ՠ~a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wՠ}a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ՠ|S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rՠ{o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ՠzSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UՠyoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬. O0b Z w ? %LUt;~BF)OTՠxKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iՠw';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ՠv U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vՠu[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ՠt会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ՠsoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ՠrS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ՠq)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ՠpKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ՠoE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ՠnSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qՠma嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SՠlSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ՠkS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ՠjaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ՠi5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ՠh伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ՠg'C诸事不宜.解除.扫舍.余事勿取.ZՠfSq嫁娶.开市.入宅.出火.移徙.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.会亲友.解除.入学.纳财.交易.立券.经络.起基.动土.定磉.开池.栽种.纳畜.牧养.破土.入殓.立碑.安葬.LՠeEc造屋.造船.动土.破土.嫁娶.纳采.订盟.祭祀.冠笄.裁衣.伐木.作梁.架马.定磉.开柱眼.作灶.移徙.安床.畋猎.结网.开池.作厕.除服.成服.启攒.入殓.移柩.安葬.4ՠd)Q嫁娶.安葬.破屋.坏垣.祭祀.余事勿取.IՠcE]开市.造庙.动土.破土.嫁娶.订盟.纳采.祭祀.祈福.塑绘.开光.移徙.安床.伐木.作梁.捕捉.畋猎.结网.求医.治病.解除.安葬.除服.成服.移柩.入殓.立碑.谢土.HՠbSM嫁娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈福.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上梁.安门.安香.出火.教牛马.会亲友.破土.JՠaE_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出火.修饰垣墙.平治道涂.会亲友.出行.开池.作厕. [z E e |  O>p_,^ՠS{嫁娶.开市.祈福.斋醮.安葬.塑绘.会亲友.安机械.塞穴.结网.裁衣.经络._ՠam开市.纳采.造庙.安床.开渠.安葬.嫁娶.造车器.出行.会亲友.移徙.入宅.修造.动土.雕刻.开光.安香.出火.理发.会亲友.造屋.合脊.起基.归岫.安门.拆卸.扫舍.栽种.造畜椆栖.IՠSQ开市.动土.破土.行丧.安葬.祭祀.沐浴.出行.余事勿取.nՠS嫁娶.入宅.安床.掘井.开光.祭祀.理发.置产.塞穴.除服.成服.移柩.入殓.破土.安葬.;ՠS3移徙.入宅.出火.入殓.安葬.开市.纳财.出行.祭祀.祈福.求嗣.斋醮.问名.入学.起基.定磉.置产.开渠.掘井.拆卸.栽种.纳畜.牧养.动土.破土.启攒._ՠoa嫁娶.纳采.订盟.安床.动土.破土.安葬.祭祀.沐浴.捕捉.畋猎.结网.扫舍.tՠS%嫁娶.移徙.出火.开市.入宅.订盟.纳采.会亲友.祭祀.祈福.修造.动土.安机械.破土.安葬.{ՠS3祭祀.嫁娶.入宅.修造.动土.祭祀.扫舍.破土.安葬.除服.成服.启攒.移柩.入殓.立碑.余事勿取.Iՠ){嫁娶.安葬.祭祀.解除.破屋.坏垣.求医.治病.余事勿取.ՠam破土.动土.安门.作灶.开市.交易.嫁娶.纳采.订盟.祭祀.开光.出行.解除.伐木.出火.入宅.移徙.拆卸.修造.栽种.安葬.入殓.EՠEU置产.掘井.词讼.栽种.嫁娶.纳采.订盟.祭祀.斋醮.开光.安香.出火.出行.出火.拆卸.动土.祈福.进人口.纳财.交易.立券.移徙.安床.修造.安葬.除服.成服.Qՠ %造庙.谢土.作灶.作梁.伐木.安葬.行丧.修坟.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.裁衣.会亲友.拆卸.进人口.安香.经络.出货财.修饰垣墙.平治道涂.ՠ祈福.谢土.安葬.上梁.作灶.开市.嫁娶.出行.入宅.动土.祭祀.塑绘.理发.会亲友.牧养.开池.造畜椆栖.畋猎.结网.Oՠ 7w作灶.经络.安床.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.进人口.开市.立券.挂匾.入宅.移徙.安门.栽种.动土.求医.治病.会亲友.起基.修造.造屋.安葬.Vՠ Sk开市.动土.破土.嫁娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿取.fՠ S 置产.造船.开光.掘井.作灶.合帐.裁衣.嫁娶.安床.入殓.移柩.破土.造畜椆栖.?ՠ m伐木.上梁.修造.入殓.理发.会亲友.入宅.安门.安葬.作灶.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆卸.破土.eՠ a{嫁娶.入宅.开市.安床.破土.修坟.沐浴.扫舍.捕捉.畋猎.解除.塞穴.余事勿取. ՠgC嫁娶.进人口.入宅.移徙.出火.出行.祭祀.祈福.求嗣.开光.解除.伐木.拆卸.修造.栽种.纳畜.安葬.修坟.立碑.cՠY}上梁.开仓.出货财.造屋.造船.纳采.订盟.嫁娶.祭祀.祈福.雕刻.移徙.开市.入宅.出行.动土.会亲友.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;ՠ)_嫁娶.安葬.破屋.坏垣.求医.治病.余事勿取.ՠQs嫁娶.动土.造船.开池.掘井.出行.修造.入宅.上梁.移徙.安葬.破土.作灶.开市.祭祀.理发.针灸.解除.进人口.整手足甲.ՠ7{栽种.掘井.置产.嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.开市.交易.立券.挂匾.伐木.入宅.移徙.安床.安葬.ՠa_祈福.祭祀.伐木.掘井.作灶.谢土.嫁娶.开光.出行.出火.拆卸.修造.动土.入宅.移徙.安床.上梁.开市.交易.立券.栽种.\ՠE嫁娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治道涂.余事勿取.{ՠS3移徙.入宅.出行.祈福.嫁娶.沐浴.理发.冠笄.安床.开市.立券.会亲友.交易.纳财.结网.教牛马.ՠE 嫁娶.动土.破土.修坟.出行.造车器.造畜椆栖.解除.冠笄.裁衣.作梁.雕刻.会亲友.移徙.入宅.安机械.造畜椆栖.开市.扫舍. _, N ? M Qw3e-e~hE՟SG造庙.造船.动土.破土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.置产.求医.治病.开市.交易.立券.会亲友.移徙.竖柱.上梁.造屋.合脊.安门.放水.捕捉.纳畜. ՟~gA开光.嫁娶.会亲友.栽种.针灸.安葬.冠笄.祭祀.沐浴.作灶.理发.整手足甲.扫舍.补垣.塞穴.入殓.破土.启攒.՟}g'开市.开仓.出货财.安床.安门.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.求医.治病.出火.移徙.入宅.P՟7Em动土.破土.开市.安葬.祭祀.作灶.纳财.捕捉.畋猎.余事勿取. ՟6YO上梁.开光.造屋.架马.合寿木.造车器.嫁娶.订盟.纳采.会亲友.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j՟5S嫁娶.开市.入宅.祈福.安葬.订盟.纳采.会亲友.交易.立券.纳财.栽种.纳畜.牧养.B՟4)m开市.嫁娶.祭祀.沐浴.解除.破屋.坏垣.余事勿取.E՟3KO开市.破土.掘井.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.安香.出火.造庙.移徙.出行.入宅.造庙.起基.竖柱.上梁.安床.纳畜.捕捉.纳婿.安葬.B՟2SC开市.交易.祭祀.入宅.安葬.捕捉.畋猎.余事勿取.3՟1)O嫁娶.开市.祭祀.平治道涂.余事勿取.H՟0SM入宅.上梁.斋醮.出火.谢土.纳采.订盟.开市.交易.立券.会亲友.纳畜.牧养.问名.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.启攒.入殓.除服.成服.՟/o]造庙.嫁娶.掘井.栽种.造桥.作灶.动土.祭祀.开光.出行.解除.伐木.作梁.出火.拆卸.入宅.移徙.安床.修造.造畜椆栖.扫舍.՟.1出货财.开仓.动土.破土.安葬.行丧.伐木.开渠.栽种.祭祀.造车器.出行.修造.上梁.造屋.安门.安床.造畜椆栖.教牛马.՟-}C开市.出行.栽种.置产.词讼.安门.掘井.开光.嫁娶.裁衣.冠笄.合帐.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.V՟,Si安门.安床.裁衣.入宅.安葬.祭祀.祈福.求嗣.斋醮.开光.出行.嫁娶.求医.治病.动土.破土.入学.起基.扫舍.竖柱.上梁.开仓.出货财.置产.栽种.牧养.开生坟.谢土.立碑.[՟+Su嫁娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲友.纳财.理发.捕捉.v՟*a探病.纳畜.伐木.起基.作梁.造屋.嫁娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈福.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆卸.修造.动土.栽种.安葬.破土.启攒.除服.成服.入殓.立碑.՟)oO祈福.斋醮.纳采.订盟.嫁娶.入宅.安葬.祭祀.求嗣.冠笄.进人口.会亲友.安门.安床.经络.纳财.牧养.畋猎.放水.割蜜.P՟(S_嫁娶.入宅.上梁.出行.安葬.祭祀.沐浴.破屋.坏垣.余事勿取.՟'}Q入宅.移徙.掘井.理发.伐木.交易.开市.作灶.嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.修造.动土.上梁.安床.纳畜.入殓.破土.e՟&a{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.启攒.安葬.除服.成服.余事勿取.q՟%a嫁娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治道涂.造畜椆栖.余事勿取.E՟$'q开市.入宅.出行.嫁娶.修坟.祈福.动土.入宅.安门.谢土.上梁.纳采.订盟.会亲友.沐浴.理发.裁衣.冠笄.安床.除服.成服.启攒.移柩.安葬.会亲友.开生坟.՟#}A嫁娶.安葬.行丧.词讼.造桥.作灶.破土.动土.祭祀.开光.出行.解除.理发.伐木.出火.拆卸.上梁.合脊.安床.造畜椆栖.՟"a]伐木.行丧.破土.嫁娶.安葬.开渠.祭祀.祈福.求嗣.开光.出行.解除.上梁.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.՟!)开光.栽种.嫁娶.祭祀.祈福.求嗣.动土.安床.扫舍.入殓.移柩.破土.启攒.安葬.作灶.整手足甲.补垣.除服.成服.՟ )安床.安葬.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.进人口.开市.交易.立券.挂匾.纳财.入宅.移徙.栽种.破土.谢土.  m  X  J : /RQ4 PDx՟a嫁娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲友.捕捉.畋猎.启攒.除服.成服.移柩.J՟o7开光.动土.破土.开市.修造.入宅.安门.祭祀.嫁娶.捕捉.7՟=A行丧.安葬.合寿木.开光.求嗣.雕刻.嫁娶.订盟.纳采.出火.拆卸.修造.动土.起基.上梁.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.4՟a嫁娶.造庙.造桥.造船.作灶.安葬.订盟.纳采.祭祀.祈福.安香.出火.修造.动土.上梁.安门.起基.竖柱.上梁.定磉.开池.移徙.入宅.立券.破土.%՟5'探病.余事勿取.余事勿取.m՟o}祭祀.嫁娶.安床.开市.入宅.探病.上梁.沐浴.捕捉.入殓.除服.成服.破土.启攒.安葬.%՟S纳采.订盟.架马.词讼.开渠.嫁娶.造车器.安机械.祭祀.祈福.开光.安香.出火.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c՞Raw斋醮.嫁娶.移徙.出行.上梁.入宅.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.\՞QE嫁娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出火.上梁.移徙.u՞Pa针灸.伐木.作梁.造庙.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.?՞Og)嫁娶.入宅.修造.动土.会亲友.破土.祭祀.出行.u՞No 嫁娶.开市.祭祀.祈福.斋醮.纳采.修坟.冠笄.沐浴.出行.修造.动土.移徙.入宅.破土.安葬.՞Mo-开市.祈福.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.取渔.会亲友.入学.移柩.启攒.除服.成服.L՞LYQ嫁娶.开市.造屋.作梁.合寿木.祭祀.冠笄.捕捉.余事勿取.7՞K}安葬.纳畜.出行.行丧.伐木.栽种.造庙.造桥.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.解除.进人口.入宅.移徙.出火.安床.开市.交易.立券.挂匾.S՞JEq开市.开仓.安门.安葬.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.上梁.合脊.放水.掘井.破土.移柩.谢土.除服.成服.;՞I)_移徙.入宅.破屋.坏垣.求医.治病.余事勿取.՞H 5出火.入宅.移徙.祈福.祭祀.安床.开市.嫁娶.探病.开光.解除.拆卸.修造.动土.竖柱.安门.牧养.安葬.修坟.破土.移柩.՞Gu;作灶.出火.进人口.开渠.入宅.移徙.祭祀.开光.祈福.求嗣.斋醮.修造.动土.纳财.造仓.作厕.栽种.牧养.会亲友.U՞FEw嫁娶.入宅.安床.出行.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.0՞Eo斋醮.嫁娶.行丧.动土.作灶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.栽种.进人口.入宅.移徙.安床.开光.出火.拆卸.安门.修造.3՞Da造庙.行丧.安葬.伐木.作灶.造船.嫁娶.纳采.祭祀.解除.出行.修造.动土.开市.上梁.安床.整手足甲.扫舍.求医.治病.起基.定磉.造屋.合脊.P՞CEm动土.破土.置产.掘井.祭祀.出行.沐浴.扫舍.安葬.余事勿取.%՞BS祈福.开光.开市.入宅.动土.嫁娶.冠笄.安机械.解除.纳畜.牧养.沐浴.伐木.架马.作梁.安门.扫舍.合寿木.安葬.启攒.立碑.修坟.e՞Aa{开市.入宅.嫁娶.动土.破土.安葬.祭祀.修坟.除服.成服.启攒.移柩.余事勿取. ՞@ 开仓.出货财.伐木.纳畜.开市.上梁.造屋.破土.启攒.栽种.嫁娶.祭祀.理发.进人口.作灶.移柩.冠笄.会亲友.#՞?5嫁娶.破土.进人口.出行.入宅.移徙.出火.纳畜.词讼.安葬.开市.交易.立券.纳财.挂匾.栽种.祭祀.祈福.开光.拆卸.动土.安床.a՞>S开市.掘井.开渠.造桥.造船.嫁娶.纳采.订盟.祭祀.开光.出行.理发.作梁.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.移徙.拆卸.挂匾.栽种.纳畜.破土.安葬.入殓.除服.成服.:՞='_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.,՞<'C诸事不宜.解除.坏垣.余事勿取. ='g  a E,a:v =|՞;S5嫁娶.纳采.订盟.开市.入宅.祭祀.捕捉.畋猎.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.启攒.I՞:E]开市.立券.纳财.作灶.纳采.订盟.嫁娶.祭祀.祈福.普渡.开光.安香.出火.移徙.入宅.竖柱.修造.动土.竖柱.上梁.起基.造屋.安门.造庙.造桥.破土.启攒.安葬.g՞9E嫁娶.安门.动土.安葬.出行.沐浴.订盟.纳采.裁衣.竖柱.上梁.移徙.纳畜.牧养. ՞8SO祈福.开市.动土.行丧.安葬.塑绘.冠笄.嫁娶.会亲友.进人口.经络.裁衣.栽种.纳畜.牧养.补垣.塞穴.捕捉.{՞7S3嫁娶.出行.入宅.开市.安门.祭祀.沐浴.理发.整手足甲.冠笄.解除.入殓.移柩.破土.启攒.安葬.u՞6a开市.动土.破土.安床.开仓.上梁.嫁娶.冠笄.祭祀.沐浴.普渡.出行.纳财.扫舍.纳畜.赴任.՞5a5动土.破土.掘井.开光.上梁.词讼.嫁娶.普渡.祭祀.祈福.补垣.塞穴.断蚁.筑堤.入殓.除服.成服.安葬.O՝oS[出火.入宅.造屋.安门.安葬.嫁娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲友.开市.纳财.修造.动土.竖柱.上梁.开光.开仓.出货财.纳畜.牧养.开池.破土.启攒.՝nS]掘井.出行.破土.行丧.安葬.嫁娶.订盟.纳采.作灶.冠笄.裁衣.会亲友.纳畜.牧养.安机械.开市.立券.纳财.安床.>՝ma+纳采.订盟.经络.行丧.安葬.探病.嫁娶.祭祀.祈福.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.捕捉.畋猎.结网.՝lSC动土.破土.嫁娶.掘井.安床.订盟.纳采.祭祀.祈福.安香.出火.开市.立券.入宅.挂匾.造桥.启攒.安葬.4՝k)Q斋醮.开市.沐浴.破屋.坏垣.余事勿取.`՝jE 开市.交易.入宅.嫁娶.祭祀.普渡.捕捉.解除.结网.畋猎.入殓.破土.安葬.E՝iSG开市.立券.置产.作灶.造桥.嫁娶.纳采.订盟.祭祀.祈福.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.定磉.安门.安葬.破土.r՝h}y嫁娶.栽种.祈福.造桥.安葬.安门.伐木.作梁.祭祀.理发.作灶.沐浴.修饰垣墙.平治道涂.՝g-开市.入宅.动土.破土.安葬.作灶.上梁.安床.开仓.祈福.沐浴.理发.会亲友.塑绘.开光.栽种.牧养.嫁娶.经络.补垣.塞穴.?՝fm出火.嫁娶.开光.进人口.出行.词讼.开市.入宅.移徙.赴任.解除.祭祀.祈福.求嗣.修造.动土.竖柱.上梁.安床.纳畜.造屋.合脊.起基.入殓.破土.安葬.&՝ea{栽种.掘井.动土.安床.破土.置产.嫁娶.纳采.订盟.祭祀.祈福.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上梁.纳畜.入殓.安葬.启攒.%՝day嫁娶.入宅.斋醮.开光.针灸.掘井.祭祀.出行.作梁.出火.拆卸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.*՝cI入宅.上梁.入殓.造屋.探病.作灶.安门.安葬.纳畜.伐木.嫁娶.纳采.订盟.开光.祭祀.出行.理发.动土.安床.放水.开渠.栽种.进人口.:՝bo行丧.安葬.出行.作梁.纳畜.伐木.造桥.嫁娶.祭祀.祈福.求嗣.裁衣.冠笄.经络.修造.进人口.安床.动土.竖柱.上梁.移徙.交易.立券.栽种.会亲友.V՝aEw入宅.嫁娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈福.求嗣.开光.普渡.出行.出火.拆卸.修造.动土.进人口.开市.交易.立券.移徙.安床.栽种.上梁.纳畜.破土.移柩.安葬.4՝`a掘井.理发.作灶.动土.破土.开池.嫁娶.开光.祭祀.祈福.求嗣.安香.出火.解除.伐木.入宅.移徙.安床.开市.交易.立券.栽种.出火.出行.安葬.P՝_aQ祈福.纳采.订盟.嫁娶.入宅.安葬.破屋.坏垣.治病.余事勿取.f՝^E嫁娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.捕捉.除服.成服.余事勿取.S՝]Sc斋醮.开市.开仓.作灶.造船.嫁娶.祭祀.祈福.求嗣.出火.出行.开光.解除.拆卸.修造.进人口.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除服.成服. .I j   U5nq^z՝\k嫁娶.词讼.治病.置产.作梁.祈福.安葬.栽种.伐木.安门.修饰垣墙.平治道涂.祭祀.沐浴.作灶.I՝[ 伐木.谢土.行丧.祭祀.作灶.动土.破土.安葬.祈福.纳采.订盟.开光.出行.解除.安香.出火.拆卸.入宅.移徙.修造.上梁.安床.栽种.纳畜.会亲友.安机械.经络.#՝ZQ嫁娶.出行.进人口.作灶.入宅.移徙.栽种.赴任.祭祀.解除.拆卸.修造.动土.起基.上梁.安床.安门.开渠.开池.入殓.破土.启攒.}՝Y_+安床.动土.安葬.开生坟.合寿木.祭祀.裁衣.安门.纳财.扫舍.出行.进人口.作灶.纳畜.造畜椆栖.՝X}开光.出行.修造.上梁.入宅.安门.作灶.裁衣.祭祀.动土.筑堤.开池.会亲友.塞穴.入殓.移柩.破土.安葬.W՝Wa_移徙.开市.入宅.嫁娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿取.՝VaO造屋.入宅.作灶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.嫁娶.会亲友.放水.掘井.牧养.纳畜.开渠.安碓磑.b՝US开市.入宅.安床.动土.安葬.祭祀.进人口.纳财.纳畜.牧养.捕捉.余事勿取.A՝TKG嫁娶.开市.栽种.合寿木.祭祀.祈福.斋醮.出行.纳采.订盟.安机械.出火.拆卸.修造.动土.起基.移徙.入宅.造庙.入殓.除服.成服.移柩.破土.安葬.谢土.Z՝SSq祈福.上梁.开仓.掘井.牧养.纳采.订盟.嫁娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲友.安香.出火.拆卸.造屋.起基.安床.作灶.挂匾.安葬.破土.启攒.立碑.入殓.移柩.;՝R)_嫁娶.出行.求医.治病.破屋.坏垣.余事勿取.m՝Qo}出火.嫁娶.入宅.作灶.破土.上梁.动土.沐浴.理发.捕捉.入殓.移柩.破土.启攒.安葬.6՝ S)嫁娶.安葬.行丧.破土.修坟.订盟.纳采.祭祀.祈福.开光.安香.出火.立券.安机械.移徙.入宅.竖柱.上梁.会亲友.安床.拆卸.挂匾.牧养.教牛马.O՝ aO开市.动土.破土.嫁娶.修造.安葬.祭祀.修饰垣墙.平治道涂.L՝ aG斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈福.求嗣.开光.解除.扫舍.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.栽种.纳畜.牧养.n՝S嫁娶.出行.纳采.入宅.作灶.祭祀.沐浴.塑绘.开光.入学.解除.扫舍.治病.开池.牧养.l՝E#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.u՝S'开市.入宅.嫁娶.开光.造屋.祭祀.入殓.除服.成服.移柩.破土.启攒.安葬.塞穴.断蚁.结网.)՝7+出行.安葬.造桥.纳采.订盟.嫁娶.祭祀.沐浴.塑绘.开光.出火.治病.习艺.伐木.造屋.竖柱.上梁.安床.作灶.安碓磑.挂匾.掘井.纳畜.]՝gc安葬.破土.开市.开仓.出货财.启攒.纳采.订盟.嫁娶.移徙.入宅.出行.祭祀.祈福.斋醮.塑绘.开光.安香.出火.会亲友.解除.入学.竖柱.上梁.拆卸.造屋.起基.栽种.牧养.纳畜.K՝YM入宅.开市.掘井.词讼.合寿木.嫁娶.订盟.纳采.祭祀.祈福.斋醮.开光.会亲友.求医.治病.造屋.起基.竖柱.上梁.安门.安碓磑.筑堤.开池.破土.安葬.除服.成服.Y՝So祭祀.祈福.探病.谢土.造桥.嫁娶.开市.立券.移徙.入宅.安机械.会亲友.经络.安门.安床.挂匾.拆卸.开仓.出货财.开池.栽种.纳畜.牧养.破土.安葬.启攒.移柩.入殓.立碑.4՝)Q嫁娶.安葬.破屋.坏垣.解除.余事勿取.&՝A嫁娶.斋醮.开市.出火.入宅.移徙.出行.作灶.安门.伐木.祭祀.祈福.解除.整手足甲.安床.沐浴.入殓.移柩.破土.启攒.安葬.谢土.L՜o9嫁娶.作灶.出火.置产.嫁娶.入宅.安葬.纳采.订盟.会亲友.入学.祭祀.祈福.求嗣.开光.出行.解除.理发.动土.起基.开市.交易.立券.纳财.造仓.栽种.纳畜.牧养. S r  [  B KI`e<՜~EE动土.破土.治病.开渠.祭祀.嫁娶.畋猎.结网.E՜}}上梁.入宅.修造.动土.破土.祭祀.祈福.斋醮.嫁娶.纳采.订盟.造车器.开光.出行.拆卸.起基.安床.除服.成服.开市.交易.立券.栽种.牧养.入殓.移柩.启攒.Q՜|S_开市.入宅.出行.安床.作灶.修造.动土.安机械.祭祀.沐浴.解除.拆卸.治病.作灶.造屋.起基.开池.扫舍.造畜椆栖.开生坟.合寿木.安葬.破土.启攒.移柩.入殓.立碑.,՜{M移徙.入宅.栽种.动土.破土.作灶.安葬.行丧.伐木.上梁.嫁娶.祭祀.出行.裁衣.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|՜za'开光.治病.嫁娶.掘井.破土.安葬.经络.祭祀.沐浴.补垣.塞穴.除服.成服.移柩.入殓.启攒.立碑.B՜yo%移徙.栽种.出行.行丧.破土.安葬.词讼.嫁娶.纳采.订盟.祭祀.祈福.求嗣.纳采.裁衣.冠笄.开光.安床.作梁.修造.动土.作灶.起基.上梁.造屋.纳畜.牧养.՜x开渠.造船.安床.安葬.破土.出行.修坟.掘井.开市.开生坟.祭祀.冠笄.作灶.交易.纳财.栽种.结网.纳畜.牧养.进人口.V՜wKq掘井.伐木.纳畜.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.入殓.破土.谢土.安葬.E՜vSG入宅.移徙.作灶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.嫁娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.栽种.破土.启攒.安葬.立碑.,՜u'C诸事不宜.破屋.坏垣.余事勿取.n՜t a嫁娶.开市.出火.作灶.置产.斋醮.入宅.移徙.安门.解除.祭祀.理发.入殓.安葬.破土.՜soQ嫁娶.栽种.行丧.理发.修坟.行丧.作灶.祭祀.祈福.求嗣.开光.伐木.出火.拆卸.入宅.安床.修造.动土.上梁.挂匾.纳畜.d՜rE开市.伐木.作梁.作灶.安机械.移徙.入宅.出行.祭祀.祈福.斋醮.纳采.订盟.安香.出火.解除.会亲友.修造.动土.拆卸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.u՜qK/斋醮.出行.治病.合寿木.祭祀.沐浴.理发.嫁娶.作灶.整手足甲.扫舍.修饰垣墙.平治道涂.q՜pY安床.出货财.作灶.动土.破土.开光.求嗣.出行.冠笄.嫁娶.伐木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出火.挂匾.起基.修造.开生坟.合寿木.入殓.除服.成服.移柩.安葬.R՜oEo行丧.伐木.作梁.作灶.嫁娶.订盟.纳采.冠笄.会亲友.安机械.造车器.祭祀.出行.纳财.入宅.安香.出火.入学.塑绘.开光.拆卸.起基.修造.动土.牧养.栽种.安门.作厕.<՜nS7斋醮.开渠.上梁.动土.破土.祭祀.交易.纳财.&՜mS 祈福.开光.掘井.开市.安葬.嫁娶.冠笄.修造.动土.作灶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.՜&Sq合帐.上梁.经络.安葬.入殓.祭祀.祈福.求嗣.斋醮.安香.解除.移徙.入宅.会亲友.求医.治病.动土.破土.开生坟.合寿木.B՜%SC开市.安葬.破土.修坟.掘井.祭祀.作灶.余事勿取.՜$a-斋醮.祭祀.移徙.入宅.上梁.嫁娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.՜#Se作灶.理发.造桥.行丧.安葬.嫁娶.安机械.交易.出行.祭祀.祈福.求嗣.斋醮.塑绘.开光.合帐.裁衣.放水.开池.掘井.B՜"7_入宅.嫁娶.移徙.祭祀.沐浴.破屋.坏垣.余事勿取.7՜!K3嫁娶.开市.合寿木.安葬.纳采.订盟.冠笄.祭祀.祈福.斋醮.出行.修造.动土.移徙.入宅.安香.出火.拆卸.造屋.起基.竖柱.上梁.定磉.安门.开池.u՜ S'开光.作灶.造屋.架马.开仓.嫁娶.纳采.祭祀.祈福.出行.立券.移徙.入宅.动土.破土.安葬.q՜S开市.入宅.出行.修造.词讼.祭祀.沐浴.理发.整手足甲.修饰垣墙.平治道涂.余事勿取. g@Z k - * X $2C$'8hg{՜a%嫁娶.安床.作灶.动土.破土.造船.安机械.祭祀.祈福.求嗣.沐浴.解除.纳采.开市.修造.竖柱.上梁.开柱眼.安碓磑.归岫.补垣.塞穴.拆卸.放水.出火.扫舍.开生坟.合寿木.安葬.谢土.启攒.除服.成服.J՜QS安葬.开生坟.合寿木.行丧.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.修造.进人口.入宅.移徙.动土.安床.纳畜.栽种.纳财.交易.立券.挂匾.造畜椆栖.E՜EW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿取.՜am安床.祈福.出行.安葬.行丧.开光.嫁娶.合帐.裁衣.冠笄.伐木.上梁.出火.拆卸.移徙.修造.动土.安门.纳财.筑堤.栽种.塞穴.7՜E9行丧.置产.入宅.安葬.嫁娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈福.求嗣.出行.解除.伐木.出火.入宅.拆卸.修造.动土.上梁.安床.栽种.破土.;՜EC入宅.出行.掘井.安葬.祭祀.结网.余事勿取.՜S_作灶.出火.祭祀.嫁娶.入宅.开市.交易.立券.挂匾.开光.解除.拆卸.动土.安床.修造.上梁.置产.栽种.破土.安葬.՜)k出火.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.E՜KQ移徙.入宅.开仓.出货财.祭祀.破屋.坏垣.余事勿取.^՜S{嫁娶.开市.安葬.启攒.行丧.畋猎.捕捉.结网.取渔.祭祀.沐浴.余事勿取.L՜7q动土.掘井.破土.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.启攒.除服.成服.k՜7/破土.出行.栽种.嫁娶.祭祀.理发.作灶.修饰垣墙.平治道涂.整手足甲.沐浴.冠笄.l՜a纳采.订盟.安床.谢土.破土.动土.嫁娶.开光.祭祀.祈福.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上梁.造屋.作灶.出火.安香.补垣.塞穴.拆卸.放水.扫舍.造仓.造船.栽种.安葬.d՜aw行丧.安葬.破土.作灶.伐木.斋醮.纳采.订盟.嫁娶.祭祀.祈福.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆卸.扫舍.放水.安香.安床.造船.开池.掘井.造畜椆栖.栽种.E՜EW斋醮.移徙.入宅.动土.祭祀.教牛马.断蚁.余事勿取.՜-嫁娶.掘井.入宅.移徙.出火.出行.行丧.安葬.开光.理发.进人口.修造.动土.起基.安门.安床.栽种.筑堤.补垣.造畜椆栖.,՜'C诸事不宜.解除.坏垣.余事勿取.}՜ S7开市.入宅.探病.出火.造屋.嫁娶.祭祀.祈福.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.针灸.理发.会亲友.起基.修造.动土.竖柱.定磉.安床.拆卸.纳畜.牧养.放水.破土.除服.成服.修坟.立碑.P՜ aQ开市.动土.祭祀.斋醮.安葬.探病.栽种.捕捉.畋猎.余事勿取.c՜ E嫁娶.出火.移徙.入宅.开市.交易.立券.安机械.会亲友.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上梁.安门.作灶.放水.作厕.开池.栽种.牧养.造畜椆栖.破土.安葬.立碑.;՜ EC斋醮.开市.嫁娶.作灶.沐浴.扫舍.余事勿取.B՜ )m行丧.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取."՛CE移徙.入宅.造屋.架马.嫁娶.纳采.订盟.斋醮.开光.祭祀.祈福.求医.治病.会亲友.动土.解除.捕捉.纳畜.牧养.入殓.破土.安葬.:՛BE?动土.破土.嫁娶.嫁娶.祭祀.祈福.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上梁.作灶.安门.安香.出火.造屋.启攒.安葬.^՛AS{祈福.嫁娶.入宅.安床.作灶.祭祀.沐浴.移徙.破土.安葬.扫舍.平治道涂.~՛@S9开市.作灶.动土.行丧.安葬.嫁娶.纳采.订盟.会亲友.安机械.结网.冠笄.祭祀.求嗣.进人口.经络.x՛?S-开市.出行.安床.作灶.安葬.嫁娶.纳采.订盟.祭祀.祈福.治病.造车器.修造.动土.移徙.入宅.>՛>)e嫁娶.安葬.祭祀.解除.断蚁.会亲友.余事勿取. b/ # x 9 y 9j:- b"՛=as入宅.造屋.造桥.安门.安葬.上梁.嫁娶.冠笄.祭祀.出行.移徙.入宅.作灶.造车器.补垣.塞穴.作厕.破土.启攒.除服.成服.入殓.]՛<7入宅.安门.安葬.祭祀.祈福.求嗣.开光.纳采.订盟.嫁娶.出行.动土.破土.会亲友.开市.交易.立券.习艺.拆卸.起基.安碓磑.放水.开池.造仓.开渠.栽种.谢土.启攒.修坟.立碑.;՛;7Q探病.嫁娶.开市.祭祀.结网.捕捉.余事勿取.7՛:S+安床.上梁.裁衣.入宅.嫁娶.祭祀.祈福.求嗣.开光.订盟.纳采.解除.动土.起基.进人口.开市.交易.立券.纳财.造仓.开池.栽种.纳畜.破土.安葬.4՛97A作灶.开市.经络.订盟.纳采.嫁娶.解除.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.入宅.移徙.安床.栽种.纳畜.动土.破土.谢土.安葬.修坟.B՛8)m开光.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取.O՛7Kc开市.立券.造船.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.修造.进人口.入宅.移徙.安床.解除.挂匾.栽种.破土.谢土.入殓.移柩.安葬.S՛6Sc作灶.嫁娶.移徙.入宅.理发.开市.交易.立券.挂匾.祭祀.祈福.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.启攒.除服.成服.立碑.՛5Ss伐木.安葬.安床.祭祀.祈福.纳采.嫁娶.裁衣.理发.出行.修造.动土.进人口.开市.交易.立券.挂匾.移徙.上梁.栽种.纳畜.՛4 嫁娶.栽种.修造.动土.出行.伐木.作梁.安葬.谢土.开光.纳采.裁衣.冠笄.安床.作灶.进人口.造仓.塞穴.4՛3a作灶.安床.开仓.造屋.动土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.解除.出行.出火.入宅.移徙.栽种.纳畜.牧养.动土.破土.入殓.安葬.W՛2a_嫁娶.安葬.入宅.出行.动土.词讼.塞穴.断蚁.结网.畋猎.余事勿取.՛1 安床.开渠.上梁.修造.开市.开光.入宅.移徙.安床.嫁娶.交易.立券.作厕.补垣.塞穴.畋猎.取渔.开生坟.I՛0}%入宅.移徙.修造.安门.伐木.入殓.安葬.造屋.祭祀.祈福.求嗣.开光.出行.开市.交易.立券.栽种.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.启攒.修坟.՛/ ;祭祀.伐木.架马.安床.修造.动土.安葬.修坟.破土.解除.出行.纳采.冠笄.竖柱.上梁.移徙.作灶.进人口.入宅.纳畜.牧养.՛.Sm嫁娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈福.开光.动土.安床.出行.栽种.纳畜.牧养.竖柱.上梁.解除.破土.:՛-)[开市.立券.纳采.订盟.嫁娶.造车器.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.挂匾.入宅.移徙.安床.栽种.入殓.破土.安葬.除服.成服.:՛,'_诸事不宜.破屋.坏垣.沐浴.解除.余事勿取.%՛+ M祭祀.祈福.求嗣.开光.解除.合帐.冠笄.伐木.架马.作梁.修造.进人口.嫁娶.裁衣.合帐.安床.动土.起基.上梁.竖柱.放水.会亲友.)՛* U嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.解除.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上梁.安葬.破土.谢土.@՛)KE入宅.动土.开仓.出货财.造车器.祭祀.祈福.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.合脊.起基.定磉.安门.纳畜.安葬.开生坟.立碑.谢土.斋醮.O՛(S]嫁娶.安葬.动土.安床.治病.祭祀.作灶.平治道涂.余事勿取.:՛'a#祈福.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.嫁娶.会亲友.进人口.安床.开市.交易.纳畜.牧养.入殓.除服.成服.移柩.安葬.启攒.~՛&a+开市.嫁娶.移徙.入宅.掘井.安葬.沐浴.斋醮.解除.求医.治病.会亲友.造畜椆栖.栽种.理发.扫舍.a՛%oe动土.破土.行丧.开光.作梁.安葬.探病.祭祀.解除.教牛马.出行.余事勿取.f՚^a}开光.嫁娶.掘井.安葬.安门.探病.祭祀.祈福.求嗣.斋醮.冠笄.作灶.纳财.交易. !Tm `  M & ;H S ?NhTn՚]S祈福.动土.破土.安葬.入殓.纳采.嫁娶.出行.开市.立券.纳畜.牧养.出火.移徙.入宅.4՚\)Q嫁娶.安葬.祭祀.捕捉.解除.余事勿取./՚[77出火.嫁娶.开市.祭祀.祈福.求嗣.斋醮.纳采.订盟.开光.竖柱.上梁.开仓.出货财.造屋.起基.定磉.安门.诸事不宜.破土.入殓.启攒.谢土.J՚ZSS祭祀.嫁娶.入宅.作灶.安葬.沐浴.捕捉.畋猎.结网.取渔._՚YE 祈福.斋醮.开市.安葬.祭祀.沐浴.解除.求医.治病.破屋.坏垣.余事勿取.u՚XE5嫁娶.开市.纳财.出火.纳采.祭祀.祈福.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.g՚WS 移徙.入宅.嫁娶.出行.安床.祭祀.祈福.求嗣.斋醮.沐浴.纳畜.入殓.破土.安葬.K՚VK]安床.入宅.安碓磑.栽种.祭祀.作灶.平治道涂.余事勿取.՚Uae祈福.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.嫁娶.开市.出行.会亲友.安床.结网.除服.成服.启攒.安葬.移柩.H՚To1纳采.出行.修坟.安葬.开市.立券.作灶.嫁娶.祭祀.祈福.求嗣.斋醮.开光.出火.移徙.入宅.竖柱.上梁.会亲友.造屋.起基.治病.治病.安门.造车器.掘井.开池.A՚SEO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿取.2՚Ra移徙.入宅.作灶.理发.开光.安门.祭祀.出行.修造.动土.合帐.造畜椆栖.安床.移徙.入殓.移柩.破土.启攒.安葬.开生坟.合寿木.补垣.塞穴.՚QE 作灶.安葬.祭祀.入殓.安香.出火.纳采.订盟.嫁娶.开市.立券.交易.挂匾.开光.出行.解除.安床.栽种.置产.拆卸.修造.动土.B՚P)m嫁娶.入宅.祭祀.修门.取渔.纳财.纳畜.余事勿取.'՚O'5纳采.问名.订盟.嫁娶.入宅.开仓.出火.动土.破土.纳畜.伐木.开市.交易.立券.挂匾.祭祀.开光.祈福.求嗣.安床.解除.修造.安葬.I՚N){祈福.安葬.沐浴.塞穴.畋猎.结网.取渔.扫舍.余事勿取.Q՚M) 嫁娶.开市.祭祀.沐浴.解除.破屋.坏垣.求医.治病.余事勿取.՚L)k动土.破土.祭祀.解除.入殓.移柩.启攒.安葬.整手足甲.捕捉.畋猎.取渔.除服.成服.扫舍.谢土.斋醮.f՚KS 斋醮.开光.嫁娶.入宅.上梁.沐浴.祭祀.解除.安葬.破土.谢土.移柩.余事勿取.]՚J7嫁娶.安床.治病.祭祀.作灶.畋猎.结网.修饰垣墙.平治道涂.余事勿取.՚I}祈福.出火.置产.动土.破土.安葬.修造.上梁.置产.入宅.开光.出行.交易.塞穴.嫁娶.理发.开市.安床. ՚Ho;修坟.造桥.作灶.出行.安葬.造屋.入宅.祭祀.祈福.求嗣.开光.纳采.订盟.解除.栽种.纳畜.牧养.扫舍.进人口.L՚GEe开光.伐木.安葬.破土.祭祀.出行.教牛马.扫舍.余事勿取.՚Fam嫁娶.掘井.探病.开市.开光.栽种.祭祀.裁衣.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.启攒.安葬.谢土.除服.成服.՚EE{祭祀.入殓.安葬.探病.嫁娶.祈福.求嗣.开光.出行.解除.拆卸.出火.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.4՚DS%纳采.动土.开市.交易.安门.开光.祈福.求嗣.出行.解除.伐木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除服.成服.移柩.谢土.纳畜.牧养.T՚CEu纳财.开市.安葬.破土.理发.冠笄.嫁娶.进人口.栽种.捕捉.针灸.՚BE{祈福.嫁娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出火.拆卸.起基.修造.动土.上梁.移徙.造船.开市.交易.立券.纳财.j՚AS塑绘.开光.造桥.除服.成服.嫁娶.冠笄.祭祀.出行.会亲友.修造.动土.入殓.破土.;ՙ{EC嫁娶.移徙.开市.入宅.破屋.坏垣.余事勿取.gՙzS 纳采.开光.安床.嫁娶.开市.祈福.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~ՙy=O纳畜.理发.合寿木.嫁娶.造车器.纳采.订盟.祭祀.祈福.安机械.移徙.入宅.开市.立券.破土.安葬._ՙxE 开市.造屋.治病.作灶.嫁娶.冠笄.会亲友.安机械.纳财.交易.立券.置产. f"@ e  T  Xf+L $fjՙw7-移徙.入宅.栽种.纳财.开市.交易.立券.开光.针灸.会亲友.理发.安床.造仓.结网.JՙvEa嫁娶.安葬.行丧.安门.祭祀.沐浴.解除.扫舍.塞穴.牧养.bՙuau嫁娶.动土.掘井.起基.定磉.破土.祭祀.会亲友.出行.立券.交易.冠笄.纳财.cՙtE嫁娶.祈福.出火.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.ՙsE{开市.交易.合帐.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.破土.出火.安门.安床.上梁.立碑.移柩.mՙrE%入宅.造屋.竖柱.安葬.纳财.交易.立券.栽种.捕捉.结网.取渔.进人口.教牛马.理发.ՙqYm嫁娶.定磉.合寿木.安葬.行丧.祭祀.祈福.求嗣.斋醮.沐浴.开光.理发.经络.解除.治病.治病.立碑.栽种.牧养.掘井.开池.cՙp7嫁娶.开光.作灶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;ՙo)_开光.嫁娶.破屋.坏垣.求医.治病.余事勿取.&ՙn}_开市.交易.作灶.纳财.上梁.安床.造屋.造船.嫁娶.开光.祭祀.祈福.求嗣.出行.出火.入宅.移徙.解除.栽种.伐木.破土.谢土.安葬.ՙmE动土.伐木.安葬.行丧.嫁娶.祭祀.开光.祈福.求嗣.出行.出火.进人口.入宅.移徙.安床.拆卸.修造.安门.挂匾.纳财.扫舍.~ՙl开仓.出货财.造屋.作灶.开市.交易.立券.栽种.祭祀.祈福.嫁娶.冠笄.修饰垣墙.置产.平治道涂.ՙk'动土.破土.安葬.行丧.赴任.出行.嫁娶.入宅.移徙.谢土.词讼.纳财.开市.立券.交易.开光.安床.上梁.造屋.修造.起基.kՙjE!嫁娶.作灶.掘井.安葬.塞穴.整手足甲.解除.捕捉.畋猎.结网.余事勿取.诸事不宜.ՙiEy祈福.动土.移徙.入宅.祭祀.祈福.求嗣.斋醮.嫁娶.冠笄.出行.开市.交易.会亲友.教牛马.除服.成服.启攒.安葬.移柩.ՙh}C嫁娶.祭祀.开光.出行.出火.移徙.入宅.安门.安床.伐木.拆卸.修造.动土.上梁.立券.交易.栽种.纳畜.牧养.入殓.安葬.|ՙgEC合帐.开市.安葬.入殓.嫁娶.祭祀.开光.祈福.求嗣.出火.入宅.移徙.安床.拆卸.动土.破土.谢土.lՙfK置产.伐木.纳畜.造畜椆栖.安葬.破土.作梁.作灶.开生坟.理发.冠笄.嫁娶.进人口.*ՙe W嫁娶.行丧.架马.作梁.理发.牧养.安葬.纳畜.伐木.开市.立券.交易.挂匾.祭祀.祈福.开光.入宅.移徙.安床.拆卸.动土.上梁.进人口. ՙdEe开光.作灶.斋醮.安葬.嫁娶.祭祀.出行.冠笄.立券.交易.进人口.开市.移徙.修造.动土.安床.入殓.移柩.破土.:ՙc'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.^ՙb)#入宅.安门.祭祀.开光.塑绘.祈福.斋醮.裁衣.合帐.冠笄.嫁娶.拆卸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.理发.伐木.架马.作梁.出火.修造.起基.定磉.放水.赴任.ՙaS]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.嫁娶.会亲友.进人口.牧养.捕捉.入殓.移柩.安葬.启攒.Eՙ`o+置产.造屋.合脊.开光.探病.安门.作灶.祈福.求嗣.斋醮.纳采.嫁娶.伐木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除服.成服.移柩.安葬.破土.谢土.Aՙ_EO嫁娶.祈福.掘井.安葬.祭祀.平治道涂.余事勿取.\ՙ^E开市.动土.安葬.破土.会亲友.求嗣.理发.冠笄.结网.捕捉.开光.理发.uՙ]S'开光.嫁娶.作灶.掘井.纳畜.祭祀.祈福.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.jՙS祭祀.移徙.入宅.动土.破土.纳采.会亲友.竖柱.上梁.立券.入殓.移柩.安葬.启攒.nՙS嫁娶.动土.开光.造屋.破土.祭祀.祈福.求嗣.斋醮.入殓.除服.成服.移柩.安葬.启攒.qՙS移徙.入宅.出火.安门.安葬.纳采.嫁娶.祭祀.祈福.出行.开市.会亲友.动土.破土.启攒.cՙE嫁娶.开市.安葬.破土.纳采.祭祀.祈福.出行.会亲友.修造.动土.移徙.入宅. NSX m p  j  o+|MiH9x"NCՙSE嫁娶.安门.移徙.入宅.安葬.塞穴.结网.取渔.畋猎.ՙKQ安床.作灶.造船.会亲友.纳采.订盟.祭祀.祈福.安香.出火.修造.出行.开市.移徙.入宅.动土.安葬.破土.Qՙ) 嫁娶.安葬.祭祀.沐浴.解除.理发.扫舍.破屋.坏垣.余事勿取.gՙ 7'开市.入宅.斋醮.纳采.嫁娶.祭祀.祈福.出行.修造.动土.移徙.入宅.安葬.破土.Pՙ S_经络.探病.造屋.作灶.动土.嫁娶.祭祀.冠笄.修饰垣墙.置产.Hՙ E]祭祀.祈福.安葬.安门.作灶.解除.平治道涂.余事勿取.pՙ S嫁娶.开市.动土.作灶.安葬.会亲友.冠笄.安床.会亲友.安机械.祭祀.祈福.求嗣.经络.7ՙ S+移徙.入宅.出火.作灶.掘井.祭祀.祈福.求嗣.开光.嫁娶.出行.解除.伐木.拆卸.进人口.安床.动土.起基.上梁.栽种.纳畜.破土.谢土.启攒.安葬. ՙ}'入宅.出行.移徙.祭祀.嫁娶.动土.破土.作灶.开光.解除.伐木.竖柱.上梁.交易.立券.纳畜.入殓.移柩.安葬.|ՙ} 栽种.开光.出行.针灸.嫁娶.入宅.动土.破土.祭祀.祈福.求嗣.纳畜.入殓.启攒.谢土.除服.成服.ՙ{I入宅.安葬.伐木.作梁.纳畜.造畜椆栖.作灶.嫁娶.祭祀.开光.祈福.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲友.{ՙ%a嫁娶.词讼.行丧.安葬.牧养.伐木.作梁.开市.纳畜.造畜椆栖.祭祀.沐浴.理发.作灶.结网.栽种._ՙ)%嫁娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除服.成服.余事勿取. ՙu3开市.嫁娶.安床.会亲友.入宅.作灶.上梁.祭祀.斋醮.沐浴.开生坟.除服.成服.移柩.入殓.破土.安葬.合寿木.;ՙ)_开市.嫁娶.求医.治病.破屋.坏垣.余事勿取.Xՙaa开市.作灶.安床.入宅.上梁.裁衣.动土.入殓.嫁娶.移柩.安葬.破土.)ՙS开光.造屋.动土.作灶.栽种.造车器.纳采.订盟.祭祀.祈福.求嗣.移徙.出行.开市.出火.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?՘'i诸事不宜.修饰垣墙.平治道涂.祭祀.余事勿取.%՘~S入宅.作灶.治病.安葬.移徙.嫁娶.冠笄.纳采.出行.会亲友.上梁.安机械.安床.牧养.畋猎.祭祀.祈福.开光.修造.安门.造屋.起基.=՘}'c诸事不宜.嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.启攒.除服.成服.;՘|'a诸事不宜.裁衣.伐木.作梁.纳财.交易.立券.H՘{7k破土.动土.安葬.祭祀.解除.教牛马.会亲友.余事勿取.՘zSk开光.嫁娶.开市.动土.破土.交易.立券.纳财.安床.裁衣.造畜椆栖.安葬.谢土.启攒.除服.成服.修坟.立碑.移柩.入殓.c՘yau造庙.嫁娶.出行.动土.安葬.行丧.订盟.纳采.会亲友.祭祀.斋醮.沐浴.塑绘.出火.开光.竖柱.上梁.开市.交易.立券.作梁.开柱眼.伐木.架马.安门.安床.拆卸.牧养.造畜椆栖.掘井.{՘3EA开市.安床.安葬.修坟.嫁娶.纳采.订盟.问名.祭祀.冠笄.裁衣.会亲友.进人口.纳财.捕捉.作灶.e՘2a{造庙.入宅.修造.安葬.行丧.嫁娶.祭祀.沐浴.补垣.塞穴.断蚁.解除.余事勿取. ՘1SW祈福.嫁娶.安床.入宅.造船.沐浴.开仓.出货财.开市.交易.立券.纳财.栽种.纳畜.牧养.畋猎.入殓.破土.安葬.;՘07Q斋醮.嫁娶.开市.祭祀.破屋.坏垣.余事勿取.%՘/}]纳采.订盟.嫁娶.上梁.开市.斋醮.造屋.安门.沐浴.捕捉.畋猎.理发.整手足甲.入殓.除服.成服.破土.安葬.谢土.立碑.修坟.启攒.՘.E开市.出行.安葬.行丧.嫁娶.订盟.纳采.会亲友.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出火.挂匾.拆卸.置产.R՘-uA开光.嫁娶.开仓.出货财.造船.安葬.探病.平治道涂.余事勿取.'՘,5'挂匾.入宅.上梁.祈福.词讼.作梁.作灶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.嫁娶.栽种.入殓.移柩.安葬. &K ; V N  q?4z3:q?՘+s作灶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.嫁娶.开光.解除.出火.拆卸.修造.进人口.入宅.移徙.安床.栽种.入殓.修坟.动土.除服.成服.y՘*o嫁娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲友.解除.余事勿取.7՘) q入宅.置产.嫁娶.动土.栽种.开市.开光.动土.破土.祭祀.祈福.求嗣.沐浴.问名.交易.纳财.入殓.移柩.安葬.修坟.立碑.谢土.造畜椆栖.教牛马..՘(S嫁娶.合帐.入宅.行丧.安葬.纳采.订盟.祭祀.祈福.求嗣.斋醮.沐浴.进人口.会亲友.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q՘'aS嫁娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.捕捉.畋猎.n՘&S嫁娶.入宅.作灶.纳采.订盟.祭祀.斋醮.入殓.破土.启攒.安葬.修坟.立碑.除服.成服.s՘%S#祈福.造庙.祭祀.安床.谢土.嫁娶.纳采.订盟.开光.安香.出火.纳财.开市.交易.立券.裁衣.造屋.起基.修造.动土.安门.移徙.入宅.栽种.牧养.畋猎.掘井.开池.安葬.破土.入殓.除服.成服.立碑.B՘$7_开市.动土.破土.祭祀.破屋.坏垣.解除.余事勿取.4՘#o 伐木.开市.交易.上梁.作灶.安门.造屋.嫁娶.纳采.订盟.入宅.移徙.安床.祭祀.祈福.开光.出行.解除.出火.拆卸.动土.纳畜.谢土.安葬.破土.#՘"C开市.行丧.栽种.出行.出货财.安葬.置产.词讼.治病.嫁娶.祭祀.开光.伐木.出火.拆卸.入宅.移徙.修造.动土.上梁.安床.纳畜.]՘!}O移徙.入宅.掘井.造庙.栽种.针灸.治病.开池.解除.平治道涂.余事勿取.՘ }C掘井.祈福.谢土.动土.入宅.上梁.修造.作灶.嫁娶.出行.理发.安床.启攒.安葬.修坟.开市.交易.立券.纳财.开池.牧养.&՘E入宅.安门.祭祀.谢土.沐浴.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.启攒.修坟.立碑.移柩.Y՘E嫁娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.针灸.余事勿取.՘ 置产.嫁娶.出行.开光.栽种.动土.破土.入宅.治病.安床.裁衣.交易.立券.入殓.移柩.安葬.除服.成服.&՘ O嫁娶.栽种.安葬.理发.造庙.作灶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈福.求嗣.动土.,՘'C诸事不宜.祭祀.解除.余事勿取.^՘'%余事勿取.祭祀.入殓.破土.除服.成服.启攒.安葬.修坟.立碑.余事勿取.՘E 安床.伐木.祈福.纳畜.嫁娶.开市.交易.立券.开光.出行.出火.拆卸.修造.入宅.移徙.动土.破土.移柩.安葬.启攒.除服.成服.՘a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W՘a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0՘S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r՘o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]oSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UnoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TmKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖. ?Z ' g 6 n =  o:D ]il';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)k U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vj[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.i会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.hoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7gS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4f)Q移徙.入宅.破屋.坏垣.治病.余事勿取.eKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]dE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]cSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qba嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SaSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.`S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟._aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.^5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.]伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,\'C诸事不宜.解除.扫舍.余事勿取.[EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:Z'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,Y'C诸事不宜.祭祀.解除.余事勿取.Xa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2W'O诸事不宜.祭祀.修饰垣墙.余事勿取.JVE_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出火.修饰垣墙.平治道涂.会亲友.出行.开池.作厕.^US{嫁娶.开市.祈福.斋醮.安葬.塑绘.会亲友.安机械.塞穴.结网.裁衣.经络._Tam开市.纳采.造庙.安床.开渠.安葬.嫁娶.造车器.出行.会亲友.移徙.入宅.修造.动土.雕刻.开光.安香.出火.理发.会亲友.造屋.合脊.起基.归岫.安门.拆卸.扫舍.栽种.造畜椆栖.ISSQ开市.动土.破土.行丧.安葬.祭祀.沐浴.出行.余事勿取.nRS嫁娶.入宅.安床.掘井.开光.祭祀.理发.置产.塞穴.除服.成服.移柩.入殓.破土.安葬. y& x G ! L #&a,U:y;QS3移徙.入宅.出火.入殓.安葬.开市.纳财.出行.祭祀.祈福.求嗣.斋醮.问名.入学.起基.定磉.置产.开渠.掘井.拆卸.栽种.纳畜.牧养.动土.破土.启攒._ oa嫁娶.纳采.订盟.安床.动土.破土.安葬.祭祀.沐浴.捕捉.畋猎.结网.扫舍.t S%嫁娶.移徙.出火.开市.入宅.订盟.纳采.会亲友.祭祀.祈福.修造.动土.安机械.破土.安葬.{S3祭祀.嫁娶.入宅.修造.动土.祭祀.扫舍.破土.安葬.除服.成服.启攒.移柩.入殓.立碑.余事勿取.I){嫁娶.安葬.祭祀.解除.破屋.坏垣.求医.治病.余事勿取.am破土.动土.安门.作灶.开市.交易.嫁娶.纳采.订盟.祭祀.开光.出行.解除.伐木.出火.入宅.移徙.拆卸.修造.栽种.安葬.入殓.EEU置产.掘井.词讼.栽种.嫁娶.纳采.订盟.祭祀.斋醮.开光.安香.出火.出行.出火.拆卸.动土.祈福.进人口.纳财.交易.立券.移徙.安床.修造.安葬.除服.成服.Q %造庙.谢土.作灶.作梁.伐木.安葬.行丧.修坟.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.裁衣.会亲友.拆卸.进人口.安香.经络.出货财.修饰垣墙.平治道涂.祈福.谢土.安葬.上梁.作灶.开市.嫁娶.出行.入宅.动土.祭祀.塑绘.理发.会亲友.牧养.开池.造畜椆栖.畋猎.结网.O7w作灶.经络.安床.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.进人口.开市.立券.挂匾.入宅.移徙.安门.栽种.动土.求医.治病.会亲友.起基.修造.造屋.安葬.VSk开市.动土.破土.嫁娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿取.fS 置产.造船.开光.掘井.作灶.合帐.裁衣.嫁娶.安床.入殓.移柩.破土.造畜椆栖.?m伐木.上梁.修造.入殓.理发.会亲友.入宅.安门.安葬.作灶.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆卸.破土.e~a{嫁娶.入宅.开市.安床.破土.修坟.沐浴.扫舍.捕捉.畋猎.解除.塞穴.余事勿取. }gC嫁娶.进人口.入宅.移徙.出火.出行.祭祀.祈福.求嗣.开光.解除.伐木.拆卸.修造.栽种.纳畜.安葬.修坟.立碑.c|Y}上梁.开仓.出货财.造屋.造船.纳采.订盟.嫁娶.祭祀.祈福.雕刻.移徙.开市.入宅.出行.动土.会亲友.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;{)_嫁娶.安葬.破屋.坏垣.求医.治病.余事勿取.zQs嫁娶.动土.造船.开池.掘井.出行.修造.入宅.上梁.移徙.安葬.破土.作灶.开市.祭祀.理发.针灸.解除.进人口.整手足甲.y7{栽种.掘井.置产.嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.开市.交易.立券.挂匾.伐木.入宅.移徙.安床.安葬.xa_祈福.祭祀.伐木.掘井.作灶.谢土.嫁娶.开光.出行.出火.拆卸.修造.动土.入宅.移徙.安床.上梁.开市.交易.立券.栽种. w5u嫁娶.冠笄.出行.祈福.安葬.伐木.入宅.移徙.出火.栽种.动土.上梁.开光.裁衣.安门.会亲友.安床.结网.理发. v)置产.安床.嫁娶.开光.出行.解除.出火.拆卸.修造.进人口.动土.入宅.移徙.栽种.纳畜.掘井.安葬.除服.成服.,u'C余事勿取.祭祀.沐浴.余事勿取.t}入宅.移徙.嫁娶.掘井.作灶.出火.进人口.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.启攒.%s'5余事勿取.解除.余事勿取.rg'开市.开仓.出货财.安床.安门.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.求医.治病.出火.移徙.入宅.PqEm动土.破土.开市.安葬.祭祀.作灶.纳财.捕捉.畋猎.余事勿取. pYO上梁.开光.造屋.架马.合寿木.造车器.嫁娶.订盟.纳采.会亲友.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.joS嫁娶.开市.入宅.祈福.安葬.订盟.纳采.会亲友.交易.立券.纳财.栽种.纳畜.牧养. Y{ V N  Iiov\kYBn)m开市.嫁娶.祭祀.沐浴.解除.破屋.坏垣.余事勿取.EmKO开市.破土.掘井.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.安香.出火.造庙.移徙.出行.入宅.造庙.起基.竖柱.上梁.安床.纳畜.捕捉.纳婿.安葬.B'SC开市.交易.祭祀.入宅.安葬.捕捉.畋猎.余事勿取.3&)O嫁娶.开市.祭祀.平治道涂.余事勿取.H%SM入宅.上梁.斋醮.出火.谢土.纳采.订盟.开市.交易.立券.会亲友.纳畜.牧养.问名.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.启攒.入殓.除服.成服.$o]造庙.嫁娶.掘井.栽种.造桥.作灶.动土.祭祀.开光.出行.解除.伐木.作梁.出火.拆卸.入宅.移徙.安床.修造.造畜椆栖.扫舍.#1出货财.开仓.动土.破土.安葬.行丧.伐木.开渠.栽种.祭祀.造车器.出行.修造.上梁.造屋.安门.安床.造畜椆栖.教牛马."}C开市.出行.栽种.置产.词讼.安门.掘井.开光.嫁娶.裁衣.冠笄.合帐.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.V!Si安门.安床.裁衣.入宅.安葬.祭祀.祈福.求嗣.斋醮.开光.出行.嫁娶.求医.治病.动土.破土.入学.起基.扫舍.竖柱.上梁.开仓.出货财.置产.栽种.牧养.开生坟.谢土.立碑.[ Su嫁娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲友.纳财.理发.捕捉.va探病.纳畜.伐木.起基.作梁.造屋.嫁娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈福.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆卸.修造.动土.栽种.安葬.破土.启攒.除服.成服.入殓.立碑.oO祈福.斋醮.纳采.订盟.嫁娶.入宅.安葬.祭祀.求嗣.冠笄.进人口.会亲友.安门.安床.经络.纳财.牧养.畋猎.放水.割蜜.PS_嫁娶.入宅.上梁.出行.安葬.祭祀.沐浴.破屋.坏垣.余事勿取.}Q入宅.移徙.掘井.理发.伐木.交易.开市.作灶.嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.修造.动土.上梁.安床.纳畜.入殓.破土.ea{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.启攒.安葬.除服.成服.余事勿取.qa嫁娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治道涂.造畜椆栖.余事勿取.E'q开市.入宅.出行.嫁娶.修坟.祈福.动土.入宅.安门.谢土.上梁.纳采.订盟.会亲友.沐浴.理发.裁衣.冠笄.安床.除服.成服.启攒.移柩.安葬.会亲友.开生坟.}A嫁娶.安葬.行丧.词讼.造桥.作灶.破土.动土.祭祀.开光.出行.解除.理发.伐木.出火.拆卸.上梁.合脊.安床.造畜椆栖.a]伐木.行丧.破土.嫁娶.安葬.开渠.祭祀.祈福.求嗣.开光.出行.解除.上梁.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.)开光.栽种.嫁娶.祭祀.祈福.求嗣.动土.安床.扫舍.入殓.移柩.破土.启攒.安葬.作灶.整手足甲.补垣.除服.成服.)安床.安葬.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.进人口.开市.交易.立券.挂匾.纳财.入宅.移徙.栽种.破土.谢土.<EE安葬.开市.修坟.立碑.嫁娶.祭祀.作灶.纳财. }'纳畜.伐木.置产.作梁.行丧.安葬.修坟.立碑.嫁娶.祭祀.开市.开光.出行.入宅.移徙.出火.拆卸.修造.安床.{o上梁.作灶.伐木.出行.安葬.安门.理发.嫁娶.求嗣.纳采.进人口.纳财.结网.纳畜.牧养.会亲友.:'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.a'+余事勿取.祭祀.入殓.移柩.开生坟.破土.启攒.安葬.除服.成服.余事勿取.mo}祭祀.嫁娶.安床.开市.入宅.探病.上梁.沐浴.捕捉.入殓.除服.成服.破土.启攒.安葬.%S纳采.订盟.架马.词讼.开渠.嫁娶.造车器.安机械.祭祀.祈福.开光.安香.出火.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c aw斋醮.嫁娶.移徙.出行.上梁.入宅.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取. + R ` y =(d t"d\ E嫁娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出火.上梁.移徙.u a针灸.伐木.作梁.造庙.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.? g)嫁娶.入宅.修造.动土.会亲友.破土.祭祀.出行.u o 嫁娶.开市.祭祀.祈福.斋醮.纳采.修坟.冠笄.沐浴.出行.修造.动土.移徙.入宅.破土.安葬.Bo-开市.祈福.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.取渔.会亲友.入学.移柩.启攒.除服.成服.LAYQ嫁娶.开市.造屋.作梁.合寿木.祭祀.冠笄.捕捉.余事勿取.7@}安葬.纳畜.出行.行丧.伐木.栽种.造庙.造桥.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.解除.进人口.入宅.移徙.出火.安床.开市.交易.立券.挂匾.S?Eq开市.开仓.安门.安葬.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.上梁.合脊.放水.掘井.破土.移柩.谢土.除服.成服.;>)_移徙.入宅.破屋.坏垣.求医.治病.余事勿取.= 5出火.入宅.移徙.祈福.祭祀.安床.开市.嫁娶.探病.开光.解除.拆卸.修造.动土.竖柱.安门.牧养.安葬.修坟.破土.移柩.<u;作灶.出火.进人口.开渠.入宅.移徙.祭祀.开光.祈福.求嗣.斋醮.修造.动土.纳财.造仓.作厕.栽种.牧养.会亲友.U;Ew嫁娶.入宅.安床.出行.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.0:o斋醮.嫁娶.行丧.动土.作灶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.栽种.进人口.入宅.移徙.安床.开光.出火.拆卸.安门.修造.39a造庙.行丧.安葬.伐木.作灶.造船.嫁娶.纳采.祭祀.解除.出行.修造.动土.开市.上梁.安床.整手足甲.扫舍.求医.治病.起基.定磉.造屋.合脊.P8Em动土.破土.置产.掘井.祭祀.出行.沐浴.扫舍.安葬.余事勿取.%7S祈福.开光.开市.入宅.动土.嫁娶.冠笄.安机械.解除.纳畜.牧养.沐浴.伐木.架马.作梁.安门.扫舍.合寿木.安葬.启攒.立碑.修坟.e6a{开市.入宅.嫁娶.动土.破土.安葬.祭祀.修坟.除服.成服.启攒.移柩.余事勿取. 5 开仓.出货财.伐木.纳畜.开市.上梁.造屋.破土.启攒.栽种.嫁娶.祭祀.理发.进人口.作灶.移柩.冠笄.会亲友.#45嫁娶.破土.进人口.出行.入宅.移徙.出火.纳畜.词讼.安葬.开市.交易.立券.纳财.挂匾.栽种.祭祀.祈福.开光.拆卸.动土.安床.a3S开市.掘井.开渠.造桥.造船.嫁娶.纳采.订盟.祭祀.开光.出行.理发.作梁.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.移徙.拆卸.挂匾.栽种.纳畜.破土.安葬.入殓.除服.成服.:2'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.,1'C诸事不宜.解除.坏垣.余事勿取.00 c嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.栽种.纳畜.入殓.安葬.除服.成服.F/'w诸事不宜.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.|.a'作灶.行丧.理发.乘船.嫁娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出火.上梁. -SO伐木.行丧.作灶.作梁.安葬.嫁娶.祭祀.塑绘.开光.出行.解除.理发.整手足甲.动土.安床.开池.放水.扫舍.3,'Q诸事不宜.祭祀.出行.扫舍.余事勿取.+o'掘井.祈福.安床.开市.入宅.挂匾.开光.嫁娶.出行.伐木.拆卸.修造.动土.移徙.安葬.破土.修坟.立碑.*a5动土.破土.掘井.开光.上梁.词讼.嫁娶.普渡.祭祀.祈福.补垣.塞穴.断蚁.筑堤.入殓.除服.成服.安葬.O)S[出火.入宅.造屋.安门.安葬.嫁娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲友.开市.纳财.修造.动土.竖柱.上梁.开光.开仓.出货财.纳畜.牧养.开池.破土.启攒. _( . k  \eRr%(S]掘井.出行.破土.行丧.安葬.嫁娶.订盟.纳采.作灶.冠笄.裁衣.会亲友.纳畜.牧养.安机械.开市.立券.纳财.安床.>'a+纳采.订盟.经络.行丧.安葬.探病.嫁娶.祭祀.祈福.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.捕捉.畋猎.结网.&SC动土.破土.嫁娶.掘井.安床.订盟.纳采.祭祀.祈福.安香.出火.开市.立券.入宅.挂匾.造桥.启攒.安葬.4%)Q斋醮.开市.沐浴.破屋.坏垣.余事勿取.`_E 开市.交易.入宅.嫁娶.祭祀.普渡.捕捉.解除.结网.畋猎.入殓.破土.安葬.E^SG开市.立券.置产.作灶.造桥.嫁娶.纳采.订盟.祭祀.祈福.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.定磉.安门.安葬.破土.r]}y嫁娶.栽种.祈福.造桥.安葬.安门.伐木.作梁.祭祀.理发.作灶.沐浴.修饰垣墙.平治道涂.\-开市.入宅.动土.破土.安葬.作灶.上梁.安床.开仓.祈福.沐浴.理发.会亲友.塑绘.开光.栽种.牧养.嫁娶.经络.补垣.塞穴.?[m出火.嫁娶.开光.进人口.出行.词讼.开市.入宅.移徙.赴任.解除.祭祀.祈福.求嗣.修造.动土.竖柱.上梁.安床.纳畜.造屋.合脊.起基.入殓.破土.安葬.&Za{栽种.掘井.动土.安床.破土.置产.嫁娶.纳采.订盟.祭祀.祈福.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上梁.纳畜.入殓.安葬.启攒.%Yay嫁娶.入宅.斋醮.开光.针灸.掘井.祭祀.出行.作梁.出火.拆卸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.*XI入宅.上梁.入殓.造屋.探病.作灶.安门.安葬.纳畜.伐木.嫁娶.纳采.订盟.开光.祭祀.出行.理发.动土.安床.放水.开渠.栽种.进人口.:Wo行丧.安葬.出行.作梁.纳畜.伐木.造桥.嫁娶.祭祀.祈福.求嗣.裁衣.冠笄.经络.修造.进人口.安床.动土.竖柱.上梁.移徙.交易.立券.栽种.会亲友.VVEw入宅.嫁娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈福.求嗣.开光.普渡.出行.出火.拆卸.修造.动土.进人口.开市.交易.立券.移徙.安床.栽种.上梁.纳畜.破土.移柩.安葬.4Ua掘井.理发.作灶.动土.破土.开池.嫁娶.开光.祭祀.祈福.求嗣.安香.出火.解除.伐木.入宅.移徙.安床.开市.交易.立券.栽种.出火.出行.安葬.PTaQ祈福.纳采.订盟.嫁娶.入宅.安葬.破屋.坏垣.治病.余事勿取.fSE嫁娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.捕捉.除服.成服.余事勿取.SRSc斋醮.开市.开仓.作灶.造船.嫁娶.祭祀.祈福.求嗣.出火.出行.开光.解除.拆卸.修造.进人口.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除服.成服.zQk嫁娶.词讼.治病.置产.作梁.祈福.安葬.栽种.伐木.安门.修饰垣墙.平治道涂.祭祀.沐浴.作灶.IP 伐木.谢土.行丧.祭祀.作灶.动土.破土.安葬.祈福.纳采.订盟.开光.出行.解除.安香.出火.拆卸.入宅.移徙.修造.上梁.安床.栽种.纳畜.会亲友.安机械.经络.#OQ嫁娶.出行.进人口.作灶.入宅.移徙.栽种.赴任.祭祀.解除.拆卸.修造.动土.起基.上梁.安床.安门.开渠.开池.入殓.破土.启攒.}N_+安床.动土.安葬.开生坟.合寿木.祭祀.裁衣.安门.纳财.扫舍.出行.进人口.作灶.纳畜.造畜椆栖.M}开光.出行.修造.上梁.入宅.安门.作灶.裁衣.祭祀.动土.筑堤.开池.会亲友.塞穴.入殓.移柩.破土.安葬.%L}]造屋.入殓.安葬.伐木.入宅.移徙.置产.纳畜.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.安床.栽种.移柩.进人口.会亲友.除服.成服.K}I动土.破土.理发.出行.入宅.分居.安香.出火.祭祀.开光.解除.移徙.裁衣.开市.立券.祈福.求嗣.进人口.交易.纳财.纳畜. ^$ = *A^5Q+oi^JE{栽种.作灶.针灸.出行.嫁娶.出火.拆卸.祭祀.祈福.开光.伐木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.hI'9诸事不宜.祭祀.结网.入殓.移柩.启攒.安葬.移柩.除服.成服.合寿木.余事勿取.,H'C诸事不宜.破屋.坏垣.余事勿取.^G'%诸事不宜.祭祀.求医.捕捉.栽种.塞穴.入殓.破土.安葬.移柩.余事勿取.mFo}出火.嫁娶.入宅.作灶.破土.上梁.动土.沐浴.理发.捕捉.入殓.移柩.破土.启攒.安葬.6ES)嫁娶.安葬.行丧.破土.修坟.订盟.纳采.祭祀.祈福.开光.安香.出火.立券.安机械.移徙.入宅.竖柱.上梁.会亲友.安床.拆卸.挂匾.牧养.教牛马.ODaO开市.动土.破土.嫁娶.修造.安葬.祭祀.修饰垣墙.平治道涂.LCaG斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈福.求嗣.开光.解除.扫舍.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.栽种.纳畜.牧养.nBS嫁娶.出行.纳采.入宅.作灶.祭祀.沐浴.塑绘.开光.入学.解除.扫舍.治病.开池.牧养.lAE#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.u{S'开市.入宅.嫁娶.开光.造屋.祭祀.入殓.除服.成服.移柩.破土.启攒.安葬.塞穴.断蚁.结网.)z7+出行.安葬.造桥.纳采.订盟.嫁娶.祭祀.沐浴.塑绘.开光.出火.治病.习艺.伐木.造屋.竖柱.上梁.安床.作灶.安碓磑.挂匾.掘井.纳畜.]ygc安葬.破土.开市.开仓.出货财.启攒.纳采.订盟.嫁娶.移徙.入宅.出行.祭祀.祈福.斋醮.塑绘.开光.安香.出火.会亲友.解除.入学.竖柱.上梁.拆卸.造屋.起基.栽种.牧养.纳畜.KxYM入宅.开市.掘井.词讼.合寿木.嫁娶.订盟.纳采.祭祀.祈福.斋醮.开光.会亲友.求医.治病.造屋.起基.竖柱.上梁.安门.安碓磑.筑堤.开池.破土.安葬.除服.成服.YwSo祭祀.祈福.探病.谢土.造桥.嫁娶.开市.立券.移徙.入宅.安机械.会亲友.经络.安门.安床.挂匾.拆卸.开仓.出货财.开池.栽种.纳畜.牧养.破土.安葬.启攒.移柩.入殓.立碑.4v)Q嫁娶.安葬.破屋.坏垣.解除.余事勿取.&uA嫁娶.斋醮.开市.出火.入宅.移徙.出行.作灶.安门.伐木.祭祀.祈福.解除.整手足甲.安床.沐浴.入殓.移柩.破土.启攒.安葬.谢土.Lto9嫁娶.作灶.出火.置产.嫁娶.入宅.安葬.纳采.订盟.会亲友.入学.祭祀.祈福.求嗣.开光.出行.解除.理发.动土.起基.开市.交易.立券.纳财.造仓.栽种.纳畜.牧养.3)e嫁娶.安葬.祭祀.解除.断蚁.会亲友.余事勿取."2as入宅.造屋.造桥.安门.安葬.上梁.嫁娶.冠笄.祭祀.出行.移徙.入宅.作灶.造车器.补垣.塞穴.作厕.破土.启攒.除服.成服.入殓.]17入宅.安门.安葬.祭祀.祈福.求嗣.开光.纳采.订盟.嫁娶.出行.动土.破土.会亲友.开市.交易.立券.习艺.拆卸.起基.安碓磑.放水.开池.造仓.开渠.栽种.谢土.启攒.修坟.立碑.;07Q探病.嫁娶.开市.祭祀.结网.捕捉.余事勿取.7/S+安床.上梁.裁衣.入宅.嫁娶.祭祀.祈福.求嗣.开光.订盟.纳采.解除.动土.起基.进人口.开市.交易.立券.纳财.造仓.开池.栽种.纳畜.破土.安葬.4.7A作灶.开市.经络.订盟.纳采.嫁娶.解除.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.入宅.移徙.安床.栽种.纳畜.动土.破土.谢土.安葬.修坟.B-)m开光.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取.O,Kc开市.立券.造船.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.修造.进人口.入宅.移徙.安床.解除.挂匾.栽种.破土.谢土.入殓.移柩.安葬.S+Sc作灶.嫁娶.移徙.入宅.理发.开市.交易.立券.挂匾.祭祀.祈福.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.启攒.除服.成服.立碑.*Ss伐木.安葬.安床.祭祀.祈福.纳采.嫁娶.裁衣.理发.出行.修造.动土.进人口.开市.交易.立券.挂匾.移徙.上梁.栽种.纳畜.) 嫁娶.栽种.修造.动土.出行.伐木.作梁.安葬.谢土.开光.纳采.裁衣.冠笄.安床.作灶.进人口.造仓.塞穴. [] 2 T  P  n=U&{<|<m4(a作灶.安床.开仓.造屋.动土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.解除.出行.出火.入宅.移徙.栽种.纳畜.牧养.动土.破土.入殓.安葬.W'a_嫁娶.安葬.入宅.出行.动土.词讼.塞穴.断蚁.结网.畋猎.余事勿取.& 安床.开渠.上梁.修造.开市.开光.入宅.移徙.安床.嫁娶.交易.立券.作厕.补垣.塞穴.畋猎.取渔.开生坟.I%}%入宅.移徙.修造.安门.伐木.入殓.安葬.造屋.祭祀.祈福.求嗣.开光.出行.开市.交易.立券.栽种.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.启攒.修坟.$ ;祭祀.伐木.架马.安床.修造.动土.安葬.修坟.破土.解除.出行.纳采.冠笄.竖柱.上梁.移徙.作灶.进人口.入宅.纳畜.牧养.#Sm嫁娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈福.开光.动土.安床.出行.栽种.纳畜.牧养.竖柱.上梁.解除.破土.:")[开市.立券.纳采.订盟.嫁娶.造车器.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.挂匾.入宅.移徙.安床.栽种.入殓.破土.安葬.除服.成服.:!'_诸事不宜.破屋.坏垣.沐浴.解除.余事勿取.%  M祭祀.祈福.求嗣.开光.解除.合帐.冠笄.伐木.架马.作梁.修造.进人口.嫁娶.裁衣.合帐.安床.动土.起基.上梁.竖柱.放水.会亲友.) U嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.解除.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上梁.安葬.破土.谢土.{} 嫁娶.移徙.伐木.作梁.安床.祭祀.祈福.造屋.沐浴.平治道涂.扫舍.入殓.破土.安葬.除服.成服.Ba5塞穴.上梁.动土.伐木.安葬.词讼.进人口.会亲友.E嫁娶.安床.探病.作灶.开市.交易.立券.挂匾.开光.出行.拆卸.进人口.入宅.移柩.动土.安门.上梁.栽种.破土.修坟.安葬.,'C诸事不宜.解除.扫舍.余事勿取.7{开光.掘井.开仓.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.动土.入宅.移徙.安床.作灶.塞穴.栽种.破土.安葬.'纳畜.入宅.移徙.安葬.探病.伐木.上梁.安门.入殓.动土.嫁娶.祭祀.祈福.求嗣.开光.开市.交易.立券.安床.出行.拆卸.nS祈福.动土.破土.安葬.入殓.纳采.嫁娶.出行.开市.立券.纳畜.牧养.出火.移徙.入宅.4)Q嫁娶.安葬.祭祀.捕捉.解除.余事勿取./77出火.嫁娶.开市.祭祀.祈福.求嗣.斋醮.纳采.订盟.开光.竖柱.上梁.开仓.出货财.造屋.起基.定磉.安门.诸事不宜.破土.入殓.启攒.谢土.JSS祭祀.嫁娶.入宅.作灶.安葬.沐浴.捕捉.畋猎.结网.取渔._NE 祈福.斋醮.开市.安葬.祭祀.沐浴.解除.求医.治病.破屋.坏垣.余事勿取.uME5嫁娶.开市.纳财.出火.纳采.祭祀.祈福.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.gLS 移徙.入宅.嫁娶.出行.安床.祭祀.祈福.求嗣.斋醮.沐浴.纳畜.入殓.破土.安葬.KKK]安床.入宅.安碓磑.栽种.祭祀.作灶.平治道涂.余事勿取.Jae祈福.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.嫁娶.开市.出行.会亲友.安床.结网.除服.成服.启攒.安葬.移柩.HIo1纳采.出行.修坟.安葬.开市.立券.作灶.嫁娶.祭祀.祈福.求嗣.斋醮.开光.出火.移徙.入宅.竖柱.上梁.会亲友.造屋.起基.治病.治病.安门.造车器.掘井.开池.AHEO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿取.2Ga移徙.入宅.作灶.理发.开光.安门.祭祀.出行.修造.动土.合帐.造畜椆栖.安床.移徙.入殓.移柩.破土.启攒.安葬.开生坟.合寿木.补垣.塞穴.FE 作灶.安葬.祭祀.入殓.安香.出火.纳采.订盟.嫁娶.开市.立券.交易.挂匾.开光.出行.解除.安床.栽种.置产.拆卸.修造.动土. !a= Q H 8 i  GXtCx5Qfs"BE)m嫁娶.入宅.祭祀.修门.取渔.纳财.纳畜.余事勿取.'D'5纳采.问名.订盟.嫁娶.入宅.开仓.出火.动土.破土.纳畜.伐木.开市.交易.立券.挂匾.祭祀.开光.祈福.求嗣.安床.解除.修造.安葬.IC){祈福.安葬.沐浴.塞穴.畋猎.结网.取渔.扫舍.余事勿取.QB) 嫁娶.开市.祭祀.沐浴.解除.破屋.坏垣.求医.治病.余事勿取.A)k动土.破土.祭祀.解除.入殓.移柩.启攒.安葬.整手足甲.捕捉.畋猎.取渔.除服.成服.扫舍.谢土.斋醮.f@S 斋醮.开光.嫁娶.入宅.上梁.沐浴.祭祀.解除.安葬.破土.谢土.移柩.余事勿取.]?7嫁娶.安床.治病.祭祀.作灶.畋猎.结网.修饰垣墙.平治道涂.余事勿取.>}祈福.出火.置产.动土.破土.安葬.修造.上梁.置产.入宅.开光.出行.交易.塞穴.嫁娶.理发.开市.安床. =o;修坟.造桥.作灶.出行.安葬.造屋.入宅.祭祀.祈福.求嗣.开光.纳采.订盟.解除.栽种.纳畜.牧养.扫舍.进人口.L<Ee开光.伐木.安葬.破土.祭祀.出行.教牛马.扫舍.余事勿取.;am嫁娶.掘井.探病.开市.开光.栽种.祭祀.裁衣.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.启攒.安葬.谢土.除服.成服.:E{祭祀.入殓.安葬.探病.嫁娶.祈福.求嗣.开光.出行.解除.拆卸.出火.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,9'C诸事不宜.解除.破屋.余事勿取.8 +祭祀.祈福.求嗣.开光.解除.纳采.冠笄.出火.拆卸.进人口.安床.动土.上梁.造庙.掘井.开池.入殓.移柩.安葬.破土.,7'C诸事不宜.塞穴.扫舍.余事勿取.:6'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.5}Q动土.破土.纳财.掘井.挂匾.开市.伐木.交易.祭祀.祈福.求嗣.开光.解除.出火.拆卸.入宅.安床.修造.安门.纳畜.启攒.安葬.g4S 纳采.开光.安床.嫁娶.开市.祈福.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~3=O纳畜.理发.合寿木.嫁娶.造车器.纳采.订盟.祭祀.祈福.安机械.移徙.入宅.开市.立券.破土.安葬._2E 开市.造屋.治病.作灶.嫁娶.冠笄.会亲友.安机械.纳财.交易.立券.置产.j17-移徙.入宅.栽种.纳财.开市.交易.立券.开光.针灸.会亲友.理发.安床.造仓.结网.JkEa嫁娶.安葬.行丧.安门.祭祀.沐浴.解除.扫舍.塞穴.牧养.bjau嫁娶.动土.掘井.起基.定磉.破土.祭祀.会亲友.出行.立券.交易.冠笄.纳财.ciE嫁娶.祈福.出火.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.hE{开市.交易.合帐.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.破土.出火.安门.安床.上梁.立碑.移柩.mgE%入宅.造屋.竖柱.安葬.纳财.交易.立券.栽种.捕捉.结网.取渔.进人口.教牛马.理发.fYm嫁娶.定磉.合寿木.安葬.行丧.祭祀.祈福.求嗣.斋醮.沐浴.开光.理发.经络.解除.治病.治病.立碑.栽种.牧养.掘井.开池.ce7嫁娶.开光.作灶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;d)_开光.嫁娶.破屋.坏垣.求医.治病.余事勿取.&c}_开市.交易.作灶.纳财.上梁.安床.造屋.造船.嫁娶.开光.祭祀.祈福.求嗣.出行.出火.入宅.移徙.解除.栽种.伐木.破土.谢土.安葬.bE动土.伐木.安葬.行丧.嫁娶.祭祀.开光.祈福.求嗣.出行.出火.进人口.入宅.移徙.安床.拆卸.修造.安门.挂匾.纳财.扫舍.~a开仓.出货财.造屋.作灶.开市.交易.立券.栽种.祭祀.祈福.嫁娶.冠笄.修饰垣墙.置产.平治道涂.`'动土.破土.安葬.行丧.赴任.出行.嫁娶.入宅.移徙.谢土.词讼.纳财.开市.立券.交易.开光.安床.上梁.造屋.修造.起基. _  P 9 e &pj'5k_E!嫁娶.作灶.掘井.安葬.塞穴.整手足甲.解除.捕捉.畋猎.结网.余事勿取.诸事不宜.^Ey祈福.动土.移徙.入宅.祭祀.祈福.求嗣.斋醮.嫁娶.冠笄.出行.开市.交易.会亲友.教牛马.除服.成服.启攒.安葬.移柩.]}C嫁娶.祭祀.开光.出行.出火.移徙.入宅.安门.安床.伐木.拆卸.修造.动土.上梁.立券.交易.栽种.纳畜.牧养.入殓.安葬.|\EC合帐.开市.安葬.入殓.嫁娶.祭祀.开光.祈福.求嗣.出火.入宅.移徙.安床.拆卸.动土.破土.谢土.l[K置产.伐木.纳畜.造畜椆栖.安葬.破土.作梁.作灶.开生坟.理发.冠笄.嫁娶.进人口.*Z W嫁娶.行丧.架马.作梁.理发.牧养.安葬.纳畜.伐木.开市.立券.交易.挂匾.祭祀.祈福.开光.入宅.移徙.安床.拆卸.动土.上梁.进人口. YEe开光.作灶.斋醮.安葬.嫁娶.祭祀.出行.冠笄.立券.交易.进人口.开市.移徙.修造.动土.安床.入殓.移柩.破土.:X'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.^W)#入宅.安门.祭祀.开光.塑绘.祈福.斋醮.裁衣.合帐.冠笄.嫁娶.拆卸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.理发.伐木.架马.作梁.出火.修造.起基.定磉.放水.赴任.]V)!伐木.作梁.祭祀.会亲友.订盟.裁衣.合帐.安机械.拆卸.上梁.安门.入殓.除服.成服.移柩.启攒.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.经络.'9诸事不宜.祭祀.结网.入殓.移柩.启攒.安葬.移柩.除服.成服.合寿木.余事勿取.,ԁ='C诸事不宜.破屋.坏垣.余事勿取.^ԁ<'%诸事不宜.祭祀.求医.捕捉.栽种.塞穴.入殓.破土.安葬.移柩.余事勿取.)ԁ;)9嫁娶.移徙.祭祀.求嗣.开光.出行.伐木.作梁.出火.解除.拆卸.进人口.修造.动土.起基.安床.栽种.纳畜.入殓.破土.安葬.除服.成服.Nԁ:'诸事不宜.祭祀.作灶.沐浴.修饰垣墙.平治道涂.余事勿取.ԁ9嫁娶.纳财.祈福.安葬.修造.开市.交易.立券.动土.上梁.塑绘.开光.进人口.纳畜.补垣.塞穴.栽种.牧养.ԁ8 %嫁娶.会亲友.进人口.出行.入宅.移徙.赴任.作灶.祭祀.解除.沐浴.理发.整手足甲.入殓.移柩.破土.安葬.扫舍.ԁ7Sm破土.置产.掘井.动土.安床.祭祀.祈福.求嗣.开光.出行.解除.上梁.造屋.移徙.安门.纳财.牧养.纳畜.安葬.启攒.入殓.lԁ6E#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.uԁ5S'开市.入宅.嫁娶.开光.造屋.祭祀.入殓.除服.成服.移柩.破土.启攒.安葬.塞穴.断蚁.结网.)ԁ47+出行.安葬.造桥.纳采.订盟.嫁娶.祭祀.沐浴.塑绘.开光.出火.治病.习艺.伐木.造屋.竖柱.上梁.安床.作灶.安碓磑.挂匾.掘井.纳畜.]ԁ3gc安葬.破土.开市.开仓.出货财.启攒.纳采.订盟.嫁娶.移徙.入宅.出行.祭祀.祈福.斋醮.塑绘.开光.安香.出火.会亲友.解除.入学.竖柱.上梁.拆卸.造屋.起基.栽种.牧养.纳畜. JB b G  x  -F3JKԁ2YM入宅.开市.掘井.词讼.合寿木.嫁娶.订盟.纳采.祭祀.祈福.斋醮.开光.会亲友.求医.治病.造屋.起基.竖柱.上梁.安门.安碓磑.筑堤.开池.破土.安葬.除服.成服.Yԁ1So祭祀.祈福.探病.谢土.造桥.嫁娶.开市.立券.移徙.入宅.安机械.会亲友.经络.安门.安床.挂匾.拆卸.开仓.出货财.开池.栽种.纳畜.牧养.破土.安葬.启攒.移柩.入殓.立碑.4Ԁk)Q嫁娶.安葬.破屋.坏垣.解除.余事勿取.&ԀjA嫁娶.斋醮.开市.出火.入宅.移徙.出行.作灶.安门.伐木.祭祀.祈福.解除.整手足甲.安床.沐浴.入殓.移柩.破土.启攒.安葬.谢土.LԀio9嫁娶.作灶.出火.置产.嫁娶.入宅.安葬.纳采.订盟.会亲友.入学.祭祀.祈福.求嗣.开光.出行.解除.理发.动土.起基.开市.交易.立券.纳财.造仓.栽种.纳畜.牧养.<ԀhEE动土.破土.治病.开渠.祭祀.嫁娶.畋猎.结网.EԀg}上梁.入宅.修造.动土.破土.祭祀.祈福.斋醮.嫁娶.纳采.订盟.造车器.开光.出行.拆卸.起基.安床.除服.成服.开市.交易.立券.栽种.牧养.入殓.移柩.启攒.QԀfS_开市.入宅.出行.安床.作灶.修造.动土.安机械.祭祀.沐浴.解除.拆卸.治病.作灶.造屋.起基.开池.扫舍.造畜椆栖.开生坟.合寿木.安葬.破土.启攒.移柩.入殓.立碑.,ԀeM移徙.入宅.栽种.动土.破土.作灶.安葬.行丧.伐木.上梁.嫁娶.祭祀.出行.裁衣.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|Ԁda'开光.治病.嫁娶.掘井.破土.安葬.经络.祭祀.沐浴.补垣.塞穴.除服.成服.移柩.入殓.启攒.立碑.BԀco%移徙.栽种.出行.行丧.破土.安葬.词讼.嫁娶.纳采.订盟.祭祀.祈福.求嗣.纳采.裁衣.冠笄.开光.安床.作梁.修造.动土.作灶.起基.上梁.造屋.纳畜.牧养.Ԁb开渠.造船.安床.安葬.破土.出行.修坟.掘井.开市.开生坟.祭祀.冠笄.作灶.交易.纳财.栽种.结网.纳畜.牧养.进人口.VԀaKq掘井.伐木.纳畜.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.入殓.破土.谢土.安葬.EԀ`SG入宅.移徙.作灶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.嫁娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.栽种.破土.启攒.安葬.立碑.,Ԁ_'C诸事不宜.破屋.坏垣.余事勿取.nԀ^ a嫁娶.开市.出火.作灶.置产.斋醮.入宅.移徙.安门.解除.祭祀.理发.入殓.安葬.破土.Ԁ]oQ嫁娶.栽种.行丧.理发.修坟.行丧.作灶.祭祀.祈福.求嗣.开光.伐木.出火.拆卸.入宅.安床.修造.动土.上梁.挂匾.纳畜.,Ԁ\'C诸事不宜.祭祀.解除.余事勿取.Ԁ[}5作灶.动土.上梁.栽种.入宅.移徙.修造.祈福.嫁娶.开光.解除.安床.牧养.理发.开市.入殓.启攒.移柩.安葬.扫舍."ԀZ G嫁娶.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.栽种.纳畜.入殓.启攒.除服.成服.tԀY_嫁娶.作灶.安葬.动土.词讼.作梁.伐木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^ԀX'%余事勿取.祭祀.入殓.破土.除服.成服.移柩.启攒.安葬.谢土.余事勿取.mԀW}o嫁娶.出行.安葬.入殓.入宅.作灶.冠笄.上梁.祭祀.祈福.求嗣.开光.开市.牧养.理发.iԀV}g安葬.经络.修坟.破土.开市.安床.启攒.立碑.祭祀.作灶.纳财.栽种.纳畜.进人口."ԀU G嫁娶.开光.出行.祈福.求嗣.解除.拆卸.动土.修造.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.纳畜.入殓.移柩.安葬.ԀTE{伐木.祭祀.纳畜.祭祀.嫁娶.开光.出行.理发.作梁.出火.拆卸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.栽种.,ԀS'C诸事不宜.破屋.坏垣.余事勿取.BԀR7_入宅.嫁娶.移徙.祭祀.沐浴.破屋.坏垣.余事勿取. {T. f   N|C)(8{7ԀQK3嫁娶.开市.合寿木.安葬.纳采.订盟.冠笄.祭祀.祈福.斋醮.出行.修造.动土.移徙.入宅.安香.出火.拆卸.造屋.起基.竖柱.上梁.定磉.安门.开池.uԀPS'开光.作灶.造屋.架马.开仓.嫁娶.纳采.祭祀.祈福.出行.立券.移徙.入宅.动土.破土.安葬.qԀOS开市.入宅.出行.修造.词讼.祭祀.沐浴.理发.整手足甲.修饰垣墙.平治道涂.余事勿取.{ԀNa%嫁娶.安床.作灶.动土.破土.造船.安机械.祭祀.祈福.求嗣.沐浴.解除.纳采.开市.修造.竖柱.上梁.开柱眼.安碓磑.归岫.补垣.塞穴.拆卸.放水.出火.扫舍.开生坟.合寿木.安葬.谢土.启攒.除服.成服.JԀMQS安葬.开生坟.合寿木.行丧.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.修造.进人口.入宅.移徙.动土.安床.纳畜.栽种.纳财.交易.立券.挂匾.造畜椆栖.EԀEW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿取.Ԁam安床.祈福.出行.安葬.行丧.开光.嫁娶.合帐.裁衣.冠笄.伐木.上梁.出火.拆卸.移徙.修造.动土.安门.纳财.筑堤.栽种.塞穴.7ԀE9行丧.置产.入宅.安葬.嫁娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈福.求嗣.出行.解除.伐木.出火.入宅.拆卸.修造.动土.上梁.安床.栽种.破土.;ԀEC入宅.出行.掘井.安葬.祭祀.结网.余事勿取.ԀS_作灶.出火.祭祀.嫁娶.入宅.开市.交易.立券.挂匾.开光.解除.拆卸.动土.安床.修造.上梁.置产.栽种.破土.安葬.Ԁ)k出火.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.EԀKQ移徙.入宅.开仓.出货财.祭祀.破屋.坏垣.余事勿取.^S{嫁娶.开市.安葬.启攒.行丧.畋猎.捕捉.结网.取渔.祭祀.沐浴.余事勿取.L~7q动土.掘井.破土.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.启攒.除服.成服.k}7/破土.出行.栽种.嫁娶.祭祀.理发.作灶.修饰垣墙.平治道涂.整手足甲.沐浴.冠笄.l|a纳采.订盟.安床.谢土.破土.动土.嫁娶.开光.祭祀.祈福.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上梁.造屋.作灶.出火.安香.补垣.塞穴.拆卸.放水.扫舍.造仓.造船.栽种.安葬.d{aw行丧.安葬.破土.作灶.伐木.斋醮.纳采.订盟.嫁娶.祭祀.祈福.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆卸.扫舍.放水.安香.安床.造船.开池.掘井.造畜椆栖.栽种.EzEW斋醮.移徙.入宅.动土.祭祀.教牛马.断蚁.余事勿取.y-嫁娶.掘井.入宅.移徙.出火.出行.行丧.安葬.开光.理发.进人口.修造.动土.起基.安门.安床.栽种.筑堤.补垣.造畜椆栖.,x'C诸事不宜.解除.坏垣.余事勿取.,w'C诸事不宜.祭祀.作灶.余事勿取.&v}_嫁娶.出火.伐木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.栽种.安床.拆卸.修造.动土.上梁.入殓.安葬.破土.除服.成服.uoQ嫁娶.造桥.词讼.移徙.安门.作灶.栽种.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.经络.破土.,t'C诸事不宜.破屋.坏垣.余事勿取.saQ嫁娶.开市.交易.行丧.安葬.修坟.祭祀.祈福.求嗣.开光.出行.伐木.出火.拆卸.修造.动土.起基.安床.入宅.移徙.)r U嫁娶.祭祀.开光.祈福.求嗣.出行.出火.拆卸.动土.修造.进人口.入宅.移徙.安床.挂匾.交易.立券.栽种.纳畜.入殓.破土.启攒.安葬.rqa出行.安门.修造.嫁娶.上梁.入宅.祭祀.理发.修饰垣墙.平治道涂.沐浴.整手足甲.扫舍.&p)3置产.安床.开光.求嗣.出行.解除.伐木.出火.拆卸.修造.上梁.起基.入宅.移徙.开市.交易.立券.栽种.牧养.入殓.安葬.除服.成服. _ > ? 0 G_j(SoE{安葬.行丧.伐木.作梁.嫁娶.祭祀.祈福.出火.开光.求嗣.出行.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.动土.,n'C诸事不宜.祭祀.解除.余事勿取.mE安葬.出行.祈福.栽种.求嗣.嫁娶.纳采.合帐.裁衣.冠笄.伐木.作梁.修造.动土.起基.竖柱.上梁.安门.作灶.筑堤.造畜椆栖."las入宅.造屋.造桥.安门.安葬.上梁.嫁娶.冠笄.祭祀.出行.移徙.入宅.作灶.造车器.补垣.塞穴.作厕.破土.启攒.除服.成服.入殓.]k7入宅.安门.安葬.祭祀.祈福.求嗣.开光.纳采.订盟.嫁娶.出行.动土.破土.会亲友.开市.交易.立券.习艺.拆卸.起基.安碓磑.放水.开池.造仓.开渠.栽种.谢土.启攒.修坟.立碑.;j7Q探病.嫁娶.开市.祭祀.结网.捕捉.余事勿取.7iS+安床.上梁.裁衣.入宅.嫁娶.祭祀.祈福.求嗣.开光.订盟.纳采.解除.动土.起基.进人口.开市.交易.立券.纳财.造仓.开池.栽种.纳畜.破土.安葬.4#7A作灶.开市.经络.订盟.纳采.嫁娶.解除.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.入宅.移徙.安床.栽种.纳畜.动土.破土.谢土.安葬.修坟.B")m开光.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取.O!Kc开市.立券.造船.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.修造.进人口.入宅.移徙.安床.解除.挂匾.栽种.破土.谢土.入殓.移柩.安葬.S Sc作灶.嫁娶.移徙.入宅.理发.开市.交易.立券.挂匾.祭祀.祈福.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.启攒.除服.成服.立碑.Ss伐木.安葬.安床.祭祀.祈福.纳采.嫁娶.裁衣.理发.出行.修造.动土.进人口.开市.交易.立券.挂匾.移徙.上梁.栽种.纳畜. 嫁娶.栽种.修造.动土.出行.伐木.作梁.安葬.谢土.开光.纳采.裁衣.冠笄.安床.作灶.进人口.造仓.塞穴.4a作灶.安床.开仓.造屋.动土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.解除.出行.出火.入宅.移徙.栽种.纳畜.牧养.动土.破土.入殓.安葬.Wa_嫁娶.安葬.入宅.出行.动土.词讼.塞穴.断蚁.结网.畋猎.余事勿取. 安床.开渠.上梁.修造.开市.开光.入宅.移徙.安床.嫁娶.交易.立券.作厕.补垣.塞穴.畋猎.取渔.开生坟.I}%入宅.移徙.修造.安门.伐木.入殓.安葬.造屋.祭祀.祈福.求嗣.开光.出行.开市.交易.立券.栽种.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.启攒.修坟. ;祭祀.伐木.架马.安床.修造.动土.安葬.修坟.破土.解除.出行.纳采.冠笄.竖柱.上梁.移徙.作灶.进人口.入宅.纳畜.牧养.Sm嫁娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈福.开光.动土.安床.出行.栽种.纳畜.牧养.竖柱.上梁.解除.破土.:)[开市.立券.纳采.订盟.嫁娶.造车器.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.挂匾.入宅.移徙.安床.栽种.入殓.破土.安葬.除服.成服.:'_诸事不宜.破屋.坏垣.沐浴.解除.余事勿取.% M祭祀.祈福.求嗣.开光.解除.合帐.冠笄.伐木.架马.作梁.修造.进人口.嫁娶.裁衣.合帐.安床.动土.起基.上梁.竖柱.放水.会亲友.) U嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.解除.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上梁.安葬.破土.谢土.{} 嫁娶.移徙.伐木.作梁.安床.祭祀.祈福.造屋.沐浴.平治道涂.扫舍.入殓.破土.安葬.除服.成服.Ba5塞穴.上梁.动土.伐木.安葬.词讼.进人口.会亲友.E嫁娶.安床.探病.作灶.开市.交易.立券.挂匾.开光.出行.拆卸.进人口.入宅.移柩.动土.安门.上梁.栽种.破土.修坟.安葬. !a[Q p   w&q!;L)a,'C诸事不宜.解除.扫舍.余事勿取.7{开光.掘井.开仓.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.动土.入宅.移徙.安床.作灶.塞穴.栽种.破土.安葬.'纳畜.入宅.移徙.安葬.探病.伐木.上梁.安门.入殓.动土.嫁娶.祭祀.祈福.求嗣.开光.开市.交易.立券.安床.出行.拆卸., 'C诸事不宜.结网.解除.余事勿取." as入宅.移徙.理发.出火.嫁娶.出行.开市.交易.立券.祭祀.祈福.开光.伐木.进人口.安床.拆卸.修造.动土.栽种.破土.移柩.安葬.%  M嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.动土.上梁.出火.进人口.入宅.移徙.安床.栽种.纳畜.牧养.竖柱.安门.修造.解除.会亲友.: '_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.* C嫁娶.上梁.修造.拆卸.架马.入宅.伐木.动土.出火.开柱眼.祭祀.开光.出行.解除.塑绘.裁衣.入殓.移柩.破土.启攒.安葬.除服.成服.uE5嫁娶.开市.纳财.出火.纳采.祭祀.祈福.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.gS 移徙.入宅.嫁娶.出行.安床.祭祀.祈福.求嗣.斋醮.沐浴.纳畜.入殓.破土.安葬.KK]安床.入宅.安碓磑.栽种.祭祀.作灶.平治道涂.余事勿取.ae祈福.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.嫁娶.开市.出行.会亲友.安床.结网.除服.成服.启攒.安葬.移柩.H>o1纳采.出行.修坟.安葬.开市.立券.作灶.嫁娶.祭祀.祈福.求嗣.斋醮.开光.出火.移徙.入宅.竖柱.上梁.会亲友.造屋.起基.治病.治病.安门.造车器.掘井.开池.A=EO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿取.2<a移徙.入宅.作灶.理发.开光.安门.祭祀.出行.修造.动土.合帐.造畜椆栖.安床.移徙.入殓.移柩.破土.启攒.安葬.开生坟.合寿木.补垣.塞穴.;E 作灶.安葬.祭祀.入殓.安香.出火.纳采.订盟.嫁娶.开市.立券.交易.挂匾.开光.出行.解除.安床.栽种.置产.拆卸.修造.动土.B:)m嫁娶.入宅.祭祀.修门.取渔.纳财.纳畜.余事勿取.'9'5纳采.问名.订盟.嫁娶.入宅.开仓.出火.动土.破土.纳畜.伐木.开市.交易.立券.挂匾.祭祀.开光.祈福.求嗣.安床.解除.修造.安葬.I8){祈福.安葬.沐浴.塞穴.畋猎.结网.取渔.扫舍.余事勿取.Q7) 嫁娶.开市.祭祀.沐浴.解除.破屋.坏垣.求医.治病.余事勿取.6)k动土.破土.祭祀.解除.入殓.移柩.启攒.安葬.整手足甲.捕捉.畋猎.取渔.除服.成服.扫舍.谢土.斋醮.f5S 斋醮.开光.嫁娶.入宅.上梁.沐浴.祭祀.解除.安葬.破土.谢土.移柩.余事勿取.]47嫁娶.安床.治病.祭祀.作灶.畋猎.结网.修饰垣墙.平治道涂.余事勿取.3}祈福.出火.置产.动土.破土.安葬.修造.上梁.置产.入宅.开光.出行.交易.塞穴.嫁娶.理发.开市.安床. 2o;修坟.造桥.作灶.出行.安葬.造屋.入宅.祭祀.祈福.求嗣.开光.纳采.订盟.解除.栽种.纳畜.牧养.扫舍.进人口.L1Ee开光.伐木.安葬.破土.祭祀.出行.教牛马.扫舍.余事勿取.0am嫁娶.掘井.探病.开市.开光.栽种.祭祀.裁衣.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.启攒.安葬.谢土.除服.成服./E{祭祀.入殓.安葬.探病.嫁娶.祈福.求嗣.开光.出行.解除.拆卸.出火.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,.'C诸事不宜.解除.破屋.余事勿取.- +祭祀.祈福.求嗣.开光.解除.纳采.冠笄.出火.拆卸.进人口.安床.动土.上梁.造庙.掘井.开池.入殓.移柩.安葬.破土.,,'C诸事不宜.塞穴.扫舍.余事勿取.:+'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.*}Q动土.破土.纳财.掘井.挂匾.开市.伐木.交易.祭祀.祈福.求嗣.开光.解除.出火.拆卸.入宅.安床.修造.安门.纳畜.启攒.安葬. !  G &  j[7KB2IPd) 进人口.出行.嫁娶.置产.安床.赴任.安葬.作灶.祭祀.祈福.开光.解除.动土.纳财.交易.纳畜.扫舍.F('w诸事不宜.祭祀.平治道涂.解除.修饰垣墙.余事勿取.'}I谢土.祈福.上梁.作灶.斋醮.修造.入宅.安门.纳采.嫁娶.开光.出行.理发.会亲友.开市.安床.栽种.牧养.入殓.移柩.启攒.%&}]嫁娶.纳财.安葬.出行.开市.立券.作灶.栽种.祭祀.祈福.开光.求嗣.解除.伐木.出火.入宅.移徙.安床.拆卸.修造.动土.造畜椆栖.I%'}诸事不宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿取.|$7Q词讼.开光.开市.嫁娶.出行.合帐.冠笄.安床.除服.成服.作灶.交易.立券.入殓.移柩.破土.安葬.c#E嫁娶.祈福.出火.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土."E{开市.交易.合帐.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.破土.出火.安门.安床.上梁.立碑.移柩.m!E%入宅.造屋.竖柱.安葬.纳财.交易.立券.栽种.捕捉.结网.取渔.进人口.教牛马.理发.[Ym嫁娶.定磉.合寿木.安葬.行丧.祭祀.祈福.求嗣.斋醮.沐浴.开光.理发.经络.解除.治病.治病.立碑.栽种.牧养.掘井.开池.cZ7嫁娶.开光.作灶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;Y)_开光.嫁娶.破屋.坏垣.求医.治病.余事勿取.&X}_开市.交易.作灶.纳财.上梁.安床.造屋.造船.嫁娶.开光.祭祀.祈福.求嗣.出行.出火.入宅.移徙.解除.栽种.伐木.破土.谢土.安葬.WE动土.伐木.安葬.行丧.嫁娶.祭祀.开光.祈福.求嗣.出行.出火.进人口.入宅.移徙.安床.拆卸.修造.安门.挂匾.纳财.扫舍.~V开仓.出货财.造屋.作灶.开市.交易.立券.栽种.祭祀.祈福.嫁娶.冠笄.修饰垣墙.置产.平治道涂.U'动土.破土.安葬.行丧.赴任.出行.嫁娶.入宅.移徙.谢土.词讼.纳财.开市.立券.交易.开光.安床.上梁.造屋.修造.起基.kTE!嫁娶.作灶.掘井.安葬.塞穴.整手足甲.解除.捕捉.畋猎.结网.余事勿取.诸事不宜.SEy祈福.动土.移徙.入宅.祭祀.祈福.求嗣.斋醮.嫁娶.冠笄.出行.开市.交易.会亲友.教牛马.除服.成服.启攒.安葬.移柩.R}C嫁娶.祭祀.开光.出行.出火.移徙.入宅.安门.安床.伐木.拆卸.修造.动土.上梁.立券.交易.栽种.纳畜.牧养.入殓.安葬.|QEC合帐.开市.安葬.入殓.嫁娶.祭祀.开光.祈福.求嗣.出火.入宅.移徙.安床.拆卸.动土.破土.谢土.lPK置产.伐木.纳畜.造畜椆栖.安葬.破土.作梁.作灶.开生坟.理发.冠笄.嫁娶.进人口.*O W嫁娶.行丧.架马.作梁.理发.牧养.安葬.纳畜.伐木.开市.立券.交易.挂匾.祭祀.祈福.开光.入宅.移徙.安床.拆卸.动土.上梁.进人口. NEe开光.作灶.斋醮.安葬.嫁娶.祭祀.出行.冠笄.立券.交易.进人口.开市.移徙.修造.动土.安床.入殓.移柩.破土.:M'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.^L)#入宅.安门.祭祀.开光.塑绘.祈福.斋醮.裁衣.合帐.冠笄.嫁娶.拆卸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.理发.伐木.架马.作梁.出火.修造.起基.定磉.放水.赴任.]K)!伐木.作梁.祭祀.会亲友.订盟.裁衣.合帐.安机械.拆卸.上梁.安门.入殓.除服.成服.移柩.启攒.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.经络.S_经络.探病.造屋.作灶.动土.嫁娶.祭祀.冠笄.修饰垣墙.置产.H=E]祭祀.祈福.安葬.安门.作灶.解除.平治道涂.余事勿取.ptS嫁娶.开市.动土.作灶.安葬.会亲友.冠笄.安床.会亲友.安机械.祭祀.祈福.求嗣.经络.7sS+移徙.入宅.出火.作灶.掘井.祭祀.祈福.求嗣.开光.嫁娶.出行.解除.伐木.拆卸.进人口.安床.动土.起基.上梁.栽种.纳畜.破土.谢土.启攒.安葬. r}'入宅.出行.移徙.祭祀.嫁娶.动土.破土.作灶.开光.解除.伐木.竖柱.上梁.交易.立券.纳畜.入殓.移柩.安葬.|q} 栽种.开光.出行.针灸.嫁娶.入宅.动土.破土.祭祀.祈福.求嗣.纳畜.入殓.启攒.谢土.除服.成服.p{I入宅.安葬.伐木.作梁.纳畜.造畜椆栖.作灶.嫁娶.祭祀.开光.祈福.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲友.{o%a嫁娶.词讼.行丧.安葬.牧养.伐木.作梁.开市.纳畜.造畜椆栖.祭祀.沐浴.理发.作灶.结网.栽种._n)%嫁娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除服.成服.余事勿取. mu3开市.嫁娶.安床.会亲友.入宅.作灶.上梁.祭祀.斋醮.沐浴.开生坟.除服.成服.移柩.入殓.破土.安葬.合寿木.;l)_开市.嫁娶.求医.治病.破屋.坏垣.余事勿取.Xkaa开市.作灶.安床.入宅.上梁.裁衣.动土.入殓.嫁娶.移柩.安葬.破土.)jS开光.造屋.动土.作灶.栽种.造车器.纳采.订盟.祭祀.祈福.求嗣.移徙.出行.开市.出火.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?i'i诸事不宜.修饰垣墙.平治道涂.祭祀.余事勿取.%hS入宅.作灶.治病.安葬.移徙.嫁娶.冠笄.纳采.出行.会亲友.上梁.安机械.安床.牧养.畋猎.祭祀.祈福.开光.修造.安门.造屋.起基.=g'c诸事不宜.嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.启攒.除服.成服.;f'a诸事不宜.裁衣.伐木.作梁.纳财.交易.立券.ne75词讼.出火.入宅.祭祀.合帐.裁衣.经络.伐木.作梁.安床.作灶.入殓.安葬.启攒.移柩.doC入宅.作灶.伐木.安葬.出火.出行.纳畜.嫁娶.开光.祈福.求嗣.解除.动土.安床.栽种.开池.掘井.祭祀.破土.启攒."c}W嫁娶.安葬.破土.作梁.纳畜.牧养.行丧.作灶.移徙.祭祀.开光.祈福.出行.解除.进人口.雇庸.安床.动土.起基.上梁.安门.解除. xc f 0 & & }|Ie_;]xBb'o诸事不宜.结网.入殓.除服.成服.移柩.安葬.破土.a7 嫁娶.作灶.安床.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.入宅.移徙.上梁.挂匾.开池.入殓.安葬.破土.启攒.;`'a余事勿取.祭祀.解除.治病.破屋.坏垣.扫舍._E{开市.立券.理发.作灶.嫁娶.祭祀.祈福.出行.解除.出火.拆卸.动土.入宅.移徙.安床.上梁.栽种.纳畜.破土.启攒.安葬.^')诸事不宜.解除.沐浴.f]C栽种.出行.祈福.行丧.纳畜.安葬.安门.伐木.作梁.牧养.作灶.解除.平治道涂.\5入宅.移徙.出火.分居.安香.作灶.开市.交易.立券.安葬.动土.伐木.嫁娶.开光.求嗣.会亲友.安床.牧养.塑绘.针灸.[)掘井.词讼.嫁娶.安床.开光.出行.祭祀.动土.出火.解除.会亲友.开市.交易.立券.挂匾.入宅.移徙.拆卸.破土.启攒.安葬.?Zs作灶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.嫁娶.开光.解除.出火.拆卸.修造.进人口.入宅.移徙.安床.栽种.入殓.修坟.动土.除服.成服.yYo嫁娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲友.解除.余事勿取.7 q入宅.置产.嫁娶.动土.栽种.开市.开光.动土.破土.祭祀.祈福.求嗣.沐浴.问名.交易.纳财.入殓.移柩.安葬.修坟.立碑.谢土.造畜椆栖.教牛马..S嫁娶.合帐.入宅.行丧.安葬.纳采.订盟.祭祀.祈福.求嗣.斋醮.沐浴.进人口.会亲友.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.QaS嫁娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.捕捉.畋猎.nS嫁娶.入宅.作灶.纳采.订盟.祭祀.斋醮.入殓.破土.启攒.安葬.修坟.立碑.除服.成服.sS#祈福.造庙.祭祀.安床.谢土.嫁娶.纳采.订盟.开光.安香.出火.纳财.开市.交易.立券.裁衣.造屋.起基.修造.动土.安门.移徙.入宅.栽种.牧养.畋猎.掘井.开池.安葬.破土.入殓.除服.成服.立碑.B7_开市.动土.破土.祭祀.破屋.坏垣.解除.余事勿取.4 o 伐木.开市.交易.上梁.作灶.安门.造屋.嫁娶.纳采.订盟.入宅.移徙.安床.祭祀.祈福.开光.出行.解除.出火.拆卸.动土.纳畜.谢土.安葬.破土.# C开市.行丧.栽种.出行.出货财.安葬.置产.词讼.治病.嫁娶.祭祀.开光.伐木.出火.拆卸.入宅.移徙.修造.动土.上梁.安床.纳畜.] }O移徙.入宅.掘井.造庙.栽种.针灸.治病.开池.解除.平治道涂.余事勿取. }C掘井.祈福.谢土.动土.入宅.上梁.修造.作灶.嫁娶.出行.理发.安床.启攒.安葬.修坟.开市.交易.立券.纳财.开池.牧养.& E入宅.安门.祭祀.谢土.沐浴.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.启攒.修坟.立碑.移柩.YE嫁娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.针灸.余事勿取. 置产.嫁娶.出行.开光.栽种.动土.破土.入宅.治病.安床.裁衣.交易.立券.入殓.移柩.安葬.除服.成服.& O嫁娶.栽种.安葬.理发.造庙.作灶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈福.求嗣.动土.,'C诸事不宜.祭祀.解除.余事勿取.^'%余事勿取.祭祀.入殓.破土.除服.成服.启攒.安葬.修坟.立碑.余事勿取.E 安床.伐木.祈福.纳畜.嫁娶.开市.交易.立券.开光.出行.出火.拆卸.修造.入宅.移徙.动土.破土.移柩.安葬.启攒.除服.成服.,'C诸事不宜.破屋.坏垣.余事勿取. }-掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.开光.入宅.移徙.安床.修造.动土.进人口.}A掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.动土.会亲友.起基.造仓.纳畜.牧养.作厕.进人口. Wq1 - 4  m 5  lM(AWF'w余事勿取.祭祀.解除.修饰垣墙.平治道涂.余事勿取.~'修造.上梁.入宅.祈福.探病.掘井.动土.安门.安葬.作灶.开市.交易.立券.纳财.开池.补垣.嫁娶.纳采.纳畜.取渔.安床.}E 嫁娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.伐木.作梁.出火.入宅.移徙.安床.拆卸.动土.上梁.栽种.纳畜.安葬.=|'e余事勿取.解除.扫舍.祭祀.教牛马.余事勿取.{Ek作灶.掘井.嫁娶.入宅.祭祀.祈福.斋醮.沐浴.安床.安机械.造车器.入殓.移柩.启攒.安葬.立碑.合帐.经络.交易. zE]栽种.嫁娶.入殓.安葬.祭祀.出行.沐浴.裁衣.祈福.斋醮.订盟.纳采.嫁娶.安机械.开市.立券.安碓磑.纳畜.|yEC开仓.造屋.安葬.安床.祭祀.祈福.斋醮.塑绘.开光.除服.成服.入殓.作灶.嫁娶.捕捉.畋猎.纳财.x会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.woQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7vS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4u)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ӶOKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ӶNE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ӶMSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qӶLa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SӶKSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ӶJS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ӶIaO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ӶH5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ӶG伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ӶF'C诸事不宜.解除.扫舍.余事勿取.ӶEEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ӶD'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ӶC'C诸事不宜.祭祀.解除.余事勿取.ӶBa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ӶA'O诸事不宜.祭祀.修饰垣墙.余事勿取. Ӷ@5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.Ӷ?a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;Ӷ>'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. Ӷ=aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种. bR( s M  x 8 OR"X>#Ӷ<5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mӶ;37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,Ӷ:'C诸事不宜.解除.坏垣.余事勿取.Ӷ9a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3Ӷ8'Q诸事不宜.治病.破屋.坏垣.余事勿取.RӶ7) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."Ӷ6)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.EӶ5EU置产.掘井.词讼.栽种.嫁娶.纳采.订盟.祭祀.斋醮.开光.安香.出火.出行.出火.拆卸.动土.祈福.进人口.纳财.交易.立券.移徙.安床.修造.安葬.除服.成服.QӶ4 %造庙.谢土.作灶.作梁.伐木.安葬.行丧.修坟.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.裁衣.会亲友.拆卸.进人口.安香.经络.出货财.修饰垣墙.平治道涂.Ӷ3祈福.谢土.安葬.上梁.作灶.开市.嫁娶.出行.入宅.动土.祭祀.塑绘.理发.会亲友.牧养.开池.造畜椆栖.畋猎.结网.OӶ27w作灶.经络.安床.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.进人口.开市.立券.挂匾.入宅.移徙.安门.栽种.动土.求医.治病.会亲友.起基.修造.造屋.安葬.VӶ1Sk开市.动土.破土.嫁娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿取.fӵjS 置产.造船.开光.掘井.作灶.合帐.裁衣.嫁娶.安床.入殓.移柩.破土.造畜椆栖.?ӵim伐木.上梁.修造.入殓.理发.会亲友.入宅.安门.安葬.作灶.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆卸.破土.eӵha{嫁娶.入宅.开市.安床.破土.修坟.沐浴.扫舍.捕捉.畋猎.解除.塞穴.余事勿取. ӵggC嫁娶.进人口.入宅.移徙.出火.出行.祭祀.祈福.求嗣.开光.解除.伐木.拆卸.修造.栽种.纳畜.安葬.修坟.立碑.cӵfY}上梁.开仓.出货财.造屋.造船.纳采.订盟.嫁娶.祭祀.祈福.雕刻.移徙.开市.入宅.出行.动土.会亲友.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;ӵe)_嫁娶.安葬.破屋.坏垣.求医.治病.余事勿取.ӵdQs嫁娶.动土.造船.开池.掘井.出行.修造.入宅.上梁.移徙.安葬.破土.作灶.开市.祭祀.理发.针灸.解除.进人口.整手足甲.ӵc7{栽种.掘井.置产.嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.开市.交易.立券.挂匾.伐木.入宅.移徙.安床.安葬.ӵba_祈福.祭祀.伐木.掘井.作灶.谢土.嫁娶.开光.出行.出火.拆卸.修造.动土.入宅.移徙.安床.上梁.开市.交易.立券.栽种. ӵa5u嫁娶.冠笄.出行.祈福.安葬.伐木.入宅.移徙.出火.栽种.动土.上梁.开光.裁衣.安门.会亲友.安床.结网.理发. ӵ`)置产.安床.嫁娶.开光.出行.解除.出火.拆卸.修造.进人口.动土.入宅.移徙.栽种.纳畜.掘井.安葬.除服.成服.,ӵ_'C余事勿取.祭祀.沐浴.余事勿取.ӵ^}入宅.移徙.嫁娶.掘井.作灶.出火.进人口.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.启攒.%ӵ]'5余事勿取.解除.余事勿取.qӵ\o安床.开市.交易.出货财.安葬.修坟.嫁娶.作灶.祭祀.沐浴.结网.移柩.入殓.除服.成服.ӵ[aW入宅.作灶.词讼.移徙.出行.赴任.祭祀.祈福.求嗣.开光.解除.理发.会亲友.栽种.纳畜.牧养.安葬.修坟.立碑.启攒.ӵZ)探病.安葬.嫁娶.祭祀.开光.出火.出行.拆卸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.栽种.纳畜. vQ I  D djqW#[,ӵY'C诸事不宜.破屋.坏垣.余事勿取. ӵX5嫁娶.开市.出火.栽种.破土.动土.入宅.移徙.安香.分居.掘井.作灶.开光.解除.拆卸.修造.动土.安床.纳畜.安葬.启攒.入殓.)ӵW U嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.出行.拆卸.进人口.入宅.移徙.安床.栽种.动土.修造.纳畜.入殓.安葬.立碑.除服.成服.ӵV}Q栽种.破土.置产.祭祀.嫁娶.动土.作灶.祈福.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.ӵU''诸事不宜.诸事不宜.VӵT!开市.祭祀.祈福.斋醮.塑绘.开光.订盟.纳采.裁衣.冠笄.嫁娶.拆卸.入宅.安香.入殓.移柩.理发.安葬.修坟.谢土.赴任.移徙.沐浴.治病.破土.启攒.整手足甲.入学.作梁.SӵSEs嫁娶.动土.安葬.作灶.祭祀.沐浴.出行.冠笄.进人口.余事勿取.ӵR1出货财.开仓.动土.破土.安葬.行丧.伐木.开渠.栽种.祭祀.造车器.出行.修造.上梁.造屋.安门.安床.造畜椆栖.教牛马.ӵQ}C开市.出行.栽种.置产.词讼.安门.掘井.开光.嫁娶.裁衣.冠笄.合帐.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.VӵPSi安门.安床.裁衣.入宅.安葬.祭祀.祈福.求嗣.斋醮.开光.出行.嫁娶.求医.治病.动土.破土.入学.起基.扫舍.竖柱.上梁.开仓.出货财.置产.栽种.牧养.开生坟.谢土.立碑.[ӵOSu嫁娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲友.纳财.理发.捕捉.vӵNa探病.纳畜.伐木.起基.作梁.造屋.嫁娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈福.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆卸.修造.动土.栽种.安葬.破土.启攒.除服.成服.入殓.立碑.ӵMoO祈福.斋醮.纳采.订盟.嫁娶.入宅.安葬.祭祀.求嗣.冠笄.进人口.会亲友.安门.安床.经络.纳财.牧养.畋猎.放水.割蜜.PӵS_嫁娶.入宅.上梁.出行.安葬.祭祀.沐浴.破屋.坏垣.余事勿取.ӵ}Q入宅.移徙.掘井.理发.伐木.交易.开市.作灶.嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.修造.动土.上梁.安床.纳畜.入殓.破土.eӵa{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.启攒.安葬.除服.成服.余事勿取.qӵa嫁娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治道涂.造畜椆栖.余事勿取.Eӵ'q开市.入宅.出行.嫁娶.修坟.祈福.动土.入宅.安门.谢土.上梁.纳采.订盟.会亲友.沐浴.理发.裁衣.冠笄.安床.除服.成服.启攒.移柩.安葬.会亲友.开生坟.ӵ}A嫁娶.安葬.行丧.词讼.造桥.作灶.破土.动土.祭祀.开光.出行.解除.理发.伐木.出火.拆卸.上梁.合脊.安床.造畜椆栖.ӵa]伐木.行丧.破土.嫁娶.安葬.开渠.祭祀.祈福.求嗣.开光.出行.解除.上梁.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.ӵ)开光.栽种.嫁娶.祭祀.祈福.求嗣.动土.安床.扫舍.入殓.移柩.破土.启攒.安葬.作灶.整手足甲.补垣.除服.成服.Ӵ)安床.安葬.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.进人口.开市.交易.立券.挂匾.纳财.入宅.移徙.栽种.破土.谢土.<Ӵ~EE安葬.开市.修坟.立碑.嫁娶.祭祀.作灶.纳财. Ӵ}}'纳畜.伐木.置产.作梁.行丧.安葬.修坟.立碑.嫁娶.祭祀.开市.开光.出行.入宅.移徙.出火.拆卸.修造.安床.{Ӵ|o上梁.作灶.伐木.出行.安葬.安门.理发.嫁娶.求嗣.纳采.进人口.纳财.结网.纳畜.牧养.会亲友.:Ӵ{'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.aӴz'+余事勿取.祭祀.入殓.移柩.开生坟.破土.启攒.安葬.除服.成服.余事勿取.HӴy'{余事勿取.入殓.破土.安葬.启攒.除服.成服.余事勿取.8Ӵx'[诸事不宜.造畜椆栖.平治道涂.余事勿取. A p % o >  o rrt4[wHӴw -嫁娶.作灶.出火.出行.入宅.移徙.安床.祈福.上梁.开市.交易.立券.纳财.会亲友.开光.理发.入殓.移柩.安葬.启攒.Ӵv}5安葬.修坟.作灶.破土.造庙.动土.嫁娶.纳采.祭祀.祈福.求嗣.开光.出行.解除.移徙.伐木.安床.纳畜.出火.拆卸.ӴugG动土.伐木.作梁.行丧.安葬.开生坟.祭祀.出行.裁衣.冠笄.会亲友.造畜椆栖.嫁娶.竖柱.上梁.移徙.纳财.纳畜.Ӵtg[嫁娶.开光.会亲友.掘井.安门.栽种.祭祀.解除.裁衣.理发.安床.作灶.造畜椆栖.放水.筑堤.补垣.塞穴.整手足甲.扫舍. Ӵs}'嫁娶.作灶.修坟.安门.入宅.立碑.安葬.安床.祭祀.祈福.求嗣.开光.开市.出行.解除.动土.起基.置产.栽种.,Ӵr'C诸事不宜.祭祀.塞穴.余事勿取.gӴq)5斋醮.安门.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.BӴp)m祈福.安葬.订盟.纳采.会亲友.安机械.纳财.牧养.SӴoEq开市.开仓.安门.安葬.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.上梁.合脊.放水.掘井.破土.移柩.谢土.除服.成服.;Ӵn)_移徙.入宅.破屋.坏垣.求医.治病.余事勿取.Ӵm 5出火.入宅.移徙.祈福.祭祀.安床.开市.嫁娶.探病.开光.解除.拆卸.修造.动土.竖柱.安门.牧养.安葬.修坟.破土.移柩.Ӵlu;作灶.出火.进人口.开渠.入宅.移徙.祭祀.开光.祈福.求嗣.斋醮.修造.动土.纳财.造仓.作厕.栽种.牧养.会亲友.UӴkEw嫁娶.入宅.安床.出行.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.0Ӵjo斋醮.嫁娶.行丧.动土.作灶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.栽种.进人口.入宅.移徙.安床.开光.出火.拆卸.安门.修造.3Ӵia造庙.行丧.安葬.伐木.作灶.造船.嫁娶.纳采.祭祀.解除.出行.修造.动土.开市.上梁.安床.整手足甲.扫舍.求医.治病.起基.定磉.造屋.合脊.PӴ"Em动土.破土.置产.掘井.祭祀.出行.沐浴.扫舍.安葬.余事勿取.%Ӵ!S祈福.开光.开市.入宅.动土.嫁娶.冠笄.安机械.解除.纳畜.牧养.沐浴.伐木.架马.作梁.安门.扫舍.合寿木.安葬.启攒.立碑.修坟.eӴ a{开市.入宅.嫁娶.动土.破土.安葬.祭祀.修坟.除服.成服.启攒.移柩.余事勿取. Ӵ 开仓.出货财.伐木.纳畜.开市.上梁.造屋.破土.启攒.栽种.嫁娶.祭祀.理发.进人口.作灶.移柩.冠笄.会亲友.#Ӵ5嫁娶.破土.进人口.出行.入宅.移徙.出火.纳畜.词讼.安葬.开市.交易.立券.纳财.挂匾.栽种.祭祀.祈福.开光.拆卸.动土.安床.aӴS开市.掘井.开渠.造桥.造船.嫁娶.纳采.订盟.祭祀.开光.出行.理发.作梁.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.移徙.拆卸.挂匾.栽种.纳畜.破土.安葬.入殓.除服.成服.:Ӵ'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.,Ӵ'C诸事不宜.解除.坏垣.余事勿取.0Ӵ c嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.栽种.纳畜.入殓.安葬.除服.成服.FӴ'w诸事不宜.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.|Ӵa'作灶.行丧.理发.乘船.嫁娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出火.上梁. ӴSO伐木.行丧.作灶.作梁.安葬.嫁娶.祭祀.塑绘.开光.出行.解除.理发.整手足甲.动土.安床.开池.放水.扫舍.3Ӵ'Q诸事不宜.祭祀.出行.扫舍.余事勿取.Ӵo'掘井.祈福.安床.开市.入宅.挂匾.开光.嫁娶.出行.伐木.拆卸.修造.动土.移徙.安葬.破土.修坟.立碑.HӴ'{余事勿取.祭祀.立碑.修坟.启攒.除服.成服.余事勿取.mӴa 探病.开渠.安葬.伐木.作灶.入宅.祭祀.理发.会亲友.进人口.嫁娶.针灸.入殓.移柩. b  _  8 x"rV9R"Ӵ}W嫁娶.立碑.出行.伐木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人口.入宅.安床.出火.拆卸.修造.动土.栽种.0Ӵ c嫁娶.祈福.求嗣.出行.出火.拆卸.修造.动土.上梁.开光.进人口.开市.交易.立券.挂匾.安床.入宅.移徙.栽种.伐木.入殓.破土.除服.成服.,Ӵ'C诸事不宜.破屋.坏垣.余事勿取.#Ӵ5嫁娶.出行.安床.作灶.祭祀.入宅.移徙.出火.进人口.置产.开光.解除.起基.动土.拆卸.上梁.立碑.修坟.安葬.破土.启攒.移柩.0Ӵ c嫁娶.祭祀.祈福.求嗣.沐浴.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.入宅.移徙.安床.栽种.纳畜.入殓.安葬.启攒.除服.成服.WӴ E{嫁娶.移徙.入宅.开市.沐浴.入殓.移柩.除服.成服.破土.平治道涂.Ӵ ''诸事不宜.诸事不宜.:Ӵ '_诸事不宜.祭祀.沐浴.赴任.出行.余事勿取.?Ӵ m出火.嫁娶.开光.进人口.出行.词讼.开市.入宅.移徙.赴任.解除.祭祀.祈福.求嗣.修造.动土.竖柱.上梁.安床.纳畜.造屋.合脊.起基.入殓.破土.安葬.&Ӵ a{栽种.掘井.动土.安床.破土.置产.嫁娶.纳采.订盟.祭祀.祈福.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上梁.纳畜.入殓.安葬.启攒.%Ӵay嫁娶.入宅.斋醮.开光.针灸.掘井.祭祀.出行.作梁.出火.拆卸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.*ӴI入宅.上梁.入殓.造屋.探病.作灶.安门.安葬.纳畜.伐木.嫁娶.纳采.订盟.开光.祭祀.出行.理发.动土.安床.放水.开渠.栽种.进人口.:Ӵo行丧.安葬.出行.作梁.纳畜.伐木.造桥.嫁娶.祭祀.祈福.求嗣.裁衣.冠笄.经络.修造.进人口.安床.动土.竖柱.上梁.移徙.交易.立券.栽种.会亲友.VӴEw入宅.嫁娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈福.求嗣.开光.普渡.出行.出火.拆卸.修造.动土.进人口.开市.交易.立券.移徙.安床.栽种.上梁.纳畜.破土.移柩.安葬.4ӳ?a掘井.理发.作灶.动土.破土.开池.嫁娶.开光.祭祀.祈福.求嗣.安香.出火.解除.伐木.入宅.移徙.安床.开市.交易.立券.栽种.出火.出行.安葬.Pӳ>aQ祈福.纳采.订盟.嫁娶.入宅.安葬.破屋.坏垣.治病.余事勿取.fӳ=E嫁娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.捕捉.除服.成服.余事勿取.Sӳ<Sc斋醮.开市.开仓.作灶.造船.嫁娶.祭祀.祈福.求嗣.出火.出行.开光.解除.拆卸.修造.进人口.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除服.成服.zӳ;k嫁娶.词讼.治病.置产.作梁.祈福.安葬.栽种.伐木.安门.修饰垣墙.平治道涂.祭祀.沐浴.作灶.Iӳ: 伐木.谢土.行丧.祭祀.作灶.动土.破土.安葬.祈福.纳采.订盟.开光.出行.解除.安香.出火.拆卸.入宅.移徙.修造.上梁.安床.栽种.纳畜.会亲友.安机械.经络.#ӳ9Q嫁娶.出行.进人口.作灶.入宅.移徙.栽种.赴任.祭祀.解除.拆卸.修造.动土.起基.上梁.安床.安门.开渠.开池.入殓.破土.启攒.}ӳ8_+安床.动土.安葬.开生坟.合寿木.祭祀.裁衣.安门.纳财.扫舍.出行.进人口.作灶.纳畜.造畜椆栖.ӳ7}开光.出行.修造.上梁.入宅.安门.作灶.裁衣.祭祀.动土.筑堤.开池.会亲友.塞穴.入殓.移柩.破土.安葬.%ӳ6}]造屋.入殓.安葬.伐木.入宅.移徙.置产.纳畜.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.安床.栽种.移柩.进人口.会亲友.除服.成服.ӳ5}I动土.破土.理发.出行.入宅.分居.安香.出火.祭祀.开光.解除.移徙.裁衣.开市.立券.祈福.求嗣.进人口.交易.纳财.纳畜.ӳ4E{栽种.作灶.针灸.出行.嫁娶.出火.拆卸.祭祀.祈福.开光.伐木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬. \  O  E z 9g>`,L: hӳ3'9诸事不宜.祭祀.结网.入殓.移柩.启攒.安葬.移柩.除服.成服.合寿木.余事勿取.,ӳ2'C诸事不宜.破屋.坏垣.余事勿取.^ӳ1'%诸事不宜.祭祀.求医.捕捉.栽种.塞穴.入殓.破土.安葬.移柩.余事勿取.)ӳ0)9嫁娶.移徙.祭祀.求嗣.开光.出行.伐木.作梁.出火.解除.拆卸.进人口.修造.动土.起基.安床.栽种.纳畜.入殓.破土.安葬.除服.成服.Nӳ/'诸事不宜.祭祀.作灶.沐浴.修饰垣墙.平治道涂.余事勿取.ӳ.嫁娶.纳财.祈福.安葬.修造.开市.交易.立券.动土.上梁.塑绘.开光.进人口.纳畜.补垣.塞穴.栽种.牧养.ӳ- %嫁娶.会亲友.进人口.出行.入宅.移徙.赴任.作灶.祭祀.解除.沐浴.理发.整手足甲.入殓.移柩.破土.安葬.扫舍.ӳ,Sm破土.置产.掘井.动土.安床.祭祀.祈福.求嗣.开光.出行.解除.上梁.造屋.移徙.安门.纳财.牧养.纳畜.安葬.启攒.入殓.ӳ+a_造屋.开光.理发.造船.掘井.作灶.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.移徙.动土.安床.入殓.破土.安葬.启攒.ӳ*}入宅.作梁.安门.伐木.修造.上梁.入殓.造屋.嫁娶.祭祀.祈福.求嗣.出行.动土.安床.掘井.破土.启攒.Fӳ))u动土.安葬.订盟.纳采.祭祀.祈福.安机械.作灶.纳畜.gӳ()5开光.针灸.嫁娶.订盟.纳采.祭祀.祈福.求医.治病.动土.移徙.入宅.破土.安葬.`ӳ')'动土.破土.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.移徙.入宅.启攒.安葬.Yӳ&So祭祀.祈福.探病.谢土.造桥.嫁娶.开市.立券.移徙.入宅.安机械.会亲友.经络.安门.安床.挂匾.拆卸.开仓.出货财.开池.栽种.纳畜.牧养.破土.安葬.启攒.移柩.入殓.立碑.4ӳ%)Q嫁娶.安葬.破屋.坏垣.解除.余事勿取.&ӳ$A嫁娶.斋醮.开市.出火.入宅.移徙.出行.作灶.安门.伐木.祭祀.祈福.解除.整手足甲.安床.沐浴.入殓.移柩.破土.启攒.安葬.谢土.Lӳ#o9嫁娶.作灶.出火.置产.嫁娶.入宅.安葬.纳采.订盟.会亲友.入学.祭祀.祈福.求嗣.开光.出行.解除.理发.动土.起基.开市.交易.立券.纳财.造仓.栽种.纳畜.牧养.<ӳ"EE动土.破土.治病.开渠.祭祀.嫁娶.畋猎.结网.Eӳ!}上梁.入宅.修造.动土.破土.祭祀.祈福.斋醮.嫁娶.纳采.订盟.造车器.开光.出行.拆卸.起基.安床.除服.成服.开市.交易.立券.栽种.牧养.入殓.移柩.启攒.QӲ[S_开市.入宅.出行.安床.作灶.修造.动土.安机械.祭祀.沐浴.解除.拆卸.治病.作灶.造屋.起基.开池.扫舍.造畜椆栖.开生坟.合寿木.安葬.破土.启攒.移柩.入殓.立碑.,ӲZM移徙.入宅.栽种.动土.破土.作灶.安葬.行丧.伐木.上梁.嫁娶.祭祀.出行.裁衣.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|ӲYa'开光.治病.嫁娶.掘井.破土.安葬.经络.祭祀.沐浴.补垣.塞穴.除服.成服.移柩.入殓.启攒.立碑.BӲXo%移徙.栽种.出行.行丧.破土.安葬.词讼.嫁娶.纳采.订盟.祭祀.祈福.求嗣.纳采.裁衣.冠笄.开光.安床.作梁.修造.动土.作灶.起基.上梁.造屋.纳畜.牧养.ӲW开渠.造船.安床.安葬.破土.出行.修坟.掘井.开市.开生坟.祭祀.冠笄.作灶.交易.纳财.栽种.结网.纳畜.牧养.进人口.VӲVKq掘井.伐木.纳畜.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.入殓.破土.谢土.安葬.EӲUSG入宅.移徙.作灶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.嫁娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.栽种.破土.启攒.安葬.立碑.,ӲT'C诸事不宜.破屋.坏垣.余事勿取.nӲS a嫁娶.开市.出火.作灶.置产.斋醮.入宅.移徙.安门.解除.祭祀.理发.入殓.安葬.破土. O.  c  Xw(_9]OӲRoQ嫁娶.栽种.行丧.理发.修坟.行丧.作灶.祭祀.祈福.求嗣.开光.伐木.出火.拆卸.入宅.安床.修造.动土.上梁.挂匾.纳畜.,ӲQ'C诸事不宜.祭祀.解除.余事勿取.ӲP}5作灶.动土.上梁.栽种.入宅.移徙.修造.祈福.嫁娶.开光.解除.安床.牧养.理发.开市.入殓.启攒.移柩.安葬.扫舍."ӲO G嫁娶.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.栽种.纳畜.入殓.启攒.除服.成服.tӲN_嫁娶.作灶.安葬.动土.词讼.作梁.伐木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^ӲM'%余事勿取.祭祀.入殓.破土.除服.成服.移柩.启攒.安葬.谢土.余事勿取.mӲL}o嫁娶.出行.安葬.入殓.入宅.作灶.冠笄.上梁.祭祀.祈福.求嗣.开光.开市.牧养.理发.iӲK}g安葬.经络.修坟.破土.开市.安床.启攒.立碑.祭祀.作灶.纳财.栽种.纳畜.进人口."ӲJ G嫁娶.开光.出行.祈福.求嗣.解除.拆卸.动土.修造.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.纳畜.入殓.移柩.安葬.ӲIE{伐木.祭祀.纳畜.祭祀.嫁娶.开光.出行.理发.作梁.出火.拆卸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.栽种.,ӲH'C诸事不宜.破屋.坏垣.余事勿取.ӲG}嫁娶.入宅.移徙.作灶.开市.交易.安门.栽种.祭祀.解除.沐浴.整手足甲.入殓.移柩.破土.启攒.安葬.ӲFoW嫁娶.破土.置产.栽种.安葬.修坟.行丧.入宅.移徙.安床.开光.祈福.求嗣.进人口.开市.交易.立券.出火.拆卸.修造.动土.jӲEa开仓.出货财.置产.安葬.动土.破土.掘井.栽种.嫁娶.祭祀.裁衣.结网.冠笄.沐浴.JӲD7o祈福.动土.破土.嫁娶.出行.开市.安床.入殓.启攒.安葬.CӲC)o开市.入宅.嫁娶.祭祀.祈福.斋醮.治病.破土.安葬.JӲB)}动土.安葬.嫁娶.纳采.出行.祭祀.祈福.解除.移徙.入宅.EӲAEW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿取.Ӳ@am安床.祈福.出行.安葬.行丧.开光.嫁娶.合帐.裁衣.冠笄.伐木.上梁.出火.拆卸.移徙.修造.动土.安门.纳财.筑堤.栽种.塞穴.7Ӳ?E9行丧.置产.入宅.安葬.嫁娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈福.求嗣.出行.解除.伐木.出火.入宅.拆卸.修造.动土.上梁.安床.栽种.破土.;Ӳ>EC入宅.出行.掘井.安葬.祭祀.结网.余事勿取.Ӳ=S_作灶.出火.祭祀.嫁娶.入宅.开市.交易.立券.挂匾.开光.解除.拆卸.动土.安床.修造.上梁.置产.栽种.破土.安葬.ӱv)k出火.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.EӱuKQ移徙.入宅.开仓.出货财.祭祀.破屋.坏垣.余事勿取.^ӱtS{嫁娶.开市.安葬.启攒.行丧.畋猎.捕捉.结网.取渔.祭祀.沐浴.余事勿取.Lӱs7q动土.掘井.破土.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.启攒.除服.成服.kӱr7/破土.出行.栽种.嫁娶.祭祀.理发.作灶.修饰垣墙.平治道涂.整手足甲.沐浴.冠笄.lӱqa纳采.订盟.安床.谢土.破土.动土.嫁娶.开光.祭祀.祈福.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上梁.造屋.作灶.出火.安香.补垣.塞穴.拆卸.放水.扫舍.造仓.造船.栽种.安葬.dӱpaw行丧.安葬.破土.作灶.伐木.斋醮.纳采.订盟.嫁娶.祭祀.祈福.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆卸.扫舍.放水.安香.安床.造船.开池.掘井.造畜椆栖.栽种.EӱoEW斋醮.移徙.入宅.动土.祭祀.教牛马.断蚁.余事勿取.ӱn-嫁娶.掘井.入宅.移徙.出火.出行.行丧.安葬.开光.理发.进人口.修造.动土.起基.安门.安床.栽种.筑堤.补垣.造畜椆栖.,ӱm'C诸事不宜.解除.坏垣.余事勿取. iUV  G ^  v^M~[Fi,ӱl'C诸事不宜.祭祀.作灶.余事勿取.&ӱk}_嫁娶.出火.伐木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.栽种.安床.拆卸.修造.动土.上梁.入殓.安葬.破土.除服.成服.ӱjoQ嫁娶.造桥.词讼.移徙.安门.作灶.栽种.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.经络.破土.,ӱi'C诸事不宜.破屋.坏垣.余事勿取.ӱhaQ嫁娶.开市.交易.行丧.安葬.修坟.祭祀.祈福.求嗣.开光.出行.伐木.出火.拆卸.修造.动土.起基.安床.入宅.移徙.)ӱg U嫁娶.祭祀.开光.祈福.求嗣.出行.出火.拆卸.动土.修造.进人口.入宅.移徙.安床.挂匾.交易.立券.栽种.纳畜.入殓.破土.启攒.安葬.rӱfa出行.安门.修造.嫁娶.上梁.入宅.祭祀.理发.修饰垣墙.平治道涂.沐浴.整手足甲.扫舍.&ӱe)3置产.安床.开光.求嗣.出行.解除.伐木.出火.拆卸.修造.上梁.起基.入宅.移徙.开市.交易.立券.栽种.牧养.入殓.安葬.除服.成服.ӱdE{安葬.行丧.伐木.作梁.嫁娶.祭祀.祈福.出火.开光.求嗣.出行.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.动土.,ӱc'C诸事不宜.祭祀.解除.余事勿取.ӱbE安葬.出行.祈福.栽种.求嗣.嫁娶.纳采.合帐.裁衣.冠笄.伐木.作梁.修造.动土.起基.竖柱.上梁.安门.作灶.筑堤.造畜椆栖.ӱaE{安葬.开市.交易.立券.嫁娶.开光.祭祀.祈福.求嗣.出行.解除.伐木.入宅.移徙.安床.出火.拆卸.修造.上梁.栽种.移柩.,ӱ`'C诸事不宜.祭祀.栽种.余事勿取.Jӱ_)}嫁娶.开光.开光.求医.治病.动土.上梁.入殓.破土.安葬.Jӱ^)}开光.开市.嫁娶.订盟.纳采.祭祀.祈福.入殓.破土.安葬.ӱ]''诸事不宜.诸事不宜.Bӱ\)m开光.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取.Oӱ[Kc开市.立券.造船.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.修造.进人口.入宅.移徙.安床.解除.挂匾.栽种.破土.谢土.入殓.移柩.安葬.SӱZSc作灶.嫁娶.移徙.入宅.理发.开市.交易.立券.挂匾.祭祀.祈福.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.启攒.除服.成服.立碑.ӱYSs伐木.安葬.安床.祭祀.祈福.纳采.嫁娶.裁衣.理发.出行.修造.动土.进人口.开市.交易.立券.挂匾.移徙.上梁.栽种.纳畜.ӱ 嫁娶.栽种.修造.动土.出行.伐木.作梁.安葬.谢土.开光.纳采.裁衣.冠笄.安床.作灶.进人口.造仓.塞穴.4ӱa作灶.安床.开仓.造屋.动土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.解除.出行.出火.入宅.移徙.栽种.纳畜.牧养.动土.破土.入殓.安葬.Wӱa_嫁娶.安葬.入宅.出行.动土.词讼.塞穴.断蚁.结网.畋猎.余事勿取.ӱ 安床.开渠.上梁.修造.开市.开光.入宅.移徙.安床.嫁娶.交易.立券.作厕.补垣.塞穴.畋猎.取渔.开生坟.Iӱ}%入宅.移徙.修造.安门.伐木.入殓.安葬.造屋.祭祀.祈福.求嗣.开光.出行.开市.交易.立券.栽种.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.启攒.修坟.ӱ ;祭祀.伐木.架马.安床.修造.动土.安葬.修坟.破土.解除.出行.纳采.冠笄.竖柱.上梁.移徙.作灶.进人口.入宅.纳畜.牧养.ӱ Sm嫁娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈福.开光.动土.安床.出行.栽种.纳畜.牧养.竖柱.上梁.解除.破土.:ӱ )[开市.立券.纳采.订盟.嫁娶.造车器.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.挂匾.入宅.移徙.安床.栽种.入殓.破土.安葬.除服.成服.:ӱ '_诸事不宜.破屋.坏垣.沐浴.解除.余事勿取.%ӱ  M祭祀.祈福.求嗣.开光.解除.合帐.冠笄.伐木.架马.作梁.修造.进人口.嫁娶.裁衣.合帐.安床.动土.起基.上梁.竖柱.放水.会亲友. !1;  R t & y 2 ^M c2*c)ӱ  U嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.解除.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上梁.安葬.破土.谢土.{ӱ} 嫁娶.移徙.伐木.作梁.安床.祭祀.祈福.造屋.沐浴.平治道涂.扫舍.入殓.破土.安葬.除服.成服.Bӱa5塞穴.上梁.动土.伐木.安葬.词讼.进人口.会亲友.ӱE嫁娶.安床.探病.作灶.开市.交易.立券.挂匾.开光.出行.拆卸.进人口.入宅.移柩.动土.安门.上梁.栽种.破土.修坟.安葬.,ӱ'C诸事不宜.解除.扫舍.余事勿取.ӱ7{开光.掘井.开仓.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.动土.入宅.移徙.安床.作灶.塞穴.栽种.破土.安葬.ӱ'纳畜.入宅.移徙.安葬.探病.伐木.上梁.安门.入殓.动土.嫁娶.祭祀.祈福.求嗣.开光.开市.交易.立券.安床.出行.拆卸.,ӱ'C诸事不宜.结网.解除.余事勿取."ӱas入宅.移徙.理发.出火.嫁娶.出行.开市.交易.立券.祭祀.祈福.开光.伐木.进人口.安床.拆卸.修造.动土.栽种.破土.移柩.安葬.%ӱ M嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.动土.上梁.出火.进人口.入宅.移徙.安床.栽种.纳畜.牧养.竖柱.安门.修造.解除.会亲友.:Ӱ'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.*Ӱ~C嫁娶.上梁.修造.拆卸.架马.入宅.伐木.动土.出火.开柱眼.祭祀.开光.出行.解除.塑绘.裁衣.入殓.移柩.破土.启攒.安葬.除服.成服."Ӱ} G嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.安门.开市.交易.立券.挂匾.栽种.破土.安葬.]Ӱ|'#诸事不宜.沐浴.平治道涂.扫舍.入殓.移柩.破土.启攒.安葬.余事勿取.EӰ{)s开市.安葬.订盟.纳采.会亲友.安床.作灶.造畜椆栖.`Ӱz)'移徙.入宅.嫁娶.订盟.纳采.出行.祭祀.祈福.斋醮.动土.上梁.破土.安葬.,Ӱy'C诸事不宜.塞穴.结网.余事勿取.AӰxEO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿取.2Ӱwa移徙.入宅.作灶.理发.开光.安门.祭祀.出行.修造.动土.合帐.造畜椆栖.安床.移徙.入殓.移柩.破土.启攒.安葬.开生坟.合寿木.补垣.塞穴.ӰvE 作灶.安葬.祭祀.入殓.安香.出火.纳采.订盟.嫁娶.开市.立券.交易.挂匾.开光.出行.解除.安床.栽种.置产.拆卸.修造.动土.BӰu)m嫁娶.入宅.祭祀.修门.取渔.纳财.纳畜.余事勿取.'Ӱ.'5纳采.问名.订盟.嫁娶.入宅.开仓.出火.动土.破土.纳畜.伐木.开市.交易.立券.挂匾.祭祀.开光.祈福.求嗣.安床.解除.修造.安葬.IӰ-){祈福.安葬.沐浴.塞穴.畋猎.结网.取渔.扫舍.余事勿取.QӰ,) 嫁娶.开市.祭祀.沐浴.解除.破屋.坏垣.求医.治病.余事勿取.Ӱ+)k动土.破土.祭祀.解除.入殓.移柩.启攒.安葬.整手足甲.捕捉.畋猎.取渔.除服.成服.扫舍.谢土.斋醮.fӰ*S 斋醮.开光.嫁娶.入宅.上梁.沐浴.祭祀.解除.安葬.破土.谢土.移柩.余事勿取.]Ӱ)7嫁娶.安床.治病.祭祀.作灶.畋猎.结网.修饰垣墙.平治道涂.余事勿取.Ӱ(}祈福.出火.置产.动土.破土.安葬.修造.上梁.置产.入宅.开光.出行.交易.塞穴.嫁娶.理发.开市.安床. Ӱ'o;修坟.造桥.作灶.出行.安葬.造屋.入宅.祭祀.祈福.求嗣.开光.纳采.订盟.解除.栽种.纳畜.牧养.扫舍.进人口.LӰ&Ee开光.伐木.安葬.破土.祭祀.出行.教牛马.扫舍.余事勿取.Ӱ%am嫁娶.掘井.探病.开市.开光.栽种.祭祀.裁衣.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.启攒.安葬.谢土.除服.成服.Ӱ$E{祭祀.入殓.安葬.探病.嫁娶.祈福.求嗣.开光.出行.解除.拆卸.出火.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,Ӱ#'C诸事不宜.解除.破屋.余事勿取. ]!  G &  j[7K w)~ g(]Ӱ" +祭祀.祈福.求嗣.开光.解除.纳采.冠笄.出火.拆卸.进人口.安床.动土.上梁.造庙.掘井.开池.入殓.移柩.安葬.破土.,Ӱ!'C诸事不宜.塞穴.扫舍.余事勿取.:Ӱ '_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.Ӱ}Q动土.破土.纳财.掘井.挂匾.开市.伐木.交易.祭祀.祈福.求嗣.开光.解除.出火.拆卸.入宅.安床.修造.安门.纳畜.启攒.安葬.Ӱ 进人口.出行.嫁娶.置产.安床.赴任.安葬.作灶.祭祀.祈福.开光.解除.动土.纳财.交易.纳畜.扫舍.FӰ'w诸事不宜.祭祀.平治道涂.解除.修饰垣墙.余事勿取.Ӱ}I谢土.祈福.上梁.作灶.斋醮.修造.入宅.安门.纳采.嫁娶.开光.出行.理发.会亲友.开市.安床.栽种.牧养.入殓.移柩.启攒.%Ӱ}]嫁娶.纳财.安葬.出行.开市.立券.作灶.栽种.祭祀.祈福.开光.求嗣.解除.伐木.出火.入宅.移徙.安床.拆卸.修造.动土.造畜椆栖.IӰ'}诸事不宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿取.|Ӱ7Q词讼.开光.开市.嫁娶.出行.合帐.冠笄.安床.除服.成服.作灶.交易.立券.入殓.移柩.破土.安葬.ӰaW祈福.入殓.祭祀.作灶.安葬.探病.嫁娶.开光.出行.出火.拆卸.进人口.开市.立券.交易.挂匾.入宅.移徙.安床.栽种.,Ӱ'C诸事不宜.解除.坏垣.余事勿取.Ӱ' 诸事不宜..Ӱ77嫁娶.入宅.安葬.沐浴.结网.取渔.:Ӱ'_诸事不宜.祭祀.求医.治病.解除.余事勿取.;Ӱ)_开光.嫁娶.破屋.坏垣.求医.治病.余事勿取.&Ӱ}_开市.交易.作灶.纳财.上梁.安床.造屋.造船.嫁娶.开光.祭祀.祈福.求嗣.出行.出火.入宅.移徙.解除.栽种.伐木.破土.谢土.安葬.ӰE动土.伐木.安葬.行丧.嫁娶.祭祀.开光.祈福.求嗣.出行.出火.进人口.入宅.移徙.安床.拆卸.修造.安门.挂匾.纳财.扫舍.~ӯK开仓.出货财.造屋.作灶.开市.交易.立券.栽种.祭祀.祈福.嫁娶.冠笄.修饰垣墙.置产.平治道涂.ӯJ'动土.破土.安葬.行丧.赴任.出行.嫁娶.入宅.移徙.谢土.词讼.纳财.开市.立券.交易.开光.安床.上梁.造屋.修造.起基.kӯIE!嫁娶.作灶.掘井.安葬.塞穴.整手足甲.解除.捕捉.畋猎.结网.余事勿取.诸事不宜.ӯHEy祈福.动土.移徙.入宅.祭祀.祈福.求嗣.斋醮.嫁娶.冠笄.出行.开市.交易.会亲友.教牛马.除服.成服.启攒.安葬.移柩.ӯG}C嫁娶.祭祀.开光.出行.出火.移徙.入宅.安门.安床.伐木.拆卸.修造.动土.上梁.立券.交易.栽种.纳畜.牧养.入殓.安葬.|ӯFEC合帐.开市.安葬.入殓.嫁娶.祭祀.开光.祈福.求嗣.出火.入宅.移徙.安床.拆卸.动土.破土.谢土.lӯEK置产.伐木.纳畜.造畜椆栖.安葬.破土.作梁.作灶.开生坟.理发.冠笄.嫁娶.进人口.*ӯD W嫁娶.行丧.架马.作梁.理发.牧养.安葬.纳畜.伐木.开市.立券.交易.挂匾.祭祀.祈福.开光.入宅.移徙.安床.拆卸.动土.上梁.进人口. ӯCEe开光.作灶.斋醮.安葬.嫁娶.祭祀.出行.冠笄.立券.交易.进人口.开市.移徙.修造.动土.安床.入殓.移柩.破土.:ӯB'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.^ӯA)#入宅.安门.祭祀.开光.塑绘.祈福.斋醮.裁衣.合帐.冠笄.嫁娶.拆卸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.理发.伐木.架马.作梁.出火.修造.起基.定磉.放水.赴任.]ӯ@)!伐木.作梁.祭祀.会亲友.订盟.裁衣.合帐.安机械.拆卸.上梁.安门.入殓.除服.成服.移柩.启攒.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.经络.<ӯ?EE栽种.造屋.作灶.入宅.祭祀.嫁娶.纳婿.安葬.Yӯ>E}出行.斋醮.安葬.嫁娶.开光.塑绘.求嗣.纳采.裁衣.合帐.冠笄.安机械.作梁.开柱眼.安门.安床.造仓.祭祀.会亲友.祈福.经络.纳财.开市.立券.交易.入学.求嗣.理发.架马. i H  U & B !Y*4ӯ=E5安门.作灶.安葬.嫁娶.塞穴.诸事不宜.Xӯ<E}掘井.动土.作灶.栽种.祭祀.出行.嫁娶.冠笄.安床.入殓.移柩.安葬.hӯ;E祭祀.开光.嫁娶.入宅.订盟.纳采.裁衣.合帐.冠笄.安机械.拆卸.安床.入殓.除服.成服.移柩.破土.启攒.安葬.修坟.立碑.经络.交易.立券.纳财.筑堤.造仓.补垣.塞穴.纳畜.伐木.架马.^ӯ:E作灶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈福.塑绘.斋醮.沐浴.拆卸.起基.入宅.安香.造庙.移柩.谢土.除服.成服.入学.习艺.出行.竖柱.上梁.掘井.求嗣.解除.伐木.Xӯ9E}作灶.开市.安葬.作梁.裁衣.合帐.冠笄.嫁娶.纳婿.安床.入殓.纳财.4ӯ8E3嫁娶.栽种.伐木.安葬.祭祀.开光.塑绘.纳采.裁衣.拆卸.安床.起基.动土.竖柱.上梁.移徙.入宅.安香.开市.立券.挂匾.沐浴.出行.求嗣.安门.Kӯ7/w开光.出货财.祭祀.动土.上梁.订盟.纳采.嫁娶.安机械.拆卸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.赴任.出行.移徙.祈福.求嗣.解除.造仓.进人口.-ӯ6'E诸事不宜.破屋.坏垣.求医.治病.0ӯ5E+安床.开市.立券.作灶.祭祀.祈福.斋醮.订盟.纳采.裁衣.合帐.拆卸.修造.动土.上梁.起基.移柩.安葬.谢土.沐浴.扫舍.开柱眼.伐木.出火.:ӯ4)[栽种.伐木.祭祀.嫁娶.祈福.纳采.裁衣.合帐.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲友.挂匾.交易.立券.纳财.造仓.放水.^ӯ3E造屋.作灶.治病.探病.冠笄.入殓.除服.成服.移柩.平治道涂.修饰垣墙.%ӯ2E出行.嫁娶.入宅.安葬.开光.塑绘.裁衣.冠笄.伐木.拆卸.竖柱.上梁.开仓.会亲友.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5ӯ1E7栽种.作灶.安葬.嫁娶.祭祀.扫舍.塞穴.7ӯ0S+移徙.入宅.出火.作灶.掘井.祭祀.祈福.求嗣.开光.嫁娶.出行.解除.伐木.拆卸.进人口.安床.动土.起基.上梁.栽种.纳畜.破土.谢土.启攒.安葬. ӯ/}'入宅.出行.移徙.祭祀.嫁娶.动土.破土.作灶.开光.解除.伐木.竖柱.上梁.交易.立券.纳畜.入殓.移柩.安葬.|ӯ.} 栽种.开光.出行.针灸.嫁娶.入宅.动土.破土.祭祀.祈福.求嗣.纳畜.入殓.启攒.谢土.除服.成服.ӯ-{I入宅.安葬.伐木.作梁.纳畜.造畜椆栖.作灶.嫁娶.祭祀.开光.祈福.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲友.{Ӯe%a嫁娶.词讼.行丧.安葬.牧养.伐木.作梁.开市.纳畜.造畜椆栖.祭祀.沐浴.理发.作灶.结网.栽种._Ӯd)%嫁娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除服.成服.余事勿取. Ӯcu3开市.嫁娶.安床.会亲友.入宅.作灶.上梁.祭祀.斋醮.沐浴.开生坟.除服.成服.移柩.入殓.破土.安葬.合寿木.;Ӯb)_开市.嫁娶.求医.治病.破屋.坏垣.余事勿取.XӮaaa开市.作灶.安床.入宅.上梁.裁衣.动土.入殓.嫁娶.移柩.安葬.破土.)Ӯ`S开光.造屋.动土.作灶.栽种.造车器.纳采.订盟.祭祀.祈福.求嗣.移徙.出行.开市.出火.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?Ӯ_'i诸事不宜.修饰垣墙.平治道涂.祭祀.余事勿取.%Ӯ^S入宅.作灶.治病.安葬.移徙.嫁娶.冠笄.纳采.出行.会亲友.上梁.安机械.安床.牧养.畋猎.祭祀.祈福.开光.修造.安门.造屋.起基.=Ӯ]'c诸事不宜.嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.启攒.除服.成服.;Ӯ\'a诸事不宜.裁衣.伐木.作梁.纳财.交易.立券.nӮ[75词讼.出火.入宅.祭祀.合帐.裁衣.经络.伐木.作梁.安床.作灶.入殓.安葬.启攒.移柩.ӮZoC入宅.作灶.伐木.安葬.出火.出行.纳畜.嫁娶.开光.祈福.求嗣.解除.动土.安床.栽种.开池.掘井.祭祀.破土.启攒. m<4 W o %  `  Pm.(f&A"ӮY}W嫁娶.安葬.破土.作梁.纳畜.牧养.行丧.作灶.移徙.祭祀.开光.祈福.出行.解除.进人口.雇庸.安床.动土.起基.上梁.安门.解除.BӮX'o诸事不宜.结网.入殓.除服.成服.移柩.安葬.破土.ӮW7 嫁娶.作灶.安床.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.入宅.移徙.上梁.挂匾.开池.入殓.安葬.破土.启攒.;ӮV'a余事勿取.祭祀.解除.治病.破屋.坏垣.扫舍.ӮUE{开市.立券.理发.作灶.嫁娶.祭祀.祈福.出行.解除.出火.拆卸.动土.入宅.移徙.安床.上梁.栽种.纳畜.破土.启攒.安葬.ӮT')诸事不宜.解除.沐浴.fӮSC栽种.出行.祈福.行丧.纳畜.安葬.安门.伐木.作梁.牧养.作灶.解除.平治道涂.ӮR5入宅.移徙.出火.分居.安香.作灶.开市.交易.立券.安葬.动土.伐木.嫁娶.开光.求嗣.会亲友.安床.牧养.塑绘.针灸.ӮQ)掘井.词讼.嫁娶.安床.开光.出行.祭祀.动土.出火.解除.会亲友.开市.交易.立券.挂匾.入宅.移徙.拆卸.破土.启攒.安葬.ӮPoQ嫁娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.裁衣.竖柱.上梁.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.启攒.uӮO o开光.掘井.针灸.出行.嫁娶.入宅.移徙.作灶.动土.祭祀.祈福.求嗣.入殓.启攒.安葬.移柩.ӮNE 入殓.安葬.作灶.入宅.祭祀.沐浴.祈福.求嗣.斋醮.订盟.纳采.裁衣.冠笄.开市.立券.交易.纳财.沐浴.除服.谢土.出行.移柩.>ӮMEG安葬.作灶.伐木.作梁.祭祀.求嗣.沐浴.酬神.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造仓.开池.经络.纳财.开市.立券.交易.结网.取渔.纳畜.捕捉.XӮLE}嫁娶.上梁.入宅.作灶.取渔.入殓.除服.成服.移柩.破土.安葬.立碑.nӮKS嫁娶.入宅.作灶.纳采.订盟.祭祀.斋醮.入殓.破土.启攒.安葬.修坟.立碑.除服.成服.sӮJS#祈福.造庙.祭祀.安床.谢土.嫁娶.纳采.订盟.开光.安香.出火.纳财.开市.交易.立券.裁衣.造屋.起基.修造.动土.安门.移徙.入宅.栽种.牧养.畋猎.掘井.开池.安葬.破土.入殓.除服.成服.立碑.BӮI7_开市.动土.破土.祭祀.破屋.坏垣.解除.余事勿取.4Ӯo 伐木.开市.交易.上梁.作灶.安门.造屋.嫁娶.纳采.订盟.入宅.移徙.安床.祭祀.祈福.开光.出行.解除.出火.拆卸.动土.纳畜.谢土.安葬.破土.#ӮC开市.行丧.栽种.出行.出货财.安葬.置产.词讼.治病.嫁娶.祭祀.开光.伐木.出火.拆卸.入宅.移徙.修造.动土.上梁.安床.纳畜.]Ӯ}O移徙.入宅.掘井.造庙.栽种.针灸.治病.开池.解除.平治道涂.余事勿取.Ӯ}C掘井.祈福.谢土.动土.入宅.上梁.修造.作灶.嫁娶.出行.理发.安床.启攒.安葬.修坟.开市.交易.立券.纳财.开池.牧养.&ӭE入宅.安门.祭祀.谢土.沐浴.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.启攒.修坟.立碑.移柩.Yӭ~E嫁娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.针灸.余事勿取.ӭ} 置产.嫁娶.出行.开光.栽种.动土.破土.入宅.治病.安床.裁衣.交易.立券.入殓.移柩.安葬.除服.成服.&ӭ| O嫁娶.栽种.安葬.理发.造庙.作灶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈福.求嗣.动土.,ӭ{'C诸事不宜.祭祀.解除.余事勿取.^ӭz'%余事勿取.祭祀.入殓.破土.除服.成服.启攒.安葬.修坟.立碑.余事勿取.ӭyE 安床.伐木.祈福.纳畜.嫁娶.开市.交易.立券.开光.出行.出火.拆卸.修造.入宅.移徙.动土.破土.移柩.安葬.启攒.除服.成服.,ӭx'C诸事不宜.破屋.坏垣.余事勿取. ӭw}-掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.开光.入宅.移徙.安床.修造.动土.进人口. b  <  Nk.W2Kaӭv}A掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.动土.会亲友.起基.造仓.纳畜.牧养.作厕.进人口.Fӭu'w余事勿取.祭祀.解除.修饰垣墙.平治道涂.余事勿取.ӭt'修造.上梁.入宅.祈福.探病.掘井.动土.安门.安葬.作灶.开市.交易.立券.纳财.开池.补垣.嫁娶.纳采.纳畜.取渔.安床.ӭsE 嫁娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.伐木.作梁.出火.入宅.移徙.安床.拆卸.动土.上梁.栽种.纳畜.安葬.=ӭr'e余事勿取.解除.扫舍.祭祀.教牛马.余事勿取.ӭqEk作灶.掘井.嫁娶.入宅.祭祀.祈福.斋醮.沐浴.安床.安机械.造车器.入殓.移柩.启攒.安葬.立碑.合帐.经络.交易. ӭpE]栽种.嫁娶.入殓.安葬.祭祀.出行.沐浴.裁衣.祈福.斋醮.订盟.纳采.嫁娶.安机械.开市.立券.安碓磑.纳畜.|ӭoEC开仓.造屋.安葬.安床.祭祀.祈福.斋醮.塑绘.开光.除服.成服.入殓.作灶.嫁娶.捕捉.畋猎.纳财.Qӭn) 破土.伐木.入殓.除服.成服.移柩.启攒.安葬.立碑.余事勿取.uӭm)Q入宅.安床.塑绘.开光.出行.订盟.纳采.除服.成服.嫁娶.纳婿.入殓.移柩.启攒.安葬.立碑.3ӭl'Q诸事不宜.解除.破屋.坏垣.余事勿取.ZӭkE造屋.开市.作灶.入宅.祭祀.会亲友.出行.订盟.纳采.沐浴.修造.动土.祈福.斋醮.嫁娶.拆卸.安床.入殓.移柩.安葬.谢土.赴任.裁衣.竖柱.上梁.伐木.捕捉.栽种.破土.安门.%ӭjE出行.治病.安葬.开市.会亲友.纳采.进人口.修造.动土.竖柱.上梁.祭祀.开光.塑绘.祈福.斋醮.嫁娶.安床.移徙.入宅.安香.纳畜.]ӭiE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ӭhSy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qӭga嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SӭfSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ӭeS;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.?aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.>5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.=伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,<'C诸事不宜.解除.扫舍.余事勿取.;EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.::'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,9'C诸事不宜.祭祀.解除.余事勿取.8a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.27'O诸事不宜.祭祀.修饰垣墙.余事勿取. 65入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.5a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种. "^Qz B  Z ) 6b ~NOyH-^;4'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. 3aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#25嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m137伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,0'C诸事不宜.解除.坏垣.余事勿取./a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3.'Q诸事不宜.治病.破屋.坏垣.余事勿取.R-) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅.",)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.++'A诸事不宜.平治道涂.余事勿取.N*)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J))}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=(Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5')S入宅.安葬.出行.沐浴.理发.补垣.塞穴.f&S 置产.造船.开光.掘井.作灶.合帐.裁衣.嫁娶.安床.入殓.移柩.破土.造畜椆栖.?%m伐木.上梁.修造.入殓.理发.会亲友.入宅.安门.安葬.作灶.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆卸.破土.e$a{嫁娶.入宅.开市.安床.破土.修坟.沐浴.扫舍.捕捉.畋猎.解除.塞穴.余事勿取. #gC嫁娶.进人口.入宅.移徙.出火.出行.祭祀.祈福.求嗣.开光.解除.伐木.拆卸.修造.栽种.纳畜.安葬.修坟.立碑.c"Y}上梁.开仓.出货财.造屋.造船.纳采.订盟.嫁娶.祭祀.祈福.雕刻.移徙.开市.入宅.出行.动土.会亲友.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;!)_嫁娶.安葬.破屋.坏垣.求医.治病.余事勿取.ZQs嫁娶.动土.造船.开池.掘井.出行.修造.入宅.上梁.移徙.安葬.破土.作灶.开市.祭祀.理发.针灸.解除.进人口.整手足甲.Y7{栽种.掘井.置产.嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.开市.交易.立券.挂匾.伐木.入宅.移徙.安床.安葬.Xa_祈福.祭祀.伐木.掘井.作灶.谢土.嫁娶.开光.出行.出火.拆卸.修造.动土.入宅.移徙.安床.上梁.开市.交易.立券.栽种. W5u嫁娶.冠笄.出行.祈福.安葬.伐木.入宅.移徙.出火.栽种.动土.上梁.开光.裁衣.安门.会亲友.安床.结网.理发. V)置产.安床.嫁娶.开光.出行.解除.出火.拆卸.修造.进人口.动土.入宅.移徙.栽种.纳畜.掘井.安葬.除服.成服.,U'C余事勿取.祭祀.沐浴.余事勿取.T}入宅.移徙.嫁娶.掘井.作灶.出火.进人口.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.启攒.%S'5余事勿取.解除.余事勿取.qRo安床.开市.交易.出货财.安葬.修坟.嫁娶.作灶.祭祀.沐浴.结网.移柩.入殓.除服.成服.QaW入宅.作灶.词讼.移徙.出行.赴任.祭祀.祈福.求嗣.开光.解除.理发.会亲友.栽种.纳畜.牧养.安葬.修坟.立碑.启攒.P)探病.安葬.嫁娶.祭祀.开光.出火.出行.拆卸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.栽种.纳畜.,O'C诸事不宜.破屋.坏垣.余事勿取. N5嫁娶.开市.出火.栽种.破土.动土.入宅.移徙.安香.分居.掘井.作灶.开光.解除.拆卸.修造.动土.安床.纳畜.安葬.启攒.入殓.)M U嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.出行.拆卸.进人口.入宅.移徙.安床.栽种.动土.修造.纳畜.入殓.安葬.立碑.除服.成服. Np<  [ SNntJNL}Q栽种.破土.置产.祭祀.嫁娶.动土.作灶.祈福.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.K''诸事不宜.诸事不宜.VJ!开市.祭祀.祈福.斋醮.塑绘.开光.订盟.纳采.裁衣.冠笄.嫁娶.拆卸.入宅.安香.入殓.移柩.理发.安葬.修坟.谢土.赴任.移徙.沐浴.治病.破土.启攒.整手足甲.入学.作梁.SIEs嫁娶.动土.安葬.作灶.祭祀.沐浴.出行.冠笄.进人口.余事勿取.`H)'入宅.作灶.祈福.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.G''诸事不宜.诸事不宜.,F'C诸事不宜.沐浴.扫舍.余事勿取.jEE嫁娶.入宅.治病.赴任.祭祀.祈福.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造畜椆栖.入殓.移柩.启攒.安葬.谢土.除服.成服.会亲友.竖柱.上梁.经络.开市.交易.立券.纳财.纳畜.筑堤.^D)#造屋.治病.祭祀.解除.祈福.开光.塑绘.斋醮.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.入殓.除服.成服.移柩.启攒.安床.赴任.出行.移徙.竖柱.上梁.伐木.栽种.破土.安葬.纳畜.CoO祈福.斋醮.纳采.订盟.嫁娶.入宅.安葬.祭祀.求嗣.冠笄.进人口.会亲友.安门.安床.经络.纳财.牧养.畋猎.放水.割蜜.PBS_嫁娶.入宅.上梁.出行.安葬.祭祀.沐浴.破屋.坏垣.余事勿取.A}Q入宅.移徙.掘井.理发.伐木.交易.开市.作灶.嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.修造.动土.上梁.安床.纳畜.入殓.破土.e@a{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.启攒.安葬.除服.成服.余事勿取.q?a嫁娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治道涂.造畜椆栖.余事勿取.E>'q开市.入宅.出行.嫁娶.修坟.祈福.动土.入宅.安门.谢土.上梁.纳采.订盟.会亲友.沐浴.理发.裁衣.冠笄.安床.除服.成服.启攒.移柩.安葬.会亲友.开生坟.=}A嫁娶.安葬.行丧.词讼.造桥.作灶.破土.动土.祭祀.开光.出行.解除.理发.伐木.出火.拆卸.上梁.合脊.安床.造畜椆栖.wa]伐木.行丧.破土.嫁娶.安葬.开渠.祭祀.祈福.求嗣.开光.出行.解除.上梁.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.v)开光.栽种.嫁娶.祭祀.祈福.求嗣.动土.安床.扫舍.入殓.移柩.破土.启攒.安葬.作灶.整手足甲.补垣.除服.成服.u)安床.安葬.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.进人口.开市.交易.立券.挂匾.纳财.入宅.移徙.栽种.破土.谢土.'C诸事不宜.破屋.坏垣.余事勿取.=}嫁娶.入宅.移徙.作灶.开市.交易.安门.栽种.祭祀.解除.沐浴.整手足甲.入殓.移柩.破土.启攒.安葬.<oW嫁娶.破土.置产.栽种.安葬.修坟.行丧.入宅.移徙.安床.开光.祈福.求嗣.进人口.开市.交易.立券.出火.拆卸.修造.动土.j;a开仓.出货财.置产.安葬.动土.破土.掘井.栽种.嫁娶.祭祀.裁衣.结网.冠笄.沐浴.J:7o祈福.动土.破土.嫁娶.出行.开市.安床.入殓.启攒.安葬.C9)o开市.入宅.嫁娶.祭祀.祈福.斋醮.治病.破土.安葬. #[C t  U / gO}FJ8)}动土.安葬.嫁娶.纳采.出行.祭祀.祈福.解除.移徙.入宅.^7'%诸事不宜.补垣.塞穴.结网.入殓.除服.成服.移柩.安葬.启攒.余事勿取.J6)}造庙.安葬.嫁娶.开市.立券.祭祀.祈福.动土.移徙.入宅..5)E开市.破土.祭祀.作灶.纳财.捕捉.R4赴任.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.Y3)祭祀.祈福.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.2)k出火.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.E1KQ移徙.入宅.开仓.出货财.祭祀.破屋.坏垣.余事勿取.^0S{嫁娶.开市.安葬.启攒.行丧.畋猎.捕捉.结网.取渔.祭祀.沐浴.余事勿取.L/7q动土.掘井.破土.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.启攒.除服.成服.k.7/破土.出行.栽种.嫁娶.祭祀.理发.作灶.修饰垣墙.平治道涂.整手足甲.沐浴.冠笄.l-a纳采.订盟.安床.谢土.破土.动土.嫁娶.开光.祭祀.祈福.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上梁.造屋.作灶.出火.安香.补垣.塞穴.拆卸.放水.扫舍.造仓.造船.栽种.安葬.dfaw行丧.安葬.破土.作灶.伐木.斋醮.纳采.订盟.嫁娶.祭祀.祈福.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆卸.扫舍.放水.安香.安床.造船.开池.掘井.造畜椆栖.栽种.EeEW斋醮.移徙.入宅.动土.祭祀.教牛马.断蚁.余事勿取.d-嫁娶.掘井.入宅.移徙.出火.出行.行丧.安葬.开光.理发.进人口.修造.动土.起基.安门.安床.栽种.筑堤.补垣.造畜椆栖.,c'C诸事不宜.解除.坏垣.余事勿取.,b'C诸事不宜.祭祀.作灶.余事勿取.&a}_嫁娶.出火.伐木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.栽种.安床.拆卸.修造.动土.上梁.入殓.安葬.破土.除服.成服.`oQ嫁娶.造桥.词讼.移徙.安门.作灶.栽种.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.经络.破土.,_'C诸事不宜.破屋.坏垣.余事勿取.^aQ嫁娶.开市.交易.行丧.安葬.修坟.祭祀.祈福.求嗣.开光.出行.伐木.出火.拆卸.修造.动土.起基.安床.入宅.移徙.)] U嫁娶.祭祀.开光.祈福.求嗣.出行.出火.拆卸.动土.修造.进人口.入宅.移徙.安床.挂匾.交易.立券.栽种.纳畜.入殓.破土.启攒.安葬.r\a出行.安门.修造.嫁娶.上梁.入宅.祭祀.理发.修饰垣墙.平治道涂.沐浴.整手足甲.扫舍.&[)3置产.安床.开光.求嗣.出行.解除.伐木.出火.拆卸.修造.上梁.起基.入宅.移徙.开市.交易.立券.栽种.牧养.入殓.安葬.除服.成服.ZE{安葬.行丧.伐木.作梁.嫁娶.祭祀.祈福.出火.开光.求嗣.出行.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.动土.,Y'C诸事不宜.祭祀.解除.余事勿取.XE安葬.出行.祈福.栽种.求嗣.嫁娶.纳采.合帐.裁衣.冠笄.伐木.作梁.修造.动土.起基.竖柱.上梁.安门.作灶.筑堤.造畜椆栖.WE{安葬.开市.交易.立券.嫁娶.开光.祭祀.祈福.求嗣.出行.解除.伐木.入宅.移徙.安床.出火.拆卸.修造.上梁.栽种.移柩.,V'C诸事不宜.祭祀.栽种.余事勿取.JU)}嫁娶.开光.开光.求医.治病.动土.上梁.入殓.破土.安葬.JT)}开光.开市.嫁娶.订盟.纳采.祭祀.祈福.入殓.破土.安葬.S''诸事不宜.诸事不宜.RR) 开市.安葬.订盟.纳采.出行.祭祀.祈福.修造.动土.移徙.入宅.`Q5作灶.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.;P)_行丧.安葬.嫁娶.祭祀.沐浴.扫舍.修饰垣墙. !~L e4 # { 9  i9BD.~YO)动土.破土.嫁娶.纳采.出行.求医.治病.开市.移徙.入宅.启攒.安葬.MN7u移徙.入宅.安葬.订盟.纳采.出行.祈福.斋醮.安床.会亲友.4Ma作灶.安床.开仓.造屋.动土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.解除.出行.出火.入宅.移徙.栽种.纳畜.牧养.动土.破土.入殓.安葬.WLa_嫁娶.安葬.入宅.出行.动土.词讼.塞穴.断蚁.结网.畋猎.余事勿取.K 安床.开渠.上梁.修造.开市.开光.入宅.移徙.安床.嫁娶.交易.立券.作厕.补垣.塞穴.畋猎.取渔.开生坟.IJ}%入宅.移徙.修造.安门.伐木.入殓.安葬.造屋.祭祀.祈福.求嗣.开光.出行.开市.交易.立券.栽种.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.启攒.修坟.I ;祭祀.伐木.架马.安床.修造.动土.安葬.修坟.破土.解除.出行.纳采.冠笄.竖柱.上梁.移徙.作灶.进人口.入宅.纳畜.牧养.Sm嫁娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈福.开光.动土.安床.出行.栽种.纳畜.牧养.竖柱.上梁.解除.破土.:)[开市.立券.纳采.订盟.嫁娶.造车器.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.挂匾.入宅.移徙.安床.栽种.入殓.破土.安葬.除服.成服.:'_诸事不宜.破屋.坏垣.沐浴.解除.余事勿取.% M祭祀.祈福.求嗣.开光.解除.合帐.冠笄.伐木.架马.作梁.修造.进人口.嫁娶.裁衣.合帐.安床.动土.起基.上梁.竖柱.放水.会亲友.) U嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.解除.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上梁.安葬.破土.谢土.{~} 嫁娶.移徙.伐木.作梁.安床.祭祀.祈福.造屋.沐浴.平治道涂.扫舍.入殓.破土.安葬.除服.成服.B}a5塞穴.上梁.动土.伐木.安葬.词讼.进人口.会亲友.|E嫁娶.安床.探病.作灶.开市.交易.立券.挂匾.开光.出行.拆卸.进人口.入宅.移柩.动土.安门.上梁.栽种.破土.修坟.安葬.,{'C诸事不宜.解除.扫舍.余事勿取.z7{开光.掘井.开仓.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.动土.入宅.移徙.安床.作灶.塞穴.栽种.破土.安葬.y'纳畜.入宅.移徙.安葬.探病.伐木.上梁.安门.入殓.动土.嫁娶.祭祀.祈福.求嗣.开光.开市.交易.立券.安床.出行.拆卸.,x'C诸事不宜.结网.解除.余事勿取."was入宅.移徙.理发.出火.嫁娶.出行.开市.交易.立券.祭祀.祈福.开光.伐木.进人口.安床.拆卸.修造.动土.栽种.破土.移柩.安葬.%v M嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.动土.上梁.出火.进人口.入宅.移徙.安床.栽种.纳畜.牧养.竖柱.安门.修造.解除.会亲友.:u'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.*tC嫁娶.上梁.修造.拆卸.架马.入宅.伐木.动土.出火.开柱眼.祭祀.开光.出行.解除.塑绘.裁衣.入殓.移柩.破土.启攒.安葬.除服.成服."s G嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.安门.开市.交易.立券.挂匾.栽种.破土.安葬.]r'#诸事不宜.沐浴.平治道涂.扫舍.入殓.移柩.破土.启攒.安葬.余事勿取.Eq)s开市.安葬.订盟.纳采.会亲友.安床.作灶.造畜椆栖.`p)'移徙.入宅.嫁娶.订盟.纳采.出行.祭祀.祈福.斋醮.动土.上梁.破土.安葬.,o'C诸事不宜.塞穴.结网.余事勿取.Yn)赴任.捕捉.嫁娶.裁衣.祭祀.出行.安床.作灶.移徙.入宅.破土.安葬.Cm)o嫁娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.&EG作灶.掘井.动土.栽种.祈福.开光.塑绘.酬神.订盟.纳采.裁衣.安床.开市.立券.入殓.除服.成服.移柩.启攒.安葬.立碑.赴任.会亲友.出行.交易.竖柱.%S_作灶.开光.嫁娶.开市.入宅.订盟.纳采.冠笄.拆卸.修造.动土.安床.入殓.除服.成服.移柩.安葬.破土.启攒.造仓.W$)栽种.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.嫁娶.裁衣.动土.起基.出火.拆卸.移徙.入宅.安香.修造.竖柱.上梁.纳畜.牧养.祈福.求嗣.解除.伐木.定磉.造屋.安门.C#SE嫁娶.入宅.移徙.作灶.安葬.祭祀.沐浴.捕捉.栽种.4"E3造庙.嫁娶.伐木.安葬.祭祀.开光.塑绘.订盟.纳采.合帐.冠笄.拆卸.动土.起基.上梁.入宅.安香.开市.立券.纳财.沐浴.求嗣.出火.竖柱.安门._!)%嫁娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除服.成服.余事勿取. u3开市.嫁娶.安床.会亲友.入宅.作灶.上梁.祭祀.斋醮.沐浴.开生坟.除服.成服.移柩.入殓.破土.安葬.合寿木. b  * d L  ^k;)_开市.嫁娶.求医.治病.破屋.坏垣.余事勿取.Xaa开市.作灶.安床.入宅.上梁.裁衣.动土.入殓.嫁娶.移柩.安葬.破土.)S开光.造屋.动土.作灶.栽种.造车器.纳采.订盟.祭祀.祈福.求嗣.移徙.出行.开市.出火.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?T'i诸事不宜.修饰垣墙.平治道涂.祭祀.余事勿取.%SS入宅.作灶.治病.安葬.移徙.嫁娶.冠笄.纳采.出行.会亲友.上梁.安机械.安床.牧养.畋猎.祭祀.祈福.开光.修造.安门.造屋.起基.=R'c诸事不宜.嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.启攒.除服.成服.;Q'a诸事不宜.裁衣.伐木.作梁.纳财.交易.立券.nP75词讼.出火.入宅.祭祀.合帐.裁衣.经络.伐木.作梁.安床.作灶.入殓.安葬.启攒.移柩.OoC入宅.作灶.伐木.安葬.出火.出行.纳畜.嫁娶.开光.祈福.求嗣.解除.动土.安床.栽种.开池.掘井.祭祀.破土.启攒."N}W嫁娶.安葬.破土.作梁.纳畜.牧养.行丧.作灶.移徙.祭祀.开光.祈福.出行.解除.进人口.雇庸.安床.动土.起基.上梁.安门.解除.BM'o诸事不宜.结网.入殓.除服.成服.移柩.安葬.破土.L7 嫁娶.作灶.安床.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.入宅.移徙.上梁.挂匾.开池.入殓.安葬.破土.启攒.;K'a余事勿取.祭祀.解除.治病.破屋.坏垣.扫舍.JE{开市.立券.理发.作灶.嫁娶.祭祀.祈福.出行.解除.出火.拆卸.动土.入宅.移徙.安床.上梁.栽种.纳畜.破土.启攒.安葬.I')诸事不宜.解除.沐浴.fHC栽种.出行.祈福.行丧.纳畜.安葬.安门.伐木.作梁.牧养.作灶.解除.平治道涂.G5入宅.移徙.出火.分居.安香.作灶.开市.交易.立券.安葬.动土.伐木.嫁娶.开光.求嗣.会亲友.安床.牧养.塑绘.针灸.F)掘井.词讼.嫁娶.安床.开光.出行.祭祀.动土.出火.解除.会亲友.开市.交易.立券.挂匾.入宅.移徙.拆卸.破土.启攒.安葬.EoQ嫁娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.裁衣.竖柱.上梁.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.启攒.uD o开光.掘井.针灸.出行.嫁娶.入宅.移徙.作灶.动土.祭祀.祈福.求嗣.入殓.启攒.安葬.移柩.CE 入殓.安葬.作灶.入宅.祭祀.沐浴.祈福.求嗣.斋醮.订盟.纳采.裁衣.冠笄.开市.立券.交易.纳财.沐浴.除服.谢土.出行.移柩.>BEG安葬.作灶.伐木.作梁.祭祀.求嗣.沐浴.酬神.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造仓.开池.经络.纳财.开市.立券.交易.结网.取渔.纳畜.捕捉.XAE}嫁娶.上梁.入宅.作灶.取渔.入殓.除服.成服.移柩.破土.安葬.立碑.;@)]作灶.安床.祈福.求嗣.斋醮.塑绘.开光.订盟.纳采.嫁娶.动土.入宅.安香.移柩.安葬.谢土.出行.沐浴.修造.竖柱.上梁.纳财.破土.解除.安门.放水.?')诸事不宜.求医.破屋.B>EO栽种.动土.开市.作灶.祭祀.祈福.酬神.订盟.纳采.冠笄.裁衣.合帐.嫁娶.安床.移徙.入宅.安香.入殓.移柩.启攒.安葬.解除.取渔.捕捉.伐木.安门.出火.]=E造屋.栽种.安葬.作灶.塑绘.开光.酬神.斋醮.订盟.纳采.裁衣.合帐.拆卸.动土.上梁.安床.安香.造庙.挂匾.会亲友.进人口.出行.修造.纳财.伐木.放水.出火.纳畜.沐浴.安门.A<_5祭祀.祈福.安葬.安门.余事勿取.作灶.平治道涂.];}O移徙.入宅.掘井.造庙.栽种.针灸.治病.开池.解除.平治道涂.余事勿取.:}C掘井.祈福.谢土.动土.入宅.上梁.修造.作灶.嫁娶.出行.理发.安床.启攒.安葬.修坟.开市.交易.立券.纳财.开池.牧养. ja i !  <  4$L \T#w&9E入宅.安门.祭祀.谢土.沐浴.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.启攒.修坟.立碑.移柩.YsE嫁娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.针灸.余事勿取.r 置产.嫁娶.出行.开光.栽种.动土.破土.入宅.治病.安床.裁衣.交易.立券.入殓.移柩.安葬.除服.成服.&q O嫁娶.栽种.安葬.理发.造庙.作灶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈福.求嗣.动土.,p'C诸事不宜.祭祀.解除.余事勿取.^o'%余事勿取.祭祀.入殓.破土.除服.成服.启攒.安葬.修坟.立碑.余事勿取.nE 安床.伐木.祈福.纳畜.嫁娶.开市.交易.立券.开光.出行.出火.拆卸.修造.入宅.移徙.动土.破土.移柩.安葬.启攒.除服.成服.,m'C诸事不宜.破屋.坏垣.余事勿取. l}-掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.开光.入宅.移徙.安床.修造.动土.进人口.k}A掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.动土.会亲友.起基.造仓.纳畜.牧养.作厕.进人口.Fj'w余事勿取.祭祀.解除.修饰垣墙.平治道涂.余事勿取.i'修造.上梁.入宅.祈福.探病.掘井.动土.安门.安葬.作灶.开市.交易.立券.纳财.开池.补垣.嫁娶.纳采.纳畜.取渔.安床.hE 嫁娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.伐木.作梁.出火.入宅.移徙.安床.拆卸.动土.上梁.栽种.纳畜.安葬.=g'e余事勿取.解除.扫舍.祭祀.教牛马.余事勿取.fEk作灶.掘井.嫁娶.入宅.祭祀.祈福.斋醮.沐浴.安床.安机械.造车器.入殓.移柩.启攒.安葬.立碑.合帐.经络.交易. eE]栽种.嫁娶.入殓.安葬.祭祀.出行.沐浴.裁衣.祈福.斋醮.订盟.纳采.嫁娶.安机械.开市.立券.安碓磑.纳畜.|dEC开仓.造屋.安葬.安床.祭祀.祈福.斋醮.塑绘.开光.除服.成服.入殓.作灶.嫁娶.捕捉.畋猎.纳财.Qc) 破土.伐木.入殓.除服.成服.移柩.启攒.安葬.立碑.余事勿取.ub)Q入宅.安床.塑绘.开光.出行.订盟.纳采.除服.成服.嫁娶.纳婿.入殓.移柩.启攒.安葬.立碑.3a'Q诸事不宜.解除.破屋.坏垣.余事勿取.Z`E造屋.开市.作灶.入宅.祭祀.会亲友.出行.订盟.纳采.沐浴.修造.动土.祈福.斋醮.嫁娶.拆卸.安床.入殓.移柩.安葬.谢土.赴任.裁衣.竖柱.上梁.伐木.捕捉.栽种.破土.安门.%_E出行.治病.安葬.开市.会亲友.纳采.进人口.修造.动土.竖柱.上梁.祭祀.开光.塑绘.祈福.斋醮.嫁娶.安床.移徙.入宅.安香.纳畜.U^Ew嫁娶.移徙.入宅.开光.修饰垣墙.平治道涂.入殓.移柩.余事勿取.{]EA作灶.掘井.谢土.入宅.出行.嫁娶.订盟.纳采.入殓.安床.启攒.安葬.祭祀.裁衣.会亲友.进人口.B\EO作灶.祭祀.上梁.出行.沐浴.解除.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.移徙.入宅.除服.成服.移柩.破土.启攒.安葬.扫舍.修坟.伐木.纳财.交易.立券.,['C诸事不宜.祭祀.解除.余事勿取.AZEM开仓.嫁娶.移徙.入宅.祭祀.沐浴.祈福.斋醮.订盟.纳采.裁衣.拆卸.起基.竖柱.上梁.安床.入殓.除服.成服.移柩.启攒.挂匾.求嗣.出行.合帐.造畜椆栖.bYE嫁娶.入殓.安葬.出行.塑绘.开光.沐浴.冠笄.会亲友.作灶.放水.造畜椆栖.X5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.W伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马. &fB ~ M   I~/u4xAH,V'C诸事不宜.解除.扫舍.余事勿取.UEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:Қ/'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,Қ.'C诸事不宜.祭祀.解除.余事勿取.Қ-a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2Қ,'O诸事不宜.祭祀.修饰垣墙.余事勿取. Қ+5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.Қ*a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;Қ)'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. Қ(aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#Қ'5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mҚ&37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,Қ%'C诸事不宜.解除.坏垣.余事勿取.Қ$a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3Қ#'Q诸事不宜.治病.破屋.坏垣.余事勿取.RҚ") 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."Қ!)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+Қ 'A诸事不宜.平治道涂.余事勿取.NҚ)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JҚ)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ҚQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5Қ)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.JҚ)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<Қ)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uҚ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ҚSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:Қ'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.;Қ)_嫁娶.安葬.破屋.坏垣.求医.治病.余事勿取.ҚQs嫁娶.动土.造船.开池.掘井.出行.修造.入宅.上梁.移徙.安葬.破土.作灶.开市.祭祀.理发.针灸.解除.进人口.整手足甲.Қ7{栽种.掘井.置产.嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.开市.交易.立券.挂匾.伐木.入宅.移徙.安床.安葬.Қa_祈福.祭祀.伐木.掘井.作灶.谢土.嫁娶.开光.出行.出火.拆卸.修造.动土.入宅.移徙.安床.上梁.开市.交易.立券.栽种. Қ5u嫁娶.冠笄.出行.祈福.安葬.伐木.入宅.移徙.出火.栽种.动土.上梁.开光.裁衣.安门.会亲友.安床.结网.理发. Қ)置产.安床.嫁娶.开光.出行.解除.出火.拆卸.修造.进人口.动土.入宅.移徙.栽种.纳畜.掘井.安葬.除服.成服.,ҙJ'C余事勿取.祭祀.沐浴.余事勿取.ҙI}入宅.移徙.嫁娶.掘井.作灶.出火.进人口.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.启攒.%ҙH'5余事勿取.解除.余事勿取.qҙGo安床.开市.交易.出货财.安葬.修坟.嫁娶.作灶.祭祀.沐浴.结网.移柩.入殓.除服.成服.ҙFaW入宅.作灶.词讼.移徙.出行.赴任.祭祀.祈福.求嗣.开光.解除.理发.会亲友.栽种.纳畜.牧养.安葬.修坟.立碑.启攒. vQ I  / 3a}\9|})RҙE)探病.安葬.嫁娶.祭祀.开光.出火.出行.拆卸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.栽种.纳畜.,ҙD'C诸事不宜.破屋.坏垣.余事勿取. ҙC5嫁娶.开市.出火.栽种.破土.动土.入宅.移徙.安香.分居.掘井.作灶.开光.解除.拆卸.修造.动土.安床.纳畜.安葬.启攒.入殓.)ҙB U嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.出行.拆卸.进人口.入宅.移徙.安床.栽种.动土.修造.纳畜.入殓.安葬.立碑.除服.成服.ҙA}Q栽种.破土.置产.祭祀.嫁娶.动土.作灶.祈福.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.ҙ@''诸事不宜.诸事不宜.Vҙ?!开市.祭祀.祈福.斋醮.塑绘.开光.订盟.纳采.裁衣.冠笄.嫁娶.拆卸.入宅.安香.入殓.移柩.理发.安葬.修坟.谢土.赴任.移徙.沐浴.治病.破土.启攒.整手足甲.入学.作梁.Sҙ>Es嫁娶.动土.安葬.作灶.祭祀.沐浴.出行.冠笄.进人口.余事勿取.`ҙ=)'入宅.作灶.祈福.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.ҙ<''诸事不宜.诸事不宜.,ҙ;'C诸事不宜.沐浴.扫舍.余事勿取.jҙ:E嫁娶.入宅.治病.赴任.祭祀.祈福.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造畜椆栖.入殓.移柩.启攒.安葬.谢土.除服.成服.会亲友.竖柱.上梁.经络.开市.交易.立券.纳财.纳畜.筑堤.^ҙ9)#造屋.治病.祭祀.解除.祈福.开光.塑绘.斋醮.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.入殓.除服.成服.移柩.启攒.安床.赴任.出行.移徙.竖柱.上梁.伐木.栽种.破土.安葬.纳畜.:ҙ8'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取. ҙ7Ee开市.交易.破土.作灶.祭祀.塑绘.开光.订盟.纳采.嫁娶.安床.进人口.入殓.除服.成服.移柩.启攒.安葬.立碑.%ҙ6)1作灶.治病.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.赴任.进人口.会亲友.ҙ5EK作灶.治病.伐木.作梁.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.除服.成服.入殓.移柩.安葬.谢土.赴任.会亲友.进人口.出行.竖柱.上梁.经络.开市.交易.立券.纳财.开仓.Fҙ4EY嫁娶.入宅.安门.移徙.理发.会亲友.补垣.塞穴.结网.Zҙ3E入宅.作灶.安床.开仓.祭祀.会亲友.嫁娶.沐浴.修造.动土.祈福.开光.塑绘.出行.订盟.纳采.裁衣.入殓.除服.成服.移柩.启攒.赴任.竖柱.上梁.纳财.扫舍.栽种.纳畜.伐木.ҙ2}A嫁娶.安葬.行丧.词讼.造桥.作灶.破土.动土.祭祀.开光.出行.解除.理发.伐木.出火.拆卸.上梁.合脊.安床.造畜椆栖.ҙ1a]伐木.行丧.破土.嫁娶.安葬.开渠.祭祀.祈福.求嗣.开光.出行.解除.上梁.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.ҙ0)开光.栽种.嫁娶.祭祀.祈福.求嗣.动土.安床.扫舍.入殓.移柩.破土.启攒.安葬.作灶.整手足甲.补垣.除服.成服.ҙ/)安床.安葬.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.进人口.开市.交易.立券.挂匾.纳财.入宅.移徙.栽种.破土.谢土.<ҙ.EE安葬.开市.修坟.立碑.嫁娶.祭祀.作灶.纳财. ҙ-}'纳畜.伐木.置产.作梁.行丧.安葬.修坟.立碑.嫁娶.祭祀.开市.开光.出行.入宅.移徙.出火.拆卸.修造.安床.{Ҙgo上梁.作灶.伐木.出行.安葬.安门.理发.嫁娶.求嗣.纳采.进人口.纳财.结网.纳畜.牧养.会亲友.:Ҙf'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.aҘe'+余事勿取.祭祀.入殓.移柩.开生坟.破土.启攒.安葬.除服.成服.余事勿取.HҘd'{余事勿取.入殓.破土.安葬.启攒.除服.成服.余事勿取.8Ҙc'[诸事不宜.造畜椆栖.平治道涂.余事勿取. #^W&p V H 8 7  78Rb$w8T%^Ҙb -嫁娶.作灶.出火.出行.入宅.移徙.安床.祈福.上梁.开市.交易.立券.纳财.会亲友.开光.理发.入殓.移柩.安葬.启攒.Ҙa}5安葬.修坟.作灶.破土.造庙.动土.嫁娶.纳采.祭祀.祈福.求嗣.开光.出行.解除.移徙.伐木.安床.纳畜.出火.拆卸.Ҙ`gG动土.伐木.作梁.行丧.安葬.开生坟.祭祀.出行.裁衣.冠笄.会亲友.造畜椆栖.嫁娶.竖柱.上梁.移徙.纳财.纳畜.Ҙ_g[嫁娶.开光.会亲友.掘井.安门.栽种.祭祀.解除.裁衣.理发.安床.作灶.造畜椆栖.放水.筑堤.补垣.塞穴.整手足甲.扫舍. Ҙ^}'嫁娶.作灶.修坟.安门.入宅.立碑.安葬.安床.祭祀.祈福.求嗣.开光.开市.出行.解除.动土.起基.置产.栽种.,Ҙ]'C诸事不宜.祭祀.塞穴.余事勿取.gҘ\)5斋醮.安门.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.BҘ[)m祈福.安葬.订盟.纳采.会亲友.安机械.纳财.牧养.:ҘZ'_余事勿取.祭祀.解除.破屋.坏垣.余事勿取.`ҘY)'开市.赴任.嫁娶.订盟.纳采.出行.祭祀.祈福.动土.移徙.入宅.破土.安葬.CҘX)o移徙.入宅.入殓.除服.成服.移柩.破土.启攒.安葬.9ҘW']余事勿取.祭祀.结网.造畜椆栖.余事勿取.?ҘV7Y开市.动土.破土.开光.针灸.会亲友.启攒.安葬.8ҘU)Y嫁娶.入宅.沐浴.理发.入学.习艺.进人口.&ҘT)5行丧.安葬.作灶.造畜椆栖.?ҘS)g动土.上梁.嫁娶.祭祀.安机械.入殓.破土.安葬.ҘREm作灶.入殓.安葬.安床.祭祀.祈福.斋醮.沐浴.竖柱.订盟.纳采.嫁娶.拆卸.入宅.移柩.启攒.谢土.赴任.出火.纳畜.JҘQEa栽种.动土.安葬.开市.祭祀.作灶.入殓.除服.成服.畋猎.yҘPE=开仓.冠笄.伐木.作梁.祭祀.塑绘.开光.祈福.斋醮.出行.订盟.纳采.裁衣.嫁娶.拆卸.修造.安床.入宅.安香.入殓.启攒.安葬.谢土.赴任.会亲友.进人口.出行.移徙.上梁.经络.开市.交易.立券.纳财.#ҘO5嫁娶.破土.进人口.出行.入宅.移徙.出火.纳畜.词讼.安葬.开市.交易.立券.纳财.挂匾.栽种.祭祀.祈福.开光.拆卸.动土.安床.aҘNS开市.掘井.开渠.造桥.造船.嫁娶.纳采.订盟.祭祀.开光.出行.理发.作梁.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.移徙.拆卸.挂匾.栽种.纳畜.破土.安葬.入殓.除服.成服.:ҘM'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.,ҘL'C诸事不宜.解除.坏垣.余事勿取.0ҘK c嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.栽种.纳畜.入殓.安葬.除服.成服.FҘJ'w诸事不宜.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.|ҘIa'作灶.行丧.理发.乘船.嫁娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出火.上梁. ҘSO伐木.行丧.作灶.作梁.安葬.嫁娶.祭祀.塑绘.开光.出行.解除.理发.整手足甲.动土.安床.开池.放水.扫舍.3Ҙ'Q诸事不宜.祭祀.出行.扫舍.余事勿取.Ҙo'掘井.祈福.安床.开市.入宅.挂匾.开光.嫁娶.出行.伐木.拆卸.修造.动土.移徙.安葬.破土.修坟.立碑.Hҗ'{余事勿取.祭祀.立碑.修坟.启攒.除服.成服.余事勿取.mҗ~a 探病.开渠.安葬.伐木.作灶.入宅.祭祀.理发.会亲友.进人口.嫁娶.针灸.入殓.移柩."җ}}W嫁娶.立碑.出行.伐木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人口.入宅.安床.出火.拆卸.修造.动土.栽种.0җ| c嫁娶.祈福.求嗣.出行.出火.拆卸.修造.动土.上梁.开光.进人口.开市.交易.立券.挂匾.安床.入宅.移徙.栽种.伐木.入殓.破土.除服.成服.,җ{'C诸事不宜.破屋.坏垣.余事勿取.#җz5嫁娶.出行.安床.作灶.祭祀.入宅.移徙.出火.进人口.置产.开光.解除.起基.动土.拆卸.上梁.立碑.修坟.安葬.破土.启攒.移柩. ob. N < _ (.k G%o0җy c嫁娶.祭祀.祈福.求嗣.沐浴.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.入宅.移徙.安床.栽种.纳畜.入殓.安葬.启攒.除服.成服.WҗxE{嫁娶.移徙.入宅.开市.沐浴.入殓.移柩.除服.成服.破土.平治道涂.җw''诸事不宜.诸事不宜.:җv'_诸事不宜.祭祀.沐浴.赴任.出行.余事勿取._җuoa动土.冠笄.移徙.入宅.开市.竖柱.上梁.祭祀.出行.成服.除服.沐浴.入殓. җtEe安床.开光.开市.交易.祭祀.裁衣.冠笄.嫁娶.安机械.拆卸.动土.起基.移徙.入宅.入殓.启攒.安葬.造仓.经络.4җsE5入殓.安葬.开市.交易.祭祀.诸事不宜.{җrEA移徙.入宅.作灶.安葬.祭祀.裁衣.冠笄.嫁娶.纳婿.会亲友.除服.成服.移柩.捕捉.进人口.入殓.uҗq)Q定磉.安葬.祭祀.赴任.动土.上梁.开光.塑绘.冠笄.拆卸.起基.安床.开市.立券.赴任.经络.7җpE9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.嫁娶.拆卸.起基.安床.入宅.开市.入殓.除服.成服.移柩.破土.谢土.挂匾.开柱眼.交易.IҗoE_移徙.入宅.出行.栽种.祭祀.沐浴.破屋.坏垣.余事勿取.җnEW作灶.祭祀.入宅.嫁娶.祭祀.冠笄.会亲友.拆卸.起基.除服.成服.移柩.启攒.安葬.沐浴.捕捉.开光.塑绘.Aҗm)i入宅.伐木.祭祀.会亲友.纳采.嫁娶.开光.塑绘.斋醮.安香.开市.立券.除服.成服.入殓.移柩.安葬.赴任.进人口.出行.裁衣.修造.动土.上梁.经络.交易.:җl)]嫁娶.入宅.祭祀.沐浴.修饰垣墙.平治道涂.җk)e嫁娶.安葬.祭祀.沐浴.解除.理发.冠笄.安机械.作灶.造仓.开市.开池.作厕.补垣.塞穴.断蚁.结网.Iҗj 伐木.谢土.行丧.祭祀.作灶.动土.破土.安葬.祈福.纳采.订盟.开光.出行.解除.安香.出火.拆卸.入宅.移徙.修造.上梁.安床.栽种.纳畜.会亲友.安机械.经络.#җiQ嫁娶.出行.进人口.作灶.入宅.移徙.栽种.赴任.祭祀.解除.拆卸.修造.动土.起基.上梁.安床.安门.开渠.开池.入殓.破土.启攒.}җh_+安床.动土.安葬.开生坟.合寿木.祭祀.裁衣.安门.纳财.扫舍.出行.进人口.作灶.纳畜.造畜椆栖.җg}开光.出行.修造.上梁.入宅.安门.作灶.裁衣.祭祀.动土.筑堤.开池.会亲友.塞穴.入殓.移柩.破土.安葬.%җf}]造屋.入殓.安葬.伐木.入宅.移徙.置产.纳畜.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.安床.栽种.移柩.进人口.会亲友.除服.成服.җe}I动土.破土.理发.出行.入宅.分居.安香.出火.祭祀.开光.解除.移徙.裁衣.开市.立券.祈福.求嗣.进人口.交易.纳财.纳畜.җE{栽种.作灶.针灸.出行.嫁娶.出火.拆卸.祭祀.祈福.开光.伐木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.hҗ'9诸事不宜.祭祀.结网.入殓.移柩.启攒.安葬.移柩.除服.成服.合寿木.余事勿取.,җ'C诸事不宜.破屋.坏垣.余事勿取.^җ'%诸事不宜.祭祀.求医.捕捉.栽种.塞穴.入殓.破土.安葬.移柩.余事勿取.)җ)9嫁娶.移徙.祭祀.求嗣.开光.出行.伐木.作梁.出火.解除.拆卸.进人口.修造.动土.起基.安床.栽种.纳畜.入殓.破土.安葬.除服.成服.Nҗ'诸事不宜.祭祀.作灶.沐浴.修饰垣墙.平治道涂.余事勿取.җ嫁娶.纳财.祈福.安葬.修造.开市.交易.立券.动土.上梁.塑绘.开光.进人口.纳畜.补垣.塞穴.栽种.牧养.җ %嫁娶.会亲友.进人口.出行.入宅.移徙.赴任.作灶.祭祀.解除.沐浴.理发.整手足甲.入殓.移柩.破土.安葬.扫舍.җSm破土.置产.掘井.动土.安床.祭祀.祈福.求嗣.开光.出行.解除.上梁.造屋.移徙.安门.纳财.牧养.纳畜.安葬.启攒.入殓.җa_造屋.开光.理发.造船.掘井.作灶.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.移徙.动土.安床.入殓.破土.安葬.启攒. #iY  Z z  _ .!E<Co0_җ}入宅.作梁.安门.伐木.修造.上梁.入殓.造屋.嫁娶.祭祀.祈福.求嗣.出行.动土.安床.掘井.破土.启攒.Fҗ)u动土.安葬.订盟.纳采.祭祀.祈福.安机械.作灶.纳畜.gҗ)5开光.针灸.嫁娶.订盟.纳采.祭祀.祈福.求医.治病.动土.移徙.入宅.破土.安葬.`җ)'动土.破土.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.移徙.入宅.启攒.安葬.:җ'_诸事不宜.沐浴.治病.破屋.坏垣.余事勿取.5җ)S嫁娶.入宅.捕捉.结网.入殓.破土.安葬.Cҗ)o开市.安葬.嫁娶.祭祀.祈福.斋醮.动土.移徙.入宅.MҗCi嫁娶.祈福.余事勿取.沐浴.修饰垣墙.平治道涂.余事勿取.Nҗ )开市.安葬.订盟.纳采.出行.会亲友.修造.上梁.移徙.入宅.Rҗ ) 嫁娶.开市.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.安葬.Jҗ 7o作灶.动土.破土.嫁娶.出行.纳畜.祭祀.入殓.启攒.安葬.Cҗ )o动土.破土.嫁娶.祭祀.祈福.斋醮.作灶.移徙.入宅. җ  祈福.出行.订盟.纳采.嫁娶.裁衣.动土.安床.放水.开市.掘井.交易.立券.栽种.开渠.除服.成服.移柩.破土.җ 3塑绘.开光.解除.订盟.纳采.嫁娶.出火.修造.动土.移徙.入宅.拆卸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养. җ 祈福.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生坟.入殓.除服.成服.移柩.破土.安葬.VҗKq掘井.伐木.纳畜.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.入殓.破土.谢土.安葬.EҗSG入宅.移徙.作灶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.嫁娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.栽种.破土.启攒.安葬.立碑.,җ'C诸事不宜.破屋.坏垣.余事勿取.nҗ a嫁娶.开市.出火.作灶.置产.斋醮.入宅.移徙.安门.解除.祭祀.理发.入殓.安葬.破土.җoQ嫁娶.栽种.行丧.理发.修坟.行丧.作灶.祭祀.祈福.求嗣.开光.伐木.出火.拆卸.入宅.安床.修造.动土.上梁.挂匾.纳畜.,җ'C诸事不宜.祭祀.解除.余事勿取.Җ;}5作灶.动土.上梁.栽种.入宅.移徙.修造.祈福.嫁娶.开光.解除.安床.牧养.理发.开市.入殓.启攒.移柩.安葬.扫舍."Җ: G嫁娶.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.栽种.纳畜.入殓.启攒.除服.成服.tҖ9_嫁娶.作灶.安葬.动土.词讼.作梁.伐木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^Җ8'%余事勿取.祭祀.入殓.破土.除服.成服.移柩.启攒.安葬.谢土.余事勿取.mҖ7}o嫁娶.出行.安葬.入殓.入宅.作灶.冠笄.上梁.祭祀.祈福.求嗣.开光.开市.牧养.理发.iҖ6}g安葬.经络.修坟.破土.开市.安床.启攒.立碑.祭祀.作灶.纳财.栽种.纳畜.进人口."Җ5 G嫁娶.开光.出行.祈福.求嗣.解除.拆卸.动土.修造.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.纳畜.入殓.移柩.安葬.Җ4E{伐木.祭祀.纳畜.祭祀.嫁娶.开光.出行.理发.作梁.出火.拆卸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.栽种.,Җ3'C诸事不宜.破屋.坏垣.余事勿取.Җ2}嫁娶.入宅.移徙.作灶.开市.交易.安门.栽种.祭祀.解除.沐浴.整手足甲.入殓.移柩.破土.启攒.安葬.Җ1oW嫁娶.破土.置产.栽种.安葬.修坟.行丧.入宅.移徙.安床.开光.祈福.求嗣.进人口.开市.交易.立券.出火.拆卸.修造.动土.jҖ0a开仓.出货财.置产.安葬.动土.破土.掘井.栽种.嫁娶.祭祀.裁衣.结网.冠笄.沐浴.JҖ/7o祈福.动土.破土.嫁娶.出行.开市.安床.入殓.启攒.安葬.CҖ.)o开市.入宅.嫁娶.祭祀.祈福.斋醮.治病.破土.安葬. &xmj R !  d >v,)nay*xJҖ-)}动土.安葬.嫁娶.纳采.出行.祭祀.祈福.解除.移徙.入宅.^Җ,'%诸事不宜.补垣.塞穴.结网.入殓.除服.成服.移柩.安葬.启攒.余事勿取.JҖ+)}造庙.安葬.嫁娶.开市.立券.祭祀.祈福.动土.移徙.入宅..Җ*)E开市.破土.祭祀.作灶.纳财.捕捉.RҖ)赴任.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.YҖ()祭祀.祈福.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.3Җ''Q诸事不宜.祭祀.破屋.坏垣.余事勿取.JҖ&7o嫁娶.移徙.入宅.纳采.祭祀.祈福.解除.动土.破土.安葬.,Җ%'C诸事不宜.沐浴.扫舍.余事勿取.PҖ$' 余事勿取.祭祀.冠笄.嫁娶.捕捉.结网.畋猎.取渔.余事勿取.Җ# !塑绘.出行.冠笄.嫁娶.进人口.裁衣.纳婿.造畜椆栖.交易.立券.牧养.开生坟.入殓.除服.成服.移柩.安葬.启攒.lҖ"a纳采.订盟.安床.谢土.破土.动土.嫁娶.开光.祭祀.祈福.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上梁.造屋.作灶.出火.安香.补垣.塞穴.拆卸.放水.扫舍.造仓.造船.栽种.安葬.dҖ!aw行丧.安葬.破土.作灶.伐木.斋醮.纳采.订盟.嫁娶.祭祀.祈福.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆卸.扫舍.放水.安香.安床.造船.开池.掘井.造畜椆栖.栽种.EҖ EW斋醮.移徙.入宅.动土.祭祀.教牛马.断蚁.余事勿取.Җ-嫁娶.掘井.入宅.移徙.出火.出行.行丧.安葬.开光.理发.进人口.修造.动土.起基.安门.安床.栽种.筑堤.补垣.造畜椆栖.,Җ'C诸事不宜.解除.坏垣.余事勿取.,Җ'C诸事不宜.祭祀.作灶.余事勿取.&ҕV}_嫁娶.出火.伐木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.栽种.安床.拆卸.修造.动土.上梁.入殓.安葬.破土.除服.成服.ҕUoQ嫁娶.造桥.词讼.移徙.安门.作灶.栽种.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.经络.破土.,ҕT'C诸事不宜.破屋.坏垣.余事勿取.ҕSaQ嫁娶.开市.交易.行丧.安葬.修坟.祭祀.祈福.求嗣.开光.出行.伐木.出火.拆卸.修造.动土.起基.安床.入宅.移徙.)ҕR U嫁娶.祭祀.开光.祈福.求嗣.出行.出火.拆卸.动土.修造.进人口.入宅.移徙.安床.挂匾.交易.立券.栽种.纳畜.入殓.破土.启攒.安葬.rҕQa出行.安门.修造.嫁娶.上梁.入宅.祭祀.理发.修饰垣墙.平治道涂.沐浴.整手足甲.扫舍.&ҕP)3置产.安床.开光.求嗣.出行.解除.伐木.出火.拆卸.修造.上梁.起基.入宅.移徙.开市.交易.立券.栽种.牧养.入殓.安葬.除服.成服.ҕOE{安葬.行丧.伐木.作梁.嫁娶.祭祀.祈福.出火.开光.求嗣.出行.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.动土.,ҕN'C诸事不宜.祭祀.解除.余事勿取.ҕME安葬.出行.祈福.栽种.求嗣.嫁娶.纳采.合帐.裁衣.冠笄.伐木.作梁.修造.动土.起基.竖柱.上梁.安门.作灶.筑堤.造畜椆栖.ҕLE{安葬.开市.交易.立券.嫁娶.开光.祭祀.祈福.求嗣.出行.解除.伐木.入宅.移徙.安床.出火.拆卸.修造.上梁.栽种.移柩.,ҕK'C诸事不宜.祭祀.栽种.余事勿取.JҕJ)}嫁娶.开光.开光.求医.治病.动土.上梁.入殓.破土.安葬.JҕI)}开光.开市.嫁娶.订盟.纳采.祭祀.祈福.入殓.破土.安葬.ҕH''诸事不宜.诸事不宜.RҕG) 开市.安葬.订盟.纳采.出行.祭祀.祈福.修造.动土.移徙.入宅.`ҕF5作灶.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.;ҕE)_行丧.安葬.嫁娶.祭祀.沐浴.扫舍.修饰垣墙.YҕD)动土.破土.嫁娶.纳采.出行.求医.治病.开市.移徙.入宅.启攒.安葬.MҕC7u移徙.入宅.安葬.订盟.纳采.出行.祈福.斋醮.安床.会亲友.<ҕB7S上梁.动土.破土.祭祀.入殓.移柩.启攒.安葬. $Ucz ! I U  Q gX'?e&f2U5ҕA)S嫁娶.安葬.裁衣.作灶.移徙.入宅.纳畜.Yҕ@)开市.安门.嫁娶.纳采.祭祀.祈福.求医.治病.出行.动土.移徙.入宅.@ҕ?'k诸事不宜.祭祀.捕捉.取渔.修饰垣墙.余事勿取.ҕ> #订盟.纳采.会亲友.进人口.雕刻.拆卸.修造.动土.起基.开市.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.ҕ=Sm嫁娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈福.开光.动土.安床.出行.栽种.纳畜.牧养.竖柱.上梁.解除.破土.:ҕ<)[开市.立券.纳采.订盟.嫁娶.造车器.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.挂匾.入宅.移徙.安床.栽种.入殓.破土.安葬.除服.成服.:ҕ;'_诸事不宜.破屋.坏垣.沐浴.解除.余事勿取.%ҕ: M祭祀.祈福.求嗣.开光.解除.合帐.冠笄.伐木.架马.作梁.修造.进人口.嫁娶.裁衣.合帐.安床.动土.起基.上梁.竖柱.放水.会亲友.)ҕ9 U嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.解除.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上梁.安葬.破土.谢土.{Ҕs} 嫁娶.移徙.伐木.作梁.安床.祭祀.祈福.造屋.沐浴.平治道涂.扫舍.入殓.破土.安葬.除服.成服.BҔra5塞穴.上梁.动土.伐木.安葬.词讼.进人口.会亲友.ҔqE嫁娶.安床.探病.作灶.开市.交易.立券.挂匾.开光.出行.拆卸.进人口.入宅.移柩.动土.安门.上梁.栽种.破土.修坟.安葬.,Ҕp'C诸事不宜.解除.扫舍.余事勿取.Ҕo7{开光.掘井.开仓.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.动土.入宅.移徙.安床.作灶.塞穴.栽种.破土.安葬.Ҕn'纳畜.入宅.移徙.安葬.探病.伐木.上梁.安门.入殓.动土.嫁娶.祭祀.祈福.求嗣.开光.开市.交易.立券.安床.出行.拆卸.,Ҕm'C诸事不宜.结网.解除.余事勿取."Ҕlas入宅.移徙.理发.出火.嫁娶.出行.开市.交易.立券.祭祀.祈福.开光.伐木.进人口.安床.拆卸.修造.动土.栽种.破土.移柩.安葬.%Ҕk M嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.动土.上梁.出火.进人口.入宅.移徙.安床.栽种.纳畜.牧养.竖柱.安门.修造.解除.会亲友.:Ҕj'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.*ҔiC嫁娶.上梁.修造.拆卸.架马.入宅.伐木.动土.出火.开柱眼.祭祀.开光.出行.解除.塑绘.裁衣.入殓.移柩.破土.启攒.安葬.除服.成服."Ҕh G嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.安门.开市.交易.立券.挂匾.栽种.破土.安葬.]Ҕg'#诸事不宜.沐浴.平治道涂.扫舍.入殓.移柩.破土.启攒.安葬.余事勿取.EҔf)s开市.安葬.订盟.纳采.会亲友.安床.作灶.造畜椆栖.`Ҕe)'移徙.入宅.嫁娶.订盟.纳采.出行.祭祀.祈福.斋醮.动土.上梁.破土.安葬.,Ҕd'C诸事不宜.塞穴.结网.余事勿取.YҔc)赴任.捕捉.嫁娶.裁衣.祭祀.出行.安床.作灶.移徙.入宅.破土.安葬.CҔb)o嫁娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<Ҕa7S动土.破土.安葬.嫁娶.纳采.出行.移徙.入宅.JҔ`)}嫁娶.安葬.纳采.祭祀.祈福.开市.求医.治病.动土.纳畜.`Ҕ_)'祈福.斋醮.嫁娶.纳采.祭祀.祈福.出行.动土.上梁.移徙.入宅.破土.安葬.3Ҕ^'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.YҔ])开市.开光.嫁娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.YҔ\'安门.嫁娶.纳采.出行.祭祀.祈福.开市.动土.移徙.入宅.破土.安葬.Ҕ[ 7会亲友.进人口.修造.动土.起基.移徙.开市.纳畜.入殓.除服.成服.移柩.破土.安葬.修坟.立碑.会亲友.开光.出行.嫁娶.DҔZ's诸事不宜.进人口.牧养.置产.塞穴.结网.余事勿取.ҔY 1开光.出行.纳采.嫁娶.伐木.架马.出火.拆卸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除服.成服.移柩.安葬. #~9 g + A < b R< qV pb~ ҔXo;修坟.造桥.作灶.出行.安葬.造屋.入宅.祭祀.祈福.求嗣.开光.纳采.订盟.解除.栽种.纳畜.牧养.扫舍.进人口.LҔWEe开光.伐木.安葬.破土.祭祀.出行.教牛马.扫舍.余事勿取.ҔVam嫁娶.掘井.探病.开市.开光.栽种.祭祀.裁衣.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.启攒.安葬.谢土.除服.成服.ҔUE{祭祀.入殓.安葬.探病.嫁娶.祈福.求嗣.开光.出行.解除.拆卸.出火.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,Ҕ'C诸事不宜.解除.破屋.余事勿取.Ҕ  +祭祀.祈福.求嗣.开光.解除.纳采.冠笄.出火.拆卸.进人口.安床.动土.上梁.造庙.掘井.开池.入殓.移柩.安葬.破土.,Ҕ 'C诸事不宜.塞穴.扫舍.余事勿取.:Ҕ '_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.Ҕ }Q动土.破土.纳财.掘井.挂匾.开市.伐木.交易.祭祀.祈福.求嗣.开光.解除.出火.拆卸.入宅.安床.修造.安门.纳畜.启攒.安葬.Ҕ  进人口.出行.嫁娶.置产.安床.赴任.安葬.作灶.祭祀.祈福.开光.解除.动土.纳财.交易.纳畜.扫舍.FҔ'w诸事不宜.祭祀.平治道涂.解除.修饰垣墙.余事勿取.Ҕ}I谢土.祈福.上梁.作灶.斋醮.修造.入宅.安门.纳采.嫁娶.开光.出行.理发.会亲友.开市.安床.栽种.牧养.入殓.移柩.启攒.%Ҕ}]嫁娶.纳财.安葬.出行.开市.立券.作灶.栽种.祭祀.祈福.开光.求嗣.解除.伐木.出火.入宅.移徙.安床.拆卸.修造.动土.造畜椆栖.IҔ'}诸事不宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿取.|Ҕ7Q词讼.开光.开市.嫁娶.出行.合帐.冠笄.安床.除服.成服.作灶.交易.立券.入殓.移柩.破土.安葬.ҔaW祈福.入殓.祭祀.作灶.安葬.探病.嫁娶.开光.出行.出火.拆卸.进人口.开市.立券.交易.挂匾.入宅.移徙.安床.栽种.,Ҕ'C诸事不宜.解除.坏垣.余事勿取.Ҕ' 诸事不宜..Ҕ77嫁娶.入宅.安葬.沐浴.结网.取渔.:ғ'_诸事不宜.祭祀.求医.治病.解除.余事勿取.Jғ~7o开市.动土.破土.嫁娶.纳采.祭祀.祈福.出行.移徙.求医.Jғ}7o嫁娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4ғ|)Q嫁娶.安葬.祭祀.作灶.掘井.平治道涂.Fғ{7g嫁娶.动土.破土.祭祀.会亲友.开市.安床.启攒.安葬.Qғz7}嫁娶.开市.安葬.纳采.开光.求医.治病.动土.上梁.移徙.入宅.jғyS掘井.动土.破土.安葬.开光.祭祀.进人口.嫁娶.安床.解除.冠笄.出行.裁衣.扫舍.ғxEk掘井.安门.嫁娶.纳采.祭祀.祈福.裁衣.合帐.安床.入殓.除服.成服.移柩.破土.启攒.安葬.谢土.立碑.造畜椆栖.%ғwE入殓.安葬.入宅.安床.订盟.纳采.嫁娶.进人口.会亲友.交易.立券.动土.除服.谢土.移柩.破土.启攒.赴任.出行.开市.纳财.栽种.:ғvQ5造庙.嫁娶.安床.余事勿取.祭祀.余事勿取.ғuEW出火.入宅.安葬.伐木.祭祀.塑绘.开光.订盟.纳采.冠笄.裁衣.安机械.拆卸.修造.动土.安床.经络.开市.*ғt W嫁娶.行丧.架马.作梁.理发.牧养.安葬.纳畜.伐木.开市.立券.交易.挂匾.祭祀.祈福.开光.入宅.移徙.安床.拆卸.动土.上梁.进人口. ғsEe开光.作灶.斋醮.安葬.嫁娶.祭祀.出行.冠笄.立券.交易.进人口.开市.移徙.修造.动土.安床.入殓.移柩.破土.:ғr'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.^ғq)#入宅.安门.祭祀.开光.塑绘.祈福.斋醮.裁衣.合帐.冠笄.嫁娶.拆卸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.理发.伐木.架马.作梁.出火.修造.起基.定磉.放水.赴任.]ғ+)!伐木.作梁.祭祀.会亲友.订盟.裁衣.合帐.安机械.拆卸.上梁.安门.入殓.除服.成服.移柩.启攒.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.经络. G v R B ~ D6vw>_<ғ*EE栽种.造屋.作灶.入宅.祭祀.嫁娶.纳婿.安葬.Yғ)E}出行.斋醮.安葬.嫁娶.开光.塑绘.求嗣.纳采.裁衣.合帐.冠笄.安机械.作梁.开柱眼.安门.安床.造仓.祭祀.会亲友.祈福.经络.纳财.开市.立券.交易.入学.求嗣.理发.架马.4ғ(E5安门.作灶.安葬.嫁娶.塞穴.诸事不宜.Xғ'E}掘井.动土.作灶.栽种.祭祀.出行.嫁娶.冠笄.安床.入殓.移柩.安葬.hғ&E祭祀.开光.嫁娶.入宅.订盟.纳采.裁衣.合帐.冠笄.安机械.拆卸.安床.入殓.除服.成服.移柩.破土.启攒.安葬.修坟.立碑.经络.交易.立券.纳财.筑堤.造仓.补垣.塞穴.纳畜.伐木.架马.^ғ%E作灶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈福.塑绘.斋醮.沐浴.拆卸.起基.入宅.安香.造庙.移柩.谢土.除服.成服.入学.习艺.出行.竖柱.上梁.掘井.求嗣.解除.伐木.Xғ$E}作灶.开市.安葬.作梁.裁衣.合帐.冠笄.嫁娶.纳婿.安床.入殓.纳财.4ғ#E3嫁娶.栽种.伐木.安葬.祭祀.开光.塑绘.纳采.裁衣.拆卸.安床.起基.动土.竖柱.上梁.移徙.入宅.安香.开市.立券.挂匾.沐浴.出行.求嗣.安门.Kғ"/w开光.出货财.祭祀.动土.上梁.订盟.纳采.嫁娶.安机械.拆卸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.赴任.出行.移徙.祈福.求嗣.解除.造仓.进人口.-ғ!'E诸事不宜.破屋.坏垣.求医.治病.0ғ E+安床.开市.立券.作灶.祭祀.祈福.斋醮.订盟.纳采.裁衣.合帐.拆卸.修造.动土.上梁.起基.移柩.安葬.谢土.沐浴.扫舍.开柱眼.伐木.出火.:ғ)[栽种.伐木.祭祀.嫁娶.祈福.纳采.裁衣.合帐.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲友.挂匾.交易.立券.纳财.造仓.放水.^ғE造屋.作灶.治病.探病.冠笄.入殓.除服.成服.移柩.平治道涂.修饰垣墙.%ғE出行.嫁娶.入宅.安葬.开光.塑绘.裁衣.冠笄.伐木.拆卸.竖柱.上梁.开仓.会亲友.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5ғE7栽种.作灶.安葬.嫁娶.祭祀.扫舍.塞穴.>ғEG作灶.掘井.动土.栽种.祈福.开光.塑绘.酬神.订盟.纳采.裁衣.安床.开市.立券.入殓.除服.成服.移柩.启攒.安葬.立碑.赴任.会亲友.出行.交易.竖柱.ғS_作灶.开光.嫁娶.开市.入宅.订盟.纳采.冠笄.拆卸.修造.动土.安床.入殓.除服.成服.移柩.安葬.破土.启攒.造仓.Wғ)栽种.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.嫁娶.裁衣.动土.起基.出火.拆卸.移徙.入宅.安香.修造.竖柱.上梁.纳畜.牧养.祈福.求嗣.解除.伐木.定磉.造屋.安门.CғSE嫁娶.入宅.移徙.作灶.安葬.祭祀.沐浴.捕捉.栽种.4ғE3造庙.嫁娶.伐木.安葬.祭祀.开光.塑绘.订盟.纳采.合帐.冠笄.拆卸.动土.起基.上梁.入宅.安香.开市.立券.纳财.沐浴.求嗣.出火.竖柱.安门.ғ)作梁.造庙.祭祀.出行.订盟.纳采.裁衣.合帐.冠笄.进人口.动土.安床.作灶.入殓.移柩.安葬.破土.结网.取渔.畋猎.ғ')诸事不宜.破屋.坏垣.ғE 安床.嫁娶.作灶.入宅.祭祀.解除.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.谢土.沐浴.扫舍.捕捉.取渔.结网.畋猎.理发.Iғ赴任.祈福.求嗣.开光.塑绘.斋醮.订盟.纳采.嫁娶.拆卸.安床.入宅.安香.移柩.修坟.安葬.谢土.栽种.解除.冠笄.裁衣.移徙.修造.动土.竖柱.放水.启攒.立碑.XғSo动土.作灶.入宅.开光.安床.祭祀.嫁娶.纳婿.除服.成服.入殓.移柩.3ғE1作灶.出行.入宅.安葬.塑绘.开光.订盟.纳采.裁衣.合帐.冠笄.安机械.会亲友.纳财.开市.立券.交易.安床.竖柱.上梁.结网.栽种.解除.经络. 5L 9  H $ c  B#I>OEB%ғS入宅.作灶.治病.安葬.移徙.嫁娶.冠笄.纳采.出行.会亲友.上梁.安机械.安床.牧养.畋猎.祭祀.祈福.开光.修造.安门.造屋.起基.=ғ'c诸事不宜.嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.启攒.除服.成服.;ғ'a诸事不宜.裁衣.伐木.作梁.纳财.交易.立券.nғ 75词讼.出火.入宅.祭祀.合帐.裁衣.经络.伐木.作梁.安床.作灶.入殓.安葬.启攒.移柩.ҒDoC入宅.作灶.伐木.安葬.出火.出行.纳畜.嫁娶.开光.祈福.求嗣.解除.动土.安床.栽种.开池.掘井.祭祀.破土.启攒."ҒC}W嫁娶.安葬.破土.作梁.纳畜.牧养.行丧.作灶.移徙.祭祀.开光.祈福.出行.解除.进人口.雇庸.安床.动土.起基.上梁.安门.解除.BҒB'o诸事不宜.结网.入殓.除服.成服.移柩.安葬.破土.ҒA7 嫁娶.作灶.安床.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.入宅.移徙.上梁.挂匾.开池.入殓.安葬.破土.启攒.;Ғ@'a余事勿取.祭祀.解除.治病.破屋.坏垣.扫舍.Ғ?E{开市.立券.理发.作灶.嫁娶.祭祀.祈福.出行.解除.出火.拆卸.动土.入宅.移徙.安床.上梁.栽种.纳畜.破土.启攒.安葬.Ғ>')诸事不宜.解除.沐浴.fҒ=C栽种.出行.祈福.行丧.纳畜.安葬.安门.伐木.作梁.牧养.作灶.解除.平治道涂.Ғ<5入宅.移徙.出火.分居.安香.作灶.开市.交易.立券.安葬.动土.伐木.嫁娶.开光.求嗣.会亲友.安床.牧养.塑绘.针灸.Ғ;)掘井.词讼.嫁娶.安床.开光.出行.祭祀.动土.出火.解除.会亲友.开市.交易.立券.挂匾.入宅.移徙.拆卸.破土.启攒.安葬.Ғ:oQ嫁娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.裁衣.竖柱.上梁.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.启攒.uҒ9 o开光.掘井.针灸.出行.嫁娶.入宅.移徙.作灶.动土.祭祀.祈福.求嗣.入殓.启攒.安葬.移柩.Ғ8E 入殓.安葬.作灶.入宅.祭祀.沐浴.祈福.求嗣.斋醮.订盟.纳采.裁衣.冠笄.开市.立券.交易.纳财.沐浴.除服.谢土.出行.移柩.>Ғ7EG安葬.作灶.伐木.作梁.祭祀.求嗣.沐浴.酬神.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造仓.开池.经络.纳财.开市.立券.交易.结网.取渔.纳畜.捕捉.XҒ6E}嫁娶.上梁.入宅.作灶.取渔.入殓.除服.成服.移柩.破土.安葬.立碑.;Ғ5)]作灶.安床.祈福.求嗣.斋醮.塑绘.开光.订盟.纳采.嫁娶.动土.入宅.安香.移柩.安葬.谢土.出行.沐浴.修造.竖柱.上梁.纳财.破土.解除.安门.放水.Ғ4')诸事不宜.求医.破屋.BҒ3EO栽种.动土.开市.作灶.祭祀.祈福.酬神.订盟.纳采.冠笄.裁衣.合帐.嫁娶.安床.移徙.入宅.安香.入殓.移柩.启攒.安葬.解除.取渔.捕捉.伐木.安门.出火.]Ғ2E造屋.栽种.安葬.作灶.塑绘.开光.酬神.斋醮.订盟.纳采.裁衣.合帐.拆卸.动土.上梁.安床.安香.造庙.挂匾.会亲友.进人口.出行.修造.纳财.伐木.放水.出火.纳畜.沐浴.安门.AҒ1_5祭祀.祈福.安葬.安门.余事勿取.作灶.平治道涂.XҒ0E}斋醮.作灶.安床.安葬.安床.合帐.入宅.问名.纳采.求嗣.祭祀.开仓.0Ғ/U掘井.祭祀.斋醮.裁衣.合帐.冠笄.订盟.纳采.嫁娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲友.出行.祈福.求嗣.立碑.上梁.放水.[Ғ.Su祭祀.祈福.移徙.嫁娶.入宅.裁衣.合帐.入殓.除服.成服.会亲友.纳财.Ғ-EQ出行.嫁娶.入宅.动土.祭祀.祈福.求嗣.酬神.裁衣.安床.立券.交易.入殓.除服.成服.移柩.谢土.启攒.EҒ,EU安葬.上梁.入宅.作灶.祭祀.沐浴.开光.塑绘.祈福.求嗣.订盟.纳采.冠笄.裁衣.嫁娶.动土.除服.成服.移柩.破土.启攒.出行.安碓磑.放水.开市.立券.交易. wFo @ Y Tt<l\@X[&Ғ+ O嫁娶.栽种.安葬.理发.造庙.作灶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈福.求嗣.动土.,Ғ*'C诸事不宜.祭祀.解除.余事勿取.^Ғ)'%余事勿取.祭祀.入殓.破土.除服.成服.启攒.安葬.修坟.立碑.余事勿取.ґcE 安床.伐木.祈福.纳畜.嫁娶.开市.交易.立券.开光.出行.出火.拆卸.修造.入宅.移徙.动土.破土.移柩.安葬.启攒.除服.成服.,ґb'C诸事不宜.破屋.坏垣.余事勿取. ґa}-掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.开光.入宅.移徙.安床.修造.动土.进人口.ґ`}A掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.动土.会亲友.起基.造仓.纳畜.牧养.作厕.进人口.Fґ_'w余事勿取.祭祀.解除.修饰垣墙.平治道涂.余事勿取.ґ^'修造.上梁.入宅.祈福.探病.掘井.动土.安门.安葬.作灶.开市.交易.立券.纳财.开池.补垣.嫁娶.纳采.纳畜.取渔.安床.ґ]E 嫁娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.伐木.作梁.出火.入宅.移徙.安床.拆卸.动土.上梁.栽种.纳畜.安葬.=ґ\'e余事勿取.解除.扫舍.祭祀.教牛马.余事勿取.ґ[Ek作灶.掘井.嫁娶.入宅.祭祀.祈福.斋醮.沐浴.安床.安机械.造车器.入殓.移柩.启攒.安葬.立碑.合帐.经络.交易. ґZE]栽种.嫁娶.入殓.安葬.祭祀.出行.沐浴.裁衣.祈福.斋醮.订盟.纳采.嫁娶.安机械.开市.立券.安碓磑.纳畜.|ґYEC开仓.造屋.安葬.安床.祭祀.祈福.斋醮.塑绘.开光.除服.成服.入殓.作灶.嫁娶.捕捉.畋猎.纳财.QґX) 破土.伐木.入殓.除服.成服.移柩.启攒.安葬.立碑.余事勿取.uґW)Q入宅.安床.塑绘.开光.出行.订盟.纳采.除服.成服.嫁娶.纳婿.入殓.移柩.启攒.安葬.立碑.3ґV'Q诸事不宜.解除.破屋.坏垣.余事勿取.ZґUE造屋.开市.作灶.入宅.祭祀.会亲友.出行.订盟.纳采.沐浴.修造.动土.祈福.斋醮.嫁娶.拆卸.安床.入殓.移柩.安葬.谢土.赴任.裁衣.竖柱.上梁.伐木.捕捉.栽种.破土.安门.%ґTE出行.治病.安葬.开市.会亲友.纳采.进人口.修造.动土.竖柱.上梁.祭祀.开光.塑绘.祈福.斋醮.嫁娶.安床.移徙.入宅.安香.纳畜.UґSEw嫁娶.移徙.入宅.开光.修饰垣墙.平治道涂.入殓.移柩.余事勿取.{ґREA作灶.掘井.谢土.入宅.出行.嫁娶.订盟.纳采.入殓.安床.启攒.安葬.祭祀.裁衣.会亲友.进人口.BґQEO作灶.祭祀.上梁.出行.沐浴.解除.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.移徙.入宅.除服.成服.移柩.破土.启攒.安葬.扫舍.修坟.伐木.纳财.交易.立券.,ґP'C诸事不宜.祭祀.解除.余事勿取.AґOEM开仓.嫁娶.移徙.入宅.祭祀.沐浴.祈福.斋醮.订盟.纳采.裁衣.拆卸.起基.竖柱.上梁.安床.入殓.除服.成服.移柩.启攒.挂匾.求嗣.出行.合帐.造畜椆栖.bґNE嫁娶.入殓.安葬.出行.塑绘.开光.沐浴.冠笄.会亲友.作灶.放水.造畜椆栖.;ґM)_开市.安床.祭祀.作灶.入殓.除服.余事勿取.XґLE}开市.伐木.嫁娶.作梁.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.LґKSU祈福.嫁娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出火.塑绘.裁衣.会亲友.入学.拆卸.扫舍.造仓.挂匾.掘井.开池.结网.栽种.纳畜.破土.修坟.立碑.安葬.入殓.4ґJ7C嫁娶.开市.安葬.破屋.坏垣.余事勿取.ґIE{造屋.开市.动土.破土.嫁娶.祭祀.沐浴.裁衣.出行.理发.移徙.捕捉.畋猎.放水.入宅.除服.成服.启攒.安葬.移柩.入殓.,ґH'C诸事不宜.祭祀.解除.余事勿取.ґGa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜. b  .>z2ґF'O诸事不宜.祭祀.修饰垣墙.余事勿取. ґE5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.>EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.ro开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.i';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)  U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v [嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑. 会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网. oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑. E2U ! 3wFfj;E7 S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4)Q移徙.入宅.破屋.坏垣.治病.余事勿取.Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎. Ee开市.交易.破土.作灶.祭祀.塑绘.开光.订盟.纳采.嫁娶.安床.进人口.入殓.除服.成服.移柩.启攒.安葬.立碑.%)1作灶.治病.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.赴任.进人口.会亲友.EK作灶.治病.伐木.作梁.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.除服.成服.入殓.移柩.安葬.谢土.赴任.会亲友.进人口.出行.竖柱.上梁.经络.开市.交易.立券.纳财.开仓.FEY嫁娶.入宅.安门.移徙.理发.会亲友.补垣.塞穴.结网.ZE入宅.作灶.安床.开仓.祭祀.会亲友.嫁娶.沐浴.修造.动土.祈福.开光.塑绘.出行.订盟.纳采.裁衣.入殓.除服.成服.移柩.启攒.赴任.竖柱.上梁.纳财.扫舍.栽种.纳畜.伐木.,'C诸事不宜.祭祀.沐浴.余事勿取.p:S开光.掘井.安葬.谢土.修坟.嫁娶.冠笄.安床.纳采.会亲友.塞穴.捕捉.置产.造畜椆栖.L9SU移徙.入宅.安门.作梁.安葬.祭祀.祈福.求嗣.斋醮.沐浴.冠笄.出行.理发.拆卸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫舍.除服.成服.移柩.启攒.立碑.谢土.p8S安床.安门.破土.修坟.安葬.捕捉.畋猎.会亲友.解除.入殓.除服.成服.移柩.余事勿取.Z7Sq嫁娶.开市.入宅.出火.移徙.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.会亲友.解除.入学.纳财.交易.立券.经络.起基.动土.定磉.开池.栽种.纳畜.牧养.破土.入殓.立碑.安葬.L6Ec造屋.造船.动土.破土.嫁娶.纳采.订盟.祭祀.冠笄.裁衣.伐木.作梁.架马.定磉.开柱眼.作灶.移徙.安床.畋猎.结网.开池.作厕.除服.成服.启攒.入殓.移柩.安葬.45)Q嫁娶.安葬.破屋.坏垣.祭祀.余事勿取.I4E]开市.造庙.动土.破土.嫁娶.订盟.纳采.祭祀.祈福.塑绘.开光.移徙.安床.伐木.作梁.捕捉.畋猎.结网.求医.治病.解除.安葬.除服.成服.移柩.入殓.立碑.谢土.H3SM嫁娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈福.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上梁.安门.安香.出火.教牛马.会亲友.破土.J2E_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出火.修饰垣墙.平治道涂.会亲友.出行.开池.作厕.^1S{嫁娶.开市.祈福.斋醮.安葬.塑绘.会亲友.安机械.塞穴.结网.裁衣.经络._0am开市.纳采.造庙.安床.开渠.安葬.嫁娶.造车器.出行.会亲友.移徙.入宅.修造.动土.雕刻.开光.安香.出火.理发.会亲友.造屋.合脊.起基.归岫.安门.拆卸.扫舍.栽种.造畜椆栖.I/SQ开市.动土.破土.行丧.安葬.祭祀.沐浴.出行.余事勿取.n.S嫁娶.入宅.安床.掘井.开光.祭祀.理发.置产.塞穴.除服.成服.移柩.入殓.破土.安葬.;-S3移徙.入宅.出火.入殓.安葬.开市.纳财.出行.祭祀.祈福.求嗣.斋醮.问名.入学.起基.定磉.置产.开渠.掘井.拆卸.栽种.纳畜.牧养.动土.破土.启攒._,oa嫁娶.纳采.订盟.安床.动土.破土.安葬.祭祀.沐浴.捕捉.畋猎.结网.扫舍.t+S%嫁娶.移徙.出火.开市.入宅.订盟.纳采.会亲友.祭祀.祈福.修造.动土.安机械.破土.安葬.{*S3祭祀.嫁娶.入宅.修造.动土.祭祀.扫舍.破土.安葬.除服.成服.启攒.移柩.入殓.立碑.余事勿取.I)){嫁娶.安葬.祭祀.解除.破屋.坏垣.求医.治病.余事勿取. i2 2 K 5 j Eq]zJi(am破土.动土.安门.作灶.开市.交易.嫁娶.纳采.订盟.祭祀.开光.出行.解除.伐木.出火.入宅.移徙.拆卸.修造.栽种.安葬.入殓.E'EU置产.掘井.词讼.栽种.嫁娶.纳采.订盟.祭祀.斋醮.开光.安香.出火.出行.出火.拆卸.动土.祈福.进人口.纳财.交易.立券.移徙.安床.修造.安葬.除服.成服.Q& %造庙.谢土.作灶.作梁.伐木.安葬.行丧.修坟.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.裁衣.会亲友.拆卸.进人口.安香.经络.出货财.修饰垣墙.平治道涂.%祈福.谢土.安葬.上梁.作灶.开市.嫁娶.出行.入宅.动土.祭祀.塑绘.理发.会亲友.牧养.开池.造畜椆栖.畋猎.结网.O$7w作灶.经络.安床.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.进人口.开市.立券.挂匾.入宅.移徙.安门.栽种.动土.求医.治病.会亲友.起基.修造.造屋.安葬.V#Sk开市.动土.破土.嫁娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿取.&")5行丧.安葬.作灶.造畜椆栖.?!)g动土.上梁.嫁娶.祭祀.安机械.入殓.破土.安葬. Em作灶.入殓.安葬.安床.祭祀.祈福.斋醮.沐浴.竖柱.订盟.纳采.嫁娶.拆卸.入宅.移柩.启攒.谢土.赴任.出火.纳畜.JEa栽种.动土.安葬.开市.祭祀.作灶.入殓.除服.成服.畋猎.yE=开仓.冠笄.伐木.作梁.祭祀.塑绘.开光.祈福.斋醮.出行.订盟.纳采.裁衣.嫁娶.拆卸.修造.安床.入宅.安香.入殓.启攒.安葬.谢土.赴任.会亲友.进人口.出行.移徙.上梁.经络.开市.交易.立券.纳财. E]出行.祈福.安葬.作灶.会亲友.嫁娶.订盟.纳采.纳婿.拆卸.修造.动土.起基.竖柱.上梁.安床.会亲友.纳财.,W'C诸事不宜.破屋.坏垣.余事勿取.]VSw开光.嫁娶.掘井.伐木.作梁.祭祀.祈福.求嗣.斋醮.造庙.出火.安机械.会亲友.开市.交易.立券.纳财.习艺.经络.求医.治病.开池.作厕.畋猎.结网.栽种.牧养.安葬.破土.启攒.nUS嫁娶.祭祀.入宅.造屋.移徙.捕捉.结网.入殓.除服.成服.移柩.破土.安葬.启攒.立碑.\TE嫁娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治道涂.余事勿取.{SS3移徙.入宅.出行.祈福.嫁娶.沐浴.理发.冠笄.安床.开市.立券.会亲友.交易.纳财.结网.教牛马.RE 嫁娶.动土.破土.修坟.出行.造车器.造畜椆栖.解除.冠笄.裁衣.作梁.雕刻.会亲友.移徙.入宅.安机械.造畜椆栖.开市.扫舍.EQSG造庙.造船.动土.破土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.置产.求医.治病.开市.交易.立券.会亲友.移徙.竖柱.上梁.造屋.合脊.安门.放水.捕捉.纳畜. PgA开光.嫁娶.会亲友.栽种.针灸.安葬.冠笄.祭祀.沐浴.作灶.理发.整手足甲.扫舍.补垣.塞穴.入殓.破土.启攒.Og'开市.开仓.出货财.安床.安门.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.求医.治病.出火.移徙.入宅.PNEm动土.破土.开市.安葬.祭祀.作灶.纳财.捕捉.畋猎.余事勿取. MYO上梁.开光.造屋.架马.合寿木.造车器.嫁娶.订盟.纳采.会亲友.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.jLS嫁娶.开市.入宅.祈福.安葬.订盟.纳采.会亲友.交易.立券.纳财.栽种.纳畜.牧养.BK)m开市.嫁娶.祭祀.沐浴.解除.破屋.坏垣.余事勿取.EJKO开市.破土.掘井.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.安香.出火.造庙.移徙.出行.入宅.造庙.起基.竖柱.上梁.安床.纳畜.捕捉.纳婿.安葬.BISC开市.交易.祭祀.入宅.安葬.捕捉.畋猎.余事勿取.3H)O嫁娶.开市.祭祀.平治道涂.余事勿取.HGSM入宅.上梁.斋醮.出火.谢土.纳采.订盟.开市.交易.立券.会亲友.纳畜.牧养.问名.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.启攒.入殓.除服.成服. kt< s V , r f BC-")MkFo]造庙.嫁娶.掘井.栽种.造桥.作灶.动土.祭祀.开光.出行.解除.伐木.作梁.出火.拆卸.入宅.移徙.安床.修造.造畜椆栖.扫舍.E1出货财.开仓.动土.破土.安葬.行丧.伐木.开渠.栽种.祭祀.造车器.出行.修造.上梁.造屋.安门.安床.造畜椆栖.教牛马.D}C开市.出行.栽种.置产.词讼.安门.掘井.开光.嫁娶.裁衣.冠笄.合帐.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.VCSi安门.安床.裁衣.入宅.安葬.祭祀.祈福.求嗣.斋醮.开光.出行.嫁娶.求医.治病.动土.破土.入学.起基.扫舍.竖柱.上梁.开仓.出货财.置产.栽种.牧养.开生坟.谢土.立碑.[BSu嫁娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲友.纳财.理发.捕捉.vAa探病.纳畜.伐木.起基.作梁.造屋.嫁娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈福.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆卸.修造.动土.栽种.安葬.破土.启攒.除服.成服.入殓.立碑.@oO祈福.斋醮.纳采.订盟.嫁娶.入宅.安葬.祭祀.求嗣.冠笄.进人口.会亲友.安门.安床.经络.纳财.牧养.畋猎.放水.割蜜.7?E9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.嫁娶.拆卸.起基.安床.入宅.开市.入殓.除服.成服.移柩.破土.谢土.挂匾.开柱眼.交易.I>E_移徙.入宅.出行.栽种.祭祀.沐浴.破屋.坏垣.余事勿取.=EW作灶.祭祀.入宅.嫁娶.祭祀.冠笄.会亲友.拆卸.起基.除服.成服.移柩.启攒.安葬.沐浴.捕捉.开光.塑绘.A<)i入宅.伐木.祭祀.会亲友.纳采.嫁娶.开光.塑绘.斋醮.安香.开市.立券.除服.成服.入殓.移柩.安葬.赴任.进人口.出行.裁衣.修造.动土.上梁.经络.交易.:;)]嫁娶.入宅.祭祀.沐浴.修饰垣墙.平治道涂.:)e嫁娶.安葬.祭祀.沐浴.解除.理发.冠笄.安机械.作灶.造仓.开市.开池.作厕.补垣.塞穴.断蚁.结网.9Em造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上梁.合脊.安床.移徙.入宅.开市.栽种.作厕.crS动土.作灶.行丧.安葬.修坟.祭祀.祈福.求嗣.出行.沐浴.交易.扫舍.教牛马.!q))开光.安床.祭祀.出行.解除.冠笄.嫁娶.伐木.架马.开柱眼.修造.动土.移徙.入宅.开生坟.合寿木.入殓.移柩.破土.安葬.修坟.xpa嫁娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲友.捕捉.畋猎.启攒.除服.成服.移柩.Joo7开光.动土.破土.开市.修造.入宅.安门.祭祀.嫁娶.捕捉.7n=A行丧.安葬.合寿木.开光.求嗣.雕刻.嫁娶.订盟.纳采.出火.拆卸.修造.动土.起基.上梁.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.4ma嫁娶.造庙.造桥.造船.作灶.安葬.订盟.纳采.祭祀.祈福.安香.出火.修造.动土.上梁.安门.起基.竖柱.上梁.定磉.开池.移徙.入宅.立券.破土.%l5'探病.余事勿取.余事勿取.mko}祭祀.嫁娶.安床.开市.入宅.探病.上梁.沐浴.捕捉.入殓.除服.成服.破土.启攒.安葬.%jS纳采.订盟.架马.词讼.开渠.嫁娶.造车器.安机械.祭祀.祈福.开光.安香.出火.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.ciaw斋醮.嫁娶.移徙.出行.上梁.入宅.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.\hE嫁娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出火.上梁.移徙.uga针灸.伐木.作梁.造庙.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.?fg)嫁娶.入宅.修造.动土.会亲友.破土.祭祀.出行.ueo 嫁娶.开市.祭祀.祈福.斋醮.纳采.修坟.冠笄.沐浴.出行.修造.动土.移徙.入宅.破土.安葬.do-开市.祈福.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.取渔.会亲友.入学.移柩.启攒.除服.成服. w H E 6 z AS{,f vLcYQ嫁娶.开市.造屋.作梁.合寿木.祭祀.冠笄.捕捉.余事勿取.7b}安葬.纳畜.出行.行丧.伐木.栽种.造庙.造桥.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.解除.进人口.入宅.移徙.出火.安床.开市.交易.立券.挂匾.SaEq开市.开仓.安门.安葬.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.上梁.合脊.放水.掘井.破土.移柩.谢土.除服.成服.;`)_移徙.入宅.破屋.坏垣.求医.治病.余事勿取._ 5出火.入宅.移徙.祈福.祭祀.安床.开市.嫁娶.探病.开光.解除.拆卸.修造.动土.竖柱.安门.牧养.安葬.修坟.破土.移柩.^u;作灶.出火.进人口.开渠.入宅.移徙.祭祀.开光.祈福.求嗣.斋醮.修造.动土.纳财.造仓.作厕.栽种.牧养.会亲友.U]Ew嫁娶.入宅.安床.出行.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.0\o斋醮.嫁娶.行丧.动土.作灶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.栽种.进人口.入宅.移徙.安床.开光.出火.拆卸.安门.修造.3[a造庙.行丧.安葬.伐木.作灶.造船.嫁娶.纳采.祭祀.解除.出行.修造.动土.开市.上梁.安床.整手足甲.扫舍.求医.治病.起基.定磉.造屋.合脊.RZ) 嫁娶.开市.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.安葬.JY7o作灶.动土.破土.嫁娶.出行.纳畜.祭祀.入殓.启攒.安葬.CX)o动土.破土.嫁娶.祭祀.祈福.斋醮.作灶.移徙.入宅. W 祈福.出行.订盟.纳采.嫁娶.裁衣.动土.安床.放水.开市.掘井.交易.立券.栽种.开渠.除服.成服.移柩.破土.V 3塑绘.开光.解除.订盟.纳采.嫁娶.出火.修造.动土.移徙.入宅.拆卸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养. U 祈福.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生坟.入殓.除服.成服.移柩.破土.安葬.7S+动土.破土.订盟.安床.开池.祈福.斋醮.出行.冠笄.嫁娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除服.成服.移柩.破土.安葬.启攒.4)Q行丧.安葬.破屋.坏垣.治病.余事勿取.| S5嫁娶.纳采.订盟.开市.入宅.祭祀.捕捉.畋猎.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.启攒.I E]开市.立券.纳财.作灶.纳采.订盟.嫁娶.祭祀.祈福.普渡.开光.安香.出火.移徙.入宅.竖柱.修造.动土.竖柱.上梁.起基.造屋.安门.造庙.造桥.破土.启攒.安葬.g E嫁娶.安门.动土.安葬.出行.沐浴.订盟.纳采.裁衣.竖柱.上梁.移徙.纳畜.牧养. SO祈福.开市.动土.行丧.安葬.塑绘.冠笄.嫁娶.会亲友.进人口.经络.裁衣.栽种.纳畜.牧养.补垣.塞穴.捕捉.{ S3嫁娶.出行.入宅.开市.安门.祭祀.沐浴.理发.整手足甲.冠笄.解除.入殓.移柩.破土.启攒.安葬.ua开市.动土.破土.安床.开仓.上梁.嫁娶.冠笄.祭祀.沐浴.普渡.出行.纳财.扫舍.纳畜.赴任.a5动土.破土.掘井.开光.上梁.词讼.嫁娶.普渡.祭祀.祈福.补垣.塞穴.断蚁.筑堤.入殓.除服.成服.安葬.OS[出火.入宅.造屋.安门.安葬.嫁娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲友.开市.纳财.修造.动土.竖柱.上梁.开光.开仓.出货财.纳畜.牧养.开池.破土.启攒.S]掘井.出行.破土.行丧.安葬.嫁娶.订盟.纳采.作灶.冠笄.裁衣.会亲友.纳畜.牧养.安机械.开市.立券.纳财.安床.>a+纳采.订盟.经络.行丧.安葬.探病.嫁娶.祭祀.祈福.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.捕捉.畋猎.结网.SC动土.破土.嫁娶.掘井.安床.订盟.纳采.祭祀.祈福.安香.出火.开市.立券.入宅.挂匾.造桥.启攒.安葬. ~~> ^ 0 > " 8 "hq^~4)Q斋醮.开市.沐浴.破屋.坏垣.余事勿取.`E 开市.交易.入宅.嫁娶.祭祀.普渡.捕捉.解除.结网.畋猎.入殓.破土.安葬.ESG开市.立券.置产.作灶.造桥.嫁娶.纳采.订盟.祭祀.祈福.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.定磉.安门.安葬.破土.r}y嫁娶.栽种.祈福.造桥.安葬.安门.伐木.作梁.祭祀.理发.作灶.沐浴.修饰垣墙.平治道涂.~-开市.入宅.动土.破土.安葬.作灶.上梁.安床.开仓.祈福.沐浴.理发.会亲友.塑绘.开光.栽种.牧养.嫁娶.经络.补垣.塞穴.?}m出火.嫁娶.开光.进人口.出行.词讼.开市.入宅.移徙.赴任.解除.祭祀.祈福.求嗣.修造.动土.竖柱.上梁.安床.纳畜.造屋.合脊.起基.入殓.破土.安葬.&|a{栽种.掘井.动土.安床.破土.置产.嫁娶.纳采.订盟.祭祀.祈福.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上梁.纳畜.入殓.安葬.启攒.%{ay嫁娶.入宅.斋醮.开光.针灸.掘井.祭祀.出行.作梁.出火.拆卸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.*zI入宅.上梁.入殓.造屋.探病.作灶.安门.安葬.纳畜.伐木.嫁娶.纳采.订盟.开光.祭祀.出行.理发.动土.安床.放水.开渠.栽种.进人口.:yo行丧.安葬.出行.作梁.纳畜.伐木.造桥.嫁娶.祭祀.祈福.求嗣.裁衣.冠笄.经络.修造.进人口.安床.动土.竖柱.上梁.移徙.交易.立券.栽种.会亲友.VxEw入宅.嫁娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈福.求嗣.开光.普渡.出行.出火.拆卸.修造.动土.进人口.开市.交易.立券.移徙.安床.栽种.上梁.纳畜.破土.移柩.安葬.4wa掘井.理发.作灶.动土.破土.开池.嫁娶.开光.祭祀.祈福.求嗣.安香.出火.解除.伐木.入宅.移徙.安床.开市.交易.立券.栽种.出火.出行.安葬.Yv)祭祀.祈福.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.3u'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.Jt7o嫁娶.移徙.入宅.纳采.祭祀.祈福.解除.动土.破土.安葬.,s'C诸事不宜.沐浴.扫舍.余事勿取.Pr' 余事勿取.祭祀.冠笄.嫁娶.捕捉.结网.畋猎.取渔.余事勿取.q !塑绘.出行.冠笄.嫁娶.进人口.裁衣.纳婿.造畜椆栖.交易.立券.牧养.开生坟.入殓.除服.成服.移柩.安葬.启攒.+S;开市.斋醮.安床.出行.经络.移徙.入宅.治病.会亲友.祭祀.祈福.斋醮.安香.移徙.嫁娶.造屋.起基.*Eo动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲友.裁衣.开仓.经络.纳畜.造畜椆栖.教牛马.牧养.W)a_移徙.开市.入宅.嫁娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿取.(aO造屋.入宅.作灶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.嫁娶.会亲友.放水.掘井.牧养.纳畜.开渠.安碓磑.b'S开市.入宅.安床.动土.安葬.祭祀.进人口.纳财.纳畜.牧养.捕捉.余事勿取.A&KG嫁娶.开市.栽种.合寿木.祭祀.祈福.斋醮.出行.纳采.订盟.安机械.出火.拆卸.修造.动土.起基.移徙.入宅.造庙.入殓.除服.成服.移柩.破土.安葬.谢土.Z%Sq祈福.上梁.开仓.掘井.牧养.纳采.订盟.嫁娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲友.安香.出火.拆卸.造屋.起基.安床.作灶.挂匾.安葬.破土.启攒.立碑.入殓.移柩.;$)_嫁娶.出行.求医.治病.破屋.坏垣.余事勿取.m#o}出火.嫁娶.入宅.作灶.破土.上梁.动土.沐浴.理发.捕捉.入殓.移柩.破土.启攒.安葬.6"S)嫁娶.安葬.行丧.破土.修坟.订盟.纳采.祭祀.祈福.开光.安香.出火.立券.安机械.移徙.入宅.竖柱.上梁.会亲友.安床.拆卸.挂匾.牧养.教牛马.O!aO开市.动土.破土.嫁娶.修造.安葬.祭祀.修饰垣墙.平治道涂. (1 j # f , 8 OlC_L aG斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈福.求嗣.开光.解除.扫舍.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.栽种.纳畜.牧养.nS嫁娶.出行.纳采.入宅.作灶.祭祀.沐浴.塑绘.开光.入学.解除.扫舍.治病.开池.牧养.lE#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.uS'开市.入宅.嫁娶.开光.造屋.祭祀.入殓.除服.成服.移柩.破土.启攒.安葬.塞穴.断蚁.结网.)7+出行.安葬.造桥.纳采.订盟.嫁娶.祭祀.沐浴.塑绘.开光.出火.治病.习艺.伐木.造屋.竖柱.上梁.安床.作灶.安碓磑.挂匾.掘井.纳畜.]gc安葬.破土.开市.开仓.出货财.启攒.纳采.订盟.嫁娶.移徙.入宅.出行.祭祀.祈福.斋醮.塑绘.开光.安香.出火.会亲友.解除.入学.竖柱.上梁.拆卸.造屋.起基.栽种.牧养.纳畜.KYM入宅.开市.掘井.词讼.合寿木.嫁娶.订盟.纳采.祭祀.祈福.斋醮.开光.会亲友.求医.治病.造屋.起基.竖柱.上梁.安门.安碓磑.筑堤.开池.破土.安葬.除服.成服.YSo祭祀.祈福.探病.谢土.造桥.嫁娶.开市.立券.移徙.入宅.安机械.会亲友.经络.安门.安床.挂匾.拆卸.开仓.出货财.开池.栽种.纳畜.牧养.破土.安葬.启攒.移柩.入殓.立碑.4)Q嫁娶.安葬.破屋.坏垣.解除.余事勿取.&A嫁娶.斋醮.开市.出火.入宅.移徙.出行.作灶.安门.伐木.祭祀.祈福.解除.整手足甲.安床.沐浴.入殓.移柩.破土.启攒.安葬.谢土.Lo9嫁娶.作灶.出火.置产.嫁娶.入宅.安葬.纳采.订盟.会亲友.入学.祭祀.祈福.求嗣.开光.出行.解除.理发.动土.起基.开市.交易.立券.纳财.造仓.栽种.纳畜.牧养.<EE动土.破土.治病.开渠.祭祀.嫁娶.畋猎.结网.E}上梁.入宅.修造.动土.破土.祭祀.祈福.斋醮.嫁娶.纳采.订盟.造车器.开光.出行.拆卸.起基.安床.除服.成服.开市.交易.立券.栽种.牧养.入殓.移柩.启攒.QS_开市.入宅.出行.安床.作灶.修造.动土.安机械.祭祀.沐浴.解除.拆卸.治病.作灶.造屋.起基.开池.扫舍.造畜椆栖.开生坟.合寿木.安葬.破土.启攒.移柩.入殓.立碑.M7u移徙.入宅.安葬.订盟.纳采.出行.祈福.斋醮.安床.会亲友.<7S上梁.动土.破土.祭祀.入殓.移柩.启攒.安葬.5)S嫁娶.安葬.裁衣.作灶.移徙.入宅.纳畜.Y)开市.安门.嫁娶.纳采.祭祀.祈福.求医.治病.出行.动土.移徙.入宅.@'k诸事不宜.祭祀.捕捉.取渔.修饰垣墙.余事勿取.  #订盟.纳采.会亲友.进人口.雕刻.拆卸.修造.动土.起基.开市.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.FEI开市.安门.掘井.作灶.嫁娶.出行.安机械.祭祀.塑绘.开光.治病.经络.安床.结网.塞穴.破土.入殓.BE)m嫁娶.入宅.破屋.坏垣.求医.治病.畋猎.余事勿取.^DS{开市.交易.嫁娶.安葬.行丧.祭祀.沐浴.捕捉.结网.畋猎.取渔.余事勿取.dCE开市.伐木.作梁.作灶.安机械.移徙.入宅.出行.祭祀.祈福.斋醮.纳采.订盟.安香.出火.解除.会亲友.修造.动土.拆卸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.uBK/斋醮.出行.治病.合寿木.祭祀.沐浴.理发.嫁娶.作灶.整手足甲.扫舍.修饰垣墙.平治道涂.qAY安床.出货财.作灶.动土.破土.开光.求嗣.出行.冠笄.嫁娶.伐木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出火.挂匾.起基.修造.开生坟.合寿木.入殓.除服.成服.移柩.安葬.R@Eo行丧.伐木.作梁.作灶.嫁娶.订盟.纳采.冠笄.会亲友.安机械.造车器.祭祀.出行.纳财.入宅.安香.出火.入学.塑绘.开光.拆卸.起基.修造.动土.牧养.栽种.安门.作厕.  c }  !  @M5jS 祈福.开光.掘井.开市.安葬.嫁娶.冠笄.修造.动土.作灶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.=Sq合帐.上梁.经络.安葬.入殓.祭祀.祈福.求嗣.斋醮.安香.解除.移徙.入宅.会亲友.求医.治病.动土.破土.开生坟.合寿木.B<SC开市.安葬.破土.修坟.掘井.祭祀.作灶.余事勿取.;a-斋醮.祭祀.移徙.入宅.上梁.嫁娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.:Se作灶.理发.造桥.行丧.安葬.嫁娶.安机械.交易.出行.祭祀.祈福.求嗣.斋醮.塑绘.开光.合帐.裁衣.放水.开池.掘井.B97_入宅.嫁娶.移徙.祭祀.沐浴.破屋.坏垣.余事勿取.78K3嫁娶.开市.合寿木.安葬.纳采.订盟.冠笄.祭祀.祈福.斋醮.出行.修造.动土.移徙.入宅.安香.出火.拆卸.造屋.起基.竖柱.上梁.定磉.安门.开池.u7S'开光.作灶.造屋.架马.开仓.嫁娶.纳采.祭祀.祈福.出行.立券.移徙.入宅.动土.破土.安葬.q6S开市.入宅.出行.修造.词讼.祭祀.沐浴.理发.整手足甲.修饰垣墙.平治道涂.余事勿取.{5a%嫁娶.安床.作灶.动土.破土.造船.安机械.祭祀.祈福.求嗣.沐浴.解除.纳采.开市.修造.竖柱.上梁.开柱眼.安碓磑.归岫.补垣.塞穴.拆卸.放水.出火.扫舍.开生坟.合寿木.安葬.谢土.启攒.除服.成服.J4QS安葬.开生坟.合寿木.行丧.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.修造.进人口.入宅.移徙.动土.安床.纳畜.栽种.纳财.交易.立券.挂匾.造畜椆栖.E3EW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿取.2am安床.祈福.出行.安葬.行丧.开光.嫁娶.合帐.裁衣.冠笄.伐木.上梁.出火.拆卸.移徙.修造.动土.安门.纳财.筑堤.栽种.塞穴.71E9行丧.置产.入宅.安葬.嫁娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈福.求嗣.出行.解除.伐木.出火.入宅.拆卸.修造.动土.上梁.安床.栽种.破土.;0EC入宅.出行.掘井.安葬.祭祀.结网.余事勿取./S_作灶.出火.祭祀.嫁娶.入宅.开市.交易.立券.挂匾.开光.解除.拆卸.动土.安床.修造.上梁.置产.栽种.破土.安葬..)k出火.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.E-KQ移徙.入宅.开仓.出货财.祭祀.破屋.坏垣.余事勿取.3,'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.Y+)开市.开光.嫁娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y*'安门.嫁娶.纳采.出行.祭祀.祈福.开市.动土.移徙.入宅.破土.安葬.) 7会亲友.进人口.修造.动土.起基.移徙.开市.纳畜.入殓.除服.成服.移柩.破土.安葬.修坟.立碑.会亲友.开光.出行.嫁娶.Dc's诸事不宜.进人口.牧养.置产.塞穴.结网.余事勿取.b 1开光.出行.纳采.嫁娶.伐木.架马.出火.拆卸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除服.成服.移柩.安葬.4a)Q破土.安葬.塞穴.断蚁.结网.余事勿取.`''余事勿取.余事勿取.}_S7开市.入宅.探病.出火.造屋.嫁娶.祭祀.祈福.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.针灸.理发.会亲友.起基.修造.动土.竖柱.定磉.安床.拆卸.纳畜.牧养.放水.破土.除服.成服.修坟.立碑.P^aQ开市.动土.祭祀.斋醮.安葬.探病.栽种.捕捉.畋猎.余事勿取.c]E嫁娶.出火.移徙.入宅.开市.交易.立券.安机械.会亲友.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上梁.安门.作灶.放水.作厕.开池.栽种.牧养.造畜椆栖.破土.安葬.立碑. |:* { < 0 v HoSQk|;\EC斋醮.开市.嫁娶.作灶.沐浴.扫舍.余事勿取.B[)m行丧.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取."ZE移徙.入宅.造屋.架马.嫁娶.纳采.订盟.斋醮.开光.祭祀.祈福.求医.治病.会亲友.动土.解除.捕捉.纳畜.牧养.入殓.破土.安葬.:YE?动土.破土.嫁娶.嫁娶.祭祀.祈福.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上梁.作灶.安门.安香.出火.造屋.启攒.安葬.^XS{祈福.嫁娶.入宅.安床.作灶.祭祀.沐浴.移徙.破土.安葬.扫舍.平治道涂.~WS9开市.作灶.动土.行丧.安葬.嫁娶.纳采.订盟.会亲友.安机械.结网.冠笄.祭祀.求嗣.进人口.经络.xVS-开市.出行.安床.作灶.安葬.嫁娶.纳采.订盟.祭祀.祈福.治病.造车器.修造.动土.移徙.入宅.>U)e嫁娶.安葬.祭祀.解除.断蚁.会亲友.余事勿取."Tas入宅.造屋.造桥.安门.安葬.上梁.嫁娶.冠笄.祭祀.出行.移徙.入宅.作灶.造车器.补垣.塞穴.作厕.破土.启攒.除服.成服.入殓.]S7入宅.安门.安葬.祭祀.祈福.求嗣.开光.纳采.订盟.嫁娶.出行.动土.破土.会亲友.开市.交易.立券.习艺.拆卸.起基.安碓磑.放水.开池.造仓.开渠.栽种.谢土.启攒.修坟.立碑.;R7Q探病.嫁娶.开市.祭祀.结网.捕捉.余事勿取.7QS+安床.上梁.裁衣.入宅.嫁娶.祭祀.祈福.求嗣.开光.订盟.纳采.解除.动土.起基.进人口.开市.交易.立券.纳财.造仓.开池.栽种.纳畜.破土.安葬.4P7A作灶.开市.经络.订盟.纳采.嫁娶.解除.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.入宅.移徙.安床.栽种.纳畜.动土.破土.谢土.安葬.修坟.BO)m开光.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取.ONKc开市.立券.造船.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.修造.进人口.入宅.移徙.安床.解除.挂匾.栽种.破土.谢土.入殓.移柩.安葬.SMSc作灶.嫁娶.移徙.入宅.理发.开市.交易.立券.挂匾.祭祀.祈福.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.启攒.除服.成服.立碑.LSs伐木.安葬.安床.祭祀.祈福.纳采.嫁娶.裁衣.理发.出行.修造.动土.进人口.开市.交易.立券.挂匾.移徙.上梁.栽种.纳畜.K 嫁娶.栽种.修造.动土.出行.伐木.作梁.安葬.谢土.开光.纳采.裁衣.冠笄.安床.作灶.进人口.造仓.塞穴.4Ja作灶.安床.开仓.造屋.动土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.解除.出行.出火.入宅.移徙.栽种.纳畜.牧养.动土.破土.入殓.安葬.WIa_嫁娶.安葬.入宅.出行.动土.词讼.塞穴.断蚁.结网.畋猎.余事勿取.jHS掘井.动土.破土.安葬.开光.祭祀.进人口.嫁娶.安床.解除.冠笄.出行.裁衣.扫舍.GEk掘井.安门.嫁娶.纳采.祭祀.祈福.裁衣.合帐.安床.入殓.除服.成服.移柩.破土.启攒.安葬.谢土.立碑.造畜椆栖.%FE入殓.安葬.入宅.安床.订盟.纳采.嫁娶.进人口.会亲友.交易.立券.动土.除服.谢土.移柩.破土.启攒.赴任.出行.开市.纳财.栽种.:EQ5造庙.嫁娶.安床.余事勿取.祭祀.余事勿取.~EW出火.入宅.安葬.伐木.祭祀.塑绘.开光.订盟.纳采.冠笄.裁衣.安机械.拆卸.修造.动土.安床.经络.开市.}''诸事不宜.诸事不宜.f|S 嫁娶.开市.交易.入宅.安葬.祭祀.沐浴.破屋.坏垣.求医.治病.解除.余事勿取.{E 开市.动土.掘井.开池.祭祀.祈福.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.取渔.解除.安葬.启攒.谢土.入殓.@zKE入宅.动土.开仓.出货财.造车器.祭祀.祈福.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.合脊.起基.定磉.安门.纳畜.安葬.开生坟.立碑.谢土.斋醮. F * Y 5 @,;UAp-OyS]嫁娶.安葬.动土.安床.治病.祭祀.作灶.平治道涂.余事勿取.:xa#祈福.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.嫁娶.会亲友.进人口.安床.开市.交易.纳畜.牧养.入殓.除服.成服.移柩.安葬.启攒.~wa+开市.嫁娶.移徙.入宅.掘井.安葬.沐浴.斋醮.解除.求医.治病.会亲友.造畜椆栖.栽种.理发.扫舍.avoe动土.破土.行丧.开光.作梁.安葬.探病.祭祀.解除.教牛马.出行.余事勿取.fua}开光.嫁娶.掘井.安葬.安门.探病.祭祀.祈福.求嗣.斋醮.冠笄.作灶.纳财.交易.ntS祈福.动土.破土.安葬.入殓.纳采.嫁娶.出行.开市.立券.纳畜.牧养.出火.移徙.入宅.4s)Q嫁娶.安葬.祭祀.捕捉.解除.余事勿取./r77出火.嫁娶.开市.祭祀.祈福.求嗣.斋醮.纳采.订盟.开光.竖柱.上梁.开仓.出货财.造屋.起基.定磉.安门.诸事不宜.破土.入殓.启攒.谢土.JqSS祭祀.嫁娶.入宅.作灶.安葬.沐浴.捕捉.畋猎.结网.取渔._pE 祈福.斋醮.开市.安葬.祭祀.沐浴.解除.求医.治病.破屋.坏垣.余事勿取.uoE5嫁娶.开市.纳财.出火.纳采.祭祀.祈福.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.gnS 移徙.入宅.嫁娶.出行.安床.祭祀.祈福.求嗣.斋醮.沐浴.纳畜.入殓.破土.安葬.KmK]安床.入宅.安碓磑.栽种.祭祀.作灶.平治道涂.余事勿取.lae祈福.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.嫁娶.开市.出行.会亲友.安床.结网.除服.成服.启攒.安葬.移柩.Hko1纳采.出行.修坟.安葬.开市.立券.作灶.嫁娶.祭祀.祈福.求嗣.斋醮.开光.出火.移徙.入宅.竖柱.上梁.会亲友.造屋.起基.治病.治病.安门.造车器.掘井.开池.AjEO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿取.2ia移徙.入宅.作灶.理发.开光.安门.祭祀.出行.修造.动土.合帐.造畜椆栖.安床.移徙.入殓.移柩.破土.启攒.安葬.开生坟.合寿木.补垣.塞穴.hE 作灶.安葬.祭祀.入殓.安香.出火.纳采.订盟.嫁娶.开市.立券.交易.挂匾.开光.出行.解除.安床.栽种.置产.拆卸.修造.动土.Bg)m嫁娶.入宅.祭祀.修门.取渔.纳财.纳畜.余事勿取.'f'5纳采.问名.订盟.嫁娶.入宅.开仓.出火.动土.破土.纳畜.伐木.开市.交易.立券.挂匾.祭祀.开光.祈福.求嗣.安床.解除.修造.安葬.Ie){祈福.安葬.沐浴.塞穴.畋猎.结网.取渔.扫舍.余事勿取.Qd) 嫁娶.开市.祭祀.沐浴.解除.破屋.坏垣.求医.治病.余事勿取.c')诸事不宜.破屋.坏垣.bE 安床.嫁娶.作灶.入宅.祭祀.解除.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.谢土.沐浴.扫舍.捕捉.取渔.结网.畋猎.理发.Ia赴任.祈福.求嗣.开光.塑绘.斋醮.订盟.纳采.嫁娶.拆卸.安床.入宅.安香.移柩.修坟.安葬.谢土.栽种.解除.冠笄.裁衣.移徙.修造.动土.竖柱.放水.启攒.立碑.XSo动土.作灶.入宅.开光.安床.祭祀.嫁娶.纳婿.除服.成服.入殓.移柩.3E1作灶.出行.入宅.安葬.塑绘.开光.订盟.纳采.裁衣.合帐.冠笄.安机械.会亲友.纳财.开市.立券.交易.安床.竖柱.上梁.结网.栽种.解除.经络.,'C诸事不宜.扫舍.塞穴.余事勿取.ta栽种.动土.安葬.掘井.修坟.探病.祭祀.会亲友.立券.交易.裁衣.合帐.嫁娶.冠笄.进人口.3S#祭祀.嫁娶.出行.上梁.掘井.裁衣.经络.伐木.开柱眼.拆卸.修造.动土.上梁.合脊.合寿木.入殓.除服.成服.移柩.破土.安葬.启攒.修坟.立碑.4S%纳采.动土.开市.交易.安门.开光.祈福.求嗣.出行.解除.伐木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除服.成服.移柩.谢土.纳畜.牧养. m5; A A + L $fdmTEu纳财.开市.安葬.破土.理发.冠笄.嫁娶.进人口.栽种.捕捉.针灸.E{祈福.嫁娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出火.拆卸.起基.修造.动土.上梁.移徙.造船.开市.交易.立券.纳财.jS塑绘.开光.造桥.除服.成服.嫁娶.冠笄.祭祀.出行.会亲友.修造.动土.入殓.破土.;EC嫁娶.移徙.开市.入宅.破屋.坏垣.余事勿取.gS 纳采.开光.安床.嫁娶.开市.祈福.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~=O纳畜.理发.合寿木.嫁娶.造车器.纳采.订盟.祭祀.祈福.安机械.移徙.入宅.开市.立券.破土.安葬._E 开市.造屋.治病.作灶.嫁娶.冠笄.会亲友.安机械.纳财.交易.立券.置产.j7-移徙.入宅.栽种.纳财.开市.交易.立券.开光.针灸.会亲友.理发.安床.造仓.结网.J Ea嫁娶.安葬.行丧.安门.祭祀.沐浴.解除.扫舍.塞穴.牧养.b au嫁娶.动土.掘井.起基.定磉.破土.祭祀.会亲友.出行.立券.交易.冠笄.纳财.c E嫁娶.祈福.出火.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土. E{开市.交易.合帐.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.破土.出火.安门.安床.上梁.立碑.移柩.m E%入宅.造屋.竖柱.安葬.纳财.交易.立券.栽种.捕捉.结网.取渔.进人口.教牛马.理发.Ym嫁娶.定磉.合寿木.安葬.行丧.祭祀.祈福.求嗣.斋醮.沐浴.开光.理发.经络.解除.治病.治病.立碑.栽种.牧养.掘井.开池.c7嫁娶.开光.作灶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;)_开光.嫁娶.破屋.坏垣.求医.治病.余事勿取.&}_开市.交易.作灶.纳财.上梁.安床.造屋.造船.嫁娶.开光.祭祀.祈福.求嗣.出行.出火.入宅.移徙.解除.栽种.伐木.破土.谢土.安葬.E动土.伐木.安葬.行丧.嫁娶.祭祀.开光.祈福.求嗣.出行.出火.进人口.入宅.移徙.安床.拆卸.修造.安门.挂匾.纳财.扫舍.~开仓.出货财.造屋.作灶.开市.交易.立券.栽种.祭祀.祈福.嫁娶.冠笄.修饰垣墙.置产.平治道涂.'动土.破土.安葬.行丧.赴任.出行.嫁娶.入宅.移徙.谢土.词讼.纳财.开市.立券.交易.开光.安床.上梁.造屋.修造.起基.kE!嫁娶.作灶.掘井.安葬.塞穴.整手足甲.解除.捕捉.畋猎.结网.余事勿取.诸事不宜.0U掘井.祭祀.斋醮.裁衣.合帐.冠笄.订盟.纳采.嫁娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲友.出行.祈福.求嗣.立碑.上梁.放水.[Su祭祀.祈福.移徙.嫁娶.入宅.裁衣.合帐.入殓.除服.成服.会亲友.纳财.~EQ出行.嫁娶.入宅.动土.祭祀.祈福.求嗣.酬神.裁衣.安床.立券.交易.入殓.除服.成服.移柩.谢土.启攒.E}EU安葬.上梁.入宅.作灶.祭祀.沐浴.开光.塑绘.祈福.求嗣.订盟.纳采.冠笄.裁衣.嫁娶.动土.除服.成服.移柩.破土.启攒.出行.安碓磑.放水.开市.立券.交易.&4S 伐木.作灶.安葬.取渔.入宅.塑绘.开光.祈福.求嗣.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I3'}余事勿取.祭祀.结网.入殓.除服.成服.移柩.安葬.破土.&2E安床.栽种.治病.作灶.祭祀.冠笄.嫁娶.拆卸.修造.动土.起基.上梁.造屋.入宅.开市.开池.塞穴.入殓.除服.成服.移柩.安葬.破土._17入宅.开市.安葬.祭祀.沐浴.求医.治病.扫舍.破屋.坏垣.解除.余事勿取.0S]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.嫁娶.会亲友.进人口.牧养.捕捉.入殓.移柩.安葬.启攒.E/o+置产.造屋.合脊.开光.探病.安门.作灶.祈福.求嗣.斋醮.纳采.嫁娶.伐木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除服.成服.移柩.安葬.破土.谢土. z- + V  8J3q5LcA.EO嫁娶.祈福.掘井.安葬.祭祀.平治道涂.余事勿取.\-E开市.动土.安葬.破土.会亲友.求嗣.理发.冠笄.结网.捕捉.开光.理发.u,S'开光.嫁娶.作灶.掘井.纳畜.祭祀.祈福.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j+S祭祀.移徙.入宅.动土.破土.纳采.会亲友.竖柱.上梁.立券.入殓.移柩.安葬.启攒.n*S嫁娶.动土.开光.造屋.破土.祭祀.祈福.求嗣.斋醮.入殓.除服.成服.移柩.安葬.启攒.q)S移徙.入宅.出火.安门.安葬.纳采.嫁娶.祭祀.祈福.出行.开市.会亲友.动土.破土.启攒.c(E嫁娶.开市.安葬.破土.纳采.祭祀.祈福.出行.会亲友.修造.动土.移徙.入宅.C'SE嫁娶.安门.移徙.入宅.安葬.塞穴.结网.取渔.畋猎.&KQ安床.作灶.造船.会亲友.纳采.订盟.祭祀.祈福.安香.出火.修造.出行.开市.移徙.入宅.动土.安葬.破土.Q%) 嫁娶.安葬.祭祀.沐浴.解除.理发.扫舍.破屋.坏垣.余事勿取.g$7'开市.入宅.斋醮.纳采.嫁娶.祭祀.祈福.出行.修造.动土.移徙.入宅.安葬.破土.P#S_经络.探病.造屋.作灶.动土.嫁娶.祭祀.冠笄.修饰垣墙.置产.H"E]祭祀.祈福.安葬.安门.作灶.解除.平治道涂.余事勿取.p!S嫁娶.开市.动土.作灶.安葬.会亲友.冠笄.安床.会亲友.安机械.祭祀.祈福.求嗣.经络.7 S+移徙.入宅.出火.作灶.掘井.祭祀.祈福.求嗣.开光.嫁娶.出行.解除.伐木.拆卸.进人口.安床.动土.起基.上梁.栽种.纳畜.破土.谢土.启攒.安葬. }'入宅.出行.移徙.祭祀.嫁娶.动土.破土.作灶.开光.解除.伐木.竖柱.上梁.交易.立券.纳畜.入殓.移柩.安葬.|} 栽种.开光.出行.针灸.嫁娶.入宅.动土.破土.祭祀.祈福.求嗣.纳畜.入殓.启攒.谢土.除服.成服.{I入宅.安葬.伐木.作梁.纳畜.造畜椆栖.作灶.嫁娶.祭祀.开光.祈福.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲友.{%a嫁娶.词讼.行丧.安葬.牧养.伐木.作梁.开市.纳畜.造畜椆栖.祭祀.沐浴.理发.作灶.结网.栽种._)%嫁娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除服.成服.余事勿取.XE}开市.伐木.嫁娶.作梁.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.LSU祈福.嫁娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出火.塑绘.裁衣.会亲友.入学.拆卸.扫舍.造仓.挂匾.掘井.开池.结网.栽种.纳畜.破土.修坟.立碑.安葬.入殓.4S7C嫁娶.开市.安葬.破屋.坏垣.余事勿取.RE{造屋.开市.动土.破土.嫁娶.祭祀.沐浴.裁衣.出行.理发.移徙.捕捉.畋猎.放水.入宅.除服.成服.启攒.安葬.移柩.入殓.7Q)W嫁娶.安葬.祭祀.安碓磑.结网.余事勿取.sPa移徙.入宅.造庙.作灶.治病.安葬.祭祀.冠笄.嫁娶.会亲友.进人口.裁衣.结网.平治道涂.OOEi入宅.开光.开市.动土.嫁娶.订盟.纳采.祭祀.祈福.求嗣.会亲友.解除.出行.入学.纳财.开市.交易.立券.习艺.经络.安床.开仓.出货财.纳畜.安葬.启攒.修坟.入殓.|No探病.祭祀.出行.上梁.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲友.解除.求医.治病.入学.安床.安门.安香.出火.拆卸.扫舍.入宅.挂匾.开生坟.合寿木.破土.修坟.启攒.入殓.HM7k破土.动土.安葬.祭祀.解除.教牛马.会亲友.余事勿取.LSk开光.嫁娶.开市.动土.破土.交易.立券.纳财.安床.裁衣.造畜椆栖.安葬.谢土.启攒.除服.成服.修坟.立碑.移柩.入殓.cKau造庙.嫁娶.出行.动土.安葬.行丧.订盟.纳采.会亲友.祭祀.斋醮.沐浴.塑绘.出火.开光.竖柱.上梁.开市.交易.立券.作梁.开柱眼.伐木.架马.安门.安床.拆卸.牧养.造畜椆栖.掘井. }~F w h 6 | 5<sl,/{JEA开市.安床.安葬.修坟.嫁娶.纳采.订盟.问名.祭祀.冠笄.裁衣.会亲友.进人口.纳财.捕捉.作灶.eIa{造庙.入宅.修造.安葬.行丧.嫁娶.祭祀.沐浴.补垣.塞穴.断蚁.解除.余事勿取. HSW祈福.嫁娶.安床.入宅.造船.沐浴.开仓.出货财.开市.交易.立券.纳财.栽种.纳畜.牧养.畋猎.入殓.破土.安葬.;G7Q斋醮.嫁娶.开市.祭祀.破屋.坏垣.余事勿取.%F}]纳采.订盟.嫁娶.上梁.开市.斋醮.造屋.安门.沐浴.捕捉.畋猎.理发.整手足甲.入殓.除服.成服.破土.安葬.谢土.立碑.修坟.启攒.EE开市.出行.安葬.行丧.嫁娶.订盟.纳采.会亲友.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出火.挂匾.拆卸.置产.RDuA开光.嫁娶.开仓.出货财.造船.安葬.探病.平治道涂.余事勿取.'C5'挂匾.入宅.上梁.祈福.词讼.作梁.作灶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.嫁娶.栽种.入殓.移柩.安葬.?Bs作灶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.嫁娶.开光.解除.出火.拆卸.修造.进人口.入宅.移徙.安床.栽种.入殓.修坟.动土.除服.成服.yAo嫁娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲友.解除.余事勿取.7@ q入宅.置产.嫁娶.动土.栽种.开市.开光.动土.破土.祭祀.祈福.求嗣.沐浴.问名.交易.纳财.入殓.移柩.安葬.修坟.立碑.谢土.造畜椆栖.教牛马..?S嫁娶.合帐.入宅.行丧.安葬.纳采.订盟.祭祀.祈福.求嗣.斋醮.沐浴.进人口.会亲友.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q>aS嫁娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.捕捉.畋猎.n=S嫁娶.入宅.作灶.纳采.订盟.祭祀.斋醮.入殓.破土.启攒.安葬.修坟.立碑.除服.成服.s<S#祈福.造庙.祭祀.安床.谢土.嫁娶.纳采.订盟.开光.安香.出火.纳财.开市.交易.立券.裁衣.造屋.起基.修造.动土.安门.移徙.入宅.栽种.牧养.畋猎.掘井.开池.安葬.破土.入殓.除服.成服.立碑.B;7_开市.动土.破土.祭祀.破屋.坏垣.解除.余事勿取.4:o 伐木.开市.交易.上梁.作灶.安门.造屋.嫁娶.纳采.订盟.入宅.移徙.安床.祭祀.祈福.开光.出行.解除.出火.拆卸.动土.纳畜.谢土.安葬.破土.#9C开市.行丧.栽种.出行.出货财.安葬.置产.词讼.治病.嫁娶.祭祀.开光.伐木.出火.拆卸.入宅.移徙.修造.动土.上梁.安床.纳畜.8EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P7aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c6S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K5SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.,'C诸事不宜.解除.坏垣.余事勿取.a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3 'Q诸事不宜.治病.破屋.坏垣.余事勿取.R ) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅." )+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ 'A诸事不宜.平治道涂.余事勿取.N )嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬. oW # [  7 :rcD:oJ)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.P~aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c}S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K|SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S{aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;za%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)yE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XxE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.wS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.vaW入宅.作灶.词讼.移徙.出行.赴任.祭祀.祈福.求嗣.开光.解除.理发.会亲友.栽种.纳畜.牧养.安葬.修坟.立碑.启攒.u)探病.安葬.嫁娶.祭祀.开光.出火.出行.拆卸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.栽种.纳畜.,t'C诸事不宜.破屋.坏垣.余事勿取. s5嫁娶.开市.出火.栽种.破土.动土.入宅.移徙.安香.分居.掘井.作灶.开光.解除.拆卸.修造.动土.安床.纳畜.安葬.启攒.入殓.)r U嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.出行.拆卸.进人口.入宅.移徙.安床.栽种.动土.修造.纳畜.入殓.安葬.立碑.除服.成服.q}Q栽种.破土.置产.祭祀.嫁娶.动土.作灶.祈福.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.*''诸事不宜.诸事不宜.V)!开市.祭祀.祈福.斋醮.塑绘.开光.订盟.纳采.裁衣.冠笄.嫁娶.拆卸.入宅.安香.入殓.移柩.理发.安葬.修坟.谢土.赴任.移徙.沐浴.治病.破土.启攒.整手足甲.入学.作梁.S(Es嫁娶.动土.安葬.作灶.祭祀.沐浴.出行.冠笄.进人口.余事勿取.`')'入宅.作灶.祈福.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.&''诸事不宜.诸事不宜.,%'C诸事不宜.沐浴.扫舍.余事勿取.j$E嫁娶.入宅.治病.赴任.祭祀.祈福.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造畜椆栖.入殓.移柩.启攒.安葬.谢土.除服.成服.会亲友.竖柱.上梁.经络.开市.交易.立券.纳财.纳畜.筑堤. n\x I  E u x1 $Rn^#)#造屋.治病.祭祀.解除.祈福.开光.塑绘.斋醮.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.入殓.除服.成服.移柩.启攒.安床.赴任.出行.移徙.竖柱.上梁.伐木.栽种.破土.安葬.纳畜.:"'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取. !Ee开市.交易.破土.作灶.祭祀.塑绘.开光.订盟.纳采.嫁娶.安床.进人口.入殓.除服.成服.移柩.启攒.安葬.立碑.% )1作灶.治病.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.赴任.进人口.会亲友.EK作灶.治病.伐木.作梁.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.除服.成服.入殓.移柩.安葬.谢土.赴任.会亲友.进人口.出行.竖柱.上梁.经络.开市.交易.立券.纳财.开仓.FEY嫁娶.入宅.安门.移徙.理发.会亲友.补垣.塞穴.结网.ZE入宅.作灶.安床.开仓.祭祀.会亲友.嫁娶.沐浴.修造.动土.祈福.开光.塑绘.出行.订盟.纳采.裁衣.入殓.除服.成服.移柩.启攒.赴任.竖柱.上梁.纳财.扫舍.栽种.纳畜.伐木.,'C诸事不宜.祭祀.沐浴.余事勿取.pS开光.掘井.安葬.谢土.修坟.嫁娶.冠笄.安床.纳采.会亲友.塞穴.捕捉.置产.造畜椆栖.LSU移徙.入宅.安门.作梁.安葬.祭祀.祈福.求嗣.斋醮.沐浴.冠笄.出行.理发.拆卸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫舍.除服.成服.移柩.启攒.立碑.谢土.pS安床.安门.破土.修坟.安葬.捕捉.畋猎.会亲友.解除.入殓.除服.成服.移柩.余事勿取.ZSq嫁娶.开市.入宅.出火.移徙.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.会亲友.解除.入学.纳财.交易.立券.经络.起基.动土.定磉.开池.栽种.纳畜.牧养.破土.入殓.立碑.安葬.LEc造屋.造船.动土.破土.嫁娶.纳采.订盟.祭祀.冠笄.裁衣.伐木.作梁.架马.定磉.开柱眼.作灶.移徙.安床.畋猎.结网.开池.作厕.除服.成服.启攒.入殓.移柩.安葬.4)Q嫁娶.安葬.破屋.坏垣.祭祀.余事勿取.IE]开市.造庙.动土.破土.嫁娶.订盟.纳采.祭祀.祈福.塑绘.开光.移徙.安床.伐木.作梁.捕捉.畋猎.结网.求医.治病.解除.安葬.除服.成服.移柩.入殓.立碑.谢土.HSM嫁娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈福.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上梁.安门.安香.出火.教牛马.会亲友.破土.JE_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出火.修饰垣墙.平治道涂.会亲友.出行.开池.作厕.8'[诸事不宜.造畜椆栖.平治道涂.余事勿取. -嫁娶.作灶.出火.出行.入宅.移徙.安床.祈福.上梁.开市.交易.立券.纳财.会亲友.开光.理发.入殓.移柩.安葬.启攒.}5安葬.修坟.作灶.破土.造庙.动土.嫁娶.纳采.祭祀.祈福.求嗣.开光.出行.解除.移徙.伐木.安床.纳畜.出火.拆卸.gG动土.伐木.作梁.行丧.安葬.开生坟.祭祀.出行.裁衣.冠笄.会亲友.造畜椆栖.嫁娶.竖柱.上梁.移徙.纳财.纳畜.g[嫁娶.开光.会亲友.掘井.安门.栽种.祭祀.解除.裁衣.理发.安床.作灶.造畜椆栖.放水.筑堤.补垣.塞穴.整手足甲.扫舍. }'嫁娶.作灶.修坟.安门.入宅.立碑.安葬.安床.祭祀.祈福.求嗣.开光.开市.出行.解除.动土.起基.置产.栽种.,G'C诸事不宜.祭祀.塞穴.余事勿取.gF)5斋醮.安门.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.BE)m祈福.安葬.订盟.纳采.会亲友.安机械.纳财.牧养.:D'_余事勿取.祭祀.解除.破屋.坏垣.余事勿取.`C)'开市.赴任.嫁娶.订盟.纳采.出行.祭祀.祈福.动土.移徙.入宅.破土.安葬. ": t  b * kUe} ]CB)o移徙.入宅.入殓.除服.成服.移柩.破土.启攒.安葬.9A']余事勿取.祭祀.结网.造畜椆栖.余事勿取.?@7Y开市.动土.破土.开光.针灸.会亲友.启攒.安葬.8?)Y嫁娶.入宅.沐浴.理发.入学.习艺.进人口.&>)5行丧.安葬.作灶.造畜椆栖.?=)g动土.上梁.嫁娶.祭祀.安机械.入殓.破土.安葬.<Em作灶.入殓.安葬.安床.祭祀.祈福.斋醮.沐浴.竖柱.订盟.纳采.嫁娶.拆卸.入宅.移柩.启攒.谢土.赴任.出火.纳畜.J;Ea栽种.动土.安葬.开市.祭祀.作灶.入殓.除服.成服.畋猎.y:E=开仓.冠笄.伐木.作梁.祭祀.塑绘.开光.祈福.斋醮.出行.订盟.纳采.裁衣.嫁娶.拆卸.修造.安床.入宅.安香.入殓.启攒.安葬.谢土.赴任.会亲友.进人口.出行.移徙.上梁.经络.开市.交易.立券.纳财. 9E]出行.祈福.安葬.作灶.会亲友.嫁娶.订盟.纳采.纳婿.拆卸.修造.动土.起基.竖柱.上梁.安床.会亲友.纳财.,8'C诸事不宜.破屋.坏垣.余事勿取.]7Sw开光.嫁娶.掘井.伐木.作梁.祭祀.祈福.求嗣.斋醮.造庙.出火.安机械.会亲友.开市.交易.立券.纳财.习艺.经络.求医.治病.开池.作厕.畋猎.结网.栽种.牧养.安葬.破土.启攒.n6S嫁娶.祭祀.入宅.造屋.移徙.捕捉.结网.入殓.除服.成服.移柩.破土.安葬.启攒.立碑.\5E嫁娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治道涂.余事勿取.{4S3移徙.入宅.出行.祈福.嫁娶.沐浴.理发.冠笄.安床.开市.立券.会亲友.交易.纳财.结网.教牛马.3E 嫁娶.动土.破土.修坟.出行.造车器.造畜椆栖.解除.冠笄.裁衣.作梁.雕刻.会亲友.移徙.入宅.安机械.造畜椆栖.开市.扫舍.E2SG造庙.造船.动土.破土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.置产.求医.治病.开市.交易.立券.会亲友.移徙.竖柱.上梁.造屋.合脊.安门.放水.捕捉.纳畜. 1gA开光.嫁娶.会亲友.栽种.针灸.安葬.冠笄.祭祀.沐浴.作灶.理发.整手足甲.扫舍.补垣.塞穴.入殓.破土.启攒.0g'开市.开仓.出货财.安床.安门.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.求医.治病.出火.移徙.入宅.H/'{余事勿取.祭祀.立碑.修坟.启攒.除服.成服.余事勿取.m.a 探病.开渠.安葬.伐木.作灶.入宅.祭祀.理发.会亲友.进人口.嫁娶.针灸.入殓.移柩."-}W嫁娶.立碑.出行.伐木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人口.入宅.安床.出火.拆卸.修造.动土.栽种.0, c嫁娶.祈福.求嗣.出行.出火.拆卸.修造.动土.上梁.开光.进人口.开市.交易.立券.挂匾.安床.入宅.移徙.栽种.伐木.入殓.破土.除服.成服.,+'C诸事不宜.破屋.坏垣.余事勿取.#*5嫁娶.出行.安床.作灶.祭祀.入宅.移徙.出火.进人口.置产.开光.解除.起基.动土.拆卸.上梁.立碑.修坟.安葬.破土.启攒.移柩.0) c嫁娶.祭祀.祈福.求嗣.沐浴.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.入宅.移徙.安床.栽种.纳畜.入殓.安葬.启攒.除服.成服.WbE{嫁娶.移徙.入宅.开市.沐浴.入殓.移柩.除服.成服.破土.平治道涂.a''诸事不宜.诸事不宜.:`'_诸事不宜.祭祀.沐浴.赴任.出行.余事勿取.__oa动土.冠笄.移徙.入宅.开市.竖柱.上梁.祭祀.出行.成服.除服.沐浴.入殓. ^Ee安床.开光.开市.交易.祭祀.裁衣.冠笄.嫁娶.安机械.拆卸.动土.起基.移徙.入宅.入殓.启攒.安葬.造仓.经络.4]E5入殓.安葬.开市.交易.祭祀.诸事不宜.{\EA移徙.入宅.作灶.安葬.祭祀.裁衣.冠笄.嫁娶.纳婿.会亲友.除服.成服.移柩.捕捉.进人口.入殓.u[)Q定磉.安葬.祭祀.赴任.动土.上梁.开光.塑绘.冠笄.拆卸.起基.安床.开市.立券.赴任.经络. "Uim% G  i 5 U_u v`U7ZE9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.嫁娶.拆卸.起基.安床.入宅.开市.入殓.除服.成服.移柩.破土.谢土.挂匾.开柱眼.交易.IYE_移徙.入宅.出行.栽种.祭祀.沐浴.破屋.坏垣.余事勿取.XEW作灶.祭祀.入宅.嫁娶.祭祀.冠笄.会亲友.拆卸.起基.除服.成服.移柩.启攒.安葬.沐浴.捕捉.开光.塑绘.AW)i入宅.伐木.祭祀.会亲友.纳采.嫁娶.开光.塑绘.斋醮.安香.开市.立券.除服.成服.入殓.移柩.安葬.赴任.进人口.出行.裁衣.修造.动土.上梁.经络.交易.:V)]嫁娶.入宅.祭祀.沐浴.修饰垣墙.平治道涂.U)e嫁娶.安葬.祭祀.沐浴.解除.理发.冠笄.安机械.作灶.造仓.开市.开池.作厕.补垣.塞穴.断蚁.结网.TEm造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上梁.合脊.安床.移徙.入宅.开市.栽种.作厕.cSS动土.作灶.行丧.安葬.修坟.祭祀.祈福.求嗣.出行.沐浴.交易.扫舍.教牛马.!R))开光.安床.祭祀.出行.解除.冠笄.嫁娶.伐木.架马.开柱眼.修造.动土.移徙.入宅.开生坟.合寿木.入殓.移柩.破土.安葬.修坟.xQa嫁娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲友.捕捉.畋猎.启攒.除服.成服.移柩.JPo7开光.动土.破土.开市.修造.入宅.安门.祭祀.嫁娶.捕捉.7O=A行丧.安葬.合寿木.开光.求嗣.雕刻.嫁娶.订盟.纳采.出火.拆卸.修造.动土.起基.上梁.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.4Na嫁娶.造庙.造桥.造船.作灶.安葬.订盟.纳采.祭祀.祈福.安香.出火.修造.动土.上梁.安门.起基.竖柱.上梁.定磉.开池.移徙.入宅.立券.破土.%M5'探病.余事勿取.余事勿取.mLo}祭祀.嫁娶.安床.开市.入宅.探病.上梁.沐浴.捕捉.入殓.除服.成服.破土.启攒.安葬.%KS纳采.订盟.架马.词讼.开渠.嫁娶.造车器.安机械.祭祀.祈福.开光.安香.出火.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.)J)9嫁娶.移徙.祭祀.求嗣.开光.出行.伐木.作梁.出火.解除.拆卸.进人口.修造.动土.起基.安床.栽种.纳畜.入殓.破土.安葬.除服.成服.NI'诸事不宜.祭祀.作灶.沐浴.修饰垣墙.平治道涂.余事勿取.H嫁娶.纳财.祈福.安葬.修造.开市.交易.立券.动土.上梁.塑绘.开光.进人口.纳畜.补垣.塞穴.栽种.牧养.G %嫁娶.会亲友.进人口.出行.入宅.移徙.赴任.作灶.祭祀.解除.沐浴.理发.整手足甲.入殓.移柩.破土.安葬.扫舍.FSm破土.置产.掘井.动土.安床.祭祀.祈福.求嗣.开光.出行.解除.上梁.造屋.移徙.安门.纳财.牧养.纳畜.安葬.启攒.入殓.Ea_造屋.开光.理发.造船.掘井.作灶.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.移徙.动土.安床.入殓.破土.安葬.启攒.}入宅.作梁.安门.伐木.修造.上梁.入殓.造屋.嫁娶.祭祀.祈福.求嗣.出行.动土.安床.掘井.破土.启攒.F~)u动土.安葬.订盟.纳采.祭祀.祈福.安机械.作灶.纳畜.g})5开光.针灸.嫁娶.订盟.纳采.祭祀.祈福.求医.治病.动土.移徙.入宅.破土.安葬.`|)'动土.破土.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.移徙.入宅.启攒.安葬.:{'_诸事不宜.沐浴.治病.破屋.坏垣.余事勿取.5z)S嫁娶.入宅.捕捉.结网.入殓.破土.安葬.Cy)o开市.安葬.嫁娶.祭祀.祈福.斋醮.动土.移徙.入宅.MxCi嫁娶.祈福.余事勿取.沐浴.修饰垣墙.平治道涂.余事勿取.Nw)开市.安葬.订盟.纳采.出行.会亲友.修造.上梁.移徙.入宅.Rv) 嫁娶.开市.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.安葬.Ju7o作灶.动土.破土.嫁娶.出行.纳畜.祭祀.入殓.启攒.安葬.Ct)o动土.破土.嫁娶.祭祀.祈福.斋醮.作灶.移徙.入宅. "k^ v ' u - o F  waLV% s 祈福.出行.订盟.纳采.嫁娶.裁衣.动土.安床.放水.开市.掘井.交易.立券.栽种.开渠.除服.成服.移柩.破土.r 3塑绘.开光.解除.订盟.纳采.嫁娶.出火.修造.动土.移徙.入宅.拆卸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养. q 祈福.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生坟.入殓.除服.成服.移柩.破土.安葬.7pS+动土.破土.订盟.安床.开池.祈福.斋醮.出行.冠笄.嫁娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除服.成服.移柩.破土.安葬.启攒.4o)Q行丧.安葬.破屋.坏垣.治病.余事勿取.|nS5嫁娶.纳采.订盟.开市.入宅.祭祀.捕捉.畋猎.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.启攒.ImE]开市.立券.纳财.作灶.纳采.订盟.嫁娶.祭祀.祈福.普渡.开光.安香.出火.移徙.入宅.竖柱.修造.动土.竖柱.上梁.起基.造屋.安门.造庙.造桥.破土.启攒.安葬.glE嫁娶.安门.动土.安葬.出行.沐浴.订盟.纳采.裁衣.竖柱.上梁.移徙.纳畜.牧养. kSO祈福.开市.动土.行丧.安葬.塑绘.冠笄.嫁娶.会亲友.进人口.经络.裁衣.栽种.纳畜.牧养.补垣.塞穴.捕捉.{jS3嫁娶.出行.入宅.开市.安门.祭祀.沐浴.理发.整手足甲.冠笄.解除.入殓.移柩.破土.启攒.安葬.uia开市.动土.破土.安床.开仓.上梁.嫁娶.冠笄.祭祀.沐浴.普渡.出行.纳财.扫舍.纳畜.赴任.ha5动土.破土.掘井.开光.上梁.词讼.嫁娶.普渡.祭祀.祈福.补垣.塞穴.断蚁.筑堤.入殓.除服.成服.安葬.OgS[出火.入宅.造屋.安门.安葬.嫁娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲友.开市.纳财.修造.动土.竖柱.上梁.开光.开仓.出货财.纳畜.牧养.开池.破土.启攒.mf}o嫁娶.出行.安葬.入殓.入宅.作灶.冠笄.上梁.祭祀.祈福.求嗣.开光.开市.牧养.理发.ie}g安葬.经络.修坟.破土.开市.安床.启攒.立碑.祭祀.作灶.纳财.栽种.纳畜.进人口."d G嫁娶.开光.出行.祈福.求嗣.解除.拆卸.动土.修造.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.纳畜.入殓.移柩.安葬.cE{伐木.祭祀.纳畜.祭祀.嫁娶.开光.出行.理发.作梁.出火.拆卸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.栽种.,b'C诸事不宜.破屋.坏垣.余事勿取.a}嫁娶.入宅.移徙.作灶.开市.交易.安门.栽种.祭祀.解除.沐浴.整手足甲.入殓.移柩.破土.启攒.安葬.oW嫁娶.破土.置产.栽种.安葬.修坟.行丧.入宅.移徙.安床.开光.祈福.求嗣.进人口.开市.交易.立券.出火.拆卸.修造.动土.ja开仓.出货财.置产.安葬.动土.破土.掘井.栽种.嫁娶.祭祀.裁衣.结网.冠笄.沐浴.J7o祈福.动土.破土.嫁娶.出行.开市.安床.入殓.启攒.安葬.C)o开市.入宅.嫁娶.祭祀.祈福.斋醮.治病.破土.安葬.J)}动土.安葬.嫁娶.纳采.出行.祭祀.祈福.解除.移徙.入宅.^'%诸事不宜.补垣.塞穴.结网.入殓.除服.成服.移柩.安葬.启攒.余事勿取.J)}造庙.安葬.嫁娶.开市.立券.祭祀.祈福.动土.移徙.入宅..)E开市.破土.祭祀.作灶.纳财.捕捉.R赴任.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.Y)祭祀.祈福.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.3'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.J7o嫁娶.移徙.入宅.纳采.祭祀.祈福.解除.动土.破土.安葬.,'C诸事不宜.沐浴.扫舍.余事勿取.P' 余事勿取.祭祀.冠笄.嫁娶.捕捉.结网.畋猎.取渔.余事勿取.  !塑绘.出行.冠笄.嫁娶.进人口.裁衣.纳婿.造畜椆栖.交易.立券.牧养.开生坟.入殓.除服.成服.移柩.安葬.启攒. #l R u 4 D e  T#bR S;开市.斋醮.安床.出行.经络.移徙.入宅.治病.会亲友.祭祀.祈福.斋醮.安香.移徙.嫁娶.造屋.起基. Eo动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲友.裁衣.开仓.经络.纳畜.造畜椆栖.教牛马.牧养.W a_移徙.开市.入宅.嫁娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿取. aO造屋.入宅.作灶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.嫁娶.会亲友.放水.掘井.牧养.纳畜.开渠.安碓磑.bS开市.入宅.安床.动土.安葬.祭祀.进人口.纳财.纳畜.牧养.捕捉.余事勿取.AKG嫁娶.开市.栽种.合寿木.祭祀.祈福.斋醮.出行.纳采.订盟.安机械.出火.拆卸.修造.动土.起基.移徙.入宅.造庙.入殓.除服.成服.移柩.破土.安葬.谢土.ZSq祈福.上梁.开仓.掘井.牧养.纳采.订盟.嫁娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲友.安香.出火.拆卸.造屋.起基.安床.作灶.挂匾.安葬.破土.启攒.立碑.入殓.移柩.;)_嫁娶.出行.求医.治病.破屋.坏垣.余事勿取.mo}出火.嫁娶.入宅.作灶.破土.上梁.动土.沐浴.理发.捕捉.入殓.移柩.破土.启攒.安葬.6S)嫁娶.安葬.行丧.破土.修坟.订盟.纳采.祭祀.祈福.开光.安香.出火.立券.安机械.移徙.入宅.竖柱.上梁.会亲友.安床.拆卸.挂匾.牧养.教牛马.OaO开市.动土.破土.嫁娶.修造.安葬.祭祀.修饰垣墙.平治道涂.ra出行.安门.修造.嫁娶.上梁.入宅.祭祀.理发.修饰垣墙.平治道涂.沐浴.整手足甲.扫舍.&)3置产.安床.开光.求嗣.出行.解除.伐木.出火.拆卸.修造.上梁.起基.入宅.移徙.开市.交易.立券.栽种.牧养.入殓.安葬.除服.成服.E{安葬.行丧.伐木.作梁.嫁娶.祭祀.祈福.出火.开光.求嗣.出行.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.动土.,~'C诸事不宜.祭祀.解除.余事勿取.}E安葬.出行.祈福.栽种.求嗣.嫁娶.纳采.合帐.裁衣.冠笄.伐木.作梁.修造.动土.起基.竖柱.上梁.安门.作灶.筑堤.造畜椆栖.6E{安葬.开市.交易.立券.嫁娶.开光.祭祀.祈福.求嗣.出行.解除.伐木.入宅.移徙.安床.出火.拆卸.修造.上梁.栽种.移柩.,5'C诸事不宜.祭祀.栽种.余事勿取.J4)}嫁娶.开光.开光.求医.治病.动土.上梁.入殓.破土.安葬.J3)}开光.开市.嫁娶.订盟.纳采.祭祀.祈福.入殓.破土.安葬.2''诸事不宜.诸事不宜.R1) 开市.安葬.订盟.纳采.出行.祭祀.祈福.修造.动土.移徙.入宅.`05作灶.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.;/)_行丧.安葬.嫁娶.祭祀.沐浴.扫舍.修饰垣墙.Y.)动土.破土.嫁娶.纳采.出行.求医.治病.开市.移徙.入宅.启攒.安葬.M-7u移徙.入宅.安葬.订盟.纳采.出行.祈福.斋醮.安床.会亲友.<,7S上梁.动土.破土.祭祀.入殓.移柩.启攒.安葬.5+)S嫁娶.安葬.裁衣.作灶.移徙.入宅.纳畜.Y*)开市.安门.嫁娶.纳采.祭祀.祈福.求医.治病.出行.动土.移徙.入宅.@)'k诸事不宜.祭祀.捕捉.取渔.修饰垣墙.余事勿取.( #订盟.纳采.会亲友.进人口.雕刻.拆卸.修造.动土.起基.开市.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.'EI开市.安门.掘井.作灶.嫁娶.出行.安机械.祭祀.塑绘.开光.治病.经络.安床.结网.塞穴.破土.入殓.B&)m嫁娶.入宅.破屋.坏垣.求医.治病.畋猎.余事勿取.^%S{开市.交易.嫁娶.安葬.行丧.祭祀.沐浴.捕捉.结网.畋猎.取渔.余事勿取.d$E开市.伐木.作梁.作灶.安机械.移徙.入宅.出行.祭祀.祈福.斋醮.纳采.订盟.安香.出火.解除.会亲友.修造.动土.拆卸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑. ! c }  ! 5 N n du" ^ENu#K/斋醮.出行.治病.合寿木.祭祀.沐浴.理发.嫁娶.作灶.整手足甲.扫舍.修饰垣墙.平治道涂.q"Y安床.出货财.作灶.动土.破土.开光.求嗣.出行.冠笄.嫁娶.伐木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出火.挂匾.起基.修造.开生坟.合寿木.入殓.除服.成服.移柩.安葬.R!Eo行丧.伐木.作梁.作灶.嫁娶.订盟.纳采.冠笄.会亲友.安机械.造车器.祭祀.出行.纳财.入宅.安香.出火.入学.塑绘.开光.拆卸.起基.修造.动土.牧养.栽种.安门.作厕.< S7斋醮.开渠.上梁.动土.破土.祭祀.交易.纳财.&S 祈福.开光.掘井.开市.安葬.嫁娶.冠笄.修造.动土.作灶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.Sq合帐.上梁.经络.安葬.入殓.祭祀.祈福.求嗣.斋醮.安香.解除.移徙.入宅.会亲友.求医.治病.动土.破土.开生坟.合寿木.BSC开市.安葬.破土.修坟.掘井.祭祀.作灶.余事勿取.,'C诸事不宜.结网.解除.余事勿取."as入宅.移徙.理发.出火.嫁娶.出行.开市.交易.立券.祭祀.祈福.开光.伐木.进人口.安床.拆卸.修造.动土.栽种.破土.移柩.安葬.% M嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.动土.上梁.出火.进人口.入宅.移徙.安床.栽种.纳畜.牧养.竖柱.安门.修造.解除.会亲友.:'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.*SC嫁娶.上梁.修造.拆卸.架马.入宅.伐木.动土.出火.开柱眼.祭祀.开光.出行.解除.塑绘.裁衣.入殓.移柩.破土.启攒.安葬.除服.成服."R G嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.安门.开市.交易.立券.挂匾.栽种.破土.安葬.]Q'#诸事不宜.沐浴.平治道涂.扫舍.入殓.移柩.破土.启攒.安葬.余事勿取.EP)s开市.安葬.订盟.纳采.会亲友.安床.作灶.造畜椆栖.`O)'移徙.入宅.嫁娶.订盟.纳采.出行.祭祀.祈福.斋醮.动土.上梁.破土.安葬.,N'C诸事不宜.塞穴.结网.余事勿取.YM)赴任.捕捉.嫁娶.裁衣.祭祀.出行.安床.作灶.移徙.入宅.破土.安葬.CL)o嫁娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.E嫁娶.出火.移徙.入宅.开市.交易.立券.安机械.会亲友.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上梁.安门.作灶.放水.作厕.开池.栽种.牧养.造畜椆栖.破土.安葬.立碑. %j& $ zAd1P5;=EC斋醮.开市.嫁娶.作灶.沐浴.扫舍.余事勿取.B<)m行丧.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取.";E移徙.入宅.造屋.架马.嫁娶.纳采.订盟.斋醮.开光.祭祀.祈福.求医.治病.会亲友.动土.解除.捕捉.纳畜.牧养.入殓.破土.安葬.::E?动土.破土.嫁娶.嫁娶.祭祀.祈福.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上梁.作灶.安门.安香.出火.造屋.启攒.安葬.^9S{祈福.嫁娶.入宅.安床.作灶.祭祀.沐浴.移徙.破土.安葬.扫舍.平治道涂.F8'w诸事不宜.祭祀.平治道涂.解除.修饰垣墙.余事勿取.7}I谢土.祈福.上梁.作灶.斋醮.修造.入宅.安门.纳采.嫁娶.开光.出行.理发.会亲友.开市.安床.栽种.牧养.入殓.移柩.启攒.%6}]嫁娶.纳财.安葬.出行.开市.立券.作灶.栽种.祭祀.祈福.开光.求嗣.解除.伐木.出火.入宅.移徙.安床.拆卸.修造.动土.造畜椆栖.I5'}诸事不宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿取.|n7Q词讼.开光.开市.嫁娶.出行.合帐.冠笄.安床.除服.成服.作灶.交易.立券.入殓.移柩.破土.安葬.maW祈福.入殓.祭祀.作灶.安葬.探病.嫁娶.开光.出行.出火.拆卸.进人口.开市.立券.交易.挂匾.入宅.移徙.安床.栽种.,l'C诸事不宜.解除.坏垣.余事勿取.k' 诸事不宜..j77嫁娶.入宅.安葬.沐浴.结网.取渔.:i'_诸事不宜.祭祀.求医.治病.解除.余事勿取.Jh7o开市.动土.破土.嫁娶.纳采.祭祀.祈福.出行.移徙.求医.Jg7o嫁娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4f)Q嫁娶.安葬.祭祀.作灶.掘井.平治道涂.Fe7g嫁娶.动土.破土.祭祀.会亲友.开市.安床.启攒.安葬.Qd7}嫁娶.开市.安葬.纳采.开光.求医.治病.动土.上梁.移徙.入宅.jcS掘井.动土.破土.安葬.开光.祭祀.进人口.嫁娶.安床.解除.冠笄.出行.裁衣.扫舍.bEk掘井.安门.嫁娶.纳采.祭祀.祈福.裁衣.合帐.安床.入殓.除服.成服.移柩.破土.启攒.安葬.谢土.立碑.造畜椆栖.%aE入殓.安葬.入宅.安床.订盟.纳采.嫁娶.进人口.会亲友.交易.立券.动土.除服.谢土.移柩.破土.启攒.赴任.出行.开市.纳财.栽种.:`Q5造庙.嫁娶.安床.余事勿取.祭祀.余事勿取._EW出火.入宅.安葬.伐木.祭祀.塑绘.开光.订盟.纳采.冠笄.裁衣.安机械.拆卸.修造.动土.安床.经络.开市.^''诸事不宜.诸事不宜.f]S 嫁娶.开市.交易.入宅.安葬.祭祀.沐浴.破屋.坏垣.求医.治病.解除.余事勿取.\E 开市.动土.掘井.开池.祭祀.祈福.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.取渔.解除.安葬.启攒.谢土.入殓.@[KE入宅.动土.开仓.出货财.造车器.祭祀.祈福.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.合脊.起基.定磉.安门.纳畜.安葬.开生坟.立碑.谢土.斋醮.OZS]嫁娶.安葬.动土.安床.治病.祭祀.作灶.平治道涂.余事勿取.:Ya#祈福.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.嫁娶.会亲友.进人口.安床.开市.交易.纳畜.牧养.入殓.除服.成服.移柩.安葬.启攒.~Xa+开市.嫁娶.移徙.入宅.掘井.安葬.沐浴.斋醮.解除.求医.治病.会亲友.造畜椆栖.栽种.理发.扫舍.aWoe动土.破土.行丧.开光.作梁.安葬.探病.祭祀.解除.教牛马.出行.余事勿取.fVa}开光.嫁娶.掘井.安葬.安门.探病.祭祀.祈福.求嗣.斋醮.冠笄.作灶.纳财.交易.nUS祈福.动土.破土.安葬.入殓.纳采.嫁娶.出行.开市.立券.纳畜.牧养.出火.移徙.入宅.4T)Q嫁娶.安葬.祭祀.捕捉.解除.余事勿取.XSE}作灶.开市.安葬.作梁.裁衣.合帐.冠笄.嫁娶.纳婿.安床.入殓.纳财. Q}b k  N 8 iL' Q4RE3嫁娶.栽种.伐木.安葬.祭祀.开光.塑绘.纳采.裁衣.拆卸.安床.起基.动土.竖柱.上梁.移徙.入宅.安香.开市.立券.挂匾.沐浴.出行.求嗣.安门.KQ/w开光.出货财.祭祀.动土.上梁.订盟.纳采.嫁娶.安机械.拆卸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.赴任.出行.移徙.祈福.求嗣.解除.造仓.进人口.- 'E诸事不宜.破屋.坏垣.求医.治病.0 E+安床.开市.立券.作灶.祭祀.祈福.斋醮.订盟.纳采.裁衣.合帐.拆卸.修造.动土.上梁.起基.移柩.安葬.谢土.沐浴.扫舍.开柱眼.伐木.出火.: )[栽种.伐木.祭祀.嫁娶.祈福.纳采.裁衣.合帐.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲友.挂匾.交易.立券.纳财.造仓.放水.^E造屋.作灶.治病.探病.冠笄.入殓.除服.成服.移柩.平治道涂.修饰垣墙.%E出行.嫁娶.入宅.安葬.开光.塑绘.裁衣.冠笄.伐木.拆卸.竖柱.上梁.开仓.会亲友.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5E7栽种.作灶.安葬.嫁娶.祭祀.扫舍.塞穴.>EG作灶.掘井.动土.栽种.祈福.开光.塑绘.酬神.订盟.纳采.裁衣.安床.开市.立券.入殓.除服.成服.移柩.启攒.安葬.立碑.赴任.会亲友.出行.交易.竖柱.S_作灶.开光.嫁娶.开市.入宅.订盟.纳采.冠笄.拆卸.修造.动土.安床.入殓.除服.成服.移柩.安葬.破土.启攒.造仓.W)栽种.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.嫁娶.裁衣.动土.起基.出火.拆卸.移徙.入宅.安香.修造.竖柱.上梁.纳畜.牧养.祈福.求嗣.解除.伐木.定磉.造屋.安门.CSE嫁娶.入宅.移徙.作灶.安葬.祭祀.沐浴.捕捉.栽种.4E3造庙.嫁娶.伐木.安葬.祭祀.开光.塑绘.订盟.纳采.合帐.冠笄.拆卸.动土.起基.上梁.入宅.安香.开市.立券.纳财.沐浴.求嗣.出火.竖柱.安门.)作梁.造庙.祭祀.出行.订盟.纳采.裁衣.合帐.冠笄.进人口.动土.安床.作灶.入殓.移柩.安葬.破土.结网.取渔.畋猎.')诸事不宜.破屋.坏垣.~E 安床.嫁娶.作灶.入宅.祭祀.解除.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.谢土.沐浴.扫舍.捕捉.取渔.结网.畋猎.理发.I}赴任.祈福.求嗣.开光.塑绘.斋醮.订盟.纳采.嫁娶.拆卸.安床.入宅.安香.移柩.修坟.安葬.谢土.栽种.解除.冠笄.裁衣.移徙.修造.动土.竖柱.放水.启攒.立碑.X|So动土.作灶.入宅.开光.安床.祭祀.嫁娶.纳婿.除服.成服.入殓.移柩.3{E1作灶.出行.入宅.安葬.塑绘.开光.订盟.纳采.裁衣.合帐.冠笄.安机械.会亲友.纳财.开市.立券.交易.安床.竖柱.上梁.结网.栽种.解除.经络.,z'C诸事不宜.扫舍.塞穴.余事勿取.tya栽种.动土.安葬.掘井.修坟.探病.祭祀.会亲友.立券.交易.裁衣.合帐.嫁娶.冠笄.进人口.3xS#祭祀.嫁娶.出行.上梁.掘井.裁衣.经络.伐木.开柱眼.拆卸.修造.动土.上梁.合脊.合寿木.入殓.除服.成服.移柩.破土.安葬.启攒.修坟.立碑.4wS%纳采.动土.开市.交易.安门.开光.祈福.求嗣.出行.解除.伐木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除服.成服.移柩.谢土.纳畜.牧养.TvEu纳财.开市.安葬.破土.理发.冠笄.嫁娶.进人口.栽种.捕捉.针灸.uE{祈福.嫁娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出火.拆卸.起基.修造.动土.上梁.移徙.造船.开市.交易.立券.纳财.jtS塑绘.开光.造桥.除服.成服.嫁娶.冠笄.祭祀.出行.会亲友.修造.动土.入殓.破土.;sEC嫁娶.移徙.开市.入宅.破屋.坏垣.余事勿取.grS 纳采.开光.安床.嫁娶.开市.祈福.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~q=O纳畜.理发.合寿木.嫁娶.造车器.纳采.订盟.祭祀.祈福.安机械.移徙.入宅.开市.立券.破土.安葬. LC 2 8 > >(/vpLp')诸事不宜.解除.沐浴.foC栽种.出行.祈福.行丧.纳畜.安葬.安门.伐木.作梁.牧养.作灶.解除.平治道涂.n5入宅.移徙.出火.分居.安香.作灶.开市.交易.立券.安葬.动土.伐木.嫁娶.开光.求嗣.会亲友.安床.牧养.塑绘.针灸.m)掘井.词讼.嫁娶.安床.开光.出行.祭祀.动土.出火.解除.会亲友.开市.交易.立券.挂匾.入宅.移徙.拆卸.破土.启攒.安葬.%oQ嫁娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.裁衣.竖柱.上梁.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.启攒.u$ o开光.掘井.针灸.出行.嫁娶.入宅.移徙.作灶.动土.祭祀.祈福.求嗣.入殓.启攒.安葬.移柩.#E 入殓.安葬.作灶.入宅.祭祀.沐浴.祈福.求嗣.斋醮.订盟.纳采.裁衣.冠笄.开市.立券.交易.纳财.沐浴.除服.谢土.出行.移柩.>"EG安葬.作灶.伐木.作梁.祭祀.求嗣.沐浴.酬神.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造仓.开池.经络.纳财.开市.立券.交易.结网.取渔.纳畜.捕捉.X!E}嫁娶.上梁.入宅.作灶.取渔.入殓.除服.成服.移柩.破土.安葬.立碑.; )]作灶.安床.祈福.求嗣.斋醮.塑绘.开光.订盟.纳采.嫁娶.动土.入宅.安香.移柩.安葬.谢土.出行.沐浴.修造.竖柱.上梁.纳财.破土.解除.安门.放水.')诸事不宜.求医.破屋.BEO栽种.动土.开市.作灶.祭祀.祈福.酬神.订盟.纳采.冠笄.裁衣.合帐.嫁娶.安床.移徙.入宅.安香.入殓.移柩.启攒.安葬.解除.取渔.捕捉.伐木.安门.出火.]E造屋.栽种.安葬.作灶.塑绘.开光.酬神.斋醮.订盟.纳采.裁衣.合帐.拆卸.动土.上梁.安床.安香.造庙.挂匾.会亲友.进人口.出行.修造.纳财.伐木.放水.出火.纳畜.沐浴.安门.A_5祭祀.祈福.安葬.安门.余事勿取.作灶.平治道涂.XE}斋醮.作灶.安床.安葬.安床.合帐.入宅.问名.纳采.求嗣.祭祀.开仓.0U掘井.祭祀.斋醮.裁衣.合帐.冠笄.订盟.纳采.嫁娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲友.出行.祈福.求嗣.立碑.上梁.放水.[Su祭祀.祈福.移徙.嫁娶.入宅.裁衣.合帐.入殓.除服.成服.会亲友.纳财.EQ出行.嫁娶.入宅.动土.祭祀.祈福.求嗣.酬神.裁衣.安床.立券.交易.入殓.除服.成服.移柩.谢土.启攒.EEU安葬.上梁.入宅.作灶.祭祀.沐浴.开光.塑绘.祈福.求嗣.订盟.纳采.冠笄.裁衣.嫁娶.动土.除服.成服.移柩.破土.启攒.出行.安碓磑.放水.开市.立券.交易.&S 伐木.作灶.安葬.取渔.入宅.塑绘.开光.祈福.求嗣.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I'}余事勿取.祭祀.结网.入殓.除服.成服.移柩.安葬.破土.&E安床.栽种.治病.作灶.祭祀.冠笄.嫁娶.拆卸.修造.动土.起基.上梁.造屋.入宅.开市.开池.塞穴.入殓.除服.成服.移柩.安葬.破土._7入宅.开市.安葬.祭祀.沐浴.求医.治病.扫舍.破屋.坏垣.解除.余事勿取.S]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.嫁娶.会亲友.进人口.牧养.捕捉.入殓.移柩.安葬.启攒.Eo+置产.造屋.合脊.开光.探病.安门.作灶.祈福.求嗣.斋醮.纳采.嫁娶.伐木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除服.成服.移柩.安葬.破土.谢土.AEO嫁娶.祈福.掘井.安葬.祭祀.平治道涂.余事勿取.\E开市.动土.安葬.破土.会亲友.求嗣.理发.冠笄.结网.捕捉.开光.理发.uS'开光.嫁娶.作灶.掘井.纳畜.祭祀.祈福.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j S祭祀.移徙.入宅.动土.破土.纳采.会亲友.竖柱.上梁.立券.入殓.移柩.安葬.启攒.n S嫁娶.动土.开光.造屋.破土.祭祀.祈福.求嗣.斋醮.入殓.除服.成服.移柩.安葬.启攒. m a % N|x83SK; Ek作灶.掘井.嫁娶.入宅.祭祀.祈福.斋醮.沐浴.安床.安机械.造车器.入殓.移柩.启攒.安葬.立碑.合帐.经络.交易. E]栽种.嫁娶.入殓.安葬.祭祀.出行.沐浴.裁衣.祈福.斋醮.订盟.纳采.嫁娶.安机械.开市.立券.安碓磑.纳畜.| EC开仓.造屋.安葬.安床.祭祀.祈福.斋醮.塑绘.开光.除服.成服.入殓.作灶.嫁娶.捕捉.畋猎.纳财.QC) 破土.伐木.入殓.除服.成服.移柩.启攒.安葬.立碑.余事勿取.uB)Q入宅.安床.塑绘.开光.出行.订盟.纳采.除服.成服.嫁娶.纳婿.入殓.移柩.启攒.安葬.立碑.3A'Q诸事不宜.解除.破屋.坏垣.余事勿取.Z@E造屋.开市.作灶.入宅.祭祀.会亲友.出行.订盟.纳采.沐浴.修造.动土.祈福.斋醮.嫁娶.拆卸.安床.入殓.移柩.安葬.谢土.赴任.裁衣.竖柱.上梁.伐木.捕捉.栽种.破土.安门.%?E出行.治病.安葬.开市.会亲友.纳采.进人口.修造.动土.竖柱.上梁.祭祀.开光.塑绘.祈福.斋醮.嫁娶.安床.移徙.入宅.安香.纳畜.U>Ew嫁娶.移徙.入宅.开光.修饰垣墙.平治道涂.入殓.移柩.余事勿取.{=EA作灶.掘井.谢土.入宅.出行.嫁娶.订盟.纳采.入殓.安床.启攒.安葬.祭祀.裁衣.会亲友.进人口.B<EO作灶.祭祀.上梁.出行.沐浴.解除.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.移徙.入宅.除服.成服.移柩.破土.启攒.安葬.扫舍.修坟.伐木.纳财.交易.立券.,;'C诸事不宜.祭祀.解除.余事勿取.A:EM开仓.嫁娶.移徙.入宅.祭祀.沐浴.祈福.斋醮.订盟.纳采.裁衣.拆卸.起基.竖柱.上梁.安床.入殓.除服.成服.移柩.启攒.挂匾.求嗣.出行.合帐.造畜椆栖.b9E嫁娶.入殓.安葬.出行.塑绘.开光.沐浴.冠笄.会亲友.作灶.放水.造畜椆栖.;8)_开市.安床.祭祀.作灶.入殓.除服.余事勿取.X7E}开市.伐木.嫁娶.作梁.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.L6SU祈福.嫁娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出火.塑绘.裁衣.会亲友.入学.拆卸.扫舍.造仓.挂匾.掘井.开池.结网.栽种.纳畜.破土.修坟.立碑.安葬.入殓.457C嫁娶.开市.安葬.破屋.坏垣.余事勿取.4E{造屋.开市.动土.破土.嫁娶.祭祀.沐浴.裁衣.出行.理发.移徙.捕捉.畋猎.放水.入宅.除服.成服.启攒.安葬.移柩.入殓.73)W嫁娶.安葬.祭祀.安碓磑.结网.余事勿取.s2a移徙.入宅.造庙.作灶.治病.安葬.祭祀.冠笄.嫁娶.会亲友.进人口.裁衣.结网.平治道涂.O1Ei入宅.开光.开市.动土.嫁娶.订盟.纳采.祭祀.祈福.求嗣.会亲友.解除.出行.入学.纳财.开市.交易.立券.习艺.经络.安床.开仓.出货财.纳畜.安葬.启攒.修坟.入殓.|0o探病.祭祀.出行.上梁.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲友.解除.求医.治病.入学.安床.安门.安香.出火.拆卸.扫舍.入宅.挂匾.开生坟.合寿木.破土.修坟.启攒.入殓.H/7k破土.动土.安葬.祭祀.解除.教牛马.会亲友.余事勿取..Sk开光.嫁娶.开市.动土.破土.交易.立券.纳财.安床.裁衣.造畜椆栖.安葬.谢土.启攒.除服.成服.修坟.立碑.移柩.入殓.c-au造庙.嫁娶.出行.动土.安葬.行丧.订盟.纳采.会亲友.祭祀.斋醮.沐浴.塑绘.出火.开光.竖柱.上梁.开市.交易.立券.作梁.开柱眼.伐木.架马.安门.安床.拆卸.牧养.造畜椆栖.掘井.{,EA开市.安床.安葬.修坟.嫁娶.纳采.订盟.问名.祭祀.冠笄.裁衣.会亲友.进人口.纳财.捕捉.作灶.e+a{造庙.入宅.修造.安葬.行丧.嫁娶.祭祀.沐浴.补垣.塞穴.断蚁.解除.余事勿取. *SW祈福.嫁娶.安床.入宅.造船.沐浴.开仓.出货财.开市.交易.立券.纳财.栽种.纳畜.牧养.畋猎.入殓.破土.安葬. %  0 *  ] 4Kmj]QH)a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3('Q诸事不宜.治病.破屋.坏垣.余事勿取.R') 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."&)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+%'A诸事不宜.平治道涂.余事勿取.NЯ)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JЯ~)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=Я}Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5Я|)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.JЯ{)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<Яz)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uЯy m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ЯxSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:Яw'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ЯvEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ЯuEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PЯtaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cЯsS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KЯrSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SЯqaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;Яpa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ЯoE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XЯnE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ЯmS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.Яla5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.WЯka_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ЯjS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rЯio开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ЯhSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UЯgoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.   K  @ ` sHB8Яf''诸事不宜.诸事不宜.VЯe!开市.祭祀.祈福.斋醮.塑绘.开光.订盟.纳采.裁衣.冠笄.嫁娶.拆卸.入宅.安香.入殓.移柩.理发.安葬.修坟.谢土.赴任.移徙.沐浴.治病.破土.启攒.整手足甲.入学.作梁.SЯdEs嫁娶.动土.安葬.作灶.祭祀.沐浴.出行.冠笄.进人口.余事勿取.`Яc)'入宅.作灶.祈福.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.Яb''诸事不宜.诸事不宜.,Яa'C诸事不宜.沐浴.扫舍.余事勿取.jЯE嫁娶.入宅.治病.赴任.祭祀.祈福.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造畜椆栖.入殓.移柩.启攒.安葬.谢土.除服.成服.会亲友.竖柱.上梁.经络.开市.交易.立券.纳财.纳畜.筑堤.^Я)#造屋.治病.祭祀.解除.祈福.开光.塑绘.斋醮.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.入殓.除服.成服.移柩.启攒.安床.赴任.出行.移徙.竖柱.上梁.伐木.栽种.破土.安葬.纳畜.:Я'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取. ЯEe开市.交易.破土.作灶.祭祀.塑绘.开光.订盟.纳采.嫁娶.安床.进人口.入殓.除服.成服.移柩.启攒.安葬.立碑.%Я)1作灶.治病.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.赴任.进人口.会亲友.ЯEK作灶.治病.伐木.作梁.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.除服.成服.入殓.移柩.安葬.谢土.赴任.会亲友.进人口.出行.竖柱.上梁.经络.开市.交易.立券.纳财.开仓.FЯEY嫁娶.入宅.安门.移徙.理发.会亲友.补垣.塞穴.结网.ZЯE入宅.作灶.安床.开仓.祭祀.会亲友.嫁娶.沐浴.修造.动土.祈福.开光.塑绘.出行.订盟.纳采.裁衣.入殓.除服.成服.移柩.启攒.赴任.竖柱.上梁.纳财.扫舍.栽种.纳畜.伐木.,Я'C诸事不宜.祭祀.沐浴.余事勿取.pЯS开光.掘井.安葬.谢土.修坟.嫁娶.冠笄.安床.纳采.会亲友.塞穴.捕捉.置产.造畜椆栖.LЯSU移徙.入宅.安门.作梁.安葬.祭祀.祈福.求嗣.斋醮.沐浴.冠笄.出行.理发.拆卸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫舍.除服.成服.移柩.启攒.立碑.谢土.pЯS安床.安门.破土.修坟.安葬.捕捉.畋猎.会亲友.解除.入殓.除服.成服.移柩.余事勿取.ZЯSq嫁娶.开市.入宅.出火.移徙.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.会亲友.解除.入学.纳财.交易.立券.经络.起基.动土.定磉.开池.栽种.纳畜.牧养.破土.入殓.立碑.安葬.LЯ Ec造屋.造船.动土.破土.嫁娶.纳采.订盟.祭祀.冠笄.裁衣.伐木.作梁.架马.定磉.开柱眼.作灶.移徙.安床.畋猎.结网.开池.作厕.除服.成服.启攒.入殓.移柩.安葬.4Я )Q嫁娶.安葬.破屋.坏垣.祭祀.余事勿取.IЯ E]开市.造庙.动土.破土.嫁娶.订盟.纳采.祭祀.祈福.塑绘.开光.移徙.安床.伐木.作梁.捕捉.畋猎.结网.求医.治病.解除.安葬.除服.成服.移柩.入殓.立碑.谢土.HЯ SM嫁娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈福.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上梁.安门.安香.出火.教牛马.会亲友.破土.JЯ E_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出火.修饰垣墙.平治道涂.会亲友.出行.开池.作厕.^ЯS{嫁娶.开市.祈福.斋醮.安葬.塑绘.会亲友.安机械.塞穴.结网.裁衣.经络._Яam开市.纳采.造庙.安床.开渠.安葬.嫁娶.造车器.出行.会亲友.移徙.入宅.修造.动土.雕刻.开光.安香.出火.理发.会亲友.造屋.合脊.起基.归岫.安门.拆卸.扫舍.栽种.造畜椆栖. !&5   1 6F[i8t&IЯSQ开市.动土.破土.行丧.安葬.祭祀.沐浴.出行.余事勿取.nЯS嫁娶.入宅.安床.掘井.开光.祭祀.理发.置产.塞穴.除服.成服.移柩.入殓.破土.安葬.;ЯS3移徙.入宅.出火.入殓.安葬.开市.纳财.出行.祭祀.祈福.求嗣.斋醮.问名.入学.起基.定磉.置产.开渠.掘井.拆卸.栽种.纳畜.牧养.动土.破土.启攒. Я}'嫁娶.作灶.修坟.安门.入宅.立碑.安葬.安床.祭祀.祈福.求嗣.开光.开市.出行.解除.动土.起基.置产.栽种.,Я'C诸事不宜.祭祀.塞穴.余事勿取.gЯ)5斋醮.安门.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.BЯ)m祈福.安葬.订盟.纳采.会亲友.安机械.纳财.牧养.:Ю'_余事勿取.祭祀.解除.破屋.坏垣.余事勿取.`Ю~)'开市.赴任.嫁娶.订盟.纳采.出行.祭祀.祈福.动土.移徙.入宅.破土.安葬.CЮ})o移徙.入宅.入殓.除服.成服.移柩.破土.启攒.安葬.9Ю7']余事勿取.祭祀.结网.造畜椆栖.余事勿取.?Ю67Y开市.动土.破土.开光.针灸.会亲友.启攒.安葬.8Ю5)Y嫁娶.入宅.沐浴.理发.入学.习艺.进人口.&Ю4)5行丧.安葬.作灶.造畜椆栖.?Ю3)g动土.上梁.嫁娶.祭祀.安机械.入殓.破土.安葬.Ю2Em作灶.入殓.安葬.安床.祭祀.祈福.斋醮.沐浴.竖柱.订盟.纳采.嫁娶.拆卸.入宅.移柩.启攒.谢土.赴任.出火.纳畜.JЮ1Ea栽种.动土.安葬.开市.祭祀.作灶.入殓.除服.成服.畋猎.yЮ0E=开仓.冠笄.伐木.作梁.祭祀.塑绘.开光.祈福.斋醮.出行.订盟.纳采.裁衣.嫁娶.拆卸.修造.安床.入宅.安香.入殓.启攒.安葬.谢土.赴任.会亲友.进人口.出行.移徙.上梁.经络.开市.交易.立券.纳财. Ю/E]出行.祈福.安葬.作灶.会亲友.嫁娶.订盟.纳采.纳婿.拆卸.修造.动土.起基.竖柱.上梁.安床.会亲友.纳财.,Ю.'C诸事不宜.破屋.坏垣.余事勿取.]Ю-Sw开光.嫁娶.掘井.伐木.作梁.祭祀.祈福.求嗣.斋醮.造庙.出火.安机械.会亲友.开市.交易.立券.纳财.习艺.经络.求医.治病.开池.作厕.畋猎.结网.栽种.牧养.安葬.破土.启攒.nЮ,S嫁娶.祭祀.入宅.造屋.移徙.捕捉.结网.入殓.除服.成服.移柩.破土.安葬.启攒.立碑.\Ю+E嫁娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治道涂.余事勿取.{Ю*S3移徙.入宅.出行.祈福.嫁娶.沐浴.理发.冠笄.安床.开市.立券.会亲友.交易.纳财.结网.教牛马.Ю)E 嫁娶.动土.破土.修坟.出行.造车器.造畜椆栖.解除.冠笄.裁衣.作梁.雕刻.会亲友.移徙.入宅.安机械.造畜椆栖.开市.扫舍.EЮ(SG造庙.造船.动土.破土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.置产.求医.治病.开市.交易.立券.会亲友.移徙.竖柱.上梁.造屋.合脊.安门.放水.捕捉.纳畜. Ю'gA开光.嫁娶.会亲友.栽种.针灸.安葬.冠笄.祭祀.沐浴.作灶.理发.整手足甲.扫舍.补垣.塞穴.入殓.破土.启攒.Ю&g'开市.开仓.出货财.安床.安门.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.求医.治病.出火.移徙.入宅.PЮ%Em动土.破土.开市.安葬.祭祀.作灶.纳财.捕捉.畋猎.余事勿取. Ю$YO上梁.开光.造屋.架马.合寿木.造车器.嫁娶.订盟.纳采.会亲友.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.jЮ#S嫁娶.开市.入宅.祈福.安葬.订盟.纳采.会亲友.交易.立券.纳财.栽种.纳畜.牧养.BЮ")m开市.嫁娶.祭祀.沐浴.解除.破屋.坏垣.余事勿取.EЮ!KO开市.破土.掘井.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.安香.出火.造庙.移徙.出行.入宅.造庙.起基.竖柱.上梁.安床.纳畜.捕捉.纳婿.安葬. !w_ @ -  N?$D T]BЮ SC开市.交易.祭祀.入宅.安葬.捕捉.畋猎.余事勿取.0Ю c嫁娶.祭祀.祈福.求嗣.沐浴.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.入宅.移徙.安床.栽种.纳畜.入殓.安葬.启攒.除服.成服.WЮE{嫁娶.移徙.入宅.开市.沐浴.入殓.移柩.除服.成服.破土.平治道涂.Ю''诸事不宜.诸事不宜.:Ю'_诸事不宜.祭祀.沐浴.赴任.出行.余事勿取._Юoa动土.冠笄.移徙.入宅.开市.竖柱.上梁.祭祀.出行.成服.除服.沐浴.入殓. ЮEe安床.开光.开市.交易.祭祀.裁衣.冠笄.嫁娶.安机械.拆卸.动土.起基.移徙.入宅.入殓.启攒.安葬.造仓.经络.4ЮE5入殓.安葬.开市.交易.祭祀.诸事不宜.{ЭREA移徙.入宅.作灶.安葬.祭祀.裁衣.冠笄.嫁娶.纳婿.会亲友.除服.成服.移柩.捕捉.进人口.入殓.uЭQ)Q定磉.安葬.祭祀.赴任.动土.上梁.开光.塑绘.冠笄.拆卸.起基.安床.开市.立券.赴任.经络.7ЭPE9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.嫁娶.拆卸.起基.安床.入宅.开市.入殓.除服.成服.移柩.破土.谢土.挂匾.开柱眼.交易.IЭOE_移徙.入宅.出行.栽种.祭祀.沐浴.破屋.坏垣.余事勿取.ЭNEW作灶.祭祀.入宅.嫁娶.祭祀.冠笄.会亲友.拆卸.起基.除服.成服.移柩.启攒.安葬.沐浴.捕捉.开光.塑绘.AЭM)i入宅.伐木.祭祀.会亲友.纳采.嫁娶.开光.塑绘.斋醮.安香.开市.立券.除服.成服.入殓.移柩.安葬.赴任.进人口.出行.裁衣.修造.动土.上梁.经络.交易.:ЭL)]嫁娶.入宅.祭祀.沐浴.修饰垣墙.平治道涂.ЭK)e嫁娶.安葬.祭祀.沐浴.解除.理发.冠笄.安机械.作灶.造仓.开市.开池.作厕.补垣.塞穴.断蚁.结网.ЭJEm造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上梁.合脊.安床.移徙.入宅.开市.栽种.作厕.cЭIS动土.作灶.行丧.安葬.修坟.祭祀.祈福.求嗣.出行.沐浴.交易.扫舍.教牛马.!ЭH))开光.安床.祭祀.出行.解除.冠笄.嫁娶.伐木.架马.开柱眼.修造.动土.移徙.入宅.开生坟.合寿木.入殓.移柩.破土.安葬.修坟.xЭGa嫁娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲友.捕捉.畋猎.启攒.除服.成服.移柩.JЭFo7开光.动土.破土.开市.修造.入宅.安门.祭祀.嫁娶.捕捉.7ЭE=A行丧.安葬.合寿木.开光.求嗣.雕刻.嫁娶.订盟.纳采.出火.拆卸.修造.动土.起基.上梁.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.4ЭDa嫁娶.造庙.造桥.造船.作灶.安葬.订盟.纳采.祭祀.祈福.安香.出火.修造.动土.上梁.安门.起基.竖柱.上梁.定磉.开池.移徙.入宅.立券.破土.%ЭC5'探病.余事勿取.余事勿取.mЭBo}祭祀.嫁娶.安床.开市.入宅.探病.上梁.沐浴.捕捉.入殓.除服.成服.破土.启攒.安葬.%ЭAS纳采.订盟.架马.词讼.开渠.嫁娶.造车器.安机械.祭祀.祈福.开光.安香.出火.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.cЭ@aw斋醮.嫁娶.移徙.出行.上梁.入宅.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.\Э?E嫁娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出火.上梁.移徙.uЭ>a针灸.伐木.作梁.造庙.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.?Э=g)嫁娶.入宅.修造.动土.会亲友.破土.祭祀.出行.uЭ<o 嫁娶.开市.祭祀.祈福.斋醮.纳采.修坟.冠笄.沐浴.出行.修造.动土.移徙.入宅.破土.安葬.Э;a_造屋.开光.理发.造船.掘井.作灶.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.移徙.动土.安床.入殓.破土.安葬.启攒.Э:}入宅.作梁.安门.伐木.修造.上梁.入殓.造屋.嫁娶.祭祀.祈福.求嗣.出行.动土.安床.掘井.破土.启攒. "iY l 3 P { xi.t$_c=FЭ9)u动土.安葬.订盟.纳采.祭祀.祈福.安机械.作灶.纳畜.gЭ8)5开光.针灸.嫁娶.订盟.纳采.祭祀.祈福.求医.治病.动土.移徙.入宅.破土.安葬.`Э7)'动土.破土.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.移徙.入宅.启攒.安葬.:Э6'_诸事不宜.沐浴.治病.破屋.坏垣.余事勿取.5Э5)S嫁娶.入宅.捕捉.结网.入殓.破土.安葬.CЬo)o开市.安葬.嫁娶.祭祀.祈福.斋醮.动土.移徙.入宅.MЬnCi嫁娶.祈福.余事勿取.沐浴.修饰垣墙.平治道涂.余事勿取.NЬm)开市.安葬.订盟.纳采.出行.会亲友.修造.上梁.移徙.入宅.RЬl) 嫁娶.开市.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.安葬.JЬk7o作灶.动土.破土.嫁娶.出行.纳畜.祭祀.入殓.启攒.安葬.CЬj)o动土.破土.嫁娶.祭祀.祈福.斋醮.作灶.移徙.入宅. Ьi 祈福.出行.订盟.纳采.嫁娶.裁衣.动土.安床.放水.开市.掘井.交易.立券.栽种.开渠.除服.成服.移柩.破土.Ьh 3塑绘.开光.解除.订盟.纳采.嫁娶.出火.修造.动土.移徙.入宅.拆卸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养. Ьg 祈福.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生坟.入殓.除服.成服.移柩.破土.安葬.7ЬfS+动土.破土.订盟.安床.开池.祈福.斋醮.出行.冠笄.嫁娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除服.成服.移柩.破土.安葬.启攒.4Ьe)Q行丧.安葬.破屋.坏垣.治病.余事勿取.|ЬdS5嫁娶.纳采.订盟.开市.入宅.祭祀.捕捉.畋猎.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.启攒.IЬcE]开市.立券.纳财.作灶.纳采.订盟.嫁娶.祭祀.祈福.普渡.开光.安香.出火.移徙.入宅.竖柱.修造.动土.竖柱.上梁.起基.造屋.安门.造庙.造桥.破土.启攒.安葬.gЬbE嫁娶.安门.动土.安葬.出行.沐浴.订盟.纳采.裁衣.竖柱.上梁.移徙.纳畜.牧养. ЬaSO祈福.开市.动土.行丧.安葬.塑绘.冠笄.嫁娶.会亲友.进人口.经络.裁衣.栽种.纳畜.牧养.补垣.塞穴.捕捉.{Ь`S3嫁娶.出行.入宅.开市.安门.祭祀.沐浴.理发.整手足甲.冠笄.解除.入殓.移柩.破土.启攒.安葬.uЬ_a开市.动土.破土.安床.开仓.上梁.嫁娶.冠笄.祭祀.沐浴.普渡.出行.纳财.扫舍.纳畜.赴任.Ь^a5动土.破土.掘井.开光.上梁.词讼.嫁娶.普渡.祭祀.祈福.补垣.塞穴.断蚁.筑堤.入殓.除服.成服.安葬.OЬ]S[出火.入宅.造屋.安门.安葬.嫁娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲友.开市.纳财.修造.动土.竖柱.上梁.开光.开仓.出货财.纳畜.牧养.开池.破土.启攒.Ь\S]掘井.出行.破土.行丧.安葬.嫁娶.订盟.纳采.作灶.冠笄.裁衣.会亲友.纳畜.牧养.安机械.开市.立券.纳财.安床.>Ь[a+纳采.订盟.经络.行丧.安葬.探病.嫁娶.祭祀.祈福.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.捕捉.畋猎.结网.ЬZSC动土.破土.嫁娶.掘井.安床.订盟.纳采.祭祀.祈福.安香.出火.开市.立券.入宅.挂匾.造桥.启攒.安葬.4ЬY)Q斋醮.开市.沐浴.破屋.坏垣.余事勿取.`ЬXE 开市.交易.入宅.嫁娶.祭祀.普渡.捕捉.解除.结网.畋猎.入殓.破土.安葬.ЬW}嫁娶.入宅.移徙.作灶.开市.交易.安门.栽种.祭祀.解除.沐浴.整手足甲.入殓.移柩.破土.启攒.安葬.ЬVoW嫁娶.破土.置产.栽种.安葬.修坟.行丧.入宅.移徙.安床.开光.祈福.求嗣.进人口.开市.交易.立券.出火.拆卸.修造.动土.jЬUa开仓.出货财.置产.安葬.动土.破土.掘井.栽种.嫁娶.祭祀.裁衣.结网.冠笄.沐浴.JЬT7o祈福.动土.破土.嫁娶.出行.开市.安床.入殓.启攒.安葬.CЬS)o开市.入宅.嫁娶.祭祀.祈福.斋醮.治病.破土.安葬. %|PT1 b  * c#C|#re}.|JЬR)}动土.安葬.嫁娶.纳采.出行.祭祀.祈福.解除.移徙.入宅.^ЬQ'%诸事不宜.补垣.塞穴.结网.入殓.除服.成服.移柩.安葬.启攒.余事勿取.JЬ )}造庙.安葬.嫁娶.开市.立券.祭祀.祈福.动土.移徙.入宅..Ь )E开市.破土.祭祀.作灶.纳财.捕捉.RЬ 赴任.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.YЬ)祭祀.祈福.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.3Ь'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.JЬ7o嫁娶.移徙.入宅.纳采.祭祀.祈福.解除.动土.破土.安葬.,Ь'C诸事不宜.沐浴.扫舍.余事勿取.PЬ' 余事勿取.祭祀.冠笄.嫁娶.捕捉.结网.畋猎.取渔.余事勿取.Ь !塑绘.出行.冠笄.嫁娶.进人口.裁衣.纳婿.造畜椆栖.交易.立券.牧养.开生坟.入殓.除服.成服.移柩.安葬.启攒.ЬS;开市.斋醮.安床.出行.经络.移徙.入宅.治病.会亲友.祭祀.祈福.斋醮.安香.移徙.嫁娶.造屋.起基.ЬEo动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲友.裁衣.开仓.经络.纳畜.造畜椆栖.教牛马.牧养.WЬa_移徙.开市.入宅.嫁娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿取.ЫaO造屋.入宅.作灶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.嫁娶.会亲友.放水.掘井.牧养.纳畜.开渠.安碓磑.bЫ~S开市.入宅.安床.动土.安葬.祭祀.进人口.纳财.纳畜.牧养.捕捉.余事勿取.AЫ}KG嫁娶.开市.栽种.合寿木.祭祀.祈福.斋醮.出行.纳采.订盟.安机械.出火.拆卸.修造.动土.起基.移徙.入宅.造庙.入殓.除服.成服.移柩.破土.安葬.谢土.ZЫ|Sq祈福.上梁.开仓.掘井.牧养.纳采.订盟.嫁娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲友.安香.出火.拆卸.造屋.起基.安床.作灶.挂匾.安葬.破土.启攒.立碑.入殓.移柩.;Ы{)_嫁娶.出行.求医.治病.破屋.坏垣.余事勿取.mЫzo}出火.嫁娶.入宅.作灶.破土.上梁.动土.沐浴.理发.捕捉.入殓.移柩.破土.启攒.安葬.6ЫyS)嫁娶.安葬.行丧.破土.修坟.订盟.纳采.祭祀.祈福.开光.安香.出火.立券.安机械.移徙.入宅.竖柱.上梁.会亲友.安床.拆卸.挂匾.牧养.教牛马.OЫxaO开市.动土.破土.嫁娶.修造.安葬.祭祀.修饰垣墙.平治道涂.LЫwaG斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈福.求嗣.开光.解除.扫舍.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.栽种.纳畜.牧养.nЫvS嫁娶.出行.纳采.入宅.作灶.祭祀.沐浴.塑绘.开光.入学.解除.扫舍.治病.开池.牧养.lЫuE#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.uЫtS'开市.入宅.嫁娶.开光.造屋.祭祀.入殓.除服.成服.移柩.破土.启攒.安葬.塞穴.断蚁.结网.)Ыs7+出行.安葬.造桥.纳采.订盟.嫁娶.祭祀.沐浴.塑绘.开光.出火.治病.习艺.伐木.造屋.竖柱.上梁.安床.作灶.安碓磑.挂匾.掘井.纳畜.ЫrE{安葬.开市.交易.立券.嫁娶.开光.祭祀.祈福.求嗣.出行.解除.伐木.入宅.移徙.安床.出火.拆卸.修造.上梁.栽种.移柩.,Ыq'C诸事不宜.祭祀.栽种.余事勿取.JЫp)}嫁娶.开光.开光.求医.治病.动土.上梁.入殓.破土.安葬.JЫo)}开光.开市.嫁娶.订盟.纳采.祭祀.祈福.入殓.破土.安葬.Ыn''诸事不宜.诸事不宜.RЫm) 开市.安葬.订盟.纳采.出行.祭祀.祈福.修造.动土.移徙.入宅.`Ы&5作灶.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.;Ы%)_行丧.安葬.嫁娶.祭祀.沐浴.扫舍.修饰垣墙.YЫ$)动土.破土.嫁娶.纳采.出行.求医.治病.开市.移徙.入宅.启攒.安葬.MЫ#7u移徙.入宅.安葬.订盟.纳采.出行.祈福.斋醮.安床.会亲友. #b`l w / ; m iKdw.D;b<Ы"7S上梁.动土.破土.祭祀.入殓.移柩.启攒.安葬.5Ы!)S嫁娶.安葬.裁衣.作灶.移徙.入宅.纳畜.YЫ )开市.安门.嫁娶.纳采.祭祀.祈福.求医.治病.出行.动土.移徙.入宅.@Ы'k诸事不宜.祭祀.捕捉.取渔.修饰垣墙.余事勿取.Ы #订盟.纳采.会亲友.进人口.雕刻.拆卸.修造.动土.起基.开市.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.ЫEI开市.安门.掘井.作灶.嫁娶.出行.安机械.祭祀.塑绘.开光.治病.经络.安床.结网.塞穴.破土.入殓.BЫ)m嫁娶.入宅.破屋.坏垣.求医.治病.畋猎.余事勿取.^ЫS{开市.交易.嫁娶.安葬.行丧.祭祀.沐浴.捕捉.结网.畋猎.取渔.余事勿取.dЫE开市.伐木.作梁.作灶.安机械.移徙.入宅.出行.祭祀.祈福.斋醮.纳采.订盟.安香.出火.解除.会亲友.修造.动土.拆卸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.uЫK/斋醮.出行.治病.合寿木.祭祀.沐浴.理发.嫁娶.作灶.整手足甲.扫舍.修饰垣墙.平治道涂.qЫY安床.出货财.作灶.动土.破土.开光.求嗣.出行.冠笄.嫁娶.伐木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出火.挂匾.起基.修造.开生坟.合寿木.入殓.除服.成服.移柩.安葬.RЫEo行丧.伐木.作梁.作灶.嫁娶.订盟.纳采.冠笄.会亲友.安机械.造车器.祭祀.出行.纳财.入宅.安香.出火.入学.塑绘.开光.拆卸.起基.修造.动土.牧养.栽种.安门.作厕.<ЫS7斋醮.开渠.上梁.动土.破土.祭祀.交易.纳财.&ЫS 祈福.开光.掘井.开市.安葬.嫁娶.冠笄.修造.动土.作灶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.ЫSq合帐.上梁.经络.安葬.入殓.祭祀.祈福.求嗣.斋醮.安香.解除.移徙.入宅.会亲友.求医.治病.动土.破土.开生坟.合寿木.BЫSC开市.安葬.破土.修坟.掘井.祭祀.作灶.余事勿取.Ыa-斋醮.祭祀.移徙.入宅.上梁.嫁娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.ЫSe作灶.理发.造桥.行丧.安葬.嫁娶.安机械.交易.出行.祭祀.祈福.求嗣.斋醮.塑绘.开光.合帐.裁衣.放水.开池.掘井.BЫ7_入宅.嫁娶.移徙.祭祀.沐浴.破屋.坏垣.余事勿取.7ЫK3嫁娶.开市.合寿木.安葬.纳采.订盟.冠笄.祭祀.祈福.斋醮.出行.修造.动土.移徙.入宅.安香.出火.拆卸.造屋.起基.竖柱.上梁.定磉.安门.开池.uЫS'开光.作灶.造屋.架马.开仓.嫁娶.纳采.祭祀.祈福.出行.立券.移徙.入宅.动土.破土.安葬."Ы  G嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.安门.开市.交易.立券.挂匾.栽种.破土.安葬.]Ы '#诸事不宜.沐浴.平治道涂.扫舍.入殓.移柩.破土.启攒.安葬.余事勿取.EЫ )s开市.安葬.订盟.纳采.会亲友.安床.作灶.造畜椆栖.`Ы )'移徙.入宅.嫁娶.订盟.纳采.出行.祭祀.祈福.斋醮.动土.上梁.破土.安葬.,Ы 'C诸事不宜.塞穴.结网.余事勿取.YЪC)赴任.捕捉.嫁娶.裁衣.祭祀.出行.安床.作灶.移徙.入宅.破土.安葬.CЪB)o嫁娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<ЪA7S动土.破土.安葬.嫁娶.纳采.出行.移徙.入宅.JЪ@)}嫁娶.安葬.纳采.祭祀.祈福.开市.求医.治病.动土.纳畜.`Ъ?)'祈福.斋醮.嫁娶.纳采.祭祀.祈福.出行.动土.上梁.移徙.入宅.破土.安葬.3Ъ>'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.YЪ=)开市.开光.嫁娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.YЪ<'安门.嫁娶.纳采.出行.祭祀.祈福.开市.动土.移徙.入宅.破土.安葬.Ъ; 7会亲友.进人口.修造.动土.起基.移徙.开市.纳畜.入殓.除服.成服.移柩.破土.安葬.修坟.立碑.会亲友.开光.出行.嫁娶. #[A W R x ) h R ! <Vg~)&-DЪ:'s诸事不宜.进人口.牧养.置产.塞穴.结网.余事勿取.Ъ9 1开光.出行.纳采.嫁娶.伐木.架马.出火.拆卸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除服.成服.移柩.安葬.4Ъ8)Q破土.安葬.塞穴.断蚁.结网.余事勿取.Ъ7''余事勿取.余事勿取.}Ъ6S7开市.入宅.探病.出火.造屋.嫁娶.祭祀.祈福.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.针灸.理发.会亲友.起基.修造.动土.竖柱.定磉.安床.拆卸.纳畜.牧养.放水.破土.除服.成服.修坟.立碑.PЪ5aQ开市.动土.祭祀.斋醮.安葬.探病.栽种.捕捉.畋猎.余事勿取.cЪ4E嫁娶.出火.移徙.入宅.开市.交易.立券.安机械.会亲友.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上梁.安门.作灶.放水.作厕.开池.栽种.牧养.造畜椆栖.破土.安葬.立碑.;Ъ3EC斋醮.开市.嫁娶.作灶.沐浴.扫舍.余事勿取.BЪ2)m行丧.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取."Ъ1E移徙.入宅.造屋.架马.嫁娶.纳采.订盟.斋醮.开光.祭祀.祈福.求医.治病.会亲友.动土.解除.捕捉.纳畜.牧养.入殓.破土.安葬.:Ъ0E?动土.破土.嫁娶.嫁娶.祭祀.祈福.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上梁.作灶.安门.安香.出火.造屋.启攒.安葬.^Ъ/S{祈福.嫁娶.入宅.安床.作灶.祭祀.沐浴.移徙.破土.安葬.扫舍.平治道涂.~Ъ.S9开市.作灶.动土.行丧.安葬.嫁娶.纳采.订盟.会亲友.安机械.结网.冠笄.祭祀.求嗣.进人口.经络.xЪ-S-开市.出行.安床.作灶.安葬.嫁娶.纳采.订盟.祭祀.祈福.治病.造车器.修造.动土.移徙.入宅.>Ъ,)e嫁娶.安葬.祭祀.解除.断蚁.会亲友.余事勿取."Ъ+as入宅.造屋.造桥.安门.安葬.上梁.嫁娶.冠笄.祭祀.出行.移徙.入宅.作灶.造车器.补垣.塞穴.作厕.破土.启攒.除服.成服.入殓.]Ъ*7入宅.安门.安葬.祭祀.祈福.求嗣.开光.纳采.订盟.嫁娶.出行.动土.破土.会亲友.开市.交易.立券.习艺.拆卸.起基.安碓磑.放水.开池.造仓.开渠.栽种.谢土.启攒.修坟.立碑.Ъ)aW祈福.入殓.祭祀.作灶.安葬.探病.嫁娶.开光.出行.出火.拆卸.进人口.开市.立券.交易.挂匾.入宅.移徙.安床.栽种.,Ъ('C诸事不宜.解除.坏垣.余事勿取.Ъ'' 诸事不宜..Ъ&77嫁娶.入宅.安葬.沐浴.结网.取渔.:Ъ%'_诸事不宜.祭祀.求医.治病.解除.余事勿取.JЩ^7o开市.动土.破土.嫁娶.纳采.祭祀.祈福.出行.移徙.求医.JЩ]7o嫁娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4Щ\)Q嫁娶.安葬.祭祀.作灶.掘井.平治道涂.FЩ[7g嫁娶.动土.破土.祭祀.会亲友.开市.安床.启攒.安葬.QЩZ7}嫁娶.开市.安葬.纳采.开光.求医.治病.动土.上梁.移徙.入宅.jЩYS掘井.动土.破土.安葬.开光.祭祀.进人口.嫁娶.安床.解除.冠笄.出行.裁衣.扫舍.ЩXEk掘井.安门.嫁娶.纳采.祭祀.祈福.裁衣.合帐.安床.入殓.除服.成服.移柩.破土.启攒.安葬.谢土.立碑.造畜椆栖.%ЩWE入殓.安葬.入宅.安床.订盟.纳采.嫁娶.进人口.会亲友.交易.立券.动土.除服.谢土.移柩.破土.启攒.赴任.出行.开市.纳财.栽种.:ЩVQ5造庙.嫁娶.安床.余事勿取.祭祀.余事勿取.ЩUEW出火.入宅.安葬.伐木.祭祀.塑绘.开光.订盟.纳采.冠笄.裁衣.安机械.拆卸.修造.动土.安床.经络.开市.ЩT''诸事不宜.诸事不宜.fЩSS 嫁娶.开市.交易.入宅.安葬.祭祀.沐浴.破屋.坏垣.求医.治病.解除.余事勿取.ЩRE 开市.动土.掘井.开池.祭祀.祈福.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.取渔.解除.安葬.启攒.谢土.入殓. V@ q  T / `3~Eg~j@ЩQKE入宅.动土.开仓.出货财.造车器.祭祀.祈福.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.合脊.起基.定磉.安门.纳畜.安葬.开生坟.立碑.谢土.斋醮.OЩPS]嫁娶.安葬.动土.安床.治病.祭祀.作灶.平治道涂.余事勿取.:ЩOa#祈福.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.嫁娶.会亲友.进人口.安床.开市.交易.纳畜.牧养.入殓.除服.成服.移柩.安葬.启攒.~ЩNa+开市.嫁娶.移徙.入宅.掘井.安葬.沐浴.斋醮.解除.求医.治病.会亲友.造畜椆栖.栽种.理发.扫舍.aЩMoe动土.破土.行丧.开光.作梁.安葬.探病.祭祀.解除.教牛马.出行.余事勿取.fЩLa}开光.嫁娶.掘井.安葬.安门.探病.祭祀.祈福.求嗣.斋醮.冠笄.作灶.纳财.交易.nЩKS祈福.动土.破土.安葬.入殓.纳采.嫁娶.出行.开市.立券.纳畜.牧养.出火.移徙.入宅.4ЩJ)Q嫁娶.安葬.祭祀.捕捉.解除.余事勿取./ЩI77出火.嫁娶.开市.祭祀.祈福.求嗣.斋醮.纳采.订盟.开光.竖柱.上梁.开仓.出货财.造屋.起基.定磉.安门.诸事不宜.破土.入殓.启攒.谢土.JЩHSS祭祀.嫁娶.入宅.作灶.安葬.沐浴.捕捉.畋猎.结网.取渔._ЩGE 祈福.斋醮.开市.安葬.祭祀.沐浴.解除.求医.治病.破屋.坏垣.余事勿取.uЩFE5嫁娶.开市.纳财.出火.纳采.祭祀.祈福.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.gЩES 移徙.入宅.嫁娶.出行.安床.祭祀.祈福.求嗣.斋醮.沐浴.纳畜.入殓.破土.安葬.:ЩD)[栽种.伐木.祭祀.嫁娶.祈福.纳采.裁衣.合帐.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲友.挂匾.交易.立券.纳财.造仓.放水.^ЩCE造屋.作灶.治病.探病.冠笄.入殓.除服.成服.移柩.平治道涂.修饰垣墙.%ЩBE出行.嫁娶.入宅.安葬.开光.塑绘.裁衣.冠笄.伐木.拆卸.竖柱.上梁.开仓.会亲友.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5ЩAE7栽种.作灶.安葬.嫁娶.祭祀.扫舍.塞穴.>Ш{EG作灶.掘井.动土.栽种.祈福.开光.塑绘.酬神.订盟.纳采.裁衣.安床.开市.立券.入殓.除服.成服.移柩.启攒.安葬.立碑.赴任.会亲友.出行.交易.竖柱.ШzS_作灶.开光.嫁娶.开市.入宅.订盟.纳采.冠笄.拆卸.修造.动土.安床.入殓.除服.成服.移柩.安葬.破土.启攒.造仓.WШy)栽种.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.嫁娶.裁衣.动土.起基.出火.拆卸.移徙.入宅.安香.修造.竖柱.上梁.纳畜.牧养.祈福.求嗣.解除.伐木.定磉.造屋.安门.CШxSE嫁娶.入宅.移徙.作灶.安葬.祭祀.沐浴.捕捉.栽种.4ШwE3造庙.嫁娶.伐木.安葬.祭祀.开光.塑绘.订盟.纳采.合帐.冠笄.拆卸.动土.起基.上梁.入宅.安香.开市.立券.纳财.沐浴.求嗣.出火.竖柱.安门.Шv)作梁.造庙.祭祀.出行.订盟.纳采.裁衣.合帐.冠笄.进人口.动土.安床.作灶.入殓.移柩.安葬.破土.结网.取渔.畋猎.Шu')诸事不宜.破屋.坏垣.ШtE 安床.嫁娶.作灶.入宅.祭祀.解除.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.谢土.沐浴.扫舍.捕捉.取渔.结网.畋猎.理发.IШs赴任.祈福.求嗣.开光.塑绘.斋醮.订盟.纳采.嫁娶.拆卸.安床.入宅.安香.移柩.修坟.安葬.谢土.栽种.解除.冠笄.裁衣.移徙.修造.动土.竖柱.放水.启攒.立碑.XШrSo动土.作灶.入宅.开光.安床.祭祀.嫁娶.纳婿.除服.成服.入殓.移柩.3ШqE1作灶.出行.入宅.安葬.塑绘.开光.订盟.纳采.裁衣.合帐.冠笄.安机械.会亲友.纳财.开市.立券.交易.安床.竖柱.上梁.结网.栽种.解除.经络.,Шp'C诸事不宜.扫舍.塞穴.余事勿取.tШoa栽种.动土.安葬.掘井.修坟.探病.祭祀.会亲友.立券.交易.裁衣.合帐.嫁娶.冠笄.进人口. TZ  M j ~`}_ ]P=3ШnS#祭祀.嫁娶.出行.上梁.掘井.裁衣.经络.伐木.开柱眼.拆卸.修造.动土.上梁.合脊.合寿木.入殓.除服.成服.移柩.破土.安葬.启攒.修坟.立碑.4ШmS%纳采.动土.开市.交易.安门.开光.祈福.求嗣.出行.解除.伐木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除服.成服.移柩.谢土.纳畜.牧养.TШlEu纳财.开市.安葬.破土.理发.冠笄.嫁娶.进人口.栽种.捕捉.针灸.ШkE{祈福.嫁娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出火.拆卸.起基.修造.动土.上梁.移徙.造船.开市.交易.立券.纳财.jШjS塑绘.开光.造桥.除服.成服.嫁娶.冠笄.祭祀.出行.会亲友.修造.动土.入殓.破土.;ШiEC嫁娶.移徙.开市.入宅.破屋.坏垣.余事勿取.gШhS 纳采.开光.安床.嫁娶.开市.祈福.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~Шg=O纳畜.理发.合寿木.嫁娶.造车器.纳采.订盟.祭祀.祈福.安机械.移徙.入宅.开市.立券.破土.安葬._ШfE 开市.造屋.治病.作灶.嫁娶.冠笄.会亲友.安机械.纳财.交易.立券.置产.jШe7-移徙.入宅.栽种.纳财.开市.交易.立券.开光.针灸.会亲友.理发.安床.造仓.结网.JШdEa嫁娶.安葬.行丧.安门.祭祀.沐浴.解除.扫舍.塞穴.牧养.bШcau嫁娶.动土.掘井.起基.定磉.破土.祭祀.会亲友.出行.立券.交易.冠笄.纳财.cШbE嫁娶.祈福.出火.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.uШa o开光.掘井.针灸.出行.嫁娶.入宅.移徙.作灶.动土.祭祀.祈福.求嗣.入殓.启攒.安葬.移柩.Ш`E 入殓.安葬.作灶.入宅.祭祀.沐浴.祈福.求嗣.斋醮.订盟.纳采.裁衣.冠笄.开市.立券.交易.纳财.沐浴.除服.谢土.出行.移柩.>Ш_EG安葬.作灶.伐木.作梁.祭祀.求嗣.沐浴.酬神.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造仓.开池.经络.纳财.开市.立券.交易.结网.取渔.纳畜.捕捉.XШ^E}嫁娶.上梁.入宅.作灶.取渔.入殓.除服.成服.移柩.破土.安葬.立碑.;Ш])]作灶.安床.祈福.求嗣.斋醮.塑绘.开光.订盟.纳采.嫁娶.动土.入宅.安香.移柩.安葬.谢土.出行.沐浴.修造.竖柱.上梁.纳财.破土.解除.安门.放水.Ш')诸事不宜.求医.破屋.BШEO栽种.动土.开市.作灶.祭祀.祈福.酬神.订盟.纳采.冠笄.裁衣.合帐.嫁娶.安床.移徙.入宅.安香.入殓.移柩.启攒.安葬.解除.取渔.捕捉.伐木.安门.出火.]ШE造屋.栽种.安葬.作灶.塑绘.开光.酬神.斋醮.订盟.纳采.裁衣.合帐.拆卸.动土.上梁.安床.安香.造庙.挂匾.会亲友.进人口.出行.修造.纳财.伐木.放水.出火.纳畜.沐浴.安门.AШ_5祭祀.祈福.安葬.安门.余事勿取.作灶.平治道涂.XШE}斋醮.作灶.安床.安葬.安床.合帐.入宅.问名.纳采.求嗣.祭祀.开仓.0ШU掘井.祭祀.斋醮.裁衣.合帐.冠笄.订盟.纳采.嫁娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲友.出行.祈福.求嗣.立碑.上梁.放水.[ШSu祭祀.祈福.移徙.嫁娶.入宅.裁衣.合帐.入殓.除服.成服.会亲友.纳财.Ш EQ出行.嫁娶.入宅.动土.祭祀.祈福.求嗣.酬神.裁衣.安床.立券.交易.入殓.除服.成服.移柩.谢土.启攒.EШ EU安葬.上梁.入宅.作灶.祭祀.沐浴.开光.塑绘.祈福.求嗣.订盟.纳采.冠笄.裁衣.嫁娶.动土.除服.成服.移柩.破土.启攒.出行.安碓磑.放水.开市.立券.交易.&Ш S 伐木.作灶.安葬.取渔.入宅.塑绘.开光.祈福.求嗣.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.IШ '}余事勿取.祭祀.结网.入殓.除服.成服.移柩.安葬.破土.&Ш E安床.栽种.治病.作灶.祭祀.冠笄.嫁娶.拆卸.修造.动土.起基.上梁.造屋.入宅.开市.开池.塞穴.入殓.除服.成服.移柩.安葬.破土. ) u o /  .kAc`_Ш7入宅.开市.安葬.祭祀.沐浴.求医.治病.扫舍.破屋.坏垣.解除.余事勿取.ШS]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.嫁娶.会亲友.进人口.牧养.捕捉.入殓.移柩.安葬.启攒.EШo+置产.造屋.合脊.开光.探病.安门.作灶.祈福.求嗣.斋醮.纳采.嫁娶.伐木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除服.成服.移柩.安葬.破土.谢土.AШEO嫁娶.祈福.掘井.安葬.祭祀.平治道涂.余事勿取.\ШE开市.动土.安葬.破土.会亲友.求嗣.理发.冠笄.结网.捕捉.开光.理发.uШS'开光.嫁娶.作灶.掘井.纳畜.祭祀.祈福.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.jШS祭祀.移徙.入宅.动土.破土.纳采.会亲友.竖柱.上梁.立券.入殓.移柩.安葬.启攒.nШS嫁娶.动土.开光.造屋.破土.祭祀.祈福.求嗣.斋醮.入殓.除服.成服.移柩.安葬.启攒.qШS移徙.入宅.出火.安门.安葬.纳采.嫁娶.祭祀.祈福.出行.开市.会亲友.动土.破土.启攒.cЧE嫁娶.开市.安葬.破土.纳采.祭祀.祈福.出行.会亲友.修造.动土.移徙.入宅.CЧ~SE嫁娶.安门.移徙.入宅.安葬.塞穴.结网.取渔.畋猎.Ч}KQ安床.作灶.造船.会亲友.纳采.订盟.祭祀.祈福.安香.出火.修造.出行.开市.移徙.入宅.动土.安葬.破土.QЧ|) 嫁娶.安葬.祭祀.沐浴.解除.理发.扫舍.破屋.坏垣.余事勿取.3Ч{'Q诸事不宜.解除.破屋.坏垣.余事勿取.ZЧzE造屋.开市.作灶.入宅.祭祀.会亲友.出行.订盟.纳采.沐浴.修造.动土.祈福.斋醮.嫁娶.拆卸.安床.入殓.移柩.安葬.谢土.赴任.裁衣.竖柱.上梁.伐木.捕捉.栽种.破土.安门.%ЧyE出行.治病.安葬.开市.会亲友.纳采.进人口.修造.动土.竖柱.上梁.祭祀.开光.塑绘.祈福.斋醮.嫁娶.安床.移徙.入宅.安香.纳畜.UЧ3Ew嫁娶.移徙.入宅.开光.修饰垣墙.平治道涂.入殓.移柩.余事勿取.{Ч2EA作灶.掘井.谢土.入宅.出行.嫁娶.订盟.纳采.入殓.安床.启攒.安葬.祭祀.裁衣.会亲友.进人口.BЧ1EO作灶.祭祀.上梁.出行.沐浴.解除.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.移徙.入宅.除服.成服.移柩.破土.启攒.安葬.扫舍.修坟.伐木.纳财.交易.立券.,Ч0'C诸事不宜.祭祀.解除.余事勿取.AЧ/EM开仓.嫁娶.移徙.入宅.祭祀.沐浴.祈福.斋醮.订盟.纳采.裁衣.拆卸.起基.竖柱.上梁.安床.入殓.除服.成服.移柩.启攒.挂匾.求嗣.出行.合帐.造畜椆栖.bЧ.E嫁娶.入殓.安葬.出行.塑绘.开光.沐浴.冠笄.会亲友.作灶.放水.造畜椆栖.;Ч-)_开市.安床.祭祀.作灶.入殓.除服.余事勿取.XЧ,E}开市.伐木.嫁娶.作梁.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.LЧ+SU祈福.嫁娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出火.塑绘.裁衣.会亲友.入学.拆卸.扫舍.造仓.挂匾.掘井.开池.结网.栽种.纳畜.破土.修坟.立碑.安葬.入殓.4Ч*7C嫁娶.开市.安葬.破屋.坏垣.余事勿取.Ч)E{造屋.开市.动土.破土.嫁娶.祭祀.沐浴.裁衣.出行.理发.移徙.捕捉.畋猎.放水.入宅.除服.成服.启攒.安葬.移柩.入殓.7Ч()W嫁娶.安葬.祭祀.安碓磑.结网.余事勿取.sЧ'a移徙.入宅.造庙.作灶.治病.安葬.祭祀.冠笄.嫁娶.会亲友.进人口.裁衣.结网.平治道涂.OЧ&Ei入宅.开光.开市.动土.嫁娶.订盟.纳采.祭祀.祈福.求嗣.会亲友.解除.出行.入学.纳财.开市.交易.立券.习艺.经络.安床.开仓.出货财.纳畜.安葬.启攒.修坟.入殓.|Ч%o探病.祭祀.出行.上梁.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲友.解除.求医.治病.入学.安床.安门.安香.出火.拆卸.扫舍.入宅.挂匾.开生坟.合寿木.破土.修坟.启攒.入殓. 03 ! C  @ 3i'fk}0HЧ$7k破土.动土.安葬.祭祀.解除.教牛马.会亲友.余事勿取.Ч#Sk开光.嫁娶.开市.动土.破土.交易.立券.纳财.安床.裁衣.造畜椆栖.安葬.谢土.启攒.除服.成服.修坟.立碑.移柩.入殓.cЧ"au造庙.嫁娶.出行.动土.安葬.行丧.订盟.纳采.会亲友.祭祀.斋醮.沐浴.塑绘.出火.开光.竖柱.上梁.开市.交易.立券.作梁.开柱眼.伐木.架马.安门.安床.拆卸.牧养.造畜椆栖.掘井.{Ч!EA开市.安床.安葬.修坟.嫁娶.纳采.订盟.问名.祭祀.冠笄.裁衣.会亲友.进人口.纳财.捕捉.作灶.eЧ a{造庙.入宅.修造.安葬.行丧.嫁娶.祭祀.沐浴.补垣.塞穴.断蚁.解除.余事勿取. ЧSW祈福.嫁娶.安床.入宅.造船.沐浴.开仓.出货财.开市.交易.立券.纳财.栽种.纳畜.牧养.畋猎.入殓.破土.安葬.;Ч7Q斋醮.嫁娶.开市.祭祀.破屋.坏垣.余事勿取.%Ч}]纳采.订盟.嫁娶.上梁.开市.斋醮.造屋.安门.沐浴.捕捉.畋猎.理发.整手足甲.入殓.除服.成服.破土.安葬.谢土.立碑.修坟.启攒.ЧE开市.出行.安葬.行丧.嫁娶.订盟.纳采.会亲友.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出火.挂匾.拆卸.置产.RЧuA开光.嫁娶.开仓.出货财.造船.安葬.探病.平治道涂.余事勿取.'Ч5'挂匾.入宅.上梁.祈福.词讼.作梁.作灶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.嫁娶.栽种.入殓.移柩.安葬.?Чs作灶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.嫁娶.开光.解除.出火.拆卸.修造.进人口.入宅.移徙.安床.栽种.入殓.修坟.动土.除服.成服.JЧ)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ЧQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5Ч)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.JЧ)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.kEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.jEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PiaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.chS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KgSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SfaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ea%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)dE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XcE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍. n. ] W  7;DiYtnbS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.aa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W`a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0_S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r^o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]]Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U\oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T[Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iZ';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)Y U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vX[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.W会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.,V'C诸事不宜.沐浴.扫舍.余事勿取.jUE嫁娶.入宅.治病.赴任.祭祀.祈福.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造畜椆栖.入殓.移柩.启攒.安葬.谢土.除服.成服.会亲友.竖柱.上梁.经络.开市.交易.立券.纳财.纳畜.筑堤.^T)#造屋.治病.祭祀.解除.祈福.开光.塑绘.斋醮.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.入殓.除服.成服.移柩.启攒.安床.赴任.出行.移徙.竖柱.上梁.伐木.栽种.破土.安葬.纳畜.:S'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取. REe开市.交易.破土.作灶.祭祀.塑绘.开光.订盟.纳采.嫁娶.安床.进人口.入殓.除服.成服.移柩.启攒.安葬.立碑.%Q)1作灶.治病.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.赴任.进人口.会亲友. EK作灶.治病.伐木.作梁.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.除服.成服.入殓.移柩.安葬.谢土.赴任.会亲友.进人口.出行.竖柱.上梁.经络.开市.交易.立券.纳财.开仓.F EY嫁娶.入宅.安门.移徙.理发.会亲友.补垣.塞穴.结网.ZE入宅.作灶.安床.开仓.祭祀.会亲友.嫁娶.沐浴.修造.动土.祈福.开光.塑绘.出行.订盟.纳采.裁衣.入殓.除服.成服.移柩.启攒.赴任.竖柱.上梁.纳财.扫舍.栽种.纳畜.伐木.,'C诸事不宜.祭祀.沐浴.余事勿取.pS开光.掘井.安葬.谢土.修坟.嫁娶.冠笄.安床.纳采.会亲友.塞穴.捕捉.置产.造畜椆栖.LSU移徙.入宅.安门.作梁.安葬.祭祀.祈福.求嗣.斋醮.沐浴.冠笄.出行.理发.拆卸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫舍.除服.成服.移柩.启攒.立碑.谢土. P] ^  x 4 J  7 DK&eMwPpS安床.安门.破土.修坟.安葬.捕捉.畋猎.会亲友.解除.入殓.除服.成服.移柩.余事勿取.ZSq嫁娶.开市.入宅.出火.移徙.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.会亲友.解除.入学.纳财.交易.立券.经络.起基.动土.定磉.开池.栽种.纳畜.牧养.破土.入殓.立碑.安葬.LEc造屋.造船.动土.破土.嫁娶.纳采.订盟.祭祀.冠笄.裁衣.伐木.作梁.架马.定磉.开柱眼.作灶.移徙.安床.畋猎.结网.开池.作厕.除服.成服.启攒.入殓.移柩.安葬.4)Q嫁娶.安葬.破屋.坏垣.祭祀.余事勿取.IE]开市.造庙.动土.破土.嫁娶.订盟.纳采.祭祀.祈福.塑绘.开光.移徙.安床.伐木.作梁.捕捉.畋猎.结网.求医.治病.解除.安葬.除服.成服.移柩.入殓.立碑.谢土.HSM嫁娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈福.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上梁.安门.安香.出火.教牛马.会亲友.破土.J~E_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出火.修饰垣墙.平治道涂.会亲友.出行.开池.作厕.^}S{嫁娶.开市.祈福.斋醮.安葬.塑绘.会亲友.安机械.塞穴.结网.裁衣.经络._|am开市.纳采.造庙.安床.开渠.安葬.嫁娶.造车器.出行.会亲友.移徙.入宅.修造.动土.雕刻.开光.安香.出火.理发.会亲友.造屋.合脊.起基.归岫.安门.拆卸.扫舍.栽种.造畜椆栖.I{SQ开市.动土.破土.行丧.安葬.祭祀.沐浴.出行.余事勿取.nzS嫁娶.入宅.安床.掘井.开光.祭祀.理发.置产.塞穴.除服.成服.移柩.入殓.破土.安葬.;yS3移徙.入宅.出火.入殓.安葬.开市.纳财.出行.祭祀.祈福.求嗣.斋醮.问名.入学.起基.定磉.置产.开渠.掘井.拆卸.栽种.纳畜.牧养.动土.破土.启攒._xoa嫁娶.纳采.订盟.安床.动土.破土.安葬.祭祀.沐浴.捕捉.畋猎.结网.扫舍.twS%嫁娶.移徙.出火.开市.入宅.订盟.纳采.会亲友.祭祀.祈福.修造.动土.安机械.破土.安葬.{vS3祭祀.嫁娶.入宅.修造.动土.祭祀.扫舍.破土.安葬.除服.成服.启攒.移柩.入殓.立碑.余事勿取.Iu){嫁娶.安葬.祭祀.解除.破屋.坏垣.求医.治病.余事勿取.tam破土.动土.安门.作灶.开市.交易.嫁娶.纳采.订盟.祭祀.开光.出行.解除.伐木.出火.入宅.移徙.拆卸.修造.栽种.安葬.入殓.EsEU置产.掘井.词讼.栽种.嫁娶.纳采.订盟.祭祀.斋醮.开光.安香.出火.出行.出火.拆卸.动土.祈福.进人口.纳财.交易.立券.移徙.安床.修造.安葬.除服.成服.Cr)o移徙.入宅.入殓.除服.成服.移柩.破土.启攒.安葬.9q']余事勿取.祭祀.结网.造畜椆栖.余事勿取.?p7Y开市.动土.破土.开光.针灸.会亲友.启攒.安葬.8o)Y嫁娶.入宅.沐浴.理发.入学.习艺.进人口.&n)5行丧.安葬.作灶.造畜椆栖.?m)g动土.上梁.嫁娶.祭祀.安机械.入殓.破土.安葬.'Em作灶.入殓.安葬.安床.祭祀.祈福.斋醮.沐浴.竖柱.订盟.纳采.嫁娶.拆卸.入宅.移柩.启攒.谢土.赴任.出火.纳畜.J&Ea栽种.动土.安葬.开市.祭祀.作灶.入殓.除服.成服.畋猎.y%E=开仓.冠笄.伐木.作梁.祭祀.塑绘.开光.祈福.斋醮.出行.订盟.纳采.裁衣.嫁娶.拆卸.修造.安床.入宅.安香.入殓.启攒.安葬.谢土.赴任.会亲友.进人口.出行.移徙.上梁.经络.开市.交易.立券.纳财. $E]出行.祈福.安葬.作灶.会亲友.嫁娶.订盟.纳采.纳婿.拆卸.修造.动土.起基.竖柱.上梁.安床.会亲友.纳财.,#'C诸事不宜.破屋.坏垣.余事勿取.]"Sw开光.嫁娶.掘井.伐木.作梁.祭祀.祈福.求嗣.斋醮.造庙.出火.安机械.会亲友.开市.交易.立券.纳财.习艺.经络.求医.治病.开池.作厕.畋猎.结网.栽种.牧养.安葬.破土.启攒. i S  H N  DSA@g en!S嫁娶.祭祀.入宅.造屋.移徙.捕捉.结网.入殓.除服.成服.移柩.破土.安葬.启攒.立碑.\ E嫁娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治道涂.余事勿取.{S3移徙.入宅.出行.祈福.嫁娶.沐浴.理发.冠笄.安床.开市.立券.会亲友.交易.纳财.结网.教牛马.E 嫁娶.动土.破土.修坟.出行.造车器.造畜椆栖.解除.冠笄.裁衣.作梁.雕刻.会亲友.移徙.入宅.安机械.造畜椆栖.开市.扫舍.ESG造庙.造船.动土.破土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.置产.求医.治病.开市.交易.立券.会亲友.移徙.竖柱.上梁.造屋.合脊.安门.放水.捕捉.纳畜. gA开光.嫁娶.会亲友.栽种.针灸.安葬.冠笄.祭祀.沐浴.作灶.理发.整手足甲.扫舍.补垣.塞穴.入殓.破土.启攒.g'开市.开仓.出货财.安床.安门.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.求医.治病.出火.移徙.入宅.PEm动土.破土.开市.安葬.祭祀.作灶.纳财.捕捉.畋猎.余事勿取. YO上梁.开光.造屋.架马.合寿木.造车器.嫁娶.订盟.纳采.会亲友.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.jS嫁娶.开市.入宅.祈福.安葬.订盟.纳采.会亲友.交易.立券.纳财.栽种.纳畜.牧养.B)m开市.嫁娶.祭祀.沐浴.解除.破屋.坏垣.余事勿取.EKO开市.破土.掘井.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.安香.出火.造庙.移徙.出行.入宅.造庙.起基.竖柱.上梁.安床.纳畜.捕捉.纳婿.安葬.BSC开市.交易.祭祀.入宅.安葬.捕捉.畋猎.余事勿取.3)O嫁娶.开市.祭祀.平治道涂.余事勿取.HSM入宅.上梁.斋醮.出火.谢土.纳采.订盟.开市.交易.立券.会亲友.纳畜.牧养.问名.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.启攒.入殓.除服.成服.o]造庙.嫁娶.掘井.栽种.造桥.作灶.动土.祭祀.开光.出行.解除.伐木.作梁.出火.拆卸.入宅.移徙.安床.修造.造畜椆栖.扫舍.1出货财.开仓.动土.破土.安葬.行丧.伐木.开渠.栽种.祭祀.造车器.出行.修造.上梁.造屋.安门.安床.造畜椆栖.教牛马.}C开市.出行.栽种.置产.词讼.安门.掘井.开光.嫁娶.裁衣.冠笄.合帐.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬. Ee安床.开光.开市.交易.祭祀.裁衣.冠笄.嫁娶.安机械.拆卸.动土.起基.移徙.入宅.入殓.启攒.安葬.造仓.经络.4E5入殓.安葬.开市.交易.祭祀.诸事不宜.{ EA移徙.入宅.作灶.安葬.祭祀.裁衣.冠笄.嫁娶.纳婿.会亲友.除服.成服.移柩.捕捉.进人口.入殓.u )Q定磉.安葬.祭祀.赴任.动土.上梁.开光.塑绘.冠笄.拆卸.起基.安床.开市.立券.赴任.经络.7 E9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.嫁娶.拆卸.起基.安床.入宅.开市.入殓.除服.成服.移柩.破土.谢土.挂匾.开柱眼.交易.I E_移徙.入宅.出行.栽种.祭祀.沐浴.破屋.坏垣.余事勿取. EW作灶.祭祀.入宅.嫁娶.祭祀.冠笄.会亲友.拆卸.起基.除服.成服.移柩.启攒.安葬.沐浴.捕捉.开光.塑绘.AB)i入宅.伐木.祭祀.会亲友.纳采.嫁娶.开光.塑绘.斋醮.安香.开市.立券.除服.成服.入殓.移柩.安葬.赴任.进人口.出行.裁衣.修造.动土.上梁.经络.交易.:A)]嫁娶.入宅.祭祀.沐浴.修饰垣墙.平治道涂.@)e嫁娶.安葬.祭祀.沐浴.解除.理发.冠笄.安机械.作灶.造仓.开市.开池.作厕.补垣.塞穴.断蚁.结网.?Em造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上梁.合脊.安床.移徙.入宅.开市.栽种.作厕. "X1w ' b f  e~x4YF3gXc>S动土.作灶.行丧.安葬.修坟.祭祀.祈福.求嗣.出行.沐浴.交易.扫舍.教牛马.!=))开光.安床.祭祀.出行.解除.冠笄.嫁娶.伐木.架马.开柱眼.修造.动土.移徙.入宅.开生坟.合寿木.入殓.移柩.破土.安葬.修坟.x<a嫁娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲友.捕捉.畋猎.启攒.除服.成服.移柩.J;o7开光.动土.破土.开市.修造.入宅.安门.祭祀.嫁娶.捕捉.7:=A行丧.安葬.合寿木.开光.求嗣.雕刻.嫁娶.订盟.纳采.出火.拆卸.修造.动土.起基.上梁.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.49a嫁娶.造庙.造桥.造船.作灶.安葬.订盟.纳采.祭祀.祈福.安香.出火.修造.动土.上梁.安门.起基.竖柱.上梁.定磉.开池.移徙.入宅.立券.破土.%85'探病.余事勿取.余事勿取.m7o}祭祀.嫁娶.安床.开市.入宅.探病.上梁.沐浴.捕捉.入殓.除服.成服.破土.启攒.安葬.%6S纳采.订盟.架马.词讼.开渠.嫁娶.造车器.安机械.祭祀.祈福.开光.安香.出火.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c5aw斋醮.嫁娶.移徙.出行.上梁.入宅.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.\4E嫁娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出火.上梁.移徙.u3a针灸.伐木.作梁.造庙.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.?2g)嫁娶.入宅.修造.动土.会亲友.破土.祭祀.出行.u1o 嫁娶.开市.祭祀.祈福.斋醮.纳采.修坟.冠笄.沐浴.出行.修造.动土.移徙.入宅.破土.安葬.0o-开市.祈福.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.取渔.会亲友.入学.移柩.启攒.除服.成服.L/YQ嫁娶.开市.造屋.作梁.合寿木.祭祀.冠笄.捕捉.余事勿取.7.}安葬.纳畜.出行.行丧.伐木.栽种.造庙.造桥.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.解除.进人口.入宅.移徙.出火.安床.开市.交易.立券.挂匾.S-Eq开市.开仓.安门.安葬.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.上梁.合脊.放水.掘井.破土.移柩.谢土.除服.成服.;,)_移徙.入宅.破屋.坏垣.求医.治病.余事勿取.:+'_诸事不宜.沐浴.治病.破屋.坏垣.余事勿取.5*)S嫁娶.入宅.捕捉.结网.入殓.破土.安葬.C))o开市.安葬.嫁娶.祭祀.祈福.斋醮.动土.移徙.入宅.M(Ci嫁娶.祈福.余事勿取.沐浴.修饰垣墙.平治道涂.余事勿取.N')开市.安葬.订盟.纳采.出行.会亲友.修造.上梁.移徙.入宅.R&) 嫁娶.开市.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.安葬.J%7o作灶.动土.破土.嫁娶.出行.纳畜.祭祀.入殓.启攒.安葬.C_)o动土.破土.嫁娶.祭祀.祈福.斋醮.作灶.移徙.入宅. ^ 祈福.出行.订盟.纳采.嫁娶.裁衣.动土.安床.放水.开市.掘井.交易.立券.栽种.开渠.除服.成服.移柩.破土.] 3塑绘.开光.解除.订盟.纳采.嫁娶.出火.修造.动土.移徙.入宅.拆卸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养. \ 祈福.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生坟.入殓.除服.成服.移柩.破土.安葬.7[S+动土.破土.订盟.安床.开池.祈福.斋醮.出行.冠笄.嫁娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除服.成服.移柩.破土.安葬.启攒.4Z)Q行丧.安葬.破屋.坏垣.治病.余事勿取.|YS5嫁娶.纳采.订盟.开市.入宅.祭祀.捕捉.畋猎.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.启攒.IXE]开市.立券.纳财.作灶.纳采.订盟.嫁娶.祭祀.祈福.普渡.开光.安香.出火.移徙.入宅.竖柱.修造.动土.竖柱.上梁.起基.造屋.安门.造庙.造桥.破土.启攒.安葬. jv ]  P h  _Q5`]NgWE嫁娶.安门.动土.安葬.出行.沐浴.订盟.纳采.裁衣.竖柱.上梁.移徙.纳畜.牧养. VSO祈福.开市.动土.行丧.安葬.塑绘.冠笄.嫁娶.会亲友.进人口.经络.裁衣.栽种.纳畜.牧养.补垣.塞穴.捕捉.{US3嫁娶.出行.入宅.开市.安门.祭祀.沐浴.理发.整手足甲.冠笄.解除.入殓.移柩.破土.启攒.安葬.uTa开市.动土.破土.安床.开仓.上梁.嫁娶.冠笄.祭祀.沐浴.普渡.出行.纳财.扫舍.纳畜.赴任.Sa5动土.破土.掘井.开光.上梁.词讼.嫁娶.普渡.祭祀.祈福.补垣.塞穴.断蚁.筑堤.入殓.除服.成服.安葬.ORS[出火.入宅.造屋.安门.安葬.嫁娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲友.开市.纳财.修造.动土.竖柱.上梁.开光.开仓.出货财.纳畜.牧养.开池.破土.启攒.QS]掘井.出行.破土.行丧.安葬.嫁娶.订盟.纳采.作灶.冠笄.裁衣.会亲友.纳畜.牧养.安机械.开市.立券.纳财.安床.>Pa+纳采.订盟.经络.行丧.安葬.探病.嫁娶.祭祀.祈福.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.捕捉.畋猎.结网.OSC动土.破土.嫁娶.掘井.安床.订盟.纳采.祭祀.祈福.安香.出火.开市.立券.入宅.挂匾.造桥.启攒.安葬.4N)Q斋醮.开市.沐浴.破屋.坏垣.余事勿取.`ME 开市.交易.入宅.嫁娶.祭祀.普渡.捕捉.解除.结网.畋猎.入殓.破土.安葬.ELSG开市.立券.置产.作灶.造桥.嫁娶.纳采.订盟.祭祀.祈福.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.定磉.安门.安葬.破土.rK}y嫁娶.栽种.祈福.造桥.安葬.安门.伐木.作梁.祭祀.理发.作灶.沐浴.修饰垣墙.平治道涂.J-开市.入宅.动土.破土.安葬.作灶.上梁.安床.开仓.祈福.沐浴.理发.会亲友.塑绘.开光.栽种.牧养.嫁娶.经络.补垣.塞穴.?Im出火.嫁娶.开光.进人口.出行.词讼.开市.入宅.移徙.赴任.解除.祭祀.祈福.求嗣.修造.动土.竖柱.上梁.安床.纳畜.造屋.合脊.起基.入殓.破土.安葬.&Ha{栽种.掘井.动土.安床.破土.置产.嫁娶.纳采.订盟.祭祀.祈福.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上梁.纳畜.入殓.安葬.启攒.%Gay嫁娶.入宅.斋醮.开光.针灸.掘井.祭祀.出行.作梁.出火.拆卸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.^F'%诸事不宜.补垣.塞穴.结网.入殓.除服.成服.移柩.安葬.启攒.余事勿取.JE)}造庙.安葬.嫁娶.开市.立券.祭祀.祈福.动土.移徙.入宅..D)E开市.破土.祭祀.作灶.纳财.捕捉.RC赴任.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.YB)祭祀.祈福.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.3A'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.J{7o嫁娶.移徙.入宅.纳采.祭祀.祈福.解除.动土.破土.安葬.,z'C诸事不宜.沐浴.扫舍.余事勿取.Py' 余事勿取.祭祀.冠笄.嫁娶.捕捉.结网.畋猎.取渔.余事勿取.x !塑绘.出行.冠笄.嫁娶.进人口.裁衣.纳婿.造畜椆栖.交易.立券.牧养.开生坟.入殓.除服.成服.移柩.安葬.启攒.wS;开市.斋醮.安床.出行.经络.移徙.入宅.治病.会亲友.祭祀.祈福.斋醮.安香.移徙.嫁娶.造屋.起基.vEo动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲友.裁衣.开仓.经络.纳畜.造畜椆栖.教牛马.牧养.Wua_移徙.开市.入宅.嫁娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿取.taO造屋.入宅.作灶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.嫁娶.会亲友.放水.掘井.牧养.纳畜.开渠.安碓磑. al R u 4 D av1!oabsS开市.入宅.安床.动土.安葬.祭祀.进人口.纳财.纳畜.牧养.捕捉.余事勿取.ArKG嫁娶.开市.栽种.合寿木.祭祀.祈福.斋醮.出行.纳采.订盟.安机械.出火.拆卸.修造.动土.起基.移徙.入宅.造庙.入殓.除服.成服.移柩.破土.安葬.谢土.ZqSq祈福.上梁.开仓.掘井.牧养.纳采.订盟.嫁娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲友.安香.出火.拆卸.造屋.起基.安床.作灶.挂匾.安葬.破土.启攒.立碑.入殓.移柩.;p)_嫁娶.出行.求医.治病.破屋.坏垣.余事勿取.moo}出火.嫁娶.入宅.作灶.破土.上梁.动土.沐浴.理发.捕捉.入殓.移柩.破土.启攒.安葬.6nS)嫁娶.安葬.行丧.破土.修坟.订盟.纳采.祭祀.祈福.开光.安香.出火.立券.安机械.移徙.入宅.竖柱.上梁.会亲友.安床.拆卸.挂匾.牧养.教牛马.OmaO开市.动土.破土.嫁娶.修造.安葬.祭祀.修饰垣墙.平治道涂.LlaG斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈福.求嗣.开光.解除.扫舍.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.栽种.纳畜.牧养.nkS嫁娶.出行.纳采.入宅.作灶.祭祀.沐浴.塑绘.开光.入学.解除.扫舍.治病.开池.牧养.ljE#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.uiS'开市.入宅.嫁娶.开光.造屋.祭祀.入殓.除服.成服.移柩.破土.启攒.安葬.塞穴.断蚁.结网.)h7+出行.安葬.造桥.纳采.订盟.嫁娶.祭祀.沐浴.塑绘.开光.出火.治病.习艺.伐木.造屋.竖柱.上梁.安床.作灶.安碓磑.挂匾.掘井.纳畜.]ggc安葬.破土.开市.开仓.出货财.启攒.纳采.订盟.嫁娶.移徙.入宅.出行.祭祀.祈福.斋醮.塑绘.开光.安香.出火.会亲友.解除.入学.竖柱.上梁.拆卸.造屋.起基.栽种.牧养.纳畜.KfYM入宅.开市.掘井.词讼.合寿木.嫁娶.订盟.纳采.祭祀.祈福.斋醮.开光.会亲友.求医.治病.造屋.起基.竖柱.上梁.安门.安碓磑.筑堤.开池.破土.安葬.除服.成服.YeSo祭祀.祈福.探病.谢土.造桥.嫁娶.开市.立券.移徙.入宅.安机械.会亲友.经络.安门.安床.挂匾.拆卸.开仓.出货财.开池.栽种.纳畜.牧养.破土.安葬.启攒.移柩.入殓.立碑.4d)Q嫁娶.安葬.破屋.坏垣.解除.余事勿取.&cA嫁娶.斋醮.开市.出火.入宅.移徙.出行.作灶.安门.伐木.祭祀.祈福.解除.整手足甲.安床.沐浴.入殓.移柩.破土.启攒.安葬.谢土.Rb) 开市.安葬.订盟.纳采.出行.祭祀.祈福.修造.动土.移徙.入宅.`a5作灶.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.;`)_行丧.安葬.嫁娶.祭祀.沐浴.扫舍.修饰垣墙.Y_)动土.破土.嫁娶.纳采.出行.求医.治病.开市.移徙.入宅.启攒.安葬.M^7u移徙.入宅.安葬.订盟.纳采.出行.祈福.斋醮.安床.会亲友.<]7S上梁.动土.破土.祭祀.入殓.移柩.启攒.安葬.5)S嫁娶.安葬.裁衣.作灶.移徙.入宅.纳畜.Y)开市.安门.嫁娶.纳采.祭祀.祈福.求医.治病.出行.动土.移徙.入宅.@'k诸事不宜.祭祀.捕捉.取渔.修饰垣墙.余事勿取. #订盟.纳采.会亲友.进人口.雕刻.拆卸.修造.动土.起基.开市.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.EI开市.安门.掘井.作灶.嫁娶.出行.安机械.祭祀.塑绘.开光.治病.经络.安床.结网.塞穴.破土.入殓.B)m嫁娶.入宅.破屋.坏垣.求医.治病.畋猎.余事勿取.^S{开市.交易.嫁娶.安葬.行丧.祭祀.沐浴.捕捉.结网.畋猎.取渔.余事勿取.dE开市.伐木.作梁.作灶.安机械.移徙.入宅.出行.祭祀.祈福.斋醮.纳采.订盟.安香.出火.解除.会亲友.修造.动土.拆卸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑. HL f h m  7 Hxwe~HuK/斋醮.出行.治病.合寿木.祭祀.沐浴.理发.嫁娶.作灶.整手足甲.扫舍.修饰垣墙.平治道涂.q Y安床.出货财.作灶.动土.破土.开光.求嗣.出行.冠笄.嫁娶.伐木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出火.挂匾.起基.修造.开生坟.合寿木.入殓.除服.成服.移柩.安葬.R Eo行丧.伐木.作梁.作灶.嫁娶.订盟.纳采.冠笄.会亲友.安机械.造车器.祭祀.出行.纳财.入宅.安香.出火.入学.塑绘.开光.拆卸.起基.修造.动土.牧养.栽种.安门.作厕.< S7斋醮.开渠.上梁.动土.破土.祭祀.交易.纳财.& S 祈福.开光.掘井.开市.安葬.嫁娶.冠笄.修造.动土.作灶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船. Sq合帐.上梁.经络.安葬.入殓.祭祀.祈福.求嗣.斋醮.安香.解除.移徙.入宅.会亲友.求医.治病.动土.破土.开生坟.合寿木.BSC开市.安葬.破土.修坟.掘井.祭祀.作灶.余事勿取.a-斋醮.祭祀.移徙.入宅.上梁.嫁娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.Se作灶.理发.造桥.行丧.安葬.嫁娶.安机械.交易.出行.祭祀.祈福.求嗣.斋醮.塑绘.开光.合帐.裁衣.放水.开池.掘井.B7_入宅.嫁娶.移徙.祭祀.沐浴.破屋.坏垣.余事勿取.7K3嫁娶.开市.合寿木.安葬.纳采.订盟.冠笄.祭祀.祈福.斋醮.出行.修造.动土.移徙.入宅.安香.出火.拆卸.造屋.起基.竖柱.上梁.定磉.安门.开池.uS'开光.作灶.造屋.架马.开仓.嫁娶.纳采.祭祀.祈福.出行.立券.移徙.入宅.动土.破土.安葬.qS开市.入宅.出行.修造.词讼.祭祀.沐浴.理发.整手足甲.修饰垣墙.平治道涂.余事勿取.{a%嫁娶.安床.作灶.动土.破土.造船.安机械.祭祀.祈福.求嗣.沐浴.解除.纳采.开市.修造.竖柱.上梁.开柱眼.安碓磑.归岫.补垣.塞穴.拆卸.放水.出火.扫舍.开生坟.合寿木.安葬.谢土.启攒.除服.成服.JQS安葬.开生坟.合寿木.行丧.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.修造.进人口.入宅.移徙.动土.安床.纳畜.栽种.纳财.交易.立券.挂匾.造畜椆栖.EEW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿取.~am安床.祈福.出行.安葬.行丧.开光.嫁娶.合帐.裁衣.冠笄.伐木.上梁.出火.拆卸.移徙.修造.动土.安门.纳财.筑堤.栽种.塞穴.Y})赴任.捕捉.嫁娶.裁衣.祭祀.出行.安床.作灶.移徙.入宅.破土.安葬.C|)o嫁娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<{7S动土.破土.安葬.嫁娶.纳采.出行.移徙.入宅.Jz)}嫁娶.安葬.纳采.祭祀.祈福.开市.求医.治病.动土.纳畜.`y)'祈福.斋醮.嫁娶.纳采.祭祀.祈福.出行.动土.上梁.移徙.入宅.破土.安葬.33'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.Y2)开市.开光.嫁娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y1'安门.嫁娶.纳采.出行.祭祀.祈福.开市.动土.移徙.入宅.破土.安葬.0 7会亲友.进人口.修造.动土.起基.移徙.开市.纳畜.入殓.除服.成服.移柩.破土.安葬.修坟.立碑.会亲友.开光.出行.嫁娶.D/'s诸事不宜.进人口.牧养.置产.塞穴.结网.余事勿取.. 1开光.出行.纳采.嫁娶.伐木.架马.出火.拆卸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除服.成服.移柩.安葬.4-)Q破土.安葬.塞穴.断蚁.结网.余事勿取.,''余事勿取.余事勿取.}+S7开市.入宅.探病.出火.造屋.嫁娶.祭祀.祈福.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.针灸.理发.会亲友.起基.修造.动土.竖柱.定磉.安床.拆卸.纳畜.牧养.放水.破土.除服.成服.修坟.立碑.P*aQ开市.动土.祭祀.斋醮.安葬.探病.栽种.捕捉.畋猎.余事勿取. ZA ' = 8 ^  6a`c2rCZc)E嫁娶.出火.移徙.入宅.开市.交易.立券.安机械.会亲友.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上梁.安门.作灶.放水.作厕.开池.栽种.牧养.造畜椆栖.破土.安葬.立碑.;(EC斋醮.开市.嫁娶.作灶.沐浴.扫舍.余事勿取.B')m行丧.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取."&E移徙.入宅.造屋.架马.嫁娶.纳采.订盟.斋醮.开光.祭祀.祈福.求医.治病.会亲友.动土.解除.捕捉.纳畜.牧养.入殓.破土.安葬.:%E?动土.破土.嫁娶.嫁娶.祭祀.祈福.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上梁.作灶.安门.安香.出火.造屋.启攒.安葬.^$S{祈福.嫁娶.入宅.安床.作灶.祭祀.沐浴.移徙.破土.安葬.扫舍.平治道涂.~#S9开市.作灶.动土.行丧.安葬.嫁娶.纳采.订盟.会亲友.安机械.结网.冠笄.祭祀.求嗣.进人口.经络.x"S-开市.出行.安床.作灶.安葬.嫁娶.纳采.订盟.祭祀.祈福.治病.造车器.修造.动土.移徙.入宅.>!)e嫁娶.安葬.祭祀.解除.断蚁.会亲友.余事勿取." as入宅.造屋.造桥.安门.安葬.上梁.嫁娶.冠笄.祭祀.出行.移徙.入宅.作灶.造车器.补垣.塞穴.作厕.破土.启攒.除服.成服.入殓.]7入宅.安门.安葬.祭祀.祈福.求嗣.开光.纳采.订盟.嫁娶.出行.动土.破土.会亲友.开市.交易.立券.习艺.拆卸.起基.安碓磑.放水.开池.造仓.开渠.栽种.谢土.启攒.修坟.立碑.;7Q探病.嫁娶.开市.祭祀.结网.捕捉.余事勿取.7S+安床.上梁.裁衣.入宅.嫁娶.祭祀.祈福.求嗣.开光.订盟.纳采.解除.动土.起基.进人口.开市.交易.立券.纳财.造仓.开池.栽种.纳畜.破土.安葬.47A作灶.开市.经络.订盟.纳采.嫁娶.解除.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.入宅.移徙.安床.栽种.纳畜.动土.破土.谢土.安葬.修坟.B)m开光.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取.OKc开市.立券.造船.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.修造.进人口.入宅.移徙.安床.解除.挂匾.栽种.破土.谢土.入殓.移柩.安葬.SSc作灶.嫁娶.移徙.入宅.理发.开市.交易.立券.挂匾.祭祀.祈福.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.启攒.除服.成服.立碑.J7o嫁娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4)Q嫁娶.安葬.祭祀.作灶.掘井.平治道涂.F7g嫁娶.动土.破土.祭祀.会亲友.开市.安床.启攒.安葬.Q7}嫁娶.开市.安葬.纳采.开光.求医.治病.动土.上梁.移徙.入宅.jNS掘井.动土.破土.安葬.开光.祭祀.进人口.嫁娶.安床.解除.冠笄.出行.裁衣.扫舍.MEk掘井.安门.嫁娶.纳采.祭祀.祈福.裁衣.合帐.安床.入殓.除服.成服.移柩.破土.启攒.安葬.谢土.立碑.造畜椆栖.%LE入殓.安葬.入宅.安床.订盟.纳采.嫁娶.进人口.会亲友.交易.立券.动土.除服.谢土.移柩.破土.启攒.赴任.出行.开市.纳财.栽种.:KQ5造庙.嫁娶.安床.余事勿取.祭祀.余事勿取.JEW出火.入宅.安葬.伐木.祭祀.塑绘.开光.订盟.纳采.冠笄.裁衣.安机械.拆卸.修造.动土.安床.经络.开市.I''诸事不宜.诸事不宜.fHS 嫁娶.开市.交易.入宅.安葬.祭祀.沐浴.破屋.坏垣.求医.治病.解除.余事勿取.GE 开市.动土.掘井.开池.祭祀.祈福.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.取渔.解除.安葬.启攒.谢土.入殓.@FKE入宅.动土.开仓.出货财.造车器.祭祀.祈福.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.合脊.起基.定磉.安门.纳畜.安葬.开生坟.立碑.谢土.斋醮.OES]嫁娶.安葬.动土.安床.治病.祭祀.作灶.平治道涂.余事勿取. ZF * Y 5 %m'YhnZ:Da#祈福.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.嫁娶.会亲友.进人口.安床.开市.交易.纳畜.牧养.入殓.除服.成服.移柩.安葬.启攒.~Ca+开市.嫁娶.移徙.入宅.掘井.安葬.沐浴.斋醮.解除.求医.治病.会亲友.造畜椆栖.栽种.理发.扫舍.aBoe动土.破土.行丧.开光.作梁.安葬.探病.祭祀.解除.教牛马.出行.余事勿取.fAa}开光.嫁娶.掘井.安葬.安门.探病.祭祀.祈福.求嗣.斋醮.冠笄.作灶.纳财.交易.n@S祈福.动土.破土.安葬.入殓.纳采.嫁娶.出行.开市.立券.纳畜.牧养.出火.移徙.入宅.4?)Q嫁娶.安葬.祭祀.捕捉.解除.余事勿取./>77出火.嫁娶.开市.祭祀.祈福.求嗣.斋醮.纳采.订盟.开光.竖柱.上梁.开仓.出货财.造屋.起基.定磉.安门.诸事不宜.破土.入殓.启攒.谢土.J=SS祭祀.嫁娶.入宅.作灶.安葬.沐浴.捕捉.畋猎.结网.取渔._<E 祈福.斋醮.开市.安葬.祭祀.沐浴.解除.求医.治病.破屋.坏垣.余事勿取.u;E5嫁娶.开市.纳财.出火.纳采.祭祀.祈福.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.g:S 移徙.入宅.嫁娶.出行.安床.祭祀.祈福.求嗣.斋醮.沐浴.纳畜.入殓.破土.安葬.K9K]安床.入宅.安碓磑.栽种.祭祀.作灶.平治道涂.余事勿取.8ae祈福.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.嫁娶.开市.出行.会亲友.安床.结网.除服.成服.启攒.安葬.移柩.H7o1纳采.出行.修坟.安葬.开市.立券.作灶.嫁娶.祭祀.祈福.求嗣.斋醮.开光.出火.移徙.入宅.竖柱.上梁.会亲友.造屋.起基.治病.治病.安门.造车器.掘井.开池.A6EO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿取.25a移徙.入宅.作灶.理发.开光.安门.祭祀.出行.修造.动土.合帐.造畜椆栖.安床.移徙.入殓.移柩.破土.启攒.安葬.开生坟.合寿木.补垣.塞穴.4S_作灶.开光.嫁娶.开市.入宅.订盟.纳采.冠笄.拆卸.修造.动土.安床.入殓.除服.成服.移柩.安葬.破土.启攒.造仓.W3)栽种.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.嫁娶.裁衣.动土.起基.出火.拆卸.移徙.入宅.安香.修造.竖柱.上梁.纳畜.牧养.祈福.求嗣.解除.伐木.定磉.造屋.安门.C2SE嫁娶.入宅.移徙.作灶.安葬.祭祀.沐浴.捕捉.栽种.41E3造庙.嫁娶.伐木.安葬.祭祀.开光.塑绘.订盟.纳采.合帐.冠笄.拆卸.动土.起基.上梁.入宅.安香.开市.立券.纳财.沐浴.求嗣.出火.竖柱.安门.k)作梁.造庙.祭祀.出行.订盟.纳采.裁衣.合帐.冠笄.进人口.动土.安床.作灶.入殓.移柩.安葬.破土.结网.取渔.畋猎.j')诸事不宜.破屋.坏垣.iE 安床.嫁娶.作灶.入宅.祭祀.解除.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.谢土.沐浴.扫舍.捕捉.取渔.结网.畋猎.理发.Ih赴任.祈福.求嗣.开光.塑绘.斋醮.订盟.纳采.嫁娶.拆卸.安床.入宅.安香.移柩.修坟.安葬.谢土.栽种.解除.冠笄.裁衣.移徙.修造.动土.竖柱.放水.启攒.立碑.XgSo动土.作灶.入宅.开光.安床.祭祀.嫁娶.纳婿.除服.成服.入殓.移柩.3fE1作灶.出行.入宅.安葬.塑绘.开光.订盟.纳采.裁衣.合帐.冠笄.安机械.会亲友.纳财.开市.立券.交易.安床.竖柱.上梁.结网.栽种.解除.经络.,e'C诸事不宜.扫舍.塞穴.余事勿取.tda栽种.动土.安葬.掘井.修坟.探病.祭祀.会亲友.立券.交易.裁衣.合帐.嫁娶.冠笄.进人口.3cS#祭祀.嫁娶.出行.上梁.掘井.裁衣.经络.伐木.开柱眼.拆卸.修造.动土.上梁.合脊.合寿木.入殓.除服.成服.移柩.破土.安葬.启攒.修坟.立碑.4bS%纳采.动土.开市.交易.安门.开光.祈福.求嗣.出行.解除.伐木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除服.成服.移柩.谢土.纳畜.牧养. R5; A A + 1vp KdIRTaEu纳财.开市.安葬.破土.理发.冠笄.嫁娶.进人口.栽种.捕捉.针灸.`E{祈福.嫁娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出火.拆卸.起基.修造.动土.上梁.移徙.造船.开市.交易.立券.纳财.j_S塑绘.开光.造桥.除服.成服.嫁娶.冠笄.祭祀.出行.会亲友.修造.动土.入殓.破土.;^EC嫁娶.移徙.开市.入宅.破屋.坏垣.余事勿取.g]S 纳采.开光.安床.嫁娶.开市.祈福.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~\=O纳畜.理发.合寿木.嫁娶.造车器.纳采.订盟.祭祀.祈福.安机械.移徙.入宅.开市.立券.破土.安葬._[E 开市.造屋.治病.作灶.嫁娶.冠笄.会亲友.安机械.纳财.交易.立券.置产.jZ7-移徙.入宅.栽种.纳财.开市.交易.立券.开光.针灸.会亲友.理发.安床.造仓.结网.JYEa嫁娶.安葬.行丧.安门.祭祀.沐浴.解除.扫舍.塞穴.牧养.bXau嫁娶.动土.掘井.起基.定磉.破土.祭祀.会亲友.出行.立券.交易.冠笄.纳财.cWE嫁娶.祈福.出火.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.VE{开市.交易.合帐.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.破土.出火.安门.安床.上梁.立碑.移柩.mUE%入宅.造屋.竖柱.安葬.纳财.交易.立券.栽种.捕捉.结网.取渔.进人口.教牛马.理发.TYm嫁娶.定磉.合寿木.安葬.行丧.祭祀.祈福.求嗣.斋醮.沐浴.开光.理发.经络.解除.治病.治病.立碑.栽种.牧养.掘井.开池.cS7嫁娶.开光.作灶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;R)_开光.嫁娶.破屋.坏垣.求医.治病.余事勿取.&Q}_开市.交易.作灶.纳财.上梁.安床.造屋.造船.嫁娶.开光.祭祀.祈福.求嗣.出行.出火.入宅.移徙.解除.栽种.伐木.破土.谢土.安葬.BPEO栽种.动土.开市.作灶.祭祀.祈福.酬神.订盟.纳采.冠笄.裁衣.合帐.嫁娶.安床.移徙.入宅.安香.入殓.移柩.启攒.安葬.解除.取渔.捕捉.伐木.安门.出火.]OE造屋.栽种.安葬.作灶.塑绘.开光.酬神.斋醮.订盟.纳采.裁衣.合帐.拆卸.动土.上梁.安床.安香.造庙.挂匾.会亲友.进人口.出行.修造.纳财.伐木.放水.出火.纳畜.沐浴.安门.AN_5祭祀.祈福.安葬.安门.余事勿取.作灶.平治道涂.XME}斋醮.作灶.安床.安葬.安床.合帐.入宅.问名.纳采.求嗣.祭祀.开仓.0U掘井.祭祀.斋醮.裁衣.合帐.冠笄.订盟.纳采.嫁娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲友.出行.祈福.求嗣.立碑.上梁.放水.[Su祭祀.祈福.移徙.嫁娶.入宅.裁衣.合帐.入殓.除服.成服.会亲友.纳财.EQ出行.嫁娶.入宅.动土.祭祀.祈福.求嗣.酬神.裁衣.安床.立券.交易.入殓.除服.成服.移柩.谢土.启攒.EEU安葬.上梁.入宅.作灶.祭祀.沐浴.开光.塑绘.祈福.求嗣.订盟.纳采.冠笄.裁衣.嫁娶.动土.除服.成服.移柩.破土.启攒.出行.安碓磑.放水.开市.立券.交易.&S 伐木.作灶.安葬.取渔.入宅.塑绘.开光.祈福.求嗣.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I'}余事勿取.祭祀.结网.入殓.除服.成服.移柩.安葬.破土.&~E安床.栽种.治病.作灶.祭祀.冠笄.嫁娶.拆卸.修造.动土.起基.上梁.造屋.入宅.开市.开池.塞穴.入殓.除服.成服.移柩.安葬.破土._}7入宅.开市.安葬.祭祀.沐浴.求医.治病.扫舍.破屋.坏垣.解除.余事勿取.|S]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.嫁娶.会亲友.进人口.牧养.捕捉.入殓.移柩.安葬.启攒.E{o+置产.造屋.合脊.开光.探病.安门.作灶.祈福.求嗣.斋醮.纳采.嫁娶.伐木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除服.成服.移柩.安葬.破土.谢土. j ^ " K y u}6uKmjAzEO嫁娶.祈福.掘井.安葬.祭祀.平治道涂.余事勿取.\yE开市.动土.安葬.破土.会亲友.求嗣.理发.冠笄.结网.捕捉.开光.理发.uxS'开光.嫁娶.作灶.掘井.纳畜.祭祀.祈福.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.jwS祭祀.移徙.入宅.动土.破土.纳采.会亲友.竖柱.上梁.立券.入殓.移柩.安葬.启攒.nvS嫁娶.动土.开光.造屋.破土.祭祀.祈福.求嗣.斋醮.入殓.除服.成服.移柩.安葬.启攒.quS移徙.入宅.出火.安门.安葬.纳采.嫁娶.祭祀.祈福.出行.开市.会亲友.动土.破土.启攒.ctE嫁娶.开市.安葬.破土.纳采.祭祀.祈福.出行.会亲友.修造.动土.移徙.入宅.CsSE嫁娶.安门.移徙.入宅.安葬.塞穴.结网.取渔.畋猎.rKQ安床.作灶.造船.会亲友.纳采.订盟.祭祀.祈福.安香.出火.修造.出行.开市.移徙.入宅.动土.安葬.破土.Qq) 嫁娶.安葬.祭祀.沐浴.解除.理发.扫舍.破屋.坏垣.余事勿取.gp7'开市.入宅.斋醮.纳采.嫁娶.祭祀.祈福.出行.修造.动土.移徙.入宅.安葬.破土.PoS_经络.探病.造屋.作灶.动土.嫁娶.祭祀.冠笄.修饰垣墙.置产.HnE]祭祀.祈福.安葬.安门.作灶.解除.平治道涂.余事勿取.pmS嫁娶.开市.动土.作灶.安葬.会亲友.冠笄.安床.会亲友.安机械.祭祀.祈福.求嗣.经络.7lS+移徙.入宅.出火.作灶.掘井.祭祀.祈福.求嗣.开光.嫁娶.出行.解除.伐木.拆卸.进人口.安床.动土.起基.上梁.栽种.纳畜.破土.谢土.启攒.安葬.BkEO作灶.祭祀.上梁.出行.沐浴.解除.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.移徙.入宅.除服.成服.移柩.破土.启攒.安葬.扫舍.修坟.伐木.纳财.交易.立券.,j'C诸事不宜.祭祀.解除.余事勿取.AiEM开仓.嫁娶.移徙.入宅.祭祀.沐浴.祈福.斋醮.订盟.纳采.裁衣.拆卸.起基.竖柱.上梁.安床.入殓.除服.成服.移柩.启攒.挂匾.求嗣.出行.合帐.造畜椆栖.b#E嫁娶.入殓.安葬.出行.塑绘.开光.沐浴.冠笄.会亲友.作灶.放水.造畜椆栖.;")_开市.安床.祭祀.作灶.入殓.除服.余事勿取.X!E}开市.伐木.嫁娶.作梁.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.L SU祈福.嫁娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出火.塑绘.裁衣.会亲友.入学.拆卸.扫舍.造仓.挂匾.掘井.开池.结网.栽种.纳畜.破土.修坟.立碑.安葬.入殓.47C嫁娶.开市.安葬.破屋.坏垣.余事勿取.E{造屋.开市.动土.破土.嫁娶.祭祀.沐浴.裁衣.出行.理发.移徙.捕捉.畋猎.放水.入宅.除服.成服.启攒.安葬.移柩.入殓.7)W嫁娶.安葬.祭祀.安碓磑.结网.余事勿取.sa移徙.入宅.造庙.作灶.治病.安葬.祭祀.冠笄.嫁娶.会亲友.进人口.裁衣.结网.平治道涂.OEi入宅.开光.开市.动土.嫁娶.订盟.纳采.祭祀.祈福.求嗣.会亲友.解除.出行.入学.纳财.开市.交易.立券.习艺.经络.安床.开仓.出货财.纳畜.安葬.启攒.修坟.入殓.|o探病.祭祀.出行.上梁.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲友.解除.求医.治病.入学.安床.安门.安香.出火.拆卸.扫舍.入宅.挂匾.开生坟.合寿木.破土.修坟.启攒.入殓.H7k破土.动土.安葬.祭祀.解除.教牛马.会亲友.余事勿取.Sk开光.嫁娶.开市.动土.破土.交易.立券.纳财.安床.裁衣.造畜椆栖.安葬.谢土.启攒.除服.成服.修坟.立碑.移柩.入殓.cau造庙.嫁娶.出行.动土.安葬.行丧.订盟.纳采.会亲友.祭祀.斋醮.沐浴.塑绘.出火.开光.竖柱.上梁.开市.交易.立券.作梁.开柱眼.伐木.架马.安门.安床.拆卸.牧养.造畜椆栖.掘井.{EA开市.安床.安葬.修坟.嫁娶.纳采.订盟.问名.祭祀.冠笄.裁衣.会亲友.进人口.纳财.捕捉.作灶. wq e L { = 1'j'z#ea{造庙.入宅.修造.安葬.行丧.嫁娶.祭祀.沐浴.补垣.塞穴.断蚁.解除.余事勿取. SW祈福.嫁娶.安床.入宅.造船.沐浴.开仓.出货财.开市.交易.立券.纳财.栽种.纳畜.牧养.畋猎.入殓.破土.安葬.;7Q斋醮.嫁娶.开市.祭祀.破屋.坏垣.余事勿取.%}]纳采.订盟.嫁娶.上梁.开市.斋醮.造屋.安门.沐浴.捕捉.畋猎.理发.整手足甲.入殓.除服.成服.破土.安葬.谢土.立碑.修坟.启攒.E开市.出行.安葬.行丧.嫁娶.订盟.纳采.会亲友.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出火.挂匾.拆卸.置产.RuA开光.嫁娶.开仓.出货财.造船.安葬.探病.平治道涂.余事勿取.'5'挂匾.入宅.上梁.祈福.词讼.作梁.作灶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.嫁娶.栽种.入殓.移柩.安葬.?s作灶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.嫁娶.开光.解除.出火.拆卸.修造.进人口.入宅.移徙.安床.栽种.入殓.修坟.动土.除服.成服.y o嫁娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲友.解除.余事勿取.7  q入宅.置产.嫁娶.动土.栽种.开市.开光.动土.破土.祭祀.祈福.求嗣.沐浴.问名.交易.纳财.入殓.移柩.安葬.修坟.立碑.谢土.造畜椆栖.教牛马.. S嫁娶.合帐.入宅.行丧.安葬.纳采.订盟.祭祀.祈福.求嗣.斋醮.沐浴.进人口.会亲友.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q aS嫁娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.捕捉.畋猎.n S嫁娶.入宅.作灶.纳采.订盟.祭祀.斋醮.入殓.破土.启攒.安葬.修坟.立碑.除服.成服.u m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>EG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ϓ_EQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.Pϓ^aQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cϓ]S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.Kϓ\SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.Sϓ[aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ϓZa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ϓYE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XϓXE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.ϓWS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.ϓVa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水. l  d 3 S   W tDv~lWϓUa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0ϓTS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rϓSo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]ϓRSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UϓQoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TϓPKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iϓO';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ϓN U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vϓM[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ϓL会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ϓKoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ϓJS+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4ϓI)Q移徙.入宅.破屋.坏垣.治病.余事勿取.ϓHKq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ϓGE开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.%ϓF)1作灶.治病.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.赴任.进人口.会亲友.ϓEEK作灶.治病.伐木.作梁.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.除服.成服.入殓.移柩.安葬.谢土.赴任.会亲友.进人口.出行.竖柱.上梁.经络.开市.交易.立券.纳财.开仓.FϓDEY嫁娶.入宅.安门.移徙.理发.会亲友.补垣.塞穴.结网.ZϓCE入宅.作灶.安床.开仓.祭祀.会亲友.嫁娶.沐浴.修造.动土.祈福.开光.塑绘.出行.订盟.纳采.裁衣.入殓.除服.成服.移柩.启攒.赴任.竖柱.上梁.纳财.扫舍.栽种.纳畜.伐木.,ϓB'C诸事不宜.祭祀.沐浴.余事勿取.pϓAS开光.掘井.安葬.谢土.修坟.嫁娶.冠笄.安床.纳采.会亲友.塞穴.捕捉.置产.造畜椆栖.LϒzSU移徙.入宅.安门.作梁.安葬.祭祀.祈福.求嗣.斋醮.沐浴.冠笄.出行.理发.拆卸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫舍.除服.成服.移柩.启攒.立碑.谢土.pϒyS安床.安门.破土.修坟.安葬.捕捉.畋猎.会亲友.解除.入殓.除服.成服.移柩.余事勿取.ZϒxSq嫁娶.开市.入宅.出火.移徙.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.会亲友.解除.入学.纳财.交易.立券.经络.起基.动土.定磉.开池.栽种.纳畜.牧养.破土.入殓.立碑.安葬. qr# H  < q~!`WLϒwEc造屋.造船.动土.破土.嫁娶.纳采.订盟.祭祀.冠笄.裁衣.伐木.作梁.架马.定磉.开柱眼.作灶.移徙.安床.畋猎.结网.开池.作厕.除服.成服.启攒.入殓.移柩.安葬.4ϒv)Q嫁娶.安葬.破屋.坏垣.祭祀.余事勿取.IϒuE]开市.造庙.动土.破土.嫁娶.订盟.纳采.祭祀.祈福.塑绘.开光.移徙.安床.伐木.作梁.捕捉.畋猎.结网.求医.治病.解除.安葬.除服.成服.移柩.入殓.立碑.谢土.HϒtSM嫁娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈福.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上梁.安门.安香.出火.教牛马.会亲友.破土.JϒsE_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出火.修饰垣墙.平治道涂.会亲友.出行.开池.作厕.^ϒrS{嫁娶.开市.祈福.斋醮.安葬.塑绘.会亲友.安机械.塞穴.结网.裁衣.经络._ϒqam开市.纳采.造庙.安床.开渠.安葬.嫁娶.造车器.出行.会亲友.移徙.入宅.修造.动土.雕刻.开光.安香.出火.理发.会亲友.造屋.合脊.起基.归岫.安门.拆卸.扫舍.栽种.造畜椆栖.IϒpSQ开市.动土.破土.行丧.安葬.祭祀.沐浴.出行.余事勿取.nϒoS嫁娶.入宅.安床.掘井.开光.祭祀.理发.置产.塞穴.除服.成服.移柩.入殓.破土.安葬.;ϒnS3移徙.入宅.出火.入殓.安葬.开市.纳财.出行.祭祀.祈福.求嗣.斋醮.问名.入学.起基.定磉.置产.开渠.掘井.拆卸.栽种.纳畜.牧养.动土.破土.启攒._ϒmoa嫁娶.纳采.订盟.安床.动土.破土.安葬.祭祀.沐浴.捕捉.畋猎.结网.扫舍.tϒlS%嫁娶.移徙.出火.开市.入宅.订盟.纳采.会亲友.祭祀.祈福.修造.动土.安机械.破土.安葬.{ϒkS3祭祀.嫁娶.入宅.修造.动土.祭祀.扫舍.破土.安葬.除服.成服.启攒.移柩.入殓.立碑.余事勿取.Iϒj){嫁娶.安葬.祭祀.解除.破屋.坏垣.求医.治病.余事勿取.ϒiam破土.动土.安门.作灶.开市.交易.嫁娶.纳采.订盟.祭祀.开光.出行.解除.伐木.出火.入宅.移徙.拆卸.修造.栽种.安葬.入殓.EϒhEU置产.掘井.词讼.栽种.嫁娶.纳采.订盟.祭祀.斋醮.开光.安香.出火.出行.出火.拆卸.动土.祈福.进人口.纳财.交易.立券.移徙.安床.修造.安葬.除服.成服.Qϒg %造庙.谢土.作灶.作梁.伐木.安葬.行丧.修坟.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.裁衣.会亲友.拆卸.进人口.安香.经络.出货财.修饰垣墙.平治道涂.ϒf祈福.谢土.安葬.上梁.作灶.开市.嫁娶.出行.入宅.动土.祭祀.塑绘.理发.会亲友.牧养.开池.造畜椆栖.畋猎.结网.Oϒe7w作灶.经络.安床.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.进人口.开市.立券.挂匾.入宅.移徙.安门.栽种.动土.求医.治病.会亲友.起基.修造.造屋.安葬.VϒdSk开市.动土.破土.嫁娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿取.fϒcS 置产.造船.开光.掘井.作灶.合帐.裁衣.嫁娶.安床.入殓.移柩.破土.造畜椆栖.?ϒb)g动土.上梁.嫁娶.祭祀.安机械.入殓.破土.安葬.ϒaEm作灶.入殓.安葬.安床.祭祀.祈福.斋醮.沐浴.竖柱.订盟.纳采.嫁娶.拆卸.入宅.移柩.启攒.谢土.赴任.出火.纳畜.Jϒ`Ea栽种.动土.安葬.开市.祭祀.作灶.入殓.除服.成服.畋猎.yϒ_E=开仓.冠笄.伐木.作梁.祭祀.塑绘.开光.祈福.斋醮.出行.订盟.纳采.裁衣.嫁娶.拆卸.修造.安床.入宅.安香.入殓.启攒.安葬.谢土.赴任.会亲友.进人口.出行.移徙.上梁.经络.开市.交易.立券.纳财. ϒ^E]出行.祈福.安葬.作灶.会亲友.嫁娶.订盟.纳采.纳婿.拆卸.修造.动土.起基.竖柱.上梁.安床.会亲友.纳财. 9_ m q  5 SM;7,ϒ]'C诸事不宜.破屋.坏垣.余事勿取.]ϒSw开光.嫁娶.掘井.伐木.作梁.祭祀.祈福.求嗣.斋醮.造庙.出火.安机械.会亲友.开市.交易.立券.纳财.习艺.经络.求医.治病.开池.作厕.畋猎.结网.栽种.牧养.安葬.破土.启攒.nϒS嫁娶.祭祀.入宅.造屋.移徙.捕捉.结网.入殓.除服.成服.移柩.破土.安葬.启攒.立碑.\ϒE嫁娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治道涂.余事勿取.{ϒS3移徙.入宅.出行.祈福.嫁娶.沐浴.理发.冠笄.安床.开市.立券.会亲友.交易.纳财.结网.教牛马.ϒE 嫁娶.动土.破土.修坟.出行.造车器.造畜椆栖.解除.冠笄.裁衣.作梁.雕刻.会亲友.移徙.入宅.安机械.造畜椆栖.开市.扫舍.EϒSG造庙.造船.动土.破土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.置产.求医.治病.开市.交易.立券.会亲友.移徙.竖柱.上梁.造屋.合脊.安门.放水.捕捉.纳畜. ϒgA开光.嫁娶.会亲友.栽种.针灸.安葬.冠笄.祭祀.沐浴.作灶.理发.整手足甲.扫舍.补垣.塞穴.入殓.破土.启攒.ϒg'开市.开仓.出货财.安床.安门.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.求医.治病.出火.移徙.入宅.PϒEm动土.破土.开市.安葬.祭祀.作灶.纳财.捕捉.畋猎.余事勿取. ϒYO上梁.开光.造屋.架马.合寿木.造车器.嫁娶.订盟.纳采.会亲友.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.jϒ S嫁娶.开市.入宅.祈福.安葬.订盟.纳采.会亲友.交易.立券.纳财.栽种.纳畜.牧养.Bϒ )m开市.嫁娶.祭祀.沐浴.解除.破屋.坏垣.余事勿取.Eϒ KO开市.破土.掘井.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.安香.出火.造庙.移徙.出行.入宅.造庙.起基.竖柱.上梁.安床.纳畜.捕捉.纳婿.安葬.Bϒ SC开市.交易.祭祀.入宅.安葬.捕捉.畋猎.余事勿取.3ϒ )O嫁娶.开市.祭祀.平治道涂.余事勿取.HϒSM入宅.上梁.斋醮.出火.谢土.纳采.订盟.开市.交易.立券.会亲友.纳畜.牧养.问名.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.启攒.入殓.除服.成服.ϒo]造庙.嫁娶.掘井.栽种.造桥.作灶.动土.祭祀.开光.出行.解除.伐木.作梁.出火.拆卸.入宅.移徙.安床.修造.造畜椆栖.扫舍.ϒ1出货财.开仓.动土.破土.安葬.行丧.伐木.开渠.栽种.祭祀.造车器.出行.修造.上梁.造屋.安门.安床.造畜椆栖.教牛马.ϒ}C开市.出行.栽种.置产.词讼.安门.掘井.开光.嫁娶.裁衣.冠笄.合帐.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.VϒSi安门.安床.裁衣.入宅.安葬.祭祀.祈福.求嗣.斋醮.开光.出行.嫁娶.求医.治病.动土.破土.入学.起基.扫舍.竖柱.上梁.开仓.出货财.置产.栽种.牧养.开生坟.谢土.立碑.[ϒSu嫁娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲友.纳财.理发.捕捉.vϒa探病.纳畜.伐木.起基.作梁.造屋.嫁娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈福.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆卸.修造.动土.栽种.安葬.破土.启攒.除服.成服.入殓.立碑.ϒoO祈福.斋醮.纳采.订盟.嫁娶.入宅.安葬.祭祀.求嗣.冠笄.进人口.会亲友.安门.安床.经络.纳财.牧养.畋猎.放水.割蜜.PϒS_嫁娶.入宅.上梁.出行.安葬.祭祀.沐浴.破屋.坏垣.余事勿取.IϑE_移徙.入宅.出行.栽种.祭祀.沐浴.破屋.坏垣.余事勿取.ϑ~EW作灶.祭祀.入宅.嫁娶.祭祀.冠笄.会亲友.拆卸.起基.除服.成服.移柩.启攒.安葬.沐浴.捕捉.开光.塑绘.Aϑ})i入宅.伐木.祭祀.会亲友.纳采.嫁娶.开光.塑绘.斋醮.安香.开市.立券.除服.成服.入殓.移柩.安葬.赴任.进人口.出行.裁衣.修造.动土.上梁.经络.交易. p(  % F m _Y:'H9:ϑ|)]嫁娶.入宅.祭祀.沐浴.修饰垣墙.平治道涂.ϑ{)e嫁娶.安葬.祭祀.沐浴.解除.理发.冠笄.安机械.作灶.造仓.开市.开池.作厕.补垣.塞穴.断蚁.结网.ϑzEm造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上梁.合脊.安床.移徙.入宅.开市.栽种.作厕.cϑyS动土.作灶.行丧.安葬.修坟.祭祀.祈福.求嗣.出行.沐浴.交易.扫舍.教牛马.!ϑ2))开光.安床.祭祀.出行.解除.冠笄.嫁娶.伐木.架马.开柱眼.修造.动土.移徙.入宅.开生坟.合寿木.入殓.移柩.破土.安葬.修坟.xϑ1a嫁娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲友.捕捉.畋猎.启攒.除服.成服.移柩.Jϑ0o7开光.动土.破土.开市.修造.入宅.安门.祭祀.嫁娶.捕捉.7ϑ/=A行丧.安葬.合寿木.开光.求嗣.雕刻.嫁娶.订盟.纳采.出火.拆卸.修造.动土.起基.上梁.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.4ϑ.a嫁娶.造庙.造桥.造船.作灶.安葬.订盟.纳采.祭祀.祈福.安香.出火.修造.动土.上梁.安门.起基.竖柱.上梁.定磉.开池.移徙.入宅.立券.破土.%ϑ-5'探病.余事勿取.余事勿取.mϑ,o}祭祀.嫁娶.安床.开市.入宅.探病.上梁.沐浴.捕捉.入殓.除服.成服.破土.启攒.安葬.%ϑ+S纳采.订盟.架马.词讼.开渠.嫁娶.造车器.安机械.祭祀.祈福.开光.安香.出火.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.cϑ*aw斋醮.嫁娶.移徙.出行.上梁.入宅.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.\ϑ)E嫁娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出火.上梁.移徙.uϑ(a针灸.伐木.作梁.造庙.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.?ϑ'g)嫁娶.入宅.修造.动土.会亲友.破土.祭祀.出行.uϑ&o 嫁娶.开市.祭祀.祈福.斋醮.纳采.修坟.冠笄.沐浴.出行.修造.动土.移徙.入宅.破土.安葬.ϑ%o-开市.祈福.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.取渔.会亲友.入学.移柩.启攒.除服.成服.Lϑ$YQ嫁娶.开市.造屋.作梁.合寿木.祭祀.冠笄.捕捉.余事勿取.7ϑ#}安葬.纳畜.出行.行丧.伐木.栽种.造庙.造桥.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.解除.进人口.入宅.移徙.出火.安床.开市.交易.立券.挂匾.Sϑ"Eq开市.开仓.安门.安葬.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.上梁.合脊.放水.掘井.破土.移柩.谢土.除服.成服.;ϑ!)_移徙.入宅.破屋.坏垣.求医.治病.余事勿取.ϑ  5出火.入宅.移徙.祈福.祭祀.安床.开市.嫁娶.探病.开光.解除.拆卸.修造.动土.竖柱.安门.牧养.安葬.修坟.破土.移柩.ϑu;作灶.出火.进人口.开渠.入宅.移徙.祭祀.开光.祈福.求嗣.斋醮.修造.动土.纳财.造仓.作厕.栽种.牧养.会亲友.UϑEw嫁娶.入宅.安床.出行.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.0ϑo斋醮.嫁娶.行丧.动土.作灶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.栽种.进人口.入宅.移徙.安床.开光.出火.拆卸.安门.修造.3ϑa造庙.行丧.安葬.伐木.作灶.造船.嫁娶.纳采.祭祀.解除.出行.修造.动土.开市.上梁.安床.整手足甲.扫舍.求医.治病.起基.定磉.造屋.合脊.PϑEm动土.破土.置产.掘井.祭祀.出行.沐浴.扫舍.安葬.余事勿取.Jϑ7o作灶.动土.破土.嫁娶.出行.纳畜.祭祀.入殓.启攒.安葬.Cϑ)o动土.破土.嫁娶.祭祀.祈福.斋醮.作灶.移徙.入宅. ϑ 祈福.出行.订盟.纳采.嫁娶.裁衣.动土.安床.放水.开市.掘井.交易.立券.栽种.开渠.除服.成服.移柩.破土. i$d ]  O 3^[LWiϑ 3塑绘.开光.解除.订盟.纳采.嫁娶.出火.修造.动土.移徙.入宅.拆卸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养. ϑ 祈福.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生坟.入殓.除服.成服.移柩.破土.安葬.7ϑS+动土.破土.订盟.安床.开池.祈福.斋醮.出行.冠笄.嫁娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除服.成服.移柩.破土.安葬.启攒.4ϐO)Q行丧.安葬.破屋.坏垣.治病.余事勿取.|ϐNS5嫁娶.纳采.订盟.开市.入宅.祭祀.捕捉.畋猎.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.启攒.IϐME]开市.立券.纳财.作灶.纳采.订盟.嫁娶.祭祀.祈福.普渡.开光.安香.出火.移徙.入宅.竖柱.修造.动土.竖柱.上梁.起基.造屋.安门.造庙.造桥.破土.启攒.安葬.gϐLE嫁娶.安门.动土.安葬.出行.沐浴.订盟.纳采.裁衣.竖柱.上梁.移徙.纳畜.牧养. ϐKSO祈福.开市.动土.行丧.安葬.塑绘.冠笄.嫁娶.会亲友.进人口.经络.裁衣.栽种.纳畜.牧养.补垣.塞穴.捕捉.{ϐJS3嫁娶.出行.入宅.开市.安门.祭祀.沐浴.理发.整手足甲.冠笄.解除.入殓.移柩.破土.启攒.安葬.uϐIa开市.动土.破土.安床.开仓.上梁.嫁娶.冠笄.祭祀.沐浴.普渡.出行.纳财.扫舍.纳畜.赴任.ϐHa5动土.破土.掘井.开光.上梁.词讼.嫁娶.普渡.祭祀.祈福.补垣.塞穴.断蚁.筑堤.入殓.除服.成服.安葬.OϐGS[出火.入宅.造屋.安门.安葬.嫁娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲友.开市.纳财.修造.动土.竖柱.上梁.开光.开仓.出货财.纳畜.牧养.开池.破土.启攒.ϐFS]掘井.出行.破土.行丧.安葬.嫁娶.订盟.纳采.作灶.冠笄.裁衣.会亲友.纳畜.牧养.安机械.开市.立券.纳财.安床.>ϐEa+纳采.订盟.经络.行丧.安葬.探病.嫁娶.祭祀.祈福.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.捕捉.畋猎.结网.ϐDSC动土.破土.嫁娶.掘井.安床.订盟.纳采.祭祀.祈福.安香.出火.开市.立券.入宅.挂匾.造桥.启攒.安葬.4ϐC)Q斋醮.开市.沐浴.破屋.坏垣.余事勿取.`ϐBE 开市.交易.入宅.嫁娶.祭祀.普渡.捕捉.解除.结网.畋猎.入殓.破土.安葬.EϐASG开市.立券.置产.作灶.造桥.嫁娶.纳采.订盟.祭祀.祈福.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.定磉.安门.安葬.破土.rϐ@}y嫁娶.栽种.祈福.造桥.安葬.安门.伐木.作梁.祭祀.理发.作灶.沐浴.修饰垣墙.平治道涂.ϐ?-开市.入宅.动土.破土.安葬.作灶.上梁.安床.开仓.祈福.沐浴.理发.会亲友.塑绘.开光.栽种.牧养.嫁娶.经络.补垣.塞穴.?ϐ>m出火.嫁娶.开光.进人口.出行.词讼.开市.入宅.移徙.赴任.解除.祭祀.祈福.求嗣.修造.动土.竖柱.上梁.安床.纳畜.造屋.合脊.起基.入殓.破土.安葬.&ϐ=a{栽种.掘井.动土.安床.破土.置产.嫁娶.纳采.订盟.祭祀.祈福.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上梁.纳畜.入殓.安葬.启攒.%ϐ<ay嫁娶.入宅.斋醮.开光.针灸.掘井.祭祀.出行.作梁.出火.拆卸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.*ϐ;I入宅.上梁.入殓.造屋.探病.作灶.安门.安葬.纳畜.伐木.嫁娶.纳采.订盟.开光.祭祀.出行.理发.动土.安床.放水.开渠.栽种.进人口.:ϐ:o行丧.安葬.出行.作梁.纳畜.伐木.造桥.嫁娶.祭祀.祈福.求嗣.裁衣.冠笄.经络.修造.进人口.安床.动土.竖柱.上梁.移徙.交易.立券.栽种.会亲友.Vϐ9Ew入宅.嫁娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈福.求嗣.开光.普渡.出行.出火.拆卸.修造.动土.进人口.开市.交易.立券.移徙.安床.栽种.上梁.纳畜.破土.移柩.安葬. T< k _ { U'@CO6a)4ϐ8a掘井.理发.作灶.动土.破土.开池.嫁娶.开光.祭祀.祈福.求嗣.安香.出火.解除.伐木.入宅.移徙.安床.开市.交易.立券.栽种.出火.出行.安葬.Pϐ7aQ祈福.纳采.订盟.嫁娶.入宅.安葬.破屋.坏垣.治病.余事勿取.3ϐ6'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.Jϐ57o嫁娶.移徙.入宅.纳采.祭祀.祈福.解除.动土.破土.安葬.,ϐ4'C诸事不宜.沐浴.扫舍.余事勿取.Pϐ3' 余事勿取.祭祀.冠笄.嫁娶.捕捉.结网.畋猎.取渔.余事勿取.ϐ2 !塑绘.出行.冠笄.嫁娶.进人口.裁衣.纳婿.造畜椆栖.交易.立券.牧养.开生坟.入殓.除服.成服.移柩.安葬.启攒.ϐ1S;开市.斋醮.安床.出行.经络.移徙.入宅.治病.会亲友.祭祀.祈福.斋醮.安香.移徙.嫁娶.造屋.起基.ϏkEo动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲友.裁衣.开仓.经络.纳畜.造畜椆栖.教牛马.牧养.WϏja_移徙.开市.入宅.嫁娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿取.ϏiaO造屋.入宅.作灶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.嫁娶.会亲友.放水.掘井.牧养.纳畜.开渠.安碓磑.bϏhS开市.入宅.安床.动土.安葬.祭祀.进人口.纳财.纳畜.牧养.捕捉.余事勿取.AϏgKG嫁娶.开市.栽种.合寿木.祭祀.祈福.斋醮.出行.纳采.订盟.安机械.出火.拆卸.修造.动土.起基.移徙.入宅.造庙.入殓.除服.成服.移柩.破土.安葬.谢土.ZϏfSq祈福.上梁.开仓.掘井.牧养.纳采.订盟.嫁娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲友.安香.出火.拆卸.造屋.起基.安床.作灶.挂匾.安葬.破土.启攒.立碑.入殓.移柩.;Ϗe)_嫁娶.出行.求医.治病.破屋.坏垣.余事勿取.mϏdo}出火.嫁娶.入宅.作灶.破土.上梁.动土.沐浴.理发.捕捉.入殓.移柩.破土.启攒.安葬.6ϏcS)嫁娶.安葬.行丧.破土.修坟.订盟.纳采.祭祀.祈福.开光.安香.出火.立券.安机械.移徙.入宅.竖柱.上梁.会亲友.安床.拆卸.挂匾.牧养.教牛马.OϏbaO开市.动土.破土.嫁娶.修造.安葬.祭祀.修饰垣墙.平治道涂.LϏaaG斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈福.求嗣.开光.解除.扫舍.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.栽种.纳畜.牧养.nϏ`S嫁娶.出行.纳采.入宅.作灶.祭祀.沐浴.塑绘.开光.入学.解除.扫舍.治病.开池.牧养.lϏ_E#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.uϏ^S'开市.入宅.嫁娶.开光.造屋.祭祀.入殓.除服.成服.移柩.破土.启攒.安葬.塞穴.断蚁.结网.)Ϗ]7+出行.安葬.造桥.纳采.订盟.嫁娶.祭祀.沐浴.塑绘.开光.出火.治病.习艺.伐木.造屋.竖柱.上梁.安床.作灶.安碓磑.挂匾.掘井.纳畜.]Ϗ\gc安葬.破土.开市.开仓.出货财.启攒.纳采.订盟.嫁娶.移徙.入宅.出行.祭祀.祈福.斋醮.塑绘.开光.安香.出火.会亲友.解除.入学.竖柱.上梁.拆卸.造屋.起基.栽种.牧养.纳畜.KϏ[YM入宅.开市.掘井.词讼.合寿木.嫁娶.订盟.纳采.祭祀.祈福.斋醮.开光.会亲友.求医.治病.造屋.起基.竖柱.上梁.安门.安碓磑.筑堤.开池.破土.安葬.除服.成服.YϏZSo祭祀.祈福.探病.谢土.造桥.嫁娶.开市.立券.移徙.入宅.安机械.会亲友.经络.安门.安床.挂匾.拆卸.开仓.出货财.开池.栽种.纳畜.牧养.破土.安葬.启攒.移柩.入殓.立碑.4ϏY)Q嫁娶.安葬.破屋.坏垣.解除.余事勿取.&ϏXA嫁娶.斋醮.开市.出火.入宅.移徙.出行.作灶.安门.伐木.祭祀.祈福.解除.整手足甲.安床.沐浴.入殓.移柩.破土.启攒.安葬.谢土.  R q  Z  AJ<"ER{oLϏWo9嫁娶.作灶.出火.置产.嫁娶.入宅.安葬.纳采.订盟.会亲友.入学.祭祀.祈福.求嗣.开光.出行.解除.理发.动土.起基.开市.交易.立券.纳财.造仓.栽种.纳畜.牧养.<ϏVEE动土.破土.治病.开渠.祭祀.嫁娶.畋猎.结网.EϏU}上梁.入宅.修造.动土.破土.祭祀.祈福.斋醮.嫁娶.纳采.订盟.造车器.开光.出行.拆卸.起基.安床.除服.成服.开市.交易.立券.栽种.牧养.入殓.移柩.启攒.QϏTS_开市.入宅.出行.安床.作灶.修造.动土.安机械.祭祀.沐浴.解除.拆卸.治病.作灶.造屋.起基.开池.扫舍.造畜椆栖.开生坟.合寿木.安葬.破土.启攒.移柩.入殓.立碑.,ϏSM移徙.入宅.栽种.动土.破土.作灶.安葬.行丧.伐木.上梁.嫁娶.祭祀.出行.裁衣.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.<ϏR7S上梁.动土.破土.祭祀.入殓.移柩.启攒.安葬.5ϏQ)S嫁娶.安葬.裁衣.作灶.移徙.入宅.纳畜.YϏP)开市.安门.嫁娶.纳采.祭祀.祈福.求医.治病.出行.动土.移徙.入宅.@ϏO'k诸事不宜.祭祀.捕捉.取渔.修饰垣墙.余事勿取.ϏN #订盟.纳采.会亲友.进人口.雕刻.拆卸.修造.动土.起基.开市.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.ϏMEI开市.安门.掘井.作灶.嫁娶.出行.安机械.祭祀.塑绘.开光.治病.经络.安床.结网.塞穴.破土.入殓.BϏ)m嫁娶.入宅.破屋.坏垣.求医.治病.畋猎.余事勿取.^ϏS{开市.交易.嫁娶.安葬.行丧.祭祀.沐浴.捕捉.结网.畋猎.取渔.余事勿取.dϏE开市.伐木.作梁.作灶.安机械.移徙.入宅.出行.祭祀.祈福.斋醮.纳采.订盟.安香.出火.解除.会亲友.修造.动土.拆卸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.uϏK/斋醮.出行.治病.合寿木.祭祀.沐浴.理发.嫁娶.作灶.整手足甲.扫舍.修饰垣墙.平治道涂.qϏY安床.出货财.作灶.动土.破土.开光.求嗣.出行.冠笄.嫁娶.伐木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出火.挂匾.起基.修造.开生坟.合寿木.入殓.除服.成服.移柩.安葬.RϏEo行丧.伐木.作梁.作灶.嫁娶.订盟.纳采.冠笄.会亲友.安机械.造车器.祭祀.出行.纳财.入宅.安香.出火.入学.塑绘.开光.拆卸.起基.修造.动土.牧养.栽种.安门.作厕.<ϏS7斋醮.开渠.上梁.动土.破土.祭祀.交易.纳财.&ώS 祈福.开光.掘井.开市.安葬.嫁娶.冠笄.修造.动土.作灶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.ώ~Sq合帐.上梁.经络.安葬.入殓.祭祀.祈福.求嗣.斋醮.安香.解除.移徙.入宅.会亲友.求医.治病.动土.破土.开生坟.合寿木.Bώ}SC开市.安葬.破土.修坟.掘井.祭祀.作灶.余事勿取.ώ|a-斋醮.祭祀.移徙.入宅.上梁.嫁娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.ώ{Se作灶.理发.造桥.行丧.安葬.嫁娶.安机械.交易.出行.祭祀.祈福.求嗣.斋醮.塑绘.开光.合帐.裁衣.放水.开池.掘井.Bώz7_入宅.嫁娶.移徙.祭祀.沐浴.破屋.坏垣.余事勿取.7ώyK3嫁娶.开市.合寿木.安葬.纳采.订盟.冠笄.祭祀.祈福.斋醮.出行.修造.动土.移徙.入宅.安香.出火.拆卸.造屋.起基.竖柱.上梁.定磉.安门.开池.uώxS'开光.作灶.造屋.架马.开仓.嫁娶.纳采.祭祀.祈福.出行.立券.移徙.入宅.动土.破土.安葬.qώwS开市.入宅.出行.修造.词讼.祭祀.沐浴.理发.整手足甲.修饰垣墙.平治道涂.余事勿取.{ώva%嫁娶.安床.作灶.动土.破土.造船.安机械.祭祀.祈福.求嗣.沐浴.解除.纳采.开市.修造.竖柱.上梁.开柱眼.安碓磑.归岫.补垣.塞穴.拆卸.放水.出火.扫舍.开生坟.合寿木.安葬.谢土.启攒.除服.成服. 95 u ' b_<f}^S 9JώuQS安葬.开生坟.合寿木.行丧.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.修造.进人口.入宅.移徙.动土.安床.纳畜.栽种.纳财.交易.立券.挂匾.造畜椆栖.EώtEW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿取.ώsam安床.祈福.出行.安葬.行丧.开光.嫁娶.合帐.裁衣.冠笄.伐木.上梁.出火.拆卸.移徙.修造.动土.安门.纳财.筑堤.栽种.塞穴.7ώrE9行丧.置产.入宅.安葬.嫁娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈福.求嗣.出行.解除.伐木.出火.入宅.拆卸.修造.动土.上梁.安床.栽种.破土.;ώqEC入宅.出行.掘井.安葬.祭祀.结网.余事勿取.ώpS_作灶.出火.祭祀.嫁娶.入宅.开市.交易.立券.挂匾.开光.解除.拆卸.动土.安床.修造.上梁.置产.栽种.破土.安葬.ώo)k出火.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.EώnKQ移徙.入宅.开仓.出货财.祭祀.破屋.坏垣.余事勿取.^ώmS{嫁娶.开市.安葬.启攒.行丧.畋猎.捕捉.结网.取渔.祭祀.沐浴.余事勿取.Yώl)开市.开光.嫁娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Yώk'安门.嫁娶.纳采.出行.祭祀.祈福.开市.动土.移徙.入宅.破土.安葬.ώj 7会亲友.进人口.修造.动土.起基.移徙.开市.纳畜.入殓.除服.成服.移柩.破土.安葬.修坟.立碑.会亲友.开光.出行.嫁娶.Dώi's诸事不宜.进人口.牧养.置产.塞穴.结网.余事勿取.ώ# 1开光.出行.纳采.嫁娶.伐木.架马.出火.拆卸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除服.成服.移柩.安葬.4ώ")Q破土.安葬.塞穴.断蚁.结网.余事勿取.ώ!''余事勿取.余事勿取.}ώ S7开市.入宅.探病.出火.造屋.嫁娶.祭祀.祈福.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.针灸.理发.会亲友.起基.修造.动土.竖柱.定磉.安床.拆卸.纳畜.牧养.放水.破土.除服.成服.修坟.立碑.PώaQ开市.动土.祭祀.斋醮.安葬.探病.栽种.捕捉.畋猎.余事勿取.cώE嫁娶.出火.移徙.入宅.开市.交易.立券.安机械.会亲友.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上梁.安门.作灶.放水.作厕.开池.栽种.牧养.造畜椆栖.破土.安葬.立碑.;ώEC斋醮.开市.嫁娶.作灶.沐浴.扫舍.余事勿取.Bώ)m行丧.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取."ώE移徙.入宅.造屋.架马.嫁娶.纳采.订盟.斋醮.开光.祭祀.祈福.求医.治病.会亲友.动土.解除.捕捉.纳畜.牧养.入殓.破土.安葬.:ώE?动土.破土.嫁娶.嫁娶.祭祀.祈福.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上梁.作灶.安门.安香.出火.造屋.启攒.安葬.^ώS{祈福.嫁娶.入宅.安床.作灶.祭祀.沐浴.移徙.破土.安葬.扫舍.平治道涂.~ώS9开市.作灶.动土.行丧.安葬.嫁娶.纳采.订盟.会亲友.安机械.结网.冠笄.祭祀.求嗣.进人口.经络.xώS-开市.出行.安床.作灶.安葬.嫁娶.纳采.订盟.祭祀.祈福.治病.造车器.修造.动土.移徙.入宅.>ώ)e嫁娶.安葬.祭祀.解除.断蚁.会亲友.余事勿取."ώas入宅.造屋.造桥.安门.安葬.上梁.嫁娶.冠笄.祭祀.出行.移徙.入宅.作灶.造车器.补垣.塞穴.作厕.破土.启攒.除服.成服.入殓.]ώ7入宅.安门.安葬.祭祀.祈福.求嗣.开光.纳采.订盟.嫁娶.出行.动土.破土.会亲友.开市.交易.立券.习艺.拆卸.起基.安碓磑.放水.开池.造仓.开渠.栽种.谢土.启攒.修坟.立碑.;ώ7Q探病.嫁娶.开市.祭祀.结网.捕捉.余事勿取. \g y  5 3/ i\7ώS+安床.上梁.裁衣.入宅.嫁娶.祭祀.祈福.求嗣.开光.订盟.纳采.解除.动土.起基.进人口.开市.交易.立券.纳财.造仓.开池.栽种.纳畜.破土.安葬.4ώ7A作灶.开市.经络.订盟.纳采.嫁娶.解除.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.入宅.移徙.安床.栽种.纳畜.动土.破土.谢土.安葬.修坟.Bώ)m开光.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取.OώKc开市.立券.造船.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.修造.进人口.入宅.移徙.安床.解除.挂匾.栽种.破土.谢土.入殓.移柩.安葬.SώSc作灶.嫁娶.移徙.入宅.理发.开市.交易.立券.挂匾.祭祀.祈福.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.启攒.除服.成服.立碑.ώ Ss伐木.安葬.安床.祭祀.祈福.纳采.嫁娶.裁衣.理发.出行.修造.动土.进人口.开市.交易.立券.挂匾.移徙.上梁.栽种.纳畜.ώ  嫁娶.栽种.修造.动土.出行.伐木.作梁.安葬.谢土.开光.纳采.裁衣.冠笄.安床.作灶.进人口.造仓.塞穴.4ώ a作灶.安床.开仓.造屋.动土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.解除.出行.出火.入宅.移徙.栽种.纳畜.牧养.动土.破土.入殓.安葬.Wώ a_嫁娶.安葬.入宅.出行.动土.词讼.塞穴.断蚁.结网.畋猎.余事勿取.ώ  安床.开渠.上梁.修造.开市.开光.入宅.移徙.安床.嫁娶.交易.立券.作厕.补垣.塞穴.畋猎.取渔.开生坟.ώEk掘井.安门.嫁娶.纳采.祭祀.祈福.裁衣.合帐.安床.入殓.除服.成服.移柩.破土.启攒.安葬.谢土.立碑.造畜椆栖.%ώE入殓.安葬.入宅.安床.订盟.纳采.嫁娶.进人口.会亲友.交易.立券.动土.除服.谢土.移柩.破土.启攒.赴任.出行.开市.纳财.栽种.:ώQ5造庙.嫁娶.安床.余事勿取.祭祀.余事勿取.ώEW出火.入宅.安葬.伐木.祭祀.塑绘.开光.订盟.纳采.冠笄.裁衣.安机械.拆卸.修造.动土.安床.经络.开市.ύ>''诸事不宜.诸事不宜.fύ=S 嫁娶.开市.交易.入宅.安葬.祭祀.沐浴.破屋.坏垣.求医.治病.解除.余事勿取.ύ<E 开市.动土.掘井.开池.祭祀.祈福.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.取渔.解除.安葬.启攒.谢土.入殓.@ύ;KE入宅.动土.开仓.出货财.造车器.祭祀.祈福.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.合脊.起基.定磉.安门.纳畜.安葬.开生坟.立碑.谢土.斋醮.Oύ:S]嫁娶.安葬.动土.安床.治病.祭祀.作灶.平治道涂.余事勿取.:ύ9a#祈福.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.嫁娶.会亲友.进人口.安床.开市.交易.纳畜.牧养.入殓.除服.成服.移柩.安葬.启攒.~ύ8a+开市.嫁娶.移徙.入宅.掘井.安葬.沐浴.斋醮.解除.求医.治病.会亲友.造畜椆栖.栽种.理发.扫舍.aύ7oe动土.破土.行丧.开光.作梁.安葬.探病.祭祀.解除.教牛马.出行.余事勿取.fύ6a}开光.嫁娶.掘井.安葬.安门.探病.祭祀.祈福.求嗣.斋醮.冠笄.作灶.纳财.交易.nύ5S祈福.动土.破土.安葬.入殓.纳采.嫁娶.出行.开市.立券.纳畜.牧养.出火.移徙.入宅.4ύ4)Q嫁娶.安葬.祭祀.捕捉.解除.余事勿取./ύ377出火.嫁娶.开市.祭祀.祈福.求嗣.斋醮.纳采.订盟.开光.竖柱.上梁.开仓.出货财.造屋.起基.定磉.安门.诸事不宜.破土.入殓.启攒.谢土.Jύ2SS祭祀.嫁娶.入宅.作灶.安葬.沐浴.捕捉.畋猎.结网.取渔._ύ1E 祈福.斋醮.开市.安葬.祭祀.沐浴.解除.求医.治病.破屋.坏垣.余事勿取.uύ0E5嫁娶.开市.纳财.出火.纳采.祭祀.祈福.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.gύ/S 移徙.入宅.嫁娶.出行.安床.祭祀.祈福.求嗣.斋醮.沐浴.纳畜.入殓.破土.安葬. bD q B 5 " i5W \prKύ.K]安床.入宅.安碓磑.栽种.祭祀.作灶.平治道涂.余事勿取.ύ-ae祈福.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.嫁娶.开市.出行.会亲友.安床.结网.除服.成服.启攒.安葬.移柩.Hύ,o1纳采.出行.修坟.安葬.开市.立券.作灶.嫁娶.祭祀.祈福.求嗣.斋醮.开光.出火.移徙.入宅.竖柱.上梁.会亲友.造屋.起基.治病.治病.安门.造车器.掘井.开池.Aύ+EO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿取.2ύ*a移徙.入宅.作灶.理发.开光.安门.祭祀.出行.修造.动土.合帐.造畜椆栖.安床.移徙.入殓.移柩.破土.启攒.安葬.开生坟.合寿木.补垣.塞穴.ύ)E 作灶.安葬.祭祀.入殓.安香.出火.纳采.订盟.嫁娶.开市.立券.交易.挂匾.开光.出行.解除.安床.栽种.置产.拆卸.修造.动土.Bύ()m嫁娶.入宅.祭祀.修门.取渔.纳财.纳畜.余事勿取.'ύ''5纳采.问名.订盟.嫁娶.入宅.开仓.出火.动土.破土.纳畜.伐木.开市.交易.立券.挂匾.祭祀.开光.祈福.求嗣.安床.解除.修造.安葬.Iύ&){祈福.安葬.沐浴.塞穴.畋猎.结网.取渔.扫舍.余事勿取.Qύ%) 嫁娶.开市.祭祀.沐浴.解除.破屋.坏垣.求医.治病.余事勿取.ύ$)k动土.破土.祭祀.解除.入殓.移柩.启攒.安葬.整手足甲.捕捉.畋猎.取渔.除服.成服.扫舍.谢土.斋醮.ύ#E 安床.嫁娶.作灶.入宅.祭祀.解除.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.谢土.沐浴.扫舍.捕捉.取渔.结网.畋猎.理发.Iύ"赴任.祈福.求嗣.开光.塑绘.斋醮.订盟.纳采.嫁娶.拆卸.安床.入宅.安香.移柩.修坟.安葬.谢土.栽种.解除.冠笄.裁衣.移徙.修造.动土.竖柱.放水.启攒.立碑.Xύ!So动土.作灶.入宅.开光.安床.祭祀.嫁娶.纳婿.除服.成服.入殓.移柩.3ό[E1作灶.出行.入宅.安葬.塑绘.开光.订盟.纳采.裁衣.合帐.冠笄.安机械.会亲友.纳财.开市.立券.交易.安床.竖柱.上梁.结网.栽种.解除.经络.,όZ'C诸事不宜.扫舍.塞穴.余事勿取.tόYa栽种.动土.安葬.掘井.修坟.探病.祭祀.会亲友.立券.交易.裁衣.合帐.嫁娶.冠笄.进人口.3όXS#祭祀.嫁娶.出行.上梁.掘井.裁衣.经络.伐木.开柱眼.拆卸.修造.动土.上梁.合脊.合寿木.入殓.除服.成服.移柩.破土.安葬.启攒.修坟.立碑.4όWS%纳采.动土.开市.交易.安门.开光.祈福.求嗣.出行.解除.伐木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除服.成服.移柩.谢土.纳畜.牧养.TόVEu纳财.开市.安葬.破土.理发.冠笄.嫁娶.进人口.栽种.捕捉.针灸.όUE{祈福.嫁娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出火.拆卸.起基.修造.动土.上梁.移徙.造船.开市.交易.立券.纳财.jόTS塑绘.开光.造桥.除服.成服.嫁娶.冠笄.祭祀.出行.会亲友.修造.动土.入殓.破土.;όSEC嫁娶.移徙.开市.入宅.破屋.坏垣.余事勿取.gόRS 纳采.开光.安床.嫁娶.开市.祈福.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~όQ=O纳畜.理发.合寿木.嫁娶.造车器.纳采.订盟.祭祀.祈福.安机械.移徙.入宅.开市.立券.破土.安葬._όPE 开市.造屋.治病.作灶.嫁娶.冠笄.会亲友.安机械.纳财.交易.立券.置产.jόO7-移徙.入宅.栽种.纳财.开市.交易.立券.开光.针灸.会亲友.理发.安床.造仓.结网.JόNEa嫁娶.安葬.行丧.安门.祭祀.沐浴.解除.扫舍.塞穴.牧养.bόMau嫁娶.动土.掘井.起基.定磉.破土.祭祀.会亲友.出行.立券.交易.冠笄.纳财.cόLE嫁娶.祈福.出火.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.όKE{开市.交易.合帐.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.破土.出火.安门.安床.上梁.立碑.移柩. ?] 7 U z 4 i ouuxiEYPmόJE%入宅.造屋.竖柱.安葬.纳财.交易.立券.栽种.捕捉.结网.取渔.进人口.教牛马.理发.όIYm嫁娶.定磉.合寿木.安葬.行丧.祭祀.祈福.求嗣.斋醮.沐浴.开光.理发.经络.解除.治病.治病.立碑.栽种.牧养.掘井.开池.cόH7嫁娶.开光.作灶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;όG)_开光.嫁娶.破屋.坏垣.求医.治病.余事勿取.&όF}_开市.交易.作灶.纳财.上梁.安床.造屋.造船.嫁娶.开光.祭祀.祈福.求嗣.出行.出火.入宅.移徙.解除.栽种.伐木.破土.谢土.安葬.όEE动土.伐木.安葬.行丧.嫁娶.祭祀.开光.祈福.求嗣.出行.出火.进人口.入宅.移徙.安床.拆卸.修造.安门.挂匾.纳财.扫舍.~όD开仓.出货财.造屋.作灶.开市.交易.立券.栽种.祭祀.祈福.嫁娶.冠笄.修饰垣墙.置产.平治道涂.όC'动土.破土.安葬.行丧.赴任.出行.嫁娶.入宅.移徙.谢土.词讼.纳财.开市.立券.交易.开光.安床.上梁.造屋.修造.起基.kόBE!嫁娶.作灶.掘井.安葬.塞穴.整手足甲.解除.捕捉.畋猎.结网.余事勿取.诸事不宜.όAEy祈福.动土.移徙.入宅.祭祀.祈福.求嗣.斋醮.嫁娶.冠笄.出行.开市.交易.会亲友.教牛马.除服.成服.启攒.安葬.移柩.[ό@Su祭祀.祈福.移徙.嫁娶.入宅.裁衣.合帐.入殓.除服.成服.会亲友.纳财.ό?EQ出行.嫁娶.入宅.动土.祭祀.祈福.求嗣.酬神.裁衣.安床.立券.交易.入殓.除服.成服.移柩.谢土.启攒.Eό>EU安葬.上梁.入宅.作灶.祭祀.沐浴.开光.塑绘.祈福.求嗣.订盟.纳采.冠笄.裁衣.嫁娶.动土.除服.成服.移柩.破土.启攒.出行.安碓磑.放水.开市.立券.交易.&ό=S 伐木.作灶.安葬.取渔.入宅.塑绘.开光.祈福.求嗣.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.Iϋt'}余事勿取.祭祀.结网.入殓.除服.成服.移柩.安葬.破土.&ϋsE安床.栽种.治病.作灶.祭祀.冠笄.嫁娶.拆卸.修造.动土.起基.上梁.造屋.入宅.开市.开池.塞穴.入殓.除服.成服.移柩.安葬.破土._ϋr7入宅.开市.安葬.祭祀.沐浴.求医.治病.扫舍.破屋.坏垣.解除.余事勿取.ϋqS]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.嫁娶.会亲友.进人口.牧养.捕捉.入殓.移柩.安葬.启攒.Eϋpo+置产.造屋.合脊.开光.探病.安门.作灶.祈福.求嗣.斋醮.纳采.嫁娶.伐木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除服.成服.移柩.安葬.破土.谢土.AϋoEO嫁娶.祈福.掘井.安葬.祭祀.平治道涂.余事勿取.\ϋnE开市.动土.安葬.破土.会亲友.求嗣.理发.冠笄.结网.捕捉.开光.理发.uϋmS'开光.嫁娶.作灶.掘井.纳畜.祭祀.祈福.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.jϋlS祭祀.移徙.入宅.动土.破土.纳采.会亲友.竖柱.上梁.立券.入殓.移柩.安葬.启攒.nϋkS嫁娶.动土.开光.造屋.破土.祭祀.祈福.求嗣.斋醮.入殓.除服.成服.移柩.安葬.启攒.qϋjS移徙.入宅.出火.安门.安葬.纳采.嫁娶.祭祀.祈福.出行.开市.会亲友.动土.破土.启攒.cϋiE嫁娶.开市.安葬.破土.纳采.祭祀.祈福.出行.会亲友.修造.动土.移徙.入宅.CϋhSE嫁娶.安门.移徙.入宅.安葬.塞穴.结网.取渔.畋猎.ϋgKQ安床.作灶.造船.会亲友.纳采.订盟.祭祀.祈福.安香.出火.修造.出行.开市.移徙.入宅.动土.安葬.破土.Qϋf) 嫁娶.安葬.祭祀.沐浴.解除.理发.扫舍.破屋.坏垣.余事勿取.gϋe7'开市.入宅.斋醮.纳采.嫁娶.祭祀.祈福.出行.修造.动土.移徙.入宅.安葬.破土.PϋdS_经络.探病.造屋.作灶.动土.嫁娶.祭祀.冠笄.修饰垣墙.置产. ~;7  + B XV /$.@~HϋcE]祭祀.祈福.安葬.安门.作灶.解除.平治道涂.余事勿取.pϋbS嫁娶.开市.动土.作灶.安葬.会亲友.冠笄.安床.会亲友.安机械.祭祀.祈福.求嗣.经络.7ϋaS+移徙.入宅.出火.作灶.掘井.祭祀.祈福.求嗣.开光.嫁娶.出行.解除.伐木.拆卸.进人口.安床.动土.起基.上梁.栽种.纳畜.破土.谢土.启攒.安葬. ϋ`}'入宅.出行.移徙.祭祀.嫁娶.动土.破土.作灶.开光.解除.伐木.竖柱.上梁.交易.立券.纳畜.入殓.移柩.安葬.|ϋ_} 栽种.开光.出行.针灸.嫁娶.入宅.动土.破土.祭祀.祈福.求嗣.纳畜.入殓.启攒.谢土.除服.成服.ϋ^{I入宅.安葬.伐木.作梁.纳畜.造畜椆栖.作灶.嫁娶.祭祀.开光.祈福.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲友.{ϋ]%a嫁娶.词讼.行丧.安葬.牧养.伐木.作梁.开市.纳畜.造畜椆栖.祭祀.沐浴.理发.作灶.结网.栽种._ϋ\)%嫁娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除服.成服.余事勿取. ϋ[u3开市.嫁娶.安床.会亲友.入宅.作灶.上梁.祭祀.斋醮.沐浴.开生坟.除服.成服.移柩.入殓.破土.安葬.合寿木.LϋZSU祈福.嫁娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出火.塑绘.裁衣.会亲友.入学.拆卸.扫舍.造仓.挂匾.掘井.开池.结网.栽种.纳畜.破土.修坟.立碑.安葬.入殓.4ϋY7C嫁娶.开市.安葬.破屋.坏垣.余事勿取.ϋE{造屋.开市.动土.破土.嫁娶.祭祀.沐浴.裁衣.出行.理发.移徙.捕捉.畋猎.放水.入宅.除服.成服.启攒.安葬.移柩.入殓.7ϋ)W嫁娶.安葬.祭祀.安碓磑.结网.余事勿取.sϋa移徙.入宅.造庙.作灶.治病.安葬.祭祀.冠笄.嫁娶.会亲友.进人口.裁衣.结网.平治道涂.OϋEi入宅.开光.开市.动土.嫁娶.订盟.纳采.祭祀.祈福.求嗣.会亲友.解除.出行.入学.纳财.开市.交易.立券.习艺.经络.安床.开仓.出货财.纳畜.安葬.启攒.修坟.入殓.|ϋo探病.祭祀.出行.上梁.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲友.解除.求医.治病.入学.安床.安门.安香.出火.拆卸.扫舍.入宅.挂匾.开生坟.合寿木.破土.修坟.启攒.入殓.Hϋ7k破土.动土.安葬.祭祀.解除.教牛马.会亲友.余事勿取.ϋ Sk开光.嫁娶.开市.动土.破土.交易.立券.纳财.安床.裁衣.造畜椆栖.安葬.谢土.启攒.除服.成服.修坟.立碑.移柩.入殓.cϋ au造庙.嫁娶.出行.动土.安葬.行丧.订盟.纳采.会亲友.祭祀.斋醮.沐浴.塑绘.出火.开光.竖柱.上梁.开市.交易.立券.作梁.开柱眼.伐木.架马.安门.安床.拆卸.牧养.造畜椆栖.掘井.{ϋ EA开市.安床.安葬.修坟.嫁娶.纳采.订盟.问名.祭祀.冠笄.裁衣.会亲友.进人口.纳财.捕捉.作灶.eϋ a{造庙.入宅.修造.安葬.行丧.嫁娶.祭祀.沐浴.补垣.塞穴.断蚁.解除.余事勿取. ϋ SW祈福.嫁娶.安床.入宅.造船.沐浴.开仓.出货财.开市.交易.立券.纳财.栽种.纳畜.牧养.畋猎.入殓.破土.安葬.;ϋ7Q斋醮.嫁娶.开市.祭祀.破屋.坏垣.余事勿取.%ϋ}]纳采.订盟.嫁娶.上梁.开市.斋醮.造屋.安门.沐浴.捕捉.畋猎.理发.整手足甲.入殓.除服.成服.破土.安葬.谢土.立碑.修坟.启攒.ϋE开市.出行.安葬.行丧.嫁娶.订盟.纳采.会亲友.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出火.挂匾.拆卸.置产.RϋuA开光.嫁娶.开仓.出货财.造船.安葬.探病.平治道涂.余事勿取.'ϋ5'挂匾.入宅.上梁.祈福.词讼.作梁.作灶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.嫁娶.栽种.入殓.移柩.安葬.?ϋs作灶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.嫁娶.开光.解除.出火.拆卸.修造.进人口.入宅.移徙.安床.栽种.入殓.修坟.动土.除服.成服. _&K ; V P D+ZqWN_yϋo嫁娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲友.解除.余事勿取.7ϋ q入宅.置产.嫁娶.动土.栽种.开市.开光.动土.破土.祭祀.祈福.求嗣.沐浴.问名.交易.纳财.入殓.移柩.安葬.修坟.立碑.谢土.造畜椆栖.教牛马..ϋS嫁娶.合帐.入宅.行丧.安葬.纳采.订盟.祭祀.祈福.求嗣.斋醮.沐浴.进人口.会亲友.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.QϊaS嫁娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.捕捉.畋猎.nϊ~S嫁娶.入宅.作灶.纳采.订盟.祭祀.斋醮.入殓.破土.启攒.安葬.修坟.立碑.除服.成服.sϊ}S#祈福.造庙.祭祀.安床.谢土.嫁娶.纳采.订盟.开光.安香.出火.纳财.开市.交易.立券.裁衣.造屋.起基.修造.动土.安门.移徙.入宅.栽种.牧养.畋猎.掘井.开池.安葬.破土.入殓.除服.成服.立碑.Bϊ|7_开市.动土.破土.祭祀.破屋.坏垣.解除.余事勿取.4ϊ{o 伐木.开市.交易.上梁.作灶.安门.造屋.嫁娶.纳采.订盟.入宅.移徙.安床.祭祀.祈福.开光.出行.解除.出火.拆卸.动土.纳畜.谢土.安葬.破土.#ϊzC开市.行丧.栽种.出行.出货财.安葬.置产.词讼.治病.嫁娶.祭祀.开光.伐木.出火.拆卸.入宅.移徙.修造.动土.上梁.安床.纳畜.]ϊy}O移徙.入宅.掘井.造庙.栽种.针灸.治病.开池.解除.平治道涂.余事勿取.PϊxaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cϊwS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KϊvSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SϊuaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;Oa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)NE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XME}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.LS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.Ka5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.WJa_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0IS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rHo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]GSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UFoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TEKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖. 0b Z 3 a V!+DiD';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)C U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vB[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.A会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.@oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7?S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4>)Q移徙.入宅.破屋.坏垣.治病.余事勿取.=Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]<E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.];Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q:a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.S9Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.8S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.7aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.p6S开光.掘井.安葬.谢土.修坟.嫁娶.冠笄.安床.纳采.会亲友.塞穴.捕捉.置产.造畜椆栖.L5SU移徙.入宅.安门.作梁.安葬.祭祀.祈福.求嗣.斋醮.沐浴.冠笄.出行.理发.拆卸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫舍.除服.成服.移柩.启攒.立碑.谢土.p4S安床.安门.破土.修坟.安葬.捕捉.畋猎.会亲友.解除.入殓.除服.成服.移柩.余事勿取.Z3Sq嫁娶.开市.入宅.出火.移徙.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.会亲友.解除.入学.纳财.交易.立券.经络.起基.动土.定磉.开池.栽种.纳畜.牧养.破土.入殓.立碑.安葬.L2Ec造屋.造船.动土.破土.嫁娶.纳采.订盟.祭祀.冠笄.裁衣.伐木.作梁.架马.定磉.开柱眼.作灶.移徙.安床.畋猎.结网.开池.作厕.除服.成服.启攒.入殓.移柩.安葬.41)Q嫁娶.安葬.破屋.坏垣.祭祀.余事勿取.IjE]开市.造庙.动土.破土.嫁娶.订盟.纳采.祭祀.祈福.塑绘.开光.移徙.安床.伐木.作梁.捕捉.畋猎.结网.求医.治病.解除.安葬.除服.成服.移柩.入殓.立碑.谢土.HiSM嫁娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈福.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上梁.安门.安香.出火.教牛马.会亲友.破土.JhE_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出火.修饰垣墙.平治道涂.会亲友.出行.开池.作厕. L5 < Y ( l  =w1fszUL^gS{嫁娶.开市.祈福.斋醮.安葬.塑绘.会亲友.安机械.塞穴.结网.裁衣.经络._fam开市.纳采.造庙.安床.开渠.安葬.嫁娶.造车器.出行.会亲友.移徙.入宅.修造.动土.雕刻.开光.安香.出火.理发.会亲友.造屋.合脊.起基.归岫.安门.拆卸.扫舍.栽种.造畜椆栖.IeSQ开市.动土.破土.行丧.安葬.祭祀.沐浴.出行.余事勿取.ndS嫁娶.入宅.安床.掘井.开光.祭祀.理发.置产.塞穴.除服.成服.移柩.入殓.破土.安葬.;cS3移徙.入宅.出火.入殓.安葬.开市.纳财.出行.祭祀.祈福.求嗣.斋醮.问名.入学.起基.定磉.置产.开渠.掘井.拆卸.栽种.纳畜.牧养.动土.破土.启攒._boa嫁娶.纳采.订盟.安床.动土.破土.安葬.祭祀.沐浴.捕捉.畋猎.结网.扫舍.taS%嫁娶.移徙.出火.开市.入宅.订盟.纳采.会亲友.祭祀.祈福.修造.动土.安机械.破土.安葬.{`S3祭祀.嫁娶.入宅.修造.动土.祭祀.扫舍.破土.安葬.除服.成服.启攒.移柩.入殓.立碑.余事勿取.I_){嫁娶.安葬.祭祀.解除.破屋.坏垣.求医.治病.余事勿取.^am破土.动土.安门.作灶.开市.交易.嫁娶.纳采.订盟.祭祀.开光.出行.解除.伐木.出火.入宅.移徙.拆卸.修造.栽种.安葬.入殓.E]EU置产.掘井.词讼.栽种.嫁娶.纳采.订盟.祭祀.斋醮.开光.安香.出火.出行.出火.拆卸.动土.祈福.进人口.纳财.交易.立券.移徙.安床.修造.安葬.除服.成服.Q\ %造庙.谢土.作灶.作梁.伐木.安葬.行丧.修坟.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.裁衣.会亲友.拆卸.进人口.安香.经络.出货财.修饰垣墙.平治道涂.[祈福.谢土.安葬.上梁.作灶.开市.嫁娶.出行.入宅.动土.祭祀.塑绘.理发.会亲友.牧养.开池.造畜椆栖.畋猎.结网.OZ7w作灶.经络.安床.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.进人口.开市.立券.挂匾.入宅.移徙.安门.栽种.动土.求医.治病.会亲友.起基.修造.造屋.安葬.VYSk开市.动土.破土.嫁娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿取.fXS 置产.造船.开光.掘井.作灶.合帐.裁衣.嫁娶.安床.入殓.移柩.破土.造畜椆栖.?Wm伐木.上梁.修造.入殓.理发.会亲友.入宅.安门.安葬.作灶.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆卸.破土.eVa{嫁娶.入宅.开市.安床.破土.修坟.沐浴.扫舍.捕捉.畋猎.解除.塞穴.余事勿取. UgC嫁娶.进人口.入宅.移徙.出火.出行.祭祀.祈福.求嗣.开光.解除.伐木.拆卸.修造.栽种.纳畜.安葬.修坟.立碑.cTY}上梁.开仓.出货财.造屋.造船.纳采.订盟.嫁娶.祭祀.祈福.雕刻.移徙.开市.入宅.出行.动土.会亲友.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;S)_嫁娶.安葬.破屋.坏垣.求医.治病.余事勿取.,R'C诸事不宜.破屋.坏垣.余事勿取.]QSw开光.嫁娶.掘井.伐木.作梁.祭祀.祈福.求嗣.斋醮.造庙.出火.安机械.会亲友.开市.交易.立券.纳财.习艺.经络.求医.治病.开池.作厕.畋猎.结网.栽种.牧养.安葬.破土.启攒.nPS嫁娶.祭祀.入宅.造屋.移徙.捕捉.结网.入殓.除服.成服.移柩.破土.安葬.启攒.立碑.\OE嫁娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治道涂.余事勿取.{NS3移徙.入宅.出行.祈福.嫁娶.沐浴.理发.冠笄.安床.开市.立券.会亲友.交易.纳财.结网.教牛马.ME 嫁娶.动土.破土.修坟.出行.造车器.造畜椆栖.解除.冠笄.裁衣.作梁.雕刻.会亲友.移徙.入宅.安机械.造畜椆栖.开市.扫舍.ESG造庙.造船.动土.破土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.置产.求医.治病.开市.交易.立券.会亲友.移徙.竖柱.上梁.造屋.合脊.安门.放水.捕捉.纳畜. 4% & F L Sw9H}65\ gA开光.嫁娶.会亲友.栽种.针灸.安葬.冠笄.祭祀.沐浴.作灶.理发.整手足甲.扫舍.补垣.塞穴.入殓.破土.启攒.g'开市.开仓.出货财.安床.安门.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.求医.治病.出火.移徙.入宅.PEm动土.破土.开市.安葬.祭祀.作灶.纳财.捕捉.畋猎.余事勿取. YO上梁.开光.造屋.架马.合寿木.造车器.嫁娶.订盟.纳采.会亲友.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.jS嫁娶.开市.入宅.祈福.安葬.订盟.纳采.会亲友.交易.立券.纳财.栽种.纳畜.牧养.B)m开市.嫁娶.祭祀.沐浴.解除.破屋.坏垣.余事勿取.EKO开市.破土.掘井.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.安香.出火.造庙.移徙.出行.入宅.造庙.起基.竖柱.上梁.安床.纳畜.捕捉.纳婿.安葬.BSC开市.交易.祭祀.入宅.安葬.捕捉.畋猎.余事勿取.3~)O嫁娶.开市.祭祀.平治道涂.余事勿取.H}SM入宅.上梁.斋醮.出火.谢土.纳采.订盟.开市.交易.立券.会亲友.纳畜.牧养.问名.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.启攒.入殓.除服.成服.|o]造庙.嫁娶.掘井.栽种.造桥.作灶.动土.祭祀.开光.出行.解除.伐木.作梁.出火.拆卸.入宅.移徙.安床.修造.造畜椆栖.扫舍.{1出货财.开仓.动土.破土.安葬.行丧.伐木.开渠.栽种.祭祀.造车器.出行.修造.上梁.造屋.安门.安床.造畜椆栖.教牛马.z}C开市.出行.栽种.置产.词讼.安门.掘井.开光.嫁娶.裁衣.冠笄.合帐.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.VySi安门.安床.裁衣.入宅.安葬.祭祀.祈福.求嗣.斋醮.开光.出行.嫁娶.求医.治病.动土.破土.入学.起基.扫舍.竖柱.上梁.开仓.出货财.置产.栽种.牧养.开生坟.谢土.立碑.[xSu嫁娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲友.纳财.理发.捕捉.vwa探病.纳畜.伐木.起基.作梁.造屋.嫁娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈福.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆卸.修造.动土.栽种.安葬.破土.启攒.除服.成服.入殓.立碑.voO祈福.斋醮.纳采.订盟.嫁娶.入宅.安葬.祭祀.求嗣.冠笄.进人口.会亲友.安门.安床.经络.纳财.牧养.畋猎.放水.割蜜.PuS_嫁娶.入宅.上梁.出行.安葬.祭祀.沐浴.破屋.坏垣.余事勿取.t}Q入宅.移徙.掘井.理发.伐木.交易.开市.作灶.嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.修造.动土.上梁.安床.纳畜.入殓.破土.esa{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.启攒.安葬.除服.成服.余事勿取.qra嫁娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治道涂.造畜椆栖.余事勿取.Eq'q开市.入宅.出行.嫁娶.修坟.祈福.动土.入宅.安门.谢土.上梁.纳采.订盟.会亲友.沐浴.理发.裁衣.冠笄.安床.除服.成服.启攒.移柩.安葬.会亲友.开生坟.p}A嫁娶.安葬.行丧.词讼.造桥.作灶.破土.动土.祭祀.开光.出行.解除.理发.伐木.出火.拆卸.上梁.合脊.安床.造畜椆栖.oEm造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上梁.合脊.安床.移徙.入宅.开市.栽种.作厕.cnS动土.作灶.行丧.安葬.修坟.祭祀.祈福.求嗣.出行.沐浴.交易.扫舍.教牛马.!m))开光.安床.祭祀.出行.解除.冠笄.嫁娶.伐木.架马.开柱眼.修造.动土.移徙.入宅.开生坟.合寿木.入殓.移柩.破土.安葬.修坟.xla嫁娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲友.捕捉.畋猎.启攒.除服.成服.移柩.Jko7开光.动土.破土.开市.修造.入宅.安门.祭祀.嫁娶.捕捉. F f Q C 3(KJ-I7j=A行丧.安葬.合寿木.开光.求嗣.雕刻.嫁娶.订盟.纳采.出火.拆卸.修造.动土.起基.上梁.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.4ia嫁娶.造庙.造桥.造船.作灶.安葬.订盟.纳采.祭祀.祈福.安香.出火.修造.动土.上梁.安门.起基.竖柱.上梁.定磉.开池.移徙.入宅.立券.破土.%"5'探病.余事勿取.余事勿取.m!o}祭祀.嫁娶.安床.开市.入宅.探病.上梁.沐浴.捕捉.入殓.除服.成服.破土.启攒.安葬.% S纳采.订盟.架马.词讼.开渠.嫁娶.造车器.安机械.祭祀.祈福.开光.安香.出火.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.caw斋醮.嫁娶.移徙.出行.上梁.入宅.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.\E嫁娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出火.上梁.移徙.ua针灸.伐木.作梁.造庙.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.?g)嫁娶.入宅.修造.动土.会亲友.破土.祭祀.出行.uo 嫁娶.开市.祭祀.祈福.斋醮.纳采.修坟.冠笄.沐浴.出行.修造.动土.移徙.入宅.破土.安葬.o-开市.祈福.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.取渔.会亲友.入学.移柩.启攒.除服.成服.LYQ嫁娶.开市.造屋.作梁.合寿木.祭祀.冠笄.捕捉.余事勿取.7}安葬.纳畜.出行.行丧.伐木.栽种.造庙.造桥.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.解除.进人口.入宅.移徙.出火.安床.开市.交易.立券.挂匾.SEq开市.开仓.安门.安葬.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.上梁.合脊.放水.掘井.破土.移柩.谢土.除服.成服.;)_移徙.入宅.破屋.坏垣.求医.治病.余事勿取. 5出火.入宅.移徙.祈福.祭祀.安床.开市.嫁娶.探病.开光.解除.拆卸.修造.动土.竖柱.安门.牧养.安葬.修坟.破土.移柩.u;作灶.出火.进人口.开渠.入宅.移徙.祭祀.开光.祈福.求嗣.斋醮.修造.动土.纳财.造仓.作厕.栽种.牧养.会亲友.UEw嫁娶.入宅.安床.出行.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.0o斋醮.嫁娶.行丧.动土.作灶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.栽种.进人口.入宅.移徙.安床.开光.出火.拆卸.安门.修造.3a造庙.行丧.安葬.伐木.作灶.造船.嫁娶.纳采.祭祀.解除.出行.修造.动土.开市.上梁.安床.整手足甲.扫舍.求医.治病.起基.定磉.造屋.合脊.PEm动土.破土.置产.掘井.祭祀.出行.沐浴.扫舍.安葬.余事勿取.%S祈福.开光.开市.入宅.动土.嫁娶.冠笄.安机械.解除.纳畜.牧养.沐浴.伐木.架马.作梁.安门.扫舍.合寿木.安葬.启攒.立碑.修坟.ea{开市.入宅.嫁娶.动土.破土.安葬.祭祀.修坟.除服.成服.启攒.移柩.余事勿取.  开仓.出货财.伐木.纳畜.开市.上梁.造屋.破土.启攒.栽种.嫁娶.祭祀.理发.进人口.作灶.移柩.冠笄.会亲友.# 5嫁娶.破土.进人口.出行.入宅.移徙.出火.纳畜.词讼.安葬.开市.交易.立券.纳财.挂匾.栽种.祭祀.祈福.开光.拆卸.动土.安床.a S开市.掘井.开渠.造桥.造船.嫁娶.纳采.订盟.祭祀.开光.出行.理发.作梁.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.移徙.拆卸.挂匾.栽种.纳畜.破土.安葬.入殓.除服.成服.7 S+动土.破土.订盟.安床.开池.祈福.斋醮.出行.冠笄.嫁娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除服.成服.移柩.破土.安葬.启攒.4 )Q行丧.安葬.破屋.坏垣.治病.余事勿取.|S5嫁娶.纳采.订盟.开市.入宅.祭祀.捕捉.畋猎.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.启攒. ?= . R 7 $}Da z?IE]开市.立券.纳财.作灶.纳采.订盟.嫁娶.祭祀.祈福.普渡.开光.安香.出火.移徙.入宅.竖柱.修造.动土.竖柱.上梁.起基.造屋.安门.造庙.造桥.破土.启攒.安葬.gE嫁娶.安门.动土.安葬.出行.沐浴.订盟.纳采.裁衣.竖柱.上梁.移徙.纳畜.牧养. SO祈福.开市.动土.行丧.安葬.塑绘.冠笄.嫁娶.会亲友.进人口.经络.裁衣.栽种.纳畜.牧养.补垣.塞穴.捕捉.{?S3嫁娶.出行.入宅.开市.安门.祭祀.沐浴.理发.整手足甲.冠笄.解除.入殓.移柩.破土.启攒.安葬.u>a开市.动土.破土.安床.开仓.上梁.嫁娶.冠笄.祭祀.沐浴.普渡.出行.纳财.扫舍.纳畜.赴任.=a5动土.破土.掘井.开光.上梁.词讼.嫁娶.普渡.祭祀.祈福.补垣.塞穴.断蚁.筑堤.入殓.除服.成服.安葬.O<S[出火.入宅.造屋.安门.安葬.嫁娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲友.开市.纳财.修造.动土.竖柱.上梁.开光.开仓.出货财.纳畜.牧养.开池.破土.启攒.;S]掘井.出行.破土.行丧.安葬.嫁娶.订盟.纳采.作灶.冠笄.裁衣.会亲友.纳畜.牧养.安机械.开市.立券.纳财.安床.>:a+纳采.订盟.经络.行丧.安葬.探病.嫁娶.祭祀.祈福.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.捕捉.畋猎.结网.9SC动土.破土.嫁娶.掘井.安床.订盟.纳采.祭祀.祈福.安香.出火.开市.立券.入宅.挂匾.造桥.启攒.安葬.48)Q斋醮.开市.沐浴.破屋.坏垣.余事勿取.`7E 开市.交易.入宅.嫁娶.祭祀.普渡.捕捉.解除.结网.畋猎.入殓.破土.安葬.E6SG开市.立券.置产.作灶.造桥.嫁娶.纳采.订盟.祭祀.祈福.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.定磉.安门.安葬.破土.r5}y嫁娶.栽种.祈福.造桥.安葬.安门.伐木.作梁.祭祀.理发.作灶.沐浴.修饰垣墙.平治道涂.4-开市.入宅.动土.破土.安葬.作灶.上梁.安床.开仓.祈福.沐浴.理发.会亲友.塑绘.开光.栽种.牧养.嫁娶.经络.补垣.塞穴.?3m出火.嫁娶.开光.进人口.出行.词讼.开市.入宅.移徙.赴任.解除.祭祀.祈福.求嗣.修造.动土.竖柱.上梁.安床.纳畜.造屋.合脊.起基.入殓.破土.安葬.&2a{栽种.掘井.动土.安床.破土.置产.嫁娶.纳采.订盟.祭祀.祈福.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上梁.纳畜.入殓.安葬.启攒.%1ay嫁娶.入宅.斋醮.开光.针灸.掘井.祭祀.出行.作梁.出火.拆卸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.*0I入宅.上梁.入殓.造屋.探病.作灶.安门.安葬.纳畜.伐木.嫁娶.纳采.订盟.开光.祭祀.出行.理发.动土.安床.放水.开渠.栽种.进人口.:/o行丧.安葬.出行.作梁.纳畜.伐木.造桥.嫁娶.祭祀.祈福.求嗣.裁衣.冠笄.经络.修造.进人口.安床.动土.竖柱.上梁.移徙.交易.立券.栽种.会亲友.V.Ew入宅.嫁娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈福.求嗣.开光.普渡.出行.出火.拆卸.修造.动土.进人口.开市.交易.立券.移徙.安床.栽种.上梁.纳畜.破土.移柩.安葬.4-a掘井.理发.作灶.动土.破土.开池.嫁娶.开光.祭祀.祈福.求嗣.安香.出火.解除.伐木.入宅.移徙.安床.开市.交易.立券.栽种.出火.出行.安葬.P,aQ祈福.纳采.订盟.嫁娶.入宅.安葬.破屋.坏垣.治病.余事勿取.f+E嫁娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.捕捉.除服.成服.余事勿取.S*Sc斋醮.开市.开仓.作灶.造船.嫁娶.祭祀.祈福.求嗣.出火.出行.开光.解除.拆卸.修造.进人口.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除服.成服.z)k嫁娶.词讼.治病.置产.作梁.祈福.安葬.栽种.伐木.安门.修饰垣墙.平治道涂.祭祀.沐浴.作灶. u5" v = ^ wI )be qDuI( 伐木.谢土.行丧.祭祀.作灶.动土.破土.安葬.祈福.纳采.订盟.开光.出行.解除.安香.出火.拆卸.入宅.移徙.修造.上梁.安床.栽种.纳畜.会亲友.安机械.经络.#'Q嫁娶.出行.进人口.作灶.入宅.移徙.栽种.赴任.祭祀.解除.拆卸.修造.动土.起基.上梁.安床.安门.开渠.开池.入殓.破土.启攒.&S;开市.斋醮.安床.出行.经络.移徙.入宅.治病.会亲友.祭祀.祈福.斋醮.安香.移徙.嫁娶.造屋.起基.%Eo动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲友.裁衣.开仓.经络.纳畜.造畜椆栖.教牛马.牧养.W$a_移徙.开市.入宅.嫁娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿取.#aO造屋.入宅.作灶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.嫁娶.会亲友.放水.掘井.牧养.纳畜.开渠.安碓磑.b"S开市.入宅.安床.动土.安葬.祭祀.进人口.纳财.纳畜.牧养.捕捉.余事勿取.A!KG嫁娶.开市.栽种.合寿木.祭祀.祈福.斋醮.出行.纳采.订盟.安机械.出火.拆卸.修造.动土.起基.移徙.入宅.造庙.入殓.除服.成服.移柩.破土.安葬.谢土.Z[Sq祈福.上梁.开仓.掘井.牧养.纳采.订盟.嫁娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲友.安香.出火.拆卸.造屋.起基.安床.作灶.挂匾.安葬.破土.启攒.立碑.入殓.移柩.;Z)_嫁娶.出行.求医.治病.破屋.坏垣.余事勿取.mYo}出火.嫁娶.入宅.作灶.破土.上梁.动土.沐浴.理发.捕捉.入殓.移柩.破土.启攒.安葬.6XS)嫁娶.安葬.行丧.破土.修坟.订盟.纳采.祭祀.祈福.开光.安香.出火.立券.安机械.移徙.入宅.竖柱.上梁.会亲友.安床.拆卸.挂匾.牧养.教牛马.OWaO开市.动土.破土.嫁娶.修造.安葬.祭祀.修饰垣墙.平治道涂.LVaG斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈福.求嗣.开光.解除.扫舍.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.栽种.纳畜.牧养.nUS嫁娶.出行.纳采.入宅.作灶.祭祀.沐浴.塑绘.开光.入学.解除.扫舍.治病.开池.牧养.lTE#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.uSS'开市.入宅.嫁娶.开光.造屋.祭祀.入殓.除服.成服.移柩.破土.启攒.安葬.塞穴.断蚁.结网.)R7+出行.安葬.造桥.纳采.订盟.嫁娶.祭祀.沐浴.塑绘.开光.出火.治病.习艺.伐木.造屋.竖柱.上梁.安床.作灶.安碓磑.挂匾.掘井.纳畜.]Qgc安葬.破土.开市.开仓.出货财.启攒.纳采.订盟.嫁娶.移徙.入宅.出行.祭祀.祈福.斋醮.塑绘.开光.安香.出火.会亲友.解除.入学.竖柱.上梁.拆卸.造屋.起基.栽种.牧养.纳畜.KPYM入宅.开市.掘井.词讼.合寿木.嫁娶.订盟.纳采.祭祀.祈福.斋醮.开光.会亲友.求医.治病.造屋.起基.竖柱.上梁.安门.安碓磑.筑堤.开池.破土.安葬.除服.成服.YOSo祭祀.祈福.探病.谢土.造桥.嫁娶.开市.立券.移徙.入宅.安机械.会亲友.经络.安门.安床.挂匾.拆卸.开仓.出货财.开池.栽种.纳畜.牧养.破土.安葬.启攒.移柩.入殓.立碑.4N)Q嫁娶.安葬.破屋.坏垣.解除.余事勿取.&MA嫁娶.斋醮.开市.出火.入宅.移徙.出行.作灶.安门.伐木.祭祀.祈福.解除.整手足甲.安床.沐浴.入殓.移柩.破土.启攒.安葬.谢土.LLo9嫁娶.作灶.出火.置产.嫁娶.入宅.安葬.纳采.订盟.会亲友.入学.祭祀.祈福.求嗣.开光.出行.解除.理发.动土.起基.开市.交易.立券.纳财.造仓.栽种.纳畜.牧养.K/斋醮.出行.治病.合寿木.祭祀.沐浴.理发.嫁娶.作灶.整手足甲.扫舍.修饰垣墙.平治道涂.q=Y安床.出货财.作灶.动土.破土.开光.求嗣.出行.冠笄.嫁娶.伐木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出火.挂匾.起基.修造.开生坟.合寿木.入殓.除服.成服.移柩.安葬.RvEo行丧.伐木.作梁.作灶.嫁娶.订盟.纳采.冠笄.会亲友.安机械.造车器.祭祀.出行.纳财.入宅.安香.出火.入学.塑绘.开光.拆卸.起基.修造.动土.牧养.栽种.安门.作厕. )e嫁娶.安葬.祭祀.解除.断蚁.会亲友.余事勿取." as入宅.造屋.造桥.安门.安葬.上梁.嫁娶.冠笄.祭祀.出行.移徙.入宅.作灶.造车器.补垣.塞穴.作厕.破土.启攒.除服.成服.入殓.] 7入宅.安门.安葬.祭祀.祈福.求嗣.开光.纳采.订盟.嫁娶.出行.动土.破土.会亲友.开市.交易.立券.习艺.拆卸.起基.安碓磑.放水.开池.造仓.开渠.栽种.谢土.启攒.修坟.立碑. P  < " }  uwa3Z>;7Q探病.嫁娶.开市.祭祀.结网.捕捉.余事勿取.7S+安床.上梁.裁衣.入宅.嫁娶.祭祀.祈福.求嗣.开光.订盟.纳采.解除.动土.起基.进人口.开市.交易.立券.纳财.造仓.开池.栽种.纳畜.破土.安葬.47A作灶.开市.经络.订盟.纳采.嫁娶.解除.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.入宅.移徙.安床.栽种.纳畜.动土.破土.谢土.安葬.修坟.B)m开光.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取.OKc开市.立券.造船.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.修造.进人口.入宅.移徙.安床.解除.挂匾.栽种.破土.谢土.入殓.移柩.安葬.SSc作灶.嫁娶.移徙.入宅.理发.开市.交易.立券.挂匾.祭祀.祈福.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.启攒.除服.成服.立碑.Ss伐木.安葬.安床.祭祀.祈福.纳采.嫁娶.裁衣.理发.出行.修造.动土.进人口.开市.交易.立券.挂匾.移徙.上梁.栽种.纳畜. 嫁娶.栽种.修造.动土.出行.伐木.作梁.安葬.谢土.开光.纳采.裁衣.冠笄.安床.作灶.进人口.造仓.塞穴.4a作灶.安床.开仓.造屋.动土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.解除.出行.出火.入宅.移徙.栽种.纳畜.牧养.动土.破土.入殓.安葬.Wοa_嫁娶.安葬.入宅.出行.动土.词讼.塞穴.断蚁.结网.畋猎.余事勿取.ο~ 安床.开渠.上梁.修造.开市.开光.入宅.移徙.安床.嫁娶.交易.立券.作厕.补垣.塞穴.畋猎.取渔.开生坟.Iο}}%入宅.移徙.修造.安门.伐木.入殓.安葬.造屋.祭祀.祈福.求嗣.开光.出行.开市.交易.立券.栽种.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.启攒.修坟.ο| ;祭祀.伐木.架马.安床.修造.动土.安葬.修坟.破土.解除.出行.纳采.冠笄.竖柱.上梁.移徙.作灶.进人口.入宅.纳畜.牧养.ο{Sm嫁娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈福.开光.动土.安床.出行.栽种.纳畜.牧养.竖柱.上梁.解除.破土.:οz)[开市.立券.纳采.订盟.嫁娶.造车器.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.挂匾.入宅.移徙.安床.栽种.入殓.破土.安葬.除服.成服.:οy'_诸事不宜.破屋.坏垣.沐浴.解除.余事勿取.fοxS 嫁娶.开市.交易.入宅.安葬.祭祀.沐浴.破屋.坏垣.求医.治病.解除.余事勿取.οwE 开市.动土.掘井.开池.祭祀.祈福.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.取渔.解除.安葬.启攒.谢土.入殓.@οvKE入宅.动土.开仓.出货财.造车器.祭祀.祈福.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.合脊.起基.定磉.安门.纳畜.安葬.开生坟.立碑.谢土.斋醮.OοuS]嫁娶.安葬.动土.安床.治病.祭祀.作灶.平治道涂.余事勿取.:ο.a#祈福.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.嫁娶.会亲友.进人口.安床.开市.交易.纳畜.牧养.入殓.除服.成服.移柩.安葬.启攒.~ο-a+开市.嫁娶.移徙.入宅.掘井.安葬.沐浴.斋醮.解除.求医.治病.会亲友.造畜椆栖.栽种.理发.扫舍.aο,oe动土.破土.行丧.开光.作梁.安葬.探病.祭祀.解除.教牛马.出行.余事勿取.fο+a}开光.嫁娶.掘井.安葬.安门.探病.祭祀.祈福.求嗣.斋醮.冠笄.作灶.纳财.交易.nο*S祈福.动土.破土.安葬.入殓.纳采.嫁娶.出行.开市.立券.纳畜.牧养.出火.移徙.入宅.4ο))Q嫁娶.安葬.祭祀.捕捉.解除.余事勿取./ο(77出火.嫁娶.开市.祭祀.祈福.求嗣.斋醮.纳采.订盟.开光.竖柱.上梁.开仓.出货财.造屋.起基.定磉.安门.诸事不宜.破土.入殓.启攒.谢土.Jο'SS祭祀.嫁娶.入宅.作灶.安葬.沐浴.捕捉.畋猎.结网.取渔. !1s q z  =!Tv({4"f_ο&E 祈福.斋醮.开市.安葬.祭祀.沐浴.解除.求医.治病.破屋.坏垣.余事勿取.uο%E5嫁娶.开市.纳财.出火.纳采.祭祀.祈福.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.gο$S 移徙.入宅.嫁娶.出行.安床.祭祀.祈福.求嗣.斋醮.沐浴.纳畜.入殓.破土.安葬.Kο#K]安床.入宅.安碓磑.栽种.祭祀.作灶.平治道涂.余事勿取.ο"ae祈福.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.嫁娶.开市.出行.会亲友.安床.结网.除服.成服.启攒.安葬.移柩.Hο!o1纳采.出行.修坟.安葬.开市.立券.作灶.嫁娶.祭祀.祈福.求嗣.斋醮.开光.出火.移徙.入宅.竖柱.上梁.会亲友.造屋.起基.治病.治病.安门.造车器.掘井.开池.Aο EO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿取.2οa移徙.入宅.作灶.理发.开光.安门.祭祀.出行.修造.动土.合帐.造畜椆栖.安床.移徙.入殓.移柩.破土.启攒.安葬.开生坟.合寿木.补垣.塞穴.οE 作灶.安葬.祭祀.入殓.安香.出火.纳采.订盟.嫁娶.开市.立券.交易.挂匾.开光.出行.解除.安床.栽种.置产.拆卸.修造.动土.Bο)m嫁娶.入宅.祭祀.修门.取渔.纳财.纳畜.余事勿取.'ο'5纳采.问名.订盟.嫁娶.入宅.开仓.出火.动土.破土.纳畜.伐木.开市.交易.立券.挂匾.祭祀.开光.祈福.求嗣.安床.解除.修造.安葬.Iο){祈福.安葬.沐浴.塞穴.畋猎.结网.取渔.扫舍.余事勿取.Qο) 嫁娶.开市.祭祀.沐浴.解除.破屋.坏垣.求医.治病.余事勿取.ο)k动土.破土.祭祀.解除.入殓.移柩.启攒.安葬.整手足甲.捕捉.畋猎.取渔.除服.成服.扫舍.谢土.斋醮.fοS 斋醮.开光.嫁娶.入宅.上梁.沐浴.祭祀.解除.安葬.破土.谢土.移柩.余事勿取.]ο7嫁娶.安床.治病.祭祀.作灶.畋猎.结网.修饰垣墙.平治道涂.余事勿取.ο}祈福.出火.置产.动土.破土.安葬.修造.上梁.置产.入宅.开光.出行.交易.塞穴.嫁娶.理发.开市.安床. οo;修坟.造桥.作灶.出行.安葬.造屋.入宅.祭祀.祈福.求嗣.开光.纳采.订盟.解除.栽种.纳畜.牧养.扫舍.进人口.LοEe开光.伐木.安葬.破土.祭祀.出行.教牛马.扫舍.余事勿取.tοa栽种.动土.安葬.掘井.修坟.探病.祭祀.会亲友.立券.交易.裁衣.合帐.嫁娶.冠笄.进人口.3οS#祭祀.嫁娶.出行.上梁.掘井.裁衣.经络.伐木.开柱眼.拆卸.修造.动土.上梁.合脊.合寿木.入殓.除服.成服.移柩.破土.安葬.启攒.修坟.立碑.4οS%纳采.动土.开市.交易.安门.开光.祈福.求嗣.出行.解除.伐木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除服.成服.移柩.谢土.纳畜.牧养.TξKEu纳财.开市.安葬.破土.理发.冠笄.嫁娶.进人口.栽种.捕捉.针灸.ξJE{祈福.嫁娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出火.拆卸.起基.修造.动土.上梁.移徙.造船.开市.交易.立券.纳财.jξIS塑绘.开光.造桥.除服.成服.嫁娶.冠笄.祭祀.出行.会亲友.修造.动土.入殓.破土.;ξHEC嫁娶.移徙.开市.入宅.破屋.坏垣.余事勿取.gξGS 纳采.开光.安床.嫁娶.开市.祈福.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~ξF=O纳畜.理发.合寿木.嫁娶.造车器.纳采.订盟.祭祀.祈福.安机械.移徙.入宅.开市.立券.破土.安葬._ξEE 开市.造屋.治病.作灶.嫁娶.冠笄.会亲友.安机械.纳财.交易.立券.置产.jξD7-移徙.入宅.栽种.纳财.开市.交易.立券.开光.针灸.会亲友.理发.安床.造仓.结网.JξCEa嫁娶.安葬.行丧.安门.祭祀.沐浴.解除.扫舍.塞穴.牧养.bξBau嫁娶.动土.掘井.起基.定磉.破土.祭祀.会亲友.出行.立券.交易.冠笄.纳财.cξAE嫁娶.祈福.出火.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土. p>j  0 ( dE8u!pξ@E{开市.交易.合帐.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.破土.出火.安门.安床.上梁.立碑.移柩.mξ?E%入宅.造屋.竖柱.安葬.纳财.交易.立券.栽种.捕捉.结网.取渔.进人口.教牛马.理发.ξ>Ym嫁娶.定磉.合寿木.安葬.行丧.祭祀.祈福.求嗣.斋醮.沐浴.开光.理发.经络.解除.治病.治病.立碑.栽种.牧养.掘井.开池.cξ=7嫁娶.开光.作灶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;ξ<)_开光.嫁娶.破屋.坏垣.求医.治病.余事勿取.&ξ;}_开市.交易.作灶.纳财.上梁.安床.造屋.造船.嫁娶.开光.祭祀.祈福.求嗣.出行.出火.入宅.移徙.解除.栽种.伐木.破土.谢土.安葬.ξ:E动土.伐木.安葬.行丧.嫁娶.祭祀.开光.祈福.求嗣.出行.出火.进人口.入宅.移徙.安床.拆卸.修造.安门.挂匾.纳财.扫舍.~ξ9开仓.出货财.造屋.作灶.开市.交易.立券.栽种.祭祀.祈福.嫁娶.冠笄.修饰垣墙.置产.平治道涂.ξ8'动土.破土.安葬.行丧.赴任.出行.嫁娶.入宅.移徙.谢土.词讼.纳财.开市.立券.交易.开光.安床.上梁.造屋.修造.起基.kξ7E!嫁娶.作灶.掘井.安葬.塞穴.整手足甲.解除.捕捉.畋猎.结网.余事勿取.诸事不宜.ξ6Ey祈福.动土.移徙.入宅.祭祀.祈福.求嗣.斋醮.嫁娶.冠笄.出行.开市.交易.会亲友.教牛马.除服.成服.启攒.安葬.移柩.ξ5}C嫁娶.祭祀.开光.出行.出火.移徙.入宅.安门.安床.伐木.拆卸.修造.动土.上梁.立券.交易.栽种.纳畜.牧养.入殓.安葬.|ξ4EC合帐.开市.安葬.入殓.嫁娶.祭祀.开光.祈福.求嗣.出火.入宅.移徙.安床.拆卸.动土.破土.谢土.lξ3K置产.伐木.纳畜.造畜椆栖.安葬.破土.作梁.作灶.开生坟.理发.冠笄.嫁娶.进人口.*ξ2 W嫁娶.行丧.架马.作梁.理发.牧养.安葬.纳畜.伐木.开市.立券.交易.挂匾.祭祀.祈福.开光.入宅.移徙.安床.拆卸.动土.上梁.进人口. ξ1Ee开光.作灶.斋醮.安葬.嫁娶.祭祀.出行.冠笄.立券.交易.进人口.开市.移徙.修造.动土.安床.入殓.移柩.破土.&ξ0E安床.栽种.治病.作灶.祭祀.冠笄.嫁娶.拆卸.修造.动土.起基.上梁.造屋.入宅.开市.开池.塞穴.入殓.除服.成服.移柩.安葬.破土._ξ/7入宅.开市.安葬.祭祀.沐浴.求医.治病.扫舍.破屋.坏垣.解除.余事勿取.ξ.S]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.嫁娶.会亲友.进人口.牧养.捕捉.入殓.移柩.安葬.启攒.Eξ-o+置产.造屋.合脊.开光.探病.安门.作灶.祈福.求嗣.斋醮.纳采.嫁娶.伐木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除服.成服.移柩.安葬.破土.谢土.AνeEO嫁娶.祈福.掘井.安葬.祭祀.平治道涂.余事勿取.\νdE开市.动土.安葬.破土.会亲友.求嗣.理发.冠笄.结网.捕捉.开光.理发.uνcS'开光.嫁娶.作灶.掘井.纳畜.祭祀.祈福.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.jνbS祭祀.移徙.入宅.动土.破土.纳采.会亲友.竖柱.上梁.立券.入殓.移柩.安葬.启攒.nνaS嫁娶.动土.开光.造屋.破土.祭祀.祈福.求嗣.斋醮.入殓.除服.成服.移柩.安葬.启攒.qν`S移徙.入宅.出火.安门.安葬.纳采.嫁娶.祭祀.祈福.出行.开市.会亲友.动土.破土.启攒.cν_E嫁娶.开市.安葬.破土.纳采.祭祀.祈福.出行.会亲友.修造.动土.移徙.入宅.Cν^SE嫁娶.安门.移徙.入宅.安葬.塞穴.结网.取渔.畋猎.ν]KQ安床.作灶.造船.会亲友.纳采.订盟.祭祀.祈福.安香.出火.修造.出行.开市.移徙.入宅.动土.安葬.破土.Qν\) 嫁娶.安葬.祭祀.沐浴.解除.理发.扫舍.破屋.坏垣.余事勿取.gν[7'开市.入宅.斋醮.纳采.嫁娶.祭祀.祈福.出行.修造.动土.移徙.入宅.安葬.破土. K;7  + B XVFP0bKPνZS_经络.探病.造屋.作灶.动土.嫁娶.祭祀.冠笄.修饰垣墙.置产.HνYE]祭祀.祈福.安葬.安门.作灶.解除.平治道涂.余事勿取.pνXS嫁娶.开市.动土.作灶.安葬.会亲友.冠笄.安床.会亲友.安机械.祭祀.祈福.求嗣.经络.7νWS+移徙.入宅.出火.作灶.掘井.祭祀.祈福.求嗣.开光.嫁娶.出行.解除.伐木.拆卸.进人口.安床.动土.起基.上梁.栽种.纳畜.破土.谢土.启攒.安葬. νV}'入宅.出行.移徙.祭祀.嫁娶.动土.破土.作灶.开光.解除.伐木.竖柱.上梁.交易.立券.纳畜.入殓.移柩.安葬.|νU} 栽种.开光.出行.针灸.嫁娶.入宅.动土.破土.祭祀.祈福.求嗣.纳畜.入殓.启攒.谢土.除服.成服.νT{I入宅.安葬.伐木.作梁.纳畜.造畜椆栖.作灶.嫁娶.祭祀.开光.祈福.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲友.{νS%a嫁娶.词讼.行丧.安葬.牧养.伐木.作梁.开市.纳畜.造畜椆栖.祭祀.沐浴.理发.作灶.结网.栽种._νR)%嫁娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除服.成服.余事勿取. νQu3开市.嫁娶.安床.会亲友.入宅.作灶.上梁.祭祀.斋醮.沐浴.开生坟.除服.成服.移柩.入殓.破土.安葬.合寿木.;νP)_开市.嫁娶.求医.治病.破屋.坏垣.余事勿取.XνOaa开市.作灶.安床.入宅.上梁.裁衣.动土.入殓.嫁娶.移柩.安葬.破土.)νNS开光.造屋.动土.作灶.栽种.造车器.纳采.订盟.祭祀.祈福.求嗣.移徙.出行.开市.出火.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?νM'i诸事不宜.修饰垣墙.平治道涂.祭祀.余事勿取.%νLS入宅.作灶.治病.安葬.移徙.嫁娶.冠笄.纳采.出行.会亲友.上梁.安机械.安床.牧养.畋猎.祭祀.祈福.开光.修造.安门.造屋.起基.OνKEi入宅.开光.开市.动土.嫁娶.订盟.纳采.祭祀.祈福.求嗣.会亲友.解除.出行.入学.纳财.开市.交易.立券.习艺.经络.安床.开仓.出货财.纳畜.安葬.启攒.修坟.入殓.|νJo探病.祭祀.出行.上梁.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲友.解除.求医.治病.入学.安床.安门.安香.出火.拆卸.扫舍.入宅.挂匾.开生坟.合寿木.破土.修坟.启攒.入殓.HνI7k破土.动土.安葬.祭祀.解除.教牛马.会亲友.余事勿取.νSk开光.嫁娶.开市.动土.破土.交易.立券.纳财.安床.裁衣.造畜椆栖.安葬.谢土.启攒.除服.成服.修坟.立碑.移柩.入殓.cνau造庙.嫁娶.出行.动土.安葬.行丧.订盟.纳采.会亲友.祭祀.斋醮.沐浴.塑绘.出火.开光.竖柱.上梁.开市.交易.立券.作梁.开柱眼.伐木.架马.安门.安床.拆卸.牧养.造畜椆栖.掘井.{νEA开市.安床.安葬.修坟.嫁娶.纳采.订盟.问名.祭祀.冠笄.裁衣.会亲友.进人口.纳财.捕捉.作灶.eνa{造庙.入宅.修造.安葬.行丧.嫁娶.祭祀.沐浴.补垣.塞穴.断蚁.解除.余事勿取. μSW祈福.嫁娶.安床.入宅.造船.沐浴.开仓.出货财.开市.交易.立券.纳财.栽种.纳畜.牧养.畋猎.入殓.破土.安葬.;μ~7Q斋醮.嫁娶.开市.祭祀.破屋.坏垣.余事勿取.%μ}}]纳采.订盟.嫁娶.上梁.开市.斋醮.造屋.安门.沐浴.捕捉.畋猎.理发.整手足甲.入殓.除服.成服.破土.安葬.谢土.立碑.修坟.启攒.μ|E开市.出行.安葬.行丧.嫁娶.订盟.纳采.会亲友.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出火.挂匾.拆卸.置产.Rμ{uA开光.嫁娶.开仓.出货财.造船.安葬.探病.平治道涂.余事勿取.'μz5'挂匾.入宅.上梁.祈福.词讼.作梁.作灶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.嫁娶.栽种.入殓.移柩.安葬.?μys作灶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.嫁娶.开光.解除.出火.拆卸.修造.进人口.入宅.移徙.安床.栽种.入殓.修坟.动土.除服.成服. &K ; V P Df[Za'yμxo嫁娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲友.解除.余事勿取.7μw q入宅.置产.嫁娶.动土.栽种.开市.开光.动土.破土.祭祀.祈福.求嗣.沐浴.问名.交易.纳财.入殓.移柩.安葬.修坟.立碑.谢土.造畜椆栖.教牛马..μvS嫁娶.合帐.入宅.行丧.安葬.纳采.订盟.祭祀.祈福.求嗣.斋醮.沐浴.进人口.会亲友.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.QμuaS嫁娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.捕捉.畋猎.nμtS嫁娶.入宅.作灶.纳采.订盟.祭祀.斋醮.入殓.破土.启攒.安葬.修坟.立碑.除服.成服.sμsS#祈福.造庙.祭祀.安床.谢土.嫁娶.纳采.订盟.开光.安香.出火.纳财.开市.交易.立券.裁衣.造屋.起基.修造.动土.安门.移徙.入宅.栽种.牧养.畋猎.掘井.开池.安葬.破土.入殓.除服.成服.立碑.Bμr7_开市.动土.破土.祭祀.破屋.坏垣.解除.余事勿取.4μqo 伐木.开市.交易.上梁.作灶.安门.造屋.嫁娶.纳采.订盟.入宅.移徙.安床.祭祀.祈福.开光.出行.解除.出火.拆卸.动土.纳畜.谢土.安葬.破土.#μpC开市.行丧.栽种.出行.出货财.安葬.置产.词讼.治病.嫁娶.祭祀.开光.伐木.出火.拆卸.入宅.移徙.修造.动土.上梁.安床.纳畜.]μo}O移徙.入宅.掘井.造庙.栽种.针灸.治病.开池.解除.平治道涂.余事勿取.μn}C掘井.祈福.谢土.动土.入宅.上梁.修造.作灶.嫁娶.出行.理发.安床.启攒.安葬.修坟.开市.交易.立券.纳财.开池.牧养.&μmE入宅.安门.祭祀.谢土.沐浴.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.启攒.修坟.立碑.移柩.YμlE嫁娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.针灸.余事勿取.μk 置产.嫁娶.出行.开光.栽种.动土.破土.入宅.治病.安床.裁衣.交易.立券.入殓.移柩.安葬.除服.成服.&μj O嫁娶.栽种.安葬.理发.造庙.作灶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈福.求嗣.动土.)μiE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.XμhE}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.μgS=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.μfa5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.Wμea_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.0?S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.r>o开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]=Sy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.U<oK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.T;Km破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.   K  R ! S(Ai:';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)9 U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v8[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.7会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.6oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.75S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.44)Q移徙.入宅.破屋.坏垣.治病.余事勿取.3Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]2E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]1Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q0a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.S/Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门..S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.-aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.,5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.+伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,*'C诸事不宜.解除.扫舍.余事勿取.)EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:('_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,''C诸事不宜.祭祀.解除.余事勿取.I&E]开市.造庙.动土.破土.嫁娶.订盟.纳采.祭祀.祈福.塑绘.开光.移徙.安床.伐木.作梁.捕捉.畋猎.结网.求医.治病.解除.安葬.除服.成服.移柩.入殓.立碑.谢土.H%SM嫁娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈福.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上梁.安门.安香.出火.教牛马.会亲友.破土.J$E_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出火.修饰垣墙.平治道涂.会亲友.出行.开池.作厕.^#S{嫁娶.开市.祈福.斋醮.安葬.塑绘.会亲友.安机械.塞穴.结网.裁衣.经络._"am开市.纳采.造庙.安床.开渠.安葬.嫁娶.造车器.出行.会亲友.移徙.入宅.修造.动土.雕刻.开光.安香.出火.理发.会亲友.造屋.合脊.起基.归岫.安门.拆卸.扫舍.栽种.造畜椆栖. 5 j 5 U l o?u.`OI!SQ开市.动土.破土.行丧.安葬.祭祀.沐浴.出行.余事勿取.nZS嫁娶.入宅.安床.掘井.开光.祭祀.理发.置产.塞穴.除服.成服.移柩.入殓.破土.安葬.;YS3移徙.入宅.出火.入殓.安葬.开市.纳财.出行.祭祀.祈福.求嗣.斋醮.问名.入学.起基.定磉.置产.开渠.掘井.拆卸.栽种.纳畜.牧养.动土.破土.启攒._Xoa嫁娶.纳采.订盟.安床.动土.破土.安葬.祭祀.沐浴.捕捉.畋猎.结网.扫舍.tWS%嫁娶.移徙.出火.开市.入宅.订盟.纳采.会亲友.祭祀.祈福.修造.动土.安机械.破土.安葬.{VS3祭祀.嫁娶.入宅.修造.动土.祭祀.扫舍.破土.安葬.除服.成服.启攒.移柩.入殓.立碑.余事勿取.IU){嫁娶.安葬.祭祀.解除.破屋.坏垣.求医.治病.余事勿取.Tam破土.动土.安门.作灶.开市.交易.嫁娶.纳采.订盟.祭祀.开光.出行.解除.伐木.出火.入宅.移徙.拆卸.修造.栽种.安葬.入殓.ESEU置产.掘井.词讼.栽种.嫁娶.纳采.订盟.祭祀.斋醮.开光.安香.出火.出行.出火.拆卸.动土.祈福.进人口.纳财.交易.立券.移徙.安床.修造.安葬.除服.成服.QR %造庙.谢土.作灶.作梁.伐木.安葬.行丧.修坟.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.裁衣.会亲友.拆卸.进人口.安香.经络.出货财.修饰垣墙.平治道涂.Q祈福.谢土.安葬.上梁.作灶.开市.嫁娶.出行.入宅.动土.祭祀.塑绘.理发.会亲友.牧养.开池.造畜椆栖.畋猎.结网.OP7w作灶.经络.安床.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.进人口.开市.立券.挂匾.入宅.移徙.安门.栽种.动土.求医.治病.会亲友.起基.修造.造屋.安葬.VOSk开市.动土.破土.嫁娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿取.fNS 置产.造船.开光.掘井.作灶.合帐.裁衣.嫁娶.安床.入殓.移柩.破土.造畜椆栖.?Mm伐木.上梁.修造.入殓.理发.会亲友.入宅.安门.安葬.作灶.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆卸.破土.eLa{嫁娶.入宅.开市.安床.破土.修坟.沐浴.扫舍.捕捉.畋猎.解除.塞穴.余事勿取. KgC嫁娶.进人口.入宅.移徙.出火.出行.祭祀.祈福.求嗣.开光.解除.伐木.拆卸.修造.栽种.纳畜.安葬.修坟.立碑.cJY}上梁.开仓.出货财.造屋.造船.纳采.订盟.嫁娶.祭祀.祈福.雕刻.移徙.开市.入宅.出行.动土.会亲友.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;I)_嫁娶.安葬.破屋.坏垣.求医.治病.余事勿取.HQs嫁娶.动土.造船.开池.掘井.出行.修造.入宅.上梁.移徙.安葬.破土.作灶.开市.祭祀.理发.针灸.解除.进人口.整手足甲.G7{栽种.掘井.置产.嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.开市.交易.立券.挂匾.伐木.入宅.移徙.安床.安葬.Fa_祈福.祭祀.伐木.掘井.作灶.谢土.嫁娶.开光.出行.出火.拆卸.修造.动土.入宅.移徙.安床.上梁.开市.交易.立券.栽种. E5u嫁娶.冠笄.出行.祈福.安葬.伐木.入宅.移徙.出火.栽种.动土.上梁.开光.裁衣.安门.会亲友.安床.结网.理发. D)置产.安床.嫁娶.开光.出行.解除.出火.拆卸.修造.进人口.动土.入宅.移徙.栽种.纳畜.掘井.安葬.除服.成服.CE 嫁娶.动土.破土.修坟.出行.造车器.造畜椆栖.解除.冠笄.裁衣.作梁.雕刻.会亲友.移徙.入宅.安机械.造畜椆栖.开市.扫舍.EBSG造庙.造船.动土.破土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.置产.求医.治病.开市.交易.立券.会亲友.移徙.竖柱.上梁.造屋.合脊.安门.放水.捕捉.纳畜. p/ [ }  n  | Db\J) AgA开光.嫁娶.会亲友.栽种.针灸.安葬.冠笄.祭祀.沐浴.作灶.理发.整手足甲.扫舍.补垣.塞穴.入殓.破土.启攒.@g'开市.开仓.出货财.安床.安门.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.求医.治病.出火.移徙.入宅.P?Em动土.破土.开市.安葬.祭祀.作灶.纳财.捕捉.畋猎.余事勿取. >YO上梁.开光.造屋.架马.合寿木.造车器.嫁娶.订盟.纳采.会亲友.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j=S嫁娶.开市.入宅.祈福.安葬.订盟.纳采.会亲友.交易.立券.纳财.栽种.纳畜.牧养.Bw)m开市.嫁娶.祭祀.沐浴.解除.破屋.坏垣.余事勿取.EvKO开市.破土.掘井.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.安香.出火.造庙.移徙.出行.入宅.造庙.起基.竖柱.上梁.安床.纳畜.捕捉.纳婿.安葬.BuSC开市.交易.祭祀.入宅.安葬.捕捉.畋猎.余事勿取.3t)O嫁娶.开市.祭祀.平治道涂.余事勿取.HsSM入宅.上梁.斋醮.出火.谢土.纳采.订盟.开市.交易.立券.会亲友.纳畜.牧养.问名.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.启攒.入殓.除服.成服.ro]造庙.嫁娶.掘井.栽种.造桥.作灶.动土.祭祀.开光.出行.解除.伐木.作梁.出火.拆卸.入宅.移徙.安床.修造.造畜椆栖.扫舍.q1出货财.开仓.动土.破土.安葬.行丧.伐木.开渠.栽种.祭祀.造车器.出行.修造.上梁.造屋.安门.安床.造畜椆栖.教牛马.p}C开市.出行.栽种.置产.词讼.安门.掘井.开光.嫁娶.裁衣.冠笄.合帐.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.VoSi安门.安床.裁衣.入宅.安葬.祭祀.祈福.求嗣.斋醮.开光.出行.嫁娶.求医.治病.动土.破土.入学.起基.扫舍.竖柱.上梁.开仓.出货财.置产.栽种.牧养.开生坟.谢土.立碑.[nSu嫁娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲友.纳财.理发.捕捉.vma探病.纳畜.伐木.起基.作梁.造屋.嫁娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈福.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆卸.修造.动土.栽种.安葬.破土.启攒.除服.成服.入殓.立碑.loO祈福.斋醮.纳采.订盟.嫁娶.入宅.安葬.祭祀.求嗣.冠笄.进人口.会亲友.安门.安床.经络.纳财.牧养.畋猎.放水.割蜜.PkS_嫁娶.入宅.上梁.出行.安葬.祭祀.沐浴.破屋.坏垣.余事勿取.j}Q入宅.移徙.掘井.理发.伐木.交易.开市.作灶.嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.修造.动土.上梁.安床.纳畜.入殓.破土.eia{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.启攒.安葬.除服.成服.余事勿取.qha嫁娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治道涂.造畜椆栖.余事勿取.Eg'q开市.入宅.出行.嫁娶.修坟.祈福.动土.入宅.安门.谢土.上梁.纳采.订盟.会亲友.沐浴.理发.裁衣.冠笄.安床.除服.成服.启攒.移柩.安葬.会亲友.开生坟.f}A嫁娶.安葬.行丧.词讼.造桥.作灶.破土.动土.祭祀.开光.出行.解除.理发.伐木.出火.拆卸.上梁.合脊.安床.造畜椆栖.ea]伐木.行丧.破土.嫁娶.安葬.开渠.祭祀.祈福.求嗣.开光.出行.解除.上梁.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.d)开光.栽种.嫁娶.祭祀.祈福.求嗣.动土.安床.扫舍.入殓.移柩.破土.启攒.安葬.作灶.整手足甲.补垣.除服.成服.c)安床.安葬.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.进人口.开市.交易.立券.挂匾.纳财.入宅.移徙.栽种.破土.谢土.ua+纳采.订盟.经络.行丧.安葬.探病.嫁娶.祭祀.祈福.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.捕捉.畋猎.结网./SC动土.破土.嫁娶.掘井.安床.订盟.纳采.祭祀.祈福.安香.出火.开市.立券.入宅.挂匾.造桥.启攒.安葬.4.)Q斋醮.开市.沐浴.破屋.坏垣.余事勿取.`-E 开市.交易.入宅.嫁娶.祭祀.普渡.捕捉.解除.结网.畋猎.入殓.破土.安葬.E,SG开市.立券.置产.作灶.造桥.嫁娶.纳采.订盟.祭祀.祈福.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.定磉.安门.安葬.破土.r+}y嫁娶.栽种.祈福.造桥.安葬.安门.伐木.作梁.祭祀.理发.作灶.沐浴.修饰垣墙.平治道涂.*-开市.入宅.动土.破土.安葬.作灶.上梁.安床.开仓.祈福.沐浴.理发.会亲友.塑绘.开光.栽种.牧养.嫁娶.经络.补垣.塞穴.?)m出火.嫁娶.开光.进人口.出行.词讼.开市.入宅.移徙.赴任.解除.祭祀.祈福.求嗣.修造.动土.竖柱.上梁.安床.纳畜.造屋.合脊.起基.入殓.破土.安葬.&(a{栽种.掘井.动土.安床.破土.置产.嫁娶.纳采.订盟.祭祀.祈福.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上梁.纳畜.入殓.安葬.启攒.%'ay嫁娶.入宅.斋醮.开光.针灸.掘井.祭祀.出行.作梁.出火.拆卸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.*&I入宅.上梁.入殓.造屋.探病.作灶.安门.安葬.纳畜.伐木.嫁娶.纳采.订盟.开光.祭祀.出行.理发.动土.安床.放水.开渠.栽种.进人口.:%o行丧.安葬.出行.作梁.纳畜.伐木.造桥.嫁娶.祭祀.祈福.求嗣.裁衣.冠笄.经络.修造.进人口.安床.动土.竖柱.上梁.移徙.交易.立券.栽种.会亲友.V$Ew入宅.嫁娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈福.求嗣.开光.普渡.出行.出火.拆卸.修造.动土.进人口.开市.交易.立券.移徙.安床.栽种.上梁.纳畜.破土.移柩.安葬.4#a掘井.理发.作灶.动土.破土.开池.嫁娶.开光.祭祀.祈福.求嗣.安香.出火.解除.伐木.入宅.移徙.安床.开市.交易.立券.栽种.出火.出行.安葬.P"aQ祈福.纳采.订盟.嫁娶.入宅.安葬.破屋.坏垣.治病.余事勿取.f!E嫁娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.捕捉.除服.成服.余事勿取.S Sc斋醮.开市.开仓.作灶.造船.嫁娶.祭祀.祈福.求嗣.出火.出行.开光.解除.拆卸.修造.进人口.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除服.成服.zk嫁娶.词讼.治病.置产.作梁.祈福.安葬.栽种.伐木.安门.修饰垣墙.平治道涂.祭祀.沐浴.作灶.I 伐木.谢土.行丧.祭祀.作灶.动土.破土.安葬.祈福.纳采.订盟.开光.出行.解除.安香.出火.拆卸.入宅.移徙.修造.上梁.安床.栽种.纳畜.会亲友.安机械.经络. 5" v = ^ wI )b#xj#Q嫁娶.出行.进人口.作灶.入宅.移徙.栽种.赴任.祭祀.解除.拆卸.修造.动土.起基.上梁.安床.安门.开渠.开池.入殓.破土.启攒.}_+安床.动土.安葬.开生坟.合寿木.祭祀.裁衣.安门.纳财.扫舍.出行.进人口.作灶.纳畜.造畜椆栖.}开光.出行.修造.上梁.入宅.安门.作灶.裁衣.祭祀.动土.筑堤.开池.会亲友.塞穴.入殓.移柩.破土.安葬.%}]造屋.入殓.安葬.伐木.入宅.移徙.置产.纳畜.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.安床.栽种.移柩.进人口.会亲友.除服.成服.}I动土.破土.理发.出行.入宅.分居.安香.出火.祭祀.开光.解除.移徙.裁衣.开市.立券.祈福.求嗣.进人口.交易.纳财.纳畜.E{栽种.作灶.针灸.出行.嫁娶.出火.拆卸.祭祀.祈福.开光.伐木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.AKG嫁娶.开市.栽种.合寿木.祭祀.祈福.斋醮.出行.纳采.订盟.安机械.出火.拆卸.修造.动土.起基.移徙.入宅.造庙.入殓.除服.成服.移柩.破土.安葬.谢土.ZSq祈福.上梁.开仓.掘井.牧养.纳采.订盟.嫁娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲友.安香.出火.拆卸.造屋.起基.安床.作灶.挂匾.安葬.破土.启攒.立碑.入殓.移柩.;)_嫁娶.出行.求医.治病.破屋.坏垣.余事勿取.mo}出火.嫁娶.入宅.作灶.破土.上梁.动土.沐浴.理发.捕捉.入殓.移柩.破土.启攒.安葬.6S)嫁娶.安葬.行丧.破土.修坟.订盟.纳采.祭祀.祈福.开光.安香.出火.立券.安机械.移徙.入宅.竖柱.上梁.会亲友.安床.拆卸.挂匾.牧养.教牛马.OaO开市.动土.破土.嫁娶.修造.安葬.祭祀.修饰垣墙.平治道涂.LaG斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈福.求嗣.开光.解除.扫舍.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.栽种.纳畜.牧养.nKS嫁娶.出行.纳采.入宅.作灶.祭祀.沐浴.塑绘.开光.入学.解除.扫舍.治病.开池.牧养.lJE#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.uIS'开市.入宅.嫁娶.开光.造屋.祭祀.入殓.除服.成服.移柩.破土.启攒.安葬.塞穴.断蚁.结网.)H7+出行.安葬.造桥.纳采.订盟.嫁娶.祭祀.沐浴.塑绘.开光.出火.治病.习艺.伐木.造屋.竖柱.上梁.安床.作灶.安碓磑.挂匾.掘井.纳畜.]Ggc安葬.破土.开市.开仓.出货财.启攒.纳采.订盟.嫁娶.移徙.入宅.出行.祭祀.祈福.斋醮.塑绘.开光.安香.出火.会亲友.解除.入学.竖柱.上梁.拆卸.造屋.起基.栽种.牧养.纳畜.KFYM入宅.开市.掘井.词讼.合寿木.嫁娶.订盟.纳采.祭祀.祈福.斋醮.开光.会亲友.求医.治病.造屋.起基.竖柱.上梁.安门.安碓磑.筑堤.开池.破土.安葬.除服.成服.YESo祭祀.祈福.探病.谢土.造桥.嫁娶.开市.立券.移徙.入宅.安机械.会亲友.经络.安门.安床.挂匾.拆卸.开仓.出货财.开池.栽种.纳畜.牧养.破土.安葬.启攒.移柩.入殓.立碑.4D)Q嫁娶.安葬.破屋.坏垣.解除.余事勿取.&CA嫁娶.斋醮.开市.出火.入宅.移徙.出行.作灶.安门.伐木.祭祀.祈福.解除.整手足甲.安床.沐浴.入殓.移柩.破土.启攒.安葬.谢土.LBo9嫁娶.作灶.出火.置产.嫁娶.入宅.安葬.纳采.订盟.会亲友.入学.祭祀.祈福.求嗣.开光.出行.解除.理发.动土.起基.开市.交易.立券.纳财.造仓.栽种.纳畜.牧养.M移徙.入宅.栽种.动土.破土.作灶.安葬.行丧.伐木.上梁.嫁娶.祭祀.出行.裁衣.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|=a'开光.治病.嫁娶.掘井.破土.安葬.经络.祭祀.沐浴.补垣.塞穴.除服.成服.移柩.入殓.启攒.立碑.B<o%移徙.栽种.出行.行丧.破土.安葬.词讼.嫁娶.纳采.订盟.祭祀.祈福.求嗣.纳采.裁衣.冠笄.开光.安床.作梁.修造.动土.作灶.起基.上梁.造屋.纳畜.牧养.;开渠.造船.安床.安葬.破土.出行.修坟.掘井.开市.开生坟.祭祀.冠笄.作灶.交易.纳财.栽种.结网.纳畜.牧养.进人口.V:Kq掘井.伐木.纳畜.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.入殓.破土.谢土.安葬.E9SG入宅.移徙.作灶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.嫁娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.栽种.破土.启攒.安葬.立碑.,8'C诸事不宜.破屋.坏垣.余事勿取.n7 a嫁娶.开市.出火.作灶.置产.斋醮.入宅.移徙.安门.解除.祭祀.理发.入殓.安葬.破土.6oQ嫁娶.栽种.行丧.理发.修坟.行丧.作灶.祭祀.祈福.求嗣.开光.伐木.出火.拆卸.入宅.安床.修造.动土.上梁.挂匾.纳畜.,5'C诸事不宜.祭祀.解除.余事勿取.4}5作灶.动土.上梁.栽种.入宅.移徙.修造.祈福.嫁娶.开光.解除.安床.牧养.理发.开市.入殓.启攒.移柩.安葬.扫舍."3 G嫁娶.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.栽种.纳畜.入殓.启攒.除服.成服.R2Eo行丧.伐木.作梁.作灶.嫁娶.订盟.纳采.冠笄.会亲友.安机械.造车器.祭祀.出行.纳财.入宅.安香.出火.入学.塑绘.开光.拆卸.起基.修造.动土.牧养.栽种.安门.作厕.<1S7斋醮.开渠.上梁.动土.破土.祭祀.交易.纳财.&0S 祈福.开光.掘井.开市.安葬.嫁娶.冠笄.修造.动土.作灶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船./Sq合帐.上梁.经络.安葬.入殓.祭祀.祈福.求嗣.斋醮.安香.解除.移徙.入宅.会亲友.求医.治病.动土.破土.开生坟.合寿木.B.SC开市.安葬.破土.修坟.掘井.祭祀.作灶.余事勿取.-a-斋醮.祭祀.移徙.入宅.上梁.嫁娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.fSe作灶.理发.造桥.行丧.安葬.嫁娶.安机械.交易.出行.祭祀.祈福.求嗣.斋醮.塑绘.开光.合帐.裁衣.放水.开池.掘井.Be7_入宅.嫁娶.移徙.祭祀.沐浴.破屋.坏垣.余事勿取.7dK3嫁娶.开市.合寿木.安葬.纳采.订盟.冠笄.祭祀.祈福.斋醮.出行.修造.动土.移徙.入宅.安香.出火.拆卸.造屋.起基.竖柱.上梁.定磉.安门.开池.ucS'开光.作灶.造屋.架马.开仓.嫁娶.纳采.祭祀.祈福.出行.立券.移徙.入宅.动土.破土.安葬.qbS开市.入宅.出行.修造.词讼.祭祀.沐浴.理发.整手足甲.修饰垣墙.平治道涂.余事勿取.{aa%嫁娶.安床.作灶.动土.破土.造船.安机械.祭祀.祈福.求嗣.沐浴.解除.纳采.开市.修造.竖柱.上梁.开柱眼.安碓磑.归岫.补垣.塞穴.拆卸.放水.出火.扫舍.开生坟.合寿木.安葬.谢土.启攒.除服.成服.J`QS安葬.开生坟.合寿木.行丧.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.修造.进人口.入宅.移徙.动土.安床.纳畜.栽种.纳财.交易.立券.挂匾.造畜椆栖. vC x 5 5  j # Eh7Lbp.b"evE_EW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿取.^am安床.祈福.出行.安葬.行丧.开光.嫁娶.合帐.裁衣.冠笄.伐木.上梁.出火.拆卸.移徙.修造.动土.安门.纳财.筑堤.栽种.塞穴.7]E9行丧.置产.入宅.安葬.嫁娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈福.求嗣.出行.解除.伐木.出火.入宅.拆卸.修造.动土.上梁.安床.栽种.破土.;\EC入宅.出行.掘井.安葬.祭祀.结网.余事勿取.[S_作灶.出火.祭祀.嫁娶.入宅.开市.交易.立券.挂匾.开光.解除.拆卸.动土.安床.修造.上梁.置产.栽种.破土.安葬.Z)k出火.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.EYKQ移徙.入宅.开仓.出货财.祭祀.破屋.坏垣.余事勿取.^XS{嫁娶.开市.安葬.启攒.行丧.畋猎.捕捉.结网.取渔.祭祀.沐浴.余事勿取.LW7q动土.掘井.破土.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.启攒.除服.成服.kV7/破土.出行.栽种.嫁娶.祭祀.理发.作灶.修饰垣墙.平治道涂.整手足甲.沐浴.冠笄.lUa纳采.订盟.安床.谢土.破土.动土.嫁娶.开光.祭祀.祈福.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上梁.造屋.作灶.出火.安香.补垣.塞穴.拆卸.放水.扫舍.造仓.造船.栽种.安葬.dTaw行丧.安葬.破土.作灶.伐木.斋醮.纳采.订盟.嫁娶.祭祀.祈福.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆卸.扫舍.放水.安香.安床.造船.开池.掘井.造畜椆栖.栽种.ESEW斋醮.移徙.入宅.动土.祭祀.教牛马.断蚁.余事勿取.R-嫁娶.掘井.入宅.移徙.出火.出行.行丧.安葬.开光.理发.进人口.修造.动土.起基.安门.安床.栽种.筑堤.补垣.造畜椆栖.,Q'C诸事不宜.解除.坏垣.余事勿取.,P'C诸事不宜.祭祀.作灶.余事勿取.&O}_嫁娶.出火.伐木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.栽种.安床.拆卸.修造.动土.上梁.入殓.安葬.破土.除服.成服.NoQ嫁娶.造桥.词讼.移徙.安门.作灶.栽种.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.经络.破土.;MEC斋醮.开市.嫁娶.作灶.沐浴.扫舍.余事勿取.BL)m行丧.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取."KE移徙.入宅.造屋.架马.嫁娶.纳采.订盟.斋醮.开光.祭祀.祈福.求医.治病.会亲友.动土.解除.捕捉.纳畜.牧养.入殓.破土.安葬.:JE?动土.破土.嫁娶.嫁娶.祭祀.祈福.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上梁.作灶.安门.安香.出火.造屋.启攒.安葬.^IS{祈福.嫁娶.入宅.安床.作灶.祭祀.沐浴.移徙.破土.安葬.扫舍.平治道涂.~S9开市.作灶.动土.行丧.安葬.嫁娶.纳采.订盟.会亲友.安机械.结网.冠笄.祭祀.求嗣.进人口.经络.xS-开市.出行.安床.作灶.安葬.嫁娶.纳采.订盟.祭祀.祈福.治病.造车器.修造.动土.移徙.入宅.>)e嫁娶.安葬.祭祀.解除.断蚁.会亲友.余事勿取."as入宅.造屋.造桥.安门.安葬.上梁.嫁娶.冠笄.祭祀.出行.移徙.入宅.作灶.造车器.补垣.塞穴.作厕.破土.启攒.除服.成服.入殓.]7入宅.安门.安葬.祭祀.祈福.求嗣.开光.纳采.订盟.嫁娶.出行.动土.破土.会亲友.开市.交易.立券.习艺.拆卸.起基.安碓磑.放水.开池.造仓.开渠.栽种.谢土.启攒.修坟.立碑.;~7Q探病.嫁娶.开市.祭祀.结网.捕捉.余事勿取.7}S+安床.上梁.裁衣.入宅.嫁娶.祭祀.祈福.求嗣.开光.订盟.纳采.解除.动土.起基.进人口.开市.交易.立券.纳财.造仓.开池.栽种.纳畜.破土.安葬. bg y  5  J SU?8cb4|7A作灶.开市.经络.订盟.纳采.嫁娶.解除.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.入宅.移徙.安床.栽种.纳畜.动土.破土.谢土.安葬.修坟.B{)m开光.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取.OzKc开市.立券.造船.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.修造.进人口.入宅.移徙.安床.解除.挂匾.栽种.破土.谢土.入殓.移柩.安葬.SySc作灶.嫁娶.移徙.入宅.理发.开市.交易.立券.挂匾.祭祀.祈福.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.启攒.除服.成服.立碑.xSs伐木.安葬.安床.祭祀.祈福.纳采.嫁娶.裁衣.理发.出行.修造.动土.进人口.开市.交易.立券.挂匾.移徙.上梁.栽种.纳畜.w 嫁娶.栽种.修造.动土.出行.伐木.作梁.安葬.谢土.开光.纳采.裁衣.冠笄.安床.作灶.进人口.造仓.塞穴.4va作灶.安床.开仓.造屋.动土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.解除.出行.出火.入宅.移徙.栽种.纳畜.牧养.动土.破土.入殓.安葬.Wua_嫁娶.安葬.入宅.出行.动土.词讼.塞穴.断蚁.结网.畋猎.余事勿取.t 安床.开渠.上梁.修造.开市.开光.入宅.移徙.安床.嫁娶.交易.立券.作厕.补垣.塞穴.畋猎.取渔.开生坟.Is}%入宅.移徙.修造.安门.伐木.入殓.安葬.造屋.祭祀.祈福.求嗣.开光.出行.开市.交易.立券.栽种.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.启攒.修坟.r ;祭祀.伐木.架马.安床.修造.动土.安葬.修坟.破土.解除.出行.纳采.冠笄.竖柱.上梁.移徙.作灶.进人口.入宅.纳畜.牧养.qSm嫁娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈福.开光.动土.安床.出行.栽种.纳畜.牧养.竖柱.上梁.解除.破土.:p)[开市.立券.纳采.订盟.嫁娶.造车器.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.挂匾.入宅.移徙.安床.栽种.入殓.破土.安葬.除服.成服.:o'_诸事不宜.破屋.坏垣.沐浴.解除.余事勿取.%n M祭祀.祈福.求嗣.开光.解除.合帐.冠笄.伐木.架马.作梁.修造.进人口.嫁娶.裁衣.合帐.安床.动土.起基.上梁.竖柱.放水.会亲友.)m U嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.解除.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上梁.安葬.破土.谢土.{l} 嫁娶.移徙.伐木.作梁.安床.祭祀.祈福.造屋.沐浴.平治道涂.扫舍.入殓.破土.安葬.除服.成服.Bka5塞穴.上梁.动土.伐木.安葬.词讼.进人口.会亲友.jE嫁娶.安床.探病.作灶.开市.交易.立券.挂匾.开光.出行.拆卸.进人口.入宅.移柩.动土.安门.上梁.栽种.破土.修坟.安葬.~ia+开市.嫁娶.移徙.入宅.掘井.安葬.沐浴.斋醮.解除.求医.治病.会亲友.造畜椆栖.栽种.理发.扫舍.ahoe动土.破土.行丧.开光.作梁.安葬.探病.祭祀.解除.教牛马.出行.余事勿取.fga}开光.嫁娶.掘井.安葬.安门.探病.祭祀.祈福.求嗣.斋醮.冠笄.作灶.纳财.交易.nfS祈福.动土.破土.安葬.入殓.纳采.嫁娶.出行.开市.立券.纳畜.牧养.出火.移徙.入宅.4e)Q嫁娶.安葬.祭祀.捕捉.解除.余事勿取./77出火.嫁娶.开市.祭祀.祈福.求嗣.斋醮.纳采.订盟.开光.竖柱.上梁.开仓.出货财.造屋.起基.定磉.安门.诸事不宜.破土.入殓.启攒.谢土.JSS祭祀.嫁娶.入宅.作灶.安葬.沐浴.捕捉.畋猎.结网.取渔._E 祈福.斋醮.开市.安葬.祭祀.沐浴.解除.求医.治病.破屋.坏垣.余事勿取.uE5嫁娶.开市.纳财.出火.纳采.祭祀.祈福.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.gS 移徙.入宅.嫁娶.出行.安床.祭祀.祈福.求嗣.斋醮.沐浴.纳畜.入殓.破土.安葬. "]   Z s  X ' \5JWbN]KK]安床.入宅.安碓磑.栽种.祭祀.作灶.平治道涂.余事勿取.ae祈福.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.嫁娶.开市.出行.会亲友.安床.结网.除服.成服.启攒.安葬.移柩.Ho1纳采.出行.修坟.安葬.开市.立券.作灶.嫁娶.祭祀.祈福.求嗣.斋醮.开光.出火.移徙.入宅.竖柱.上梁.会亲友.造屋.起基.治病.治病.安门.造车器.掘井.开池.AEO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿取.2a移徙.入宅.作灶.理发.开光.安门.祭祀.出行.修造.动土.合帐.造畜椆栖.安床.移徙.入殓.移柩.破土.启攒.安葬.开生坟.合寿木.补垣.塞穴.E 作灶.安葬.祭祀.入殓.安香.出火.纳采.订盟.嫁娶.开市.立券.交易.挂匾.开光.出行.解除.安床.栽种.置产.拆卸.修造.动土.B)m嫁娶.入宅.祭祀.修门.取渔.纳财.纳畜.余事勿取.''5纳采.问名.订盟.嫁娶.入宅.开仓.出火.动土.破土.纳畜.伐木.开市.交易.立券.挂匾.祭祀.开光.祈福.求嗣.安床.解除.修造.安葬.I){祈福.安葬.沐浴.塞穴.畋猎.结网.取渔.扫舍.余事勿取.Q) 嫁娶.开市.祭祀.沐浴.解除.破屋.坏垣.求医.治病.余事勿取.)k动土.破土.祭祀.解除.入殓.移柩.启攒.安葬.整手足甲.捕捉.畋猎.取渔.除服.成服.扫舍.谢土.斋醮.fS 斋醮.开光.嫁娶.入宅.上梁.沐浴.祭祀.解除.安葬.破土.谢土.移柩.余事勿取.] 7嫁娶.安床.治病.祭祀.作灶.畋猎.结网.修饰垣墙.平治道涂.余事勿取. }祈福.出火.置产.动土.破土.安葬.修造.上梁.置产.入宅.开光.出行.交易.塞穴.嫁娶.理发.开市.安床. o;修坟.造桥.作灶.出行.安葬.造屋.入宅.祭祀.祈福.求嗣.开光.纳采.订盟.解除.栽种.纳畜.牧养.扫舍.进人口.L Ee开光.伐木.安葬.破土.祭祀.出行.教牛马.扫舍.余事勿取. am嫁娶.掘井.探病.开市.开光.栽种.祭祀.裁衣.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.启攒.安葬.谢土.除服.成服.E{祭祀.入殓.安葬.探病.嫁娶.祈福.求嗣.开光.出行.解除.拆卸.出火.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,'C诸事不宜.解除.破屋.余事勿取. +祭祀.祈福.求嗣.开光.解除.纳采.冠笄.出火.拆卸.进人口.安床.动土.上梁.造庙.掘井.开池.入殓.移柩.安葬.破土.,'C诸事不宜.塞穴.扫舍.余事勿取.jS塑绘.开光.造桥.除服.成服.嫁娶.冠笄.祭祀.出行.会亲友.修造.动土.入殓.破土.;EC嫁娶.移徙.开市.入宅.破屋.坏垣.余事勿取.gS 纳采.开光.安床.嫁娶.开市.祈福.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~=O纳畜.理发.合寿木.嫁娶.造车器.纳采.订盟.祭祀.祈福.安机械.移徙.入宅.开市.立券.破土.安葬._;E 开市.造屋.治病.作灶.嫁娶.冠笄.会亲友.安机械.纳财.交易.立券.置产.j:7-移徙.入宅.栽种.纳财.开市.交易.立券.开光.针灸.会亲友.理发.安床.造仓.结网.J9Ea嫁娶.安葬.行丧.安门.祭祀.沐浴.解除.扫舍.塞穴.牧养.b8au嫁娶.动土.掘井.起基.定磉.破土.祭祀.会亲友.出行.立券.交易.冠笄.纳财.c7E嫁娶.祈福.出火.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.6E{开市.交易.合帐.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.破土.出火.安门.安床.上梁.立碑.移柩.m5E%入宅.造屋.竖柱.安葬.纳财.交易.立券.栽种.捕捉.结网.取渔.进人口.教牛马.理发.4Ym嫁娶.定磉.合寿木.安葬.行丧.祭祀.祈福.求嗣.斋醮.沐浴.开光.理发.经络.解除.治病.治病.立碑.栽种.牧养.掘井.开池.c37嫁娶.开光.作灶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑. FC, j . E \ B!eV2F;2)_开光.嫁娶.破屋.坏垣.求医.治病.余事勿取.&1}_开市.交易.作灶.纳财.上梁.安床.造屋.造船.嫁娶.开光.祭祀.祈福.求嗣.出行.出火.入宅.移徙.解除.栽种.伐木.破土.谢土.安葬.0E动土.伐木.安葬.行丧.嫁娶.祭祀.开光.祈福.求嗣.出行.出火.进人口.入宅.移徙.安床.拆卸.修造.安门.挂匾.纳财.扫舍.~/开仓.出货财.造屋.作灶.开市.交易.立券.栽种.祭祀.祈福.嫁娶.冠笄.修饰垣墙.置产.平治道涂..'动土.破土.安葬.行丧.赴任.出行.嫁娶.入宅.移徙.谢土.词讼.纳财.开市.立券.交易.开光.安床.上梁.造屋.修造.起基.k-E!嫁娶.作灶.掘井.安葬.塞穴.整手足甲.解除.捕捉.畋猎.结网.余事勿取.诸事不宜.,Ey祈福.动土.移徙.入宅.祭祀.祈福.求嗣.斋醮.嫁娶.冠笄.出行.开市.交易.会亲友.教牛马.除服.成服.启攒.安葬.移柩.+}C嫁娶.祭祀.开光.出行.出火.移徙.入宅.安门.安床.伐木.拆卸.修造.动土.上梁.立券.交易.栽种.纳畜.牧养.入殓.安葬.|*EC合帐.开市.安葬.入殓.嫁娶.祭祀.开光.祈福.求嗣.出火.入宅.移徙.安床.拆卸.动土.破土.谢土.l)K置产.伐木.纳畜.造畜椆栖.安葬.破土.作梁.作灶.开生坟.理发.冠笄.嫁娶.进人口.*( W嫁娶.行丧.架马.作梁.理发.牧养.安葬.纳畜.伐木.开市.立券.交易.挂匾.祭祀.祈福.开光.入宅.移徙.安床.拆卸.动土.上梁.进人口. 'Ee开光.作灶.斋醮.安葬.嫁娶.祭祀.出行.冠笄.立券.交易.进人口.开市.移徙.修造.动土.安床.入殓.移柩.破土.:&'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.^%)#入宅.安门.祭祀.开光.塑绘.祈福.斋醮.裁衣.合帐.冠笄.嫁娶.拆卸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.理发.伐木.架马.作梁.出火.修造.起基.定磉.放水.赴任.]$)!伐木.作梁.祭祀.会亲友.订盟.裁衣.合帐.安机械.拆卸.上梁.安门.入殓.除服.成服.移柩.启攒.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.经络.<#EE栽种.造屋.作灶.入宅.祭祀.嫁娶.纳婿.安葬.Y"E}出行.斋醮.安葬.嫁娶.开光.塑绘.求嗣.纳采.裁衣.合帐.冠笄.安机械.作梁.开柱眼.安门.安床.造仓.祭祀.会亲友.祈福.经络.纳财.开市.立券.交易.入学.求嗣.理发.架马.\!E开市.动土.安葬.破土.会亲友.求嗣.理发.冠笄.结网.捕捉.开光.理发.u S'开光.嫁娶.作灶.掘井.纳畜.祭祀.祈福.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.jS祭祀.移徙.入宅.动土.破土.纳采.会亲友.竖柱.上梁.立券.入殓.移柩.安葬.启攒.nS嫁娶.动土.开光.造屋.破土.祭祀.祈福.求嗣.斋醮.入殓.除服.成服.移柩.安葬.启攒.qS移徙.入宅.出火.安门.安葬.纳采.嫁娶.祭祀.祈福.出行.开市.会亲友.动土.破土.启攒.cTE嫁娶.开市.安葬.破土.纳采.祭祀.祈福.出行.会亲友.修造.动土.移徙.入宅.CSSE嫁娶.安门.移徙.入宅.安葬.塞穴.结网.取渔.畋猎.RKQ安床.作灶.造船.会亲友.纳采.订盟.祭祀.祈福.安香.出火.修造.出行.开市.移徙.入宅.动土.安葬.破土.QQ) 嫁娶.安葬.祭祀.沐浴.解除.理发.扫舍.破屋.坏垣.余事勿取.gP7'开市.入宅.斋醮.纳采.嫁娶.祭祀.祈福.出行.修造.动土.移徙.入宅.安葬.破土.POS_经络.探病.造屋.作灶.动土.嫁娶.祭祀.冠笄.修饰垣墙.置产.HNE]祭祀.祈福.安葬.安门.作灶.解除.平治道涂.余事勿取.pMS嫁娶.开市.动土.作灶.安葬.会亲友.冠笄.安床.会亲友.安机械.祭祀.祈福.求嗣.经络.7LS+移徙.入宅.出火.作灶.掘井.祭祀.祈福.求嗣.开光.嫁娶.出行.解除.伐木.拆卸.进人口.安床.动土.起基.上梁.栽种.纳畜.破土.谢土.启攒.安葬. \7 H  0 ]s4  m\ K}'入宅.出行.移徙.祭祀.嫁娶.动土.破土.作灶.开光.解除.伐木.竖柱.上梁.交易.立券.纳畜.入殓.移柩.安葬.|J} 栽种.开光.出行.针灸.嫁娶.入宅.动土.破土.祭祀.祈福.求嗣.纳畜.入殓.启攒.谢土.除服.成服.I{I入宅.安葬.伐木.作梁.纳畜.造畜椆栖.作灶.嫁娶.祭祀.开光.祈福.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲友.{H%a嫁娶.词讼.行丧.安葬.牧养.伐木.作梁.开市.纳畜.造畜椆栖.祭祀.沐浴.理发.作灶.结网.栽种._G)%嫁娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除服.成服.余事勿取. Fu3开市.嫁娶.安床.会亲友.入宅.作灶.上梁.祭祀.斋醮.沐浴.开生坟.除服.成服.移柩.入殓.破土.安葬.合寿木.;E)_开市.嫁娶.求医.治病.破屋.坏垣.余事勿取.XDaa开市.作灶.安床.入宅.上梁.裁衣.动土.入殓.嫁娶.移柩.安葬.破土.)CS开光.造屋.动土.作灶.栽种.造车器.纳采.订盟.祭祀.祈福.求嗣.移徙.出行.开市.出火.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?B'i诸事不宜.修饰垣墙.平治道涂.祭祀.余事勿取.%AS入宅.作灶.治病.安葬.移徙.嫁娶.冠笄.纳采.出行.会亲友.上梁.安机械.安床.牧养.畋猎.祭祀.祈福.开光.修造.安门.造屋.起基.=@'c诸事不宜.嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.启攒.除服.成服.;?'a诸事不宜.裁衣.伐木.作梁.纳财.交易.立券.n>75词讼.出火.入宅.祭祀.合帐.裁衣.经络.伐木.作梁.安床.作灶.入殓.安葬.启攒.移柩.=oC入宅.作灶.伐木.安葬.出火.出行.纳畜.嫁娶.开光.祈福.求嗣.解除.动土.安床.栽种.开池.掘井.祭祀.破土.启攒."<}W嫁娶.安葬.破土.作梁.纳畜.牧养.行丧.作灶.移徙.祭祀.开光.祈福.出行.解除.进人口.雇庸.安床.动土.起基.上梁.安门.解除.{;EA开市.安床.安葬.修坟.嫁娶.纳采.订盟.问名.祭祀.冠笄.裁衣.会亲友.进人口.纳财.捕捉.作灶.e:a{造庙.入宅.修造.安葬.行丧.嫁娶.祭祀.沐浴.补垣.塞穴.断蚁.解除.余事勿取. 9SW祈福.嫁娶.安床.入宅.造船.沐浴.开仓.出货财.开市.交易.立券.纳财.栽种.纳畜.牧养.畋猎.入殓.破土.安葬.;s7Q斋醮.嫁娶.开市.祭祀.破屋.坏垣.余事勿取.%r}]纳采.订盟.嫁娶.上梁.开市.斋醮.造屋.安门.沐浴.捕捉.畋猎.理发.整手足甲.入殓.除服.成服.破土.安葬.谢土.立碑.修坟.启攒.qE开市.出行.安葬.行丧.嫁娶.订盟.纳采.会亲友.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出火.挂匾.拆卸.置产.RpuA开光.嫁娶.开仓.出货财.造船.安葬.探病.平治道涂.余事勿取.'o5'挂匾.入宅.上梁.祈福.词讼.作梁.作灶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.嫁娶.栽种.入殓.移柩.安葬.?ns作灶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.嫁娶.开光.解除.出火.拆卸.修造.进人口.入宅.移徙.安床.栽种.入殓.修坟.动土.除服.成服.ymo嫁娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲友.解除.余事勿取.7l q入宅.置产.嫁娶.动土.栽种.开市.开光.动土.破土.祭祀.祈福.求嗣.沐浴.问名.交易.纳财.入殓.移柩.安葬.修坟.立碑.谢土.造畜椆栖.教牛马..kS嫁娶.合帐.入宅.行丧.安葬.纳采.订盟.祭祀.祈福.求嗣.斋醮.沐浴.进人口.会亲友.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.QjaS嫁娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.捕捉.畋猎.niS嫁娶.入宅.作灶.纳采.订盟.祭祀.斋醮.入殓.破土.启攒.安葬.修坟.立碑.除服.成服. IC \  9 )e],NCBIshS#祈福.造庙.祭祀.安床.谢土.嫁娶.纳采.订盟.开光.安香.出火.纳财.开市.交易.立券.裁衣.造屋.起基.修造.动土.安门.移徙.入宅.栽种.牧养.畋猎.掘井.开池.安葬.破土.入殓.除服.成服.立碑.Bg7_开市.动土.破土.祭祀.破屋.坏垣.解除.余事勿取.4fo 伐木.开市.交易.上梁.作灶.安门.造屋.嫁娶.纳采.订盟.入宅.移徙.安床.祭祀.祈福.开光.出行.解除.出火.拆卸.动土.纳畜.谢土.安葬.破土.#eC开市.行丧.栽种.出行.出货财.安葬.置产.词讼.治病.嫁娶.祭祀.开光.伐木.出火.拆卸.入宅.移徙.修造.动土.上梁.安床.纳畜.]d}O移徙.入宅.掘井.造庙.栽种.针灸.治病.开池.解除.平治道涂.余事勿取.c}C掘井.祈福.谢土.动土.入宅.上梁.修造.作灶.嫁娶.出行.理发.安床.启攒.安葬.修坟.开市.交易.立券.纳财.开池.牧养.&bE入宅.安门.祭祀.谢土.沐浴.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.启攒.修坟.立碑.移柩.YaE嫁娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.针灸.余事勿取.` 置产.嫁娶.出行.开光.栽种.动土.破土.入宅.治病.安床.裁衣.交易.立券.入殓.移柩.安葬.除服.成服.&_ O嫁娶.栽种.安葬.理发.造庙.作灶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈福.求嗣.动土.,^'C诸事不宜.祭祀.解除.余事勿取.^]'%余事勿取.祭祀.入殓.破土.除服.成服.启攒.安葬.修坟.立碑.余事勿取.\E 安床.伐木.祈福.纳畜.嫁娶.开市.交易.立券.开光.出行.出火.拆卸.修造.入宅.移徙.动土.破土.移柩.安葬.启攒.除服.成服.,['C诸事不宜.破屋.坏垣.余事勿取. Z}-掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.开光.入宅.移徙.安床.修造.动土.进人口.0YS出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅.rXo开市.纳采.订盟.作灶.造庙.造船.经络.嫁娶.冠笄.祭祀.祈福.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上梁.造屋.起基.安门.出火.移徙.入宅.掘井.造畜椆栖.安葬.破土.除服.成服.]WSy移徙.入宅.嫁娶.掘井.安葬.祭祀.平治道涂.修坟.除服.成服.余事勿取.UVoK祈福.出火.嫁娶.入宅.开市.动土.破土.订盟.纳采.会亲友.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.造桥.栽种.纳畜.造畜椆栖.移柩.入殓.启攒.修坟.立碑.安葬.TUKm破土.安葬.行丧.开生坟.订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.iͩ/';入宅.移徙.分居.作灶.出火.安香.动土.嫁娶.掘井.扫舍.造桥.造畜椆栖.教牛马.)ͩ. U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.vͩ-[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.ͩ,会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.ͩ+oQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7ͩ*S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑. Hf  Q t @ n7}>L2YbH4ͩ))Q移徙.入宅.破屋.坏垣.治病.余事勿取.ͩ(Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]ͩ'E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]ͩ&Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qͩ%a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.Sͩ$Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.ͩ#S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.ͩ"aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.ͩ!5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.ͩ 伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,ͩ'C诸事不宜.解除.扫舍.余事勿取.ͩEQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:ͩ'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,ͩ'C诸事不宜.祭祀.解除.余事勿取.ͩa5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2ͩ'O诸事不宜.祭祀.修饰垣墙.余事勿取. ͩ5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ͩa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;ͩ'a余事勿取.安葬.启攒.移柩.入殓.除服.成服.IͩSQ开市.动土.破土.行丧.安葬.祭祀.沐浴.出行.余事勿取.nͩS嫁娶.入宅.安床.掘井.开光.祭祀.理发.置产.塞穴.除服.成服.移柩.入殓.破土.安葬.;ͩS3移徙.入宅.出火.入殓.安葬.开市.纳财.出行.祭祀.祈福.求嗣.斋醮.问名.入学.起基.定磉.置产.开渠.掘井.拆卸.栽种.纳畜.牧养.动土.破土.启攒._ͩoa嫁娶.纳采.订盟.安床.动土.破土.安葬.祭祀.沐浴.捕捉.畋猎.结网.扫舍.tͩS%嫁娶.移徙.出火.开市.入宅.订盟.纳采.会亲友.祭祀.祈福.修造.动土.安机械.破土.安葬.{ͩS3祭祀.嫁娶.入宅.修造.动土.祭祀.扫舍.破土.安葬.除服.成服.启攒.移柩.入殓.立碑.余事勿取.IͨJ){嫁娶.安葬.祭祀.解除.破屋.坏垣.求医.治病.余事勿取.ͨIam破土.动土.安门.作灶.开市.交易.嫁娶.纳采.订盟.祭祀.开光.出行.解除.伐木.出火.入宅.移徙.拆卸.修造.栽种.安葬.入殓.EͨHEU置产.掘井.词讼.栽种.嫁娶.纳采.订盟.祭祀.斋醮.开光.安香.出火.出行.出火.拆卸.动土.祈福.进人口.纳财.交易.立券.移徙.安床.修造.安葬.除服.成服.QͨG %造庙.谢土.作灶.作梁.伐木.安葬.行丧.修坟.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.裁衣.会亲友.拆卸.进人口.安香.经络.出货财.修饰垣墙.平治道涂.ͨF祈福.谢土.安葬.上梁.作灶.开市.嫁娶.出行.入宅.动土.祭祀.塑绘.理发.会亲友.牧养.开池.造畜椆栖.畋猎.结网. f$ B t < * t <T#0;fOͨE7w作灶.经络.安床.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.进人口.开市.立券.挂匾.入宅.移徙.安门.栽种.动土.求医.治病.会亲友.起基.修造.造屋.安葬.VͨDSk开市.动土.破土.嫁娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿取.fͨCS 置产.造船.开光.掘井.作灶.合帐.裁衣.嫁娶.安床.入殓.移柩.破土.造畜椆栖.?ͨBm伐木.上梁.修造.入殓.理发.会亲友.入宅.安门.安葬.作灶.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆卸.破土.eͨAa{嫁娶.入宅.开市.安床.破土.修坟.沐浴.扫舍.捕捉.畋猎.解除.塞穴.余事勿取. ͨ@gC嫁娶.进人口.入宅.移徙.出火.出行.祭祀.祈福.求嗣.开光.解除.伐木.拆卸.修造.栽种.纳畜.安葬.修坟.立碑.cͨ?Y}上梁.开仓.出货财.造屋.造船.纳采.订盟.嫁娶.祭祀.祈福.雕刻.移徙.开市.入宅.出行.动土.会亲友.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;ͨ>)_嫁娶.安葬.破屋.坏垣.求医.治病.余事勿取.ͨ=Qs嫁娶.动土.造船.开池.掘井.出行.修造.入宅.上梁.移徙.安葬.破土.作灶.开市.祭祀.理发.针灸.解除.进人口.整手足甲.ͨ<7{栽种.掘井.置产.嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.开市.交易.立券.挂匾.伐木.入宅.移徙.安床.安葬.ͨ;a_祈福.祭祀.伐木.掘井.作灶.谢土.嫁娶.开光.出行.出火.拆卸.修造.动土.入宅.移徙.安床.上梁.开市.交易.立券.栽种. ͨ:5u嫁娶.冠笄.出行.祈福.安葬.伐木.入宅.移徙.出火.栽种.动土.上梁.开光.裁衣.安门.会亲友.安床.结网.理发. ͨ9)置产.安床.嫁娶.开光.出行.解除.出火.拆卸.修造.进人口.动土.入宅.移徙.栽种.纳畜.掘井.安葬.除服.成服.,ͨ8'C余事勿取.祭祀.沐浴.余事勿取.ͨ7}入宅.移徙.嫁娶.掘井.作灶.出火.进人口.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.启攒.%ͨ6'5余事勿取.解除.余事勿取.qͨ5o安床.开市.交易.出货财.安葬.修坟.嫁娶.作灶.祭祀.沐浴.结网.移柩.入殓.除服.成服.ͨ4aW入宅.作灶.词讼.移徙.出行.赴任.祭祀.祈福.求嗣.开光.解除.理发.会亲友.栽种.纳畜.牧养.安葬.修坟.立碑.启攒.ͨ3)探病.安葬.嫁娶.祭祀.开光.出火.出行.拆卸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.栽种.纳畜.jͨ2S嫁娶.开市.入宅.祈福.安葬.订盟.纳采.会亲友.交易.立券.纳财.栽种.纳畜.牧养.Bͨ1)m开市.嫁娶.祭祀.沐浴.解除.破屋.坏垣.余事勿取.Eͨ0KO开市.破土.掘井.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.安香.出火.造庙.移徙.出行.入宅.造庙.起基.竖柱.上梁.安床.纳畜.捕捉.纳婿.安葬.Bͨ/SC开市.交易.祭祀.入宅.安葬.捕捉.畋猎.余事勿取.3ͨ.)O嫁娶.开市.祭祀.平治道涂.余事勿取.Hͨ-SM入宅.上梁.斋醮.出火.谢土.纳采.订盟.开市.交易.立券.会亲友.纳畜.牧养.问名.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.启攒.入殓.除服.成服.ͧgo]造庙.嫁娶.掘井.栽种.造桥.作灶.动土.祭祀.开光.出行.解除.伐木.作梁.出火.拆卸.入宅.移徙.安床.修造.造畜椆栖.扫舍.ͧf1出货财.开仓.动土.破土.安葬.行丧.伐木.开渠.栽种.祭祀.造车器.出行.修造.上梁.造屋.安门.安床.造畜椆栖.教牛马.ͧe}C开市.出行.栽种.置产.词讼.安门.掘井.开光.嫁娶.裁衣.冠笄.合帐.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.VͧdSi安门.安床.裁衣.入宅.安葬.祭祀.祈福.求嗣.斋醮.开光.出行.嫁娶.求医.治病.动土.破土.入学.起基.扫舍.竖柱.上梁.开仓.出货财.置产.栽种.牧养.开生坟.谢土.立碑. Uj  Z  Z5d-(HNU[ͧcSu嫁娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲友.纳财.理发.捕捉.vͧba探病.纳畜.伐木.起基.作梁.造屋.嫁娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈福.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆卸.修造.动土.栽种.安葬.破土.启攒.除服.成服.入殓.立碑.ͧaoO祈福.斋醮.纳采.订盟.嫁娶.入宅.安葬.祭祀.求嗣.冠笄.进人口.会亲友.安门.安床.经络.纳财.牧养.畋猎.放水.割蜜.Pͧ`S_嫁娶.入宅.上梁.出行.安葬.祭祀.沐浴.破屋.坏垣.余事勿取.ͧ_}Q入宅.移徙.掘井.理发.伐木.交易.开市.作灶.嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.修造.动土.上梁.安床.纳畜.入殓.破土.eͧ^a{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.启攒.安葬.除服.成服.余事勿取.qͧ]a嫁娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治道涂.造畜椆栖.余事勿取.Eͧ\'q开市.入宅.出行.嫁娶.修坟.祈福.动土.入宅.安门.谢土.上梁.纳采.订盟.会亲友.沐浴.理发.裁衣.冠笄.安床.除服.成服.启攒.移柩.安葬.会亲友.开生坟.ͧ[}A嫁娶.安葬.行丧.词讼.造桥.作灶.破土.动土.祭祀.开光.出行.解除.理发.伐木.出火.拆卸.上梁.合脊.安床.造畜椆栖.ͧZa]伐木.行丧.破土.嫁娶.安葬.开渠.祭祀.祈福.求嗣.开光.出行.解除.上梁.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.ͧY)开光.栽种.嫁娶.祭祀.祈福.求嗣.动土.安床.扫舍.入殓.移柩.破土.启攒.安葬.作灶.整手足甲.补垣.除服.成服.ͧX)安床.安葬.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.进人口.开市.交易.立券.挂匾.纳财.入宅.移徙.栽种.破土.谢土.<ͧWEE安葬.开市.修坟.立碑.嫁娶.祭祀.作灶.纳财. ͧV}'纳畜.伐木.置产.作梁.行丧.安葬.修坟.立碑.嫁娶.祭祀.开市.开光.出行.入宅.移徙.出火.拆卸.修造.安床.{ͧUo上梁.作灶.伐木.出行.安葬.安门.理发.嫁娶.求嗣.纳采.进人口.纳财.结网.纳畜.牧养.会亲友.:ͧT'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.aͧS'+余事勿取.祭祀.入殓.移柩.开生坟.破土.启攒.安葬.除服.成服.余事勿取.HͧR'{余事勿取.入殓.破土.安葬.启攒.除服.成服.余事勿取.8ͧQ'[诸事不宜.造畜椆栖.平治道涂.余事勿取.ͧP -嫁娶.作灶.出火.出行.入宅.移徙.安床.祈福.上梁.开市.交易.立券.纳财.会亲友.开光.理发.入殓.移柩.安葬.启攒.\ͧOE嫁娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出火.上梁.移徙.uͧNa针灸.伐木.作梁.造庙.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.?ͧMg)嫁娶.入宅.修造.动土.会亲友.破土.祭祀.出行.uͧLo 嫁娶.开市.祭祀.祈福.斋醮.纳采.修坟.冠笄.沐浴.出行.修造.动土.移徙.入宅.破土.安葬.ͧKo-开市.祈福.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.取渔.会亲友.入学.移柩.启攒.除服.成服.LͧJYQ嫁娶.开市.造屋.作梁.合寿木.祭祀.冠笄.捕捉.余事勿取.7ͧI}安葬.纳畜.出行.行丧.伐木.栽种.造庙.造桥.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.解除.进人口.入宅.移徙.出火.安床.开市.交易.立券.挂匾.SͧEq开市.开仓.安门.安葬.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.上梁.合脊.放水.掘井.破土.移柩.谢土.除服.成服.;ͧ)_移徙.入宅.破屋.坏垣.求医.治病.余事勿取.ͧ 5出火.入宅.移徙.祈福.祭祀.安床.开市.嫁娶.探病.开光.解除.拆卸.修造.动土.竖柱.安门.牧养.安葬.修坟.破土.移柩.ͦu;作灶.出火.进人口.开渠.入宅.移徙.祭祀.开光.祈福.求嗣.斋醮.修造.动土.纳财.造仓.作厕.栽种.牧养.会亲友. T v F * kOh)B-Uͦ~Ew嫁娶.入宅.安床.出行.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.0ͦ}o斋醮.嫁娶.行丧.动土.作灶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.栽种.进人口.入宅.移徙.安床.开光.出火.拆卸.安门.修造.3ͦ|a造庙.行丧.安葬.伐木.作灶.造船.嫁娶.纳采.祭祀.解除.出行.修造.动土.开市.上梁.安床.整手足甲.扫舍.求医.治病.起基.定磉.造屋.合脊.Pͦ{Em动土.破土.置产.掘井.祭祀.出行.沐浴.扫舍.安葬.余事勿取.%ͦzS祈福.开光.开市.入宅.动土.嫁娶.冠笄.安机械.解除.纳畜.牧养.沐浴.伐木.架马.作梁.安门.扫舍.合寿木.安葬.启攒.立碑.修坟.eͦya{开市.入宅.嫁娶.动土.破土.安葬.祭祀.修坟.除服.成服.启攒.移柩.余事勿取. ͦx 开仓.出货财.伐木.纳畜.开市.上梁.造屋.破土.启攒.栽种.嫁娶.祭祀.理发.进人口.作灶.移柩.冠笄.会亲友.#ͦw5嫁娶.破土.进人口.出行.入宅.移徙.出火.纳畜.词讼.安葬.开市.交易.立券.纳财.挂匾.栽种.祭祀.祈福.开光.拆卸.动土.安床.aͦvS开市.掘井.开渠.造桥.造船.嫁娶.纳采.订盟.祭祀.开光.出行.理发.作梁.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.移徙.拆卸.挂匾.栽种.纳畜.破土.安葬.入殓.除服.成服.:ͦu'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.,ͦt'C诸事不宜.解除.坏垣.余事勿取.0ͦs c嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.栽种.纳畜.入殓.安葬.除服.成服.Fͦr'w诸事不宜.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.|ͦqa'作灶.行丧.理发.乘船.嫁娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出火.上梁. ͦpSO伐木.行丧.作灶.作梁.安葬.嫁娶.祭祀.塑绘.开光.出行.解除.理发.整手足甲.动土.安床.开池.放水.扫舍.3ͦo'Q诸事不宜.祭祀.出行.扫舍.余事勿取.ͦno'掘井.祈福.安床.开市.入宅.挂匾.开光.嫁娶.出行.伐木.拆卸.修造.动土.移徙.安葬.破土.修坟.立碑.Hͦm'{余事勿取.祭祀.立碑.修坟.启攒.除服.成服.余事勿取.mͦla 探病.开渠.安葬.伐木.作灶.入宅.祭祀.理发.会亲友.进人口.嫁娶.针灸.入殓.移柩.ͦkS]掘井.出行.破土.行丧.安葬.嫁娶.订盟.纳采.作灶.冠笄.裁衣.会亲友.纳畜.牧养.安机械.开市.立券.纳财.安床.>ͦja+纳采.订盟.经络.行丧.安葬.探病.嫁娶.祭祀.祈福.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.捕捉.畋猎.结网.ͦiSC动土.破土.嫁娶.掘井.安床.订盟.纳采.祭祀.祈福.安香.出火.开市.立券.入宅.挂匾.造桥.启攒.安葬.4ͦh)Q斋醮.开市.沐浴.破屋.坏垣.余事勿取.`ͦgE 开市.交易.入宅.嫁娶.祭祀.普渡.捕捉.解除.结网.畋猎.入殓.破土.安葬.EͦfSG开市.立券.置产.作灶.造桥.嫁娶.纳采.订盟.祭祀.祈福.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上梁.造屋.起基.定磉.安门.安葬.破土.rͦe}y嫁娶.栽种.祈福.造桥.安葬.安门.伐木.作梁.祭祀.理发.作灶.沐浴.修饰垣墙.平治道涂.ͦ-开市.入宅.动土.破土.安葬.作灶.上梁.安床.开仓.祈福.沐浴.理发.会亲友.塑绘.开光.栽种.牧养.嫁娶.经络.补垣.塞穴.?ͦm出火.嫁娶.开光.进人口.出行.词讼.开市.入宅.移徙.赴任.解除.祭祀.祈福.求嗣.修造.动土.竖柱.上梁.安床.纳畜.造屋.合脊.起基.入殓.破土.安葬.&ͦa{栽种.掘井.动土.安床.破土.置产.嫁娶.纳采.订盟.祭祀.祈福.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上梁.纳畜.入殓.安葬.启攒. XQf ! A / R!^ OsX%ͦay嫁娶.入宅.斋醮.开光.针灸.掘井.祭祀.出行.作梁.出火.拆卸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.*ͦI入宅.上梁.入殓.造屋.探病.作灶.安门.安葬.纳畜.伐木.嫁娶.纳采.订盟.开光.祭祀.出行.理发.动土.安床.放水.开渠.栽种.进人口.:ͦo行丧.安葬.出行.作梁.纳畜.伐木.造桥.嫁娶.祭祀.祈福.求嗣.裁衣.冠笄.经络.修造.进人口.安床.动土.竖柱.上梁.移徙.交易.立券.栽种.会亲友.VͦEw入宅.嫁娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈福.求嗣.开光.普渡.出行.出火.拆卸.修造.动土.进人口.开市.交易.立券.移徙.安床.栽种.上梁.纳畜.破土.移柩.安葬.4ͦa掘井.理发.作灶.动土.破土.开池.嫁娶.开光.祭祀.祈福.求嗣.安香.出火.解除.伐木.入宅.移徙.安床.开市.交易.立券.栽种.出火.出行.安葬.PͦaQ祈福.纳采.订盟.嫁娶.入宅.安葬.破屋.坏垣.治病.余事勿取.fͦE嫁娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.捕捉.除服.成服.余事勿取.SͦSc斋醮.开市.开仓.作灶.造船.嫁娶.祭祀.祈福.求嗣.出火.出行.开光.解除.拆卸.修造.进人口.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除服.成服.zͦk嫁娶.词讼.治病.置产.作梁.祈福.安葬.栽种.伐木.安门.修饰垣墙.平治道涂.祭祀.沐浴.作灶.Iͦ 伐木.谢土.行丧.祭祀.作灶.动土.破土.安葬.祈福.纳采.订盟.开光.出行.解除.安香.出火.拆卸.入宅.移徙.修造.上梁.安床.栽种.纳畜.会亲友.安机械.经络.#ͦQ嫁娶.出行.进人口.作灶.入宅.移徙.栽种.赴任.祭祀.解除.拆卸.修造.动土.起基.上梁.安床.安门.开渠.开池.入殓.破土.启攒.}ͦ_+安床.动土.安葬.开生坟.合寿木.祭祀.裁衣.安门.纳财.扫舍.出行.进人口.作灶.纳畜.造畜椆栖.ͦ}开光.出行.修造.上梁.入宅.安门.作灶.裁衣.祭祀.动土.筑堤.开池.会亲友.塞穴.入殓.移柩.破土.安葬.%ͦ}]造屋.入殓.安葬.伐木.入宅.移徙.置产.纳畜.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.安床.栽种.移柩.进人口.会亲友.除服.成服.ͦ}I动土.破土.理发.出行.入宅.分居.安香.出火.祭祀.开光.解除.移徙.裁衣.开市.立券.祈福.求嗣.进人口.交易.纳财.纳畜.ͦ E{栽种.作灶.针灸.出行.嫁娶.出火.拆卸.祭祀.祈福.开光.伐木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.hͦ '9诸事不宜.祭祀.结网.入殓.移柩.启攒.安葬.移柩.除服.成服.合寿木.余事勿取.,ͦ 'C诸事不宜.破屋.坏垣.余事勿取.^ͦ '%诸事不宜.祭祀.求医.捕捉.栽种.塞穴.入殓.破土.安葬.移柩.余事勿取.)ͦ )9嫁娶.移徙.祭祀.求嗣.开光.出行.伐木.作梁.出火.解除.拆卸.进人口.修造.动土.起基.安床.栽种.纳畜.入殓.破土.安葬.除服.成服.Nͦ'诸事不宜.祭祀.作灶.沐浴.修饰垣墙.平治道涂.余事勿取.ͦ嫁娶.纳财.祈福.安葬.修造.开市.交易.立券.动土.上梁.塑绘.开光.进人口.纳畜.补垣.塞穴.栽种.牧养.LͦaG斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈福.求嗣.开光.解除.扫舍.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.栽种.纳畜.牧养.nͦS嫁娶.出行.纳采.入宅.作灶.祭祀.沐浴.塑绘.开光.入学.解除.扫舍.治病.开池.牧养.lͦE#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.uͦS'开市.入宅.嫁娶.开光.造屋.祭祀.入殓.除服.成服.移柩.破土.启攒.安葬.塞穴.断蚁.结网.)ͦ7+出行.安葬.造桥.纳采.订盟.嫁娶.祭祀.沐浴.塑绘.开光.出火.治病.习艺.伐木.造屋.竖柱.上梁.安床.作灶.安碓磑.挂匾.掘井.纳畜. }Xx ] ,   C\I1`}]ͦgc安葬.破土.开市.开仓.出货财.启攒.纳采.订盟.嫁娶.移徙.入宅.出行.祭祀.祈福.斋醮.塑绘.开光.安香.出火.会亲友.解除.入学.竖柱.上梁.拆卸.造屋.起基.栽种.牧养.纳畜.Kͥ;YM入宅.开市.掘井.词讼.合寿木.嫁娶.订盟.纳采.祭祀.祈福.斋醮.开光.会亲友.求医.治病.造屋.起基.竖柱.上梁.安门.安碓磑.筑堤.开池.破土.安葬.除服.成服.Yͥ:So祭祀.祈福.探病.谢土.造桥.嫁娶.开市.立券.移徙.入宅.安机械.会亲友.经络.安门.安床.挂匾.拆卸.开仓.出货财.开池.栽种.纳畜.牧养.破土.安葬.启攒.移柩.入殓.立碑.4ͥ9)Q嫁娶.安葬.破屋.坏垣.解除.余事勿取.&ͥ8A嫁娶.斋醮.开市.出火.入宅.移徙.出行.作灶.安门.伐木.祭祀.祈福.解除.整手足甲.安床.沐浴.入殓.移柩.破土.启攒.安葬.谢土.Lͥ7o9嫁娶.作灶.出火.置产.嫁娶.入宅.安葬.纳采.订盟.会亲友.入学.祭祀.祈福.求嗣.开光.出行.解除.理发.动土.起基.开市.交易.立券.纳财.造仓.栽种.纳畜.牧养.<ͥ6EE动土.破土.治病.开渠.祭祀.嫁娶.畋猎.结网.Eͥ5}上梁.入宅.修造.动土.破土.祭祀.祈福.斋醮.嫁娶.纳采.订盟.造车器.开光.出行.拆卸.起基.安床.除服.成服.开市.交易.立券.栽种.牧养.入殓.移柩.启攒.Qͥ4S_开市.入宅.出行.安床.作灶.修造.动土.安机械.祭祀.沐浴.解除.拆卸.治病.作灶.造屋.起基.开池.扫舍.造畜椆栖.开生坟.合寿木.安葬.破土.启攒.移柩.入殓.立碑.,ͥ3M移徙.入宅.栽种.动土.破土.作灶.安葬.行丧.伐木.上梁.嫁娶.祭祀.出行.裁衣.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|ͥ2a'开光.治病.嫁娶.掘井.破土.安葬.经络.祭祀.沐浴.补垣.塞穴.除服.成服.移柩.入殓.启攒.立碑.Bͥ1o%移徙.栽种.出行.行丧.破土.安葬.词讼.嫁娶.纳采.订盟.祭祀.祈福.求嗣.纳采.裁衣.冠笄.开光.安床.作梁.修造.动土.作灶.起基.上梁.造屋.纳畜.牧养.ͥ0开渠.造船.安床.安葬.破土.出行.修坟.掘井.开市.开生坟.祭祀.冠笄.作灶.交易.纳财.栽种.结网.纳畜.牧养.进人口.Vͥ/Kq掘井.伐木.纳畜.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.入殓.破土.谢土.安葬.Eͥ.SG入宅.移徙.作灶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.嫁娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.栽种.破土.启攒.安葬.立碑.,ͥ-'C诸事不宜.破屋.坏垣.余事勿取.nͥ, a嫁娶.开市.出火.作灶.置产.斋醮.入宅.移徙.安门.解除.祭祀.理发.入殓.安葬.破土.ͥ+oQ嫁娶.栽种.行丧.理发.修坟.行丧.作灶.祭祀.祈福.求嗣.开光.伐木.出火.拆卸.入宅.安床.修造.动土.上梁.挂匾.纳畜.,ͥ*'C诸事不宜.祭祀.解除.余事勿取.ͥ)}5作灶.动土.上梁.栽种.入宅.移徙.修造.祈福.嫁娶.开光.解除.安床.牧养.理发.开市.入殓.启攒.移柩.安葬.扫舍."ͥ( G嫁娶.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.栽种.纳畜.入殓.启攒.除服.成服.tͥ'_嫁娶.作灶.安葬.动土.词讼.作梁.伐木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^ͥ&'%余事勿取.祭祀.入殓.破土.除服.成服.移柩.启攒.安葬.谢土.余事勿取.mͥ%}o嫁娶.出行.安葬.入殓.入宅.作灶.冠笄.上梁.祭祀.祈福.求嗣.开光.开市.牧养.理发.iͥ$}g安葬.经络.修坟.破土.开市.安床.启攒.立碑.祭祀.作灶.纳财.栽种.纳畜.进人口."ͥ# G嫁娶.开光.出行.祈福.求嗣.解除.拆卸.动土.修造.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.纳畜.入殓.移柩.安葬. i8 U Nw Mlͥ"a-斋醮.祭祀.移徙.入宅.上梁.嫁娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.ͥ!Se作灶.理发.造桥.行丧.安葬.嫁娶.安机械.交易.出行.祭祀.祈福.求嗣.斋醮.塑绘.开光.合帐.裁衣.放水.开池.掘井.Bͥ 7_入宅.嫁娶.移徙.祭祀.沐浴.破屋.坏垣.余事勿取.7ͥK3嫁娶.开市.合寿木.安葬.纳采.订盟.冠笄.祭祀.祈福.斋醮.出行.修造.动土.移徙.入宅.安香.出火.拆卸.造屋.起基.竖柱.上梁.定磉.安门.开池.uͥS'开光.作灶.造屋.架马.开仓.嫁娶.纳采.祭祀.祈福.出行.立券.移徙.入宅.动土.破土.安葬.qͥS开市.入宅.出行.修造.词讼.祭祀.沐浴.理发.整手足甲.修饰垣墙.平治道涂.余事勿取.{ͤVa%嫁娶.安床.作灶.动土.破土.造船.安机械.祭祀.祈福.求嗣.沐浴.解除.纳采.开市.修造.竖柱.上梁.开柱眼.安碓磑.归岫.补垣.塞穴.拆卸.放水.出火.扫舍.开生坟.合寿木.安葬.谢土.启攒.除服.成服.JͤUQS安葬.开生坟.合寿木.行丧.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.修造.进人口.入宅.移徙.动土.安床.纳畜.栽种.纳财.交易.立券.挂匾.造畜椆栖.EͤTEW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿取.ͤSam安床.祈福.出行.安葬.行丧.开光.嫁娶.合帐.裁衣.冠笄.伐木.上梁.出火.拆卸.移徙.修造.动土.安门.纳财.筑堤.栽种.塞穴.7ͤRE9行丧.置产.入宅.安葬.嫁娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈福.求嗣.出行.解除.伐木.出火.入宅.拆卸.修造.动土.上梁.安床.栽种.破土.;ͤQEC入宅.出行.掘井.安葬.祭祀.结网.余事勿取.ͤPS_作灶.出火.祭祀.嫁娶.入宅.开市.交易.立券.挂匾.开光.解除.拆卸.动土.安床.修造.上梁.置产.栽种.破土.安葬.ͤO)k出火.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.EͤNKQ移徙.入宅.开仓.出货财.祭祀.破屋.坏垣.余事勿取.^ͤMS{嫁娶.开市.安葬.启攒.行丧.畋猎.捕捉.结网.取渔.祭祀.沐浴.余事勿取.LͤL7q动土.掘井.破土.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.启攒.除服.成服.kͤK7/破土.出行.栽种.嫁娶.祭祀.理发.作灶.修饰垣墙.平治道涂.整手足甲.沐浴.冠笄.lͤJa纳采.订盟.安床.谢土.破土.动土.嫁娶.开光.祭祀.祈福.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上梁.造屋.作灶.出火.安香.补垣.塞穴.拆卸.放水.扫舍.造仓.造船.栽种.安葬.dͤIaw行丧.安葬.破土.作灶.伐木.斋醮.纳采.订盟.嫁娶.祭祀.祈福.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆卸.扫舍.放水.安香.安床.造船.开池.掘井.造畜椆栖.栽种.EͤHEW斋醮.移徙.入宅.动土.祭祀.教牛马.断蚁.余事勿取.ͤG-嫁娶.掘井.入宅.移徙.出火.出行.行丧.安葬.开光.理发.进人口.修造.动土.起基.安门.安床.栽种.筑堤.补垣.造畜椆栖.,ͤF'C诸事不宜.解除.坏垣.余事勿取.,ͤE'C诸事不宜.祭祀.作灶.余事勿取.&ͤD}_嫁娶.出火.伐木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.栽种.安床.拆卸.修造.动土.上梁.入殓.安葬.破土.除服.成服.ͤCoQ嫁娶.造桥.词讼.移徙.安门.作灶.栽种.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.经络.破土.,ͤB'C诸事不宜.破屋.坏垣.余事勿取.ͤAaQ嫁娶.开市.交易.行丧.安葬.修坟.祭祀.祈福.求嗣.开光.出行.伐木.出火.拆卸.修造.动土.起基.安床.入宅.移徙. {Qg g h[8MM*{)ͤ@ U嫁娶.祭祀.开光.祈福.求嗣.出行.出火.拆卸.动土.修造.进人口.入宅.移徙.安床.挂匾.交易.立券.栽种.纳畜.入殓.破土.启攒.安葬.rͤ?a出行.安门.修造.嫁娶.上梁.入宅.祭祀.理发.修饰垣墙.平治道涂.沐浴.整手足甲.扫舍.&ͤ>)3置产.安床.开光.求嗣.出行.解除.伐木.出火.拆卸.修造.上梁.起基.入宅.移徙.开市.交易.立券.栽种.牧养.入殓.安葬.除服.成服.~ͤ=S9开市.作灶.动土.行丧.安葬.嫁娶.纳采.订盟.会亲友.安机械.结网.冠笄.祭祀.求嗣.进人口.经络.xͤ<S-开市.出行.安床.作灶.安葬.嫁娶.纳采.订盟.祭祀.祈福.治病.造车器.修造.动土.移徙.入宅.>ͤ;)e嫁娶.安葬.祭祀.解除.断蚁.会亲友.余事勿取."ͤ:as入宅.造屋.造桥.安门.安葬.上梁.嫁娶.冠笄.祭祀.出行.移徙.入宅.作灶.造车器.补垣.塞穴.作厕.破土.启攒.除服.成服.入殓.]ͤ97入宅.安门.安葬.祭祀.祈福.求嗣.开光.纳采.订盟.嫁娶.出行.动土.破土.会亲友.开市.交易.立券.习艺.拆卸.起基.安碓磑.放水.开池.造仓.开渠.栽种.谢土.启攒.修坟.立碑.;ͣs7Q探病.嫁娶.开市.祭祀.结网.捕捉.余事勿取.7ͣrS+安床.上梁.裁衣.入宅.嫁娶.祭祀.祈福.求嗣.开光.订盟.纳采.解除.动土.起基.进人口.开市.交易.立券.纳财.造仓.开池.栽种.纳畜.破土.安葬.4ͣq7A作灶.开市.经络.订盟.纳采.嫁娶.解除.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.入宅.移徙.安床.栽种.纳畜.动土.破土.谢土.安葬.修坟.Bͣp)m开光.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取.OͣoKc开市.立券.造船.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.修造.进人口.入宅.移徙.安床.解除.挂匾.栽种.破土.谢土.入殓.移柩.安葬.SͣnSc作灶.嫁娶.移徙.入宅.理发.开市.交易.立券.挂匾.祭祀.祈福.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.启攒.除服.成服.立碑.ͣmSs伐木.安葬.安床.祭祀.祈福.纳采.嫁娶.裁衣.理发.出行.修造.动土.进人口.开市.交易.立券.挂匾.移徙.上梁.栽种.纳畜.ͣl 嫁娶.栽种.修造.动土.出行.伐木.作梁.安葬.谢土.开光.纳采.裁衣.冠笄.安床.作灶.进人口.造仓.塞穴.4ͣka作灶.安床.开仓.造屋.动土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.解除.出行.出火.入宅.移徙.栽种.纳畜.牧养.动土.破土.入殓.安葬.Wͣja_嫁娶.安葬.入宅.出行.动土.词讼.塞穴.断蚁.结网.畋猎.余事勿取.ͣi 安床.开渠.上梁.修造.开市.开光.入宅.移徙.安床.嫁娶.交易.立券.作厕.补垣.塞穴.畋猎.取渔.开生坟.Iͣh}%入宅.移徙.修造.安门.伐木.入殓.安葬.造屋.祭祀.祈福.求嗣.开光.出行.开市.交易.立券.栽种.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.启攒.修坟.ͣg ;祭祀.伐木.架马.安床.修造.动土.安葬.修坟.破土.解除.出行.纳采.冠笄.竖柱.上梁.移徙.作灶.进人口.入宅.纳畜.牧养.ͣfSm嫁娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈福.开光.动土.安床.出行.栽种.纳畜.牧养.竖柱.上梁.解除.破土.:ͣe)[开市.立券.纳采.订盟.嫁娶.造车器.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.挂匾.入宅.移徙.安床.栽种.入殓.破土.安葬.除服.成服.:ͣd'_诸事不宜.破屋.坏垣.沐浴.解除.余事勿取.%ͣc M祭祀.祈福.求嗣.开光.解除.合帐.冠笄.伐木.架马.作梁.修造.进人口.嫁娶.裁衣.合帐.安床.动土.起基.上梁.竖柱.放水.会亲友.)ͣb U嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.解除.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上梁.安葬.破土.谢土. 1;  R t & y 2  d7}Ld{ͣa} 嫁娶.移徙.伐木.作梁.安床.祭祀.祈福.造屋.沐浴.平治道涂.扫舍.入殓.破土.安葬.除服.成服.Bͣ`a5塞穴.上梁.动土.伐木.安葬.词讼.进人口.会亲友.ͣ_E嫁娶.安床.探病.作灶.开市.交易.立券.挂匾.开光.出行.拆卸.进人口.入宅.移柩.动土.安门.上梁.栽种.破土.修坟.安葬.,ͣ^'C诸事不宜.解除.扫舍.余事勿取.ͣ]7{开光.掘井.开仓.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.动土.入宅.移徙.安床.作灶.塞穴.栽种.破土.安葬.ͣ\'纳畜.入宅.移徙.安葬.探病.伐木.上梁.安门.入殓.动土.嫁娶.祭祀.祈福.求嗣.开光.开市.交易.立券.安床.出行.拆卸.,ͣ['C诸事不宜.结网.解除.余事勿取."ͣZas入宅.移徙.理发.出火.嫁娶.出行.开市.交易.立券.祭祀.祈福.开光.伐木.进人口.安床.拆卸.修造.动土.栽种.破土.移柩.安葬.%ͣY M嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.动土.上梁.出火.进人口.入宅.移徙.安床.栽种.纳畜.牧养.竖柱.安门.修造.解除.会亲友.JͣXSS祭祀.嫁娶.入宅.作灶.安葬.沐浴.捕捉.畋猎.结网.取渔._ͣWE 祈福.斋醮.开市.安葬.祭祀.沐浴.解除.求医.治病.破屋.坏垣.余事勿取.uͣVE5嫁娶.开市.纳财.出火.纳采.祭祀.祈福.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.gͣUS 移徙.入宅.嫁娶.出行.安床.祭祀.祈福.求嗣.斋醮.沐浴.纳畜.入殓.破土.安葬.KͣK]安床.入宅.安碓磑.栽种.祭祀.作灶.平治道涂.余事勿取.ͣ ae祈福.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.嫁娶.开市.出行.会亲友.安床.结网.除服.成服.启攒.安葬.移柩.Hͣ o1纳采.出行.修坟.安葬.开市.立券.作灶.嫁娶.祭祀.祈福.求嗣.斋醮.开光.出火.移徙.入宅.竖柱.上梁.会亲友.造屋.起基.治病.治病.安门.造车器.掘井.开池.Aͣ EO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿取.2ͣ a移徙.入宅.作灶.理发.开光.安门.祭祀.出行.修造.动土.合帐.造畜椆栖.安床.移徙.入殓.移柩.破土.启攒.安葬.开生坟.合寿木.补垣.塞穴.ͣ E 作灶.安葬.祭祀.入殓.安香.出火.纳采.订盟.嫁娶.开市.立券.交易.挂匾.开光.出行.解除.安床.栽种.置产.拆卸.修造.动土.Bͣ)m嫁娶.入宅.祭祀.修门.取渔.纳财.纳畜.余事勿取.'ͣ'5纳采.问名.订盟.嫁娶.入宅.开仓.出火.动土.破土.纳畜.伐木.开市.交易.立券.挂匾.祭祀.开光.祈福.求嗣.安床.解除.修造.安葬.Iͣ){祈福.安葬.沐浴.塞穴.畋猎.结网.取渔.扫舍.余事勿取.Qͣ) 嫁娶.开市.祭祀.沐浴.解除.破屋.坏垣.求医.治病.余事勿取.ͣ)k动土.破土.祭祀.解除.入殓.移柩.启攒.安葬.整手足甲.捕捉.畋猎.取渔.除服.成服.扫舍.谢土.斋醮.fͣS 斋醮.开光.嫁娶.入宅.上梁.沐浴.祭祀.解除.安葬.破土.谢土.移柩.余事勿取.]ͣ7嫁娶.安床.治病.祭祀.作灶.畋猎.结网.修饰垣墙.平治道涂.余事勿取.ͣ}祈福.出火.置产.动土.破土.安葬.修造.上梁.置产.入宅.开光.出行.交易.塞穴.嫁娶.理发.开市.安床. ͣo;修坟.造桥.作灶.出行.安葬.造屋.入宅.祭祀.祈福.求嗣.开光.纳采.订盟.解除.栽种.纳畜.牧养.扫舍.进人口.L͢Ee开光.伐木.安葬.破土.祭祀.出行.教牛马.扫舍.余事勿取.͢~am嫁娶.掘井.探病.开市.开光.栽种.祭祀.裁衣.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.启攒.安葬.谢土.除服.成服.͢}E{祭祀.入殓.安葬.探病.嫁娶.祈福.求嗣.开光.出行.解除.拆卸.出火.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,͢|'C诸事不宜.解除.破屋.余事勿取. c & v  I :j*!Bm.c͢{ +祭祀.祈福.求嗣.开光.解除.纳采.冠笄.出火.拆卸.进人口.安床.动土.上梁.造庙.掘井.开池.入殓.移柩.安葬.破土.,͢z'C诸事不宜.塞穴.扫舍.余事勿取.:͢y'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.͢x}Q动土.破土.纳财.掘井.挂匾.开市.伐木.交易.祭祀.祈福.求嗣.开光.解除.出火.拆卸.入宅.安床.修造.安门.纳畜.启攒.安葬.͢w 进人口.出行.嫁娶.置产.安床.赴任.安葬.作灶.祭祀.祈福.开光.解除.动土.纳财.交易.纳畜.扫舍.F͢v'w诸事不宜.祭祀.平治道涂.解除.修饰垣墙.余事勿取.͢u}I谢土.祈福.上梁.作灶.斋醮.修造.入宅.安门.纳采.嫁娶.开光.出行.理发.会亲友.开市.安床.栽种.牧养.入殓.移柩.启攒.j͢t7-移徙.入宅.栽种.纳财.开市.交易.立券.开光.针灸.会亲友.理发.安床.造仓.结网.J͢sEa嫁娶.安葬.行丧.安门.祭祀.沐浴.解除.扫舍.塞穴.牧养.b͢rau嫁娶.动土.掘井.起基.定磉.破土.祭祀.会亲友.出行.立券.交易.冠笄.纳财.c͢qE嫁娶.祈福.出火.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.͢+E{开市.交易.合帐.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.破土.出火.安门.安床.上梁.立碑.移柩.m͢*E%入宅.造屋.竖柱.安葬.纳财.交易.立券.栽种.捕捉.结网.取渔.进人口.教牛马.理发.͢)Ym嫁娶.定磉.合寿木.安葬.行丧.祭祀.祈福.求嗣.斋醮.沐浴.开光.理发.经络.解除.治病.治病.立碑.栽种.牧养.掘井.开池.c͢(7嫁娶.开光.作灶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;͢')_开光.嫁娶.破屋.坏垣.求医.治病.余事勿取.&͢&}_开市.交易.作灶.纳财.上梁.安床.造屋.造船.嫁娶.开光.祭祀.祈福.求嗣.出行.出火.入宅.移徙.解除.栽种.伐木.破土.谢土.安葬.͢%E动土.伐木.安葬.行丧.嫁娶.祭祀.开光.祈福.求嗣.出行.出火.进人口.入宅.移徙.安床.拆卸.修造.安门.挂匾.纳财.扫舍.~͢$开仓.出货财.造屋.作灶.开市.交易.立券.栽种.祭祀.祈福.嫁娶.冠笄.修饰垣墙.置产.平治道涂.͢#'动土.破土.安葬.行丧.赴任.出行.嫁娶.入宅.移徙.谢土.词讼.纳财.开市.立券.交易.开光.安床.上梁.造屋.修造.起基.k͢"E!嫁娶.作灶.掘井.安葬.塞穴.整手足甲.解除.捕捉.畋猎.结网.余事勿取.诸事不宜.͢!Ey祈福.动土.移徙.入宅.祭祀.祈福.求嗣.斋醮.嫁娶.冠笄.出行.开市.交易.会亲友.教牛马.除服.成服.启攒.安葬.移柩.͢ }C嫁娶.祭祀.开光.出行.出火.移徙.入宅.安门.安床.伐木.拆卸.修造.动土.上梁.立券.交易.栽种.纳畜.牧养.入殓.安葬.|͢EC合帐.开市.安葬.入殓.嫁娶.祭祀.开光.祈福.求嗣.出火.入宅.移徙.安床.拆卸.动土.破土.谢土.l͢K置产.伐木.纳畜.造畜椆栖.安葬.破土.作梁.作灶.开生坟.理发.冠笄.嫁娶.进人口.*͢ W嫁娶.行丧.架马.作梁.理发.牧养.安葬.纳畜.伐木.开市.立券.交易.挂匾.祭祀.祈福.开光.入宅.移徙.安床.拆卸.动土.上梁.进人口. ͢Ee开光.作灶.斋醮.安葬.嫁娶.祭祀.出行.冠笄.立券.交易.进人口.开市.移徙.修造.动土.安床.入殓.移柩.破土.:͢'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.^͢)#入宅.安门.祭祀.开光.塑绘.祈福.斋醮.裁衣.合帐.冠笄.嫁娶.拆卸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.理发.伐木.架马.作梁.出火.修造.起基.定磉.放水.赴任.]͢)!伐木.作梁.祭祀.会亲友.订盟.裁衣.合帐.安机械.拆卸.上梁.安门.入殓.除服.成服.移柩.启攒.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.经络.<͢EE栽种.造屋.作灶.入宅.祭祀.嫁娶.纳婿.安葬. sXN K \ P  ~  y,jSRsY͢E}出行.斋醮.安葬.嫁娶.开光.塑绘.求嗣.纳采.裁衣.合帐.冠笄.安机械.作梁.开柱眼.安门.安床.造仓.祭祀.会亲友.祈福.经络.纳财.开市.立券.交易.入学.求嗣.理发.架马.4͢E5安门.作灶.安葬.嫁娶.塞穴.诸事不宜.X͢E}掘井.动土.作灶.栽种.祭祀.出行.嫁娶.冠笄.安床.入殓.移柩.安葬.h͢E祭祀.开光.嫁娶.入宅.订盟.纳采.裁衣.合帐.冠笄.安机械.拆卸.安床.入殓.除服.成服.移柩.破土.启攒.安葬.修坟.立碑.经络.交易.立券.纳财.筑堤.造仓.补垣.塞穴.纳畜.伐木.架马.^͢E作灶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈福.塑绘.斋醮.沐浴.拆卸.起基.入宅.安香.造庙.移柩.谢土.除服.成服.入学.习艺.出行.竖柱.上梁.掘井.求嗣.解除.伐木.X͢E}作灶.开市.安葬.作梁.裁衣.合帐.冠笄.嫁娶.纳婿.安床.入殓.纳财.c͢E嫁娶.开市.安葬.破土.纳采.祭祀.祈福.出行.会亲友.修造.动土.移徙.入宅.C͢SE嫁娶.安门.移徙.入宅.安葬.塞穴.结网.取渔.畋猎.͢KQ安床.作灶.造船.会亲友.纳采.订盟.祭祀.祈福.安香.出火.修造.出行.开市.移徙.入宅.动土.安葬.破土.Q͢) 嫁娶.安葬.祭祀.沐浴.解除.理发.扫舍.破屋.坏垣.余事勿取.g͢ 7'开市.入宅.斋醮.纳采.嫁娶.祭祀.祈福.出行.修造.动土.移徙.入宅.安葬.破土.P͡DS_经络.探病.造屋.作灶.动土.嫁娶.祭祀.冠笄.修饰垣墙.置产.H͡CE]祭祀.祈福.安葬.安门.作灶.解除.平治道涂.余事勿取.p͡BS嫁娶.开市.动土.作灶.安葬.会亲友.冠笄.安床.会亲友.安机械.祭祀.祈福.求嗣.经络.7͡AS+移徙.入宅.出火.作灶.掘井.祭祀.祈福.求嗣.开光.嫁娶.出行.解除.伐木.拆卸.进人口.安床.动土.起基.上梁.栽种.纳畜.破土.谢土.启攒.安葬. ͡@}'入宅.出行.移徙.祭祀.嫁娶.动土.破土.作灶.开光.解除.伐木.竖柱.上梁.交易.立券.纳畜.入殓.移柩.安葬.|͡?} 栽种.开光.出行.针灸.嫁娶.入宅.动土.破土.祭祀.祈福.求嗣.纳畜.入殓.启攒.谢土.除服.成服.͡>{I入宅.安葬.伐木.作梁.纳畜.造畜椆栖.作灶.嫁娶.祭祀.开光.祈福.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲友.{͡=%a嫁娶.词讼.行丧.安葬.牧养.伐木.作梁.开市.纳畜.造畜椆栖.祭祀.沐浴.理发.作灶.结网.栽种._͡<)%嫁娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除服.成服.余事勿取. ͡;u3开市.嫁娶.安床.会亲友.入宅.作灶.上梁.祭祀.斋醮.沐浴.开生坟.除服.成服.移柩.入殓.破土.安葬.合寿木.;͡:)_开市.嫁娶.求医.治病.破屋.坏垣.余事勿取.X͡9aa开市.作灶.安床.入宅.上梁.裁衣.动土.入殓.嫁娶.移柩.安葬.破土.)͡8S开光.造屋.动土.作灶.栽种.造车器.纳采.订盟.祭祀.祈福.求嗣.移徙.出行.开市.出火.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?͡7'i诸事不宜.修饰垣墙.平治道涂.祭祀.余事勿取.%͡6S入宅.作灶.治病.安葬.移徙.嫁娶.冠笄.纳采.出行.会亲友.上梁.安机械.安床.牧养.畋猎.祭祀.祈福.开光.修造.安门.造屋.起基.=͡5'c诸事不宜.嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.启攒.除服.成服.;͡4'a诸事不宜.裁衣.伐木.作梁.纳财.交易.立券.n͡375词讼.出火.入宅.祭祀.合帐.裁衣.经络.伐木.作梁.安床.作灶.入殓.安葬.启攒.移柩.͡2oC入宅.作灶.伐木.安葬.出火.出行.纳畜.嫁娶.开光.祈福.求嗣.解除.动土.安床.栽种.开池.掘井.祭祀.破土.启攒."͡1}W嫁娶.安葬.破土.作梁.纳畜.牧养.行丧.作灶.移徙.祭祀.开光.祈福.出行.解除.进人口.雇庸.安床.动土.起基.上梁.安门.解除. wc f 0 & & }|IY^:\wB͡0'o诸事不宜.结网.入殓.除服.成服.移柩.安葬.破土.͡/7 嫁娶.作灶.安床.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.入宅.移徙.上梁.挂匾.开池.入殓.安葬.破土.启攒.;͡.'a余事勿取.祭祀.解除.治病.破屋.坏垣.扫舍.͡-E{开市.立券.理发.作灶.嫁娶.祭祀.祈福.出行.解除.出火.拆卸.动土.入宅.移徙.安床.上梁.栽种.纳畜.破土.启攒.安葬.͡,')诸事不宜.解除.沐浴.͡+E开市.出行.安葬.行丧.嫁娶.订盟.纳采.会亲友.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出火.挂匾.拆卸.置产.R͡*uA开光.嫁娶.开仓.出货财.造船.安葬.探病.平治道涂.余事勿取.'͡)5'挂匾.入宅.上梁.祈福.词讼.作梁.作灶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.嫁娶.栽种.入殓.移柩.安葬.?͠cs作灶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.嫁娶.开光.解除.出火.拆卸.修造.进人口.入宅.移徙.安床.栽种.入殓.修坟.动土.除服.成服.y͠bo嫁娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲友.解除.余事勿取.7͠a q入宅.置产.嫁娶.动土.栽种.开市.开光.动土.破土.祭祀.祈福.求嗣.沐浴.问名.交易.纳财.入殓.移柩.安葬.修坟.立碑.谢土.造畜椆栖.教牛马..͠`S嫁娶.合帐.入宅.行丧.安葬.纳采.订盟.祭祀.祈福.求嗣.斋醮.沐浴.进人口.会亲友.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q͠_aS嫁娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.捕捉.畋猎.n͠^S嫁娶.入宅.作灶.纳采.订盟.祭祀.斋醮.入殓.破土.启攒.安葬.修坟.立碑.除服.成服.s͠]S#祈福.造庙.祭祀.安床.谢土.嫁娶.纳采.订盟.开光.安香.出火.纳财.开市.交易.立券.裁衣.造屋.起基.修造.动土.安门.移徙.入宅.栽种.牧养.畋猎.掘井.开池.安葬.破土.入殓.除服.成服.立碑.B͠\7_开市.动土.破土.祭祀.破屋.坏垣.解除.余事勿取.4͠[o 伐木.开市.交易.上梁.作灶.安门.造屋.嫁娶.纳采.订盟.入宅.移徙.安床.祭祀.祈福.开光.出行.解除.出火.拆卸.动土.纳畜.谢土.安葬.破土.#͠ZC开市.行丧.栽种.出行.出货财.安葬.置产.词讼.治病.嫁娶.祭祀.开光.伐木.出火.拆卸.入宅.移徙.修造.动土.上梁.安床.纳畜.]͠Y}O移徙.入宅.掘井.造庙.栽种.针灸.治病.开池.解除.平治道涂.余事勿取.͠X}C掘井.祈福.谢土.动土.入宅.上梁.修造.作灶.嫁娶.出行.理发.安床.启攒.安葬.修坟.开市.交易.立券.纳财.开池.牧养.&͠WE入宅.安门.祭祀.谢土.沐浴.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.启攒.修坟.立碑.移柩.Y͠VE嫁娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.针灸.余事勿取.͠U 置产.嫁娶.出行.开光.栽种.动土.破土.入宅.治病.安床.裁衣.交易.立券.入殓.移柩.安葬.除服.成服.&͠T O嫁娶.栽种.安葬.理发.造庙.作灶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈福.求嗣.动土.,͠S'C诸事不宜.祭祀.解除.余事勿取.^͠R'%余事勿取.祭祀.入殓.破土.除服.成服.启攒.安葬.修坟.立碑.余事勿取.͠QE 安床.伐木.祈福.纳畜.嫁娶.开市.交易.立券.开光.出行.出火.拆卸.修造.入宅.移徙.动土.破土.移柩.安葬.启攒.除服.成服.,͠P'C诸事不宜.破屋.坏垣.余事勿取. ͠O}-掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.开光.入宅.移徙.安床.修造.动土.进人口.͠N}A掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.动土.会亲友.起基.造仓.纳畜.牧养.作厕.进人口. b  <  Nk;\uF͠M'w余事勿取.祭祀.解除.修饰垣墙.平治道涂.余事勿取.͠L'修造.上梁.入宅.祈福.探病.掘井.动土.安门.安葬.作灶.开市.交易.立券.纳财.开池.补垣.嫁娶.纳采.纳畜.取渔.安床.͠KE 嫁娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.伐木.作梁.出火.入宅.移徙.安床.拆卸.动土.上梁.栽种.纳畜.安葬.=͠J'e余事勿取.解除.扫舍.祭祀.教牛马.余事勿取.͠IEk作灶.掘井.嫁娶.入宅.祭祀.祈福.斋醮.沐浴.安床.安机械.造车器.入殓.移柩.启攒.安葬.立碑.合帐.经络.交易.)͠H U嫁娶.开市.安床.栽种.安葬.祈福.开光.掘井.安葬.入宅.移徙.出行.进人口.修造.动土.起基.上梁.安门.造仓.补垣.塞穴.造畜椆栖.v͠G[嫁娶.开市.出火.进人口.入殓.赴任.入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈福.求嗣.塑绘.解除.拆卸.修造.动土.竖柱.上梁.安门.置产.开池.掘井.纳畜.安床.栽种.造畜椆栖.破土.移柩.立碑.͠F会亲友.安葬.入宅.移徙.安床.开市.行丧.出火.作灶.安门.祭祀.沐浴.理发.纳财.进人口.栽种.扫舍.捕捉.畋猎.结网.͠EoQ伐木.作梁.动土.安床.破土.栽种.造桥.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.修坟.立碑.7S+作灶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.理发.伐木.作梁.开柱眼.作厕.畋猎.破土.入殓.除服.成服.移柩.启攒.修坟.立碑.4)Q移徙.入宅.破屋.坏垣.治病.余事勿取.Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.qa嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.SSc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,'C诸事不宜.解除.扫舍.余事勿取.EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,'C诸事不宜.祭祀.解除.余事勿取.a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2'O诸事不宜.祭祀.修饰垣墙.余事勿取. 5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种. a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种. ` P p Z*I{:; 'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.# 5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m 37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,'C诸事不宜.解除.坏垣.余事勿取.a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.{S3祭祀.嫁娶.入宅.修造.动土.祭祀.扫舍.破土.安葬.除服.成服.启攒.移柩.入殓.立碑.余事勿取.I){嫁娶.安葬.祭祀.解除.破屋.坏垣.求医.治病.余事勿取.am破土.动土.安门.作灶.开市.交易.嫁娶.纳采.订盟.祭祀.开光.出行.解除.伐木.出火.入宅.移徙.拆卸.修造.栽种.安葬.入殓.EEU置产.掘井.词讼.栽种.嫁娶.纳采.订盟.祭祀.斋醮.开光.安香.出火.出行.出火.拆卸.动土.祈福.进人口.纳财.交易.立券.移徙.安床.修造.安葬.除服.成服.Q %造庙.谢土.作灶.作梁.伐木.安葬.行丧.修坟.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.裁衣.会亲友.拆卸.进人口.安香.经络.出货财.修饰垣墙.平治道涂.祈福.谢土.安葬.上梁.作灶.开市.嫁娶.出行.入宅.动土.祭祀.塑绘.理发.会亲友.牧养.开池.造畜椆栖.畋猎.结网.O:7w作灶.经络.安床.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.进人口.开市.立券.挂匾.入宅.移徙.安门.栽种.动土.求医.治病.会亲友.起基.修造.造屋.安葬.V9Sk开市.动土.破土.嫁娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿取.f8S 置产.造船.开光.掘井.作灶.合帐.裁衣.嫁娶.安床.入殓.移柩.破土.造畜椆栖.?7m伐木.上梁.修造.入殓.理发.会亲友.入宅.安门.安葬.作灶.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆卸.破土.e6a{嫁娶.入宅.开市.安床.破土.修坟.沐浴.扫舍.捕捉.畋猎.解除.塞穴.余事勿取. 5gC嫁娶.进人口.入宅.移徙.出火.出行.祭祀.祈福.求嗣.开光.解除.伐木.拆卸.修造.栽种.纳畜.安葬.修坟.立碑.c4Y}上梁.开仓.出货财.造屋.造船.纳采.订盟.嫁娶.祭祀.祈福.雕刻.移徙.开市.入宅.出行.动土.会亲友.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;3)_嫁娶.安葬.破屋.坏垣.求医.治病.余事勿取.2Qs嫁娶.动土.造船.开池.掘井.出行.修造.入宅.上梁.移徙.安葬.破土.作灶.开市.祭祀.理发.针灸.解除.进人口.整手足甲.17{栽种.掘井.置产.嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.开市.交易.立券.挂匾.伐木.入宅.移徙.安床.安葬.0a_祈福.祭祀.伐木.掘井.作灶.谢土.嫁娶.开光.出行.出火.拆卸.修造.动土.入宅.移徙.安床.上梁.开市.交易.立券.栽种. /5u嫁娶.冠笄.出行.祈福.安葬.伐木.入宅.移徙.出火.栽种.动土.上梁.开光.裁衣.安门.会亲友.安床.结网.理发. .)置产.安床.嫁娶.开光.出行.解除.出火.拆卸.修造.进人口.动土.入宅.移徙.栽种.纳畜.掘井.安葬.除服.成服.,-'C余事勿取.祭祀.沐浴.余事勿取.,}入宅.移徙.嫁娶.掘井.作灶.出火.进人口.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.启攒.%+'5余事勿取.解除.余事勿取.q*o安床.开市.交易.出货财.安葬.修坟.嫁娶.作灶.祭祀.沐浴.结网.移柩.入殓.除服.成服.  x > s &L()aW入宅.作灶.词讼.移徙.出行.赴任.祭祀.祈福.求嗣.开光.解除.理发.会亲友.栽种.纳畜.牧养.安葬.修坟.立碑.启攒.()探病.安葬.嫁娶.祭祀.开光.出火.出行.拆卸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.栽种.纳畜.,''C诸事不宜.破屋.坏垣.余事勿取. &5嫁娶.开市.出火.栽种.破土.动土.入宅.移徙.安香.分居.掘井.作灶.开光.解除.拆卸.修造.动土.安床.纳畜.安葬.启攒.入殓.)% U嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.出行.拆卸.进人口.入宅.移徙.安床.栽种.动土.修造.纳畜.入殓.安葬.立碑.除服.成服.$}Q栽种.破土.置产.祭祀.嫁娶.动土.作灶.祈福.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.#''诸事不宜.诸事不宜.H"SM入宅.上梁.斋醮.出火.谢土.纳采.订盟.开市.交易.立券.会亲友.纳畜.牧养.问名.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.启攒.入殓.除服.成服.!o]造庙.嫁娶.掘井.栽种.造桥.作灶.动土.祭祀.开光.出行.解除.伐木.作梁.出火.拆卸.入宅.移徙.安床.修造.造畜椆栖.扫舍. 1出货财.开仓.动土.破土.安葬.行丧.伐木.开渠.栽种.祭祀.造车器.出行.修造.上梁.造屋.安门.安床.造畜椆栖.教牛马.}C开市.出行.栽种.置产.词讼.安门.掘井.开光.嫁娶.裁衣.冠笄.合帐.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.VSi安门.安床.裁衣.入宅.安葬.祭祀.祈福.求嗣.斋醮.开光.出行.嫁娶.求医.治病.动土.破土.入学.起基.扫舍.竖柱.上梁.开仓.出货财.置产.栽种.牧养.开生坟.谢土.立碑.[Su嫁娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲友.纳财.理发.捕捉.vWa探病.纳畜.伐木.起基.作梁.造屋.嫁娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈福.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆卸.修造.动土.栽种.安葬.破土.启攒.除服.成服.入殓.立碑.VoO祈福.斋醮.纳采.订盟.嫁娶.入宅.安葬.祭祀.求嗣.冠笄.进人口.会亲友.安门.安床.经络.纳财.牧养.畋猎.放水.割蜜.PUS_嫁娶.入宅.上梁.出行.安葬.祭祀.沐浴.破屋.坏垣.余事勿取.T}Q入宅.移徙.掘井.理发.伐木.交易.开市.作灶.嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.修造.动土.上梁.安床.纳畜.入殓.破土.eSa{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.启攒.安葬.除服.成服.余事勿取.qRa嫁娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治道涂.造畜椆栖.余事勿取.EQ'q开市.入宅.出行.嫁娶.修坟.祈福.动土.入宅.安门.谢土.上梁.纳采.订盟.会亲友.沐浴.理发.裁衣.冠笄.安床.除服.成服.启攒.移柩.安葬.会亲友.开生坟.P}A嫁娶.安葬.行丧.词讼.造桥.作灶.破土.动土.祭祀.开光.出行.解除.理发.伐木.出火.拆卸.上梁.合脊.安床.造畜椆栖.Oa]伐木.行丧.破土.嫁娶.安葬.开渠.祭祀.祈福.求嗣.开光.出行.解除.上梁.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.N)开光.栽种.嫁娶.祭祀.祈福.求嗣.动土.安床.扫舍.入殓.移柩.破土.启攒.安葬.作灶.整手足甲.补垣.除服.成服.M)安床.安葬.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.进人口.开市.交易.立券.挂匾.纳财.入宅.移徙.栽种.破土.谢土.}安葬.纳畜.出行.行丧.伐木.栽种.造庙.造桥.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.解除.进人口.入宅.移徙.出火.安床.开市.交易.立券.挂匾.S=Eq开市.开仓.安门.安葬.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.上梁.合脊.放水.掘井.破土.移柩.谢土.除服.成服.;<)_移徙.入宅.破屋.坏垣.求医.治病.余事勿取.; 5出火.入宅.移徙.祈福.祭祀.安床.开市.嫁娶.探病.开光.解除.拆卸.修造.动土.竖柱.安门.牧养.安葬.修坟.破土.移柩.:u;作灶.出火.进人口.开渠.入宅.移徙.祭祀.开光.祈福.求嗣.斋醮.修造.动土.纳财.造仓.作厕.栽种.牧养.会亲友.U9Ew嫁娶.入宅.安床.出行.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.0ro斋醮.嫁娶.行丧.动土.作灶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.栽种.进人口.入宅.移徙.安床.开光.出火.拆卸.安门.修造.3qa造庙.行丧.安葬.伐木.作灶.造船.嫁娶.纳采.祭祀.解除.出行.修造.动土.开市.上梁.安床.整手足甲.扫舍.求医.治病.起基.定磉.造屋.合脊.PpEm动土.破土.置产.掘井.祭祀.出行.沐浴.扫舍.安葬.余事勿取.%oS祈福.开光.开市.入宅.动土.嫁娶.冠笄.安机械.解除.纳畜.牧养.沐浴.伐木.架马.作梁.安门.扫舍.合寿木.安葬.启攒.立碑.修坟.ena{开市.入宅.嫁娶.动土.破土.安葬.祭祀.修坟.除服.成服.启攒.移柩.余事勿取. m 开仓.出货财.伐木.纳畜.开市.上梁.造屋.破土.启攒.栽种.嫁娶.祭祀.理发.进人口.作灶.移柩.冠笄.会亲友.#l5嫁娶.破土.进人口.出行.入宅.移徙.出火.纳畜.词讼.安葬.开市.交易.立券.纳财.挂匾.栽种.祭祀.祈福.开光.拆卸.动土.安床.akS开市.掘井.开渠.造桥.造船.嫁娶.纳采.订盟.祭祀.开光.出行.理发.作梁.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.移徙.拆卸.挂匾.栽种.纳畜.破土.安葬.入殓.除服.成服.:j'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.,i'C诸事不宜.解除.坏垣.余事勿取.0h c嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.栽种.纳畜.入殓.安葬.除服.成服.Fg'w诸事不宜.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.|fa'作灶.行丧.理发.乘船.嫁娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出火.上梁. eSO伐木.行丧.作灶.作梁.安葬.嫁娶.祭祀.塑绘.开光.出行.解除.理发.整手足甲.动土.安床.开池.放水.扫舍. ]tI z " b \@'l;k]3d'Q诸事不宜.祭祀.出行.扫舍.余事勿取.co'掘井.祈福.安床.开市.入宅.挂匾.开光.嫁娶.出行.伐木.拆卸.修造.动土.移徙.安葬.破土.修坟.立碑.Hb'{余事勿取.祭祀.立碑.修坟.启攒.除服.成服.余事勿取.maa 探病.开渠.安葬.伐木.作灶.入宅.祭祀.理发.会亲友.进人口.嫁娶.针灸.入殓.移柩."`}W嫁娶.立碑.出行.伐木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人口.入宅.安床.出火.拆卸.修造.动土.栽种.0_ c嫁娶.祈福.求嗣.出行.出火.拆卸.修造.动土.上梁.开光.进人口.开市.交易.立券.挂匾.安床.入宅.移徙.栽种.伐木.入殓.破土.除服.成服.,^'C诸事不宜.破屋.坏垣.余事勿取.#]5嫁娶.出行.安床.作灶.祭祀.入宅.移徙.出火.进人口.置产.开光.解除.起基.动土.拆卸.上梁.立碑.修坟.安葬.破土.启攒.移柩.0\ c嫁娶.祭祀.祈福.求嗣.沐浴.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.入宅.移徙.安床.栽种.纳畜.入殓.安葬.启攒.除服.成服.W[E{嫁娶.移徙.入宅.开市.沐浴.入殓.移柩.除服.成服.破土.平治道涂.rZ}y嫁娶.栽种.祈福.造桥.安葬.安门.伐木.作梁.祭祀.理发.作灶.沐浴.修饰垣墙.平治道涂.Y-开市.入宅.动土.破土.安葬.作灶.上梁.安床.开仓.祈福.沐浴.理发.会亲友.塑绘.开光.栽种.牧养.嫁娶.经络.补垣.塞穴.?Xm出火.嫁娶.开光.进人口.出行.词讼.开市.入宅.移徙.赴任.解除.祭祀.祈福.求嗣.修造.动土.竖柱.上梁.安床.纳畜.造屋.合脊.起基.入殓.破土.安葬.&Wa{栽种.掘井.动土.安床.破土.置产.嫁娶.纳采.订盟.祭祀.祈福.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上梁.纳畜.入殓.安葬.启攒.%Vay嫁娶.入宅.斋醮.开光.针灸.掘井.祭祀.出行.作梁.出火.拆卸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.*UI入宅.上梁.入殓.造屋.探病.作灶.安门.安葬.纳畜.伐木.嫁娶.纳采.订盟.开光.祭祀.出行.理发.动土.安床.放水.开渠.栽种.进人口.:o行丧.安葬.出行.作梁.纳畜.伐木.造桥.嫁娶.祭祀.祈福.求嗣.裁衣.冠笄.经络.修造.进人口.安床.动土.竖柱.上梁.移徙.交易.立券.栽种.会亲友.VEw入宅.嫁娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈福.求嗣.开光.普渡.出行.出火.拆卸.修造.动土.进人口.开市.交易.立券.移徙.安床.栽种.上梁.纳畜.破土.移柩.安葬.4 a掘井.理发.作灶.动土.破土.开池.嫁娶.开光.祭祀.祈福.求嗣.安香.出火.解除.伐木.入宅.移徙.安床.开市.交易.立券.栽种.出火.出行.安葬.P aQ祈福.纳采.订盟.嫁娶.入宅.安葬.破屋.坏垣.治病.余事勿取.f E嫁娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.捕捉.除服.成服.余事勿取.S Sc斋醮.开市.开仓.作灶.造船.嫁娶.祭祀.祈福.求嗣.出火.出行.开光.解除.拆卸.修造.进人口.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除服.成服.z k嫁娶.词讼.治病.置产.作梁.祈福.安葬.栽种.伐木.安门.修饰垣墙.平治道涂.祭祀.沐浴.作灶.I 伐木.谢土.行丧.祭祀.作灶.动土.破土.安葬.祈福.纳采.订盟.开光.出行.解除.安香.出火.拆卸.入宅.移徙.修造.上梁.安床.栽种.纳畜.会亲友.安机械.经络.#Q嫁娶.出行.进人口.作灶.入宅.移徙.栽种.赴任.祭祀.解除.拆卸.修造.动土.起基.上梁.安床.安门.开渠.开池.入殓.破土.启攒.}_+安床.动土.安葬.开生坟.合寿木.祭祀.裁衣.安门.纳财.扫舍.出行.进人口.作灶.纳畜.造畜椆栖.}开光.出行.修造.上梁.入宅.安门.作灶.裁衣.祭祀.动土.筑堤.开池.会亲友.塞穴.入殓.移柩.破土.安葬. 8 . c " P k f2R@c%}]造屋.入殓.安葬.伐木.入宅.移徙.置产.纳畜.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.安床.栽种.移柩.进人口.会亲友.除服.成服.}I动土.破土.理发.出行.入宅.分居.安香.出火.祭祀.开光.解除.移徙.裁衣.开市.立券.祈福.求嗣.进人口.交易.纳财.纳畜.E{栽种.作灶.针灸.出行.嫁娶.出火.拆卸.祭祀.祈福.开光.伐木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.h'9诸事不宜.祭祀.结网.入殓.移柩.启攒.安葬.移柩.除服.成服.合寿木.余事勿取.,'C诸事不宜.破屋.坏垣.余事勿取.^'%诸事不宜.祭祀.求医.捕捉.栽种.塞穴.入殓.破土.安葬.移柩.余事勿取.)~)9嫁娶.移徙.祭祀.求嗣.开光.出行.伐木.作梁.出火.解除.拆卸.进人口.修造.动土.起基.安床.栽种.纳畜.入殓.破土.安葬.除服.成服.N}'诸事不宜.祭祀.作灶.沐浴.修饰垣墙.平治道涂.余事勿取.|嫁娶.纳财.祈福.安葬.修造.开市.交易.立券.动土.上梁.塑绘.开光.进人口.纳畜.补垣.塞穴.栽种.牧养.{ %嫁娶.会亲友.进人口.出行.入宅.移徙.赴任.作灶.祭祀.解除.沐浴.理发.整手足甲.入殓.移柩.破土.安葬.扫舍.zSm破土.置产.掘井.动土.安床.祭祀.祈福.求嗣.开光.出行.解除.上梁.造屋.移徙.安门.纳财.牧养.纳畜.安葬.启攒.入殓.ya_造屋.开光.理发.造船.掘井.作灶.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.移徙.动土.安床.入殓.破土.安葬.启攒.x}入宅.作梁.安门.伐木.修造.上梁.入殓.造屋.嫁娶.祭祀.祈福.求嗣.出行.动土.安床.掘井.破土.启攒.Fw)u动土.安葬.订盟.纳采.祭祀.祈福.安机械.作灶.纳畜.]vgc安葬.破土.开市.开仓.出货财.启攒.纳采.订盟.嫁娶.移徙.入宅.出行.祭祀.祈福.斋醮.塑绘.开光.安香.出火.会亲友.解除.入学.竖柱.上梁.拆卸.造屋.起基.栽种.牧养.纳畜.KuYM入宅.开市.掘井.词讼.合寿木.嫁娶.订盟.纳采.祭祀.祈福.斋醮.开光.会亲友.求医.治病.造屋.起基.竖柱.上梁.安门.安碓磑.筑堤.开池.破土.安葬.除服.成服.YtSo祭祀.祈福.探病.谢土.造桥.嫁娶.开市.立券.移徙.入宅.安机械.会亲友.经络.安门.安床.挂匾.拆卸.开仓.出货财.开池.栽种.纳畜.牧养.破土.安葬.启攒.移柩.入殓.立碑.4s)Q嫁娶.安葬.破屋.坏垣.解除.余事勿取.&rA嫁娶.斋醮.开市.出火.入宅.移徙.出行.作灶.安门.伐木.祭祀.祈福.解除.整手足甲.安床.沐浴.入殓.移柩.破土.启攒.安葬.谢土.Lqo9嫁娶.作灶.出火.置产.嫁娶.入宅.安葬.纳采.订盟.会亲友.入学.祭祀.祈福.求嗣.开光.出行.解除.理发.动土.起基.开市.交易.立券.纳财.造仓.栽种.纳畜.牧养.<+EE动土.破土.治病.开渠.祭祀.嫁娶.畋猎.结网.E*}上梁.入宅.修造.动土.破土.祭祀.祈福.斋醮.嫁娶.纳采.订盟.造车器.开光.出行.拆卸.起基.安床.除服.成服.开市.交易.立券.栽种.牧养.入殓.移柩.启攒.Q)S_开市.入宅.出行.安床.作灶.修造.动土.安机械.祭祀.沐浴.解除.拆卸.治病.作灶.造屋.起基.开池.扫舍.造畜椆栖.开生坟.合寿木.安葬.破土.启攒.移柩.入殓.立碑.,(M移徙.入宅.栽种.动土.破土.作灶.安葬.行丧.伐木.上梁.嫁娶.祭祀.出行.裁衣.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|'a'开光.治病.嫁娶.掘井.破土.安葬.经络.祭祀.沐浴.补垣.塞穴.除服.成服.移柩.入殓.启攒.立碑.B&o%移徙.栽种.出行.行丧.破土.安葬.词讼.嫁娶.纳采.订盟.祭祀.祈福.求嗣.纳采.裁衣.冠笄.开光.安床.作梁.修造.动土.作灶.起基.上梁.造屋.纳畜.牧养. x ? % $ ? G1\;sb1f%开渠.造船.安床.安葬.破土.出行.修坟.掘井.开市.开生坟.祭祀.冠笄.作灶.交易.纳财.栽种.结网.纳畜.牧养.进人口.V$Kq掘井.伐木.纳畜.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.入殓.破土.谢土.安葬.E#SG入宅.移徙.作灶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.嫁娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.栽种.破土.启攒.安葬.立碑.,"'C诸事不宜.破屋.坏垣.余事勿取.n! a嫁娶.开市.出火.作灶.置产.斋醮.入宅.移徙.安门.解除.祭祀.理发.入殓.安葬.破土. oQ嫁娶.栽种.行丧.理发.修坟.行丧.作灶.祭祀.祈福.求嗣.开光.伐木.出火.拆卸.入宅.安床.修造.动土.上梁.挂匾.纳畜.,'C诸事不宜.祭祀.解除.余事勿取.}5作灶.动土.上梁.栽种.入宅.移徙.修造.祈福.嫁娶.开光.解除.安床.牧养.理发.开市.入殓.启攒.移柩.安葬.扫舍." G嫁娶.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.栽种.纳畜.入殓.启攒.除服.成服.t_嫁娶.作灶.安葬.动土.词讼.作梁.伐木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^'%余事勿取.祭祀.入殓.破土.除服.成服.移柩.启攒.安葬.谢土.余事勿取.m}o嫁娶.出行.安葬.入殓.入宅.作灶.冠笄.上梁.祭祀.祈福.求嗣.开光.开市.牧养.理发.i}g安葬.经络.修坟.破土.开市.安床.启攒.立碑.祭祀.作灶.纳财.栽种.纳畜.进人口." G嫁娶.开光.出行.祈福.求嗣.解除.拆卸.动土.修造.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.纳畜.入殓.移柩.安葬.E{伐木.祭祀.纳畜.祭祀.嫁娶.开光.出行.理发.作梁.出火.拆卸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.栽种.,'C诸事不宜.破屋.坏垣.余事勿取.}嫁娶.入宅.移徙.作灶.开市.交易.安门.栽种.祭祀.解除.沐浴.整手足甲.入殓.移柩.破土.启攒.安葬.oW嫁娶.破土.置产.栽种.安葬.修坟.行丧.入宅.移徙.安床.开光.祈福.求嗣.进人口.开市.交易.立券.出火.拆卸.修造.动土.ja开仓.出货财.置产.安葬.动土.破土.掘井.栽种.嫁娶.祭祀.裁衣.结网.冠笄.沐浴.qS开市.入宅.出行.修造.词讼.祭祀.沐浴.理发.整手足甲.修饰垣墙.平治道涂.余事勿取.{a%嫁娶.安床.作灶.动土.破土.造船.安机械.祭祀.祈福.求嗣.沐浴.解除.纳采.开市.修造.竖柱.上梁.开柱眼.安碓磑.归岫.补垣.塞穴.拆卸.放水.出火.扫舍.开生坟.合寿木.安葬.谢土.启攒.除服.成服.JQS安葬.开生坟.合寿木.行丧.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.修造.进人口.入宅.移徙.动土.安床.纳畜.栽种.纳财.交易.立券.挂匾.造畜椆栖.EEW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿取.am安床.祈福.出行.安葬.行丧.开光.嫁娶.合帐.裁衣.冠笄.伐木.上梁.出火.拆卸.移徙.修造.动土.安门.纳财.筑堤.栽种.塞穴.7 E9行丧.置产.入宅.安葬.嫁娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈福.求嗣.出行.解除.伐木.出火.入宅.拆卸.修造.动土.上梁.安床.栽种.破土.;FEC入宅.出行.掘井.安葬.祭祀.结网.余事勿取.ES_作灶.出火.祭祀.嫁娶.入宅.开市.交易.立券.挂匾.开光.解除.拆卸.动土.安床.修造.上梁.置产.栽种.破土.安葬.D)k出火.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土. f_ j s 1 b?*~M{1GUfECKQ移徙.入宅.开仓.出货财.祭祀.破屋.坏垣.余事勿取.^BS{嫁娶.开市.安葬.启攒.行丧.畋猎.捕捉.结网.取渔.祭祀.沐浴.余事勿取.LA7q动土.掘井.破土.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.启攒.除服.成服.k@7/破土.出行.栽种.嫁娶.祭祀.理发.作灶.修饰垣墙.平治道涂.整手足甲.沐浴.冠笄.l?a纳采.订盟.安床.谢土.破土.动土.嫁娶.开光.祭祀.祈福.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上梁.造屋.作灶.出火.安香.补垣.塞穴.拆卸.放水.扫舍.造仓.造船.栽种.安葬.d>aw行丧.安葬.破土.作灶.伐木.斋醮.纳采.订盟.嫁娶.祭祀.祈福.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆卸.扫舍.放水.安香.安床.造船.开池.掘井.造畜椆栖.栽种.E=EW斋醮.移徙.入宅.动土.祭祀.教牛马.断蚁.余事勿取.<-嫁娶.掘井.入宅.移徙.出火.出行.行丧.安葬.开光.理发.进人口.修造.动土.起基.安门.安床.栽种.筑堤.补垣.造畜椆栖.,;'C诸事不宜.解除.坏垣.余事勿取.,:'C诸事不宜.祭祀.作灶.余事勿取.&9}_嫁娶.出火.伐木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.栽种.安床.拆卸.修造.动土.上梁.入殓.安葬.破土.除服.成服.8oQ嫁娶.造桥.词讼.移徙.安门.作灶.栽种.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.经络.破土.,7'C诸事不宜.破屋.坏垣.余事勿取.6aQ嫁娶.开市.交易.行丧.安葬.修坟.祭祀.祈福.求嗣.开光.出行.伐木.出火.拆卸.修造.动土.起基.安床.入宅.移徙.)5 U嫁娶.祭祀.开光.祈福.求嗣.出行.出火.拆卸.动土.修造.进人口.入宅.移徙.安床.挂匾.交易.立券.栽种.纳畜.入殓.破土.启攒.安葬.r4a出行.安门.修造.嫁娶.上梁.入宅.祭祀.理发.修饰垣墙.平治道涂.沐浴.整手足甲.扫舍.&3)3置产.安床.开光.求嗣.出行.解除.伐木.出火.拆卸.修造.上梁.起基.入宅.移徙.开市.交易.立券.栽种.牧养.入殓.安葬.除服.成服.2E{安葬.行丧.伐木.作梁.嫁娶.祭祀.祈福.出火.开光.求嗣.出行.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.动土.,1'C诸事不宜.祭祀.解除.余事勿取.0E安葬.出行.祈福.栽种.求嗣.嫁娶.纳采.合帐.裁衣.冠笄.伐木.作梁.修造.动土.起基.竖柱.上梁.安门.作灶.筑堤.造畜椆栖./E{安葬.开市.交易.立券.嫁娶.开光.祭祀.祈福.求嗣.出行.解除.伐木.入宅.移徙.安床.出火.拆卸.修造.上梁.栽种.移柩.,.'C诸事不宜.祭祀.栽种.余事勿取.J-)}嫁娶.开光.开光.求医.治病.动土.上梁.入殓.破土.安葬.7,S+安床.上梁.裁衣.入宅.嫁娶.祭祀.祈福.求嗣.开光.订盟.纳采.解除.动土.起基.进人口.开市.交易.立券.纳财.造仓.开池.栽种.纳畜.破土.安葬.4+7A作灶.开市.经络.订盟.纳采.嫁娶.解除.祭祀.祈福.求嗣.开光.出行.解除.出火.拆卸.入宅.移徙.安床.栽种.纳畜.动土.破土.谢土.安葬.修坟.B*)m开光.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取.O)Kc开市.立券.造船.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.修造.进人口.入宅.移徙.安床.解除.挂匾.栽种.破土.谢土.入殓.移柩.安葬.ScSc作灶.嫁娶.移徙.入宅.理发.开市.交易.立券.挂匾.祭祀.祈福.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.启攒.除服.成服.立碑.bSs伐木.安葬.安床.祭祀.祈福.纳采.嫁娶.裁衣.理发.出行.修造.动土.进人口.开市.交易.立券.挂匾.移徙.上梁.栽种.纳畜. eH4 I ? P -e}Nddea 嫁娶.栽种.修造.动土.出行.伐木.作梁.安葬.谢土.开光.纳采.裁衣.冠笄.安床.作灶.进人口.造仓.塞穴.4`a作灶.安床.开仓.造屋.动土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.解除.出行.出火.入宅.移徙.栽种.纳畜.牧养.动土.破土.入殓.安葬.W_a_嫁娶.安葬.入宅.出行.动土.词讼.塞穴.断蚁.结网.畋猎.余事勿取.^ 安床.开渠.上梁.修造.开市.开光.入宅.移徙.安床.嫁娶.交易.立券.作厕.补垣.塞穴.畋猎.取渔.开生坟.I]}%入宅.移徙.修造.安门.伐木.入殓.安葬.造屋.祭祀.祈福.求嗣.开光.出行.开市.交易.立券.栽种.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.启攒.修坟.\ ;祭祀.伐木.架马.安床.修造.动土.安葬.修坟.破土.解除.出行.纳采.冠笄.竖柱.上梁.移徙.作灶.进人口.入宅.纳畜.牧养.[Sm嫁娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈福.开光.动土.安床.出行.栽种.纳畜.牧养.竖柱.上梁.解除.破土.:Z)[开市.立券.纳采.订盟.嫁娶.造车器.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.挂匾.入宅.移徙.安床.栽种.入殓.破土.安葬.除服.成服.:Y'_诸事不宜.破屋.坏垣.沐浴.解除.余事勿取.%X M祭祀.祈福.求嗣.开光.解除.合帐.冠笄.伐木.架马.作梁.修造.进人口.嫁娶.裁衣.合帐.安床.动土.起基.上梁.竖柱.放水.会亲友.)W U嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.解除.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上梁.安葬.破土.谢土.{V} 嫁娶.移徙.伐木.作梁.安床.祭祀.祈福.造屋.沐浴.平治道涂.扫舍.入殓.破土.安葬.除服.成服.BUa5塞穴.上梁.动土.伐木.安葬.词讼.进人口.会亲友.TE嫁娶.安床.探病.作灶.开市.交易.立券.挂匾.开光.出行.拆卸.进人口.入宅.移柩.动土.安门.上梁.栽种.破土.修坟.安葬.,S'C诸事不宜.解除.扫舍.余事勿取.R7{开光.掘井.开仓.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.动土.入宅.移徙.安床.作灶.塞穴.栽种.破土.安葬.Q'纳畜.入宅.移徙.安葬.探病.伐木.上梁.安门.入殓.动土.嫁娶.祭祀.祈福.求嗣.开光.开市.交易.立券.安床.出行.拆卸.,P'C诸事不宜.结网.解除.余事勿取."Oas入宅.移徙.理发.出火.嫁娶.出行.开市.交易.立券.祭祀.祈福.开光.伐木.进人口.安床.拆卸.修造.动土.栽种.破土.移柩.安葬.%N M嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.动土.上梁.出火.进人口.入宅.移徙.安床.栽种.纳畜.牧养.竖柱.安门.修造.解除.会亲友.:M'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.*LC嫁娶.上梁.修造.拆卸.架马.入宅.伐木.动土.出火.开柱眼.祭祀.开光.出行.解除.塑绘.裁衣.入殓.移柩.破土.启攒.安葬.除服.成服."K G嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.安门.开市.交易.立券.挂匾.栽种.破土.安葬.]J'#诸事不宜.沐浴.平治道涂.扫舍.入殓.移柩.破土.启攒.安葬.余事勿取.EI)s开市.安葬.订盟.纳采.会亲友.安床.作灶.造畜椆栖.Hae祈福.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.嫁娶.开市.出行.会亲友.安床.结网.除服.成服.启攒.安葬.移柩.HGo1纳采.出行.修坟.安葬.开市.立券.作灶.嫁娶.祭祀.祈福.求嗣.斋醮.开光.出火.移徙.入宅.竖柱.上梁.会亲友.造屋.起基.治病.治病.安门.造车器.掘井.开池.AFEO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿取.2Ea移徙.入宅.作灶.理发.开光.安门.祭祀.出行.修造.动土.合帐.造畜椆栖.安床.移徙.入殓.移柩.破土.启攒.安葬.开生坟.合寿木.补垣.塞穴. "Ya= Q H 2  g L {fXt@EY~E 作灶.安葬.祭祀.入殓.安香.出火.纳采.订盟.嫁娶.开市.立券.交易.挂匾.开光.出行.解除.安床.栽种.置产.拆卸.修造.动土.B})m嫁娶.入宅.祭祀.修门.取渔.纳财.纳畜.余事勿取.'|'5纳采.问名.订盟.嫁娶.入宅.开仓.出火.动土.破土.纳畜.伐木.开市.交易.立券.挂匾.祭祀.开光.祈福.求嗣.安床.解除.修造.安葬.I{){祈福.安葬.沐浴.塞穴.畋猎.结网.取渔.扫舍.余事勿取.Qz) 嫁娶.开市.祭祀.沐浴.解除.破屋.坏垣.求医.治病.余事勿取.y)k动土.破土.祭祀.解除.入殓.移柩.启攒.安葬.整手足甲.捕捉.畋猎.取渔.除服.成服.扫舍.谢土.斋醮.fxS 斋醮.开光.嫁娶.入宅.上梁.沐浴.祭祀.解除.安葬.破土.谢土.移柩.余事勿取.]w7嫁娶.安床.治病.祭祀.作灶.畋猎.结网.修饰垣墙.平治道涂.余事勿取.v}祈福.出火.置产.动土.破土.安葬.修造.上梁.置产.入宅.开光.出行.交易.塞穴.嫁娶.理发.开市.安床. uo;修坟.造桥.作灶.出行.安葬.造屋.入宅.祭祀.祈福.求嗣.开光.纳采.订盟.解除.栽种.纳畜.牧养.扫舍.进人口.LtEe开光.伐木.安葬.破土.祭祀.出行.教牛马.扫舍.余事勿取.sam嫁娶.掘井.探病.开市.开光.栽种.祭祀.裁衣.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.启攒.安葬.谢土.除服.成服.rE{祭祀.入殓.安葬.探病.嫁娶.祈福.求嗣.开光.出行.解除.拆卸.出火.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,q'C诸事不宜.解除.破屋.余事勿取.p +祭祀.祈福.求嗣.开光.解除.纳采.冠笄.出火.拆卸.进人口.安床.动土.上梁.造庙.掘井.开池.入殓.移柩.安葬.破土.,o'C诸事不宜.塞穴.扫舍.余事勿取.:n'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.m}Q动土.破土.纳财.掘井.挂匾.开市.伐木.交易.祭祀.祈福.求嗣.开光.解除.出火.拆卸.入宅.安床.修造.安门.纳畜.启攒.安葬.l 进人口.出行.嫁娶.置产.安床.赴任.安葬.作灶.祭祀.祈福.开光.解除.动土.纳财.交易.纳畜.扫舍.Fk'w诸事不宜.祭祀.平治道涂.解除.修饰垣墙.余事勿取.j}I谢土.祈福.上梁.作灶.斋醮.修造.入宅.安门.纳采.嫁娶.开光.出行.理发.会亲友.开市.安床.栽种.牧养.入殓.移柩.启攒.%i}]嫁娶.纳财.安葬.出行.开市.立券.作灶.栽种.祭祀.祈福.开光.求嗣.解除.伐木.出火.入宅.移徙.安床.拆卸.修造.动土.造畜椆栖.Ih'}诸事不宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿取.|g7Q词讼.开光.开市.嫁娶.出行.合帐.冠笄.安床.除服.成服.作灶.交易.立券.入殓.移柩.破土.安葬.faW祈福.入殓.祭祀.作灶.安葬.探病.嫁娶.开光.出行.出火.拆卸.进人口.开市.立券.交易.挂匾.入宅.移徙.安床.栽种.,e'C诸事不宜.解除.坏垣.余事勿取.d' 诸事不宜.cYm嫁娶.定磉.合寿木.安葬.行丧.祭祀.祈福.求嗣.斋醮.沐浴.开光.理发.经络.解除.治病.治病.立碑.栽种.牧养.掘井.开池.cb7嫁娶.开光.作灶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;a)_开光.嫁娶.破屋.坏垣.求医.治病.余事勿取.&}_开市.交易.作灶.纳财.上梁.安床.造屋.造船.嫁娶.开光.祭祀.祈福.求嗣.出行.出火.入宅.移徙.解除.栽种.伐木.破土.谢土.安葬.E动土.伐木.安葬.行丧.嫁娶.祭祀.开光.祈福.求嗣.出行.出火.进人口.入宅.移徙.安床.拆卸.修造.安门.挂匾.纳财.扫舍.~开仓.出货财.造屋.作灶.开市.交易.立券.栽种.祭祀.祈福.嫁娶.冠笄.修饰垣墙.置产.平治道涂.'动土.破土.安葬.行丧.赴任.出行.嫁娶.入宅.移徙.谢土.词讼.纳财.开市.立券.交易.开光.安床.上梁.造屋.修造.起基. p>   [ ,vp-;kE!嫁娶.作灶.掘井.安葬.塞穴.整手足甲.解除.捕捉.畋猎.结网.余事勿取.诸事不宜.Ey祈福.动土.移徙.入宅.祭祀.祈福.求嗣.斋醮.嫁娶.冠笄.出行.开市.交易.会亲友.教牛马.除服.成服.启攒.安葬.移柩.}C嫁娶.祭祀.开光.出行.出火.移徙.入宅.安门.安床.伐木.拆卸.修造.动土.上梁.立券.交易.栽种.纳畜.牧养.入殓.安葬.|EC合帐.开市.安葬.入殓.嫁娶.祭祀.开光.祈福.求嗣.出火.入宅.移徙.安床.拆卸.动土.破土.谢土.lK置产.伐木.纳畜.造畜椆栖.安葬.破土.作梁.作灶.开生坟.理发.冠笄.嫁娶.进人口.* W嫁娶.行丧.架马.作梁.理发.牧养.安葬.纳畜.伐木.开市.立券.交易.挂匾.祭祀.祈福.开光.入宅.移徙.安床.拆卸.动土.上梁.进人口. Ee开光.作灶.斋醮.安葬.嫁娶.祭祀.出行.冠笄.立券.交易.进人口.开市.移徙.修造.动土.安床.入殓.移柩.破土.:'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.^)#入宅.安门.祭祀.开光.塑绘.祈福.斋醮.裁衣.合帐.冠笄.嫁娶.拆卸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.理发.伐木.架马.作梁.出火.修造.起基.定磉.放水.赴任.])!伐木.作梁.祭祀.会亲友.订盟.裁衣.合帐.安机械.拆卸.上梁.安门.入殓.除服.成服.移柩.启攒.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.经络.< EE栽种.造屋.作灶.入宅.祭祀.嫁娶.纳婿.安葬.Y E}出行.斋醮.安葬.嫁娶.开光.塑绘.求嗣.纳采.裁衣.合帐.冠笄.安机械.作梁.开柱眼.安门.安床.造仓.祭祀.会亲友.祈福.经络.纳财.开市.立券.交易.入学.求嗣.理发.架马.4 E5安门.作灶.安葬.嫁娶.塞穴.诸事不宜.X E}掘井.动土.作灶.栽种.祭祀.出行.嫁娶.冠笄.安床.入殓.移柩.安葬.h E祭祀.开光.嫁娶.入宅.订盟.纳采.裁衣.合帐.冠笄.安机械.拆卸.安床.入殓.除服.成服.移柩.破土.启攒.安葬.修坟.立碑.经络.交易.立券.纳财.筑堤.造仓.补垣.塞穴.纳畜.伐木.架马.^E作灶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈福.塑绘.斋醮.沐浴.拆卸.起基.入宅.安香.造庙.移柩.谢土.除服.成服.入学.习艺.出行.竖柱.上梁.掘井.求嗣.解除.伐木.XE}作灶.开市.安葬.作梁.裁衣.合帐.冠笄.嫁娶.纳婿.安床.入殓.纳财.4E3嫁娶.栽种.伐木.安葬.祭祀.开光.塑绘.纳采.裁衣.拆卸.安床.起基.动土.竖柱.上梁.移徙.入宅.安香.开市.立券.挂匾.沐浴.出行.求嗣.安门.K/w开光.出货财.祭祀.动土.上梁.订盟.纳采.嫁娶.安机械.拆卸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.赴任.出行.移徙.祈福.求嗣.解除.造仓.进人口.-'E诸事不宜.破屋.坏垣.求医.治病.0E+安床.开市.立券.作灶.祭祀.祈福.斋醮.订盟.纳采.裁衣.合帐.拆卸.修造.动土.上梁.起基.移柩.安葬.谢土.沐浴.扫舍.开柱眼.伐木.出火.:)[栽种.伐木.祭祀.嫁娶.祈福.纳采.裁衣.合帐.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲友.挂匾.交易.立券.纳财.造仓.放水.^E造屋.作灶.治病.探病.冠笄.入殓.除服.成服.移柩.平治道涂.修饰垣墙.HE]祭祀.祈福.安葬.安门.作灶.解除.平治道涂.余事勿取.pS嫁娶.开市.动土.作灶.安葬.会亲友.冠笄.安床.会亲友.安机械.祭祀.祈福.求嗣.经络.7~S+移徙.入宅.出火.作灶.掘井.祭祀.祈福.求嗣.开光.嫁娶.出行.解除.伐木.拆卸.进人口.安床.动土.起基.上梁.栽种.纳畜.破土.谢土.启攒.安葬. }}'入宅.出行.移徙.祭祀.嫁娶.动土.破土.作灶.开光.解除.伐木.竖柱.上梁.交易.立券.纳畜.入殓.移柩.安葬. YM C n 2 '8.+<0^zY|4} 栽种.开光.出行.针灸.嫁娶.入宅.动土.破土.祭祀.祈福.求嗣.纳畜.入殓.启攒.谢土.除服.成服.3{I入宅.安葬.伐木.作梁.纳畜.造畜椆栖.作灶.嫁娶.祭祀.开光.祈福.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲友.{2%a嫁娶.词讼.行丧.安葬.牧养.伐木.作梁.开市.纳畜.造畜椆栖.祭祀.沐浴.理发.作灶.结网.栽种._1)%嫁娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除服.成服.余事勿取. 0u3开市.嫁娶.安床.会亲友.入宅.作灶.上梁.祭祀.斋醮.沐浴.开生坟.除服.成服.移柩.入殓.破土.安葬.合寿木.;/)_开市.嫁娶.求医.治病.破屋.坏垣.余事勿取.X.aa开市.作灶.安床.入宅.上梁.裁衣.动土.入殓.嫁娶.移柩.安葬.破土.)-S开光.造屋.动土.作灶.栽种.造车器.纳采.订盟.祭祀.祈福.求嗣.移徙.出行.开市.出火.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?,'i诸事不宜.修饰垣墙.平治道涂.祭祀.余事勿取.%+S入宅.作灶.治病.安葬.移徙.嫁娶.冠笄.纳采.出行.会亲友.上梁.安机械.安床.牧养.畋猎.祭祀.祈福.开光.修造.安门.造屋.起基.=*'c诸事不宜.嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.启攒.除服.成服.;)'a诸事不宜.裁衣.伐木.作梁.纳财.交易.立券.n(75词讼.出火.入宅.祭祀.合帐.裁衣.经络.伐木.作梁.安床.作灶.入殓.安葬.启攒.移柩.'oC入宅.作灶.伐木.安葬.出火.出行.纳畜.嫁娶.开光.祈福.求嗣.解除.动土.安床.栽种.开池.掘井.祭祀.破土.启攒."&}W嫁娶.安葬.破土.作梁.纳畜.牧养.行丧.作灶.移徙.祭祀.开光.祈福.出行.解除.进人口.雇庸.安床.动土.起基.上梁.安门.解除.B%'o诸事不宜.结网.入殓.除服.成服.移柩.安葬.破土.$7 嫁娶.作灶.安床.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.入宅.移徙.上梁.挂匾.开池.入殓.安葬.破土.启攒.;#'a余事勿取.祭祀.解除.治病.破屋.坏垣.扫舍."E{开市.立券.理发.作灶.嫁娶.祭祀.祈福.出行.解除.出火.拆卸.动土.入宅.移徙.安床.上梁.栽种.纳畜.破土.启攒.安葬.!')诸事不宜.解除.沐浴.f C栽种.出行.祈福.行丧.纳畜.安葬.安门.伐木.作梁.牧养.作灶.解除.平治道涂.5入宅.移徙.出火.分居.安香.作灶.开市.交易.立券.安葬.动土.伐木.嫁娶.开光.求嗣.会亲友.安床.牧养.塑绘.针灸.)掘井.词讼.嫁娶.安床.开光.出行.祭祀.动土.出火.解除.会亲友.开市.交易.立券.挂匾.入宅.移徙.拆卸.破土.启攒.安葬.oQ嫁娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.裁衣.竖柱.上梁.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.启攒.u o开光.掘井.针灸.出行.嫁娶.入宅.移徙.作灶.动土.祭祀.祈福.求嗣.入殓.启攒.安葬.移柩.7 q入宅.置产.嫁娶.动土.栽种.开市.开光.动土.破土.祭祀.祈福.求嗣.沐浴.问名.交易.纳财.入殓.移柩.安葬.修坟.立碑.谢土.造畜椆栖.教牛马..S嫁娶.合帐.入宅.行丧.安葬.纳采.订盟.祭祀.祈福.求嗣.斋醮.沐浴.进人口.会亲友.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.QaS嫁娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.捕捉.畋猎.nSS嫁娶.入宅.作灶.纳采.订盟.祭祀.斋醮.入殓.破土.启攒.安葬.修坟.立碑.除服.成服.sRS#祈福.造庙.祭祀.安床.谢土.嫁娶.纳采.订盟.开光.安香.出火.纳财.开市.交易.立券.裁衣.造屋.起基.修造.动土.安门.移徙.入宅.栽种.牧养.畋猎.掘井.开池.安葬.破土.入殓.除服.成服.立碑.BQ7_开市.动土.破土.祭祀.破屋.坏垣.解除.余事勿取. Z'0 O  d  h &g6.QiZ4Po 伐木.开市.交易.上梁.作灶.安门.造屋.嫁娶.纳采.订盟.入宅.移徙.安床.祭祀.祈福.开光.出行.解除.出火.拆卸.动土.纳畜.谢土.安葬.破土.#OC开市.行丧.栽种.出行.出货财.安葬.置产.词讼.治病.嫁娶.祭祀.开光.伐木.出火.拆卸.入宅.移徙.修造.动土.上梁.安床.纳畜.]N}O移徙.入宅.掘井.造庙.栽种.针灸.治病.开池.解除.平治道涂.余事勿取.M}C掘井.祈福.谢土.动土.入宅.上梁.修造.作灶.嫁娶.出行.理发.安床.启攒.安葬.修坟.开市.交易.立券.纳财.开池.牧养.&LE入宅.安门.祭祀.谢土.沐浴.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.启攒.修坟.立碑.移柩.YKE嫁娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.针灸.余事勿取.J 置产.嫁娶.出行.开光.栽种.动土.破土.入宅.治病.安床.裁衣.交易.立券.入殓.移柩.安葬.除服.成服.&I O嫁娶.栽种.安葬.理发.造庙.作灶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈福.求嗣.动土.,H'C诸事不宜.祭祀.解除.余事勿取.^G'%余事勿取.祭祀.入殓.破土.除服.成服.启攒.安葬.修坟.立碑.余事勿取.FE 安床.伐木.祈福.纳畜.嫁娶.开市.交易.立券.开光.出行.出火.拆卸.修造.入宅.移徙.动土.破土.移柩.安葬.启攒.除服.成服.,E'C诸事不宜.破屋.坏垣.余事勿取. D}-掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.开光.入宅.移徙.安床.修造.动土.进人口.C}A掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.动土.会亲友.起基.造仓.纳畜.牧养.作厕.进人口.FB'w余事勿取.祭祀.解除.修饰垣墙.平治道涂.余事勿取.A'修造.上梁.入宅.祈福.探病.掘井.动土.安门.安葬.作灶.开市.交易.立券.纳财.开池.补垣.嫁娶.纳采.纳畜.取渔.安床.@E 嫁娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.伐木.作梁.出火.入宅.移徙.安床.拆卸.动土.上梁.栽种.纳畜.安葬.=?'e余事勿取.解除.扫舍.祭祀.教牛马.余事勿取.>Ek作灶.掘井.嫁娶.入宅.祭祀.祈福.斋醮.沐浴.安床.安机械.造车器.入殓.移柩.启攒.安葬.立碑.合帐.经络.交易. =E]栽种.嫁娶.入殓.安葬.祭祀.出行.沐浴.裁衣.祈福.斋醮.订盟.纳采.嫁娶.安机械.开市.立券.安碓磑.纳畜.|<EC开仓.造屋.安葬.安床.祭祀.祈福.斋醮.塑绘.开光.除服.成服.入殓.作灶.嫁娶.捕捉.畋猎.纳财.Q;) 破土.伐木.入殓.除服.成服.移柩.启攒.安葬.立碑.余事勿取.u:)Q入宅.安床.塑绘.开光.出行.订盟.纳采.除服.成服.嫁娶.纳婿.入殓.移柩.启攒.安葬.立碑.39'Q诸事不宜.解除.破屋.坏垣.余事勿取.48)Q移徙.入宅.破屋.坏垣.治病.余事勿取.7Kq开生坟.破土.行丧.安葬.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.进人口.会亲友.伐木.作梁.开柱眼.安床.掘井.捕捉.畋猎.]6E开市.造庙.置产.掘井.纳采.订盟.祭祀.祈福.开光.安香.出火.出行.会亲友.安机械.修造.动土.竖柱.上梁.造屋.起基.定磉.安床.安门.拆卸.移徙.造桥.造船.安葬.破土.入殓.]5Sy嫁娶.入宅.纳采.订盟.掘井.祭祀.平治道涂.除服.成服.安葬.余事勿取.q̍a嫁娶.动土.破土.祈福.出火.入宅.纳采.订盟.开市.交易.立券.出行.会亲友.安机械.竖柱.上梁.平治道涂.伐木.拆卸.造屋.起基.安床.安门.解除.安葬.启攒.除服.成服.修坟.立碑.移柩.入殓.S̍Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门. !M` 7 : u @ E /RY gM̍ S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.̍ aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.̍ 5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.̍ 伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,̍ 'C诸事不宜.解除.扫舍.余事勿取.̍EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:̍'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,̍'C诸事不宜.祭祀.解除.余事勿取.̍a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2̍'O诸事不宜.祭祀.修饰垣墙.余事勿取. ̍5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.̍a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;̍'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ̍aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#̌5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m̌~37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,̌}'C诸事不宜.解除.坏垣.余事勿取.̌|a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3̌{'Q诸事不宜.治病.破屋.坏垣.余事勿取.Řz) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."̌y)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+̌x'A诸事不宜.平治道涂.余事勿取.Ňw)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.̌v祈福.谢土.安葬.上梁.作灶.开市.嫁娶.出行.入宅.动土.祭祀.塑绘.理发.会亲友.牧养.开池.造畜椆栖.畋猎.结网.Ǒu7w作灶.经络.安床.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.进人口.开市.立券.挂匾.入宅.移徙.安门.栽种.动土.求医.治病.会亲友.起基.修造.造屋.安葬.V̌tSk开市.动土.破土.嫁娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿取.f̌sS 置产.造船.开光.掘井.作灶.合帐.裁衣.嫁娶.安床.入殓.移柩.破土.造畜椆栖.?̌rm伐木.上梁.修造.入殓.理发.会亲友.入宅.安门.安葬.作灶.嫁娶.冠笄.祭祀.祈福.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆卸.破土.ěqa{嫁娶.入宅.开市.安床.破土.修坟.沐浴.扫舍.捕捉.畋猎.解除.塞穴.余事勿取. ̌*gC嫁娶.进人口.入宅.移徙.出火.出行.祭祀.祈福.求嗣.开光.解除.伐木.拆卸.修造.栽种.纳畜.安葬.修坟.立碑.č)Y}上梁.开仓.出货财.造屋.造船.纳采.订盟.嫁娶.祭祀.祈福.雕刻.移徙.开市.入宅.出行.动土.会亲友.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;̌()_嫁娶.安葬.破屋.坏垣.求医.治病.余事勿取.̌'Qs嫁娶.动土.造船.开池.掘井.出行.修造.入宅.上梁.移徙.安葬.破土.作灶.开市.祭祀.理发.针灸.解除.进人口.整手足甲. oj0 e a >.W7ǒ&7{栽种.掘井.置产.嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.开市.交易.立券.挂匾.伐木.入宅.移徙.安床.安葬.̌%a_祈福.祭祀.伐木.掘井.作灶.谢土.嫁娶.开光.出行.出火.拆卸.修造.动土.入宅.移徙.安床.上梁.开市.交易.立券.栽种. ̌$5u嫁娶.冠笄.出行.祈福.安葬.伐木.入宅.移徙.出火.栽种.动土.上梁.开光.裁衣.安门.会亲友.安床.结网.理发. ̌#)置产.安床.嫁娶.开光.出行.解除.出火.拆卸.修造.进人口.动土.入宅.移徙.栽种.纳畜.掘井.安葬.除服.成服.,̌"'C余事勿取.祭祀.沐浴.余事勿取.̌!}入宅.移徙.嫁娶.掘井.作灶.出火.进人口.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.启攒.%̌ '5余事勿取.解除.余事勿取.q̌o安床.开市.交易.出货财.安葬.修坟.嫁娶.作灶.祭祀.沐浴.结网.移柩.入殓.除服.成服.̌aW入宅.作灶.词讼.移徙.出行.赴任.祭祀.祈福.求嗣.开光.解除.理发.会亲友.栽种.纳畜.牧养.安葬.修坟.立碑.启攒.̌)探病.安葬.嫁娶.祭祀.开光.出火.出行.拆卸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.栽种.纳畜.,̌'C诸事不宜.破屋.坏垣.余事勿取. ̌5嫁娶.开市.出火.栽种.破土.动土.入宅.移徙.安香.分居.掘井.作灶.开光.解除.拆卸.修造.动土.安床.纳畜.安葬.启攒.入殓.)̌ U嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.出行.拆卸.进人口.入宅.移徙.安床.栽种.动土.修造.纳畜.入殓.安葬.立碑.除服.成服.̌}Q栽种.破土.置产.祭祀.嫁娶.动土.作灶.祈福.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.̌''诸事不宜.诸事不宜.V̌!开市.祭祀.祈福.斋醮.塑绘.开光.订盟.纳采.裁衣.冠笄.嫁娶.拆卸.入宅.安香.入殓.移柩.理发.安葬.修坟.谢土.赴任.移徙.沐浴.治病.破土.启攒.整手足甲.入学.作梁.ŠEs嫁娶.动土.安葬.作灶.祭祀.沐浴.出行.冠笄.进人口.余事勿取.`̌)'入宅.作灶.祈福.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.̌''诸事不宜.诸事不宜.,̌'C诸事不宜.沐浴.扫舍.余事勿取.[̌Su嫁娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲友.纳财.理发.捕捉.v̌a探病.纳畜.伐木.起基.作梁.造屋.嫁娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈福.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆卸.修造.动土.栽种.安葬.破土.启攒.除服.成服.入殓.立碑.̌oO祈福.斋醮.纳采.订盟.嫁娶.入宅.安葬.祭祀.求嗣.冠笄.进人口.会亲友.安门.安床.经络.纳财.牧养.畋猎.放水.割蜜.P̌S_嫁娶.入宅.上梁.出行.安葬.祭祀.沐浴.破屋.坏垣.余事勿取.̌}Q入宅.移徙.掘井.理发.伐木.交易.开市.作灶.嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.修造.动土.上梁.安床.纳畜.入殓.破土.ě a{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.启攒.安葬.除服.成服.余事勿取.q̋Ga嫁娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治道涂.造畜椆栖.余事勿取.E̋F'q开市.入宅.出行.嫁娶.修坟.祈福.动土.入宅.安门.谢土.上梁.纳采.订盟.会亲友.沐浴.理发.裁衣.冠笄.安床.除服.成服.启攒.移柩.安葬.会亲友.开生坟.̋E}A嫁娶.安葬.行丧.词讼.造桥.作灶.破土.动土.祭祀.开光.出行.解除.理发.伐木.出火.拆卸.上梁.合脊.安床.造畜椆栖.̋Da]伐木.行丧.破土.嫁娶.安葬.开渠.祭祀.祈福.求嗣.开光.出行.解除.上梁.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.̋C)开光.栽种.嫁娶.祭祀.祈福.求嗣.动土.安床.扫舍.入殓.移柩.破土.启攒.安葬.作灶.整手足甲.补垣.除服.成服. ! l  W  I 9[pCxS.]̋B)安床.安葬.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.进人口.开市.交易.立券.挂匾.纳财.入宅.移徙.栽种.破土.谢土.<̋AEE安葬.开市.修坟.立碑.嫁娶.祭祀.作灶.纳财. ̋@}'纳畜.伐木.置产.作梁.行丧.安葬.修坟.立碑.嫁娶.祭祀.开市.开光.出行.入宅.移徙.出火.拆卸.修造.安床.{̋?o上梁.作灶.伐木.出行.安葬.安门.理发.嫁娶.求嗣.纳采.进人口.纳财.结网.纳畜.牧养.会亲友.:̋>'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.a̋='+余事勿取.祭祀.入殓.移柩.开生坟.破土.启攒.安葬.除服.成服.余事勿取.H̋<'{余事勿取.入殓.破土.安葬.启攒.除服.成服.余事勿取.8̋;'[诸事不宜.造畜椆栖.平治道涂.余事勿取.̋: -嫁娶.作灶.出火.出行.入宅.移徙.安床.祈福.上梁.开市.交易.立券.纳财.会亲友.开光.理发.入殓.移柩.安葬.启攒.̋9}5安葬.修坟.作灶.破土.造庙.动土.嫁娶.纳采.祭祀.祈福.求嗣.开光.出行.解除.移徙.伐木.安床.纳畜.出火.拆卸.̋8gG动土.伐木.作梁.行丧.安葬.开生坟.祭祀.出行.裁衣.冠笄.会亲友.造畜椆栖.嫁娶.竖柱.上梁.移徙.纳财.纳畜.̋7g[嫁娶.开光.会亲友.掘井.安门.栽种.祭祀.解除.裁衣.理发.安床.作灶.造畜椆栖.放水.筑堤.补垣.塞穴.整手足甲.扫舍. ̋6}'嫁娶.作灶.修坟.安门.入宅.立碑.安葬.安床.祭祀.祈福.求嗣.开光.开市.出行.解除.动土.起基.置产.栽种.,̋5'C诸事不宜.祭祀.塞穴.余事勿取.g̋4)5斋醮.安门.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.B̋3)m祈福.安葬.订盟.纳采.会亲友.安机械.纳财.牧养.:̋2'_余事勿取.祭祀.解除.破屋.坏垣.余事勿取.`̋1)'开市.赴任.嫁娶.订盟.纳采.出行.祭祀.祈福.动土.移徙.入宅.破土.安葬.C̋0)o移徙.入宅.入殓.除服.成服.移柩.破土.启攒.安葬.̋/u;作灶.出火.进人口.开渠.入宅.移徙.祭祀.开光.祈福.求嗣.斋醮.修造.动土.纳财.造仓.作厕.栽种.牧养.会亲友.Ű.Ew嫁娶.入宅.安床.出行.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.0̋-o斋醮.嫁娶.行丧.动土.作灶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.栽种.进人口.入宅.移徙.安床.开光.出火.拆卸.安门.修造.3̋,a造庙.行丧.安葬.伐木.作灶.造船.嫁娶.纳采.祭祀.解除.出行.修造.动土.开市.上梁.安床.整手足甲.扫舍.求医.治病.起基.定磉.造屋.合脊.P̋+Em动土.破土.置产.掘井.祭祀.出行.沐浴.扫舍.安葬.余事勿取.%̋*S祈福.开光.开市.入宅.动土.嫁娶.冠笄.安机械.解除.纳畜.牧养.沐浴.伐木.架马.作梁.安门.扫舍.合寿木.安葬.启攒.立碑.修坟.e̋)a{开市.入宅.嫁娶.动土.破土.安葬.祭祀.修坟.除服.成服.启攒.移柩.余事勿取. ̊b 开仓.出货财.伐木.纳畜.开市.上梁.造屋.破土.启攒.栽种.嫁娶.祭祀.理发.进人口.作灶.移柩.冠笄.会亲友.#̊a5嫁娶.破土.进人口.出行.入宅.移徙.出火.纳畜.词讼.安葬.开市.交易.立券.纳财.挂匾.栽种.祭祀.祈福.开光.拆卸.动土.安床.å`S开市.掘井.开渠.造桥.造船.嫁娶.纳采.订盟.祭祀.开光.出行.理发.作梁.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.移徙.拆卸.挂匾.栽种.纳畜.破土.安葬.入殓.除服.成服.:̊_'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.,̊^'C诸事不宜.解除.坏垣.余事勿取.0̊] c嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.栽种.纳畜.入殓.安葬.除服.成服.F̊\'w诸事不宜.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取. EUG P w !axB d3}cUE|̊[a'作灶.行丧.理发.乘船.嫁娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出火.上梁. ̊ZSO伐木.行丧.作灶.作梁.安葬.嫁娶.祭祀.塑绘.开光.出行.解除.理发.整手足甲.动土.安床.开池.放水.扫舍.3̊Y'Q诸事不宜.祭祀.出行.扫舍.余事勿取.̊Xo'掘井.祈福.安床.开市.入宅.挂匾.开光.嫁娶.出行.伐木.拆卸.修造.动土.移徙.安葬.破土.修坟.立碑.H̊W'{余事勿取.祭祀.立碑.修坟.启攒.除服.成服.余事勿取.m̊Va 探病.开渠.安葬.伐木.作灶.入宅.祭祀.理发.会亲友.进人口.嫁娶.针灸.入殓.移柩."̊U}W嫁娶.立碑.出行.伐木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人口.入宅.安床.出火.拆卸.修造.动土.栽种.0̊T c嫁娶.祈福.求嗣.出行.出火.拆卸.修造.动土.上梁.开光.进人口.开市.交易.立券.挂匾.安床.入宅.移徙.栽种.伐木.入殓.破土.除服.成服.,̊S'C诸事不宜.破屋.坏垣.余事勿取.#̊R5嫁娶.出行.安床.作灶.祭祀.入宅.移徙.出火.进人口.置产.开光.解除.起基.动土.拆卸.上梁.立碑.修坟.安葬.破土.启攒.移柩.0̊Q c嫁娶.祭祀.祈福.求嗣.沐浴.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.入宅.移徙.安床.栽种.纳畜.入殓.安葬.启攒.除服.成服.W̊PE{嫁娶.移徙.入宅.开市.沐浴.入殓.移柩.除服.成服.破土.平治道涂.̊O''诸事不宜.诸事不宜.:̊N'_诸事不宜.祭祀.沐浴.赴任.出行.余事勿取._̊Moa动土.冠笄.移徙.入宅.开市.竖柱.上梁.祭祀.出行.成服.除服.沐浴.入殓. ̊LEe安床.开光.开市.交易.祭祀.裁衣.冠笄.嫁娶.安机械.拆卸.动土.起基.移徙.入宅.入殓.启攒.安葬.造仓.经络.4̊KE5入殓.安葬.开市.交易.祭祀.诸事不宜.*̊JI入宅.上梁.入殓.造屋.探病.作灶.安门.安葬.纳畜.伐木.嫁娶.纳采.订盟.开光.祭祀.出行.理发.动土.安床.放水.开渠.栽种.进人口.:̊Io行丧.安葬.出行.作梁.纳畜.伐木.造桥.嫁娶.祭祀.祈福.求嗣.裁衣.冠笄.经络.修造.进人口.安床.动土.竖柱.上梁.移徙.交易.立券.栽种.会亲友.V̊HEw入宅.嫁娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈福.求嗣.开光.普渡.出行.出火.拆卸.修造.动土.进人口.开市.交易.立券.移徙.安床.栽种.上梁.纳畜.破土.移柩.安葬.4̊Ga掘井.理发.作灶.动土.破土.开池.嫁娶.开光.祭祀.祈福.求嗣.安香.出火.解除.伐木.入宅.移徙.安床.开市.交易.立券.栽种.出火.出行.安葬.P̊FaQ祈福.纳采.订盟.嫁娶.入宅.安葬.破屋.坏垣.治病.余事勿取.f̊EE嫁娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.捕捉.除服.成服.余事勿取.S̉Sc斋醮.开市.开仓.作灶.造船.嫁娶.祭祀.祈福.求嗣.出火.出行.开光.解除.拆卸.修造.进人口.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除服.成服.z̉~k嫁娶.词讼.治病.置产.作梁.祈福.安葬.栽种.伐木.安门.修饰垣墙.平治道涂.祭祀.沐浴.作灶.Ỉ} 伐木.谢土.行丧.祭祀.作灶.动土.破土.安葬.祈福.纳采.订盟.开光.出行.解除.安香.出火.拆卸.入宅.移徙.修造.上梁.安床.栽种.纳畜.会亲友.安机械.经络.#̉|Q嫁娶.出行.进人口.作灶.入宅.移徙.栽种.赴任.祭祀.解除.拆卸.修造.动土.起基.上梁.安床.安门.开渠.开池.入殓.破土.启攒.}̉{_+安床.动土.安葬.开生坟.合寿木.祭祀.裁衣.安门.纳财.扫舍.出行.进人口.作灶.纳畜.造畜椆栖.̉z}开光.出行.修造.上梁.入宅.安门.作灶.裁衣.祭祀.动土.筑堤.开池.会亲友.塞穴.入殓.移柩.破土.安葬.%̉y}]造屋.入殓.安葬.伐木.入宅.移徙.置产.纳畜.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.安床.栽种.移柩.进人口.会亲友.除服.成服. `\  O  E z 9gAc/O= `̉x}I动土.破土.理发.出行.入宅.分居.安香.出火.祭祀.开光.解除.移徙.裁衣.开市.立券.祈福.求嗣.进人口.交易.纳财.纳畜.̉wE{栽种.作灶.针灸.出行.嫁娶.出火.拆卸.祭祀.祈福.开光.伐木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.h̉v'9诸事不宜.祭祀.结网.入殓.移柩.启攒.安葬.移柩.除服.成服.合寿木.余事勿取.,̉u'C诸事不宜.破屋.坏垣.余事勿取.^̉t'%诸事不宜.祭祀.求医.捕捉.栽种.塞穴.入殓.破土.安葬.移柩.余事勿取.)̉s)9嫁娶.移徙.祭祀.求嗣.开光.出行.伐木.作梁.出火.解除.拆卸.进人口.修造.动土.起基.安床.栽种.纳畜.入殓.破土.安葬.除服.成服.N̉r'诸事不宜.祭祀.作灶.沐浴.修饰垣墙.平治道涂.余事勿取.̉q嫁娶.纳财.祈福.安葬.修造.开市.交易.立券.动土.上梁.塑绘.开光.进人口.纳畜.补垣.塞穴.栽种.牧养.̉p %嫁娶.会亲友.进人口.出行.入宅.移徙.赴任.作灶.祭祀.解除.沐浴.理发.整手足甲.入殓.移柩.破土.安葬.扫舍.̉oSm破土.置产.掘井.动土.安床.祭祀.祈福.求嗣.开光.出行.解除.上梁.造屋.移徙.安门.纳财.牧养.纳畜.安葬.启攒.入殓.̉na_造屋.开光.理发.造船.掘井.作灶.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.移徙.动土.安床.入殓.破土.安葬.启攒.̉m}入宅.作梁.安门.伐木.修造.上梁.入殓.造屋.嫁娶.祭祀.祈福.求嗣.出行.动土.安床.掘井.破土.启攒.F̉l)u动土.安葬.订盟.纳采.祭祀.祈福.安机械.作灶.纳畜.g̉k)5开光.针灸.嫁娶.订盟.纳采.祭祀.祈福.求医.治病.动土.移徙.入宅.破土.安葬.`̉j)'动土.破土.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.移徙.入宅.启攒.安葬.:̉i'_诸事不宜.沐浴.治病.破屋.坏垣.余事勿取.5̉h)S嫁娶.入宅.捕捉.结网.入殓.破土.安葬.C̉g)o开市.安葬.嫁娶.祭祀.祈福.斋醮.动土.移徙.入宅.L̉fo9嫁娶.作灶.出火.置产.嫁娶.入宅.安葬.纳采.订盟.会亲友.入学.祭祀.祈福.求嗣.开光.出行.解除.理发.动土.起基.开市.交易.立券.纳财.造仓.栽种.纳畜.牧养.<̉eEE动土.破土.治病.开渠.祭祀.嫁娶.畋猎.结网.Ẻd}上梁.入宅.修造.动土.破土.祭祀.祈福.斋醮.嫁娶.纳采.订盟.造车器.开光.出行.拆卸.起基.安床.除服.成服.开市.交易.立券.栽种.牧养.入殓.移柩.启攒.Q̉cS_开市.入宅.出行.安床.作灶.修造.动土.安机械.祭祀.沐浴.解除.拆卸.治病.作灶.造屋.起基.开池.扫舍.造畜椆栖.开生坟.合寿木.安葬.破土.启攒.移柩.入殓.立碑.,̉bM移徙.入宅.栽种.动土.破土.作灶.安葬.行丧.伐木.上梁.嫁娶.祭祀.出行.裁衣.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|̉aa'开光.治病.嫁娶.掘井.破土.安葬.经络.祭祀.沐浴.补垣.塞穴.除服.成服.移柩.入殓.启攒.立碑.B̉o%移徙.栽种.出行.行丧.破土.安葬.词讼.嫁娶.纳采.订盟.祭祀.祈福.求嗣.纳采.裁衣.冠笄.开光.安床.作梁.修造.动土.作灶.起基.上梁.造屋.纳畜.牧养.̉开渠.造船.安床.安葬.破土.出行.修坟.掘井.开市.开生坟.祭祀.冠笄.作灶.交易.纳财.栽种.结网.纳畜.牧养.进人口.V̉Kq掘井.伐木.纳畜.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.入殓.破土.谢土.安葬.ẺSG入宅.移徙.作灶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.嫁娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.栽种.破土.启攒.安葬.立碑.,̉'C诸事不宜.破屋.坏垣.余事勿取.n̉ a嫁娶.开市.出火.作灶.置产.斋醮.入宅.移徙.安门.解除.祭祀.理发.入殓.安葬.破土. ![ g 2 ` }4$k%Ei*[̉oQ嫁娶.栽种.行丧.理发.修坟.行丧.作灶.祭祀.祈福.求嗣.开光.伐木.出火.拆卸.入宅.安床.修造.动土.上梁.挂匾.纳畜.,̉'C诸事不宜.祭祀.解除.余事勿取.̉}5作灶.动土.上梁.栽种.入宅.移徙.修造.祈福.嫁娶.开光.解除.安床.牧养.理发.开市.入殓.启攒.移柩.安葬.扫舍."̉ G嫁娶.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.栽种.纳畜.入殓.启攒.除服.成服.t̉_嫁娶.作灶.安葬.动土.词讼.作梁.伐木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^̉'%余事勿取.祭祀.入殓.破土.除服.成服.移柩.启攒.安葬.谢土.余事勿取.m̉}o嫁娶.出行.安葬.入殓.入宅.作灶.冠笄.上梁.祭祀.祈福.求嗣.开光.开市.牧养.理发.ỉ}g安葬.经络.修坟.破土.开市.安床.启攒.立碑.祭祀.作灶.纳财.栽种.纳畜.进人口."̉  G嫁娶.开光.出行.祈福.求嗣.解除.拆卸.动土.修造.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.纳畜.入殓.移柩.安葬.̉ E{伐木.祭祀.纳畜.祭祀.嫁娶.开光.出行.理发.作梁.出火.拆卸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.栽种.,̉ 'C诸事不宜.破屋.坏垣.余事勿取.̉ }嫁娶.入宅.移徙.作灶.开市.交易.安门.栽种.祭祀.解除.沐浴.整手足甲.入殓.移柩.破土.启攒.安葬.̉ oW嫁娶.破土.置产.栽种.安葬.修坟.行丧.入宅.移徙.安床.开光.祈福.求嗣.进人口.开市.交易.立券.出火.拆卸.修造.动土.j̉a开仓.出货财.置产.安葬.动土.破土.掘井.栽种.嫁娶.祭祀.裁衣.结网.冠笄.沐浴.J̉7o祈福.动土.破土.嫁娶.出行.开市.安床.入殓.启攒.安葬.C̉)o开市.入宅.嫁娶.祭祀.祈福.斋醮.治病.破土.安葬.J̉)}动土.安葬.嫁娶.纳采.出行.祭祀.祈福.解除.移徙.入宅.^̉'%诸事不宜.补垣.塞穴.结网.入殓.除服.成服.移柩.安葬.启攒.余事勿取.J̉)}造庙.安葬.嫁娶.开市.立券.祭祀.祈福.动土.移徙.入宅.7̉E9行丧.置产.入宅.安葬.嫁娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈福.求嗣.出行.解除.伐木.出火.入宅.拆卸.修造.动土.上梁.安床.栽种.破土.;̉EC入宅.出行.掘井.安葬.祭祀.结网.余事勿取.̉S_作灶.出火.祭祀.嫁娶.入宅.开市.交易.立券.挂匾.开光.解除.拆卸.动土.安床.修造.上梁.置产.栽种.破土.安葬.̈)k出火.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.Ë~KQ移徙.入宅.开仓.出货财.祭祀.破屋.坏垣.余事勿取.^̈}S{嫁娶.开市.安葬.启攒.行丧.畋猎.捕捉.结网.取渔.祭祀.沐浴.余事勿取.L̈67q动土.掘井.破土.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.启攒.除服.成服.k̈57/破土.出行.栽种.嫁娶.祭祀.理发.作灶.修饰垣墙.平治道涂.整手足甲.沐浴.冠笄.l̈4a纳采.订盟.安床.谢土.破土.动土.嫁娶.开光.祭祀.祈福.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上梁.造屋.作灶.出火.安香.补垣.塞穴.拆卸.放水.扫舍.造仓.造船.栽种.安葬.d̈3aw行丧.安葬.破土.作灶.伐木.斋醮.纳采.订盟.嫁娶.祭祀.祈福.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆卸.扫舍.放水.安香.安床.造船.开池.掘井.造畜椆栖.栽种.Ë2EW斋醮.移徙.入宅.动土.祭祀.教牛马.断蚁.余事勿取.̈1-嫁娶.掘井.入宅.移徙.出火.出行.行丧.安葬.开光.理发.进人口.修造.动土.起基.安门.安床.栽种.筑堤.补垣.造畜椆栖.,̈0'C诸事不宜.解除.坏垣.余事勿取.,̈/'C诸事不宜.祭祀.作灶.余事勿取. d& '  / uGK(YH%vd&̈.}_嫁娶.出火.伐木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.栽种.安床.拆卸.修造.动土.上梁.入殓.安葬.破土.除服.成服.̈-oQ嫁娶.造桥.词讼.移徙.安门.作灶.栽种.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.经络.破土.,̈,'C诸事不宜.破屋.坏垣.余事勿取.̈+aQ嫁娶.开市.交易.行丧.安葬.修坟.祭祀.祈福.求嗣.开光.出行.伐木.出火.拆卸.修造.动土.起基.安床.入宅.移徙.)̈* U嫁娶.祭祀.开光.祈福.求嗣.出行.出火.拆卸.动土.修造.进人口.入宅.移徙.安床.挂匾.交易.立券.栽种.纳畜.入殓.破土.启攒.安葬.r̈)a出行.安门.修造.嫁娶.上梁.入宅.祭祀.理发.修饰垣墙.平治道涂.沐浴.整手足甲.扫舍.&̈()3置产.安床.开光.求嗣.出行.解除.伐木.出火.拆卸.修造.上梁.起基.入宅.移徙.开市.交易.立券.栽种.牧养.入殓.安葬.除服.成服.̈'E{安葬.行丧.伐木.作梁.嫁娶.祭祀.祈福.出火.开光.求嗣.出行.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.动土.,̈&'C诸事不宜.祭祀.解除.余事勿取.̈%E安葬.出行.祈福.栽种.求嗣.嫁娶.纳采.合帐.裁衣.冠笄.伐木.作梁.修造.动土.起基.竖柱.上梁.安门.作灶.筑堤.造畜椆栖.̈$E{安葬.开市.交易.立券.嫁娶.开光.祭祀.祈福.求嗣.出行.解除.伐木.入宅.移徙.安床.出火.拆卸.修造.上梁.栽种.移柩.,̈#'C诸事不宜.祭祀.栽种.余事勿取.J̈")}嫁娶.开光.开光.求医.治病.动土.上梁.入殓.破土.安葬.J̈!)}开光.开市.嫁娶.订盟.纳采.祭祀.祈福.入殓.破土.安葬.̈ ''诸事不宜.诸事不宜.R̈) 开市.安葬.订盟.纳采.出行.祭祀.祈福.修造.动土.移徙.入宅.`̈5作灶.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.;̈)_行丧.安葬.嫁娶.祭祀.沐浴.扫舍.修饰垣墙.̈Ss伐木.安葬.安床.祭祀.祈福.纳采.嫁娶.裁衣.理发.出行.修造.动土.进人口.开市.交易.立券.挂匾.移徙.上梁.栽种.纳畜.̈ 嫁娶.栽种.修造.动土.出行.伐木.作梁.安葬.谢土.开光.纳采.裁衣.冠笄.安床.作灶.进人口.造仓.塞穴.4̈a作灶.安床.开仓.造屋.动土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.开光.解除.出行.出火.入宅.移徙.栽种.纳畜.牧养.动土.破土.入殓.安葬.Ẅa_嫁娶.安葬.入宅.出行.动土.词讼.塞穴.断蚁.结网.畋猎.余事勿取.̇S 安床.开渠.上梁.修造.开市.开光.入宅.移徙.安床.嫁娶.交易.立券.作厕.补垣.塞穴.畋猎.取渔.开生坟.İR}%入宅.移徙.修造.安门.伐木.入殓.安葬.造屋.祭祀.祈福.求嗣.开光.出行.开市.交易.立券.栽种.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.启攒.修坟.̇Q ;祭祀.伐木.架马.安床.修造.动土.安葬.修坟.破土.解除.出行.纳采.冠笄.竖柱.上梁.移徙.作灶.进人口.入宅.纳畜.牧养.̇PSm嫁娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈福.开光.动土.安床.出行.栽种.纳畜.牧养.竖柱.上梁.解除.破土.:̇O)[开市.立券.纳采.订盟.嫁娶.造车器.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.挂匾.入宅.移徙.安床.栽种.入殓.破土.安葬.除服.成服.:̇N'_诸事不宜.破屋.坏垣.沐浴.解除.余事勿取.%̇M M祭祀.祈福.求嗣.开光.解除.合帐.冠笄.伐木.架马.作梁.修造.进人口.嫁娶.裁衣.合帐.安床.动土.起基.上梁.竖柱.放水.会亲友.)̇L U嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.解除.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上梁.安葬.破土.谢土.{̇K} 嫁娶.移徙.伐木.作梁.安床.祭祀.祈福.造屋.沐浴.平治道涂.扫舍.入殓.破土.安葬.除服.成服. $jze W  s  ?Dt6,|=RjḂJa5塞穴.上梁.动土.伐木.安葬.词讼.进人口.会亲友.̇IE嫁娶.安床.探病.作灶.开市.交易.立券.挂匾.开光.出行.拆卸.进人口.入宅.移柩.动土.安门.上梁.栽种.破土.修坟.安葬.,̇H'C诸事不宜.解除.扫舍.余事勿取.̇G7{开光.掘井.开仓.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.动土.入宅.移徙.安床.作灶.塞穴.栽种.破土.安葬.̇F'纳畜.入宅.移徙.安葬.探病.伐木.上梁.安门.入殓.动土.嫁娶.祭祀.祈福.求嗣.开光.开市.交易.立券.安床.出行.拆卸.,̇E'C诸事不宜.结网.解除.余事勿取."̇Das入宅.移徙.理发.出火.嫁娶.出行.开市.交易.立券.祭祀.祈福.开光.伐木.进人口.安床.拆卸.修造.动土.栽种.破土.移柩.安葬.%̇C M嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.动土.上梁.出火.进人口.入宅.移徙.安床.栽种.纳畜.牧养.竖柱.安门.修造.解除.会亲友.:̇B'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.*̇AC嫁娶.上梁.修造.拆卸.架马.入宅.伐木.动土.出火.开柱眼.祭祀.开光.出行.解除.塑绘.裁衣.入殓.移柩.破土.启攒.安葬.除服.成服."̇@ G嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.安门.开市.交易.立券.挂匾.栽种.破土.安葬.]̇?'#诸事不宜.沐浴.平治道涂.扫舍.入殓.移柩.破土.启攒.安葬.余事勿取.Ė>)s开市.安葬.订盟.纳采.会亲友.安床.作灶.造畜椆栖.`̇=)'移徙.入宅.嫁娶.订盟.纳采.出行.祭祀.祈福.斋醮.动土.上梁.破土.安葬.,̇<'C诸事不宜.塞穴.结网.余事勿取.Ẏ;)赴任.捕捉.嫁娶.裁衣.祭祀.出行.安床.作灶.移徙.入宅.破土.安葬.Ċ:)o嫁娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<̇97S动土.破土.安葬.嫁娶.纳采.出行.移徙.入宅.Ḃ8)m嫁娶.入宅.祭祀.修门.取渔.纳财.纳畜.余事勿取.'̇7'5纳采.问名.订盟.嫁娶.入宅.开仓.出火.动土.破土.纳畜.伐木.开市.交易.立券.挂匾.祭祀.开光.祈福.求嗣.安床.解除.修造.安葬.İ6){祈福.安葬.沐浴.塞穴.畋猎.结网.取渔.扫舍.余事勿取.Q̇5) 嫁娶.开市.祭祀.沐浴.解除.破屋.坏垣.求医.治病.余事勿取.̆n)k动土.破土.祭祀.解除.入殓.移柩.启攒.安葬.整手足甲.捕捉.畋猎.取渔.除服.成服.扫舍.谢土.斋醮.f̆mS 斋醮.开光.嫁娶.入宅.上梁.沐浴.祭祀.解除.安葬.破土.谢土.移柩.余事勿取.]̆l7嫁娶.安床.治病.祭祀.作灶.畋猎.结网.修饰垣墙.平治道涂.余事勿取.̆k}祈福.出火.置产.动土.破土.安葬.修造.上梁.置产.入宅.开光.出行.交易.塞穴.嫁娶.理发.开市.安床. ̆jo;修坟.造桥.作灶.出行.安葬.造屋.入宅.祭祀.祈福.求嗣.开光.纳采.订盟.解除.栽种.纳畜.牧养.扫舍.进人口.L̆iEe开光.伐木.安葬.破土.祭祀.出行.教牛马.扫舍.余事勿取.̆ham嫁娶.掘井.探病.开市.开光.栽种.祭祀.裁衣.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.启攒.安葬.谢土.除服.成服.̆gE{祭祀.入殓.安葬.探病.嫁娶.祈福.求嗣.开光.出行.解除.拆卸.出火.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,̆f'C诸事不宜.解除.破屋.余事勿取.̆e +祭祀.祈福.求嗣.开光.解除.纳采.冠笄.出火.拆卸.进人口.安床.动土.上梁.造庙.掘井.开池.入殓.移柩.安葬.破土.,̆d'C诸事不宜.塞穴.扫舍.余事勿取.:̆c'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.̆b}Q动土.破土.纳财.掘井.挂匾.开市.伐木.交易.祭祀.祈福.求嗣.开光.解除.出火.拆卸.入宅.安床.修造.安门.纳畜.启攒.安葬.̆a 进人口.出行.嫁娶.置产.安床.赴任.安葬.作灶.祭祀.祈福.开光.解除.动土.纳财.交易.纳畜.扫舍.  t ; \  8 T  aB5<hoF̆`'w诸事不宜.祭祀.平治道涂.解除.修饰垣墙.余事勿取.̆_}I谢土.祈福.上梁.作灶.斋醮.修造.入宅.安门.纳采.嫁娶.开光.出行.理发.会亲友.开市.安床.栽种.牧养.入殓.移柩.启攒.%̆^}]嫁娶.纳财.安葬.出行.开市.立券.作灶.栽种.祭祀.祈福.开光.求嗣.解除.伐木.出火.入宅.移徙.安床.拆卸.修造.动土.造畜椆栖.Ĭ]'}诸事不宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿取.|̆\7Q词讼.开光.开市.嫁娶.出行.合帐.冠笄.安床.除服.成服.作灶.交易.立券.入殓.移柩.破土.安葬.̆[aW祈福.入殓.祭祀.作灶.安葬.探病.嫁娶.开光.出行.出火.拆卸.进人口.开市.立券.交易.挂匾.入宅.移徙.安床.栽种.,̆Z'C诸事不宜.解除.坏垣.余事勿取.̆Y' 诸事不宜..̆X77嫁娶.入宅.安葬.沐浴.结网.取渔.:̆W'_诸事不宜.祭祀.求医.治病.解除.余事勿取.J̆V7o开市.动土.破土.嫁娶.纳采.祭祀.祈福.出行.移徙.求医.J̆U7o嫁娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4̆T)Q嫁娶.安葬.祭祀.作灶.掘井.平治道涂.~̆S开仓.出货财.造屋.作灶.开市.交易.立券.栽种.祭祀.祈福.嫁娶.冠笄.修饰垣墙.置产.平治道涂.̆R'动土.破土.安葬.行丧.赴任.出行.嫁娶.入宅.移徙.谢土.词讼.纳财.开市.立券.交易.开光.安床.上梁.造屋.修造.起基.k̆QE!嫁娶.作灶.掘井.安葬.塞穴.整手足甲.解除.捕捉.畋猎.结网.余事勿取.诸事不宜.̆ Ey祈福.动土.移徙.入宅.祭祀.祈福.求嗣.斋醮.嫁娶.冠笄.出行.开市.交易.会亲友.教牛马.除服.成服.启攒.安葬.移柩.̆ }C嫁娶.祭祀.开光.出行.出火.移徙.入宅.安门.安床.伐木.拆卸.修造.动土.上梁.立券.交易.栽种.纳畜.牧养.入殓.安葬.|̆ EC合帐.开市.安葬.入殓.嫁娶.祭祀.开光.祈福.求嗣.出火.入宅.移徙.安床.拆卸.动土.破土.谢土.l̆K置产.伐木.纳畜.造畜椆栖.安葬.破土.作梁.作灶.开生坟.理发.冠笄.嫁娶.进人口.*̆ W嫁娶.行丧.架马.作梁.理发.牧养.安葬.纳畜.伐木.开市.立券.交易.挂匾.祭祀.祈福.开光.入宅.移徙.安床.拆卸.动土.上梁.进人口. ̆Ee开光.作灶.斋醮.安葬.嫁娶.祭祀.出行.冠笄.立券.交易.进人口.开市.移徙.修造.动土.安床.入殓.移柩.破土.:̆'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.^̆)#入宅.安门.祭祀.开光.塑绘.祈福.斋醮.裁衣.合帐.冠笄.嫁娶.拆卸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.理发.伐木.架马.作梁.出火.修造.起基.定磉.放水.赴任.]̆)!伐木.作梁.祭祀.会亲友.订盟.裁衣.合帐.安机械.拆卸.上梁.安门.入殓.除服.成服.移柩.启攒.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.经络.<̆EE栽种.造屋.作灶.入宅.祭祀.嫁娶.纳婿.安葬.Y̆E}出行.斋醮.安葬.嫁娶.开光.塑绘.求嗣.纳采.裁衣.合帐.冠笄.安机械.作梁.开柱眼.安门.安床.造仓.祭祀.会亲友.祈福.经络.纳财.开市.立券.交易.入学.求嗣.理发.架马.4̆E5安门.作灶.安葬.嫁娶.塞穴.诸事不宜.X̅E}掘井.动土.作灶.栽种.祭祀.出行.嫁娶.冠笄.安床.入殓.移柩.安葬.h̅~E祭祀.开光.嫁娶.入宅.订盟.纳采.裁衣.合帐.冠笄.安机械.拆卸.安床.入殓.除服.成服.移柩.破土.启攒.安葬.修坟.立碑.经络.交易.立券.纳财.筑堤.造仓.补垣.塞穴.纳畜.伐木.架马.^̅}E作灶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈福.塑绘.斋醮.沐浴.拆卸.起基.入宅.安香.造庙.移柩.谢土.除服.成服.入学.习艺.出行.竖柱.上梁.掘井.求嗣.解除.伐木.X̅|E}作灶.开市.安葬.作梁.裁衣.合帐.冠笄.嫁娶.纳婿.安床.入殓.纳财. b"= K MW7ZA>4̅{E3嫁娶.栽种.伐木.安葬.祭祀.开光.塑绘.纳采.裁衣.拆卸.安床.起基.动土.竖柱.上梁.移徙.入宅.安香.开市.立券.挂匾.沐浴.出行.求嗣.安门.K̅z/w开光.出货财.祭祀.动土.上梁.订盟.纳采.嫁娶.安机械.拆卸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.赴任.出行.移徙.祈福.求嗣.解除.造仓.进人口.-̅y'E诸事不宜.破屋.坏垣.求医.治病.0̅xE+安床.开市.立券.作灶.祭祀.祈福.斋醮.订盟.纳采.裁衣.合帐.拆卸.修造.动土.上梁.起基.移柩.安葬.谢土.沐浴.扫舍.开柱眼.伐木.出火.:̅w)[栽种.伐木.祭祀.嫁娶.祈福.纳采.裁衣.合帐.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲友.挂匾.交易.立券.纳财.造仓.放水.^̅vE造屋.作灶.治病.探病.冠笄.入殓.除服.成服.移柩.平治道涂.修饰垣墙.%̅uE出行.嫁娶.入宅.安葬.开光.塑绘.裁衣.冠笄.伐木.拆卸.竖柱.上梁.开仓.会亲友.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5̅tE7栽种.作灶.安葬.嫁娶.祭祀.扫舍.塞穴.>̅sEG作灶.掘井.动土.栽种.祈福.开光.塑绘.酬神.订盟.纳采.裁衣.安床.开市.立券.入殓.除服.成服.移柩.启攒.安葬.立碑.赴任.会亲友.出行.交易.竖柱.̅rS_作灶.开光.嫁娶.开市.入宅.订盟.纳采.冠笄.拆卸.修造.动土.安床.入殓.除服.成服.移柩.安葬.破土.启攒.造仓.W̅q)栽种.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.嫁娶.裁衣.动土.起基.出火.拆卸.移徙.入宅.安香.修造.竖柱.上梁.纳畜.牧养.祈福.求嗣.解除.伐木.定磉.造屋.安门.̅p{I入宅.安葬.伐木.作梁.纳畜.造畜椆栖.作灶.嫁娶.祭祀.开光.祈福.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲友.{̅o%a嫁娶.词讼.行丧.安葬.牧养.伐木.作梁.开市.纳畜.造畜椆栖.祭祀.沐浴.理发.作灶.结网.栽种._̅n)%嫁娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除服.成服.余事勿取. ̅mu3开市.嫁娶.安床.会亲友.入宅.作灶.上梁.祭祀.斋醮.沐浴.开生坟.除服.成服.移柩.入殓.破土.安葬.合寿木.;̅%)_开市.嫁娶.求医.治病.破屋.坏垣.余事勿取.X̅$aa开市.作灶.安床.入宅.上梁.裁衣.动土.入殓.嫁娶.移柩.安葬.破土.)̅#S开光.造屋.动土.作灶.栽种.造车器.纳采.订盟.祭祀.祈福.求嗣.移徙.出行.开市.出火.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?̅"'i诸事不宜.修饰垣墙.平治道涂.祭祀.余事勿取.%̅!S入宅.作灶.治病.安葬.移徙.嫁娶.冠笄.纳采.出行.会亲友.上梁.安机械.安床.牧养.畋猎.祭祀.祈福.开光.修造.安门.造屋.起基.=̅ 'c诸事不宜.嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.启攒.除服.成服.;̅'a诸事不宜.裁衣.伐木.作梁.纳财.交易.立券.n̅75词讼.出火.入宅.祭祀.合帐.裁衣.经络.伐木.作梁.安床.作灶.入殓.安葬.启攒.移柩.̅oC入宅.作灶.伐木.安葬.出火.出行.纳畜.嫁娶.开光.祈福.求嗣.解除.动土.安床.栽种.开池.掘井.祭祀.破土.启攒."̅}W嫁娶.安葬.破土.作梁.纳畜.牧养.行丧.作灶.移徙.祭祀.开光.祈福.出行.解除.进人口.雇庸.安床.动土.起基.上梁.安门.解除.B̅'o诸事不宜.结网.入殓.除服.成服.移柩.安葬.破土.̅7 嫁娶.作灶.安床.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.入宅.移徙.上梁.挂匾.开池.入殓.安葬.破土.启攒.;̅'a余事勿取.祭祀.解除.治病.破屋.坏垣.扫舍.̅E{开市.立券.理发.作灶.嫁娶.祭祀.祈福.出行.解除.出火.拆卸.动土.入宅.移徙.安床.上梁.栽种.纳畜.破土.启攒.安葬. z/ ) _  UU*E$g+̅')诸事不宜.解除.沐浴.f̅C栽种.出行.祈福.行丧.纳畜.安葬.安门.伐木.作梁.牧养.作灶.解除.平治道涂.̅5入宅.移徙.出火.分居.安香.作灶.开市.交易.立券.安葬.动土.伐木.嫁娶.开光.求嗣.会亲友.安床.牧养.塑绘.针灸.̅)掘井.词讼.嫁娶.安床.开光.出行.祭祀.动土.出火.解除.会亲友.开市.交易.立券.挂匾.入宅.移徙.拆卸.破土.启攒.安葬.̅oQ嫁娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.裁衣.竖柱.上梁.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.启攒.u̅ o开光.掘井.针灸.出行.嫁娶.入宅.移徙.作灶.动土.祭祀.祈福.求嗣.入殓.启攒.安葬.移柩.̅E 入殓.安葬.作灶.入宅.祭祀.沐浴.祈福.求嗣.斋醮.订盟.纳采.裁衣.冠笄.开市.立券.交易.纳财.沐浴.除服.谢土.出行.移柩.>̅EG安葬.作灶.伐木.作梁.祭祀.求嗣.沐浴.酬神.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造仓.开池.经络.纳财.开市.立券.交易.结网.取渔.纳畜.捕捉.X̅E}嫁娶.上梁.入宅.作灶.取渔.入殓.除服.成服.移柩.破土.安葬.立碑.;̅)]作灶.安床.祈福.求嗣.斋醮.塑绘.开光.订盟.纳采.嫁娶.动土.入宅.安香.移柩.安葬.谢土.出行.沐浴.修造.竖柱.上梁.纳财.破土.解除.安门.放水.̅ ')诸事不宜.求医.破屋.B̅ EO栽种.动土.开市.作灶.祭祀.祈福.酬神.订盟.纳采.冠笄.裁衣.合帐.嫁娶.安床.移徙.入宅.安香.入殓.移柩.启攒.安葬.解除.取渔.捕捉.伐木.安门.出火.4̅ o 伐木.开市.交易.上梁.作灶.安门.造屋.嫁娶.纳采.订盟.入宅.移徙.安床.祭祀.祈福.开光.出行.解除.出火.拆卸.动土.纳畜.谢土.安葬.破土.#̅ C开市.行丧.栽种.出行.出货财.安葬.置产.词讼.治病.嫁娶.祭祀.开光.伐木.出火.拆卸.入宅.移徙.修造.动土.上梁.安床.纳畜.]̅ }O移徙.入宅.掘井.造庙.栽种.针灸.治病.开池.解除.平治道涂.余事勿取.̄C}C掘井.祈福.谢土.动土.入宅.上梁.修造.作灶.嫁娶.出行.理发.安床.启攒.安葬.修坟.开市.交易.立券.纳财.开池.牧养.&̄BE入宅.安门.祭祀.谢土.沐浴.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.启攒.修坟.立碑.移柩.ȲAE嫁娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.针灸.余事勿取.̄@ 置产.嫁娶.出行.开光.栽种.动土.破土.入宅.治病.安床.裁衣.交易.立券.入殓.移柩.安葬.除服.成服.&̄? O嫁娶.栽种.安葬.理发.造庙.作灶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈福.求嗣.动土.,̄>'C诸事不宜.祭祀.解除.余事勿取.^̄='%余事勿取.祭祀.入殓.破土.除服.成服.启攒.安葬.修坟.立碑.余事勿取.̄<E 安床.伐木.祈福.纳畜.嫁娶.开市.交易.立券.开光.出行.出火.拆卸.修造.入宅.移徙.动土.破土.移柩.安葬.启攒.除服.成服.,̄;'C诸事不宜.破屋.坏垣.余事勿取. ̄:}-掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.开光.入宅.移徙.安床.修造.动土.进人口.̄9}A掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.动土.会亲友.起基.造仓.纳畜.牧养.作厕.进人口.F̄8'w余事勿取.祭祀.解除.修饰垣墙.平治道涂.余事勿取.̄7'修造.上梁.入宅.祈福.探病.掘井.动土.安门.安葬.作灶.开市.交易.立券.纳财.开池.补垣.嫁娶.纳采.纳畜.取渔.安床.̄6E 嫁娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.伐木.作梁.出火.入宅.移徙.安床.拆卸.动土.上梁.栽种.纳畜.安葬.=̄5'e余事勿取.解除.扫舍.祭祀.教牛马.余事勿取. q0  t = D R8_2*̄4Ek作灶.掘井.嫁娶.入宅.祭祀.祈福.斋醮.沐浴.安床.安机械.造车器.入殓.移柩.启攒.安葬.立碑.合帐.经络.交易. ̄3E]栽种.嫁娶.入殓.安葬.祭祀.出行.沐浴.裁衣.祈福.斋醮.订盟.纳采.嫁娶.安机械.开市.立券.安碓磑.纳畜.|̄2EC开仓.造屋.安葬.安床.祭祀.祈福.斋醮.塑绘.开光.除服.成服.入殓.作灶.嫁娶.捕捉.畋猎.纳财.Q̄1) 破土.伐木.入殓.除服.成服.移柩.启攒.安葬.立碑.余事勿取.ū0)Q入宅.安床.塑绘.开光.出行.订盟.纳采.除服.成服.嫁娶.纳婿.入殓.移柩.启攒.安葬.立碑.3̄/'Q诸事不宜.解除.破屋.坏垣.余事勿取.Z̄.E造屋.开市.作灶.入宅.祭祀.会亲友.出行.订盟.纳采.沐浴.修造.动土.祈福.斋醮.嫁娶.拆卸.安床.入殓.移柩.安葬.谢土.赴任.裁衣.竖柱.上梁.伐木.捕捉.栽种.破土.安门.%̄-E出行.治病.安葬.开市.会亲友.纳采.进人口.修造.动土.竖柱.上梁.祭祀.开光.塑绘.祈福.斋醮.嫁娶.安床.移徙.入宅.安香.纳畜.Ū,Ew嫁娶.移徙.入宅.开光.修饰垣墙.平治道涂.入殓.移柩.余事勿取.{̄+EA作灶.掘井.谢土.入宅.出行.嫁娶.订盟.纳采.入殓.安床.启攒.安葬.祭祀.裁衣.会亲友.进人口.B̄*EO作灶.祭祀.上梁.出行.沐浴.解除.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.移徙.入宅.除服.成服.移柩.破土.启攒.安葬.扫舍.修坟.伐木.纳财.交易.立券.S̄)Sc斋醮.伐木.作梁.安葬.行丧.嫁娶.纳采.订盟.造车器.祭祀.祈福.造庙.安香.出火.出行.归宁.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上梁.造屋.起基.安门.̄(S;斋醮.入宅.修造.动土.破土.交易.进人口.祭祀.沐浴.捕捉.入殓.除服.成服.安葬.谢土.启攒.修坟.̄'aO移徙.入宅.嫁娶.祈福.开光.掘井.沐浴.冠笄.补垣.塞穴.合帐.裁衣.修造.作梁.开柱眼.安碓磑.筑堤.作厕.断蚁.̄&5嫁娶.进人口.安葬.出行.赴任.入宅.移徙.入殓.开渠.祭祀.祈福.求嗣.开光.拆卸.修造.动土.上梁.安床.置产.栽种.破土.̄%伐木.纳畜.破土.安葬.开生坟.嫁娶.开市.动土.交易.作梁.祭祀.开光.理发.整手足甲.安床.作灶.扫舍.教牛马.,˾'C诸事不宜.解除.扫舍.余事勿取.˾~EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:˾}'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,˾|'C诸事不宜.祭祀.解除.余事勿取.˾{a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2˾z'O诸事不宜.祭祀.修饰垣墙.余事勿取. ˾y5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.˾xa_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;˾w'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. ˾vaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#˾u5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.m˾t37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,˾s'C诸事不宜.解除.坏垣.余事勿取.˾ra_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3˾q'Q诸事不宜.治病.破屋.坏垣.余事勿取.R˾p) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅. "W # [  7 'yH"M $M i9"˾o)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+˾n'A诸事不宜.平治道涂.余事勿取.N˾m)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.J˾l)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=˾kQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5˾j)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J˾i)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<˾h)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u˾g m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ˾fgC嫁娶.进人口.入宅.移徙.出火.出行.祭祀.祈福.求嗣.开光.解除.伐木.拆卸.修造.栽种.纳畜.安葬.修坟.立碑.c˾eY}上梁.开仓.出货财.造屋.造船.纳采.订盟.嫁娶.祭祀.祈福.雕刻.移徙.开市.入宅.出行.动土.会亲友.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;˾d)_嫁娶.安葬.破屋.坏垣.求医.治病.余事勿取.˾cQs嫁娶.动土.造船.开池.掘井.出行.修造.入宅.上梁.移徙.安葬.破土.作灶.开市.祭祀.理发.针灸.解除.进人口.整手足甲.˾b7{栽种.掘井.置产.嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.开市.交易.立券.挂匾.伐木.入宅.移徙.安床.安葬.˾aa_祈福.祭祀.伐木.掘井.作灶.谢土.嫁娶.开光.出行.出火.拆卸.修造.动土.入宅.移徙.安床.上梁.开市.交易.立券.栽种. ˾5u嫁娶.冠笄.出行.祈福.安葬.伐木.入宅.移徙.出火.栽种.动土.上梁.开光.裁衣.安门.会亲友.安床.结网.理发. ˾)置产.安床.嫁娶.开光.出行.解除.出火.拆卸.修造.进人口.动土.入宅.移徙.栽种.纳畜.掘井.安葬.除服.成服.,˾'C余事勿取.祭祀.沐浴.余事勿取.˾}入宅.移徙.嫁娶.掘井.作灶.出火.进人口.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.启攒.%˾'5余事勿取.解除.余事勿取.q˾o安床.开市.交易.出货财.安葬.修坟.嫁娶.作灶.祭祀.沐浴.结网.移柩.入殓.除服.成服.˾aW入宅.作灶.词讼.移徙.出行.赴任.祭祀.祈福.求嗣.开光.解除.理发.会亲友.栽种.纳畜.牧养.安葬.修坟.立碑.启攒.˾)探病.安葬.嫁娶.祭祀.开光.出火.出行.拆卸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.栽种.纳畜.,˾'C诸事不宜.破屋.坏垣.余事勿取. ˾5嫁娶.开市.出火.栽种.破土.动土.入宅.移徙.安香.分居.掘井.作灶.开光.解除.拆卸.修造.动土.安床.纳畜.安葬.启攒.入殓.)˾ U嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.出行.拆卸.进人口.入宅.移徙.安床.栽种.动土.修造.纳畜.入殓.安葬.立碑.除服.成服.˾}Q栽种.破土.置产.祭祀.嫁娶.动土.作灶.祈福.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.˾''诸事不宜.诸事不宜.V˾ !开市.祭祀.祈福.斋醮.塑绘.开光.订盟.纳采.裁衣.冠笄.嫁娶.拆卸.入宅.安香.入殓.移柩.理发.安葬.修坟.谢土.赴任.移徙.沐浴.治病.破土.启攒.整手足甲.入学.作梁.S˾ Es嫁娶.动土.安葬.作灶.祭祀.沐浴.出行.冠笄.进人口.余事勿取.`˾ )'入宅.作灶.祈福.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.˾ ''诸事不宜.诸事不宜.,˾ 'C诸事不宜.沐浴.扫舍.余事勿取.j˾E嫁娶.入宅.治病.赴任.祭祀.祈福.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造畜椆栖.入殓.移柩.启攒.安葬.谢土.除服.成服.会亲友.竖柱.上梁.经络.开市.交易.立券.纳财.纳畜.筑堤. #xi%y; O  k <  u 8F6T!C.\x^˾)#造屋.治病.祭祀.解除.祈福.开光.塑绘.斋醮.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.入殓.除服.成服.移柩.启攒.安床.赴任.出行.移徙.竖柱.上梁.伐木.栽种.破土.安葬.纳畜.:˾'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取. ˾Ee开市.交易.破土.作灶.祭祀.塑绘.开光.订盟.纳采.嫁娶.安床.进人口.入殓.除服.成服.移柩.启攒.安葬.立碑.%˾)1作灶.治病.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.赴任.进人口.会亲友.e˾a{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.启攒.安葬.除服.成服.余事勿取.q˾a嫁娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治道涂.造畜椆栖.余事勿取.E˾'q开市.入宅.出行.嫁娶.修坟.祈福.动土.入宅.安门.谢土.上梁.纳采.订盟.会亲友.沐浴.理发.裁衣.冠笄.安床.除服.成服.启攒.移柩.安葬.会亲友.开生坟.˾}A嫁娶.安葬.行丧.词讼.造桥.作灶.破土.动土.祭祀.开光.出行.解除.理发.伐木.出火.拆卸.上梁.合脊.安床.造畜椆栖.˽a]伐木.行丧.破土.嫁娶.安葬.开渠.祭祀.祈福.求嗣.开光.出行.解除.上梁.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.˽~)开光.栽种.嫁娶.祭祀.祈福.求嗣.动土.安床.扫舍.入殓.移柩.破土.启攒.安葬.作灶.整手足甲.补垣.除服.成服.˽})安床.安葬.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.进人口.开市.交易.立券.挂匾.纳财.入宅.移徙.栽种.破土.谢土.<˽7EE安葬.开市.修坟.立碑.嫁娶.祭祀.作灶.纳财. ˽6}'纳畜.伐木.置产.作梁.行丧.安葬.修坟.立碑.嫁娶.祭祀.开市.开光.出行.入宅.移徙.出火.拆卸.修造.安床.{˽5o上梁.作灶.伐木.出行.安葬.安门.理发.嫁娶.求嗣.纳采.进人口.纳财.结网.纳畜.牧养.会亲友.:˽4'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.a˽3'+余事勿取.祭祀.入殓.移柩.开生坟.破土.启攒.安葬.除服.成服.余事勿取.H˽2'{余事勿取.入殓.破土.安葬.启攒.除服.成服.余事勿取.8˽1'[诸事不宜.造畜椆栖.平治道涂.余事勿取.˽0 -嫁娶.作灶.出火.出行.入宅.移徙.安床.祈福.上梁.开市.交易.立券.纳财.会亲友.开光.理发.入殓.移柩.安葬.启攒.˽/}5安葬.修坟.作灶.破土.造庙.动土.嫁娶.纳采.祭祀.祈福.求嗣.开光.出行.解除.移徙.伐木.安床.纳畜.出火.拆卸.˽.gG动土.伐木.作梁.行丧.安葬.开生坟.祭祀.出行.裁衣.冠笄.会亲友.造畜椆栖.嫁娶.竖柱.上梁.移徙.纳财.纳畜.˽-g[嫁娶.开光.会亲友.掘井.安门.栽种.祭祀.解除.裁衣.理发.安床.作灶.造畜椆栖.放水.筑堤.补垣.塞穴.整手足甲.扫舍. ˽,}'嫁娶.作灶.修坟.安门.入宅.立碑.安葬.安床.祭祀.祈福.求嗣.开光.开市.出行.解除.动土.起基.置产.栽种.,˽+'C诸事不宜.祭祀.塞穴.余事勿取.g˽*)5斋醮.安门.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.B˽))m祈福.安葬.订盟.纳采.会亲友.安机械.纳财.牧养.:˽('_余事勿取.祭祀.解除.破屋.坏垣.余事勿取.`˽')'开市.赴任.嫁娶.订盟.纳采.出行.祭祀.祈福.动土.移徙.入宅.破土.安葬.C˽&)o移徙.入宅.入殓.除服.成服.移柩.破土.启攒.安葬.9˽%']余事勿取.祭祀.结网.造畜椆栖.余事勿取.?˽$7Y开市.动土.破土.开光.针灸.会亲友.启攒.安葬.8˽#)Y嫁娶.入宅.沐浴.理发.入学.习艺.进人口.&˽")5行丧.安葬.作灶.造畜椆栖.?˽!)g动土.上梁.嫁娶.祭祀.安机械.入殓.破土.安葬.˽ Em作灶.入殓.安葬.安床.祭祀.祈福.斋醮.沐浴.竖柱.订盟.纳采.嫁娶.拆卸.入宅.移柩.启攒.谢土.赴任.出火.纳畜. '0 % + _ = O@tNg+e˽a{开市.入宅.嫁娶.动土.破土.安葬.祭祀.修坟.除服.成服.启攒.移柩.余事勿取. ˽ 开仓.出货财.伐木.纳畜.开市.上梁.造屋.破土.启攒.栽种.嫁娶.祭祀.理发.进人口.作灶.移柩.冠笄.会亲友.#˽5嫁娶.破土.进人口.出行.入宅.移徙.出火.纳畜.词讼.安葬.开市.交易.立券.纳财.挂匾.栽种.祭祀.祈福.开光.拆卸.动土.安床.a˽S开市.掘井.开渠.造桥.造船.嫁娶.纳采.订盟.祭祀.开光.出行.理发.作梁.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.移徙.拆卸.挂匾.栽种.纳畜.破土.安葬.入殓.除服.成服.:˽'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.,˽'C诸事不宜.解除.坏垣.余事勿取.0˽ c嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.修造.动土.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.栽种.纳畜.入殓.安葬.除服.成服.F˼R'w诸事不宜.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.|˼Qa'作灶.行丧.理发.乘船.嫁娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出火.上梁. ˼PSO伐木.行丧.作灶.作梁.安葬.嫁娶.祭祀.塑绘.开光.出行.解除.理发.整手足甲.动土.安床.开池.放水.扫舍.3˼O'Q诸事不宜.祭祀.出行.扫舍.余事勿取.˼No'掘井.祈福.安床.开市.入宅.挂匾.开光.嫁娶.出行.伐木.拆卸.修造.动土.移徙.安葬.破土.修坟.立碑.H˼M'{余事勿取.祭祀.立碑.修坟.启攒.除服.成服.余事勿取.m˼La 探病.开渠.安葬.伐木.作灶.入宅.祭祀.理发.会亲友.进人口.嫁娶.针灸.入殓.移柩."˼K}W嫁娶.立碑.出行.伐木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人口.入宅.安床.出火.拆卸.修造.动土.栽种.0˼J c嫁娶.祈福.求嗣.出行.出火.拆卸.修造.动土.上梁.开光.进人口.开市.交易.立券.挂匾.安床.入宅.移徙.栽种.伐木.入殓.破土.除服.成服.,˼I'C诸事不宜.破屋.坏垣.余事勿取.#˼H5嫁娶.出行.安床.作灶.祭祀.入宅.移徙.出火.进人口.置产.开光.解除.起基.动土.拆卸.上梁.立碑.修坟.安葬.破土.启攒.移柩.0˼G c嫁娶.祭祀.祈福.求嗣.沐浴.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.入宅.移徙.安床.栽种.纳畜.入殓.安葬.启攒.除服.成服.W˼FE{嫁娶.移徙.入宅.开市.沐浴.入殓.移柩.除服.成服.破土.平治道涂.˼E''诸事不宜.诸事不宜.:˼D'_诸事不宜.祭祀.沐浴.赴任.出行.余事勿取._˼Coa动土.冠笄.移徙.入宅.开市.竖柱.上梁.祭祀.出行.成服.除服.沐浴.入殓. ˼BEe安床.开光.开市.交易.祭祀.裁衣.冠笄.嫁娶.安机械.拆卸.动土.起基.移徙.入宅.入殓.启攒.安葬.造仓.经络.4˼AE5入殓.安葬.开市.交易.祭祀.诸事不宜.{˼@EA移徙.入宅.作灶.安葬.祭祀.裁衣.冠笄.嫁娶.纳婿.会亲友.除服.成服.移柩.捕捉.进人口.入殓.u˼?)Q定磉.安葬.祭祀.赴任.动土.上梁.开光.塑绘.冠笄.拆卸.起基.安床.开市.立券.赴任.经络.7˼>E9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.嫁娶.拆卸.起基.安床.入宅.开市.入殓.除服.成服.移柩.破土.谢土.挂匾.开柱眼.交易.I˼=E_移徙.入宅.出行.栽种.祭祀.沐浴.破屋.坏垣.余事勿取.˼<EW作灶.祭祀.入宅.嫁娶.祭祀.冠笄.会亲友.拆卸.起基.除服.成服.移柩.启攒.安葬.沐浴.捕捉.开光.塑绘.f˼;E嫁娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.捕捉.除服.成服.余事勿取.S˼:Sc斋醮.开市.开仓.作灶.造船.嫁娶.祭祀.祈福.求嗣.出火.出行.开光.解除.拆卸.修造.进人口.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除服.成服. b + >  ` Nn\+ HNz˼9k嫁娶.词讼.治病.置产.作梁.祈福.安葬.栽种.伐木.安门.修饰垣墙.平治道涂.祭祀.沐浴.作灶.I˼8 伐木.谢土.行丧.祭祀.作灶.动土.破土.安葬.祈福.纳采.订盟.开光.出行.解除.安香.出火.拆卸.入宅.移徙.修造.上梁.安床.栽种.纳畜.会亲友.安机械.经络.#˼7Q嫁娶.出行.进人口.作灶.入宅.移徙.栽种.赴任.祭祀.解除.拆卸.修造.动土.起基.上梁.安床.安门.开渠.开池.入殓.破土.启攒.}˼6_+安床.动土.安葬.开生坟.合寿木.祭祀.裁衣.安门.纳财.扫舍.出行.进人口.作灶.纳畜.造畜椆栖.˼5}开光.出行.修造.上梁.入宅.安门.作灶.裁衣.祭祀.动土.筑堤.开池.会亲友.塞穴.入殓.移柩.破土.安葬.%˻o}]造屋.入殓.安葬.伐木.入宅.移徙.置产.纳畜.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.安床.栽种.移柩.进人口.会亲友.除服.成服.˻n}I动土.破土.理发.出行.入宅.分居.安香.出火.祭祀.开光.解除.移徙.裁衣.开市.立券.祈福.求嗣.进人口.交易.纳财.纳畜.˻mE{栽种.作灶.针灸.出行.嫁娶.出火.拆卸.祭祀.祈福.开光.伐木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.h˻l'9诸事不宜.祭祀.结网.入殓.移柩.启攒.安葬.移柩.除服.成服.合寿木.余事勿取.,˻k'C诸事不宜.破屋.坏垣.余事勿取.^˻j'%诸事不宜.祭祀.求医.捕捉.栽种.塞穴.入殓.破土.安葬.移柩.余事勿取.)˻i)9嫁娶.移徙.祭祀.求嗣.开光.出行.伐木.作梁.出火.解除.拆卸.进人口.修造.动土.起基.安床.栽种.纳畜.入殓.破土.安葬.除服.成服.N˻h'诸事不宜.祭祀.作灶.沐浴.修饰垣墙.平治道涂.余事勿取.˻g嫁娶.纳财.祈福.安葬.修造.开市.交易.立券.动土.上梁.塑绘.开光.进人口.纳畜.补垣.塞穴.栽种.牧养.˻f %嫁娶.会亲友.进人口.出行.入宅.移徙.赴任.作灶.祭祀.解除.沐浴.理发.整手足甲.入殓.移柩.破土.安葬.扫舍.˻eSm破土.置产.掘井.动土.安床.祭祀.祈福.求嗣.开光.出行.解除.上梁.造屋.移徙.安门.纳财.牧养.纳畜.安葬.启攒.入殓.˻da_造屋.开光.理发.造船.掘井.作灶.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.移徙.动土.安床.入殓.破土.安葬.启攒.˻c}入宅.作梁.安门.伐木.修造.上梁.入殓.造屋.嫁娶.祭祀.祈福.求嗣.出行.动土.安床.掘井.破土.启攒.F˻b)u动土.安葬.订盟.纳采.祭祀.祈福.安机械.作灶.纳畜.g˻a)5开光.针灸.嫁娶.订盟.纳采.祭祀.祈福.求医.治病.动土.移徙.入宅.破土.安葬.`˻`)'动土.破土.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.移徙.入宅.启攒.安葬.:˻_'_诸事不宜.沐浴.治病.破屋.坏垣.余事勿取.5˻^)S嫁娶.入宅.捕捉.结网.入殓.破土.安葬.C˻])o开市.安葬.嫁娶.祭祀.祈福.斋醮.动土.移徙.入宅.M˻\Ci嫁娶.祈福.余事勿取.沐浴.修饰垣墙.平治道涂.余事勿取.N˻[)开市.安葬.订盟.纳采.出行.会亲友.修造.上梁.移徙.入宅.R˻Z) 嫁娶.开市.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.安葬.J˻Y7o作灶.动土.破土.嫁娶.出行.纳畜.祭祀.入殓.启攒.安葬.C˻X)o动土.破土.嫁娶.祭祀.祈福.斋醮.作灶.移徙.入宅.|˻Wa'开光.治病.嫁娶.掘井.破土.安葬.经络.祭祀.沐浴.补垣.塞穴.除服.成服.移柩.入殓.启攒.立碑.B˻Vo%移徙.栽种.出行.行丧.破土.安葬.词讼.嫁娶.纳采.订盟.祭祀.祈福.求嗣.纳采.裁衣.冠笄.开光.安床.作梁.修造.动土.作灶.起基.上梁.造屋.纳畜.牧养.˻U开渠.造船.安床.安葬.破土.出行.修坟.掘井.开市.开生坟.祭祀.冠笄.作灶.交易.纳财.栽种.结网.纳畜.牧养.进人口. !$ b * u B A ;C-X7o^-bV˻TKq掘井.伐木.纳畜.合寿木.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.入殓.破土.谢土.安葬.E˻SSG入宅.移徙.作灶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.嫁娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.栽种.破土.启攒.安葬.立碑.,˻R'C诸事不宜.破屋.坏垣.余事勿取.n˻Q a嫁娶.开市.出火.作灶.置产.斋醮.入宅.移徙.安门.解除.祭祀.理发.入殓.安葬.破土.˻ oQ嫁娶.栽种.行丧.理发.修坟.行丧.作灶.祭祀.祈福.求嗣.开光.伐木.出火.拆卸.入宅.安床.修造.动土.上梁.挂匾.纳畜.,˻ 'C诸事不宜.祭祀.解除.余事勿取.˻ }5作灶.动土.上梁.栽种.入宅.移徙.修造.祈福.嫁娶.开光.解除.安床.牧养.理发.开市.入殓.启攒.移柩.安葬.扫舍."˻ G嫁娶.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.栽种.纳畜.入殓.启攒.除服.成服.t˻_嫁娶.作灶.安葬.动土.词讼.作梁.伐木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^˻'%余事勿取.祭祀.入殓.破土.除服.成服.移柩.启攒.安葬.谢土.余事勿取.m˻}o嫁娶.出行.安葬.入殓.入宅.作灶.冠笄.上梁.祭祀.祈福.求嗣.开光.开市.牧养.理发.i˻}g安葬.经络.修坟.破土.开市.安床.启攒.立碑.祭祀.作灶.纳财.栽种.纳畜.进人口."˻ G嫁娶.开光.出行.祈福.求嗣.解除.拆卸.动土.修造.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.纳畜.入殓.移柩.安葬.˻E{伐木.祭祀.纳畜.祭祀.嫁娶.开光.出行.理发.作梁.出火.拆卸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.栽种.,˻'C诸事不宜.破屋.坏垣.余事勿取.˻}嫁娶.入宅.移徙.作灶.开市.交易.安门.栽种.祭祀.解除.沐浴.整手足甲.入殓.移柩.破土.启攒.安葬.˺oW嫁娶.破土.置产.栽种.安葬.修坟.行丧.入宅.移徙.安床.开光.祈福.求嗣.进人口.开市.交易.立券.出火.拆卸.修造.动土.j˺~a开仓.出货财.置产.安葬.动土.破土.掘井.栽种.嫁娶.祭祀.裁衣.结网.冠笄.沐浴.J˺}7o祈福.动土.破土.嫁娶.出行.开市.安床.入殓.启攒.安葬.C˺|)o开市.入宅.嫁娶.祭祀.祈福.斋醮.治病.破土.安葬.J˺{)}动土.安葬.嫁娶.纳采.出行.祭祀.祈福.解除.移徙.入宅.^˺z'%诸事不宜.补垣.塞穴.结网.入殓.除服.成服.移柩.安葬.启攒.余事勿取.J˺y)}造庙.安葬.嫁娶.开市.立券.祭祀.祈福.动土.移徙.入宅..˺x)E开市.破土.祭祀.作灶.纳财.捕捉.R˺w赴任.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.Y˺v)祭祀.祈福.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.3˺u'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.J˺t7o嫁娶.移徙.入宅.纳采.祭祀.祈福.解除.动土.破土.安葬.,˺s'C诸事不宜.沐浴.扫舍.余事勿取.L˺r7q动土.掘井.破土.嫁娶.纳采.订盟.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.进人口.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.启攒.除服.成服.k˺q7/破土.出行.栽种.嫁娶.祭祀.理发.作灶.修饰垣墙.平治道涂.整手足甲.沐浴.冠笄.l˺pa纳采.订盟.安床.谢土.破土.动土.嫁娶.开光.祭祀.祈福.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上梁.造屋.作灶.出火.安香.补垣.塞穴.拆卸.放水.扫舍.造仓.造船.栽种.安葬.d˺oaw行丧.安葬.破土.作灶.伐木.斋醮.纳采.订盟.嫁娶.祭祀.祈福.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆卸.扫舍.放水.安香.安床.造船.开池.掘井.造畜椆栖.栽种. "Qg g : m  j R!d>v,)E˺nEW斋醮.移徙.入宅.动土.祭祀.教牛马.断蚁.余事勿取.˺m-嫁娶.掘井.入宅.移徙.出火.出行.行丧.安葬.开光.理发.进人口.修造.动土.起基.安门.安床.栽种.筑堤.补垣.造畜椆栖.,˺&'C诸事不宜.解除.坏垣.余事勿取.,˺%'C诸事不宜.祭祀.作灶.余事勿取.&˺$}_嫁娶.出火.伐木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.栽种.安床.拆卸.修造.动土.上梁.入殓.安葬.破土.除服.成服.˺#oQ嫁娶.造桥.词讼.移徙.安门.作灶.栽种.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.经络.破土.,˺"'C诸事不宜.破屋.坏垣.余事勿取.˺!aQ嫁娶.开市.交易.行丧.安葬.修坟.祭祀.祈福.求嗣.开光.出行.伐木.出火.拆卸.修造.动土.起基.安床.入宅.移徙.)˺  U嫁娶.祭祀.开光.祈福.求嗣.出行.出火.拆卸.动土.修造.进人口.入宅.移徙.安床.挂匾.交易.立券.栽种.纳畜.入殓.破土.启攒.安葬.r˺a出行.安门.修造.嫁娶.上梁.入宅.祭祀.理发.修饰垣墙.平治道涂.沐浴.整手足甲.扫舍.&˺)3置产.安床.开光.求嗣.出行.解除.伐木.出火.拆卸.修造.上梁.起基.入宅.移徙.开市.交易.立券.栽种.牧养.入殓.安葬.除服.成服.˺E{安葬.行丧.伐木.作梁.嫁娶.祭祀.祈福.出火.开光.求嗣.出行.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.动土.,˺'C诸事不宜.祭祀.解除.余事勿取.˺E安葬.出行.祈福.栽种.求嗣.嫁娶.纳采.合帐.裁衣.冠笄.伐木.作梁.修造.动土.起基.竖柱.上梁.安门.作灶.筑堤.造畜椆栖.˺E{安葬.开市.交易.立券.嫁娶.开光.祭祀.祈福.求嗣.出行.解除.伐木.入宅.移徙.安床.出火.拆卸.修造.上梁.栽种.移柩.,˺'C诸事不宜.祭祀.栽种.余事勿取.J˺)}嫁娶.开光.开光.求医.治病.动土.上梁.入殓.破土.安葬.J˺)}开光.开市.嫁娶.订盟.纳采.祭祀.祈福.入殓.破土.安葬.˺''诸事不宜.诸事不宜.R˺) 开市.安葬.订盟.纳采.出行.祭祀.祈福.修造.动土.移徙.入宅.`˺5作灶.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.;˺)_行丧.安葬.嫁娶.祭祀.沐浴.扫舍.修饰垣墙.Y˺)动土.破土.嫁娶.纳采.出行.求医.治病.开市.移徙.入宅.启攒.安葬.M˺7u移徙.入宅.安葬.订盟.纳采.出行.祈福.斋醮.安床.会亲友.<˺7S上梁.动土.破土.祭祀.入殓.移柩.启攒.安葬.5˺)S嫁娶.安葬.裁衣.作灶.移徙.入宅.纳畜.Y˺)开市.安门.嫁娶.纳采.祭祀.祈福.求医.治病.出行.动土.移徙.入宅.I˺ }%入宅.移徙.修造.安门.伐木.入殓.安葬.造屋.祭祀.祈福.求嗣.开光.出行.开市.交易.立券.栽种.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.启攒.修坟.˺  ;祭祀.伐木.架马.安床.修造.动土.安葬.修坟.破土.解除.出行.纳采.冠笄.竖柱.上梁.移徙.作灶.进人口.入宅.纳畜.牧养.˺ Sm嫁娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈福.开光.动土.安床.出行.栽种.纳畜.牧养.竖柱.上梁.解除.破土.:˺ )[开市.立券.纳采.订盟.嫁娶.造车器.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.挂匾.入宅.移徙.安床.栽种.入殓.破土.安葬.除服.成服.:˺ '_诸事不宜.破屋.坏垣.沐浴.解除.余事勿取.%˹C M祭祀.祈福.求嗣.开光.解除.合帐.冠笄.伐木.架马.作梁.修造.进人口.嫁娶.裁衣.合帐.安床.动土.起基.上梁.竖柱.放水.会亲友.)˹B U嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.解除.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上梁.安葬.破土.谢土. $[Q p  E Jr~4*z;Ph{˹A} 嫁娶.移徙.伐木.作梁.安床.祭祀.祈福.造屋.沐浴.平治道涂.扫舍.入殓.破土.安葬.除服.成服.B˹@a5塞穴.上梁.动土.伐木.安葬.词讼.进人口.会亲友.˹?E嫁娶.安床.探病.作灶.开市.交易.立券.挂匾.开光.出行.拆卸.进人口.入宅.移柩.动土.安门.上梁.栽种.破土.修坟.安葬.,˹>'C诸事不宜.解除.扫舍.余事勿取.˹=7{开光.掘井.开仓.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.动土.入宅.移徙.安床.作灶.塞穴.栽种.破土.安葬.˹<'纳畜.入宅.移徙.安葬.探病.伐木.上梁.安门.入殓.动土.嫁娶.祭祀.祈福.求嗣.开光.开市.交易.立券.安床.出行.拆卸.,˹;'C诸事不宜.结网.解除.余事勿取."˹:as入宅.移徙.理发.出火.嫁娶.出行.开市.交易.立券.祭祀.祈福.开光.伐木.进人口.安床.拆卸.修造.动土.栽种.破土.移柩.安葬.%˹9 M嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.动土.上梁.出火.进人口.入宅.移徙.安床.栽种.纳畜.牧养.竖柱.安门.修造.解除.会亲友.:˹8'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.*˹7C嫁娶.上梁.修造.拆卸.架马.入宅.伐木.动土.出火.开柱眼.祭祀.开光.出行.解除.塑绘.裁衣.入殓.移柩.破土.启攒.安葬.除服.成服."˹6 G嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.安门.开市.交易.立券.挂匾.栽种.破土.安葬.]˹5'#诸事不宜.沐浴.平治道涂.扫舍.入殓.移柩.破土.启攒.安葬.余事勿取.E˹4)s开市.安葬.订盟.纳采.会亲友.安床.作灶.造畜椆栖.`˹3)'移徙.入宅.嫁娶.订盟.纳采.出行.祭祀.祈福.斋醮.动土.上梁.破土.安葬.,˹2'C诸事不宜.塞穴.结网.余事勿取.Y˹1)赴任.捕捉.嫁娶.裁衣.祭祀.出行.安床.作灶.移徙.入宅.破土.安葬.C˹0)o嫁娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<˹/7S动土.破土.安葬.嫁娶.纳采.出行.移徙.入宅.J˹.)}嫁娶.安葬.纳采.祭祀.祈福.开市.求医.治病.动土.纳畜.`˹-)'祈福.斋醮.嫁娶.纳采.祭祀.祈福.出行.动土.上梁.移徙.入宅.破土.安葬.3˹,'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.Y˹+)开市.开光.嫁娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y˹*'安门.嫁娶.纳采.出行.祭祀.祈福.开市.动土.移徙.入宅.破土.安葬.f˹)S 斋醮.开光.嫁娶.入宅.上梁.沐浴.祭祀.解除.安葬.破土.谢土.移柩.余事勿取.]˹(7嫁娶.安床.治病.祭祀.作灶.畋猎.结网.修饰垣墙.平治道涂.余事勿取.˹'}祈福.出火.置产.动土.破土.安葬.修造.上梁.置产.入宅.开光.出行.交易.塞穴.嫁娶.理发.开市.安床. ˹&o;修坟.造桥.作灶.出行.安葬.造屋.入宅.祭祀.祈福.求嗣.开光.纳采.订盟.解除.栽种.纳畜.牧养.扫舍.进人口.L˹%Ee开光.伐木.安葬.破土.祭祀.出行.教牛马.扫舍.余事勿取.˸^am嫁娶.掘井.探病.开市.开光.栽种.祭祀.裁衣.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.启攒.安葬.谢土.除服.成服.˸]E{祭祀.入殓.安葬.探病.嫁娶.祈福.求嗣.开光.出行.解除.拆卸.出火.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,˸\'C诸事不宜.解除.破屋.余事勿取.˸[ +祭祀.祈福.求嗣.开光.解除.纳采.冠笄.出火.拆卸.进人口.安床.动土.上梁.造庙.掘井.开池.入殓.移柩.安葬.破土.,˸Z'C诸事不宜.塞穴.扫舍.余事勿取.:˸Y'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.˸X}Q动土.破土.纳财.掘井.挂匾.开市.伐木.交易.祭祀.祈福.求嗣.开光.解除.出火.拆卸.入宅.安床.修造.安门.纳畜.启攒.安葬. . x r /=7d\AH\˸W 进人口.出行.嫁娶.置产.安床.赴任.安葬.作灶.祭祀.祈福.开光.解除.动土.纳财.交易.纳畜.扫舍.F˸V'w诸事不宜.祭祀.平治道涂.解除.修饰垣墙.余事勿取.˸U}I谢土.祈福.上梁.作灶.斋醮.修造.入宅.安门.纳采.嫁娶.开光.出行.理发.会亲友.开市.安床.栽种.牧养.入殓.移柩.启攒.%˸T}]嫁娶.纳财.安葬.出行.开市.立券.作灶.栽种.祭祀.祈福.开光.求嗣.解除.伐木.出火.入宅.移徙.安床.拆卸.修造.动土.造畜椆栖.I˸S'}诸事不宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿取.|˸R7Q词讼.开光.开市.嫁娶.出行.合帐.冠笄.安床.除服.成服.作灶.交易.立券.入殓.移柩.破土.安葬.˸QaW祈福.入殓.祭祀.作灶.安葬.探病.嫁娶.开光.出行.出火.拆卸.进人口.开市.立券.交易.挂匾.入宅.移徙.安床.栽种.,˸P'C诸事不宜.解除.坏垣.余事勿取.˸O' 诸事不宜..˸N77嫁娶.入宅.安葬.沐浴.结网.取渔.:˸M'_诸事不宜.祭祀.求医.治病.解除.余事勿取.J˸L7o开市.动土.破土.嫁娶.纳采.祭祀.祈福.出行.移徙.求医.J˸K7o嫁娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4˸J)Q嫁娶.安葬.祭祀.作灶.掘井.平治道涂.F˸I7g嫁娶.动土.破土.祭祀.会亲友.开市.安床.启攒.安葬.Q˸H7}嫁娶.开市.安葬.纳采.开光.求医.治病.动土.上梁.移徙.入宅.j˸GS掘井.动土.破土.安葬.开光.祭祀.进人口.嫁娶.安床.解除.冠笄.出行.裁衣.扫舍.˸FEk掘井.安门.嫁娶.纳采.祭祀.祈福.裁衣.合帐.安床.入殓.除服.成服.移柩.破土.启攒.安葬.谢土.立碑.造畜椆栖.%˸EE入殓.安葬.入宅.安床.订盟.纳采.嫁娶.进人口.会亲友.交易.立券.动土.除服.谢土.移柩.破土.启攒.赴任.出行.开市.纳财.栽种.|˸DEC合帐.开市.安葬.入殓.嫁娶.祭祀.开光.祈福.求嗣.出火.入宅.移徙.安床.拆卸.动土.破土.谢土.l˸CK置产.伐木.纳畜.造畜椆栖.安葬.破土.作梁.作灶.开生坟.理发.冠笄.嫁娶.进人口.*˸B W嫁娶.行丧.架马.作梁.理发.牧养.安葬.纳畜.伐木.开市.立券.交易.挂匾.祭祀.祈福.开光.入宅.移徙.安床.拆卸.动土.上梁.进人口. ˸AEe开光.作灶.斋醮.安葬.嫁娶.祭祀.出行.冠笄.立券.交易.进人口.开市.移徙.修造.动土.安床.入殓.移柩.破土.:˷{'_诸事不宜.祭祀.治病.破屋.坏垣.余事勿取.^˷z)#入宅.安门.祭祀.开光.塑绘.祈福.斋醮.裁衣.合帐.冠笄.嫁娶.拆卸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.理发.伐木.架马.作梁.出火.修造.起基.定磉.放水.赴任.]˷y)!伐木.作梁.祭祀.会亲友.订盟.裁衣.合帐.安机械.拆卸.上梁.安门.入殓.除服.成服.移柩.启攒.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.经络.<˷xEE栽种.造屋.作灶.入宅.祭祀.嫁娶.纳婿.安葬.Y˷wE}出行.斋醮.安葬.嫁娶.开光.塑绘.求嗣.纳采.裁衣.合帐.冠笄.安机械.作梁.开柱眼.安门.安床.造仓.祭祀.会亲友.祈福.经络.纳财.开市.立券.交易.入学.求嗣.理发.架马.4˷vE5安门.作灶.安葬.嫁娶.塞穴.诸事不宜.X˷uE}掘井.动土.作灶.栽种.祭祀.出行.嫁娶.冠笄.安床.入殓.移柩.安葬.h˷tE祭祀.开光.嫁娶.入宅.订盟.纳采.裁衣.合帐.冠笄.安机械.拆卸.安床.入殓.除服.成服.移柩.破土.启攒.安葬.修坟.立碑.经络.交易.立券.纳财.筑堤.造仓.补垣.塞穴.纳畜.伐木.架马.^˷sE作灶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈福.塑绘.斋醮.沐浴.拆卸.起基.入宅.安香.造庙.移柩.谢土.除服.成服.入学.习艺.出行.竖柱.上梁.掘井.求嗣.解除.伐木. bs i ) f w k N) SX˷rE}作灶.开市.安葬.作梁.裁衣.合帐.冠笄.嫁娶.纳婿.安床.入殓.纳财.4˷qE3嫁娶.栽种.伐木.安葬.祭祀.开光.塑绘.纳采.裁衣.拆卸.安床.起基.动土.竖柱.上梁.移徙.入宅.安香.开市.立券.挂匾.沐浴.出行.求嗣.安门.K˷p/w开光.出货财.祭祀.动土.上梁.订盟.纳采.嫁娶.安机械.拆卸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.赴任.出行.移徙.祈福.求嗣.解除.造仓.进人口.-˷o'E诸事不宜.破屋.坏垣.求医.治病.0˷nE+安床.开市.立券.作灶.祭祀.祈福.斋醮.订盟.纳采.裁衣.合帐.拆卸.修造.动土.上梁.起基.移柩.安葬.谢土.沐浴.扫舍.开柱眼.伐木.出火.:˷m)[栽种.伐木.祭祀.嫁娶.祈福.纳采.裁衣.合帐.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲友.挂匾.交易.立券.纳财.造仓.放水.^˷lE造屋.作灶.治病.探病.冠笄.入殓.除服.成服.移柩.平治道涂.修饰垣墙.%˷kE出行.嫁娶.入宅.安葬.开光.塑绘.裁衣.冠笄.伐木.拆卸.竖柱.上梁.开仓.会亲友.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5˷jE7栽种.作灶.安葬.嫁娶.祭祀.扫舍.塞穴.>˷iEG作灶.掘井.动土.栽种.祈福.开光.塑绘.酬神.订盟.纳采.裁衣.安床.开市.立券.入殓.除服.成服.移柩.启攒.安葬.立碑.赴任.会亲友.出行.交易.竖柱.˷hS_作灶.开光.嫁娶.开市.入宅.订盟.纳采.冠笄.拆卸.修造.动土.安床.入殓.除服.成服.移柩.安葬.破土.启攒.造仓.W˷g)栽种.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.嫁娶.裁衣.动土.起基.出火.拆卸.移徙.入宅.安香.修造.竖柱.上梁.纳畜.牧养.祈福.求嗣.解除.伐木.定磉.造屋.安门.C˷fSE嫁娶.入宅.移徙.作灶.安葬.祭祀.沐浴.捕捉.栽种.4˷eE3造庙.嫁娶.伐木.安葬.祭祀.开光.塑绘.订盟.纳采.合帐.冠笄.拆卸.动土.起基.上梁.入宅.安香.开市.立券.纳财.沐浴.求嗣.出火.竖柱.安门.˷d)作梁.造庙.祭祀.出行.订盟.纳采.裁衣.合帐.冠笄.进人口.动土.安床.作灶.入殓.移柩.安葬.破土.结网.取渔.畋猎.˷c')诸事不宜.破屋.坏垣.˷bE 安床.嫁娶.作灶.入宅.祭祀.解除.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.谢土.沐浴.扫舍.捕捉.取渔.结网.畋猎.理发.X˷aaa开市.作灶.安床.入宅.上梁.裁衣.动土.入殓.嫁娶.移柩.安葬.破土.)˷`S开光.造屋.动土.作灶.栽种.造车器.纳采.订盟.祭祀.祈福.求嗣.移徙.出行.开市.出火.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?˷_'i诸事不宜.修饰垣墙.平治道涂.祭祀.余事勿取.%˷^S入宅.作灶.治病.安葬.移徙.嫁娶.冠笄.纳采.出行.会亲友.上梁.安机械.安床.牧养.畋猎.祭祀.祈福.开光.修造.安门.造屋.起基.=˷]'c诸事不宜.嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.启攒.除服.成服.;˷'a诸事不宜.裁衣.伐木.作梁.纳财.交易.立券.n˷75词讼.出火.入宅.祭祀.合帐.裁衣.经络.伐木.作梁.安床.作灶.入殓.安葬.启攒.移柩.˷oC入宅.作灶.伐木.安葬.出火.出行.纳畜.嫁娶.开光.祈福.求嗣.解除.动土.安床.栽种.开池.掘井.祭祀.破土.启攒."˷}W嫁娶.安葬.破土.作梁.纳畜.牧养.行丧.作灶.移徙.祭祀.开光.祈福.出行.解除.进人口.雇庸.安床.动土.起基.上梁.安门.解除.B˷'o诸事不宜.结网.入殓.除服.成服.移柩.安葬.破土.˷7 嫁娶.作灶.安床.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.入宅.移徙.上梁.挂匾.开池.入殓.安葬.破土.启攒. s[q A  k  + C -4{uQs;˷'a余事勿取.祭祀.解除.治病.破屋.坏垣.扫舍.˷ E{开市.立券.理发.作灶.嫁娶.祭祀.祈福.出行.解除.出火.拆卸.动土.入宅.移徙.安床.上梁.栽种.纳畜.破土.启攒.安葬.˷ ')诸事不宜.解除.沐浴.f˷ C栽种.出行.祈福.行丧.纳畜.安葬.安门.伐木.作梁.牧养.作灶.解除.平治道涂.˷ 5入宅.移徙.出火.分居.安香.作灶.开市.交易.立券.安葬.动土.伐木.嫁娶.开光.求嗣.会亲友.安床.牧养.塑绘.针灸.˷ )掘井.词讼.嫁娶.安床.开光.出行.祭祀.动土.出火.解除.会亲友.开市.交易.立券.挂匾.入宅.移徙.拆卸.破土.启攒.安葬.˷oQ嫁娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.裁衣.竖柱.上梁.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.启攒.u˷ o开光.掘井.针灸.出行.嫁娶.入宅.移徙.作灶.动土.祭祀.祈福.求嗣.入殓.启攒.安葬.移柩.˷E 入殓.安葬.作灶.入宅.祭祀.沐浴.祈福.求嗣.斋醮.订盟.纳采.裁衣.冠笄.开市.立券.交易.纳财.沐浴.除服.谢土.出行.移柩.>˷EG安葬.作灶.伐木.作梁.祭祀.求嗣.沐浴.酬神.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造仓.开池.经络.纳财.开市.立券.交易.结网.取渔.纳畜.捕捉.X˷E}嫁娶.上梁.入宅.作灶.取渔.入殓.除服.成服.移柩.破土.安葬.立碑.;˷)]作灶.安床.祈福.求嗣.斋醮.塑绘.开光.订盟.纳采.嫁娶.动土.入宅.安香.移柩.安葬.谢土.出行.沐浴.修造.竖柱.上梁.纳财.破土.解除.安门.放水.˷')诸事不宜.求医.破屋.B˷EO栽种.动土.开市.作灶.祭祀.祈福.酬神.订盟.纳采.冠笄.裁衣.合帐.嫁娶.安床.移徙.入宅.安香.入殓.移柩.启攒.安葬.解除.取渔.捕捉.伐木.安门.出火.]˷E造屋.栽种.安葬.作灶.塑绘.开光.酬神.斋醮.订盟.纳采.裁衣.合帐.拆卸.动土.上梁.安床.安香.造庙.挂匾.会亲友.进人口.出行.修造.纳财.伐木.放水.出火.纳畜.沐浴.安门.A˶_5祭祀.祈福.安葬.安门.余事勿取.作灶.平治道涂.X˶~E}斋醮.作灶.安床.安葬.安床.合帐.入宅.问名.纳采.求嗣.祭祀.开仓.0˶}U掘井.祭祀.斋醮.裁衣.合帐.冠笄.订盟.纳采.嫁娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲友.出行.祈福.求嗣.立碑.上梁.放水.[˶|Su祭祀.祈福.移徙.嫁娶.入宅.裁衣.合帐.入殓.除服.成服.会亲友.纳财.Y˶{E嫁娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.针灸.余事勿取.˶z 置产.嫁娶.出行.开光.栽种.动土.破土.入宅.治病.安床.裁衣.交易.立券.入殓.移柩.安葬.除服.成服.&˶y O嫁娶.栽种.安葬.理发.造庙.作灶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈福.求嗣.动土.,˶3'C诸事不宜.祭祀.解除.余事勿取.^˶2'%余事勿取.祭祀.入殓.破土.除服.成服.启攒.安葬.修坟.立碑.余事勿取.˶1E 安床.伐木.祈福.纳畜.嫁娶.开市.交易.立券.开光.出行.出火.拆卸.修造.入宅.移徙.动土.破土.移柩.安葬.启攒.除服.成服.,˶0'C诸事不宜.破屋.坏垣.余事勿取. ˶/}-掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.开光.入宅.移徙.安床.修造.动土.进人口.˶.}A掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.动土.会亲友.起基.造仓.纳畜.牧养.作厕.进人口.F˶-'w余事勿取.祭祀.解除.修饰垣墙.平治道涂.余事勿取.˶,'修造.上梁.入宅.祈福.探病.掘井.动土.安门.安葬.作灶.开市.交易.立券.纳财.开池.补垣.嫁娶.纳采.纳畜.取渔.安床.˶+E 嫁娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.伐木.作梁.出火.入宅.移徙.安床.拆卸.动土.上梁.栽种.纳畜.安葬. "X+ P  r ED0 =˶*'e余事勿取.解除.扫舍.祭祀.教牛马.余事勿取.˶)Ek作灶.掘井.嫁娶.入宅.祭祀.祈福.斋醮.沐浴.安床.安机械.造车器.入殓.移柩.启攒.安葬.立碑.合帐.经络.交易. ˶(E]栽种.嫁娶.入殓.安葬.祭祀.出行.沐浴.裁衣.祈福.斋醮.订盟.纳采.嫁娶.安机械.开市.立券.安碓磑.纳畜.|˶'EC开仓.造屋.安葬.安床.祭祀.祈福.斋醮.塑绘.开光.除服.成服.入殓.作灶.嫁娶.捕捉.畋猎.纳财.Q˶&) 破土.伐木.入殓.除服.成服.移柩.启攒.安葬.立碑.余事勿取.u˶%)Q入宅.安床.塑绘.开光.出行.订盟.纳采.除服.成服.嫁娶.纳婿.入殓.移柩.启攒.安葬.立碑.3˶$'Q诸事不宜.解除.破屋.坏垣.余事勿取.Z˶#E造屋.开市.作灶.入宅.祭祀.会亲友.出行.订盟.纳采.沐浴.修造.动土.祈福.斋醮.嫁娶.拆卸.安床.入殓.移柩.安葬.谢土.赴任.裁衣.竖柱.上梁.伐木.捕捉.栽种.破土.安门.%˶"E出行.治病.安葬.开市.会亲友.纳采.进人口.修造.动土.竖柱.上梁.祭祀.开光.塑绘.祈福.斋醮.嫁娶.安床.移徙.入宅.安香.纳畜.U˶!Ew嫁娶.移徙.入宅.开光.修饰垣墙.平治道涂.入殓.移柩.余事勿取.{˶ EA作灶.掘井.谢土.入宅.出行.嫁娶.订盟.纳采.入殓.安床.启攒.安葬.祭祀.裁衣.会亲友.进人口.B˶EO作灶.祭祀.上梁.出行.沐浴.解除.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.移徙.入宅.除服.成服.移柩.破土.启攒.安葬.扫舍.修坟.伐木.纳财.交易.立券.,˶'C诸事不宜.祭祀.解除.余事勿取.A˶EM开仓.嫁娶.移徙.入宅.祭祀.沐浴.祈福.斋醮.订盟.纳采.裁衣.拆卸.起基.竖柱.上梁.安床.入殓.除服.成服.移柩.启攒.挂匾.求嗣.出行.合帐.造畜椆栖.b˶E嫁娶.入殓.安葬.出行.塑绘.开光.沐浴.冠笄.会亲友.作灶.放水.造畜椆栖.;˶)_开市.安床.祭祀.作灶.入殓.除服.余事勿取.X˶E}开市.伐木.嫁娶.作梁.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.,˶'C诸事不宜.解除.扫舍.余事勿取.˶EQ安门.栽种.作灶.治病.安床.祭祀.祈福.求嗣.冠笄.伐木.架马.动土.开池.作厕.结网.入殓.除服.成服.:˶'_诸事不宜.破屋.坏垣.祭祀.沐浴.余事勿取.,˶'C诸事不宜.祭祀.解除.余事勿取.˶a5嫁娶.开市.作灶.置产.作梁.伐木.入宅.安床.开光.祭祀.出火.拆卸.动土.挂匾.入殓.破土.安葬.纳畜.2o'O诸事不宜.祭祀.修饰垣墙.余事勿取. n5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.ma_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;l'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. kaA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#j5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mi37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,h'C诸事不宜.解除.坏垣.余事勿取.ga_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3f'Q诸事不宜.治病.破屋.坏垣.余事勿取.Re) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."d)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬. ", s  ?  w " SCd>K,q"W+c'A诸事不宜.平治道涂.余事勿取.Nb)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.Ja)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=`Q;入宅.动土.破土.余事勿取.教牛马.余事勿取.5_)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.J^)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<])a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.u\ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. [SW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:Z'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>YEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.XEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PWaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.Va_祈福.祭祀.伐木.掘井.作灶.谢土.嫁娶.开光.出行.出火.拆卸.修造.动土.入宅.移徙.安床.上梁.开市.交易.立券.栽种. U5u嫁娶.冠笄.出行.祈福.安葬.伐木.入宅.移徙.出火.栽种.动土.上梁.开光.裁衣.安门.会亲友.安床.结网.理发. T)置产.安床.嫁娶.开光.出行.解除.出火.拆卸.修造.进人口.动土.入宅.移徙.栽种.纳畜.掘井.安葬.除服.成服.,S'C余事勿取.祭祀.沐浴.余事勿取.R}入宅.移徙.嫁娶.掘井.作灶.出火.进人口.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.启攒.%Q'5余事勿取.解除.余事勿取.q o安床.开市.交易.出货财.安葬.修坟.嫁娶.作灶.祭祀.沐浴.结网.移柩.入殓.除服.成服. aW入宅.作灶.词讼.移徙.出行.赴任.祭祀.祈福.求嗣.开光.解除.理发.会亲友.栽种.纳畜.牧养.安葬.修坟.立碑.启攒.)探病.安葬.嫁娶.祭祀.开光.出火.出行.拆卸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.栽种.纳畜.,'C诸事不宜.破屋.坏垣.余事勿取. 5嫁娶.开市.出火.栽种.破土.动土.入宅.移徙.安香.分居.掘井.作灶.开光.解除.拆卸.修造.动土.安床.纳畜.安葬.启攒.入殓.) U嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.出行.拆卸.进人口.入宅.移徙.安床.栽种.动土.修造.纳畜.入殓.安葬.立碑.除服.成服.}Q栽种.破土.置产.祭祀.嫁娶.动土.作灶.祈福.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.''诸事不宜.诸事不宜.V!开市.祭祀.祈福.斋醮.塑绘.开光.订盟.纳采.裁衣.冠笄.嫁娶.拆卸.入宅.安香.入殓.移柩.理发.安葬.修坟.谢土.赴任.移徙.沐浴.治病.破土.启攒.整手足甲.入学.作梁.SEs嫁娶.动土.安葬.作灶.祭祀.沐浴.出行.冠笄.进人口.余事勿取.`)'入宅.作灶.祈福.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.''诸事不宜.诸事不宜.,~'C诸事不宜.沐浴.扫舍.余事勿取.j}E嫁娶.入宅.治病.赴任.祭祀.祈福.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造畜椆栖.入殓.移柩.启攒.安葬.谢土.除服.成服.会亲友.竖柱.上梁.经络.开市.交易.立券.纳财.纳畜.筑堤.^|)#造屋.治病.祭祀.解除.祈福.开光.塑绘.斋醮.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.入殓.除服.成服.移柩.启攒.安床.赴任.出行.移徙.竖柱.上梁.伐木.栽种.破土.安葬.纳畜. ".i%y; O  k <  u 8F6T m.:{'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取. zEe开市.交易.破土.作灶.祭祀.塑绘.开光.订盟.纳采.嫁娶.安床.进人口.入殓.除服.成服.移柩.启攒.安葬.立碑.%y)1作灶.治病.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.赴任.进人口.会亲友.xEK作灶.治病.伐木.作梁.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.除服.成服.入殓.移柩.安葬.谢土.赴任.会亲友.进人口.出行.竖柱.上梁.经络.开市.交易.立券.纳财.开仓.FwEY嫁娶.入宅.安门.移徙.理发.会亲友.补垣.塞穴.结网.ZvE入宅.作灶.安床.开仓.祭祀.会亲友.嫁娶.沐浴.修造.动土.祈福.开光.塑绘.出行.订盟.纳采.裁衣.入殓.除服.成服.移柩.启攒.赴任.竖柱.上梁.纳财.扫舍.栽种.纳畜.伐木.,u'C诸事不宜.祭祀.沐浴.余事勿取.ptS开光.掘井.安葬.谢土.修坟.嫁娶.冠笄.安床.纳采.会亲友.塞穴.捕捉.置产.造畜椆栖.LsSU移徙.入宅.安门.作梁.安葬.祭祀.祈福.求嗣.斋醮.沐浴.冠笄.出行.理发.拆卸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫舍.除服.成服.移柩.启攒.立碑.谢土.r)安床.安葬.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.进人口.开市.交易.立券.挂匾.纳财.入宅.移徙.栽种.破土.谢土.'C诸事不宜.破屋.坏垣.余事勿取.#=5嫁娶.出行.安床.作灶.祭祀.入宅.移徙.出火.进人口.置产.开光.解除.起基.动土.拆卸.上梁.立碑.修坟.安葬.破土.启攒.移柩.0< c嫁娶.祭祀.祈福.求嗣.沐浴.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.入宅.移徙.安床.栽种.纳畜.入殓.安葬.启攒.除服.成服.W;E{嫁娶.移徙.入宅.开市.沐浴.入殓.移柩.除服.成服.破土.平治道涂.:''诸事不宜.诸事不宜.:9'_诸事不宜.祭祀.沐浴.赴任.出行.余事勿取._8oa动土.冠笄.移徙.入宅.开市.竖柱.上梁.祭祀.出行.成服.除服.沐浴.入殓. 7Ee安床.开光.开市.交易.祭祀.裁衣.冠笄.嫁娶.安机械.拆卸.动土.起基.移徙.入宅.入殓.启攒.安葬.造仓.经络.46E5入殓.安葬.开市.交易.祭祀.诸事不宜.{5EA移徙.入宅.作灶.安葬.祭祀.裁衣.冠笄.嫁娶.纳婿.会亲友.除服.成服.移柩.捕捉.进人口.入殓.u4)Q定磉.安葬.祭祀.赴任.动土.上梁.开光.塑绘.冠笄.拆卸.起基.安床.开市.立券.赴任.经络.73E9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.嫁娶.拆卸.起基.安床.入宅.开市.入殓.除服.成服.移柩.破土.谢土.挂匾.开柱眼.交易.I2E_移徙.入宅.出行.栽种.祭祀.沐浴.破屋.坏垣.余事勿取.1EW作灶.祭祀.入宅.嫁娶.祭祀.冠笄.会亲友.拆卸.起基.除服.成服.移柩.启攒.安葬.沐浴.捕捉.开光.塑绘.A0)i入宅.伐木.祭祀.会亲友.纳采.嫁娶.开光.塑绘.斋醮.安香.开市.立券.除服.成服.入殓.移柩.安葬.赴任.进人口.出行.裁衣.修造.动土.上梁.经络.交易.:/)]嫁娶.入宅.祭祀.沐浴.修饰垣墙.平治道涂..)e嫁娶.安葬.祭祀.沐浴.解除.理发.冠笄.安机械.作灶.造仓.开市.开池.作厕.补垣.塞穴.断蚁.结网. "vF X 1 5 t  X1pn m.u v-Em造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上梁.合脊.安床.移徙.入宅.开市.栽种.作厕.c,S动土.作灶.行丧.安葬.修坟.祭祀.祈福.求嗣.出行.沐浴.交易.扫舍.教牛马.}+_+安床.动土.安葬.开生坟.合寿木.祭祀.裁衣.安门.纳财.扫舍.出行.进人口.作灶.纳畜.造畜椆栖.*}开光.出行.修造.上梁.入宅.安门.作灶.裁衣.祭祀.动土.筑堤.开池.会亲友.塞穴.入殓.移柩.破土.安葬.%)}]造屋.入殓.安葬.伐木.入宅.移徙.置产.纳畜.嫁娶.祭祀.祈福.求嗣.开光.出行.解除.安床.栽种.移柩.进人口.会亲友.除服.成服.(}I动土.破土.理发.出行.入宅.分居.安香.出火.祭祀.开光.解除.移徙.裁衣.开市.立券.祈福.求嗣.进人口.交易.纳财.纳畜.'E{栽种.作灶.针灸.出行.嫁娶.出火.拆卸.祭祀.祈福.开光.伐木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.h&'9诸事不宜.祭祀.结网.入殓.移柩.启攒.安葬.移柩.除服.成服.合寿木.余事勿取.,%'C诸事不宜.破屋.坏垣.余事勿取.^_'%诸事不宜.祭祀.求医.捕捉.栽种.塞穴.入殓.破土.安葬.移柩.余事勿取.)^)9嫁娶.移徙.祭祀.求嗣.开光.出行.伐木.作梁.出火.解除.拆卸.进人口.修造.动土.起基.安床.栽种.纳畜.入殓.破土.安葬.除服.成服.N]'诸事不宜.祭祀.作灶.沐浴.修饰垣墙.平治道涂.余事勿取.\嫁娶.纳财.祈福.安葬.修造.开市.交易.立券.动土.上梁.塑绘.开光.进人口.纳畜.补垣.塞穴.栽种.牧养.[ %嫁娶.会亲友.进人口.出行.入宅.移徙.赴任.作灶.祭祀.解除.沐浴.理发.整手足甲.入殓.移柩.破土.安葬.扫舍.ZSm破土.置产.掘井.动土.安床.祭祀.祈福.求嗣.开光.出行.解除.上梁.造屋.移徙.安门.纳财.牧养.纳畜.安葬.启攒.入殓.Ya_造屋.开光.理发.造船.掘井.作灶.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.移徙.动土.安床.入殓.破土.安葬.启攒.X}入宅.作梁.安门.伐木.修造.上梁.入殓.造屋.嫁娶.祭祀.祈福.求嗣.出行.动土.安床.掘井.破土.启攒.FW)u动土.安葬.订盟.纳采.祭祀.祈福.安机械.作灶.纳畜.gV)5开光.针灸.嫁娶.订盟.纳采.祭祀.祈福.求医.治病.动土.移徙.入宅.破土.安葬.`U)'动土.破土.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.移徙.入宅.启攒.安葬.:T'_诸事不宜.沐浴.治病.破屋.坏垣.余事勿取.5S)S嫁娶.入宅.捕捉.结网.入殓.破土.安葬.CR)o开市.安葬.嫁娶.祭祀.祈福.斋醮.动土.移徙.入宅.MQCi嫁娶.祈福.余事勿取.沐浴.修饰垣墙.平治道涂.余事勿取.NP)开市.安葬.订盟.纳采.出行.会亲友.修造.上梁.移徙.入宅.RO) 嫁娶.开市.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.安葬.JN7o作灶.动土.破土.嫁娶.出行.纳畜.祭祀.入殓.启攒.安葬.CM)o动土.破土.嫁娶.祭祀.祈福.斋醮.作灶.移徙.入宅. L 祈福.出行.订盟.纳采.嫁娶.裁衣.动土.安床.放水.开市.掘井.交易.立券.栽种.开渠.除服.成服.移柩.破土.K 3塑绘.开光.解除.订盟.纳采.嫁娶.出火.修造.动土.移徙.入宅.拆卸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养. J 祈福.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生坟.入殓.除服.成服.移柩.破土.安葬.7IS+动土.破土.订盟.安床.开池.祈福.斋醮.出行.冠笄.嫁娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除服.成服.移柩.破土.安葬.启攒.4H)Q行丧.安葬.破屋.坏垣.治病.余事勿取.|GS5嫁娶.纳采.订盟.开市.入宅.祭祀.捕捉.畋猎.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.启攒. %1T# & u h 17yPkunF a嫁娶.开市.出火.作灶.置产.斋醮.入宅.移徙.安门.解除.祭祀.理发.入殓.安葬.破土.EoQ嫁娶.栽种.行丧.理发.修坟.行丧.作灶.祭祀.祈福.求嗣.开光.伐木.出火.拆卸.入宅.安床.修造.动土.上梁.挂匾.纳畜.,D'C诸事不宜.祭祀.解除.余事勿取.C}5作灶.动土.上梁.栽种.入宅.移徙.修造.祈福.嫁娶.开光.解除.安床.牧养.理发.开市.入殓.启攒.移柩.安葬.扫舍."B G嫁娶.祭祀.祈福.求嗣.开光.出火.拆卸.修造.动土.进人口.开市.交易.立券.挂匾.入宅.移徙.栽种.纳畜.入殓.启攒.除服.成服.tA_嫁娶.作灶.安葬.动土.词讼.作梁.伐木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^{'%余事勿取.祭祀.入殓.破土.除服.成服.移柩.启攒.安葬.谢土.余事勿取.mz}o嫁娶.出行.安葬.入殓.入宅.作灶.冠笄.上梁.祭祀.祈福.求嗣.开光.开市.牧养.理发.iy}g安葬.经络.修坟.破土.开市.安床.启攒.立碑.祭祀.作灶.纳财.栽种.纳畜.进人口."x G嫁娶.开光.出行.祈福.求嗣.解除.拆卸.动土.修造.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.纳畜.入殓.移柩.安葬.wE{伐木.祭祀.纳畜.祭祀.嫁娶.开光.出行.理发.作梁.出火.拆卸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.栽种.,v'C诸事不宜.破屋.坏垣.余事勿取.u}嫁娶.入宅.移徙.作灶.开市.交易.安门.栽种.祭祀.解除.沐浴.整手足甲.入殓.移柩.破土.启攒.安葬.toW嫁娶.破土.置产.栽种.安葬.修坟.行丧.入宅.移徙.安床.开光.祈福.求嗣.进人口.开市.交易.立券.出火.拆卸.修造.动土.jsa开仓.出货财.置产.安葬.动土.破土.掘井.栽种.嫁娶.祭祀.裁衣.结网.冠笄.沐浴.Jr7o祈福.动土.破土.嫁娶.出行.开市.安床.入殓.启攒.安葬.Cq)o开市.入宅.嫁娶.祭祀.祈福.斋醮.治病.破土.安葬.Jp)}动土.安葬.嫁娶.纳采.出行.祭祀.祈福.解除.移徙.入宅.^o'%诸事不宜.补垣.塞穴.结网.入殓.除服.成服.移柩.安葬.启攒.余事勿取.Jn)}造庙.安葬.嫁娶.开市.立券.祭祀.祈福.动土.移徙.入宅..m)E开市.破土.祭祀.作灶.纳财.捕捉.Rl赴任.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.Yk)祭祀.祈福.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.3j'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.Ji7o嫁娶.移徙.入宅.纳采.祭祀.祈福.解除.动土.破土.安葬.,h'C诸事不宜.沐浴.扫舍.余事勿取.Pg' 余事勿取.祭祀.冠笄.嫁娶.捕捉.结网.畋猎.取渔.余事勿取.f !塑绘.出行.冠笄.嫁娶.进人口.裁衣.纳婿.造畜椆栖.交易.立券.牧养.开生坟.入殓.除服.成服.移柩.安葬.启攒.eS;开市.斋醮.安床.出行.经络.移徙.入宅.治病.会亲友.祭祀.祈福.斋醮.安香.移徙.嫁娶.造屋.起基.dEo动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲友.裁衣.开仓.经络.纳畜.造畜椆栖.教牛马.牧养.Wca_移徙.开市.入宅.嫁娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿取.b-嫁娶.掘井.入宅.移徙.出火.出行.行丧.安葬.开光.理发.进人口.修造.动土.起基.安门.安床.栽种.筑堤.补垣.造畜椆栖.,a'C诸事不宜.解除.坏垣.余事勿取.,`'C诸事不宜.祭祀.作灶.余事勿取.&_}_嫁娶.出火.伐木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.栽种.安床.拆卸.修造.动土.上梁.入殓.安葬.破土.除服.成服.^oQ嫁娶.造桥.词讼.移徙.安门.作灶.栽种.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.经络.破土.,]'C诸事不宜.破屋.坏垣.余事勿取. $YU| F  t - S %JqS5`YaQ嫁娶.开市.交易.行丧.安葬.修坟.祭祀.祈福.求嗣.开光.出行.伐木.出火.拆卸.修造.动土.起基.安床.入宅.移徙.) U嫁娶.祭祀.开光.祈福.求嗣.出行.出火.拆卸.动土.修造.进人口.入宅.移徙.安床.挂匾.交易.立券.栽种.纳畜.入殓.破土.启攒.安葬.ra出行.安门.修造.嫁娶.上梁.入宅.祭祀.理发.修饰垣墙.平治道涂.沐浴.整手足甲.扫舍.&)3置产.安床.开光.求嗣.出行.解除.伐木.出火.拆卸.修造.上梁.起基.入宅.移徙.开市.交易.立券.栽种.牧养.入殓.安葬.除服.成服.E{安葬.行丧.伐木.作梁.嫁娶.祭祀.祈福.出火.开光.求嗣.出行.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.动土.,'C诸事不宜.祭祀.解除.余事勿取.E安葬.出行.祈福.栽种.求嗣.嫁娶.纳采.合帐.裁衣.冠笄.伐木.作梁.修造.动土.起基.竖柱.上梁.安门.作灶.筑堤.造畜椆栖.E{安葬.开市.交易.立券.嫁娶.开光.祭祀.祈福.求嗣.出行.解除.伐木.入宅.移徙.安床.出火.拆卸.修造.上梁.栽种.移柩.,'C诸事不宜.祭祀.栽种.余事勿取.J )}嫁娶.开光.开光.求医.治病.动土.上梁.入殓.破土.安葬.J )}开光.开市.嫁娶.订盟.纳采.祭祀.祈福.入殓.破土.安葬. ''诸事不宜.诸事不宜.R ) 开市.安葬.订盟.纳采.出行.祭祀.祈福.修造.动土.移徙.入宅.` 5作灶.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.;)_行丧.安葬.嫁娶.祭祀.沐浴.扫舍.修饰垣墙.Y)动土.破土.嫁娶.纳采.出行.求医.治病.开市.移徙.入宅.启攒.安葬.M7u移徙.入宅.安葬.订盟.纳采.出行.祈福.斋醮.安床.会亲友.<7S上梁.动土.破土.祭祀.入殓.移柩.启攒.安葬.5)S嫁娶.安葬.裁衣.作灶.移徙.入宅.纳畜.Y)开市.安门.嫁娶.纳采.祭祀.祈福.求医.治病.出行.动土.移徙.入宅.@'k诸事不宜.祭祀.捕捉.取渔.修饰垣墙.余事勿取. #订盟.纳采.会亲友.进人口.雕刻.拆卸.修造.动土.起基.开市.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.EI开市.安门.掘井.作灶.嫁娶.出行.安机械.祭祀.塑绘.开光.治病.经络.安床.结网.塞穴.破土.入殓.B)m嫁娶.入宅.破屋.坏垣.求医.治病.畋猎.余事勿取.^~S{开市.交易.嫁娶.安葬.行丧.祭祀.沐浴.捕捉.结网.畋猎.取渔.余事勿取.%} M祭祀.祈福.求嗣.开光.解除.合帐.冠笄.伐木.架马.作梁.修造.进人口.嫁娶.裁衣.合帐.安床.动土.起基.上梁.竖柱.放水.会亲友.)| U嫁娶.祭祀.祈福.求嗣.开光.出火.出行.拆卸.动土.解除.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上梁.安葬.破土.谢土.{{} 嫁娶.移徙.伐木.作梁.安床.祭祀.祈福.造屋.沐浴.平治道涂.扫舍.入殓.破土.安葬.除服.成服.Bza5塞穴.上梁.动土.伐木.安葬.词讼.进人口.会亲友.yE嫁娶.安床.探病.作灶.开市.交易.立券.挂匾.开光.出行.拆卸.进人口.入宅.移柩.动土.安门.上梁.栽种.破土.修坟.安葬.,3'C诸事不宜.解除.扫舍.余事勿取.27{开光.掘井.开仓.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.动土.入宅.移徙.安床.作灶.塞穴.栽种.破土.安葬.1'纳畜.入宅.移徙.安葬.探病.伐木.上梁.安门.入殓.动土.嫁娶.祭祀.祈福.求嗣.开光.开市.交易.立券.安床.出行.拆卸.,0'C诸事不宜.结网.解除.余事勿取."/as入宅.移徙.理发.出火.嫁娶.出行.开市.交易.立券.祭祀.祈福.开光.伐木.进人口.安床.拆卸.修造.动土.栽种.破土.移柩.安葬.%. M嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.动土.上梁.出火.进人口.入宅.移徙.安床.栽种.纳畜.牧养.竖柱.安门.修造.解除.会亲友. (Xb# @ # ~ ?  t CF`bg1QGX:-'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.*,C嫁娶.上梁.修造.拆卸.架马.入宅.伐木.动土.出火.开柱眼.祭祀.开光.出行.解除.塑绘.裁衣.入殓.移柩.破土.启攒.安葬.除服.成服."+ G嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.安门.开市.交易.立券.挂匾.栽种.破土.安葬.]*'#诸事不宜.沐浴.平治道涂.扫舍.入殓.移柩.破土.启攒.安葬.余事勿取.E))s开市.安葬.订盟.纳采.会亲友.安床.作灶.造畜椆栖.`()'移徙.入宅.嫁娶.订盟.纳采.出行.祭祀.祈福.斋醮.动土.上梁.破土.安葬.,''C诸事不宜.塞穴.结网.余事勿取.Y&)赴任.捕捉.嫁娶.裁衣.祭祀.出行.安床.作灶.移徙.入宅.破土.安葬.C%)o嫁娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<$7S动土.破土.安葬.嫁娶.纳采.出行.移徙.入宅.J#)}嫁娶.安葬.纳采.祭祀.祈福.开市.求医.治病.动土.纳畜.`")'祈福.斋醮.嫁娶.纳采.祭祀.祈福.出行.动土.上梁.移徙.入宅.破土.安葬.3!'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.Y )开市.开光.嫁娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y'安门.嫁娶.纳采.出行.祭祀.祈福.开市.动土.移徙.入宅.破土.安葬. 7会亲友.进人口.修造.动土.起基.移徙.开市.纳畜.入殓.除服.成服.移柩.破土.安葬.修坟.立碑.会亲友.开光.出行.嫁娶.D's诸事不宜.进人口.牧养.置产.塞穴.结网.余事勿取. 1开光.出行.纳采.嫁娶.伐木.架马.出火.拆卸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除服.成服.移柩.安葬.4)Q破土.安葬.塞穴.断蚁.结网.余事勿取.''余事勿取.余事勿取.}S7开市.入宅.探病.出火.造屋.嫁娶.祭祀.祈福.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.针灸.理发.会亲友.起基.修造.动土.竖柱.定磉.安床.拆卸.纳畜.牧养.放水.破土.除服.成服.修坟.立碑.E{祭祀.入殓.安葬.探病.嫁娶.祈福.求嗣.开光.出行.解除.拆卸.出火.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,'C诸事不宜.解除.破屋.余事勿取. +祭祀.祈福.求嗣.开光.解除.纳采.冠笄.出火.拆卸.进人口.安床.动土.上梁.造庙.掘井.开池.入殓.移柩.安葬.破土.,'C诸事不宜.塞穴.扫舍.余事勿取.:N'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取.M}Q动土.破土.纳财.掘井.挂匾.开市.伐木.交易.祭祀.祈福.求嗣.开光.解除.出火.拆卸.入宅.安床.修造.安门.纳畜.启攒.安葬.L 进人口.出行.嫁娶.置产.安床.赴任.安葬.作灶.祭祀.祈福.开光.解除.动土.纳财.交易.纳畜.扫舍.FK'w诸事不宜.祭祀.平治道涂.解除.修饰垣墙.余事勿取.J}I谢土.祈福.上梁.作灶.斋醮.修造.入宅.安门.纳采.嫁娶.开光.出行.理发.会亲友.开市.安床.栽种.牧养.入殓.移柩.启攒.%I}]嫁娶.纳财.安葬.出行.开市.立券.作灶.栽种.祭祀.祈福.开光.求嗣.解除.伐木.出火.入宅.移徙.安床.拆卸.修造.动土.造畜椆栖.IH'}诸事不宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿取.|G7Q词讼.开光.开市.嫁娶.出行.合帐.冠笄.安床.除服.成服.作灶.交易.立券.入殓.移柩.破土.安葬.FaW祈福.入殓.祭祀.作灶.安葬.探病.嫁娶.开光.出行.出火.拆卸.进人口.开市.立券.交易.挂匾.入宅.移徙.安床.栽种.,E'C诸事不宜.解除.坏垣.余事勿取.D' 诸事不宜..C77嫁娶.入宅.安葬.沐浴.结网.取渔.:B'_诸事不宜.祭祀.求医.治病.解除.余事勿取.JA7o开市.动土.破土.嫁娶.纳采.祭祀.祈福.出行.移徙.求医.J@7o嫁娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬. <W 4 ~ L { d 5pVlg4?)Q嫁娶.安葬.祭祀.作灶.掘井.平治道涂.F>7g嫁娶.动土.破土.祭祀.会亲友.开市.安床.启攒.安葬.Q=7}嫁娶.开市.安葬.纳采.开光.求医.治病.动土.上梁.移徙.入宅.j<S掘井.动土.破土.安葬.开光.祭祀.进人口.嫁娶.安床.解除.冠笄.出行.裁衣.扫舍.;Ek掘井.安门.嫁娶.纳采.祭祀.祈福.裁衣.合帐.安床.入殓.除服.成服.移柩.破土.启攒.安葬.谢土.立碑.造畜椆栖.%:E入殓.安葬.入宅.安床.订盟.纳采.嫁娶.进人口.会亲友.交易.立券.动土.除服.谢土.移柩.破土.启攒.赴任.出行.开市.纳财.栽种.:9Q5造庙.嫁娶.安床.余事勿取.祭祀.余事勿取.8EW出火.入宅.安葬.伐木.祭祀.塑绘.开光.订盟.纳采.冠笄.裁衣.安机械.拆卸.修造.动土.安床.经络.开市.7''诸事不宜.诸事不宜.f6S 嫁娶.开市.交易.入宅.安葬.祭祀.沐浴.破屋.坏垣.求医.治病.解除.余事勿取.5E 开市.动土.掘井.开池.祭祀.祈福.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.取渔.解除.安葬.启攒.谢土.入殓.^4)#入宅.安门.祭祀.开光.塑绘.祈福.斋醮.裁衣.合帐.冠笄.嫁娶.拆卸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.理发.伐木.架马.作梁.出火.修造.起基.定磉.放水.赴任.]3)!伐木.作梁.祭祀.会亲友.订盟.裁衣.合帐.安机械.拆卸.上梁.安门.入殓.除服.成服.移柩.启攒.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.经络.<2EE栽种.造屋.作灶.入宅.祭祀.嫁娶.纳婿.安葬.Y1E}出行.斋醮.安葬.嫁娶.开光.塑绘.求嗣.纳采.裁衣.合帐.冠笄.安机械.作梁.开柱眼.安门.安床.造仓.祭祀.会亲友.祈福.经络.纳财.开市.立券.交易.入学.求嗣.理发.架马.4kE5安门.作灶.安葬.嫁娶.塞穴.诸事不宜.XjE}掘井.动土.作灶.栽种.祭祀.出行.嫁娶.冠笄.安床.入殓.移柩.安葬.hiE祭祀.开光.嫁娶.入宅.订盟.纳采.裁衣.合帐.冠笄.安机械.拆卸.安床.入殓.除服.成服.移柩.破土.启攒.安葬.修坟.立碑.经络.交易.立券.纳财.筑堤.造仓.补垣.塞穴.纳畜.伐木.架马.^hE作灶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈福.塑绘.斋醮.沐浴.拆卸.起基.入宅.安香.造庙.移柩.谢土.除服.成服.入学.习艺.出行.竖柱.上梁.掘井.求嗣.解除.伐木.XgE}作灶.开市.安葬.作梁.裁衣.合帐.冠笄.嫁娶.纳婿.安床.入殓.纳财.4fE3嫁娶.栽种.伐木.安葬.祭祀.开光.塑绘.纳采.裁衣.拆卸.安床.起基.动土.竖柱.上梁.移徙.入宅.安香.开市.立券.挂匾.沐浴.出行.求嗣.安门.Ke/w开光.出货财.祭祀.动土.上梁.订盟.纳采.嫁娶.安机械.拆卸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.赴任.出行.移徙.祈福.求嗣.解除.造仓.进人口.-d'E诸事不宜.破屋.坏垣.求医.治病.0cE+安床.开市.立券.作灶.祭祀.祈福.斋醮.订盟.纳采.裁衣.合帐.拆卸.修造.动土.上梁.起基.移柩.安葬.谢土.沐浴.扫舍.开柱眼.伐木.出火.:b)[栽种.伐木.祭祀.嫁娶.祈福.纳采.裁衣.合帐.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲友.挂匾.交易.立券.纳财.造仓.放水.^aE造屋.作灶.治病.探病.冠笄.入殓.除服.成服.移柩.平治道涂.修饰垣墙.%`E出行.嫁娶.入宅.安葬.开光.塑绘.裁衣.冠笄.伐木.拆卸.竖柱.上梁.开仓.会亲友.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5_E7栽种.作灶.安葬.嫁娶.祭祀.扫舍.塞穴.>^EG作灶.掘井.动土.栽种.祈福.开光.塑绘.酬神.订盟.纳采.裁衣.安床.开市.立券.入殓.除服.成服.移柩.启攒.安葬.立碑.赴任.会亲友.出行.交易.竖柱. y? y a % +!h7~!R5y]S_作灶.开光.嫁娶.开市.入宅.订盟.纳采.冠笄.拆卸.修造.动土.安床.入殓.除服.成服.移柩.安葬.破土.启攒.造仓.W\)栽种.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.嫁娶.裁衣.动土.起基.出火.拆卸.移徙.入宅.安香.修造.竖柱.上梁.纳畜.牧养.祈福.求嗣.解除.伐木.定磉.造屋.安门.C[SE嫁娶.入宅.移徙.作灶.安葬.祭祀.沐浴.捕捉.栽种.4ZE3造庙.嫁娶.伐木.安葬.祭祀.开光.塑绘.订盟.纳采.合帐.冠笄.拆卸.动土.起基.上梁.入宅.安香.开市.立券.纳财.沐浴.求嗣.出火.竖柱.安门.Y)作梁.造庙.祭祀.出行.订盟.纳采.裁衣.合帐.冠笄.进人口.动土.安床.作灶.入殓.移柩.安葬.破土.结网.取渔.畋猎.X')诸事不宜.破屋.坏垣.WE 安床.嫁娶.作灶.入宅.祭祀.解除.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.谢土.沐浴.扫舍.捕捉.取渔.结网.畋猎.理发.IV赴任.祈福.求嗣.开光.塑绘.斋醮.订盟.纳采.嫁娶.拆卸.安床.入宅.安香.移柩.修坟.安葬.谢土.栽种.解除.冠笄.裁衣.移徙.修造.动土.竖柱.放水.启攒.立碑.XUSo动土.作灶.入宅.开光.安床.祭祀.嫁娶.纳婿.除服.成服.入殓.移柩.3TE1作灶.出行.入宅.安葬.塑绘.开光.订盟.纳采.裁衣.合帐.冠笄.安机械.会亲友.纳财.开市.立券.交易.安床.竖柱.上梁.结网.栽种.解除.经络.,S'C诸事不宜.扫舍.塞穴.余事勿取.tRa栽种.动土.安葬.掘井.修坟.探病.祭祀.会亲友.立券.交易.裁衣.合帐.嫁娶.冠笄.进人口.;Q'a诸事不宜.裁衣.伐木.作梁.纳财.交易.立券.nP75词讼.出火.入宅.祭祀.合帐.裁衣.经络.伐木.作梁.安床.作灶.入殓.安葬.启攒.移柩.OoC入宅.作灶.伐木.安葬.出火.出行.纳畜.嫁娶.开光.祈福.求嗣.解除.动土.安床.栽种.开池.掘井.祭祀.破土.启攒."N}W嫁娶.安葬.破土.作梁.纳畜.牧养.行丧.作灶.移徙.祭祀.开光.祈福.出行.解除.进人口.雇庸.安床.动土.起基.上梁.安门.解除.BM'o诸事不宜.结网.入殓.除服.成服.移柩.安葬.破土.7 嫁娶.作灶.安床.祭祀.祈福.求嗣.开光.出火.出行.拆卸.修造.动土.入宅.移徙.上梁.挂匾.开池.入殓.安葬.破土.启攒.;'a余事勿取.祭祀.解除.治病.破屋.坏垣.扫舍.E{开市.立券.理发.作灶.嫁娶.祭祀.祈福.出行.解除.出火.拆卸.动土.入宅.移徙.安床.上梁.栽种.纳畜.破土.启攒.安葬.')诸事不宜.解除.沐浴.fC栽种.出行.祈福.行丧.纳畜.安葬.安门.伐木.作梁.牧养.作灶.解除.平治道涂.5入宅.移徙.出火.分居.安香.作灶.开市.交易.立券.安葬.动土.伐木.嫁娶.开光.求嗣.会亲友.安床.牧养.塑绘.针灸.~)掘井.词讼.嫁娶.安床.开光.出行.祭祀.动土.出火.解除.会亲友.开市.交易.立券.挂匾.入宅.移徙.拆卸.破土.启攒.安葬.}oQ嫁娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.裁衣.竖柱.上梁.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.启攒.u| o开光.掘井.针灸.出行.嫁娶.入宅.移徙.作灶.动土.祭祀.祈福.求嗣.入殓.启攒.安葬.移柩.{E 入殓.安葬.作灶.入宅.祭祀.沐浴.祈福.求嗣.斋醮.订盟.纳采.裁衣.冠笄.开市.立券.交易.纳财.沐浴.除服.谢土.出行.移柩.>zEG安葬.作灶.伐木.作梁.祭祀.求嗣.沐浴.酬神.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造仓.开池.经络.纳财.开市.立券.交易.结网.取渔.纳畜.捕捉.XyE}嫁娶.上梁.入宅.作灶.取渔.入殓.除服.成服.移柩.破土.安葬.立碑.;x)]作灶.安床.祈福.求嗣.斋醮.塑绘.开光.订盟.纳采.嫁娶.动土.入宅.安香.移柩.安葬.谢土.出行.沐浴.修造.竖柱.上梁.纳财.破土.解除.安门.放水. &{ c   g jpcw')诸事不宜.求医.破屋.BvEO栽种.动土.开市.作灶.祭祀.祈福.酬神.订盟.纳采.冠笄.裁衣.合帐.嫁娶.安床.移徙.入宅.安香.入殓.移柩.启攒.安葬.解除.取渔.捕捉.伐木.安门.出火.]uE造屋.栽种.安葬.作灶.塑绘.开光.酬神.斋醮.订盟.纳采.裁衣.合帐.拆卸.动土.上梁.安床.安香.造庙.挂匾.会亲友.进人口.出行.修造.纳财.伐木.放水.出火.纳畜.沐浴.安门.At_5祭祀.祈福.安葬.安门.余事勿取.作灶.平治道涂.XsE}斋醮.作灶.安床.安葬.安床.合帐.入宅.问名.纳采.求嗣.祭祀.开仓.0rU掘井.祭祀.斋醮.裁衣.合帐.冠笄.订盟.纳采.嫁娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲友.出行.祈福.求嗣.立碑.上梁.放水.[qSu祭祀.祈福.移徙.嫁娶.入宅.裁衣.合帐.入殓.除服.成服.会亲友.纳财.pEQ出行.嫁娶.入宅.动土.祭祀.祈福.求嗣.酬神.裁衣.安床.立券.交易.入殓.除服.成服.移柩.谢土.启攒.EoEU安葬.上梁.入宅.作灶.祭祀.沐浴.开光.塑绘.祈福.求嗣.订盟.纳采.冠笄.裁衣.嫁娶.动土.除服.成服.移柩.破土.启攒.出行.安碓磑.放水.开市.立券.交易.&nS 伐木.作灶.安葬.取渔.入宅.塑绘.开光.祈福.求嗣.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.Im'}余事勿取.祭祀.结网.入殓.除服.成服.移柩.安葬.破土.&lE安床.栽种.治病.作灶.祭祀.冠笄.嫁娶.拆卸.修造.动土.起基.上梁.造屋.入宅.开市.开池.塞穴.入殓.除服.成服.移柩.安葬.破土.kE 安床.伐木.祈福.纳畜.嫁娶.开市.交易.立券.开光.出行.出火.拆卸.修造.入宅.移徙.动土.破土.移柩.安葬.启攒.除服.成服.,j'C诸事不宜.破屋.坏垣.余事勿取. i}-掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.开光.入宅.移徙.安床.修造.动土.进人口.#}A掘井.安葬.栽种.出行.作灶.开市.入宅.安门.嫁娶.祭祀.祈福.求嗣.动土.会亲友.起基.造仓.纳畜.牧养.作厕.进人口.F"'w余事勿取.祭祀.解除.修饰垣墙.平治道涂.余事勿取.!'修造.上梁.入宅.祈福.探病.掘井.动土.安门.安葬.作灶.开市.交易.立券.纳财.开池.补垣.嫁娶.纳采.纳畜.取渔.安床. E 嫁娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.伐木.作梁.出火.入宅.移徙.安床.拆卸.动土.上梁.栽种.纳畜.安葬.='e余事勿取.解除.扫舍.祭祀.教牛马.余事勿取.Ek作灶.掘井.嫁娶.入宅.祭祀.祈福.斋醮.沐浴.安床.安机械.造车器.入殓.移柩.启攒.安葬.立碑.合帐.经络.交易. E]栽种.嫁娶.入殓.安葬.祭祀.出行.沐浴.裁衣.祈福.斋醮.订盟.纳采.嫁娶.安机械.开市.立券.安碓磑.纳畜.|EC开仓.造屋.安葬.安床.祭祀.祈福.斋醮.塑绘.开光.除服.成服.入殓.作灶.嫁娶.捕捉.畋猎.纳财.Q) 破土.伐木.入殓.除服.成服.移柩.启攒.安葬.立碑.余事勿取.u)Q入宅.安床.塑绘.开光.出行.订盟.纳采.除服.成服.嫁娶.纳婿.入殓.移柩.启攒.安葬.立碑.3'Q诸事不宜.解除.破屋.坏垣.余事勿取.ZE造屋.开市.作灶.入宅.祭祀.会亲友.出行.订盟.纳采.沐浴.修造.动土.祈福.斋醮.嫁娶.拆卸.安床.入殓.移柩.安葬.谢土.赴任.裁衣.竖柱.上梁.伐木.捕捉.栽种.破土.安门.%E出行.治病.安葬.开市.会亲友.纳采.进人口.修造.动土.竖柱.上梁.祭祀.开光.塑绘.祈福.斋醮.嫁娶.安床.移徙.入宅.安香.纳畜.UEw嫁娶.移徙.入宅.开光.修饰垣墙.平治道涂.入殓.移柩.余事勿取.{EA作灶.掘井.谢土.入宅.出行.嫁娶.订盟.纳采.入殓.安床.启攒.安葬.祭祀.裁衣.会亲友.进人口. #_wt g & [ R hU.#X'_BEO作灶.祭祀.上梁.出行.沐浴.解除.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.移徙.入宅.除服.成服.移柩.破土.启攒.安葬.扫舍.修坟.伐木.纳财.交易.立券.,'C诸事不宜.祭祀.解除.余事勿取.AEM开仓.嫁娶.移徙.入宅.祭祀.沐浴.祈福.斋醮.订盟.纳采.裁衣.拆卸.起基.竖柱.上梁.安床.入殓.除服.成服.移柩.启攒.挂匾.求嗣.出行.合帐.造畜椆栖.bE嫁娶.入殓.安葬.出行.塑绘.开光.沐浴.冠笄.会亲友.作灶.放水.造畜椆栖.;)_开市.安床.祭祀.作灶.入殓.除服.余事勿取.XE}开市.伐木.嫁娶.作梁.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.LSU祈福.嫁娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出火.塑绘.裁衣.会亲友.入学.拆卸.扫舍.造仓.挂匾.掘井.开池.结网.栽种.纳畜.破土.修坟.立碑.安葬.入殓.4 7C嫁娶.开市.安葬.破屋.坏垣.余事勿取. E{造屋.开市.动土.破土.嫁娶.祭祀.沐浴.裁衣.出行.理发.移徙.捕捉.畋猎.放水.入宅.除服.成服.启攒.安葬.移柩.入殓.7 )W嫁娶.安葬.祭祀.安碓磑.结网.余事勿取.s a移徙.入宅.造庙.作灶.治病.安葬.祭祀.冠笄.嫁娶.会亲友.进人口.裁衣.结网.平治道涂.O Ei入宅.开光.开市.动土.嫁娶.订盟.纳采.祭祀.祈福.求嗣.会亲友.解除.出行.入学.纳财.开市.交易.立券.习艺.经络.安床.开仓.出货财.纳畜.安葬.启攒.修坟.入殓. 5入宅.移徙.作灶.祈福.祭祀.嫁娶.谢土.掘井.造屋.探病.理发.开光.解除.拆卸.修造.安葬.开市.交易.立券.挂匾.安床.栽种.a_作灶.塑绘.行丧.词讼.伐木.安葬.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.;'a余事勿取.安葬.启攒.移柩.入殓.除服.成服. aA嫁娶.祈福.掘井.行丧.安葬.安床.诸事不宜.作梁.修造.动土.安门.作灶.塞穴.开池.作厕.筑堤.补垣.栽种.#ʢ_5嫁娶.出行.赴任.造屋.入殓.入宅.移徙.出火.进人口.安葬.祭祀.开光.祈福.解除.作梁.动土.安床.掘井.栽种.纳畜.破土.移柩.mʢ^37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ʢ]'C诸事不宜.解除.坏垣.余事勿取.ʢ\a_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ʢ['Q诸事不宜.治病.破屋.坏垣.余事勿取.RʢZ) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."ʢY)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+ʢX'A诸事不宜.平治道涂.余事勿取.NʢW)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JʢV)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=ʢUQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5ʢT)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.JʢS)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.<ʢR)a开市.破土.祭祀.沐浴.安床.纳财.畋猎.捕捉.uʢQ m塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土. ʢPSW开光.栽种.治病.安门.作灶.祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒.:ʢO'_诸事不宜.祭祀.求医.破屋.坏垣.余事勿取.>ʢNEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.ʢMEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.   $ R n ~ M * mntC kPʢLaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.cʢKS嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.KʢJSS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.SʢIaW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;ʢHa%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)ʢGE移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.%ʢF'5余事勿取.解除.余事勿取.qʢEo安床.开市.交易.出货财.安葬.修坟.嫁娶.作灶.祭祀.沐浴.结网.移柩.入殓.除服.成服.ʢDaW入宅.作灶.词讼.移徙.出行.赴任.祭祀.祈福.求嗣.开光.解除.理发.会亲友.栽种.纳畜.牧养.安葬.修坟.立碑.启攒.ʢC)探病.安葬.嫁娶.祭祀.开光.出火.出行.拆卸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.栽种.纳畜.,ʢB'C诸事不宜.破屋.坏垣.余事勿取. ʢA5嫁娶.开市.出火.栽种.破土.动土.入宅.移徙.安香.分居.掘井.作灶.开光.解除.拆卸.修造.动土.安床.纳畜.安葬.启攒.入殓.)ʡz U嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.出行.拆卸.进人口.入宅.移徙.安床.栽种.动土.修造.纳畜.入殓.安葬.立碑.除服.成服.ʡy}Q栽种.破土.置产.祭祀.嫁娶.动土.作灶.祈福.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.ʡx''诸事不宜.诸事不宜.Vʡw!开市.祭祀.祈福.斋醮.塑绘.开光.订盟.纳采.裁衣.冠笄.嫁娶.拆卸.入宅.安香.入殓.移柩.理发.安葬.修坟.谢土.赴任.移徙.沐浴.治病.破土.启攒.整手足甲.入学.作梁.SʡvEs嫁娶.动土.安葬.作灶.祭祀.沐浴.出行.冠笄.进人口.余事勿取.`ʡu)'入宅.作灶.祈福.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.ʡt''诸事不宜.诸事不宜.,ʡs'C诸事不宜.沐浴.扫舍.余事勿取.jʡrE嫁娶.入宅.治病.赴任.祭祀.祈福.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造畜椆栖.入殓.移柩.启攒.安葬.谢土.除服.成服.会亲友.竖柱.上梁.经络.开市.交易.立券.纳财.纳畜.筑堤.^ʡq)#造屋.治病.祭祀.解除.祈福.开光.塑绘.斋醮.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.入殓.除服.成服.移柩.启攒.安床.赴任.出行.移徙.竖柱.上梁.伐木.栽种.破土.安葬.纳畜.:ʡp'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取. ʡoEe开市.交易.破土.作灶.祭祀.塑绘.开光.订盟.纳采.嫁娶.安床.进人口.入殓.除服.成服.移柩.启攒.安葬.立碑.%ʡn)1作灶.治病.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.赴任.进人口.会亲友.ʡmEK作灶.治病.伐木.作梁.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.除服.成服.入殓.移柩.安葬.谢土.赴任.会亲友.进人口.出行.竖柱.上梁.经络.开市.交易.立券.纳财.开仓.FʡlEY嫁娶.入宅.安门.移徙.理发.会亲友.补垣.塞穴.结网.ZʡkE入宅.作灶.安床.开仓.祭祀.会亲友.嫁娶.沐浴.修造.动土.祈福.开光.塑绘.出行.订盟.纳采.裁衣.入殓.除服.成服.移柩.启攒.赴任.竖柱.上梁.纳财.扫舍.栽种.纳畜.伐木. !] ^  x 4 J  ^  zKGe,ʡj'C诸事不宜.祭祀.沐浴.余事勿取.pʡiS开光.掘井.安葬.谢土.修坟.嫁娶.冠笄.安床.纳采.会亲友.塞穴.捕捉.置产.造畜椆栖.LʡhSU移徙.入宅.安门.作梁.安葬.祭祀.祈福.求嗣.斋醮.沐浴.冠笄.出行.理发.拆卸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫舍.除服.成服.移柩.启攒.立碑.谢土.pʡgS安床.安门.破土.修坟.安葬.捕捉.畋猎.会亲友.解除.入殓.除服.成服.移柩.余事勿取.ZʡfSq嫁娶.开市.入宅.出火.移徙.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.会亲友.解除.入学.纳财.交易.立券.经络.起基.动土.定磉.开池.栽种.纳畜.牧养.破土.入殓.立碑.安葬.LʡeEc造屋.造船.动土.破土.嫁娶.纳采.订盟.祭祀.冠笄.裁衣.伐木.作梁.架马.定磉.开柱眼.作灶.移徙.安床.畋猎.结网.开池.作厕.除服.成服.启攒.入殓.移柩.安葬.4ʡd)Q嫁娶.安葬.破屋.坏垣.祭祀.余事勿取.IʡcE]开市.造庙.动土.破土.嫁娶.订盟.纳采.祭祀.祈福.塑绘.开光.移徙.安床.伐木.作梁.捕捉.畋猎.结网.求医.治病.解除.安葬.除服.成服.移柩.入殓.立碑.谢土.aʡb'+余事勿取.祭祀.入殓.移柩.开生坟.破土.启攒.安葬.除服.成服.余事勿取.Hʡa'{余事勿取.入殓.破土.安葬.启攒.除服.成服.余事勿取.8ʡ`'[诸事不宜.造畜椆栖.平治道涂.余事勿取.ʡ_ -嫁娶.作灶.出火.出行.入宅.移徙.安床.祈福.上梁.开市.交易.立券.纳财.会亲友.开光.理发.入殓.移柩.安葬.启攒.ʡ^}5安葬.修坟.作灶.破土.造庙.动土.嫁娶.纳采.祭祀.祈福.求嗣.开光.出行.解除.移徙.伐木.安床.纳畜.出火.拆卸.ʡ]gG动土.伐木.作梁.行丧.安葬.开生坟.祭祀.出行.裁衣.冠笄.会亲友.造畜椆栖.嫁娶.竖柱.上梁.移徙.纳财.纳畜.ʡg[嫁娶.开光.会亲友.掘井.安门.栽种.祭祀.解除.裁衣.理发.安床.作灶.造畜椆栖.放水.筑堤.补垣.塞穴.整手足甲.扫舍. ʡ}'嫁娶.作灶.修坟.安门.入宅.立碑.安葬.安床.祭祀.祈福.求嗣.开光.开市.出行.解除.动土.起基.置产.栽种.,ʡ'C诸事不宜.祭祀.塞穴.余事勿取.gʡ)5斋醮.安门.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.Bʡ)m祈福.安葬.订盟.纳采.会亲友.安机械.纳财.牧养.:ʡ'_余事勿取.祭祀.解除.破屋.坏垣.余事勿取.`ʡ)'开市.赴任.嫁娶.订盟.纳采.出行.祭祀.祈福.动土.移徙.入宅.破土.安葬.Cʡ)o移徙.入宅.入殓.除服.成服.移柩.破土.启攒.安葬.9ʡ']余事勿取.祭祀.结网.造畜椆栖.余事勿取.?ʡ7Y开市.动土.破土.开光.针灸.会亲友.启攒.安葬.8ʡ )Y嫁娶.入宅.沐浴.理发.入学.习艺.进人口.&ʡ )5行丧.安葬.作灶.造畜椆栖.?ʡ )g动土.上梁.嫁娶.祭祀.安机械.入殓.破土.安葬.ʡ Em作灶.入殓.安葬.安床.祭祀.祈福.斋醮.沐浴.竖柱.订盟.纳采.嫁娶.拆卸.入宅.移柩.启攒.谢土.赴任.出火.纳畜.Jʡ Ea栽种.动土.安葬.开市.祭祀.作灶.入殓.除服.成服.畋猎.yʡE=开仓.冠笄.伐木.作梁.祭祀.塑绘.开光.祈福.斋醮.出行.订盟.纳采.裁衣.嫁娶.拆卸.修造.安床.入宅.安香.入殓.启攒.安葬.谢土.赴任.会亲友.进人口.出行.移徙.上梁.经络.开市.交易.立券.纳财. ʡE]出行.祈福.安葬.作灶.会亲友.嫁娶.订盟.纳采.纳婿.拆卸.修造.动土.起基.竖柱.上梁.安床.会亲友.纳财.,ʡ'C诸事不宜.破屋.坏垣.余事勿取.]ʡSw开光.嫁娶.掘井.伐木.作梁.祭祀.祈福.求嗣.斋醮.造庙.出火.安机械.会亲友.开市.交易.立券.纳财.习艺.经络.求医.治病.开池.作厕.畋猎.结网.栽种.牧养.安葬.破土.启攒. !S4%  x * m s :C&?%OL'SnʡS嫁娶.祭祀.入宅.造屋.移徙.捕捉.结网.入殓.除服.成服.移柩.破土.安葬.启攒.立碑.\ʡE嫁娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治道涂.余事勿取.{ʡS3移徙.入宅.出行.祈福.嫁娶.沐浴.理发.冠笄.安床.开市.立券.会亲友.交易.纳财.结网.教牛马.ʡE 嫁娶.动土.破土.修坟.出行.造车器.造畜椆栖.解除.冠笄.裁衣.作梁.雕刻.会亲友.移徙.入宅.安机械.造畜椆栖.开市.扫舍.EʡSG造庙.造船.动土.破土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.置产.求医.治病.开市.交易.立券.会亲友.移徙.竖柱.上梁.造屋.合脊.安门.放水.捕捉.纳畜.3ʠ'Q诸事不宜.祭祀.出行.扫舍.余事勿取.ʠ~o'掘井.祈福.安床.开市.入宅.挂匾.开光.嫁娶.出行.伐木.拆卸.修造.动土.移徙.安葬.破土.修坟.立碑.Hʠ}'{余事勿取.祭祀.立碑.修坟.启攒.除服.成服.余事勿取.mʠ|a 探病.开渠.安葬.伐木.作灶.入宅.祭祀.理发.会亲友.进人口.嫁娶.针灸.入殓.移柩."ʠ{}W嫁娶.立碑.出行.伐木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人口.入宅.安床.出火.拆卸.修造.动土.栽种.0ʠz c嫁娶.祈福.求嗣.出行.出火.拆卸.修造.动土.上梁.开光.进人口.开市.交易.立券.挂匾.安床.入宅.移徙.栽种.伐木.入殓.破土.除服.成服.,ʠy'C诸事不宜.破屋.坏垣.余事勿取.#ʠ25嫁娶.出行.安床.作灶.祭祀.入宅.移徙.出火.进人口.置产.开光.解除.起基.动土.拆卸.上梁.立碑.修坟.安葬.破土.启攒.移柩.0ʠ1 c嫁娶.祭祀.祈福.求嗣.沐浴.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.入宅.移徙.安床.栽种.纳畜.入殓.安葬.启攒.除服.成服.Wʠ0E{嫁娶.移徙.入宅.开市.沐浴.入殓.移柩.除服.成服.破土.平治道涂.ʠ/''诸事不宜.诸事不宜.:ʠ.'_诸事不宜.祭祀.沐浴.赴任.出行.余事勿取._ʠ-oa动土.冠笄.移徙.入宅.开市.竖柱.上梁.祭祀.出行.成服.除服.沐浴.入殓. ʠ,Ee安床.开光.开市.交易.祭祀.裁衣.冠笄.嫁娶.安机械.拆卸.动土.起基.移徙.入宅.入殓.启攒.安葬.造仓.经络.4ʠ+E5入殓.安葬.开市.交易.祭祀.诸事不宜.{ʠ*EA移徙.入宅.作灶.安葬.祭祀.裁衣.冠笄.嫁娶.纳婿.会亲友.除服.成服.移柩.捕捉.进人口.入殓.uʠ))Q定磉.安葬.祭祀.赴任.动土.上梁.开光.塑绘.冠笄.拆卸.起基.安床.开市.立券.赴任.经络.7ʠ(E9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.嫁娶.拆卸.起基.安床.入宅.开市.入殓.除服.成服.移柩.破土.谢土.挂匾.开柱眼.交易.Iʠ'E_移徙.入宅.出行.栽种.祭祀.沐浴.破屋.坏垣.余事勿取.ʠ&EW作灶.祭祀.入宅.嫁娶.祭祀.冠笄.会亲友.拆卸.起基.除服.成服.移柩.启攒.安葬.沐浴.捕捉.开光.塑绘.Aʠ%)i入宅.伐木.祭祀.会亲友.纳采.嫁娶.开光.塑绘.斋醮.安香.开市.立券.除服.成服.入殓.移柩.安葬.赴任.进人口.出行.裁衣.修造.动土.上梁.经络.交易.:ʠ$)]嫁娶.入宅.祭祀.沐浴.修饰垣墙.平治道涂.ʠ#)e嫁娶.安葬.祭祀.沐浴.解除.理发.冠笄.安机械.作灶.造仓.开市.开池.作厕.补垣.塞穴.断蚁.结网.ʠ"Em造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上梁.合脊.安床.移徙.入宅.开市.栽种.作厕.cʠ!S动土.作灶.行丧.安葬.修坟.祭祀.祈福.求嗣.出行.沐浴.交易.扫舍.教牛马.!ʠ ))开光.安床.祭祀.出行.解除.冠笄.嫁娶.伐木.架马.开柱眼.修造.动土.移徙.入宅.开生坟.合寿木.入殓.移柩.破土.安葬.修坟.xʠa嫁娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲友.捕捉.畋猎.启攒.除服.成服.移柩.Jʠo7开光.动土.破土.开市.修造.入宅.安门.祭祀.嫁娶.捕捉. "uw < 2  m q)K m9YG2u7ʠ=A行丧.安葬.合寿木.开光.求嗣.雕刻.嫁娶.订盟.纳采.出火.拆卸.修造.动土.起基.上梁.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.4ʠa嫁娶.造庙.造桥.造船.作灶.安葬.订盟.纳采.祭祀.祈福.安香.出火.修造.动土.上梁.安门.起基.竖柱.上梁.定磉.开池.移徙.入宅.立券.破土.%ʠ5'探病.余事勿取.余事勿取.,ʠ'C诸事不宜.破屋.坏垣.余事勿取.^ʠ'%诸事不宜.祭祀.求医.捕捉.栽种.塞穴.入殓.破土.安葬.移柩.余事勿取.)ʠ)9嫁娶.移徙.祭祀.求嗣.开光.出行.伐木.作梁.出火.解除.拆卸.进人口.修造.动土.起基.安床.栽种.纳畜.入殓.破土.安葬.除服.成服.Nʠ'诸事不宜.祭祀.作灶.沐浴.修饰垣墙.平治道涂.余事勿取.ʠ嫁娶.纳财.祈福.安葬.修造.开市.交易.立券.动土.上梁.塑绘.开光.进人口.纳畜.补垣.塞穴.栽种.牧养.ʠ %嫁娶.会亲友.进人口.出行.入宅.移徙.赴任.作灶.祭祀.解除.沐浴.理发.整手足甲.入殓.移柩.破土.安葬.扫舍.ʟOSm破土.置产.掘井.动土.安床.祭祀.祈福.求嗣.开光.出行.解除.上梁.造屋.移徙.安门.纳财.牧养.纳畜.安葬.启攒.入殓.ʟNa_造屋.开光.理发.造船.掘井.作灶.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.移徙.动土.安床.入殓.破土.安葬.启攒.ʟM}入宅.作梁.安门.伐木.修造.上梁.入殓.造屋.嫁娶.祭祀.祈福.求嗣.出行.动土.安床.掘井.破土.启攒.FʟL)u动土.安葬.订盟.纳采.祭祀.祈福.安机械.作灶.纳畜.gʟK)5开光.针灸.嫁娶.订盟.纳采.祭祀.祈福.求医.治病.动土.移徙.入宅.破土.安葬.`ʟJ)'动土.破土.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.移徙.入宅.启攒.安葬.:ʟI'_诸事不宜.沐浴.治病.破屋.坏垣.余事勿取.5ʟH)S嫁娶.入宅.捕捉.结网.入殓.破土.安葬.CʟG)o开市.安葬.嫁娶.祭祀.祈福.斋醮.动土.移徙.入宅.MʟFCi嫁娶.祈福.余事勿取.沐浴.修饰垣墙.平治道涂.余事勿取.NʟE)开市.安葬.订盟.纳采.出行.会亲友.修造.上梁.移徙.入宅.RʟD) 嫁娶.开市.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.安葬.JʟC7o作灶.动土.破土.嫁娶.出行.纳畜.祭祀.入殓.启攒.安葬.CʟB)o动土.破土.嫁娶.祭祀.祈福.斋醮.作灶.移徙.入宅. ʟA 祈福.出行.订盟.纳采.嫁娶.裁衣.动土.安床.放水.开市.掘井.交易.立券.栽种.开渠.除服.成服.移柩.破土.ʟ@ 3塑绘.开光.解除.订盟.纳采.嫁娶.出火.修造.动土.移徙.入宅.拆卸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养. ʟ? 祈福.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生坟.入殓.除服.成服.移柩.破土.安葬.7ʟ>S+动土.破土.订盟.安床.开池.祈福.斋醮.出行.冠笄.嫁娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除服.成服.移柩.破土.安葬.启攒.4ʟ=)Q行丧.安葬.破屋.坏垣.治病.余事勿取.|ʟ<S5嫁娶.纳采.订盟.开市.入宅.祭祀.捕捉.畋猎.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.启攒.Iʟ;E]开市.立券.纳财.作灶.纳采.订盟.嫁娶.祭祀.祈福.普渡.开光.安香.出火.移徙.入宅.竖柱.修造.动土.竖柱.上梁.起基.造屋.安门.造庙.造桥.破土.启攒.安葬.gʟ:E嫁娶.安门.动土.安葬.出行.沐浴.订盟.纳采.裁衣.竖柱.上梁.移徙.纳畜.牧养. ʟ9SO祈福.开市.动土.行丧.安葬.塑绘.冠笄.嫁娶.会亲友.进人口.经络.裁衣.栽种.纳畜.牧养.补垣.塞穴.捕捉.{ʟ8S3嫁娶.出行.入宅.开市.安门.祭祀.沐浴.理发.整手足甲.冠笄.解除.入殓.移柩.破土.启攒.安葬.uʟ7a开市.动土.破土.安床.开仓.上梁.嫁娶.冠笄.祭祀.沐浴.普渡.出行.纳财.扫舍.纳畜.赴任. #C + . : !L_,z+%-Btʟ6_嫁娶.作灶.安葬.动土.词讼.作梁.伐木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^ʟ5'%余事勿取.祭祀.入殓.破土.除服.成服.移柩.启攒.安葬.谢土.余事勿取.mʟ4}o嫁娶.出行.安葬.入殓.入宅.作灶.冠笄.上梁.祭祀.祈福.求嗣.开光.开市.牧养.理发.iʟ3}g安葬.经络.修坟.破土.开市.安床.启攒.立碑.祭祀.作灶.纳财.栽种.纳畜.进人口."ʟ2 G嫁娶.开光.出行.祈福.求嗣.解除.拆卸.动土.修造.进人口.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.纳畜.入殓.移柩.安葬.ʟ1E{伐木.祭祀.纳畜.祭祀.嫁娶.开光.出行.理发.作梁.出火.拆卸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.栽种.,ʞk'C诸事不宜.破屋.坏垣.余事勿取.ʞj}嫁娶.入宅.移徙.作灶.开市.交易.安门.栽种.祭祀.解除.沐浴.整手足甲.入殓.移柩.破土.启攒.安葬.ʞioW嫁娶.破土.置产.栽种.安葬.修坟.行丧.入宅.移徙.安床.开光.祈福.求嗣.进人口.开市.交易.立券.出火.拆卸.修造.动土.jʞha开仓.出货财.置产.安葬.动土.破土.掘井.栽种.嫁娶.祭祀.裁衣.结网.冠笄.沐浴.Jʞg7o祈福.动土.破土.嫁娶.出行.开市.安床.入殓.启攒.安葬.Cʞf)o开市.入宅.嫁娶.祭祀.祈福.斋醮.治病.破土.安葬.Jʞe)}动土.安葬.嫁娶.纳采.出行.祭祀.祈福.解除.移徙.入宅.^ʞd'%诸事不宜.补垣.塞穴.结网.入殓.除服.成服.移柩.安葬.启攒.余事勿取.Jʞc)}造庙.安葬.嫁娶.开市.立券.祭祀.祈福.动土.移徙.入宅..ʞb)E开市.破土.祭祀.作灶.纳财.捕捉.Rʞa赴任.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.Yʞ`)祭祀.祈福.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.3ʞ_'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.Jʞ^7o嫁娶.移徙.入宅.纳采.祭祀.祈福.解除.动土.破土.安葬.,ʞ]'C诸事不宜.沐浴.扫舍.余事勿取.Pʞ\' 余事勿取.祭祀.冠笄.嫁娶.捕捉.结网.畋猎.取渔.余事勿取.ʞ[ !塑绘.出行.冠笄.嫁娶.进人口.裁衣.纳婿.造畜椆栖.交易.立券.牧养.开生坟.入殓.除服.成服.移柩.安葬.启攒.ʞZS;开市.斋醮.安床.出行.经络.移徙.入宅.治病.会亲友.祭祀.祈福.斋醮.安香.移徙.嫁娶.造屋.起基.ʞYEo动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲友.裁衣.开仓.经络.纳畜.造畜椆栖.教牛马.牧养.WʞXa_移徙.开市.入宅.嫁娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿取.ʞWaO造屋.入宅.作灶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.嫁娶.会亲友.放水.掘井.牧养.纳畜.开渠.安碓磑.bʞVS开市.入宅.安床.动土.安葬.祭祀.进人口.纳财.纳畜.牧养.捕捉.余事勿取.AʞUKG嫁娶.开市.栽种.合寿木.祭祀.祈福.斋醮.出行.纳采.订盟.安机械.出火.拆卸.修造.动土.起基.移徙.入宅.造庙.入殓.除服.成服.移柩.破土.安葬.谢土.ZʞTSq祈福.上梁.开仓.掘井.牧养.纳采.订盟.嫁娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲友.安香.出火.拆卸.造屋.起基.安床.作灶.挂匾.安葬.破土.启攒.立碑.入殓.移柩.;ʞS)_嫁娶.出行.求医.治病.破屋.坏垣.余事勿取.,ʞR'C诸事不宜.破屋.坏垣.余事勿取.ʞQaQ嫁娶.开市.交易.行丧.安葬.修坟.祭祀.祈福.求嗣.开光.出行.伐木.出火.拆卸.修造.动土.起基.安床.入宅.移徙.)ʞP U嫁娶.祭祀.开光.祈福.求嗣.出行.出火.拆卸.动土.修造.进人口.入宅.移徙.安床.挂匾.交易.立券.栽种.纳畜.入殓.破土.启攒.安葬.rʞOa出行.安门.修造.嫁娶.上梁.入宅.祭祀.理发.修饰垣墙.平治道涂.沐浴.整手足甲.扫舍. "n=  [  B K =#FUY6g%V&ʞN)3置产.安床.开光.求嗣.出行.解除.伐木.出火.拆卸.修造.上梁.起基.入宅.移徙.开市.交易.立券.栽种.牧养.入殓.安葬.除服.成服.ʞME{安葬.行丧.伐木.作梁.嫁娶.祭祀.祈福.出火.开光.求嗣.出行.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.动土.,ʞ'C诸事不宜.祭祀.解除.余事勿取.ʞE安葬.出行.祈福.栽种.求嗣.嫁娶.纳采.合帐.裁衣.冠笄.伐木.作梁.修造.动土.起基.竖柱.上梁.安门.作灶.筑堤.造畜椆栖.ʞE{安葬.开市.交易.立券.嫁娶.开光.祭祀.祈福.求嗣.出行.解除.伐木.入宅.移徙.安床.出火.拆卸.修造.上梁.栽种.移柩.,ʞ'C诸事不宜.祭祀.栽种.余事勿取.Jʞ)}嫁娶.开光.开光.求医.治病.动土.上梁.入殓.破土.安葬.Jʞ)}开光.开市.嫁娶.订盟.纳采.祭祀.祈福.入殓.破土.安葬.ʞ''诸事不宜.诸事不宜.Rʝ) 开市.安葬.订盟.纳采.出行.祭祀.祈福.修造.动土.移徙.入宅.`ʝ~5作灶.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.;ʝ})_行丧.安葬.嫁娶.祭祀.沐浴.扫舍.修饰垣墙.Yʝ|)动土.破土.嫁娶.纳采.出行.求医.治病.开市.移徙.入宅.启攒.安葬.Mʝ{7u移徙.入宅.安葬.订盟.纳采.出行.祈福.斋醮.安床.会亲友.<ʝz7S上梁.动土.破土.祭祀.入殓.移柩.启攒.安葬.5ʝy)S嫁娶.安葬.裁衣.作灶.移徙.入宅.纳畜.Yʝx)开市.安门.嫁娶.纳采.祭祀.祈福.求医.治病.出行.动土.移徙.入宅.@ʝw'k诸事不宜.祭祀.捕捉.取渔.修饰垣墙.余事勿取.ʝv #订盟.纳采.会亲友.进人口.雕刻.拆卸.修造.动土.起基.开市.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.ʝuEI开市.安门.掘井.作灶.嫁娶.出行.安机械.祭祀.塑绘.开光.治病.经络.安床.结网.塞穴.破土.入殓.Bʝt)m嫁娶.入宅.破屋.坏垣.求医.治病.畋猎.余事勿取.^ʝsS{开市.交易.嫁娶.安葬.行丧.祭祀.沐浴.捕捉.结网.畋猎.取渔.余事勿取.dʝrE开市.伐木.作梁.作灶.安机械.移徙.入宅.出行.祭祀.祈福.斋醮.纳采.订盟.安香.出火.解除.会亲友.修造.动土.拆卸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.uʝqK/斋醮.出行.治病.合寿木.祭祀.沐浴.理发.嫁娶.作灶.整手足甲.扫舍.修饰垣墙.平治道涂.qʝpY安床.出货财.作灶.动土.破土.开光.求嗣.出行.冠笄.嫁娶.伐木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出火.挂匾.起基.修造.开生坟.合寿木.入殓.除服.成服.移柩.安葬.RʝoEo行丧.伐木.作梁.作灶.嫁娶.订盟.纳采.冠笄.会亲友.安机械.造车器.祭祀.出行.纳财.入宅.安香.出火.入学.塑绘.开光.拆卸.起基.修造.动土.牧养.栽种.安门.作厕.<ʝnS7斋醮.开渠.上梁.动土.破土.祭祀.交易.纳财.&ʝmS 祈福.开光.掘井.开市.安葬.嫁娶.冠笄.修造.动土.作灶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.ʝl7{开光.掘井.开仓.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.动土.入宅.移徙.安床.作灶.塞穴.栽种.破土.安葬.ʝk'纳畜.入宅.移徙.安葬.探病.伐木.上梁.安门.入殓.动土.嫁娶.祭祀.祈福.求嗣.开光.开市.交易.立券.安床.出行.拆卸.,ʝj'C诸事不宜.结网.解除.余事勿取."ʝias入宅.移徙.理发.出火.嫁娶.出行.开市.交易.立券.祭祀.祈福.开光.伐木.进人口.安床.拆卸.修造.动土.栽种.破土.移柩.安葬.%ʝ# M嫁娶.祭祀.祈福.求嗣.开光.出行.拆卸.动土.上梁.出火.进人口.入宅.移徙.安床.栽种.纳畜.牧养.竖柱.安门.修造.解除.会亲友.:ʝ"'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取. &Yr?)^ C r % `]:d{)Q] Y*ʝ!C嫁娶.上梁.修造.拆卸.架马.入宅.伐木.动土.出火.开柱眼.祭祀.开光.出行.解除.塑绘.裁衣.入殓.移柩.破土.启攒.安葬.除服.成服."ʝ  G嫁娶.祭祀.祈福.求嗣.开光.出行.出火.拆卸.动土.上梁.进人口.入宅.移徙.安床.安门.开市.交易.立券.挂匾.栽种.破土.安葬.]ʝ'#诸事不宜.沐浴.平治道涂.扫舍.入殓.移柩.破土.启攒.安葬.余事勿取.Eʝ)s开市.安葬.订盟.纳采.会亲友.安床.作灶.造畜椆栖.`ʝ)'移徙.入宅.嫁娶.订盟.纳采.出行.祭祀.祈福.斋醮.动土.上梁.破土.安葬.,ʝ'C诸事不宜.塞穴.结网.余事勿取.Yʝ)赴任.捕捉.嫁娶.裁衣.祭祀.出行.安床.作灶.移徙.入宅.破土.安葬.Cʝ)o嫁娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<ʝ7S动土.破土.安葬.嫁娶.纳采.出行.移徙.入宅.Jʝ)}嫁娶.安葬.纳采.祭祀.祈福.开市.求医.治病.动土.纳畜.Yʝ)祈福.斋醮.嫁娶.纳采.祭祀.出行.动土.上梁.移徙.入宅.破土.安葬.3ʝ'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.Yʝ)开市.开光.嫁娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Yʝ'安门.嫁娶.纳采.出行.祭祀.祈福.开市.动土.移徙.入宅.破土.安葬.ʝ 7会亲友.进人口.修造.动土.起基.移徙.开市.纳畜.入殓.除服.成服.移柩.破土.安葬.修坟.立碑.会亲友.开光.出行.嫁娶.Dʝ's诸事不宜.进人口.牧养.置产.塞穴.结网.余事勿取.ʝ 1开光.出行.纳采.嫁娶.伐木.架马.出火.拆卸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除服.成服.移柩.安葬.4ʝ)Q破土.安葬.塞穴.断蚁.结网.余事勿取.ʝ''余事勿取.余事勿取.}ʝS7开市.入宅.探病.出火.造屋.嫁娶.祭祀.祈福.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.针灸.理发.会亲友.起基.修造.动土.竖柱.定磉.安床.拆卸.纳畜.牧养.放水.破土.除服.成服.修坟.立碑.Pʝ aQ开市.动土.祭祀.斋醮.安葬.探病.栽种.捕捉.畋猎.余事勿取.cʝ E嫁娶.出火.移徙.入宅.开市.交易.立券.安机械.会亲友.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上梁.安门.作灶.放水.作厕.开池.栽种.牧养.造畜椆栖.破土.安葬.立碑.;ʝ EC斋醮.开市.嫁娶.作灶.沐浴.扫舍.余事勿取.Bʝ )m行丧.安葬.祭祀.沐浴.解除.破屋.坏垣.余事勿取."ʝ E移徙.入宅.造屋.架马.嫁娶.纳采.订盟.斋醮.开光.祭祀.祈福.求医.治病.会亲友.动土.解除.捕捉.纳畜.牧养.入殓.破土.安葬.ʝ}Q动土.破土.纳财.掘井.挂匾.开市.伐木.交易.祭祀.祈福.求嗣.开光.解除.出火.拆卸.入宅.安床.修造.安门.纳畜.启攒.安葬.ʝ 进人口.出行.嫁娶.置产.安床.赴任.安葬.作灶.祭祀.祈福.开光.解除.动土.纳财.交易.纳畜.扫舍.Fʝ'w诸事不宜.祭祀.平治道涂.解除.修饰垣墙.余事勿取.ʝ}I谢土.祈福.上梁.作灶.斋醮.修造.入宅.安门.纳采.嫁娶.开光.出行.理发.会亲友.开市.安床.栽种.牧养.入殓.移柩.启攒.%ʜ>}]嫁娶.纳财.安葬.出行.开市.立券.作灶.栽种.祭祀.祈福.开光.求嗣.解除.伐木.出火.入宅.移徙.安床.拆卸.修造.动土.造畜椆栖.Iʜ='}诸事不宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿取.|ʜ<7Q词讼.开光.开市.嫁娶.出行.合帐.冠笄.安床.除服.成服.作灶.交易.立券.入殓.移柩.破土.安葬.ʜ;aW祈福.入殓.祭祀.作灶.安葬.探病.嫁娶.开光.出行.出火.拆卸.进人口.开市.立券.交易.挂匾.入宅.移徙.安床.栽种.,ʜ:'C诸事不宜.解除.坏垣.余事勿取.ʜ9' 诸事不宜..ʜ877嫁娶.入宅.安葬.沐浴.结网.取渔.:ʜ7'_诸事不宜.祭祀.求医.治病.解除.余事勿取.Jʜ67o开市.动土.破土.嫁娶.纳采.祭祀.祈福.出行.移徙.求医. <W 4 ~ L { d '>~*dT1f%`Jʜ57o嫁娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4ʜ4)Q嫁娶.安葬.祭祀.作灶.掘井.平治道涂.Fʜ37g嫁娶.动土.破土.祭祀.会亲友.开市.安床.启攒.安葬.Qʜ27}嫁娶.开市.安葬.纳采.开光.求医.治病.动土.上梁.移徙.入宅.jʜ1S掘井.动土.破土.安葬.开光.祭祀.进人口.嫁娶.安床.解除.冠笄.出行.裁衣.扫舍.ʜ0Ek掘井.安门.嫁娶.纳采.祭祀.祈福.裁衣.合帐.安床.入殓.除服.成服.移柩.破土.启攒.安葬.谢土.立碑.造畜椆栖.%ʜ/E入殓.安葬.入宅.安床.订盟.纳采.嫁娶.进人口.会亲友.交易.立券.动土.除服.谢土.移柩.破土.启攒.赴任.出行.开市.纳财.栽种.:ʜ.Q5造庙.嫁娶.安床.余事勿取.祭祀.余事勿取.ʜ-EW出火.入宅.安葬.伐木.祭祀.塑绘.开光.订盟.纳采.冠笄.裁衣.安机械.拆卸.修造.动土.安床.经络.开市.ʜ,''诸事不宜.诸事不宜.fʜ+S 嫁娶.开市.交易.入宅.安葬.祭祀.沐浴.破屋.坏垣.求医.治病.解除.余事勿取.ʜ*E 开市.动土.掘井.开池.祭祀.祈福.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.取渔.解除.安葬.启攒.谢土.入殓.@ʜ)KE入宅.动土.开仓.出货财.造车器.祭祀.祈福.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.合脊.起基.定磉.安门.纳畜.安葬.开生坟.立碑.谢土.斋醮.Oʜ(S]嫁娶.安葬.动土.安床.治病.祭祀.作灶.平治道涂.余事勿取.:ʜ'a#祈福.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.嫁娶.会亲友.进人口.安床.开市.交易.纳畜.牧养.入殓.除服.成服.移柩.安葬.启攒.~ʜ&a+开市.嫁娶.移徙.入宅.掘井.安葬.沐浴.斋醮.解除.求医.治病.会亲友.造畜椆栖.栽种.理发.扫舍.aʜ%oe动土.破土.行丧.开光.作梁.安葬.探病.祭祀.解除.教牛马.出行.余事勿取.fʜ$a}开光.嫁娶.掘井.安葬.安门.探病.祭祀.祈福.求嗣.斋醮.冠笄.作灶.纳财.交易.hʜ#E祭祀.开光.嫁娶.入宅.订盟.纳采.裁衣.合帐.冠笄.安机械.拆卸.安床.入殓.除服.成服.移柩.破土.启攒.安葬.修坟.立碑.经络.交易.立券.纳财.筑堤.造仓.补垣.塞穴.纳畜.伐木.架马.^ʜ"E作灶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈福.塑绘.斋醮.沐浴.拆卸.起基.入宅.安香.造庙.移柩.谢土.除服.成服.入学.习艺.出行.竖柱.上梁.掘井.求嗣.解除.伐木.Xʜ!E}作灶.开市.安葬.作梁.裁衣.合帐.冠笄.嫁娶.纳婿.安床.入殓.纳财.4ʛ[E3嫁娶.栽种.伐木.安葬.祭祀.开光.塑绘.纳采.裁衣.拆卸.安床.起基.动土.竖柱.上梁.移徙.入宅.安香.开市.立券.挂匾.沐浴.出行.求嗣.安门.KʛZ/w开光.出货财.祭祀.动土.上梁.订盟.纳采.嫁娶.安机械.拆卸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.赴任.出行.移徙.祈福.求嗣.解除.造仓.进人口.-ʛY'E诸事不宜.破屋.坏垣.求医.治病.0ʛXE+安床.开市.立券.作灶.祭祀.祈福.斋醮.订盟.纳采.裁衣.合帐.拆卸.修造.动土.上梁.起基.移柩.安葬.谢土.沐浴.扫舍.开柱眼.伐木.出火.:ʛW)[栽种.伐木.祭祀.嫁娶.祈福.纳采.裁衣.合帐.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲友.挂匾.交易.立券.纳财.造仓.放水.^ʛVE造屋.作灶.治病.探病.冠笄.入殓.除服.成服.移柩.平治道涂.修饰垣墙.%ʛUE出行.嫁娶.入宅.安葬.开光.塑绘.裁衣.冠笄.伐木.拆卸.竖柱.上梁.开仓.会亲友.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5ʛTE7栽种.作灶.安葬.嫁娶.祭祀.扫舍.塞穴.>ʛSEG作灶.掘井.动土.栽种.祈福.开光.塑绘.酬神.订盟.纳采.裁衣.安床.开市.立券.入殓.除服.成服.移柩.启攒.安葬.立碑.赴任.会亲友.出行.交易.竖柱. : " { W y 9 ,`,nlʛRS_作灶.开光.嫁娶.开市.入宅.订盟.纳采.冠笄.拆卸.修造.动土.安床.入殓.除服.成服.移柩.安葬.破土.启攒.造仓.WʛQ)栽种.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.嫁娶.裁衣.动土.起基.出火.拆卸.移徙.入宅.安香.修造.竖柱.上梁.纳畜.牧养.祈福.求嗣.解除.伐木.定磉.造屋.安门.CʛPSE嫁娶.入宅.移徙.作灶.安葬.祭祀.沐浴.捕捉.栽种.4ʛOE3造庙.嫁娶.伐木.安葬.祭祀.开光.塑绘.订盟.纳采.合帐.冠笄.拆卸.动土.起基.上梁.入宅.安香.开市.立券.纳财.沐浴.求嗣.出火.竖柱.安门.ʛN)作梁.造庙.祭祀.出行.订盟.纳采.裁衣.合帐.冠笄.进人口.动土.安床.作灶.入殓.移柩.安葬.破土.结网.取渔.畋猎.ʛM')诸事不宜.破屋.坏垣.ʛLE 安床.嫁娶.作灶.入宅.祭祀.解除.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.谢土.沐浴.扫舍.捕捉.取渔.结网.畋猎.理发.IʛK赴任.祈福.求嗣.开光.塑绘.斋醮.订盟.纳采.嫁娶.拆卸.安床.入宅.安香.移柩.修坟.安葬.谢土.栽种.解除.冠笄.裁衣.移徙.修造.动土.竖柱.放水.启攒.立碑.XʛJSo动土.作灶.入宅.开光.安床.祭祀.嫁娶.纳婿.除服.成服.入殓.移柩.3ʛIE1作灶.出行.入宅.安葬.塑绘.开光.订盟.纳采.裁衣.合帐.冠笄.安机械.会亲友.纳财.开市.立券.交易.安床.竖柱.上梁.结网.栽种.解除.经络.,ʛH'C诸事不宜.扫舍.塞穴.余事勿取.tʛGa栽种.动土.安葬.掘井.修坟.探病.祭祀.会亲友.立券.交易.裁衣.合帐.嫁娶.冠笄.进人口.3ʛFS#祭祀.嫁娶.出行.上梁.掘井.裁衣.经络.伐木.开柱眼.拆卸.修造.动土.上梁.合脊.合寿木.入殓.除服.成服.移柩.破土.安葬.启攒.修坟.立碑.4ʛES%纳采.动土.开市.交易.安门.开光.祈福.求嗣.出行.解除.伐木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除服.成服.移柩.谢土.纳畜.牧养.TʛDEu纳财.开市.安葬.破土.理发.冠笄.嫁娶.进人口.栽种.捕捉.针灸.ʛCE{祈福.嫁娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出火.拆卸.起基.修造.动土.上梁.移徙.造船.开市.交易.立券.纳财.jʛBS塑绘.开光.造桥.除服.成服.嫁娶.冠笄.祭祀.出行.会亲友.修造.动土.入殓.破土.;ʛAEC嫁娶.移徙.开市.入宅.破屋.坏垣.余事勿取.;ʛ@'a余事勿取.祭祀.解除.治病.破屋.坏垣.扫舍.ʛ?E{开市.立券.理发.作灶.嫁娶.祭祀.祈福.出行.解除.出火.拆卸.动土.入宅.移徙.安床.上梁.栽种.纳畜.破土.启攒.安葬.ʛ>')诸事不宜.解除.沐浴.fʛ=C栽种.出行.祈福.行丧.纳畜.安葬.安门.伐木.作梁.牧养.作灶.解除.平治道涂.ʚt5入宅.移徙.出火.分居.安香.作灶.开市.交易.立券.安葬.动土.伐木.嫁娶.开光.求嗣.会亲友.安床.牧养.塑绘.针灸.ʚs)掘井.词讼.嫁娶.安床.开光.出行.祭祀.动土.出火.解除.会亲友.开市.交易.立券.挂匾.入宅.移徙.拆卸.破土.启攒.安葬.ʚroQ嫁娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.裁衣.竖柱.上梁.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.启攒.uʚq o开光.掘井.针灸.出行.嫁娶.入宅.移徙.作灶.动土.祭祀.祈福.求嗣.入殓.启攒.安葬.移柩.ʚpE 入殓.安葬.作灶.入宅.祭祀.沐浴.祈福.求嗣.斋醮.订盟.纳采.裁衣.冠笄.开市.立券.交易.纳财.沐浴.除服.谢土.出行.移柩.>ʚoEG安葬.作灶.伐木.作梁.祭祀.求嗣.沐浴.酬神.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造仓.开池.经络.纳财.开市.立券.交易.结网.取渔.纳畜.捕捉.XʚnE}嫁娶.上梁.入宅.作灶.取渔.入殓.除服.成服.移柩.破土.安葬.立碑. Uu= m ] A 9)/d{h"?wS;ʚm)]作灶.安床.祈福.求嗣.斋醮.塑绘.开光.订盟.纳采.嫁娶.动土.入宅.安香.移柩.安葬.谢土.出行.沐浴.修造.竖柱.上梁.纳财.破土.解除.安门.放水.ʚl')诸事不宜.求医.破屋.BʚkEO栽种.动土.开市.作灶.祭祀.祈福.酬神.订盟.纳采.冠笄.裁衣.合帐.嫁娶.安床.移徙.入宅.安香.入殓.移柩.启攒.安葬.解除.取渔.捕捉.伐木.安门.出火.]ʚjE造屋.栽种.安葬.作灶.塑绘.开光.酬神.斋醮.订盟.纳采.裁衣.合帐.拆卸.动土.上梁.安床.安香.造庙.挂匾.会亲友.进人口.出行.修造.纳财.伐木.放水.出火.纳畜.沐浴.安门.Aʚi_5祭祀.祈福.安葬.安门.余事勿取.作灶.平治道涂.XʚhE}斋醮.作灶.安床.安葬.安床.合帐.入宅.问名.纳采.求嗣.祭祀.开仓.0ʚgU掘井.祭祀.斋醮.裁衣.合帐.冠笄.订盟.纳采.嫁娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲友.出行.祈福.求嗣.立碑.上梁.放水.[ʚfSu祭祀.祈福.移徙.嫁娶.入宅.裁衣.合帐.入殓.除服.成服.会亲友.纳财.ʚeEQ出行.嫁娶.入宅.动土.祭祀.祈福.求嗣.酬神.裁衣.安床.立券.交易.入殓.除服.成服.移柩.谢土.启攒.EʚdEU安葬.上梁.入宅.作灶.祭祀.沐浴.开光.塑绘.祈福.求嗣.订盟.纳采.冠笄.裁衣.嫁娶.动土.除服.成服.移柩.破土.启攒.出行.安碓磑.放水.开市.立券.交易.&ʚcS 伐木.作灶.安葬.取渔.入宅.塑绘.开光.祈福.求嗣.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.Iʚb'}余事勿取.祭祀.结网.入殓.除服.成服.移柩.安葬.破土.&ʚaE安床.栽种.治病.作灶.祭祀.冠笄.嫁娶.拆卸.修造.动土.起基.上梁.造屋.入宅.开市.开池.塞穴.入殓.除服.成服.移柩.安葬.破土._ʚ`7入宅.开市.安葬.祭祀.沐浴.求医.治病.扫舍.破屋.坏垣.解除.余事勿取.ʚ_S]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.嫁娶.会亲友.进人口.牧养.捕捉.入殓.移柩.安葬.启攒.Eʚ^o+置产.造屋.合脊.开光.探病.安门.作灶.祈福.求嗣.斋醮.纳采.嫁娶.伐木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除服.成服.移柩.安葬.破土.谢土.Aʚ]EO嫁娶.祈福.掘井.安葬.祭祀.平治道涂.余事勿取.\ʚ\E开市.动土.安葬.破土.会亲友.求嗣.理发.冠笄.结网.捕捉.开光.理发.ʚ['修造.上梁.入宅.祈福.探病.掘井.动土.安门.安葬.作灶.开市.交易.立券.纳财.开池.补垣.嫁娶.纳采.纳畜.取渔.安床.ʚZE 嫁娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.伐木.作梁.出火.入宅.移徙.安床.拆卸.动土.上梁.栽种.纳畜.安葬.=ʚY'e余事勿取.解除.扫舍.祭祀.教牛马.余事勿取.ʚEk作灶.掘井.嫁娶.入宅.祭祀.祈福.斋醮.沐浴.安床.安机械.造车器.入殓.移柩.启攒.安葬.立碑.合帐.经络.交易. ʚE]栽种.嫁娶.入殓.安葬.祭祀.出行.沐浴.裁衣.祈福.斋醮.订盟.纳采.嫁娶.安机械.开市.立券.安碓磑.纳畜.|ʚEC开仓.造屋.安葬.安床.祭祀.祈福.斋醮.塑绘.开光.除服.成服.入殓.作灶.嫁娶.捕捉.畋猎.纳财.Qʚ) 破土.伐木.入殓.除服.成服.移柩.启攒.安葬.立碑.余事勿取.uʚ)Q入宅.安床.塑绘.开光.出行.订盟.纳采.除服.成服.嫁娶.纳婿.入殓.移柩.启攒.安葬.立碑.3ʚ'Q诸事不宜.解除.破屋.坏垣.余事勿取.Zʚ E造屋.开市.作灶.入宅.祭祀.会亲友.出行.订盟.纳采.沐浴.修造.动土.祈福.斋醮.嫁娶.拆卸.安床.入殓.移柩.安葬.谢土.赴任.裁衣.竖柱.上梁.伐木.捕捉.栽种.破土.安门.%ʚ E出行.治病.安葬.开市.会亲友.纳采.进人口.修造.动土.竖柱.上梁.祭祀.开光.塑绘.祈福.斋醮.嫁娶.安床.移徙.入宅.安香.纳畜. "xmc) E  m  @   4JHs!yKRxUʚ Ew嫁娶.移徙.入宅.开光.修饰垣墙.平治道涂.入殓.移柩.余事勿取.{ʚ EA作灶.掘井.谢土.入宅.出行.嫁娶.订盟.纳采.入殓.安床.启攒.安葬.祭祀.裁衣.会亲友.进人口.Bʚ EO作灶.祭祀.上梁.出行.沐浴.解除.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.移徙.入宅.除服.成服.移柩.破土.启攒.安葬.扫舍.修坟.伐木.纳财.交易.立券.,ʚ'C诸事不宜.祭祀.解除.余事勿取.AʚEM开仓.嫁娶.移徙.入宅.祭祀.沐浴.祈福.斋醮.订盟.纳采.裁衣.拆卸.起基.竖柱.上梁.安床.入殓.除服.成服.移柩.启攒.挂匾.求嗣.出行.合帐.造畜椆栖.bʚE嫁娶.入殓.安葬.出行.塑绘.开光.沐浴.冠笄.会亲友.作灶.放水.造畜椆栖.;ʚ)_开市.安床.祭祀.作灶.入殓.除服.余事勿取.XʚE}开市.伐木.嫁娶.作梁.入殓.除服.成服.移柩.启攒.安葬.修坟.立碑.LʚSU祈福.嫁娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出火.塑绘.裁衣.会亲友.入学.拆卸.扫舍.造仓.挂匾.掘井.开池.结网.栽种.纳畜.破土.修坟.立碑.安葬.入殓.4ʚ7C嫁娶.开市.安葬.破屋.坏垣.余事勿取.ʚE{造屋.开市.动土.破土.嫁娶.祭祀.沐浴.裁衣.出行.理发.移徙.捕捉.畋猎.放水.入宅.除服.成服.启攒.安葬.移柩.入殓.7ʚ)W嫁娶.安葬.祭祀.安碓磑.结网.余事勿取.sʙa移徙.入宅.造庙.作灶.治病.安葬.祭祀.冠笄.嫁娶.会亲友.进人口.裁衣.结网.平治道涂.Oʙ~Ei入宅.开光.开市.动土.嫁娶.订盟.纳采.祭祀.祈福.求嗣.会亲友.解除.出行.入学.纳财.开市.交易.立券.习艺.经络.安床.开仓.出货财.纳畜.安葬.启攒.修坟.入殓.|ʙ}o探病.祭祀.出行.上梁.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲友.解除.求医.治病.入学.安床.安门.安香.出火.拆卸.扫舍.入宅.挂匾.开生坟.合寿木.破土.修坟.启攒.入殓.Hʙ|7k破土.动土.安葬.祭祀.解除.教牛马.会亲友.余事勿取.ʙ{Sk开光.嫁娶.开市.动土.破土.交易.立券.纳财.安床.裁衣.造畜椆栖.安葬.谢土.启攒.除服.成服.修坟.立碑.移柩.入殓.cʙzau造庙.嫁娶.出行.动土.安葬.行丧.订盟.纳采.会亲友.祭祀.斋醮.沐浴.塑绘.出火.开光.竖柱.上梁.开市.交易.立券.作梁.开柱眼.伐木.架马.安门.安床.拆卸.牧养.造畜椆栖.掘井.{ʙyEA开市.安床.安葬.修坟.嫁娶.纳采.订盟.问名.祭祀.冠笄.裁衣.会亲友.进人口.纳财.捕捉.作灶.mʙx37伐木.纳畜.上梁.入宅.作灶.造畜椆栖.嫁娶.安葬.作梁.造船.安门.沐浴.理发.扫舍.,ʙw'C诸事不宜.解除.坏垣.余事勿取.ʙva_造桥.安门.理发.造庙.栽种.作灶.祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池.3ʙu'Q诸事不宜.治病.破屋.坏垣.余事勿取.RO) 开市.安葬.嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."N)+开市.嫁娶.求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.+M'A诸事不宜.平治道涂.余事勿取.NL)嫁娶.祈福.开市.立券.开光.解除.安机械.上梁.启攒.安葬.JK)}开市.安葬.嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜.=JQ;入宅.动土.破土.余事勿取.教牛马.余事勿取.5I)S入宅.安葬.出行.沐浴.理发.补垣.塞穴.JH)}嫁娶.作灶.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.CEG出行.安葬.修坟.开市.祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水.BEQ掘井.伐木.斋醮.作灶.塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任.PAaQ入宅.修造.动土.破土.安门.上梁.祭祀.入殓.移柩.余事勿取.c@S嫁娶.祈福.出火.移徙.入宅.纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.K?SS斋醮.作梁.掘井.行丧.安葬.纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖.S>aW入宅.动土.破土.嫁娶.作灶.造船.合帐.裁衣.教牛马.余事勿取.;=a%嫁娶.祈福.开光.掘井.安葬.行丧.纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴.)<E移徙.开市.入宅.安葬.祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种.X;E}开市.斋醮.破土.安葬.祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍.:S=嫁娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑.9a5安门.动土.破土.行丧.安葬.成服.冠笄.纳财.掘井.开池.出火.安床.交易.立券.畋猎.结网.理发.放水.W8a_嫁娶.移徙.入宅.探病.出行.造屋.祭祀.沐浴.破屋.坏垣.余事勿取.07S出行.掘井.破土.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.求嗣.斋醮.安香.出火.修造.起基.造屋.合脊.安门.安碓磑.动土.上梁.移徙.入宅. 65嫁娶.开市.出火.栽种.破土.动土.入宅.移徙.安香.分居.掘井.作灶.开光.解除.拆卸.修造.动土.安床.纳畜.安葬.启攒.入殓.)5 U嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.出行.拆卸.进人口.入宅.移徙.安床.栽种.动土.修造.纳畜.入殓.安葬.立碑.除服.成服.4}Q栽种.破土.置产.祭祀.嫁娶.动土.作灶.祈福.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.3''诸事不宜.诸事不宜.V2!开市.祭祀.祈福.斋醮.塑绘.开光.订盟.纳采.裁衣.冠笄.嫁娶.拆卸.入宅.安香.入殓.移柩.理发.安葬.修坟.谢土.赴任.移徙.沐浴.治病.破土.启攒.整手足甲.入学.作梁.S1Es嫁娶.动土.安葬.作灶.祭祀.沐浴.出行.冠笄.进人口.余事勿取.`j)'入宅.作灶.祈福.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.i''诸事不宜.诸事不宜.,h'C诸事不宜.沐浴.扫舍.余事勿取.jgE嫁娶.入宅.治病.赴任.祭祀.祈福.订盟.纳采.裁衣.合帐.冠笄.安机械.安床.造畜椆栖.入殓.移柩.启攒.安葬.谢土.除服.成服.会亲友.竖柱.上梁.经络.开市.交易.立券.纳财.纳畜.筑堤.^f)#造屋.治病.祭祀.解除.祈福.开光.塑绘.斋醮.订盟.纳采.裁衣.冠笄.拆卸.修造.动土.入殓.除服.成服.移柩.启攒.安床.赴任.出行.移徙.竖柱.上梁.伐木.栽种.破土.安葬.纳畜.:e'_诸事不宜.祭祀.解除.破屋.坏垣.余事勿取. dEe开市.交易.破土.作灶.祭祀.塑绘.开光.订盟.纳采.嫁娶.安床.进人口.入殓.除服.成服.移柩.启攒.安葬.立碑.%c)1作灶.治病.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.赴任.进人口.会亲友. Ln* ? M  X %$UJj#}RLbEK作灶.治病.伐木.作梁.祭祀.祈福.订盟.纳采.裁衣.拆卸.修造.动土.起基.安床.移徙.入宅.安香.除服.成服.入殓.移柩.安葬.谢土.赴任.会亲友.进人口.出行.竖柱.上梁.经络.开市.交易.立券.纳财.开仓.FaEY嫁娶.入宅.安门.移徙.理发.会亲友.补垣.塞穴.结网.Z`E入宅.作灶.安床.开仓.祭祀.会亲友.嫁娶.沐浴.修造.动土.祈福.开光.塑绘.出行.订盟.纳采.裁衣.入殓.除服.成服.移柩.启攒.赴任.竖柱.上梁.纳财.扫舍.栽种.纳畜.伐木.,_'C诸事不宜.祭祀.沐浴.余事勿取.p^S开光.掘井.安葬.谢土.修坟.嫁娶.冠笄.安床.纳采.会亲友.塞穴.捕捉.置产.造畜椆栖.L]SU移徙.入宅.安门.作梁.安葬.祭祀.祈福.求嗣.斋醮.沐浴.冠笄.出行.理发.拆卸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫舍.除服.成服.移柩.启攒.立碑.谢土.p\S安床.安门.破土.修坟.安葬.捕捉.畋猎.会亲友.解除.入殓.除服.成服.移柩.余事勿取.Z[Sq嫁娶.开市.入宅.出火.移徙.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.会亲友.解除.入学.纳财.交易.立券.经络.起基.动土.定磉.开池.栽种.纳畜.牧养.破土.入殓.立碑.安葬.LZEc造屋.造船.动土.破土.嫁娶.纳采.订盟.祭祀.冠笄.裁衣.伐木.作梁.架马.定磉.开柱眼.作灶.移徙.安床.畋猎.结网.开池.作厕.除服.成服.启攒.入殓.移柩.安葬.4Y)Q嫁娶.安葬.破屋.坏垣.祭祀.余事勿取.IXE]开市.造庙.动土.破土.嫁娶.订盟.纳采.祭祀.祈福.塑绘.开光.移徙.安床.伐木.作梁.捕捉.畋猎.结网.求医.治病.解除.安葬.除服.成服.移柩.入殓.立碑.谢土.HWSM嫁娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈福.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上梁.安门.安香.出火.教牛马.会亲友.破土.JVE_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出火.修饰垣墙.平治道涂.会亲友.出行.开池.作厕.^US{嫁娶.开市.祈福.斋醮.安葬.塑绘.会亲友.安机械.塞穴.结网.裁衣.经络._Tam开市.纳采.造庙.安床.开渠.安葬.嫁娶.造车器.出行.会亲友.移徙.入宅.修造.动土.雕刻.开光.安香.出火.理发.会亲友.造屋.合脊.起基.归岫.安门.拆卸.扫舍.栽种.造畜椆栖.ISSQ开市.动土.破土.行丧.安葬.祭祀.沐浴.出行.余事勿取.RgG动土.伐木.作梁.行丧.安葬.开生坟.祭祀.出行.裁衣.冠笄.会亲友.造畜椆栖.嫁娶.竖柱.上梁.移徙.纳财.纳畜.Qg[嫁娶.开光.会亲友.掘井.安门.栽种.祭祀.解除.裁衣.理发.安床.作灶.造畜椆栖.放水.筑堤.补垣.塞穴.整手足甲.扫舍. P}'嫁娶.作灶.修坟.安门.入宅.立碑.安葬.安床.祭祀.祈福.求嗣.开光.开市.出行.解除.动土.起基.置产.栽种.,O'C诸事不宜.祭祀.塞穴.余事勿取.gN)5斋醮.安门.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.BM)m祈福.安葬.订盟.纳采.会亲友.安机械.纳财.牧养.:'_余事勿取.祭祀.解除.破屋.坏垣.余事勿取.`)'开市.赴任.嫁娶.订盟.纳采.出行.祭祀.祈福.动土.移徙.入宅.破土.安葬.C)o移徙.入宅.入殓.除服.成服.移柩.破土.启攒.安葬.9']余事勿取.祭祀.结网.造畜椆栖.余事勿取.?7Y开市.动土.破土.开光.针灸.会亲友.启攒.安葬.8)Y嫁娶.入宅.沐浴.理发.入学.习艺.进人口.&)5行丧.安葬.作灶.造畜椆栖.?)g动土.上梁.嫁娶.祭祀.安机械.入殓.破土.安葬.Em作灶.入殓.安葬.安床.祭祀.祈福.斋醮.沐浴.竖柱.订盟.纳采.嫁娶.拆卸.入宅.移柩.启攒.谢土.赴任.出火.纳畜.J~Ea栽种.动土.安葬.开市.祭祀.作灶.入殓.除服.成服.畋猎. cn c i 0 9 { 54[Yx"bcy}E=开仓.冠笄.伐木.作梁.祭祀.塑绘.开光.祈福.斋醮.出行.订盟.纳采.裁衣.嫁娶.拆卸.修造.安床.入宅.安香.入殓.启攒.安葬.谢土.赴任.会亲友.进人口.出行.移徙.上梁.经络.开市.交易.立券.纳财. |E]出行.祈福.安葬.作灶.会亲友.嫁娶.订盟.纳采.纳婿.拆卸.修造.动土.起基.竖柱.上梁.安床.会亲友.纳财.,{'C诸事不宜.破屋.坏垣.余事勿取.]zSw开光.嫁娶.掘井.伐木.作梁.祭祀.祈福.求嗣.斋醮.造庙.出火.安机械.会亲友.开市.交易.立券.纳财.习艺.经络.求医.治病.开池.作厕.畋猎.结网.栽种.牧养.安葬.破土.启攒.nyS嫁娶.祭祀.入宅.造屋.移徙.捕捉.结网.入殓.除服.成服.移柩.破土.安葬.启攒.立碑.\xE嫁娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治道涂.余事勿取.{wS3移徙.入宅.出行.祈福.嫁娶.沐浴.理发.冠笄.安床.开市.立券.会亲友.交易.纳财.结网.教牛马.vE 嫁娶.动土.破土.修坟.出行.造车器.造畜椆栖.解除.冠笄.裁衣.作梁.雕刻.会亲友.移徙.入宅.安机械.造畜椆栖.开市.扫舍.EuSG造庙.造船.动土.破土.安葬.纳采.订盟.嫁娶.祭祀.祈福.求嗣.置产.求医.治病.开市.交易.立券.会亲友.移徙.竖柱.上梁.造屋.合脊.安门.放水.捕捉.纳畜. tgA开光.嫁娶.会亲友.栽种.针灸.安葬.冠笄.祭祀.沐浴.作灶.理发.整手足甲.扫舍.补垣.塞穴.入殓.破土.启攒.sg'开市.开仓.出货财.安床.安门.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.求医.治病.出火.移徙.入宅.PrEm动土.破土.开市.安葬.祭祀.作灶.纳财.捕捉.畋猎.余事勿取. qYO上梁.开光.造屋.架马.合寿木.造车器.嫁娶.订盟.纳采.会亲友.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.jpS嫁娶.开市.入宅.祈福.安葬.订盟.纳采.会亲友.交易.立券.纳财.栽种.纳畜.牧养.0o c嫁娶.祈福.求嗣.出行.出火.拆卸.修造.动土.上梁.开光.进人口.开市.交易.立券.挂匾.安床.入宅.移徙.栽种.伐木.入殓.破土.除服.成服.,n'C诸事不宜.破屋.坏垣.余事勿取.#m5嫁娶.出行.安床.作灶.祭祀.入宅.移徙.出火.进人口.置产.开光.解除.起基.动土.拆卸.上梁.立碑.修坟.安葬.破土.启攒.移柩.0l c嫁娶.祭祀.祈福.求嗣.沐浴.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.入宅.移徙.安床.栽种.纳畜.入殓.安葬.启攒.除服.成服.WkE{嫁娶.移徙.入宅.开市.沐浴.入殓.移柩.除服.成服.破土.平治道涂.j''诸事不宜.诸事不宜.:i'_诸事不宜.祭祀.沐浴.赴任.出行.余事勿取._"oa动土.冠笄.移徙.入宅.开市.竖柱.上梁.祭祀.出行.成服.除服.沐浴.入殓. !Ee安床.开光.开市.交易.祭祀.裁衣.冠笄.嫁娶.安机械.拆卸.动土.起基.移徙.入宅.入殓.启攒.安葬.造仓.经络.4 E5入殓.安葬.开市.交易.祭祀.诸事不宜.{EA移徙.入宅.作灶.安葬.祭祀.裁衣.冠笄.嫁娶.纳婿.会亲友.除服.成服.移柩.捕捉.进人口.入殓.u)Q定磉.安葬.祭祀.赴任.动土.上梁.开光.塑绘.冠笄.拆卸.起基.安床.开市.立券.赴任.经络.7E9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.嫁娶.拆卸.起基.安床.入宅.开市.入殓.除服.成服.移柩.破土.谢土.挂匾.开柱眼.交易.IE_移徙.入宅.出行.栽种.祭祀.沐浴.破屋.坏垣.余事勿取.EW作灶.祭祀.入宅.嫁娶.祭祀.冠笄.会亲友.拆卸.起基.除服.成服.移柩.启攒.安葬.沐浴.捕捉.开光.塑绘.A)i入宅.伐木.祭祀.会亲友.纳采.嫁娶.开光.塑绘.斋醮.安香.开市.立券.除服.成服.入殓.移柩.安葬.赴任.进人口.出行.裁衣.修造.动土.上梁.经络.交易.:)]嫁娶.入宅.祭祀.沐浴.修饰垣墙.平治道涂. " w I  [  n 4 $ P~;:}.  )e嫁娶.安葬.祭祀.沐浴.解除.理发.冠笄.安机械.作灶.造仓.开市.开池.作厕.补垣.塞穴.断蚁.结网.Em造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上梁.合脊.安床.移徙.入宅.开市.栽种.作厕.cS动土.作灶.行丧.安葬.修坟.祭祀.祈福.求嗣.出行.沐浴.交易.扫舍.教牛马.!))开光.安床.祭祀.出行.解除.冠笄.嫁娶.伐木.架马.开柱眼.修造.动土.移徙.入宅.开生坟.合寿木.入殓.移柩.破土.安葬.修坟.xa嫁娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲友.捕捉.畋猎.启攒.除服.成服.移柩.Jo7开光.动土.破土.开市.修造.入宅.安门.祭祀.嫁娶.捕捉.7=A行丧.安葬.合寿木.开光.求嗣.雕刻.嫁娶.订盟.纳采.出火.拆卸.修造.动土.起基.上梁.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.4a嫁娶.造庙.造桥.造船.作灶.安葬.订盟.纳采.祭祀.祈福.安香.出火.修造.动土.上梁.安门.起基.竖柱.上梁.定磉.开池.移徙.入宅.立券.破土.%5'探病.余事勿取.余事勿取.mo}祭祀.嫁娶.安床.开市.入宅.探病.上梁.沐浴.捕捉.入殓.除服.成服.破土.启攒.安葬.%S纳采.订盟.架马.词讼.开渠.嫁娶.造车器.安机械.祭祀.祈福.开光.安香.出火.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c aw斋醮.嫁娶.移徙.出行.上梁.入宅.祭祀.沐浴.修饰垣墙.平治道涂.余事勿取.\ E嫁娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出火.上梁.移徙.u a针灸.伐木.作梁.造庙.行丧.安葬.嫁娶.订盟.纳采.祭祀.祈福.出行.修造.动土.移徙.入宅.  %嫁娶.会亲友.进人口.出行.入宅.移徙.赴任.作灶.祭祀.解除.沐浴.理发.整手足甲.入殓.移柩.破土.安葬.扫舍. Sm破土.置产.掘井.动土.安床.祭祀.祈福.求嗣.开光.出行.解除.上梁.造屋.移徙.安门.纳财.牧养.纳畜.安葬.启攒.入殓.a_造屋.开光.理发.造船.掘井.作灶.嫁娶.祭祀.祈福.求嗣.出行.出火.拆卸.修造.移徙.动土.安床.入殓.破土.安葬.启攒.}入宅.作梁.安门.伐木.修造.上梁.入殓.造屋.嫁娶.祭祀.祈福.求嗣.出行.动土.安床.掘井.破土.启攒.F)u动土.安葬.订盟.纳采.祭祀.祈福.安机械.作灶.纳畜.g)5开光.针灸.嫁娶.订盟.纳采.祭祀.祈福.求医.治病.动土.移徙.入宅.破土.安葬.`?)'动土.破土.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.移徙.入宅.启攒.安葬.:>'_诸事不宜.沐浴.治病.破屋.坏垣.余事勿取.5=)S嫁娶.入宅.捕捉.结网.入殓.破土.安葬.C<)o开市.安葬.嫁娶.祭祀.祈福.斋醮.动土.移徙.入宅.M;Ci嫁娶.祈福.余事勿取.沐浴.修饰垣墙.平治道涂.余事勿取.N:)开市.安葬.订盟.纳采.出行.会亲友.修造.上梁.移徙.入宅.R9) 嫁娶.开市.订盟.纳采.祭祀.祈福.修造.动土.上梁.破土.安葬.J87o作灶.动土.破土.嫁娶.出行.纳畜.祭祀.入殓.启攒.安葬.C7)o动土.破土.嫁娶.祭祀.祈福.斋醮.作灶.移徙.入宅. 6 祈福.出行.订盟.纳采.嫁娶.裁衣.动土.安床.放水.开市.掘井.交易.立券.栽种.开渠.除服.成服.移柩.破土.5 3塑绘.开光.解除.订盟.纳采.嫁娶.出火.修造.动土.移徙.入宅.拆卸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养. 4 祈福.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生坟.入殓.除服.成服.移柩.破土.安葬.73S+动土.破土.订盟.安床.开池.祈福.斋醮.出行.冠笄.嫁娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除服.成服.移柩.破土.安葬.启攒.42)Q行丧.安葬.破屋.坏垣.治病.余事勿取. "| p ! 4  O iYyJG8||1S5嫁娶.纳采.订盟.开市.入宅.祭祀.捕捉.畋猎.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬.启攒.I0E]开市.立券.纳财.作灶.纳采.订盟.嫁娶.祭祀.祈福.普渡.开光.安香.出火.移徙.入宅.竖柱.修造.动土.竖柱.上梁.起基.造屋.安门.造庙.造桥.破土.启攒.安葬.g/E嫁娶.安门.动土.安葬.出行.沐浴.订盟.纳采.裁衣.竖柱.上梁.移徙.纳畜.牧养. .SO祈福.开市.动土.行丧.安葬.塑绘.冠笄.嫁娶.会亲友.进人口.经络.裁衣.栽种.纳畜.牧养.补垣.塞穴.捕捉.{-S3嫁娶.出行.入宅.开市.安门.祭祀.沐浴.理发.整手足甲.冠笄.解除.入殓.移柩.破土.启攒.安葬.u,a开市.动土.破土.安床.开仓.上梁.嫁娶.冠笄.祭祀.沐浴.普渡.出行.纳财.扫舍.纳畜.赴任.+a5动土.破土.掘井.开光.上梁.词讼.嫁娶.普渡.祭祀.祈福.补垣.塞穴.断蚁.筑堤.入殓.除服.成服.安葬.O*S[出火.入宅.造屋.安门.安葬.嫁娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲友.开市.纳财.修造.动土.竖柱.上梁.开光.开仓.出货财.纳畜.牧养.开池.破土.启攒.)S]掘井.出行.破土.行丧.安葬.嫁娶.订盟.纳采.作灶.冠笄.裁衣.会亲友.纳畜.牧养.安机械.开市.立券.纳财.安床.>(a+纳采.订盟.经络.行丧.安葬.探病.嫁娶.祭祀.祈福.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.捕捉.畋猎.结网.'SC动土.破土.嫁娶.掘井.安床.订盟.纳采.祭祀.祈福.安香.出火.开市.立券.入宅.挂匾.造桥.启攒.安葬.&E{伐木.祭祀.纳畜.祭祀.嫁娶.开光.出行.理发.作梁.出火.拆卸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.栽种.,%'C诸事不宜.破屋.坏垣.余事勿取.$}嫁娶.入宅.移徙.作灶.开市.交易.安门.栽种.祭祀.解除.沐浴.整手足甲.入殓.移柩.破土.启攒.安葬.#oW嫁娶.破土.置产.栽种.安葬.修坟.行丧.入宅.移徙.安床.开光.祈福.求嗣.进人口.开市.交易.立券.出火.拆卸.修造.动土.j"a开仓.出货财.置产.安葬.动土.破土.掘井.栽种.嫁娶.祭祀.裁衣.结网.冠笄.沐浴.J!7o祈福.动土.破土.嫁娶.出行.开市.安床.入殓.启攒.安葬.C[)o开市.入宅.嫁娶.祭祀.祈福.斋醮.治病.破土.安葬.JZ)}动土.安葬.嫁娶.纳采.出行.祭祀.祈福.解除.移徙.入宅.^Y'%诸事不宜.补垣.塞穴.结网.入殓.除服.成服.移柩.安葬.启攒.余事勿取.JX)}造庙.安葬.嫁娶.开市.立券.祭祀.祈福.动土.移徙.入宅..W)E开市.破土.祭祀.作灶.纳财.捕捉.RV赴任.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.YU)祭祀.祈福.嫁娶.纳采.开市.出行.动土.上梁.移徙.入宅.破土.安葬.3T'Q诸事不宜.祭祀.破屋.坏垣.余事勿取.JS7o嫁娶.移徙.入宅.纳采.祭祀.祈福.解除.动土.破土.安葬.,R'C诸事不宜.沐浴.扫舍.余事勿取.PQ' 余事勿取.祭祀.冠笄.嫁娶.捕捉.结网.畋猎.取渔.余事勿取.P !塑绘.出行.冠笄.嫁娶.进人口.裁衣.纳婿.造畜椆栖.交易.立券.牧养.开生坟.入殓.除服.成服.移柩.安葬.启攒.OS;开市.斋醮.安床.出行.经络.移徙.入宅.治病.会亲友.祭祀.祈福.斋醮.安香.移徙.嫁娶.造屋.起基.NEo动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲友.裁衣.开仓.经络.纳畜.造畜椆栖.教牛马.牧养.WMa_移徙.开市.入宅.嫁娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿取.LaO造屋.入宅.作灶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.嫁娶.会亲友.放水.掘井.牧养.纳畜.开渠.安碓磑.bKS开市.入宅.安床.动土.安葬.祭祀.进人口.纳财.纳畜.牧养.捕捉.余事勿取. !(1 j # f , ;?~M <u5UAJKG嫁娶.开市.栽种.合寿木.祭祀.祈福.斋醮.出行.纳采.订盟.安机械.出火.拆卸.修造.动土.起基.移徙.入宅.造庙.入殓.除服.成服.移柩.破土.安葬.谢土.ZISq祈福.上梁.开仓.掘井.牧养.纳采.订盟.嫁娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲友.安香.出火.拆卸.造屋.起基.安床.作灶.挂匾.安葬.破土.启攒.立碑.入殓.移柩.;H)_嫁娶.出行.求医.治病.破屋.坏垣.余事勿取.mGo}出火.嫁娶.入宅.作灶.破土.上梁.动土.沐浴.理发.捕捉.入殓.移柩.破土.启攒.安葬.6FS)嫁娶.安葬.行丧.破土.修坟.订盟.纳采.祭祀.祈福.开光.安香.出火.立券.安机械.移徙.入宅.竖柱.上梁.会亲友.安床.拆卸.挂匾.牧养.教牛马.OEaO开市.动土.破土.嫁娶.修造.安葬.祭祀.修饰垣墙.平治道涂.LDaG斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈福.求嗣.开光.解除.扫舍.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.栽种.纳畜.牧养.nCS嫁娶.出行.纳采.入宅.作灶.祭祀.沐浴.塑绘.开光.入学.解除.扫舍.治病.开池.牧养.BE{安葬.行丧.伐木.作梁.嫁娶.祭祀.祈福.出火.开光.求嗣.出行.拆卸.开市.交易.立券.挂匾.入宅.移徙.安床.栽种.动土.,A'C诸事不宜.祭祀.解除.余事勿取.@E安葬.出行.祈福.栽种.求嗣.嫁娶.纳采.合帐.裁衣.冠笄.伐木.作梁.修造.动土.起基.竖柱.上梁.安门.作灶.筑堤.造畜椆栖.?E{安葬.开市.交易.立券.嫁娶.开光.祭祀.祈福.求嗣.出行.解除.伐木.入宅.移徙.安床.出火.拆卸.修造.上梁.栽种.移柩.,>'C诸事不宜.祭祀.栽种.余事勿取.J=)}嫁娶.开光.开光.求医.治病.动土.上梁.入殓.破土.安葬.Jv)}开光.开市.嫁娶.订盟.纳采.祭祀.祈福.入殓.破土.安葬.u''诸事不宜.诸事不宜.Rt) 开市.安葬.订盟.纳采.出行.祭祀.祈福.修造.动土.移徙.入宅.`s5作灶.嫁娶.订盟.纳采.出行.开市.祭祀.祈福.动土.移徙.入宅.破土.安葬.;r)_行丧.安葬.嫁娶.祭祀.沐浴.扫舍.修饰垣墙.Yq)动土.破土.嫁娶.纳采.出行.求医.治病.开市.移徙.入宅.启攒.安葬.Mp7u移徙.入宅.安葬.订盟.纳采.出行.祈福.斋醮.安床.会亲友.y)e嫁娶.安葬.祭祀.解除.断蚁.会亲友.余事勿取.Ix'}诸事不宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿取.|w7Q词讼.开光.开市.嫁娶.出行.合帐.冠笄.安床.除服.成服.作灶.交易.立券.入殓.移柩.破土.安葬.vaW祈福.入殓.祭祀.作灶.安葬.探病.嫁娶.开光.出行.出火.拆卸.进人口.开市.立券.交易.挂匾.入宅.移徙.安床.栽种.,u'C诸事不宜.解除.坏垣.余事勿取..' 诸事不宜..-77嫁娶.入宅.安葬.沐浴.结网.取渔.:,'_诸事不宜.祭祀.求医.治病.解除.余事勿取.J+7o开市.动土.破土.嫁娶.纳采.祭祀.祈福.出行.移徙.求医.J*7o嫁娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4))Q嫁娶.安葬.祭祀.作灶.掘井.平治道涂.F(7g嫁娶.动土.破土.祭祀.会亲友.开市.安床.启攒.安葬.Q'7}嫁娶.开市.安葬.纳采.开光.求医.治病.动土.上梁.移徙.入宅.j&S掘井.动土.破土.安葬.开光.祭祀.进人口.嫁娶.安床.解除.冠笄.出行.裁衣.扫舍.%Ek掘井.安门.嫁娶.纳采.祭祀.祈福.裁衣.合帐.安床.入殓.除服.成服.移柩.破土.启攒.安葬.谢土.立碑.造畜椆栖.%$E入殓.安葬.入宅.安床.订盟.纳采.嫁娶.进人口.会亲友.交易.立券.动土.除服.谢土.移柩.破土.启攒.赴任.出行.开市.纳财.栽种.:#Q5造庙.嫁娶.安床.余事勿取.祭祀.余事勿取."EW出火.入宅.安葬.伐木.祭祀.塑绘.开光.订盟.纳采.冠笄.裁衣.安机械.拆卸.修造.动土.安床.经络.开市.!''诸事不宜.诸事不宜.f S 嫁娶.开市.交易.入宅.安葬.祭祀.沐浴.破屋.坏垣.求医.治病.解除.余事勿取.E 开市.动土.掘井.开池.祭祀.祈福.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.取渔.解除.安葬.启攒.谢土.入殓.@KE入宅.动土.开仓.出货财.造车器.祭祀.祈福.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.合脊.起基.定磉.安门.纳畜.安葬.开生坟.立碑.谢土.斋醮.OS]嫁娶.安葬.动土.安床.治病.祭祀.作灶.平治道涂.余事勿取.:a#祈福.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.嫁娶.会亲友.进人口.安床.开市.交易.纳畜.牧养.入殓.除服.成服.移柩.安葬.启攒.~a+开市.嫁娶.移徙.入宅.掘井.安葬.沐浴.斋醮.解除.求医.治病.会亲友.造畜椆栖.栽种.理发.扫舍.aoe动土.破土.行丧.开光.作梁.安葬.探病.祭祀.解除.教牛马.出行.余事勿取.fa}开光.嫁娶.掘井.安葬.安门.探病.祭祀.祈福.求嗣.斋醮.冠笄.作灶.纳财.交易.nS祈福.动土.破土.安葬.入殓.纳采.嫁娶.出行.开市.立券.纳畜.牧养.出火.移徙.入宅.4)Q嫁娶.安葬.祭祀.捕捉.解除.余事勿取./77出火.嫁娶.开市.祭祀.祈福.求嗣.斋醮.纳采.订盟.开光.竖柱.上梁.开仓.出货财.造屋.起基.定磉.安门.诸事不宜.破土.入殓.启攒.谢土.JSS祭祀.嫁娶.入宅.作灶.安葬.沐浴.捕捉.畋猎.结网.取渔._E 祈福.斋醮.开市.安葬.祭祀.沐浴.解除.求医.治病.破屋.坏垣.余事勿取.-'E诸事不宜.破屋.坏垣.求医.治病.0E+安床.开市.立券.作灶.祭祀.祈福.斋醮.订盟.纳采.裁衣.合帐.拆卸.修造.动土.上梁.起基.移柩.安葬.谢土.沐浴.扫舍.开柱眼.伐木.出火.:)[栽种.伐木.祭祀.嫁娶.祈福.纳采.裁衣.合帐.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲友.挂匾.交易.立券.纳财.造仓.放水.^KE造屋.作灶.治病.探病.冠笄.入殓.除服.成服.移柩.平治道涂.修饰垣墙. } :] } q b !] G2023042304劳动节4月29日至5月3日放假调休,共5天。4月23日(星期日)、5月6日(星期六)上班。[{"date":"2023-4-23","status":2},{"date":"2023-4-29","status":1},{"date":"2023-4-30","status":1},{"date":"2023-5-1","status":1},{"date":"2023-5-2","status":1},{"date":"2023-5-3","status":1},{"date":"2023-5-6","status":2}]V!C M2023040504清明节4月5日放假,共1天。[{"date":"2023-4-5","status":1}]5 !  M2023010101元旦2022年12月31日至2023年1月2日放假调休,共3天。[{"date":"2022-12-31","status":1},{"date":"2023-1-1","status":1},{"date":"2023-1-2","status":1}]) !a 2023100110 国庆节9月29日至10月6日放假调休,共8天。10月7日(星期六)、10月8日(星期日)上班。[{"date":"2023-10-1","status":1},{"date":"2023-10-2","status":1},{"date":"2023-10-3","status":1},{"date":"2023-10-4","status":1},{"date":"2023-10-5","status":1},{"date":"2023-10-6","status":1},{"date":"2023-10-7","status":2},{"date":"2023-10-8","status":2}]H !a 2023092909 中秋节9月29日至10月6日放假调休,共8天。10月7日(星期六)、10月8日(星期日)上班。[{"date":"2023-9-29","status":1},{"date":"2023-9-30","status":1}]i !# 2023062206端午节6月22日至24日放假调休,共3天。6月25日(星期日)上班。[{"date":"2023-6-22","status":1},{"date":"2023-6-23","status":1},{"date":"2023-6-24","status":1},{"date":"2023-6-25","status":2}]  ! Y O2023012101春节1月21日至27日放假调休,共7天。1月28日(星期六)、1月29日(星期日)上班。[{"date":"2023-1-21","status":1},{"date":"2023-1-22","status":1},{"date":"2023-1-23","status":1},{"date":"2023-1-24","status":1},{"date":"2023-1-25","status":1},{"date":"2023-1-26","status":1},{"date":"2023-1-27","status":1},{"date":"2023-1-28","status":2},{"date":"2023-1-29","status":2}] !2023100110!2023092909!2023062206!2023042304!2023040504!2023012101 ! 2023010101dde-calendar-5.14.13/calendar-service/assets/dde-calendar-service.desktop000066400000000000000000000005131473346337000262460ustar00rootroot00000000000000[Desktop Entry] Exec=/bin/bash -c "dbus-send --session --print-reply --dest=com.deepin.dataserver.Calendar /com/deepin/dataserver/Calendar/AccountManager com.deepin.dataserver.Calendar.AccountManager.updateRemindJob boolean:true" Name=dde-calendar-service NoDisplay=true Terminal=false Type=Application X-Deepin-Vendor=user-custom dde-calendar-5.14.13/calendar-service/assets/holiday-cn/000077500000000000000000000000001473346337000227425ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-service/assets/holiday-cn/2023.json000066400000000000000000000104471473346337000242310ustar00rootroot00000000000000{ "$schema": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/schema.json", "$id": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/2023.json", "year": 2023, "papers": [ "http://www.gov.cn/zhengce/zhengceku/2022-12/08/content_5730844.htm" ], "days": [ { "name": "元旦", "date": "2022-12-31", "isOffDay": true }, { "name": "元旦", "date": "2023-01-01", "isOffDay": true }, { "name": "元旦", "date": "2023-01-02", "isOffDay": true }, { "name": "春节", "date": "2023-01-21", "isOffDay": true }, { "name": "春节", "date": "2023-01-22", "isOffDay": true }, { "name": "春节", "date": "2023-01-23", "isOffDay": true }, { "name": "春节", "date": "2023-01-24", "isOffDay": true }, { "name": "春节", "date": "2023-01-25", "isOffDay": true }, { "name": "春节", "date": "2023-01-26", "isOffDay": true }, { "name": "春节", "date": "2023-01-27", "isOffDay": true }, { "name": "春节", "date": "2023-01-28", "isOffDay": false }, { "name": "春节", "date": "2023-01-29", "isOffDay": false }, { "name": "清明节", "date": "2023-04-05", "isOffDay": true }, { "name": "劳动节", "date": "2023-04-23", "isOffDay": false }, { "name": "劳动节", "date": "2023-04-29", "isOffDay": true }, { "name": "劳动节", "date": "2023-04-30", "isOffDay": true }, { "name": "劳动节", "date": "2023-05-01", "isOffDay": true }, { "name": "劳动节", "date": "2023-05-02", "isOffDay": true }, { "name": "劳动节", "date": "2023-05-03", "isOffDay": true }, { "name": "劳动节", "date": "2023-05-06", "isOffDay": false }, { "name": "端午节", "date": "2023-06-22", "isOffDay": true }, { "name": "端午节", "date": "2023-06-23", "isOffDay": true }, { "name": "端午节", "date": "2023-06-24", "isOffDay": true }, { "name": "端午节", "date": "2023-06-25", "isOffDay": false }, { "name": "中秋节、国庆节", "date": "2023-09-29", "isOffDay": true }, { "name": "中秋节、国庆节", "date": "2023-09-30", "isOffDay": true }, { "name": "中秋节、国庆节", "date": "2023-10-01", "isOffDay": true }, { "name": "中秋节、国庆节", "date": "2023-10-02", "isOffDay": true }, { "name": "中秋节、国庆节", "date": "2023-10-03", "isOffDay": true }, { "name": "中秋节、国庆节", "date": "2023-10-04", "isOffDay": true }, { "name": "中秋节、国庆节", "date": "2023-10-05", "isOffDay": true }, { "name": "中秋节、国庆节", "date": "2023-10-06", "isOffDay": true }, { "name": "中秋节、国庆节", "date": "2023-10-07", "isOffDay": false }, { "name": "中秋节、国庆节", "date": "2023-10-08", "isOffDay": false } ] }dde-calendar-5.14.13/calendar-service/assets/holiday-cn/2024.json000066400000000000000000000100421473346337000242210ustar00rootroot00000000000000{ "$schema": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/schema.json", "$id": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/2024.json", "year": 2024, "papers": [ "https://www.gov.cn/zhengce/zhengceku/202310/content_6911528.htm" ], "days": [ { "name": "元旦", "date": "2024-01-01", "isOffDay": true }, { "name": "春节", "date": "2024-02-04", "isOffDay": false }, { "name": "春节", "date": "2024-02-10", "isOffDay": true }, { "name": "春节", "date": "2024-02-11", "isOffDay": true }, { "name": "春节", "date": "2024-02-12", "isOffDay": true }, { "name": "春节", "date": "2024-02-13", "isOffDay": true }, { "name": "春节", "date": "2024-02-14", "isOffDay": true }, { "name": "春节", "date": "2024-02-15", "isOffDay": true }, { "name": "春节", "date": "2024-02-16", "isOffDay": true }, { "name": "春节", "date": "2024-02-17", "isOffDay": true }, { "name": "春节", "date": "2024-02-18", "isOffDay": false }, { "name": "清明节", "date": "2024-04-04", "isOffDay": true }, { "name": "清明节", "date": "2024-04-05", "isOffDay": true }, { "name": "清明节", "date": "2024-04-06", "isOffDay": true }, { "name": "清明节", "date": "2024-04-07", "isOffDay": false }, { "name": "劳动节", "date": "2024-04-28", "isOffDay": false }, { "name": "劳动节", "date": "2024-05-01", "isOffDay": true }, { "name": "劳动节", "date": "2024-05-02", "isOffDay": true }, { "name": "劳动节", "date": "2024-05-03", "isOffDay": true }, { "name": "劳动节", "date": "2024-05-04", "isOffDay": true }, { "name": "劳动节", "date": "2024-05-05", "isOffDay": true }, { "name": "劳动节", "date": "2024-05-11", "isOffDay": false }, { "name": "端午节", "date": "2024-06-10", "isOffDay": true }, { "name": "中秋节", "date": "2024-09-14", "isOffDay": false }, { "name": "中秋节", "date": "2024-09-15", "isOffDay": true }, { "name": "中秋节", "date": "2024-09-16", "isOffDay": true }, { "name": "中秋节", "date": "2024-09-17", "isOffDay": true }, { "name": "国庆节", "date": "2024-09-29", "isOffDay": false }, { "name": "国庆节", "date": "2024-10-01", "isOffDay": true }, { "name": "国庆节", "date": "2024-10-02", "isOffDay": true }, { "name": "国庆节", "date": "2024-10-03", "isOffDay": true }, { "name": "国庆节", "date": "2024-10-04", "isOffDay": true }, { "name": "国庆节", "date": "2024-10-05", "isOffDay": true }, { "name": "国庆节", "date": "2024-10-06", "isOffDay": true }, { "name": "国庆节", "date": "2024-10-07", "isOffDay": true }, { "name": "国庆节", "date": "2024-10-12", "isOffDay": false } ] }dde-calendar-5.14.13/calendar-service/assets/pinyin.dict000066400000000000000000021363101473346337000230740ustar00rootroot000000000000000x3007:líng,yuán,xīng 0x3400:qiū 0x3401:tiàn 0x3404:kuà 0x3405:wǔ 0x3406:yǐn 0x340C:yí 0x3416:xié 0x341C:chóu 0x3421:nuò 0x3424:dān,qiú 0x3428:xù 0x3429:xíng 0x342B:xiōng 0x342C:liú 0x342D:lǐn 0x342E:xiāng 0x342F:yōng 0x3430:xìn 0x3431:zhěn 0x3432:dài 0x3433:wù 0x3434:pān 0x3435:rú 0x3437:mǎ 0x3438:qiàn,cì 0x3439:yì 0x343A:yín,zhòng 0x343B:nèi 0x343C:chèng 0x343D:fēng 0x3441:zhuō 0x3442:fǎng 0x3443:ǎo 0x3444:wǔ 0x3445:zuò 0x3447:zhòu 0x3448:dòng 0x3449:sù 0x344A:yì 0x344B:qióng 0x344C:kuāng,wāng 0x344D:lèi 0x344E:nǎo 0x344F:zhù 0x3450:shū 0x3454:xǔ 0x3457:shēn 0x3458:jiè 0x3459:dié 0x345A:nuó 0x345B:sù 0x345C:yì,chì 0x345D:lòng 0x345E:yìng 0x345F:běng 0x3463:lán 0x3464:miáo 0x3465:yì 0x3466:lì 0x3467:jì 0x3468:yǔ 0x3469:luó 0x346A:chái 0x346E:hún 0x346F:xǔ 0x3470:huì 0x3471:rǎo 0x3473:zhòu,zhū 0x3475:hàn 0x3476:xì 0x3477:tài 0x3478:yáo 0x3479:huì 0x347A:jùn 0x347B:mà 0x347C:lüè 0x347D:táng 0x347E:yáo 0x347F:zhào 0x3480:zhāi,zhǎ 0x3481:yǔ 0x3482:zhuó 0x3483:èr 0x3484:rǎn 0x3485:qǐ 0x3486:chì 0x3487:wǔ 0x3488:hàn 0x3489:tǎng 0x348A:sè 0x348C:qióng 0x348D:léi 0x348E:sà 0x3491:kuǐ,huì 0x3492:pú 0x3493:tà 0x3494:shú,dú,tù 0x3495:yāng 0x3496:ǒu 0x3497:tái 0x3499:mián 0x349A:yìn,wěn 0x349B:diào 0x349C:yǔ 0x349D:miè,wà 0x349E:jùn 0x349F:niǎo 0x34A0:xiè 0x34A1:yóu 0x34A4:chè 0x34A5:fēng 0x34A6:lěi,lèi 0x34A7:lì 0x34A9:luǒ 0x34AB:jì 0x34B0:quán 0x34B2:cái 0x34B3:liǎng 0x34B4:gǔ 0x34B5:mào 0x34B7:guǎ 0x34B8:suì 0x34BB:mào 0x34BC:mán 0x34BD:quān 0x34BE:shì 0x34BF:lí 0x34C1:wǎng 0x34C2:kòu 0x34C3:dù 0x34C4:zhèn 0x34C5:tīng 0x34C8:bìng 0x34C9:huò 0x34CA:dòng 0x34CB:gòng 0x34CC:chēng 0x34CE:qīn,qìn,qǐn 0x34CF:jiǒng 0x34D0:lù 0x34D1:xìng 0x34D3:nán 0x34D4:xiè 0x34D6:bì 0x34D7:jié 0x34D8:sù 0x34DA:gōng 0x34DC:yòu 0x34DD:xíng 0x34DE:qià 0x34DF:pí 0x34E0:diàn,diǎn 0x34E1:fǔ,guā 0x34E2:luò 0x34E3:qià,gē 0x34E4:qià 0x34E5:tāng 0x34E6:bāi 0x34E7:gān 0x34E8:cí 0x34E9:xuān,jiē 0x34EA:lǎng 0x34ED:shé 0x34EF:lí 0x34F0:huà 0x34F1:tóu,shū 0x34F2:piān 0x34F3:dī 0x34F4:ruǎn 0x34F5:è 0x34F6:qiè 0x34F7:yì 0x34F8:zhuō,dōu 0x34F9:ruì,cuì,jì 0x34FA:jiān,qián 0x34FC:chì 0x34FD:chóng 0x34FE:xī,chí 0x3500:lüè 0x3501:dēng 0x3502:lín 0x3503:jué,xuē 0x3504:sù 0x3505:xiào 0x3506:zàn 0x3509:zhǔ 0x350A:zhǎn,dǎn 0x350B:jiān,lán 0x350C:zòu,cǒu 0x350D:chuā,zhá 0x350E:xiè 0x350F:lì,luǒ 0x3511:chì 0x3512:xí 0x3513:jiǎn 0x3515:jí 0x3517:fèi,bèi,fú 0x3518:chù 0x3519:bēng 0x351A:jié 0x351C:bá 0x351D:liǎng,liáng 0x351E:kuài 0x3520:xiā,hé 0x3521:biē 0x3522:jué,xuē 0x3523:léi 0x3524:xìn 0x3525:bài,pí 0x3526:yǎng 0x3527:lǜ 0x3528:bèi 0x3529:è 0x352A:lǔ 0x352D:chè 0x352E:nuó 0x352F:xuán,suǎn 0x3530:héng 0x3531:yǔ 0x3533:guǐ 0x3534:yì 0x3535:xuǎn 0x3536:gòng,gǎn 0x3537:lòu 0x3538:tī 0x3539:lè 0x353A:shì 0x353C:sǔn 0x353D:yào 0x353E:xiān,jié 0x353F:zòu 0x3541:què 0x3542:yín,qín 0x3543:xī 0x3544:zhǐ 0x3545:jiá 0x3546:hù 0x3547:lā 0x3548:yǐ 0x3549:kè 0x354A:fū 0x354B:qín 0x354C:ài 0x354E:kè 0x354F:chú 0x3550:xiě,xiè 0x3551:chú 0x3552:wēi 0x3555:huàn 0x3556:sù 0x3557:yòu 0x3559:jùn 0x355A:zhǎo 0x355B:xù 0x355C:shǐ 0x355E:shuā 0x355F:kuì,kuài 0x3560:shuāng 0x3561:hé 0x3562:gài,hài 0x3563:yǎn 0x3564:qiú 0x3565:shēn 0x3566:huà 0x3567:xī 0x3568:fàn 0x3569:pàng 0x356A:dǎn 0x356B:fǎng,fēng 0x356C:gōng,sòng 0x356D:āo,ào 0x356E:fǔ 0x356F:nè 0x3570:xuè,ma 0x3571:yóu 0x3572:huá,yíng 0x3574:chén 0x3575:guó 0x3576:ň,ňg 0x3577:huà,pā 0x3578:lì 0x3579:fá 0x357A:xiāo 0x357B:pǒu 0x357D:sì 0x3580:lè 0x3581:lìn 0x3582:yì 0x3583:hǒu,hòu 0x3585:xù 0x3586:qú 0x3587:ér 0x358A:xún 0x358F:niè 0x3590:wěi 0x3591:xiè 0x3592:tí 0x3593:hóng 0x3594:tǔn 0x3595:niè,xīn 0x3596:niè 0x3597:yín 0x3598:zhēn 0x359E:wāi 0x359F:shòu 0x35A0:nuò 0x35A1:yè 0x35A2:qí 0x35A3:tòu 0x35A4:hán 0x35A5:jùn 0x35A6:dǒng 0x35A7:hūn,wěn 0x35A8:lù 0x35A9:jū,sǒu 0x35AA:huò,guó,xù 0x35AB:líng 0x35AD:tiǎn 0x35AE:lún 0x35B5:gé 0x35B6:yān,yè,yīn 0x35B7:shí,tí 0x35B8:xué,niā 0x35B9:pēn,fèn 0x35BA:chǔn 0x35BB:niú,ròu 0x35BC:duǒ 0x35BD:zé 0x35BE:è 0x35BF:xié,yé 0x35C0:yōu 0x35C1:è 0x35C2:shěng 0x35C3:wěn,hūn 0x35C4:kū 0x35C5:hú 0x35C6:gé 0x35C7:xiá,ya 0x35C8:màn 0x35C9:lüè,è 0x35CA:jí,léi 0x35CB:hóu 0x35CC:zhì 0x35CF:wāi 0x35D1:bai 0x35D2:ài 0x35D3:zhuī 0x35D4:qiān 0x35D5:gòu,gōu 0x35D6:dàn 0x35D7:bēi 0x35D8:bó 0x35D9:chū,nà,zhōu 0x35DA:lì 0x35DB:xiào 0x35DC:xiù 0x35E2:hóng,dòng,hòng 0x35E3:tì 0x35E4:cù 0x35E5:kuò,guō 0x35E6:láo 0x35E7:zhì,dié 0x35E8:xiē,ǎi 0x35E9:xī 0x35EB:qiè 0x35EC:zhā 0x35ED:xī 0x35F0:cóng 0x35F1:jí 0x35F2:huò 0x35F3:tǎ,dā 0x35F4:yán 0x35F5:xù 0x35F6:pō 0x35F7:sǎi 0x35FB:guō 0x35FC:yè 0x35FD:xiǎng 0x35FE:xuē 0x35FF:hé,xià,xiā 0x3600:zuò 0x3601:yì 0x3602:cí 0x3604:lēng 0x3605:xián 0x3606:tǎi 0x3607:róng 0x3608:yì,nǐ 0x3609:zhì 0x360A:xī,yì 0x360B:xián 0x360C:jù 0x360D:jí 0x360E:hǎn 0x3610:pào 0x3611:lì 0x3613:lán 0x3614:sǎi 0x3615:hǎn,lán 0x3616:yán 0x3617:qū 0x3619:yán 0x361A:hǎn 0x361B:kān 0x361C:chǐ 0x361D:niè 0x361E:huò 0x3620:bì 0x3621:xiá 0x3622:wěng 0x3623:xuán,yuán 0x3624:wān 0x3625:yóu 0x3626:qín 0x3627:xù 0x3628:niè 0x3629:bì 0x362A:hào 0x362B:jǐng 0x362C:ào,wù 0x362D:ào 0x3630:zhēn 0x3631:tān 0x3632:jú 0x3634:zuò 0x3635:bù 0x3636:jié 0x3637:ài 0x3638:zàng,zuò 0x3639:cí 0x363A:fá 0x363F:niè 0x3640:liù,jiù 0x3641:méi,mù 0x3642:duì,wèng 0x3643:bāng 0x3644:bì 0x3645:bǎo 0x3647:chù 0x3648:xià 0x3649:tiǎn 0x364A:cháng,zhàng 0x364D:duō 0x364E:wēi 0x364F:fù 0x3650:duǒ 0x3651:yǔ 0x3652:yě 0x3653:kuí 0x3654:wěi,hán 0x3655:kuài 0x3657:wēi 0x3658:yāo 0x3659:lǒng 0x365A:xīng 0x365B:bǔ 0x365C:chí 0x365D:xié 0x365E:niè 0x365F:lǎng 0x3660:yī,yì 0x3661:zōng 0x3662:mán 0x3663:zhàng 0x3664:xià 0x3665:gùn 0x3666:xié 0x3668:jì 0x3669:liáo 0x366A:yì 0x366B:jí 0x366C:yín 0x366E:dā,da 0x366F:yì 0x3670:xiè 0x3671:hào 0x3672:yǒng 0x3673:kǎn,hǎn 0x3674:chàn 0x3675:tái 0x3676:táng 0x3677:zhí,zhé 0x3678:bào 0x3679:méng 0x367A:kuí,guì 0x367B:chán 0x367C:lěi 0x367E:xì 0x3680:xī 0x3681:qiào 0x3682:nàng 0x3683:yūn 0x3685:lóng 0x3686:fù 0x3687:zōng 0x3689:gǔ 0x368A:kāi 0x368B:diāo 0x368C:huà 0x368D:kuǐ,kuì 0x368F:gǎo 0x3690:tào 0x3692:shǎn 0x3693:lǎi 0x3694:niè,xìng 0x3695:fú 0x3696:gǎo,zé 0x3697:qié 0x3698:bàn,hè,fú 0x3699:jiā 0x369A:kōng,kuāng 0x369B:xì 0x369C:yù,xù 0x369D:zhuī 0x369E:shěn 0x369F:chuò 0x36A0:xiāo 0x36A1:jǐ 0x36A2:nú,wǔ 0x36A3:xiáo 0x36A4:yì 0x36A5:yú 0x36A6:yí 0x36A7:yǎn 0x36A8:shěn 0x36A9:rǎn 0x36AA:hào 0x36AB:sà 0x36AC:jūn 0x36AD:yóu 0x36AF:xín 0x36B0:pēi,bǐ 0x36B1:qiū 0x36B2:chān,diǎn,diàn 0x36B4:bù 0x36B5:dōng 0x36B6:sì,yí 0x36B7:ěr 0x36B9:mǎo,liǔ 0x36BA:yùn 0x36BB:jī 0x36BD:qiǎo 0x36BE:xiōng 0x36BF:páo 0x36C0:chú 0x36C1:pēng 0x36C2:nuǒ 0x36C3:jié 0x36C4:yī 0x36C5:èr 0x36C6:duò,duǒ 0x36CA:duǒ 0x36CD:qiè,xiǎn,xiá 0x36CE:lǚ 0x36CF:qiú 0x36D0:sǒu 0x36D1:càn 0x36D2:dòu 0x36D3:xī 0x36D4:fēng,péng 0x36D5:yì,è 0x36D6:suō 0x36D7:qiē,zuō,suō 0x36D8:pò 0x36D9:xīn,qiè 0x36DA:tǒng,yǒng 0x36DB:xìn 0x36DC:yóu 0x36DD:bèi 0x36DE:lòng 0x36E3:yún 0x36E4:lí 0x36E5:tà 0x36E6:lǎn 0x36E7:mǎn 0x36E8:qiǎng 0x36E9:zhóu 0x36EA:yàn,yān 0x36EB:xī 0x36EC:lù 0x36ED:xī 0x36EE:sǎo 0x36EF:fàn,miǎn,zhuàn 0x36F1:wěi,wēi 0x36F2:fà 0x36F3:yì 0x36F4:nǎo 0x36F5:chēng 0x36F6:tàn 0x36F7:jī 0x36F8:shù 0x36F9:pián 0x36FA:ān 0x36FB:kuā 0x36FC:chā,shà 0x36FE:xián 0x36FF:zhì 0x3702:fēng 0x3703:liàn 0x3704:xún 0x3705:xù 0x3706:mì 0x3707:huì,yè 0x3708:mù 0x3709:yōng 0x370A:zhǎn 0x370B:yì 0x370C:nǒu,gòu,kòu 0x370D:táng 0x370E:xī,xì 0x370F:yún 0x3710:shù 0x3711:fú 0x3712:yì 0x3713:dá 0x3715:lián 0x3716:cáo 0x3717:cān,sēn 0x3718:jù,qù,chá 0x3719:lù 0x371A:sù 0x371B:nèn 0x371C:ào 0x371D:ǎn,yǎn 0x371E:qiàn,cán 0x3720:cuī 0x3721:cōng 0x3723:rán,rǎn 0x3724:niǎn,tiǎn,tán 0x3725:mái 0x3726:xín 0x3727:yuè 0x3728:nái 0x3729:ào 0x372A:shēn 0x372B:mà 0x372E:làn,lán 0x372F:xī 0x3730:yuè 0x3731:zhì 0x3732:wěng 0x3733:huái 0x3734:mèng 0x3735:niǎo 0x3736:wǎn 0x3737:mí,xiǎn 0x3738:niè 0x3739:qú 0x373A:zàn 0x373B:liàn 0x373C:zhí 0x373D:zǐ 0x373E:hái 0x373F:xù 0x3740:hào 0x3741:xuān,qióng 0x3742:zhì,zhè 0x3743:miǎn 0x3744:chún 0x3745:gòu 0x3747:chún 0x3748:luán 0x3749:zhù 0x374A:shǒu 0x374B:liǎo 0x374C:jiù 0x374D:xiě 0x374E:dìng 0x374F:jiè 0x3750:róng 0x3751:máng 0x3753:kè 0x3754:yǎo 0x3755:níng 0x3756:yí 0x3757:láng,lǎng 0x3758:yóng 0x3759:yín 0x375A:yán 0x375B:sù 0x375D:lín 0x375E:yā,yà 0x375F:máo 0x3760:míng 0x3761:zuì 0x3762:yǔ 0x3763:yì 0x3764:gòu 0x3765:mǐ 0x3766:jùn 0x3767:wěn 0x3769:kāng 0x376A:diàn 0x376B:lóng 0x376D:xǐng 0x376E:cuì 0x376F:qiáo 0x3770:mián 0x3771:mèng 0x3772:qǐn 0x3774:wán 0x3775:dé,ài 0x3776:ài 0x3778:biàn 0x3779:nóu 0x377A:lián 0x377B:jǐn 0x377C:yū 0x377D:chuí 0x377E:zuǒ 0x377F:bǒ 0x3780:huī 0x3781:yào 0x3782:tuǐ,tuì 0x3783:jì 0x3784:ān 0x3785:luò 0x3786:jǐ 0x3787:wěi 0x3788:bō 0x3789:zā 0x378A:xù 0x378B:niǎn,jí 0x378C:yùn 0x378E:bǎ,pā 0x378F:zhé,jié 0x3790:jū 0x3791:wěi 0x3792:xiè,xì 0x3793:qì,jī 0x3794:yí 0x3795:xiè 0x3796:cí,cì 0x3797:qiú 0x3798:dū 0x3799:niào 0x379A:qì,zhǎ 0x379B:jǐ 0x379C:tuī 0x379E:sóng 0x379F:diàn,dǐng 0x37A0:láo 0x37A1:zhǎn 0x37A4:yín,cén 0x37A5:cén 0x37A6:jǐ 0x37A7:huì 0x37A8:zǐ 0x37A9:lán 0x37AA:náo 0x37AB:jù 0x37AC:qìn 0x37AD:dài 0x37AF:jié 0x37B0:xǔ 0x37B1:cōng 0x37B2:yòng 0x37B3:dǒu 0x37B4:chí,mín 0x37B6:mǐn 0x37B7:huáng 0x37B8:suì 0x37B9:kě 0x37BA:zú 0x37BB:hào 0x37BC:chéng 0x37BD:xuè 0x37BE:ní 0x37BF:chì 0x37C0:lián 0x37C1:àn 0x37C2:mǔ 0x37C3:sī 0x37C4:xiáng 0x37C5:yáng 0x37C6:huá 0x37C7:cuò,cuó 0x37C8:qiú 0x37C9:láo 0x37CA:fú 0x37CB:duì 0x37CC:máng 0x37CD:láng,lǎng 0x37CE:tuǒ,tuǐ 0x37CF:hán 0x37D0:mǎng 0x37D1:bó 0x37D2:qūn 0x37D3:qí 0x37D4:hán 0x37D6:lòng,lóng 0x37D8:tiáo 0x37D9:zé 0x37DA:qí 0x37DB:zàn 0x37DC:mí 0x37DD:péi 0x37DE:zhàn 0x37DF:xiàng 0x37E0:gǎng 0x37E2:qí 0x37E4:lù 0x37E6:yùn 0x37E7:è 0x37E8:duān 0x37E9:mín 0x37EA:wēi,wěi 0x37EB:quán 0x37EC:sǒu 0x37ED:mín 0x37EE:tū 0x37F0:mǐng 0x37F1:yǎo 0x37F2:jué 0x37F3:lì 0x37F4:kuài 0x37F5:gǎng 0x37F6:yuán 0x37F7:da 0x37F9:láo 0x37FA:lóu 0x37FB:qiàn,zhǎn 0x37FC:áo 0x37FD:biǎo,biāo 0x37FE:yōng 0x37FF:mǎng,máng 0x3800:dǎo 0x3802:áo 0x3804:xí 0x3805:fú,fù 0x3806:dān 0x3807:jiù 0x3808:rùn 0x3809:tóng 0x380A:qū 0x380B:è 0x380C:qī 0x380D:jí 0x380E:jí,jié 0x380F:huá 0x3810:jiào 0x3811:zuì 0x3812:biǎo 0x3813:méng 0x3814:bài 0x3815:wěi 0x3816:yǐ 0x3817:ào 0x3818:yǔ 0x3819:háo 0x381A:duì 0x381B:wò 0x381C:nì 0x381D:cuán 0x381F:lí 0x3820:lú 0x3821:niǎo 0x3822:huái 0x3823:lì 0x3825:lǜ,léi,lěi 0x3826:fēng 0x3827:mǐ 0x3828:yù 0x382A:jù 0x382D:zhǎn 0x382E:pēng,gāng 0x382F:yǐ 0x3831:jì,qǐ 0x3832:bǐ 0x3834:rèn 0x3835:huāng 0x3836:fán 0x3837:gé 0x3838:kù 0x3839:jiè 0x383A:shā,miáo 0x383C:sī 0x383D:tóng 0x383E:yuān 0x383F:zī,cǐ 0x3840:bì 0x3841:kuǎ 0x3842:lì 0x3843:huāng 0x3844:xún 0x3845:nuǒ 0x3847:zhé,jiē 0x3848:wèn,mén,miǎn 0x3849:xián 0x384A:qià 0x384B:yé,ān 0x384C:mào 0x384F:shù,xū,tóu,shū 0x3851:qiāo,jiǎo 0x3852:zhūn 0x3853:kūn 0x3854:wù 0x3855:yīng 0x3856:chuáng 0x3857:tí 0x3858:lián,lín 0x3859:bī 0x385A:gōu 0x385B:máng 0x385C:xiè,xuě 0x385D:fèng 0x385E:lóu,lǚ 0x385F:zāo 0x3860:zhèng 0x3861:chú 0x3862:màn 0x3863:lóng 0x3865:yìn 0x3866:pīn 0x3867:zhèng 0x3868:jiān,qiān 0x3869:luán 0x386A:nié 0x386B:yì 0x386D:jì 0x386E:jí 0x386F:zhái,dù,duó 0x3870:yǔ 0x3871:jiǔ 0x3872:huán 0x3873:zhǐ 0x3874:lā 0x3875:líng 0x3876:zhǐ 0x3877:běn 0x3878:zhà,zhǎ,chá 0x3879:jū 0x387A:dàn 0x387B:liào 0x387C:yì 0x387D:zhào 0x387E:xiàn 0x387F:chì 0x3880:cì 0x3881:chǐ,shǐ 0x3882:yǎn,tuí,duī 0x3883:láng 0x3884:dòu 0x3885:lòng 0x3886:chán 0x3888:tuí,duī 0x3889:chá 0x388A:ǎi,yǐ 0x388B:chǐ 0x388D:yǐng 0x388E:zhé 0x388F:tóu,yǔ,yú 0x3891:tuí 0x3892:chá 0x3893:yǎo 0x3894:zǒng 0x3896:pān,bān 0x3897:qiào 0x3898:lián 0x3899:qín 0x389A:lǔ 0x389B:yàn,qiān 0x389C:kāng,kàng 0x389D:sū 0x389E:yì 0x389F:chān 0x38A0:jiǒng 0x38A1:jiǎng 0x38A3:jìng 0x38A5:dòng 0x38A7:juàn 0x38A8:hàn 0x38A9:dì 0x38AC:hóng 0x38AE:chí 0x38AF:diāo,mín 0x38B0:bì 0x38B2:xùn 0x38B3:lú 0x38B5:xié,shè 0x38B6:bì 0x38B8:bì 0x38BA:xián 0x38BB:ruì 0x38BC:biè 0x38BD:ěr 0x38BE:juàn 0x38C0:zhèn 0x38C1:bèi 0x38C2:è 0x38C3:yǔ 0x38C4:qú 0x38C5:zàn 0x38C6:mí 0x38C7:yì 0x38C8:sì 0x38CC:shàn 0x38CD:tái 0x38CE:mù 0x38CF:jìng 0x38D0:biàn 0x38D1:róng 0x38D2:cèng 0x38D3:càn 0x38D4:dīng 0x38D9:dí,zhòu 0x38DA:tǒng,tóng,dòng 0x38DB:tà,huì 0x38DC:xíng 0x38DD:sōng 0x38DE:duó 0x38DF:xì 0x38E0:tāo,tóng 0x38E2:tí 0x38E3:shàn 0x38E4:jiàn 0x38E5:zhì 0x38E6:wēi 0x38E7:yìn 0x38EA:huǎn 0x38EB:zhǒng,dòng 0x38EC:qì 0x38ED:zōng 0x38EF:xiè 0x38F0:xiè 0x38F1:zé 0x38F2:wéi 0x38F5:tà 0x38F6:zhān 0x38F7:nìng 0x38FB:yì 0x38FC:rěn 0x38FD:shù,nù 0x38FE:chà 0x38FF:zhuó,diǎo 0x3901:miǎn 0x3902:jí 0x3903:fáng 0x3904:pèi 0x3905:ài,xì,jì 0x3906:fàn 0x3907:ǎo 0x3908:qìn 0x3909:qiā,yà 0x390A:xiào 0x390B:fēn 0x390C:gān 0x390D:qiāo,qiǎo 0x390E:gē 0x390F:tóng 0x3910:chān 0x3911:yòu 0x3912:gāo 0x3913:bèn 0x3914:fù 0x3915:chù,pò 0x3916:zhù 0x3918:zhòu 0x391A:háng 0x391B:nín 0x391C:jué 0x391D:chōng 0x391E:chà,duó,zé 0x391F:kǒng 0x3920:liè 0x3921:lì,liè 0x3922:yù 0x3924:yú 0x3925:hài 0x3926:lì 0x3927:hóu 0x3928:gǒng 0x3929:kè 0x392A:yuàn 0x392B:dé 0x392C:huì 0x392E:guàng 0x392F:jiǒng 0x3930:zuò 0x3931:fù,dòu 0x3932:qiè 0x3933:běi 0x3934:chè,shè,dié 0x3935:cí 0x3936:máng,màng 0x3937:hān 0x3938:xì 0x3939:qiú,jiù 0x393A:huǎng 0x393D:chóu 0x393E:sàn,tàn 0x393F:yān 0x3940:zhí,dé 0x3941:dé 0x3942:tè 0x3943:mèn 0x3944:líng 0x3945:shòu 0x3946:tuì 0x3947:cán 0x3948:dié 0x3949:chè 0x394A:péng,pēng 0x394B:yī 0x394C:jú 0x394D:jì 0x394E:lái 0x394F:tiǎn 0x3950:yuàn 0x3952:cǎi,cāi 0x3953:qī 0x3954:yù 0x3955:lián 0x3956:cōng 0x395A:yú,yǔ 0x395B:jí,kè 0x395C:wèi 0x395D:mǐ 0x395E:suì 0x395F:xié 0x3960:xū 0x3961:chì 0x3962:qiú,jiū 0x3963:huì 0x3965:yú 0x3966:qiè 0x3967:shùn 0x3968:shuì,wěi 0x3969:duǒ 0x396A:lóu 0x396C:páng 0x396D:tài 0x396E:zhòu,chǎo 0x396F:yǐn 0x3970:sāo 0x3971:fěi 0x3972:chēn,shèn 0x3973:yuán 0x3974:yí,tí 0x3975:hùn 0x3976:sè,qiān 0x3977:yè 0x3978:mǐn 0x3979:fěn 0x397A:hé 0x397C:yìn,yān 0x397D:cè,zé 0x397E:nì 0x397F:ào 0x3980:féng 0x3981:lián,liǎn 0x3982:cháng 0x3983:chǎn 0x3984:má 0x3985:diē,dì,chài 0x3986:hū,xiā 0x3987:lù 0x3989:yì 0x398A:huá 0x398B:zhā 0x398C:hū,xù 0x398D:è 0x398E:huò 0x398F:sǔn,xuàn 0x3990:nì 0x3991:xiàn,hān 0x3992:lí 0x3993:xiàn,rǎn 0x3994:yàn 0x3995:lóng 0x3996:mèn 0x3997:jīn,jìn 0x3998:jī 0x399A:biǎn 0x399B:yǔ,yú 0x399C:huò,xuè 0x399D:miǎo 0x399E:chóu 0x399F:mái 0x39A1:lè 0x39A2:jié 0x39A3:wèi 0x39A4:yì 0x39A5:xuān,xiǎn 0x39A6:xì 0x39A7:cǎn 0x39A8:lán 0x39A9:yǐn 0x39AA:xiè 0x39AB:zā 0x39AC:luǒ 0x39AD:líng 0x39AE:qián 0x39AF:huò 0x39B0:jiān 0x39B1:wǒ 0x39B4:gé 0x39B5:zhū 0x39B6:dié,yǒng 0x39B7:yǒng 0x39B8:jǐ 0x39B9:yáng 0x39BA:rù 0x39BB:xí 0x39BC:shuàng 0x39BD:yù 0x39BE:yí 0x39BF:qiǎn,hù 0x39C0:jí 0x39C1:qù,hé 0x39C2:tián 0x39C3:shōu,jiū 0x39C4:qiǎn 0x39C5:mù,dāo 0x39C6:jīn 0x39C7:mǎo 0x39C8:yǐn 0x39C9:gài,hài,yè 0x39CA:pō,bá 0x39CB:xuǎn 0x39CC:mào 0x39CD:fǎng,bēng 0x39CE:yá,yà,qiā 0x39CF:gāng 0x39D0:sǒng 0x39D1:huī 0x39D2:yù 0x39D3:guā 0x39D4:guài 0x39D5:liǔ 0x39D6:è 0x39D7:zǐ,jǐ,zhǐ 0x39D8:zì 0x39D9:bì,bié 0x39DA:wǎ 0x39DC:liè 0x39DF:kuǎi 0x39E1:hài,wèi 0x39E2:yīn 0x39E3:zhū 0x39E4:chòng 0x39E5:xiǎn 0x39E6:xuàn,hōng 0x39E8:qiú 0x39E9:pèi 0x39EA:guǐ,wěi 0x39EB:ér,ruán,ruí 0x39EC:gǒng 0x39ED:qióng 0x39EE:hū 0x39EF:lǎo 0x39F0:lì 0x39F1:chèn 0x39F2:sǎn 0x39F3:zhuò,bāi 0x39F4:wǒ,é 0x39F5:póu 0x39F6:kēng 0x39F7:tùn 0x39F8:pēng 0x39F9:tè 0x39FA:tà 0x39FB:zhuó,zú,dū 0x39FC:biào 0x39FD:gù 0x39FE:hū 0x3A00:bǐng 0x3A01:zhì,zhí 0x3A02:dǒng 0x3A03:duǐ,chéng 0x3A04:zhōu,zhào,tiáo 0x3A05:nèi,ruì 0x3A06:lǐn 0x3A07:pó 0x3A08:jǐ 0x3A09:mín,wěn 0x3A0A:wěi,tuǒ,duò 0x3A0B:chě 0x3A0C:gòu 0x3A0D:bāng 0x3A0E:rú 0x3A0F:tān 0x3A10:bǔ 0x3A11:zōng 0x3A12:kuī 0x3A13:láo 0x3A14:hàn 0x3A15:yíng 0x3A16:zhì 0x3A17:jié 0x3A18:xǐng 0x3A19:xié,xì 0x3A1A:xún,sǔn 0x3A1B:shǎn,shàn 0x3A1C:qián 0x3A1D:xiē 0x3A1E:sù 0x3A1F:hāi 0x3A20:mì 0x3A21:hún 0x3A22:pī 0x3A24:huì 0x3A25:nà 0x3A26:sǒng 0x3A27:bèn 0x3A28:chōu,liù 0x3A29:jié 0x3A2A:huàng,huǎng 0x3A2B:lǎn 0x3A2D:hù 0x3A2E:dōu 0x3A2F:huò 0x3A30:gǔn 0x3A31:yáo 0x3A32:cè 0x3A33:guǐ,jì 0x3A34:jiàn 0x3A35:jiǎn 0x3A36:dǎo 0x3A37:jìn 0x3A38:mà 0x3A39:huì,xuě 0x3A3A:miǎn,mén 0x3A3B:cán,shǎn,zàn,chàn 0x3A3C:lüè 0x3A3D:pì 0x3A3E:yàng 0x3A3F:jù 0x3A40:jù 0x3A41:què 0x3A43:qiān 0x3A44:shāi 0x3A46:jiù,zú 0x3A47:huò,zuó,huá 0x3A48:yǔn 0x3A49:dá,lā,xī,xié 0x3A4A:xuān 0x3A4B:xiāo,sù 0x3A4C:fèi 0x3A4D:cè 0x3A4E:yè 0x3A50:dèn 0x3A52:qín 0x3A53:huǐ 0x3A54:tún 0x3A56:qiáng 0x3A57:xí 0x3A58:nǐ 0x3A59:sāi 0x3A5A:méng 0x3A5B:tuán 0x3A5C:lǎn 0x3A5D:háo 0x3A5E:cì 0x3A5F:zhài 0x3A60:āo,piǎo,póu 0x3A61:luǒ 0x3A62:miè,mì 0x3A64:fū 0x3A66:xié,xī 0x3A67:bó 0x3A68:huì 0x3A69:qǐng 0x3A6A:xié 0x3A6D:bó 0x3A6E:qián 0x3A6F:pó 0x3A70:jiǎo 0x3A71:jué 0x3A72:kǔn 0x3A73:sǒng 0x3A74:jú,qú 0x3A75:è 0x3A76:niè 0x3A77:qiān 0x3A78:dié 0x3A79:dié 0x3A7B:qī,guì,guǐ 0x3A7C:zhī 0x3A7D:qí,chì,è 0x3A7E:zhuì,qí 0x3A7F:kū 0x3A80:yú 0x3A81:qín,kān,qiàn,qián 0x3A82:kū 0x3A83:hé 0x3A84:fú 0x3A86:dǐ 0x3A87:xiàn 0x3A88:guì 0x3A89:hé 0x3A8A:qún 0x3A8B:hàn,hě 0x3A8C:tǒng 0x3A8D:bó,bèi 0x3A8E:shǎn,nà 0x3A8F:bǐ 0x3A90:lù 0x3A91:yè 0x3A92:ní 0x3A93:chuái 0x3A94:sàn 0x3A95:diào,chuò 0x3A96:lù 0x3A97:tǒu 0x3A98:liǎn 0x3A99:kě 0x3A9A:sàn 0x3A9B:zhěn 0x3A9C:chuǎi,duǒ 0x3A9D:liàn 0x3A9E:mào 0x3AA0:qiān,qiàn,jiān 0x3AA1:kài,kě 0x3AA2:shǎo 0x3AA3:xiāo,qiāo 0x3AA4:bì 0x3AA5:zhā 0x3AA6:yìn 0x3AA7:xī 0x3AA8:shàn 0x3AA9:sù 0x3AAA:sà 0x3AAB:ruì 0x3AAC:chuō,zhuó 0x3AAD:lú 0x3AAE:líng 0x3AAF:chá 0x3AB1:huàn 0x3AB4:jiá 0x3AB5:bàn 0x3AB6:hú 0x3AB7:dǒu 0x3AB9:lǒu 0x3ABA:jū 0x3ABB:juàn 0x3ABC:kě 0x3ABD:suǒ 0x3ABE:luò,gé 0x3ABF:zhé 0x3AC0:dǐng 0x3AC1:duàn 0x3AC2:zhù 0x3AC3:yǎn 0x3AC4:páng 0x3AC5:chá 0x3ACA:yǐ,ě 0x3ACD:yóu,yǎo 0x3ACE:huī,gǔn 0x3ACF:yǎo 0x3AD0:yǎo 0x3AD1:zhǐ,shí 0x3AD2:gǒng 0x3AD3:qǐ 0x3AD4:gèn 0x3AD7:hòu 0x3AD8:mì 0x3AD9:fú 0x3ADA:hū 0x3ADB:guàng 0x3ADC:tǎn 0x3ADD:dī 0x3ADF:yán 0x3AE2:qù 0x3AE4:chǎng 0x3AE5:mǐng 0x3AE6:tāo 0x3AE7:bào 0x3AE8:ān 0x3AEB:xiǎn 0x3AEF:mào 0x3AF0:làng,lǎng 0x3AF1:nǎn,nàn 0x3AF2:bèi 0x3AF3:chén 0x3AF5:fēi 0x3AF6:zhǒu 0x3AF7:jī 0x3AF8:jiē 0x3AF9:shù 0x3AFB:kùn 0x3AFC:dié 0x3AFD:lù 0x3B02:yú 0x3B03:tái 0x3B04:chàn 0x3B05:màn 0x3B06:mǐn 0x3B07:huàn 0x3B08:wēn 0x3B09:nuǎn 0x3B0A:huàn,huǎn 0x3B0B:hóu 0x3B0C:jìng 0x3B0D:bó 0x3B0E:xiǎn 0x3B0F:lì 0x3B10:jìn,zī 0x3B12:mǎng 0x3B13:piào 0x3B14:háo 0x3B15:yáng 0x3B17:xiàn 0x3B18:sù 0x3B19:wěi 0x3B1A:chè 0x3B1B:xī 0x3B1C:jìn 0x3B1D:céng,sōng 0x3B1E:hè 0x3B1F:fēn 0x3B20:shài,shà 0x3B21:líng 0x3B23:duì 0x3B24:qī 0x3B25:pù,bó 0x3B26:yuè 0x3B27:bó 0x3B29:huì 0x3B2A:dié 0x3B2B:yàn 0x3B2C:jù 0x3B2D:jiào 0x3B2E:nàn 0x3B2F:liè 0x3B30:yú 0x3B31:tì 0x3B32:tiān 0x3B33:wǔ 0x3B34:hǒng 0x3B35:xiáo 0x3B36:hào 0x3B38:tiāo 0x3B39:zhēng 0x3B3B:huāng,hāng,huǎng 0x3B3C:fù 0x3B3F:tūn 0x3B41:réng 0x3B42:jiǎo 0x3B44:xìn 0x3B47:yuàn 0x3B48:jué 0x3B49:huá 0x3B4B:bàng 0x3B4C:móu 0x3B4E:gāng 0x3B4F:wěi 0x3B51:mèi 0x3B52:sì 0x3B53:biàn 0x3B54:lú 0x3B55:qū 0x3B58:gé,hé 0x3B59:zhé 0x3B5A:lǚ 0x3B5B:pài,bà 0x3B5C:róng 0x3B5D:qiú,òu 0x3B5E:liè 0x3B5F:gǒng 0x3B60:xiǎn 0x3B61:xì,xìn 0x3B62:xīn 0x3B64:niǎo 0x3B68:xié 0x3B69:liè 0x3B6A:fū 0x3B6B:cuó,cuán 0x3B6C:zhuó 0x3B6D:bā,bèi,biē 0x3B6E:zuò,zǎn 0x3B6F:zhé,dié 0x3B70:zuī,zuǐ 0x3B71:hé 0x3B72:jí 0x3B74:jiān 0x3B78:tú 0x3B79:xián 0x3B7A:yǎn,yàn,ān 0x3B7B:táng 0x3B7C:tà 0x3B7D:dǐ 0x3B7E:jué 0x3B7F:áng 0x3B80:hán 0x3B81:xiáo 0x3B82:jú 0x3B83:wēi,ruí 0x3B84:bǎng 0x3B85:zhuī 0x3B86:niè 0x3B87:tiàn 0x3B88:nài 0x3B8B:yǒu 0x3B8C:mián 0x3B8F:nài,nì,nà 0x3B90:shěng,sì 0x3B91:chā,qì 0x3B92:yān,yīn 0x3B93:gèn 0x3B94:chòng,tóng 0x3B95:ruǎn 0x3B96:jiá 0x3B97:qín 0x3B98:máo 0x3B99:è 0x3B9A:lì 0x3B9B:chí,yí 0x3B9C:zāng 0x3B9D:hé 0x3B9E:jié 0x3B9F:niǎn,kā 0x3BA1:guàn 0x3BA2:hóu 0x3BA3:gài 0x3BA5:bèn,fàn 0x3BA6:suǒ,sè 0x3BA7:wū,wēn 0x3BA8:jì 0x3BA9:xī 0x3BAA:qióng 0x3BAB:hé,xiá,qià 0x3BAC:wēng 0x3BAD:xián 0x3BAE:jié 0x3BAF:hún,huá 0x3BB0:pí 0x3BB1:shēn 0x3BB2:chōu 0x3BB3:zhèn 0x3BB5:zhān 0x3BB6:shuò 0x3BB7:jī 0x3BB8:sòng 0x3BB9:zhǐ 0x3BBA:běn 0x3BBE:lǎng 0x3BBF:bì 0x3BC0:xuàn 0x3BC1:péi 0x3BC2:dài 0x3BC4:zhī 0x3BC5:pí,bī 0x3BC6:chǎn,shàn 0x3BC7:bì 0x3BC8:sù 0x3BC9:huò 0x3BCA:hén 0x3BCB:jiǒng,yǐng 0x3BCC:chuán 0x3BCD:jiǎng 0x3BCE:nèn 0x3BCF:gǔ 0x3BD0:fǎng 0x3BD3:tà,dá 0x3BD4:cuì 0x3BD5:xī 0x3BD6:dé 0x3BD7:xián 0x3BD8:kuǎn 0x3BD9:zhé 0x3BDA:tā 0x3BDB:hú 0x3BDC:cuì 0x3BDD:lù 0x3BDE:juàn 0x3BDF:lù 0x3BE0:qiàn 0x3BE1:pào,páo 0x3BE2:zhèn 0x3BE4:lì 0x3BE5:cáo,zāo 0x3BE6:qí 0x3BE9:tì 0x3BEA:líng 0x3BEB:qú 0x3BEC:liǎn 0x3BED:lǔ 0x3BEE:shú 0x3BEF:gòng,dǎn,jù 0x3BF0:zhé 0x3BF1:pāo 0x3BF2:jìn 0x3BF3:qíng 0x3BF6:zōng 0x3BF7:pú 0x3BF8:jǐn 0x3BF9:biǎo 0x3BFA:jiàn 0x3BFB:gǔn 0x3BFE:zāo 0x3BFF:liè,là 0x3C00:lí 0x3C01:luǒ 0x3C02:shěn 0x3C03:mián,miàn 0x3C04:jiàn 0x3C05:dí,zhé 0x3C06:bèi 0x3C08:liǎn 0x3C0A:xián 0x3C0B:pín 0x3C0C:què 0x3C0D:lóng 0x3C0E:zuì 0x3C10:jué 0x3C11:shān 0x3C12:xué 0x3C14:xiè 0x3C16:lǎn 0x3C17:qí 0x3C18:yí 0x3C19:nuó 0x3C1A:lí 0x3C1B:yuè 0x3C1D:yǐ 0x3C1E:chī 0x3C1F:jì,qì 0x3C20:hāng 0x3C21:xiè 0x3C22:kēng 0x3C23:zī 0x3C24:hē,qiè 0x3C25:xì,huì 0x3C26:qù 0x3C27:hāi 0x3C28:xiā 0x3C29:hāi 0x3C2A:guī 0x3C2B:chān 0x3C2C:xún 0x3C2D:xū 0x3C2E:shèn 0x3C2F:kòu,tòu,tǒu,hòu 0x3C30:xiā,qiè,hē 0x3C31:shà 0x3C32:yū,xù 0x3C33:yà,yā 0x3C34:pǒu 0x3C35:zú 0x3C36:yǒu,ǒu 0x3C37:zì 0x3C38:liǎn 0x3C39:xiān,xiàn,hǎn 0x3C3A:xià,xiá 0x3C3B:yǐ,xī,hòu 0x3C3C:shà,qiè 0x3C3D:yàn 0x3C3E:jiào 0x3C3F:xī 0x3C40:chǐ 0x3C41:shì,kuǎn 0x3C42:kāng 0x3C43:yǐn 0x3C44:hēi,mò 0x3C45:yì 0x3C46:xī 0x3C47:sè,xì 0x3C48:jìn 0x3C49:yè 0x3C4A:yōu 0x3C4B:què 0x3C4C:yé,chè 0x3C4D:luán 0x3C4E:kūn 0x3C4F:zhèng 0x3C54:xiē 0x3C56:cuì 0x3C57:xiū 0x3C58:àn 0x3C59:xiǔ,guǎ 0x3C5A:cán 0x3C5B:chuǎn,bù 0x3C5C:zhá 0x3C5E:yì,lā 0x3C5F:pī,pǐ 0x3C60:kū,gū 0x3C61:shēng 0x3C62:láng 0x3C63:tuǐ 0x3C64:xī 0x3C65:líng,lèng 0x3C66:qī 0x3C67:wò,yuǎn 0x3C68:liàn 0x3C69:dú 0x3C6A:mèn 0x3C6B:làn 0x3C6C:wěi 0x3C6D:duàn 0x3C6E:kuài 0x3C6F:ái 0x3C70:zǎi 0x3C71:huì 0x3C72:yì 0x3C73:mò 0x3C74:zì 0x3C75:fèn 0x3C76:péng,bēng 0x3C78:bì 0x3C79:lì 0x3C7A:lú 0x3C7B:luò 0x3C7C:hāi 0x3C7D:zhěn,qín 0x3C7E:gāi,kāi 0x3C7F:què,hù,qiǎng 0x3C80:zhēn,chēn 0x3C81:kōng,zhōng 0x3C82:chéng 0x3C83:jiù 0x3C84:jué,kū 0x3C85:jì 0x3C86:líng 0x3C88:sháo,táo 0x3C89:què 0x3C8A:ruì 0x3C8B:chuò 0x3C8C:nèng 0x3C8D:zhī 0x3C8E:lóu 0x3C8F:pāo 0x3C92:bào,qú 0x3C93:róng,shù 0x3C94:xiān 0x3C95:lèi 0x3C96:xiāo 0x3C97:fū 0x3C98:qú 0x3C9A:shā 0x3C9B:zhǐ 0x3C9C:tán 0x3C9D:rǒng 0x3C9E:sū,zú 0x3C9F:yǐng 0x3CA0:máo 0x3CA1:nài 0x3CA2:biàn 0x3CA4:shuāi 0x3CA5:táng 0x3CA6:hàn 0x3CA7:sào 0x3CA8:róng 0x3CAA:dēng 0x3CAB:pú 0x3CAC:jiāo 0x3CAD:tǎn 0x3CAF:rán 0x3CB0:níng 0x3CB1:liè 0x3CB2:dié 0x3CB3:dié,zhì 0x3CB4:zhòng 0x3CB6:lǜ 0x3CB7:dàn 0x3CB8:xī 0x3CB9:guǐ 0x3CBA:jí 0x3CBB:nì 0x3CBC:yì,chà 0x3CBD:niàn,rěn 0x3CBE:yǔ 0x3CBF:wǎng 0x3CC0:guò 0x3CC1:zè 0x3CC2:yán,yàn 0x3CC3:cuì 0x3CC4:xián 0x3CC5:jiǎo 0x3CC6:tǒu 0x3CC7:fù 0x3CC8:pèi 0x3CCA:yōu,zhōng 0x3CCB:qiū 0x3CCC:yā 0x3CCD:bù 0x3CCE:biàn 0x3CCF:shì 0x3CD0:zhá 0x3CD1:yì 0x3CD2:biàn 0x3CD4:duì 0x3CD5:lán 0x3CD6:yī 0x3CD7:chài,chà 0x3CD8:chōng 0x3CD9:xuàn 0x3CDA:xù 0x3CDB:yú,yóu 0x3CDC:xiū 0x3CE0:tà 0x3CE1:guō 0x3CE5:lòng 0x3CE6:xiè 0x3CE7:chè,rè 0x3CE8:jiǎn 0x3CE9:tān 0x3CEA:pì 0x3CEB:zǎn 0x3CEC:xuán 0x3CED:xián 0x3CEE:niào 0x3CF4:mì 0x3CF5:jì 0x3CF6:nǒu,rǔ 0x3CF7:hū,mǐn,wěn,tuì 0x3CF8:huā 0x3CF9:wǎng,wāng 0x3CFA:yóu 0x3CFB:zé 0x3CFC:bì,yù 0x3CFD:mǐ 0x3CFE:qiāng 0x3CFF:xiè 0x3D00:fàn,fān 0x3D01:yì 0x3D02:tān 0x3D03:lèi 0x3D04:yǒng 0x3D06:jìn 0x3D07:shè,máng 0x3D08:yìn 0x3D09:jǐ 0x3D0B:sù 0x3D0E:nài 0x3D0F:wǎng 0x3D10:miàn,miǎn 0x3D11:sù 0x3D12:yì 0x3D13:shāi 0x3D14:xī,yì,sè 0x3D15:jí 0x3D16:luò 0x3D17:yōu 0x3D18:mào 0x3D19:zhǎ,zhá 0x3D1A:suì 0x3D1B:zhì 0x3D1C:biàn 0x3D1D:lí 0x3D25:qiào 0x3D26:guàn 0x3D27:xī 0x3D28:zhèn 0x3D29:yōng 0x3D2A:niè 0x3D2B:jùn,yá 0x3D2C:xiè 0x3D2D:yǎo 0x3D2E:xiè 0x3D2F:zhī 0x3D30:néng 0x3D32:sī 0x3D33:lǒng 0x3D34:chén 0x3D35:mì 0x3D36:què,hú 0x3D37:dān 0x3D38:shǎn 0x3D3C:sù 0x3D3D:xiè 0x3D3E:bó 0x3D3F:dǐng 0x3D40:zú 0x3D42:shù 0x3D43:shé 0x3D44:hàn,yù 0x3D45:tān,tàn 0x3D46:gǎo 0x3D4A:nà 0x3D4B:mì 0x3D4C:xún 0x3D4D:mèn 0x3D4E:jiàn 0x3D4F:cuǐ 0x3D50:jué 0x3D51:hè 0x3D52:fèi,pài,bì 0x3D53:shí 0x3D54:chě 0x3D55:shèn 0x3D56:nǜ 0x3D57:píng 0x3D58:màn 0x3D5D:yì 0x3D5E:chóu 0x3D60:kū 0x3D61:báo 0x3D62:léi 0x3D63:kě 0x3D64:shà 0x3D65:bì 0x3D66:suí 0x3D67:gé,yì 0x3D68:pì,bó 0x3D69:yì 0x3D6A:xián,yàn,yán 0x3D6B:nì 0x3D6C:yíng 0x3D6D:zhǔ 0x3D6E:chún 0x3D6F:féng 0x3D70:xù 0x3D71:piǎo 0x3D72:wǔ 0x3D73:liáo 0x3D74:cáng 0x3D75:zòu,jù 0x3D76:zuō 0x3D77:biàn 0x3D78:yào 0x3D79:huán,mò 0x3D7A:pài 0x3D7B:xiū 0x3D7D:lěi 0x3D7E:qìng,jìng 0x3D7F:xiào 0x3D80:jiāo 0x3D81:guó,huò 0x3D84:yán 0x3D85:xué 0x3D86:zhū,chú 0x3D87:héng 0x3D88:yíng 0x3D89:xī 0x3D8C:lián 0x3D8D:xiǎn 0x3D8E:huán 0x3D8F:yīn 0x3D91:liàn 0x3D92:shǎn,shěn,tàn 0x3D93:cáng 0x3D94:bèi 0x3D95:jiǎn 0x3D96:shù 0x3D97:fàn,fán 0x3D98:diàn 0x3D9A:bà 0x3D9B:yú 0x3D9E:nǎng 0x3D9F:lěi 0x3DA0:yì 0x3DA1:dài,huǒ 0x3DA3:chán,yín 0x3DA4:chǎo 0x3DA5:gān 0x3DA6:jìn 0x3DA7:nèn 0x3DAB:liǎo 0x3DAC:mò 0x3DAD:yǒu 0x3DAF:liù 0x3DB0:hán 0x3DB2:yòng 0x3DB3:jìn 0x3DB4:chǐ 0x3DB5:rèn 0x3DB6:nóng 0x3DB9:hòng 0x3DBA:tiàn 0x3DBC:āi,xī 0x3DBD:guā 0x3DBE:biāo 0x3DBF:bó 0x3DC0:qióng 0x3DC2:shù 0x3DC3:chuǐ 0x3DC4:huǐ 0x3DC5:chǎo 0x3DC6:fù 0x3DC7:huī,guài 0x3DC8:è 0x3DC9:wèi 0x3DCA:fén 0x3DCB:tán 0x3DCD:lún 0x3DCE:hè 0x3DCF:yǒng 0x3DD0:huǐ 0x3DD2:yú 0x3DD3:zǒng 0x3DD4:yàn 0x3DD5:qiú 0x3DD6:zhào 0x3DD7:jiǒng 0x3DD8:tái 0x3DDF:tuì 0x3DE0:lín 0x3DE1:jiǒng 0x3DE2:zhǎ 0x3DE3:xīng 0x3DE4:hù,xuè 0x3DE6:xù 0x3DEA:cuì 0x3DEB:qǐng 0x3DEC:mò 0x3DEE:zāo 0x3DEF:bèng 0x3DF0:chī,lí 0x3DF3:yàn 0x3DF4:gé 0x3DF5:mò 0x3DF6:bèi 0x3DF7:juǎn 0x3DF8:dié 0x3DF9:zhào,shào 0x3DFB:wú 0x3DFC:yàn 0x3DFE:jué 0x3DFF:xiān 0x3E00:tái 0x3E01:hǎn 0x3E03:diǎn 0x3E04:jì 0x3E05:jié,jí 0x3E06:kào 0x3E07:zuǎn 0x3E09:xiè 0x3E0A:lài,là 0x3E0B:fán 0x3E0C:huò 0x3E0D:xì 0x3E0E:niè 0x3E0F:mí 0x3E10:rán 0x3E11:cuàn 0x3E12:yín,jīng 0x3E13:mì 0x3E15:jué 0x3E16:qū 0x3E17:tóng 0x3E18:wàn 0x3E19:zhē 0x3E1A:lǐ,lì 0x3E1B:sháo 0x3E1C:kòng 0x3E1D:xiān,kǎn 0x3E1E:zhé 0x3E1F:zhī 0x3E20:tiǎo 0x3E21:shū 0x3E22:bèi 0x3E23:yè 0x3E24:piàn 0x3E25:chàn 0x3E26:hù,jià 0x3E27:kèn 0x3E28:jiū 0x3E29:ān 0x3E2A:chún 0x3E2B:qián 0x3E2C:bèi 0x3E2D:bā 0x3E2E:fén 0x3E2F:kē 0x3E30:tuó 0x3E31:tuó 0x3E32:zuó 0x3E33:líng 0x3E35:guǐ 0x3E36:yān 0x3E37:shì 0x3E38:hǒu,ǒu,kǒu 0x3E39:liè,luō 0x3E3A:shā 0x3E3B:sì 0x3E3D:bèi 0x3E3E:rèn 0x3E3F:dú 0x3E40:bó 0x3E41:liáng 0x3E42:qiǎn 0x3E43:fèi 0x3E44:jì 0x3E45:zǒng 0x3E46:huī 0x3E47:hé,jiān 0x3E48:lí 0x3E49:yuán,wán 0x3E4A:yuè 0x3E4B:xiū 0x3E4C:chǎn,shèng 0x3E4D:dí 0x3E4E:léi 0x3E4F:jǐn 0x3E50:chóng 0x3E51:sì 0x3E52:pǔ 0x3E53:yǎo 0x3E54:jiāng 0x3E55:huān 0x3E56:huàn 0x3E57:tāo 0x3E58:rù 0x3E59:wěng 0x3E5A:yíng 0x3E5B:ráo 0x3E5C:yín 0x3E5D:shì 0x3E5E:yín,yǐn,yá 0x3E5F:jué,kuài 0x3E60:tún 0x3E61:xuán 0x3E62:jiā,gā 0x3E63:zhōng 0x3E64:qiè 0x3E65:zhù 0x3E66:diāo 0x3E68:yòu 0x3E6B:yí 0x3E6C:shǐ 0x3E6D:yì 0x3E6E:mò 0x3E71:què 0x3E72:xiāo,xiào 0x3E73:wú 0x3E74:gēng 0x3E75:yǐng 0x3E76:tíng 0x3E77:shǐ 0x3E78:ní 0x3E79:gēng 0x3E7A:tà 0x3E7B:wō,wēi 0x3E7C:jú 0x3E7D:chǎn 0x3E7E:piǎo,jiào 0x3E7F:zhuó,zhào 0x3E80:hū,náo 0x3E81:nǎo 0x3E82:yán,gǎn 0x3E83:gǒu 0x3E84:yǔ,yú 0x3E85:hóu 0x3E87:sī 0x3E88:chī 0x3E89:hù 0x3E8A:yàng 0x3E8B:wēng 0x3E8C:xiàn 0x3E8D:pín 0x3E8E:róng 0x3E8F:lóu 0x3E90:lǎo,sāo 0x3E91:shān,shàn,sāo,shǎn 0x3E92:xiāo,nǎo,qiāo,xiào 0x3E93:zé 0x3E94:hài,huī 0x3E95:fán,biàn 0x3E96:hǎn 0x3E97:chān 0x3E98:zhàn 0x3E9A:tǎ 0x3E9B:zhù 0x3E9C:nóng 0x3E9D:hàn 0x3E9E:yú 0x3E9F:zhuó 0x3EA0:yòu 0x3EA1:lì 0x3EA2:huò,huō 0x3EA3:xī 0x3EA4:xiān 0x3EA5:chán 0x3EA6:lián 0x3EA8:sī 0x3EA9:jiù,qiú 0x3EAA:pú 0x3EAB:qiú 0x3EAC:gǒng 0x3EAD:zǐ 0x3EAE:yú 0x3EB1:réng 0x3EB2:niǔ 0x3EB3:méi 0x3EB4:bā 0x3EB5:jiú 0x3EB7:xù 0x3EB8:píng 0x3EB9:biàn 0x3EBA:mào 0x3EBF:yí 0x3EC0:yú 0x3EC2:píng 0x3EC3:qū 0x3EC4:bǎo 0x3EC5:huì 0x3EC9:bù 0x3ECA:máng 0x3ECB:là 0x3ECC:tú 0x3ECD:wú 0x3ECE:lì 0x3ECF:líng 0x3ED1:jì 0x3ED2:jùn 0x3ED3:zōu 0x3ED4:duǒ 0x3ED5:jué 0x3ED6:dài 0x3ED7:bèi 0x3EDD:là 0x3EDE:bīn,bān 0x3EDF:suí 0x3EE0:tú 0x3EE1:xuē,dié 0x3EE7:duò 0x3EEA:suì 0x3EEB:bì 0x3EEC:tū 0x3EED:sè 0x3EEE:càn 0x3EEF:tú 0x3EF0:miǎn 0x3EF1:jīn 0x3EF2:lǚ 0x3EF5:zhàn 0x3EF6:bǐ 0x3EF7:jí 0x3EF8:zēn 0x3EF9:xuān 0x3EFA:lì 0x3EFD:suì,xuán 0x3EFE:yōng 0x3EFF:shǔ 0x3F02:é 0x3F07:qióng 0x3F08:luó 0x3F09:zhèn 0x3F0A:tún 0x3F0B:gū,rǔ 0x3F0C:yǔ 0x3F0D:lěi 0x3F0E:bó 0x3F0F:něi 0x3F10:pián 0x3F11:liàn 0x3F12:tǎng 0x3F13:lián 0x3F14:wēn 0x3F15:dāng 0x3F16:lì 0x3F17:tíng 0x3F18:wǎ 0x3F19:zhòu 0x3F1A:gāng 0x3F1B:xíng 0x3F1C:àng 0x3F1D:fàn 0x3F1E:pèng,bèng 0x3F1F:bó 0x3F20:tuó 0x3F21:shū 0x3F22:yí 0x3F23:bó 0x3F24:qiè 0x3F25:tǒu,kǎo 0x3F26:gǒng 0x3F27:tóng 0x3F28:hán 0x3F29:chéng,shèng 0x3F2A:jié 0x3F2B:huàn,huà 0x3F2C:xìng 0x3F2D:diàn 0x3F2E:chāi,qì 0x3F2F:dòng 0x3F30:pí 0x3F31:ruǎn,jùn 0x3F32:liè 0x3F33:shěng 0x3F34:ǒu 0x3F35:dì 0x3F36:yú 0x3F37:chuán,zhuān 0x3F38:róng 0x3F39:kāng,huāng 0x3F3A:táng 0x3F3B:cóng 0x3F3C:piáo 0x3F3D:chuǎng,shuǎng 0x3F3E:lù 0x3F3F:tóng,zhòng 0x3F40:zhèng 0x3F41:lì 0x3F42:sà 0x3F43:pān 0x3F44:sī 0x3F46:dāng 0x3F47:hú 0x3F48:yì 0x3F49:xiàn 0x3F4A:xiè 0x3F4B:luó 0x3F4C:liù 0x3F4E:tán,xīn 0x3F4F:gàn 0x3F51:tán 0x3F55:yóu 0x3F56:nán 0x3F58:gǎng 0x3F59:jùn 0x3F5A:chì 0x3F5B:gōu,qú 0x3F5C:wǎn 0x3F5D:lì 0x3F5E:liú 0x3F5F:liè 0x3F60:xiá 0x3F61:bēi 0x3F62:ǎn 0x3F63:yù 0x3F64:jú 0x3F65:róu 0x3F66:xún 0x3F67:zī 0x3F68:cuó 0x3F69:càn 0x3F6A:zěng 0x3F6B:yōng 0x3F6C:fù,pì 0x3F6D:ruǎn 0x3F6F:xí 0x3F70:shù 0x3F71:jiǎo,jiū,niú 0x3F72:jiǎo,xiǔ 0x3F73:xū 0x3F74:zhàng 0x3F77:shuì 0x3F78:chén 0x3F79:fǎn,fàn 0x3F7A:jí 0x3F7B:zhī 0x3F7D:gù 0x3F7E:wù 0x3F80:qiè,qǔ 0x3F81:shù 0x3F82:hāi 0x3F83:tuó 0x3F84:dú,chóu 0x3F85:zǐ 0x3F86:rán 0x3F87:mù 0x3F88:fù 0x3F89:líng 0x3F8A:jí,cì,sè 0x3F8B:xiū,xiù 0x3F8C:xuǎn 0x3F8D:nái 0x3F8E:yā,xiā 0x3F8F:jiè,yá 0x3F90:lì 0x3F91:dá,hè,da 0x3F92:rú,rù 0x3F93:yuān 0x3F94:lǚ 0x3F95:shěn 0x3F96:lǐ 0x3F97:liàng 0x3F98:gěng 0x3F99:xìn,xì 0x3F9A:xiē 0x3F9B:qǐn 0x3F9C:qiè 0x3F9D:chè 0x3F9E:yóu 0x3F9F:bù 0x3FA0:kuáng 0x3FA1:què 0x3FA2:ài 0x3FA3:qīn 0x3FA4:qiāng 0x3FA5:chù 0x3FA6:pèi,pēi 0x3FA7:kuò,luǒ 0x3FA8:yī,qǐ,ǎi 0x3FA9:guāi 0x3FAA:shěng 0x3FAB:piān 0x3FAD:zhòu 0x3FAE:huáng 0x3FAF:huī,tuí 0x3FB0:hú 0x3FB1:bèi 0x3FB4:zhā 0x3FB5:jì 0x3FB6:gǔ 0x3FB7:xī 0x3FB8:gǎo 0x3FB9:chái,zhài,chí 0x3FBA:mà 0x3FBB:zhù,chú 0x3FBC:tuǐ 0x3FBD:zhuì,tuí 0x3FBE:xiān,lián 0x3FBF:láng 0x3FC3:zhì,dài 0x3FC4:ài 0x3FC5:xiǎn 0x3FC6:guō 0x3FC7:xí,xì 0x3FC9:tuǐ 0x3FCA:cǎn 0x3FCB:sào 0x3FCC:xiān 0x3FCD:jiè 0x3FCE:fèn,fén 0x3FCF:qún 0x3FD1:yào 0x3FD2:dǎo,zhòu,chóu 0x3FD3:jiá 0x3FD4:lěi 0x3FD5:yán 0x3FD6:lú,lù 0x3FD7:tuí 0x3FD8:yíng 0x3FD9:pì 0x3FDA:luò 0x3FDB:lì 0x3FDC:biě 0x3FDE:mào 0x3FDF:bái 0x3FE0:huàng 0x3FE2:yào 0x3FE3:hē 0x3FE4:chǔn 0x3FE5:hé 0x3FE6:nìng 0x3FE7:chóu 0x3FE8:lì 0x3FE9:tǎng 0x3FEA:huán 0x3FEB:bì 0x3FEC:bā 0x3FED:chè,lè 0x3FEE:yàng 0x3FEF:dá 0x3FF0:áo,bì 0x3FF1:xué 0x3FF3:zī 0x3FF4:dā 0x3FF5:rǎn 0x3FF6:bāng 0x3FF7:cuó,cāo 0x3FF8:wǎn,mán 0x3FF9:tà 0x3FFA:báo 0x3FFB:gān 0x3FFC:yán 0x3FFD:xī 0x3FFE:zhù 0x3FFF:yǎ 0x4000:fàn 0x4001:yòu 0x4002:ān 0x4003:tuí 0x4004:méng 0x4005:shè 0x4006:jìn 0x4007:gǔ 0x4008:jì 0x4009:qiáo 0x400A:jiǎo 0x400B:yán 0x400C:xì 0x400D:kàn 0x400E:miǎn 0x400F:xuàn,xún 0x4010:shān 0x4011:wò 0x4012:qiān 0x4013:huàn 0x4014:rèn 0x4015:zhèn 0x4016:tiān 0x4017:jué,xuè 0x4018:xié,jī 0x4019:qì 0x401A:áng 0x401B:mèi,wù,mà 0x401C:gǔ 0x401E:tāo 0x401F:fán 0x4020:jù 0x4021:chàn,diān,tàn 0x4022:shùn 0x4023:bì,mà 0x4024:mào 0x4025:shuò 0x4026:gǔ 0x4027:hǒng 0x4028:huà,guā 0x4029:luò 0x402A:háng 0x402B:jiá,tǔn 0x402C:quán 0x402D:gāi 0x402E:huāng 0x402F:bǔ 0x4030:gǔ 0x4031:fēng 0x4032:mù 0x4033:ài 0x4034:yǐng,yà,kēng 0x4035:shùn 0x4036:liàng,lǎng 0x4037:jié 0x4038:chì 0x4039:jié,zhǎ,shè,jiá,yà 0x403A:chōu,tāo 0x403B:pìng 0x403C:chēn,rèn 0x403D:yán 0x403E:dǔ 0x403F:dì 0x4041:liàng 0x4042:xiàn 0x4043:biāo 0x4044:xìng 0x4045:měng,mèng 0x4046:yè 0x4047:mì 0x4048:qì 0x4049:qì 0x404A:wò 0x404B:xiè,zhé 0x404C:yù 0x404D:qià,kān 0x404E:chéng,tíng,chēng 0x404F:yǎo 0x4050:yīng,yìng 0x4051:yáng 0x4052:jí,zí 0x4053:zōng,zǒng,jiè 0x4054:xuān,hàn 0x4055:mín 0x4056:lōu 0x4057:kǎi 0x4058:yǎo 0x4059:yǎn 0x405A:sǔn,qióng 0x405B:guì 0x405C:huàng,huǎng 0x405D:yíng,yǐng 0x405E:shěng 0x405F:chá 0x4060:lián 0x4062:xuán 0x4063:chuán 0x4064:chè,zhé,huǐ 0x4065:nì 0x4066:qù 0x4067:miáo 0x4068:huò 0x4069:yú 0x406A:zhǎn 0x406B:hú,méng 0x406C:céng 0x406D:biāo 0x406E:qián 0x406F:xī,xié 0x4070:jiǎng 0x4071:kōu 0x4072:mái 0x4073:mǎng 0x4074:zhǎn,shǎn 0x4075:biǎn,huán 0x4076:jī,jiǎo 0x4077:jué,wù 0x4078:náng,nǒng 0x4079:bì 0x407A:shì,yì 0x407B:shuò,lì 0x407C:mò 0x407D:liè 0x407E:miè 0x407F:mò 0x4080:xī 0x4081:chán 0x4082:qú 0x4083:jiào 0x4084:huò 0x4085:xiān 0x4086:xù 0x4087:niǔ 0x4088:tóng 0x4089:hóu 0x408A:yù 0x408C:chōng 0x408D:bó 0x408E:zuǎn,cuān 0x408F:diāo 0x4090:zhuō 0x4091:jī 0x4092:qià 0x4094:xìng 0x4095:huì 0x4096:shí 0x4097:kū 0x4099:duī 0x409A:yáo 0x409B:yú 0x409C:bàng 0x409D:jié 0x409E:zhè 0x409F:jiā 0x40A0:shǐ 0x40A1:dǐ 0x40A2:dǒng 0x40A3:cí 0x40A4:fù 0x40A5:mín 0x40A6:zhēn,zhěn 0x40A7:zhěn 0x40A9:yàn,qìng 0x40AA:qiǎo,diào 0x40AB:hāng,hóng 0x40AC:gǒng 0x40AD:qiāo 0x40AE:lüè 0x40AF:guài 0x40B0:là 0x40B1:ruì 0x40B2:fǎ 0x40B3:cuǒ,chǎ 0x40B4:yán 0x40B5:gōng 0x40B6:jié 0x40B7:guāi 0x40B8:guó 0x40B9:suǒ 0x40BA:wǒ,kē 0x40BB:zhèng 0x40BC:niè 0x40BD:diào 0x40BE:lǎi 0x40BF:tà 0x40C0:cuì 0x40C1:yā 0x40C2:gǔn 0x40C5:dī 0x40C7:mián 0x40C8:jiē 0x40C9:mín 0x40CA:jǔ 0x40CB:yú 0x40CC:zhēn,yīn 0x40CD:zhào 0x40CE:zhà,zhǎ 0x40CF:xīng 0x40D1:bān,pán 0x40D2:hé 0x40D3:gòu,gōu 0x40D4:hóng,qióng 0x40D5:láo,luò 0x40D6:wù 0x40D7:bō,zhuó 0x40D8:kēng 0x40D9:lù 0x40DA:cù,zú 0x40DB:lián 0x40DC:yī 0x40DD:qiào 0x40DE:shú 0x40E0:xuàn 0x40E1:jīn,qín 0x40E2:qīn 0x40E3:huǐ 0x40E4:sù 0x40E5:chuáng 0x40E6:dūn 0x40E7:lóng 0x40E9:náo 0x40EA:tán 0x40EB:dǎn 0x40EC:wěi,kuǐ,lěi 0x40ED:gǎn 0x40EE:dá 0x40EF:lì 0x40F0:cā 0x40F1:xiàn 0x40F2:pán 0x40F3:là,liè 0x40F4:zhū 0x40F5:niǎo 0x40F6:huái,guī,guài 0x40F7:yíng 0x40F8:xiàn,jīn 0x40F9:làn 0x40FA:mó 0x40FB:bà 0x40FD:guǐ,zhī,fú 0x40FE:bǐ 0x40FF:fū 0x4100:huò 0x4101:yì 0x4102:liù 0x4104:yīn 0x4105:juàn 0x4106:huó,huàn 0x4107:chéng 0x4108:dòu,xiáng 0x4109:é 0x410B:yǎn,yàn 0x410C:zhuì,chuò 0x410D:zhà 0x410E:qǐ 0x410F:yú 0x4110:quàn 0x4111:huó 0x4112:niè 0x4113:huáng 0x4114:jǔ 0x4115:shè 0x4118:péng 0x4119:míng 0x411A:cáo 0x411B:lóu 0x411C:lí,chī 0x411D:chuāng 0x411F:cuī 0x4120:shàn 0x4121:dān 0x4122:qí 0x4124:lài,lǎn 0x4125:líng 0x4126:liǎo 0x4127:réng 0x4128:yú 0x4129:yì 0x412A:diǎo 0x412B:qǐ 0x412C:yí 0x412D:nián 0x412E:fū 0x412F:jiǎn 0x4130:yá 0x4131:fāng 0x4132:ruì 0x4133:xiān 0x4136:bì,bó 0x4137:shí 0x4138:pò 0x4139:nián 0x413A:zhì,tí 0x413B:táo,cháo,tiāo 0x413C:tiǎn 0x413D:tiǎn 0x413E:rù,rǒng 0x413F:yì 0x4140:liè 0x4141:àn 0x4142:hé 0x4143:qióng,jiòng 0x4144:lì 0x4145:guī,wā 0x4146:zì 0x4147:sù 0x4148:yuàn 0x4149:yà 0x414A:chá 0x414B:wǎn 0x414C:juān 0x414D:tǐng 0x414E:yǒu 0x414F:huì 0x4150:jiǎn 0x4151:ruí 0x4152:máng 0x4153:jǔ 0x4154:zī 0x4155:jū 0x4156:ān,ǎn,yān,yǎn,yè 0x4157:suì 0x4158:lái 0x4159:hùn 0x415A:quǎn 0x415B:chāng 0x415C:duò,chuí,tuǒ 0x415D:kōng 0x415E:nè 0x415F:cǎn 0x4160:tí 0x4161:xǔ 0x4162:jiù 0x4163:huáng 0x4164:qì 0x4165:jié,gé 0x4166:máo 0x4167:yān,yìn 0x4169:zhǐ,qí 0x416A:tuí 0x416C:ài 0x416D:páng 0x416E:càng 0x416F:táng 0x4170:ěn 0x4171:hùn 0x4172:qí 0x4173:chú,zōu 0x4174:suǒ 0x4175:zhuó 0x4176:nòu 0x4177:tú,chú 0x4178:shēn,zú 0x4179:lǒu 0x417A:biāo,miǎo 0x417B:lí 0x417C:mán,màn 0x417D:xīn,gǔ 0x417E:cén,qián 0x417F:huá,huáng 0x4180:měi 0x4181:gāo 0x4182:lián 0x4183:dào 0x4184:zhǎn 0x4185:zī 0x4188:zhì 0x4189:bà 0x418A:cuì,mèi 0x418B:qiū 0x418D:lóng 0x418E:xiān 0x418F:fèi,fèn 0x4190:guó 0x4191:chéng 0x4192:jiù 0x4193:è,ruǎn 0x4194:chōng 0x4195:yuè 0x4196:hóng 0x4197:yǎo 0x4198:yā,zā 0x4199:yáo 0x419A:tóng,dòng 0x419B:zhà 0x419C:yòu 0x419D:xuè,zhú 0x419E:yǎo 0x419F:kè,āo 0x41A0:huàn 0x41A1:láng 0x41A2:yuè 0x41A3:chén 0x41A6:shèn 0x41A8:níng 0x41A9:míng 0x41AA:hōng 0x41AB:chuāng 0x41AC:yǔn 0x41AD:xuān 0x41AE:jìn 0x41AF:zhuó 0x41B0:yū 0x41B1:tān 0x41B2:kāng 0x41B3:qióng 0x41B5:chéng 0x41B6:jiū 0x41B7:xuè 0x41B8:zhēng 0x41B9:chōng,tǒng 0x41BA:pān 0x41BB:qiào 0x41BD:qú 0x41BE:lán,làn 0x41BF:yì 0x41C0:róng 0x41C1:sī 0x41C2:qiān 0x41C3:sì 0x41C5:fá 0x41C7:méng 0x41C8:huà 0x41CB:hài 0x41CC:qiào 0x41CD:chù,qì 0x41CE:què 0x41CF:duì 0x41D0:lì 0x41D1:bà,pī 0x41D2:jiè 0x41D3:xū 0x41D4:luò,nuò 0x41D6:yǔn 0x41D7:zhōng 0x41D8:hù 0x41D9:yǐn 0x41DB:zhǐ 0x41DC:qiǎn,qiàn 0x41DE:gān,gǎn 0x41DF:jiàn 0x41E0:zhù 0x41E1:zhù 0x41E2:kǔ,gù 0x41E3:niè 0x41E4:ruì 0x41E5:zé 0x41E6:ǎng,yīng 0x41E7:zhì,jī 0x41E8:gòng,xiáng 0x41E9:yì,yè 0x41EA:chī 0x41EB:jī 0x41EC:zhū,shū,chuǎng 0x41ED:lǎo 0x41EE:rèn 0x41EF:róng 0x41F0:zhēng 0x41F1:nà 0x41F2:cè,jiā 0x41F5:yí 0x41F6:jué,wò 0x41F7:bié 0x41F8:chéng,tīng 0x41F9:jùn 0x41FA:dòu 0x41FB:wěi 0x41FC:yì 0x41FD:zhé,zhì 0x41FE:yán 0x4200:sān 0x4201:lún 0x4202:píng 0x4203:zhǎo 0x4204:hán 0x4205:yù 0x4206:dài 0x4207:zhào 0x4208:féi,bā 0x4209:shà,qiè 0x420A:líng 0x420B:tà 0x420C:qū 0x420D:máng,méng 0x420E:yè 0x420F:báo,fú 0x4210:guì 0x4211:guǎ 0x4212:nǎn,lǎn 0x4213:gé,qià 0x4215:shí,tí,jī,yí 0x4216:kē 0x4217:suǒ 0x4218:cí 0x4219:zhòu 0x421A:tái 0x421B:kuài 0x421C:qìn 0x421D:xū 0x421E:dǔ 0x421F:cè,zhá 0x4220:huǎn,yuàn 0x4221:cōng,sōng 0x4222:sǎi,xǐ 0x4223:zhèng 0x4224:qián 0x4225:jīn 0x4226:zōng 0x4227:wěi 0x422A:xì 0x422B:nà 0x422C:pú 0x422D:sōu,huái 0x422E:jù 0x422F:zhēn 0x4230:shāo 0x4231:tāo 0x4232:bān,pán 0x4233:tà 0x4234:qiàn 0x4235:wēng 0x4236:róng 0x4237:luò 0x4238:hú 0x4239:sǒu 0x423A:zhōng 0x423B:pú 0x423C:miè,mì 0x423D:jīn 0x423E:shāo,shuò 0x423F:mì 0x4240:shù 0x4241:líng 0x4242:lěi 0x4243:jiǎng 0x4244:léng 0x4245:zhì 0x4246:diǎo 0x4248:sǎn 0x4249:gū,hú 0x424A:fàn 0x424B:mèi 0x424C:suì 0x424D:jiǎn 0x424E:táng 0x424F:xiè 0x4250:kū 0x4251:wú 0x4252:fán 0x4253:luò 0x4254:cān 0x4255:céng 0x4256:líng 0x4257:yī 0x4258:cóng 0x4259:yún 0x425A:méng 0x425B:yù,ǎo 0x425C:zhì 0x425D:yǐ 0x425E:dǎn 0x425F:huò 0x4260:wéi 0x4261:tán 0x4262:sè 0x4263:xiè 0x4264:sǒu 0x4265:sǒng 0x4266:qiān 0x4267:liú,liǔ 0x4268:yì 0x426A:lèi 0x426B:lí 0x426C:fèi 0x426D:liè 0x426E:lìn 0x426F:xiàn 0x4270:xiào,jiǎo 0x4271:ōu 0x4272:mí 0x4273:xiān,xiǎn 0x4274:ráng 0x4275:zhuàn,zuǎn 0x4276:shuāng 0x4277:yán 0x4278:biàn 0x4279:líng 0x427A:hóng 0x427B:qí 0x427C:liào 0x427D:bǎn 0x427E:bì 0x427F:hú 0x4280:hú 0x4282:cè,sè 0x4283:pèi 0x4284:qióng 0x4285:míng 0x4286:jiù,qiǔ 0x4287:bù 0x4288:méi 0x4289:sǎn 0x428A:wèi 0x428D:lí 0x428E:quǎn,qún 0x4290:hún 0x4291:xiǎng 0x4293:shì 0x4294:yíng 0x4296:nǎn 0x4297:huáng 0x4298:jiù 0x4299:yān 0x429B:sà 0x429C:tuán 0x429D:xiè 0x429E:zhé,chè 0x429F:mén 0x42A0:xì 0x42A1:mán 0x42A3:huáng 0x42A4:tán,dàn 0x42A5:xiào 0x42A6:yè 0x42A7:bì 0x42A8:luó 0x42A9:fán 0x42AA:lì 0x42AB:cuǐ 0x42AC:chuā 0x42AD:dào,chóu 0x42AE:dí 0x42AF:kuàng 0x42B0:chú 0x42B1:xiān 0x42B2:chàn,chǎn 0x42B3:mí,mó 0x42B4:qiàn 0x42B5:qiú 0x42B6:zhèn 0x42BA:hù 0x42BB:gān 0x42BC:chǐ 0x42BD:guài,jué 0x42BE:mù 0x42BF:bó 0x42C0:huà 0x42C1:gěng 0x42C2:yáo 0x42C3:mào 0x42C4:wǎng 0x42C8:rú,nǎ 0x42C9:xué 0x42CA:zhēng 0x42CB:mín 0x42CC:jiǎng 0x42CE:zhàn 0x42CF:zuó,zhà 0x42D0:yuè 0x42D1:liè 0x42D3:zhòu 0x42D4:bì 0x42D5:rèn 0x42D6:yù 0x42D8:chuò 0x42D9:ěr 0x42DA:yì 0x42DB:mǐ 0x42DC:qìng 0x42DE:wǎng 0x42DF:jì 0x42E0:bǔ 0x42E2:biē 0x42E3:fán,pó 0x42E4:yuè 0x42E5:lí 0x42E6:fán 0x42E7:qú 0x42E8:fǔ 0x42E9:ér 0x42EA:ē 0x42EB:zhēng 0x42EC:tiān 0x42ED:yù 0x42EE:jìn 0x42EF:qǐ 0x42F0:jú 0x42F1:lái 0x42F2:chě 0x42F3:běi 0x42F4:niù 0x42F5:yì,yè 0x42F6:xǔ,xié 0x42F7:móu 0x42F8:xún 0x42F9:fú 0x42FB:nín 0x42FC:tīng,yíng 0x42FD:běng 0x42FE:zhǎ,nà 0x42FF:wēi 0x4300:kē 0x4301:yāo 0x4302:òu 0x4303:xiāo,shuò 0x4304:gěng 0x4305:táng 0x4306:guì 0x4307:huì 0x4308:tā,tà 0x430A:yáo 0x430B:dā 0x430C:qì 0x430D:jǐn 0x430E:lüè 0x430F:mì 0x4310:mì 0x4311:jiān 0x4312:lù 0x4313:fán 0x4314:ōu 0x4315:mí 0x4316:jié 0x4317:fǔ 0x4318:biè,bì 0x4319:huàng 0x431A:sū 0x431B:yáo 0x431C:niè 0x431D:jīn,jìn 0x431E:liǎn 0x431F:bó,bì 0x4320:jiān 0x4321:tǐ 0x4322:líng 0x4323:zuǎn 0x4324:shī,zhǐ 0x4325:yǐn 0x4326:dào 0x4327:chóu 0x4328:cā,cài 0x4329:miè 0x432A:yǎn 0x432B:lǎn 0x432C:chóng 0x432D:jiāo 0x432E:shuāng 0x432F:quān,quán,guàn 0x4330:niè 0x4331:luò 0x4333:shī 0x4334:luò 0x4335:zhú 0x4337:chōu,chóu 0x4338:juàn 0x4339:jiǒng 0x433A:ěr 0x433B:yì 0x433C:ruì 0x433D:cǎi 0x433E:rén 0x433F:fú 0x4340:lán 0x4341:suì 0x4342:yú 0x4343:yóu 0x4344:diǎn 0x4345:líng 0x4346:zhù 0x4347:tà 0x4348:píng 0x4349:zhǎi 0x434A:jiāo 0x434B:chuí 0x434C:bù 0x434D:kòu 0x434E:cùn,xiǎn 0x4350:hǎn 0x4351:hǎn 0x4352:mǒu 0x4353:hù 0x4354:gōng 0x4355:dī,dǐ 0x4356:fú 0x4357:xuàn 0x4358:mí 0x4359:méi,mǒu 0x435A:làng 0x435B:gù 0x435C:zhào 0x435D:tà 0x435E:yù 0x435F:zòng 0x4360:lí 0x4361:lù 0x4362:wú 0x4363:léi 0x4364:jǐ 0x4365:lì 0x4366:lí 0x4368:pō,fèi 0x4369:yǎng 0x436A:wà 0x436B:tuó 0x436C:pēng 0x436E:zhào 0x436F:guǐ 0x4371:xú 0x4372:nái 0x4373:què,jué,chuò 0x4374:wěi 0x4375:zhēng 0x4376:dōng 0x4377:wěi 0x4378:bó 0x437A:huàn 0x437B:xuàn 0x437C:zān,cán 0x437D:lì 0x437E:yǎn 0x437F:huáng 0x4380:xuè 0x4381:hú 0x4382:bǎo 0x4383:rǎn 0x4384:xiāo,tiáo 0x4385:pò 0x4386:liào 0x4387:zhōu 0x4388:yì 0x4389:xù 0x438A:luò,pò 0x438B:kào 0x438C:chù 0x438E:nà 0x438F:hán 0x4390:chǎo 0x4391:lù 0x4392:zhǎn 0x4393:tà 0x4394:fū 0x4395:hōng 0x4396:zēng 0x4397:qiáo 0x4398:sù 0x4399:pīn 0x439A:guàn 0x439C:hūn 0x439D:chú 0x439F:ér 0x43A0:ér,nuò 0x43A1:ruǎn 0x43A2:qǐ 0x43A3:sì 0x43A4:jú 0x43A6:yǎn 0x43A7:bàng,póu 0x43A8:yè,àn 0x43A9:zī 0x43AA:nè 0x43AB:chuàng 0x43AC:bà 0x43AD:cāo 0x43AE:tì 0x43AF:hàn,hǎn 0x43B0:zuó 0x43B1:bà,bēi 0x43B2:zhé 0x43B3:wà 0x43B4:gēng,shèng 0x43B5:bì 0x43B6:èr 0x43B7:zhù 0x43B8:wù 0x43B9:wén 0x43BA:zhì 0x43BB:zhòu 0x43BC:lù 0x43BD:wén 0x43BE:gǔn 0x43BF:qiú 0x43C0:là 0x43C1:zǎi 0x43C2:sǒu 0x43C3:mián,míng 0x43C4:dǐ,zhì 0x43C5:qì 0x43C6:cáo 0x43C7:piào 0x43C8:lián,luán 0x43C9:shī 0x43CA:lóng 0x43CB:sù 0x43CC:qì,yì 0x43CD:yuàn,yuān 0x43CE:féng 0x43CF:xū 0x43D0:jué 0x43D1:dì 0x43D2:piàn,pàn 0x43D3:guǎn 0x43D4:niǔ,zhǒu,ròu,nǜ 0x43D5:rèn 0x43D6:zhèn,yǐn 0x43D7:gài 0x43D8:pì 0x43D9:tǎn,dàn,zhuàn 0x43DA:chǎo,miǎo 0x43DB:chǔn 0x43DC:hē 0x43DD:zhuān 0x43DE:mò 0x43DF:bié,bì 0x43E0:qì,lā 0x43E1:shì 0x43E2:bǐ 0x43E3:jué 0x43E4:sì 0x43E6:guā,tián 0x43E7:nà,ná,chǐ 0x43E8:huǐ,duī 0x43E9:xī 0x43EA:èr 0x43EB:xiū 0x43EC:móu 0x43EE:xí 0x43EF:zhì 0x43F0:rùn 0x43F1:jú 0x43F2:dié,tī 0x43F3:zhè 0x43F4:shào 0x43F5:měng,mǎng,máng 0x43F6:bì 0x43F7:hàn 0x43F8:yú 0x43F9:xiàn,chēn 0x43FA:pāng 0x43FB:néng 0x43FC:cán,zhàn 0x43FD:bù,péi 0x43FF:qǐ 0x4400:jì 0x4401:zhuó,dū 0x4402:lù 0x4403:jùn,zhūn 0x4404:xiàn,hàn 0x4405:xī 0x4406:cǎi 0x4407:wěn,chún 0x4408:zhí 0x4409:zì,nǎo 0x440A:kūn,hún,hùn 0x440B:cōng 0x440C:tiǎn 0x440D:chù 0x440E:dī 0x440F:chǔn,shǔn 0x4410:qiū 0x4411:zhé 0x4412:zhā 0x4413:róu 0x4414:bǐn,biàn 0x4415:jí 0x4416:xī 0x4417:zhū,dǔ 0x4418:jué 0x4419:gé 0x441A:jī 0x441B:dā 0x441C:chēn 0x441D:suò 0x441E:ruò 0x441F:xiǎng,gōu 0x4420:huǎng 0x4421:qí 0x4422:zhù,zhòu,chù 0x4423:sǔn 0x4424:chāi,cuó 0x4425:wěng 0x4426:kē 0x4427:kào,hè 0x4428:gǔ,què 0x4429:gāi,guī,kǎi 0x442A:fàn 0x442B:cōng 0x442C:cáo 0x442D:zhì,dì 0x442E:chǎn 0x442F:léi,lěi 0x4430:xiū 0x4431:zhài 0x4432:zhé 0x4433:yú 0x4434:guì 0x4435:gōng,huáng 0x4436:zān,jǐn,qián 0x4437:dān 0x4438:huò,guó 0x4439:sōu,sào,xiào 0x443A:tàn,tán 0x443B:gū 0x443C:xì 0x443D:mán 0x443E:duó 0x443F:ào,ǎo 0x4440:pì,pǐ 0x4441:wù 0x4442:ǎi 0x4443:méng 0x4444:pì,yì 0x4445:méng 0x4446:yǎng 0x4447:zhì 0x4448:bó 0x4449:yíng 0x444A:wéi,wèi 0x444B:rǎng 0x444C:lán,làn 0x444D:yān,yàn,yǐng 0x444E:chǎn 0x444F:quán,huān 0x4450:zhěn 0x4451:pú 0x4453:tái 0x4454:fèi 0x4455:shǔ 0x4457:dàng 0x4458:cuó 0x4459:tān,rán,tiàn 0x445A:tián 0x445B:chǐ 0x445C:tà,tiè 0x445D:jiǎ 0x445E:shùn 0x445F:huáng 0x4460:liǎo 0x4463:chēn 0x4464:jìn 0x4465:è,sà 0x4466:gōu 0x4467:fú 0x4468:duò 0x446A:è 0x446B:bēng 0x446C:tāo,yào,tiāo 0x446D:dì 0x446F:dì 0x4470:bù 0x4471:wǎn 0x4472:zhào 0x4473:lún 0x4474:qí 0x4475:mù 0x4476:qiàn 0x4478:zōng 0x4479:sōu,sāo 0x447B:yóu 0x447C:zhōu 0x447D:tà 0x447F:sù 0x4480:bù 0x4481:xí 0x4482:jiǎng 0x4483:cào 0x4484:fù 0x4485:téng 0x4486:chè 0x4487:fù 0x4488:fèi 0x4489:wǔ 0x448A:xī 0x448B:yǎng 0x448C:mìng 0x448D:pǎng 0x448E:mǎng 0x448F:sēng 0x4490:méng,mèng 0x4491:cǎo 0x4492:tiáo 0x4493:kǎi 0x4494:bài 0x4495:xiǎo 0x4496:xìn 0x4497:qì 0x449A:shǎo 0x449B:huàn 0x449C:niú 0x449D:xiáo 0x449E:chén,yín 0x449F:dān 0x44A0:fēng,xiá 0x44A1:yǐn 0x44A2:áng 0x44A3:rǎn 0x44A4:rì 0x44A5:mán 0x44A6:fàn 0x44A7:qū,qù 0x44A8:shǐ,sì 0x44A9:hé 0x44AA:biàn 0x44AB:dài 0x44AC:mò 0x44AD:děng 0x44B0:kuāng 0x44B2:chà 0x44B3:duǒ 0x44B4:yǒu 0x44B5:hào 0x44B7:guā 0x44B8:xuè 0x44B9:lèi 0x44BA:jǐn 0x44BB:qǐ 0x44BC:qū 0x44BD:wǎng 0x44BE:yī 0x44BF:liáo 0x44C2:yán 0x44C3:yì 0x44C4:yín 0x44C5:qí 0x44C6:zhé 0x44C7:xì,hè,kè 0x44C8:yì 0x44C9:yé,yē 0x44CA:wú,yú 0x44CB:zhī 0x44CC:zhì 0x44CD:hǎn 0x44CE:chuò 0x44CF:fū 0x44D0:chún 0x44D1:píng 0x44D2:kuǎi 0x44D3:chóu 0x44D5:tuǒ 0x44D6:qióng 0x44D7:cōng 0x44D8:gāo,jiù 0x44D9:kuā,guāi 0x44DA:qū,cú 0x44DB:qū 0x44DC:zhī 0x44DD:mèng 0x44DE:lì 0x44DF:zhōu,liè 0x44E0:tà 0x44E1:zhī 0x44E2:gù 0x44E3:liǎng 0x44E4:hū 0x44E5:là 0x44E6:diǎn 0x44E7:cì 0x44E8:yīng 0x44EB:qí 0x44EC:zhuó 0x44ED:chà 0x44EE:mào 0x44EF:dú 0x44F0:yīn 0x44F1:chái,zuī 0x44F2:ruì 0x44F3:hěn,xié 0x44F4:ruǎn 0x44F5:fū 0x44F6:lài 0x44F7:xìng 0x44F8:jiān 0x44F9:yì 0x44FA:měi 0x44FC:máng,hè 0x44FD:jì 0x44FE:suō 0x44FF:hàn 0x4501:lì 0x4502:zǐ,zǎi 0x4503:zǔ 0x4504:yáo,yào 0x4505:gē 0x4506:lí 0x4507:qǐ,ái 0x4508:gòng 0x4509:lì,suàn 0x450A:bīng 0x450B:suō 0x450E:sù 0x450F:chòu 0x4510:jiān 0x4511:xié,yé,tú 0x4512:bèi 0x4513:xǔ 0x4514:jìng 0x4515:pú 0x4516:líng 0x4517:xiáng 0x4518:zuò 0x4519:diào 0x451A:chún 0x451B:qǐng 0x451C:nán 0x451D:zhāi 0x451E:lǜ 0x451F:yí 0x4520:shǎo,shāo,shuò 0x4521:yú 0x4522:huá 0x4523:lí 0x4524:pā 0x4527:lí 0x452A:shuǎng 0x452C:yì 0x452D:nìng 0x452E:sī 0x452F:kù 0x4530:fù 0x4531:yī 0x4532:dēng,chéng 0x4533:rán 0x4534:cè,cuì,chuà 0x4536:tí,tái 0x4537:qín 0x4538:biǎo,biāo 0x4539:suì 0x453A:wéi,wěi 0x453B:dūn,duī 0x453C:sè,zé 0x453D:ài 0x453E:qì,è 0x453F:zǔn 0x4540:kuǎn 0x4541:fěi 0x4543:yìn 0x4545:sǎo 0x4546:dòu 0x4547:huì 0x4548:xiè 0x4549:zé 0x454A:tán 0x454B:táng 0x454C:zhì 0x454D:yì 0x454E:fú 0x454F:é 0x4551:jùn 0x4552:jiā 0x4553:chá,chuì 0x4554:xián 0x4555:màn 0x4557:bì 0x4558:líng,lǐng 0x4559:jié 0x455A:kuì 0x455B:jiá 0x455D:chēng 0x455E:làng 0x455F:xīng 0x4560:fèi 0x4561:lǘ 0x4562:zhǎ 0x4563:hé 0x4564:jī 0x4565:nǐ 0x4566:yíng 0x4567:xiào,jiǎo 0x4568:téng 0x4569:lǎo 0x456A:zé 0x456B:kuí 0x456D:qián,xián 0x456E:jú,qū 0x456F:piáo 0x4570:fán 0x4571:tóu 0x4572:lǐn 0x4573:mí 0x4574:zhuó 0x4575:xié 0x4576:hù 0x4577:mí 0x4578:jiē 0x4579:zá 0x457A:cóng 0x457B:lì 0x457C:rán 0x457D:zhú 0x457E:yín,yán 0x457F:hàn 0x4581:yì 0x4582:luán 0x4583:yuè,lǎ 0x4584:rán 0x4585:líng 0x4586:niàng 0x4587:yù 0x4588:nüè 0x458A:yì 0x458B:nüè 0x458C:yì 0x458D:qián 0x458E:xiá 0x458F:chǔ,chù 0x4590:yín 0x4591:mì 0x4592:xī 0x4593:nà 0x4594:kǎn,hàn 0x4595:zǔ 0x4596:xiá 0x4597:yán 0x4598:tú 0x4599:tī 0x459A:wū 0x459B:suǒ 0x459C:yín 0x459D:chóng 0x459E:zhǒu 0x459F:mǎng 0x45A0:yuán 0x45A1:nǜ 0x45A2:miáo 0x45A3:zǎo 0x45A4:wǎn 0x45A5:lí 0x45A6:qū,zhuō 0x45A7:nà 0x45A8:shí,zhì 0x45A9:bì 0x45AA:zī,cī 0x45AB:bàng 0x45AD:juàn,juān 0x45AE:xiǎng 0x45AF:kuí,wā 0x45B0:pài 0x45B1:kuāng 0x45B2:xún,zōng 0x45B3:zhà,zhé 0x45B4:yáo 0x45B5:kūn 0x45B6:huī 0x45B7:xī 0x45B8:é 0x45B9:yáng,mǐ 0x45BA:tiáo 0x45BB:yóu 0x45BC:jué 0x45BD:lí 0x45BF:lí 0x45C0:chēng 0x45C1:jì,qī 0x45C2:hǔ 0x45C3:zhàn 0x45C4:fǔ 0x45C5:cháng 0x45C6:guǎn,guān 0x45C7:jú,qū 0x45C8:méng 0x45C9:chāng 0x45CA:tàn 0x45CB:móu 0x45CC:xīng 0x45CD:lǐ,luó 0x45CE:yān 0x45CF:sōu 0x45D0:shī 0x45D1:yì 0x45D2:bìng 0x45D3:cōng 0x45D4:hóu,hòu 0x45D5:wǎn 0x45D6:dì 0x45D7:jī 0x45D8:gé 0x45D9:hán 0x45DA:bó 0x45DB:xiū 0x45DC:liú 0x45DD:cán 0x45DE:cán 0x45DF:yì 0x45E0:xuán 0x45E1:yán,yān 0x45E2:zǎo 0x45E3:hàn 0x45E4:yóng 0x45E5:zōng 0x45E7:kāng 0x45E8:yú 0x45E9:qī 0x45EA:zhè 0x45EB:má 0x45EE:shuǎng 0x45EF:jìn 0x45F0:guàn 0x45F1:pú,pù,pǔ 0x45F2:lìn 0x45F4:tíng 0x45F5:jiāng 0x45F6:là 0x45F7:yì 0x45F8:yōng 0x45F9:cì 0x45FA:yǎn,dàn 0x45FB:jié 0x45FC:xūn 0x45FD:wèi 0x45FE:xiǎn 0x45FF:níng,nǐng 0x4600:fù 0x4601:gé 0x4603:mò 0x4604:zhù 0x4605:nái 0x4606:xiǎn 0x4607:wén 0x4608:lì 0x4609:cán 0x460A:miè 0x460B:jiān 0x460C:nì 0x460D:chài 0x460E:wān 0x460F:xù 0x4610:nǜ 0x4611:mài 0x4612:zuī 0x4613:kàn 0x4614:kā 0x4615:háng 0x4618:yù,sù 0x4619:wèi 0x461A:zhú 0x461D:yì 0x461F:diāo 0x4620:fú 0x4621:bǐ 0x4622:zhǔ 0x4623:zǐ,zhì 0x4624:shù 0x4625:xiá,jiá 0x4626:ní,nǐ 0x4628:jiǎo 0x4629:xún,xuàn 0x462A:chōng 0x462B:nòu 0x462C:róng 0x462D:zhì 0x462E:sāng,sàng 0x4630:shān 0x4631:yù 0x4633:jīn 0x4635:lù 0x4636:hān,hàn 0x4637:biē 0x4638:yì 0x4639:zuì,cuì 0x463A:zhàn 0x463B:yù 0x463C:wǎn 0x463D:ní 0x463E:guǎn,guàn 0x463F:jué 0x4640:běng 0x4641:cán 0x4643:duò 0x4644:qì,zhǎ 0x4645:yāo,yào 0x4646:kuì 0x4647:ruán,nuǎn 0x4648:hóu 0x4649:xún 0x464A:xiè 0x464C:kuì 0x464E:xié,xì 0x464F:bó 0x4650:kè 0x4651:cuī 0x4652:xù 0x4653:bǎi 0x4654:ōu 0x4655:zǒng 0x4657:tì 0x4658:chǔ,zú 0x4659:chí 0x465A:niǎo 0x465B:guàn 0x465C:féng 0x465D:xiè 0x465E:dēng 0x465F:wéi 0x4660:jué 0x4661:kuì,huì 0x4662:zèng 0x4663:sà 0x4664:duǒ 0x4665:líng 0x4666:méng 0x4668:guǒ 0x4669:méng 0x466A:lóng 0x466C:yìng 0x466E:guàn 0x466F:cù 0x4670:lí 0x4671:dú 0x4673:biāo,è 0x4675:xī 0x4677:dé 0x4678:dé 0x4679:xiàn 0x467A:lián 0x467C:shào,jiāo 0x467D:xié 0x467E:shī 0x467F:wèi 0x4682:hè 0x4683:yóu 0x4684:lù 0x4685:lài,lái 0x4686:yǐng 0x4687:shěng 0x4688:juàn 0x4689:qì 0x468A:jiǎn 0x468B:yùn 0x468D:qì 0x468F:lìn 0x4690:jí 0x4691:mái 0x4692:chuáng,zhuàng 0x4693:niǎn 0x4694:bīn 0x4695:lì 0x4696:líng 0x4697:gāng 0x4698:chéng 0x4699:xuān,xī 0x469A:xiǎn 0x469B:hú 0x469C:bī,bēi 0x469D:zú 0x469E:dǎi 0x469F:dǎi 0x46A0:hùn,hún 0x46A1:sāi 0x46A2:chè 0x46A3:tí 0x46A5:nuò,ruò 0x46A6:zhì 0x46A7:liú 0x46A8:fèi 0x46A9:jiǎo,jiào,qiáo 0x46AA:guān 0x46AB:xí,áo 0x46AC:lín 0x46AD:xuān 0x46AE:réng 0x46AF:tǎo,xuān 0x46B0:pǐ,é 0x46B1:xìn 0x46B2:shàn 0x46B3:zhì 0x46B4:wà 0x46B5:tǒu 0x46B6:tiān 0x46B7:yī,yǐ,xì 0x46B8:xiè 0x46B9:pǐ 0x46BA:yáo 0x46BB:yáo,yóu 0x46BC:nǜ 0x46BD:hào 0x46BE:rén,nín 0x46BF:yìn,xī 0x46C0:fǎn,fàn,bàn 0x46C1:nán 0x46C2:yāo 0x46C3:wàn 0x46C4:yuǎn 0x46C5:xiá 0x46C6:zhòu 0x46C7:yuǎn 0x46C8:shì 0x46C9:miàn 0x46CA:xī,zhī 0x46CB:jì 0x46CC:táo,páo 0x46CD:fèi 0x46CE:xuè 0x46CF:ní,nǐ,nì 0x46D0:cí 0x46D1:mì 0x46D2:biàn 0x46D4:ná 0x46D5:yù 0x46D6:è 0x46D7:zhǐ 0x46D8:rén,nín 0x46D9:xù 0x46DA:lüè 0x46DB:huì 0x46DC:xùn 0x46DD:náo 0x46DE:hàn 0x46DF:jiá 0x46E0:dòu 0x46E1:huà 0x46E2:tū 0x46E3:pīng,chōu 0x46E4:cù 0x46E5:xī,xì,xīn 0x46E6:sòng 0x46E7:mí 0x46E8:xìn 0x46E9:wù,qià,è 0x46EA:qióng 0x46EB:zhāng,zhèng 0x46EC:táo 0x46ED:xìng 0x46EE:jiù 0x46EF:jù 0x46F0:hùn 0x46F1:tí 0x46F2:mán 0x46F3:yàn,yān 0x46F4:jī,qǐ 0x46F5:shòu 0x46F6:lěi 0x46F7:wǎn 0x46F8:chè 0x46F9:càn,xuàn 0x46FA:jiè 0x46FB:yòu 0x46FC:huǐ 0x46FD:zhǎ,chā,sà 0x46FE:sù 0x46FF:gé 0x4700:nǎo 0x4701:xì 0x4703:duī 0x4704:chí 0x4705:wéi,chuī 0x4706:zhé,niè,mò 0x4707:gǔn,gùn 0x4708:chāo,zhāo 0x4709:chī 0x470A:zāo,zào 0x470B:huì 0x470C:luán 0x470D:liáo 0x470E:láo,lào 0x470F:tuō 0x4710:huī 0x4711:wù 0x4712:ào 0x4713:shè 0x4714:suí 0x4715:mài,hài 0x4716:tàn 0x4717:xìn,hàn 0x4718:jǐng 0x4719:án,è 0x471A:tà 0x471B:chán 0x471C:wèi 0x471D:tuǎn 0x471E:jì 0x471F:chén 0x4720:chè 0x4721:yù 0x4722:xiǎn 0x4723:xīn 0x4727:nǎo 0x4729:yàn 0x472A:qiú 0x472B:jiāng,hóng 0x472C:sǒng 0x472D:jùn,ruì 0x472E:liáo,láo 0x472F:jú 0x4731:mǎn 0x4732:liè 0x4734:chù,shì 0x4735:chǐ 0x4736:xiáng 0x4737:qīn 0x4738:měi,méi 0x4739:shù 0x473A:chǎi,cè 0x473B:chǐ 0x473C:gú,móu 0x473D:yú 0x473E:yīn 0x4740:liú,liáo 0x4741:láo 0x4742:shù 0x4743:zhé 0x4744:shuāng 0x4745:huī 0x4748:è 0x474A:shà 0x474B:zòng 0x474C:jué 0x474D:jùn,jūn 0x474E:tuān 0x474F:lóu 0x4750:wéi,duò 0x4751:chōng 0x4752:zhù 0x4753:liè 0x4755:zhé 0x4756:zhǎo 0x4758:yì 0x4759:chū 0x475A:ní 0x475B:bō 0x475C:suān 0x475D:yǐ 0x475E:hào 0x475F:yà 0x4760:huán 0x4761:màn 0x4762:màn 0x4763:qú 0x4764:lǎo,liáo 0x4765:háo 0x4766:zhōng 0x4767:mín 0x4768:xián 0x4769:zhèn 0x476A:shǔ 0x476B:zuó 0x476C:zhù 0x476D:gòu 0x476E:xuàn 0x476F:yì 0x4770:zhì 0x4771:xié 0x4772:jìn 0x4773:cán,hài 0x4775:bù 0x4776:liáng 0x4777:zhī,zhì 0x4778:jì 0x4779:wǎn 0x477A:guàn 0x477B:jū 0x477C:jìng,qíng 0x477D:ài 0x477E:fù 0x477F:guì 0x4780:hòu 0x4781:yàn 0x4782:ruǎn 0x4783:zhì 0x4784:biào 0x4785:yí 0x4786:suǒ 0x4787:dié 0x4788:guì 0x4789:shèng 0x478A:xùn 0x478B:chèn 0x478C:shé 0x478D:qíng 0x4790:chǔn 0x4791:hóng 0x4792:dòng 0x4793:chēng 0x4794:wěi 0x4795:rú,yú 0x4796:shǔ 0x4797:cāi,chāi 0x4798:jí 0x4799:zá 0x479A:qí,kuí 0x479B:yān 0x479C:fù 0x479D:yù 0x479E:fú 0x479F:pò 0x47A0:zhī 0x47A1:tǎn 0x47A2:zuó 0x47A3:chě,chè,qiè 0x47A4:qú,fǔ,qǔ 0x47A5:yòu 0x47A6:hé 0x47A7:hòu 0x47A8:guǐ 0x47A9:è,xiá 0x47AA:jiàng 0x47AB:yǔn 0x47AC:tòu 0x47AD:cūn,qiǔ 0x47AE:tū 0x47AF:fù,fú 0x47B0:zuó 0x47B1:hú 0x47B3:bó 0x47B4:zhāo 0x47B5:juě,zhuò 0x47B6:tāng,tàng 0x47B7:jué 0x47B8:fù 0x47B9:huáng 0x47BA:chūn 0x47BB:yǒng 0x47BC:chuǐ 0x47BD:suǒ 0x47BE:chí,dì 0x47BF:qiān 0x47C0:cāi 0x47C1:xiāo,chāo 0x47C2:mán 0x47C3:cān,cà 0x47C4:qì,zuó,zè 0x47C5:jiàn,zàn 0x47C6:bì 0x47C7:jī,xī 0x47C8:zhí 0x47C9:zhú,shǔ 0x47CA:qú 0x47CB:zhǎn 0x47CC:jí 0x47CD:biān,dián 0x47CF:lì 0x47D0:lì 0x47D1:yuè 0x47D2:quán 0x47D3:chēng,zhēng,dīng 0x47D4:fù,bó 0x47D5:chà 0x47D6:tàng 0x47D7:shì 0x47D8:hàng 0x47D9:qiè 0x47DA:qí 0x47DB:bó,fèi,bèi 0x47DC:nà 0x47DD:tòu 0x47DE:chú 0x47DF:cù 0x47E0:yuè 0x47E1:zhī,dì 0x47E2:chén 0x47E3:chù 0x47E4:bì,bié 0x47E5:méng 0x47E6:bá 0x47E7:tián 0x47E8:mín,mǐn 0x47E9:liě,què 0x47EA:fěng,fǎn 0x47EB:chēng,shàng 0x47EC:qiù 0x47ED:tiáo,zuò 0x47EE:fú,bó 0x47EF:kuò 0x47F0:jiǎn 0x47F4:zhèn 0x47F5:qiú 0x47F6:zuò,cuò 0x47F7:chì,qì 0x47F8:kuí,guī 0x47F9:liè 0x47FA:bèi,pèi 0x47FB:dù,zhà 0x47FC:wǔ 0x47FE:zhuó,juě 0x47FF:lù 0x4800:tāng,chǎng,tàng 0x4802:chú 0x4803:liǎng 0x4804:tiǎn 0x4805:kǔn 0x4806:cháng 0x4807:jué 0x4808:tú 0x4809:huàn 0x480A:fèi 0x480B:bì,bǐ,bāi 0x480D:xiā,qiá,qié 0x480E:wò 0x480F:jì,kuí 0x4810:qù 0x4811:kuǐ,kuí,wěi 0x4812:hú 0x4813:qiū,cù 0x4814:suì 0x4815:cāi 0x4817:qiù,xiòng 0x4818:pì 0x4819:páng 0x481A:wà,wǎ 0x481B:yáo 0x481C:róng,rǒng 0x481D:xūn 0x481E:cù 0x481F:dié 0x4820:chì,dài 0x4821:cuó,chá 0x4822:mèng 0x4823:xuǎn 0x4824:duǒ,duò 0x4825:bié 0x4826:zhè 0x4827:chú 0x4828:chàn 0x4829:guì 0x482A:duàn 0x482B:zòu 0x482C:dèng 0x482D:lái 0x482E:téng 0x482F:yuè 0x4830:quán 0x4831:zhú 0x4832:líng 0x4833:chēn 0x4834:zhěn 0x4835:fù 0x4836:shè 0x4837:tiǎo 0x4838:kuā 0x4839:ái 0x483B:qióng 0x483C:shù 0x483D:hái,kǎi 0x483E:shǎn 0x483F:wài,kuì 0x4840:zhǎn,zhàn 0x4841:lǒng 0x4842:jiū,jiù 0x4843:lì 0x4845:chūn,xún 0x4846:róng 0x4847:yuè 0x4848:jué,jiào 0x4849:kǎng 0x484A:fǎn 0x484B:qí 0x484C:hóng 0x484D:fú 0x484E:lú 0x484F:hóng 0x4850:tuó 0x4851:mín 0x4852:tián 0x4853:juàn,xuān 0x4854:qǐ 0x4855:zhěng 0x4856:qìng 0x4857:gǒng,gòng 0x4858:tián 0x4859:láng 0x485A:mào 0x485B:yìn 0x485C:lù 0x485D:yuān,yǔn 0x485E:jú 0x485F:pì 0x4861:xié 0x4862:biàn 0x4863:hūn,xuān 0x4864:zhū 0x4865:róng 0x4866:sǎng 0x4867:wū,wǔ 0x4868:chà 0x4869:kēng,zhěn 0x486A:shàn 0x486B:péng 0x486C:màn 0x486D:xiū 0x486F:cōng,zǒng 0x4870:kēng,kěng,gǔ 0x4871:zhuǎn 0x4872:chán,dān 0x4873:sī 0x4874:chōng 0x4875:suì 0x4876:bèi 0x4877:kài,kě 0x4879:zhì 0x487A:wèi 0x487B:mín 0x487C:líng 0x487D:zuān 0x487E:niè,yè,yǐ 0x487F:líng 0x4880:qì 0x4881:yuè 0x4883:yì 0x4884:xǐ 0x4885:chén 0x4887:rǒng 0x4888:chén,huì 0x4889:nóng 0x488A:yóu 0x488B:jì 0x488C:bó 0x488D:fǎng 0x4890:cú 0x4891:dǐ,dì 0x4892:jiāo 0x4893:yú 0x4894:hé 0x4895:xù 0x4896:yù,lǜ 0x4897:qū 0x4899:bài 0x489A:gēng,háng 0x489B:jiǒng 0x489D:yà 0x489E:shù 0x489F:yóu 0x48A0:sòng 0x48A1:yè,xiè,zhuì 0x48A2:càng 0x48A3:yáo 0x48A4:shù 0x48A5:yán 0x48A6:shuài 0x48A7:liào 0x48A8:cōng,zōng 0x48A9:yù 0x48AA:bó 0x48AB:suí 0x48AD:yàn,xiàn 0x48AE:lèi 0x48AF:lín 0x48B0:tī 0x48B1:dú 0x48B2:yuè 0x48B3:jǐ 0x48B5:yún 0x48B8:jū 0x48B9:jǔ,qú 0x48BA:chū 0x48BB:chén 0x48BC:gōng 0x48BD:xiàng 0x48BE:xiǎn 0x48BF:ān 0x48C0:guǐ,qī,wéi 0x48C1:yǔ 0x48C2:lěi 0x48C4:tú 0x48C5:chén 0x48C6:xíng 0x48C7:qiú 0x48C8:hàng 0x48CA:dǎng 0x48CB:cǎi 0x48CC:dǐ 0x48CD:yǎn,yān 0x48CE:zī 0x48D0:yīng 0x48D1:chán 0x48D3:lí,lì 0x48D4:suǒ 0x48D5:mǎ 0x48D6:mǎ 0x48D8:táng 0x48D9:péi,pěng,bēi 0x48DA:lóu 0x48DB:qī,xī 0x48DC:cuó 0x48DD:tú 0x48DE:è 0x48DF:cán,cǎn,tì 0x48E0:jié,tì,zá 0x48E1:yí 0x48E2:jí 0x48E3:dǎng 0x48E4:jué 0x48E5:bǐ 0x48E6:lèi 0x48E7:yì 0x48E8:chún 0x48E9:chún 0x48EA:pò 0x48EB:lí 0x48EC:zǎi,gē 0x48ED:tài 0x48EE:pò 0x48EF:cú,tiǎn 0x48F0:jù 0x48F1:xù 0x48F2:fàn 0x48F4:xù 0x48F5:èr 0x48F6:huó,tián 0x48F7:zhū 0x48F8:rǎn,nǎn,nàn 0x48F9:fá 0x48FA:juān 0x48FB:hān 0x48FC:liáng 0x48FD:zhī,tǐ 0x48FE:mì 0x48FF:yū 0x4901:cén 0x4902:méi 0x4903:yīn,ān,yìn 0x4904:miǎn 0x4905:tú 0x4906:kuí,guì 0x4909:mì 0x490A:róng 0x490B:yù,guó 0x490C:qiāng 0x490D:mí 0x490E:jú,jué 0x490F:pǐ 0x4910:jǐn 0x4911:wàng 0x4912:jì,jǐ 0x4913:méng 0x4914:jiàn 0x4915:xuè,hù 0x4916:bào 0x4917:gǎn 0x4918:chǎn,qiǎn 0x4919:lì 0x491A:lǐ 0x491B:qiú 0x491C:dùn 0x491D:yìng 0x491E:yǔn 0x491F:chén 0x4920:zhǐ 0x4921:rǎn 0x4923:lüè 0x4924:kāi 0x4925:guǐ,wěi 0x4926:yuè 0x4927:huì 0x4928:pì 0x4929:chá 0x492A:duǒ 0x492B:chán 0x492C:shā 0x492D:shì 0x492E:shè 0x492F:xíng 0x4930:yíng 0x4931:shì 0x4932:chì 0x4933:yè 0x4934:hán 0x4935:fèi,pī,fēi 0x4936:yè,ān 0x4937:yǎn 0x4938:zuàn 0x4939:sōu 0x493A:jīn,yǐn 0x493B:duò 0x493C:xiàn 0x493D:guān 0x493E:tāo 0x493F:qiè 0x4940:chǎn 0x4941:hán 0x4942:mèng 0x4943:yuè 0x4944:cù 0x4945:qiàn 0x4946:jǐn 0x4947:shàn 0x4948:mǔ 0x4949:yuān 0x494B:pēng 0x494C:zhèng 0x494D:zhì 0x494E:chún 0x494F:yǔ 0x4950:móu 0x4951:wàn 0x4952:jiàng 0x4953:qī 0x4954:sù 0x4955:piě 0x4956:tián 0x4957:kuǎn 0x4958:cù 0x4959:suì 0x495B:jiē,jié,qì 0x495C:jiàn 0x495D:áo 0x495E:jiǎo 0x495F:yè 0x4961:yè 0x4962:lóng,qī 0x4963:záo 0x4964:báo 0x4965:lián 0x4967:huán 0x4968:lǜ,lú 0x4969:wéi 0x496A:xiǎn 0x496B:tiě 0x496C:bó 0x496D:zhèng 0x496E:zhú 0x496F:bēi,bà 0x4970:méng 0x4971:xiě 0x4972:ōu 0x4973:yōu 0x4975:xiǎo 0x4976:lì 0x4977:zhá 0x4978:mí 0x497A:yé 0x497D:pō 0x497E:xiě 0x4982:shàn 0x4983:zhuō 0x4985:shàn 0x4986:jué 0x4987:jì 0x4988:jiē,zuǒ 0x498A:niǎo 0x498B:áo 0x498C:chù 0x498D:wù 0x498E:guǎn,kàng 0x498F:xiè 0x4990:tǐng 0x4991:xuè 0x4992:dàng,qiāo 0x4993:zhān,chān 0x4994:tǎn,dǎn 0x4995:pēng 0x4996:xié,xiá 0x4997:xù 0x4998:xiàn 0x4999:sì,shì 0x499A:kuà 0x499B:zhèng 0x499C:wú 0x499D:huō 0x499E:rùn 0x499F:wěn,chuài 0x49A0:dū 0x49A1:huán 0x49A2:kuò 0x49A3:fù 0x49A4:chuài 0x49A5:xián 0x49A6:qín 0x49A7:qié 0x49A8:lán 0x49AA:yà 0x49AB:yīng 0x49AC:què 0x49AD:hāng 0x49AE:chǔn 0x49AF:zhì 0x49B1:wěi,kuā 0x49B2:yán,qiàn,chàn 0x49B3:xiàng 0x49B4:yì 0x49B5:nǐ 0x49B6:zhèng 0x49B7:chuài 0x49B9:shí 0x49BA:dīng 0x49BB:zǐ 0x49BC:jué,pì 0x49BD:xù 0x49BE:yuán 0x49C1:xǔ 0x49C2:dào 0x49C3:tián 0x49C4:gè 0x49C5:yí 0x49C6:hóng 0x49C7:yī,yǐ 0x49C9:lǐ 0x49CA:kū 0x49CB:xiǎn,xiàn 0x49CC:suī 0x49CD:xì 0x49CE:xuàn 0x49D1:dī 0x49D2:lái 0x49D3:zhōu 0x49D4:niàn 0x49D5:chéng 0x49D6:jiàn 0x49D7:bì 0x49D8:zhuàn 0x49D9:líng 0x49DA:hào 0x49DB:bàng,péng 0x49DC:táng 0x49DD:chī,zhì 0x49DE:mà,fù 0x49DF:xiàn 0x49E0:shuàn 0x49E1:yōng 0x49E2:qū,ōu 0x49E4:pú 0x49E5:huì 0x49E6:wéi 0x49E7:yǐ 0x49E8:yè 0x49EA:chè 0x49EB:háo 0x49EC:bīn 0x49EE:xiàn,xiǎn 0x49EF:chán,zhàn 0x49F0:hùn 0x49F2:hàn 0x49F3:cí,zhuī 0x49F4:zhī 0x49F5:qí 0x49F6:kuí 0x49F7:róu 0x49F9:yīng 0x49FA:xióng 0x49FC:hú 0x49FD:cuǐ 0x49FF:què,xī 0x4A00:dí 0x4A01:wù 0x4A02:qiū 0x4A04:yàn 0x4A05:liáo 0x4A06:bí 0x4A08:bīn 0x4A0A:yuān 0x4A0B:nüè 0x4A0C:báo 0x4A0D:yǐng 0x4A0E:hóng 0x4A0F:cí 0x4A10:qià 0x4A11:tí 0x4A12:yù 0x4A13:léi 0x4A14:báo 0x4A16:jì 0x4A17:fú 0x4A18:xiàn 0x4A19:cén 0x4A1A:hū 0x4A1B:sè,xī 0x4A1C:bēng 0x4A1D:qīng 0x4A1E:yǔ,yù 0x4A1F:wā 0x4A20:ǎi 0x4A21:hán 0x4A22:dàn 0x4A23:gé 0x4A24:dí 0x4A25:huò,shuāng 0x4A26:pāng 0x4A28:zhuī 0x4A29:líng 0x4A2A:mái 0x4A2B:mài 0x4A2C:lián 0x4A2D:xiāo 0x4A2E:xuě 0x4A2F:zhèn 0x4A30:pò 0x4A31:fù 0x4A32:nóu,wàn 0x4A33:xì,xī 0x4A34:duì 0x4A35:dàn 0x4A36:yǔn 0x4A37:xiàn 0x4A38:yǐn 0x4A39:shū 0x4A3A:duì 0x4A3B:bèng 0x4A3C:hù 0x4A3D:fěi 0x4A3E:fèi 0x4A3F:zá 0x4A40:bèi 0x4A41:fēi 0x4A42:xiān 0x4A43:shì 0x4A44:miǎn,tiǎn 0x4A45:zhǎn,nǎn 0x4A46:zhǎn 0x4A47:zhān,diān 0x4A48:huì 0x4A49:fǔ 0x4A4A:wǎn,wò 0x4A4B:mǒ 0x4A4C:qiáo 0x4A4D:liǎo 0x4A4F:miè 0x4A50:hū,jí,gé 0x4A51:hóng 0x4A52:yú 0x4A53:qí 0x4A54:duò,shān,pán 0x4A55:áng,yìng 0x4A57:bà 0x4A58:dì 0x4A59:xuàn,xiǎn 0x4A5A:dì,dī 0x4A5B:bì,pèi 0x4A5C:zhòu 0x4A5D:páo 0x4A5E:tié,diē 0x4A5F:yí,tì 0x4A61:jiá,gé 0x4A62:zhì,dá 0x4A63:tú 0x4A64:xié 0x4A65:dàn,chān 0x4A66:tiáo 0x4A67:xiè 0x4A68:chàng,zhāng 0x4A69:yuǎn 0x4A6A:guǎn 0x4A6B:liǎng 0x4A6C:běng,fěng 0x4A6E:lù 0x4A6F:jí,qì 0x4A70:xuàn 0x4A71:shù,yú,shū 0x4A72:dū 0x4A73:sōu 0x4A74:hú 0x4A75:yùn 0x4A76:chǎn 0x4A77:bāng 0x4A78:róng,rǒng 0x4A79:é,kuò 0x4A7A:wēng 0x4A7B:bà 0x4A7C:féng 0x4A7D:yū 0x4A7E:zhè 0x4A7F:fén 0x4A80:guǎn 0x4A81:bǔ 0x4A82:gé 0x4A83:dūn 0x4A84:huáng 0x4A85:dú 0x4A86:tǐ 0x4A87:bó 0x4A88:qiàn 0x4A89:liè 0x4A8A:lóng 0x4A8B:wèi 0x4A8C:zhàn,shān 0x4A8D:lán 0x4A8E:suī 0x4A8F:nà,dā 0x4A90:bì 0x4A91:tuó 0x4A92:zhù 0x4A93:diē 0x4A94:bǔ,fù 0x4A95:jú 0x4A96:pò 0x4A97:xiá 0x4A98:wěi,dī 0x4A99:pò,fú,fù 0x4A9A:dā,tà 0x4A9B:fān,fán 0x4A9C:chān,chàn,yán 0x4A9D:hù 0x4A9E:zá 0x4AA4:fán 0x4AA5:xiè 0x4AA6:hóng 0x4AA7:chí 0x4AA8:báo 0x4AA9:yín 0x4AAB:jīng 0x4AAC:bó 0x4AAD:ruǎn 0x4AAE:chǒu 0x4AAF:yīng 0x4AB0:yī 0x4AB1:gǎi,hái 0x4AB2:kūn 0x4AB3:yǔn 0x4AB4:zhěn,dǎn,dàn 0x4AB5:yǎ 0x4AB6:jū 0x4AB7:hòu,gòu 0x4AB8:mín,mén 0x4AB9:bāi,pī,péi 0x4ABA:gé 0x4ABB:biàn,fàn 0x4ABC:zhuō 0x4ABD:hào 0x4ABE:zhěn 0x4ABF:shěng 0x4AC0:gěn 0x4AC1:bì 0x4AC2:duǒ 0x4AC3:chún,zhèn 0x4AC4:chuà 0x4AC5:sàn 0x4AC6:chéng 0x4AC7:rán 0x4AC8:chěn,zèn,cén 0x4AC9:mào 0x4ACA:péi 0x4ACB:wēi,tuí 0x4ACC:pǐ 0x4ACD:fǔ 0x4ACE:zhuō 0x4ACF:qī 0x4AD0:lín 0x4AD1:yī,qī 0x4AD2:mén 0x4AD3:wú 0x4AD4:qì,qiè,yà,kuí 0x4AD5:dié 0x4AD6:chěn,shèn 0x4AD7:xiá 0x4AD8:hé,jié,kě 0x4AD9:sǎng 0x4ADA:guā 0x4ADB:hóu 0x4ADC:āo 0x4ADD:fǔ 0x4ADE:qiāo,fén 0x4ADF:hùn 0x4AE0:pī 0x4AE1:yán,qiàn,qiān,jiàn 0x4AE2:sī 0x4AE3:xí 0x4AE4:míng 0x4AE5:kuǐ 0x4AE6:gé,kài 0x4AE8:ào 0x4AE9:sǎn 0x4AEA:shuǎng 0x4AEB:lóu 0x4AEC:zhěn,qǐn 0x4AED:huì 0x4AEE:chán 0x4AF0:lìn 0x4AF1:ná 0x4AF2:hàn,kǎn 0x4AF3:dú 0x4AF4:jìn 0x4AF5:mián 0x4AF6:fán 0x4AF7:è 0x4AF8:chāo 0x4AF9:hóng 0x4AFA:hóng 0x4AFB:yù 0x4AFC:xuè 0x4AFD:pāo 0x4AFE:bī,bì 0x4AFF:chāo 0x4B00:yǒu 0x4B01:yí 0x4B02:xuè 0x4B03:sà 0x4B04:xù 0x4B05:lì,liè,xié 0x4B06:lì 0x4B07:yuàn 0x4B08:duì 0x4B09:huò 0x4B0A:shà 0x4B0B:léng 0x4B0C:pōu 0x4B0D:hū 0x4B0E:guó,xù 0x4B0F:bù,fǒu 0x4B10:ruí 0x4B11:wèi,yù 0x4B12:sōu,xiāo 0x4B13:àn 0x4B14:yú 0x4B15:xiāng,shǎng 0x4B16:héng 0x4B17:yáng 0x4B18:xiāo 0x4B19:yáo 0x4B1B:bì 0x4B1D:héng 0x4B1E:táo 0x4B1F:liú,liǔ 0x4B21:zhù 0x4B23:xì,qì,gē 0x4B24:zàn,zhān 0x4B25:yì 0x4B26:dòu,shè 0x4B27:yuán 0x4B28:jiù 0x4B2A:bó 0x4B2B:tí 0x4B2C:yǐng 0x4B2E:yí 0x4B2F:nián,tiǎn 0x4B30:shào 0x4B31:bèn 0x4B32:gōu 0x4B33:bǎn 0x4B34:mò 0x4B35:gāi,ài 0x4B36:èn 0x4B37:shě 0x4B39:zhì 0x4B3A:yàng 0x4B3B:jiàn 0x4B3C:yuàn 0x4B3D:shuì,duì 0x4B3E:tí 0x4B3F:wěi,wèi 0x4B40:xùn 0x4B41:zhì 0x4B42:yì 0x4B43:rěn,niè 0x4B44:shì 0x4B45:hú 0x4B46:nè 0x4B47:yē,yì 0x4B48:jiàn 0x4B49:suǐ 0x4B4A:yǐng 0x4B4B:bǎo 0x4B4C:hú 0x4B4D:hú 0x4B4E:yè 0x4B50:yàng 0x4B51:lián,qiàn,xiàn 0x4B52:xī 0x4B53:èn 0x4B54:duī 0x4B55:zǎn,jiǎn 0x4B56:zhù 0x4B57:yǐng 0x4B58:yǐng 0x4B59:jǐn,jiàn 0x4B5A:chuáng 0x4B5B:dàn 0x4B5D:kuài 0x4B5E:yì 0x4B5F:yè 0x4B60:jiǎn 0x4B61:èn 0x4B62:níng 0x4B63:cí 0x4B64:qiǎn 0x4B65:xuè 0x4B66:bō 0x4B67:mǐ 0x4B68:shuì 0x4B69:mó 0x4B6A:liáng 0x4B6B:qǐ 0x4B6C:qǐ 0x4B6D:shǒu 0x4B6E:fú 0x4B6F:bó 0x4B70:bèng 0x4B71:bié 0x4B72:yǐ 0x4B73:wèi 0x4B74:huán 0x4B75:fán 0x4B76:qí 0x4B77:máo 0x4B78:fù 0x4B79:áng 0x4B7A:ǎng 0x4B7B:fēn,fù 0x4B7C:qí 0x4B7D:qún 0x4B7E:tuó 0x4B7F:yì 0x4B80:bó 0x4B81:pián 0x4B82:bá 0x4B84:xuán 0x4B87:yù 0x4B88:chí 0x4B89:lú 0x4B8A:yí 0x4B8B:lì 0x4B8D:niǎo 0x4B8E:xì 0x4B8F:wú 0x4B91:lèi,luò 0x4B92:pū 0x4B93:zhuō,chào 0x4B94:zuī 0x4B95:zhuó 0x4B96:chāng 0x4B97:àn,yàn 0x4B98:ér 0x4B99:yù 0x4B9A:lèng,líng 0x4B9B:fù 0x4B9C:zhá,yè 0x4B9D:hún 0x4B9E:chǔn 0x4B9F:sōu,sǒu 0x4BA0:bī 0x4BA1:bì,bó 0x4BA2:zhá 0x4BA4:hé 0x4BA5:lì 0x4BA7:hàn,hán 0x4BA8:zǎi 0x4BA9:gú 0x4BAA:chéng 0x4BAB:lóu,lǘ 0x4BAC:mò 0x4BAD:mì 0x4BAE:mài 0x4BAF:ào 0x4BB0:zhé 0x4BB1:zhú 0x4BB2:huáng 0x4BB3:fán 0x4BB4:dèng,tēng 0x4BB5:tóng 0x4BB7:dú 0x4BB8:wò 0x4BB9:wèi,guì 0x4BBA:jì 0x4BBB:chì 0x4BBC:lín 0x4BBD:biāo 0x4BBE:lóng,lòng 0x4BBF:jiǎn 0x4BC0:niè 0x4BC1:luó 0x4BC2:shēn,jí 0x4BC4:guā 0x4BC5:niè 0x4BC6:yì 0x4BC7:kū 0x4BC8:wán 0x4BC9:wā 0x4BCA:qià,kē 0x4BCB:bó,fèi 0x4BCC:kāo 0x4BCD:líng 0x4BCE:gàn 0x4BCF:guā,huá 0x4BD0:hái 0x4BD1:kuāng 0x4BD2:héng 0x4BD3:kuī 0x4BD4:zé 0x4BD5:tīng 0x4BD6:láng 0x4BD7:bì 0x4BD8:huàn 0x4BD9:pò 0x4BDA:yǎo 0x4BDB:wàn 0x4BDC:tì,xī 0x4BDD:suǐ 0x4BDE:kuā 0x4BDF:duì,xiá 0x4BE0:ǎo 0x4BE1:jiàn 0x4BE2:mó,mǒ 0x4BE3:kuì,guì 0x4BE4:kuài 0x4BE5:àn,qì 0x4BE6:mà 0x4BE7:qǐng,qìng 0x4BE8:qiāo,hè 0x4BEA:kǎo,kào 0x4BEB:hào 0x4BEC:duǒ 0x4BED:xiān 0x4BEE:nái 0x4BEF:suō 0x4BF0:jiè 0x4BF1:pī,pēi,fù 0x4BF2:pā,bà 0x4BF3:sōng 0x4BF4:cháng 0x4BF5:niè 0x4BF6:mán,mián 0x4BF7:sōng 0x4BF8:cì 0x4BF9:xiān 0x4BFA:kuò 0x4BFC:dí 0x4BFD:póu,pǒu,bǎo 0x4BFE:tiáo,diāo 0x4BFF:zú,suì,zuì 0x4C00:wǒ 0x4C01:fèi 0x4C02:cài 0x4C03:péng,pèng,fǎng 0x4C04:sāi,shì 0x4C06:róu 0x4C07:qí 0x4C08:cuó 0x4C09:pán,bān 0x4C0A:bó 0x4C0B:mán 0x4C0C:zǒng,cōng 0x4C0D:cì 0x4C0E:kuì 0x4C0F:jì 0x4C10:lán 0x4C12:méng 0x4C13:mián 0x4C14:pán 0x4C15:lú 0x4C16:zuǎn 0x4C18:liú,jiǎo 0x4C19:yǐ 0x4C1A:wén 0x4C1B:lì,gé 0x4C1C:lì 0x4C1D:zèng 0x4C1E:zhǔ 0x4C1F:hún 0x4C20:shén 0x4C21:chì 0x4C22:xìng 0x4C23:wǎng 0x4C24:dōng 0x4C25:huò,yù 0x4C26:pǐ 0x4C27:hū 0x4C28:mèi 0x4C29:chě,dū 0x4C2A:mèi 0x4C2B:chāo,cháo,zhào 0x4C2C:jú 0x4C2D:nòu 0x4C2F:yì 0x4C30:rú 0x4C31:líng,lóng 0x4C32:yà 0x4C34:qì 0x4C35:zī 0x4C37:bàng 0x4C38:gōng 0x4C39:zé 0x4C3A:jiè 0x4C3B:yú 0x4C3C:qín,yín,shèn 0x4C3D:bèi 0x4C3E:bā,bà 0x4C3F:tuó 0x4C40:yāng 0x4C41:qiáo 0x4C42:yǒu 0x4C43:zhì 0x4C44:jiè 0x4C45:mò 0x4C46:shéng 0x4C47:shàn 0x4C48:qí 0x4C49:shàn 0x4C4A:mǐ 0x4C4B:gǒng 0x4C4C:yí 0x4C4D:gèng 0x4C4E:gèng 0x4C4F:tǒu 0x4C50:fū 0x4C51:xué 0x4C52:yè 0x4C53:tíng,tǐng 0x4C54:tiáo,chóu 0x4C55:móu,méi 0x4C56:liú 0x4C57:cān 0x4C58:lí 0x4C59:shū 0x4C5A:lù 0x4C5B:huò,xù,yì 0x4C5C:cuò 0x4C5D:pái,bēi 0x4C5E:liú 0x4C5F:jù,jū 0x4C60:zhàn 0x4C61:jú 0x4C62:zhēng 0x4C63:zú 0x4C64:xiàn 0x4C65:zhì,jì 0x4C68:là 0x4C6B:là 0x4C6C:xū 0x4C6D:gèng 0x4C6E:é 0x4C6F:mú 0x4C70:zhòng 0x4C71:tí,dì 0x4C72:yuán 0x4C73:zhān 0x4C74:gèng 0x4C75:wēng 0x4C76:láng 0x4C77:yú 0x4C78:sōu,qiū 0x4C79:zhǎ 0x4C7A:hái 0x4C7B:huá 0x4C7C:zhǎn 0x4C7E:lóu 0x4C7F:chàn 0x4C80:zhì 0x4C81:wèi 0x4C82:xuán 0x4C83:zǎo,suǒ,cháo 0x4C84:mín 0x4C85:guī 0x4C86:sū 0x4C89:sī 0x4C8A:duò,wěi,tuò 0x4C8B:cén 0x4C8C:kuǎn 0x4C8D:téng 0x4C8E:něi 0x4C8F:láo 0x4C90:lǔ 0x4C91:yí 0x4C92:xiè 0x4C93:yǎn,yán 0x4C94:qíng 0x4C95:pū 0x4C96:chóu 0x4C97:xián 0x4C98:guǎn 0x4C99:jié 0x4C9A:lài 0x4C9B:méng 0x4C9C:yè 0x4C9E:lì 0x4C9F:yìn 0x4CA0:chūn 0x4CA1:qiū 0x4CA2:téng 0x4CA3:yú 0x4CA6:dài 0x4CA7:dù 0x4CA8:hóng 0x4CAA:xì 0x4CAC:qí 0x4CAE:yuán 0x4CAF:jí 0x4CB0:yùn 0x4CB1:fǎng 0x4CB2:gōng,sōng 0x4CB3:háng 0x4CB4:zhèn 0x4CB5:què 0x4CB8:jiè 0x4CB9:pí 0x4CBA:gàn 0x4CBB:xuán,yuān 0x4CBC:shēng 0x4CBD:shí,diǎo 0x4CBE:qiǎo 0x4CBF:cí 0x4CC0:dié,yì 0x4CC1:bó 0x4CC2:diāo,chāo,tiáo,xiāo 0x4CC3:wǎn 0x4CC4:cí 0x4CC5:zhǐ,zhì 0x4CC6:bái 0x4CC7:wǔ 0x4CC8:bǎo 0x4CC9:dōng,dàn 0x4CCA:bá 0x4CCB:tóng,tōng,xiāo 0x4CCD:gōng 0x4CCE:jiù 0x4CCF:guì,jué 0x4CD0:cì 0x4CD1:yǒu 0x4CD2:yuán 0x4CD3:lǎo 0x4CD4:jú,jiù 0x4CD5:fú 0x4CD6:niè 0x4CD7:é 0x4CD8:é 0x4CD9:xǐng 0x4CDA:kàn,hé 0x4CDB:yàn 0x4CDC:tú 0x4CDD:pǒu,bù 0x4CDE:běng 0x4CDF:míng 0x4CE0:shuì,zhù 0x4CE1:yàn,zhuī 0x4CE2:qí 0x4CE3:yuán 0x4CE4:biē 0x4CE6:xuān 0x4CE7:hóu 0x4CE8:huáng 0x4CE9:yāo 0x4CEA:juàn 0x4CEB:kuí 0x4CEC:è 0x4CED:jí 0x4CEE:mò 0x4CEF:chóng,chǒng 0x4CF0:bǎo 0x4CF1:wù 0x4CF2:zhèn 0x4CF3:xù 0x4CF4:tà,dá 0x4CF5:chì 0x4CF6:xī,qī,jī 0x4CF7:cóng 0x4CF8:má 0x4CF9:kòu 0x4CFA:yàn 0x4CFB:cán,zhàn 0x4CFD:hè 0x4CFE:dēng 0x4CFF:rán 0x4D00:tóng 0x4D01:yù,yú 0x4D02:xiàng 0x4D03:náo 0x4D04:shùn 0x4D05:fén 0x4D06:pú,pū 0x4D07:líng 0x4D08:ǎo 0x4D09:huán,xuán 0x4D0A:yí 0x4D0B:huán,xuán 0x4D0C:méng 0x4D0D:yīng 0x4D0E:lěi 0x4D0F:yàn 0x4D10:bǎo 0x4D11:dié 0x4D12:líng 0x4D13:shī 0x4D14:jiāo 0x4D15:liè 0x4D16:jīng 0x4D17:jú 0x4D18:tī 0x4D19:pì 0x4D1A:gǎng 0x4D1B:xiāo 0x4D1C:wāi 0x4D1D:chuài 0x4D1E:dí 0x4D1F:huán 0x4D20:yǎo 0x4D21:lì 0x4D22:mí 0x4D23:hū 0x4D24:shēng 0x4D25:jiā 0x4D26:yín 0x4D27:wēi 0x4D29:piáo 0x4D2A:lù 0x4D2B:líng 0x4D2C:yì 0x4D2D:cái 0x4D2E:shàn 0x4D2F:hū 0x4D30:shú,yì 0x4D31:tuō 0x4D32:mò 0x4D33:huá 0x4D34:tiè,nián 0x4D35:bǐng 0x4D36:péng 0x4D37:hún,huàn 0x4D38:fū 0x4D39:guǒ,luǒ,hún 0x4D3A:bù 0x4D3B:lí 0x4D3C:chàn 0x4D3D:pí 0x4D3E:cuó 0x4D3F:méng 0x4D40:suǒ,suò 0x4D41:qiàng 0x4D42:zhí 0x4D43:kuàng,huáng 0x4D44:bí 0x4D45:áo 0x4D46:méng 0x4D47:xiàn 0x4D48:kù 0x4D49:tóu 0x4D4A:tuān 0x4D4B:wěi 0x4D4C:xiān 0x4D4E:tuān 0x4D4F:lǎo 0x4D50:chǎn 0x4D51:nì 0x4D52:nì 0x4D53:lí 0x4D54:dǒng 0x4D55:jù 0x4D56:qiàn,qīn 0x4D57:bó,bí 0x4D58:shài 0x4D59:zhā,zhǎ 0x4D5A:tǎo 0x4D5B:qiàn 0x4D5C:nǒng 0x4D5D:yì,yà 0x4D5E:jìng 0x4D5F:gǎn 0x4D60:dí,zhuó 0x4D61:jiǎn 0x4D62:mèi 0x4D63:dá 0x4D64:jiǎn,xiàn 0x4D65:yù 0x4D66:xiè,wū 0x4D67:zài 0x4D68:máng 0x4D69:lí 0x4D6A:gùn,hùn 0x4D6B:xūn,yù 0x4D6C:tà 0x4D6D:zhè 0x4D6E:yàng 0x4D6F:tuǎn 0x4D70:shāng 0x4D71:xì,xī 0x4D72:qiāo 0x4D73:wèi 0x4D74:yìng,zèng,yùn 0x4D75:chuā,zhuó 0x4D76:qú,gōu 0x4D77:wā 0x4D79:zhī 0x4D7A:tǐng,dǐng,tiǎn 0x4D7B:huì,gǔ 0x4D7C:shāng 0x4D7D:cà 0x4D7E:fú,fǔ 0x4D7F:tiè 0x4D80:tà 0x4D81:tà 0x4D82:zhuó,jué 0x4D83:hán 0x4D84:píng 0x4D85:hé 0x4D86:zhuī 0x4D87:zhòu 0x4D88:bó 0x4D89:liú 0x4D8A:nǜ 0x4D8B:xī 0x4D8C:pào 0x4D8D:dì 0x4D8E:hē 0x4D8F:tì,tǐ 0x4D90:wài,huì 0x4D91:tì 0x4D92:qí 0x4D93:jì 0x4D94:chí 0x4D95:bà,bā 0x4D96:jìn 0x4D97:kè,qiā,qiǎ 0x4D98:lì 0x4D99:jù 0x4D9A:qǔ 0x4D9B:là 0x4D9C:gǔ 0x4D9D:qià 0x4D9E:qí 0x4D9F:xiàn 0x4DA0:jiǎn 0x4DA1:shí,zé 0x4DA2:jiān,xián 0x4DA3:ái,gāi 0x4DA4:huá 0x4DA5:zhā,jǔ,chǔ 0x4DA6:zé 0x4DA7:yǎo 0x4DA8:zhān 0x4DA9:jì 0x4DAA:chà 0x4DAB:yàn,yán 0x4DAC:jiān 0x4DAE:yǎn 0x4DB0:jiāo 0x4DB1:tóng 0x4DB2:nán 0x4DB3:yuè 0x4DB5:chí 0x4E00:yī,yí,yì 0x4E01:dīng,zhēng 0x4E02:kǎo,qiǎo,yú 0x4E03:qī,qí 0x4E04:shàng 0x4E05:xià 0x4E06:hǎn 0x4E07:wàn,mò 0x4E08:zhàng 0x4E09:sān 0x4E0A:shàng,shǎng 0x4E0B:xià 0x4E0C:jī,qí 0x4E0D:bù,fǒu,fōu,fū,bú 0x4E0E:yǔ,yú,yù 0x4E0F:miǎn 0x4E10:gài 0x4E11:chǒu 0x4E12:chǒu 0x4E13:zhuān 0x4E14:qiě,jū,cú 0x4E15:pī 0x4E16:shì 0x4E17:shì 0x4E18:qiū 0x4E19:bǐng,bìng 0x4E1A:yè 0x4E1B:cóng 0x4E1C:dōng 0x4E1D:sī 0x4E1E:chéng,shèng,zhēng,zhěng 0x4E1F:diū 0x4E20:qiū 0x4E21:liǎng 0x4E22:diū 0x4E23:yǒu 0x4E24:liǎng 0x4E25:yán 0x4E26:bìng,bàn,bàng 0x4E27:sàng,sāng 0x4E28:gǔn 0x4E29:jiū 0x4E2A:gè,gàn,gě 0x4E2B:yā 0x4E2C:qiáng 0x4E2D:zhōng,zhòng 0x4E2E:jǐ 0x4E2F:jiè 0x4E30:fēng 0x4E31:guàn,kuàng 0x4E32:chuàn,guàn,quàn 0x4E33:chǎn,chuàn 0x4E34:lín 0x4E35:zhuó 0x4E36:zhǔ 0x4E37:bā 0x4E38:wán 0x4E39:dān 0x4E3A:wèi,wéi 0x4E3B:zhǔ,zhù 0x4E3C:jǐng,dǎn 0x4E3D:lì,lí 0x4E3E:jǔ 0x4E3F:piě,yì 0x4E40:fú 0x4E41:yí,jí 0x4E42:yì,ài 0x4E43:nǎi,ǎi 0x4E44:wǔ 0x4E45:jiǔ 0x4E46:jiǔ 0x4E47:tuō,zhé 0x4E48:me,yāo,mó,ma 0x4E49:yì 0x4E4A:yī 0x4E4B:zhī,zhū,zhì 0x4E4C:wū,wù 0x4E4D:zhà,zuò 0x4E4E:hū 0x4E4F:fá 0x4E50:lè,yuè 0x4E51:yín,pān,zhòng 0x4E52:pīng 0x4E53:pāng 0x4E54:qiáo 0x4E55:hǔ 0x4E56:guāi 0x4E57:chéng 0x4E58:chéng,shèng 0x4E59:yǐ,yì,jué 0x4E5A:yǐn 0x4E5B:ya 0x4E5C:miē,niè 0x4E5D:jiǔ,jiū 0x4E5E:qǐ,qì 0x4E5F:yě,yí 0x4E60:xí 0x4E61:xiāng 0x4E62:gài 0x4E63:jiǔ 0x4E64:xià 0x4E65:hù 0x4E66:shū 0x4E67:dǒu 0x4E68:shǐ 0x4E69:jī 0x4E6A:náng 0x4E6B:jiā 0x4E6C:jù 0x4E6D:shí 0x4E6E:mǎo 0x4E6F:hū 0x4E70:mǎi 0x4E71:luàn 0x4E72:zī 0x4E73:rǔ 0x4E74:xué 0x4E75:yǎn 0x4E76:fǔ 0x4E77:shā 0x4E78:nǎ 0x4E79:gān 0x4E7A:suǒ 0x4E7B:yú 0x4E7C:cui 0x4E7D:zhě 0x4E7E:qián,gān 0x4E7F:zhì,luàn 0x4E80:guī 0x4E81:gān 0x4E82:luàn 0x4E83:lǐn,lìn 0x4E84:yì 0x4E85:jué 0x4E86:le,liǎo,liào 0x4E87:ma 0x4E88:yǔ,yú,zhù 0x4E89:zhēng 0x4E8A:shì 0x4E8B:shì,zì 0x4E8C:èr 0x4E8D:chù 0x4E8E:yú,wéi,yū,xū 0x4E8F:kuī,yú 0x4E90:yú 0x4E91:yún 0x4E92:hù 0x4E93:qí 0x4E94:wǔ 0x4E95:jǐng,jìng 0x4E96:sì 0x4E97:suì 0x4E98:gèn,xuān,gèng 0x4E99:gèn,gèng 0x4E9A:yà 0x4E9B:xiē,suò,suō 0x4E9C:yà 0x4E9D:qí,zhāi 0x4E9E:yà,yā,è 0x4E9F:jí,qì 0x4EA0:tóu 0x4EA1:wáng,wú 0x4EA2:kàng,gāng,gēng 0x4EA3:dà 0x4EA4:jiāo 0x4EA5:hài,jiē 0x4EA6:yì 0x4EA7:chǎn 0x4EA8:hēng,xiǎng,pēng 0x4EA9:mǔ 0x4EAA:ye 0x4EAB:xiǎng 0x4EAC:jīng 0x4EAD:tíng 0x4EAE:liàng,liáng 0x4EAF:xiǎng 0x4EB0:jīng 0x4EB1:yè 0x4EB2:qīn,qìng 0x4EB3:bó 0x4EB4:yòu 0x4EB5:xiè 0x4EB6:dǎn,dàn,chán,zhān 0x4EB7:lián 0x4EB8:duǒ 0x4EB9:wěi,mén 0x4EBA:rén 0x4EBB:rén 0x4EBC:jí 0x4EBD:jí 0x4EBE:wáng 0x4EBF:yì 0x4EC0:shén,shí 0x4EC1:rén 0x4EC2:lè,lì 0x4EC3:dīng,dǐng 0x4EC4:zè 0x4EC5:jǐn,fù,nú,jìn 0x4EC6:pū,pú 0x4EC7:chóu,qiú,jū 0x4EC8:bā 0x4EC9:zhǎng 0x4ECA:jīn 0x4ECB:jiè,gè 0x4ECC:bīng 0x4ECD:réng 0x4ECE:cóng,cōng 0x4ECF:fó 0x4ED0:sǎn 0x4ED1:lún 0x4ED2:bīng 0x4ED3:cāng 0x4ED4:zǎi,zǐ,zī 0x4ED5:shì 0x4ED6:tā,tuó 0x4ED7:zhàng 0x4ED8:fù 0x4ED9:xiān,xiǎn 0x4EDA:xiān 0x4EDB:tuō,duó,chà,zhé 0x4EDC:hóng 0x4EDD:tóng 0x4EDE:rèn 0x4EDF:qiān 0x4EE0:gǎn,hàn 0x4EE1:gē,yì,wù 0x4EE2:bó 0x4EE3:dài 0x4EE4:lìng,líng,lián,lǐng 0x4EE5:yǐ,sì 0x4EE6:chào 0x4EE7:cháng 0x4EE8:sā 0x4EE9:cháng 0x4EEA:yí 0x4EEB:mù 0x4EEC:men 0x4EED:rèn 0x4EEE:fǎn 0x4EEF:chào,miǎo 0x4EF0:yǎng,áng 0x4EF1:qián,jīng 0x4EF2:zhòng 0x4EF3:pǐ,pí,bì 0x4EF4:wò 0x4EF5:wǔ 0x4EF6:jiàn,móu 0x4EF7:jià,jiè,jie 0x4EF8:yǎo,fó 0x4EF9:fēng 0x4EFA:cāng 0x4EFB:rèn,rén,lìn 0x4EFC:wáng 0x4EFD:fèn,bīn 0x4EFE:dī 0x4EFF:fǎng,páng 0x4F00:zhōng 0x4F01:qǐ 0x4F02:pèi 0x4F03:yú,yǔ,xù 0x4F04:diào 0x4F05:dùn 0x4F06:wù 0x4F07:yì 0x4F08:xǐn,lǐn 0x4F09:kàng,gāng,kǎng 0x4F0A:yī 0x4F0B:jí,fán 0x4F0C:ài 0x4F0D:wǔ 0x4F0E:jì,zhì,qí,qì 0x4F0F:fú,fù 0x4F10:fá 0x4F11:xiū,xù 0x4F12:jìn,yín 0x4F13:pī 0x4F14:dǎn 0x4F15:fū 0x4F16:tǎng 0x4F17:zhòng,yín 0x4F18:yōu,yóu 0x4F19:huǒ,huo 0x4F1A:huì,kuài 0x4F1B:yǔ 0x4F1C:cuì 0x4F1D:yún 0x4F1E:sǎn 0x4F1F:wěi 0x4F20:chuán,zhuàn 0x4F21:chē 0x4F22:yá 0x4F23:qiàn,xiàn 0x4F24:shāng 0x4F25:chāng 0x4F26:lún 0x4F27:cāng,chen 0x4F28:xùn 0x4F29:xìn 0x4F2A:wěi 0x4F2B:zhù 0x4F2C:ze 0x4F2D:xián 0x4F2E:nǔ 0x4F2F:bó,mò,bà,bǎi 0x4F30:gū,gù 0x4F31:nǐ 0x4F32:nì,nǐ 0x4F33:xiè 0x4F34:bàn,pàn 0x4F35:xù 0x4F36:líng 0x4F37:zhòu 0x4F38:shēn 0x4F39:qū,zù 0x4F3A:cì,sì 0x4F3B:bēng 0x4F3C:shì,sì 0x4F3D:gā,jiā,qié 0x4F3E:pī 0x4F3F:yì 0x4F40:sì 0x4F41:yǐ,ǎi,sì,chì 0x4F42:zhēng 0x4F43:diàn,tián 0x4F44:hān,gàn 0x4F45:mài 0x4F46:dàn,tǎn,yàn 0x4F47:zhù 0x4F48:bù 0x4F49:qū,qiā 0x4F4A:bǐ 0x4F4B:zhāo,sháo,shào 0x4F4C:cǐ 0x4F4D:wèi,lì 0x4F4E:dī 0x4F4F:zhù 0x4F50:zuǒ 0x4F51:yòu 0x4F52:yǎng,yāng 0x4F53:tǐ,bèn,cuì,tī 0x4F54:zhàn,chān,diān 0x4F55:hé,hè 0x4F56:bì 0x4F57:tuó,tuō,tuò,yí 0x4F58:shé 0x4F59:yú,tú,xú,yù 0x4F5A:yì,dié 0x4F5B:fú,bó,bì,fó 0x4F5C:zuò,zuō,zuó 0x4F5D:gōu,kòu,jū 0x4F5E:nìng 0x4F5F:tóng 0x4F60:nǐ 0x4F61:xiān 0x4F62:qú 0x4F63:yōng,yòng 0x4F64:wǎ 0x4F65:qiān 0x4F66:shi 0x4F67:kǎ 0x4F68:bāo 0x4F69:pèi 0x4F6A:huí,huái 0x4F6B:hè,gé 0x4F6C:lǎo,liáo 0x4F6D:xiáng 0x4F6E:gé,é 0x4F6F:yáng 0x4F70:bǎi,mò 0x4F71:fǎ 0x4F72:mǐng 0x4F73:jiā 0x4F74:èr,nài 0x4F75:bìng 0x4F76:jí 0x4F77:hěn,héng 0x4F78:huó 0x4F79:guǐ,guī 0x4F7A:quán 0x4F7B:tiāo,tiáo,tiào,diǎo,yáo,dào,zhào 0x4F7C:jiǎo,jiāo,xiáo 0x4F7D:cì 0x4F7E:yì 0x4F7F:shǐ 0x4F80:xíng 0x4F81:shēn 0x4F82:tuō 0x4F83:kǎn 0x4F84:zhí 0x4F85:gāi,hài 0x4F86:lái,lài 0x4F87:yí 0x4F88:chǐ 0x4F89:kuǎ,huá,è,wú 0x4F8A:guāng 0x4F8B:lì,liè 0x4F8C:yīn 0x4F8D:shì 0x4F8E:mǐ 0x4F8F:zhū,zhōu 0x4F90:xù 0x4F91:yòu 0x4F92:ān,ǎn 0x4F93:lù 0x4F94:móu,máo 0x4F95:ér 0x4F96:lún,lùn 0x4F97:dòng,tōng,tóng,tǒng 0x4F98:chà 0x4F99:chī 0x4F9A:xùn,xún 0x4F9B:gōng,gòng 0x4F9C:zhōu 0x4F9D:yī,yǐ 0x4F9E:rú 0x4F9F:cún,jiàn 0x4FA0:xiá 0x4FA1:sì 0x4FA2:dài 0x4FA3:lǚ 0x4FA4:ta 0x4FA5:jiǎo,yáo 0x4FA6:zhēn 0x4FA7:cè,zè,zhāi 0x4FA8:qiáo 0x4FA9:kuài 0x4FAA:chái 0x4FAB:nìng 0x4FAC:nóng 0x4FAD:jǐn 0x4FAE:wǔ 0x4FAF:hóu,hòu 0x4FB0:jiǒng 0x4FB1:chěng,tǐng 0x4FB2:zhèn,zhēn,chēn 0x4FB3:zuò 0x4FB4:chǒu 0x4FB5:qīn,qǐn 0x4FB6:lǚ 0x4FB7:jú 0x4FB8:shù,dōu 0x4FB9:tǐng 0x4FBA:shèn 0x4FBB:tuì,tuō 0x4FBC:bó 0x4FBD:nán 0x4FBE:xiāo 0x4FBF:biàn,pián,biān 0x4FC0:tuǐ 0x4FC1:yǔ 0x4FC2:xì 0x4FC3:cù,chuò 0x4FC4:é 0x4FC5:qiú 0x4FC6:xú,shū 0x4FC7:guàng 0x4FC8:kù 0x4FC9:wǔ,wú 0x4FCA:jùn,shùn,dūn 0x4FCB:yì 0x4FCC:fǔ 0x4FCD:liáng,lǎng 0x4FCE:zǔ 0x4FCF:qiào,xiào,xiāo 0x4FD0:lì 0x4FD1:yǒng 0x4FD2:hùn 0x4FD3:jìng,yíng 0x4FD4:qiàn,xiàn 0x4FD5:sàn 0x4FD6:pěi 0x4FD7:sú 0x4FD8:fú 0x4FD9:xī 0x4FDA:lǐ,lì 0x4FDB:fǔ,miǎn 0x4FDC:pīng 0x4FDD:bǎo 0x4FDE:yú,shù 0x4FDF:qí,sì 0x4FE0:xiá 0x4FE1:xìn,shēn 0x4FE2:xiū 0x4FE3:yǔ 0x4FE4:dì 0x4FE5:chē,jū 0x4FE6:chóu 0x4FE7:zhì 0x4FE8:yǎn 0x4FE9:liǎ,liǎng 0x4FEA:lì 0x4FEB:lái 0x4FEC:sī 0x4FED:jiǎn 0x4FEE:xiū 0x4FEF:fǔ 0x4FF0:huò 0x4FF1:jù,jū 0x4FF2:xiào 0x4FF3:pái 0x4FF4:jiàn 0x4FF5:biào 0x4FF6:chù,shū,tì 0x4FF7:fèi 0x4FF8:fèng,běng 0x4FF9:yà,yā 0x4FFA:ǎn,yàn 0x4FFB:bèi 0x4FFC:yù 0x4FFD:xīn 0x4FFE:bǐ,bì,bēi,pì 0x4FFF:hǔ,chí 0x5000:chāng,chéng,zhèng 0x5001:zhī 0x5002:bìng 0x5003:jiù 0x5004:yáo 0x5005:cuì,zú 0x5006:liǎ,liǎng 0x5007:wǎn 0x5008:lái,lài,liē 0x5009:cāng,chuàng 0x500A:zòng 0x500B:gè,gě 0x500C:guān 0x500D:bèi,péi 0x500E:tiǎn 0x500F:shū 0x5010:shū 0x5011:men,mèn,mén 0x5012:dào,dǎo 0x5013:tán,dàn,tàn 0x5014:jué,juè 0x5015:chuí,zhuì 0x5016:xìng 0x5017:péng,pěng,píng 0x5018:tǎng,cháng 0x5019:hòu 0x501A:yǐ,jī,yī 0x501B:qī,qí,qì 0x501C:tì,diào,zhōu 0x501D:gàn 0x501E:jìng,liàng 0x501F:jiè 0x5020:suī 0x5021:chàng,chāng 0x5022:jié,qiè 0x5023:fǎng 0x5024:zhí 0x5025:kōng,kǒng 0x5026:juàn 0x5027:zōng 0x5028:jù 0x5029:qiàn,qìng 0x502A:ní,nì,niè 0x502B:lún 0x502C:zhuō 0x502D:wō,wēi,wǒ 0x502E:luǒ 0x502F:sōng 0x5030:lèng,líng 0x5031:hùn 0x5032:dōng,dòng 0x5033:zì 0x5034:bèn,bēn 0x5035:wǔ 0x5036:jù 0x5037:nǎi 0x5038:cǎi 0x5039:jiǎn 0x503A:zhài 0x503B:yē 0x503C:zhí 0x503D:shà 0x503E:qīng 0x503F:nìng 0x5040:yīng 0x5041:chēng 0x5042:qián 0x5043:yǎn 0x5044:ruǎn,rú 0x5045:zhòng,chōng,tóng 0x5046:chǔn 0x5047:jiǎ,jià,jie,xià,xiá,gé 0x5048:jì,jié,qì 0x5049:wěi 0x504A:yǔ 0x504B:bìng,bǐng 0x504C:ruò,rè 0x504D:tí 0x504E:wēi 0x504F:piān 0x5050:yàn 0x5051:fēng 0x5052:tǎng,dàng 0x5053:wò 0x5054:è 0x5055:xié,jiē 0x5056:chě 0x5057:shěng 0x5058:kǎn 0x5059:dì 0x505A:zuò 0x505B:chā 0x505C:tíng 0x505D:bèi 0x505E:xiè,yè,zhá 0x505F:huáng 0x5060:yǎo 0x5061:zhàn 0x5062:chǒu,qiào,zōu 0x5063:yān 0x5064:yóu 0x5065:jiàn 0x5066:xǔ,xū 0x5067:zhā 0x5068:cī 0x5069:fù 0x506A:bī,fù 0x506B:zhì 0x506C:zǒng,cōng 0x506D:miǎn 0x506E:jí 0x506F:yǐ 0x5070:xiè 0x5071:xún 0x5072:cāi,sī,sǐ 0x5073:duān 0x5074:cè,zè,zhāi 0x5075:zhēn,zhēng 0x5076:ǒu 0x5077:tōu 0x5078:tōu 0x5079:bèi 0x507A:zá,zán,zan 0x507B:lóu,lǚ 0x507C:jié 0x507D:wěi,wéi,é,guì 0x507E:fèn 0x507F:cháng 0x5080:guī,kuài,kuǐ 0x5081:sǒu 0x5082:zhì,sī 0x5083:sù 0x5084:xiā 0x5085:fù,fū 0x5086:yuàn,yuán 0x5087:rǒng 0x5088:lì 0x5089:nù 0x508A:yùn 0x508B:jiǎng,gòu 0x508C:mà,mǎ 0x508D:bàng,páng,bēng,péng 0x508E:diān 0x508F:táng 0x5090:hào 0x5091:jié 0x5092:xī,xì 0x5093:shàn 0x5094:qiàn,jiān 0x5095:jué,què 0x5096:cāng,chéng,chen 0x5097:chù 0x5098:sǎn 0x5099:bèi 0x509A:xiào 0x509B:yǒng,róng 0x509C:yáo 0x509D:tàn,tà 0x509E:suō 0x509F:yǎng 0x50A0:fá 0x50A1:bìng 0x50A2:jiā,xiàng 0x50A3:dǎi 0x50A4:zài 0x50A5:tǎng 0x50A6:gǔ 0x50A7:bīn 0x50A8:chǔ 0x50A9:nuó 0x50AA:cān,sǎn,càn,cā,sēn 0x50AB:lěi 0x50AC:cuī 0x50AD:yōng,chōng,yòng 0x50AE:zāo,cáo 0x50AF:zǒng 0x50B0:bēng,péng 0x50B1:sǒng,shuǎng 0x50B2:ào,áo 0x50B3:chuán,zhuàn 0x50B4:yǔ 0x50B5:zhài 0x50B6:zú,qī 0x50B7:shāng 0x50B8:chuǎng 0x50B9:jìng 0x50BA:chì 0x50BB:shǎ 0x50BC:hàn 0x50BD:zhāng 0x50BE:qīng,qǐng 0x50BF:yàn,yān,yìn 0x50C0:dì 0x50C1:xiè,sù 0x50C2:lóu,liǔ,lǚ 0x50C3:bèi 0x50C4:piào,biāo 0x50C5:jǐn,jìn 0x50C6:liàn,lián 0x50C7:lù,liáo 0x50C8:mán,màn 0x50C9:qiān 0x50CA:xiān 0x50CB:tàn,làn,tǎn 0x50CC:yíng 0x50CD:dòng 0x50CE:zhuàn,zūn 0x50CF:xiàng 0x50D0:shàn 0x50D1:qiáo,jiǎo 0x50D2:jiǒng 0x50D3:tuǐ,tuí 0x50D4:zǔn,cuán 0x50D5:pú,pū,bú 0x50D6:xī 0x50D7:láo,lào 0x50D8:chǎng 0x50D9:guāng 0x50DA:liáo,liǎo,lǎo 0x50DB:qī 0x50DC:chēng,dèng,dēng,téng 0x50DD:chán,zhuàn 0x50DE:wěi 0x50DF:jī 0x50E0:bō 0x50E1:huì 0x50E2:chuǎn,chǔn 0x50E3:tiě,jiàn 0x50E4:dàn,chán,chǎn,shàn,dá 0x50E5:jiǎo,yáo,jiāo 0x50E6:jiù 0x50E7:sēng,céng 0x50E8:fèn 0x50E9:xiàn 0x50EA:jú,yù 0x50EB:è 0x50EC:jiāo,jiào,jiǎo 0x50ED:jiàn,zèn 0x50EE:tóng,zhuàng,chòng 0x50EF:lìn,lǐn 0x50F0:bó 0x50F1:gù 0x50F2:xiān 0x50F3:sù 0x50F4:xiàn 0x50F5:jiāng 0x50F6:mǐn 0x50F7:yè 0x50F8:jìn 0x50F9:jià,qiǎ,jie 0x50FA:qiào 0x50FB:pì 0x50FC:fēng 0x50FD:zhòu,zhōu 0x50FE:ài 0x50FF:sài 0x5100:yí 0x5101:jùn 0x5102:nóng 0x5103:chán,shàn,tǎn,dàn,zhǎn 0x5104:yì,yī 0x5105:dàng,dāng 0x5106:jǐng 0x5107:xuān,xuán 0x5108:kuài 0x5109:jiǎn 0x510A:chù 0x510B:dān,dàn,shàn 0x510C:jiǎo,jiāo 0x510D:shǎ 0x510E:zài 0x510F:càn 0x5110:bīn,bìn 0x5111:án,àn 0x5112:rú 0x5113:tái,tài 0x5114:chóu,dào 0x5115:chái 0x5116:lán 0x5117:nǐ,yí,yì,ài 0x5118:jǐn,jìn 0x5119:qiàn 0x511A:méng 0x511B:wǔ 0x511C:níng 0x511D:qióng 0x511E:nǐ 0x511F:cháng 0x5120:liè,là 0x5121:lěi,léi,lèi 0x5122:lǚ 0x5123:kuǎng 0x5124:bào 0x5125:yù,dí,dú 0x5126:biāo 0x5127:zǎn 0x5128:zhì 0x5129:sì 0x512A:yōu 0x512B:háo 0x512C:qìng 0x512D:chèn,qìn,qīn 0x512E:lì 0x512F:téng 0x5130:wěi 0x5131:lǒng,lòng,lóng 0x5132:chǔ,chú 0x5133:chán,chàn 0x5134:ráng,xiāng 0x5135:shū,tiáo 0x5136:huì,xié 0x5137:lì,lí 0x5138:luó 0x5139:zǎn 0x513A:nuó 0x513B:tǎng,tàng,chǎng 0x513C:yǎn 0x513D:léi,lěi,luǒ 0x513E:nàng 0x513F:ér,rén 0x5140:wù,wū 0x5141:yǔn,yuán 0x5142:zān 0x5143:yuán 0x5144:xiōng,kuàng 0x5145:chōng 0x5146:zhào 0x5147:xiōng 0x5148:xiān 0x5149:guāng,guàng 0x514A:duì 0x514B:kè 0x514C:duì 0x514D:miǎn,wèn,wǎn 0x514E:tù 0x514F:cháng 0x5150:ér 0x5151:duì,ruì,duó 0x5152:ér,ní 0x5153:jīn,zàn 0x5154:tù,tú,chān 0x5155:sì 0x5156:yǎn 0x5157:yǎn 0x5158:shǐ 0x515A:dǎng 0x515B:qiān 0x515C:dōu 0x515D:fēn 0x515E:máo 0x515F:shēn 0x5160:dōu 0x5162:jīng 0x5163:lǐ 0x5164:huǎng 0x5165:rù 0x5166:wáng 0x5167:nèi 0x5168:quán 0x5169:liǎng,liàng 0x516A:yú,yù,shù,shū,zhū 0x516B:bā,bá 0x516C:gōng 0x516D:liù,lù 0x516E:xī 0x516F:han 0x5170:lán 0x5171:gòng,gōng,gǒng,hóng 0x5172:tiān 0x5173:guān 0x5174:xìng,xīng 0x5175:bīng 0x5176:qí,jī,jì 0x5177:jù 0x5178:diǎn,tiǎn 0x5179:zī,cí 0x517A:fēn 0x517B:yǎng 0x517C:jiān 0x517D:shòu 0x517E:jì 0x517F:yì 0x5180:jì 0x5181:chǎn 0x5182:jiōng,jiǒng 0x5183:mào 0x5184:rǎn 0x5185:nèi,nà,ruì 0x5186:yuán 0x5187:mǎo 0x5188:gāng 0x5189:rǎn,nán,dān 0x518A:cè 0x518B:jiōng,jiǒng 0x518C:cè,zhà 0x518D:zài 0x518E:guǎ 0x518F:jiǒng,jiōng 0x5190:mào 0x5191:zhòu 0x5192:mào,mò 0x5193:gòu,gōu 0x5194:xǔ 0x5195:miǎn 0x5196:mì 0x5197:rǒng 0x5198:yín,yóu 0x5199:xiě,xiè 0x519A:kǎn 0x519B:jūn 0x519C:nóng 0x519D:yí 0x519E:mí 0x519F:shì 0x51A0:guān,guàn 0x51A1:méng 0x51A2:zhǒng 0x51A3:jù 0x51A4:yuān 0x51A5:míng,mián,miàn 0x51A6:kòu 0x51A7:lín 0x51A8:fù 0x51A9:xiě 0x51AA:mì 0x51AB:bīng 0x51AC:dōng 0x51AD:tài 0x51AE:gāng 0x51AF:féng,píng 0x51B0:bīng,níng 0x51B1:hù 0x51B2:chōng,chòng 0x51B3:jué 0x51B4:hù 0x51B5:kuàng 0x51B6:yě 0x51B7:lěng,líng,lǐng 0x51B8:pàn 0x51B9:fú 0x51BA:mǐn 0x51BB:dòng 0x51BC:xiǎn,shěng 0x51BD:liè 0x51BE:qià 0x51BF:jiān 0x51C0:jìng,chēng 0x51C1:sōu 0x51C2:měi 0x51C3:tú 0x51C4:qī 0x51C5:gù 0x51C6:zhǔn 0x51C7:sōng 0x51C8:jìng 0x51C9:liáng,liàng 0x51CA:qìng 0x51CB:diāo 0x51CC:líng,lìng 0x51CD:dòng 0x51CE:gàn 0x51CF:jiǎn 0x51D0:yīn 0x51D1:còu 0x51D2:ái 0x51D3:lì 0x51D4:chuàng,cāng 0x51D5:mǐng 0x51D6:zhǔn 0x51D7:cuī 0x51D8:sī 0x51D9:duó 0x51DA:jìn 0x51DB:lǐn 0x51DC:lǐn 0x51DD:níng 0x51DE:xī 0x51DF:dú 0x51E0:jǐ,jī 0x51E1:fán 0x51E2:fán 0x51E3:fán 0x51E4:fèng 0x51E5:jū 0x51E6:chǔ,chù 0x51E7:zhēng 0x51E8:fēng 0x51E9:mù 0x51EA:zhǐ 0x51EB:fú 0x51EC:fēng 0x51ED:píng 0x51EE:fēng 0x51EF:kǎi 0x51F0:huáng 0x51F1:kǎi 0x51F2:gān 0x51F3:dèng 0x51F4:píng 0x51F5:qiǎn,kǎn 0x51F6:xiōng 0x51F7:kuài 0x51F8:tū 0x51F9:āo,wā 0x51FA:chū 0x51FB:jī 0x51FC:dàng 0x51FD:hán 0x51FE:hán 0x51FF:záo,zuò 0x5200:dāo,diāo 0x5201:diāo 0x5202:dāo 0x5203:rèn 0x5204:rèn 0x5205:chuāng 0x5206:fēn,fèn,fén 0x5207:qiè,qiē,qì 0x5208:yì 0x5209:jī 0x520A:kān 0x520B:qiàn 0x520C:cǔn 0x520D:chú 0x520E:wěn 0x520F:jī 0x5210:dǎn 0x5211:xíng 0x5212:huà,guò,guǒ,huá,huai 0x5213:wán 0x5214:jué 0x5215:lí 0x5216:yuè 0x5217:liè,lì 0x5218:liú 0x5219:zé 0x521A:gāng 0x521B:chuàng,chuāng 0x521C:fú 0x521D:chū 0x521E:qù 0x521F:diāo 0x5220:shān 0x5221:mǐn 0x5222:líng 0x5223:zhōng 0x5224:pàn 0x5225:bié 0x5226:jié 0x5227:jié 0x5228:páo,bào 0x5229:lì 0x522A:shān 0x522B:bié,biè 0x522C:chǎn,chàn 0x522D:jǐng 0x522E:guā 0x522F:gēng 0x5230:dào 0x5231:chuàng 0x5232:kuī 0x5233:kū,kōu 0x5234:duò 0x5235:èr 0x5236:zhì 0x5237:shuā,shuà 0x5238:quàn,xuàn 0x5239:shā,chà 0x523A:cì,qì,cī 0x523B:kè,kēi 0x523C:jié 0x523D:guì 0x523E:cì 0x523F:guì 0x5240:kǎi 0x5241:duò 0x5242:jì 0x5243:tì 0x5244:jǐng 0x5245:lóu,dōu 0x5246:luǒ 0x5247:zé 0x5248:yuān 0x5249:cuò 0x524A:xuē,qiào,xiāo,shào 0x524B:kè,kēi 0x524C:lá,là 0x524D:qián,jiǎn 0x524E:shā 0x524F:chuàng 0x5250:guǎ 0x5251:jiàn 0x5252:cuò 0x5253:lí 0x5254:tī,tì 0x5255:fèi 0x5256:pōu,pǒ 0x5257:chǎn,chàn 0x5258:qí 0x5259:chuàng 0x525A:zì 0x525B:gāng 0x525C:wān 0x525D:bō 0x525E:jī 0x525F:duō,chì 0x5260:qíng,lüè 0x5261:shàn,yǎn 0x5262:dū,zhuó 0x5263:jiàn 0x5264:jì 0x5265:bō,bāo,pū 0x5266:yān 0x5267:jù 0x5268:huō,huò 0x5269:shèng 0x526A:jiǎn 0x526B:duó,dù 0x526C:duān,tuán,zhì 0x526D:wū 0x526E:guǎ 0x526F:fù,pì 0x5270:shèng 0x5271:jiàn 0x5272:gē 0x5273:dá,zhá 0x5274:kǎi,āi 0x5275:chuàng,chuāng,qiāng 0x5276:chuān 0x5277:chǎn 0x5278:tuán,zhuān,zhuàn 0x5279:lù,jiū 0x527A:lí 0x527B:pěng 0x527C:shān 0x527D:piāo,piào,piáo,biǎo,biāo 0x527E:kōu 0x527F:jiǎo,chāo 0x5280:guā 0x5281:qiāo,qiáo 0x5282:jué 0x5283:huà,huá,huai 0x5284:zhā,zhá 0x5285:zhuó 0x5286:lián 0x5287:jù 0x5288:pī,pǐ 0x5289:liú 0x528A:guì 0x528B:jiǎo,chāo 0x528C:guì 0x528D:jiàn 0x528E:jiàn 0x528F:tāng 0x5290:huō,huò,huá 0x5291:jì 0x5292:jiàn 0x5293:yì 0x5294:jiàn 0x5295:zhì 0x5296:chán 0x5297:jiǎn,zuān 0x5298:mó,mí 0x5299:lí 0x529A:zhǔ 0x529B:lì 0x529C:yà 0x529D:quàn 0x529E:bàn 0x529F:gōng 0x52A0:jiā 0x52A1:wù 0x52A2:mài 0x52A3:liè 0x52A4:jìn 0x52A5:kēng 0x52A6:xié,liè 0x52A7:zhǐ 0x52A8:dòng 0x52A9:zhù,chú 0x52AA:nǔ 0x52AB:jié 0x52AC:qú 0x52AD:shào 0x52AE:yì 0x52AF:zhū 0x52B0:mò 0x52B1:lì 0x52B2:jìn,jìng 0x52B3:láo 0x52B4:láo 0x52B5:juàn 0x52B6:kǒu 0x52B7:yáng 0x52B8:wā 0x52B9:xiào 0x52BA:móu 0x52BB:kuāng 0x52BC:jié 0x52BD:liè 0x52BE:hé,kài 0x52BF:shì 0x52C0:kè 0x52C1:jìn,jìng 0x52C2:gào 0x52C3:bó 0x52C4:mǐn 0x52C5:chì 0x52C6:láng 0x52C7:yǒng 0x52C8:yǒng 0x52C9:miǎn 0x52CA:kè 0x52CB:xūn 0x52CC:juàn,juān 0x52CD:qíng 0x52CE:lù 0x52CF:bù 0x52D0:měng 0x52D1:chì,lài 0x52D2:lēi,lè,lei 0x52D3:kài 0x52D4:miǎn 0x52D5:dòng 0x52D6:xù,mào 0x52D7:xù 0x52D8:kān 0x52D9:wù,wǔ,wú,máo,mào 0x52DA:yì 0x52DB:xūn 0x52DC:wěng,yǎng 0x52DD:shèng 0x52DE:láo,lào,liáo 0x52DF:mù,bó 0x52E0:lù 0x52E1:piào 0x52E2:shì 0x52E3:jī 0x52E4:qín,qí 0x52E5:jiàng,qiǎng,jiǎng 0x52E6:chāo,jiǎo,cháo 0x52E7:quàn 0x52E8:xiàng 0x52E9:yì 0x52EA:jué 0x52EB:fān 0x52EC:juān 0x52ED:tóng,dòng 0x52EE:jù 0x52EF:dān 0x52F0:xié 0x52F1:mài 0x52F2:xūn 0x52F3:xūn 0x52F4:lǜ 0x52F5:lì 0x52F6:chè 0x52F7:ráng,xiāng 0x52F8:quàn 0x52F9:bāo 0x52FA:sháo,shuò,zhuó,dì 0x52FB:yún 0x52FC:jiū 0x52FD:bào 0x52FE:gōu,gòu 0x52FF:wù,mò 0x5300:yún,jūn,yùn 0x5301:wén 0x5302:xiōng 0x5303:gài 0x5304:gài 0x5305:bāo,páo,fú 0x5306:cōng 0x5307:yì 0x5308:xiōng 0x5309:pēng 0x530A:jū 0x530B:táo,yáo 0x530C:gé 0x530D:pú 0x530E:è 0x530F:páo 0x5310:fú 0x5311:gōng 0x5312:dá 0x5313:jiù 0x5314:gōng 0x5315:bǐ,pìn 0x5316:huà,huā,huò 0x5317:běi,bèi 0x5318:nǎo 0x5319:shi,chí 0x531A:fāng,fàng 0x531B:jiù 0x531C:yí 0x531D:zā 0x531E:jiàng 0x531F:kàng 0x5320:jiàng 0x5321:kuāng,wāng 0x5322:hū 0x5323:xiá 0x5324:qū 0x5325:fán 0x5326:guǐ 0x5327:qiè 0x5328:zāng,cáng 0x5329:kuāng 0x532A:fěi,fēi,fēn 0x532B:hū 0x532C:yǔ 0x532D:guǐ 0x532E:kuì 0x532F:huì 0x5330:dān 0x5331:guì,kuì 0x5332:lián 0x5333:lián 0x5334:suǎn 0x5335:dú 0x5336:jiù 0x5337:jué 0x5338:xì 0x5339:pǐ 0x533A:qū,ōu 0x533B:yī,yì 0x533C:kē,ē,ǎn 0x533D:yǎn,yàn 0x533E:biǎn 0x533F:nì,tè 0x5340:qū,ōu,gōu,qiū,kòu 0x5341:shí 0x5342:xùn 0x5343:qiān 0x5344:niàn 0x5345:sà 0x5346:zú 0x5347:shēng 0x5348:wǔ 0x5349:huì 0x534A:bàn,pàn 0x534B:shì 0x534C:xì 0x534D:wàn 0x534E:huá,huà 0x534F:xié 0x5350:wàn 0x5351:bēi,bǐ,bì,pí,bān 0x5352:zú,cù,cuì 0x5353:zhuó,zhuō 0x5354:xié 0x5355:dān,chán,shàn 0x5356:mài 0x5357:nán,nā 0x5358:dān 0x5359:jí,chì 0x535A:bó 0x535B:shuài 0x535C:bo,bǔ,pū 0x535D:kuàng,guàn 0x535E:biàn,pán 0x535F:bǔ,jī 0x5360:zhàn,zhān,tiē 0x5361:kǎ,qiǎ 0x5362:lú 0x5363:yǒu 0x5364:lǔ,xī 0x5365:xī 0x5366:guà 0x5367:wò 0x5368:xiè 0x5369:jié 0x536A:jié 0x536B:wèi 0x536C:áng,yǎng 0x536D:qióng 0x536E:zhī 0x536F:mǎo 0x5370:yìn,yì 0x5371:wēi 0x5372:shào 0x5373:jí 0x5374:què 0x5375:luǎn,kūn 0x5376:chǐ 0x5377:juǎn,juàn,quán,quān,gǔn,jùn 0x5378:xiè 0x5379:xù,sū 0x537A:jǐn 0x537B:què,jiǎo,xì 0x537C:wù 0x537D:jí 0x537E:è 0x537F:qīng 0x5380:xī 0x5381:sān 0x5382:chǎng,hǎn,yán,ān 0x5383:wěi,yán 0x5384:è,ě 0x5385:tīng 0x5386:lì 0x5387:zhé,zhái 0x5388:hǎn,àn 0x5389:lì 0x538A:yǎ 0x538B:yā,yà 0x538C:yàn 0x538D:shè 0x538E:dǐ,zhǐ 0x538F:zhǎ,zhǎi 0x5390:páng 0x5391:yá 0x5392:qiè 0x5393:yá,ái 0x5394:zhì,shī 0x5395:cè,si 0x5396:páng,máng 0x5397:tí 0x5398:lí,chán 0x5399:shè 0x539A:hòu 0x539B:tīng 0x539C:zuī 0x539D:cuò,jí 0x539E:fèi 0x539F:yuán 0x53A0:cè 0x53A1:yuán 0x53A2:xiāng 0x53A3:yǎn 0x53A4:lì 0x53A5:jué 0x53A6:shà,xià 0x53A7:diān 0x53A8:chú 0x53A9:jiù 0x53AA:jǐn 0x53AB:áo 0x53AC:guǐ 0x53AD:yàn,yā,yǎn,yān,yì 0x53AE:sī 0x53AF:lì 0x53B0:chǎng 0x53B1:lán,qiān 0x53B2:lì,lài 0x53B3:yán 0x53B4:yǎn 0x53B5:yuán 0x53B6:sī,mǒu 0x53B7:gōng,hóng 0x53B8:lín,min 0x53B9:róu,qiú 0x53BA:qù 0x53BB:qù,qū 0x53BC:ěr 0x53BD:lěi 0x53BE:dū,dǔ 0x53BF:xiàn 0x53C0:zhuān,huì 0x53C1:sān 0x53C2:cān,cēn,shēn 0x53C3:cān,shēn,sān,cēn,càn,sǎn 0x53C4:cān 0x53C5:cān 0x53C6:ài 0x53C7:dài 0x53C8:yòu 0x53C9:chā,chá,chǎ,chà 0x53CA:jí 0x53CB:yǒu 0x53CC:shuāng 0x53CD:fǎn,fàn 0x53CE:shōu 0x53CF:guài 0x53D0:bá 0x53D1:fā,fà 0x53D2:ruò 0x53D3:shì,lì 0x53D4:shū 0x53D5:zhuó,yǐ,lì,jué 0x53D6:qǔ,qū 0x53D7:shòu,dào 0x53D8:biàn 0x53D9:xù 0x53DA:jiǎ,xiá 0x53DB:pàn 0x53DC:sǒu 0x53DD:jí 0x53DE:wèi 0x53DF:sǒu,sōu,xiāo 0x53E0:dié 0x53E1:ruì 0x53E2:cóng 0x53E3:kǒu 0x53E4:gǔ,gù,kū 0x53E5:jù,gōu,gòu,qú 0x53E6:lìng 0x53E7:guǎ 0x53E8:dāo,tāo,dáo 0x53E9:kòu 0x53EA:zhǐ,zhī 0x53EB:jiào 0x53EC:zhào,shào 0x53ED:bā,pā,ba 0x53EE:dīng 0x53EF:kě,gē,kè 0x53F0:tái,yí,sì,tāi 0x53F1:chì,huà,é 0x53F2:shǐ 0x53F3:yòu 0x53F4:qiú 0x53F5:pǒ 0x53F6:yè,xié 0x53F7:hào,háo,xiāo 0x53F8:sī,cí,sì 0x53F9:tàn,yǐ,yòu 0x53FA:chǐ 0x53FB:lè,lì 0x53FC:diāo 0x53FD:jī,jiào 0x53FE:liǎo 0x53FF:hōng,hóng 0x5400:miē 0x5401:xū,yù,yū 0x5402:máng,màng 0x5403:chī,qī 0x5404:gè,gě 0x5405:xuān,sòng 0x5406:yāo 0x5407:zǐ,jí 0x5408:hé,gě 0x5409:jí 0x540A:diào 0x540B:cùn,dòu,yīng 0x540C:tóng,tòng 0x540D:míng,mìng 0x540E:hòu 0x540F:lì 0x5410:tǔ,tù 0x5411:xiàng 0x5412:zhā,zhà 0x5413:xià,hà,hè 0x5414:yě,yē 0x5415:lǚ 0x5416:yā,ā 0x5417:ma,má,mǎ 0x5418:ǒu 0x5419:huō 0x541A:yī,xī 0x541B:jūn 0x541C:chǒu 0x541D:lìn 0x541E:tūn,tiān 0x541F:yín,yǐn,jìn 0x5420:fèi 0x5421:bǐ,bì,pǐ 0x5422:qìn 0x5423:qìn 0x5424:jiè,gè,xiè 0x5425:bù,pōu 0x5426:fǒu,pǐ 0x5427:ba,bā,pā 0x5428:dūn,tún,tǔn 0x5429:fēn,pèn 0x542A:é,huā 0x542B:hán,hàn 0x542C:tīng,yǐn,yí 0x542D:kēng,háng,hàng 0x542E:shǔn 0x542F:qǐ 0x5430:hóng 0x5431:zhī,zī,qì 0x5432:yǐn,shěn 0x5433:wú,yú 0x5434:wú,tūn 0x5435:chǎo,miǎo,chāo,chào 0x5436:nà 0x5437:xuè,chuò,jué 0x5438:xī 0x5439:chuī,chuì 0x543A:dōu,rú 0x543B:wěn 0x543C:hǒu 0x543D:hōng,ōu,hǒu 0x543E:wú,yú,yá 0x543F:gào 0x5440:ya,xiā,yā 0x5441:jùn 0x5442:lǚ 0x5443:è,ài,e 0x5444:gé 0x5445:méi,wěn 0x5446:dāi,bǎo,ái 0x5447:qǐ 0x5448:chéng,kuáng,chěng 0x5449:wú 0x544A:gào,jū,gù 0x544B:fū 0x544C:jiào 0x544D:hōng 0x544E:chǐ,yīng 0x544F:shēng 0x5450:nà,nè,na,nuò,ne 0x5451:tūn 0x5452:wǔ,ḿ 0x5453:yì 0x5454:dāi,tǎi 0x5455:ǒu,òu 0x5456:lì 0x5457:bei,bài 0x5458:yuán,yún,yùn 0x5459:guō 0x545A:wen 0x545B:qiāng,qiàng 0x545C:wū 0x545D:è 0x545E:shī 0x545F:juǎn 0x5460:pěn 0x5461:wěn,mǐn 0x5462:ne,ní,nǐ,nī 0x5463:ḿ,móu,m̀ 0x5464:lìng,líng 0x5465:rán 0x5466:yōu 0x5467:dǐ 0x5468:zhōu 0x5469:shì 0x546A:zhòu 0x546B:tiè,chè 0x546C:xì,chì 0x546D:yì 0x546E:qì,zhī 0x546F:píng 0x5470:zǐ,cī,jī,xì 0x5471:gū,guā,guǎ 0x5472:cī,cí,zī 0x5473:wèi,mèi 0x5474:xǔ,hǒu,hōu,gòu,gōu,gū 0x5475:hē,hā,ā,a,kē,huō,á,à 0x5476:náo,ná,nǔ 0x5477:gā,xiā,jiǎ 0x5478:pēi 0x5479:yì,chì 0x547A:xiāo,háo 0x547B:shēn 0x547C:hū,xiāo,xū,hè,xià 0x547D:mìng 0x547E:dá,yà,tǎ,dàn 0x547F:qù,kā 0x5480:jǔ,zuǐ 0x5481:hán,xián,gàn 0x5482:zā 0x5483:tuō 0x5484:duō 0x5485:pǒu 0x5486:páo 0x5487:bié,bì 0x5488:fú 0x5489:yāng,yǎng 0x548A:hé 0x548B:zǎ,zé,zhà,zhā 0x548C:hé,hè,huò,huó,hú 0x548D:hāi,tāi 0x548E:jiù,gāo 0x548F:yǒng 0x5490:fù,fú 0x5491:dā 0x5492:zhòu 0x5493:wǎ 0x5494:kā,nòng,kǎ 0x5495:gū,gu 0x5496:kā,jiā,gā 0x5497:zuo 0x5498:bù 0x5499:lóng 0x549A:dōng 0x549B:níng 0x549C:ta 0x549D:sī 0x549E:xiàn,xián 0x549F:huò 0x54A0:qì 0x54A1:èr,ér 0x54A2:è 0x54A3:guāng,gōng 0x54A4:zhà 0x54A5:xì,xī,dié,zhì 0x54A6:yí,xī 0x54A7:liě,liè,liē,lié,lie 0x54A8:zī 0x54A9:miē,mie 0x54AA:mī,miē,mǎi,mǐ 0x54AB:zhǐ 0x54AC:yǎo,jiāo,yāo,jiǎo 0x54AD:jī,xī,qià 0x54AE:zhòu,zhù,zhū,rú 0x54AF:gē,luò,kǎ,kā,lo 0x54B0:shù,xún 0x54B1:zán,zá,zǎ,zan 0x54B2:xiào 0x54B3:hāi,hái,ké,gāi 0x54B4:huī,hái 0x54B5:kuǎ 0x54B6:huài,shì,guō,guā,huà 0x54B7:táo,tiào 0x54B8:xián,jiǎn,jiān 0x54B9:è,àn,ń 0x54BA:xuǎn,xuān 0x54BB:xiū,xǔ,xiāo,xù 0x54BC:guō,wāi,hé,wǒ,wō,guǎ 0x54BD:yàn,yān,yè,yuān 0x54BE:lǎo 0x54BF:yī 0x54C0:āi 0x54C1:pǐn 0x54C2:shěn 0x54C3:tóng 0x54C4:hōng,hòng,hǒng 0x54C5:xiōng,hōng 0x54C6:duō,chǐ,zhà,chì,duò,diě 0x54C7:wa,wā,guī,huá,wá 0x54C8:hā,hà,hē,hé,hǎ,tà,shà 0x54C9:zāi 0x54CA:yòu 0x54CB:diè,dì 0x54CC:pài,gū 0x54CD:xiǎng 0x54CE:āi 0x54CF:gén,hěn,ǹ 0x54D0:kuāng,qiāng 0x54D1:yǎ,yā 0x54D2:dá 0x54D3:xiāo 0x54D4:bì 0x54D5:huì,yuě 0x54D6:nián 0x54D7:huā,huá 0x54D8:xing 0x54D9:kuài 0x54DA:duǒ 0x54DB:fēn 0x54DC:jì 0x54DD:nóng 0x54DE:mōu 0x54DF:yō,yo 0x54E0:hào 0x54E1:yuán,yún,yùn 0x54E2:lòng 0x54E3:pǒu 0x54E4:máng 0x54E5:gē 0x54E6:ó,é,ò 0x54E7:chī,xià,hè 0x54E8:shào,sāo,xiāo,xiào,sào 0x54E9:lī,lì,li,lǐ,mái,yīng 0x54EA:nǎ,nuó,na,nǎi,nà,niè,né,něi 0x54EB:zú 0x54EC:hé 0x54ED:kū 0x54EE:xiāo,xiào,xuē 0x54EF:xiàn 0x54F0:láo 0x54F1:bō,pò,bèi,bā,bó 0x54F2:zhé 0x54F3:zhā 0x54F4:liàng,láng 0x54F5:bā 0x54F6:miē 0x54F7:liè,lǜ 0x54F8:suī 0x54F9:fú 0x54FA:bǔ,bū,fǔ 0x54FB:hān 0x54FC:hēng,hng 0x54FD:gěng,yǐng,yìng,ńg,ń 0x54FE:shuō,yuè 0x54FF:gě 0x5500:yòu 0x5501:yàn 0x5502:gū 0x5503:gǔ 0x5504:bei,bài 0x5505:hán 0x5506:suō,shuà 0x5507:chún,zhēn,zhèn 0x5508:yì 0x5509:āi,ǎi,ài 0x550A:jiá,qiǎn 0x550B:tū 0x550C:xián,yán,dàn 0x550D:wǎn 0x550E:lì 0x550F:xī,xiè 0x5510:táng 0x5511:zuò,shì 0x5512:qiú 0x5513:chē 0x5514:wú,wù,ńg,ḿ,ń 0x5515:zào 0x5516:yǎ 0x5517:dōu 0x5518:qǐ 0x5519:dí 0x551A:qìn,qīn 0x551B:mà 0x551C:mò 0x551D:gòng,hǒng 0x551E:dǒu 0x551F:qù 0x5520:láo,lào 0x5521:liǎng,yīng 0x5522:suǒ 0x5523:zào 0x5524:huàn 0x5525:lang 0x5526:shā 0x5527:jī,jié 0x5528:zǔ 0x5529:wō,wěi 0x552A:fěng,běng 0x552B:jìn,yín 0x552C:hǔ,xiāo,guó,xià,háo 0x552D:qì 0x552E:shòu,shú 0x552F:wéi,wěi 0x5530:shuā 0x5531:chàng 0x5532:ér,wā 0x5533:lì 0x5534:qiàng 0x5535:ǎn,ng,n 0x5536:zé,jiè 0x5537:yō,yù 0x5538:niàn,diàn 0x5539:yū 0x553A:tiǎn 0x553B:lài,lái 0x553C:shà,qiè 0x553D:xī 0x553E:tuò 0x553F:hū 0x5540:ái 0x5541:zhāo,dāo,zhōu,tiáo,diào 0x5542:nǒu 0x5543:kěn 0x5544:zhuó,zhòu 0x5545:zhuó,zhào 0x5546:shāng 0x5547:dì,shì,zhāi 0x5548:hēng,hèng,è,zá 0x5549:lín,lán,lèn 0x554A:a,è,ā,á,ǎ,à 0x554B:cǎi,cāi,xiāo 0x554C:xiāng,qiāng 0x554D:tūn,zhūn,xiāng,tuī,duǐ 0x554E:wǔ 0x554F:wèn 0x5550:cuì,zú,zá,è,chuài 0x5551:shà,zā,jié,dié,tì 0x5552:gǔ 0x5553:qǐ 0x5554:qǐ 0x5555:táo 0x5556:dàn 0x5557:dàn 0x5558:yè,wā 0x5559:zǐ,cī 0x555A:bǐ,tú 0x555B:cuì 0x555C:chuài,chuò,zhuó 0x555D:hé 0x555E:yǎ,è,yā 0x555F:qǐ 0x5560:zhé 0x5561:fēi,pèi,pái,pēi,bài 0x5562:liǎng,yīng 0x5563:xián 0x5564:pí 0x5565:shá,shà 0x5566:la,lā 0x5567:zé 0x5568:yīng,qíng 0x5569:guà 0x556A:pā 0x556B:zhě 0x556C:sè 0x556D:zhuàn 0x556E:niè 0x556F:guō 0x5570:luō 0x5571:yán 0x5572:dī 0x5573:quán,jué 0x5574:chǎn,tān 0x5575:bō,bo 0x5576:dìng 0x5577:lāng 0x5578:xiào 0x5579:jú 0x557A:táng 0x557B:chì,dì 0x557C:tí 0x557D:án,ān 0x557E:jiū 0x557F:dàn 0x5580:kā,kè,ke 0x5581:yóng,yú 0x5582:wèi 0x5583:nán,nǎn 0x5584:shàn 0x5585:yù 0x5586:zhé 0x5587:lǎ,lá,lā,la 0x5588:jiē,xiè 0x5589:hóu 0x558A:hǎn,kàn,jiān 0x558B:dié,zhá,qiè 0x558C:zhōu 0x558D:chái 0x558E:wāi 0x558F:nuò,rě 0x5590:yù 0x5591:yīn,yǐn,yìn 0x5592:zá,zǎn,zán,zà,zan 0x5593:yāo 0x5594:ō,wō,wū,o,ò 0x5595:miǎn 0x5596:hú 0x5597:yǔn 0x5598:chuǎn 0x5599:huì,zhòu 0x559A:huàn 0x559B:huàn,yuán,xuǎn,hé 0x559C:xǐ,xī,chì 0x559D:hē,yè,hè,kài 0x559E:jī 0x559F:kuì,huài 0x55A0:zhǒng,chǒng 0x55A1:wéi,wèi 0x55A2:shà,chè 0x55A3:xù 0x55A4:huáng 0x55A5:duó,zhà 0x55A6:niè,yì 0x55A7:xuān,xuǎn 0x55A8:liàng 0x55A9:yù 0x55AA:sàng,sāng 0x55AB:chī,kài 0x55AC:qiáo,jiǎo 0x55AD:yàn,yǎn 0x55AE:dān,dǎn,chán,shàn,chǎn,dàn,zhàn,tán 0x55AF:pèn,bēn 0x55B0:cān,sūn,qī 0x55B1:lí 0x55B2:yō,yo 0x55B3:zhā,zha,chā 0x55B4:wēi 0x55B5:miāo 0x55B6:yíng 0x55B7:pēn,pèn 0x55B8:bǔ 0x55B9:kuí 0x55BA:xí 0x55BB:yù,yú 0x55BC:jiē 0x55BD:lóu,lou 0x55BE:kù 0x55BF:zào,qiāo 0x55C0:hù 0x55C1:tí 0x55C2:yáo 0x55C3:hè,xiāo,xiào,hù 0x55C4:á,shà,a,xià 0x55C5:xiù 0x55C6:qiāng,qiàng,chéng 0x55C7:sè 0x55C8:yōng 0x55C9:sù 0x55CA:hǒng,gǒng,gòng 0x55CB:xié 0x55CC:ài,yì,wò 0x55CD:suō,shuò 0x55CE:ma,mà,má,mǎ 0x55CF:chā 0x55D0:hài 0x55D1:kē,kè,hé,xiá 0x55D2:dā,tà,da 0x55D3:sǎng 0x55D4:chēn,tián 0x55D5:rù 0x55D6:sōu,sù,sòu 0x55D7:wā,gū 0x55D8:jī 0x55D9:pǎng,bēng,bàng 0x55DA:wū,wù 0x55DB:qiǎn,xián,qiàn,qiān,qiè 0x55DC:shì 0x55DD:gé 0x55DE:zī 0x55DF:jiē,jiè,juē 0x55E0:lào 0x55E1:wēng,wěng 0x55E2:wà 0x55E3:sì 0x55E4:chī 0x55E5:háo 0x55E6:suo,suō 0x55E8:hāi,hēi 0x55E9:suǒ 0x55EA:qín 0x55EB:niè 0x55EC:hē 0x55ED:zhí 0x55EE:sài 0x55EF:ń,ńg,ňg,ň,ǹg,ǹ 0x55F0:gě 0x55F1:ná 0x55F2:diē,diǎ 0x55F3:āi,ǎi,ài 0x55F4:qiāng 0x55F5:tōng 0x55F6:bì 0x55F7:áo 0x55F8:áo 0x55F9:lián 0x55FA:zuī,suī,zuǐ 0x55FB:zhē,zhè,zhù,zhe 0x55FC:mò 0x55FD:sòu,shuò,shù 0x55FE:sǒu 0x55FF:tǎn 0x5600:dí,zhé,dī 0x5601:qī,zú,zā 0x5602:jiào 0x5603:chōng 0x5604:jiāo,jiào,dǎo 0x5605:kǎi,kài,gé 0x5606:tàn 0x5607:shān,càn,shěn 0x5608:cáo 0x5609:jiā 0x560A:ái 0x560B:xiào 0x560C:piào,piāo 0x560D:lóu,lǒu,lou 0x560E:gā,gá,gǎ 0x560F:gǔ,jiǎ 0x5610:xiāo,jiāo,láo,bào,miù 0x5611:hū,hù 0x5612:huì 0x5613:guō 0x5614:ǒu,ōu,òu,xū,chū,ou 0x5615:xiān 0x5616:zé 0x5617:cháng 0x5618:xū,shī 0x5619:pó 0x561A:dē,dé,dāi,dēi 0x561B:ma,má 0x561C:mà 0x561D:hú 0x561E:lei,lē 0x561F:dū 0x5620:gā 0x5621:tāng 0x5622:yě 0x5623:bēng 0x5624:yīng 0x5625:sāi 0x5626:jiào 0x5627:mì 0x5628:xiào 0x5629:huā,huá 0x562A:mǎi 0x562B:rán 0x562C:chuài,zuō 0x562D:pēng 0x562E:láo,chāo,lào,xiāo 0x562F:xiào,chì 0x5630:jī 0x5631:zhǔ 0x5632:cháo,zhāo 0x5633:kuì 0x5634:zuǐ 0x5635:xiāo 0x5636:sī 0x5637:háo 0x5638:fǔ,wǔ,m̄,ḿ 0x5639:liáo,liào 0x563A:qiáo,qiào 0x563B:xī 0x563C:chù,xù,shòu 0x563D:chǎn,tān,chān,tuō,dǎn 0x563E:dàn,tán 0x563F:hēi,mò,mù 0x5640:xùn 0x5641:ě,wù,wò 0x5642:zǔn 0x5643:fān,bo 0x5644:chī 0x5645:huī 0x5646:zǎn,cǎn 0x5647:chuáng 0x5648:cù,zā,hé 0x5649:dàn 0x564A:yù 0x564B:tūn,kuò 0x564C:cēng,chēng 0x564D:jiào,jiāo,jiū 0x564E:yē,yì,shà 0x564F:xī 0x5650:qì 0x5651:háo 0x5652:lián 0x5653:xū 0x5654:dēng 0x5655:huī 0x5656:yín 0x5657:pū 0x5658:juē 0x5659:qín 0x565A:xún 0x565B:niè 0x565C:lū 0x565D:sī 0x565E:yǎn 0x565F:yìng 0x5660:dā,dá 0x5661:zhān,dān 0x5662:ō,yǔ,yù,ào 0x5663:zhòu,zhuó,zhú,dú 0x5664:jìn 0x5665:nóng,náng 0x5666:yuě,huì 0x5667:xiè 0x5668:qì 0x5669:è 0x566A:zào 0x566B:yī,ǎi,yì 0x566C:shì 0x566D:jiào,qiào,chī 0x566E:yuàn 0x566F:āi,ǎi,ài 0x5670:yōng,yǒng 0x5671:jué,xué 0x5672:kuài,guài,kuò,wèi 0x5673:yǔ 0x5674:pēn,pèn,fèn 0x5675:dào 0x5676:gá,gé 0x5677:hm,xīn,hēn 0x5678:dūn 0x5679:dāng 0x567A:xīn 0x567B:sāi 0x567C:pī 0x567D:pǐ 0x567E:yīn 0x567F:zuǐ 0x5680:níng 0x5681:dí 0x5682:làn,hǎn 0x5683:tā,tà 0x5684:huō,huò,wò,ǒ 0x5685:rú 0x5686:hāo 0x5687:xià,hè 0x5688:yè 0x5689:duō 0x568A:pì,xì,xiù 0x568B:chóu,zhōu 0x568C:jì,jiē,zhāi 0x568D:jìn 0x568E:háo 0x568F:tì 0x5690:cháng 0x5691:xūn 0x5692:mē 0x5693:cā,chā 0x5694:tì,zhì 0x5695:lǔ,lū 0x5696:huì 0x5697:bó,pào,bào 0x5698:yōu 0x5699:niè,yǎo 0x569A:yín 0x569B:hù,yo 0x569C:me,mèi,ma 0x569D:hōng 0x569E:zhé 0x569F:lí 0x56A0:liú 0x56A1:hai 0x56A2:náng 0x56A3:xiāo,áo 0x56A4:mó 0x56A5:yàn 0x56A6:lì 0x56A7:lú 0x56A8:lóng 0x56A9:mó 0x56AA:dàn 0x56AB:chèn 0x56AC:pín 0x56AD:pǐ 0x56AE:xiàng,xiǎng 0x56AF:huò,xuè 0x56B0:mó 0x56B1:xì 0x56B2:duǒ 0x56B3:kù 0x56B4:yán,yǎn 0x56B5:chán,chān 0x56B6:yīng 0x56B7:rǎng,rāng 0x56B8:diǎn 0x56B9:lá,la 0x56BA:tà 0x56BB:xiāo 0x56BC:jué,jiáo,jiào 0x56BD:chuò 0x56BE:huān,huàn 0x56BF:huò 0x56C0:zhuàn 0x56C1:niè,zhé 0x56C2:xiāo,áo 0x56C3:cà,zhā,zǎ 0x56C4:lí 0x56C5:chǎn 0x56C6:chài 0x56C7:lì 0x56C8:yì 0x56C9:luō,luó,luo 0x56CA:náng,nāng 0x56CB:zá,zàn,cān 0x56CC:sū 0x56CD:xǐ 0x56CE:zen 0x56CF:jiān 0x56D0:zá,niè,yàn,è 0x56D1:zhǔ 0x56D2:lán 0x56D3:niè 0x56D4:nāng,nang 0x56D5:lǎn 0x56D6:lo 0x56D7:wéi,guó 0x56D8:huí 0x56D9:yīn 0x56DA:qiú 0x56DB:sì 0x56DC:nín 0x56DD:jiǎn,nān,yuè 0x56DE:huí 0x56DF:xìn 0x56E0:yīn 0x56E1:nān,niè 0x56E2:tuán,qiú 0x56E3:tuán 0x56E4:dùn,tún 0x56E5:kàng 0x56E6:yuān 0x56E7:jiǒng 0x56E8:piān 0x56E9:yún 0x56EA:cōng 0x56EB:hú 0x56EC:huí 0x56ED:yuán,wán 0x56EE:é 0x56EF:guó 0x56F0:kùn 0x56F1:cōng,chuāng 0x56F2:tōng 0x56F3:tú 0x56F4:wéi 0x56F5:lún 0x56F6:guó 0x56F7:qūn 0x56F8:rì 0x56F9:líng 0x56FA:gù 0x56FB:guó 0x56FC:tāi 0x56FD:guó 0x56FE:tú 0x56FF:yòu 0x5700:guó 0x5701:yín 0x5702:hùn,huàn 0x5703:pǔ 0x5704:yǔ 0x5705:hán 0x5706:yuán 0x5707:lún 0x5708:quān,juàn,juān,quán,juǎn 0x5709:yǔ 0x570A:qīng 0x570B:guó 0x570C:chuán,chuí 0x570D:wéi 0x570E:yuán 0x570F:quān 0x5710:kū 0x5711:pǔ 0x5712:yuán 0x5713:yuán 0x5714:yà 0x5715:tú 0x5716:tú 0x5717:tú 0x5718:tuán,chuán 0x5719:lüè 0x571A:huì 0x571B:yì 0x571C:huán,yuán 0x571D:luán 0x571E:luán 0x571F:tǔ,dù,chǎ,tú 0x5720:yà 0x5721:tǔ 0x5722:tǐng 0x5723:shèng,kū 0x5724:pú 0x5725:lù 0x5726:kuài 0x5727:yā 0x5728:zài 0x5729:wéi,yú,xū 0x572A:gē,yì 0x572B:yù,zhūn 0x572C:wū 0x572D:guī 0x572E:pǐ 0x572F:yí 0x5730:de,dì 0x5731:qiān,sú 0x5732:qiān 0x5733:zhèn,quǎn,chóu,huái 0x5734:zhuó 0x5735:dàng 0x5736:qià 0x5737:xià 0x5738:shān 0x5739:kuàng 0x573A:chǎng,cháng 0x573B:qí,yín 0x573C:niè 0x573D:mò 0x573E:jī,jí,jié 0x573F:jiá 0x5740:zhǐ 0x5741:zhǐ,zhì 0x5742:bǎn 0x5743:xūn 0x5744:yì 0x5745:qǐn 0x5746:méi,fén 0x5747:jūn,yùn 0x5748:rǒng,kēng 0x5749:tún,dùn 0x574A:fāng,fáng 0x574B:bèn,fèn 0x574C:bèn 0x574D:tān 0x574E:kǎn,kàn 0x574F:huài,pī,péi 0x5750:zuò 0x5751:kēng,kàng 0x5752:bì 0x5753:jǐng,xíng 0x5754:dì,làn 0x5755:jīng 0x5756:jì 0x5757:kuài,yué 0x5758:dǐ 0x5759:jīng 0x575A:jiān 0x575B:tán 0x575C:lì 0x575D:bà 0x575E:wù 0x575F:fén 0x5760:zhuì 0x5761:pō 0x5762:bàn,pǎn,pàn 0x5763:táng 0x5764:kūn 0x5765:qū,jù 0x5766:tǎn 0x5767:zhī 0x5768:tuó,yí 0x5769:gān 0x576A:píng 0x576B:diàn,zhēn 0x576C:guà 0x576D:ní 0x576E:tái 0x576F:pī,huài 0x5770:jiōng 0x5771:yǎng 0x5772:fó 0x5773:ào,āo,yǒu 0x5774:lù 0x5775:qiū 0x5776:mǔ,mù,méi 0x5777:kě,kē,jiōng 0x5778:gòu 0x5779:xuè 0x577A:bá 0x577B:chí,dǐ 0x577C:chè 0x577D:líng 0x577E:zhù 0x577F:fù,fú 0x5780:hū 0x5781:zhì 0x5782:chuí,zhuì 0x5783:lā,la 0x5784:lǒng 0x5785:lǒng 0x5786:lú 0x5787:ào 0x5788:dài 0x5789:páo 0x578A:min 0x578B:xíng 0x578C:dòng,tǒng,tóng 0x578D:jì,jī 0x578E:hè 0x578F:lǜ 0x5790:cí 0x5791:chǐ 0x5792:lěi 0x5793:gāi 0x5794:yīn 0x5795:hòu 0x5796:duī 0x5797:zhào 0x5798:fú 0x5799:guāng 0x579A:yáo 0x579B:duǒ,duò 0x579C:duǒ,duò 0x579D:guǐ 0x579E:chá 0x579F:yáng 0x57A0:yín,kèn 0x57A1:fá 0x57A2:gòu 0x57A3:yuán 0x57A4:dié 0x57A5:xié 0x57A6:kěn,yín 0x57A7:shǎng,jiōng 0x57A8:shǒu 0x57A9:è,shèng 0x57AA:bìng 0x57AB:diàn 0x57AC:hóng 0x57AD:yā 0x57AE:kuǎ 0x57AF:da 0x57B0:kǎ 0x57B1:dàng 0x57B2:kǎi 0x57B3:háng 0x57B4:nǎo 0x57B5:ǎn 0x57B6:xīng 0x57B7:xiàn 0x57B8:yuàn,huán 0x57B9:bāng 0x57BA:fū,fóu,pēi,póu 0x57BB:bà,bèi 0x57BC:yì 0x57BD:yìn 0x57BE:hàn,àn 0x57BF:xù 0x57C0:chuí 0x57C1:qín 0x57C2:gěng 0x57C3:āi,zhì 0x57C4:běng,fēng 0x57C5:fáng,fāng,dì 0x57C6:què,jué 0x57C7:yǒng 0x57C8:jùn 0x57C9:jiā,xiá 0x57CA:dì 0x57CB:mái,mán 0x57CC:làng 0x57CD:juǎn 0x57CE:chéng 0x57CF:shān,yán 0x57D0:jīn,qín 0x57D1:zhé 0x57D2:liè 0x57D3:liè 0x57D4:pǔ,bù 0x57D5:chéng 0x57D6:huā 0x57D7:bù 0x57D8:shí 0x57D9:xūn 0x57DA:guō 0x57DB:jiōng 0x57DC:yě 0x57DD:niàn,diàn,niè 0x57DE:dī 0x57DF:yù 0x57E0:bù 0x57E1:yā,è,wǔ,yà 0x57E2:quán,juǎn 0x57E3:suì,sù 0x57E4:pí,bì,pì,bēi 0x57E5:qīng,zhēng 0x57E6:wǎn,wān 0x57E7:jù 0x57E8:lǔn,lùn 0x57E9:zhēng,chéng 0x57EA:kōng 0x57EB:chǒng,shǎng 0x57EC:dōng 0x57ED:dài 0x57EE:tàn,tán 0x57EF:ǎn,yǎn 0x57F0:cài,cǎi 0x57F1:chù,tòu 0x57F2:běng,bàng 0x57F3:kǎn,xiàn 0x57F4:zhí 0x57F5:duǒ 0x57F6:yì,shì 0x57F7:zhí 0x57F8:yì 0x57F9:péi,pǒu,pī 0x57FA:jī 0x57FB:zhǔn,duī,guó 0x57FC:qí 0x57FD:sào,sǎo 0x57FE:jù 0x57FF:ní,nì,bàn 0x5800:kū 0x5801:kè 0x5802:táng 0x5803:kūn 0x5804:nì 0x5805:jiān 0x5806:duī,zuī 0x5807:jǐn,qín,jìn 0x5808:gāng 0x5809:yù 0x580A:è,yà 0x580B:péng,bèng,pēng,pīng 0x580C:gù 0x580D:tù 0x580E:lèng 0x580F:fang 0x5810:yá 0x5811:qiàn 0x5812:kūn 0x5813:àn 0x5814:shēn 0x5815:duò,huī 0x5816:nǎo 0x5817:tū 0x5818:chéng 0x5819:yīn 0x581A:hún 0x581B:bì 0x581C:liàn 0x581D:guō,wō 0x581E:dié 0x581F:zhuàn 0x5820:hòu 0x5821:bǎo,bǔ,pù 0x5822:bǎo 0x5823:yú 0x5824:dī,tí,dǐ,shí,wéi 0x5825:máo,móu,wǔ 0x5826:jiē 0x5827:ruán,nuò 0x5828:yè,ài,è 0x5829:gèng 0x582A:kān,chěn 0x582B:zōng 0x582C:yú 0x582D:huáng 0x582E:è 0x582F:yáo 0x5830:yàn 0x5831:bào,fù 0x5832:cí,jí 0x5833:méi 0x5834:chǎng,cháng,shāng,dàng 0x5835:dǔ,zhě,dū 0x5836:tuó 0x5837:yìn,pǒu 0x5838:féng 0x5839:zhòng 0x583A:jiè 0x583B:jīn 0x583C:hèng 0x583D:gāng 0x583E:chūn 0x583F:jiǎn,kǎn,xián 0x5840:píng 0x5841:lěi 0x5842:xiàng,jiǎng 0x5843:huāng 0x5844:léng 0x5845:duàn 0x5846:wān 0x5847:xuān 0x5848:jì,xì 0x5849:jí 0x584A:kuài 0x584B:yíng 0x584C:tā,dā 0x584D:chéng 0x584E:yǒng 0x584F:kǎi 0x5850:sù 0x5851:sù 0x5852:shí 0x5853:mì 0x5854:tǎ,dā,da 0x5855:wěng 0x5856:chéng 0x5857:tú,dù 0x5858:táng 0x5859:què,qiāo 0x585A:zhǒng 0x585B:lì 0x585C:zhǒng,péng 0x585D:bàng 0x585E:sāi,sè,sài 0x585F:zàng 0x5860:duī 0x5861:tián 0x5862:wù,wǔ 0x5863:zhèng 0x5864:xūn 0x5865:gé 0x5866:zhèn 0x5867:ài 0x5868:gōng 0x5869:yán 0x586A:kǎn 0x586B:tián,tiǎn,chén,zhèn 0x586C:yuán 0x586D:wēn 0x586E:xiè 0x586F:liù 0x5870:hǎi 0x5871:lǎng 0x5872:cháng,shāng,chǎng 0x5873:péng 0x5874:bèng 0x5875:chén 0x5876:lù 0x5877:lǔ 0x5878:ōu 0x5879:qiàn,jiàn 0x587A:méi 0x587B:mò 0x587C:zhuān,tuán 0x587D:shuǎng 0x587E:shú 0x587F:lǒu 0x5880:chí 0x5881:màn 0x5882:biāo 0x5883:jìng 0x5884:cè 0x5885:shù,yě 0x5886:zhì,dì 0x5887:zhàng 0x5888:kàn 0x5889:yōng 0x588A:diàn 0x588B:chěn 0x588C:zhí,zhuó 0x588D:xì 0x588E:guō 0x588F:qiǎng 0x5890:jìn,qín 0x5891:dì 0x5892:shāng 0x5893:mù 0x5894:cuī 0x5895:yàn 0x5896:tǎ 0x5897:zēng 0x5898:qián 0x5899:qiáng 0x589A:liáng 0x589B:wèi 0x589C:zhuì 0x589D:qiāo,qiào 0x589E:zēng,zèng,céng 0x589F:xū 0x58A0:shàn,chǎn 0x58A1:shàn 0x58A2:bá,fèi 0x58A3:pú 0x58A4:kuài,tuí 0x58A5:dǒng,tuǎn 0x58A6:fán,fān 0x58A7:què,qiáo 0x58A8:mò,mèi 0x58A9:dūn 0x58AA:dūn 0x58AB:zūn,cūn 0x58AC:dì 0x58AD:shèng 0x58AE:duò,huī,huì 0x58AF:duò 0x58B0:tán 0x58B1:dèng,dēng 0x58B2:mú,wú 0x58B3:fén,fèn 0x58B4:huáng 0x58B5:tán 0x58B6:da 0x58B7:yè 0x58B8:zhù 0x58B9:jiàn 0x58BA:ào 0x58BB:qiáng 0x58BC:jī 0x58BD:qiāo,qiào,áo 0x58BE:kěn 0x58BF:yì,tú 0x58C0:pí 0x58C1:bì 0x58C2:diàn 0x58C3:jiāng 0x58C4:yě 0x58C5:yōng,wèng 0x58C6:xué,jué,bó 0x58C7:tán,shàn,dàn,tǎn 0x58C8:lǎn 0x58C9:jù 0x58CA:huài 0x58CB:dàng 0x58CC:rǎng 0x58CD:qiàn 0x58CE:xūn,xùn 0x58CF:xiàn,làn 0x58D0:xǐ 0x58D1:hè,huò 0x58D2:ài 0x58D3:yā,yà 0x58D4:dǎo 0x58D5:háo 0x58D6:ruán 0x58D7:jìn 0x58D8:lěi,léi,lǜ 0x58D9:kuàng,kuǎng 0x58DA:lú 0x58DB:yán 0x58DC:tán 0x58DD:wěi 0x58DE:huài,huì,huái 0x58DF:lǒng 0x58E0:lǒng 0x58E1:ruì 0x58E2:lì 0x58E3:lín 0x58E4:rǎng 0x58E5:chán 0x58E6:xūn 0x58E7:yán 0x58E8:léi 0x58E9:bà 0x58EA:wān 0x58EB:shì 0x58EC:rén 0x58ED:san 0x58EE:zhuàng 0x58EF:zhuàng,zhuāng 0x58F0:shēng,qìng 0x58F1:yī 0x58F2:mài 0x58F3:ké,qiào 0x58F4:zhù 0x58F5:zhuàng 0x58F6:hú 0x58F7:hú 0x58F8:kǔn 0x58F9:yī,yīn 0x58FA:hú 0x58FB:xù 0x58FC:kǔn 0x58FD:shòu 0x58FE:mǎng 0x58FF:zūn 0x5900:shòu 0x5901:yī 0x5902:zhǐ,zhōng 0x5903:gǔ,yíng 0x5904:chù,chǔ 0x5905:jiàng 0x5906:féng,páng 0x5907:bèi 0x5908:zhāi 0x5909:biàn 0x590A:suī 0x590B:qūn 0x590C:líng 0x590D:fù 0x590E:cuò 0x590F:xià,jiǎ 0x5910:xiòng,xuàn 0x5911:xiè 0x5912:náo 0x5913:xià 0x5914:kuí 0x5915:xī,yì 0x5916:wài 0x5917:yuàn,wǎn,wān,yuān 0x5918:mǎo,wān 0x5919:sù 0x591A:duō 0x591B:duō 0x591C:yè 0x591D:qíng 0x591E:wài 0x591F:gòu 0x5920:gòu 0x5921:qì 0x5922:mèng,méng 0x5923:mèng 0x5924:yín 0x5925:huǒ 0x5926:chěn 0x5927:dà,dài,tài 0x5928:zè 0x5929:tiān 0x592A:tài,tā 0x592B:fū,fú 0x592C:guài,jué 0x592D:yāo,wò,wāi 0x592E:yāng,yīng 0x592F:hāng,bèn 0x5930:gǎo 0x5931:shī,yì 0x5932:tāo,běn 0x5933:tài 0x5934:tóu,tou 0x5935:yǎn,tāo 0x5936:bǐ 0x5937:yí 0x5938:kuā,kuà,kuǎ 0x5939:jiā,gā,jiá 0x593A:duó 0x593B:huà 0x593C:kuǎng 0x593D:yǔn 0x593E:jiā,jiá,xié,xiá,gā 0x593F:bā 0x5940:ēn 0x5941:lián 0x5942:huàn 0x5943:dī,tì 0x5944:yǎn,yān 0x5945:pào 0x5946:juàn 0x5947:qí,jī,ǎi,yǐ 0x5948:nài 0x5949:fèng 0x594A:xié,liè,xǐ,pí 0x594B:fèn,kǎng 0x594C:diǎn 0x594D:quān 0x594E:kuí,kuǐ 0x594F:zòu,còu 0x5950:huàn 0x5951:qì,xiè,qiè,jié 0x5952:kāi 0x5953:zhā,shē,chǐ,zhà 0x5954:bēn,bèn,fèn 0x5955:yì 0x5956:jiǎng 0x5957:tào,tǎo 0x5958:zàng,zhuǎng 0x5959:běn 0x595A:xī 0x595B:huǎng 0x595C:fěi,fēi 0x595D:diāo 0x595E:xùn 0x595F:bēng,kēng 0x5960:diàn,tíng,dìng,zhèng,zūn 0x5961:ào,xiào 0x5962:shē 0x5963:wěng 0x5964:hǎ,pò,tǎi 0x5965:ào,yù,yōu 0x5966:wù 0x5967:ào 0x5968:jiǎng 0x5969:lián 0x596A:duó,duì 0x596B:yūn 0x596C:jiǎng 0x596D:shì 0x596E:fèn 0x596F:huò 0x5970:bì 0x5971:luán 0x5972:duǒ,chě 0x5973:nǚ,nǜ,rǔ 0x5974:nú 0x5975:dǐng,dīng,tiǎn 0x5976:nǎi 0x5977:qiān 0x5978:jiān,gān 0x5979:tā,jiě,chí 0x597A:jiǔ 0x597B:nuán 0x597C:chà 0x597D:hǎo,hào 0x597E:xiān 0x597F:fàn 0x5980:jǐ 0x5981:shuò,yuē 0x5982:rú 0x5983:fēi,pèi 0x5984:wàng,wáng 0x5985:hóng 0x5986:zhuāng 0x5987:fù 0x5988:mā 0x5989:dān 0x598A:rèn,rén 0x598B:fū,yōu 0x598C:jìng 0x598D:yán 0x598E:hài,jiè 0x598F:wèn 0x5990:zhōng 0x5991:pā 0x5992:dù 0x5993:jì,jī 0x5994:kēng,háng 0x5995:zhòng 0x5996:yāo,jiǎo 0x5997:jìn,xiān 0x5998:yún 0x5999:miào,miǎo 0x599A:fǒu,pēi,pī 0x599B:chī 0x599C:yuè,jué 0x599D:zhuāng 0x599E:niū,hào 0x599F:yàn 0x59A0:nà,nàn 0x59A1:xīn 0x59A2:fén 0x59A3:bǐ 0x59A4:yú 0x59A5:tuǒ 0x59A6:fēng 0x59A7:wàn,yuán 0x59A8:fáng,fāng 0x59A9:wǔ 0x59AA:yù 0x59AB:guī 0x59AC:dù 0x59AD:bá,bō 0x59AE:nī,ní 0x59AF:zhóu,chōu 0x59B0:zhuó 0x59B1:zhāo 0x59B2:dá 0x59B3:nǐ,nǎi 0x59B4:yuàn 0x59B5:tǒu 0x59B6:xián,xuán,xù 0x59B7:zhí,yì 0x59B8:ē,ě 0x59B9:mèi 0x59BA:mò 0x59BB:qī,qì 0x59BC:bì 0x59BD:shēn 0x59BE:qiè 0x59BF:ē 0x59C0:hé 0x59C1:xǔ,xū 0x59C2:fá 0x59C3:zhēng 0x59C4:mín 0x59C5:bàn 0x59C6:mǔ 0x59C7:fū,fú 0x59C8:líng 0x59C9:zǐ 0x59CA:zǐ 0x59CB:shǐ 0x59CC:rǎn 0x59CD:shān,xiān,pān 0x59CE:yāng 0x59CF:mán 0x59D0:jiě,jù,xù,zū 0x59D1:gū 0x59D2:sì 0x59D3:xìng,shēng 0x59D4:wěi,wēi,wèi 0x59D5:zī,cǐ,cī 0x59D6:jù 0x59D7:shān 0x59D8:pīn,pín 0x59D9:rèn 0x59DA:yáo,tiào,táo,yào 0x59DB:dòng 0x59DC:jiāng 0x59DD:shū 0x59DE:jí 0x59DF:gāi 0x59E0:xiàng 0x59E1:huá,huó 0x59E2:juān 0x59E3:jiāo,jiǎo,xiáo 0x59E4:gòu 0x59E5:lǎo,mǔ 0x59E6:jiān 0x59E7:jiān 0x59E8:yí 0x59E9:niàn,nián 0x59EA:zhí 0x59EB:jī,zhěn 0x59EC:jī,yí 0x59ED:xiàn 0x59EE:héng 0x59EF:guāng 0x59F0:jūn,xūn,xuàn,xīn 0x59F1:kuā,hù 0x59F2:yàn 0x59F3:mǐng 0x59F4:liè 0x59F5:pèi 0x59F6:è,yà 0x59F7:yòu 0x59F8:yán 0x59F9:chà 0x59FA:shēn,xiān 0x59FB:yīn 0x59FC:shí,tí,jì 0x59FD:guǐ,wá 0x59FE:quán 0x59FF:zī,zì 0x5A00:sōng 0x5A01:wēi 0x5A02:hóng 0x5A03:wá,wā,guì 0x5A04:lóu 0x5A05:yà 0x5A06:ráo,rǎo 0x5A07:jiāo 0x5A08:luán 0x5A09:pīng,pìn 0x5A0A:xiàn,dān 0x5A0B:shào,shāo 0x5A0C:lǐ 0x5A0D:chéng,shèng 0x5A0E:xiè 0x5A0F:máng 0x5A10:fū 0x5A11:suō,suǒ,suò 0x5A12:méi,mǔ,wǔ 0x5A13:wěi 0x5A14:kè 0x5A15:chuò,cù,lài 0x5A16:chuò,cù 0x5A17:tǐng,tiǎn 0x5A18:niáng 0x5A19:xíng 0x5A1A:nán 0x5A1B:yú 0x5A1C:nà,nuó 0x5A1D:pōu,bǐ 0x5A1E:něi,suī 0x5A1F:juān 0x5A20:shēn 0x5A21:zhì 0x5A22:hán 0x5A23:dì 0x5A24:zhuāng 0x5A25:é 0x5A26:pín 0x5A27:tuì 0x5A28:xiàn 0x5A29:miǎn,wǎn,wèn 0x5A2A:wú,wù,yú 0x5A2B:yán 0x5A2C:wǔ 0x5A2D:āi,xī 0x5A2E:yán 0x5A2F:yú 0x5A30:sì 0x5A31:yú 0x5A32:wā 0x5A33:lì 0x5A34:xián 0x5A35:jū 0x5A36:qǔ,jū,shū 0x5A37:zhuì,shuì 0x5A38:qī 0x5A39:xián 0x5A3A:zhuó 0x5A3B:dōng,dòng 0x5A3C:chāng 0x5A3D:lù 0x5A3E:ǎi,ái,è 0x5A3F:ē,ě 0x5A40:ē,ě 0x5A41:lóu,lǚ,lǘ,léi 0x5A42:mián 0x5A43:cóng 0x5A44:pǒu,péi,bù 0x5A45:jú 0x5A46:pó 0x5A47:cǎi 0x5A48:líng 0x5A49:wǎn 0x5A4A:biǎo 0x5A4B:xiāo 0x5A4C:shú 0x5A4D:qǐ 0x5A4E:huī 0x5A4F:fàn,fù 0x5A50:wǒ 0x5A51:ruí,wǒ,něi 0x5A52:tán 0x5A53:fēi 0x5A54:fēi 0x5A55:jié,qiè 0x5A56:tiān 0x5A57:ní,nǐ 0x5A58:quán,juàn 0x5A59:jìng 0x5A5A:hūn 0x5A5B:jīng 0x5A5C:qiān,jǐn 0x5A5D:diàn 0x5A5E:xìng 0x5A5F:hù 0x5A60:wān,guàn 0x5A61:lái,lài 0x5A62:bì 0x5A63:yīn 0x5A64:chōu,zhōu 0x5A65:nào,chuò 0x5A66:fù 0x5A67:jìng 0x5A68:lún 0x5A69:àn,nüè 0x5A6A:lán,lǎn 0x5A6B:kūn,hùn 0x5A6C:yín 0x5A6D:yà,yā,yǎ 0x5A6E:jū 0x5A6F:lì 0x5A70:diǎn 0x5A71:xián 0x5A72:huā 0x5A73:huà 0x5A74:yīng 0x5A75:chán 0x5A76:shěn 0x5A77:tíng 0x5A78:dàng,yáng 0x5A79:yǎo 0x5A7A:wù,móu,mù 0x5A7B:nàn 0x5A7C:chuò,ruò 0x5A7D:jiǎ 0x5A7E:tōu 0x5A7F:xù 0x5A80:yù,yú 0x5A81:wéi,wěi 0x5A82:dì,tí 0x5A83:róu 0x5A84:měi 0x5A85:dān 0x5A86:ruǎn,nèn,nùn 0x5A87:qīn 0x5A88:huī 0x5A89:wò 0x5A8A:qián 0x5A8B:chūn 0x5A8C:miáo 0x5A8D:fù 0x5A8E:jiě 0x5A8F:duān 0x5A90:yí,xī 0x5A91:zhòng 0x5A92:méi,mèi 0x5A93:huáng 0x5A94:mián,miǎn 0x5A95:ān,yǎn,è 0x5A96:yīng 0x5A97:xuān 0x5A98:jiē 0x5A99:wēi 0x5A9A:mèi 0x5A9B:yuàn,yuán 0x5A9C:zhēng 0x5A9D:qiū 0x5A9E:shì,tí,zhī,dài 0x5A9F:xiè 0x5AA0:tuǒ,duò,nuǒ 0x5AA1:liàn 0x5AA2:mào 0x5AA3:rǎn 0x5AA4:sī 0x5AA5:piān 0x5AA6:wèi 0x5AA7:wā 0x5AA8:cù 0x5AA9:hú 0x5AAA:ǎo,yǔn,wò 0x5AAB:jié 0x5AAC:bǎo 0x5AAD:xū 0x5AAE:tōu,yú 0x5AAF:guī,guì 0x5AB0:chú,zòu 0x5AB1:yáo 0x5AB2:pì,bī,pí 0x5AB3:xí 0x5AB4:yuán 0x5AB5:yìng,shèng 0x5AB6:róng 0x5AB7:rù 0x5AB8:chī 0x5AB9:liú 0x5ABA:měi 0x5ABB:pán 0x5ABC:ǎo 0x5ABD:mā 0x5ABE:gòu 0x5ABF:kuì,chǒu 0x5AC0:qín,shēn 0x5AC1:jià 0x5AC2:sǎo 0x5AC3:zhēn,zhěn 0x5AC4:yuán 0x5AC5:jiē,suǒ 0x5AC6:róng 0x5AC7:míng,mǐng,méng 0x5AC8:yīng,xīng,yíng 0x5AC9:jí 0x5ACA:sù 0x5ACB:niǎo 0x5ACC:xián 0x5ACD:tāo 0x5ACE:páng,bàng 0x5ACF:láng 0x5AD0:nǎo 0x5AD1:báo 0x5AD2:ài 0x5AD3:pì 0x5AD4:pín 0x5AD5:yì 0x5AD6:piáo,piào,biāo 0x5AD7:yù,yǔ,kōu 0x5AD8:léi 0x5AD9:xuán 0x5ADA:mān,màn,yuān 0x5ADB:yī 0x5ADC:zhāng 0x5ADD:kāng 0x5ADE:yōng 0x5ADF:nì 0x5AE0:lí 0x5AE1:dí 0x5AE2:guī,zuī 0x5AE3:yān 0x5AE4:jǐn,jìn 0x5AE5:zhuān,tuán 0x5AE6:cháng 0x5AE7:zé,cè 0x5AE8:hān,nǎn 0x5AE9:nèn 0x5AEA:lào,láo 0x5AEB:mó 0x5AEC:zhē 0x5AED:hù 0x5AEE:hù 0x5AEF:ào 0x5AF0:nèn 0x5AF1:qiáng 0x5AF2:ma 0x5AF3:piè 0x5AF4:gū 0x5AF5:wǔ 0x5AF6:qiáo,jiāo 0x5AF7:tuǒ 0x5AF8:zhǎn 0x5AF9:miáo 0x5AFA:xián 0x5AFB:xián 0x5AFC:mò 0x5AFD:liáo,liǎo,liào,lǎo 0x5AFE:lián 0x5AFF:huà 0x5B00:guī 0x5B01:dēng 0x5B02:zhí 0x5B03:xū 0x5B04:yī 0x5B05:huà 0x5B06:xī 0x5B07:kuì 0x5B08:ráo,rǎo,yǎo 0x5B09:xī,xǐ 0x5B0A:yàn 0x5B0B:chán 0x5B0C:jiāo 0x5B0D:měi 0x5B0E:fàn,fù 0x5B0F:fān 0x5B10:xiān,yǎn,jìn 0x5B11:yì 0x5B12:huì 0x5B13:jiào 0x5B14:fù 0x5B15:shì 0x5B16:bì 0x5B17:shàn,chán 0x5B18:suì 0x5B19:qiáng 0x5B1A:liǎn 0x5B1B:huán,xuān,qióng,xuán 0x5B1C:xīn 0x5B1D:niǎo 0x5B1E:dǒng 0x5B1F:yì,yǐ 0x5B20:cān 0x5B21:ài 0x5B22:niáng 0x5B23:níng 0x5B24:mā 0x5B25:tiǎo,diào 0x5B26:chóu 0x5B27:jìn 0x5B28:cí 0x5B29:yú 0x5B2A:pín 0x5B2B:róng 0x5B2C:rú,nòu 0x5B2D:nǎi,ěr,nì 0x5B2E:yān,yàn 0x5B2F:tái 0x5B30:yīng,yìng 0x5B31:qiàn 0x5B32:niǎo 0x5B33:yuè 0x5B34:yíng 0x5B35:mián 0x5B36:bí 0x5B37:mā 0x5B38:shěn 0x5B39:xìng,xīng 0x5B3A:nì 0x5B3B:dú 0x5B3C:liǔ 0x5B3D:yuān 0x5B3E:lǎn 0x5B3F:yàn 0x5B40:shuāng 0x5B41:líng 0x5B42:jiǎo 0x5B43:niáng,ráng 0x5B44:lǎn 0x5B45:qiān,xiān 0x5B46:yīng 0x5B47:shuāng 0x5B48:huì,xié 0x5B49:quán,huān 0x5B4A:mǐ 0x5B4B:lí,lì 0x5B4C:luán,liàn,luǎn 0x5B4D:yán,yǎn 0x5B4E:zhú,shú,chuò 0x5B4F:lǎn 0x5B50:zi,zǐ 0x5B51:jié 0x5B52:jué 0x5B53:jué 0x5B54:kǒng 0x5B55:yùn 0x5B56:mā,zī 0x5B57:zì 0x5B58:cún 0x5B59:sūn 0x5B5A:fú 0x5B5B:bèi,bó 0x5B5C:zī 0x5B5D:xiào 0x5B5E:xìn 0x5B5F:mèng 0x5B60:sì 0x5B61:tāi 0x5B62:bāo 0x5B63:jì 0x5B64:gū 0x5B65:nú 0x5B66:xué 0x5B67:yòu 0x5B68:zhuǎn,nì 0x5B69:hái 0x5B6A:luán 0x5B6B:sūn,xùn 0x5B6C:nāo 0x5B6D:miē 0x5B6E:cóng 0x5B6F:qiān 0x5B70:shú 0x5B71:càn,chán,jiān,zhàn 0x5B72:yā 0x5B73:zī 0x5B74:nǐ,nì,yì 0x5B75:fū 0x5B76:zī 0x5B77:lí 0x5B78:xué,huá,jiào 0x5B79:bò 0x5B7A:rú 0x5B7B:nái 0x5B7C:niè 0x5B7D:niè 0x5B7E:yīng 0x5B7F:luán 0x5B80:mián 0x5B81:níng,zhù,nìng 0x5B82:rǒng 0x5B83:tā,tuó,yí 0x5B84:guǐ 0x5B85:zhái,chè,dù 0x5B86:qióng 0x5B87:yǔ 0x5B88:shǒu,shòu 0x5B89:ān 0x5B8A:tū,jiā 0x5B8B:sòng 0x5B8C:wán,kuān 0x5B8D:ròu 0x5B8E:yǎo,yāo 0x5B8F:hóng 0x5B90:yí 0x5B91:jǐng 0x5B92:zhūn 0x5B93:mì,fú 0x5B94:zhǔ 0x5B95:dàng 0x5B96:hóng 0x5B97:zōng 0x5B98:guān 0x5B99:zhòu 0x5B9A:dìng 0x5B9B:wǎn,yuān,yǔn,yù 0x5B9C:yí 0x5B9D:bǎo 0x5B9E:shí 0x5B9F:shí 0x5BA0:chǒng 0x5BA1:shěn 0x5BA2:kè,qià 0x5BA3:xuān 0x5BA4:shì 0x5BA5:yòu 0x5BA6:huàn 0x5BA7:yí 0x5BA8:tiǎo 0x5BA9:shǐ 0x5BAA:xiàn,xiòng 0x5BAB:gōng 0x5BAC:chéng 0x5BAD:qún 0x5BAE:gōng 0x5BAF:xiāo 0x5BB0:zǎi 0x5BB1:zhà 0x5BB2:bǎo,shí 0x5BB3:hài,hé 0x5BB4:yàn 0x5BB5:xiāo 0x5BB6:jiā,jià,jia,jie,gū 0x5BB7:shěn 0x5BB8:chén 0x5BB9:róng,yǒng 0x5BBA:huǎng 0x5BBB:mì 0x5BBC:kòu 0x5BBD:kuān 0x5BBE:bīn 0x5BBF:sù,xiù,xiǔ,qī 0x5BC0:cǎi,cài 0x5BC1:zǎn 0x5BC2:jì 0x5BC3:yuān 0x5BC4:jì 0x5BC5:yín 0x5BC6:mì 0x5BC7:kòu 0x5BC8:qīng 0x5BC9:hè 0x5BCA:zhēn 0x5BCB:jiàn 0x5BCC:fù 0x5BCD:níng 0x5BCE:bìng,bǐng 0x5BCF:huán 0x5BD0:mèi 0x5BD1:qǐn 0x5BD2:hán 0x5BD3:yù 0x5BD4:shí 0x5BD5:níng 0x5BD6:jìn 0x5BD7:níng 0x5BD8:zhì,tián 0x5BD9:yǔ 0x5BDA:bǎo 0x5BDB:kuān 0x5BDC:níng 0x5BDD:qǐn 0x5BDE:mò 0x5BDF:chá,cuì 0x5BE0:jù,lǜ,lóu 0x5BE1:guǎ 0x5BE2:qǐn 0x5BE3:hū 0x5BE4:wù 0x5BE5:liáo 0x5BE6:shí,zhì 0x5BE7:níng,nìng 0x5BE8:zhài,sè,qiān 0x5BE9:shěn,pán 0x5BEA:wěi,wéi 0x5BEB:xiě,xiè 0x5BEC:kuān 0x5BED:huì 0x5BEE:liáo 0x5BEF:jùn 0x5BF0:huán,xiàn 0x5BF1:yì 0x5BF2:yí 0x5BF3:bǎo 0x5BF4:qīn,qìn 0x5BF5:chǒng,lóng 0x5BF6:bǎo 0x5BF7:fēng 0x5BF8:cùn,cǔn 0x5BF9:duì 0x5BFA:sì,shì 0x5BFB:xún,xín 0x5BFC:dǎo 0x5BFD:lǜ,lüè 0x5BFE:duì 0x5BFF:shòu 0x5C00:pǒ 0x5C01:fēng,biǎn 0x5C02:zhuān 0x5C03:fū,bù,fǔ,pò 0x5C04:shè,yè,yì 0x5C05:kè,kēi 0x5C06:jiāng,jiàng,qiāng 0x5C07:jiāng,jiàng,qiāng,yáng,jiǎng 0x5C08:zhuān,tuán,shuàn 0x5C09:wèi,yù,yùn 0x5C0A:zūn 0x5C0B:xún,xín 0x5C0C:shù,zhù 0x5C0D:duì 0x5C0E:dǎo,dào 0x5C0F:xiǎo 0x5C10:jié,jí 0x5C11:shǎo,shào 0x5C12:ěr 0x5C13:ěr 0x5C14:ěr 0x5C15:gǎ 0x5C16:jiān 0x5C17:shū,shú 0x5C18:chén 0x5C19:shàng 0x5C1A:shàng,cháng 0x5C1B:mó 0x5C1C:gá 0x5C1D:cháng 0x5C1E:liào,liáo 0x5C1F:xiǎn 0x5C20:xiǎn 0x5C21:kun 0x5C22:yóu,wāng 0x5C23:wāng 0x5C24:yóu 0x5C25:liào,niǎo 0x5C26:liào 0x5C27:yáo 0x5C28:máng,méng,páng 0x5C29:wāng 0x5C2A:wāng 0x5C2B:wāng 0x5C2C:gà 0x5C2D:yáo 0x5C2E:duò 0x5C2F:kuì,kuǐ 0x5C30:zhǒng 0x5C31:jiù 0x5C32:gān 0x5C33:gǔ 0x5C34:gān 0x5C35:tuí,zhuài 0x5C36:gān 0x5C37:gān 0x5C38:shī 0x5C39:yǐn,yún 0x5C3A:chǐ,chě 0x5C3B:kāo 0x5C3C:ní,nǐ 0x5C3D:jǐn,jìn 0x5C3E:wěi,yǐ 0x5C3F:niào,suī 0x5C40:jú 0x5C41:pì 0x5C42:céng 0x5C43:xì 0x5C44:bī 0x5C45:jū,jī 0x5C46:jiè 0x5C47:tián 0x5C48:qū,jué,què,jú 0x5C49:tì 0x5C4A:jiè 0x5C4B:wū 0x5C4C:diǎo 0x5C4D:shī,shì 0x5C4E:shǐ,xī 0x5C4F:píng,bǐng,bìng,bīng 0x5C50:jī 0x5C51:xiè 0x5C52:zhěn 0x5C53:xiè 0x5C54:ní 0x5C55:zhǎn 0x5C56:xī 0x5C57:wěi 0x5C58:mǎn 0x5C59:ē 0x5C5A:lòu 0x5C5B:píng 0x5C5C:tì 0x5C5D:fèi 0x5C5E:shǔ,zhǔ 0x5C5F:xiè,tì 0x5C60:tú 0x5C61:lǚ 0x5C62:lǚ 0x5C63:xǐ 0x5C64:céng 0x5C65:lǚ 0x5C66:jù 0x5C67:xiè 0x5C68:jù 0x5C69:juē 0x5C6A:liáo 0x5C6B:jué 0x5C6C:shǔ,zhǔ 0x5C6D:xì 0x5C6E:chè,cǎo 0x5C6F:tún,zhūn 0x5C70:nì,pò,jí 0x5C71:shān 0x5C72:wā 0x5C73:xiān 0x5C74:lì 0x5C75:è,yǎn 0x5C76:huì 0x5C77:huì 0x5C78:lóng,hóng 0x5C79:yì,gē 0x5C7A:qǐ 0x5C7B:rèn 0x5C7C:wù 0x5C7D:hàn,àn 0x5C7E:shēn 0x5C7F:yǔ 0x5C80:chū 0x5C81:suì 0x5C82:qǐ 0x5C83:rèn 0x5C84:yuè 0x5C85:bǎn 0x5C86:yǎo 0x5C87:áng 0x5C88:yá,xiā 0x5C89:wù 0x5C8A:jié 0x5C8B:è,jí 0x5C8C:jí 0x5C8D:qiān 0x5C8E:fén,chà 0x5C8F:wán 0x5C90:qí 0x5C91:cén 0x5C92:qián 0x5C93:qí 0x5C94:chà 0x5C95:jiè 0x5C96:qū 0x5C97:gǎng,gāng 0x5C98:xiàn 0x5C99:ào 0x5C9A:lán 0x5C9B:dǎo 0x5C9C:bā 0x5C9D:zuò 0x5C9E:zuò 0x5C9F:yǎng 0x5CA0:jù 0x5CA1:gāng 0x5CA2:kě 0x5CA3:gǒu 0x5CA4:xué 0x5CA5:pō 0x5CA6:lì 0x5CA7:tiáo 0x5CA8:qū,zǔ,jǔ 0x5CA9:yán 0x5CAA:fú 0x5CAB:xiù 0x5CAC:jiǎ,jiá 0x5CAD:lǐng,líng 0x5CAE:tuó 0x5CAF:pí 0x5CB0:ào 0x5CB1:dài 0x5CB2:kuàng 0x5CB3:yuè 0x5CB4:qū 0x5CB5:hù 0x5CB6:pò 0x5CB7:mín 0x5CB8:àn 0x5CB9:tiáo 0x5CBA:líng 0x5CBB:chí 0x5CBC:píng 0x5CBD:dōng 0x5CBE:hàn 0x5CBF:kuī 0x5CC0:xiù 0x5CC1:mǎo 0x5CC2:tóng 0x5CC3:xué 0x5CC4:yì 0x5CC5:biàn 0x5CC6:hé 0x5CC7:bā,kè 0x5CC8:luò 0x5CC9:è 0x5CCA:fù,niè 0x5CCB:xún 0x5CCC:dié 0x5CCD:lù 0x5CCE:ěn 0x5CCF:ér 0x5CD0:gāi 0x5CD1:quān 0x5CD2:dòng,tóng 0x5CD3:yí 0x5CD4:mǔ 0x5CD5:shí 0x5CD6:ān 0x5CD7:wéi,wěi 0x5CD8:huán 0x5CD9:zhì,shì 0x5CDA:mì 0x5CDB:lǐ 0x5CDC:jì 0x5CDD:tóng 0x5CDE:wéi,wěi 0x5CDF:yòu 0x5CE0:qiǎ 0x5CE1:xiá 0x5CE2:lǐ 0x5CE3:yáo 0x5CE4:jiào,qiáo 0x5CE5:zhēng 0x5CE6:luán 0x5CE7:jiāo 0x5CE8:é 0x5CE9:é 0x5CEA:yù 0x5CEB:xié,yé 0x5CEC:bū 0x5CED:qiào 0x5CEE:qūn 0x5CEF:fēng 0x5CF0:fēng 0x5CF1:náo 0x5CF2:lǐ 0x5CF3:yóu 0x5CF4:xiàn 0x5CF5:róng 0x5CF6:dǎo 0x5CF7:shēn 0x5CF8:chéng 0x5CF9:tú 0x5CFA:gěng 0x5CFB:jùn 0x5CFC:gào 0x5CFD:xiá 0x5CFE:yín 0x5CFF:yǔ,wú 0x5D00:làng,lǎng 0x5D01:kàn 0x5D02:láo 0x5D03:lái 0x5D04:xiǎn 0x5D05:què 0x5D06:kōng 0x5D07:chóng 0x5D08:chóng 0x5D09:tà 0x5D0A:lín 0x5D0B:huà 0x5D0C:jū 0x5D0D:lái 0x5D0E:qí,qǐ,yī 0x5D0F:mín 0x5D10:kūn 0x5D11:kūn 0x5D12:zú,cuì 0x5D13:gù 0x5D14:cuī 0x5D15:yá 0x5D16:yá 0x5D17:gǎng,gāng 0x5D18:lún 0x5D19:lún 0x5D1A:léng,líng 0x5D1B:jué,yù 0x5D1C:duō,duǒ 0x5D1D:zhēng 0x5D1E:guō 0x5D1F:yín 0x5D20:dōng,dòng 0x5D21:hán 0x5D22:zhēng 0x5D23:wěi 0x5D24:xiáo,yáo 0x5D25:pí,bǐ 0x5D26:yān 0x5D27:sōng 0x5D28:jié 0x5D29:bēng 0x5D2A:zú 0x5D2B:kū,jué 0x5D2C:dōng 0x5D2D:zhǎn 0x5D2E:gù 0x5D2F:yín 0x5D30:zī 0x5D31:zè 0x5D32:huáng 0x5D33:yú 0x5D34:wǎi,wēi,wěi 0x5D35:yáng,dàng 0x5D36:fēng 0x5D37:qiú 0x5D38:yáng 0x5D39:tí 0x5D3A:yǐ 0x5D3B:zhì 0x5D3C:shì,dié 0x5D3D:zǎi 0x5D3E:yǎo 0x5D3F:è 0x5D40:zhù 0x5D41:kān,zhàn 0x5D42:lǜ 0x5D43:yǎn,yàn 0x5D44:měi 0x5D45:hán 0x5D46:jī 0x5D47:jī,xí 0x5D48:huàn 0x5D49:tíng 0x5D4A:shèng,chéng 0x5D4B:méi 0x5D4C:qiàn,hǎn,kàn 0x5D4D:wù,máo 0x5D4E:yú 0x5D4F:zōng 0x5D50:lán 0x5D51:kě,jié 0x5D52:yán,niè 0x5D53:yán 0x5D54:wěi 0x5D55:zōng 0x5D56:chá 0x5D57:suì 0x5D58:róng 0x5D59:kē 0x5D5A:qīn 0x5D5B:yú 0x5D5C:qí 0x5D5D:lǒu 0x5D5E:tú 0x5D5F:duī 0x5D60:xī 0x5D61:wěng 0x5D62:cāng 0x5D63:dàng,táng 0x5D64:róng,yíng 0x5D65:jié 0x5D66:kǎi,ái 0x5D67:liú 0x5D68:wù 0x5D69:sōng 0x5D6A:qiāo,kāo 0x5D6B:zī 0x5D6C:wéi,wěi 0x5D6D:bēng 0x5D6E:diān 0x5D6F:cuó,cī 0x5D70:qiǎn 0x5D71:yǒng,yóng 0x5D72:niè 0x5D73:cuó 0x5D74:jǐ 0x5D75:shí 0x5D76:ruò 0x5D77:sǒng 0x5D78:zōng 0x5D79:jiàng 0x5D7A:liáo,jiāo 0x5D7B:kāng 0x5D7C:chǎn 0x5D7D:dié,dì 0x5D7E:cēn,cān 0x5D7F:dǐng 0x5D80:tū 0x5D81:lǒu 0x5D82:zhàng 0x5D83:zhǎn 0x5D84:zhǎn,chán 0x5D85:áo,ào 0x5D86:cáo 0x5D87:qū 0x5D88:qiāng 0x5D89:cuī,zuǐ 0x5D8A:zuǐ 0x5D8B:dǎo 0x5D8C:dǎo 0x5D8D:xí 0x5D8E:yù 0x5D8F:pèi,pǐ 0x5D90:lóng 0x5D91:xiàng 0x5D92:céng,zhēng 0x5D93:bō 0x5D94:qīn 0x5D95:jiāo 0x5D96:yān 0x5D97:láo 0x5D98:zhàn 0x5D99:lín,lǐn 0x5D9A:liáo 0x5D9B:liáo 0x5D9C:jīn,qín 0x5D9D:dèng 0x5D9E:duò 0x5D9F:zūn 0x5DA0:jiào,qiáo 0x5DA1:guì,jué 0x5DA2:yáo 0x5DA3:jiāo 0x5DA4:yáo 0x5DA5:jué 0x5DA6:zhān,shàn 0x5DA7:yì 0x5DA8:xué 0x5DA9:náo 0x5DAA:yè 0x5DAB:yè 0x5DAC:yí,yǐ 0x5DAD:niè 0x5DAE:xiǎn,yǎn 0x5DAF:jí 0x5DB0:xiè,jiè 0x5DB1:kě 0x5DB2:xī 0x5DB3:dì 0x5DB4:ào 0x5DB5:zuǐ 0x5DB6:wēi 0x5DB7:yí,nì 0x5DB8:róng 0x5DB9:dǎo 0x5DBA:lǐng 0x5DBB:jié 0x5DBC:yǔ,xù 0x5DBD:yuè 0x5DBE:yǐn 0x5DBF:ru 0x5DC0:jié 0x5DC1:lì,liè 0x5DC2:guī,xī,juàn 0x5DC3:lóng 0x5DC4:lóng 0x5DC5:diān 0x5DC6:róng,hōng,yíng 0x5DC7:xī 0x5DC8:jú 0x5DC9:chán 0x5DCA:yǐng 0x5DCB:kuī,kuì,wěi 0x5DCC:yán 0x5DCD:wēi 0x5DCE:náo 0x5DCF:quán 0x5DD0:chǎo 0x5DD1:cuán 0x5DD2:luán 0x5DD3:diān 0x5DD4:diān 0x5DD5:niè 0x5DD6:yán 0x5DD7:yán 0x5DD8:yǎn 0x5DD9:kuí,náo 0x5DDA:yǎn 0x5DDB:chuān,shùn 0x5DDC:kuài,huān 0x5DDD:chuān 0x5DDE:zhōu 0x5DDF:huāng 0x5DE0:jīng,xíng 0x5DE1:xún,yán,shùn 0x5DE2:cháo,chào 0x5DE3:cháo 0x5DE4:liè 0x5DE5:gōng 0x5DE6:zuǒ 0x5DE7:qiǎo 0x5DE8:jù,qú 0x5DE9:gǒng 0x5DEA:jù 0x5DEB:wū 0x5DEC:pu 0x5DED:pu 0x5DEE:chà,chā,chāi,chài,cī,cuō,jiē 0x5DEF:qiú 0x5DF0:qiú 0x5DF1:jǐ,qǐ 0x5DF2:yǐ,sì 0x5DF3:sì,yǐ 0x5DF4:bā 0x5DF5:zhī 0x5DF6:zhāo 0x5DF7:xiàng,hàng 0x5DF8:yí 0x5DF9:jǐn 0x5DFA:xùn 0x5DFB:juàn 0x5DFC:bā 0x5DFD:xùn,zhuàn 0x5DFE:jīn 0x5DFF:fú,pó 0x5E00:zā 0x5E01:bì,yìn 0x5E02:shì,fú 0x5E03:bù 0x5E04:dīng 0x5E05:shuài 0x5E06:fān,fán,fàn 0x5E07:niè 0x5E08:shī 0x5E09:fēn 0x5E0A:pà,pā 0x5E0B:zhǐ 0x5E0C:xī 0x5E0D:hù 0x5E0E:dàn 0x5E0F:wéi 0x5E10:zhàng 0x5E11:tǎng,nú 0x5E12:dài 0x5E13:mò,wà 0x5E14:pèi,pī 0x5E15:pà,mò 0x5E16:tiē,tiè,tiě 0x5E17:bō,fú 0x5E18:lián,chén 0x5E19:zhì 0x5E1A:zhǒu 0x5E1B:bó 0x5E1C:zhì 0x5E1D:dì 0x5E1E:mò 0x5E1F:yì 0x5E20:yì 0x5E21:píng 0x5E22:qià 0x5E23:juǎn,juàn 0x5E24:rú 0x5E25:shuài 0x5E26:dài 0x5E27:zhèng 0x5E28:shuì 0x5E29:qiào 0x5E2A:zhēn 0x5E2B:shī 0x5E2C:qún 0x5E2D:xí 0x5E2E:bāng 0x5E2F:dài 0x5E30:guī 0x5E31:chóu,dào 0x5E32:píng 0x5E33:zhàng 0x5E34:sàn,jiǎn,jiān 0x5E35:wān 0x5E36:dài 0x5E37:wéi 0x5E38:cháng 0x5E39:shà,qiè 0x5E3A:qí,jì 0x5E3B:zé 0x5E3C:guó 0x5E3D:mào 0x5E3E:dǔ 0x5E3F:hóu 0x5E40:zhèng 0x5E41:xū 0x5E42:mì 0x5E43:wéi 0x5E44:wò 0x5E45:fú,bī 0x5E46:yì,kài 0x5E47:bāng 0x5E48:píng 0x5E49:dié 0x5E4A:gōng 0x5E4B:pán 0x5E4C:huǎng 0x5E4D:tāo 0x5E4E:mì 0x5E4F:jià 0x5E50:téng 0x5E51:huī 0x5E52:zhōng 0x5E53:shān,shēn,qiāo 0x5E54:màn 0x5E55:mù,màn 0x5E56:biāo 0x5E57:guó 0x5E58:zé,cè 0x5E59:mù 0x5E5A:bāng 0x5E5B:zhàng 0x5E5C:jǐng 0x5E5D:chǎn,chàn 0x5E5E:fú 0x5E5F:zhì 0x5E60:hū,wú 0x5E61:fān 0x5E62:chuáng,zhuàng 0x5E63:bì 0x5E64:bì 0x5E65:zhǎng 0x5E66:mì 0x5E67:qiāo 0x5E68:chān,chàn 0x5E69:fén,fèn 0x5E6A:méng,měng 0x5E6B:bāng 0x5E6C:chóu,dào 0x5E6D:miè 0x5E6E:chú 0x5E6F:jié 0x5E70:xiǎn 0x5E71:lán 0x5E72:gàn,gān,àn 0x5E73:píng,pián,bìng,bēng 0x5E74:nián,nìng 0x5E75:jiān,qiān 0x5E76:bìng,bīng 0x5E77:bìng,bīng 0x5E78:xìng,niè 0x5E79:gàn,gān,hán,guǎn 0x5E7A:yāo,mì 0x5E7B:huàn 0x5E7C:yòu,yào 0x5E7D:yōu 0x5E7E:jǐ,jī,jì,qí 0x5E7F:guǎng,yǎn,ān 0x5E80:pǐ 0x5E81:tīng 0x5E82:zè 0x5E83:guǎng 0x5E84:zhuāng,péng 0x5E85:mó 0x5E86:qìng 0x5E87:bì,pí,pǐ 0x5E88:qín 0x5E89:dùn,tún 0x5E8A:chuáng 0x5E8B:guǐ,guì 0x5E8C:yǎ,yá 0x5E8D:bài,xìn,tīng 0x5E8E:jiè 0x5E8F:xù 0x5E90:lú 0x5E91:wǔ 0x5E92:zhuāng 0x5E93:kù 0x5E94:yīng,yìng 0x5E95:dǐ,de 0x5E96:páo 0x5E97:diàn 0x5E98:yā 0x5E99:miào 0x5E9A:gēng 0x5E9B:cì 0x5E9C:fǔ 0x5E9D:tóng 0x5E9E:páng 0x5E9F:fèi 0x5EA0:xiáng 0x5EA1:yǐ 0x5EA2:zhì 0x5EA3:tiāo 0x5EA4:zhì 0x5EA5:xiū 0x5EA6:dù,duó,zhái 0x5EA7:zuò 0x5EA8:xiāo 0x5EA9:tú 0x5EAA:guǐ 0x5EAB:kù 0x5EAC:máng,méng 0x5EAD:tíng 0x5EAE:yǒu,yóu 0x5EAF:bū 0x5EB0:bìng,bǐng 0x5EB1:chěng 0x5EB2:lái 0x5EB3:bì,pí 0x5EB4:jí,jī 0x5EB5:ān,yǎn,è 0x5EB6:shù,zhù,zhē 0x5EB7:kāng,kàng 0x5EB8:yōng,yóng 0x5EB9:tuǒ 0x5EBA:sōng 0x5EBB:shù 0x5EBC:qǐng 0x5EBD:yù 0x5EBE:yǔ,yú 0x5EBF:miào 0x5EC0:sōu 0x5EC1:cè,cì,zè,si 0x5EC2:xiāng 0x5EC3:fèi 0x5EC4:jiù 0x5EC5:è 0x5EC6:guī,huì,wěi 0x5EC7:liù 0x5EC8:shà,xià 0x5EC9:lián 0x5ECA:láng 0x5ECB:sōu 0x5ECC:zhì 0x5ECD:bù 0x5ECE:qǐng,qìng,qīng 0x5ECF:jiù 0x5ED0:jiù 0x5ED1:jǐn,qín 0x5ED2:áo 0x5ED3:kuò 0x5ED4:lóu 0x5ED5:yìn 0x5ED6:liào,liáo 0x5ED7:dài 0x5ED8:lù 0x5ED9:yì 0x5EDA:chú 0x5EDB:chán 0x5EDC:tú 0x5EDD:sī 0x5EDE:xīn,qiàn 0x5EDF:miào 0x5EE0:chǎng 0x5EE1:wǔ,wú 0x5EE2:fèi 0x5EE3:guǎng,guàng,kuàng,guāng 0x5EE4:kù 0x5EE5:kuài 0x5EE6:bì 0x5EE7:qiáng,sè 0x5EE8:xiè 0x5EE9:lǐn,lǎn 0x5EEA:lǐn 0x5EEB:liáo 0x5EEC:lú,lǘ 0x5EED:jì 0x5EEE:yǐng 0x5EEF:xiān 0x5EF0:tīng 0x5EF1:yōng 0x5EF2:lí 0x5EF3:tīng 0x5EF4:yǐn,yìn 0x5EF5:xún 0x5EF6:yán 0x5EF7:tíng 0x5EF8:dí 0x5EF9:pǎi,pò 0x5EFA:jiàn 0x5EFB:huí 0x5EFC:nǎi 0x5EFD:huí 0x5EFE:gǒng 0x5EFF:niàn 0x5F00:kāi 0x5F01:biàn,pán 0x5F02:yì,yí 0x5F03:qì 0x5F04:nòng,lòng 0x5F05:fèn 0x5F06:jǔ,qǔ 0x5F07:yǎn,yān,nán 0x5F08:yì 0x5F09:zàng 0x5F0A:bì 0x5F0B:yì 0x5F0C:yī 0x5F0D:èr 0x5F0E:sān 0x5F0F:shì,tè 0x5F10:èr 0x5F11:shì 0x5F12:shì 0x5F13:gōng 0x5F14:diào,dì 0x5F15:yǐn 0x5F16:hù 0x5F17:fú 0x5F18:hóng 0x5F19:wū 0x5F1A:tuí 0x5F1B:chí 0x5F1C:jiàng 0x5F1D:bà 0x5F1E:shěn 0x5F1F:dì,tì,tuí 0x5F20:zhāng 0x5F21:jué,zhāng 0x5F22:tāo 0x5F23:fǔ 0x5F24:dǐ 0x5F25:mí 0x5F26:xián 0x5F27:hú 0x5F28:chāo 0x5F29:nǔ 0x5F2A:jìng 0x5F2B:zhěn 0x5F2C:yí 0x5F2D:mǐ 0x5F2E:quān,juàn 0x5F2F:wān 0x5F30:shāo 0x5F31:ruò 0x5F32:xuān,yuān 0x5F33:jìng 0x5F34:diāo 0x5F35:zhāng,zhàng 0x5F36:jiàng 0x5F37:qiáng,jiàng,qiǎng 0x5F38:péng,pēng 0x5F39:dàn,tán 0x5F3A:qiáng,qiǎng,jiàng 0x5F3B:bì 0x5F3C:bì 0x5F3D:shè 0x5F3E:dàn 0x5F3F:jiǎn 0x5F40:gòu,kōu 0x5F41:gē 0x5F42:fā 0x5F43:bì 0x5F44:kōu 0x5F45:jiǎn 0x5F46:biè 0x5F47:xiāo 0x5F48:dàn,tán 0x5F49:guō 0x5F4A:jiàng,qiáng,qiǎng,jiāng 0x5F4B:hóng 0x5F4C:mí,mǐ,ní 0x5F4D:guō 0x5F4E:wān 0x5F4F:jué 0x5F50:jì 0x5F51:jì 0x5F52:guī 0x5F53:dāng,dàng 0x5F54:lù 0x5F55:lù 0x5F56:tuàn,shǐ 0x5F57:huì,suì 0x5F58:zhì 0x5F59:huì 0x5F5A:huì 0x5F5B:yí 0x5F5C:yí 0x5F5D:yí 0x5F5E:yí 0x5F5F:yuē 0x5F60:yuē 0x5F61:shān,xiǎn 0x5F62:xíng 0x5F63:wén 0x5F64:tóng 0x5F65:yàn 0x5F66:yàn,pán 0x5F67:yù 0x5F68:chī 0x5F69:cǎi 0x5F6A:biāo 0x5F6B:diāo 0x5F6C:bīn,bān 0x5F6D:péng,páng,bāng,pēng 0x5F6E:yǒng 0x5F6F:piāo,piào,miǎo 0x5F70:zhāng 0x5F71:yǐng 0x5F72:chī 0x5F73:chì,fú 0x5F74:zhuó,bó 0x5F75:tuǒ,yí 0x5F76:jí 0x5F77:páng,fǎng,fáng 0x5F78:zhōng 0x5F79:yì 0x5F7A:wáng 0x5F7B:chè 0x5F7C:bǐ 0x5F7D:dī 0x5F7E:líng,lǐng 0x5F7F:fú 0x5F80:wǎng,wàng 0x5F81:zhēng 0x5F82:cú 0x5F83:wǎng 0x5F84:jìng 0x5F85:dài,dāi 0x5F86:xī 0x5F87:xùn 0x5F88:hěn 0x5F89:yáng 0x5F8A:huái,huí 0x5F8B:lǜ 0x5F8C:hòu 0x5F8D:wǎng,wā 0x5F8E:chěng,zhèng 0x5F8F:zhì 0x5F90:xú 0x5F91:jìng,jīng 0x5F92:tú 0x5F93:cóng 0x5F94:zhi 0x5F95:lái,lài 0x5F96:cóng 0x5F97:dé,děi,de 0x5F98:pái 0x5F99:xǐ,sī 0x5F9A:dōng 0x5F9B:jì 0x5F9C:cháng 0x5F9D:zhì 0x5F9E:cóng,zòng,zōng,cōng,zǒng 0x5F9F:zhōu 0x5FA0:lái,lài 0x5FA1:yù,yà 0x5FA2:xiè 0x5FA3:jiè 0x5FA4:jiàn 0x5FA5:shì,tǐ 0x5FA6:jiǎ,xiá 0x5FA7:biàn,pián,piān 0x5FA8:huáng 0x5FA9:fù 0x5FAA:xún 0x5FAB:wěi 0x5FAC:páng,bàng 0x5FAD:yáo 0x5FAE:wēi 0x5FAF:xī,xí 0x5FB0:zhēng 0x5FB1:piào 0x5FB2:tí,chí 0x5FB3:dé 0x5FB4:zhēng 0x5FB5:zhēng,zhǐ,chéng 0x5FB6:bié 0x5FB7:dé 0x5FB8:chōng,zhōng,zhǒng 0x5FB9:chè 0x5FBA:jiǎo 0x5FBB:huì 0x5FBC:jiǎo,jiào,jiāo,yāo 0x5FBD:huī 0x5FBE:méi 0x5FBF:lòng,lǒng 0x5FC0:xiāng,rǎng 0x5FC1:bào 0x5FC2:qú,jù 0x5FC3:xīn 0x5FC4:xin 0x5FC5:bì 0x5FC6:yì 0x5FC7:lè 0x5FC8:rén 0x5FC9:dāo 0x5FCA:dìng,tìng 0x5FCB:gǎi 0x5FCC:jì 0x5FCD:rěn,rèn 0x5FCE:rén 0x5FCF:chàn,qiǎn,qiān 0x5FD0:tǎn,kěng 0x5FD1:tè,dǎo 0x5FD2:tè,tuī,tēi 0x5FD3:gān,hàn 0x5FD4:qì,yì 0x5FD5:shì,tài 0x5FD6:cǔn 0x5FD7:zhì 0x5FD8:wàng,wáng 0x5FD9:máng 0x5FDA:xī,liě 0x5FDB:fān 0x5FDC:yīng 0x5FDD:tiǎn 0x5FDE:mín,wěn 0x5FDF:wěn 0x5FE0:zhōng 0x5FE1:chōng 0x5FE2:wù 0x5FE3:jí 0x5FE4:wǔ,wù 0x5FE5:xì 0x5FE6:jiá 0x5FE7:yōu,yòu 0x5FE8:wàn,wán 0x5FE9:cōng 0x5FEA:sōng,zhōng 0x5FEB:kuài 0x5FEC:yù,shū 0x5FED:biàn 0x5FEE:zhì,qí 0x5FEF:qí,shì 0x5FF0:cuì 0x5FF1:chén,dàn 0x5FF2:tài 0x5FF3:tún,zhūn,dùn 0x5FF4:qián,qín 0x5FF5:niàn 0x5FF6:hún 0x5FF7:xiōng 0x5FF8:niǔ 0x5FF9:kuáng,wǎng 0x5FFA:xiān 0x5FFB:xīn 0x5FFC:kāng,hāng,hàng 0x5FFD:hū 0x5FFE:kài,qì 0x5FFF:fèn 0x6000:huái,fù 0x6001:tài 0x6002:sǒng 0x6003:wǔ 0x6004:òu 0x6005:chàng 0x6006:chuàng 0x6007:jù 0x6008:yì 0x6009:bǎo,bào 0x600A:chāo 0x600B:mín,mén 0x600C:pēi 0x600D:zuò,zhà 0x600E:zěn 0x600F:yàng,yāng 0x6010:jù,kòu 0x6011:bàn 0x6012:nù 0x6013:náo,niú 0x6014:zhēng,zhèng 0x6015:pà,bó 0x6016:bù 0x6017:tiē,zhān 0x6018:hù,gù 0x6019:hù,tiē 0x601A:jù,qū,cū,zū 0x601B:dá,dàn 0x601C:lián,líng,lǐng 0x601D:sī,sāi 0x601E:chóu,yóu 0x601F:dì 0x6020:dài,yí 0x6021:yí 0x6022:tū,dié,tuì 0x6023:yóu 0x6024:fū 0x6025:jí 0x6026:pēng 0x6027:xìng 0x6028:yuàn,yùn 0x6029:ní 0x602A:guài 0x602B:fú,fèi,bèi 0x602C:xì 0x602D:bì 0x602E:yōu,yào 0x602F:qiè 0x6030:xuàn 0x6031:cōng 0x6032:bǐng 0x6033:huǎng 0x6034:xù,xuè 0x6035:chù,xù 0x6036:bì,pī 0x6037:shù 0x6038:xī 0x6039:tān 0x603A:yǒng 0x603B:zǒng 0x603C:duì 0x603D:mo 0x603E:zhǐ 0x603F:yì 0x6040:shì 0x6041:nèn,rèn,nín 0x6042:xún,shùn 0x6043:shì,zhì 0x6044:xì 0x6045:lǎo 0x6046:héng,gèng 0x6047:kuāng 0x6048:móu 0x6049:zhǐ 0x604A:xié 0x604B:liàn 0x604C:tiāo,yáo 0x604D:huǎng,guāng 0x604E:dié 0x604F:hào 0x6050:kǒng 0x6051:guǐ,wéi 0x6052:héng 0x6053:xī,qī,xù 0x6054:jiǎo,xiào 0x6055:shù 0x6056:sī 0x6057:hū,kuā 0x6058:qiū 0x6059:yàng 0x605A:huì 0x605B:huí 0x605C:chì 0x605D:jiá,qì 0x605E:yí 0x605F:xiōng 0x6060:guài 0x6061:lìn 0x6062:huī 0x6063:zì 0x6064:xù 0x6065:chǐ 0x6066:shàng 0x6067:nǜ 0x6068:hèn 0x6069:ēn 0x606A:kè 0x606B:dòng,tōng 0x606C:tián 0x606D:gōng 0x606E:quān,zhuān 0x606F:xī 0x6070:qià 0x6071:yuè 0x6072:pēng 0x6073:kěn 0x6074:dé 0x6075:huì 0x6076:è,ě,wū,wù 0x6077:xiao 0x6078:tòng 0x6079:yān 0x607A:kǎi 0x607B:cè 0x607C:nǎo 0x607D:yùn 0x607E:máng 0x607F:yǒng,tōng 0x6080:yǒng 0x6081:yuān,juàn 0x6082:pī,bī,pǐ 0x6083:kǔn 0x6084:qiāo,qiǎo,qiào 0x6085:yuè 0x6086:yù,shū 0x6087:tú,yú 0x6088:jiè,kè 0x6089:xī 0x608A:zhé 0x608B:lìn 0x608C:tì 0x608D:hàn 0x608E:hào,jiào 0x608F:qiè 0x6090:tì 0x6091:bù 0x6092:yì 0x6093:qiàn 0x6094:huǐ 0x6095:xī 0x6096:bèi,běi 0x6097:mán,mèn 0x6098:yī,yì 0x6099:hēng,hèng 0x609A:sǒng 0x609B:quān,xún 0x609C:chěng 0x609D:kuī,lǐ 0x609E:wù 0x609F:wù 0x60A0:yōu 0x60A1:lí 0x60A2:liàng,lǎng 0x60A3:huàn 0x60A4:cōng 0x60A5:yì 0x60A6:yuè 0x60A7:lì 0x60A8:nín 0x60A9:nǎo 0x60AA:è 0x60AB:què 0x60AC:xuán 0x60AD:qiān 0x60AE:wù 0x60AF:mǐn 0x60B0:cóng 0x60B1:fěi 0x60B2:bēi 0x60B3:dé 0x60B4:cuì 0x60B5:chàng 0x60B6:mèn,mēn 0x60B7:lì 0x60B8:jì 0x60B9:guàn 0x60BA:guàn 0x60BB:xìng 0x60BC:dào 0x60BD:qī,qì 0x60BE:kōng,kǒng 0x60BF:tiǎn 0x60C0:lún,lùn 0x60C1:xī 0x60C2:kǎn 0x60C3:gǔn 0x60C4:nì 0x60C5:qíng 0x60C6:chóu,qiū,dāo 0x60C7:dūn 0x60C8:guǒ 0x60C9:zhān 0x60CA:jīng,liáng 0x60CB:wǎn 0x60CC:yuān,wǎn,yù 0x60CD:jīn 0x60CE:jì 0x60CF:lán,lín 0x60D0:yù,xù 0x60D1:huò 0x60D2:hé 0x60D3:quán,juàn 0x60D4:tán,dàn 0x60D5:tì 0x60D6:tì 0x60D7:niè 0x60D8:wǎng 0x60D9:chuò,chuì 0x60DA:hū 0x60DB:hūn,hǔn,mèn 0x60DC:xī 0x60DD:chǎng,tǎng 0x60DE:xīn 0x60DF:wéi,wěi 0x60E0:huì 0x60E1:è,wù,wū,ě,hū 0x60E2:suǒ,ruǐ 0x60E3:zǒng 0x60E4:jiān 0x60E5:yǒng 0x60E6:diàn 0x60E7:jù 0x60E8:cǎn 0x60E9:chéng 0x60EA:dé 0x60EB:bèi 0x60EC:qiè 0x60ED:cán 0x60EE:dàn 0x60EF:guàn 0x60F0:duò,tuó 0x60F1:nǎo 0x60F2:yùn 0x60F3:xiǎng 0x60F4:zhuì,chuǎn,guà 0x60F5:dié,tiē 0x60F6:huáng 0x60F7:chǔn 0x60F8:qióng 0x60F9:rě,ruò 0x60FA:xīng 0x60FB:cè 0x60FC:biǎn 0x60FD:mǐn,hūn 0x60FE:zōng 0x60FF:tí,shì 0x6100:qiǎo,qiù 0x6101:chóu,qiǎo,jiū 0x6102:bèi 0x6103:xuān 0x6104:wēi 0x6105:gé 0x6106:qiān 0x6107:wěi 0x6108:yù 0x6109:yú,tōu,yǔ 0x610A:bì 0x610B:xuān 0x610C:huàn 0x610D:mǐn,fēn 0x610E:bì 0x610F:yì,yī 0x6110:miǎn 0x6111:yǒng 0x6112:kài,qì,hè 0x6113:dàng,shāng,táng,yáng 0x6114:yīn 0x6115:è 0x6116:chén,dān,xìn 0x6117:mào 0x6118:qià,qiā,kè 0x6119:kè 0x611A:yú 0x611B:ài 0x611C:qiè 0x611D:yǎn 0x611E:nuò 0x611F:gǎn,hàn 0x6120:yùn,yǔn,wěn 0x6121:zǒng 0x6122:sāi,sī,sǐ 0x6123:lèng 0x6124:fèn 0x6125:yīng 0x6126:kuì 0x6127:kuì 0x6128:què 0x6129:gōng,gòng,hǒng 0x612A:yún 0x612B:sù 0x612C:sù,sè 0x612D:qí 0x612E:yáo,yào 0x612F:sǒng 0x6130:huàng,huǎng 0x6131:jí 0x6132:gǔ 0x6133:jù 0x6134:chuàng,chuǎng 0x6135:nì 0x6136:xié 0x6137:kǎi 0x6138:zhěng 0x6139:yǒng 0x613A:cǎo 0x613B:xùn 0x613C:shèn 0x613D:bó 0x613E:kài,xì,qì 0x613F:yuàn 0x6140:xì,xié 0x6141:hùn 0x6142:yǒng 0x6143:yǎng 0x6144:lì 0x6145:sāo,cǎo 0x6146:tāo 0x6147:yīn 0x6148:cí 0x6149:xù,chù 0x614A:qiàn,xián,qiǎn,qiè 0x614B:tài 0x614C:huāng,huǎng,huang 0x614D:yùn 0x614E:shèn,zhèn 0x614F:mǐng 0x6150:gong 0x6151:shè 0x6152:cóng,cáo 0x6153:piāo,piào 0x6154:mù 0x6155:mù 0x6156:guó 0x6157:chì 0x6158:cǎn 0x6159:cán 0x615A:cán 0x615B:cuī 0x615C:mǐn 0x615D:tè,nì 0x615E:zhāng 0x615F:tòng 0x6160:ào,áo 0x6161:shuǎng 0x6162:màn,mán 0x6163:guàn 0x6164:què 0x6165:zào,cào 0x6166:jiù 0x6167:huì 0x6168:kǎi 0x6169:lián 0x616A:òu,ōu 0x616B:sǒng 0x616C:qín,jìn,jǐn 0x616D:yìn 0x616E:lǜ,lǘ 0x616F:shāng 0x6170:wèi 0x6171:tuán 0x6172:mán 0x6173:qiān,xián 0x6174:shè,zhé 0x6175:yōng 0x6176:qìng,qīng,qiāng 0x6177:kāng 0x6178:dì,chì 0x6179:zhí,zhé 0x617A:lóu,lǚ 0x617B:juàn 0x617C:qī 0x617D:qī 0x617E:yù 0x617F:píng 0x6180:liáo 0x6181:còng,sōng 0x6182:yōu 0x6183:chōng 0x6184:zhì 0x6185:tòng 0x6186:chēng 0x6187:qì 0x6188:qū 0x6189:péng 0x618A:bèi 0x618B:biē 0x618C:qióng 0x618D:jiāo 0x618E:zēng 0x618F:chì 0x6190:lián 0x6191:píng 0x6192:kuì 0x6193:huì 0x6194:qiáo 0x6195:chéng,zhèng,dèng 0x6196:yìn,xìn,yín 0x6197:yìn 0x6198:xǐ,xī 0x6199:xī,xǐ 0x619A:dàn,dá,chǎn 0x619B:tán 0x619C:duò 0x619D:duì 0x619E:duì,dùn,tūn 0x619F:sù 0x61A0:jué 0x61A1:cè 0x61A2:xiāo,jiāo 0x61A3:fān 0x61A4:fèn 0x61A5:láo 0x61A6:lào,láo 0x61A7:chōng,zhuàng 0x61A8:hān 0x61A9:qì 0x61AA:xián,xiàn 0x61AB:mǐn 0x61AC:jǐng 0x61AD:liǎo,liáo 0x61AE:wǔ,wú 0x61AF:cǎn 0x61B0:jué 0x61B1:cù 0x61B2:xiàn,xiǎn 0x61B3:tǎn 0x61B4:shéng 0x61B5:pī 0x61B6:yì 0x61B7:chù,chǔ 0x61B8:xiān 0x61B9:náo,nóng,náng,nǎo 0x61BA:dàn 0x61BB:tǎn 0x61BC:jǐng,jìng 0x61BD:sōng 0x61BE:hàn,dàn 0x61BF:jiǎo,jī 0x61C0:wèi 0x61C1:xuān,huān 0x61C2:dǒng 0x61C3:qín 0x61C4:qín 0x61C5:jù 0x61C6:cǎo,sāo,sào 0x61C7:kěn 0x61C8:xiè 0x61C9:yīng,yìng 0x61CA:ào,yù 0x61CB:mào 0x61CC:yì 0x61CD:lǐn 0x61CE:sè 0x61CF:jùn 0x61D0:huái 0x61D1:mèn 0x61D2:lǎn 0x61D3:ài 0x61D4:lǐn,lǎn 0x61D5:yān,yàn,yè 0x61D6:kuò 0x61D7:xià 0x61D8:chì 0x61D9:yǔ 0x61DA:yìn 0x61DB:dāi 0x61DC:měng,mèng,méng 0x61DD:ài,nì,nǐ 0x61DE:méng,měng 0x61DF:duì 0x61E0:qí,jì,jī 0x61E1:mǒ 0x61E2:lán,xiàn 0x61E3:mèn 0x61E4:chóu 0x61E5:zhì 0x61E6:nuò 0x61E7:nuò 0x61E8:yān 0x61E9:yǎng 0x61EA:bó 0x61EB:zhì 0x61EC:kuàng 0x61ED:kuǎng 0x61EE:yǒu,yōu 0x61EF:fū 0x61F0:liú,liǔ 0x61F1:miè 0x61F2:chéng 0x61F3:hui 0x61F4:chàn 0x61F5:měng,mèng 0x61F6:lǎn,lài 0x61F7:huái 0x61F8:xuán 0x61F9:ràng 0x61FA:chàn 0x61FB:jì 0x61FC:jù 0x61FD:huān,guàn 0x61FE:shè 0x61FF:yì,yī 0x6200:liàn 0x6201:nǎn 0x6202:mí,mó 0x6203:tǎng 0x6204:jué 0x6205:gàng 0x6206:gàng,zhuàng 0x6207:zhuàng,gàng 0x6208:gē 0x6209:yuè 0x620A:wù 0x620B:jiān 0x620C:xū,qu 0x620D:shù 0x620E:róng,rēng 0x620F:xì,hū 0x6210:chéng 0x6211:wǒ 0x6212:jiè 0x6213:gē 0x6214:jiān,cán 0x6215:qiāng,zāng 0x6216:huò,yù 0x6217:qiāng,qiàng 0x6218:zhàn 0x6219:dòng 0x621A:qī,cù 0x621B:jiá 0x621C:dié 0x621D:zéi 0x621E:jiá 0x621F:jǐ 0x6220:zhī,zhí 0x6221:kān,zhěn 0x6222:jí 0x6223:kuí 0x6224:gài 0x6225:děng 0x6226:zhàn 0x6227:qiāng,chuāng,qiàng 0x6228:gē 0x6229:jiǎn 0x622A:jié 0x622B:yù 0x622C:jiǎn 0x622D:yǎn,yǒu 0x622E:lù 0x622F:hū,xì 0x6230:zhàn 0x6231:xì 0x6232:xì,hū,xī,huī,suō,yī 0x6233:chuō 0x6234:dài 0x6235:qú 0x6236:hù 0x6237:hù 0x6238:hù 0x6239:è 0x623A:shì,yí 0x623B:tì 0x623C:mǎo 0x623D:hù 0x623E:lì 0x623F:fáng,páng 0x6240:suǒ 0x6241:biǎn,piān,biān,pián 0x6242:diàn 0x6243:jiōng,jiǒng 0x6244:shǎng,jiōng 0x6245:yí 0x6246:yǐ 0x6247:shàn,shān 0x6248:hù 0x6249:fēi 0x624A:yǎn 0x624B:shǒu 0x624C:shou 0x624D:cái,zāi 0x624E:zhā,zhá,zhǎ,zā 0x624F:qiú 0x6250:lè,lì,cái 0x6251:pū,pì 0x6252:bā,bài,bié,pá 0x6253:dǎ,dá 0x6254:rēng,rèng 0x6255:fǎn 0x6256:rù 0x6257:zài 0x6258:tuō 0x6259:zhàng 0x625A:diǎo,dí,yuē,lì 0x625B:káng,gāng 0x625C:yū,wū 0x625D:kū,wū 0x625E:gǎn,hàn 0x625F:shēn 0x6260:chā,chāi,zhǎ 0x6261:tuō,yǐ,chǐ 0x6262:gǔ,qì,jié,gē 0x6263:kòu 0x6264:wù 0x6265:dèn 0x6266:qiān 0x6267:zhí 0x6268:rèn 0x6269:kuò 0x626A:mén 0x626B:sǎo,sào 0x626C:yáng 0x626D:niǔ,chǒu,zhǒu,zhòu 0x626E:bàn,fěn,fēn,huǒ 0x626F:chě 0x6270:rǎo,yòu 0x6271:xī,chā,qì 0x6272:qián,qín 0x6273:bān,pān 0x6274:jiá 0x6275:yú 0x6276:fú,pú 0x6277:ào 0x6278:xī,zhé 0x6279:pī,pí 0x627A:zhǐ,qí 0x627B:zhì,sǔn,kǎn 0x627C:è 0x627D:dèn 0x627E:zhǎo,huá 0x627F:chéng,zhěng,zhèng 0x6280:jì,qí 0x6281:yǎn 0x6282:kuáng,wǎng 0x6283:biàn 0x6284:chāo,suō,chào,chǎo 0x6285:jū 0x6286:wěn 0x6287:hú 0x6288:yuè 0x6289:jué 0x628A:bǎ,bà,pá 0x628B:qìn 0x628C:dǎn,shěn 0x628D:zhěng 0x628E:yǔn 0x628F:wán 0x6290:nè,nì,nà,ruì 0x6291:yì 0x6292:shū 0x6293:zhuā 0x6294:póu 0x6295:tóu,dòu 0x6296:dǒu 0x6297:kàng,gāng 0x6298:zhé,shé,tí,zhē 0x6299:póu 0x629A:fǔ 0x629B:pāo 0x629C:bá 0x629D:ǎo,ào,niù 0x629E:zé 0x629F:tuán 0x62A0:kōu 0x62A1:lūn,lún 0x62A2:qiǎng,qiāng 0x62A3:yun 0x62A4:hù 0x62A5:bào 0x62A6:bǐng 0x62A7:zhǐ,zhǎi 0x62A8:pēng,bēng 0x62A9:nán 0x62AA:bù,pū,bá 0x62AB:pī 0x62AC:tái,chī 0x62AD:yǎo,tāo 0x62AE:zhěn 0x62AF:zhā 0x62B0:yāng 0x62B1:bào,pāo,pǒu 0x62B2:hē,hè,qiā 0x62B3:nǐ,ní 0x62B4:yè,shé 0x62B5:dǐ,zhǐ,qí 0x62B6:chì 0x62B7:pī,pēi 0x62B8:jiā 0x62B9:mǒ,mò,mā 0x62BA:mèi 0x62BB:chēn,shēn 0x62BC:yā,xiá,jiǎ 0x62BD:chōu 0x62BE:qū 0x62BF:mǐn 0x62C0:chù 0x62C1:jiā,yá 0x62C2:fú,bì,pì,fèi 0x62C3:zhǎ,zhǎn,zhà,zhá 0x62C4:zhǔ 0x62C5:dān,dǎn,jiē,dàn 0x62C6:chāi,chè,chì,cā 0x62C7:mǔ 0x62C8:niān,niǎn,diān 0x62C9:lā,lá,lǎ,là,la 0x62CA:fǔ,fū,bǔ 0x62CB:pāo 0x62CC:bàn,pān 0x62CD:pāi,bó 0x62CE:līn,līng 0x62CF:ná 0x62D0:guǎi 0x62D1:qián 0x62D2:jù,jǔ 0x62D3:tà,zhí,tuò 0x62D4:bá,bō,bié,fá,bèi 0x62D5:tuō 0x62D6:tuō,chǐ 0x62D7:ǎo,ào,niù,yù 0x62D8:jū,gōu,jǔ,jú 0x62D9:zhuō 0x62DA:pàn,biàn,fèn,fān,pīn 0x62DB:zhāo,qiáo,sháo 0x62DC:bài 0x62DD:bài 0x62DE:dǐ 0x62DF:nǐ 0x62E0:jù 0x62E1:kuò 0x62E2:lǒng 0x62E3:jiǎn 0x62E4:qiá 0x62E5:yōng 0x62E6:lán 0x62E7:níng,nǐng,nìng 0x62E8:bō 0x62E9:zé,zhái 0x62EA:qiān 0x62EB:hén 0x62EC:kuò,guā 0x62ED:shì 0x62EE:jié,jiá 0x62EF:zhěng 0x62F0:nǐn 0x62F1:gǒng,jú 0x62F2:gǒng 0x62F3:quán 0x62F4:shuān,quán 0x62F5:cún,zùn 0x62F6:zā,zǎn 0x62F7:kǎo 0x62F8:yí,chǐ,hài 0x62F9:xié 0x62FA:cè,sè,chuò 0x62FB:huī 0x62FC:pīn,bìng 0x62FD:zhuāi,yè,zhuài 0x62FE:shí,shè,jiè 0x62FF:ná 0x6300:bāi 0x6301:chí 0x6302:guà 0x6303:zhì,dié 0x6304:kuò,guāng 0x6305:duǒ,duò 0x6306:duǒ 0x6307:zhǐ,zhī,zhí 0x6308:qiè,qì,jiá,qià,shì 0x6309:àn 0x630A:nòng 0x630B:zhèn 0x630C:gé,hé 0x630D:jiào,jiāo 0x630E:kuà,kū,kōu 0x630F:dòng 0x6310:ná,rú,nú 0x6311:tiāo,tiǎo,táo,diào,tiáo,tiao 0x6312:liè 0x6313:zhā 0x6314:lǚ 0x6315:dié,shè 0x6316:wā 0x6317:jué 0x6318:liě 0x6319:jǔ 0x631A:zhì 0x631B:luán 0x631C:yà 0x631D:wō,zhuā 0x631E:tà 0x631F:xié,jiā 0x6320:náo 0x6321:dǎng,dàng 0x6322:jiǎo 0x6323:zhēng,zhèng 0x6324:jǐ 0x6325:huī 0x6326:xián 0x6327:yǔ 0x6328:āi,ái 0x6329:tuō 0x632A:nuó 0x632B:cuò,zuò 0x632C:bó 0x632D:gěng 0x632E:tǐ,tì 0x632F:zhèn,zhēn,zhěn 0x6330:chéng 0x6331:sā,shā,suō 0x6332:sā,suō,shā 0x6333:kēng 0x6334:měi 0x6335:nòng 0x6336:jū 0x6337:péng 0x6338:jiǎn 0x6339:yì 0x633A:tǐng,tíng 0x633B:shān,yán 0x633C:ruá,ruó,suī,luò 0x633D:wǎn 0x633E:xié,jiā 0x633F:chā 0x6340:féng 0x6341:jiǎo,kù 0x6342:wǔ,wú 0x6343:jùn 0x6344:jiù,jū,qiú 0x6345:tǒng 0x6346:kǔn,hún 0x6347:huò,chì 0x6348:tú,shū,chá 0x6349:zhuō 0x634A:póu,pōu,fū 0x634B:lǚ,luō 0x634C:bā,bié 0x634D:hàn,xiàn,gǎn 0x634E:shāo,shǎo,xiāo,qiào,shào 0x634F:niē 0x6350:juān,yuán 0x6351:zè 0x6352:shù,sōu,sǒng 0x6353:yé,yú 0x6354:jué,zhuó 0x6355:bǔ 0x6356:wán,guā 0x6357:bù,pú,zhì 0x6358:zùn 0x6359:yè 0x635A:zhāi 0x635B:lǚ 0x635C:sōu 0x635D:tuō,shuì,yǎn 0x635E:lāo 0x635F:sǔn 0x6360:bāng 0x6361:jiǎn 0x6362:huàn 0x6363:dǎo 0x6364:wěi 0x6365:wàn,wān,wǎn,yù 0x6366:qín 0x6367:pěng,fèng 0x6368:shě 0x6369:liè,lì 0x636A:mín 0x636B:mén 0x636C:fǔ,fù,bǔ 0x636D:bǎi,bā,bǐ 0x636E:jù,jū 0x636F:dáo,dǎo 0x6370:wǒ,luò,luǒ 0x6371:ái,āi 0x6372:juǎn,quán,juàn 0x6373:yuè 0x6374:zǒng 0x6375:chēn,tiǎn,niǎn 0x6376:chuí,duǒ 0x6377:jié,qiè,chā 0x6378:tū 0x6379:bèn 0x637A:nà 0x637B:niǎn,niē,niān 0x637C:ruó,wō,wěi,ré 0x637D:zuó,cù,sū,zùn 0x637E:wò,xiá 0x637F:qī 0x6380:xiān,hén 0x6381:chéng 0x6382:diān 0x6383:sǎo,sào 0x6384:lūn,lún 0x6385:qìng 0x6386:gāng,gàng 0x6387:duō,duó,zhuō 0x6388:shòu 0x6389:diào,nuó 0x638A:póu,pǒu,fù,péi 0x638B:dǐ,dì 0x638C:zhǎng 0x638D:hùn 0x638E:jǐ,yǐ 0x638F:tāo,táo 0x6390:qiā 0x6391:qí 0x6392:pái,bài,pǎi 0x6393:shū 0x6394:qiān,wàn 0x6395:líng 0x6396:yē,yè 0x6397:yà,yǎ 0x6398:jué,kū 0x6399:zhēng 0x639A:liǎng 0x639B:guà 0x639C:yì,nǐ,nái,niè 0x639D:huò,xù 0x639E:shàn,yàn,yǎn 0x639F:zhěng,dìng 0x63A0:lüè,lüě 0x63A1:cǎi 0x63A2:tàn,xián 0x63A3:chè 0x63A4:bīng 0x63A5:jiē,xié,shà,chā 0x63A6:tì 0x63A7:kòng,kōng,qiāng 0x63A8:tuī 0x63A9:yǎn,yàn 0x63AA:cuò,zé,cì 0x63AB:zhōu,zōu,chōu 0x63AC:jū 0x63AD:tiàn 0x63AE:qián 0x63AF:kèn 0x63B0:bāi 0x63B1:pá,shǒu 0x63B2:jiē 0x63B3:lǔ 0x63B4:guāi,guó 0x63B5:ming 0x63B6:jié 0x63B7:zhì,zhī 0x63B8:dǎn,shàn 0x63B9:meng 0x63BA:càn,chān,shǎn 0x63BB:sāo 0x63BC:guàn 0x63BD:pèng 0x63BE:yuàn,chuán 0x63BF:nuò 0x63C0:jiǎn 0x63C1:zhēng,kēng 0x63C2:jiū,yóu 0x63C3:jiǎn,jiān,qiān 0x63C4:yú,chōu,yóu,shū,yáo 0x63C5:yán 0x63C6:kuí 0x63C7:nǎn 0x63C8:hōng,hóng,xuàn,jū 0x63C9:róu 0x63CA:pì,chè 0x63CB:wēi 0x63CC:sāi,cāi 0x63CD:zòu,còu 0x63CE:xuān 0x63CF:miáo,mào 0x63D0:tí,chí,shí,dǐ,dī 0x63D1:niē 0x63D2:chā,zhǎ 0x63D3:shì 0x63D4:zǒng,sōng 0x63D5:zhèn,zhēn 0x63D6:yī,jí 0x63D7:xún 0x63D8:yóng,huáng 0x63D9:biān,biàn 0x63DA:yáng 0x63DB:huàn 0x63DC:yǎn 0x63DD:zǎn,zuàn 0x63DE:ǎn,yàn,yè 0x63DF:xū,jū 0x63E0:yà 0x63E1:wò,òu 0x63E2:ké,qiā 0x63E3:chuāi,chuǎi,duǒ,zhuī,tuán,chuài 0x63E4:jí 0x63E5:tì,dì 0x63E6:lá,là 0x63E7:là 0x63E8:chén 0x63E9:kāi,jiá 0x63EA:jiū 0x63EB:jiū 0x63EC:tú 0x63ED:jiē,qì,hé 0x63EE:huī,hún 0x63EF:gèn 0x63F0:chòng,dǒng 0x63F1:xiāo,shuò,xiān 0x63F2:dié,shé,yè 0x63F3:xiē,xiè,xié,jiá 0x63F4:yuán,huàn 0x63F5:qián,jiàn,jiǎn 0x63F6:yé 0x63F7:chā 0x63F8:zhā 0x63F9:bēi 0x63FA:yáo 0x63FB:wēi 0x63FC:beng 0x63FD:lǎn 0x63FE:wèn,wù 0x63FF:qìn 0x6400:chān 0x6401:gē,gé 0x6402:lǒu,lōu 0x6403:zǒng 0x6404:gèn 0x6405:jiǎo 0x6406:gòu,gōu 0x6407:qìn 0x6408:róng 0x6409:què,huō 0x640A:chōu,zǒu,zhū 0x640B:chuāi,chǐ,yí 0x640C:zhǎn 0x640D:sǔn 0x640E:sūn 0x640F:bó 0x6410:chù 0x6411:róng,náng,nǎng 0x6412:bàng,péng,bēng,bǎng 0x6413:cuō,cuǒ,chāi 0x6414:sāo,sào 0x6415:kē,è 0x6416:yáo 0x6417:dǎo 0x6418:zhī 0x6419:nù,nuò,nòu 0x641A:lā,xié,xiàn 0x641B:jiān,lián 0x641C:sōu,xiāo,sòu,shǎo 0x641D:qiǔ 0x641E:gǎo,qiāo,kào 0x641F:xiǎn,xiān 0x6420:shuò 0x6421:sǎng 0x6422:jìn 0x6423:miè 0x6424:è,yì 0x6425:chuí,duī 0x6426:nuò 0x6427:shān 0x6428:tà,dá 0x6429:zhǎ,jié 0x642A:táng 0x642B:pán,bān,pó 0x642C:bān,sù 0x642D:dā,tà 0x642E:lì 0x642F:tāo 0x6430:hú,kū 0x6431:zhì,nái 0x6432:wā,wǎ,wà 0x6433:huá,xiá,qiā 0x6434:qiān 0x6435:wèn 0x6436:qiǎng,qiāng,qiàng,chéng,chēng 0x6437:tián,shēn 0x6438:zhēn 0x6439:è 0x643A:xié 0x643B:nuò 0x643C:quán 0x643D:chá 0x643E:zhà 0x643F:gé 0x6440:wǔ 0x6441:èn 0x6442:shè 0x6443:káng 0x6444:shè 0x6445:shū 0x6446:bǎi 0x6447:yáo 0x6448:bìn 0x6449:sōu 0x644A:tān 0x644B:sà,shǎi,shā 0x644C:chǎn,sùn 0x644D:suō 0x644E:jiū,liú,liáo,jiǎo,náo 0x644F:chōng 0x6450:chuāng 0x6451:guāi,guó 0x6452:bǐng,bìng 0x6453:féng,pěng 0x6454:shuāi 0x6455:dì,tú,zhí 0x6456:qì,chá 0x6457:sōu,sǒng 0x6458:zhāi 0x6459:liǎn,liàn 0x645A:chēng 0x645B:chī 0x645C:guàn 0x645D:lù 0x645E:luò 0x645F:lǒu,lōu 0x6460:zǒng 0x6461:gài,xì 0x6462:hù,chū 0x6463:zhā,zhuā 0x6464:chuǎng 0x6465:tàng 0x6466:huà 0x6467:cuī,zuì,cuò 0x6468:nái,zhì 0x6469:mó,mí,mā 0x646A:jiāng,qiàng 0x646B:guī 0x646C:yǐng 0x646D:zhí 0x646E:áo,qiāo 0x646F:zhì 0x6470:niè,chè 0x6471:màn,mán 0x6472:chàn,cán 0x6473:kōu,ōu 0x6474:chū,chī 0x6475:shè,sù,mí 0x6476:tuán,zhuàn,zhuān 0x6477:jiǎo,chāo 0x6478:mō,mó 0x6479:mó,mō 0x647A:zhé,lā,xié 0x647B:càn,shǎn,shān,chān,sēn 0x647C:kēng,qiān 0x647D:biāo,piāo,biào,pāo 0x647E:jiàng 0x647F:yáo 0x6480:gòu 0x6481:qiān,qiàn 0x6482:liào 0x6483:jī 0x6484:yīng 0x6485:juē,juè,jué,guì 0x6486:piē 0x6487:piē,biē,piě 0x6488:lāo 0x6489:dūn 0x648A:xiàn 0x648B:ruán,ruí,rún,ruó,suī 0x648C:guì 0x648D:zǎn,zān,zēn,qián 0x648E:yì 0x648F:xián,xún 0x6490:chēng 0x6491:chēng 0x6492:sā,sǎ 0x6493:náo,xiāo,rào 0x6494:hòng 0x6495:sī,xī 0x6496:hàn,qiǎn 0x6497:guàng 0x6498:dā 0x6499:zǔn 0x649A:niǎn 0x649B:lǐn 0x649C:zhěng,chéng 0x649D:huī,wéi 0x649E:zhuàng 0x649F:jiǎo,jiāo,kǎo 0x64A0:jǐ 0x64A1:cāo 0x64A2:dǎn,tàn,dàn,xín 0x64A3:dǎn,dàn,chán,tān,zhǎn,shàn,tián 0x64A4:chè 0x64A5:bō,fá 0x64A6:chě 0x64A7:juē 0x64A8:fǔ,xiāo,sōu 0x64A9:liāo,liáo,liǎo,lào,liào 0x64AA:bèn 0x64AB:fǔ,mó 0x64AC:qiào 0x64AD:bō,bǒ 0x64AE:cuō,zuì,zuān,chuā,zuǒ 0x64AF:zhuó 0x64B0:zhuàn,xuǎn,suàn 0x64B1:wěi,tuǒ 0x64B2:pū,bǔ 0x64B3:qìn 0x64B4:dūn 0x64B5:niǎn 0x64B6:huá 0x64B7:xié 0x64B8:lū 0x64B9:jiǎo 0x64BA:cuān 0x64BB:tà 0x64BC:hàn 0x64BD:qiào,yāo,jī 0x64BE:wō,zhuā 0x64BF:jiǎn,liàn 0x64C0:gǎn 0x64C1:yōng 0x64C2:léi,lèi,lēi 0x64C3:nǎng 0x64C4:lǔ 0x64C5:shàn 0x64C6:zhuó 0x64C7:zé,zhái,yì 0x64C8:pū 0x64C9:chuò 0x64CA:jī,jì,xí 0x64CB:dǎng,dàng 0x64CC:sè 0x64CD:cāo 0x64CE:qíng 0x64CF:qíng,jǐng,jìng 0x64D0:huàn,juǎn,xuān 0x64D1:jiē 0x64D2:qín 0x64D3:kuǎi 0x64D4:dān,dàn,shàn 0x64D5:xié 0x64D6:kā,qiā,jiā,zhá,guā,yè,gē,liè 0x64D7:pǐ,bò 0x64D8:bāi,bò 0x64D9:ào 0x64DA:jù 0x64DB:yè 0x64DC:è 0x64DD:mēng 0x64DE:sǒu,sòu 0x64DF:mí 0x64E0:jǐ 0x64E1:tái 0x64E2:zhuó 0x64E3:dǎo,chóu 0x64E4:xǐng 0x64E5:lǎn 0x64E6:cā 0x64E7:jǔ 0x64E8:yé 0x64E9:rǔ,nǔ,rù,nòu,ruán 0x64EA:yè 0x64EB:yè 0x64EC:nǐ 0x64ED:wò,huò,hù 0x64EE:jié 0x64EF:bìn 0x64F0:níng,nǐng,nìng 0x64F1:gē,gé 0x64F2:zhì,zhī 0x64F3:zhì,jié 0x64F4:kuò,tǎng,guàng 0x64F5:mó 0x64F6:jiàn 0x64F7:xié 0x64F8:liè,là 0x64F9:tān 0x64FA:bǎi 0x64FB:sǒu,sòu 0x64FC:lǔ,lū 0x64FD:lüè,lì,yuè 0x64FE:rǎo 0x64FF:tī,zhì,zhāi 0x6500:pān 0x6501:yǎng 0x6502:lèi 0x6503:cā,sǎ 0x6504:shū,lù 0x6505:zǎn 0x6506:niǎn 0x6507:xiǎn 0x6508:jùn,pèi 0x6509:huō,huò,què 0x650A:lì 0x650B:là,lài 0x650C:huǎn 0x650D:yíng 0x650E:lú,luó 0x650F:lǒng 0x6510:qiān 0x6511:qiān 0x6512:zǎn,cuán 0x6513:qiān 0x6514:lán 0x6515:xiān,jiān 0x6516:yīng 0x6517:méi 0x6518:rǎng,ràng,níng,xiǎng 0x6519:chān,shàn 0x651A:wěng 0x651B:cuān 0x651C:xié 0x651D:shè,zhé,niè,shà 0x651E:luó,luǒ 0x651F:jùn 0x6520:mí,mó 0x6521:chī 0x6522:zǎn,cuán,zuān,zàn 0x6523:luán,liàn 0x6524:tān,nàn 0x6525:zuàn 0x6526:lì,shài 0x6527:diān 0x6528:wā 0x6529:dǎng,tǎng 0x652A:jiǎo 0x652B:jué 0x652C:lǎn 0x652D:lì,luǒ 0x652E:nǎng 0x652F:zhī,zhì,qí 0x6530:guì 0x6531:guǐ,guì 0x6532:qī,jī 0x6533:xún 0x6534:pū 0x6535:pū 0x6536:shōu 0x6537:kǎo 0x6538:yōu 0x6539:gǎi 0x653A:yǐ 0x653B:gōng 0x653C:gān,hàn 0x653D:bān,bīn 0x653E:fàng,fǎng,fāng 0x653F:zhèng,zhēng 0x6540:pò 0x6541:diān 0x6542:kòu 0x6543:mǐn,fēn 0x6544:wù,móu 0x6545:gù 0x6546:hé 0x6547:cè 0x6548:xiào 0x6549:mǐ 0x654A:chù,shōu 0x654B:gé 0x654C:dí,huá 0x654D:xù 0x654E:jiào 0x654F:mǐn 0x6550:chén 0x6551:jiù,jiū 0x6552:shēn 0x6553:duó 0x6554:yǔ,yù 0x6555:chì,sōu 0x6556:áo,ào 0x6557:bài 0x6558:xù 0x6559:jiào,jiāo 0x655A:duó 0x655B:liǎn 0x655C:niè 0x655D:bì 0x655E:chǎng,chèng,zhèng 0x655F:diǎn 0x6560:duō,què 0x6561:yì 0x6562:gǎn 0x6563:sàn,sǎn,sān 0x6564:kě 0x6565:yàn,jiǎo 0x6566:dūn,duī,tuán,diāo,dùn,dào,zhǔn,tūn,duì,tún 0x6567:jī,qǐ 0x6568:tǒu 0x6569:xiào,xué 0x656A:duō 0x656B:jiǎo,qiāo,jiào 0x656C:jìng 0x656D:yáng 0x656E:xiá 0x656F:mǐn 0x6570:shù,shǔ,shuò 0x6571:ái,zhú 0x6572:qiāo 0x6573:ái 0x6574:zhěng 0x6575:dí 0x6576:zhèn 0x6577:fū 0x6578:shù,shǔ,shuò 0x6579:liáo 0x657A:qū,ōu 0x657B:xiòng 0x657C:yǐ 0x657D:jiǎo 0x657E:shàn 0x657F:jiǎo 0x6580:zhuó,zhú 0x6581:yì,dù,tú 0x6582:liǎn,lián 0x6583:bì 0x6584:lí,tái 0x6585:xiào,xué 0x6586:xiào 0x6587:wén 0x6588:xué 0x6589:qí 0x658A:qí 0x658B:zhāi 0x658C:bīn 0x658D:jué 0x658E:zhāi 0x658F:láng 0x6590:fěi 0x6591:bān 0x6592:bān 0x6593:lán 0x6594:yǔ 0x6595:lán 0x6596:wěi 0x6597:dòu,dǒu,zhǔ 0x6598:shēng 0x6599:liào,liáo 0x659A:jiǎ 0x659B:hú 0x659C:xié,xiá,chá,yé 0x659D:jiǎ 0x659E:yǔ 0x659F:zhēn 0x65A0:jiào 0x65A1:wò,guǎn 0x65A2:tiǎo,tǒu 0x65A3:dòu 0x65A4:jīn 0x65A5:chì,chè,zhè 0x65A6:yín,zhì 0x65A7:fǔ 0x65A8:qiāng 0x65A9:zhǎn 0x65AA:qú 0x65AB:zhuó,chuò 0x65AC:zhǎn,zhàn 0x65AD:duàn 0x65AE:cuò,zhuó 0x65AF:sī,shǐ 0x65B0:xīn 0x65B1:zhuó 0x65B2:zhuó 0x65B3:qín,jǐn 0x65B4:lín 0x65B5:zhuó 0x65B6:chù 0x65B7:duàn 0x65B8:zhǔ,zhú 0x65B9:fāng,fáng,fǎng,páng,wǎng,fēng 0x65BA:chǎn,jiè 0x65BB:háng 0x65BC:yú,wū,yū 0x65BD:shī,yì,shǐ 0x65BE:pèi 0x65BF:yóu,liú 0x65C0:mèi 0x65C1:páng,pēng,bēng,bàng 0x65C2:qí 0x65C3:zhān 0x65C4:máo,mào,wù 0x65C5:lǚ 0x65C6:pèi 0x65C7:pī,bì 0x65C8:liú 0x65C9:fū 0x65CA:fǎng 0x65CB:xuán,xuàn 0x65CC:jīng 0x65CD:jīng 0x65CE:nǐ 0x65CF:zú,sǒu,còu,zòu 0x65D0:zhào 0x65D1:yǐ 0x65D2:liú 0x65D3:shāo 0x65D4:jiàn 0x65D5:yú 0x65D6:yǐ 0x65D7:qí 0x65D8:zhì 0x65D9:fān 0x65DA:piāo 0x65DB:fān 0x65DC:zhān 0x65DD:kuài 0x65DE:suì 0x65DF:yú 0x65E0:wú,mó 0x65E1:jì 0x65E2:jì,xì 0x65E3:jì 0x65E4:huò 0x65E5:rì 0x65E6:dàn 0x65E7:jiù 0x65E8:zhǐ 0x65E9:zǎo 0x65EA:xié 0x65EB:tiāo 0x65EC:xún,jūn 0x65ED:xù 0x65EE:gā,xù 0x65EF:lá 0x65F0:gàn,hàn 0x65F1:hàn 0x65F2:tái,yīng 0x65F3:dì 0x65F4:xū 0x65F5:chǎn 0x65F6:shí 0x65F7:kuàng 0x65F8:yáng 0x65F9:shí 0x65FA:wàng 0x65FB:mín 0x65FC:mín 0x65FD:tūn,zhùn 0x65FE:chūn 0x65FF:wǔ,wù 0x6600:yún 0x6601:bèi 0x6602:áng,yàng 0x6603:zè 0x6604:bǎn 0x6605:jié 0x6606:kūn,hún,kùn 0x6607:shēng 0x6608:hù 0x6609:fǎng 0x660A:hào 0x660B:guì,jiǒng 0x660C:chāng,chàng 0x660D:xuān 0x660E:míng,mèng 0x660F:hūn,hùn 0x6610:fēn 0x6611:qǐn 0x6612:hū 0x6613:yì 0x6614:xī,cuò 0x6615:xīn,xuān 0x6616:yán 0x6617:zè 0x6618:fǎng 0x6619:tán,yù 0x661A:shèn 0x661B:jù 0x661C:yáng 0x661D:zǎn 0x661E:bǐng,fǎng 0x661F:xīng 0x6620:yìng,yǎng 0x6621:xuàn 0x6622:pò,pèi 0x6623:zhěn 0x6624:líng 0x6625:chūn,chǔn 0x6626:hào 0x6627:mèi,wěn,mò 0x6628:zuó 0x6629:mò 0x662A:biàn 0x662B:xù,xiǒng 0x662C:hūn 0x662D:zhāo,zhào 0x662E:zòng 0x662F:shì,tí 0x6630:shì,xià 0x6631:yù 0x6632:fèi 0x6633:dié,diè,yì 0x6634:mǎo 0x6635:nì,nǐ,zhì 0x6636:chǎng 0x6637:wēn 0x6638:dōng 0x6639:ǎi 0x663A:bǐng 0x663B:áng 0x663C:zhòu 0x663D:lóng 0x663E:xiǎn 0x663F:kuàng 0x6640:tiǎo 0x6641:cháo,zhāo,chào 0x6642:shí 0x6643:huǎng,huàng 0x6644:huǎng 0x6645:xuǎn,xuān 0x6646:kuí 0x6647:xū,kuā 0x6648:jiǎo 0x6649:jìn 0x664A:zhì 0x664B:jìn 0x664C:shǎng 0x664D:tóng 0x664E:hǒng 0x664F:yàn 0x6650:gāi 0x6651:xiǎng 0x6652:shài 0x6653:xiǎo 0x6654:yè 0x6655:yūn,yùn 0x6656:huī 0x6657:hán 0x6658:hàn 0x6659:jùn 0x665A:wǎn 0x665B:xiàn 0x665C:kūn 0x665D:zhòu 0x665E:xī 0x665F:chéng,shèng,jīng 0x6660:shèng 0x6661:bū 0x6662:zhé,zhì 0x6663:zhé 0x6664:wù 0x6665:wǎn 0x6666:huì 0x6667:hào 0x6668:chén 0x6669:wǎn 0x666A:tiǎn 0x666B:zhuó 0x666C:zuì 0x666D:zhǒu 0x666E:pǔ 0x666F:jǐng,yǐng 0x6670:xī 0x6671:shǎn 0x6672:nǐ 0x6673:xī 0x6674:qíng 0x6675:qǐ,dù 0x6676:jīng 0x6677:guǐ 0x6678:zhěng 0x6679:yì 0x667A:zhì,zhī 0x667B:àn,ǎn,yǎn 0x667C:wǎn 0x667D:lín 0x667E:liàng 0x667F:chāng 0x6680:wǎng,wàng 0x6681:xiǎo 0x6682:zàn 0x6683:fēi 0x6684:xuān 0x6685:gèng,xuǎn 0x6686:yí 0x6687:xiá,xià,jiǎ 0x6688:yūn,yùn 0x6689:huī 0x668A:xǔ 0x668B:mǐn,mín 0x668C:kuí 0x668D:yē 0x668E:yìng 0x668F:shǔ,dǔ 0x6690:wěi 0x6691:shǔ 0x6692:qíng 0x6693:mào 0x6694:nán 0x6695:jiǎn,lán 0x6696:nuǎn,xuān 0x6697:àn 0x6698:yáng 0x6699:chūn 0x669A:yáo 0x669B:suǒ 0x669C:pǔ 0x669D:míng 0x669E:jiǎo 0x669F:kǎi 0x66A0:gǎo,hào 0x66A1:wěng 0x66A2:chàng 0x66A3:qì 0x66A4:hào 0x66A5:yàn 0x66A6:lì 0x66A7:ài,nuǎn 0x66A8:jì,jiè 0x66A9:jì 0x66AA:mèn 0x66AB:zàn 0x66AC:xiè 0x66AD:hào 0x66AE:mù 0x66AF:mò 0x66B0:cōng 0x66B1:nì 0x66B2:zhāng 0x66B3:huì 0x66B4:bào,pù,bó 0x66B5:hàn 0x66B6:xuán 0x66B7:chuán 0x66B8:liáo 0x66B9:xiān 0x66BA:tǎn 0x66BB:jǐng 0x66BC:piē 0x66BD:lín 0x66BE:tūn 0x66BF:xǐ,xī 0x66C0:yì 0x66C1:jì 0x66C2:huàng 0x66C3:dài 0x66C4:yè 0x66C5:yè 0x66C6:lì 0x66C7:tán 0x66C8:tóng 0x66C9:xiǎo 0x66CA:fèi 0x66CB:shěn 0x66CC:zhào 0x66CD:hào 0x66CE:yì 0x66CF:xiǎng,xiàng,shǎng 0x66D0:xīng 0x66D1:shēn 0x66D2:jiǎo 0x66D3:bào 0x66D4:jìng 0x66D5:yàn 0x66D6:ài 0x66D7:yè 0x66D8:rú 0x66D9:shǔ 0x66DA:méng 0x66DB:xūn 0x66DC:yào 0x66DD:pù 0x66DE:lì 0x66DF:chén 0x66E0:kuàng 0x66E1:dié 0x66E2:liǎo 0x66E3:yàn 0x66E4:huò 0x66E5:lú 0x66E6:xī 0x66E7:róng 0x66E8:lóng 0x66E9:nǎng 0x66EA:luǒ 0x66EB:luán 0x66EC:shài 0x66ED:tǎng 0x66EE:yǎn 0x66EF:zhú 0x66F0:yuē 0x66F1:yuē 0x66F2:qū,qǔ 0x66F3:yè 0x66F4:gèng,gēng 0x66F5:yè 0x66F6:hū 0x66F7:hé,è,hè 0x66F8:shū 0x66F9:cáo 0x66FA:cáo 0x66FB:shēng 0x66FC:màn 0x66FD:cēng 0x66FE:céng,zēng 0x66FF:tì 0x6700:zuì,cuō 0x6701:cǎn,qián,jiàn 0x6702:xù 0x6703:huì,kuài,kuò 0x6704:yǐn 0x6705:qiè 0x6706:fēn 0x6707:pí 0x6708:yuè,rù 0x6709:yǒu,yòu,wěi 0x670A:ruǎn,wǎn 0x670B:péng 0x670C:fén,bān 0x670D:fú,fù,bì,bó 0x670E:líng 0x670F:fěi,kū 0x6710:qú,xū,xù,chǔn 0x6711:tì 0x6712:nǜ 0x6713:tiǎo,tiào,yóu 0x6714:shuò 0x6715:zhèn 0x6716:lǎng 0x6717:lǎng 0x6718:zuī,juān 0x6719:míng 0x671A:huāng,máng,wáng,mèng 0x671B:wàng 0x671C:tūn 0x671D:cháo,zhāo,zhū 0x671E:jī,qī 0x671F:qī,jī 0x6720:yīng 0x6721:zōng 0x6722:wàng 0x6723:tóng,chuáng 0x6724:lǎng 0x6725:láo 0x6726:méng,mǎng 0x6727:lóng,lǒng 0x6728:mù 0x6729:děng 0x672A:wèi 0x672B:mò,me 0x672C:běn,bēn 0x672D:zhá,yà 0x672E:shù,zhú 0x672F:shù,shú,zhú 0x6730:mù 0x6731:zhū,shū 0x6732:rén 0x6733:bā 0x6734:pǔ,pò,pū,pō,piáo 0x6735:duǒ 0x6736:duǒ 0x6737:dāo,mù,tiáo 0x6738:lì 0x6739:guǐ,qiú 0x673A:jī,wèi 0x673B:jiū 0x673C:bǐ 0x673D:xiǔ 0x673E:chéng,zhēng,chēng,tīng 0x673F:cì 0x6740:shā 0x6741:rù 0x6742:zá,duǒ 0x6743:quán 0x6744:qiān 0x6745:yú,wū 0x6746:gān,gàn,gǎn 0x6747:wū 0x6748:chā,chà 0x6749:shān,shā 0x674A:xún 0x674B:fán 0x674C:wù,wò 0x674D:zǐ 0x674E:lǐ 0x674F:xìng 0x6750:cái 0x6751:cūn 0x6752:rèn,ér 0x6753:biāo,sháo,shuó,dí,zhuó 0x6754:tuō,zhé 0x6755:dì,duò 0x6756:zhàng 0x6757:máng 0x6758:chì 0x6759:yì 0x675A:gài,gé 0x675B:gōng 0x675C:dù,dǔ,tú 0x675D:lí,zhì,yí,tuò,duò 0x675E:qǐ 0x675F:shù 0x6760:gāng,gōng,gàng 0x6761:tiáo 0x6762:jiang 0x6763:mián 0x6764:wàn 0x6765:lái 0x6766:jiǔ 0x6767:máng 0x6768:yáng 0x6769:mà 0x676A:miǎo 0x676B:sì,zhǐ,xǐ 0x676C:yuán,yuàn 0x676D:háng,kàng,kāng 0x676E:fèi,bèi 0x676F:bēi 0x6770:jié 0x6771:dōng 0x6772:gǎo 0x6773:yǎo 0x6774:xiān,qiān 0x6775:chǔ 0x6776:chūn 0x6777:pá,bà 0x6778:shū,duì 0x6779:huà 0x677A:xīn 0x677B:chǒu,niǔ 0x677C:zhù,shù 0x677D:chǒu 0x677E:sōng 0x677F:bǎn 0x6780:sōng 0x6781:jí 0x6782:wò,yuè 0x6783:jìn 0x6784:gòu 0x6785:jī 0x6786:máo 0x6787:pí,bǐ,bì,pī 0x6788:bì,pī 0x6789:wǎng,kuáng 0x678A:àng 0x678B:fāng,fǎng,bǐng 0x678C:fén 0x678D:yì 0x678E:fú,fū 0x678F:nán 0x6790:xī,sī 0x6791:hù 0x6792:yā,yē,yá,yà 0x6793:dǒu,zhǔ 0x6794:xín 0x6795:zhěn,chén 0x6796:yāo,yǎo 0x6797:lín 0x6798:ruì,nèn 0x6799:ě,è 0x679A:méi 0x679B:zhào 0x679C:guǒ,luǒ,guàn 0x679D:zhī,qí 0x679E:cōng,zōng 0x679F:yùn 0x67A0:zui 0x67A1:shēng 0x67A2:shū 0x67A3:zǎo 0x67A4:dì 0x67A5:lì 0x67A6:lú 0x67A7:jiǎn 0x67A8:chéng 0x67A9:sōng 0x67AA:qiāng 0x67AB:fēng 0x67AC:zhān 0x67AD:xiāo 0x67AE:xiān,zhēn 0x67AF:kū,gū 0x67B0:píng 0x67B1:tái,sì,cí 0x67B2:xǐ 0x67B3:zhǐ,zhī 0x67B4:guǎi 0x67B5:xiāo 0x67B6:jià 0x67B7:jiā,jià 0x67B8:gǒu,jǔ,gōu,qú 0x67B9:bāo,fú 0x67BA:mò 0x67BB:yì,xiè 0x67BC:yè 0x67BD:yè 0x67BE:shì 0x67BF:niè 0x67C0:bǐ 0x67C1:duò,tuó,tuǒ 0x67C2:yí,duò,lí 0x67C3:líng 0x67C4:bǐng 0x67C5:nǐ,chì 0x67C6:lā 0x67C7:hé 0x67C8:bàn,pán,pàn 0x67C9:fán 0x67CA:zhōng 0x67CB:dài 0x67CC:cí 0x67CD:yǎng,yàng,yīng 0x67CE:fū,fǔ,fù 0x67CF:bǎi,bó,bò 0x67D0:mǒu,méi 0x67D1:gān,qián 0x67D2:qī 0x67D3:rǎn 0x67D4:róu 0x67D5:mào 0x67D6:sháo,shào 0x67D7:sōng 0x67D8:zhè 0x67D9:xiá,jiǎ 0x67DA:yòu,yóu,zhóu 0x67DB:shēn 0x67DC:guì,jǔ 0x67DD:tuò 0x67DE:zhà,zuò,zé 0x67DF:nán,rán 0x67E0:níng,chǔ,zhù 0x67E1:yǒng 0x67E2:dǐ,dì,chí 0x67E3:zhì,dié 0x67E4:zhā,zǔ,zū 0x67E5:chá,zhā,chái 0x67E6:dàn 0x67E7:gū 0x67E8:bù,pū 0x67E9:jiù 0x67EA:āo,ào 0x67EB:fú 0x67EC:jiǎn 0x67ED:bā,fú,bó,biē,pèi 0x67EE:duò,zuó,wù 0x67EF:kē 0x67F0:nài 0x67F1:zhù,zhǔ 0x67F2:bì,bié 0x67F3:liǔ 0x67F4:chái,cī,zhài,zì 0x67F5:shān,zhà 0x67F6:sì 0x67F7:chù,zhù 0x67F8:pēi,bēi 0x67F9:shì,fèi 0x67FA:guǎi 0x67FB:zhā 0x67FC:yǎo 0x67FD:chēng,jué 0x67FE:jiù 0x67FF:shì 0x6800:zhī 0x6801:liǔ 0x6802:méi 0x6803:lì 0x6804:róng 0x6805:zhà,shān,cè 0x6806:zǎo 0x6807:biāo 0x6808:zhàn 0x6809:zhì 0x680A:lóng 0x680B:dòng 0x680C:lú 0x680D:shēng 0x680E:lì,yuè 0x680F:lán 0x6810:yǒng 0x6811:shù 0x6812:xún,sǔn 0x6813:shuān,shuàn,quán 0x6814:qì 0x6815:zhēn 0x6816:qī,xī 0x6817:lì,liè 0x6818:yí 0x6819:xiáng 0x681A:zhèn 0x681B:lì 0x681C:sè,cì 0x681D:guā,tiǎn,kuò 0x681E:kān 0x681F:bēn,bīng 0x6820:rěn 0x6821:xiào,jiào,jiǎo,qiāo 0x6822:bǎi 0x6823:rěn 0x6824:bìng 0x6825:zī 0x6826:chóu 0x6827:yì 0x6828:cì 0x6829:xǔ,yǔ 0x682A:zhū 0x682B:jiàn,zùn 0x682C:zuì 0x682D:ér 0x682E:ěr 0x682F:yǒu,yù 0x6830:fá 0x6831:gǒng 0x6832:kǎo 0x6833:lǎo 0x6834:zhān 0x6835:liè 0x6836:yīn 0x6837:yàng,yáng 0x6838:hé,gāi,kài,hú 0x6839:gēn 0x683A:yì,zhī,zhǐ 0x683B:shì 0x683C:gé,luò,hè,gē 0x683D:zāi,zài 0x683E:luán 0x683F:fú 0x6840:jié 0x6841:héng,háng,hàng 0x6842:guì 0x6843:táo,tiāo,zhào 0x6844:guāng,guàng 0x6845:wéi,guǐ 0x6846:kuāng,kuàng,kuáng 0x6847:rú 0x6848:àn 0x6849:ān,àn 0x684A:juàn,quān 0x684B:yí,tí 0x684C:zhuō 0x684D:kū 0x684E:zhì 0x684F:qióng 0x6850:tóng,tōng,dòng 0x6851:sāng 0x6852:sāng 0x6853:huán 0x6854:jú,jié,xié 0x6855:jiù 0x6856:xuè 0x6857:duò 0x6858:zhuì 0x6859:yú,móu 0x685A:zǎn 0x685C:yīng 0x685D:jié 0x685E:liǔ 0x685F:zhàn 0x6860:yā 0x6861:ráo 0x6862:zhēn 0x6863:dàng 0x6864:qī 0x6865:qiáo 0x6866:huà 0x6867:guì,huì 0x6868:jiǎng 0x6869:zhuāng 0x686A:xún 0x686B:suō 0x686C:shā 0x686D:zhēn,chén,zhèn 0x686E:bēi 0x686F:tīng,yíng 0x6870:kuò 0x6871:jìng 0x6872:po,bó 0x6873:bèn 0x6874:fú 0x6875:ruí 0x6876:tǒng 0x6877:jué 0x6878:xī 0x6879:láng 0x687A:liǔ 0x687B:fēng,fèng 0x687C:qī 0x687D:wěn 0x687E:jūn 0x687F:gǎn,hàn 0x6880:sù,yìn 0x6881:liáng 0x6882:qiú 0x6883:tǐng,tìng 0x6884:yǒu 0x6885:méi 0x6886:bāng 0x6887:lòng 0x6888:pēng 0x6889:zhuāng 0x688A:dì 0x688B:xuān,juān,xié 0x688C:tú,chá,tū 0x688D:zào 0x688E:āo,yòu 0x688F:gù,jué 0x6890:bì 0x6891:dí 0x6892:hán 0x6893:zǐ 0x6894:zhī 0x6895:rèn 0x6896:bèi 0x6897:gěng 0x6898:jiǎn,xiàn,jiàn 0x6899:huàn 0x689A:wǎn 0x689B:nuó 0x689C:jiā 0x689D:tiáo,tiāo 0x689E:jì 0x689F:xiāo 0x68A0:lǚ 0x68A1:hún,kuǎn 0x68A2:shāo,shào,xiāo,sào 0x68A3:cén 0x68A4:fén 0x68A5:sōng 0x68A6:mèng 0x68A7:wú,wù,yǔ 0x68A8:lí 0x68A9:lí,sì,qǐ 0x68AA:dòu 0x68AB:qǐn,qīn 0x68AC:yǐng 0x68AD:suō,xùn 0x68AE:jū 0x68AF:tī,tí 0x68B0:xiè 0x68B1:kǔn,hún 0x68B2:zhuó 0x68B3:shū 0x68B4:chān 0x68B5:fàn 0x68B6:wěi 0x68B7:jìng 0x68B8:lí 0x68B9:bīn,bīng 0x68BA:xià 0x68BB:fó 0x68BC:táo 0x68BD:zhì 0x68BE:lái 0x68BF:lián 0x68C0:jiǎn 0x68C1:zhuō,tuō,ruì 0x68C2:líng 0x68C3:lí 0x68C4:qì 0x68C5:bǐng 0x68C6:lún 0x68C7:cōng,sōng 0x68C8:qiàn 0x68C9:mián 0x68CA:qí 0x68CB:qí,jī 0x68CC:cài 0x68CD:gùn,hùn,āo,gǔn 0x68CE:chán 0x68CF:dé,zhé 0x68D0:fěi,féi 0x68D1:pái,bèi,pèi 0x68D2:bàng 0x68D3:bàng,pǒu,bèi,péi,bēi 0x68D4:hūn 0x68D5:zōng 0x68D6:chéng,cháng 0x68D7:zǎo 0x68D8:jí 0x68D9:lì,liè 0x68DA:péng 0x68DB:yù 0x68DC:yù 0x68DD:gù 0x68DE:jùn 0x68DF:dòng 0x68E0:táng 0x68E1:gāng 0x68E2:wǎng 0x68E3:dì,tì,dài 0x68E4:cuò 0x68E5:fán 0x68E6:chēng 0x68E7:zhàn,zhǎn,chén 0x68E8:qǐ 0x68E9:yuān 0x68EA:yǎn,yàn 0x68EB:yù 0x68EC:quān,juàn,quán 0x68ED:yì 0x68EE:sēn 0x68EF:rěn,shěn 0x68F0:chuí,duǒ 0x68F1:léng,lèng,lēng,líng,chēng 0x68F2:qī,xī 0x68F3:zhuō 0x68F4:fú,sù 0x68F5:kē,kuǎn,kě 0x68F6:lái 0x68F7:zōu,sǒu 0x68F8:zōu 0x68F9:zhào,zhuō 0x68FA:guān,guàn 0x68FB:fēn 0x68FC:fén,fèn,fēn 0x68FD:shēn,chēn 0x68FE:qíng 0x68FF:ní,niè 0x6900:wǎn 0x6901:guǒ 0x6902:lù 0x6903:háo 0x6904:jiē,jié,qiè 0x6905:yǐ,yī 0x6906:chóu,zhòu,diāo 0x6907:jǔ 0x6908:jú 0x6909:chéng,shèng 0x690A:zuó,cuì 0x690B:liáng 0x690C:qiāng,kōng 0x690D:zhí 0x690E:chuí,zhuī 0x690F:yā,ě 0x6910:jū 0x6911:bēi,pí,bì,pái 0x6912:jiāo 0x6913:zhuó 0x6914:zī 0x6915:bīn 0x6916:péng 0x6917:dìng 0x6918:chǔ 0x6919:chāng 0x691A:mēn 0x691B:huā 0x691C:jiǎn 0x691D:guī 0x691E:xì 0x691F:dú 0x6920:qiàn 0x6921:dào 0x6922:guì 0x6923:diǎn 0x6924:luó 0x6925:zhī 0x6926:quan 0x6927:mìng 0x6928:fǔ 0x6929:gēng 0x692A:pèng 0x692B:shàn 0x692C:yí 0x692D:tuǒ 0x692E:sēn 0x692F:duǒ,chuán 0x6930:yē 0x6931:fù 0x6932:wěi,huī 0x6933:wēi 0x6934:duàn 0x6935:jiǎ,jiā 0x6936:zōng 0x6937:jiān,hán 0x6938:yí 0x6939:shèn,zhēn 0x693A:xí 0x693B:yàn,yà 0x693C:yǎn 0x693D:chuán 0x693E:jiān,zhàn 0x693F:chūn 0x6940:yǔ 0x6941:hé 0x6942:zhā,chá 0x6943:wò 0x6944:pián 0x6945:bī 0x6946:yāo 0x6947:huò,guō,kuǎ 0x6948:xū 0x6949:ruò 0x694A:yáng 0x694B:là 0x694C:yán 0x694D:běn 0x694E:huī 0x694F:kuí 0x6950:jiè 0x6951:kuí 0x6952:sī 0x6953:fēng,fán 0x6954:xiē,xiè 0x6955:tuǒ 0x6956:zhì,jí 0x6957:jiàn,jiǎn 0x6958:mù 0x6959:mào 0x695A:chǔ 0x695B:hù,kǔ 0x695C:hú 0x695D:liàn 0x695E:léng,lèng 0x695F:tíng 0x6960:nán 0x6961:yú 0x6962:yóu,yǒu 0x6963:méi,měi 0x6964:sǒng,cōng 0x6965:xuàn,yuán 0x6966:xuàn 0x6967:yǎng 0x6968:zhēn 0x6969:pián 0x696A:yè,dié 0x696B:jí 0x696C:jié,qià 0x696D:yè 0x696E:chǔ,zhū 0x696F:dùn,shǔn,chūn 0x6970:yú 0x6971:zòu,cōu 0x6972:wēi 0x6973:méi 0x6974:tì,dǐ,shì 0x6975:jí,jǐ 0x6976:jié 0x6977:kǎi,jiè,jiē 0x6978:qiū 0x6979:yíng 0x697A:rǒu,ròu 0x697B:huáng 0x697C:lóu 0x697D:lè 0x697E:quán 0x697F:xiāng 0x6980:pǐn 0x6981:shǐ 0x6982:gài,guì,jié 0x6983:tán 0x6984:lǎn 0x6985:wēn,yùn 0x6986:yú 0x6987:chèn 0x6988:lǘ 0x6989:jǔ 0x698A:shén 0x698B:chu 0x698C:bī 0x698D:xiè 0x698E:jiǎ 0x698F:yì 0x6990:zhǎn,chǎn,niàn,zhèn 0x6991:fú,fù,bó 0x6992:nuò 0x6993:mì 0x6994:láng,lǎng 0x6995:róng 0x6996:gǔ 0x6997:jiàn,jìn 0x6998:jǔ 0x6999:tā 0x699A:yǎo 0x699B:zhēn 0x699C:bǎng,bēng,bàng,páng,péng 0x699D:shā,xiè 0x699E:yuán 0x699F:zǐ 0x69A0:míng 0x69A1:sù 0x69A2:jià 0x69A3:yáo 0x69A4:jié 0x69A5:huàng 0x69A6:gàn,hán 0x69A7:fěi 0x69A8:zhà 0x69A9:qián 0x69AA:mà,mǎ 0x69AB:sǔn 0x69AC:yuán 0x69AD:xiè 0x69AE:róng 0x69AF:shí 0x69B0:zhī 0x69B1:cuī 0x69B2:wēn 0x69B3:tíng 0x69B4:liú 0x69B5:róng 0x69B6:táng 0x69B7:què 0x69B8:zhāi 0x69B9:sī 0x69BA:shèng 0x69BB:tà 0x69BC:kē 0x69BD:xī 0x69BE:gǔ 0x69BF:qī 0x69C0:gǎo,kào 0x69C1:gǎo,kào,gāo 0x69C2:sūn 0x69C3:pán 0x69C4:tāo 0x69C5:gé 0x69C6:chūn 0x69C7:diān,zhěn,zhēn 0x69C8:nòu 0x69C9:jí 0x69CA:shuò 0x69CB:gòu,jué 0x69CC:chuí,zhuì,duī 0x69CD:qiāng,chēng,qiǎng 0x69CE:chá 0x69CF:qiǎn,xiàn,lián 0x69D0:huái 0x69D1:méi 0x69D2:xù 0x69D3:gàng 0x69D4:gāo 0x69D5:zhuō 0x69D6:tuó 0x69D7:qiáo 0x69D8:yàng 0x69D9:diān 0x69DA:jiǎ 0x69DB:kǎn,jiàn 0x69DC:zuì 0x69DD:dǎo 0x69DE:lóng 0x69DF:bīn,bīng 0x69E0:zhū 0x69E1:sāng 0x69E2:xí,dié 0x69E3:jī,guī 0x69E4:lián,liǎn 0x69E5:huì 0x69E6:yōng 0x69E7:qiàn 0x69E8:guǒ 0x69E9:gài 0x69EA:gài 0x69EB:tuán,shuàn,quán 0x69EC:huà 0x69ED:qī,zú,sè 0x69EE:sēn,shěn 0x69EF:cuī,zuǐ 0x69F0:péng 0x69F1:yǒu,chǎo 0x69F2:hú 0x69F3:jiǎng,jiāng 0x69F4:hù 0x69F5:huàn 0x69F6:guì 0x69F7:niè,xiè,yì 0x69F8:yì 0x69F9:gāo 0x69FA:kāng 0x69FB:guī 0x69FC:guī 0x69FD:cáo,zāo 0x69FE:màn,wàn,mán 0x69FF:jǐn,qín 0x6A00:dí,zhí,zhé,dī 0x6A01:zhuāng,chōng 0x6A02:lè,yuè,yào,luò,liáo 0x6A03:lǎng 0x6A04:chén 0x6A05:cōng,zōng 0x6A06:lí,chī 0x6A07:xiū 0x6A08:qíng 0x6A09:shuǎng 0x6A0A:fán,fàn 0x6A0B:tōng 0x6A0C:guàn 0x6A0D:zé 0x6A0E:sù 0x6A0F:lěi,léi 0x6A10:lǔ 0x6A11:liáng 0x6A12:mì 0x6A13:lóu,lǘ 0x6A14:cháo,chāo,jiǎo 0x6A15:sù 0x6A16:kē 0x6A17:chū 0x6A18:táng,chēng 0x6A19:biāo,biào 0x6A1A:lù,dú 0x6A1B:jiū,liáo 0x6A1C:zhè 0x6A1D:zhā 0x6A1E:shū,ōu 0x6A1F:zhāng 0x6A20:mán,lǎng 0x6A21:mó,mú 0x6A22:niǎo,mù 0x6A23:yàng,xiàng 0x6A24:tiáo 0x6A25:péng 0x6A26:zhù 0x6A27:shā 0x6A28:xī 0x6A29:quán 0x6A2A:héng,hèng,guāng,guàng,huáng,huàng 0x6A2B:jiān 0x6A2C:cōng 0x6A2D:jī 0x6A2E:yān 0x6A2F:qiáng 0x6A30:xuě 0x6A31:yīng 0x6A32:èr,zhì 0x6A33:xún 0x6A34:zhí,yì 0x6A35:qiáo 0x6A36:zuī 0x6A37:cóng 0x6A38:pǔ,pú 0x6A39:shù 0x6A3A:huà 0x6A3B:kuì 0x6A3C:zhēn 0x6A3D:zūn 0x6A3E:yuè 0x6A3F:shàn 0x6A40:xī 0x6A41:chūn 0x6A42:diàn 0x6A43:fá,fèi 0x6A44:gǎn 0x6A45:mó 0x6A46:wǔ,wú 0x6A47:qiāo 0x6A48:ráo,náo 0x6A49:lìn 0x6A4A:liú 0x6A4B:qiáo,jiāo,jiào,qiāo,jiǎo 0x6A4C:xiàn 0x6A4D:rùn 0x6A4E:fán 0x6A4F:zhǎn,jiǎn 0x6A50:tuó,dù,luò 0x6A51:lǎo 0x6A52:yún 0x6A53:shùn 0x6A54:dūn,tuí 0x6A55:chēng 0x6A56:táng,chēng 0x6A57:méng 0x6A58:jú 0x6A59:chéng,dèng,chén 0x6A5A:sù,xiāo,qiū 0x6A5B:jué 0x6A5C:jué 0x6A5D:diàn,tán,xín 0x6A5E:huì 0x6A5F:jī 0x6A60:nuǒ,nuó 0x6A61:xiàng 0x6A62:tuǒ,duǒ 0x6A63:nǐng 0x6A64:ruǐ 0x6A65:zhū 0x6A66:tóng,chuáng,zhōng,chōng 0x6A67:zēng,céng 0x6A68:fén,fèn,fèi 0x6A69:qióng 0x6A6A:rǎn,yān 0x6A6B:héng 0x6A6C:qián,qín 0x6A6D:gū 0x6A6E:liǔ 0x6A6F:lào 0x6A70:gāo 0x6A71:chú 0x6A72:xǐ 0x6A73:shèng 0x6A74:zǐ 0x6A75:san 0x6A76:jí 0x6A77:dōu 0x6A78:jīng 0x6A79:lǔ 0x6A7A:jian 0x6A7B:chu 0x6A7C:yuán 0x6A7D:tà 0x6A7E:shū,qiāo,sāo 0x6A7F:jiāng 0x6A80:tán,shàn 0x6A81:lǐn 0x6A82:nóng 0x6A83:yǐn 0x6A84:xí 0x6A85:huì 0x6A86:shān 0x6A87:zuì 0x6A88:xuán 0x6A89:chēng 0x6A8A:gàn 0x6A8B:jú 0x6A8C:zuì 0x6A8D:yì 0x6A8E:qín 0x6A8F:pǔ 0x6A90:yán,dān 0x6A91:léi,lèi 0x6A92:fēng 0x6A93:huǐ 0x6A94:dàng,dāng 0x6A95:jì 0x6A96:suì 0x6A97:bò,bì 0x6A98:píng,bò 0x6A99:chéng 0x6A9A:chǔ 0x6A9B:zhuā 0x6A9C:guì,kuài,huì 0x6A9D:jí 0x6A9E:jiě,xiè 0x6A9F:jiǎ 0x6AA0:qíng,jìng 0x6AA1:zhái,shì,tú 0x6AA2:jiǎn 0x6AA3:qiáng 0x6AA4:dào 0x6AA5:yǐ 0x6AA6:biǎo 0x6AA7:sōng 0x6AA8:shē 0x6AA9:lǐn 0x6AAA:lì 0x6AAB:chá,sà 0x6AAC:méng 0x6AAD:yín 0x6AAE:táo,chóu,dào 0x6AAF:tái 0x6AB0:mián 0x6AB1:qí 0x6AB2:tuán 0x6AB3:bīn,bīng 0x6AB4:huò,huà 0x6AB5:jì 0x6AB6:qiān 0x6AB7:nǐ,mí 0x6AB8:níng 0x6AB9:yī 0x6ABA:gǎo 0x6ABB:kǎn,jiàn 0x6ABC:yìn 0x6ABD:nòu,ruǎn,rú 0x6ABE:qǐng 0x6ABF:yǎn 0x6AC0:qí 0x6AC1:mì 0x6AC2:zhào,dí 0x6AC3:guì 0x6AC4:chūn 0x6AC5:jī,jì 0x6AC6:kuí 0x6AC7:pó 0x6AC8:dèng 0x6AC9:chú 0x6ACA:gé 0x6ACB:mián 0x6ACC:yōu 0x6ACD:zhì 0x6ACE:huǎng,guàng,guǒ,gǔ 0x6ACF:qiān 0x6AD0:lěi 0x6AD1:léi,lěi 0x6AD2:sà 0x6AD3:lǔ 0x6AD4:lì 0x6AD5:cuán 0x6AD6:lǜ,chū 0x6AD7:miè,mèi 0x6AD8:huì 0x6AD9:ōu 0x6ADA:lǘ 0x6ADB:zhì 0x6ADC:gāo 0x6ADD:dú 0x6ADE:yuán 0x6ADF:lì,luò,yuè 0x6AE0:fèi 0x6AE1:zhuó,zhù 0x6AE2:sǒu 0x6AE3:lián 0x6AE4:jiàng 0x6AE5:chú 0x6AE6:qìng 0x6AE7:zhū 0x6AE8:lú,lǘ 0x6AE9:yán,yǎn 0x6AEA:lì 0x6AEB:zhū 0x6AEC:chèn,qìn,guàn 0x6AED:jié,jì 0x6AEE:è 0x6AEF:sū 0x6AF0:huái,guī 0x6AF1:niè 0x6AF2:yù 0x6AF3:lóng 0x6AF4:lài 0x6AF5:jiao 0x6AF6:xiǎn 0x6AF7:guī 0x6AF8:jǔ 0x6AF9:xiāo,qiū,xiū 0x6AFA:líng 0x6AFB:yīng 0x6AFC:jiān,shān 0x6AFD:yǐn 0x6AFE:yóu,yòu 0x6AFF:yíng 0x6B00:xiāng,ràng 0x6B01:nóng 0x6B02:bó 0x6B03:chán,zhàn 0x6B04:lán,liàn 0x6B05:jǔ 0x6B06:shuāng 0x6B07:shè 0x6B08:wéi,zuì 0x6B09:cóng 0x6B0A:quán,guàn 0x6B0B:qú 0x6B0C:cáng 0x6B0D:jiù 0x6B0E:yù 0x6B0F:luó,luǒ 0x6B10:lì,lǐ 0x6B11:cuán,zuàn 0x6B12:luán 0x6B13:dǎng,tǎng 0x6B14:jué 0x6B15:yán 0x6B16:lǎn 0x6B17:lán 0x6B18:zhú 0x6B19:léi,luǒ 0x6B1A:lǐ 0x6B1B:bà 0x6B1C:náng 0x6B1D:yù 0x6B1E:líng 0x6B1F:guang 0x6B20:qiàn 0x6B21:cì,zī,cí 0x6B22:huān 0x6B23:xīn 0x6B24:yú 0x6B25:yì,huān,yù 0x6B26:qiān,hān,xiān,qián 0x6B27:ōu 0x6B28:xū 0x6B29:chāo 0x6B2A:chù,xì,qù 0x6B2B:qì 0x6B2C:kài,ài 0x6B2D:yì,yīn 0x6B2E:jué 0x6B2F:xì,kài 0x6B30:xù 0x6B31:hē,xiá 0x6B32:yù 0x6B33:kuì 0x6B34:láng 0x6B35:kuǎn 0x6B36:shuò,sòu 0x6B37:xī 0x6B38:āi,ǎi,xiè,ế,éi,ê̌,ěi,ề,èi,ê̄,ēi 0x6B39:yī 0x6B3A:qī 0x6B3B:chuā,xū 0x6B3C:chǐ,chuài 0x6B3D:qīn,qìn,yín 0x6B3E:kuǎn,xīn 0x6B3F:kǎn,qiàn,dàn 0x6B40:kuǎn 0x6B41:kǎn,kè,qiǎn 0x6B42:chuǎn,chuán 0x6B43:shà,xiá 0x6B44:guā 0x6B45:yīn 0x6B46:xīn 0x6B47:xiē,yà 0x6B48:yú 0x6B49:qiàn 0x6B4A:xiāo 0x6B4B:yè 0x6B4C:gē 0x6B4D:wū,yāng 0x6B4E:tàn 0x6B4F:jìn,qūn 0x6B50:ōu,ǒu 0x6B51:hū 0x6B52:tì,xiāo 0x6B53:huān 0x6B54:xū 0x6B55:pēn 0x6B56:xǐ,yǐ 0x6B57:xiào 0x6B58:chuā,xū 0x6B59:shè,xī,xié 0x6B5A:shàn 0x6B5B:hān,liǎn 0x6B5C:chù 0x6B5D:yì 0x6B5E:è 0x6B5F:yú 0x6B60:chuò 0x6B61:huān 0x6B62:zhǐ 0x6B63:zhèng,zhēng 0x6B64:cǐ 0x6B65:bù 0x6B66:wǔ 0x6B67:qí 0x6B68:bù 0x6B69:bù 0x6B6A:wāi,wǎi 0x6B6B:jù 0x6B6C:qián 0x6B6D:chí,zhì 0x6B6E:sè 0x6B6F:chǐ 0x6B70:sè,shà 0x6B71:zhǒng 0x6B72:suì,suò 0x6B73:suì 0x6B74:lì 0x6B75:zé 0x6B76:yú 0x6B77:lì 0x6B78:guī,kuì,kuí 0x6B79:dǎi,è,dāi 0x6B7A:è 0x6B7B:sǐ 0x6B7C:jiān 0x6B7D:zhé 0x6B7E:mò,wěn 0x6B7F:mò 0x6B80:yāo 0x6B81:mò,wěn 0x6B82:cú 0x6B83:yāng 0x6B84:tiǎn 0x6B85:shēng 0x6B86:dài 0x6B87:shāng 0x6B88:xù 0x6B89:xùn 0x6B8A:shū 0x6B8B:cán 0x6B8C:jué 0x6B8D:piǎo,bì 0x6B8E:qià 0x6B8F:qiú 0x6B90:sù 0x6B91:qíng,jīng,jìng 0x6B92:yǔn 0x6B93:liàn 0x6B94:yì 0x6B95:fǒu,yè,bó 0x6B96:zhí,shì,shi 0x6B97:yè,yàn,yān 0x6B98:cán 0x6B99:hūn,mèn 0x6B9A:dān 0x6B9B:jí 0x6B9C:dié 0x6B9D:zhēn 0x6B9E:yǔn 0x6B9F:wēn 0x6BA0:chòu 0x6BA1:bìn 0x6BA2:tì 0x6BA3:jìn 0x6BA4:shāng 0x6BA5:yín 0x6BA6:diāo 0x6BA7:jiù 0x6BA8:huì,kuì 0x6BA9:cuàn 0x6BAA:yì 0x6BAB:dān 0x6BAC:dù 0x6BAD:jiāng 0x6BAE:liàn 0x6BAF:bìn 0x6BB0:dú 0x6BB1:jiān 0x6BB2:jiān 0x6BB3:shū 0x6BB4:ōu 0x6BB5:duàn 0x6BB6:zhù 0x6BB7:yīn,yǐn,yān 0x6BB8:qìng,kēng,shēng 0x6BB9:yì 0x6BBA:shā,shài,sà,xiè,shì 0x6BBB:qiào 0x6BBC:ké,qiào 0x6BBD:xiáo,yáo,xiào 0x6BBE:xùn 0x6BBF:diàn 0x6BC0:huǐ 0x6BC1:huǐ,huì 0x6BC2:gǔ,gū 0x6BC3:qiāo 0x6BC4:jī 0x6BC5:yì 0x6BC6:ōu,kōu,qū 0x6BC7:huǐ 0x6BC8:duàn 0x6BC9:yī 0x6BCA:xiāo 0x6BCB:wú,móu 0x6BCC:guàn 0x6BCD:mǔ,mú,wǔ,wú 0x6BCE:měi 0x6BCF:měi 0x6BD0:ǎi 0x6BD1:jiě 0x6BD2:dú,dài 0x6BD3:yù 0x6BD4:bǐ,bì,pí,pǐ 0x6BD5:bì 0x6BD6:bì 0x6BD7:pí 0x6BD8:pí 0x6BD9:bì 0x6BDA:chán 0x6BDB:máo,mào 0x6BDC:háo 0x6BDD:cǎi 0x6BDE:pí 0x6BDF:liě 0x6BE0:jiā 0x6BE1:zhān 0x6BE2:sāi 0x6BE3:mù,mào 0x6BE4:tuò 0x6BE5:xún,xùn 0x6BE6:ěr 0x6BE7:róng 0x6BE8:xiǎn 0x6BE9:jú 0x6BEA:mú 0x6BEB:háo 0x6BEC:qiú 0x6BED:dòu,nuò 0x6BEE:shā 0x6BEF:tǎn 0x6BF0:péi 0x6BF1:jú 0x6BF2:duō 0x6BF3:cuì,qiāo,xiā 0x6BF4:bī 0x6BF5:sān 0x6BF6:sān 0x6BF7:mào 0x6BF8:sāi,suī 0x6BF9:shū,yú 0x6BFA:shū 0x6BFB:tuò 0x6BFC:hé,kě,dā 0x6BFD:jiàn 0x6BFE:tà 0x6BFF:sān 0x6C00:lǘ,shū,yú,dōu 0x6C01:mú 0x6C02:máo,lí 0x6C03:tóng 0x6C04:rǒng,róng 0x6C05:chǎng 0x6C06:pǔ 0x6C07:lu 0x6C08:zhān 0x6C09:sào 0x6C0A:zhān 0x6C0B:méng 0x6C0C:lǔ 0x6C0D:qú 0x6C0E:dié 0x6C0F:shì,zhī,jīng 0x6C10:dī,dǐ,zhī 0x6C11:mín 0x6C12:jué 0x6C13:máng,méng 0x6C14:qì,qǐ 0x6C15:piē 0x6C16:nǎi 0x6C17:qì 0x6C18:dāo 0x6C19:xiān 0x6C1A:chuān 0x6C1B:fēn 0x6C1C:yáng,rì 0x6C1D:nèi 0x6C1E:bin 0x6C1F:fú 0x6C20:shēn 0x6C21:dōng 0x6C22:qīng 0x6C23:qì,xì 0x6C24:yīn,yán 0x6C25:xī 0x6C26:hài 0x6C27:yǎng 0x6C28:ān 0x6C29:yà 0x6C2A:kè 0x6C2B:qīng 0x6C2C:yà 0x6C2D:dōng 0x6C2E:dàn 0x6C2F:lǜ 0x6C30:qíng 0x6C31:yǎng 0x6C32:yūn,yún 0x6C33:yūn 0x6C34:shuǐ 0x6C35:shui 0x6C36:zhěng,chéng,zhèng 0x6C37:bīng 0x6C38:yǒng 0x6C39:dàng 0x6C3A:shuǐ 0x6C3B:lè 0x6C3C:nì,mèi 0x6C3D:tǔn,qiú 0x6C3E:fàn,fán 0x6C3F:guǐ,qiú,jiǔ 0x6C40:tīng,tìng,dìng 0x6C41:zhī,xié,shí 0x6C42:qiú 0x6C43:bīn,pà,pā 0x6C44:zè 0x6C45:miǎn 0x6C46:cuān 0x6C47:huì 0x6C48:diāo 0x6C49:hàn 0x6C4A:chà 0x6C4B:zhuó,yuè,què,shuò 0x6C4C:chuàn 0x6C4D:wán,huán 0x6C4E:fàn,fá 0x6C4F:dà,tài 0x6C50:xī 0x6C51:tuō 0x6C52:máng,mǎng 0x6C53:qiú,yóu 0x6C54:qì 0x6C55:shàn,shuàn 0x6C56:pìn,chí 0x6C57:hàn,hán,gān 0x6C58:qiān 0x6C59:wū,yú,wā,yū 0x6C5A:wū 0x6C5B:xùn 0x6C5C:sì 0x6C5D:rǔ 0x6C5E:gǒng 0x6C5F:jiāng 0x6C60:chí,tuó,chè 0x6C61:wū 0x6C62:tu 0x6C63:jiǔ 0x6C64:tāng,shāng 0x6C65:zhī,jì 0x6C66:zhǐ 0x6C67:qiān,yán 0x6C68:mì 0x6C69:gǔ,yù,hú 0x6C6A:wāng,wǎng,hóng 0x6C6B:jǐng 0x6C6C:jǐng 0x6C6D:ruì,tūn 0x6C6E:jūn 0x6C6F:hóng 0x6C70:tài 0x6C71:quǎn,fú 0x6C72:jí,jī 0x6C73:biàn 0x6C74:biàn 0x6C75:gàn,hán,cén 0x6C76:wèn,wén,mín,mén 0x6C77:zhōng 0x6C78:fāng,pāng 0x6C79:xiōng 0x6C7A:jué,quē,xuè 0x6C7B:hǔ,huǎng 0x6C7C:niú,yóu 0x6C7D:qì,gài,yǐ 0x6C7E:fén,pén,fēn 0x6C7F:xù 0x6C80:xù 0x6C81:qìn 0x6C82:yí,yín 0x6C83:wò 0x6C84:yún 0x6C85:yuán 0x6C86:hàng,háng,kàng 0x6C87:yǎn,wěi 0x6C88:shěn,chén,tán 0x6C89:chén 0x6C8A:dàn 0x6C8B:yóu 0x6C8C:dùn,tún,chún,zhuàn 0x6C8D:hù,hú 0x6C8E:huò 0x6C8F:qī,qiè 0x6C90:mù 0x6C91:nǜ,niǔ 0x6C92:méi 0x6C93:dá,tà 0x6C94:miǎn 0x6C95:mì,wù,fū 0x6C96:chōng 0x6C97:pāng,tiān 0x6C98:bǐ 0x6C99:shā,shà,suō 0x6C9A:zhǐ 0x6C9B:pèi 0x6C9C:pàn 0x6C9D:zhuǐ,zǐ 0x6C9E:zā 0x6C9F:gōu 0x6CA0:liú 0x6CA1:méi,mò,me 0x6CA2:zé 0x6CA3:fēng 0x6CA4:ōu,òu 0x6CA5:lì 0x6CA6:lún 0x6CA7:cāng 0x6CA8:fēng 0x6CA9:wéi 0x6CAA:hù 0x6CAB:mò 0x6CAC:mèi,huì 0x6CAD:shù 0x6CAE:jǔ,jū,jù,jiān,zǔ 0x6CAF:zá 0x6CB0:tuō,duó 0x6CB1:tuó,duò,chí 0x6CB2:tuó 0x6CB3:hé 0x6CB4:lì,zhěn 0x6CB5:mǐ 0x6CB6:yí,chí,shì 0x6CB7:fā 0x6CB8:fèi,fú 0x6CB9:yóu,yòu 0x6CBA:tián 0x6CBB:zhì,chí 0x6CBC:zhǎo 0x6CBD:gū,gǔ 0x6CBE:zhān,tiān,diàn,chān 0x6CBF:yán,yǎn,yàn 0x6CC0:sī 0x6CC1:kuàng 0x6CC2:jiǒng,yíng,yǐng,jiōng 0x6CC3:jū,gōu 0x6CC4:xiè,yì 0x6CC5:qiú,yōu 0x6CC6:yì,dié 0x6CC7:jiā 0x6CC8:zhōng 0x6CC9:quán 0x6CCA:pō,bó,pò 0x6CCB:huì,huǐ 0x6CCC:mì,bì 0x6CCD:bēn,bèn 0x6CCE:zé 0x6CCF:zhú,kū 0x6CD0:lè 0x6CD1:yōu,āo 0x6CD2:gū 0x6CD3:hóng 0x6CD4:gān,hàn 0x6CD5:fǎ 0x6CD6:mǎo,liǔ 0x6CD7:sì 0x6CD8:hū 0x6CD9:píng,pēng 0x6CDA:cǐ,zǐ 0x6CDB:fàn,fěng,fá 0x6CDC:zhī,chí,zhì 0x6CDD:sù 0x6CDE:nìng,zhù 0x6CDF:chēng 0x6CE0:líng,lǐng 0x6CE1:pào,pāo,páo 0x6CE2:bō,bēi,bì 0x6CE3:qì,lì,sè 0x6CE4:sì 0x6CE5:ní,nì,nǐ,niè,nìng 0x6CE6:jú 0x6CE7:sà,xuè 0x6CE8:zhù,zhòu 0x6CE9:shēng 0x6CEA:lèi 0x6CEB:xuàn,xuán,juān 0x6CEC:jué,xuè 0x6CED:fú 0x6CEE:pàn 0x6CEF:mǐn,miàn 0x6CF0:tài 0x6CF1:yāng 0x6CF2:jǐ 0x6CF3:yǒng 0x6CF4:guàn 0x6CF5:bèng,pìn,liú 0x6CF6:xué 0x6CF7:lóng,shuāng 0x6CF8:lú 0x6CF9:dàn 0x6CFA:luò,pō 0x6CFB:xiè 0x6CFC:pō 0x6CFD:zé 0x6CFE:jīng 0x6CFF:yín 0x6D00:pán,zhōu 0x6D01:jié,jí 0x6D02:yè 0x6D03:huī 0x6D04:huí,huì 0x6D05:zài 0x6D06:chéng 0x6D07:yīn,yān,yē 0x6D08:wéi 0x6D09:hòu 0x6D0A:jiàn,cún 0x6D0B:yáng,xiáng,yǎng 0x6D0C:liè 0x6D0D:sì 0x6D0E:jì 0x6D0F:ér 0x6D10:xíng 0x6D11:fú,fù 0x6D12:sǎ,xǐ,xiǎn,sěn,cuǐ,xùn 0x6D13:sè,qì,zì 0x6D14:zhǐ 0x6D15:yìn 0x6D16:wú 0x6D17:xǐ,xiǎn 0x6D18:kǎo,kào 0x6D19:zhū 0x6D1A:jiàng,hóng 0x6D1B:luò 0x6D1C:luò 0x6D1D:àn,yàn,è 0x6D1E:dòng,tóng 0x6D1F:tì 0x6D20:móu 0x6D21:lèi,lěi 0x6D22:yī 0x6D23:mǐ 0x6D24:quán 0x6D25:jīn 0x6D26:pò 0x6D27:wěi 0x6D28:xiáo 0x6D29:xiè,yì 0x6D2A:hóng 0x6D2B:xù,yì 0x6D2C:sù,shuò 0x6D2D:kuāng 0x6D2E:táo,yáo,dào 0x6D2F:qiè,jié 0x6D30:jù 0x6D31:ěr 0x6D32:zhōu 0x6D33:rù,rú 0x6D34:píng,pēng 0x6D35:xún,xuàn 0x6D36:xiōng 0x6D37:zhì 0x6D38:guāng,huàng 0x6D39:huán 0x6D3A:míng 0x6D3B:huó,guō 0x6D3C:wā,guī 0x6D3D:qià,hé 0x6D3E:pài,mài,bài,pā 0x6D3F:wū,hù 0x6D40:qū 0x6D41:liú 0x6D42:yì 0x6D43:jiā 0x6D44:jìng 0x6D45:qiǎn,jiān 0x6D46:jiāng,jiàng 0x6D47:jiāo 0x6D48:zhēn 0x6D49:shī 0x6D4A:zhuó 0x6D4B:cè 0x6D4C:fá 0x6D4D:huì,kuài 0x6D4E:jì,jǐ 0x6D4F:liú 0x6D50:chǎn 0x6D51:hún 0x6D52:hǔ,xǔ 0x6D53:nóng 0x6D54:xún 0x6D55:jìn 0x6D56:liè 0x6D57:qiú 0x6D58:wěi 0x6D59:zhè 0x6D5A:jùn,xùn,cún 0x6D5B:hán,hàn,gān 0x6D5C:bāng,bīn 0x6D5D:máng 0x6D5E:zhuó 0x6D5F:yóu,dí 0x6D60:xī 0x6D61:bó 0x6D62:dòu 0x6D63:huàn 0x6D64:hóng 0x6D65:yì,yà 0x6D66:pǔ 0x6D67:yǐng,chéng,yíng,zhèng,yìng 0x6D68:lǎn 0x6D69:hào,gǎo,gé 0x6D6A:làng,láng 0x6D6B:hǎn 0x6D6C:lǐ,hǎi 0x6D6D:gēng 0x6D6E:fú 0x6D6F:wú 0x6D70:liàn 0x6D71:chún 0x6D72:féng,hóng 0x6D73:yì 0x6D74:yù 0x6D75:tóng 0x6D76:láo 0x6D77:hǎi 0x6D78:jìn,qīn 0x6D79:jiā,xiá 0x6D7A:chōng 0x6D7B:jiǒng,jiōng 0x6D7C:měi 0x6D7D:suī,něi 0x6D7E:chēng 0x6D7F:pèi 0x6D80:xiàn,jiǎn 0x6D81:shèn 0x6D82:tú,chú,yé 0x6D83:kùn 0x6D84:pīng 0x6D85:niè 0x6D86:hàn 0x6D87:jīng,qǐng 0x6D88:xiāo 0x6D89:shè,dié 0x6D8A:niǎn,rěn 0x6D8B:tū 0x6D8C:yǒng,chōng 0x6D8D:xiào 0x6D8E:xián,yàn,diàn 0x6D8F:tǐng 0x6D90:é 0x6D91:sù,sōu,shù 0x6D92:tūn,yūn 0x6D93:juān,yuàn,xuàn 0x6D94:cén,qián,zàn 0x6D95:tì 0x6D96:lì 0x6D97:shuì 0x6D98:sì 0x6D99:lèi 0x6D9A:shuì 0x6D9B:tāo 0x6D9C:dú 0x6D9D:lào 0x6D9E:lái 0x6D9F:lián 0x6DA0:wéi 0x6DA1:wō,guō 0x6DA2:yún 0x6DA3:huàn,huì 0x6DA4:dí 0x6DA5:hēng 0x6DA6:rùn 0x6DA7:jiàn 0x6DA8:zhǎng,zhàng 0x6DA9:sè 0x6DAA:fú,póu 0x6DAB:guàn 0x6DAC:xìng 0x6DAD:shòu,tāo 0x6DAE:shuàn,shuā 0x6DAF:yá 0x6DB0:chuò 0x6DB1:zhàng 0x6DB2:yè,shì 0x6DB3:kōng,náng 0x6DB4:wò,wǎn,yuān 0x6DB5:hán,hàn 0x6DB6:tuō,tuò 0x6DB7:dōng 0x6DB8:hé 0x6DB9:wō 0x6DBA:jū 0x6DBB:shè 0x6DBC:liáng,liàng 0x6DBD:hūn,hùn 0x6DBE:tà 0x6DBF:zhuō,zhuó 0x6DC0:diàn 0x6DC1:qiè,jí 0x6DC2:dé 0x6DC3:juàn 0x6DC4:zī 0x6DC5:xī 0x6DC6:xiáo 0x6DC7:qí 0x6DC8:gǔ,hù 0x6DC9:guǒ,guàn 0x6DCA:yān,hàn,yǎn,hán 0x6DCB:lín,lìn 0x6DCC:tǎng,chàng,chǎng 0x6DCD:zhōu,diāo 0x6DCE:pěng 0x6DCF:hào 0x6DD0:chāng 0x6DD1:shū,chù 0x6DD2:qī,qiàn 0x6DD3:fāng 0x6DD4:zhí 0x6DD5:lù 0x6DD6:nào,zhào,zhuō,chuò 0x6DD7:jú 0x6DD8:táo 0x6DD9:cóng,shuàng 0x6DDA:lèi,lì 0x6DDB:zhè 0x6DDC:píng,péng 0x6DDD:féi 0x6DDE:sōng 0x6DDF:tiǎn 0x6DE0:pì,pèi 0x6DE1:dàn,yàn,tán 0x6DE2:yù,xù 0x6DE3:ní 0x6DE4:yū 0x6DE5:lù 0x6DE6:gàn,hán 0x6DE7:mì 0x6DE8:jìng,chéng 0x6DE9:líng 0x6DEA:lún,lǔn,guān 0x6DEB:yín,yàn,yáo 0x6DEC:cuì,zú 0x6DED:qú 0x6DEE:huái 0x6DEF:yù 0x6DF0:niǎn,shěn,nà 0x6DF1:shēn 0x6DF2:biāo,hū,hǔ 0x6DF3:chún,zhūn,zhǔn 0x6DF4:hū 0x6DF5:yuān 0x6DF6:lái 0x6DF7:hùn,gǔn,hún,kūn 0x6DF8:qīng 0x6DF9:yān,yǎn 0x6DFA:qiǎn,jiān,jiàn,cán,zàn 0x6DFB:tiān,tiàn 0x6DFC:miǎo 0x6DFD:zhǐ 0x6DFE:yǐn 0x6DFF:bó 0x6E00:bèn,bēn 0x6E01:yuān 0x6E02:wèn,mín 0x6E03:ruò,rè 0x6E04:fēi 0x6E05:qīng,qìng 0x6E06:yuān 0x6E07:kě 0x6E08:jì 0x6E09:shè 0x6E0A:yuān 0x6E0B:sè 0x6E0C:lù 0x6E0D:zì 0x6E0E:dú 0x6E0F:yī 0x6E10:jiàn,jiān 0x6E11:miǎn,shéng 0x6E12:pài 0x6E13:xī 0x6E14:yú 0x6E15:yuān 0x6E16:shěn 0x6E17:shèn 0x6E18:róu 0x6E19:huàn 0x6E1A:zhǔ 0x6E1B:jiǎn 0x6E1C:nuǎn,nuán 0x6E1D:yú,yū 0x6E1E:qiú,wù 0x6E1F:tíng,tīng 0x6E20:qú,jù 0x6E21:dù 0x6E22:fán,féng 0x6E23:zhā 0x6E24:bó 0x6E25:wò,òu,wū 0x6E26:wō,guō 0x6E27:dì,tí,dī 0x6E28:wēi 0x6E29:wēn,yùn 0x6E2A:rú 0x6E2B:xiè,dié,zhá,yì,qiè 0x6E2C:cè 0x6E2D:wèi 0x6E2E:hé 0x6E2F:gǎng,hòng 0x6E30:yǎn 0x6E31:hóng,gòng 0x6E32:xuàn 0x6E33:mǐ 0x6E34:kě,jié,kài,hé 0x6E35:máo 0x6E36:yīng 0x6E37:yǎn 0x6E38:yóu,liú 0x6E39:hōng,qìng 0x6E3A:miǎo 0x6E3B:shěng 0x6E3C:měi 0x6E3D:zāi 0x6E3E:hún,hùn,gǔn 0x6E3F:nài 0x6E40:guǐ 0x6E41:chì 0x6E42:è 0x6E43:pài,bá 0x6E44:méi 0x6E45:liàn,làn 0x6E46:qì 0x6E47:qì 0x6E48:méi 0x6E49:tián 0x6E4A:còu 0x6E4B:wéi 0x6E4C:cān 0x6E4D:tuān,zhuān 0x6E4E:miǎn 0x6E4F:huì,mǐn 0x6E50:mò 0x6E51:xū,xǔ,xù 0x6E52:jí 0x6E53:pén,pèn 0x6E54:jiān,zàn,zhǎn,qián,jiàn 0x6E55:jiǎn 0x6E56:hú 0x6E57:fèng 0x6E58:xiāng 0x6E59:yì 0x6E5A:yìn 0x6E5B:zhàn,chén,dān,tán,jìn,yǐn,chěn,yín,shèn 0x6E5C:shí 0x6E5D:jiē,xié 0x6E5E:zhēn,chēng 0x6E5F:huáng,kuàng 0x6E60:tàn 0x6E61:yú 0x6E62:bì 0x6E63:mǐn,hūn,miàn 0x6E64:shī 0x6E65:tū 0x6E66:shēng 0x6E67:yǒng 0x6E68:jú 0x6E69:dòng,dǒng,tóng 0x6E6A:tuàn,nuǎn 0x6E6B:jiǎo,jiù,jiū,qiū,jiāo 0x6E6C:jiǎo 0x6E6D:qiú 0x6E6E:yān,yīn 0x6E6F:tāng,tàng,shāng,yáng 0x6E70:lóng 0x6E71:huò 0x6E72:yuán 0x6E73:nǎn 0x6E74:bàn,pán 0x6E75:yǒu 0x6E76:quán 0x6E77:zhuāng,hún 0x6E78:liàng 0x6E79:chán 0x6E7A:xián 0x6E7B:chún 0x6E7C:niè 0x6E7D:zī 0x6E7E:wān 0x6E7F:shī 0x6E80:mǎn 0x6E81:yíng 0x6E82:là 0x6E83:kuì,huì 0x6E84:féng 0x6E85:jiàn,jiān 0x6E86:xù 0x6E87:lóu 0x6E88:wéi 0x6E89:gài,xiè 0x6E8A:bō 0x6E8B:yíng 0x6E8C:pō 0x6E8D:jìn 0x6E8E:yàn,guì 0x6E8F:táng 0x6E90:yuán 0x6E91:suǒ 0x6E92:yuán 0x6E93:lián,liǎn,xián,xiàn,nián,lín 0x6E94:yǎo 0x6E95:méng 0x6E96:zhǔn,zhuó 0x6E97:chéng 0x6E98:kè,kài 0x6E99:tài 0x6E9A:tǎ,dá 0x6E9B:wā 0x6E9C:liū,liù,liú 0x6E9D:gōu,gǎng,kòu 0x6E9E:sāo 0x6E9F:míng,mǐng,mì 0x6EA0:zhà,zhā 0x6EA1:shí 0x6EA2:yì 0x6EA3:lùn 0x6EA4:mǎ 0x6EA5:pǔ,fū,bù,bó,pò 0x6EA6:wēi,méi 0x6EA7:lì 0x6EA8:zāi 0x6EA9:wù 0x6EAA:xī,qī 0x6EAB:wēn 0x6EAC:qiāng 0x6EAD:zé 0x6EAE:shī 0x6EAF:sù,shuò 0x6EB0:ái 0x6EB1:qín,zhēn 0x6EB2:sōu,sǒu,shāo 0x6EB3:yún,yǔn 0x6EB4:xiù,chòu 0x6EB5:yīn 0x6EB6:róng 0x6EB7:hùn,hún 0x6EB8:sù 0x6EB9:suò,sè 0x6EBA:nì,ruò,niào 0x6EBB:tā 0x6EBC:shī 0x6EBD:rù,rú 0x6EBE:āi 0x6EBF:pàn 0x6EC0:chù,xù 0x6EC1:chú 0x6EC2:pāng,pēng 0x6EC3:wēng,wěng 0x6EC4:cāng 0x6EC5:miè 0x6EC6:gé 0x6EC7:diān,tián,zhēn 0x6EC8:hào,xuè 0x6EC9:huàng 0x6ECA:xì,xiē,qì 0x6ECB:zī,cí,xuán 0x6ECC:dí 0x6ECD:zhì 0x6ECE:xíng,yīng,yíng 0x6ECF:fǔ 0x6ED0:jié 0x6ED1:huá,gǔ 0x6ED2:gē 0x6ED3:zǐ 0x6ED4:tāo 0x6ED5:téng 0x6ED6:suī 0x6ED7:bì 0x6ED8:jiào 0x6ED9:huì 0x6EDA:gǔn 0x6EDB:yín 0x6EDC:gāo 0x6EDD:lóng 0x6EDE:zhì 0x6EDF:yàn 0x6EE0:shè 0x6EE1:mǎn 0x6EE2:yíng 0x6EE3:chún 0x6EE4:lǜ 0x6EE5:làn 0x6EE6:luán 0x6EE7:yáo 0x6EE8:bīn 0x6EE9:tān 0x6EEA:yù 0x6EEB:xiǔ 0x6EEC:hù 0x6EED:bì 0x6EEE:biāo 0x6EEF:zhì,chì 0x6EF0:jiàng 0x6EF1:kòu 0x6EF2:shèn,sēn,qīn,lín 0x6EF3:shāng 0x6EF4:dī 0x6EF5:mì 0x6EF6:áo 0x6EF7:lǔ 0x6EF8:hǔ,xǔ 0x6EF9:hū,hǔ 0x6EFA:yōu 0x6EFB:chǎn 0x6EFC:fàn 0x6EFD:yōng 0x6EFE:gǔn 0x6EFF:mǎn,mèn 0x6F00:qǐng,qīng 0x6F01:yú 0x6F02:piào,piāo,piǎo,biāo 0x6F03:jì 0x6F04:yá 0x6F05:cháo 0x6F06:qī,qiè 0x6F07:xǐ 0x6F08:jì 0x6F09:lù 0x6F0A:lóu,lǚ,lǒu 0x6F0B:lóng 0x6F0C:jǐn 0x6F0D:guó 0x6F0E:cóng,sǒng 0x6F0F:lòu,lóu 0x6F10:zhí 0x6F11:gài 0x6F12:qiáng 0x6F13:lí 0x6F14:yǎn,yàn 0x6F15:cáo,cào 0x6F16:jiào 0x6F17:cōng 0x6F18:chún 0x6F19:tuán,zhuān 0x6F1A:ōu,òu 0x6F1B:téng 0x6F1C:yě 0x6F1D:xí 0x6F1E:mì 0x6F1F:táng 0x6F20:mò 0x6F21:shāng,tàng 0x6F22:hàn,tān 0x6F23:lián,lán 0x6F24:lǎn 0x6F25:wā 0x6F26:chí,tāi 0x6F27:gān 0x6F28:féng,péng,běng 0x6F29:xuán 0x6F2A:yī 0x6F2B:màn 0x6F2C:zì,sè,qì 0x6F2D:mǎng 0x6F2E:kāng 0x6F2F:luò,tà,lěi 0x6F30:pēng 0x6F31:shù 0x6F32:zhǎng,zhàng,zhāng 0x6F33:zhāng 0x6F34:zhuàng,chuáng,chóng 0x6F35:xù 0x6F36:huàn 0x6F37:huǒ,kuò,huò 0x6F38:jiàn,jiān,qián,chán 0x6F39:yān 0x6F3A:shuǎng,chuǎng 0x6F3B:liáo,xiào,liú 0x6F3C:cuǐ,cuī 0x6F3D:tí 0x6F3E:yàng 0x6F3F:jiāng,jiàng 0x6F40:cóng 0x6F41:yǐng 0x6F42:hóng 0x6F43:xiǔ 0x6F44:shù 0x6F45:guàn 0x6F46:yíng 0x6F47:xiāo 0x6F48:zong 0x6F49:kūn 0x6F4A:xù 0x6F4B:liàn 0x6F4C:zhì 0x6F4D:wéi 0x6F4E:pì,piē,piào 0x6F4F:yù,jué,shù 0x6F50:jiào,jiǎo,qiáo 0x6F51:pō,bō 0x6F52:dàng,xiàng,yǎng 0x6F53:huì 0x6F54:jié 0x6F55:wǔ 0x6F56:pá 0x6F57:jí 0x6F58:pān,pàn,bō,pán,fān 0x6F59:wéi,guī 0x6F5A:sù,xiāo,sōu 0x6F5B:qián 0x6F5C:qián 0x6F5D:xī,yà 0x6F5E:lù 0x6F5F:xì 0x6F60:xùn,sùn 0x6F61:dùn 0x6F62:huáng,huàng,guāng 0x6F63:mǐn 0x6F64:rùn 0x6F65:sù 0x6F66:lǎo,lào,láo,liáo,liǎo 0x6F67:zhēn 0x6F68:cóng,zōng 0x6F69:yì 0x6F6A:zhè,zhì 0x6F6B:wān 0x6F6C:shàn,tān 0x6F6D:tán,xún,yǐn,dàn 0x6F6E:cháo 0x6F6F:xún,yín 0x6F70:kuì,xiè 0x6F71:yē 0x6F72:shào 0x6F73:tú,zhā 0x6F74:zhū 0x6F75:sǎ,sàn 0x6F76:hēi 0x6F77:bì 0x6F78:shān 0x6F79:chán 0x6F7A:chán 0x6F7B:shǔ 0x6F7C:tóng,chōng,zhōng 0x6F7D:pū,pǔ 0x6F7E:lín 0x6F7F:wéi 0x6F80:sè 0x6F81:sè 0x6F82:chéng 0x6F83:jiǒng 0x6F84:chéng,dèng 0x6F85:huà 0x6F86:jiāo,ào,nào 0x6F87:lào,láo 0x6F88:chè 0x6F89:gǎn,hàn 0x6F8A:cūn,cún 0x6F8B:hòng 0x6F8C:sī 0x6F8D:shù,zhù 0x6F8E:pēng,péng 0x6F8F:hán 0x6F90:yún 0x6F91:liù 0x6F92:hòng 0x6F93:fú 0x6F94:hào 0x6F95:hé 0x6F96:xián 0x6F97:jiàn 0x6F98:shān 0x6F99:xì 0x6F9A:yu 0x6F9B:lǔ 0x6F9C:lán 0x6F9D:nìng 0x6F9E:yú 0x6F9F:lǐn 0x6FA0:miǎn,shéng 0x6FA1:zǎo,cāo 0x6FA2:dāng 0x6FA3:huàn,hàn 0x6FA4:zé,shì,yì,duó 0x6FA5:xiè 0x6FA6:yù 0x6FA7:lǐ 0x6FA8:shì,cuó 0x6FA9:xué,xiào 0x6FAA:líng 0x6FAB:wàn,màn,ǒu 0x6FAC:zī,cí 0x6FAD:yōng,yǒng 0x6FAE:huì,kuài,huá 0x6FAF:càn 0x6FB0:liàn 0x6FB1:diàn 0x6FB2:yè 0x6FB3:ào,yù 0x6FB4:huán,xuàn 0x6FB5:zhēn 0x6FB6:chán,dàn,zhān 0x6FB7:màn 0x6FB8:dǎn 0x6FB9:dàn,dān,shàn,tán 0x6FBA:yì 0x6FBB:suì 0x6FBC:pì 0x6FBD:jù 0x6FBE:tà 0x6FBF:qín 0x6FC0:jī,jiào,jiāo 0x6FC1:zhuó 0x6FC2:lián,xiǎn 0x6FC3:nóng 0x6FC4:guō,wō 0x6FC5:jìn 0x6FC6:fén,pēn 0x6FC7:sè 0x6FC8:jí,shà 0x6FC9:suī 0x6FCA:huì,wèi,huò 0x6FCB:chǔ 0x6FCC:tà 0x6FCD:sōng 0x6FCE:dǐng,tìng 0x6FCF:sè 0x6FD0:zhǔ 0x6FD1:lài 0x6FD2:bīn 0x6FD3:lián 0x6FD4:mǐ,mí,nǐ 0x6FD5:shī,tà,xí 0x6FD6:shù 0x6FD7:mì 0x6FD8:nìng,níng,nì 0x6FD9:yíng 0x6FDA:yíng 0x6FDB:méng 0x6FDC:jìn,jīn 0x6FDD:qí 0x6FDE:bì,pì 0x6FDF:jì,jǐ,qí 0x6FE0:háo 0x6FE1:rú,ruǎn,ér,nuán,nuò 0x6FE2:cuì,zuǐ 0x6FE3:wò 0x6FE4:tāo,cháo,shòu,dào 0x6FE5:yǐn 0x6FE6:yǐn 0x6FE7:duì 0x6FE8:cí 0x6FE9:huò,hù 0x6FEA:qìng 0x6FEB:làn,jiàn,lǎn,lán 0x6FEC:jùn,xùn 0x6FED:ǎi,kài,kè 0x6FEE:pú 0x6FEF:zhuó,shuò,zhào 0x6FF0:wéi 0x6FF1:bīn 0x6FF2:gǔ 0x6FF3:qián 0x6FF4:yíng 0x6FF5:bīn 0x6FF6:kuò 0x6FF7:fèi 0x6FF8:cāng 0x6FF9:me 0x6FFA:jiàn,jiān,zàn 0x6FFB:wěi 0x6FFC:luò,pō,lì 0x6FFD:zàn 0x6FFE:lǜ 0x6FFF:lì 0x7000:yōu 0x7001:yàng,yǎng 0x7002:lǔ 0x7003:sì 0x7004:zhì 0x7005:yíng,yìng,jiōng 0x7006:dú,dòu 0x7007:wǎng,wāng 0x7008:huī 0x7009:xiè 0x700A:pán 0x700B:shěn,chèn,pán 0x700C:biāo 0x700D:chán 0x700E:mò,miè 0x700F:liú,liū 0x7010:jiān 0x7011:pù,bào,bó 0x7012:sè 0x7013:chéng 0x7014:gǔ 0x7015:bīn 0x7016:huò 0x7017:xiàn 0x7018:lú 0x7019:qìn 0x701A:hàn 0x701B:yíng 0x701C:róng 0x701D:lì 0x701E:jìng 0x701F:xiāo 0x7020:yíng 0x7021:suǐ 0x7022:wěi,duì 0x7023:xiè 0x7024:huái,wāi 0x7025:xuè 0x7026:zhū 0x7027:lóng,shuāng 0x7028:lài 0x7029:duì 0x702A:fán 0x702B:hú 0x702C:lài 0x702D:shū 0x702E:ling 0x702F:yíng 0x7030:mí,mǐ,nǐ 0x7031:jì 0x7032:liàn 0x7033:jiàn,zùn 0x7034:yíng,yǐng,yìng 0x7035:fèn 0x7036:lín 0x7037:yì 0x7038:jiān 0x7039:yuè,yào 0x703A:chán 0x703B:dài 0x703C:ráng,nǎng,ràng 0x703D:jiǎn 0x703E:lán 0x703F:fán 0x7040:shuàng 0x7041:yuān 0x7042:zhuó,zé,jiào 0x7043:fēng 0x7044:shè,nì 0x7045:lěi 0x7046:lán 0x7047:cóng 0x7048:qú 0x7049:yōng 0x704A:qián 0x704B:fǎ 0x704C:guàn,huàn 0x704D:jué 0x704E:yàn 0x704F:hào 0x7050:yíng 0x7051:sǎ,xiǎn,xǐ,lí,shī 0x7052:zàn,cuán,qián,zā 0x7053:luán,luàn 0x7054:yàn 0x7055:lí 0x7056:mǐ 0x7057:shàn 0x7058:tān,hàn,nàn 0x7059:dǎng 0x705A:jiǎo 0x705B:chǎn 0x705C:yíng 0x705D:hào 0x705E:bà 0x705F:zhú 0x7060:lǎn,làn 0x7061:lán 0x7062:nǎng 0x7063:wān 0x7064:luán 0x7065:xún,quán,quàn 0x7066:xiǎn 0x7067:yàn 0x7068:gàn 0x7069:yàn 0x706A:yù 0x706B:huǒ,huō 0x706C:biāo,huǒ 0x706D:miè 0x706E:guāng 0x706F:dēng,dīng 0x7070:huī 0x7071:xiāo 0x7072:xiāo 0x7073:huī 0x7074:hōng 0x7075:líng 0x7076:zào 0x7077:zhuàn 0x7078:jiǔ 0x7079:zhà,yù 0x707A:xiè 0x707B:chì 0x707C:zhuó 0x707D:zāi 0x707E:zāi 0x707F:càn 0x7080:yáng 0x7081:qì 0x7082:zhōng 0x7083:fén,bèn 0x7084:niǔ 0x7085:jiǒng,guì 0x7086:wén 0x7087:pū 0x7088:yì 0x7089:lú 0x708A:chuī 0x708B:pī 0x708C:kài 0x708D:pàn 0x708E:yán,yàn,tán 0x708F:kài,yán 0x7090:pàng,fēng 0x7091:mù 0x7092:chǎo 0x7093:liào 0x7094:guì,xuè,quē 0x7095:kàng,hāng 0x7096:dùn,tún 0x7097:guāng 0x7098:xīn 0x7099:zhì 0x709A:guāng 0x709B:guāng 0x709C:wěi 0x709D:qiàng 0x709E:bian 0x709F:dá 0x70A0:xiá 0x70A1:zhēng 0x70A2:zhú 0x70A3:kě 0x70A4:zhào,zhāo,zhǎo 0x70A5:fú 0x70A6:bá 0x70A7:xiè 0x70A8:xiè 0x70A9:lìng 0x70AA:zhuō,chù 0x70AB:xuàn 0x70AC:jù 0x70AD:tàn 0x70AE:pào,páo,bāo 0x70AF:jiǒng 0x70B0:páo,fǒu 0x70B1:tái 0x70B2:tái 0x70B3:bǐng 0x70B4:yǎng 0x70B5:tōng 0x70B6:shǎn 0x70B7:zhù 0x70B8:zhà,zhá 0x70B9:diǎn 0x70BA:wèi,wéi 0x70BB:shí 0x70BC:liàn 0x70BD:chì 0x70BE:huǎng 0x70BF:zhōu 0x70C0:hū 0x70C1:shuò 0x70C2:làn 0x70C3:tīng 0x70C4:jiǎo,yào 0x70C5:xù 0x70C6:héng 0x70C7:quǎn 0x70C8:liè 0x70C9:huàn 0x70CA:yáng,yàng 0x70CB:xiū,xiāo 0x70CC:xiū 0x70CD:xiǎn 0x70CE:yín 0x70CF:wū,yā,wù 0x70D0:zhōu 0x70D1:yáo 0x70D2:shì 0x70D3:wēi 0x70D4:tóng,dòng 0x70D5:miè 0x70D6:zāi 0x70D7:kài 0x70D8:hōng 0x70D9:lào,luò 0x70DA:xiá 0x70DB:zhú,chóng 0x70DC:xuǎn,xuān,huǐ 0x70DD:zhēng 0x70DE:pò 0x70DF:yān,yīn 0x70E0:huí,huǐ,ǎi 0x70E1:guāng 0x70E2:chè 0x70E3:huī 0x70E4:kǎo 0x70E5:jù 0x70E6:fán 0x70E7:shāo 0x70E8:yè 0x70E9:huì 0x70EB:tàng 0x70EC:jìn 0x70ED:rè 0x70EE:liè 0x70EF:xī 0x70F0:fú,fū 0x70F1:jiǒng 0x70F2:xiè,chè 0x70F3:pǔ 0x70F4:tīng,jǐng 0x70F5:zhuó 0x70F6:tǐng 0x70F7:wán 0x70F8:hǎi 0x70F9:pēng 0x70FA:lǎng 0x70FB:yàn,shān 0x70FC:xù 0x70FD:fēng 0x70FE:chì 0x70FF:róng 0x7100:hú 0x7101:xī 0x7102:shū 0x7103:hè,huò 0x7104:xūn,hūn 0x7105:kù,kào 0x7106:juān,yè,yuè,yuān 0x7107:xiāo 0x7108:xī 0x7109:yān,yí 0x710A:hàn 0x710B:zhuàng 0x710C:jùn,qū 0x710D:dì 0x710E:xiè 0x710F:jí,qì 0x7110:wù 0x7111:yān 0x7112:lǚ 0x7113:hán 0x7114:yàn 0x7115:huàn 0x7116:mèn 0x7117:jú 0x7118:dào,tāo 0x7119:bèi 0x711A:fén,fèn 0x711B:lìn 0x711C:kūn 0x711D:hùn 0x711E:tūn,tuī,jùn 0x711F:xī 0x7120:cuì 0x7121:wú,mó 0x7122:hōng 0x7123:chǎo,jù 0x7124:fǔ 0x7125:wò,ài 0x7126:jiāo,qiáo 0x7127:cōng 0x7128:fèng 0x7129:píng 0x712A:qióng 0x712B:ruò,rè 0x712C:xī,yì 0x712D:qióng 0x712E:xìn 0x712F:chāo,zhuō,zhuó,chuò 0x7130:yàn 0x7131:yàn,yì 0x7132:yì 0x7133:jué 0x7134:yù 0x7135:gàng 0x7136:rán 0x7137:pí 0x7138:xiòng,yīng,gǔ 0x7139:gàng 0x713A:shēng 0x713B:chàng,guā 0x713C:shāo 0x713D:xiǒng 0x713E:niǎn 0x713F:gēng 0x7140:wei 0x7141:chén 0x7142:hè 0x7143:kuǐ 0x7144:zhǒng 0x7145:duàn 0x7146:xiā,xià 0x7147:huī,hún,yùn,xūn,xuàn 0x7148:fèng 0x7149:liàn,làn 0x714A:xuān 0x714B:xīng 0x714C:huáng 0x714D:jiǎo 0x714E:jiān,jiàn,jiǎn 0x714F:bì 0x7150:yīng 0x7151:zhǔ 0x7152:wěi,huī 0x7153:tuān 0x7154:shǎn,qián,shān 0x7155:xī 0x7156:nuǎn,xuān 0x7157:nuǎn 0x7158:chán 0x7159:yān 0x715A:jiǒng 0x715B:jiǒng 0x715C:yù 0x715D:mèi 0x715E:shā,shà 0x715F:wèi 0x7160:zhá,yè 0x7161:jìn 0x7162:qióng 0x7163:róu,rǒu 0x7164:méi 0x7165:huàn 0x7166:xù,xiū 0x7167:zhào 0x7168:wēi,yù 0x7169:fán 0x716A:qiú 0x716B:suì 0x716C:yáng,yàng 0x716D:liè 0x716E:zhǔ 0x716F:jiē 0x7170:zào 0x7171:guā 0x7172:bāo 0x7173:hú 0x7174:yūn,yùn,wěn 0x7175:nǎn 0x7176:shì 0x7177:liang 0x7178:biān 0x7179:gòu 0x717A:tuì 0x717B:táng 0x717C:chǎo 0x717D:shān 0x717E:ēn,yūn 0x717F:bó 0x7180:huǎng,yè 0x7181:xié 0x7182:xì 0x7183:wù 0x7184:xī 0x7185:yùn 0x7186:hé 0x7187:hè,xiāo,kǎo,kào 0x7188:xī 0x7189:yún 0x718A:xióng 0x718B:nái 0x718C:shǎn 0x718D:qióng 0x718E:yào 0x718F:xūn,xùn 0x7190:mì 0x7191:lián,qiān 0x7192:yíng,xíng,jiǒng 0x7193:wǔ 0x7194:róng 0x7195:gōng 0x7196:yàn 0x7197:qiàng 0x7198:liū 0x7199:xī,yí 0x719A:bì 0x719B:biāo 0x719C:cōng,zǒng 0x719D:lù,āo 0x719E:jiān 0x719F:shú,shóu 0x71A0:yì 0x71A1:lóu 0x71A2:péng,bèng,fēng 0x71A3:suī,cuǐ 0x71A4:yì 0x71A5:tēng,tōng 0x71A6:jué 0x71A7:zōng 0x71A8:yùn,yù,wèi 0x71A9:hù 0x71AA:yí 0x71AB:zhì 0x71AC:áo,āo 0x71AD:wèi 0x71AE:liǔ 0x71AF:hàn,rǎn 0x71B0:ōu,òu 0x71B1:rè 0x71B2:jiǒng 0x71B3:màn 0x71B4:kūn 0x71B5:shāng 0x71B6:cuàn 0x71B7:zēng 0x71B8:jiān 0x71B9:xī 0x71BA:xī 0x71BB:xī 0x71BC:yì 0x71BD:xiào 0x71BE:chì 0x71BF:huáng,huǎng 0x71C0:chǎn,dǎn,chàn 0x71C1:yè 0x71C2:tán,xún,qián 0x71C3:rán 0x71C4:yàn 0x71C5:xún 0x71C6:qiāo,xiāo 0x71C7:jùn 0x71C8:dēng 0x71C9:dùn,tún,dūn 0x71CA:shēn 0x71CB:jiāo,qiáo,jué,zhuó 0x71CC:fén,bèn 0x71CD:sī,xī 0x71CE:liáo,liǎo,liào 0x71CF:yù 0x71D0:lín 0x71D1:tóng 0x71D2:shāo,shào 0x71D3:fén 0x71D4:fán,fén 0x71D5:yàn,yān 0x71D6:xún,qián 0x71D7:làn 0x71D8:měi 0x71D9:tàng,dàng 0x71DA:yì 0x71DB:jiǒng 0x71DC:mèn 0x71DD:jing 0x71DE:jiǎo 0x71DF:yíng,cuō 0x71E0:yù,ào 0x71E1:yì 0x71E2:xué 0x71E3:lán 0x71E4:tài,liè 0x71E5:zào,sào 0x71E6:càn 0x71E7:suì 0x71E8:xī 0x71E9:què 0x71EA:zǒng 0x71EB:lián 0x71EC:huǐ 0x71ED:zhú,kuò 0x71EE:xiè 0x71EF:líng 0x71F0:wēi 0x71F1:yì 0x71F2:xié 0x71F3:zhào 0x71F4:huì 0x71F5:dá 0x71F6:nóng 0x71F7:lán 0x71F8:rú,ruǎn 0x71F9:xiǎn,bìng 0x71FA:hè 0x71FB:xūn 0x71FC:jìn 0x71FD:chóu 0x71FE:dào,tāo 0x71FF:yào,shuò,shào 0x7200:hè 0x7201:làn 0x7202:biāo 0x7203:róng 0x7204:lì,liè 0x7205:mò 0x7206:bào,bó 0x7207:ruò 0x7208:lǜ 0x7209:là,liè 0x720A:āo 0x720B:xūn 0x720C:kuàng,huǎng,kuǎng 0x720D:shuò,luò,yuè 0x720E:liáo 0x720F:lì 0x7210:lú 0x7211:jué 0x7212:liǎo 0x7213:yàn,xún 0x7214:xī 0x7215:xiè 0x7216:lóng 0x7217:yè 0x7218:cān 0x7219:rǎng 0x721A:yuè 0x721B:làn 0x721C:cóng 0x721D:jué,jiào 0x721E:chóng,tóng 0x721F:guàn 0x7220:ju 0x7221:chè 0x7222:mí 0x7223:tǎng 0x7224:làn 0x7225:zhú 0x7226:lǎn 0x7227:líng 0x7228:cuàn 0x7229:yù 0x722A:zhǎo,zhuǎ 0x722B:zhǎo 0x722C:pá 0x722D:zhēng,zhèng 0x722E:páo 0x722F:chēng,chèng 0x7230:yuán 0x7231:ài 0x7232:wèi,wéi 0x7233:han 0x7234:jué 0x7235:jué 0x7236:fù,fǔ 0x7237:yé 0x7238:bà 0x7239:diē 0x723A:yé 0x723B:yáo,xiào 0x723C:zǔ 0x723D:shuǎng,shuāng 0x723E:ěr,mǐ,nǐ 0x723F:pán,qiáng 0x7240:chuáng 0x7241:kē 0x7242:zāng 0x7243:dié 0x7244:qiāng 0x7245:yōng 0x7246:qiáng 0x7247:piàn,piān,pàn 0x7248:bǎn 0x7249:pàn 0x724A:cháo 0x724B:jiān 0x724C:pái 0x724D:dú 0x724E:chuāng 0x724F:yú 0x7250:zhá 0x7251:biān,miàn 0x7252:dié 0x7253:bǎng,pāng 0x7254:bó 0x7255:chuāng 0x7256:yǒu 0x7257:yǒu 0x7258:dú 0x7259:yá,yà 0x725A:chēng,chèng 0x725B:niú 0x725C:niú 0x725D:pìn 0x725E:jiū,lè 0x725F:móu,mào,mù 0x7260:tā,tuó 0x7261:mǔ 0x7262:láo,lào,lóu 0x7263:rèn 0x7264:māng 0x7265:fāng 0x7266:máo 0x7267:mù 0x7268:gāng 0x7269:wù 0x726A:yàn 0x726B:gē,qiú,zāng 0x726C:bèi 0x726D:sì 0x726E:jiàn 0x726F:gǔ 0x7270:yòu,chōu 0x7271:gē 0x7272:shēng 0x7273:mǔ 0x7274:dǐ,dī,zhāi 0x7275:qiān 0x7276:quàn 0x7277:quán 0x7278:zì 0x7279:tè 0x727A:xī 0x727B:máng 0x727C:kēng 0x727D:qiān,qiàn 0x727E:wǔ,wú 0x727F:gù 0x7280:xī 0x7281:lí 0x7282:lí 0x7283:pǒu 0x7284:jī,yī 0x7285:gāng 0x7286:zhí,tè 0x7287:bēn 0x7288:quán 0x7289:chún 0x728A:dú 0x728B:jù 0x728C:jiā 0x728D:jiān,qián,jiǎn 0x728E:fēng 0x728F:piān 0x7290:kē 0x7291:jú 0x7292:kào 0x7293:chú 0x7294:xì 0x7295:bèi 0x7296:luò 0x7297:jiè 0x7298:má 0x7299:sān 0x729A:wèi 0x729B:máo,lí 0x729C:dūn 0x729D:tóng 0x729E:qiáo 0x729F:jiàng 0x72A0:xī 0x72A1:lì 0x72A2:dú 0x72A3:liè 0x72A4:pái 0x72A5:piāo,pào 0x72A6:bó 0x72A7:xī,suō 0x72A8:chōu 0x72A9:wéi 0x72AA:kuí,ráo 0x72AB:chōu 0x72AC:quǎn 0x72AD:quǎn 0x72AE:bá 0x72AF:fàn 0x72B0:qiú 0x72B1:jǐ 0x72B2:chái 0x72B3:zhuó 0x72B4:àn,án,jiàn,hān 0x72B5:gē,hé 0x72B6:zhuàng 0x72B7:guǎng 0x72B8:mà 0x72B9:yóu,yòu 0x72BA:kàng,gǎng 0x72BB:bó,pèi,fèi 0x72BC:hǒu 0x72BD:yà 0x72BE:yín 0x72BF:huān,fān 0x72C0:zhuàng 0x72C1:yǔn 0x72C2:kuáng,jué 0x72C3:niǔ,nǜ 0x72C4:dí,tì 0x72C5:kuáng 0x72C6:zhòng 0x72C7:mù 0x72C8:bèi 0x72C9:pī 0x72CA:jú 0x72CB:yí,quán,chí 0x72CC:shēng,xīng 0x72CD:páo 0x72CE:xiá 0x72CF:tuó,yí 0x72D0:hú 0x72D1:líng 0x72D2:fèi 0x72D3:pí,pī 0x72D4:nǐ 0x72D5:yǎo 0x72D6:yòu 0x72D7:gǒu 0x72D8:xuè 0x72D9:jū 0x72DA:dàn 0x72DB:bó 0x72DC:kǔ 0x72DD:xiǎn 0x72DE:níng 0x72DF:huán,xuān,héng 0x72E0:hěn,yán,kěn,hǎng 0x72E1:jiǎo,xiào 0x72E2:hé,mò 0x72E3:zhào 0x72E4:jí,jié,kuài 0x72E5:xùn 0x72E6:shān 0x72E7:tà,shì 0x72E8:róng 0x72E9:shòu 0x72EA:tóng,dòng 0x72EB:lǎo 0x72EC:dú 0x72ED:xiá 0x72EE:shī 0x72EF:kuài 0x72F0:zhēng 0x72F1:yù 0x72F2:sūn 0x72F3:yú 0x72F4:bì 0x72F5:máng,zhuó 0x72F6:xī,shǐ 0x72F7:juàn 0x72F8:lí 0x72F9:xiá 0x72FA:yín 0x72FB:suān,xùn,jùn 0x72FC:láng,lǎng,làng,hǎng 0x72FD:bèi 0x72FE:zhì 0x72FF:yán 0x7300:shā 0x7301:lì 0x7302:hàn 0x7303:xiǎn 0x7304:jīng 0x7305:pái 0x7306:fēi 0x7307:xiāo 0x7308:bài,pí 0x7309:qí 0x730A:ní 0x730B:biāo 0x730C:yìn 0x730D:lái 0x730E:liè,xī,què 0x730F:jiān 0x7310:qiāng 0x7311:kūn 0x7312:yàn 0x7313:guǒ,luǒ 0x7314:zòng 0x7315:mí 0x7316:chāng 0x7317:yī,yǐ,jì,ē,wēi 0x7318:zhì 0x7319:zhēng 0x731A:yá,wèi 0x731B:měng 0x731C:cāi 0x731D:cù 0x731E:shē 0x731F:liè 0x7320:diǎn 0x7321:luó 0x7322:hú 0x7323:zōng 0x7324:guì 0x7325:wěi,wèi 0x7326:fēng 0x7327:wō 0x7328:yuán 0x7329:xīng 0x732A:zhū 0x732B:māo,miáo,máo 0x732C:wèi 0x732D:chuān,chuàn,shān 0x732E:xiàn 0x732F:tuān 0x7330:yà,jiá,qiè 0x7331:náo 0x7332:xiē,hè,gé,hài 0x7333:jiā 0x7334:hóu 0x7335:biān,piàn 0x7336:yóu,yáo 0x7337:yóu 0x7338:méi 0x7339:chá 0x733A:yáo 0x733B:sūn 0x733C:bó,pò 0x733D:míng 0x733E:huá 0x733F:yuán 0x7340:sōu 0x7341:mà,mǎ 0x7342:yuán 0x7343:dāi,ái 0x7344:yù 0x7345:shī 0x7346:háo 0x7347:qiāng 0x7348:yì 0x7349:zhēn 0x734A:cāng 0x734B:háo,gāo 0x734C:màn 0x734D:jìng 0x734E:jiǎng 0x734F:mò,mú 0x7350:zhāng 0x7351:chán 0x7352:áo 0x7353:áo 0x7354:háo 0x7355:cuī 0x7356:bèn,fèn,fén 0x7357:jué 0x7358:bì 0x7359:bì 0x735A:huáng 0x735B:pú 0x735C:lín,lìn 0x735D:xù,yù 0x735E:tóng,zhuàng 0x735F:yào,xiāo 0x7360:liáo,lǎo 0x7361:shuò 0x7362:xiāo 0x7363:shòu 0x7364:dūn 0x7365:jiào 0x7366:gé,xiē,liè 0x7367:juàn 0x7368:dú 0x7369:huì 0x736A:kuài,huá 0x736B:xiǎn 0x736C:xiè,hǎ,jiě 0x736D:tǎ 0x736E:xiǎn,mí 0x736F:xūn 0x7370:níng 0x7371:biān 0x7372:huò 0x7373:nòu,rú 0x7374:měng,méng 0x7375:liè 0x7376:nǎo,yōu,náo 0x7377:guǎng,jǐng 0x7378:shòu 0x7379:lú 0x737A:tǎ 0x737B:xiàn,suō,xī 0x737C:mí 0x737D:ráng 0x737E:huān,quán 0x737F:nǎo,náo 0x7380:luó,ě 0x7381:xiǎn 0x7382:qí 0x7383:jué 0x7384:xuán,xuàn 0x7385:miào,yāo 0x7386:zī,xuán 0x7387:lǜ,shuài,lüè 0x7388:lú 0x7389:yù 0x738A:sù 0x738B:wáng,wàng,yù 0x738C:qiú 0x738D:gǎ 0x738E:dīng 0x738F:lè 0x7390:bā 0x7391:jī 0x7392:hóng 0x7393:dì 0x7394:chuàn 0x7395:gān 0x7396:jiǔ 0x7397:yú 0x7398:qǐ 0x7399:yú 0x739A:chàng,yáng 0x739B:mǎ 0x739C:hóng 0x739D:wǔ 0x739E:fū 0x739F:wén,mín 0x73A0:jiè 0x73A1:yá,yà 0x73A2:bīn,fēn 0x73A3:biàn 0x73A4:bàng 0x73A5:yuè 0x73A6:jué 0x73A7:mén,yǔn 0x73A8:jué 0x73A9:wán 0x73AA:jiān,yín,qián,lín 0x73AB:méi 0x73AC:dǎn 0x73AD:pín 0x73AE:wěi 0x73AF:huán 0x73B0:xiàn 0x73B1:qiāng 0x73B2:líng 0x73B3:dài 0x73B4:yì 0x73B5:án,gān 0x73B6:píng 0x73B7:diàn,diān 0x73B8:fú 0x73B9:xuán,xuàn,xián 0x73BA:xǐ 0x73BB:bō 0x73BC:cǐ,cī,cuō 0x73BD:gǒu 0x73BE:jiǎ 0x73BF:sháo 0x73C0:pò 0x73C1:cí 0x73C2:kē 0x73C3:rǎn 0x73C4:shēng 0x73C5:shēn 0x73C6:yí,tāi 0x73C7:zǔ,jù 0x73C8:jiā 0x73C9:mín 0x73CA:shān 0x73CB:liǔ 0x73CC:bì 0x73CD:zhēn 0x73CE:zhēn 0x73CF:jué 0x73D0:fà 0x73D1:lóng 0x73D2:jīn 0x73D3:jiào 0x73D4:jiàn 0x73D5:lì 0x73D6:guāng 0x73D7:xiān 0x73D8:zhōu 0x73D9:gǒng 0x73DA:yān 0x73DB:xiù 0x73DC:yáng 0x73DD:xǔ 0x73DE:luò,lì 0x73DF:sù 0x73E0:zhū 0x73E1:qín 0x73E2:yín,kèn 0x73E3:xún 0x73E4:bǎo 0x73E5:ěr 0x73E6:xiàng 0x73E7:yáo 0x73E8:xiá 0x73E9:háng,héng 0x73EA:guī 0x73EB:chōng 0x73EC:xù 0x73ED:bān 0x73EE:pèi 0x73EF:lǎo 0x73F0:dāng 0x73F1:yīng 0x73F2:huī,hún 0x73F3:wén 0x73F4:é 0x73F5:chéng,tǐng 0x73F6:dì,tí 0x73F7:wǔ,wù 0x73F8:wú 0x73F9:chéng 0x73FA:jùn 0x73FB:méi 0x73FC:bèi 0x73FD:tǐng 0x73FE:xiàn 0x73FF:chù 0x7400:hán 0x7401:xuán,qióng 0x7402:yán 0x7403:qiú 0x7404:xuàn 0x7405:láng,làng 0x7406:lǐ 0x7407:xiù 0x7408:fú,fū 0x7409:liú 0x740A:yá 0x740B:xī 0x740C:líng 0x740D:lí 0x740E:jìn 0x740F:liǎn 0x7410:suǒ 0x7411:suǒ 0x7412:fēng 0x7413:wán 0x7414:diàn 0x7415:pín,bǐng 0x7416:zhǎn 0x7417:sè,cuì 0x7418:mín 0x7419:yù 0x741A:jū 0x741B:chēn 0x741C:lái 0x741D:mín 0x741E:shèng,wàng 0x741F:wéi,yù 0x7420:tiǎn,tiàn 0x7421:chù 0x7422:zuó,zhuó 0x7423:běng,pěi 0x7424:chēng 0x7425:hǔ 0x7426:qí 0x7427:è 0x7428:kūn 0x7429:chāng 0x742A:qí 0x742B:běng 0x742C:wǎn 0x742D:lù 0x742E:cóng 0x742F:guǎn,gùn,guān,guàn 0x7430:yǎn 0x7431:diāo 0x7432:bèi 0x7433:lín 0x7434:qín 0x7435:pí 0x7436:pá 0x7437:què 0x7438:zhuó 0x7439:qín 0x743A:fà 0x743B:jīn 0x743C:qióng 0x743D:dǔ 0x743E:jiè 0x743F:hún,huī 0x7440:yǔ 0x7441:mào 0x7442:méi 0x7443:chūn 0x7444:xuān 0x7445:tí 0x7446:xīng 0x7447:dài 0x7448:róu 0x7449:mín 0x744A:jiān 0x744B:wěi 0x744C:ruǎn 0x744D:huàn 0x744E:xié 0x744F:chuān 0x7450:jiǎn 0x7451:zhuàn 0x7452:chàng,yáng,dàng 0x7453:liàn 0x7454:quán 0x7455:xiá 0x7456:duàn 0x7457:yuàn,huán 0x7458:yá 0x7459:nǎo 0x745A:hú 0x745B:yīng 0x745C:yú 0x745D:huáng 0x745E:ruì 0x745F:sè 0x7460:liú 0x7461:shī 0x7462:róng 0x7463:suǒ 0x7464:yáo 0x7465:wēn 0x7466:wǔ 0x7467:zhēn 0x7468:jìn 0x7469:yíng,yǐng 0x746A:mǎ 0x746B:tāo 0x746C:liú 0x746D:táng 0x746E:lì 0x746F:láng 0x7470:guī 0x7471:zhèn,tiàn 0x7472:qiāng,chēng,cāng 0x7473:cuō 0x7474:jué 0x7475:zhǎo 0x7476:yáo 0x7477:ài 0x7478:bīn 0x7479:shū,tū 0x747A:cháng 0x747B:kūn 0x747C:zhuān 0x747D:cōng 0x747E:jǐn,jìn 0x747F:yī 0x7480:cuǐ 0x7481:cōng 0x7482:qí 0x7483:lí 0x7484:jǐng 0x7485:suǒ,zǎo 0x7486:qiú 0x7487:xuán 0x7488:áo 0x7489:liǎn,lián 0x748A:mén 0x748B:zhāng 0x748C:yín 0x748D:yè 0x748E:yīng 0x748F:wèi,zhì 0x7490:lù 0x7491:wú 0x7492:dēng 0x7493:xiù 0x7494:zēng 0x7495:xún 0x7496:qú 0x7497:dàng 0x7498:lín 0x7499:liáo 0x749A:qióng,jué 0x749B:sù 0x749C:huáng 0x749D:guī 0x749E:pú 0x749F:jǐng 0x74A0:fán 0x74A1:jìn,jīn 0x74A2:liú 0x74A3:jī 0x74A4:huì 0x74A5:jǐng 0x74A6:ài 0x74A7:bì 0x74A8:càn 0x74A9:qú 0x74AA:zǎo 0x74AB:dāng 0x74AC:jiǎo 0x74AD:gùn 0x74AE:tǎn 0x74AF:huì,kuài 0x74B0:huán,huàn 0x74B1:sè 0x74B2:suì 0x74B3:tián 0x74B4:chǔ 0x74B5:yú 0x74B6:jìn 0x74B7:lú,fū 0x74B8:bīn,pián 0x74B9:shú 0x74BA:wèn 0x74BB:zuǐ 0x74BC:lán 0x74BD:xǐ 0x74BE:zī,jì 0x74BF:xuán 0x74C0:ruǎn 0x74C1:wò 0x74C2:gài 0x74C3:léi 0x74C4:dú 0x74C5:lì 0x74C6:zhì 0x74C7:róu 0x74C8:lí,li 0x74C9:zàn 0x74CA:qióng,xuán 0x74CB:tì 0x74CC:guī 0x74CD:suí 0x74CE:là 0x74CF:lóng 0x74D0:lú 0x74D1:lì 0x74D2:zàn 0x74D3:làn 0x74D4:yīng 0x74D5:mí,xǐ 0x74D6:xiāng 0x74D7:qióng,wěi,wèi 0x74D8:guàn 0x74D9:dào 0x74DA:zàn 0x74DB:huán,yè,yǎn 0x74DC:guā 0x74DD:bó 0x74DE:dié 0x74DF:bó,páo 0x74E0:hù,hú,huò,gū 0x74E1:zhí,hú 0x74E2:piáo 0x74E3:bàn 0x74E4:ráng 0x74E5:lì 0x74E6:wǎ,wà 0x74E8:xiáng,hóng 0x74E9:qiān,wǎ 0x74EA:bǎn 0x74EB:pén 0x74EC:fǎng 0x74ED:dǎn,dān 0x74EE:wèng 0x74EF:ōu 0x74F2:wa 0x74F3:hú 0x74F4:líng 0x74F5:yí 0x74F6:píng 0x74F7:cí 0x74F8:bǎi 0x74F9:juān,juàn 0x74FA:cháng 0x74FB:chī 0x74FD:dàng 0x74FE:měng 0x74FF:bù,pǒu 0x7500:zhuì 0x7501:píng 0x7502:biān 0x7503:zhòu 0x7504:zhēn,zhèn,juàn 0x7506:cí 0x7507:yīng 0x7508:qì 0x7509:xián 0x750A:lǒu 0x750B:dì 0x750C:ōu,ǒu 0x750D:méng 0x750E:zhuān,chuán 0x750F:bèng 0x7510:lìn 0x7511:zèng 0x7512:wǔ 0x7513:pì 0x7514:dān,dàn 0x7515:wèng 0x7516:yīng 0x7517:yǎn 0x7518:gān,hān 0x7519:dài 0x751A:shén,shèn 0x751B:tián 0x751C:tián 0x751D:hán 0x751E:cháng 0x751F:shēng 0x7520:qíng 0x7521:shēn 0x7522:chǎn 0x7523:chǎn 0x7524:ruí 0x7525:shēng 0x7526:sū 0x7527:shēn 0x7528:yòng 0x7529:shuǎi 0x752A:lù 0x752B:fǔ,fū,pǔ 0x752C:yǒng,dòng 0x752D:béng,qì 0x752E:fèng 0x752F:níng,nìng 0x7530:tián 0x7531:yóu,yāo 0x7532:jiǎ 0x7533:shēn 0x7534:zhá,yóu 0x7535:diàn 0x7536:fú 0x7537:nán 0x7538:diān,diàn,tián,shèng,yìng 0x7539:pīng 0x753A:tīng,tǐng,zhèng,tiǎn,dīng 0x753B:huà 0x753C:tǐng 0x753D:zhèn,quǎn,zhùn 0x753E:zāi,zī 0x753F:méng,máng 0x7540:bì 0x7541:bì 0x7542:liù 0x7543:xún 0x7544:liú 0x7545:chàng 0x7546:mǔ 0x7547:yún,tián 0x7548:fàn 0x7549:fú 0x754A:gēng 0x754B:tián 0x754C:jiè 0x754D:jiè 0x754E:quǎn 0x754F:wèi,wēi,wěi 0x7550:fú,bì 0x7551:tián 0x7552:mǔ 0x7553:duō 0x7554:pàn 0x7555:jiāng 0x7556:wā 0x7557:dá,fú 0x7558:nán 0x7559:liú,liù,liǔ 0x755A:běn 0x755B:zhěn 0x755C:chù,xù 0x755D:mǔ,mǒu 0x755E:mǔ 0x755F:cè,jì 0x7560:tián 0x7561:gāi 0x7562:bì 0x7563:dá 0x7564:zhì,chóu,shì 0x7565:lüè 0x7566:qí 0x7567:lüè 0x7568:pān,fān 0x7569:yī 0x756A:fān,fán,bō,pó,pān,pán,pàn,pí 0x756B:huà 0x756C:shē,yú 0x756D:yú 0x756E:mǔ 0x756F:jùn 0x7570:yì 0x7571:liú 0x7572:shē 0x7573:dié 0x7574:chóu 0x7575:huà 0x7576:dāng,dàng,dang 0x7577:zhuì 0x7578:jī,qí 0x7579:wǎn,yuǎn 0x757A:jiāng,jiàng 0x757B:chéng 0x757C:chàng 0x757D:tǔn,tuǎn 0x757E:léi 0x757F:jī 0x7580:chā 0x7581:liú 0x7582:dié 0x7583:tuǎn 0x7584:lìn,lín 0x7585:jiāng 0x7586:jiāng,jiàng 0x7587:chóu 0x7588:pì 0x7589:dié 0x758A:dié 0x758B:pǐ,shū,yǎ 0x758C:jié,qiè 0x758D:dàn 0x758E:shū 0x758F:shū 0x7590:zhì,dì 0x7591:yí,níng 0x7592:nè 0x7593:nǎi 0x7594:dīng,nè 0x7595:bǐ 0x7596:jiē 0x7597:liáo 0x7598:gāng,gōng 0x7599:gē,yì 0x759A:jiù 0x759B:zhǒu 0x759C:xià 0x759D:shàn 0x759E:xū 0x759F:nüè,yào 0x75A0:lì 0x75A1:yáng 0x75A2:chèn 0x75A3:yóu,yòu 0x75A4:bā 0x75A5:jiè 0x75A6:jué,xuè 0x75A7:qí 0x75A8:xiā,yá 0x75A9:cuì 0x75AA:bì 0x75AB:yì 0x75AC:lì 0x75AD:zòng 0x75AE:chuāng 0x75AF:fēng 0x75B0:zhù 0x75B1:pào 0x75B2:pí 0x75B3:gān 0x75B4:kē,ē,qià 0x75B5:cī,zī,zhài,jì 0x75B6:xuē 0x75B7:zhī 0x75B8:dǎn,da 0x75B9:zhěn,chèn 0x75BA:fá,biǎn 0x75BB:zhǐ 0x75BC:téng 0x75BD:jū,jǔ 0x75BE:jí 0x75BF:fèi 0x75C0:jū,gōu 0x75C1:shān 0x75C2:jiā 0x75C3:xuán 0x75C4:zhà 0x75C5:bìng 0x75C6:niè,nì,niǎn 0x75C7:zhèng,zhēng 0x75C8:yōng 0x75C9:jìng 0x75CA:quán 0x75CB:téng,chóng 0x75CC:tōng,tóng 0x75CD:yí 0x75CE:jiē 0x75CF:wěi,yòu,yù 0x75D0:huí 0x75D1:tān,shǐ 0x75D2:yǎng,yáng 0x75D3:chì 0x75D4:zhì 0x75D5:hén,gèn 0x75D6:yǎ 0x75D7:mèi 0x75D8:dòu 0x75D9:jìng 0x75DA:xiāo 0x75DB:tòng 0x75DC:tū 0x75DD:máng 0x75DE:pǐ 0x75DF:xiāo 0x75E0:suān 0x75E1:fū,pū,pù 0x75E2:lì 0x75E3:zhì 0x75E4:cuó 0x75E5:duó 0x75E6:wù,pī 0x75E7:shā 0x75E8:láo 0x75E9:shòu 0x75EA:huàn,tuǎn 0x75EB:xián 0x75EC:yì 0x75ED:bēng,péng,bìng 0x75EE:zhàng 0x75EF:guǎn 0x75F0:tán 0x75F1:fèi,féi,fěi 0x75F2:má 0x75F3:lín,lìn 0x75F4:chī 0x75F5:jì 0x75F6:tiǎn,diǎn 0x75F7:ān,yè,è 0x75F8:chì 0x75F9:bì 0x75FA:bì 0x75FB:mín 0x75FC:gù 0x75FD:duī 0x75FE:ē,kē 0x75FF:wěi 0x7600:yū 0x7601:cuì 0x7602:yǎ 0x7603:zhú 0x7604:cù 0x7605:dān,dàn 0x7606:shèn 0x7607:zhǒng 0x7608:chì,zhì 0x7609:yù 0x760A:hóu 0x760B:fēng 0x760C:là 0x760D:yáng,dàng 0x760E:chén 0x760F:tú 0x7610:yǔ,yù 0x7611:guō 0x7612:wén 0x7613:huàn 0x7614:kù 0x7615:jiǎ,xiā 0x7616:yīn,yìn 0x7617:yì 0x7618:lòu 0x7619:sào 0x761A:jué 0x761B:chì 0x761C:xī 0x761D:guān 0x761E:yì 0x761F:wēn,wò,yūn 0x7620:jí 0x7621:chuāng 0x7622:bān 0x7623:huì,lěi 0x7624:liú 0x7625:chài,cuó 0x7626:shòu 0x7627:nüè,yào 0x7628:diān,chēn 0x7629:da,dá 0x762A:biě,biē 0x762B:tān 0x762C:zhàng 0x762D:biāo 0x762E:shèn 0x762F:cù 0x7630:luǒ 0x7631:yì 0x7632:zòng 0x7633:chōu,lù 0x7634:zhàng 0x7635:zhài,jì 0x7636:sòu 0x7637:sè 0x7638:qué 0x7639:diào 0x763A:lòu 0x763B:lòu,lǘ 0x763C:mò 0x763D:qín 0x763E:yǐn 0x763F:yǐng 0x7640:huáng 0x7641:fú 0x7642:liáo,liào,shuò 0x7643:lóng 0x7644:qiáo 0x7645:liú 0x7646:láo,lào 0x7647:xián 0x7648:fèi 0x7649:dān,dàn,dǎn,tán 0x764A:yìn 0x764B:hè 0x764C:ái,yán 0x764D:bān 0x764E:xián 0x764F:guān 0x7650:guì,wēi 0x7651:nòng,nóng 0x7652:yù 0x7653:wéi 0x7654:yì 0x7655:yōng 0x7656:pǐ 0x7657:lěi 0x7658:lì,lài 0x7659:shǔ 0x765A:dàn 0x765B:lǐn,bǐng 0x765C:diàn 0x765D:lǐn 0x765E:lài 0x765F:biě,bié,biē 0x7660:jì 0x7661:chī 0x7662:yǎng 0x7663:xuǎn 0x7664:jiē 0x7665:zhēng 0x7666:me 0x7667:lì 0x7668:huò 0x7669:lài,là 0x766A:jī 0x766B:diān 0x766C:xuǎn 0x766D:yǐng 0x766E:yǐn 0x766F:qú 0x7670:yōng 0x7671:tān 0x7672:diān 0x7673:luǒ 0x7674:luán 0x7675:luán 0x7676:bō 0x7677:bō 0x7678:guǐ 0x7679:bá 0x767A:fā 0x767B:dēng,dé 0x767C:fā,bō 0x767D:bái,bó 0x767E:bǎi,bó,mò 0x767F:qié 0x7680:jí,xiāng,bī 0x7681:zào 0x7682:zào 0x7683:mào 0x7684:de,dì,dí 0x7685:pā,bà 0x7686:jiē 0x7687:huáng,wǎng 0x7688:guī 0x7689:cǐ 0x768A:líng 0x768B:gāo,háo,gū 0x768C:mò 0x768D:jí 0x768E:jiǎo 0x768F:pěng 0x7690:gāo 0x7691:ái 0x7692:é 0x7693:hào,huī 0x7694:hàn 0x7695:bì 0x7696:wǎn,huàn 0x7697:chóu 0x7698:qiàn 0x7699:xī 0x769A:ái 0x769B:xiǎo,jiǎo,pò 0x769C:hào 0x769D:huàng 0x769E:hào 0x769F:zé 0x76A0:cuǐ 0x76A1:hào 0x76A2:xiǎo 0x76A3:yè 0x76A4:pó,pán 0x76A5:hào 0x76A6:jiǎo 0x76A7:ài 0x76A8:xīng 0x76A9:huàng 0x76AA:lì,luò,bō 0x76AB:piǎo 0x76AC:hé 0x76AD:jiào 0x76AE:pí 0x76AF:gǎn 0x76B0:pào 0x76B1:zhòu 0x76B2:jūn 0x76B3:qiú 0x76B4:cūn 0x76B5:què 0x76B6:zhā 0x76B7:gǔ 0x76B8:jūn 0x76B9:jūn 0x76BA:zhòu,zhōu 0x76BB:zhā,cǔ 0x76BC:gǔ 0x76BD:zhāo,zhǎn,dǎn 0x76BE:dú 0x76BF:mǐn,mǐng 0x76C0:qǐ 0x76C1:yíng 0x76C2:yú 0x76C3:bēi 0x76C4:zhāo 0x76C5:zhōng,chōng 0x76C6:pén 0x76C7:hé 0x76C8:yíng 0x76C9:hé 0x76CA:yì 0x76CB:bō 0x76CC:wǎn 0x76CD:hé,kě 0x76CE:àng 0x76CF:zhǎn 0x76D0:yán 0x76D1:jiān,jiàn 0x76D2:hé,ān 0x76D3:yū,wū 0x76D4:kuī 0x76D5:fàn 0x76D6:gài,gě 0x76D7:dào 0x76D8:pán 0x76D9:fǔ 0x76DA:qiú 0x76DB:shèng,chéng 0x76DC:dào 0x76DD:lù 0x76DE:zhǎn 0x76DF:méng,mèng,míng 0x76E0:lí 0x76E1:jǐn,jìn 0x76E2:xù 0x76E3:jiān,jiàn,kàn 0x76E4:pán,xuán 0x76E5:guàn 0x76E6:ān 0x76E7:lú,lǘ,léi 0x76E8:xǔ 0x76E9:zhōu,chóu 0x76EA:dàng 0x76EB:ān 0x76EC:gǔ,gù,gū 0x76ED:lì 0x76EE:mù 0x76EF:dīng,chéng 0x76F0:gàn 0x76F1:xū 0x76F2:máng 0x76F3:wàng,máng 0x76F4:zhí 0x76F5:qì 0x76F6:yuǎn 0x76F7:tián,xián,mín 0x76F8:xiāng,xiàng 0x76F9:dǔn,zhūn 0x76FA:xīn 0x76FB:xì,pǎn 0x76FC:pàn,fén 0x76FD:fēng 0x76FE:dùn,shǔn,yǔn 0x76FF:mín 0x7700:míng 0x7701:shěng,xǐng,xiǎn 0x7702:shì 0x7703:yún,hùn 0x7704:miǎn,miàn 0x7705:pān 0x7706:fǎng 0x7707:miǎo,miào 0x7708:dān,chěn 0x7709:méi 0x770A:mào,mèi 0x770B:kàn,kān 0x770C:xiàn 0x770D:kōu 0x770E:shì 0x770F:yāng,yǎng,yìng 0x7710:zhēng 0x7711:yǎo,āo,ǎo 0x7712:shēn 0x7713:huò 0x7714:dà 0x7715:zhěn 0x7716:kuàng 0x7717:jū,xū,kōu 0x7718:shèn 0x7719:yí,chì 0x771A:shěng 0x771B:mèi 0x771C:mò,miè 0x771D:zhù 0x771E:zhēn 0x771F:zhēn 0x7720:mián,miǎn,mǐn 0x7721:shì 0x7722:yuān 0x7723:dié,chōu 0x7724:nì 0x7725:zì 0x7726:zì 0x7727:chǎo 0x7728:zhǎ 0x7729:xuàn,huàn,juàn 0x772A:bǐng,fǎng 0x772B:mǐ,pàn 0x772C:lóng 0x772D:suī,huī,xié,wèi 0x772E:tóng 0x772F:mī,mǐ,mì,mí 0x7730:diè,zhì 0x7731:dì 0x7732:nè 0x7733:míng 0x7734:xuàn,shùn,xún 0x7735:chī 0x7736:kuàng 0x7737:juàn 0x7738:móu 0x7739:zhèn 0x773A:tiào 0x773B:yáng 0x773C:yǎn,wěn 0x773D:mò,mì 0x773E:zhòng 0x773F:mò 0x7740:zhe,zhuó,zhāo,zháo 0x7741:zhēng 0x7742:méi 0x7743:suō,jùn,juān 0x7744:shào,qiáo,xiāo 0x7745:hàn 0x7746:huàn,huǎn 0x7747:dì,tī,tí 0x7748:chěng 0x7749:cuó,zhuài 0x774A:juàn 0x774B:é 0x774C:mǎn 0x774D:xiàn 0x774E:xī 0x774F:kùn 0x7750:lài 0x7751:jiǎn 0x7752:shǎn 0x7753:tiǎn 0x7754:gùn,huán,lǔn 0x7755:wǎn,wàn,wān 0x7756:lèng,chēng 0x7757:shì 0x7758:qióng 0x7759:liè 0x775A:yá 0x775B:jīng,jǐng 0x775C:zhēng 0x775D:lí 0x775E:lài 0x775F:suì,zuì 0x7760:juàn 0x7761:shuì 0x7762:suī,huī,wěi 0x7763:dū 0x7764:bì 0x7765:pì 0x7766:mù 0x7767:hūn 0x7768:nì 0x7769:lù 0x776A:yì,zé,dù,gāo 0x776B:jié,shè 0x776C:cǎi 0x776D:zhǒu 0x776E:yú 0x776F:hūn 0x7770:mà 0x7771:xià,xiá 0x7772:xǐng,xìng 0x7773:huī 0x7774:gùn 0x7775:zāi 0x7776:chǔn 0x7777:jiān 0x7778:mèi 0x7779:dǔ 0x777A:hóu 0x777B:xuān 0x777C:tiàn 0x777D:kuí,kuì,jì 0x777E:gāo,hào 0x777F:ruì 0x7780:mào,wú 0x7781:xù 0x7782:fá 0x7783:wò 0x7784:miáo 0x7785:chǒu 0x7786:kuì 0x7787:mī,mǐ,mì 0x7788:wěng 0x7789:kòu,jì 0x778A:dàng 0x778B:chēn,tián,tiàn,shèn 0x778C:kē 0x778D:sǒu 0x778E:xiā 0x778F:qióng,huán 0x7790:mò 0x7791:míng,méng,mián 0x7792:mán 0x7793:shuì 0x7794:zé 0x7795:zhàng 0x7796:yì 0x7797:diāo,dōu 0x7798:kōu 0x7799:mò 0x779A:shùn 0x779B:cōng 0x779C:lōu,lóu,lǘ 0x779D:chī 0x779E:mán,mén,mèn 0x779F:piǎo,piào,piāo 0x77A0:chēng,zhèng 0x77A1:guī 0x77A2:méng,máng,mèng 0x77A3:wàn 0x77A4:rún,shùn 0x77A5:piē,bì 0x77A6:xī 0x77A7:qiáo 0x77A8:pú 0x77A9:zhǔ 0x77AA:dèng 0x77AB:shěn 0x77AC:shùn 0x77AD:liǎo,liào 0x77AE:chè 0x77AF:xián,jiàn 0x77B0:kàn 0x77B1:yè 0x77B2:xù,xuè 0x77B3:tóng 0x77B4:móu,wǔ,mí 0x77B5:lín,lìn,lián 0x77B6:guì,wèi,kuì 0x77B7:jiàn,xián 0x77B8:yè 0x77B9:ài 0x77BA:huì 0x77BB:zhān 0x77BC:jiǎn 0x77BD:gǔ 0x77BE:zhào 0x77BF:qú,jù,jí 0x77C0:méi 0x77C1:chǒu 0x77C2:sào 0x77C3:nǐng,chēng 0x77C4:xūn 0x77C5:yào 0x77C6:huò,xuē,yuè,wò 0x77C7:méng,měng,mēng 0x77C8:mián 0x77C9:pín 0x77CA:mián 0x77CB:lěi 0x77CC:kuàng,guō 0x77CD:jué 0x77CE:xuān,xuàn 0x77CF:mián 0x77D0:huò 0x77D1:lú 0x77D2:méng 0x77D3:lóng 0x77D4:guàn,quán 0x77D5:mǎn,mán 0x77D6:xǐ,lí 0x77D7:chù 0x77D8:tǎng 0x77D9:kàn 0x77DA:zhǔ 0x77DB:máo 0x77DC:jīn,qín,guān 0x77DD:jīn 0x77DE:yù,jué,xù 0x77DF:shuò 0x77E0:zé,zhuó 0x77E1:jué 0x77E2:shǐ 0x77E3:yǐ,xián 0x77E4:shěn 0x77E5:zhī,zhì 0x77E6:hóu 0x77E7:shěn 0x77E8:yǐng 0x77E9:jǔ 0x77EA:zhōu 0x77EB:jiǎo,jiáo 0x77EC:cuó 0x77ED:duǎn 0x77EE:ǎi 0x77EF:jiǎo,jiāo,jiáo 0x77F0:zēng 0x77F1:yuē 0x77F2:bà 0x77F3:shí,dàn 0x77F4:dìng 0x77F5:qì,diāo 0x77F6:jī 0x77F7:zǐ 0x77F8:gān,gàn,gǎn,hàn 0x77F9:wù 0x77FA:zhé,dā 0x77FB:kū,qià 0x77FC:gāng,kòng,qiāng 0x77FD:xì,xī 0x77FE:fán 0x77FF:kuàng 0x7800:dàng 0x7801:mǎ 0x7802:shā 0x7803:dān 0x7804:jué 0x7805:lì 0x7806:fū 0x7807:mín 0x7808:ě 0x7809:huò,xū,huā 0x780A:kāng,kàng 0x780B:zhǐ 0x780C:qì,qiè 0x780D:kǎn 0x780E:jiè 0x780F:bīn,fēn,pīn 0x7810:è 0x7811:yà 0x7812:pī 0x7813:zhé 0x7814:yán,yàn,xíng 0x7815:suì 0x7816:zhuān 0x7817:chē 0x7818:dùn 0x7819:wǎ 0x781A:yàn 0x781B:jīn 0x781C:fēng 0x781D:fá,jié,gé,fǎ 0x781E:mò 0x781F:zhǎ,zhà,zuó 0x7820:jū,zū 0x7821:yù 0x7822:kē,luǒ 0x7823:tuó 0x7824:tuó 0x7825:dǐ,zhǐ 0x7826:zhài 0x7827:zhēn 0x7828:è 0x7829:fú,fèi 0x782A:mǔ 0x782B:zhù,zhǔ 0x782C:lá,lì,lā 0x782D:biān 0x782E:nǔ,nú 0x782F:pīng 0x7830:pēng,pīng,pèng 0x7831:líng 0x7832:pào,báo,pū 0x7833:lè 0x7834:pò 0x7835:bō,è 0x7836:pò 0x7837:shēn 0x7838:zá 0x7839:ài 0x783A:lì 0x783B:lóng 0x783C:tóng 0x783D:yòng 0x783E:lì 0x783F:kuàng 0x7840:chǔ 0x7841:kēng 0x7842:quán 0x7843:zhū 0x7844:kuāng,guāng 0x7845:guī,hè 0x7846:è 0x7847:náo 0x7848:qià 0x7849:lù 0x784A:wěi,guì 0x784B:ài 0x784C:gè,luò,lì 0x784D:xiàn,kèn,kēng,yǐn 0x784E:xíng,kēng 0x784F:yán,yàn 0x7850:dòng,tóng,liú 0x7851:pēng,píng 0x7852:xī 0x7853:lǎo 0x7854:hóng 0x7855:shuò 0x7856:xiá 0x7857:qiāo 0x7858:qing 0x7859:wéi,wèi 0x785A:qiáo 0x785B:yì 0x785C:kēng,qìng 0x785D:xiāo,qiào 0x785E:què,kè,kù 0x785F:chàn 0x7860:láng 0x7861:hōng 0x7862:yú 0x7863:xiāo 0x7864:xiá 0x7865:mǎng,bàng 0x7866:luò,lòng 0x7867:yǒng,tóng 0x7868:chē 0x7869:chè 0x786A:wò,é,yǐ 0x786B:liú,chù 0x786C:yìng,gěng 0x786D:máng 0x786E:què 0x786F:yàn 0x7870:shā 0x7871:kǔn 0x7872:yù 0x7873:chì 0x7874:huā 0x7875:lǔ 0x7876:chěn,cén 0x7877:jiǎn 0x7878:nüè 0x7879:sōng 0x787A:zhuó 0x787B:kēng,kěng 0x787C:péng,pēng 0x787D:yān,yǎn 0x787E:zhuì,duǒ 0x787F:kōng 0x7880:chéng 0x7881:qí 0x7882:zòng,cóng 0x7883:qìng 0x7884:lín 0x7885:jūn 0x7886:bō 0x7887:dìng 0x7888:mín 0x7889:diāo 0x788A:jiān,zhàn 0x788B:hè 0x788C:lù,luò,liù 0x788D:ài 0x788E:suì 0x788F:què,xī 0x7890:léng 0x7891:bēi 0x7892:yín 0x7893:duì,duī 0x7894:wǔ 0x7895:qí,qī,qǐ 0x7896:lǔn,lùn,lún 0x7897:wǎn 0x7898:diǎn 0x7899:náo,gāng 0x789A:bèi 0x789B:qì 0x789C:chěn 0x789D:ruǎn 0x789E:yán 0x789F:dié,shé 0x78A0:dìng 0x78A1:dú,zhóu 0x78A2:tuó 0x78A3:jié,kě,yà 0x78A4:yīng 0x78A5:biǎn 0x78A6:kè 0x78A7:bì 0x78A8:wèi,wěi 0x78A9:shuò 0x78AA:zhēn,ǎn,kàn 0x78AB:duàn 0x78AC:xiá 0x78AD:dàng 0x78AE:tí,dī 0x78AF:nǎo 0x78B0:pèng 0x78B1:jiǎn,xián 0x78B2:dì 0x78B3:tàn 0x78B4:chá,chā 0x78B5:tián 0x78B6:qì 0x78B7:dùn 0x78B8:fēng 0x78B9:xuàn 0x78BA:què 0x78BB:què,qiāo 0x78BC:mǎ 0x78BD:gōng 0x78BE:niǎn 0x78BF:sù,xiè 0x78C0:é 0x78C1:cí 0x78C2:liú,liù 0x78C3:sī,tí 0x78C4:táng 0x78C5:bàng,pāng,páng 0x78C6:huá,kě,gū 0x78C7:pī 0x78C8:wěi,kuǐ 0x78C9:sǎng 0x78CA:lěi 0x78CB:cuō 0x78CC:tián 0x78CD:xiá,qià,yà 0x78CE:xī,qī 0x78CF:lián,qiān 0x78D0:pán 0x78D1:wéi,wèi,ái,gài 0x78D2:yǔn 0x78D3:duī,zhuì 0x78D4:zhé 0x78D5:kē,kě 0x78D6:lá,lā 0x78D7:zhuān 0x78D8:yáo 0x78D9:gǔn 0x78DA:zhuān,tuán,tuó 0x78DB:chán 0x78DC:qì,qī 0x78DD:áo,qiāo 0x78DE:pēng 0x78DF:liù,lù 0x78E0:lǔ 0x78E1:kàn 0x78E2:chuǎng 0x78E3:chěn,cà 0x78E4:yǐn,yīn 0x78E5:lěi,léi 0x78E6:biāo 0x78E7:qì 0x78E8:mó,mò 0x78E9:qì,zhú 0x78EA:cuī 0x78EB:zōng 0x78EC:qìng,qǐng 0x78ED:chuò 0x78EE:lún 0x78EF:jī 0x78F0:shàn 0x78F1:láo 0x78F2:qú 0x78F3:zēng 0x78F4:dèng,dēng 0x78F5:jiàn 0x78F6:xì 0x78F7:lín,lìn,lǐn,líng 0x78F8:dìng 0x78F9:tán,diàn 0x78FA:huáng,kuàng,gǒng 0x78FB:pán,bō 0x78FC:zá,shé 0x78FD:qiāo,qiǎo,qiào,áo 0x78FE:dī 0x78FF:lì 0x7900:jiàn 0x7901:jiāo 0x7902:xī 0x7903:zhǎng 0x7904:qiáo 0x7905:dūn 0x7906:jiǎn,xiǎn 0x7907:yù 0x7908:zhuì 0x7909:hé,qiāo,qiào,áo 0x790A:kè,huò 0x790B:zé 0x790C:léi,lèi,lěi 0x790D:jié 0x790E:chǔ 0x790F:yè 0x7910:què,hú 0x7911:dàng 0x7912:yǐ 0x7913:jiāng 0x7914:pī 0x7915:pī 0x7916:yù 0x7917:pīn 0x7918:è,qì 0x7919:ài,yí 0x791A:kē 0x791B:jiān 0x791C:yù 0x791D:ruǎn 0x791E:méng 0x791F:pào 0x7920:cí 0x7921:bó 0x7922:yǎng 0x7923:mà 0x7924:cǎ 0x7925:xián,xín 0x7926:kuàng,gǒng 0x7927:léi,lèi,lěi 0x7928:lěi 0x7929:zhì 0x792A:lì 0x792B:lì,luò 0x792C:fán 0x792D:què 0x792E:pào 0x792F:yīng 0x7930:lì 0x7931:lóng 0x7932:lóng 0x7933:mò 0x7934:bó 0x7935:shuāng 0x7936:guàn 0x7937:lán 0x7938:cǎ 0x7939:yán,yǎn 0x793A:shì,qí,zhì,shí 0x793B:shì 0x793C:lǐ 0x793D:réng 0x793E:shè 0x793F:yuè 0x7940:sì 0x7941:qí,zhǐ 0x7942:tā 0x7943:mà 0x7944:xiè 0x7945:yāo 0x7946:xiān 0x7947:qí,chí,zhī,zhǐ 0x7948:qí,guǐ 0x7949:zhǐ 0x794A:bēng,fāng 0x794B:duì 0x794C:zhòng,chōng 0x794D:rèn 0x794E:yī 0x794F:shí 0x7950:yòu 0x7951:zhì 0x7952:tiáo 0x7953:fú,fèi 0x7954:fù 0x7955:mì,bì 0x7956:zǔ,jiē 0x7957:zhī 0x7958:suàn 0x7959:mèi 0x795A:zuò 0x795B:qū 0x795C:hù 0x795D:zhù,zhòu,chù 0x795E:shén,shēn 0x795F:suì 0x7960:cí,sì 0x7961:chái 0x7962:mí,nǐ 0x7963:lǚ 0x7964:yǔ 0x7965:xiáng 0x7966:wú 0x7967:tiāo 0x7968:piào,piāo 0x7969:zhù 0x796A:guǐ 0x796B:xiá 0x796C:zhī 0x796D:jì,zhài 0x796E:gào 0x796F:zhēn 0x7970:gào 0x7971:shuì,lèi 0x7972:jìn 0x7973:shèn 0x7974:gāi 0x7975:kǔn 0x7976:dì 0x7977:dǎo 0x7978:huò 0x7979:táo 0x797A:qí 0x797B:gù 0x797C:guàn 0x797D:zuì 0x797E:líng 0x797F:lù 0x7980:bǐng 0x7981:jìn,jīn 0x7982:dǎo 0x7983:zhí 0x7984:lù 0x7985:chán,shàn 0x7986:bì 0x7987:zhě 0x7988:huī 0x7989:yǒu 0x798A:xì 0x798B:yīn 0x798C:zī 0x798D:huò 0x798E:zhēn,zhēng 0x798F:fú,fù 0x7990:yuàn 0x7991:wú 0x7992:xiǎn 0x7993:yáng,shāng 0x7994:zhī 0x7995:yī 0x7996:méi 0x7997:sī 0x7998:dì 0x7999:bèi 0x799A:zhuó 0x799B:zhēn 0x799C:yǒng,yíng 0x799D:jì 0x799E:gào 0x799F:táng 0x79A0:sī 0x79A1:mà 0x79A2:tà 0x79A3:fù 0x79A4:xuān 0x79A5:qí 0x79A6:yù 0x79A7:xǐ,xī 0x79A8:jī,jì,qí 0x79A9:sì 0x79AA:chán,shàn,tán 0x79AB:dàn 0x79AC:guì 0x79AD:suì 0x79AE:lǐ 0x79AF:nóng 0x79B0:mí,nǐ,xiǎn 0x79B1:dǎo 0x79B2:lì 0x79B3:ráng 0x79B4:yuè 0x79B5:tí 0x79B6:zàn 0x79B7:lèi 0x79B8:róu 0x79B9:yǔ 0x79BA:yú,yù 0x79BB:lí,chī 0x79BC:xiè 0x79BD:qín 0x79BE:hé 0x79BF:tū 0x79C0:xiù 0x79C1:sī 0x79C2:rén 0x79C3:tū 0x79C4:zǐ,zì 0x79C5:chá,ná 0x79C6:gǎn 0x79C7:yì,zhí 0x79C8:xiān 0x79C9:bǐng 0x79CA:nián 0x79CB:qiū 0x79CC:qiū 0x79CD:zhǒng,chóng,zhòng 0x79CE:fèn 0x79CF:hào,mào 0x79D0:yún 0x79D1:kē,kè 0x79D2:miǎo 0x79D3:zhī 0x79D4:jīng 0x79D5:bǐ 0x79D6:zhī 0x79D7:yù 0x79D8:mì,bì,bié 0x79D9:kù 0x79DA:bàn 0x79DB:pī 0x79DC:ní,nì 0x79DD:lì 0x79DE:yóu 0x79DF:zū,jū 0x79E0:pī 0x79E1:bó 0x79E2:líng 0x79E3:mò 0x79E4:chèng,chēng,píng 0x79E5:nián 0x79E6:qín 0x79E7:yāng 0x79E8:zuó 0x79E9:zhì 0x79EA:zhī 0x79EB:shú 0x79EC:jù 0x79ED:zǐ 0x79EE:huó 0x79EF:jī,zhǐ 0x79F0:chēng,chèn,chèng 0x79F1:tóng 0x79F2:zhì,shì 0x79F3:huó,kuò 0x79F4:hé,gé 0x79F5:yīn 0x79F6:zī 0x79F7:zhì 0x79F8:jiē,jí 0x79F9:rěn 0x79FA:dù 0x79FB:yí,chǐ,yì 0x79FC:zhū 0x79FD:huì 0x79FE:nóng 0x79FF:fù,bū,pū 0x7A00:xī 0x7A01:gǎo 0x7A02:láng 0x7A03:fū 0x7A04:xùn,zè 0x7A05:shuì 0x7A06:lǚ 0x7A07:kǔn 0x7A08:gǎn 0x7A09:jīng 0x7A0A:tí 0x7A0B:chéng 0x7A0C:tú,shǔ 0x7A0D:shāo,shào 0x7A0E:shuì,tuō,tuì,tuàn 0x7A0F:yà 0x7A10:lǔn 0x7A11:lù 0x7A12:gù 0x7A13:zuó 0x7A14:rěn 0x7A15:zhùn,zhǔn 0x7A16:bàng 0x7A17:bài 0x7A18:jī,qí 0x7A19:zhī,zhì 0x7A1A:zhì 0x7A1B:kǔn 0x7A1C:léng,lèng,líng 0x7A1D:péng 0x7A1E:kē,huà 0x7A1F:bǐng,lǐn 0x7A20:chóu,tiáo,diào 0x7A21:zuì,zú,sū 0x7A22:yù 0x7A23:sū 0x7A24:lüè 0x7A25:xiāng 0x7A26:yī 0x7A27:xì,qiè 0x7A28:biǎn 0x7A29:jì 0x7A2A:fú 0x7A2B:pì,bì 0x7A2C:nuò 0x7A2D:jiē 0x7A2E:zhǒng,chóng,zhòng 0x7A2F:zōng,zǒng 0x7A30:xǔ,xū 0x7A31:chēng,chèn,chèng 0x7A32:dào 0x7A33:wěn 0x7A34:xián,jiān,liàn,liǎn 0x7A35:zī,jiū 0x7A36:yù 0x7A37:jì,zè 0x7A38:xù 0x7A39:zhěn,zhēn,biān 0x7A3A:zhì 0x7A3B:dào 0x7A3C:jià 0x7A3D:jī,qǐ 0x7A3E:gǎo,kào,gào,jiào 0x7A3F:gǎo 0x7A40:gǔ 0x7A41:róng 0x7A42:suì 0x7A43:rong 0x7A44:jì 0x7A45:kāng 0x7A46:mù 0x7A47:cǎn,shān,cēn 0x7A48:méi,mén,mí 0x7A49:zhì,chí,tí 0x7A4A:jì 0x7A4B:lù,jiū 0x7A4C:sū 0x7A4D:jī 0x7A4E:yǐng 0x7A4F:wěn 0x7A50:qiū 0x7A51:sè 0x7A52:hè 0x7A53:yì 0x7A54:huáng 0x7A55:qiè 0x7A56:jǐ,jì 0x7A57:suì 0x7A58:xiāo,rào 0x7A59:pú 0x7A5A:jiāo 0x7A5B:zhuō,bó 0x7A5C:zhǒng,tóng,zhòng 0x7A5D:zui 0x7A5E:lǚ 0x7A5F:suì 0x7A60:nóng 0x7A61:sè 0x7A62:huì 0x7A63:ráng 0x7A64:nuò 0x7A65:yù,yǔ 0x7A66:pīn 0x7A67:jì,zì 0x7A68:tuí 0x7A69:wěn 0x7A6A:chēng,bié 0x7A6B:huò,hù 0x7A6C:kuàng 0x7A6D:lǚ 0x7A6E:biāo,pāo 0x7A6F:sè 0x7A70:ráng,rǎng,réng 0x7A71:zhuō,jué 0x7A72:lí 0x7A73:cuán,zàn 0x7A74:xué,jué 0x7A75:wā,yà 0x7A76:jiū,jiù 0x7A77:qióng 0x7A78:xī 0x7A79:qióng,qiōng,kōng 0x7A7A:kōng,kǒng,kòng 0x7A7B:yū,yǔ 0x7A7C:shēn 0x7A7D:jǐng 0x7A7E:yào,yǎo 0x7A7F:chuān,chuàn,yuān 0x7A80:zhūn,tún 0x7A81:tū 0x7A82:láo 0x7A83:qiè 0x7A84:zhǎi 0x7A85:yǎo 0x7A86:biǎn 0x7A87:báo 0x7A88:yǎo,yào 0x7A89:bǐng 0x7A8A:wā 0x7A8B:zhú,kū 0x7A8C:jiào,pào,liáo,liù 0x7A8D:qiào 0x7A8E:diào 0x7A8F:wū 0x7A90:guī,wā 0x7A91:yáo 0x7A92:zhì,dié 0x7A93:chuāng 0x7A94:yào,yǎo 0x7A95:tiǎo,tiāo 0x7A96:jiào,zào 0x7A97:chuāng,cōng 0x7A98:jiǒng 0x7A99:xiāo 0x7A9A:chéng 0x7A9B:kòu 0x7A9C:cuàn 0x7A9D:wō 0x7A9E:dàn 0x7A9F:kū 0x7AA0:kē 0x7AA1:zhuó 0x7AA2:xū 0x7AA3:sū 0x7AA4:guān 0x7AA5:kuī 0x7AA6:dòu 0x7AA7:zhuo 0x7AA8:xūn,yìn,yīn 0x7AA9:wō 0x7AAA:wā 0x7AAB:yà,yē 0x7AAC:yú,dōu 0x7AAD:jù 0x7AAE:qióng 0x7AAF:yáo,yào,qiāo 0x7AB0:yáo 0x7AB1:tiǎo 0x7AB2:cháo 0x7AB3:yǔ,yú 0x7AB4:tián 0x7AB5:diào 0x7AB6:jù,lóu 0x7AB7:liào 0x7AB8:xī 0x7AB9:wù 0x7ABA:kuī,kuǐ 0x7ABB:chuāng 0x7ABC:zhāo,kē 0x7ABD:kuǎn 0x7ABE:kuǎn,cuàn 0x7ABF:lóng 0x7AC0:chēng,chèng 0x7AC1:cuì 0x7AC2:liáo 0x7AC3:zào 0x7AC4:cuàn,cuān 0x7AC5:qiào 0x7AC6:qióng 0x7AC7:dòu,dú 0x7AC8:zào 0x7AC9:lǒng 0x7ACA:qiè 0x7ACB:lì,wèi 0x7ACC:chù 0x7ACD:shí 0x7ACE:fù 0x7ACF:qiān 0x7AD0:chù 0x7AD1:hóng 0x7AD2:qí 0x7AD3:háo 0x7AD4:shēng 0x7AD5:fēn 0x7AD6:shù 0x7AD7:miào 0x7AD8:qǔ,kǒu 0x7AD9:zhàn,zhān 0x7ADA:zhù 0x7ADB:líng 0x7ADC:lóng,néng 0x7ADD:bìng 0x7ADE:jìng 0x7ADF:jìng 0x7AE0:zhāng,zhàng 0x7AE1:bǎi 0x7AE2:sì 0x7AE3:jùn 0x7AE4:hóng 0x7AE5:tóng,zhōng 0x7AE6:sǒng 0x7AE7:jìng,zhěn 0x7AE8:diào 0x7AE9:yì 0x7AEA:shù 0x7AEB:jìng 0x7AEC:qǔ 0x7AED:jié 0x7AEE:pīng 0x7AEF:duān 0x7AF0:lí 0x7AF1:zhuǎn 0x7AF2:céng 0x7AF3:dēng 0x7AF4:cūn 0x7AF5:wāi,huā 0x7AF6:jìng 0x7AF7:kǎn,kàn 0x7AF8:jìng 0x7AF9:zhú 0x7AFA:zhú,dǔ 0x7AFB:lè,jīn 0x7AFC:péng 0x7AFD:yú 0x7AFE:chí 0x7AFF:gān,gàn,gǎn 0x7B00:máng 0x7B01:zhú 0x7B02:wán 0x7B03:dǔ 0x7B04:jī 0x7B05:jiǎo 0x7B06:bā 0x7B07:suàn 0x7B08:jí 0x7B09:qǐn 0x7B0A:zhào 0x7B0B:sǔn 0x7B0C:yá 0x7B0D:zhuì,ruì 0x7B0E:yuán 0x7B0F:hù,wěn,wù 0x7B10:háng,hàng 0x7B11:xiào 0x7B12:cén,jìn,hán 0x7B13:bì,pí,bī 0x7B14:bǐ 0x7B15:jiǎn 0x7B16:yǐ 0x7B17:dōng 0x7B18:shān 0x7B19:shēng 0x7B1A:dā,xiá,nà 0x7B1B:dí 0x7B1C:zhú 0x7B1D:nà 0x7B1E:chī 0x7B1F:gū 0x7B20:lì 0x7B21:qiè 0x7B22:mǐn 0x7B23:bāo 0x7B24:tiáo,shào 0x7B25:sì 0x7B26:fú 0x7B27:cè,shàn 0x7B28:bèn 0x7B29:fá 0x7B2A:dá 0x7B2B:zǐ 0x7B2C:dì 0x7B2D:líng 0x7B2E:zé,zhà,zuó 0x7B2F:nú 0x7B30:fú,fèi 0x7B31:gǒu 0x7B32:fán 0x7B33:jiā 0x7B34:gǎn 0x7B35:fàn 0x7B36:shǐ 0x7B37:mǎo 0x7B38:pǒ 0x7B39:ti 0x7B3A:jiān 0x7B3B:qióng 0x7B3C:lóng,lǒng 0x7B3D:mǐn 0x7B3E:biān 0x7B3F:luò 0x7B40:guì 0x7B41:qū 0x7B42:chí 0x7B43:yīn 0x7B44:yào 0x7B45:xiǎn 0x7B46:bǐ 0x7B47:qióng 0x7B48:kuò 0x7B49:děng 0x7B4A:xiáo,jiǎo,jiào 0x7B4B:jīn,qián 0x7B4C:quán 0x7B4D:sǔn,yún,xùn 0x7B4E:rú 0x7B4F:fá 0x7B50:kuāng 0x7B51:zhù,zhú 0x7B52:tǒng,dòng,tóng 0x7B53:jī 0x7B54:dá,dā 0x7B55:háng 0x7B56:cè 0x7B57:zhòng 0x7B58:kòu 0x7B59:lái 0x7B5A:bì 0x7B5B:shāi 0x7B5C:dāng 0x7B5D:zhēng 0x7B5E:cè 0x7B5F:fū 0x7B60:yún,jūn 0x7B61:tú 0x7B62:pá 0x7B63:lí 0x7B64:láng,làng 0x7B65:jǔ 0x7B66:guǎn 0x7B67:jiǎn,xiàn 0x7B68:hán 0x7B69:tóng,tǒng,yǒng,dòng 0x7B6A:xiá 0x7B6B:zhì,zhǐ 0x7B6C:chéng 0x7B6D:suàn 0x7B6E:shì 0x7B6F:zhù 0x7B70:zuó 0x7B71:xiǎo 0x7B72:shāo 0x7B73:tíng 0x7B74:cè,jiā,jiá 0x7B75:yán 0x7B76:gào,gǎo 0x7B77:kuài 0x7B78:gān 0x7B79:chóu 0x7B7A:kuāng 0x7B7B:gàng 0x7B7C:yún 0x7B7D:o 0x7B7E:qiān 0x7B7F:xiǎo 0x7B80:jiǎn 0x7B81:póu,bù,fú,pú 0x7B82:lái 0x7B83:zōu 0x7B84:bǐ,bēi,bī,bì,pái 0x7B85:bì 0x7B86:bì 0x7B87:gè 0x7B88:tái,chí 0x7B89:guǎi,dài 0x7B8A:yū 0x7B8B:jiān 0x7B8C:dào,zhào 0x7B8D:gū 0x7B8E:chí,hǔ 0x7B8F:zhēng 0x7B90:qìng,jīng,qiāng 0x7B91:shà,zhá 0x7B92:zhǒu 0x7B93:lù 0x7B94:bó 0x7B95:jī 0x7B96:lín,lǐn 0x7B97:suàn 0x7B98:jùn,qūn 0x7B99:fú 0x7B9A:zhá 0x7B9B:gū 0x7B9C:kōng 0x7B9D:qián 0x7B9E:qiān 0x7B9F:jùn 0x7BA0:chuí,zhuī 0x7BA1:guǎn 0x7BA2:yuān,wǎn 0x7BA3:cè 0x7BA4:zú 0x7BA5:bǒ 0x7BA6:zé 0x7BA7:qiè 0x7BA8:tuò 0x7BA9:luó 0x7BAA:dān 0x7BAB:xiāo 0x7BAC:ruò,nà 0x7BAD:jiàn 0x7BAE:xuān 0x7BAF:biān 0x7BB0:sǔn 0x7BB1:xiāng 0x7BB2:xiǎn 0x7BB3:píng 0x7BB4:zhēn,jiǎn 0x7BB5:xīng,xǐng,shěng 0x7BB6:hú 0x7BB7:yí,shī 0x7BB8:zhù,zhuó 0x7BB9:yuē,yào,chuò 0x7BBA:chūn 0x7BBB:lǜ 0x7BBC:wū 0x7BBD:dǒng 0x7BBE:shuò,xiāo,qiào 0x7BBF:jí 0x7BC0:jié,jiē 0x7BC1:huáng 0x7BC2:xīng 0x7BC3:mèi 0x7BC4:fàn 0x7BC5:chuán,duān 0x7BC6:zhuàn 0x7BC7:piān 0x7BC8:fēng 0x7BC9:zhù,zhú 0x7BCA:huáng,hóng 0x7BCB:qiè 0x7BCC:hóu 0x7BCD:qiū 0x7BCE:miǎo 0x7BCF:qiàn 0x7BD0:gū 0x7BD1:kuì 0x7BD2:shi 0x7BD3:lǒu 0x7BD4:yún,xūn 0x7BD5:hé 0x7BD6:táng 0x7BD7:yuè 0x7BD8:chōu 0x7BD9:gāo 0x7BDA:fěi 0x7BDB:ruò 0x7BDC:zhēng 0x7BDD:gōu 0x7BDE:niè 0x7BDF:qiàn 0x7BE0:xiǎo 0x7BE1:cuàn 0x7BE2:lǒng,gōng,gǎn 0x7BE3:péng,páng 0x7BE4:dǔ 0x7BE5:lì 0x7BE6:bì,pí 0x7BE7:zhuó,huò 0x7BE8:chú 0x7BE9:shāi,shī 0x7BEA:chí 0x7BEB:zhù 0x7BEC:qiāng,cāng 0x7BED:lóng 0x7BEE:lán 0x7BEF:jiān 0x7BF0:bù 0x7BF1:lí 0x7BF2:huì,suì 0x7BF3:bì 0x7BF4:dí,zhú 0x7BF5:cōng 0x7BF6:yān 0x7BF7:péng 0x7BF8:cǎn,cēn,zān 0x7BF9:zhuàn,suǎn,zuǎn 0x7BFA:pí 0x7BFB:piǎo,biāo 0x7BFC:dōu 0x7BFD:yù 0x7BFE:miè 0x7BFF:tuán,zhuān 0x7C00:zé,zhài 0x7C01:shāi 0x7C02:guì,guó 0x7C03:yí 0x7C04:hù 0x7C05:chǎn 0x7C06:kòu 0x7C07:cù,chuò,còu 0x7C08:píng 0x7C09:zào,chòu 0x7C0A:jī 0x7C0B:guǐ 0x7C0C:sù 0x7C0D:lǒu,lǚ,jù 0x7C0E:cè,jí 0x7C0F:lù 0x7C10:niǎn 0x7C11:suō 0x7C12:cuàn 0x7C13:diāo 0x7C14:suō 0x7C15:lè 0x7C16:duàn 0x7C17:zhù 0x7C18:xiāo 0x7C19:bó 0x7C1A:mì 0x7C1B:shāi,sī 0x7C1C:dàng,tāng 0x7C1D:liáo 0x7C1E:dān 0x7C1F:diàn 0x7C20:fǔ 0x7C21:jiǎn 0x7C22:mǐn 0x7C23:kuì 0x7C24:dài 0x7C25:jiāo 0x7C26:dēng 0x7C27:huáng 0x7C28:sǔn,zhuàn 0x7C29:láo 0x7C2A:zān,zǎn 0x7C2B:xiāo,xiǎo 0x7C2C:lù 0x7C2D:shì 0x7C2E:zān 0x7C2F:qi 0x7C30:pái 0x7C31:qí 0x7C32:pái 0x7C33:gǎn,gàn 0x7C34:jù 0x7C35:lù 0x7C36:lù 0x7C37:yán 0x7C38:bǒ,bò 0x7C39:dāng 0x7C3A:sài 0x7C3B:zhuā,kē 0x7C3C:gōu 0x7C3D:qiān 0x7C3E:lián 0x7C3F:bù,bó 0x7C40:zhòu 0x7C41:lài 0x7C42:shi 0x7C43:lán 0x7C44:kuì 0x7C45:yú 0x7C46:yuè 0x7C47:háo 0x7C48:zhēn,jiān 0x7C49:tái 0x7C4A:tì 0x7C4B:niè,mí 0x7C4C:chóu,táo 0x7C4D:jí,jiè 0x7C4E:yí 0x7C4F:qí 0x7C50:téng 0x7C51:zhuàn,zuǎn 0x7C52:zhòu 0x7C53:fān,bān,pān 0x7C54:sǒu,shǔ 0x7C55:zhòu 0x7C56:qian 0x7C57:zhuó 0x7C58:téng 0x7C59:lù 0x7C5A:lú 0x7C5B:jiǎn,jiān 0x7C5C:tuò 0x7C5D:yíng 0x7C5E:yù 0x7C5F:lài 0x7C60:lóng,lǒng 0x7C61:qiè 0x7C62:lián 0x7C63:lán 0x7C64:qiān 0x7C65:yuè 0x7C66:zhōng 0x7C67:qú,jǔ 0x7C68:lián 0x7C69:biān 0x7C6A:duàn 0x7C6B:zuǎn 0x7C6C:lí 0x7C6D:sī 0x7C6E:luó 0x7C6F:yíng 0x7C70:yuè 0x7C71:zhuó 0x7C72:yù 0x7C73:mǐ 0x7C74:dí,zá 0x7C75:fán 0x7C76:shēn 0x7C77:zhé 0x7C78:shēn 0x7C79:nǚ 0x7C7A:hé 0x7C7B:lèi 0x7C7C:xiān 0x7C7D:zǐ 0x7C7E:ní 0x7C7F:cùn 0x7C80:zhàng 0x7C81:qiān 0x7C82:zhāi 0x7C83:bǐ,pī 0x7C84:bǎn 0x7C85:wù 0x7C86:shā,chǎo 0x7C87:kāng,jīng 0x7C88:róu 0x7C89:fěn 0x7C8A:bì 0x7C8B:cuì 0x7C8C:yin 0x7C8D:zhé 0x7C8E:mǐ 0x7C8F:tai 0x7C90:hù 0x7C91:bā 0x7C92:lì 0x7C93:gān 0x7C94:jù 0x7C95:pò 0x7C96:mò 0x7C97:cū 0x7C98:zhān,nián 0x7C99:zhòu 0x7C9A:chī 0x7C9B:sù 0x7C9C:tiào 0x7C9D:lì 0x7C9E:xī 0x7C9F:sù 0x7CA0:hóng 0x7CA1:tóng 0x7CA2:zī,cí,jì 0x7CA3:cè,sè 0x7CA4:yuè 0x7CA5:zhōu,yù 0x7CA6:lín 0x7CA7:zhuāng 0x7CA8:bǎi 0x7CA9:lāo 0x7CAA:fèn 0x7CAB:ér 0x7CAC:qū 0x7CAD:hé 0x7CAE:liáng 0x7CAF:xiàn 0x7CB0:fú,fū 0x7CB1:liáng 0x7CB2:càn 0x7CB3:jīng 0x7CB4:lǐ 0x7CB5:yuè 0x7CB6:lù 0x7CB7:jú 0x7CB8:qí 0x7CB9:cuì,suì 0x7CBA:bài 0x7CBB:zhāng 0x7CBC:lín,lǐn 0x7CBD:zòng 0x7CBE:jīng,qíng,jìng 0x7CBF:guǒ,huà 0x7CC0:huā 0x7CC1:sǎn,shēn 0x7CC2:sǎn 0x7CC3:táng 0x7CC4:biǎn,biān 0x7CC5:róu 0x7CC6:miàn 0x7CC7:hóu 0x7CC8:xǔ 0x7CC9:zòng 0x7CCA:hú,hū,hù 0x7CCB:jiàn 0x7CCC:zān 0x7CCD:cí 0x7CCE:lí 0x7CCF:xiè 0x7CD0:fū 0x7CD1:nuò 0x7CD2:bèi 0x7CD3:gǔ 0x7CD4:xiǔ 0x7CD5:gāo 0x7CD6:táng 0x7CD7:qiǔ 0x7CD8:jiā 0x7CD9:cāo 0x7CDA:zhuāng 0x7CDB:táng 0x7CDC:mí,méi 0x7CDD:sǎn,sān,shēn 0x7CDE:fèn 0x7CDF:zāo 0x7CE0:kāng 0x7CE1:jiàng 0x7CE2:mó 0x7CE3:sǎn 0x7CE4:sǎn 0x7CE5:nuò 0x7CE6:xī 0x7CE7:liáng 0x7CE8:jiàng,jiāng 0x7CE9:kuài 0x7CEA:bò 0x7CEB:huán 0x7CEC:shǔ 0x7CED:zòng 0x7CEE:xiàn 0x7CEF:nuò 0x7CF0:tuán 0x7CF1:niè 0x7CF2:lì 0x7CF3:zuò 0x7CF4:dí 0x7CF5:niè 0x7CF6:tiào,diào 0x7CF7:làn 0x7CF8:mì,sī 0x7CF9:sī 0x7CFA:jiū,jiǔ 0x7CFB:xì,jì 0x7CFC:gōng 0x7CFD:zhěng,zhēng 0x7CFE:jiū,jiǎo 0x7CFF:yòu 0x7D00:jì,jǐ 0x7D01:chà 0x7D02:zhòu 0x7D03:xún 0x7D04:yuē,yāo,yào,dì 0x7D05:hóng,gōng,jiàng 0x7D06:yū,ōu 0x7D07:hé,gē,jié 0x7D08:wán 0x7D09:rèn 0x7D0A:wěn,wèn 0x7D0B:wén,wèn 0x7D0C:qiú 0x7D0D:nà 0x7D0E:zī 0x7D0F:tǒu 0x7D10:niǔ 0x7D11:fóu 0x7D12:jì,jié,jiè 0x7D13:shū 0x7D14:chún,zhǔn,tún,quán,zī,zhūn 0x7D15:pī,pí,bǐ,bī,bì,chǐ 0x7D16:zhèn 0x7D17:shā,miǎo 0x7D18:hóng 0x7D19:zhǐ 0x7D1A:jí 0x7D1B:fēn 0x7D1C:yún 0x7D1D:rèn 0x7D1E:dǎn 0x7D1F:jīn,jìn 0x7D20:sù 0x7D21:fǎng,bǎng,fàng 0x7D22:suǒ 0x7D23:cuì 0x7D24:jiǔ 0x7D25:zā,zhā 0x7D26:ba 0x7D27:jǐn 0x7D28:fū,fù 0x7D29:zhì 0x7D2A:qī 0x7D2B:zǐ 0x7D2C:chóu,chōu,zhòu 0x7D2D:hóng 0x7D2E:zā,zhā 0x7D2F:lèi,lěi,léi,lǜ,liè 0x7D30:xì 0x7D31:fú 0x7D32:xiè,yì 0x7D33:shēn 0x7D34:bō,bì 0x7D35:zhù,shū 0x7D36:qū,qǔ 0x7D37:líng 0x7D38:zhù 0x7D39:shào,chāo 0x7D3A:gàn 0x7D3B:yǎng 0x7D3C:fú,fèi 0x7D3D:tuó 0x7D3E:zhěn,tiǎn,jǐn 0x7D3F:dài 0x7D40:chù 0x7D41:shī 0x7D42:zhōng 0x7D43:xián,xuàn 0x7D44:zǔ,qū 0x7D45:jiōng,jiǒng 0x7D46:bàn 0x7D47:qú 0x7D48:mò 0x7D49:shù 0x7D4A:zuì 0x7D4B:kuàng 0x7D4C:jīng 0x7D4D:rèn 0x7D4E:háng 0x7D4F:xiè,yì 0x7D50:jié,jì,jiē 0x7D51:zhū 0x7D52:chóu 0x7D53:guà,kuā 0x7D54:bǎi,mò 0x7D55:jué 0x7D56:kuàng 0x7D57:hú 0x7D58:cì 0x7D59:huán,gēng 0x7D5A:gēng 0x7D5B:tāo 0x7D5C:jié,xié,qià,jiá,qì 0x7D5D:kù 0x7D5E:jiǎo,xiáo,jiào 0x7D5F:quán 0x7D60:gǎi,ǎi 0x7D61:luò,lào 0x7D62:xuàn,xún 0x7D63:bēng,bīng,pēng 0x7D64:xiàn 0x7D65:fú 0x7D66:gěi,jǐ,xiá 0x7D67:dòng,tóng,tōng 0x7D68:róng 0x7D69:tiào,diào,dào 0x7D6A:yīn 0x7D6B:lěi 0x7D6C:xiè 0x7D6D:juàn 0x7D6E:xù,chù,nǜ,nà 0x7D6F:gāi,hài 0x7D70:dié 0x7D71:tǒng 0x7D72:sī 0x7D73:jiàng 0x7D74:xiáng 0x7D75:huì 0x7D76:jué 0x7D77:zhí 0x7D78:jiǎn 0x7D79:juàn,xuàn 0x7D7A:chī,zhǐ 0x7D7B:miǎn,wèn,mán,wàn 0x7D7C:zhèn 0x7D7D:lǚ 0x7D7E:chéng 0x7D7F:qiú 0x7D80:shū 0x7D81:bǎng 0x7D82:tǒng 0x7D83:xiāo,shāo 0x7D84:huán,huàn,wàn 0x7D85:qīn,xiān 0x7D86:gěng,bǐng 0x7D87:xiǔ 0x7D88:tí,tì 0x7D89:tòu,xiù 0x7D8A:xié 0x7D8B:hóng 0x7D8C:xì 0x7D8D:fú 0x7D8E:tīng 0x7D8F:suī,suí,shuāi,ruí,tuǒ 0x7D90:duì 0x7D91:kǔn 0x7D92:fū 0x7D93:jīng,jìng 0x7D94:hù 0x7D95:zhī 0x7D96:yán,xiàn 0x7D97:jiǒng 0x7D98:féng 0x7D99:jì 0x7D9A:xù 0x7D9B:rěn 0x7D9C:zōng,zèng,zòng 0x7D9D:chēn,shēn,lín 0x7D9E:duǒ 0x7D9F:lì,liè 0x7DA0:lǜ 0x7DA1:liáng 0x7DA2:chóu,tāo,diào 0x7DA3:quǎn 0x7DA4:shào 0x7DA5:qí 0x7DA6:qí,qì 0x7DA7:zhǔn,zhùn 0x7DA8:qí 0x7DA9:wǎn 0x7DAA:qiàn,qīng,zhēng 0x7DAB:xiàn 0x7DAC:shòu 0x7DAD:wéi,yí 0x7DAE:qǐ,qìng,qǐng 0x7DAF:táo 0x7DB0:wǎn 0x7DB1:gāng 0x7DB2:wǎng 0x7DB3:bēng 0x7DB4:zhuì,chuò 0x7DB5:cǎi 0x7DB6:guǒ 0x7DB7:cuì,zú 0x7DB8:lún,guān 0x7DB9:liǔ 0x7DBA:qǐ,yǐ 0x7DBB:zhàn 0x7DBC:bì 0x7DBD:chuò,chāo 0x7DBE:líng 0x7DBF:mián 0x7DC0:qī 0x7DC1:qiè 0x7DC2:tián,tǎn,chān 0x7DC3:zōng 0x7DC4:gǔn,hùn,hún 0x7DC5:zōu 0x7DC6:xī 0x7DC7:zī 0x7DC8:xìng 0x7DC9:liǎng 0x7DCA:jǐn 0x7DCB:fēi 0x7DCC:ruí 0x7DCD:mín 0x7DCE:yù 0x7DCF:zǒng,cōng 0x7DD0:fán 0x7DD1:lǜ,lù 0x7DD2:xù 0x7DD3:yīng 0x7DD4:shàng 0x7DD5:qi 0x7DD6:xù 0x7DD7:xiāng 0x7DD8:jiān 0x7DD9:kè 0x7DDA:xiàn 0x7DDB:ruǎn,ruàn 0x7DDC:mián 0x7DDD:jī,qì,qī,jí 0x7DDE:duàn 0x7DDF:chóng,zhòng 0x7DE0:dì 0x7DE1:mín,mǐn,mián,hún 0x7DE2:miáo,máo 0x7DE3:yuán,yuàn 0x7DE4:xiè,yè 0x7DE5:bǎo 0x7DE6:sī 0x7DE7:qiū 0x7DE8:biān,biǎn,biàn 0x7DE9:huǎn 0x7DEA:gēng,gèng 0x7DEB:cōng 0x7DEC:miǎn 0x7DED:wèi 0x7DEE:fù 0x7DEF:wěi 0x7DF0:tóu,xū,yú 0x7DF1:gōu 0x7DF2:miǎo 0x7DF3:xié 0x7DF4:liàn 0x7DF5:zōng,zòng 0x7DF6:biàn,pián,biǎn 0x7DF7:yùn,gǔn 0x7DF8:yīn 0x7DF9:tí 0x7DFA:guā 0x7DFB:zhì 0x7DFC:yùn,wēn 0x7DFD:chēng 0x7DFE:chán 0x7DFF:dài 0x7E00:xiá 0x7E01:yuán 0x7E02:zǒng 0x7E03:xū 0x7E04:shéng 0x7E05:wēi 0x7E06:gēng 0x7E07:xuān 0x7E08:yíng 0x7E09:jìn 0x7E0A:yì 0x7E0B:zhuì 0x7E0C:nì 0x7E0D:bāng,bàng 0x7E0E:gǔ,hú 0x7E0F:pán 0x7E10:zhòu,chào,cù,zhōu 0x7E11:jiān 0x7E12:cī,cuò,suǒ 0x7E13:quán 0x7E14:shuǎng 0x7E15:yùn 0x7E16:xiá 0x7E17:cuī,suī,shuāi 0x7E18:xī 0x7E19:róng,rǒng,ròng 0x7E1A:tāo 0x7E1B:fù 0x7E1C:yún 0x7E1D:chēn,zhěn 0x7E1E:gǎo 0x7E1F:rù,rǒng 0x7E20:hú 0x7E21:zài,zēng 0x7E22:téng 0x7E23:xiàn,xuán 0x7E24:sù 0x7E25:zhěn 0x7E26:zòng 0x7E27:tāo 0x7E28:huǎng 0x7E29:cài 0x7E2A:bì 0x7E2B:fèng,féng 0x7E2C:cù 0x7E2D:lí 0x7E2E:suō,sù 0x7E2F:yǎn,yǐn 0x7E30:xǐ 0x7E31:zòng,cóng,zǒng 0x7E32:léi 0x7E33:juàn,zhuàn 0x7E34:qiàn,qiān 0x7E35:màn 0x7E36:zhí 0x7E37:lǚ 0x7E38:mù,mò 0x7E39:piǎo,piāo 0x7E3A:lián 0x7E3B:mí 0x7E3C:xuàn 0x7E3D:zǒng,zōng,cōng 0x7E3E:jī 0x7E3F:shān,xiān,xiāo,sāo,cǎn 0x7E40:suì,cuǐ 0x7E41:fán,pán,pó 0x7E42:lǜ 0x7E43:běng,bēng,bèng 0x7E44:yī,yì 0x7E45:sāo,zǎo 0x7E46:móu,jiū,miù,mù,miào,liáo,liǎo,liào,lù 0x7E47:yáo,yóu,zhòu 0x7E48:qiǎng 0x7E49:hún 0x7E4A:xiān 0x7E4B:jì 0x7E4C:sha 0x7E4D:xiù 0x7E4E:rán 0x7E4F:xuàn 0x7E50:suì 0x7E51:qiāo,juē 0x7E52:zēng,zèng,céng 0x7E53:zuǒ 0x7E54:zhī,zhì 0x7E55:shàn 0x7E56:sǎn 0x7E57:lín 0x7E58:yù,jué 0x7E59:fān,fán 0x7E5A:liáo,rǎo 0x7E5B:chuò 0x7E5C:zūn 0x7E5D:jiàn 0x7E5E:rào,rǎo 0x7E5F:chǎn,chán 0x7E60:ruǐ 0x7E61:xiù 0x7E62:huì,huí 0x7E63:huà 0x7E64:zuǎn 0x7E65:xī 0x7E66:qiǎng 0x7E67:yun 0x7E68:da 0x7E69:shéng,yìng,mǐn,shèng 0x7E6A:huì,guì 0x7E6B:xì,jì 0x7E6C:sè 0x7E6D:jiǎn 0x7E6E:jiāng 0x7E6F:huán 0x7E70:zǎo,sāo,qiāo 0x7E71:cōng 0x7E72:xiè 0x7E73:jiǎo,zhuó,jiào,hé 0x7E74:bì 0x7E75:dàn,tán,chán 0x7E76:yì 0x7E77:nǒng 0x7E78:suì 0x7E79:yì,shì 0x7E7A:shǎi 0x7E7B:xū,rú 0x7E7C:jì 0x7E7D:bīn 0x7E7E:qiǎn 0x7E7F:lán 0x7E80:pú,fú 0x7E81:xūn 0x7E82:zuǎn 0x7E83:qí 0x7E84:péng 0x7E85:yào,lì 0x7E86:mò 0x7E87:lèi 0x7E88:xié 0x7E89:zuǎn 0x7E8A:kuàng 0x7E8B:yōu 0x7E8C:xù 0x7E8D:léi,lěi,lèi 0x7E8E:xiān 0x7E8F:chán 0x7E90:jiǎo 0x7E91:lú 0x7E92:chán 0x7E93:yīng 0x7E94:cái,shān 0x7E95:rǎng,xiāng,sāng 0x7E96:xiān,jiān 0x7E97:zuī 0x7E98:zuǎn 0x7E99:luò 0x7E9A:lí,xǐ,lǐ,sǎ 0x7E9B:dào,dú 0x7E9C:lǎn 0x7E9D:léi 0x7E9E:liàn 0x7E9F:sī 0x7EA0:jiū 0x7EA1:yū 0x7EA2:hóng,gōng 0x7EA3:zhòu 0x7EA4:xiān,qiàn 0x7EA5:gē,hé 0x7EA6:yuē,yāo 0x7EA7:jí 0x7EA8:wán 0x7EA9:kuàng 0x7EAA:jì,jǐ 0x7EAB:rèn 0x7EAC:wěi 0x7EAD:yún 0x7EAE:hóng 0x7EAF:chún 0x7EB0:pī 0x7EB1:shā 0x7EB2:gāng 0x7EB3:nà 0x7EB4:rèn 0x7EB5:zòng 0x7EB6:lún,guān 0x7EB7:fēn 0x7EB8:zhǐ 0x7EB9:wén,wèn 0x7EBA:fǎng 0x7EBB:zhù 0x7EBC:zhèn 0x7EBD:niǔ 0x7EBE:shū 0x7EBF:xiàn 0x7EC0:gàn 0x7EC1:xiè 0x7EC2:fú 0x7EC3:liàn 0x7EC4:zǔ 0x7EC5:shēn 0x7EC6:xì 0x7EC7:zhī 0x7EC8:zhōng 0x7EC9:zhòu 0x7ECA:bàn 0x7ECB:fú 0x7ECC:chù 0x7ECD:shào 0x7ECE:yì 0x7ECF:jīng,jìng 0x7ED0:dài 0x7ED1:bǎng 0x7ED2:róng 0x7ED3:jié,jiē 0x7ED4:kù 0x7ED5:rào,rǎo 0x7ED6:dié 0x7ED7:háng 0x7ED8:huì 0x7ED9:gěi,jǐ 0x7EDA:xuàn 0x7EDB:jiàng 0x7EDC:luò,lào 0x7EDD:jué 0x7EDE:jiǎo 0x7EDF:tǒng 0x7EE0:gěng 0x7EE1:xiāo 0x7EE2:juàn 0x7EE3:xiù 0x7EE4:xì 0x7EE5:suí 0x7EE6:tāo 0x7EE7:jì 0x7EE8:tí,tì 0x7EE9:jī 0x7EEA:xù 0x7EEB:líng 0x7EEC:yīng 0x7EED:xù 0x7EEE:qǐ 0x7EEF:fēi 0x7EF0:chuò,chāo 0x7EF1:shàng 0x7EF2:gǔn 0x7EF3:shéng 0x7EF4:wéi 0x7EF5:mián 0x7EF6:shòu 0x7EF7:bēng,běng,bèng 0x7EF8:chóu 0x7EF9:táo 0x7EFA:liǔ 0x7EFB:quǎn 0x7EFC:zōng,zèng 0x7EFD:zhàn 0x7EFE:wǎn 0x7EFF:lǜ,lù 0x7F00:zhuì 0x7F01:zī 0x7F02:kè 0x7F03:xiāng 0x7F04:jiān 0x7F05:miǎn 0x7F06:lǎn 0x7F07:tí 0x7F08:miǎo 0x7F09:jī,qī 0x7F0A:yūn,yùn 0x7F0B:huì 0x7F0C:sī 0x7F0D:duǒ 0x7F0E:duàn 0x7F0F:biàn,pián 0x7F10:xiàn 0x7F11:gōu 0x7F12:zhuì 0x7F13:huǎn 0x7F14:dì 0x7F15:lǚ 0x7F16:biān 0x7F17:mín 0x7F18:yuán 0x7F19:jìn 0x7F1A:fù 0x7F1B:rù 0x7F1C:zhěn 0x7F1D:fèng,féng 0x7F1E:cuī 0x7F1F:gǎo 0x7F20:chán 0x7F21:lí 0x7F22:yì 0x7F23:jiān 0x7F24:bīn 0x7F25:piāo,piǎo 0x7F26:màn 0x7F27:léi 0x7F28:yīng 0x7F29:suō,sù 0x7F2A:móu,miào,miù 0x7F2B:sāo 0x7F2C:xié 0x7F2D:liáo 0x7F2E:shàn 0x7F2F:zēng,zèng 0x7F30:jiāng 0x7F31:qiǎn 0x7F32:qiāo,sāo 0x7F33:huán 0x7F34:jiǎo,zhuó 0x7F35:zuǎn 0x7F36:fǒu 0x7F37:xiè 0x7F38:gāng 0x7F39:fǒu 0x7F3A:quē,kuǐ 0x7F3B:fǒu 0x7F3C:qi 0x7F3D:bō 0x7F3E:píng 0x7F3F:xiàng 0x7F40:zhao 0x7F41:gāng 0x7F42:yīng 0x7F43:yīng 0x7F44:qìng 0x7F45:xià 0x7F46:guàn 0x7F47:zūn 0x7F48:tán 0x7F49:chēng 0x7F4A:qì 0x7F4B:wèng 0x7F4C:yīng 0x7F4D:léi 0x7F4E:tán 0x7F4F:lú 0x7F50:guàn 0x7F51:wǎng 0x7F52:wǎng 0x7F53:gāng 0x7F54:wǎng,wáng 0x7F55:hǎn,hàn 0x7F56:luó 0x7F57:luó 0x7F58:fú 0x7F59:shēn 0x7F5A:fá 0x7F5B:gū 0x7F5C:zhǔ,dú 0x7F5D:jū,jiē 0x7F5E:máo 0x7F5F:gǔ 0x7F60:mín 0x7F61:gāng 0x7F62:bà,ba 0x7F63:guà 0x7F64:tí,kūn 0x7F65:juàn 0x7F66:fú 0x7F67:shèn 0x7F68:yǎn 0x7F69:zhào 0x7F6A:zuì 0x7F6B:guà,huà,guǎi 0x7F6C:zhuó 0x7F6D:yù 0x7F6E:zhì 0x7F6F:ǎn 0x7F70:fá 0x7F71:lǎn,nǎn 0x7F72:shǔ 0x7F73:sī 0x7F74:pí 0x7F75:mà 0x7F76:liǔ 0x7F77:bà,pí,pì,bǐ,ba,bǎi 0x7F78:fá 0x7F79:lí 0x7F7A:cháo 0x7F7B:wèi 0x7F7C:bì 0x7F7D:jì 0x7F7E:zēng 0x7F7F:chōng 0x7F80:liǔ 0x7F81:jī 0x7F82:juàn 0x7F83:mì 0x7F84:zhào 0x7F85:luó,luō,luo 0x7F86:pí 0x7F87:jī 0x7F88:jī 0x7F89:luán 0x7F8A:yáng 0x7F8B:mǐ,miē 0x7F8C:qiāng 0x7F8D:dá 0x7F8E:měi 0x7F8F:yáng,xiáng 0x7F90:yǒu 0x7F91:yǒu 0x7F92:fén 0x7F93:bā 0x7F94:gāo 0x7F95:yàng 0x7F96:gǔ 0x7F97:qiāng,yǒu 0x7F98:zāng 0x7F99:gāo,měi 0x7F9A:líng 0x7F9B:yì,xī 0x7F9C:zhù 0x7F9D:dī 0x7F9E:xiū 0x7F9F:qiǎng 0x7FA0:yí 0x7FA1:xiàn,yán,yí 0x7FA2:róng 0x7FA3:qún 0x7FA4:qún 0x7FA5:qiǎng,qiān 0x7FA6:huán 0x7FA7:suō,zuī 0x7FA8:xiàn 0x7FA9:yì,yí,xī 0x7FAA:yang 0x7FAB:qiāng,kàng 0x7FAC:qián,xián,yán 0x7FAD:yú 0x7FAE:gēng 0x7FAF:jié 0x7FB0:tāng 0x7FB1:yuán 0x7FB2:xī 0x7FB3:fán 0x7FB4:shān 0x7FB5:fén 0x7FB6:shān 0x7FB7:liǎn 0x7FB8:léi,lián 0x7FB9:gēng,láng 0x7FBA:nóu 0x7FBB:qiàng 0x7FBC:chàn 0x7FBD:yǔ,hù 0x7FBE:gòng 0x7FBF:yì 0x7FC0:chōng 0x7FC1:wēng,wěng 0x7FC2:fēn 0x7FC3:hóng 0x7FC4:chì 0x7FC5:chì 0x7FC6:cuì 0x7FC7:fú 0x7FC8:xiá 0x7FC9:běn 0x7FCA:yì 0x7FCB:lā 0x7FCC:yì 0x7FCD:pī,bì,pō 0x7FCE:líng 0x7FCF:liù,lù 0x7FD0:zhì 0x7FD1:qú 0x7FD2:xí 0x7FD3:xié 0x7FD4:xiáng 0x7FD5:xī 0x7FD6:xī 0x7FD7:ké 0x7FD8:qiào,qiáo 0x7FD9:huì 0x7FDA:huī 0x7FDB:xiāo,shū 0x7FDC:shà 0x7FDD:hóng 0x7FDE:jiāng 0x7FDF:dí,zhái 0x7FE0:cuì 0x7FE1:fěi 0x7FE2:dào,zhōu 0x7FE3:shà 0x7FE4:chì 0x7FE5:zhù 0x7FE6:jiǎn 0x7FE7:xuān 0x7FE8:chì 0x7FE9:piān 0x7FEA:zōng 0x7FEB:wán,wàn 0x7FEC:huī 0x7FED:hóu 0x7FEE:hé,lì 0x7FEF:hè,hào 0x7FF0:hàn 0x7FF1:áo 0x7FF2:piāo 0x7FF3:yì 0x7FF4:lián 0x7FF5:hóu,qú 0x7FF6:áo 0x7FF7:lín 0x7FF8:pěn 0x7FF9:qiào,qiáo 0x7FFA:áo 0x7FFB:fān 0x7FFC:yì 0x7FFD:huì 0x7FFE:xuān 0x7FFF:dào 0x8000:yào 0x8001:lǎo 0x8002:lǎo 0x8003:kǎo 0x8004:mào 0x8005:zhě 0x8006:qí,zhǐ,shì 0x8007:gǒu 0x8008:gǒu 0x8009:gǒu 0x800A:dié 0x800B:dié 0x800C:ér,néng 0x800D:shuǎ 0x800E:ruǎn,nuò 0x800F:nài,ér 0x8010:nài,néng 0x8011:duān,zhuān 0x8012:lěi 0x8013:tīng 0x8014:zǐ 0x8015:gēng 0x8016:chào 0x8017:hào,máo,mào 0x8018:yún 0x8019:bà,pá 0x801A:pī 0x801B:yí,chí 0x801C:sì 0x801D:qù,chú 0x801E:jiā 0x801F:jù 0x8020:huō 0x8021:chú 0x8022:lào 0x8023:lǔn,lún 0x8024:jí,jiè 0x8025:tāng,tǎng 0x8026:ǒu 0x8027:lóu 0x8028:nòu 0x8029:jiǎng 0x802A:pǎng 0x802B:zhá,zé 0x802C:lóu,lǒu 0x802D:jī 0x802E:lào 0x802F:huò 0x8030:yōu 0x8031:mò 0x8032:huái 0x8033:ěr,réng 0x8034:yì 0x8035:dīng 0x8036:yé,xié,yē 0x8037:dā,zhé 0x8038:sǒng 0x8039:qín 0x803A:yún,yíng 0x803B:chǐ 0x803C:dān 0x803D:dān 0x803E:hóng 0x803F:gěng 0x8040:zhí 0x8041:pàn 0x8042:niè 0x8043:dān 0x8044:zhěn 0x8045:chè 0x8046:líng 0x8047:zhēng 0x8048:yǒu 0x8049:wà,tuǐ,zhuó 0x804A:liáo,liú 0x804B:lóng 0x804C:zhí 0x804D:níng 0x804E:tiāo 0x804F:ér,nǜ 0x8050:yà 0x8051:tiē,zhé 0x8052:guā,guō 0x8053:xù 0x8054:lián 0x8055:hào 0x8056:shèng 0x8057:liè 0x8058:pìn,pìng 0x8059:jīng 0x805A:jù 0x805B:bǐ 0x805C:dǐ 0x805D:guó 0x805E:wén,wèn 0x805F:xù 0x8060:pīng 0x8061:cōng 0x8062:dìng 0x8063:ní 0x8064:tíng 0x8065:jǔ 0x8066:cōng 0x8067:kuī 0x8068:lián 0x8069:kuì 0x806A:cōng 0x806B:lián 0x806C:wěng 0x806D:kuì 0x806E:lián 0x806F:lián 0x8070:cōng 0x8071:áo,yóu 0x8072:shēng 0x8073:sǒng 0x8074:tīng 0x8075:kuì 0x8076:niè,zhé,shè,yè 0x8077:zhí,tè 0x8078:dān 0x8079:níng 0x807A:qié 0x807B:nǐ,jiàn 0x807C:tīng 0x807D:tīng,tìng 0x807E:lóng 0x807F:yù 0x8080:yù 0x8081:zhào 0x8082:sì 0x8083:sù 0x8084:yì,sì 0x8085:sù 0x8086:sì,tì 0x8087:zhào 0x8088:zhào 0x8089:ròu,rù 0x808A:yì 0x808B:lē,lèi,jīn 0x808C:jī,jì 0x808D:qiú 0x808E:kěn 0x808F:cào 0x8090:gē,qì 0x8091:bó,dí 0x8092:huàn 0x8093:huāng 0x8094:chǐ 0x8095:rèn 0x8096:xiào,xiāo 0x8097:rǔ 0x8098:zhǒu 0x8099:yuàn 0x809A:dù,dǔ 0x809B:gāng 0x809C:róng,chēn 0x809D:gān 0x809E:chā 0x809F:wò 0x80A0:cháng 0x80A1:gǔ 0x80A2:zhī,shì 0x80A3:hán,hàn,qín 0x80A4:fū 0x80A5:féi,bǐ 0x80A6:fén 0x80A7:pēi 0x80A8:pàng,pāng,fēng 0x80A9:jiān,xián 0x80AA:fáng 0x80AB:zhūn,chún,tún,zhuō 0x80AC:yóu 0x80AD:nà,nù 0x80AE:āng,háng,gāng 0x80AF:kěn 0x80B0:rán 0x80B1:gōng 0x80B2:yù,zhòu,yō 0x80B3:wěn 0x80B4:yáo 0x80B5:qí 0x80B6:pí,bì 0x80B7:qiǎn,xù 0x80B8:xī,bì 0x80B9:xī 0x80BA:fèi,pèi 0x80BB:kěn 0x80BC:jǐng 0x80BD:tài 0x80BE:shèn 0x80BF:zhǒng 0x80C0:zhàng 0x80C1:xié 0x80C2:shèn,shēn,chēn 0x80C3:wèi 0x80C4:zhòu 0x80C5:dié 0x80C6:dǎn,tán,tǎn,dá 0x80C7:fèi,bì,fěi 0x80C8:bá 0x80C9:bó 0x80CA:qú 0x80CB:tián 0x80CC:bèi,bēi 0x80CD:guā,gū,hù 0x80CE:tāi 0x80CF:zǐ,fèi 0x80D0:fěi 0x80D1:zhī 0x80D2:nì 0x80D3:píng,pēng 0x80D4:zì,cí,jí 0x80D5:fǔ,fū,fú,zhǒu 0x80D6:pàng,pàn,pán 0x80D7:zhēn,zhěn,zhūn 0x80D8:xián 0x80D9:zuò 0x80DA:pēi 0x80DB:jiǎ 0x80DC:shèng,xīng,qìng,shēng 0x80DD:zhī,chī,dì 0x80DE:bāo,páo,pào 0x80DF:mǔ 0x80E0:qū 0x80E1:hú 0x80E2:kē 0x80E3:chǐ 0x80E4:yìn 0x80E5:xū,xǔ 0x80E6:yāng 0x80E7:lóng 0x80E8:dòng 0x80E9:kǎ 0x80EA:lú 0x80EB:jìng 0x80EC:nǔ,nǚ 0x80ED:yān 0x80EE:pāng 0x80EF:kuà,kuǎ 0x80F0:yí 0x80F1:guāng 0x80F2:hǎi,gāi,gǎi 0x80F3:gē,gé,gā 0x80F4:dòng 0x80F5:chī,zhì 0x80F6:jiāo,xiáo 0x80F7:xiōng 0x80F8:xiōng 0x80F9:ér 0x80FA:àn,è 0x80FB:héng 0x80FC:pián 0x80FD:néng,tái,nái,nài,xióng 0x80FE:zì 0x80FF:guī,kuì 0x8100:chéng,zhēng,zhèng 0x8101:tiǎo 0x8102:zhī,zhǐ 0x8103:cuì 0x8104:méi 0x8105:xié,xiàn,xī 0x8106:cuì 0x8107:xié 0x8108:mài,mò 0x8109:mài,mò 0x810A:jí,jǐ 0x810B:xié 0x810C:nin 0x810D:kuài 0x810E:sà 0x810F:zàng,zāng 0x8110:qí 0x8111:nǎo 0x8112:mǐ 0x8113:nóng 0x8114:luán,jī 0x8115:wàn,wèn 0x8116:bó,bō 0x8117:wěn 0x8118:wǎn,huàn 0x8119:xiū 0x811A:jiǎo,jué 0x811B:jìng,kēng 0x811C:yǒu 0x811D:hēng 0x811E:cuǒ,qiē 0x811F:liè,luán,pāo 0x8120:shān,chān 0x8121:tǐng 0x8122:méi 0x8123:chún 0x8124:shèn 0x8125:qiǎn,qū,jié 0x8126:de,tè,te 0x8127:juān,zuī 0x8128:cù,jí 0x8129:xiū,yǒu,tiáo,xiāo 0x812A:xìn,chī 0x812B:tuō 0x812C:pāo 0x812D:chéng 0x812E:něi,tuǐ 0x812F:pú,fǔ 0x8130:dòu 0x8131:tuō,tuì 0x8132:niào 0x8133:nǎo 0x8134:pǐ 0x8135:gǔ 0x8136:luó 0x8137:lì 0x8138:liǎn 0x8139:zhàng,cháng 0x813A:cuì,suì 0x813B:jiē 0x813C:liǎng,lǎng 0x813D:shuí 0x813E:pí,pái,bì,pì 0x813F:biāo,biào,biǎo 0x8140:lún 0x8141:pián 0x8142:lěi,guò,huà 0x8143:kuì,quān,quán,juàn 0x8144:chuí,hóu,chuái 0x8145:dàn 0x8146:tiǎn 0x8147:něi 0x8148:jīng 0x8149:nái 0x814A:là,xī 0x814B:yè 0x814C:yān,ā,āng 0x814D:rèn,diàn 0x814E:shèn 0x814F:chuò,zhuì 0x8150:fǔ 0x8151:fǔ 0x8152:jū 0x8153:féi 0x8154:qiāng,kòng 0x8155:wàn 0x8156:dòng 0x8157:pí 0x8158:guó 0x8159:zōng 0x815A:dìng 0x815B:wò 0x815C:méi 0x815D:ní,ruǎn,nào,nèn,ér 0x815E:zhuàn,dùn,tú 0x815F:chì 0x8160:còu 0x8161:luó 0x8162:ǒu 0x8163:dì 0x8164:ān 0x8165:xīng 0x8166:nǎo,nào 0x8167:shù,yú 0x8168:shuàn 0x8169:nǎn 0x816A:yùn 0x816B:zhǒng 0x816C:róu 0x816D:è 0x816E:sāi 0x816F:tú,dùn 0x8170:yāo 0x8171:jiàn,qián 0x8172:wěi 0x8173:jiǎo,jué 0x8174:yú 0x8175:jiā 0x8176:duàn 0x8177:bì 0x8178:cháng 0x8179:fù 0x817A:xiàn 0x817B:nì 0x817C:miǎn 0x817D:wà 0x817E:téng 0x817F:tuǐ 0x8180:bǎng,páng,pāng,bàng,pǎng 0x8181:qiǎn,xiàn,yán 0x8182:lǚ 0x8183:wà 0x8184:shòu 0x8185:táng 0x8186:sù 0x8187:zhuì 0x8188:gé 0x8189:yì 0x818A:bó,pò,liè 0x818B:liáo 0x818C:jí 0x818D:pí 0x818E:xié 0x818F:gāo,gào 0x8190:lǚ 0x8191:bìn 0x8192:ōu 0x8193:cháng 0x8194:lù,biāo 0x8195:guó,huò 0x8196:pāng 0x8197:chuái 0x8198:biāo,piǎo 0x8199:jiǎng 0x819A:fū,lú 0x819B:táng,tāng 0x819C:mó 0x819D:xī 0x819E:zhuān,zhuǎn,chuǎn,chún 0x819F:lǜ 0x81A0:jiāo,jiǎo,háo,nǎo 0x81A1:yìng 0x81A2:lǘ 0x81A3:zhì 0x81A4:xuě 0x81A5:cūn 0x81A6:lìn,liǎn 0x81A7:tóng 0x81A8:péng,pèng 0x81A9:nì 0x81AA:chuài,zhà,zhài 0x81AB:liáo,liǎo 0x81AC:cuì 0x81AD:guī,kuì,duì 0x81AE:xiāo 0x81AF:tēng,tún 0x81B0:fán,pán 0x81B1:zhí 0x81B2:jiāo 0x81B3:shàn 0x81B4:hū,wǔ,méi 0x81B5:cuì 0x81B6:rùn 0x81B7:xiāng 0x81B8:suǐ,wěi 0x81B9:fèn 0x81BA:yīng 0x81BB:shān,dàn 0x81BC:zhuā 0x81BD:dǎn 0x81BE:kuài 0x81BF:nóng 0x81C0:tún 0x81C1:lián 0x81C2:bì,bei 0x81C3:yōng 0x81C4:jué,jū 0x81C5:chù 0x81C6:yì,yǐ 0x81C7:juǎn 0x81C8:là,gé 0x81C9:liǎn 0x81CA:sāo,sào 0x81CB:tún 0x81CC:gǔ 0x81CD:qí 0x81CE:cuì 0x81CF:bìn 0x81D0:xūn 0x81D1:nào,rú,ér,nèn,nuǎn 0x81D2:wò,yuè 0x81D3:zàng 0x81D4:xiàn 0x81D5:biāo 0x81D6:xìng 0x81D7:kuān 0x81D8:là,liè 0x81D9:yān 0x81DA:lú,lǚ 0x81DB:huò 0x81DC:zā 0x81DD:luǒ 0x81DE:qú 0x81DF:zàng 0x81E0:luán 0x81E1:ní,luán 0x81E2:zā,zān 0x81E3:chén 0x81E4:qiān,xián,qìn 0x81E5:wò 0x81E6:guàng,jiǒng 0x81E7:zāng,cáng,zàng 0x81E8:lín,lìn 0x81E9:guǎng,jiǒng 0x81EA:zì 0x81EB:jiǎo 0x81EC:niè 0x81ED:chòu,xiù 0x81EE:jì 0x81EF:gāo 0x81F0:chòu 0x81F1:mián,biān 0x81F2:niè 0x81F3:zhì,dié 0x81F4:zhì,zhuì 0x81F5:gé 0x81F6:jiàn 0x81F7:dié,zhí 0x81F8:zhī,jìn 0x81F9:xiū 0x81FA:tái 0x81FB:zhēn 0x81FC:jiù 0x81FD:xiàn 0x81FE:yú,yǔ,yǒng,kuì 0x81FF:chā 0x8200:yǎo 0x8201:yú 0x8202:chōng,chuāng,zhōng 0x8203:xì 0x8204:xì,què,tuō 0x8205:jiù 0x8206:yú 0x8207:yǔ,yú,yù 0x8208:xìng,xīng,xìn 0x8209:jǔ 0x820A:jiù 0x820B:xìn 0x820C:shé,guā 0x820D:shě,shè,shì 0x820E:shè 0x820F:jiǔ 0x8210:shì 0x8211:tān 0x8212:shū,yù 0x8213:shì 0x8214:tiǎn,tān 0x8215:tàn 0x8216:pù 0x8217:pù 0x8218:guǎn 0x8219:huà,qì 0x821A:tiàn 0x821B:chuǎn 0x821C:shùn 0x821D:xiá 0x821E:wǔ 0x821F:zhōu 0x8220:dāo 0x8221:chuán,xiāng 0x8222:shān 0x8223:yǐ 0x8224:fán 0x8225:pā 0x8226:tài 0x8227:fán 0x8228:bǎn 0x8229:chuán,fán 0x822A:háng 0x822B:fǎng 0x822C:bān,pán,bǎn,bō 0x822D:bǐ 0x822E:lú 0x822F:zhōng 0x8230:jiàn 0x8231:cāng 0x8232:líng 0x8233:zhú,zhǒu 0x8234:zé 0x8235:duò 0x8236:bó 0x8237:xián 0x8238:gě 0x8239:chuán 0x823A:xiá 0x823B:lú 0x823C:qióng,hóng 0x823D:páng,féng 0x823E:xī 0x823F:kuā 0x8240:fú 0x8241:zào 0x8242:féng 0x8243:lí 0x8244:shāo,shào 0x8245:yú 0x8246:láng 0x8247:tǐng 0x8248:yù 0x8249:wěi 0x824A:bó 0x824B:měng 0x824C:niàn,qiàn 0x824D:jū 0x824E:huáng 0x824F:shǒu 0x8250:kè,jiè,zōng 0x8251:biàn 0x8252:mù,mò 0x8253:dié 0x8254:dào 0x8255:bàng 0x8256:chā 0x8257:yì 0x8258:sōu 0x8259:cāng 0x825A:cáo 0x825B:lóu 0x825C:dài 0x825D:xuě 0x825E:yào,tiào 0x825F:chōng,zhuàng,tóng 0x8260:dēng 0x8261:dāng 0x8262:qiáng 0x8263:lǔ 0x8264:yǐ 0x8265:jí 0x8266:jiàn 0x8267:huò,wò 0x8268:méng 0x8269:qí 0x826A:lǔ 0x826B:lú 0x826C:chán 0x826D:shuāng 0x826E:gěn,gèn,hén 0x826F:liáng,liǎng 0x8270:jiān 0x8271:jiān 0x8272:sè,shǎi 0x8273:yàn 0x8274:fú,bó,pèi 0x8275:pīng 0x8276:yàn 0x8277:yàn 0x8278:cǎo 0x8279:cǎo 0x827A:yì 0x827B:lè,jí 0x827C:tīng,dǐng 0x827D:jiāo,qiú 0x827E:ài,yì 0x827F:nǎi,réng,rèng 0x8280:tiáo 0x8281:jiāo 0x8282:jié,jiē 0x8283:péng 0x8284:wán 0x8285:yì 0x8286:chāi,chā 0x8287:mián 0x8288:mǐ 0x8289:gān,gǎn 0x828A:qiān,qiàn 0x828B:yù,yú,xū,yǔ 0x828C:yù 0x828D:sháo,xiào,què,dì 0x828E:qiōng,xiōng 0x828F:dù 0x8290:hù,xià 0x8291:qǐ 0x8292:máng,huāng,huǎng,wáng 0x8293:zì,zǐ,zī 0x8294:huì,hū 0x8295:suī 0x8296:zhì 0x8297:xiāng 0x8298:pí,bì 0x8299:fú 0x829A:tún,chūn 0x829B:wěi 0x829C:wú 0x829D:zhī 0x829E:qì 0x829F:shān,wěi 0x82A0:wén 0x82A1:qiàn 0x82A2:rén 0x82A3:fú,fǒu,fū 0x82A4:kōu 0x82A5:jiè,gài 0x82A6:lú,hù,lǔ 0x82A7:xù,zhù 0x82A8:jī 0x82A9:qín,yín 0x82AA:qí,chí 0x82AB:yán,yuán 0x82AC:fēn 0x82AD:bā,pā 0x82AE:ruì,ruò 0x82AF:xīn,xìn 0x82B0:jì 0x82B1:huā 0x82B2:huā 0x82B3:fāng 0x82B4:wù,hū 0x82B5:jué 0x82B6:gǒu 0x82B7:zhǐ 0x82B8:yún,yùn 0x82B9:qín 0x82BA:ǎo 0x82BB:chú,zōu 0x82BC:mào 0x82BD:yá 0x82BE:fèi,fú 0x82BF:rèng 0x82C0:háng 0x82C1:cōng 0x82C2:yín 0x82C3:yǒu 0x82C4:biàn 0x82C5:yì 0x82C6:qiē 0x82C7:wěi 0x82C8:lì 0x82C9:pǐ 0x82CA:è 0x82CB:xiàn 0x82CC:cháng 0x82CD:cāng 0x82CE:zhù 0x82CF:sū 0x82D0:tí,dì 0x82D1:yuàn,yuān,yù,yùn 0x82D2:rǎn 0x82D3:líng,lián 0x82D4:tái,tāi 0x82D5:sháo,tiáo 0x82D6:dí 0x82D7:miáo 0x82D8:qǐng 0x82D9:lì,jī 0x82DA:yòng 0x82DB:kē,hē 0x82DC:mù 0x82DD:bèi 0x82DE:bāo,páo,biāo 0x82DF:gǒu,gōu 0x82E0:mín 0x82E1:yǐ 0x82E2:yǐ 0x82E3:jù,qǔ 0x82E4:piě,pī 0x82E5:ruò,ré,rè,rě 0x82E6:kǔ,gǔ,hù 0x82E7:níng,zhù 0x82E8:nǐ 0x82E9:bó,pā 0x82EA:bǐng 0x82EB:shān,shàn,tiān,chān 0x82EC:xiú 0x82ED:yǎo 0x82EE:xiān 0x82EF:běn 0x82F0:hóng 0x82F1:yīng,yāng 0x82F2:zhǎ,zhà,zuó 0x82F3:dōng 0x82F4:jū,chá,zhǎ,zū,jiē,bāo,xié 0x82F5:dié 0x82F6:nié,niè 0x82F7:gān 0x82F8:hū 0x82F9:píng,pēng 0x82FA:méi 0x82FB:fú,pú 0x82FC:shēng,ruí 0x82FD:gū,guā 0x82FE:bì,bié,mì 0x82FF:wèi 0x8300:fú,bó,fèi,bèi,bì 0x8301:zhuó,zhú 0x8302:mào 0x8303:fàn 0x8304:jiā,qié 0x8305:máo 0x8306:máo,mǎo 0x8307:bá,pèi,fèi 0x8308:cí,zǐ,cǐ,chái 0x8309:mò 0x830A:zī 0x830B:zhǐ 0x830C:chí 0x830D:jì 0x830E:jīng 0x830F:lóng 0x8310:cōng 0x8311:niǎo 0x8312:yuán 0x8313:xué 0x8314:yíng 0x8315:qióng 0x8316:gé,luò 0x8317:míng 0x8318:lì 0x8319:róng 0x831A:yìn 0x831B:gèn,jiàn 0x831C:qiàn,xī 0x831D:chǎi,zhǐ 0x831E:chén 0x831F:yù,wěi 0x8320:hāo,xiū,kòu 0x8321:zì 0x8322:liè 0x8323:wú 0x8324:jì,duō 0x8325:guī,guì 0x8326:cì 0x8327:jiǎn,chóng 0x8328:cí 0x8329:gòu 0x832A:guāng 0x832B:máng,huǎng 0x832C:chá,chí 0x832D:jiāo,xiào,qiào 0x832E:jiāo,niǎo 0x832F:fú 0x8330:yú 0x8331:zhū 0x8332:zī,cí 0x8333:jiāng 0x8334:huí 0x8335:yīn 0x8336:chá 0x8337:fá,pèi,bó,bá 0x8338:rōng,róng,rǒng 0x8339:rú 0x833A:chōng 0x833B:mǎng,mǔ 0x833C:tóng 0x833D:zhòng 0x833E:qiān 0x833F:zhú 0x8340:xún 0x8341:huán 0x8342:fū 0x8343:quán,chuò 0x8344:gāi 0x8345:dā,dá,tà 0x8346:jīng 0x8347:xìng 0x8348:chuǎn 0x8349:cǎo,zào 0x834A:jīng 0x834B:ér 0x834C:àn 0x834D:qiáo 0x834E:chí 0x834F:rěn 0x8350:jiàn 0x8351:tí,yí 0x8352:huāng,huǎng,kāng,huáng 0x8353:píng,pēng 0x8354:lì 0x8355:jīn 0x8356:lǎo,chā 0x8357:shù 0x8358:zhuāng 0x8359:dá 0x835A:jiá 0x835B:ráo 0x835C:bì 0x835D:cè 0x835E:qiáo 0x835F:huì 0x8360:jì,qí 0x8361:dàng 0x8362:zì 0x8363:róng 0x8364:hūn,xūn 0x8365:xíng,yíng 0x8366:luò 0x8367:yíng 0x8368:xún,qián 0x8369:jìn 0x836A:sūn 0x836B:yīn,yìn 0x836C:mǎi 0x836D:hóng 0x836E:zhòu 0x836F:yào 0x8370:dù 0x8371:wěi,wèi 0x8372:lí 0x8373:dòu 0x8374:fū 0x8375:rěn 0x8376:yín 0x8377:hé,hè,hē 0x8378:bí 0x8379:bù,pú 0x837A:yǔn,yún 0x837B:dí 0x837C:tú,chá,yé,shū 0x837D:suī,wěi 0x837E:suī 0x837F:chéng 0x8380:chén,nóng 0x8381:wú 0x8382:bié 0x8383:xī 0x8384:gěng 0x8385:lì 0x8386:pú,fǔ 0x8387:zhù 0x8388:mò 0x8389:lì,lí,chí 0x838A:zhuāng 0x838B:zuó,jí 0x838C:tuō 0x838D:qiú 0x838E:shā,suō,suī 0x838F:suō 0x8390:chén 0x8391:péng,fēng 0x8392:jǔ 0x8393:méi 0x8394:méng,xí,qǐng 0x8395:xìng 0x8396:jīng,yīng 0x8397:chē 0x8398:shēn,xīn 0x8399:jūn 0x839A:yán 0x839B:tíng,tǐng 0x839C:yóu,diào,dí 0x839D:cuò 0x839E:guǎn,guān,wǎn 0x839F:hàn 0x83A0:yǒu,xiù 0x83A1:cuò 0x83A2:jiá 0x83A3:wáng 0x83A4:sù,yóu 0x83A5:niǔ,ròu 0x83A6:shāo,xiāo 0x83A7:xiàn,wàn 0x83A8:làng,láng,liáng 0x83A9:fú,piǎo 0x83AA:é 0x83AB:mò,mù 0x83AC:wèn,wǎn,miǎn 0x83AD:jié 0x83AE:nán 0x83AF:mù 0x83B0:kǎn 0x83B1:lái 0x83B2:lián 0x83B3:shí,shì 0x83B4:wō 0x83B5:tù 0x83B6:xiān 0x83B7:huò 0x83B8:yóu 0x83B9:yíng 0x83BA:yīng 0x83BB:gòng 0x83BC:chún 0x83BD:mǎng,máng 0x83BE:mǎng 0x83BF:cì 0x83C0:wǎn,yù,yùn 0x83C1:jīng 0x83C2:dì 0x83C3:qú 0x83C4:dōng 0x83C5:jiān,guān 0x83C6:zōu,cuán,chù,cóng 0x83C7:gū 0x83C8:lā 0x83C9:lù,lǜ 0x83CA:jú 0x83CB:wèi 0x83CC:jūn,jùn 0x83CD:niè,rěn 0x83CE:kūn 0x83CF:hé,gē 0x83D0:pú 0x83D1:zāi,zī,zì 0x83D2:gǎo 0x83D3:guǒ 0x83D4:fú 0x83D5:lún 0x83D6:chāng 0x83D7:chóu 0x83D8:sōng 0x83D9:chuí 0x83DA:zhàn 0x83DB:mén 0x83DC:cài 0x83DD:bá 0x83DE:lí 0x83DF:tú,tù 0x83E0:bō 0x83E1:hàn 0x83E2:bào 0x83E3:qìn 0x83E4:juǎn 0x83E5:xī,sī 0x83E6:qín 0x83E7:dǐ 0x83E8:jiē,shà 0x83E9:pú,bèi,bó 0x83EA:dàng 0x83EB:jǐn 0x83EC:qiáo,zhǎo 0x83ED:tái,zhī,chí 0x83EE:gēng 0x83EF:huá,huā,huà,kuā 0x83F0:gū 0x83F1:líng 0x83F2:fēi,fěi,fèi 0x83F3:qín,qīn,jīn 0x83F4:ān,yǎn 0x83F5:wǎng 0x83F6:běng 0x83F7:zhǒu 0x83F8:yān,yū,yù 0x83F9:jū,zū,jù 0x83FA:jiān 0x83FB:lǐn 0x83FC:tǎn 0x83FD:shū,jiāo 0x83FE:tián,tiàn 0x83FF:dào,dǎo 0x8400:hǔ 0x8401:qí,jī 0x8402:hé 0x8403:cuì 0x8404:táo 0x8405:chūn 0x8406:bì,pì,bēi,bá 0x8407:cháng 0x8408:huán 0x8409:fèi,féi,fú 0x840A:lái 0x840B:qī 0x840C:méng,míng 0x840D:píng 0x840E:wēi,wèi,wěi 0x840F:dàn 0x8410:shà 0x8411:huán,zhuī 0x8412:yǎn,juàn 0x8413:yí 0x8414:tiáo 0x8415:qí 0x8416:wǎn 0x8417:cè 0x8418:nài 0x8419:zhěn 0x841A:tuò 0x841B:jiū 0x841C:tiē 0x841D:luó 0x841E:bì 0x841F:yì 0x8420:pān 0x8421:bo 0x8422:pāo 0x8423:dìng 0x8424:yíng 0x8425:yíng 0x8426:yíng 0x8427:xiāo 0x8428:sà 0x8429:qiū,jiāo 0x842A:kē 0x842B:xiàng 0x842C:wàn 0x842D:yǔ,jǔ 0x842E:yú,yǔ,yù 0x842F:fù,bèi 0x8430:liàn 0x8431:xuān 0x8432:xuān 0x8433:nǎn,nán 0x8434:cè 0x8435:wō 0x8436:chǔn 0x8437:xiāo,shāo,shuò 0x8438:yú 0x8439:biǎn,biān,pián 0x843A:mào,mù 0x843B:ān 0x843C:è 0x843D:luò,là,lào,luō 0x843E:yíng 0x843F:kuò,huó 0x8440:kuò 0x8441:jiāng 0x8442:miǎn 0x8443:zuò,zé 0x8444:zuò 0x8445:zū 0x8446:bǎo,bāo 0x8447:róu,rǒu 0x8448:xǐ 0x8449:yè,shè 0x844A:ān 0x844B:qú 0x844C:jiān 0x844D:fú 0x844E:lǜ 0x844F:jīng 0x8450:pén,fén 0x8451:fēng,fèng 0x8452:hóng 0x8453:hóng 0x8454:hóu 0x8455:yàn 0x8456:tū 0x8457:zhù,zhe,chú,zhuó,zhāo,zháo 0x8458:zī 0x8459:xiāng 0x845A:rèn,shèn 0x845B:gé,gě 0x845C:qiā 0x845D:qíng,jìng 0x845E:mǐ 0x845F:huáng 0x8460:shēn,shān 0x8461:pú,bèi 0x8462:gài 0x8463:dǒng,zhǒng 0x8464:zhòu 0x8465:jiàn,qián 0x8466:wěi 0x8467:bó 0x8468:wēi 0x8469:pā 0x846A:jì 0x846B:hú 0x846C:zàng 0x846D:jiā,xiá 0x846E:duàn 0x846F:yào 0x8470:suī,jùn,suǒ 0x8471:cōng,chuāng 0x8472:quán 0x8473:wēi 0x8474:zhēn,qián 0x8475:kuí 0x8476:tíng,dǐng 0x8477:hūn,xūn 0x8478:xǐ 0x8479:shī 0x847A:qì 0x847B:lán 0x847C:zōng 0x847D:yāo,yǎo 0x847E:yuān 0x847F:méi 0x8480:yūn 0x8481:shù 0x8482:dì 0x8483:zhuàn 0x8484:guān 0x8485:rǎn 0x8486:xuē 0x8487:chǎn 0x8488:kǎi 0x8489:kuì 0x848A:huā 0x848B:jiǎng 0x848C:lóu 0x848D:wěi,huā,kuī,é 0x848E:pài 0x848F:you 0x8490:sōu,huì 0x8491:yīn 0x8492:shī 0x8493:chún 0x8494:shí,shì 0x8495:yūn 0x8496:zhēn 0x8497:làng 0x8498:rú,ná 0x8499:méng,měng,mēng 0x849A:lì 0x849B:quē 0x849C:suàn 0x849D:yuán,huán 0x849E:lì 0x849F:jǔ 0x84A0:xī 0x84A1:bàng,páng 0x84A2:chú 0x84A3:xú,shú 0x84A4:tú 0x84A5:liú 0x84A6:huò,wò 0x84A7:diǎn 0x84A8:qiàn 0x84A9:zū,jù,jí 0x84AA:pò 0x84AB:cuó 0x84AC:yuān 0x84AD:chú 0x84AE:yù 0x84AF:kuǎi,kuài 0x84B0:pán 0x84B1:pú 0x84B2:pú,bó 0x84B3:nà 0x84B4:shuò 0x84B5:xí,xì 0x84B6:fén 0x84B7:yún 0x84B8:zhēng 0x84B9:jiān 0x84BA:jí 0x84BB:ruò 0x84BC:cāng,cǎng 0x84BD:ēn 0x84BE:mí 0x84BF:hāo,gǎo 0x84C0:sūn 0x84C1:zhēn,qín 0x84C2:míng,mì 0x84C3:sōu,sǒu 0x84C4:xù 0x84C5:liú 0x84C6:xí 0x84C7:gǔ,gū 0x84C8:láng 0x84C9:róng 0x84CA:wěng 0x84CB:gài,gě 0x84CC:cuò 0x84CD:shī 0x84CE:táng 0x84CF:luǒ 0x84D0:rù 0x84D1:suō,suī 0x84D2:xuān 0x84D3:bèi 0x84D4:yǎo,zhuó 0x84D5:guì 0x84D6:bì 0x84D7:zǒng 0x84D8:gǔn 0x84D9:zuò 0x84DA:tiáo 0x84DB:cè 0x84DC:pèi 0x84DD:lán,la 0x84DE:dàn 0x84DF:jì 0x84E0:lí 0x84E1:shēn 0x84E2:lǎng 0x84E3:yù 0x84E4:líng 0x84E5:yíng 0x84E6:mò 0x84E7:diào,tiáo,dí 0x84E8:tiáo,xiū 0x84E9:mǎo 0x84EA:tōng 0x84EB:chù,zhú 0x84EC:péng,pèng 0x84ED:ān 0x84EE:lián,liǎn 0x84EF:cōng,zǒng,sǒng 0x84F0:xǐ 0x84F1:píng 0x84F2:qiū,ōu,xū,fū 0x84F3:jǐn 0x84F4:chún,tuán 0x84F5:jié 0x84F6:wéi 0x84F7:tuī 0x84F8:cáo 0x84F9:yù 0x84FA:yì 0x84FB:zí,jú 0x84FC:liǎo,lù,lǎo,liǔ 0x84FD:bì 0x84FE:lǔ 0x84FF:xu,sù 0x8500:bù 0x8501:zhāng 0x8502:léi 0x8503:qiáng,jiàng 0x8504:màn 0x8505:yán 0x8506:líng 0x8507:jì,xì 0x8508:biāo,piǎo,biào 0x8509:gǔn 0x850A:hǎn 0x850B:dí 0x850C:sù 0x850D:lù,cū 0x850E:shè 0x850F:shāng 0x8510:dí 0x8511:miè 0x8512:xūn 0x8513:màn,wàn,mán 0x8514:bó,bo 0x8515:dì,dài,chài 0x8516:cuó,cǔ,zhā 0x8517:zhè 0x8518:shēn,sān,sǎn 0x8519:xuàn 0x851A:wèi,yù 0x851B:hú 0x851C:áo 0x851D:mǐ 0x851E:lóu,lǚ,jù,liǔ 0x851F:cù,còu,chuò 0x8520:zhōng 0x8521:cài,sà,cā 0x8522:pó,bò 0x8523:jiǎng,jiāng 0x8524:mì 0x8525:cōng 0x8526:niǎo 0x8527:huì 0x8528:juàn,jùn 0x8529:yín 0x852A:jiàn,jiān,shān 0x852B:niān,yān,yàn 0x852C:shū,shǔ 0x852D:yīn,yìn 0x852E:guó 0x852F:chén 0x8530:hù 0x8531:shā 0x8532:kòu 0x8533:qiàn 0x8534:má 0x8535:zāng,cáng 0x8536:zé 0x8537:qiáng 0x8538:dōu 0x8539:liǎn 0x853A:lìn 0x853B:kòu 0x853C:ǎi 0x853D:bì,biē,piē 0x853E:lí 0x853F:wěi 0x8540:jí 0x8541:qián,tán,xún 0x8542:shèng 0x8543:fān,fán,pí,bō 0x8544:méng 0x8545:ǒu 0x8546:chǎn 0x8547:diǎn 0x8548:xùn,tán 0x8549:jiāo,qiáo,qiāo 0x854A:ruǐ,juǎn 0x854B:ruǐ 0x854C:lěi 0x854D:yú 0x854E:qiáo,jiāo 0x854F:chú 0x8550:huá 0x8551:jiān 0x8552:mǎi 0x8553:yún 0x8554:bāo 0x8555:yóu 0x8556:qú 0x8557:lù 0x8558:ráo,yáo 0x8559:huì 0x855A:è 0x855B:tí 0x855C:fěi 0x855D:jué,zuì 0x855E:zuì,jué,zhuó 0x855F:fà,fèi 0x8560:rú 0x8561:fén,fèi 0x8562:kuì,kuài 0x8563:shùn 0x8564:ruí 0x8565:yǎ 0x8566:xū 0x8567:fù 0x8568:jué 0x8569:dàng,tāng,tàng 0x856A:wú,wǔ 0x856B:dǒng 0x856C:sī 0x856D:xiāo 0x856E:xì 0x856F:lóng 0x8570:wēn,yùn 0x8571:shāo 0x8572:qí 0x8573:jiān 0x8574:yùn 0x8575:sūn 0x8576:líng 0x8577:yù 0x8578:xiá 0x8579:wèng,yōng 0x857A:jí,qiè 0x857B:hóng,hòng 0x857C:sì 0x857D:nóng 0x857E:lěi 0x857F:xuān 0x8580:yùn 0x8581:yù 0x8582:xí,xiào 0x8583:hào 0x8584:báo,bó,bù,bò 0x8585:hāo 0x8586:ài 0x8587:wēi 0x8588:huì 0x8589:huì 0x858A:jì 0x858B:cí,zī 0x858C:xiāng,xiǎng 0x858D:wàn,luàn 0x858E:miè 0x858F:yì 0x8590:léng 0x8591:jiāng 0x8592:càn 0x8593:shēn 0x8594:qiáng,sè 0x8595:lián 0x8596:kē 0x8597:yuán 0x8598:dá 0x8599:tì,zhì 0x859A:tāng 0x859B:xuē 0x859C:bì,bò,bó,bài,pì 0x859D:zhān 0x859E:sūn 0x859F:xiān,liǎn,yán,kàn 0x85A0:fán 0x85A1:dǐng 0x85A2:xiè 0x85A3:gǔ 0x85A4:xiè 0x85A5:shǔ,zhú 0x85A6:jiàn 0x85A7:hāo,kǎo 0x85A8:hōng 0x85A9:sà 0x85AA:xīn 0x85AB:xūn 0x85AC:yào 0x85AD:bài 0x85AE:sǒu 0x85AF:shǔ 0x85B0:xūn 0x85B1:duì 0x85B2:pín 0x85B3:wěi,yuǎn 0x85B4:níng 0x85B5:chóu,zhòu,dào 0x85B6:mái,wō 0x85B7:rú 0x85B8:piáo 0x85B9:tái 0x85BA:jì,cí,qì,qí 0x85BB:zǎo 0x85BC:chén 0x85BD:zhēn 0x85BE:ěr 0x85BF:nǐ 0x85C0:yíng 0x85C1:gǎo 0x85C2:cóng,còng 0x85C3:xiāo,hào,hè 0x85C4:qí 0x85C5:fá 0x85C6:jiǎn 0x85C7:xù,yǔ,yú,yù,xū 0x85C8:kuí 0x85C9:jí,jiè 0x85CA:biǎn 0x85CB:diào,dí,zhuó 0x85CC:mì 0x85CD:lán,la 0x85CE:jìn 0x85CF:cáng,zàng,zāng 0x85D0:miǎo,mò 0x85D1:qióng 0x85D2:qiè 0x85D3:xiǎn 0x85D4:liáo 0x85D5:ǒu 0x85D6:xián,qiān 0x85D7:sù 0x85D8:lǘ 0x85D9:yì 0x85DA:xù 0x85DB:xiě 0x85DC:lí 0x85DD:yì 0x85DE:lǎ 0x85DF:lěi 0x85E0:jiào 0x85E1:dí 0x85E2:zhǐ 0x85E3:bēi 0x85E4:téng 0x85E5:yào,shuò,lüè 0x85E6:mò 0x85E7:huàn 0x85E8:biāo,pāo 0x85E9:fān,fán 0x85EA:sǒu,shǔ,còu 0x85EB:tán 0x85EC:tuī 0x85ED:qióng 0x85EE:qiáo 0x85EF:wèi 0x85F0:liú,liǔ 0x85F1:huì,huí 0x85F2:ōu 0x85F3:gǎo 0x85F4:yùn,wēn 0x85F5:bǎo 0x85F6:lì 0x85F7:shǔ,zhū 0x85F8:chú,zhū,zhā 0x85F9:ǎi 0x85FA:lìn 0x85FB:zǎo 0x85FC:xuān 0x85FD:qìn 0x85FE:lài 0x85FF:huò,hé 0x8600:tuò,zé 0x8601:wù,è 0x8602:ruǐ 0x8603:ruǐ 0x8604:qí,jī,qín 0x8605:héng 0x8606:lú,lǔ 0x8607:sū 0x8608:tuí 0x8609:méng,máng 0x860A:yùn 0x860B:píng,pín 0x860C:yǔ 0x860D:xūn 0x860E:jì 0x860F:jiōng 0x8610:xuān 0x8611:mó 0x8612:qiū 0x8613:sū 0x8614:jiōng 0x8615:péng 0x8616:niè,bò 0x8617:bò,bì 0x8618:ráng,xiāng,nāng 0x8619:yì 0x861A:xiǎn 0x861B:yú 0x861C:jú 0x861D:liǎn 0x861E:liǎn,xiān 0x861F:yǐn 0x8620:qiáng 0x8621:yīng 0x8622:lóng,lǒng,lòng 0x8623:tǒu 0x8624:huā 0x8625:yuè 0x8626:líng 0x8627:qú,jù 0x8628:yáo 0x8629:fán 0x862A:méi 0x862B:hàn,làn 0x862C:kuī,huǐ,guī 0x862D:lán 0x862E:jì 0x862F:dàng 0x8630:màn 0x8631:lèi 0x8632:léi 0x8633:huī 0x8634:fēng,sōng 0x8635:zhī 0x8636:wèi 0x8637:kuí 0x8638:zhàn 0x8639:huái 0x863A:lí 0x863B:jì 0x863C:mí 0x863D:lěi 0x863E:huài 0x863F:luó 0x8640:jī 0x8641:kuí 0x8642:lù 0x8643:jiān 0x8644:sà 0x8645:téng 0x8646:léi 0x8647:quǎn 0x8648:xiāo 0x8649:yì 0x864A:luán 0x864B:mén 0x864C:biē 0x864D:hū 0x864E:hǔ,hù 0x864F:lǔ 0x8650:nüè 0x8651:lǜ,bì 0x8652:sī,xī,tí,zhì 0x8653:xiāo 0x8654:qián 0x8655:chù,chǔ,jù 0x8656:hū,hú,hù 0x8657:xū 0x8658:cuó 0x8659:fú 0x865A:xū 0x865B:xū 0x865C:lǔ 0x865D:hǔ 0x865E:yú 0x865F:hào,háo 0x8660:jiāo,háo 0x8661:jù 0x8662:guó 0x8663:bào 0x8664:yán 0x8665:zhàn 0x8666:zhàn 0x8667:kuī 0x8668:bīn 0x8669:xì,sè 0x866A:shù 0x866B:chóng,huǐ 0x866C:qiú 0x866D:diāo,dāo 0x866E:jǐ,jī 0x866F:qiú 0x8670:dīng,chēng 0x8671:shī 0x8672:xiā 0x8673:jué 0x8674:zhé 0x8675:shé,yě 0x8676:yū 0x8677:hán,gān 0x8678:zǐ 0x8679:hóng,hòng,gòng,jiàng 0x867A:huī,huǐ 0x867B:méng 0x867C:gè 0x867D:suī 0x867E:xiā,há 0x867F:chài 0x8680:shí 0x8681:yǐ 0x8682:mǎ,mā,mà 0x8683:xiǎng 0x8684:fāng,bàng 0x8685:è 0x8686:bā 0x8687:chǐ 0x8688:qiān 0x8689:wén 0x868A:wén 0x868B:ruì 0x868C:bàng,pí,fēng,bèng 0x868D:pí 0x868E:yuè 0x868F:yuè 0x8690:jūn 0x8691:qí 0x8692:tóng 0x8693:yǐn 0x8694:qí,zhǐ 0x8695:cán,tiǎn 0x8696:yuán,wán 0x8697:jué,quē 0x8698:huí,huì,yóu 0x8699:qín,qián 0x869A:qí 0x869B:zhòng 0x869C:yá 0x869D:háo,cì 0x869E:mù 0x869F:wáng 0x86A0:fén 0x86A1:fén 0x86A2:háng 0x86A3:gōng,zhōng 0x86A4:zǎo,zhǎo 0x86A5:fù,fǔ 0x86A6:rán 0x86A7:jiè 0x86A8:fú 0x86A9:chī 0x86AA:dǒu 0x86AB:bào,páo 0x86AC:xiǎn 0x86AD:ní 0x86AE:dài 0x86AF:qiū 0x86B0:yóu,zhú 0x86B1:zhà 0x86B2:píng 0x86B3:chí,chī,dì 0x86B4:yòu,yǒu,niù 0x86B5:hé,kè 0x86B6:hān,hán 0x86B7:jù 0x86B8:lì 0x86B9:fù 0x86BA:rán,tiàn 0x86BB:zhá 0x86BC:gǒu,qú,xù 0x86BD:pí 0x86BE:pí,bǒ 0x86BF:xián 0x86C0:zhù 0x86C1:diāo 0x86C2:bié 0x86C3:bǐng 0x86C4:gū,gǔ 0x86C5:zhān 0x86C6:qū,jū 0x86C7:shé,yí,tuó,chí 0x86C8:tiě 0x86C9:líng 0x86CA:gǔ 0x86CB:dàn 0x86CC:gǔ 0x86CD:yíng 0x86CE:lì 0x86CF:chēng 0x86D0:qū 0x86D1:móu,máo 0x86D2:gé,luò 0x86D3:cì 0x86D4:huí 0x86D5:huí,huǐ 0x86D6:máng,bàng 0x86D7:fù 0x86D8:yáng,yǎng 0x86D9:wā,jué 0x86DA:liè 0x86DB:zhū 0x86DC:yī 0x86DD:xián 0x86DE:kuò,shé 0x86DF:jiāo 0x86E0:lì 0x86E1:yì,xǔ 0x86E2:píng 0x86E3:qī,jié,qiè 0x86E4:há,gé,hā,é 0x86E5:shé 0x86E6:yí 0x86E7:wǎng 0x86E8:mò 0x86E9:qióng,gǒng 0x86EA:qiè,ní 0x86EB:guǐ 0x86EC:qióng 0x86ED:zhì 0x86EE:mán 0x86EF:lǎo 0x86F0:zhé 0x86F1:jiá 0x86F2:náo 0x86F3:sī 0x86F4:qí 0x86F5:xīng 0x86F6:jiè 0x86F7:qiú 0x86F8:shāo,xiāo 0x86F9:yǒng 0x86FA:jiá 0x86FB:tuì 0x86FC:chē 0x86FD:bèi 0x86FE:é,yǐ 0x86FF:hàn 0x8700:shǔ 0x8701:xuán 0x8702:fēng 0x8703:shèn 0x8704:shèn,zhèn 0x8705:fǔ,pú 0x8706:xiàn,xiǎn 0x8707:zhē,zhé 0x8708:wú 0x8709:fú 0x870A:lí 0x870B:láng,liáng 0x870C:bì 0x870D:chú,yú 0x870E:yuān,xuān 0x870F:yǒu 0x8710:jié 0x8711:dàn 0x8712:yán,yàn,dàn 0x8713:tíng,diàn 0x8714:diàn 0x8715:tuì,yuè 0x8716:huí 0x8717:wō 0x8718:zhī 0x8719:sōng 0x871A:fēi,fěi,pèi,bèi 0x871B:jū 0x871C:mì 0x871D:qí 0x871E:qí 0x871F:yù 0x8720:jùn 0x8721:là,qù,zhà,jí 0x8722:měng,mèng 0x8723:qiāng 0x8724:sī,xī 0x8725:xī 0x8726:lún,lǔn 0x8727:lì 0x8728:dié 0x8729:tiáo,diào 0x872A:táo 0x872B:kūn 0x872C:hán 0x872D:hàn 0x872E:yù,guō 0x872F:bàng 0x8730:féi,fèi 0x8731:pí,miáo 0x8732:wēi,wěi 0x8733:dūn,tūn 0x8734:yì,xí 0x8735:yuān,yūn 0x8736:suò 0x8737:quán,juǎn 0x8738:qiǎn 0x8739:ruì,wèi 0x873A:ní 0x873B:qīng,jīng 0x873C:wèi,wěi,tóng 0x873D:liǎng 0x873E:guǒ,luǒ 0x873F:wān,wǎn 0x8740:dōng 0x8741:è 0x8742:bǎn 0x8743:dì,zhuō 0x8744:wǎng 0x8745:cán 0x8746:yǎng 0x8747:yíng 0x8748:guō 0x8749:chán 0x874A:dìng 0x874B:là 0x874C:kē 0x874D:jié,jí 0x874E:xiē,hé 0x874F:tíng 0x8750:mào 0x8751:xū,xiè 0x8752:mián 0x8753:yú 0x8754:jiē 0x8755:shí,lì,lóng 0x8756:xuān 0x8757:huáng 0x8758:yǎn 0x8759:biān,pián 0x875A:róu,náo 0x875B:wēi 0x875C:fù 0x875D:yuán,yuān 0x875E:mèi 0x875F:wèi 0x8760:fú 0x8761:rú,ruǎn 0x8762:xié 0x8763:yóu 0x8764:qiú,jiū,yóu 0x8765:máo,wú,wù 0x8766:xiā,há,jiǎ 0x8767:yīng 0x8768:shī 0x8769:chóng,zhōng 0x876A:tāng 0x876B:zhū 0x876C:zōng 0x876D:tí,chí 0x876E:fù 0x876F:yuán 0x8770:kuí 0x8771:méng 0x8772:là 0x8773:dú,dài 0x8774:hú 0x8775:qiū 0x8776:dié,tiē 0x8777:lì,xí 0x8778:wō,luó,guǒ 0x8779:yūn,ǎo 0x877A:qǔ,yǔ 0x877B:nǎn 0x877C:lóu 0x877D:chūn 0x877E:róng 0x877F:yíng 0x8780:jiāng 0x8781:ban 0x8782:láng 0x8783:páng,bǎng 0x8784:sī 0x8785:xī,cì 0x8786:cì 0x8787:xī,qī 0x8788:yuán 0x8789:wēng 0x878A:lián 0x878B:sōu 0x878C:bān,pán,huàn 0x878D:róng 0x878E:róng 0x878F:jí 0x8790:wū 0x8791:xiù 0x8792:hàn 0x8793:qín 0x8794:yí,sī 0x8795:bī,pī 0x8796:huá 0x8797:táng 0x8798:yǐ 0x8799:dù 0x879A:nài,nái,něng 0x879B:hé,xiá 0x879C:hú 0x879D:guī,huǐ 0x879E:mǎ,mā,mà 0x879F:míng 0x87A0:yì 0x87A1:wén 0x87A2:yíng 0x87A3:tè,téng 0x87A4:zhōng 0x87A5:cāng 0x87A6:sāo 0x87A7:qí 0x87A8:mǎn 0x87A9:tiao 0x87AA:shāng 0x87AB:shì 0x87AC:cáo 0x87AD:chī 0x87AE:dì,dài 0x87AF:áo 0x87B0:lù 0x87B1:wèi 0x87B2:zhì,dié 0x87B3:táng 0x87B4:chén 0x87B5:piāo 0x87B6:qú,jù 0x87B7:pí 0x87B8:yú 0x87B9:jiàn,chán 0x87BA:luó 0x87BB:lóu 0x87BC:qǐn 0x87BD:zhōng 0x87BE:yǐn,yín 0x87BF:jiāng 0x87C0:shuài 0x87C1:wén 0x87C2:xiāo 0x87C3:wàn 0x87C4:zhé 0x87C5:zhè 0x87C6:má,mò 0x87C7:má 0x87C8:guō,yù 0x87C9:liú,liào 0x87CA:máo,méng 0x87CB:xī 0x87CC:cōng 0x87CD:lí 0x87CE:mǎn 0x87CF:xiāo 0x87D0:chang 0x87D1:zhāng 0x87D2:mǎng,měng 0x87D3:xiàng 0x87D4:mò 0x87D5:zuī 0x87D6:sī 0x87D7:qiū 0x87D8:tè 0x87D9:zhí 0x87DA:péng 0x87DB:péng 0x87DC:jiǎo,qiáo 0x87DD:qú 0x87DE:biē,bié 0x87DF:liáo 0x87E0:pán,fán 0x87E1:guǐ 0x87E2:xǐ 0x87E3:jǐ,qí 0x87E4:zhuān 0x87E5:huáng 0x87E6:féi,bēn 0x87E7:láo,liáo 0x87E8:jué 0x87E9:jué 0x87EA:huì 0x87EB:yín,xún 0x87EC:chán,tí,shàn 0x87ED:jiāo 0x87EE:shàn 0x87EF:náo,rào 0x87F0:xiāo 0x87F1:wú,móu 0x87F2:chóng,zhòng,tóng 0x87F3:xún 0x87F4:sī 0x87F5:chú 0x87F6:chēng 0x87F7:dāng 0x87F8:lǐ 0x87F9:xiè 0x87FA:shàn,dàn,chán,tuó 0x87FB:yǐ,jǐ 0x87FC:jǐng 0x87FD:dá 0x87FE:chán 0x87FF:qì,jì 0x8800:cī,jí 0x8801:xiǎng 0x8802:shè 0x8803:luǒ,luó,guǒ 0x8804:qín 0x8805:yíng 0x8806:chài 0x8807:lì 0x8808:zéi 0x8809:xuān 0x880A:lián 0x880B:zhú 0x880C:zé 0x880D:xiē 0x880E:mǎng 0x880F:xiè 0x8810:qí 0x8811:róng 0x8812:jiǎn 0x8813:měng 0x8814:háo 0x8815:rú 0x8816:huò,yuè 0x8817:zhuó 0x8818:jié 0x8819:pín 0x881A:hē 0x881B:miè 0x881C:fán 0x881D:lěi 0x881E:jié 0x881F:là 0x8820:mǐn,mián 0x8821:lí,lǐ,luǒ,luó,lì 0x8822:chǔn 0x8823:lì 0x8824:qiū 0x8825:niè 0x8826:lú 0x8827:dù 0x8828:xiāo 0x8829:zhū,chú 0x882A:lóng 0x882B:lí 0x882C:lóng 0x882D:fēng,páng 0x882E:yē 0x882F:pí 0x8830:náng,shàng,rǎng 0x8831:gǔ,yě 0x8832:juān 0x8833:yīng 0x8834:shǔ 0x8835:xī 0x8836:cán 0x8837:qú 0x8838:quán,huàn 0x8839:dù 0x883A:cán 0x883B:mán 0x883C:qú,jué 0x883D:jié 0x883E:zhú,shú 0x883F:zhuō 0x8840:xuè,xiě 0x8841:huāng 0x8842:nǜ 0x8843:pēi,fǒu 0x8844:nǜ 0x8845:xìn 0x8846:zhòng,zhōng 0x8847:mài 0x8848:èr 0x8849:kā 0x884A:miè 0x884B:xì 0x884C:xíng,háng,xìng,hàng,héng 0x884D:yǎn,yán 0x884E:kàn,kǎn 0x884F:yuàn 0x8850:qú 0x8851:líng 0x8852:xuàn 0x8853:shù 0x8854:xián 0x8855:tòng,tóng,dòng 0x8856:xiàng,lòng 0x8857:jiē 0x8858:xián,yù 0x8859:yá,yú,yù 0x885A:hú 0x885B:wèi 0x885C:dào 0x885D:chōng,chǒng,chòng 0x885E:wèi 0x885F:dào 0x8860:zhūn 0x8861:héng 0x8862:qú 0x8863:yī,yì 0x8864:yī 0x8865:bǔ 0x8866:gǎn 0x8867:yú 0x8868:biǎo 0x8869:chǎ,chà 0x886A:yí 0x886B:shān 0x886C:chèn 0x886D:fū 0x886E:gǔn 0x886F:fēn,pén 0x8870:shuāi,suō,cuī 0x8871:jié 0x8872:nà 0x8873:zhōng 0x8874:dǎn 0x8875:yì 0x8876:zhòng 0x8877:zhōng,zhòng 0x8878:jiè 0x8879:zhǐ,tǐ,zhī,qí 0x887A:xié 0x887B:rán 0x887C:zhī 0x887D:rèn 0x887E:qīn 0x887F:jīn,qìn 0x8880:jūn 0x8881:yuán 0x8882:mèi,yì 0x8883:chài 0x8884:ǎo 0x8885:niǎo 0x8886:huī 0x8887:rán 0x8888:jiā 0x8889:tuó,tuǒ 0x888A:lǐng,líng 0x888B:dài 0x888C:bào,páo,pào 0x888D:páo,bào 0x888E:yào 0x888F:zuò 0x8890:bì 0x8891:shào 0x8892:tǎn,zhàn 0x8893:jù,jiě 0x8894:hè,kè,kuǎ 0x8895:xué 0x8896:xiù 0x8897:zhěn 0x8898:yí,yì,tuó 0x8899:pà 0x889A:bō,fú 0x889B:dī 0x889C:wà,mò 0x889D:fù 0x889E:gǔn 0x889F:zhì 0x88A0:zhì 0x88A1:rán 0x88A2:pàn,fán 0x88A3:yì 0x88A4:mào,móu 0x88A5:tuō 0x88A6:nà,jué 0x88A7:gōu,gòu 0x88A8:xuàn 0x88A9:zhé,chān 0x88AA:qū 0x88AB:bèi,bì,pī,pì 0x88AC:yù 0x88AD:xí 0x88AE:mí 0x88AF:bó 0x88B0:bō 0x88B1:fú 0x88B2:chǐ,nuǒ 0x88B3:chǐ,qǐ,duǒ,nuǒ 0x88B4:kù 0x88B5:rèn 0x88B6:jiàng 0x88B7:jiá,jiā,jié,qiā 0x88B8:jiàn,zùn 0x88B9:bó,mò 0x88BA:jié 0x88BB:ér 0x88BC:gē,luò 0x88BD:rú 0x88BE:zhū 0x88BF:guī,guà 0x88C0:yīn 0x88C1:cái 0x88C2:liè,liě 0x88C3:kǎ 0x88C4:xing 0x88C5:zhuāng 0x88C6:dāng 0x88C7:xū 0x88C8:kūn 0x88C9:kèn 0x88CA:niǎo 0x88CB:shù 0x88CC:jiá,jiā,xié 0x88CD:kǔn 0x88CE:chéng,chěng 0x88CF:lǐ 0x88D0:juān 0x88D1:shēn 0x88D2:póu,bāo 0x88D3:gé,jiē 0x88D4:yì 0x88D5:yù 0x88D6:zhěn 0x88D7:liú 0x88D8:qiú 0x88D9:qún 0x88DA:jì 0x88DB:yì 0x88DC:bǔ 0x88DD:zhuāng 0x88DE:shuì 0x88DF:shā 0x88E0:qún 0x88E1:lǐ 0x88E2:lián,shāo 0x88E3:liǎn 0x88E4:kù 0x88E5:jiǎn 0x88E6:fóu 0x88E7:chān,chàn,tǎn 0x88E8:bì,pí 0x88E9:kūn 0x88EA:táo 0x88EB:yuàn 0x88EC:líng 0x88ED:chǐ 0x88EE:chāng 0x88EF:chóu,dāo 0x88F0:duō 0x88F1:biǎo 0x88F2:liǎng 0x88F3:shang,cháng 0x88F4:péi,féi 0x88F5:péi 0x88F6:fēi 0x88F7:yuān,gǔn 0x88F8:luǒ 0x88F9:guǒ 0x88FA:yǎn,ān,yàn 0x88FB:dú 0x88FC:tì,xī 0x88FD:zhì 0x88FE:jū,jù 0x88FF:yǐ,qǐ 0x8900:qí 0x8901:guǒ 0x8902:guà 0x8903:kèn 0x8904:qī 0x8905:tì 0x8906:tí,shì 0x8907:fù,fú 0x8908:chóng,chōng,zhòng 0x8909:xiè 0x890A:biǎn,pián 0x890B:dié 0x890C:kūn 0x890D:duān,tuān 0x890E:xiù,yòu 0x890F:xiù 0x8910:hè 0x8911:yuàn,yuán 0x8912:bāo 0x8913:bǎo 0x8914:fù 0x8915:yú,tóu 0x8916:tuàn 0x8917:yǎn 0x8918:huī,yī 0x8919:bèi 0x891A:chǔ,zhě,zhǔ 0x891B:lǚ 0x891C:páo 0x891D:dān 0x891E:yǔn,wēn 0x891F:tā 0x8920:gōu 0x8921:dā 0x8922:huái 0x8923:róng 0x8924:yuàn 0x8925:rù,nù 0x8926:nài 0x8927:jiǒng 0x8928:suǒ,chá 0x8929:bān,pán 0x892A:tuì,tùn 0x892B:chǐ 0x892C:sǎng 0x892D:niǎo 0x892E:yīng,yìng 0x892F:jiè 0x8930:qiān 0x8931:huái 0x8932:kù 0x8933:lián 0x8934:lán 0x8935:lí 0x8936:zhě,dié,xí 0x8937:shī 0x8938:lǚ 0x8939:yì,niè 0x893A:diē 0x893B:xiè 0x893C:xiān 0x893D:wèi 0x893E:biǎo 0x893F:cáo 0x8940:jī,jì 0x8941:qiǎng 0x8942:sēn,shān 0x8943:bāo,póu 0x8944:xiāng 0x8945:bì 0x8946:fú,pú 0x8947:jiǎn 0x8948:zhuàn,juàn 0x8949:jiǎn 0x894A:cuì,cuō 0x894B:jí 0x894C:dān 0x894D:zá 0x894E:fán,bò 0x894F:bó,fèi 0x8950:xiàng 0x8951:xín 0x8952:bié 0x8953:ráo 0x8954:mǎn 0x8955:lán 0x8956:ǎo 0x8957:zé,duó,yì 0x8958:guì,huì 0x8959:cào 0x895A:suì 0x895B:nóng 0x895C:chān,chàn,dān 0x895D:liǎn,chān 0x895E:bì 0x895F:jīn 0x8960:dāng 0x8961:shǔ,dú 0x8962:tǎn,zhàn,chán,zhān 0x8963:bì 0x8964:lán 0x8965:fú 0x8966:rú 0x8967:zhǐ 0x8968:duì 0x8969:shǔ 0x896A:wà 0x896B:shì 0x896C:bǎi,bēi 0x896D:xié 0x896E:bó 0x896F:chèn 0x8970:lài 0x8971:lóng,lòng 0x8972:xí 0x8973:xiān,shān 0x8974:lán 0x8975:zhě,zhé 0x8976:dài 0x8977:jǔ 0x8978:zàn,cuán 0x8979:shī 0x897A:jiǎn 0x897B:pàn 0x897C:yì 0x897D:lán 0x897E:yà 0x897F:xī 0x8980:xī 0x8981:yào,yāo,yǎo 0x8982:fěng,bǎn 0x8983:tán,yǎn,qín 0x8984:fù 0x8985:fiào 0x8986:fù 0x8987:bà 0x8988:hé 0x8989:jī 0x898A:jī 0x898B:jiàn,xiàn 0x898C:guān 0x898D:biàn 0x898E:yàn 0x898F:guī,guì,xù 0x8990:jué 0x8991:piǎn 0x8992:mào 0x8993:mì 0x8994:mì 0x8995:miè,piē 0x8996:shì 0x8997:sì 0x8998:chān,dān,jī 0x8999:luó 0x899A:jué 0x899B:mì 0x899C:tiào 0x899D:lián 0x899E:yào 0x899F:zhì 0x89A0:jūn 0x89A1:xí 0x89A2:shǎn 0x89A3:wēi 0x89A4:xì 0x89A5:tiǎn 0x89A6:yú 0x89A7:lǎn 0x89A8:è 0x89A9:dǔ 0x89AA:qīn,qìng 0x89AB:pǎng 0x89AC:jì 0x89AD:míng 0x89AE:yíng 0x89AF:gòu 0x89B0:qū,qù 0x89B1:zhàn,zhān 0x89B2:jìn 0x89B3:guān 0x89B4:dēng 0x89B5:jiàn,biǎn 0x89B6:luó,luǎn 0x89B7:qù 0x89B8:jiān 0x89B9:wéi 0x89BA:jué,jiào 0x89BB:qū,qù 0x89BC:luó 0x89BD:lǎn,làn 0x89BE:shěn 0x89BF:dí,jí 0x89C0:guān,guàn 0x89C1:jiàn,xiàn 0x89C2:guān,guàn 0x89C3:yàn 0x89C4:guī 0x89C5:mì 0x89C6:shì 0x89C7:chān 0x89C8:lǎn 0x89C9:jué,jiào 0x89CA:jì 0x89CB:xí 0x89CC:dí 0x89CD:tiǎn 0x89CE:yú 0x89CF:gòu 0x89D0:jìn 0x89D1:qù,qū 0x89D2:jiǎo,jué,lù,gǔ 0x89D3:qiú 0x89D4:jīn 0x89D5:cū,chù,chéng 0x89D6:jué,kuì,guì 0x89D7:zhì 0x89D8:chào 0x89D9:jí 0x89DA:gū 0x89DB:dàn 0x89DC:zī,zuǐ 0x89DD:dǐ,zhǐ 0x89DE:shāng 0x89DF:huà,xiè 0x89E0:quán 0x89E1:gé 0x89E2:shì 0x89E3:jiě,jiè,xiè 0x89E4:guǐ 0x89E5:gōng 0x89E6:chù 0x89E7:jiě,jiè 0x89E8:hùn 0x89E9:qiú 0x89EA:xīng 0x89EB:sù 0x89EC:ní 0x89ED:jī,qǐ,qí 0x89EE:lù 0x89EF:zhì 0x89F0:zhā,dǎ,zhǎ 0x89F1:bì 0x89F2:xīng 0x89F3:hú,què,jué 0x89F4:shāng 0x89F5:gōng 0x89F6:zhì 0x89F7:xué,hù 0x89F8:chù 0x89F9:xī 0x89FA:yí 0x89FB:lì,lù 0x89FC:jué 0x89FD:xī 0x89FE:yàn 0x89FF:xī,wéi 0x8A00:yán,yàn,yín 0x8A01:yán 0x8A02:dìng 0x8A03:fù 0x8A04:qiú,kāo 0x8A05:qiú 0x8A06:jiào 0x8A07:hōng,jùn,hēng 0x8A08:jì 0x8A09:fàn 0x8A0A:xùn 0x8A0B:diào 0x8A0C:hòng 0x8A0D:chài,chā,chà 0x8A0E:tǎo 0x8A0F:xū,xǔ 0x8A10:jié,jì 0x8A11:yí,dàn,shī,tuó,tuǒ 0x8A12:rèn 0x8A13:xùn 0x8A14:yín 0x8A15:shàn 0x8A16:qì 0x8A17:tuō 0x8A18:jì 0x8A19:xùn 0x8A1A:yín 0x8A1B:é 0x8A1C:fēn,bīn 0x8A1D:yà 0x8A1E:yāo 0x8A1F:sòng 0x8A20:shěn 0x8A21:yín 0x8A22:xīn,xī,yín 0x8A23:jué 0x8A24:xiáo,ná 0x8A25:nè 0x8A26:chén 0x8A27:yóu 0x8A28:zhǐ 0x8A29:xiōng 0x8A2A:fǎng 0x8A2B:xìn 0x8A2C:chāo,miǎo,chǎo 0x8A2D:shè 0x8A2E:yán 0x8A2F:sǎ,sà 0x8A30:zhùn,zhūn 0x8A31:xǔ,hǔ 0x8A32:yì 0x8A33:yì 0x8A34:sù 0x8A35:chī,chì 0x8A36:hē 0x8A37:shēn 0x8A38:hé 0x8A39:xù 0x8A3A:zhěn 0x8A3B:zhù 0x8A3C:zhèng 0x8A3D:gòu 0x8A3E:zī,zǐ 0x8A3F:zǐ 0x8A40:zhān,chè,diān,zhàn,tiē 0x8A41:gǔ 0x8A42:fù 0x8A43:jiǎn 0x8A44:dié 0x8A45:líng 0x8A46:dǐ,tì 0x8A47:yàng 0x8A48:lì 0x8A49:náo,ná,nù 0x8A4A:pàn 0x8A4B:zhòu 0x8A4C:gàn 0x8A4D:yì 0x8A4E:jù 0x8A4F:yào 0x8A50:zhà 0x8A51:yí,tuó,duò,yī,xī 0x8A52:yí,dài,tái 0x8A53:qǔ 0x8A54:zhào,zhāo 0x8A55:píng 0x8A56:bì 0x8A57:xiòng 0x8A58:qū,chù 0x8A59:bá,bó 0x8A5A:dá 0x8A5B:zǔ 0x8A5C:tāo 0x8A5D:zhǔ 0x8A5E:cí 0x8A5F:zhé 0x8A60:yǒng 0x8A61:xǔ 0x8A62:xún 0x8A63:yì 0x8A64:huǎng 0x8A65:hé,gé 0x8A66:shì 0x8A67:chá,qiè 0x8A68:xiào 0x8A69:shī 0x8A6A:hěn 0x8A6B:chà,dù 0x8A6C:gòu,hòu 0x8A6D:guǐ 0x8A6E:quán 0x8A6F:huì 0x8A70:jié 0x8A71:huà 0x8A72:gāi 0x8A73:xiáng,yáng 0x8A74:wēi 0x8A75:shēn 0x8A76:zhòu,chóu 0x8A77:tóng,dòng 0x8A78:mí 0x8A79:zhān,dàn 0x8A7A:mìng 0x8A7B:è,lüè,luò 0x8A7C:huī 0x8A7D:yán 0x8A7E:xiōng 0x8A7F:guà 0x8A80:èr,chǐ 0x8A81:bìng 0x8A82:tiǎo,diào 0x8A83:yí,chǐ,chì,duò 0x8A84:lěi 0x8A85:zhū 0x8A86:kuāng 0x8A87:kuā,qù 0x8A88:wū 0x8A89:yù 0x8A8A:téng 0x8A8B:jì 0x8A8C:zhì 0x8A8D:rèn 0x8A8E:cù 0x8A8F:lǎng,làng 0x8A90:é,ě 0x8A91:kuáng 0x8A92:éi,xī,yì,ê̄,ế,ê̌,ěi,ề,èi,ēi 0x8A93:shì 0x8A94:tǐng 0x8A95:dàn 0x8A96:bèi 0x8A97:chán 0x8A98:yòu 0x8A99:kēng 0x8A9A:qiào 0x8A9B:qīn 0x8A9C:shuà 0x8A9D:ān 0x8A9E:yǔ,yù 0x8A9F:xiào 0x8AA0:chéng 0x8AA1:jiè 0x8AA2:xiàn 0x8AA3:wū 0x8AA4:wù 0x8AA5:gào 0x8AA6:sòng 0x8AA7:bū 0x8AA8:huì 0x8AA9:jìng 0x8AAA:shuō 0x8AAB:zhèn 0x8AAC:shuō,shuì,yuè,tuō 0x8AAD:dú 0x8AAE:huā 0x8AAF:chàng 0x8AB0:shuí,shéi 0x8AB1:jié 0x8AB2:kè 0x8AB3:qū,juè 0x8AB4:cóng 0x8AB5:xiáo 0x8AB6:suì 0x8AB7:wǎng 0x8AB8:xián 0x8AB9:fěi 0x8ABA:chī,lài 0x8ABB:tà 0x8ABC:yì 0x8ABD:nì,ná 0x8ABE:yín 0x8ABF:diào,tiáo,zhōu 0x8AC0:pǐ,bēi 0x8AC1:zhuó 0x8AC2:chǎn 0x8AC3:chēn 0x8AC4:zhūn 0x8AC5:jì,jī 0x8AC6:qī 0x8AC7:tán 0x8AC8:zhuì 0x8AC9:wěi 0x8ACA:jū 0x8ACB:qǐng,qìng,qíng 0x8ACC:dǒng 0x8ACD:zhèng,zhēng 0x8ACE:zé,cuò,zuò,zhǎ,jiè 0x8ACF:zōu,zhōu 0x8AD0:qiān 0x8AD1:zhuó 0x8AD2:liàng,liáng 0x8AD3:jiàn 0x8AD4:chù,jí 0x8AD5:háo,xià,huò 0x8AD6:lùn,lún 0x8AD7:shěn,niè 0x8AD8:biǎo 0x8AD9:huà 0x8ADA:pián 0x8ADB:yú 0x8ADC:dié,xiè 0x8ADD:xū 0x8ADE:piǎn,pián 0x8ADF:shì,dì 0x8AE0:xuān 0x8AE1:shì 0x8AE2:hùn 0x8AE3:huà,guā 0x8AE4:è 0x8AE5:zhòng 0x8AE6:dì,tí 0x8AE7:xié 0x8AE8:fú 0x8AE9:pǔ 0x8AEA:tíng 0x8AEB:jiàn,làn 0x8AEC:qǐ 0x8AED:yù,tǒu 0x8AEE:zī 0x8AEF:zhuān 0x8AF0:xǐ,shāi,āi 0x8AF1:huì 0x8AF2:yīn 0x8AF3:ān,tǒu 0x8AF4:xián,gān 0x8AF5:nán,nàn 0x8AF6:chén 0x8AF7:fěng,fèng 0x8AF8:zhū,chú 0x8AF9:yáng 0x8AFA:yàn 0x8AFB:huáng 0x8AFC:xuān 0x8AFD:gé 0x8AFE:nuò 0x8AFF:qī,xǔ 0x8B00:móu 0x8B01:yè,ǎi 0x8B02:wèi 0x8B03:xīng 0x8B04:téng 0x8B05:zhōu,chōu,chǎo 0x8B06:shàn 0x8B07:jiǎn 0x8B08:pó,páo 0x8B09:kuì,duǐ,tuí,guǐ 0x8B0A:huǎng 0x8B0B:huò 0x8B0C:gē 0x8B0D:yíng,yīng,hōng 0x8B0E:mí 0x8B0F:xiǎo,sǒu,sòu 0x8B10:mì 0x8B11:xǐ,xià,xí 0x8B12:qiāng 0x8B13:chēn,zhèn 0x8B14:xuè 0x8B15:tí,sī 0x8B16:sù 0x8B17:bàng 0x8B18:chí 0x8B19:qiān,zhàn 0x8B1A:shì,yì,xì 0x8B1B:jiǎng 0x8B1C:yuán,quán 0x8B1D:xiè 0x8B1E:hè,xiāo 0x8B1F:tāo 0x8B20:yáo 0x8B21:yáo 0x8B22:lū 0x8B23:yú,xū 0x8B24:biāo,piāo 0x8B25:còng 0x8B26:qìng,qǐng 0x8B27:lí 0x8B28:mó 0x8B29:mó 0x8B2A:shāng 0x8B2B:zhé,zé 0x8B2C:miù 0x8B2D:jiǎn 0x8B2E:zé 0x8B2F:jiē,zhā,zhǎ,zǔ 0x8B30:lián 0x8B31:lóu,lǚ 0x8B32:càn,zào,sān,chěn 0x8B33:ōu,xú 0x8B34:gùn 0x8B35:xí,chè 0x8B36:zhuó,shù,zhē 0x8B37:áo,ào 0x8B38:áo 0x8B39:jǐn 0x8B3A:zhé 0x8B3B:yí,chí 0x8B3C:hū,xiāo 0x8B3D:jiàng 0x8B3E:mán,màn 0x8B3F:cháo 0x8B40:hàn,xiàn 0x8B41:huá,wà 0x8B42:chǎn,dàn 0x8B43:xū 0x8B44:zēng 0x8B45:sè 0x8B46:xī 0x8B47:zhā 0x8B48:duì 0x8B49:zhèng 0x8B4A:náo,xiāo 0x8B4B:lán 0x8B4C:é,wá,guǐ 0x8B4D:yīng,yìng 0x8B4E:jué 0x8B4F:jī 0x8B50:zǔn 0x8B51:jiǎo,qiào 0x8B52:bò 0x8B53:huì 0x8B54:zhuàn,quán 0x8B55:wú,mó 0x8B56:zèn,jiàn 0x8B57:zhá 0x8B58:shí,shì,zhì 0x8B59:qiào,qiáo 0x8B5A:tán 0x8B5B:zèn 0x8B5C:pǔ 0x8B5D:shéng 0x8B5E:xuān 0x8B5F:zào 0x8B60:tán 0x8B61:dǎng 0x8B62:suì 0x8B63:xiǎn 0x8B64:jī 0x8B65:jiào 0x8B66:jǐng 0x8B67:zhàn,lián 0x8B68:náng,nóu 0x8B69:yī 0x8B6A:ǎi 0x8B6B:zhān 0x8B6C:pì 0x8B6D:huǐ 0x8B6E:huà,xiè,huì 0x8B6F:yì 0x8B70:yì 0x8B71:shàn 0x8B72:ràng 0x8B73:nòu 0x8B74:qiǎn 0x8B75:duì 0x8B76:tà 0x8B77:hù 0x8B78:zhōu,chóu 0x8B79:háo 0x8B7A:ài,yǐ,nǐ,yì,yí 0x8B7B:yīng 0x8B7C:jiàn 0x8B7D:yù 0x8B7E:jiǎn 0x8B7F:huì 0x8B80:dú,dòu 0x8B81:zhé 0x8B82:xuàn 0x8B83:zàn 0x8B84:lěi 0x8B85:shěn 0x8B86:wèi 0x8B87:chǎn 0x8B88:lì 0x8B89:yí,tuī 0x8B8A:biàn 0x8B8B:zhé 0x8B8C:yàn 0x8B8D:è 0x8B8E:chóu 0x8B8F:wèi 0x8B90:chóu 0x8B91:yào 0x8B92:chán 0x8B93:ràng 0x8B94:yǐn 0x8B95:lán 0x8B96:chèn,chàn 0x8B97:xié 0x8B98:niè 0x8B99:huān,huàn 0x8B9A:zàn 0x8B9B:yì 0x8B9C:dǎng,dàng 0x8B9D:zhán,zhān 0x8B9E:yàn 0x8B9F:dú 0x8BA0:yán 0x8BA1:jì 0x8BA2:dìng 0x8BA3:fù 0x8BA4:rèn 0x8BA5:jī 0x8BA6:jié 0x8BA7:hòng 0x8BA8:tǎo 0x8BA9:ràng 0x8BAA:shàn 0x8BAB:qì 0x8BAC:tuō 0x8BAD:xùn 0x8BAE:yì 0x8BAF:xùn 0x8BB0:jì 0x8BB1:rèn 0x8BB2:jiǎng 0x8BB3:huì 0x8BB4:ōu 0x8BB5:jù 0x8BB6:yà 0x8BB7:nè 0x8BB8:xǔ,hǔ 0x8BB9:é 0x8BBA:lùn,lún 0x8BBB:xiōng 0x8BBC:sòng 0x8BBD:fěng,fèng 0x8BBE:shè 0x8BBF:fǎng 0x8BC0:jué 0x8BC1:zhèng 0x8BC2:gǔ 0x8BC3:hē 0x8BC4:píng 0x8BC5:zǔ 0x8BC6:shí,shì,zhì 0x8BC7:xiòng 0x8BC8:zhà 0x8BC9:sù 0x8BCA:zhěn 0x8BCB:dǐ 0x8BCC:zhōu 0x8BCD:cí 0x8BCE:qū 0x8BCF:zhào 0x8BD0:bì 0x8BD1:yì 0x8BD2:yí 0x8BD3:kuāng 0x8BD4:lěi 0x8BD5:shì 0x8BD6:guà 0x8BD7:shī 0x8BD8:jí,jié 0x8BD9:huī 0x8BDA:chéng 0x8BDB:zhū 0x8BDC:shēn 0x8BDD:huà 0x8BDE:dàn 0x8BDF:gòu 0x8BE0:quán 0x8BE1:guǐ 0x8BE2:xún 0x8BE3:yì 0x8BE4:zhēng 0x8BE5:gāi 0x8BE6:xiáng 0x8BE7:chà 0x8BE8:hùn 0x8BE9:xǔ 0x8BEA:zhōu 0x8BEB:jiè 0x8BEC:wū 0x8BED:yǔ,yù 0x8BEE:qiào 0x8BEF:wù 0x8BF0:gào 0x8BF1:yòu 0x8BF2:huì 0x8BF3:kuáng 0x8BF4:shuō,shuì,yuè 0x8BF5:sòng 0x8BF6:éi 0x8BF7:qǐng 0x8BF8:zhū 0x8BF9:zōu 0x8BFA:nuò 0x8BFB:dú,dòu 0x8BFC:zhuó 0x8BFD:fěi 0x8BFE:kè 0x8BFF:wěi 0x8C00:yú 0x8C01:shéi,shuí 0x8C02:shěn 0x8C03:diào,tiáo 0x8C04:chǎn 0x8C05:liàng 0x8C06:zhūn 0x8C07:suì 0x8C08:tán 0x8C09:shěn 0x8C0A:yì 0x8C0B:móu 0x8C0C:chén 0x8C0D:dié 0x8C0E:huǎng 0x8C0F:jiàn 0x8C10:xié 0x8C11:xuè 0x8C12:yè 0x8C13:wèi 0x8C14:è 0x8C15:yù 0x8C16:xuān 0x8C17:chán 0x8C18:zī 0x8C19:ān 0x8C1A:yàn 0x8C1B:dì 0x8C1C:mí,mèi 0x8C1D:pián,piǎn 0x8C1E:xū 0x8C1F:mó 0x8C20:dǎng 0x8C21:sù 0x8C22:xiè 0x8C23:yáo 0x8C24:bàng 0x8C25:shì 0x8C26:qiān 0x8C27:mì 0x8C28:jǐn 0x8C29:mán,màn 0x8C2A:zhé 0x8C2B:jiǎn 0x8C2C:miù 0x8C2D:tán 0x8C2E:zèn 0x8C2F:qiáo,qiào 0x8C30:lán 0x8C31:pǔ 0x8C32:jué 0x8C33:yàn 0x8C34:qiǎn 0x8C35:zhān 0x8C36:chèn 0x8C37:gǔ,lù,yù 0x8C38:qiān 0x8C39:hóng 0x8C3A:xiā 0x8C3B:jí 0x8C3C:hóng 0x8C3D:hān 0x8C3E:hōng,lóng 0x8C3F:xī,jī 0x8C40:xī 0x8C41:huō,huò,huá 0x8C42:liáo 0x8C43:hǎn,gǎn 0x8C44:dú 0x8C45:lóng,lòng 0x8C46:dòu 0x8C47:jiāng 0x8C48:qǐ,kǎi 0x8C49:shì,chǐ 0x8C4A:lǐ,fēng 0x8C4B:dēng 0x8C4C:wān 0x8C4D:bī,biǎn 0x8C4E:shù 0x8C4F:xiàn 0x8C50:fēng 0x8C51:zhì 0x8C52:zhì 0x8C53:yàn 0x8C54:yàn 0x8C55:shǐ 0x8C56:chù 0x8C57:huī 0x8C58:tún 0x8C59:yì 0x8C5A:tún,dūn,dùn 0x8C5B:yì 0x8C5C:jiān 0x8C5D:bā 0x8C5E:hòu 0x8C5F:è 0x8C60:chú 0x8C61:xiàng 0x8C62:huàn 0x8C63:jiān,yàn 0x8C64:kěn,kūn 0x8C65:gāi 0x8C66:jù 0x8C67:fū,fù,pū 0x8C68:xī 0x8C69:bīn,huān 0x8C6A:háo 0x8C6B:yù,xiè,shū 0x8C6C:zhū 0x8C6D:jiā 0x8C6E:fén 0x8C6F:xī 0x8C70:bó,hù,huò,gòu 0x8C71:wēn 0x8C72:huán 0x8C73:bīn,bān 0x8C74:dí 0x8C75:zōng 0x8C76:fén 0x8C77:yì 0x8C78:zhì 0x8C79:bào 0x8C7A:chái 0x8C7B:àn 0x8C7C:pí 0x8C7D:nà 0x8C7E:pī 0x8C7F:gǒu 0x8C80:nà,duò 0x8C81:yòu 0x8C82:diāo 0x8C83:mò 0x8C84:sì 0x8C85:xiū 0x8C86:huán,huān 0x8C87:kūn,mào,kěn 0x8C88:hé,mò 0x8C89:háo,mò,hé,mà 0x8C8A:mò,má 0x8C8B:àn 0x8C8C:mào,mò 0x8C8D:lí,mái,yù 0x8C8E:ní 0x8C8F:bǐ 0x8C90:yǔ 0x8C91:jiā 0x8C92:tuān,tuàn 0x8C93:māo,máo 0x8C94:pí 0x8C95:xī 0x8C96:yì 0x8C97:jù,yú 0x8C98:mò 0x8C99:chū 0x8C9A:tán 0x8C9B:huān 0x8C9C:jué 0x8C9D:bèi 0x8C9E:zhēn,zhēng 0x8C9F:yuán 0x8CA0:fù 0x8CA1:cái 0x8CA2:gòng 0x8CA3:tè 0x8CA4:yí,yì 0x8CA5:háng 0x8CA6:wán 0x8CA7:pín 0x8CA8:huò 0x8CA9:fàn 0x8CAA:tān 0x8CAB:guàn,wān 0x8CAC:zé,zhài 0x8CAD:zhì 0x8CAE:èr 0x8CAF:zhù 0x8CB0:shì 0x8CB1:bì 0x8CB2:zī 0x8CB3:èr 0x8CB4:guì 0x8CB5:piǎn 0x8CB6:biǎn,fá 0x8CB7:mǎi 0x8CB8:dài,tè 0x8CB9:shèng 0x8CBA:kuàng 0x8CBB:fèi,fú,bì 0x8CBC:tiē 0x8CBD:yí 0x8CBE:chí 0x8CBF:mào 0x8CC0:hè 0x8CC1:bì,fén,bēn,fèn,féi,bān,lù,pān 0x8CC2:lù 0x8CC3:lìn 0x8CC4:huì 0x8CC5:gāi 0x8CC6:pián 0x8CC7:zī,zì 0x8CC8:jiǎ,gǔ,jià 0x8CC9:xù 0x8CCA:zéi 0x8CCB:jiǎo 0x8CCC:gāi 0x8CCD:zāng 0x8CCE:jiàn 0x8CCF:yīng 0x8CD0:xùn 0x8CD1:zhèn 0x8CD2:shē,shā 0x8CD3:bīn 0x8CD4:bīn 0x8CD5:qiú 0x8CD6:shē 0x8CD7:chuàn 0x8CD8:zāng 0x8CD9:zhōu 0x8CDA:lài 0x8CDB:zàn 0x8CDC:cì 0x8CDD:chēn 0x8CDE:shǎng 0x8CDF:tiǎn 0x8CE0:péi 0x8CE1:gēng 0x8CE2:xián,xiàn 0x8CE3:mài 0x8CE4:jiàn 0x8CE5:suì 0x8CE6:fù 0x8CE7:tàn 0x8CE8:cóng 0x8CE9:cóng 0x8CEA:zhì 0x8CEB:jī 0x8CEC:zhàng 0x8CED:dǔ 0x8CEE:jìn 0x8CEF:xiōng 0x8CF0:chǔn 0x8CF1:yǔn 0x8CF2:bǎo 0x8CF3:zāi 0x8CF4:lài 0x8CF5:fèng 0x8CF6:càng 0x8CF7:jī 0x8CF8:shèng 0x8CF9:yì,ài 0x8CFA:zhuàn,zuàn 0x8CFB:fù 0x8CFC:gòu 0x8CFD:sài 0x8CFE:zé 0x8CFF:liáo 0x8D00:yì 0x8D01:bài 0x8D02:chěn 0x8D03:wàn 0x8D04:zhì,zhí 0x8D05:zhuì 0x8D06:biāo 0x8D07:yūn,bīn 0x8D08:zèng 0x8D09:dàn 0x8D0A:zàn 0x8D0B:yàn 0x8D0C:pú 0x8D0D:shàn,dàn 0x8D0E:wàn 0x8D0F:yíng 0x8D10:jìn 0x8D11:gàn 0x8D12:xián 0x8D13:zāng 0x8D14:bì 0x8D15:dú 0x8D16:shú,shù 0x8D17:yàn,yán 0x8D18:shǎng 0x8D19:xuàn 0x8D1A:lòng 0x8D1B:gàn,gòng,zhuàng 0x8D1C:zāng 0x8D1D:bèi 0x8D1E:zhēn 0x8D1F:fù 0x8D20:yuán 0x8D21:gòng 0x8D22:cái 0x8D23:zé 0x8D24:xián 0x8D25:bài 0x8D26:zhàng 0x8D27:huò 0x8D28:zhì 0x8D29:fàn 0x8D2A:tān 0x8D2B:pín 0x8D2C:biǎn 0x8D2D:gòu 0x8D2E:zhù 0x8D2F:guàn 0x8D30:èr 0x8D31:jiàn 0x8D32:bēn,bì 0x8D33:shì 0x8D34:tiē 0x8D35:guì 0x8D36:kuàng 0x8D37:dài 0x8D38:mào 0x8D39:fèi 0x8D3A:hè 0x8D3B:yí 0x8D3C:zéi 0x8D3D:zhì 0x8D3E:jiǎ,gǔ 0x8D3F:huì 0x8D40:zī 0x8D41:lìn 0x8D42:lù 0x8D43:zāng 0x8D44:zī 0x8D45:gāi 0x8D46:jìn 0x8D47:qiú 0x8D48:zhèn 0x8D49:lài 0x8D4A:shē 0x8D4B:fù 0x8D4C:dǔ 0x8D4D:jī 0x8D4E:shú 0x8D4F:shǎng 0x8D50:cì 0x8D51:bì 0x8D52:zhōu 0x8D53:gēng 0x8D54:péi 0x8D55:dǎn 0x8D56:lài 0x8D57:fèng 0x8D58:zhuì 0x8D59:fù 0x8D5A:zhuàn,zuàn 0x8D5B:sài 0x8D5C:zé 0x8D5D:yàn 0x8D5E:zàn 0x8D5F:yūn 0x8D60:zèng 0x8D61:shàn 0x8D62:yíng 0x8D63:gàn 0x8D64:chì 0x8D65:xī 0x8D66:shè,cè 0x8D67:nǎn 0x8D68:tóng,xióng 0x8D69:xì 0x8D6A:chēng 0x8D6B:hè,shì 0x8D6C:chēng 0x8D6D:zhě 0x8D6E:xiá 0x8D6F:táng 0x8D70:zǒu 0x8D71:zǒu 0x8D72:lì 0x8D73:jiū,jiù 0x8D74:fù 0x8D75:zhào 0x8D76:gǎn,qián 0x8D77:qǐ 0x8D78:shàn 0x8D79:qióng 0x8D7A:yǐn,qǐn 0x8D7B:xiǎn 0x8D7C:zī 0x8D7D:jué,guì 0x8D7E:qǐn 0x8D7F:chí,dì 0x8D80:cī 0x8D81:chèn,zhēn,chén,niǎn,zhěn 0x8D82:chèn 0x8D83:dié,tú 0x8D84:jū,qiè 0x8D85:chāo,chǎo,chào,tiào 0x8D86:dī 0x8D87:xì 0x8D88:zhān 0x8D89:jué,jú 0x8D8A:yuè,huó 0x8D8B:qū 0x8D8C:jí,jié 0x8D8D:chí,qū 0x8D8E:chú 0x8D8F:guā,huó 0x8D90:xuè,chì 0x8D91:zī,cì 0x8D92:tiáo,tiào,tiǎo 0x8D93:duǒ 0x8D94:liè 0x8D95:gǎn 0x8D96:suō 0x8D97:cù 0x8D98:xí 0x8D99:zhào,diào 0x8D9A:sù 0x8D9B:yǐn 0x8D9C:jú,qū,qiú 0x8D9D:jiàn 0x8D9E:què,qì,jí 0x8D9F:tàng,zhēng,zhèng,chéng,tāng 0x8DA0:chuò,chào,tiào,zhuó 0x8DA1:cuǐ,wěi,jù 0x8DA2:lù 0x8DA3:qù,cù,qū,cǒu,zōu 0x8DA4:dàng 0x8DA5:qiū,cù 0x8DA6:zī 0x8DA7:tí 0x8DA8:qū,cù,qù,cǒu 0x8DA9:chì 0x8DAA:huáng,guāng 0x8DAB:qiáo,jiào,chǎo 0x8DAC:qiāo 0x8DAD:jiào 0x8DAE:zào 0x8DAF:tì,yuè,yào 0x8DB0:ěr 0x8DB1:zǎn 0x8DB2:zǎn,zū 0x8DB3:zú,jù 0x8DB4:pā 0x8DB5:bào,bō,zhuó,chuò,páo 0x8DB6:kù,wū 0x8DB7:kē 0x8DB8:dǔn 0x8DB9:jué,guì 0x8DBA:fū 0x8DBB:chěn 0x8DBC:jiǎn,yàn,yán,jiān 0x8DBD:fàng,páng,fāng 0x8DBE:zhǐ 0x8DBF:tā,sà,qì 0x8DC0:yuè 0x8DC1:bà,pá 0x8DC2:qí,qǐ,qì,jī,zhī 0x8DC3:yuè 0x8DC4:qiāng,qiàng 0x8DC5:tuò,chì 0x8DC6:tái 0x8DC7:yì 0x8DC8:niǎn,jiàn,chén,tiàn 0x8DC9:líng 0x8DCA:mèi 0x8DCB:bá,bèi 0x8DCC:diē,dié,tú 0x8DCD:kū 0x8DCE:tuó 0x8DCF:jiā 0x8DD0:cī,cǐ,zǐ 0x8DD1:pǎo,páo,bó 0x8DD2:qiǎ 0x8DD3:zhù 0x8DD4:jū,qǔ 0x8DD5:diǎn,tiē,dié,zhàn,diē 0x8DD6:zhí 0x8DD7:fū,fù 0x8DD8:pán,bàn 0x8DD9:jù,qū,qiě,zhù,qiè 0x8DDA:shān 0x8DDB:bǒ,bì,pō 0x8DDC:ní 0x8DDD:jù 0x8DDE:lì,luò 0x8DDF:gēn 0x8DE0:yí 0x8DE1:jī 0x8DE2:duò,dài,duō,chí 0x8DE3:xiǎn,xiān,sǔn 0x8DE4:jiāo,qiāo 0x8DE5:duò 0x8DE6:zhū,chú 0x8DE7:quán,zūn 0x8DE8:kuà,kù,kuā,kuǎ 0x8DE9:zhuǎi,shì 0x8DEA:guì 0x8DEB:qióng,qiāng,qiōng 0x8DEC:kuǐ,xiè 0x8DED:xiáng 0x8DEE:chì,dié 0x8DEF:lù,luò 0x8DF0:pián,bèng,bǐng 0x8DF1:zhì 0x8DF2:jiá,jié 0x8DF3:tiào,diào,táo 0x8DF4:cǎi 0x8DF5:jiàn 0x8DF6:dá 0x8DF7:qiāo 0x8DF8:bì 0x8DF9:xiān 0x8DFA:duò 0x8DFB:jī 0x8DFC:jú,qù 0x8DFD:jì 0x8DFE:shū,chōu 0x8DFF:tú,duó,chuō 0x8E00:chù,cù 0x8E01:jìng,kēng 0x8E02:niè 0x8E03:xiāo,qiào 0x8E04:bù 0x8E05:xué,chì 0x8E06:cūn,qūn,cún,zūn,qiù,zhūn 0x8E07:mǔ 0x8E08:shū 0x8E09:liáng,láng,liàng,làng 0x8E0A:yǒng 0x8E0B:jiǎo 0x8E0C:chóu 0x8E0D:qiāo 0x8E0E:móu 0x8E0F:tà,tā 0x8E10:jiàn 0x8E11:qí,jī,jì 0x8E12:wō,wēi,ruí 0x8E13:wěi,cù 0x8E14:chuō,diào,zhuō,tiào,chuò 0x8E15:jié 0x8E16:jí,qì,què 0x8E17:niè 0x8E18:jū 0x8E19:niè 0x8E1A:lún 0x8E1B:lù 0x8E1C:lèng,léng,chěng 0x8E1D:huái 0x8E1E:jù 0x8E1F:chí 0x8E20:wǎn,wò 0x8E21:quán,juǎn 0x8E22:tī,dié 0x8E23:bó,pòu 0x8E24:zú,cù,cuì 0x8E25:qiè 0x8E26:yǐ,qī,jī,jǐ,yì 0x8E27:cù,dí 0x8E28:zōng 0x8E29:cǎi,kuí 0x8E2A:zōng 0x8E2B:pèng,pán 0x8E2C:zhì 0x8E2D:zhēng 0x8E2E:diǎn 0x8E2F:zhí 0x8E30:yú,yáo,chū 0x8E31:duó,chuò,duò 0x8E32:dùn 0x8E33:chuǎn,chǔn,chūn 0x8E34:yǒng 0x8E35:zhǒng,zhòng 0x8E36:dì,zhì,tí,chí,shì 0x8E37:zhǎ 0x8E38:chěn 0x8E39:chuài,shuàn,duàn,chuǎn 0x8E3A:jiàn 0x8E3B:guā,guǎ,tuó 0x8E3C:táng,tǎng,shāng 0x8E3D:jǔ 0x8E3E:fú,bì 0x8E3F:zú 0x8E40:dié 0x8E41:pián 0x8E42:róu,rǒu 0x8E43:nuò,rè,nà 0x8E44:tí,dì 0x8E45:chǎ,zhā 0x8E46:tuǐ 0x8E47:jiǎn 0x8E48:dǎo 0x8E49:cuō 0x8E4A:qī,xī 0x8E4B:tà 0x8E4C:qiāng,qiàng 0x8E4D:niǎn,zhǎn,chán 0x8E4E:diān 0x8E4F:tí 0x8E50:jí 0x8E51:niè 0x8E52:pán,mán 0x8E53:liū,liù 0x8E54:zàn,cán 0x8E55:bì 0x8E56:chōng 0x8E57:lù 0x8E58:liáo 0x8E59:cù 0x8E5A:tāng,tàng,chēng 0x8E5B:dài,diē,dān,zhì 0x8E5C:sù 0x8E5D:xǐ 0x8E5E:kuǐ 0x8E5F:jī 0x8E60:zhí,zhuó 0x8E61:qiāng,qiàng 0x8E62:dí,zhí 0x8E63:pán,mán,liǎng 0x8E64:zōng 0x8E65:lián 0x8E66:bèng 0x8E67:zāo 0x8E68:niǎn,rǎn 0x8E69:bié 0x8E6A:tuí 0x8E6B:jú 0x8E6C:dēng,dèng 0x8E6D:cèng,céng 0x8E6E:xiān 0x8E6F:fán 0x8E70:chú 0x8E71:zhōng,chòng 0x8E72:dūn,zún,cún,zūn,cǔn,cuán,qǔn 0x8E73:bō 0x8E74:cù,zú,jiu 0x8E75:cù 0x8E76:jué,guì,juě 0x8E77:jué 0x8E78:lìn,lín 0x8E79:tá 0x8E7A:qiāo,qiào 0x8E7B:juē,qiāo,jiǎo,jué,jú,xuè 0x8E7C:pǔ 0x8E7D:liāo 0x8E7E:dūn 0x8E7F:cuān 0x8E80:guàn 0x8E81:zào 0x8E82:dá 0x8E83:bì 0x8E84:bì 0x8E85:zhú,zhuó 0x8E86:jù 0x8E87:chú,chuò 0x8E88:qiào 0x8E89:dǔn 0x8E8A:chóu 0x8E8B:jī 0x8E8C:wǔ 0x8E8D:yuè,tì 0x8E8E:niǎn 0x8E8F:lìn 0x8E90:liè 0x8E91:zhí 0x8E92:lì,yuè,luò 0x8E93:zhì,zhī 0x8E94:chán,zhàn 0x8E95:chú 0x8E96:duàn 0x8E97:wèi 0x8E98:lóng,lǒng 0x8E99:lìn 0x8E9A:xiān 0x8E9B:wèi 0x8E9C:zuān 0x8E9D:lán 0x8E9E:xiè 0x8E9F:ráng 0x8EA0:sǎ,xiè 0x8EA1:niè 0x8EA2:tà 0x8EA3:qú 0x8EA4:jí 0x8EA5:cuān 0x8EA6:cuó,zuān 0x8EA7:xǐ 0x8EA8:kuí 0x8EA9:jué,qì 0x8EAA:lìn 0x8EAB:shēn,juān 0x8EAC:gōng 0x8EAD:dān 0x8EAE:fēn 0x8EAF:qū 0x8EB0:tǐ 0x8EB1:duǒ 0x8EB2:duǒ 0x8EB3:gōng 0x8EB4:láng 0x8EB5:rěn 0x8EB6:luǒ 0x8EB7:ǎi 0x8EB8:jī 0x8EB9:jú 0x8EBA:tǎng,tàng 0x8EBB:kōng 0x8EBC:lào 0x8EBD:yǎn,yàn 0x8EBE:měi 0x8EBF:kāng 0x8EC0:qū 0x8EC1:lóu,lǚ 0x8EC2:lào 0x8EC3:duǒ,tuǒ 0x8EC4:zhí 0x8EC5:yàn 0x8EC6:tǐ 0x8EC7:dào 0x8EC8:yīng 0x8EC9:yù 0x8ECA:chē,jū 0x8ECB:yà,zhá,gá 0x8ECC:guǐ 0x8ECD:jūn 0x8ECE:wèi 0x8ECF:yuè 0x8ED0:xìn,xiàn 0x8ED1:dài 0x8ED2:xuān,xiǎn,xiàn,hǎn,jiān 0x8ED3:fàn 0x8ED4:rèn 0x8ED5:shān 0x8ED6:kuáng 0x8ED7:shū 0x8ED8:tún 0x8ED9:chén,qí 0x8EDA:dài 0x8EDB:è 0x8EDC:nà 0x8EDD:qí 0x8EDE:máo 0x8EDF:ruǎn 0x8EE0:kuáng 0x8EE1:qián 0x8EE2:zhuǎn 0x8EE3:hōng 0x8EE4:hū 0x8EE5:qú,gōu,gòu,jū 0x8EE6:kuàng 0x8EE7:dǐ,chí 0x8EE8:líng,lǐng 0x8EE9:dài 0x8EEA:āo,ào 0x8EEB:zhěn 0x8EEC:fàn,bèn 0x8EED:kuāng 0x8EEE:yǎng 0x8EEF:pēng 0x8EF0:bèi 0x8EF1:gū 0x8EF2:gū 0x8EF3:páo 0x8EF4:zhù 0x8EF5:rǒng,fǔ,fù,róng 0x8EF6:è 0x8EF7:bá 0x8EF8:zhóu,zhú,zhòu 0x8EF9:zhǐ 0x8EFA:yáo,diāo 0x8EFB:kē 0x8EFC:yì,dié,zhé 0x8EFD:zhì,qīng 0x8EFE:shì 0x8EFF:píng 0x8F00:ér 0x8F01:gǒng 0x8F02:jú 0x8F03:jiào,jué,xiào 0x8F04:guāng 0x8F05:hé,lù,yà 0x8F06:kǎi,kài 0x8F07:quán,chūn 0x8F08:zhōu 0x8F09:zài,zǎi,dài,zāi,zī 0x8F0A:zhì 0x8F0B:shē 0x8F0C:liàng 0x8F0D:yù 0x8F0E:shāo 0x8F0F:yóu 0x8F10:wàn,yuǎn 0x8F11:yǐn,qūn 0x8F12:zhé 0x8F13:wǎn 0x8F14:fǔ 0x8F15:qīng,qìng 0x8F16:zhōu 0x8F17:ní,yì 0x8F18:léng,líng,lèng 0x8F19:zhé 0x8F1A:zhàn 0x8F1B:liàng 0x8F1C:zī,zì 0x8F1D:huī 0x8F1E:wǎng 0x8F1F:chuò 0x8F20:guǒ,huà,huì 0x8F21:kǎn 0x8F22:yǐ 0x8F23:péng 0x8F24:qiàn 0x8F25:gǔn 0x8F26:niǎn,liǎn 0x8F27:píng,pēng 0x8F28:guǎn 0x8F29:bèi 0x8F2A:lún 0x8F2B:pái 0x8F2C:liáng 0x8F2D:ruǎn,ér 0x8F2E:róu,rǒu 0x8F2F:jí 0x8F30:yáng 0x8F31:xián,kàn 0x8F32:chuán 0x8F33:còu 0x8F34:chūn,shǔn 0x8F35:gé,yà,è,qiè 0x8F36:yóu 0x8F37:hōng 0x8F38:shū,shù 0x8F39:fù,bú 0x8F3A:zī 0x8F3B:fú 0x8F3C:wēn,yūn 0x8F3D:bèn 0x8F3E:zhǎn,niǎn 0x8F3F:yú,yù 0x8F40:wēn 0x8F41:tāo,kǎn 0x8F42:gǔ,gū 0x8F43:zhēn 0x8F44:xiá,hé 0x8F45:yuán 0x8F46:lù 0x8F47:jiāo,xiǎo 0x8F48:cháo 0x8F49:zhuǎn,zhuàn,zhuǎi 0x8F4A:wèi 0x8F4B:hún 0x8F4C:xuě 0x8F4D:zhé 0x8F4E:jiào 0x8F4F:zhàn 0x8F50:bú 0x8F51:lǎo,láo,liáo,liǎo,liào 0x8F52:fén 0x8F53:fān 0x8F54:lín,lìn 0x8F55:gé 0x8F56:sè 0x8F57:kǎn 0x8F58:huán,huàn 0x8F59:yǐ 0x8F5A:jí 0x8F5B:zhuì 0x8F5C:ér 0x8F5D:yù 0x8F5E:jiàn 0x8F5F:hōng 0x8F60:léi 0x8F61:pèi 0x8F62:lì 0x8F63:lì 0x8F64:lú 0x8F65:lìn 0x8F66:chē,jū 0x8F67:yà,gá,zhá 0x8F68:guǐ 0x8F69:xuān 0x8F6A:dài 0x8F6B:rèn 0x8F6C:zhuǎn,zhuǎi,zhuàn 0x8F6D:è 0x8F6E:lún 0x8F6F:ruǎn 0x8F70:hōng 0x8F71:gū 0x8F72:kē,kě 0x8F73:lú 0x8F74:zhóu,zhòu 0x8F75:zhǐ 0x8F76:yì 0x8F77:hū 0x8F78:zhěn 0x8F79:lì 0x8F7A:yáo 0x8F7B:qīng 0x8F7C:shì 0x8F7D:zài,zǎi 0x8F7E:zhì 0x8F7F:jiào 0x8F80:zhōu 0x8F81:quán 0x8F82:lù 0x8F83:jiào 0x8F84:zhé 0x8F85:fǔ 0x8F86:liàng 0x8F87:niǎn 0x8F88:bèi 0x8F89:huī 0x8F8A:gǔn 0x8F8B:wǎng 0x8F8C:liáng 0x8F8D:chuò 0x8F8E:zī 0x8F8F:còu 0x8F90:fú 0x8F91:jí 0x8F92:wēn 0x8F93:shū 0x8F94:pèi 0x8F95:yuán 0x8F96:xiá 0x8F97:niǎn,zhǎn 0x8F98:lù 0x8F99:zhé 0x8F9A:lín 0x8F9B:xīn 0x8F9C:gū 0x8F9D:cí 0x8F9E:cí 0x8F9F:pì,bì,mǐ,pī 0x8FA0:zuì,zuī 0x8FA1:biàn 0x8FA2:là 0x8FA3:là 0x8FA4:cí 0x8FA5:xuē,yì 0x8FA6:bàn 0x8FA7:biàn 0x8FA8:biàn,biǎn,bàn,piàn 0x8FA9:biàn 0x8FAA:xuē 0x8FAB:biàn 0x8FAC:bān 0x8FAD:cí 0x8FAE:biàn 0x8FAF:biàn,pián,biǎn,bàn 0x8FB0:chén 0x8FB1:rǔ 0x8FB2:nóng 0x8FB3:nóng 0x8FB4:chǎn,zhěn 0x8FB5:chuò 0x8FB6:chuò 0x8FB7:yī 0x8FB8:réng 0x8FB9:biān,bian 0x8FBA:biān 0x8FBB:shí 0x8FBC:yū 0x8FBD:liáo 0x8FBE:dá,tì,tà 0x8FBF:chān,chán 0x8FC0:gān 0x8FC1:qiān 0x8FC2:yū 0x8FC3:yū 0x8FC4:qì 0x8FC5:xùn 0x8FC6:yí,yǐ,tuó 0x8FC7:guò,guō 0x8FC8:mài 0x8FC9:qī 0x8FCA:zā 0x8FCB:wàng,guàng,kuáng 0x8FCC:tù 0x8FCD:zhūn 0x8FCE:yíng,yìng 0x8FCF:dá 0x8FD0:yùn,yǔn 0x8FD1:jìn 0x8FD2:háng,xiáng 0x8FD3:yà 0x8FD4:fǎn 0x8FD5:wù,wǔ 0x8FD6:dá 0x8FD7:é 0x8FD8:hái,fú,huán 0x8FD9:zhè,zhèi 0x8FDA:dá 0x8FDB:jìn 0x8FDC:yuǎn 0x8FDD:wéi 0x8FDE:lián 0x8FDF:chí 0x8FE0:chè 0x8FE1:nì,chí 0x8FE2:tiáo 0x8FE3:zhì,chì 0x8FE4:yí,yǐ,tuó 0x8FE5:jiǒng 0x8FE6:jiā,xiè 0x8FE7:chén 0x8FE8:dài 0x8FE9:ěr 0x8FEA:dí 0x8FEB:pò,pǎi 0x8FEC:zhù,wǎng 0x8FED:dié,yì,dá 0x8FEE:zé,zuò 0x8FEF:táo 0x8FF0:shù 0x8FF1:tuó,yí 0x8FF2:qu 0x8FF3:jìng 0x8FF4:huí 0x8FF5:dòng 0x8FF6:yòu 0x8FF7:mí,mì 0x8FF8:bèng 0x8FF9:jì,jī 0x8FFA:nǎi 0x8FFB:yí 0x8FFC:jié 0x8FFD:zhuī,duī,tuī 0x8FFE:liè 0x8FFF:xùn 0x9000:tuì 0x9001:sòng 0x9002:shì,kuò 0x9003:táo 0x9004:páng,féng 0x9005:hòu 0x9006:nì 0x9007:dùn 0x9008:jiǒng 0x9009:xuǎn 0x900A:xùn 0x900B:bū 0x900C:yōu,yóu 0x900D:xiāo 0x900E:qiú 0x900F:tòu,shū 0x9010:zhú,dí,zhòu,tún 0x9011:qiú 0x9012:dì 0x9013:dì 0x9014:tú 0x9015:jìng 0x9016:tì 0x9017:dòu,zhù,tóu,qí 0x9018:yǐ,sì 0x9019:zhè,yàn,zhèi 0x901A:tōng,tòng 0x901B:guàng,kuáng 0x901C:wù,wǔ 0x901D:shì 0x901E:chěng,yíng 0x901F:sù 0x9020:zào,cào,cāo 0x9021:qūn,xùn,suō 0x9022:féng,péng,páng 0x9023:lián,liǎn,liàn,làn 0x9024:suò 0x9025:huí 0x9026:lǐ 0x9027:gǔ 0x9028:lái,lài 0x9029:bèn,bēn 0x902A:cuò 0x902B:jué,zhú 0x902C:bèng,pēng 0x902D:huàn 0x902E:dǎi,dài,dì 0x902F:lù,dài 0x9030:yóu 0x9031:zhōu 0x9032:jìn 0x9033:yù 0x9034:chuō,chuò 0x9035:kuí,kuǐ 0x9036:wēi 0x9037:tì 0x9038:yì 0x9039:dá 0x903A:yuǎn 0x903B:luó 0x903C:bī 0x903D:nuò 0x903E:yú,dòu 0x903F:dàng,táng 0x9040:suí 0x9041:dùn,qūn,xún 0x9042:suì,suí 0x9043:yǎn,àn 0x9044:chuán 0x9045:chí 0x9046:tí 0x9047:yù,yóng,ǒu 0x9048:shí 0x9049:zhēn 0x904A:yóu 0x904B:yùn 0x904C:è 0x904D:biàn 0x904E:guò,guō,guo,huò 0x904F:è 0x9050:xiá 0x9051:huáng 0x9052:qiú,qiū 0x9053:dào,dǎo 0x9054:dá,tà 0x9055:wéi,huí 0x9056:nán 0x9057:yí,wèi 0x9058:gòu 0x9059:yáo 0x905A:chòu 0x905B:liú,liù 0x905C:xùn 0x905D:tà 0x905E:dì,shì,dài 0x905F:chí,zhì,xī 0x9060:yuǎn,yuàn 0x9061:sù 0x9062:tà 0x9063:qiǎn,qiàn 0x9064:mǎ 0x9065:yáo 0x9066:guàn 0x9067:zhāng 0x9068:áo 0x9069:shì,dí,tì,zhé 0x906A:cà 0x906B:chì 0x906C:sù 0x906D:zāo 0x906E:zhē 0x906F:dùn 0x9070:dì,shì,dài 0x9071:lóu 0x9072:chí,zhì 0x9073:cuō 0x9074:lín,lìn 0x9075:zūn 0x9076:rào 0x9077:qiān 0x9078:xuǎn,xuàn,suàn,shuā 0x9079:yù 0x907A:yí,wèi,suí 0x907B:è 0x907C:liáo 0x907D:jù,qú 0x907E:shì 0x907F:bì 0x9080:yāo 0x9081:mài 0x9082:xiè 0x9083:suì 0x9084:hái,huán,xuán 0x9085:zhān,zhàn 0x9086:téng 0x9087:ěr 0x9088:miǎo,miáo 0x9089:biān 0x908A:biān 0x908B:lā,liè 0x908C:lí,chí 0x908D:yuán 0x908E:yáo 0x908F:luó,luò 0x9090:lǐ 0x9091:yì,è 0x9092:tíng 0x9093:dèng,shān 0x9094:qǐ 0x9095:yōng,yǒng 0x9096:shān 0x9097:hán 0x9098:yú 0x9099:máng 0x909A:rú,fù 0x909B:qióng 0x909C:xī 0x909D:kuàng 0x909E:fū 0x909F:kàng,háng,kāng 0x90A0:bīn 0x90A1:fāng,fàng 0x90A2:xíng,gěng 0x90A3:nà,nuó,nuò,nèi,nǎ,něi,né,nā,nǎi,nè 0x90A4:xīn 0x90A5:shěn 0x90A6:bāng 0x90A7:yuán 0x90A8:cūn 0x90A9:huǒ 0x90AA:xié,yá,yé,xú,shé 0x90AB:bāng 0x90AC:wū 0x90AD:jù 0x90AE:yóu 0x90AF:hán,hàn 0x90B0:tái 0x90B1:qiū 0x90B2:bì,biàn 0x90B3:pī 0x90B4:bǐng 0x90B5:shào 0x90B6:bèi 0x90B7:wǎ 0x90B8:dǐ 0x90B9:zōu 0x90BA:yè,qiū 0x90BB:lín 0x90BC:kuāng 0x90BD:guī 0x90BE:zhū 0x90BF:shī 0x90C0:kū 0x90C1:yù 0x90C2:gāi,hái 0x90C3:hé,xiá 0x90C4:qiè,xì 0x90C5:zhì,jí 0x90C6:jí 0x90C7:huán,xún 0x90C8:hòu 0x90C9:xíng 0x90CA:jiāo 0x90CB:xí 0x90CC:guī 0x90CD:nuó,nǎ,fú 0x90CE:láng,làng 0x90CF:jiá 0x90D0:kuài 0x90D1:zhèng 0x90D2:láng 0x90D3:yùn 0x90D4:yán 0x90D5:chéng 0x90D6:dòu 0x90D7:xī,chī 0x90D8:lǚ 0x90D9:fǔ 0x90DA:wú,yú 0x90DB:fú 0x90DC:gào 0x90DD:hǎo,shì 0x90DE:láng 0x90DF:jiá 0x90E0:gěng 0x90E1:jùn 0x90E2:yǐng,chéng 0x90E3:bó 0x90E4:xì 0x90E5:bèi 0x90E6:lì 0x90E7:yún 0x90E8:bù,pǒu 0x90E9:xiáo,ǎo 0x90EA:qī 0x90EB:pí 0x90EC:qīng 0x90ED:guō,guó 0x90EE:zhōu 0x90EF:tán 0x90F0:zōu,jǔ 0x90F1:píng 0x90F2:lái,lěi 0x90F3:ní 0x90F4:chēn,lán 0x90F5:yóu,chuí 0x90F6:bù 0x90F7:xiāng 0x90F8:dān 0x90F9:jú 0x90FA:yōng 0x90FB:qiāo 0x90FC:yī 0x90FD:dōu,dū 0x90FE:yǎn,yān 0x90FF:méi 0x9100:ruò 0x9101:bèi 0x9102:è 0x9103:shū 0x9104:juàn 0x9105:yǔ 0x9106:yùn 0x9107:hóu 0x9108:kuí 0x9109:xiāng,xiǎng,xiàng 0x910A:xiāng 0x910B:sōu 0x910C:táng 0x910D:míng 0x910E:xī 0x910F:rǔ 0x9110:chù 0x9111:zī 0x9112:zōu,jù 0x9113:yè 0x9114:wū 0x9115:xiāng 0x9116:yún 0x9117:hào,qiāo,jiāo 0x9118:yōng 0x9119:bǐ 0x911A:mào,mò 0x911B:cháo 0x911C:fū,lù 0x911D:liǎo 0x911E:yín 0x911F:zhuān 0x9120:hù 0x9121:qiāo 0x9122:yān 0x9123:zhāng,zhàng 0x9124:màn,wàn 0x9125:qiāo 0x9126:xǔ 0x9127:dèng 0x9128:bì 0x9129:xún 0x912A:bì 0x912B:zēng,céng 0x912C:wéi 0x912D:zhèng 0x912E:mào 0x912F:shàn 0x9130:lín,lìn 0x9131:pó,pí,pán 0x9132:dān,duō 0x9133:méng 0x9134:yè 0x9135:cào,sāo 0x9136:kuài 0x9137:fēng 0x9138:méng 0x9139:zōu,jù 0x913A:kuàng,kuò 0x913B:liǎn 0x913C:zàn 0x913D:chán 0x913E:yōu 0x913F:jī,qí 0x9140:yàn,yǎn 0x9141:chán 0x9142:cuó,zàn 0x9143:líng 0x9144:huān,quān 0x9145:xī 0x9146:fēng 0x9147:zàn,cuó 0x9148:lì,lí,zhí 0x9149:yǒu 0x914A:dīng,dǐng 0x914B:qiú 0x914C:zhuó 0x914D:pèi 0x914E:zhòu 0x914F:yǐ,yí 0x9150:gān,hàng 0x9151:yú 0x9152:jiǔ 0x9153:yǎn,yàn,yǐn 0x9154:zuì 0x9155:máo 0x9156:zhèn,dān 0x9157:xù 0x9158:dòu 0x9159:zhēn 0x915A:fēn 0x915B:yuán 0x915C:fu 0x915D:yùn 0x915E:tài 0x915F:tiān 0x9160:qiǎ 0x9161:tuó,duò 0x9162:cù,zuò 0x9163:hān,hàn 0x9164:gū 0x9165:sū 0x9166:pò,fā,pō 0x9167:chóu 0x9168:zài,zuì 0x9169:mǐng 0x916A:lào,luò,lù 0x916B:chuò 0x916C:chóu 0x916D:yòu 0x916E:tóng,dòng,chóng 0x916F:zhǐ 0x9170:xiān 0x9171:jiàng 0x9172:chéng 0x9173:yìn 0x9174:tú 0x9175:jiào 0x9176:méi 0x9177:kù 0x9178:suān 0x9179:lèi 0x917A:pú 0x917B:zuì,fú 0x917C:hǎi 0x917D:yàn 0x917E:shāi,shī 0x917F:niàng,niáng 0x9180:wéi,zhuì 0x9181:lù 0x9182:lǎn 0x9183:yān,āng 0x9184:táo 0x9185:pēi 0x9186:zhǎn 0x9187:chún 0x9188:tán,dàn 0x9189:zuì 0x918A:zhuì 0x918B:cù,zuò 0x918C:kūn 0x918D:tí,tǐ 0x918E:xián,jiǎn 0x918F:dū 0x9190:hú 0x9191:xǔ 0x9192:xǐng,chéng,jīng 0x9193:tǎn 0x9194:qiú,chōu 0x9195:chún 0x9196:yùn 0x9197:pò 0x9198:kē 0x9199:sōu 0x919A:mí 0x919B:quán,chuò 0x919C:chǒu 0x919D:cuō,cuǒ 0x919E:yùn 0x919F:yòng 0x91A0:àng 0x91A1:zhà 0x91A2:hǎi 0x91A3:táng 0x91A4:jiàng 0x91A5:piǎo 0x91A6:chěn,chǎn 0x91A7:yù,ōu 0x91A8:lí 0x91A9:zāo 0x91AA:láo 0x91AB:yī,yǐ 0x91AC:jiàng 0x91AD:bú 0x91AE:jiào,qiáo,zhàn 0x91AF:xī 0x91B0:tán 0x91B1:fā,pò,pō 0x91B2:nóng 0x91B3:yì,shì 0x91B4:lǐ 0x91B5:jù 0x91B6:yàn,liǎn,xiān,jiǎn 0x91B7:yì,yǐ,ài 0x91B8:niàng 0x91B9:rú 0x91BA:xūn 0x91BB:chóu,shòu,dào 0x91BC:yàn 0x91BD:líng 0x91BE:mí 0x91BF:mí 0x91C0:niàng,niáng 0x91C1:xìn 0x91C2:jiào 0x91C3:shāi,shī,lí 0x91C4:mí 0x91C5:yàn 0x91C6:biàn,biǎn 0x91C7:cǎi,cài 0x91C8:shì 0x91C9:yòu 0x91CA:shì 0x91CB:shì,yì 0x91CC:lǐ,li 0x91CD:zhòng,chóng,tóng 0x91CE:yě,shù 0x91CF:liàng,liáng 0x91D0:lí,xī,lái,tāi,lài,xǐ 0x91D1:jīn,jìn 0x91D2:jīn 0x91D3:qiú,gá 0x91D4:yǐ 0x91D5:liǎo,liào 0x91D6:dāo 0x91D7:zhāo 0x91D8:dīng,dìng,líng 0x91D9:pò,pō 0x91DA:qiú 0x91DB:bā 0x91DC:fǔ 0x91DD:zhēn 0x91DE:zhí 0x91DF:bā 0x91E0:luàn 0x91E1:fǔ 0x91E2:nǎi 0x91E3:diào 0x91E4:shàn,shān,xiān 0x91E5:qiǎo,jiǎo 0x91E6:kòu 0x91E7:chuàn,chuān 0x91E8:zǐ 0x91E9:fǎn,fàn,fán 0x91EA:huá,yú 0x91EB:huá,wū 0x91EC:hàn,gān 0x91ED:gāng,gōng 0x91EE:qí 0x91EF:máng 0x91F0:rì,rèn,jiàn 0x91F1:dì 0x91F2:sì 0x91F3:xì 0x91F4:yì 0x91F5:chāi,chā 0x91F6:shī,yí,yě 0x91F7:tǔ 0x91F8:xī 0x91F9:nǚ 0x91FA:qiān 0x91FB:qiú 0x91FC:jiàn 0x91FD:pì,pī,zhāo 0x91FE:yé,yá 0x91FF:jīn,yǐn,yín 0x9200:bǎ,bā,pá 0x9201:fāng 0x9202:chén,qín,zhèn 0x9203:xíng 0x9204:dǒu 0x9205:yuè 0x9206:qiān,zhōng 0x9207:fū,fǔ 0x9208:pī,bù 0x9209:nà,ruì 0x920A:xīn,qìn 0x920B:é 0x920C:jué 0x920D:dùn 0x920E:gōu 0x920F:yǐn 0x9210:qián,hán 0x9211:bǎn 0x9212:sà,xì 0x9213:rén 0x9214:chāo,chǎo 0x9215:niǔ,chǒu 0x9216:fēn 0x9217:yǔn,duì 0x9218:yǐ 0x9219:qín 0x921A:pī,bī,bǐ 0x921B:guō 0x921C:hóng 0x921D:yín 0x921E:jūn 0x921F:diào 0x9220:yì 0x9221:zhōng 0x9222:xǐ 0x9223:gài 0x9224:rì 0x9225:huǒ 0x9226:tài 0x9227:kàng 0x9228:yuán 0x9229:lú 0x922A:è 0x922B:qín 0x922C:duó 0x922D:zī 0x922E:nǐ,ní 0x922F:tú 0x9230:shì 0x9231:mín,mǐn 0x9232:gū,pì 0x9233:kē 0x9234:líng 0x9235:bǐng 0x9236:sì,cí,tái 0x9237:gǔ,hú,gù 0x9238:bó 0x9239:pī,pí 0x923A:yù 0x923B:sì 0x923C:zuó 0x923D:bū 0x923E:yóu,zhòu 0x923F:tián,diàn 0x9240:jiǎ,gé 0x9241:zhēn,zhèn 0x9242:shǐ 0x9243:shì,zú 0x9244:zhí,tiě 0x9245:jù 0x9246:chān,qián,tiē 0x9247:shī,yí 0x9248:shī,shé,yí,tuó,tā 0x9249:xuàn 0x924A:zhāo 0x924B:bào,páo,báo 0x924C:hé 0x924D:bì,sè 0x924E:shēng 0x924F:chú,zū,zhù,jǔ,chá,xú 0x9250:shí,zú 0x9251:bó 0x9252:zhù 0x9253:chì 0x9254:zā 0x9255:pō,pǒ 0x9256:tóng 0x9257:qián,ān 0x9258:fú 0x9259:zhǎi 0x925A:liǔ,mǎo 0x925B:qiān,yán 0x925C:fú 0x925D:lì 0x925E:yuè 0x925F:pī 0x9260:yāng 0x9261:bàn 0x9262:bō 0x9263:jié 0x9264:gōu,gòu,qú 0x9265:shù,xù 0x9266:zhēng 0x9267:mǔ 0x9268:xǐ,nǐ,niě 0x9269:xǐ,niè 0x926A:dì 0x926B:jiā 0x926C:mù 0x926D:tǎn 0x926E:huán,shén,shēn 0x926F:yǐ 0x9270:sī 0x9271:kuàng 0x9272:kǎ 0x9273:běi 0x9274:jiàn 0x9275:tóng,zhuó 0x9276:xíng 0x9277:hóng 0x9278:jiǎo 0x9279:chǐ 0x927A:èr,kēng,ěr 0x927B:luò,gē,gè 0x927C:bǐng,píng 0x927D:shì 0x927E:móu,máo 0x927F:jiā,gē,kē,hā 0x9280:yín 0x9281:jūn 0x9282:zhōu 0x9283:chòng 0x9284:xiǎng,jiōng 0x9285:tóng 0x9286:mò 0x9287:lèi 0x9288:jī 0x9289:yù,sì 0x928A:xù,huì 0x928B:rén,rěn 0x928C:zùn 0x928D:zhì 0x928E:qióng,qiōng 0x928F:shàn,shuò 0x9290:chì,lì 0x9291:xiǎn,xiān,xǐ 0x9292:xíng,jiān 0x9293:quán 0x9294:pī 0x9295:tiě,yí 0x9296:zhū 0x9297:xiàng,hóu 0x9298:míng 0x9299:kuǎ 0x929A:yáo,diào,tiáo,qiāo,yào 0x929B:xiān,tiǎn,guā 0x929C:xián 0x929D:xiū 0x929E:jūn 0x929F:chā 0x92A0:lǎo 0x92A1:jí 0x92A2:pǐ 0x92A3:rú 0x92A4:mǐ 0x92A5:yī 0x92A6:yīn 0x92A7:guāng 0x92A8:ǎn 0x92A9:diū 0x92AA:yǒu 0x92AB:sè 0x92AC:kào 0x92AD:qián 0x92AE:luán 0x92AF:sī 0x92B0:āi 0x92B1:diào 0x92B2:hàn 0x92B3:ruì 0x92B4:shì,zhì 0x92B5:kēng 0x92B6:qiú 0x92B7:xiāo 0x92B8:zhé,niè 0x92B9:xiù,yòu 0x92BA:zàng 0x92BB:tí,tī 0x92BC:cuò 0x92BD:guā 0x92BE:hòng,gǒng 0x92BF:zhōng,yōng 0x92C0:tōu,dòu,tù 0x92C1:lǚ,lǜ 0x92C2:méi,méng 0x92C3:láng 0x92C4:wàn 0x92C5:xīn,zǐ 0x92C6:yún,jūn 0x92C7:bèi 0x92C8:wù 0x92C9:sù 0x92CA:yù 0x92CB:chán,yán 0x92CC:dìng,tǐng 0x92CD:bó 0x92CE:hàn 0x92CF:jiá 0x92D0:hóng 0x92D1:cuān,jiān,juān 0x92D2:fēng 0x92D3:chān 0x92D4:wǎn 0x92D5:zhì 0x92D6:sī,tuó 0x92D7:xuān,juān,juàn 0x92D8:huá,wú,hú 0x92D9:yǔ,yú,wú 0x92DA:tiáo 0x92DB:kuàng 0x92DC:zhuó,chuò 0x92DD:lüè 0x92DE:xíng,xìng,jīng 0x92DF:qǐn,qiān,qīn,jìn 0x92E0:shèn 0x92E1:hán 0x92E2:lüè 0x92E3:yé 0x92E4:chú,jǔ 0x92E5:zèng 0x92E6:jū,jú 0x92E7:xiàn 0x92E8:tiě,é 0x92E9:máng 0x92EA:pù,pū 0x92EB:lí 0x92EC:pàn 0x92ED:ruì,duì,yuè 0x92EE:chéng 0x92EF:gào 0x92F0:lǐ 0x92F1:tè 0x92F2:bīng 0x92F3:zhù 0x92F4:zhèn 0x92F5:tū 0x92F6:liǔ 0x92F7:zuì,niè 0x92F8:jù,jū 0x92F9:chǎng 0x92FA:yuǎn,yuān,wǎn,wān 0x92FB:jiàn,jiān 0x92FC:gāng,gàng 0x92FD:diào 0x92FE:táo 0x92FF:cháng 0x9300:lún,fēn 0x9301:guǒ,kuǎ,kè 0x9302:líng 0x9303:pī 0x9304:lù 0x9305:lí 0x9306:qiāng 0x9307:póu,fú,péi 0x9308:juǎn 0x9309:mín 0x930A:zuì,zū 0x930B:péng,bèng 0x930C:àn 0x930D:pī,bēi,bī,pí 0x930E:xiàn,gàn,qiàn 0x930F:yā,yà 0x9310:zhuī 0x9311:lèi,lì 0x9312:kē,ā 0x9313:kōng 0x9314:tà 0x9315:kūn,gǔn 0x9316:dú 0x9317:nèi,zhuì,wèi 0x9318:chuí 0x9319:zī 0x931A:zhēng 0x931B:bēn 0x931C:niè 0x931D:zòng 0x931E:chún,duì,duò 0x931F:tán,xiān,yǎn 0x9320:dìng 0x9321:qí,yǐ 0x9322:qián,jiǎn 0x9323:zhuì,chuò 0x9324:jī 0x9325:yù 0x9326:jǐn 0x9327:guǎn 0x9328:máo 0x9329:chāng 0x932A:tiǎn,tǔn 0x932B:xī,tì 0x932C:liàn 0x932D:táo,diāo 0x932E:gù 0x932F:cuò,cù,xī 0x9330:shù 0x9331:zhēn 0x9332:lù,lǜ 0x9333:měng 0x9334:lù 0x9335:huā 0x9336:biǎo 0x9337:gá 0x9338:lái 0x9339:kěn 0x933A:fāng 0x933B:wu 0x933C:nài 0x933D:wàn,jiǎn 0x933E:zàn 0x933F:hǔ 0x9340:dé 0x9341:xiān 0x9342:piān 0x9343:huō 0x9344:liàng 0x9345:fǎ 0x9346:mén 0x9347:kǎi,jiē,jiě 0x9348:yīng 0x9349:dī,chí,dí,shì 0x934A:liàn,jiàn 0x934B:guō,guǒ 0x934C:xiǎn 0x934D:dù 0x934E:tú 0x934F:wéi 0x9350:zōng 0x9351:fù 0x9352:róu 0x9353:jí 0x9354:è 0x9355:jūn 0x9356:chěn,zhēn 0x9357:tí 0x9358:zhá 0x9359:hù 0x935A:yáng 0x935B:duàn 0x935C:xiá 0x935D:yú 0x935E:kēng 0x935F:shēng 0x9360:huáng 0x9361:wěi 0x9362:fù 0x9363:zhāo 0x9364:chā 0x9365:qiè 0x9366:shī,shé 0x9367:hōng 0x9368:kuí 0x9369:tiǎn,nuò 0x936A:móu 0x936B:qiāo 0x936C:qiāo 0x936D:hóu 0x936E:tōu 0x936F:cōng 0x9370:huán 0x9371:yè,xié 0x9372:mín 0x9373:jiàn 0x9374:duān 0x9375:jiàn 0x9376:sōng,sī 0x9377:kuí 0x9378:hú 0x9379:xuān 0x937A:duǒ,dǔ,zhě 0x937B:jié 0x937C:zhēn,qián 0x937D:biān 0x937E:zhōng 0x937F:zī 0x9380:xiū 0x9381:yé 0x9382:měi 0x9383:pài 0x9384:āi 0x9385:jiè 0x9386:qian 0x9387:méi 0x9388:suǒ,chā 0x9389:dá,tà 0x938A:bàng,pāng 0x938B:xiá 0x938C:lián 0x938D:suǒ,sè 0x938E:kài 0x938F:liú 0x9390:yáo,zú 0x9391:yè,tà,gé 0x9392:nòu,hāo 0x9393:wēng 0x9394:róng 0x9395:táng 0x9396:suǒ 0x9397:qiāng,chēng,qiàng 0x9398:lì,gé 0x9399:shuò 0x939A:chuí,duī,zhuì 0x939B:bó 0x939C:pán 0x939D:dā,sà 0x939E:bī,pī 0x939F:sǎng 0x93A0:gāng 0x93A1:zī 0x93A2:wū 0x93A3:yíng,yīng,jiǒng 0x93A4:huàng 0x93A5:tiáo 0x93A6:liú,liù 0x93A7:kǎi 0x93A8:sǔn 0x93A9:shā,shì,sè 0x93AA:sōu 0x93AB:wàn 0x93AC:hào,gǎo 0x93AD:zhèn 0x93AE:zhèn,zhēn,tián 0x93AF:láng,luǒ 0x93B0:yì 0x93B1:yuán 0x93B2:tǎng 0x93B3:niè 0x93B4:xí 0x93B5:jiā 0x93B6:gē 0x93B7:mǎ 0x93B8:juān 0x93B9:sòng 0x93BA:zǔ 0x93BB:suǒ 0x93BC:xià 0x93BD:fēng 0x93BE:wēn 0x93BF:ná 0x93C0:lǔ 0x93C1:suǒ 0x93C2:ōu,kōu 0x93C3:zú,chuò 0x93C4:tuán 0x93C5:xiū,xiù 0x93C6:guàn 0x93C7:xuàn,xuán 0x93C8:liàn,lián 0x93C9:shòu,sōu 0x93CA:ào 0x93CB:mǎn 0x93CC:mò 0x93CD:luó 0x93CE:bì 0x93CF:wèi 0x93D0:liú,liù,liáo 0x93D1:dí,dī 0x93D2:sǎn,qiāo,càn 0x93D3:zǒng,cōng 0x93D4:yí 0x93D5:lù,áo 0x93D6:áo,biāo 0x93D7:kēng 0x93D8:qiāng 0x93D9:cuī 0x93DA:qī 0x93DB:cháng 0x93DC:tāng,táng 0x93DD:màn 0x93DE:yōng 0x93DF:chǎn 0x93E0:fēng 0x93E1:jìng 0x93E2:biāo 0x93E3:shù 0x93E4:lòu,lǘ 0x93E5:xiù 0x93E6:cōng 0x93E7:lóng 0x93E8:zàn 0x93E9:jiàn,zàn 0x93EA:cáo 0x93EB:lí 0x93EC:xià 0x93ED:xī 0x93EE:kāng 0x93EF:shuǎng 0x93F0:bèng 0x93F1:zhang 0x93F2:qian 0x93F3:chēng 0x93F4:lù 0x93F5:huá 0x93F6:jí 0x93F7:pú 0x93F8:huì,suì,ruì 0x93F9:qiǎng,qiāng 0x93FA:pō 0x93FB:lín 0x93FC:sè 0x93FD:xiù 0x93FE:sǎn,xiàn,sà 0x93FF:chēng 0x9400:kuì 0x9401:sī 0x9402:liú 0x9403:náo,nào 0x9404:huáng 0x9405:piě 0x9406:suì 0x9407:fán 0x9408:qiáo 0x9409:quān 0x940A:yáng 0x940B:tāng,tàng 0x940C:xiàng 0x940D:jué,yù 0x940E:jiāo 0x940F:zūn 0x9410:liáo 0x9411:qiè 0x9412:láo 0x9413:duì,duī,dūn 0x9414:xín 0x9415:zān 0x9416:jī,qí 0x9417:jiǎn 0x9418:zhōng 0x9419:dèng,dēng 0x941A:yā 0x941B:yǐng 0x941C:duī,dūn 0x941D:jué 0x941E:nòu 0x941F:zān,tì 0x9420:pǔ 0x9421:tiě 0x9422:fán 0x9423:chēng 0x9424:dǐng 0x9425:shàn 0x9426:kāi 0x9427:jiān,jiǎn 0x9428:fèi 0x9429:suì 0x942A:lǔ 0x942B:juān 0x942C:huì 0x942D:yù 0x942E:lián 0x942F:zhuó 0x9430:qiāo,sào,cáo 0x9431:jiàn,qiān 0x9432:zhuó,shǔ 0x9433:léi 0x9434:bì,bèi 0x9435:tiě,dié 0x9436:huán,xuàn 0x9437:yè 0x9438:duó 0x9439:guǒ,guō 0x943A:dāng,chēng,tāng 0x943B:jù,qú 0x943C:fén,bēn 0x943D:dá 0x943E:bèi 0x943F:yì 0x9440:ài 0x9441:zōng 0x9442:xùn 0x9443:diào 0x9444:zhù 0x9445:héng 0x9446:zhuì 0x9447:jī 0x9448:niè,nǐ 0x9449:hé 0x944A:huò 0x944B:qīng 0x944C:bīn 0x944D:yīng 0x944E:kuì 0x944F:níng,nǐng 0x9450:xū,rú,róu 0x9451:jiàn 0x9452:jiàn 0x9453:qiǎn 0x9454:chǎ 0x9455:zhì 0x9456:miè,mì 0x9457:lí 0x9458:léi,lěi 0x9459:jī 0x945A:zuàn 0x945B:kuàng,gǒng 0x945C:shǎng 0x945D:péng 0x945E:là 0x945F:dú 0x9460:shuò,yuè,lì 0x9461:chuò 0x9462:lǜ 0x9463:biāo 0x9464:bào 0x9465:lǔ 0x9466:xian 0x9467:kuān 0x9468:lóng 0x9469:è 0x946A:lú 0x946B:xīn,xùn 0x946C:jiàn 0x946D:làn,lán 0x946E:bó 0x946F:jiān,qiān 0x9470:yào,yuè 0x9471:chán 0x9472:xiāng,ráng 0x9473:jiàn 0x9474:xī,huī 0x9475:guàn 0x9476:cáng 0x9477:niè 0x9478:lěi 0x9479:cuān,cuàn 0x947A:qú 0x947B:pàn 0x947C:luó 0x947D:zuān,zuàn 0x947E:luán 0x947F:záo,zuò,zú,zào 0x9480:niè,yǐ 0x9481:jué 0x9482:tǎng 0x9483:zhú 0x9484:lán 0x9485:jīn 0x9486:gá 0x9487:yǐ 0x9488:zhēn 0x9489:dīng,dìng 0x948A:zhāo 0x948B:pō 0x948C:liǎo,liào 0x948D:tǔ 0x948E:qiān 0x948F:chuàn 0x9490:shān,shàn 0x9491:sà 0x9492:fán 0x9493:diào 0x9494:mén 0x9495:nǚ 0x9496:yáng 0x9497:chāi 0x9498:xíng 0x9499:gài 0x949A:bù 0x949B:tài 0x949C:jù 0x949D:dùn 0x949E:chāo 0x949F:zhōng 0x94A0:nà 0x94A1:bèi 0x94A2:gāng,gàng 0x94A3:bǎn 0x94A4:qián 0x94A5:yào,yuè 0x94A6:qīn 0x94A7:jūn 0x94A8:wū 0x94A9:gōu 0x94AA:kàng 0x94AB:fāng 0x94AC:huǒ 0x94AD:tǒu,dǒu 0x94AE:niǔ 0x94AF:bǎ,pá 0x94B0:yù 0x94B1:qián 0x94B2:zhēng 0x94B3:qián 0x94B4:gǔ 0x94B5:bō 0x94B6:kē 0x94B7:pǒ 0x94B8:bū 0x94B9:bó 0x94BA:yuè 0x94BB:zuān,zuàn 0x94BC:mù 0x94BD:tǎn 0x94BE:jiǎ 0x94BF:diàn,tián 0x94C0:yóu 0x94C1:tiě 0x94C2:bó 0x94C3:líng 0x94C4:shuò 0x94C5:qiān,yán 0x94C6:mǎo 0x94C7:bào 0x94C8:shì 0x94C9:xuàn 0x94CA:tā,tuó 0x94CB:bì 0x94CC:ní 0x94CD:pī,pí 0x94CE:duó 0x94CF:xíng 0x94D0:kào 0x94D1:lǎo 0x94D2:ěr 0x94D3:máng 0x94D4:yā 0x94D5:yǒu 0x94D6:chéng 0x94D7:jiá 0x94D8:yé 0x94D9:náo 0x94DA:zhì 0x94DB:dāng,chēng 0x94DC:tóng 0x94DD:lǚ 0x94DE:diào 0x94DF:yīn 0x94E0:kǎi 0x94E1:zhá 0x94E2:zhū 0x94E3:xǐ,xiǎn 0x94E4:dìng,tǐng 0x94E5:diū 0x94E6:xiān 0x94E7:huá 0x94E8:quán 0x94E9:shā 0x94EA:hā 0x94EB:diào,yáo 0x94EC:gè 0x94ED:míng 0x94EE:zhēng,zhèng 0x94EF:sè 0x94F0:jiǎo 0x94F1:yī 0x94F2:chǎn 0x94F3:chòng 0x94F4:tāng 0x94F5:ǎn 0x94F6:yín 0x94F7:rú 0x94F8:zhù 0x94F9:láo 0x94FA:pù,pū 0x94FB:wú,yǔ 0x94FC:lái 0x94FD:tè 0x94FE:liàn 0x94FF:kēng 0x9500:xiāo 0x9501:suǒ 0x9502:lǐ 0x9503:zèng 0x9504:chú 0x9505:guō 0x9506:gào 0x9507:é 0x9508:xiù 0x9509:cuò 0x950A:lüè 0x950B:fēng 0x950C:xīn 0x950D:liǔ 0x950E:kāi 0x950F:jiǎn,jiàn 0x9510:ruì 0x9511:tī 0x9512:láng 0x9513:qǐn 0x9514:jū,jú 0x9515:ā 0x9516:qiāng 0x9517:zhě 0x9518:nuò 0x9519:cuò 0x951A:máo 0x951B:bēn 0x951C:qí 0x951D:dé 0x951E:kè 0x951F:kūn 0x9520:chāng 0x9521:xī 0x9522:gù 0x9523:luó 0x9524:chuí 0x9525:zhuī 0x9526:jǐn 0x9527:zhì 0x9528:xiān 0x9529:juǎn 0x952A:huō 0x952B:péi 0x952C:tán,xiān 0x952D:dìng 0x952E:jiàn 0x952F:jù,jū 0x9530:měng 0x9531:zī 0x9532:qiè 0x9533:yīng 0x9534:kǎi 0x9535:qiāng 0x9536:sī 0x9537:è 0x9538:chā 0x9539:qiāo 0x953A:zhōng 0x953B:duàn 0x953C:sōu 0x953D:huáng 0x953E:huán 0x953F:āi 0x9540:dù 0x9541:měi 0x9542:lòu 0x9543:zī 0x9544:fèi 0x9545:méi 0x9546:mò 0x9547:zhèn 0x9548:bó 0x9549:gé 0x954A:niè 0x954B:tǎng 0x954C:juān 0x954D:niè 0x954E:ná 0x954F:liú,liù 0x9550:gǎo,hào 0x9551:bàng 0x9552:yì 0x9553:jiā 0x9554:bīn 0x9555:róng 0x9556:biāo 0x9557:tāng,táng 0x9558:màn 0x9559:luó 0x955A:bèng 0x955B:yōng 0x955C:jìng 0x955D:dī,dí 0x955E:zú 0x955F:xuàn 0x9560:liú 0x9561:chán,tán,xín 0x9562:jué 0x9563:liào 0x9564:pú 0x9565:lǔ 0x9566:duì,dūn 0x9567:lán 0x9568:pǔ 0x9569:cuān 0x956A:qiāng,qiǎng 0x956B:dèng 0x956C:huò 0x956D:léi 0x956E:huán 0x956F:zhuó 0x9570:lián 0x9571:yì 0x9572:chǎ 0x9573:biāo 0x9574:là 0x9575:chán 0x9576:xiāng 0x9577:zhǎng,cháng,zhàng 0x9578:cháng 0x9579:jiǔ 0x957A:ǎo 0x957B:dié 0x957C:qū 0x957D:liǎo,liáo 0x957E:mí 0x957F:zhǎng,cháng 0x9580:mén 0x9581:mà 0x9582:shuān 0x9583:shǎn 0x9584:huò,shǎn 0x9585:mén 0x9586:yán 0x9587:bì 0x9588:hàn,bì 0x9589:bì 0x958A:shān 0x958B:kāi,qiān 0x958C:kàng 0x958D:bēng 0x958E:hóng 0x958F:rùn 0x9590:sàn 0x9591:xián 0x9592:xián,jiàn,jiān,jiǎn 0x9593:jiān,jiàn,jiǎn 0x9594:mǐn,mín 0x9595:xiā,xiǎ 0x9596:shui 0x9597:dòu 0x9598:zhá,yā,gē 0x9599:nào 0x959A:zhān 0x959B:pēng,pèng 0x959C:xiǎ,ě 0x959D:líng 0x959E:biàn,guān 0x959F:bì 0x95A0:rùn 0x95A1:ài,hé,hài,gāi,kǎi 0x95A2:guān 0x95A3:gé 0x95A4:gé,gē,hé 0x95A5:fá 0x95A6:chù 0x95A7:hòng,xiàng 0x95A8:guī 0x95A9:mǐn 0x95AA:sē 0x95AB:kǔn 0x95AC:làng,lǎng,liǎng 0x95AD:lǘ 0x95AE:tíng,tǐng 0x95AF:shà 0x95B0:jú 0x95B1:yuè 0x95B2:yuè 0x95B3:chǎn 0x95B4:qù 0x95B5:lìn 0x95B6:chāng,tāng 0x95B7:shài,shā 0x95B8:kǔn 0x95B9:yān 0x95BA:wén 0x95BB:yán,yǎn,yàn 0x95BC:è,yù,yān 0x95BD:hūn 0x95BE:yù 0x95BF:wén 0x95C0:hòng 0x95C1:bāo 0x95C2:hòng,xiàng,juǎn 0x95C3:qù 0x95C4:yǎo 0x95C5:wén 0x95C6:bǎn,pǎn 0x95C7:àn,ǎn,ān,yīn,yǐn 0x95C8:wéi 0x95C9:yīn 0x95CA:kuò 0x95CB:què,jué,kuí 0x95CC:lán,làn 0x95CD:dū,shé 0x95CE:quán 0x95CF:fēng 0x95D0:tián 0x95D1:niè 0x95D2:tà 0x95D3:kǎi 0x95D4:hé 0x95D5:què,quē,jué 0x95D6:chuǎng,chèn 0x95D7:guān 0x95D8:dòu 0x95D9:qǐ 0x95DA:kuī 0x95DB:táng,tāng,chāng 0x95DC:guān,wān,wǎn 0x95DD:piáo 0x95DE:kàn,hǎn,xiàn 0x95DF:xì,sè,tà 0x95E0:huì 0x95E1:chǎn 0x95E2:pì,pī 0x95E3:dàng,tāng 0x95E4:huán 0x95E5:tà 0x95E6:wén 0x95E7:tā 0x95E8:mén 0x95E9:shuān 0x95EA:shǎn 0x95EB:yán 0x95EC:hàn 0x95ED:bì 0x95EE:wèn 0x95EF:chuǎng 0x95F0:rùn 0x95F1:wéi 0x95F2:xián 0x95F3:hóng 0x95F4:jiān,jiàn 0x95F5:mǐn 0x95F6:kāng,kàng 0x95F7:mèn,mēn 0x95F8:zhá 0x95F9:nào 0x95FA:guī 0x95FB:wén 0x95FC:tà 0x95FD:mǐn 0x95FE:lǘ 0x95FF:kǎi 0x9600:fá 0x9601:gé 0x9602:hé 0x9603:kǔn 0x9604:jiū 0x9605:yuè 0x9606:láng,làng 0x9607:dū,shé 0x9608:yù 0x9609:yān 0x960A:chāng 0x960B:xì 0x960C:wén 0x960D:hūn 0x960E:yán 0x960F:è,yān 0x9610:chǎn 0x9611:lán 0x9612:qù 0x9613:huì 0x9614:kuò 0x9615:què 0x9616:hé 0x9617:tián 0x9618:dá,tà 0x9619:quē,què 0x961A:hǎn,kàn 0x961B:huán 0x961C:fù 0x961D:fù 0x961E:lè 0x961F:duì 0x9620:xìn 0x9621:qiān 0x9622:wù,wéi 0x9623:gài,yì 0x9624:zhì,yí,tuó 0x9625:yīn 0x9626:yáng 0x9627:dǒu 0x9628:è,ài 0x9629:shēng 0x962A:bǎn 0x962B:péi 0x962C:kēng,kàng,gāng 0x962D:yǔn,yǎn 0x962E:ruǎn,yuán 0x962F:zhǐ 0x9630:pí 0x9631:jǐng 0x9632:fáng 0x9633:yáng 0x9634:yīn 0x9635:zhèn 0x9636:jiē 0x9637:chēng 0x9638:è,ài 0x9639:qū 0x963A:dǐ 0x963B:zǔ,zhù 0x963C:zuò 0x963D:diàn,yán 0x963E:lǐng,líng 0x963F:ā,ē,ě,ǎ,à,a 0x9640:tuó,duò 0x9641:tuó,zhì,yǐ 0x9642:bēi,pí,bì,pō 0x9643:bǐng 0x9644:fù,bù,fū 0x9645:jì 0x9646:lù,liù 0x9647:lǒng 0x9648:chén 0x9649:xíng 0x964A:duò 0x964B:lòu 0x964C:mò 0x964D:jiàng,xiáng,xiàng 0x964E:shū 0x964F:duò,suí 0x9650:xiàn,wěn 0x9651:ér 0x9652:guǐ 0x9653:yū 0x9654:gāi 0x9655:shǎn 0x9656:jùn 0x9657:qiào 0x9658:xíng,jìng 0x9659:chún 0x965A:fù,wǔ 0x965B:bì 0x965C:xiá 0x965D:shǎn 0x965E:shēng 0x965F:zhì,dé 0x9660:pū,bū,bù 0x9661:dǒu 0x9662:yuàn 0x9663:zhèn 0x9664:chú,zhù,shū 0x9665:xiàn 0x9666:dǎo 0x9667:niè 0x9668:yǔn 0x9669:xiǎn 0x966A:péi 0x966B:fèi,péi 0x966C:zōu,zhé 0x966D:yì,yǐ 0x966E:duì 0x966F:lún,lùn 0x9670:yīn,yìn,ān 0x9671:jū 0x9672:chuí 0x9673:chén,zhèn 0x9674:pí,bì 0x9675:líng 0x9676:táo,yáo,dào 0x9677:xiàn 0x9678:lù,liù 0x9679:shēng 0x967A:xiǎn 0x967B:yīn 0x967C:zhǔ,dǔ 0x967D:yáng 0x967E:réng,ér 0x967F:xiá 0x9680:chóng 0x9681:yàn,yǎn 0x9682:yīn 0x9683:shù,yú,yáo 0x9684:dī,tí 0x9685:yú 0x9686:lóng,lōng 0x9687:wēi 0x9688:wēi 0x9689:niè 0x968A:duì,zhuì,suì 0x968B:suí,duò,tuǒ,tuō 0x968C:ǎn 0x968D:huáng 0x968E:jiē 0x968F:suí 0x9690:yǐn 0x9691:gài,gāi,ái,qí 0x9692:yǎn 0x9693:huī,duò 0x9694:gé,rǒng,jī 0x9695:yǔn,yuán 0x9696:wù 0x9697:kuí,wěi,guī 0x9698:ài,è 0x9699:xì 0x969A:táng 0x969B:jì 0x969C:zhàng,zhāng 0x969D:dǎo 0x969E:áo 0x969F:xì 0x96A0:yǐn 0x96A1:sà 0x96A2:rǎo 0x96A3:lín 0x96A4:tuí 0x96A5:dèng 0x96A6:jiǎo,pí 0x96A7:suì,zhuì 0x96A8:suí 0x96A9:ào,yù 0x96AA:xiǎn,jiǎn,yán 0x96AB:fén 0x96AC:nǐ 0x96AD:ér 0x96AE:jī 0x96AF:dǎo 0x96B0:xí,xiè 0x96B1:yǐn,yìn 0x96B2:zhì 0x96B3:huī 0x96B4:lǒng 0x96B5:xī 0x96B6:lì,dài,yì,dì 0x96B7:lì 0x96B8:lì 0x96B9:zhuī,cuī,wéi 0x96BA:hú,què,hè 0x96BB:zhī,huò 0x96BC:sǔn 0x96BD:juàn,jùn 0x96BE:nán,nàn 0x96BF:yì 0x96C0:què,qiāo,qiǎo 0x96C1:yàn 0x96C2:qín 0x96C3:qiān,jiè 0x96C4:xióng 0x96C5:yǎ,yā,yá 0x96C6:jí 0x96C7:gù,hù 0x96C8:huán 0x96C9:zhì,kǎi,yǐ,sì 0x96CA:gòu 0x96CB:juàn,jùn,zuì 0x96CC:cí 0x96CD:yōng 0x96CE:jū 0x96CF:chú 0x96D0:hū 0x96D1:zá 0x96D2:luò 0x96D3:yú 0x96D4:chóu 0x96D5:diāo 0x96D6:suī 0x96D7:hàn 0x96D8:wò 0x96D9:shuāng 0x96DA:guàn,huán 0x96DB:chú,jú,jù 0x96DC:zá 0x96DD:yōng 0x96DE:jī 0x96DF:xī 0x96E0:chóu 0x96E1:liù 0x96E2:lí,lì,lǐ,chī,gǔ 0x96E3:nán,nàn,nuó 0x96E4:xué 0x96E5:zá 0x96E6:jí 0x96E7:jí 0x96E8:yǔ,yù 0x96E9:yú,yù,xū 0x96EA:xuě 0x96EB:nǎ 0x96EC:fǒu 0x96ED:sè,xí 0x96EE:mù 0x96EF:wén 0x96F0:fēn 0x96F1:pāng,páng,fāng 0x96F2:yún 0x96F3:lì 0x96F4:chì 0x96F5:yāng 0x96F6:líng,lián 0x96F7:léi,lèi 0x96F8:án 0x96F9:báo 0x96FA:wù,méng 0x96FB:diàn 0x96FC:dàng 0x96FD:hù,hū 0x96FE:wù 0x96FF:diào 0x9700:xū,nuò,rú,ruǎn 0x9701:jì 0x9702:mù 0x9703:chén 0x9704:xiāo,xiào 0x9705:zhà,zhá,shà,sà,yì 0x9706:tíng 0x9707:zhèn,shēn 0x9708:pèi 0x9709:méi 0x970A:líng 0x970B:qī 0x970C:zhōu 0x970D:huò,hè,suǒ 0x970E:shà 0x970F:fēi 0x9710:hóng 0x9711:zhān 0x9712:yīn 0x9713:ní 0x9714:zhù 0x9715:tún 0x9716:lín 0x9717:líng 0x9718:dòng 0x9719:yīng,yāng 0x971A:wù 0x971B:líng 0x971C:shuāng 0x971D:líng 0x971E:xiá 0x971F:hóng 0x9720:yīn 0x9721:mài 0x9722:mài 0x9723:yǔn 0x9724:liù 0x9725:mèng 0x9726:bīn 0x9727:wù,méng 0x9728:wèi 0x9729:kuò 0x972A:yín 0x972B:xí 0x972C:yì 0x972D:ǎi 0x972E:dàn 0x972F:tèng 0x9730:sǎn,xiàn 0x9731:yù 0x9732:lù,lòu 0x9733:lóng 0x9734:dài 0x9735:jí 0x9736:pāng 0x9737:yáng 0x9738:bà,pò 0x9739:pī 0x973A:wéi 0x973B:fēng 0x973C:xì 0x973D:jì 0x973E:mái,lí 0x973F:méng,mào,wù 0x9740:méng 0x9741:léi 0x9742:lì 0x9743:huò,suǐ,suǒ 0x9744:ǎi 0x9745:fèi 0x9746:dài 0x9747:lóng,líng 0x9748:líng 0x9749:ài,yǐ 0x974A:fēng 0x974B:lì 0x974C:bǎo 0x974D:hè 0x974E:hè 0x974F:hè 0x9750:bìng 0x9751:qīng 0x9752:qīng,jīng 0x9753:jìng,liàng 0x9754:tiān 0x9755:zhēn 0x9756:jìng 0x9757:chēng 0x9758:qìng,qīng,jìng 0x9759:jìng 0x975A:jìng,liáng 0x975B:diàn 0x975C:jìng 0x975D:tiān 0x975E:fēi,fěi 0x975F:fēi 0x9760:kào 0x9761:mí,mǐ,má 0x9762:miàn 0x9763:miàn 0x9764:bào 0x9765:yè 0x9766:tiǎn,miǎn 0x9767:huì 0x9768:yè,yǎn 0x9769:gé,jí 0x976A:dīng 0x976B:chá 0x976C:qián,jiān,kān,hàn 0x976D:rèn 0x976E:dí 0x976F:dù 0x9770:wù 0x9771:rèn 0x9772:qín 0x9773:jìn 0x9774:xuē 0x9775:niǔ 0x9776:bǎ,bà 0x9777:yǐn 0x9778:sǎ,tā 0x9779:nà 0x977A:mò,wà 0x977B:zǔ 0x977C:dá 0x977D:bàn 0x977E:yì 0x977F:yào 0x9780:táo 0x9781:bèi,bài,bì 0x9782:jiē 0x9783:hóng 0x9784:páo 0x9785:yāng,yǎng,yàng 0x9786:bǐng 0x9787:yīn 0x9788:gé,sǎ,tà 0x9789:táo 0x978A:jié,jí 0x978B:xié,wā 0x978C:ān 0x978D:ān 0x978E:hén 0x978F:gǒng 0x9790:qiǎ 0x9791:dá 0x9792:qiáo 0x9793:tīng 0x9794:mán,mèn 0x9795:yìng,biān 0x9796:suī 0x9797:tiáo 0x9798:qiào,shāo 0x9799:xuàn,juān 0x979A:kòng 0x979B:běng 0x979C:tà 0x979D:shàng,zhǎng 0x979E:bǐng,bì,pí,bēi 0x979F:kuò 0x97A0:jū,qū,qiōng 0x97A1:la 0x97A2:xiè,zhá,dié 0x97A3:róu 0x97A4:bāng 0x97A5:ēng 0x97A6:qiū 0x97A7:qiū 0x97A8:hé,shé,mò 0x97A9:qiào 0x97AA:mù,móu 0x97AB:jū,qū 0x97AC:jiān,jiàn 0x97AD:biān 0x97AE:dī 0x97AF:jiān 0x97B0:wēn 0x97B1:tāo 0x97B2:gōu 0x97B3:tà 0x97B4:bèi,fú,bù,bài 0x97B5:xié 0x97B6:pán 0x97B7:gé 0x97B8:bì,bǐng 0x97B9:kuò 0x97BA:tāng 0x97BB:lóu 0x97BC:guì,huì 0x97BD:qiáo,qiāo,juē 0x97BE:xuē 0x97BF:jī 0x97C0:jiān 0x97C1:jiāng 0x97C2:chàn 0x97C3:dá,tà 0x97C4:hù 0x97C5:xiǎn 0x97C6:qiān 0x97C7:dú 0x97C8:wà 0x97C9:jiān 0x97CA:lán 0x97CB:wéi,huí 0x97CC:rèn 0x97CD:fú 0x97CE:mèi 0x97CF:quàn,juàn 0x97D0:gé 0x97D1:wěi 0x97D2:qiào,shāo 0x97D3:hán 0x97D4:chàng 0x97D5:kuò 0x97D6:rǒu 0x97D7:yùn 0x97D8:shè 0x97D9:wěi 0x97DA:gé 0x97DB:bài,fú 0x97DC:tāo,tào 0x97DD:gōu 0x97DE:yùn,wēn 0x97DF:gāo 0x97E0:bì 0x97E1:wěi,xuē 0x97E2:suì,huì 0x97E3:dú 0x97E4:wà 0x97E5:dú 0x97E6:wéi 0x97E7:rèn 0x97E8:fú 0x97E9:hán 0x97EA:wěi 0x97EB:yùn 0x97EC:tāo 0x97ED:jiǔ 0x97EE:jiǔ 0x97EF:xiān 0x97F0:xiè 0x97F1:xiān 0x97F2:jī 0x97F3:yīn 0x97F4:zá 0x97F5:yùn 0x97F6:sháo 0x97F7:lè 0x97F8:péng 0x97F9:huáng,yīng 0x97FA:yīng 0x97FB:yùn 0x97FC:péng 0x97FD:ān 0x97FE:yīn 0x97FF:xiǎng 0x9800:hù 0x9801:yè,xié 0x9802:dǐng 0x9803:qǐng,qīng,kuǐ 0x9804:kuí 0x9805:xiàng 0x9806:shùn 0x9807:hān,àn 0x9808:xū 0x9809:yí 0x980A:xū 0x980B:ě 0x980C:sòng,róng 0x980D:kuǐ 0x980E:qí,kěn 0x980F:háng,gāng,hàng 0x9810:yù 0x9811:wán,kūn 0x9812:bān,fén 0x9813:dùn,dú 0x9814:dí 0x9815:dān,diàn 0x9816:pàn 0x9817:pō,pǒ,pò,pí 0x9818:lǐng 0x9819:chè 0x981A:jǐng 0x981B:lèi 0x981C:hé,hán,qīn,gé 0x981D:qiāo 0x981E:è,àn 0x981F:é 0x9820:wěi 0x9821:xié,jiá,jié 0x9822:kuò 0x9823:shěn 0x9824:yí 0x9825:yí 0x9826:hái,kē,ké 0x9827:duǐ,duī 0x9828:yǔ,biàn 0x9829:pīng,pǐng 0x982A:lèi 0x982B:fǔ,tāo,tiào 0x982C:jiá 0x982D:tóu,tou 0x982E:huì 0x982F:kuí 0x9830:jiá 0x9831:luō 0x9832:tǐng 0x9833:chēng 0x9834:yǐng,jǐng 0x9835:yūn 0x9836:hú 0x9837:hàn 0x9838:jǐng,gěng 0x9839:tuí 0x983A:tuí 0x983B:pín,bīn 0x983C:lài 0x983D:tuí 0x983E:zī 0x983F:zī 0x9840:chuí 0x9841:dìng,dǐng 0x9842:lài,lái 0x9843:tán,shǎn 0x9844:hàn 0x9845:qiān 0x9846:kē,kě,kuǎn 0x9847:cuì,zú 0x9848:xuǎn,jiōng,jiǒng,xiàn 0x9849:qīn 0x984A:yí 0x984B:sāi 0x984C:tí,dì 0x984D:é 0x984E:è 0x984F:yán 0x9850:wèn,hún,hùn 0x9851:kǎn,yàn 0x9852:yóng,yú 0x9853:zhuān 0x9854:yán,yá 0x9855:xiǎn 0x9856:xìn 0x9857:yǐ 0x9858:yuàn,yuǎn 0x9859:sǎng 0x985A:diān,tián,tiàn 0x985B:diān 0x985C:jiǎng 0x985D:kuī,kuǎ 0x985E:lèi 0x985F:láo 0x9860:piǎo 0x9861:wài,zhuài 0x9862:mán 0x9863:cù 0x9864:yáo,qiào 0x9865:hào 0x9866:qiáo 0x9867:gù 0x9868:xùn 0x9869:yǎn,qìn,hàn,qiǎn 0x986A:huì 0x986B:chàn,zhàn,shān 0x986C:rú 0x986D:méng 0x986E:bīn 0x986F:xiǎn,xiàn 0x9870:pín 0x9871:lú 0x9872:lǎn,lǐn 0x9873:niè 0x9874:quán 0x9875:yè 0x9876:dǐng 0x9877:qǐng 0x9878:hān 0x9879:xiàng 0x987A:shùn 0x987B:xū 0x987C:xū 0x987D:wán 0x987E:gù 0x987F:dùn,dú 0x9880:qí 0x9881:bān 0x9882:sòng 0x9883:háng 0x9884:yù 0x9885:lú 0x9886:lǐng 0x9887:pǒ,pō 0x9888:jǐng,gěng 0x9889:jié,xié 0x988A:jiá 0x988B:tǐng 0x988C:hé,gé 0x988D:yǐng 0x988E:jiǒng 0x988F:kē,ké 0x9890:yí 0x9891:pín 0x9892:huì 0x9893:tuí 0x9894:hàn 0x9895:yǐng 0x9896:yǐng 0x9897:kē 0x9898:tí 0x9899:yóng 0x989A:è 0x989B:zhuān 0x989C:yán 0x989D:é 0x989E:niè 0x989F:mān 0x98A0:diān 0x98A1:sǎng 0x98A2:hào 0x98A3:lèi 0x98A4:chàn,zhàn 0x98A5:rú 0x98A6:pín 0x98A7:quán 0x98A8:fēng,fèng,fěng 0x98A9:biāo,diū 0x98AA:guā 0x98AB:fú 0x98AC:xiā 0x98AD:zhǎn 0x98AE:biāo,páo 0x98AF:sà,lì 0x98B0:bá,fú 0x98B1:tái 0x98B2:liè 0x98B3:guā,jǐ 0x98B4:xuàn 0x98B5:shāo,xiāo 0x98B6:jù 0x98B7:biāo 0x98B8:sī 0x98B9:wěi 0x98BA:yáng 0x98BB:yáo,yào 0x98BC:sōu 0x98BD:kǎi 0x98BE:sōu,sāo 0x98BF:fān 0x98C0:liú 0x98C1:xí 0x98C2:liù,liáo 0x98C3:piāo,piào 0x98C4:piāo 0x98C5:liú 0x98C6:biāo 0x98C7:biāo 0x98C8:biāo 0x98C9:liáo 0x98CA:biāo 0x98CB:sè 0x98CC:fēng 0x98CD:xiū 0x98CE:fēng 0x98CF:yáng 0x98D0:zhǎn 0x98D1:biāo 0x98D2:sà 0x98D3:jù 0x98D4:sī 0x98D5:sōu 0x98D6:yáo 0x98D7:liú 0x98D8:piāo 0x98D9:biāo 0x98DA:biāo 0x98DB:fēi 0x98DC:fān 0x98DD:fēi 0x98DE:fēi 0x98DF:shí,sì,yì 0x98E0:shí 0x98E1:cān 0x98E2:jī 0x98E3:dìng 0x98E4:sì 0x98E5:tuō 0x98E6:zhān,gān 0x98E7:sūn 0x98E8:xiǎng 0x98E9:tún,zhùn 0x98EA:rèn 0x98EB:yù 0x98EC:juàn,yǒng 0x98ED:chì,shì 0x98EE:yǐn 0x98EF:fàn 0x98F0:fàn 0x98F1:sūn,cān 0x98F2:yǐn,yìn 0x98F3:tǒu,zhù 0x98F4:yí,sì 0x98F5:zuò,zé 0x98F6:bì 0x98F7:jiě 0x98F8:tāo 0x98F9:bǎo 0x98FA:cí 0x98FB:tiè 0x98FC:sì 0x98FD:bǎo 0x98FE:shì,chì 0x98FF:duò 0x9900:hài 0x9901:rèn 0x9902:tiǎn,tián 0x9903:jiǎo,jiào 0x9904:jiá,hé 0x9905:bǐng 0x9906:yáo 0x9907:tóng 0x9908:cí 0x9909:xiǎng 0x990A:yǎng,yàng 0x990B:juàn 0x990C:ěr 0x990D:yàn 0x990E:le 0x990F:xī 0x9910:cān,sūn 0x9911:bō 0x9912:něi 0x9913:è 0x9914:bù,bū 0x9915:jùn 0x9916:dòu 0x9917:sù 0x9918:yú,yé 0x9919:shì,xī 0x991A:yáo 0x991B:hún,kūn 0x991C:guǒ 0x991D:shì 0x991E:jiàn 0x991F:zhuì 0x9920:bǐng 0x9921:xiàn,kàn 0x9922:bù 0x9923:yè 0x9924:tán,dàn 0x9925:fēi 0x9926:zhāng 0x9927:wèi,něi 0x9928:guǎn 0x9929:è 0x992A:nuǎn,nuàn 0x992B:yùn,hún 0x992C:hú 0x992D:huáng 0x992E:tiè 0x992F:huì 0x9930:jiān,zhān 0x9931:hóu 0x9932:ài,hé 0x9933:táng,xíng 0x9934:fēn 0x9935:wèi 0x9936:gǔ 0x9937:chā 0x9938:sòng 0x9939:táng 0x993A:bó 0x993B:gāo 0x993C:xì 0x993D:kuì 0x993E:liù,liú 0x993F:sōu 0x9940:táo,tāo,xiàn 0x9941:yè 0x9942:wēn 0x9943:mó 0x9944:táng 0x9945:mán 0x9946:bì 0x9947:yù 0x9948:xiū 0x9949:jǐn 0x994A:sǎn 0x994B:kuì,tuí 0x994C:zhuàn,xuǎn 0x994D:shàn 0x994E:chì 0x994F:dàn 0x9950:yì,yē,èn 0x9951:jī,qí 0x9952:ráo 0x9953:chēng 0x9954:yōng 0x9955:tāo 0x9956:wèi 0x9957:xiǎng 0x9958:zhān 0x9959:fēn 0x995A:hài 0x995B:méng 0x995C:yàn 0x995D:mó 0x995E:chán 0x995F:xiǎng 0x9960:luó 0x9961:zàn 0x9962:náng,nǎng 0x9963:shí 0x9964:dìng 0x9965:jī 0x9966:tuō 0x9967:táng,xíng 0x9968:tún 0x9969:xì 0x996A:rèn 0x996B:yù 0x996C:chì 0x996D:fàn 0x996E:yǐn,yìn 0x996F:jiàn 0x9970:shì 0x9971:bǎo 0x9972:sì 0x9973:duò 0x9974:yí 0x9975:ěr 0x9976:ráo 0x9977:xiǎng 0x9978:hé 0x9979:le 0x997A:jiǎo 0x997B:xī 0x997C:bǐng 0x997D:bō 0x997E:dòu 0x997F:è 0x9980:yú 0x9981:něi 0x9982:jùn 0x9983:guǒ 0x9984:hún 0x9985:xiàn 0x9986:guǎn 0x9987:chā 0x9988:kuì 0x9989:gǔ 0x998A:sōu 0x998B:chán 0x998C:yè 0x998D:mó 0x998E:bó 0x998F:liú,liù 0x9990:xiū 0x9991:jǐn 0x9992:mán 0x9993:sǎn 0x9994:zhuàn 0x9995:náng,nǎng 0x9996:shǒu 0x9997:kuí,qiú 0x9998:guó,xù 0x9999:xiāng 0x999A:fén 0x999B:bó 0x999C:nǐ 0x999D:bì 0x999E:bó,pò 0x999F:tú 0x99A0:hān 0x99A1:fēi 0x99A2:jiān 0x99A3:ān 0x99A4:ài 0x99A5:fù,bì 0x99A6:xiān 0x99A7:yūn,wò 0x99A8:xīn 0x99A9:fén 0x99AA:pīn 0x99AB:xīn 0x99AC:mǎ 0x99AD:yù 0x99AE:féng,píng 0x99AF:hàn,qián,hán 0x99B0:dí 0x99B1:tuó,duò,dài 0x99B2:zhé,tuō 0x99B3:chí 0x99B4:xún 0x99B5:zhù 0x99B6:zhī,shì 0x99B7:pèi 0x99B8:xìn,jìn 0x99B9:rì 0x99BA:sà 0x99BB:yǔn 0x99BC:wén 0x99BD:zhí 0x99BE:dàn,dǎn 0x99BF:lǘ 0x99C0:yóu 0x99C1:bó 0x99C2:bǎo 0x99C3:jué,kuài 0x99C4:tuó 0x99C5:yì 0x99C6:qū 0x99C7:wén 0x99C8:qū 0x99C9:jiōng 0x99CA:pǒ 0x99CB:zhāo 0x99CC:yuān 0x99CD:péi,pēng 0x99CE:zhòu 0x99CF:jù 0x99D0:zhù 0x99D1:nú 0x99D2:jū,jù 0x99D3:pī 0x99D4:zǎng,zù,zǔ 0x99D5:jià,jiā 0x99D6:líng 0x99D7:zhěn 0x99D8:tái,dài,zhài,tāi 0x99D9:fù 0x99DA:yǎng 0x99DB:shǐ 0x99DC:bì 0x99DD:tuó 0x99DE:tuó 0x99DF:sì 0x99E0:liú 0x99E1:mà 0x99E2:pián 0x99E3:táo 0x99E4:zhì 0x99E5:róng 0x99E6:téng 0x99E7:dòng 0x99E8:xūn,xuàn 0x99E9:quān 0x99EA:shēn 0x99EB:jiōng 0x99EC:ěr 0x99ED:hài 0x99EE:bó 0x99EF:zhū 0x99F0:yīn 0x99F1:luò,jià 0x99F2:zhōu 0x99F3:dàn 0x99F4:hài 0x99F5:liú 0x99F6:jú 0x99F7:sǒng 0x99F8:qīn 0x99F9:máng 0x99FA:láng,liáng 0x99FB:hàn 0x99FC:tú 0x99FD:xuān 0x99FE:tuì 0x99FF:jùn 0x9A00:ě,é 0x9A01:chěng 0x9A02:xīng 0x9A03:ái,sì,tǎi 0x9A04:lù 0x9A05:zhuī 0x9A06:zhōu,dòng 0x9A07:shè 0x9A08:pián 0x9A09:kūn 0x9A0A:táo 0x9A0B:lái 0x9A0C:zōng 0x9A0D:kè 0x9A0E:qí,jì 0x9A0F:qí 0x9A10:yàn 0x9A11:fēi 0x9A12:sāo 0x9A13:yàn 0x9A14:gé 0x9A15:yǎo 0x9A16:wù 0x9A17:piàn 0x9A18:cōng 0x9A19:piàn 0x9A1A:qián 0x9A1B:fēi 0x9A1C:huáng 0x9A1D:qián 0x9A1E:huō 0x9A1F:yú 0x9A20:tí 0x9A21:quán 0x9A22:xiá 0x9A23:zōng 0x9A24:kuí,jué 0x9A25:róu 0x9A26:sī 0x9A27:guā 0x9A28:tuó 0x9A29:guī,tuí 0x9A2A:sōu 0x9A2B:qiān,jiǎn 0x9A2C:chéng 0x9A2D:zhì 0x9A2E:liú 0x9A2F:péng,bǎng 0x9A30:téng 0x9A31:xí 0x9A32:cǎo 0x9A33:dú 0x9A34:yàn 0x9A35:yuán 0x9A36:zōu,zhū,zhòu,qū 0x9A37:sāo,sǎo,xiāo 0x9A38:shàn 0x9A39:qí 0x9A3A:zhì,chì 0x9A3B:shuāng 0x9A3C:lù 0x9A3D:xí 0x9A3E:luó 0x9A3F:zhāng 0x9A40:mò,mà 0x9A41:ào,yào 0x9A42:cān 0x9A43:biāo,piào 0x9A44:cōng 0x9A45:qū 0x9A46:bì 0x9A47:zhì 0x9A48:yù 0x9A49:xū 0x9A4A:huá 0x9A4B:bō 0x9A4C:sù 0x9A4D:xiāo 0x9A4E:lín 0x9A4F:zhàn 0x9A50:dūn 0x9A51:liú 0x9A52:tuó 0x9A53:céng 0x9A54:diàn 0x9A55:jiāo,xiāo,jū,qiáo 0x9A56:tiě 0x9A57:yàn 0x9A58:luó 0x9A59:zhān,zhàn 0x9A5A:jīng 0x9A5B:yì 0x9A5C:yè 0x9A5D:tuō 0x9A5E:pīn 0x9A5F:zhòu 0x9A60:yàn 0x9A61:lóng,zǎng 0x9A62:lǘ 0x9A63:téng 0x9A64:xiāng 0x9A65:jì 0x9A66:shuāng 0x9A67:jú 0x9A68:xí 0x9A69:huān 0x9A6A:lí,chí 0x9A6B:biāo,piāo 0x9A6C:mǎ 0x9A6D:yù 0x9A6E:tuó,duò 0x9A6F:xún 0x9A70:chí 0x9A71:qū 0x9A72:rì 0x9A73:bó 0x9A74:lǘ 0x9A75:zǎng 0x9A76:shǐ 0x9A77:sì 0x9A78:fù 0x9A79:jū 0x9A7A:zōu 0x9A7B:zhù 0x9A7C:tuó 0x9A7D:nú 0x9A7E:jià 0x9A7F:yì 0x9A80:dài,tái 0x9A81:xiāo 0x9A82:mà 0x9A83:yīn 0x9A84:jiāo 0x9A85:huá 0x9A86:luò 0x9A87:hài 0x9A88:pián 0x9A89:biāo 0x9A8A:lí 0x9A8B:chěng 0x9A8C:yàn 0x9A8D:xīng 0x9A8E:qīn 0x9A8F:jùn 0x9A90:qí 0x9A91:qí 0x9A92:kè 0x9A93:zhuī 0x9A94:zōng 0x9A95:sù 0x9A96:cān 0x9A97:piàn 0x9A98:zhì 0x9A99:kuí 0x9A9A:sāo 0x9A9B:wù 0x9A9C:ào 0x9A9D:liú 0x9A9E:qiān 0x9A9F:shàn 0x9AA0:biāo,piào 0x9AA1:luó 0x9AA2:cōng 0x9AA3:chǎn 0x9AA4:zhòu 0x9AA5:jì 0x9AA6:shuāng 0x9AA7:xiāng 0x9AA8:gǔ,gú,gū 0x9AA9:wěi 0x9AAA:wěi 0x9AAB:wěi,wán 0x9AAC:yú 0x9AAD:gàn 0x9AAE:yì 0x9AAF:āng,kǎng 0x9AB0:tóu,gǔ 0x9AB1:jiè,jiá,xiè 0x9AB2:bào 0x9AB3:bèi 0x9AB4:cī,zhài 0x9AB5:tǐ 0x9AB6:dǐ 0x9AB7:kū 0x9AB8:hái,gāi 0x9AB9:qiāo,jiāo,xiāo 0x9ABA:hóu 0x9ABB:kuà 0x9ABC:gé 0x9ABD:tuǐ 0x9ABE:gěng 0x9ABF:pián 0x9AC0:bì 0x9AC1:kē,kuà 0x9AC2:qià,gé 0x9AC3:yú 0x9AC4:suǐ 0x9AC5:lóu 0x9AC6:bó,pò 0x9AC7:xiāo 0x9AC8:bǎng,páng,pǎng 0x9AC9:bó,jué 0x9ACA:cī,cuō 0x9ACB:kuān 0x9ACC:bìn 0x9ACD:mó 0x9ACE:liáo 0x9ACF:lóu 0x9AD0:xiāo 0x9AD1:dú 0x9AD2:zāng,zǎng 0x9AD3:suǐ 0x9AD4:tǐ,tī 0x9AD5:bìn 0x9AD6:kuān 0x9AD7:lú 0x9AD8:gāo,gào 0x9AD9:gāo 0x9ADA:qiào 0x9ADB:kāo 0x9ADC:qiǎo 0x9ADD:láo 0x9ADE:sào 0x9ADF:biāo,piào,shān 0x9AE0:kūn 0x9AE1:kūn 0x9AE2:dí 0x9AE3:fǎng 0x9AE4:xiū 0x9AE5:rán 0x9AE6:máo 0x9AE7:dàn 0x9AE8:kūn 0x9AE9:bìn 0x9AEA:fà,fǎ 0x9AEB:tiáo 0x9AEC:pī 0x9AED:zī 0x9AEE:fà,fǎ 0x9AEF:rán 0x9AF0:tì 0x9AF1:bào 0x9AF2:bì 0x9AF3:máo,róu,méng 0x9AF4:fú,fèi 0x9AF5:ér 0x9AF6:róng,èr 0x9AF7:qū 0x9AF8:gōng 0x9AF9:xiū 0x9AFA:kuò,yuè 0x9AFB:jì,jié 0x9AFC:péng 0x9AFD:zhuā 0x9AFE:shāo,shǎo,shào 0x9AFF:suō 0x9B00:tì 0x9B01:lì 0x9B02:bìn 0x9B03:zōng 0x9B04:dí,tì 0x9B05:péng 0x9B06:sōng,sòng,sóng 0x9B07:zhēng 0x9B08:quán 0x9B09:zōng 0x9B0A:shùn 0x9B0B:jiǎn 0x9B0C:tuǒ,chuí,duǒ 0x9B0D:hú 0x9B0E:là 0x9B0F:jiū 0x9B10:qí 0x9B11:lián 0x9B12:zhěn 0x9B13:bìn 0x9B14:péng 0x9B15:mà 0x9B16:sān,sàn 0x9B17:mán 0x9B18:mán 0x9B19:sēng 0x9B1A:xū 0x9B1B:liè 0x9B1C:qiān 0x9B1D:qiān 0x9B1E:náng,nàng 0x9B1F:huán 0x9B20:kuò,kuài 0x9B21:níng 0x9B22:bìn 0x9B23:liè 0x9B24:ráng,níng 0x9B25:dòu 0x9B26:dòu 0x9B27:nào 0x9B28:hòng,xiàng 0x9B29:xì,hè 0x9B2A:dòu 0x9B2B:hǎn 0x9B2C:dòu 0x9B2D:dòu 0x9B2E:jiū 0x9B2F:chàng 0x9B30:yù 0x9B31:yù 0x9B32:gé,lì,è 0x9B33:yàn 0x9B34:fǔ,lì 0x9B35:qín,xín 0x9B36:guī 0x9B37:zōng,zěng 0x9B38:liù 0x9B39:guī,xié 0x9B3A:shāng 0x9B3B:yù,zhōu,jū 0x9B3C:guǐ 0x9B3D:mèi 0x9B3E:jì,qí 0x9B3F:qí 0x9B40:gà 0x9B41:kuí,kuǐ,kuài 0x9B42:hún 0x9B43:bá 0x9B44:pò,bó,tuò 0x9B45:mèi 0x9B46:xū 0x9B47:yǎn 0x9B48:xiāo 0x9B49:liǎng 0x9B4A:yù 0x9B4B:tuí,chuí 0x9B4C:qī 0x9B4D:wǎng 0x9B4E:liǎng 0x9B4F:wèi,wéi,wēi 0x9B50:gān 0x9B51:chī 0x9B52:piāo 0x9B53:bì 0x9B54:mó 0x9B55:jǐ 0x9B56:xū 0x9B57:chǒu,chóu 0x9B58:yǎn 0x9B59:zhān 0x9B5A:yú 0x9B5B:dāo 0x9B5C:rén 0x9B5D:jié,jì 0x9B5E:bā 0x9B5F:hóng,gōng 0x9B60:tuō 0x9B61:diào,dí 0x9B62:jǐ 0x9B63:xù,yú 0x9B64:é,huà 0x9B65:è,qiè,jì 0x9B66:shā,suō 0x9B67:háng 0x9B68:tún 0x9B69:mò 0x9B6A:jiè 0x9B6B:shěn 0x9B6C:bǎn 0x9B6D:yuán,wǎn 0x9B6E:pí,bǐ 0x9B6F:lǔ,lǚ 0x9B70:wén 0x9B71:hú,hù 0x9B72:lú 0x9B73:zā,shī 0x9B74:fáng 0x9B75:fén,fèn 0x9B76:nà 0x9B77:yóu 0x9B78:piàn 0x9B79:mó 0x9B7A:hé,gě 0x9B7B:xiá,xiā 0x9B7C:qū,xié 0x9B7D:hán,hān 0x9B7E:pī,pí 0x9B7F:líng,lín 0x9B80:tuó 0x9B81:bō,bà 0x9B82:qiú 0x9B83:píng 0x9B84:fú 0x9B85:bì 0x9B86:cǐ,jì 0x9B87:wèi 0x9B88:jū,qú,gǒu 0x9B89:diāo 0x9B8A:bà,bó 0x9B8B:yóu,chóu 0x9B8C:gǔn 0x9B8D:pī,pí,jù 0x9B8E:nián 0x9B8F:xīng,zhēng 0x9B90:tái 0x9B91:bào,bāo,pāo 0x9B92:fù 0x9B93:zhǎ,zhà 0x9B94:jù 0x9B95:gū 0x9B96:shí 0x9B97:dōng 0x9B98:dai 0x9B99:tà 0x9B9A:jié,qià 0x9B9B:shū 0x9B9C:hòu 0x9B9D:xiǎng,zhèn 0x9B9E:ér 0x9B9F:àn,ān 0x9BA0:wéi 0x9BA1:zhào 0x9BA2:zhū 0x9BA3:yìn 0x9BA4:liè 0x9BA5:luò,gé 0x9BA6:tóng 0x9BA7:tǐ,yí 0x9BA8:yì,qí 0x9BA9:bìng,bì 0x9BAA:wěi 0x9BAB:jiāo 0x9BAC:kū,kù 0x9BAD:guī,xié,huà,wā,kuí 0x9BAE:xiān,xiǎn,xiàn 0x9BAF:gé 0x9BB0:huí 0x9BB1:lǎo 0x9BB2:fú 0x9BB3:kào 0x9BB4:xiū 0x9BB5:duó 0x9BB6:jūn 0x9BB7:tí 0x9BB8:miǎn 0x9BB9:shāo 0x9BBA:zhǎ 0x9BBB:suō 0x9BBC:qīn 0x9BBD:yú 0x9BBE:něi 0x9BBF:zhé 0x9BC0:gǔn 0x9BC1:gěng 0x9BC2:sū 0x9BC3:wú 0x9BC4:qiú 0x9BC5:shān,shěn 0x9BC6:pū,bū 0x9BC7:huàn 0x9BC8:tiáo,yóu,chóu 0x9BC9:lǐ 0x9BCA:shā 0x9BCB:shā 0x9BCC:kào 0x9BCD:méng 0x9BCE:chéng 0x9BCF:lí 0x9BD0:zǒu 0x9BD1:xī 0x9BD2:yǒng 0x9BD3:shēn 0x9BD4:zī 0x9BD5:qí 0x9BD6:zhēng,qīng 0x9BD7:xiǎng 0x9BD8:něi 0x9BD9:chún 0x9BDA:jì 0x9BDB:diāo 0x9BDC:qiè 0x9BDD:gù 0x9BDE:zhǒu 0x9BDF:dōng 0x9BE0:lái 0x9BE1:fèi,fēi 0x9BE2:ní 0x9BE3:yì 0x9BE4:kūn 0x9BE5:lù 0x9BE6:jiù,ǎi 0x9BE7:chāng 0x9BE8:jīng,qíng 0x9BE9:lún 0x9BEA:líng 0x9BEB:zōu 0x9BEC:lí 0x9BED:měng 0x9BEE:zōng 0x9BEF:zhì 0x9BF0:nián 0x9BF1:hǔ 0x9BF2:yú 0x9BF3:dǐ 0x9BF4:shī 0x9BF5:shēn 0x9BF6:huàn 0x9BF7:tí 0x9BF8:hóu 0x9BF9:xīng 0x9BFA:zhū 0x9BFB:là 0x9BFC:zōng 0x9BFD:zéi,jì 0x9BFE:biān 0x9BFF:biān 0x9C00:huàn 0x9C01:quán 0x9C02:zéi,zé 0x9C03:wēi 0x9C04:wēi 0x9C05:yú 0x9C06:chūn 0x9C07:róu 0x9C08:dié,qiè,zhá 0x9C09:huáng 0x9C0A:liàn 0x9C0B:yǎn 0x9C0C:qiū 0x9C0D:qiū 0x9C0E:jiǎn 0x9C0F:bī 0x9C10:è 0x9C11:yáng 0x9C12:fù 0x9C13:sāi,xí 0x9C14:gǎn,jiān,xián 0x9C15:xiā 0x9C16:tuǒ,wěi 0x9C17:hú 0x9C18:shì 0x9C19:ruò 0x9C1A:xuān 0x9C1B:wēn 0x9C1C:qiàn,jiān 0x9C1D:hào 0x9C1E:wū 0x9C1F:fáng,páng 0x9C20:sāo 0x9C21:liú 0x9C22:mǎ 0x9C23:shí 0x9C24:shī 0x9C25:guān,guàn,kūn,gǔn 0x9C26:zī 0x9C27:téng 0x9C28:tǎ,dié 0x9C29:yáo 0x9C2A:é,gé 0x9C2B:yóng 0x9C2C:qián 0x9C2D:qí 0x9C2E:wēn 0x9C2F:ruò 0x9C30:shén 0x9C31:lián 0x9C32:áo 0x9C33:lè 0x9C34:huī 0x9C35:mǐn 0x9C36:jì 0x9C37:tiáo 0x9C38:qū 0x9C39:jiān 0x9C3A:shēn,sāo,cān 0x9C3B:mán 0x9C3C:xí 0x9C3D:qiú 0x9C3E:biào 0x9C3F:jì 0x9C40:jì 0x9C41:zhú 0x9C42:jiāng 0x9C43:xiū,qiū 0x9C44:zhuān,tuán,liàn 0x9C45:yōng,yóng 0x9C46:zhāng 0x9C47:kāng 0x9C48:xuě 0x9C49:biē 0x9C4A:yù 0x9C4B:qū 0x9C4C:xiàng 0x9C4D:bō 0x9C4E:jiǎo 0x9C4F:xún 0x9C50:sù 0x9C51:huáng 0x9C52:zūn,zùn 0x9C53:shàn,tuó 0x9C54:shàn 0x9C55:fān 0x9C56:guì,jué 0x9C57:lín 0x9C58:xún 0x9C59:miáo 0x9C5A:xǐ,xī 0x9C5B:zēng 0x9C5C:xiāng 0x9C5D:fèn 0x9C5E:guān 0x9C5F:hòu 0x9C60:kuài 0x9C61:zéi 0x9C62:sāo 0x9C63:zhān,shàn 0x9C64:gǎn 0x9C65:guì 0x9C66:yìng,shéng,měng 0x9C67:lǐ 0x9C68:cháng 0x9C69:léi 0x9C6A:shǔ 0x9C6B:ài 0x9C6C:rú 0x9C6D:jì 0x9C6E:xù,yú 0x9C6F:hù 0x9C70:shǔ 0x9C71:lì 0x9C72:liè,là 0x9C73:lì,lù,luò 0x9C74:miè 0x9C75:zhēn 0x9C76:xiǎng 0x9C77:è 0x9C78:lú 0x9C79:guàn 0x9C7A:lí,lǐ 0x9C7B:xiān,xiǎn 0x9C7C:yú 0x9C7D:dāo 0x9C7E:jǐ 0x9C7F:yóu 0x9C80:tún 0x9C81:lǔ 0x9C82:fáng 0x9C83:bā 0x9C84:hé 0x9C85:bà,bō 0x9C86:píng 0x9C87:nián 0x9C88:lú 0x9C89:yóu 0x9C8A:zhǎ 0x9C8B:fù 0x9C8C:bà,bó 0x9C8D:bào 0x9C8E:hòu 0x9C8F:pí 0x9C90:tái 0x9C91:guī,xié 0x9C92:jié 0x9C93:kào 0x9C94:wěi 0x9C95:ér 0x9C96:tóng 0x9C97:zéi 0x9C98:hòu 0x9C99:kuài 0x9C9A:jì 0x9C9B:jiāo 0x9C9C:xiān,xiǎn 0x9C9D:zhǎ 0x9C9E:xiǎng 0x9C9F:xún 0x9CA0:gěng 0x9CA1:lí 0x9CA2:lián 0x9CA3:jiān 0x9CA4:lǐ 0x9CA5:shí 0x9CA6:tiáo 0x9CA7:gǔn 0x9CA8:shā 0x9CA9:huàn 0x9CAA:jūn 0x9CAB:jì 0x9CAC:yǒng 0x9CAD:qīng,zhēng 0x9CAE:líng 0x9CAF:qí 0x9CB0:zōu 0x9CB1:fēi 0x9CB2:kūn 0x9CB3:chāng 0x9CB4:gù 0x9CB5:ní 0x9CB6:nián 0x9CB7:diāo 0x9CB8:jīng 0x9CB9:shēn 0x9CBA:shī 0x9CBB:zī 0x9CBC:fèn 0x9CBD:dié 0x9CBE:bī 0x9CBF:cháng 0x9CC0:tí 0x9CC1:wēn 0x9CC2:wēi 0x9CC3:sāi 0x9CC4:è 0x9CC5:qiū 0x9CC6:fù 0x9CC7:huáng 0x9CC8:quán 0x9CC9:jiāng 0x9CCA:biān 0x9CCB:sāo 0x9CCC:áo 0x9CCD:qí 0x9CCE:tǎ 0x9CCF:guān 0x9CD0:yáo 0x9CD1:páng 0x9CD2:jiān 0x9CD3:lè 0x9CD4:biào 0x9CD5:xuě 0x9CD6:biē 0x9CD7:mán 0x9CD8:mǐn 0x9CD9:yōng 0x9CDA:wèi 0x9CDB:xí 0x9CDC:guì 0x9CDD:shàn 0x9CDE:lín 0x9CDF:zūn 0x9CE0:hù 0x9CE1:gǎn 0x9CE2:lǐ 0x9CE3:zhān 0x9CE4:guǎn 0x9CE5:niǎo,diǎo,dǎo,què 0x9CE6:yǐ 0x9CE7:fú 0x9CE8:lì 0x9CE9:jiū,qiú,zhì 0x9CEA:bú 0x9CEB:yàn 0x9CEC:fǔ 0x9CED:diāo,zhāo 0x9CEE:jī 0x9CEF:fèng 0x9CF0:rù 0x9CF1:gān,hàn,yàn 0x9CF2:shī 0x9CF3:fèng 0x9CF4:míng 0x9CF5:bǎo 0x9CF6:yuān 0x9CF7:zhī,chì 0x9CF8:hù 0x9CF9:qín 0x9CFA:fū,guī 0x9CFB:bān,fén 0x9CFC:wén 0x9CFD:jiān,qiān,zhān 0x9CFE:shī 0x9CFF:yù 0x9D00:fǒu 0x9D01:yāo,ǎo 0x9D02:jué,guī 0x9D03:jué 0x9D04:pǐ 0x9D05:huān 0x9D06:zhèn 0x9D07:bǎo 0x9D08:yàn 0x9D09:yā,yǎ 0x9D0A:zhèng 0x9D0B:fāng,fǎng 0x9D0C:fèng 0x9D0D:wén 0x9D0E:ōu 0x9D0F:dài 0x9D10:gē 0x9D11:rú 0x9D12:líng 0x9D13:miè,bì 0x9D14:fú 0x9D15:tuó 0x9D16:mín,wén 0x9D17:lì 0x9D18:biǎn 0x9D19:zhì 0x9D1A:gē 0x9D1B:yuān 0x9D1C:cí 0x9D1D:qú,gōu,gòu 0x9D1E:xiāo 0x9D1F:chī 0x9D20:dàn 0x9D21:jū 0x9D22:yǎo,āo 0x9D23:gū 0x9D24:zhōng 0x9D25:yù 0x9D26:yāng 0x9D27:yù 0x9D28:yā 0x9D29:tiě,hú 0x9D2A:yù 0x9D2B:tián 0x9D2C:yīng 0x9D2D:duī 0x9D2E:wū 0x9D2F:ér 0x9D30:guā 0x9D31:ài 0x9D32:zhī 0x9D33:yàn,ān,è 0x9D34:héng 0x9D35:xiāo 0x9D36:jiá 0x9D37:liè 0x9D38:zhū 0x9D39:yáng,xiáng 0x9D3A:tí,yí 0x9D3B:hóng,hòng 0x9D3C:luò 0x9D3D:rú 0x9D3E:móu 0x9D3F:gē 0x9D40:rén 0x9D41:jiāo,xiāo 0x9D42:xiū 0x9D43:zhōu,diǎo 0x9D44:chī 0x9D45:luò,gé 0x9D46:héng 0x9D47:nián 0x9D48:ě 0x9D49:luán 0x9D4A:jiá 0x9D4B:jì 0x9D4C:tú 0x9D4D:huān,juān,guàn 0x9D4E:tuǒ 0x9D4F:bǔ,bū,pū,pú 0x9D50:wú 0x9D51:juān 0x9D52:yù 0x9D53:bó 0x9D54:jùn 0x9D55:jùn 0x9D56:bī 0x9D57:xī 0x9D58:jùn 0x9D59:jú 0x9D5A:tū 0x9D5B:jīng 0x9D5C:tí,tī 0x9D5D:é 0x9D5E:é 0x9D5F:kuáng 0x9D60:hú,gǔ,hè 0x9D61:wǔ 0x9D62:shēn 0x9D63:lài,chì 0x9D64:jiao 0x9D65:pàn 0x9D66:lù 0x9D67:pí 0x9D68:shū 0x9D69:fú 0x9D6A:ān,yā 0x9D6B:zhuó 0x9D6C:péng,fèng 0x9D6D:qín 0x9D6E:qiān 0x9D6F:bēi 0x9D70:diāo 0x9D71:lù 0x9D72:què 0x9D73:jiān 0x9D74:jú 0x9D75:tù 0x9D76:yā 0x9D77:yuān 0x9D78:qí 0x9D79:lí 0x9D7A:yè 0x9D7B:zhuī 0x9D7C:kōng 0x9D7D:duò 0x9D7E:kūn 0x9D7F:shēng 0x9D80:qí 0x9D81:jīng 0x9D82:yì 0x9D83:yì 0x9D84:jīng,qīng 0x9D85:zī 0x9D86:lái 0x9D87:dōng 0x9D88:qī 0x9D89:chún,tuán 0x9D8A:gēng 0x9D8B:jū 0x9D8C:jué,qū 0x9D8D:yì 0x9D8E:zūn 0x9D8F:jī 0x9D90:shù 0x9D91:yīng 0x9D92:chì 0x9D93:miáo 0x9D94:róu 0x9D95:ān 0x9D96:qiū 0x9D97:tí,chí 0x9D98:hú 0x9D99:tí 0x9D9A:è 0x9D9B:jiē,jiè 0x9D9C:máo 0x9D9D:fú,bì 0x9D9E:chūn 0x9D9F:tú 0x9DA0:yǎn 0x9DA1:hé,hè 0x9DA2:yuán 0x9DA3:piān,biǎn 0x9DA4:kūn 0x9DA5:méi 0x9DA6:hú 0x9DA7:yīng 0x9DA8:chuàn,zhì 0x9DA9:wù,mù 0x9DAA:jú 0x9DAB:dōng 0x9DAC:cāng,qiāng 0x9DAD:fǎng 0x9DAE:hè,hú 0x9DAF:yīng 0x9DB0:yuán 0x9DB1:xiān 0x9DB2:wēng 0x9DB3:shī 0x9DB4:hè 0x9DB5:chú 0x9DB6:táng 0x9DB7:xiá 0x9DB8:ruò 0x9DB9:liú 0x9DBA:jí 0x9DBB:gú,hú 0x9DBC:jiān,qiān 0x9DBD:sǔn,xùn 0x9DBE:hàn 0x9DBF:cí 0x9DC0:cí 0x9DC1:yì 0x9DC2:yào,yáo 0x9DC3:yàn 0x9DC4:jī 0x9DC5:lì 0x9DC6:tián 0x9DC7:kòu 0x9DC8:tī 0x9DC9:tī,sī 0x9DCA:yì 0x9DCB:tú 0x9DCC:mǎ 0x9DCD:xiāo 0x9DCE:gāo 0x9DCF:tián 0x9DD0:chén 0x9DD1:jí 0x9DD2:tuán 0x9DD3:zhè 0x9DD4:áo,ào 0x9DD5:yǎo,xiào 0x9DD6:yī,yì 0x9DD7:ōu 0x9DD8:chì 0x9DD9:zhì,zhé 0x9DDA:liù 0x9DDB:yōng 0x9DDC:lǘ,lǚ 0x9DDD:bì 0x9DDE:shuāng,shuǎng 0x9DDF:zhuó 0x9DE0:yú 0x9DE1:wú 0x9DE2:jué 0x9DE3:yín 0x9DE4:tí,tán 0x9DE5:sī 0x9DE6:jiāo 0x9DE7:yì 0x9DE8:huá 0x9DE9:bì 0x9DEA:yīng 0x9DEB:sù 0x9DEC:huáng 0x9DED:fán 0x9DEE:jiāo 0x9DEF:liáo 0x9DF0:yàn 0x9DF1:gāo 0x9DF2:jiù 0x9DF3:xián 0x9DF4:xián 0x9DF5:tú 0x9DF6:mǎi 0x9DF7:zūn 0x9DF8:yù,shù 0x9DF9:yīng 0x9DFA:lù 0x9DFB:tuán 0x9DFC:xián 0x9DFD:xué 0x9DFE:yì 0x9DFF:pì 0x9E00:chǔ,zhú,chù 0x9E01:luó 0x9E02:xī,qī 0x9E03:yí 0x9E04:jī 0x9E05:zé 0x9E06:yú 0x9E07:zhān 0x9E08:yè 0x9E09:yáng 0x9E0A:pì,bì 0x9E0B:níng 0x9E0C:hù 0x9E0D:mí 0x9E0E:yīng 0x9E0F:méng,máng 0x9E10:dí 0x9E11:yuè 0x9E12:yù 0x9E13:lěi 0x9E14:bǔ 0x9E15:lú 0x9E16:hè 0x9E17:lóng 0x9E18:shuāng 0x9E19:yuè 0x9E1A:yīng 0x9E1B:guàn,huān,quán 0x9E1C:qú 0x9E1D:lí 0x9E1E:luán 0x9E1F:niǎo,diǎo 0x9E20:jiū 0x9E21:jī 0x9E22:yuān 0x9E23:míng 0x9E24:shī 0x9E25:ōu 0x9E26:yā 0x9E27:cāng 0x9E28:bǎo 0x9E29:zhèn 0x9E2A:gū 0x9E2B:dōng 0x9E2C:lú 0x9E2D:yā 0x9E2E:xiāo 0x9E2F:yāng 0x9E30:líng 0x9E31:chī 0x9E32:qú 0x9E33:yuān 0x9E34:xué 0x9E35:tuó 0x9E36:sī 0x9E37:zhì 0x9E38:ér 0x9E39:guā 0x9E3A:xiū 0x9E3B:héng 0x9E3C:zhōu 0x9E3D:gē 0x9E3E:luán 0x9E3F:hóng 0x9E40:wú 0x9E41:bó 0x9E42:lí 0x9E43:juān 0x9E44:gǔ,hú 0x9E45:é 0x9E46:yù 0x9E47:xián 0x9E48:tí 0x9E49:wǔ 0x9E4A:què 0x9E4B:miáo 0x9E4C:ān 0x9E4D:kūn 0x9E4E:bēi 0x9E4F:péng 0x9E50:qiān 0x9E51:chún 0x9E52:gēng 0x9E53:yuān 0x9E54:sù 0x9E55:hú 0x9E56:hé 0x9E57:è 0x9E58:gǔ,hú 0x9E59:qiū 0x9E5A:cí 0x9E5B:méi 0x9E5C:wù 0x9E5D:yì 0x9E5E:yào 0x9E5F:wēng 0x9E60:liú 0x9E61:jí 0x9E62:yì 0x9E63:jiān 0x9E64:hè 0x9E65:yī 0x9E66:yīng 0x9E67:zhè 0x9E68:liù 0x9E69:liáo 0x9E6A:jiāo 0x9E6B:jiù 0x9E6C:yù 0x9E6D:lù 0x9E6E:huán 0x9E6F:zhān 0x9E70:yīng 0x9E71:hù 0x9E72:méng 0x9E73:guàn 0x9E74:shuāng 0x9E75:lǔ,lú 0x9E76:jīn 0x9E77:líng 0x9E78:jiǎn 0x9E79:xián,jiǎn 0x9E7A:cuó 0x9E7B:jiǎn 0x9E7C:jiǎn 0x9E7D:yán,yàn 0x9E7E:cuó 0x9E7F:lù,lǘ 0x9E80:yōu 0x9E81:cū 0x9E82:jǐ 0x9E83:páo,biāo,piǎo 0x9E84:cū 0x9E85:páo 0x9E86:zhù,cū 0x9E87:jūn,qún 0x9E88:zhǔ 0x9E89:jiān 0x9E8A:mí 0x9E8B:mí 0x9E8C:yǔ 0x9E8D:liú 0x9E8E:chén 0x9E8F:jūn 0x9E90:lín 0x9E91:ní 0x9E92:qí 0x9E93:lù 0x9E94:jiù 0x9E95:jūn,qún 0x9E96:jīng 0x9E97:lì,lí,lǐ,sī 0x9E98:xiāng 0x9E99:xián,yán 0x9E9A:jiā 0x9E9B:mí 0x9E9C:lì 0x9E9D:shè 0x9E9E:zhāng 0x9E9F:lín 0x9EA0:jīng 0x9EA1:qí 0x9EA2:líng 0x9EA3:yán 0x9EA4:cū 0x9EA5:mài 0x9EA6:mài 0x9EA7:hé 0x9EA8:chǎo 0x9EA9:fū 0x9EAA:miàn 0x9EAB:miàn 0x9EAC:fū 0x9EAD:pào 0x9EAE:qù 0x9EAF:qū 0x9EB0:móu 0x9EB1:fū 0x9EB2:xiàn,yàn 0x9EB3:lái 0x9EB4:qū 0x9EB5:miàn 0x9EB6:chi 0x9EB7:fēng 0x9EB8:fū 0x9EB9:qū 0x9EBA:miàn 0x9EBB:má,mā 0x9EBC:me 0x9EBD:mó,má,ma,me 0x9EBE:huī 0x9EBF:mí 0x9EC0:zōu 0x9EC1:nún 0x9EC2:fén 0x9EC3:huáng 0x9EC4:huáng 0x9EC5:jīn 0x9EC6:guāng 0x9EC7:tiān 0x9EC8:tǒu 0x9EC9:hóng 0x9ECA:huà 0x9ECB:kuàng 0x9ECC:hóng 0x9ECD:shǔ 0x9ECE:lí 0x9ECF:nián 0x9ED0:chī,lí 0x9ED1:hēi 0x9ED2:hēi 0x9ED3:yì 0x9ED4:qián 0x9ED5:dǎn 0x9ED6:xì 0x9ED7:tūn 0x9ED8:mò 0x9ED9:mò 0x9EDA:qián,jiān 0x9EDB:dài 0x9EDC:chù 0x9EDD:yǒu,yī 0x9EDE:diǎn,zhān,duò 0x9EDF:yī 0x9EE0:xiá 0x9EE1:yǎn 0x9EE2:qū 0x9EE3:měi 0x9EE4:yǎn 0x9EE5:qíng 0x9EE6:yuè,yè 0x9EE7:lí,lái 0x9EE8:dǎng,tǎng,chèng 0x9EE9:dú 0x9EEA:cǎn 0x9EEB:yān 0x9EEC:yán,yǎn,jiān 0x9EED:yǎn 0x9EEE:dǎn,tàn,zhèn,shèn 0x9EEF:àn,ān 0x9EF0:zhěn,yān 0x9EF1:dài,zhèn 0x9EF2:cǎn 0x9EF3:yī,wā 0x9EF4:méi,mèi 0x9EF5:zhǎn,dǎn 0x9EF6:yǎn 0x9EF7:dú 0x9EF8:lú 0x9EF9:zhǐ,xiàn 0x9EFA:fěn 0x9EFB:fú 0x9EFC:fǔ 0x9EFD:miǎn,měng,mǐn,méng 0x9EFE:miǎn,mǐn 0x9EFF:yuán 0x9F00:cù 0x9F01:qù 0x9F02:cháo,zhāo 0x9F03:wā 0x9F04:zhū 0x9F05:zhī 0x9F06:méng,měng 0x9F07:áo 0x9F08:biē 0x9F09:tuó 0x9F0A:bì 0x9F0B:yuán 0x9F0C:cháo 0x9F0D:tuó 0x9F0E:dǐng,zhēn 0x9F0F:mì 0x9F10:nài 0x9F11:dǐng 0x9F12:zī 0x9F13:gǔ 0x9F14:gǔ 0x9F15:dōng,tóng 0x9F16:fén 0x9F17:táo 0x9F18:yuān 0x9F19:pí 0x9F1A:chāng 0x9F1B:gāo 0x9F1C:qì,cào 0x9F1D:yuān 0x9F1E:tāng 0x9F1F:tēng 0x9F20:shǔ 0x9F21:shǔ 0x9F22:fén 0x9F23:fèi 0x9F24:wén,wèn 0x9F25:bá,fèi 0x9F26:diāo 0x9F27:tuó 0x9F28:zhōng 0x9F29:qú 0x9F2A:shēng 0x9F2B:shí 0x9F2C:yòu 0x9F2D:shí 0x9F2E:tíng 0x9F2F:wú 0x9F30:jú 0x9F31:jīng 0x9F32:hún 0x9F33:jú,xí 0x9F34:yǎn 0x9F35:tū 0x9F36:sī 0x9F37:xī 0x9F38:xiàn 0x9F39:yǎn 0x9F3A:léi 0x9F3B:bí 0x9F3C:yào 0x9F3D:qiú 0x9F3E:hān 0x9F3F:wù,huī 0x9F40:wù 0x9F41:hōu,kù 0x9F42:xiè 0x9F43:è,hè 0x9F44:zhā 0x9F45:xiù 0x9F46:wèng 0x9F47:zhā 0x9F48:nòng 0x9F49:nàng 0x9F4A:qí,jī,jì,zī,zhāi,jiǎn 0x9F4B:zhāi 0x9F4C:jì 0x9F4D:zī,jì 0x9F4E:jī 0x9F4F:jī 0x9F50:qí,jì 0x9F51:jī 0x9F52:chǐ 0x9F53:chèn 0x9F54:chèn 0x9F55:hé 0x9F56:yá,yà 0x9F57:yín,yǐn,yǎn 0x9F58:xiè 0x9F59:bāo 0x9F5A:zé 0x9F5B:xiè,shì 0x9F5C:chái,zī 0x9F5D:chī 0x9F5E:yǎn 0x9F5F:jǔ,zhā 0x9F60:tiáo 0x9F61:líng 0x9F62:líng 0x9F63:chū,chǐ 0x9F64:quán 0x9F65:xiè 0x9F66:kěn,qiǎn,yín,kǔn 0x9F67:niè 0x9F68:jiù 0x9F69:yǎo 0x9F6A:chuò 0x9F6B:yǔn 0x9F6C:yǔ,wú 0x9F6D:chǔ 0x9F6E:yǐ,qǐ 0x9F6F:ní 0x9F70:zé,cè,zhà 0x9F71:zōu,chuò 0x9F72:qǔ 0x9F73:yǔn 0x9F74:yǎn 0x9F75:óu,yú 0x9F76:è 0x9F77:wò 0x9F78:yì 0x9F79:cī,cuó 0x9F7A:zōu 0x9F7B:diān 0x9F7C:chǔ 0x9F7D:jìn 0x9F7E:yà,è 0x9F7F:chǐ 0x9F80:chèn 0x9F81:hé 0x9F82:yín 0x9F83:jǔ 0x9F84:líng 0x9F85:bāo 0x9F86:tiáo 0x9F87:zī 0x9F88:kěn,yín 0x9F89:yǔ 0x9F8A:chuò 0x9F8B:qǔ 0x9F8C:wò 0x9F8D:lóng,máng 0x9F8E:páng 0x9F8F:gōng,wò 0x9F90:páng,lóng 0x9F91:yǎn 0x9F92:lóng 0x9F93:lǒng,lóng 0x9F94:gōng 0x9F95:kān,kè 0x9F96:dá 0x9F97:líng 0x9F98:dá 0x9F99:lóng 0x9F9A:gōng 0x9F9B:kān 0x9F9C:guī,qiū,jūn 0x9F9D:qiū 0x9F9E:biē 0x9F9F:guī,jūn,qiū 0x9FA0:yuè 0x9FA1:chuī 0x9FA2:hé 0x9FA3:jué 0x9FA4:xié 0x9FA5:yù 0x9FC3:shǎn 0x9FCD:gàng 0x9FCE:tǎ 0x9FCF:mài 0x9FD4:gē 0x9FD5:dān 0x9FEB:ào 0x9FEC:tián 0x9FED:nǐ 0xE815:yè 0xE816:zuǒ,yǒu 0xE818:gǔn 0xE81A:zhòu,zhū 0xE81B:zhòu,zhū 0xE81D:jié,jiē 0xE81F:wāi 0xE820:hǎn 0xE821:hǎn 0xE824:zhòu 0xE825:zhòu 0xE826:shǒu 0xE827:gāng 0xE828:kuǎi 0xE829:sǒng 0xE82A:sǒng 0xE82B:fēng 0xE82C:gòng 0xE82D:gāng 0xE82E:huì,kuì 0xE82F:tà 0xE830:jiān 0xE831:ēn 0xE832:xiǎo 0xE834:lóu,lǘ 0xE835:cǎn,shān,cēn 0xE836:zhú 0xE837:chōu,chóu 0xE838:wǎng 0xE83A:yáng,xiáng 0xE83B:zāi 0xE83C:bà,bēi 0xE83D:bà,bēi 0xE83F:zhuān,zhuán,chuǎn,chún 0xE840:qióng 0xE841:kuì,huì 0xE842:kuì,huì 0xE843:juǎn 0xE844:xīn 0xE845:yàn 0xE846:qíng 0xE847:qíng 0xE849:shàn 0xE84A:yé,yá 0xE84B:pō 0xE84C:shàn 0xE84D:zhuō 0xE84E:shàn 0xE84F:jué 0xE850:chuài 0xE851:zhèng 0xE852:chuài 0xE853:zhèng 0xE854:zhuó 0xE855:yíng 0xE856:yú 0xE857:yìn 0xE858:chūn 0xE859:qiū 0xE85A:yú 0xE85B:téng 0xE85C:shī 0xE85D:jiāo 0xE85E:liè 0xE85F:jīng 0xE860:jú 0xE861:tī 0xE862:pì 0xE863:yǎn 0xE864:luán 0x20000:hē 0x20001:qī 0x20003:qiě,jī 0x20005:hài 0x20009:qiū 0x2000A:cāo 0x2000D:shì 0x20013:sī 0x20014:jué 0x2001B:yù 0x2001D:kōng 0x20022:zī 0x20026:xíng 0x20031:mǒu 0x20037:jī 0x20038:yè 0x20039:jūn 0x2003C:qián,xià 0x2003D:lù 0x20049:chū 0x20057:shì,hè 0x20060:qiè 0x20065:gǎ 0x2006D:qí 0x20077:chǎn 0x20084:huān 0x20086:yì 0x20087:zuǒ 0x20088:jié,tiǎn 0x20091:zōu 0x20094:zǐ 0x2009F:jīn 0x200A2:pài 0x200A4:duī 0x200A5:cóng 0x200A7:shèn 0x200B8:huáng 0x200CA:yǐn 0x200CC:gǔn 0x200D6:jiū 0x200EB:shēn 0x200FA:jiù 0x20105:yè 0x20109:dòng 0x2010C:jué,zhuì 0x2010D:jié 0x2010F:diǎo 0x20111:jué 0x20112:chuí,shā 0x20116:líng 0x2011A:tīng 0x20123:gèn 0x2012E:yà,mǒ 0x20131:yí 0x2013F:wéi 0x20142:jié 0x2014C:yí 0x20157:diè 0x2015A:qí 0x20164:xí 0x2016C:bāo 0x20171:xiè 0x20179:zhàng 0x2018C:yōng 0x20190:xù 0x20199:diè 0x2019B:dān 0x2019F:wěi 0x201A3:guǎ,zhuǎ 0x201A9:fàn 0x201AE:mò 0x201B1:xī 0x201B2:yǎn 0x201B5:ní 0x201B6:dàn 0x201CB:dǎn 0x201CF:tāo 0x201D2:gōng 0x201D7:kuā 0x201D8:chù 0x201EF:qù 0x201F1:mò 0x201F3:shī 0x201F5:gǎn 0x201F7:shēng 0x20201:tuō 0x20205:shōu 0x2020A:niě 0x20224:yùn 0x20225:guǎ 0x2022C:xiāo 0x2022D:láo 0x20230:dàn 0x20231:suō 0x20235:mǎng 0x20236:yí 0x20238:tè 0x2023A:bì 0x20242:tà 0x20257:luò 0x20262:xǐ 0x20263:hūn,hùn 0x20264:dá 0x20267:jù 0x20269:dú 0x2026C:ǎn,yǎn 0x20289:mèi 0x2028C:rán 0x2028E:ái 0x2028F:yù,xián 0x20292:jiàn 0x20294:qì 0x2029F:mǐn 0x202A3:zhòu 0x202A4:zhì 0x202A5:zhǒng 0x202A6:nǎo 0x202A7:bìng 0x202A9:zhuàn 0x202AA:shù 0x202AB:xùn,qióng 0x202AC:jué 0x202AD:qiǎn 0x202B0:guǎ 0x202B2:tū 0x202B6:yìng 0x202B7:zhì 0x202BE:kuí 0x202C6:chèn 0x202D6:liàn 0x202D7:yā 0x202DC:guò 0x202DD:miǎo 0x202DE:shé 0x202DF:yǔ 0x202E1:sì 0x202E2:sǒu,zhòu 0x202E4:zhì 0x202E7:qiē 0x202E9:fù 0x202EC:jú 0x202ED:bèi 0x202EF:bì 0x202F2:suǒ 0x202F5:qiǎn 0x202F6:mǐng 0x202F7:chǎn 0x202FA:sāo 0x202FB:jī 0x20315:gòng 0x20316:qióng 0x2031A:nòng,ròng 0x2031E:sǒu 0x2031F:sǒu 0x20320:yáo 0x2032A:chōu,tāo 0x2032D:shuài 0x2032E:zhē 0x2032F:lì,lí 0x20330:gài 0x20331:suī 0x20332:zhān 0x20334:zhuàng 0x2033D:fù 0x20343:jī 0x20344:dōu 0x20357:huì 0x2035A:jiǎn 0x2035B:yǎn 0x2035C:zhì 0x20368:měi 0x20369:yào 0x2036A:dī 0x2036B:yí 0x2036F:bié 0x20372:qú 0x20373:yì 0x20375:yàng 0x20379:zhá 0x2037D:shà 0x20399:lái 0x203AE:jué 0x203B0:qī 0x203B3:yú 0x203B6:zǎi 0x203B7:sà 0x203B8:sè 0x203BB:dùn 0x203BF:jiě 0x203C0:kē 0x203C3:yuē 0x203C7:jiǎn 0x203C8:yáo 0x203D3:xiān 0x203D5:xiào 0x203D6:qiāo 0x203DA:yù 0x203DB:qú 0x203E1:xiān,líng 0x203E2:luò 0x203E4:guǎng 0x203E7:chēng 0x203E8:chuǎng 0x203E9:yí 0x203EB:zhěng 0x203ED:zòng 0x203EE:duì 0x203F0:zhǎi 0x203FF:fěi 0x20400:yí 0x20401:méng 0x20408:biān,pián 0x20409:jié 0x2040A:shù 0x2040B:liáo 0x2040C:bǐ,bà 0x2040D:sú 0x20411:dì 0x20421:bèi 0x20422:wèn 0x20427:méng 0x20429:chǎn 0x20435:dǎo 0x2043A:pín 0x2043B:jiǎn 0x2043C:lìn 0x2043D:guì,guī 0x2043E:qī 0x2043F:hōng 0x20443:jí 0x20444:xiè 0x20445:zhēng 0x20446:chǎn 0x20450:yáo 0x20451:chǎn 0x20458:diān 0x20459:chòng 0x2045A:néi 0x2045B:néi 0x2045E:zhài 0x2045F:biān,pián 0x20461:chǎn 0x2046A:xiāo 0x2046F:cù 0x20470:xīn 0x20471:jǐng 0x20472:qiān 0x20474:qīng 0x20479:gǔ 0x20484:wù 0x2049C:yuǎn 0x2049D:bǐng 0x204A2:wán 0x204B0:niǎo,ní 0x204B5:liàn 0x204B8:rǎo 0x204BE:fàn 0x204BF:dí 0x204CA:huī,dān 0x204CB:yì 0x204CC:xián 0x204D6:lán 0x204D7:fù 0x204D9:xiòng 0x204DC:liǎng 0x204DD:tāo 0x204DE:jí 0x204E2:jiè 0x204E3:zhá 0x204E4:shī 0x204EA:qí 0x204EB:biǎn 0x204ED:lǎn 0x204EE:lǐn 0x204F6:zhì 0x204F7:bì,chéng 0x204F8:shèng 0x204FD:shèng 0x204FF:qín 0x20502:biāo 0x20503:xī 0x20509:juàn 0x2050B:jī,xìn 0x2050D:xī 0x2050E:qǐn 0x20511:hài 0x20515:lún 0x20520:yuè 0x20528:lián 0x2052F:bān 0x20532:héng 0x20536:qī 0x2053A:qiān 0x2053B:zhèng 0x2053C:mǎo 0x20541:cóng 0x20544:nà 0x2054A:tǐng 0x2054C:zōng 0x20555:jiōng 0x20556:zhǎo 0x2055F:niǎn 0x20560:chéng 0x20563:qià 0x20566:yù 0x20567:jiǎo 0x2056D:zhào 0x20573:dí 0x20574:jiū 0x20578:suǐ 0x2057B:yāo 0x2057F:wāng 0x20582:liáo 0x20584:tóng 0x20586:mèng 0x2058B:yǒu 0x20593:sī 0x2059B:lòu 0x2059F:yīn 0x205A5:chǒng 0x205AB:gǎn 0x205AC:jiū 0x205B6:qìn 0x205B7:jiǒng 0x205B9:xié,xiá 0x205C2:hè 0x205C6:tāo 0x205C8:qiú 0x205C9:xié 0x205CA:jìng 0x205CB:niǎn 0x205CC:jìng 0x205CF:jí 0x205D8:tiǎn 0x205DA:cuì 0x205DB:dié 0x205DD:qǐng 0x205E5:pìng 0x205E6:píng 0x205E8:dié 0x205E9:lòu 0x205F3:liǎn 0x205F4:hán 0x205F5:pāng 0x205F6:táng 0x205FA:yí 0x205FB:xuán 0x205FC:suò 0x205FD:liú 0x205FE:shuǎng 0x205FF:shèn 0x20601:bù 0x20602:sōu 0x20605:qín 0x20606:shěn 0x2060A:nòng 0x2060B:tǐng 0x2060C:jiāng 0x20615:xī 0x20616:zhì 0x2061D:lài 0x2061E:lì 0x2061F:lì 0x20622:hé 0x20623:jiào 0x20625:yán 0x20627:shū 0x2062A:shǐ 0x20631:zhěn 0x20633:yōu 0x2063A:suò 0x2063B:wú 0x20641:cháng 0x20642:cóng 0x20646:jù 0x2064E:shū 0x20654:jiù 0x20655:wéi 0x2065E:huò 0x20664:jiē 0x2066C:zǎo 0x20676:ǒu 0x2067C:guǎ 0x20683:háo 0x20684:lǐ 0x20685:zhì 0x20686:xiàn 0x20689:bū 0x2068A:chàng 0x20693:yūn 0x20694:hé 0x2069C:tāo 0x206A0:biāo 0x206A5:diāo 0x206A7:èr 0x206A8:jiū 0x206AD:dì 0x206AE:yì 0x206AF:kūn 0x206B1:zhé 0x206B3:kuò 0x206B4:zhōu 0x206B5:jù 0x206B9:shàn 0x206BA:shà 0x206BB:diāo 0x206BC:bān 0x206BD:jī 0x206C0:zhōng 0x206C3:yí 0x206C5:kōu 0x206C6:wū 0x206CA:gē 0x206CB:bā 0x206CE:gōu 0x206D1:xián 0x206D2:guā 0x206D3:liǔ 0x206D4:chǐ 0x206D5:guāi 0x206D6:chuān 0x206D8:lí 0x206D9:cù 0x206DA:shuā 0x206E1:bǐ 0x206E5:bǐng 0x206E6:lì 0x206E9:jiǔ 0x206EA:tiāo,diāo 0x206EB:duǒ 0x206ED:yān,yuān 0x206EE:quān 0x206F1:liè,zā 0x206F3:kè,hé 0x206F5:gēn 0x206F6:zhēn 0x206F8:fén 0x20701:yí 0x20703:jiù 0x20704:xù 0x20705:jiǎo 0x20708:lǜ 0x20709:jiǔ 0x2070B:chǒu 0x2070E:xiàn 0x20710:kuài 0x20711:duì 0x20716:luō 0x20717:xī,xì 0x20718:qìn 0x20719:bù 0x20724:qià 0x20731:pī 0x20732:yā 0x20733:bēng 0x20734:guǒ 0x20735:guā 0x20739:jú 0x2073C:qiā 0x2073E:jué,guì 0x20744:lì 0x20750:huā 0x20751:jiāo 0x20758:qià 0x2075A:zhá,zhé 0x2075B:qiā 0x2075D:zhé,zhá 0x2075E:chā 0x2075F:yǐng 0x20762:yān 0x20764:chōng 0x20768:chǐ 0x2076A:wān 0x2076C:sōu 0x20772:kǎn 0x20773:yuán 0x2077D:chóu 0x2077F:suǒ 0x20780:tū 0x20783:zhé 0x20784:tī,chǐ 0x20786:wū 0x20788:dā 0x20789:lì 0x2078A:chā,chāi,chá 0x20795:róng 0x20796:gòng 0x20797:què 0x20799:lí 0x2079E:tāo 0x207A4:lì 0x207A7:mí 0x207A9:chì,shuài 0x207AC:gùn 0x207AD:lóu,lòu 0x207AE:chuǎng 0x207AF:suǒ 0x207B0:jiǎo 0x207B1:jìn 0x207B5:fá 0x207B6:zhāi 0x207BE:jìn 0x207BF:cuì 0x207C2:cèng 0x207C3:zǔn 0x207C5:zhào,rì,zhì 0x207C8:piē 0x207C9:zhǎn,chàn 0x207CA:xī 0x207CB:yào 0x207CC:fǔ,pǒu 0x207CD:chōng 0x207D3:cuì 0x207D7:guā 0x207E3:jī 0x207E6:sè 0x207E7:zhān 0x207E8:lìng,líng 0x207E9:sè 0x207EA:yè 0x207F0:jū 0x207F6:tū 0x207FA:rú,ruǎn 0x207FB:zé,bài 0x207FC:huán 0x20801:xiǎn 0x20803:qiān 0x20804:zhào 0x2080B:cán 0x2080E:kuò 0x2080F:lì 0x20810:róu 0x20814:dú 0x20817:liè 0x2081C:yīng 0x2081D:lì 0x20820:dú 0x20822:líng 0x2082A:wān 0x2082F:dié 0x20833:jiū 0x20835:lì 0x20836:kū 0x20837:kēng 0x20839:zhěn 0x20840:hè 0x20842:bì,fú 0x20844:pī 0x2084A:hāng 0x20851:zhuó 0x20852:duǐ 0x20854:yì 0x2085C:kè 0x2085D:yì 0x2085E:mò 0x20861:cán 0x20863:gěng 0x20864:kè 0x20865:shì 0x2086D:líng,lìng 0x2086E:bēng,kēng 0x20871:duàn 0x20876:juān 0x20877:nǎo 0x20878:zǐ 0x2087B:zòng 0x20883:táng 0x20886:xiá 0x20887:hàn 0x2088C:lüè 0x2088D:qián 0x20893:mò 0x20894:ōu 0x20895:háo 0x20899:zhá 0x2089A:juàn 0x2089B:cóng 0x208A0:lì,jí 0x208A1:zhá 0x208A2:yǒu 0x208A3:diàn 0x208A4:jué 0x208A5:bèi 0x208A9:yǎo 0x208AA:piē 0x208B1:jìn 0x208B2:kǎi,xiè 0x208B3:sè 0x208B4:yǎng 0x208B5:jìn 0x208B9:kè 0x208C4:chān 0x208C7:niǎn 0x208C9:wàn 0x208CA:lǜ 0x208D0:yún 0x208D1:yāo 0x208D2:bāo 0x208D5:jūn 0x208D6:xuán 0x208D8:zhōu 0x208E0:kuì 0x208E1:fèng 0x208EA:qú 0x208EB:shào 0x208EC:sǔn 0x208F0:dū 0x208F2:kuǎi 0x208F3:pào 0x208FA:bào 0x208FE:fù 0x208FF:jiù 0x20900:rán 0x20904:jū 0x2090A:qióng 0x2090D:zhōu 0x2090E:huà 0x2090F:bǎo 0x20915:yí,xián 0x20917:yí 0x20918:yí,yǐ 0x2091D:mào 0x20926:ruǎn,rú 0x2092B:cí 0x2092E:hán 0x20930:cóng,xuán 0x20934:xì 0x20939:quán 0x2093A:tiáo 0x2093C:diào 0x2093E:hán 0x20947:yě 0x2094D:ē 0x2094E:wéi 0x20950:cāng 0x20951:diào 0x20955:è 0x20956:dì 0x20958:suǎn 0x20959:quán 0x2095C:è 0x2095D:ōu,ǒu 0x2095E:xuán 0x20962:wǔ 0x20966:yì 0x20968:móu 0x20970:hū 0x20974:hán,gān 0x2097F:shí 0x20983:sà 0x20988:bì 0x2098A:hán 0x2098B:jìng 0x2098C:xì 0x2098E:qìn 0x2098F:cuó 0x20990:cì 0x20992:bān 0x20997:duī 0x2099C:xì,shù 0x209A7:zhī 0x209A8:luàn 0x209AA:hū 0x209AB:jí 0x209AC:guāi 0x209B2:pāng 0x209C0:zhū 0x209C5:bǐ 0x209C7:yú 0x209D2:qǐ 0x209D5:hé 0x209D6:chǔ 0x209D9:shào 0x209DA:chì 0x209DB:bó 0x209DF:réng,nǎi 0x209E0:yóu 0x209E4:nǎi 0x209E9:huì,huǐ 0x209EA:tiáo,yǒu 0x209EB:bǎn 0x209F0:xū 0x209F4:yóu,yòu 0x209F5:chì 0x209FF:héng 0x20A03:wài 0x20A06:xiè 0x20A0A:jué 0x20A0C:suī 0x20A0D:qīng 0x20A0E:zhuàn 0x20A15:jì 0x20A18:bì 0x20A1A:xī 0x20A20:jí 0x20A22:jùn 0x20A25:liáo 0x20A26:yōu 0x20A2D:jú 0x20A32:yuè 0x20A35:bàng 0x20A38:pí 0x20A3B:zè 0x20A3E:yì 0x20A3F:dǐ 0x20A42:qiè 0x20A44:suǒ 0x20A46:cì 0x20A48:zhù 0x20A49:yuè,jú 0x20A4F:jiāo 0x20A54:shí 0x20A57:yí 0x20A58:xiá 0x20A60:yuán 0x20A65:guó 0x20A67:kè 0x20A6A:cuì 0x20A6B:yì 0x20A75:lì 0x20A77:diǎn 0x20A7A:xī,chí 0x20A7F:bì 0x20A82:biǎn 0x20A83:méi 0x20A84:lì 0x20A87:sǒu 0x20A90:liú 0x20A91:guì 0x20A92:kè 0x20A97:yí 0x20A99:xǐ 0x20A9A:yín,ǎn,kǎn 0x20A9F:kè 0x20AA3:shè 0x20AA7:wǒ 0x20AAE:pì 0x20AB6:yuè 0x20AB7:hóng 0x20ABA:lì 0x20ABB:fù 0x20AC3:jué 0x20AC4:xiān 0x20AC9:diān 0x20ACC:lì 0x20AD3:tū 0x20AD8:jiān 0x20ADB:bǎi 0x20ADC:dì 0x20ADD:zhǎng 0x20AE3:yù 0x20AE8:duì 0x20AED:cān 0x20AEE:tú 0x20AF6:tān 0x20AF7:jí 0x20AF8:qí,zhāi 0x20AF9:shàn 0x20AFA:nián,shì 0x20B06:guàn 0x20B08:bǐ 0x20B0B:xīng,nián 0x20B13:zhěn 0x20B19:sā 0x20B1B:mò 0x20B1D:fú 0x20B22:tāo 0x20B23:bàng 0x20B2A:biào 0x20B2C:xī 0x20B2E:jié 0x20B36:jìn 0x20B3E:qiān 0x20B48:sì 0x20B49:jǐng 0x20B4B:chǐ 0x20B57:jǐng 0x20B65:suì 0x20B6F:zhā 0x20B70:lí 0x20B74:zhuō 0x20B79:biàn 0x20B7F:tún 0x20B83:bì 0x20B86:fèi 0x20B8A:dé 0x20B8C:zhú 0x20B91:jū 0x20B99:yǐ 0x20B9C:yà,yīn 0x20B9F:chì 0x20BA0:guǎ,bǎi 0x20BA1:zhǐ 0x20BA8:réng 0x20BAB:yōu 0x20BAD:bó 0x20BAF:jǐ 0x20BB0:pǐn 0x20BB3:yīng 0x20BB4:yāng 0x20BB5:màng 0x20BBD:lòng 0x20BBE:ǹ,ǹg 0x20BBF:sa,san 0x20BC0:chuān 0x20BC2:cí 0x20BC3:wǔ 0x20BC4:rèn 0x20BC8:dài 0x20BC9:jí 0x20BCB:yǐ 0x20BCD:rán 0x20BD0:huò 0x20BD1:guā 0x20BD3:zhé 0x20BD4:pì 0x20BD7:zā 0x20BD8:bàn 0x20BD9:jié 0x20BDC:hōu,xǔ 0x20BDF:xiàn 0x20BE0:huī 0x20BE9:zhā 0x20BEA:dāi,dǎi,è 0x20BEB:gē 0x20BED:pì 0x20BEF:piàn 0x20BF0:shí 0x20BF1:liǎng 0x20BF2:yuè 0x20BF3:hù,wěn 0x20BF4:biàn 0x20BF7:réng 0x20BF9:réng 0x20C04:yī 0x20C05:zhī 0x20C07:jīn 0x20C08:wēng 0x20C09:chāo 0x20C0B:qiū 0x20C0D:zhǔ,zhù 0x20C0F:zhá 0x20C10:pǒ 0x20C11:àn 0x20C13:hé 0x20C15:chū 0x20C16:yán 0x20C1A:shì 0x20C1B:hù,gào 0x20C1C:è 0x20C34:shí 0x20C39:tuō 0x20C3A:dài 0x20C3B:wài,wai 0x20C3C:pō 0x20C3D:rǒng 0x20C3E:jū 0x20C40:bō 0x20C50:yǔ 0x20C51:dōu 0x20C53:guǐ 0x20C54:shòu 0x20C57:suō 0x20C58:nì 0x20C59:zhōu,yù,jì,cù 0x20C5A:lòng 0x20C5B:bǐng 0x20C5C:zùn 0x20C5D:yè 0x20C5E:rǎn 0x20C60:líng 0x20C61:sà,shài 0x20C64:lěi 0x20C65:è,huì,zá 0x20C67:zhòng 0x20C68:jǐ 0x20C6B:è 0x20C6F:zuò 0x20C72:nà 0x20C73:yǔn 0x20C8A:xiè 0x20C8B:zuǐ 0x20C8C:shù 0x20C8D:diū 0x20C8E:fa,fèi,fá,wa 0x20C8F:rěn 0x20C91:bāng 0x20C92:hán 0x20C93:hóng 0x20C94:yī 0x20C96:yī 0x20C99:kē 0x20C9A:yì 0x20C9B:huí 0x20C9C:zhēng 0x20CAE:jìng 0x20CB1:gé 0x20CB4:nóu 0x20CB5:qiè,jié 0x20CB7:dié 0x20CB9:jì 0x20CBA:yì 0x20CBB:yí 0x20CBD:fú 0x20CBE:shuò 0x20CBF:shuò 0x20CC0:yǒng 0x20CC1:kěn 0x20CC2:huá 0x20CC3:hòng 0x20CC7:hé 0x20CCA:hē 0x20CCB:qiǎn 0x20CCC:qià 0x20CCE:sì 0x20CD0:bāng 0x20CEC:jīng 0x20CED:kè 0x20CF3:āi 0x20CF4:lóu 0x20CF6:tū 0x20CF9:chuáng 0x20CFC:sòng 0x20CFD:chéng 0x20CFF:wēi 0x20D02:nǔ 0x20D04:jiǔ 0x20D07:bīn 0x20D21:xiào 0x20D22:shēng 0x20D23:hǒu 0x20D26:zhù 0x20D28:guān 0x20D29:jī,qǐ 0x20D2B:jì,cù,yù,zhù 0x20D2D:xī 0x20D2F:shè 0x20D30:ǒu 0x20D31:hú 0x20D32:tà 0x20D33:xiáo 0x20D35:zào 0x20D38:bò 0x20D39:qì 0x20D3A:wā 0x20D3B:tuō 0x20D3C:dào 0x20D3E:nà 0x20D60:zhāi 0x20D63:yà 0x20D66:wǔ 0x20D67:zhén,chún 0x20D68:de 0x20D69:hē 0x20D6B:āng 0x20D6C:pí 0x20D6D:sè 0x20D6E:fěn 0x20D6F:guā 0x20D73:pǒ 0x20D77:xuàn 0x20D78:hān,mí 0x20D79:gāng 0x20D7A:bā 0x20D7B:zōng 0x20D7C:mèng 0x20D7E:huò 0x20DA7:diān 0x20DA8:xī 0x20DAB:dà 0x20DAC:nàng 0x20DB0:diāo 0x20DB1:luò 0x20DB2:kè 0x20DB7:yì 0x20DB8:jué 0x20DB9:hé 0x20DBB:jí 0x20DBE:hè 0x20DBF:niè,zá 0x20DC0:rǔn 0x20DC1:qián,jiān 0x20DC2:dài 0x20DC3:shāo,sù,shòu 0x20DC4:kè 0x20DC5:zhú 0x20DC7:shī 0x20DC8:lǜ,liè 0x20DC9:jiā 0x20DCA:pián 0x20DCB:hòu 0x20DCC:jī,zé 0x20DCD:tà 0x20DCE:chóu,shòu 0x20DCF:wō 0x20DD0:jìng,jiàng 0x20DD1:pō 0x20DD2:zhāi 0x20DD3:xīn 0x20DD6:biàn 0x20DD9:xù 0x20DDE:gū 0x20DDF:jiè 0x20DE2:xián 0x20DF8:é,yóng 0x20DFA:bó 0x20DFB:piāo 0x20DFF:zǎ 0x20E01:pài 0x20E02:tū 0x20E04:yīng 0x20E2E:xiǎng 0x20E31:nuò 0x20E32:gē 0x20E33:bó 0x20E34:xiè 0x20E38:zhēn,chún 0x20E39:yú 0x20E3A:nì 0x20E40:xùn 0x20E41:wà 0x20E43:àng 0x20E44:hàn 0x20E45:hōng 0x20E46:dān 0x20E48:nuó 0x20E4A:cǎo 0x20E4B:jí 0x20E4C:něng 0x20E4D:yǒng,róng 0x20E4E:xiāo 0x20E50:chuǎ 0x20E51:yào 0x20E53:gé 0x20E54:táng 0x20E55:bào 0x20E56:chǎn 0x20E58:xù 0x20E5B:hái 0x20E5D:chóu 0x20E5F:jiǎn 0x20E60:zuō 0x20E64:wèi 0x20E65:dā 0x20E66:pī 0x20E90:huàn 0x20E92:xī 0x20E94:pèn 0x20E95:liū,liáo 0x20E96:mǔ,yīng 0x20E97:miē 0x20E98:làng 0x20E99:tuì 0x20E9A:bān 0x20E9D:gē 0x20E9F:kù 0x20EA2:jiā 0x20EA3:bō 0x20ECD:huàn 0x20ECF:zú 0x20ED0:luò 0x20ED7:lí 0x20ED9:hé 0x20EDA:mó 0x20EDC:shuì,lǜ,sū 0x20EDD:shēn 0x20EDE:kǎng 0x20EDF:chì 0x20EE0:líng 0x20EE1:luǒ 0x20EE4:yǎn 0x20EE5:zhào 0x20EE6:chuǎ 0x20EE7:gǔ 0x20EE8:qǐn 0x20EEA:tán 0x20EEB:fèn 0x20EEC:tú 0x20EF1:líng 0x20EF4:lǎng 0x20F16:lán 0x20F17:zàn 0x20F18:wù 0x20F1D:lí 0x20F1E:ā 0x20F1F:lüè 0x20F20:zhǐ 0x20F21:chóu 0x20F22:jiàng,qiàng 0x20F24:jiān 0x20F29:lún 0x20F2A:yí 0x20F2C:shāng 0x20F3B:jī 0x20F5C:yì 0x20F5D:nín 0x20F61:huì 0x20F63:zhā 0x20F66:hǎn 0x20F68:yǐn 0x20F69:bì 0x20F6A:ān 0x20F6B:xiā,xiǎ 0x20F6C:ní 0x20F70:dī 0x20F71:jiǎn 0x20F72:pán 0x20F75:yù 0x20F76:chuài,cuì,chuò 0x20F77:zā 0x20F79:chá 0x20F7B:zhé 0x20F7C:sè 0x20F7E:pēn,pǔ 0x20F7F:gū 0x20F80:zhé 0x20F86:lí 0x20F87:dōu 0x20F89:chóu 0x20F8B:zuǐ 0x20F8C:pò 0x20F8F:shē 0x20F90:lóng 0x20FA2:shù 0x20FA4:jìn 0x20FA5:líng 0x20FA8:kāng 0x20FA9:là 0x20FAB:xū 0x20FAC:jìn 0x20FAE:chuān 0x20FB2:yuè 0x20FC6:mǎi 0x20FC7:xiè 0x20FC8:jiū 0x20FC9:jì 0x20FCB:yuè 0x20FCF:jiān 0x20FD1:hán,gǎn,ǎn,hǎn 0x20FD3:sà 0x20FD4:huì 0x20FD5:qiào 0x20FD7:sè 0x20FD8:zuǐ 0x20FDB:lǔ 0x20FDC:huà 0x20FDD:chū 0x20FDE:shǎn 0x20FDF:wò 0x20FE0:jí 0x20FE1:zhuó 0x20FE2:xián,xiàn 0x20FE3:yī 0x20FE4:guó 0x20FE5:kuì,guì 0x21011:zhōu 0x21014:lù,lou 0x21016:bō 0x21017:shí 0x21018:yìng 0x21019:kū 0x21039:zhì 0x2103A:xié 0x2103D:yè,hè 0x2103E:è 0x2103F:lǜ 0x21040:hàn 0x21041:yè,kài 0x21046:luò 0x21047:chuò 0x21048:fàn 0x21049:zhí 0x2104A:yìng 0x2104B:wěn 0x2104C:wā 0x2104D:ài 0x2104E:yú 0x21051:huā 0x21053:liè 0x21054:jīng 0x21055:zá 0x21067:zāng 0x21068:duì 0x2106A:jì 0x2106E:wō 0x21070:jí 0x21071:xī 0x21073:zhàn 0x21074:tuán 0x2108A:yú 0x2108F:liè 0x21092:zhì 0x21093:shī 0x21095:lǎo 0x21096:lài,tà 0x21097:wěi 0x21098:páo 0x21099:chí 0x2109A:yǐng 0x2109B:dòu 0x2109D:dòu 0x2109F:bào 0x210A0:qiè 0x210A1:shù 0x210A3:zhí 0x210A9:liè 0x210AB:péng 0x210AD:zhē 0x210BF:ōu,ou 0x210C2:xiè 0x210C3:jí 0x210C4:lài 0x210C5:yíng 0x210C6:cēng 0x210D6:lē 0x210DD:lùn 0x210E1:lóng 0x210E2:xì 0x210E6:lìn 0x210E9:guī 0x210F3:xīng 0x210F7:lí 0x210F8:cī 0x21107:qǐng 0x21111:jiān 0x21112:dào 0x21113:jiǎn 0x21114:qìng 0x21115:xiè 0x21116:yìng 0x2111F:há 0x21121:zhe 0x21122:shē 0x21123:mí 0x21124:huán 0x21131:cù 0x21132:rú 0x21133:sǎ 0x21134:huò 0x21135:yī 0x21137:dī 0x21139:luàn 0x2113B:yì 0x21142:bò 0x21143:páng 0x21144:tán 0x21145:é,éi 0x21146:zāng 0x21147:cóng 0x21153:zhāi 0x21155:xǐ 0x21156:mǎng 0x21158:là 0x21159:yùn 0x21161:è 0x21165:dié 0x2116D:guān 0x21171:huàn 0x21175:shì 0x21176:jiǎn 0x21179:zhān 0x2117A:jí 0x2117B:huàn 0x21185:wàn 0x21186:luǒ 0x2118F:dòu 0x21195:liàn 0x211A3:niè,dí 0x211A4:nǎn 0x211A5:jiù 0x211A6:yuè 0x211A9:yāo,jiǒng 0x211AA:chuāng 0x211AE:cǎn 0x211AF:lǐ 0x211B0:dùn 0x211B1:nǎn 0x211B2:nǎn 0x211B8:rì,guó 0x211BD:yuè 0x211C0:yóu 0x211C2:yīn 0x211C4:guó,niè 0x211C8:dàng,tuó 0x211D1:zhēn 0x211D2:mí 0x211D3:dié 0x211D6:zhēn 0x211DA:kuā 0x211DC:hán 0x211DD:sòng 0x211DE:hé 0x211DF:jī 0x211E0:zhé 0x211E4:bǐng 0x211E6:wéi 0x211E7:tōu 0x211E9:tú 0x211EC:gāng 0x211ED:lóu 0x211EE:quán 0x211EF:hùn 0x211F0:zhuǎn 0x211F1:què 0x211F3:hóng 0x211F5:dàng 0x211F6:hé 0x211F7:tài 0x211F8:guāi 0x211FA:yù 0x211FC:yà 0x211FF:wān 0x21200:qūn 0x21205:jué 0x21206:ōu 0x21209:quān 0x2120A:zhí 0x2120D:líng 0x2120E:wū,rì 0x2120F:xìn 0x21210:dá 0x21212:yuān 0x21213:yuàn 0x21217:mò 0x21219:yóu 0x2121E:wǔ 0x21220:zhāng 0x21223:xuān 0x21226:rǎo 0x21227:gǔn 0x21228:yù 0x2122E:xiá 0x2122F:biǎn 0x21230:yóu 0x21232:yīn 0x21234:xuán,rǔ 0x21235:yóu 0x21236:léi 0x2123C:tǐng,tíng,zhēng,zhǐ 0x2123F:zhēn 0x21244:zài,kū 0x21245:gā 0x21246:lá 0x21249:què 0x2124E:jú 0x21250:chūn 0x21251:dā 0x21252:tún 0x21253:āi 0x21257:zǐ 0x2125A:huáng,fēng 0x2125B:yì 0x21269:bào 0x2126A:chí 0x2126D:rì 0x21274:lú,hù 0x21277:jié 0x21278:shì 0x2127A:zuān 0x21281:yì 0x21284:fèn 0x21285:fèn,biàn 0x21289:mò 0x2128D:shù 0x2129B:áo 0x2129D:pǐ 0x2129E:píng,pìng 0x2129F:pō 0x212A0:jiá 0x212A1:zhóu 0x212A3:qiū 0x212A7:yǒu 0x212A8:tán 0x212AB:rǒng 0x212AD:mì 0x212B6:yì 0x212B8:rǒng 0x212BB:liè 0x212BC:qióng 0x212D9:huí 0x212DA:jì 0x212DF:gào 0x212E7:yóu 0x212E8:chā 0x212E9:dé 0x212EA:yīn 0x212EC:yù 0x212ED:bèi 0x212EF:bó 0x21314:qiāo 0x2131A:chǎ 0x2131C:xīn 0x2131E:chí 0x21323:zào 0x21324:kuí 0x21326:fèi 0x21329:tā,dá 0x2132A:guài 0x2132D:duō 0x21332:guī 0x21334:zhí 0x2134C:chǎn 0x2134D:nǎo 0x21350:hú 0x21352:táo 0x21361:yì 0x21364:niè 0x21365:zhài 0x21366:huán 0x21368:dù 0x2136A:qì 0x2136B:cè 0x2136E:chuí 0x21372:dā 0x21376:zhì 0x21377:gèng 0x2137B:wèng 0x21389:dù 0x2138D:chí 0x21391:àn 0x21392:kuò 0x21394:wò 0x21398:yīng 0x2139A:piǎn 0x213AB:zhá,qì 0x213AC:zhuǎ 0x213AE:sù 0x213B3:nì 0x213BA:zhú 0x213BB:chán 0x213BE:bèng 0x213BF:ní 0x213C0:zhí 0x213C1:huì 0x213D8:xià 0x213DA:zhì 0x213DB:xī 0x213DE:jiǎng 0x213E9:duī 0x213EA:fū 0x213ED:jiāo 0x213EE:cháo 0x213EF:bài 0x213F5:liè 0x213FC:áo 0x2140B:zāo 0x2140C:chù 0x2140F:tuǒ 0x21412:háo,hào 0x21413:kāng 0x21414:yín 0x21416:xiàn 0x2141D:fú,fù 0x2141E:biē 0x21420:kuī 0x21424:qiè 0x21425:sà 0x2143F:dā,da 0x21440:yě,shù 0x21444:zhǎng 0x21446:liáng 0x21448:duǐ 0x2144D:láo 0x2144E:xūn 0x21458:zhì 0x2145A:kū 0x2145E:suì 0x2145F:wō 0x21463:kū 0x2146F:jiǎn 0x21476:jiǎng 0x2147B:zhuì 0x2147D:shuǎng 0x2147E:yú 0x21481:sà 0x21483:yù,ào 0x21484:lǎn 0x2148A:yù 0x2148C:qiǎn 0x2148D:jù 0x2148F:liè 0x21492:shú 0x21493:xiàn 0x21496:gài 0x214A2:tái 0x214A7:tiǎn 0x214AF:mèng 0x214B1:dí 0x214B3:mián 0x214BE:huī,kuì 0x214C9:duò 0x214CD:liè 0x214D2:lài 0x214D3:yín,yīn 0x214D4:lǎn 0x214D6:jiāo 0x214D8:huò 0x214E3:guō 0x214E6:zhàn 0x214ED:mǐ 0x214F0:kuī 0x214F7:duò 0x214FF:yín 0x21507:lèi 0x21515:gòng 0x2151B:tǐng 0x2151C:yáo 0x2151E:wǎng 0x21523:jié,qiè 0x21528:xiū 0x2152A:shù 0x21531:wèi 0x21534:yù 0x21541:zhān 0x21549:āng 0x2154F:sǎng 0x21550:chóu 0x21552:kuà 0x21556:jǔ,féng 0x21557:hài 0x21562:miǎn,mǎn 0x21567:hàng 0x2156A:chóu 0x2156E:líng 0x21570:zōng 0x21589:kūn 0x2158C:zhōng 0x2158E:zhāo 0x21590:diě 0x21591:gǒu 0x21592:yún 0x21593:dān 0x21594:nuó,nuǒ 0x2159B:bǐng 0x2159D:rán 0x2159E:chān 0x215A2:rǒng 0x215A3:yīn 0x215A4:chān 0x215A7:zhì 0x215AA:guài 0x215AB:nuó 0x215AC:shēn 0x215AF:sù 0x215B2:wǒ 0x215B3:chǐ 0x215BA:miè 0x215BB:zhí 0x215BE:qī 0x215C1:gōu 0x215C6:lǒu 0x215C8:zī 0x215CD:dǎng 0x215CF:xiǎn 0x215D1:rǒu 0x215D7:pěng 0x215DE:xī 0x215E2:kuā,běn 0x215E4:guì 0x215E5:chún 0x215E6:jiè 0x215F2:jiè,bēn 0x215F3:xī 0x215F5:kū 0x215F7:gū 0x215F8:zhà,kuā 0x215F9:fàn 0x215FC:xiè 0x2160D:huán,qié 0x2160F:niǎo 0x21610:xì 0x2161B:cū 0x2161D:gǔn 0x21621:xī 0x21627:qiá 0x2162A:māng 0x2162D:zhé 0x21630:juàn 0x21634:biē 0x21640:biē 0x21645:quán 0x2164B:xì 0x2164E:jiǎo,miǎo 0x21650:quán 0x21651:zhǐ 0x21652:tiān 0x21653:kāi 0x21658:sǎn,yì 0x2165B:zī 0x21663:jié 0x2166A:bié 0x2166C:dòu 0x2166D:zuī 0x21676:yǎn 0x21681:bì 0x21685:kuǎi 0x21687:yàn 0x21688:wéi 0x2168A:huān 0x2168C:hào 0x21691:gōng 0x21694:méng 0x21697:lěi 0x21699:dì 0x2169B:bǐng 0x2169C:huān,kàn 0x2169F:wā 0x216A0:jué 0x216A8:chì 0x216AD:bā 0x216AE:jiǔ 0x216B7:dì 0x216B9:zhàng 0x216BB:dà 0x216BC:shí 0x216BD:hào 0x216CC:yè 0x216D7:bì 0x216D8:pǐ 0x216D9:yǎo,yāo 0x216DC:dī 0x216DD:càn 0x216DE:pín 0x216DF:yuè 0x216E0:qiē 0x216E1:pī 0x216F5:tuǒ 0x216F6:xiè 0x216FD:yè 0x21700:fàn 0x21701:guā 0x21702:hù 0x21703:rǔ 0x21709:rǎn,ràn 0x2170A:fǒu 0x2170B:huāng 0x2171A:rú 0x21722:mǎo 0x21725:duī 0x21726:huì 0x21727:xì 0x21728:xiū 0x2172B:rǎn 0x2172C:yī 0x2172F:zhé 0x21731:jì 0x21732:gào 0x21733:yòu 0x21735:pū 0x21748:chù 0x21749:cū 0x2174A:zhé 0x2174B:niǎo 0x2174D:qiè 0x21750:chá 0x21752:niǎo 0x21753:suī 0x21759:chá 0x2175A:chéng 0x2175B:yáo 0x2175C:dù 0x2175D:wāng 0x2175F:niàn 0x21760:mí 0x21766:nǒu 0x21767:xì 0x21769:yāo 0x2176B:chān 0x21798:xiè 0x21799:miè 0x2179A:kěng 0x2179C:cù 0x2179E:shěng 0x2179F:pàn 0x217A0:hù 0x217A2:kè 0x217A3:xiàn 0x217A5:hóu 0x217A6:qióng 0x217A7:zōng 0x217AA:fú 0x217AB:nài 0x217AD:nì 0x217AF:kǔ 0x217BE:nèn 0x217CD:gē 0x217D1:hóu 0x217D3:āi 0x217D5:shī 0x217DE:xiū 0x217DF:cōng 0x217E0:jiāo 0x217E2:zhá 0x217E3:xiāo 0x217E4:liàn 0x217E5:qǔ 0x217E8:shǎn 0x217E9:xiè 0x217EB:gòng 0x217EC:miè 0x217ED:chái 0x217EF:ēn 0x217F3:dòu 0x21806:kòu 0x2180A:tiáo 0x2180B:shī 0x2180F:sāng 0x21812:guān 0x21816:hào 0x21817:zhì 0x21818:yàng 0x21819:tōng 0x2181A:bì 0x2181C:mó,mò 0x2181E:fú 0x21825:qiáng 0x21839:zhì 0x2183C:sōu 0x2183F:niǎo 0x21840:juàn 0x21842:yàng 0x21844:huāng 0x21848:bēng 0x21849:mó 0x2184A:cháo 0x2184E:lǚ,lóu 0x2184F:shāo 0x21850:bǔ 0x21851:zēng 0x21852:sī,xī 0x21854:zuì 0x21855:yuē 0x21856:zān,cān 0x21857:luǎn,luàn 0x21865:qú 0x2187A:miǎo 0x21880:zhuàn 0x21888:dàng 0x2188A:yuān 0x21892:jǔ 0x21895:huǐ 0x21896:qì 0x21898:yùn,yíng 0x2189A:màn 0x2189C:mǒ 0x218B1:piāo 0x218B3:jìn 0x218B9:yāo 0x218C0:chì 0x218C1:nì 0x218C2:sōu 0x218C8:shù 0x218CB:piāo 0x218D4:hàn 0x218E0:yāo 0x218E2:néi 0x218EA:shì 0x218EC:yuān 0x218EE:cài 0x218EF:jié 0x218F9:xiè 0x218FD:yán 0x218FE:xiāo 0x2190B:xiè 0x2190C:lì 0x2190E:fàn 0x21917:zhù 0x21919:nà 0x2191B:zhuǎn 0x2191E:kuī 0x21922:luó 0x2192B:qiā 0x21936:wān 0x2193D:shǔ 0x2193F:chèng,kǒng 0x21941:yì 0x21946:hǎo,hào 0x21948:jiào 0x2194B:huì 0x2194D:xiào 0x2194E:cí,zǐ 0x2195E:jì,bèi 0x21966:nǐ,jìn 0x21968:nǐ,jìn 0x21969:tǐ 0x21976:jù,rú 0x21978:mìng 0x2197D:lí 0x2197F:zhòng 0x21981:xù 0x21983:qióng 0x21984:fú 0x21986:bìn 0x2198A:jì 0x2198D:qí 0x2198E:xì 0x21994:dèng 0x21995:ér 0x2199B:shú 0x2199C:tóng 0x2199D:xiāo,xiáo 0x2199F:pí 0x219A8:dǎn 0x219AA:jí 0x219B3:xiào 0x219B7:cóng 0x219BB:bīn 0x219BC:rǒng 0x219CD:miàn,bīn 0x219D2:miàn 0x219D4:shū 0x219D5:xiáo,shǒu 0x219D6:bǎo 0x219D7:wà 0x219D9:pào 0x219E3:gǎi 0x219E5:hū 0x219E6:héng 0x219E8:zhú 0x219E9:guāi 0x219ED:guì,guǐ 0x219F9:dài 0x219FC:bīn 0x219FD:huǎng,huāng 0x21A00:chá 0x21A04:xià,sāi 0x21A05:jú 0x21A07:yǎo,xiǎng 0x21A16:fěn 0x21A17:zào 0x21A1B:fēng 0x21A22:jū 0x21A23:yù 0x21A29:hūn 0x21A32:jié 0x21A33:xiòng,hùn 0x21A35:nài 0x21A3B:nǒu 0x21A3D:shěng 0x21A3F:yù 0x21A42:huán 0x21A43:gěng 0x21A44:wǎn 0x21A46:tuó 0x21A47:qiāo 0x21A58:yìn 0x21A5A:jiā,zhuàn 0x21A61:suǒ 0x21A63:jié 0x21A64:xī 0x21A65:wěng 0x21A69:máng 0x21A76:yáng 0x21A78:yáo 0x21A7D:máng 0x21A7E:ōu 0x21A81:án 0x21A85:lòu 0x21A91:è 0x21A92:zǐ 0x21A97:è 0x21A99:àn 0x21A9E:huò 0x21AA0:céng 0x21AB0:xiòng 0x21AB1:jì 0x21AB3:zuó 0x21AB5:qí 0x21ABA:zhēng 0x21AC0:jī 0x21AC1:qī,chèn 0x21AC2:juǎn 0x21AC3:níng 0x21ADF:sè 0x21AE5:hè 0x21AE6:rǒng 0x21AE7:qǐn 0x21AEC:jū 0x21AEF:lì 0x21AF5:shí 0x21AF8:nì 0x21AF9:xián 0x21AFA:fū 0x21AFD:rǔ,yù 0x21B01:xiòng 0x21B02:guì 0x21B04:jì 0x21B06:měng,mèng 0x21B07:fū 0x21B09:sài 0x21B0A:yù 0x21B0B:jiào 0x21B0C:mèng 0x21B0D:mí,lóng,mǐ 0x21B0E:qiāng 0x21B10:yí,mí 0x21B13:yí 0x21B15:lóng 0x21B16:hān 0x21B17:nì 0x21B18:lào 0x21B19:sèng 0x21B1C:lǐn 0x21B1E:yù 0x21B25:nuó 0x21B2B:wù 0x21B2F:biǎn 0x21B32:biǎn 0x21B33:xuān,shòu 0x21B35:jiān 0x21B38:biǎn 0x21B42:dé 0x21B47:zhuān 0x21B4B:rǒng 0x21B50:shuàn 0x21B58:jiā 0x21B5B:huǐ 0x21B5E:zhān 0x21B62:bài 0x21B63:liè 0x21B65:xiē 0x21B6D:jiǎn 0x21B6E:shǒu 0x21B73:kào 0x21B77:guān 0x21B78:luàn 0x21B7E:nǒu 0x21B7F:chǎng 0x21B8E:liáng 0x21B99:nài 0x21B9A:rǔ 0x21B9E:zhì 0x21BA6:cáo 0x21BB0:lì 0x21BBB:lán 0x21BBF:chān 0x21BC1:wāng 0x21BC4:lì 0x21BC7:wù 0x21BC8:páo 0x21BC9:yòu 0x21BCB:gān 0x21BCF:ān 0x21BD0:xiū 0x21BD1:shuǐ,zhuǐ 0x21BD2:ruǐ 0x21BD8:bǎn 0x21BD9:yóu 0x21BE2:huó 0x21BE5:huī 0x21BE8:zuò 0x21BE9:xiāo 0x21BEB:mián 0x21BF0:gà 0x21BF1:yuǎn 0x21BF3:bò 0x21BF4:chào 0x21BF5:tuǐ,kuì 0x21BF7:bò,kòu 0x21BFD:gà 0x21BFF:tiāo 0x21C00:ná 0x21C05:hú 0x21C06:niè 0x21C0B:huí 0x21C0C:lǒu 0x21C0E:tí 0x21C10:qiào 0x21C11:qiáo 0x21C12:zhǒng 0x21C16:dī 0x21C1A:lín 0x21C1D:quán 0x21C1E:zhuān 0x21C20:léi,luán 0x21C22:xié 0x21C25:rén,yí 0x21C28:dāng 0x21C2A:dū 0x21C2B:niǎn 0x21C2F:shǐ,diǎo,běi 0x21C32:xián 0x21C39:zhí 0x21C3D:ài 0x21C3E:cī 0x21C3F:pú 0x21C41:shǐ 0x21C45:qū 0x21C46:shǔ 0x21C47:diān 0x21C49:xiǎo 0x21C4A:shuǐ 0x21C4C:huán 0x21C50:yí 0x21C51:juān 0x21C54:zhǐ,qì 0x21C5C:zhào 0x21C63:xù 0x21C6F:lòng 0x21C71:zhù 0x21C73:suǒ 0x21C77:dié 0x21C7A:qú 0x21C7C:kè,kuà 0x21C7D:hū 0x21C7E:jū 0x21C80:qǐng 0x21C8D:bīng 0x21C95:tì 0x21C97:jué 0x21C9A:qiú 0x21CA3:jiàng 0x21CAA:yùn 0x21CAD:mèi 0x21CAE:pī 0x21CB0:qú 0x21CBC:mì 0x21CBF:tì 0x21CC2:kài 0x21CC4:bǐ 0x21CC6:qū,qù 0x21CCF:tiāo 0x21CD1:chù 0x21CD8:jú 0x21CDA:xī 0x21CDE:lìn 0x21CED:chǐ 0x21CEE:jī 0x21CF4:lú 0x21CF8:lì 0x21CFE:jué 0x21D05:zhū 0x21D06:lù 0x21D0E:niè 0x21D14:quán 0x21D2D:yà 0x21D2F:è 0x21D31:hù,jié 0x21D40:máng 0x21D49:wù 0x21D4C:chā 0x21D51:qīn 0x21D52:jié,qǐ 0x21D53:hóng 0x21D55:dān 0x21D56:ěn 0x21D57:zè 0x21D58:hù 0x21D59:àng 0x21D5A:jiè 0x21D5B:fù 0x21D5C:yòng 0x21D5E:fēng 0x21D6C:mù 0x21D76:sè 0x21D77:cóng 0x21D7B:kāng 0x21D82:yào 0x21D83:ài 0x21D84:bāo 0x21D86:pǒ 0x21D88:shǐ 0x21D89:fàn 0x21D8B:jú 0x21D8C:pí 0x21D8E:wèi 0x21D8F:kū 0x21D90:qié 0x21D91:gān 0x21DA2:kuàng 0x21DA3:suì 0x21DA4:bēng,yòng 0x21DA5:jiā 0x21DA6:yà 0x21DAA:kàn 0x21DAB:niè 0x21DAD:xíng 0x21DAF:xì 0x21DB1:lìn 0x21DB2:duǒ 0x21DB4:chǎn 0x21DC8:shì 0x21DCB:duì 0x21DCD:jiāng 0x21DCE:yǔ 0x21DCF:lù 0x21DD0:ěn 0x21DD3:gǔ 0x21DD5:wěi 0x21DD6:chē 0x21DD7:huàn,huán 0x21DD8:bié 0x21DDB:hàn 0x21DDC:tuí 0x21DDD:nà 0x21DDE:qǐ 0x21DE0:tóu 0x21DE1:yuān 0x21DE2:wáng 0x21DE4:wú 0x21DE5:gào 0x21DE8:kēng,xíng 0x21DEA:yí,níng 0x21DF8:xiāo 0x21DFA:guǐ 0x21DFB:yà 0x21DFC:suì 0x21DFD:sǒng 0x21DFF:zhuó 0x21E02:tū,tú 0x21E03:xiǎn,jiǎn 0x21E08:zè 0x21E09:lì 0x21E0C:zhù 0x21E0E:jié 0x21E11:tì 0x21E14:xié 0x21E15:qióng 0x21E17:yà 0x21E18:jū 0x21E1B:yín 0x21E1C:zhí 0x21E1E:kǎn 0x21E1F:zī 0x21E21:kē 0x21E23:niè 0x21E24:qiáng 0x21E25:wǎn 0x21E26:zé 0x21E28:jū 0x21E2A:zì 0x21E44:yà 0x21E47:lín 0x21E49:qí 0x21E4E:huí 0x21E53:qì 0x21E55:yáng 0x21E56:suì 0x21E58:qǐ 0x21E59:guī 0x21E62:qìn 0x21E63:ē 0x21E65:zuò 0x21E68:zè 0x21E69:qì 0x21E6A:jí 0x21E6C:tuó 0x21E6D:dié 0x21E6F:huì 0x21E70:máo 0x21E72:xǔ 0x21E75:hóu 0x21E76:yǎn 0x21E77:xiáng 0x21E78:cōng 0x21E79:hú 0x21E7C:àn,yǎn 0x21E7E:bǐng 0x21E87:duǒ 0x21E90:zhǔ 0x21E91:dié 0x21E92:yōu 0x21E93:qǐ 0x21E94:shí 0x21E95:xūn 0x21E96:yōu 0x21E97:kān 0x21E98:qiǎo 0x21E9B:qiāng,huà 0x21E9C:pén 0x21E9F:quán 0x21EA1:yíng 0x21EA7:shā 0x21EAB:tāo 0x21EAD:hòng 0x21EAE:pǐ 0x21EAF:yáo 0x21EB4:tú 0x21EB5:chái 0x21EB7:xià 0x21EB8:qí 0x21EBA:qióng 0x21EBD:jìn 0x21EC8:zhēn 0x21ECC:zhū 0x21ECE:xī 0x21ED0:wēng 0x21ED1:zhǒng 0x21ED5:suì 0x21ED8:kē 0x21ED9:kuò 0x21EDA:kǎng 0x21EDD:cháo 0x21EDE:bì 0x21EDF:mò 0x21EE0:zhù 0x21EE1:hàn,yán 0x21EE2:yǔ 0x21EE3:yí 0x21EE4:má 0x21EE7:qì 0x21EE8:gùn 0x21EE9:màn 0x21EEA:liáo,liù 0x21EEB:lín 0x21EEC:zú 0x21EED:lěi 0x21EEE:hù 0x21EEF:chuǎng 0x21EF0:qì 0x21EF1:léi 0x21F01:chī 0x21F03:pó 0x21F04:dié 0x21F0A:lěi 0x21F0E:yǐ 0x21F13:diàn 0x21F16:dūn 0x21F17:gāo 0x21F18:hū 0x21F1A:xiāo 0x21F1B:gá 0x21F1C:pēng 0x21F2C:shěn 0x21F31:wéi 0x21F3B:duì 0x21F3C:cháo 0x21F3D:yǐn 0x21F3E:kuài 0x21F3F:kū 0x21F41:zuì 0x21F42:gǔ 0x21F45:yùn 0x21F46:zhì 0x21F49:jì 0x21F4A:chēng 0x21F56:xiè 0x21F5B:zuǐ 0x21F5C:án 0x21F5D:hāo 0x21F60:pǒ 0x21F62:dí 0x21F63:yè 0x21F67:náo 0x21F71:jié 0x21F72:bàng 0x21F73:lǎn 0x21F74:cáng 0x21F76:bì 0x21F7B:zhǎn 0x21F7C:qì 0x21F82:náo 0x21F85:lǜ 0x21F87:kuàng 0x21F89:mó 0x21F8B:lěi,léi 0x21F8C:páo 0x21F92:lì 0x21F93:céng 0x21F95:dàng 0x21F96:lěi 0x21F99:è 0x21F9B:bèng 0x21F9C:jué,huò 0x21FA5:xuán 0x21FA6:niè 0x21FA8:hài 0x21FAE:xiǎn 0x21FB0:jiǎn 0x21FB1:mí 0x21FB2:niè 0x21FBB:cáng 0x21FBC:sǒng 0x21FBD:zēng 0x21FBE:yì 0x21FC2:chóng 0x21FC4:cáng 0x21FC9:lěi 0x21FCA:nuó 0x21FCB:lì 0x21FCE:lí 0x21FCF:luó 0x21FD3:tǎng 0x21FD6:niè,yà 0x21FD7:niè 0x21FD9:jī 0x21FDB:lěi 0x21FDD:nàng 0x21FE0:lín 0x21FE1:líng 0x21FE4:xián 0x21FE5:yù 0x21FE7:zāi 0x21FE8:quǎn 0x21FE9:liè 0x21FEF:yù 0x21FF0:huāng 0x21FFA:nǎo 0x21FFC:xùn 0x21FFE:jú 0x21FFF:huò 0x22001:yì 0x2200A:xī 0x2200B:sè 0x2200C:jiǎo 0x2200D:yōng 0x22015:shī 0x22016:jīng 0x22017:wàn 0x22018:yě 0x22019:jiū 0x2201C:gǒng 0x22021:huī,zuǒ 0x2202A:ěr 0x22035:hàn 0x2203C:fú 0x22040:fú 0x22041:zhuó 0x22042:jī,jì 0x2204F:bāng 0x22052:qí 0x22053:shǐ,hài 0x22055:diǎo 0x22056:pèi 0x22057:xiǎn,gàn 0x22058:sān 0x2205D:cháng 0x2205E:yuē 0x22060:gōng 0x22062:wū 0x22064:fēn 0x22067:chǎn 0x22069:nèi 0x2206A:jué 0x2206C:zhǎo 0x2206E:qián 0x22071:ǎo 0x22076:wǎng 0x22077:zhōng 0x22079:huāng 0x2207B:bù 0x2207C:zhǔ 0x2207D:bì 0x2207E:chāo 0x2207F:zhēng 0x22080:fú 0x22081:kōu,qú 0x22083:zuó 0x22084:xuàn 0x22086:fù 0x2208A:yǎo 0x2208D:bō 0x2208F:bèi 0x22090:xié 0x22091:shì 0x22092:yí 0x22094:hóng 0x22095:cuì 0x22097:yì 0x22098:zhuān 0x2209D:chì 0x220A4:pō,lù 0x220A8:yín 0x220B1:yuàn 0x220B6:jiōng 0x220B9:mào 0x220BA:qiàn 0x220BC:yì 0x220C0:wú 0x220CD:bēi 0x220CE:huò 0x220CF:cóng 0x220D0:kōng 0x220D5:tà 0x220D7:hàn 0x220D8:qiàn 0x220DC:zhí 0x220E2:sè 0x220E5:qiān 0x220E6:guǒ 0x220E9:gǔn,juǎn 0x220EC:jiān 0x220ED:zhōng 0x220EE:miǎn 0x220EF:guǐ 0x220F0:shì 0x220F1:móu 0x220F2:è 0x220F3:bǎ 0x220F4:là 0x220F8:zhòu 0x220FA:jí 0x22100:zǎo 0x22104:zhā 0x22105:yì 0x22107:gǒu 0x2210A:guī 0x2210B:yīng 0x2210C:shǎi 0x2210D:hé,gé 0x2210E:bàng 0x2210F:mò 0x22110:méng 0x22113:wù 0x22114:dài 0x22117:jiǒng 0x2211C:hàn 0x2211F:tōng 0x22120:kōu 0x22121:lí 0x22122:zhì 0x22123:huì 0x22124:zǎn 0x22126:diǎo 0x22127:cù 0x22131:zhì 0x22133:kuǎ 0x22135:xiàng 0x22136:huà 0x22137:liáo 0x22138:cuì 0x22139:qiāo 0x2213A:jiǎo 0x2213C:xū 0x2213D:èr 0x2213F:tuō 0x22140:tán 0x22141:zhì 0x22148:nǎo 0x22149:mào 0x2214A:dì 0x2214B:céng 0x2214E:jiǎo 0x2214F:lián 0x22151:shā 0x22152:dàn 0x22155:suì 0x22156:lián 0x22157:guò 0x2215A:biǎo,biāo 0x2215C:cì 0x2215D:diàn 0x2215E:lǜ 0x2215F:nǐ 0x22160:yǎn 0x22161:lán 0x22164:gài 0x22165:chú 0x22169:bì 0x2216A:zú 0x2216B:huì 0x2216D:lǎi 0x2216E:xián 0x2216F:fèn 0x22170:hè 0x22179:yào 0x2217A:zhǎn 0x2217C:néi 0x2217E:luǒ 0x22180:yuán 0x22182:néng 0x22189:rěn 0x2219C:gé 0x2219E:jiǎn 0x2219F:píng 0x221A3:biè 0x221A6:jiàn 0x221A9:bìng 0x221AF:mì,xuán 0x221B0:hù 0x221B4:diǎo 0x221B6:yōu,zī 0x221B7:yāo,miào 0x221B8:bēng 0x221BA:chén 0x221BB:jī,duì 0x221BD:yāo 0x221C7:guān 0x221C8:yàn 0x221D5:chǐ 0x221D7:shà 0x221D8:yǎn 0x221D9:yì 0x221DA:yì 0x221DB:chè,chǐ 0x221DE:hàn 0x221DF:huāng 0x221E4:shuì 0x221E5:suì 0x221E6:rén 0x221E7:tán 0x221E8:zhǐ 0x221EA:fàn 0x221EB:fěng 0x221F0:tán 0x221F2:mí 0x221F3:pí 0x221F4:bù 0x221F5:nà 0x221F6:tián 0x221F7:bá 0x221F8:yì 0x22202:yǎn 0x22204:tiāo 0x22206:yáo 0x22207:shěn 0x22208:kē,wā 0x22209:tóng 0x2220B:xuǎn 0x22213:yòu 0x22215:bài 0x22219:xiá 0x2221A:lǚ 0x2221B:kùn 0x2221C:zāng 0x2221D:qiú 0x22220:cù,là 0x22221:zuī 0x22222:lǒu 0x22224:xiá 0x2222F:shēn 0x22232:pú 0x22234:jīng 0x22235:qiāng 0x22236:yì,sī 0x22238:niè 0x22239:duī,tuí 0x2223B:jié 0x2223C:suì 0x2223D:zhàn 0x2223E:cōu 0x22241:bēng 0x22242:guān 0x22243:shě 0x22245:jìn 0x22246:dì 0x22251:dān 0x22253:nǎi 0x22255:nóu 0x22257:jí 0x22258:yán 0x2225A:nòu 0x2225C:dù,tú 0x2225D:wèi 0x2225E:piān 0x22262:hú 0x22264:jià 0x22265:yè 0x22266:jǔn 0x22267:lán,lián 0x22268:là 0x22269:yīn 0x2226D:tuí 0x22275:nǎo 0x2227A:zǔ 0x2227F:mà 0x22280:sī,mà 0x22281:zhì 0x22284:huī 0x22285:zhuì 0x22287:huì 0x2228D:chú 0x2228F:chè 0x22292:xiū 0x22293:lán 0x22295:cōng 0x22296:shèn 0x22297:mò 0x22298:yī 0x22299:yáo 0x2229A:xǐ 0x2229B:zuǐ 0x2229C:bìng 0x222A7:yú 0x222A9:lù 0x222AE:tuí 0x222AF:wěi 0x222B1:fén 0x222B2:shěn 0x222BB:liáo 0x222C2:shǔ 0x222C3:dǎn 0x222C4:juǎn 0x222C5:yú 0x222C6:xìn 0x222C7:yáo 0x222C8:sū 0x222D2:huó 0x222D4:qiān 0x222DA:má 0x222DD:kǎi 0x222E1:lǔ 0x222E3:yōu 0x222EE:xiàn 0x222F9:wú 0x222FB:yǐn 0x222FC:xī 0x222FF:zhāi 0x22300:xiè 0x22304:qú 0x22308:lí 0x2230D:qiān 0x22314:líng 0x22315:luán 0x2231A:chān 0x22326:zhèng 0x22328:yán 0x22332:yìn 0x22333:kuí 0x22337:qū 0x22339:fú 0x2233B:yù 0x22341:qí,bì 0x22346:qì,qiè 0x22347:jì 0x22348:yuān,zàng 0x2234E:gào 0x2234F:juàn 0x22351:qí 0x22353:gǎi 0x22355:quàn 0x2235A:wèi 0x22367:zhì 0x2236B:jiǎn 0x2236D:sì 0x22370:yì,zé 0x22371:qiān 0x2237C:lì 0x2237F:zāng 0x22380:yì 0x22382:cái 0x22383:yì 0x22384:gē 0x22386:dié 0x22388:zhī 0x22389:yì 0x2238B:zāi 0x2238C:dài 0x2238E:sù 0x22394:jié 0x22395:chèn 0x22396:qú 0x22398:hàn 0x22399:xián 0x223A0:quán,juàn 0x223A1:jié 0x223A5:juàn 0x223AA:dàn 0x223AD:jīn 0x223B4:bīng 0x223B5:hú 0x223B9:jué 0x223BB:yú 0x223C3:lǐ 0x223C4:qiáng 0x223C5:shuǐ 0x223C6:kū 0x223C8:zhěn 0x223CD:fú 0x223CE:shēn 0x223D2:chuí 0x223D5:tóng 0x223D7:yì 0x223D9:yáng 0x223DC:tuó 0x223DD:zhōu 0x223DE:jí 0x223E4:xùn 0x223E6:shěn 0x223E7:xuān 0x223ED:liú 0x223EE:yuān 0x223EF:hú,shǐ 0x223F0:zhèng 0x223F3:pēng,bēng 0x223F7:jué 0x22402:zhì 0x22403:piān 0x22404:yuàn 0x22406:jiān 0x2240A:páng 0x2240E:zhuàn 0x22410:xián 0x22412:bēng 0x22414:cōng 0x22416:mò 0x2241A:guó 0x2241E:chéng 0x2241F:qiāo 0x22426:bì 0x22429:qiǎng 0x2242B:zhōu 0x22432:fán 0x22433:biē 0x2243E:bó 0x2243F:rǎng,rǒng 0x22445:dǐng 0x22446:quán 0x22447:jiù 0x22448:yáo 0x22453:xiá 0x22456:zǎo 0x2245D:dān 0x2245F:wǔ 0x22460:tuó 0x22462:hū 0x22467:xī 0x2246C:lái 0x2246E:fēi 0x22479:hú 0x22486:xiān 0x22489:shǎn 0x2248D:fèi 0x22490:cuò 0x22492:fú 0x22494:chù 0x2249D:diū 0x2249E:làn 0x224A9:xǐ 0x224AF:biāo 0x224B0:yù 0x224B1:suì 0x224B2:xǐ 0x224B7:póu 0x224B9:shǎn 0x224BE:jiào 0x224C0:yì 0x224C3:wán 0x224C4:jǐ 0x224C6:wán 0x224C7:tuì,nà 0x224CB:àng 0x224CD:tiān 0x224CE:chí 0x224D2:rán 0x224D4:sà 0x224D5:yín 0x224D6:pī 0x224D7:cǐ 0x224D8:tóng,tāo 0x224D9:yǐn 0x224DC:gé 0x224DD:tiāo 0x224DE:zhēng 0x224DF:zhòu 0x224E1:yí,tí 0x224E2:kuà 0x224E3:sōng 0x224E7:dì 0x224EC:xié 0x224EE:xiāo 0x224EF:guàng,wǎng 0x224F0:tuǒ 0x224F1:fēng,fèng 0x224F2:wú,hú 0x224F5:xiù 0x224FF:yóu 0x22501:líng 0x22502:yàn 0x22505:dōng 0x22506:qì 0x22507:táo 0x22508:hán 0x2250A:chí 0x2250B:sōng 0x22511:quǎn 0x22514:hàn,jí 0x2251F:rǒu,niǔ 0x22520:qì 0x22521:kāi 0x22522:yú 0x22523:chā,shà 0x22524:chèng 0x22525:yù 0x22527:bìng 0x22529:cōng,sǒng 0x2252A:zhū 0x2252C:yù 0x22531:jué,què 0x22532:liù 0x22533:sāo 0x22534:yù 0x22545:shuài 0x2254B:yuàn 0x2254E:zhāng 0x22551:shuài 0x22553:chǔ 0x22554:zhāng,zhàng 0x22555:sǎn,sàn 0x22556:xiān 0x22558:cuī 0x22559:měng 0x2255A:dí 0x2255E:zhì 0x2255F:ào 0x22566:xiū 0x22568:pián 0x2256A:jiào 0x2256B:kuǎn 0x2256C:sà 0x2256D:xiàn 0x2256E:zhà 0x2256F:diàn 0x22577:yí 0x2257A:huì 0x2257B:shàn 0x22584:chóng 0x22585:yí 0x22586:xiè 0x22587:zhì 0x22588:tiào 0x2258A:pīng 0x2258B:xián 0x2258E:xiān 0x2258F:sù 0x22591:cuán 0x22597:sǒng 0x2259B:hēi 0x2259D:xiàn 0x2259F:yóu 0x225A1:yù 0x225A4:tái 0x225A6:jué 0x225A7:nàng 0x225A9:diān 0x225AB:yì 0x225AC:bì 0x225B3:xū 0x225B4:yì 0x225B5:rù 0x225B7:gōng 0x225BA:yì 0x225BF:zhì 0x225C0:xīn 0x225C2:jì 0x225C4:xià 0x225C8:zhāo 0x225C9:nè 0x225CA:xiè,jiá 0x225CE:yì 0x225EB:fǔ 0x225ED:shè 0x225EF:yuán 0x225F0:fǎn 0x225F2:fū 0x225F3:wù 0x225F4:xī 0x225F5:hǒng 0x225F9:jì 0x225FA:chàng 0x225FF:mò 0x22600:pèi 0x22603:mú,wǔ 0x22604:qiú 0x22605:mào,róu 0x22607:dá,dàn 0x22609:xiá 0x2260A:shēn 0x2260B:tè 0x2260C:hóng 0x2260D:bì,fú 0x2261D:nǐ 0x2261F:qiáo 0x22627:ruǎn 0x22638:jiàng 0x22639:chā 0x2263A:mǐ,mí 0x2263D:yì 0x2263F:suō 0x22641:wù 0x22642:xuān 0x22645:xí 0x22647:yǐ 0x22650:náo 0x22653:wèi 0x2266E:kàn 0x22671:lòng 0x22672:lǚ 0x22673:zhuǎng 0x2267A:zhì 0x2267C:xìng 0x2267E:gěng 0x2267F:jìn 0x22680:xiàn 0x22681:jì 0x22682:cuò 0x22684:láo 0x22685:fěn 0x22686:jù 0x2268B:miào 0x2268C:xiá 0x22691:sù 0x226A8:zhì 0x226AA:hù 0x226AB:kòu 0x226AD:suǒ 0x226AE:nì 0x226BA:tēng 0x226BB:zhù 0x226C1:dá,chè 0x226C3:qiú 0x226C4:yà 0x226C6:xián 0x226C9:nèi 0x226CD:zhǐ 0x226CE:bié 0x226D2:chǒng 0x226D3:lán 0x226D4:dōng 0x226D5:qūn 0x226D6:xiàng 0x226D8:xiáo 0x226D9:wǎn 0x226DA:rù 0x226DB:wàng 0x226DC:nì 0x226DE:bāi 0x226DF:yà 0x226E5:sī 0x226E6:yǐn 0x226E8:yù 0x226EE:lí 0x226EF:huò 0x22717:bàng 0x22723:xī 0x22725:jiū 0x22728:xiè,dié 0x22729:qiān 0x2272A:nuò,ruò 0x2272B:xǐng 0x2272C:duó 0x2272D:jǐ 0x2272E:wǔ 0x2272F:mú,móu,mǔ 0x22730:yàn,yǎn 0x22731:qì 0x22732:ná 0x22733:chì 0x22734:hóu 0x22736:sào 0x22738:náo 0x2273B:chěng 0x2273C:chěng 0x2273D:kuí,kuǐ 0x2273F:jià 0x22740:tú 0x22741:hōng 0x22742:dú 0x22745:xiá 0x22746:zhòng 0x22747:huò 0x22748:chóng 0x22749:dá 0x2274C:mào 0x2274D:yào 0x22753:juān 0x2276C:shì 0x2276F:yín 0x22773:gǔ 0x22774:wù 0x22778:guò 0x22779:tì 0x2277B:hōng 0x22787:rě 0x22789:yí 0x2278B:tǔn 0x2278F:qióng 0x22790:hài 0x22792:qì 0x22795:huò 0x22796:tì 0x22797:pī,bī 0x2279A:gěng 0x2279C:xiè 0x2279E:mì,mí 0x2279F:gào 0x227A0:tā 0x227A1:xiǎng 0x227A3:shū 0x227A6:fú 0x227AC:zhuān 0x227AD:liù 0x227C5:yóu 0x227CA:chěng 0x227CB:duī 0x227E2:lí 0x227E3:yàng 0x227E4:lí 0x227E7:lǔ 0x227E8:mǔ 0x227E9:suì 0x227EA:ài,xì 0x227ED:kòu 0x227EF:zhé,shì 0x227F0:ài 0x227F1:téng 0x227F3:lǜ 0x227F4:tuí 0x227F5:bī 0x227FE:huì 0x227FF:huán 0x2281B:kuò 0x2281D:xīn 0x22821:sào 0x2282B:shù 0x2282C:què 0x2282D:bā 0x2282E:tuì 0x22832:fù 0x22833:biē 0x22835:tǎng 0x22837:xiàng 0x22839:sī,xī 0x2283A:bó 0x2283C:mái 0x2283D:dàng 0x2283F:guì 0x22840:hēi 0x22841:xī 0x22842:dàng 0x22843:yì 0x22845:bī 0x22847:gū 0x22848:cuì 0x22849:sè 0x2284D:gé 0x2284E:yù 0x2284F:nǎ 0x22851:lì 0x22852:zhì 0x22870:zhào 0x22874:jī 0x22875:ruǎn 0x22879:chòng 0x22882:jié 0x2288C:chàng 0x2288D:zhé 0x22892:sū,sù 0x22893:yōng 0x22896:qì 0x22897:zhuó 0x2289A:kài 0x2289C:yè 0x2289E:qì,jì,kuài 0x228B9:xiòng 0x228C9:yī 0x228CA:chǒu 0x228CE:tuǎn 0x228CF:ài 0x228D0:pīn 0x228D3:liè 0x228D4:mián 0x228D5:ài,chī 0x228D7:mǒ 0x228D8:wèi 0x228D9:yìng 0x228DA:nǐ 0x228DE:bó 0x228E0:liù 0x228F3:ruì 0x228F5:chú 0x228FB:lǘ 0x228FC:chá 0x228FF:chù 0x22901:sào 0x22902:lí 0x22904:sōng 0x22906:lì,là 0x2290B:xì 0x2290D:yān 0x2290E:cuō,zuǒ 0x22910:liú 0x22918:méng 0x2291A:zhàn 0x22924:zhuàng 0x22927:miǎo 0x22929:lì 0x2292B:jǔ 0x2292F:xiè 0x22930:xiè 0x22931:lǒng 0x22932:lóng 0x22942:téng 0x22943:zhù 0x2294B:chán 0x2294C:xiǎn 0x2294F:yíng 0x22950:pèi 0x22958:xié 0x2295A:jiào 0x2295E:chōng 0x22973:hē 0x2297D:tǔn 0x22985:hǒng,zhuàng 0x22988:mán 0x2298A:jīn 0x2298C:qú 0x2298D:dǒu 0x2298E:qiú 0x2298F:zāi 0x22991:shēng 0x22992:zāi 0x22995:yǐ,zhí 0x2299A:huà 0x2299F:kān 0x229B0:yuè 0x229B1:nì 0x229B2:sī 0x229B4:wǒ 0x229B8:cán 0x229BA:jiān 0x229BC:miè 0x229BD:sháo,qī 0x229BF:rǒng 0x229C0:gān 0x229C5:qiáng 0x229C7:shú 0x229C8:zhuó 0x229CF:shī 0x229D1:tì 0x229D6:zhá 0x229D7:zhān 0x229DD:fèn 0x229DE:miè 0x229E0:zè 0x229E4:zhì 0x229E5:qiān 0x229E6:hàn 0x229E7:gé 0x229EE:cán 0x229F0:guó 0x229F1:jiāo 0x229F3:yōng 0x229F4:áo 0x229FB:zhá 0x229FD:xì 0x22A01:xū 0x22A02:wǔ 0x22A0F:jué 0x22A10:jí,jī 0x22A12:chì 0x22A14:wǎn 0x22A16:miè 0x22A17:zéi 0x22A1C:jié 0x22A1D:shí 0x22A1F:xī,xì 0x22A21:è 0x22A25:hù 0x22A26:hù 0x22A28:lì 0x22A2B:chù 0x22A2E:yī 0x22A2F:mǎo 0x22A30:xū 0x22A31:zhōng 0x22A33:yì 0x22A3A:liáo 0x22A3F:jiān 0x22A40:jiǎn 0x22A41:jú 0x22A44:zhù 0x22A48:wǔ 0x22A4F:kè 0x22A50:kě 0x22A51:lì 0x22A52:bǐ 0x22A53:gé 0x22A55:xū 0x22A56:shā 0x22A57:líng 0x22A58:kē 0x22A5E:bó 0x22A5F:biān 0x22A60:shuān 0x22A61:qí 0x22A62:shàn 0x22A66:jī 0x22A68:qiǎo,xiǔ 0x22A6E:yì 0x22A6F:jué 0x22A70:zhǎng 0x22A72:xìn 0x22A77:tuō 0x22A78:hài 0x22A79:xià 0x22A7B:tuó 0x22A7C:yí 0x22A83:cù 0x22A87:jiāng 0x22A88:nán 0x22A8B:pěng,féng,bàng 0x22A8D:jié,jiā 0x22A8E:xuē 0x22A8F:hú,gǔ 0x22AA5:yǒu 0x22AA6:nǔ 0x22AA7:yè 0x22AAA:yìn 0x22AAC:kǒng 0x22AB6:xiāo 0x22AB7:xiāng 0x22ABC:náo 0x22ABE:zhàng 0x22AD0:jié 0x22AD3:nǔ 0x22AD4:shàn,quán 0x22AE2:jiá 0x22AE7:zhǒu 0x22AE8:rǒng,rēng 0x22AEB:lù 0x22AEC:sà,cuō,shā 0x22AED:nù 0x22AEF:bó 0x22AF0:zhé 0x22AF2:qǐn 0x22AF4:cī 0x22AF5:zú 0x22AF7:wǒ 0x22AF8:wǔ,wū 0x22AFB:nié 0x22AFF:xiān 0x22B00:hóng 0x22B2B:tìng 0x22B2C:jǐn 0x22B31:jié 0x22B32:hè 0x22B33:tū 0x22B34:zhé,niè,dié 0x22B35:pīn,pān,biàn,fān 0x22B36:jìn 0x22B37:nàn 0x22B3C:dùn 0x22B3E:xī 0x22B3F:xiè 0x22B41:xì 0x22B42:láo 0x22B43:duǎn,dòu 0x22B44:jì 0x22B45:chā 0x22B46:chōu 0x22B48:gāng 0x22B4E:xiáng 0x22B4F:dǎo 0x22B65:biàn 0x22B66:xiāo 0x22B67:xīn 0x22B81:yǔ 0x22B82:xián 0x22B83:lí 0x22B84:qiǎn 0x22B87:měi 0x22B89:qiāo 0x22B8A:yà 0x22B8C:qiā,jié 0x22B8D:qiòng 0x22B8F:bàng 0x22B90:zhēng 0x22B9A:zè 0x22B9B:shuàn,tuán 0x22B9E:sào 0x22BC5:lù,jué 0x22BC9:xié 0x22BCB:fǔ 0x22BCC:zhài 0x22BE9:zè 0x22BEB:duàn,wǎn 0x22BED:dèng 0x22BEE:yù 0x22BF0:lǜ 0x22BF2:wàn 0x22BF3:xué 0x22BF4:jiǎo 0x22BF5:yuě 0x22BF6:zhì 0x22BF7:wěi,huī 0x22BF9:gé 0x22BFA:jǔ 0x22BFC:yǎn 0x22BFD:cuò 0x22BFE:mào 0x22C06:fú 0x22C07:āi 0x22C0A:xuān 0x22C0C:gāng 0x22C0D:ān 0x22C12:jí 0x22C18:pí 0x22C19:zhǐ 0x22C1C:nuó 0x22C3F:pàn 0x22C41:yí 0x22C44:jié 0x22C46:zī 0x22C48:jià 0x22C49:wǎi 0x22C4C:jià 0x22C5F:chǎn,chī 0x22C61:suǒ 0x22C62:suǒ,sè 0x22C63:jí 0x22C64:sǒng 0x22C66:tī 0x22C67:pī 0x22C68:pó 0x22C6E:mì 0x22C74:yè 0x22C76:qìn 0x22C77:jìn 0x22C7A:juē 0x22C7D:yuān 0x22C7E:ruán 0x22C94:bàn,bān,pān 0x22CB0:bīn 0x22CB4:wèi 0x22CB5:zào 0x22CB6:qiè 0x22CB7:sōu 0x22CB8:lǔ 0x22CBC:dié 0x22CBD:chuāi 0x22CBE:bì 0x22CBF:zhú 0x22CC0:mā,mó 0x22CC1:fèi 0x22CC2:piē 0x22CC3:yìn 0x22CC4:xuàn,xuán 0x22CC6:ào,áo 0x22CC7:zhuó,zú 0x22CC8:zú 0x22CCB:bǐ 0x22CD1:làng 0x22CD3:tì 0x22CD9:tiǎo 0x22CDA:jiān 0x22CDF:tǒng 0x22CFD:duō 0x22CFE:dòng 0x22D02:biǎn 0x22D20:zhì 0x22D22:fén 0x22D26:káng 0x22D27:zhì 0x22D28:zhāi,zhì,chì 0x22D29:bì 0x22D2A:kuǎn 0x22D2C:bàn 0x22D2D:juē 0x22D2E:qū 0x22D30:qī 0x22D31:léi 0x22D32:xié,jié 0x22D33:tāng 0x22D3C:sōu 0x22D3E:bèi 0x22D47:yàng 0x22D48:jiǎn,zhǎn 0x22D65:zào 0x22D80:zhuài,chuái 0x22D83:fán 0x22D85:shé 0x22D87:qióng 0x22D89:pò 0x22D8B:tiě 0x22D8C:shā 0x22D8D:zá,sà 0x22D91:niǎo 0x22D92:guài 0x22D93:cuǐ 0x22DA1:qiào,jiǎo 0x22DA3:dié 0x22DB3:pīn 0x22DB4:cí 0x22DB6:bàng 0x22DCD:yìn 0x22DD1:xiǎn 0x22DD4:yǐ 0x22DD5:miǎo 0x22DD6:duǎn 0x22DD7:zhòu 0x22DD9:kōng 0x22DE2:zhāng 0x22DF6:liú 0x22DF8:zhǐ 0x22DF9:chǎn 0x22DFA:dú 0x22DFB:yuán 0x22DFE:suò,cè 0x22DFF:jié 0x22E00:lì 0x22E01:gǒng 0x22E0C:bāng 0x22E17:guó 0x22E18:liáo 0x22E19:shěn 0x22E23:niǎo 0x22E25:cuàn 0x22E26:wěi 0x22E28:tuō 0x22E2B:sū 0x22E2D:lóng 0x22E33:xiāo 0x22E34:yǎn,yán 0x22E43:qǐng 0x22E4D:xī 0x22E4F:yú 0x22E51:zhèng,zhēng 0x22E52:xiè 0x22E53:chāi 0x22E54:fèn 0x22E56:guó 0x22E58:jǐng 0x22E59:làn 0x22E5A:xiān 0x22E5D:líng 0x22E6E:lěi 0x22E72:jùn 0x22E73:xiào 0x22E7C:zá 0x22E84:guān 0x22E85:qiè 0x22E86:luò 0x22E87:yào 0x22E88:luán 0x22E89:tà 0x22E91:luò 0x22E9E:bǎ 0x22E9F:chàn 0x22EA1:zhuó 0x22EAB:tiǎo 0x22EAF:wān 0x22EB0:líng,lìng 0x22EB4:yù 0x22EB5:qì,qǐ 0x22EB7:qí 0x22EBC:jì 0x22EBD:bó,jiào 0x22EBF:shī 0x22EC0:fǔ 0x22EC2:guī 0x22EC5:diǎn 0x22EC7:hāo 0x22EC9:gǎi 0x22ECB:qí 0x22ED3:chéng 0x22ED4:huì 0x22ED7:xiá,guī 0x22ED8:shí 0x22ED9:zhì 0x22EDA:qí 0x22EDC:hài 0x22EDF:jiǎo 0x22EE0:lì 0x22EE2:liǎo 0x22EE4:qiāo,qiáo 0x22EE8:sà 0x22EEA:qī 0x22EEB:shī 0x22EEE:jié,fú 0x22EF5:bèi,lù 0x22EF6:biān 0x22EF7:bā 0x22EF8:jūn 0x22EF9:pī 0x22EFC:dǎn 0x22EFF:táng 0x22F00:kuǐ 0x22F01:kū 0x22F03:kǒu 0x22F09:shī 0x22F0A:shī,tuó 0x22F0B:jī 0x22F0C:bào 0x22F10:kě 0x22F11:kuāng 0x22F16:mǐn 0x22F19:liáo 0x22F1A:è 0x22F1B:gé,guó,è 0x22F1F:wǎng 0x22F20:duó 0x22F23:qià 0x22F24:huá 0x22F26:hǒng 0x22F29:pēng 0x22F2B:jiào 0x22F30:qū 0x22F31:zì 0x22F32:zhòu 0x22F33:kuāng 0x22F35:shā 0x22F37:jì 0x22F38:wēi,wéi 0x22F39:pū,bǔ 0x22F3A:xué 0x22F3C:shāo 0x22F42:láng 0x22F43:zhǐ 0x22F44:tǐng 0x22F47:dà 0x22F55:yáng 0x22F56:jìn 0x22F57:zhǐ 0x22F5A:zhuó,dū 0x22F5C:zá 0x22F5D:chán 0x22F62:mào 0x22F66:kōng 0x22F67:zhōu 0x22F68:hū 0x22F69:pēng 0x22F6D:jiù 0x22F78:chuò 0x22F79:mǐn 0x22F7E:xiào 0x22F80:dǔ 0x22F81:wéi 0x22F83:cán 0x22F84:yú 0x22F85:dù 0x22F86:kāi 0x22F87:pì 0x22F8A:chéng 0x22F8E:chǔn 0x22F90:shǎo 0x22F91:yǎn 0x22F92:kuài 0x22F94:yuē 0x22FA6:qí 0x22FA7:zhēng 0x22FA9:kè 0x22FAA:qí 0x22FAB:zhǐ 0x22FAC:lù 0x22FB1:pī 0x22FB2:nuò 0x22FB3:pǎo 0x22FBA:fěi 0x22FBF:wén 0x22FC2:méng 0x22FC8:shǎn 0x22FCC:xiòng,xuàn 0x22FCE:duò 0x22FCF:biào,pāo 0x22FDA:yōu 0x22FDC:màn 0x22FDE:liǎo 0x22FE1:xié 0x22FE2:luàn 0x22FE3:qiāo 0x22FE4:dèng 0x22FE6:chéng 0x22FE7:chéng 0x22FED:chuò 0x22FF8:cè 0x23000:léi 0x23001:zhǎn 0x23002:lǐ 0x23003:lián 0x23004:qún 0x2300D:chén 0x2300F:chéng 0x23010:gū 0x23012:zòng 0x23013:chóu,dǎo 0x23014:chuàn,chuò 0x2301C:lèi 0x2301D:shuò 0x2301E:lǜ 0x23023:fú 0x23025:lì 0x23027:sàn 0x2302B:sān 0x2302F:sà 0x23033:niè 0x23036:zuān 0x23037:lǐ,lí 0x2303B:shǔ,zhǔ 0x2303E:fú 0x23049:bì 0x2304D:dào 0x23052:shī 0x23056:gàn 0x23057:tàn 0x2305C:màn 0x2305F:lí 0x23062:bì 0x23066:pán 0x23068:yōu 0x2306D:jiū 0x2306F:guō 0x23070:liáo 0x23073:wò 0x23074:qià 0x23075:dǒu 0x23077:liè 0x23079:jiǎo 0x2307B:liè,luō 0x23081:tiāo,qiāo 0x23084:guō 0x23086:pāng 0x23087:qiāo 0x23089:dí 0x2308A:yùn 0x23092:lè 0x23096:sī 0x23097:xīn 0x2309C:xīn 0x2309D:xiàng 0x2309E:luǒ 0x230A4:bēng 0x230A5:tiāo,qiāo 0x230AC:xiào 0x230AE:dōu,tóu 0x230B3:dàng 0x230B4:tíng 0x230B5:zhuàn 0x230BB:ōu,kōu 0x230BD:wò 0x230C4:xīn 0x230C5:ruǎn 0x230C8:zhuó 0x230C9:dàng 0x230CD:cuì,chà 0x230D1:zhuó 0x230D7:cóng 0x230D8:chǎn,chuáng 0x230DD:yǎng 0x230E7:yǎn 0x230F3:yǎn,yè 0x230F5:zhèn,shēn 0x230FD:nuǒ 0x230FE:yàn 0x23105:fǎng 0x23109:yǎn 0x2310A:yú 0x2310D:tí 0x2310E:fù 0x2310F:běn 0x23111:yǎn 0x23113:huī 0x23119:huǎng 0x2311C:guì 0x2311D:yàn 0x2311F:hú 0x23120:biāo 0x23127:suì,wéi 0x2312E:zì 0x2312F:jì 0x23130:ě 0x23131:jì 0x23132:kuǐ 0x23134:liàng 0x23138:huò 0x2313A:wéi 0x2313B:zhuō 0x2313F:tǐng 0x23143:zǎi 0x23144:yòu 0x23149:rèn 0x2314D:miàn,bīng 0x2315A:nà,niǔ 0x2315D:tū 0x2315F:dān 0x23161:jué 0x23164:xū 0x23165:dī 0x23170:xiàng 0x23177:xiòng 0x2317A:yǒu 0x2317B:guǎ,jiōng 0x2317E:xī 0x23188:hè 0x2318D:dǐng 0x23190:lú 0x23192:xú 0x23194:zhòu 0x23195:xiàn 0x23196:huāng 0x23197:chā 0x23198:shǐ 0x23199:gàn 0x2319A:nuǒ,chǐ 0x2319B:àn,wǎn 0x2319F:xiē,jiē 0x231A7:hào 0x231B2:qīn 0x231B3:gěng 0x231B4:shān 0x231B5:fú 0x231BD:zè 0x231C7:dàn 0x231D6:diǎn 0x231D7:shēn 0x231D9:zǔ 0x231E2:biē 0x231E6:chuí 0x231E7:zhè 0x231E8:dài 0x231EB:wǒ 0x231EC:qióng 0x231F0:lín 0x231F2:hūn 0x231F3:jī 0x23205:cáo 0x2320A:mù 0x2320D:dié 0x2320E:wèi 0x23220:biàn 0x23221:tǐ 0x23225:tú 0x23236:gèng 0x23244:chí 0x23245:còu 0x23246:tǐ 0x23252:huò 0x23253:qī 0x23254:sāo 0x23255:sàng 0x23256:xuǎn 0x23257:àng 0x23258:nài 0x2325A:yáng 0x2325B:shū 0x2325C:shā 0x23261:tǐng 0x23269:yà 0x2326A:huǎng 0x2326E:bīn 0x2327E:òu 0x2327F:cáo 0x23281:áo 0x23283:mào 0x23294:méng 0x23296:tiān 0x2329D:sàng 0x2329E:xù 0x2329F:kàn 0x232A7:lǎng,zhào 0x232B6:biē 0x232B7:cóng 0x232BA:xián 0x232C4:tūn 0x232C9:yù 0x232CA:dàn 0x232CB:yìng 0x232CD:zhāo 0x232CF:pù 0x232D8:huì 0x232DE:ài 0x232DF:mǒ 0x232E2:jīng 0x232E3:lán 0x232F2:liè 0x232F3:piǎo,bào 0x232F5:bó 0x232F6:qióng 0x232F9:bì 0x232FF:yōng 0x23305:lì 0x2330D:niè 0x2330F:dé 0x23313:huān 0x23317:yuè 0x2331A:chūn 0x2331C:lì 0x2331E:zhāng 0x2331F:líng 0x23320:chún 0x23327:cè 0x23328:xún 0x2332C:jǔ 0x2332D:hui,dá 0x2333E:tōng 0x23346:níng 0x23347:jù 0x2334F:chà 0x23356:zāo 0x2335B:yù 0x2335F:kěn,wěi 0x23366:kuàng 0x23367:fěi 0x2336F:yùn 0x23370:qiǎn 0x23374:quán 0x23378:pò 0x2337A:pěi 0x23384:gèng 0x23385:yì,huān 0x23386:luò 0x23391:kuān 0x23393:xuǎn 0x23394:niàn 0x2339A:hú 0x2339B:jú,xuè 0x233A9:yè 0x233AE:xī 0x233B1:yuè 0x233B2:tǎng 0x233B3:pìn 0x233B4:dǔn,è,ài 0x233B5:bèi,pō 0x233B8:liǎo 0x233C0:yǒng 0x233CE:yā 0x233D1:jiǎo 0x233D4:kùn,kǔn 0x233D6:zhèn 0x233D7:shù 0x233DA:shí 0x233DE:yóu 0x233DF:pài 0x233E0:xiáo 0x233E1:jí 0x233F6:qī 0x233F7:hé 0x233FA:kǒng 0x23402:yè 0x23403:chì 0x2340A:kǎo,jú 0x2340B:yuè 0x2340E:wǎ 0x2340F:niǎn 0x23411:cí 0x23413:yí 0x23424:jiu 0x2342B:yāng 0x2342C:lí 0x2342E:dāi 0x2342F:chóng 0x23435:yí 0x2343A:hàn 0x2343F:yī 0x23441:chòng 0x23442:hù 0x23443:zhuǎ 0x23466:qióng 0x23467:duò 0x23478:tóng 0x23479:xiān 0x2347F:fú 0x23482:diàn 0x23483:xí 0x23484:xiē 0x23485:zhèn 0x23486:qiào 0x23487:tū 0x234B7:hàn 0x234B8:kuàng 0x234B9:suō 0x234BB:shòu 0x234BC:tiáo 0x234C0:zhēn,zhěn 0x234C3:nèi 0x234C5:qiǎn 0x234C6:yín 0x234C8:liǎng 0x234C9:shà,jié 0x234CA:zì 0x234CB:pí 0x234CC:gāo,jú 0x234CF:jìn 0x234D0:yóu 0x234D2:shàn 0x234D4:mì 0x234D5:òu 0x234D7:hū 0x234DB:yòu 0x234DD:měng 0x23510:zhǐ 0x23513:bǐ 0x23517:shēn 0x23518:qì 0x23519:xiān 0x2351A:pán 0x2351B:kǎng 0x2352B:shuān 0x2352C:pí 0x2352E:zāi 0x2352F:zhǔ 0x23531:sōu,sāo 0x23532:jiǒng 0x23535:chán 0x23536:fán,fàn 0x23537:xiáo 0x23538:yǐn 0x23539:hóu 0x2353A:mào 0x2353B:tú,chán 0x2353D:jì 0x23541:yí 0x23543:yù 0x23544:jiōng 0x23545:pào 0x23547:xiāo 0x23549:gǒu 0x2354C:gōu 0x2354D:sǔn 0x2354E:xiǎn 0x2354F:zhuǎn 0x2357E:chóu,bì 0x23584:qiāo 0x23585:tí 0x23586:yún 0x23589:shān 0x2358A:liè,lì 0x2358C:zhǐ 0x23590:pāi 0x235A3:jú 0x235A4:lái 0x235A8:zǐ 0x235AA:qú 0x235AB:gǔ,què 0x235AC:jué 0x235AD:zhí 0x235AE:àng 0x235AF:qìn 0x235B0:pí 0x235B1:zuī 0x235B3:qián 0x235B5:cuó 0x235B7:jí 0x235B8:tí 0x235B9:rú 0x235BB:hǎi 0x235BC:xún 0x235BE:bèi 0x235BF:zhí 0x235C1:dùn,zā 0x235CB:dǎng 0x235D0:réng 0x235F2:gān 0x235F5:gàng,gāng 0x235F6:tà 0x235F8:tuò 0x235F9:yàng 0x235FA:kū 0x235FB:zhì 0x23616:jiān 0x23617:nì 0x23618:shēn,zhēn 0x23619:bàng 0x2361A:shuài 0x2361B:dōu 0x2361D:qiān 0x2361E:hán 0x2361F:qiā 0x23620:gǎn 0x23623:chún 0x23624:chá,sà 0x23625:bì 0x23626:yī 0x23627:fū 0x23628:ě,ē 0x2362A:láo 0x2362B:háo 0x2362C:lí 0x23631:tè 0x23632:shēn 0x23634:yín 0x23637:jiān 0x2363B:chá,tú 0x23657:niè 0x23658:còu 0x2365B:yí 0x2365F:táng 0x23662:juàn 0x23670:chì 0x23671:gǒu 0x23674:jié 0x23675:zhé 0x23676:hú 0x23677:máng 0x2367B:zōu 0x2367C:sì,cí 0x2367F:fèi 0x23680:zī 0x23681:zī 0x23683:jié 0x23684:sī 0x23686:chūn 0x23687:pào 0x2368B:yé 0x2368C:dī,shì 0x2368E:léi 0x2368F:xū 0x23690:rú 0x23692:pá 0x23693:juàn 0x23694:xì 0x23695:yè,yǎn 0x23696:ān 0x23698:yì 0x23699:jiān,jiàn 0x2369C:sōng 0x2369D:wǒ 0x2369F:sè 0x236A0:zhǐ 0x236A1:bī 0x236A2:zhuàn 0x236A6:jiàng 0x236A7:hào 0x236A9:chì 0x236AA:dùn 0x236D3:bó 0x236D4:jí 0x236D5:chuǎ 0x236D7:luò 0x236DA:ruǐ 0x236EB:hú 0x236F1:dàn,lǎn 0x236F4:hǎn 0x236F5:què 0x236F6:shā 0x236F7:zhǎn 0x236F8:zé 0x236F9:chuán,chuǎi 0x236FA:qī 0x236FB:dié 0x236FD:zhà 0x236FE:tòu 0x23701:cī 0x23702:sà 0x23704:luó 0x23707:jí 0x23722:luǒ 0x23723:qín 0x23727:qióng 0x23728:juàn 0x2372C:ài 0x2372D:jiǎn 0x23739:tì 0x2373A:wén 0x2373D:qiāo 0x23741:pái,bēi 0x23742:hún 0x23745:ài 0x23747:shuò 0x23748:lián 0x23749:duì 0x2374B:tà 0x2374C:jǐn 0x2374D:bì 0x2374E:yǎn 0x2374F:gào 0x23750:piáo 0x23751:yù,yú 0x23752:shè 0x23755:jiān 0x23757:hú 0x2375A:liè 0x2375C:biàn 0x2375D:sù 0x2375E:jiāo 0x23778:zhuì 0x2377D:hān 0x23787:dùn 0x23790:xiě 0x23791:méng 0x23792:fū 0x23793:lù 0x23794:tàn 0x23797:liú 0x23798:xiān 0x23799:sǎng 0x2379C:còu 0x2379D:zhuāng 0x2379F:chēn 0x237B0:liàn 0x237B4:lí 0x237C0:pèng 0x237C1:tuǒ 0x237C4:tuò 0x237C6:liáo 0x237C7:xiào 0x237C8:chuì 0x237C9:huài 0x237CA:niǎo 0x237CB:qiān 0x237CC:lì 0x237CF:pāo 0x237D0:tiáo 0x237D1:liú 0x237D2:wú 0x237E4:yǐng 0x237E6:zhá 0x237F0:yú 0x237F2:xiǎn 0x237F3:xuán 0x237F4:shuān 0x237F5:xī 0x237F8:méi 0x237F9:sēn 0x237FA:liàn 0x237FC:jiū,qiāo 0x237FD:lào 0x2380E:xiāo 0x2380F:zōu 0x2381A:liú 0x2381C:zhào 0x2381E:zhé,shè 0x23820:lěi 0x2382D:duǎn 0x23837:jiǎn 0x23838:shuān 0x23839:zuó 0x2383A:qiè 0x2383C:lǎo 0x23849:yù 0x2384A:yì 0x2384B:nǐ 0x2384E:cén 0x23855:yàn 0x23857:ruǎn 0x2385E:yán 0x2385F:dié 0x23860:mián 0x23867:léi 0x23869:wān 0x23870:nǎ 0x23876:yán 0x2387A:lěi 0x2387D:shā 0x2387E:hū 0x23881:xī 0x23882:xī 0x23884:yǒu,yōu 0x23885:hān 0x23887:hāi,xī 0x23889:wā 0x2388A:xù 0x2388B:pī 0x2388C:tān 0x2388D:xī 0x2388E:xī 0x2388F:bīn 0x23890:qīn,kēng 0x23891:xī 0x23892:yú 0x23893:xì 0x23895:cì 0x23896:qiàn 0x23897:xiā 0x2389A:wá 0x2389B:è 0x2389C:yǒu,yōu 0x2389D:xìng 0x2389E:ní 0x2389F:hán,xián 0x238A0:bì 0x238A1:shēng 0x238A4:zhān 0x238A5:diàn 0x238A6:yǔ 0x238A8:ǒu 0x238AA:guǐ 0x238AB:wǎng,wāng 0x238AC:qiān 0x238AD:yí 0x238B0:zú 0x238B2:qiān 0x238B3:dìng 0x238B4:kēng 0x238B6:chù 0x238B7:yī 0x238BA:hān 0x238BB:kuǎn 0x238C8:diàn 0x238C9:xì 0x238CA:zī 0x238CB:líng 0x238CC:zì,sì 0x238CE:yù 0x238CF:hūn 0x238D1:sǐ 0x238D2:kǎn 0x238DA:àn 0x238DC:yǒu 0x238DD:jí 0x238DE:hùn 0x238DF:qiā 0x238E0:hóu 0x238E1:hóu 0x238E3:diàn 0x238E9:xiē 0x238ED:shè 0x238EE:shà 0x238F2:xié 0x238F3:yáo,yǎo 0x238F4:dà 0x238F6:xiè 0x238F7:chī 0x238F8:yǒu 0x238F9:hē 0x238FA:shà 0x238FF:tái 0x23901:zhú 0x23903:ǎi 0x23907:què 0x23908:zé 0x2390A:lā 0x2390B:lòu 0x2390C:chuài,chǐ,chuò 0x2390E:yǒu 0x23916:tì 0x23918:shī 0x23921:xiào,yǒu 0x23922:xì 0x23928:huò 0x23929:chì 0x2392A:yì 0x2392F:shú 0x23930:yuè 0x23931:chán 0x23932:è 0x23933:xī 0x23934:xī 0x23935:yǐng 0x23936:zú,zā,zǎn 0x23937:zā 0x2393A:zā 0x23942:tà 0x23943:wàn 0x23947:xìn 0x2394A:wàng 0x2394B:fǔ 0x23950:lǔ,lǚ 0x2395E:jiǎn 0x23961:yán 0x23963:bì 0x23964:kěn 0x23965:guàn 0x23968:zī 0x2396E:kuǐ 0x2396F:zhǒu 0x23970:zhì 0x23973:tú 0x23977:tà 0x23979:chù 0x2397A:chēng 0x2397B:chěng 0x2397C:zhù 0x2397E:dà 0x23987:bì 0x23989:jiǎ 0x2398C:yì 0x2398F:yuè 0x23990:gāng 0x23996:gān 0x2399C:qiāo 0x239A0:chú 0x239A1:chú 0x239A2:bì 0x239A6:guì 0x239A9:gǔ 0x239AA:bǐng 0x239AB:yìn 0x239AC:zhuì 0x239AD:gǔ 0x239AF:lì 0x239B5:è,zhēn 0x239B6:dǎi 0x239BC:cán 0x239C2:tì 0x239C3:dù 0x239C4:yì 0x239C8:dié 0x239CA:niǔ 0x239CC:xuè 0x239CD:nè 0x239CE:guì 0x239CF:kǎo 0x239D2:chuǎn,mò 0x239D6:zhá 0x239D7:yóu 0x239D9:bài 0x239DA:shí 0x239DB:diàn 0x239DC:pā 0x239DD:qiú 0x239E1:xuè 0x239E3:mò 0x239E4:kē 0x239E5:yǒu 0x239E6:jiǎo 0x239E7:bó 0x239EC:xiǔ 0x239F2:mǐ 0x239F3:luò 0x239F5:xuè,xù 0x239F7:duò 0x239F9:èr 0x239FA:shān 0x239FC:kuì 0x239FD:nào 0x239FE:miǎn 0x239FF:lì 0x23A00:luàn 0x23A02:dié 0x23A04:qià 0x23A05:lèi 0x23A07:mào 0x23A09:hēng 0x23A0A:chè 0x23A0B:zhì 0x23A0D:gǔ 0x23A0E:cuō 0x23A13:wù 0x23A14:tào 0x23A17:xī 0x23A18:yāo 0x23A19:wěi,wèi 0x23A1B:zú 0x23A1C:mà 0x23A1D:yǔ 0x23A1E:pěng 0x23A1F:yì 0x23A20:qìn,qīn 0x23A21:yuè 0x23A22:juè 0x23A23:jiàng 0x23A24:xù 0x23A25:bēng 0x23A2A:luǒ 0x23A2B:zhuī 0x23A32:dù 0x23A33:xiàng 0x23A36:huì 0x23A3A:gǔ 0x23A3B:kǎo 0x23A3E:xīng 0x23A3F:hún 0x23A40:biān 0x23A44:kè,ài 0x23A45:kǎo 0x23A48:cuó,zuō 0x23A4F:lù 0x23A51:zuì 0x23A52:zāo 0x23A53:jiǎo 0x23A54:guàn 0x23A59:yān 0x23A5A:ér 0x23A5C:qíng 0x23A5F:dèng 0x23A60:sì 0x23A61:suì 0x23A62:liào 0x23A67:shàn 0x23A69:bì 0x23A6A:wèi 0x23A6B:yè 0x23A6D:zhài 0x23A6F:yé 0x23A70:diào 0x23A71:ài,kē 0x23A74:jiàng 0x23A77:sū 0x23A79:huài 0x23A7A:yù 0x23A7D:rǎng 0x23A80:diān 0x23A81:zuān 0x23A82:bān 0x23A84:qín 0x23A87:jiā 0x23A89:pí 0x23A8C:tóu,duì 0x23A90:chóu 0x23A95:guǐ 0x23AA0:jī,jì,qì 0x23AA8:xuè 0x23AAA:diàn 0x23AAD:biàn 0x23AAE:zǎi 0x23AAF:tóng 0x23AB6:shǎn 0x23AB8:gù 0x23AB9:què 0x23AC0:gǔ 0x23AC8:hú 0x23AC9:kuǎi 0x23ACC:gòu 0x23ACE:sù 0x23AD0:chóu 0x23AD2:kēng 0x23AD4:dū 0x23AD9:yì 0x23ADC:dào 0x23ADD:qiāng 0x23AE3:lóng 0x23AE5:lí 0x23AE7:lì 0x23AE8:qīng 0x23AEA:wēi 0x23AEC:móu 0x23AF1:qì 0x23AF3:jiǎng 0x23AF4:xié 0x23AF9:dài 0x23AFB:lóu 0x23B02:guàn 0x23B06:péi 0x23B09:pí 0x23B0B:juàn,chuò 0x23B0D:bēi 0x23B0E:jué 0x23B0F:juàn 0x23B10:shì 0x23B15:xiě 0x23B18:ruí 0x23B19:jìng 0x23B1A:pò 0x23B1B:sān,shān 0x23B20:jī 0x23B29:fēn 0x23B2A:bèi 0x23B2B:jiè,gà 0x23B2C:sā 0x23B2E:pī 0x23B34:dì 0x23B35:máo,mào 0x23B36:ba 0x23B37:ba 0x23B38:tiáo 0x23B39:líng 0x23B3A:shēng 0x23B3B:zhěn 0x23B3C:pī 0x23B3D:wù 0x23B3F:zè 0x23B40:bào 0x23B47:lǚ 0x23B56:hāo 0x23B57:dǒu 0x23B58:fú 0x23B59:ní 0x23B5D:gé 0x23B60:rú 0x23B61:xiǎn 0x23B64:bì 0x23B6E:máo 0x23B72:rǒng 0x23B73:qiú,qú 0x23B77:bó 0x23B79:hāo 0x23B7A:nǎo 0x23B7B:yán 0x23B83:páo 0x23B84:suī 0x23B86:tuò 0x23B88:qū 0x23B89:lí 0x23B8A:dé 0x23B8C:jié 0x23B8D:jié 0x23B8E:gǔn 0x23B8F:jiān 0x23B90:bì 0x23BA0:sàn 0x23BA1:bāng 0x23BA2:chún 0x23BA6:nài 0x23BA7:bǎng 0x23BAA:róng 0x23BAB:jiā 0x23BAC:sōu 0x23BB0:dé 0x23BBE:xiān 0x23BBF:zhān 0x23BC0:mào 0x23BC3:zī 0x23BC5:jì 0x23BC6:qí 0x23BCB:rù 0x23BCC:suō 0x23BCD:rǒng 0x23BCE:wù 0x23BCF:róng,rǒng 0x23BD0:róng 0x23BDA:tà 0x23BDC:sōu 0x23BE4:lí 0x23BE7:cuǐ,suī 0x23BE8:zōng 0x23BE9:mén 0x23BEA:xǐ 0x23BEC:mǎng 0x23BED:niè 0x23BEF:suī 0x23BF1:péi 0x23BF4:bì 0x23BF5:dì 0x23BF8:qú 0x23BF9:qiáo 0x23BFB:fēn 0x23BFC:sù 0x23C03:xū 0x23C07:rǒng 0x23C08:jī 0x23C0B:qú 0x23C0C:liè,hé 0x23C15:sào 0x23C18:kùn 0x23C1A:cuì 0x23C1B:yè 0x23C1C:bìng 0x23C1E:jié 0x23C20:qú 0x23C21:qú 0x23C25:méng 0x23C26:rán,gān 0x23C28:bīn 0x23C29:cháo 0x23C2C:dú 0x23C36:ráng,nǎng 0x23C37:xiān 0x23C3A:táo 0x23C3B:qú 0x23C3C:niè 0x23C3F:shū 0x23C40:lǔ 0x23C42:kùn 0x23C48:mín 0x23C49:mǐn 0x23C4D:dàn 0x23C50:yìn,zhì 0x23C53:xiào,hào 0x23C57:jì 0x23C5C:yīn 0x23C66:fēn 0x23C67:zhòng 0x23C6B:gǔ 0x23C71:chá 0x23C73:liú 0x23C76:bǔ 0x23C7A:pā 0x23C7B:sì 0x23C7C:dāo 0x23C7D:zhěn 0x23C80:shān 0x23C82:chuǎi 0x23C84:jiǔ 0x23C8A:kè 0x23C8B:chí 0x23C91:hù,chí,hé,hú 0x23C92:lì,lè 0x23C93:shā 0x23C96:pài,liú,gū 0x23C97:wéi 0x23C98:wǔ 0x23C9C:yíng 0x23CA1:shā,jí,jié 0x23CA2:dī 0x23CA5:dān 0x23CB1:tū 0x23CB2:hé 0x23CB3:pǒ 0x23CB5:zhǐ 0x23CB6:niǔ 0x23CB7:nì 0x23CBD:rǒng 0x23CBE:guài 0x23CC0:zhí 0x23CC3:jí 0x23CDC:fàn 0x23CDF:jié 0x23CE0:hǎi,mǔ 0x23CE4:zhàn 0x23CE6:xì,náo 0x23CE9:zī 0x23CEC:xí 0x23CED:piào 0x23CF0:bēn 0x23CF2:jiǎn 0x23D13:jiàn 0x23D16:zá 0x23D1E:bèn 0x23D1F:mào,huǎn 0x23D22:zào 0x23D23:zhuàng 0x23D25:kuáng 0x23D28:bí 0x23D2A:pài,pì 0x23D3C:mào 0x23D3D:tàn 0x23D5E:tǔn 0x23D5F:luǒ 0x23D62:tān 0x23D71:án 0x23D77:hán,gàn 0x23D78:zhú 0x23D7A:duò,tuó 0x23D7B:duò,tuó 0x23D7C:gàn 0x23D86:qiòng 0x23D88:wǎng,mǎng 0x23D8A:mò 0x23D8B:zhè 0x23D8C:wěn 0x23D8D:zhuàng 0x23D8F:jiē,diē 0x23D90:pào 0x23D98:sù 0x23D9D:jù 0x23DA0:qī 0x23DA1:càn 0x23DA3:tuán 0x23DA4:shā 0x23DA6:tuó 0x23DA9:huà 0x23DAB:yì 0x23DE0:mín 0x23DE1:zhōng 0x23DE5:shuò 0x23DE9:yì 0x23DEA:wǎng 0x23DEB:áo 0x23DF6:sǔ 0x23DFE:guǐ 0x23DFF:tuǒ 0x23E00:huǐ 0x23E03:xù 0x23E04:zǎn 0x23E06:zǐ 0x23E07:biàn 0x23E09:dá 0x23E0A:yīn 0x23E0B:quǎn 0x23E0E:huài 0x23E0F:ná 0x23E10:zá 0x23E12:tí 0x23E18:yí 0x23E19:tān 0x23E1A:shé 0x23E1B:shuò 0x23E1D:xíng 0x23E20:yǒu 0x23E23:fén 0x23E47:kè 0x23E4B:fú 0x23E52:mǐn 0x23E5A:pì 0x23E5C:jí 0x23E5D:qiào,xiào 0x23E5E:zhǒng 0x23E5F:gàn 0x23E60:yuān 0x23E61:chí 0x23E65:qiàn 0x23E67:zuó,zhà 0x23E69:xié 0x23E6A:máo 0x23E6C:hú 0x23E6E:pì 0x23E6F:xùn 0x23E71:xiá 0x23E72:tí 0x23E75:nà 0x23E76:chuǎ 0x23E80:wǔ 0x23EAC:huāng 0x23EAD:xuè 0x23EAE:tào 0x23EB0:qiào 0x23EB3:jiāo 0x23EBC:dǎng 0x23EBD:bài 0x23ECD:dàng,xiàng 0x23ECE:kòu 0x23ED0:jū 0x23ED1:shā,shài 0x23ED2:jīng 0x23ED5:mó 0x23ED6:nóu 0x23ED8:shuò 0x23EDA:shù 0x23EDB:zhuāng 0x23EDC:fú 0x23EDF:zāng 0x23EE0:xié 0x23EE1:làng 0x23EE2:tōng 0x23EE9:zhé 0x23EEC:càn 0x23EEE:yuè 0x23EF1:zhòu 0x23F1A:tān 0x23F1E:yán 0x23F1F:lù 0x23F20:yǎn 0x23F26:zé 0x23F27:shuài 0x23F45:guō 0x23F46:zhú 0x23F48:rú,ruán 0x23F49:rú 0x23F4C:kǎn 0x23F4D:jì 0x23F4E:gāo,zé,háo 0x23F52:xiè 0x23F55:òu 0x23F56:jiān 0x23F5A:zhí 0x23F5B:zhá 0x23F5D:hǒng 0x23F5F:kuǎn 0x23F61:bó 0x23F64:sè 0x23F65:àn 0x23F66:jiàn 0x23F68:téng 0x23F6B:sōng 0x23F6D:mèng 0x23F6E:yín 0x23F6F:tān 0x23F70:guō 0x23F73:ruán 0x23F74:wèi 0x23F77:sì 0x23FA4:qì 0x23FA6:zhǎng 0x23FC5:dǒng 0x23FC6:fú 0x23FC7:shěn 0x23FC8:sù 0x23FC9:yì 0x23FCA:liàn 0x23FCC:hé 0x23FCE:zhēn 0x23FD0:zé 0x23FD2:cuǐ 0x23FD3:cuǐ 0x23FDD:fèng 0x23FDE:lǐ 0x23FDF:kòu 0x23FE3:xiào 0x23FE4:yǒu 0x24003:háo 0x24009:hàn 0x2400A:kěn 0x2401D:yù 0x24023:huǎn 0x24024:suō,shàn,shuài 0x24026:là 0x24028:dòu 0x24029:jiàn 0x2402A:pō 0x2402B:biǎn 0x24030:xuè 0x24032:biàn 0x24037:wèi 0x24061:dàn 0x24062:jié 0x24063:bài 0x24065:niǎn 0x24066:xiàn 0x24067:sè 0x2406A:huá 0x2406B:chuā 0x2406E:òu 0x2406F:liè 0x24070:dí 0x24071:cài 0x24073:zhá 0x24075:lǘ 0x24079:huò 0x2407C:lì 0x2407D:yǐng 0x2407F:wěi 0x24080:bì 0x24081:guó 0x24083:pì 0x24086:biāo 0x240A0:yǎn 0x240A4:zhuàn 0x240B2:hóng 0x240B6:lìn 0x240B7:è 0x240B9:yǐn 0x240BA:làn 0x240BC:yào 0x240BF:xuàn 0x240C0:lì 0x240E8:làn 0x240E9:líng 0x240EA:xī 0x240EB:hōng 0x240ED:jiǎo 0x240EE:zhuó 0x240F2:zhí 0x240F5:bó 0x240F6:tēng 0x240F7:ǎn 0x240FA:xún 0x240FB:lěi 0x240FC:zāng 0x240FD:huǐ 0x2410E:xì 0x2410F:hóng 0x24111:fàn 0x24112:jiǎn 0x24113:cóng 0x24114:zá 0x24116:cā,zá 0x24118:yōu 0x2411B:duì 0x2411C:pān 0x24125:tà 0x24127:pàn 0x2412B:fān 0x2412C:xī 0x24136:yào,shuò 0x24137:luó 0x2413A:biān 0x2413C:jìn 0x2413D:lì 0x2414A:yàn 0x2414B:dòu 0x2414E:màn 0x24150:gōng 0x24151:rǎng 0x24152:càn 0x24163:mén 0x24171:gǔ 0x24172:shuàn 0x24178:yán,yàn 0x24179:bì 0x24180:biāo 0x24181:chéng 0x24182:kuì 0x24184:huǒ,zāi 0x2418D:chì 0x2418F:wò 0x24191:còu 0x24192:zhì 0x24199:shuǐ 0x2419C:guà 0x2419D:pū 0x2419E:xù 0x2419F:sī 0x241A1:wǔ 0x241AE:fū 0x241B0:shì 0x241B3:huì 0x241B4:huāng 0x241B5:pā 0x241BC:zhǔ 0x241BE:yí 0x241C3:lì 0x241C4:shǎn 0x241DC:mín 0x241DE:gē 0x241E0:hū 0x241EF:ēn,āo 0x241F0:fá 0x241F3:xù,xuè 0x241F4:yí,xī 0x241FE:yíng 0x24214:chí 0x24219:yí 0x24225:dí 0x24226:huǐ,méi 0x24227:hé 0x24229:zhǎ 0x24236:yún 0x24237:xiān 0x2424C:xián 0x2424D:lào 0x2424E:shào 0x2424F:shì 0x24250:zhuó 0x24264:biē 0x24265:jiǔ 0x24266:wō 0x24267:jiǎo 0x24268:fú 0x2426A:xiāng 0x2426B:kài 0x242B2:nǎo 0x242B4:huò 0x242B5:jí 0x242B6:là 0x242BB:fōu 0x242BC:shǎn 0x242BD:liào,liǎo 0x242BE:miè 0x242BF:chè 0x242C2:mó 0x242CF:lóu 0x242E8:duò 0x242EB:nǎo 0x242ED:jī 0x242F0:zhù 0x24302:sù 0x24303:duò 0x24307:jiǒng 0x2430A:zǎi 0x2430B:huǐ 0x2430C:yǐng 0x2430D:hú 0x2430E:lìn,lǐn 0x2430F:wěng 0x24310:hàn 0x24314:nán 0x24337:xì 0x24339:gàn 0x2433E:hè 0x2433F:jī 0x24340:xiǎng 0x24341:shā 0x24350:tuì 0x24352:zhāo 0x24353:shù 0x24355:yǒu 0x24356:jiān 0x2435C:zào 0x24364:zhāng 0x2437D:ruò 0x24384:yān 0x2438B:cuì 0x24397:jí 0x24398:shāng 0x243A3:è 0x243A4:láo 0x243A5:tǎn,chān 0x243A7:zhù 0x243AD:lǐn,yǐn 0x243AF:zēng 0x243B1:juǎn 0x243B2:hū 0x243D7:shěn 0x243D8:huò 0x243DC:kuì 0x243F1:chù 0x243F2:zhòu 0x243F6:āo 0x243F8:zhuó 0x243FD:xīng 0x243FF:miè 0x24400:hū 0x24414:tán 0x24419:bì 0x24423:dǐng 0x24429:kài 0x2442B:biāo 0x24430:huò 0x24431:liè 0x24432:cuàn 0x24443:xiàn 0x24444:rè 0x24453:yuè 0x24455:xūn 0x24457:liǎo,zhāo 0x24463:shā 0x24466:shì 0x2446A:xiè 0x24473:xiāo 0x24477:yé 0x24478:lǎn 0x24479:yì 0x2447F:liǎn 0x24494:bó 0x24495:cāo 0x2449D:yào 0x244A6:liàn,yàn 0x244BB:tà 0x244D1:jì 0x244D4:xī 0x244D5:zhì 0x244DA:xī 0x244DD:yuè 0x244E4:xiǎn 0x244E6:zhuò 0x244EF:zhǎng,jú 0x244F5:zǔ 0x244F7:ná 0x244FE:dào 0x244FF:liè 0x24500:ná 0x24509:páo 0x2450B:jù 0x24516:luǒ 0x24519:shuǎ 0x2451A:shàng 0x2451D:luǒ 0x2451F:fēn 0x24523:bào 0x24528:lì 0x2452B:xiòng 0x24536:dāng 0x24540:chèng 0x24544:zhǎng 0x24547:sǒu 0x2454A:shén 0x24552:gě 0x24558:yū,wù 0x2455A:huī 0x2455B:chè 0x2455D:jiào,bó 0x2455E:zhù 0x2455F:shū 0x24562:xiáo 0x24566:níng 0x2456D:jiāng 0x2456F:jiāng,zhuàng 0x24577:diào 0x2457D:qiáng 0x2457E:qiú,fǔ 0x24580:fēng 0x24586:zhàn 0x24587:kē 0x24592:dié 0x24593:zé 0x24596:guāng 0x24597:sè 0x24598:fèn,fén 0x2459B:jiǎng 0x2459D:yán 0x2459E:zhì 0x245A2:lì 0x245A6:líng 0x245AA:yí 0x245AC:qǔ 0x245AD:pán 0x245AE:gōu 0x245B0:jiǎ 0x245B1:hé 0x245B3:pèng 0x245B5:jù 0x245B7:chè 0x245BA:liè 0x245BB:shì 0x245BC:pò 0x245BD:xiàng 0x245BF:pì 0x245C0:luǒ 0x245C1:cù 0x245C3:yǔ 0x245C7:kòng 0x245C8:xiè 0x245CD:wǎn 0x245CE:yǎn 0x245CF:péi 0x245D3:chéng 0x245D8:tí 0x245D9:chè,tuò 0x245DA:bì 0x245DB:liàn 0x245DC:jiǎ 0x245DE:tíng 0x245E2:tī 0x245E8:dié 0x245EA:shù 0x245EB:lí 0x245EC:lǘ 0x245ED:xià,xiā 0x245EF:cuī 0x245F3:bō 0x245F4:tuí 0x245F5:pú 0x245F7:lìn 0x245F8:fèn,fén 0x245FA:bó 0x245FB:chàn 0x245FE:dāng 0x245FF:tǎi 0x24600:dào 0x24603:lì 0x24605:yá 0x24606:yá 0x24607:zhān 0x2460A:yí 0x2460C:qī 0x24614:hù 0x24616:tīng 0x24618:kǒu 0x2461B:chún 0x2461C:yóu 0x2461D:fèn 0x2461F:nuó 0x24620:tiàn 0x24621:jìn 0x24622:pí 0x24623:chén 0x24624:pì 0x24626:jiè 0x24627:guǐ 0x24632:zhuàng 0x24635:hú 0x24636:chǒu 0x24637:shù 0x24638:tāo 0x24639:pí 0x2463A:rǒng 0x2463B:rǒng 0x2463D:hǒu 0x2463E:pēng 0x24645:bài 0x24647:xiá 0x2464B:qǐn 0x2464C:nǐ 0x2464E:tāo 0x2464F:qù 0x24652:xié 0x24654:zhào 0x24655:huā 0x24656:xīn 0x24658:shōu 0x2465B:tú 0x2465D:liáng 0x2465E:bì 0x2465F:chū 0x24661:xīng 0x24663:xīn 0x24664:fū 0x24669:jiè 0x2466D:fǔ 0x24670:tè 0x24671:shè 0x24674:chāo 0x24675:chuī 0x2467C:rán 0x2467D:hǒu 0x2467E:bēng 0x24680:cǎi 0x24685:mú 0x24689:xū 0x2468A:dié 0x2468D:chǎn 0x2468E:yú 0x2468F:zhòng 0x24693:lí 0x24694:shōu 0x2469A:dú 0x2469C:māo 0x2469D:huáng 0x2469F:táo 0x246A1:dù 0x246A2:tí 0x246A3:shēng 0x246A4:méi 0x246A8:zhēn 0x246A9:qín 0x246AA:pì 0x246AB:táng 0x246AC:cāng 0x246AD:yáo 0x246AF:xiù 0x246B0:bāng 0x246B1:gǔ 0x246B5:bù 0x246BC:gòu 0x246BD:bó 0x246C1:wèn 0x246C4:jì 0x246CA:lā 0x246CD:cuī 0x246CE:mǐn 0x246CF:cǔ 0x246D0:ōu 0x246D1:yōng 0x246D6:máo 0x246D7:kè 0x246D8:māng 0x246D9:dǐng 0x246DA:huān 0x246DB:duǒ 0x246DC:jiāng 0x246DD:sù 0x246E2:céng 0x246E3:tà 0x246E5:huáng 0x246E6:jué 0x246E7:xún 0x246EA:xiòng 0x246EC:mì 0x246ED:qún 0x246EE:láo 0x246F1:zhì 0x246F2:wěi,wéi 0x246F7:sè 0x246FB:zāng 0x24701:ǎn 0x24702:wèi,guì 0x24704:huái,huài 0x24707:zhàn 0x24709:yīng 0x2470A:gē 0x2470B:huì 0x2470D:quán 0x24713:liè 0x24714:jú 0x24715:bà 0x24716:léi 0x24718:mán 0x24719:líng 0x2471C:lì 0x2471D:jǐ 0x24721:huí 0x24722:xìn 0x24723:shì,shé 0x24724:zhé 0x24727:bō 0x2472B:chā 0x2472F:chā 0x24730:jīng 0x24731:bā 0x24732:bèi,pèi 0x24735:yàn 0x24737:hù 0x24739:yú 0x2473B:bì,pí 0x2473C:chuán 0x2473E:jǐ 0x24742:mù 0x24744:máo 0x24745:zhōng 0x24747:yè 0x24748:dōu 0x24749:yě 0x2474D:rì 0x2474E:yīn 0x24750:hào 0x24752:nà 0x24753:tiè 0x24754:fù,chái 0x24755:mǔ 0x24756:zǎi 0x24758:hú 0x2475A:chēn 0x2475B:tuó 0x2475E:chù 0x2475F:fú,fèi 0x24767:bào 0x2476C:dǐ 0x2476D:cǎi 0x2476E:lù 0x2476F:pǒ 0x24770:dá 0x24771:yè 0x24773:yǐ 0x24777:xiáng 0x24778:bī 0x24779:zhū 0x2477B:yí 0x2477D:lǜ 0x2477F:kuāng 0x24782:zhì 0x24787:wá,kuáng 0x24788:dī 0x24789:shù 0x2478A:liè 0x2478B:zǎo 0x2478C:zhì 0x2478D:náo 0x24797:chái 0x2479A:xiāo 0x2479B:zàng 0x2479E:yù 0x2479F:dòu 0x247A0:chà 0x247A1:xié 0x247A2:yáng 0x247A4:xiǎn 0x247A5:bǎo 0x247AE:zhài,zhāi 0x247B0:qiú 0x247B2:hú 0x247B3:zài 0x247B4:jué 0x247B6:hān,hàn 0x247BF:àn 0x247C0:zào 0x247C3:shà 0x247C5:xiàn 0x247C6:chǐ 0x247C7:yǎn 0x247C9:àn 0x247CD:zhé 0x247CE:jué 0x247D1:lì 0x247D3:lè 0x247D6:cǎi 0x247D8:lù 0x247DA:jiā 0x247DD:xià 0x247DE:xiào 0x247DF:yān 0x247E0:xū 0x247E2:dùn 0x247E3:yíng 0x247E4:huī,xūn 0x247E5:tí 0x247E6:nóu 0x247E7:xǐ 0x247EA:tú 0x247F7:wāi 0x247F8:chēn 0x247FC:hōng 0x247FE:tí 0x247FF:xuān 0x24800:zá 0x24807:gé 0x2480B:lóu 0x2480C:chái 0x2480D:pán 0x2480E:jí 0x24810:tà 0x24813:xī 0x24816:xiāo 0x24818:sāo 0x24819:jiā 0x2481A:sù 0x2481B:huāng 0x2481D:cuō 0x2481F:tà 0x24820:shuāi 0x2482A:fú 0x2482B:lì 0x2482D:shè 0x2482F:táng 0x24836:diān 0x2483A:bì 0x2483C:gòu 0x2483D:cù 0x2483F:qiān 0x24842:léi,lěi 0x24843:sù 0x24846:zòng,zōng 0x24847:hāo 0x2484F:chì 0x24850:cáo 0x24853:wò 0x24854:xiāo 0x24855:liè,wěn 0x24856:yán,yān 0x2485D:bì 0x2485F:huàn 0x24861:xī 0x24862:chī 0x24863:xū 0x24864:náo,nà,rú 0x24865:yán,xiàn 0x24867:xiè 0x24868:zhá 0x2486A:suì,wěi 0x2486C:xì 0x2486D:bēng,péng 0x2486E:rán 0x2486F:shuò,xī,què 0x24870:bān 0x24871:guì 0x24872:kāi 0x24873:chēn 0x24876:xù 0x2487E:è 0x2487F:lì 0x24880:xī 0x24881:huàn 0x24882:sù 0x24884:chǎng 0x2488A:lù 0x2488B:yán 0x2488E:dāng 0x2488F:dǎn 0x24890:yāng 0x24892:zhǎi 0x24893:jù,qú 0x24895:duó 0x24896:sāo,shān 0x24897:lái 0x24898:sù 0x2489F:zé 0x248A3:bì 0x248A6:yìn 0x248A8:hāo 0x248AA:liè 0x248AD:háo 0x248AE:yáng 0x248B4:shuò,lì 0x248B5:lài,ài 0x248B6:qióng 0x248B9:lěi 0x248BA:xié 0x248BC:shì 0x248C3:lǔ 0x248C5:què 0x248C6:lián 0x248CC:xiào 0x248CE:yīng 0x248D1:xié 0x248D8:líng 0x248D9:yōu 0x248DE:dǎng 0x248DF:lǎn 0x248E0:xiāo 0x248E8:yì 0x248EC:wū 0x248EE:yì 0x248EF:tuō 0x248F0:bǔ 0x248F2:xìn 0x248F5:sī 0x248F6:jīn 0x248F8:bā 0x248F9:fǎ 0x248FB:mò 0x248FC:ruò 0x2490A:dà 0x2490B:jì 0x24910:sù 0x24911:qióng 0x24912:bā 0x24926:tián 0x24927:yóu 0x24929:tuó 0x2492B:wài 0x2492C:yòu 0x2492E:dōng 0x24931:xǐ 0x24932:kǒng 0x24936:qióng 0x24937:duī 0x24938:duò 0x2493A:yì 0x24952:xī 0x24953:qīn 0x24954:sù 0x24957:liú 0x24959:wán 0x2496D:chē 0x2496E:zhū 0x24970:mào 0x24977:quán 0x2497D:yū 0x2497F:yì 0x24980:mí 0x24983:lái 0x24984:zhì 0x249A4:ní 0x249A6:bān 0x249AA:dōng 0x249AE:zhì 0x249D5:yì 0x249D8:líng 0x249D9:yú 0x249DA:cōng 0x249DB:dì 0x249DC:zhì 0x249E0:ruǎn 0x249E3:jiàn 0x249E9:wàn 0x249EB:jīn,jìn,duī 0x249ED:páng 0x24A0D:lù 0x24A0E:qú 0x24A10:xǐ,tāo 0x24A11:dá 0x24A16:hù 0x24A17:luǒ 0x24A19:lè 0x24A36:gǒng 0x24A3B:lìng 0x24A42:láo 0x24A44:zhuàn 0x24A68:zǎo 0x24A69:hào 0x24A6A:xiàng 0x24A6D:hào 0x24A6E:lì 0x24A71:diàn,tiàn 0x24A72:gé 0x24A7D:huán 0x24A84:è 0x24A86:xiá 0x24A8B:jiān 0x24A8C:qí 0x24A8D:xiá 0x24A8E:yǒu 0x24AA1:zhēng 0x24AAA:zhuàn,chūn 0x24AAE:chàn 0x24AC9:xiè 0x24AD5:náo 0x24ADD:jì 0x24ADE:tián 0x24AE3:yǎn 0x24AE7:hǎo 0x24AE8:xín 0x24AE9:líng 0x24AEB:bān 0x24AEC:běng 0x24AF1:gōu 0x24AF2:líng 0x24AF5:kuò,guó 0x24AF6:qià 0x24AF7:jiào 0x24AF9:ēn 0x24AFA:yáo 0x24AFB:dū 0x24B01:huǒ,guǒ,luǒ 0x24B02:dǔ 0x24B03:pēi 0x24B0C:yuán 0x24B0F:lóu 0x24B10:xíng 0x24B13:lián,liǎn 0x24B14:yáo 0x24B15:xī 0x24B16:yáo 0x24B18:xī 0x24B1B:lú 0x24B1D:yàn 0x24B20:quán 0x24B25:ráng 0x24B26:wà 0x24B27:zú 0x24B28:fàn 0x24B29:yì 0x24B2A:dù,kān 0x24B2B:suì 0x24B2D:pī 0x24B2F:hán,qiàn 0x24B31:xù 0x24B33:gǒng 0x24B35:dì 0x24B37:nà 0x24B3E:duò,tuó 0x24B3F:wā 0x24B42:niè 0x24B48:diào 0x24B49:huāng 0x24B4C:tí 0x24B4D:fàn 0x24B51:wú 0x24B52:áng 0x24B54:píng 0x24B59:hán,gān 0x24B5B:gāng 0x24B5C:lí 0x24B5E:dūn 0x24B5F:fù 0x24B60:nà 0x24B62:cèi,suì 0x24B67:jiē 0x24B69:qìng 0x24B6B:yīng 0x24B6C:xiáng 0x24B71:hú 0x24B74:sù 0x24B7B:gē 0x24B7C:è 0x24B7D:xù 0x24B86:xī 0x24B8A:kāng 0x24B8B:guó 0x24B8C:jiē 0x24B8D:chuán 0x24B8E:léi 0x24B8F:héng 0x24B90:zūn 0x24B95:piè 0x24B98:dēng 0x24B99:xī 0x24B9A:léi 0x24B9C:shàn 0x24BA7:lú 0x24BA9:duì 0x24BAA:jùn 0x24BAD:chàn 0x24BAF:xié 0x24BB0:wā 0x24BB1:zhé 0x24BB3:zhuān,guàn 0x24BB7:liù 0x24BB8:léi 0x24BBC:dài 0x24BBD:gān 0x24BC4:shì 0x24BC7:yǎn 0x24BCC:gān 0x24BD0:yán 0x24BD6:suī 0x24BDA:zhōng 0x24BDC:shì 0x24BE1:shèng 0x24BE5:chǎn 0x24BF7:huáng 0x24BF8:yìn 0x24BFB:měng 0x24C02:ráng 0x24C05:xiáng 0x24C08:bèi,fú 0x24C0C:chuán 0x24C11:pú 0x24C19:kē,gé 0x24C1A:lā,lá 0x24C1D:quǎn 0x24C1F:hàng 0x24C20:chì 0x24C21:máng 0x24C26:zhà 0x24C2A:fèn 0x24C2C:chào 0x24C33:jǐng 0x24C43:liè 0x24C45:nà 0x24C46:nà 0x24C47:tóng 0x24C4B:rán 0x24C4C:zǔ 0x24C4D:pī,pǒ 0x24C4E:yǒu 0x24C50:shū 0x24C5B:liè 0x24C5C:shōu 0x24C5D:tuǎn 0x24C5F:gǎo 0x24C60:sháo 0x24C61:tuó 0x24C63:nán 0x24C67:tuǒ 0x24C68:gōng 0x24C69:diào 0x24C74:měng 0x24C75:bāng 0x24C77:xié 0x24C78:sì 0x24C79:tǐng 0x24C7A:guì 0x24C7D:fú 0x24C7E:guì 0x24C89:guì 0x24C91:zhǔ 0x24C93:lái 0x24C95:lǔn 0x24C96:tiǎn 0x24C97:rǎn 0x24C9A:dōng 0x24CA8:juàn 0x24CA9:yán 0x24CAC:ruán 0x24CAD:dǎn 0x24CB0:mào 0x24CB6:luán,niǎo 0x24CB8:xù,zī 0x24CBA:xī 0x24CC2:má 0x24CC3:qī 0x24CC5:chà 0x24CC8:shāng 0x24CC9:hàn 0x24CCA:píng 0x24CCE:jī 0x24CD3:lì 0x24CD5:yù 0x24CD6:bān,fān 0x24CD8:tēng 0x24CDD:chóu 0x24CE0:chóu 0x24CE4:qī 0x24CE5:xī 0x24CE6:bèi 0x24CEA:yè 0x24CED:guǎng 0x24CEF:zhù 0x24CF3:léi,huǐ 0x24CF4:léi 0x24CF5:chā 0x24D00:guǎng,qiāo 0x24D0D:dié 0x24D13:yǎ 0x24D18:niè 0x24D19:shū,xū 0x24D1B:zhì 0x24D1F:zhì 0x24D22:zhì 0x24D23:pǐ 0x24D25:jiū 0x24D26:jiū 0x24D27:yì 0x24D28:yòu,yǒu 0x24D2A:jiū 0x24D2F:huàn 0x24D31:dù 0x24D3B:táo 0x24D3C:qiè,cí 0x24D3D:qín 0x24D3E:xìn 0x24D3F:chān 0x24D40:jì 0x24D42:qìn 0x24D4A:dù 0x24D4B:zhī 0x24D4E:ǒu 0x24D50:wù 0x24D52:wén 0x24D58:bì 0x24D5B:bēi 0x24D5D:mǔ 0x24D5E:jìn 0x24D5F:táo 0x24D60:liáo 0x24D65:cáo,zhǒu 0x24D66:zhá 0x24D6C:chǐ 0x24D6D:yā 0x24D6E:kuí 0x24D6F:yìn 0x24D78:lóng,pāng 0x24D79:qià 0x24D7B:hāng 0x24D7C:shàng,shāng 0x24D7D:hài 0x24D7E:chā 0x24D80:jiǎo 0x24D81:lǎo 0x24D88:xī 0x24D8B:bó 0x24D93:zhǐ 0x24D95:tùn 0x24D96:fú 0x24D98:hū 0x24D9A:niè 0x24D9B:yì 0x24D9C:zhuàng 0x24DA0:chá 0x24DA4:suān 0x24DA7:yùn 0x24DAE:dù 0x24DB0:xī 0x24DB1:chuàn 0x24DB2:xíng 0x24DB3:jiǎo 0x24DB4:shēn 0x24DC0:wāng 0x24DC1:bēi 0x24DC2:féi 0x24DC3:jiàn 0x24DC4:quán 0x24DC5:yì,yá 0x24DC6:dōng 0x24DC7:xù 0x24DC8:nà,niè 0x24DC9:jí 0x24DCC:zhěn 0x24DCD:qí 0x24DCE:duī 0x24DCF:yín 0x24DD1:jiù 0x24DD2:pí,bì,bēi 0x24DD3:xìn 0x24DD4:lún 0x24DD5:cǎi 0x24DD6:lìng 0x24DD7:biē 0x24DD8:dào 0x24DD9:dé 0x24DDF:la 0x24DE1:xī,nüè 0x24DE2:jù 0x24DE4:xiáo 0x24DE6:jīng 0x24DF9:wài 0x24DFB:nǎo 0x24DFC:xiāng 0x24DFD:què 0x24DFE:qiè 0x24DFF:tū 0x24E00:xǔ 0x24E01:huì 0x24E05:mín 0x24E06:wěi 0x24E08:yóu 0x24E09:tuí 0x24E0A:dài 0x24E0E:kě,hài 0x24E0F:nà,niè 0x24E11:fù 0x24E12:yù 0x24E13:zhǐ 0x24E15:hān 0x24E16:āi 0x24E17:fù 0x24E21:yāng 0x24E24:shí 0x24E26:chán 0x24E2A:chì 0x24E2B:yùn 0x24E2C:shuāi 0x24E2E:sù 0x24E2F:sǎng 0x24E31:è,kè,kài,yà 0x24E32:zhěng 0x24E33:ái 0x24E34:suǒ 0x24E35:bù 0x24E37:qún 0x24E38:yì 0x24E39:yǎn 0x24E3B:nà 0x24E3C:wǔ 0x24E47:lì 0x24E48:lì 0x24E4A:xī 0x24E4B:jué 0x24E4C:shī 0x24E4E:yǎ 0x24E5B:chén 0x24E5C:yíng 0x24E5D:bì 0x24E5E:chè 0x24E61:zhā 0x24E62:tuǒ 0x24E63:hù 0x24E64:téng 0x24E65:yìng 0x24E66:bǐ 0x24E67:níng 0x24E68:liàn 0x24E69:xìn 0x24E6A:yǔ 0x24E72:bèi 0x24E74:mó 0x24E75:duī 0x24E77:dǎo 0x24E78:qí 0x24E80:shuāi 0x24E83:xiāo,jiāo,yāo 0x24E84:zhǒng,tóng 0x24E85:zhuì 0x24E87:biàn 0x24E89:wěi 0x24E8A:xī,sī 0x24E8C:dēng 0x24E8E:xiē 0x24E8F:pān 0x24E90:niè 0x24E93:bié 0x24E94:shè 0x24E95:fèi 0x24E96:mǐn 0x24E97:qì,jì 0x24EAA:shàn 0x24EAB:suǒ 0x24EB7:jí 0x24EBA:dǎn,dàn,tán 0x24EBB:juàn 0x24EBC:lù 0x24EBE:ào 0x24EC2:yì 0x24EC3:shǔ 0x24EC4:suì 0x24EC5:wèi 0x24EC6:wán 0x24EC7:chǔ 0x24ECC:wò 0x24ED6:bì 0x24ED8:yǐn 0x24ED9:huó 0x24EDC:kài,è 0x24EDD:níng 0x24EE2:ài 0x24EE4:lì 0x24EE6:zhāi 0x24EF1:lù 0x24EF6:biàn 0x24EF7:pán 0x24EFF:guì 0x24F00:sū 0x24F01:méng 0x24F02:xiǎn 0x24F03:lòng,lóng 0x24F05:qì 0x24F0B:chàn 0x24F0C:yì 0x24F0D:háng 0x24F0F:liǎn 0x24F10:guàn,huàn 0x24F12:wěi,huà 0x24F17:jué 0x24F18:léi 0x24F19:luán 0x24F1A:lì 0x24F1C:pí 0x24F22:huǎn 0x24F2E:guī 0x24F33:jú 0x24F36:dēng 0x24F3A:fèi 0x24F41:zhī 0x24F43:mèi 0x24F45:huàn 0x24F49:pā 0x24F4A:bǐ 0x24F4C:pō 0x24F53:ér 0x24F55:huàn 0x24F63:chàng 0x24F65:luò 0x24F66:fǒu 0x24F6F:chóu 0x24F71:zú 0x24F72:nán 0x24F73:xiǎo 0x24F79:bài 0x24F7A:lù 0x24F7C:luò 0x24F7F:niàn 0x24F80:zé 0x24F84:zhù 0x24F85:hú 0x24F88:huī 0x24F89:tǎng 0x24F8A:chóu 0x24F91:huáng 0x24F92:dōu 0x24F9B:miào 0x24F9D:bó 0x24FA0:dì 0x24FA2:děng 0x24FA3:pū 0x24FA5:sōng 0x24FA6:chóu 0x24FAB:yào 0x24FAC:měng 0x24FAD:lóng 0x24FB2:lián 0x24FB5:bié 0x24FBA:lǚ 0x24FBF:sè 0x24FC0:zuó 0x24FC4:cún 0x24FC5:líng 0x24FC6:zhěng 0x24FC7:pǐ 0x24FC8:báo 0x24FCB:què 0x24FCE:pī 0x24FCF:nàn 0x24FD0:pī 0x24FD1:bǒ 0x24FD2:bèi 0x24FD3:fā 0x24FD5:mǐn 0x24FD6:mò 0x24FD7:wà 0x24FD8:zhāo 0x24FD9:zhì,pí 0x24FDA:cū 0x24FDF:xún 0x24FE0:jí 0x24FE1:guì,qí 0x24FE3:chéng 0x24FE7:hàn 0x24FE8:xiào 0x24FE9:què 0x24FEB:chuò 0x24FED:fǔ 0x24FF3:qǐn 0x24FF4:lù 0x24FF5:què 0x24FF6:diǎn 0x24FF7:qiān 0x24FFC:chǎng 0x24FFD:tà 0x24FFE:bēi 0x25001:dù 0x25002:běng,bāng 0x25003:hòu 0x25008:zhǎ 0x25009:zhǎ 0x2500E:què 0x2500F:má 0x25010:hán 0x25013:liú 0x25014:lù 0x25016:zī 0x25018:pǐ 0x25019:zhòu 0x2501B:zāo 0x2501D:niǔ 0x25020:huì 0x25023:xué,qiào 0x25025:là 0x2502B:nóu,rǎn 0x2502C:yǎn,yè 0x2502D:rǎn 0x2502E:nǎo 0x25030:là 0x25031:guǎng 0x25032:dú 0x25035:lú 0x25039:jiǎn 0x2503A:xiè 0x2503B:qì 0x2503E:xiàng 0x25041:guǒ 0x25042:jié 0x25043:màng 0x25046:xiā 0x25047:kuī 0x2504E:yòng 0x25050:hǎi 0x25051:mì 0x25052:yào 0x25055:wēn 0x2505F:lì 0x25060:juàn,quán,quān 0x25061:wū 0x25062:qiáo 0x2506E:diào 0x2506F:chù,chuò 0x25072:suō 0x25075:chōng 0x25078:quān 0x25079:shè 0x25082:měng 0x25083:jù 0x2508B:tú 0x25092:nóng 0x25093:mó 0x25099:fèn 0x250A2:áo 0x250A3:guō 0x250A4:hú 0x250A5:cán 0x250A6:dūn 0x250A7:hǎi 0x250A8:jiǎo 0x250B0:gū 0x250B5:jīn 0x250B8:yáng 0x250C0:chà 0x250CC:huī 0x250D4:qú 0x250D5:kē 0x250DF:qīng 0x250E0:yì 0x250E3:kǎi 0x250E4:jiǎo 0x250E7:chōu,jiǎo,yǎo 0x250E8:bǔ 0x250E9:gèn,yǎn 0x250EA:jiāo 0x250EB:zhī 0x250EE:wèn 0x250F0:bīn 0x250F4:xiòng 0x250F5:fàn 0x250F8:yí 0x250F9:chuàn 0x250FA:yào 0x250FD:yāng 0x250FE:dù 0x250FF:yǎn 0x25101:méng 0x25107:chī,hūn 0x25108:mù 0x25109:jiāo 0x2510B:nǜ 0x2510D:guó 0x2510E:xuè 0x25111:fú 0x25112:xuē 0x25113:fū 0x25114:pèi,pò 0x25115:mò 0x25116:xī 0x25117:wò,nài 0x25118:shǎn 0x2511B:xī 0x2511C:qì 0x2511D:miàn 0x25126:dǎn 0x25128:chǒu 0x25131:fèi 0x25132:mié 0x25134:xuè,jué 0x25135:xù,yù 0x25136:sī 0x25137:jǔ 0x25138:mǎo 0x25139:bào 0x2513B:yí 0x2513C:guā 0x2513D:nì 0x2513F:yí,dì 0x25141:zuò 0x25144:nǔ 0x25151:diàn 0x25152:fàn 0x25153:yì 0x25154:shì 0x25157:cū 0x25158:zhěn,mí 0x2515E:shì 0x2515F:jiǎo 0x25160:hòu 0x25161:ér 0x25166:lèi 0x25167:xuè 0x25168:gèng 0x2516A:shōu 0x2516C:juān 0x25174:jié 0x25175:wéi 0x25177:shǒu 0x25178:jìng 0x2517A:xú 0x2517B:chòng 0x25185:jiāng 0x25186:mòu 0x25189:yù 0x2518C:jué 0x25191:tìng 0x25194:xiāo 0x25196:dōu 0x25198:guó 0x25199:máng 0x2519A:wāng 0x2519B:xù 0x2519C:wàng 0x2519D:suō 0x2519E:juàn 0x2519F:yuè 0x251A1:hán 0x251A3:shēn 0x251A5:xié 0x251A6:liú 0x251A7:rún 0x251AF:bì 0x251B2:nào 0x251B6:wàn 0x251B7:jiù 0x251B8:quē 0x251C4:nì 0x251C6:mí 0x251C7:suō 0x251C9:qiǎng 0x251CC:hàn,qià 0x251CD:zhuó 0x251CE:mí 0x251CF:xù 0x251D1:lǎng 0x251D2:jié 0x251D3:dìng 0x251D4:chàng,zhāng 0x251D5:zhì 0x251D6:fēi 0x251D7:jiá 0x251D8:jùn 0x251D9:huò 0x251DA:qī 0x251DB:jū,jù,xì 0x251DC:zhūn,guō 0x251DE:diàn 0x251DF:jiǎo 0x251E0:yā 0x251E2:zhǎn 0x251ED:zhī 0x251EF:mài 0x251F0:hū 0x251F1:xiè 0x251F2:shí 0x251F3:guī 0x251FF:xù 0x25202:jí 0x25204:chuàng 0x25206:mào 0x25207:ruán 0x25208:xū 0x25209:huàn 0x2520A:shà 0x2520B:jǔ 0x2520F:kuàng 0x25211:hóu 0x25212:guān 0x25213:guā 0x25215:mí 0x25216:dié 0x25217:bì 0x25218:liǎng 0x25219:là 0x2521A:shǎn 0x2521B:lù 0x2521C:xì 0x2521F:sǒu 0x2522C:ōu 0x2522E:léng 0x25237:kū 0x25238:guī 0x2523B:xī 0x2523C:pán,pān 0x2523D:sè 0x2523E:juè 0x2523F:hòng 0x25240:guàn 0x25241:jù 0x25243:nài 0x25244:huá 0x25245:gé 0x25246:lì 0x25247:gòu 0x25248:tì 0x2524A:mà 0x2524B:téng 0x2524C:dá 0x25250:qī 0x25251:yù,hè 0x25252:jiǎo 0x25253:miè 0x25254:gěng 0x25255:mèng,méng 0x25256:wèi 0x25258:tí 0x25259:qí 0x2525C:chén 0x2525D:dōu 0x2525F:pán 0x25270:hàn,qià 0x25274:mì 0x25275:má 0x25276:lù 0x25277:qī 0x25278:kēng 0x2527A:dié 0x2527B:qì 0x2527C:jiāo 0x2527D:kāng 0x2527E:qiāo 0x2527F:mì 0x25280:shān,sǎn 0x25287:jiān 0x25288:lí 0x25289:kè 0x2528A:xù 0x25291:mán,màn 0x25292:fèng 0x25293:chàn 0x25294:huǐ 0x252A7:kòu 0x252AA:wěi 0x252AB:guàn 0x252AC:jí 0x252AD:zùn 0x252AE:huò 0x252AF:xié 0x252B4:suì 0x252B6:ruǎn 0x252B8:tè 0x252BC:zhèng 0x252BD:kūn 0x252BE:xiǎng 0x252BF:mián 0x252C1:xì 0x252CC:sā 0x252D9:è 0x252DA:miè 0x252DB:zhǔ 0x252DC:zōu 0x252DD:měng 0x252DF:xī 0x252E1:táng 0x252E3:jià 0x252E4:cháng 0x252E5:jí 0x252EE:zhuó 0x252FF:hè 0x25300:chá 0x25301:qì 0x25302:mián 0x25303:zhěn 0x25304:kū 0x25305:yè 0x25306:zhōu 0x25308:jiān 0x2530A:pàn 0x2530D:huī 0x2530F:míng 0x25310:liù 0x25318:shuì 0x2531A:mài,yá,shù 0x2531B:lí 0x2531E:shuò 0x2531F:yí 0x25324:lì 0x25328:xiē,miè 0x25329:tè 0x2532A:xiū 0x2532D:xuàn 0x2532E:lì 0x2532F:méng 0x25330:wéi 0x25331:méng 0x2533A:yào 0x2533B:lán 0x2533C:líng 0x2533D:yīng 0x2533E:yīng 0x2533F:lì 0x25340:jiǎn 0x25341:guī,guì 0x25345:guān 0x25346:xiè 0x25349:shè 0x2534B:zuī,xiē,huǐ 0x25353:kàn,yǎn 0x25354:léi 0x2535A:biàn 0x2535D:shǔ 0x2535E:nǜ 0x2535F:xù,yì 0x25363:hào 0x25368:guǐ 0x2536A:zhài 0x2536B:láng 0x2536C:cuān 0x2536D:zhì 0x2536E:féng,fēng 0x2536F:qīn 0x25371:zé 0x25372:nà 0x25373:niǔ 0x25374:yì 0x25377:cōng 0x25378:shī 0x25379:jiǎn 0x2537A:zōng 0x2537B:yǎn 0x2537C:yīng 0x25380:ruǎn 0x25382:róng 0x25383:xì 0x25385:guān 0x25386:kài 0x25388:wù 0x2538A:qín 0x2538B:cōng 0x2538D:zé 0x2538E:xiè 0x25390:yù 0x25391:zàn 0x25392:chuāng 0x25393:lǐ 0x25394:lǐ 0x25395:xù 0x25396:mí 0x25397:xù 0x25398:ruǎn 0x2539B:guì 0x2539C:rǒng 0x2539F:máo 0x253A1:qín 0x253A2:cuàn 0x253A3:cuàn 0x253A4:cuàn 0x253AE:wū 0x253B0:fǎ 0x253B1:bá 0x253B8:qià 0x253B9:zhì 0x253BA:tiào 0x253C4:zhì 0x253C5:zhí 0x253C7:huàn 0x253C8:chóu 0x253CA:zhì 0x253CE:yǐng 0x253D2:wù 0x253D3:bēi 0x253D5:hóng 0x253D6:shěn 0x253D8:jué 0x253D9:kuì 0x253DC:yǐ 0x253DD:yà 0x253E0:bī 0x253E4:kuà 0x253E5:qiān 0x253E8:zhāo 0x253EA:kǎi 0x253EB:shāng 0x253EE:àn 0x253EF:zhé 0x253F0:zhì 0x253F7:zhì 0x253F9:jiǎo 0x25400:sī 0x25401:pú 0x25402:ǒu 0x2540A:zhuó 0x25411:yīng 0x25413:huān 0x25415:yà 0x25418:shí 0x25419:pā,bā 0x2541A:pǔ 0x2541E:máng 0x2541F:chāi 0x25429:yún 0x2542C:gǔ 0x25439:dǎn 0x2543B:náo 0x2543D:zhé 0x2543F:hú 0x25445:kēng 0x25447:dié 0x25448:tīng 0x2544B:guài 0x2544E:qiōng 0x2544F:shǐ 0x25450:jiǎ 0x25451:ào 0x25452:nǎ,kēng 0x25453:pǐn 0x25454:jiá 0x25461:zhè 0x25462:bù 0x25463:wǒ 0x25465:chǎ 0x2546A:náo 0x2546B:kān,kǎn 0x2546F:dú 0x25470:guài 0x25471:qióng 0x25473:róng 0x25474:yǐ 0x25475:duī 0x25476:lěi 0x25478:zhōu 0x25479:kuā 0x2547A:ē 0x2547B:xiān 0x2547C:diàn 0x2547D:nuò 0x2547E:è 0x2547F:yōng 0x25480:wù 0x25481:kēng 0x25493:zhì 0x25497:zhǐ 0x25498:xún 0x2549B:zhèng 0x2549E:yáng 0x254A0:huò 0x254A1:jí 0x254A2:nǎo,lì 0x254A7:yà 0x254A8:lù 0x254AB:fū 0x254AC:sǎn 0x254AD:chù 0x254AE:wěi 0x254B0:fǔ 0x254B1:kēng 0x254B2:sì 0x254B3:kàng 0x254B5:yì 0x254B6:huà 0x254BE:yǔ 0x254C3:lì 0x254C6:lǐn 0x254C7:dǔ 0x254C8:è 0x254CC:qiǎng 0x254CD:dú 0x254D0:jié 0x254D1:chuò 0x254D2:xiàn,kàn 0x254D6:gǎo 0x254EC:dào 0x254F0:hōng 0x254FB:zōng 0x254FE:qì 0x254FF:tuó 0x25500:hōng 0x25501:pǐ 0x25502:gèng 0x25504:niè 0x25507:kōng 0x2550A:zhǐ 0x25511:xiǎo 0x25521:shè 0x25522:yú 0x25523:jiāng 0x25529:qǐ 0x2552A:chěn 0x2552B:sǎng 0x2552D:suǒ 0x2552E:qián 0x2552F:huì 0x25531:shàn 0x25532:è 0x2553B:qiū 0x2553D:kè 0x25540:wēng 0x25541:zī 0x25542:jí 0x25547:dǎ 0x25549:cuò 0x2554D:lǒu 0x2554E:kāng 0x2554F:kuò 0x25550:dí 0x25551:qiē,jū 0x25553:mò 0x25556:guǒ 0x25557:hōng 0x25558:cháo,suǒ 0x25559:hēi 0x25562:cáo 0x25563:zhé 0x25566:gǔn 0x25570:xū 0x25571:péng,pēng 0x25572:jué 0x25575:gǎn 0x25576:sī 0x25578:suì 0x25579:què 0x2557B:wú,wǔ 0x2557C:yán 0x2557D:pèng 0x2557E:xiǎo 0x2557F:pān 0x2558D:là 0x25597:bèng 0x25598:zhěn 0x25599:jí 0x2559C:jǐn 0x2559D:lián 0x2559E:kěn 0x255A0:zhóu,dú 0x255A8:zào 0x255AA:lè 0x255AB:qī 0x255AC:bìng 0x255B5:yǐn 0x255B6:pīn 0x255BB:sǒu 0x255BC:lǜ 0x255BE:dí 0x255BF:dú 0x255C0:liǎo 0x255C1:zhuó 0x255CA:chǎng 0x255D2:chèn 0x255D3:tà 0x255D9:què 0x255DA:dào 0x255DD:rǎng 0x255DF:pò 0x255E6:zhōng 0x255E7:xiē 0x255EA:jiāng 0x255EB:qú 0x255EC:lěi 0x255ED:cà 0x255EE:quē 0x255F5:xiàng 0x255F6:lèi 0x255FA:làn 0x255FF:lǎ 0x25601:lǎ 0x25604:yù 0x2560A:jiào 0x2560B:qín 0x2560C:jī 0x2560F:gǎn 0x25612:yì 0x25620:yì 0x25621:zhī 0x25624:biǎo 0x25625:shēng 0x25626:jiù,shè 0x2562B:hē 0x2562C:fú 0x2562E:jū 0x25640:zuǒ 0x25641:yí 0x25646:xiàn,zhī 0x25647:yí 0x25649:sì,tái 0x2564B:chuì 0x2564E:mò 0x25661:zhān 0x25663:xún 0x25666:rú 0x25668:huò 0x2566C:shāo 0x25670:shòu 0x2567E:yòu 0x2567F:yù 0x25682:jùn 0x25689:zī 0x2568A:lù 0x2569A:chǐ 0x2569B:kūn 0x256A0:zhùn 0x256A6:hóu 0x256A9:xǔ 0x256BE:zōng 0x256BF:yìng 0x256C2:zhū 0x256C5:liù 0x256D1:nù 0x256D8:bì 0x256DA:chì 0x256DC:zǔ 0x256DD:féng 0x256DE:lù 0x256DF:pǔ 0x256E5:zhuàn 0x256E7:zhé 0x256E8:shī 0x256E9:yǔ 0x256EA:lù 0x256EB:liáng 0x256EF:jué 0x256F0:liào 0x256F1:bēng 0x25703:yì 0x25704:guān 0x2570C:ǎo 0x2570F:guì 0x25710:mǐn 0x25712:yǎn 0x25713:lán 0x25716:bó 0x25719:zàn 0x2571A:yǒu 0x25725:yì 0x25726:nǐ,xiǎn 0x2572C:nǐ,xiǎn 0x2572D:guǒ 0x2572E:jùn 0x25730:shī 0x25732:xiǎn,jiǎn 0x25734:qiān 0x25735:què 0x25736:kuí 0x25740:shé 0x25742:huò 0x25744:wàn 0x2574A:fèi 0x2574B:fèi 0x2574C:jī 0x2574D:yù,wáng 0x25751:zhī 0x25752:guà 0x25754:jié 0x25755:máng 0x25756:hé,xié 0x25758:yǒu 0x2575F:dù 0x25760:sī,xiù 0x25762:lì 0x25765:jié 0x25766:niǔ 0x25767:bà 0x25768:yú 0x2576E:zhī 0x25778:hé 0x25779:kē 0x2577E:dù,zhà 0x2577F:jiā 0x25781:chēn 0x25783:chuì,shù 0x25784:hé 0x25785:zhǎi 0x2578A:mèi 0x2578D:hé 0x2578E:zǐ 0x2578F:zhú 0x25792:tuó 0x25798:zùn 0x2579A:rú 0x2579B:duò 0x2579C:jiàng 0x257A7:héng 0x257A9:bēng,hé 0x257AA:mò,mǐ 0x257AF:zú 0x257B2:biē 0x257B4:kù 0x257B5:jiá 0x257BA:zhuō 0x257BC:xiū 0x257C3:hé 0x257C5:qiāo 0x257CD:fěi 0x257CE:shēng 0x257D2:zhuì 0x257D3:kuǎn 0x257D4:zè 0x257D5:xiān 0x257D7:bì 0x257D8:yì 0x257DA:chàng 0x257EA:mào 0x257F6:wǎn 0x257FD:wū 0x257FE:kū 0x257FF:wǒ 0x25800:xīng 0x25801:kē 0x25803:jiū 0x25804:duān 0x25805:huàn 0x25808:zhì,jì 0x25809:cè 0x2580A:róu 0x2580B:jí 0x2580D:yè 0x2581B:jīng 0x2581C:yàng 0x25821:zǒng 0x25829:cǎn 0x25831:sī 0x25832:lì 0x25833:gǔ 0x25834:chàng 0x25836:fěi 0x25837:liú 0x25839:jié 0x2583A:yūn 0x2583D:zhì 0x25840:chóu 0x25841:biē 0x25852:jī 0x2585C:luó,suì 0x2585D:jiān,qiān 0x2585F:chuāng 0x25860:shuǎng 0x25862:lǜ 0x25863:jùn 0x25864:jiào 0x25866:tì,dì 0x25867:zhā 0x2586A:yì 0x2586C:cōng 0x2586D:něi 0x2586E:jiā 0x25874:jì 0x2587D:ài 0x25887:jiǎn 0x2588A:bèn 0x2588C:fán 0x2588D:hù,suì 0x2588E:zùn 0x2588F:diàn 0x25890:gāo 0x25891:gǎo,hào 0x25892:láo,lào 0x25894:zhuó,zhào 0x2589F:hù 0x258A2:tuí 0x258A6:bì 0x258A7:jú,yì 0x258AE:huá 0x258B2:chéng 0x258B6:kuài 0x258B7:dāng 0x258B8:gé 0x258B9:xié 0x258BB:jié 0x258BD:cān 0x258C6:zú 0x258C8:pú 0x258CB:shǔ 0x258CC:bǔ 0x258D7:níng 0x258D8:yǎn 0x258D9:zhòu,còng 0x258DB:méng 0x258DD:biǎn 0x258DF:xiàng 0x258E4:lù 0x258E5:lí 0x258E9:jì 0x258EB:miè 0x258EC:lèi 0x258EE:zhì 0x258EF:yōu 0x258F0:biǎn 0x258F8:mù 0x258F9:ràn 0x258FA:ràn 0x25902:niǎo 0x2590A:quán 0x2590B:zhé 0x25910:lèi,léi 0x25917:dǎng 0x25918:jué 0x2591C:líng 0x2591E:líng 0x2591F:yán 0x25923:yǎo 0x25924:zhèn 0x25925:qī 0x25926:ài 0x25928:nú 0x25929:mǎng 0x25931:kǎn,hān 0x25933:jiū,cuàn 0x25934:yǎn 0x25935:miàn 0x25937:yín 0x25938:wán 0x25939:yào,yǎo 0x2593A:wā 0x2593B:pí 0x2593C:suì 0x25945:kǒng 0x25948:hóng,wòng 0x2594A:mǐng 0x2594B:líng 0x2594C:yì,dié 0x2594D:shēn,shèn 0x2594F:zuò 0x2595B:tū,bá 0x2595D:yòng 0x2595F:wà 0x25960:guǐ 0x25961:hòng 0x25965:shì 0x25967:xiòng 0x25969:ā,xiàng 0x25971:chéng 0x25973:kēng 0x25974:yì 0x25975:yàng 0x25976:tíng 0x25977:dòu 0x25978:chá 0x25979:liù 0x2597D:qiú 0x2597E:xuǎn 0x2597F:shēn 0x25980:kuān,mì 0x25981:tòng 0x25983:qiǎn 0x25985:chòu 0x2598A:wěn 0x2598C:lòng 0x2598D:ǎn,yǎn 0x25994:kǎn 0x25996:yǎo 0x25998:fú 0x2599C:bèng 0x2599D:lǎn 0x2599E:qià 0x2599F:diàn 0x259A2:jiào 0x259A3:guī 0x259A5:xiòng 0x259A8:kè 0x259B6:xiàn 0x259B7:wòng 0x259C2:gǒng 0x259C6:ǒu 0x259C7:kē,cháo 0x259CB:kū 0x259D1:tián,diān,yǎn,chǎn 0x259D2:gòu 0x259D3:mǎ 0x259D5:liù 0x259D9:wèi 0x259DA:wěn 0x259E1:gòng 0x259E3:tú 0x259E4:níng 0x259E7:mì 0x259EB:láng 0x259EC:qiǎn 0x259ED:mán 0x259EE:zhé 0x259F0:huà 0x259F1:yōng 0x259F2:jìn,jǐn 0x259F4:mèi 0x259F7:fú 0x259FB:qú 0x25A0C:liù 0x25A0D:fù 0x25A0E:dàn 0x25A10:gǒng 0x25A12:cuì,cuàn 0x25A15:xǐng 0x25A1C:tū 0x25A1D:shòu 0x25A2A:qióng 0x25A33:róng 0x25A3B:lì 0x25A3F:jī 0x25A40:tuò 0x25A4C:tóng 0x25A52:tán 0x25A54:líng 0x25A56:yì 0x25A57:ruǎn 0x25A59:pǎ 0x25A5D:cà 0x25A61:yuè 0x25A62:què 0x25A63:zhù 0x25A64:hài 0x25A71:fá 0x25A72:hài 0x25A80:bū 0x25A81:pīng 0x25A82:liè 0x25A8A:kuǐ,jué 0x25A8B:fú 0x25A8C:tiǎn 0x25A8D:wò 0x25A8F:jū 0x25A98:zhēn 0x25A9A:fú 0x25AA2:lóng 0x25AA6:xì 0x25AA7:tián 0x25AAB:jì 0x25AAF:yào,qiáo 0x25AB1:cù 0x25AB4:pàng 0x25AB5:qiè 0x25ABB:lóng 0x25ABC:jǐ 0x25AC2:tóng 0x25AC3:yí 0x25AC5:chāng 0x25ACB:gōng 0x25ACE:dòng 0x25AD6:xiāng 0x25AD9:tǐng 0x25ADB:zhuān 0x25ADC:yǐ 0x25ADD:yì 0x25ADE:zǐ 0x25ADF:qǐ 0x25AE2:chǎ 0x25AEC:dùn 0x25AEF:chōng 0x25AF0:lù 0x25AF1:dùn 0x25AF3:fāng 0x25AF4:shì 0x25AF5:tì 0x25AF6:jī 0x25AF7:qiū 0x25AF8:shuǐ 0x25AF9:chén 0x25AFC:huàng 0x25AFD:shi 0x25B00:yún 0x25B06:lóng 0x25B08:mǎn 0x25B09:gōu 0x25B0D:xiān 0x25B0E:mò 0x25B10:shěn 0x25B12:pō 0x25B13:yào 0x25B14:qū 0x25B15:rǎn 0x25B19:jù 0x25B1C:yǐn 0x25B1D:bái 0x25B1E:niè 0x25B20:chōu 0x25B2A:róng 0x25B2B:chuǎn 0x25B2C:niè 0x25B2D:lì,liè 0x25B2E:jiāng 0x25B2F:kǎo 0x25B30:cè,zhà 0x25B31:chòng 0x25B32:zhuā,duò 0x25B33:zǐ 0x25B34:yáng 0x25B3C:wěn 0x25B4B:jì 0x25B4C:jì 0x25B50:lǜ 0x25B51:qiú 0x25B52:dùn 0x25B53:báo 0x25B54:chān 0x25B56:bó 0x25B58:chī 0x25B59:zhè,niè 0x25B5A:màng 0x25B5C:jì 0x25B5D:miào 0x25B5E:yuàn 0x25B60:wú 0x25B61:zhì 0x25B62:pīng 0x25B65:chōng 0x25B6B:mí 0x25B6C:féi 0x25B6D:cuō 0x25B6E:méng 0x25B8D:yín 0x25B8E:mǎng 0x25B8F:diǎn 0x25B90:diāo 0x25B92:qián,zhān 0x25B95:hàng 0x25B96:zhí 0x25B97:jú 0x25B98:niàn 0x25B9C:mí 0x25B9D:gǔ 0x25BA3:zhuā 0x25BA4:niè 0x25BA5:zhuó 0x25BA7:yè 0x25BA8:còng 0x25BAA:xū,jí 0x25BAC:xì 0x25BAF:bō 0x25BBE:cǎn,zān 0x25BC3:yǎn 0x25BD1:jǐn 0x25BD4:jǔ 0x25BD5:dàng 0x25BD6:dù 0x25BD8:yé 0x25BD9:jìng 0x25BDA:kè 0x25BDB:luò 0x25BDC:wěi 0x25BDD:tū 0x25BDE:yóu 0x25BDF:pài 0x25BE1:pí 0x25BE2:dìng 0x25BE4:wěi 0x25BE5:chè 0x25BE6:jiàn,shà 0x25BE8:sī 0x25BE9:zhuó 0x25BEA:sòu 0x25BEC:ruǎn 0x25BEE:yú 0x25BF3:è 0x25BF6:kǔ 0x25BF8:zhù 0x25BFE:xiá 0x25C1B:fú 0x25C1C:táo 0x25C1D:xī 0x25C1E:chōu,sǒu 0x25C1F:yuán 0x25C20:lǘ 0x25C21:cè 0x25C22:shàn 0x25C23:liú 0x25C25:xì 0x25C26:jī 0x25C27:yǐ 0x25C28:tán 0x25C2A:hú 0x25C2D:cuō,zhǎ,cī 0x25C2E:gě 0x25C30:shì,shé 0x25C31:sāo 0x25C32:hòng 0x25C33:xiàn 0x25C36:xiá 0x25C3B:mù 0x25C3C:suǒ 0x25C3E:zhài 0x25C40:fū 0x25C41:sè 0x25C42:nú 0x25C43:yì 0x25C67:qín 0x25C68:qìng 0x25C75:huì,suì,xí 0x25C76:shuǎng 0x25C77:dǎn 0x25C78:ōu 0x25C79:mò 0x25C7A:qiān 0x25C7B:chì,tú 0x25C7C:pái,pì 0x25C7D:juàn 0x25C80:cháo 0x25C81:liè 0x25C82:bīng 0x25C83:kòu 0x25C84:dàn 0x25C85:chóu 0x25C86:tōng 0x25C87:dàn 0x25C88:mǎn 0x25C89:hù 0x25C8A:liáo 0x25C8B:xián 0x25C8D:cáo 0x25C8E:lù 0x25C8F:chuàn 0x25C90:wú 0x25C91:mán 0x25C95:zǐ 0x25C97:dù 0x25C9A:shuàng 0x25C9B:fù 0x25C9C:jù 0x25C9D:zhòu 0x25C9F:diào 0x25CA0:wàng 0x25CA1:chuāng 0x25CA2:qiān 0x25CA3:tuì 0x25CA5:lián 0x25CA6:biāo 0x25CA7:lí 0x25CAA:lí 0x25CC6:bì 0x25CC7:fù 0x25CC8:cuì 0x25CC9:dū 0x25CCB:zàn,zān 0x25CCC:lóng 0x25CCD:xún 0x25CCE:qióng 0x25CCF:jī 0x25CD0:qiǎn 0x25CD2:jiǎn 0x25CD3:shāo 0x25CD4:duò 0x25CD5:shū 0x25CD6:bù 0x25CD7:xū 0x25CD8:dǒng 0x25CDA:rán 0x25CDC:yáng 0x25CDD:ruǐ 0x25CDE:lìn 0x25CDF:jiǎn 0x25CE0:dì 0x25CE1:fén 0x25CE2:diàn 0x25CE3:zuì 0x25CE5:nǐng 0x25CEA:suàn 0x25CEB:tiǎn 0x25CEC:àn 0x25CEF:cè 0x25CF0:dìng 0x25CF1:shēn 0x25CF2:dù 0x25CF3:tí 0x25CF4:jiǎo 0x25CF5:zuì 0x25CF6:zhǎng 0x25CF7:jiǎn 0x25CF8:dàn 0x25CF9:dǎn 0x25CFA:sǒng 0x25D10:zhǎn 0x25D11:tíng 0x25D12:zhì 0x25D15:yóu 0x25D16:pái 0x25D21:lǐ 0x25D24:qián 0x25D26:suì,dí 0x25D27:jǔ 0x25D28:ài 0x25D29:gé 0x25D2A:jù 0x25D2B:tún,diàn 0x25D2C:bì 0x25D2D:qià 0x25D2E:bó 0x25D2F:huì 0x25D31:jiàn 0x25D34:gōu 0x25D35:suàn 0x25D3A:cí 0x25D3B:qiàng 0x25D3F:yán 0x25D4F:diàn 0x25D52:miè 0x25D5C:pò 0x25D5D:lǐng 0x25D5E:jié 0x25D5F:zhù 0x25D60:gǔ 0x25D63:duān 0x25D64:zhào 0x25D66:shǎo 0x25D67:qǐn 0x25D68:mí 0x25D6A:píng 0x25D6B:cóng 0x25D6C:chōu 0x25D6F:sà 0x25D76:tiǎn 0x25D85:liú 0x25D86:lǘ 0x25D87:lǔ 0x25D88:zōu 0x25D8C:lǜ 0x25D8D:huǎn 0x25D8F:tiáo 0x25D90:tuí 0x25D91:qiǎng 0x25D92:lìn 0x25D93:bēi 0x25D94:páo 0x25D95:zhān 0x25D97:lì 0x25D9B:tí 0x25D9C:hú 0x25DA2:liè 0x25DB5:huǐ 0x25DB6:qū 0x25DB7:xuǎn 0x25DB9:jìng 0x25DBA:dié 0x25DBB:suí 0x25DBD:wèi 0x25DBF:yán 0x25DC0:yān 0x25DC1:bàn 0x25DC3:jiǎng 0x25DC4:nǐ 0x25DC5:lì 0x25DC6:hú 0x25DC7:qì 0x25DC8:zhōng 0x25DD1:bì 0x25DD4:yú 0x25DD5:dié 0x25DD6:lìn 0x25DD7:lì 0x25DD8:zhuó 0x25DD9:jì 0x25DDA:jū 0x25DDC:fēng 0x25DDE:yù 0x25DE8:liè 0x25DE9:zá 0x25DEA:qián 0x25DEB:jiē 0x25DEC:guān 0x25DEE:zhuó,zhāo 0x25DF1:fù 0x25DF9:sè 0x25DFC:cù 0x25E03:huǐ 0x25E08:dàng 0x25E09:lóng 0x25E0A:yì 0x25E17:sǎ 0x25E18:yuè 0x25E1A:dí 0x25E21:gǎn 0x25E22:zān 0x25E23:shàn 0x25E24:yù 0x25E25:bǒ 0x25E27:dìng 0x25E28:fán,bǒ,bǔ 0x25E2A:yù 0x25E2C:shēn 0x25E32:gōng 0x25E34:miè 0x25E35:tún 0x25E38:liè 0x25E41:zhā,zuò 0x25E42:pēi 0x25E44:mí 0x25E46:míng 0x25E47:fàn 0x25E49:nà 0x25E4A:sì 0x25E4B:yí 0x25E4C:jiā 0x25E4D:zhù 0x25E53:bān 0x25E54:yù 0x25E56:pǒ 0x25E5A:huān 0x25E5B:càn 0x25E5C:jiāo 0x25E60:tán 0x25E69:zhì 0x25E6B:mǐ 0x25E6C:kǎo 0x25E71:yāo 0x25E72:duì 0x25E73:quǎn,huán 0x25E74:bù 0x25E75:chù 0x25E76:qiǎo 0x25E77:liú 0x25E78:bó 0x25E7A:kāng 0x25E7B:fèn 0x25E85:dào 0x25E89:dòu 0x25E8A:gé 0x25E99:líng 0x25E9A:xí 0x25E9C:nì 0x25E9D:zhōu 0x25E9E:zhōu,yù 0x25EA3:chōu 0x25EB4:niān 0x25EB5:jī 0x25EB7:qū 0x25EC4:kāi 0x25EC7:xiàn 0x25EC9:hé 0x25ECB:lín 0x25ECD:zī 0x25ED1:ǒu,lì 0x25ED2:cù,mì 0x25ED7:chá 0x25EDD:zhòng 0x25EDE:bú 0x25EE4:chōu 0x25EE5:xì 0x25EE6:sà 0x25EE7:xián,jiān 0x25EE8:sè 0x25EE9:miàn 0x25EEB:fán 0x25EEC:zhī 0x25EEE:cuì 0x25EF4:xià 0x25EFE:nuò 0x25EFF:lí 0x25F00:zú 0x25F02:cuī 0x25F03:zé 0x25F05:lí 0x25F18:qí 0x25F1A:zhuō 0x25F1B:cuì 0x25F1C:pū 0x25F1E:fán 0x25F1F:tán 0x25F29:zī 0x25F2A:zǔ 0x25F2B:zhōu 0x25F2C:róng 0x25F2D:lín 0x25F2E:tán 0x25F36:shì 0x25F3A:cuǐ 0x25F3B:zī 0x25F3C:fū 0x25F41:xiào 0x25F48:fēng,lǐ 0x25F4F:xiàn 0x25F50:jiàn 0x25F52:fèn 0x25F57:lì 0x25F58:mò,miè 0x25F5F:yōu 0x25F65:huò 0x25F67:qū 0x25F6C:niàng 0x25F70:mí 0x25F73:qì 0x25F76:hé 0x25F78:liàn 0x25F7F:zuò 0x25F82:líng 0x25F85:zhú 0x25F87:niǎo 0x25F8A:jǐ 0x25F8B:réng 0x25F8C:jié 0x25F8D:gǎn 0x25F90:yì 0x25F93:zhóu 0x25F95:wù 0x25F9A:gěng,dǎn 0x25F9B:cù 0x25F9D:miè,miǎn 0x25FA1:xún,jī 0x25FA3:zhī 0x25FA4:xiáo 0x25FA7:fú 0x25FA8:hú 0x25FAC:dī 0x25FAE:jué 0x25FAF:diào 0x25FB9:shǒu 0x25FBC:wǎng 0x25FC3:nà 0x25FC4:dī 0x25FC5:shì 0x25FC6:cí 0x25FC7:shū 0x25FC9:wà,mò 0x25FCA:chè 0x25FCB:fán,biàn 0x25FCD:gū 0x25FCE:yuān,wǎn 0x25FD1:guān,lún 0x25FDA:qiè 0x25FDC:zhǎn,zhěn 0x25FDD:dài 0x25FDE:shē 0x25FE6:zhōu 0x25FE7:xiǎng 0x25FE8:míng 0x25FE9:zì 0x25FEA:huāng 0x25FEB:mí,yì,wèi 0x25FED:xì 0x25FEE:zhì,shì 0x25FEF:pài 0x25FF0:duǒ 0x25FF4:cì 0x25FF5:móu 0x25FF7:chào 0x25FF9:yì 0x25FFA:gōu 0x26007:jīng 0x26013:zēng,jiē 0x26014:pīng 0x26015:yè 0x26016:jié 0x26018:pī,bī 0x2601B:shā 0x2601C:zhuàng 0x2601D:jiǒng 0x26020:liú 0x26021:yǔ 0x26023:jū 0x26028:nuò 0x26038:mào 0x26044:chēn 0x26046:zhuàn,juàn,shuàn 0x26047:niàn 0x26048:kòng 0x26049:jiē 0x2604A:huà 0x2604D:xīn 0x2604E:zuó 0x2604F:yàn 0x26050:jué 0x26055:hū 0x26056:zhòu 0x26057:shè 0x26059:yǎn 0x2605B:xiè,dié 0x2605C:dié 0x2605F:chēn,chén,zhěn 0x26072:jiǎn 0x26073:jì 0x26076:chuò 0x26077:hóng 0x26080:dá 0x26084:kāi 0x26085:xīng,xǐ 0x26086:huì 0x26087:jiǎn 0x26088:zhòu 0x26089:zhǎ 0x2608A:fù 0x2608B:chì 0x2608C:běng 0x2608D:nuò 0x26091:jì 0x26092:qián 0x26094:wàn 0x26095:óu 0x26096:bì 0x26097:shuò 0x260A0:jīng 0x260A1:yè 0x260C4:fěi 0x260C7:lí 0x260CA:lì 0x260CB:pí 0x260D2:suì 0x260D3:liú 0x260D4:hé 0x260D5:hǔn 0x260D6:tǎn 0x260D7:shuò 0x260D8:zhì 0x260D9:bó 0x260DD:xì 0x260E1:pó,tāo 0x260E2:qǔn 0x260E4:mù 0x260FD:yōng 0x26102:dài 0x2610A:qǐ 0x2610B:diǎo 0x2610C:niè 0x2610D:shuǎng 0x2610F:shāo 0x26110:kǔn,mí 0x26111:suì 0x26113:dōu 0x26114:dié 0x2611C:gōng 0x2612F:zhuǎn 0x26130:guó 0x2613C:xū 0x2613D:qú 0x26140:xún 0x26143:jiāo,qiāo 0x26144:zhé 0x26146:diàn 0x26147:sāng 0x26148:bēng 0x2614A:suǒ 0x2614B:qiǎn 0x2614F:xū 0x26151:xún 0x26154:mò 0x26175:suì 0x26176:là,liè 0x26177:zhǔ,zhù 0x26178:zhòu 0x2617A:lì 0x2617C:dān 0x2617D:jú 0x2617F:yùn 0x26180:chǎn 0x26181:luó 0x26184:sè 0x26186:lián 0x26188:zuǎn,zuí 0x2618B:lài 0x2618C:shuǎng 0x2618D:qiè 0x26198:dōu 0x2619E:wù 0x2619F:méng 0x261A1:jì 0x261A4:chī 0x261A6:nǐ 0x261B8:yáo 0x261BB:là 0x261BE:lǜ 0x261C0:suì 0x261C1:fū 0x261C4:lěi 0x261C5:wěi 0x261CE:cōng 0x261D4:lì 0x261D6:pín 0x261D8:jūn 0x261D9:jǔ 0x261DB:là 0x261E7:jì 0x261EA:miè 0x261EC:yào 0x261ED:biān 0x261F1:cóng 0x261F2:sī,chī 0x261F5:sī 0x261F8:hé 0x26203:nàng 0x26205:dié 0x26208:chè 0x26209:yùn 0x2620B:xiǔ 0x2620C:shū 0x2620E:chǎn 0x2620F:mín 0x26210:lián 0x26211:yīn 0x26212:xīng 0x26213:wēi 0x26214:gǔ 0x26215:tóu 0x26216:tā 0x26217:fěi 0x26218:dā 0x26219:niè 0x2621A:cù 0x2621B:zuǒ 0x2621C:jié 0x2621D:xuàn 0x2621E:bó 0x2621F:jīn 0x26220:yǐn 0x26221:xū 0x26223:yú 0x26224:xiòng 0x26226:qì 0x26227:bēi 0x26228:xíng 0x26229:gǒng 0x2622C:zuǐ 0x26230:jiē 0x26232:kāi,gǔ 0x26235:xíng 0x26236:bēi 0x26237:shū 0x26238:yù 0x2623A:zhǒu 0x2623B:zhǎn 0x26242:zhōng 0x26246:chá 0x26248:chuí 0x26249:liù 0x2624E:suī 0x26250:zhǔ 0x26259:biàn 0x2625D:xìn 0x2625F:yà 0x26262:líng 0x26267:yà 0x2626C:tīng 0x26279:dí 0x26281:pí 0x26282:hù 0x26283:cén 0x2628A:tiān 0x2628B:mǒu 0x2628C:juǎn 0x2628E:mǒu 0x26290:jù 0x26291:liǔ 0x26293:lǐng 0x26297:liǔ 0x26298:hù 0x262A6:fú 0x262A7:hú 0x262AA:è 0x262AB:gōng 0x262AC:gū 0x262B1:guà 0x262B9:lüè 0x262BB:fán 0x262BC:lǜ 0x262BD:méng 0x262BE:fú 0x262BF:liú 0x262C5:xié 0x262C6:gū 0x262C8:xiàn 0x262C9:bó 0x262CB:jì 0x262D3:quān 0x262D4:lù 0x262DE:shuò 0x262E1:mǒu 0x262E2:yù 0x262E3:hàn 0x262E9:yuè 0x262EA:dàn 0x262EF:yú 0x262F0:jiān 0x262F3:gāng 0x262FF:cáo 0x26300:shèn 0x26301:liǔ,lóu 0x26306:jiāo 0x26309:sù 0x2630A:sù 0x2630B:zhòng 0x26312:liào 0x26314:xuǎn 0x26315:lù 0x26317:jì 0x2631A:yán 0x2631F:lù 0x26321:mǐn 0x26322:tí 0x26326:huàn 0x26329:yì 0x2632A:tǎn 0x2632C:wǔ,wú 0x26330:jī 0x26337:dú 0x26338:kūn 0x2633A:jūn 0x2633F:shī 0x26340:nàn 0x26341:pò 0x26344:shū 0x26345:quàn 0x2634C:rèn 0x2634F:fén 0x26352:tà 0x26353:tún 0x26355:yáng 0x26366:duō 0x26367:cī 0x26369:gǔ 0x2636A:fén 0x2636D:róu 0x26371:gāo 0x26372:xiáng,yàng 0x26374:xiáng 0x26375:hǒu 0x26377:tāo 0x26378:shàn 0x26379:yáng 0x2637A:zì 0x2637C:yuán 0x26384:sú 0x26387:chuàn 0x26388:xiáng,xiè 0x2638A:bān 0x2638C:mǎn 0x2638E:fǔ 0x2638F:lǎ 0x26390:lǐ 0x26392:jié 0x26393:yōu 0x26398:yù 0x2639A:chì 0x2639C:chuàn 0x2639D:yì 0x2639E:shān 0x263A2:jí 0x263A3:yān 0x263A6:wù 0x263A7:chún,dūn,dùn 0x263A8:máng 0x263AD:fú 0x263AE:jiā 0x263AF:gòu 0x263B0:gú 0x263B1:jiá 0x263B5:xián 0x263B7:jìn 0x263B8:zì 0x263B9:lóu 0x263BC:gòu 0x263C0:rén 0x263C2:shān 0x263C5:jué 0x263C6:tóng 0x263C7:yǒu 0x263D4:jiān 0x263D5:dú 0x263D7:hú 0x263DB:sāo 0x263DC:yù 0x263E2:mài 0x263E4:zhī 0x263E5:yān 0x263E6:gāo 0x263E8:huài 0x263EE:quán 0x263F1:yǎng,chài 0x263F3:zuǐ 0x263F7:xiāo 0x263F8:yì,chí 0x263F9:yǎn 0x263FA:hóng,gòng 0x263FB:yú,yù 0x263FF:chì 0x26401:chí 0x26404:háng 0x26405:sè 0x26406:pā 0x26407:tà 0x26408:fēn 0x26409:chī 0x2640C:hóng 0x2640D:xuè 0x26416:zhǐ 0x2641B:qú,yù 0x26420:xī 0x26421:fú 0x26423:shū 0x26424:hài 0x26426:pò 0x26428:cǐ 0x26430:chài 0x26433:hōng 0x26438:pǎo 0x26439:shēn 0x2643A:xiāo 0x2643D:xuān,líng 0x2643E:cǐ 0x2643F:tíng 0x26440:pò 0x26447:tà 0x26448:chā 0x2644B:zú 0x2644C:huò 0x2644D:xù 0x2644E:yàn 0x2644F:chài 0x26451:tuó 0x26458:xián 0x26459:xuān 0x2645A:hóu 0x2645B:huǎn 0x2645C:gé 0x2645D:chǒng 0x2645E:bì 0x2645F:hōng 0x26460:hōng 0x26461:chí,chī 0x26463:chá 0x2646F:zhǎ 0x26471:zhái,huò 0x26472:tà 0x26475:pò 0x26476:tà 0x26478:yóu 0x26479:fú 0x2647A:cī 0x2647B:dá 0x2647C:tǎ 0x2647E:liú 0x26481:cī 0x26483:hōng 0x26485:hàn 0x26486:lā 0x26488:shī 0x2648D:tóng 0x2648E:huì 0x2648F:hé 0x26490:piē 0x26491:yù 0x2649C:xiān 0x2649D:hǎn 0x2649F:pò 0x264A6:là 0x264A7:huò 0x264B0:tài 0x264B4:lǎo 0x264B6:shù 0x264BA:dào 0x264BB:diǎn 0x264C8:xiòng 0x264CB:wàng 0x264CD:chě 0x264CE:nài 0x264D0:jué 0x264D3:ér,liè 0x264D4:ér,xū 0x264D5:nǘ 0x264D6:nǜ 0x264DD:zhuǎn 0x264E2:nuò 0x264E4:liè 0x264E5:lěi 0x264E7:bā 0x264EC:chēng 0x264EF:guī 0x264F0:quán 0x264F1:gè 0x264F3:gǒng 0x264F4:shào,shāo 0x264F9:lái 0x264FA:zhēng 0x264FB:yì 0x264FC:gǔn 0x264FD:wēi 0x264FE:lǔn,kǔn 0x26502:shí 0x26503:yīng 0x26504:shěng 0x26505:tú 0x26506:bì 0x26508:zé 0x26509:zhòng 0x2650B:rǒng 0x2650C:qí,sí 0x2650D:fù 0x2650E:cè 0x26513:lí 0x26514:mán,màn 0x26516:lián 0x26517:biāo 0x2651B:chuáng 0x2651C:yì 0x26520:pài 0x26525:yì,shì 0x26526:kuài 0x26529:biāo,pāo 0x2652B:chì,yì 0x2652C:qú 0x2652D:mò 0x2652E:zhé 0x2652F:shà 0x26530:shà,xū 0x26537:yāo 0x26538:gōng 0x26539:nài 0x2653C:xiè 0x2653F:tiàn 0x26546:yé 0x26549:shā 0x2654F:sào 0x26552:diān 0x26553:xù 0x26559:qú 0x26560:hōng 0x26561:shèng 0x26562:tìng 0x26570:duo 0x26575:liáo 0x26577:hòng 0x26578:lǐ 0x2657A:xiǎng,gāo 0x2657D:shèn 0x26580:fū 0x26588:yǎn 0x26589:wǎng 0x2658A:qī 0x2658B:duǒ 0x2658D:huà 0x2658E:qiān 0x26590:xiè 0x2659D:cì 0x2659E:shēng,wén 0x265A2:èr 0x265A4:xīng 0x265A6:tuì 0x265A7:yàn 0x265A9:liè 0x265AC:mí 0x265B8:zòng 0x265BA:zī 0x265BC:hú 0x265BD:yíng 0x265BE:lián 0x265BF:dā 0x265C0:tián 0x265C1:tiàn 0x265CB:róng 0x265CD:ài 0x265D0:ài 0x265D1:zhé 0x265D2:guō 0x265D3:lù 0x265D4:zhāo 0x265D5:mí 0x265D6:liáo 0x265D7:zhé 0x265DB:qǔ 0x265DC:cōng 0x265DF:tīng,tè 0x265E1:tán 0x265E2:zhǎn 0x265E3:hú 0x265E5:piē 0x265E7:dā 0x265E8:róng 0x265EE:nǎo 0x265F3:náng 0x265F4:dāng 0x265F5:jiǎo 0x265FB:jù 0x265FC:ěr 0x2660A:lì 0x2660C:guō 0x2660D:wài,wà 0x26612:niè 0x26614:jīn 0x26629:pǐ 0x2662A:chì 0x26632:pǐ 0x26633:yì 0x26634:dū 0x26635:wǎ 0x26636:xūn 0x26638:qì 0x26639:shàn,yuè 0x2663C:xū 0x2663F:hē 0x26640:pàn 0x26642:pēi 0x26644:xiōng 0x26646:chǐ 0x26647:tān 0x26648:zuì,cuì 0x26649:zuǎn 0x2664A:qì 0x2664B:dū 0x26659:shuǐ 0x2665C:nǎ 0x2665D:xī 0x26667:chǎo 0x26668:yì 0x2666B:zhēng 0x2666E:jú 0x2666F:dài 0x26671:sān 0x26674:zhù 0x26675:wàn 0x26676:gǔ 0x26678:sān 0x26679:bàn 0x2667A:jià,jiā 0x2667B:mài 0x26688:tuò,dù 0x2668A:qì 0x2668F:zhuāng 0x26690:tuó 0x26693:píng 0x2669D:pēng 0x2669E:kuāng,kuàng 0x2669F:yí 0x266A1:xiè,mài 0x266A2:yuē 0x266A3:hén 0x266A5:hóu,yóu 0x266A6:zhēng 0x266A7:chǔn 0x266A8:shì 0x266A9:wǎ 0x266AB:xié 0x266B8:gèng 0x266C5:è 0x266CF:kú 0x266D0:nà 0x266D3:jū 0x266D4:xuàn 0x266D5:qū 0x266D6:chè 0x266D7:lǚ 0x266D8:hé 0x266D9:shèng 0x266DA:nàn 0x266DC:hé,hán 0x266DD:chá 0x266DE:yān 0x266DF:gěng 0x266E0:niè 0x266E2:guó 0x266E3:yán 0x266E4:guǎn 0x266E7:zhì 0x266E8:lao 0x266EF:dǔ 0x266F0:qì 0x266F1:qū 0x266F2:jué 0x26701:fēng 0x26703:xù 0x26704:tuì 0x26706:hán 0x26707:kū 0x2670A:shēn 0x2670B:zhì 0x2670D:pàng 0x2670E:zhēng 0x2670F:lì 0x26710:wǎn 0x26712:fǎn 0x26713:xìn 0x26716:yà 0x2671B:jū 0x2671C:shèn 0x2672D:mǎng 0x2672F:tǔn 0x26730:zhuó 0x26731:xī 0x26732:yìn 0x26733:jīng 0x26734:tún 0x26737:gèng 0x26738:jì 0x2674F:zhuǎn,shuàn 0x26752:tiē 0x26754:zhī 0x26756:jí 0x2675A:yíng 0x2675B:wèi 0x2675D:huàn 0x2675E:tíng 0x2675F:chán 0x26762:kuí 0x26763:qià,kē 0x26764:bàn 0x26765:chā,zhá 0x26766:tuǒ 0x26767:nǎn 0x26768:jiē 0x2676A:yān 0x2676C:tú 0x2676E:wěn 0x26770:cōng 0x26773:xù 0x26774:yìn 0x26777:bèng 0x2677C:lǘ 0x26781:zāi 0x26782:dā,da 0x26786:niè 0x26787:jǔ 0x26788:hóu 0x2678C:gèng 0x26795:hóu 0x26796:kān 0x26797:gōng 0x26799:huǐ 0x2679A:xiè 0x2679D:xì 0x2679E:hán 0x2679F:mí 0x267A1:wěng 0x267A2:hùn 0x267A3:sāo 0x267A4:xìn,zǐ 0x267A5:zhé 0x267A6:huò,hè 0x267A8:gōng 0x267AB:sài 0x267AC:jīn,jiàn 0x267AD:wā 0x267B1:duǐ 0x267B2:chī 0x267BD:xī,wèi,jí 0x267C2:mí 0x267C3:zāng 0x267C4:sǎng,sào 0x267D3:tún 0x267D4:zhì 0x267D5:wěn 0x267D8:yín 0x267D9:tǔn 0x267DB:chōng 0x267DC:zé 0x267DE:xiāo 0x267DF:mó 0x267E0:cù 0x267E3:biǎn 0x267E4:xiū 0x267E7:yí 0x267EE:huǎng 0x267F0:zhā 0x267F1:suō 0x267F2:hún 0x267F3:jù 0x26801:cù 0x26804:jī 0x26805:xún 0x26806:sǔn,zhuàn 0x26807:céng 0x26809:yì 0x2680E:biāo 0x26812:jué 0x26813:lì 0x26816:pào 0x2681B:zā 0x2681C:yè 0x2681E:bì 0x2681F:zhè 0x26820:zhè 0x26822:jiù 0x26823:zhé 0x26826:shù 0x2682A:xī 0x26837:xǔ 0x26838:nǎi 0x26839:xián 0x2683A:gǔn 0x2683B:wèi 0x2683E:jí 0x2683F:sà 0x26842:dǒng 0x26843:nuó,nié 0x26844:dù 0x26845:zhēng 0x26846:kū 0x26849:míng 0x26855:báo 0x26856:huì 0x26859:zōng 0x26868:sàn 0x2686A:tēng 0x2686B:yí 0x2686D:yù 0x26871:yào,shào 0x26872:nǐng 0x26874:chóu,zhǒu 0x26875:hùn 0x26877:duì 0x26879:qì 0x2687A:yǐng 0x2687B:bìng 0x2687C:níng 0x2687D:huáng 0x26886:yǐng 0x2688A:báo,bó 0x2688E:guàng 0x2688F:lěi 0x26890:zǔn 0x26899:chǎn,qiān,xiān 0x268A3:jiǎn 0x268A7:méng 0x268A9:xiào,sōu 0x268AF:xìn,xìng 0x268B1:lí 0x268BA:qiǎo 0x268BF:wěi,juǎn 0x268C0:nà,niè,zhé 0x268C2:pāng 0x268C4:léi 0x268C7:luó 0x268CB:luán 0x268CD:gēng 0x268CF:luán 0x268D2:qú 0x268D6:luó 0x268D8:náng 0x268DB:luó 0x268DC:yuè 0x268E2:shuì 0x268E5:mì 0x268E6:wáng 0x268E7:cè 0x268E8:jiān 0x268E9:wǎng 0x268EF:jiā 0x268F4:huán 0x268F8:liàn 0x268F9:zì 0x268FA:bái 0x268FB:shǒu,bǎi 0x268FE:wǎn 0x26902:shū 0x26907:guī 0x26908:xī 0x2690A:rú 0x2690B:yào 0x2690E:gāo 0x26915:yuè 0x26918:yōng 0x26919:wà 0x2691A:bó 0x2691F:xìn 0x26922:pì 0x26923:bó 0x26926:hài,hè,ài 0x26927:zhài 0x26928:wò 0x2692A:yè 0x2692B:bì,bí 0x2692C:hài 0x26938:chì 0x2693B:zhì 0x2693D:ní 0x26941:wú 0x26942:ǎi 0x26948:ǎi 0x26949:yǔ 0x2694A:chì 0x2694D:jìng 0x2694E:zhì 0x2694F:zhì 0x26950:zhì 0x26951:jú,jǔ,póu 0x26956:hán,xián 0x2695A:pīng 0x2695D:yǎo 0x26963:yóu 0x26964:pīng 0x26966:mò 0x2696C:zuò 0x2696D:pò 0x2696F:xué 0x26970:kuáng 0x26971:yì 0x26972:pò 0x2697B:zhuì 0x26983:ní 0x26984:qiǔ 0x26985:còu 0x2698C:yǎo 0x26991:fén 0x26995:xiá 0x26997:jiāng 0x26998:chā 0x2699B:xiào 0x2699C:chā 0x269A2:chéng 0x269A3:cuì 0x269A7:qióng,gǒng 0x269A9:yù 0x269AB:yú 0x269AF:wèn 0x269B1:chā 0x269B2:yǔ,yù 0x269B9:zuó 0x269BA:dǎo 0x269BD:juàn,fàn 0x269BE:dǎo 0x269BF:yīng 0x269C1:fěng 0x269C5:wèng 0x269C8:jìn 0x269C9:qì 0x269CB:qìn 0x269CD:kuò 0x269CF:tān 0x269D0:xiān 0x269D2:tiān 0x269D4:kuò 0x269D6:tiàn 0x269D8:hú 0x269D9:zhū 0x269DA:zhān 0x269DB:tà 0x269DD:tiān 0x269DE:tà 0x269DF:tà 0x269E0:huá 0x269E1:yǎn,tiàn 0x269E2:tiè 0x269E4:tiè 0x269E5:tà 0x269EC:huài 0x269EE:jiá 0x269EF:qì 0x269F1:tà 0x269F4:tān 0x269F5:huà 0x269F8:zhuàn 0x269F9:huā 0x269FC:lán 0x26A06:zūn 0x26A07:yì 0x26A08:fú 0x26A09:wù 0x26A0B:fú 0x26A0D:dīng 0x26A0E:tà 0x26A16:chào 0x26A19:rì 0x26A1A:quǎn 0x26A1C:gē 0x26A21:fú 0x26A22:dì 0x26A23:diāo 0x26A24:yǒng 0x26A26:jià 0x26A29:lóng 0x26A2C:yǒng 0x26A2D:pí 0x26A2F:huó 0x26A30:qióng 0x26A32:fán 0x26A33:wú 0x26A34:tóng 0x26A35:háng 0x26A38:tān 0x26A3E:hēng 0x26A44:tiāo 0x26A48:zhōu 0x26A4B:bài 0x26A4C:xiè 0x26A4D:dāo,diāo 0x26A4F:jīn,wéi 0x26A55:hū 0x26A56:bēi 0x26A58:dìng 0x26A5C:nuó 0x26A5D:wèi 0x26A5E:yú 0x26A60:xīng 0x26A61:fú 0x26A62:xiàn 0x26A63:qì 0x26A64:tū 0x26A67:jí 0x26A69:yìng 0x26A6B:dèng,téng 0x26A6C:wēi 0x26A6D:xī 0x26A6F:pái 0x26A71:shéng 0x26A72:yǒu 0x26A74:ái 0x26A75:jiàn 0x26A77:gōu 0x26A78:ruò 0x26A7C:gòng 0x26A7F:shà 0x26A80:táng 0x26A87:lù 0x26A88:áo 0x26A8A:qì 0x26A8B:xiū 0x26A8D:dāi 0x26A91:fá 0x26A92:wèi 0x26A94:dùn 0x26A95:liáo 0x26A96:fān 0x26A97:huáng,héng 0x26A98:jué 0x26A99:tà 0x26A9A:zùn 0x26A9B:ráo 0x26A9C:cān 0x26A9D:téng 0x26AA0:huà 0x26AA1:xū 0x26AA3:zhān 0x26AA7:gǎn 0x26AAA:péng 0x26AAB:cān 0x26AAC:xiē 0x26AAD:dá 0x26AB1:jì 0x26AB6:lǐ 0x26AB9:pán 0x26ABD:lóng,lǒng 0x26ABE:lì 0x26ABF:xí 0x26AC0:téng 0x26AC3:líng 0x26AC8:lǐ 0x26AC9:rán 0x26ACA:líng 0x26ACE:gǔn 0x26AD4:pō 0x26AD5:mò 0x26AD6:pāi 0x26AD9:bà 0x26AE1:qí 0x26AE4:yán 0x26AEA:wà 0x26AEB:ǎng 0x26AED:mìng 0x26AEE:mǐn 0x26AEF:xùn 0x26AF0:méng 0x26AF3:guǎi 0x26AF6:jiāo 0x26AFB:gǎi 0x26B01:cái 0x26B02:wù 0x26B03:zhé 0x26B04:rěn 0x26B05:kōu 0x26B14:zhǎo 0x26B15:zhōng 0x26B16:qiú 0x26B17:guō 0x26B18:gōng,sōng 0x26B19:pū 0x26B1A:hù 0x26B1B:miǎn 0x26B1E:tiān 0x26B23:wǎng 0x26B38:zhú 0x26B39:dá,dàn 0x26B3A:xiòng,huǎng 0x26B3B:ná 0x26B3E:juān 0x26B41:niǎn 0x26B48:hù 0x26B49:shā 0x26B5C:zhī 0x26B5F:tā 0x26B61:sī 0x26B65:yì 0x26B6D:qióng 0x26B6E:zhì 0x26B6F:lǚ,lóu 0x26B70:rú 0x26B72:qí 0x26B73:yǔ 0x26B74:zhōu 0x26B75:yáng 0x26B76:xiǎn 0x26B77:móu 0x26B78:chóu 0x26B79:huī 0x26B7A:jiū 0x26B7B:jiù 0x26B7C:piǎo,bì 0x26B81:jiào 0x26B83:guāi,kuā 0x26B85:mò 0x26B90:xī 0x26B91:pú 0x26BAF:jì 0x26BB6:wěn 0x26BB7:bèi 0x26BB8:yǐ 0x26BB9:fú 0x26BBA:sī 0x26BBB:juān 0x26BBC:jì,qí 0x26BBE:nì 0x26BC0:bèn 0x26BC5:xù 0x26BC8:qǐn 0x26BC9:bó 0x26BCC:wáng 0x26BCD:zhè 0x26BCF:wò 0x26BD0:sháo 0x26BD1:zào 0x26BD2:yǎng 0x26BD5:sòng 0x26BD6:niè 0x26BDB:bì 0x26BE3:cú 0x26BE4:qiāng 0x26BEA:xiào 0x26BEB:zhī 0x26BEC:shé 0x26BEF:zhì 0x26BF0:pēng 0x26C0F:diào 0x26C16:wò 0x26C18:zhǐ 0x26C19:bì 0x26C1B:fén 0x26C21:nà 0x26C25:bāng 0x26C2A:qiú 0x26C2B:nǐ 0x26C2C:bó 0x26C2D:dùn 0x26C2F:shǐ 0x26C30:xū 0x26C31:cháng 0x26C32:xū 0x26C33:yé 0x26C34:mí 0x26C38:xīn 0x26C39:zhuó 0x26C3A:fù 0x26C3D:pǐ 0x26C3E:xuè 0x26C40:yù 0x26C41:xián 0x26C42:yù 0x26C43:yú 0x26C45:jū 0x26C46:tā 0x26C47:kōng 0x26C4A:zhēng 0x26C4B:méng 0x26C4C:gāng 0x26C52:mù 0x26C53:xǐ 0x26C54:bì 0x26C56:fù 0x26C5C:xiào 0x26C60:jiū 0x26C63:gǒu 0x26C70:chí 0x26C71:jiū 0x26C72:jiū 0x26C75:shā 0x26C77:fēi 0x26CAB:fú 0x26CAF:wàn 0x26CB0:xū 0x26CB1:bō 0x26CC1:hào,mào 0x26CC3:xié 0x26CC4:pián 0x26CC5:yǔ 0x26CC7:tián 0x26CC8:pí,bì 0x26CCA:shǐ 0x26CCB:kuǎi 0x26CCC:jī 0x26CCF:zhā 0x26CD0:nài,nà 0x26CD1:mǒu 0x26CD3:fú 0x26CD4:dù 0x26CD7:shěng 0x26CD8:chá 0x26CDA:chí 0x26CDB:guǐ 0x26CDC:mín 0x26CDD:tāng,dàng 0x26CDE:bài 0x26CDF:qiāng 0x26CE1:zhuó 0x26CE2:wèi 0x26CE3:xún 0x26CE5:miǎo 0x26CE6:zāi 0x26CE7:yóu 0x26CE9:yòu 0x26CEB:shān 0x26CEC:hé 0x26CED:lǚ 0x26CEE:zhí 0x26CF2:jìng 0x26CF3:zhēn 0x26CF6:méng 0x26CF7:yóu 0x26CF9:wò 0x26CFA:bá 0x26CFD:juàn 0x26CFE:rú 0x26CFF:còu 0x26D00:zhī 0x26D09:hú 0x26D0A:yāng 0x26D0C:jùn 0x26D0D:shé 0x26D0E:kòu 0x26D11:qián 0x26D14:méng 0x26D1A:tiáo 0x26D50:niè 0x26D5F:chí 0x26D61:xiōng,gōng 0x26D63:hùn 0x26D66:dí 0x26D67:láng 0x26D69:zāo,qiú 0x26D6A:cè 0x26D6B:suǒ 0x26D6C:zù 0x26D6D:suī 0x26D6F:xiá 0x26D71:xiè 0x26D74:jié 0x26D75:yóu 0x26D77:gòu 0x26D78:gěng 0x26D7C:jùn 0x26D7D:huǎng 0x26D7E:jí 0x26D7F:pōu 0x26D80:wū 0x26D82:yì 0x26D85:nǎi 0x26D87:rǒng,ruǎn 0x26D88:nán 0x26D8A:píng 0x26D8B:shàn 0x26D8C:diāo 0x26D8D:jí 0x26D8E:huā 0x26D8F:duì 0x26D90:kǒng 0x26D91:tà 0x26D93:hòng 0x26D95:shū 0x26D99:héng 0x26D9A:fěn 0x26DB2:kòu 0x26DD9:nián 0x26DDD:chú 0x26DE6:qiàng 0x26DF2:xì 0x26DF3:hú 0x26DF4:sòng 0x26DF5:wò 0x26DF7:hài 0x26DF8:rú 0x26DF9:méng 0x26DFB:sǎn 0x26DFD:wú 0x26DFF:yóu 0x26E01:tān 0x26E02:shēn 0x26E06:qǐ 0x26E08:guó 0x26E09:qià 0x26E0A:xiān 0x26E0F:suī 0x26E10:lù 0x26E13:qī 0x26E14:diāo 0x26E17:qí 0x26E18:jiá 0x26E19:yóu 0x26E1A:xí 0x26E1B:cháo 0x26E21:mì 0x26E22:lòu 0x26E23:bǐ 0x26E2A:péi 0x26E2E:zhēn 0x26E2F:shēn 0x26E30:chǎn 0x26E31:fù 0x26E36:qū 0x26E37:sī 0x26E3A:zuī 0x26E6B:zhào 0x26E7D:pí 0x26E80:còu 0x26E86:gāo 0x26E87:dú 0x26E89:fū 0x26E8A:guān 0x26E8B:sǎo 0x26E8C:sǒu 0x26E8D:jiǎn 0x26E8E:póu 0x26E90:cán 0x26E91:bèng 0x26E92:mòu 0x26E93:zhāo 0x26E94:xiáo 0x26E96:jú 0x26E97:shū 0x26E98:jiǎn 0x26E99:lí 0x26E9B:chuàn 0x26E9C:lào,láo 0x26E9E:hè 0x26E9F:hú 0x26EA0:gū 0x26EA1:zhǎng 0x26EA2:jié 0x26EA3:xiàng 0x26EA5:dū 0x26EA6:hán 0x26EA7:jiá 0x26EA8:xiàng 0x26EA9:jí 0x26EAA:shǔ 0x26EAB:làng 0x26EAC:jī 0x26EAD:shān 0x26EB0:tāo,tiáo 0x26EB1:zī 0x26EB2:shuàn 0x26EB4:jí 0x26EB5:chù 0x26EB6:jì 0x26EB7:shēn 0x26EB8:lìn,lín 0x26EB9:liáo 0x26EBB:sǎn 0x26EBD:ǎn 0x26EBE:ruǎn 0x26EC0:tí,tái 0x26EC1:dàn 0x26EC3:huán 0x26EC5:sà 0x26F06:ruí 0x26F07:wū 0x26F08:jù 0x26F09:huán 0x26F0A:léng 0x26F0B:lù 0x26F0E:tān 0x26F0F:zēng 0x26F13:qián 0x26F17:xī 0x26F21:cǐ 0x26F22:shé 0x26F27:sà 0x26F2A:mào 0x26F2B:qú 0x26F2D:bó 0x26F2E:gǎn,gàn 0x26F30:qiè,hé 0x26F31:juàn 0x26F32:dāng 0x26F33:cháng 0x26F34:yáng 0x26F35:hé 0x26F37:jī 0x26F39:bǐng 0x26F3B:méi 0x26F3F:dūn 0x26F40:ǎo 0x26F41:jīng 0x26F42:lù 0x26F43:miàn 0x26F44:diàn 0x26F45:hè 0x26F47:jiān 0x26F4A:huá 0x26F4B:gōu 0x26F4E:lù 0x26F4F:fú 0x26F50:huǐ 0x26F52:zéi 0x26F54:jìn 0x26F55:sī 0x26F56:qūn 0x26F5C:dàn 0x26F5E:wàn 0x26F5F:biǎn 0x26F64:jiá 0x26F6B:dǎn 0x26F6C:jiū 0x26F6D:xián 0x26F6E:bó 0x26F8F:xiá 0x26F91:biāo 0x26F95:pò 0x26F98:sǎo 0x26F99:bèi 0x26F9A:shà 0x26F9B:wěi 0x26F9D:cāng 0x26F9E:lù 0x26FA9:dàn 0x26FAB:gǔ 0x26FAC:zā 0x26FAD:bǎng 0x26FAE:gàn,gǎn 0x26FB1:chāo 0x26FB2:jì 0x26FB3:liē 0x26FB5:qióng 0x26FB6:jiàn 0x26FB7:lù 0x26FB8:duān 0x26FB9:suān 0x26FBA:yáo 0x26FBB:yǐn 0x26FBD:tà 0x26FBE:yáo 0x26FBF:jīng 0x26FC0:chú 0x26FC1:fú 0x26FC2:yuán 0x26FC3:shǎo 0x26FC5:bìng 0x26FC6:dàng 0x26FC7:shì 0x26FCA:lú 0x26FCB:qiè 0x26FCC:luó 0x26FCD:pò 0x26FCF:méng,mèng 0x26FD0:jié 0x26FD3:jī 0x26FD6:lù 0x27004:chàng 0x27005:miè,mò 0x27006:méng 0x27007:jiǎn 0x2700A:cǎi 0x2700C:sù 0x27014:hè 0x27015:sà 0x27017:zī 0x27018:kēng 0x27019:gěng 0x2701A:sī 0x27020:tí 0x27021:zhàn 0x27022:xiè 0x27023:shuí 0x27024:chǐ 0x27025:yōu 0x27026:lǔ 0x27027:mèng 0x27028:liè 0x27029:sì 0x2702C:xī 0x2702D:fán 0x2702E:fū 0x2702F:shěn 0x27030:tí 0x27031:chài 0x27032:yuè 0x27034:fū 0x27035:jiàn,shǎn 0x27036:dì 0x2703A:xié 0x2703B:dān 0x2703F:zhí 0x27043:xù 0x27048:niè 0x27049:fàn 0x2704A:méng 0x2704B:mǐn 0x2707E:lóu 0x2707F:dú,shǔ 0x27081:zhàn 0x27082:jiàn 0x27083:hàn 0x27084:dàn 0x27085:sēn 0x27086:jiàn 0x27087:tán,xún 0x27088:jiǎo 0x27089:pó 0x2708B:píng 0x2708D:zhuàn,sūn 0x2708F:liáo 0x27090:zì 0x27092:zhuó 0x27094:hù 0x27099:xì 0x2709B:méng 0x2709C:jù 0x2709D:miè 0x2709E:xián 0x270A0:kuì 0x270A1:méng 0x270A2:jiān 0x270A6:nóu 0x270A8:dì 0x270A9:sāo 0x270CF:chù 0x270D0:zhí 0x270D1:qián 0x270D2:lǚ 0x270D4:zhuó 0x270D8:zuò 0x270D9:hán 0x270DA:suǐ 0x270DB:gòu 0x270DD:chǒu 0x270DE:jì 0x270DF:yì 0x270E0:yú 0x270E8:nóu 0x270E9:nǐ 0x270EA:ruò 0x270EE:lín 0x270F1:níng 0x2710D:qiáo 0x2710E:yáo 0x2710F:fù 0x27110:shuāng 0x27111:kuì 0x27112:qú 0x27113:dǒng 0x27114:shǔ 0x2711A:lí 0x2711B:jú 0x2711C:ruǐ 0x27120:zhá 0x27124:xiāo 0x27138:mén,wěi 0x27139:shí 0x2713A:diān 0x2713B:lì 0x2713C:dèng,téng 0x2713D:zàn,zā 0x2713F:luó 0x27140:cán 0x27143:āo 0x27146:jiǎn 0x27148:diào 0x2714B:yíng 0x27156:yì 0x27157:dǎng 0x27158:nóu 0x2715A:yuè 0x2716E:lǐ 0x2716F:lí 0x27170:hù 0x27172:yòu 0x2717A:nàng 0x27182:chèn 0x27189:fēng 0x2718A:biē 0x2718F:mǎn 0x27190:gàn 0x27191:huò,suǐ 0x27193:cū 0x27195:yǒu 0x27198:yòu 0x2719C:xū 0x271A1:xù 0x271A2:hǔ 0x271A3:lú 0x271A5:xiá 0x271A6:yì 0x271AE:hǔ 0x271AF:hù 0x271B0:zǐ 0x271B7:gōng 0x271B8:tuī 0x271B9:wū 0x271BA:líng 0x271BB:gū 0x271BC:zhōng,dōng 0x271C4:lú 0x271C8:zù 0x271CC:tóng 0x271CD:xiā 0x271CE:hé 0x271D3:yuè 0x271D9:nán 0x271DA:bó 0x271DB:hū 0x271DC:qì 0x271DD:shú 0x271DE:qiāng 0x271DF:zhōu 0x271E0:yào 0x271E1:gū 0x271E5:bān 0x271E6:kǎn 0x271EE:hé 0x271EF:jì 0x271F0:hú 0x271F1:yán 0x271F6:chūn 0x271F7:dǐng 0x271F8:qiū 0x271F9:hóu 0x271FC:hào 0x271FF:zù 0x27201:xián 0x27204:xià 0x27205:xì 0x27208:sè,xì 0x2720C:gé 0x2720D:xì 0x27211:gé 0x27214:lǚ 0x27216:gé 0x27217:kè 0x27219:shòu 0x2721A:zhù 0x2721C:téng 0x2721D:yà 0x2721E:nì 0x27226:luò 0x27227:suī,méng 0x2722A:chǎn 0x2722D:wù 0x2722F:yū 0x27239:zǎo 0x2723B:yì 0x2723C:xī,jí 0x2723D:hóng 0x2723E:quán 0x2723F:wǎng 0x27240:chǐ 0x27241:xì 0x27242:tiǎn 0x27243:yǔn 0x27245:yī 0x27246:jí 0x27247:huī 0x27248:fóu,fú 0x2724A:fǔ 0x2724D:jí 0x2724E:xuán 0x27251:tài 0x27253:dù 0x27257:yuán 0x2725B:dì 0x2725E:zhǔ 0x2725F:tāi 0x27261:rǒng 0x27262:xué 0x27263:yù 0x27264:fàn 0x27265:běi 0x27267:qǔ,jié 0x27269:bù 0x2726A:jiā 0x2726B:zhá 0x2726D:nǔ 0x2726E:shé,yán,yí 0x27272:lì 0x27284:guǐ 0x27285:guǎi 0x27287:dài,dé 0x2728F:gāi 0x27292:cì 0x27294:yǎn 0x27295:sōng 0x27296:shì 0x27298:kù 0x27299:zhǐ 0x2729A:tóng 0x2729B:qú 0x2729C:è 0x2729E:xíng 0x2729F:rú 0x272A0:yú,shū 0x272A3:yì 0x272A4:yì 0x272A5:xù 0x272A6:fǒu 0x272A7:gé,è 0x272AC:hé 0x272AD:yīn 0x272AF:hòng 0x272B1:duǒ 0x272BD:xíng 0x272BE:fán 0x272C9:qī 0x272CA:shā,shuō 0x272CC:dù 0x272CD:dì,xué 0x272CE:lí 0x272CF:yì 0x272D0:xí 0x272D1:gěng 0x272D2:tóng,shì 0x272D3:kào 0x272D4:hòng 0x272D5:kùn 0x272D6:niè 0x272D7:chí 0x272D8:tí 0x272DA:tóng 0x272E0:lí,lǐ 0x272E1:nà 0x272F1:zhān 0x272F2:běi 0x27301:tiáo 0x27303:zā 0x27304:è,yè 0x27305:shòu 0x27306:kōng 0x27307:péng 0x27308:fù 0x27309:lù 0x2730A:xiè 0x2730B:xiè 0x2730C:xiū 0x2730D:lù 0x2730E:tiǎn 0x2730F:tà 0x27310:cì 0x27311:qū 0x27313:fù 0x27314:zhī 0x27316:xiè,shè 0x27317:zǒu 0x27318:fèi 0x27319:mín 0x2731A:xīng 0x2731D:tóng 0x2731E:qí 0x27320:piāo 0x27322:suì 0x27323:ěr 0x27327:hǔ 0x2733B:sōng 0x2733D:biē 0x2733E:dīng 0x2733F:bǎn 0x27340:shī,lǐ 0x27341:xiè 0x27342:xiáo 0x27343:fěi 0x27352:chuǎn,chuǎi 0x27353:shuài 0x27354:yāo 0x27355:jué 0x27356:shěng,nìng 0x27358:yōu 0x27359:fàn 0x2735C:kuí 0x2735D:dì 0x2735F:máo 0x27360:jié 0x27362:yán,yǐn 0x27365:wēi 0x27368:sāng 0x27369:jié 0x2736A:yú 0x2736B:wèi 0x2736C:è 0x2736D:quán 0x2736E:jiǒng 0x2736F:féng 0x27370:lóng 0x27371:dié 0x27372:pián 0x27374:liàn 0x27375:hú 0x27376:lǜ 0x2737F:diàn 0x27383:cuì 0x27384:móu,wù 0x27395:wáng 0x27396:juān 0x27397:kē 0x27398:yán 0x27399:jiǎo 0x273A1:gōng 0x273A3:róng 0x273A4:sūn 0x273A5:shàn 0x273A8:chí 0x273AA:qí 0x273AB:suǒ 0x273AD:yè 0x273AE:zǎo 0x273AF:quē 0x273B0:zhǎn 0x273B1:bā 0x273B2:zú 0x273B3:suǒ 0x273B4:zhé 0x273B5:xì 0x273B7:chǔ 0x273B8:jiǎo 0x273B9:zuì 0x273BA:gē 0x273BB:wù,móu 0x273BE:lüè 0x273BF:jí 0x273C2:xié 0x273C3:xié 0x273C6:dǒu 0x273CB:qiū 0x273D1:píng 0x273D3:liú 0x273E5:jié 0x273E7:huì 0x273EB:shà 0x273F8:zhí 0x273F9:ài 0x273FA:xù,òu 0x273FB:bì 0x273FD:yē 0x273FE:nì 0x273FF:zhú 0x27401:sù 0x27403:xié 0x27404:yù,yú 0x27405:qū 0x27408:zú 0x27409:zhī 0x2740A:zhāng 0x2740B:lüè 0x2740C:wěi 0x2740D:chōng 0x2740E:mì 0x27410:jī 0x27412:sù 0x27413:yě 0x27414:xí,yì 0x27415:tuán 0x27416:lián,liàn 0x27417:xuán 0x27419:wù 0x2741F:máo 0x2742C:hóng 0x2742F:lüè 0x27430:dú 0x27431:cóng 0x27432:chán 0x27433:lù 0x27434:sù 0x27440:lüè 0x27446:zhōng 0x27447:lí 0x27448:fèi 0x2744A:jǐng 0x2744B:kuì 0x2744C:yì 0x2744D:huá 0x2744E:cuì 0x27450:yù 0x27451:běng 0x27452:tūn 0x27453:shǔ 0x27454:dài 0x27455:wū 0x27456:cì 0x27457:nìng 0x27458:dàng 0x27459:zú 0x2745A:hán 0x2745C:pí 0x2745D:chuàn 0x27460:dù 0x27461:pá 0x27464:zhū 0x27466:xié 0x27467:zhé 0x27468:qiè 0x27469:xuān 0x2746B:sào 0x27480:bì 0x27482:fù 0x27488:lì 0x2748E:é 0x27490:yē 0x27491:shǔ 0x27493:sè 0x27495:qī 0x27496:guò 0x27497:sè 0x27499:fù 0x2749A:máo 0x2749C:léi 0x2749D:zhān 0x274A8:chài 0x274AD:wèi 0x274BD:léi 0x274BF:zéi 0x274C0:yīng 0x274C1:ài 0x274C2:xiē 0x274C4:bì 0x274CB:chán 0x274CE:pí,bī 0x274CF:cóng 0x274D0:liè 0x274D1:qí 0x274D3:jì 0x274D4:jīng 0x274D5:dōng 0x274D6:féi 0x274D7:yí 0x274D8:tuán 0x274E8:měng 0x274E9:cán 0x274EA:yá 0x274F2:yǎng 0x274F4:tíng 0x274F8:zhí 0x274FA:xiè 0x274FB:lǜ 0x274FD:lì,chài 0x274FF:máo 0x27502:xiá 0x27505:sòu 0x27516:sū 0x27517:xuè 0x2751D:lì 0x2751E:yuán 0x27521:zhǎn 0x27523:tà 0x27524:xuán 0x27525:wèi 0x27526:yè 0x27527:páng 0x27528:máo 0x27529:tí 0x2752A:pín 0x2752C:dù 0x2752D:qiú 0x2752E:yǐ 0x27533:tuó 0x27534:chài 0x27537:jìn 0x2753C:é 0x27543:chán 0x27544:yīng 0x27545:líng 0x27547:xiǎn 0x27549:qī 0x2754B:yuè 0x2754C:lüè 0x2754D:yíng 0x2754E:qú 0x27552:fěi 0x27553:zī 0x27559:qīng 0x2755D:níng 0x2755E:wèi 0x2755F:shuāng 0x27561:fù 0x27564:mò 0x27565:mò 0x27566:tuó 0x27567:chài 0x27568:zàng 0x2756E:lí 0x2756F:lí,shī 0x27571:xiá 0x27572:juǎn 0x27574:nán 0x27575:mì 0x27578:huáng 0x2757A:shuāng 0x2757C:xǔ 0x2757F:fěi 0x27581:xiè,wén 0x27586:tà 0x27587:yǒng 0x27589:zhǎn 0x27591:qiáng 0x27592:náng 0x27594:lìn 0x27598:luán 0x27599:xiǎn 0x2759A:fú 0x2759C:líng 0x275A0:sāo 0x275A2:huì 0x275A8:tíng 0x275AA:qíng 0x275AC:huāng 0x275AE:àn 0x275B5:mǎn 0x275B7:nì,nǜ 0x275BB:guó 0x275BC:ǒu 0x275BF:xiàng 0x275C1:jīn 0x275C6:zhēng 0x275C8:nú 0x275CB:sàn 0x275CC:hù 0x275CE:zú 0x275CF:huǐ 0x275D2:jī 0x275D6:yè 0x275E6:xíng 0x275E9:là 0x275EA:yù,qú 0x275EB:jué 0x275F1:shù,yù 0x275F2:zhēng 0x275F4:yǒng 0x275F6:gē 0x275F8:jiàn 0x275F9:xìn,xiān 0x275FC:huī 0x275FF:shuài 0x27602:chōng 0x27603:háng 0x27608:liǎo 0x2760D:jiāng 0x2760F:gōng 0x27611:zhuó,bào 0x27617:qǐ 0x2761C:qiān 0x2761E:dǒu 0x2761F:pō,bō 0x27622:hù 0x27625:niǔ 0x27627:qì 0x27628:diāo 0x27629:diāo 0x2762B:lì 0x2762E:xiōng 0x2763D:ná 0x2763F:zhēng 0x27640:là 0x27641:zhì,zī,jì,pī 0x27643:ě 0x27644:bō 0x27645:pō 0x27646:xū 0x27647:yòng,dǎn 0x27648:cí 0x27649:lì 0x2764C:páo 0x2764F:xiù,yǒu 0x2765B:pù 0x2765D:ché 0x2765E:qì 0x27661:yì 0x27663:tí 0x27664:duǒ 0x27665:lóng,tǒng 0x27667:jiàn 0x2766D:zhàn 0x2766E:yuàn 0x27676:yú 0x27678:gēng 0x2767A:hòu 0x2767E:qǐ 0x27680:mù 0x27681:huàn 0x27682:lòng 0x27683:xì 0x27684:é 0x27685:lǎng 0x27686:fèi 0x27687:wǎn,wèn 0x27689:cūn 0x2768B:péng 0x2768F:cuò 0x27690:wēng 0x276A1:gǎo 0x276A5:cuì 0x276A8:qì,shà,qiè 0x276A9:lí 0x276AA:qiè 0x276AB:qiàn,jīng 0x276AC:kōng 0x276AD:běng 0x276AF:shòu 0x276B7:wēi 0x276C4:shān 0x276CF:zī 0x276D2:tì 0x276D3:qiān 0x276D4:dú 0x276D7:tú 0x276DA:wēi 0x276DE:hú 0x276DF:xīng 0x276E1:shān 0x276E2:zhǐ 0x276E7:chǐ 0x276F8:zhòu 0x276F9:wēng 0x276FA:chí 0x276FB:suǒ 0x276FC:xiè 0x276FE:kè 0x27701:shài,shā,shǎi 0x27702:shī 0x27703:shòu 0x27705:jiè 0x27709:gǎo 0x2770A:lǚ 0x27714:xiè 0x2771A:zhǐ 0x2771E:mán,màn 0x27720:shuài 0x27721:kè 0x27723:diǎo 0x27724:yī 0x27726:sù 0x27727:chuāng 0x27731:cuì 0x27732:tuò 0x27735:xiè 0x2773D:xuán 0x27742:hè 0x27743:jué 0x27746:tì 0x27747:fèi 0x27749:zhǐ 0x2774A:shì 0x2774B:tuí 0x2774E:chōng,chuáng,chóng 0x27750:tì 0x27751:zhàn 0x27752:héng 0x27754:qú 0x27755:wéi 0x27757:dūn 0x27758:bào 0x2775C:liáo 0x27764:sī 0x2776A:biǎo 0x2776B:xiè 0x2776C:bié,bì 0x2776E:cǒng 0x27772:jù 0x27773:hé 0x27777:kuì 0x27778:yōng 0x27780:shù 0x2778D:niè 0x2778F:yú 0x27790:zhuó 0x27791:méng 0x27792:hú 0x27795:liè 0x2779D:jiē 0x2779E:xióng 0x277A3:yǎn 0x277A9:jié 0x277AA:là,lié 0x277AB:shù 0x277AC:jié 0x277AD:léi 0x277B0:zú 0x277B2:shì 0x277B8:wéi,suì 0x277B9:dū 0x277BA:sù 0x277C3:xié 0x277C4:ráng 0x277CC:luò 0x277D1:qiān 0x277D8:nàng 0x277D9:líng 0x277DC:jì 0x277E0:mìng 0x277E3:gǔ 0x277E8:xuán 0x277EC:xū 0x277F1:bó 0x277FC:wēi 0x27802:kū 0x27806:wǎn 0x27808:chà 0x2780A:mào 0x2780B:kè 0x2780E:cì 0x27812:xiàn 0x27813:mò 0x2781A:hūn 0x2781B:chàn 0x2781C:shī 0x2781D:zhěn 0x2781E:è 0x2781F:mí 0x27821:shī 0x27822:qū 0x27823:shū 0x27825:cī 0x27826:yǎn 0x27829:hū 0x2782A:qī 0x2782B:zhì,dí,chì 0x2782C:huāng 0x27834:zhǐ 0x27836:yǒu 0x2783C:gào 0x2783D:yǎo 0x2783E:pōu 0x27847:yí 0x27848:chèng 0x27849:jì 0x2784B:ǎi,yá 0x2784D:dòng 0x2784F:suì 0x27851:jiù 0x27858:qì,qīn 0x27859:lián 0x2785A:xuǎn 0x2785C:liǎo 0x27861:yùn 0x27862:xuǎn 0x27863:cóu 0x27864:piān 0x27866:kuí 0x27868:tí 0x27869:huǎn 0x2786A:dān,dàn 0x2786B:guì,kuì 0x2786C:chēn 0x2786E:shǎng 0x2786F:jì 0x27874:liàn 0x27875:kān 0x27876:shèng 0x27878:dōu 0x27879:yóu 0x2787A:qí 0x2787C:xiǎo 0x27882:yì 0x27883:lóu 0x27886:chuāng 0x2788B:lào 0x2788C:gāo 0x27890:zēng 0x27892:wéi,wěi 0x27896:jiān 0x2789B:yīng 0x2789C:fán 0x2789D:lì 0x2789E:qiān 0x278A2:yào 0x278A6:kuī,kuí,guì 0x278A7:wéi 0x278A9:què 0x278AC:xiǎo 0x278AD:què 0x278B0:hū 0x278B5:duō 0x278B6:chù 0x278B9:shēn,jīn 0x278BC:zhuó 0x278BD:é 0x278BE:jì 0x278C1:tán 0x278C3:pā 0x278CB:jiè 0x278CC:qiào 0x278D1:qián 0x278D2:jù 0x278D5:qiú 0x278D6:tuó 0x278DA:nuò 0x278DB:sì 0x278DF:yí 0x278E1:gǔ 0x278E2:hùn 0x278E3:pá 0x278E4:zī 0x278E6:jiāo 0x278E9:xǐ 0x278EA:shǎo,shào 0x278EC:yí 0x278ED:zhì 0x278F5:lùn 0x278F7:zhōu 0x278F8:jué 0x278F9:tán 0x278FA:nuò,chuò 0x278FB:jù 0x278FC:hú 0x278FE:zhì 0x27903:bī 0x2790D:chì,tì 0x2790E:xuān 0x2790F:jí 0x27910:guǎ 0x27911:jú 0x27912:wò 0x27913:tuó 0x27915:qiú 0x27916:wēi 0x27917:duān 0x27919:shòu 0x2791B:zhěn 0x2791C:nè,lì 0x2791F:xì 0x27920:zhé 0x27921:zhì 0x27923:ná 0x27928:jiān 0x2792E:yáo 0x2792F:guó,yuè 0x27932:dǐ 0x27934:huò 0x27935:jīng 0x2793C:jué 0x2793D:yuè,jiàn 0x27944:jí 0x27946:sù 0x27948:jiān 0x2794A:kūn 0x2794B:wò 0x2794C:kuàng 0x2794D:biāo 0x2794E:jué 0x27951:bì 0x27953:chán 0x27955:zī 0x27956:lí,shǐ 0x2795A:fó 0x2795B:qiǎn 0x2795C:yǎn 0x2795E:tàn 0x2795F:mò 0x27963:kòu 0x27964:xī,xiē 0x2796E:hù,dǐ 0x2796F:hù 0x27971:fú 0x27974:yàng 0x27975:guò 0x27977:rén 0x27978:yìn 0x27979:fēng 0x2797A:jùn,yùn 0x2797C:yún 0x2797F:xùn 0x27981:xì 0x2798E:xiā 0x27991:háng 0x2799A:hù,dǐ 0x2799D:hū,hào 0x2799E:pù 0x2799F:fān 0x279A4:jiā 0x279A7:yí,tuō 0x279AD:tuō,xī 0x279AE:ná 0x279B8:yín 0x279B9:yìn 0x279C3:jì 0x279C4:wàng 0x279C5:shì,jiàn 0x279C6:duī 0x279C7:duò 0x279C9:tuó 0x279CA:wā 0x279CB:lì 0x279CF:rè,rě 0x279D2:cì 0x279D3:xù 0x279D4:zhōu 0x279D5:zì 0x279DC:wǎng 0x279DD:yǎ 0x279DF:jì 0x279E0:chǎo 0x279E9:jí 0x279F5:shǎn 0x279F6:tú 0x279F8:bié 0x279F9:xì 0x279FA:pī 0x279FB:zhà 0x279FE:huì 0x27A00:suō,zuò 0x27A02:hè 0x27A04:yuē 0x27A06:wū,huǎng 0x27A08:líng,wū 0x27A0A:zhà 0x27A0B:huá 0x27A17:chán 0x27A1F:è 0x27A21:chén 0x27A27:suì 0x27A29:tiǎn 0x27A30:zhì 0x27A31:tì 0x27A32:āo 0x27A33:zhuó 0x27A34:zì 0x27A35:kē 0x27A37:sè 0x27A38:tián 0x27A39:lù 0x27A3E:shán 0x27A3F:zhǎ 0x27A43:chōng 0x27A45:yàn 0x27A52:mǔ 0x27A53:hū 0x27A5A:chī 0x27A5D:sù 0x27A63:nǎo 0x27A66:jí 0x27A67:duó 0x27A68:hòu 0x27A6A:còng 0x27A6B:zhā,chà 0x27A6C:yín 0x27A6E:xiǎo,sǒu,sòu 0x27A70:biàn 0x27A71:bèng 0x27A72:là 0x27A74:chī,chì 0x27A76:qià 0x27A78:ān 0x27A79:shī,yǐ 0x27A7C:chì,zhǐ 0x27A85:nù 0x27A87:jì 0x27A93:ǒu 0x27A95:xiā 0x27A98:chài,cuǒ,jiē 0x27A9A:ái 0x27A9D:shèng 0x27A9E:hé,gé 0x27AA0:jí 0x27AA1:chī 0x27AA2:xì 0x27AA3:zhēng 0x27AA6:tā 0x27AA8:mà 0x27AAB:pī 0x27AAE:xū,huá 0x27AAF:qiǎn 0x27AB9:xià 0x27ACA:yù 0x27AD1:jié 0x27AD2:xià 0x27AD3:lǔ 0x27AD5:qiè 0x27AD7:chà 0x27ADB:yàng 0x27ADC:jì 0x27ADD:shǎ 0x27ADE:lòu 0x27AE0:jī 0x27AE1:zhì 0x27AE2:wàng 0x27AE4:bì 0x27AE5:ān 0x27AE6:yī 0x27AE7:ān,àn 0x27AEC:lí 0x27AF9:xiān 0x27AFE:jiù 0x27AFF:tǎn 0x27B01:hào 0x27B02:hè 0x27B05:zhā 0x27B06:zhǎn 0x27B07:yì 0x27B08:xì 0x27B0A:xì,sí 0x27B0B:fà 0x27B0C:yán 0x27B0F:mǔ 0x27B15:gū 0x27B1E:yún 0x27B24:zhòng 0x27B26:chǎn 0x27B27:chuáng 0x27B28:huì 0x27B29:zá 0x27B2A:gùn 0x27B2B:jiǎn 0x27B2C:yá 0x27B30:xiàng,xiǎng 0x27B31:hè 0x27B43:dàn 0x27B47:mián 0x27B48:níng,nìng 0x27B4A:méng 0x27B4C:liè 0x27B4D:zhòu 0x27B4E:pū 0x27B4F:tāi 0x27B53:yíng 0x27B54:téng 0x27B55:guó 0x27B5A:qiáng 0x27B5C:lǜ 0x27B5D:sà 0x27B5E:liè 0x27B5F:chí 0x27B60:xiě 0x27B63:guó 0x27B64:bào,báo 0x27B65:luò 0x27B66:juàn,xuān 0x27B6A:è 0x27B73:hé 0x27B75:mèi 0x27B78:xiè 0x27B79:pín 0x27B7B:hān 0x27B7C:chèn 0x27B7D:shàn 0x27B7E:huì 0x27B86:yīng 0x27B88:jiǎn 0x27B8D:ān 0x27B91:tà 0x27B92:yī 0x27B93:tuí 0x27B97:liú 0x27B99:zuó 0x27B9B:lí 0x27B9D:pín 0x27B9E:xuè 0x27BA0:nèn 0x27BA1:dòu 0x27BA4:lǎn 0x27BAA:zhān 0x27BAB:jué 0x27BAC:zhēn,jué 0x27BAD:jí 0x27BAE:qiān 0x27BB0:hān 0x27BB1:fén 0x27BB3:hān 0x27BB4:hóng 0x27BB5:hé 0x27BB6:hóu 0x27BBA:zhàn 0x27BBB:chóu,xiāo 0x27BBC:tài 0x27BBD:qiàn 0x27BBF:shè 0x27BC0:yīng 0x27BC3:qīn 0x27BC6:huò 0x27BC8:xì 0x27BC9:hè 0x27BCA:xì 0x27BCB:xiā 0x27BCC:hāo 0x27BCD:lào 0x27BCF:lì 0x27BD2:chēng 0x27BD6:jùn 0x27BD7:xī 0x27BD8:hǎn 0x27BDE:dòu,dōu 0x27BE0:dōu 0x27BE1:wān,yuè 0x27BE4:dōu 0x27BE5:zài 0x27BE6:juàn 0x27BE8:lǒu 0x27BE9:chù 0x27BEB:zhēng 0x27BEF:qí 0x27BF0:kàn 0x27BF1:huò,yù 0x27BF2:lái 0x27BFA:gāi 0x27BFC:shòu 0x27BFE:dōng 0x27C03:lóu 0x27C04:tuān 0x27C07:yú 0x27C08:wù 0x27C0A:tián 0x27C12:guó 0x27C18:tán 0x27C19:qí 0x27C20:liè 0x27C21:lì 0x27C23:xūn 0x27C28:gèng 0x27C29:tīng 0x27C2A:hàn 0x27C2B:chù 0x27C2D:tún 0x27C2F:xióng 0x27C30:yóu 0x27C31:mò 0x27C32:chǐ 0x27C34:hǔ 0x27C35:dū,dú,zhuó 0x27C37:mǔ 0x27C39:nà 0x27C3B:líng 0x27C3F:ài 0x27C40:xiān 0x27C44:kǎn 0x27C45:sì 0x27C46:sān 0x27C4A:yì 0x27C4F:yì 0x27C50:xiào,xiāo 0x27C52:zhī,zhuō 0x27C53:dòu 0x27C58:mài 0x27C5C:lún 0x27C5D:jué,jùn 0x27C61:qiāng 0x27C62:líng 0x27C69:pián 0x27C6A:còu 0x27C6B:duò 0x27C6C:yǔ 0x27C70:zhuō 0x27C72:xì 0x27C73:huài 0x27C74:míng 0x27C75:táng 0x27C79:pū 0x27C7B:mì 0x27C7C:mán 0x27C7E:guāi 0x27C80:qiān 0x27C82:lín 0x27C83:mǐn 0x27C84:wěi 0x27C85:céng 0x27C87:hù 0x27C88:suí 0x27C8B:jù 0x27C8C:shà 0x27C8D:méng 0x27C97:wéi 0x27C98:xī 0x27C99:lìng 0x27C9C:bì 0x27C9D:wèi 0x27CA1:lì 0x27CA2:zhé 0x27CA4:yóng 0x27CA5:hú 0x27CA6:wán,hé 0x27CA7:bā 0x27CA8:jiān 0x27CAD:zuǒ 0x27CAE:zhǎn 0x27CAF:bō 0x27CB0:qiū,chū 0x27CB1:yāng 0x27CB4:dōng 0x27CB5:qú 0x27CBA:pí 0x27CBB:zhǎi 0x27CBE:shān 0x27CBF:gòu 0x27CC0:biào,nǎo 0x27CC1:yí 0x27CC2:fú 0x27CC4:xìn 0x27CC5:shì,shǐ 0x27CC6:tōng,tóng 0x27CC9:dīng 0x27CCC:tū 0x27CCD:xiāo 0x27CCE:wú 0x27CCF:péi 0x27CD0:huī,xī 0x27CD5:lái 0x27CD9:sì 0x27CDA:cuǐ 0x27CDB:shà 0x27CDC:zhǒu 0x27CDD:zhào 0x27CDE:wéi 0x27CDF:lái 0x27CE0:bì,bǐ 0x27CE3:dǒng 0x27CE6:nǎo 0x27CE7:xiē 0x27CE8:rǎo 0x27CE9:tuàn 0x27CEA:wèi 0x27CEB:yóu,jiū,qiú,yòu 0x27CEC:méi 0x27CED:yuán 0x27CEE:zhòng 0x27CF6:sōu 0x27CF8:gú 0x27CF9:shào 0x27CFB:zhǎo 0x27CFC:pí 0x27CFF:tōng 0x27D01:chī 0x27D02:péng 0x27D03:chán 0x27D04:yōng 0x27D05:shuǎng 0x27D07:wǔ 0x27D09:pí 0x27D0A:huàn 0x27D0C:fú 0x27D0E:biào 0x27D13:náo 0x27D15:biào 0x27D16:wèi 0x27D17:yōng 0x27D19:nǎo 0x27D1A:guài 0x27D20:lì 0x27D22:xìn 0x27D23:yán 0x27D24:pò 0x27D25:péi 0x27D2A:suǒ 0x27D2C:rèn 0x27D2D:shǎn 0x27D32:suǒ 0x27D38:dān 0x27D3A:mèn 0x27D43:shǒu 0x27D48:gòu 0x27D4A:hān,hàn,tàn 0x27D4B:shì 0x27D4C:yǎng 0x27D4E:gǔ 0x27D5B:kē 0x27D5E:jū 0x27D60:pài 0x27D61:cè 0x27D62:bāo 0x27D63:xiōng,mín 0x27D64:cái,zhù 0x27D67:lǐn 0x27D68:ài 0x27D6C:mì,shèn 0x27D6D:lǎi 0x27D71:xiāo 0x27D73:shé 0x27D7B:huó 0x27D7C:nì 0x27D84:zhèng 0x27D86:lìn 0x27D87:zhá 0x27D8A:yún 0x27D8D:xù 0x27D94:chéng 0x27D95:wǒ 0x27D96:xī 0x27D99:bèi 0x27D9C:shāng,shǎng 0x27DA0:yù 0x27DA1:mì 0x27DB2:duǎn,zhuàn 0x27DB5:chà 0x27DB7:zé 0x27DB8:chèng 0x27DBA:tíng 0x27DC5:yí 0x27DCB:yāo 0x27DCE:kū 0x27DD0:fén 0x27DD1:xié 0x27DD2:chèng 0x27DDB:kuì 0x27DDF:bīn 0x27DE1:lóu,lòu 0x27DE5:yì 0x27DE6:mì 0x27DE7:xiè 0x27DF1:guī 0x27DF3:luó 0x27DF6:shàn 0x27DFE:jú 0x27DFF:dū 0x27E02:xiān 0x27E05:zhǐ 0x27E08:bìn 0x27E15:zhǐ 0x27E16:zhuàn,lián 0x27E17:xué 0x27E18:liàn,biǎn,jiǎn 0x27E19:suì 0x27E26:làn 0x27E27:jù 0x27E28:mián 0x27E29:xùn 0x27E2A:zhàn 0x27E2B:gùn 0x27E32:zhì 0x27E3D:wèi 0x27E3E:quǎn,xuàn 0x27E3F:chài 0x27E48:réng 0x27E4A:yuè 0x27E4C:zī 0x27E50:luò 0x27E51:guì 0x27E53:chéng 0x27E55:jū 0x27E56:tiǎn 0x27E57:wàn 0x27E5B:zhī 0x27E5E:nǎn,niǎn 0x27E63:hān 0x27E68:xī 0x27E69:lín 0x27E6C:yān 0x27E6D:xù 0x27E72:hù 0x27E73:gàn 0x27E74:xù,huò 0x27E76:xì 0x27E7A:cuì 0x27E7D:xì 0x27E7E:hú 0x27E85:yān 0x27E8E:yì 0x27E8F:chí 0x27E90:jué 0x27E92:zú 0x27E9C:jiào 0x27E9D:yì 0x27E9F:tǎn 0x27EA0:chì 0x27EA1:bá 0x27EA2:tòu,yì 0x27EA3:zōng 0x27EA4:qiú,jū 0x27EA7:chì 0x27EA8:xǐ 0x27EB0:nì 0x27EB2:cū 0x27EB4:wǔ 0x27EB6:chù 0x27EB7:sū 0x27EB8:yóng 0x27EB9:jǔ 0x27EBA:bá 0x27EBC:cǐ 0x27EBD:dì 0x27EBE:pǎn 0x27EBF:chì,yì 0x27EC1:qiǔ 0x27EC3:yán,qù 0x27ECD:zhǎi 0x27ED2:xiàn 0x27ED3:bèng 0x27ED4:kuāng 0x27ED5:qì 0x27ED6:zhōu 0x27ED7:jú 0x27ED8:qiè 0x27ED9:mò,pò 0x27EDA:yuán 0x27EDC:guì,kuǐ 0x27EDD:zuī 0x27EE7:qiè 0x27EF0:hú,zào 0x27EF1:qiú 0x27EF2:hái,kuī 0x27EF3:fù 0x27EF4:làng 0x27EF5:shà 0x27EF6:xī 0x27EF7:bū 0x27EF8:shì 0x27EF9:yǒng 0x27EFA:guāng,kuāng 0x27EFC:niè 0x27EFF:hǒu 0x27F0A:mì 0x27F0E:è 0x27F0F:xián 0x27F10:yǔn,qūn 0x27F11:xù 0x27F12:qǐn 0x27F13:dōng 0x27F14:léng 0x27F15:qì 0x27F16:lán 0x27F17:fú 0x27F18:qǐ 0x27F19:chǒng 0x27F1C:cù 0x27F1F:mò 0x27F20:bēi 0x27F24:dào 0x27F28:jié,jué 0x27F29:chòng,dòng 0x27F2A:chì 0x27F2B:yù 0x27F2C:cuī 0x27F2D:sù,sōu,sǒu,qiù 0x27F2E:tì 0x27F2F:shù,yú 0x27F30:zhá 0x27F31:fú,bí 0x27F33:chè 0x27F34:fó,zhì 0x27F35:hóu 0x27F36:zhá 0x27F44:jié 0x27F45:zhá 0x27F46:zhān 0x27F49:yǎn 0x27F4A:hái 0x27F4B:wǔ 0x27F4C:huá 0x27F4D:diān,diàn 0x27F4E:yáo 0x27F4F:sōu 0x27F50:qiān 0x27F51:jí 0x27F52:xiòng 0x27F53:qì 0x27F54:jūn 0x27F56:hái 0x27F5E:yǎn 0x27F5F:jié 0x27F60:cuī 0x27F62:tuán 0x27F63:zhāng 0x27F64:piāo 0x27F65:lù 0x27F66:zhī 0x27F67:chù 0x27F68:mì 0x27F69:qiāng 0x27F6B:liàn 0x27F72:lì 0x27F76:é 0x27F77:sù 0x27F78:jué,guì 0x27F7B:jú 0x27F7C:tán 0x27F7D:liáo 0x27F7E:sān,cún 0x27F7F:dòng 0x27F81:zá 0x27F82:zhí 0x27F86:xuàn 0x27F87:líng 0x27F8A:dēng 0x27F8D:zhān,zhàn,chán 0x27F8E:xuān 0x27F8F:qǐn 0x27F90:jiào 0x27F91:pì 0x27F94:hǎn 0x27F9A:yú 0x27F9B:guó 0x27F9D:xún 0x27FA0:xún 0x27FA1:chán 0x27FA2:jié,jí 0x27FA3:jú 0x27FA4:yǎn 0x27FA5:dú 0x27FA7:hòng 0x27FA8:xiàn,xiǎn 0x27FA9:xún,xuàn 0x27FAE:líng 0x27FAF:jié 0x27FB0:yì 0x27FB1:qú 0x27FB2:gān 0x27FB3:fēng 0x27FB5:jué 0x27FB6:qū 0x27FBB:jiù 0x27FBD:jì 0x27FBE:jǐ 0x27FC5:xí 0x27FC6:pāng 0x27FC8:kuàng 0x27FC9:kù,wù 0x27FCB:kù 0x27FCC:zhà 0x27FCF:bà 0x27FD2:chěn 0x27FD3:hù 0x27FD4:nù 0x27FD5:é 0x27FD6:xiōng 0x27FD7:dǔn 0x27FD8:shēng 0x27FD9:wán 0x27FDA:fēn 0x27FDD:xī 0x27FDE:zī 0x27FE0:hù,dì 0x27FE5:bié 0x27FE7:tuò 0x27FE8:bǎn 0x27FE9:gé 0x27FEB:kē 0x27FF2:zhuì,bó 0x27FF3:fú,fèi 0x27FF4:mò 0x27FF5:jiá 0x27FF6:tuó 0x27FF7:yù 0x27FF9:mǔ 0x27FFA:jué 0x27FFB:jú 0x27FFC:guā 0x27FFD:pǒ 0x28000:nǐ,niǎn 0x28004:wǎ 0x28005:yǎn 0x28014:chǒu 0x28015:kuāng 0x28016:hài 0x28018:xiáng 0x28019:xī 0x2801B:cún 0x2801C:tōng 0x2801D:ruò 0x2801F:duó 0x28020:chè 0x28024:lèi 0x28025:zī 0x28027:zhěng 0x28028:zuǒ 0x2802B:kāng 0x2802C:zài 0x2802E:yuān,xuān 0x2802F:qióng 0x28033:fá 0x28034:xún 0x28036:jì 0x28038:chā 0x28040:shū,chōu 0x28041:xuàn 0x28042:xié 0x28043:tī 0x28044:hàn 0x28045:xiān 0x28046:shān 0x28047:tùn 0x28048:háng,gēng 0x28049:kǔn 0x2804A:cén 0x2804B:dōu 0x2804C:nuó 0x2804D:yàn 0x2804E:chéng,jìng 0x2804F:pū 0x28050:qì 0x28051:yuè 0x28052:fū 0x28057:tǐng 0x2805F:wǒ 0x28060:shēng 0x28061:tuǒ 0x28074:tǎn 0x28076:yǎ,yā 0x28077:zhì 0x28078:lù,lì 0x28079:yǎn 0x2807A:jū 0x2807D:dé 0x2807F:chù,zhuó 0x28080:zǔ 0x28081:è 0x28082:zhí,xuě 0x28083:péng 0x28085:biē 0x28087:dǐ 0x28090:lái 0x28092:yè 0x2809C:háo 0x2809D:pán 0x2809E:tàn 0x2809F:kāng 0x280A0:xū,lǚ 0x280A1:zòu 0x280A2:jí 0x280A3:wù 0x280A6:chuàn 0x280A9:pò 0x280AA:yǎn 0x280AB:tuò 0x280AD:dú 0x280AF:pián 0x280B0:chì 0x280B1:hùn 0x280B2:pīng 0x280B4:cōng 0x280B5:zhǎ 0x280BA:wān 0x280BF:wǎi 0x280C3:è 0x280C4:wèi 0x280C5:bāi 0x280C7:jiāng 0x280D3:chá 0x280D5:chù 0x280D6:kuà 0x280D7:téng 0x280D8:zōu,qū 0x280D9:lì 0x280DA:tà 0x280DB:sà 0x280DE:pán 0x280DF:pán 0x280E3:sào 0x280E4:qiāo,kào 0x280ED:zú 0x280EF:zhì 0x280F0:yǎn 0x280F2:jié 0x280F3:néng 0x28104:luán 0x28105:qū 0x28107:dèng,téng 0x28108:liáng 0x28109:chǎn 0x2810A:qiè 0x2810B:lòu 0x2810C:dié,xiè 0x2810D:cuī 0x28110:jǐ 0x28113:cháo 0x28114:shuàn 0x28115:zú 0x28117:kāng 0x2811A:qiāng 0x2811B:lí 0x2812E:shuāi 0x2812F:yù 0x28130:zhāng 0x28131:lěi 0x28145:pó 0x2814A:zhé,chè 0x2814B:xiào 0x2814D:tǎn 0x2814E:cuì 0x2814F:lán 0x28151:xū 0x28152:shù,chú 0x28153:zhǎ,dá 0x28154:cán 0x28157:bǐ 0x28158:pèng 0x2815D:chéng 0x28163:qiáo 0x28164:jī 0x2816A:zhāi 0x2816C:lán 0x28181:tiǎn,yǎn 0x28182:sà 0x28183:jīn 0x28184:zhù 0x28185:duò 0x28187:chà 0x28188:juàn 0x28189:táng 0x2818A:bèng 0x2818C:fán 0x2818D:liè 0x2818E:zéi 0x2818F:suì 0x28199:sè 0x281A7:zhì 0x281A8:tuí 0x281AA:qīng 0x281AC:chuò 0x281B0:tà,dà 0x281B1:bìng 0x281B2:wěn 0x281B5:pǒ 0x281BD:mó 0x281BE:cā 0x281C1:kuàng 0x281C3:cuó,zuān 0x281C4:rǎo 0x281C5:bào 0x281C6:lài 0x281CD:niǎn 0x281CE:lí 0x281D5:jiǎo 0x281D6:lú 0x281D7:lì 0x281D8:lóng 0x281D9:guì 0x281DD:chǎn 0x281E4:xiān 0x281E6:chàn 0x281E8:xiè 0x281E9:zhàn 0x281EF:shuāng 0x281FB:mǐ 0x281FC:luán 0x281FD:luò 0x28200:diān 0x28208:dié 0x2820A:wān 0x2820B:yuè 0x2820C:luán 0x2820E:luán 0x28213:léng 0x28215:wǎi 0x28216:dìn 0x28217:nèn 0x28218:shǎo 0x28219:xiè,zhī 0x2821A:pí 0x28225:máo 0x28227:yǐn 0x28229:bó 0x2822B:zhù 0x2822E:chōng 0x28236:mǔ 0x28237:tuó 0x28239:tǒng 0x2823A:yé 0x28241:huàng 0x28243:rèn 0x28245:yè 0x2824B:tuō 0x28256:zuān 0x28257:yù 0x2825A:ā 0x2825C:zhōu 0x2825D:wān 0x28261:duǒ 0x28262:zhòng 0x28263:hā 0x28264:huáng 0x28265:miàn,tǐ 0x28269:chūn 0x2826A:qiè 0x2826B:gōng,qiōng 0x2826C:tíng 0x2826D:méi 0x28271:tàng 0x28274:róng 0x28277:róng 0x28278:qí 0x28279:guó 0x2827D:xiàng 0x2827E:tián 0x28285:xiāo 0x28288:zhān 0x28289:cuì 0x28294:lán 0x28298:shēn,qū 0x2829A:lěi 0x2829B:lì 0x2829D:chān 0x2829E:niè 0x2829F:luán 0x282A1:tīng 0x282A2:huì,sháo 0x282A7:gōng 0x282B0:qì 0x282B1:yú 0x282B3:xīn 0x282B8:yuè 0x282B9:bā 0x282BA:dài 0x282BB:jī 0x282BC:xuàn 0x282BF:jué 0x282C0:niǔ 0x282C8:dù 0x282C9:jí 0x282D0:pā 0x282D1:gǒng 0x282D2:bèn 0x282D4:kēng,jú 0x282D5:yàng,ǎng 0x282D6:liǔ 0x282D7:ní 0x282D8:zhà 0x282D9:yìn 0x282DA:niǎn,ruǎn 0x282DB:pào 0x282DD:gōng 0x282DE:bù 0x282DF:hé 0x282E0:rǒng 0x282E1:guì 0x282E5:bì 0x282E6:xī 0x282E7:jú 0x282E8:hún 0x282E9:bì,fú 0x282EB:tiāo 0x282EC:zhěng,chèng 0x282EE:hōng,chūn 0x282EF:yì 0x282F0:cì 0x282F2:bìng 0x282F7:gōng 0x282FA:fá 0x282FD:yáng 0x282FE:xǔ 0x28301:hōng 0x28304:zàng 0x28305:chái 0x28306:hóng 0x28308:tián 0x2830C:zhī 0x2830D:xīng 0x2830E:xú 0x28311:zhèn 0x28314:wǎn,wàn 0x28318:jùn 0x2831D:wò,huò 0x28320:lù 0x28322:zhēng 0x28323:rǒng 0x28324:chéng,chèng 0x28325:fú 0x28327:è 0x28328:tāo 0x28329:táng 0x2832B:juān 0x2832C:chào 0x2832D:tà 0x2832E:dǐ 0x28330:zōng 0x28333:kēng 0x28334:tuī 0x28336:kēng 0x28345:rǒng 0x28346:yūn 0x28347:hé 0x28348:zǒng 0x28349:cōng,zǒng 0x2834A:qiū 0x2834E:mù 0x2834F:duó 0x28350:xǔ 0x28351:kēng 0x28352:xiàn,jiàn 0x2835B:dú 0x2835C:kǎn 0x2835E:yīng 0x28362:zī 0x28367:huáng 0x28369:péng 0x2836B:lì 0x2836D:bó,pò 0x2836E:gé,lì 0x2836F:jú 0x28370:kē 0x28372:hú,gǔn 0x28373:yáo 0x28374:táng 0x28376:qióng 0x28377:rǒng 0x28378:liǔ 0x28379:huì 0x2837A:jī 0x28389:zhì 0x2838B:táng,chēng 0x2838C:zhǐ 0x2838D:kāng,liáng 0x28394:yàng 0x28396:tǎng,chǎng 0x28397:hōng 0x2839B:liáng 0x2839D:cáo 0x283A1:nǎi 0x283A2:zǒng 0x283A4:dèng 0x283A6:jiāo 0x283A7:péng 0x283A9:guāng 0x283AA:ér 0x283AB:jiàn 0x283AC:jiào 0x283AD:nuó 0x283AE:zǎo 0x283B3:péng 0x283B4:dāng 0x283B6:qú 0x283B7:lián 0x283B8:mù 0x283B9:lǎn 0x283BE:fén 0x283C2:hún,xuān 0x283C6:kuāng 0x283C8:yǐn 0x283C9:shuàn 0x283CA:jiàn 0x283D2:luò,léi 0x283D4:lù,dú 0x283DA:gé 0x283DB:rǎng,niǎn 0x283DE:pín 0x283E0:lóng 0x283E4:zhěn 0x283E5:xiàn 0x283E8:lìn 0x283E9:lián 0x283EA:shān 0x283EB:bó 0x283EC:lì 0x283F3:xié 0x283F4:gé 0x283F5:mǐn 0x283F6:lián 0x283F9:jué 0x283FA:zhōu 0x283FF:kē 0x28401:dié 0x28403:zhé 0x28405:shū 0x28406:jī 0x28407:lóng 0x28408:guāng 0x28409:zǎo 0x2840A:xiàn 0x2840B:qiān 0x2840D:shēn 0x28410:yǐn 0x28411:jiè 0x28414:shēn 0x28415:shēn,cí 0x28416:sǎ 0x2841B:xì 0x28421:kù 0x28423:qú 0x28425:gé 0x28426:bàn 0x28428:bì 0x28429:qiān 0x28430:bīn 0x28431:bàn 0x28433:zuò 0x28434:pì 0x28436:huò 0x2843E:bàn,biàn 0x2844A:nóng 0x2844C:chén 0x2844E:pēng 0x28451:fǔ 0x28452:tú 0x2845C:pǐ 0x2845D:pò 0x28460:chǐ 0x28463:xuè 0x28464:qì 0x28465:wù 0x28468:zhì 0x28469:dì 0x2846A:cōng 0x2846B:yóu 0x28479:cōng 0x2847C:dì 0x2847D:zhuó 0x2847F:zǒu 0x28480:cóng 0x28483:pàn 0x28484:yǎn 0x28485:qì 0x28486:rǒng 0x28487:jiá 0x28489:zhì,zhuì,suì 0x2848A:qiú 0x2848B:yuè 0x2848D:shì 0x28491:háo 0x28499:tuō,hòu 0x2849C:bié 0x2849E:kàn 0x284A2:chuò 0x284A4:cǐ 0x284A6:yǐn 0x284A7:shì 0x284A8:hài 0x284A9:ruǎn 0x284AB:yáng,nì 0x284AC:chī 0x284AE:cī 0x284B1:gōng 0x284B2:mí,xuè 0x284B4:jǐ 0x284BC:gèn 0x284BD:zào,suō 0x284C1:běng 0x284C7:xǐn 0x284C8:kuò 0x284CA:dié 0x284CD:tíng 0x284DA:shuì 0x284DE:dài 0x284E6:lǐ 0x284E8:yǒng 0x284E9:jiāo 0x284EC:tá 0x284ED:qǔ,còu 0x284EE:yín 0x284EF:yuān 0x284F0:jié 0x284F2:qiān 0x284F3:yāo 0x284F4:yà 0x284F7:qīng 0x284FF:péi 0x28517:jiā 0x28519:tòu 0x2851B:tī 0x28521:dùn,tún,chuàn,chuán 0x28522:chǎn 0x28523:jiā,jià 0x28524:chì 0x28525:jiān,jīn 0x28526:shù 0x2852F:tà 0x28555:zhī 0x28557:yuán 0x2855A:hū 0x2855C:liè 0x28560:zé 0x28562:chù 0x28566:qiù 0x28567:bēng 0x28579:huán 0x2857A:kuā 0x2857B:shēng 0x2857D:jié 0x2857F:wǎng 0x28583:hū 0x2858A:zé,jī 0x2858B:zǎn,zhì 0x2858C:yàng 0x2858E:chǐ 0x2858F:jiù 0x2859A:liáo 0x2859B:yū 0x285A0:biǎn,biàn 0x285A2:kuáng 0x285AC:chòu 0x285AD:yá 0x285AE:zhuó 0x285B0:qiè 0x285B1:xiàn 0x285B3:yuān 0x285B4:wǔ 0x285B5:jiǎo 0x285B6:xiàng 0x285B7:shà 0x285B9:zhì 0x285BC:chòng 0x285BE:biān 0x285BF:wēi 0x285D3:dào 0x285DD:yù,jú 0x285DE:tuí 0x285E1:chào 0x285E5:huì 0x285E6:qiǎn 0x285E8:wěi 0x285F0:yóu 0x285FC:dì,dài 0x285FE:dà 0x28601:yóu 0x28602:jiù 0x28603:tuí 0x28604:zǎn 0x28607:huì 0x28609:shà 0x2860C:huò 0x28614:yáo 0x28619:xiàn 0x2861E:xiàn 0x2862C:dì 0x2862E:jiù 0x28632:huì 0x28634:kào 0x28635:yóu 0x28638:lì 0x2863C:chuán 0x2863E:chí 0x28640:huò 0x28642:yóu 0x28644:yuè 0x2864E:tà 0x2864F:zàn 0x28653:niè 0x28654:zhù 0x28661:xiǎn 0x28669:shí 0x2866B:kǒu 0x2866C:qǐ 0x2866D:tǔ 0x2866E:fán 0x2866F:cūn 0x28672:tún,cūn 0x28673:chā 0x28674:cái,zài 0x28675:xiàng 0x28676:pèi 0x28677:jǐng 0x28678:qí,zhī 0x28679:shǎo 0x2867A:niǔ 0x2867B:nà 0x2867D:qín 0x2868D:bì,bèi 0x28693:bì,fèi,fú 0x28694:bāo 0x28695:biàn 0x28696:zī 0x28697:nà 0x28698:wèi 0x28699:háo 0x286A1:jǐn 0x286A3:zhèng 0x286A7:qié 0x286AE:hào 0x286AF:tóng 0x286B0:zǎo 0x286B1:shèng 0x286B2:cún 0x286B3:huāng 0x286B4:rú 0x286B5:zài 0x286B6:nián 0x286BE:xiān 0x286C8:quán 0x286C9:jì 0x286CA:yín 0x286CB:lǐ 0x286CC:máng 0x286CD:shào 0x286CE:hàn 0x286CF:cuò 0x286D0:jùn 0x286D1:jì 0x286D2:bù 0x286D3:lòng 0x286D4:fǒu 0x286D5:yóu 0x286D6:kuài 0x286DC:xiàng 0x286E1:yún 0x286E3:qín 0x286E4:huí 0x286E5:pú 0x286EB:lí 0x286EC:péi 0x286ED:shū,shè 0x286EE:jū 0x286EF:yí 0x286F0:zhēng 0x286F1:chóng 0x286F3:xí,jí 0x286F5:hǔ 0x286F6:róu,shòu 0x2870C:huàn 0x2870D:qiào 0x2870E:zhī 0x2870F:yíng 0x28710:xǐ 0x28711:qiāo 0x28712:jì 0x28713:zhēng 0x28714:huáng 0x28716:yú 0x28717:zōu 0x28718:méi 0x2871C:shěng 0x28729:quán 0x28730:jiāng 0x28731:hé 0x28733:tóng 0x28734:hé 0x28735:wēn 0x28736:yì 0x28737:páng 0x2873A:wēng 0x2873B:qián 0x2873C:lì 0x2873D:yí 0x2873E:chuàng 0x2873F:xù 0x28740:wěi 0x28746:gē 0x28748:yǔ 0x2874B:zhài 0x2874C:gān 0x2874D:qiān 0x2874E:kāng 0x2874F:lí 0x28750:shēn 0x28751:guàn 0x28753:piáo 0x28756:lí 0x28758:hǔ 0x2875B:tú 0x2875C:shùn 0x2875E:hù 0x2875F:lí 0x28762:lòu 0x28766:dàng 0x28768:zuò 0x28769:shān 0x2876B:shè,xì 0x2876D:féng 0x2876E:jù,zōu 0x2876F:tóng 0x28770:jiǎo 0x28771:qiáo 0x28772:gāo,hào 0x28773:zī 0x28774:huáng 0x28775:shān 0x28778:tán 0x2878C:tuō 0x2878E:lìng 0x28790:chéng 0x28791:wèng 0x28792:zuó 0x28793:yù 0x28795:zhú,chù 0x28797:qún 0x28798:xǐ 0x28799:qú 0x2879B:gé 0x287A2:qī 0x287A3:xū 0x287A8:gài 0x287A9:què 0x287AA:chóu,shòu 0x287AB:méng 0x287B2:shēn 0x287B3:qú 0x287B6:qiāo 0x287B7:cán 0x287BA:lì 0x287BC:wàn 0x287BD:léi 0x287BE:xīng 0x287BF:láng 0x287C2:shì 0x287C3:zhēng 0x287C4:fán 0x287CA:zhì 0x287CF:yín 0x287D1:lì 0x287D6:mó 0x287D7:wěi 0x287D9:yīng 0x287DA:ráng 0x287E0:quān,què,jué 0x287E5:luǒ 0x287F2:dài 0x287F4:yìn 0x287F5:bǐ 0x287F6:gē 0x287F8:wèn 0x287F9:yǎn 0x287FA:miǎn 0x287FC:gǎng 0x287FD:qiú 0x287FE:zhī 0x2880B:gū 0x2880C:tóng 0x2880E:líng 0x2880F:tí 0x28810:cí 0x28811:yí,tuó 0x28812:fàn 0x28813:pō 0x28814:bì 0x28816:bào 0x2881F:pēng 0x28821:suān 0x28824:sōng,nóng 0x28825:wéi 0x28826:xiáo 0x2882C:hào 0x2882D:yǎn 0x28836:yí 0x28837:zāo 0x28838:yǐng 0x28839:nǎn 0x2883F:zā 0x28841:tiǎn 0x28842:xī 0x28843:jiào 0x28844:yán 0x2884C:néi 0x2884D:tǎn 0x2884E:yàn 0x2884F:tiǎn 0x28850:zhì 0x28851:chōu,chóu 0x28852:táo 0x28857:zhà 0x2885E:miǎn 0x28861:wǔ 0x28862:yǐn 0x28863:yàn 0x28864:lǎo 0x28869:pō 0x2886B:hùn 0x2886C:hǎi 0x2886D:mú 0x2886E:cōng 0x28871:kù,dǐng 0x28872:chōu 0x28874:yǒu 0x28878:zhuó 0x2887B:sōu 0x28882:yìn 0x28885:zuì 0x28886:sāng 0x28887:liù 0x28888:hàn 0x28889:wèi 0x2888A:méng 0x2888B:hú 0x2888C:lì 0x2888E:mì,yīn 0x28890:bāng 0x28891:jiǎn 0x2889C:què 0x288A0:méng 0x288A2:mú 0x288A3:hǒng 0x288A4:hù 0x288A5:mí 0x288A6:shài,zhà 0x288A9:shāng 0x288AA:chào 0x288AC:zhuó,tú 0x288AE:zhī 0x288AF:niàn 0x288B5:jì 0x288B8:kē 0x288B9:zhēng 0x288BF:dān 0x288C0:liǎo 0x288C1:zhǎn 0x288C2:gǒng 0x288C3:láo,lào 0x288C4:huā 0x288C5:chuài 0x288C7:jiǎn 0x288C8:kuì 0x288CD:shē 0x288D4:chěn 0x288D5:tǎn 0x288D7:hú 0x288D8:méng 0x288D9:pào 0x288DA:zhǎn 0x288DB:cháng 0x288DD:gǎn,jiǎn 0x288E0:yì 0x288E2:suì 0x288E6:xù 0x288E7:jì 0x288E8:làn 0x288EC:yí 0x288EF:mì 0x288F1:miè 0x288F5:cuán 0x288F8:lǎn 0x288FB:yān,yǎn 0x288FE:mí 0x28902:yǒng 0x28903:cáng,zā 0x28904:jiǎn 0x28907:sōu,zāo 0x2890E:yán 0x28911:juàn 0x28915:è 0x28918:fèn 0x2891A:fèn 0x28921:guàng 0x28922:mái 0x28924:liě 0x28929:chōng 0x2892B:lí 0x28931:zhí 0x28934:xiè 0x28937:chóu 0x28939:jí 0x2893D:pī 0x28942:jié 0x28947:zhǒu,zhù 0x2894D:xiōng 0x28951:kuàng,gǒng 0x28959:jǐng 0x2895B:hù 0x2895E:qián 0x28963:cén 0x28966:qí 0x28967:wǎn,fàn,biān 0x28968:máo 0x2896A:dǒu 0x28974:kǒu 0x28976:dài 0x28978:náo 0x2897A:hóng 0x28982:lǎi 0x28983:duǒ,duò 0x28984:qiān 0x28986:yín 0x28996:lòu 0x28997:huī 0x2899B:fù 0x2899C:máo 0x2899E:zhōu 0x289A1:yóng,yáng 0x289AD:láo 0x289AE:jí 0x289AF:yì 0x289B0:liú 0x289B1:cōng 0x289B3:nǎn 0x289D0:tūn 0x289D1:xiàng 0x289D5:biàn 0x289D6:chuáng 0x289D7:wù 0x289D9:jū 0x289E5:xiē 0x289E6:pī 0x289E7:zhuó 0x289E8:ruì,zhuì 0x289EA:sào 0x289EB:zì 0x289ED:zhèng 0x289F0:zú 0x289F1:qū 0x289F3:chì 0x289F5:zhì 0x28A17:quàn 0x28A18:qiān 0x28A19:yā 0x28A1A:chào 0x28A1B:hé 0x28A1C:rǔ 0x28A20:jū 0x28A21:wù 0x28A2C:chì 0x28A2D:kuàng,gǒng 0x28A2F:còu,zhòu 0x28A30:ruàn 0x28A31:kuò 0x28A32:chí 0x28A33:zú 0x28A34:jiāo 0x28A36:yú 0x28A37:tú 0x28A38:méng 0x28A39:dā 0x28A3A:shuò,xuē 0x28A65:fēng 0x28A66:gǒu 0x28A67:dōng 0x28A68:chǎ 0x28A69:mào 0x28A6A:chǎn 0x28A6B:biān 0x28A6C:yù 0x28A6F:wán 0x28A70:zú 0x28A72:zī 0x28A74:chuān 0x28A75:wǎn 0x28A76:wā 0x28A78:quān,juān 0x28A7B:wǎn 0x28A7D:xià 0x28A84:yìng 0x28A85:jiàn 0x28A88:wěi 0x28A89:tí 0x28A8A:sāo 0x28A8C:qí 0x28A8D:shā 0x28A8E:yù 0x28A8F:jí 0x28A90:dòu,tōu 0x28A91:chǎn 0x28A92:tuán 0x28A95:liú 0x28A97:zhuì 0x28AB3:ruàn 0x28AB6:yàn 0x28AB7:gǔ 0x28AB9:lì 0x28ABA:chā 0x28ABE:dì 0x28ABF:liú 0x28AC0:zhǎn 0x28AC1:pō 0x28AD2:lòu 0x28AD4:zhì,xiè 0x28B01:lián 0x28B05:luǒ 0x28B0D:duò,duì 0x28B10:jué 0x28B11:lì 0x28B12:lán 0x28B14:ruàn 0x28B15:gū 0x28B16:chán 0x28B17:xū 0x28B1A:zhǐ 0x28B41:xuè 0x28B42:bō 0x28B43:chēng 0x28B45:zhù 0x28B46:hēi 0x28B49:bān 0x28B53:dié 0x28B56:zhǎn 0x28B57:guó 0x28B5A:biāo 0x28B5B:là,gě 0x28B7A:jīn 0x28B82:gǎi 0x28B92:mèng 0x28B94:yù 0x28BAA:xǐ 0x28BAC:piāo 0x28BAD:sī 0x28BB4:dèng 0x28BB8:chuō 0x28BB9:dí 0x28BBA:jī 0x28BBB:chán 0x28BBF:zhuó 0x28BD3:cài 0x28BDE:jiàng 0x28BF2:tóu 0x28BFD:lí 0x28C02:qiàn 0x28C06:chuō 0x28C0F:tà 0x28C11:diào 0x28C13:jiǎn 0x28C1B:zhǐ 0x28C1C:jué 0x28C1E:mó 0x28C20:luó 0x28C26:bǎo 0x28C2D:zuǎn 0x28C35:zhē 0x28C38:yú 0x28C3B:bǎo 0x28C3E:mǎ 0x28C3F:xì 0x28C40:hù 0x28C41:yì 0x28C42:é 0x28C43:gū 0x28C44:tú 0x28C45:zhēn 0x28C47:qiú 0x28C48:sù 0x28C49:liàng 0x28C4A:qū 0x28C4B:líng 0x28C4C:guàn 0x28C4D:láng 0x28C4E:tōu 0x28C4F:dā 0x28C50:lòu 0x28C51:huáng 0x28C52:shòu 0x28C53:jiāo 0x28C54:zūn 0x28C55:gǎi 0x28C56:wéi 0x28C59:kūn 0x28C5A:duàn 0x28C5B:sōng 0x28C5C:qí 0x28C5D:yǎng 0x28C61:shì 0x28C63:gǎi 0x28C66:dào 0x28C67:yǎo,ǎo 0x28C6B:qián 0x28C6D:shāo 0x28C6E:cháng 0x28C6F:miǔ 0x28C71:mó 0x28C75:nǎo 0x28C78:cōng 0x28C7A:niè 0x28C7B:zhāo 0x28C7C:cén 0x28C7F:sōng 0x28C80:niè 0x28C81:cì 0x28C84:jùn 0x28C86:shāo 0x28C88:zhú 0x28C89:duǒ,tuǒ,shèng 0x28C8A:àn 0x28C8B:bī 0x28C8E:tì 0x28C90:pǐ 0x28C91:xiá 0x28C92:qiú 0x28C93:shěng 0x28C97:tāng 0x28C9B:mán,mián 0x28C9C:piān 0x28C9E:tì 0x28C9F:róng 0x28CA7:cōng 0x28CAA:jī 0x28CAB:féng 0x28CAC:wù 0x28CAD:jiào 0x28CAE:láo 0x28CAF:zēng 0x28CB0:péng 0x28CB1:cǎn 0x28CB3:nóng 0x28CB5:chǎn 0x28CBE:mán,mián 0x28CBF:guì 0x28CC0:niào 0x28CC1:chōng 0x28CC2:chàn 0x28CC6:nàng 0x28CC9:xiā 0x28CCA:jiū 0x28CCB:jǐ 0x28CCC:zhèn 0x28CD1:tǐng 0x28CD4:mén 0x28CD5:yuè 0x28CD7:zhōng 0x28CD8:tún 0x28CD9:ruì 0x28CDA:xiè,fēn 0x28CDB:xī 0x28CDD:tǐng,rùn 0x28CDE:niǔ 0x28CE0:wǎng 0x28CE1:jiān,guān 0x28CE3:fēn 0x28CF2:biàn,bì 0x28CF7:yí 0x28CFA:dié 0x28CFB:jī 0x28CFC:gǎn 0x28CFF:jiān,xì,mǎ 0x28D00:jiōng 0x28D06:kāi 0x28D0A:què,guān 0x28D0C:nán 0x28D0D:móu 0x28D0E:xù 0x28D0F:sǒng 0x28D10:shèn 0x28D11:kuāng 0x28D12:què 0x28D13:wéi 0x28D17:dié 0x28D18:nán 0x28D1A:ruò 0x28D1B:gōng 0x28D1C:dòu,yòu 0x28D1E:niǎn 0x28D21:chāo 0x28D22:hé 0x28D23:yàn 0x28D29:tú 0x28D2A:bǔ 0x28D2C:hú 0x28D2D:yǒng 0x28D2F:shǐ 0x28D30:chù 0x28D39:xiāo 0x28D3A:mén 0x28D3B:lǐ 0x28D3C:tí 0x28D3E:jiān 0x28D42:zhǐ 0x28D43:guā,fǔ,yuè 0x28D44:guǎn 0x28D46:qì 0x28D48:fēi 0x28D49:yǔ 0x28D4A:zhé 0x28D4B:wěi 0x28D4C:ě 0x28D4D:chān 0x28D4E:xī,qí 0x28D50:gǔ 0x28D57:què 0x28D58:huì 0x28D5A:xié 0x28D5B:yīng 0x28D5D:tà 0x28D5E:wāi 0x28D5F:fú 0x28D60:jiè 0x28D61:pì 0x28D65:shěng 0x28D66:yú 0x28D67:kuā 0x28D69:pì 0x28D6A:xié 0x28D6B:nüè 0x28D6C:xiàn 0x28D6D:jiàn 0x28D6E:xù 0x28D70:bì 0x28D74:nán 0x28D76:liáng 0x28D78:pián 0x28D7C:jìng 0x28D80:tǎ 0x28D81:yàn 0x28D82:ài 0x28D85:xiāo 0x28D86:qiāng 0x28D87:wǔ 0x28D88:táng 0x28D8A:jùn 0x28D90:kuò 0x28D97:làng 0x28D99:něng 0x28D9C:dòu,dǒu 0x28D9D:shú 0x28D9F:jiǎo 0x28DA0:niè 0x28DA2:yú 0x28DA8:cè 0x28DAA:jiǎo,liú 0x28DAC:huà 0x28DAD:wén 0x28DAE:yē 0x28DAF:é 0x28DB0:guāng 0x28DB1:huā 0x28DB2:jiāo 0x28DBA:lèi 0x28DBC:shāng 0x28DBD:yòng 0x28DBF:dēng 0x28DC0:guān 0x28DC1:niú 0x28DC3:suì 0x28DC4:xiàng 0x28DC6:sà 0x28DC7:chāng 0x28DCE:rùn 0x28DD0:yūn 0x28DD2:fēn 0x28DD3:jiàn 0x28DD4:xù 0x28DD8:xì 0x28DD9:shú 0x28DE5:xié 0x28DE6:lì 0x28DE9:tóu 0x28DEC:mǐ 0x28DED:chán 0x28DEE:huō 0x28DF1:zhuǎn 0x28DF2:yuè 0x28DFB:lán 0x28DFD:yán 0x28DFE:dàng 0x28DFF:xiàng 0x28E00:yuè 0x28E01:tǐng 0x28E02:bēng 0x28E03:sàn 0x28E04:xiàn 0x28E05:dié 0x28E06:pì 0x28E07:pián 0x28E09:tǎ 0x28E0B:jiāo 0x28E0C:yē 0x28E0E:yuè 0x28E10:réng 0x28E11:qiǎo 0x28E12:qí 0x28E13:diāo 0x28E14:qí,wéi 0x28E17:hàn 0x28E18:yuán 0x28E19:yóu 0x28E1A:jí 0x28E1B:gài 0x28E1C:hāi 0x28E1D:shì 0x28E1F:qū 0x28E29:wèn 0x28E2C:zhèn 0x28E2D:pō 0x28E2E:yán,yǔn 0x28E2F:gū 0x28E30:jú 0x28E31:tiàn,niǎn 0x28E37:è 0x28E3A:yā 0x28E3B:lìn 0x28E3C:bì 0x28E40:zǐ 0x28E41:hóng 0x28E43:duǒ,duò 0x28E45:duì 0x28E46:xuàn 0x28E48:shǎn,yáng 0x28E4A:shǎn 0x28E4B:yáo 0x28E4C:rǎn 0x28E54:tuó 0x28E57:bīng 0x28E58:xù 0x28E59:tūn 0x28E5A:chéng 0x28E5C:dòu 0x28E5D:yì,yà 0x28E61:chè 0x28E75:juǎn 0x28E76:jī 0x28E78:zhào 0x28E79:bēng,bèng 0x28E7B:tiǎn 0x28E80:pēng 0x28E85:fù 0x28E96:tuǒ 0x28E98:xián 0x28E99:nì 0x28E9A:lóng 0x28E9D:zhuó 0x28E9F:zhēng 0x28EA0:shǔn 0x28EA1:zōng 0x28EA2:fēng 0x28EA3:duàn 0x28EA4:pì 0x28EA5:yǎn 0x28EA6:sǒu 0x28EA7:qiú 0x28EA8:è 0x28EA9:qián 0x28EAB:qiǎn 0x28EAD:cā 0x28EAE:xùn 0x28EB5:zhuì 0x28EB8:mǎo 0x28EB9:jiǎo 0x28EBF:zhǎn 0x28EC0:pí,bī 0x28EC1:xī 0x28EC2:yàn 0x28EC3:fèi 0x28EC4:niè 0x28EC6:zhì 0x28EC8:suǒ 0x28ECA:yì 0x28ECC:lěi 0x28ECD:xù 0x28ECF:yì 0x28ED2:wēi 0x28ED5:jī 0x28ED6:chēn 0x28ED7:dié 0x28EE3:yuán 0x28EE5:xí 0x28EE7:liú 0x28EE8:suǒ 0x28EF1:bēng 0x28EF2:xià 0x28EF3:yàn,yān 0x28EF5:cuī,zuī,duì 0x28EF7:kāng 0x28EFA:qīng 0x28EFB:lóu 0x28EFC:bī 0x28F08:zhàn 0x28F09:cuàn 0x28F0A:wú 0x28F0B:xū 0x28F0C:chēn 0x28F0D:háo 0x28F0E:jué 0x28F10:chèn 0x28F11:chá 0x28F12:chǎn 0x28F13:zhí 0x28F14:xún 0x28F23:gé 0x28F24:chén 0x28F25:yè,gé 0x28F2A:chǔ 0x28F2B:qú 0x28F2C:xiè 0x28F2E:zhàn 0x28F2F:kěn 0x28F31:jué 0x28F3D:qú 0x28F3F:méng 0x28F40:yè 0x28F41:zōu,cóng 0x28F42:pú 0x28F44:shì 0x28F49:shǔ 0x28F4A:chán 0x28F4D:dú 0x28F4F:guō 0x28F50:lù,yáng 0x28F51:yān 0x28F56:niǎo 0x28F57:bīn,pín 0x28F5F:tuí 0x28F66:nì 0x28F67:huān 0x28F68:qián 0x28F6F:xià 0x28F72:líng 0x28F77:lián 0x28F79:yì,lì 0x28F7B:lì 0x28F7C:sì 0x28F7F:dài 0x28F82:wèi 0x28F85:cì 0x28F89:jiǔ 0x28F8A:hóng 0x28F8C:yú 0x28F8E:kuí 0x28F92:háng 0x28F93:gē,yì 0x28F94:fàng 0x28F97:kuí,xié 0x28F9A:guī,fū 0x28F9B:chǐ,qí 0x28F9E:jiǔ 0x28FA1:suī,huǎng 0x28FA4:dié 0x28FAC:suǐ 0x28FB0:qín 0x28FB4:guī 0x28FBB:zhuī 0x28FBE:tiào 0x28FC1:yuè 0x28FC7:zuǐ 0x28FCF:wú 0x28FD0:cuǐ 0x28FDB:zhì,xī 0x28FE0:shuì 0x28FE2:dōng 0x28FED:wéi 0x28FFF:chǒng 0x2900B:rún 0x29016:jí 0x2901C:diāo 0x2901E:cāng 0x29020:kòu,gǔ 0x29023:wéi 0x29027:cán 0x2902A:má 0x2902B:òu 0x29032:sǎn 0x29036:wéi,huī,mí 0x2903C:sǎn 0x2903F:jīn 0x2904C:wéi 0x2905E:cài 0x2905F:lí 0x2906F:yuè 0x29074:yūn 0x29077:chēng 0x2907A:shān 0x29082:hū 0x29083:shài 0x29084:tún 0x29086:fǒu,fù 0x29088:qìn 0x29089:xū,chēn 0x2908D:chuān 0x2908E:fù 0x29092:yì,ài 0x29093:dōng 0x29094:fú 0x29095:fú 0x29096:zé 0x29097:pù 0x29099:líng 0x2909D:shài,yīng 0x2909E:pào 0x290A2:yín,ái 0x290A3:luò 0x290A4:huà 0x290A5:yìn 0x290A6:bèng 0x290A7:yū 0x290A8:shè 0x290AA:xiè 0x290AB:chǔ 0x290B4:shè 0x290B5:diàn 0x290B9:yì 0x290BB:chè 0x290BC:gěng 0x290BD:lóng 0x290BE:píng 0x290BF:yǔn 0x290C0:yàn 0x290C1:mò 0x290C3:suī 0x290CB:jìng 0x290CD:sòng 0x290CE:páng 0x290D0:yá 0x290D1:sè 0x290D2:duǒ 0x290D5:chuáng 0x290D6:xiè 0x290D8:tuán 0x290D9:gōng 0x290DA:xuàn 0x290DC:lā 0x290DE:líng 0x290E0:dài 0x290E1:zhá 0x290EC:yīn 0x290ED:sōng 0x290EF:yǔ 0x290F0:tuó 0x290F1:tuó 0x290F4:bà 0x290F5:rǎn 0x290F6:bó 0x290F7:dài 0x290F9:zhá,zhǎ 0x290FA:hóu 0x290FE:huǐ 0x29105:lú 0x2910A:lìng 0x2910B:rú 0x29115:dàn 0x29116:méng 0x29117:xià 0x29118:wěng 0x29119:hán 0x2911A:zī 0x2911B:zhèn 0x2911C:sè 0x2911D:cuó 0x2911E:lì 0x29120:diān 0x29121:lián 0x29122:gòu 0x29126:péng 0x2912A:yīng 0x2912C:hòu 0x2912E:duì 0x2912F:wù 0x29137:piào 0x29138:hè 0x2913A:lóng 0x2913B:mò 0x2913C:fěi 0x2913D:lǚ 0x2913E:zé 0x2913F:bó 0x29140:diàn,zhí 0x29141:mǎng 0x29143:zhuàng,chóng 0x29144:lù 0x29145:pāng 0x29146:duì 0x29147:bù 0x2914C:chēn 0x2914D:màn 0x29156:xī 0x2915D:ǎn 0x2915E:zhōng,chòng 0x29160:nàn 0x29161:tuò 0x29162:hé 0x29165:duì 0x29166:wān,dān 0x29167:zhōng 0x29168:cén,shèn 0x29169:lì 0x2916A:shuāng 0x2916E:cén 0x29170:sī 0x29172:duì 0x29174:hūn 0x2917C:jiān,jiàn 0x2917D:nóng 0x2917E:dàn 0x2917F:fù 0x29180:huò 0x29181:huì,wèi 0x29182:cí 0x29184:yǒng 0x29185:sà 0x29186:tíng 0x2918E:liù 0x29191:suān 0x29192:líng 0x29193:mán,màn 0x29194:diàn 0x29198:pāo 0x2919A:líng 0x2919D:lì 0x2919F:nóu 0x291A3:liè 0x291A4:shǎn 0x291A6:fèi 0x291AB:shǎn 0x291AE:líng 0x291AF:zhàn,jiān 0x291B1:bīn 0x291B2:lí 0x291B5:sī,xiàn 0x291B6:ráng 0x291B7:jiān 0x291B8:zhuó 0x291BB:líng 0x291BC:líng 0x291BD:mèng 0x291BF:shuāng 0x291C4:líng 0x291C7:hùn 0x291CE:líng 0x291CF:jiān 0x291D0:qú 0x291D4:nóng 0x291D5:jìng 0x291D6:chēn 0x291DC:zhēn,chèng,chēng 0x291DD:qìng 0x291DF:qìng 0x291E0:è,yǎn 0x291E3:sè 0x291E9:bèi 0x291EB:fēi 0x291EE:fèi 0x291EF:féi 0x291F4:fāng 0x291F5:kǔ 0x291FA:zá 0x291FB:huì 0x291FD:féi 0x29201:duì 0x29206:pā 0x29207:niǔ 0x29208:pàng 0x29209:dàn 0x2920A:dān,dàn 0x2920B:ài 0x2920D:tiǎn 0x2920E:chǎo 0x2920F:ǎo,yǒu 0x29210:mèi 0x29211:nǎn 0x29214:bò 0x29215:yù,chì 0x29216:xiān,hān 0x29217:mài 0x2921A:pīng 0x2921C:duī 0x2921E:dào 0x29221:xìng 0x29222:nì,nǜ 0x29223:hān 0x29224:chù 0x29225:shuǎ 0x29226:mǎn 0x2922C:wàn 0x2922D:yì 0x2922E:diào 0x2922F:yān 0x29231:wò 0x29232:suàn 0x29234:ǎn 0x29235:lán 0x29236:nǎn 0x29238:qiǔ 0x29239:miàn 0x2923A:nuǒ 0x2923B:cán 0x2923C:cǎn 0x29240:làn 0x29241:tiǎn 0x29242:yè 0x29244:niǎn 0x29246:shuǎ 0x2924B:cí 0x2924D:jiǎn 0x29250:gàn 0x29254:jiàn 0x29255:guó 0x29257:zhān 0x29259:luǒ 0x2925C:jī,hàng 0x2925D:guì 0x29261:jiá 0x29262:jǐ 0x29265:xuàn 0x29267:fēng 0x2926B:bì 0x2926C:qí,chí 0x2926F:yuán 0x29270:àng 0x29271:dī 0x29274:è 0x29275:fén 0x29278:jù 0x29279:nǐ 0x2927A:tuó 0x2927C:shēn 0x2927D:fú 0x2927E:xiá 0x2927F:qú 0x29280:pò 0x29281:wǎn 0x29282:líng 0x29283:mà 0x29284:zhòu 0x29285:bào 0x29287:yù 0x2928C:běng 0x2928D:mài 0x2928F:jiā 0x29291:yǎng 0x29293:kuǎ,kù 0x29294:jiào 0x29296:bǐng 0x2929A:luò 0x2929B:guǐ 0x2929C:duò 0x2929D:zhì 0x292A1:zhèn 0x292A2:è 0x292A3:zhū 0x292A4:bá 0x292A8:zhèn 0x292A9:fēng,féng 0x292AA:dòu 0x292AB:niǎn 0x292AC:bù 0x292AD:duì 0x292AE:shā,suō 0x292AF:sè 0x292B0:bì 0x292B4:zhì 0x292B5:zhé 0x292B6:bù 0x292BA:jué 0x292BB:xùn 0x292BF:xì 0x292C1:zhuó 0x292C2:bài 0x292C3:yáo,táo 0x292C4:chǒu 0x292C5:tà 0x292C6:qiān 0x292C8:nào 0x292C9:yù 0x292CA:è 0x292CB:jiān 0x292CC:yì 0x292CD:xiāo 0x292CF:niè 0x292D2:bīng 0x292D7:guǒ 0x292D8:xié 0x292D9:diào 0x292DC:jū 0x292DD:suǒ 0x292DE:dié 0x292DF:fú,fù 0x292E0:miǎn 0x292E1:shì 0x292E2:xuàn,yùn 0x292E3:tí 0x292E4:yù 0x292E7:xié,kài 0x292E8:fú 0x292E9:zhì 0x292EA:nǐ 0x292EB:xuàn 0x292EC:yáng 0x292EE:fěng,bāng 0x292EF:zòng 0x292F0:zhòu 0x292F1:xuān 0x292F5:zhū 0x292F7:la 0x292F9:yìng 0x292FA:gào 0x292FB:kuò 0x292FD:é 0x292FE:wéi,wěi,xuē 0x292FF:méi 0x29303:huái,guì 0x29304:chǒu,zhōu 0x29306:suǒ 0x29307:tà 0x29308:suǒ 0x29309:tà 0x2930A:xuè 0x2930C:gǒng 0x2930D:jiǎ 0x2930F:bó,fú,bù,fù 0x29310:tà 0x29311:yuǎn 0x29318:tà 0x2931D:chuí 0x29320:xiōng 0x29321:hé,juē 0x29322:suō 0x29327:mò 0x29328:chóng 0x29329:suī 0x2932A:zé 0x2932B:lù 0x2932C:zhāng 0x2932D:luò 0x2932E:xù 0x2932F:jiān 0x29330:shān 0x29332:xù 0x2933E:jiǎng 0x29342:bào 0x29343:mái 0x29345:tóng 0x29346:xì 0x29349:róng 0x2934B:shéng 0x2934C:zhòu 0x2934E:jiān 0x2934F:fù 0x29350:dèng 0x29353:yōng 0x29354:jū,qū 0x29356:yì 0x29357:bāng 0x29359:sè 0x2935A:suì 0x2935C:duó 0x2935D:xiè 0x29361:huán 0x29365:rǔ 0x29366:nǐ 0x29367:zhòu 0x29368:guì 0x2936A:luò 0x29372:zhī,chàn 0x29373:xù 0x29375:zhī 0x29377:jué 0x29378:jū 0x2937B:yuán 0x2937C:lú 0x2937F:bó,fù 0x29382:róng 0x29383:xiè 0x29389:xǐ 0x2938A:luó 0x2938E:gé 0x29391:zuān 0x29392:hàn,jiān 0x29394:jiāo 0x29395:sǎ 0x29396:qín,qián 0x29397:qūn 0x29398:páo 0x29399:yuè 0x2939A:chè 0x2939B:fú 0x2939C:pēi 0x2939F:mèi,mò,wà 0x293A2:tāo 0x293A4:kēn 0x293A5:xì 0x293AB:duò 0x293AD:yì 0x293B0:suì 0x293B2:xiá 0x293B3:juān 0x293B5:wéi 0x293B7:yì 0x293B9:yù 0x293BB:bài 0x293BC:tuó 0x293BD:tà 0x293BE:páo 0x293C2:bǐng,bì 0x293C5:yùn 0x293C6:yùn 0x293C7:duàn 0x293C8:ruǎn 0x293C9:wéi 0x293CF:wéi 0x293D0:guì,wěi 0x293D2:dá 0x293D3:xiá 0x293D6:hùn 0x293D7:juǎn 0x293D8:suī 0x293DA:suì 0x293DD:lóu 0x293DE:bài 0x293DF:yù 0x293E0:zhèng 0x293E1:guì 0x293E3:kuī 0x293E4:gāo 0x293E5:dān 0x293E9:xiǎn 0x293EA:zhái 0x293EB:sè 0x293ED:kē 0x293EE:bǔ 0x293EF:bó 0x293F2:suì 0x293F4:yù 0x293F5:bǔ,bù 0x293F6:jiū 0x293F7:jiū,jiào 0x293F9:juàn 0x293FA:jué 0x293FC:nà 0x293FD:zhái 0x293FE:tāo 0x293FF:wěi 0x29400:xiá 0x29401:xiè 0x29405:sà 0x29406:jī 0x29409:xiè 0x2940C:duì 0x2940D:zǐ 0x29418:yuǎn 0x29419:qìn 0x2941A:fú 0x2941B:péng 0x2941C:páo 0x2941E:yìn 0x29420:hōng 0x29421:zú 0x29423:gōng 0x29424:dòng 0x29425:hē 0x29426:wò 0x29428:pāng 0x2942B:sù 0x2942C:kǎn 0x2942D:niè 0x2942E:háo 0x2942F:fèng 0x29430:è 0x29431:yè 0x29434:tíng 0x29435:dòng 0x29436:zhé 0x29437:sāng 0x2943B:mò 0x2943C:sù 0x2943E:lè 0x29440:pǔ 0x29441:é 0x29442:zhuó 0x29443:yè 0x29447:xiāng 0x29448:guàng 0x29449:rěn 0x2944A:líng 0x2944D:ào 0x29450:chāi 0x29452:duó 0x29453:qióng 0x29454:kū,yà 0x29455:xū 0x29456:huán 0x29457:yāo 0x29458:zhèn 0x29459:tǐng 0x2945A:běng,lèi 0x2945D:áng 0x2945F:kān,qiān 0x29461:kū,gěn 0x29462:péi,bāi 0x29463:yòu 0x29464:ǎo 0x29465:mén 0x29466:mò 0x2946C:fǔ,guī 0x2946D:qīng 0x2946E:là 0x2946F:dǒu 0x29470:tǎn 0x29473:qiǎn 0x29474:yào 0x29475:wèi 0x29476:hú,kū 0x29477:mò 0x29478:hē 0x29479:xuàn 0x2947B:bì,pó 0x2947C:pō 0x2947E:dī 0x29480:zhěn 0x29482:shī 0x29483:kǎn 0x29484:cè 0x29487:xū 0x29488:zhěn 0x2948A:zhǔ 0x2948F:huì 0x29490:chǐ 0x29493:hǒng 0x29494:nóu 0x29495:niè,pò,è 0x29496:yàn 0x29498:chǒng 0x29499:fǔ,guì 0x2949A:guāng 0x2949B:qī 0x2949D:gěn 0x2949E:tǐng 0x294A2:tǎn 0x294A3:qiǎn 0x294A6:jiù,xìn 0x294A7:xū 0x294A8:qǐ 0x294AA:zhèn 0x294AE:qiú 0x294B0:ě 0x294B3:huì 0x294B4:hòng 0x294B5:qǐng 0x294B7:chē,rǒng 0x294BA:fù 0x294BC:hōng 0x294BD:xī 0x294BE:wú 0x294BF:máng 0x294C2:tī 0x294C5:hōng 0x294D0:bó 0x294D2:qǐn 0x294D3:gěn 0x294D6:fú 0x294D7:kuǐ 0x294DD:bié 0x294DE:jìng 0x294DF:kǎn 0x294E0:guī 0x294E2:gǎo 0x294E3:xū 0x294E4:àn 0x294E5:yuè 0x294E6:wù 0x294E7:yí 0x294E8:jīng 0x294EA:lù 0x294EB:quán 0x294EC:tuí 0x294EE:jì 0x294FA:jiǒng 0x294FB:jué 0x294FC:piē 0x294FD:kūn 0x29500:wài 0x29501:huì 0x29502:dùn 0x29503:yuǎn 0x29504:jié 0x29506:guì 0x29507:gǎo 0x29508:pò 0x29509:mén,mín,hūn 0x2950A:zhuàn 0x2950B:hàng 0x29514:yóng 0x29515:qiú 0x29517:lèi 0x29518:áng 0x29519:pǐ,xìn 0x2951A:wēng,wěng 0x2951D:qìn 0x2951F:qǐn 0x29520:miè 0x29521:dōu 0x29522:mí 0x29523:zhān 0x29525:qǐng 0x29526:yí 0x2952E:bān 0x29531:juān 0x29533:zé 0x29534:xù 0x29535:lán 0x29536:má 0x29537:má 0x29538:ōu 0x29539:bēi 0x2953B:póu 0x2953C:xù 0x29540:ào 0x29546:hǒng 0x29549:hǒng 0x2954A:zhǎn 0x2954C:sěn 0x2954D:gǎo,háo 0x2954F:pó,fán 0x29550:liào 0x29555:wài 0x29556:xuān 0x2955C:kuí 0x2955F:è 0x29560:hàn 0x29561:sè 0x29564:dàn 0x2956A:xuān 0x2956C:è 0x2956D:gài 0x2956F:dāo 0x29571:měng 0x29572:yī 0x29573:nǐng 0x29575:pín 0x29579:cāng 0x2957E:yuàn 0x29580:è 0x29581:niè,yá 0x29584:yǐn 0x29587:qiāo 0x29589:hōng 0x2958A:líng 0x2958C:chān 0x2958D:yǐng 0x29592:guān 0x29594:niǎo 0x29595:xū 0x29596:tán 0x29597:jìn 0x2959B:péng 0x2959D:liáo 0x295A0:bèi 0x295A3:xín,bá 0x295A4:tún 0x295A5:chāo 0x295A6:gān 0x295A8:hū 0x295A9:wǎng 0x295AC:fú 0x295AD:pèi 0x295AF:náo 0x295B0:xún,xín 0x295B1:xuè 0x295B4:liǔ 0x295B5:líng 0x295B6:xuè 0x295B7:qū 0x295B8:háo 0x295B9:yí 0x295BA:hàn 0x295BC:fú 0x295BD:bá 0x295BE:yí 0x295C0:bó 0x295C4:hōng 0x295C5:lì 0x295C9:sà 0x295CA:xī 0x295CE:shì 0x295CF:piāo 0x295D0:huà 0x295D1:yí 0x295D2:bó 0x295D3:bó 0x295D4:něi 0x295D5:qiú 0x295D8:wěi 0x295D9:chè 0x295DA:yóu 0x295DC:wèi 0x295DD:huǐ 0x295DE:sà 0x295E2:hòng 0x295E3:sōu 0x295E4:hàn 0x295E5:páo 0x295E7:fáng 0x295E9:liú 0x295EA:zhòu 0x295EB:pí 0x295ED:lì 0x295F0:chuí 0x295F1:xī 0x295F2:zhēng 0x295F4:bèng 0x295F5:zhēng 0x295F6:suì 0x295F7:yǎn 0x295FC:qīng 0x295FD:wù 0x295FE:liǎng 0x29600:zhào 0x29601:liáng 0x29605:jiē 0x29607:hōng 0x29608:yōu 0x2960A:là 0x2960B:hòu 0x2960D:yuàn 0x2960E:hóng 0x2960F:yè 0x29611:yǐng,yīng 0x29612:xuǎn,juān 0x29613:yóu 0x29618:quán 0x2961C:táng 0x2961D:suǒ 0x2961F:lì 0x29620:sōu 0x29621:lì 0x29624:yù 0x29627:yì 0x2962D:xiū 0x2962E:áo 0x2962F:tuán 0x29630:sù 0x29631:shuài 0x29633:yù 0x29635:fēng 0x29639:sù 0x2963A:tuí 0x2963B:yù 0x2963C:zhēng 0x2963D:zhēng 0x2963F:táo 0x29644:liú 0x29646:chéng 0x29647:suí 0x29648:sāo 0x2964F:gǔ 0x29650:fēng 0x29651:liè 0x29652:piāo,piào 0x29656:lì 0x29658:lóng 0x29659:chū 0x2965A:xiāo 0x2965B:hōng 0x2965C:xiè 0x2965D:shè 0x29660:lóng 0x29661:hōu 0x29662:xuán,shī 0x29663:fēng 0x29665:bá 0x29666:bó 0x29667:táo 0x29668:sù 0x29669:zhào 0x2966A:biāo 0x2966B:sōu 0x2966C:tuí 0x2966D:suǒ 0x2966E:xiāo 0x2966F:héng 0x29670:sāo 0x29672:fēi 0x29677:niù 0x29678:mǎng 0x2967D:huán,xuān 0x2967E:zhī 0x29682:yì 0x29684:yù 0x29687:yí 0x29688:yuē 0x29689:chí 0x29695:yǐn,qiāng 0x29696:niù 0x29697:rǒng 0x2969B:nà 0x296A3:tián 0x296A5:bā 0x296AA:ěr 0x296AB:zhēng 0x296AC:è 0x296AD:póu 0x296AE:jī,nì 0x296AF:ní 0x296B1:jiǒng 0x296B2:jiá 0x296B5:gān 0x296B9:líng 0x296BB:zuì 0x296BE:bèi 0x296C5:shū 0x296C6:yǐ 0x296C7:pāi 0x296CB:nǎo 0x296CC:shì 0x296CE:mǎn 0x296CF:shì 0x296D1:tí 0x296D8:gōng 0x296DD:lèi 0x296DE:bǎo,něi,piǎo 0x296DF:yuān,mán 0x296E0:zuō 0x296E1:láng,náng 0x296E2:xiū 0x296E5:zài 0x296E6:chèng 0x296E7:jiān 0x296E8:mào 0x296E9:jiá 0x296EA:yù 0x296ED:yù 0x296EE:yí 0x296F2:māng 0x296F3:zài,cān 0x296F5:zhuì 0x296F6:tí 0x296F9:xì 0x296FA:jú 0x296FB:zàn,zuǎn,zhān 0x296FC:lù 0x296FD:táo 0x29700:zhuì,duī 0x29701:líng 0x29703:jù 0x29706:jī 0x29707:juǎn,juàn 0x2970A:zī 0x2970C:yuē 0x2970D:dōng 0x29712:nǎng 0x29716:chóng 0x2971F:àng 0x29723:gēng 0x29725:bō 0x29726:dìng 0x29727:wěi 0x2972C:quán 0x2972D:kē 0x29730:pì 0x29731:kǎn,sǎn 0x29732:fú 0x29733:yǒng 0x29735:tuán 0x29736:tǒu 0x29737:yòu,niù 0x29738:yāo 0x2973A:yē 0x2973D:yàn 0x29748:xián 0x2974A:tí 0x2974C:suì 0x29750:cí 0x29754:xǔ 0x29755:wù 0x29756:cān 0x29757:yù 0x2975A:chǎn 0x2975B:xiá 0x2975D:kào,gāo 0x2975E:cāng 0x2975F:chā 0x29760:qiǔ 0x29763:dā 0x29765:sù 0x29768:huā 0x29777:wū 0x29778:yuān 0x2977D:jiàng 0x2977E:xiǎng 0x2977F:zhāi 0x29780:sǎn,chěn,càn 0x29781:mó,mí 0x29783:shǎng,xiǎng 0x29784:cáo 0x29785:suī 0x29786:chuáng 0x29787:mí 0x29788:zhú 0x29789:chóng 0x2978A:jì 0x2978B:chóng 0x29799:lián 0x2979E:hài 0x297A4:dūn 0x297A5:xiǎng 0x297A6:chēng 0x297A7:shǎng 0x297A8:lì 0x297A9:huáng 0x297AC:dèng 0x297AF:liáng 0x297B6:zā 0x297BA:huò 0x297BB:lín 0x297BE:dú,yì 0x297BF:hàn 0x297C0:yōng,yǒng 0x297C1:yuàn,xuàn 0x297C2:guò 0x297C3:líng 0x297C5:liǎn 0x297C7:ào 0x297C8:dāng 0x297C9:yì 0x297CA:nóng 0x297CB:shàn 0x297CD:xìn 0x297D0:dá 0x297D1:yù 0x297D2:cān 0x297D3:wò 0x297D4:chá 0x297D5:bó 0x297D7:jiǎn 0x297DE:méng 0x297DF:wěi 0x297E0:mó 0x297E5:shuì,juǎn 0x297E6:jié 0x297E7:shuò 0x297E8:huò 0x297EB:chuò 0x297ED:lóng 0x297EE:huài 0x297F0:tuō 0x297F3:yú 0x297F6:chàn,jié 0x297F7:yōng 0x297F8:huò 0x297FA:lǎn 0x297FF:nà 0x29800:bā 0x29801:gān 0x29802:yǐ 0x29803:jiá 0x29805:dá 0x29806:dìng 0x29807:xùn 0x29808:rěn 0x29809:juǎn 0x2980A:tuán 0x2980B:xǔ 0x2980C:sòng 0x2980E:cáo 0x2980F:chēng 0x29811:dǐng 0x2981A:hái 0x2981F:wǔ 0x29826:qǐ,shǒu 0x29828:jī,qǐ 0x2982E:kuí 0x2982F:wéi 0x29836:shǒu 0x29837:fú 0x29839:tuán 0x2983B:bié,hān 0x2983D:tán 0x2983E:hāng 0x2983F:piē 0x29843:yú 0x29844:tán,xiāng 0x2984C:xiāng 0x2984E:xiū 0x29853:wěng 0x29854:hài 0x29855:péng 0x2985D:tán 0x2985F:bié 0x29860:xiāng 0x29863:yǐ 0x29866:piáo 0x29867:huán 0x29868:mǔ 0x29869:bā 0x2986B:fàn 0x2986F:dīng 0x29877:fēn,fèi 0x2987A:jiè 0x2987E:suó 0x29884:wàn 0x29885:gē 0x29888:fēn 0x2988A:tuó 0x2988C:wén 0x2988D:guā 0x2988E:duō 0x29890:zhé 0x29891:cǐ 0x29892:yǎo 0x29894:bàn 0x29895:bù 0x29896:mò 0x29898:pǒ 0x2989B:gé 0x2989E:liú 0x298A1:rǎn 0x298A8:gān 0x298AA:hú 0x298AB:móu 0x298AE:xiū 0x298AF:huāng 0x298B0:fú 0x298B1:huí 0x298B3:qú 0x298B4:jié,jí 0x298B5:tuō 0x298B6:yú 0x298B7:mò 0x298B8:zhōu 0x298B9:jiù 0x298BB:shú 0x298BC:kuāng 0x298BD:qióng 0x298BE:liè 0x298BF:fù 0x298CA:xù 0x298D6:lìn 0x298D8:niè 0x298DA:pī,bǐ 0x298DC:fù 0x298DD:bù 0x298DE:yì,sà 0x298E1:bó 0x298E3:é,ě 0x298E9:zhé 0x298EB:lì 0x298EE:tù 0x298EF:dá 0x298F1:lù 0x298F2:yān 0x298F3:dōng 0x298F4:qiè 0x298F5:wǎn,wò 0x298F6:mǐng 0x298F7:zuī,zhù 0x298F8:fù 0x298F9:qū 0x298FA:bēn 0x298FB:ǎo 0x298FC:qiāng 0x29901:qūn 0x29908:què 0x29909:huá,táo 0x2990A:xiàn,jiàn 0x2990B:kùn 0x2990F:cuì 0x29912:yí 0x29916:chī,ér 0x29917:zòng 0x29918:nǎo 0x29919:chéng 0x2991A:duān 0x2991B:yóng 0x2991C:zhě 0x2991E:tàn 0x2991F:yáng 0x29920:xié 0x29921:xuān 0x29923:duàn 0x29924:shuǎ 0x29925:xián 0x29926:xián 0x29929:é 0x29932:lā 0x29938:wèi 0x29939:yōu 0x2993A:yú 0x2993D:tī 0x2993F:jīn 0x29941:táng 0x29942:qí 0x29944:diān 0x29945:tāo 0x29946:lǜ 0x29947:zhàn 0x29948:wēn 0x29949:jì 0x2994A:āo,jiāo 0x2994B:òu,dú 0x2994C:qià 0x29950:shī 0x29951:tǎ 0x29954:mò 0x29958:yóu 0x29960:zhá 0x29963:yáo 0x2996B:chōng 0x2996C:lí 0x2996D:yú 0x2996E:chǎn 0x2996F:yī 0x29972:chì 0x29974:lí 0x2997D:tú 0x2997F:zú 0x29982:xián 0x29987:xì 0x29989:bié 0x2998A:hán,qiān 0x2998B:qí 0x2998C:sāng,shuāng 0x2998E:fēi,fěi 0x29990:shàn,huō 0x29998:huān 0x299A0:bàng 0x299A1:yú 0x299A2:yú 0x299A4:jí 0x299B1:kuǎi 0x299B2:zōng 0x299B9:xiàn 0x299BA:méng 0x299C3:lì 0x299C4:zhì 0x299C5:fán 0x299C6:liè,là 0x299C7:cài 0x299C8:dú 0x299C9:guāng 0x299CA:xiòng 0x299CB:lí 0x299CC:qì 0x299CF:jué 0x299D0:tuō 0x299D2:jù 0x299D3:xiāo 0x299D8:qú 0x299DC:zhuǎn 0x299E1:jué 0x299E6:jiè 0x299E8:zhòu 0x299E9:xiàn 0x299EA:lóng 0x299EB:yǎng 0x299EC:rǎn 0x299ED:yì 0x299EE:liè 0x299EF:bō 0x299F0:hún 0x299F1:jì 0x299F2:dòng 0x299F3:zhōu 0x299F4:quān 0x299F5:jié 0x299FA:jú 0x299FC:bēn 0x299FF:bī 0x29A00:gé 0x29A01:chǔn 0x29A03:qián 0x29A04:sōu 0x29A05:wèi 0x29A06:chéng 0x29A07:lóu 0x29A08:yú 0x29A09:lā 0x29A0A:qián 0x29A0B:diān 0x29A0C:tǎ 0x29A0D:zhàn 0x29A0F:fán 0x29A10:liè 0x29A11:tīng 0x29A12:jī 0x29A13:qiān 0x29A14:hú,huá 0x29A17:yú 0x29A18:qì,gē 0x29A19:yú 0x29A1A:wā 0x29A1C:bà 0x29A1D:qí 0x29A1E:sǎ 0x29A1F:qiāo 0x29A20:yà 0x29A21:xiǎn,sǎn 0x29A28:cī 0x29A29:fàn 0x29A2B:kǔn 0x29A2C:gǔn 0x29A2D:quē 0x29A2E:è 0x29A2F:qióng 0x29A32:mà 0x29A33:kū,dū 0x29A34:yǎo 0x29A37:quē 0x29A38:chū 0x29A39:jiǎ 0x29A3B:zhǔ 0x29A3D:duī 0x29A3E:wá 0x29A40:nǎo 0x29A44:yán 0x29A45:tóng 0x29A4B:xíng,jìng 0x29A4C:gǔn 0x29A4D:pīng 0x29A51:yǔ 0x29A52:hè 0x29A54:zhuó 0x29A57:shē 0x29A58:yǔ 0x29A5B:jì 0x29A5D:qiāng 0x29A5E:shuì 0x29A5F:chuò 0x29A60:zú 0x29A61:léng 0x29A62:ní 0x29A64:wā 0x29A65:zhá 0x29A67:dàn 0x29A6E:dù 0x29A6F:biàn 0x29A70:jiē,hái 0x29A71:qià 0x29A72:hé 0x29A73:chòng 0x29A74:yán 0x29A76:yàn 0x29A7A:sóng 0x29A7B:téng 0x29A7C:yǎo 0x29A7E:kāo 0x29A80:zhuī 0x29A81:guì 0x29A82:ái 0x29A83:hài 0x29A88:suǒ 0x29A89:xù 0x29A8A:biāo 0x29A8C:fèng 0x29A8D:qū,shū 0x29A8E:mǎng 0x29A90:guó 0x29A96:bì 0x29A97:jué 0x29A98:chuáng 0x29A9B:pú 0x29A9F:yì 0x29AA2:qiān 0x29AA3:yì 0x29AA4:è 0x29AA5:líng 0x29AA7:bì 0x29AAD:huò 0x29AAE:mǒ,mó 0x29AB1:xūn 0x29AB4:yàn 0x29AB8:lì 0x29ABA:tán 0x29ABE:luán 0x29AC0:kài 0x29AC1:mào 0x29AC2:xiāo 0x29AC7:ǎi 0x29ACA:tǎ 0x29ACD:mèi 0x29ACF:guō,yōng 0x29AD3:gǎo 0x29AD4:náo 0x29AD5:háo 0x29AE0:quē 0x29AE5:cáo 0x29AE6:sào 0x29AEB:pí 0x29AF2:xiē 0x29AF3:xiāo 0x29AF4:jú 0x29AF9:chéng 0x29AFA:nǎo 0x29B00:nèi 0x29B0D:mǔ 0x29B0F:shāo 0x29B11:diān,chān 0x29B14:líng 0x29B16:zhěn 0x29B17:yǎo 0x29B19:fù,fū 0x29B1A:qián,gàn 0x29B1B:qióng 0x29B1C:jú 0x29B1D:bìng,fǎng 0x29B1E:máo,mán,mián 0x29B1F:zhà 0x29B20:tāi 0x29B24:chōng 0x29B2B:zhǎi 0x29B2D:shī 0x29B2E:yòng 0x29B30:qióng 0x29B31:dào 0x29B32:tì 0x29B33:zhuǐ 0x29B35:yìn 0x29B37:nǎo 0x29B38:bō 0x29B39:kuāng 0x29B3A:zhǐ 0x29B3B:duǒ 0x29B3C:cōng 0x29B3D:bǎo 0x29B47:lí 0x29B4A:jú 0x29B4B:wén,kūn 0x29B4C:liè 0x29B4F:wǒ 0x29B50:shǐ 0x29B51:niǎo 0x29B52:máng 0x29B53:jiū 0x29B58:xiū 0x29B5D:wǒ 0x29B5F:dào 0x29B61:xī 0x29B62:àn 0x29B63:dá 0x29B64:zǒng,zōng 0x29B65:hàn 0x29B66:chuí 0x29B67:bī,bān 0x29B69:dòng 0x29B6B:zhǎng 0x29B6F:yā 0x29B72:dí 0x29B73:huō 0x29B77:mín 0x29B7A:fù 0x29B7C:bǎo 0x29B7D:kè 0x29B7E:máo 0x29B7F:rè 0x29B80:zōng,zǒng,sōng 0x29B81:qià 0x29B82:xiā 0x29B83:sōu 0x29B84:xiū 0x29B85:nà 0x29B89:mán,mián 0x29B8E:zhā 0x29B8F:chán 0x29B90:shè 0x29B91:wǒ 0x29B96:ái 0x29B97:bàng,péng,fǎng 0x29B98:hāo 0x29B9A:sāo 0x29B9B:suǒ 0x29B9C:tì 0x29B9D:yà 0x29B9F:bìng 0x29BA0:róng 0x29BAB:shā 0x29BAC:wěng 0x29BAF:áo 0x29BB1:zhuāng 0x29BB3:piào,piǎo,piē 0x29BB4:suī,cuǐ 0x29BB5:yī 0x29BB6:sōu 0x29BB7:dōu 0x29BB8:sōu,nà 0x29BB9:luó 0x29BC3:fèi,bì 0x29BC4:zùn 0x29BC6:nào 0x29BC7:dēng 0x29BC8:zhí 0x29BC9:cuō 0x29BCA:liáo 0x29BCB:jǐ 0x29BCC:bō 0x29BCD:cóng 0x29BCE:chéng 0x29BCF:bǔ 0x29BD1:sān 0x29BD2:zàn 0x29BD8:jiào 0x29BDB:yào 0x29BDC:lǔ 0x29BDE:càn 0x29BE8:nǐ 0x29BF0:jié,jì 0x29BF1:pú 0x29BF2:zhuàng 0x29BF3:zàn,zuǎn,zā 0x29BFA:lì 0x29BFD:là 0x29C00:chōng 0x29C03:zhàn 0x29C0D:biàn 0x29C0E:wēng 0x29C13:hòng 0x29C17:pīn 0x29C19:sè 0x29C1E:nǐ 0x29C1F:fēn 0x29C20:xǔ 0x29C22:shǐ 0x29C24:jù 0x29C28:jué 0x29C2A:yù 0x29C2C:guō,wāi 0x29C2D:guō 0x29C2F:hú 0x29C32:lì,fèi 0x29C33:xié 0x29C34:ér 0x29C35:yuán 0x29C36:hái,bèn 0x29C39:jìng 0x29C3B:kè 0x29C3D:zōng 0x29C3E:fèi 0x29C40:pēng 0x29C41:gēng 0x29C43:jiān 0x29C44:ní 0x29C46:xián 0x29C47:lì 0x29C48:chǎo 0x29C4A:ér,xiàn 0x29C4B:gēng,pēng 0x29C4C:yù 0x29C4D:hú 0x29C4E:fèi 0x29C4F:áo 0x29C53:ěr 0x29C58:kè 0x29C59:kù 0x29C5A:bó 0x29C5D:yè 0x29C5E:jiào 0x29C66:chǎo 0x29C67:gēng 0x29C68:rù 0x29C6A:yuè 0x29C6C:lín 0x29C71:yù 0x29C72:yuè 0x29C73:zhāi 0x29C74:xiāo 0x29C77:miè 0x29C7B:guǐ 0x29C7C:jiū 0x29C7E:tuò 0x29C81:xí 0x29C82:wěi 0x29C83:zhuó 0x29C84:wèi 0x29C85:kuí 0x29C88:mèi,wéi 0x29C8A:hào 0x29C8B:hāng 0x29C8C:fāng 0x29C8D:niú 0x29C8E:yòu 0x29C8F:huà 0x29C92:làng 0x29CA0:zhú 0x29CA1:guǐ 0x29CA2:bì,mèi 0x29CA3:jiǎ 0x29CA4:tiáo 0x29CA6:lǜ 0x29CA7:kǒng 0x29CA8:zuǐ 0x29CA9:líng 0x29CAA:qí 0x29CAC:zhú 0x29CB1:gǔ 0x29CB2:zù 0x29CB4:yāng 0x29CB5:sū 0x29CB7:kuí 0x29CB9:chāng 0x29CBB:yáo 0x29CBE:yù 0x29CC5:shū 0x29CC6:lài 0x29CC7:yì 0x29CC8:dōu 0x29CCC:wú 0x29CCD:yǐng 0x29CCE:fú 0x29CCF:zhuàn 0x29CD0:fǔ 0x29CD2:sù 0x29CD3:lǐ 0x29CD4:yào 0x29CD5:tuì,tì 0x29CDD:guì 0x29CE1:lǜ 0x29CE2:yàn 0x29CE3:qí 0x29CE4:làng,chāng 0x29CE5:zhú 0x29CE7:guǐ 0x29CE8:hū 0x29CEF:jīng 0x29CF2:chǐ 0x29CF5:jú 0x29CF6:zhá 0x29CF8:miáo 0x29D00:zhū 0x29D01:gān 0x29D02:xiōng 0x29D03:jí 0x29D07:shài 0x29D08:mèi 0x29D09:yùn 0x29D0D:shòu 0x29D10:lǜ 0x29D11:yòu 0x29D12:jiàng 0x29D13:nuó 0x29D18:jù 0x29D19:yòu 0x29D1C:yì 0x29D1D:téng 0x29D1E:wéi 0x29D1F:chě 0x29D20:lìn 0x29D21:gù 0x29D23:lì 0x29D24:liào 0x29D27:jiāo 0x29D28:yáng 0x29D29:biāo 0x29D2A:qí 0x29D2E:yì 0x29D31:bīn 0x29D32:méng 0x29D33:chà 0x29D35:gān 0x29D39:qú 0x29D3A:dí 0x29D3B:léi 0x29D40:líng 0x29D44:huān 0x29D45:qú 0x29D47:luó 0x29D49:kuí 0x29D4D:qiú 0x29D4E:yǔ,yú 0x29D4F:huà 0x29D53:lèi 0x29D55:rèn,dāo 0x29D56:xiǎo 0x29D57:sì 0x29D5A:dù 0x29D5B:biē 0x29D60:niú,wěi 0x29D62:hè,zā 0x29D63:pēi 0x29D65:fèi 0x29D66:mù 0x29D69:fū 0x29D6C:hú 0x29D6D:wáng 0x29D6E:shā,xiǎo 0x29D70:jiāo,qiū 0x29D71:wǔ 0x29D79:fù 0x29D81:bǐng 0x29D82:zhù 0x29D84:zhú 0x29D85:chī 0x29D87:shěn 0x29D88:hū 0x29D89:bū 0x29D8E:rǎn 0x29D96:mù 0x29D98:lì 0x29D9B:jiā 0x29D9E:mà,háng 0x29DA1:méng 0x29DA2:móu 0x29DA3:zhōu 0x29DA4:xiǎn 0x29DA5:huǐ,hóng 0x29DA6:guài 0x29DA7:jiù 0x29DA9:mù 0x29DAB:rù,xuè 0x29DAD:wú 0x29DAF:rú 0x29DB1:zhà 0x29DC1:nuǒ 0x29DC2:xié 0x29DC4:jiàng 0x29DCB:lǐ 0x29DCC:shū 0x29DCD:yì 0x29DCE:dí 0x29DCF:qíng 0x29DD0:jú 0x29DD3:zhì 0x29DD5:láng 0x29DD6:bù 0x29DD7:kuáng 0x29DD8:yì 0x29DDA:bó 0x29DE7:chì 0x29DED:jiàng 0x29DEF:wò 0x29DF0:xùn 0x29DF5:tūn 0x29DF6:máng 0x29DF8:fáng 0x29DF9:zhuó 0x29DFB:qià 0x29DFD:tǎ 0x29DFE:qí 0x29E00:pèng 0x29E01:biē 0x29E02:fèn,pèn 0x29E03:tù 0x29E04:huà 0x29E07:è 0x29E0B:è,yā 0x29E0E:dìng 0x29E10:rú 0x29E16:è 0x29E1E:yàn,qí 0x29E1F:sì 0x29E25:yíng 0x29E26:ní 0x29E27:ní 0x29E28:yí 0x29E39:mí 0x29E3E:yé 0x29E3F:pō 0x29E40:còu 0x29E42:wèi 0x29E44:hài 0x29E45:yīng 0x29E47:tíng 0x29E48:zhì 0x29E49:fēi 0x29E4A:yóu 0x29E4D:kuí 0x29E4E:àn 0x29E4F:bà 0x29E51:hàn 0x29E5E:nán 0x29E5F:nài 0x29E62:jīng 0x29E65:wēi 0x29E71:chù 0x29E73:suǒ 0x29E74:tāo 0x29E75:qí 0x29E76:táng 0x29E77:wěi 0x29E78:gǎn 0x29E7A:gé 0x29E7C:hàn 0x29E7E:nà 0x29E7F:gé 0x29E84:zhēng 0x29E97:tǎ,dá 0x29E9B:sī 0x29E9D:nì 0x29E9E:sǎng 0x29EAB:xié 0x29EAF:zú 0x29EB0:yú,wú 0x29EB1:nì 0x29EB2:qī 0x29EB5:shēn 0x29EBC:bū 0x29ECB:kūn 0x29ECC:lí 0x29ECE:guā 0x29ED6:yǎn 0x29ED7:bù 0x29ED8:jiàn 0x29EDA:wú 0x29EDB:cén,jīn 0x29EDC:lín 0x29EDD:zhuàn 0x29EDF:huī 0x29EE1:tóng 0x29EE2:zhǎ 0x29EE4:hēi 0x29EE7:guǒ 0x29EF1:jǐng 0x29EF5:dié 0x29EF7:yíng 0x29EFC:zhì 0x29F02:wěi 0x29F04:jì 0x29F05:rǒng 0x29F08:ào,yǒu 0x29F09:dāng,hān 0x29F0A:luó 0x29F0B:yè 0x29F0C:wēi 0x29F12:qiáng 0x29F19:gé 0x29F1A:jì 0x29F26:zòu 0x29F28:yí 0x29F2B:zhǎ 0x29F2D:liè 0x29F34:yè 0x29F3C:zhān 0x29F40:chóu 0x29F41:biāo 0x29F46:xù 0x29F47:yōu 0x29F4D:xiè 0x29F4E:wéi 0x29F4F:lì 0x29F5B:bó 0x29F5C:jiǎn 0x29F5D:chán 0x29F5E:kūn 0x29F61:qíng 0x29F67:shuāng 0x29F68:xī 0x29F69:qú 0x29F70:luó 0x29F73:dǎng 0x29F74:nián 0x29F75:lǐ 0x29F77:bà 0x29F79:è 0x29F7A:fū 0x29F7B:fù 0x29F7C:hǔn 0x29F7D:zhà 0x29F7E:ān 0x29F81:qiú 0x29F82:chóu 0x29F83:miǎn 0x29F84:xùn 0x29F85:tù 0x29F86:ní 0x29F87:hu 0x29F88:shū 0x29F8A:xū 0x29F8B:zhòng 0x29F8C:kāng 0x29F92:xiāo 0x29F93:xiāo 0x29F94:cì 0x29F95:chì 0x29F97:diāo,jiāo 0x29F98:yì 0x29F9A:dīng 0x29F9D:hàn,yàn 0x29F9E:wán 0x29FA0:yǐ 0x29FA1:bào 0x29FA2:yì,yuān 0x29FA7:xùn 0x29FAC:xiáng 0x29FB3:bí 0x29FB6:jié 0x29FB7:gē 0x29FB8:zè,yàn 0x29FBA:zhèn 0x29FBB:hú 0x29FBC:xī 0x29FBD:xīn 0x29FBE:xiāo,jiāo 0x29FBF:fù 0x29FC0:zhòng 0x29FC2:mào 0x29FC3:xīn 0x29FC4:qiāng 0x29FC8:fén,fēn 0x29FC9:bān 0x29FCA:huān 0x29FD1:jiāo 0x29FD3:bào 0x29FD4:yā 0x29FD5:yáo 0x29FDB:xì 0x29FDD:jù 0x29FDF:qù 0x29FE0:yuè 0x29FE1:tái 0x29FE2:tǒu 0x29FE3:mò 0x29FE4:zhá 0x29FE5:qú 0x29FE7:fū 0x29FE9:qú,duó 0x29FEA:chì 0x29FEC:yóu 0x29FF7:tí 0x29FFA:wā 0x29FFD:tuó 0x29FFF:chú 0x2A001:gē 0x2A008:yuān 0x2A009:gē,kě 0x2A00A:qú 0x2A00F:jù,jiū 0x2A012:dié 0x2A013:yí 0x2A014:shī 0x2A015:yì 0x2A017:guǐ 0x2A018:jiàng 0x2A01A:sōng 0x2A01B:qióng 0x2A01D:è,yuān 0x2A01E:huāng 0x2A01F:huí 0x2A020:xún 0x2A023:jú 0x2A025:zhái 0x2A026:chì 0x2A027:lǎo 0x2A029:qí,dàn,chú 0x2A02A:xiū 0x2A02C:huī 0x2A02D:tóng 0x2A03A:fù 0x2A03D:xún,xīn 0x2A03E:jié 0x2A03F:mǐ 0x2A040:yù 0x2A048:zhuāng,zhuàng 0x2A049:jiāo 0x2A04A:zhì,zhé 0x2A04B:chéng 0x2A04D:jié 0x2A04E:xiāo 0x2A04F:chén 0x2A050:lí 0x2A051:yuè 0x2A053:zhì 0x2A054:láo 0x2A055:wò 0x2A056:qú 0x2A058:wāng 0x2A05A:yī 0x2A05B:yì 0x2A05C:láng 0x2A05E:tóu 0x2A05F:ān,hàn 0x2A060:jué 0x2A061:yàn 0x2A065:jù 0x2A067:zhèn,chén 0x2A069:zhì,tí 0x2A06A:mǎng 0x2A06E:xiù 0x2A071:chuáng 0x2A072:chū 0x2A078:qiāng 0x2A079:fēi 0x2A07A:cháng,chǎng 0x2A07C:mián 0x2A07D:sù 0x2A07E:ǎo,wò 0x2A080:fǔ 0x2A084:wèi 0x2A085:zhī 0x2A086:mín 0x2A087:chāng 0x2A088:yán 0x2A089:yù 0x2A08B:fù 0x2A08C:tà 0x2A08D:jǐ 0x2A08F:fèi 0x2A092:hú 0x2A093:jū 0x2A095:yǔ 0x2A09B:qí 0x2A09C:méi 0x2A09F:biē 0x2A0A0:guǒ 0x2A0A4:mìng 0x2A0A6:wǎn,yuān 0x2A0A7:wǎn 0x2A0B4:jīng 0x2A0B5:yù 0x2A0B6:xián 0x2A0B9:chūn 0x2A0BA:jí 0x2A0BC:xiāng 0x2A0BD:pén 0x2A0BE:fù 0x2A0C2:liú 0x2A0C4:sāi 0x2A0C5:xuē 0x2A0C6:zòu 0x2A0C8:jié 0x2A0CB:zhān,jiān 0x2A0CD:yú 0x2A0CE:yú 0x2A0CF:méi 0x2A0D0:miǎo 0x2A0D1:mào 0x2A0D2:duó 0x2A0D3:fù 0x2A0DB:jiàn 0x2A0E6:miáo 0x2A0E8:āo 0x2A0ED:kè 0x2A0F6:hóu 0x2A0FA:gòu 0x2A0FC:xī 0x2A0FE:róng 0x2A0FF:gē 0x2A100:pán 0x2A101:yuán 0x2A102:xià 0x2A105:shā 0x2A106:pī,pí 0x2A108:qíng 0x2A109:yōng 0x2A10A:qú 0x2A10C:gòng 0x2A10E:gé 0x2A10F:xiān 0x2A111:sù 0x2A115:bān 0x2A116:qí 0x2A117:hòu 0x2A11B:xī 0x2A11D:wū 0x2A12D:qī 0x2A12E:hù,gù 0x2A12F:guī 0x2A131:dí 0x2A132:shāng 0x2A133:mài 0x2A134:mǐn 0x2A135:jì 0x2A136:xí 0x2A137:xiān 0x2A138:jí 0x2A139:cháng 0x2A13A:kòu 0x2A13B:chōng,zhuāng 0x2A142:zhāng 0x2A143:piǎo,piāo 0x2A144:sù 0x2A145:lüè 0x2A146:lí 0x2A147:mèng 0x2A148:chōng 0x2A149:tiān 0x2A14B:líng 0x2A14D:chì 0x2A156:chōng,zhuāng 0x2A159:chì 0x2A15D:niǎo 0x2A15F:yóng 0x2A16E:mì 0x2A170:shū 0x2A172:xì 0x2A174:è 0x2A175:zī 0x2A178:jié 0x2A179:jī 0x2A17A:hōu 0x2A17B:shèng 0x2A17C:lì 0x2A17E:qī 0x2A180:zhōu 0x2A181:sī 0x2A182:qú 0x2A18B:xié 0x2A197:sī 0x2A19B:xū 0x2A1A0:fù 0x2A1AF:nóng 0x2A1B0:yà 0x2A1B1:liú 0x2A1B2:jiǎ,zhān 0x2A1B3:guī 0x2A1B4:kuí 0x2A1B5:chì 0x2A1B6:càn 0x2A1B7:chú 0x2A1B9:guō 0x2A1BB:dǎn 0x2A1BF:jiàn 0x2A1C1:dāng 0x2A1C2:hòu 0x2A1C4:kòu,kū 0x2A1C6:chù,dú 0x2A1C7:qiān 0x2A1C8:ài 0x2A1CA:pì 0x2A1D1:xùn 0x2A1D2:jīng 0x2A1D3:mèng 0x2A1D5:bīn 0x2A1D6:lán 0x2A1D7:gǔ 0x2A1D8:chóu,táo 0x2A1DB:yōng 0x2A1DC:guá 0x2A1DD:yú 0x2A1DE:zhòu 0x2A1ED:cài 0x2A1EF:liú 0x2A1F0:bǔ 0x2A1F1:luò 0x2A1F2:jié 0x2A1F3:zhēn 0x2A1F4:miè 0x2A1F5:guǎng 0x2A1F7:jiá 0x2A1F9:là 0x2A200:shòu 0x2A203:guō 0x2A206:mèng 0x2A207:qián 0x2A208:lài 0x2A20A:hé 0x2A20B:tuán 0x2A211:huī 0x2A218:hōng 0x2A21C:lǚ 0x2A21F:jiá 0x2A225:guī 0x2A228:yī 0x2A229:huān 0x2A230:luó 0x2A234:jué 0x2A238:guàn 0x2A23B:quán 0x2A23C:niǎo 0x2A23F:mán 0x2A242:yùn 0x2A243:wén 0x2A244:chì 0x2A245:chì 0x2A246:zhī 0x2A248:cí 0x2A249:zhuàng 0x2A24A:huá 0x2A24B:jié 0x2A24C:qú 0x2A24D:tū 0x2A24E:mín 0x2A24F:méi 0x2A250:yú 0x2A251:áo 0x2A252:bān 0x2A254:pī 0x2A255:zhēn 0x2A256:lǔ 0x2A257:chì 0x2A258:tóu 0x2A25A:jiē 0x2A25C:zhān 0x2A262:jīn 0x2A263:lǔ 0x2A266:jiàn,jiǎn,gàn 0x2A267:tàn 0x2A268:chāng 0x2A26A:cì 0x2A26D:wāi 0x2A26E:còu 0x2A26F:kàn 0x2A271:biàn 0x2A278:wēn 0x2A27B:qiān 0x2A27F:gàn 0x2A282:huì 0x2A284:gǎn,gàn 0x2A286:jì 0x2A287:gàn,tàn 0x2A289:huái 0x2A28D:sì 0x2A290:fū 0x2A295:pí 0x2A297:cā 0x2A29C:bèn 0x2A2A2:shí,shǐ 0x2A2A5:huán 0x2A2A7:guī 0x2A2AA:ǒu 0x2A2B3:páo 0x2A2B5:yǐng 0x2A2B6:tǐng 0x2A2B7:xiào 0x2A2B9:zhù 0x2A2BB:yú 0x2A2C1:jiàn 0x2A2C4:qǔ 0x2A2C5:wǎn 0x2A2C6:kūn 0x2A2C7:zhuī 0x2A2C9:yù 0x2A2CA:guǒ 0x2A2CB:píng 0x2A2CC:zuǐ 0x2A2CD:zú 0x2A2CF:zhū 0x2A2D0:nuàn 0x2A2D1:zhū 0x2A2D6:piāo 0x2A2D7:mí 0x2A2DC:bì 0x2A2DD:sù 0x2A2E1:pú 0x2A2E2:mí 0x2A2EB:yè 0x2A2EC:yǔ 0x2A2EE:yù 0x2A2F0:zhǔ 0x2A2F3:líng 0x2A2FA:nòu 0x2A2FE:líng 0x2A300:liǎo 0x2A302:tuō 0x2A304:bǐ 0x2A305:nà 0x2A306:qú 0x2A308:pí 0x2A309:dǒu 0x2A30A:niè 0x2A30B:tún 0x2A30D:jī 0x2A30F:líng 0x2A313:kù 0x2A314:sù 0x2A318:tǒu 0x2A31E:nái 0x2A31F:zé 0x2A322:tǒng 0x2A323:gé 0x2A324:duī 0x2A327:jié 0x2A329:tián 0x2A32A:tiào 0x2A32B:chí 0x2A32C:qū,chǎo 0x2A32E:shā,suō 0x2A330:bó 0x2A331:lí 0x2A333:luò 0x2A335:liáo 0x2A336:shù 0x2A337:děng 0x2A339:chī 0x2A33A:miè 0x2A33C:táo 0x2A33D:hún 0x2A33F:nié 0x2A341:jùn 0x2A342:hù 0x2A344:lù 0x2A345:yè 0x2A347:mò,chǎo,mài 0x2A348:chào 0x2A34C:suò 0x2A34E:kē 0x2A34F:fù 0x2A351:chǎo 0x2A354:suǒ 0x2A357:qiū 0x2A35B:sù,xiè 0x2A35D:yùn 0x2A35F:suǒ 0x2A360:kū 0x2A361:bó 0x2A363:lǒu 0x2A364:mò 0x2A366:liǎn 0x2A367:xuàn 0x2A368:suǒ 0x2A369:mán 0x2A36A:bì 0x2A372:tì 0x2A374:lián 0x2A375:tán 0x2A376:shàn 0x2A378:qú 0x2A379:dú 0x2A37A:huán,huàn 0x2A37B:sào 0x2A37F:kuàng 0x2A383:niè 0x2A385:niè 0x2A386:luó 0x2A387:zuó 0x2A388:yì 0x2A389:xiàn 0x2A38A:chǎo 0x2A38B:tiè 0x2A392:shuò 0x2A394:mǐ 0x2A397:mí 0x2A39B:wǎn 0x2A39D:bèn 0x2A39E:qiāng 0x2A3A0:mǒ 0x2A3A3:liú 0x2A3A4:wò 0x2A3A6:měi 0x2A3A8:tóu 0x2A3AB:mǔ 0x2A3AD:méi 0x2A3B2:zuò 0x2A3B4:tún 0x2A3B5:kàng 0x2A3B6:tún 0x2A3BA:chè 0x2A3BB:zhèng 0x2A3BD:chōng 0x2A3BE:tiān 0x2A3C0:zhì 0x2A3C1:chán 0x2A3C2:chán 0x2A3C5:qīng 0x2A3C6:tūn 0x2A3C7:huǐ 0x2A3C8:què 0x2A3C9:zhān 0x2A3CA:jiān,miǎn 0x2A3CB:chán 0x2A3CD:huáng 0x2A3CF:huī 0x2A3D0:chí 0x2A3D2:huáng 0x2A3D3:héng 0x2A3D4:yǔn 0x2A3D6:tuān 0x2A3D7:biān 0x2A3D9:huáng 0x2A3DA:yǔn 0x2A3DF:mò 0x2A3E0:gōng 0x2A3E2:gōng 0x2A3E4:guì 0x2A3E6:chán 0x2A3E8:què 0x2A3E9:ruì 0x2A3EA:kuàng 0x2A3EB:piào 0x2A3EE:rǔ 0x2A3F2:niǔ 0x2A3F3:hù 0x2A3F4:jǐn 0x2A3F5:nì,lí 0x2A3F6:bào 0x2A3F8:nǐ,chī 0x2A3FA:bì 0x2A3FB:hú 0x2A3FC:lí 0x2A3FF:zhū 0x2A400:nǎ 0x2A402:quǎn 0x2A403:fěng 0x2A404:bǐ 0x2A405:lí 0x2A406:bié 0x2A407:nián 0x2A408:dǒng 0x2A40B:lián 0x2A40C:nì 0x2A40D:lián 0x2A40E:má 0x2A40F:zhé,zhí 0x2A413:jiā 0x2A414:yí 0x2A416:lǒng 0x2A418:yì,yān 0x2A41D:dài,tài 0x2A41E:dù 0x2A423:yǐ 0x2A425:tài 0x2A426:hāng 0x2A427:shù 0x2A42C:wán 0x2A42E:sù 0x2A42F:yǎo 0x2A430:èr 0x2A432:zhèn 0x2A43A:dòu 0x2A43B:jiān 0x2A43F:pāng 0x2A440:huī 0x2A442:chà 0x2A443:shān 0x2A444:lú 0x2A446:yù 0x2A448:yàn 0x2A449:wǎn 0x2A44A:qiào 0x2A44B:luō 0x2A44C:yù 0x2A44F:tú 0x2A450:wèi 0x2A452:tùn 0x2A455:hǔn 0x2A456:bēn 0x2A457:qiè 0x2A459:jīn,qián 0x2A45A:lái,lí 0x2A45C:zhǐ 0x2A45D:yú 0x2A45F:cì 0x2A466:yè 0x2A467:dié 0x2A468:chà 0x2A469:diàn 0x2A46A:mán 0x2A46C:dèng 0x2A46D:wēi 0x2A46E:niǎn 0x2A46F:lèi 0x2A470:bīng 0x2A471:wū,wò 0x2A473:zhěn 0x2A476:róu 0x2A477:wài 0x2A478:mì,yān 0x2A479:jiè 0x2A47B:hóu 0x2A47D:zhài 0x2A47E:rǔ 0x2A47F:zī 0x2A480:pán 0x2A482:mò 0x2A484:mì 0x2A486:qī 0x2A487:mò 0x2A48A:zhī 0x2A48B:bān,pán 0x2A48D:miè 0x2A48F:lù 0x2A491:qī 0x2A492:chōng 0x2A494:lí 0x2A495:yì 0x2A498:dèng 0x2A499:cuō 0x2A49B:duì 0x2A49C:mà 0x2A49D:yǎn 0x2A49F:zèng 0x2A4A0:yǎn,ǎn,àn 0x2A4A1:duì,dài 0x2A4A2:pū 0x2A4A5:yuè 0x2A4A9:huò 0x2A4AA:mài 0x2A4AB:jiǎn 0x2A4AC:nóng 0x2A4AD:qín 0x2A4AF:qín 0x2A4B2:yè 0x2A4B4:tái 0x2A4B9:jiān 0x2A4BC:chá 0x2A4BE:dàn 0x2A4BF:téng 0x2A4C0:lì 0x2A4C3:niǎng 0x2A4C4:chán 0x2A4C5:zāng 0x2A4CA:yù 0x2A4CC:zuì 0x2A4CD:biān 0x2A4D0:chǔ 0x2A4D8:rán 0x2A4DA:rán 0x2A4DB:yāng 0x2A4DC:bǒ 0x2A4E1:cù 0x2A4EC:mí 0x2A4EE:kě 0x2A4F0:cù 0x2A4F7:xí 0x2A4F9:má 0x2A4FB:shī 0x2A4FC:diān 0x2A4FF:shī 0x2A502:dǐng 0x2A503:jiōng 0x2A505:yuán 0x2A506:gān 0x2A50A:huì 0x2A50B:jī 0x2A50D:péng 0x2A50F:dēng 0x2A511:bèng 0x2A514:pāng,péng 0x2A515:tà,lóng 0x2A517:yuān 0x2A518:gāo 0x2A519:yuān 0x2A51F:jiā 0x2A523:kōng 0x2A526:dòng 0x2A529:xián 0x2A52A:qì 0x2A52C:sāng 0x2A530:yìn 0x2A533:lóng 0x2A536:tēng 0x2A537:lóng 0x2A53A:rèn 0x2A53D:yìn 0x2A53E:píng 0x2A53F:pū 0x2A540:yuán 0x2A541:rǒng,chén 0x2A543:fāng 0x2A547:hāng 0x2A548:mí 0x2A549:hú 0x2A54A:zī 0x2A54C:líng 0x2A54D:jiōng 0x2A54E:rǒng 0x2A552:píng 0x2A553:guāng 0x2A554:ěr 0x2A55D:cù 0x2A55E:jùn 0x2A566:xiǔ 0x2A568:ér 0x2A569:tì 0x2A56B:yáng 0x2A56D:ài 0x2A56E:hú 0x2A56F:xí,xié 0x2A571:hú 0x2A573:sī 0x2A574:lǐ 0x2A576:yì 0x2A577:gǔ 0x2A579:táng 0x2A580:què 0x2A581:zōng 0x2A582:lí 0x2A584:jiào 0x2A587:fán 0x2A588:pú 0x2A589:sī 0x2A58B:jié 0x2A58C:lú 0x2A58D:lì 0x2A58E:chán 0x2A590:yào,yà 0x2A595:huī 0x2A599:hōu 0x2A59A:diān 0x2A59B:qiù 0x2A59C:jué 0x2A59E:pì 0x2A5A2:kuī 0x2A5A5:xǐ 0x2A5A6:tī 0x2A5A9:xù 0x2A5AF:biǎn 0x2A5B2:hē 0x2A5B3:lián 0x2A5B6:sù 0x2A5B7:liào 0x2A5BC:jīn 0x2A5C1:lì 0x2A5C2:chán 0x2A5C5:qí 0x2A5C6:qí 0x2A5C9:zī 0x2A5CB:zī 0x2A5CD:qí 0x2A5CF:qí 0x2A5D0:zī 0x2A5D2:zhāi 0x2A5D3:zhāi 0x2A5D4:pà 0x2A5D6:jū 0x2A5D9:yǎn 0x2A5DC:háng 0x2A5DD:nà 0x2A5E4:yǎn 0x2A5E6:zhàn 0x2A5E7:shǐ 0x2A5E8:zhí 0x2A5ED:zhā 0x2A5F4:rǒng 0x2A5F5:zhā 0x2A5F7:yì 0x2A5F8:míng 0x2A5F9:yá 0x2A5FB:zhì 0x2A5FD:kuò,huá 0x2A5FE:xiá 0x2A600:pián 0x2A601:tà,xiá 0x2A603:yǐ 0x2A606:xiū 0x2A607:zhāi 0x2A609:duǒ 0x2A60A:è 0x2A60E:yín,niè 0x2A610:è 0x2A611:suān 0x2A612:ān 0x2A613:cuó 0x2A615:tuó 0x2A617:tuó 0x2A618:xiá 0x2A61B:chuò 0x2A61D:suān 0x2A625:jì 0x2A626:qiǎn 0x2A627:zú 0x2A628:zhāi 0x2A629:yǔn,kǔn 0x2A62A:zhàn 0x2A62C:yí,yà,yá 0x2A632:yá,yí,yà,cī 0x2A633:yuē 0x2A639:hé 0x2A63A:qià 0x2A63E:chā 0x2A643:óu 0x2A648:hú 0x2A64A:yàn 0x2A64C:qiè 0x2A64D:bó 0x2A64E:qiāng 0x2A64F:jiè,jiá 0x2A65B:nì 0x2A65E:chǎn 0x2A65F:qǐn 0x2A661:zāo 0x2A664:yǐn 0x2A665:xiè 0x2A667:qí 0x2A668:jiàn,jiān 0x2A66B:xū 0x2A66D:zèng 0x2A66F:è 0x2A673:zū 0x2A674:yǐ 0x2A679:zhí 0x2A67A:lì 0x2A67D:lì 0x2A67E:yín 0x2A681:lián 0x2A683:chán 0x2A685:jué 0x2A687:zá 0x2A68E:zhāi 0x2A68F:pián 0x2A691:lóng 0x2A693:lóng 0x2A698:lóng 0x2A69D:lóng 0x2A6A0:lóng 0x2A6A2:mǎng 0x2A6A5:zhé 0x2A6AC:gàn 0x2A6AD:gōu 0x2A6AE:rán 0x2A6AF:cù 0x2A6B0:jiāo 0x2A6B7:bǒ 0x2A6B9:zhù 0x2A6BA:qiū 0x2A6BB:yāng 0x2A6C0:xiào 0x2A6C2:huí 0x2A6C3:qū 0x2A6C8:líng 0x2A6CA:yín 0x2A6CE:pì 0x2A6D2:lián 0x2A79D:duó 0x2A7DD:jì,jī 0x2A848:bái 0x2A84F:zhān 0x2A8AE:luán 0x2A8FB:lóu 0x2A917:liào 0x2AA0A:sóng 0x2AA17:juē 0x2AA30:qū 0x2AA36:shē 0x2AA58:yǎn 0x2AA9D:yōng 0x2AEB9:nǔ 0x2AED0:cōng 0x2AFA2:xiàn 0x2B061:lì 0x2B088:fèi 0x2B099:sù 0x2B0DC:kòu 0x2B127:yán 0x2B128:chī 0x2B137:yì 0x2B138:xūn 0x2B1ED:wěi 0x2B230:qià 0x2B2D0:gǒng 0x2B300:jī 0x2B328:luó 0x2B359:yì 0x2B35F:yí 0x2B362:náo 0x2B363:tóng 0x2B36F:xián 0x2B370:xǐ 0x2B372:xiǎo 0x2B37D:xuān 0x2B3CB:juē,qiāo 0x2B404:yuè 0x2B406:kuài 0x2B409:líng 0x2B410:ní 0x2B413:bù 0x2B461:méng 0x2B4B6:hán 0x2B4E7:fū 0x2B4E9:cōng 0x2B4EF:jī 0x2B4F6:xuān 0x2B4F9:jī 0x2B50D:fán 0x2B50E:jué 0x2B536:niè 0x2B5AE:yǐ 0x2B5AF:fǔ 0x2B5B3:yūn 0x2B5E0:zhāng 0x2B5E6:bù 0x2B5E7:sù 0x2B5EE:huáng 0x2B5F4:zhān 0x2B61C:wén 0x2B61D:jué 0x2B623:hàn 0x2B624:ái 0x2B626:táo 0x2B627:lù 0x2B628:tí 0x2B62A:yuán 0x2B62C:xí 0x2B688:xù 0x2B689:hóng 0x2B692:fú 0x2B694:huí 0x2B695:shī 0x2B696:cǐ 0x2B699:pū 0x2B6AD:liè 0x2B6DB:zhī 0x2B6DE:jué 0x2B6E2:níng 0x2B6ED:kuáng 0x2B6F6:chì 0x2B6F8:tí 0x2B7A9:mén 0x2B7C5:liáng 0x2B7E6:suì 0x2B7F7:lì 0x2B7F9:hóng 0x2B7FC:dá 0x2B806:kuǐ 0x2B80A:xuán 0x2B81C:ní 0x2B851:yīn 0x2B8B8:dàn 0x2BAC7:ě,è 0x2BB5F:ōu 0x2BB62:lǔn 0x2BB7C:láo 0x2BB83:shàn 0x2BC1B:xíng 0x2BD77:lì 0x2BD87:dié 0x2BDF7:xīn 0x2BE29:kōu 0x2C029:wěi 0x2C02A:xiàn 0x2C0A9:jiā 0x2C0CA:zhì 0x2C1D5:wàn 0x2C1D9:pèi,bèi 0x2C1F9:guó 0x2C27C:ōu,ǒu 0x2C288:xún 0x2C2A4:chǎn 0x2C317:hé 0x2C35B:lì 0x2C361:dàng 0x2C364:xún 0x2C488:què 0x2C494:gěng 0x2C497:lán 0x2C4FC:tuí 0x2C542:gōng,lǒng 0x2C613:xún 0x2C618:dǎn 0x2C621:yīn 0x2C629:tīng 0x2C62B:huán 0x2C62C:qiàn 0x2C62D:lín,chēn 0x2C62F:zhǔn 0x2C642:yǎn 0x2C64A:mò 0x2C64B:xiāng 0x2C72C:màn 0x2C72F:liǎng 0x2C79F:pín 0x2C7C1:yì 0x2C7FD:dōng 0x2C8D9:xū 0x2C8DE:zhǔ 0x2C8E1:jiàn 0x2C8F3:hěn 0x2C907:yīn 0x2C90A:shì 0x2C91D:huì 0x2C925:zhuàn 0x2CA02:qí 0x2CA0E:yóu 0x2CA7D:xún 0x2CAA9:nóng 0x2CB29:yì 0x2CB2D:lún 0x2CB2E:chǎng 0x2CB31:jīn 0x2CB38:shù 0x2CB39:shén 0x2CB3B:lú 0x2CB3F:zhāo 0x2CB41:mǔ 0x2CB4A:dù 0x2CB4E:hóng 0x2CB5A:chún 0x2CB5B:bō 0x2CB64:hóu 0x2CB69:wēng 0x2CB6C:wèi,huì 0x2CB6F:piě 0x2CB73:xǐ 0x2CB76:hēi 0x2CB78:lín 0x2CB7C:suì 0x2CBB1:yīn 0x2CBBF:qí,gài 0x2CBC0:jī 0x2CBCE:tuí 0x2CC56:dí 0x2CC5F:wěi 0x2CCF5:pī 0x2CCF6:jiōng 0x2CCFD:shēn 0x2CCFF:tú 0x2CD02:fēi 0x2CD03:huō 0x2CD0A:lín 0x2CD8B:jū 0x2CD8D:tuó 0x2CD8F:wéi 0x2CD90:zhào 0x2CD9F:là 0x2CDA0:liàn 0x2CDA8:jì 0x2CDAD:jì 0x2CDAE:xǐ 0x2CDD5:bū,bǔ 0x2CE18:yǎn 0x2CE1A:yuè 0x2CE23:xiān 0x2CE26:zhuó 0x2CE2A:fán 0x2CE7C:xiè 0x2CE88:yǐ 0x2CE93:chǔ 0x30EDD:biáng 0x30EDE:biángdde-calendar-5.14.13/calendar-service/assets/resources.qrc000066400000000000000000000002561473346337000234370ustar00rootroot00000000000000 pinyin.dict holiday-cn/2023.json holiday-cn/2024.json dde-calendar-5.14.13/calendar-service/src/000077500000000000000000000000001473346337000202005ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-service/src/alarmManager/000077500000000000000000000000001473346337000225675ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-service/src/alarmManager/dalarmmanager.cpp000066400000000000000000000257741473346337000261050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dalarmmanager.h" #include "commondef.h" #include "csystemdtimercontrol.h" #include "dbus/dbusnotify.h" #include #define Millisecond 1 #define Second 1000 * Millisecond #define Minute 60 * Second #define Hour 60 * Minute static QString notifyActKeyDefault("default"); static QString notifyActKeyClose("close"); static QString notifyActKeyRemindLater("later"); static QString notifyActKeyRemindAfter15mins("later-15mins"); static QString notifyActKeyRemindAfter1hour("later-1hour"); static QString notifyActKeyRemindAfter4hours("later-4hours"); static QString notifyActKeyRemind1DayBefore("one-day-before"); static QString notifyActKeyRemindTomorrow("tomorrow"); static QString layoutHM("15:04"); DAlarmManager::DAlarmManager(QObject *parent) : QObject(parent) { m_dbusnotify = new DBusNotify("org.deepin.dde.Notification1", "/org/deepin/dde/Notification1", "org.deepin.dde.Notification1", QDBusConnection::sessionBus(), this); if (!m_dbusnotify->isValid()) { delete m_dbusnotify; m_dbusnotify = new DBusNotify("com.deepin.dde.Notification", "/com/deepin/dde/Notification", "com.deepin.dde.Notification", QDBusConnection::sessionBus(), this); } //若没开启定时任务则开启定时任务 CSystemdTimerControl systemdTimer; systemdTimer.startCalendarServiceSystemdTimer(); } void DAlarmManager::updateRemind(const DRemindData::List &remindList) { qCDebug(ServiceLogger) << "updateRemind" << "list size:" << remindList.size(); if (remindList.size() == 0) return; QString &&accountID = remindList.at(0)->accountID(); CSystemdTimerControl systemdTimerControl; //清空该帐户下日程提醒 systemdTimerControl.stopAllRemindSystemdTimer(accountID); systemdTimerControl.removeRemindFile(accountID); QVector infoVector {}; foreach (auto remind, remindList) { SystemDInfo info; info.accountID = remind->accountID(); info.alarmID = remind->alarmID(); info.laterCount = remind->remindCount(); info.triggerTimer = remind->dtRemind(); infoVector.append(info); } systemdTimerControl.buildingConfiggure(infoVector); } void DAlarmManager::notifyJobsChanged(const DRemindData::List &remindList) { if (remindList.size() == 0) return; CSystemdTimerControl systemdTimerControl; QVector infoVector {}; foreach (auto remind, remindList) { SystemDInfo info; info.accountID = remind->accountID(); info.alarmID = remind->alarmID(); info.laterCount = remind->remindCount(); info.triggerTimer = remind->dtRemind(); infoVector.append(info); } systemdTimerControl.stopSystemdTimerByJobInfos(infoVector); } void DAlarmManager::notifyMsgHanding(const DRemindData::Ptr &remindData, const int operationNum) { switch (operationNum) { case 1: //打开日历 emit signalCallOpenCalendarUI(remindData->alarmID()); break; case 2: //稍后提醒 case 21: //15min后提醒 case 22: //一个小时后提醒 case 23: //四个小时后提醒 case 3: //明天提醒 case 4: //提前一天提醒 remindLater(remindData, operationNum); break; default: break; } } void DAlarmManager::remindLater(const DRemindData::Ptr &remindData, const int operationNum) { CSystemdTimerControl systemdTimerControl; SystemDInfo info; info.accountID = remindData->accountID(); info.alarmID = remindData->alarmID(); //如果是稍后提醒则设置对应的重复次数 if (operationNum == 2) { info.laterCount = remindData->remindCount(); } else { //如果不是稍后提醒,因为次数没有增加所以停止任务的时候需要加一以保证能够停止上次的任务 info.laterCount = remindData->remindCount() + 1; } info.triggerTimer = remindData->dtRemind(); //停止相应的任务 systemdTimerControl.stopSystemdTimerByJobInfo(info); if (operationNum != 2) { //如果不是稍后提醒,还原成原来的提醒次数 info.laterCount--; } QVector infoVector; infoVector.append(info); //开启新任务 systemdTimerControl.buildingConfiggure(infoVector); } int DAlarmManager::remindJob(const DRemindData::Ptr &remindData, const DSchedule::Ptr &schedule) { //如果没有提醒 if (schedule->alarms().size() == 0) { qCWarning(ServiceLogger) << "remind job failed id=%1" << schedule->uid(); return 0; } KCalendarCore::Alarm::Ptr alarm = schedule->alarms().at(0); int nDays = -(alarm->startOffset().asDays()); qint64 duration = 0; bool bmax = getRemindLaterDuration(remindData->remindCount(), duration); QStringList actionlist; QVariantMap hints; QString cmd = QString("dbus-send --session --print-reply --dest=com.deepin.dataserver.Calendar " "/com/deepin/dataserver/Calendar/AccountManager " "com.deepin.dataserver.Calendar.AccountManager.notifyMsgHanding string:%1 string:%2") .arg(remindData->accountID()) .arg(remindData->alarmID()); auto argMake = [&](int operationNum, const QString & text, const QString & transText) { actionlist << text << transText; hints.insert("x-deepin-action-" + text, QString("/bin/bash,-c,%1 int32:%2").arg(cmd).arg(operationNum)); }; QDateTime tm = QDateTime::currentDateTime(); if (tm < schedule->dtStart()) { //如果提醒规则大于3天且是第二次提醒 if (nDays >= 3 && remindData->remindCount() == 1) { //default对应的是默认操作,也就是在点击空白区域会出发的操作 argMake(1, notifyActKeyDefault, ""); argMake(5, notifyActKeyClose, tr("Close", "button")); //当前时间与开始时间间隔大于1天 if (tm < schedule->dtStart().addDays(-1)) argMake(4, notifyActKeyRemind1DayBefore, tr("One day before start")); } else if ((nDays == 1 || nDays == 2) && bmax) { argMake(1, notifyActKeyDefault, ""); argMake(5, notifyActKeyClose, tr("Close", "button")); argMake(3, notifyActKeyRemindTomorrow, tr("Remind me tomorrow")); } else { argMake(1, notifyActKeyDefault, ""); argMake(5, notifyActKeyClose, tr("Close", "button")); argMake(2, notifyActKeyRemindLater, tr("Remind me later")); //后面的actions会在拉列表中显示 argMake(21, notifyActKeyRemindAfter15mins, tr("15 mins later")); argMake(22, notifyActKeyRemindAfter1hour, tr("1 hour later")); argMake(23, notifyActKeyRemindAfter4hours, tr("4 hours later")); argMake(3, notifyActKeyRemindTomorrow, tr("Tomorrow")); } } else { argMake(1, notifyActKeyDefault, ""); argMake(5, notifyActKeyClose, tr("Close", "button")); } QString title(tr("Schedule Reminder")); QString body = getRemindBody(schedule); QString appicon("dde-calendar"); QString appname("dde-calendar"); quint32 replaces_id = 0; qint32 timeout = 0; QList argumentList; argumentList << appname << replaces_id << appicon << title << body << actionlist << hints << timeout; qCDebug(ServiceLogger) << __FUNCTION__ << QString("remind now: %1, title:" " %2, body: %3") .arg(QDateTime::currentDateTime().toString()) .arg(title) .arg(body); int notifyid = m_dbusnotify->Notify(argumentList); return notifyid; } DBusNotify *DAlarmManager::getdbusnotify() { return m_dbusnotify; } QString DAlarmManager::getRemindBody(const DSchedule::Ptr &schedule) { QDateTime tm = QDateTime::currentDateTime(); QString msgStart; QString msgEnd; msgStart = getBodyTimePart(tm, schedule->dtStart(), schedule->allDay(), true); msgEnd = getBodyTimePart(tm, schedule->dtEnd(), schedule->allDay(), false); quint32 startdayofyear = static_cast(schedule->dtStart().date().dayOfYear()); quint32 enddayofyear = static_cast(schedule->dtEnd().date().dayOfYear()); QString prefix; if (schedule->allDay()) { //全天日程 if (startdayofyear == enddayofyear) { //非跨天日程,只展示开始时间 prefix = msgStart; } else { //跨天日程,展示整个日程的时间 prefix = QString(tr("%1 to %2")).arg(msgStart).arg(msgEnd); } } else { //非全天日程 if (startdayofyear == enddayofyear) { //非跨天日程,GetBodyTimePart已经返回了日程的日期,即date,所以,这里只需要日程的结束时间,即time msgEnd = schedule->dtEnd().time().toString("HH:mm"); } //展示日程的开始结束时间 prefix = QString(tr("%1 to %2")).arg(msgStart).arg(msgEnd); } //日程时间+title QString strBody = QString("%1 %2").arg(prefix).arg(schedule->summary()); return strBody; } QString DAlarmManager::getBodyTimePart(const QDateTime &nowtime, const QDateTime &jobtime, bool allday, bool isstart) { Q_UNUSED(isstart); //ToDo 需确认规则,需根据isstart确认是否为开始时间单独处理 QString strmsg; qint64 diff = nowtime.daysTo(jobtime); //jobtime只可能大于等于当前remind任务执行的当前时间 if (allday) { //全天日程,只展示日期,即date //日程开始时间距离现在超过两天 strmsg.append(jobtime.date().toString(Qt::LocalDate)); if (diff == 0) { //日程开始时间是今天 strmsg = tr("Today"); } else if (diff == 1) { //日程开始时间是明天 strmsg = tr("Tomorrow"); } } else { //非全天日程,展示日期和时间,即date time //日程开始时间距离现在超过两天 strmsg.append(QString(" %1").arg(jobtime.toString("yyyy/MM/dd HH:mm"))); if (diff == 0) { //日程开始时间是今天, strmsg = tr("Today") + " " + jobtime.time().toString("HH:mm"); } else if (diff == 1) { //日程开始时间是明天 strmsg = tr("Tomorrow") + " " + jobtime.time().toString("HH:mm"); } } return strmsg; } int DAlarmManager::getRemindLaterDuration(int count, qint64 &duration) { bool bmax = false; duration = (10 + ((count - 1) * 5)) * Minute; //下一次提醒距离现在的时间间隔,单位毫秒 if (duration >= Hour) { bmax = true; duration = Hour; } return bmax; } dde-calendar-5.14.13/calendar-service/src/alarmManager/dalarmmanager.h000066400000000000000000000034571473346337000255440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DALARMMANAGER_H #define DALARMMANAGER_H #include "dreminddata.h" #include "dschedule.h" #include #include class DBusNotify; //日程提醒管理类 class DAlarmManager : public QObject { Q_OBJECT public: typedef QSharedPointer Ptr; explicit DAlarmManager(QObject *parent = nullptr); //更新提醒任务 void updateRemind(const DRemindData::List &remindList); void notifyJobsChanged(const DRemindData::List &remindList); /** * @brief notifyMsgHanding 通知提示框交互处理 * @param remindData 提醒日程相关信息 * @param operationNum 操作编号 * 1:打开日历, * 2:稍后提醒 21:15min后提醒 22:一个小时后提醒 23:四个小时后提醒 * 3:明天提醒 4: 提前1天提醒 */ void notifyMsgHanding(const DRemindData::Ptr &remindData, const int operationNum); void remindLater(const DRemindData::Ptr &remindData, const int operationNum); int remindJob(const DRemindData::Ptr &remindData, const DSchedule::Ptr &schedule); DBusNotify *getdbusnotify(); private: int getRemindLaterDuration(int count, qint64 &duration); //获取日程提醒内容 QString getRemindBody(const DSchedule::Ptr &schedule); QString getBodyTimePart(const QDateTime &nowtime, const QDateTime &jobtime, bool allday, bool isstart); signals: //发送打开日历信号 void signalCallOpenCalendarUI(const QString &alarmID); private: DBusNotify *m_dbusnotify; //日程提醒dbus操作相关 }; #endif // DALARMMANAGER_H dde-calendar-5.14.13/calendar-service/src/alarmManager/dreminddata.cpp000066400000000000000000000044431473346337000255540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dreminddata.h" DRemindData::DRemindData() : m_alarmID("") , m_accountID("") , m_scheduleID("") , m_remindCount(0) , m_notifyid(-1) { } QString DRemindData::accountID() const { return m_accountID; } void DRemindData::setAccountID(const QString &accountID) { m_accountID = accountID; } QString DRemindData::scheduleID() const { return m_scheduleID; } void DRemindData::setScheduleID(const QString &scheduleID) { m_scheduleID = scheduleID; } QDateTime DRemindData::recurrenceId() const { return m_recurrenceId; } void DRemindData::setRecurrenceId(const QDateTime &recurrenceId) { m_recurrenceId = recurrenceId; } int DRemindData::remindCount() const { return m_remindCount; } void DRemindData::setRemindCount(int remindCount) { m_remindCount = remindCount; } int DRemindData::notifyid() const { return m_notifyid; } void DRemindData::setNotifyid(int notifyid) { m_notifyid = notifyid; } QDateTime DRemindData::dtRemind() const { return m_dtRemind; } void DRemindData::setDtRemind(const QDateTime &dtRemind) { m_dtRemind = dtRemind; } QDateTime DRemindData::dtStart() const { return m_dtStart; } void DRemindData::setDtStart(const QDateTime &dtStart) { m_dtStart = dtStart; } QDateTime DRemindData::dtEnd() const { return m_dtEnd; } void DRemindData::setDtEnd(const QDateTime &dtEnd) { m_dtEnd = dtEnd; } QString DRemindData::alarmID() const { return m_alarmID; } void DRemindData::setAlarmID(const QString &alarmID) { m_alarmID = alarmID; } void DRemindData::updateRemindTimeByCount() { qint64 Minute = 60 * 1000; qint64 Hour = Minute * 60; qint64 duration = (10 + ((m_remindCount - 1) * 5)) * Minute; //下一次提醒距离现在的时间间隔,单位毫秒 if (duration >= Hour) { duration = Hour; } setDtRemind(getRemindTimeByMesc(duration)); } void DRemindData::updateRemindTimeByMesc(qint64 duration) { setDtRemind(getRemindTimeByMesc(duration)); } QDateTime DRemindData::getRemindTimeByMesc(qint64 duration) { QDateTime currentTime = QDateTime::currentDateTime(); currentTime = currentTime.addMSecs(duration); return currentTime; } dde-calendar-5.14.13/calendar-service/src/alarmManager/dreminddata.h000066400000000000000000000027051473346337000252200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DREMINDDATA_H #define DREMINDDATA_H #include #include #include class DRemindData { public: typedef QSharedPointer Ptr; typedef QVector List; DRemindData(); QString accountID() const; void setAccountID(const QString &accountID); QString scheduleID() const; void setScheduleID(const QString &scheduleID); QDateTime recurrenceId() const; void setRecurrenceId(const QDateTime &recurrenceId); int remindCount() const; void setRemindCount(int remindCount); int notifyid() const; void setNotifyid(int notifyid); QDateTime dtRemind() const; void setDtRemind(const QDateTime &dtRemind); QDateTime dtStart() const; void setDtStart(const QDateTime &dtStart); QDateTime dtEnd() const; void setDtEnd(const QDateTime &dtEnd); QString alarmID() const; void setAlarmID(const QString &alarmID); void updateRemindTimeByCount(); void updateRemindTimeByMesc(qint64 duration); private: QDateTime getRemindTimeByMesc(qint64 duration); private: QString m_alarmID; QString m_accountID; QString m_scheduleID; QDateTime m_recurrenceId; int m_remindCount; int m_notifyid; QDateTime m_dtRemind; QDateTime m_dtStart; QDateTime m_dtEnd; }; #endif // DREMINDDATA_H dde-calendar-5.14.13/calendar-service/src/calendarDataManager/000077500000000000000000000000001473346337000240365ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-service/src/calendarDataManager/daccountmanagemodule.cpp000066400000000000000000000517441473346337000307340ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daccountmanagemodule.h" #include "commondef.h" #include "units.h" #include "calendarprogramexitcontrol.h" #include #include const QString firstDayOfWeek_key = "firstDayOfWeek"; const QString shortTimeFormat_key = "shortTimeFormat"; const QString firstDayOfWeekSource_key = "firstDayOfWeekSource"; const QString shortTimeFormatSource_key = "shortTimeFormatSource"; DAccountManageModule::DAccountManageModule(QObject *parent) : QObject(parent) , m_syncFileManage(new SyncFileManage()) , m_accountManagerDB(new DAccountManagerDataBase) , m_reginFormatConfig(DTK_CORE_NAMESPACE::DConfig::createGeneric("org.deepin.region-format", QString(), this)) , m_settings( getAppConfigDir().filePath( "config.ini"), QSettings::IniFormat) { if (m_reginFormatConfig->isValid()) { connect(m_reginFormatConfig, &DTK_CORE_NAMESPACE::DConfig::valueChanged, this, &DAccountManageModule::slotSettingChange); } else { connect(&m_timeDateDbus, &DBusTimedate::ShortTimeFormatChanged, this, &DAccountManageModule::slotSettingChange); connect(&m_timeDateDbus, &DBusTimedate::WeekBeginsChanged, this, &DAccountManageModule::slotSettingChange); } m_isSupportUid = m_syncFileManage->getSyncoperation()->hasAvailable(); //新文件路径 QString newDbPath = getDBPath(); QString newDB(newDbPath + "/" + "accountmanager.db"); m_accountManagerDB->setDBPath(newDB); m_accountManagerDB->dbOpen(); QDBusConnection::RegisterOptions options = QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals | QDBusConnection::ExportAllProperties; QDBusConnection sessionBus = QDBusConnection::sessionBus(); //将云端帐户信息基本数据与本地数据合并 unionIDDataMerging(); //根据获取到的帐户信息创建对应的帐户服务 foreach (auto account, m_accountList) { //如果不支持云同步且帐户类型为UID则过滤 if (!m_isSupportUid && account->accountType() == DAccount::Account_UnionID) { continue; } DAccountModule::Ptr accountModule = DAccountModule::Ptr(new DAccountModule(account)); QObject::connect(accountModule.data(), &DAccountModule::signalSettingChange, this, &DAccountManageModule::slotSettingChange); m_accountModuleMap[account->accountID()] = accountModule; DAccountService::Ptr accountService = DAccountService::Ptr(new DAccountService(account->dbusPath(), account->dbusInterface(), accountModule, this)); if (!sessionBus.registerObject(accountService->getPath(), accountService->getInterface(), accountService.data(), options)) { qCWarning(ServiceLogger) << "registerObject accountService failed:" << sessionBus.lastError(); } else { m_AccountServiceMap[account->accountType()].insert(account->accountID(), accountService); //如果是网络帐户则开启定时下载任务 if (account->isNetWorkAccount() && account->accountState().testFlag(DAccount::Account_Open)) { accountModule->downloadTaskhanding(0); } } } m_generalSetting = getGeneralSettings(); connect(&m_timer, &QTimer::timeout, this, &DAccountManageModule::slotClientIsOpen); m_timer.start(2000); if (m_isSupportUid) { QObject::connect(m_syncFileManage->getSyncoperation(), &Syncoperation::signalLoginStatusChange, this, &DAccountManageModule::slotUidLoginStatueChange); QObject::connect(m_syncFileManage->getSyncoperation(), &Syncoperation::SwitcherChange, this, &DAccountManageModule::slotSwitcherChange); } //第一次启动加载完成后发送帐户改变信号 // emit signalLoginStatusChange(); } QString DAccountManageModule::getAccountList() { QString accountStr; DAccount::toJsonListString(m_accountList, accountStr); return accountStr; } QString DAccountManageModule::getCalendarGeneralSettings() { QString cgSetStr; m_generalSetting = getGeneralSettings(); DCalendarGeneralSettings::toJsonString(m_generalSetting, cgSetStr); return cgSetStr; } void DAccountManageModule::setCalendarGeneralSettings(const QString &cgSet) { DCalendarGeneralSettings::Ptr cgSetPtr = DCalendarGeneralSettings::Ptr(new DCalendarGeneralSettings); DCalendarGeneralSettings::fromJsonString(cgSetPtr, cgSet); if (m_generalSetting != cgSetPtr) { setGeneralSettings(cgSetPtr); DCalendarGeneralSettings::Ptr tmpSetting = DCalendarGeneralSettings::Ptr(m_generalSetting->clone()); m_generalSetting = cgSetPtr; if (tmpSetting->firstDayOfWeek() != m_generalSetting->firstDayOfWeek()) { emit firstDayOfWeekChange(); } if (tmpSetting->timeShowType() != m_generalSetting->timeShowType()) { emit timeFormatTypeChange(); } } } int DAccountManageModule::getfirstDayOfWeek() { return static_cast(m_generalSetting->firstDayOfWeek()); } void DAccountManageModule::setFirstDayOfWeek(const int firstday) { if (m_generalSetting->firstDayOfWeek() != firstday) { m_generalSetting->setFirstDayOfWeek(static_cast(firstday)); setGeneralSettings(m_generalSetting); foreach (auto account, m_accountList) { if (account->accountType() == DAccount::Account_UnionID) { m_accountModuleMap[account->accountID()]->accountDownload(); } } } } int DAccountManageModule::getTimeFormatType() { return static_cast(m_generalSetting->timeShowType()); } void DAccountManageModule::setTimeFormatType(const int timeType) { if (m_generalSetting->timeShowType() != timeType) { m_generalSetting->setTimeShowType(static_cast(timeType)); setGeneralSettings(m_generalSetting); foreach (auto account, m_accountList) { if (account->accountType() == DAccount::Account_UnionID) { m_accountModuleMap[account->accountID()]->accountDownload(); } } } } void DAccountManageModule::remindJob(const QString &accountID, const QString &alarmID) { if (m_accountModuleMap.contains(accountID)) { m_accountModuleMap[accountID]->remindJob(alarmID); } } void DAccountManageModule::updateRemindSchedules(bool isClear) { QMap::const_iterator iter = m_accountModuleMap.constBegin(); for (; iter != m_accountModuleMap.constEnd(); ++iter) { iter.value()->updateRemindSchedules(isClear); } } void DAccountManageModule::notifyMsgHanding(const QString &accountID, const QString &alarmID, const qint32 operationNum) { if (m_accountModuleMap.contains(accountID)) { m_accountModuleMap[accountID]->notifyMsgHanding(alarmID, operationNum); } } void DAccountManageModule::downloadByAccountID(const QString &accountID) { if (m_accountModuleMap.contains(accountID)) { m_accountModuleMap[accountID]->accountDownload(); } } void DAccountManageModule::uploadNetWorkAccountData() { QMap::const_iterator iter = m_accountModuleMap.constBegin(); for (; iter != m_accountModuleMap.constEnd(); ++iter) { iter.value()->uploadNetWorkAccountData(); } } //账户登录 void DAccountManageModule::login() { m_syncFileManage->getSyncoperation()->optlogin(); } //账户登出 void DAccountManageModule::logout() { m_syncFileManage->getSyncoperation()->optlogout(); } bool DAccountManageModule::isSupportUid() { return m_isSupportUid; } void DAccountManageModule::calendarOpen(bool isOpen) { //每次开启日历时需要同步数据 if (isOpen) { QMap::iterator iter = m_accountModuleMap.begin(); for (; iter != m_accountModuleMap.end(); ++iter) { iter.value()->accountDownload(); } } } void DAccountManageModule::unionIDDataMerging() { m_accountList = m_accountManagerDB->getAccountList(); //如果不支持云同步 if (!m_isSupportUid) { DAccount::Ptr unionidDB; auto hasUnionid = [ =, &unionidDB](const DAccount::Ptr & account) { if (account->accountType() == DAccount::Account_UnionID) { unionidDB = account; return true; } return false; }; //如果数据库中有unionid帐户 if (std::any_of(m_accountList.begin(), m_accountList.end(), hasUnionid)) { //如果包含则移除 removeUIdAccount(unionidDB); } return; } DAccount::Ptr accountUnionid = m_syncFileManage->getuserInfo(); DAccount::Ptr unionidDB; auto hasUnionid = [ =, &unionidDB](const DAccount::Ptr & account) { if (account->accountType() == DAccount::Account_UnionID) { unionidDB = account; return true; } return false; }; //如果unionid帐户不存在,则判断数据库中是否有登陆前的信息 //若有则移除 if (accountUnionid.isNull() || accountUnionid->accountID().isEmpty()) { //如果数据库中有unionid帐户 if (std::any_of(m_accountList.begin(), m_accountList.end(), hasUnionid)) { removeUIdAccount(unionidDB); } } else { //如果unionID登陆了 //如果数据库中有unionid帐户 if (std::any_of(m_accountList.begin(), m_accountList.end(), hasUnionid)) { //如果是一个帐户则判断信息是否一致,不一致需更新 if (unionidDB->accountName() == accountUnionid->accountName()) { updateUIdAccount(unionidDB, accountUnionid); } else { removeUIdAccount(unionidDB); addUIdAccount(accountUnionid); } } else { addUIdAccount(accountUnionid); } } } void DAccountManageModule::initAccountDBusInfo(const DAccount::Ptr &account) { QString typeStr = ""; switch (account->accountType()) { case DAccount::Type::Account_UnionID: typeStr = "uid"; break; case DAccount::Type::Account_CalDav: typeStr = "caldav"; break; default: typeStr = "default"; break; } QString sortID = DDataBase::createUuid().mid(0, 5); account->setAccountState(DAccount::AccountState::Account_Setting | DAccount::Account_Calendar); setUidSwitchStatus(account); //设置DBus路径和数据库名 //account account->setAccountType(DAccount::Account_UnionID); account->setDtCreate(QDateTime::currentDateTime()); account->setDbName(QString("account_%1_%2.db").arg(typeStr).arg(sortID)); account->setDbusPath(QString("%1/account_%2_%3").arg(serviceBasePath).arg(typeStr).arg(sortID)); account->setDbusInterface(accountServiceInterface); } void DAccountManageModule::removeUIdAccount(const DAccount::Ptr &uidAccount) { //帐户列表移除uid帐户 m_accountList.removeOne(uidAccount); //移除对应的数据库 ,停止对应的定时器 DAccountModule::Ptr accountModule(new DAccountModule(uidAccount)); accountModule->removeDB(); accountModule->downloadTaskhanding(2); //帐户管理数据库中删除相关数据 m_accountManagerDB->deleteAccountInfo(uidAccount->accountID()); } void DAccountManageModule::addUIdAccount(const DAccount::Ptr &uidAccount) { //帐户管理数据库中添加uid帐户 initAccountDBusInfo(uidAccount); m_accountManagerDB->addAccountInfo(uidAccount); m_accountList.append(uidAccount); } void DAccountManageModule::updateUIdAccount(const DAccount::Ptr &oldAccount, const DAccount::Ptr &uidAccount) { oldAccount->avatar() = uidAccount->avatar(); oldAccount->displayName() = uidAccount->displayName(); setUidSwitchStatus(oldAccount); m_accountManagerDB->updateAccountInfo(oldAccount); } void DAccountManageModule::setUidSwitchStatus(const DAccount::Ptr &account) { //获取控制中心开关状态 bool calendarSwitch = m_syncFileManage->getSyncoperation()->optGetCalendarSwitcher().switch_state; //获取帐户信息状态 DAccount::AccountStates accountState = account->accountState(); accountState.setFlag(DAccount::Account_Open, calendarSwitch); account->setAccountState(accountState); } // 获取通用配置 DCalendarGeneralSettings::Ptr DAccountManageModule::getGeneralSettings() { auto cg = m_accountManagerDB->getCalendarGeneralSettings(); if (getFirstDayOfWeekSource() == DCalendarGeneralSettings::Source_System) { // deepin23使用dconfig存储系统配置 if (m_reginFormatConfig->isValid()) { bool ok; auto dayofWeek = Qt::DayOfWeek(m_reginFormatConfig->value(firstDayOfWeek_key).toInt(&ok)); if (ok) { cg->setFirstDayOfWeek(dayofWeek); } else { qWarning() << "Unable to get first day of week from control center config file"; } } else { // 在deepin20.9使用dbus获取系统配置 cg->setFirstDayOfWeek(m_timeDateDbus.weekBegins()); } } if (getTimeFormatTypeSource() == DCalendarGeneralSettings::Source_System) { // 在deepin23使用dconfig获取系统配置 if (m_reginFormatConfig->isValid()) { auto shortTimeFormat = m_reginFormatConfig->value(shortTimeFormat_key).toString(); if (shortTimeFormat.isEmpty()) { qWarning() << "Unable to short time format from control center config file"; } else if (shortTimeFormat.contains("ap")) { cg->setTimeShowType(DCalendarGeneralSettings::Twelve); } else { cg->setTimeShowType(DCalendarGeneralSettings::TwentyFour); } } else { // 在deepin20.9使用dbus获取系统配置 if (m_timeDateDbus.shortTimeFormat() == 0) { cg->setTimeShowType(DCalendarGeneralSettings::Twelve); } else { cg->setTimeShowType(DCalendarGeneralSettings::TwentyFour); } } } return cg; } // 更改通用配置 void DAccountManageModule::setGeneralSettings(const DCalendarGeneralSettings::Ptr &cgSet) { m_accountManagerDB->setCalendarGeneralSettings(cgSet); }; void DAccountManageModule::slotFirstDayOfWeek(const int firstDay) { if (getfirstDayOfWeek() != firstDay) { setFirstDayOfWeek(firstDay); emit firstDayOfWeekChange(); } } void DAccountManageModule::slotTimeFormatType(const int timeType) { if (getTimeFormatType() != timeType) { setTimeFormatType(timeType); emit timeFormatTypeChange(); } } DCalendarGeneralSettings::GeneralSettingSource DAccountManageModule::getFirstDayOfWeekSource() { auto val = m_settings.value(firstDayOfWeekSource_key, DCalendarGeneralSettings::Source_Database); return static_cast(val.toInt()); } void DAccountManageModule::setFirstDayOfWeekSource(const DCalendarGeneralSettings::GeneralSettingSource source) { m_settings.setValue(firstDayOfWeekSource_key, source); emit firstDayOfWeekChange(); } DCalendarGeneralSettings::GeneralSettingSource DAccountManageModule::getTimeFormatTypeSource() { auto val = m_settings.value(shortTimeFormatSource_key, DCalendarGeneralSettings::GeneralSettingSource::Source_Database); return static_cast(val.toInt()); } void DAccountManageModule::setTimeFormatTypeSource(const DCalendarGeneralSettings::GeneralSettingSource source) { m_settings.setValue(shortTimeFormatSource_key, source); emit timeFormatTypeChange(); } void DAccountManageModule::slotUidLoginStatueChange(const int status) { //因为有时登录成功会触发2次 static QList oldStatus{}; //登录成功后会触发多次,状态也不一致。比如登录后会连续触发 1 -- 4 -- 1 信号 if (!oldStatus.contains(status)) { oldStatus.append(status); } else { //如果当前状态和上次状态一直,则退出 return; } //1:登陆成功 2:登陆取消 3:登出 4:获取服务端配置的应用数据成功 QDBusConnection::RegisterOptions options = QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals | QDBusConnection::ExportAllProperties; QDBusConnection sessionBus = QDBusConnection::sessionBus(); switch (status) { case 1: { //移除登出状态 if (oldStatus.contains(3)) { oldStatus.removeAt(oldStatus.indexOf(3)); } //登陆成功 DAccount::Ptr accountUnionid = m_syncFileManage->getuserInfo(); if (accountUnionid.isNull() || accountUnionid->accountName().isEmpty()) { qCWarning(ServiceLogger) << "Error getting account information"; oldStatus.removeAt(oldStatus.indexOf(1)); return; } addUIdAccount(accountUnionid); DAccountModule::Ptr accountModule = DAccountModule::Ptr(new DAccountModule(accountUnionid)); QObject::connect(accountModule.data(), &DAccountModule::signalSettingChange, this, &DAccountManageModule::slotSettingChange); m_accountModuleMap[accountUnionid->accountID()] = accountModule; DAccountService::Ptr accountService = DAccountService::Ptr(new DAccountService(accountUnionid->dbusPath(), accountUnionid->dbusInterface(), accountModule, this)); if (!sessionBus.registerObject(accountService->getPath(), accountService->getInterface(), accountService.data(), options)) { qCWarning(ServiceLogger) << "registerObject accountService failed:" << sessionBus.lastError(); } else { m_AccountServiceMap[accountUnionid->accountType()].insert(accountUnionid->accountID(), accountService); if (accountUnionid->accountState().testFlag(DAccount::Account_Open)) { accountModule->downloadTaskhanding(0); } } } break; case 3: { //移除登录状态 if (oldStatus.contains(1)) { oldStatus.removeAt(oldStatus.indexOf(1)); } //登出 if (m_AccountServiceMap[DAccount::Type::Account_UnionID].size() > 0) { //如果存在UID帐户则移除相关信息 //移除服务并注销 QString accountID = m_AccountServiceMap[DAccount::Type::Account_UnionID].firstKey(); DAccountService::Ptr accountService = m_AccountServiceMap[DAccount::Type::Account_UnionID].first(); m_AccountServiceMap[DAccount::Type::Account_UnionID].clear(); sessionBus.unregisterObject(accountService->getPath()); //移除uid帐户信息 //删除对应数据库 m_accountModuleMap[accountID]->removeDB(); m_accountModuleMap[accountID]->downloadTaskhanding(2); m_accountList.removeOne(m_accountModuleMap[accountID]->account()); m_accountModuleMap.remove(accountID); m_accountManagerDB->deleteAccountInfo(accountID); } } break; default: //其它状态当前不做处理 return; } emit signalLoginStatusChange(); } void DAccountManageModule::slotSwitcherChange(const bool state) { foreach (auto schedule, m_accountList) { if (schedule->accountType() == DAccount::Account_UnionID) { if (state) { schedule->setAccountState(schedule->accountState() | DAccount::Account_Open); //开启 m_accountModuleMap[schedule->accountID()]->downloadTaskhanding(1); } else { schedule->setAccountState(schedule->accountState() & ~DAccount::Account_Open); //关闭 m_accountModuleMap[schedule->accountID()]->downloadTaskhanding(2); m_accountModuleMap[schedule->accountID()]->uploadTaskHanding(0); } emit m_accountModuleMap[schedule->accountID()]->signalAccountState(); return; } } } void DAccountManageModule::slotSettingChange() { DCalendarGeneralSettings::Ptr newSetting = getGeneralSettings(); if (newSetting->firstDayOfWeek() != m_generalSetting->firstDayOfWeek()) { m_generalSetting->setFirstDayOfWeek(newSetting->firstDayOfWeek()); emit firstDayOfWeekChange(); } if (newSetting->timeShowType() != m_generalSetting->timeShowType()) { m_generalSetting->setTimeShowType(m_generalSetting->timeShowType()); emit timeFormatTypeChange(); } } void DAccountManageModule::slotClientIsOpen() { //如果日历界面不存在则退出 QProcess process; process.start("/bin/bash", QStringList() << "-c" << "pidof dde-calendar"); process.waitForFinished(); QString strResult = process.readAllStandardOutput(); static QString preResult = ""; if (preResult == strResult) { return; } else { preResult = strResult; DServiceExitControl exitControl; exitControl.setClientIsOpen(!strResult.isEmpty()); } } dde-calendar-5.14.13/calendar-service/src/calendarDataManager/daccountmanagemodule.h000066400000000000000000000102011473346337000303600ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DACCOUNTMANAGEMODULE_H #define DACCOUNTMANAGEMODULE_H #include "dcalendargeneralsettings.h" #include "syncfilemanage.h" #include "daccount.h" #include "daccountmodule.h" #include "daccountmanagerdatabase.h" #include "daccountservice.h" #include "dbustimedate.h" #include #include #include #include //帐户类型总数,若支持的类型增加则需要修改 const int accountTypeCount = 3; //帐户管理模块 class DAccountManageModule : public QObject { Q_OBJECT public: typedef QSharedPointer Ptr; explicit DAccountManageModule(QObject *parent = nullptr); //获取所有帐户信息 QString getAccountList(); //获取通用设置 QString getCalendarGeneralSettings(); //设置通用设置 void setCalendarGeneralSettings(const QString &cgSet); int getfirstDayOfWeek(); void setFirstDayOfWeek(const int firstday); int getTimeFormatType(); void setTimeFormatType(const int timeType); DCalendarGeneralSettings::GeneralSettingSource getFirstDayOfWeekSource(); void setFirstDayOfWeekSource(const DCalendarGeneralSettings::GeneralSettingSource source); DCalendarGeneralSettings::GeneralSettingSource getTimeFormatTypeSource(); void setTimeFormatTypeSource(const DCalendarGeneralSettings::GeneralSettingSource source); void remindJob(const QString &accountID, const QString &alarmID); /** * @brief updateRemindSchedules 更新未来10分钟的提醒任务 * @param isClear 是否清空提醒任务数据库 */ void updateRemindSchedules(bool isClear); /** * @brief notifyMsgHanding 通知提示框交互处理 * @param accountID 帐户id * @param alarmID 提醒任务id * @param operationNum 操作编号 , 1:打开日历,2:稍后提醒 3: 明天提醒 4: 提前1天提醒 5:关闭按钮 */ void notifyMsgHanding(const QString &accountID, const QString &alarmID, const qint32 operationNum); void downloadByAccountID(const QString &accountID); void uploadNetWorkAccountData(); //账户登录 void login(); //账户登出 void logout(); //是否支持UID云同步 bool isSupportUid(); void calendarOpen(bool isOpen); private: void unionIDDataMerging(); void initAccountDBusInfo(const DAccount::Ptr &account); //移除uid帐户 void removeUIdAccount(const DAccount::Ptr &uidAccount); //添加uid帐户 void addUIdAccount(const DAccount::Ptr &uidAccount); //更新uid帐户 void updateUIdAccount(const DAccount::Ptr &oldAccount, const DAccount::Ptr &uidAccount); //获取设置开关状态 void setUidSwitchStatus(const DAccount::Ptr &account); // 获取通用配置 DCalendarGeneralSettings::Ptr getGeneralSettings(); // 保存通用配置 void setGeneralSettings(const DCalendarGeneralSettings::Ptr &cgSet); signals: void firstDayOfWeekChange(); void timeFormatTypeChange(); void signalLoginStatusChange(); public slots: void slotFirstDayOfWeek(const int firstDay); void slotTimeFormatType(const int timeType); //TODO:监听网络帐户管理信号和Union ID登陆退出状态 void slotUidLoginStatueChange(const int status); //控制中心的同步开关 void slotSwitcherChange(const bool state); //通用设置发生改变 void slotSettingChange(); //定时判断日历界面是否打开 void slotClientIsOpen(); private: SyncFileManage *m_syncFileManage = nullptr; DAccountManagerDataBase::Ptr m_accountManagerDB; DAccount::List m_accountList; QMap m_accountModuleMap; QMap m_AccountServiceMap[accountTypeCount]; DCalendarGeneralSettings::Ptr m_generalSetting; DTK_CORE_NAMESPACE::DConfig *m_reginFormatConfig; QTimer m_timer; bool m_isSupportUid = false; QSettings m_settings; DBusTimedate m_timeDateDbus; }; #endif // DACCOUNTMANAGEMODULE_H dde-calendar-5.14.13/calendar-service/src/calendarDataManager/daccountmodule.cpp000066400000000000000000001145351473346337000275610ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daccountmodule.h" #include "units.h" #include "dscheduletype.h" #include "dschedulequerypar.h" #include "memorycalendar.h" #include "lunarandfestival/lunardateinfo.h" #include "lunarandfestival/lunarmanager.h" #include "dbus/dbusuiopenschedule.h" #include "dalarmmanager.h" #include "syncfilemanage.h" #include "csystemdtimercontrol.h" #include "dsyncdatafactory.h" #include "unionIDDav/dunioniddav.h" #include "ddatasyncbase.h" #include "dbusnotify.h" #include #include #define UPDATEREMINDJOBTIMEINTERVAL 1000 * 60 * 10 //提醒任务更新时间间隔毫秒数(10分钟) DAccountModule::DAccountModule(const DAccount::Ptr &account, QObject *parent) : QObject(parent) , m_account(account) , m_accountDB(new DAccountDataBase(account)) , m_alarm(new DAlarmManager) , m_dataSync(DSyncDataFactory::createDataSync(m_account)) { QString newDbPath = getDBPath(); m_accountDB->setDBPath(newDbPath + "/" + account->dbName()); m_accountDB->initDBData(); m_accountDB->getAccountInfo(m_account); //关联打开日历界面 connect(m_alarm.data(), &DAlarmManager::signalCallOpenCalendarUI, this, &DAccountModule::slotOpenCalendar); if (m_dataSync != nullptr) { connect(m_dataSync, &DDataSyncBase::signalSyncState, this, &DAccountModule::slotSyncState); connect(m_dataSync, &DDataSyncBase::signalUpdate, this, &DAccountModule::slotDateUpdate); } //关联关闭提醒弹窗 connect(this, &DAccountModule::signalCloseNotification, m_alarm->getdbusnotify(), &DBusNotify::closeNotification); } DAccountModule::~DAccountModule() { if (m_dataSync != nullptr) { delete m_dataSync; m_dataSync = nullptr; } } QString DAccountModule::getAccountInfo() { QString accountInfo; DAccount::toJsonString(m_account, accountInfo); return accountInfo; } bool DAccountModule::getExpand() { return m_account->isExpandDisplay(); } void DAccountModule::setExpand(const bool &isExpand) { if (m_account->isExpandDisplay() != isExpand) { m_account->setIsExpandDisplay(isExpand); m_accountDB->updateAccountInfo(); } } int DAccountModule::getAccountState() { return int(m_account->accountState()); } void DAccountModule::setAccountState(const int accountState) { if (int(m_account->accountState()) != accountState) { m_account->setAccountState(static_cast(accountState)); m_accountDB->updateAccountInfo(); } } int DAccountModule::getSyncState() { return m_account->syncState(); } QString DAccountModule::getSyncFreq() { return DAccount::syncFreqToJsonString(m_account); } void DAccountModule::setSyncFreq(const QString &freq) { DAccount::SyncFreqType syncType = m_account->syncFreq(); DAccount::syncFreqFromJsonString(m_account, freq); if (syncType == m_account->syncFreq()) { return; } m_accountDB->updateAccountInfo(); downloadTaskhanding(1); } QString DAccountModule::getScheduleTypeList() { DScheduleType::List typeList = m_accountDB->getScheduleTypeList(); //排序 std::sort(typeList.begin(), typeList.end()); QString typeListStr; DScheduleType::toJsonListString(typeList, typeListStr); return typeListStr; } QString DAccountModule::getScheduleTypeByID(const QString &typeID) { DScheduleType::Ptr scheduleType = m_accountDB->getScheduleTypeByID(typeID); QString typeStr; DScheduleType::toJsonString(scheduleType, typeStr); return typeStr; } QString DAccountModule::createScheduleType(const QString &typeInfo) { DScheduleType::Ptr scheduleType; DScheduleType::fromJsonString(scheduleType, typeInfo); //如果颜色为用户自定义则需要在数据库中记录 if (scheduleType->typeColor().colorID() == "") { scheduleType->setColorID(DDataBase::createUuid()); DTypeColor::Ptr typeColor(new DTypeColor(scheduleType->typeColor())); typeColor->setPrivilege(DTypeColor::PriUser); m_accountDB->addTypeColor(typeColor); //添加创建颜色任务 if (m_account->isNetWorkAccount()) { DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Create); uploadTask->setTaskObject(DUploadTaskData::Task_Color); uploadTask->setObjectId(typeColor->colorID()); m_accountDB->addUploadTask(uploadTask); } } //设置创建时间 scheduleType->setDtCreate(QDateTime::currentDateTime()); QString scheduleTypeID = m_accountDB->createScheduleType(scheduleType); //如果为网络日程则需要上传任务 if (m_account->isNetWorkAccount()) { DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Create); uploadTask->setTaskObject(DUploadTaskData::Task_ScheduleType); uploadTask->setObjectId(scheduleTypeID); m_accountDB->addUploadTask(uploadTask); //开启上传任务 uploadNetWorkAccountData(); } emit signalScheduleTypeUpdate(); return scheduleTypeID; } bool DAccountModule::deleteScheduleTypeByID(const QString &typeID) { //如果日程类型被使用需要删除对应到日程信息 if (m_accountDB->scheduleTypeByUsed(typeID)) { QStringList scheduleIDList = m_accountDB->getScheduleIDListByTypeID(typeID); foreach (auto scheduleID, scheduleIDList) { closeNotification(scheduleID); //添加删除日程任务 if (m_account->isNetWorkAccount()) { DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Delete); uploadTask->setTaskObject(DUploadTaskData::Task_Schedule); uploadTask->setObjectId(scheduleID); m_accountDB->addUploadTask(uploadTask); } } //更新提醒任务 updateRemindSchedules(false); m_accountDB->deleteSchedulesByScheduleTypeID(typeID, !m_account->isNetWorkAccount()); emit signalScheduleUpdate(); } DScheduleType::Ptr scheduleType = m_accountDB->getScheduleTypeByID(typeID); //根据帐户是否为网络帐户需要添加任务列表中,并设置弱删除 if (m_account->isNetWorkAccount()) { QStringList scheduleIDList = m_accountDB->getScheduleIDListByTypeID(typeID); //弱删除 m_accountDB->deleteScheduleTypeByID(typeID); //发送操作内容给任务列表 DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Delete); uploadTask->setTaskObject(DUploadTaskData::Task_ScheduleType); uploadTask->setObjectId(typeID); m_accountDB->addUploadTask(uploadTask); //如果颜色不为系统类型则删除 if(scheduleType->typeColor().privilege() != DTypeColor::PriSystem){ m_accountDB->deleteTypeColor(scheduleType->typeColor().colorID()); DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Delete); uploadTask->setTaskObject(DUploadTaskData::Task_Color); uploadTask->setObjectId(scheduleType->typeColor().colorID()); m_accountDB->addUploadTask(uploadTask); } //开启上传任务 uploadNetWorkAccountData(); } else { m_accountDB->deleteScheduleTypeByID(typeID, 1); if(scheduleType->typeColor().privilege() != DTypeColor::PriSystem){ m_accountDB->deleteTypeColor(scheduleType->typeColor().colorID()); } } if (scheduleType.isNull()) { qCWarning(ServiceLogger) << "scheduleType isNull, typeID:" << typeID; return false; } //如果为用户颜色则删除颜色 if (scheduleType->typeColor().privilege() > 1) { m_accountDB->deleteTypeColor(scheduleType->typeColor().colorID()); } emit signalScheduleTypeUpdate(); return true; } bool DAccountModule::scheduleTypeByUsed(const QString &typeID) { return m_accountDB->scheduleTypeByUsed(typeID); } bool DAccountModule::updateScheduleType(const QString &typeInfo) { DScheduleType::Ptr scheduleType; DScheduleType::fromJsonString(scheduleType, typeInfo); DScheduleType::Ptr oldScheduleType = m_accountDB->getScheduleTypeByID(scheduleType->typeID()); //如果颜色有改动 if (oldScheduleType.isNull()) { qCWarning(ServiceLogger) << "get oldScheduleType error,typeID:" << scheduleType->typeID(); } else { if (oldScheduleType->typeColor() != scheduleType->typeColor()) { if (!oldScheduleType->typeColor().isSysColorInfo()) { m_accountDB->deleteTypeColor(oldScheduleType->typeColor().colorID()); //添加删除颜色任务 if (m_account->isNetWorkAccount()) { DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Delete); uploadTask->setTaskObject(DUploadTaskData::Task_Color); uploadTask->setObjectId(oldScheduleType->typeColor().colorID()); m_accountDB->addUploadTask(uploadTask); } } if (!scheduleType->typeColor().isSysColorInfo()) { DTypeColor::Ptr typeColor(new DTypeColor(scheduleType->typeColor())); typeColor->setPrivilege(DTypeColor::PriUser); m_accountDB->addTypeColor(typeColor); scheduleType->setColorID(typeColor->colorID()); //添加创建颜色任务 if (m_account->isNetWorkAccount()) { DUploadTaskData::Ptr uploadTask(new DUploadTaskData); // uploadTask->setTaskType(DUploadTaskData::TaskType::Delete); uploadTask->setTaskType(DUploadTaskData::TaskType::Create); uploadTask->setTaskObject(DUploadTaskData::Task_Color); uploadTask->setObjectId(typeColor->colorID()); m_accountDB->addUploadTask(uploadTask); } } } } scheduleType->setDtUpdate(QDateTime::currentDateTime()); bool isSucc = m_accountDB->updateScheduleType(scheduleType); if (isSucc) { if (m_account->isNetWorkAccount()) { DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Modify); uploadTask->setTaskObject(DUploadTaskData::Task_ScheduleType); uploadTask->setObjectId(scheduleType->typeID()); m_accountDB->addUploadTask(uploadTask); //开启上传任务 uploadNetWorkAccountData(); } //如果不是修改显示状态则发送日程类型改变信号 if (oldScheduleType->showState() == scheduleType->showState()) { emit signalScheduleTypeUpdate(); } else { //日程改变信号 emit signalScheduleUpdate(); } } return isSucc; } QString DAccountModule::createSchedule(const QString &scheduleInfo) { DSchedule::Ptr schedule; DSchedule::fromJsonString(schedule, scheduleInfo); schedule->setCreated(QDateTime::currentDateTime()); QString scheduleID = m_accountDB->createSchedule(schedule); //根据是否为网络帐户判断是否需要更新任务列表 if (m_account->isNetWorkAccount()) { DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Create); uploadTask->setTaskObject(DUploadTaskData::Task_Schedule); uploadTask->setObjectId(scheduleID); m_accountDB->addUploadTask(uploadTask); //开启上传任务 uploadNetWorkAccountData(); } //根据是否为提醒日程更新提醒任务 if (schedule->alarms().size() > 0) { updateRemindSchedules(false); } //发送日程更新信号 emit signalScheduleUpdate(); return scheduleID; } bool DAccountModule::updateSchedule(const QString &scheduleInfo) { //根据是否为提醒日程更新提醒任务 DSchedule::Ptr schedule; DSchedule::fromJsonString(schedule, scheduleInfo); DSchedule::Ptr oldSchedule = m_accountDB->getScheduleByScheduleID(schedule->uid()); schedule->setLastModified(QDateTime::currentDateTime()); schedule->setRevision(schedule->revision() + 1); //如果旧日程为提醒日程 if (oldSchedule->alarms().size() > 0) { //根据日程ID获取提醒日程信息 DRemindData::List remindList = m_accountDB->getRemindByScheduleID(schedule->schedulingID()); DRemindData::List deleteRemind; //如果是重复日程且重复规则不一样 if ((schedule->recurs() || oldSchedule->recurs()) && *schedule->recurrence() != *oldSchedule->recurrence()) { QDateTime dtEnd = schedule->dtStart(); for (int i = remindList.size() - 1; i >= 0; --i) { dtEnd = dtEnd > remindList.at(i)->dtStart() ? dtEnd : remindList.at(i)->dtStart(); } if (remindList.size() > 0) { //获取新日程的重复时间 QList dtList = schedule->recurrence()->timesInInterval(schedule->dtStart(), dtEnd); foreach (auto remind, remindList) { //如果生成的开始时间列表内不包含提醒日程的开始时间,则表示该重复日程被删除 if (!dtList.contains(remind->dtStart())) { //如果改日程已经提醒,且通知弹框未操作 if (remind->notifyid() > 0) { emit signalCloseNotification(static_cast(remind->notifyid())); deleteRemind.append(remind); } else if (remind->dtRemind() > QDateTime::currentDateTime()) { //删除没有触发的提醒日程 deleteRemind.append(remind); } } } } } else { //不是重复日程 if (remindList.size() > 0 && remindList.at(0)->notifyid() > 0) { deleteRemind.append(remindList.at(0)); } } for (int i = 0; i < deleteRemind.size(); ++i) { m_accountDB->deleteRemindInfoByAlarmID(deleteRemind.at(i)->alarmID()); } } bool ok = m_accountDB->updateSchedule(schedule); //如果存在提醒 if (oldSchedule->alarms().size() > 0 || schedule->alarms().size() > 0) { updateRemindSchedules(false); } emit signalScheduleUpdate(); //根据是否为网络帐户判断是否需要更新任务列表 if (m_account->isNetWorkAccount()) { DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Modify); uploadTask->setTaskObject(DUploadTaskData::Task_Schedule); uploadTask->setObjectId(schedule->uid()); m_accountDB->addUploadTask(uploadTask); //开启上传任务 uploadNetWorkAccountData(); } return ok; } QString DAccountModule::getScheduleByScheduleID(const QString &scheduleID) { DSchedule::Ptr schedule = m_accountDB->getScheduleByScheduleID(scheduleID); QString scheduleStr; DSchedule::toJsonString(schedule, scheduleStr); return scheduleStr; } bool DAccountModule::deleteScheduleByScheduleID(const QString &scheduleID) { //根据是否为网络判断是否需要弱删除 bool isOK; DSchedule::Ptr schedule = m_accountDB->getScheduleByScheduleID(scheduleID); if (m_account->isNetWorkAccount()) { isOK = m_accountDB->deleteScheduleByScheduleID(scheduleID); //更新上传任务表 DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Delete); uploadTask->setTaskObject(DUploadTaskData::Task_Schedule); uploadTask->setObjectId(scheduleID); m_accountDB->addUploadTask(uploadTask); //开启任务 uploadNetWorkAccountData(); } else { isOK = m_accountDB->deleteScheduleByScheduleID(scheduleID, 1); } //如果删除的是提醒日程 if (schedule->alarms().size() > 0) { //关闭提醒消息和对应的通知弹框 closeNotification(scheduleID); updateRemindSchedules(false); } emit signalScheduleUpdate(); return isOK; } QString DAccountModule::querySchedulesWithParameter(const QString ¶ms) { DScheduleQueryPar::Ptr queryPar = DScheduleQueryPar::fromJsonString(params); if (queryPar.isNull()) { return QString(); } DSchedule::List scheduleList; if (queryPar->queryType() == DScheduleQueryPar::Query_RRule) { scheduleList = m_accountDB->querySchedulesByRRule(queryPar->key(), queryPar->rruleType()); } else if (queryPar->queryType() == DScheduleQueryPar::Query_ScheduleID) { DSchedule::Ptr schedule = m_accountDB->getScheduleByScheduleID(queryPar->key()); if (schedule.isNull()) { return QString(); } scheduleList.append(schedule); } else { scheduleList = m_accountDB->querySchedulesByKey(queryPar->key()); } bool extend = queryPar->queryType() == DScheduleQueryPar::Query_None; //根据条件判断是否需要添加节假日日程 if (isChineseEnv() && extend && m_account->accountType() == DAccount::Account_Local) { scheduleList.append(getFestivalSchedule(queryPar->dtStart(), queryPar->dtEnd(), queryPar->key())); } return DSchedule::toListString(params, scheduleList); } DSchedule::List DAccountModule::getRemindScheduleList(const QDateTime &dtStart, const QDateTime &dtEnd) { //获取范围内需要提醒的日程信息 DSchedule::List scheduleList; //当前最多提前一周提醒。所以结束时间+8天 QMap scheduleMap = getScheduleTimesOn(dtStart, dtEnd.addDays(8), m_accountDB->getRemindSchedule(), false); QMap::const_iterator iter = scheduleMap.constBegin(); for (; iter != scheduleMap.constEnd(); ++iter) { foreach (auto schedule, iter.value()) { if (schedule->alarms().size() > 0 && schedule->alarms()[0]->time() >= dtStart && schedule->alarms()[0]->time() <= dtEnd) { scheduleList.append(schedule); } } } return scheduleList; } QString DAccountModule::getSysColors() { DTypeColor::List colorList = m_accountDB->getSysColor(); std::sort(colorList.begin(), colorList.end()); return DTypeColor::toJsonString(colorList); } DAccount::Ptr DAccountModule::account() const { return m_account; } void DAccountModule::updateRemindSchedules(bool isClear) { //因为全天的当前提醒日程会在开始时间延后9小时提醒 QDateTime dtCurrent = QDateTime::currentDateTime(); QDateTime dtStart = dtCurrent.addSecs(-9*60*60); QDateTime dtEnd = dtCurrent.addMSecs(UPDATEREMINDJOBTIMEINTERVAL); //获取未提醒的日程相关信息 DRemindData::List noRemindList = m_accountDB->getValidRemindJob(); //获取每个账户下需要提醒的日程信息 DRemindData::List accountRemind; DSchedule::List scheduleList = getRemindScheduleList(dtStart, dtEnd); foreach (auto &remind, scheduleList) { DRemindData::Ptr remindData = DRemindData::Ptr(new DRemindData); remindData->setScheduleID(remind->uid()); remindData->setAccountID(m_account->accountID()); remindData->setDtStart(remind->dtStart()); remindData->setDtEnd(remind->dtEnd()); remindData->setRecurrenceId(remind->recurrenceId()); //由于获取的都是需要提醒的日程,所以日程的提醒列表size必然是大于0的 remindData->setDtRemind(remind->alarms()[0]->time()); remindData->setNotifyid(0); remindData->setRemindCount(0); accountRemind.append(remindData); } //获取未提醒的稍后日程信息,由于15分钟后,1xxx后等不会修改提醒次数 //所以需要根据提醒时间,日程id,日程重复id来判断是否是没有被触发点提醒日程 for (int i = 0; i < noRemindList.size(); i++) { for (int j = accountRemind.size() - 1; j >= 0; j--) { if (accountRemind.at(j)->scheduleID() == noRemindList.at(i)->scheduleID() && accountRemind.at(j)->recurrenceId() == noRemindList.at(i)->recurrenceId() && accountRemind.at(j)->dtRemind() == noRemindList.at(i)->dtRemind()) //如果该日程没有被触发提醒过(创建后没有被提醒,而不是提醒后点了15分钟后等不改变提醒次数的日程) //则移除 accountRemind.removeAt(j); } } if (isClear) { //清空数据库 m_accountDB->clearRemindJobDatabase(); foreach (auto remind, noRemindList) { m_accountDB->createRemindInfo(remind); } } //添加从账户中获取到的需要提醒的日程信息 foreach (auto remind, accountRemind) { m_accountDB->createRemindInfo(remind); } accountRemind.append(noRemindList); //更新提醒任务 m_alarm->updateRemind(accountRemind); } void DAccountModule::notifyMsgHanding(const QString &alarmID, const qint32 operationNum) { DRemindData::Ptr remindData = m_accountDB->getRemindData(alarmID); remindData->setAccountID(m_account->accountID()); //如果相应的日程被删除,则不做处理 if (remindData.isNull()) { return; } //如果为稍后提醒操作则需要更新对应的重复次数和提醒时间 qint64 Minute = 60 * 1000; qint64 Hour = Minute * 60; switch (operationNum) { case 2: { //稍后提醒 remindData->setRemindCount(remindData->remindCount() + 1); remindData->updateRemindTimeByCount(); m_accountDB->updateRemindInfo(remindData); } break; case 21: { //15min后提醒 remindData->updateRemindTimeByMesc(15 * Minute); m_accountDB->updateRemindInfo(remindData); } break; case 22: { //一个小时后提醒 remindData->updateRemindTimeByMesc(Hour); m_accountDB->updateRemindInfo(remindData); } break; case 23: { //四个小时后提醒 remindData->updateRemindTimeByMesc(4 * Hour); m_accountDB->updateRemindInfo(remindData); } break; case 3: { //明天提醒 remindData->updateRemindTimeByMesc(24 * Hour); m_accountDB->updateRemindInfo(remindData); } break; case 1: { //打开日历 } break; case 4: { //提前1天提醒 DSchedule::Ptr schedule = getScheduleByRemind(remindData); //TODO:如果是重复日程是否需要修改所有日程的提醒?还是只修改此日程? if (schedule->allDay()) { schedule->setAlarmType(DSchedule::Alarm_15Min_Front); } else { schedule->setAlarmType(DSchedule::Alarm_1Day_Front); } m_accountDB->updateSchedule(schedule); //删除对应提醒任务数据 m_accountDB->deleteRemindInfoByAlarmID(alarmID); emit signalScheduleUpdate(); } break; default: //删除对应提醒任务数据 m_accountDB->deleteRemindInfoByAlarmID(alarmID); break; } m_alarm->notifyMsgHanding(remindData, operationNum); } void DAccountModule::remindJob(const QString &alarmID) { DRemindData::Ptr remindData = m_accountDB->getRemindData(alarmID); remindData->setAccountID(m_account->accountID()); DSchedule::Ptr schedule = getScheduleByRemind(remindData); int notifyid = m_alarm->remindJob(remindData, schedule); remindData->setNotifyid(notifyid); m_accountDB->updateRemindInfo(remindData); } void DAccountModule::accountDownload() { if (m_dataSync != nullptr) { qCInfo(ServiceLogger) << "开始下载数据"; m_dataSync->syncData(this->account()->accountID(), this->account()->accountName(), (int)this->account()->accountState(), DDataSyncBase::Sync_Upload | DDataSyncBase::Sync_Download); } } void DAccountModule::uploadNetWorkAccountData() { if (m_dataSync != nullptr) { qCInfo(ServiceLogger) << "开始上传数据"; m_dataSync->syncData(this->account()->accountID(), this->account()->accountName(), (int)this->account()->accountState(), DDataSyncBase::Sync_Upload); } } QString DAccountModule::getDtLastUpdate() { return dtToString(m_account->dtLastSync()); } void DAccountModule::removeDB() { m_accountDB->removeDB(); //如果为uid帐户退出则清空目录下所有关于uid的数据库文件 //解决在某些条件下数据库没有被移除的问题(自测未发现) if(account()->accountType() == DAccount::Type::Account_UnionID){ QString dbPatch = getHomeConfigPath().append(QString("/deepin/dde-calendar-service/")); QDir dir(dbPatch); if (dir.exists()) { QStringList filters; filters << QString("account_uid_*"); dir.setFilter(QDir::Files | QDir::NoSymLinks); dir.setNameFilters(filters); for (uint i = 0; i < dir.count(); ++i) { QFile::remove(dbPatch + dir[i]); } } } } QMap DAccountModule::getScheduleTimesOn(const QDateTime &dtStart, const QDateTime &dtEnd, const DSchedule::List &scheduleList, bool extend) { QMap m_scheduleMap; //相差多少天 int days = static_cast(dtStart.daysTo(dtEnd)); for (int i = 0; i <= days; ++i) { DSchedule::List scheduleList; m_scheduleMap[dtStart.addDays(i).date()] = scheduleList; } foreach (auto &schedule, scheduleList) { //获取日程的开始结束时间差 qint64 interval = schedule->dtStart().secsTo(schedule->dtEnd()); //如果存在重复日程 if (schedule->recurs()) { //如果为农历日程 if (schedule->lunnar()) { //农历重复日程计算 LunarDateInfo lunardate(schedule->recurrence()->defaultRRuleConst(), interval); QMap ruleStartDate = lunardate.getRRuleStartDate(dtStart.date(), dtEnd.date(), schedule->dtStart().date()); QDateTime recurDateTime; recurDateTime.setTime(schedule->dtStart().time()); QDateTime copyEnd; QMap::ConstIterator iter = ruleStartDate.constBegin(); for (; iter != ruleStartDate.constEnd(); iter++) { recurDateTime.setDate(iter.value()); //如果在忽略时间列表中,则忽略 if (schedule->recurrence()->exDateTimes().contains(recurDateTime)) continue; copyEnd = recurDateTime.addSecs(interval); DSchedule::Ptr newSchedule = DSchedule::Ptr(new DSchedule(*schedule.data())); newSchedule->setDtStart(recurDateTime); newSchedule->setDtEnd(copyEnd); //只有重复日程设置RecurrenceId if (schedule->dtStart() != recurDateTime) { newSchedule->setRecurrenceId(recurDateTime); } if (extend) { //需要扩展的天数 int extenddays = static_cast(recurDateTime.daysTo(copyEnd)); for (int i = 0; i <= extenddays; ++i) { m_scheduleMap[recurDateTime.date().addDays(i)].append(newSchedule); } } else { m_scheduleMap[recurDateTime.date()].append(newSchedule); } } } else { //非农历日程 extendRecurrence(m_scheduleMap, schedule, dtStart, dtEnd, extend); } } else { //普通日程 //如果在查询时间范围内 QDateTime queryDtStart = dtStart; //如果日程为全天日程,则查询的开始时间设置为0点,因为全天日程的开始和结束时间都是0点 if(schedule->allDay()){ queryDtStart.setTime(QTime(0,0,0)); } if (!(schedule->dtEnd() < queryDtStart || schedule->dtStart() > dtEnd)) { if (extend && schedule->isMultiDay()) { //需要扩展的天数 int extenddays = static_cast(schedule->dtStart().daysTo(schedule->dtEnd())); for (int i = 0; i <= extenddays; ++i) { //如果扩展的日期在查询范围内则添加,否则退出 if(m_scheduleMap.contains(schedule->dtStart().date().addDays(i))){ m_scheduleMap[schedule->dtStart().date().addDays(i)].append(schedule); } else { break; } } } else { m_scheduleMap[schedule->dtStart().date()].append(schedule); } } } } return m_scheduleMap; } DSchedule::List DAccountModule::getFestivalSchedule(const QDateTime &dtStart, const QDateTime &dtEnd, const QString &key) { QList festivaldays = GetFestivalsInRange(dtStart, dtEnd); if (!key.isEmpty()) { festivaldays = FilterDayFestival(festivaldays, key); } DSchedule::List scheduleList; foreach (stDayFestival festivalDay, festivaldays) { foreach (QString festival, festivalDay.Festivals) { if (!festival.isEmpty()) { DSchedule::Ptr schedule = DSchedule::Ptr(new DSchedule); schedule->setSummary(festival); schedule->setAllDay(true); schedule->setDtStart(QDateTime(QDate(festivalDay.date.date()), QTime(0, 0))); schedule->setDtEnd(QDateTime(QDate(festivalDay.date.date()), QTime(23, 59))); //设置UID为开始时间+内容 schedule->setUid(dtToString(schedule->dtStart()) + schedule->summary()); schedule->setScheduleTypeID(m_accountDB->getFestivalTypeID()); scheduleList.append(schedule); } } } return scheduleList; } void DAccountModule::extendRecurrence(DSchedule::Map &scheduleMap, const DSchedule::Ptr &schedule, const QDateTime &dtStart, const QDateTime &dtEnd, bool extend) { QDateTime queryDtStart = dtStart; //如果日程为全天日程,则查询的开始时间设置为0点,因为全天日程的开始和结束时间都是0点 if(schedule->allDay()){ queryDtStart.setTime(QTime(0,0,0)); } if (schedule->recurs()) { //获取日程的开始结束时间差 qint64 interval = schedule->dtStart().secsTo(schedule->dtEnd()); QList dtList = schedule->recurrence()->timesInInterval(queryDtStart, dtEnd); foreach (auto &dt, dtList) { QDateTime scheduleDtEnd = dt.addSecs(interval); DSchedule::Ptr newSchedule = DSchedule::Ptr(schedule->clone()); newSchedule->setDtStart(dt); newSchedule->setDtEnd(scheduleDtEnd); //只有重复日程设置RecurrenceId if (schedule->dtStart() != dt) { newSchedule->setRecurrenceId(dt); } if (extend) { //需要扩展的天数 int extenddays = static_cast(dt.daysTo(scheduleDtEnd)); for (int i = 0; i <= extenddays; ++i) { scheduleMap[dt.date().addDays(i)].append(newSchedule); } } else { scheduleMap[dt.date()].append(newSchedule); } } } else { if (!(schedule->dtStart() > dtEnd || schedule->dtEnd() < queryDtStart)) { scheduleMap[schedule->dtStart().date()].append(schedule); } } } void DAccountModule::closeNotification(const QString &scheduleId) { //根据日程ID获取提醒日程信息 DRemindData::List remindList = m_accountDB->getRemindByScheduleID(scheduleId); foreach (auto remind, remindList) { m_accountDB->deleteRemindInfoByAlarmID(remind->alarmID()); emit signalCloseNotification(static_cast(remind->notifyid())); } } DSchedule::Ptr DAccountModule::getScheduleByRemind(const DRemindData::Ptr &remindData) { DSchedule::Ptr schedule = m_accountDB->getScheduleByScheduleID(remindData->scheduleID()); if (!schedule.isNull() && schedule->dtStart() != remindData->dtStart()) { schedule->setDtStart(remindData->dtStart()); schedule->setDtEnd(remindData->dtEnd()); schedule->setRecurrenceId(remindData->recurrenceId()); } return schedule; } void DAccountModule::downloadTaskhanding(int index) { //index: 0:帐户登录 1:修改同步频率 2:帐户登出 CSystemdTimerControl sysControl; if (index > 0) { //修改和停止都需要停止定时任务 sysControl.stopDownloadTask(m_account->accountID()); } if (index != 2) { //如果帐户刚刚登录开启定时任务 //设置同步频率 if (m_account->isNetWorkAccount()) { int sync = -1; switch (m_account->syncFreq()) { case DAccount::SyncFreq_15Mins: sync = 15; break; case DAccount::SyncFreq_30Mins: sync = 30; break; case DAccount::SyncFreq_1hour: sync = 60; break; case DAccount::SyncFreq_24hour: sync = 24 * 60; break; default: break; } if (sync > 0) { sysControl.startDownloadTask(m_account->accountID(), sync); } } } } void DAccountModule::uploadTaskHanding(int open) { CSystemdTimerControl sysControl; if (1 == open) { sysControl.startUploadTask(15); return; } if (0 == open) { //TODO:需要考虑多个帐户情况 sysControl.stopUploadTask(); return; } } void DAccountModule::slotOpenCalendar(const QString &alarmID) { DbusUIOpenSchedule openCalendar("com.deepin.Calendar", "/com/deepin/Calendar", QDBusConnection::sessionBus(), this); DRemindData::Ptr remindData = m_accountDB->getRemindData(alarmID); if (remindData.isNull()) { qCWarning(ServiceLogger) << "No corresponding reminder ID found"; return; } DSchedule::Ptr schedule = getScheduleByRemind(remindData); QString scheduleStr; DSchedule::toJsonString(schedule, scheduleStr); openCalendar.OpenSchedule(scheduleStr); //删除对应提醒任务数据 m_accountDB->deleteRemindInfoByAlarmID(alarmID); } void DAccountModule::slotSyncState(const int syncState) { m_account->setDtLastSync(QDateTime::currentDateTime()); switch (syncState) { case 0: //执行正常 m_account->setSyncState(DAccount::Sync_Normal); m_accountDB->updateAccountInfo(); //同步成功后更新提醒任务 updateRemindSchedules(false); break; case 7506: //网络异常 m_account->setSyncState(DAccount::Sync_NetworkAnomaly); break; case 7508: //存储已满 m_account->setSyncState(DAccount::Sync_StorageFull); break; default: qCWarning(ServiceLogger)<<"syncState:"<setSyncState(DAccount::Sync_ServerException); break; } emit signalDtLastUpdate(); //错误处理 emit signalSyncState(); //如果上传失败,需要启动定时上传 // if (m_account->syncState() != DAccount::Sync_Normal) { // uploadTaskHanding(1); // } else { // //如果有定时上传则停止 // uploadTaskHanding(0); // } } void DAccountModule::slotDateUpdate(const DDataSyncBase::UpdateTypes updateType) { if (updateType.testFlag(DDataSyncBase::Update_Setting)) { emit signalSettingChange(); } if (updateType.testFlag(DDataSyncBase::Update_Schedule)) { emit signalScheduleUpdate(); } if (updateType.testFlag(DDataSyncBase::Update_ScheduleType)) { emit signalScheduleTypeUpdate(); } } // 导入日程 bool DAccountModule::importSchedule(const QString &icsFilePath, const QString &typeID, const bool cleanExists) { KCalendarCore::ICalFormat icalformat; QTimeZone timezone = QDateTime::currentDateTime().timeZone(); KCalendarCore::MemoryCalendar::Ptr cal(new KCalendarCore::MemoryCalendar(timezone)); auto ok = icalformat.load(cal, icsFilePath); if (!ok) { qCWarning(ServiceLogger) << "can not load ics file from" << icsFilePath; return false; } auto events = cal->events(); if (cleanExists) { ok = m_accountDB->deleteSchedulesByScheduleTypeID(typeID, true); if (!ok) { qCWarning(ServiceLogger) << "can not clean schedules from" << typeID; return false; } }; foreach (auto event, events) { auto data = event.data(); auto sch = DSchedule::Ptr(new DSchedule(*data)); sch->setScheduleTypeID(typeID); qCInfo(ServiceLogger) << "import schedule" << event.data()->dtStart().toString() << event.data()->summary() << m_accountDB->createSchedule(sch); }; // 发送日程更新信号 emit signalScheduleUpdate(); return true; } // 导出日程 bool DAccountModule::exportSchedule(const QString &icsFilePath, const QString &typeID) { auto typeInfo = m_accountDB->getScheduleTypeByID(typeID); KCalendarCore::MemoryCalendar::Ptr cal(new KCalendarCore::MemoryCalendar(nullptr)); // 附加扩展信息 cal->setNonKDECustomProperty("X-DDE-CALENDAR-TYPE-ID", typeID); cal->setNonKDECustomProperty("X-DDE-CALENDAR-TYPE-NAME", typeInfo->displayName()); cal->setNonKDECustomProperty("X-DDE-CALENDAR-TYPE-COLOR", typeInfo->getColorCode()); cal->setNonKDECustomProperty("X-WR-CALNAME", typeInfo->displayName()); auto ids = m_accountDB->getScheduleIDListByTypeID(typeID); foreach (auto id, ids) { auto schedule = m_accountDB->getScheduleByScheduleID(id); cal->addEvent(schedule); } KCalendarCore::ICalFormat icalformat; return icalformat.save(cal, icsFilePath); } dde-calendar-5.14.13/calendar-service/src/calendarDataManager/daccountmodule.h000066400000000000000000000113631473346337000272210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DACCOUNTMODULE_H #define DACCOUNTMODULE_H #include "daccount.h" #include "daccountdatabase.h" #include "dschedule.h" #include "dalarmmanager.h" #include "ddatasyncbase.h" #include "icalformat.h" #include "memorycalendar.h" #include #include //帐户模块 //处理后端数据获取,提醒,上传下载等 class DAccountModule : public QObject { Q_OBJECT public: typedef QSharedPointer Ptr; typedef QList List; explicit DAccountModule(const DAccount::Ptr &account, QObject *parent = nullptr); ~DAccountModule(); //获取帐户信息 QString getAccountInfo(); //设置获取帐户是否展开 bool getExpand(); void setExpand(const bool &isExpand); //帐户状态。 int getAccountState(); void setAccountState(const int accountState); //获取同步状态 int getSyncState(); QString getSyncFreq(); void setSyncFreq(const QString &freq); //获取类型 QString getScheduleTypeList(); QString getScheduleTypeByID(const QString &typeID); QString createScheduleType(const QString &typeInfo); bool deleteScheduleTypeByID(const QString &typeID); bool scheduleTypeByUsed(const QString &typeID); bool updateScheduleType(const QString &typeInfo); //日程信息 QString createSchedule(const QString &scheduleInfo); bool updateSchedule(const QString &scheduleInfo); QString getScheduleByScheduleID(const QString &scheduleID); bool deleteScheduleByScheduleID(const QString &scheduleID); QString querySchedulesWithParameter(const QString ¶ms); bool exportSchedule(const QString &icsFilePath, const QString &typeID); // 导出ICS文件 bool importSchedule(const QString &icsFilePath, const QString &typeID, const bool cleanExists); // 导入ICS文件 //获取需要提醒的日程 DSchedule::List getRemindScheduleList(const QDateTime &dtStart, const QDateTime &dtEnd); //内置颜色 QString getSysColors(); DAccount::Ptr account() const; /** * @brief updateRemindSchedules 更新未来10分钟的提醒任务 * @param isClear 是否清空提醒任务数据库 */ void updateRemindSchedules(bool isClear); /** * @brief notifyMsgHanding 通知提示框交互处理 * @param alarmID 提醒任务id * @param operationNum 操作编号 * 1:打开日历, * 2:稍后提醒 21:15min后提醒 22:一个小时后提醒 23:四个小时后提醒 * 3:明天提醒 4: 提前1天提醒 */ void notifyMsgHanding(const QString &alarmID, const qint32 operationNum); void remindJob(const QString &alarmID); void accountDownload(); void uploadNetWorkAccountData(); //删除数据库 void removeDB(); //index: 0:帐户登录 1:修改同步频率 2:帐户登出 void downloadTaskhanding(int index); // 0:关闭 1:启动 void uploadTaskHanding(int open); //获取最后一次同步时间 QString getDtLastUpdate(); private: QMap getScheduleTimesOn(const QDateTime &dtStart, const QDateTime &dtEnd, const DSchedule::List &scheduleList, bool extend = true); DSchedule::List getFestivalSchedule(const QDateTime &dtStart, const QDateTime &dtEnd, const QString &key); //根据重复规则扩展非农历重复日程 void extendRecurrence(DSchedule::Map &scheduleMap, const DSchedule::Ptr &schedule, const QDateTime &dtStart, const QDateTime &dtEnd, bool extend = true); /** * @brief closeNotification 关闭通知弹框 * @param scheduleId 日程id */ void closeNotification(const QString &scheduleId); //根据提醒任务获取对应的日程信息 DSchedule::Ptr getScheduleByRemind(const DRemindData::Ptr &remindData); signals: void signalScheduleUpdate(); void signalScheduleTypeUpdate(); //关闭通知弹框 void signalCloseNotification(quint64 notifyID); void signalAccountState(); void signalSyncState(); void signalDtLastUpdate(); //通用设置发生改变 void signalSettingChange(); //数据同步完成 void signalSyncFinished(int); public slots: void slotOpenCalendar(const QString &alarmID); void slotSyncState(const int syncState); void slotDateUpdate(const DDataSyncBase::UpdateTypes updateType); private: DAccount::Ptr m_account; DAccountDataBase::Ptr m_accountDB; DAlarmManager::Ptr m_alarm; DDataSyncBase *m_dataSync; }; #endif // DACCOUNTMODULE_H dde-calendar-5.14.13/calendar-service/src/calendarDataManager/duploadtaskdata.cpp000066400000000000000000000033641473346337000277150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "duploadtaskdata.h" QString DUploadTaskData::sql_table_name(int task_obj) { switch(task_obj) { case DUploadTaskData::Task_ScheduleType: return "scheduleType"; case DUploadTaskData::Task_Schedule: return "schedules"; case DUploadTaskData::Task_Color: return "typeColor"; } return ""; } QString DUploadTaskData::sql_table_primary_key(int task_obj) { switch(task_obj) { case DUploadTaskData::Task_ScheduleType: return "typeID"; case DUploadTaskData::Task_Schedule: return "scheduleID"; case DUploadTaskData::Task_Color: return "colorID"; } return ""; } DUploadTaskData::DUploadTaskData() : m_taskType(Create) , m_taskObject(Task_ScheduleType) , m_objectId("") , m_taskID("") { } DUploadTaskData::TaskType DUploadTaskData::taskType() const { return m_taskType; } void DUploadTaskData::setTaskType(const TaskType &taskType) { m_taskType = taskType; } DUploadTaskData::TaskObject DUploadTaskData::taskObject() const { return m_taskObject; } void DUploadTaskData::setTaskObject(const TaskObject &taskObject) { m_taskObject = taskObject; } QString DUploadTaskData::objectId() const { return m_objectId; } void DUploadTaskData::setObjectId(const QString &objectId) { m_objectId = objectId; } QString DUploadTaskData::taskID() const { return m_taskID; } void DUploadTaskData::setTaskID(const QString &taskID) { m_taskID = taskID; } QDateTime DUploadTaskData::dtCreate() const { return m_dtCreate; } void DUploadTaskData::setDtCreate(const QDateTime &dtCreate) { m_dtCreate = dtCreate; } dde-calendar-5.14.13/calendar-service/src/calendarDataManager/duploadtaskdata.h000066400000000000000000000025501473346337000273560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DUPLOADTASKDATA_H #define DUPLOADTASKDATA_H #include #include #include #include //上传任务相关数据 class DUploadTaskData { public: //任务类型 enum TaskType { Create, //创建 Modify, //修改 Delete, //删除 }; //任务对象 enum TaskObject { Task_ScheduleType, //日程类型 Task_Schedule, //日程 Task_Color, //类型颜色 }; static QString sql_table_name(int task_obj); static QString sql_table_primary_key(int task_obj); typedef QSharedPointer Ptr; typedef QVector List; DUploadTaskData(); TaskType taskType() const; void setTaskType(const TaskType &taskType); TaskObject taskObject() const; void setTaskObject(const TaskObject &taskObject); QString objectId() const; void setObjectId(const QString &objectId); QString taskID() const; void setTaskID(const QString &taskID); QDateTime dtCreate() const; void setDtCreate(const QDateTime &dtCreate); private: TaskType m_taskType; TaskObject m_taskObject; QString m_objectId; QString m_taskID; QDateTime m_dtCreate; }; #endif // DUPLOADTASKDATA_H dde-calendar-5.14.13/calendar-service/src/calendarhuangli.cpp000066400000000000000000000137261473346337000240360ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calendarhuangli.h" #include "lunarandfestival/lunarmanager.h" CalendarHuangLi::CalendarHuangLi(QObject *parent) : QObject(parent) , m_database(new DHuangLiDataBase(this)) { } //获取指定公历月的假日信息 QJsonArray CalendarHuangLi::getFestivalMonth(quint32 year, quint32 month) { return m_database->queryFestivalList(year, month); } QString CalendarHuangLi::getHuangLiDay(quint32 year, quint32 month, quint32 day) { stDay viewday{static_cast(year), static_cast(month), static_cast(day)}; QList viewdate{viewday}; CaHuangLiDayInfo hldayinfo; //获取阴历信息 stLunarDayInfo lunardayinfo = SolarToLunar(static_cast(year), static_cast(month), static_cast(day)); //获取宜忌信息 QList hllist = m_database->queryHuangLiByDays(viewdate); //将黄历信息保存到CaHuangLiDayInfo hldayinfo.mSuit = hllist.begin()->Suit; hldayinfo.mAvoid = hllist.begin()->Avoid; hldayinfo.mGanZhiYear = lunardayinfo.GanZhiYear; hldayinfo.mGanZhiMonth = lunardayinfo.GanZhiMonth; hldayinfo.mGanZhiDay = lunardayinfo.GanZhiDay; hldayinfo.mLunarDayName = lunardayinfo.LunarDayName; hldayinfo.mLunarFestival = lunardayinfo.LunarFestival; hldayinfo.mLunarLeapMonth = lunardayinfo.LunarLeapMonth; hldayinfo.mLunarMonthName = lunardayinfo.LunarMonthName; hldayinfo.mSolarFestival = lunardayinfo.SolarFestival; hldayinfo.mTerm = lunardayinfo.Term; hldayinfo.mZodiac = lunardayinfo.Zodiac; hldayinfo.mWorktime = lunardayinfo.Worktime; //返回json return hldayinfo.toJson(); } QString CalendarHuangLi::getHuangLiMonth(quint32 year, quint32 month, bool fill) { CaHuangLiMonthInfo monthinfo; SolarMonthInfo solarmonth = GetSolarMonthCalendar(static_cast(year), static_cast(month), fill); LunarMonthInfo lunarmonth = GetLunarMonthCalendar(static_cast(year), static_cast(month), fill); monthinfo.mFirstDayWeek = lunarmonth.FirstDayWeek; monthinfo.mDays = lunarmonth.Days; QList hllist = m_database->queryHuangLiByDays(solarmonth.Datas); for (int i = 0; i < lunarmonth.Datas.size(); ++i) { CaHuangLiDayInfo hldayinfo; hldayinfo.mAvoid = hllist.at(i).Avoid; hldayinfo.mSuit = hllist.at(i).Suit; stLunarDayInfo lunardayinfo = lunarmonth.Datas.at(i); hldayinfo.mGanZhiYear = lunardayinfo.GanZhiYear; hldayinfo.mGanZhiMonth = lunardayinfo.GanZhiMonth; hldayinfo.mGanZhiDay = lunardayinfo.GanZhiDay; hldayinfo.mLunarDayName = lunardayinfo.LunarDayName; hldayinfo.mLunarFestival = lunardayinfo.LunarFestival; hldayinfo.mLunarLeapMonth = lunardayinfo.LunarLeapMonth; hldayinfo.mLunarMonthName = lunardayinfo.LunarMonthName; hldayinfo.mSolarFestival = lunardayinfo.SolarFestival; hldayinfo.mTerm = lunardayinfo.Term; hldayinfo.mZodiac = lunardayinfo.Zodiac; hldayinfo.mWorktime = lunardayinfo.Worktime; monthinfo.mCaLunarDayInfo.append(hldayinfo); // qCDebug(ServiceLogger) << hldayinfo.mGanZhiYear << hldayinfo.mGanZhiMonth << hldayinfo.mGanZhiDay // << hldayinfo.mLunarDayName << hldayinfo.mLunarFestival << hldayinfo.mLunarFestival // << hldayinfo.mLunarLeapMonth << hldayinfo.mLunarMonthName << hldayinfo.mSolarFestival // << hldayinfo.mTerm << hldayinfo.mZodiac << hldayinfo.mWorktime; } return monthinfo.toJson(); } CaLunarDayInfo CalendarHuangLi::getLunarInfoBySolar(quint32 year, quint32 month, quint32 day) { CaLunarDayInfo lunardayinfo; //获取阴历信息 stLunarDayInfo m_lunardayinfo = SolarToLunar(static_cast(year), static_cast(month), static_cast(day)); //将阴历信息保存到CaLunarDayInfo lunardayinfo.mGanZhiYear = m_lunardayinfo.GanZhiYear; lunardayinfo.mGanZhiMonth = m_lunardayinfo.GanZhiMonth; lunardayinfo.mGanZhiDay = m_lunardayinfo.GanZhiDay; lunardayinfo.mLunarDayName = m_lunardayinfo.LunarDayName; lunardayinfo.mLunarFestival = m_lunardayinfo.LunarFestival; lunardayinfo.mLunarLeapMonth = m_lunardayinfo.LunarLeapMonth; lunardayinfo.mLunarMonthName = m_lunardayinfo.LunarMonthName; lunardayinfo.mSolarFestival = m_lunardayinfo.SolarFestival; lunardayinfo.mTerm = m_lunardayinfo.Term; lunardayinfo.mZodiac = m_lunardayinfo.Zodiac; lunardayinfo.mWorktime = m_lunardayinfo.Worktime; //返回CaLunarDayInfo return lunardayinfo; } CaLunarMonthInfo CalendarHuangLi::getLunarCalendarMonth(quint32 year, quint32 month, bool fill) { CaLunarMonthInfo lunarmonthinfo; //获取阴历月信息 LunarMonthInfo lunarmonth = GetLunarMonthCalendar(static_cast(year), static_cast(month), fill); //将阴历月信息保存到CaLunarMonthInfo lunarmonthinfo.mDays = lunarmonth.Days; lunarmonthinfo.mFirstDayWeek = lunarmonth.FirstDayWeek; for (int i = 0; i < lunarmonth.Datas.size(); ++i) { CaLunarDayInfo m_lunardayinfo; stLunarDayInfo lunardayinfo = lunarmonth.Datas.at(i); m_lunardayinfo.mGanZhiYear = lunardayinfo.GanZhiYear; m_lunardayinfo.mGanZhiMonth = lunardayinfo.GanZhiMonth; m_lunardayinfo.mGanZhiDay = lunardayinfo.GanZhiDay; m_lunardayinfo.mLunarDayName = lunardayinfo.LunarDayName; m_lunardayinfo.mLunarFestival = lunardayinfo.LunarFestival; m_lunardayinfo.mLunarLeapMonth = lunardayinfo.LunarLeapMonth; m_lunardayinfo.mLunarMonthName = lunardayinfo.LunarMonthName; m_lunardayinfo.mSolarFestival = lunardayinfo.SolarFestival; m_lunardayinfo.mTerm = lunardayinfo.Term; m_lunardayinfo.mZodiac = lunardayinfo.Zodiac; m_lunardayinfo.mWorktime = lunardayinfo.Worktime; lunarmonthinfo.mCaLunarDayInfo.append(m_lunardayinfo); } //返回CaLunarMonthInfo return lunarmonthinfo; } dde-calendar-5.14.13/calendar-service/src/calendarhuangli.h000066400000000000000000000015621473346337000234760ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CALENDARHUANGLI_H #define CALENDARHUANGLI_H #include "dhuanglidatabase.h" #include "huangliData/dbusdatastruct.h" #include #include class DHuangLiDataBase; class CalendarHuangLi : public QObject { Q_OBJECT public: explicit CalendarHuangLi(QObject *parent = nullptr); QJsonArray getFestivalMonth(quint32 year, quint32 month); QString getHuangLiDay(quint32 year, quint32 month, quint32 day); QString getHuangLiMonth(quint32 year, quint32 month, bool fill); CaLunarDayInfo getLunarInfoBySolar(quint32 year, quint32 month, quint32 day); CaLunarMonthInfo getLunarCalendarMonth(quint32 year, quint32 month, bool fill); private: DHuangLiDataBase *m_database; }; #endif // CALENDARHUANGLI_H dde-calendar-5.14.13/calendar-service/src/calendarprogramexitcontrol.cpp000066400000000000000000000026061473346337000263440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calendarprogramexitcontrol.h" #include #include bool CalendarProgramExitControl::m_clientIsOpen = false; CalendarProgramExitControl *CalendarProgramExitControl::getProgramExitControl() { static CalendarProgramExitControl programExitControl; return &programExitControl; } CalendarProgramExitControl *CalendarProgramExitControl::operator->() const { return getProgramExitControl(); } void CalendarProgramExitControl::addExc() { #ifdef CALENDAR_SERVICE_AUTO_EXIT readWriteLock.lockForWrite(); ++m_excNum; readWriteLock.unlock(); #endif } void CalendarProgramExitControl::reduce() { #ifdef CALENDAR_SERVICE_AUTO_EXIT //3秒后退出,防止程序频繁的开启关闭 QTimer::singleShot(3000, [=] { readWriteLock.lockForWrite(); --m_excNum; if (m_excNum < 1 && !m_clientIsOpen) { exit(); } readWriteLock.unlock(); }); #endif } void CalendarProgramExitControl::exit() { #ifdef NDEBUG qApp->exit(); #endif } bool CalendarProgramExitControl::getClientIsOpen() { return m_clientIsOpen; } void CalendarProgramExitControl::setClientIsOpen(bool clientIsOpen) { m_clientIsOpen = clientIsOpen; } CalendarProgramExitControl::CalendarProgramExitControl() { } dde-calendar-5.14.13/calendar-service/src/calendarprogramexitcontrol.h000066400000000000000000000027771473346337000260220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CALENDARPROGRAMEXITCONTROL_H #define CALENDARPROGRAMEXITCONTROL_H #include /** * @brief The CalendarProgramExitControl class * 后端程序退出控制 * 采用计数的方式来判断程序是否退出 * 在接口入口处添加计数,接口处理结束后减少计数,若计数为0则程序退出 */ class CalendarProgramExitControl { public: static CalendarProgramExitControl *getProgramExitControl(); CalendarProgramExitControl *operator->() const; /** * @brief addExc 接口入口处添加计数,跟reduce配对使用 */ void addExc(); /** * @brief reduce 接口处理结束后使用该函数,用来减少计数,跟addExc配对使用 */ void reduce(); static bool getClientIsOpen(); static void setClientIsOpen(bool clientIsOpen); private: CalendarProgramExitControl(); void exit(); private: static bool m_clientIsOpen; int m_excNum = 0; QReadWriteLock readWriteLock; }; class DServiceExitControl { public: DServiceExitControl() { CalendarProgramExitControl::getProgramExitControl()->addExc(); } ~DServiceExitControl() { CalendarProgramExitControl::getProgramExitControl()->reduce(); } void setClientIsOpen(bool isOpen) { CalendarProgramExitControl::setClientIsOpen(isOpen); } }; #endif // CALENDARPROGRAMEXITCONTROL_H dde-calendar-5.14.13/calendar-service/src/csystemdtimercontrol.cpp000066400000000000000000000247551473346337000252160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "csystemdtimercontrol.h" #include "commondef.h" #include "units.h" #include #include #include #include #include #include const QString UPLOADTASK_SERVICE = "uploadNetWorkAccountData_calendar.service"; const QString UPLOADTASK_TIMER = "uploadNetWorkAccountData_calendar.timer"; CSystemdTimerControl::CSystemdTimerControl(QObject *parent) : QObject(parent) { createPath(); } CSystemdTimerControl::~CSystemdTimerControl() { } void CSystemdTimerControl::buildingConfiggure(const QVector &infoVector) { qCDebug(ServiceLogger) << "buildingConfiggure"; if (infoVector.size() == 0) return; QStringList fileNameList{}; foreach (auto info, infoVector) { fileNameList.append(QString("calendar-remind-%1-%2-%3").arg(info.accountID.mid(0,8)).arg(info.alarmID.mid(0, 8)).arg(info.laterCount)); createService(fileNameList.last(), info); createTimer(fileNameList.last(), info.triggerTimer); } execLinuxCommand("systemctl --user daemon-reload"); startSystemdTimer(fileNameList); } void CSystemdTimerControl::stopSystemdTimerByJobInfos(const QVector &infoVector) { QStringList fileNameList; foreach (auto info, infoVector) { fileNameList.append(QString("calendar-remind-%1-%2-%3").arg(info.accountID.mid(0,8)).arg(info.alarmID.mid(0, 8)).arg(info.laterCount)); } stopSystemdTimer(fileNameList); } void CSystemdTimerControl::stopSystemdTimerByJobInfo(const SystemDInfo &info) { QStringList fileName; //停止刚刚提醒的稍后提醒,所以需要对提醒次数减一 fileName << QString("calendar-remind-%1-%2-%3").arg(info.accountID.mid(0,8)).arg(info.alarmID).arg(info.laterCount - 1); stopSystemdTimer(fileName); } void CSystemdTimerControl::startSystemdTimer(const QStringList &timerName) { QString command_stop("systemctl --user stop "); foreach (auto str, timerName) { command_stop += QString(" %1.timer").arg(str); } execLinuxCommand(command_stop); QString command("systemctl --user start "); foreach (auto str, timerName) { command += QString(" %1.timer").arg(str); } execLinuxCommand(command); } void CSystemdTimerControl::stopSystemdTimer(const QStringList &timerName) { QString command("systemctl --user stop "); foreach (auto str, timerName) { command += QString(" %1.timer").arg(str); } execLinuxCommand(command); } void CSystemdTimerControl::removeFile(const QStringList &fileName) { foreach (auto f, fileName) { QFile::remove(f); } } void CSystemdTimerControl::stopAllRemindSystemdTimer(const QString &accountID) { execLinuxCommand(QString("systemctl --user stop calendar-remind-%1-*.timer").arg(accountID.mid(0,8))); } void CSystemdTimerControl::removeRemindFile(const QString &accountID) { QDir dir(m_systemdPath); if (dir.exists()) { QStringList filters; filters << QString("calendar-remind-%1*").arg(accountID.mid(0,8)); dir.setFilter(QDir::Files | QDir::NoSymLinks); dir.setNameFilters(filters); for (uint i = 0; i < dir.count(); ++i) { QFile::remove(m_systemdPath + dir[i]); } } } void CSystemdTimerControl::startCalendarServiceSystemdTimer() { // 清理玲珑包的残留 QFile(m_systemdPath + "com.dde.calendarserver.calendar.service").remove(); QFile(m_systemdPath + "com.dde.calendarserver.calendar.timer").remove(); QFileInfo fileInfo(m_systemdPath + "timers.target.wants/com.dde.calendarserver.calendar.timer"); //如果没有设置定时任务则开启定时任务 if (!fileInfo.exists()) { execLinuxCommand("systemctl --user enable com.dde.calendarserver.calendar.timer"); execLinuxCommand("systemctl --user start com.dde.calendarserver.calendar.timer"); } } void CSystemdTimerControl::startDownloadTask(const QString &accountID, const int minute) { { //.service QString fileName; QString remindCMD = QString("dbus-send --session --print-reply --dest=com.deepin.dataserver.Calendar " "/com/deepin/dataserver/Calendar/AccountManager " "com.deepin.dataserver.Calendar.AccountManager.downloadByAccountID string:%1 ") .arg(accountID); fileName = m_systemdPath + accountID + "_calendar.service"; QString content; content += "[Unit]\n"; content += "Description = schedule download task.\n"; content += "[Service]\n"; content += QString("ExecStart = /bin/bash -c \"%1\"\n").arg(remindCMD); content += "[Install]\n"; content += "WantedBy=user-session.target\n"; createFile(fileName, content); } { //timer QString fileName; fileName = m_systemdPath + accountID + "_calendar.timer"; QString content; content += "[Unit]\n"; content += "Description = schedule download task.\n"; content += "[Timer]\n"; content += "OnActiveSec = 1s\n"; content += QString("OnUnitInactiveSec = %1m\n").arg(minute); content += "AccuracySec = 1us\n"; content += "RandomizedDelaySec = 0\n"; content += "[Install]\n"; content += "WantedBy = timers.target\n"; createFile(fileName, content); const QString accountTimer = accountID + "_calendar.timer"; execLinuxCommand("systemctl --user enable " + accountTimer); execLinuxCommand("systemctl --user start " + accountTimer); } } void CSystemdTimerControl::stopDownloadTask(const QString &accountID) { QString fileName; fileName = m_systemdPath + accountID + "_calendar.timer"; QString command("systemctl --user stop "); command += accountID + "_calendar.timer"; execLinuxCommand(command); QFile::remove(fileName); QString fileServiceName = m_systemdPath + accountID + "_calendar.service"; QFile::remove(fileServiceName); } void CSystemdTimerControl::startUploadTask(const int minute) { { //如果定时器为激活状态则退出 QString cmd = "systemctl --user is-active " + UPLOADTASK_SERVICE; QString isActive = execLinuxCommand(cmd); if (isActive == "active") { return; } } { //.service QString fileName; QString remindCMD = QString("dbus-send --session --print-reply --dest=com.deepin.dataserver.Calendar " "/com/deepin/dataserver/Calendar/AccountManager " "com.deepin.dataserver.Calendar.AccountManager.uploadNetWorkAccountData "); fileName = m_systemdPath + UPLOADTASK_SERVICE; QString content; content += "[Unit]\n"; content += "Description = schedule uploadNetWorkAccountData task.\n"; content += "[Service]\n"; content += QString("ExecStart = /bin/bash -c \"%1\"\n").arg(remindCMD); createFile(fileName, content); } { //timer QString fileName; fileName = m_systemdPath + UPLOADTASK_TIMER; QString content; content += "[Unit]\n"; content += "Description = schedule uploadNetWorkAccountData task.\n"; content += "[Timer]\n"; content += "OnActiveSec = 1s\n"; content += QString("OnUnitInactiveSec = %1m\n").arg(minute); content += "AccuracySec = 1us\n"; content += "RandomizedDelaySec = 0\n"; createFile(fileName, content); execLinuxCommand("systemctl --user enable " + UPLOADTASK_TIMER); execLinuxCommand("systemctl --user start " + UPLOADTASK_TIMER); } } void CSystemdTimerControl::stopUploadTask() { QString fileName; fileName = m_systemdPath + UPLOADTASK_TIMER; QString command("systemctl --user stop "); command += UPLOADTASK_TIMER; execLinuxCommand(command); QFile::remove(fileName); QString fileServiceName = m_systemdPath + UPLOADTASK_SERVICE; QFile::remove(fileServiceName); } void CSystemdTimerControl::createPath() { m_systemdPath = getHomeConfigPath().append("/systemd/user/"); // 如果位于玲珑环境, 更改systemd path路径 QString linglongAppID = qgetenv("LINGLONG_APPID"); if (!linglongAppID.isEmpty()) { m_systemdPath = "/run/host/rootfs" + m_systemdPath; qCInfo(ServiceLogger) << "In Linglong environment, change the systemd path to " << m_systemdPath; } QDir dir; // 如果该路径不存在,则创建该文件夹 if (!dir.exists(m_systemdPath)) { dir.mkpath(m_systemdPath); } } QString CSystemdTimerControl::execLinuxCommand(const QString &command) { QProcess process; process.start("/bin/bash", QStringList() << "-c" << command); process.waitForFinished(); QString strResult = process.readAllStandardOutput(); qCDebug(ServiceLogger)<< "exec: " << command << "output: " << strResult; return strResult; } void CSystemdTimerControl::createService(const QString &name, const SystemDInfo &info) { QString fileName; QString remindCMD = QString("dbus-send --session --print-reply --dest=com.deepin.dataserver.Calendar " "/com/deepin/dataserver/Calendar/AccountManager " "com.deepin.dataserver.Calendar.AccountManager.remindJob string:%1 string:%2") .arg(info.accountID) .arg(info.alarmID); fileName = m_systemdPath + name + ".service"; QString content; content += "[Unit]\n"; content += "Description = schedule reminder task.\n"; content += "[Service]\n"; content += QString("ExecStart = /bin/bash -c \"%1\"\n").arg(remindCMD); createFile(fileName, content); } void CSystemdTimerControl::createTimer(const QString &name, const QDateTime &triggerTimer) { QString fileName; fileName = m_systemdPath + name + ".timer"; QString content; content += "[Unit]\n"; content += "Description = schedule reminder task.\n"; content += "[Timer]\n"; content += "AccuracySec = 1ms\n"; content += "RandomizedDelaySec = 0\n"; content += QString("OnCalendar = %1 \n").arg(triggerTimer.toString("yyyy-MM-dd hh:mm:ss")); createFile(fileName, content); } void CSystemdTimerControl::createFile(const QString &fileName, const QString &content) { QFile file; file.setFileName(fileName); file.open(QIODevice::ReadWrite | QIODevice::Text); file.write(content.toLatin1()); file.close(); } dde-calendar-5.14.13/calendar-service/src/csystemdtimercontrol.h000066400000000000000000000065511473346337000246550ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSYSTEMDTIMERCONTROL_H #define CSYSTEMDTIMERCONTROL_H #include #include #include struct SystemDInfo { QString accountID = ""; //帐户ID QString alarmID = ""; //提醒编号id qint64 laterCount = 0; //稍后提醒次数 QDateTime triggerTimer; //触发时间 }; /** * @brief The CSystemdTimerControl class * systemd timer 控制类 */ class CSystemdTimerControl : public QObject { Q_OBJECT public: explicit CSystemdTimerControl(QObject *parent = nullptr); ~CSystemdTimerControl(); /** * @brief buildingConfiggure 根据日程信息集,创建相关的systemd配置文件,并开启定时任务 * @param infoVector */ void buildingConfiggure(const QVector &infoVector); /** * @brief stopSystemdTimerByJobInfos 根据日程信息集,停止相应的任务 * @param infoVector */ void stopSystemdTimerByJobInfos(const QVector &infoVector); /** * @brief stopSystemdTimerByJobInfo 根据日程信息,停止相关任务 * @param info */ void stopSystemdTimerByJobInfo(const SystemDInfo &info); /** * @brief startSystemdTimer 开启定时任务 * @param timerName 定时任务.timer名称集合 */ void startSystemdTimer(const QStringList &timerName); /** * @brief stopSystemdTimer 停止定时任务 * @param timerName 定时任务.timer名称集合 */ void stopSystemdTimer(const QStringList &timerName); /** * @brief stopAllRemindSystemdTimer 停止所有的日程定时任务 */ void stopAllRemindSystemdTimer(const QString &accountID); /** * @brief removeRemindFile 移除日程定时任务相关文件 */ void removeRemindFile(const QString &accountID); /** * @brief startCalendarServiceSystemdTimer 开启日程后端定时器 */ void startCalendarServiceSystemdTimer(); //开启定时下载任务 void startDownloadTask(const QString &accountID, const int minute); void stopDownloadTask(const QString &accountID); //开启定时上传任务 void startUploadTask(const int minute); void stopUploadTask(); private: /** * @brief removeFile 移除.service和.timer文件 * @param fileName */ void removeFile(const QStringList &fileName); /** * @brief createPath * 创建systemd文件路径 */ void createPath(); /** * @brief execLinuxCommand 执行linux命令 * @param command * @return */ QString execLinuxCommand(const QString &command); /** * @brief createService * 创建 .service文件 */ void createService(const QString &name, const SystemDInfo &info); /** * @brief createTimer * 创建 .timer文件 */ void createTimer(const QString &name, const QDateTime &triggerTimer); /** * @brief createFile 创建文件 * @param fileName 文件名称 * @param content 内容 */ void createFile(const QString &fileName, const QString &content); signals: public slots: private: QString m_systemdPath; }; #endif // CSYSTEMDTIMERCONTROL_H dde-calendar-5.14.13/calendar-service/src/dbmanager/000077500000000000000000000000001473346337000221205ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-service/src/dbmanager/daccountdatabase.cpp000066400000000000000000001337611473346337000261240ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daccountdatabase.h" #include "commondef.h" #include "units.h" #include "pinyin/pinyinsearch.h" #include #include #include #include #include #include DAccountDataBase::DAccountDataBase(const DAccount::Ptr &account, QObject *parent) : DDataBase(parent) , m_account(account) { setConnectionName(m_account->accountName()); } QString DAccountDataBase::createSchedule(const DSchedule::Ptr &schedule) { if (!schedule.isNull()) { SqliteQuery query(m_database); schedule->setUid(DDataBase::createUuid()); QString strSql("INSERT INTO schedules \ (scheduleID, scheduleTypeID, summary, description, allDay, dtStart \ , dtEnd, isAlarm, titlePinyin,isLunar, ics, fileName, dtCreate, isDeleted) \ VALUES(?, ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?, ?);"); if (query.prepare(strSql)) { query.addBindValue(schedule->schedulingID()); query.addBindValue(schedule->scheduleTypeID()); query.addBindValue(schedule->summary()); query.addBindValue(schedule->description()); query.addBindValue(schedule->allDay()); query.addBindValue(dtToString(schedule->dtStart())); query.addBindValue(dtToString(schedule->dtEnd())); query.addBindValue(schedule->hasEnabledAlarms()); query.addBindValue(pinyinsearch::getPinPinSearch()->CreatePinyin(schedule->summary())); query.addBindValue(schedule->lunnar()); query.addBindValue(DSchedule::toIcsString(schedule)); query.addBindValue(schedule->fileName()); query.addBindValue(dtToString(schedule->created())); query.addBindValue(0); if (!query.exec()) { schedule->setUid(""); qCWarning(ServiceLogger) << "createSchedule error:" << query.lastError(); } if (query.isActive()) { query.finish(); } } else { schedule->setUid(""); qCWarning(ServiceLogger) << "createSchedule error:" << query.lastError(); } } else { qCWarning(ServiceLogger) << "schedule is null"; } return schedule->uid(); } bool DAccountDataBase::updateSchedule(const DSchedule::Ptr &schedule) { bool resbool = false; if (!schedule.isNull()) { SqliteQuery query(m_database); QString strSql("UPDATE schedules \ SET scheduleTypeID=?, summary=?, description=?, allDay=? \ , dtStart=?, dtEnd=?, isAlarm=?,titlePinyin=?, isLunar=?, ics=?, fileName=? \ , dtUpdate=? WHERE scheduleID= ?;"); if (query.prepare(strSql)) { query.addBindValue(schedule->scheduleTypeID()); query.addBindValue(schedule->summary()); query.addBindValue(schedule->description()); query.addBindValue(schedule->allDay()); query.addBindValue(dtToString(schedule->dtStart())); query.addBindValue(dtToString(schedule->dtEnd())); query.addBindValue(schedule->hasEnabledAlarms()); query.addBindValue(pinyinsearch::getPinPinSearch()->CreatePinyin(schedule->summary())); query.addBindValue(schedule->lunnar()); query.addBindValue(DSchedule::toIcsString(schedule)); query.addBindValue(schedule->fileName()); query.addBindValue(dtToString(schedule->lastModified())); query.addBindValue(schedule->schedulingID()); if (query.exec()) { resbool = true; } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } return resbool; } DSchedule::Ptr DAccountDataBase::getScheduleByScheduleID(const QString &scheduleID) { QString strSql("SELECT scheduleID, scheduleTypeID, summary, description, allDay, dtStart, dtEnd, \ isAlarm,titlePinyin,isLunar, ics, fileName, dtCreate, dtUpdate, dtDelete, isDeleted \ FROM schedules WHERE scheduleID = ? ;"); SqliteQuery query(m_database); DSchedule::Ptr schedule; if (query.prepare(strSql)) { query.addBindValue(scheduleID); schedule = DSchedule::Ptr(new DSchedule); if (query.exec()) { if (query.next()) { QString &&icsStr = query.value("ics").toString(); DSchedule::fromIcsString(schedule, icsStr); schedule->setScheduleTypeID(query.value("scheduleTypeID").toString()); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); return schedule; } if (query.isActive()) { query.finish(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); return schedule; } return schedule; } QStringList DAccountDataBase::getScheduleIDListByTypeID(const QString &typeID) { QStringList scheduleIDList; QString strSql("SELECT scheduleID FROM schedules WHERE scheduleTypeID = ?;"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(typeID); if (query.exec()) { while (query.next()) { scheduleIDList.append(query.value("scheduleID").toString()); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } return scheduleIDList; } bool DAccountDataBase::deleteScheduleByScheduleID(const QString &scheduleID, const int isDeleted) { QString strSql; if (isDeleted) { strSql = "DELETE FROM schedules WHERE scheduleID=?;"; } else { strSql = QString("UPDATE schedules SET dtDelete = '%1' , isDeleted = 1 WHERE scheduleID=?").arg(dtToString(QDateTime::currentDateTime())); } SqliteQuery query(m_database); bool resBool = false; if (query.prepare(strSql)) { query.addBindValue(scheduleID); resBool = query.exec(); } if (!resBool) { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return resBool; } bool DAccountDataBase::deleteSchedulesByScheduleTypeID(const QString &typeID, const int isDeleted) { QString strSql; if (isDeleted) { strSql = "DELETE FROM schedules WHERE scheduleTypeID=?;"; } else { strSql = QString("UPDATE schedules SET dtDelete = '%1' , isDeleted = 1 WHERE scheduleTypeID=?").arg(dtToString(QDateTime::currentDateTime())); } SqliteQuery query(m_database); bool resBool = false; if (query.prepare(strSql)) { query.addBindValue(typeID); resBool = query.exec(); } if (!resBool) { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return resBool; } DSchedule::List DAccountDataBase::querySchedulesByKey(const QString &key) { DSchedule::List scheduleList; QString strSql("SELECT s.scheduleID, s.scheduleTypeID, s.summary, s.description, s.allDay, s.dtStart, s.dtEnd, \ s.isAlarm,s.titlePinyin,s.isLunar, s.ics, s.fileName, s.dtCreate, s.dtUpdate, s.dtDelete, s.isDeleted \ FROM schedules s inner join scheduleType st WHERE s.isDeleted = 0 and st.showState =1 and s.scheduleTypeID = st.typeID "); //如果关键字不为空,添加查询条件 pinyinsearch *psearch = pinyinsearch::getPinPinSearch(); QMap sqlBindValue; QString strKey = key.trimmed(); if (psearch->CanQueryByPinyin(key)) { //可以按照拼音查询 QString pinyin = psearch->CreatePinyinQuery(strKey.toLower()); strSql += QString("and ( instr(UPPER(s.summary), UPPER(:key)) OR s.titlePinyin LIKE :pinyin )"); sqlBindValue[":key"] = key; sqlBindValue[":pinyin"] = pinyin; } else if (!key.isEmpty()) { //按照key查询 strSql += QString(" and instr(UPPER(s.summary), UPPER(:key))"); sqlBindValue[":key"] = key; } strSql.append(QString(" order by :strsort ")); sqlBindValue[":strsort"] = "s.dtStart asc"; SqliteQuery query(m_database); if (query.prepare(strSql)) { for (auto iter = sqlBindValue.constBegin(); iter != sqlBindValue.constEnd(); iter++) { query.bindValue(iter.key(), iter.value()); } if (query.exec()) { while (query.next()) { DSchedule::Ptr schedule; QString &&icsStr = query.value("ics").toString(); DSchedule::fromIcsString(schedule, icsStr); schedule->setScheduleTypeID(query.value("scheduleTypeID").toString()); scheduleList.append(schedule); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return scheduleList; } DSchedule::List DAccountDataBase::querySchedulesByRRule(const QString &key, const int &rruleType) { DSchedule::List scheduleList; QString strSql("SELECT scheduleID, scheduleTypeID, summary, description, allDay, dtStart, dtEnd, \ isAlarm,titlePinyin,isLunar, ics, fileName, dtCreate, dtUpdate, dtDelete, isDeleted \ FROM schedules "); SqliteQuery query(m_database); if (!key.isEmpty()) { strSql += " WHERE summary = ? "; } if (query.prepare(strSql)) { if (!key.isEmpty()) { query.addBindValue(key); } if (query.exec()) { while (query.next()) { DSchedule::Ptr schedule = DSchedule::Ptr(new DSchedule); QString &&icsStr = query.value("ics").toString(); DSchedule::fromIcsString(schedule, icsStr); schedule->setScheduleTypeID(query.value("scheduleTypeID").toString()); DSchedule::RRuleType rRuleType = schedule->getRRuleType(); //如果存在重复规则 if (schedule->recurs()) { //如果为需要获取的重复规则 if (rruleType == rRuleType) { scheduleList.append(schedule); } } } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return scheduleList; } DSchedule::List DAccountDataBase::getRemindSchedule() { QString strSql("SELECT scheduleID, scheduleTypeID, summary, description, allDay, dtStart, dtEnd, isAlarm, \ titlePinyin, isLunar, ics, fileName, dtCreate, dtUpdate, dtDelete, isDeleted \ FROM schedules WHERE isAlarm =1;"); SqliteQuery query(m_database); DSchedule::List scheduleList; if (query.prepare(strSql)) { if (query.exec()) { while (query.next()) { DSchedule::Ptr schedule = DSchedule::Ptr(new DSchedule); QString &&icsStr = query.value("ics").toString(); DSchedule::fromIcsString(schedule, icsStr); scheduleList.append(schedule); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return scheduleList; } void DAccountDataBase::initDBData() { //如果不存在对应的数据库则创建 if (!dbFileExists()) { createDB(); initTypeColor(); initScheduleDB(); initScheduleType(); initAccountDB(); } else { //如果存在则连接数据库 dbOpen(); } } QString DAccountDataBase::createScheduleType(const DScheduleType::Ptr &scheduleType) { QString strSql("INSERT INTO scheduleType ( \ typeID, typeName, typeDisplayName, typePath, \ typeColorID, description, privilege, showState, \ syncTag,dtCreate,isDeleted) \ VALUES(?,?,?,?,?,?,?,?,?,?,?)"); SqliteQuery query(m_database); if (query.prepare(strSql)) { if (scheduleType->typeID().size() < 30) { scheduleType->setTypeID(DDataBase::createUuid()); } query.addBindValue(scheduleType->typeID()); query.addBindValue(scheduleType->typeName()); query.addBindValue(scheduleType->displayName()); query.addBindValue(scheduleType->typePath()); query.addBindValue(scheduleType->typeColor().colorID()); query.addBindValue(scheduleType->description()); query.addBindValue(int(scheduleType->privilege())); query.addBindValue(scheduleType->showState()); query.addBindValue(scheduleType->syncTag()); query.addBindValue(dtToString(scheduleType->dtCreate())); query.addBindValue(scheduleType->deleted()); if (!query.exec()) { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); scheduleType->setTypeID(""); } } else { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); scheduleType->setTypeID(""); } if (query.isActive()) { query.finish(); } return scheduleType->typeID(); } DScheduleType::Ptr DAccountDataBase::getScheduleTypeByID(const QString &typeID, const int isDeleted) { DScheduleType::Ptr type; QString strSql("SELECT \ st.typeID , st.typeName ,st.typeDisplayName , \ st.typePath ,st.typeColorID ,tc.ColorHex , \ tc.privilege as colorPri,st.description, \ st.privilege as typePri,st.showState ,st.syncTag , \ st.dtCreate ,st.dtUpdate ,st.dtDelete ,st.isDeleted \ FROM \ scheduleType st \ inner join typeColor tc on \ st.typeColorID = tc.ColorID \ WHERE \ st.typeID = ? AND st.isDeleteD = ?"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(typeID); query.addBindValue(isDeleted); if (query.exec() && query.next()) { type = DScheduleType::Ptr(new DScheduleType(m_account->accountID())); type->setTypeID(typeID); type->setTypeName(query.value("typeName").toString()); type->setDisplayName(query.value("typeDisplayName").toString()); type->setTypePath(query.value("typePath").toString()); DTypeColor color; color.setColorID(query.value("typeColorID").toString()); color.setColorCode(query.value("ColorHex").toString()); color.setPrivilege(static_cast(query.value("colorPri").toInt())); type->setTypeColor(color); type->setDescription(query.value("description").toString()); type->setPrivilege(static_cast(query.value("typePri").toInt())); type->setSyncTag(query.value("syncTag").toInt()); type->setDtCreate(dtFromString(query.value("dtCreate").toString())); type->setDtUpdate(dtFromString(query.value("dtUpdate").toString())); type->setDtDelete(dtFromString(query.value("dtDelete").toString())); type->setShowState(static_cast(query.value("showState").toInt())); type->setDeleted(query.value("isDeleted").toInt()); systemTypeTran(type); } } else { qCWarning(ServiceLogger) << query.lastError(); } query.addBindValue(typeID); query.addBindValue(isDeleted); if (query.isActive()) { query.finish(); } return type; } DScheduleType::List DAccountDataBase::getScheduleTypeList(const int isDeleted) { QString strSql("SELECT \ st.typeID , st.typeName ,st.typeDisplayName , \ st.typePath ,st.typeColorID ,tc.ColorHex , \ tc.privilege as colorPri,st.description, \ st.privilege as typePri,st.showState ,st.syncTag , \ st.dtCreate ,st.dtUpdate ,st.dtDelete ,st.isDeleted \ FROM \ scheduleType st \ inner join typeColor tc on \ st.typeColorID = tc.ColorID \ WHERE \ st.isDeleted = ?"); DScheduleType::List typeList; SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(isDeleted); if (query.exec()) { while (query.next()) { DScheduleType::Ptr type = DScheduleType::Ptr(new DScheduleType(m_account->accountID())); type->setTypeID(query.value("typeID").toString()); type->setTypeName(query.value("typeName").toString()); type->setDisplayName(query.value("typeDisplayName").toString()); type->setTypePath(query.value("typePath").toString()); DTypeColor color; color.setColorID(query.value("typeColorID").toString()); color.setColorCode(query.value("ColorHex").toString()); color.setPrivilege(static_cast(query.value("colorPri").toInt())); type->setTypeColor(color); type->setDescription(query.value("description").toString()); type->setPrivilege(static_cast(query.value("typePri").toInt())); type->setSyncTag(query.value("syncTag").toInt()); type->setDtCreate(dtFromString(query.value("dtCreate").toString())); type->setDtUpdate(dtFromString(query.value("dtUpdate").toString())); type->setDtDelete(dtFromString(query.value("dtDelete").toString())); type->setShowState(static_cast(query.value("showState").toInt())); type->setDeleted(query.value("isDeleted").toInt()); systemTypeTran(type); typeList.append(type); } } else { qCWarning(ServiceLogger) << "getScheduleTypeList error:" << query.lastError(); } } else { qCWarning(ServiceLogger) << "getScheduleTypeList error:" << query.lastError(); } if (query.isActive()) { query.finish(); } return typeList; } bool DAccountDataBase::scheduleTypeByUsed(const QString &typeID, const int isDeleted) { QString strSql("SELECT COUNT(scheduleTypeID) FROM schedules WHERE scheduleTypeID = ? AND isDeleted = ?;"); SqliteQuery query(m_database); int typeCount = 0; if (query.prepare(strSql)) { query.addBindValue(typeID); query.addBindValue(isDeleted); if (query.exec() && query.next()) { typeCount = query.value(0).toInt(); } } else { qCWarning(ServiceLogger) << query.lastError(); } if (query.isActive()) { query.finish(); } return typeCount; } bool DAccountDataBase::deleteScheduleTypeByID(const QString &typeID, const int isDeleted) { SqliteQuery query(m_database); QString strSql; if (isDeleted == 0) { //弱删除 QDateTime &&dtCurrent = QDateTime::currentDateTime(); strSql = QString("UPDATE scheduleType SET dtDelete='%1', isDeleted=1 WHERE typeID=?;") .arg(dtToString(dtCurrent)); } else { //真删除 strSql = "DELETE FROM scheduleType WHERE typeID = ?"; } bool res = false; if (query.prepare(strSql)) { query.addBindValue(typeID); res = query.exec(); if (!res) { qCWarning(ServiceLogger) << "DELETE scheduleType error by typeID:" << typeID << " " << query.lastError(); } if (query.isActive()) { query.finish(); } } else { qCWarning(ServiceLogger) << "DELETE scheduleType error by typeID:" << typeID << " " << query.lastError(); } return res; } bool DAccountDataBase::updateScheduleType(const DScheduleType::Ptr &scheduleType) { bool res = false; SqliteQuery query(m_database); QString strSql("UPDATE scheduleType \ SET typeName=?, typeDisplayName=?, typePath=?, typeColorID=?, description=?, \ privilege=?, showState=?, dtUpdate=?, dtDelete=?, isDeleted=? \ WHERE typeID = ?"); if (query.prepare(strSql)) { query.addBindValue(scheduleType->typeName()); query.addBindValue(scheduleType->displayName()); query.addBindValue(scheduleType->typePath()); query.addBindValue(scheduleType->typeColor().colorID()); query.addBindValue(scheduleType->description()); query.addBindValue(int(scheduleType->privilege())); query.addBindValue(scheduleType->showState()); query.addBindValue(dtConvert(scheduleType->dtUpdate())); query.addBindValue(dtConvert(scheduleType->dtDelete())); query.addBindValue(scheduleType->deleted()); query.addBindValue(scheduleType->typeID()); if (query.exec()) { res = true; } else { qCWarning(ServiceLogger) << "updateScheduleType error:" << query.lastError(); } } else { qCWarning(ServiceLogger) << "updateScheduleType error:" << query.lastError(); } if (query.isActive()) { query.finish(); } return res; } QString DAccountDataBase::getFestivalTypeID() { QString strSql("SELECT typeID FROM scheduleType WHERE privilege = 0;"); SqliteQuery query(m_database); QString typeID(""); if (query.prepare(strSql)) { if (query.exec()) { if (query.next()) { typeID = query.value("typeID").toString(); } } else { qCWarning(ServiceLogger) << "updateScheduleType error:" << query.lastError(); } } else { qCWarning(ServiceLogger) << "updateScheduleType error:" << query.lastError(); } if (query.isActive()) { query.finish(); } return typeID; } void DAccountDataBase::getAccountInfo(const DAccount::Ptr &account) { QString strSql("SELECT syncState,accountState, accountName, displayName, cloudPath, \ accountType, syncFreq, intervalTime, syncTag, expandStatus, dtLastUpdate \ FROM account WHERE id = 1;"); SqliteQuery query(m_database); if (query.prepare(strSql) && query.exec() && query.next()) { account->setSyncState(static_cast(query.value("syncState").toInt())); // accountState字段以accountmanager.db中accountManager字段为准,它会在登陆和切换状态时根据最新云同步状态去更新开关状态 // account->setAccountState(static_cast(query.value("accountState").toInt())); account->setAccountName(query.value("accountName").toString()); account->setDisplayName(query.value("displayName").toString()); account->setCloudPath(query.value("cloudPath").toString()); account->setAccountType(static_cast(query.value("accountType").toInt())); account->setSyncFreq(static_cast(query.value("syncFreq").toInt())); account->setIntervalTime(query.value("intervalTime").toInt()); account->setSyncTag(query.value("syncTag").toInt()); account->setIsExpandDisplay(query.value("expandStatus").toBool()); account->setDtLastSync(dtFromString(query.value("dtLastUpdate").toString())); } else { qCWarning(ServiceLogger) << query.lastError(); } if (query.isActive()) { query.finish(); } } void DAccountDataBase::updateAccountInfo() { QString strSql("UPDATE account \ SET syncState=?, accountState = ?,accountName=?, displayName=?, \ cloudPath=?, accountType=?, syncFreq=?, intervalTime=?, syncTag=? \ , expandStatus = ?, dtLastUpdate = ? WHERE id=1;"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(m_account->syncState()); query.addBindValue(int(m_account->accountState())); query.addBindValue(m_account->accountName()); query.addBindValue(m_account->displayName()); query.addBindValue(m_account->cloudPath()); query.addBindValue(m_account->accountType()); query.addBindValue(m_account->syncFreq()); query.addBindValue(m_account->intervalTime()); query.addBindValue(m_account->syncTag()); query.addBindValue(m_account->isExpandDisplay()); query.addBindValue(dtToString(m_account->dtLastSync())); if (!query.exec()) { qCWarning(ServiceLogger) << query.lastError(); } } else { qCWarning(ServiceLogger) << query.lastError(); } if (query.isActive()) { query.finish(); } } bool DAccountDataBase::addTypeColor(const DTypeColor::Ptr &typeColor) { if (typeColor.isNull()) return false; return addTypeColor(*typeColor.data()); } bool DAccountDataBase::addTypeColor(DTypeColor &typeColor) { QString strSql("INSERT INTO TypeColor \ (ColorID, ColorHex, privilege,dtCreate) \ VALUES(:ColorID, :ColorHex, :privilege,:dtCreate)"); //如果为空则创建颜色id if (typeColor.colorID().isEmpty()) { typeColor.setColorID(createUuid()); } if (typeColor.dtCreate().isNull()) { typeColor.setDtCreate(QDateTime::currentDateTime()); } SqliteQuery query(m_database); bool res = false; if (query.prepare(strSql)) { query.bindValue(":ColorID", typeColor.colorID()); query.bindValue(":ColorHex", typeColor.colorCode()); query.bindValue(":privilege", typeColor.privilege()); query.bindValue(":dtCreate", dtToString(typeColor.dtCreate())); if (query.exec()) { res = true; } else { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); } } else { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); } if (query.isActive()) { query.finish(); } return res; } void DAccountDataBase::deleteTypeColor(const QString &colorNo) { QString strSql("DELETE FROM typeColor WHERE ColorID = ?;"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(colorNo); if (!query.exec()) { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); } } else { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); } if (query.isActive()) { query.finish(); } } DTypeColor::List DAccountDataBase::getSysColor() { QString strSql("SELECT ColorID, ColorHex, privilege,dtCreate FROM typeColor WHERE privilege =1;"); SqliteQuery query(m_database); DTypeColor::List typeColorList; if (query.prepare(strSql) && query.exec()) { while (query.next()) { DTypeColor::Ptr color = DTypeColor::Ptr(new DTypeColor); color->setColorID(query.value("ColorID").toString()); color->setColorCode(query.value("ColorHex").toString()); color->setPrivilege(static_cast(query.value("privilege").toInt())); color->setDtCreate(dtFromString(query.value("dtCreate").toString())); typeColorList.append(color); } } else { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); } if (query.isActive()) { query.finish(); } return typeColorList; } void DAccountDataBase::createRemindInfo(const DRemindData::Ptr &remind) { QString strSql("INSERT INTO remindTask \ (alarmID, scheduleID, recurID,remindCount,notifyID \ , dtRemind, dtStart, dtEnd) \ VALUES(?,?,?,?,?,?,?,?);"); SqliteQuery query(m_database); if (query.prepare(strSql)) { remind->setAlarmID(createUuid()); query.addBindValue(remind->alarmID()); query.addBindValue(remind->scheduleID()); query.addBindValue(dtToString(remind->recurrenceId())); query.addBindValue(remind->remindCount()); query.addBindValue(remind->notifyid()); query.addBindValue(dtToString(remind->dtRemind())); query.addBindValue(dtToString(remind->dtStart())); query.addBindValue(dtToString(remind->dtEnd())); if (!query.exec()) { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } void DAccountDataBase::updateRemindInfo(const DRemindData::Ptr &remind) { QString strSql("UPDATE remindTask \ SET scheduleID=?, recurID=?, remindCount=?, \ notifyID=?, dtRemind=?, dtStart=?, dtEnd=? WHERE alarmID = ?"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(remind->scheduleID()); query.addBindValue(dtToString(remind->recurrenceId())); query.addBindValue(remind->remindCount()); query.addBindValue(remind->notifyid()); query.addBindValue(dtToString(remind->dtRemind())); query.addBindValue(dtToString(remind->dtStart())); query.addBindValue(dtToString(remind->dtEnd())); query.addBindValue(remind->alarmID()); if (!query.exec()) { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } void DAccountDataBase::deleteRemindInfoByAlarmID(const QString &alarmID) { QString strSql("DELETE FROM remindTask WHERE alarmID=?;"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(alarmID); if (!query.exec()) { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } } DRemindData::Ptr DAccountDataBase::getRemindData(const QString &alarmID) { QString strSql("SELECT alarmID, scheduleID, recurID, remindCount, notifyID, dtRemind, dtStart, dtEnd \ FROM remindTask WHERE alarmID = ? ;"); SqliteQuery query(m_database); DRemindData::Ptr remindData; if (query.prepare(strSql)) { query.addBindValue(alarmID); if (query.exec()) { while (query.next()) { remindData = DRemindData::Ptr(new DRemindData); remindData->setAlarmID(query.value("alarmID").toString()); remindData->setScheduleID(query.value("scheduleID").toString()); remindData->setRemindCount(query.value("remindCount").toInt()); remindData->setNotifyid(query.value("notifyID").toInt()); remindData->setDtStart(dtFromString(query.value("dtStart").toString())); remindData->setDtEnd(dtFromString(query.value("dtEnd").toString())); remindData->setDtRemind(dtFromString(query.value("dtRemind").toString())); remindData->setRecurrenceId(dtFromString(query.value("recurID").toString())); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return remindData; } DRemindData::List DAccountDataBase::getValidRemindJob() { QString strSql("SELECT alarmID,scheduleID, recurID, remindCount, notifyID, dtRemind, dtStart, dtEnd \ FROM remindTask WHERE dtRemind > ? ;"); SqliteQuery query(m_database); DRemindData::List remindList; if (query.prepare(strSql)) { query.addBindValue(dtToString(QDateTime::currentDateTime())); if (query.exec()) { while (query.next()) { DRemindData::Ptr remindData = DRemindData::Ptr(new DRemindData); remindData->setAccountID(m_account->accountID()); remindData->setAlarmID(query.value("alarmID").toString()); remindData->setScheduleID(query.value("scheduleID").toString()); remindData->setRemindCount(query.value("remindCount").toInt()); remindData->setNotifyid(query.value("notifyID").toInt()); remindData->setDtStart(dtFromString(query.value("dtStart").toString())); remindData->setDtEnd(dtFromString(query.value("dtEnd").toString())); remindData->setDtRemind(dtFromString(query.value("dtRemind").toString())); remindData->setRecurrenceId(dtFromString(query.value("recurID").toString())); remindList.append(remindData); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return remindList; } void DAccountDataBase::clearRemindJobDatabase() { SqliteQuery query(m_database); QString sql("delete from remindTask"); if (query.exec(sql)) { if (query.isActive()) { query.finish(); } } else { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); } } DRemindData::List DAccountDataBase::getRemindByScheduleID(const QString &scheduleID) { QString strSql("SELECT alarmID, scheduleID, recurID, remindCount, notifyID, dtRemind, dtStart, dtEnd \ FROM remindTask WHERE scheduleID = ? ;"); SqliteQuery query(m_database); DRemindData::List remindList; if (query.prepare(strSql)) { query.addBindValue(scheduleID); if (query.exec()) { while (query.next()) { DRemindData::Ptr remindData = DRemindData::Ptr(new DRemindData); remindData->setAlarmID(query.value("alarmID").toString()); remindData->setScheduleID(query.value("scheduleID").toString()); remindData->setRemindCount(query.value("remindCount").toInt()); remindData->setNotifyid(query.value("notifyID").toInt()); remindData->setDtStart(dtFromString(query.value("dtStart").toString())); remindData->setDtEnd(dtFromString(query.value("dtEnd").toString())); remindData->setDtRemind(dtFromString(query.value("dtRemind").toString())); remindData->setRecurrenceId(dtFromString(query.value("recurID").toString())); remindList.append(remindData); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return remindList; } void DAccountDataBase::addUploadTask(const DUploadTaskData::Ptr &uploadTask) { QString strSql("INSERT INTO uploadTask \ (taskID, uploadType, uploadObject, objectID, dtCreate) \ VALUES(?, ?, ?, ?, ?);"); SqliteQuery query(m_database); if (query.prepare(strSql)) { uploadTask->setTaskID(createUuid()); query.addBindValue(uploadTask->taskID()); query.addBindValue(uploadTask->taskType()); query.addBindValue(uploadTask->taskObject()); query.addBindValue(uploadTask->objectId()); query.addBindValue(dtToString(QDateTime::currentDateTime())); if (!query.exec()) { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } } DUploadTaskData::List DAccountDataBase::getUploadTask() { DUploadTaskData::List uploadList; QString strSql("SELECT taskID, uploadType, uploadObject, objectID, dtCreate \ FROM uploadTask;"); SqliteQuery query(m_database); if (query.prepare(strSql) && query.exec()) { while (query.next()) { DUploadTaskData::Ptr upload = DUploadTaskData::Ptr(new DUploadTaskData); upload->setTaskID(query.value("taskID").toString()); upload->setTaskType(static_cast(query.value("uploadType").toInt())); upload->setTaskObject(static_cast(query.value("uploadObject").toInt())); upload->setObjectId(query.value("objectID").toString()); upload->setDtCreate(dtFromString(query.value("dtCreate").toString())); uploadList.append(upload); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return uploadList; } void DAccountDataBase::deleteUploadTask(const QString &taskID) { QString strSql("DELETE FROM uploadTask WHERE taskID = ?;"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(taskID); if (!query.exec()) { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } } void DAccountDataBase::createDB() { dbOpen(); //这里用QFile来修改日历数据库文件的权限 QFile file; file.setFileName(getDBPath()); //如果不存在该文件则创建 if (!file.exists() && m_database.open()) { m_database.close(); } //将权限修改为600(对文件的所有者可以读写,其他用户不可读不可写) if (!file.setPermissions(QFile::WriteOwner | QFile::ReadOwner)) { qCWarning(ServiceLogger) << "permissions cannot be modified,error:" << file.errorString(); } if (m_database.open()) { SqliteQuery query(m_database); bool res = true; //帐户信息表 res = query.exec(sql_create_account); if (!res) { qCWarning(ServiceLogger) << "account create failed.error:" << query.lastError(); } //日程表 res = query.exec(sql_create_schedules); if (!res) { qCWarning(ServiceLogger) << "schedules create failed.error:" << query.lastError(); } //类型表 res = query.exec(sql_create_scheduleType); if (!res) { qCWarning(ServiceLogger) << "scheduleType create failed.error:" << query.lastError(); } //颜色表 res = query.exec(sql_create_typeColor); if (!res) { qCWarning(ServiceLogger) << "typeColorSql create failed.error:" << query.lastError(); } //创建上传任务表 res = query.exec(sql_create_uploadTask); if (!res) { qCWarning(ServiceLogger) << "uploadTask create failed.error:" << query.lastError(); } //创建提醒任务表 res = query.exec(sql_create_remindTask); if (!res) { qCWarning(ServiceLogger) << "remindTask create failed.error:" << query.lastError(); } if (query.isActive()) { query.finish(); } } } void DAccountDataBase::initScheduleDB() { //创建数据库时,需要初始化的日程数据 } void DAccountDataBase::initScheduleType() { //创建数据库时,需要初始化的类型数据 initSysType(); } void DAccountDataBase::initSysType() { //如果为本地帐户则初始化本地日程类型数据 if (m_account->accountType() == DAccount::Account_Local) { QDateTime currentTime = QDateTime::currentDateTime(); //添加节假日日程类型,不会展示在类型列表中 DScheduleType::Ptr scheduleType(new DScheduleType); scheduleType->setTypeID(createUuid()); scheduleType->setDtCreate(currentTime.addDays(-3)); scheduleType->setPrivilege(DScheduleType::None); scheduleType->setTypeName("festival"); scheduleType->setDisplayName("Holiday schedule type"); scheduleType->setColorID(GFestivalColorID); scheduleType->setColorCode("#FF9436"); scheduleType->setShowState(DScheduleType::Show); createScheduleType(scheduleType); //工作类型 DScheduleType::Ptr workType(new DScheduleType(m_account->accountID())); workType->setTypeID("107c369e-b13a-4d45-9ff3-de4eb3c0475b"); workType->setDtCreate(currentTime.addDays(-2)); workType->setPrivilege(DScheduleType::Read); workType->setTypeName("Work"); workType->setDisplayName("Work"); DTypeColor workColor; workColor.setColorID(GWorkColorID); workColor.setColorCode("#ff5e97"); workColor.setPrivilege(DTypeColor::PriSystem); workType->setTypeColor(workColor); workType->setShowState(DScheduleType::Show); createScheduleType(workType); //生活 DScheduleType::Ptr lifeType(new DScheduleType(m_account->accountID())); lifeType->setTypeID("24cf3ae3-541d-487f-83df-f068416b56b6"); lifeType->setDtCreate(currentTime.addDays(-1)); lifeType->setPrivilege(DScheduleType::Read); lifeType->setTypeName("Life"); lifeType->setDisplayName("Life"); DTypeColor lifeColor; lifeColor.setColorID(GLifeColorID); lifeColor.setColorCode("#5d51ff"); lifeColor.setPrivilege(DTypeColor::PriSystem); lifeType->setTypeColor(lifeColor); lifeType->setShowState(DScheduleType::Show); createScheduleType(lifeType); //其他 DScheduleType::Ptr otherType(new DScheduleType(m_account->accountID())); otherType->setTypeID("403bf009-2005-4679-9c76-e73d9f83a8b4"); otherType->setDtCreate(currentTime); otherType->setPrivilege(DScheduleType::Read); otherType->setTypeName("Other"); otherType->setDisplayName("Other"); DTypeColor otherColor; otherColor.setColorID(GOtherColorID); otherColor.setColorCode("#5bdd80"); otherColor.setPrivilege(DTypeColor::PriSystem); otherType->setTypeColor(otherColor); otherType->setShowState(DScheduleType::Show); createScheduleType(otherType); } } void DAccountDataBase::systemTypeTran(const DScheduleType::Ptr &type) { //如果为本地帐户且类型为默认类型 if ((m_account->accountType() == DAccount::Account_Local || m_account->accountType() == DAccount::Account_UnionID) && type->privilege() == DScheduleType::Privilege::Read) { if (type->typeName() == "Work") { type->setDisplayName(tr("Work")); } else if (type->typeName() == "Life") { type->setDisplayName(tr("Life")); } else if (type->typeName() == "Other") { type->setDisplayName(tr("Other")); } } } void DAccountDataBase::initTypeColor() { QDateTime currentTime = QDateTime::currentDateTime(); int index = -10; QMap::const_iterator iter = GTypeColor.constBegin(); for (; iter != GTypeColor.constEnd(); ++iter) { DTypeColor::Ptr typeColor(new DTypeColor); typeColor->setDtCreate(currentTime.addDays(++index)); typeColor->setPrivilege(DTypeColor::PriSystem); typeColor->setColorCode(iter.value()); typeColor->setColorID(iter.key()); addTypeColor(typeColor); } } void DAccountDataBase::initAccountDB() { QString strSql("INSERT \ INTO \ account \ (syncState,accountState,accountName, \ displayName,cloudPath,accountType, \ syncFreq,intervalTime,syncTag, expandStatus) \ VALUES(?,?,?,?,?,?,?,?,?,?);"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(m_account->syncState()); query.addBindValue(int(m_account->accountState())); query.addBindValue(m_account->accountName()); query.addBindValue(m_account->displayName()); query.addBindValue(m_account->cloudPath()); query.addBindValue(m_account->accountType()); query.addBindValue(m_account->syncFreq()); query.addBindValue(m_account->intervalTime()); query.addBindValue(m_account->syncTag()); query.addBindValue(m_account->isExpandDisplay()); if (!query.exec()) { qCWarning(ServiceLogger) << "initAccountDB error:" << query.lastError(); } } else { qCWarning(ServiceLogger) << "initAccountDB error:" << query.lastError(); } if (query.isActive()) { query.finish(); } } dde-calendar-5.14.13/calendar-service/src/dbmanager/daccountdatabase.h000066400000000000000000000102761473346337000255640ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DACCOUNTDATABASE_H #define DACCOUNTDATABASE_H #include "ddatabase.h" #include "daccount.h" #include "dschedule.h" #include "dscheduletype.h" #include "dreminddata.h" #include "duploadtaskdata.h" #include "dtypecolor.h" #include class DAccountDataBase : public DDataBase { Q_OBJECT public: typedef QSharedPointer Ptr; explicit DAccountDataBase(const DAccount::Ptr &account, QObject *parent = nullptr); //初始化数据库数据,会创建数据库文件和相关数据表 void initDBData() override; ///////////////日程信息 //创建日程 QString createSchedule(const DSchedule::Ptr &schedule); bool updateSchedule(const DSchedule::Ptr &schedule); //根据日程id获取日程信息 DSchedule::Ptr getScheduleByScheduleID(const QString &scheduleID); //根据日程类型ID获取日程id列表 QStringList getScheduleIDListByTypeID(const QString &typeID); bool deleteScheduleByScheduleID(const QString &scheduleID, const int isDeleted = 0); bool deleteSchedulesByScheduleTypeID(const QString &typeID, const int isDeleted = 0); //根据关键字查询一定范围内的日程 DSchedule::List querySchedulesByKey(const QString &key); //根据重复规则查询一定范围内的日程 DSchedule::List querySchedulesByRRule(const QString &key, const int &rruleType); //获取需要提醒的日程信息 DSchedule::List getRemindSchedule(); ///////////////类型信息 /** * @brief createScheduleType 创建日程类型 * @param typeInfo * @return */ QString createScheduleType(const DScheduleType::Ptr &scheduleType); virtual DScheduleType::Ptr getScheduleTypeByID(const QString &typeID, const int isDeleted = 0); virtual DScheduleType::List getScheduleTypeList(const int isDeleted = 0); bool scheduleTypeByUsed(const QString &typeID, const int isDeleted = 0); bool deleteScheduleTypeByID(const QString &typeID, const int isDeleted = 0); bool updateScheduleType(const DScheduleType::Ptr &scheduleType); //获取节假日类型ID QString getFestivalTypeID(); ///////////////帐户信息 void getAccountInfo(const DAccount::Ptr &account); void updateAccountInfo(); ///////////////////类型颜色 bool addTypeColor(const DTypeColor::Ptr &typeColor); bool addTypeColor(DTypeColor &typeColor); void deleteTypeColor(const QString &colorNo); //获取内置类型颜色 DTypeColor::List getSysColor(); ////////////////////任务 /** * @brief createRemindInfo 存储提醒日程的相关信息 * @param remind */ void createRemindInfo(const DRemindData::Ptr &remind); /** * @brief updateRemindJob 更新对应的稍后提醒日程 * @param job 日程信息 */ void updateRemindInfo(const DRemindData::Ptr &remind); void deleteRemindInfoByAlarmID(const QString &alarmID); DRemindData::Ptr getRemindData(const QString &alarmID); /** * @brief getValidRemindJob 获取未提醒的稍后提醒日程 * @return */ DRemindData::List getValidRemindJob(); /** * @brief clearRemindJobDatabase 清空稍后提醒表 */ void clearRemindJobDatabase(); DRemindData::List getRemindByScheduleID(const QString &scheduleID); /** * @brief deleteRemindJobs 根据日程id删除提醒日程信息 * @param Ids 日程id集 */ void deleteRemindInfos(const QStringList &jobIDs); //添加上传任务 void addUploadTask(const DUploadTaskData::Ptr &uploadTask); DUploadTaskData::List getUploadTask(); void deleteUploadTask(const QString &taskID); protected: virtual void initScheduleType(); //初始化系统类型 virtual void initSysType(); void systemTypeTran(const DScheduleType::Ptr &type); protected: void createDB() override; //初始化日程数据库 void initScheduleDB(); void initTypeColor(); void initAccountDB(); protected: DAccount::Ptr m_account; }; #endif // DACCOUNTDATABASE_H dde-calendar-5.14.13/calendar-service/src/dbmanager/daccountmanagerdatabase.cpp000066400000000000000000000345511473346337000274540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daccountmanagerdatabase.h" #include "units.h" #include "commondef.h" #include #include #include #include DAccountManagerDataBase::DAccountManagerDataBase(QObject *parent) : DDataBase(parent) { setConnectionName(NameAccountManager); } void DAccountManagerDataBase::initDBData() { createDB(); initAccountManagerDB(); } DAccount::List DAccountManagerDataBase::getAccountList() { DAccount::List accountList; QString strSql("SELECT accountID,accountName, displayName, accountState, accountAvatar, \ accountDescription, accountType, dbName,dBusPath,dBusInterface, dtCreate, expandStatus, dtDelete, dtUpdate, isDeleted \ FROM accountManager"); SqliteQuery query(m_database); if (query.prepare(strSql) && query.exec()) { while (query.next()) { DAccount::Type type = static_cast(query.value("accountType").toInt()); DAccount::Ptr account(new DAccount(type)); account->setAccountID(query.value("accountID").toString()); account->setAccountName(query.value("accountName").toString()); account->setDisplayName(query.value("displayName").toString()); account->setAccountState(static_cast(query.value("accountState").toInt())); account->setAvatar(query.value("accountAvatar").toString()); account->setDescription(query.value("accountDescription").toString()); account->setDbName(query.value("dbName").toString()); account->setDbusPath(query.value("dBusPath").toString()); account->setDbusInterface(query.value("dBusInterface").toString()); account->setIsExpandDisplay(query.value("expandStatus").toBool()); account->setDtCreate(QDateTime::fromString(query.value("dtCreate").toString(), Qt::ISODate)); accountList.append(account); } } else { qCWarning(ServiceLogger) << "getAccountList error:" << query.lastError(); } return accountList; } DAccount::Ptr DAccountManagerDataBase::getAccountByID(const QString &accountID) { QString strSql("SELECT accountName, displayName, accountState, accountAvatar, \ accountDescription, accountType, dbName,dBusPath,dBusInterface, dtCreate, dtDelete, dtUpdate, expandStatus, isDeleted \ FROM accountManager WHERE accountID = ?"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(accountID); if (query.exec() && query.next()) { DAccount::Type type = static_cast(query.value("accountType").toInt()); DAccount::Ptr account(new DAccount(type)); account->setAccountID(accountID); account->setAccountName(query.value("accountName").toString()); account->setDisplayName(query.value("displayName").toString()); account->setAccountState(static_cast(query.value("accountState").toInt())); account->setAvatar(query.value("accountAvatar").toString()); account->setDescription(query.value("accountDescription").toString()); account->setDbName(query.value("dbName").toString()); account->setDbusPath(query.value("dBusPath").toString()); account->setDbusInterface(query.value("dBusInterface").toString()); account->setIsExpandDisplay(query.value("expandStatus").toBool()); account->setDtCreate(QDateTime::fromString(query.value("dtCreate").toString(), Qt::ISODate)); return account; } else { qCWarning(ServiceLogger) << "getAccountByID error:" << query.lastError(); } } else { qCWarning(ServiceLogger) << "getAccountByID error:" << query.lastError(); } return nullptr; } QString DAccountManagerDataBase::addAccountInfo(const DAccount::Ptr &accountInfo) { SqliteQuery query(m_database); //生成唯一标识 if (accountInfo->accountID().isEmpty()) { accountInfo->setAccountID(DDataBase::createUuid()); } QString strSql("INSERT INTO accountManager \ (accountID, accountName, displayName, accountState, accountAvatar, \ accountDescription, accountType, dbName,dBusPath,dBusInterface, dtCreate, \ expandStatus, isDeleted) \ VALUES(?,?, ?, ?,?,?,?,?,?,?,?,?,?)"); if (query.prepare(strSql)) { query.addBindValue(accountInfo->accountID()); query.addBindValue(accountInfo->accountName()); query.addBindValue(accountInfo->displayName()); query.addBindValue(int(accountInfo->accountState())); query.addBindValue(accountInfo->avatar()); query.addBindValue(accountInfo->description()); query.addBindValue(accountInfo->accountType()); query.addBindValue(accountInfo->dbName()); query.addBindValue(accountInfo->dbusPath()); query.addBindValue(accountInfo->dbusInterface()); query.addBindValue(dtToString(accountInfo->dtCreate())); query.addBindValue(accountInfo->isExpandDisplay()); query.addBindValue(0); if (!query.exec()) { qCWarning(ServiceLogger) << "addAccountInfo error:" << query.lastError(); accountInfo->setAccountID(""); } } else { qCWarning(ServiceLogger) << "addAccountInfo error:" << query.lastError(); accountInfo->setAccountID(""); } return accountInfo->accountID(); } bool DAccountManagerDataBase::updateAccountInfo(const DAccount::Ptr &accountInfo) { QString strSql("UPDATE accountManager \ SET accountName=?, displayName=?, accountState= ?, \ accountAvatar=?, accountDescription=?, accountType=?, dbName=?, \ dBusPath = ? ,dBusInterface = ?, expandStatus = ? WHERE accountID=?"); SqliteQuery query(m_database); bool res = false; if (query.prepare(strSql)) { query.addBindValue(accountInfo->accountName()); query.addBindValue(accountInfo->displayName()); query.addBindValue(int(accountInfo->accountState())); query.addBindValue(accountInfo->avatar()); query.addBindValue(accountInfo->description()); query.addBindValue(accountInfo->accountType()); query.addBindValue(accountInfo->dbName()); query.addBindValue(accountInfo->dbusPath()); query.addBindValue(accountInfo->dbusInterface()); query.addBindValue(accountInfo->isExpandDisplay()); query.addBindValue(accountInfo->accountID()); res = query.exec(); } if (!res) { qCWarning(ServiceLogger) << "updateAccountInfo error:" << query.lastError(); } return res; } bool DAccountManagerDataBase::deleteAccountInfo(const QString &accountID) { QString strSql("DELETE FROM accountManager \ WHERE accountID=?"); SqliteQuery query(m_database); bool res = false; if (query.prepare(strSql)) { query.addBindValue(accountID); res = query.exec(); } if (!res) { qCWarning(ServiceLogger) << "deleteAccountInfo error:" << query.lastError(); } return res; } // 保存通用设置 DCalendarGeneralSettings::Ptr DAccountManagerDataBase::getCalendarGeneralSettings() { DCalendarGeneralSettings::Ptr cgSet(new DCalendarGeneralSettings); SqliteQuery query(m_database); query.exec("select vch_value from calendargeneralsettings where vch_key = 'firstDayOfWeek' "); if (query.next()) cgSet->setFirstDayOfWeek(static_cast(query.value(0).toInt())); query.exec("select vch_value from calendargeneralsettings where vch_key = 'timeShowType' "); if (query.next()) cgSet->setTimeShowType(static_cast(query.value(0).toInt())); return cgSet; } // 获取通用设置 void DAccountManagerDataBase::setCalendarGeneralSettings(const DCalendarGeneralSettings::Ptr &cgSet) { SqliteQuery query(m_database); query.prepare("update calendargeneralsettings set vch_value = ? where vch_key = 'firstDayOfWeek' "); query.addBindValue(cgSet->firstDayOfWeek()); if (!query.exec()) { qCWarning(ServiceLogger) << "UPDATE calendargeneralsettings error," << query.lastError(); } query.prepare("update calendargeneralsettings set vch_value = ? where vch_key = 'timeShowType' "); query.addBindValue(cgSet->timeShowType()); if (!query.exec()) { qCWarning(ServiceLogger) << "UPDATE calendargeneralsettings error," << query.lastError(); } } void DAccountManagerDataBase::createDB() { dbOpen(); //这里用QFile来修改日历数据库文件的权限 QFile file; file.setFileName(getDBPath()); //如果不存在该文件则创建 if (!file.exists()) { m_database.open(); m_database.close(); } //将权限修改为600(对文件的所有者可以读写,其他用户不可读不可写) if (!file.setPermissions(QFile::WriteOwner | QFile::ReadOwner)) { qCWarning(ServiceLogger) << "permissions cannot be modified,error:" << file.errorString(); } if (m_database.open()) { SqliteQuery query(m_database); bool res = true; //创建帐户管理表 res = query.exec(sql_create_accountManager); if (!res) { qCWarning(ServiceLogger) << "accountManager create failed.error:" << query.lastError(); } //日历通用设置 res = query.exec(sql_create_calendargeneralsettings); if (!res) { qCWarning(ServiceLogger) << "uploadTask create failed.error:" << query.lastError(); } //创建calendargeneralsettings的触发器,数据有变动时,更新dt_update query.exec("SELECT name FROM sqlite_master WHERE type = 'trigger' and name = 'trigger_sync_calendargeneralsettings_datetime_when_insert'"); if (!query.next()) { query.exec("CREATE TRIGGER trigger_sync_calendargeneralsettings_datetime_when_insert AFTER INSERT " "ON calendargeneralsettings " "BEGIN " " replace into calendargeneralsettings (vch_key, vch_value) values('dt_update', datetime(CURRENT_TIMESTAMP,'localtime')); " "END;"); } query.exec("SELECT name FROM sqlite_master WHERE type = 'trigger' and name = 'trigger_sync_calendargeneralsettings_datetime_when_update'"); if (!query.next()) { query.exec("CREATE TRIGGER trigger_sync_calendargeneralsettings_datetime_when_update AFTER UPDATE " "ON calendargeneralsettings " "BEGIN " " replace into calendargeneralsettings (vch_key, vch_value) values('dt_update', datetime(CURRENT_TIMESTAMP,'localtime')); " "END;"); } query.exec("SELECT name FROM sqlite_master WHERE type = 'trigger' and name = 'trigger_sync_calendargeneralsettings_datetime_when_delete'"); if (!query.next()) { query.exec("CREATE TRIGGER trigger_sync_calendargeneralsettings_datetime_when_delete AFTER DELETE " "ON calendargeneralsettings " "BEGIN " " replace into calendargeneralsettings (vch_key, vch_value) values('dt_update', datetime(CURRENT_TIMESTAMP,'localtime')); " "END;"); } if (query.isActive()) { query.finish(); } } } void DAccountManagerDataBase::initAccountManagerDB() { QDateTime currentDateTime = QDateTime::currentDateTime(); currentDateTime.setOffsetFromUtc(currentDateTime.offsetFromUtc()); m_database = QSqlDatabase::database(NameAccountManager); m_database.setDatabaseName(getDBPath()); //帐户管理表 { SqliteQuery query(m_database); QString strsql("INSERT INTO accountManager \ (accountID, accountName, displayName, \ accountState, accountAvatar, accountDescription, \ accountType, dbName,dBusPath,dBusInterface,dtCreate, dtUpdate, \ expandStatus, isDeleted) \ VALUES(:accountID,:accountName,:displayName,:accountState,:accountAvatar, \ :accountDescription,:accountType,:dbName,:dBusPath,:dBusInterface,:dtCreate,:dtUpdate, \ :expandStatus, :isDeleted);"); if (query.prepare(strsql)) { query.bindValue(":accountID", DDataBase::createUuid()); query.bindValue(":accountName", "localAccount"); query.bindValue(":displayName", "localAccount"); query.bindValue(":accountState", 0); query.bindValue(":accountAvatar", ""); query.bindValue(":accountDescription", ""); query.bindValue(":accountType", 0); query.bindValue(":dbName", m_loaclDB); query.bindValue(":dBusPath", serviceBasePath + "/account_local"); query.bindValue(":dBusInterface", accountServiceInterface); query.bindValue(":dtCreate", dtToString(currentDateTime)); query.bindValue(":expandStatus", 1); query.bindValue(":isDeleted", 0); if (query.exec()) { if (query.isActive()) { query.finish(); } } else { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); } } else { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); } } //通用设置 { SqliteQuery query(m_database); if (query.exec("insert into calendargeneralsettings values" "('firstDayOfWeek', '7')," "('timeShowType', '0')")) { m_database.commit(); } else { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); } } } void DAccountManagerDataBase::setLoaclDB(const QString &loaclDB) { m_loaclDB = loaclDB; } dde-calendar-5.14.13/calendar-service/src/dbmanager/daccountmanagerdatabase.h000066400000000000000000000027431473346337000271170ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DACCOUNTMANAGERDATABASE_H #define DACCOUNTMANAGERDATABASE_H #include "daccount.h" #include "dschedule.h" #include "ddatabase.h" #include "dcalendargeneralsettings.h" #include #include class DAccountManagerDataBase : public DDataBase { Q_OBJECT public: typedef QSharedPointer Ptr; explicit DAccountManagerDataBase(QObject *parent = nullptr); //初始化数据库数据,只有在创建表的时候才需要 void initDBData() override; ///////////////帐户 //获取所有帐户信息 DAccount::List getAccountList(); //根据帐户id获取帐户信息 DAccount::Ptr getAccountByID(const QString &accountID); //添加帐户信息 QString addAccountInfo(const DAccount::Ptr &accountInfo); //更新帐户信息 bool updateAccountInfo(const DAccount::Ptr &accountInfo); //根据帐户id删除对应帐户 bool deleteAccountInfo(const QString &accountID); ///////////////通用设置 DCalendarGeneralSettings::Ptr getCalendarGeneralSettings(); void setCalendarGeneralSettings(const DCalendarGeneralSettings::Ptr &cgSet); void setLoaclDB(const QString &loaclDB); protected: //创建数据库 void createDB() override; void initAccountManagerDB(); private: QString m_loaclDB; }; #endif // DACCOUNTMANAGERDATABASE_H dde-calendar-5.14.13/calendar-service/src/dbmanager/ddatabase.cpp000066400000000000000000000207501473346337000245400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ddatabase.h" #include #include #include #include static QMap DbpathMutexMap;//记录所有用到的数据库文件锁 static QMutex DbpathMutexMapMutex; //DbpathMutexMap的锁 /** * @brief getDbMutexRef 根据dbpath获取数据库文件锁的引用 */ SqliteMutex &getDbMutexRef(const QString &dbpath) { QMutexLocker locker(&DbpathMutexMapMutex); if (!DbpathMutexMap.contains(dbpath)) { DbpathMutexMap.insert(dbpath, SqliteMutex()); } return DbpathMutexMap[dbpath]; } const QString DDataBase::NameAccountManager = "AccountManager"; const QString DDataBase::NameSync = "SyncManager"; const QString DDataBase::sql_create_account = " CREATE TABLE if not exists account( " " id integer not null primary key, " " syncState integer not null , " " accountState integer not null, " " accountName text not null, " " displayName text not null, " " cloudPath text , " " accountType integer not null, " " syncFreq integer not null, " " intervalTime integer, " " syncTag integer, " " expandStatus integer, " " dtLastUpdate DATETIME " " )"; //日程表 const QString DDataBase::sql_create_schedules = " CREATE TABLE if not exists schedules (" " scheduleID TEXT not null primary key, " " scheduleTypeID TEXT not null, " " summary TEXT not null, " " description TEXT, " " allDay BOOL not null, " " dtStart DATETIME not null, " " dtEnd DATETIME not null, " " isAlarm INTEGER , " " titlePinyin TEXT, " " isLunar INTEGER not null, " " ics TEXT not null, " " fileName TEXT, " " dtCreate DATETIME not null, " " dtUpdate DATETIME , " " dtDelete DATETIME, " " isDeleted INTEGER not null)"; //类型表 const QString DDataBase::sql_create_scheduleType = " CREATE TABLE if not exists scheduleType ( " " typeID TEXT not null PRIMARY KEY, " " typeName TEXT not null, " " typeDisplayName TEXT, " " typePath TEXT, " " typeColorID TEXT not null, " " description TEXT , " " privilege INTEGER not null, " " showState INTEGER not null, " " syncTag INTEGER, " " dtCreate DATETIME not null, " " dtUpdate DATETIME, " " dtDelete DATETIME, " " isDeleted INTEGER not null)"; //颜色表 const QString DDataBase::sql_create_typeColor = " CREATE TABLE if not exists typeColor ( " " ColorID TEXT not null PRIMARY KEY, " " ColorHex TEXT not null, " " privilege INTEGER not null," " dtCreate DATETIME not null)"; //创建上传任务表 const QString DDataBase::sql_create_uploadTask = " CREATE TABLE if not exists uploadTask ( " " taskID TEXT NOT NULL PRIMARY KEY, " " uploadType integer NOT NULL, " " uploadObject integer NOT NULL, " " objectID TEXT NOT NULL, " " dtCreate DATETIME NOT NULL)"; //创建提醒任务表 const QString DDataBase::sql_create_remindTask = " CREATE TABLE if not exists remindTask ( " " alarmID TEXT NOT NULL PRIMARY KEY, " " scheduleID TEXT NOT NULL, " " recurID DATETIME , " " remindCount INTEGER, " " notifyID INTEGER , " " dtRemind DATETIME NOT NULL, " " dtStart DATETIME NOT NULL, " " dtEnd DATETIME NOT NULL)"; //创建帐户管理表 const QString DDataBase::sql_create_accountManager = " CREATE TABLE if not exists accountManager ( " " accountID TEXT NOT NULL PRIMARY KEY, " " accountName TEXT NOT NULL, " " displayName TEXT NOT NULL, " " accountState INTEGER not null, " " accountAvatar TEXT, " " accountDescription TEXT , " " accountType INTEGER not null, " " dbName TEXT not null, " " dBusPath TEXT not null, " " dBusInterface TEXT not null, " " dtCreate DATETIME not null, " " dtDelete DATETIME, " " dtUpdate DATETIME, " " expandStatus integer, " " isDeleted INTEGER not null)"; //日历通用设置 const QString DDataBase::sql_create_calendargeneralsettings = " CREATE TABLE if not exists calendargeneralsettings( " " vch_key TEXT NOT NULL PRIMARY KEY, " " vch_value TEXT NOT NULL " " )"; const QString DDataBase::GWorkColorID = "0cecca8a-291b-46e2-bb92-63a527b77d46"; const QString DDataBase::GLifeColorID = "6cfd1459-1085-47e9-8ca6-379d47ec319a"; const QString DDataBase::GOtherColorID = "35e70047-98bb-49b9-8ad8-02d1c942f5d0"; const QString DDataBase::GFestivalColorID = "10af78a1-3c25-4744-91db-6fbe5e88083b"; DDataBase::DDataBase(QObject *parent) : QObject(parent) , m_DBPath("") , m_connectionName("") { } DDataBase::~DDataBase() { } QString DDataBase::getDBPath() const { return m_DBPath; } void DDataBase::setDBPath(const QString &DBPath) { m_DBPath = DBPath; } QString DDataBase::createUuid() { return QUuid::createUuid().toString(QUuid::WithoutBraces); } QString DDataBase::getConnectionName() const { return m_connectionName; } void DDataBase::setConnectionName(const QString &connectionName) { m_connectionName = connectionName; } void DDataBase::initDBData() { createDB(); } void DDataBase::dbOpen() { QStringList cntNames = QSqlDatabase::connectionNames(); if (cntNames.contains(getConnectionName())) { m_database = QSqlDatabase::database(getConnectionName()); //如果数据库不一致则设置新的数据库 if (m_database.databaseName() != getDBPath()) { m_database.setDatabaseName(getDBPath()); } } else { m_database = QSqlDatabase::addDatabase("QSQLITE", getConnectionName()); m_database.setDatabaseName(getDBPath()); m_database.open(); } } bool DDataBase::dbFileExists() { QFile file; file.setFileName(getDBPath()); return file.exists(); } void DDataBase::removeDB() { QFile::remove(getDBPath()); } void SqliteMutex::lock() { if (transactionLocked && transactionThreadId == qint64(QThread::currentThreadId())) { return; } m.lock(); } void SqliteMutex::unlock() { if (transactionLocked && transactionThreadId == qint64(QThread::currentThreadId())) { return; } m.unlock(); } void SqliteMutex::transactionLock() { m.lock(); transactionLocked = true; transactionThreadId = qint64(QThread::currentThreadId()); } void SqliteMutex::transactionUnlock() { transactionLocked = false; transactionThreadId = 0; m.unlock(); } SqliteQuery::SqliteQuery(QSqlDatabase db) : QSqlQuery(db) , _db(db) { } SqliteQuery::SqliteQuery(const QString &connectionName) : SqliteQuery(QSqlDatabase::database(connectionName)) { } SqliteQuery::SqliteQuery(const QString &query, QSqlDatabase db) : QSqlQuery(query, db) , _db(db) { } bool SqliteQuery::exec(QString sql) { getDbMutexRef(_db.databaseName()).lock(); bool f = QSqlQuery::exec(sql); getDbMutexRef(_db.databaseName()).unlock(); return f; } bool SqliteQuery::exec() { getDbMutexRef(_db.databaseName()).lock(); bool f = QSqlQuery::exec(); getDbMutexRef(_db.databaseName()).unlock(); return f; } void SqliteQuery::transaction() { getDbMutexRef(_db.databaseName()).transactionLock(); _db.transaction(); } void SqliteQuery::commit() { _db.commit(); getDbMutexRef(_db.databaseName()).transactionUnlock(); } void SqliteQuery::rollback() { _db.rollback(); getDbMutexRef(_db.databaseName()).transactionUnlock(); } void SqliteMutex::UnCopyMutex::lock() { m.lock(); } void SqliteMutex::UnCopyMutex::unlock() { m.unlock(); } dde-calendar-5.14.13/calendar-service/src/dbmanager/ddatabase.h000066400000000000000000000074261473346337000242120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DDATABASE_H #define DDATABASE_H #include #include #include #include #include #include #include //账户数据库的实例 #define DBAccountManager QSqlDatabase::database(DDataBase::NameAccountManager) //云同步的临时数据库的实例 #define DBSync QSqlDatabase::database(DDataBase::NameSync) class DDataBase : public QObject { Q_OBJECT public: //账户数据库的别名 static const QString NameAccountManager; //云同步的临时数据库的别名 static const QString NameSync; //账户 static const QString sql_create_account; //日程表 static const QString sql_create_schedules; //类型表 static const QString sql_create_scheduleType; //颜色表 static const QString sql_create_typeColor; //创建上传任务表 static const QString sql_create_uploadTask; //创建提醒任务表 static const QString sql_create_remindTask; //创建帐户管理表 static const QString sql_create_accountManager; //日历通用设置 static const QString sql_create_calendargeneralsettings; //工作颜色id static const QString GWorkColorID; //生活颜色id static const QString GLifeColorID; //其他颜色id static const QString GOtherColorID; //节假日颜色id static const QString GFestivalColorID; public: explicit DDataBase(QObject *parent = nullptr); virtual ~DDataBase(); QString getDBPath() const; void setDBPath(const QString &DBPath); static QString createUuid(); QString getConnectionName() const; void setConnectionName(const QString &connectionName); //初始化数据库数据,会创建数据库文件和相关数据表 virtual void initDBData(); void dbOpen(); //判断数据库是否存在 bool dbFileExists(); //删除db数据库文件 void removeDB(); protected: //创建数据库 virtual void createDB() = 0; protected: QSqlDatabase m_database; QString m_DBPath; QString m_connectionName; }; /** * @brief The DbPathMutex struct 整理了sqlite数据库文件锁的相关操作 */ struct SqliteMutex { private: /** * @brief The SqliteMutex struct 用于跳过QMutex的拷贝构造函数和operator=函数的调用 */ struct UnCopyMutex { UnCopyMutex(){} UnCopyMutex(const UnCopyMutex &) {} UnCopyMutex &operator=(const UnCopyMutex &) {return *this;} void lock(); void unlock(); private: QMutex m; } m; //数据库文件锁 bool transactionLocked = false; //是否开启事务 及 数据库文件是否被锁定 qint64 transactionThreadId = 0; //开启事务的线程id public: /** * @brief lock 数据库文件被锁定,用于非事务场景 */ void lock(); /** * @brief unlock 数据库文件被解锁,用于非事务场景 */ void unlock(); /** * @brief transactionLock 数据库文件被锁定,用非事务场景 */ void transactionLock(); /** * @brief transactionUnlock 数据库文件被解锁,用非事务场景 */ void transactionUnlock(); }; /** * @brief The SqliteQuery class 根据数据库文件锁来执行sql语句的类 */ class SqliteQuery : public QSqlQuery { public: explicit SqliteQuery(QSqlDatabase db); explicit SqliteQuery(const QString &connectionName); SqliteQuery(const QString &query, QSqlDatabase db); bool exec(QString sql); bool exec(); void transaction(); void commit(); void rollback(); private: QSqlDatabase _db; }; #endif // DDATABASE_H dde-calendar-5.14.13/calendar-service/src/dbmanager/ddatabasemanagement.cpp000066400000000000000000000350301473346337000265720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ddatabasemanagement.h" #include "commondef.h" #include "ddatabase.h" #include "vcalformat.h" #include "daccountdatabase.h" #include "daccountmanagerdatabase.h" #include "units.h" #include "recurrence.h" #include "alarm.h" #include "icalformat.h" #include "memorycalendar.h" #include #include #include #include #include #include #include const QString localDBName = "localAccount.db"; DDataBaseManagement::DDataBaseManagement() : m_newDatabaseName("accountmanager.db") , m_oldDatabaseName("scheduler.db") { //旧文件路径 QString oldDbPath = getHomeConfigPath().append("/deepin/dde-daemon/calendar"); setOldDatabasePath(oldDbPath); //新文件路径 QString newDbPath = getDBPath(); setNewDatabasePath(newDbPath); QString newDB(newDatabasePath() + "/" + m_newDatabaseName); //如果新数据库不存在 if (!databaseExists(newDatabasePath())) { QString localAccountDB(newDatabasePath() + "/" + localDBName); DAccountManagerDataBase accountManager; accountManager.setDBPath(newDB); accountManager.setLoaclDB(localDBName); accountManager.initDBData(); DAccount::List accountList = accountManager.getAccountList(); DAccount::Ptr localAccount; for (auto account : accountList) { if (account->accountType() == DAccount::Account_Local) { localAccount = account; break; } } DAccountDataBase localDB(localAccount); localDB.setDBPath(localAccountDB); localDB.initDBData(); DTypeColor::List sysColorList = localDB.getSysColor(); QMap oldSysColor={ {"#FF5E97",1} ,{"#FF9436",2} ,{"#FFDC00",3} ,{"#5BDD80",4} ,{"#00B99B",5} ,{"#4293FF",6} ,{"#5D51FF",7} ,{"#A950FF",8} ,{"#717171",9} }; foreach (const auto &sysColor, sysColorList) { if(oldSysColor.contains(sysColor->colorCode())){ m_sysColorID.insert(oldSysColor[sysColor->colorCode()],sysColor->colorID()); } } //判断是否存在旧的数据库 QString oldDBFile(oldDatabasePath() + "/" + m_oldDatabaseName); if (databaseExists(oldDBFile)) { //对数据进行迁移 QSqlDatabase oldDB = QSqlDatabase::addDatabase("QSQLITE", "oldDB"); oldDB.setDatabaseName(oldDBFile); oldDB.open(); m_typeMap.insert(1, "107c369e-b13a-4d45-9ff3-de4eb3c0475b"); m_typeMap.insert(2, "24cf3ae3-541d-487f-83df-f068416b56b6"); m_typeMap.insert(3, "403bf009-2005-4679-9c76-e73d9f83a8b4"); //获取类型 if (hasTypeDB(oldDB)) { DScheduleType::List typeList = queryOldJobTypeData(oldDB); foreach (auto &type, typeList) { int &&typeid_int = type->typeID().toInt(); QString &&type_ID = localDB.createScheduleType(type); m_typeMap.insert(typeid_int, type_ID); } //获取颜色 QVector colorList = queryOldTypeColorData(oldDB); foreach (auto color, colorList) { localDB.addTypeColor(color); } } DSchedule::List scheduleList = queryOldJobData(oldDB, hasLunnarField(oldDB)); //将原数据库中日程编号与当前日程编号匹配上 foreach (auto schedule, scheduleList) { int scheduleID = schedule->uid().toInt(); m_schedule.insert(scheduleID, localDB.createSchedule(schedule)); } //提醒任务 if (hasRemindDB(oldDB)) { DRemindData::List remindList = querOldRemindData(oldDB); foreach (auto remind, remindList) { remind->setAccountID(localAccount->accountID()); localDB.createRemindInfo(remind); } } m_hasTransfer = true; } } } QString DDataBaseManagement::newDatabasePath() const { return m_newDatabasePath; } void DDataBaseManagement::setNewDatabasePath(const QString &newDatabasePath) { m_newDatabasePath = newDatabasePath; } QString DDataBaseManagement::oldDatabasePath() const { return m_oldDatabasePath; } void DDataBaseManagement::setOldDatabasePath(const QString &oldDatabasePath) { m_oldDatabasePath = oldDatabasePath; } bool DDataBaseManagement::databaseExists(const QString &databasePath, bool create) { QDir dir; bool exist = false; if (dir.exists(databasePath)) { exist = true; } else { if (create) { dir.mkpath(databasePath); } } return exist; } bool DDataBaseManagement::hasLunnarField(QSqlDatabase &db) { SqliteQuery query(db); bool haslunnar = false; QString hasIsLunarField = "select count(1) from sqlite_master where type='table' and " "tbl_name = 'jobs' and sql like '%is_Lunar%'"; if (query.exec(hasIsLunarField) && query.next()) { //获取是否存在为农历标识字段,若存在则返回1,不存在则返回0 haslunnar = query.value(0).toInt(); } if (query.isActive()) { query.finish(); } return haslunnar; } bool DDataBaseManagement::hasTypeDB(QSqlDatabase &db) { SqliteQuery query(db); bool hasType = false; QString strSql = "select count(1) from sqlite_master where type='table' and " "tbl_name = 'JobType'"; if (query.exec(strSql) && query.next()) { //获取是否存在为农历标识字段,若存在则返回1,不存在则返回0 hasType = query.value(0).toInt(); } if (query.isActive()) { query.finish(); } return hasType; } bool DDataBaseManagement::hasRemindDB(QSqlDatabase &db) { SqliteQuery query(db); bool hasRemind = false; QString strSql = "select count(1) from sqlite_master where type='table' and " "tbl_name = 'jobsReminder'"; if (query.exec(strSql) && query.next()) { //获取是否存在为农历标识字段,若存在则返回1,不存在则返回0 hasRemind = query.value(0).toInt(); } if (query.isActive()) { query.finish(); } return hasRemind; } DScheduleType::List DDataBaseManagement::queryOldJobTypeData(QSqlDatabase &db) { SqliteQuery query(db); //旧数据日程默认包含一个节假日日程类型,其他的都为用户创建的类型 QString strSql("SELECT TypeNo, TypeName, ColorTypeNo, CreateTime, Authority \ FROM JobType where Authority >0;"); DScheduleType::List typeList; query.prepare(strSql); if (query.exec()) { while (query.next()) { DScheduleType::Ptr type = DScheduleType::Ptr(new DScheduleType); type->setTypeID(QString::number(query.value("TypeNo").toInt())); type->setTypeName(query.value("TypeName").toString()); type->setDisplayName(query.value("TypeName").toString()); type->setDtCreate(query.value("CreateTime").toDateTime()); type->setPrivilege(static_cast(query.value("Authority").toInt())); int oldColorTypeID = query.value("ColorTypeNo").toInt(); //如果为系统色 if(oldColorTypeID <10){ type->setColorID(m_sysColorID[oldColorTypeID]); }else { //如果为用户自定义颜色 if (!m_typeColorID.contains(oldColorTypeID)) { m_typeColorID[oldColorTypeID] = DDataBase::createUuid(); } type->setColorID(m_typeColorID[oldColorTypeID]); } typeList.append(type); } } return typeList; } DSchedule::List DDataBaseManagement::queryOldJobData(QSqlDatabase &db, const bool haslunar) { SqliteQuery query(db); QString strSql; if (haslunar) { strSql = "SELECT id, created_at, \"type\", title, description, all_day, \ \"start\", \"end\", r_rule, remind, \"ignore\", title_pinyin, is_Lunar \ FROM jobs;"; } else { strSql = "SELECT id, created_at, \"type\", title, description, all_day, \ \"start\", \"end\", r_rule, remind, \"ignore\", title_pinyin \ FROM jobs;"; } DSchedule::List scheduleList; query.prepare(strSql); if (query.exec()) { while (query.next()) { DSchedule::Ptr schedule = DSchedule::Ptr(new DSchedule); schedule->setUid(QString::number(query.value("id").toInt())); schedule->setDtStart(dtFromString(query.value("start").toString())); schedule->setCreated(dtFromString(query.value("created_at").toString())); schedule->setSummary(query.value("title").toString()); schedule->setAllDay(query.value("all_day").toBool()); schedule->setDtEnd(dtFromString(query.value("end").toString())); //如果有农历信息则设置相关信息 if(haslunar){ schedule->setLunnar(query.value("is_Lunar").toBool()); } QString rrule = query.value("r_rule").toString(); if (!rrule.isEmpty()) { //重复规则 KCalendarCore::Recurrence *recurrence = schedule->recurrence(); KCalendarCore::ICalFormat ical; KCalendarCore::RecurrenceRule *rule = new KCalendarCore::RecurrenceRule; if (ical.fromString(rule, query.value("r_rule").toString())) { recurrence->addRRule(rule); } //添加忽略列表 QJsonArray ignore = query.value("Ignore").toJsonArray(); foreach (auto ignoreTime, ignore) { if (schedule->allDay()) { recurrence->addExDate(dtFromString(ignoreTime.toString()).date()); } else { recurrence->addExDateTime(dtFromString(ignoreTime.toString())); } } } QString remind = query.value("remind").toString(); if (!remind.isEmpty()) { //提醒规则 QStringList strList = remind.split(";", Qt::SkipEmptyParts); int remindNum = strList.at(0).toInt(); //小于0表示不提醒 if (remindNum >= 0) { KCalendarCore::Alarm::Ptr alarm = KCalendarCore::Alarm::Ptr(new KCalendarCore::Alarm(schedule.data())); alarm->setEnabled(true); alarm->setType(KCalendarCore::Alarm::Display); alarm->setDisplayAlarm(schedule->summary()); if (schedule->allDay()) { //提前多少秒 int offset = 0; if (strList.size() > 1) { QTime time = QTime::fromString(strList.at(1), "hh:mm"); offset = time.hour() * 60 * 60 + time.second() * 60; } KCalendarCore::Duration duration(-(24 * 60 * 60 * remindNum - offset)); alarm->setStartOffset(duration); } else { KCalendarCore::Duration duration(-(60 * remindNum)); alarm->setStartOffset(duration); } schedule->addAlarm(alarm); } } int type = query.value("type").toInt(); if (m_typeMap.contains(type)) { schedule->setScheduleTypeID(m_typeMap[type]); } else { qCWarning(ServiceLogger) << " can not find type:" << type; } scheduleList.append(schedule); } } if (query.isActive()) { query.finish(); } return scheduleList; } QVector DDataBaseManagement::queryOldTypeColorData(QSqlDatabase &db) { SqliteQuery query(db); QVector colorVector; //获取用户创建颜色 QString strSql("SELECT TypeNo, ColorHex, Authority \ FROM ColorType WHERE ID >9;"); query.prepare(strSql); if (query.exec()) { while (query.next()) { DTypeColor color; int oldTpyeID = query.value("TypeNo").toInt(); //如果包含则添加,没有则丢弃 if (m_typeColorID.contains(oldTpyeID)) { color.setColorID(m_typeColorID[oldTpyeID]); color.setColorCode(query.value("ColorHex").toString()); color.setPrivilege(DTypeColor::PriUser); colorVector.append(color); } } } if (query.isActive()) { query.finish(); } return colorVector; } DRemindData::List DDataBaseManagement::querOldRemindData(QSqlDatabase &db) { SqliteQuery query(db); DRemindData::List remindList; QString strSql("SELECT jobid, recurid, remindCount, notifyid, remindTime, jobStartTime, jobEndTime FROM jobsReminder;"); query.prepare(strSql); if (query.exec()) { while (query.next()) { int jobid = query.value("jobid").toInt(); if (m_schedule.contains(jobid)) { DRemindData::Ptr remind = DRemindData::Ptr(new DRemindData); remind->setScheduleID(m_schedule[jobid]); remind->setRemindCount(query.value("remindCount").toInt()); remind->setNotifyid(query.value("notifyid").toInt()); remind->setDtRemind(dtFromString(query.value("remindTime").toString())); remind->setDtStart(dtFromString(query.value("jobStartTime").toString())); remind->setDtEnd(dtFromString(query.value("jobEndTime").toString())); int recurid = query.value("recurid").toInt(); //如果重复id大于0,则表示为重复日程的提醒,设置提醒id为日程开始时间 if (recurid > 0) { remind->setRecurrenceId(remind->dtStart()); } remindList.append(remind); } } } if (query.isActive()) { query.finish(); } return remindList; } bool DDataBaseManagement::hasTransfer() const { return m_hasTransfer; } dde-calendar-5.14.13/calendar-service/src/dbmanager/ddatabasemanagement.h000066400000000000000000000035571473346337000262500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DDATABASEMANAGEMENT_H #define DDATABASEMANAGEMENT_H #include "dschedule.h" #include "dscheduletype.h" #include "dreminddata.h" #include #include /** * @brief The DDataBaseManagement class * 数据库初始化 ,管理数据的创建和对旧版本的数据迁移 */ class DDataBaseManagement { public: DDataBaseManagement(); bool hasTransfer() const; private: QString newDatabasePath() const; void setNewDatabasePath(const QString &newDatabasePath); QString oldDatabasePath() const; void setOldDatabasePath(const QString &oldDatabasePath); //数据库所在文件夹是否存在,若不存在则创建该文件夹 bool databaseExists(const QString &databasePath, bool create = true); //旧数据库jab表是否存在是否为农历日程字段 bool hasLunnarField(QSqlDatabase &db); //存在日程类型相关数据 bool hasTypeDB(QSqlDatabase &db); //存在提醒任务表 bool hasRemindDB(QSqlDatabase &db); DScheduleType::List queryOldJobTypeData(QSqlDatabase &db); DSchedule::List queryOldJobData(QSqlDatabase &db, const bool haslunar); QVector queryOldTypeColorData(QSqlDatabase &db); DRemindData::List querOldRemindData(QSqlDatabase &db); private: //新数据库路径地址 QString m_newDatabasePath; //旧数据库路径地址 QString m_oldDatabasePath; QString m_newDatabaseName; QString m_oldDatabaseName; bool m_hasTransfer = false; QMap m_typeMap; QMap m_sysColorID; //日程类型内置颜色新旧id对应map QMap m_schedule; QMap m_typeColorID; //日程类型颜色新旧id对应map }; #endif // DDATABASEMANAGEMENT_H dde-calendar-5.14.13/calendar-service/src/dbmanager/dhuanglidatabase.cpp000066400000000000000000000125461473346337000261140ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dhuanglidatabase.h" #include "commondef.h" #include "units.h" #include #include #include #include #include #include #include #include #include const QString HolidayDir = ":/holiday-cn"; const QString HolidayUpdateURLPrefix ="https://cdn-nu-common.uniontech.com/deepin-calendar"; const QString HolidayUpdateDateSetKey = "festivalUpdateDate"; DHuangLiDataBase::DHuangLiDataBase(QObject *parent) : DDataBase(parent) , m_settings(getAppConfigDir().filePath("config.ini"), QSettings::IniFormat) { qDebug()<< getAppConfigDir().filePath("config.ini"); QString huangliPath = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QString("dde-calendar/data/huangli.db"), QStandardPaths::LocateFile); setDBPath(huangliPath); qCDebug(ServiceLogger) << "huangli database" << huangliPath; setConnectionName("HuangLi"); dbOpen(); // 延迟一段时间后,从网络更新节假日 QTimer::singleShot(QRandomGenerator::global()->bounded(1000, 9999), this, &DHuangLiDataBase::updateFestivalList); } // readJSON 会读取一个JSON文件,如果 cache 为 true,则会缓存对象,以供下次使用 QJsonDocument DHuangLiDataBase::readJSON(QString filename, bool cache) { if (cache && readJSONCache.contains(filename)) { return readJSONCache.value(filename); } qCDebug(ServiceLogger) << "read json file" << filename; QJsonDocument doc; QFile file(filename); if (!file.open(QIODevice::ReadOnly)) { qCWarning(ServiceLogger) << "cannot open json file" << filename; } else { auto data = file.readAll(); doc = QJsonDocument::fromJson(data); } readJSONCache.insert(filename, doc); return readJSONCache.value(filename); } void DHuangLiDataBase::updateFestivalList() { auto now = QDateTime::currentDateTime(); auto festivalUpdateDate = now.toString("yyyy-MM-dd"); // 每天更新一次 if (m_settings.value(HolidayUpdateDateSetKey, "") == festivalUpdateDate) { return; } m_settings.setValue(HolidayUpdateDateSetKey, festivalUpdateDate); // 获取今年和明年的节假日数据 for (auto i = 0; i < 2; i++) { auto year = now.date().year() + i; auto filename = getAppCacheDir().filePath(QString("%1.json").arg(year)); auto url = QString("%1/%2.json").arg(HolidayUpdateURLPrefix).arg(year); auto process = DownloadFile(url, filename); qCDebug(ServiceLogger) << "Download File" << url << filename; connect(process.get(), &QProcess::readyReadStandardError, [process]() { qCDebug(ServiceLogger) << "Download Error: " << process->readAllStandardError(); }); } } // queryFestivalList 查询指定月份的节假日列表 QJsonArray DHuangLiDataBase::queryFestivalList(quint32 year, quint8 month) { qCDebug(ServiceLogger) << "query festival list" << "year" << year << "month" << month; QJsonArray dataset; auto filename = getAppCacheDir().filePath(QString("%1.json").arg(year)); if (!QFile(filename).exists()) { filename = QString("%1/%2.json").arg(HolidayDir).arg(year); } qCDebug(ServiceLogger) << "festival file name" << filename; auto doc = readJSON(filename, true); for (auto val : doc.object().value("days").toArray()) { auto day = val.toObject(); auto name = day.value("name").toString(); auto date = QDate::fromString(day.value("date").toString(), "yyyy-MM-dd"); auto isOffday = day.value("isOffDay").toBool(); if (quint32(date.year()) == year && quint32(date.month()) == month) { qCDebug(ServiceLogger) << "festival day" << name << date << isOffday; QJsonObject obj; obj.insert("name", name); obj.insert("date", date.toString("yyyy-MM-dd")); obj.insert("status", isOffday ? 1 : 2); dataset.append(obj); } } return dataset; } QList DHuangLiDataBase::queryHuangLiByDays(const QList &days) { QList infos; SqliteQuery query(m_database); foreach (stDay d, days) { // 查询的id qint64 id = QString().asprintf("%d%02d%02d", d.Year, d.Month, d.Day).toInt(); QString strsql("SELECT id, avoid, suit FROM huangli WHERE id = %1"); strsql = strsql.arg(id); // 数据库中的宜忌信息是从2008年开始的 stHuangLi sthuangli; // 因此这里先将sthuangli内容初始化 sthuangli.ID = id; // 如果数据库中有查询到数据,则进行赋值,如果没有,则使用初始值 if (query.exec(strsql) && query.next()) { sthuangli.ID = query.value("id").toInt(); sthuangli.Avoid = query.value("avoid").toString(); sthuangli.Suit = query.value("suit").toString(); } // 将黄历数据放到list中 infos.append(sthuangli); } if (query.isActive()) { query.finish(); } return infos; } void DHuangLiDataBase::initDBData() { } void DHuangLiDataBase::createDB() { } dde-calendar-5.14.13/calendar-service/src/dbmanager/dhuanglidatabase.h000066400000000000000000000016261473346337000255560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DHUANGLIDATABASE_H #define DHUANGLIDATABASE_H #include "ddatabase.h" #include "huangliData/lunardatastruct.h" #include "lunarandfestival/lunarandfestival.h" #include #include #include class DHuangLiDataBase : public DDataBase { Q_OBJECT public: explicit DHuangLiDataBase(QObject *parent = nullptr); QJsonArray queryFestivalList(quint32 year, quint8 month); QList queryHuangLiByDays(const QList &days); void initDBData() override; private: QJsonDocument readJSON(QString filename, bool cache); QHash readJSONCache; void updateFestivalList(); QSettings m_settings; protected: //创建数据库 void createDB() override; }; #endif // DHUANGLIDATABASE_H dde-calendar-5.14.13/calendar-service/src/dbus/000077500000000000000000000000001473346337000211355ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-service/src/dbus/dbusnotify.cpp000066400000000000000000000012151473346337000240260ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusnotify.h" DBusNotify::DBusNotify(const QString &service, const QString &path, const QString &interface, const QDBusConnection &connection, QObject *parent) : QDBusAbstractInterface(service, path, interface.toLatin1().data(), connection, parent) { } //根据通知ID关闭桌面顶部通知 void DBusNotify::closeNotification(quint32 notifyID) { QList argumentList; argumentList << notifyID; callWithArgumentList(QDBus::NoBlock, QStringLiteral("CloseNotification"), argumentList); } dde-calendar-5.14.13/calendar-service/src/dbus/dbusnotify.h000066400000000000000000000026551473346337000235040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSNOTIFY_H #define DBUSNOTIFY_H #include "commondef.h" #include class DBusNotify : public QDBusAbstractInterface { Q_OBJECT public: explicit DBusNotify(const QString &service, const QString &path, const QString &interface, const QDBusConnection &connection, QObject *parent = nullptr); inline int Notify(const QList &argumentList) { QDBusMessage reply = callWithArgumentList(QDBus::Block, QStringLiteral("Notify"), argumentList); int notifyid = -1; if (QDBusMessage::ReplyMessage == reply.type()) { qCDebug(ServiceLogger) << reply.type() << reply.errorName() << reply.errorMessage(); QDBusReply id = reply; if (id.isValid()) { notifyid = id.value(); } } else { qCDebug(ServiceLogger) << reply.type() << reply.errorName() << reply.errorMessage(); } return notifyid; } /** * @brief closeNotification 根据通知ID关闭桌面顶部通知 * @param notifyID 通知ID */ void closeNotification(quint32 notifyID); Q_SIGNALS: // SIGNALS Q_SCRIPTABLE void NotificationClosed(quint32 id, quint32 reason); Q_SCRIPTABLE void ActionInvoked(quint32 id, const QString &reason); }; #endif // DBUSNOTIFY_H dde-calendar-5.14.13/calendar-service/src/dbus/dbusuiopenschedule.cpp000066400000000000000000000006051473346337000255340ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusuiopenschedule.h" DbusUIOpenSchedule::DbusUIOpenSchedule(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) { } dde-calendar-5.14.13/calendar-service/src/dbus/dbusuiopenschedule.h000066400000000000000000000015251473346337000252030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSUIOPENSCHEDULE_H #define DBUSUIOPENSCHEDULE_H #include class DbusUIOpenSchedule : public QDBusAbstractInterface { Q_OBJECT public: static inline const char *staticInterfaceName() { return "com.deepin.Calendar"; } explicit DbusUIOpenSchedule(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = nullptr); inline void OpenSchedule(const QString strjson) { QList argumentList; argumentList << strjson; //不需要返回结果,发送完直接结束 callWithArgumentList(QDBus::NoBlock, QStringLiteral("OpenSchedule"), argumentList); } }; #endif // DBUSUIOPENSCHEDULE_H dde-calendar-5.14.13/calendar-service/src/dbus/dunioniddbus.cpp000066400000000000000000000017611473346337000243350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dunioniddbus.h" #include "commondef.h" #include DUnionIDDbus::DUnionIDDbus(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) { auto reply = this->SwitcherDump(); reply.waitForFinished(); if (!reply.isValid()) { qCWarning(ServiceLogger) << "Error connecting remote object, service:" << this->service() << ",path:" << this->path() << ",interface" << this->interface(); qCWarning(ServiceLogger) << reply.error(); } else { qCInfo(ServiceLogger) << "connected remote object, service:" << this->service() << ",path:" << this->path() << ",interface" << this->interface(); qCInfo(ServiceLogger) << "switcher dump" << reply.value(); } } DUnionIDDbus::~DUnionIDDbus() { } dde-calendar-5.14.13/calendar-service/src/dbus/dunioniddbus.h000066400000000000000000000074411473346337000240030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DUNIONIDDBUS_H #define DUNIONIDDBUS_H #include "daccount.h" #include #include class DUnionIDDbus : public QDBusAbstractInterface { Q_OBJECT public: static inline const char *staticInterfaceName() { return "com.deepin.utcloud.Daemon"; } public: explicit DUnionIDDbus(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = nullptr); ~DUnionIDDbus(); public slots: /** * @brief login 调用系统用户登入接口 * @param * @return */ inline QDBusPendingReply<> login() { QList argumentList; return asyncCallWithArgumentList(QStringLiteral("Login"), argumentList); } /** * @brief logout 调用系统用户登出接口 * @param * @return */ inline QDBusPendingReply<> logout() { QList argumentList; return asyncCallWithArgumentList(QStringLiteral("Logout"), argumentList); } /** * @brief Upload 云同步上传接口 * @param key 数据标识或文件绝对路径等 * @return data 上传成功数据的元信息ID值 * err 错误信息 */ inline QDBusPendingReply Upload(const QString &key) { QList argumentList; argumentList << QVariant::fromValue(key); return asyncCallWithArgumentList(QStringLiteral("Upload"), argumentList); } /** * @brief Download 云同步下载接口 * @param key 数据标识或文件绝对路径等 * path1 指定缓存数据的路径 * @return path2 下载数据的路径 * err 错误信息 */ inline QDBusPendingReply Download(const QString &key, const QString &path1) { QList argumentList; argumentList << QVariant::fromValue(key) << QVariant::fromValue(path1); return asyncCallWithArgumentList(QStringLiteral("Download"), argumentList); } /** * @brief Delete 云同步删除接口 * @param key 数据标识或文件绝对路径等 * @return id 删除id * err 错误信息 */ inline QDBusPendingReply Delete(const QString &key) { QList argumentList; argumentList << QVariant::fromValue(key); return asyncCallWithArgumentList(QStringLiteral("Delete"), argumentList); } /** * @brief Metadata 元数据获取接口 * @param key 数据标识或文件绝对路径等 * @return meta 元数据信息 * err 错误信息 */ inline QDBusPendingReply Metadata(const QString &key) { QList argumentList; argumentList << QVariant::fromValue(key); return asyncCallWithArgumentList(QStringLiteral("Metadata"), argumentList); } /** * @brief SwitcherGet 获取总开关状态 * @param * @return * */ inline QDBusPendingReply SwitcherDump() { QList argumentList; return asyncCallWithArgumentList(QStringLiteral("SwitcherDump"), argumentList); } /** * @brief SwitcherGet 获取指定应用的开关状态 * @param arg 指定应用云同步的绝对路径 * @return * */ inline QDBusPendingReply SwitcherGet(const QString &arg) { QList argumentList; argumentList << QVariant::fromValue(arg); return asyncCallWithArgumentList(QStringLiteral("SwitcherGet"), argumentList); } }; namespace com { namespace deepin { namespace sync { typedef ::DUnionIDDbus cloudopt; } } } #endif // DUNIONIDDBUS_H dde-calendar-5.14.13/calendar-service/src/dbusservice/000077500000000000000000000000001473346337000225165ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-service/src/dbusservice/daccountmanagerservice.cpp000066400000000000000000000122371473346337000277430ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daccountmanagerservice.h" #include "units.h" #include "calendarprogramexitcontrol.h" #include #include #include DAccountManagerService::DAccountManagerService(QObject *parent) : DServiceBase(serviceBasePath + "/AccountManager", serviceBaseName + ".AccountManager", parent) , m_accountManager(new DAccountManageModule(this)) { //自动退出 DServiceExitControl exitControl; connect(m_accountManager.data(), &DAccountManageModule::signalLoginStatusChange, this, &DAccountManagerService::accountUpdate); connect(m_accountManager.data(), &DAccountManageModule::firstDayOfWeekChange, this, [&]() { notifyPropertyChanged(getInterface(), "firstDayOfWeek"); }); connect(m_accountManager.data(), &DAccountManageModule::timeFormatTypeChange, this, [&]() { notifyPropertyChanged(getInterface(), "timeFormatType"); }); } QString DAccountManagerService::getAccountList() { DServiceExitControl exitControl; if (!clientWhite(0)) { return QString(); } return m_accountManager->getAccountList(); } void DAccountManagerService::remindJob(const QString &accountID, const QString &alarmID) { DServiceExitControl exitControl; m_accountManager->remindJob(accountID, alarmID); } void DAccountManagerService::updateRemindJob(bool isClear) { DServiceExitControl exitControl; m_accountManager->updateRemindSchedules(isClear); } void DAccountManagerService::notifyMsgHanding(const QString &accountID, const QString &alarmID, const qint32 operationNum) { DServiceExitControl exitControl; m_accountManager->notifyMsgHanding(accountID, alarmID, operationNum); } void DAccountManagerService::downloadByAccountID(const QString &accountID) { //TODO:云同步获取数据 DServiceExitControl exitControl; m_accountManager->downloadByAccountID(accountID); } void DAccountManagerService::uploadNetWorkAccountData() { //TODO:云同步上传数据 DServiceExitControl exitControl; m_accountManager->uploadNetWorkAccountData(); } QString DAccountManagerService::getCalendarGeneralSettings() { DServiceExitControl exitControl; if (!clientWhite(0)) { return QString(); } return m_accountManager->getCalendarGeneralSettings(); } void DAccountManagerService::setCalendarGeneralSettings(const QString &cgSet) { DServiceExitControl exitControl; if (!clientWhite(0)) { return; } m_accountManager->setFirstDayOfWeekSource(DCalendarGeneralSettings::Source_Database); m_accountManager->setTimeFormatTypeSource(DCalendarGeneralSettings::Source_Database); m_accountManager->setCalendarGeneralSettings(cgSet); } void DAccountManagerService::calendarIsShow(const bool &isShow) { DServiceExitControl exitControl; if (!clientWhite(0)) { return; } exitControl.setClientIsOpen(isShow); m_accountManager->calendarOpen(isShow); } void DAccountManagerService::login() { DServiceExitControl exitControl; if (!clientWhite(0)) { return; } m_accountManager->login(); } void DAccountManagerService::logout() { DServiceExitControl exitControl; if (!clientWhite(0)) { return; } m_accountManager->logout(); } bool DAccountManagerService::isSupportUid() { DServiceExitControl exitControl; if (!clientWhite(0)) { return false; } return m_accountManager->isSupportUid(); } int DAccountManagerService::getfirstDayOfWeek() const { DServiceExitControl exitControl; return m_accountManager->getfirstDayOfWeek(); } void DAccountManagerService::setFirstDayOfWeek(const int firstday) { DServiceExitControl exitControl; m_accountManager->setFirstDayOfWeekSource(DCalendarGeneralSettings::Source_Database); m_accountManager->setFirstDayOfWeek(firstday); } int DAccountManagerService::getTimeFormatType() const { DServiceExitControl exitControl; return m_accountManager->getTimeFormatType(); } void DAccountManagerService::setTimeFormatType(const int timeType) { DServiceExitControl exitControl; m_accountManager->setTimeFormatTypeSource(DCalendarGeneralSettings::Source_Database); m_accountManager->setTimeFormatType(timeType); } int DAccountManagerService::getFirstDayOfWeekSource() { return static_cast(m_accountManager->getFirstDayOfWeekSource()); } void DAccountManagerService::setFirstDayOfWeekSource(const int source) { if (source >= 0 && source < DCalendarGeneralSettings::GeneralSettingSource::Source_Unknown) { auto val = static_cast(source); m_accountManager->setFirstDayOfWeekSource(val); } } int DAccountManagerService::getTimeFormatTypeSource() { return static_cast(m_accountManager->getTimeFormatTypeSource()); } void DAccountManagerService::setTimeFormatTypeSource(const int source) { if (source >= 0 && source < DCalendarGeneralSettings::GeneralSettingSource::Source_Unknown) { auto val = static_cast(source); m_accountManager->setTimeFormatTypeSource(val); } }dde-calendar-5.14.13/calendar-service/src/dbusservice/daccountmanagerservice.h000066400000000000000000000054341473346337000274110ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCOUNTMANAGERSERVICE_H #define ACCOUNTMANAGERSERVICE_H #include "dservicebase.h" #include "daccountmanagemodule.h" #include /** * @brief The DAccountManagerService class 帐户管理服务 */ class DAccountManagerService : public DServiceBase { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.deepin.dataserver.Calendar.AccountManager") Q_PROPERTY(int firstDayOfWeek READ getfirstDayOfWeek WRITE setFirstDayOfWeek) Q_PROPERTY(int timeFormatType READ getTimeFormatType WRITE setTimeFormatType) Q_PROPERTY(int firstDayOfWeekSource READ getFirstDayOfWeekSource WRITE setFirstDayOfWeekSource) Q_PROPERTY(int timeFormatTypeSource READ getTimeFormatTypeSource WRITE setTimeFormatTypeSource) public: explicit DAccountManagerService(QObject *parent = nullptr); public slots: /** * @brief getAccountList 获取帐户列表 * @return */ Q_SCRIPTABLE QString getAccountList(); //稍后提醒相关接口 Q_SCRIPTABLE void remindJob(const QString &accountID, const QString &alarmID); /** * @brief updateRemindJob 每隔10分钟更新提醒日程 * @param isClear 是否情况日程定时任务数据库 */ Q_SCRIPTABLE void updateRemindJob(bool isClear); /** * @brief notifyMsgHanding 通知提示框交互处理 * @param alarmID 提醒任务id * @param operationNum 操作编号 , 1:打开日历,2:稍后提醒 3: 明天提醒 4: 提前1天提醒 5:关闭按钮 */ Q_SCRIPTABLE void notifyMsgHanding(const QString &accountID, const QString &alarmID, const qint32 operationNum); Q_SCRIPTABLE void downloadByAccountID(const QString &accountID); Q_SCRIPTABLE void uploadNetWorkAccountData(); //获取通用设置 Q_SCRIPTABLE QString getCalendarGeneralSettings(); //设置通用设置 Q_SCRIPTABLE void setCalendarGeneralSettings(const QString &cgSet); //日历打开关闭 Q_SCRIPTABLE void calendarIsShow(const bool &isShow); //账户登录 Q_SCRIPTABLE void login(); //账户登出 Q_SCRIPTABLE void logout(); //是否支持云同步 Q_SCRIPTABLE bool isSupportUid(); signals: Q_SCRIPTABLE void accountUpdate(); private: int getfirstDayOfWeek() const; void setFirstDayOfWeek(const int firstday); int getTimeFormatType() const; void setTimeFormatType(const int timeType); int getFirstDayOfWeekSource(); void setFirstDayOfWeekSource(const int source); int getTimeFormatTypeSource(); void setTimeFormatTypeSource(const int source); private: DAccountManageModule::Ptr m_accountManager; }; #endif // ACCOUNTMANAGERSERVICE_H dde-calendar-5.14.13/calendar-service/src/dbusservice/daccountservice.cpp000066400000000000000000000130051473346337000264020ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daccountservice.h" #include "calendarprogramexitcontrol.h" DAccountService::DAccountService(const QString &path, const QString &interface, const DAccountModule::Ptr &accountModule, QObject *parent) : DServiceBase(path, interface, parent) , m_accountModel(accountModule) { connect(m_accountModel.data(), &DAccountModule::signalScheduleUpdate, this, &DAccountService::scheduleUpdate); connect(m_accountModel.data(), &DAccountModule::signalScheduleTypeUpdate, this, &DAccountService::scheduleTypeUpdate); connect(m_accountModel.data(), &DAccountModule::signalAccountState, this, [&]() { notifyPropertyChanged(getInterface(), "accountState"); }); connect(m_accountModel.data(), &DAccountModule::signalSyncState, this, [&]() { notifyPropertyChanged(getInterface(), "syncState"); }); connect(m_accountModel.data(), &DAccountModule::signalDtLastUpdate, this, [&]() { notifyPropertyChanged(getInterface(), "dtLastUpdate"); }); } QString DAccountService::getAccountInfo() { //如果不在白名单内直接放回无效值 DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { return QString(); } return m_accountModel->getAccountInfo(); } QString DAccountService::getScheduleTypeList() { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { return QString(); } return m_accountModel->getScheduleTypeList(); } QString DAccountService::getScheduleTypeByID(const QString &typeID) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { return QString(); } return m_accountModel->getScheduleTypeByID(typeID); } QString DAccountService::createScheduleType(const QString &typeInfo) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { return QString(); } return m_accountModel->createScheduleType(typeInfo); } bool DAccountService::updateScheduleType(const QString &typeInfo) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { return false; } return m_accountModel->updateScheduleType(typeInfo); } bool DAccountService::deleteScheduleTypeByID(const QString &typeID) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { return false; } return m_accountModel->deleteScheduleTypeByID(typeID); } bool DAccountService::scheduleTypeByUsed(const QString &typeID) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { return false; } return m_accountModel->scheduleTypeByUsed(typeID); } QString DAccountService::createSchedule(const QString &scheduleInfo) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { return QString(); } return m_accountModel->createSchedule(scheduleInfo); } bool DAccountService::updateSchedule(const QString &scheduleInfo) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { return false; } return m_accountModel->updateSchedule(scheduleInfo); } QString DAccountService::getScheduleByScheduleID(const QString &scheduleID) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { return QString(); } return m_accountModel->getScheduleByScheduleID(scheduleID); } bool DAccountService::deleteScheduleByScheduleID(const QString &scheduleID) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { return false; } return m_accountModel->deleteScheduleByScheduleID(scheduleID); } QString DAccountService::querySchedulesWithParameter(const QString ¶ms) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { return QString(); } return m_accountModel->querySchedulesWithParameter(params); } QString DAccountService::getSysColors() { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { return QString(); } return m_accountModel->getSysColors(); } bool DAccountService::getExpand() { return m_accountModel->getExpand(); } void DAccountService::setExpand(const bool &isExpand) { m_accountModel->setExpand(isExpand); } int DAccountService::getAccountState() { return m_accountModel->getAccountState(); } void DAccountService::setAccountState(const int accountState) { m_accountModel->setAccountState(accountState); } int DAccountService::getSyncState() { return m_accountModel->getSyncState(); } QString DAccountService::getSyncFreq() { return m_accountModel->getSyncFreq(); } void DAccountService::setSyncFreq(const QString &freq) { m_accountModel->setSyncFreq(freq); } QString DAccountService::getDtLastUpdate() { return m_accountModel->getDtLastUpdate(); } bool DAccountService::importSchedule(const QString &icsFilePath, const QString &typeID, const bool cleanExists) { return m_accountModel->importSchedule(icsFilePath, typeID, cleanExists); } bool DAccountService::exportSchedule(const QString &icsFilePath, const QString &typeID) { return m_accountModel->exportSchedule(icsFilePath, typeID); } dde-calendar-5.14.13/calendar-service/src/dbusservice/daccountservice.h000066400000000000000000000124711473346337000260550ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCOUNTSERVICE_H #define ACCOUNTSERVICE_H #include "dservicebase.h" #include "daccountmodule.h" #include "units.h" #include class DAccountService : public DServiceBase { Q_OBJECT Q_CLASSINFO("D-Bus Interface", accountServiceInterface) Q_PROPERTY(bool isExpand READ getExpand WRITE setExpand) Q_PROPERTY(int accountState READ getAccountState WRITE setAccountState) Q_PROPERTY(int syncState READ getSyncState) Q_PROPERTY(QString syncFreq READ getSyncFreq WRITE setSyncFreq) Q_PROPERTY(QString dtLastUpdate READ getDtLastUpdate) public: typedef QSharedPointer Ptr; DAccountService(const QString &path, const QString &interface, const DAccountModule::Ptr &accountModule, QObject *parent = nullptr); public slots: /** * @brief getAccountInfo 获取帐户信息 * @return */ Q_SCRIPTABLE QString getAccountInfo(); /** * @brief getScheduleTypeList 获取日程类型信息集 * @return */ Q_SCRIPTABLE QString getScheduleTypeList(); /** * @brief getScheduleTypeByID 根据日程类型ID获取日程类型信息 * @param typeID 日程类型ID * @return */ Q_SCRIPTABLE QString getScheduleTypeByID(const QString &typeID); /** * @brief createScheduleType 创建日程类型 * @param typeInfo 类型信息 * @return 日程类型ID */ Q_SCRIPTABLE QString createScheduleType(const QString &typeInfo); /** * @brief updateScheduleType 更新日程类型 * @param typeInfo 类型信息 * @return 是否成功,true:更新成功 */ Q_SCRIPTABLE bool updateScheduleType(const QString &typeInfo); /** * @brief deleteScheduleTypeByID 根据日程类型ID删除日程类型 * @param typeID 日程类型ID * @return 是否成功,true:更新成功 */ Q_SCRIPTABLE bool deleteScheduleTypeByID(const QString &typeID); /** * @brief scheduleTypeByUsed 日程类型是否被使用 * @param typeID 日程类型ID * @return */ Q_SCRIPTABLE bool scheduleTypeByUsed(const QString &typeID); /** * @brief createSchedule 创建日程 * @param ScheduleInfo 日程信息 * @return 返回日程ID */ Q_SCRIPTABLE QString createSchedule(const QString &scheduleInfo); /** * @brief updateSchedule 更新日程 * @param ScheduleInfo 日程信息 * @return 是否成功,true:更新成功 */ Q_SCRIPTABLE bool updateSchedule(const QString &scheduleInfo); /** * @brief getScheduleByScheduleID 根据日程id获取日程信息 * @param scheduleID 日程id * @return 日程信息 */ Q_SCRIPTABLE QString getScheduleByScheduleID(const QString &scheduleID); /** * @brief deleteScheduleByScheduleID 根据日程ID删除日程 * @param ScheduleID 日程ID * @return 是否成功,true:删除成功 */ Q_SCRIPTABLE bool deleteScheduleByScheduleID(const QString &scheduleID); /** * @brief querySchedulesWithParameter 根据查询参数查询日程 * @param params 具体的查询参数 * @return 查询到的日程集 */ Q_SCRIPTABLE QString querySchedulesWithParameter(const QString ¶ms); /** * @brief querySchedulesWithParameter 导出日程到ics文件 * @param icsFilePath ics文件路径 * @param typeID 导入到的类型ID * @return 是否成功,true: 成功 */ Q_SCRIPTABLE bool exportSchedule(const QString &icsFilePath, const QString &typeID); /** * @brief querySchedulesWithParameter 导入ics文件到日程 * @param icsFilePath ics文件路径 * @param typeID 导入到的类型ID * @param cleanExists 是否清理已存在的日程 * @return 是否成功,true: 成功 */ Q_SCRIPTABLE bool importSchedule(const QString &icsFilePath, const QString &typeID, const bool cleanExists); ///////获取内置类型颜色 Q_SCRIPTABLE QString getSysColors(); signals: //日程更新信号,日程颜色更新信号 void scheduleUpdate(); void scheduleTypeUpdate(); private: //帐户列表是否展开 bool getExpand(); void setExpand(const bool &isExpand); //帐户状态。 int getAccountState(); void setAccountState(const int accountState); //获取同步状态 int getSyncState(); //设置同步频率相关信息 QString getSyncFreq(); void setSyncFreq(const QString &freq); //获取最后一次同步时间 QString getDtLastUpdate(); public slots: private: DAccountModule::Ptr m_accountModel; }; #endif // ACCOUNTSERVICE_H dde-calendar-5.14.13/calendar-service/src/dbusservice/dhuangliservice.cpp000066400000000000000000000043311473346337000263770ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dhuangliservice.h" #include "calendarprogramexitcontrol.h" #include "units.h" DHuangliService::DHuangliService(QObject *parent) : DServiceBase(serviceBasePath + "/HuangLi", serviceBaseName + ".HuangLi", parent) , m_huangli(new CalendarHuangLi(this)) { CaLunarDayInfo::registerMetaType(); CaLunarMonthInfo::registerMetaType(); CaHuangLiDayInfo::registerMetaType(); CaHuangLiMonthInfo::registerMetaType(); } // 获取指定公历月的假日信息 // !这个接口 dde-daemon 在使用,不能变动! QString DHuangliService::getFestivalMonth(quint32 year, quint32 month) { DServiceExitControl exitControl; auto list = m_huangli->getFestivalMonth(year, month); // 保持接口返回值兼容 QJsonArray result; if (!list.empty()) { QJsonObject obj; obj.insert("id", list.at(0)["date"]); obj.insert("description", ""); obj.insert("list", list); result.push_back(obj); } QJsonDocument doc; doc.setArray(result); return doc.toJson(QJsonDocument::Compact); } // 获取指定公历日的黄历信息 QString DHuangliService::getHuangLiDay(quint32 year, quint32 month, quint32 day) { DServiceExitControl exitControl; QString huangliInfo = m_huangli->getHuangLiDay(year, month, day); return huangliInfo; } // 获取指定公历月的黄历信息 QString DHuangliService::getHuangLiMonth(quint32 year, quint32 month, bool fill) { DServiceExitControl exitControl; QString huangliInfo = m_huangli->getHuangLiMonth(year, month, fill); return huangliInfo; } // 通过公历获取阴历信息 CaLunarDayInfo DHuangliService::getLunarInfoBySolar(quint32 year, quint32 month, quint32 day) { DServiceExitControl exitControl; CaLunarDayInfo huangliInfo = m_huangli->getLunarInfoBySolar(year, month, day); return huangliInfo; } // 获取阴历月信息 CaLunarMonthInfo DHuangliService::getLunarMonthCalendar(quint32 year, quint32 month, bool fill) { DServiceExitControl exitControl; CaLunarMonthInfo huangliInfo = m_huangli->getLunarCalendarMonth(year, month, fill); return huangliInfo; } dde-calendar-5.14.13/calendar-service/src/dbusservice/dhuangliservice.h000066400000000000000000000020241473346337000260410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef HUANGLISERVICE_H #define HUANGLISERVICE_H #include "dservicebase.h" #include "huangliData/dbusdatastruct.h" #include "calendarhuangli.h" /** * @brief The DHuangliService class 黄历服务 */ class DHuangliService : public DServiceBase { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.deepin.dataserver.HuangLi") public: explicit DHuangliService(QObject *parent = nullptr); public slots: Q_SCRIPTABLE QString getFestivalMonth(quint32 year, quint32 month); Q_SCRIPTABLE QString getHuangLiDay(quint32 year, quint32 month, quint32 day); Q_SCRIPTABLE QString getHuangLiMonth(quint32 year, quint32 month, bool fill); Q_SCRIPTABLE CaLunarDayInfo getLunarInfoBySolar(quint32 year, quint32 month, quint32 day); Q_SCRIPTABLE CaLunarMonthInfo getLunarMonthCalendar(quint32 year, quint32 month, bool fill); private: CalendarHuangLi *m_huangli; }; #endif // HUANGLISERVICE_H dde-calendar-5.14.13/calendar-service/src/dbusservice/dservicebase.cpp000066400000000000000000000037141473346337000256660ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dservicebase.h" #include #include #include #include DServiceBase::DServiceBase(const QString &path, const QString &interface, QObject *parent) : QObject(parent) , m_path(path) , m_interface(interface) { } QString DServiceBase::getPath() const { return m_path; } QString DServiceBase::getInterface() const { return m_interface; } QString DServiceBase::getClientName() { uint pid = QDBusConnection::sessionBus().interface()->servicePid(message().service()); QString name; QFile file(QString("/proc/%1/status").arg(pid)); if (file.open(QFile::ReadOnly)) { name = QString(file.readLine()).section(QRegExp("([\\t ]*:[\\t ]*|\\n)"), 1, 1); file.close(); } return name; } bool DServiceBase::clientWhite(const int index) { // DeepinAIAssista #ifdef CALENDAR_SERVICE_AUTO_EXIT //根据编号,获取不同到白名单 static QVector whiteList {{"dde-calendar", "DeepinAIAssistant"}, {"dde-calendar"}, {"dde-calendar"}}; if (whiteList.size() < index) { return false; } for (int i = 0; i < whiteList.at(index).size(); ++i) { if (whiteList.at(index).at(i).contains(getClientName())) { return true; } } return false; #else Q_UNUSED(index) return true; #endif } void DServiceBase::notifyPropertyChanged(const QString &interface, const QString &propertyName) { QDBusMessage signal = QDBusMessage::createSignal( getPath(), "org.freedesktop.DBus.Properties", "PropertiesChanged"); signal << interface; QVariantMap changedProps; changedProps.insert(propertyName, property(propertyName.toUtf8())); signal << changedProps; signal << QStringList(); QDBusConnection::sessionBus().send(signal); } dde-calendar-5.14.13/calendar-service/src/dbusservice/dservicebase.h000066400000000000000000000014141473346337000253260ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DSERVICEBASE_H #define DSERVICEBASE_H #include #include /** * @brief The serviceBase class 服务基类 */ class DServiceBase : public QObject , protected QDBusContext { Q_OBJECT public: explicit DServiceBase(const QString &path, const QString &interface, QObject *parent = nullptr); QString getPath() const; QString getInterface() const; protected: QString getClientName(); bool clientWhite(const int index); void notifyPropertyChanged(const QString &interface, const QString &propertyName); private: QString m_path; QString m_interface; }; #endif // DSERVICEBASE_H dde-calendar-5.14.13/calendar-service/src/dbusservice/dservicemanager.cpp000066400000000000000000000040461473346337000263650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dservicemanager.h" #include "dhuangliservice.h" #include "daccountmanagerservice.h" #include "units.h" #include "commondef.h" #include "dbuscloudsync.h" #include #include DServiceManager::DServiceManager(QObject *parent) : QObject(parent) { //注册服务 QDBusConnection sessionBus = QDBusConnection::sessionBus(); if (!sessionBus.registerService(serviceBaseName)) { qCritical(ServiceLogger) << "registerService failed:" << sessionBus.lastError(); exit(0x0001); } QDBusConnection::RegisterOptions options = QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals | QDBusConnection::ExportAllProperties; //创建黄历服务 DServiceBase *huangliService = new class DHuangliService(this); if (!sessionBus.registerObject(huangliService->getPath(), huangliService->getInterface(), huangliService, options)) { qCritical(ServiceLogger) << "registerObject huangliService failed:" << sessionBus.lastError(); exit(0x0002); } //创建帐户管理服务 m_accountManagerService = new class DAccountManagerService(this); if (!sessionBus.registerObject(m_accountManagerService->getPath(), m_accountManagerService->getInterface(), m_accountManagerService, options)) { qCritical(ServiceLogger) << "registerObject accountManagerService failed:" << sessionBus.lastError(); exit(0x0003); } //创建云同步回调服务 DServiceBase *cloudsyncService = new class Dbuscloudsync(this); if (!sessionBus.registerObject(cloudsyncService->getPath(), cloudsyncService->getInterface(), cloudsyncService, options)) { qCritical(ServiceLogger) << "registerObject cloudsyncService failed:" << sessionBus.lastError(); exit(0x0004); } } void DServiceManager::updateRemindJob() { if(nullptr != m_accountManagerService){ m_accountManagerService->updateRemindJob(false); } } dde-calendar-5.14.13/calendar-service/src/dbusservice/dservicemanager.h000066400000000000000000000010521473346337000260240ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SERVICEMANAGER_H #define SERVICEMANAGER_H #include "daccountmanagerservice.h" /** * @brief The DServiceManager class 服务管理类 */ class DServiceManager : public QObject { Q_OBJECT public: explicit DServiceManager(QObject *parent = nullptr); void updateRemindJob(); signals: public slots: private: DAccountManagerService *m_accountManagerService = nullptr; }; #endif // SERVICEMANAGER_H dde-calendar-5.14.13/calendar-service/src/main.cpp000066400000000000000000000052101473346337000216260ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dservicemanager.h" #include "ddatabasemanagement.h" #include "commondef.h" #include #include #include #include #include bool loadTranslator(QCoreApplication *app, QList localeFallback = QList() << QLocale::system()) { bool bsuccess = false; QString CalendarServiceTranslationsDir = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QString("dde-calendar/translations"), QStandardPaths::LocateDirectory); for (auto &locale : localeFallback) { QString translateFilename = QString("%1_%2").arg(app->applicationName()).arg(locale.name()); QString translatePath = QString("%1/%2.qm").arg(CalendarServiceTranslationsDir).arg(translateFilename); if (QFile(translatePath).exists()) { QTranslator *translator = new QTranslator(app); translator->load(translatePath); app->installTranslator(translator); bsuccess = true; } QStringList parseLocalNameList = locale.name().split("_", Qt::SkipEmptyParts); if (parseLocalNameList.length() > 0 && !bsuccess) { translateFilename = QString("%1_%2").arg(app->applicationName()).arg(parseLocalNameList.at(0)); QString parseTranslatePath = QString("%1/%2.qm").arg(CalendarServiceTranslationsDir).arg(translateFilename); if (QFile::exists(parseTranslatePath)) { QTranslator *translator = new QTranslator(app); translator->load(parseTranslatePath); app->installTranslator(translator); bsuccess = true; } } } return bsuccess; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); a.setOrganizationName("deepin"); a.setApplicationName("dde-calendar-service"); Dtk::Core::DLogManager::registerConsoleAppender(); Dtk::Core::DLogManager::registerFileAppender(); Dtk::Core::DLogManager::registerJournalAppender(); //加载翻译 if (!loadTranslator(&a)) { qCDebug(ServiceLogger) << "loadtranslator failed"; } DDataBaseManagement dbManagement; DServiceManager serviceManager; //如果存在迁移,则更新提醒 if(dbManagement.hasTransfer()){ //延迟处理 QTimer::singleShot(0,[&](){ serviceManager.updateRemindJob(); }); } qCDebug(ServiceLogger) << "dde-calendar-service start"; return a.exec(); } dde-calendar-5.14.13/calendar-service/src/synchronization/000077500000000000000000000000001473346337000234415ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-service/src/synchronization/dataencrypt.cpp000066400000000000000000000117011473346337000264630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dataencrypt.h" #include //暂时加解密不适用,待后续补充 //QByteArray DataEncrypt::aesCbcEncrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector) //{ // QByteArray result; // AES_KEY aesKey; // if (AES_set_encrypt_key(reinterpret_cast(key.data()), key.size() * 8, // &aesKey) // != 0) { // qCWarning(ServiceLogger) << "Init failed"; // return result; // } // result = aesCbcEncrypt(data, aesKey, initialVector, AES_ENCRYPT); // if (result.isEmpty()) // qCWarning(ServiceLogger) << "Encrypt failed"; // return result; //} //QByteArray DataEncrypt::aesCbcDecrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector) //{ // QByteArray result; // AES_KEY aesKey; // if (AES_set_decrypt_key(reinterpret_cast(key.data()), key.size() * 8, // &aesKey) // != 0) { // qCWarning(ServiceLogger) << "Init failed"; // return result; // } // result = aesCbcEncrypt(data, aesKey, initialVector, AES_DECRYPT); // if (result.isEmpty()) // qCWarning(ServiceLogger) << "Decrypt failed"; // return result; //} //QByteArray DataEncrypt::aesCbcEncrypt(const QByteArray &data, const AES_KEY &key, // const QByteArray &initialVector, bool isEncrypt) //{ // QByteArray result; // if (initialVector.size() != AES_BLOCK_SIZE) { // qCWarning(ServiceLogger) << "The length of init vector must be" << AES_BLOCK_SIZE; // return result; // } // int remainder = data.size() % AES_BLOCK_SIZE; // int paddingSize = (remainder == 0) ? 0 : (AES_BLOCK_SIZE - remainder); // result.resize(data.size() + paddingSize); // result.fill(0); // QByteArray tmpIinitialVector = initialVector; // 初始向量会被修改,故需要临时变量来暂存 // AES_cbc_encrypt(reinterpret_cast(data.data()), // reinterpret_cast(result.data()), // static_cast(data.size()), &key, // reinterpret_cast(tmpIinitialVector.data()), // (isEncrypt ? AES_ENCRYPT : AES_DECRYPT)); // return result; //} //QByteArray DataEncrypt::aesCfb128Encrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector) //{ // QByteArray result; // AES_KEY aesKey; // if (AES_set_encrypt_key(reinterpret_cast(key.data()), key.size() * 8, // &aesKey) // != 0) { // qCWarning(ServiceLogger) << "Init failed"; // return result; // } // result = aesCfb128Encrypt(data, aesKey, initialVector, AES_ENCRYPT); // if (result.isEmpty()) // qCWarning(ServiceLogger) << "Encrypt failed"; // return result; //} //QByteArray DataEncrypt::aesCfb128Decrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector) //{ // QByteArray result; // if (data.isEmpty()) { // return result; // } // AES_KEY aesKey; // if (AES_set_encrypt_key(reinterpret_cast(key.data()), key.size() * 8, // &aesKey) // != 0) { // qCWarning(ServiceLogger) << "Init failed"; // return result; // } // result = aesCfb128Encrypt(data, aesKey, initialVector, AES_DECRYPT); // if (result.isEmpty()) // qCWarning(ServiceLogger) << "Decrypt failed"; // return result; //} //QByteArray DataEncrypt::aesCfb128Encrypt(const QByteArray &data, const AES_KEY &key, // const QByteArray &initialVector, bool isEncrypt) //{ // QByteArray result; // if (initialVector.size() != AES_BLOCK_SIZE) { // qCWarning(ServiceLogger) << "The length of init vector must be" << AES_BLOCK_SIZE; // return result; // } //// int remainder = data.size() % AES_BLOCK_SIZE; //// int paddingSize = (remainder == 0) ? 0 : (AES_BLOCK_SIZE - remainder); // result.resize(data.size() + 0); // result.fill(0); // int num = 0; // QByteArray tmpIinitialVector = initialVector; // 初始向量会被修改,故需要临时变量来暂存 // AES_cfb128_encrypt(reinterpret_cast(data.data()), // reinterpret_cast(result.data()), // static_cast(data.size()), &key, // reinterpret_cast(tmpIinitialVector.data()), &num, // (isEncrypt ? AES_ENCRYPT : AES_DECRYPT)); // return result; //} dde-calendar-5.14.13/calendar-service/src/synchronization/dataencrypt.h000066400000000000000000000025061473346337000261330ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DATAENCRYPT_H #define DATAENCRYPT_H #include #include //#include //const QString aesCbcKey = "kjX3yBgJCaFHszod"; //class DataEncrypt //{ //public: // static QByteArray aesCbcEncrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector); // static QByteArray aesCbcDecrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector); // static QByteArray aesCfb128Encrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector); // static QByteArray aesCfb128Decrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector); //private: // static QByteArray aesCbcEncrypt(const QByteArray &data, const AES_KEY &key, // const QByteArray &initialVector, bool isEncrypt); // static QByteArray aesCfb128Encrypt(const QByteArray &data, const AES_KEY &key, // const QByteArray &initialVector, bool isEncrypt); //}; #endif // DATAENCRYPT_H dde-calendar-5.14.13/calendar-service/src/synchronization/dbuscloudsync.cpp000066400000000000000000000012301473346337000270220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbuscloudsync.h" #include #include #include "units.h" #include "commondef.h" Dbuscloudsync::Dbuscloudsync(QObject *parent) : DServiceBase(serviceBasePath + "/CloudSync", serviceBaseName + ".CloudSync", parent) { } void Dbuscloudsync::MsgCallBack(const QByteArray &msg) { //msg信息处理 QJsonObject json; json = QJsonDocument::fromJson(msg).object(); //TODO:解析获取到的数据,依据需要做后续操作 qCWarning(CommonLogger) << "Get " << " error."; } dde-calendar-5.14.13/calendar-service/src/synchronization/dbuscloudsync.h000066400000000000000000000011101473346337000264640ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSCLOUDSYNC_H #define DBUSCLOUDSYNC_H #include "dservicebase.h" #include "daccountmodule.h" class Dbuscloudsync : public DServiceBase { Q_OBJECT Q_CLASSINFO("D-Bus Interface","com.deepin.dataserver.cloudsync") public: Dbuscloudsync(QObject* parent = nullptr); public slots: /** * @brief MsgCallBack 云同步信息回调 * @return */ void MsgCallBack(const QByteArray &msg); }; #endif // DBUSCLOUDSYNC_H dde-calendar-5.14.13/calendar-service/src/synchronization/syncfilemanage.cpp000066400000000000000000000077111473346337000271400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "syncfilemanage.h" #include "commondef.h" #include SyncFileManage::SyncFileManage(QObject *parent) : QObject(parent) , m_syncoperation(new Syncoperation) , m_account(new DAccount(DAccount::Account_UnionID)) { } SyncFileManage::~SyncFileManage() { } bool SyncFileManage::SyncDataDownload(const QString &uid, QString &filepath, int &errorcode) { //文件下载目录检查 QString usersyncdir(QString("/tmp/%1_calendar").arg(uid)); UserSyncDirectory(usersyncdir); QString syncDB = usersyncdir + "/" + syncDBname; QFile syncDBfile(syncDB); if (syncDBfile.exists()) { //存在文件即删除 syncDBfile.remove(); } SyncoptResult result; result = m_syncoperation->optDownload(syncDB, syncDB); if (result.error_code == SYNC_No_Error) { //下载成功 if (result.data != syncDB) { //文件下载路径不正确 //将文件移动到正确路径 if (!QFile::rename(result.data, syncDB)) { qCWarning(ServiceLogger) << "down path error!"; errorcode = -1; return false; } } filepath = syncDB; return true; } else if (result.error_code == SYNC_Data_Not_Exist) { //云同步数据库文件不存在 if (SyncDbCreate(syncDB)) { filepath = syncDB; return true; } else { errorcode = -1; return false; } } errorcode = result.error_code; return false; } bool SyncFileManage::SyncDbCreate(const QString &DBpath) { QFile file(DBpath); if (!file.exists()) { bool bRet = file.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Append); if (!bRet) { qCWarning(ServiceLogger) << "file creat failed"; return false; } file.close(); } QSqlDatabase m_db; m_db = QSqlDatabase::addDatabase("QSQLITE"); m_db.setPassword(syncDBpassword); m_db.setDatabaseName(DBpath); if (!m_db.open()) { qCWarning(ServiceLogger) << "db open failed"; return false; } qCInfo(ServiceLogger) << "db open successed"; m_db.close(); return true; } bool SyncFileManage::SyncDbDelete(const QString &DBpath) { if (DBpath.isEmpty()) { qCWarning(ServiceLogger) << "DBpath isEmpty"; return false; } QFileInfo fileinfo(DBpath); QDir dir = fileinfo.dir(); if (dir.exists()) { if (!dir.removeRecursively()) { return false; } } return true; } bool SyncFileManage::SyncDataUpload(const QString &filepath, int &errorcode) { SyncoptResult result; result = m_syncoperation->optUpload(filepath); errorcode = result.error_code; if (result.error_code != SYNC_No_Error) { qCWarning(ServiceLogger) << "upload failed"; return false; } return true; } bool SyncFileManage::syncDataDelete(const QString &filepath) { if (!SyncDbDelete(filepath)) { qCWarning(ServiceLogger) << "delete file error:" << filepath; return false; } return true; } DAccount::Ptr SyncFileManage::getuserInfo() { QVariantMap userInfoMap; if (!m_syncoperation->optUserData(userInfoMap)) { qCInfo(ServiceLogger) << "can't get userinfo"; return nullptr; } m_account->setDisplayName(userInfoMap.value("username").toString()); m_account->setAccountID(userInfoMap.value("uid").toString()); m_account->setAvatar(userInfoMap.value("profile_image").toString()); m_account->setAccountName(userInfoMap.value("nickname").toString()); return m_account; } Syncoperation *SyncFileManage::getSyncoperation() { return m_syncoperation; } void SyncFileManage::UserSyncDirectory(const QString &dir) { QDir udir(dir); if (!udir.exists()) { udir.mkdir(dir); } } dde-calendar-5.14.13/calendar-service/src/synchronization/syncfilemanage.h000066400000000000000000000034711473346337000266040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SYNCFILEMANAGE_H #define SYNCFILEMANAGE_H #include "syncoperation.h" #include "dschedule.h" #include #include "dataencrypt.h" #include const QString syncDBname = "synccalendarDB.db"; const QString syncDBpassword = "calendar123"; class SyncFileManage : public QObject { Q_OBJECT public: explicit SyncFileManage(QObject *parent = nullptr); ~SyncFileManage(); /** * @brief SyncDataUpload 云端文件下载接口 * @param UID:用户UID信息 * @return filename: 下载数据库文件路径 * 返回值: -1 数据库文件创建失败 * 云同步错误码 */ bool SyncDataDownload(const QString &uid, QString &filepath, int &errorcode); /** * @brief SyncDataUpload 同步数据上传 * @param * @return */ bool SyncDataUpload(const QString &filepath, int &errorcode); /** * @brief syncDataDelete 删除临时数据 * @param filepath * @return */ bool syncDataDelete(const QString &filepath); /** * @brief getuserInfo 获取用户信息 * @param * @return */ DAccount::Ptr getuserInfo(); Syncoperation *getSyncoperation(); private: /** * @brief SyncDbCreate 同步数据库文件创建 * @param * @return */ bool SyncDbCreate(const QString &DBpath); /** * @brief SyncDbCreate 同步数据库文件创建 * @param * @return */ bool SyncDbDelete(const QString &DBpath); void UserSyncDirectory(const QString &dir); private: Syncoperation *m_syncoperation = nullptr; DAccount::Ptr m_account; }; #endif // SYNCFILEMANAGE_H dde-calendar-5.14.13/calendar-service/src/synchronization/syncoperation.cpp000066400000000000000000000233761473346337000270550ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "syncoperation.h" #include "commondef.h" #include Syncoperation::Syncoperation(QObject *parent) : QObject(parent) , m_syncInter(new SyncInter(SYNC_DBUS_PATH, SYNC_DBUS_INTERFACE, QDBusConnection::sessionBus(), this)) { if (!QDBusConnection::sessionBus().connect(SYNC_DBUS_PATH, SYNC_DBUS_INTERFACE, "org.freedesktop.DBus.Properties", QLatin1String("PropertiesChanged"), this, SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)))) { qCWarning(ServiceLogger) << "the PropertiesChanged was fail!"; } if (!QDBusConnection::sessionBus().connect(m_syncInter->service(), m_syncInter->path(), m_syncInter->interface(), "", this, SLOT(slotDbusCall(QDBusMessage)))) { qCWarning(ServiceLogger) << "the connection was fail!" << "path: " << m_syncInter->path() << "interface: " << m_syncInter->interface(); }; } Syncoperation::~Syncoperation() { } void Syncoperation::optlogin() { //异步调用无需等待结果,由后续LoginStatus触发处理 m_syncInter->login(); } void Syncoperation::optlogout() { //异步调用无需等待结果,由后续LoginStatus触发处理 m_syncInter->logout(); } SyncoptResult Syncoperation::optUpload(const QString &key) { SyncoptResult result; QDBusPendingReply reply = m_syncInter->Upload(key); reply.waitForFinished(); if (reply.error().message().isEmpty()) { qCInfo(ServiceLogger) << "Upload success!"; //解析上传成功数据的元信息ID值 ,这个ID值暂时没用,不解析出来 // QJsonObject json; // json = QJsonDocument::fromJson(reply).object(); // if (json.contains(QString("data"))) { // QJsonObject subJsonObject = json.value(QString("data")).toObject(); // if (subJsonObject.contains(QString("id"))) { // result.data = subJsonObject.value(QString("id")).toString(); // qCInfo(ServiceLogger) << result.data; // } // } result.data = reply.value(); result.ret = true; result.error_code = SYNC_No_Error; } else { qCWarning(ServiceLogger) << "Upload failed:" << reply.error().message(); result.ret = false; QJsonDocument jsonDocument = QJsonDocument::fromJson(reply.error().message().toLocal8Bit().data()); QJsonObject obj = jsonDocument.object(); if (obj.contains(QString("code"))) { result.error_code = obj.value(QString("code")).toInt(); } } return result; } SyncoptResult Syncoperation::optDownload(const QString &key, const QString &path) { qCDebug(ServiceLogger) << "download" << key << path; SyncoptResult result; QDBusPendingReply reply = m_syncInter->Download(key, path); reply.waitForFinished(); if (reply.error().message().isEmpty()) { qCInfo(ServiceLogger) << "Download success!"; result.data = reply.value(); result.ret = true; result.error_code = SYNC_No_Error; } else { qCWarning(ServiceLogger) << "Download failed:" << reply.error().message(); result.ret = false; QJsonDocument jsonDocument = QJsonDocument::fromJson(reply.error().message().toLocal8Bit().data()); QJsonObject obj = jsonDocument.object(); if (obj.contains(QString("code"))) { result.error_code = obj.value(QString("code")).toInt(); qCWarning(ServiceLogger) << result.error_code; } } return result; } SyncoptResult Syncoperation::optDelete(const QString &key) { SyncoptResult result; QDBusPendingReply reply = m_syncInter->Delete(key); reply.waitForFinished(); if (reply.error().message().isEmpty()) { qCInfo(ServiceLogger) << "Delete success!"; result.data = reply.value(); result.ret = true; result.error_code = SYNC_No_Error; } else { qCWarning(ServiceLogger) << "Delete failed:" << reply.error().message(); result.ret = false; QJsonDocument jsonDocument = QJsonDocument::fromJson(reply.error().message().toLocal8Bit().data()); QJsonObject obj = jsonDocument.object(); if (obj.contains(QString("code"))) { result.error_code = obj.value(QString("code")).toInt(); qCWarning(ServiceLogger) << result.error_code; } } return result; } SyncoptResult Syncoperation::optMetadata(const QString &key) { SyncoptResult result; QDBusPendingReply reply = m_syncInter->Metadata(key); reply.waitForFinished(); if (reply.error().message().isEmpty()) { qCInfo(ServiceLogger) << "Metadata success!"; //元数据获取接口,暂时好像用不到 result.data = reply.value(); result.ret = true; result.error_code = SYNC_No_Error; } else { qCWarning(ServiceLogger) << "Metadata failed:" << reply.error().message(); result.ret = false; QJsonDocument jsonDocument = QJsonDocument::fromJson(reply.error().message().toLocal8Bit().data()); QJsonObject obj = jsonDocument.object(); if (obj.contains(QString("code"))) { result.error_code = obj.value(QString("code")).toInt(); qCWarning(ServiceLogger) << result.error_code; } } return result; } bool Syncoperation::optUserData(QVariantMap &userInfoMap) { QDBusMessage msg = QDBusMessage::createMethodCall(SYNC_DBUS_PATH, SYNC_DBUS_INTERFACE, "org.freedesktop.DBus.Properties", QStringLiteral("Get")); msg << QString("com.deepin.utcloud.Daemon") << QString("UserData"); QDBusMessage reply = QDBusConnection::sessionBus().call(msg); if (reply.type() == QDBusMessage::ReplyMessage) { QVariant variant = reply.arguments().first(); QDBusArgument argument = variant.value().variant().value(); argument >> userInfoMap; return true; } else { qCWarning(ServiceLogger) << "Download failed:"; return false; } } bool Syncoperation::hasAvailable() { QDBusMessage msg = QDBusMessage::createMethodCall(SYNC_DBUS_PATH, SYNC_DBUS_INTERFACE, "org.freedesktop.DBus.Introspectable", QStringLiteral("Introspect")); QDBusMessage reply = QDBusConnection::sessionBus().call(msg); qCInfo(ServiceLogger) << "Syncoperation hasAvailable" << reply.type(); if (reply.type() == QDBusMessage::ReplyMessage) { return true; } else { return false; } } SyncoptResult Syncoperation::optGetMainSwitcher() { SyncoptResult result; QDBusPendingReply reply = m_syncInter->SwitcherDump(); reply.waitForFinished(); if (reply.error().message().isEmpty()) { QJsonObject json; json = QJsonDocument::fromJson(reply.value().toUtf8()).object(); if (json.contains(QString("enabled"))) { bool state = json.value(QString("enabled")).toBool(); result.switch_state = state; } result.ret = true; } else { result.ret = false; } return result; } SyncoptResult Syncoperation::optGetCalendarSwitcher() { //登录后立即获取开关状态有问题,需要延迟获取 QThread::msleep(500); SyncoptResult mainswitcher = optGetMainSwitcher(); SyncoptResult result; result.switch_state = false; //默认关闭 if (mainswitcher.ret) { if (mainswitcher.switch_state) { //总开关开启,获取日历按钮状态 QDBusPendingReply reply = m_syncInter->SwitcherGet(utcloudcalendatpath); reply.waitForFinished(); if (reply.error().message().isEmpty()) { result.switch_state = reply.value(); result.ret = true; } else { qCDebug(ServiceLogger) << "get calendar switcher failed"; result.ret = false; } } else { result.ret = false; } } else { qCDebug(ServiceLogger) << "get main switcher failed"; result.ret = false; } return result; } void Syncoperation::slotDbusCall(const QDBusMessage &msg) { if (msg.member() == "SwitcherChange") { SyncoptResult result; //获取总开关状态 result = optGetCalendarSwitcher(); if (result.ret) { Q_EMIT SwitcherChange(result.switch_state); } else { Q_EMIT SwitcherChange(false); } } else if (msg.member() == "LoginStatus") { //帐户登陆登出信号监测 QVariant variant = msg.arguments().first(); const QDBusArgument &tmp = variant.value(); QVector loginStatus; tmp.beginArray(); while (!tmp.atEnd()) { tmp >> loginStatus; } tmp.endArray(); if (loginStatus.size() > 0) { emit signalLoginStatusChange(loginStatus.first()); } else { qCWarning(ServiceLogger) << "get loginStatus error"; } } } void Syncoperation::onPropertiesChanged(const QString &interfaceName, const QVariantMap &changedProperties, const QStringList &invalidatedProperties) { Q_UNUSED(interfaceName); Q_UNUSED(invalidatedProperties); if (!changedProperties.contains("UserData")) return; } dde-calendar-5.14.13/calendar-service/src/synchronization/syncoperation.h000066400000000000000000000060321473346337000265100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SYNCOPERATION_H #define SYNCOPERATION_H #include #include #include #include #include "dunioniddbus.h" //云同步DBUS接口信息 #define SYNC_DBUS_PATH "com.deepin.sync.Daemon" #define SYNC_DBUS_INTERFACE "/com/deepin/utcloud/Daemon" //云同步错误码 #define SYNC_No_Error 0 /*执行正常*/ #define SYNC_Internal_Error 7500 /*内部错误*/ #define SYNC_Parameter_Error 7501 /*参数错误*/ #define SYNC_Login_Expired 7502 /*未登录或登录过期*/ #define SYNC_No_Access 7503 /*禁止访问,不在白名单内*/ #define SYNC_Data_Not_Exist 7504 /*数据不存在*/ #define SYNC_File_Operation_Failed 7505 /*文件操作失败*/ #define SYNC_Network_Request_Error 7506 /*网络请求出错错误*/ #define SYNC_Oss_Operation_Error 7507 /*oss操作出错*/ #define SYNC_Space_Not_Available 7508 /*空间不可用*/ #define SYNC_File_Or_Path_Error 7509 /*文件或者路径出错*/ #define SYNC_Invalid_File_Size 7510 /*文件大小不合法*/ #define SYNC_Metadata_Check_Error 7511 /*元数据校验出错*/ const QString utcloudcalendatpath = CALENDAR_SERVICE_PATH"/dde-calendar-service"; using SyncInter = com::deepin::sync::cloudopt; struct SyncoptResult { QString data = ""; //执行结果数据 bool ret = false; //执行云同步操作的结果 int error_code = 0; //错误码 bool switch_state = false; //开关状态 }; class Syncoperation : public QObject { Q_OBJECT public: explicit Syncoperation(QObject *parent = nullptr); ~Syncoperation(); void optlogin(); void optlogout(); SyncoptResult optUpload(const QString &key); SyncoptResult optDownload(const QString &key, const QString &path); SyncoptResult optDelete(const QString &key); SyncoptResult optMetadata(const QString &key); bool optUserData(QVariantMap &userInfoMap); /** * @brief hasAvailable 判断云同步是否提供Available方法 * @return */ bool hasAvailable(); //获取总开关状态 SyncoptResult optGetMainSwitcher(); //获取日历开关状态 SyncoptResult optGetCalendarSwitcher(); Q_SIGNALS: void signalLoginStatusChange(const int staus); void LoginStatus(const int data); void SwitcherChange(const bool state); private Q_SLOTS: void slotDbusCall(const QDBusMessage &msg); void onPropertiesChanged(const QString &interfaceName, const QVariantMap &changedProperties, const QStringList &invalidatedProperties); private: SyncInter *m_syncInter; }; #endif // SYNCUPLOAD_H dde-calendar-5.14.13/calendar-service/src/unionIDDav/000077500000000000000000000000001473346337000222005ustar00rootroot00000000000000dde-calendar-5.14.13/calendar-service/src/unionIDDav/ddatasyncbase.cpp000066400000000000000000000006001473346337000255050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ddatasyncbase.h" #include "dunioniddav.h" DDataSyncBase::DDataSyncBase() { qRegisterMetaType("DDataSyncBase::UpdateTypes"); qRegisterMetaType("SyncTypes"); } DDataSyncBase::~DDataSyncBase() { } dde-calendar-5.14.13/calendar-service/src/unionIDDav/ddatasyncbase.h000066400000000000000000000026361473346337000251650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DDATASYNCBASE_H #define DDATASYNCBASE_H #include "daccount.h" #include "daccountdatabase.h" #include "syncfilemanage.h" #include #include #include #include #include #ifndef Q_MOC_RUN #define Q_DECLARE_FLAGS(Flags, Enum)\ typedef QFlags Flags; #endif /** * @brief The DDataSyncBase class 云同步的基类 */ class DDataSyncBase : public QObject { Q_OBJECT public: enum UpdateType { Update_None = 0, /*无*/ Update_Schedule = 1, /*更新日程*/ Update_ScheduleType = 2, /*更新日程类型*/ Update_Setting = 4, /*更新设置*/ }; Q_DECLARE_FLAGS(UpdateTypes, UpdateType) enum SyncType { Sync_None = 0, /*无*/ Sync_Upload = 1, /*上传*/ Sync_Download = 2, /*下载*/ }; Q_DECLARE_FLAGS(SyncTypes, SyncType) DDataSyncBase(); virtual ~DDataSyncBase(); virtual void syncData(QString accountId, QString accountName, int accountState, DDataSyncBase::SyncTypes syncType) = 0; signals: // void signalUpdate(const UpdateTypes updateType); void signalSyncState(const int syncState); }; Q_DECLARE_OPERATORS_FOR_FLAGS(DDataSyncBase::UpdateTypes) Q_DECLARE_OPERATORS_FOR_FLAGS(DDataSyncBase::SyncTypes) #endif // DDATASYNCBASE_H dde-calendar-5.14.13/calendar-service/src/unionIDDav/dsyncdatafactory.cpp000066400000000000000000000012201473346337000262410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dsyncdatafactory.h" #include "dunioniddav.h" #include "commondef.h" #include DSyncDataFactory::DSyncDataFactory() { } DDataSyncBase *DSyncDataFactory::createDataSync(const DAccount::Ptr &account) { DDataSyncBase *syncBase = nullptr; switch (account->accountType()) { case DAccount::Account_UnionID: syncBase = new DUnionIDDav(); qCInfo(ServiceLogger) << "创建同步任务"; break; default: syncBase = nullptr; break; } return syncBase; } dde-calendar-5.14.13/calendar-service/src/unionIDDav/dsyncdatafactory.h000066400000000000000000000007351473346337000257200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DSYNCDATAFACTORY_H #define DSYNCDATAFACTORY_H #include "ddatasyncbase.h" /** * @brief The DSyncDataFactory class 根据不同类型的账号,生产不同的上传实例 */ class DSyncDataFactory { public: DSyncDataFactory(); static DDataSyncBase *createDataSync(const DAccount::Ptr &account); }; #endif // DSYNCDATAFACTORY_H dde-calendar-5.14.13/calendar-service/src/unionIDDav/dunioniddav.cpp000066400000000000000000000534751473346337000252260ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dunioniddav.h" #include "dcalendargeneralsettings.h" #include "syncfilemanage.h" #include "units.h" #include "commondef.h" #include "ddatabase.h" #include "dunioniddav_p.h" #include #include #include #include #include #include #include #include #include /** * @brief The SqlTransactionLocker class 用于数据库事务相关 */ bool SyncAccount::defaultScheduleType() { //工作类型 QDateTime currentTime = QDateTime::currentDateTime(); DScheduleType::Ptr workType(new DScheduleType(_accountID)); workType->setTypeID(DDataBase::createUuid()); workType->setDtCreate(currentTime.addDays(-3)); workType->setPrivilege(DScheduleType::Read); workType->setTypeName("Work"); workType->setDisplayName("Work"); DTypeColor workColor; workColor.setColorID(DDataBase::GWorkColorID); workColor.setColorCode("#ff5e97"); workColor.setPrivilege(DTypeColor::PriSystem); workType->setTypeColor(workColor); workType->setShowState(DScheduleType::Show); if (!insertToScheduleType(workType)) return false; //生活 DScheduleType::Ptr lifeType(new DScheduleType(_accountID)); lifeType->setTypeID(DDataBase::createUuid()); lifeType->setDtCreate(currentTime.addDays(-2)); lifeType->setPrivilege(DScheduleType::Read); lifeType->setTypeName("Life"); lifeType->setDisplayName("Life"); DTypeColor lifeColor; lifeColor.setColorID(DDataBase::GLifeColorID); lifeColor.setColorCode("#5d51ff"); lifeColor.setPrivilege(DTypeColor::PriSystem); lifeType->setTypeColor(lifeColor); lifeType->setShowState(DScheduleType::Show); if (!insertToScheduleType(lifeType)) return false; //其他 DScheduleType::Ptr otherType(new DScheduleType(_accountID)); otherType->setTypeID(DDataBase::createUuid()); otherType->setDtCreate(currentTime); otherType->setPrivilege(DScheduleType::Read); otherType->setTypeName("Other"); otherType->setDisplayName("Other"); DTypeColor otherColor; otherColor.setColorID(DDataBase::GOtherColorID); otherColor.setColorCode("#5bdd80"); otherColor.setPrivilege(DTypeColor::PriSystem); otherType->setTypeColor(otherColor); otherType->setShowState(DScheduleType::Show); if (!insertToScheduleType(otherType)) return false; return true; } bool SyncAccount::defaultTypeColor() { QDateTime currentTime = QDateTime::currentDateTime(); int index = -10; //使用与本地一致的颜色id QMap::const_iterator iter = GTypeColor.constBegin(); for (; iter != GTypeColor.constEnd(); ++iter) { DTypeColor typeColor; typeColor.setDtCreate(currentTime.addDays(++index)); typeColor.setPrivilege(DTypeColor::PriSystem); typeColor.setColorCode(iter.value()); typeColor.setColorID(iter.key()); if (!insertToTypeColor(typeColor)) { return false; }; } return true; } bool SyncAccount::insertToScheduleType(const DScheduleType::Ptr &scheduleType) { QString strSql("INSERT INTO scheduleType ( \ typeID, typeName, typeDisplayName, typePath, \ typeColorID, description, privilege, showState, \ syncTag,dtCreate,isDeleted) \ VALUES(?,?,?,?,?,?,?,?,?,?,?)"); SqliteQuery query(_connectionName); query.prepare(strSql); if (scheduleType->typeID().size() < 30) { scheduleType->setTypeID(DDataBase::createUuid()); } query.addBindValue(scheduleType->typeID()); query.addBindValue(scheduleType->typeName()); query.addBindValue(scheduleType->displayName()); query.addBindValue(scheduleType->typePath()); query.addBindValue(scheduleType->typeColor().colorID()); query.addBindValue(scheduleType->description()); query.addBindValue(int(scheduleType->privilege())); query.addBindValue(scheduleType->showState()); query.addBindValue(scheduleType->syncTag()); query.addBindValue(dtToString(scheduleType->dtCreate())); query.addBindValue(scheduleType->deleted()); return query.exec(); } bool SyncAccount::insertToTypeColor(const DTypeColor &typeColor) { SqliteQuery query(_connectionName); QString strSql("INSERT INTO TypeColor \ (ColorID, ColorHex, privilege,dtCreate) \ VALUES(:ColorID, :ColorHex, :privilege,:dtCreate)"); query.prepare("replace into TypeColor (ColorID, ColorHex, privilege,dtCreate) \ VALUES(:ColorID, :ColorHex, :privilege,:dtCreate)"); query.bindValue(":ColorID", typeColor.colorID()); query.bindValue(":ColorHex", typeColor.colorCode()); query.bindValue(":privilege", typeColor.privilege()); query.bindValue(":dtCreate", dtToString(typeColor.dtCreate())); return query.exec(); } void DUIDSynDataWorker::syncData(SyncStack syncType) { if (nullptr == mSyncTimer) { mSyncTimer = new QTimer(this); mSyncTimer->setSingleShot(true); connect(mSyncTimer, &QTimer::timeout, this, &DUIDSynDataWorker::slotSync); } mSyncTimer->start(200); mSyncList.append(syncType); } void DUIDSynDataWorker::slotSync() { bool next = false; for (int k = mSyncList.count() - 1; k >= 0; k--) { if (k == mSyncList.count() - 1) { mSync = mSyncList[k]; next = true; } else { mSync.syncType |= mSyncList[k].syncType; } if (mSync.syncType.testFlag(DDataSyncBase::Sync_Upload) && mSync.syncType.testFlag(DDataSyncBase::Sync_Download)) break; } mSyncList.clear(); if (next) startUpdate(); } void DUIDSynDataWorker::startUpdate() { /* * A为本地数据库 * B为云端下载的临时数据库 * 1.下载B * 2.将A的uploadTask同步到B * 3.将B的数据库完全复制到A * 4.上传B */ SyncFileManage fileManger; int errCode = 0; DUnionIDDav::UpdateTypes updateType = DUnionIDDav::Update_None; QSqlDatabase::cloneDatabase(mSync.db_account, mSync.dbname_account_thread); QSqlDatabase::cloneDatabase(mSync.db_manager, mSync.dbname_manager_thread); //获取云端数据 bool isInitSyncData = false; errCode = mSync.downloadUidData(isInitSyncData, fileManger); //如果下载失败 if(errCode != 0){ //发送同步状态 emit signalSyncState(errCode); return; } SqlTransactionLocker transactionLocker({mSync.dbname_account_thread, mSync.dbname_manager_thread, mSync.dbname_sync_thread}); //本地数据迁移到临时文件中 if (errCode == 0) { errCode = mSync.loadToTmp(); } //将临时文件数据迁移到本地中 if (errCode == 0 && mSync.syncType.testFlag(DDataSyncBase::SyncType::Sync_Download)) { errCode = mSync.tmpToLoad(updateType); } if (errCode == 0) { transactionLocker.commit(); } else { transactionLocker.rollback(); } QSqlDatabase::removeDatabase(mSync.dbname_account_thread); QSqlDatabase::removeDatabase(mSync.dbname_manager_thread); QSqlDatabase::removeDatabase(mSync.dbname_sync_thread); //如果为上传需要上传数据 if (errCode == 0 && (isInitSyncData || mSync.syncType.testFlag(DDataSyncBase::SyncType::Sync_Upload))) { errCode = mSync.uploadTmpData(fileManger); } //删除临时文件 mSync.deleteTmpData(fileManger); qCInfo(ServiceLogger) << "同步完成"; if (errCode == 0) { //发送数据更新消息 emit signalUpdate(updateType); } //发送同步状态 emit signalSyncState(errCode); } DUnionIDDav::DUnionIDDav() : DDataSyncBase() , d(new DUIDSynDataPrivate()) { connect(d, &DUIDSynDataPrivate::signalUpdate, this, &DUnionIDDav::signalUpdate); connect(d, &DUIDSynDataPrivate::signalSyncState, this, &DUnionIDDav::signalSyncState); } DUnionIDDav::~DUnionIDDav() { delete d; } void DUnionIDDav::syncData(QString accountId, QString accountName, int accountState, DDataSyncBase::SyncTypes syncType) { qCInfo(ServiceLogger) << "DUnionIDDav 同步数据"; d->syncData(accountId, accountName, accountState, syncType); } int SyncStack::downloadUidData(bool &isInitSyncData, SyncFileManage &fileManger) { int errCode = 0; isInitSyncData = false; //下载数据库sync if (!fileManger.SyncDataDownload(accountId, dbpath_sync, errCode)) { return errCode; } QSqlDatabase db_sync = QSqlDatabase::addDatabase("QSQLITE", dbname_sync_thread); db_sync.setDatabaseName(dbpath_sync); if (!db_sync.open()) { return -1; } qCInfo(ServiceLogger) << "初始化表结构"; SqliteQuery query(dbname_sync_thread); if (!query.exec(DAccountDataBase::sql_create_schedules)) return -1; if (!query.exec(DAccountDataBase::sql_create_scheduleType)) return -1; if (!query.exec(DAccountDataBase::sql_create_typeColor)) return -1; if (!query.exec(DAccountDataBase::sql_create_calendargeneralsettings)) return -1; // if(!repairTable("schedules", dbname_account_thread, dbname_sync_thread)) { // return -1; // } // if(!repairTable("scheduleType", dbname_account_thread, dbname_sync_thread)) { // return -1; // } // if(!repairTable("typeColor", dbname_account_thread, dbname_sync_thread)) { // return -1; // } query.exec("select count(0) from scheduleType"); if (query.next() && query.value(0).toInt() == 0) { qCInfo(ServiceLogger) << "没有数据则设置:默认日程类型、颜色、默认通用设置"; SyncAccount accountDb(dbname_sync_thread, accountId); qCInfo(ServiceLogger) << "默认日程类型"; if (!accountDb.defaultScheduleType()) return -1; qCInfo(ServiceLogger) << "默认颜色"; if (!accountDb.defaultTypeColor()) return -1; if (accountState & DAccount::Account_Setting) { qCInfo(ServiceLogger) << "默认通用设置"; if(needUpdateSettingValue()) { if (!syncIntoTable("calendargeneralsettings", dbname_manager_thread, dbname_sync_thread)) return -1; } } //云端没有对应数据需要初始化,返回初始化状态 isInitSyncData = true; } return 0; } int SyncStack::loadToTmp() { qCInfo(ServiceLogger) << "将本地A的uploadTask同步到刚刚下载的B里"; if(accountState & DAccount::Account_Calendar) { SqliteQuery query(dbname_account_thread); query.exec("select taskID,uploadType,uploadObject,objectID from uploadTask"); while (query.next()) { int type = query.value("uploadType").toInt(); int obj = query.value("uploadObject").toInt(); QString key_value = query.value("objectID").toString(); QString key_name = DUploadTaskData::sql_table_primary_key(obj); QString table_name = DUploadTaskData::sql_table_name(obj); switch (type) { case DUploadTaskData::Create: case DUploadTaskData::Modify: if (!replaceIntoRecord(table_name, selectRecord(table_name, key_name, key_value, dbname_account_thread), dbname_sync_thread)){ qCWarning(ServiceLogger)<<"faild:" <<__FUNCTION__ <<" : "<<__LINE__; return -1; } break; case DUploadTaskData::Delete: if (!deleteTableLine(table_name, key_name, key_value, dbname_sync_thread)){ qCWarning(ServiceLogger)<<"faild:" <<__FUNCTION__ <<" : "<<__LINE__; return -1; } break; } } qCInfo(ServiceLogger) << "清空uploadTask"; if (!deleteTable("uploadTask", dbname_account_thread)){ qCWarning(ServiceLogger)<<"faild:" <<__FUNCTION__ <<" : "<<__LINE__; return -1; } } if (accountState & DAccount::Account_Setting) { qCInfo(ServiceLogger) << "同步通用设置"; if(needUpdateSettingValue()) { QDateTime managerDate = selectValue("vch_value", "calendargeneralsettings", "vch_key", "dt_update", dbname_manager_thread).toDateTime(); QDateTime syncDate = selectValue("vch_value", "calendargeneralsettings", "vch_key", "dt_update", dbname_sync_thread).toDateTime(); if (managerDate > syncDate) if (!syncIntoTable("calendargeneralsettings", dbname_manager_thread, dbname_sync_thread)){ qCWarning(ServiceLogger)<<"faild:" <<__FUNCTION__ <<" : "<<__LINE__; return -1; } if (syncDate > managerDate) if (!syncIntoTable("calendargeneralsettings", dbname_sync_thread, dbname_manager_thread)){ qCWarning(ServiceLogger)<<"faild:" <<__FUNCTION__ <<" : "<<__LINE__; return -1; } } } return 0; } bool SyncStack::needUpdateSettingValue() { int mangerdayweek = selectValue("vch_value", "calendargeneralsettings", "vch_key", "firstDayOfWeek", dbname_manager_thread).toInt(); int syncdayweek = selectValue("vch_value", "calendargeneralsettings", "vch_key", "firstDayOfWeek", dbname_sync_thread).toInt(); if(mangerdayweek != syncdayweek) { return true; } int mangerTimeShow = selectValue("vch_value", "calendargeneralsettings", "vch_key", "timeShowType", dbname_manager_thread).toInt(); int syncTimeShow = selectValue("vch_value", "calendargeneralsettings", "vch_key", "timeShowType", dbname_sync_thread).toInt(); if(mangerTimeShow != syncTimeShow) { return true; } return false; } int SyncStack::tmpToLoad(DDataSyncBase::UpdateTypes &updateType) { if (accountState & DAccount::Account_Calendar) { qCInfo(ServiceLogger) << "更新schedules、schedules、typeColor"; if (!syncIntoTable("schedules", dbname_sync_thread, dbname_account_thread)){ qCWarning(ServiceLogger)<<"faild:" <<__FUNCTION__ <<" : "<<__LINE__; return -1; } if (!syncIntoTable("scheduleType", dbname_sync_thread, dbname_account_thread)){ qCWarning(ServiceLogger)<<"faild:" <<__FUNCTION__ <<" : "<<__LINE__; return -1; } if (!syncIntoTable("typeColor", dbname_sync_thread, dbname_account_thread)){ qCWarning(ServiceLogger)<<"faild:" <<__FUNCTION__ <<" : "<<__LINE__; return -1; } updateType = DUnionIDDav::Update_Schedule | DUnionIDDav::Update_ScheduleType; } if (accountState & DAccount::Account_Setting) { qCInfo(ServiceLogger) << "更新通用设置"; if(needUpdateSettingValue()) { if (!syncIntoTable("calendargeneralsettings", dbname_sync_thread, dbname_manager_thread)){ qCWarning(ServiceLogger)<<"faild:" <<__FUNCTION__ <<" : "<<__LINE__; return -1; } } updateType = updateType | DUnionIDDav::Update_Setting; } return 0; } int SyncStack::uploadTmpData(SyncFileManage &fileManger) { int errCode = 0; fileManger.SyncDataUpload(dbpath_sync, errCode); return errCode; } void SyncStack::deleteTmpData(SyncFileManage &fileManger) { fileManger.syncDataDelete(dbpath_sync); } QString SyncStack::prepareQuest(int count) { QString r; while (count--) { r += "?,"; } r.chop(1); return r; } void SyncStack::prepareBinds(QSqlQuery &query, QSqlRecord source) { for (int k = 0; k < source.count(); k++) query.addBindValue(source.value(k)); } bool SyncStack::syncIntoTable(const QString &table_name, const QString &connection_name_source, const QString &connection_name_target) { SqliteQuery source(QSqlDatabase::database(connection_name_source)); SqliteQuery target(QSqlDatabase::database(connection_name_target)); if (!target.exec(" delete from " + table_name)){ qCWarning(ServiceLogger) << target.lastError() <<"table_name:"< local_header_info; QMap server_header_info; SqliteQuery query_local(connection_name_local); SqliteQuery query_server(connection_name_server); QString select_sql = QString("SELECT name, type FROM pragma_table_info('%1')").arg(table_name); QMap default_map = { {"TEXT", ""}, {"INTEGER", "0"}, {"BOOL", "false"}, {"DATETIME", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")} }; query_local.exec(select_sql); while (query_local.next()) { local_header_info.insert(query_local.value("name").toString(), query_local.value("type").toString()); } query_server.exec(select_sql); while (query_server.next()) { server_header_info.insert(query_server.value("name").toString(), query_server.value("type").toString()); } auto exceptFunc = [](QSet local, QSet server) -> QSet { QSet ret = local; local.intersect(server); ret.subtract(local); return ret; }; //本地数据的字段 都需要 在服务端数据库里 auto local_header_info_keys = QSet(local_header_info.keys().begin(),local_header_info.keys().end()); auto server_header_info_keys = QSet(server_header_info.keys().begin(),server_header_info.keys().end()); QSet header_ready = exceptFunc(local_header_info_keys, server_header_info_keys); if (header_ready.isEmpty()) return true; //将本地数据库不在服务器数据库的字段 插入 服务器数据库 for (auto header : header_ready) { QString sql_type = local_header_info.value(header); QString default_value = default_map.value(sql_type); QString alter_sql = QString("ALTER TABLE %1 ADD COLUMN %2 %3 DEFAULT '%4';") .arg(table_name) .arg(header) .arg(sql_type) .arg(default_value); if (!query_server.exec(alter_sql)) { qCInfo(ServiceLogger) << query_server.lastError(); return false; } } return true; } DUnionIDDav::DUIDSynDataPrivate::DUIDSynDataPrivate() { mThread = new QThread(this); DUIDSynDataWorker *mWorker = new DUIDSynDataWorker; qRegisterMetaType("SyncStack"); mWorker->moveToThread(mThread); connect(mThread, &QThread::finished, mWorker, &DUIDSynDataWorker::deleteLater); connect(mThread, &QThread::finished, mThread, &QThread::deleteLater); connect(mWorker, &DUIDSynDataWorker::signalUpdate, this, &DUIDSynDataPrivate::signalUpdate); connect(mWorker, &DUIDSynDataWorker::signalSyncState, this, &DUIDSynDataPrivate::signalSyncState); connect(this, &DUIDSynDataPrivate::signalSyncData, mWorker, &DUIDSynDataWorker::syncData); mThread->start(); } DUnionIDDav::DUIDSynDataPrivate::~DUIDSynDataPrivate() { if (mThread->isRunning()) { mThread->quit(); mThread->wait(); } } void DUnionIDDav::DUIDSynDataPrivate::syncData(QString accountId, QString accountName, int accountState, DDataSyncBase::SyncTypes syncType) { emit signalSyncData(SyncStack{accountId, accountName, accountState, syncType}); } dde-calendar-5.14.13/calendar-service/src/unionIDDav/dunioniddav.h000066400000000000000000000011261473346337000246550ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DUNIONIDDAV_H #define DUNIONIDDAV_H #include "ddatasyncbase.h" /** * @brief The DUnionIDDav class * Union ID 云同步 */ class DUnionIDDav : public DDataSyncBase { Q_OBJECT public: DUnionIDDav(); ~DUnionIDDav() override; void syncData(QString accountId, QString accountName, int accountState, DDataSyncBase::SyncTypes syncType) override; private: class DUIDSynDataPrivate; DUIDSynDataPrivate *const d; }; #endif // DUNIONIDDAV_H dde-calendar-5.14.13/calendar-service/src/unionIDDav/dunioniddav_p.h000066400000000000000000000141051473346337000251750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DUNIONIDDAV_P_H #define DUNIONIDDAV_P_H #include "ddatabase.h" #include "ddatasyncbase.h" #include "units.h" #include #include #include #include /** * @brief The SyncStack struct 记录单次上传的信息和相关操作 */ struct SyncStack { SyncStack() {} SyncStack(QString _accountId, QString _accountName, int _accountState, DDataSyncBase::SyncTypes _syncType) : accountId(_accountId) , dbname_account(_accountName) , dbname_manager(DDataBase::NameAccountManager) , dbname_account_thread(DDataBase::createUuid()) , dbname_manager_thread(DDataBase::createUuid()) , dbname_sync_thread(DDataBase::createUuid()) , accountState(_accountState) , db_account(QSqlDatabase::database(dbname_account)) , db_manager(QSqlDatabase::database(dbname_manager)) , syncType(_syncType) {} //data QString accountId; //账户ID QString dbname_account; //主线程的账户数据库别名 QString dbname_manager; //主线程的管理数据库别名 QString dbname_account_thread; //子线程的账户数据库别名 QString dbname_manager_thread; //子线程的管理数据库别名 QString dbname_sync_thread; //子线程的同步数据库别名 int accountState = 0; //账户状态 QSqlDatabase db_account; //主线程的账户数据库实例 QSqlDatabase db_manager; //主线程的管理数据库实例 DDataSyncBase::SyncTypes syncType;//记录类型:上传或下载 //sync QString dbpath_sync; //func //下载云端数据 int downloadUidData(bool &isInitSyncData, SyncFileManage &fileManger); //将本地修改数据移动到下载的临时文件中 int loadToTmp(); //将临时文件中的数据移动到本地数据库中 int tmpToLoad(DDataSyncBase::UpdateTypes &updateType); //上传修改过的临时数据 int uploadTmpData(SyncFileManage &fileManger); void deleteTmpData(SyncFileManage &fileManger); //sql prepare QString prepareQuest(int count); //sql bindvalue void prepareBinds(QSqlQuery &query, QSqlRecord source); //sql sync db1.table to db2.table bool syncIntoTable(const QString &table_name, const QString &connection_name_source, const QString &connection_name_target); //sql select first record QSqlRecord selectRecord(const QString &table_name, const QString &key_name, const QVariant &key_value, const QString &connection_name); //sql replace db1.record to db2.table bool replaceIntoRecord(const QString &table_name, QSqlRecord record, const QString &connection_name); //sql select first value QVariant selectValue(const QString &value_name, const QString &table_name, const QString &key_name, const QVariant &key_value, const QString &connection_name); //sql select first value QVariant selectValue(const QString &sql, const QString &connection_name); //sql delete table bool deleteTableLine(const QString &table_name, const QString &key_name, const QVariant &key_value, const QString &connection_name); //sql delete table bool deleteTable(const QString &table_name, const QString &connection_name); //sql add column to server bool repairTable(const QString &table_name, const QString &connection_name_local, const QString &connection_name_server); bool needUpdateSettingValue(); }; /** * @brief The ThrowAccount struct 用于初始化日程类型和类型颜色 */ struct SyncAccount { explicit SyncAccount(const QString &connectionName, QString accountID) : _accountID(accountID) , _connectionName(connectionName) { } bool defaultScheduleType(); bool defaultTypeColor(); bool insertToScheduleType(const DScheduleType::Ptr &scheduleType); bool insertToTypeColor(const DTypeColor &typeColor); QString _accountID; QString _connectionName; }; /** * @brief The SqlTransactionLocker class 用于数据库事务 */ class SqlTransactionLocker { public: explicit SqlTransactionLocker(const QStringList &connectionNames) : _connectionNames(connectionNames) { for (auto name : _connectionNames) { SqliteQuery(name).transaction(); } } ~SqlTransactionLocker() { if (hasCommited) return; for (auto name : _connectionNames) SqliteQuery(name).rollback(); } void commit() { hasCommited = true; for (auto name : _connectionNames) SqliteQuery(name).commit(); } void rollback() { hasCommited = true; for (auto name : _connectionNames) SqliteQuery(name).rollback(); } private: QStringList _connectionNames; bool hasCommited = false; }; /** * @brief The DUIDSynDataWorker class 用于多线程上传下载 */ class DUIDSynDataWorker : public QObject { Q_OBJECT public: DUIDSynDataWorker() : QObject(nullptr) { } ~DUIDSynDataWorker() { } public slots: void syncData(SyncStack syncType); public slots: void slotSync(); signals: void signalUpdate(const DDataSyncBase::UpdateTypes updateType); void signalSyncState(const int syncState); private: void startUpdate(); private: //sync QString dbpath_sync; QTimer *mSyncTimer = nullptr; //thread SyncStack mSync; QVector mSyncList; }; /** * @brief The DUnionIDDav::DUIDSynDataPrivate class DUIDSynData的私有类 */ class DUnionIDDav::DUIDSynDataPrivate : public QObject { Q_OBJECT public: DUIDSynDataPrivate(); ~DUIDSynDataPrivate(); void syncData(QString accountId, QString accountName, int accountState, DDataSyncBase::SyncTypes syncType); signals: void signalUpdate(const DDataSyncBase::UpdateTypes updateType); void signalSyncState(const int syncState); void signalSyncData(const SyncStack syncType); private: QThread *mThread; }; #endif // DUNIONIDDAV_P_H dde-calendar-5.14.13/debian/000077500000000000000000000000001473346337000154245ustar00rootroot00000000000000dde-calendar-5.14.13/debian/changelog000066400000000000000000000133361473346337000173040ustar00rootroot00000000000000dde-calendar (5.14.13) unstable; urgency=medium * Update version to 5.14.13 -- renbin Fri, 27 Dec 2024 16:24:07 +0800 dde-calendar (5.14.12) unstable; urgency=medium * Update version to 5.14.12 -- xiepengfei Sat, 14 Dec 2024 15:03:16 +0800 dde-calendar (5.14.11) unstable; urgency=medium * Update version to 5.14.11 -- renbin Sat, 30 Nov 2024 18:21:11 +0800 dde-calendar (5.14.10) unstable; urgency=medium * chore: Update linglong build script. -- xiepengfei Sat, 30 Nov 2024 14:08:37 +0800 dde-calendar (5.14.9) UNRELEASED; urgency=medium [ transifex-integration[bot] ] * i18n: Translate dde-calendar_en_US.ts in ro * i18n: Translate dde-calendar-service_en_US.ts in ro * i18n: Translate dde-calendar_en_US.ts in sq * i18n: Translate dde-calendar-service_en_US.ts in sq * i18n: Translate dde-calendar-service_en_US.ts in zh_CN * i18n: Removing dde-calendar-service_en_US.ts in zh_CN [ myml ] * feat: cweekwidget uses locale to replace tr -- myml Sun, 29 Sep 2024 15:42:47 +0800 dde-calendar (5.14.8) unstable; urgency=medium * chore: Update linglong build script. -- wangrong Sat, 19 Oct 2024 15:18:45 +0800 dde-calendar (5.14.7) unstable; urgency=medium * chore: linglong package slimming. -- wangrong Fri, 18 Oct 2024 10:33:09 +0800 dde-calendar (5.14.6) unstable; urgency=medium * New version 5.14.6 * Adapt linglong. -- re2zero Fri, 13 Sep 2024 14:06:16 +0800 dde-calendar (5.14.5) unstable; urgency=medium * fix: sidebar calendar widget(Issue: https://github.com/linuxdeepin/developer-center/issues/10343) * feat: Execute reload after changing systemd(Issue: https://github.com/linuxdeepin/developer-center/issues/10093) * fix: remind widget display position(Issue: https://github.com/linuxdeepin/developer-center/issues/10341) -- myml Wed, 14 Aug 2024 16:37:30 +0800 dde-calendar (5.14.4) unstable; urgency=medium * feat: Unable to set timer reminder in Linglong environment -- myml Thu, 08 Aug 2024 11:29:59 +0800 dde-calendar (5.14.3) unstable; urgency=medium * fix: dialog window display position error(Issue: https://github.com/linuxdeepin/developer-center/issues/10141) -- myml Mon, 05 Aug 2024 14:16:16 +0800 dde-calendar (5.14.2) unstable; urgency=medium * chore: dbus activation adapt to AM(Issue: https://github.com/linuxdeepin/developer-center/issues/9742) * fix: cloud sync being unavailable at startup -- myml Fri, 26 Jul 2024 13:14:34 +0800 dde-calendar (5.14.1) unstable; urgency=medium * fix: cloud sync dbus error -- myml Mon, 22 Jul 2024 10:41:23 +0800 dde-calendar (5.14.0) unstable; urgency=medium * fix: build error in uos system * fix: problem of not displaying the floating frame * chore(CI): add debian check workflow Thanks to kuchune * feat: Delayed start of service -- myml Fri, 19 Jul 2024 14:21:37 +0800 dde-calendar (5.13.1) unstable; urgency=medium * fix: install deb package error(Issue: https://github.com/linuxdeepin/developer-center/issues/7763) -- myml Tue, 09 Apr 2024 11:41:53 +0800 dde-calendar (5.13.0) unstable; urgency=medium * feat: add metainfo of dde * Reapply "feat: get general settings from Control Center" * Reapply "chore: update translations" * feat: add docs files * feat: follow system config * chore: update translations * chore: update reuse * chore: typo * feat: auto update holiday data * feat: get system setting from dbus * feat: enable cloud sync -- myml Thu, 07 Mar 2024 13:54:33 +0800 dde-calendar (5.12.1) unstable; urgency=medium * fix: Unable sync schedule based on cloud sync * feat: keep the json struct of getFestivalMonth -- myml Fri, 12 Jan 2024 17:47:37 +0800 dde-calendar (5.12.0) unstable; urgency=medium * feat: add deepin-log config * feat: Supplement the holidays for the year 2024 * feat: Optimize holiday query, change the return type to QJsonArray -- myml Thu, 28 Dec 2023 10:23:56 +0800 dde-calendar (5.11.1) unstable; urgency=medium * fix: remove unused dframeworkdbus Thanks to Felix Yan * chore: correct typos in en_US docs Thanks to Felix Yan * feat: hide account login in community version(Issue: https://github.com/linuxdeepin/developer-center/issues/5912) -- myml Tue, 12 Dec 2023 13:25:42 +0800 dde-calendar (5.11.0) unstable; urgency=medium [ Deepin Packages Builder ] * feat: support for import ics file(Issue: https://github.com/linuxdeepin/developer-center/issues/5018) * feat: support for export ics file(Issue: https://github.com/linuxdeepin/developer-center/issues/5018) * feat: simplify the import process -- myml Thu, 27 Jul 2023 14:17:10 +0800 dde-calendar (5.10.1) unstable; urgency=medium * fix: remove illegal gcc option Thanks to rewine * chore(CI): Update obs tag build workflow * feat: avoid use hardcode path Thanks to rewine * fix: use imcomplete class QDesktopWidget * feat: Remove caller checks for Huangli dbus interface -- myml Mon, 24 Jul 2023 14:30:45 +0800 dde-calendar (5.10.0) unstable; urgency=medium * chore: deepin system does not support calendar sync * chore: correct a typo in CMakeLists.txt -- myml Thu, 6 Apr 2023 11:43:00 +0800 dde-calendar (5.9.1) unstable; urgency=medium * Init. -- Clay Stan Thu, 14 Jul 2022 14:13:00 +0800 dde-calendar-5.14.13/debian/control000066400000000000000000000016131473346337000170300ustar00rootroot00000000000000Source: dde-calendar Section: utils Priority: optional Maintainer: Deepin Packages Builder Build-Depends: debhelper-compat (=11), cmake, deepin-gettext-tools, libdtkgui-dev (>= 5.5.17~), libdtkwidget-dev (>= 5.5.17~), libgtest-dev, libqt5svg5-dev, pkg-config, qtbase5-dev, qttools5-dev, qttools5-dev-tools, deepin-gettext-tools, libgtest-dev, qttools5-dev, libical-dev, libgcrypt20-dev Standards-Version: 4.3.0 Homepage: http://www.deepin.org Vcs-Git: https://github.com/linuxdeepin/dde-calendar Rules-Requires-Root: no Package: dde-calendar Architecture: linux-any Depends: dde-qt5integration, dde-api, ${misc:Depends}, ${shlibs:Depends}, Description: Calendar is a smart daily planner to schedule all things in life. Calendar is a small management tool for personal life that combines time and events and integrates the function of memorizing and scheduling. dde-calendar-5.14.13/debian/copyright000066400000000000000000000026741473346337000173700ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: dde-calendar Source: https://github.com/linuxdeepin/dde-calendar Upstream-Contact: https://github.com/linuxdeepin/developer-center/issues Files: * Copyright: 2015-2018 Deepin Technology Co., Ltd. 2019-2020 Uniontech Software Technology Co.,Ltd. License: GPL-3+ Files: debian/* Copyright: 2016-2022 Deepin Technology Co., Ltd. 2017 Yangfl 2019 Boyuan Yang 2020 Arun Kumar Pariyar 2022 Clay Stan License: GPL-3+ License: GPL-3+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". dde-calendar-5.14.13/debian/dde-calendar.1000066400000000000000000000024131473346337000200110ustar00rootroot00000000000000.\" This file is processed to generate manpages in the .\" build diretory. .TH "dde-calendar" "1" "2021-3-11" "Deepin" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME dde-calendar \- a smart daily planner to schedule all things in life .SH SYNOPSIS dde-calendar [OPTIONS...] .SH DESCRIPTION Calendar is a smart daily planner to schedule all things in life. .PP Calendar is a small management tool for personal life that combines time and events and integrates the function of memorizing and scheduling. .SH OPTIONS .PP -h --help Prints the command line options. .PP -v --version Output version information and exit. .PP .SH SEE ALSO https://github.com/linuxdeepin/dde-calendar .SH AUTHOR .PP .B dde-calendar is written by Deepin Technology Co., Ltd. .PP This manual page was written by .MT chenhaifeng@\:uniontech.com Chen Haifeng .ME for the Debian Project (but may be used by others) dde-calendar-5.14.13/debian/dde-calendar.postinst000066400000000000000000000004521473346337000215350ustar00rootroot00000000000000#!/bin/bash #日历后端服务进程名称 calendarServiceName="dde-calendar-service" #获取日历后端进程id serviceIDsARR=($(pidof ${calendarServiceName})) #判断后端是否在运行。如果在运行则kill掉 if [ ${#serviceIDsARR[@]} -gt 0 ] then killall ${calendarServiceName} fi dde-calendar-5.14.13/debian/docs000066400000000000000000000000121473346337000162700ustar00rootroot00000000000000README.md dde-calendar-5.14.13/debian/manpages000066400000000000000000000000261473346337000171400ustar00rootroot00000000000000debian/dde-calendar.1 dde-calendar-5.14.13/debian/rules000077500000000000000000000010111473346337000164750ustar00rootroot00000000000000#!/usr/bin/make -f export DH_VERBOSE = 1 include /usr/share/dpkg/default.mk export DEB_BUILD_MAINT_OPTIONS = hardening=+all export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic export QT_SELECT := 5 %: dh $@ override_dh_auto_configure: dh_auto_configure -- \ -DCMAKE_BUILD_TYPE=Release \ -DSERVICE_INSTALL_DIR="/usr/lib/deepin-daemon" -DCMAKE_SAFETYTEST_ARG="CMAKE_SAFETYTEST_ARG_OFF" \ -DAPP_VERSION=$(DEB_VERSION_UPSTREAM) -DVERSION=$(DEB_VERSION_UPSTREAM) LIB_INSTALL_DIR=/usr/lib/$(DEB_HOST_MULTIARCH) dde-calendar-5.14.13/debian/source/000077500000000000000000000000001473346337000167245ustar00rootroot00000000000000dde-calendar-5.14.13/debian/source/format000066400000000000000000000000151473346337000201330ustar00rootroot000000000000003.0 (native) dde-calendar-5.14.13/debian/upstream/000077500000000000000000000000001473346337000172645ustar00rootroot00000000000000dde-calendar-5.14.13/debian/upstream/metadata000066400000000000000000000004131473346337000207650ustar00rootroot00000000000000--- Bug-Database: https://github.com/linuxdeepin/developer-center/issues Bug-Submit: https://github.com/linuxdeepin/developer-center/issues/new Repository: https://github.com/linuxdeepin/dde-calendar.git Repository-Browse: https://github.com/linuxdeepin/dde-calendar dde-calendar-5.14.13/debian/watch000066400000000000000000000002771473346337000164630ustar00rootroot00000000000000version=4 opts="filenamemangle=s%(?:.*?)?v?(\d[\d.]*)\.tar\.gz%dde-calendar-$1.tar.gz%" \ https://github.com/linuxdeepin/dde-calendar/tags \ (?:.*?/)?(\d[\d.]*)\.tar\.gz debian uupdate dde-calendar-5.14.13/docs/000077500000000000000000000000001473346337000151325ustar00rootroot00000000000000dde-calendar-5.14.13/docs/interface.md000066400000000000000000000073461473346337000174260ustar00rootroot00000000000000## 获取农历信息 | DBus | `com.deepin.dataserver.Calendar` | | ---- | ---------------------------------------------------------------------------- | | 路径 | `/com/deepin/dataserver/Calendar/HuangLi` | | 接口 | `com.deepin.dataserver.Calendar.HuangLi` | | 方法 | `getHuangLiMonth (UInt32 year, UInt32 month, Boolean fill) ↦ (String arg_0)` | 参数说明: - year 公历年 - month 公历月 - fill 是否从周日开始补齐上下月信息。例如 2024 年 3 月 1 号是星期五(农历二十一),如果 fill 为 false,返回的数据从星期五(农历二十一)开始,如果 fill 为 true,返回的数据从星期日(农历十六)开始。 接口返回的是一个 json 对象数组序列化后的字符串,部分字段已弃用,主要关注 GanZhiDay、GanZhiMonth、GanZhiYear、LunarDayName、LunarMonthName、Zodiac、Term | 字段 | 解释 | | -------------- | ---------------------------------------------------------------------- | | Avoid | 用于指定应该避免的事项或活动。 | | GanZhiDay | 表示农历日期的干支表示法,"己未"指的是具体的天干和地支的组合。 | | GanZhiMonth | 表示农历月份的干支表示法,"丙寅"指的是具体的天干和地支的组合。 | | GanZhiYear | 表示农历年份的干支表示法,"甲辰"指的是具体的天干和地支的组合。 | | LunarDayName | 表示农历日期的名称,"十六"表示这一天是农历月份中的第十六天。 | | LunarFestival | 用于指定农历的传统节日。 | | LunarLeapMonth | 表示农历是否有闰月,0 表示没有闰月,正常的农历月份。 | | LunarMonthName | 表示农历月份的名称,"正月"表示这一天所在的月份是农历的正月。 | | SolarFestival | 用于指定阳历的传统节日。 | | Suit | 用于指定适合进行的活动或事项。 | | Term | 表示二十四节气中的具体术语。 | | Worktime | 表示工作时间,但在给定的 JSON 中为 0,可能表示没有特定的工作时间要求。 | | Zodiac | 表示生肖,"龙"代表相应的生肖。 | ## 获取节假日信息 | DBus | `com.deepin.dataserver.Calendar` | | ---- | --------------------------------------------------------------- | | 路径 | `/com/deepin/dataserver/Calendar/HuangLi` | | 接口 | `com.deepin.dataserver.Calendar.HuangLi` | | 方法 | `getFestivalMonth (UInt32 year, UInt32 month) ↦ (String arg_0)` | 参数说明: - year 公历年 - month 公历月 接口返回的是一个 json 对象数组序列化后的字符串,部分字段已弃用,主要关注 list 字段 date:公历日期,例子:2024-05-01 name:节假日名称,例子:劳动节 status:调休标识,1 为休息,2 为调休 ## 获取控制中心时间格式 | DTK Config | `Dtk::Core::DConfig` | | ---------- | -------------------------- | | 名字 | `org.deepin.region-format` | | 配置项 | `shortTimeFormat` | ## 获取控制中心每周首日 | DTK Config | `Dtk::Core::DConfig` | | ---------- | -------------------------- | | 名字 | `org.deepin.region-format` | | 配置项 | `firstDayOfWeek` | dde-calendar-5.14.13/docs/notes.md000066400000000000000000000012251473346337000166040ustar00rootroot00000000000000# 日历代码梳理笔记 ## 日历的通用配置 在 service 端由 daccountmanagerservice 提供 dbus 接口,daccountmanagemodule 提供具体功能, daccountmanagerdatabase 操作数据库。 dbusservice -> calendarDataManager -> dbmanager 现在要实现通用配置中的“每星期开始”和“时间格式”跟随控制中心,最初的想法是给通用配置添加新的值,比如-1来代表需要跟随控制中心,但这样可能会导致其他使用这两个配置项的应用得到意外的值,所以决定给通用配置新增两个配置项,用来标识“每星期开始”和“时间格式”是否跟随控制中心。dde-calendar-5.14.13/install_dep000066400000000000000000000137761473346337000164410ustar00rootroot00000000000000#!/bin/bash set -e # 文件名 deb-source.bash # 包含要解压的deb目录 deb_dir=$(realpath "$1") # 将deb解压到输出目录 target=$(realpath "$2") # 默认会跳过base已安装的包,可以强制解压已安装的包 include="$3" # 临时目录,将内容处理后再移动到 target out_dir="$(mktemp -d)" cd "$out_dir" # 临时文件,用于记录deb文件列表 deb_list_file="$out_dir/deb.list" # 临时文件,用于记录强制安装的包名 include_list_file="$out_dir/include.packages.list" # 临时文件,用于记录跳过安装的包名 exclude_list_file="$out_dir/exclude.packages.list" # 包数据存放的临时目录 data_list_dir="$out_dir/data" # 生成文件列表 find "$deb_dir" -type f -name "*.deb" > "$deb_list_file" echo "$include" | tr ',' '\n' > "$include_list_file" # 用于记录安装的所有文件来自哪个包 mkdir /tmp/deb-source-file || true # 如果base和runtime已安装则跳过,旧版本base没有/packages.list文件就使用/var/lib/dpkg/status grep 'Package: ' /var/lib/dpkg/status > "$exclude_list_file" || true cat /packages.list /runtime/packages.list "$PREFIX/packages.list" >> "$exclude_list_file" || true # 在旧的base里面这些包需要强制安装,因为base中没有他们的dev包,如果dev包被安装到/opt目录,而lib包在/usr 会有问题 echo "libarchive13,libasan5,libasm1,libbabeltrace1,libcairo-script-interpreter2,libcc1-0,libcurl4,libdpkg-perl,libdw1,libevent-2.1-6,libgdbm-compat4,libgdbm6,libgirepository-1.0-1,libgles1,libgles2,libglib2.0-data,libgmpxx4ldbl,libgnutls-dane0,libgnutls-openssl27,libgnutlsxx28,libharfbuzz-gobject0,libharfbuzz-icu0,libipt2,libisl19,libitm1,libjsoncpp1,libldap-2.4-2,libldap-common,liblsan0,liblzo2-2,libmpc3,libmpdec2,libmpfr6,libmpx2,libncurses6,libnghttp2-14,libpcrecpp0v5,libperl5.28,libpopt0,libprocps7,libpython3-stdlib,libpython3.7,libpython3.7-minimal,libpython3.7-stdlib,libquadmath0,libreadline7,librhash0,librtmp1,libsasl2-2,libsasl2-modules-db,libssh2-1,libtiffxx5,libtsan0,libubsan1,libunbound8,libuv1" | tr ',' '\n' >> "$include_list_file" # 遍历文件列表 while IFS= read -r file do # 输出deb名,但不换行,便于在包名后面加skip echo -n "$file" # 提取control文件 control_file=$(ar -t "$file" | grep control.tar) ar -x "$file" "$control_file" # 获取包名 pkg=$(tar -xf "$control_file" ./control -O | grep '^Package:' | awk '{print $2}') rm "$control_file" # 如果在base和runtime中已安装,并且不包含在include列表则跳过安装 if grep -q "^Package: $pkg$" "$exclude_list_file" && ! grep -q "^$pkg$" "$include_list_file"; then echo " skip" echo "$file" >> /tmp/deb-source-file/skip.list else # 否则安装到$PREFIX目录 # 换行 echo "" # 查找data.tar文件,文件会因为压缩格式不同,有不同的后缀,例如data.tar.xz、data.tar.gz data_file=$(ar -t "$file" | grep data.tar) # 提取data.tar文件 ar -x "$file" "$data_file" # 解压data.tar文件到输出目录 mkdir "$data_list_dir" tar -xvf "$data_file" -C "$data_list_dir" >> "/tmp/deb-source-file/$(basename "$file").list" rm "$data_file" # 清理不需要复制的目录 rm -r "${data_list_dir:?}/usr/share/applications"* 2>/dev/null || true # 修改pc文件的prefix sed -i "s#/usr#$PREFIX#g" "$data_list_dir"/usr/lib/"$TRIPLET"/pkgconfig/*.pc 2>/dev/null|| true sed -i "s#/usr#$PREFIX#g" "$data_list_dir"/usr/share/pkgconfig/*.pc 2>/dev/null || true # 修改指向/lib的绝对路径的软链接 find "$data_list_dir" -type l | while IFS= read -r file; do linkTarget=$(readlink "$file") # 如果指向的路径以/lib开头,并且文件不存在,则添加 /runtime 前缀 # 部分 dev 包会创建 so 文件的绝对链接指向 /lib 目录下 if echo "$linkTarget" | grep -q ^/lib && ! [ -f "$linkTarget" ]; then ln -sf "$target$linkTarget" "$file" echo " FIX LINK" "$linkTarget" "=>" "$target$linkTarget" fi done # 修复动态库的RUNPATH find "$data_list_dir" -type f -exec file {} \; | grep 'shared object' | awk -F: '{print $1}' | while IFS= read -r file; do runpath=$(readelf -d "$file" | grep RUNPATH | awk '{print $NF}') # 如果RUNPATH使用绝对路径,则添加/runtime前缀 if echo "$runpath" | grep -q '^\[/'; then runpath=${runpath#[} runpath=${runpath%]} newRunpath=${runpath//usr\/lib/runtime\/lib} newRunpath=${newRunpath//usr/runtime} patchelf --set-rpath "$newRunpath" "$file" echo " FIX RUNPATH" "$file" "$runpath" "=>" "$newRunpath" fi done # 复制/lib,/bin,/usr目录 cp -rP "$data_list_dir/lib" "$target" 2>/dev/null|| true cp -rP "$data_list_dir/bin" "$target" 2>/dev/null|| true cp -rP "$data_list_dir"/usr/* "$target" || true rm -r "$data_list_dir" fi; done < "$deb_list_file" # 修复相对路径的软链接(dev包内的软连接尝试修复指向base) find "$target" -type l | while IFS= read -r file; do # 获取链接的绝对路径 linkTarget=$(readlink -m "$file") # 如果链接指向的文件不存在 if [ ! -e "$linkTarget" ]; then # 去掉前缀查看/lib下是否存在 linkTarget="${linkTarget#$target}" if [ -e "$linkTarget" ]; then ln -sf "$linkTarget" "$file" echo " FIX LINK" "$file" "=>" "$target$linkTarget" fi # 添加usr前缀查看/usr/lib下是否存在 linkTarget="/usr$target" if [ -e "$linkTarget" ]; then ln -sf "$target$linkTarget" "$file" echo " FIX LINK" "$file" "=>" "$target$linkTarget" fi fi done # 更新ld.so.cache if [ -n "$LINGLONG_LD_SO_CACHE" ]; then ldconfig -C "$LINGLONG_LD_SO_CACHE" fi # 清理临时目录 rm -r "$out_dir"dde-calendar-5.14.13/linglong.yaml000066400000000000000000000137201473346337000167020ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2023-2024 UnionTech Software Technology Co., Ltd. # # SPDX-License-Identifier: GPL-3.0-or-later version: "1" package: id: org.dde.calendar name: dde-calendar version: 5.14.13.1 kind: app description: | calendar for deepin os. base: org.deepin.base/23.1.0 runtime: org.deepin.runtime.dtk/23.2.0 command: - dde-calendar build: | cat /var/lib/dpkg/status|grep "^Package: " > ${PREFIX}/packages.list bash ./install_dep linglong/sources "${PREFIX}" # 获取版本号 VERSION=$(head -1 debian/changelog | awk -F'[()]' '{print $2}') cmake -B build ${conf_args} \ -DCMAKE_SAFETYTEST_ARG="CMAKE_SAFETYTEST_ARG_OFF" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="${PREFIX}" \ -DVERSION=${VERSION} \ -DEXEC_DDE_CALENDAR="dde-calendar" \ -DEXEC_DDE_CALENDAR_SERVICE="/opt/apps/org.dde.calendar/files/libexec/deepin-daemon/dde-calendar-service" cmake --build build -j`nproc` cmake --build build --target install >app.install 2>&1 sources: # - kind: git # url: https://github.com/linuxdeepin/dde-calendar # commit: 2dd86328e0257f9833d405b49b8729302519c1c1 # linglong:gen_deb_source sources amd64 https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2 beige main community # linglong:gen_deb_source install deepin-gettext-tools, gir1.2-ical-3.0, install-info, libconfig-tiny-perl, libdb5.3-dev, libdb-dev, libfile-basedir-perl, libfile-desktopentry-perl, libfile-mimeinfo-perl, libgcrypt20-dev, libgpg-error-dev, libical-dev, libipc-system-simple-perl, libmng1, libxml-libxml-perl, libxml-namespacesupport-perl, libxml-sax-base-perl, libxml-sax-perl, lshw - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/d/deepin-gettext-tools/deepin-gettext-tools_1.0.6-1_all.deb digest: 732eb3781699b6fe8134a06fdb4e779279014751075ea67eb72b03015f9eae4e - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libi/libical3/gir1.2-ical-3.0_3.0.11-deepin+rb1_amd64.deb digest: 1c7193e3d447d75e0353affe5793352b6989aadddef46912fdb0ca8bf2e43c07 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/t/texinfo/install-info_7.1-2_amd64.deb digest: 3a88543cddbca0ece1403a37f3a210e903c9c3b2317623d40d15827e5acc8565 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libc/libconfig-tiny-perl/libconfig-tiny-perl_2.27-1_all.deb digest: 30d01706b0063d0b4aaef7cffd79a6b70d8365ad887ada4c8cc1f8a5df8eb84a - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/d/db5.3/libdb5.3-dev_5.3.28+dfsg1-0.8_amd64.deb digest: 9b66e10eadc6c0e874bc7344c241c2c2e0a7b048c0cf3c14812cfe3c9d768088 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/d/db-defaults/libdb-dev_5.3.3_amd64.deb digest: dc1373c440558cfa9fabb20063fe9ec405248757b088dbfc541fac64c3f8a636 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libf/libfile-basedir-perl/libfile-basedir-perl_0.09-1_all.deb digest: 79f5ef747c15be92e24a1adeea98e3d4c01b1b90b730a184a8ca4959a1aa4684 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libf/libfile-desktopentry-perl/libfile-desktopentry-perl_0.22-2_all.deb digest: 19ed7f791a824bd6525c02cc6011bbd614880f3408e78eff5e16e1e9990334a8 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libf/libfile-mimeinfo-perl/libfile-mimeinfo-perl_0.30-1_all.deb digest: 4d9cecdc4b82cee837e74512293b8c84a554d3cdf6c760627cd9c42d6c752b92 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.10.3-2_amd64.deb digest: 97b7627a6850415f5c8c72bbf83dcce65cacf88c800676a02456f4a902bc8ea4 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libg/libgpg-error/libgpg-error-dev_1.47-3_amd64.deb digest: 1ca737a33cb23aee5903ddafe201198357593bd015f5097c68fb99efced85458 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libi/libical3/libical-dev_3.0.11-deepin+rb1_amd64.deb digest: 446b447b4d58419f38d76c41be214c012336ad724e24d1fbb6efb4d589ac954e - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libi/libipc-system-simple-perl/libipc-system-simple-perl_1.30-1_all.deb digest: a528ecfa70fd8f3b4cc024947ff264e3952b0245be9a7147e556d8e1a037007c - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libm/libmng/libmng1_1.0.10+dfsg-3.1-deepin1_amd64.deb digest: 256423c8e3c4afcbdf72973db84b1e919187b65955c685ee16f9a5635d436943 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxml-libxml-perl/libxml-libxml-perl_2.0207+dfsg+really+2.0134-1_amd64.deb digest: 12c7f4b47735232c9d084ca94d0da8fe6b7e564c1cdd7e348943b286f78f3ad4 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxml-namespacesupport-perl/libxml-namespacesupport-perl_1.12-1.1_all.deb digest: 9588edfba6a50bf6702eac9ec3aca6f19a8b14a4260dc86615a93181040bd040 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxml-sax-base-perl/libxml-sax-base-perl_1.09-1.1_all.deb digest: 8271fec055eb0dabdfef211ce005a2b0ac78feaa5c31ebf35c7c8fe6bbf1482a - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxml-sax-perl/libxml-sax-perl_1.02+dfsg-3_all.deb digest: 4751449b0ce407282bf5ea9a721fa3ae1cd4d488ea3f21c6a40e6e4889d9fd6d - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/l/lshw/lshw_02.19.git.2021.06.19.996aaad9c7-2_amd64.deb digest: 3b773a5d680074868c46ef1a8712b98b8614a2a1749430946061db3a8a21c073 dde-calendar-5.14.13/loong64/000077500000000000000000000000001473346337000154725ustar00rootroot00000000000000dde-calendar-5.14.13/loong64/linglong.yaml000077500000000000000000000575421473346337000202070ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2023-2024 UnionTech Software Technology Co., Ltd. # # SPDX-License-Identifier: GPL-3.0-or-later version: "1" package: id: org.dde.calendar name: dde-calendar version: 5.14.13.1 kind: app description: | calendar for deepin os. base: org.deepin.base/23.1.0/loong64 runtime: org.deepin.runtime.dtk/23.2.0/loong64 command: - dde-calendar build: | cat /var/lib/dpkg/status|grep "^Package: " > ${PREFIX}/packages.list bash ./install_dep linglong/sources "${PREFIX}" # 获取版本号 VERSION=$(head -1 debian/changelog | awk -F'[()]' '{print $2}') cmake -B build ${conf_args} \ -DCMAKE_SAFETYTEST_ARG="CMAKE_SAFETYTEST_ARG_OFF" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="${PREFIX}" \ -DVERSION=${VERSION} \ -DEXEC_DDE_CALENDAR="dde-calendar" \ -DEXEC_DDE_CALENDAR_SERVICE="/opt/apps/org.dde.calendar/files/libexec/deepin-daemon/dde-calendar-service" cmake --build build -j`nproc` cmake --build build --target install >app.install 2>&1 cp loong64/org.dde.calendar.install . sources: # - kind: git # url: https://github.com/linuxdeepin/dde-calendar # commit: 2dd86328e0257f9833d405b49b8729302519c1c1 # linglong:gen_deb_source sources loong64 https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2 beige main community # linglong:gen_deb_source install deepin-gettext-tools, gir1.2-ical-3.0, install-info, libconfig-tiny-perl, libdb5.3-dev, libdb-dev, libfile-basedir-perl, libfile-desktopentry-perl, libfile-mimeinfo-perl, libgcrypt20-dev, libgpg-error-dev, libical-dev, libipc-system-simple-perl, libmng1, libxml-libxml-perl, libxml-namespacesupport-perl, libxml-sax-base-perl, libxml-sax-perl, lshw - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/c/coreutils/coreutils_9.4-2_loong64.deb digest: 7d38eb3f86f982f681a61312c4cb4892cae4097c5cd50e54004928888b61708c - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/d/debconf/debconf_1.5.79-deepin_all.deb digest: ded6aaa7927ae27337ceb23d49391b4c7ec460a00ba692020e8f4e28388f345f - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/d/deepin-gettext-tools/deepin-gettext-tools_1.0.6-1_all.deb digest: 732eb3781699b6fe8134a06fdb4e779279014751075ea67eb72b03015f9eae4e - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/d/dpkg/dpkg_1.22.6deepin3_loong64.deb digest: eea7a8587865789ec9f40ae9c3e5310f82a5c8c295b27d65e91627c86c107951 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/g/gcc-13/gcc-13-base_13.2.0-3deepin2_loong64.deb digest: d7d905efe22363e2bfc62368280e79f5c7130a72bab7da57afff396c2c039a41 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/g/gettext/gettext-base_0.21-4_loong64.deb digest: 9b163fa69f15f7308c067de04e3e3d2d4208e1d0f2489033543bdd29cd0545d9 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/g/gettext/gettext_0.21-4_loong64.deb digest: b399bc489086eafd0e24c4f491ef869d561a3ba26de0d39a96a08dd21b16a577 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/g/glib2.0/gir1.2-glib-2.0_2.80.1-1deepin1_loong64.deb digest: 9adbd030273cfacb0eb6223bfdce65e0106f5c811d96caa66978598bb40f3309 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libi/libical3/gir1.2-ical-3.0_3.0.11-deepin+rb1_loong64.deb digest: 217a719a38ad1b3c1ac1b5295cb0762e2947bd5afc642c00dfd9c28bf67e3568 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/i/icu/icu-devtools_74.2-1_loong64.deb digest: 19b8f401d6defddc8ad823d459cd98974722b3641083e01623a442f9c7f21efc - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/t/texinfo/install-info_7.1-2_loong64.deb digest: edf05ac76cc76880a80eae93834710fad57b2fd1bfd62fffda64e62abd6a70f6 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/a/acl/libacl1_2.3.1-1_loong64.deb digest: 6a5d883c7ca1fb96e88290e5f80f2310b83e190d02133676ef19fcce44b5fc39 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/a/attr/libattr1_2.5.1-1_loong64.deb digest: 405e34b981984b1e6d04b5093fdaa36013459af4687c62c3a7dbdd0b42766ecb - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/u/util-linux/libblkid1_2.39.3-6deepin1_loong64.deb digest: 461e40f1f9e1aac09b577de585d654725476ee1d355d0ef508fb4ec0ee5e21c1 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/b/bzip2/libbz2-1.0_1.0.8-deepin_loong64.deb digest: fbff5be770b27924c853df94418156b53ab04d9f4a63e0420c5dce310257ae06 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/g/glibc/libc-dev-bin_2.38-6deepin4_loong64.deb digest: 23a576bed03d1cd629430d7a3b2f6377e362f40e35569ffa5d9564b91830b9dd - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/g/glibc/libc6-dev_2.38-6deepin4_loong64.deb digest: 95d9856edfce43a9763e1bd38729af73d092fbee1e68318995adf854d0c5e99e - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/g/glibc/libc6_2.38-6deepin4_loong64.deb digest: a8768ac8d6388feec089cd054f7ddb367e9738b950419edded0b2ead1bfb0631 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/e/e2fsprogs/libcom-err2_1.47.0-2_loong64.deb digest: 904627fe0f99d6b2737ee575b7f6bf326f23a31d41603f273a3ba6d355b57486 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libc/libconfig-tiny-perl/libconfig-tiny-perl_2.27-1_all.deb digest: 30d01706b0063d0b4aaef7cffd79a6b70d8365ad887ada4c8cc1f8a5df8eb84a - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxcrypt/libcrypt-dev_4.4.36-2_loong64.deb digest: e8c7fdffa40cea0cecc7e796761f853443a7c115f1e4cbbedcedffebecc61bb1 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxcrypt/libcrypt1_4.4.36-2_loong64.deb digest: ce691599b6a55a92bfbd4696cd9825a712bc5d9573b4e2b62287b40a5d114197 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/d/db-defaults/libdb-dev_5.3.3_loong64.deb digest: 29cf77826157af32f5c46ebe1e63c0048c90e9939f3ee244ba5eb92e0b9b79f8 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/d/db5.3/libdb5.3-dev_5.3.28+dfsg1-0.8_loong64.deb digest: b1f3d166fa9e536c0033c5e4ea94e933e6fd8feddcd8b3939bdc406f10180601 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_loong64.deb digest: 2e670599b511c2f01e1740a1daee678ce1d797f917dac37c4047553dc29b4281 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libe/libencode-locale-perl/libencode-locale-perl_1.05-1.1_all.deb digest: ef71d5b44ceef8015dbe954f6007f7d7fb32ceeafa49c8afc28ea8a79d4e9ad9 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/e/expat/libexpat1_2.5.0-2_loong64.deb digest: 845317fb7d0fdc029f3aa98c870826391b9bdb530c6aee296fd1671ed5dd8429 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libf/libffi/libffi8_3.4.6-1_loong64.deb digest: e1d9a61065aea68e96e14f496d7bfd63e024f8874e1d320cb607efd82dd96910 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libf/libfile-basedir-perl/libfile-basedir-perl_0.09-1_all.deb digest: 79f5ef747c15be92e24a1adeea98e3d4c01b1b90b730a184a8ca4959a1aa4684 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libf/libfile-desktopentry-perl/libfile-desktopentry-perl_0.22-2_all.deb digest: 19ed7f791a824bd6525c02cc6011bbd614880f3408e78eff5e16e1e9990334a8 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libf/libfile-mimeinfo-perl/libfile-mimeinfo-perl_0.30-1_all.deb digest: 4d9cecdc4b82cee837e74512293b8c84a554d3cdf6c760627cd9c42d6c752b92 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/g/gcc-13/libgcc-s1_13.2.0-3deepin2_loong64.deb digest: fdd63f9f4b4661d9222d57cb5115c85de4b5055ca90f86ba56a948996252d78c - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.10.3-2_loong64.deb digest: 3efc53ad7562df53beeaf914ea4c07a7f7ce29ff5867ec4e48cce58fb59f3a85 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libg/libgcrypt20/libgcrypt20_1.10.3-2_loong64.deb digest: 5bdd589218c3c04dd4c23f14e1815e007f56c84bd45cd497a1bf4e720bdbb6cb - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/g/gdbm/libgdbm-compat4_1.22-1_loong64.deb digest: bc7c3017145d403f6935e564bbcf6ee8904dbff103b96ecd876a3a66cebb6ae1 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/g/gdbm/libgdbm6_1.22-1_loong64.deb digest: 2d965b1e2624d262111a5a767278f4f4ad51eb1c073096ce2dbc42e0c02f3fcf - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/g/glib2.0/libglib2.0-0_2.80.1-1deepin1_loong64.deb digest: 796a8a4bfcc14d204bc23914f524a0dcb3b0545611060b3056547eb281e277f4 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/g/gmp/libgmp10_6.3.0+dfsg-2_loong64.deb digest: 756156cdfe255865308c635fb6ad1e5a7b27aae32c43e74eba334920c3ce23b9 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/g/gcc-13/libgomp1_13.2.0-3deepin2_loong64.deb digest: d3c3f799ef5878222cfb3150d17318cb1318094a2051ab9dd8a2f2bfb524ccc7 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libg/libgpg-error/libgpg-error-dev_1.47-3_loong64.deb digest: 8399956284ea0cbb6bef52b2ee4416b0ee477627c6163c71f4a8857408e54434 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libg/libgpg-error/libgpg-error0_1.47-3_loong64.deb digest: 432b4819ad1edb46e6d8116596212dbc3a82d0d34c93c3574ded8db352188c8c - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/k/krb5/libgssapi-krb5-2_1.20.1-5_loong64.deb digest: a74abdb1e7ddf88624513747e6591d1c799bc8774187470bd05d8d489834d596 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libi/libical3/libical-dev_3.0.11-deepin+rb1_loong64.deb digest: 761fbfe5cb5708e04a604840ff1a38ebc3f4564c5a7bfee9cc54607c40e5063d - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libi/libical3/libical3_3.0.11-deepin+rb1_loong64.deb digest: 2fc9097fd4b786a67cc9760fe50f35872c59b0f979201e18e4bb3c34876af5a9 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/i/icu/libicu-dev_74.2-1_loong64.deb digest: eb1495de732a9af8fc38ec1ab776606d493dc71571d1ddb336256e1442ba59ae - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/i/icu/libicu74_74.2-1_loong64.deb digest: ad3068aee2d3b3d2b9cf42497cb4e82626cf272202d0736b349a649116ed557c - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libi/libipc-system-simple-perl/libipc-system-simple-perl_1.30-1_all.deb digest: a528ecfa70fd8f3b4cc024947ff264e3952b0245be9a7147e556d8e1a037007c - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.1.5-2_loong64.deb digest: 47df0f4474b4722b6a741b7c8b33057f38f58245efa92c176abd489665e92c1f - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/k/krb5/libk5crypto3_1.20.1-5_loong64.deb digest: 4a83826bbb0da645b6f48c1de0682bd7ba1d61a2b903fed7738ec7c88f559b8b - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/k/keyutils/libkeyutils1_1.6.1-3_loong64.deb digest: 8992cafa99b2adbcc73f3ce195b68eec72a1f777cb5cebea825c1848f35a7a1a - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/k/krb5/libkrb5-3_1.20.1-5_loong64.deb digest: 071d32ffb73b3feca3d9135ec6109730728b20f40dc194abb24d3f4506c964ef - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/k/krb5/libkrb5support0_1.20.1-5_loong64.deb digest: 7ec7dcba628cbededb02866a71961599d1fc501303c2797f756381ce2026845c - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/l/lcms2/liblcms2-2_2.14-2_loong64.deb digest: 0d4c7d34f69d56cc287e478af83d7cfddcf44a5ba77b6c4bf8a8afa7864c9f7d - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/x/xz-utils/liblzma5_5.4.5-0.3_loong64.deb digest: 8922429eeb2d802e40eaba8567afb65504a70988e500d4d7a455f1ea6c79f20f - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libm/libmd/libmd0_1.0.4-1_loong64.deb digest: f54d26b7c46c848e15a460cd03140e8a436ea2f5b6b7e287e47994d1c627dbc8 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libm/libmng/libmng1_1.0.10+dfsg-3.1-deepin1_loong64.deb digest: 501c91fa0ba7cc9f6bceff658ffdba2323039a590719a2030f2dd37266d296aa - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/u/util-linux/libmount1_2.39.3-6deepin1_loong64.deb digest: 09d325477885d70857f69af079ae718949684f01e4ef75de78bc39a08ba3c25d - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/n/ncurses/libncursesw6_6.4-4_loong64.deb digest: 4db1ea7ab75ab8e38d6ea0e9c408766dd8328c84ded9e53aae7f6bba29e8e7e7 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libn/libnsl/libnsl-dev_1.3.0-2_loong64.deb digest: 20dfccabfb63024f4d18c0dddf6271436dd6b423643d8140ab157055c006b31c - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libn/libnsl/libnsl2_1.3.0-2_loong64.deb digest: 295c4fdb7405a01bac01bc50e542232014a5225cac5f675bfbe33ea41d1acd67 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/p/pcre2/libpcre2-8-0_10.39-2_loong64.deb digest: ecc34edbd930aae24bd00654a682592d396e5f0b3d94ad3c40baa300e2cdd0c1 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/p/perl/libperl5.36_5.36.0-10_loong64.deb digest: 04a865c6db98c65a2a540eb254174d4c012db34fc3b333ed5649fecedbfd0fbc - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/p/python3-defaults/libpython3-stdlib_3.11.4-5_loong64.deb digest: 708cf806ce99b6cb899dbf08e190301ecfc5e98ea1877f8a92bfa0be8b22f58b - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/p/python3.11/libpython3.11-minimal_3.11.6-3_loong64.deb digest: b9580b84a0fb035fbc1e09ef5cee5fbcd08ece6fb1a9eea1dc545e4e254051c3 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/p/python3.11/libpython3.11-stdlib_3.11.6-3_loong64.deb digest: fd48d8c7167ca6505591193c1d2d28936b01cb38313ea57feaae3e48e858d8ec - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/r/readline/libreadline8_8.2-3_loong64.deb digest: a1c114f0856366970ce731783250b16f1a600a917ac54eb45b3fc765a7dc5e8d - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libs/libselinux/libselinux1_3.5-1_loong64.deb digest: bc86b98fb1945359eb0959b07bba6c40c71668255342bc3bfba3cca9841437ff - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/s/sqlite3/libsqlite3-0_3.45.1-1_loong64.deb digest: 9096791c4741b549a2280283116218ea21d66bc9dd6aeaff94b66111c1a8c172 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/o/openssl/libssl3_3.2.0-2_loong64.deb digest: e21f7969e4644aabf313684b15a10d85f9c8cd69603b190540dca90f921cdd5a - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/g/gcc-13/libstdc++6_13.2.0-3deepin2_loong64.deb digest: 52ba4932e00c32af5bad96b41d875718e835a0f607669149ccf22dfe71e19045 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/n/ncurses/libtinfo6_6.4-4_loong64.deb digest: e4acb568f126357a2ab0d6cccee72d797ec67d0a05dd39193d03ea3260a550b7 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libt/libtirpc/libtirpc-common_1.3.2-2_all.deb digest: 74bddc18e3289947b20653433e82025873f5679ccba52f258ca4912e435a09ee - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libt/libtirpc/libtirpc-dev_1.3.2-2_loong64.deb digest: 398023207ec9cd9852423ff943a2471c9e413273d3d6e654251d3a9d66820b34 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libt/libtirpc/libtirpc3_1.3.2-2_loong64.deb digest: 9af8a36a1e38bb90c2cf99639596b5368ecdf03c5a51721bd723735eb3e7cfb8 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libu/libunistring/libunistring2_0.9.10-6_loong64.deb digest: 100d2bd250eff9cdc1ce0492cb7fffc306e620aef5886e1b12245f3f020d569c - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libu/liburi-perl/liburi-perl_5.10-1_all.deb digest: 485904ff807b96c4d1d18d248a40b01915d37274df732235119ecd2af01f872f - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/u/util-linux/libuuid1_2.39.3-6deepin1_loong64.deb digest: 48c616dfb3a357311ea0507bf7c43740e66a2eb1f85027c116a3f7f20067f4e8 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxml-libxml-perl/libxml-libxml-perl_2.0207+dfsg+really+2.0134-1_loong64.deb digest: 2368358f81c8262c0b9daf60d40bde0209a34c432dce7f1d254e387e6d71f1be - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxml-namespacesupport-perl/libxml-namespacesupport-perl_1.12-1.1_all.deb digest: 9588edfba6a50bf6702eac9ec3aca6f19a8b14a4260dc86615a93181040bd040 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxml-sax-base-perl/libxml-sax-base-perl_1.09-1.1_all.deb digest: 8271fec055eb0dabdfef211ce005a2b0ac78feaa5c31ebf35c7c8fe6bbf1482a - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxml-sax-perl/libxml-sax-perl_1.02+dfsg-3_all.deb digest: 4751449b0ce407282bf5ea9a721fa3ae1cd4d488ea3f21c6a40e6e4889d9fd6d - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libx/libxml2/libxml2_2.9.14+dfsg-1.3+rb1_loong64.deb digest: 2bff227d0698e3f85bf45ef08de45ebfd5394c2c5f13d26a047a01cf4666006d - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/libz/libzstd/libzstd1_1.5.5+dfsg2-2_loong64.deb digest: d058fce76522747153757cbfe5eec9bac7f0077906775f8f232c100bbd0d3e56 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/l/linux-upstream/linux-libc-dev_23.01.00.32_loong64.deb digest: 9e72480d626cea281e59d32c4f5e7bb30de6b648caedc97a19e29c8060dffa03 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/l/lshw/lshw_02.19.git.2021.06.19.996aaad9c7-2_loong64.deb digest: afb878e2661aa04cb0de2a844ac33f95e5ff8faa1924016cddd0207af36d266b - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/m/mailcap/mailcap_3.70_all.deb digest: 7ca67d118c03eaf58346eb1e676ff16f4d1aa5252a8cc6b5b3b1ed44556180f1 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/m/media-types/media-types_4.0.0_all.deb digest: cd124053950ab8b0373203bceb7eab841791017daf1d50db2ece09e4da52406a - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/m/mime-support/mime-support_3.66_all.deb digest: 20294deda4378616c2b48614ee226731ec09663c3497c35a467e8ea5fa03f16a - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/p/perl/perl-base_5.36.0-10_loong64.deb digest: 2c2ff9c3322f33ec19ed0c0170001fde2d9ff60937d323f154aac0a1a660fe82 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/p/perl/perl-modules-5.36_5.36.0-10_all.deb digest: 907542b9a413bd0276d5ef94fef77083715a692fd33c52ece44d11fff847bab0 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/p/perl/perl_5.36.0-10_loong64.deb digest: dc3b0b73a582471f146be8f35e39d61ef9046a2a4f3ee2a29684f8ed12d2a598 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/p/python3-defaults/python3-minimal_3.11.4-5_loong64.deb digest: 782ede1b3217aae8d353247cd5ddb81ad816abc57843932b8fd602a1f14fc4f1 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/p/python3.11/python3.11-minimal_3.11.6-3_loong64.deb digest: 239b527721b38eeee404f3322cc05a9cb996cf8b8859eb57a02abcf46127dcc0 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/p/python3.11/python3.11_3.11.6-3_loong64.deb digest: e72ae042f1784400da6a357f649f5cfc0e80e17ddff8234a8aa0593ccff1502e - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/p/python3-defaults/python3_3.11.4-5_loong64.deb digest: 443a749cbae916c080e4da43fed7caa26aae60fbe873a09c251ded4bffd8f2e4 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/r/readline/readline-common_8.2-3_all.deb digest: 35fe59faceb8d9def8b6aa664e091eac8444887bc1f33ba2cf22099c3646e7bd - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/r/rpcsvc-proto/rpcsvc-proto_1.4.2-4_loong64.deb digest: 5a68197175ff3bf8f57fdd1066b62efcb547e877ae2c3b057f5b5a9c8add94c4 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/s/sensible-utils/sensible-utils_0.0.17_all.deb digest: e99b46d528ef00f091a48cfcf91318539f75f71f8dd2122571fcf9c3e1e499ab - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/s/shared-mime-info/shared-mime-info_2.2-1_loong64.deb digest: a0cd2345f1c869975ba98b8ead9048f32746d72966162472ce531ae48ecb0e9e - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/t/tar/tar_1.35+dfsg-3_loong64.deb digest: 48cc0cc32829c68c7b58e74f141fe552f9a3f5c9e6da77ad54184530debc0cff - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/t/tzdata/tzdata_2023d-1deepin1_all.deb digest: fe503c524801260208482a1dfc061e79c2a7450111dd90f88ed40d70ac935832 - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/u/ucf/ucf_3.0043_all.deb digest: 798643dc75a19ab6e0067fcd63a89c28f711c3e4769435e262dc36bba18f9a2a - kind: file url: https://ci.deepin.com/repo/deepin/deepin-community/backup/rc2/pool/main/z/zlib/zlib1g_1.3.dfsg-3_loong64.deb digest: 68757110c7a6fb352dd791ad5cc0ed157fc642313a83131c1e480a4c9efa58d0dde-calendar-5.14.13/loong64/org.dde.calendar.install000077500000000000000000000505741473346337000221720ustar00rootroot00000000000000/opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_am_ET.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ar.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_az.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_bo.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ca.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_cs.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_da.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_de.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_de_DE.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_el.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_en.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_en_AU.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_en_GB.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_en_US.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_es.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_fa.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_fi.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_fr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_gl_ES.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_hi_IN.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_hr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_hu.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_id.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_it.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ja.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ka.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_kab.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_km_KH.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ko.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_lt.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_lv.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ms.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_nl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_pl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_pt.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_pt_BR.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ro.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ru.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_si.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_sk.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_sl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_sq.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_sr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_th.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_tr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ug.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_uk.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_vi.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_zh_CN.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_zh_HK.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_zh_TW.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ar.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_az.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_bo.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ca.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_cs.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_da.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_de.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_de_DE.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_el.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_en.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_en_AU.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_en_GB.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_en_US.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_es.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_fi.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_fr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_gl_ES.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_hr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_hu.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_id.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_it.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ja.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ka.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_kab.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_km_KH.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ko.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_lt.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_lv.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ms.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_nl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_pl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_pt.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_pt_BR.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ro.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ru.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_si.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_sk.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_sl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_sq.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_sr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_th.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_tr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ug.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_uk.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_vi.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_zh_CN.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_zh_HK.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_zh_TW.qm /opt/apps/org.dde.calendar/files/share/deepin-log-viewer/deepin-log.conf.d/org.deepin.calendar.json /opt/apps/org.dde.calendar/files/bin/dde-calendar /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/calendar.md /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/create.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/hotkey.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/main.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/repeat.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/type.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/calendar.md /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/create.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/hotkey.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/main.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/repeat.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/type.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/calendar.md /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/create.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/hotkey.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/main.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/repeat.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/manage.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/calendar.md /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/create.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/hotkey.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/main.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/repeat.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/type.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/tips.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/deepin_launcher.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/add.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/icon_menu.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/close_icon.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/QM.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/Ctrl.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/notes.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/attention.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/delete.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/Shift.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/dde-calendar.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/dde_calendar.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/edit.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/side_menu.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/search.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/add1.svg /opt/apps/org.dde.calendar/files/share/applications/dde-calendar.desktop /opt/apps/org.dde.calendar/files/share/dbus-1/services/com.deepin.Calendar.service /opt/apps/org.dde.calendar/files/share/metainfo/org.deepin.calendar.metainfo.xml /opt/apps/org.dde.calendar/files/libexec/deepin-daemon/dde-calendar-service /opt/apps/org.dde.calendar/files/share/dbus-1/services/com.deepin.dataserver.Calendar.service /opt/apps/org.dde.calendar/files/etc/xdg/autostart/dde-calendar-service.desktop /opt/apps/org.dde.calendar/files/share/dde-calendar/data/huangli.db /opt/apps/org.dde.calendar/files/lib/systemd/user/com.dde.calendarserver.calendar.service /opt/apps/org.dde.calendar/files/lib/systemd/user/dde-calendar.service /opt/apps/org.dde.calendar/files/lib/systemd/user/com.dde.calendarserver.calendar.timer /opt/apps/org.dde.calendar/files/lib/deepin-aiassistant/serivce-plugins/libuosschedulex-plugin.so /opt/apps/org.dde.calendar/files/lib /opt/apps/org.dde.calendar/files/lib/loongarch64-linux-gnu /opt/apps/org.dde.calendar/files/lib/loongarch64-linux-gnu/libmng.so.1 /opt/apps/org.dde.calendar/files/lib/loongarch64-linux-gnu/libmng.so.1.1.0.10 /opt/apps/org.dde.calendar/files/bin /opt/apps/org.dde.calendar/files/bin/lshw /opt/apps/org.dde.calendar/files/bin/mimeopen /opt/apps/org.dde.calendar/files/bin/mimetype /opt/apps/org.dde.calendar/files/share /opt/apps/org.dde.calendar/files/share/man /opt/apps/org.dde.calendar/files/share/man/man1 /opt/apps/org.dde.calendar/files/share/man/man1/mimeopen.1p.gz /opt/apps/org.dde.calendar/files/share/man/man1/lshw.1.gz /opt/apps/org.dde.calendar/files/share/man/man1/mimetype.1p.gz /opt/apps/org.dde.calendar/files/share/man/man3 /opt/apps/org.dde.calendar/files/share/man/man3/File::IconTheme.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo::Magic.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::BaseDir.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo::Applications.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/IPC::System::Simple.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::DesktopEntry.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo::Rox.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::UserDirs.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo::Cookbook.3pm.gz /opt/apps/org.dde.calendar/files/share/locale /opt/apps/org.dde.calendar/files/share/locale/fr /opt/apps/org.dde.calendar/files/share/locale/fr/LC_MESSAGES /opt/apps/org.dde.calendar/files/share/locale/fr/LC_MESSAGES/lshw.mo /opt/apps/org.dde.calendar/files/share/perl5 /opt/apps/org.dde.calendar/files/share/perl5/File /opt/apps/org.dde.calendar/files/share/perl5/File/IconTheme.pm /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo.pm /opt/apps/org.dde.calendar/files/share/perl5/File/BaseDir.pm /opt/apps/org.dde.calendar/files/share/perl5/File/DesktopEntry.pm /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo/Applications.pm /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo/Magic.pm /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo/Rox.pm /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo/Cookbook.pod /opt/apps/org.dde.calendar/files/share/perl5/File/UserDirs.pm /opt/apps/org.dde.calendar/files/share/perl5/IPC /opt/apps/org.dde.calendar/files/share/perl5/IPC/System /opt/apps/org.dde.calendar/files/share/perl5/IPC/System/Simple.pm /opt/apps/org.dde.calendar/files/share/lintian /opt/apps/org.dde.calendar/files/share/lintian/overrides /opt/apps/org.dde.calendar/files/share/lintian/overrides/libfile-desktopentry-perl /opt/apps/org.dde.calendar/files/share/doc /opt/apps/org.dde.calendar/files/share/doc/lshw /opt/apps/org.dde.calendar/files/share/doc/lshw/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/lshw/copyright /opt/apps/org.dde.calendar/files/share/doc/lshw/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-desktopentry-perl /opt/apps/org.dde.calendar/files/share/doc/libfile-desktopentry-perl/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-desktopentry-perl/copyright /opt/apps/org.dde.calendar/files/share/doc/libfile-desktopentry-perl/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-mimeinfo-perl /opt/apps/org.dde.calendar/files/share/doc/libfile-mimeinfo-perl/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-mimeinfo-perl/copyright /opt/apps/org.dde.calendar/files/share/doc/libfile-mimeinfo-perl/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libmng1 /opt/apps/org.dde.calendar/files/share/doc/libmng1/README /opt/apps/org.dde.calendar/files/share/doc/libmng1/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/libmng1/copyright /opt/apps/org.dde.calendar/files/share/doc/libmng1/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/copyright /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/examples /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/examples/rsync-backup.pl /opt/apps/org.dde.calendar/files/share/doc/libfile-basedir-perl /opt/apps/org.dde.calendar/files/share/doc/libfile-basedir-perl/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-basedir-perl/copyright /opt/apps/org.dde.calendar/files/share/doc/libfile-basedir-perl/changelog.Debian.gzdde-calendar-5.14.13/org.dde.calendar.install000066400000000000000000000505551473346337000206760ustar00rootroot00000000000000/opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_am_ET.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ar.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_az.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_bo.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ca.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_cs.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_da.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_de.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_de_DE.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_el.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_en.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_en_AU.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_en_GB.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_en_US.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_es.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_fa.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_fi.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_fr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_gl_ES.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_hi_IN.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_hr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_hu.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_id.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_it.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ja.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ka.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_kab.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_km_KH.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ko.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_lt.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_lv.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ms.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_nl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_pl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_pt.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_pt_BR.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ro.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ru.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_si.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_sk.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_sl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_sq.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_sr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_th.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_tr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_ug.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_uk.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_vi.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_zh_CN.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_zh_HK.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar-service_zh_TW.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ar.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_az.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_bo.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ca.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_cs.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_da.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_de.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_de_DE.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_el.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_en.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_en_AU.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_en_GB.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_en_US.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_es.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_fi.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_fr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_gl_ES.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_hr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_hu.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_id.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_it.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ja.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ka.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_kab.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_km_KH.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ko.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_lt.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_lv.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ms.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_nl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_pl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_pt.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_pt_BR.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ro.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ru.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_si.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_sk.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_sl.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_sq.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_sr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_th.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_tr.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_ug.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_uk.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_vi.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_zh_CN.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_zh_HK.qm /opt/apps/org.dde.calendar/files/share/dde-calendar/translations/dde-calendar_zh_TW.qm /opt/apps/org.dde.calendar/files/share/deepin-log-viewer/deepin-log.conf.d/org.deepin.calendar.json /opt/apps/org.dde.calendar/files/bin/dde-calendar /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/calendar.md /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/create.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/hotkey.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/main.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/repeat.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_TW/fig/type.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/calendar.md /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/create.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/hotkey.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/main.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/repeat.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_CN/fig/type.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/calendar.md /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/create.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/hotkey.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/main.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/repeat.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/en_US/fig/manage.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/calendar.md /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/create.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/hotkey.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/main.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/repeat.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/zh_HK/fig/type.png /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/tips.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/deepin_launcher.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/add.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/icon_menu.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/close_icon.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/QM.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/Ctrl.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/notes.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/attention.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/delete.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/Shift.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/dde-calendar.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/dde_calendar.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/edit.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/side_menu.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/search.svg /opt/apps/org.dde.calendar/files/share/deepin-manual/manual-assets/application//dde-calendar/calendar/common/add1.svg /opt/apps/org.dde.calendar/files/share/applications/dde-calendar.desktop /opt/apps/org.dde.calendar/files/share/dbus-1/services/com.deepin.Calendar.service /opt/apps/org.dde.calendar/files/share/metainfo/org.deepin.calendar.metainfo.xml /opt/apps/org.dde.calendar/files/libexec/deepin-daemon/dde-calendar-service /opt/apps/org.dde.calendar/files/share/dbus-1/services/com.deepin.dataserver.Calendar.service /opt/apps/org.dde.calendar/files/etc/xdg/autostart/dde-calendar-service.desktop /opt/apps/org.dde.calendar/files/share/dde-calendar/data/huangli.db /opt/apps/org.dde.calendar/files/lib/systemd/user/com.dde.calendarserver.calendar.service /opt/apps/org.dde.calendar/files/lib/systemd/user/dde-calendar.service /opt/apps/org.dde.calendar/files/lib/systemd/user/com.dde.calendarserver.calendar.timer /opt/apps/org.dde.calendar/files/lib/deepin-aiassistant/serivce-plugins/libuosschedulex-plugin.so /opt/apps/org.dde.calendar/files/lib /opt/apps/org.dde.calendar/files/lib/x86_64-linux-gnu /opt/apps/org.dde.calendar/files/lib/x86_64-linux-gnu/libmng.so.1 /opt/apps/org.dde.calendar/files/lib/x86_64-linux-gnu/libmng.so.1.1.0.10 /opt/apps/org.dde.calendar/files/bin /opt/apps/org.dde.calendar/files/bin/lshw /opt/apps/org.dde.calendar/files/bin/mimeopen /opt/apps/org.dde.calendar/files/bin/mimetype /opt/apps/org.dde.calendar/files/share /opt/apps/org.dde.calendar/files/share/man /opt/apps/org.dde.calendar/files/share/man/man1 /opt/apps/org.dde.calendar/files/share/man/man1/mimeopen.1p.gz /opt/apps/org.dde.calendar/files/share/man/man1/lshw.1.gz /opt/apps/org.dde.calendar/files/share/man/man1/mimetype.1p.gz /opt/apps/org.dde.calendar/files/share/man/man3 /opt/apps/org.dde.calendar/files/share/man/man3/File::IconTheme.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo::Magic.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::BaseDir.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo::Applications.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/IPC::System::Simple.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::DesktopEntry.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo::Rox.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::UserDirs.3pm.gz /opt/apps/org.dde.calendar/files/share/man/man3/File::MimeInfo::Cookbook.3pm.gz /opt/apps/org.dde.calendar/files/share/locale /opt/apps/org.dde.calendar/files/share/locale/fr /opt/apps/org.dde.calendar/files/share/locale/fr/LC_MESSAGES /opt/apps/org.dde.calendar/files/share/locale/fr/LC_MESSAGES/lshw.mo /opt/apps/org.dde.calendar/files/share/perl5 /opt/apps/org.dde.calendar/files/share/perl5/File /opt/apps/org.dde.calendar/files/share/perl5/File/IconTheme.pm /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo.pm /opt/apps/org.dde.calendar/files/share/perl5/File/BaseDir.pm /opt/apps/org.dde.calendar/files/share/perl5/File/DesktopEntry.pm /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo/Applications.pm /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo/Magic.pm /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo/Rox.pm /opt/apps/org.dde.calendar/files/share/perl5/File/MimeInfo/Cookbook.pod /opt/apps/org.dde.calendar/files/share/perl5/File/UserDirs.pm /opt/apps/org.dde.calendar/files/share/perl5/IPC /opt/apps/org.dde.calendar/files/share/perl5/IPC/System /opt/apps/org.dde.calendar/files/share/perl5/IPC/System/Simple.pm /opt/apps/org.dde.calendar/files/share/lintian /opt/apps/org.dde.calendar/files/share/lintian/overrides /opt/apps/org.dde.calendar/files/share/lintian/overrides/libfile-desktopentry-perl /opt/apps/org.dde.calendar/files/share/doc /opt/apps/org.dde.calendar/files/share/doc/lshw /opt/apps/org.dde.calendar/files/share/doc/lshw/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/lshw/copyright /opt/apps/org.dde.calendar/files/share/doc/lshw/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-desktopentry-perl /opt/apps/org.dde.calendar/files/share/doc/libfile-desktopentry-perl/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-desktopentry-perl/copyright /opt/apps/org.dde.calendar/files/share/doc/libfile-desktopentry-perl/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-mimeinfo-perl /opt/apps/org.dde.calendar/files/share/doc/libfile-mimeinfo-perl/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-mimeinfo-perl/copyright /opt/apps/org.dde.calendar/files/share/doc/libfile-mimeinfo-perl/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libmng1 /opt/apps/org.dde.calendar/files/share/doc/libmng1/README /opt/apps/org.dde.calendar/files/share/doc/libmng1/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/libmng1/copyright /opt/apps/org.dde.calendar/files/share/doc/libmng1/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/copyright /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/changelog.Debian.gz /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/examples /opt/apps/org.dde.calendar/files/share/doc/libipc-system-simple-perl/examples/rsync-backup.pl /opt/apps/org.dde.calendar/files/share/doc/libfile-basedir-perl /opt/apps/org.dde.calendar/files/share/doc/libfile-basedir-perl/changelog.gz /opt/apps/org.dde.calendar/files/share/doc/libfile-basedir-perl/copyright /opt/apps/org.dde.calendar/files/share/doc/libfile-basedir-perl/changelog.Debian.gzdde-calendar-5.14.13/org.deepin.calendar.json000066400000000000000000000006601473346337000207010ustar00rootroot00000000000000{ "name": "dde-calendar", "submodules": [ { "name": "client", "filter": "org.deepin.dde-calendar.client", "logType": "journal" }, { "name": "service", "filter": "org.deepin.dde-calendar.service", "logType": "journal" }, { "name": "common", "filter": "org.deepin.dde-calendar.common", "logType": "journal" } ], "visible": 1, "version": "V1.0" } dde-calendar-5.14.13/rpm/000077500000000000000000000000001473346337000150005ustar00rootroot00000000000000dde-calendar-5.14.13/rpm/dde-calendar.spec000066400000000000000000000030301473346337000201530ustar00rootroot00000000000000%define pkgrelease 1 %if 0%{?openeuler} %define specrelease %{pkgrelease} %else ## allow specrelease to have configurable %%{?dist} tag in other distribution %define specrelease %{pkgrelease}%{?dist} %endif Name: dde-calendar Version: 5.8.1.1 Release: %{specrelease} Summary: Calendar is a smart daily planner to schedule all things in life License: GPLv3 URL: https://github.com/linuxdeepin/dde-calendar Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz BuildRequires: cmake BuildRequires: qt5-devel BuildRequires: dtkgui-devel BuildRequires: dtkwidget-devel BuildRequires: deepin-gettext-tools BuildRequires: gtest-devel %description %{summary}. %prep %autosetup %build export PATH=%{_qt5_bindir}:$PATH sed -i "s|^cmake_minimum_required.*|cmake_minimum_required(VERSION 3.0)|" $(find . -name "CMakeLists.txt") mkdir build && pushd build %cmake -DCMAKE_BUILD_TYPE=Release ../ -DAPP_VERSION=%{version} -DVERSION=%{version} %make_build popd %install %make_install -C build INSTALL_ROOT="%buildroot" %files %doc README.md %license LICENSE %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/%{name}/translations/*.qm %{_datadir}/deepin-manual/manual-assets/application/dde-calendar/calendar/* %{_datadir}/dbus-1/services/*.service /etc/xdg/autostart/dde-calendar-service.desktop %{_datadir}/dde-calendar/data/* /usr/lib/deepin-daemon/dde-calendar-service %changelog * Tue Apr 20 2021 zhangdingwen - 5.8.1.1-1 - init spec for euler dde-calendar-5.14.13/schedule-plugin/000077500000000000000000000000001473346337000172725ustar00rootroot00000000000000dde-calendar-5.14.13/schedule-plugin/CMakeLists.txt000066400000000000000000000050211473346337000220300ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) if (NOT DEFINED VERSION) set(VERSION 1.2.2) endif () #common resource names set(APP_RES_DIR "assets") set(APP_BIN_NAME "uosschedulex-plugin") set(APP_QRC "${APP_RES_DIR}/resources.qrc") project(${APP_BIN_NAME}) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "sw_64") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mieee") endif () add_definitions("-DSCHEDULEPLUGIN_LIBRARY") add_definitions("-DQT_DEPRECATED_WARNINGS") #compile flags if (CMAKE_BUILD_TYPE MATCHES Debug) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -Wextra") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra") # Enable Qt builtin debug mode add_definitions("-DQT_MESSAGELOGCONTEXT") else() # -Wl, -O2 Enable linker optimizations # -Wl, --gc-sections Remove unused code resulting from -fdsta-sections and # -ffunction-sections set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2 -Wl,-O1 -Wl,--gc-sections") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2 -Wl,-O1 -Wl,--gc-sections") endif() #安全编译参数 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong -z noexecstack -pie -fPIC -z lazy") macro(SUBDIRLIST result curdir) file(GLOB children RELATIVE ${curdir} ${curdir}/*) set(dirlist "") foreach(child ${children}) if(IS_DIRECTORY ${curdir}/${child}) LIST(APPEND dirlist ${child}) endif() endforeach() set(${result} ${dirlist}) endmacro() include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) SUBDIRLIST(all_src ${CMAKE_CURRENT_SOURCE_DIR}/src) #Include all app own subdirectories foreach(subdir ${all_src}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/${subdir}) endforeach() file(GLOB_RECURSE Schedule_Plugin_SRC ${CMAKE_CURRENT_LIST_DIR}/src/*.cpp) find_package(PkgConfig REQUIRED) find_package(DtkWidget REQUIRED) find_package(Qt5Svg REQUIRED) find_package(Qt5DBus REQUIRED) include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) # Tell CMake to create the lib add_library(${PROJECT_NAME} SHARED ${Schedule_Plugin_SRC} ${APP_QRC} src/interface/service.h) target_include_directories(${PROJECT_NAME} PUBLIC ${DtkWidget_INCLUDE_DIRS} ${OBJECT_BINARY_DIR} ../calendar-common/src) target_link_libraries(${PROJECT_NAME} ${Qt5Svg_LIBRARIES} ${Qt5DBus_LIBRARIES} ${DtkWidget_LIBRARIES} commondata ) # Install files install(TARGETS ${PROJECT_NAME} DESTINATION lib/deepin-aiassistant/serivce-plugins) dde-calendar-5.14.13/schedule-plugin/README.md000066400000000000000000000000001473346337000205370ustar00rootroot00000000000000dde-calendar-5.14.13/schedule-plugin/assets/000077500000000000000000000000001473346337000205745ustar00rootroot00000000000000dde-calendar-5.14.13/schedule-plugin/assets/resources.qrc000066400000000000000000000053241473346337000233210ustar00rootroot00000000000000 resources/DynamicIcon/calendar_bg.svg resources/DynamicIcon/day1.svg resources/DynamicIcon/day2.svg resources/DynamicIcon/day3.svg resources/DynamicIcon/day4.svg resources/DynamicIcon/day5.svg resources/DynamicIcon/day6.svg resources/DynamicIcon/day7.svg resources/DynamicIcon/day8.svg resources/DynamicIcon/day9.svg resources/DynamicIcon/day10.svg resources/DynamicIcon/day11.svg resources/DynamicIcon/day12.svg resources/DynamicIcon/day13.svg resources/DynamicIcon/day14.svg resources/DynamicIcon/day15.svg resources/DynamicIcon/day16.svg resources/DynamicIcon/day17.svg resources/DynamicIcon/day18.svg resources/DynamicIcon/day19.svg resources/DynamicIcon/day20.svg resources/DynamicIcon/day21.svg resources/DynamicIcon/day22.svg resources/DynamicIcon/day23.svg resources/DynamicIcon/day24.svg resources/DynamicIcon/day25.svg resources/DynamicIcon/day26.svg resources/DynamicIcon/day27.svg resources/DynamicIcon/day28.svg resources/DynamicIcon/day29.svg resources/DynamicIcon/day30.svg resources/DynamicIcon/day31.svg resources/DynamicIcon/month1.svg resources/DynamicIcon/month2.svg resources/DynamicIcon/month3.svg resources/DynamicIcon/month4.svg resources/DynamicIcon/month5.svg resources/DynamicIcon/month6.svg resources/DynamicIcon/month7.svg resources/DynamicIcon/month8.svg resources/DynamicIcon/month9.svg resources/DynamicIcon/month10.svg resources/DynamicIcon/month11.svg resources/DynamicIcon/month12.svg resources/DynamicIcon/week1.svg resources/DynamicIcon/week2.svg resources/DynamicIcon/week3.svg resources/DynamicIcon/week4.svg resources/DynamicIcon/week5.svg resources/DynamicIcon/week6.svg resources/DynamicIcon/week7.svg dde-calendar-5.14.13/schedule-plugin/assets/resources/000077500000000000000000000000001473346337000226065ustar00rootroot00000000000000dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/000077500000000000000000000000001473346337000250035ustar00rootroot00000000000000dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/calendar_bg.svg000066400000000000000000000050401473346337000277440ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day1.svg000066400000000000000000000016271473346337000263700ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day10.svg000066400000000000000000000035761473346337000264550ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day11.svg000066400000000000000000000022031473346337000264400ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day12.svg000066400000000000000000000035601473346337000264500ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day13.svg000066400000000000000000000052501473346337000264470ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day14.svg000066400000000000000000000024701473346337000264510ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day15.svg000066400000000000000000000050551473346337000264540ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day16.svg000066400000000000000000000120511473346337000264470ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day17.svg000066400000000000000000000022561473346337000264560ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day18.svg000066400000000000000000000057751473346337000264700ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day19.svg000066400000000000000000000117071473346337000264610ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day2.svg000066400000000000000000000032621473346337000263660ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day20.svg000066400000000000000000000051461473346337000264510ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day21.svg000066400000000000000000000035631473346337000264530ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day22.svg000066400000000000000000000051421473346337000264470ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day23.svg000066400000000000000000000066141473346337000264550ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day24.svg000066400000000000000000000040651473346337000264540ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day25.svg000066400000000000000000000065111473346337000264530ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day26.svg000066400000000000000000000134361473346337000264600ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day27.svg000066400000000000000000000036651473346337000264640ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day28.svg000066400000000000000000000073441473346337000264630ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day29.svg000066400000000000000000000131771473346337000264650ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day3.svg000066400000000000000000000047641473346337000263770ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day30.svg000066400000000000000000000066571473346337000264620ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day31.svg000066400000000000000000000052721473346337000264530ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day4.svg000066400000000000000000000020001473346337000263550ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day5.svg000066400000000000000000000046251473346337000263750ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day6.svg000066400000000000000000000115761473346337000264010ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day7.svg000066400000000000000000000016521473346337000263740ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day8.svg000066400000000000000000000055111473346337000263730ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/day9.svg000066400000000000000000000114041473346337000263720ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/month1.svg000066400000000000000000000022621473346337000267340ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/month10.svg000066400000000000000000000022471473346337000270170ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/month11.svg000066400000000000000000000023611473346337000270150ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/month12.svg000066400000000000000000000027601473346337000270210ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/month2.svg000066400000000000000000000023761473346337000267430ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/month3.svg000066400000000000000000000035501473346337000267370ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/month4.svg000066400000000000000000000032311473346337000267340ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/month5.svg000066400000000000000000000032571473346337000267450ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/month6.svg000066400000000000000000000026551473346337000267470ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/month7.svg000066400000000000000000000021551473346337000267430ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/month8.svg000066400000000000000000000033221473346337000267410ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/month9.svg000066400000000000000000000034731473346337000267510ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/week1.svg000066400000000000000000000027011473346337000265400ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/week2.svg000066400000000000000000000037371473346337000265530ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/week3.svg000066400000000000000000000031751473346337000265500ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/week4.svg000066400000000000000000000030411473346337000265410ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/week5.svg000066400000000000000000000021101473346337000265360ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/week6.svg000066400000000000000000000033171473346337000265510ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/assets/resources/DynamicIcon/week7.svg000066400000000000000000000030211473346337000265420ustar00rootroot00000000000000 dde-calendar-5.14.13/schedule-plugin/src/000077500000000000000000000000001473346337000200615ustar00rootroot00000000000000dde-calendar-5.14.13/schedule-plugin/src/calendarData/000077500000000000000000000000001473346337000224245ustar00rootroot00000000000000dde-calendar-5.14.13/schedule-plugin/src/calendarData/accountitem.cpp000066400000000000000000000177521473346337000254570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "accountitem.h" AccountItem::AccountItem(const DAccount::Ptr &account, QObject *parent) : QObject(parent) , m_account(account) , m_dbusRequest(new DbusAccountRequest(account->dbusPath(), account->dbusInterface(), this)) { initConnect(); } void AccountItem::initConnect() { connect(m_dbusRequest, &DbusAccountRequest::signalCreateScheduleFinish, this, &AccountItem::signalCreateFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetScheduleFinish, this, &AccountItem::signalGetScheduleFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetAccountInfoFinish, this, &AccountItem::slotGetAccountInfoFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetScheduleTypeListFinish, this, &AccountItem::slotGetScheduleTypeListFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetScheduleListFinish, this, &AccountItem::slotGetScheduleListFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetSysColorsFinish, this, &AccountItem::slotGetSysColorsFinish); } /** * @brief AccountItem::resetAccount * 重新获取账户相关数据 */ void AccountItem::resetAccount() { m_scheduleTypeList = m_dbusRequest->getScheduleTypeList(); m_typeColorList = m_dbusRequest->getSysColors(); } /** * @brief AccountItem::getAccount * 获取账户数据 * @return */ DAccount::Ptr AccountItem::getAccount() { return m_account; } //获取日程 QMap AccountItem::getScheduleMap() { return m_scheduleMap; } /** * @brief getScheduleTypeList 获取日程类型信息集 * @return */ DScheduleType::List AccountItem::getScheduleTypeList() { DScheduleType::List list; for (DScheduleType::Ptr p : m_scheduleTypeList) { if (p->privilege() != DScheduleType::None) { list.push_back(p); } } return list; } //根据类型ID获取日程类型 DScheduleType::Ptr AccountItem::getScheduleTypeByID(const QString &typeID) { for (DScheduleType::Ptr p : m_scheduleTypeList) { if (p->typeID() == typeID) { return p; } } return nullptr; } DScheduleType::Ptr AccountItem::getScheduleTypeByName(const QString &typeName) { for (DScheduleType::Ptr p : m_scheduleTypeList) { if (p->typeName() == typeName || p->displayName() == typeName) { return p; } } return nullptr; } DSchedule::Ptr AccountItem::getScheduleByID(const QString &scheduleID) { return m_dbusRequest->getScheduleByID(scheduleID); } DTypeColor::List AccountItem::getColorTypeList() { return m_typeColorList; } /** * @brief AccountItem::updateAccountInfo * 更新账户信息 * @param callback */ void AccountItem::updateAccountInfo(CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->updateAccountInfo(m_account); } /** * @brief AccountItem::createJobType * 创建日程类型 * @param typeInfo 日程类型数据 * @param callback */ void AccountItem::createJobType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); typeInfo->setPrivilege(DScheduleType::User); m_dbusRequest->createScheduleType(typeInfo); } /** * @brief AccountItem::updateScheduleType * 更新类型信息 * @param typeInfo 新的日程类型数据 * @param callback */ void AccountItem::updateScheduleType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->updateScheduleType(typeInfo); } /** * @brief AccountItem::deleteScheduleTypeByID * 根据类型ID删除日程类型 * @param typeID 日程类型id * @param callback 回调函数 */ void AccountItem::deleteScheduleTypeByID(const QString &typeID, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->deleteScheduleTypeByID(typeID); } /** * @brief AccountItem::scheduleTypeIsUsed * 类型是否被日程使用 * @param typeID 日程类型id * @param callback 回调函数 */ void AccountItem::scheduleTypeIsUsed(const QString &typeID, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->scheduleTypeByUsed(typeID); } /** * @brief AccountItem::createSchedule * 创建日程 * @param scheduleInfo 日程数据 * @param callback 回调函数 */ QString AccountItem::createSchedule(const DSchedule::Ptr &scheduleInfo) { return m_dbusRequest->createSchedule(scheduleInfo); } /** * @brief AccountItem::updateSchedule * 更新日程 * @param scheduleInfo 新的日程数据 * @param callback 回调函数 */ void AccountItem::updateSchedule(const DSchedule::Ptr &scheduleInfo, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->updateSchedule(scheduleInfo); } /** * @brief AccountItem::deleteScheduleByID * 根据日程ID删除日程 * @param schedule ID日程id * @param callback 回调函数 */ void AccountItem::deleteScheduleByID(const QString &scheduleID, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->deleteScheduleByScheduleID(scheduleID); } /** * @brief AccountItem::deleteSchedulesByTypeID * 根据类型ID删除日程 * @param typeID 日程类型id * @param callback 回调函数 */ void AccountItem::deleteSchedulesByTypeID(const QString &typeID, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->deleteSchedulesByScheduleTypeID(typeID); } /** * @brief AccountItem::querySchedulesWithParameter * 根据查询条件查询数据 * @param params 查询条件 * @param callback 回调函数 */ DSchedule::Map AccountItem::querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms) { return m_dbusRequest->querySchedulesWithParameter(params); } /** * @brief AccountItem::monitorScheduleTypeData * 监听日程类型数据完成事件 * @param callback 回调函数 */ void AccountItem::monitorScheduleTypeData(Func callback) { auto statusIterator = m_dataStatus.find("ScheduleType"); if (statusIterator != m_dataStatus.end() && statusIterator.value()) { callback(); } else { m_dataStatus.insert("ScheduleType", false); } auto iterator = m_callbackMap.find("ScheduleType"); QList funcList; if (iterator == m_callbackMap.end()) { funcList.append(callback); } else { funcList = iterator.value(); } m_callbackMap.insert("ScheduleType", funcList); } /** * @brief AccountItem::slotGetAccountInfoFinish * 获取账户信息完成事件 * @param account 账户数据 */ void AccountItem::slotGetAccountInfoFinish(DAccount::Ptr account) { m_account = account; emit signalAccountDataUpdate(); } /** * @brief AccountItem::slotGetScheduleTypeListFinish * 获取日程类型数据完成事件 * @param scheduleTypeList 日程类型数据 */ void AccountItem::slotGetScheduleTypeListFinish(DScheduleType::List scheduleTypeList) { m_scheduleTypeList = scheduleTypeList; m_dataStatus.insert("ScheduleType", true); auto iterator = m_callbackMap.find("ScheduleType"); if (iterator != m_callbackMap.end()) { for (Func func : iterator.value()) { func(); } } emit signalScheduleTypeUpdate(); } /** * @brief AccountItem::slotGetScheduleListFinish * 获取日程数据完成事件 * @param map 日程数据 */ void AccountItem::slotGetScheduleListFinish(QMap map) { m_scheduleMap = map; emit signalScheduleUpdate(); } /** * @brief AccountItem::slotSearchScheduleListFinish * 搜索日程数据完成事件 * @param map 日程数据 */ void AccountItem::slotSearchScheduleListFinish(QMap map) { m_searchedScheduleMap = map; emit signalSearchScheduleUpdate(); } /** * @brief AccountItem::slotGetSysColorsFinish * 获取系统颜色完成事件 */ void AccountItem::slotGetSysColorsFinish(DTypeColor::List typeColorList) { m_typeColorList = typeColorList; } dde-calendar-5.14.13/schedule-plugin/src/calendarData/accountitem.h000066400000000000000000000073411473346337000251150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCOUNTITEM_H #define ACCOUNTITEM_H #include "dbus/dbusaccountrequest.h" #include //单项账户信息管理类 class AccountItem : public QObject { Q_OBJECT public: explicit AccountItem(const DAccount::Ptr &account, QObject *parent = nullptr); typedef std::function Func; typedef QSharedPointer Ptr; void resetAccount(); //获取账户数据 DAccount::Ptr getAccount(); //获取日程 QMap getScheduleMap(); // 获取日程类型信息集 DScheduleType::List getScheduleTypeList(); //根据类型ID获取日程类型 DScheduleType::Ptr getScheduleTypeByID(const QString &typeID); DScheduleType::Ptr getScheduleTypeByName(const QString &typeName); DSchedule::Ptr getScheduleByID(const QString &scheduleID); //获取颜色类型列表 DTypeColor::List getColorTypeList(); //更新账户信息 void updateAccountInfo(CallbackFunc callback = nullptr); //创建日程类型 void createJobType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback = nullptr); //更新类型信息 void updateScheduleType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback = nullptr); //根据类型ID删除日程类型 void deleteScheduleTypeByID(const QString &typeID, CallbackFunc callback = nullptr); //类型是否被日程使用 void scheduleTypeIsUsed(const QString &typeID, CallbackFunc callback); //创建日程 QString createSchedule(const DSchedule::Ptr &scheduleInfo); //更新日程 void updateSchedule(const DSchedule::Ptr &scheduleInfo, CallbackFunc callback = nullptr); //根据日程ID删除日程 void deleteScheduleByID(const QString &scheduleID, CallbackFunc callback = nullptr); //根据类型ID删除日程 void deleteSchedulesByTypeID(const QString &typeID, CallbackFunc callback = nullptr); //根据查询条件查询数据 DSchedule::Map querySchedulesWithParameter(const DScheduleQueryPar::Ptr &); //监听日程类型数据完成事件 void monitorScheduleTypeData(Func callback); signals: void signalAccountDataUpdate(); void signalScheduleUpdate(); void signalScheduleTypeUpdate(); void signalSearchScheduleUpdate(); void signalCreateFinish(const QString &scheduleID); void signalGetScheduleFinish(const DSchedule::Ptr &); public slots: //获取账户信息完成事件 void slotGetAccountInfoFinish(DAccount::Ptr); //获取日程类型数据完成事件 void slotGetScheduleTypeListFinish(DScheduleType::List); //获取日程数据完成事件 void slotGetScheduleListFinish(QMap); //搜索日程数据完成事件 void slotSearchScheduleListFinish(QMap); //获取系统颜色完成 void slotGetSysColorsFinish(DTypeColor::List); private: void initConnect(); private: DAccount::Ptr m_account; //账户数据 DScheduleType::List m_scheduleTypeList; //日程类型数据 DTypeColor::List m_typeColorList; //颜色数据 DbusAccountRequest *m_dbusRequest = nullptr; //dbus请求实例 //一年的日程信息 QMap m_scheduleMap {}; //搜索的日程信息 QMap m_searchedScheduleMap {}; //一年是否含有日程 QMap m_fullInfo {}; //一年的班休信息 QMap m_festivalInfo {}; QVector m_searchScheduleInfoVector {}; //回调函数 QMap> m_callbackMap; QMap m_dataStatus; //数据状态 }; #endif // ACCOUNTITEM_H dde-calendar-5.14.13/schedule-plugin/src/calendarData/accountmanager.cpp000066400000000000000000000140261473346337000261220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "accountmanager.h" AccountManager *AccountManager::m_accountManager = nullptr; AccountManager::AccountManager(QObject *parent) : QObject(parent) , m_dbusRequest(new DbusAccountManagerRequest(this)) { initConnect(); m_dbusRequest->clientIsShow(true); } void AccountManager::initConnect() { connect(m_dbusRequest, &DbusAccountManagerRequest::signalGetAccountListFinish, this, &AccountManager::slotGetAccountListFinish); connect(m_dbusRequest, &DbusAccountManagerRequest::signalGetGeneralSettingsFinish, this, &AccountManager::slotGetGeneralSettingsFinish); } AccountManager::~AccountManager() { m_dbusRequest->clientIsShow(false); } AccountManager *AccountManager::getInstance() { static AccountManager m_accountManager; return &m_accountManager; } /** * @brief AccountManager::getAccountList * 获取帐户列表 * @return 帐户列表 */ QList AccountManager::getAccountList() { return m_accountItemList; } /** * @brief AccountManager::getLocalAccountItem * 获取本地帐户 * @return */ AccountItem::Ptr AccountManager::getLocalAccountItem() { return m_localAccountItem; } /** * @brief AccountManager::getUnionAccountItem * 获取unionID帐户 * @return */ AccountItem::Ptr AccountManager::getUnionAccountItem() { return m_unionAccountItem; } DScheduleType::Ptr AccountManager::getScheduleTypeByScheduleTypeId(const QString &schduleTypeId) { DScheduleType::Ptr type = nullptr; for (AccountItem::Ptr p : gAccounManager->getAccountList()) { type = p->getScheduleTypeByID(schduleTypeId); if (nullptr != type) { break; } } return type; } AccountItem::Ptr AccountManager::getAccountItemByScheduleTypeId(const QString &schduleTypeId) { DScheduleType::Ptr type = getScheduleTypeByScheduleTypeId(schduleTypeId); return getAccountItemByAccountId(type->accountID()); } AccountItem::Ptr AccountManager::getAccountItemByAccountId(const QString &accountId) { AccountItem::Ptr account = nullptr; for (AccountItem::Ptr p : gAccounManager->getAccountList()) { if (p->getAccount()->accountID() == accountId) { account = p; break; } } return account; } AccountItem::Ptr AccountManager::getAccountItemByAccountName(const QString &accountName) { AccountItem::Ptr account = nullptr; for (AccountItem::Ptr p : gAccounManager->getAccountList()) { if (p->getAccount()->accountName() == accountName) { account = p; break; } } return account; } DCalendarGeneralSettings::Ptr AccountManager::getGeneralSettings() { return m_settings; } /** * @brief AccountManager::resetAccount * 重置帐户信息 */ void AccountManager::resetAccount() { m_dataInitFinished = false; m_localAccountItem.clear(); m_unionAccountItem.clear(); slotGetAccountListFinish(m_dbusRequest->getAccountList()); } /** * @brief AccountManager::downloadByAccountID * 根据帐户ID下拉数据 * @param accountID 帐户id * @param callback 回调函数 */ void AccountManager::downloadByAccountID(const QString &accountID, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->downloadByAccountID(accountID); } /** * @brief AccountManager::uploadNetWorkAccountData * 更新网络帐户数据 * @param callback 回调函数 */ void AccountManager::uploadNetWorkAccountData(CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->uploadNetWorkAccountData(); } void AccountManager::setCalendarGeneralSettings(DCalendarGeneralSettings::Ptr ptr, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->setCalendarGeneralSettings(ptr); } /** * @brief AccountManager::waitingData * 等待数据获取完成的事件,若数据已获取完成则直接执行回调函数,若数据还没有获取完成则将回调函数保存,待数据获取完成后执行 * @param callback 回调函数 */ void AccountManager::waitingData(Func callback) { if (m_dataInitFinished) { callback(); } else { m_waitingCallList.append(callback); } } /** * @brief AccountManager::execWaitingCall * 执行回调函数 */ void AccountManager::execWaitingCall() { m_dataInitFinished = true; for (Func call : m_waitingCallList) { call(); } //回调函数只是用一次 m_waitingCallList.clear(); } /** * @brief AccountManager::slotGetAccountListFinish * 获取帐户信息完成事件 * @param accountList 帐户列表 */ void AccountManager::slotGetAccountListFinish(DAccount::List accountList) { for (DAccount::Ptr account : accountList) { if (account->accountType() == DAccount::Account_Local) { m_localAccountItem.reset(new AccountItem(account, this)); m_localAccountItem->resetAccount(); m_accountItemList.append(m_localAccountItem); } if (account->accountType() == DAccount::Account_UnionID) { m_unionAccountItem.reset(new AccountItem(account, this)); m_unionAccountItem->resetAccount(); m_accountItemList.append(m_unionAccountItem); } } for (AccountItem::Ptr p : getAccountList()) { connect(p.data(), &AccountItem::signalScheduleUpdate, this, &AccountManager::signalScheduleUpdate); connect(p.data(), &AccountItem::signalSearchScheduleUpdate, this, &AccountManager::signalSearchScheduleUpdate); connect(p.data(), &AccountItem::signalScheduleTypeUpdate, this, &AccountManager::signalScheduleTypeUpdate); } } /** * @brief AccountManager::slotGetGeneralSettingsFinish * 获取通用设置完成事件 * @param ptr 通用设置数据 */ void AccountManager::slotGetGeneralSettingsFinish(DCalendarGeneralSettings::Ptr ptr) { m_settings = ptr; if (!m_dataInitFinished) { execWaitingCall(); } emit signalDataInitFinished(); emit signalGeneralSettingsUpdate(); } dde-calendar-5.14.13/schedule-plugin/src/calendarData/accountmanager.h000066400000000000000000000051631473346337000255710ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCOUNTMANAGER_H #define ACCOUNTMANAGER_H #include "dbus/dbusaccountmanagerrequest.h" #include "accountitem.h" //所有账户管理类 class AccountManager : public QObject { Q_OBJECT public: typedef std::function Func; ~AccountManager() override; static AccountManager *getInstance(); QList getAccountList(); AccountItem::Ptr getLocalAccountItem(); AccountItem::Ptr getUnionAccountItem(); DScheduleType::Ptr getScheduleTypeByScheduleTypeId(const QString &schduleTypeId); AccountItem::Ptr getAccountItemByScheduleTypeId(const QString &schduleTypeId); AccountItem::Ptr getAccountItemByAccountId(const QString &accountId); AccountItem::Ptr getAccountItemByAccountName(const QString &accountName); DCalendarGeneralSettings::Ptr getGeneralSettings(); //重新获取账户信息 void resetAccount(); //根据帐户ID下拉数据 void downloadByAccountID(const QString &accountID, CallbackFunc callback = nullptr); //更新网络帐户数据 void uploadNetWorkAccountData(CallbackFunc callback = nullptr); //设置通用设置 void setCalendarGeneralSettings(DCalendarGeneralSettings::Ptr ptr, CallbackFunc callback = nullptr); //等待数据获取完成的事件 void waitingData(Func callback); signals: void signalDataInitFinished(); void signalAccountUpdate(); void signalGeneralSettingsUpdate(); void signalAccountDataUpdate(); void signalScheduleUpdate(); void signalScheduleTypeUpdate(); void signalSearchScheduleUpdate(); public slots: //获取账户信息完成事件 void slotGetAccountListFinish(DAccount::List accountList); //获取通用设置完成事件 void slotGetGeneralSettingsFinish(DCalendarGeneralSettings::Ptr ptr); protected: explicit AccountManager(QObject *parent = nullptr); private: void initConnect(); //运行等待数据完成的回调函数 void execWaitingCall(); private: static AccountManager *m_accountManager; AccountItem::Ptr m_localAccountItem; AccountItem::Ptr m_unionAccountItem; DCalendarGeneralSettings::Ptr m_settings; QList m_accountItemList; DbusAccountManagerRequest *m_dbusRequest; QList m_waitingCallList; bool m_dataInitFinished = false; }; #define gAccounManager AccountManager::getInstance() #define gLocalAccountItem AccountManager::getLocalAccountItem() #define gUosAccountItem AccountManager::getUosAccountItem() #endif // ACCOUNTMANAGER_H dde-calendar-5.14.13/schedule-plugin/src/calendarData/dscheduledatamanager.cpp000066400000000000000000000066561473346337000272720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dscheduledatamanager.h" #include "commondef.h" #include "accountmanager.h" DScheduleDataManager *DScheduleDataManager::getInstance() { static DScheduleDataManager scheduleManager; return &scheduleManager; } QString DScheduleDataManager::createSchedule(const DSchedule::Ptr &schedule) { AccountItem::Ptr account = gAccounManager->getLocalAccountItem(); if (account.isNull()) { qCWarning(CommonLogger) << "account is null"; return QString(); } return account->createSchedule(schedule); } DSchedule::Ptr DScheduleDataManager::queryScheduleByScheduleID(const QString &scheduleID) { DSchedule::Ptr schedule; AccountItem::Ptr account = gAccounManager->getLocalAccountItem(); if (account.isNull()) { qCWarning(CommonLogger) << "account is null"; return nullptr; } return account->getScheduleByID(scheduleID); } bool DScheduleDataManager::deleteScheduleByScheduleID(const QString &scheduleID) { AccountItem::Ptr account = gAccounManager->getLocalAccountItem(); if (account.isNull()) { qCWarning(CommonLogger) << "account is null"; return false; } account->deleteScheduleByID(scheduleID); return true; } bool DScheduleDataManager::updateSchedule(const DSchedule::Ptr &schedule) { AccountItem::Ptr account = gAccounManager->getLocalAccountItem(); if (account.isNull()) { qCWarning(CommonLogger) << "account is null"; return false; } account->updateSchedule(schedule); return true; } bool DScheduleDataManager::isFestivalSchedule(const QString &scheduleTypeID) { return gAccounManager->getLocalAccountItem()->getScheduleTypeByID(scheduleTypeID)->privilege() == DScheduleType::Privilege::None; } DSchedule::Map DScheduleDataManager::querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms) { DSchedule::Map scheduleMap; AccountItem::Ptr account = gAccounManager->getLocalAccountItem(); return account.isNull() ? scheduleMap : account->querySchedulesWithParameter(params); } DSchedule::Map DScheduleDataManager::queryScheduleByRRule(const QDateTime &dtStart, const QDateTime &dtEnd, const DScheduleQueryPar::RRuleType &rrultTyep) { DScheduleQueryPar::Ptr queryPar(new DScheduleQueryPar); queryPar->setDtStart(dtStart); queryPar->setDtEnd(dtEnd); queryPar->setQueryType(DScheduleQueryPar::Query_RRule); queryPar->setRruleType(rrultTyep); return querySchedulesWithParameter(queryPar); } DSchedule::Map DScheduleDataManager::queryScheduleByLimit(const QDateTime &dtStart, const QDateTime &dtEnd, int topNum) { DScheduleQueryPar::Ptr queryPar(new DScheduleQueryPar); queryPar->setDtStart(dtStart); queryPar->setDtEnd(dtEnd); queryPar->setQueryType(DScheduleQueryPar::Query_Top); queryPar->setQueryTop(topNum); return querySchedulesWithParameter(queryPar); } DSchedule::Map DScheduleDataManager::queryScheduleBySummary(const QDateTime &dtStart, const QDateTime &dtEnd, const QString &summary) { DScheduleQueryPar::Ptr queryPar(new DScheduleQueryPar); queryPar->setDtStart(dtStart); queryPar->setDtEnd(dtEnd); queryPar->setKey(summary); queryPar->setQueryType(DScheduleQueryPar::Query_None); return querySchedulesWithParameter(queryPar); } DScheduleDataManager::DScheduleDataManager() { gAccounManager->resetAccount(); } dde-calendar-5.14.13/schedule-plugin/src/calendarData/dscheduledatamanager.h000066400000000000000000000023621473346337000267250ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DSCHEDULEDATAMANAGER_H #define DSCHEDULEDATAMANAGER_H #include "dschedule.h" #include "dschedulequerypar.h" #include //日程数据管理模块 class DScheduleDataManager { public: static DScheduleDataManager *getInstance(); QString createSchedule(const DSchedule::Ptr &schedule); DSchedule::Ptr queryScheduleByScheduleID(const QString &scheduleID); bool deleteScheduleByScheduleID(const QString &scheduleID); bool updateSchedule(const DSchedule::Ptr &schedule); //根据类型ID判断是否为节假日日程 bool isFestivalSchedule(const QString &scheduleTypeID); DSchedule::Map querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms); DSchedule::Map queryScheduleByRRule(const QDateTime &dtStart, const QDateTime &dtEnd, const DScheduleQueryPar::RRuleType &rrultTyep); DSchedule::Map queryScheduleByLimit(const QDateTime &dtStart, const QDateTime &dtEnd, int topNum); DSchedule::Map queryScheduleBySummary(const QDateTime &dtStart, const QDateTime &dtEnd, const QString &summary); private: DScheduleDataManager(); }; #endif // DSCHEDULEDATAMANAGER_H dde-calendar-5.14.13/schedule-plugin/src/calendarData/scheduledatamanage.cpp000066400000000000000000000032651473346337000267350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduledatamanage.h" #include "accountmanager.h" #include "accountmanager.h" #include #include CScheduleDataManage *CScheduleDataManage::m_vscheduleDataManage = new CScheduleDataManage; // CSchedulesColor CScheduleDataManage::getScheduleColorByType(const QString &type) { CSchedulesColor color; DTypeColor colorinfo; DScheduleType::Ptr typePtr = gAccounManager->getScheduleTypeByScheduleTypeId(type); QColor typeColor; if (!typePtr.isNull()) { typeColor = QColor(gAccounManager->getScheduleTypeByScheduleTypeId(type)->typeColor().colorCode()); } color.orginalColor = typeColor; color.normalColor = color.orginalColor; color.normalColor.setAlphaF(0.2); color.pressColor = color.orginalColor; color.pressColor.setAlphaF(0.35); color.hoverColor = color.orginalColor; color.hoverColor.setAlphaF(0.3); color.hightColor = color.orginalColor; color.hightColor.setAlphaF(0.35); return color; } QColor CScheduleDataManage::getSystemActiveColor() { return DGuiApplicationHelper::instance()->applicationPalette().highlight().color(); } QColor CScheduleDataManage::getTextColor() { return DGuiApplicationHelper::instance()->applicationPalette().text().color(); } void CScheduleDataManage::setTheMe(int type) { m_theme = type; } CScheduleDataManage *CScheduleDataManage::getScheduleDataManage() { return m_vscheduleDataManage; } CScheduleDataManage::CScheduleDataManage(QObject *parent) : QObject(parent) { } CScheduleDataManage::~CScheduleDataManage() { } dde-calendar-5.14.13/schedule-plugin/src/calendarData/scheduledatamanage.h000066400000000000000000000022511473346337000263740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEDATAMANAGE_H #define SCHEDULEDATAMANAGE_H #include "dschedule.h" #include "dscheduletype.h" #include #include #include #include DGUI_USE_NAMESPACE struct CSchedulesColor { QColor normalColor; //正常状态颜色 QColor hoverColor; //鼠标悬浮颜色 QColor pressColor; //鼠标点击颜色 QColor hightColor; //高亮色 QColor orginalColor; //最初的颜色 }; class CScheduleDataManage : public QObject { Q_OBJECT public: static CScheduleDataManage *getScheduleDataManage(); //根据日程类型ID获取颜色信息 CSchedulesColor getScheduleColorByType(const QString &type); static QColor getSystemActiveColor(); static QColor getTextColor(); void setTheMe(int type = 0); int getTheme() const { return m_theme; } private: CScheduleDataManage(QObject *parent = nullptr); ~CScheduleDataManage(); private: int m_theme = 0; static CScheduleDataManage *m_vscheduleDataManage; }; #endif // SCHEDULEVIEW_H dde-calendar-5.14.13/schedule-plugin/src/data/000077500000000000000000000000001473346337000207725ustar00rootroot00000000000000dde-calendar-5.14.13/schedule-plugin/src/data/canceljsondata.cpp000066400000000000000000000004541473346337000244520ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "canceljsondata.h" #include #include "../globaldef.h" cancelJsonData::cancelJsonData() : JsonData() { } cancelJsonData::~cancelJsonData() { } dde-calendar-5.14.13/schedule-plugin/src/data/canceljsondata.h000066400000000000000000000005201473346337000241110ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CANCELJSONDATA_H #define CANCELJSONDATA_H #include "jsondata.h" class cancelJsonData : public JsonData { public: cancelJsonData(); ~cancelJsonData() override; }; #endif // CANCELJSONDATA_H dde-calendar-5.14.13/schedule-plugin/src/data/changejsondata.cpp000066400000000000000000000036661473346337000244620ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "changejsondata.h" #include "../globaldef.h" #include changejsondata::changejsondata() : JsonData() { } void changejsondata::jsonObjResolve(const QJsonObject &jsobj) { if (jsobj[JSON_NAME] == JSON_FROMDATETIME) { fromDatetimeJsonResolve(jsobj); return; } if (jsobj[JSON_NAME] == JSON_TODATETIME) { toDatetimeJsonResolve(jsobj); return; } if (jsobj[JSON_NAME] == JSON_TOPLACE) { toPlaceJsonResolve(jsobj); return; } } void changejsondata::setDefaultValue() { JsonData::setDefaultValue(); m_fromDateTime.clear(); m_toDateTime.clear(); m_toPlaceStr.clear(); } void changejsondata::fromDatetimeJsonResolve(const QJsonObject &jsobj) { setFromDateTime(suggestDatetimeResolve(jsobj)); } void changejsondata::toDatetimeJsonResolve(const QJsonObject &jsobj) { setToDateTime(suggestDatetimeResolve(jsobj)); } void changejsondata::toPlaceJsonResolve(const QJsonObject &jsobj) { setToPlaceStr(jsobj[JSON_VALUE].toString()); } QString changejsondata::toPlaceStr() const { return m_toPlaceStr; } void changejsondata::setToPlaceStr(const QString &toPlaceStr) { m_toPlaceStr = toPlaceStr; } bool changejsondata::isVaild() const { return this->m_toDateTime.suggestDatetime.size() ==0 && this->m_fromDateTime.suggestDatetime.size()==0 && this->toPlaceStr().isEmpty() && JsonData::isVaild(); } SemanticsDateTime changejsondata::toDateTime() const { return m_toDateTime; } void changejsondata::setToDateTime(const SemanticsDateTime &toDateTime) { m_toDateTime = toDateTime; } SemanticsDateTime changejsondata::fromDateTime() const { return m_fromDateTime; } void changejsondata::setFromDateTime(const SemanticsDateTime &fromDateTime) { m_fromDateTime = fromDateTime; } dde-calendar-5.14.13/schedule-plugin/src/data/changejsondata.h000066400000000000000000000034341473346337000241200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CHANGEJSONDATA_H #define CHANGEJSONDATA_H #include "jsondata.h" class changejsondata : public JsonData { public: changejsondata(); /** * @brief fromDateTime 获取语义from时间数据 * @return 时间数据 */ SemanticsDateTime fromDateTime() const; /** * @brief setFromDateTime 设置语义from时间数据 * @param fromDateTime 时间数据 */ void setFromDateTime(const SemanticsDateTime &fromDateTime); /** * @brief toDateTime 获取语义toDateTime时间数据 * @return 时间数据 */ SemanticsDateTime toDateTime() const; /** * @brief setToDateTime 设置语义toDateTime时间数据 * @param toDateTime 时间数据 */ void setToDateTime(const SemanticsDateTime &toDateTime); QString toPlaceStr() const; void setToPlaceStr(const QString &toPlaceStr); /** * @brief isVaild 判断json是否为原始数据 * @return true为原始数据 */ bool isVaild() const override; private: void jsonObjResolve(const QJsonObject &jsobj) override; void setDefaultValue() override; void fromDatetimeJsonResolve(const QJsonObject &jsobj); void toDatetimeJsonResolve(const QJsonObject &jsobj); void toPlaceJsonResolve(const QJsonObject &jsobj); private: /** * @brief m_fromDateTime 需要修改的时间信息 */ SemanticsDateTime m_fromDateTime {}; /** * @brief m_toDateTime 修改到的时间信息 */ SemanticsDateTime m_toDateTime {}; /** * @brief m_toPlaceStr 修改的日常内容 */ QString m_toPlaceStr {}; }; #endif // CHANGEJSONDATA_H dde-calendar-5.14.13/schedule-plugin/src/data/clocaldata.cpp000066400000000000000000000022611473346337000235660ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "clocaldata.h" CLocalData::CLocalData() { } DSchedule::List CLocalData::scheduleInfoVector() const { return m_scheduleInfoVector; } void CLocalData::setScheduleInfoVector(const DSchedule::List &scheduleInfoVector) { m_scheduleInfoVector = scheduleInfoVector; } DSchedule::Ptr CLocalData::SelectInfo() const { return m_SelectInfo; } void CLocalData::setSelectInfo(const DSchedule::Ptr &SelectInfo) { m_SelectInfo = SelectInfo; } void CLocalData::setToTitleName(const QString &title) { m_ToTitleName = title; } QString CLocalData::getToTitleName() const { return m_ToTitleName; } void CLocalData::setToTime(const SemanticsDateTime &timeInfo) { m_ToTime = timeInfo; } SemanticsDateTime CLocalData::getToTime() const { return m_ToTime; } int CLocalData::getOffet() const { return m_offset; } void CLocalData::setOffset(int offset) { m_offset = offset; } void CLocalData::setNewInfo(const DSchedule::Ptr &newInfo) { m_NewInfo = newInfo; } DSchedule::Ptr CLocalData::getNewInfo() const { return m_NewInfo; } dde-calendar-5.14.13/schedule-plugin/src/data/clocaldata.h000066400000000000000000000024611473346337000232350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CLOCALDATA_H #define CLOCALDATA_H #include "dschedule.h" #include "timedatastruct.h" #include class CLocalData { public: typedef QSharedPointer Ptr; CLocalData(); DSchedule::List scheduleInfoVector() const; void setScheduleInfoVector(const DSchedule::List &scheduleInfoVector); DSchedule::Ptr SelectInfo() const; void setSelectInfo(const DSchedule::Ptr &SelectInfo); void setToTitleName(const QString &title); QString getToTitleName() const; /** * @brief setToTime 设置修改的日程时间 * @param timeInfo 日程时间 */ void setToTime(const SemanticsDateTime &timeInfo); /** * @brief getToTime 获取修改的日程时间 * @return */ SemanticsDateTime getToTime() const; int getOffet() const; void setOffset(int offset); void setNewInfo(const DSchedule::Ptr &newInfo); DSchedule::Ptr getNewInfo() const; private: DSchedule::List m_scheduleInfoVector {}; DSchedule::Ptr m_SelectInfo {}; DSchedule::Ptr m_NewInfo {}; QString m_ToTitleName {""}; SemanticsDateTime m_ToTime {}; int m_offset {-1}; }; #endif // CLOCALDATA_H dde-calendar-5.14.13/schedule-plugin/src/data/createjsondata.cpp000066400000000000000000000005211473346337000244630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "createjsondata.h" #include #include #include #include #include "../globaldef.h" CreateJsonData::CreateJsonData() : JsonData() { } dde-calendar-5.14.13/schedule-plugin/src/data/createjsondata.h000066400000000000000000000004731473346337000241360ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CREATEJSONDATA_H #define CREATEJSONDATA_H #include "jsondata.h" class CreateJsonData : public JsonData { public: CreateJsonData(); private: }; #endif // CREATEJSONDATA_H dde-calendar-5.14.13/schedule-plugin/src/data/jsondata.cpp000066400000000000000000000244631473346337000233120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "jsondata.h" #include #include #include #include #include "../globaldef.h" JsonData::JsonData() { } JsonData::~JsonData() { } void JsonData::JosnResolve(const QJsonObject &jsObj) { setDefaultValue(); if (jsObj.contains("slots") && jsObj["slots"].isArray()) { auto slotsObjArr = jsObj["slots"].toArray(); for (int j = 0; j < slotsObjArr.size(); ++j) { auto slotsObj = slotsObjArr[j].toObject(); if (slotsObj.contains(JSON_NAME) && slotsObj[JSON_NAME].isString()) { if (slotsObj[JSON_NAME] == JSON_CONTENT) { contentJsonResolve(slotsObj); continue; } if (slotsObj[JSON_NAME] == JSON_REPEAT) { repeatJsonResolve(slotsObj); continue; } if (slotsObj[JSON_NAME] == JSON_DATETIME) { datetimeJsonResolve(slotsObj); continue; } if (slotsObj[JSON_NAME] == JSON_PROPERTY) { propertyJsonResolve(slotsObj); continue; } if (slotsObj[JSON_NAME] == JSON_POSRANK_OFFSET) { posRankOffsetResolve(slotsObj); continue; } //如果存在时间无效槽 则表示输入了无效的时间 if (slotsObj[JSON_NAME] == JSON_DateTimeInvalid) { m_DateTimeInvalid = true; continue; } jsonObjResolve(slotsObj); } } } } QString JsonData::SuggestMsg() const { return m_SuggestMsg; } void JsonData::setSuggestMsg(const QString &SuggestMsg) { m_SuggestMsg = SuggestMsg; } bool JsonData::ShouldEndSession() const { return m_ShouldEndSession; } void JsonData::setShouldEndSession(bool ShouldEndSession) { m_ShouldEndSession = ShouldEndSession; } void JsonData::setRepeatStatus(const JsonData::RepeatStatus &RepeatStatus) { m_RepeatStatus = RepeatStatus; } QString JsonData::TitleName() const { return m_TitleName; } void JsonData::setTitleName(const QString &TitleName) { m_TitleName = TitleName; } void JsonData::setDateTimeStatus(const JsonData::DateTimeStatus &DateTimeStatus) { m_DateTimeStatus = DateTimeStatus; } JsonData::RepeatStatus JsonData::getRepeatStatus() const { return m_RepeatStatus; } QVector JsonData::getRepeatNum() const { return m_RepeatNum; } void JsonData::setRepeatNum(const QVector &RepeatNum) { m_RepeatNum = RepeatNum; } SemanticsDateTime JsonData::getDateTime() const { return m_DateTime; } void JsonData::setDateTime(const SemanticsDateTime &DateTime) { m_DateTime = DateTime; } void JsonData::contentJsonResolve(const QJsonObject &jsobj) { setTitleName(jsobj[JSON_VALUE].toString()); } void JsonData::repeatJsonResolve(const QJsonObject &jsobj) { QString repeatValue = jsobj[JSON_VALUE].toString(); if (repeatValue.contains("EVERYEAR")) { setRepeatStatus(EVEY); return; } if (repeatValue.contains("EVERYDAY")) { setRepeatStatus(EVED); return; } if (repeatValue.contains("WORKDAY")) { setRepeatStatus(WORKD); return; } if (repeatValue.contains("RESTDAY")) { setRepeatStatus(RESTD); return; } if (repeatValue.contains("WEEKEND")) { setRepeatStatus(RESTD); return; } QRegExp rxlen("([W,M])([0-9]{0,2})"); int pos = 0; QVector repeatnum {}; repeatnum.clear(); while ((pos = rxlen.indexIn(repeatValue, pos)) != -1) { if (rxlen.cap(1).contains("M")) { setRepeatStatus(EVEM); } if (rxlen.cap(1).contains("W")) { setRepeatStatus(EVEW); } if (rxlen.cap(0).size() > 0 && rxlen.cap(2) != "") { repeatnum.append(rxlen.cap(2).toInt()); } pos += rxlen.matchedLength(); } setRepeatNum(repeatnum); } void JsonData::datetimeJsonResolve(const QJsonObject &jsobj) { setDateTime(suggestDatetimeResolve(jsobj)); } void JsonData::propertyJsonResolve(const QJsonObject &jsobj) { QString propertyValue = jsobj[JSON_VALUE].toString(); if (propertyValue == JSON_NEXT) { setPropertyStatus(NEXT); return; } if (propertyValue == JSON_LAST) { setPropertyStatus(LAST); return; } if (propertyValue == JSON_ALL) { setPropertyStatus(ALL); return; } if (propertyValue == JSON_THIS) { setPropertyStatus(PRO_THIS); return; } } void JsonData::posRankOffsetResolve(const QJsonObject &jsobj) { setOffset(jsobj[JSON_VALUE].toString().toInt()); } SemanticsDateTime JsonData::suggestDatetimeResolve(const QJsonObject &jsobj) { SemanticsDateTime semdatetime {}; semdatetime.clear(); QString DateTimeJson = jsobj[JSON_NORMVALUE].toString(); QJsonParseError jsonError; QJsonDocument doc = QJsonDocument::fromJson(DateTimeJson.toUtf8(), &jsonError); //建议时间 QString sugdateTimeStr{""}; //模糊时间 QString dateTimeStr{""}; if (!doc.isNull() && (jsonError.error == QJsonParseError::NoError)) { auto rootObject = doc.object(); sugdateTimeStr = (rootObject["suggestDatetime"].toString()); dateTimeStr = rootObject["datetime"].toString(); } //建议时间解析赋值 if (sugdateTimeStr != "") { if (sugdateTimeStr.contains("/")) { QStringList dateTimeList = sugdateTimeStr.split("/"); for (int i = 0; i < dateTimeList.size(); ++i) { //如果数据不为空,添加解析数据 if (!dateTimeList.at(i).isEmpty()) { semdatetime.suggestDatetime.append(resolveNormValue(dateTimeList.at(i))); } } } else { semdatetime.suggestDatetime.append(resolveNormValue(sugdateTimeStr)); } } //模糊时间解析赋值 if (!dateTimeStr.isEmpty()) { if (dateTimeStr.contains("/")) { QStringList dateTimeList = dateTimeStr.split("/"); for (int i = 0; i < dateTimeList.size(); ++i) { //如果数据不为空,添加解析数据 if (!dateTimeList.at(i).isEmpty()) { semdatetime.dateTime.append(resolveDateTimeValeu(dateTimeList.at(i))); } } } else { semdatetime.dateTime.append(resolveDateTimeValeu(dateTimeStr)); } } return semdatetime; } SuggestDatetimeInfo JsonData::resolveNormValue(const QString &str) { SuggestDatetimeInfo datetimeInfo; datetimeInfo.hasTime = str.contains(JSON_DATETIME_DELIMITER); datetimeInfo.datetime = QDateTime::fromString(str, Qt::ISODate); //设置处理后的日期字符 datetimeInfo.strDateTime = strTransform(str); return datetimeInfo; } DateTimeInfo JsonData::resolveDateTimeValeu(const QString &dateTimeStr) { DateTimeInfo dateTimeInfo{}; dateTimeInfo.strDateTime = dateTimeStr; //根据关键符合“T”分割字符 QStringList dateList = dateTimeStr.split(JSON_DATETIME_DELIMITER); //如果只有一个表示没有时间信息 if (dateList.size() == 1) { dateTimeInfo.m_Date = QDate::fromString(dateList.at(0), DATEFORMAT); dateTimeInfo.hasDate = true; dateTimeInfo.hasTime = false; } else if (dateList.size() > 1) { //如果第一个数据为空表示没有日期信息 if (dateList.at(0).isEmpty()) { dateTimeInfo.hasDate = false; } else { dateTimeInfo.m_Date = QDate::fromString(dateList.at(0), DATEFORMAT); dateTimeInfo.hasDate = true; } dateTimeInfo.m_Time = QTime::fromString(dateList.at(1), TIMEFORMAT); dateTimeInfo.hasTime = true; } return dateTimeInfo; } QString JsonData::strTransform(QString oldStr) { QString newStr; //对助手返回的字符进行分割 QStringList dateList = oldStr.split(JSON_DATETIME_DELIMITER); if (dateList.size() == 1) { //只有日期 //处理日期 QString strDate = strDateTransform(dateList.at(0)); //返回字符非空 if (!strDate.isEmpty()) return strDate; } else if (dateList.size() > 1) { //有日期和时间 QString strDate = ""; if (!dateList.at(0).isEmpty()) { //设置日期格式 if (!strDateTransform(dateList.at(0)).isEmpty()) strDate = strDateTransform(dateList.at(0)); } //返回日期+具体时间 return strDate + dateList.at(1); } //如果不包含以上情况,返回空 return ""; } QString JsonData::strDateTransform(QString oldStrDate) { //对日期进行分割 QStringList strDateList = oldStrDate.split(JSON_STR_DATE_DELIMITER); if (strDateList.size() == 1) { //只有年份 return strDateList.at(0) + YEAR; } else if (strDateList.size() == 2) { //年份+月份 return strDateList.at(0) + YEAR + strDateList.at(1) + MONTH; } else if (strDateList.size() == 3) { //年+月+日 return strDateList.at(0) + YEAR + strDateList.at(1) + MONTH + strDateList.at(2) + DAY; } //如果没有以上情况,返回空 return ""; } void JsonData::setDefaultValue() { setTitleName(""); setDateTimeStatus(NODATE); setRepeatStatus(NONE); setPropertyStatus(PRO_NONE); m_RepeatNum.clear(); m_DateTime.clear(); setOffset(-1); } void JsonData::jsonObjResolve(const QJsonObject &jsobj) { Q_UNUSED(jsobj); } bool JsonData::getDateTimeInvalid() const { return m_DateTimeInvalid; } JsonData::PropertyStatus JsonData::getPropertyStatus() const { return m_propertyStatus; } void JsonData::setPropertyStatus(const PropertyStatus &propertyStatus) { m_propertyStatus = propertyStatus; } int JsonData::offset() const { return m_offset; } void JsonData::setOffset(int offset) { m_offset = offset; } bool JsonData::isVaild() const { return TitleName() == "" && getDateTime().suggestDatetime.size() == 0 && m_offset == -1 && m_RepeatStatus == NONE && m_propertyStatus == PRO_NONE; } dde-calendar-5.14.13/schedule-plugin/src/data/jsondata.h000066400000000000000000000070311473346337000227470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef JSONDATA_H #define JSONDATA_H #include #include #include "timedatastruct.h" class QJsonObject; class JsonData { public: enum RepeatStatus { NONE, EVED, EVEW, EVEM, EVEY, WORKD, RESTD }; enum DateTimeStatus { NODATE, NOTIME, ALLHAS }; enum PropertyStatus { PRO_NONE, NEXT, LAST, ALL, PRO_THIS }; public: JsonData(); virtual ~JsonData(); void JosnResolve(const QJsonObject &jsObj); QString SuggestMsg() const; void setSuggestMsg(const QString &SuggestMsg); bool ShouldEndSession() const; void setShouldEndSession(bool ShouldEndSession); void setRepeatStatus(const RepeatStatus &RepeatStatus); QString TitleName() const; void setTitleName(const QString &TitleName); void setDateTimeStatus(const DateTimeStatus &DateTimeStatus); RepeatStatus getRepeatStatus() const; QVector getRepeatNum() const; void setRepeatNum(const QVector &RepeatNum); SemanticsDateTime getDateTime() const; void setDateTime(const SemanticsDateTime &DateTime); PropertyStatus getPropertyStatus() const; void setPropertyStatus(const PropertyStatus &propertyStatus); int offset() const; void setOffset(int offset); /** * @brief isVaild 判断json是否为原始数据 * @return true为原始数据 */ virtual bool isVaild() const; //获取时间有效性 bool getDateTimeInvalid() const; protected: void contentJsonResolve(const QJsonObject &jsobj); void repeatJsonResolve(const QJsonObject &jsobj); /** * @brief datetimeJsonResolve 时间关键字解析 * @param jsobj json对象 */ void datetimeJsonResolve(const QJsonObject &jsobj); void propertyJsonResolve(const QJsonObject &jsobj); /** * @brief posRankOffsetResolve 偏移关键字解析 * @param jsobj json对象 */ void posRankOffsetResolve(const QJsonObject &jsobj); SemanticsDateTime suggestDatetimeResolve(const QJsonObject &jsobj); /** * @brief resolveNormValue 解析建议时间数据 * @param str string格式的建议时间 * @return 建议时间 */ SuggestDatetimeInfo resolveNormValue(const QString &str); /** * @brief resolveDateTimeValeu 解析模糊时间数据 * @param dateTimeStr string格式的模糊时间 * @return 模糊时间 */ DateTimeInfo resolveDateTimeValeu(const QString &dateTimeStr); //修改助手返回日期和时间字符格式 QString strTransform(QString oldStr); //修改助手返回日期的字符格式 QString strDateTransform(QString oldStrDate); virtual void setDefaultValue(); virtual void jsonObjResolve(const QJsonObject &jsobj); private: QString m_SuggestMsg {""}; bool m_ShouldEndSession {false}; RepeatStatus m_RepeatStatus {NONE}; QVector m_RepeatNum {}; DateTimeStatus m_DateTimeStatus {NODATE}; PropertyStatus m_propertyStatus {PRO_NONE}; QString m_TitleName {""}; SemanticsDateTime m_DateTime {}; int m_offset {-1}; bool m_DateTimeInvalid {false}; }; #endif // JSONDATA_H dde-calendar-5.14.13/schedule-plugin/src/data/queryjsondata.cpp000066400000000000000000000005161473346337000243710ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "queryjsondata.h" #include #include #include #include #include "../globaldef.h" QueryJsonData::QueryJsonData() : JsonData() { } dde-calendar-5.14.13/schedule-plugin/src/data/queryjsondata.h000066400000000000000000000004541473346337000240370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef QUERYJSONDATA_H #define QUERYJSONDATA_H #include "jsondata.h" class QueryJsonData : public JsonData { public: QueryJsonData(); }; #endif // QUERYJSONDATA_H dde-calendar-5.14.13/schedule-plugin/src/data/timedatastruct.h000066400000000000000000000024741473346337000242070ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TIMEDATASTRUCT_H #define TIMEDATASTRUCT_H #include #include /** * @brief The ToDateTimeInfo struct 修改时间信息 * m_Date 日期信息 * m_Time 时间信息 * hasDate 是否存在日期信息 * hasTime 是否存在时间信息 */ struct DateTimeInfo { QDate m_Date{}; QTime m_Time{}; bool hasDate{false}; bool hasTime{false}; QString strDateTime; //保存原始数据 }; /** * @brief The SuggestDatetimeInfo struct 建议时间信息 * datetime 时间信息 * hasTime 是否存在具体时间点 */ struct SuggestDatetimeInfo { QDateTime datetime {}; bool hasTime {false}; QString strDateTime; //保存原始数据 }; /** * @brief The ScheduleDateTime struct 语言时间信息 * m_DateTime 时间信息,获取时间点的时候需要用到 * m_sugTime 建议使用的时间信息 */ struct SemanticsDateTime { QVector dateTime{}; QVector suggestDatetime{}; /** * @brief clear 清空数据 */ void clear() { this->dateTime.clear(); this->suggestDatetime.clear(); } }; #endif // TIMEDATASTRUCT_H dde-calendar-5.14.13/schedule-plugin/src/dbus/000077500000000000000000000000001473346337000210165ustar00rootroot00000000000000dde-calendar-5.14.13/schedule-plugin/src/dbus/cdbuspendingcallwatcher.cpp000066400000000000000000000020461473346337000264030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cdbuspendingcallwatcher.h" CDBusPendingCallWatcher::CDBusPendingCallWatcher(const QDBusPendingCall &call, QString member, QObject *parent) : QDBusPendingCallWatcher(call, parent) , m_member(member) { connect(this, &QDBusPendingCallWatcher::finished, this, [this]() { //转发调用完成事件 emit this->signalCallFinished(this); }); } /** * @brief CDBusPendingCallWatcher::setCallbackFunc * 设置回调函数 * @param func 回调函数 */ void CDBusPendingCallWatcher::setCallbackFunc(CallbackFunc func) { m_func = func; } /** * @brief CDBusPendingCallWatcher::getCallbackFunc * 获取回调函数 * @return 回调函数 */ CallbackFunc CDBusPendingCallWatcher::getCallbackFunc() { return m_func; } /** * @brief CDBusPendingCallWatcher::getmember * 设置调用方法名 * @return 方法名 */ QString CDBusPendingCallWatcher::getmember() { return m_member; } dde-calendar-5.14.13/schedule-plugin/src/dbus/cdbuspendingcallwatcher.h000066400000000000000000000024051473346337000260470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CDBUSPENDINGCALLWATCHER_H #define CDBUSPENDINGCALLWATCHER_H #include /** * @brief The CallMessge struct * dbus请求回调数据 */ struct CallMessge { int code; //返回码,0:请求成功,大于0:请求失败 QString msg; //返回码说明,根据实际需求可返回任意字符串 }; /** * @brief CallbackFunc * dbus请求回调函数类型 */ typedef std::function CallbackFunc; //继承QDbus回调观察者,将部分自定义的数据包装在回调类中 class CDBusPendingCallWatcher : public QDBusPendingCallWatcher { Q_OBJECT public: explicit CDBusPendingCallWatcher(const QDBusPendingCall &call, QString member, QObject *parent = nullptr); //设置回调函数 void setCallbackFunc(CallbackFunc func); //获取回调函数 CallbackFunc getCallbackFunc(); //设置调用方法名 QString getmember(); signals: void signalCallFinished(CDBusPendingCallWatcher *); public slots: private: QString m_member; //调用的dbus方法名 CallbackFunc m_func = nullptr; //回调函数指针 }; #endif // CDBUSPENDINGCALLWATCHER_H dde-calendar-5.14.13/schedule-plugin/src/dbus/dbusaccountmanagerrequest.cpp000066400000000000000000000102201473346337000267730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusaccountmanagerrequest.h" #include "commondef.h" #include DbusAccountManagerRequest::DbusAccountManagerRequest(QObject *parent) : DbusRequestBase("/com/deepin/dataserver/Calendar/AccountManager", "com.deepin.dataserver.Calendar.AccountManager", QDBusConnection::sessionBus(), parent) { } /** * @brief DbusAccountManagerRequest::getAccountList * 请求帐户列表 */ DAccount::List DbusAccountManagerRequest::getAccountList() { DAccount::List accountList; QList argumentList; QDBusPendingCall pCall = asyncCallWithArgumentList(QStringLiteral("getAccountList"), argumentList); pCall.waitForFinished(); QDBusPendingReply reply = pCall.reply(); //获取返回值 QString str = reply.argumentAt<0>(); //解析字符串 DAccount::fromJsonListString(accountList, str); return accountList; } /** * @brief DbusAccountManagerRequest::downloadByAccountID * 根据帐户id下拉数据 * @param accountID 帐户id */ void DbusAccountManagerRequest::downloadByAccountID(const QString &accountID) { QList argumentList; argumentList << QVariant(accountID); asyncCall("downloadByAccountID", argumentList); } /** * @brief DbusAccountManagerRequest::uploadNetWorkAccountData * 更新网络帐户数据 */ void DbusAccountManagerRequest::uploadNetWorkAccountData() { asyncCall("uploadNetWorkAccountData"); } /** * @brief DbusAccountManagerRequest::getCalendarGeneralSettings * 获取通用设置 */ void DbusAccountManagerRequest::getCalendarGeneralSettings() { asyncCall("getCalendarGeneralSettings"); } /** * @brief DbusAccountManagerRequest::setCalendarGeneralSettings * 设置通用设置 * @param ptr 通用设置 */ void DbusAccountManagerRequest::setCalendarGeneralSettings(DCalendarGeneralSettings::Ptr ptr) { QString jsonStr; DCalendarGeneralSettings::toJsonString(ptr, jsonStr); asyncCall("setCalendarGeneralSettings", QVariant(jsonStr)); } void DbusAccountManagerRequest::clientIsShow(bool isShow) { QList argumentList; argumentList << isShow; //不需要返回结果,发送完直接结束 callWithArgumentList(QDBus::NoBlock, QStringLiteral("calendarIsShow"), argumentList); } /** * @brief DbusAccountManagerRequest::slotCallFinished * dbus调用完成事件 * @param call 回调类 */ void DbusAccountManagerRequest::slotCallFinished(CDBusPendingCallWatcher *call) { int ret = 0; bool canCall = true; //错误处理 if (call->isError()) { //打印错误信息 qCWarning(CommonLogger) << call->reply().member() << call->error().message(); ret = 1; } else if (call->getmember() == "getAccountList") { //"getAccountList"方法回调事件 QDBusPendingReply reply = *call; //获取返回值 QString str = reply.argumentAt<0>(); DAccount::List accountList; //解析字符串 if (DAccount::fromJsonListString(accountList, str)) { emit signalGetAccountListFinish(accountList); } else { qCWarning(CommonLogger)<< "AccountList Parsing failed!"; ret = 2; } } else if (call->getmember() == "getCalendarGeneralSettings") { qCInfo(CommonLogger) << "getCalendarGeneralSettings"; QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); DCalendarGeneralSettings::Ptr ptr; ptr.reset(new DCalendarGeneralSettings()); if (DCalendarGeneralSettings::fromJsonString(ptr, str)) { emit signalGetGeneralSettingsFinish(ptr); } else { qCWarning(CommonLogger) <<"AccountList Parsing failed!"; ret = 2; } } else if (call->getmember() == "setCalendarGeneralSettings") { canCall = false; setCallbackFunc(call->getCallbackFunc()); getCalendarGeneralSettings(); } //执行回调函数 if (canCall && call->getCallbackFunc() != nullptr) { call->getCallbackFunc()({ret, ""}); } //释放内存 call->deleteLater(); } dde-calendar-5.14.13/schedule-plugin/src/dbus/dbusaccountmanagerrequest.h000066400000000000000000000023711473346337000264500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSACCOUNTMANAGERREQUEST_H #define DBUSACCOUNTMANAGERREQUEST_H #include "dbusrequestbase.h" #include "daccount.h" #include "dcalendargeneralsettings.h" //所有账户信息管理类 class DbusAccountManagerRequest : public DbusRequestBase { Q_OBJECT public: explicit DbusAccountManagerRequest(QObject *parent = nullptr); //获取账户列表 DAccount::List getAccountList(); //根据账户id下拉数据 void downloadByAccountID(const QString &accountID); //更新网络账户数据 void uploadNetWorkAccountData(); //获取通用设置 void getCalendarGeneralSettings(); //设置通用设置 void setCalendarGeneralSettings(DCalendarGeneralSettings::Ptr ptr); // void clientIsShow(bool isShow); signals: //获取账户列表数据完成信号 void signalGetAccountListFinish(DAccount::List accountList); //获取通用设置完成信号 void signalGetGeneralSettingsFinish(DCalendarGeneralSettings::Ptr ptr); public slots: //dbus调用完成事件 void slotCallFinished(CDBusPendingCallWatcher *) override; }; #endif // DBUSACCOUNTMANAGERREQUEST_H dde-calendar-5.14.13/schedule-plugin/src/dbus/dbusaccountrequest.cpp000066400000000000000000000243501473346337000254510ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusaccountrequest.h" #include "commondef.h" #include DbusAccountRequest::DbusAccountRequest(const QString &path, const QString &interface, QObject *parent) : DbusRequestBase(path, interface, QDBusConnection::sessionBus(), parent) { } /** * @brief getAccountInfo 获取帐户信息 * @return */ void DbusAccountRequest::getAccountInfo() { asyncCall("getAccountInfo"); } void DbusAccountRequest::updateAccountInfo(const DAccount::Ptr &account) { QString jsonStr; DAccount::toJsonString(account, jsonStr); asyncCall("updateAccountInfo", QVariant(jsonStr)); } /** * @brief getScheduleTypeList 获取日程类型信息集 * @return */ DScheduleType::List DbusAccountRequest::getScheduleTypeList() { DScheduleType::List typeList; QList argumentList; QDBusPendingCall pCall = asyncCallWithArgumentList(QStringLiteral("getScheduleTypeList"), argumentList); pCall.waitForFinished(); QDBusMessage reply = pCall.reply(); if (reply.type() != QDBusMessage::ReplyMessage) { qCWarning(CommonLogger) << "getScheduleTypeList error ," << reply; return typeList; } QDBusReply scheduleReply = reply; DScheduleType::fromJsonListString(typeList, scheduleReply.value()); return typeList; } /** * @brief getScheduleTypeByID 根据日程类型ID获取日程类型信息 * @param typeID 日程类型ID * @return */ void DbusAccountRequest::getScheduleTypeByID(const QString &typeID) { asyncCall("getScheduleTypeByID", QVariant(typeID)); } /** * @brief createScheduleType 创建日程类型 * @param typeInfo 类型信息 * @return 日程类型ID */ void DbusAccountRequest::createScheduleType(const DScheduleType::Ptr &typeInfo) { QString jsonStr; DScheduleType::toJsonString(typeInfo, jsonStr); asyncCall("createScheduleType", QVariant(jsonStr)); } /** * @brief updateScheduleType 更新日程类型 * @param typeInfo 类型信息 * @return 是否成功,true:更新成功 */ void DbusAccountRequest::updateScheduleType(const DScheduleType::Ptr &typeInfo) { QString jsonStr; DScheduleType::toJsonString(typeInfo, jsonStr); asyncCall("updateScheduleType", QVariant(jsonStr)); } /** * @brief deleteScheduleTypeByID 根据日程类型ID删除日程类型 * @param typeID 日程类型ID * @return 是否成功,true:更新成功 */ void DbusAccountRequest::deleteScheduleTypeByID(const QString &typeID) { QList argumentList; asyncCall("deleteScheduleTypeByID", QVariant(typeID)); } /** * @brief scheduleTypeByUsed 日程类型是否被使用 * @param typeID 日程类型ID * @return */ void DbusAccountRequest::scheduleTypeByUsed(const QString &typeID) { asyncCall("scheduleTypeByUsed", QVariant(typeID)); } /** * @brief createSchedule 创建日程 * @param ScheduleInfo 日程信息 * @return 返回日程ID */ QString DbusAccountRequest::createSchedule(const DSchedule::Ptr &scheduleInfo) { QString jsonStr; DSchedule::toJsonString(scheduleInfo, jsonStr); QList argumentList; argumentList << QVariant::fromValue(jsonStr); QDBusPendingCall pCall = asyncCallWithArgumentList(QStringLiteral("createSchedule"), argumentList); pCall.waitForFinished(); QDBusMessage reply = pCall.reply(); if (reply.type() != QDBusMessage::ReplyMessage) { qCWarning(CommonLogger) << "getScheduleTypeByID error ," << reply; return nullptr; } QDBusReply scheduleReply = reply; return scheduleReply.value(); } /** * @brief updateSchedule 更新日程 * @param ScheduleInfo 日程信息 * @return 是否成功,true:更新成功 */ void DbusAccountRequest::updateSchedule(const DSchedule::Ptr &scheduleInfo) { QString jsonStr; DSchedule::toJsonString(scheduleInfo, jsonStr); asyncCall("updateSchedule", QVariant(jsonStr)); } DSchedule::Ptr DbusAccountRequest::getScheduleByID(const QString &scheduleID) { QList argumentList; argumentList << QVariant::fromValue(scheduleID); QDBusPendingCall pCall = asyncCallWithArgumentList(QStringLiteral("getScheduleByScheduleID"), argumentList); pCall.waitForFinished(); QDBusMessage reply = pCall.reply(); if (reply.type() != QDBusMessage::ReplyMessage) { qCWarning(CommonLogger) << "getScheduleTypeByID error ," << reply; return nullptr; } QDBusReply scheduleReply = reply; QString scheduleStr = scheduleReply.value(); DSchedule::Ptr schedule; DSchedule::fromJsonString(schedule, scheduleStr); return schedule; } /** * @brief deleteScheduleByScheduleID 根据日程ID删除日程 * @param ScheduleID 日程ID * @return 是否成功,true:删除成功 */ void DbusAccountRequest::deleteScheduleByScheduleID(const QString &scheduleID) { QList argumentList; asyncCall("deleteScheduleByScheduleID", QVariant(scheduleID)); } /** * @brief deleteSchedulesByScheduleTypeID 根据日程类型ID删除日程 * @param typeID 日程类型ID * @return 是否成功,true:删除成功 */ void DbusAccountRequest::deleteSchedulesByScheduleTypeID(const QString &typeID) { QList argumentList; asyncCall("deleteSchedulesByScheduleTypeID", QVariant(typeID)); } /** * @brief querySchedulesWithParameter 根据查询参数查询日程 * @param params 具体的查询参数 * @return 查询到的日程集 */ DSchedule::Map DbusAccountRequest::querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms) { DSchedule::Map scheduleMap; QList argumentList; QString jsonStr = DScheduleQueryPar::toJsonString(params); argumentList << jsonStr; QDBusPendingCall pCall = asyncCallWithArgumentList(QStringLiteral("querySchedulesWithParameter"), argumentList); pCall.waitForFinished(); QDBusMessage reply = pCall.reply(); if (reply.type() != QDBusMessage::ReplyMessage) { qCWarning(CommonLogger) << "getSysColors error ," << reply; return scheduleMap; } QDBusReply scheduleReply = reply; scheduleMap = DSchedule::fromMapString(scheduleReply.value()); return scheduleMap; } DTypeColor::List DbusAccountRequest::getSysColors() { DTypeColor::List colorList; QList argumentList; QDBusPendingCall pCall = asyncCallWithArgumentList(QStringLiteral("getSysColors"), argumentList); pCall.waitForFinished(); QDBusMessage reply = pCall.reply(); if (reply.type() != QDBusMessage::ReplyMessage) { qCWarning(CommonLogger) << "getSysColors error ," << reply; return colorList; } QDBusReply scheduleReply = reply; colorList = DTypeColor::fromJsonString(scheduleReply.value()); return colorList; } void DbusAccountRequest::slotCallFinished(CDBusPendingCallWatcher *call) { int ret = 0; bool canCall = true; QString msg = ""; if (call->isError()) { qCWarning(CommonLogger) << call->reply().member() << call->error().message(); ret = 1; } else { QDBusPendingReply reply = *call; QVariant str = reply.argumentAt<0>(); if (call->getmember() == "getAccountInfo") { DAccount::Ptr ptr; ptr.reset(new DAccount()); if (DAccount::fromJsonString(ptr, str.toString())) { emit signalGetAccountInfoFinish(ptr); } else { qCWarning(CommonLogger) << "AccountInfo Parsing failed!"; ret = 2; } } else if (call->getmember() == "getScheduleTypeList") { DScheduleType::List stList; if (DScheduleType::fromJsonListString(stList, str.toString())) { emit signalGetScheduleTypeListFinish(stList); } else { qCWarning(CommonLogger) << "ScheduleTypeList Parsing failed!"; ret = 2; } } else if (call->getmember() == "querySchedulesWithParameter") { QMap map = DSchedule::fromMapString(str.toString()); emit signalGetScheduleListFinish(map); } else if (call->getmember() == "searchSchedulesWithParameter") { QMap map = DSchedule::fromMapString(str.toString()); emit signalSearchScheduleListFinish(map); } else if (call->getmember() == "getSysColors") { DTypeColor::List list = DTypeColor::fromJsonString(str.toString()); emit signalGetSysColorsFinish(list); } else if (call->getmember() == "createScheduleType") { //创建日程类型结束 canCall = false; //在发起数据获取刷新数据,并将本回调函数和数据传到下一个事件中 CallbackFunc func = call->getCallbackFunc(); setCallbackFunc([=](CallMessge) { func({0, str.toString()}); }); getScheduleTypeList(); } else if (call->getmember() == "createSchedule") { //创建日程结束 // canCall = false; //重新读取日程数据 setCallbackFunc(call->getCallbackFunc()); querySchedulesWithParameter(m_priParams); msg = str.toString(); } else if (call->getmember() == "deleteScheduleByScheduleID") { //删除日程结束 canCall = false; //重新读取日程数据 setCallbackFunc(call->getCallbackFunc()); querySchedulesWithParameter(m_priParams); } else if (call->getmember() == "getScheduleByID") { DSchedule::Ptr schedule(new DSchedule); DSchedule::fromJsonString(schedule, str.toString()); emit signalGetScheduleFinish(schedule); } if (canCall && call->getCallbackFunc() != nullptr) { call->getCallbackFunc()({ret, msg}); } } call->deleteLater(); } dde-calendar-5.14.13/schedule-plugin/src/dbus/dbusaccountrequest.h000066400000000000000000000103131473346337000251100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSACCOUNTREQUEST_H #define DBUSACCOUNTREQUEST_H #include "dbusrequestbase.h" #include "daccount.h" #include "dschedule.h" #include "dscheduletype.h" #include "dtypecolor.h" #include "dschedulequerypar.h" //单项账户信息请求类 class DbusAccountRequest : public DbusRequestBase { Q_OBJECT public: explicit DbusAccountRequest(const QString &path, const QString &interface, QObject *parent = nullptr); /** * @brief getAccountInfo 获取帐户信息 * @return */ void getAccountInfo(); /** * @brief updateAccountInfo 更新帐户信息 * @param accountInfo 帐户信息 */ void updateAccountInfo(const DAccount::Ptr &accountInfo); /** * @brief getScheduleTypeList 获取日程类型信息集 * @return */ DScheduleType::List getScheduleTypeList(); /** * @brief getScheduleTypeByID 根据日程类型ID获取日程类型信息 * @param typeID 日程类型ID * @return */ void getScheduleTypeByID(const QString &typeID); /** * @brief createScheduleType 创建日程类型 * @param typeInfo 类型信息 * @return 日程类型ID */ void createScheduleType(const DScheduleType::Ptr &typeInfo); /** * @brief updateScheduleType 更新日程类型 * @param typeInfo 类型信息 * @return 是否成功,true:更新成功 */ void updateScheduleType(const DScheduleType::Ptr &typeInfo); /** * @brief deleteScheduleTypeByID 根据日程类型ID删除日程类型 * @param typeID 日程类型ID * @return 是否成功,true:更新成功 */ void deleteScheduleTypeByID(const QString &typeID); /** * @brief scheduleTypeByUsed 日程类型是否被使用 * @param typeID 日程类型ID * @return */ void scheduleTypeByUsed(const QString &typeID); /** * @brief createSchedule 创建日程 * @param ScheduleInfo 日程信息 * @return 返回日程ID */ QString createSchedule(const DSchedule::Ptr &scheduleInfo); /** * @brief updateSchedule 更新日程 * @param ScheduleInfo 日程信息 * @return 是否成功,true:更新成功 */ void updateSchedule(const DSchedule::Ptr &scheduleInfo); DSchedule::Ptr getScheduleByID(const QString &scheduleID); /** * @brief deleteScheduleByScheduleID 根据日程ID删除日程 * @param ScheduleID 日程ID * @return 是否成功,true:删除成功 */ void deleteScheduleByScheduleID(const QString &scheduleID); /** * @brief deleteSchedulesByScheduleTypeID 根据日程类型ID删除日程 * @param typeID 日程类型ID * @return 是否成功,true:删除成功 */ void deleteSchedulesByScheduleTypeID(const QString &typeID); /** * @brief querySchedulesWithParameter 根据查询参数查询日程 * @param params 具体的查询参数 * @return 查询到的日程集 */ DSchedule::Map querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms); DTypeColor::List getSysColors(); signals: void signalCreateScheduleFinish(const QString &scheduleID); void signalGetAccountInfoFinish(DAccount::Ptr); void signalGetScheduleFinish(const DSchedule::Ptr &); void signalGetScheduleTypeListFinish(DScheduleType::List); void signalGetScheduleListFinish(QMap); void signalSearchScheduleListFinish(QMap); void signalGetSysColorsFinish(DTypeColor::List); public slots: void slotCallFinished(CDBusPendingCallWatcher *) override; private: DScheduleQueryPar::Ptr m_priParams; //上一次查询日程的数据 }; #endif // DBUSACCOUNTREQUEST_H dde-calendar-5.14.13/schedule-plugin/src/dbus/dbushuanglirequest.cpp000066400000000000000000000043301473346337000254400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbushuanglirequest.h" #include "commondef.h" #include DbusHuangLiRequest::DbusHuangLiRequest(QObject *parent) : DbusRequestBase("/com/deepin/dataserver/Calendar/HuangLi", "com.deepin.dataserver.Calendar.HuangLi", QDBusConnection::sessionBus(), parent) { } /** * @brief DbusHuangLiRequest::getFestivalMonth * 按月获取节假日信息 * @param year * @param month */ void DbusHuangLiRequest::getFestivalMonth(quint32 year, quint32 month) { asyncCall("getFestivalMonth", QVariant(year), QVariant(month)); } /** * @brief DbusHuangLiRequest::getHuangLiDay * 按天获取黄历信息 * @param year * @param month * @param day */ void DbusHuangLiRequest::getHuangLiDay(quint32 year, quint32 month, quint32 day) { asyncCall("getHuangLiDay", QVariant(year), QVariant(month), QVariant(day)); } /** * @brief DbusHuangLiRequest::getHuangLiMonth * 按月获取黄历信息 * @param year * @param month * @param fill */ void DbusHuangLiRequest::getHuangLiMonth(quint32 year, quint32 month, bool fill) { asyncCall("getHuangLiMonth", QVariant(year), QVariant(month), QVariant(fill)); } /** * @brief DbusHuangLiRequest::getLunarInfoBySolar * 获取农历信息 * @param year * @param month * @param day */ void DbusHuangLiRequest::getLunarInfoBySolar(quint32 year, quint32 month, quint32 day) { asyncCall("getLunarInfoBySolar", QVariant(year), QVariant(month), QVariant(day)); } /** * @brief DbusHuangLiRequest::getLunarMonthCalendar * 获取农历月日程 * @param year * @param month * @param fill */ void DbusHuangLiRequest::getLunarMonthCalendar(quint32 year, quint32 month, bool fill) { asyncCall("getLunarMonthCalendar", QVariant(year), QVariant(month), QVariant(fill)); } void DbusHuangLiRequest::slotCallFinished(CDBusPendingCallWatcher *call) { if (call->isError()) { qCWarning(CommonLogger) << call->reply().member() << call->error().message(); return; } if (call->getmember() == "getFestivalMonth") { QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); } call->deleteLater(); } dde-calendar-5.14.13/schedule-plugin/src/dbus/dbushuanglirequest.h000066400000000000000000000017241473346337000251110ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSHUANGLIREQUEST_H #define DBUSHUANGLIREQUEST_H #include "dbusrequestbase.h" //黄历数据请求类 class DbusHuangLiRequest : public DbusRequestBase { Q_OBJECT public: explicit DbusHuangLiRequest(QObject *parent = nullptr); //按月获取节假日信息 void getFestivalMonth(quint32 year, quint32 month); //按天获取黄历信息 void getHuangLiDay(quint32 year, quint32 month, quint32 day); //按月获取黄历信息 void getHuangLiMonth(quint32 year, quint32 month, bool fill); //获取农历信息 void getLunarInfoBySolar(quint32 year, quint32 month, quint32 day); //获取农历月日程 void getLunarMonthCalendar(quint32 year, quint32 month, bool fill); signals: public slots: void slotCallFinished(CDBusPendingCallWatcher *) override; }; #endif // DBUSHUANGLIREQUEST_H dde-calendar-5.14.13/schedule-plugin/src/dbus/dbusrequestbase.cpp000066400000000000000000000062011473346337000247220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusrequestbase.h" #include "commondef.h" #include DbusRequestBase::DbusRequestBase(const QString &path, const QString &interface, const QDBusConnection &connection, QObject *parent) : QDBusAbstractInterface(DBUS_SERVER_NAME, path, interface.toStdString().c_str(), connection, parent) { //关联后端dbus触发信号 if (!QDBusConnection::sessionBus().connect(this->service(), this->path(), this->interface(), "", this, SLOT(slotDbusCall(QDBusMessage)))) { qCWarning(CommonLogger) << "the connection was fail!" << "path: " << this->path() << "interface: " << this->interface(); }; } void DbusRequestBase::setCallbackFunc(CallbackFunc func) { m_callbackFunc = func; } /** * @brief DbusRequestBase::asyncCall * 异步访问dbus接口 * @param method dbus方法名 * @param args 参数 */ void DbusRequestBase::asyncCall(const QString &method, const QList &args) { QDBusPendingCall async = QDBusAbstractInterface::asyncCall(method, args); CDBusPendingCallWatcher *watcher = new CDBusPendingCallWatcher(async, method, this); //将回调函数放进CallWatcher中,随CallWatcher调用结果返回 watcher->setCallbackFunc(m_callbackFunc); //清楚回调函数,防止多方法调用时混淆 setCallbackFunc(nullptr); connect(watcher, &CDBusPendingCallWatcher::signalCallFinished, this, &DbusRequestBase::slotCallFinished); } /** * @brief DbusRequestBase::asyncCall * 异步访问dbus接口 * @param method dbus方法名 * @param args 参数 */ void DbusRequestBase::asyncCall(const QString &method, const QVariant &arg1, const QVariant &arg2, const QVariant &arg3, const QVariant &arg4, const QVariant &arg5, const QVariant &arg6, const QVariant &arg7, const QVariant &arg8) { asyncCall(method, method, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); } /** * @brief DbusRequestBase::asyncCall * 异步访问dbus接口 * @param method dbus方法名 * @param args 参数 */ void DbusRequestBase::asyncCall(const QString &method, QString callName, const QVariant &arg1, const QVariant &arg2, const QVariant &arg3, const QVariant &arg4, const QVariant &arg5, const QVariant &arg6, const QVariant &arg7, const QVariant &arg8) { QDBusPendingCall async = QDBusAbstractInterface::asyncCall(method, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); CDBusPendingCallWatcher *watcher = new CDBusPendingCallWatcher(async, callName, this); //将回调函数放进CallWatcher中,随CallWatcher调用结果返回 watcher->setCallbackFunc(m_callbackFunc); //清楚回调函数,防止多方法调用时混淆 setCallbackFunc(nullptr); connect(watcher, &CDBusPendingCallWatcher::signalCallFinished, this, &DbusRequestBase::slotCallFinished); } /** * @brief slotDbusCall * dbus服务端调用 * @param msg 调用消息 */ void DbusRequestBase::slotDbusCall(const QDBusMessage &msg) { } dde-calendar-5.14.13/schedule-plugin/src/dbus/dbusrequestbase.h000066400000000000000000000041741473346337000243760ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSREQUESTBASE_H #define DBUSREQUESTBASE_H #include "cdbuspendingcallwatcher.h" #include #include #define DBUS_SERVER_NAME "com.deepin.dataserver.Calendar" //继承QDbus接口类,包装自定义接口访问 class DbusRequestBase : public QDBusAbstractInterface { Q_OBJECT public: explicit DbusRequestBase(const QString &path, const QString &interface, const QDBusConnection &connection = QDBusConnection::sessionBus(), QObject *parent = nullptr); //设置回调函数 void setCallbackFunc(CallbackFunc func); signals: public slots: //dbus服务端调用 virtual void slotDbusCall(const QDBusMessage &msg); //dbus调用完成事件 virtual void slotCallFinished(CDBusPendingCallWatcher *) = 0; protected: //异步调用,包装异步调用事件 void asyncCall(const QString &method, const QList &args); void asyncCall(const QString &method, const QVariant &arg1 = QVariant(), const QVariant &arg2 = QVariant(), const QVariant &arg3 = QVariant(), const QVariant &arg4 = QVariant(), const QVariant &arg5 = QVariant(), const QVariant &arg6 = QVariant(), const QVariant &arg7 = QVariant(), const QVariant &arg8 = QVariant()); void asyncCall(const QString &method, QString callName, const QVariant &arg1 = QVariant(), const QVariant &arg2 = QVariant(), const QVariant &arg3 = QVariant(), const QVariant &arg4 = QVariant(), const QVariant &arg5 = QVariant(), const QVariant &arg6 = QVariant(), const QVariant &arg7 = QVariant(), const QVariant &arg8 = QVariant()); private: CallbackFunc m_callbackFunc = nullptr; //回调函数 }; #endif // DBUSREQUESTBASE_H dde-calendar-5.14.13/schedule-plugin/src/globaldef.h000066400000000000000000000152571473346337000221630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef GLOBALDEF_H #define GLOBALDEF_H #define PLUGIN_TITLE_NAME "日历" #define LOG_FILENAME "/home/uniontech/.cache/deepin/dde-calendar/scheduleplugin.log" #define SERVICE_NAME "scheduleX" #define DBUS_SERVICE "com.deepin.dataserver.Calendar" #define DBUS_PATCH "/com/deepin/dataserver/Calendar" #define DBUS_CALENDAR_SERVICE "com.deepin.Calendar" #define DBUS_CALENDAR_PATCH "/com/deepin/Calendar" #define DBUS_CALENDAR_INTFACE "com.deepin.Calendar" #define NEW_SCHEDULE "新建日程" #define DATETIME_FRAME "yyyyMMdd hh:mm:ss" //日期格式 #define DATEFORMAT "yyyy-MM-dd" //时间格式 #define TIMEFORMAT "hh:mm:ss" #define PROCESS_OPEN_CALENDAR_PROGRAM "dbus-send" #define PROCESS_OPEN_CALENDAR_ARGUMENTS "--print-reply --dest=com.deepin.Calendar /com/deepin/Calendar com.deepin.Calendar.RaiseWindow" //日程重复类型 //每天 #define DBUS_RRUL_EVED "FREQ=DAILY" //每周 #define DBUS_RRUL_EVEW "FREQ=WEEKLY" //每月 #define DBUS_RRUL_EVEM "FREQ=MONTHLY" //每年 #define DBUS_RRUL_EVEY "FREQ=YEARLY" //每个工作日 #define DBUS_RRUL_WORK "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR" //日程json关键字 #define JSON_CREATE "CREATE" #define JSON_VIEW "VIEW" #define JSON_CANCEL "CANCEL" #define JSON_CHANGE "CHANGE" #define JSON_NO_INTENT "NO_INTENT" #define JSON_YES_INTENT "YES_INTENT" //日程json槽位关键字 #define JSON_NAME "name" #define JSON_CONTENT "content" #define JSON_REPEAT "repeat" #define JSON_DATETIME "datetime" #define JSON_VALUE "value" #define JSON_NORMVALUE "normValue" #define JSON_PROPERTY "property" #define JSON_NEXT "next" #define JSON_LAST "last" #define JSON_FROMDATETIME "fromTime" #define JSON_TODATETIME "toTime" #define JSON_TOPLACE "toPlace" #define JSON_ALL "all" #define JSON_THIS "this" #define JSON_POSRANK_OFFSET "posRank.offset" #define JSON_DateTimeInvalid "datetimeInvalid" #define JSON_DATE_DELIMITER "/" #define JSON_STR_DATE_DELIMITER "-" #define JSON_DATETIME_DELIMITER "T" #define YEAR "年" #define MONTH "月" #define DAY "日" //每天多少秒 #define ONE_DAY_SECS 60 * 60 * 24 //widget show #define CONFIRM_BUTTON_STRING "确定" #define CANCEL_BUTTON_STRING "取消" #define DELETE_BUTTON_STRING "删除日程" #define DELETEALL_BUTTON_STRING "删除全部" #define ONLY_DELETE_THIS_BUTTON_STRING "仅删除此日程" #define CHANGE_ALL_BUTTON_STRING "修改全部" #define CHANGE_ONLYL_BUTTON_STRING "仅修改此日程" #define CREATE_ERR_TTS "新建功能不支持此说法" #define DATETIME_ERR_TTS "您成功难住我啦,不存在这个时间呢!" #define CANCEL_ERR_TTS "查询功能不支持此说法" //没有对应日程的回复语 #define QUERY_ERR_TTS "您还没有日程提醒,无法寻找对应的日程!" //修改日程初始状态错误回复语 #define CHANGE_INI_ERR_TSS "当前场景不支持这个操作哦。请问您要将什么日程修改到什么时间或修改到什么内容?" //修改日程询问回复语 #define CHANGE_TO_TTS "请问您要将此日程修改到什么时间或修改到什么内容?" //错误操作回复语 #define G_ERR_TTS "当前场景不支持这个操作哦。" //取消删除日程回复语 #define CANCEL_DELETION_TTS "已为您取消删除日程。" //确认删除日程回复语 #define CONFIRM_DELETION_TTS "已为您删除日程。" //取消修改日程回复语 #define CANCEL_CHANGE_TTS "已为您取消修改日程。" //确认修改日程回复语 #define CONFIRM_CHANGE_TTS "已为您修改日程。" //没有日程提醒回复语 #define NO_SCHEDULE_TTS "您还没有日程提醒。" //删除重复日程询问回复语 #define REPEST_SCHEDULE_CANCEL_TTS "该日程是循环的日程,请问是仅删除此日程还是删除全部?" //删除普通日程询问回复语 #define CONFIRM_SCHEDULE_CANCEL_TTS "我要帮您取消这个日程吗?操作后将在日历中同步删除。" //删除选择日程回复语 #define CANCEL_SELECT_TTS "这是您的所有日程,您要删除哪一个日程?" //选择修改回复语 #define SELECT_CHANGE_TTS "这是您的所有日程,您要修改哪一个日程?" //修改重复日程询问回复语 #define REPEST_SCHEDULE_CHANGE_TTS "该日程是循环的日程,请问是修改当前日程还是所有日程?" //修改普通日程询问回复语 #define CONFIRM_SCHEDULE_CHANGE_TTS "我要帮您修改这个日程吗?操作后将在日历中同步修改。" //修改到的时间不在规定时间范围内 #define CHANGE_TIME_OUT_TTS "修改日程的时间范围为未来半年哦。" #define ALL_DAY "全天" //修改或取消时间不在未来半年的回复语 #define OVERTIME_TTS "只能取消或修改未来半年的日程!" //新建日程开始时间不在规定时间范围内 #define CREATE_TIME_OUT_TTS "只能创建未来半年的日程" //新建每周末提醒的日程的回复语 #define EVERY_WEEKEND_TTS "好的,每周六到周日的%1我都会提醒您。" //日程时间无效 #define ISVALID_DATE_TIME "您成功难住我啦,不存在%1这个日期呢" //跨天日程,开始日期小于当前时间的回复语 #define BEGINDATETIME_LATER_THAN_CURRENTDATETIME_ACROSS_THE_DAY_TTS "好的,%1我会提醒您。" //查询日期过期 #define VIEW_DATE_IS_OVERDUE_TTS "抱歉,不能查询过期的提醒" //查询日程时间不再规定范围内 #define VIEW_DATETIME_OUT_TTS "只能查询未来半年的日程" //没有查询到日程 #define NO_SCHEDULE_VIEWED_TTS "没有找到对应的日程" //查找到n个日程 #define VIEW_SCHEDULE_TTS "找到%1个日程" //半年天数 #define MAXIMUM_DAYS_IN_THE_FUTURE 183 //不带窗口的回复宏定义 #define REPLY_ONLY_TTS(reply, msgtts, dsptts, isEnd) \ reply.setReplyType(Reply::RT_STRING_TTS | Reply::RT_STRING_DISPLAY); \ reply.ttsMessage(msgtts); \ reply.displayMessage(dsptts); \ reply.code(0); \ reply.setShouldEndSession(isEnd); \ //带窗口的回复宏定义 #define REPLY_WIDGET_TTS(reply, widget, msgtts, dsptts, isEnd) \ reply.setReplyType(Reply::RT_INNER_WIDGET | Reply::RT_STRING_TTS | Reply::RT_STRING_DISPLAY); \ reply.setReplyWidget(widget); \ reply.ttsMessage(msgtts); \ reply.displayMessage(dsptts); \ reply.code(0); \ reply.setShouldEndSession(isEnd); \ //未来半年开始时间和结束时间 #define TIME_FRAME_IN_THE_NEXT_SIX_MONTHT \ QDateTime beginTime = QDateTime::currentDateTime(); \ QDateTime endTime = QDateTime::currentDateTime().addMonths(6); //modifyScheduleItem #define MODIFY_ITEM_HEIGHT 48 //item圆角 #define ITEM_RADIUS 8 //最多显示10个item #define ITEM_SHOW_NUM 10 #define OPENCALENDAR_WIDGET_TITLE "在“日历”中查看所有%1个结果..." #define OPENCALENDAR_WDIGET_HEIGHT 17 #endif // GLOBALDEF_H dde-calendar-5.14.13/schedule-plugin/src/interface/000077500000000000000000000000001473346337000220215ustar00rootroot00000000000000dde-calendar-5.14.13/schedule-plugin/src/interface/reply.h000066400000000000000000000116521473346337000233320ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef REPLY_H #define REPLY_H #include #include #include #include enum IRet { ERR_SUCCESS = (0), /* 一切正常 */ ERR_FAIL = (-1), /* 常规错误 */ ERR_PARAM = (-2), /* 函数入参异常 */ ERR_CONFIG = (-3), /* 配置错误 */ ERR_NOT_FOUND = (-4), /* 未找到对应项 */ ERR_UNSUPPORT_SERVICE = (-20), /* 不支持的服务 */ ERR_UNSUPPORT_INTENT = (-21), /* 不支持的操作 */ ERR_UNSUPPORT_SLOTS = (-22), /* 不支持的槽位 */ ERR_UNSUPPORT_ABILITY = (-23), /* 不支持的能力 */ ERR_UNSUPPORT_EXPRESS = (-24), /* 不支持的说法 */ ERR_CLOUD_SERVICE = (-100), /* 云端服务内容异常 */ ERR_CLOUD_INTENT = (-101), /* 云端意图内容异常 */ ERR_CLOUD_SLOTS = (-102) /* 云端参数内容异常 */ }; class Reply { public: enum ReplyType { RT_NONE = 0, RT_STRING_DISPLAY = 1, RT_STRING_TTS = 2, RT_POP_WIDGET = 4, RT_INNER_WIDGET = 8 }; public: Reply() : messageCode(ERR_FAIL) , messageDisplay() , messageTTS() , m_widget(nullptr) , m_replyType(RT_NONE) , m_shouldEndSession(true) { } Reply(int msgCode, const QString &message, int type = RT_STRING_TTS | RT_STRING_DISPLAY) : messageCode(msgCode) , messageDisplay(message) , messageTTS(message) , m_widget(nullptr) , m_replyType(type) , m_shouldEndSession(true) { } Reply(int msgCode, const QString &msgDisplay, const QString &msgSynthesis, int type, QWidget *parent) : messageCode(msgCode) , messageDisplay(msgDisplay) , messageTTS(msgSynthesis) , m_widget(parent) , m_replyType(type) , m_shouldEndSession(true) { } Reply(const Reply &reply) : messageCode(reply.messageCode) , messageDisplay(reply.messageDisplay) , messageTTS(reply.messageTTS) , m_widget(reply.m_widget) , m_replyType(reply.m_replyType) , m_shouldEndSession(reply.m_shouldEndSession) { } Reply &operator=(const Reply &reply) { this->messageCode = reply.messageCode; this->messageDisplay = reply.messageDisplay; this->messageTTS = reply.messageTTS; this->m_widget = reply.m_widget; this->m_replyType = reply.m_replyType; m_shouldEndSession = reply.m_shouldEndSession; return *this; } int code() { if (messageCode.isValid()) { return messageCode.toInt(); } else { return ERR_SUCCESS; } } void code(int msgCode) { this->messageCode = msgCode; } const QString displayMessage() { if (messageDisplay.isValid()) { return messageDisplay.toString(); } else { return ""; } } void displayMessage(const QString &msgDisplay) { this->messageDisplay = msgDisplay; } const QString ttsMessage() { if (messageTTS.isValid()) { return messageTTS.toString(); } else { return ""; } } void ttsMessage(const QString &msgSynthesis) { this->messageTTS = msgSynthesis; } void update(int msgCode) { this->messageCode = msgCode; } void update(int msgCode, const QString &message, int replyType = RT_STRING_TTS | RT_STRING_DISPLAY) { this->messageCode = msgCode; this->messageDisplay = message; this->messageTTS = message; this->m_replyType = replyType; } void update(int msgCode, const QString &msgDisplay, const QString &msgSynthesis, int replyType = RT_STRING_TTS | RT_STRING_DISPLAY) { this->messageCode = msgCode; this->messageDisplay = msgDisplay; this->messageTTS = msgSynthesis; this->m_replyType = replyType; } operator int() { return messageCode.toInt(); } bool isCodeValid() { return messageCode.isValid(); } bool isDisplayMessageValid() { return messageDisplay.isValid(); } bool isSynthesisMessageValid() { return messageTTS.isValid(); } QWidget *getReplyWidget() { return m_widget; } void setReplyWidget(QWidget *w) { m_widget = w; } int getReplyType() { return m_replyType; } void setReplyType(int type) { m_replyType = type; } int getShouldEndSession() { return m_shouldEndSession; } void setShouldEndSession(bool bShouldEndSession) { m_shouldEndSession = bShouldEndSession; } private: QVariant messageCode; QVariant messageDisplay; QVariant messageTTS; QWidget *m_widget; int m_replyType; bool m_shouldEndSession; }; #endif // REPLY_H dde-calendar-5.14.13/schedule-plugin/src/interface/service.h000066400000000000000000000016421473346337000236350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SERVICE_H #define SERVICE_H #include #include "reply.h" /* 服务优先级: * SeriesIgnore表示该service可忽略 * ServicePriorityPatch表示服务修复代码,直接覆盖旧的服务 */ enum ServicePriority { ServicePriorityIgnore = -10, ServicePriorityLow = 0, SerivcePriorityNormal = 10, SerivcePriorityHigh = 50, SerivcePriorityPatch = 127 }; class IService : public QObject // IReplyHandler { Q_OBJECT public: virtual ~IService() {} virtual QString serviceName() = 0; virtual int servicePriority() = 0; virtual bool canHandle(const QString &s) = 0; virtual IRet service(const QString &semantic) = 0; virtual Reply &getServiceReply() = 0; signals: void signalSendShowMessage(Reply reply); }; #endif // SERVICE_H dde-calendar-5.14.13/schedule-plugin/src/interface/systemsemanticplugin.h000066400000000000000000000031351473346337000264630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SYSTEM_SEMANTIC_PLUGIN_H #define SYSTEM_SEMANTIC_PLUGIN_H #include #include "service.h" #if defined(SYSTEM_SEMANTIC_LIBRARY) #define SYSTEMSEMANTICSHARED_EXPORT Q_DECL_EXPORT #else #define SYSTEMSEMANTICSHARED_EXPORT Q_DECL_IMPORT #endif #define AIAPluginProtocolVersion 1 class SYSTEMSEMANTICSHARED_EXPORT IServicePlugin { typedef std::function replyCallback; public: virtual ~IServicePlugin() {} virtual int init() = 0; /* 加载配置,初始化整个插件或服务 */ virtual void uninit() = 0; /* 插件逆向初始化 */ virtual QStringList getSupportService() = 0; virtual IService *createService(const QString &service) = 0; /* 获取一个服务,为多线程考量新建服务 */ virtual void releaseService(IService *service) = 0; /* 释放一个服务 */ virtual bool needRunInDifferentThread() { return true; /*当前线程是否需要在单独的线程中运行*/ } virtual bool isAutoDetectSession() { return true; /*是否自动检测多轮对话*/ } virtual int getPluginProtocolVersion() { return AIAPluginProtocolVersion; } virtual void setMessageHandle(replyCallback callback) { m_messageHandle = callback; } protected: replyCallback m_messageHandle; }; #define PluginInterface_iid "com.deepin.iflytek.aiassistant.3" Q_DECLARE_INTERFACE(IServicePlugin, PluginInterface_iid) #endif // SYSTEM_SEMANTIC_PLUGIN_H dde-calendar-5.14.13/schedule-plugin/src/scheduleplugin.cpp000066400000000000000000000032221473346337000235770ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduleplugin.h" #include "scheduleservice.h" #include "globaldef.h" #include "task/schedulemanagetask.h" Scheduleplugin::Scheduleplugin(QObject *parent) { Q_UNUSED(parent); } Scheduleplugin::~Scheduleplugin() { ScheduleManageTask::releaseInstance(); } int Scheduleplugin::init() { return 0; } void Scheduleplugin::uninit() { } QStringList Scheduleplugin::getSupportService() { return QStringList {SERVICE_NAME}; } IService *Scheduleplugin::createService(const QString &service) { if (!getSupportService().contains(service)) { return nullptr; } QMutexLocker lock(&m_ServiceLock); auto pService = new scheduleservice(); connect(pService->getScheduleManageTask(), &ScheduleManageTask::signaleSendMessage, this, &Scheduleplugin::slotSendMessage, Qt::UniqueConnection); m_ServiceSet.insert(pService); return pService; } void Scheduleplugin::releaseService(IService *service) { QMutexLocker lock(&m_ServiceLock); for (auto iter = m_ServiceSet.begin(); iter != m_ServiceSet.end(); iter++) { if (service && service == *iter) { m_ServiceSet.erase(iter); break; } } if (service) { delete service; } } bool Scheduleplugin::needRunInDifferentThread() { return false; } bool Scheduleplugin::isAutoDetectSession() { //设置为不自动检测是否多论 return false; } void Scheduleplugin::slotSendMessage(Reply reply) { if (this->m_messageHandle) this->m_messageHandle(this, reply); } dde-calendar-5.14.13/schedule-plugin/src/scheduleplugin.h000066400000000000000000000021621473346337000232460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEPLUGIN_H #define SCHEDULEPLUGIN_H #include "interface/systemsemanticplugin.h" #include "interface/reply.h" #include class Scheduleplugin : public QObject , public IServicePlugin { Q_OBJECT Q_INTERFACES(IServicePlugin) Q_PLUGIN_METADATA(IID PluginInterface_iid) public: explicit Scheduleplugin(QObject *parent = nullptr); ~Scheduleplugin() override; int init() override; void uninit() override; QStringList getSupportService() override; IService *createService(const QString &service) override; void releaseService(IService *service) override; bool needRunInDifferentThread() override; /** * @brief isAutoDetectSession 是否自动检测多轮对话 * @return true 检测 false不检测由插件设置 */ bool isAutoDetectSession() override; public slots: void slotSendMessage(Reply reply); private: QSet m_ServiceSet; QMutex m_ServiceLock; }; #endif // SCHEDULEPLUGIN_H dde-calendar-5.14.13/schedule-plugin/src/scheduleservice.cpp000066400000000000000000000021401473346337000237370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduleservice.h" #include "globaldef.h" #include "task/schedulemanagetask.h" #include "task/semanticanalysistask.h" scheduleservice::scheduleservice() { } scheduleservice::~scheduleservice() { } QString scheduleservice::serviceName() { return SERVICE_NAME; } int scheduleservice::servicePriority() { return 0; } bool scheduleservice::canHandle(const QString &s) { Q_UNUSED(s); return true; } IRet scheduleservice::service(const QString &semantic) { //解析云端返回的数据,进行业务处理 QString str = semantic; semanticAnalysisTask task; if (!task.resolveTaskJson(str)) { return ERR_FAIL; } ScheduleManageTask::getInstance()->process(task); return ERR_SUCCESS; } Reply &scheduleservice::getServiceReply() { m_reply = ScheduleManageTask::getInstance()->getReply(); return m_reply; } ScheduleManageTask *scheduleservice::getScheduleManageTask() const { return ScheduleManageTask::getInstance(); } dde-calendar-5.14.13/schedule-plugin/src/scheduleservice.h000066400000000000000000000012551473346337000234120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULESERVICE_H #define SCHEDULESERVICE_H #include "interface/service.h" class ScheduleManageTask; class scheduleservice : public IService { Q_OBJECT public: scheduleservice(); ~scheduleservice() override; QString serviceName() override; int servicePriority() override; bool canHandle(const QString &s) override; IRet service(const QString &semantic) override; Reply &getServiceReply() override; ScheduleManageTask *getScheduleManageTask() const; private: Reply m_reply; }; #endif // SCHEDULESERVICE_H dde-calendar-5.14.13/schedule-plugin/src/state/000077500000000000000000000000001473346337000212015ustar00rootroot00000000000000dde-calendar-5.14.13/schedule-plugin/src/state/confirwfeedbackstate.cpp000066400000000000000000000022471473346337000260670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "confirwfeedbackstate.h" #include "../globaldef.h" #include "../task/schedulebasetask.h" #include "../data/clocaldata.h" #include "../data/changejsondata.h" confirwFeedbackState::confirwFeedbackState(scheduleBaseTask *task) : scheduleState(task) { } Reply confirwFeedbackState::getReplyByIntent(bool isOK) { return m_Task->confirmInfo(isOK); } scheduleState::Filter_Flag confirwFeedbackState::eventFilter(const JsonData *jsonData) { if (jsonData->getPropertyStatus() == JsonData::NEXT) { return Fileter_Init; } if (jsonData->getPropertyStatus() == JsonData::LAST || jsonData->offset() > 0) { return Fileter_Err; } Filter_Flag result = changeDateErrJudge(jsonData, Fileter_Init); return result; } Reply confirwFeedbackState::ErrEvent() { Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true) return reply; } Reply confirwFeedbackState::normalEvent(const JsonData *jsonData) { Q_UNUSED(jsonData); return m_Task->confirwScheduleHandle(m_localData->SelectInfo()); } dde-calendar-5.14.13/schedule-plugin/src/state/confirwfeedbackstate.h000066400000000000000000000011151473346337000255250ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CONFIRWFEEDBACKSTATE_H #define CONFIRWFEEDBACKSTATE_H #include "schedulestate.h" class confirwFeedbackState : public scheduleState { public: explicit confirwFeedbackState(scheduleBaseTask *task); Reply getReplyByIntent(bool isOK) override; protected: Filter_Flag eventFilter(const JsonData *jsonData) override; Reply ErrEvent() override; Reply normalEvent(const JsonData *jsonData) override; }; #endif // CONFIRWFEEDBACKSTATE_H dde-calendar-5.14.13/schedule-plugin/src/state/getchangedatastate.cpp000066400000000000000000000053301473346337000255260ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "getchangedatastate.h" #include "../globaldef.h" #include "../data/changejsondata.h" #include "../task/changescheduletask.h" getChangeDataState::getChangeDataState(scheduleBaseTask *task) : scheduleState(task) { } Reply getChangeDataState::getReplyByIntent(bool isOK) { Q_UNUSED(isOK); return ErrEvent(); } scheduleState::Filter_Flag getChangeDataState::eventFilter(const JsonData *jsonData) { //如果语义包含全部关键字则为修改初始状态 if (jsonData->getPropertyStatus() == JsonData::ALL //如果语义包含下一个关键字则为修改初始状态 || jsonData->getPropertyStatus() == JsonData::NEXT || jsonData->isVaild() //如果语义包含时间则为修改初始状态 || jsonData->getDateTime().suggestDatetime.size() > 0 // 如果语义包含内容则为修改初始状态 || !jsonData->TitleName().isEmpty() //如果语义包含重复类型则为修改初始状态 || jsonData->getRepeatStatus() != JsonData::NONE) { return Filter_Flag::Fileter_Init; } if (jsonData->getPropertyStatus() == JsonData::LAST) return Fileter_Err; if (jsonData->offset() > 0) { return Fileter_Err; } //类型转换 JsonData *queryData = const_cast(jsonData); changejsondata *mchangeJsonData = dynamic_cast(queryData); //如果存在form信息则表示一个新的修改 if (mchangeJsonData->fromDateTime().suggestDatetime.size() > 0) { return Fileter_Init; } //如果存在修改的信息则为正常状态 if (mchangeJsonData->toDateTime().suggestDatetime.size() > 0 || !mchangeJsonData->toPlaceStr().isEmpty()) { return Fileter_Normal; } else { return Fileter_Err; } } Reply getChangeDataState::ErrEvent() { Reply reply; //返回错误输入的回复语 REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true) return reply; } Reply getChangeDataState::normalEvent(const JsonData *jsonData) { //类型转换 JsonData *queryData = const_cast(jsonData); changejsondata *mchangeJsonData = dynamic_cast(queryData); //如果有修改时间的信息则赋值 if (mchangeJsonData->toDateTime().suggestDatetime.size() > 0) { m_localData->setToTime(mchangeJsonData->toDateTime()); } //如果有修改内容的信息则获取 if (!mchangeJsonData->toPlaceStr().isEmpty()) { m_localData->setToTitleName(mchangeJsonData->toPlaceStr()); } return m_Task->getReplyBySelectSchedule(m_localData->SelectInfo()); } dde-calendar-5.14.13/schedule-plugin/src/state/getchangedatastate.h000066400000000000000000000022631473346337000251750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef GETCHANGEDATASTATE_H #define GETCHANGEDATASTATE_H #include "schedulestate.h" /** * @brief The getChangeDataState class 获取修改信息状态 */ class getChangeDataState : public scheduleState { public: explicit getChangeDataState(scheduleBaseTask *task); /** * @brief getReplyByIntent 根据意图判断回复 * @param isOK 确认 或 取消 * @return 回复 */ Reply getReplyByIntent(bool isOK) override; protected: /** * @brief eventFilter 根据json过滤事件 * @param jsonData json对象 * @return 返回过滤结果 初始化,错误 或正常 */ Filter_Flag eventFilter(const JsonData *jsonData) override; /** * @brief ErrEvent 错误事件处理 * @return 给助手的回复 */ Reply ErrEvent() override; /** * @brief normalEvent 正常事件处理 * @param jsonData 需要处理的json数据 * @return 给助手的回复 */ Reply normalEvent(const JsonData *jsonData) override; }; #endif // GETCHANGEDATASTATE_H dde-calendar-5.14.13/schedule-plugin/src/state/queryschedulestate.cpp000066400000000000000000000041501473346337000256300ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "queryschedulestate.h" #include "../task/queryscheduleproxy.h" #include "../task/schedulebasetask.h" #include "dschedule.h" #include "../data/changejsondata.h" #include "../globaldef.h" #include "../data/clocaldata.h" queryScheduleState::queryScheduleState(scheduleBaseTask *task) : scheduleState(task) { } Reply queryScheduleState::getReplyByIntent(bool isOK) { Q_UNUSED(isOK); return ErrEvent(); } Reply queryScheduleState::ErrEvent() { Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, false) return reply; } Reply queryScheduleState::normalEvent(const JsonData *jsonData) { DSchedule::List m_scheduleInfo {}; JsonData *queryData = const_cast(jsonData); queryScheduleProxy m_querySchedule(queryData); m_scheduleInfo = m_querySchedule.scheduleMapToList(m_querySchedule.querySchedule()); if (m_querySchedule.getTimeIsExpired()) { return m_Task->overdueScheduleProcess(); } else { changejsondata *mchangeJsonData = dynamic_cast(queryData); if (mchangeJsonData != nullptr) { if (m_localData.isNull()) m_localData = CLocalData::Ptr(new CLocalData()); if (mchangeJsonData->toDateTime().suggestDatetime.size() > 0) { m_localData->setToTime(mchangeJsonData->toDateTime()); } if (!mchangeJsonData->toPlaceStr().isEmpty()) m_localData->setToTitleName(mchangeJsonData->toPlaceStr()); } return m_Task->getFeedbackByQuerySchedule(m_scheduleInfo); } } scheduleState::Filter_Flag queryScheduleState::eventFilter(const JsonData *jsonData) { if (jsonData->getPropertyStatus() == JsonData::LAST || jsonData->getPropertyStatus() == JsonData::PRO_THIS) return Fileter_Err; if (jsonData->offset() > -1 && jsonData->getPropertyStatus() == JsonData::PRO_NONE) return Fileter_Err; Filter_Flag result = changeDateErrJudge(jsonData, Fileter_Normal); return result; } dde-calendar-5.14.13/schedule-plugin/src/state/queryschedulestate.h000066400000000000000000000011501473346337000252720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef QUERYSCHEDULESTATE_H #define QUERYSCHEDULESTATE_H #include "schedulestate.h" #include "accountitem.h" class queryScheduleState : public scheduleState { public: explicit queryScheduleState(scheduleBaseTask *task); Reply getReplyByIntent(bool isOK) override; protected: Filter_Flag eventFilter(const JsonData *jsonData) override; Reply ErrEvent() override; Reply normalEvent(const JsonData *jsonData) override; protected: }; #endif // QUERYSCHEDULESTATE_H dde-calendar-5.14.13/schedule-plugin/src/state/repeatfeedbackstate.cpp000066400000000000000000000036441473346337000257020ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "repeatfeedbackstate.h" #include "../globaldef.h" #include "../task/schedulebasetask.h" #include "../data/clocaldata.h" #include "../data/changejsondata.h" repeatfeedbackstate::repeatfeedbackstate(scheduleBaseTask *task) : scheduleState(task) { } Reply repeatfeedbackstate::getReplyByIntent(bool isOK) { if (isOK) { Q_UNUSED(isOK) Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true) return reply; } else { return m_Task->InitState(nullptr); } } scheduleState::Filter_Flag repeatfeedbackstate::eventFilter(const JsonData *jsonData) { if (jsonData->getPropertyStatus() == JsonData::NEXT //如果语义包含时间则为修改初始状态 || jsonData->getDateTime().suggestDatetime.size() > 0 // 如果语义包含内容则为修改初始状态 || !jsonData->TitleName().isEmpty() //如果语义包含重复类型则为修改初始状态 || jsonData->getRepeatStatus() != JsonData::NONE) { return Fileter_Init; } if (jsonData->getPropertyStatus() == JsonData::ALL || jsonData->getPropertyStatus() == JsonData::PRO_THIS) { return Fileter_Normal; } if (jsonData->getPropertyStatus() == JsonData::LAST || jsonData->offset() > 0) { return Fileter_Err; } Filter_Flag result = changeDateErrJudge(jsonData, Fileter_Init); return result; } Reply repeatfeedbackstate::ErrEvent() { Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true) return reply; } Reply repeatfeedbackstate::normalEvent(const JsonData *jsonData) { bool isOnlyOne = true; if (jsonData->getPropertyStatus() == JsonData::ALL) { isOnlyOne = false; } return m_Task->repeatScheduleHandle(m_localData->SelectInfo(), isOnlyOne); } dde-calendar-5.14.13/schedule-plugin/src/state/repeatfeedbackstate.h000066400000000000000000000011071473346337000253370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef REPEATFEEDBACKSTATE_H #define REPEATFEEDBACKSTATE_H #include "schedulestate.h" class repeatfeedbackstate : public scheduleState { public: explicit repeatfeedbackstate(scheduleBaseTask *task); Reply getReplyByIntent(bool isOK) override; protected: Filter_Flag eventFilter(const JsonData *jsonData) override; Reply ErrEvent() override; Reply normalEvent(const JsonData *jsonData) override; }; #endif // REPEATFEEDBACKSTATE_H dde-calendar-5.14.13/schedule-plugin/src/state/schedulestate.cpp000066400000000000000000000045751473346337000245550ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulestate.h" #include "../task/schedulebasetask.h" #include "../data/changejsondata.h" #include "../globaldef.h" #include "../state/queryschedulestate.h" scheduleState::scheduleState(scheduleBaseTask *task) : m_Task(task) { } scheduleState::~scheduleState() { } Reply scheduleState::process(const JsonData *jsonData) { Reply reply; //如果时间无效 if (jsonData->getDateTimeInvalid()) { scheduleState *nextState = new queryScheduleState(m_Task); setNextState(nextState); REPLY_ONLY_TTS(reply, DATETIME_ERR_TTS, DATETIME_ERR_TTS, true); return reply; } switch (eventFilter(jsonData)) { case Fileter_Err: { reply = ErrEvent(); } break; case Fileter_Normal: { reply = normalEvent(jsonData); } break; case Fileter_Init: { reply = initEvent(jsonData); } break; } return reply; } void scheduleState::setNextState(scheduleState *nextState) { m_nextState = nextState; } scheduleState *scheduleState::getNextState() const { return m_nextState; } void scheduleState::setLocalData(const CLocalData::Ptr &localData) { m_localData = localData; } CLocalData::Ptr scheduleState::getLocalData() const { return m_localData; } Reply scheduleState::initEvent(const JsonData *jsonData) { return m_Task->InitState(jsonData); } scheduleState::Filter_Flag scheduleState::changeDateErrJudge(const JsonData *jsonData, const scheduleState::Filter_Flag &defaultflag) { Filter_Flag resultFlag {defaultflag}; //如果只有修改信息没有被修改信息返回错误 JsonData *queryData = const_cast(jsonData); changejsondata *mchangeJsonData = dynamic_cast(queryData); if (mchangeJsonData != nullptr) { //是否含有修改信息 bool hasChangeToData = !mchangeJsonData->toPlaceStr().isEmpty() || mchangeJsonData->toDateTime().suggestDatetime.size() > 0; //是否不包含需要修改的信息 bool noChangeDate = mchangeJsonData->fromDateTime().suggestDatetime.size() == 0 && mchangeJsonData->TitleName().isEmpty(); if (hasChangeToData && noChangeDate) { resultFlag = Filter_Flag::Fileter_Err; } } return resultFlag; } dde-calendar-5.14.13/schedule-plugin/src/state/schedulestate.h000066400000000000000000000031311473346337000242050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULESTATE_H #define SCHEDULESTATE_H #include "../data/jsondata.h" #include "../interface/reply.h" #include "../data/clocaldata.h" class JsonData; class CSchedulesDBus; class scheduleBaseTask; class scheduleState { public: enum Filter_Flag { Fileter_Err, Fileter_Normal, Fileter_Init }; public: scheduleState(scheduleBaseTask *task); virtual ~scheduleState(); Reply process(const JsonData *jsonData); void setNextState(scheduleState *nextState); scheduleState *getNextState() const; void setLocalData(const CLocalData::Ptr &localData); CLocalData::Ptr getLocalData() const; virtual Reply getReplyByIntent(bool isOK) = 0; protected: virtual Filter_Flag eventFilter(const JsonData *jsonData) = 0; virtual Reply ErrEvent() = 0; virtual Reply normalEvent(const JsonData *jsonData) = 0; Reply initEvent(const JsonData *jsonData); /** * @brief changeDateErrJudge 修改数据错误判断,在非获取修改数据状态下,输入“修改到xxx”返回错误信息 * @param jsonData json数据 * @param defaultflag 默认返回标志 * @return 过滤标志 */ Filter_Flag changeDateErrJudge(const JsonData *jsonData, const Filter_Flag &defaultflag); protected: scheduleBaseTask *m_Task {nullptr}; scheduleState *m_nextState {nullptr}; CLocalData::Ptr m_localData {nullptr}; }; #endif // SCHEDULESTATE_H dde-calendar-5.14.13/schedule-plugin/src/state/selectandquerystate.cpp000066400000000000000000000073211473346337000260010ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "selectandquerystate.h" #include "../globaldef.h" #include "commondef.h" #include "../task/schedulebasetask.h" #include "../data/changejsondata.h" #include SelectAndQueryState::SelectAndQueryState(scheduleBaseTask *task) : scheduleState(task) { } Reply SelectAndQueryState::getReplyByIntent(bool isOK) { Q_UNUSED(isOK) Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true) return reply; } scheduleState::Filter_Flag SelectAndQueryState::eventFilter(const JsonData *jsonData) { //如果语义包含全部关键字则为修改初始状态 if (jsonData->getPropertyStatus() == JsonData::ALL //如果语义包含下一个关键字则为修改初始状态 || jsonData->getPropertyStatus() == JsonData::NEXT || jsonData->isVaild() //如果语义包含时间则为修改初始状态 || jsonData->getDateTime().suggestDatetime.size() > 0 // 如果语义包含内容则为修改初始状态 || !jsonData->TitleName().isEmpty() //如果语义包含重复类型则为修改初始状态 || jsonData->getRepeatStatus() != JsonData::NONE) { return Filter_Flag::Fileter_Init; } if (jsonData->getPropertyStatus() == JsonData::LAST) return Fileter_Normal; JsonData *queryData = const_cast(jsonData); changejsondata *mchangeJsonData = dynamic_cast(queryData); if (mchangeJsonData->fromDateTime().suggestDatetime.size() > 0) { return Filter_Flag::Fileter_Init; } //根据列表编号判断 if (m_localData->getOffet() < 0 && jsonData->offset() < 0) { return Fileter_Err; } bool showOpenWidget = m_localData->scheduleInfoVector().size() > ITEM_SHOW_NUM; const int showcount = showOpenWidget ? ITEM_SHOW_NUM : m_localData->scheduleInfoVector().size(); if (jsonData->offset() > showcount) { return Fileter_Err; } return Fileter_Normal; } Reply SelectAndQueryState::ErrEvent() { Reply reply; REPLY_ONLY_TTS(reply, QUERY_ERR_TTS, QUERY_ERR_TTS, true) return reply; } Reply SelectAndQueryState::normalEvent(const JsonData *jsonData) { bool showOpenWidget = m_localData->scheduleInfoVector().size() > ITEM_SHOW_NUM; const int showcount = showOpenWidget ? ITEM_SHOW_NUM : m_localData->scheduleInfoVector().size(); int offset = 0; //获取第N个日程 if (jsonData->getPropertyStatus() == JsonData::LAST) { offset = showcount; } else { offset = jsonData->offset(); } if (offset > 0) { m_localData->setOffset(offset); m_localData->setSelectInfo(m_localData->scheduleInfoVector().at(offset - 1)); DSchedule::Ptr info = m_localData->SelectInfo(); //如果语义为“第xx个修改到xxx”,添加对修改信息的获取 //类型转换 JsonData *queryData = const_cast(jsonData); changejsondata *mchangeJsonData = dynamic_cast(queryData); //如果有修改时间的信息则赋值 if (mchangeJsonData->toDateTime().suggestDatetime.size() > 0) { m_localData->setToTime(mchangeJsonData->toDateTime()); } //如果有修改内容的信息则获取 if (!mchangeJsonData->toPlaceStr().isEmpty()) { m_localData->setToTitleName(mchangeJsonData->toPlaceStr()); } return m_Task->getReplyBySelectSchedule(m_localData->SelectInfo()); } else { qCWarning(CommonLogger) << "offset <=0"; Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, false); return reply; } } dde-calendar-5.14.13/schedule-plugin/src/state/selectandquerystate.h000066400000000000000000000011101473346337000254340ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SELECTANDQUERYSTATE_H #define SELECTANDQUERYSTATE_H #include "schedulestate.h" class SelectAndQueryState : public scheduleState { public: explicit SelectAndQueryState(scheduleBaseTask *task); Reply getReplyByIntent(bool isOK) override; protected: Filter_Flag eventFilter(const JsonData *jsonData) override; Reply ErrEvent() override; Reply normalEvent(const JsonData *jsonData) override; }; #endif // SELECTANDQUERYSTATE_H dde-calendar-5.14.13/schedule-plugin/src/state/selectinquirystate.cpp000066400000000000000000000040601473346337000256460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "selectinquirystate.h" #include "../globaldef.h" #include "../widget/repeatschedulewidget.h" #include "../task/schedulebasetask.h" selectInquiryState::selectInquiryState(scheduleBaseTask *task) : scheduleState(task) { } Reply selectInquiryState::getReplyByIntent(bool isOK) { Q_UNUSED(isOK) Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true) return reply; } scheduleState::Filter_Flag selectInquiryState::eventFilter(const JsonData *jsonData) { if (jsonData->getPropertyStatus() == JsonData::ALL || jsonData->getPropertyStatus() == JsonData::NEXT || jsonData->isVaild() || jsonData->getRepeatStatus() != JsonData::NONE) { return Filter_Flag::Fileter_Init; } if (jsonData->getPropertyStatus() == JsonData::LAST) return Fileter_Normal; if (jsonData->getDateTime().suggestDatetime.size() > 0 || !jsonData->TitleName().isEmpty()) { return Fileter_Init; } bool showOpenWidget = m_localData->scheduleInfoVector().size() > ITEM_SHOW_NUM; const int showcount = showOpenWidget ? ITEM_SHOW_NUM : m_localData->scheduleInfoVector().size(); if (jsonData->offset() > showcount) { return Fileter_Err; } return Fileter_Normal; } Reply selectInquiryState::ErrEvent() { Reply reply; REPLY_ONLY_TTS(reply, QUERY_ERR_TTS, QUERY_ERR_TTS, true) return reply; } Reply selectInquiryState::normalEvent(const JsonData *jsonData) { bool showOpenWidget = m_localData->scheduleInfoVector().size() > ITEM_SHOW_NUM; const int showcount = showOpenWidget ? ITEM_SHOW_NUM : m_localData->scheduleInfoVector().size(); int offset = 0; if (jsonData->getPropertyStatus() == JsonData::LAST) { offset = showcount; } else { offset = jsonData->offset(); } Reply m_reply; DSchedule::Ptr info = m_localData->scheduleInfoVector().at(offset - 1); return m_Task->getReplyBySelectSchedule(info); } dde-calendar-5.14.13/schedule-plugin/src/state/selectinquirystate.h000066400000000000000000000011441473346337000253130ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SELECTINQUIRYSTATE_H #define SELECTINQUIRYSTATE_H #include "schedulestate.h" #include "dschedule.h" class selectInquiryState : public scheduleState { public: explicit selectInquiryState(scheduleBaseTask *task); Reply getReplyByIntent(bool isOK) override; protected: Filter_Flag eventFilter(const JsonData *jsonData) override; Reply ErrEvent() override; Reply normalEvent(const JsonData *jsonData) override; private: }; #endif // SELECTINQUIRYSTATE_H dde-calendar-5.14.13/schedule-plugin/src/task/000077500000000000000000000000001473346337000210235ustar00rootroot00000000000000dde-calendar-5.14.13/schedule-plugin/src/task/cancelscheduletask.cpp000066400000000000000000000205041473346337000253550ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cancelscheduletask.h" #include "../data/canceljsondata.h" #include "../globaldef.h" #include "../widget/schedulelistwidget.h" #include "../widget/repeatschedulewidget.h" #include "queryscheduleproxy.h" #include "../state/queryschedulestate.h" #include "../state/selectinquirystate.h" #include "../state/repeatfeedbackstate.h" #include "../data/clocaldata.h" #include "../state/confirwfeedbackstate.h" #include "dscheduledatamanager.h" cancelScheduleTask::cancelScheduleTask() : scheduleBaseTask(new queryScheduleState(this)) { } void cancelScheduleTask::slotSelectScheduleIndex(int index) { scheduleState *currentState = getCurrentState(); CLocalData::Ptr localData = currentState->getLocalData(); if (!(localData->scheduleInfoVector().size() < index)) { Reply reply = getReplyBySelectSchedule(localData->scheduleInfoVector().at(index - 1)); updateState(); emit signaleSendMessage(reply); } } void cancelScheduleTask::slotButtonCheckNum(int index, const QString &text, const int buttonCount) { Q_UNUSED(text); Reply reply; scheduleState *currentState = getCurrentState(); if (buttonCount == 2) { if (index == 1) { reply = confirwScheduleHandle(currentState->getLocalData()->SelectInfo()); } } if (buttonCount == 3) { if (index == 1) { reply = repeatScheduleHandle(currentState->getLocalData()->SelectInfo(), false); } if (index == 2) { reply = repeatScheduleHandle(currentState->getLocalData()->SelectInfo(), true); } } if (index == 0) { reply = InitState(nullptr, true); } else { InitState(nullptr, true); } emit signaleSendMessage(reply); } scheduleState *cancelScheduleTask::getCurrentState() { scheduleState *currentState = m_State; while (currentState->getNextState() != nullptr) { currentState = currentState->getNextState(); } return currentState; } Reply cancelScheduleTask::getFeedbackByQuerySchedule(const DSchedule::List &infoVector) { Reply m_reply; scheduleState *nextState = nullptr; scheduleState *currentState = getCurrentState(); if (infoVector.size() == 0) { QString m_TTSMessage; QString m_DisplyMessage; m_TTSMessage = NO_SCHEDULE_TTS; m_DisplyMessage = NO_SCHEDULE_TTS; REPLY_ONLY_TTS(m_reply, m_TTSMessage, m_DisplyMessage, true); currentState->setNextState(nextState); } else if (infoVector.size() == 1) { m_reply = getReplyBySelectSchedule(infoVector.at(0)); } else { nextState = new selectInquiryState(this); CLocalData::Ptr m_Data(new CLocalData()); m_Data->setScheduleInfoVector(infoVector); nextState->setLocalData(m_Data); m_reply = getListScheduleReply(infoVector); currentState->setNextState(nextState); } return m_reply; } Reply cancelScheduleTask::getReplyBySelectSchedule(const DSchedule::Ptr &info) { Reply m_reply; CLocalData::Ptr m_Data(new CLocalData()); scheduleState *nextState = nullptr; scheduleState *currentState = getCurrentState(); m_Data->setSelectInfo(info); if (info->getRRuleType() == DSchedule::RRuleType::RRule_None) { nextState = new confirwFeedbackState(this); m_reply = getConfirwScheduleReply(info); } else { nextState = new repeatfeedbackstate(this); m_reply = getRepeatReply(info); } nextState->setLocalData(m_Data); currentState->setNextState(nextState); return m_reply; } Reply cancelScheduleTask::InitState(const JsonData *jsonData, bool isUpdateState) { Reply m_reply; scheduleState *nextState = new queryScheduleState(this); scheduleState *currentState = getCurrentState(); currentState->setNextState(nextState); if (jsonData != nullptr) { m_reply = nextState->process(jsonData); } else { REPLY_ONLY_TTS(m_reply, CANCEL_DELETION_TTS, CANCEL_DELETION_TTS, true); } if (isUpdateState) { updateState(); } return m_reply; } Reply cancelScheduleTask::repeatScheduleHandle(const DSchedule::Ptr &info, bool isOnlyOne) { deleteRepeatSchedule(info, isOnlyOne); Reply reply; REPLY_ONLY_TTS(reply, CONFIRM_DELETION_TTS, CONFIRM_DELETION_TTS, true); scheduleState *nextState = new queryScheduleState(this); scheduleState *currentState = getCurrentState(); currentState->setNextState(nextState); return reply; } Reply cancelScheduleTask::confirwScheduleHandle(const DSchedule::Ptr &info) { deleteOrdinarySchedule(info); Reply reply; REPLY_ONLY_TTS(reply, CONFIRM_DELETION_TTS, CONFIRM_DELETION_TTS, true); scheduleState *nextState = new queryScheduleState(this); scheduleState *currentState = getCurrentState(); currentState->setNextState(nextState); return reply; } Reply cancelScheduleTask::confirmInfo(bool isOK) { if (isOK) { scheduleState *currentState = getCurrentState(); return confirwScheduleHandle(currentState->getLocalData()->SelectInfo()); } else { return InitState(nullptr); } } QWidget *cancelScheduleTask::createRepeatWidget(const DSchedule::Ptr &info) { repeatScheduleWidget *repeatWidget = new repeatScheduleWidget(repeatScheduleWidget::Operation_Cancel, repeatScheduleWidget::Widget_Repeat); repeatWidget->setSchedule(info); connect(repeatWidget, &repeatScheduleWidget::signalButtonCheckNum, this, &cancelScheduleTask::slotButtonCheckNum); return repeatWidget; } QWidget *cancelScheduleTask::createConfirmWidget(const DSchedule::Ptr &info) { repeatScheduleWidget *cwidget = new repeatScheduleWidget(repeatScheduleWidget::Operation_Cancel, repeatScheduleWidget::Widget_Confirm); cwidget->setSchedule(info); connect(cwidget, &repeatScheduleWidget::signalButtonCheckNum, this, &cancelScheduleTask::slotButtonCheckNum); return cwidget; } Reply cancelScheduleTask::getListScheduleReply(const DSchedule::List &infoVector) { scheduleListWidget *m_viewWidget = new scheduleListWidget(); m_viewWidget->setScheduleInfoVector(infoVector); connect(m_viewWidget, &scheduleListWidget::signalSelectScheduleIndex, this, &cancelScheduleTask::slotSelectScheduleIndex); QString m_TTSMessage; QString m_DisplyMessage; m_TTSMessage = CANCEL_SELECT_TTS; m_DisplyMessage = CANCEL_SELECT_TTS; Reply reply; REPLY_WIDGET_TTS(reply, m_viewWidget, m_TTSMessage, m_DisplyMessage, false); return reply; } Reply cancelScheduleTask::getConfirwScheduleReply(const DSchedule::Ptr &info) { QString m_TTSMessage; QString m_DisplyMessage; m_TTSMessage = CONFIRM_SCHEDULE_CANCEL_TTS; m_DisplyMessage = CONFIRM_SCHEDULE_CANCEL_TTS; QWidget *m_confirwWidget = createConfirmWidget(info); Reply reply; REPLY_WIDGET_TTS(reply, m_confirwWidget, m_TTSMessage, m_DisplyMessage, false); return reply; } Reply cancelScheduleTask::getRepeatReply(const DSchedule::Ptr &info) { QString m_TTSMessage; QString m_DisplyMessage; m_TTSMessage = REPEST_SCHEDULE_CANCEL_TTS; m_DisplyMessage = REPEST_SCHEDULE_CANCEL_TTS; QWidget *m_repeatReply = createRepeatWidget(info); Reply reply; REPLY_WIDGET_TTS(reply, m_repeatReply, m_TTSMessage, m_DisplyMessage, false); return reply; } void cancelScheduleTask::deleteRepeatSchedule(const DSchedule::Ptr &info, bool isOnlyOne) { if (isOnlyOne) { DSchedule::Ptr newschedule = DScheduleDataManager::getInstance()->queryScheduleByScheduleID(info->uid()); newschedule->recurrence()->addExDateTime(info->dtStart()); DScheduleDataManager::getInstance()->updateSchedule(newschedule); } else { if (info->recurrenceId().isValid() == 0) { DScheduleDataManager::getInstance()->deleteScheduleByScheduleID(info->uid()); } else { DSchedule::Ptr newschedule = DScheduleDataManager::getInstance()->queryScheduleByScheduleID(info->uid()); newschedule->recurrence()->setDuration(0); newschedule->recurrence()->setEndDateTime(info->dtStart().addDays(-1)); DScheduleDataManager::getInstance()->updateSchedule(newschedule); } } } void cancelScheduleTask::deleteOrdinarySchedule(const DSchedule::Ptr &info) { DScheduleDataManager::getInstance()->deleteScheduleByScheduleID(info->uid()); } dde-calendar-5.14.13/schedule-plugin/src/task/cancelscheduletask.h000066400000000000000000000026731473346337000250310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CANCELSCHEDULETASK_H #define CANCELSCHEDULETASK_H #include "schedulebasetask.h" class scheduleState; class cancelScheduleTask : public scheduleBaseTask { Q_OBJECT public: cancelScheduleTask(); Reply getFeedbackByQuerySchedule(const DSchedule::List &infoVector) override; Reply getReplyBySelectSchedule(const DSchedule::Ptr &info) override; Reply InitState(const JsonData *jsonData, bool isUpdateState = false) override; Reply repeatScheduleHandle(const DSchedule::Ptr &info, bool isOnlyOne) override; Reply confirwScheduleHandle(const DSchedule::Ptr &info) override; Reply confirmInfo(bool isOK) override; public slots: void slotSelectScheduleIndex(int index); void slotButtonCheckNum(int index, const QString &text, const int buttonCount); private: scheduleState *getCurrentState(); QWidget *createRepeatWidget(const DSchedule::Ptr &info); QWidget *createConfirmWidget(const DSchedule::Ptr &info); Reply getListScheduleReply(const DSchedule::List &infoVector); Reply getConfirwScheduleReply(const DSchedule::Ptr &info); Reply getRepeatReply(const DSchedule::Ptr &info); void deleteRepeatSchedule(const DSchedule::Ptr &info, bool isOnlyOne = true); void deleteOrdinarySchedule(const DSchedule::Ptr &info); private: }; #endif // CANCELSCHEDULETASK_H dde-calendar-5.14.13/schedule-plugin/src/task/changescheduletask.cpp000066400000000000000000000417641473346337000253700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "changescheduletask.h" #include "../data/changejsondata.h" #include "../globaldef.h" #include "../widget/schedulelistwidget.h" #include "../widget/repeatschedulewidget.h" #include "queryscheduleproxy.h" #include "../state/selectandquerystate.h" #include "../state/confirwfeedbackstate.h" #include "../state/queryschedulestate.h" #include "../state/repeatfeedbackstate.h" #include "../state/getchangedatastate.h" #include "dscheduledatamanager.h" #include #include changeScheduleTask::changeScheduleTask() : scheduleBaseTask(new queryScheduleState(this)) { } Reply changeScheduleTask::getFeedbackByQuerySchedule(const DSchedule::List &infoVector) { Reply m_reply; scheduleState *nextState = nullptr; scheduleState *currentState = getCurrentState(); if (infoVector.size() == 0) { QString m_TTSMessage; QString m_DisplyMessage; m_TTSMessage = NO_SCHEDULE_TTS; m_DisplyMessage = NO_SCHEDULE_TTS; REPLY_ONLY_TTS(m_reply, m_TTSMessage, m_DisplyMessage, true); currentState->setNextState(nextState); } else if (infoVector.size() == 1) { currentState->getLocalData()->setSelectInfo(infoVector.at(0)); m_reply = getReplyBySelectSchedule(infoVector.at(0)); } else { nextState = new SelectAndQueryState(this); CLocalData::Ptr m_Data = currentState->getLocalData(); m_Data->setScheduleInfoVector(infoVector); nextState->setLocalData(m_Data); m_reply = getListScheduleReply(infoVector); currentState->setNextState(nextState); } return m_reply; } void changeScheduleTask::slotSelectScheduleIndex(int index) { scheduleState *currentState = getCurrentState(); CLocalData::Ptr localData = currentState->getLocalData(); if (!(localData->scheduleInfoVector().size() < index)) { localData->setSelectInfo(localData->scheduleInfoVector().at(index - 1)); Reply reply = getReplyBySelectSchedule(localData->scheduleInfoVector().at(index - 1)); updateState(); emit signaleSendMessage(reply); } } void changeScheduleTask::slotButtonCheckNum(int index, const QString &text, const int buttonCount) { Q_UNUSED(text); Reply reply; scheduleState *currentState = getCurrentState(); if (buttonCount == 2) { if (index == 1) { reply = confirwScheduleHandle(currentState->getLocalData()->SelectInfo()); } } if (buttonCount == 3) { if (index == 1) { reply = repeatScheduleHandle(currentState->getLocalData()->SelectInfo(), false); } if (index == 2) { reply = repeatScheduleHandle(currentState->getLocalData()->SelectInfo(), true); } } if (index == 0) { reply = InitState(nullptr, true); } else { InitState(nullptr, true); } emit signaleSendMessage(reply); } scheduleState *changeScheduleTask::getCurrentState() { scheduleState *currentState = m_State; while (currentState->getNextState() != nullptr) { currentState = currentState->getNextState(); } return currentState; } Reply changeScheduleTask::getReplyBySelectSchedule(const DSchedule::Ptr &info) { Reply m_reply; scheduleState *nextState = nullptr; scheduleState *currentState = getCurrentState(); CLocalData::Ptr m_Data = currentState->getLocalData(); m_Data->setSelectInfo(info); if (m_Data->getOffet() < 0) { m_Data->setOffset(1); } if (m_Data->getToTime().suggestDatetime.size() == 0 && m_Data->getToTitleName() == "") { QWidget *infoWidget = createInquiryWidget(info); REPLY_WIDGET_TTS(m_reply, infoWidget, CHANGE_TO_TTS, CHANGE_TO_TTS, false); //添加获取修改信息状态 nextState = new getChangeDataState(this); nextState->setLocalData(m_Data); } else { //获取下一个状态 nextState = getNextStateBySelectScheduleInfo(info, m_Data, m_reply); } currentState->setNextState(nextState); return m_reply; } Reply changeScheduleTask::InitState(const JsonData *jsonData, bool isUpdateState) { Reply m_reply; scheduleState *nextState = new queryScheduleState(this); scheduleState *currentState = getCurrentState(); currentState->setNextState(nextState); if (jsonData != nullptr) { if (currentState->getLocalData() != nullptr) { currentState->setLocalData(nullptr); } m_reply = nextState->process(jsonData); } else { REPLY_ONLY_TTS(m_reply, CANCEL_CHANGE_TTS, CANCEL_CHANGE_TTS, true); } if (isUpdateState) { updateState(); } return m_reply; } Reply changeScheduleTask::repeatScheduleHandle(const DSchedule::Ptr &info, bool isOnlyOne) { changeRepeatSchedule(info, isOnlyOne); Reply reply; REPLY_ONLY_TTS(reply, CONFIRM_CHANGE_TTS, CONFIRM_CHANGE_TTS, true); scheduleState *nextState = new queryScheduleState(this); scheduleState *currentState = getCurrentState(); currentState->setNextState(nextState); return reply; } Reply changeScheduleTask::confirwScheduleHandle(const DSchedule::Ptr &info) { Q_UNUSED(info); scheduleState *currentState = getCurrentState(); changeOrdinarySchedule(currentState->getLocalData()->getNewInfo()); Reply reply; REPLY_ONLY_TTS(reply, CONFIRM_CHANGE_TTS, CONFIRM_CHANGE_TTS, true); scheduleState *nextState = new queryScheduleState(this); currentState->setNextState(nextState); return reply; } Reply changeScheduleTask::confirmInfo(bool isOK) { scheduleState *currentState = getCurrentState(); if (isOK) { Q_UNUSED(isOK) changeOrdinarySchedule(currentState->getLocalData()->getNewInfo()); Reply reply; REPLY_ONLY_TTS(reply, CONFIRM_CHANGE_TTS, CONFIRM_CHANGE_TTS, true) return reply; } else { return InitState(nullptr); } } QWidget *changeScheduleTask::createRepeatWidget(const DSchedule::Ptr &info) { repeatScheduleWidget *repeatWidget = new repeatScheduleWidget(repeatScheduleWidget::Operation_Change, repeatScheduleWidget::Widget_Repeat); repeatWidget->setSchedule(info); connect(repeatWidget, &repeatScheduleWidget::signalButtonCheckNum, this, &changeScheduleTask::slotButtonCheckNum); return repeatWidget; } QWidget *changeScheduleTask::createConfirmWidget(const DSchedule::Ptr &info) { repeatScheduleWidget *cwidget = new repeatScheduleWidget(repeatScheduleWidget::Operation_Change, repeatScheduleWidget::Widget_Confirm); cwidget->setSchedule(info); connect(cwidget, &repeatScheduleWidget::signalButtonCheckNum, this, &changeScheduleTask::slotButtonCheckNum); return cwidget; } QWidget *changeScheduleTask::createInquiryWidget(const DSchedule::Ptr &info) { repeatScheduleWidget *infoWidget = new repeatScheduleWidget(repeatScheduleWidget::Operation_Change, repeatScheduleWidget::Widget_Confirm, false); infoWidget->setSchedule(info); return infoWidget; } Reply changeScheduleTask::getListScheduleReply(const DSchedule::List &infoVector) { scheduleListWidget *m_viewWidget = new scheduleListWidget(); connect(m_viewWidget, &scheduleListWidget::signalSelectScheduleIndex, this, &changeScheduleTask::slotSelectScheduleIndex); m_viewWidget->setScheduleInfoVector(infoVector); QString m_TTSMessage; QString m_DisplyMessage; m_TTSMessage = SELECT_CHANGE_TTS; m_DisplyMessage = SELECT_CHANGE_TTS; Reply reply; REPLY_WIDGET_TTS(reply, m_viewWidget, m_TTSMessage, m_DisplyMessage, false); return reply; } scheduleState *changeScheduleTask::getNextStateBySelectScheduleInfo(const DSchedule::Ptr &info, const CLocalData::Ptr &localData, Reply &reply) { QString m_TTSMessage; QString m_DisplyMessage; //获取当前状态 scheduleState *currentState = getCurrentState(); //下一个状态 scheduleState *nextState{nullptr}; //如果修改的新日程时间在范围内则正常提醒 if (getNewInfo()) { //需要显示的窗口 QWidget *_showWidget; if (info->getRRuleType() == DSchedule::RRule_None) { m_TTSMessage = CONFIRM_SCHEDULE_CHANGE_TTS; m_DisplyMessage = CONFIRM_SCHEDULE_CHANGE_TTS; _showWidget = createConfirmWidget(currentState->getLocalData()->getNewInfo()); //设置下一个状态为普通日程确认状态 nextState = new confirwFeedbackState(this); } else { m_TTSMessage = REPEST_SCHEDULE_CHANGE_TTS; m_DisplyMessage = REPEST_SCHEDULE_CHANGE_TTS; _showWidget = createRepeatWidget(currentState->getLocalData()->getNewInfo()); //设置下一个状态为重复日程确认状态 nextState = new repeatfeedbackstate(this); } //设置修改的日程信息 localData->setNewInfo(currentState->getLocalData()->getNewInfo()); //设置存储数据 nextState->setLocalData(localData); REPLY_WIDGET_TTS(reply, _showWidget, m_TTSMessage, m_DisplyMessage, false); } else { //如果修改的日程不在正常范围内则回复错误,并设置下一个状态为询问查询状态 m_TTSMessage = CHANGE_TIME_OUT_TTS; m_DisplyMessage = CHANGE_TIME_OUT_TTS; REPLY_ONLY_TTS(reply, m_TTSMessage, m_DisplyMessage, true); nextState = new queryScheduleState(this); }; return nextState; } bool changeScheduleTask::getNewInfo() { scheduleState *currentState = getCurrentState(); DSchedule::Ptr m_NewInfo = currentState->getLocalData()->SelectInfo(); if (!currentState->getLocalData()->getToTitleName().isEmpty()) m_NewInfo->setSummary(currentState->getLocalData()->getToTitleName()); QVector m_ToTime = currentState->getLocalData()->getToTime().dateTime; //获取建议时间 QVector m_suggestDatetime = currentState->getLocalData()->getToTime().suggestDatetime; if (m_ToTime.size() > 0) { if (m_ToTime.size() == 1) { //如果存在日期信息 if (m_ToTime.at(0).hasDate) { //获取日程的开始结束时间差 qint64 interval = m_NewInfo->dtStart().secsTo(m_NewInfo->dtEnd()); //设置修改的开始日期 m_NewInfo->setDtStart(QDateTime(m_ToTime.at(0).m_Date, m_NewInfo->dtStart().time())); //设置修改的结束日期 m_NewInfo->setDtEnd(m_NewInfo->dtStart().addSecs(interval)); } //如果修改的DateTime带时间则设置该时间,否则保持原来的时间点 if (m_ToTime.at(0).hasTime) { //如果修改的日期为当天则取suggestTime时间 if (m_NewInfo->dtStart().date() == QDate::currentDate()) { m_NewInfo->setDtStart(m_suggestDatetime.at(0).datetime); } else { m_NewInfo->setDtStart(QDateTime(m_NewInfo->dtStart().date(), m_ToTime.at(0).m_Time)); } m_NewInfo->setDtEnd(m_NewInfo->dtStart().addSecs(3600)); //如果存在时间点则将全天的日程修改为非全天并修改提醒规则 if (m_NewInfo->allDay()) { m_NewInfo->setAllDay(false); //非全天设置为立即提醒 m_NewInfo->setAlarmType(DSchedule::Alarm_Begin); } } } if (m_ToTime.size() == 2) { //如果存在日期信息 if (m_ToTime.at(0).hasDate) { //设置修改的开始日期 m_NewInfo->setDtStart(m_ToTime.at(0).m_Date.startOfDay()); } //如果修改的DateTime带时间则设置该时间,否则保持原来的时间点 if (m_ToTime.at(0).hasTime) { m_NewInfo->setDtStart(QDateTime(m_NewInfo->dtStart().date(), m_ToTime.at(0).m_Time)); } //如果存在日期信息 if (m_ToTime.at(1).hasDate) { //设置修改的结束日期 m_NewInfo->setDtEnd(m_ToTime.at(1).m_Date.startOfDay()); } //如果修改的DateTime带时间则设置该时间,否则保持原来的时间点 if (m_ToTime.at(1).hasTime) m_NewInfo->setDtEnd(QDateTime(m_NewInfo->dtEnd().date(), m_ToTime.at(1).m_Time)); //如果开始时间大于结束时间则设置结束时间为开始时间往后一小时 if (m_NewInfo->dtEnd() < m_NewInfo->dtStart()) { m_NewInfo->setDtEnd(m_NewInfo->dtStart().addSecs(3600)); } //TODO 对于多个时间点还未支持,全天非全天的修改待做 } } currentState->getLocalData()->setNewInfo(m_NewInfo); return changeDateTimeIsInNormalRange(m_NewInfo); } void changeScheduleTask::changeRepeatSchedule(const DSchedule::Ptr &info, bool isOnlyOne) { if (isOnlyOne) { changeOnlyInfo(info); } else { changeAllInfo(info); } } void changeScheduleTask::changeOnlyInfo(const DSchedule::Ptr &info) { Q_UNUSED(info) scheduleState *currentState = getCurrentState(); DSchedule::Ptr newschedule = currentState->getLocalData()->getNewInfo(); //原始信息 DSchedule::Ptr updatescheduleData = DScheduleDataManager::getInstance()->queryScheduleByScheduleID(newschedule->uid()); updatescheduleData->recurrence()->addExDateTime(newschedule->dtStart()); newschedule->setRRuleType(DSchedule::RRule_None); newschedule->setUid(DScheduleDataManager::getInstance()->createSchedule(newschedule)); DScheduleDataManager::getInstance()->updateSchedule(updatescheduleData); } void changeScheduleTask::changeAllInfo(const DSchedule::Ptr &info) { scheduleState *currentState = getCurrentState(); DSchedule::Ptr newinfo = currentState->getLocalData()->getNewInfo(); if (info->getRRuleType() == DSchedule::RRule_None) { DSchedule::Ptr schedule = newinfo; DScheduleDataManager::getInstance()->updateSchedule(schedule); } else { //获取原始日程信息 DSchedule::Ptr updatescheduleData = DScheduleDataManager::getInstance()->queryScheduleByScheduleID(info->uid()); //第几次重复日程 int repetNum = DSchedule::numberOfRepetitions(updatescheduleData, newinfo->dtStart()); if (repetNum == 1) { //如果为第一个 DScheduleDataManager::getInstance()->updateSchedule(newinfo); } else { //如果不是第一个 if (newinfo->recurrence()->duration() > 1) { int duration = newinfo->recurrence()->duration() - repetNum + 1; //结束于次数 if (duration < 2) { newinfo->setRRuleType(DSchedule::RRule_None); } else { newinfo->recurrence()->setDuration(duration); } //修改原始日程,如果原始日程剩余的重复次数为1,则修改为普通日程 updatescheduleData->recurrence()->setDuration(repetNum - 1); if (updatescheduleData->recurrence()->duration() == 1) { updatescheduleData->setRRuleType(DSchedule::RRule_None); } } else if (newinfo->recurrence()->duration() == 0) { //结束于时间 if (newinfo->dtStart().date() == newinfo->recurrence()->endDateTime().date()) { newinfo->setRRuleType(DSchedule::RRule_None); } updatescheduleData->recurrence()->setEndDate(newinfo->dtStart().date().addDays(-1)); if (updatescheduleData->dtStart().date() == updatescheduleData->recurrence()->endDate()) { updatescheduleData->setRRuleType(DSchedule::RRule_None); } } else { //永不 updatescheduleData->recurrence()->setEndDate(newinfo->dtStart().date().addDays(-1)); if (updatescheduleData->dtStart().date() == updatescheduleData->recurrence()->endDate()) { updatescheduleData->setRRuleType(DSchedule::RRule_None); } } DScheduleDataManager::getInstance()->createSchedule(newinfo); //修改原始日程 DScheduleDataManager::getInstance()->updateSchedule(updatescheduleData); } } } void changeScheduleTask::changeOrdinarySchedule(const DSchedule::Ptr &info) { DScheduleDataManager::getInstance()->updateSchedule(info); } bool changeScheduleTask::changeDateTimeIsInNormalRange(const DSchedule::Ptr &info) { bool result {true}; //当前时间 QDateTime currentDateTime {QDateTime::currentDateTime()}; //最大时间 QDateTime maxDateTime = currentDateTime.addMonths(6); //如果开始时间为过期时间则为false if (info->dtStart() < currentDateTime) { result = false; }; //如果开始时间或结束时间大于最大时间则为false if (info->dtStart() > maxDateTime || info->dtEnd() > maxDateTime) { result = false; } return result; } dde-calendar-5.14.13/schedule-plugin/src/task/changescheduletask.h000066400000000000000000000050131473346337000250200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CHANGESCHEDULETASK_H #define CHANGESCHEDULETASK_H #include "schedulebasetask.h" #include "dschedule.h" #include "clocaldata.h" class changeScheduleTask : public scheduleBaseTask { Q_OBJECT public: explicit changeScheduleTask(); Reply getFeedbackByQuerySchedule(const DSchedule::List &infoVector) override; Reply getReplyBySelectSchedule(const DSchedule::Ptr &info) override; Reply InitState(const JsonData *jsonData, bool isUpdateState = false) override; Reply repeatScheduleHandle(const DSchedule::Ptr &info, bool isOnlyOne) override; Reply confirwScheduleHandle(const DSchedule::Ptr &info) override; Reply confirmInfo(bool isOK) override; public slots: void slotSelectScheduleIndex(int index); void slotButtonCheckNum(int index, const QString &text, const int buttonCount); private: scheduleState *getCurrentState(); QWidget *createRepeatWidget(const DSchedule::Ptr &info); QWidget *createConfirmWidget(const DSchedule::Ptr &info); QWidget *createInquiryWidget(const DSchedule::Ptr &info); Reply getListScheduleReply(const DSchedule::List &infoVector); /** * @brief getNextStateBySelectScheduleInfo 根据选择的日程获取下一个修改状态 * @param info 选择的日程信息 * @param localData 当前状态的存储数据 * @param reply 修改的回复 * @return 下一个状态 */ scheduleState *getNextStateBySelectScheduleInfo(const DSchedule::Ptr &info, const CLocalData::Ptr &localData, Reply &reply); /** * @brief getNewInfo 根据修改信息获取新的日程信息 * @return 在时间范围内返回true */ bool getNewInfo(); void changeRepeatSchedule(const DSchedule::Ptr &info, bool isOnlyOne); void changeOnlyInfo(const DSchedule::Ptr &info); void changeAllInfo(const DSchedule::Ptr &info); void changeOrdinarySchedule(const DSchedule::Ptr &info); /** * @brief changeDateTimeIsInRange 判断修改的日期在正确的时间范围内 * @param info 修改过的日程 * @return 在正常范围内则返回true */ bool changeDateTimeIsInNormalRange(const DSchedule::Ptr &info); private: DSchedule::List m_scheduleInfo; }; #endif // CHANGESCHEDULETASK_H dde-calendar-5.14.13/schedule-plugin/src/task/createscheduletask.cpp000066400000000000000000001065771473346337000254120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "createscheduletask.h" #include "../globaldef.h" #include "commondef.h" #include "dscheduledatamanager.h" createScheduleTask::createScheduleTask() : scheduleBaseTask() { } Reply createScheduleTask::SchedulePress(semanticAnalysisTask &semanticTask) { //创建 CreateJsonData *createJsonData = dynamic_cast(semanticTask.getJsonData()); //如果转换失败则返回错误消息 if (createJsonData == nullptr) return errorMessage(); Reply m_reply; if (createJsonData->getPropertyStatus() != JsonData::PRO_NONE || createJsonData->offset() > -1) { REPLY_ONLY_TTS(m_reply, CREATE_ERR_TTS, CREATE_ERR_TTS, true); return m_reply; } //如果时间无效 if (createJsonData->getDateTimeInvalid()) { REPLY_ONLY_TTS(m_reply, DATETIME_ERR_TTS, DATETIME_ERR_TTS, true); return m_reply; } m_widget = new createSchedulewidget(); //设置日程时间 setDateTime(createJsonData); if (m_begintime > m_endtime) { //日程的开始时间大于结束时间, qCritical("error: schedule begindatetime is after the enddatetime!"); } if (shouldEndSession(createJsonData)) { if (!isValidDateTime) { qCInfo(CommonLogger) << "schedule begintime or endtime is not valided!"; //无效时间,直接返回回复语 REPLY_ONLY_TTS(m_reply, replyNotValidDT, replyNotValidDT, true); //设置时间有效标志为true isValidDateTime = true; return m_reply; } else if (!beginDateTimeIsinHalfYear()) { if (beginDateTimeBeforeCurrent()) { qCInfo(CommonLogger) << "schedule begintime is before currenttime!"; //"我现在有点慌,因为我还不会制定过去的提醒" REPLY_ONLY_TTS(m_reply, createJsonData->SuggestMsg(), createJsonData->SuggestMsg(), true); } else if (beginDateTimeOutHalfYear()) { qCInfo(CommonLogger) << "schedule begintime is after halfyear!"; //"只能创建未来半年的日程" REPLY_ONLY_TTS(m_reply, CREATE_TIME_OUT_TTS, CREATE_TIME_OUT_TTS, true); } return m_reply; } else { //设置日程titlename setScheduleTitleName(createJsonData); //创建日程和插件 QString scheduleID = createScheduleWithRepeatStatus(createJsonData); creareScheduleUI(scheduleID); //带有插件的回复语 REPLY_WIDGET_TTS(m_reply, m_widget, getReply(createJsonData), getReply(createJsonData), true); } } else { //如果需要进行多轮,需要先将此标志设置为true isValidDateTime = true; //开始date为今天,没有给time(默认为00:00,小于当前time),需要进行多轮,设置默认回复语 //只有回复语 REPLY_ONLY_TTS(m_reply, createJsonData->SuggestMsg(), createJsonData->SuggestMsg(), false); } return m_reply; } void createScheduleTask::setDateTime(CreateJsonData *createJsonData) { //助手返回时间的个数 int DateTimeSize = createJsonData->getDateTime().suggestDatetime.size(); switch (DateTimeSize) { case 1: { //只有一个时间,为日程开始时间,结束时间为开始时间一个小时后 m_begintime = createJsonData->getDateTime().suggestDatetime.at(0).datetime; m_endtime = m_begintime.addSecs(60 * 60); if (!validDateTime(m_begintime)) { //日程时间是否有效 QString strDateTime = createJsonData->getDateTime().suggestDatetime.at(0).strDateTime; isValidDateTime = false; replyNotValidDT = QString(ISVALID_DATE_TIME).arg(strDateTime); break; } if (!createJsonData->getDateTime().suggestDatetime.at(0).hasTime) { m_begintime.setTime(QTime::currentTime()); m_endtime = m_begintime.addSecs(60 * 60); } } break; case 2: { //日程是否带有具体时间 bool firstScheduleHasTime = createJsonData->getDateTime().suggestDatetime.at(0).hasTime; bool secondScheduleHasTime = createJsonData->getDateTime().suggestDatetime.at(1).hasTime; //有两个时间 m_begintime = createJsonData->getDateTime().suggestDatetime.at(0).datetime; m_endtime = createJsonData->getDateTime().suggestDatetime.at(1).datetime; //日程开始时间是否有效 if (!validDateTime(m_begintime)) { QString strDateTime = createJsonData->getDateTime().suggestDatetime.at(0).strDateTime; isValidDateTime = false; replyNotValidDT = QString(ISVALID_DATE_TIME).arg(strDateTime); break; } //日程结束时间是否有效 if (!validDateTime(m_endtime)) { QString endDateTime = createJsonData->getDateTime().suggestDatetime.at(1).strDateTime; isValidDateTime = false; replyNotValidDT = QString(ISVALID_DATE_TIME).arg(endDateTime); break; } //开始时间为当天的,如果开始日期小于当天不做处理, if (m_begintime.date() == QDateTime::currentDateTime().date()) { if (m_begintime.time() > QTime::currentTime()) { //跨天日程,如果日程开始时间大于当前时间,则开始时间为当天 m_begintime.setDate(m_begintime.date().addDays(m_begintime.date().daysTo(QDate::currentDate()))); } else { //跨天日程,如果日程开始时间小于等于当前时间,则开始时间加一天 m_begintime.setDate(m_begintime.date().addDays(m_begintime.date().daysTo(QDate::currentDate()) + 1)); } } //开始时间没有具体时间点,设置为当前时间点 if (firstScheduleHasTime && !secondScheduleHasTime) { m_endtime.setTime(m_begintime.time()); } else if (!firstScheduleHasTime && secondScheduleHasTime) { m_begintime.setTime(m_endtime.time()); } } break; default: { //其他情况视为错误输入 isValidDateTime = false; replyNotValidDT = "您输入的时间不正确,请重新输入"; } break; } } void createScheduleTask::setScheduleTitleName(CreateJsonData *createJsonData) { if (createJsonData->TitleName().isEmpty()) //如果没有titlename,默认为:新建日程 m_widget->setTitleName(NEW_SCHEDULE); else //设置日程titlename m_widget->setTitleName(createJsonData->TitleName()); } QString createScheduleTask::createScheduleWithRepeatStatus(CreateJsonData *createJsonData) { //创建的日程信息 QString scheduleID; //重复日程的时间 QVector getDayNum = createJsonData->getRepeatNum(); //根据不同类型分别创建日程 switch (createJsonData->getRepeatStatus()) { case CreateJsonData::NONE: { //非重复日程,不能创建过期日程 if (m_begintime >= QDateTime::currentDateTime() && m_begintime < QDateTime::currentDateTime().addMonths(6)) { scheduleID = getNotRepeatDaySchedule(); } } break; case CreateJsonData::EVED: //每天重复日程 scheduleID = getEveryDaySchedule(); break; case CreateJsonData::EVEW: { //每周重复日程 scheduleID = getEveryWeekSchedule(getDayNum); } break; case CreateJsonData::EVEM: { //每月重复日程 scheduleID = getEveryMonthSchedule(getDayNum); } break; case CreateJsonData::EVEY: { //每年重复日程,不能创建过期或者超过半年的日程 if (m_begintime > QDateTime::currentDateTime() && m_begintime < QDateTime::currentDateTime().addMonths(6)) scheduleID = getEveryYearSchedule(); } break; case CreateJsonData::WORKD: //工作日 scheduleID = getEveryWorkDaySchedule(); break; case CreateJsonData::RESTD: { //休息日 scheduleID = getEveryRestDaySchedule(); } break; } return scheduleID; } void createScheduleTask::creareScheduleUI(const QString &scheduleID) { if (!scheduleID.isEmpty()) { m_widget->scheduleEmpty(true); //更新界面 m_widget->updateUI(scheduleID); } else { qCritical("Creat ScheduleInfo is Empty!"); } } QString createScheduleTask::getReply(CreateJsonData *createJsonData) { QString str_reply; //为特殊情况拼接回复语 if (createJsonData->getRepeatStatus() == CreateJsonData::RESTD && createJsonData->getDateTime().suggestDatetime.size() > 0 && createJsonData->getDateTime().suggestDatetime.at(0).hasTime) { //如果为休息日,并且有开始时间,拼接回复语 str_reply = QString(EVERY_WEEKEND_TTS).arg(m_begintime.toString("hh:mm")); } else if (createJsonData->getRepeatStatus() == CreateJsonData::NONE && createJsonData->getDateTime().suggestDatetime.size() > 0 && createJsonData->getDateTime().suggestDatetime.at(0).hasTime && createJsonData->getDateTime().suggestDatetime.at(0).datetime < QDateTime::currentDateTime() && createJsonData->getDateTime().suggestDatetime.size() == 2 && createJsonData->ShouldEndSession()) { //对于跨天日程,开始datetime小于当前datetime,则开始date增加一天,为其拼接回复语 str_reply = QString(BEGINDATETIME_LATER_THAN_CURRENTDATETIME_ACROSS_THE_DAY_TTS).arg(m_begintime.toString("hh:mm")); } else { //没有特殊情况使用默认回复语 str_reply = createJsonData->SuggestMsg(); } return str_reply; } bool createScheduleTask::beginDateTimeIsinHalfYear() { //判断日程开始时间是否在半年内 if (m_begintime < QDateTime::currentDateTime() || m_begintime > QDateTime::currentDateTime().addMonths(6)) return false; else return true; } bool createScheduleTask::beginDateTimeOutHalfYear() { //日程开始时间不在半年范围内 if (m_begintime > QDateTime::currentDateTime().addMonths(6)) return true; else return false; } bool createScheduleTask::beginDateTimeBeforeCurrent() { //日程开始时间早于当前时间 if (m_begintime < QDateTime::currentDateTime()) return true; else return false; } QString createScheduleTask::getNotRepeatDaySchedule() { //设置重复类型 m_widget->setRpeat(0); //创建日程 DSchedule::Ptr scheduleinfo = setDateTimeAndGetSchedule(m_begintime, m_endtime); return DScheduleDataManager::getInstance()->createSchedule(scheduleinfo); } QString createScheduleTask::getEveryDaySchedule() { //设置重复类型 m_widget->setRpeat(1); DSchedule::Ptr scheduleinfo = setDateTimeAndGetSchedule(m_begintime, m_endtime); //设置完成后,将everyDayState设置为false everyDayState = false; //创建日程 return DScheduleDataManager::getInstance()->createSchedule(scheduleinfo); } QString createScheduleTask::getEveryWeekSchedule(QVector dateRange) { QStringList scheduleIDs; //设置重复类型 m_widget->setRpeat(3); QVector beginDateTime {}; //获取解析时间 beginDateTime = analysisEveryWeekDate(dateRange); //每天重复 if (everyDayState) return getEveryDaySchedule(); for (int i = 0; i < beginDateTime.count(); i++) { //设置日程结束时间 m_endtime.setDate(beginDateTime.at(i).date()); //创建日程 scheduleIDs.append(DScheduleDataManager::getInstance()->createSchedule(setDateTimeAndGetSchedule(beginDateTime.at(i), m_endtime))); } //创建多个日程返回第一个 return scheduleIDs.isEmpty() ? QString() : scheduleIDs.first(); } QString createScheduleTask::getEveryMonthSchedule(QVector dateRange) { QVector beginDateTime {}; QStringList scheduleIDs; //设置重复类型 m_widget->setRpeat(4); //获取解析日期 beginDateTime = analysisEveryMonthDate(dateRange); //每天重复 if (everyDayState) return getEveryDaySchedule(); for (int i = 0; i < beginDateTime.count(); i++) { //设置日程结束时间 m_endtime.setDate(beginDateTime.at(i).date()); //创建日程 scheduleIDs.append(DScheduleDataManager::getInstance()->createSchedule(setDateTimeAndGetSchedule(beginDateTime.at(i), m_endtime))); } //创建多个日程返回第一个 return scheduleIDs.isEmpty() ? QString() : scheduleIDs.first(); } QString createScheduleTask::getEveryYearSchedule() { //设置重复类型 m_widget->setRpeat(5); //创建日程 return DScheduleDataManager::getInstance()->createSchedule(setDateTimeAndGetSchedule(m_begintime, m_endtime)); } QString createScheduleTask::getEveryWorkDaySchedule() { // QVector beginDateTime {}; // DSchedule::List schedule; //获取解析日期 // beginDateTime = analysisWorkDayDate(); //设置重复类型 m_widget->setRpeat(2); //创建日程 return DScheduleDataManager::getInstance()->createSchedule(setDateTimeAndGetSchedule(m_begintime, m_endtime)); // for (int i = 0; i < beginDateTime.count(); i++) { // //设置日程结束时间 // m_endtime.setDate(beginDateTime.at(i).date()); // //创建日程 // DScheduleDataManager::getInstance()->createSchedule(setDateTimeAndGetSchedule(beginDateTime.at(i), m_endtime)); // //将所有日程添加到日程容器中 // schedule.append(setDateTimeAndGetSchedule(beginDateTime.at(i), m_endtime)); // } // return schedule; } QString createScheduleTask::getEveryRestDaySchedule() { QVector beginDateTime {}; QStringList scheduleIDs; //设置重复类型 m_widget->setRpeat(3); //获取解析的时间 beginDateTime = analysisRestDayDate(); for (int i = 0; i < beginDateTime.count(); i++) { //设置日程结束时间 m_endtime.setDate(beginDateTime.at(i).date()); //创建日程 scheduleIDs.append(DScheduleDataManager::getInstance()->createSchedule(setDateTimeAndGetSchedule(beginDateTime.at(i), m_endtime))); } //创建多个日程返回第一个 return scheduleIDs.isEmpty() ? QString() : scheduleIDs.first(); } DSchedule::Ptr createScheduleTask::getFirstSchedule(DSchedule::List scheduleInfo) { //第一个日程的时间 QDate earlyDate = scheduleInfo.at(0)->dtStart().date(); //第一个日程的索引 int index = 0; for (int i = 1; i < scheduleInfo.count(); i++) { if (earlyDate > scheduleInfo.at(i)->dtStart().date()) { earlyDate = scheduleInfo.at(i)->dtStart().date(); index = i; } } return scheduleInfo.at(index); } int createScheduleTask::getCreatesDays(int firstDay, int secondday, bool containsToday) { if (containsToday) //如果包含今天+1 return secondday - firstDay + 1; else //不包含今天 return secondday - firstDay; } QVector createScheduleTask::getNoneWeekNumDate() { QVector beginDateTime {}; if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当天时间 m_begintime.setDate(QDate::currentDate()); } else { //日程开始时间小于等于当天时间 m_begintime.setDate(QDate::currentDate().addDays(1)); } beginDateTime.append(m_begintime); return beginDateTime; } QVector createScheduleTask::getOneWeekNumDate(int firstWeekNum) { QVector beginDateTime {}; int currentDayofWeek = QDate::currentDate().dayOfWeek(); if (firstWeekNum >= currentDayofWeek) { //开始周数大于等于今天所在周数 if (firstWeekNum == currentDayofWeek && m_begintime.time() <= QTime::currentTime()) { //开始周数等于今天所在周数,并且日程开始时间小于等于当前时间 m_begintime.setDate(QDate::currentDate().addDays(firstWeekNum + 7 - currentDayofWeek)); } else { //日程开始时间大于当前时间 m_begintime.setDate(QDate::currentDate().addDays(firstWeekNum - currentDayofWeek)); } } else { //开始周数小于今天所在周数 m_begintime.setDate(QDate::currentDate().addDays(firstWeekNum + 7 - currentDayofWeek)); } beginDateTime.append(m_begintime); return beginDateTime; } QVector createScheduleTask::getTwoWeekNumDate(int firstWeekNum, int secondWeekNum) { QVector beginDateTime {}; if (firstWeekNum == secondWeekNum || secondWeekNum - firstWeekNum == 6) { //开始周数等于结束周数,或者结束周数是7开始周数是1,为每天 everyDayState = true; return beginDateTime; } else if (firstWeekNum < secondWeekNum) { //开始周数小于结束周数 beginDateTime = firstWeekNumLessThanSecond(firstWeekNum, secondWeekNum); } else { //开始周数大于结束周数 if (firstWeekNum - secondWeekNum == 1) { //开始周数比结束周数大1,为每天 everyDayState = true; return beginDateTime; } else { //除去每天的其他情况 beginDateTime = firstWeekNumGreaterThanSecondButEveryDay(firstWeekNum, secondWeekNum); } } return beginDateTime; } QVector createScheduleTask::firstWeekNumLessThanSecond(int firstWeekNum, int secondWeekNum) { //对于工作日和休息日的情况,助手已自动区分,此处不再讨论 //对获取到的时间范围分情况讨论 QVector beginDateTime {}; int currentDayofWeek = QDate::currentDate().dayOfWeek(); //当前日期所在周数小于开始的周数 if (currentDayofWeek < firstWeekNum) { beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(firstWeekNum - currentDayofWeek), firstWeekNum, secondWeekNum)); } else if (currentDayofWeek >= firstWeekNum && currentDayofWeek <= secondWeekNum) { if (m_begintime.time() > QTime::currentTime()) { //开始时间大于当前时间 beginDateTime.append(getWeekBackPartDateTime(QDate::currentDate(), secondWeekNum, true)); beginDateTime.append(getWeekFrontPartDateTime(QDate::currentDate(), firstWeekNum, false)); } else { //开始时间小于等于当前时间 beginDateTime.append(getWeekBackPartDateTime(QDate::currentDate().addDays(1), secondWeekNum, false)); beginDateTime.append(getWeekFrontPartDateTime(QDate::currentDate(), firstWeekNum, true)); } } else if (currentDayofWeek > secondWeekNum) { beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(firstWeekNum + 7 - currentDayofWeek), firstWeekNum, secondWeekNum)); } return beginDateTime; } QVector createScheduleTask::firstWeekNumGreaterThanSecondButEveryDay(int firstWeekNum, int secondWeekNum) { QVector beginDateTime {}; int currentDayofWeek = QDate::currentDate().dayOfWeek(); if (currentDayofWeek >= firstWeekNum) { //今天所在周数大于等于开始周数 if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当前时间 beginDateTime.append(getWeekBackPartDateTime(QDate::currentDate(), 7, true)); beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(1 + 7 - currentDayofWeek), 1, secondWeekNum)); beginDateTime.append(getWeekFrontPartDateTime(QDate::currentDate(), firstWeekNum, false)); } else { //日程开始时间小于等于当前时间 beginDateTime.append(getWeekBackPartDateTime(QDate::currentDate().addDays(1), 7, false)); beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(1 + 7 - currentDayofWeek), 1, secondWeekNum)); beginDateTime.append(getWeekFrontPartDateTime(QDate::currentDate(), firstWeekNum, true)); } } else if (currentDayofWeek < firstWeekNum && currentDayofWeek > secondWeekNum) { //今天所在周数小于开始周数,大于结束周数 beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(firstWeekNum - currentDayofWeek), firstWeekNum, 7)); beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(1 + 7 - currentDayofWeek), 1, secondWeekNum)); } else if (currentDayofWeek <= secondWeekNum) { //今天所在周数小于等于结束周数 if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当前时间 beginDateTime.append(getWeekBackPartDateTime(QDate::currentDate(), secondWeekNum, true)); beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(firstWeekNum - currentDayofWeek), firstWeekNum, 7)); beginDateTime.append(getWeekFrontPartDateTime(QDate::currentDate(), 1, false)); } else { //日程开始时间小于等于当前时间 beginDateTime.append(getWeekBackPartDateTime(QDate::currentDate().addDays(1), secondWeekNum, false)); beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(firstWeekNum - currentDayofWeek), firstWeekNum, 7)); beginDateTime.append(getWeekFrontPartDateTime(QDate::currentDate(), 1, true)); } } return beginDateTime; } QVector createScheduleTask::getWeekAllDateTime(QDate BeginDate, int firstWeekNum, int secondWeekNum) { QVector beginDateTime; for (int i = 0; i < secondWeekNum - firstWeekNum + 1; i ++) { m_begintime.setDate(BeginDate.addDays(i)); beginDateTime.append(m_begintime); } return beginDateTime; } QVector createScheduleTask::getWeekFrontPartDateTime(QDate BeginDate, int firstWeekNum, bool containsToday) { QVector beginDateTime {}; int currentDayofWeek = QDate::currentDate().dayOfWeek(); int addDays = getCreatesDays(firstWeekNum, currentDayofWeek, containsToday); for (int i = 0; i < addDays; i++) { m_begintime.setDate(BeginDate.addDays(firstWeekNum + 7 - currentDayofWeek + i)); beginDateTime.append(m_begintime); } return beginDateTime; } QVector createScheduleTask::getWeekBackPartDateTime(QDate BeginDate, int secondWeekNum, bool containsToday) { QVector beginDateTime {}; int currentDayofWeek = QDate::currentDate().dayOfWeek(); int addDays = getCreatesDays(currentDayofWeek, secondWeekNum, containsToday); for (int i = 0; i < addDays; i++) { m_begintime.setDate(BeginDate.addDays(i)); beginDateTime.append(m_begintime); } return beginDateTime; } DSchedule::Ptr createScheduleTask::setDateTimeAndGetSchedule(QDateTime beginDateTime, QDateTime endDateTime) { m_widget->setDateTime(beginDateTime, endDateTime); m_widget->setschedule(); return m_widget->getScheduleDtailInfo(); } QVector createScheduleTask::analysisWorkDayDate() { QVector beginDateTime {}; if (m_begintime.date().dayOfWeek() == 6) m_begintime.setDate(m_begintime.date().addDays(2)); if (m_begintime.date().dayOfWeek() == 7) m_begintime.setDate(m_begintime.date().addDays(1)); beginDateTime.append(m_begintime); return beginDateTime; } QDate createScheduleTask::getValidDate(QDate viewDate, int viewDateDay) { //设置一个无效时间 QDate validDate(QDate(0, 0, 0)); //初始化年 int month = viewDate.month(); //判断未来半年的时间是否合法 for (int i = month; i <= month + 6; i++) { //设置月 validDate = viewDate.addMonths(i - month); //设置时间 validDate.setDate(validDate.year(), validDate.month(), viewDateDay); //判断日期是否合法 if (validDate.isValid()) return validDate; } //返回判断时间 return validDate; } /** * @brief createScheduleTask::shouldEndSession 是否需要进行多轮 * @return */ bool createScheduleTask::shouldEndSession(CreateJsonData *createjsondate) { return createjsondate->ShouldEndSession(); } /** * @brief createScheduleTask::validDateTime 是否是有效时间 * @param datetime 查询的时间 * @return */ bool createScheduleTask::validDateTime(QDateTime datetime) { return datetime.isValid(); } QVector createScheduleTask::analysisEveryWeekDate(QVector dateRange) { QVector beginDateTime {}; switch (dateRange.size()) { case 0: { //每周重复日程,没有具体周数 beginDateTime = getNoneWeekNumDate(); } break; case 1: { //每周重复日程,只有一个周数 beginDateTime = getOneWeekNumDate(dateRange[0]); } break; case 2: { //每周重复日程,有两个周数 beginDateTime = getTwoWeekNumDate(dateRange[0], dateRange[1]); } break; } return beginDateTime; } QVector createScheduleTask::analysisEveryMonthDate(QVector dateRange) { QVector beginDateTime {}; switch (dateRange.size()) { case 0: { //每月重复日程,没有具体日期 beginDateTime = getNoneMonthNumDate(); } break; case 1: { //每月重复日程,只有一个日期 beginDateTime = getOneMonthNumDate(dateRange[0]); } break; case 2: { //每月重复日程,有两个日期 beginDateTime = getTwoMonthNumDate(dateRange[0], dateRange[1]); } break; } return beginDateTime; } QVector createScheduleTask::getNoneMonthNumDate() { QVector beginDateTime {}; if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当前时间 m_begintime.setDate(QDate::currentDate()); } else { //日程开始时间小于等于当前时间 m_begintime.setDate(QDate::currentDate().addDays(1)); } beginDateTime.append(m_begintime); return beginDateTime; } QVector createScheduleTask::getOneMonthNumDate(int firstMonthNum) { QVector beginDateTime {}; //今天 int currentDayofMonth = QDate::currentDate().day(); if (currentDayofMonth < firstMonthNum) { //今天小于开始日期 //获取合法日期 QDate validDate = getValidDate(QDate::currentDate(), firstMonthNum); //日期合法,设置日期 if (validDate.isValid()) m_begintime.setDate(validDate); } else if (currentDayofMonth > firstMonthNum) { //获取合法日期 QDate validDate = getValidDate(QDate::currentDate().addMonths(1), firstMonthNum); //日期合法,设置日期 if (validDate.isValid()) m_begintime.setDate(validDate); } else { //当前日期等于开始日期 if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当前时间 m_begintime.setDate(QDate::currentDate()); } else { //日程开始时间小于等于当前时间 m_begintime.setDate(QDate::currentDate().addMonths(1)); } } beginDateTime.append(m_begintime); return beginDateTime; } QVector createScheduleTask::getTwoMonthNumDate(int firstMonthNum, int secondMonthNum) { QVector beginDateTime {}; if (firstMonthNum == secondMonthNum) { //开始日期等于结束日期,为每天 everyDayState = true; return beginDateTime; } else if (firstMonthNum < secondMonthNum) { //开始日期小于结束日期 beginDateTime.append(firstMonthNumLessThanSecond(firstMonthNum, secondMonthNum)); } else { //开始日期大于结束日期 if (firstMonthNum - secondMonthNum == 1) { //开始日期和结束日期差一天,为每天 everyDayState = true; return beginDateTime; } else { //开始日期大于结束日期的其他情况 beginDateTime.append(firstMonthNumGreaterThanSecondButEveryDay(firstMonthNum, secondMonthNum)); } } return beginDateTime; } QVector createScheduleTask::firstMonthNumLessThanSecond(int firstMonthNum, int secondWMonthNum) { QVector beginDateTime {}; int currentDayofMonth = QDate::currentDate().day(); if (currentDayofMonth < firstMonthNum) { //今天的日期小于开始日期 beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(firstMonthNum - currentDayofMonth), firstMonthNum, secondWMonthNum)); } else if (currentDayofMonth >= firstMonthNum && currentDayofMonth <= secondWMonthNum) { //今天的日期大于等于开始日期,小于等于结束日期 if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当前时间 beginDateTime.append(getMonthBackPartDateTime(QDate::currentDate(), secondWMonthNum, true)); beginDateTime.append(getMonthFrontPartDateTime(QDate::currentDate(), firstMonthNum, false)); } else { //日程开始时间小于等于当前时间 beginDateTime.append(getMonthBackPartDateTime(QDate::currentDate().addDays(1), secondWMonthNum, false)); beginDateTime.append(getMonthFrontPartDateTime(QDate::currentDate(), firstMonthNum, true)); } } else if (currentDayofMonth > secondWMonthNum) { //今天的日程大于结束日期 beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(firstMonthNum - currentDayofMonth).addMonths(1), firstMonthNum, secondWMonthNum)); } return beginDateTime; } QVector createScheduleTask::getMonthAllDateTime(QDate BeginDate, int firstMonthNum, int secondMonthNum) { QVector beginDateTime; //设置日期 for (int i = firstMonthNum; i <= secondMonthNum; i++) { //日期是否合法 QDate validDate = getValidDate(BeginDate, i); //合法日期,设置日期 if (validDate.isValid()) { m_begintime.setDate(validDate); beginDateTime.append(m_begintime); } } return beginDateTime; } QVector createScheduleTask::getMonthFrontPartDateTime(QDate BeginDate, int firstMonthNum, bool containsToday) { QVector beginDateTime {}; int currentDayofMonth = QDate::currentDate().day(); //包含今天 if (containsToday) currentDayofMonth += 1; //设置日期 for (int i = firstMonthNum; i < currentDayofMonth; i++) { //获取合法日期 QDate validDate = getValidDate(BeginDate.addDays(firstMonthNum - currentDayofMonth).addMonths(1), i); //合法日期 if (validDate.isValid()) { m_begintime.setDate(validDate); beginDateTime.append(m_begintime); } } return beginDateTime; } QVector createScheduleTask::getMonthBackPartDateTime(QDate BeginDate, int secondMonthNum, bool containsToday) { QVector beginDateTime {}; int currentDayofMonth = QDate::currentDate().day(); //不包含今天 if (!containsToday) currentDayofMonth += 1; //设置日期 for (int i = currentDayofMonth; i < secondMonthNum + 1; i++) { //获取合法日期 QDate validDate = getValidDate(BeginDate, i); //日期合法 if (validDate.isValid()) { m_begintime.setDate(validDate); beginDateTime.append(m_begintime); } } return beginDateTime; } QVector createScheduleTask::firstMonthNumGreaterThanSecondButEveryDay(int firstMonthNum, int secondMonthNum) { QVector beginDateTime {}; int currentDayofMonth = QDate::currentDate().day(); if (currentDayofMonth >= firstMonthNum) { //今天的日期大于等于开始的日期 if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当前时间 beginDateTime.append(getMonthBackPartDateTime(QDate::currentDate(), QDate::currentDate().daysInMonth(), true)); beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(1 - currentDayofMonth), 1, secondMonthNum)); beginDateTime.append(getMonthFrontPartDateTime(QDate::currentDate(), firstMonthNum, false)); } else { //日程开始时间小于等于当前时间 beginDateTime.append(getMonthBackPartDateTime(QDate::currentDate().addDays(1), QDate::currentDate().daysInMonth(), false)); beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(1 - currentDayofMonth), 1, secondMonthNum)); beginDateTime.append(getMonthFrontPartDateTime(QDate::currentDate(), firstMonthNum, true)); } } else if (currentDayofMonth < firstMonthNum && currentDayofMonth > secondMonthNum) { //今天的日期小于开始日期,大于结束日期 beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(firstMonthNum - currentDayofMonth), firstMonthNum, QDate::currentDate().daysInMonth())); beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(1 - currentDayofMonth).addMonths(1), 1, secondMonthNum)); } else if (currentDayofMonth <= secondMonthNum) { //今天的日期小于等于结束日期 if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当前时间 beginDateTime.append(getMonthBackPartDateTime(QDate::currentDate(), secondMonthNum, true)); beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(firstMonthNum - currentDayofMonth), firstMonthNum, QDate::currentDate().daysInMonth())); beginDateTime.append(getMonthFrontPartDateTime(QDate::currentDate(), 1, false)); } else { //日程开始时间小于等于当前时间 beginDateTime.append(getMonthBackPartDateTime(QDate::currentDate().addDays(1), secondMonthNum, false)); beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(firstMonthNum - currentDayofMonth), firstMonthNum, QDate::currentDate().daysInMonth())); beginDateTime.append(getMonthFrontPartDateTime(QDate::currentDate(), 1, true)); } } return beginDateTime; } QVector createScheduleTask::analysisRestDayDate() { QVector beginDateTime {}; //周六的日程开始时间 QDateTime beginDateTimeSat = m_begintime; //周日的日程开始时间 QDateTime beginDateTimeSun = m_begintime; int currentDayofWeek = QDate::currentDate().dayOfWeek(); //设置周六的时间 beginDateTimeSat.setDate(QDate::currentDate().addDays(6 - currentDayofWeek)); //设置周日的时间 beginDateTimeSun.setDate(QDate::currentDate().addDays(7 - currentDayofWeek)); //如果周六的时间小于当前时间,设置日程开始时间为下一周的周六 if (beginDateTimeSat < QDateTime::currentDateTime()) beginDateTimeSat.setDate(beginDateTimeSat.date().addDays(7)); //如果周日的时间小于当前时间,设置日程开始时间为下一周的周日 if (beginDateTimeSun < QDateTime::currentDateTime()) beginDateTimeSun.setDate(beginDateTimeSun.date().addDays(7)); //将周末的日程开始时间放到时间容器里面 beginDateTime.append(beginDateTimeSat); beginDateTime.append(beginDateTimeSun); return beginDateTime; } dde-calendar-5.14.13/schedule-plugin/src/task/createscheduletask.h000066400000000000000000000241521473346337000250430ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CREATESCHEDULETASK_H #define CREATESCHEDULETASK_H #include "schedulebasetask.h" #include "../data/createjsondata.h" #include "../widget/createschedulewidget.h" /** * @brief The createScheduleTask class * 创建日程模块 */ class createScheduleTask : public scheduleBaseTask { Q_OBJECT public: createScheduleTask(); Reply SchedulePress(semanticAnalysisTask &semanticTask) override; private: /** * @brief setDateTime 设置查询的开始结束时间 * @param queryJsonData jsondata句柄 */ void setDateTime(CreateJsonData *createJsonData); /** * @brief setScheduleTitleName 设置日程的titlename * @param createJsonData jsondata句柄 */ void setScheduleTitleName(CreateJsonData *createJsonData); /** * @brief createScheduleWithRepeatStatus 新建日程 * @param createJsonData jsondata句柄 * @return 日程信息 */ QString createScheduleWithRepeatStatus(CreateJsonData *createJsonData); /** * @brief creareScheduleUI 新建日程插件 * @param schedule 日程信息 */ void creareScheduleUI(const QString &scheduleID); /** * @brief getReply 获取回复语 * @param createJsonData jsondata句柄 * @return 回复语 */ QString getReply(CreateJsonData *createJsonData); /** * @brief beginDateTimeIsinHalfYear 判断时间是否合法 * @return 时间是否合法 */ bool beginDateTimeIsinHalfYear(); /** * @brief beginDateTimeOutHalfYear 日程开始时间超过半年范围 * @return true or false */ bool beginDateTimeOutHalfYear(); /** * @brief buginDateTimeBeforeCurrent 日程开始时间早于当前时间 * @return true or false */ bool beginDateTimeBeforeCurrent(); /** * @brief setNotRepeatDay 获取非重复的日程 * @return 日程信息 */ QString getNotRepeatDaySchedule(); /** * @brief getEveryDaySchedule 获取每天重复的日程 * @return 日程信息 */ QString getEveryDaySchedule(); /** * @brief getEveryWeekSchedule 获取每周重复的日程 * @param dateRange 开始和结束的周数 * @return 日程信息 */ QString getEveryWeekSchedule(QVector dateRange); /** * @brief getEveryMonthSchedule 获取每月重复的日程 * @param dateRange 开始和结束的日期数 * @return 日程信息 */ QString getEveryMonthSchedule(QVector dateRange); /** * @brief getEveryDYearSchedule 获取每年重复的日程 * @return 日程信息 */ QString getEveryYearSchedule(); /** * @brief getEveryWorkDaySchedule 获取工作日的日程 * @return 日程信息 */ QString getEveryWorkDaySchedule(); /** * @brief getEveryRestDaySchedule 获取休息日的日程 * @return 日程信息 */ QString getEveryRestDaySchedule(); /** * @brief getFirstSchedule 获取第一个日程 * @param scheduleInfo 所有日程信息的容器 * @return 第一个日程的日程信息 */ DSchedule::Ptr getFirstSchedule(DSchedule::List scheduleInfo); /** * @brief getCreatesDays 获取新建日程的天数 * @param firstDay 开始日期 * @param secondday 结束日期 * @param containsToday 是否包含今天 * @return 总天数 */ int getCreatesDays(int firstDay, int secondday, bool containsToday); /** * @brief getNoneWeekNumDate 获取没有周数的重复日程的日期 * @return 日期容器 */ QVector getNoneWeekNumDate(); /** * @brief getOneWeekNumDate 获取有一个周数的重复日程的日期 * @param firstWeekNum 这个周数是周几 * @return 日期容器 */ QVector getOneWeekNumDate(int firstWeekNum); /** * @brief getTwoWeekNumDate 获取有两个周数的重复日程的日期 * @param firstWeekNum 第一个周数是周几 * @param secondWeekNum 第二个周数是周几 * @return 日期容器 */ QVector getTwoWeekNumDate(int firstWeekNum, int secondWeekNum); /** * @brief firstWeekNumLessThanSecond 获取第一个周数小于第二个周数的日程的日期 * @param firstWeekNum 第一个周数 * @param secondWeekNum 第二个周数 * @return 日期容器 */ QVector firstWeekNumLessThanSecond(int firstWeekNum, int secondWeekNum); /** * @brief firstWeekNumGreaterThanSecondButEveryDay 获取第一个周数大于第二个周数但不包含全天日程的日程 * @param firstWeekNum 第一个周数 * @param secondWeekNum 第二个周数 * @return 日期容器 */ QVector firstWeekNumGreaterThanSecondButEveryDay(int firstWeekNum, int secondWeekNum); /** * @brief getWeekAllDateTime 获取所有的周重复日程的时间 * @param BeginDate 日程开始的时间 * @param firstDayofWeek 获取到的第一个周数 * @param secondDayofWeek 获取到的第二个周数 * @return DateTime容器 */ QVector getWeekAllDateTime(QDate BeginDate, int firstWeekNum, int secondWeekNum); /** * @brief getWeekFrontPartDateTime 获取当前时间之前的日程时间 * @param BeginDate 日程开始的时间 * @param firstDate 获取到的第一个周数 * @param containsToday 是否包含今天 * @return DateTime容器 */ QVector getWeekFrontPartDateTime(QDate BeginDate, int firstWeekNum, bool containsToday); /** * @brief getWeekBackPartDateTime 获取当前时间之后的日程时间 * @param BeginDate 日程开始时间 * @param secondDayofWeek 获取到的第二个周数 * @param containsToday 是否包含今天 * @return DateTime容器 */ QVector getWeekBackPartDateTime(QDate BeginDate, int secondWeekNum, bool containsToday); /** * @brief analysisEveryWeekDate 解析每周重复日程的日期 * @param dateRange 周数范围 * @return 日期容器 */ QVector analysisEveryWeekDate(QVector dateRange); /** * @brief analysisEveryMonthDate 解析每月重复日程的日期 * @param dateRange 日期范围 * @return 日期容器 */ QVector analysisEveryMonthDate(QVector dateRange); /** * @brief getNoneMonthNumDate 获取没有日期的每月重复日程的日期 * @return 日期容器 */ QVector getNoneMonthNumDate(); /** * @brief getOneMonthNumDate 获取有一个日期的每月重复日程的日期 * @param firstMonthNum 第一个日期是几号 * @return 日期容器 */ QVector getOneMonthNumDate(int firstMonthNum); /** * @brief getTwoMonthNumDate 获取有两个日期的每月重复日程的日程 * @param firstMonthNum 第一个日期是几号 * @param secondMonthNum 第二个日期是几号 * @return 日期容器 */ QVector getTwoMonthNumDate(int firstMonthNum, int secondMonthNum); /** * @brief getMonthAllDateTime 获取每月重复日程的日期 * @param BeginDate 开始时间 * @param firstMonthNum 第一个日期 * @param secondMonthNum 第二个日期 * @return 日期容器 */ QVector getMonthAllDateTime(QDate BeginDate, int firstMonthNum, int secondMonthNum); /** * @brief getMonthFrontPartDateTime 获取当前时间之前的日程日期 * @param BeginDate 开始时间 * @param firstMonthNum 第一个日期 * @param containsToday 是否包含今天 * @return 日期容器 */ QVector getMonthFrontPartDateTime(QDate BeginDate, int firstMonthNum, bool containsToday); /** * @brief getMonthBackPartDateTime 获取当前时间之后的日程日期 * @param BeginDate 开始时间 * @param secondMonthNum 第二个日期 * @param containsToday 是否包含今天 * @return 日期容器 */ QVector getMonthBackPartDateTime(QDate BeginDate, int secondMonthNum, bool containsToday); /** * @brief firstMonthNumLessThanSecond 第一个日期小于第二个日期的日程的日期 * @param firstMonthNum 第一个日期 * @param secondWMonthNum 第二个日期 * @return 日期容器 */ QVector firstMonthNumLessThanSecond(int firstMonthNum, int secondWMonthNum); /** * @brief firstMonthNumGreaterThanSecondButEveryDay 第一个日期大于第二个日期但不包含每天的日程的日期 * @param firstMonthNum 第一个日期 * @param secondMonthNum 第二个日期 * @return 日期容器 */ QVector firstMonthNumGreaterThanSecondButEveryDay(int firstMonthNum, int secondMonthNum); /** * @brief analysisRestDayDate 解析休息日的日程的日期 * @return 日期容器 */ QVector analysisRestDayDate(); /** * @brief setDateTimeAndGetSchedule 设置日程开始结束时间,并获取日程信息 * @param beginDateTime 日程开始时间 * @param endDateTime 日程结束时间 * @return 日程信息 */ DSchedule::Ptr setDateTimeAndGetSchedule(QDateTime beginDateTime, QDateTime endDateTime); /** * @brief analysisWorkDayDate 解析工作日的日程的日期 * @return 日期容器 */ QVector analysisWorkDayDate(); /** * @brief getValidDate 判断是否是合法日期 * @param viewDate 判断的日期 * @param viewDateDay 判断哪一天 * @return 日期 */ QDate getValidDate(QDate viewDate, int viewDateDay); bool shouldEndSession(CreateJsonData *createjsondate); bool validDateTime(QDateTime datetime); private: QDateTime m_begintime; QDateTime m_endtime; bool everyDayState = false; //助手时间是否有效 bool isValidDateTime = true; //无效日期回复语 QString replyNotValidDT; createSchedulewidget *m_widget = nullptr; }; #endif // CREATESCHEDULETASK_H dde-calendar-5.14.13/schedule-plugin/src/task/queryscheduleproxy.cpp000066400000000000000000000522161473346337000255210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "queryscheduleproxy.h" #include "../globaldef.h" #include "../data/changejsondata.h" #include "dscheduledatamanager.h" bool scheduleSort(const DSchedule::Ptr &s1, const DSchedule::Ptr &s2) { if (s1->dtStart() < s2->dtStart()) { return true; } else if (s1->dtStart() == s2->dtStart()) { return s1->dtEnd() < s2->dtEnd(); } else { return false; } } queryScheduleProxy::queryScheduleProxy(JsonData *jsonData) : m_queryJsonData(jsonData) { } DSchedule::Map queryScheduleProxy::querySchedule() { DSchedule::Map scheduleInfo {}; scheduleInfo.clear(); switch (m_queryJsonData->getRepeatStatus()) { case JsonData::RepeatStatus::NONE: scheduleInfo = queryNonRepeatingSchedule(); break; case JsonData::RepeatStatus::EVED: { TIME_FRAME_IN_THE_NEXT_SIX_MONTHT scheduleInfo = queryEveryDaySchedule(beginTime, endTime); if (!m_queryJsonData->TitleName().isEmpty()) { scheduleInfo = scheduleFileterByTitleName(scheduleInfo, m_queryJsonData->TitleName()); } } break; case JsonData::RepeatStatus::EVEW: { TIME_FRAME_IN_THE_NEXT_SIX_MONTHT int beginW = 0; int endW = 0; if (m_queryJsonData->getRepeatNum().size() == 0) { } else if (m_queryJsonData->getRepeatNum().size() == 1) { beginW = m_queryJsonData->getRepeatNum().at(0); endW = m_queryJsonData->getRepeatNum().at(0); } else { beginW = m_queryJsonData->getRepeatNum().at(0); endW = m_queryJsonData->getRepeatNum().at(1); } scheduleInfo = queryWeeklySchedule(beginTime, endTime, beginW, endW); SemanticsDateTime queryDatetime = getQueryDateTime(m_queryJsonData); TimeLimit fileterTime = getTimeFileterByTimeInfo(queryDatetime); if (!fileterTime.isInvalid) { scheduleInfo = scheduleFileterByTime(scheduleInfo, fileterTime.beginTime, fileterTime.endTime); } if (!m_queryJsonData->TitleName().isEmpty()) { scheduleInfo = scheduleFileterByTitleName(scheduleInfo, m_queryJsonData->TitleName()); } } break; case JsonData::RepeatStatus::EVEM: { TIME_FRAME_IN_THE_NEXT_SIX_MONTHT int beginM = 0; int endM = 0; if (m_queryJsonData->getRepeatNum().size() == 0) { } else if (m_queryJsonData->getRepeatNum().size() == 1) { beginM = m_queryJsonData->getRepeatNum().at(0); endM = m_queryJsonData->getRepeatNum().at(0); } else { beginM = m_queryJsonData->getRepeatNum().at(0); endM = m_queryJsonData->getRepeatNum().at(1); } scheduleInfo = queryMonthlySchedule(beginTime, endTime, beginM, endM); if (!m_queryJsonData->TitleName().isEmpty()) { scheduleInfo = scheduleFileterByTitleName(scheduleInfo, m_queryJsonData->TitleName()); } } break; case JsonData::RepeatStatus::EVEY: { TIME_FRAME_IN_THE_NEXT_SIX_MONTHT scheduleInfo = queryEveryYearSchedule(beginTime, endTime); SemanticsDateTime queryDatetime = getQueryDateTime(m_queryJsonData); //查询每年的日程中包含日期 if (queryDatetime.suggestDatetime.size() == 1) { //查询的日期 QDate beginD = queryDatetime.suggestDatetime.at(0).datetime.date(); QDate endD = endTime.date(); //过滤包含查询日期的日程 scheduleInfo = scheduleFileterByDate(scheduleInfo, beginD, endD); } //获取查询的具体时间 TimeLimit fileterTime = getTimeFileterByTimeInfo(queryDatetime); if (!fileterTime.isInvalid) { //过滤包含查询时间的日程 scheduleInfo = scheduleFileterByTime(scheduleInfo, fileterTime.beginTime, fileterTime.endTime); } if (!m_queryJsonData->TitleName().isEmpty()) { scheduleInfo = scheduleFileterByTitleName(scheduleInfo, m_queryJsonData->TitleName()); } } break; case JsonData::RepeatStatus::RESTD: { TIME_FRAME_IN_THE_NEXT_SIX_MONTHT scheduleInfo = queryWeeklySchedule(beginTime, endTime, 6, 7); if (!m_queryJsonData->TitleName().isEmpty()) { scheduleInfo = scheduleFileterByTitleName(scheduleInfo, m_queryJsonData->TitleName()); } } break; case JsonData::RepeatStatus::WORKD: { TIME_FRAME_IN_THE_NEXT_SIX_MONTHT scheduleInfo = queryWorkingDaySchedule(beginTime, endTime); if (!m_queryJsonData->TitleName().isEmpty()) { scheduleInfo = scheduleFileterByTitleName(scheduleInfo, m_queryJsonData->TitleName()); } } break; } return scheduleInfo; } DSchedule::List queryScheduleProxy::scheduleMapToList(const DSchedule::Map &scheduleMap) { DSchedule::List scheduleList; DSchedule::Map::const_iterator iter = scheduleMap.constBegin(); for (; iter != scheduleMap.constEnd(); ++iter) { scheduleList.append(iter.value()); } return scheduleList; } DSchedule::Map queryScheduleProxy::queryWeeklySchedule(QDateTime &beginTime, QDateTime &endTime, int beginW, int endW) { QSet weeklySet; if (beginW == endW) { weeklySet.insert(beginW); } else if (beginW < endW) { if (beginW == 1) { if (endW == 5) { //WORK return queryWorkingDaySchedule(beginTime, endTime); } else if (endW == 7) { //EVED return queryEveryDaySchedule(beginTime, endTime); } } for (int i = beginW; i <= endW; ++i) { weeklySet.insert(i); } } else { if (beginW - endW == 1) { //EVED return queryEveryDaySchedule(beginTime, endTime); } int w; for (int i = beginW; i <= endW + 7; ++i) { w = i % 7; w = w ? w : 7; weeklySet.insert(w); } } //TODO:查询数据 // m_dbus->QueryJobsWithRule(beginTime, endTime, DBUS_RRUL_EVEW, out); DSchedule::Map out = DScheduleDataManager::getInstance()->queryScheduleByRRule(beginTime, endTime, DScheduleQueryPar::RRule_Week); if (beginW == 0 || endW == 0) { weeklySet.clear(); } return WeeklyScheduleFileter(out, weeklySet); } DSchedule::Map queryScheduleProxy::queryMonthlySchedule(QDateTime &beginTime, QDateTime &endTime, int beginM, int endM) { DSchedule::Map out = DScheduleDataManager::getInstance()->queryScheduleByRRule(beginTime, endTime, DScheduleQueryPar::RRule_Month); return MonthlyScheduleFileter(out, beginM, endM); } DSchedule::Map queryScheduleProxy::queryEveryDaySchedule(QDateTime &beginTime, QDateTime &endTime) { DSchedule::Map out = DScheduleDataManager::getInstance()->queryScheduleByRRule(beginTime, endTime, DScheduleQueryPar::RRule_Day); return sortAndFilterSchedule(out); } DSchedule::Map queryScheduleProxy::queryEveryYearSchedule(QDateTime &beginTime, QDateTime &endTime) { DSchedule::Map out = DScheduleDataManager::getInstance()->queryScheduleByRRule(beginTime, endTime, DScheduleQueryPar::RRule_Year); return sortAndFilterSchedule(out); } DSchedule::Map queryScheduleProxy::queryWorkingDaySchedule(QDateTime &beginTime, QDateTime &endTime) { DSchedule::Map out = DScheduleDataManager::getInstance()->queryScheduleByRRule(beginTime, endTime, DScheduleQueryPar::RRule_Work); return sortAndFilterSchedule(out); } DSchedule::Map queryScheduleProxy::queryNonRepeatingSchedule() { DSchedule::Map mScheduleInfoVector {}; mScheduleInfoVector.clear(); SemanticsDateTime queryDatetime = getQueryDateTime(m_queryJsonData); //如果开始时间大于结束时间则退出 if (!timeFrameIsValid(queryDatetime)) { return mScheduleInfoVector; } switch (m_queryJsonData->getPropertyStatus()) { case JsonData::PropertyStatus::ALL: { //查询所有日程 DateTimeLimit timeLimit = getTimeLimitByTimeInfo(queryDatetime); if (!getTimeIsExpired()) { mScheduleInfoVector = queryAllSchedule(m_queryJsonData->TitleName(), timeLimit.beginTime, timeLimit.endTime); } } break; case JsonData::PropertyStatus::NEXT: { //查询下个日程 TIME_FRAME_IN_THE_NEXT_SIX_MONTHT mScheduleInfoVector = queryNextNumSchedule(beginTime, endTime, 1); } break; case JsonData::PropertyStatus::LAST: { } break; default: { //NONE //查询所有日程 DateTimeLimit timeLimit = getTimeLimitByTimeInfo(queryDatetime); if (!getTimeIsExpired()) { mScheduleInfoVector = queryAllSchedule(m_queryJsonData->TitleName(), timeLimit.beginTime, timeLimit.endTime); } } break; } return mScheduleInfoVector; } DSchedule::Map queryScheduleProxy::queryNextNumSchedule(QDateTime &beginTime, QDateTime &endTime, int NextNum) { DSchedule::Map out = DScheduleDataManager::getInstance()->queryScheduleByLimit(beginTime, endTime, NextNum); return sortAndFilterSchedule(out); } DSchedule::Map queryScheduleProxy::queryAllSchedule(QString key, QDateTime &beginTime, QDateTime &endTime) { DSchedule::Map out = DScheduleDataManager::getInstance()->queryScheduleBySummary(beginTime, endTime, key); return sortAndFilterSchedule(out); } DSchedule::Map queryScheduleProxy::sortAndFilterSchedule(DSchedule::Map &out) { DSchedule::Map scheduleInfo {}; DSchedule::Iter iter = out.begin(); for (; iter != out.end(); ++iter) { DSchedule::List scheduleList; for (int i = 0; i < iter->size(); ++i) { if (!(scheduleList.contains(iter.value().at(i)) || DScheduleDataManager::getInstance()->isFestivalSchedule(iter.value().at(i)->scheduleTypeID()))) { scheduleList.append(iter.value().at(i)); } } if (scheduleList.size() > 0) { scheduleInfo[iter.key()] = scheduleList; } } //TODO:排序 // std::sort(scheduleInfo.begin(), scheduleInfo.end(), scheduleSort); return scheduleInfo; } DSchedule::Map queryScheduleProxy::WeeklyScheduleFileter(DSchedule::Map &out, QSet &weeklySet) { DSchedule::Map scheduleInfo {}; if (weeklySet.size() == 0) { return sortAndFilterSchedule(out); } else { DSchedule::Iter iter = out.begin(); for (; iter != out.end(); ++iter) { DSchedule::List scheduleList; for (int i = 0; i < iter->size(); ++i) { DSchedule::Ptr schedule = iter.value().at(i); if (!scheduleList.contains(schedule) && weeklyIsIntersections(schedule->dtStart(), schedule->dtEnd(), weeklySet)) { scheduleList.append(iter.value().at(i)); } } if (scheduleList.size() > 0) { scheduleInfo[iter.key()] = scheduleList; } } } return scheduleInfo; } DSchedule::Map queryScheduleProxy::MonthlyScheduleFileter(DSchedule::Map &out, int beginM, int endM) { if (beginM == 0 || endM == 0) { return sortAndFilterSchedule(out); } DSchedule::Map scheduleInfo {}; DSchedule::Iter iter = out.begin(); for (; iter != out.end(); ++iter) { DSchedule::List scheduleList; for (int i = 0; i < iter->size(); ++i) { DSchedule::Ptr schedule = iter.value().at(i); if (!scheduleList.contains(schedule) && monthlyIsIntersections(schedule->dtStart(), schedule->dtEnd(), beginM, endM)) { scheduleList.append(iter.value().at(i)); } } if (scheduleList.size() > 0) { scheduleInfo[iter.key()] = scheduleList; } } return scheduleInfo; } bool queryScheduleProxy::monthlyIsIntersections(const QDateTime &beginTime, const QDateTime &endTime, int beginM, int endM) { bool b_monthly = false; int beginDay = beginTime.date().day(); int endDay = endTime.date().day(); if (beginM > endM) { b_monthly = beginDay > endM && endDay < beginM ? false : true; } else { b_monthly = (beginM <= beginDay && endM >= beginDay) || (beginM <= endDay && endM >= endDay) || (beginDay <= beginM && endDay >= endM); } return b_monthly; } bool queryScheduleProxy::checkedTimeIsIntersection(QTime &beginTime, QTime &endTime, QTime &fixbeginTime, QTime &fixendTime) { bool b_checked = false; if (beginTime.secsTo(endTime) < 0) { if (fixbeginTime.secsTo(fixendTime) < 0) { b_checked = true; } else { b_checked = endTime.secsTo(fixbeginTime) > 0 && fixendTime.secsTo(beginTime) > 0 ? false : true; } } else { if (fixbeginTime.secsTo(fixendTime) < 0) { b_checked = fixendTime.secsTo(beginTime) > 0 && endTime.secsTo(fixbeginTime) > 0 ? false : true; } else { b_checked = (beginTime.secsTo(fixbeginTime) >= 0 && fixbeginTime.secsTo(endTime) >= 0) || (beginTime.secsTo(fixendTime) >= 0 && fixendTime.secsTo(endTime) >= 0); } } return b_checked; } DSchedule::Map queryScheduleProxy::scheduleFileterByTime(DSchedule::Map &scheduleInfo, QTime &fileterBeginTime, QTime &fileterEndTime) { DSchedule::Map mScheduleFileter {}; qint64 timeoffset_Secs = 0; bool isApppend = false; DSchedule::Map::const_iterator iter = scheduleInfo.constBegin(); for (; iter != scheduleInfo.constEnd(); ++iter) { DSchedule::List scheduleList; for (int i = 0; i < iter.value().size(); ++i) { timeoffset_Secs = iter.value().at(i)->dtStart().secsTo(iter.value().at(i)->dtEnd()); if (timeoffset_Secs < ONE_DAY_SECS) { QTime begTime = iter.value().at(i)->dtStart().time(); QTime endTime = iter.value().at(i)->dtEnd().time(); isApppend = checkedTimeIsIntersection(begTime, endTime, fileterBeginTime, fileterEndTime); } else { isApppend = true; } if (isApppend) { scheduleList.append(iter.value().at(i)); } } if (scheduleList.size() > 0) { mScheduleFileter[iter.key()] = scheduleList; } } return mScheduleFileter; } /** * @brief queryScheduleProxy::scheduleFileterByDate 过滤包含查询日期的日程 * @param scheduleInfo 日程信息 * @param fileterBeginDate 查询的开始时间 * @param fileterEndDate 查询的结束时间 * @return 过滤后的日程信息 */ DSchedule::Map queryScheduleProxy::scheduleFileterByDate(DSchedule::Map &scheduleInfo, QDate &fileterBeginDate, QDate &fileterEndDate) { DSchedule::Map mScheduleFileter {}; //遍历查询到的日程 DSchedule::Map::const_iterator iter = scheduleInfo.constBegin(); for (; iter != scheduleInfo.constEnd(); ++iter) { DSchedule::List scheduleList; for (int i = 0; i < iter.value().size(); ++i) { //查询到的日程的开始结束日期 QDate beginD = iter.value().at(i)->dtStart().date(); QDate endD = iter.value().at(i)->dtEnd().date(); //过滤添加包含查询日期的日程 if ((fileterBeginDate <= beginD && fileterEndDate >= beginD) || (fileterBeginDate >= endD && fileterBeginDate <= endD)) { scheduleList.append(iter.value().at(i)); } } if (scheduleList.size() > 0) { mScheduleFileter[iter.key()] = scheduleList; } } return mScheduleFileter; } DSchedule::Map queryScheduleProxy::scheduleFileterByTitleName(DSchedule::Map &scheduleInfo, const QString &strName) { DSchedule::Map mScheduleFileter {}; DSchedule::Map::const_iterator iter = scheduleInfo.constBegin(); for (; iter != scheduleInfo.constEnd(); ++iter) { DSchedule::List scheduleList; for (int i = 0; i < iter.value().size(); ++i) { if (iter.value().at(i)->summary().contains(strName)) { scheduleList.append(iter.value().at(i)); } } if (scheduleList.size() > 0) { mScheduleFileter[iter.key()] = scheduleList; } } return mScheduleFileter; } bool queryScheduleProxy::weeklyIsIntersections(const QDateTime &beginTime, const QDateTime &endTime, QSet &weeklySet) { QSet scheduleWeekSet; bool returnValue = false; scheduleWeekSet.clear(); qint64 dayoffset = beginTime.daysTo(endTime); if (dayoffset > 5) { returnValue = true; } else { int beginW = beginTime.date().dayOfWeek(); int w; for (int i = beginW; i <= beginW + dayoffset; ++i) { w = i % 7; w = w ? w : 7; scheduleWeekSet.insert(w); } returnValue = scheduleWeekSet.intersects(weeklySet); } return returnValue; } SemanticsDateTime queryScheduleProxy::getQueryDateTime(JsonData *jsonData) { changejsondata *changedata = dynamic_cast(jsonData); if (changedata != nullptr && changedata->fromDateTime().suggestDatetime.size() > 0) { return changedata->fromDateTime(); } return jsonData->getDateTime(); } queryScheduleProxy::DateTimeLimit queryScheduleProxy::getTimeLimitByTimeInfo(const SemanticsDateTime &timeInfoVect) { DateTimeLimit timeLimit; setTimeIsExpired(false); if (timeInfoVect.suggestDatetime.size() == 0) { TIME_FRAME_IN_THE_NEXT_SIX_MONTHT timeLimit.beginTime = beginTime; timeLimit.endTime = endTime; } else if (timeInfoVect.suggestDatetime.size() == 1) { if (timeInfoVect.suggestDatetime.at(0).datetime.date() < QDateTime::currentDateTime().date() || timeInfoVect.suggestDatetime.at(0).datetime.date() > QDateTime::currentDateTime().addDays(MAXIMUM_DAYS_IN_THE_FUTURE).date()) { setTimeIsExpired(true); return timeLimit; } if (timeInfoVect.suggestDatetime.at(0).hasTime) { if (timeInfoVect.suggestDatetime.at(0).datetime < QDateTime::currentDateTime()) { setTimeIsExpired(true); } else { timeLimit.beginTime = timeInfoVect.suggestDatetime.at(0).datetime; timeLimit.endTime = timeInfoVect.suggestDatetime.at(0).datetime; } } else { if (timeInfoVect.suggestDatetime.at(0).datetime.date() == QDateTime::currentDateTime().date()) { timeLimit.beginTime = QDateTime::currentDateTime(); timeLimit.endTime.setDate(timeLimit.beginTime.date()); timeLimit.endTime.setTime(QTime(23, 59, 59)); } else { timeLimit.beginTime = timeInfoVect.suggestDatetime.at(0).datetime; timeLimit.endTime.setDate(timeLimit.beginTime.date()); timeLimit.endTime.setTime(QTime(23, 59, 59)); } } } else { QDateTime maxDay = QDateTime::currentDateTime().addDays(MAXIMUM_DAYS_IN_THE_FUTURE); if (timeInfoVect.suggestDatetime.at(1).datetime.date() < QDateTime::currentDateTime().date() || timeInfoVect.suggestDatetime.at(0).datetime.date() > maxDay.date()) { setTimeIsExpired(true); return timeLimit; } if (timeInfoVect.suggestDatetime.at(0).datetime < QDateTime::currentDateTime()) { timeLimit.beginTime = QDateTime::currentDateTime(); } else { timeLimit.beginTime = timeInfoVect.suggestDatetime.at(0).datetime; } if (timeInfoVect.suggestDatetime.at(1).hasTime) { timeLimit.endTime = timeInfoVect.suggestDatetime.at(1).datetime; } else { timeLimit.endTime.setDate(timeInfoVect.suggestDatetime.at(1).datetime.date()); timeLimit.endTime.setTime(QTime(23, 59, 59)); } if (timeLimit.endTime.date() > maxDay.date()) { timeLimit.endTime.setDate(maxDay.date()); timeLimit.endTime.setTime(QTime(23, 59, 59)); } } return timeLimit; } queryScheduleProxy::TimeLimit queryScheduleProxy::getTimeFileterByTimeInfo(const SemanticsDateTime &timeInfoVect) { TimeLimit fileterTime; fileterTime.isInvalid = true; if (timeInfoVect.suggestDatetime.size() == 0) { } else if (timeInfoVect.suggestDatetime.size() == 1) { if (timeInfoVect.suggestDatetime.at(0).hasTime) { fileterTime.beginTime = timeInfoVect.suggestDatetime.at(0).datetime.time(); fileterTime.endTime = fileterTime.beginTime; fileterTime.isInvalid = false; } } else { fileterTime.beginTime = timeInfoVect.suggestDatetime.at(0).datetime.time(); fileterTime.endTime = timeInfoVect.suggestDatetime.at(1).datetime.time(); fileterTime.isInvalid = false; } return fileterTime; } bool queryScheduleProxy::getTimeIsExpired() const { return m_TimeIsExpired; } void queryScheduleProxy::setTimeIsExpired(const bool timeisExp) { m_TimeIsExpired = timeisExp; } bool queryScheduleProxy::timeFrameIsValid(const SemanticsDateTime &timeInfoVect) { //如果开始时间大于结束时间则返回false if (timeInfoVect.suggestDatetime.size() > 1 && timeInfoVect.suggestDatetime.at(0).datetime > timeInfoVect.suggestDatetime.at(1).datetime) { return false; } return true; } dde-calendar-5.14.13/schedule-plugin/src/task/queryscheduleproxy.h000066400000000000000000000056771473346337000251770ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef QUERYSCHEDULEPROXY_H #define QUERYSCHEDULEPROXY_H #include "dschedule.h" #include "../data/jsondata.h" #include "accountitem.h" class queryScheduleProxy { public: queryScheduleProxy(JsonData *jsonData); DSchedule::Map querySchedule(); DSchedule::List scheduleMapToList(const DSchedule::Map &scheduleMap); bool getTimeIsExpired() const; private: struct DateTimeLimit { QDateTime beginTime; QDateTime endTime; }; struct TimeLimit { QTime beginTime; QTime endTime; bool isInvalid {false}; }; DSchedule::Map queryWeeklySchedule(QDateTime &beginTime, QDateTime &endTime, int beginW = 0, int endW = 0); DSchedule::Map queryMonthlySchedule(QDateTime &beginTime, QDateTime &endTime, int beginM = 0, int endM = 0); DSchedule::Map queryEveryDaySchedule(QDateTime &beginTime, QDateTime &endTime); DSchedule::Map queryEveryYearSchedule(QDateTime &beginTime, QDateTime &endTime); DSchedule::Map queryWorkingDaySchedule(QDateTime &beginTime, QDateTime &endTime); DSchedule::Map queryNonRepeatingSchedule(); DSchedule::Map queryNextNumSchedule(QDateTime &beginTime, QDateTime &endTime, int NextNum); DSchedule::Map queryAllSchedule(QString key, QDateTime &beginTime, QDateTime &endTime); DSchedule::Map sortAndFilterSchedule(DSchedule::Map &out); DSchedule::Map WeeklyScheduleFileter(DSchedule::Map &out, QSet &weeklySet); DSchedule::Map MonthlyScheduleFileter(DSchedule::Map &out, int beginM = 0, int endM = 0); bool monthlyIsIntersections(const QDateTime &beginTime, const QDateTime &endTime, int beginM = 0, int endM = 0); bool checkedTimeIsIntersection(QTime &beginTime, QTime &endTime, QTime &fixbeginTime, QTime &fixendTime); DSchedule::Map scheduleFileterByTime(DSchedule::Map &scheduleInfo, QTime &fileterBeginTime, QTime &fileterEndTime); DSchedule::Map scheduleFileterByDate(DSchedule::Map &scheduleInfo, QDate &fileterBeginDate, QDate &fileterEndDate); DSchedule::Map scheduleFileterByTitleName(DSchedule::Map &scheduleInfo, const QString &strName); bool weeklyIsIntersections(const QDateTime &beginTime, const QDateTime &endTime, QSet &weeklySet); SemanticsDateTime getQueryDateTime(JsonData *jsonData); DateTimeLimit getTimeLimitByTimeInfo(const SemanticsDateTime &timeInfoVect); TimeLimit getTimeFileterByTimeInfo(const SemanticsDateTime &timeInfoVect); void setTimeIsExpired(const bool timeisExp); /** * @brief timeFrameIsValid 时间范围是否有效,开始时间不能大于结束时间 * @param timeInfoVect 时间范围 * @return 返回false表示开始时间大于结束时间 */ bool timeFrameIsValid(const SemanticsDateTime &timeInfoVect); private: JsonData *m_queryJsonData; bool m_TimeIsExpired {false}; }; #endif // QUERYSCHEDULEPROXY_H dde-calendar-5.14.13/schedule-plugin/src/task/queryscheduletask.cpp000066400000000000000000000152601473346337000253000ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "queryscheduletask.h" #include "../globaldef.h" #include "dscheduledatamanager.h" #include "queryscheduleproxy.h" queryScheduleTask::queryScheduleTask() : scheduleBaseTask() { } Reply queryScheduleTask::SchedulePress(semanticAnalysisTask &semanticTask) { QueryJsonData *queryJsonData = dynamic_cast(semanticTask.getJsonData()); //如果转换失败则返回错误消息 if (queryJsonData == nullptr) return errorMessage(); //如果时间无效 if (queryJsonData->getDateTimeInvalid()) { Reply m_reply; REPLY_ONLY_TTS(m_reply, DATETIME_ERR_TTS, DATETIME_ERR_TTS, true); return m_reply; } //查询日程 if (queryJsonData->offset() > -1 && queryJsonData->getPropertyStatus() == JsonData::PRO_NONE) { Reply m_reply; REPLY_ONLY_TTS(m_reply, CANCEL_ERR_TTS, CANCEL_ERR_TTS, true); return m_reply; } viewWidget = new viewschedulewidget(); queryScheduleProxy m_querySchedule(queryJsonData); DSchedule::Map showdate = m_querySchedule.querySchedule(); setDateTime(queryJsonData); viewWidget->viewScheduleInfoShow(showdate); Reply m_reply; if (queryJsonData->ShouldEndSession()) { //不进行多轮 if (queryOverDueDate(queryJsonData)) { //过期时间 REPLY_ONLY_TTS(m_reply, VIEW_DATE_IS_OVERDUE_TTS, VIEW_DATE_IS_OVERDUE_TTS, true); } else if (queryJsonData->getDateTime().suggestDatetime.size() > 0 && queryJsonData->getDateTime().suggestDatetime.at(0).datetime > QDateTime::currentDateTime().addMonths(6)) { //超过半年的时间 REPLY_ONLY_TTS(m_reply, VIEW_DATETIME_OUT_TTS, VIEW_DATETIME_OUT_TTS, true); } else { if (viewWidget->getScheduleNum(showdate) == 0) { //没有查询的日程 REPLY_ONLY_TTS(m_reply, NO_SCHEDULE_VIEWED_TTS, NO_SCHEDULE_VIEWED_TTS, true); } else { //查询到日程 QString str = QString(VIEW_SCHEDULE_TTS).arg(viewWidget->getScheduleNum(showdate)); REPLY_WIDGET_TTS(m_reply, viewWidget, str, str, true); } } } else { //多轮的情况 REPLY_ONLY_TTS(m_reply, queryJsonData->SuggestMsg(), queryJsonData->SuggestMsg(), false); } return m_reply; } void queryScheduleTask::setDateTime(QueryJsonData *queryJsonData) { switch (queryJsonData->getDateTime().suggestDatetime.size()) { case 1: { m_BeginDateTime = queryJsonData->getDateTime().suggestDatetime.at(0).datetime; m_EndDateTime = m_BeginDateTime; //时间处理 if (!queryJsonData->getDateTime().suggestDatetime.at(0).hasTime) { if (m_BeginDateTime.date() == QDate::currentDate()) { m_BeginDateTime.setTime(QTime::currentTime()); } else { m_BeginDateTime.setTime(QTime(0, 0, 0)); } m_EndDateTime.setTime(QTime(23, 59, 59)); } } break; case 2: { m_BeginDateTime = queryJsonData->getDateTime().suggestDatetime.at(0).datetime; m_EndDateTime = queryJsonData->getDateTime().suggestDatetime.at(1).datetime; //查询时间为过期时间或者是超过半年的时间,则返回一个无效的时间 if (queryJsonData->getDateTime().suggestDatetime.at(1).datetime.date() < QDateTime::currentDateTime().date() || queryJsonData->getDateTime().suggestDatetime.at(0).datetime.date() > QDate::currentDate().addMonths(6)) { //如果查询结束时间小于当前时间,设置开始结束时间为无效时间 m_BeginDateTime.setDate(QDate(0, 0, 0)); m_BeginDateTime.setTime(QTime(0, 0, 0)); m_EndDateTime.setDate(QDate(0, 0, 0)); m_EndDateTime.setTime(QTime(0, 0, 0)); break; } //对查询的开始时间进行处理 if (queryJsonData->getDateTime().suggestDatetime.at(0).datetime < QDateTime::currentDateTime()) { //开始时间小于当前时间,设置当前时间 m_BeginDateTime = QDateTime::currentDateTime(); } else { if (!queryJsonData->getDateTime().suggestDatetime.at(0).hasTime) { //没有time if (queryJsonData->getDateTime().suggestDatetime.at(0).datetime.date() == QDate::currentDate()) //如果是今天,设置当前时间 m_BeginDateTime.setTime(QTime::currentTime()); else //不是今天,设置一天最初的时间 m_BeginDateTime.setTime(QTime(0, 0, 0)); } } //对查询的结束时间进行处理 if (queryJsonData->getDateTime().suggestDatetime.at(1).datetime.date() > QDate::currentDate().addMonths(6)) { //如果查询的结束时间超过了半年,则设置为半年以后的时间 m_EndDateTime.setDate(QDate::currentDate().addMonths(6)); m_EndDateTime.setTime(QTime(23, 59, 59)); } else { //如果查询的结束时间没有超过半年,并且没有具体时间,则设置为一天最晚的时间 if (!queryJsonData->getDateTime().suggestDatetime.at(1).hasTime) { m_EndDateTime.setTime(QTime(23, 59, 59)); } } } break; default: { //如果没有时间,设置开始结束时间为无效时间 m_BeginDateTime.setDate(QDate(0, 0, 0)); m_BeginDateTime.setTime(QTime(0, 0, 0)); m_EndDateTime.setDate(QDate(0, 0, 0)); m_EndDateTime.setTime(QTime(0, 0, 0)); } break; } } bool queryScheduleTask::queryOverDueDate(QueryJsonData *queryJsonData) { bool overduedate = false; int datenum; if (queryJsonData->getDateTime().suggestDatetime.size() > 0) { if (queryJsonData->getDateTime().suggestDatetime.size() == 1) datenum = 0; else datenum = 1; if (queryJsonData->getDateTime().suggestDatetime.at(datenum).datetime.date() < QDate::currentDate()) { overduedate = true; } else if (queryJsonData->getDateTime().suggestDatetime.at(datenum).datetime.date() == QDate::currentDate() && queryJsonData->getDateTime().suggestDatetime.at(datenum).hasTime && queryJsonData->getDateTime().suggestDatetime.at(datenum).datetime.time() < QTime::currentTime()) { overduedate = true; } else { overduedate = false; } } else { overduedate = false; } return overduedate; } dde-calendar-5.14.13/schedule-plugin/src/task/queryscheduletask.h000066400000000000000000000020001473346337000247310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef QUERYSCHEDULETASK_H #define QUERYSCHEDULETASK_H #include "schedulebasetask.h" #include "../data/queryjsondata.h" #include "../widget/viewschedulewidget.h" class queryScheduleTask : public scheduleBaseTask { Q_OBJECT public: queryScheduleTask(); Reply SchedulePress(semanticAnalysisTask &semanticTask) override; private: /** * @brief setDateTime 设置查询的开始结束时间 * @param queryJsonData jsondata句柄 */ void setDateTime(QueryJsonData *queryJsonData); /** * @brief queryOverDueDate 是否查询的是过去的日程 * @param queryJsonData jsondata句柄 * @return bool */ bool queryOverDueDate(QueryJsonData *queryJsonData); private: QDateTime m_BeginDateTime; QDateTime m_EndDateTime; viewschedulewidget *viewWidget = nullptr; protected: }; #endif // QUERYSCHEDULETASK_H dde-calendar-5.14.13/schedule-plugin/src/task/schedulebasetask.cpp000066400000000000000000000047141473346337000250470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulebasetask.h" #include "../state/schedulestate.h" #include "../globaldef.h" scheduleBaseTask::scheduleBaseTask(scheduleState *state) : QObject() , m_State(state) { } scheduleBaseTask::~scheduleBaseTask() { if (m_State == nullptr) { delete m_State; m_State = nullptr; } } Reply scheduleBaseTask::SchedulePress(semanticAnalysisTask &semanticTask) { Reply reply; if (m_State != nullptr) { if (semanticTask.Intent() == JSON_NO_INTENT) { reply = m_State->getReplyByIntent(false); } else if (semanticTask.Intent() == JSON_YES_INTENT) { reply = m_State->getReplyByIntent(true); } else { reply = m_State->process(semanticTask.getJsonData()); } updateState(); } return reply; } Reply scheduleBaseTask::getFeedbackByQuerySchedule(const DSchedule::List &info) { Q_UNUSED(info); return Reply(); } Reply scheduleBaseTask::getReplyBySelectSchedule(const DSchedule::Ptr &info) { Q_UNUSED(info); return Reply(); } Reply scheduleBaseTask::InitState(const JsonData *jsonData, bool isUpdateState) { Q_UNUSED(jsonData); Q_UNUSED(isUpdateState); return Reply(); } Reply scheduleBaseTask::repeatScheduleHandle(const DSchedule::Ptr &info, bool isOnlyOne) { Q_UNUSED(info); Q_UNUSED(isOnlyOne); return Reply(); } Reply scheduleBaseTask::confirwScheduleHandle(const DSchedule::Ptr &info) { Q_UNUSED(info); return Reply(); } Reply scheduleBaseTask::confirmInfo(bool isOK) { Q_UNUSED(isOK); return Reply(); } scheduleState *scheduleBaseTask::getState() const { return m_State; } Reply scheduleBaseTask::overdueScheduleProcess() { Reply reply; REPLY_ONLY_TTS(reply, OVERTIME_TTS, OVERTIME_TTS, true); return reply; } void scheduleBaseTask::updateState() { do { scheduleState *nextState = m_State->getNextState(); if (nextState != nullptr) { delete m_State; m_State = nextState; } else { break; } } while (1); } /** * @brief scheduleBaseTask::errorMessage 用户输入无法匹配返回错误消息提示 * @return 关于无法处理该关键字的答复 */ Reply scheduleBaseTask::errorMessage() { //答复 Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true) return reply; } dde-calendar-5.14.13/schedule-plugin/src/task/schedulebasetask.h000066400000000000000000000025411473346337000245100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEBASETASK_H #define SCHEDULEBASETASK_H #include "semanticanalysistask.h" #include "../interface/reply.h" #include "dschedule.h" #include class scheduleState; class scheduleBaseTask : public QObject { Q_OBJECT public: scheduleBaseTask(scheduleState *state = nullptr); virtual ~scheduleBaseTask(); virtual Reply SchedulePress(semanticAnalysisTask &semanticTask); virtual Reply getFeedbackByQuerySchedule(const DSchedule::List &info); virtual Reply getReplyBySelectSchedule(const DSchedule::Ptr &info); virtual Reply InitState(const JsonData *jsonData, bool isUpdateState = false); virtual Reply repeatScheduleHandle(const DSchedule::Ptr &info, bool isOnlyOne); virtual Reply confirwScheduleHandle(const DSchedule::Ptr &info); virtual Reply confirmInfo(bool isOK); scheduleState *getState() const; Reply overdueScheduleProcess(); signals: void signaleSendMessage(Reply reply); protected: void updateState(); /** * @brief errorMessage 用户输入无法匹配返回错误消息提示 * @return 关于无法处理该关键字的答复 */ Reply errorMessage(); protected: scheduleState *m_State {nullptr}; }; #endif // SCHEDULEBASETASK_H dde-calendar-5.14.13/schedule-plugin/src/task/schedulemanagetask.cpp000066400000000000000000000063701473346337000253650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulemanagetask.h" #include "../globaldef.h" #include "../widget/schedulelistwidget.h" #include "../data/createjsondata.h" #include "../data/queryjsondata.h" #include "../data/canceljsondata.h" #include "../data/changejsondata.h" #include "createscheduletask.h" #include "queryscheduletask.h" #include "cancelscheduletask.h" #include "changescheduletask.h" #include "accountmanager.h" DWIDGET_USE_NAMESPACE ScheduleManageTask::ScheduleManageTask(QObject *parent) : QObject(parent) { gAccounManager->resetAccount(); m_scheduleTaskMap[JSON_CREATE] = new createScheduleTask(); m_scheduleTaskMap[JSON_VIEW] = new queryScheduleTask(); m_scheduleTaskMap[JSON_CANCEL] = new cancelScheduleTask(); m_scheduleTaskMap[JSON_CHANGE] = new changeScheduleTask(); QMap::Iterator inter = m_scheduleTaskMap.begin(); for (; inter != m_scheduleTaskMap.end(); ++inter) { scheduleBaseTask *task = inter.value(); connect(task, &scheduleBaseTask::signaleSendMessage, this, &ScheduleManageTask::signaleSendMessage); } } ScheduleManageTask::~ScheduleManageTask() { QMap::Iterator inter = m_scheduleTaskMap.begin(); for (; inter != m_scheduleTaskMap.end(); ++inter) { scheduleBaseTask *task = inter.value(); delete task; } m_scheduleTaskMap.clear(); } ScheduleManageTask *ScheduleManageTask::getInstance() { static ScheduleManageTask scheduleManageTask; return &scheduleManageTask; } void ScheduleManageTask::releaseInstance() { } void ScheduleManageTask::process(semanticAnalysisTask &semanticTask) { if (m_scheduleTaskMap.contains(semanticTask.Intent())) { if (m_preScheduleTask != m_scheduleTaskMap[semanticTask.Intent()]) { if (m_preScheduleTask != nullptr) m_preScheduleTask->InitState(nullptr, true); m_preScheduleTask = m_scheduleTaskMap[semanticTask.Intent()]; } } Reply reply; if (m_preScheduleTask == nullptr) { REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true); } else { reply = m_preScheduleTask->SchedulePress(semanticTask); connectHideEventToInitState(reply); } setReply(reply); } void ScheduleManageTask::slotReceivce(QVariant data, Reply *reply) { Q_UNUSED(data); Q_UNUSED(reply); } void ScheduleManageTask::slotWidgetHideInitState() { if (m_preScheduleTask != nullptr) m_preScheduleTask->InitState(nullptr, true); } void ScheduleManageTask::connectHideEventToInitState(Reply reply) { //判断回复内容是否有回复窗口 if (reply.getReplyWidget() != nullptr) { //转换为IconDFrame窗口 IconDFrame *_iconWidget = qobject_cast(reply.getReplyWidget()); if (_iconWidget != nullptr) { //如果转换成功则关联 connect(_iconWidget, &IconDFrame::widgetIsHide, this, &ScheduleManageTask::slotWidgetHideInitState, Qt::UniqueConnection); } } } Reply ScheduleManageTask::getReply() const { return m_Reply; } void ScheduleManageTask::setReply(const Reply &reply) { m_Reply = reply; } dde-calendar-5.14.13/schedule-plugin/src/task/schedulemanagetask.h000066400000000000000000000026311473346337000250260ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEMANAGETASK_H #define SCHEDULEMANAGETASK_H #include "../interface/reply.h" #include "semanticanalysistask.h" #include "../widget/icondframe.h" #include "dschedule.h" #include "../widget/createschedulewidget.h" #include "schedulebasetask.h" #include "accountitem.h" #include class ScheduleManageTask : public QObject { Q_OBJECT public: static ScheduleManageTask *getInstance(); static void releaseInstance(); void process(semanticAnalysisTask &semanticTask); Reply getReply() const; void setReply(const Reply &reply); private: explicit ScheduleManageTask(QObject *parent = nullptr); ~ScheduleManageTask(); signals: void signaleSendMessage(Reply reply); public slots: void slotReceivce(QVariant data, Reply *reply); /** * @brief slotWidgetHideInitState 窗口隐藏时状态初始化 */ void slotWidgetHideInitState(); private: /** * @brief connectHideEventToInitState 窗口隐藏绑定状态初始化 * @param reply 回复 */ void connectHideEventToInitState(Reply reply); private: AccountItem::Ptr m_account; QMap m_scheduleTaskMap; Reply m_Reply; scheduleBaseTask *m_preScheduleTask {nullptr}; }; #endif // SCHEDULEMANAGETASK_H dde-calendar-5.14.13/schedule-plugin/src/task/semanticanalysistask.cpp000066400000000000000000000100561473346337000257630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "semanticanalysistask.h" #include #include #include #include "../data/createjsondata.h" #include "../data/queryjsondata.h" #include "../data/canceljsondata.h" #include "../data/changejsondata.h" #include "../globaldef.h" semanticAnalysisTask::semanticAnalysisTask(QObject *parent) : QObject(parent) { } semanticAnalysisTask::~semanticAnalysisTask() { deleteJsonData(); } bool semanticAnalysisTask::resolveTaskJson(const QString &semantic) { setIntent(""); deleteJsonData(); QJsonParseError jsonError; QJsonDocument doc = QJsonDocument::fromJson(semantic.toUtf8(), &jsonError); if (!doc.isNull() && (jsonError.error == QJsonParseError::NoError)) { auto rootObject = doc.object(); if (!(rootObject.contains("intent") && rootObject["intent"].isObject())) { return false; } auto intentObject = rootObject["intent"].toObject(); if (intentObject.empty()) { return false; } if (intentObject.contains("semantic") && intentObject["semantic"].isArray()) { auto semanticObjArr = intentObject["semantic"].toArray(); for (int i = 0; i < semanticObjArr.size(); ++i) { auto semanticObj = semanticObjArr[i].toObject(); if (semanticObj.contains("intent") && semanticObj["intent"].isString()) { setIntent(semanticObj["intent"].toString()); } m_JsonData = createJsonDataFactory(Intent()); if (m_JsonData != nullptr) { m_JsonData->JosnResolve(semanticObj); } } } if (intentObject.contains("voice_answer") && intentObject["voice_answer"].isArray()) { auto voiceAnsObjArr = intentObject["voice_answer"].toArray(); for (int i = 0; i < voiceAnsObjArr.size(); ++i) { auto voiceAnsObj = voiceAnsObjArr[i].toObject(); if (voiceAnsObj.contains("type") && voiceAnsObj["type"].isString()) { if (voiceAnsObj["type"] != "TTS") { continue; } if (voiceAnsObj.contains("content") && voiceAnsObj["content"].isString()) { //语音播报的文本 if (m_JsonData != nullptr) { m_JsonData->setSuggestMsg(voiceAnsObj["content"].toString()); } break; } } } } if (intentObject.contains("shouldEndSession") && intentObject["shouldEndSession"].isBool()) { setShouldEndSession(intentObject["shouldEndSession"].toBool()); } else { setShouldEndSession(true); } } else { return false; } return true; } QString semanticAnalysisTask::Intent() const { return m_Intent; } void semanticAnalysisTask::setIntent(const QString &Intent) { m_Intent = Intent; } JsonData *semanticAnalysisTask::getJsonData() const { return m_JsonData; } void semanticAnalysisTask::deleteJsonData() { if (m_JsonData != nullptr) { delete m_JsonData; m_JsonData = nullptr; } } JsonData *semanticAnalysisTask::createJsonDataFactory(const QString &Intent) { if (Intent == JSON_CREATE) { //创建 return new CreateJsonData(); } else if (Intent == JSON_VIEW) { //查询 return new QueryJsonData(); } else if (Intent == JSON_CANCEL) { //取消 return new cancelJsonData(); } else if (Intent == JSON_CHANGE) { //改变 return new changejsondata(); } return nullptr; } void semanticAnalysisTask::setShouldEndSession(bool isEnd) { if (m_JsonData != nullptr) { m_JsonData->setShouldEndSession(isEnd); } } void semanticAnalysisTask::setJsonData(JsonData *JsonData) { m_JsonData = JsonData; } dde-calendar-5.14.13/schedule-plugin/src/task/semanticanalysistask.h000066400000000000000000000016141473346337000254300ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SEMANTICANALYSISTASK_H #define SEMANTICANALYSISTASK_H #include #include #include "../data/jsondata.h" class QJsonObject; class semanticAnalysisTask : public QObject { Q_OBJECT public: explicit semanticAnalysisTask(QObject *parent = nullptr); ~semanticAnalysisTask(); bool resolveTaskJson(const QString &semantic); QString Intent() const; void setIntent(const QString &Intent); JsonData *getJsonData() const; void setJsonData(JsonData *JsonData); private: void deleteJsonData(); JsonData *createJsonDataFactory(const QString &Intent); void setShouldEndSession(bool isEnd); signals: public slots: private: QString m_Intent; JsonData *m_JsonData {nullptr}; }; #endif // SEMANTICANALYSISTASK_H dde-calendar-5.14.13/schedule-plugin/src/widget/000077500000000000000000000000001473346337000213445ustar00rootroot00000000000000dde-calendar-5.14.13/schedule-plugin/src/widget/buttonwidget.cpp000066400000000000000000000055741473346337000246020ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "buttonwidget.h" #include #include #include #include buttonwidget::buttonwidget(QWidget *parent) : DWidget(parent) , buttonLayout(new QHBoxLayout()) , clickedButtonIndex(0) { buttonLayout->setMargin(0); buttonLayout->setContentsMargins(BTWidget::BUTTON_LAYOUT_LEFT_MARGIN, BTWidget::BUTTON_LAYOUT_TOP_MARGIN, BTWidget::BUTTON_LAYOUT_RIGHT_MARGIN, BTWidget::BUTTON_LAYOUT_BOTTOM_MARGIN); setLayout(buttonLayout); } int buttonwidget::addbutton(const QString &text, bool isDefault, buttonwidget::ButtonType type) { int index = buttonCount(); insertButton(index, text, isDefault, type); return index; } void buttonwidget::insertButton(int index, const QString &text, bool isDefault, buttonwidget::ButtonType type) { QAbstractButton *button; switch (type) { case ButtonWarning: button = new DWarningButton(this); break; case ButtonRecommend: button = new DSuggestButton(this); break; default: button = new DPushButton(this); break; } button->setText(text); button->setObjectName("ActionButton"); insertButton(index, button, isDefault); } void buttonwidget::insertButton(int index, QAbstractButton *button, bool isDefault) { DVerticalLine *line = new DVerticalLine(this); line->setObjectName("VLine"); line->setFixedHeight(30); buttonLayout->insertWidget(index * 2, line); buttonLayout->insertWidget(index * 2 + 1, button); buttonList << button; line->show(); buttonLayout->itemAt(0)->widget()->hide(); connect(button, &QAbstractButton::clicked, this, &buttonwidget::onButtonClicked); if (isDefault) { QPushButton *pushbutton = qobject_cast(button); pushbutton->setDefault(pushbutton); } const QString &text = button->text(); if (text.count() == 2) { for (const QChar &ch : text) { switch (ch.script()) { case QChar::Script_Han: case QChar::Script_Katakana: case QChar::Script_Hiragana: case QChar::Script_Hangul: break; default: return; } } button->setText(QString().append(text.at(0)).append(QChar::Nbsp).append(text.at(1))); } } int buttonwidget::buttonCount() const { return buttonList.count(); } void buttonwidget::onButtonClicked(bool clicked) { Q_UNUSED(clicked); QAbstractButton *button = qobject_cast(this->sender()); clickedButtonIndex = buttonList.indexOf(button); emit buttonClicked(clickedButtonIndex, button->text()); } dde-calendar-5.14.13/schedule-plugin/src/widget/buttonwidget.h000066400000000000000000000025721473346337000242420ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef BUTTONWIDGET_H #define BUTTONWIDGET_H #include #include #include #include DWIDGET_USE_NAMESPACE namespace BTWidget { const int BUTTON_LAYOUT_TOP_MARGIN = 0; const int BUTTON_LAYOUT_BOTTOM_MARGIN = 0; const int BUTTON_LAYOUT_LEFT_MARGIN = 0; const int BUTTON_LAYOUT_RIGHT_MARGIN = 0; } // namespace BTWidget class buttonwidget : public DWidget { Q_OBJECT public: explicit buttonwidget(QWidget *parent = nullptr); enum ButtonType { ButtonNormal, ButtonWarning, ButtonRecommend }; //将isDefault设置为true,保证有焦点时,点击enter可以选中 int addbutton(const QString &text, bool isDefault = true, ButtonType type = ButtonNormal); void insertButton(int index, const QString &text, bool isDefault = true, ButtonType type = ButtonNormal); void insertButton(int index, QAbstractButton *button, bool isDefault = true); int buttonCount() const; signals: void buttonClicked(int index, const QString &text); public slots: void onButtonClicked(bool clicked); private: QList buttonList; QSpacerItem *spacer = nullptr; QHBoxLayout *buttonLayout; int clickedButtonIndex; }; #endif // BUTTONWIDGET_H dde-calendar-5.14.13/schedule-plugin/src/widget/createschedulewidget.cpp000066400000000000000000000117761473346337000262500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "createschedulewidget.h" #include "buttonwidget.h" #include "../globaldef.h" #include "dscheduledatamanager.h" #include "commondef.h" #include #include #include #include #include #include createSchedulewidget::createSchedulewidget(QWidget *parent) : IconDFrame(parent) , m_scheduleDtailInfo(new DSchedule) , m_scheduleitemwidget(new scheduleitemwidget(this)) { connect(m_scheduleitemwidget, &scheduleitemwidget::signalItemPress, this, &createSchedulewidget::slotItemPress); } DSchedule::Ptr createSchedulewidget::getScheduleDtailInfo() { return m_scheduleDtailInfo; } void createSchedulewidget::setTitleName(const QString &titleName) { m_titleName = titleName; } void createSchedulewidget::setDateTime(QDateTime begintime, QDateTime endtime) { m_BeginDateTime = begintime; m_EndDateTime = endtime; } void createSchedulewidget::setRpeat(int rpeat) { m_rpeat = rpeat; } void createSchedulewidget::setschedule() { QDateTime m_beginTime; QDateTime m_endTime; m_beginTime = m_BeginDateTime; m_endTime = m_EndDateTime; m_scheduleDtailInfo->setDtStart(m_beginTime); m_scheduleDtailInfo->setDtEnd(m_endTime); m_scheduleDtailInfo->setSummary(m_titleName); m_scheduleDtailInfo->setScheduleTypeID("403bf009-2005-4679-9c76-e73d9f83a8b4"); m_scheduleDtailInfo->setAllDay(false); m_scheduleDtailInfo->setAlarmType(DSchedule::Alarm_Begin); switch (m_rpeat) { case 1: m_scheduleDtailInfo->setRRuleType(DSchedule::RRule_Day); break; case 2: m_scheduleDtailInfo->setRRuleType(DSchedule::RRule_Work); break; case 3: m_scheduleDtailInfo->setRRuleType(DSchedule::RRule_Week); break; case 4: m_scheduleDtailInfo->setRRuleType(DSchedule::RRule_Month); break; case 5: m_scheduleDtailInfo->setRRuleType(DSchedule::RRule_Year); break; default: m_scheduleDtailInfo->setRRuleType(DSchedule::RRule_None); break; } if (m_scheduleDtailInfo->getRRuleType() != DSchedule::RRule_None) { //结束重复于类型为:永不 m_scheduleDtailInfo->recurrence()->setDuration(-1); } } void createSchedulewidget::scheduleEmpty(bool isEmpty) { m_scheduleEmpty = isEmpty; } void createSchedulewidget::updateUI(const QString &scheduleID) { if (m_scheduleEmpty) { //获取筛选到的日程信息 getCreatScheduleFromDbus(scheduleID); //如果筛选到的日程不为空,则展示日程插件 if (!m_scheduleInfo.isEmpty()) { QVBoxLayout *mainlayout = new QVBoxLayout(); m_scheduleitemwidget->setScheduleDtailInfo(m_scheduleInfo); m_scheduleitemwidget->addscheduleitem(); mainlayout->addWidget(m_scheduleitemwidget); setCenterLayout(mainlayout); } else { qCritical(CommonLogger) << "There's not the same schedule in scheduleSql!"; } } else { //是否创建日程 QVBoxLayout *mainlayout = new QVBoxLayout(); buttonwidget *button = new buttonwidget(this); button->addbutton(CANCEL_BUTTON_STRING, true, buttonwidget::ButtonRecommend); button->addbutton(CONFIRM_BUTTON_STRING); connect(button, &buttonwidget::buttonClicked, this, &createSchedulewidget::slotsbuttonchance); m_scheduleitemwidget->setScheduleDtailInfo(m_scheduleInfo); m_scheduleitemwidget->addscheduleitem(); mainlayout->addWidget(m_scheduleitemwidget); mainlayout->addSpacing(4); mainlayout->addWidget(button); setCenterLayout(mainlayout); } } bool createSchedulewidget::buttonclicked() { return m_buttonclicked; } void createSchedulewidget::slotsbuttonchance(int index, const QString &text) { Q_UNUSED(text) if (index == 0) { m_buttonclicked = false; } if (index == 1) { m_buttonclicked = true; } } void createSchedulewidget::slotItemPress(const DSchedule::Ptr &info) { QProcess proc; proc.startDetached(PROCESS_OPEN_CALENDAR_PROGRAM, QString(PROCESS_OPEN_CALENDAR_ARGUMENTS).split(" ")); QThread::msleep(750); QString schedulestr; DSchedule::toJsonString(info, schedulestr); QDBusMessage message = QDBusMessage::createMethodCall(DBUS_CALENDAR_SERVICE, DBUS_CALENDAR_PATCH, DBUS_CALENDAR_INTFACE, "OpenSchedule"); message << schedulestr; //发送消息 QDBusMessage response = QDBusConnection::sessionBus().call(message); } void createSchedulewidget::getCreatScheduleFromDbus(const QString &scheduleID) { DSchedule::Ptr schedule = DScheduleDataManager::getInstance()->queryScheduleByScheduleID(scheduleID); m_scheduleInfo.append(schedule); } dde-calendar-5.14.13/schedule-plugin/src/widget/createschedulewidget.h000066400000000000000000000026421473346337000257050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CREATESCHEDULE_H #define CREATESCHEDULE_H #include "dschedule.h" #include "icondframe.h" #include "scheduleitemwidget.h" #include #include #include DWIDGET_USE_NAMESPACE class createSchedulewidget : public IconDFrame { Q_OBJECT public: explicit createSchedulewidget(QWidget *parent = nullptr); public: DSchedule::Ptr getScheduleDtailInfo(); void setTitleName(const QString &titleName); void setDateTime(QDateTime begintime, QDateTime endtime); void setRpeat(int rpeat); void setschedule(); void scheduleEmpty(bool isEmpty); void updateUI(const QString &scheduleID); bool buttonclicked(); public slots: void slotsbuttonchance(int index, const QString &text); void slotItemPress(const DSchedule::Ptr &info); /** * @brief getCreatScheduleFromDbus 通过dbus获取新建的日程信息 */ void getCreatScheduleFromDbus(const QString &scheduleID); private: DSchedule::Ptr m_scheduleDtailInfo; QDateTime m_BeginDateTime; QDateTime m_EndDateTime; QString m_titleName; int m_rpeat; bool m_scheduleEmpty = false; scheduleitemwidget *m_scheduleitemwidget; DSchedule::List m_scheduleInfo; bool m_buttonclicked = false; signals: public slots: }; #endif // CREATESCHEDULE_H dde-calendar-5.14.13/schedule-plugin/src/widget/icondframe.cpp000066400000000000000000000113621473346337000241620ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "icondframe.h" #include #include #include #include #include #include "../globaldef.h" #include "../interface/reply.h" #include IconDFrame::IconDFrame(QWidget *parent) : DFrame(parent) , m_Dayrenderer(new QSvgRenderer()) , m_Weekrenderer(new QSvgRenderer()) , m_Monthrenderer(new QSvgRenderer()) , m_backgroundrenderer(new QSvgRenderer()) { //设置接受tab切换 setFocusPolicy(Qt::TabFocus); } IconDFrame::~IconDFrame() { delete m_Dayrenderer; m_Dayrenderer = nullptr; delete m_Weekrenderer; m_Weekrenderer = nullptr; delete m_Monthrenderer; m_Monthrenderer = nullptr; delete m_backgroundrenderer; m_backgroundrenderer = nullptr; } void IconDFrame::setCenterLayout(QLayout *layout) { QVBoxLayout *vlayout = new QVBoxLayout(); vlayout->addSpacing(25); vlayout->addLayout(layout); this->setLayout(vlayout); } void IconDFrame::paintEvent(QPaintEvent *event) { setTheMe(Dtk::Gui::DGuiApplicationHelper::instance()->themeType()); DFrame::paintEvent(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 反锯齿; //绘制tab切换focus效果 if (m_tabFocusIn) { QPen pen; //设置边框为2 pen.setWidth(2); //设置边框颜色为活动色 pen.setColor(Dtk::Gui::DGuiApplicationHelper::instance()->applicationPalette().highlight().color()); painter.setPen(pen); //设置边框矩形,由于插件widget会被助手覆盖一个像素,所以需要减去一个像素的外边 QRect _showRect(1, 1, this->width() - 2, this->height() - 2); painter.drawRoundedRect(_showRect, 8, 8); } //绘制图标 paintPixmap(painter); //绘制标题 paintTitle(painter); painter.end(); } void IconDFrame::hideEvent(QHideEvent *event) { Q_UNUSED(event); if (isEnabled()) { //如果窗口为启用状态则触发窗口隐藏信号 emit widgetIsHide(); } } void IconDFrame::focusInEvent(QFocusEvent *event) { Q_UNUSED(event); //设置focus标志为true //TODO 根据需求先取消tab选中效果 m_tabFocusIn = false; //刷新界面 update(); } void IconDFrame::focusOutEvent(QFocusEvent *event) { Q_UNUSED(event); //设置focus标志为false m_tabFocusIn = false; //刷新界面 update(); } void IconDFrame::setTheMe(const int type) { QColor titleColor; if (type == 0 || type == 1) { titleColor.setRgb(0, 0, 0); titleColor.setAlphaF(0.4); } else { titleColor.setRgb(255, 255, 255); titleColor.setAlphaF(0.4); } setTitleColor(titleColor); } void IconDFrame::paintPixmap(QPainter &painter) { QString dayfile = QString(":/resources/DynamicIcon/day%1.svg").arg(QDate::currentDate().day()); m_Dayrenderer->load(dayfile); QString weekfile = QString(":/resources/DynamicIcon/week%1.svg").arg(QDate::currentDate().dayOfWeek()); m_Weekrenderer->load(weekfile); QString monthfile = QString(":/resources/DynamicIcon/month%1.svg").arg(QDate::currentDate().month()); m_Monthrenderer->load(monthfile); QString backgroundfile(":/resources/DynamicIcon/calendar_bg.svg"); m_backgroundrenderer->load(backgroundfile); painter.save(); painter.setRenderHint(QPainter::SmoothPixmapTransform); //draw background QRectF backgroundRect = QRectF(11, 9, 16, 16); m_backgroundrenderer->render(&painter, backgroundRect); //draw month qreal month_x = 13; qreal month_y = 10; qreal month_w = 11; qreal month_h = 4; m_Monthrenderer->render(&painter, QRectF(month_x, month_y, month_w, month_h)); //draw day qreal day_x = 14; qreal day_y = 14; qreal day_w = 9; qreal day_h = 7; m_Dayrenderer->render(&painter, QRectF(day_x, day_y, day_w, day_h)); painter.restore(); } void IconDFrame::paintTitle(QPainter &painter) { QRect rect(34, 7, 24, 17); painter.save(); painter.setPen(TitleColor()); painter.setFont(TitleFont()); painter.drawText(rect, Qt::AlignCenter, tr(PLUGIN_TITLE_NAME)); painter.restore(); } void IconDFrame::slotReceivce(QVariant data, Reply *reply) { Q_UNUSED(data); Q_UNUSED(reply); } QColor IconDFrame::TitleColor() const { return m_TitleColor; } void IconDFrame::setTitleColor(const QColor &TitleColor) { m_TitleColor = TitleColor; } QFont IconDFrame::TitleFont() { m_TitleFont.setPixelSize(12); return m_TitleFont; } dde-calendar-5.14.13/schedule-plugin/src/widget/icondframe.h000066400000000000000000000025471473346337000236340ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ICONDFRAME_H #define ICONDFRAME_H #include class QSvgRenderer; class Reply; DWIDGET_USE_NAMESPACE class IconDFrame : public DFrame { Q_OBJECT public: explicit IconDFrame(QWidget *parent = nullptr); ~IconDFrame() override; void setCenterLayout(QLayout *layout); QColor TitleColor() const; void setTitleColor(const QColor &TitleColor); private: QFont TitleFont(); protected: void paintEvent(QPaintEvent *event) override; void hideEvent(QHideEvent *event) override; void focusInEvent(QFocusEvent *event) override; void focusOutEvent(QFocusEvent *event) override; private: void setTheMe(const int type); void paintPixmap(QPainter &painter); void paintTitle(QPainter &painter); signals: void signaleSendMessage(QString text); /** * @brief widgetIsHide 窗口隐藏信号 */ void widgetIsHide(); public slots: virtual void slotReceivce(QVariant data, Reply *reply); private: QSvgRenderer *m_Dayrenderer; QSvgRenderer *m_Weekrenderer; QSvgRenderer *m_Monthrenderer; QSvgRenderer *m_backgroundrenderer; QColor m_TitleColor; QFont m_TitleFont; bool m_tabFocusIn {false}; //获取tab焦点标记 }; #endif // ICONDFRAME_H dde-calendar-5.14.13/schedule-plugin/src/widget/itemwidget.cpp000066400000000000000000000125121473346337000242130ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "itemwidget.h" #include #include ItemWidget::ItemWidget(QWidget *parent) : DWidget(parent) { QFont datetimefont; datetimefont.setPixelSize(12); QFont titlefont; titlefont.setPixelSize(14); setTitleFont(titlefont); setDateTimeFont(datetimefont); } void ItemWidget::paintEvent(QPaintEvent *event) { setTheMe(DGuiApplicationHelper::instance()->themeType()); DWidget::paintEvent(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 反锯齿; drawBackground(painter); DrawItem(painter); } void ItemWidget::drawBackground(QPainter &painter) { const int radius = 8; const int diameter = radius * 2; const int RectWidth = this->rect().width(); const int RectHeight = this->rect().height(); painter.save(); painter.setPen(Qt::NoPen); QColor backgroundcolor(getBackgroundColor()); painter.setBrush(backgroundcolor); switch (m_Positon) { case ItemTop: { QPainterPath painterPath; painterPath.moveTo(0, RectHeight); painterPath.lineTo(RectWidth, RectHeight); painterPath.lineTo(RectWidth, diameter); painterPath.arcTo(QRect(RectWidth - diameter, 0, diameter, diameter), 0, 90); painterPath.lineTo(diameter, 0); painterPath.arcTo(QRect(0, 0, diameter, diameter), 90, 90); painterPath.lineTo(0, RectHeight); painterPath.closeSubpath(); painter.drawPath(painterPath); } break; case ItemMiddle: painter.drawRect(this->rect()); break; case ItemBottom: { QPainterPath painterPath; painterPath.moveTo(0, 0); painterPath.lineTo(0, RectHeight - diameter); painterPath.arcTo(QRect(0, RectHeight - diameter, diameter, diameter), 180, 90); painterPath.lineTo(RectWidth - diameter, RectHeight); painterPath.arcTo(QRect(RectWidth - diameter, RectHeight - diameter, diameter, diameter), 270, 90); painterPath.lineTo(RectWidth, 0); painterPath.lineTo(0, 0); painterPath.closeSubpath(); painter.drawPath(painterPath); } break; case ItemOnly: painter.drawRoundedRect(this->rect(), 8, 8); break; } painter.restore(); } QColor ItemWidget::getBackgroundColor() { return m_BackgroundColor; } void ItemWidget::setTheMe(const int type) { QColor titleColor; QColor datetimeColor; if (type == 0 || type == 1) { titleColor.setRgb(0, 0, 0); titleColor.setAlphaF(0.8); datetimeColor.setRgb(0, 0, 0); datetimeColor.setAlphaF(0.6); //设置浅色背景色 m_BackgroundColor = "#000000"; m_BackgroundColor.setAlphaF(0.05); } else { titleColor.setRgb(255, 255, 255); titleColor.setAlphaF(1); datetimeColor.setRgb(255, 255, 255); datetimeColor.setAlphaF(0.6); //设置深色背景色 m_BackgroundColor = "#FFFFFF"; m_BackgroundColor.setAlphaF(0.05); } setTitleColor(titleColor); setDateTimeColor(datetimeColor); } QColor ItemWidget::ScheduleColor() { return CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType(m_scheduleInfo->scheduleTypeID()).orginalColor; } DSchedule::Ptr ItemWidget::getScheduleInfo() const { return m_scheduleInfo; } void ItemWidget::setDateTimeFont(const QFont &DateTimeFont) { m_DateTimeFont = DateTimeFont; } void ItemWidget::setTitleFont(const QFont &TitleFont) { m_TitleFont = TitleFont; } void ItemWidget::setDateTimeColor(const QColor &DateTimeColor) { m_DateTimeColor = DateTimeColor; } DSchedule::Ptr ItemWidget::scheduleInfo() const { return m_scheduleInfo; } void ItemWidget::setScheduleInfo(const DSchedule::Ptr &scheduleInfo) { m_scheduleInfo = scheduleInfo; setScheduleBeginTime(scheduleInfo->dtStart()); setScheduleEndTime(scheduleInfo->dtEnd()); setShowDate(scheduleInfo->dtStart().date()); setTitleContent(scheduleInfo->summary()); } void ItemWidget::setTitleColor(const QColor &TitleColor) { m_TitleColor = TitleColor; } QColor ItemWidget::getDateTimeColor() const { return m_DateTimeColor; } QFont ItemWidget::getDateTimeFont() const { return m_DateTimeFont; } QColor ItemWidget::getTitleColor() const { return m_TitleColor; } QFont ItemWidget::getTitleFont() const { return m_TitleFont; } QDateTime ItemWidget::getScheduleEndTime() const { return m_ScheduleEndTime; } void ItemWidget::setScheduleEndTime(const QDateTime &ScheduleEndTime) { m_ScheduleEndTime = ScheduleEndTime; } QDateTime ItemWidget::getScheduleBeginTime() const { return m_ScheduleBeginTime; } void ItemWidget::setScheduleBeginTime(const QDateTime &ScheduleBeginTime) { m_ScheduleBeginTime = ScheduleBeginTime; } QDate ItemWidget::getShowDate() const { return m_ShowDate; } void ItemWidget::setShowDate(const QDate &ShowDate) { m_ShowDate = ShowDate; } QString ItemWidget::getTitleContent() const { return m_TitleContent; } void ItemWidget::setTitleContent(const QString &TitleContent) { m_TitleContent = TitleContent; } void ItemWidget::setPositon(const Item_Position &Positon) { m_Positon = Positon; } void ItemWidget::DrawItem(QPainter &painter) { Q_UNUSED(painter); } dde-calendar-5.14.13/schedule-plugin/src/widget/itemwidget.h000066400000000000000000000043371473346337000236660ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ITEMWIDGET_H #define ITEMWIDGET_H #include "scheduledatamanage.h" #include "dschedule.h" #include #include #include #include DWIDGET_USE_NAMESPACE class ItemWidget : public DWidget { Q_OBJECT public: enum Item_Position { ItemTop, ItemMiddle, ItemBottom, ItemOnly }; public: explicit ItemWidget(QWidget *parent = nullptr); void setPositon(const Item_Position &Positon); virtual void DrawItem(QPainter &painter); void setTitleContent(const QString &TitleContent); QString getTitleContent() const; QDate getShowDate() const; void setShowDate(const QDate &ShowDate); QDateTime getScheduleBeginTime() const; void setScheduleBeginTime(const QDateTime &ScheduleBeginTime); QDateTime getScheduleEndTime() const; void setScheduleEndTime(const QDateTime &ScheduleEndTime); DSchedule::Ptr scheduleInfo() const; void setScheduleInfo(const DSchedule::Ptr &scheduleInfo); DSchedule::Ptr getScheduleInfo() const; protected: QFont getTitleFont() const; QColor getTitleColor() const; QFont getDateTimeFont() const; QColor getDateTimeColor() const; void setTitleColor(const QColor &TitleColor); void setDateTimeColor(const QColor &DateTimeColor); void setTitleFont(const QFont &TitleFont); void setDateTimeFont(const QFont &DateTimeFont); protected: void paintEvent(QPaintEvent *event) override; void drawBackground(QPainter &painter); QColor getBackgroundColor(); virtual void setTheMe(const int type); QColor ScheduleColor(); signals: public slots: private: Item_Position m_Positon {ItemMiddle}; QString m_TitleContent; QDate m_ShowDate; QDateTime m_ScheduleBeginTime; QDateTime m_ScheduleEndTime; QFont m_TitleFont; QColor m_TitleColor; QFont m_DateTimeFont; QColor m_DateTimeColor; /** * @brief m_BackgroundColor 绘制背景色 */ QColor m_BackgroundColor{"#000000"}; DSchedule::Ptr m_scheduleInfo; }; #endif // ITEMWIDGET_H dde-calendar-5.14.13/schedule-plugin/src/widget/modifyscheduleitem.cpp000066400000000000000000000073461473346337000257450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "modifyscheduleitem.h" #include "../globaldef.h" #include modifyScheduleItem::modifyScheduleItem(QWidget *parent) : ItemWidget(parent) { setFixedHeight(MODIFY_ITEM_HEIGHT); } void modifyScheduleItem::DrawItem(QPainter &painter) { drawIndex(painter); drawLine(painter); drawTitleContent(painter); drawScheduleColorLine(painter); drawTime(painter); drawDate(painter); } int modifyScheduleItem::getIndex() const { return m_Index; } void modifyScheduleItem::setIndex(int Index) { m_Index = Index; } void modifyScheduleItem::drawIndex(QPainter &painter) { painter.save(); painter.setFont(getTitleFont()); painter.setPen(getDateTimeColor()); const QRect indexRect(m_IndexX, 0, m_IndexWidth, this->rect().height()); painter.drawText(indexRect, Qt::AlignCenter, QString::number(getIndex())); painter.restore(); } void modifyScheduleItem::drawLine(QPainter &painter) { painter.save(); QRect rect(40, 10, 1, 28); painter.setPen(Qt::NoPen); painter.setBrush(LineColor()); painter.drawRect(rect); painter.restore(); } void modifyScheduleItem::drawTitleContent(QPainter &painter) { painter.save(); painter.setFont(getTitleFont()); painter.setPen(getTitleColor()); const int textRectWidth = this->rect().width() - m_TItleRightMargin - m_TitleX; const QRect titleContent(m_TitleX, 0, textRectWidth, this->rect().height()); QFontMetrics metrics(getTitleFont()); painter.drawText(titleContent, Qt::AlignLeft | Qt::AlignVCenter, metrics.elidedText(getTitleContent(), Qt::ElideRight, textRectWidth)); painter.restore(); } void modifyScheduleItem::drawScheduleColorLine(QPainter &painter) { painter.save(); QRect rect(this->width() - m_TItleRightMargin, 0, 2, this->height()); painter.setPen(Qt::NoPen); painter.setBrush(ScheduleColor()); painter.drawRect(rect); painter.restore(); } void modifyScheduleItem::drawTime(QPainter &painter) { painter.save(); QRect rect(this->width() - 75, 10 - m_DateTimeOffset, 65, 17); painter.setPen(getDateTimeColor()); painter.setFont(getDateTimeFont()); QString timestr; if (scheduleInfo()->allDay()) { timestr = ALL_DAY; } else { timestr = QString("%1-%2").arg(getScheduleBeginTime().toString("hh:mm")).arg(getScheduleEndTime().toString("hh:mm")); } painter.drawText(rect, Qt::AlignLeft | Qt::AlignTop, timestr); painter.restore(); } void modifyScheduleItem::drawDate(QPainter &painter) { painter.save(); QRect rect(this->width() - 75, 27 - m_DateTimeOffset, 65, 17); painter.setPen(getDateTimeColor()); painter.setFont(getDateTimeFont()); painter.drawText(rect, Qt::AlignLeft | Qt::AlignTop, getShowDate().toString("yyyy/MM/dd")); painter.restore(); } void modifyScheduleItem::setLineColor(const QColor &LineColor) { m_LineColor = LineColor; } void modifyScheduleItem::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { emit signalSendSelectScheduleIndex(getIndex()); } } QColor modifyScheduleItem::LineColor() const { return m_LineColor; } void modifyScheduleItem::setTheMe(const int type) { ItemWidget::setTheMe(type); QColor lineColor; if (type == 0 || type == 1) { lineColor = QColor("#000000"); lineColor.setAlphaF(0.1); } else { //设置深色主题分割线颜色 lineColor = QColor("#FFFFFF"); lineColor.setAlphaF(0.1); } setLineColor(lineColor); } dde-calendar-5.14.13/schedule-plugin/src/widget/modifyscheduleitem.h000066400000000000000000000023361473346337000254040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MODIFYSCHEDULEITEM_H #define MODIFYSCHEDULEITEM_H #include "itemwidget.h" class modifyScheduleItem : public ItemWidget { Q_OBJECT public: explicit modifyScheduleItem(QWidget *parent = nullptr); int getIndex() const; void setIndex(int Index); protected: QColor LineColor() const; void setLineColor(const QColor &LineColor); protected: void mousePressEvent(QMouseEvent *event) override; private: void setTheMe(const int type) override; void DrawItem(QPainter &painter) override; void drawIndex(QPainter &painter); void drawLine(QPainter &painter); void drawTitleContent(QPainter &painter); void drawScheduleColorLine(QPainter &painter); void drawTime(QPainter &painter); void drawDate(QPainter &painter); signals: void signalSendSelectScheduleIndex(int index); public slots: private: int m_Index = 1; const int m_IndexWidth {16}; const int m_IndexX {14}; QColor m_LineColor {"#000000"}; const int m_TitleX {51}; const int m_TItleRightMargin {97}; const int m_DateTimeOffset = 3; }; #endif // MODIFYSCHEDULEITEM_H dde-calendar-5.14.13/schedule-plugin/src/widget/opencalendarwidget.cpp000066400000000000000000000034001473346337000257040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "opencalendarwidget.h" #include #include #include #include "../globaldef.h" #include OpenCalendarWidget::OpenCalendarWidget(QWidget *parent) : DWidget(parent) { setFixedHeight(OPENCALENDAR_WDIGET_HEIGHT); } void OpenCalendarWidget::paintEvent(QPaintEvent *event) { Q_UNUSED(event); setTheMe(Dtk::Gui::DGuiApplicationHelper::instance()->themeType()); QPainter painter(this); painter.setPen(TitleColor()); painter.setFont(TitleFont()); painter.drawText(this->rect(), Qt::AlignLeft | Qt::AlignVCenter, QString(OPENCALENDAR_WIDGET_TITLE).arg(m_ScheduleCount)); } void OpenCalendarWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { QProcess proc; proc.startDetached(PROCESS_OPEN_CALENDAR_PROGRAM, QString(PROCESS_OPEN_CALENDAR_ARGUMENTS).split(" ")); } } QColor OpenCalendarWidget::TitleColor() const { return m_TitleColor; } void OpenCalendarWidget::setTitleColor(const QColor &TitleColor) { m_TitleColor = TitleColor; } QFont OpenCalendarWidget::TitleFont() { m_TitleFont.setPixelSize(12); return m_TitleFont; } void OpenCalendarWidget::setTheMe(const int type) { QColor titleColor; if (type == 0 || type == 1) { titleColor.setRgb(0, 0, 0); titleColor.setAlphaF(0.4); } else { titleColor.setRgb(255, 255, 255); titleColor.setAlphaF(0.4); } setTitleColor(titleColor); } void OpenCalendarWidget::setScheduleCount(int ScheduleCount) { m_ScheduleCount = ScheduleCount; update(); } dde-calendar-5.14.13/schedule-plugin/src/widget/opencalendarwidget.h000066400000000000000000000015151473346337000253560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef OPENCALENDARWIDGET_H #define OPENCALENDARWIDGET_H #include #include #include DWIDGET_USE_NAMESPACE class OpenCalendarWidget : public DWidget { Q_OBJECT public: explicit OpenCalendarWidget(QWidget *parent = nullptr); void setScheduleCount(int ScheduleCount); QFont TitleFont(); QColor TitleColor() const; void setTitleColor(const QColor &TitleColor); private: void setTheMe(const int type); protected: void paintEvent(QPaintEvent *event) override; void mousePressEvent(QMouseEvent *event) override; signals: public slots: private: int m_ScheduleCount; QColor m_TitleColor; QFont m_TitleFont; }; #endif // OPENCALENDARWIDGET_H dde-calendar-5.14.13/schedule-plugin/src/widget/repeatschedulewidget.cpp000066400000000000000000000047021473346337000262540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "repeatschedulewidget.h" #include "scheduleitemwidget.h" #include "buttonwidget.h" #include "../globaldef.h" repeatScheduleWidget::repeatScheduleWidget(repeatScheduleWidget::Operation_type operation, repeatScheduleWidget::Widget_type widgetype, bool tocreateBtn, QWidget *parent) : IconDFrame(parent) , m_OperationType(operation) , m_WidgetType(widgetype) , m_createBtnBool(tocreateBtn) { } void repeatScheduleWidget::setSchedule(const DSchedule::Ptr &info) { m_scheduleInfo.clear(); m_scheduleInfo.append(info); initUI(); } void repeatScheduleWidget::initUI() { m_scheduleitemwidget = new scheduleitemwidget(this); QVBoxLayout *mainlayout = new QVBoxLayout(); m_scheduleitemwidget->setScheduleDtailInfo(m_scheduleInfo); m_scheduleitemwidget->addscheduleitem(); mainlayout->addWidget(m_scheduleitemwidget); if (m_createBtnBool) { buttonwidget *button = new buttonwidget(this); m_buttonCount = 0; switch (m_WidgetType) { case Widget_Confirm: { button->addbutton(CANCEL_BUTTON_STRING); if (m_OperationType == Operation_Cancel) { button->addbutton(CONFIRM_BUTTON_STRING, true, buttonwidget::ButtonWarning); } else { button->addbutton(CONFIRM_BUTTON_STRING, true, buttonwidget::ButtonRecommend); } } break; default: { if (m_OperationType == Operation_Cancel) { button->addbutton(CANCEL_BUTTON_STRING); button->addbutton(DELETEALL_BUTTON_STRING); button->addbutton(ONLY_DELETE_THIS_BUTTON_STRING, true, buttonwidget::ButtonWarning); } else { button->addbutton(CANCEL_BUTTON_STRING); button->addbutton(CHANGE_ALL_BUTTON_STRING); button->addbutton(CHANGE_ONLYL_BUTTON_STRING, true, buttonwidget::ButtonRecommend); } } break; } m_buttonCount = button->buttonCount(); connect(button, &buttonwidget::buttonClicked, this, &repeatScheduleWidget::slotButtonCheckNum); mainlayout->addSpacing(4); mainlayout->addWidget(button); } setCenterLayout(mainlayout); } void repeatScheduleWidget::slotButtonCheckNum(int index, const QString &text) { emit signalButtonCheckNum(index, text, m_buttonCount); } dde-calendar-5.14.13/schedule-plugin/src/widget/repeatschedulewidget.h000066400000000000000000000022701473346337000257170ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef REPEATSCHEDULEWIDGET_H #define REPEATSCHEDULEWIDGET_H #include "icondframe.h" #include "dschedule.h" class scheduleitemwidget; class repeatScheduleWidget : public IconDFrame { Q_OBJECT public: enum Operation_type { Operation_Cancel, Operation_Change }; enum Widget_type { Widget_Repeat, Widget_Confirm }; public: explicit repeatScheduleWidget(Operation_type operation, Widget_type widgetype, bool tocreateBtn = true, QWidget *parent = nullptr); void setSchedule(const DSchedule::Ptr &info); private: void initUI(); signals: void signalButtonCheckNum(int index, const QString &text, const int buttonCount); public slots: void slotButtonCheckNum(int index, const QString &text); private: scheduleitemwidget *m_scheduleitemwidget {nullptr}; DSchedule::List m_scheduleInfo; Operation_type m_OperationType {Operation_Cancel}; Widget_type m_WidgetType {Widget_Confirm}; int m_buttonCount {0}; bool m_createBtnBool {true}; }; #endif // REPEATSCHEDULEWIDGET_H dde-calendar-5.14.13/schedule-plugin/src/widget/scheduleitemwidget.cpp000066400000000000000000000123221473346337000257270ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduleitemwidget.h" #include "../globaldef.h" #include #include scheduleitemwidget::scheduleitemwidget(QWidget *parent) : DWidget(parent) { } scheduleitemwidget::~scheduleitemwidget() { } void scheduleitemwidget::setScheduleDtailInfo(const DSchedule::List &scheduleInfo) { m_scheduleInfo = scheduleInfo; sortScheduleWithTime(); } void scheduleitemwidget::addscheduleitem() { QVBoxLayout *mainlayout = new QVBoxLayout(); scheduleitemdate *m_scheduleitemdate = new scheduleitemdate(); mainlayout->setContentsMargins(0, 0, 0, 0); mainlayout->addWidget(m_scheduleitemdate); mainlayout->addSpacing(10); mainlayout->setSpacing(1); if (m_scheduleInfo.count() == 1) { //单个日程 scheduleitem *m_scheduleitem = new scheduleitem(); connect(m_scheduleitem, &scheduleitem::signalItemPress, this, &scheduleitemwidget::signalItemPress); m_scheduleitem->setPositon(ItemWidget::ItemOnly); m_scheduleitemdate->setScheduleDtailInfo(m_scheduleInfo.first()); m_scheduleitem->setScheduleInfo(m_scheduleInfo.first()); mainlayout->addWidget(m_scheduleitem); } else if (m_scheduleInfo.count() > 1) { //多个日程 for (int i = 0; i < m_scheduleInfo.count(); i++) { scheduleitem *m_scheduleitem = new scheduleitem(); connect(m_scheduleitem, &scheduleitem::signalItemPress, this, &scheduleitemwidget::signalItemPress); if (i == 0) { m_scheduleitem->setPositon(ItemWidget::ItemTop); } else if (i == m_scheduleInfo.count() - 1) { m_scheduleitem->setPositon(ItemWidget::ItemBottom); } else { m_scheduleitem->setPositon(ItemWidget::ItemMiddle); } m_scheduleitemdate->setScheduleDtailInfo(m_scheduleInfo[i]); m_scheduleitem->setScheduleInfo(m_scheduleInfo[i]); mainlayout->addWidget(m_scheduleitem); } } this->setLayout(mainlayout); } void scheduleitemwidget::sortScheduleWithTime() { for (int i = 0; i < m_scheduleInfo.count(); i++) { for (int j = 0; j < m_scheduleInfo.count() - i - 1; j++) { if (m_scheduleInfo[j]->dtStart() > m_scheduleInfo[j + 1]->dtStart()) std::swap(m_scheduleInfo[j], m_scheduleInfo[j + 1]); } } } scheduleitem::scheduleitem(QWidget *parent) : ItemWidget(parent) { setFixedHeight(36); } void scheduleitem::DrawItem(QPainter &painter) { drawScheduleColorLine(painter); drawTime(painter); drawDetails(painter); } void scheduleitem::drawScheduleColorLine(QPainter &painter) { painter.save(); QRect rect(m_LineRightMargin, 0, 2, this->height()); painter.setPen(Qt::NoPen); painter.setBrush(ScheduleColor()); painter.drawRect(rect); painter.restore(); } void scheduleitem::drawTime(QPainter &painter) { painter.save(); QRect rect(m_timeLeftMargin, 0, 82, this->rect().height()); painter.setPen(getDateTimeColor()); painter.setFont(getDateTimeFont()); QString timestr; if (scheduleInfo()->allDay()) { timestr = ALL_DAY; } else { timestr = QString("%1-%2").arg(scheduleInfo()->dtStart().toString("hh:mm")).arg(scheduleInfo()->dtEnd().toString("hh:mm")); } painter.drawText(rect, Qt::AlignLeft | Qt::AlignVCenter, timestr); painter.restore(); } void scheduleitem::drawDetails(QPainter &painter) { painter.save(); QRect rect(m_DetailsRightMargin + m_LineRightMargin + 2, 0, m_DetailsWidth, this->rect().height()); painter.setPen(getTitleColor()); painter.setFont(getTitleFont()); QFontMetrics metrics(getTitleFont()); painter.drawText(rect, Qt::AlignLeft | Qt::AlignVCenter, metrics.elidedText(getTitleContent(), Qt::ElideRight, rect.width() - m_EllipsisWidth)); painter.restore(); } void scheduleitem::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { emit signalItemPress(getScheduleInfo()); } } scheduleitemdate::scheduleitemdate(QWidget *parent) : QWidget(parent) { setFixedHeight(20); } void scheduleitemdate::setScheduleDtailInfo(const DSchedule::Ptr &scheduelDtailInfo) { m_scheduleDtailInfo = scheduelDtailInfo; } QColor scheduleitemdate::DetailsColor() { int type = DGuiApplicationHelper::instance()->themeType(); if (type == 0 || type == 1) { m_DateTimeColor.setRgb(0, 0, 0); } else { m_DateTimeColor.setRgb(255, 255, 255); } return m_DateTimeColor; } void scheduleitemdate::paintEvent(QPaintEvent *event) { QWidget::paintEvent(event); QPainter painter(this); painter.save(); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(DetailsColor()); painter.drawText(QRect(m_LeftMargin, 0, this->rect().width(), 20), Qt::AlignLeft | Qt::AlignVCenter, QString("%1 %2").arg(m_scheduleDtailInfo->dtStart().date().toString("yyyy年MM月dd日")).arg(m_scheduleDtailInfo->dtStart().toString("dddd"))); painter.restore(); } dde-calendar-5.14.13/schedule-plugin/src/widget/scheduleitemwidget.h000066400000000000000000000035211473346337000253750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CREATSHCEDULEITEM_H #define CREATSHCEDULEITEM_H #include "itemwidget.h" #include "dschedule.h" #include class scheduleitemdate; class scheduleitem; class scheduleitemwidget : public DWidget { Q_OBJECT public: explicit scheduleitemwidget(QWidget *parent = nullptr); ~scheduleitemwidget(); void setScheduleDtailInfo(const DSchedule::List &scheduleInfo); void addscheduleitem(); signals: void signalItemPress(const DSchedule::Ptr &info); private: void sortScheduleWithTime(); private: DSchedule::Ptr m_scheduleDtailInfo; DSchedule::List m_scheduleInfo; }; class scheduleitem : public ItemWidget { Q_OBJECT public: explicit scheduleitem(QWidget *parent = nullptr); private: void DrawItem(QPainter &painter) override; void drawScheduleColorLine(QPainter &painter); void drawTime(QPainter &painter); void drawDetails(QPainter &painter); protected: void mousePressEvent(QMouseEvent *event) override; signals: void signalItemPress(const DSchedule::Ptr &info); private: const int m_timeLeftMargin = 13; const int m_timeTopMargin = 9; const int m_LineRightMargin = 84; const int m_DetailsRightMargin = 7; const int m_DetailsTopMargin = 7; const int m_DetailsWidth = 256; const int m_EllipsisWidth = 8; }; class scheduleitemdate : public QWidget { Q_OBJECT public: explicit scheduleitemdate(QWidget *parent = nullptr); void setScheduleDtailInfo(const DSchedule::Ptr &scheduelDtailInfo); QColor DetailsColor(); protected: void paintEvent(QPaintEvent *event); private: DSchedule::Ptr m_scheduleDtailInfo; QColor m_DateTimeColor; const int m_LeftMargin = 13; }; #endif // CREATSHCEDULEITEM_H dde-calendar-5.14.13/schedule-plugin/src/widget/schedulelistwidget.cpp000066400000000000000000000032261473346337000257470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulelistwidget.h" #include #include "modifyscheduleitem.h" #include "opencalendarwidget.h" #include "../globaldef.h" scheduleListWidget::scheduleListWidget(QWidget *parent) : IconDFrame(parent) { } void scheduleListWidget::setScheduleInfoVector(const DSchedule::List &ScheduleInfoVector) { m_ScheduleInfoVector = ScheduleInfoVector; updateUI(); } void scheduleListWidget::updateUI() { QVBoxLayout *layout = new QVBoxLayout(); layout->setSpacing(1); bool showOpenWidget = m_ScheduleInfoVector.size() > ITEM_SHOW_NUM; const int showcount = showOpenWidget ? ITEM_SHOW_NUM : m_ScheduleInfoVector.size(); for (int i = 0; i < showcount; ++i) { modifyScheduleItem *item = new modifyScheduleItem(); if (i == 0) { item->setPositon(ItemWidget::ItemTop); } else if (i == showcount - 1) { item->setPositon(ItemWidget::ItemBottom); } else { item->setPositon(ItemWidget::ItemMiddle); } item->setIndex(i + 1); item->setScheduleInfo(m_ScheduleInfoVector[i]); connect(item, &modifyScheduleItem::signalSendSelectScheduleIndex, this, &scheduleListWidget::signalSelectScheduleIndex); layout->addWidget(item); } if (showOpenWidget) { OpenCalendarWidget *openWidget = new OpenCalendarWidget(); openWidget->setScheduleCount(m_ScheduleInfoVector.size()); layout->addSpacing(6); layout->addWidget(openWidget); } this->setCenterLayout(layout); } dde-calendar-5.14.13/schedule-plugin/src/widget/schedulelistwidget.h000066400000000000000000000012061473346337000254100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULELISTWIDGET_H #define SCHEDULELISTWIDGET_H #include #include "dschedule.h" #include "icondframe.h" DWIDGET_USE_NAMESPACE class scheduleListWidget : public IconDFrame { Q_OBJECT public: explicit scheduleListWidget(QWidget *parent = nullptr); void setScheduleInfoVector(const DSchedule::List &ScheduleInfoVector); void updateUI(); signals: void signalSelectScheduleIndex(int index); private: DSchedule::List m_ScheduleInfoVector; }; #endif // SCHEDULELISTWIDGET_H dde-calendar-5.14.13/schedule-plugin/src/widget/viewschedulewidget.cpp000066400000000000000000000060421473346337000257450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "viewschedulewidget.h" #include "opencalendarwidget.h" #include "dscheduledatamanager.h" #include "../globaldef.h" #include #include #include #include viewschedulewidget::viewschedulewidget(QWidget *parent) : IconDFrame(parent) { } viewschedulewidget::~viewschedulewidget() { } void viewschedulewidget::setScheduleDateRangeInfo(const DSchedule::Map &scheduleDateInfo) { m_scheduleDateInfo = scheduleDateInfo; } void viewschedulewidget::viewScheduleInfoShow(const DSchedule::Map &showSchedule) { QVBoxLayout *mainlayout = new QVBoxLayout(); mainlayout->setSpacing(10); int scheduleNum = 0; DSchedule::List scheduleInfo; DSchedule::Map::const_iterator iter = showSchedule.constBegin(); for (; iter != showSchedule.constEnd(); ++iter) { for (int i = 0; i < iter.value().size(); ++i) { scheduleInfo.append(iter.value().at(i)); scheduleNum++; if (scheduleNum == 10) break; } scheduleitemwidget *item = new scheduleitemwidget(); connect(item, &scheduleitemwidget::signalItemPress, this, &viewschedulewidget::slotItemPress); item->setScheduleDtailInfo(scheduleInfo); item->addscheduleitem(); mainlayout->addWidget(item); scheduleInfo.clear(); if (scheduleNum == 10) break; } // int scheduleCount = getScheduleNum(showSchedule); if (scheduleCount > 10) { OpenCalendarWidget *openWidget = new OpenCalendarWidget(); openWidget->setScheduleCount(scheduleCount); mainlayout->addWidget(openWidget); } setCenterLayout(mainlayout); } int viewschedulewidget::getScheduleNum(DSchedule::Map scheduleList) { int scheduleTotalNum = 0; DSchedule::Map::const_iterator iter = scheduleList.constBegin(); for (; iter != scheduleList.constEnd(); ++iter) { scheduleTotalNum += iter.value().size(); } return scheduleTotalNum; } void viewschedulewidget::setQueryBeginDateTime(QDateTime begindatetime) { m_beginDateTime = begindatetime; } void viewschedulewidget::setQueryEndDateTime(QDateTime enddatetime) { m_endDateTime = enddatetime; } void viewschedulewidget::slotItemPress(const DSchedule::Ptr &info) { QProcess proc; proc.startDetached(PROCESS_OPEN_CALENDAR_PROGRAM, QString(PROCESS_OPEN_CALENDAR_ARGUMENTS).split(" ")); QThread::msleep(750); QString schedulestr; DSchedule::toJsonString(info, schedulestr); QDBusMessage message = QDBusMessage::createMethodCall(DBUS_CALENDAR_SERVICE, DBUS_CALENDAR_PATCH, DBUS_CALENDAR_INTFACE, "OpenSchedule"); message << schedulestr; //发送消息 QDBusMessage response = QDBusConnection::sessionBus().call(message); } dde-calendar-5.14.13/schedule-plugin/src/widget/viewschedulewidget.h000066400000000000000000000022311473346337000254060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef VIEWSCHEDULEWIDGET_H #define VIEWSCHEDULEWIDGET_H #include "icondframe.h" #include "dschedule.h" #include "scheduleitemwidget.h" #include class viewschedulewidget : public IconDFrame { Q_OBJECT public: explicit viewschedulewidget(QWidget *parent = nullptr); ~viewschedulewidget(); void setScheduleDateRangeInfo(const DSchedule::Map &scheduleDateInfo); void viewScheduleInfoShow(const DSchedule::Map &showSchedule); int getScheduleNum(DSchedule::Map scheduleList); void setQueryBeginDateTime(QDateTime begindatetime); void setQueryEndDateTime(QDateTime enddatetime); /** * @brief getNextScheduleInfo 获取下一个日程 * @return 下一个日程信息 */ DSchedule::Map getNextScheduleInfo(); public slots: void slotItemPress(const DSchedule::Ptr &info); private: DSchedule::List m_scheduleInfo; DSchedule::Map m_scheduleDateInfo; DSchedule::Map m_showdate; QDateTime m_beginDateTime; QDateTime m_endDateTime; }; #endif // QUERYSCHEDULEWIDGET_H dde-calendar-5.14.13/tests/000077500000000000000000000000001473346337000153445ustar00rootroot00000000000000dde-calendar-5.14.13/tests/CMakeLists.txt000066400000000000000000000011741473346337000201070ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) project(dde-calendar-test) set(ASAN_CMAKE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/cmake) ADD_SUBDIRECTORY(dde-calendar-client-test) ADD_SUBDIRECTORY(dde-calendar-service-test) include_directories(third-party_stub) add_custom_target(test) add_custom_command(TARGET test COMMAND echo " =================== CREAT LCOV REPROT BEGIN ==================== " COMMAND ${CMAKE_BINARY_DIR}/tests/dde-calendar-client-test/dde-calendar-test COMMAND ${CMAKE_BINARY_DIR}/tests/dde-calendar-service-test/dde-calendar-service-test COMMAND echo " =================== TEST END ==================== " ) dde-calendar-5.14.13/tests/cmake-lcov-test.sh000066400000000000000000000013361473346337000207010ustar00rootroot00000000000000utdir=build-ut rm -r $utdir rm -r ../$utdir mkdir ../$utdir cd ../$utdir cmake -DCMAKE_BUILD_TYPE=Debug .. make -j16 ./tests/dde-calendar-client-test/dde-calendar-test --gtest_output=xml:./report/report_calendar_client.xml ./tests/dde-calendar-service-test/dde-calendar-service-test --gtest_output=xml:./report/report_calendar_service.xml workdir=$(cd ../$(dirname $0)/$utdir; pwd) mkdir -p report lcov -d $workdir -c -o ./report/coverage.info lcov --extract ./report/coverage.info '*/calendar-basicstruct/*' '*/calendar-client/*' '*/calendar-service/*' '*/schedule-plugin/*' -o ./report/coverage.info lcov --remove ./report/coverage.info '*/tests/*' -o ./report/coverage.info genhtml -o ./report ./report/coverage.info exit 0dde-calendar-5.14.13/tests/cmake/000077500000000000000000000000001473346337000164245ustar00rootroot00000000000000dde-calendar-5.14.13/tests/cmake/asan.cmake000066400000000000000000000012621473346337000203510ustar00rootroot00000000000000set(CMAKE_SAFETYTEST "${CMAKE_SAFETYTEST_ARG}") if(CMAKE_SAFETYTEST STREQUAL "") set(CMAKE_SAFETYTEST "CMAKE_SAFETYTEST_ARG_OFF") endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D${CMAKE_SAFETYTEST}") if(CMAKE_SAFETYTEST STREQUAL "CMAKE_SAFETYTEST_ARG_ON") #安全测试选项 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -fsanitize=undefined,address -O2") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=undefined,address -O2") endif() #安全编译参数 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong -z noexecstack -pie -fPIC -z lazy") # 设置添加gocv相关信息的输出 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fprofile-arcs -ftest-coverage") dde-calendar-5.14.13/tests/dde-calendar-client-test/000077500000000000000000000000001473346337000221005ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/CMakeLists.txt000066400000000000000000000054401473346337000246430ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) #common resource names project(dde-calendar-client-test) ADD_COMPILE_OPTIONS(-fno-access-control) set(APP_CLIENT_DIR "${CMAKE_SOURCE_DIR}/calendar-client") set(APP_COMMON_DIR "${CMAKE_SOURCE_DIR}/calendar-common") set(APP_3PARTY_DIR "${CMAKE_SOURCE_DIR}/3rdparty/kcalendarcore") #set(APP_RES_DIR "${APP_CLIENT_DIR}/assets") #set(APP_QRC "${APP_RES_DIR}/resources.qrc") set(APP_BIN_NAME "dde-calendar-test") set(PROJECT_NAME_TEST ${APP_BIN_NAME}) find_package(PkgConfig REQUIRED) find_package(DtkCore REQUIRED) find_package(Qt5Gui REQUIRED) find_package(Qt5Widgets REQUIRED) find_package(Qt5DBus REQUIRED) find_package(Qt5Svg REQUIRED) find_package(DtkWidget REQUIRED) find_package(DtkGui REQUIRED) find_package(GTest REQUIRED) find_package(Qt5Test REQUIRED) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--as-needed -fPIE") set(CMAKE_EXE_LINKER_FLAGS "-pie") include_directories(${APP_CLIENT_DIR}/src) SUBDIRLIST(all_src ${APP_CLIENT_DIR}/src) include_directories(${APP_COMMON_DIR}/src) SUBDIRLIST(all_src ${APP_COMMON_DIR}/src) include_directories(${APP_3PARTY_DIR}/src) SUBDIRLIST(all_src ${APP_3PARTY_DIR}/src) #Include all app own subdirectories foreach(subdir ${all_src}) include_directories(${APP_CLIENT_DIR}/src/${subdir}) include_directories(${APP_COMMON_DIR}/src/${subdir}) include_directories(${APP_COMMON_DIR}/src/${subdir}) endforeach() file(GLOB_RECURSE Calendar_CLIENTSRC ${APP_CLIENT_DIR}/src/*.cpp) file(GLOB_RECURSE Calendar_COMMONSRC ${APP_COMMON_DIR}/src/*.cpp) file(GLOB_RECURSE Calendar_3PARTYSRC ${APP_3PARTY_DIR}/src/*.cpp) include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) list(REMOVE_ITEM Calendar_CLIENTSRC ${APP_CLIENT_DIR}/src/main.cpp) list(REMOVE_ITEM Calendar_COMMONSRC ${APP_COMMON_DIR}/src/main.cpp) list(REMOVE_ITEM Calendar_3PARTYSRC ${APP_3PARTY_DIR}/src/main.cpp) #test SRC SUBDIRLIST(TEST_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src) foreach(subdir ${TEST_SRC}) include_directories(${subdir}) endforeach() file(GLOB_RECURSE Calendar_TEST_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) include_directories(../../calendar-basicstruct/) list(APPEND CMAKE_MODULE_PATH "${ASAN_CMAKE_DIR}") include(asan) # Tell CMake to create the executable add_executable(${APP_BIN_NAME} ${Calendar_TEST_SRC} ${Calendar_CLIENTSRC} ${Calendar_COMMONSRC} ${Calendar_3PARTYSRC} ${APP_QRC}) target_include_directories(${APP_BIN_NAME} PUBLIC ${DtkWidget_INCLUDE_DIRS} ${OBJECT_BINARY_DIR}) target_link_libraries(${APP_BIN_NAME} ${DtkWidget_LIBRARIES} ${DtkCore_LIBRARIES} ${DtkGui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Svg_LIBRARIES} ${Qt5DBus_LIBRARIES} ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} Qt5::Test pthread basestruct ) dde-calendar-5.14.13/tests/dde-calendar-client-test/src/000077500000000000000000000000001473346337000226675ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/client_main.cpp000066400000000000000000000011171473346337000256550ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "gtest/gtest.h" #if defined(CMAKE_SAFETYTEST_ARG_ON) #include #endif #include DWIDGET_USE_NAMESPACE int main(int argc, char **argv) { qputenv("QT_QPA_PLATFORM", "offscreen"); DApplication application(argc, argv); ::testing::InitGoogleTest(&argc, argv); int ret = RUN_ALL_TESTS(); #if defined(CMAKE_SAFETYTEST_ARG_ON) __sanitizer_set_report_path("asan.log"); #endif return ret; } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/cscheduledbusstub.cpp000066400000000000000000000027061473346337000271130ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "cscheduledbusstub.h" //#include "cscheduledbus.h" //#include //qint64 CreateJob_stub(void *obj, const ScheduleDataInfo &info) //{ // Q_UNUSED(obj) // Q_UNUSED(info) // return 1; //} //bool UpdateJob_stub(void *obj, const ScheduleDataInfo &info) //{ // Q_UNUSED(obj) // Q_UNUSED(info) // return true; //} //bool DeleteJob_stub(void *obj, qint64 jobId) //{ // Q_UNUSED(obj) // Q_UNUSED(jobId) // return true; //} //bool GetJob_stub(void *obj, qint64 jobId, ScheduleDataInfo &out) //{ // Q_UNUSED(obj) // Q_UNUSED(jobId) // Q_UNUSED(out) // return true; //} //bool QueryJobs_stub(void *obj, QString key, QDateTime starttime, QDateTime endtime, QMap> &out) //{ // Q_UNUSED(obj) // Q_UNUSED(key) // Q_UNUSED(starttime) // Q_UNUSED(endtime) // Q_UNUSED(out) // return true; //} //void cscheduleDbusStub(Stub &stub) //{ // stub.set(ADDR(CScheduleDBus, CreateJob), CreateJob_stub); // stub.set(ADDR(CScheduleDBus, UpdateJob), UpdateJob_stub); // stub.set(ADDR(CScheduleDBus, DeleteJob), DeleteJob_stub); // stub.set(ADDR(CScheduleDBus, GetJob), GetJob_stub); // stub.set((bool (CScheduleDBus::*)(QString, QDateTime, QDateTime, QMap> &))ADDR(CScheduleDBus, QueryJobs), QueryJobs_stub); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/cscheduledbusstub.h000066400000000000000000000004431473346337000265540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSCHEDULEDBUSSTUB_H #define CSCHEDULEDBUSSTUB_H #include "../third-party_stub/stub.h" void cscheduleDbusStub(Stub &stub); #endif // CSCHEDULEDBUSSTUB_Hdde-calendar-5.14.13/tests/dde-calendar-client-test/src/dialog_stub.cpp000066400000000000000000000012611473346337000256670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dialog_stub.h" #include "dialog/dcalendarddialog.h" #include "dialog/myscheduleview.h" #include int calendarDDialogExecReturn = 0; int calendar_DDialog_Exec_stub(void *obj) { Q_UNUSED(obj) return calendarDDialogExecReturn; } void calendarDDialogExecStub(Stub &stub) { typedef int (*fptr)(DDialog *); fptr A_foo = (fptr)(&DDialog::exec); stub.set(A_foo, calendar_DDialog_Exec_stub); typedef int (*fptr2)(QDialog *); fptr2 A_foo2 = (fptr2)(&QDialog::exec); stub.set(A_foo2, calendar_DDialog_Exec_stub); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/dialog_stub.h000066400000000000000000000006261473346337000253400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DIALOG_STUB_H #define DIALOG_STUB_H #include "../third-party_stub/stub.h" //DCalendarDDialog //对话框 exec 打桩 int calendar_DDialog_Exec_stub(void *obj); void calendarDDialogExecStub(Stub &stub); extern int calendarDDialogExecReturn; #endif // DIALOG_STUB_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_configsettings.cpp000066400000000000000000000015421473346337000274620ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_configsettings.h" test_configsettings::test_configsettings() { } test_configsettings::~test_configsettings() { } void test_configsettings::SetUp() { conf = CConfigSettings::getInstance(); } void test_configsettings::TearDown() { } void stub_Handle() { } void setValue_stub(void *obj, const QString &key, const QVariant &value) { Q_UNUSED(obj) Q_UNUSED(key) Q_UNUSED(value)} //void CConfigSettings::sync() TEST_F(test_configsettings, sync) { Stub stub; stub.set(ADDR(CConfigSettings, sync), stub_Handle); conf->sync(); } TEST_F(test_configsettings, setOption) { Stub stub; stub.set(ADDR(QSettings, setValue), setValue_stub); conf->setOption("base.state", 0); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_configsettings.h000066400000000000000000000010761473346337000271310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CONFIGSETTINGS_H #define TEST_CONFIGSETTINGS_H #include "configsettings.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include class test_configsettings : public QObject, public::testing::Test { public: test_configsettings(); ~test_configsettings(); void SetUp() override; void TearDown() override; protected: CConfigSettings *conf = nullptr; }; #endif // TEST_CONFIGSETTINGS_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_cscheduleoperation.cpp000066400000000000000000000145231473346337000303170ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cscheduleoperation.h" //#include "cscheduledbus.h" //#include "dialog/dcalendarddialog.h" //#include "schedulectrldlg.h" //#include "dialog_stub.h" //#include "cscheduledbusstub.h" //test_cscheduleoperation::test_cscheduleoperation() //{ //} //test_cscheduleoperation::~test_cscheduleoperation() //{ //} //namespace ScheduleTestBtnNum { //static int button_num = 0; //} //int clickButton_stub(void *obj) //{ // Q_UNUSED(obj) // return ScheduleTestBtnNum::button_num; //} //void test_cscheduleoperation::SetUp() //{ // cscheduleDbusStub(stub); //} //void test_cscheduleoperation::TearDown() //{ //} //TEST_F(test_cscheduleoperation, createSchedule) //{ // ScheduleDataInfo info; // operation.createSchedule(info); //} //TEST_F(test_cscheduleoperation, changeSchedule) //{ // calendarDDialogExecStub(stub); // stub.set(ADDR(CScheduleCtrlDlg, clickButton), clickButton_stub); // ScheduleDataInfo info; // QDate current = QDate::currentDate(); // info.setBeginDateTime(QDateTime(current, QTime(0, 0, 0))); // info.setEndDateTime(QDateTime(current, QTime(23, 59, 59))); // info.setTitleName(tr("New Event")); // info.setAllDay(true); // info.setRemindData(RemindData(1, QTime(9, 0))); // info.setID(0); // info.setRecurID(0); // ScheduleDataInfo newinfo = info; // newinfo.setTitleName(tr("test")); // newinfo.setAllDay(false); // info.getRepetitionRule().setRuleId(RepetitionRule::RRule_NONE); // ScheduleTestBtnNum::button_num = 0; // operation.changeSchedule(newinfo, info); // ScheduleTestBtnNum::button_num = 1; // operation.changeSchedule(newinfo, info); // newinfo.setAllDay(true); // operation.changeSchedule(newinfo, info); // ScheduleTestBtnNum::button_num = 0; // newinfo.getRepetitionRule().setRuleId(RepetitionRule::RRule_EVEDAY); // operation.changeSchedule(newinfo, info); // ScheduleTestBtnNum::button_num = 1; // operation.changeSchedule(newinfo, info); // info.getRepetitionRule().setRuleId(RepetitionRule::RRule_EVEDAY); // operation.changeSchedule(newinfo, info); // ScheduleTestBtnNum::button_num = 0; // operation.changeSchedule(newinfo, info); // ScheduleTestBtnNum::button_num = 2; // operation.changeSchedule(newinfo, info); // newinfo.setRecurID(2); // ScheduleTestBtnNum::button_num = 0; // operation.changeSchedule(newinfo, info); // ScheduleTestBtnNum::button_num = 1; // operation.changeSchedule(newinfo, info); // ScheduleTestBtnNum::button_num = 2; // operation.changeSchedule(newinfo, info); //} //TEST_F(test_cscheduleoperation, changeSchedule_01) //{ // calendarDDialogExecStub(stub); // ScheduleDataInfo oldInfo; // ScheduleDataInfo newInfo; // oldInfo.setAllDay(true); // oldInfo.m_ScheduleRRule.setRuleId(RepetitionRule::RRule_NONE); // newInfo.setAllDay(false); // newInfo.m_ScheduleRRule.setRuleId(RepetitionRule::RRule_EVEDAY); // operation.changeSchedule(oldInfo, newInfo); //} //TEST_F(test_cscheduleoperation, deleteSchedule) //{ // calendarDDialogExecStub(stub); // stub.set(ADDR(CScheduleCtrlDlg, clickButton), clickButton_stub); // ScheduleDataInfo info; // QDate current = QDate::currentDate(); // info.setBeginDateTime(QDateTime(current, QTime(0, 0, 0))); // info.setEndDateTime(QDateTime(current, QTime(23, 59, 59))); // info.setTitleName(tr("New Event")); // info.setAllDay(true); // info.setRemindData(RemindData(1, QTime(9, 0))); // info.setID(0); // info.setRecurID(0); // ScheduleTestBtnNum::button_num = 0; // operation.deleteSchedule(info); // ScheduleTestBtnNum::button_num = 1; // operation.deleteSchedule(info); // //删除重复日程 // info.getRepetitionRule().setRuleId(RepetitionRule::RRule_EVEDAY); // ScheduleTestBtnNum::button_num = 0; // operation.deleteSchedule(info); // ScheduleTestBtnNum::button_num = 1; // operation.deleteSchedule(info); // ScheduleTestBtnNum::button_num = 2; // operation.deleteSchedule(info); // info.setRecurID(2); // ScheduleTestBtnNum::button_num = 0; // operation.deleteSchedule(info); // ScheduleTestBtnNum::button_num = 1; // operation.deleteSchedule(info); // ScheduleTestBtnNum::button_num = 2; // operation.deleteSchedule(info); //} //TEST_F(test_cscheduleoperation, queryScheduleStr) //{ // QDateTime currenttime = QDateTime::currentDateTime(); // operation.queryScheduleStr("", currenttime, currenttime); //} //TEST_F(test_cscheduleoperation, deleteOnlyInfo_01) //{ // ScheduleDataInfo info; // operation.deleteOnlyInfo(info); //} //TEST_F(test_cscheduleoperation, deleteOnlyInfo_02) //{ // ScheduleDataInfo info; // info.m_ScheduleRRule.setRuleId(RepetitionRule::RRule_EVEDAY); // operation.deleteOnlyInfo(info); //} //TEST_F(test_cscheduleoperation, deleteOnlyInfo_03) //{ // ScheduleDataInfo info; // info.setType(4); // operation.deleteOnlyInfo(info); //} //TEST_F(test_cscheduleoperation, queryScheduleInfo_01) //{ // ScheduleDataInfo info; // QDateTime date; // QMap> map; // operation.queryScheduleInfo("", date, date, map); //} //TEST_F(test_cscheduleoperation, updateJobType_01) //{ // calendarDDialogExecStub(stub); // JobTypeInfo oldInfo(0); // JobTypeInfo newInfo; // operation.updateJobType(oldInfo, newInfo); //} //TEST_F(test_cscheduleoperation, updateJobType_02) //{ // calendarDDialogExecStub(stub); // JobTypeInfo oldInfo(1); // JobTypeInfo newInfo(1); // EXPECT_TRUE(operation.updateJobType(oldInfo, newInfo)); //} //TEST_F(test_cscheduleoperation, updateJobType_03) //{ // calendarDDialogExecStub(stub); // JobTypeInfo oldInfo(1, "", 10); // JobTypeInfo newInfo(0, "", 0); // operation.updateJobType(oldInfo, newInfo); // EXPECT_EQ(oldInfo.getColorTypeNo(), newInfo.getColorTypeNo()); //} //TEST_F(test_cscheduleoperation, updateJobType_04) //{ // calendarDDialogExecStub(stub); // JobTypeInfo oldInfo(1, "", 5); // JobTypeInfo newInfo(0, "", 0); // operation.updateJobType(oldInfo, newInfo); // EXPECT_TRUE(newInfo.getColorTypeNo() != 5); //} //TEST_F(test_cscheduleoperation, updateJobType_05) //{ // calendarDDialogExecStub(stub); // JobTypeInfo oldInfo(1, "", 5); // operation.updateJobType(oldInfo); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_cscheduleoperation.h000066400000000000000000000012001473346337000277500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CSCHEDULEOPERATION_H #define TEST_CSCHEDULEOPERATION_H #include "../third-party_stub/stub.h" #include "scheduleTask/cscheduleoperation.h" #include "gtest/gtest.h" #include class test_cscheduleoperation : public QObject , public ::testing::Test { public: test_cscheduleoperation(); ~test_cscheduleoperation(); void SetUp() override; void TearDown() override; public: CScheduleOperation operation; public: Stub stub; }; #endif // TEST_CSCHEDULEOPERATION_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/000077500000000000000000000000001473346337000264045ustar00rootroot00000000000000test_animationstackedwidget.cpp000066400000000000000000000050351473346337000346150ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_animationstackedwidget.h" test_animationstackedwidget::test_animationstackedwidget() { } test_animationstackedwidget::~test_animationstackedwidget() { } //void AnimationStackedWidget::setDuration(int duration) TEST_F(test_animationstackedwidget, setDuration) { mAnimationStackedWidget->setDuration(400); } //void AnimationStackedWidget::animationFinished() TEST_F(test_animationstackedwidget, animationfinished) { mAnimationStackedWidget->animationFinished(); } //void AnimationStackedWidget::setCurrent(int index) TEST_F(test_animationstackedwidget, setCurrent) { mAnimationStackedWidget->setCurrent(4); } //void AnimationStackedWidget::setPre() TEST_F(test_animationstackedwidget, setPre) { mAnimationStackedWidget->setPre(); } //void AnimationStackedWidget::setNext() TEST_F(test_animationstackedwidget, setNext) { mAnimationStackedWidget->setNext(); } //void AnimationStackedWidget::setCurrentWidget(int &index, int beginWidth) TEST_F(test_animationstackedwidget, setCurrentWidget) { int index = 2; mAnimationStackedWidget->setCurrentWidget(index, 8); } //int AnimationStackedWidget::getBeginValue() TEST_F(test_animationstackedwidget, getBeginValue) { mAnimationStackedWidget->getBeginValue(); } //AnimationStackedWidget::MoveOrientation AnimationStackedWidget::getMoveOrientation(const int currIndex, const int nextIndex) TEST_F(test_animationstackedwidget, getMoveOrientation) { mAnimationStackedWidget->getMoveOrientation(2, 4); } //double AnimationStackedWidget::offset() const TEST_F(test_animationstackedwidget, offset) { mAnimationStackedWidget->offset(); } //void AnimationStackedWidget::setOffset(double offset) TEST_F(test_animationstackedwidget, setOffset) { mAnimationStackedWidget->setOffset(2.0); } TEST_F(test_animationstackedwidget,animationtest) { mAnimationStackedWidget->setCurrentIndex(0); mAnimationStackedWidget->setDuration(250); mAnimationStackedWidget->setCurrent(1); mAnimationStackedWidget->setFixedSize(500, 800); QPixmap pixmap(mAnimationStackedWidget->size()); for (int i = 0; i <10; ++i) { mAnimationStackedWidget->setOffset(i); pixmap = mAnimationStackedWidget->grab(); } mAnimationStackedWidget->setCurrentIndex(1); mAnimationStackedWidget->setCurrent(0); for (int i = 0; i <10; ++i) { mAnimationStackedWidget->setOffset(i); pixmap = mAnimationStackedWidget->grab(); } } test_animationstackedwidget.h000066400000000000000000000020711473346337000342570ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_ANIMATIONSTACKEDWIDGET_H #define TEST_ANIMATIONSTACKEDWIDGET_H #include #include #include "customWidget/animationstackedwidget.h" class test_animationstackedwidget: public::QObject, public::testing::Test { public: test_animationstackedwidget(); ~test_animationstackedwidget(); virtual void SetUp() { mAnimationStackedWidget = new AnimationStackedWidget(); widget1 = new QWidget(mAnimationStackedWidget); widget2 = new QWidget(mAnimationStackedWidget); mAnimationStackedWidget->addWidget(widget1); mAnimationStackedWidget->addWidget(widget2); } virtual void TearDown() { delete mAnimationStackedWidget; mAnimationStackedWidget = nullptr; } protected: AnimationStackedWidget *mAnimationStackedWidget = nullptr; QWidget *widget1 = nullptr; QWidget *widget2 = nullptr; }; #endif // TEST_ANIMATIONSTACKEDWIDGET_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_ccustomtimeedit.cpp000066400000000000000000000026621473346337000333570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_ccustomtimeedit.h" #include #include void test_CCustomTimeEdit::SetUp() { m_timeEdit = new CCustomTimeEdit(); } void test_CCustomTimeEdit::TearDown() { delete m_timeEdit; m_timeEdit = nullptr; } //mouseEventTest TEST_F(test_CCustomTimeEdit, mouseEventTest) { QWidget *widget = new QWidget(); m_timeEdit->setParent(widget); QTest::mousePress(m_timeEdit, Qt::LeftButton); QTest::mouseRelease(m_timeEdit, Qt::LeftButton); QTest::mouseDClick(m_timeEdit, Qt::LeftButton); QTest::mouseRelease(m_timeEdit, Qt::LeftButton); m_timeEdit->setParent(nullptr); delete widget; } TEST_F(test_CCustomTimeEdit,focusInEvent) { QFocusEvent focusEvent_in(QEvent::FocusIn,Qt::FocusReason::ActiveWindowFocusReason); QApplication::sendEvent(m_timeEdit,&focusEvent_in); } TEST_F(test_CCustomTimeEdit,focusOutEvent) { QFocusEvent focusEvent_out( QEvent::FocusOut,Qt::FocusReason::TabFocusReason); QApplication::sendEvent(m_timeEdit,&focusEvent_out); } TEST_F(test_CCustomTimeEdit,keyPressEvent) { QWidget *widget = new QWidget(); m_timeEdit->setParent(widget); QKeyEvent keyevent(QEvent::KeyPress,Qt::Key_Left,Qt::NoModifier); QApplication::sendEvent(m_timeEdit,&keyevent); m_timeEdit->setParent(nullptr); delete widget; } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_ccustomtimeedit.h000066400000000000000000000012071473346337000330160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CCUSTOMTIMEEDIT_H #define TEST_CCUSTOMTIMEEDIT_H #include #include "customWidget/ccustomtimeedit.h" #include class test_CCustomTimeEdit : public QObject , public testing::Test { Q_OBJECT public: explicit test_CCustomTimeEdit(QObject *parent = nullptr) : QObject(parent) { }; void SetUp() override; void TearDown() override; signals: public slots: public: CCustomTimeEdit *m_timeEdit = nullptr; }; #endif // TEST_CCUSTOMTIMEEDIT_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_cdateedit.cpp000066400000000000000000000071271473346337000321040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_cdateedit.h" //test_cdateedit::test_cdateedit(QObject *parent) : QObject(parent) //{ //} //TEST_F(test_cdateedit, setDate_001) //{ // QDate date = QDate(2022, 4, 20); // mWidget->setDate(date); // EXPECT_EQ(mWidget->date().toString(), date.toString()); //} //TEST_F(test_cdateedit, setDisplayFormat_001) //{ // mWidget->setDisplayFormat("123"); // EXPECT_EQ(mWidget->m_format, "123") << "123"; // mWidget->setDisplayFormat("yyyy/MM/dd"); // EXPECT_EQ(mWidget->m_format, "yyyy/MM/dd") << "yyyy/MM/dd"; //} //TEST_F(test_cdateedit, displayFormat_001) //{ // mWidget->setDisplayFormat("123"); // EXPECT_EQ(mWidget->displayFormat(), "123") << "123"; // mWidget->setDisplayFormat("yyyy/MM/dd"); // EXPECT_EQ(mWidget->displayFormat(), "yyyy/MM/dd") << "yyyy/MM/dd"; //} //TEST_F(test_cdateedit, setLunarCalendarStatus_001) //{ // mWidget->setLunarCalendarStatus(true); // EXPECT_TRUE(mWidget->m_showLunarCalendar) << "true"; // mWidget->setLunarCalendarStatus(false); // EXPECT_FALSE(mWidget->m_showLunarCalendar) << "false"; //} //TEST_F(test_cdateedit, setLunarTextFormat_001) //{ // QTextCharFormat format; // mWidget->setLunarTextFormat(format); // EXPECT_EQ(mWidget->m_lunarTextFormat, format); //} //TEST_F(test_cdateedit, getsetLunarTextFormat_001) //{ // QTextCharFormat format; // mWidget->setLunarTextFormat(format); // EXPECT_EQ(mWidget->getsetLunarTextFormat(), format); //} //TEST_F(test_cdateedit, setCalendarPopup_001) //{ // mWidget->setCalendarPopup(true); //} //TEST_F(test_cdateedit, slotDateEidtInfo_001) //{ // mWidget->setLunarCalendarStatus(true); // mWidget->slotDateEidtInfo(QDate()); //} //TEST_F(test_cdateedit, slotDateEidtInfo_002) //{ // mWidget->setLunarCalendarStatus(false); // mWidget->slotDateEidtInfo(QDate()); //} //TEST_F(test_cdateedit, slotRefreshLineEditTextFormat_001) //{ // mWidget->setLunarCalendarStatus(true); // mWidget->slotRefreshLineEditTextFormat("1232/23/13"); //} //TEST_F(test_cdateedit, slotCursorPositionChanged_001) //{ // mWidget->setLunarCalendarStatus(true); // mWidget->slotCursorPositionChanged(0, 2); //} //TEST_F(test_cdateedit, slotCursorPositionChanged_002) //{ // mWidget->setLunarCalendarStatus(false); // mWidget->slotCursorPositionChanged(0, 2); //} //TEST_F(test_cdateedit, slotCursorPositionChanged_003) //{ // mWidget->setLunarCalendarStatus(true); // mWidget->selectAll(); // mWidget->slotCursorPositionChanged(2, 4); //} //TEST_F(test_cdateedit, slotSelectionChanged_001) //{ // mWidget->setLunarCalendarStatus(true); // mWidget->selectAll(); // mWidget->slotSelectionChanged(); //} //TEST_F(test_cdateedit, slotSelectionChanged_002) //{ // mWidget->setLunarCalendarStatus(false); // mWidget->selectAll(); // mWidget->slotSelectionChanged(); //} //TEST_F(test_cdateedit, getLunarName_001) //{ // mWidget->setLunarCalendarStatus(false); // mWidget->getLunarName(QDate(2022, 4, 20)); //} //TEST_F(test_cdateedit, setLineEditTextFormat_001) //{ // mWidget->setLineEditTextFormat(mWidget->lineEdit(), QList()); //} //TEST_F(test_cdateedit, updateCalendarWidget_001) //{ // mWidget->setCalendarPopup(true); // mWidget->setLunarCalendarStatus(true); // mWidget->updateCalendarWidget(); //} //TEST_F(test_cdateedit, updateCalendarWidget_002) //{ // mWidget->setCalendarPopup(true); // mWidget->setLunarCalendarStatus(false); // mWidget->updateCalendarWidget(); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_cdateedit.h000066400000000000000000000012601473346337000315410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEXT_CDATEEDIT_H #define TEXT_CDATEEDIT_H //#include "cdateedit.h" //#include //#include //#include //class test_cdateedit : public QObject, public::testing::Test //{ // Q_OBJECT //public: // explicit test_cdateedit(QObject *parent = nullptr); // virtual void SetUp() // { // mWidget = new CDateEdit(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // CDateEdit *mWidget = nullptr; //}; #endif // TEXT_CDATEEDIT_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_cdynamicicon.cpp000066400000000000000000000013411473346337000326060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cdynamicicon.h" test_cdynamicicon::test_cdynamicicon() { mDynamicicon = new CDynamicIcon(8, 8); } test_cdynamicicon::~test_cdynamicicon() { delete mDynamicicon; mDynamicicon = nullptr; } //void CDynamicIcon::setDate(const QDate &date) TEST_F(test_cdynamicicon, setDate) { mDynamicicon->setDate(QDate::currentDate()); } //void CDynamicIcon::setTitlebar(DTitlebar *titlebar) TEST_F(test_cdynamicicon, setTitlebar) { DTitlebar *titlebar = new DTitlebar(); mDynamicicon->setTitlebar(titlebar); EXPECT_EQ(mDynamicicon->m_Titlebar, titlebar); delete titlebar; } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_cdynamicicon.h000066400000000000000000000007421473346337000322570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CDYNAMICICON_H #define TEST_CDYNAMICICON_H #include #include #include "customWidget/cdynamicicon.h" class test_cdynamicicon: public::QObject, public::testing::Test { public: test_cdynamicicon(); ~test_cdynamicicon(); protected: CDynamicIcon *mDynamicicon = nullptr; }; #endif // TEST_CDYNAMICICON_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_colorWidget/000077500000000000000000000000001473346337000317255ustar00rootroot00000000000000test_colorlabel.cpp000066400000000000000000000067211473346337000355350ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_colorWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_colorlabel.h" //test_colorlabel::test_colorlabel(QObject *parent) : QObject(parent) //{ //} //TEST_F(test_colorlabel, getColor_001) //{ // ColorLabel *colorLabel = new ColorLabel(); // EXPECT_EQ(colorLabel->getColor(0, 0, 0).name(), "#000000"); // EXPECT_EQ(colorLabel->getColor(1, 0.5, 0.5).name(), "#3f7e7f");; // EXPECT_EQ(colorLabel->getColor(1, 0.2, 0.5).name(), "#667f7f"); // EXPECT_EQ(colorLabel->getColor(1, 0.1, 0.9).name(), "#cee5e5"); // EXPECT_EQ(colorLabel->getColor(1, 0.3, 0.4).name(), "#476566"); // EXPECT_EQ(colorLabel->getColor(2, 0.5, 0.5).name(), "#3f7d7f"); // EXPECT_EQ(colorLabel->getColor(0.5, 0.5, 0.5).name(), "#3f7e7f"); // EXPECT_EQ(colorLabel->getColor(5, 0.5, 0.5).name(), "#3f7a7f"); // EXPECT_EQ(colorLabel->getColor(1, 0.5, 0.5).name(), "#3f7e7f"); // EXPECT_EQ(colorLabel->getColor(10, 0, 0).name(), "#000000"); // EXPECT_EQ(colorLabel->getColor(60, 0, 0).name(), "#000000"); // EXPECT_EQ(colorLabel->getColor(120, 0, 0).name(), "#000000"); // EXPECT_EQ(colorLabel->getColor(180, 0, 0).name(), "#000000"); // EXPECT_EQ(colorLabel->getColor(241, 0, 0).name(), "#000000"); // EXPECT_EQ(colorLabel->getColor(305, 0, 0).name(), "#000000"); // EXPECT_EQ(colorLabel->getColor(360, 0, 0).name(), "#000000"); // delete colorLabel; //} //TEST_F(test_colorlabel, setHue_001) //{ // ColorLabel *colorLabel = new ColorLabel(); // colorLabel->setHue(1); // EXPECT_EQ(1, colorLabel->m_hue); // colorLabel->setHue(5); // EXPECT_EQ(5, colorLabel->m_hue); // colorLabel->setHue(100); // EXPECT_EQ(100, colorLabel->m_hue); // delete colorLabel; //} //TEST_F(test_colorlabel, pickColor) //{ // ColorLabel *colorLabel = new ColorLabel(); // colorLabel->pickColor(QPoint(), 0); // delete colorLabel; //} //TEST_F(test_colorlabel, paintEvent_001) //{ // ColorLabel *colorLabel = new ColorLabel(); // QPaintEvent *e = new QPaintEvent(QRect()); // colorLabel->m_entered = true; // colorLabel->paintEvent(e); // colorLabel->m_entered = false; // colorLabel->paintEvent(e); // delete e; // delete colorLabel; //} //TEST_F(test_colorlabel, mousePressEvent_001) //{ // ColorLabel *colorLabel = new ColorLabel(); // QMouseEvent *e = new QMouseEvent(QEvent::MouseMove, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // colorLabel->mousePressEvent(e); // EXPECT_TRUE(colorLabel->m_pressed); // delete e; // delete colorLabel; //} //TEST_F(test_colorlabel, mouseMoveEvent) //{ // ColorLabel *colorLabel = new ColorLabel(); // QMouseEvent *e = new QMouseEvent(QEvent::MouseMove, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // colorLabel->mouseMoveEvent(e); // EXPECT_TRUE(colorLabel->m_entered); // delete e; // delete colorLabel; //} //TEST_F(test_colorlabel, mouseReleaseEvent_001) //{ // ColorLabel *colorLabel = new ColorLabel(); // QMouseEvent *e = new QMouseEvent(QEvent::MouseMove, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // colorLabel->mouseReleaseEvent(e); // EXPECT_FALSE(colorLabel->m_pressed); // delete e; // delete colorLabel; //} //TEST_F(test_colorlabel, pickColorCursor_001) //{ // ColorLabel *colorLabel = new ColorLabel(); // QCursor cursor = colorLabel->pickColorCursor(); // EXPECT_NE(cursor, QCursor()); // delete colorLabel; //} test_colorlabel.h000066400000000000000000000007671473346337000352060ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_colorWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_COLORLABEL_H #define TEST_COLORLABEL_H //#include //#include //#include //#include //class test_colorlabel : public QObject, public::testing::Test //{ // Q_OBJECT //public: // explicit test_colorlabel(QObject *parent = nullptr); //signals: //public slots: //}; #endif // TEST_COLORLABEL_H test_colorpickerwidget.cpp000066400000000000000000000036341473346337000371370ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_colorWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_colorpickerwidget.h" //test_colorpickerwidget::test_colorpickerwidget(QObject *parent) : QObject(parent) //{ //} //TEST_F(test_colorpickerwidget, getSelectedColor_001) //{ // mWidget->slotUpdateColor(QColor("#000000")); // EXPECT_EQ(mWidget->getSelectedColor(), "#000000") << "text: #000000"; // mWidget->slotUpdateColor(QColor("#123456")); // EXPECT_EQ(mWidget->getSelectedColor(), "#123456") << "text: #123456"; //} //TEST_F(test_colorpickerwidget, setColorHexLineEdit_001) //{ // mWidget->setColorHexLineEdit(); // EXPECT_TRUE(mWidget->m_colHexLineEdit->text().isEmpty()); //} //TEST_F(test_colorpickerwidget, slotUpdateColor) //{ // mWidget->slotUpdateColor(QColor("#000000")); // EXPECT_EQ(mWidget->m_colHexLineEdit->text(), "000000") << "text: #000000"; // mWidget->slotUpdateColor(QColor("#123456")); // EXPECT_EQ(mWidget->m_colHexLineEdit->text(), "123456") << "text: #123456"; //} //TEST_F(test_colorpickerwidget, slotHexLineEditChange_001) //{ // mWidget->slotHexLineEditChange(""); // EXPECT_FALSE(mWidget->m_enterBtn->isEnabled()); //} //TEST_F(test_colorpickerwidget, slotHexLineEditChange_002) //{ // mWidget->slotHexLineEditChange("FFfF"); // EXPECT_EQ(mWidget->m_colHexLineEdit->text(), "ffff") << "eq"; // EXPECT_FALSE(mWidget->m_enterBtn->isEnabled()) << "false"; //} //TEST_F(test_colorpickerwidget, slotHexLineEditChange_003) //{ // mWidget->slotHexLineEditChange("FFfFff"); // EXPECT_EQ(mWidget->m_colHexLineEdit->text(), "ffffff") << "eq"; // EXPECT_TRUE(mWidget->m_enterBtn->isEnabled()) << "true"; //} //TEST_F(test_colorpickerwidget, slotCancelBtnClicked_001) //{ // mWidget->slotCancelBtnClicked(); //} //TEST_F(test_colorpickerwidget, slotEnterBtnClicked_001) //{ // mWidget->slotEnterBtnClicked(); //} test_colorpickerwidget.h000066400000000000000000000013761473346337000366050ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_colorWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_COLORPICKERWIDGET_H #define TEST_COLORPICKERWIDGET_H //#include //#include //#include //#include //class test_colorpickerwidget : public QObject, public::testing::Test //{ // Q_OBJECT //public: // explicit test_colorpickerwidget(QObject *parent = nullptr); // virtual void SetUp() // { // mWidget = new CColorPickerWidget(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // CColorPickerWidget *mWidget = nullptr; //}; #endif // TEST_COLORPICKERWIDGET_H test_colorslider.cpp000066400000000000000000000023221473346337000357310ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_colorWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_colorslider.h" //test_colorslider::test_colorslider(QObject *parent) : QObject(parent) //{ //} //TEST_F(test_colorslider, getColor_001) //{ // EXPECT_EQ(mWidget->getColor(0, 0, 0).name(), "#000000"); // EXPECT_EQ(mWidget->getColor(1, 0.5, 0.5).name(), "#3f7e7f");; // EXPECT_EQ(mWidget->getColor(1, 0.2, 0.5).name(), "#667f7f"); // EXPECT_EQ(mWidget->getColor(1, 0.1, 0.9).name(), "#cee5e5"); // EXPECT_EQ(mWidget->getColor(1, 0.3, 0.4).name(), "#476566"); // EXPECT_EQ(mWidget->getColor(2, 0.5, 0.5).name(), "#3f7d7f"); // EXPECT_EQ(mWidget->getColor(0.5, 0.5, 0.5).name(), "#3f7e7f"); // EXPECT_EQ(mWidget->getColor(5, 0.5, 0.5).name(), "#3f7a7f"); // EXPECT_EQ(mWidget->getColor(1, 0.5, 0.5).name(), "#3f7e7f"); // EXPECT_EQ(mWidget->getColor(10, 0, 0).name(), "#000000"); // EXPECT_EQ(mWidget->getColor(60, 0, 0).name(), "#000000"); // EXPECT_EQ(mWidget->getColor(71, 0, 0).name(), "#000000"); //} //TEST_F(test_colorslider, paintEvent_001) //{ // QPaintEvent *e = new QPaintEvent(QRect()); // mWidget->paintEvent(e); // delete e; //} test_colorslider.h000066400000000000000000000013141473346337000353760ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_colorWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEXT_COLORSLIDER_H #define TEXT_COLORSLIDER_H //#include //#include //#include //#include //class test_colorslider : public QObject, public::testing::Test //{ // Q_OBJECT //public: // explicit test_colorslider(QObject *parent = nullptr); // virtual void SetUp() // { // mWidget = new ColorSlider(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // ColorSlider *mWidget = nullptr; //}; #endif // TEXT_COLORSLIDER_H test_colorseletorwidget.cpp000066400000000000000000000107531473346337000340160ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_colorseletorwidget.h" #include "../dialog_stub.h" //test_colorseletorwidget::test_colorseletorwidget(QObject *parent) : QObject(parent) //{ //} //TEST_F(test_colorseletorwidget, reset_001) //{ // mWidget->reset(); // EXPECT_TRUE(mWidget->m_colorEntityMap.isEmpty()); //} //TEST_F(test_colorseletorwidget, getSelectedColorInfo_001) //{ // JobTypeColorInfo info(0, "#123456", 1); // mWidget->m_colorInfo = info; // EXPECT_TRUE(mWidget->getSelectedColorInfo() == info); //} //TEST_F(test_colorseletorwidget, setUserColor_001) //{ // JobTypeColorInfo info(0, "#123456", ColorSeletorWidget::TypeSystem); // mWidget->setUserColor(info); // EXPECT_TRUE(mWidget->m_userColorBtn == nullptr); //} //TEST_F(test_colorseletorwidget, setUserColor_002) //{ // JobTypeColorInfo info(0, "#123456", ColorSeletorWidget::TypeUser); // mWidget->setUserColor(info); // EXPECT_TRUE(mWidget->m_userColorBtn != nullptr); //} //TEST_F(test_colorseletorwidget, setSelectedColorByIndex_001) //{ // mWidget->reset(); // JobTypeColorInfo info(0, "#123456", ColorSeletorWidget::TypeUser); // mWidget->setUserColor(info); // mWidget->setSelectedColorByIndex(0); // EXPECT_TRUE(mWidget->m_userColorBtn->isChecked()); //} //TEST_F(test_colorseletorwidget, setSelectedColorById_001) //{ // mWidget->reset(); // mWidget->addColor(JobTypeColorInfo(1, "#123456", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(2, "#111111", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(3, "#222222", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(4, "#333333", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(0, "#444444", ColorSeletorWidget::TypeUser)); // mWidget->setSelectedColorById(0); // EXPECT_TRUE(mWidget->m_userColorBtn->isChecked()) << "0"; // mWidget->setSelectedColorById(3); // EXPECT_FALSE(mWidget->m_userColorBtn->isChecked()) << "3"; //} //TEST_F(test_colorseletorwidget, setSelectedColor_001) //{ // mWidget->reset(); // mWidget->addColor(JobTypeColorInfo(1, "#123456", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(2, "#111111", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(3, "#222222", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(4, "#333333", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(0, "#444444", ColorSeletorWidget::TypeUser)); // mWidget->setSelectedColor(JobTypeColorInfo(0, "#444444", ColorSeletorWidget::TypeUser)); // EXPECT_TRUE(mWidget->m_userColorBtn->isChecked()) << "1"; // mWidget->setSelectedColor((JobTypeColorInfo(4, "#333333", ColorSeletorWidget::TypeSystem))); // EXPECT_FALSE(mWidget->m_userColorBtn->isChecked()) << "2"; // mWidget->setSelectedColor((JobTypeColorInfo(4, "#555555", ColorSeletorWidget::TypeSystem))); // EXPECT_TRUE(mWidget->m_userColorBtn->isChecked()) << "3"; //} //TEST_F(test_colorseletorwidget, initColorButton_001) //{ // mWidget->initColorButton(); //} //TEST_F(test_colorseletorwidget, slotButtonClicked_001) //{ // mWidget->reset(); // mWidget->addColor(JobTypeColorInfo(1, "#123456", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(2, "#111111", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(3, "#222222", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(4, "#333333", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(0, "#444444", ColorSeletorWidget::TypeUser)); // mWidget->slotButtonClicked(1); // mWidget->slotButtonClicked(6); //} //TEST_F(test_colorseletorwidget, slotAddColorButClicked_001) //{ // calendarDDialogExecReturn = 1; // Stub stub; // calendarDDialogExecStub(stub); // mWidget->slotAddColorButClicked(); // EXPECT_TRUE(mWidget->m_userColorBtn->isChecked()); //} //TEST_F(test_colorseletorwidget, addColor_001) //{ // mWidget->reset(); // mWidget->addColor(JobTypeColorInfo(0, "", 1)); // EXPECT_EQ(mWidget->m_colorEntityMap.size(), 1); //} //TEST_F(test_colorseletorwidget, addColor_002) //{ // mWidget->reset(); // mWidget->addColor(JobTypeColorInfo(0, "", ColorSeletorWidget::TypeUser)); // EXPECT_EQ(mWidget->m_colorEntityMap.size(), 1) << "eq"; // EXPECT_NE(mWidget->m_userColorBtn, nullptr) << "ne"; //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_colorseletorwidget.h000066400000000000000000000013701473346337000335350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_COLORSELETORWIDGET_H #define TEST_COLORSELETORWIDGET_H //#include //#include //#include //#include //class test_colorseletorwidget : public QObject, public::testing::Test //{ // Q_OBJECT //public: // explicit test_colorseletorwidget(QObject *parent = nullptr); // virtual void SetUp() // { // mWidget = new ColorSeletorWidget(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // ColorSeletorWidget *mWidget = nullptr; //}; #endif // TEST_COLORSELETORWIDGET_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_cpushbutton.cpp000066400000000000000000000032111473346337000325220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_cpushbutton.h" //test_cpushbutton::test_cpushbutton(QObject *parent) : QObject(parent) //{ //} //TEST_F(test_cpushbutton, setHighlight_001) //{ // mWidget->setHighlight(true); // EXPECT_TRUE(mWidget->m_Highlighted); //} //TEST_F(test_cpushbutton, setHighlight_002) //{ // mWidget->setHighlight(false); // EXPECT_FALSE(mWidget->m_Highlighted); //} //TEST_F(test_cpushbutton, isHighlight_001) //{ // mWidget->setHighlight(true); // EXPECT_TRUE(mWidget->isHighlight()); //} //TEST_F(test_cpushbutton, isHighlight_002) //{ // mWidget->setHighlight(false); // EXPECT_FALSE(mWidget->isHighlight()); //} //TEST_F(test_cpushbutton, mousePressEvent_001) //{ // QMouseEvent *e = new QMouseEvent(QEvent::MouseMove, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // mWidget->mousePressEvent(e); // EXPECT_TRUE(mWidget->m_pressed); // delete e; //} //TEST_F(test_cpushbutton, mouseReleaseEvent_001) //{ // QMouseEvent *e = new QMouseEvent(QEvent::MouseMove, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // mWidget->mouseReleaseEvent(e); // EXPECT_FALSE(mWidget->m_pressed); // delete e; //} //TEST_F(test_cpushbutton, paintEvent_001) //{ // QPaintEvent *e = new QPaintEvent(QRect()); // mWidget->setHighlight(true); // mWidget->paintEvent(e); // delete e; //} //TEST_F(test_cpushbutton, paintEvent_002) //{ // QPaintEvent *e = new QPaintEvent(QRect()); // mWidget->setHighlight(false); // mWidget->paintEvent(e); // delete e; //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_cpushbutton.h000066400000000000000000000012771473346337000322010ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CPUSHBUTTON_H #define TEST_CPUSHBUTTON_H //#include "cpushbutton.h" //#include //#include //#include //class test_cpushbutton : public QObject, public::testing::Test //{ // Q_OBJECT //public: // explicit test_cpushbutton(QObject *parent = nullptr); // virtual void SetUp() // { // mWidget = new CPushButton(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // CPushButton *mWidget = nullptr; //}; #endif // TEST_CPUSHBUTTON_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_cradiobutton.cpp000066400000000000000000000015351473346337000326500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_cradiobutton.h" //test_cradiobutton::test_cradiobutton() //{ //} //TEST_F(test_cradiobutton, setColor_001) //{ // QColor color("#000000"); // mWidget->setColor(color); // EXPECT_EQ(mWidget->getColor(), color); //} //TEST_F(test_cradiobutton, paintEvent_001) //{ // QColor color("#000000"); // mWidget->setColor(color); // mWidget->setChecked(true); // QPaintEvent *e = new QPaintEvent(QRect()); // mWidget->paintEvent(e); // delete e; //} //TEST_F(test_cradiobutton, paintEvent_002) //{ // QColor color("#000000"); // mWidget->setColor(color); // mWidget->setChecked(false); // QPaintEvent *e = new QPaintEvent(QRect()); // mWidget->paintEvent(e); // delete e; //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_cradiobutton.h000066400000000000000000000012061473346337000323100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CRADIOBUTTON_H #define TEST_CRADIOBUTTON_H //#include "cradiobutton.h" //#include //#include //#include //class test_cradiobutton: public::testing::Test //{ //public: // test_cradiobutton(); // virtual void SetUp() // { // mWidget = new CRadioButton(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // CRadioButton *mWidget = nullptr; //}; #endif // TEST_CRADIOBUTTON_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_ctitlewidget.cpp000066400000000000000000000045371473346337000326500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_ctitlewidget.h" //test_ctitlewidget::test_ctitlewidget() //{ //} //TEST_F(test_ctitlewidget, setShowState_001) //{ // mWidget->setShowState(CTitleWidget::Title_State_Mini); // EXPECT_EQ(mWidget->m_showState, CTitleWidget::Title_State_Mini); //} //TEST_F(test_ctitlewidget, setShowState_002) //{ // mWidget->setShowState(CTitleWidget::Title_State_Normal); // EXPECT_EQ(mWidget->m_showState, CTitleWidget::Title_State_Normal); //} //TEST_F(test_ctitlewidget, buttonBox_001) //{ // EXPECT_EQ(mWidget->buttonBox(), mWidget->m_buttonBox); //} //TEST_F(test_ctitlewidget, searchEdit_001) //{ // EXPECT_EQ(mWidget->searchEdit(), mWidget->m_searchEdit); //} //TEST_F(test_ctitlewidget, stateUpdate_001) //{ // mWidget->setShowState(CTitleWidget::Title_State_Mini); // mWidget->stateUpdate(); //} //TEST_F(test_ctitlewidget, stateUpdate_002) //{ // mWidget->setShowState(CTitleWidget::Title_State_Normal); // mWidget->stateUpdate(); //} //TEST_F(test_ctitlewidget, miniStateShowSearchEdit_001) //{ // mWidget->miniStateShowSearchEdit(); // EXPECT_EQ(mWidget->width(), mWidget->m_searchEdit->maximumWidth()); //} //TEST_F(test_ctitlewidget, normalStateUpdateSearchEditWidth_001) //{ // mWidget->normalStateUpdateSearchEditWidth(); // EXPECT_NE(mWidget->width(), mWidget->m_searchEdit->maximumWidth()); //} //TEST_F(test_ctitlewidget, eventFilter_001) //{ // DButtonBoxButton btn(""); // QKeyEvent e(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier); // mWidget->eventFilter(&btn, &e); // EXPECT_NE(mWidget->width(), mWidget->m_searchEdit->maximumWidth()); //} //TEST_F(test_ctitlewidget, eventFilter_002) //{ // QFocusEvent e(QEvent::FocusOut, Qt::TabFocusReason); // mWidget->eventFilter(mWidget->m_searchEdit, &e); // EXPECT_NE(mWidget->width(), mWidget->m_searchEdit->maximumWidth()); //} //TEST_F(test_ctitlewidget, slotShowSearchEdit_001) //{ // mWidget->slotShowSearchEdit(); //} //TEST_F(test_ctitlewidget, slotSearchEditFocusChanged_001) //{ // mWidget->slotSearchEditFocusChanged(true); //} //TEST_F(test_ctitlewidget, slotSearchEditFocusChanged_002) //{ // mWidget->setShowState(CTitleWidget::Title_State_Mini); // mWidget->slotSearchEditFocusChanged(false); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_ctitlewidget.h000066400000000000000000000012071473346337000323040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CTITLEWIDGET_H #define TEST_CTITLEWIDGET_H //#include "ctitlewidget.h" //#include //#include //#include //class test_ctitlewidget: public::testing::Test //{ //public: // test_ctitlewidget(); // virtual void SetUp() // { // mWidget = new CTitleWidget(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // CTitleWidget *mWidget = nullptr; //}; #endif // TEST_CTITLEWIDGET_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_customframe.cpp000066400000000000000000000032731473346337000325010ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_customframe.h" test_customframe::test_customframe() { mCustomFrame = new CustomFrame(); } test_customframe::~test_customframe() { delete mCustomFrame; mCustomFrame = nullptr; } //void CustomFrame::setBColor(QColor normalC) TEST_F(test_customframe, setBcolor) { mCustomFrame->setBColor(Qt::red); } //void CustomFrame::setRoundState(bool lstate, bool tstate, bool rstate, bool bstate) TEST_F(test_customframe, setRoundState) { mCustomFrame->setRoundState(true, true, true, true); } //void CustomFrame::setTextStr(QFont font, QColor tc, QString strc, int flag) TEST_F(test_customframe, setTextStr) { QFont font; mCustomFrame->setTextStr(font, Qt::red, "hello", 1); } //void CustomFrame::setTextStr(QString strc) TEST_F(test_customframe, setTextstr) { mCustomFrame->setTextStr("hello"); } //void CustomFrame::setTextColor(QColor tc) TEST_F(test_customframe, setTextColor) { mCustomFrame->setTextColor(Qt::red); } //void CustomFrame::setTextFont(QFont font) TEST_F(test_customframe, setTextFont) { QFont font; mCustomFrame->setTextFont(font); } //void CustomFrame::setTextAlign(int flag) TEST_F(test_customframe, setTextAlign) { mCustomFrame->setTextAlign(2); } //void CustomFrame::setRadius(int radius) TEST_F(test_customframe, setRadius) { mCustomFrame->setRadius(4); } //void CustomFrame::setboreder(int framew) TEST_F(test_customframe, setboreder) { mCustomFrame->setboreder(4); } //void CustomFrame::setFixedSize(int w, int h) TEST_F(test_customframe, setFixedSize) { mCustomFrame->setFixedSize(40, 44); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_customframe.h000066400000000000000000000007321473346337000321430ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CUSTOMFRAME_H #define TEST_CUSTOMFRAME_H #include #include #include "customWidget/customframe.h" class test_customframe: public::QObject, public::testing::Test { public: test_customframe(); ~test_customframe(); protected: CustomFrame *mCustomFrame = nullptr; }; #endif // TEST_CUSTOMFRAME_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_jobtypecombobox.cpp000066400000000000000000000136651473346337000333670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_jobtypecombobox.h" //#include "../third-party_stub/stub.h" //static QList jobtypecombobox_stub_JobTypeInfos1() //{ // QList infos; // infos.push_back(JobTypeInfo(1, "1", 0, "#000000")); // infos.push_back(JobTypeInfo(2)); // infos.push_back(JobTypeInfo(3, "3", 2, "#000000")); // return infos; //} //static QList jobtypecombobox_stub_JobTypeInfos2() //{ // QList infos; // infos.push_back(JobTypeInfo(1, "1", 0, "#000000")); // infos.push_back(JobTypeInfo(2, "2", 1, "#000000")); // infos.push_back(JobTypeInfo(3, "3", 2, "#000000")); // return infos; //} //static int jobtypecombobox_stub_flase() //{ // return 0; //} //test_jobtypecombobox::test_jobtypecombobox() //{ //} //TEST_F(test_jobtypecombobox, setAlert_001) //{ // mWidget->setAlert(true); // EXPECT_TRUE(mWidget->m_control->isAlert()); //} //TEST_F(test_jobtypecombobox, isAlert_001) //{ // mWidget->setAlert(true); // EXPECT_TRUE(mWidget->isAlert()); //} //TEST_F(test_jobtypecombobox, isAlert_002) //{ // mWidget->setAlert(false); // EXPECT_FALSE(mWidget->isAlert()); //} //TEST_F(test_jobtypecombobox, showAlertMessage_001) //{ // mWidget->showAlertMessage(""); //} //TEST_F(test_jobtypecombobox, showAlertMessage_002) //{ // mWidget->showAlertMessage("", mWidget); //} //TEST_F(test_jobtypecombobox, setAlertMessageAlignment_001) //{ // mWidget->setAlertMessageAlignment(Qt::AlignLeft); // EXPECT_EQ(mWidget->m_control->messageAlignment(), Qt::AlignLeft); //} //TEST_F(test_jobtypecombobox, hideAlertMessage_001) //{ // mWidget->hideAlertMessage(); //} //TEST_F(test_jobtypecombobox, getCurrentEditPositione_001) //{ // EXPECT_EQ(mWidget->getCurrentEditPosition(), mWidget->m_newPos); //} //TEST_F(test_jobtypecombobox, updateJobType_001) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos2); // EXPECT_TRUE(mWidget->updateJobType()); //} //TEST_F(test_jobtypecombobox, getCurrentJobTypeNo_001) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos1); // stub.set(ADDR(QComboBox, currentIndex), jobtypecombobox_stub_flase); // mWidget->updateJobType(); // mWidget->getCurrentJobTypeNo(); //} //TEST_F(test_jobtypecombobox, setCurrentJobTypeNo_001) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos1); // mWidget->updateJobType(); // mWidget->setCurrentJobTypeNo(3); //} //TEST_F(test_jobtypecombobox, slotBtnAddItemClicked_001) //{ // mWidget->slotBtnAddItemClicked(); // EXPECT_TRUE(mWidget->isEditable()); // EXPECT_TRUE(mWidget->currentText().isEmpty()); //} //TEST_F(test_jobtypecombobox, showPopup_001) //{ // mWidget->showPopup(); // EXPECT_FALSE(mWidget->isEditable()); //} //TEST_F(test_jobtypecombobox, eventFilter_001) //{ // QPointF point(1, 1); // QEnterEvent e(point, point, point); // mWidget->showPopup(); // mWidget->eventFilter(mWidget->m_addBtn, &e); //} //TEST_F(test_jobtypecombobox, eventFilter_002) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos2); // mWidget->updateJobType(); // QPointF point(1, 1); // QFocusEvent e(QEvent::FocusIn); // mWidget->showPopup(); // mWidget->eventFilter(mWidget->m_addBtn, &e); //} //TEST_F(test_jobtypecombobox, eventFilter_003) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos2); // mWidget->updateJobType(); // QPointF point(1, 1); // QKeyEvent e(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier); // mWidget->showPopup(); // mWidget->m_addBtn->setHighlight(true); // mWidget->eventFilter(mWidget->m_addBtn, &e); // EXPECT_TRUE(mWidget->m_addBtn->isHighlight()); //} //TEST_F(test_jobtypecombobox, eventFilter_004) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos2); // mWidget->updateJobType(); // QPointF point(1, 1); // QKeyEvent e(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier); // mWidget->showPopup(); // mWidget->m_addBtn->setHighlight(true); // mWidget->eventFilter(mWidget->m_addBtn, &e); // EXPECT_TRUE(mWidget->m_addBtn->isHighlight()); //} //TEST_F(test_jobtypecombobox, eventFilter_005) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos2); // mWidget->updateJobType(); // QPointF point(1, 1); // QKeyEvent e(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier); // mWidget->showPopup(); // mWidget->m_addBtn->setHighlight(true); // mWidget->eventFilter(mWidget->m_customWidget, &e); // EXPECT_TRUE(mWidget->m_addBtn->isHighlight()); //} //TEST_F(test_jobtypecombobox, initUI_001) //{ // mWidget->initUI(); // EXPECT_FALSE(mWidget->isEditable()); //} //TEST_F(test_jobtypecombobox, addJobTypeItem_001) //{ // mWidget->addJobTypeItem(1, "#000000", ""); //} //TEST_F(test_jobtypecombobox, addCustomWidget_001) //{ // QFrame *viewContainer = mWidget->findChild(); // mWidget->addCustomWidget(viewContainer); // EXPECT_TRUE(mWidget->m_addBtn != nullptr); //} //TEST_F(test_jobtypecombobox, setItemSelectable_001) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos2); // mWidget->updateJobType(); // mWidget->showPopup(); // mWidget->setItemSelectable(true); // EXPECT_FALSE(mWidget->m_addBtn->isHighlight()); //} //TEST_F(test_jobtypecombobox, setItemSelectable_002) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos2); // mWidget->updateJobType(); // mWidget->showPopup(); // mWidget->setItemSelectable(false); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_jobtypecombobox.h000066400000000000000000000013121473346337000330160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_JOBTYPECOMBOBOX_H #define TEST_JOBTYPECOMBOBOX_H //#include "jobtypecombobox.h" //#include //#include //#include //class test_jobtypecombobox: public::testing::Test //{ //public: // test_jobtypecombobox(); // virtual void SetUp() // { // mWidget = new JobTypeComboBox(); // mWidget->slotBtnAddItemClicked(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // JobTypeComboBox *mWidget = nullptr; //}; #endif // TEST_JOBTYPECOMBOBOX_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_jobtypelistview.cpp000066400000000000000000000037721473346337000334230ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_jobtypelistview.h" //#include "cscheduleoperation.h" //#include "../dialog_stub.h" //static int jobtypelistview_stub_true(int) //{ // return 1; //} //test_jobtypelistview::test_jobtypelistview() //{ //} //TEST_F(test_jobtypelistview, canAdd_001) //{ // mWidget->canAdd(); //} //TEST_F(test_jobtypelistview, viewportEvent_001) //{ // QHoverEvent e(QEvent::HoverLeave, QPointF(0, 0), QPointF(0, 0)); // mWidget->viewportEvent(&e); //} //TEST_F(test_jobtypelistview, viewportEvent_002) //{ // QHoverEvent e(QEvent::HoverLeave, QPointF(0, 0), QPointF(0, 0)); // mWidget->m_iIndexCurrentHover = 0; // mWidget->viewportEvent(&e); //} //TEST_F(test_jobtypelistview, viewportEvent_003) //{ // QHoverEvent e(QEvent::HoverMove, QPointF(1, 1), QPointF(1, 1)); // mWidget->m_iIndexCurrentHover = 1; // mWidget->viewportEvent(&e); //} //TEST_F(test_jobtypelistview, initUI_001) //{ // mWidget->initUI(); //} //TEST_F(test_jobtypelistview, addJobTypeItem_001) //{ // mWidget->addJobTypeItem(JobTypeInfo()); //} //TEST_F(test_jobtypelistview, slotUpdateJobType_001) //{ // Stub stub; // calendarDDialogExecStub(stub); // mWidget->slotUpdateJobType(); //} //TEST_F(test_jobtypelistview, slotDeleteJobType_001) //{ // mWidget->slotDeleteJobType(); //} //TEST_F(test_jobtypelistview, slotDeleteJobType_002) //{ // mWidget->m_iIndexCurrentHover = 1; // mWidget->slotDeleteJobType(); //} //TEST_F(test_jobtypelistview, slotDeleteJobType_003) //{ // Stub stub; // calendarDDialogExecStub(stub); // stub.set(ADDR(CScheduleOperation, isJobTypeUsed), jobtypelistview_stub_true); // mWidget->m_iIndexCurrentHover = 1; // mWidget->slotDeleteJobType(); //} //TEST_F(test_jobtypelistview, updateJobType_003) //{ // mWidget->m_iIndexCurrentHover = 1; // mWidget->updateJobType(); // EXPECT_EQ(mWidget->m_iIndexCurrentHover, -1); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_jobtypelistview.h000066400000000000000000000021311473346337000330540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_JOBTYPELISTVIEW_H #define TEST_JOBTYPELISTVIEW_H //#include "jobtypelistview.h" //#include "../third-party_stub/stub.h" //#include //#include //#include //static QList jobtypelistview_stub_JobTypeInfos() //{ // QList infos; // infos.push_back(JobTypeInfo(1, "1", 0, "#000000")); // infos.push_back(JobTypeInfo(2, "2", 1, "#000000")); // infos.push_back(JobTypeInfo(3, "3", 2, "#000000")); // return infos; //} //class test_jobtypelistview: public::testing::Test //{ //public: // test_jobtypelistview(); // void SetUp() // { // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypelistview_stub_JobTypeInfos); // mWidget = new JobTypeListView(); // } // void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // JobTypeListView *mWidget = nullptr; //}; #endif // TEST_JOBTYPELISTVIEW_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_labelwidget.cpp000066400000000000000000000005651473346337000324400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_labelwidget.h" //#include "../third-party_stub/stub.h" //test_labelwidget::test_labelwidget() //{ //} //TEST_F(test_labelwidget, paintEvent_001) //{ // QPaintEvent e(QRect(0, 0, 0, 0)); // mWidget->paintEvent(&e); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_labelwidget.h000066400000000000000000000011761473346337000321040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_LABELWIDGET_H #define TEST_LABELWIDGET_H //#include "labelwidget.h" //#include //#include //#include //class test_labelwidget: public::testing::Test //{ //public: // test_labelwidget(); // virtual void SetUp() // { // mWidget = new LabelWidget(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // LabelWidget *mWidget = nullptr; //}; #endif // TEST_LABELWIDGET_H test_lunarcalendarwidget.cpp000066400000000000000000000007531473346337000341140ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_lunarcalendarwidget.h" //test_lunarcalendarwidget::test_lunarcalendarwidget() //{ //} //TEST_F(test_lunarcalendarwidget, setLunarYearText_001) //{ // mWidget->setLunarYearText("2023"); // EXPECT_EQ(mWidget->lunarYearText(), "2023"); //} //TEST_F(test_lunarcalendarwidget, minimumSizeHint_001) //{ // mWidget->minimumSizeHint(); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_lunarcalendarwidget.h000066400000000000000000000012761473346337000336410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_LUNARCALENDARWIDGET_H #define TEST_LUNARCALENDARWIDGET_H //#include "lunarcalendarwidget.h" //#include //#include //#include //class test_lunarcalendarwidget: public::testing::Test //{ //public: // test_lunarcalendarwidget(); // virtual void SetUp() // { // mWidget = new LunarCalendarWidget(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // LunarCalendarWidget *mWidget = nullptr; //}; #endif // TEST_LUNARCALENDARWIDGET_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_monthbrefwidget.cpp000066400000000000000000000124521473346337000333430ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_monthbrefwidget.h" #include #include #include #include test_monthbrefwidget::test_monthbrefwidget() { } test_monthbrefwidget::~test_monthbrefwidget() { } void test_monthbrefwidget::SetUp() { mMonthBrefWidget = new MonthBrefWidget(); mMonthDayRect = new CMonthDayRect(); } void test_monthbrefwidget::TearDown() { delete mMonthBrefWidget; mMonthBrefWidget = nullptr; delete mMonthDayRect; mMonthDayRect = nullptr; } QVector getDateList() { QDate currentdate = QDate::currentDate(); QVector dateList; for (int i = 0; i < 42; i++) { dateList.append(currentdate.addDays(i)); } return dateList; } QVector getBoolList() { QVector lineList; for (int i = 0; i < 42; i++) { if (i % 2 == 0) lineList.append(true); else lineList.append(false); } return lineList; } //void MonthBrefWidget::setDate(const int showMonth, const QVector &showDate) TEST_F(test_monthbrefwidget, setDate) { const int month = 4; mMonthBrefWidget->setDate(month, getDateList()); } //void MonthBrefWidget::setTheMe(int type) TEST_F(test_monthbrefwidget, setTheMe) { mMonthBrefWidget->setTheMe(1); mMonthBrefWidget->setTheMe(2); } //void MonthBrefWidget::setLintFlag(const QVector &lineFlag) TEST_F(test_monthbrefwidget, setLintFlag) { mMonthBrefWidget->setLintFlag(getBoolList()); } //void MonthBrefWidget::setSearchScheduleFlag(const QVector &searchFlag) TEST_F(test_monthbrefwidget, setSearchScheduleFlag) { mMonthBrefWidget->setSearchScheduleFlag(getBoolList()); } //void MonthBrefWidget::updateSize() TEST_F(test_monthbrefwidget, updateSize) { mMonthBrefWidget->updateSize(); } //int MonthBrefWidget::getMousePosItem(const QPointF &pos) TEST_F(test_monthbrefwidget, getMousePosItem) { QPointF pointf; mMonthBrefWidget->getMousePosItem(pointf); } //void MonthBrefWidget::mousePress(const QPoint &point TEST_F(test_monthbrefwidget, mousePress) { QPoint point; mMonthBrefWidget->mousePress(point); } //void CMonthDayRect::setTheMe(int type) TEST_F(test_monthbrefwidget, settheme) { mMonthDayRect->setTheMe(1); mMonthDayRect->setTheMe(2); } //void CMonthDayRect::setDate(const QDate &date) TEST_F(test_monthbrefwidget, setdate) { mMonthDayRect->setDate(QDate::currentDate()); } //QDate CMonthDayRect::getDate() const TEST_F(test_monthbrefwidget, getdate) { mMonthDayRect->setDate(QDate::currentDate()); mMonthDayRect->getDate(); } //void CMonthDayRect::setCellEvent(const CMonthDayRect::CellEventType &type) TEST_F(test_monthbrefwidget, setCellEvent) { mMonthDayRect->setCellEvent(CMonthDayRect::CellEventType::Cellhover); } //void CMonthDayRect::setIsCurrentMonth(const bool isCurrMonth) TEST_F(test_monthbrefwidget, setIsCurrentMonth) { mMonthDayRect->setIsCurrentMonth(true); } //QRectF CMonthDayRect::rect() const TEST_F(test_monthbrefwidget, rect) { mMonthDayRect->setRect(QRect(10, 10, 8, 8)); mMonthDayRect->rect(); } //void CMonthDayRect::setRect(const QRectF &rect) TEST_F(test_monthbrefwidget, setRect) { mMonthDayRect->setRect(QRect(10, 10, 8, 8)); } //void CMonthDayRect::setRect(qreal x, qreal y, qreal w, qreal h) TEST_F(test_monthbrefwidget, setrect) { // mMonthDayRect->setRect(8, 8, 8, 8); } //void CMonthDayRect::setLineFlag(const bool flag) TEST_F(test_monthbrefwidget, setLIneflag) { mMonthDayRect->setLineFlag(true); } //void CMonthDayRect::setSearchScheduleFlag(const bool flag) TEST_F(test_monthbrefwidget, setSearchScheduleflag) { mMonthDayRect->setSearchScheduleFlag(true); } //void CMonthDayRect::setDevicePixelRatio(const qreal pixel) TEST_F(test_monthbrefwidget, setDevicePixelRatio) { mMonthDayRect->setDevicePixelRatio(2); } //void CMonthDayRect::setCurrentRect(CMonthDayRect *currrect) TEST_F(test_monthbrefwidget, setCurrentrect) { mMonthDayRect->setCurrentRect(mMonthDayRect); } //void CMonthDayRect::setSystemActiveColor(const QColor &activeColor) TEST_F(test_monthbrefwidget, setSystemActiveColor) { mMonthDayRect->setSystemActiveColor(Qt::red); } //getPixmap TEST_F(test_monthbrefwidget, getPixmap) { mMonthBrefWidget->setFixedSize(800, 500); mMonthBrefWidget->setDate(QDate::currentDate().month(), getDateList()); QPixmap pixmap(mMonthBrefWidget->size()); mMonthBrefWidget->render(&pixmap); } TEST_F(test_monthbrefwidget, resizeEvent) { mMonthBrefWidget->setFixedSize(QSize(600, 500)); QResizeEvent resizeEvent(QSize(600, 501), QSize(600, 500)); QApplication::sendEvent(mMonthBrefWidget, &resizeEvent); } TEST_F(test_monthbrefwidget, mouseEvent) { mMonthBrefWidget->setFixedSize(QSize(600, 500)); mMonthBrefWidget->setDate(QDate::currentDate().month(), getDateList()); QTest::mouseDClick(mMonthBrefWidget, Qt::MouseButton::LeftButton); QTest::mouseRelease(mMonthBrefWidget, Qt::MouseButton::LeftButton); } //mouseDoubleClickEvent TEST_F(test_monthbrefwidget, mouseDoubleClickEvent) { mMonthBrefWidget->setFixedSize(QSize(600, 500)); mMonthBrefWidget->setDate(QDate::currentDate().month(), getDateList()); QTest::mouseDClick(mMonthBrefWidget, Qt::MouseButton::LeftButton); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_monthbrefwidget.h000066400000000000000000000011441473346337000330040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MONTHBREFWIDGET_H #define TEST_MONTHBREFWIDGET_H #include #include #include "customWidget/monthbrefwidget.h" class test_monthbrefwidget : public::QObject, public::testing::Test { public: test_monthbrefwidget(); ~test_monthbrefwidget(); void SetUp() override; void TearDown() override; protected: MonthBrefWidget *mMonthBrefWidget = nullptr; CMonthDayRect *mMonthDayRect = nullptr; }; #endif // TEST_MONTHBREFWIDGET_H test_scheduleremindwidget.cpp000066400000000000000000000052361473346337000342750ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_scheduleremindwidget.h" test_scheduleremindwidget::test_scheduleremindwidget() { mScheduleRemindWidget = new ScheduleRemindWidget(); mCenterWidget = new CenterWidget(); } test_scheduleremindwidget::~test_scheduleremindwidget() { delete mScheduleRemindWidget; mScheduleRemindWidget = nullptr; delete mCenterWidget; mCenterWidget = nullptr; } QVector getScheduleRemindData() { ScheduleDataInfo schedule1, schedule2; QDateTime currentDateTime = QDateTime::currentDateTime(); schedule1.setID(1); schedule1.setBeginDateTime(currentDateTime); schedule1.setEndDateTime(currentDateTime.addDays(1)); schedule1.setTitleName("scheduleOne"); schedule1.setAllDay(true); schedule1.setType(1); schedule1.setRecurID(0); schedule2.setID(2); schedule2.setBeginDateTime(currentDateTime.addDays(1)); schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); schedule2.setTitleName("scheduleTwo"); schedule2.setAllDay(false); schedule2.setType(2); schedule2.setRecurID(0); QVector scheduleList{}; scheduleList.append(schedule1); scheduleList.append(schedule2); return scheduleList; } //void SchecduleRemindWidget::setData(const ScheduleDataInfo &vScheduleInfo, const CSchedulesColor &gcolor) TEST_F(test_scheduleremindwidget, setData) { CSchedulesColor gdcolor = CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType(2); mScheduleRemindWidget->setData(getScheduleRemindData().first(), gdcolor); } //void SchecduleRemindWidget::setDirection(DArrowRectangle::ArrowDirection value) TEST_F(test_scheduleremindwidget, setdirection) { mScheduleRemindWidget->setDirection(DArrowRectangle::ArrowDirection::ArrowRight); } //void CenterWidget::setData(const ScheduleDataInfo &vScheduleInfo, const CSchedulesColor &gcolor) TEST_F(test_scheduleremindwidget, setDate) { CSchedulesColor gdcolor = CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType(2); mCenterWidget->setData(getScheduleRemindData().first(), gdcolor); } //void CenterWidget::setTheMe(const int type) TEST_F(test_scheduleremindwidget, setTheMe) { mCenterWidget->setTheMe(1); mCenterWidget->setTheMe(2); } //void CenterWidget::UpdateTextList() TEST_F(test_scheduleremindwidget, updateTextList) { mCenterWidget->UpdateTextList(); } //getPixmap TEST_F(test_scheduleremindwidget, getPixmap) { mCenterWidget->setFixedSize(800, 500); QPixmap pixmap(mCenterWidget->size()); mCenterWidget->render(&pixmap); } test_scheduleremindwidget.h000066400000000000000000000011271473346337000337350ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULEREMINDWIDGET_H #define TEST_SCHEDULEREMINDWIDGET_H #include #include #include "customWidget/scheduleRemindWidget.h" class test_scheduleremindwidget : public::QObject, public::testing::Test { public: test_scheduleremindwidget(); ~test_scheduleremindwidget(); protected: ScheduleRemindWidget *mScheduleRemindWidget = nullptr; CenterWidget *mCenterWidget = nullptr; }; #endif // TEST_SCHEDULEREMINDWIDGET_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_scheduleview.cpp000066400000000000000000000202501473346337000326350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_scheduleview.h" #include "../third-party_stub/stub.h" static QLocale::Language scheduleview_stub_language() { return QLocale::English; } static bool scheduleview_stub_event() { return true; } static touchGestureOperation::TouchState scheduleview_getTouchState = touchGestureOperation::T_STATE_NONE; static touchGestureOperation::TouchState scheduleview_stub_getTouchState() { return scheduleview_getTouchState; } test_scheduleview::test_scheduleview() { mScheduleView = new CScheduleView(); } test_scheduleview::~test_scheduleview() { delete mScheduleView; mScheduleView = nullptr; } QVector getScheduleData() { ScheduleDataInfo schedule1, schedule2; QDateTime currentDateTime = QDateTime::currentDateTime(); schedule1.setID(1); schedule1.setBeginDateTime(currentDateTime); schedule1.setEndDateTime(currentDateTime.addDays(1)); schedule1.setTitleName("scheduleOne"); schedule1.setAllDay(true); schedule1.setType(1); schedule1.setRecurID(0); schedule2.setID(2); schedule2.setBeginDateTime(currentDateTime.addDays(1)); schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); schedule2.setTitleName("scheduleTwo"); schedule2.setAllDay(false); schedule2.setType(2); schedule2.setRecurID(0); QVector scheduleList{}; scheduleList.append(schedule1); scheduleList.append(schedule2); return scheduleList; } //void CScheduleView::setviewMargin(int left, int top, int right, int bottom) TEST_F(test_scheduleview, setviewMargin) { mScheduleView->setviewMargin(8, 8, 4, 4); } //void CScheduleView::setRange(int w, int h, QDate begin, QDate end) TEST_F(test_scheduleview, setRange) { mScheduleView->setRange(4, 4, QDate::currentDate(), QDate::currentDate().addDays(1)); } //void CScheduleView::setRange(QDate begin, QDate end) TEST_F(test_scheduleview, setrange) { mScheduleView->setRange(QDate::currentDate(), QDate::currentDate().addDays(1)); } //void CScheduleView::setTheMe(int type) TEST_F(test_scheduleview, setTheMe) { mScheduleView->setTheMe(1); mScheduleView->setTheMe(2); } //void CScheduleView::setLunarVisible(bool state) TEST_F(test_scheduleview, setLunarVisible) { mScheduleView->setLunarVisible(true); } //void CScheduleView::setTime(QTime time) TEST_F(test_scheduleview, setTime) { mScheduleView->setTime(QTime::currentTime()); } //void CScheduleView::setSelectSchedule(const ScheduleDataInfo &scheduleInfo) TEST_F(test_scheduleview, setSelectSchedule) { ScheduleDataInfo scheduleinfo = getScheduleData().first(); mScheduleView->setSelectSchedule(scheduleinfo); scheduleinfo = getScheduleData().at(1); mScheduleView->setSelectSchedule(scheduleinfo); } //void CScheduleView::updateHeight() TEST_F(test_scheduleview, updateHeight) { mScheduleView->updateHeight(); } //bool CScheduleView::IsDragging() TEST_F(test_scheduleview, IsDragging) { mScheduleView->IsDragging(); } //void CScheduleView::setCurrentDate(const QDateTime ¤tDate) TEST_F(test_scheduleview, setCurrentDate) { mScheduleView->setCurrentDate(QDateTime::currentDateTime()); } //void CScheduleView::setShowScheduleInfo(const QMap > &scheduleInfo) TEST_F(test_scheduleview, setShowScheduleInfo) { QMap > dateInfoMap; dateInfoMap.insert(QDate::currentDate(), getScheduleData()); mScheduleView->setShowScheduleInfo(dateInfoMap); } //void CScheduleView::setDate(QDate date) TEST_F(test_scheduleview, setDate) { mScheduleView->setDate(QDate::currentDate()); } //void CScheduleView::slotupdateSchedule() TEST_F(test_scheduleview, slotupdateSchedule) { mScheduleView->slotupdateSchedule(); } //void CScheduleView::slotPosHours(QVector vPos, QVector vHours, int currentTimeType) TEST_F(test_scheduleview, slotPosHours) { QVector pos; pos.append(1); pos.append(2); pos.append(3); pos.append(4); QVector hours; hours.append(4); hours.append(8); hours.append(16); hours.append(20); mScheduleView->slotPosHours(pos, hours, 1); } //void CScheduleView::slotCurrentScheduleDate(QDate date) TEST_F(test_scheduleview, slotCurrentScheduleDate) { mScheduleView->slotCurrentScheduleDate(QDate::currentDate()); } //void CScheduleView::slotScheduleShow(const bool isShow, const ScheduleDataInfo &out) TEST_F(test_scheduleview, slotScheduleShow) { mScheduleView->slotScheduleShow(false, getScheduleData().first()); mScheduleView->slotScheduleShow(true, getScheduleData().at(1)); } //void CScheduleView::slotUpdatePaint(const int topM) TEST_F(test_scheduleview, slotUpdatePaint) { const int top = 4; mScheduleView->slotUpdatePaint(top); } //void CScheduleView::slotUpdateScene() TEST_F(test_scheduleview, slotUpdateScene) { mScheduleView->slotUpdateScene(); } //void CScheduleView::updateSchedule() TEST_F(test_scheduleview, updateSchedule) { mScheduleView->updateSchedule(); } //void CScheduleView::updateAllday() TEST_F(test_scheduleview, updateAllday) { mScheduleView->updateAllday(); } //int CScheduleView::scheduleViewHeight() TEST_F(test_scheduleview, scheduleViewHeight) { mScheduleView->scheduleViewHeight(); } //getPixmap TEST_F(test_scheduleview, getPixmap) { QVector pos; pos.append(1); pos.append(2); pos.append(3); pos.append(4); QVector hours; hours.append(4); hours.append(8); hours.append(16); hours.append(20); mScheduleView->slotPosHours(pos, hours, 1); mScheduleView->setFixedSize(800, 500); QPixmap pixmap(mScheduleView->size()); mScheduleView->render(&pixmap); } TEST_F(test_scheduleview, paintEvent_01) { QPaintEvent e(QRect(0, 0, 100, 100)); mScheduleView->paintEvent(&e); } TEST_F(test_scheduleview, paintEvent_02) { mScheduleView->m_currentTimeType = 1; QPaintEvent e(QRect(0, 0, 100, 100)); mScheduleView->paintEvent(&e); } TEST_F(test_scheduleview, paintEvent_03) { Stub stub; stub.set(ADDR(QLocale, language), scheduleview_stub_language); QPaintEvent e(QRect(0, 0, 100, 100)); CScheduleView view; view.paintEvent(&e); } TEST_F(test_scheduleview, paintEvent_04) { Stub stub; stub.set(ADDR(QLocale, language), scheduleview_stub_language); QPaintEvent e(QRect(0, 0, 100, 100)); CScheduleView view; view.m_currentTimeType = 1; view.paintEvent(&e); } TEST_F(test_scheduleview, event_01) { Stub stub; stub.set(ADDR(touchGestureOperation, event), scheduleview_stub_event); stub.set(ADDR(touchGestureOperation, getTouchState), scheduleview_stub_getTouchState); QPaintEvent e(QRect(0, 0, 100, 100)); scheduleview_getTouchState = touchGestureOperation::T_STATE_NONE; CScheduleView view; view.event(&e); } TEST_F(test_scheduleview, event_02) { Stub stub; stub.set(ADDR(touchGestureOperation, event), scheduleview_stub_event); stub.set(ADDR(touchGestureOperation, getTouchState), scheduleview_stub_getTouchState); QPaintEvent e(QRect(0, 0, 100, 100)); scheduleview_getTouchState = touchGestureOperation::T_SINGLE_CLICK; CScheduleView view; view.event(&e); } TEST_F(test_scheduleview, event_03) { Stub stub; stub.set(ADDR(touchGestureOperation, event), scheduleview_stub_event); stub.set(ADDR(touchGestureOperation, getTouchState), scheduleview_stub_getTouchState); QPaintEvent e(QRect(0, 0, 100, 100)); scheduleview_getTouchState = touchGestureOperation::T_SLIDE; CScheduleView view; view.m_touchGesture.setUpdate(true); view.m_touchGesture.m_movingDir = touchGestureOperation::T_LEFT; view.event(&e); } TEST_F(test_scheduleview, event_04) { Stub stub; stub.set(ADDR(touchGestureOperation, event), scheduleview_stub_event); stub.set(ADDR(touchGestureOperation, getTouchState), scheduleview_stub_getTouchState); QPaintEvent e(QRect(0, 0, 100, 100)); scheduleview_getTouchState = touchGestureOperation::T_SLIDE; CScheduleView view; view.m_touchGesture.setUpdate(true); view.m_touchGesture.m_movingDir = touchGestureOperation::T_RIGHT; view.event(&e); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_scheduleview.h000066400000000000000000000007451473346337000323110ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULEVIEW_H #define TEST_SCHEDULEVIEW_H #include #include #include "customWidget/scheduleview.h" class test_scheduleview : public::QObject, public::testing::Test { public: test_scheduleview(); ~test_scheduleview(); protected: CScheduleView *mScheduleView = nullptr; }; #endif // TEST_SCHEDULEVIEW_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_timeedit.cpp000066400000000000000000000030211473346337000317470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_timeedit.h" #include #include #include test_timeedit::test_timeedit() { mTimeEdit = new CTimeEdit(); } test_timeedit::~test_timeedit() { delete mTimeEdit; mTimeEdit = nullptr; } //void CTimeEdit::setTime(QTime time) TEST_F(test_timeedit, setTime) { mTimeEdit->setTime(QTime(23, 59, 59)); } //QTime CTimeEdit::getTime() TEST_F(test_timeedit, getTime) { mTimeEdit->getTime(); } //setTimeFormat TEST_F(test_timeedit, setTimeFormat) { mTimeEdit->setTimeFormat(1); mTimeEdit->setTimeFormat(0); } //slotFocusDraw TEST_F(test_timeedit, slotFocusDraw) { mTimeEdit->slotFocusDraw(false); } //getPixmap TEST_F(test_timeedit, getPixmap) { mTimeEdit->slotFocusDraw(true); mTimeEdit->setFixedSize(200, 50); QPixmap pixmap(mTimeEdit->size()); mTimeEdit->render(&pixmap); } TEST_F(test_timeedit,focusInEvent) { QFocusEvent focusEvent_in( QEvent::FocusIn,Qt::FocusReason::TabFocusReason); QApplication::sendEvent(mTimeEdit,&focusEvent_in); } TEST_F(test_timeedit, slotActivated_01) { mTimeEdit->slotActivated(""); } TEST_F(test_timeedit, slotEditingFinished_01) { mTimeEdit->slotEditingFinished(); } TEST_F(test_timeedit, initUI_01) { mTimeEdit->initUI(); } TEST_F(test_timeedit, initConnection_01) { mTimeEdit->initConnection(); } TEST_F(test_timeedit, showPopup_01) { mTimeEdit->showPopup(); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_timeedit.h000066400000000000000000000007041473346337000314210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_TIMEEDIT_H #define TEST_TIMEEDIT_H #include #include #include "customWidget/timeedit.h" class test_timeedit : public QObject , public testing::Test { public: test_timeedit(); ~test_timeedit(); protected: CTimeEdit *mTimeEdit = nullptr; }; #endif // TEST_TIMEEDIT_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_titlewidget.cpp000066400000000000000000000034301473346337000324740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_titlewidget.h" #include #include #include #include test_titleWidget::test_titleWidget() { } void test_titleWidget::SetUp() { m_titleWidget = new CTitleWidget(); } void test_titleWidget::TearDown() { delete m_titleWidget; m_titleWidget = nullptr; } TEST_F(test_titleWidget,resizeEvent) { m_titleWidget->setFixedSize(600,30); QResizeEvent resizeEvent(QSize(500,30),QSize(600,30)); QApplication::sendEvent(m_titleWidget, &resizeEvent); m_titleWidget->setFixedSize(1900,30); QResizeEvent resizeEvent1(QSize(1920,30),QSize(1900,30)); QApplication::sendEvent(m_titleWidget, &resizeEvent1); } TEST_F(test_titleWidget,eventFilter) { DButtonBoxButton *boxbtn = m_titleWidget->findChild(); if(boxbtn){ QKeyEvent keyevent(QEvent::KeyPress,Qt::Key_Return,Qt::NoModifier); QApplication::sendEvent(boxbtn,&keyevent); } DSearchEdit *edit = m_titleWidget->findChild(); if(edit){ QFocusEvent focusEvent_in( QEvent::FocusIn,Qt::FocusReason::TabFocusReason); QApplication::sendEvent(edit->lineEdit(),&focusEvent_in); QFocusEvent focusEvent_out( QEvent::FocusOut,Qt::FocusReason::TabFocusReason); QApplication::sendEvent(edit->lineEdit(),&focusEvent_out); } DButtonBox *buttonBox = m_titleWidget->findChild(); if(buttonBox){ buttonBox->button(0)->setFocus(); buttonBox->button(0)->setChecked(true); QFocusEvent focusEvent_in(QEvent::FocusIn,Qt::FocusReason::ActiveWindowFocusReason); QApplication::sendEvent(buttonBox,&focusEvent_in); } }dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_titlewidget.h000066400000000000000000000010371473346337000321420ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_TITLEWIDGET_H #define TEST_TITLEWIDGET_H #include #include #include "customWidget/ctitlewidget.h" class test_titleWidget : public QObject,public testing::Test { Q_OBJECT public: explicit test_titleWidget(); void SetUp() override; void TearDown() override; signals: public slots: public: CTitleWidget *m_titleWidget = nullptr; }; #endif // TEST_TITLEWIDGET_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_todaybutton.cpp000066400000000000000000000050631473346337000325270ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_todaybutton.h" #include #include #include //#include test_todaybutton::test_todaybutton() { } void test_todaybutton::SetUp() { mTodayButton = new CTodayButton(); } void test_todaybutton::TearDown() { delete mTodayButton; mTodayButton = nullptr; } //void CTodayButton::setBColor(QColor normalC, QColor hoverC, QColor pressc, QColor normalC1, QColor hoverC1, QColor pressc1) TEST_F(test_todaybutton, setBColor) { mTodayButton->setBColor("#FFFFFF", "#000000", "#000000", "#FFFFFF", "#000000", "#000000"); } //void CTodayButton::setTColor(QColor normalC, QColor hoverC, QColor pressc) TEST_F(test_todaybutton, setTColor) { mTodayButton->setTColor(Qt::red, "#001A2E", "#0081FF"); } //void CTodayButton::setshadowColor(QColor sc) TEST_F(test_todaybutton, setshadowColor) { mTodayButton->setshadowColor("#FFFFFF"); } //test mouse event TEST_F(test_todaybutton, mouseEventTest) { QTest::mousePress(mTodayButton, Qt::LeftButton); QTest::mouseRelease(mTodayButton, Qt::LeftButton); QWidget *testWidget = new QWidget(); CTodayButton *toDayButton = new CTodayButton(testWidget); toDayButton->setGeometry(10, 10, 20, 20); testWidget->setFixedSize(50, 50); toDayButton->setFocus(Qt::TabFocusReason); QTest::mouseMove(testWidget, QPoint(2, 2)); QTest::mouseMove(testWidget, QPoint(15, 15)); QTest::mouseMove(testWidget, QPoint(45, 45)); QTest::keyClick(testWidget, Qt::Key_Tab); QTest::keyClick(testWidget->focusWidget(), Qt::Key_Tab); QTest::keyClick(testWidget->focusWidget(), Qt::Key_Tab); delete testWidget; } //test key event TEST_F(test_todaybutton, keyEventTest) { QTest::keyClick(mTodayButton, Qt::Key_Enter); QTest::keyClick(mTodayButton, Qt::Key_Tab); } //QTEST_MAIN(testGUI_toDayButton) TEST_F(test_todaybutton,focusOutEvent) { mTodayButton->setFocus(); QFocusEvent focusEvent_out( QEvent::FocusOut,Qt::FocusReason::TabFocusReason); QApplication::sendEvent(mTodayButton,&focusEvent_out); } TEST_F(test_todaybutton,enterEvent) { QEnterEvent enterEvent(QPointF(10,2),QPointF(11,3),QPointF(12,4)); QApplication::sendEvent(mTodayButton,&enterEvent); QEvent event(QEvent::Leave); QApplication::sendEvent(mTodayButton,&event); } TEST_F(test_todaybutton,keypressEvent) { QKeyEvent keyevent(QEvent::KeyPress,Qt::Key_Return,Qt::NoModifier); QApplication::sendEvent(mTodayButton,&keyevent); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_customWidget/test_todaybutton.h000066400000000000000000000010111473346337000321610ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_TODAYBUTTON_H #define TEST_TODAYBUTTON_H #include #include #include "customWidget/todaybutton.h" class test_todaybutton : public::QObject, public::testing::Test { Q_OBJECT public: test_todaybutton(); void SetUp() override; void TearDown() override; protected: CTodayButton *mTodayButton = nullptr; }; #endif // TEST_TODAYBUTTON_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dataManage/000077500000000000000000000000001473346337000257505ustar00rootroot00000000000000test_calendardatedatamanage.cpp000066400000000000000000000101441473346337000340460ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dataManage// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_calendardatedatamanage.h" //#include //test_calendardatedatamanage::test_calendardatedatamanage() //{ //} //void test_calendardatedatamanage::SetUp() //{ // calendarDateDataManager = new CalendarDateDataManager(); //} //void test_calendardatedatamanage::TearDown() //{ // delete calendarDateDataManager; // calendarDateDataManager = nullptr; //} ///** // *本类是为获取当前日期的类,所拿到的数据会根据当前时间不断变化,因此暂时不做返回值判断 // */ ////void CalendarDateDataManager::setSelectDate(const QDate &selectDate, const bool isSwitchYear) //TEST_F(test_calendardatedatamanage, setSelectDate) //{ // QDate selectDate(2020, 12, 25); // bool isSwitchYear = true; // calendarDateDataManager->setSelectDate(selectDate, isSwitchYear); // isSwitchYear = false; // calendarDateDataManager->setSelectDate(selectDate, isSwitchYear); //} ////QDate CalendarDateDataManager::getSelectDate() const //TEST_F(test_calendardatedatamanage, getSelectDate) //{ // QDate selectDate; // selectDate = calendarDateDataManager->getSelectDate(); // //qCInfo(CommonLogger) << selectDate; //} ////void CalendarDateDataManager::setCurrentDateTime(const QDateTime ¤tDateTime) //TEST_F(test_calendardatedatamanage, setCurrentDateTime) //{ // QDate date(2020, 12, 25); // QDateTime currentDateTime(date); // calendarDateDataManager->setCurrentDateTime(currentDateTime); //} ////QDateTime CalendarDateDataManager::getCurrentDate() const //TEST_F(test_calendardatedatamanage, getCurrentDate) //{ // QDateTime currentDateTime; // currentDateTime = calendarDateDataManager->getCurrentDate(); //} ////QMap > CalendarDateDataManager::getYearDate() //TEST_F(test_calendardatedatamanage, getYearDate) //{ // QMap > dateTime; // dateTime = calendarDateDataManager->getYearDate(); //} ////QVector CalendarDateDataManager::getWeekDate(const QDate &date) //TEST_F(test_calendardatedatamanage, getWeekDate) //{ // QDate selectDate(2020, 12, 25); // QVector dateV = calendarDateDataManager->getWeekDate(selectDate); //} ////void CalendarDateDataManager::setWeekFirstDay(const Qt::DayOfWeek &firstDay) //TEST_F(test_calendardatedatamanage, setWeekFirstDay) //{ // Qt::DayOfWeek firstDay(Qt::Sunday); // calendarDateDataManager->setWeekFirstDay(firstDay); //} //// Qt::DayOfWeek CalendarDateDataManager::getWeekFirstDay() //TEST_F(test_calendardatedatamanage, getWeekFirstDay) //{ // assert(Qt::Sunday == calendarDateDataManager->getWeekFirstDay()); //} ////void CalendarDateDataManager::setWeekDayFormatByID(const int &weekDayFormatID) //TEST_F(test_calendardatedatamanage, setWeekDayFormatByID) //{ // int setWeekDayFormatByID = 0; // calendarDateDataManager->setWeekDayFormatByID(setWeekDayFormatByID); // setWeekDayFormatByID = 1; // calendarDateDataManager->setWeekDayFormatByID(setWeekDayFormatByID); //} ////QString CalendarDateDataManager::getWeekDayFormat() const //TEST_F(test_calendardatedatamanage, getWeekDayFormat) //{ // QString getWEKfomat; // calendarDateDataManager->getWeekDayFormat(); //} ////ShowDateRange CalendarDateDataManager::getShowDateRange() const //TEST_F(test_calendardatedatamanage, getShowDateRange) //{ // ShowDateRange showDateR; // showDateR = calendarDateDataManager->getShowDateRange(); //} ////int CalendarDateDataManager::getWeekNumOfYear(const QDate &date) //TEST_F(test_calendardatedatamanage, getWeekNumOfYear) //{ // //2020-12-25 为第52周 // QDate date(2020, 12, 25); // assert(52 == calendarDateDataManager->getWeekNumOfYear(date)); //} //TEST_F(test_calendardatedatamanage, setDateFormatChanged) //{ // for (int i = 0; i < 10; ++i) { // calendarDateDataManager->setDateFormatChanged(i); // } //} ////setTimeFormatChanged //TEST_F(test_calendardatedatamanage, setTimeFormatChanged) //{ // calendarDateDataManager->setTimeFormatChanged(0); // calendarDateDataManager->setTimeFormatChanged(1); //} test_calendardatedatamanage.h000066400000000000000000000011371473346337000335150ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dataManage// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CALENDARDATEDATAMANAGE_H #define TEST_CALENDARDATEDATAMANAGE_H //#include "calendardatedatamanage.h" //#include "gtest/gtest.h" //#include //class test_calendardatedatamanage : public QObject, public::testing::Test //{ //public: // test_calendardatedatamanage(); // void SetUp() override; // void TearDown() override; //protected: // CalendarDateDataManager *calendarDateDataManager = nullptr; //}; #endif // TEST_CALENDARDATEDATAMANAGE_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dataManage/test_schedulecoormanage.cpp000066400000000000000000000125471473346337000333540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_schedulecoormanage.h" //#include //test_schedulecoormanage::test_schedulecoormanage() //{ // cScheduleCoorManage = new CScheduleCoorManage(); //} //test_schedulecoormanage::~test_schedulecoormanage() //{ // delete cScheduleCoorManage; //} ////void CScheduleCoorManage::setRange(int w, int h, QDate begindate, QDate enddate, int rightmagin) //TEST_F(test_schedulecoormanage, setRange) //{ // int w = 100; // int h = 100; // QDate begindate(2020, 12, 01); // QDate enddate(2020, 12, 31); // int rightmagin = 1; // cScheduleCoorManage->setRange(w, h, begindate, enddate, rightmagin); //} ////void CScheduleCoorManage::setDateRange(QDate begindate, QDate enddate) //TEST_F(test_schedulecoormanage, setDateRange) //{ // QDate begindate(2020, 12, 01); // QDate enddate(2020, 12, 21); // cScheduleCoorManage->setDateRange(begindate, enddate); // cScheduleCoorManage->setDateRange(enddate, begindate); // int w = 100; // int h = 100; // QDate m_begindate(2020, 12, 11); // QDate m_enddate(2020, 12, 31); // int rightmagin = 1; // cScheduleCoorManage->setRange(w, h, m_begindate, m_enddate, rightmagin); // cScheduleCoorManage->setDateRange(begindate, enddate); //} ///** // * @brief test_schedulecoormanage, getDrawRegion // * (QDateTime begintime, QDateTime endtime) // * (QDateTime begintime, QDateTime endtime, int index, int coount) // * (QDate date, QDateTime begintime, QDateTime endtime, int index, int coount, int maxnum, int type) // */ //TEST_F(test_schedulecoormanage, getDrawRegion) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // QString end = "2020-12-21 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // cScheduleCoorManage->getDrawRegion(begindate, enddate); // cScheduleCoorManage->getDrawRegion(enddate, begindate); // int index = 2; // int coount = 1; // cScheduleCoorManage->getDrawRegion(begindate, enddate, index, coount); // cScheduleCoorManage->getDrawRegion(enddate, begindate, index, coount); // QDate date(2020, 12, 31); // int maxnum = 3; // int type = 0; // cScheduleCoorManage->getDrawRegion(date, begindate, enddate, index, coount, maxnum, type); // cScheduleCoorManage->getDrawRegion(date, enddate, begindate, index, coount, maxnum, type); // int w = 100; // int h = 100; // QDate m_begindate(2020, 11, 11); // QDate m_enddate(2020, 12, 31); // int rightmagin = 1; // cScheduleCoorManage->setRange(w, h, m_begindate, m_enddate, rightmagin); // cScheduleCoorManage->getDrawRegion(begindate, enddate); // cScheduleCoorManage->getDrawRegion(begindate, enddate, index, coount); // coount = 5; // cScheduleCoorManage->getDrawRegion(date, begindate, enddate, index, coount, maxnum, type); // index = 5; // cScheduleCoorManage->getDrawRegion(date, begindate, enddate, index, coount, maxnum, type); //} ////QRectF CScheduleCoorManage::getDrawRegionF(QDateTime begintime, QDateTime endtime) //TEST_F(test_schedulecoormanage, getDrawRegionF) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // QString end = "2020-12-21 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // cScheduleCoorManage->getDrawRegionF(begindate, enddate); // cScheduleCoorManage->getDrawRegionF(enddate, begindate); // int w = 100; // int h = 100; // QDate m_begindate(2020, 11, 11); // QDate m_enddate(2020, 12, 31); // int rightmagin = 1; // cScheduleCoorManage->setRange(w, h, m_begindate, m_enddate, rightmagin); // cScheduleCoorManage->getDrawRegionF(begindate, enddate); //} ////QRectF CScheduleCoorManage::getAllDayDrawRegion(QDate begin, QDate end) //TEST_F(test_schedulecoormanage, getAllDayDrawRegion) //{ // QDate begindate(2020, 12, 01); // QDate enddate(2020, 12, 31); // cScheduleCoorManage->getAllDayDrawRegion(begindate, enddate); // cScheduleCoorManage->getAllDayDrawRegion(enddate, begindate); //} ////QDateTime CScheduleCoorManage::getDate(QPointF pos) //TEST_F(test_schedulecoormanage, getDate) //{ // QPointF pos(0, 0); // QDateTime dateTime = cScheduleCoorManage->getDate(pos); // qCInfo(CommonLogger) << dateTime; // QPointF pos1(-1, 0); // QDateTime dateTime1 = cScheduleCoorManage->getDate(pos1); //} ////QDate CScheduleCoorManage::getsDate(QPointF pos) //TEST_F(test_schedulecoormanage, getsDate) //{ // QPointF pos(0, 0); // QDate date = cScheduleCoorManage->getsDate(pos); // qCInfo(CommonLogger) << date; // QPointF pos1(-1, 0); // cScheduleCoorManage->getsDate(pos1); //} ////float CScheduleCoorManage::getHeight(const QTime &time) //TEST_F(test_schedulecoormanage, getHeight) //{ // QTime time(18, 8, 9, 30); // assert(0 <= cScheduleCoorManage->getHeight(time)); //} ////QDate getBegindate() //TEST_F(test_schedulecoormanage, getBegindate) //{ // int w = 100; // int h = 100; // QDate m_begindate(2020, 11, 11); // QDate m_enddate(2020, 12, 31); // int rightmagin = 1; // cScheduleCoorManage->setRange(w, h, m_begindate, m_enddate, rightmagin); // assert(m_begindate == cScheduleCoorManage->getBegindate()); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dataManage/test_schedulecoormanage.h000066400000000000000000000010431473346337000330060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULECOORMANAGE_H #define TEST_SCHEDULECOORMANAGE_H //#include "schedulecoormanage.h" //#include "gtest/gtest.h" //#include //class test_schedulecoormanage : public QObject, public::testing::Test //{ //public: // test_schedulecoormanage(); // ~test_schedulecoormanage(); //protected: // CScheduleCoorManage *cScheduleCoorManage = nullptr; //}; #endif // TEST_SCHEDULECOORMANAGE_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dataManage/test_scheduledatamanage.cpp000066400000000000000000000017531473346337000333200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_scheduledatamanage.h" //test_scheduledatamanage::test_scheduledatamanage() //{ // datamanage = new CScheduleDataManage(); //} //test_scheduledatamanage::~test_scheduledatamanage() //{ // delete datamanage; //} ////bool CScheduleDataManage::getSearchResult(QDate date) //TEST_F(test_scheduledatamanage, getSearchResult) //{ // //QDate date(2020, 12, 01); // //datamanage->getSearchResult(date); //} ////CScheduleDataManage *CScheduleDataManage::getScheduleDataManage() //TEST_F(test_scheduledatamanage, getScheduleDataManage) //{ // datamanage->getScheduleDataManage(); //} ////QColor CScheduleDataManage::getSystemActiveColor() //TEST_F(test_scheduledatamanage, getSystemActiveColor) //{ // datamanage->getSystemActiveColor(); //} ////int getTheme() //TEST_F(test_scheduledatamanage, getTheme) //{ // datamanage->getTheme(); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dataManage/test_scheduledatamanage.h000066400000000000000000000010321473346337000327530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULEDATAMANAGE_H #define TEST_SCHEDULEDATAMANAGE_H //#include "scheduledatamanage.h" //#include "gtest/gtest.h" //#include //class test_scheduledatamanage : public QObject, public::testing::Test //{ //public: // test_scheduledatamanage(); // ~test_scheduledatamanage(); //protected: // CScheduleDataManage *datamanage = nullptr; //}; #endif // TEST_SCHEDULEDATAMANAGE_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dialog/000077500000000000000000000000001473346337000251655ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dialog/test_myscheduleview.cpp000066400000000000000000000065551473346337000320000ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_myscheduleview.h" //#include "../dialog_stub.h" //#include //#include //QVector getScheduleViewData() //{ // ScheduleDataInfo schedule1, schedule2; // QDateTime currentDateTime = QDateTime::currentDateTime(); // schedule1.setID(1); // schedule1.setBeginDateTime(currentDateTime); // schedule1.setEndDateTime(currentDateTime.addDays(1)); // schedule1.setTitleName("scheduleOne"); // schedule1.setAllDay(true); // schedule1.setType(1); // schedule1.setRecurID(0); // schedule2.setID(2); // schedule2.setBeginDateTime(currentDateTime.addDays(1)); // schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); // schedule2.setTitleName("scheduleTwo"); // schedule2.setAllDay(true); // schedule2.setType(2); // schedule2.setRecurID(0); // QVector scheduleList{}; // scheduleList.append(schedule1); // scheduleList.append(schedule2); // return scheduleList; //} //test_myscheduleview::test_myscheduleview() //{ // ScheduleDataInfo scheduleinfo = getScheduleViewData().first(); // mScheduleView = new CMyScheduleView(scheduleinfo); //} //test_myscheduleview::~test_myscheduleview() //{ // delete mScheduleView; // mScheduleView = nullptr; //} ////void CMyScheduleView::setLabelTextColor(const int type) //TEST_F(test_myscheduleview, setLabelTextColor) //{ // mScheduleView->setLabelTextColor(1); // mScheduleView->setLabelTextColor(2); //} //// //TEST_F(test_myscheduleview, CMyScheduleView) //{ // ScheduleDataInfo scheduleinfo; // QDateTime currentDateTime = QDateTime::currentDateTime(); // scheduleinfo.setID(1); // scheduleinfo.setBeginDateTime(currentDateTime); // scheduleinfo.setEndDateTime(currentDateTime.addDays(1)); // scheduleinfo.setTitleName("测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试" // "测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试" // "测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试" // "测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试" // "测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试" // "测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试" // "测试测试测试测试测试测试测试测试测试测试测试测试测试测试"); // scheduleinfo.setAllDay(true); // scheduleinfo.setType(4); // scheduleinfo.setRecurID(0); // CMyScheduleView scheduleView(scheduleinfo); //} ////FontChange //TEST_F(test_myscheduleview, FontChange) //{ // QEvent event(QEvent::FontChange); // QApplication::sendEvent(mScheduleView, &event); //} ////slotBtClick //TEST_F(test_myscheduleview, slotBtClick) //{ // Stub stub; // calendarDDialogExecStub(stub); // mScheduleView->slotBtClick(1, "tt"); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dialog/test_myscheduleview.h000066400000000000000000000007561473346337000314420ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MYSCHEDULEVIEW_H #define TEST_MYSCHEDULEVIEW_H #include #include #include "dialog/myscheduleview.h" class test_myscheduleview : public::QObject, public::testing::Test { public: test_myscheduleview(); ~test_myscheduleview(); protected: CMyScheduleView *mScheduleView = nullptr; }; #endif // TEST_MYSCHEDULEVIEW_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dialog/test_schedulectrldlg.cpp000066400000000000000000000044241473346337000321040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_schedulectrldlg.h" #include #include test_schedulectrldlg::test_schedulectrldlg() { mScheduleCtrlDlg = new CScheduleCtrlDlg(); } test_schedulectrldlg::~test_schedulectrldlg() { delete mScheduleCtrlDlg; mScheduleCtrlDlg = nullptr; } //void CScheduleCtrlDlg::setTheMe(const int type) TEST_F(test_schedulectrldlg, setTheMe) { mScheduleCtrlDlg->setTheMe(1); mScheduleCtrlDlg->setTheMe(2); } //void CScheduleCtrlDlg::buttonJudge(int id) TEST_F(test_schedulectrldlg, buttonJudge) { mScheduleCtrlDlg->buttonJudge(1); } //QAbstractButton *CScheduleCtrlDlg::addPushButton(QString btName, bool type) TEST_F(test_schedulectrldlg, addPushButton) { mScheduleCtrlDlg->addPushButton("schedule", true); mScheduleCtrlDlg->addPushButton("schedule", false); } //QAbstractButton *CScheduleCtrlDlg::addsuggestButton(QString btName, bool type) TEST_F(test_schedulectrldlg, addsuggestButton) { mScheduleCtrlDlg->addsuggestButton("schedule", true); mScheduleCtrlDlg->addsuggestButton("schedule", false); } //QAbstractButton *CScheduleCtrlDlg::addWaringButton(QString btName, bool type) TEST_F(test_schedulectrldlg, addWaringButton) { mScheduleCtrlDlg->addsuggestButton("schedule", true); mScheduleCtrlDlg->addsuggestButton("schedule", false); } //void CScheduleCtrlDlg::setText(QString str) TEST_F(test_schedulectrldlg, setText) { mScheduleCtrlDlg->setText("schedule"); } //void CScheduleCtrlDlg::setInformativeText(QString str) TEST_F(test_schedulectrldlg, setInfomativeText) { mScheduleCtrlDlg->setInformativeText("schedule"); } //int CScheduleCtrlDlg::clickButton() TEST_F(test_schedulectrldlg, clickButton) { mScheduleCtrlDlg->clickButton(); } //changeEvent TEST_F(test_schedulectrldlg, changeEvent) { QEvent event(QEvent::FontChange); mScheduleCtrlDlg->setText(tr("You are changing the repeating rule of this event.")); mScheduleCtrlDlg->setInformativeText(tr("Do you want to change all occurrences?")); mScheduleCtrlDlg->addPushButton(tr("Cancel", "button"), true); mScheduleCtrlDlg->addWaringButton(tr("Change All"), true); QApplication::sendEvent(mScheduleCtrlDlg, &event); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dialog/test_schedulectrldlg.h000066400000000000000000000007721473346337000315530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULECTRLDLG_H #define TEST_SCHEDULECTRLDLG_H #include #include #include "dialog/schedulectrldlg.h" class test_schedulectrldlg : public::QObject, public::testing::Test { public: test_schedulectrldlg(); ~test_schedulectrldlg(); protected: CScheduleCtrlDlg *mScheduleCtrlDlg = nullptr; }; #endif // TEST_SCHEDULECTRLDLG_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dialog/test_scheduledlg.cpp000066400000000000000000000131441473346337000312160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_scheduledlg.h" #include "../cscheduledbusstub.h" #include "../dialog_stub.h" #include test_scheduledlg::test_scheduledlg() { mScheduleDlg = new CScheduleDlg(1); } test_scheduledlg::~test_scheduledlg() { delete mScheduleDlg; mScheduleDlg = nullptr; } QVector getScheduleDlgData() { ScheduleDataInfo schedule1, schedule2; QDateTime currentDateTime = QDateTime::currentDateTime(); schedule1.setID(1); schedule1.setBeginDateTime(currentDateTime); schedule1.setEndDateTime(currentDateTime.addDays(1)); schedule1.setTitleName("scheduleOne"); schedule1.setAllDay(true); schedule1.setType(1); schedule1.setRecurID(0); schedule2.setID(2); schedule2.setBeginDateTime(currentDateTime.addDays(1)); schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); schedule2.setTitleName("scheduleTwo"); schedule2.setAllDay(true); schedule2.setType(2); schedule2.setRecurID(0); QVector scheduleList{}; scheduleList.append(schedule1); scheduleList.append(schedule2); return scheduleList; } //void CScheduleDlg::setData(const ScheduleDataInfo &info) TEST_F(test_scheduledlg, setData) { mScheduleDlg->setData(getScheduleDlgData().first()); } //void CScheduleDlg::setDate(const QDateTime &date) TEST_F(test_scheduledlg, setDate) { QDateTime datetime1 = QDateTime(QDate::currentDate(), QTime(23, 54, 55)); mScheduleDlg->setDate(datetime1); QDateTime datetime11 = QDateTime(QDate::currentDate(), QTime(13, 54, 55)); mScheduleDlg->setDate(datetime1); QDateTime datetime2 = QDateTime(QDate::currentDate(), QTime(13, 40, 55)); mScheduleDlg->setDate(datetime2); } //void CScheduleDlg::setAllDay(bool flag) TEST_F(test_scheduledlg, setAllDay) { mScheduleDlg->setAllDay(true); } //bool CScheduleDlg::clickOkBtn() TEST_F(test_scheduledlg, clickOkBtn) { Stub stub; cscheduleDbusStub(stub); mScheduleDlg->clickOkBtn(); //begindatetime < enddatetime ScheduleDataInfo schedule; QDateTime currentDateTime = QDateTime::currentDateTime(); schedule.setID(1); schedule.setBeginDateTime(currentDateTime); schedule.setEndDateTime(currentDateTime.addDays(-1)); schedule.setTitleName("scheduleOne"); schedule.setAllDay(true); schedule.setType(1); schedule.setRecurID(0); mScheduleDlg->setData(schedule); mScheduleDlg->clickOkBtn(); // mScheduleDlg->m_type = 1; schedule.setEndDateTime(currentDateTime.addDays(1)); mScheduleDlg->setData(schedule); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_rmindCombox->setCurrentIndex(3); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_rmindCombox->setCurrentIndex(4); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_rmindCombox->setCurrentIndex(5); mScheduleDlg->clickOkBtn(); schedule.setAllDay(false); mScheduleDlg->setData(schedule); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_rmindCombox->setCurrentIndex(3); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_rmindCombox->setCurrentIndex(4); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_rmindCombox->setCurrentIndex(5); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_endrepeatCombox->setCurrentIndex(2); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_endrepeatCombox->setCurrentIndex(3); mScheduleDlg->clickOkBtn(); } //void CScheduleDlg::slotBtClick(int buttonIndex, QString buttonName) TEST_F(test_scheduledlg, slotBtClick) { Stub stub; cscheduleDbusStub(stub); mScheduleDlg->slotBtClick(0, "ok"); mScheduleDlg->slotBtClick(1, "ok"); } //void CScheduleDlg::slotTextChange() TEST_F(test_scheduledlg, slotTextChange) { mScheduleDlg->slotTextChange(); } //void CScheduleDlg::slotendrepeatTextchange() TEST_F(test_scheduledlg, slotendrepeaTextchange) { mScheduleDlg->slotendrepeatTextchange(); } //void CScheduleDlg::slotBDateEidtInfo(const QDate &date) TEST_F(test_scheduledlg, slotBDateEidtInfo) { mScheduleDlg->slotBDateEidtInfo(QDate::currentDate()); } //void CScheduleDlg::slotallDayStateChanged(int state) TEST_F(test_scheduledlg, slotallDayStateCheanged) { mScheduleDlg->slotallDayStateChanged(1); mScheduleDlg->slotallDayStateChanged(0); } //void CScheduleDlg::slotbRpeatactivated(int index) TEST_F(test_scheduledlg, slotbRpearactivated) { mScheduleDlg->slotbRpeatactivated(0); mScheduleDlg->slotbRpeatactivated(2); } //void CScheduleDlg::sloteRpeatactivated(int index) TEST_F(test_scheduledlg, sloteRpearactivated) { mScheduleDlg->sloteRpeatactivated(0); mScheduleDlg->sloteRpeatactivated(1); mScheduleDlg->sloteRpeatactivated(2); } //void CScheduleDlg::setTheMe(const int type) TEST_F(test_scheduledlg, setTheMe) { mScheduleDlg->setTheMe(1); mScheduleDlg->setTheMe(2); } // TEST_F(test_scheduledlg, exec) { Stub stub; calendarDDialogExecStub(stub); mScheduleDlg->exec(); } //setDateFormat TEST_F(test_scheduledlg, setDateFormat) { for (int i = 0; i < 10; ++i) { mScheduleDlg->setDateFormat(i); } } //setTimeFormat TEST_F(test_scheduledlg, setTimeFormat) { mScheduleDlg->setTimeFormat(0); mScheduleDlg->setTimeFormat(1); } //mouseMoveEvent TEST_F(test_scheduledlg, mouseMoveEvent) { QTest::mouseMove(mScheduleDlg); } //updateDateTimeFormat TEST_F(test_scheduledlg, updateDateTimeFormat) { mScheduleDlg->updateDateTimeFormat(); } //changeEvent TEST_F(test_scheduledlg, changeEvent) { QEvent event(QEvent::FontChange); QApplication::sendEvent(mScheduleDlg, &event); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dialog/test_scheduledlg.h000066400000000000000000000007251473346337000306640ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULEDLG_H #define TEST_SCHEDULEDLG_H #include #include #include "dialog/scheduledlg.h" class test_scheduledlg : public::QObject, public::testing::Test { public: test_scheduledlg(); ~test_scheduledlg(); protected: CScheduleDlg *mScheduleDlg = nullptr; }; #endif // TEST_SCHEDULEDLG_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dialog/test_scheduletypeeditdlg.cpp000066400000000000000000000023031473346337000327610ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_scheduletypeeditdlg.h" //test_scheduletypeeditdlg::test_scheduletypeeditdlg() //{ //} //TEST_F(test_scheduletypeeditdlg, slotEditTextChanged_001) //{ // mWidget->m_typeText = "123"; // mWidget->slotEditTextChanged("21212312312315456489512315489456123165489456123135485"); // EXPECT_EQ(mWidget->m_lineEdit->text(), "123"); //} //TEST_F(test_scheduletypeeditdlg, slotEditTextChanged_002) //{ // mWidget->m_typeText = "123"; // mWidget->slotEditTextChanged(""); // EXPECT_FALSE(mWidget->getButton(1)->isEnabled()); //} //TEST_F(test_scheduletypeeditdlg, slotEditTextChanged_003) //{ // mWidget->m_typeText = "123"; // mWidget->slotEditTextChanged(" "); // EXPECT_FALSE(mWidget->getButton(1)->isEnabled()); //} //TEST_F(test_scheduletypeeditdlg, slotFocusChanged_001) //{ // mWidget->m_lineEdit->setText(""); // mWidget->slotFocusChanged(false); //} //TEST_F(test_scheduletypeeditdlg, slotBtnCancel_001) //{ // mWidget->slotBtnCancel(); //} //TEST_F(test_scheduletypeeditdlg, slotBtnNext_001) //{ // mWidget->slotBtnNext(); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_dialog/test_scheduletypeeditdlg.h000066400000000000000000000012761473346337000324360ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULETYPEEDITDLG_H #define TEST_SCHEDULETYPEEDITDLG_H //#include "scheduletypeeditdlg.h" //#include //#include //#include //class test_scheduletypeeditdlg: public::testing::Test //{ //public: // test_scheduletypeeditdlg(); // virtual void SetUp() // { // mWidget = new ScheduleTypeEditDlg(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // ScheduleTypeEditDlg *mWidget = nullptr; //}; #endif // TEST_SCHEDULETYPEEDITDLG_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/000077500000000000000000000000001473346337000255735ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/keypressstub.cpp000066400000000000000000000060701473346337000310450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "keypressstub.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "view/cgraphicsscene.h" #include "KeyPress/cscenetabkeydeal.h" #include bool itemFocus = false; bool scene_activeSwitching = false; bool WeekDayBackgroundItem_hasNextItem = false; bool WeekDayBackgroundItem_showFocus = false; QGraphicsItem *SceneCurrentItem = nullptr; CFocusItem::CItemType focusItemType = CFocusItem::CBACK; QDate itemDate = QDate::currentDate(); //bbbbbbbbbbbbb CFocusItem stub bbbbbbbbbbbbbbbbbbbbbb bool getItemFocus_stub() { return itemFocus; } CFocusItem::CItemType getItemType_stub() { return focusItemType; } //eeeeeeeeeeeeeeeeeeeeeee // CGraphicsScene stub void setActiveSwitching_stub(bool activeSwitching) { scene_activeSwitching = activeSwitching; } QGraphicsItem *getCurrentFocusItem_stub(void *obj) { Q_UNUSED(obj) return SceneCurrentItem; } void signalSwitchView_stub(const QDate &focusDate, bool setItemFocus = false) { Q_UNUSED(focusDate); Q_UNUSED(setItemFocus); } // CWeekDayBackgroundItem stub void setItemFocus(void *obj, bool isFocus) { Q_UNUSED(obj) itemFocus = isFocus; } bool hasNextSubItem_stub(void *obj) { Q_UNUSED(obj) return WeekDayBackgroundItem_hasNextItem; } bool showFocus_stub(void *obj) { Q_UNUSED(obj) return WeekDayBackgroundItem_showFocus; } void initState_stub(void *obj) { Q_UNUSED(obj)} QDate getDate_stub(void *obj) { Q_UNUSED(obj) return itemDate; } // SceneTabHandle stub //bool focusItemDeal_stub(CSceneBackgroundItem *item, CGraphicsScene *scene) //{ // Q_UNUSED(item) // Q_UNUSED(scene) // return false; //} KeyPressStub::KeyPressStub() { SceneCurrentItem = new CWeekDayBackgroundItem(); typedef void (*fptr)(CWeekDayBackgroundItem *, bool); fptr A_foo = (fptr)(&CWeekDayBackgroundItem::setItemFocus); //obtaining an address stub.set(ADDR(CFocusItem, getItemFocus), getItemFocus_stub); stub.set(ADDR(CFocusItem, getItemType), getItemType_stub); stub.set(A_foo, setItemFocus); stub.set(ADDR(CGraphicsScene, setActiveSwitching), setActiveSwitching_stub); stub.set(ADDR(CGraphicsScene, signalSwitchView), signalSwitchView_stub); stub.set(ADDR(CGraphicsScene, getCurrentFocusItem), getCurrentFocusItem_stub); stub.set(ADDR(CWeekDayBackgroundItem, hasNextSubItem), hasNextSubItem_stub); stub.set(ADDR(CWeekDayBackgroundItem, showFocus), showFocus_stub); stub.set(ADDR(CWeekDayBackgroundItem, initState), initState_stub); stub.set(ADDR(CWeekDayBackgroundItem, getDate), getDate_stub); // typedef bool (*sceneTabKeyHandle)(CSceneTabKeyDeal *, CSceneBackgroundItem *, CGraphicsScene *); // sceneTabKeyHandle SceneTabHandle = (sceneTabKeyHandle)(&CSceneTabKeyDeal::focusItemDeal); // stub.set(SceneTabHandle, focusItemDeal_stub); } KeyPressStub::~KeyPressStub() { delete SceneCurrentItem; SceneCurrentItem = nullptr; } Stub &KeyPressStub::getStub() { return stub; } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/keypressstub.h000066400000000000000000000012751473346337000305140ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef KEYPRESSSTUB_H #define KEYPRESSSTUB_H #include "../third-party_stub/stub.h" #include "view/graphicsItem/cfocusitem.h" #include class QGraphicsItem; class KeyPressStub { public: KeyPressStub(); ~KeyPressStub(); Stub &getStub(); private: Stub stub; }; extern bool itemFocus; extern bool scene_activeSwitching; extern bool WeekDayBackgroundItem_hasNextItem; extern bool WeekDayBackgroundItem_showFocus; extern QGraphicsItem *SceneCurrentItem; extern CFocusItem::CItemType focusItemType; extern QDate itemDate; #endif // KEYPRESSSTUB_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_calldaykeyleftdeal.cpp000066400000000000000000000012721473346337000331630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_calldaykeyleftdeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "KeyPress/calldaykeyleftdeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CAllDayKeyLeftDeal::test_CAllDayKeyLeftDeal(QObject *parent) : QObject(parent) { } TEST(LeftHandle_test, test_CAllDayKeyLeftDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CAllDayKeyLeftDeal alldayLeftDeal(scene); alldayLeftDeal.dealEvent(); delete scene; } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_calldaykeyleftdeal.h000066400000000000000000000006641473346337000326340ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CALLDAYKEYLEFTDEAL_H #define TEST_CALLDAYKEYLEFTDEAL_H #include #include class test_CAllDayKeyLeftDeal : public QObject { Q_OBJECT public: explicit test_CAllDayKeyLeftDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CALLDAYKEYLEFTDEAL_Hdde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_calldaykeyrightdeal.cpp000066400000000000000000000013031473346337000333410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_calldaykeyrightdeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "KeyPress/calldaykeyrightdeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CAllDayKeyRightDeal::test_CAllDayKeyRightDeal(QObject *parent) : QObject(parent) { } TEST(RightHandle_test, test_CAllDayKeyRightDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CAllDayKeyRightDeal alldayRightDeal(scene); alldayRightDeal.dealEvent(); delete scene; } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_calldaykeyrightdeal.h000066400000000000000000000006461473346337000330170ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CALLDAYKEYRIGHTDEAL_H #define TEST_CALLDAYKEYRIGHTDEAL_H #include class test_CAllDayKeyRightDeal : public QObject { Q_OBJECT public: explicit test_CAllDayKeyRightDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CALLDAYKEYRIGHTDEAL_Hdde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_ckeydowndeal.cpp000066400000000000000000000012121473346337000320030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_ckeydowndeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "KeyPress/ckeydowndeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CKeyDownDeal::test_CKeyDownDeal(QObject *parent) : QObject(parent) { } TEST(DownHandle_test, test_CKeyDownDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CKeyDownDeal downDeal(scene); downDeal.dealEvent(); delete scene; } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_ckeydowndeal.h000066400000000000000000000006031473346337000314530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CKEYDOWNDEAL_H #define TEST_CKEYDOWNDEAL_H #include class test_CKeyDownDeal : public QObject { Q_OBJECT public: explicit test_CKeyDownDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CKEYDOWNDEAL_Hdde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_ckeyenabledeal.cpp000066400000000000000000000031571473346337000322740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_ckeyenabledeal.h" #include "../third-party_stub/stub.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "../dialog_stub.h" #include "view/graphicsItem/scheduleitem.h" #include test_CKeyEnableDeal::test_CKeyEnableDeal() { } void test_CKeyEnableDeal::SetUp() { delete SceneCurrentItem; SceneCurrentItem = new CSceneBackgroundItem(CSceneBackgroundItem::OnMonthView); calendarDDialogExecStub(stub.getStub()); scene = QSharedPointer(new CGraphicsScene()); view = QSharedPointer(new QGraphicsView()); view->setScene(scene.get()); enableDeal = QSharedPointer(new CKeyEnableDeal(scene.get())); } void test_CKeyEnableDeal::TearDown() { } TEST_F(test_CKeyEnableDeal, focusItemDeal_Back) { enableDeal->dealEvent(); } TEST_F(test_CKeyEnableDeal, focusItemDeal_Back_addDay) { itemDate = QDate::currentDate().addDays(1); enableDeal->dealEvent(); } CFocusItem *focusItem = nullptr; CFocusItem *getFocusItem_stub() { return focusItem; } TEST_F(test_CKeyEnableDeal, focusItemDeal_Item) { QRectF rect(0, 0, 100, 100); focusItem = new CScheduleItem(rect); stub.getStub().set(ADDR(CSceneBackgroundItem, getFocusItem), getFocusItem_stub); focusItemType = CFocusItem::CITEM; enableDeal->dealEvent(); delete focusItem; focusItem = nullptr; } TEST_F(test_CKeyEnableDeal, focusItemDeal_Other) { focusItemType = CFocusItem::COTHER; enableDeal->dealEvent(); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_ckeyenabledeal.h000066400000000000000000000013201473346337000317270ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CKEYENABLEDEAL_H #define TEST_CKEYENABLEDEAL_H #include "keypressstub.h" #include "view/cgraphicsscene.h" #include "gtest/gtest.h" #include "KeyPress/ckeyenabledeal.h" #include class test_CKeyEnableDeal : public QObject , public ::testing::Test { Q_OBJECT public: test_CKeyEnableDeal(); void SetUp(); void TearDown(); public: KeyPressStub stub; QSharedPointer scene; QSharedPointer view; QSharedPointer enableDeal; }; extern CFocusItem *focusItem; #endif // TEST_CKEYENABLEDEAL_Hdde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_ckeyleftdeal.cpp000066400000000000000000000012121473346337000317660ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_ckeyleftdeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "KeyPress/ckeyleftdeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CKeyLeftDeal::test_CKeyLeftDeal(QObject *parent) : QObject(parent) { } TEST(LeftHandle_test, test_CKeyLeftDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CKeyLeftDeal leftDeal(scene); leftDeal.dealEvent(); delete scene; } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_ckeyleftdeal.h000066400000000000000000000006031473346337000314360ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CKEYLEFTDEAL_H #define TEST_CKEYLEFTDEAL_H #include class test_CKeyLeftDeal : public QObject { Q_OBJECT public: explicit test_CKeyLeftDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CKEYLEFTDEAL_Hdde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_ckeypressprxy.cpp000066400000000000000000000015321473346337000322720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_ckeypressprxy.h" //#include "ckeyleftdeal.h" //test_CKeyPressPrxy::test_CKeyPressPrxy() //{ // keyPressPrxy = QSharedPointer(new CKeyPressPrxy); //} //TEST_F(test_CKeyPressPrxy, keyPressDeal_NoEvent) //{ // ASSERT_FALSE(keyPressPrxy->keyPressDeal(Qt::Key_Tab)); //} //TEST_F(test_CKeyPressPrxy, keyPressDeal) //{ // keyPressPrxy->addkeyPressDeal(new CKeyLeftDeal()); // ASSERT_FALSE(keyPressPrxy->keyPressDeal(Qt::Key_Left)); //} //TEST_F(test_CKeyPressPrxy, removeDeal) //{ // CKeyLeftDeal *leftDeal = new CKeyLeftDeal(); // keyPressPrxy->addkeyPressDeal(leftDeal); // keyPressPrxy->removeDeal(leftDeal); // ASSERT_FALSE(keyPressPrxy->keyPressDeal(Qt::Key_Left)); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_ckeypressprxy.h000066400000000000000000000011101473346337000317270ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CKEYPRESSPRXY_H #define TEST_CKEYPRESSPRXY_H //#include "configsettings.h" //#include "gtest/gtest.h" //#include "ckeypressprxy.h" //#include //#include //class test_CKeyPressPrxy : public QObject // , public ::testing::Test //{ // Q_OBJECT //public: // test_CKeyPressPrxy(); //signals: //public slots: //public: // QSharedPointer keyPressPrxy; //}; #endif // TEST_CKEYPRESSPRXY_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_ckeyrightdeal.cpp000066400000000000000000000012231473346337000321530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_ckeyrightdeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "KeyPress/ckeyrightdeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CKeyRightDeal::test_CKeyRightDeal(QObject *parent) : QObject(parent) { } TEST(RightHandle_test, test_CKeyRightDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CKeyRightDeal rightDeal(scene); rightDeal.dealEvent(); delete scene; } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_ckeyrightdeal.h000066400000000000000000000006101473346337000316170ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CKEYRIGHTDEAL_H #define TEST_CKEYRIGHTDEAL_H #include class test_CKeyRightDeal : public QObject { Q_OBJECT public: explicit test_CKeyRightDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CKEYRIGHTDEAL_Hdde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_ckeyupdeal.cpp000066400000000000000000000011701473346337000314630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_ckeyupdeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "KeyPress/ckeyupdeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CKeyUpDeal::test_CKeyUpDeal(QObject *parent) : QObject(parent) { } TEST(UpHandle_test, test_CKeyUpDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CKeyUpDeal upDeal(scene); upDeal.dealEvent(); delete scene; } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_ckeyupdeal.h000066400000000000000000000005711473346337000311340ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CKEYUPDEAL_H #define TEST_CKEYUPDEAL_H #include class test_CKeyUpDeal : public QObject { Q_OBJECT public: explicit test_CKeyUpDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CKEYUPDEAL_Hdde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_cscenetabkeydeal.cpp000066400000000000000000000012441473346337000326250ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cscenetabkeydeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "KeyPress/cscenetabkeydeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CSceneTabKeyDeal::test_CSceneTabKeyDeal(QObject *parent) : QObject(parent) { } TEST(SceneTabHandle_test, test_CSceneTabKeyDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CSceneTabKeyDeal tabDeal(scene); tabDeal.dealEvent(); delete scene; } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_cscenetabkeydeal.h000066400000000000000000000006271473346337000322760ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CSCENETABKEYDEAL_H #define TEST_CSCENETABKEYDEAL_H #include class test_CSceneTabKeyDeal : public QObject { Q_OBJECT public: explicit test_CSceneTabKeyDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CSCENETABKEYDEAL_Htest_cweekdayscenetabkeydeal.cpp000066400000000000000000000013351473346337000341210ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cweekdayscenetabkeydeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "KeyPress/cweekdayscenetabkeydeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CWeekDaySceneTabKeyDeal::test_CWeekDaySceneTabKeyDeal(QObject *parent) : QObject(parent) { } TEST(WeekDaySceneTabHandle_test, test_CWeekDaySceneTabKeyDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CWeekDaySceneTabKeyDeal weektabDeal(scene); weektabDeal.dealEvent(); delete scene; } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_keypress/test_cweekdayscenetabkeydeal.h000066400000000000000000000006721473346337000336500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CWEEKDAYSCENETABKEYDEAL_H #define TEST_CWEEKDAYSCENETABKEYDEAL_H #include class test_CWeekDaySceneTabKeyDeal : public QObject { Q_OBJECT public: explicit test_CWeekDaySceneTabKeyDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CWEEKDAYSCENETABKEYDEAL_Hdde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_shortcut.cpp000066400000000000000000000005601473346337000263060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_shortcut.h" #include "shortcut.h" #include "gtest/gtest.h" test_Shortcut::test_Shortcut(QObject *parent) : QObject(parent) { } TEST(shorcutTest, shorcut) { Shortcut shortcut; QString str = shortcut.toStr(); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_shortcut.h000066400000000000000000000005571473346337000257610ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SHORTCUT_H #define TEST_SHORTCUT_H #include class test_Shortcut : public QObject { Q_OBJECT public: explicit test_Shortcut(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_SHORTCUT_Hdde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_tabletconfig.cpp000066400000000000000000000006561473346337000271020ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_tabletconfig.h" test_TabletConfig::test_TabletConfig() { } TEST(istableTest, TabletConfig) { TabletConfig tabletconfig; tabletconfig.setIsTablet(true); ASSERT_TRUE(tabletconfig.isTablet()); tabletconfig.setIsTablet(false); ASSERT_FALSE(tabletconfig.isTablet()); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_tabletconfig.h000066400000000000000000000006631473346337000265450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_TABLETCONFIG_H #define TEST_TABLETCONFIG_H #include "tabletconfig.h" #include "gtest/gtest.h" #include class test_TabletConfig : public QObject , public ::testing::Test { Q_OBJECT public: test_TabletConfig(); signals: public slots: }; #endif // TEST_TABLETCONFIG_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/000077500000000000000000000000001473346337000247005ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_alldayeventview.cpp000066400000000000000000000305021473346337000316460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_alldayeventview.h" //#include "../dialog_stub.h" //#include //#include //#include //test_alldayeventview::test_alldayeventview() //{ //} //void test_alldayeventview::SetUp() //{ // cAllDayEventWeekView = new CAllDayEventWeekView(); // cAllDayEventWeekView->setFixedSize(QSize(800, 300)); //} //void test_alldayeventview::TearDown() //{ // delete cAllDayEventWeekView; // cAllDayEventWeekView = nullptr; //} ////void CAllDayEventWeekView::setTheMe(int type) //TEST_F(test_alldayeventview, setTheMe) //{ // int type = 1; // cAllDayEventWeekView->setTheMe(); // cAllDayEventWeekView->setTheMe(type); //} ////bool CAllDayEventWeekView::MeetCreationConditions(const QDateTime &date) //TEST_F(test_alldayeventview, MeetCreationConditions) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime date = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // cAllDayEventWeekView->MeetCreationConditions(date); //} ////bool CAllDayEventWeekView::IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) //TEST_F(test_alldayeventview, IsEqualtime) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // QString end = "2020-12-21 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // assert(false == cAllDayEventWeekView->IsEqualtime(begindate, enddate)); // enddate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // assert(true == cAllDayEventWeekView->IsEqualtime(begindate, enddate)); //} ////void CAllDayEventWeekView::setRange(int w, int h, QDate begindate, QDate enddate, int rightmagin) //TEST_F(test_alldayeventview, setRange) //{ // int w = 3; // int h = 2; // QDate begindate(2020, 12, 01); // QDate enddate(2020, 12, 21); // int rightmagin = 2; // cAllDayEventWeekView->setRange(w, h, begindate, enddate, rightmagin); //} //QVector getTestScheduleDataInfo() //{ // ScheduleDataInfo info1; // info1.setID(1); // info1.setType(2); // info1.setAllDay(true); // info1.setRecurID(2); // info1.setTitleName("测试1"); // QString strDate = "2020-12-02 12:24:36"; // QDateTime ignoreDate = QDateTime::fromString(strDate, "yyyy-MM-dd hh:mm:ss"); // QVector ignoreDateList; // ignoreDateList.append(ignoreDate); // info1.setIgnoreTime(ignoreDateList); // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // QString end = "2020-12-03 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // info1.setBeginDateTime(begindate); // info1.setEndDateTime(enddate); // ScheduleDataInfo info2; // info2.setID(1); // info2.setType(2); // info2.setAllDay(true); // info2.setRecurID(2); // info2.setTitleName("测试2"); // QString strDate2 = "2020-12-12 12:24:36"; // QDateTime ignoreDate2 = QDateTime::fromString(strDate2, "yyyy-MM-dd hh:mm:ss"); // QVector ignoreDateList2; // ignoreDateList2.append(ignoreDate2); // info2.setIgnoreTime(ignoreDateList2); // QString begin2 = "2020-12-11 12:24:36"; // QDateTime begindate2 = QDateTime::fromString(begin2, "yyyy-MM-dd hh:mm:ss"); // QString end2 = "2020-12-13 12:24:36"; // QDateTime enddate2 = QDateTime::fromString(end2, "yyyy-MM-dd hh:mm:ss"); // info2.setBeginDateTime(begindate2); // info2.setEndDateTime(enddate2); // ScheduleDataInfo info3; // info3.setID(1); // info3.setType(2); // info3.setAllDay(true); // info3.setRecurID(2); // info3.setTitleName("测试3"); // QString strDate3 = "2020-12-22 12:24:36"; // QDateTime ignoreDate3 = QDateTime::fromString(strDate3, "yyyy-MM-dd hh:mm:ss"); // QVector ignoreDateList3; // ignoreDateList3.append(ignoreDate3); // info3.setIgnoreTime(ignoreDateList3); // QString begin3 = "2020-12-21 12:24:36"; // QDateTime begindate3 = QDateTime::fromString(begin3, "yyyy-MM-dd hh:mm:ss"); // QString end3 = "2020-12-23 12:24:36"; // QDateTime enddate3 = QDateTime::fromString(end3, "yyyy-MM-dd hh:mm:ss"); // info3.setBeginDateTime(begindate3); // info3.setEndDateTime(enddate3); // QVector infoList; // infoList.append(info1); // infoList.append(info2); // infoList.append(info3); // return infoList; //} ////void CAllDayEventWeekView::setDayData(const QVector> &vlistData) //TEST_F(test_alldayeventview, setDayData) //{ // QVector> vlistData; // QVector infoList1; // infoList1.append(getTestScheduleDataInfo().at(0)); // infoList1.append(getTestScheduleDataInfo().at(1)); // QVector infoList2; // infoList2.append(getTestScheduleDataInfo().at(2)); // vlistData.append(infoList1); // vlistData.append(infoList2); // cAllDayEventWeekView->setDayData(vlistData); //} ////void CAllDayEventWeekView::setInfo(const QVector &info) //TEST_F(test_alldayeventview, setInfo) //{ // cAllDayEventWeekView->setInfo(getTestScheduleDataInfo()); //} ////void CAllDayEventWeekView::slotDoubleEvent() //TEST_F(test_alldayeventview, slotDoubleEvent) //{ // cAllDayEventWeekView->slotDoubleEvent(); //} ////void CAllDayEventWeekView::createItemWidget(int index, bool average) //TEST_F(test_alldayeventview, createItemWidget) //{ // QVector> vlistData; // QVector infoList1; // infoList1.append(getTestScheduleDataInfo().at(0)); // infoList1.append(getTestScheduleDataInfo().at(1)); // QVector infoList2; // infoList2.append(getTestScheduleDataInfo().at(2)); // vlistData.append(infoList1); // vlistData.append(infoList2); // cAllDayEventWeekView->setDayData(vlistData); // int w = 1000; // int h = 900; // QDate begindate(2020, 12, 01); // QDate enddate(2020, 12, 21); // int rightmagin = 2; // cAllDayEventWeekView->setRange(w, h, begindate, enddate, rightmagin); // int index = 0; // bool average = true; // cAllDayEventWeekView->createItemWidget(index, average); // cAllDayEventWeekView->updateHeight(); // //setSelectSearchSchedule // cAllDayEventWeekView->setSelectSearchSchedule(getTestScheduleDataInfo().at(1)); //} ////void CAllDayEventWeekView::updateItemHeightByFontSize() //TEST_F(test_alldayeventview, updateItemHeightByFontSize) //{ // cAllDayEventWeekView->updateItemHeightByFontSize(); //} ////void CAllDayEventWeekView::upDateInfoShow(const DragStatus &status, const ScheduleDataInfo &info) //TEST_F(test_alldayeventview, upDateInfoShow) //{ // cAllDayEventWeekView->setInfo(getTestScheduleDataInfo()); // cAllDayEventWeekView->upDateInfoShow(DragInfoGraphicsView::DragStatus::ChangeEnd, getTestScheduleDataInfo().at(1)); // cAllDayEventWeekView->upDateInfoShow(DragInfoGraphicsView::DragStatus::ChangeBegin, getTestScheduleDataInfo().at(1)); // cAllDayEventWeekView->upDateInfoShow(DragInfoGraphicsView::DragStatus::ChangeWhole, getTestScheduleDataInfo().at(1)); // cAllDayEventWeekView->upDateInfoShow(DragInfoGraphicsView::DragStatus::IsCreate, getTestScheduleDataInfo().at(1)); //} //// //TEST_F(test_alldayeventview, getPixmap) //{ // cAllDayEventWeekView->setFixedSize(500, 800); // QPixmap pixmap(cAllDayEventWeekView->size()); // pixmap = cAllDayEventWeekView->grab(); //} //// //TEST_F(test_alldayeventview, eventTest) //{ // QTest::keyEvent(QTest::Press, cAllDayEventWeekView, Qt::Key::Key_Enter); // cAllDayEventWeekView->setFixedSize(500, 100); // QTest::mouseDClick(cAllDayEventWeekView, Qt::LeftButton, Qt::NoModifier, QPoint(200, 50)); //} ////slotCreate //TEST_F(test_alldayeventview, slotCreate) //{ // calendarDDialogExecReturn = 1; // Stub stub; // calendarDDialogExecStub(stub); // cAllDayEventWeekView->slotCreate(QDateTime::currentDateTime()); //} ////getDragScheduleInfoBeginTime //TEST_F(test_alldayeventview, getDragScheduleInfoBeginTime) //{ // cAllDayEventWeekView->getDragScheduleInfoBeginTime(QDateTime::currentDateTime()); //} ////changeEvent //TEST_F(test_alldayeventview, changeEvent) //{ // QEvent event(QEvent::FontChange); // QApplication::sendEvent(cAllDayEventWeekView, &event); //} ////mousePressEvent //TEST_F(test_alldayeventview, mousePressEvent) //{ // QMouseEvent event(QEvent::MouseButtonPress, QPointF(32, 13), QPointF(646, 438), QPointF(646, 438), // Qt::LeftButton, Qt::LeftButton, Qt::NoModifier, Qt::MouseEventSynthesizedByQt); // QApplication::sendEvent(cAllDayEventWeekView->viewport(), &event); //} //TEST_F(test_alldayeventview, JudgeIsCreate) //{ // QPointF point(32, 13); // cAllDayEventWeekView->JudgeIsCreate(point); //} //QAction *stub_exec(const QPoint &pos, QAction *at = nullptr) //{ // Q_UNUSED(pos) // Q_UNUSED(at) // return nullptr; //} ////RightClickToCreate //TEST_F(test_alldayeventview, RightClickToCreate) //{ // Stub stub; // stub.set((QAction * (QMenu::*)(const QPoint &, QAction *)) ADDR(QMenu, exec), stub_exec); // cAllDayEventWeekView->RightClickToCreate(nullptr, QPoint(30, 50)); //} ////MoveInfoProcess //TEST_F(test_alldayeventview, MoveInfoProcess) //{ // ScheduleDataInfo info; // QDateTime currentTime = QDateTime::currentDateTime(); // info.setBeginDateTime(currentTime); // info.setEndDateTime(currentTime.addDays(1)); // info.setAllDay(true); // cAllDayEventWeekView->MoveInfoProcess(info, QPointF(0, 0)); // info.setAllDay(false); // cAllDayEventWeekView->MoveInfoProcess(info, QPointF(0, 0)); //} ////getDragScheduleInfoEndTime //TEST_F(test_alldayeventview, getDragScheduleInfoEndTime) //{ // cAllDayEventWeekView->getDragScheduleInfoEndTime(QDateTime::currentDateTime()); //} ////slotUpdateScene //TEST_F(test_alldayeventview, slotUpdateScene) //{ // cAllDayEventWeekView->slotUpdateScene(); //} //TEST_F(test_alldayeventview, updateInfo) //{ // cAllDayEventWeekView->updateInfo(); // cAllDayEventWeekView->m_DragStatus = DragInfoGraphicsView::IsCreate; // cAllDayEventWeekView->updateInfo(); //} ////mouseDoubleClickEvent //TEST_F(test_alldayeventview, mouseDoubleClickEvent) //{ // Stub stub; // calendarDDialogExecStub(stub); // QTest::mouseDClick(cAllDayEventWeekView->viewport(), Qt::LeftButton); //} //// //TEST_F(test_alldayeventview, setSceneRect) //{ // cAllDayEventWeekView->setSceneRect(20, 20, 1000, 1500); // cAllDayEventWeekView->updateBackgroundShowItem(); //} ////slotPosOnView //TEST_F(test_alldayeventview, slotPosOnView) //{ // cAllDayEventWeekView->slotPosOnView(1); //} ////mouseReleaseEvent //TEST_F(test_alldayeventview, mouseReleaseEvent) //{ // QMouseEvent event(QEvent::MouseButtonRelease, QPointF(32, 13), QPointF(646, 438), QPointF(646, 438), // Qt::RightButton, Qt::RightButton, Qt::NoModifier, Qt::MouseEventSynthesizedByQt); // QApplication::sendEvent(cAllDayEventWeekView->viewport(), &event); //} ////mouseReleaseEvent //TEST_F(test_alldayeventview, mouseReleaseEvent1) //{ // cAllDayEventWeekView->m_TouchBeginTime = QDateTime::currentDateTime().toMSecsSinceEpoch() - 10; // QMouseEvent event(QEvent::MouseButtonRelease, QPointF(32, 13), QPointF(646, 438), QPointF(646, 438), // Qt::LeftButton, Qt::LeftButton, Qt::NoModifier, Qt::MouseEventSynthesizedByQt); // QApplication::sendEvent(cAllDayEventWeekView->viewport(), &event); //} ////mouseMoveEvent //TEST_F(test_alldayeventview, mouseMoveEvent) //{ // cAllDayEventWeekView->m_touchState = DragInfoGraphicsView::TS_PRESS; // QTest::mouseMove(cAllDayEventWeekView->viewport()); //} ////wheelEvent //TEST_F(test_alldayeventview, wheelEvent) //{ // QEvent event(QEvent::Wheel); // QApplication::sendEvent(cAllDayEventWeekView->viewport(), &event); //} ////contextMenuEvent //TEST_F(test_alldayeventview, contextMenuEvent) //{ // // QEvent event(QEvent::ContextMenu); // QContextMenuEvent event(QContextMenuEvent::Mouse, QPoint(20, 20), QPoint(120, 120), Qt::NoModifier); // Stub stub; // stub.set((QAction * (QMenu::*)(const QPoint &, QAction *)) ADDR(QMenu, exec), stub_exec); // calendarDDialogExecStub(stub); // QApplication::sendEvent(cAllDayEventWeekView->viewport(), &event); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_alldayeventview.h000066400000000000000000000010601473346337000313100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_ALLDAYEVENTVIEW_H #define TEST_ALLDAYEVENTVIEW_H //#include "alldayeventview.h" //#include "gtest/gtest.h" //#include //class test_alldayeventview : public QObject, public::testing::Test //{ //public: // test_alldayeventview(); // void SetUp() override; // void TearDown() override; //protected: // CAllDayEventWeekView *cAllDayEventWeekView = nullptr; //}; #endif // TEST_ALLDAYEVENTVIEW_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_calldayscheduleitem.cpp000066400000000000000000000026161473346337000324550ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_calldayscheduleitem.h" #include "../testscheduledata.h" #include //test_CAlldayscheduleitem::test_CAlldayscheduleitem() //{ //} //void test_CAlldayscheduleitem::SetUp() //{ // m_rectF.setRect(0, 0, 200, 50); // m_allItem = new CAllDayScheduleItem(m_rectF); //} //void test_CAlldayscheduleitem::TearDown() //{ // delete m_allItem; // m_allItem = nullptr; //} ////paintBackground //TEST_F(test_CAlldayscheduleitem, paintBackground) //{ // m_allItem->setData(TestDataInfo::getScheduleItemDInfo().first()); // QPixmap pixmap(m_rectF.toRect().size()); // pixmap.fill(Qt::transparent); // QPainter painter(&pixmap); // m_allItem->setPressSchedule(TestDataInfo::getScheduleItemDInfo().first()); // m_allItem->m_vSelectflag = true; // m_allItem->paintBackground(&painter, pixmap.rect(), true); // m_allItem->m_vHoverflag = true; // m_allItem->m_vSelectflag = false; // m_allItem->paintBackground(&painter, pixmap.rect(), true); //} ////hasSelectSchedule //TEST_F(test_CAlldayscheduleitem, hasSelectSchedule) //{ // m_allItem->setData(TestDataInfo::getScheduleItemDInfo().first()); // bool hasSelectInfo = m_allItem->hasSelectSchedule(TestDataInfo::getScheduleItemDInfo().first()); // ASSERT_TRUE(hasSelectInfo); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_calldayscheduleitem.h000066400000000000000000000012041473346337000321120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CALLDAYSCHEDULEITEM_H #define TEST_CALLDAYSCHEDULEITEM_H //#include "gtest/gtest.h" //#include "graphicsItem/calldayscheduleitem.h" //#include //class test_CAlldayscheduleitem : public QObject // , public ::testing::Test //{ // Q_OBJECT //public: // test_CAlldayscheduleitem(); // void SetUp() override; // void TearDown() override; //signals: //public slots: //public: // CAllDayScheduleItem *m_allItem; // QRectF m_rectF; //}; #endif // TEST_CALLDAYSCHEDULEITEM_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_cweekdaybackgrounditem.cpp000066400000000000000000000023711473346337000331610ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_cweekdaybackgrounditem.h" //test_CWeekDayBackgroundItem::test_CWeekDayBackgroundItem() //{ //} //void test_CWeekDayBackgroundItem::SetUp() //{ // m_weekItem = new CWeekDayBackgroundItem(); //} //void test_CWeekDayBackgroundItem::TearDown() //{ // delete m_weekItem; // m_weekItem = nullptr; //} ////showFocus //TEST_F(test_CWeekDayBackgroundItem, showFocus) //{ // m_weekItem->setShowFocus(true); // ASSERT_TRUE(m_weekItem->showFocus()); // m_weekItem->setShowFocus(false); // ASSERT_FALSE(m_weekItem->showFocus()); //} ////setItemFocus //TEST_F(test_CWeekDayBackgroundItem, setItemFocus) //{ // m_weekItem->setItemFocus(true); //} ////hasNextSubItem //TEST_F(test_CWeekDayBackgroundItem, hasNextSubItem) //{ // bool hasNextSub; // hasNextSub = m_weekItem->hasNextSubItem(); // ASSERT_FALSE(hasNextSub); //} ////drawDividingLine //TEST_F(test_CWeekDayBackgroundItem, drawDividingLine) //{ // m_weekItem->setDrawDividingLine(false); // ASSERT_FALSE(m_weekItem->drawDividingLine()); // m_weekItem->setDrawDividingLine(true); // ASSERT_TRUE(m_weekItem->drawDividingLine()); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_cweekdaybackgrounditem.h000066400000000000000000000013161473346337000326240ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CWEEKDAYBACKGROUNDITEM_H #define TEST_CWEEKDAYBACKGROUNDITEM_H //#include "graphicsItem/cweekdaybackgrounditem.h" //#include "gtest/gtest.h" //#include //class test_CWeekDayBackgroundItem : public QObject // , public testing::Test //{ // Q_OBJECT //public: // test_CWeekDayBackgroundItem(); // // Sets up the test fixture. // void SetUp() override; // // Tears down the test fixture. // void TearDown() override; //signals: //public slots: //public: // CWeekDayBackgroundItem *m_weekItem; //}; #endif // TEST_CWEEKDAYBACKGROUNDITEM_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_graphicsItem/000077500000000000000000000000001473346337000303565ustar00rootroot00000000000000test_cmonthdayitem.cpp000066400000000000000000000023171473346337000347120ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cmonthdayitem.h" #include #include //test_cmonthdayitem::test_cmonthdayitem() //{ //} //TEST_F(test_cmonthdayitem, paint_01) //{ // mItem->m_isFocus = true; // QPainter painter; // QStyleOptionGraphicsItem item; // mItem->paint(&painter, &item); //} //TEST_F(test_cmonthdayitem, paint_02) //{ // CMonthDayItem::m_LunarVisible = true; // QPainter painter; // QStyleOptionGraphicsItem item; // mItem->paint(&painter, &item); //} //TEST_F(test_cmonthdayitem, paint_03) //{ // CMonthDayItem::m_LunarVisible = true; // QPainter painter; // QStyleOptionGraphicsItem item; // mItem->setStatus(CMonthDayItem::H_REST); // EXPECT_EQ(mItem->m_DayStatus, CMonthDayItem::H_REST); // mItem->paint(&painter, &item); //} //TEST_F(test_cmonthdayitem, paint_04) //{ // CMonthDayItem::m_LunarVisible = true; // QPainter painter; // QStyleOptionGraphicsItem item; // mItem->setStatus(CMonthDayItem::H_WORK); // EXPECT_EQ(mItem->m_DayStatus, CMonthDayItem::H_WORK); // mItem->paint(&painter, &item); //} test_cmonthdayitem.h000066400000000000000000000012001473346337000343450ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CMONTHDAYITEM_H #define TEST_CMONTHDAYITEM_H //#include "graphicsItem/cmonthdayitem.h" //#include //#include //class test_cmonthdayitem: public::testing::Test //{ //public: // test_cmonthdayitem(); // virtual void SetUp() // { // mItem = new CMonthDayItem(); // } // virtual void TearDown() // { // delete mItem; // mItem = nullptr; // } //protected: // CMonthDayItem *mItem = nullptr; //}; #endif // TEST_CMONTHDAYITEM_H test_cmonthschedulenumitem.cpp000066400000000000000000000023331473346337000364470ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cmonthschedulenumitem.h" #include #include //test_cmonthschedulenumItem::test_cmonthschedulenumItem() //{ //} //TEST_F(test_cmonthschedulenumItem, setColor_01) //{ // QColor color1("#000000"); // QColor color2("#111111"); // mItem->setColor(color1, color2); // EXPECT_EQ(mItem->m_color1, color1); // EXPECT_EQ(mItem->m_color2, color2); //} //TEST_F(test_cmonthschedulenumItem, setText_01) //{ // QColor color("#000000"); // mItem->setText(color, QFont()); // EXPECT_EQ(mItem->m_textcolor, color); //} //TEST_F(test_cmonthschedulenumItem, setSizeType_01) //{ // QColor color("#000000"); // mItem->setSizeType(DFontSizeManager::T5); // EXPECT_EQ(mItem->m_SizeType, DFontSizeManager::T5); //} //TEST_F(test_cmonthschedulenumItem, setData_01) //{ // QColor color("#000000"); // mItem->setData(4); // EXPECT_EQ(mItem->m_num, 4); //} //TEST_F(test_cmonthschedulenumItem, paint_01) //{ // mItem->m_isFocus = true; // QPainter painter; // QStyleOptionGraphicsItem item; // mItem->paint(&painter, &item); //} test_cmonthschedulenumitem.h000066400000000000000000000013001473346337000361050ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CMONTHSCHEDULENUMITEM_H #define TEST_CMONTHSCHEDULENUMITEM_H //#include "graphicsItem/cmonthschedulenumitem.h" //#include //#include //class test_cmonthschedulenumItem: public::testing::Test //{ //public: // test_cmonthschedulenumItem(); // virtual void SetUp() // { // mItem = new CMonthScheduleNumItem(); // } // virtual void TearDown() // { // delete mItem; // mItem = nullptr; // } //protected: // CMonthScheduleNumItem *mItem = nullptr; //}; #endif // TEST_CMONTHSCHEDULENUMITEM_H test_cscenebackgrounditem.cpp000066400000000000000000000023671473346337000362310ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cscenebackgrounditem.h" //test_cscenebackgrounditem::test_cscenebackgrounditem() //{ //} //TEST_F(test_cscenebackgrounditem, setNextItemFocusAndGetNextItem_01) //{ // mItem->m_showItemIndex = 0; // mItem->setNextItemFocusAndGetNextItem(); //} //TEST_F(test_cscenebackgrounditem, setNextItemFocusAndGetNextItem_02) //{ // mItem->m_showItemIndex = 1; // mItem->setNextItemFocusAndGetNextItem(); //} //TEST_F(test_cscenebackgrounditem, setNextItemFocusAndGetNextItem_03) //{ // mItem->m_showItemIndex = -1; // mItem->m_isFocus = true; // mItem->setNextItemFocusAndGetNextItem(); //} //TEST_F(test_cscenebackgrounditem, setItemFocus_01) //{ // mItem->m_showItemIndex = -1; // mItem->setItemFocus(true); //} //TEST_F(test_cscenebackgrounditem, setItemFocus_02) //{ // mItem->m_showItemIndex = 1; // mItem->setItemFocus(true); //} //TEST_F(test_cscenebackgrounditem, initState_01) //{ // mItem->m_showItemIndex = 1; // mItem->initState(); //} //TEST_F(test_cscenebackgrounditem, updateCurrentItemShow_01) //{ // mItem->m_showItemIndex = 1; // mItem->updateCurrentItemShow(); //} test_cscenebackgrounditem.h000066400000000000000000000022271473346337000356710ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CSCENEBACKGROUNDITEM_H #define TEST_CSCENEBACKGROUNDITEM_H //#include "graphicsItem/cscenebackgrounditem.h" //#include //#include <../third-party_stub/stub.h> //#include //#include //class test_cscenebackgrounditem: public::testing::Test //{ //public: // test_cscenebackgrounditem(); // virtual void SetUp() // { // mItem = new CSceneBackgroundItem(CSceneBackgroundItem::OnMonthView); // mFocusItem = new CFocusItem(); // mScene = new QGraphicsScene(); // mScene->addItem(mItem); // mScene->addItem(mFocusItem); // mItem->m_item.append(mFocusItem); // mItem->m_item.append(mFocusItem); // } // virtual void TearDown() // { // delete mItem; // mItem = nullptr; // delete mFocusItem; // delete mScene; // } //protected: // CSceneBackgroundItem *mItem = nullptr; // CFocusItem *mFocusItem = nullptr; // QGraphicsScene *mScene = nullptr; //}; #endif // TEST_CSCENEBACKGROUNDITEM_H test_cscheduleitem.cpp000066400000000000000000000022761473346337000346670ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cscheduleitem.h" #include //test_cscheduleitem::test_cscheduleitem() //{ //} //TEST_F(test_cscheduleitem, setData_01) //{ // mItem->setData(ScheduleDataInfo(), QDate(), 2); // EXPECT_EQ(mItem->m_totalNum, 2); //} //TEST_F(test_cscheduleitem, hasSelectSchedule_01) //{ // ScheduleDataInfo info; // mItem->setData(info, QDate(), 2); // EXPECT_TRUE(mItem->hasSelectSchedule(info)); //} //TEST_F(test_cscheduleitem, splitTexte_01) //{ // QFont font; // QStringList strList; // QFontMetrics metrics(font); // ScheduleDataInfo info; // mItem->splitText(font, 20, 10, "123", strList, metrics); //} //TEST_F(test_cscheduleitem, paintBackground_01) //{ // QPainter painter; // QRectF rect; // mItem->m_vHoverflag = true; // mItem->m_vSelectflag = false; // mItem->paintBackground(&painter, rect); //} //TEST_F(test_cscheduleitem, paintBackground_02) //{ // QPainter painter; // QRectF rect; // mItem->m_vHoverflag = true; // mItem->m_vSelectflag = true; // mItem->paintBackground(&painter, rect); //} test_cscheduleitem.h000066400000000000000000000013531473346337000343270ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_DRAGINFOITEM_H #define TEST_DRAGINFOITEM_H //#include "graphicsItem/scheduleitem.h" //#include //#include <../third-party_stub/stub.h> //#include //#include //class test_cscheduleitem: public::testing::Test //{ //public: // test_cscheduleitem(); // virtual void SetUp() // { // QRectF rect(0, 0, 100, 100); // mItem = new CScheduleItem(rect); // } // virtual void TearDown() // { // delete mItem; // mItem = nullptr; // } //protected: // CScheduleItem *mItem = nullptr; //}; #endif // TEST_DRAGINFOITEM_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_graphicsscene.cpp000066400000000000000000000044751473346337000312730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_graphicsscene.h" #include #include #include #include #include "view/graphicsItem/cfocusitem.h" //test_graphicsscene::test_graphicsscene() //{ //} //void test_graphicsscene::SetUp() //{ // m_Scene = new CGraphicsScene(); //} //void test_graphicsscene::TearDown() //{ // delete m_Scene; // m_Scene = nullptr; //} //TEST_F(test_graphicsscene, getCurrentFocusItem) //{ // QGraphicsItem *item = m_Scene->getCurrentFocusItem(); // Q_UNUSED(item) //} ////setPrePage //TEST_F(test_graphicsscene, setPrePage) //{ // m_Scene->setPrePage(QDate::currentDate(), false); //} ////focusInDeal //TEST_F(test_graphicsscene, focusInDeal) //{ // m_Scene->setIsShowCurrentItem(true); // QFocusEvent event(QEvent::FocusIn, Qt::TabFocusReason); // QApplication::sendEvent(m_Scene, &event); //} //TEST_F(test_graphicsscene, focusInDeal1) //{ // CFocusItem *item = new CFocusItem(); // m_Scene->setCurrentFocusItem(item); // m_Scene->addItem(item); // QFocusEvent event(QEvent::FocusIn, Qt::ActiveWindowFocusReason); // QApplication::sendEvent(m_Scene, &event); // m_Scene->clear(); //} ////focusOutDeal //TEST_F(test_graphicsscene, focusOutDeal) //{ // QFocusEvent event(QEvent::FocusOut, Qt::TabFocusReason); // m_Scene->setActiveSwitching(true); // QApplication::sendEvent(m_Scene, &event); //} ////focusOutDeal //TEST_F(test_graphicsscene, focusOutDeal1) //{ // QFocusEvent event(QEvent::FocusOut, Qt::TabFocusReason); // m_Scene->setActiveSwitching(false); // QApplication::sendEvent(m_Scene, &event); //} //TEST_F(test_graphicsscene, event) //{ // QFocusEvent event(QEvent::FocusOut); // m_Scene->event(&event); //} ////setIsContextMenu //TEST_F(test_graphicsscene, setIsContextMenu) //{ // m_Scene->setIsShowCurrentItem(false); //} ////currentItemInit //TEST_F(test_graphicsscene, currentItemInit) //{ // CFocusItem *item = new CFocusItem(); // m_Scene->setCurrentFocusItem(item); // m_Scene->addItem(item); // m_Scene->currentItemInit(); // m_Scene->clear(); //} ////getActiveSwitching //TEST_F(test_graphicsscene, getActiveSwitching) //{ // m_Scene->getActiveSwitching(); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_graphicsscene.h000066400000000000000000000011021473346337000307200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_GRAPHICSSCENE_H #define TEST_GRAPHICSSCENE_H //#include "gtest/gtest.h" //#include "cgraphicsscene.h" //#include //class test_graphicsscene : public QObject // , public ::testing::Test //{ // Q_OBJECT //public: // test_graphicsscene(); // void SetUp() override; // void TearDown() override; //signals: //public slots: //public: // CGraphicsScene *m_Scene = nullptr; //}; #endif // TEST_GRAPHICSSCENE_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_graphicsview.cpp000066400000000000000000000230301473346337000311340ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_graphicsview.h" //#include "graphicsItem/scheduleitem.h" //#include "../third-party_stub/stub.h" //#include "../dialog_stub.h" //#include //test_graphicsview::test_graphicsview() //{ // cGraphicsView = new CGraphicsView(nullptr, CGraphicsView::WeekPos); //} //test_graphicsview::~test_graphicsview() //{ // delete cGraphicsView; //} ////void CGraphicsView::setMargins(int left, int top, int right, int bottom) //TEST_F(test_graphicsview, setMargins) //{ // int left = 50; // int top = 50; // int right = 50; // int bottom = 50; // cGraphicsView->setMargins(left, top, right, bottom); // assert(cGraphicsView->m_margins.left() == 50); //} ////void CGraphicsView::setTheMe(int type) //TEST_F(test_graphicsview, setTheMe) //{ // int type = 0; // cGraphicsView->setTheMe(type); // type = 2; // cGraphicsView->setTheMe(type); //} ////bool CGraphicsView::MeetCreationConditions(const QDateTime &date) //TEST_F(test_graphicsview, MeetCreationConditions) //{ // QString strDate = "2020-12-28 12:24:36"; // QDateTime date = QDateTime::fromString(strDate, "yyyy-MM-dd hh:mm:ss"); // cGraphicsView->MeetCreationConditions(date); //} //TEST_F(test_graphicsview, updateHeight_01) //{ // cGraphicsView->updateHeight(); //} ////void CGraphicsView::setRange(int w, int h, QDate begindate, QDate enddate, int rightMargin) //TEST_F(test_graphicsview, setRange) //{ // int w = 20; // int h = 20; // QDate begindate(2020, 11, 11); // QDate enddate(2020, 11, 31); // int rightMargin = 10; // cGraphicsView->setRange(w, h, begindate, enddate, rightMargin); // cGraphicsView->setRange(begindate, enddate); //} ////void CGraphicsView::setCurrentDate(const QDateTime ¤tDate) //TEST_F(test_graphicsview, setCurrentDate) //{ // QDateTime date = QDateTime::currentDateTime(); // cGraphicsView->setCurrentDate(date); //} ////void CGraphicsView::setInfo(const QVector &info) //TEST_F(test_graphicsview, setInfo) //{ // QVector infos = QVector {}; // cGraphicsView->setInfo(infos); //} //bool MScheduleTimeThan(const ScheduleDataInfo &s1, const ScheduleDataInfo &s2); //TEST_F(test_graphicsview, MScheduleTimeThan) //{ // ScheduleDataInfo info1 = ScheduleDataInfo{}; // ScheduleDataInfo info2 = ScheduleDataInfo{}; // MScheduleTimeThan(info1, info2); //} ////void CGraphicsView::upDateInfoShow(const CGraphicsView::DragStatus &status, const ScheduleDataInfo &info) //TEST_F(test_graphicsview, upDateInfoShow) //{ // ScheduleDataInfo info = ScheduleDataInfo{}; // cGraphicsView->upDateInfoShow(CGraphicsView::DragStatus::IsCreate, info); // cGraphicsView->upDateInfoShow(CGraphicsView::DragStatus::ChangeEnd, info); // cGraphicsView->upDateInfoShow(CGraphicsView::DragStatus::ChangeBegin, info); // cGraphicsView->upDateInfoShow(CGraphicsView::DragStatus::ChangeWhole, info); // cGraphicsView->upDateInfoShow(CGraphicsView::DragStatus::NONE, info); //} ////QDateTime CGraphicsView::getPosDate(const QPoint &p) //TEST_F(test_graphicsview, getPosDate) //{ // QDateTime dateTime; // QPoint point(50, 40); // dateTime = cGraphicsView->getPosDate(point); //} ////void CGraphicsView::ShowSchedule(DragInfoItem *infoitem) ////TEST_F(test_graphicsview, ShowSchedule) ////{ //// QPoint point(50, 40); //// QGraphicsItem *listItem = itemAt(point); //// DragInfoItem *infoitem = dynamic_cast(listItem); //// CScheduleItem *scheduleitem = dynamic_cast(infoitem); //// qCInfo(CommonLogger) << scheduleitem->getType(); //// cGraphicsView->ShowSchedule(infoitem); ////} //TEST_F(test_graphicsview, MoveInfoProcess_01) //{ // ScheduleDataInfo info = ScheduleDataInfo{}; // QPointF pos(1, 1); // info.setAllDay(true); // cGraphicsView->MoveInfoProcess(info, pos); // EXPECT_FALSE(info.getAllDay()); //} //TEST_F(test_graphicsview, MoveInfoProcess_02) //{ // ScheduleDataInfo info = ScheduleDataInfo{}; // QPointF pos(1, 1); // info.setAllDay(false); // cGraphicsView->MoveInfoProcess(info, pos); // EXPECT_FALSE(info.getAllDay()); //} ////void CGraphicsView::addScheduleItem(const ScheduleDataInfo &info, QDate date, int index, int totalNum, int type, int viewtype, int maxnum) //TEST_F(test_graphicsview, addScheduleItem_01) //{ // ScheduleDataInfo info = ScheduleDataInfo{}; // QDate date(2020, 12, 28); // int index = 1; // int totalNum = 2; // int type = 1; // int viewtype = 1; // int maxnum = 3; // cGraphicsView->addScheduleItem(info, date, index, totalNum, type, viewtype, maxnum); //} //TEST_F(test_graphicsview, clearSchedule_01) //{ // cGraphicsView->clearSchedule(); // EXPECT_TRUE(cGraphicsView->m_updateDflag); // EXPECT_TRUE(cGraphicsView->m_vScheduleItem.isEmpty()); //} ////void CGraphicsView::scheduleClassificationType(QVector &scheduleInfolist, QList &info) //TEST_F(test_graphicsview, schedusleClassificationType) //{ // QVector scheduleInfolist = QVector {}; // QList info = QList {}; // cGraphicsView->scheduleClassificationType(scheduleInfolist, info); //} ////void CGraphicsView::slotDoubleEvent(int type) //TEST_F(test_graphicsview, slotDoubleEvent) //{ // int type = 1; // cGraphicsView->slotDoubleEvent(type); //} ////void CGraphicsView::slotScrollBar() //TEST_F(test_graphicsview, slotScrollBar) //{ // cGraphicsView->slotScrollBar(); //} ////void CGraphicsView::slotUpdateScene() //TEST_F(test_graphicsview, slotUpdateScene) //{ // cGraphicsView->slotUpdateScene(); //} ////void CGraphicsView::scrollBarValueChangedSlot() //TEST_F(test_graphicsview, scrollBarValueChangedSlot_01) //{ // cGraphicsView->scrollBarValueChangedSlot(); //} ////ScheduleDataInfo CGraphicsView::getScheduleInfo(const QDateTime &beginDate, const QDateTime &endDate) //TEST_F(test_graphicsview, getScheduleInfo_01) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // QString end = "2020-12-21 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // cGraphicsView->getScheduleInfo(begindate, enddate); //} //TEST_F(test_graphicsview, getScheduleInfo_02) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // QString end = "2020-12-21 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // cGraphicsView->getScheduleInfo(enddate, begindate); //} ////bool CGraphicsView::IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) //TEST_F(test_graphicsview, IsEqualtime) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // QString end = "2020-12-21 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // cGraphicsView->IsEqualtime(begindate, enddate); //} ////bool CGraphicsView::JudgeIsCreate(const QPointF &pos) //TEST_F(test_graphicsview, JudgeIsCreate) //{ // QPointF pos(20, 20); // cGraphicsView->JudgeIsCreate(pos); //} ////void CGraphicsView::RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) //TEST_F(test_graphicsview, RightClickToCreate) //{ //// QGraphicsItem *listItem = nullptr; //// QPoint pos(20, 20); // //cGraphicsView->RightClickToCreate(listItem, pos); //} ////QDateTime CGraphicsView::getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) //TEST_F(test_graphicsview, getDragScheduleInfoBeginTime) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // cGraphicsView->getDragScheduleInfoBeginTime(begindate); //} ////QDateTime CGraphicsView::getDragScheduleInfoEndTime(const QDateTime &moveDateTime) //TEST_F(test_graphicsview, getDragScheduleInfoEndTime) //{ // QString end = "2020-12-21 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // cGraphicsView->getDragScheduleInfoEndTime(enddate); //} ////void CGraphicsView::keepCenterOnScene() //TEST_F(test_graphicsview, keepCenterOnScene) //{ // cGraphicsView->keepCenterOnScene(); //} ////void CGraphicsView::setTime(QTime time) //TEST_F(test_graphicsview, setTime) //{ // QTime time(7, 30, 5, 100); // cGraphicsView->setTime(time); //} ////void CGraphicsView::updateInfo() //TEST_F(test_graphicsview, updateInfo) //{ // cGraphicsView->updateInfo(); //} //TEST_F(test_graphicsview, mouseDoubleClickEvent_01) //{ // Stub stub; // calendarDDialogExecStub(stub); // QMouseEvent event(QEvent::MouseButtonDblClick, QPointF(1, 1), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // cGraphicsView->mouseDoubleClickEvent(&event); //} //TEST_F(test_graphicsview, mousePressEvent_01) //{ // QMouseEvent event(QEvent::MouseButtonPress, QPointF(1, 1), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // cGraphicsView->mousePressEvent(&event); //} //TEST_F(test_graphicsview, mouseMoveEvent_01) //{ // QMouseEvent event(QEvent::MouseButtonPress, QPointF(1, 1), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // cGraphicsView->mouseMoveEvent(&event); //} //TEST_F(test_graphicsview, resizeEvent_01) //{ // QResizeEvent event(QSize(50, 50), QSize(100, 100)); // cGraphicsView->resizeEvent(&event); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_graphicsview.h000066400000000000000000000007551473346337000306120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_GRAPHICSVIEW_H #define TEST_GRAPHICSVIEW_H //#include "graphicsview.h" //#include "gtest/gtest.h" //#include //class test_graphicsview : public QObject, public::testing::Test //{ //public: // test_graphicsview(); // ~test_graphicsview(); //protected: // CGraphicsView *cGraphicsView = nullptr; //}; #endif // TEST_GRAPHICSVIEW_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_monthgraphiview.cpp000066400000000000000000000147611473346337000316670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_monthgraphiview.h" #include "../third-party_stub/stub.h" #include "../dialog_stub.h" #include "widget/monthWidget/monthscheduleview.h" static void monthgraphiview_stub_void() { } test_monthgraphiview::test_monthgraphiview() { cMonthGraphiview = new CMonthGraphicsview(); } test_monthgraphiview::~test_monthgraphiview() { delete cMonthGraphiview; } //void CMonthGraphiview::setTheMe(int type) TEST_F(test_monthgraphiview, setTheMe) { int type = 1; cMonthGraphiview->setTheMe(); cMonthGraphiview->setTheMe(type); } //void CMonthGraphiview::setDate(const QVector &showDate) TEST_F(test_monthgraphiview, setDate) { QVector showDate; QDate date1(2020, 10, 1); QDate date2(2020, 12, 1); for (int i = 0; i < 42; ++i) { if (i % 2 == 0) { showDate.append(date1); } else { showDate.append(date2); } } std::cout << showDate.size() << std::endl; cMonthGraphiview->setDate(showDate); } //void CMonthGraphiview::setLunarInfo(const QMap &lunarCache) TEST_F(test_monthgraphiview, setLunarInfo) { QMap lunarCache = QMap {}; cMonthGraphiview->setLunarInfo(lunarCache); } //void CMonthGraphiview::setLunarVisible(bool visible) TEST_F(test_monthgraphiview, setLunarVisible) { bool visible = false; cMonthGraphiview->setLunarVisible(visible); } //void CMonthGraphiview::setScheduleInfo(const QMap > &info) TEST_F(test_monthgraphiview, setScheduleInfo) { QMap > info = QMap > {}; cMonthGraphiview->setScheduleInfo(info); } //void CMonthGraphiview::setSelectSearchSchedule(const ScheduleDataInfo &scheduleInfo) TEST_F(test_monthgraphiview, setSelectSearchSchedule) { ScheduleDataInfo scheduleInfo = ScheduleDataInfo{}; cMonthGraphiview->setSelectSearchSchedule(scheduleInfo); } //QPointF CMonthGraphiview::getItemPos(const QPoint &p, const QRectF &itemRect) TEST_F(test_monthgraphiview, getItemPos) { QPoint p(100, 100); QRectF itemRect; cMonthGraphiview->getItemPos(p, itemRect); } //QDateTime CMonthGraphiview::getPosDate(const QPoint &p) TEST_F(test_monthgraphiview, getPosDate_01) { QPoint p(100, 100); cMonthGraphiview->getPosDate(p); } TEST_F(test_monthgraphiview, getPosDate_02) { QPoint p(-100, -1); cMonthGraphiview->getPosDate(p); } TEST_F(test_monthgraphiview, getPosDate_03) { QPoint p(-1, -1); cMonthGraphiview->setSceneRect(-2, -2, 100, 100); cMonthGraphiview->getPosDate(p); } ////void CMonthGraphiview::upDateInfoShow(const CMonthGraphiview::DragStatus &status, const ScheduleDataInfo &info) TEST_F(test_monthgraphiview, upDateInfoShow_01) { Stub stub; stub.set(ADDR(CWeekScheduleView, addData), monthgraphiview_stub_void); stub.set(ADDR(CWeekScheduleView, changeDate), monthgraphiview_stub_void); ScheduleDataInfo info = ScheduleDataInfo{}; cMonthGraphiview->upDateInfoShow(CMonthGraphicsview::IsCreate, info); cMonthGraphiview->upDateInfoShow(CMonthGraphicsview::ChangeBegin, info); cMonthGraphiview->upDateInfoShow(CMonthGraphicsview::ChangeEnd, info); cMonthGraphiview->upDateInfoShow(CMonthGraphicsview::ChangeWhole, info); cMonthGraphiview->upDateInfoShow(CMonthGraphicsview::NONE, info); } TEST_F(test_monthgraphiview, slideEvent_01) { QPointF pos(1, 1); QPointF stopPos(2, 2); cMonthGraphiview->slideEvent(pos, stopPos); } TEST_F(test_monthgraphiview, mouseDoubleClickEvent_01) { QMouseEvent event(QEvent::MouseButtonDblClick, QPointF(0, 0), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); cMonthGraphiview->mouseDoubleClickEvent(&event); } TEST_F(test_monthgraphiview, mouseDoubleClickEvent_02) { QMouseEvent event(QEvent::MouseButtonDblClick, QPointF(0, 0), Qt::RightButton, Qt::RightButton, Qt::NoModifier); cMonthGraphiview->mouseDoubleClickEvent(&event); } TEST_F(test_monthgraphiview, mouseDoubleClickEvent_03) { QMouseEvent event(QEvent::MouseButtonDblClick, QPointF(1, 1), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); cMonthGraphiview->mouseDoubleClickEvent(&event); } TEST_F(test_monthgraphiview, resizeEvent_01) { QResizeEvent event(QSize(50, 50), QSize(100, 100)); cMonthGraphiview->resizeEvent(&event); } TEST_F(test_monthgraphiview, changeEvent_01) { QEvent event(QEvent::FontChange); cMonthGraphiview->changeEvent(&event); } TEST_F(test_monthgraphiview, wheelEvent_01) { QWheelEvent event(QPointF(1, 1), 0, Qt::LeftButton, Qt::NoModifier); cMonthGraphiview->wheelEvent(&event); } TEST_F(test_monthgraphiview, updateBackgroundShowItem_01) { cMonthGraphiview->updateBackgroundShowItem(); } TEST_F(test_monthgraphiview, setDragPixmap_01) { QDrag drag(cMonthGraphiview); CMonthScheduleItem item(QRect(0, 0, 10, 10)); cMonthGraphiview->setDragPixmap(&drag, &item); } TEST_F(test_monthgraphiview, MeetCreationConditions_01) { QDateTime date; EXPECT_TRUE(cMonthGraphiview->MeetCreationConditions(date)); } TEST_F(test_monthgraphiview, IsEqualtime_01) { QDateTime date; EXPECT_TRUE(cMonthGraphiview->IsEqualtime(date, date)); } TEST_F(test_monthgraphiview, JudgeIsCreate_01) { EXPECT_FALSE(cMonthGraphiview->JudgeIsCreate(QPointF(1, 1))); } TEST_F(test_monthgraphiview, RightClickToCreate_01) { QPoint pos(1, 1); cMonthGraphiview->RightClickToCreate(nullptr, pos); } TEST_F(test_monthgraphiview, MoveInfoProcess_01) { QPointF pos(1, 1); ScheduleDataInfo info; cMonthGraphiview->MoveInfoProcess(info, pos); } TEST_F(test_monthgraphiview, MoveInfoProcess_02) { QPointF pos(1, -1); ScheduleDataInfo info; cMonthGraphiview->MoveInfoProcess(info, pos); } TEST_F(test_monthgraphiview, getDragScheduleInfoBeginTime_02) { QPointF pos(1, -1); QDateTime time; cMonthGraphiview->m_InfoEndTime = time; EXPECT_EQ(cMonthGraphiview->getDragScheduleInfoBeginTime(time), time); } TEST_F(test_monthgraphiview, getDragScheduleInfoEndTime_02) { QPointF pos(1, -1); QDateTime time; cMonthGraphiview->m_InfoEndTime = time; EXPECT_EQ(cMonthGraphiview->getDragScheduleInfoEndTime(time), time); } TEST_F(test_monthgraphiview, slotCreate_02) { Stub stub; calendarDDialogExecStub(stub); QPointF pos(1, -1); QDateTime time; cMonthGraphiview->m_InfoEndTime = time; cMonthGraphiview->slotCreate(time); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_monthgraphiview.h000066400000000000000000000010071473346337000313210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MONTHGRAPHVIEW_H #define TEST_MONTHGRAPHVIEW_H //#include "monthgraphiview.h" //#include "gtest/gtest.h" //#include //class test_monthgraphiview : public QObject, public::testing::Test //{ //public: // test_monthgraphiview(); // ~test_monthgraphiview(); //protected: // CMonthGraphicsview *cMonthGraphiview = nullptr; //}; #endif // TEST_MONTHGRAPHVIEW_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_scheduleitem.cpp000066400000000000000000000112321473346337000311150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_scheduleitem.h" #include "../third-party_stub/stub.h" #include //test_scheduleitem::test_scheduleitem() //{ // QRectF rectf; // mScheduleItem = new CScheduleItem(rectf); //} //test_scheduleitem::~test_scheduleitem() //{ // delete mScheduleItem; // mScheduleItem = nullptr; //} //QVector getScheduleItemDInfo() //{ // QVector scheduleDate {}; // ScheduleDataInfo schedule1, schedule2, schedule3, schedule4, schedule5, scheduleFes; // QDateTime currentDateTime = QDateTime::currentDateTime(); // schedule1.setID(1); // schedule1.setBeginDateTime(currentDateTime); // schedule1.setEndDateTime(currentDateTime.addDays(1)); // schedule1.setTitleName("scheduleOne"); // schedule1.setAllDay(true); // schedule1.setType(1); // schedule1.setRecurID(0); // schedule2.setID(2); // schedule2.setBeginDateTime(currentDateTime.addDays(1)); // schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); // schedule2.setTitleName("scheduleTwo"); // schedule2.setAllDay(true); // schedule2.setType(2); // schedule2.setRecurID(0); // schedule3.setID(3); // schedule3.setBeginDateTime(currentDateTime.addDays(2)); // schedule3.setEndDateTime(currentDateTime.addDays(2).addSecs(60 * 60)); // schedule3.setTitleName("scheduleThree"); // schedule3.setAllDay(false); // schedule3.setType(3); // schedule3.setRecurID(0); // schedule4.setID(4); // schedule4.setBeginDateTime(currentDateTime.addDays(3)); // schedule4.setEndDateTime(currentDateTime.addDays(3).addSecs(60 * 60)); // schedule4.setTitleName("scheduleFour"); // schedule4.setAllDay(false); // schedule4.setType(1); // schedule4.setRecurID(0); // schedule5.setID(5); // schedule5.setBeginDateTime(currentDateTime.addDays(4)); // schedule5.setEndDateTime(currentDateTime.addDays(4).addSecs(60 * 60)); // schedule5.setTitleName("scheduleFive"); // schedule5.setAllDay(false); // schedule5.setType(2); // schedule5.setRecurID(0); // scheduleFes.setID(6); // scheduleFes.setBeginDateTime(currentDateTime.addDays(5)); // scheduleFes.setEndDateTime(currentDateTime.addDays(5).addSecs(60 * 60)); // scheduleFes.setTitleName("scheduleFestival"); // scheduleFes.setAllDay(true); // scheduleFes.setType(4); // scheduleFes.setRecurID(0); // scheduleDate.append(schedule1); // scheduleDate.append(schedule2); // scheduleDate.append(schedule3); // scheduleDate.append(schedule4); // scheduleDate.append(schedule5); // scheduleDate.append(scheduleFes); // return scheduleDate; //} ////void CScheduleItem::setData(const ScheduleDataInfo &info, QDate date, int totalNum) //TEST_F(test_scheduleitem, setData) //{ // ScheduleDataInfo scheduleinof = getScheduleItemDInfo().first(); // mScheduleItem->setData(scheduleinof, QDate::currentDate(), 4); //} ////bool CScheduleItem::hasSelectSchedule(const ScheduleDataInfo &info) //TEST_F(test_scheduleitem, hasSelectSchedule) //{ // ScheduleDataInfo scheduleinfo1 = getScheduleItemDInfo().first(); // ScheduleDataInfo scheduleinfo2 = getScheduleItemDInfo().at(1); // mScheduleItem->setData(scheduleinfo1, QDate::currentDate(), 4); // bool res = mScheduleItem->hasSelectSchedule(scheduleinfo1); // EXPECT_TRUE(res); // res = mScheduleItem->hasSelectSchedule(scheduleinfo2); // EXPECT_FALSE(res); //} ////void CScheduleItem::splitText(QFont font, int w, int h, QString str, QStringList &liststr, QFontMetrics &fontm) //TEST_F(test_scheduleitem, splitText) //{ // QFont font; // QString str = "helo"; // QStringList strlist("hello,word!"); // QFontMetrics fontmetrics(font); // mScheduleItem->splitText(font, 10, 12, str, strlist, fontmetrics); // mScheduleItem->splitText(font, 40, 40, str, strlist, fontmetrics); //} //bool getItemFocus_Stub() //{ // return true; //} ////paintBackground //TEST_F(test_scheduleitem, paintBackground) //{ // QRectF rectf(0, 0, 100, 100); // mScheduleItem->setRect(rectf); // mScheduleItem->setData(getScheduleItemDInfo().first(), QDate::currentDate(), 4); // QPixmap pixmap(rectf.toRect().size()); // pixmap.fill(Qt::transparent); // QPainter painter(&pixmap); // mScheduleItem->m_vHighflag = true; // mScheduleItem->m_vSelectflag = false; // mScheduleItem->paintBackground(&painter, pixmap.rect(), true); // Stub stub; // stub.set(ADDR(CFocusItem, getItemFocus), getItemFocus_Stub); // mScheduleItem->m_vSelectflag = true; // mScheduleItem->paintBackground(&painter, pixmap.rect(), true); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_view/test_scheduleitem.h000066400000000000000000000010051473346337000305570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULEITEM_H #define TEST_SCHEDULEITEM_H //#include //#include //#include "graphicsItem/scheduleitem.h" //class test_scheduleitem : public ::QObject // , public ::testing::Test //{ //public: // test_scheduleitem(); // ~test_scheduleitem(); //protected: // CScheduleItem *mScheduleItem = nullptr; //}; #endif // TEST_SCHEDULEITEM_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/000077500000000000000000000000001473346337000252115ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_dayWidget/000077500000000000000000000000001473346337000301715ustar00rootroot00000000000000test_dayhuangliview.cpp000066400000000000000000000026231473346337000347000ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_dayWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_dayhuangliview.h" //test_dayhuangliview::test_dayhuangliview() //{ // mDayHuangLiLabel = new CDayHuangLiLabel(); //} //test_dayhuangliview::~test_dayhuangliview() //{ // delete mDayHuangLiLabel; // mDayHuangLiLabel = nullptr; //} ////void CDayHuangLiLabel::setbackgroundColor(QColor backgroundColor) //TEST_F(test_dayhuangliview, setbackgroundColor) //{ // mDayHuangLiLabel->setbackgroundColor(QColor(100, 100, 255)); //} ////void CDayHuangLiLabel::setTextInfo(QColor tcolor, QFont font) //TEST_F(test_dayhuangliview, setTextInfo) //{ // mDayHuangLiLabel->setTextInfo(QColor(100, 100, 255), QFont()); //} ////void CDayHuangLiLabel::setHuangLiText(QStringList vhuangli, int type) //TEST_F(test_dayhuangliview, setHuangLiText) //{ // QStringList strlist("嫁娶 入土"); // mDayHuangLiLabel->setHuangLiText(strlist, 1); // QStringList strlist1(""); // mDayHuangLiLabel->setHuangLiText(strlist1, 2); //} //TEST_F(test_dayhuangliview, getPixmap) //{ // QStringList strlist("嫁娶 入土"); // mDayHuangLiLabel->setHuangLiText(strlist, 1); // mDayHuangLiLabel->setbackgroundColor(QColor(100, 100, 255)); // mDayHuangLiLabel->setFixedSize(200, 50); // QPixmap pixmap(mDayHuangLiLabel->size()); // mDayHuangLiLabel->render(&pixmap); //} test_dayhuangliview.h000066400000000000000000000010241473346337000343370ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_dayWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_DAYHUANGLIVIEW_H #define TEST_DAYHUANGLIVIEW_H //#include //#include //#include //class test_dayhuangliview : public QObject // , public ::testing::Test //{ //public: // test_dayhuangliview(); // ~test_dayhuangliview(); //protected: // CDayHuangLiLabel *mDayHuangLiLabel = nullptr; //}; #endif // TEST_DAYHUANGLIVIEW_H test_daymonthview.cpp000066400000000000000000000075321473346337000344020ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_dayWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_daymonthview.h" //test_daymonthview::test_daymonthview() //{ // mDayMonthView = new CDayMonthView(); //} //test_daymonthview::~test_daymonthview() //{ // delete mDayMonthView; // mDayMonthView = nullptr; //} //QVector dayMonthviewGetDayList() //{ // QVector dateList {}; // QDate currentDate = QDate::currentDate(); // for (int i = 0; i < 42; i++) { // dateList.append(currentDate.addDays(i)); // } // return dateList; //} //QMap dayMonthViewGetHuangLiDayInfo() //{ // QMap huangLiDayInfo {}; // CaHuangLiDayInfo huangLiInfo1 {}; // huangLiInfo1.mGanZhiYear = "辛丑牛年"; //年干支 // huangLiInfo1.mGanZhiMonth = "庚寅月"; //月干支 // huangLiInfo1.mGanZhiDay = "辛卯日"; //日干支 // huangLiInfo1.mLunarMonthName = "正月"; //农历月名称 // huangLiInfo1.mLunarDayName = "初一"; //农历日名称 // huangLiInfo1.mLunarLeapMonth = 4; //闰月 // huangLiInfo1.mZodiac = "牛"; //生肖 // huangLiInfo1.mTerm = ""; //农历节气 // huangLiInfo1.mSolarFestival = "国庆节"; //阳历节日 // huangLiInfo1.mLunarFestival = "除夕"; //农历节日 // huangLiInfo1.mSuit = "嫁娶"; //黄历宜 // huangLiInfo1.mAvoid = "入土"; //黄历忌 // huangLiDayInfo.insert(QDate::currentDate(), huangLiInfo1); // return huangLiDayInfo; //} //QVector dayMonthViewGetLineFlag() //{ // QVector flags {}; // for (int i = 0; i < 42; i++) { // flags.append(true); // } // return flags; //} ////void CDayMonthView::setShowDate(const QVector &showDate, const QDate &selectDate, const QDate ¤tDate) //TEST_F(test_daymonthview, setShowDate) //{ // mDayMonthView->setShowDate(dayMonthviewGetDayList(), QDate::currentDate(), QDate::currentDate()); //} ////void CDayMonthView::setLunarVisible(bool visible) //TEST_F(test_daymonthview, setLunarVisible) //{ // mDayMonthView->setLunarVisible(true); //} ////void CDayMonthView::setTheMe(int type) //TEST_F(test_daymonthview, setTheMe) //{ // mDayMonthView->setTheMe(1); // mDayMonthView->setTheMe(2); //} ////void CDayMonthView::setSearchFlag(bool flag) //TEST_F(test_daymonthview, setSearchFlag) //{ // mDayMonthView->setSearchFlag(true); //} ////void CDayMonthView::setHuangLiInfo(const CaHuangLiDayInfo &huangLiInfo) //TEST_F(test_daymonthview, setHuangLiInfo) //{ // mDayMonthView->setHuangLiInfo(dayMonthViewGetHuangLiDayInfo().value(QDate::currentDate())); //} ////void CDayMonthView::setHasScheduleFlag(const QVector &hasScheduleFlag) //TEST_F(test_daymonthview, setHasScheduleFlag) //{ // mDayMonthView->setHasScheduleFlag(dayMonthViewGetLineFlag()); //} ////void CDayMonthView::updateDateLunarDay() //TEST_F(test_daymonthview, updateDateLunarDay) //{ // mDayMonthView->updateDateLunarDay(); //} ////void CDayMonthView::changeSelectDate(const QDate &date) //TEST_F(test_daymonthview, changeSelectDate) //{ // mDayMonthView->changeSelectDate(QDate::currentDate()); //} ////void CDayMonthView::slotprev() //TEST_F(test_daymonthview, slotprev) //{ // mDayMonthView->setShowDate(dayMonthviewGetDayList(), QDate::currentDate().addDays(1), QDate::currentDate().addDays(1)); // mDayMonthView->slotprev(); //} ////void CDayMonthView::slotnext() //TEST_F(test_daymonthview, slotnext) //{ // mDayMonthView->setShowDate(dayMonthviewGetDayList(), QDate::currentDate().addDays(1), QDate::currentDate().addDays(1)); // mDayMonthView->slotnext(); //} ////void CDayMonthView::slottoday() //TEST_F(test_daymonthview, slottoday) //{ // mDayMonthView->setShowDate(dayMonthviewGetDayList(), QDate::currentDate().addDays(1), QDate::currentDate().addDays(1)); // mDayMonthView->slottoday(); //} test_daymonthview.h000066400000000000000000000010001473346337000340270ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_dayWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_DAYMONTHVIEW_H #define TEST_DAYMONTHVIEW_H //#include //#include //#include //class test_daymonthview : public QObject // , public ::testing::Test //{ //public: // test_daymonthview(); // ~test_daymonthview(); //protected: // CDayMonthView *mDayMonthView = nullptr; //}; #endif // TEST_DAYMONTHVIEW_H test_daywindow.cpp000066400000000000000000000025441473346337000336670ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_dayWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_daywindow.h" //test_dayWindow::test_dayWindow() //{ //} //void test_dayWindow::SetUp() //{ // QDateTime currentTime = QDateTime::currentDateTime(); // m_dayWindow = new CDayWindow(); // m_dayWindow->setCurrentDateTime(currentTime); // m_dayWindow->setSelectDate(currentTime.date()); //} //void test_dayWindow::TearDown() //{ // delete m_dayWindow; // m_dayWindow = nullptr; //} ////测试paintevent //TEST_F(test_dayWindow, getPixmap) //{ // m_dayWindow->setFixedSize(800, 600); // QPixmap pixmap(m_dayWindow->size()); // m_dayWindow->render(&pixmap); //} ////setTheme //TEST_F(test_dayWindow, setTheme) //{ // m_dayWindow->setTheMe(0); // m_dayWindow->setTheMe(1); // m_dayWindow->setTheMe(2); //} ////setSearchWFlag //TEST_F(test_dayWindow, setSearchWFlag) //{ // m_dayWindow->setSearchWFlag(false); //} ////slotChangeSelectDate //TEST_F(test_dayWindow, slotChangeSelectDate) //{ // m_dayWindow->slotChangeSelectDate(m_dayWindow->getSelectDate()); //} ////slotSwitchPrePage //TEST_F(test_dayWindow, slotSwitchPrePage) //{ // m_dayWindow->slotSwitchPrePage(); //} ////slotSwitchNextPage //TEST_F(test_dayWindow, slotSwitchNextPage) //{ // m_dayWindow->slotSwitchNextPage(); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_dayWidget/test_daywindow.h000066400000000000000000000010501473346337000334020ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_DAYWINDOW_H #define TEST_DAYWINDOW_H //#include "gtest/gtest.h" //#include "dayWidget/daywindow.h" //#include //class test_dayWindow : public QObject // , public ::testing::Test //{ // Q_OBJECT //public: // test_dayWindow(); // void SetUp() override; // void TearDown() override; //signals: //public slots: //public: // CDayWindow *m_dayWindow; //}; #endif // TEST_DAYWINDOW_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_monthWidget/000077500000000000000000000000001473346337000305415ustar00rootroot00000000000000test_monthdayview.cpp000066400000000000000000000124311473346337000347440ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_monthdayview.h" //#include "touchgestureoperation.h" //#include "../third-party_stub/stub.h" //#include //#include //static int monthdayview_int = 0; //static int monthdayview_stub_int() //{ // return monthdayview_int; //} //test_monthdayview::test_monthdayview() //{ // mMonthDayView = new CMonthDayView(); // mMonthWidget = new CMonthWidget(); // mMonthRect = new CMonthRect(); // mMonthRect->setDate(QDate()); // CMonthRect::setSelectRect(mMonthRect); //} //test_monthdayview::~test_monthdayview() //{ // delete mMonthDayView; // mMonthDayView = nullptr; // delete mMonthWidget; // mMonthWidget = nullptr; // delete mMonthRect; // mMonthRect = nullptr; //} ////void CMonthDayView::setSelectDate(const QDate &date) //TEST_F(test_monthdayview, setSelectdate) //{ // mMonthDayView->setSelectDate(QDate::currentDate()); //} ////void CMonthDayView::setTheMe(int type) //TEST_F(test_monthdayview, setTheMe) //{ // mMonthDayView->setTheMe(1); // mMonthDayView->setTheMe(2); //} ////void CMonthDayView::setSearchflag(bool flag) //TEST_F(test_monthdayview, setSearchflag) //{ // mMonthDayView->setSearchflag(false); //} //TEST_F(test_monthdayview, event_01) //{ // Stub stub; // stub.set(ADDR(touchGestureOperation, getTouchState), monthdayview_stub_int); // QMouseEvent e(QEvent::MouseButtonPress, QPointF(1, 1), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // mMonthDayView->event(&e); //} ////void CMonthWidget::setDate(const QDate date[12]) //TEST_F(test_monthdayview, setDate) //{ // QDate m_days[12]; // QDate currentDate = QDate::currentDate(); // for (int i = 0; i < 12; i++) { // m_days[i] = currentDate.addDays(i); // } // mMonthWidget->setDate(m_days); //} ////void CMonthWidget::updateSize() //TEST_F(test_monthdayview, updateSize) //{ // mMonthWidget->updateSize(); //} ////void CMonthRect::setDate(const QDate &date) //TEST_F(test_monthdayview, setRectDate) //{ // mMonthRect->setDate(QDate::currentDate()); // mMonthRect->getDate(); //} ////void CMonthRect::setRect(const QRectF &rect) //TEST_F(test_monthdayview, setRect) //{ // mMonthRect->setRect(QRectF()); // mMonthRect->rect(); //} ////void CMonthRect::setDevicePixelRatio(const qreal pixel) //TEST_F(test_monthdayview, setDevicePixelRatio) //{ // mMonthRect->setDevicePixelRatio(1.2); //} ////void CMonthRect::setTheMe(int type) //TEST_F(test_monthdayview, setRTheMe) //{ // mMonthRect->setTheMe(1); // mMonthRect->setTheMe(2); //} //TEST_F(test_monthdayview, paintEvent_01) //{ // QPaintEvent paint(QRect(0, 0, 1, 1)); // mMonthWidget->paintEvent(&paint); //} //TEST_F(test_monthdayview, mouseReleaseEvent_01) //{ // QMouseEvent e(QEvent::MouseButtonPress, QPointF(1, 1), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // mMonthWidget->mouseReleaseEvent(&e); //} //TEST_F(test_monthdayview, keyPressEvent_01) //{ // QKeyEvent e(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier); // mMonthWidget->keyPressEvent(&e); //} //TEST_F(test_monthdayview, keyPressEvent_02) //{ // QKeyEvent e(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier); // mMonthWidget->keyPressEvent(&e); //} //TEST_F(test_monthdayview, keyPressEvent_03) //{ // QKeyEvent e(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier); // mMonthWidget->keyPressEvent(&e); //} //TEST_F(test_monthdayview, focusInEvent_01) //{ // QFocusEvent e(QEvent::FocusIn, Qt::TabFocusReason); // mMonthWidget->focusInEvent(&e); // EXPECT_TRUE(mMonthWidget->m_isFocus); //} //TEST_F(test_monthdayview, focusInEvent_02) //{ // QFocusEvent e(QEvent::FocusIn, Qt::OtherFocusReason); // mMonthWidget->focusInEvent(&e); // EXPECT_FALSE(mMonthWidget->m_isFocus); //} //TEST_F(test_monthdayview, focusOutEvent_01) //{ // QFocusEvent e(QEvent::FocusIn, Qt::OtherFocusReason); // mMonthWidget->focusOutEvent(&e); // EXPECT_FALSE(mMonthWidget->m_isFocus); //} //TEST_F(test_monthdayview, mousePress_01) //{ // mMonthWidget->mousePress(QPoint(0, 0)); // EXPECT_FALSE(mMonthWidget->m_isFocus); //} //TEST_F(test_monthdayview, updateSize_01) //{ // mMonthWidget->updateSize(); //} //TEST_F(test_monthdayview, getMousePosItem_01) //{ // mMonthWidget->getMousePosItem(QPointF()); //} //TEST_F(test_monthdayview, updateShowDate_01) //{ // mMonthWidget->updateShowDate(QDate()); //} //TEST_F(test_monthdayview, paintItem_01) //{ // mMonthRect->m_Date = QDate(2022, 4, 22); // QPainter pa(mMonthWidget); // mMonthRect->paintItem(&pa, QRect(), true); //} //TEST_F(test_monthdayview, paintItem_02) //{ // mMonthRect->m_Date = QDate(2022, 4, 22); // mMonthRect->m_SelectRect = mMonthRect; // QPainter pa(mMonthWidget); // mMonthRect->paintItem(&pa, QRect(), true); //} //TEST_F(test_monthdayview, setDevicePixelRatio_01) //{ // mMonthRect->setDevicePixelRatio(10); // EXPECT_EQ(mMonthRect->m_DevicePixelRatio, 10); //} //TEST_F(test_monthdayview, setTheMe_01) //{ // mMonthRect->setTheMe(0); // EXPECT_EQ(mMonthRect->m_defaultTextColor, Qt::black); //} //TEST_F(test_monthdayview, setTheMe_02) //{ // mMonthRect->setTheMe(2); // EXPECT_EQ(mMonthRect->m_defaultTextColor, QColor("#C0C6D4")); //} test_monthdayview.h000066400000000000000000000011241473346337000344060ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MONTHDAYVIEW_H #define TEST_MONTHDAYVIEW_H #include //#include "monthWidget/monthdayview.h" //#include "gtest/gtest.h" //class test_monthdayview : public QObject // , public ::testing::Test //{ //public: // test_monthdayview(); // ~test_monthdayview(); //protected: // CMonthDayView *mMonthDayView = nullptr; // CMonthWidget *mMonthWidget = nullptr; // CMonthRect *mMonthRect = nullptr; //}; #endif // TEST_MONTHDAYVIEW_H test_monthscheduleview.cpp000066400000000000000000000331611473346337000357660ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_monthscheduleview.h" #include "dataManage/scheduledaterangeinfo.h" //test_monthscheduleview::test_monthscheduleview() //{ // QRect rect; // m_scene = new QGraphicsScene(); // mMonthScheduleView = new CMonthScheduleView(nullptr, m_scene); // mMonthScheduleWidgetItem = new CMonthScheduleItem(rect); // mWeekScheduleView = new CWeekScheduleView(); // mMonthScheduleNumButton = new CMonthScheduleNumItem(); //} //test_monthscheduleview::~test_monthscheduleview() //{ // delete mMonthScheduleView; // mMonthScheduleView = nullptr; // delete m_scene; // m_scene = nullptr; // delete mWeekScheduleView; // mWeekScheduleView = nullptr; // delete mMonthScheduleNumButton; // mMonthScheduleNumButton = nullptr; // delete mMonthScheduleWidgetItem; // mMonthScheduleWidgetItem = nullptr; //} //QVector getMonthScheduleDInfo() //{ // QVector scheduleDate {}; // ScheduleDataInfo schedule1, schedule2, schedule3, schedule4, schedule5, scheduleFes; // QDateTime currentDateTime = QDateTime::currentDateTime(); // schedule1.setID(1); // schedule1.setBeginDateTime(currentDateTime); // schedule1.setEndDateTime(currentDateTime.addDays(1)); // schedule1.setTitleName("scheduleOne"); // schedule1.setAllDay(true); // schedule1.setType(1); // schedule1.setRecurID(0); // schedule2.setID(2); // schedule2.setBeginDateTime(currentDateTime.addDays(1)); // schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); // schedule2.setTitleName("scheduleTwo"); // schedule2.setAllDay(true); // schedule2.setType(2); // schedule2.setRecurID(0); // schedule3.setID(3); // schedule3.setBeginDateTime(currentDateTime.addDays(2)); // schedule3.setEndDateTime(currentDateTime.addDays(2).addSecs(60 * 60)); // schedule3.setTitleName("scheduleThree"); // schedule3.setAllDay(false); // schedule3.setType(3); // schedule3.setRecurID(0); // schedule4.setID(4); // schedule4.setBeginDateTime(currentDateTime.addDays(3)); // schedule4.setEndDateTime(currentDateTime.addDays(3).addSecs(60 * 60)); // schedule4.setTitleName("scheduleFour"); // schedule4.setAllDay(false); // schedule4.setType(1); // schedule4.setRecurID(0); // schedule5.setID(5); // schedule5.setBeginDateTime(currentDateTime.addDays(4)); // schedule5.setEndDateTime(currentDateTime.addDays(4).addSecs(60 * 60)); // schedule5.setTitleName("scheduleFive"); // schedule5.setAllDay(false); // schedule5.setType(2); // schedule5.setRecurID(0); // scheduleFes.setID(6); // scheduleFes.setBeginDateTime(currentDateTime.addDays(5)); // scheduleFes.setEndDateTime(currentDateTime.addDays(5).addSecs(60 * 60)); // scheduleFes.setTitleName("scheduleFestival"); // scheduleFes.setAllDay(true); // scheduleFes.setType(4); // scheduleFes.setRecurID(0); // scheduleDate.append(schedule1); // scheduleDate.append(schedule2); // scheduleDate.append(schedule3); // scheduleDate.append(schedule4); // scheduleDate.append(schedule5); // scheduleDate.append(scheduleFes); // return scheduleDate; //} //QMap> getMonthMapScheduleDInfo(int getDays) //{ // QDate currentDate = QDate::currentDate(); // QVector scheduleInfo {}; // QMap> scheduleDateInfo {}; // switch (getDays) { // case 0: { // scheduleInfo.append(getMonthScheduleDInfo().at(0)); // scheduleDateInfo[currentDate] = scheduleInfo; // } break; // case 1: { // scheduleInfo.append(getMonthScheduleDInfo().at(1)); // scheduleDateInfo[currentDate.addDays(1)] = scheduleInfo; // } break; // case 2: { // scheduleInfo.append(getMonthScheduleDInfo().at(2)); // scheduleDateInfo[currentDate.addDays(2)] = scheduleInfo; // } break; // default: { // scheduleInfo.append(getMonthScheduleDInfo().at(3)); // scheduleDateInfo[currentDate.addDays(3)] = scheduleInfo; // scheduleInfo.append(getMonthScheduleDInfo().at(4)); // scheduleDateInfo[currentDate.addDays(4)] = scheduleInfo; // scheduleInfo.append(getMonthScheduleDInfo().at(5)); // scheduleDateInfo[currentDate.addDays(5)] = scheduleInfo; // } break; // } // return scheduleDateInfo; //} //QVector getScheduleDateRangeInfo() //{ // QVector scheduleDateRangeInfo {}; // MScheduleDateRangeInfo scheduledaterangeinfo1; // scheduledaterangeinfo1.num = 4; // scheduledaterangeinfo1.bdate = QDate::currentDate(); // scheduledaterangeinfo1.edate = QDate::currentDate().addDays(1); // scheduledaterangeinfo1.state = true; // scheduledaterangeinfo1.tData = getMonthScheduleDInfo().first(); // // MScheduleDateRangeInfo scheduledaterangeinfo2; // // scheduledaterangeinfo2.num = 2; // // scheduledaterangeinfo2.bDate = QDate(2021, 1, 23); // // scheduledaterangeinfo2.eDate = QDate(2021, 1, 24); // // scheduledaterangeinfo2.state = false; // // scheduledaterangeinfo2.tData = getMonthScheduleDInfo().at(1); // // MScheduleDateRangeInfo scheduledaterangeinfo3; // // scheduledaterangeinfo3.num = 2; // // scheduledaterangeinfo3.bDate = QDate(2021, 1, 25); // // scheduledaterangeinfo3.eDate = QDate(2021, 1, 26); // // scheduledaterangeinfo3.state = false; // // scheduledaterangeinfo3.tData = getMonthScheduleDInfo().at(2); // // MScheduleDateRangeInfo scheduledaterangeinfo4; // // scheduledaterangeinfo4.num = 2; // // scheduledaterangeinfo4.bDate = QDate(2021, 1, 27); // // scheduledaterangeinfo4.eDate = QDate(2021, 1, 28); // // scheduledaterangeinfo4.state = false; // // scheduledaterangeinfo4.tData = getMonthScheduleDInfo().at(3); // scheduleDateRangeInfo.append(scheduledaterangeinfo1); // // scheduleDateRangeInfo.append(scheduledaterangeinfo2); // // scheduleDateRangeInfo.append(scheduledaterangeinfo3); // // scheduleDateRangeInfo.append(scheduledaterangeinfo4); // return scheduleDateRangeInfo; //} ////void CMonthScheduleView::setallsize(int w, int h, int left, int top, int buttom, int itemHeight) //TEST_F(test_monthscheduleview, setallsize) //{ // mMonthScheduleView->setallsize(1, 1, 1, 1, 1, 1); //} ////void CMonthScheduleView::setData(QMap > &data, int currentMonth) //TEST_F(test_monthscheduleview, setData) //{ // QMap> mapScheduleInfo = getMonthMapScheduleDInfo(4); // mMonthScheduleView->setData(mapScheduleInfo, 1); //} ////void CMonthScheduleView::slotFontChange() //TEST_F(test_monthscheduleview, slotFontChange) //{ // mMonthScheduleView->slotFontChange(); //} ////void CMonthScheduleView::updateData() //TEST_F(test_monthscheduleview, updateDate) //{ // mMonthScheduleView->updateData(); //} ////void CMonthScheduleView::updateHeight() //TEST_F(test_monthscheduleview, updateHeight) //{ // mMonthScheduleView->updateHeight(); //} ////QVector CMonthScheduleView::getScheduleShowItem() const //TEST_F(test_monthscheduleview, getScheduleShowItem) //{ // mMonthScheduleView->getScheduleShowItem(); //} ////void CMonthScheduleView::updateDate(const ScheduleDataInfo &info) //TEST_F(test_monthscheduleview, updateData) //{ // mMonthScheduleView->updateDate(getMonthScheduleDInfo().first()); //} ////void CMonthScheduleView::changeDate(const ScheduleDataInfo &info) //TEST_F(test_monthscheduleview, changeDate) //{ // mMonthScheduleView->changeDate(getMonthScheduleDInfo().first()); //} ////void CMonthScheduleView::updateDate(const int row, const ScheduleDataInfo &info) //TEST_F(test_monthscheduleview, updatedate) //{ // mMonthScheduleView->updateDate(2, getMonthScheduleDInfo().first()); //} ////void CMonthScheduleView::updateDateShow(QVector> &vCMDaySchedule, QVector &scheduleShowItem) //TEST_F(test_monthscheduleview, updateDateShow) //{ // QVector scheduleinfo = getScheduleDateRangeInfo(); // QVector> m_scheduledaterangeinfo {}; // QVector m_scheduleshowinfo {}; // m_scheduledaterangeinfo.append(scheduleinfo); // m_scheduleshowinfo.append(mMonthScheduleWidgetItem); // mMonthScheduleView->updateDateShow(m_scheduledaterangeinfo, m_scheduleshowinfo); //} ////void CMonthScheduleView::createScheduleItemWidget(MScheduleDateRangeInfo info, int cNum, QVector &scheduleShowItem) //TEST_F(test_monthscheduleview, createScheduleItemWidget) //{ // QVector scheduledaterangeinfo = getScheduleDateRangeInfo(); // QVector m_scheduleshowinfo {}; // m_scheduleshowinfo.append(mMonthScheduleWidgetItem); // mMonthScheduleView->createScheduleItemWidget(scheduledaterangeinfo.first(), 1, m_scheduleshowinfo); //} ////void CMonthScheduleView::createScheduleNumWidget(MScheduleDateRangeInfo info, int cNum, QVector &scheduleShowItem) //TEST_F(test_monthscheduleview, createScheduleNumWidget) //{ // MScheduleDateRangeInfo scheduledaterangeinfo = getScheduleDateRangeInfo().first(); // QVector m_scheduleshowinfo {}; // QMap> mapScheduleInfo = getMonthMapScheduleDInfo(4); // mMonthScheduleView->setData(mapScheduleInfo, 3); // mMonthScheduleView->createScheduleNumWidget(scheduledaterangeinfo, 2, m_scheduleshowinfo); //} ////void CMonthScheduleView::computePos(int cnum, QDate bgeindate, QDate enddate, QPoint &pos, int &fw, int &fh) //TEST_F(test_monthscheduleview, computePos) //{ // QDate bDate = QDate(2020, 1, 20); // QDate eDate = QDate(2021, 1, 23); // QPoint pos = QPoint(4, 4); // int fw = 8; // int fh = 8; // mMonthScheduleView->computePos(2, bDate, eDate, pos, fw, fh); //} ////void CWeekScheduleView::setData(QMap > &data, const QDate &startDate, const QDate &stopDate) //TEST_F(test_monthscheduleview, setweekData) //{ // QMap> mapScheduleInfo = getMonthMapScheduleDInfo(4); // QDate startDate = QDate(2021, 1, 21); // QDate stopData = QDate(2021, 1, 27); // mWeekScheduleView->setData(mapScheduleInfo, startDate, stopData); //} ////bool CWeekScheduleView::addData(const ScheduleDataInfo &info) //TEST_F(test_monthscheduleview, addData) //{ // QMap> mapScheduleInfo = getMonthMapScheduleDInfo(4); // QDate startDate = QDate::currentDate(); // QDate stopData = startDate.addDays(6); // mWeekScheduleView->setData(mapScheduleInfo, startDate, stopData); // bool re = mWeekScheduleView->addData(getMonthScheduleDInfo().first()); // EXPECT_TRUE(re); // startDate = QDate::currentDate().addDays(-7); // stopData = QDate::currentDate().addDays(-1); // mWeekScheduleView->setData(mapScheduleInfo, startDate, stopData); // re = mWeekScheduleView->addData(getMonthScheduleDInfo().first()); // EXPECT_FALSE(re); //} ////void CWeekScheduleView::changeDate(const ScheduleDataInfo &info) //TEST_F(test_monthscheduleview, changedate) //{ // mWeekScheduleView->changeDate(getMonthScheduleDInfo().first()); //} ////void CWeekScheduleView::setHeight(const int ScheduleHeight, const int DayHeigth) //TEST_F(test_monthscheduleview, setHeight) //{ // mWeekScheduleView->setHeight(10, 10); //} ////void CWeekScheduleView::updateSchedule(const bool isNormalDisplay, const ScheduleDataInfo &info) //TEST_F(test_monthscheduleview, updateSchedule) //{ // mWeekScheduleView->updateSchedule(true, getMonthScheduleDInfo().first()); // mWeekScheduleView->updateSchedule(false, getMonthScheduleDInfo().first()); //} ////void CWeekScheduleView::clearItem() //TEST_F(test_monthscheduleview, clearItem) //{ // mWeekScheduleView->clearItem(); //} ////void CWeekScheduleView::setMaxNum() //TEST_F(test_monthscheduleview, setMacNum) //{ // mWeekScheduleView->setMaxNum(); //} ////void CWeekScheduleView::mScheduleClear() //TEST_F(test_monthscheduleview, mScheduleClear) //{ // mWeekScheduleView->mScheduleClear(); //} ////void CWeekScheduleView::sortAndFilter(QVector &vMDaySchedule) //TEST_F(test_monthscheduleview, sortAndFileter) //{ // QVector scheduleinfo = getScheduleDateRangeInfo(); // mWeekScheduleView->setHeight(4, 20); // QMap> mapScheduleInfo = getMonthMapScheduleDInfo(4); // QDate startDate = QDate::currentDate(); // QDate stopData = startDate.addDays(6); // mWeekScheduleView->setData(mapScheduleInfo, startDate, stopData); // mWeekScheduleView->sortAndFilter(scheduleinfo); //} ////void CMonthScheduleNumButton::setColor(QColor color1, QColor color2, bool GradientFlag) //TEST_F(test_monthscheduleview, setColor) //{ // QColor color1(100, 100, 255); // QColor color2(200, 200, 255); // mMonthScheduleNumButton->setColor(color1, color2); //} ////void CMonthScheduleNumButton::setText(QColor tcolor, QFont font, QPoint pos) //TEST_F(test_monthscheduleview, setText) //{ // QColor color(100, 100, 255); // QFont font; // mMonthScheduleNumButton->setText(color, font); //} ////void CMonthScheduleNumButton::setSizeType(DFontSizeManager::SizeType sizeType) //TEST_F(test_monthscheduleview, setSizeType) //{ // mMonthScheduleNumButton->setSizeType(DFontSizeManager::SizeType::T1); //} ////QPixmap CMonthScheduleWidgetItem::getPixmap() //TEST_F(test_monthscheduleview, getPixmap) //{ // mMonthScheduleWidgetItem->getPixmap(); //} test_monthscheduleview.h000066400000000000000000000015531473346337000354330ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MONTHSCHEDULEVIEW_H #define TEST_MONTHSCHEDULEVIEW_H #include //#include "monthWidget/monthscheduleview.h" //#include "graphicsItem/cmonthscheduleitem.h" //#include "graphicsItem/cmonthschedulenumitem.h" //#include "gtest/gtest.h" //class test_monthscheduleview : public QObject // , public ::testing::Test //{ //public: // test_monthscheduleview(); // ~test_monthscheduleview(); //protected: // CMonthScheduleView *mMonthScheduleView = nullptr; // CMonthScheduleItem *mMonthScheduleWidgetItem = nullptr; // CWeekScheduleView *mWeekScheduleView = nullptr; // CMonthScheduleNumItem *mMonthScheduleNumButton = nullptr; // QGraphicsScene *m_scene = nullptr; //}; #endif // TEST_MONTHSCHEDULEVIEW_H test_monthview.cpp000066400000000000000000000147651473346337000342620ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_monthview.h" //test_monthview::test_monthview() //{ // mMonthView = new CMonthView(); //} //test_monthview::~test_monthview() //{ // delete mMonthView; // mMonthView = nullptr; //} //QVector getMonthViewScheduleDInfo() //{ // QVector scheduleDate {}; // ScheduleDataInfo schedule1, schedule2, schedule3, schedule4, schedule5, scheduleFes; // QDateTime currentDateTime = QDateTime::currentDateTime(); // schedule1.setID(1); // schedule1.setBeginDateTime(currentDateTime); // schedule1.setEndDateTime(currentDateTime.addDays(1)); // schedule1.setTitleName("scheduleOne"); // schedule1.setAllDay(true); // schedule1.setType(1); // schedule1.setRecurID(0); // schedule2.setID(2); // schedule2.setBeginDateTime(currentDateTime.addDays(1)); // schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); // schedule2.setTitleName("scheduleTwo"); // schedule2.setAllDay(true); // schedule2.setType(2); // schedule2.setRecurID(0); // schedule3.setID(3); // schedule3.setBeginDateTime(currentDateTime.addDays(2)); // schedule3.setEndDateTime(currentDateTime.addDays(2).addSecs(60 * 60)); // schedule3.setTitleName("scheduleThree"); // schedule3.setAllDay(false); // schedule3.setType(3); // schedule3.setRecurID(0); // schedule4.setID(4); // schedule4.setBeginDateTime(currentDateTime.addDays(3)); // schedule4.setEndDateTime(currentDateTime.addDays(3).addSecs(60 * 60)); // schedule4.setTitleName("scheduleFour"); // schedule4.setAllDay(false); // schedule4.setType(1); // schedule4.setRecurID(0); // schedule5.setID(5); // schedule5.setBeginDateTime(currentDateTime.addDays(4)); // schedule5.setEndDateTime(currentDateTime.addDays(4).addSecs(60 * 60)); // schedule5.setTitleName("scheduleFive"); // schedule5.setAllDay(false); // schedule5.setType(2); // schedule5.setRecurID(0); // scheduleFes.setID(6); // scheduleFes.setBeginDateTime(currentDateTime.addDays(5)); // scheduleFes.setEndDateTime(currentDateTime.addDays(5).addSecs(60 * 60)); // scheduleFes.setTitleName("scheduleFestival"); // scheduleFes.setAllDay(true); // scheduleFes.setType(4); // scheduleFes.setRecurID(0); // scheduleDate.append(schedule1); // scheduleDate.append(schedule2); // scheduleDate.append(schedule3); // scheduleDate.append(schedule4); // scheduleDate.append(schedule5); // scheduleDate.append(scheduleFes); // return scheduleDate; //} //QVector MonthviewGetDayList() //{ // QVector dateList {}; // QDate currentDate = QDate::currentDate(); // for (int i = 0; i < 42; i++) { // dateList.append(currentDate.addDays(i)); // } // return dateList; //} //QMap MonthViewGetHuangLiDayInfo() //{ // QMap huangLiDayinfo {}; // CaHuangLiDayInfo huangLiInfo1 {}; // huangLiInfo1.mGanZhiYear = "辛丑牛年"; //年干支 // huangLiInfo1.mGanZhiMonth = "庚寅月"; //月干支 // huangLiInfo1.mGanZhiDay = "辛卯日"; //日干支 // huangLiInfo1.mLunarMonthName = "正月"; //农历月名称 // huangLiInfo1.mLunarDayName = "初一"; //农历日名称 // huangLiInfo1.mLunarLeapMonth = 4; //闰月 // huangLiInfo1.mZodiac = "牛"; //生肖 // huangLiInfo1.mTerm = ""; //农历节气 // huangLiInfo1.mSolarFestival = "国庆节"; //阳历节日 // huangLiInfo1.mLunarFestival = "除夕"; //农历节日 // huangLiInfo1.mSuit = "嫁娶"; //黄历宜 // huangLiInfo1.mAvoid = "入土"; //黄历忌 // huangLiDayinfo.insert(QDate::currentDate(), huangLiInfo1); // return huangLiDayinfo; //} ////void CMonthView::setTheMe(int type) //TEST_F(test_monthview, setTheMe) //{ // mMonthView->setTheMe(1); // mMonthView->setTheMe(2); //} ////void CMonthView::setSelectSchedule(const ScheduleDataInfo &scheduleInfo) //TEST_F(test_monthview, setSelectSchedule) //{ // ScheduleDataInfo scheduleinfo = getMonthViewScheduleDInfo().first(); // mMonthView->setSelectSchedule(scheduleinfo); //} ////void CMonthView::slotScheduleRemindWidget(const bool isShow, const ScheduleDataInfo &out) //TEST_F(test_monthview, slotScheduleRemindWidget) //{ // ScheduleDataInfo scheduleinfo = getMonthViewScheduleDInfo().first(); // mMonthView->slotScheduleRemindWidget(false, scheduleinfo); // mMonthView->slotScheduleRemindWidget(true, scheduleinfo); //} ////void CMonthView::setFirstWeekday(Qt::DayOfWeek weekday) //TEST_F(test_monthview, setFirstWeekday) //{ // mMonthView->setFirstWeekday(Qt::Sunday); //} ////void CMonthView::setShowDate(const QVector &showDate) //TEST_F(test_monthview, setShowDate) //{ // mMonthView->setShowDate(MonthviewGetDayList()); //} ////void CMonthView::setHuangLiInfo(const QMap &huangLiInfo) //TEST_F(test_monthview, setHuangLiInfo) //{ // mMonthView->setHuangLiInfo(MonthViewGetHuangLiDayInfo()); //} ////void CMonthView::setFestival(const QMap &festivalInfo) //TEST_F(test_monthview, setFestival) //{ // QMap festivalInfo {}; // festivalInfo.insert(QDate::currentDate(), 1); // festivalInfo.insert(QDate::currentDate().addDays(1), 2); // mMonthView->setFestival(festivalInfo); //} ////void CMonthView::setScheduleInfo(const QMap > &scheduleInfo) //TEST_F(test_monthview, setScheduleInfo) //{ // QMap> scheduleinfo {}; // scheduleinfo.insert(QDate::currentDate(), getMonthViewScheduleDInfo()); // mMonthView->setScheduleInfo(scheduleinfo); //} ////void CMonthView::setSearchScheduleInfo(const QVector &searchScheduleInfo) //TEST_F(test_monthview, setSearchScheduleInfo) //{ // mMonthView->setSearchScheduleInfo(getMonthViewScheduleDInfo()); //} ////void CMonthView::setCurrentDate(const QDate ¤tDate) //TEST_F(test_monthview, setCurrentDate) //{ // mMonthView->setCurrentDate(QDate::currentDate()); //} ////ScheduleDataInfo CMonthView::getScheduleInfo(const QDate &beginDate, const QDate &endDate) //TEST_F(test_monthview, getScheduleInfo) //{ // QDate currentDate = QDate::currentDate(); // QDate currentDate1 = QDate::currentDate().addDays(1); // mMonthView->getScheduleInfo(currentDate, currentDate1); // mMonthView->getScheduleInfo(currentDate1, currentDate); //} //TEST_F(test_monthview, isDragging) //{ // mMonthView->isDragging(); //} test_monthview.h000066400000000000000000000007431473346337000337160ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MONTHVIEW_H #define TEST_MONTHVIEW_H #include #include "gtest/gtest.h" //#include "monthWidget/monthview.h" //class test_monthview : public QObject // , public ::testing::Test //{ //public: // test_monthview(); // ~test_monthview(); //protected: // CMonthView *mMonthView = nullptr; //}; #endif // TEST_MONTHVIEW_H test_monthweekview.cpp000066400000000000000000000036511473346337000351260ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_monthweekview.h" #include #include //test_monthweekview::test_monthweekview() //{ // mMonthWeekView = new CMonthWeekView(); // mWeekRect = new WeekRect(); //} //test_monthweekview::~test_monthweekview() //{ // delete mMonthWeekView; // mMonthWeekView = nullptr; // delete mWeekRect; // mWeekRect = nullptr; //} ////void CMonthWeekView::setFirstDay(const Qt::DayOfWeek weekday) //TEST_F(test_monthweekview, setFirstDay) //{ // mMonthWeekView->setFirstDay(static_cast(QDate::currentDate().dayOfWeek())); // mMonthWeekView->setFirstDay(static_cast(QDate::currentDate().addDays(1).dayOfWeek())); //} ////void CMonthWeekView::setTheMe(int type) //TEST_F(test_monthweekview, setTheMe) //{ // mMonthWeekView->setTheMe(1); // mMonthWeekView->setTheMe(2); //} ////void CMonthWeekView::setCurrentDate(const QDate ¤tDate) //TEST_F(test_monthweekview, setCurrentDate) //{ // mMonthWeekView->setCurrentDate(QDate::currentDate()); //} //TEST_F(test_monthweekview, paintEvent_01) //{ // QPaintEvent e(QRect(0, 0, 1, 1)); // mMonthWeekView->paintEvent(&e); //} ////void WeekRect::setWeek(const Qt::DayOfWeek &showWeek, const bool &showLine) //TEST_F(test_monthweekview, setWeek) //{ // mWeekRect->setWeek(Qt::Sunday, false); //} ////void WeekRect::setRect(const QRectF &rectF) //TEST_F(test_monthweekview, setRect) //{ // mWeekRect->setRect(QRectF()); //} ////void WeekRect::setTheMe(int type) //TEST_F(test_monthweekview, setRectTheMe_01) //{ // mWeekRect->setTheMe(1); // EXPECT_EQ(mWeekRect->m_testColor, QColor("#6F6F6F")); //} ////void WeekRect::setTheMe(int type) //TEST_F(test_monthweekview, setRectTheMe_02) //{ // mWeekRect->setTheMe(3); // EXPECT_EQ(mWeekRect->m_testColor, QColor("#C0C6D4")); //} test_monthweekview.h000066400000000000000000000010561473346337000345700ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MONTHWEEKVIEW_H #define TEST_MONTHWEEKVIEW_H #include //#include "monthWidget/monthweekview.h" //#include "gtest/gtest.h" //class test_monthweekview : public QObject // , public ::testing::Test //{ //public: // test_monthweekview(); // ~test_monthweekview(); //protected: // CMonthWeekView *mMonthWeekView = nullptr; // WeekRect *mWeekRect = nullptr; //}; #endif // TEST_MONTHWEEKVIEW_H test_monthwindow.cpp000066400000000000000000000035131473346337000346040ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_monthwindow.h" //#include "../third-party_stub/stub.h" //#include "monthWidget/monthview.h" //test_monthWindow::test_monthWindow() //{ //} //void test_monthWindow::SetUp() //{ // m_monthWindow = new CMonthWindow(nullptr); //} //void test_monthWindow::TearDown() //{ // delete m_monthWindow; // m_monthWindow = nullptr; //} //TEST_F(test_monthWindow, setTheMe) //{ // m_monthWindow->setTheMe(0); // m_monthWindow->setTheMe(1); // m_monthWindow->setTheMe(2); //} //namespace MonthWindow { //void deleteselectschedule_Stub(void *obj) //{ // Q_UNUSED(obj) //} //} // namespace MonthWindow //TEST_F(test_monthWindow, deleteselectSchedule) //{ // Stub stub; // stub.set(ADDR(CMonthView, deleteSelectSchedule), MonthWindow::deleteselectschedule_Stub); // m_monthWindow->deleteselectSchedule(); //} //TEST_F(test_monthWindow, previousMonth) //{ // QDate currentDate = QDate::currentDate(); // m_monthWindow->setSelectDate(currentDate); // m_monthWindow->previousMonth(); // ASSERT_EQ(m_monthWindow->getSelectDate(), currentDate.addMonths(1)); //} //TEST_F(test_monthWindow, nextMonth) //{ // QDate currentDate = QDate::currentDate(); // m_monthWindow->setSelectDate(currentDate); // m_monthWindow->nextMonth(); // ASSERT_EQ(m_monthWindow->getSelectDate(), currentDate.addMonths(-1)); //} //TEST_F(test_monthWindow, slotViewSelectDate) //{ // QDate currentDate = QDate::currentDate(); // m_monthWindow->slotViewSelectDate(currentDate); //} //TEST_F(test_monthWindow, resizeEvent) //{ // m_monthWindow->setFixedSize(500, 300); // m_monthWindow->setFixedSize(600, 400); //} //TEST_F(test_monthWindow, slottoday) //{ // m_monthWindow->slottoday(); //} test_monthwindow.h000066400000000000000000000010601473346337000342440ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MONTHWINDOW_H #define TEST_MONTHWINDOW_H #include "gtest/gtest.h" //#include "monthWidget/monthwindow.h" //#include //class test_monthWindow : public QObject // , public ::testing::Test //{ // Q_OBJECT //public: // explicit test_monthWindow(); // void SetUp() override; // void TearDown() override; //public: // CMonthWindow *m_monthWindow {nullptr}; //}; #endif // TEST_MONTHWINDOW_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_schedulesearchview.cpp000066400000000000000000000323461473346337000326410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_schedulesearchview.h" #include "../third-party_stub/stub.h" #include "../calendar-basicstruct/src/utils.h" #include "../third-party_stub/addr_pri.h" #include "scheduleTask/cscheduledbus.h" #include "scheduleTask/scheduletask.h" #include "constants.h" #include "../testscheduledata.h" #include "../dialog_stub.h" #include QVector getScheduleDInfo() { QVector scheduleDate {}; ScheduleDataInfo schedule1, schedule2, schedule3, schedule4, schedule5, scheduleFes; QDateTime currentDateTime = QDateTime::currentDateTime(); schedule1.setID(1); schedule1.setBeginDateTime(currentDateTime); schedule1.setEndDateTime(currentDateTime.addSecs(60 * 60)); schedule1.setTitleName("scheduleOne"); schedule1.setAllDay(true); schedule1.setType(1); schedule1.setRecurID(0); schedule2.setID(2); schedule2.setBeginDateTime(currentDateTime.addDays(1)); schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); schedule2.setTitleName("scheduleTwo"); schedule2.setAllDay(true); schedule2.setType(2); schedule2.setRecurID(0); schedule3.setID(3); schedule3.setBeginDateTime(currentDateTime.addDays(2)); schedule3.setEndDateTime(currentDateTime.addDays(2).addSecs(60 * 60)); schedule3.setTitleName("scheduleThree"); schedule3.setAllDay(false); schedule3.setType(3); schedule3.setRecurID(0); schedule4.setID(4); schedule4.setBeginDateTime(currentDateTime.addDays(3)); schedule4.setEndDateTime(currentDateTime.addDays(3).addSecs(60 * 60)); schedule4.setTitleName("scheduleFour"); schedule4.setAllDay(false); schedule4.setType(1); schedule4.setRecurID(0); schedule5.setID(5); schedule5.setBeginDateTime(currentDateTime.addDays(4)); schedule5.setEndDateTime(currentDateTime.addDays(4).addSecs(60 * 60)); schedule5.setTitleName("scheduleFive"); schedule5.setAllDay(false); schedule5.setType(2); schedule5.setRecurID(0); scheduleFes.setID(6); scheduleFes.setBeginDateTime(currentDateTime.addDays(5)); scheduleFes.setEndDateTime(currentDateTime.addDays(5).addSecs(60 * 60)); scheduleFes.setTitleName("scheduleFestival"); scheduleFes.setAllDay(true); scheduleFes.setType(4); scheduleFes.setRecurID(0); scheduleDate.append(schedule1); scheduleDate.append(schedule2); scheduleDate.append(schedule3); scheduleDate.append(schedule4); scheduleDate.append(schedule5); scheduleDate.append(scheduleFes); return scheduleDate; } QMap> getMapScheduleDInfo(int getDays) { QDate currentDate = QDate::currentDate(); QVector scheduleInfo {}; QMap> scheduleDateInof {}; switch (getDays) { case 0: { scheduleInfo.append(getScheduleDInfo().at(0)); scheduleDateInof[currentDate] = scheduleInfo; } break; case 1: { scheduleInfo.append(getScheduleDInfo().at(1)); scheduleDateInof[currentDate.addDays(1)] = scheduleInfo; } break; case 2: { scheduleInfo.append(getScheduleDInfo().at(2)); scheduleDateInof[currentDate.addDays(2)] = scheduleInfo; } break; default: { scheduleInfo.append(getScheduleDInfo().at(3)); scheduleDateInof[currentDate.addDays(3)] = scheduleInfo; scheduleInfo.append(getScheduleDInfo().at(4)); scheduleDateInof[currentDate.addDays(4)] = scheduleInfo; scheduleInfo.append(getScheduleDInfo().at(5)); scheduleDateInof[currentDate.addDays(5)] = scheduleInfo; } break; } return scheduleDateInof; } bool stub_QueryJobs(const QString &key, QDateTime starttime, QDateTime endtime, QMap> &out) { Q_UNUSED(key); int days = static_cast(starttime.daysTo(endtime)); switch (days) { case 0: { out = getMapScheduleDInfo(0); } break; case 1: { out = getMapScheduleDInfo(1); } break; case 2: { out = getMapScheduleDInfo(2); } break; default: { out = getMapScheduleDInfo(days); } break; } return true; } static QAction* schedulesearchview_stub_QMenu_exec() { return nullptr; } test_schedulesearchview::test_schedulesearchview() { } test_schedulesearchview::~test_schedulesearchview() { } void test_schedulesearchview::SetUp() { mScheduleSearchView = new CScheduleSearchView(); mScheduleSearchDateItem = new CScheduleSearchDateItem(); mScheduleListWidget = new CScheduleListWidget(); mScheduleSearchItem = new CScheduleSearchItem(); } void test_schedulesearchview::TearDown() { delete mScheduleSearchView; mScheduleSearchView = nullptr; delete mScheduleSearchDateItem; mScheduleSearchDateItem = nullptr; delete mScheduleListWidget; mScheduleListWidget = nullptr; delete mScheduleSearchItem; mScheduleSearchItem = nullptr; } //void CScheduleSearchView::setTheMe(int type) TEST_F(test_schedulesearchview, setTheMe) { int type = 1; mScheduleSearchView->setTheMe(type); type = 2; mScheduleSearchView->setTheMe(type); } //void CScheduleSearchView::clearSearch() TEST_F(test_schedulesearchview, clearSearch) { ScheduleDataInfo schedule1; schedule1.setID(1); schedule1.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(0, 0, 0))); schedule1.setEndDateTime(QDateTime(QDate(2021, 1, 2), QTime(23, 59, 59))); schedule1.setTitleName("schedule test one"); schedule1.setAllDay(true); schedule1.setType(1); schedule1.setRecurID(0); mScheduleSearchView->createItemWidget(schedule1, QDate(2021, 1, 1), 1); mScheduleSearchView->clearSearch(); } //void CScheduleSearchView::setMaxWidth(const int w) TEST_F(test_schedulesearchview, setMacWidth) { mScheduleSearchView->setMaxWidth(44); } //void CScheduleSearchView::slotsetSearch() TEST_F(test_schedulesearchview, slotsetSearch) { // mScheduleSearchView->slotsetSearch("jie"); } //void CScheduleSearchView::createItemWidget(ScheduleDataInfo info, QDate date, int rtype) TEST_F(test_schedulesearchview, createItemWidget) { ScheduleDataInfo scheduleinof = getScheduleDInfo().first(); mScheduleSearchView->createItemWidget(scheduleinof, QDate::currentDate(), 3); } //QListWidgetItem *CScheduleSearchView::createItemWidget(QDate date) TEST_F(test_schedulesearchview, createItemWidgetDate) { mScheduleSearchView->createItemWidget(QDate::currentDate()); } //void CScheduleSearchView::slotSelectSchedule(const ScheduleDataInfo &scheduleInfo) TEST_F(test_schedulesearchview, slotSelectSchedule) { ScheduleDataInfo scheduleinof = getScheduleDInfo().first(); mScheduleSearchView->slotSelectSchedule(scheduleinof); } //void CScheduleSearchView::updateSearch() TEST_F(test_schedulesearchview, updateSearch) { mScheduleSearchView->updateSearch(); } //void CScheduleSearchDateItem::setBackgroundColor(QColor color1) TEST_F(test_schedulesearchview, setBachgroundColor) { QColor color1(240, 100, 100); mScheduleSearchDateItem->setBackgroundColor(color1); } //void CScheduleSearchDateItem::setText(QColor tcolor, QFont font) TEST_F(test_schedulesearchview, setText) { QColor color(240, 100, 100); QFont font; font.setWeight(QFont::Medium); font.setPixelSize(DDECalendar::FontSizeTwelve); mScheduleSearchDateItem->setText(color, font); } //void CScheduleSearchDateItem::setDate(QDate date) TEST_F(test_schedulesearchview, setDate) { mScheduleSearchDateItem->setDate(QDate::currentDate()); } //void CScheduleSearchItem::setBackgroundColor(QColor color1) TEST_F(test_schedulesearchview, setBackGroundColor) { QColor color(240, 100, 100); mScheduleSearchItem->setBackgroundColor(color); } //void CScheduleSearchItem::setText(QColor tcolor, QFont font) TEST_F(test_schedulesearchview, setItemText) { QColor color(240, 100, 100); QFont font; font.setWeight(QFont::Medium); font.setPixelSize(DDECalendar::FontSizeTwelve); mScheduleSearchItem->setText(color, font); } //void CScheduleSearchItem::setTimeC(QColor tcolor, QFont font) TEST_F(test_schedulesearchview, setTimeC) { QColor color(240, 100, 100); QFont font; font.setWeight(QFont::Medium); font.setPixelSize(DDECalendar::FontSizeTwelve); mScheduleSearchItem->setTimeC(color, font); } //void CScheduleSearchItem::setData(ScheduleDataInfo vScheduleInfo, QDate date) TEST_F(test_schedulesearchview, setItemDate) { ScheduleDataInfo scheduleinfo = getScheduleDInfo().first(); mScheduleSearchItem->setData(scheduleinfo, QDate::currentDate()); } //void CScheduleSearchItem::setRoundtype(int rtype) TEST_F(test_schedulesearchview, setRoundtype) { mScheduleSearchItem->setRoundtype(3); mScheduleSearchItem->setRoundtype(2); } //void CScheduleSearchItem::setTheMe(int type) TEST_F(test_schedulesearchview, setItemTheMe) { mScheduleSearchItem->setTheMe(1); mScheduleSearchItem->setTheMe(2); } //void CScheduleSearchItem::slotEdit() TEST_F(test_schedulesearchview, slotEdit_01) { Stub stub; calendarDDialogExecStub(stub); ScheduleDataInfo scheduleinfo = getScheduleDInfo().first(); CScheduleSearchItem item; item.setData(scheduleinfo, QDate::currentDate()); item.slotEdit(); } //void CScheduleSearchItem::slotDelete() TEST_F(test_schedulesearchview, slotDelete_01) { Stub stub; calendarDDialogExecStub(stub); ScheduleDataInfo scheduleinfo = getScheduleDInfo().first(); CScheduleSearchItem item; item.setData(scheduleinfo, QDate::currentDate()); item.slotDelete(); } TEST_F(test_schedulesearchview, slotTimeFormatChanged_01) { mScheduleSearchItem->slotTimeFormatChanged(1); EXPECT_EQ(mScheduleSearchItem->m_timeFormat, "hh:mm"); } TEST_F(test_schedulesearchview, slotTimeFormatChanged_02) { mScheduleSearchItem->slotTimeFormatChanged(0); EXPECT_EQ(mScheduleSearchItem->m_timeFormat, "h:mm"); } TEST_F(test_schedulesearchview, slotSchotCutClicked_01) { Stub stub; stub.set((QAction*(QMenu::*)(const QPoint &, QAction *))ADDR(QMenu, exec), schedulesearchview_stub_QMenu_exec); CScheduleSearchItem item; item.slotSchotCutClicked(); } TEST_F(test_schedulesearchview, contextMenuEvent_01) { Stub stub; stub.set((QAction*(QMenu::*)(const QPoint &, QAction *))ADDR(QMenu, exec), schedulesearchview_stub_QMenu_exec); CScheduleSearchItem item; QContextMenuEvent event(QContextMenuEvent::Mouse, QPoint()); item.contextMenuEvent(&event); } TEST_F(test_schedulesearchview, mouseDoubleClickEvent_01) { Stub stub; calendarDDialogExecStub(stub); CScheduleSearchItem item; QMouseEvent event(QEvent::MouseButtonDblClick, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); item.mouseDoubleClickEvent(&event); } TEST_F(test_schedulesearchview, mousePressEvent_01) { CScheduleSearchItem item; QMouseEvent event(QEvent::MouseButtonDblClick, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); item.mousePressEvent(&event); EXPECT_FALSE(item.m_tabFocus); } TEST_F(test_schedulesearchview, mouseReleaseEvent_01) { CScheduleSearchItem item; QMouseEvent event(QEvent::MouseButtonDblClick, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); item.mouseReleaseEvent(&event); EXPECT_EQ(item.m_mouseStatus, CScheduleSearchItem::M_HOVER); } TEST_F(test_schedulesearchview, enterEvent_01) { CScheduleSearchItem item; QEvent event(QEvent::Enter); item.enterEvent(&event); EXPECT_EQ(item.m_mouseStatus, CScheduleSearchItem::M_HOVER); } TEST_F(test_schedulesearchview, focusOutEvent_01) { CScheduleSearchItem item; QFocusEvent event(QEvent::FocusOut, Qt::TabFocusReason); item.focusOutEvent(&event); } TEST_F(test_schedulesearchview, focusInEvent_01) { CScheduleSearchItem item; QFocusEvent event(QEvent::FocusIn, Qt::TabFocusReason); item.focusInEvent(&event); } TEST_F(test_schedulesearchview, keyPressEvent_01) { Stub stub; calendarDDialogExecStub(stub); CScheduleSearchItem item; QKeyEvent event(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier); item.keyPressEvent(&event); } TEST_F(test_schedulesearchview, keyPressEvent_02) { CScheduleSearchItem item; QKeyEvent event(QEvent::KeyPress, Qt::Key_M, Qt::AltModifier); item.keyPressEvent(&event); } //const ScheduleDataInfo &getData() const TEST_F(test_schedulesearchview, getDate) { mScheduleSearchItem->getData(); } QMap> stub_getSearchScheduleInfo(void *obj, const QString &key, const QDateTime &startTime, const QDateTime &endTime) { Q_UNUSED(obj) Q_UNUSED(key) Q_UNUSED(startTime) Q_UNUSED(endTime) QMap> searchScheduleInfo {}; searchScheduleInfo[QDate::currentDate()] = TestDataInfo::getScheduleItemDInfo(); return searchScheduleInfo; } // TEST_F(test_schedulesearchview, getPixmap) { Stub stub; stub.set((QMap>(CScheduleTask::*)(const QString &, const QDateTime &, const QDateTime &))ADDR(CScheduleTask, getSearchScheduleInfo), stub_getSearchScheduleInfo); mScheduleSearchView->slotsetSearch("xjrc"); mScheduleSearchView->setFixedSize(300, 800); QPixmap pixmap(mScheduleListWidget->size()); pixmap = mScheduleSearchView->grab(); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_schedulesearchview.h000066400000000000000000000014041473346337000322750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULESEARCHVIEW_H #define TEST_SCHEDULESEARCHVIEW_H #include "widget/schedulesearchview.h" #include "gtest/gtest.h" #include class test_schedulesearchview : public QObject , public ::testing::Test { public: test_schedulesearchview(); ~test_schedulesearchview(); void SetUp() override; void TearDown() override; protected: CScheduleSearchView *mScheduleSearchView = nullptr; CScheduleSearchDateItem *mScheduleSearchDateItem = nullptr; CScheduleListWidget *mScheduleListWidget = nullptr; CScheduleSearchItem *mScheduleSearchItem = nullptr; }; #endif // TEST_SCHEDULESEARCHVIEW_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_touchgestureoperation.cpp000066400000000000000000000035101473346337000334150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_touchgestureoperation.h" test_touchgestureoperation::test_touchgestureoperation() { mTouchGestureOperation = new touchGestureOperation(); } test_touchgestureoperation::~test_touchgestureoperation() { delete mTouchGestureOperation; mTouchGestureOperation = nullptr; } //void touchGestureOperation::setUpdate(bool b) TEST_F(test_touchgestureoperation, setUpdate) { mTouchGestureOperation->setUpdate(true); } //bool touchGestureOperation::isUpdate() const TEST_F(test_touchgestureoperation, isUpdate) { mTouchGestureOperation->setUpdate(false); bool res = mTouchGestureOperation->isUpdate(); EXPECT_FALSE(res); mTouchGestureOperation->setUpdate(true); res = mTouchGestureOperation->isUpdate(); EXPECT_TRUE(res); } //touchGestureOperation::TouchState touchGestureOperation::getTouchState() const TEST_F(test_touchgestureoperation, getTouchState) { mTouchGestureOperation->getTouchState(); } //touchGestureOperation::TouchMovingDirection touchGestureOperation::getMovingDir() const TEST_F(test_touchgestureoperation, getMovingDir) { mTouchGestureOperation->getMovingDir(); } //touchGestureOperation::TouchMovingDirection touchGestureOperation::getTouchMovingDir(QPointF &startPoint, QPointF &stopPoint, qreal &movingLine) TEST_F(test_touchgestureoperation, getTouchMovingDir) { QPointF point1; QPointF point2; qreal num = 2; mTouchGestureOperation->getTouchMovingDir(point1, point2, num); } //void touchGestureOperation::calculateAzimuthAngle(QPointF &startPoint, QPointF &stopPoint) TEST_F(test_touchgestureoperation, calculateAzimuthAngle) { QPointF point1; QPointF point2; mTouchGestureOperation->calculateAzimuthAngle(point1, point2); } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_touchgestureoperation.h000066400000000000000000000010671473346337000330670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_TOUCHGESTUREOPERATION_H #define TEST_TOUCHGESTUREOPERATION_H #include #include #include class test_touchgestureoperation : public ::QObject , public ::testing::Test { public: test_touchgestureoperation(); ~test_touchgestureoperation(); protected: touchGestureOperation *mTouchGestureOperation = nullptr; }; #endif // TEST_TOUCHGESTUREOPERATION_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_weekWidget/000077500000000000000000000000001473346337000303475ustar00rootroot00000000000000test_weekheadview.cpp000066400000000000000000000065211473346337000345070ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_weekWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_weekheadview.h" #include "../third-party_stub/stub.h" //test_weekheadview::test_weekheadview() //{ // mWeekHeadView = new CWeekHeadView(); //} //test_weekheadview::~test_weekheadview() //{ // delete mWeekHeadView; // mWeekHeadView = nullptr; //} //QMap getHuangLiDayInfo() //{ // QMap huangLiDayInfo {}; // CaHuangLiDayInfo huangLiInfo1 {}; // huangLiInfo1.mGanZhiYear = "辛丑牛年"; //年干支 // huangLiInfo1.mGanZhiMonth = "庚寅月"; //月干支 // huangLiInfo1.mGanZhiDay = "辛卯日"; //日干支 // huangLiInfo1.mLunarMonthName = "正月"; //农历月名称 // huangLiInfo1.mLunarDayName = "初一"; //农历日名称 // huangLiInfo1.mLunarLeapMonth = 4; //闰月 // huangLiInfo1.mZodiac = "牛"; //生肖 // huangLiInfo1.mTerm = ""; //农历节气 // huangLiInfo1.mSolarFestival = "国庆节"; //阳历节日 // huangLiInfo1.mLunarFestival = "除夕"; //农历节日 // huangLiInfo1.mSuit = "嫁娶"; //黄历宜 // huangLiInfo1.mAvoid = "入土"; //黄历忌 // huangLiDayInfo.insert(QDate::currentDate(), huangLiInfo1); // return huangLiDayInfo; //} //QVector getDayList() //{ // QVector dateList {}; // QDate currentDate = QDate::currentDate(); // dateList.append(currentDate); // dateList.append(currentDate.addDays(1)); // dateList.append(currentDate.addDays(2)); // dateList.append(currentDate.addDays(3)); // dateList.append(currentDate.addDays(4)); // dateList.append(currentDate.addDays(5)); // dateList.append(currentDate.addDays(6)); // return dateList; //} ////void CWeekHeadView::setTheMe(int type) //TEST_F(test_weekheadview, setTheMe) //{ // mWeekHeadView->setTheMe(1); // mWeekHeadView->setTheMe(2); //} ////void CWeekHeadView::setWeekDay(QVector vDays, const QDate &selectDate) //TEST_F(test_weekheadview, setWeekDay) //{ // QVector dateList {}; // dateList.append(getDayList().first()); // mWeekHeadView->setWeekDay(dateList, QDate::currentDate()); // mWeekHeadView->setWeekDay(getDayList(), QDate::currentDate()); //} ////void CWeekHeadView::setLunarVisible(bool visible) //TEST_F(test_weekheadview, setLunarvisible) //{ // mWeekHeadView->setLunarVisible(false); // mWeekHeadView->setLunarVisible(true); //} ////const QString CWeekHeadView::getCellDayNum(int pos) //TEST_F(test_weekheadview, getCellDayNum) //{ // mWeekHeadView->setWeekDay(getDayList(), QDate::currentDate()); // mWeekHeadView->getCellDayNum(4); //} ////const QDate CWeekHeadView::getCellDate(int pos) //TEST_F(test_weekheadview, getCellDate) //{ // mWeekHeadView->setWeekDay(getDayList(), QDate::currentDate()); // mWeekHeadView->getCellDate(4); //} ////const QString CWeekHeadView::getLunar(int pos) //TEST_F(test_weekheadview, getLunar) //{ // mWeekHeadView->setWeekDay(getDayList(), QDate::currentDate()); // mWeekHeadView->setHunagLiInfo(getHuangLiDayInfo()); // mWeekHeadView->getLunar(1); //} //TEST_F(test_weekheadview, getPixmap) //{ // mWeekHeadView->setWeekDay(getDayList(), QDate::currentDate()); // mWeekHeadView->setFixedSize(600, 80); // QPixmap pixmap(mWeekHeadView->size()); // mWeekHeadView->render(&pixmap); //} test_weekheadview.h000066400000000000000000000010011473346337000341400ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_weekWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_WEEKHEADVIEW_H #define TEST_WEEKHEADVIEW_H //#include "weekWidget/weekheadview.h" //#include "gtest/gtest.h" //#include //class test_weekheadview : public QObject // , public ::testing::Test //{ //public: // test_weekheadview(); // ~test_weekheadview(); //protected: // CWeekHeadView *mWeekHeadView = nullptr; //}; #endif // TEST_WEEKHEADVIEW_H test_weekview.cpp000066400000000000000000000021201473346337000336540ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_weekWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_weekview.h" //int getWeekNumOfYear(const QDate &date) //{ // Q_UNUSED(date); // return 4; //} //test_weekview::test_weekview() //{ // mWeekView = new CWeekView(&getWeekNumOfYear); //} //test_weekview::~test_weekview() //{ // delete mWeekView; // mWeekView = nullptr; //} ////void CWeekView::setSelectDate(const QDate date) //TEST_F(test_weekview, setSelectDate) //{ // mWeekView->setSelectDate(QDate::currentDate()); //} ////void CWeekView::setCurrent(const QDateTime &dateTime) //TEST_F(test_weekview, setCurrent) //{ // mWeekView->setCurrent(QDateTime::currentDateTime()); //} ////void CWeekView::setTheMe(int type) //TEST_F(test_weekview, setTheMe) //{ // mWeekView->setTheMe(1); // mWeekView->setTheMe(2); //} //TEST_F(test_weekview, getPixmap) //{ // mWeekView->setSelectDate(QDate::currentDate()); // mWeekView->setFixedSize(600, 50); // QPixmap pixmap(mWeekView->size()); // mWeekView->render(&pixmap); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_weekWidget/test_weekview.h000066400000000000000000000007351473346337000334120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_WEEKVIEW_H #define TEST_WEEKVIEW_H //#include "weekWidget/weekview.h" //#include "gtest/gtest.h" //#include //class test_weekview : public QObject // , public ::testing::Test //{ //public: // test_weekview(); // ~test_weekview(); //protected: // CWeekView *mWeekView = nullptr; //}; #endif // TEST_WEEKVIEW_H test_weekwindow.cpp000066400000000000000000000027151473346337000342230ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_weekWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_weekwindow.h" #include "../third-party_stub/stub.h" #include "customWidget/scheduleview.h" test_weekWindow::test_weekWindow() { } void test_weekWindow::SetUp() { m_weekWindow = new CWeekWindow(nullptr); } void test_weekWindow::TearDown() { delete m_weekWindow; m_weekWindow = nullptr; } TEST_F(test_weekWindow, setTheMe) { m_weekWindow->setTheMe(0); m_weekWindow->setTheMe(1); m_weekWindow->setTheMe(2); } TEST_F(test_weekWindow, updateHeight) { m_weekWindow->updateHeight(); } TEST_F(test_weekWindow, setTime) { QTime time = QTime::currentTime(); //定位非全天显示位置 m_weekWindow->setTime(time); } TEST_F(test_weekWindow, setYearData) { m_weekWindow->setYearData(); } namespace WeekDeleteItem { void slotDeleteitem_Stub(void *obj) { Q_UNUSED(obj) } } // namespace WeekDeleteItem TEST_F(test_weekWindow, deleteselectSchedule) { Stub stub; stub.set(ADDR(CScheduleView, slotDeleteitem), WeekDeleteItem::slotDeleteitem_Stub); m_weekWindow->deleteselectSchedule(); } bool IsDragging_Stub(void *obj) { Q_UNUSED(obj) return false; } TEST_F(test_weekWindow, slotIsDragging) { Stub stub; stub.set(ADDR(CScheduleView, IsDragging), IsDragging_Stub); bool isDragging; m_weekWindow->slotIsDragging(isDragging); ASSERT_EQ(isDragging, false); } test_weekwindow.h000066400000000000000000000011021473346337000336550ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_weekWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_WEEKWINDOW_H #define TEST_WEEKWINDOW_H #include "gtest/gtest.h" //#include "weekWidget/weekwindow.h" //#include //class test_weekWindow : public QObject // , public ::testing::Test //{ // Q_OBJECT //public: // explicit test_weekWindow(); // void SetUp() override; // void TearDown() override; //signals: //public slots: //public: // CWeekWindow *m_weekWindow {nullptr}; //}; #endif // TEST_WEEKWINDOW_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_yearWidget/000077500000000000000000000000001473346337000303545ustar00rootroot00000000000000test_yearscheduleview.cpp000066400000000000000000000277001473346337000354160ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_yearWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_yearscheduleview.h" #include "../third-party_stub/stub.h" #include "constants.h" #include //test_yearscheduleview::test_yearscheduleview() //{ //} //test_yearscheduleview::~test_yearscheduleview() //{ //} //void test_yearscheduleview::SetUp() //{ // cYearScheduleView = new CYearScheduleView(); // zYearScheduleOutView = new CYearScheduleOutView(); //} //void test_yearscheduleview::TearDown() //{ // delete cYearScheduleView; // cYearScheduleView = nullptr; // delete zYearScheduleOutView; // zYearScheduleOutView = nullptr; //} //QVector test_yearscheduleview::getScheduleDataInfo() //{ // QVector scheduleDate {}; // ScheduleDataInfo schedule1, schedule2, schedule3, schedule4, schedule5, scheduleFes; // schedule1.setID(1); // schedule1.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(0, 0, 0))); // schedule1.setEndDateTime(QDateTime(QDate(2021, 1, 2), QTime(23, 59, 59))); // schedule1.setTitleName("schedule test one"); // schedule1.setAllDay(true); // schedule1.setType(1); // schedule1.setRecurID(0); // schedule2.setID(2); // schedule2.setBeginDateTime(QDateTime(QDate(2021, 1, 3), QTime(0, 0, 0))); // schedule2.setEndDateTime(QDateTime(QDate(2021, 1, 5), QTime(23, 59, 59))); // schedule2.setTitleName("schedule test two"); // schedule2.setAllDay(true); // schedule2.setType(2); // schedule2.setRecurID(0); // schedule3.setID(3); // schedule3.setBeginDateTime(QDateTime(QDate(2021, 1, 6), QTime(5, 23, 40))); // schedule3.setEndDateTime(QDateTime(QDate(2021, 1, 9), QTime(6, 23, 40))); // schedule3.setTitleName("schedule test three"); // schedule3.setAllDay(false); // schedule3.setType(3); // schedule3.setRecurID(0); // schedule4.setID(4); // schedule4.setBeginDateTime(QDateTime(QDate(2021, 1, 10), QTime(7, 23, 40))); // schedule4.setEndDateTime(QDateTime(QDate(2021, 1, 14), QTime(8, 23, 40))); // schedule4.setTitleName("schedule test four"); // schedule4.setAllDay(false); // schedule4.setType(1); // schedule4.setRecurID(0); // schedule5.setID(5); // schedule5.setBeginDateTime(QDateTime(QDate(2021, 1, 15), QTime(9, 23, 40))); // schedule5.setEndDateTime(QDateTime(QDate(2021, 1, 20), QTime(10, 23, 40))); // schedule5.setTitleName("schedule test five"); // schedule5.setAllDay(false); // schedule5.setType(2); // schedule5.setRecurID(0); // scheduleFes.setID(6); // scheduleFes.setBeginDateTime(QDateTime(QDate(2021, 1, 21), QTime(0, 0, 0))); // scheduleFes.setEndDateTime(QDateTime(QDate(2021, 1, 21), QTime(23, 59, 59))); // scheduleFes.setTitleName("schedule test festival"); // scheduleFes.setAllDay(true); // scheduleFes.setType(4); // scheduleFes.setRecurID(0); // scheduleDate.append(schedule1); // scheduleDate.append(schedule2); // scheduleDate.append(schedule3); // scheduleDate.append(schedule4); // scheduleDate.append(schedule5); // scheduleDate.append(scheduleFes); // return scheduleDate; //} //QVector test_yearscheduleview::getScheduleDateAndTitle() //{ // QVector scheduleDate {}; // ScheduleDataInfo s11, s12; // s11.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s11.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s12.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s12.setEndDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // ScheduleDataInfo s21, s22; // s21.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s21.setEndDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s22.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s22.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // ScheduleDataInfo s31, s32; // s31.setBeginDateTime(QDateTime(QDate(2020, 12, 30), QTime(16, 23, 40))); // s31.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s32.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s32.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // ScheduleDataInfo s41, s42; // s41.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s41.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s42.setBeginDateTime(QDateTime(QDate(2020, 12, 30), QTime(16, 23, 40))); // s42.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // ScheduleDataInfo s51, s52; // s51.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s51.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s51.setTitleName("ab"); // s52.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s52.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s52.setTitleName("ba"); // ScheduleDataInfo s61, s62; // s61.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s61.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s61.setTitleName("ba"); // s62.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s62.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s62.setTitleName("ab"); // ScheduleDataInfo s71, s72; // s71.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 2, 40))); // s71.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s72.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s72.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // ScheduleDataInfo s81, s82; // s81.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s81.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s82.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 2, 40))); // s82.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // ScheduleDataInfo s91, s92; // s91.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s91.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s92.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s92.setEndDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // ScheduleDataInfo sa1, sa2; // sa1.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // sa1.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // sa2.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // sa2.setEndDateTime(QDateTime(QDate(2021, 12, 31), QTime(16, 23, 40))); // scheduleDate << s11 << s12 << s21 << s22 << s31 << s32 << s41 << s42 // << s51 << s52 << s61 << s62 << s71 << s72 << s81 << s82 // << s91 << s92 << sa1 << sa2; // return scheduleDate; //} ////bool YScheduleDateThan(const ScheduleDataInfo &s1, const ScheduleDataInfo &s2) //bool YScheduleDateThan(const ScheduleDataInfo &s1, const ScheduleDataInfo &s2); //TEST_F(test_yearscheduleview, yschesuledatethan) //{ // //bdate1 != edate1 && bdate2 == edate2 // EXPECT_TRUE(YScheduleDateThan(getScheduleDateAndTitle().at(0), getScheduleDateAndTitle().at(1))); // //bdate1 == edate1 && bdate2 != edate2 // EXPECT_FALSE(YScheduleDateThan(getScheduleDateAndTitle().at(2), getScheduleDateAndTitle().at(3))); // //bdate1 != edate1 && bdate2 != edate2 // //bdate1 < bdate2 // EXPECT_TRUE(YScheduleDateThan(getScheduleDateAndTitle().at(4), getScheduleDateAndTitle().at(5))); // //bdate1 != edate1 && bdate2 != edate2 // //bdate1 < bdate2 // EXPECT_FALSE(YScheduleDateThan(getScheduleDateAndTitle().at(6), getScheduleDateAndTitle().at(7))); // //bdate1 = edate1 && bdate2 = edate2 // //s1.getTitleName() < s2.getTitleName() // EXPECT_TRUE(YScheduleDateThan(getScheduleDateAndTitle().at(8), getScheduleDateAndTitle().at(9))); // //bdate1 = edate1 && bdate2 = edate2 // //s1.getBeginDateTime() == s2.getBeginDateTime() // //s1.getTitleName() < s2.getTitleName() // EXPECT_FALSE(YScheduleDateThan(getScheduleDateAndTitle().at(10), getScheduleDateAndTitle().at(11))); // //bdate1 = edate1 && bdate2 = edate2 // //s1.getBeginDateTime() != s2.getBeginDateTime() // //s1.getBeginDateTime() < s2.getBeginDateTime() // EXPECT_TRUE(YScheduleDateThan(getScheduleDateAndTitle().at(12), getScheduleDateAndTitle().at(13))); // //bdate1 = edate1 && bdate2 = edate2 // //s1.getBeginDateTime() != s2.getBeginDateTime() // //s1.getBeginDateTime() < s2.getBeginDateTime() // EXPECT_FALSE(YScheduleDateThan(getScheduleDateAndTitle().at(14), getScheduleDateAndTitle().at(15))); //} ////bool YScheduleDaysThan(const ScheduleDataInfo &s1, const ScheduleDataInfo &s2) //bool YScheduleDaysThan(const ScheduleDataInfo &s1, const ScheduleDataInfo &s2); //TEST_F(test_yearscheduleview, yscheduleDaysThan) //{ // //s1.getBeginDateTime().date().daysTo(s1.getEndDateTime().date()) > s2.getBeginDateTime().date().daysTo(s2.getEndDateTime().date()) // EXPECT_TRUE(YScheduleDaysThan(getScheduleDateAndTitle().at(16), getScheduleDateAndTitle().at(17))); // //s1.getBeginDateTime().date().daysTo(s1.getEndDateTime().date()) > s2.getBeginDateTime().date().daysTo(s2.getEndDateTime().date()) // EXPECT_FALSE(YScheduleDaysThan(getScheduleDateAndTitle().at(18), getScheduleDateAndTitle().at(19))); //} ////void CYearScheduleView::setData(QVector &vListData) //TEST_F(test_yearscheduleview, setDate) //{ // QVector scheduleinfo = getScheduleDataInfo(); // cYearScheduleView->setData(scheduleinfo); //} ////void CYearScheduleView::clearData() //TEST_F(test_yearscheduleview, clearDate) //{ // cYearScheduleView->clearData(); //} ////int CYearScheduleView::showWindow() //TEST_F(test_yearscheduleview, showWindow) //{ // QVector vlistData = getScheduleDataInfo(); // cYearScheduleView->showWindow(); // cYearScheduleView->setData(vlistData); // cYearScheduleView->showWindow(); //} ////void CYearScheduleView::setTheMe(int type) //TEST_F(test_yearscheduleview, setTheMe) //{ // int type = 1; // cYearScheduleView->setTheMe(type); // type = 2; // cYearScheduleView->setTheMe(type); //} ////void CYearScheduleView::setCurrentDate(QDate cdate) //TEST_F(test_yearscheduleview, setCurrentDate) //{ // cYearScheduleView->setCurrentDate(QDate(2021, 1, 6)); //} ////QDate CYearScheduleView::getCurrentDate() //TEST_F(test_yearscheduleview, getCurrentDate) //{ // QDate currentDate = QDate::currentDate(); // cYearScheduleView->setCurrentDate(currentDate); // bool iscurrent = currentDate == cYearScheduleView->getCurrentDate(); // EXPECT_TRUE(iscurrent); // QDate earlyDate = QDate(1999, 1, 1); // cYearScheduleView->setCurrentDate(earlyDate); // iscurrent = currentDate == cYearScheduleView->getCurrentDate(); // EXPECT_FALSE(iscurrent); //} ////void CYearScheduleOutView::setData(QVector &vListData) //TEST_F(test_yearscheduleview, setOutData) //{ // QVector scheduleInfo = getScheduleDataInfo(); // zYearScheduleOutView->setData(scheduleInfo); //} ////void CYearScheduleOutView::clearData() //TEST_F(test_yearscheduleview, clearOutData) //{ // zYearScheduleOutView->clearData(); //} ////void CYearScheduleOutView::setTheMe(int type) //TEST_F(test_yearscheduleview, setTheOutMe) //{ // zYearScheduleOutView->setTheMe(1); //} ////void CYearScheduleOutView::setCurrentDate(QDate cdate) //TEST_F(test_yearscheduleview, setCurrentOutDate) //{ // zYearScheduleOutView->setCurrentDate(QDate(2021, 1, 6)); //} //TEST_F(test_yearscheduleview, paintEvent) //{ // QPixmap pixmap(cYearScheduleView->size()); // QVector scheduleInfo = getScheduleDataInfo(); // cYearScheduleView->setData(scheduleInfo); // cYearScheduleView->render(&pixmap); //} //TEST_F(test_yearscheduleview, mousePressEvent) //{ //} test_yearscheduleview.h000066400000000000000000000014231473346337000350550ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_yearWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_YEARSCHEDULEVIEW_H #define TEST_YEARSCHEDULEVIEW_H //#include "yearWidget/yearscheduleview.h" //#include "gtest/gtest.h" //#include //class test_yearscheduleview : public QObject, public::testing::Test //{ //public: // test_yearscheduleview(); // ~test_yearscheduleview(); // void SetUp() override; // void TearDown() override; //protected: // CYearScheduleView *cYearScheduleView = nullptr; // CYearScheduleOutView *zYearScheduleOutView = nullptr; //public: // QVector getScheduleDataInfo(); // QVector getScheduleDateAndTitle(); //}; #endif // TEST_YEARSCHEDULEVIEW_H test_yearview.cpp000066400000000000000000000060301473346337000336720ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_yearWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_yearview.h" #include "../third-party_stub/stub.h" #include test_yearview::test_yearview() { } test_yearview::~test_yearview() { } void test_yearview::SetUp() { cYearView = new CYearView(); } void test_yearview::TearDown() { delete cYearView; cYearView = nullptr; } QVector getListDate() { QVector listDate {}; QDate date = QDate::currentDate(); for (int i = 0; i < 42; i++) { listDate.append(date); date = date.addDays(1); } return listDate; } //void CYearView::slotDoubleClickDate(const QDate &date) TEST_F(test_yearview, slotDoubltClickDate) { cYearView->slotDoubleClickDate(QDate(2021, 1, 6)); } //void CYearView::slotPressClickDate(const QDate &date) TEST_F(test_yearview, slotPressClickDate) { cYearView->slotPressClickDate(QDate(2021, 1, 6)); } //void CYearView::setTheMe(int type) TEST_F(test_yearview, setTheMe) { cYearView->setTheMe(1); cYearView->setTheMe(2); } //void CYearView::setShowDate(const QDate &showMonth, const QVector &showDate) TEST_F(test_yearview, setShowDate) { cYearView->setShowDate(getListDate().first(), getListDate()); } //void CYearView::setHasScheduleFlag(const QVector &hasScheduleFlag) TEST_F(test_yearview, setHasScheduleFlag) { QVector listLintFlag {}; listLintFlag.append(false); listLintFlag.append(true); cYearView->setHasScheduleFlag(listLintFlag); } //void CYearView::setHasSearchScheduleFlag(const QVector &hasSearchScheduleFlag) TEST_F(test_yearview, setHasSearchScheduleFlag) { QVector listLintFlag {}; listLintFlag.append(false); listLintFlag.append(true); cYearView->setHasSearchScheduleFlag(listLintFlag); } void setDate_Stub(const int showMonth, const QVector &showDate) { Q_UNUSED(showMonth) Q_UNUSED(showDate)} //bool CYearView::getStartAndStopDate(QDate &startDate, QDate &stopDate) TEST_F(test_yearview, getStartAndStopDate) { QDate startDate(QDate(2021, 1, 7)); QDate stopDate(QDate(2021, 1, 8)); cYearView->setShowDate(getListDate().first(), getListDate()); bool result = cYearView->getStartAndStopDate(startDate, stopDate); EXPECT_TRUE(result); QVector listDate {}; Stub stub; stub.set(ADDR(MonthBrefWidget, setDate), setDate_Stub); cYearView->setShowDate(getListDate().first(), listDate); bool result_false = cYearView->getStartAndStopDate(startDate, stopDate); EXPECT_FALSE(result_false); } bool hasFocus_Stub() { return true; } TEST_F(test_yearview, paintEvent) { Stub stub; stub.set(ADDR(QWidget, hasFocus), hasFocus_Stub); cYearView->setFixedSize(600, 600); QPixmap pixmap(cYearView->size()); cYearView->render(&pixmap); } TEST_F(test_yearview, guitest) { QWidget *currentMonth = cYearView->findChild("currentMouth"); if (currentMonth) { QTest::mouseDClick(currentMonth, Qt::LeftButton); } } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_yearWidget/test_yearview.h000066400000000000000000000010321473346337000334130ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_YEARVIEW_H #define TEST_YEARVIEW_H //#include "yearWidget/yearview.h" //#include "gtest/gtest.h" //#include //class test_yearview : public QObject // , public ::testing::Test //{ //public: // test_yearview(); // ~test_yearview(); // void SetUp() override; // void TearDown() override; //protected: // CYearView *cYearView = nullptr; //}; #endif // TEST_YEARVIEW_H test_yearwindow.cpp000066400000000000000000000034621473346337000342350ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_yearWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_yearwindow.h" #include "customWidget/customframe.h" #include "widget/yearWidget/yearscheduleview.h" #include "calendarglobalenv.h" #include "constants.h" test_yearwindow::test_yearwindow() { CalendarGlobalEnv::getGlobalEnv()->registerKey(DDECalendar::CursorPointKey, QPoint(20, 20)); mYearWindow = new CYearWindow(); dateaManger = new CalendarDateDataManager(); } test_yearwindow::~test_yearwindow() { delete mYearWindow; mYearWindow = nullptr; delete dateaManger; dateaManger = nullptr; } //void CYearWindow::setTheMe(int type) TEST_F(test_yearwindow, setTheMe) { int type = 1; mYearWindow->setTheMe(type); type = 2; mYearWindow->setTheMe(type); } TEST_F(test_yearwindow, slotMousePress) { CalendarGlobalEnv::getGlobalEnv()->reviseValue(DDECalendar::CursorPointKey, QPoint(20, 20)); QDate currentDate = QDate::currentDate(); mYearWindow->slotMousePress(currentDate, 0); ASSERT_EQ(mYearWindow->getSelectDate(), currentDate); mYearWindow->slotMousePress(currentDate, 1); mYearWindow->slotMousePress(currentDate, 2); mYearWindow->slotMousePress(currentDate, 3); mYearWindow->slotMousePress(currentDate, 4); } TEST_F(test_yearwindow, calculateAzimuthAngle) { QPointF startPoint(0, 0); QPointF stopPoint(30, 20); mYearWindow->calculateAzimuthAngle(startPoint, stopPoint); stopPoint.setX(20); stopPoint.setY(30); mYearWindow->calculateAzimuthAngle(startPoint, stopPoint); stopPoint.setX(-20); stopPoint.setY(30); mYearWindow->calculateAzimuthAngle(startPoint, stopPoint); stopPoint.setX(-30); stopPoint.setY(20); mYearWindow->calculateAzimuthAngle(startPoint, stopPoint); } test_yearwindow.h000066400000000000000000000010451473346337000336750ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-client-test/src/test_widget/test_yearWidget// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_YEARWINDOW_H #define TEST_YEARWINDOW_H //#include "yearWidget/yearwindow.h" //#include "gtest/gtest.h" //#include //class test_yearwindow : public QObject // , public ::testing::Test //{ //public: // test_yearwindow(); // ~test_yearwindow(); //protected: // CYearWindow *mYearWindow = nullptr; // CalendarDateDataManager *dateaManger = nullptr; //}; #endif // TEST_YEARWINDOW_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/testmainwindowgui.cpp000066400000000000000000000204451473346337000271610ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "testmainwindowgui.h" //#include "configsettings.h" //#include "view/monthgraphiview.h" //#include "yearWidget/yearwindow.h" //#include "monthWidget/monthwindow.h" //#include "dialog_stub.h" //#include "testscheduledata.h" //#include //testMainWindowGUI::testMainWindowGUI() //{ //} //QVariant getSetView(const QString &str) //{ // QVariant variant; // if (str == "base.geometry") { // QByteArray byteArray("\x01\xD9\xD0\xCB\x00\x02\x00\x00\x00\x00\x02\x12\x00\x00\x00\xF3\x00\x00\x05m\x00\x00\x03l\x00\x00\x02\x12\x00\x00\x00\xF3\x00\x00\x05m\x00\x00\x03l\x00\x00\x00\x00\x00\x00\x00\x00\x07\x80"); // variant.setValue(byteArray); // } else if (str == "base.state") { // variant.setValue(1); // } else if (str == "base.view") { // variant.setValue(2); // } // return variant; //} //void testMainWindowGUI::SetUp() //{ // Stub stub; // stub.set(ADDR(CConfigSettings, value), getSetView); //} //void testMainWindowGUI::TearDown() //{ //} //TEST_F(testMainWindowGUI, yearGUITest) //{ // Calendarmainwindow mainWindow(0); // CYearWindow *myYearWindow = mainWindow.findChild("yearwindow"); // if (myYearWindow != nullptr) { // DIconButton *m_prevButton = myYearWindow->findChild("PrevButton"); // DIconButton *m_nextButton = myYearWindow->findChild("NextButton"); // LabelWidget *m_today = myYearWindow->findChild("yearToDay"); // if (m_prevButton != nullptr) { // QTest::mouseClick(m_prevButton, Qt::LeftButton); // } // if (m_today != nullptr) { // QTest::mouseClick(m_today, Qt::LeftButton); // } // if (m_nextButton != nullptr) { // QTest::mouseClick(m_nextButton, Qt::LeftButton); // } // //获取QStackedWidget // QStackedWidget *stackedWidget = myYearWindow->findChild(); // if (stackedWidget) { // QWidget *currentWidget = stackedWidget->currentWidget(); // if (currentWidget) { // currentWidget->setFocus(); // QTest::keyPress(currentWidget, Qt::Key_Up); // } // currentWidget = stackedWidget->currentWidget(); // if (currentWidget) { // currentWidget->setFocus(); // QTest::keyPress(currentWidget, Qt::Key_Down); // } // } // //year_resizeEvent // myYearWindow->setSearchWFlag(true); // mainWindow.resize(1000, 400); // myYearWindow->setSearchWFlag(false); // mainWindow.resize(700, 400); // } //} //TEST_F(testMainWindowGUI, monthGUITest) //{ // Calendarmainwindow mainWindow(1); // CMonthWindow *mymonthWindow = mainWindow.findChild("monthWindow"); // if (mymonthWindow != nullptr) { // } //} //TEST_F(testMainWindowGUI, weekGUIKeyTest) //{ // Calendarmainwindow mainWindow(2); //} //TEST_F(testMainWindowGUI, dayGUIKeyTest) //{ // Calendarmainwindow mainWindow(3); //} //TEST_F(testMainWindowGUI, slotCurrentDateUpdate) //{ // Calendarmainwindow mainWindow(1); // mainWindow.slotCurrentDateUpdate(); //} ////slotSetSearchFocus //TEST_F(testMainWindowGUI, slotSetSearchFocus) //{ // Calendarmainwindow mainWindow(1); // mainWindow.slotSetSearchFocus(); //} ////viewWindow //TEST_F(testMainWindowGUI, viewWindow) //{ // Calendarmainwindow mainWindow(1); // mainWindow.viewWindow(3, false); // mainWindow.viewWindow(0, true); //} ////setSearchWidth //TEST_F(testMainWindowGUI, setSearchWidth) //{ // Calendarmainwindow mainWindow(1); // mainWindow.setSearchWidth(500); //} ////slotTheme //TEST_F(testMainWindowGUI, slotTheme) //{ // Calendarmainwindow mainWindow(1); // mainWindow.slotTheme(0); // mainWindow.slotTheme(1); // mainWindow.slotTheme(2); //} ////slotOpenSchedule //TEST_F(testMainWindowGUI, slotOpenSchedule) //{ // Stub stub; // calendarDDialogExecStub(stub); // Calendarmainwindow mainWindow(1); // QString job = ScheduleDataInfo::ScheduleToJsonStr(TestDataInfo::getScheduleItemDInfo().first()); // mainWindow.slotOpenSchedule(job); //} ////slotWUpdateSchedule //TEST_F(testMainWindowGUI, slotWUpdateSchedule) //{ // Calendarmainwindow mainWindow(1); // mainWindow.slotWUpdateSchedule(); //} ////slotStextChanged //TEST_F(testMainWindowGUI, slotStextChanged) //{ // Calendarmainwindow mainWindow(1); // mainWindow.slotStextChanged(); //} ////slotStextfocusChanged //TEST_F(testMainWindowGUI, slotStextfocusChanged) //{ // Calendarmainwindow mainWindow(1); // mainWindow.slotStextfocusChanged(true); //} ////slotDeleteitem //TEST_F(testMainWindowGUI, slotDeleteitem) //{ // Stub stub; // calendarDDialogExecStub(stub); // Calendarmainwindow mainWindow(1); // mainWindow.slotDeleteitem(); //} ////slotNewSchedule //TEST_F(testMainWindowGUI, slotNewSchedule) //{ // Stub stub; // calendarDDialogExecStub(stub); // Calendarmainwindow mainWindow(1); // mainWindow.slotNewSchedule(); //} ////slotSwitchView //TEST_F(testMainWindowGUI, slotSwitchView) //{ // Stub stub; // calendarDDialogExecStub(stub); // Calendarmainwindow mainWindow(1); // mainWindow.slotSwitchView(0); // mainWindow.slotSwitchView(1); // mainWindow.slotSwitchView(2); // mainWindow.slotSwitchView(3); //} ////slotViewtransparentFrame //TEST_F(testMainWindowGUI, slotViewtransparentFrame) //{ // Calendarmainwindow mainWindow(1); // mainWindow.slotViewtransparentFrame(true); // mainWindow.slotViewtransparentFrame(false); //} //bool stub_startDetached(const QString &program, const QStringList &arguments) //{ // Q_UNUSED(program) // Q_UNUSED(arguments) // return true; //} ////slotViewShortcut //TEST_F(testMainWindowGUI, slotViewShortcut) //{ // Stub stub; // stub.set((bool (*)(const QString &, const QStringList &))ADDR(QProcess, startDetached), // stub_startDetached); // Calendarmainwindow mainWindow(1); // mainWindow.slotViewShortcut(); //} //TEST_F(testMainWindowGUI, resizeEvent_01) //{ // QResizeEvent event(QSize(10, 10), QSize(100, 100)); // Calendarmainwindow mainWindow(1); // mainWindow.resizeEvent(&event); //} //TEST_F(testMainWindowGUI, resizeEvent_02) //{ // QResizeEvent event(QSize(10, 10), QSize(1000, 1000)); // Calendarmainwindow mainWindow(1); // mainWindow.resize(1000, 1000); // mainWindow.resizeEvent(&event); //} //TEST_F(testMainWindowGUI, slotstackWClicked_01) //{ // Calendarmainwindow mainWindow(1); // QPushButton btn; // mainWindow.m_buttonBox->setId(&btn, 0); // mainWindow.slotstackWClicked(&btn); //} //TEST_F(testMainWindowGUI, slotWUpdateSchedule_01) //{ // Calendarmainwindow mainWindow(1); // mainWindow.m_opensearchflag = true; // mainWindow.m_searchEdit->setText("123"); // mainWindow.slotWUpdateSchedule(); //} //TEST_F(testMainWindowGUI, slotSreturnPressed_01) //{ // Calendarmainwindow mainWindow(1); // mainWindow.m_opensearchflag = true; // mainWindow.m_searchEdit->setText("123"); // mainWindow.slotSreturnPressed(); //} //TEST_F(testMainWindowGUI, slotStextChanged_01) //{ // Calendarmainwindow mainWindow(1); // mainWindow.m_searchEdit->setText("123"); // mainWindow.slotStextChanged(); //} //TEST_F(testMainWindowGUI, slotStextChanged_02) //{ // Calendarmainwindow mainWindow(1); // mainWindow.m_searchEdit->setText(""); // mainWindow.slotStextChanged(); //} //TEST_F(testMainWindowGUI, slotSearchSelectSchedule_02) //{ // Calendarmainwindow mainWindow(1); // ScheduleDataInfo info; // mainWindow.slotSearchSelectSchedule(info); //} //TEST_F(testMainWindowGUI, mouseMoveEvent_01) //{ // Calendarmainwindow mainWindow(1); // QMouseEvent event(QMouseEvent::MouseMove, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // mainWindow.mouseMoveEvent(&event); //} //TEST_F(testMainWindowGUI, changeEvent_01) //{ // Calendarmainwindow mainWindow(1); // QEvent event(QEvent::ActivationChange); // mainWindow.changeEvent(&event); //} //TEST_F(testMainWindowGUI, slotOpenSettingDialog_01) //{ // Stub stub; // calendarDDialogExecStub(stub); // Calendarmainwindow mainWindow(1); // mainWindow.slotOpenSettingDialog(); //} dde-calendar-5.14.13/tests/dde-calendar-client-test/src/testmainwindowgui.h000066400000000000000000000011001473346337000266110ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TESTMAINWINDOWGUI_H #define TESTMAINWINDOWGUI_H //#include "calendarmainwindow.h" //#include "gtest/gtest.h" //#include "../third-party_stub/stub.h" //#include //#include //class testMainWindowGUI : public QObject // , public ::testing::Test //{ //public: // testMainWindowGUI(); // void SetUp() override; // void TearDown() override; //public: // Stub stub; //}; #endif // TESTMAINWINDOWGUI_H dde-calendar-5.14.13/tests/dde-calendar-client-test/src/testscheduledata.cpp000066400000000000000000000046131473346337000267250ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "testscheduledata.h" TestScheduleData::TestScheduleData() { } QVector TestDataInfo::getScheduleItemDInfo() { QVector scheduleDate {}; ScheduleDataInfo schedule1, schedule2, schedule3, schedule4, schedule5, scheduleFes; QDateTime currentDateTime = QDateTime::currentDateTime(); schedule1.setID(1); schedule1.setBeginDateTime(currentDateTime); schedule1.setEndDateTime(currentDateTime.addDays(1)); schedule1.setTitleName("scheduleOne"); schedule1.setAllDay(true); schedule1.setType(1); schedule1.setRecurID(0); schedule2.setID(2); schedule2.setBeginDateTime(currentDateTime.addDays(1)); schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); schedule2.setTitleName("scheduleTwo"); schedule2.setAllDay(true); schedule2.setType(2); schedule2.setRecurID(0); schedule3.setID(3); schedule3.setBeginDateTime(currentDateTime.addDays(2)); schedule3.setEndDateTime(currentDateTime.addDays(2).addSecs(60 * 60)); schedule3.setTitleName("scheduleThree"); schedule3.setAllDay(false); schedule3.setType(3); schedule3.setRecurID(0); schedule4.setID(4); schedule4.setBeginDateTime(currentDateTime.addDays(3)); schedule4.setEndDateTime(currentDateTime.addDays(3).addSecs(60 * 60)); schedule4.setTitleName("scheduleFour"); schedule4.setAllDay(false); schedule4.setType(1); schedule4.setRecurID(0); schedule5.setID(5); schedule5.setBeginDateTime(currentDateTime.addDays(4)); schedule5.setEndDateTime(currentDateTime.addDays(4).addSecs(60 * 60)); schedule5.setTitleName("scheduleFive"); schedule5.setAllDay(false); schedule5.setType(2); schedule5.setRecurID(0); scheduleFes.setID(6); scheduleFes.setBeginDateTime(currentDateTime.addDays(5)); scheduleFes.setEndDateTime(currentDateTime.addDays(5).addSecs(60 * 60)); scheduleFes.setTitleName("scheduleFestival"); scheduleFes.setAllDay(true); scheduleFes.setType(4); scheduleFes.setRecurID(0); scheduleDate.append(schedule1); scheduleDate.append(schedule2); scheduleDate.append(schedule3); scheduleDate.append(schedule4); scheduleDate.append(schedule5); scheduleDate.append(scheduleFes); return scheduleDate; } dde-calendar-5.14.13/tests/dde-calendar-client-test/src/testscheduledata.h000066400000000000000000000006531473346337000263720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TESTSCHEDULEDATA_H #define TESTSCHEDULEDATA_H //#include "src/scheduledatainfo.h" //#include //class TestScheduleData //{ //public: // TestScheduleData(); //}; //namespace TestDataInfo { //QVector getScheduleItemDInfo(); //} #endif // TESTSCHEDULEDATA_H dde-calendar-5.14.13/tests/dde-calendar-service-test/000077500000000000000000000000001473346337000222625ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-service-test/CMakeLists.txt000066400000000000000000000035001473346337000250200ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) project(dde-calendar-service-test) ADD_COMPILE_OPTIONS(-fno-access-control) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(APP_BIN_NAME "dde-calendar-service-test") set(APP_SERVICE_DIR "${CMAKE_SOURCE_DIR}/calendar-service") set(APP_SERVICE_RES_DIR "${APP_SERVICE_DIR}/assets") set(APP_QRC "${APP_SERVICE_RES_DIR}/resources.qrc") # Find the library find_package(PkgConfig REQUIRED) find_package(DtkCore REQUIRED) find_package(Qt5 COMPONENTS Core DBus Sql REQUIRED) find_package(Qt5Test REQUIRED) find_package(GTest REQUIRED) set(LINK_LIBS Qt5::Core Qt5::DBus Qt5::Sql ${DtkCore_LIBRARIES} ) include_directories(${APP_SERVICE_DIR}/src) SUBDIRLIST(all_src ${APP_SERVICE_DIR}/src) #Include all app own subdirectories foreach(subdir ${all_src}) include_directories(${APP_SERVICE_DIR}/src/${subdir}) endforeach() file(GLOB_RECURSE CALENDARSERVICE_SRCS ${APP_SERVICE_DIR}/src/*.cpp) include_directories(../../calendar-basicstruct/) list(REMOVE_ITEM CALENDARSERVICE_SRCS ${APP_SERVICE_DIR}/src/main.cpp) #test src SUBDIRLIST(TEST_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src) foreach(subdir ${TEST_SRC}) include_directories(${subdir}) endforeach() set(HL_DATABASE_DIR ${APP_SERVICE_RES_DIR}/data/huangli.db) set(SD_DATABASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/scheduler.db) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in config.h @ONLY) file(GLOB_RECURSE Calendar_Service_TEST_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) list(APPEND CMAKE_MODULE_PATH "${ASAN_CMAKE_DIR}") include(asan) add_executable(${APP_BIN_NAME} ${Calendar_Service_TEST_SRC} ${CALENDARSERVICE_SRCS} ${APP_QRC}) target_link_libraries(${APP_BIN_NAME} ${LINK_LIBS} ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} pthread basestruct )dde-calendar-5.14.13/tests/dde-calendar-service-test/scheduler.db000066400000000000000000000600001473346337000245430ustar00rootroot00000000000000SQLite format 3@ X.0:  1o Y3yindexidx_jobs_deleted_atjobsCREATE INDEX idx_jobs_deleted_at ON "jobs"(deleted_at)a%tablejobsjobsCREATE TABLE "jobs" ("id" integer primary key autoincrement,"created_at" datetime,"updated_at" datetime,"deleted_at" datetime,"type" integer,"title" varchar(255),"description" varchar(255),"all_day" bool,"start" datetime,"end" datetime,"r_rule" varchar(255),"remind" varchar(255),"ignore" varchar(255) , "title_pinyin" varchar(255))n= indexidx_job_types_deleted_atjob_typesCREATE INDEX idx_job_types_deleted_at ON "job_types"(deleted_at)P++Ytablesqlite_sequencesqlite_sequenceCREATE TABLE sqlite_sequence(name,seq)Lgtablejob_typesjob_typesCREATE TABLE "job_types" ("id" integer primary key autoincrement,"created_at" datetime,"updated_at" datetime,"deleted_at" datetime,"name" varchar(255),"color" varchar(255) ) p(o??;=2021-04-14T16:40:28+08:002021-04-14T16:40:28+08:002021-04-14 16:40:28.530UT测试Y——ID应为6#FFFFFFD?;2021-04-14T16:40:28+08:002021-04-14 16:40:28.528嗨皮#CC99AAX??=2021-04-14T16:40:28+08:002021-04-14T16:40:28+08:00UT测试X——ID应为4#FFFFFFF??2021-04-14T16:40:28+08:002021-04-14T16:40:28+08:00其他#800080F??2021-04-14T16:40:28+08:002021-04-14T16:40:28+08:00工作#00FF00F??2021-04-14T16:40:28+08:002021-04-14T16:40:28+08:00学习#FF0000 jobs job_types ;2021-04-14 16:40:28.530 _I_ gGG  ??yG2021-04-14T16:40:28.511+08:002021-04-14T16:40:28.524+08:00UT测试X2020-12-09T00:00:00+08:002020-12-09T23:59:00+08:00FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR;UNTIL=20201130T000000Z1;09:00["2020-12-06T00:00:00+08:00"][ce][shi]4GG  ??[2021-04-14T16:40:28.496+08:002021-04-14T16:40:28.496+08:00UT测试A2020-12-05T00:00:00+08:002020-12-05T23:59:00+08:00FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR;COUNT=31;09:00[]  dde-calendar-5.14.13/tests/dde-calendar-service-test/src/000077500000000000000000000000001473346337000230515ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-service-test/src/config.h.in000066400000000000000000000004201473346337000250700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CONFIG_H #define CONFIG_H #define HL_DATABASE_DIR "@HL_DATABASE_DIR@" #define SD_DATABASE_DIR "@SD_DATABASE_DIR@" #endif // CONFIG_H dde-calendar-5.14.13/tests/dde-calendar-service-test/src/service_stub.cpp000066400000000000000000000016271473346337000262600ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "service_stub.h" #include "dbusuiopenschedule.h" #include "dbusnotify.h" QDBusMessage callWithArgumentList_stub(QDBus::CallMode mode, const QString &method, const QList &args) { Q_UNUSED(mode); Q_UNUSED(method); Q_UNUSED(args); QDBusMessage reply; reply.createReply("succ"); return reply; } void qDBusAbstractInterface_callWithArgumentList_stub(Stub &stub) { stub.set(ADDR(QDBusAbstractInterface, callWithArgumentList), callWithArgumentList_stub); qDBusMessage_type_Stub(stub); } QDBusMessage::MessageType type_Stub() { return QDBusMessage::ReplyMessage; } void qDBusMessage_type_Stub(Stub &stub) { stub.set(ADDR(QDBusMessage, type), type_Stub); } dde-calendar-5.14.13/tests/dde-calendar-service-test/src/service_stub.h000066400000000000000000000005361473346337000257230ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SERVICE_STUB_H #define SERVICE_STUB_H #include "../third-party_stub/stub.h" void qDBusMessage_type_Stub(Stub &stub); void qDBusAbstractInterface_callWithArgumentList_stub(Stub &stub); #endif // SERVICE_STUB_H dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_calendarhuangli.cpp000066400000000000000000000076351473346337000277500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_calendarhuangli.h" #include "../third-party_stub/stub.h" #include "config.h" #include #include bool stub_OpenHuangliDB(void *obj, const QString &dbpath) { Q_UNUSED(dbpath); HuangLiDataBase *o = reinterpret_cast(obj); o->m_database = QSqlDatabase::addDatabase("QSQLITE"); o->m_database.setDatabaseName(HL_DATABASE_DIR); return o->m_database.open(); } test_calendarhuangli::test_calendarhuangli() { Stub stub; stub.set(ADDR(HuangLiDataBase, OpenHuangliDatabase), stub_OpenHuangliDB); calendarHuangLi = new CalendarHuangLi(); } test_calendarhuangli::~test_calendarhuangli() { if (calendarHuangLi->m_database->m_database.isOpen()) { calendarHuangLi->m_database->m_database.close(); } delete calendarHuangLi; } //QString CalendarHuangLi::GetFestivalMonth(quint32 year, quint32 month) TEST_F(test_calendarhuangli, GetFestivalMonth) { quint32 year = 2020; quint32 month = 12; QString fesMonth = calendarHuangLi->getFestivalMonth(year, month); } //QString CalendarHuangLi::GetHuangLiDay(quint32 year, quint32 month, quint32 day) TEST_F(test_calendarhuangli, GetHuangLiDay) { //2020年12月13日黄历信息 const QString huangli_20201213 = "{\"Avoid\":\"嫁娶.祈福.出火.移徙.入宅.\",\"GanZhiDay\":\"庚寅\",\"GanZhiMonth\":\"戊子\"," "\"GanZhiYear\":\"庚子\",\"LunarDayName\":\"廿九\",\"LunarFestival\":\"\",\"LunarLeapMonth\":0," "\"LunarMonthName\":\"十月\",\"SolarFestival\":\"南京大屠杀死难者国家公祭日\"," "\"Suit\":\"纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床." "栽种.牧养.开生坟.合寿木.入殓.安葬.启攒.\",\"Term\":\"\",\"Worktime\":0,\"Zodiac\":\"鼠\"}"; quint32 year = 2020; quint32 month = 12; quint32 day = 13; QString gethuangli = calendarHuangLi->getHuangLiDay(year, month, day); assert(huangli_20201213 == gethuangli); //2020年12月14日黄历信息 const QString huangli_20201214 = "{\"Avoid\":\"入宅.修造.动土.破土.安门.上梁.\",\"GanZhiDay\":\"辛卯\",\"GanZhiMonth\":\"戊子\"," "\"GanZhiYear\":\"庚子\",\"LunarDayName\":\"三十\",\"LunarFestival\":\"\",\"LunarLeapMonth\":0," "\"LunarMonthName\":\"十月\",\"SolarFestival\":\"\",\"Suit\":\"祭祀.入殓.移柩.余事勿取.\",\"Term\":" "\"\",\"Worktime\":0,\"Zodiac\":\"鼠\"}"; day = 14; gethuangli = calendarHuangLi->getHuangLiDay(year, month, day); assert(huangli_20201214 == gethuangli); } //QString CalendarHuangLi::GetHuangLiMonth(quint32 year, quint32 month, bool fill) TEST_F(test_calendarhuangli, GetHuangLiMonth) { quint32 year = 2020; quint32 month = 12; bool fill = false; calendarHuangLi->getHuangLiMonth(year, month, fill); fill = true; calendarHuangLi->getHuangLiMonth(year, month, fill); } //CaLunarDayInfo CalendarHuangLi::GetLunarInfoBySolar(quint32 year, quint32 month, quint32 day) TEST_F(test_calendarhuangli, GetLunarInfoBySolar) { quint32 year = 2020; quint32 month = 12; quint32 day = 13; CaLunarDayInfo huangliDayInfo = calendarHuangLi->getLunarInfoBySolar(year, month, day); } //CaLunarMonthInfo CalendarHuangLi::GetLunarCalendarMonth(quint32 year, quint32 month, bool fill) TEST_F(test_calendarhuangli, GetLunarCalendarMonth) { quint32 year = 2020; quint32 month = 12; bool fill = false; calendarHuangLi->getLunarCalendarMonth(year, month, fill); fill = true; calendarHuangLi->getLunarCalendarMonth(year, month, fill); } dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_calendarhuangli.h000066400000000000000000000007601473346337000274050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CALENDARHUANGLI_H #define TEST_CALENDARHUANGLI_H #include "calendarhuangli.h" #include "gtest/gtest.h" #include class test_calendarhuangli : public QObject, public::testing::Test { public: test_calendarhuangli(); ~test_calendarhuangli(); protected: CalendarHuangLi *calendarHuangLi = nullptr; }; #endif // TEST_CALENDARHUANGLI_H dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_calendarscheduler.cpp000066400000000000000000000130371473346337000302700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_calendarscheduler.h" #include "../third-party_stub/stub.h" #include "service_stub.h" test_calendarscheduler::test_calendarscheduler() { } TEST_F(test_calendarscheduler, DeleteJob_01) { mCalendar->DeleteJob(0); } TEST_F(test_calendarscheduler, GetJob_01) { EXPECT_TRUE(mCalendar->GetJob(0).isEmpty()); } TEST_F(test_calendarscheduler, CreateJob_01) { mCalendar->CreateJob(""); } TEST_F(test_calendarscheduler, UpdateJob_01) { mCalendar->UpdateJob(""); } TEST_F(test_calendarscheduler, GetJobs_01) { QDateTime starTime; QDateTime endTime = starTime.addDays(1); EXPECT_FALSE(mCalendar->GetJobs(starTime, endTime).isEmpty()); } TEST_F(test_calendarscheduler, QueryJobs_01) { QString str("{\"End\":\"2022-10-22T14:52:29+08:00\",\"Key\":\"sd\",\"Start\":\"2021-10-22T14:52:29+08:00\"}"); EXPECT_FALSE(mCalendar->QueryJobs(str).isEmpty()); } TEST_F(test_calendarscheduler, QueryJobsWithLimit_01) { QString str("{\"End\":\"2022-10-22T14:52:29+08:00\",\"Key\":\"sd\",\"Start\":\"2021-10-22T14:52:29+08:00\"}"); EXPECT_FALSE(mCalendar->QueryJobsWithLimit(str, 5).isEmpty()); } TEST_F(test_calendarscheduler, QueryJobsWithRule_01) { QString str("{\"End\":\"2022-10-22T14:52:29+08:00\",\"Key\":\"sd\",\"Start\":\"2021-10-22T14:52:29+08:00\"}"); EXPECT_FALSE(mCalendar->QueryJobsWithRule(str, "").isEmpty()); } TEST_F(test_calendarscheduler, CreateJobType_01) { QString str("[{\"Authority\":7,\"ColorHex\":\"#5bdd80\",\"ColorTypeNo\":4,\"JobTypeName\":\"123\",\"JobTypeNo\":8}]"); EXPECT_FALSE(mCalendar->CreateJobType(str)); } TEST_F(test_calendarscheduler, DeleteJobType_01) { mCalendar->DeleteJobType(7); } TEST_F(test_calendarscheduler, UpdateJobType_01) { QString str("[{\"Authority\":7,\"ColorHex\":\"#5bdd80\",\"ColorTypeNo\":4,\"JobTypeName\":\"123\",\"JobTypeNo\":8}]"); mCalendar->UpdateJobType(str); } TEST_F(test_calendarscheduler, GetJobTypeList_01) { mCalendar->GetJobTypeList().isEmpty(); } TEST_F(test_calendarscheduler, isJobTypeUsed_01) { mCalendar->isJobTypeUsed(0); } TEST_F(test_calendarscheduler, GetColorTypeList_01) { mCalendar->GetColorTypeList().isEmpty(); } TEST_F(test_calendarscheduler, UpdateRemindTimeout_01) { mCalendar->UpdateRemindTimeout(true); mCalendar->UpdateRemindTimeout(false); } TEST_F(test_calendarscheduler, notifyMsgHanding_01) { for (int i = 0; i < 25; i++) { mCalendar->notifyMsgHanding(1, 1, i); } } TEST_F(test_calendarscheduler, initConnections_01) { mCalendar->initConnections(); } TEST_F(test_calendarscheduler, GetFestivalId_01) { mCalendar->GetFestivalId("123"); } TEST_F(test_calendarscheduler, IsFestivalJobEnabled_01) { mCalendar->IsFestivalJobEnabled(); } TEST_F(test_calendarscheduler, GetJobTimesBetween_01) { QString str("{\"AllDay\":true,\"Description\":\"\",\"End\":\"2022-04-07T23:59:00+08:00\",\"ID\":0,\"Ignore\":[],\"IsLunar\":false,\"RRule\":\"\",\"RecurID\":0,\"Remind\":\"1;09:00\",\"Start\":\"2022-04-06T00:00:00+08:00\",\"Title\":\"新建日程\",\"Type\":1}"); Job job = mCalendar->josnStringToJob(str); QDateTime starTime; QDateTime endTime = starTime.addDays(-10); EXPECT_TRUE(mCalendar->GetJobTimesBetween(starTime, endTime, job).isEmpty()); } TEST_F(test_calendarscheduler, ParseRRule_01) { QString str = "BYDAY=MO,TU,WE,TH,FR;COUNT=2;UNTIL=3"; QStringList sList; sList << ";FREQ=DAILY" << ";FREQ=WEEKLY" << ";FREQ=MONTHLY" << ";FREQ=YEARLY"; for (QString s : sList) { mCalendar->ParseRRule(str + s); } } TEST_F(test_calendarscheduler, GetJobRemindTime_01) { QString str("{\"AllDay\":true,\"Description\":\"\",\"End\":\"2022-04-07T23:59:00+08:00\",\"ID\":0,\"Ignore\":[],\"IsLunar\":false,\"RRule\":\"\",\"RecurID\":0,\"Remind\":\"1;09:00\",\"Start\":\"2022-04-06T00:00:00+08:00\",\"Title\":\"新建日程\",\"Type\":1}"); Job job = mCalendar->josnStringToJob(str); mCalendar->GetJobRemindTime(job); } TEST_F(test_calendarscheduler, josnStringToJob_01) { QString str("{\"AllDay\":true,\"Description\":\"\",\"End\":\"2022-04-07T23:59:00+08:00\",\"ID\":0,\"Ignore\":[],\"IsLunar\":false,\"RRule\":\"\",\"RecurID\":0,\"Remind\":\"1;09:00\",\"Start\":\"2022-04-06T00:00:00+08:00\",\"Title\":\"新建日程\",\"Type\":1}"); Job job = mCalendar->josnStringToJob(str); EXPECT_TRUE(job.AllDay); EXPECT_TRUE(job.ID == 0); } TEST_F(test_calendarscheduler, getRemindTimeByCount_01) { mCalendar->getRemindTimeByCount(0); } TEST_F(test_calendarscheduler, getRemindTimeByMesc_01) { mCalendar->getRemindTimeByMesc(0); } TEST_F(test_calendarscheduler, closeNotification_01) { mCalendar->closeNotification(0); } TEST_F(test_calendarscheduler, OnModifyJobRemind_01) { QString str("{\"AllDay\":true,\"Description\":\"\",\"End\":\"2022-04-07T23:59:00+08:00\",\"ID\":0,\"Ignore\":[],\"IsLunar\":false,\"RRule\":\"\",\"RecurID\":0,\"Remind\":\"1;09:00\",\"Start\":\"2022-04-06T00:00:00+08:00\",\"Title\":\"新建日程\",\"Type\":1}"); Job job = mCalendar->josnStringToJob(str); mCalendar->OnModifyJobRemind(job, ""); } TEST_F(test_calendarscheduler, saveNotifyID_01) { QString str("{\"AllDay\":true,\"Description\":\"\",\"End\":\"2022-04-07T23:59:00+08:00\",\"ID\":0,\"Ignore\":[],\"IsLunar\":false,\"RRule\":\"\",\"RecurID\":0,\"Remind\":\"1;09:00\",\"Start\":\"2022-04-06T00:00:00+08:00\",\"Title\":\"新建日程\",\"Type\":1}"); Job job = mCalendar->josnStringToJob(str); mCalendar->saveNotifyID(job, 1); } dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_calendarscheduler.h000066400000000000000000000011751473346337000277350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CALENDARSCHEDULER_H #define TEST_CALENDARSCHEDULER_H #include "calendarscheduler.h" #include #include class test_calendarscheduler: public::testing::Test { public: test_calendarscheduler(); virtual void SetUp() { mCalendar = new CalendarScheduler(); } virtual void TearDown() { delete mCalendar; mCalendar = nullptr; } protected: CalendarScheduler *mCalendar = nullptr; }; #endif // TEST_CALENDARSCHEDULER_H dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_calendarservice.cpp000066400000000000000000000073331473346337000277540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_calendarservice.h" test_calendarservice::test_calendarservice() { } TEST_F(test_calendarservice, GetFestivalMonth_01) { mService->GetFestivalMonth(2022, 4); } TEST_F(test_calendarservice, GetHuangLiDay_01) { EXPECT_FALSE(mService->GetHuangLiDay(2022, 4, 22).isEmpty()); } TEST_F(test_calendarservice, GetHuangLiMonth_01) { EXPECT_FALSE(mService->GetHuangLiMonth(2022, 4, true).isEmpty()); } TEST_F(test_calendarservice, GetLunarInfoBySolar_01) { EXPECT_FALSE(mService->GetLunarInfoBySolar(2022, 4, true).mLunarDayName.isEmpty()); } TEST_F(test_calendarservice, GetLunarMonthCalendar_01) { EXPECT_TRUE(mService->GetLunarMonthCalendar(2022, 4, true).mDays); } TEST_F(test_calendarservice, CreateJob_01) { QString str("{\"AllDay\":true,\"Description\":\"\",\"End\":\"2022-04-07T23:59:00+08:00\",\"ID\":1,\"Ignore\":[],\"IsLunar\":false,\"RRule\":\"\",\"RecurID\":0,\"Remind\":\"1;09:00\",\"Start\":\"2022-04-06T00:00:00+08:00\",\"Title\":\"新建日程\",\"Type\":1}"); mService->CreateJob(str); } TEST_F(test_calendarservice, CreateType_01) { QString str("[{\"Authority\":7,\"ColorHex\":\"#5bdd80\",\"ColorTypeNo\":4,\"JobTypeName\":\"123\",\"JobTypeNo\":12}]"); mService->CreateType(str); } TEST_F(test_calendarservice, DeleteJob_01) { mService->DeleteJob(1); } TEST_F(test_calendarservice, GetJob_01) { mService->GetJob(1); } TEST_F(test_calendarservice, GetJobs_01) { mService->GetJobs(2022, 2, 1, 2022, 4, 1); } TEST_F(test_calendarservice, UpdateJob_01) { QString str("{\"AllDay\":true,\"Description\":\"\",\"End\":\"2022-04-07T23:59:00+08:00\",\"ID\":1,\"Ignore\":[],\"IsLunar\":false,\"RRule\":\"\",\"RecurID\":0,\"Remind\":\"1;09:00\",\"Start\":\"2022-04-06T00:00:00+08:00\",\"Title\":\"新建日程\",\"Type\":1}"); mService->UpdateJob(str); } TEST_F(test_calendarservice, QueryJobs_01) { QString str("{\"End\":\"2022-10-22T14:52:29+08:00\",\"Key\":\"sd\",\"Start\":\"2021-10-22T14:52:29+08:00\"}"); EXPECT_FALSE(mService->QueryJobs(str).isEmpty()); } TEST_F(test_calendarservice, QueryJobsWithLimit_01) { QString str("{\"End\":\"2022-10-22T14:52:29+08:00\",\"Key\":\"sd\",\"Start\":\"2021-10-22T14:52:29+08:00\"}"); EXPECT_FALSE(mService->QueryJobsWithLimit(str, 5).isEmpty()); } TEST_F(test_calendarservice, QueryJobsWithRule_01) { QString str("{\"End\":\"2022-10-22T14:52:29+08:00\",\"Key\":\"sd\",\"Start\":\"2021-10-22T14:52:29+08:00\"}"); EXPECT_FALSE(mService->QueryJobsWithRule(str, "").isEmpty()); } TEST_F(test_calendarservice, remindJob_01) { mService->remindJob(1, 2); } TEST_F(test_calendarservice, updateRemindJob_01) { mService->updateRemindJob(true); } TEST_F(test_calendarservice, CreateJobType_01) { QString str("[{\"Authority\":7,\"ColorHex\":\"#5bdd80\",\"ColorTypeNo\":4,\"JobTypeName\":\"123\",\"JobTypeNo\":8}]"); EXPECT_FALSE(mService->CreateJobType(str)); } TEST_F(test_calendarservice, DeleteJobType_01) { mService->DeleteJobType(7); } TEST_F(test_calendarservice, UpdateJobType_01) { QString str("[{\"Authority\":7,\"ColorHex\":\"#5bdd80\",\"ColorTypeNo\":4,\"JobTypeName\":\"123\",\"JobTypeNo\":8}]"); mService->UpdateJobType(str); } TEST_F(test_calendarservice, GetJobTypeList_01) { mService->GetJobTypeList().isEmpty(); } TEST_F(test_calendarservice, isJobTypeUsed_01) { mService->isJobTypeUsed(0); } TEST_F(test_calendarservice, GetColorTypeList_01) { mService->GetColorTypeList().isEmpty(); } TEST_F(test_calendarservice, notifyMsgHanding_01) { mService->notifyMsgHanding(1, 1, 1); } TEST_F(test_calendarservice, initConnections_01) { mService->initConnections(); } dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_calendarservice.h000066400000000000000000000011511473346337000274110ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CALENDARSERVICE_H #define TEST_CALENDARSERVICE_H #include "calendarservice.h" #include #include class test_calendarservice: public::testing::Test { public: test_calendarservice(); virtual void SetUp() { mService = new CalendarService(); } virtual void TearDown() { delete mService; mService = nullptr; } protected: CalendarService *mService = nullptr; }; #endif // TEST_CALENDARSERVICE_H dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_dbmanager/000077500000000000000000000000001473346337000260305ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_dbmanager/test_huanglidatabase.cpp000066400000000000000000000063351473346337000327160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_huanglidatabase.h" #include "../third-party_stub/stub.h" #include "config.h" bool stub_OpenHuangliDatabase(void *obj, const QString &dbpath) { Q_UNUSED(dbpath); HuangLiDataBase *o = reinterpret_cast(obj); o->m_database = QSqlDatabase::addDatabase("QSQLITE"); o->m_database.setDatabaseName(HL_DATABASE_DIR); return o->m_database.open(); } test_huanglidatabase::test_huanglidatabase() { Stub stub; stub.set(ADDR(HuangLiDataBase, OpenHuangliDatabase), stub_OpenHuangliDatabase); hlDb = new HuangLiDataBase(); } test_huanglidatabase::~test_huanglidatabase() { if (hlDb->m_database.isOpen()) { hlDb->m_database.close(); } delete hlDb; } //QString HuangLiDataBase::QueryFestivalList(quint32 year, quint8 month) TEST_F(test_huanglidatabase, QueryFestivalList) { quint32 year = 2020; quint8 month = 10; const QString strFes = "[{\"description\":\"10月1日至10月8日放假8天,9月27日,10月10日上班\",\"id\":\"2020100110\",\"list\":" "[{\"date\":\"2020-10-1\",\"status\":1}," "{\"date\":\"2020-10-2\",\"status\":1}," "{\"date\":\"2020-10-3\",\"status\":1}," "{\"date\":\"2020-10-4\",\"status\":1}," "{\"date\":\"2020-10-5\",\"status\":1}," "{\"date\":\"2020-10-6\",\"status\":1}," "{\"date\":\"2020-10-7\",\"status\":1}," "{\"date\":\"2020-10-8\",\"status\":1}," "{\"date\":\"2020-9-27\",\"status\":2}," "{\"date\":\"2020-10-10\",\"status\":2}]," "\"month\":10,\"name\":\"中秋节\",\"rest\":" "\"10月9日至10月10日请假2天,与周末连休可拼11天长假。\"}]"; QString getFes = hlDb->QueryFestivalList(year, month); assert(strFes == getFes); } //QList HuangLiDataBase::QueryHuangLiByDays(const QList &days) TEST_F(test_huanglidatabase, QueryHuangLiByDays) { QList days; stDay day1, day2; day1.Year = day2.Year = 2020; day1.Month = day2.Month = 10; day1.Day = 1; day2.Day = 2; days << day1 << day2; QList getHuangli = hlDb->QueryHuangLiByDays(days); stHuangLi hl1, hl2; hl1 = getHuangli.at(0); hl2 = getHuangli.at(1); QString hl2Suit = "开光.解除.起基.动土.拆卸.上梁.立碑.修坟.安葬.破土.启攒.移柩."; QString hl2Avoid = "嫁娶.出行.安床.作灶.祭祀.入宅.移徙.出火.进人口.置产."; assert(20201001 == hl1.ID && 20201002 == hl2.ID); assert(hl2Suit == hl2.Suit && hl2Avoid == hl2.Avoid); } ////bool HuangLiDataBase::OpenHuangliDatabase(const QString &dbpath) //TEST_F(test_huanglidatabase, OpenHuangliDatabase) //{ // QString dbpath = ""; // hlDb->OpenHuangliDatabase(dbpath); // dbpath = "123123"; // hlDb->OpenHuangliDatabase(dbpath); // dbpath = "%s%s%s%s%s%s"; // hlDb->OpenHuangliDatabase(dbpath); // hlDb->OpenHuangliDatabase(HL_DATABASE_DIR); //} dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_dbmanager/test_huanglidatabase.h000066400000000000000000000007571473346337000323650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_HUANGLIDATABASE_H #define TEST_HUANGLIDATABASE_H #include "dbmanager/huanglidatabase.h" #include "gtest/gtest.h" #include class test_huanglidatabase : public QObject, public::testing::Test { public: test_huanglidatabase(); ~test_huanglidatabase(); protected: HuangLiDataBase *hlDb = nullptr; }; #endif // TEST_HUANGLIDATABASE_H dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_dbmanager/test_schedulerdatabase.cpp000066400000000000000000000033151473346337000332400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_schedulerdatabase.h" test_schedulerdatabase::test_schedulerdatabase() { } TEST_F(test_schedulerdatabase, GetJob_01) { schedulerdatabase_next = false; mBase->GetJob(0); } TEST_F(test_schedulerdatabase, GetAllOriginJobs_01) { schedulerdatabase_next = false; mBase->GetAllOriginJobs("", ""); } TEST_F(test_schedulerdatabase, saveRemindJob_01) { schedulerdatabase_next = false; mBase->saveRemindJob(Job()); } TEST_F(test_schedulerdatabase, updateRemindJob_01) { schedulerdatabase_next = false; mBase->updateRemindJob(Job()); } TEST_F(test_schedulerdatabase, getValidRemindJob_01) { schedulerdatabase_next = false; mBase->getValidRemindJob(); } TEST_F(test_schedulerdatabase, getRemindJob_01) { schedulerdatabase_next = false; mBase->getRemindJob(1, 2); } TEST_F(test_schedulerdatabase, getRemindJob_02) { schedulerdatabase_next = false; mBase->getRemindJob(1); } TEST_F(test_schedulerdatabase, UpdateJobIgnore_01) { schedulerdatabase_next = false; mBase->UpdateJobIgnore("", 0); } TEST_F(test_schedulerdatabase, DeleteJobsByJobType_01) { schedulerdatabase_next = false; mBase->DeleteJobsByJobType(0); } TEST_F(test_schedulerdatabase, getJobIDByJobType_01) { schedulerdatabase_next = false; mBase->getJobIDByJobType(0); } TEST_F(test_schedulerdatabase, updateColorType_01) { schedulerdatabase_next = false; mBase->updateColorType(0, "#000000"); } TEST_F(test_schedulerdatabase, setDbPath_01) { schedulerdatabase_next = false; mBase->setDbPath("123"); EXPECT_EQ(mBase->m_dbPath, "123"); } dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_dbmanager/test_schedulerdatabase.h000066400000000000000000000030431473346337000327030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULERDATABASE_H #define TEST_SCHEDULERDATABASE_H #include "schedulerdatabase.h" #include "gtest/gtest.h" #include "../third-party_stub/stub.h" #include #include #include static bool schedulerdatabase_next = false; static bool schedulerdatabase_stub_exec(const QString&) { schedulerdatabase_next = false; return true; }; static bool schedulerdatabase_stub_next() { static int count = 0; if (!schedulerdatabase_next) { schedulerdatabase_next = true; count = 0; } count++; if (count >= 10) { schedulerdatabase_next = false; count = 0; } return schedulerdatabase_next; }; static QVariant schedulerdatabase_stub_value(const QString&) { return QVariant(); }; class test_schedulerdatabase: public::testing::Test { public: test_schedulerdatabase(); virtual void SetUp() { Stub stub; stub.set((bool(QSqlQuery::*)(const QString&))ADDR(QSqlQuery, exec), schedulerdatabase_stub_exec); stub.set((QVariant(QSqlQuery::*)(const QString&)const)ADDR(QSqlQuery, value), schedulerdatabase_stub_value); stub.set(ADDR(QSqlQuery, next), schedulerdatabase_stub_next); mBase = new SchedulerDatabase(); } virtual void TearDown() { delete mBase; mBase = nullptr; } protected: SchedulerDatabase *mBase = nullptr; }; #endif // TEST_SCHEDULERDATABASE_H dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_jobremindmanager.cpp000066400000000000000000000062661473346337000301320ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_jobremindmanager.h" #include "../third-party_stub/stub.h" #include "service_stub.h" #include #include void stub_callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList &args) { Q_UNUSED(mode); Q_UNUSED(method); Q_UNUSED(args); } test_jobremindmanager::test_jobremindmanager() { Stub stub; stub.set(ADDR(QDBusAbstractInterface, callWithArgumentList), stub_callWithArgumentList); jobRemindManager = new JobRemindManager(); } test_jobremindmanager::~test_jobremindmanager() { delete jobRemindManager; } QList createJobs() { Job job1; job1.Start = QDateTime::fromString("2020-12-21T00:00:00+08:00", Qt::ISODate); job1.End = QDateTime::fromString("2020-12-21T23:59:00+08:00", Qt::ISODate); job1.AllDay = true; job1.Type = 1; job1.Description = ""; job1.ID = 1; job1.Ignore = "[]"; job1.Title = "UT测试A"; job1.RRule = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR;COUNT=3"; job1.RecurID = 0; job1.Remind = "1;09:00"; Job job2; job2.Start = QDateTime::fromString("2020-12-22T00:00:00+08:00", Qt::ISODate); job2.End = QDateTime::fromString("2020-12-22T23:59:00+08:00", Qt::ISODate); job2.AllDay = true; job2.Type = 1; job2.Description = ""; job2.ID = 2; job2.Ignore = "[\"2020-12-11T00:00:00+08:00\"]"; job2.Title = "UT测试B"; job2.RRule = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR;COUNT=2"; job2.RecurID = 0; job2.Remind = "1;09:00"; Job job3; job3.Start = QDateTime::fromString("2020-12-24T00:00:00+08:00", Qt::ISODate); job3.End = QDateTime::fromString("2020-12-24T23:59:00+08:00", Qt::ISODate); job3.AllDay = true; job3.Type = 1; job3.Description = ""; job3.ID = 3; job3.Ignore = "[]"; job3.Title = "UT测试C"; job3.RRule = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR;COUNT=4"; job3.RecurID = 0; job3.Remind = "1;09:00"; QList jobs; jobs << job1 << job2 << job3; return jobs; } //void JobRemindManager::CallUiOpenSchedule(const Job &job) TEST_F(test_jobremindmanager, CallUiOpenSchedule) { Stub stub; qDBusAbstractInterface_callWithArgumentList_stub(stub); jobRemindManager->CallUiOpenSchedule(createJobs().at(0)); } //void JobRemindManager::RemindJob(const Job &job) TEST_F(test_jobremindmanager, RemindJob) { Stub stub; qDBusAbstractInterface_callWithArgumentList_stub(stub); jobRemindManager->RemindJob(createJobs().at(0)); } //int JobRemindManager::GetRemindAdvanceDays(const QString &remind) TEST_F(test_jobremindmanager, GetRemindAdvanceDays) { const QString remind = "1,09:00"; jobRemindManager->GetRemindAdvanceDays(remind); } //void JobRemindManager::RemindJobLater(const Job &job) TEST_F(test_jobremindmanager, RemindJobLater) { jobRemindManager->RemindJobLater(createJobs().at(0), 1); } //void JobRemindManager::UpdateRemindJobs(const QList &jobs) TEST_F(test_jobremindmanager, UpdateRemindJobs) { jobRemindManager->UpdateRemindJobs(createJobs()); } dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_jobremindmanager.h000066400000000000000000000007711473346337000275720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_JOBREMINDMANAGER_H #define TEST_JOBREMINDMANAGER_H #include "jobremindmanager.h" #include "gtest/gtest.h" #include class test_jobremindmanager : public QObject, public::testing::Test { public: test_jobremindmanager(); ~test_jobremindmanager(); protected: JobRemindManager *jobRemindManager = nullptr; }; #endif // TEST_JOBREMINDMANAGER_H dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_lunarandfestival/000077500000000000000000000000001473346337000274525ustar00rootroot00000000000000test_method_interface.cpp000066400000000000000000000133121473346337000344360ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_lunarandfestival// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_method_interface.h" #include #include #include test_method_interface::test_method_interface() { } //QString GetLunarMonthName(int lunarmonthname, bool isleap) TEST_F(test_method_interface, GetLunarMonthName) { // 腊月 int lunarmonthname = 12; bool isleap = false; QString lunarMName = GetLunarMonthName(lunarmonthname, isleap); assert("腊月" == lunarMName); // 闰腊月 isleap = true; lunarMName = GetLunarMonthName(lunarmonthname, isleap); assert("闰腊月" == lunarMName); } //QString GetLunarDayName(int lundayname) TEST_F(test_method_interface, GetLunarDayName) { // "初八" int lundayname = 8; QString lunarDayName = GetLunarDayName(lundayname); //qCInfo(CommonLogger) << lunarDayName; assert("初八" == lunarDayName); // "廿五" lundayname = 25; lunarDayName = GetLunarDayName(lundayname); //qCInfo(CommonLogger) << lunarDayName; assert("廿五" == lunarDayName); } //QString GetLunarDayFestival(int monthname, int lunarday, int lunarmonthdays, int solarterm) TEST_F(test_method_interface, GetLunarDayFestival) { // "除夕" int monthname = 12; int lunarday = 30; int lunarmonthdays = 30; int solarterm = 1; QString dayFestival = GetLunarDayFestival(monthname, lunarday, lunarmonthdays, solarterm); //qCInfo(CommonLogger) << dayFestival; assert("除夕" == dayFestival); // "清明节" monthname = 4; lunarday = 2; lunarmonthdays = 23; solarterm = 1; dayFestival = GetLunarDayFestival(monthname, lunarday, lunarmonthdays, solarterm); //qCInfo(CommonLogger) << dayFestival; assert("清明节" == dayFestival); // "" monthname = 5; lunarday = 1; lunarmonthdays = 13; solarterm = 0; dayFestival = GetLunarDayFestival(monthname, lunarday, lunarmonthdays, solarterm); //qCInfo(CommonLogger) << dayFestival; assert("" == dayFestival); } //QString GetSolarTermName(int order) TEST_F(test_method_interface, GetSolarTermName) { // "小满" QString stName = GetSolarTermName(4); assert("小满" == stName); // "" stName = GetSolarTermName(24); assert("" == stName); } //QString GetGanZhiMonth(int year, int monthzhi) TEST_F(test_method_interface, GetGanZhiMonth) { QString ganzhi = GetGanZhiMonth(2020, 12); assert("戊子" == ganzhi); } //QString GetGanZhiYear(int lunaryear) TEST_F(test_method_interface, GetGanZhiYear) { // "庚子" QString ganzhi = GetGanZhiYear(2020); assert("庚子" == ganzhi); } //QString GetGanZhiDay(int year, int month, int day) TEST_F(test_method_interface, GetGanZhiDay) { // "己丑" QString ganzhi = GetGanZhiDay(2020, 12, 12); assert("己丑" == ganzhi); } //QString GetYearZodiac(int lunaryear) TEST_F(test_method_interface, GetYearZodiac) { // "鼠" QString Zodiac = GetYearZodiac(2020); assert("鼠" == Zodiac); // "猪" Zodiac = GetYearZodiac(2019); assert("猪" == Zodiac); } //QVector get25SolarTermJDs(int year, int start) TEST_F(test_method_interface, get25SolarTermJDs) { QVector jds = get25SolarTermJDs(0, 0); } //double GetSolarTermJD(int year, int order) TEST_F(test_method_interface, GetSolarTermJD) { //春分 3月20日 assert(2.45893e+06 > GetSolarTermJD(2020, 0)); } //bool IsLeapYear(int year) TEST_F(test_method_interface, IsLeapYear) { assert(true == IsLeapYear(2020) && false == IsLeapYear(2019)); } // int GetSolarMonthDays(int year, int month) TEST_F(test_method_interface, GetSolarMonthDays) { assert(29 == GetSolarMonthDays(2020, 2)); } //int GetWeekday(int y, int m, int d) TEST_F(test_method_interface, GetWeekday) { assert(6 == GetWeekday(2020, 2, 29)); } //double DmsToDegrees(int degrees, int mintues, double seconds) TEST_F(test_method_interface, DmsToDegrees) { assert(qAbs(6.05 - DmsToDegrees(4, 3, 7200)) < 0.001); } //double DmsToSeconds(int d, int m, double s) TEST_F(test_method_interface, DmsToSeconds) { assert(qAbs(21780 - DmsToSeconds(4, 3, 7200)) < 0.001); } //double DmsToRadians(int d, int m, int s) TEST_F(test_method_interface, DmsToRadians) { assert(0.105592 <= DmsToRadians(4, 3, 7200)); } //QDateTime GetDateTimeFromJulianDay(double jd) TEST_F(test_method_interface, GetDateTimeFromJulianDay) { QString strJulianDay = "周五 3月 20 03:49:33 2020 GMT"; //qCInfo(CommonLogger) << julianDay.toString(); assert(strJulianDay.contains(GetDateTimeFromJulianDay(GetSolarTermJD(2020, 0)).toString())); } //double GetDeltaT(int year, int month) TEST_F(test_method_interface, GetDeltaT) { const int count = 15; const int year[count] = {-501, 0, 1599, 1699, 1799, 1859, 1899, 1919, 1940, 1960, 1985, 2004, 2049, 2149, 2150 }; for (int i = 0; i < count; ++i) { GetDeltaT(year[i], 6); } } //double JDBeijingTime2UTC(double bjtJD) TEST_F(test_method_interface, JDBeijingTime2UTC) { assert(0.67667 > JDBeijingTime2UTC(1.01)); } //QString GetSolarDayFestival(int year, int month, int day) TEST_F(test_method_interface, GetSolarDayFestival) { QString getFesStr = GetSolarDayFestival(2020, 8, 1); assert("建军节" == getFesStr); getFesStr = GetSolarDayFestival(2020, 6, 1); assert("儿童节" == getFesStr); } //double CalcEarthObliquityNutation(double dt) TEST_F(test_method_interface, CalcEarthObliquityNutation) { CalcEarthObliquityNutation(GetJulianCentury(1)); } //double lightAberration() TEST_F(test_method_interface, lightAberration) { lightAberration(); //qCInfo(CommonLogger) << lightAb; } test_method_interface.h000066400000000000000000000006361473346337000341100ustar00rootroot00000000000000dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_lunarandfestival// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_METHOD_INTERFACE_H #define TEST_METHOD_INTERFACE_H #include "method_interface.h" #include "gtest/gtest.h" #include class test_method_interface : public QObject, public::testing::Test { public: test_method_interface(); }; #endif // TEST_METHOD_INTERFACE_H dde-calendar-5.14.13/tests/dde-calendar-service-test/src/test_main.cpp000066400000000000000000000011011473346337000255310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "gtest/gtest.h" #if defined(CMAKE_SAFETYTEST_ARG_ON) #include #endif #include int main(int argc, char **argv) { qputenv("QT_QPA_PLATFORM", "offscreen"); QCoreApplication application(argc, argv); ::testing::InitGoogleTest(&argc, argv); int ret = RUN_ALL_TESTS(); #if defined(CMAKE_SAFETYTEST_ARG_ON) __sanitizer_set_report_path("asan.log"); #endif return ret; } dde-calendar-5.14.13/tests/test-prj-running.sh000066400000000000000000000020701473346337000211250ustar00rootroot00000000000000#!/bin/bash builddir=build reportdir=build-ut rm -r $builddir rm -r ../$builddir rm -r $reportdir rm -r ../$reportdir mkdir ../$builddir mkdir ../$reportdir cd ../$builddir #编译 cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_SAFETYTEST_ARG="CMAKE_SAFETYTEST_ARG_ON" .. make -j8 #生成asan日志和ut测试xml结果 ./tests/dde-calendar-client-test/dde-calendar-test --gtest_output=xml:./report/report_dde-calendar-client.xml sleep 5 ./tests/dde-calendar-service-test/dde-calendar-service-test --gtest_output=xml:./report/report_dde-calendar-service.xml workdir=$(cd ../$(dirname $0)/$builddir; pwd) mkdir -p report #统计代码覆盖率并生成html报告 lcov -d $workdir -c -o ./coverage.info lcov --extract ./coverage.info '*/src/*' -o ./coverage.info lcov --remove ./coverage.info '*/tests/*' -o ./coverage.info genhtml -o ./html ./coverage.info mv ./html/index.html ./html/cov_dde-calendar.html #对asan、ut、代码覆盖率结果收集至指定文件夹 cp -r html ../$reportdir/ cp -r report ../$reportdir/ cp -r asan*.log* ../$reportdir/asan_dde-calendar.log exit 0 dde-calendar-5.14.13/tests/third-party_stub/000077500000000000000000000000001473346337000206505ustar00rootroot00000000000000dde-calendar-5.14.13/tests/third-party_stub/addr_pri.h000066400000000000000000000245561473346337000226210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef __ADDR_PRI_H__ #define __ADDR_PRI_H__ #include #include //base on C++11 /********************************************************** access private function **********************************************************/ namespace std { template using enable_if_t = typename enable_if::type; template using remove_reference_t = typename remove_reference::type; } // std // Unnamed namespace is used to avoid duplicate symbols if the macros are used namespace { namespace private_access_detail { // @tparam TagType, used to declare different "get" funciton overloads for // different members/statics template struct private_access { // Normal lookup cannot find in-class defined (inline) friend functions. friend PtrType get(TagType) { return PtrValue; } }; } // namespace private_access_detail } // namespace // Used macro naming conventions: // The "namespace" of this macro library is PRIVATE_ACCESS, i.e. all // macro here has this prefix. // All implementation macro, which are not meant to be used directly have the // PRIVATE_ACCESS_DETAIL prefix. // Some macros have the ABCD_IMPL form, which means they contain the // implementation details for the specific ABCD macro. #define PRIVATE_ACCESS_DETAIL_CONCATENATE_IMPL(x, y) x##y #define PRIVATE_ACCESS_DETAIL_CONCATENATE(x, y) \ PRIVATE_ACCESS_DETAIL_CONCATENATE_IMPL(x, y) // @param PtrTypeKind E.g if we have "class A", then it can be "A::*" in case of // members, or it can be "*" in case of statics. #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, \ PtrTypeKind) \ namespace { \ namespace private_access_detail { \ /* Tag type, used to declare different get funcitons for different \ * members \ */ \ struct Tag {}; \ /* Explicit instantiation */ \ template struct private_access; \ /* We can build the PtrType only with two aliases */ \ /* E.g. using PtrType = int(int) *; would be illformed */ \ using PRIVATE_ACCESS_DETAIL_CONCATENATE(Alias_, Tag) = Type; \ using PRIVATE_ACCESS_DETAIL_CONCATENATE(PtrType_, Tag) = \ PRIVATE_ACCESS_DETAIL_CONCATENATE(Alias_, Tag) PtrTypeKind; \ /* Declare the friend function, now it is visible in namespace scope. \ * Note, \ * we could declare it inside the Tag type too, in that case ADL would \ * find \ * the declaration. By choosing to declare it here, the Tag type remains \ * a \ * simple tag type, it has no other responsibilities. */ \ PRIVATE_ACCESS_DETAIL_CONCATENATE(PtrType_, Tag) get(Tag); \ } \ } #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FIELD(Tag, Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, Class::*) \ namespace { \ namespace access_private_field { \ Type &Class##Name(Class &&t) { return t.*get(private_access_detail::Tag{}); } \ Type &Class##Name(Class &t) { return t.*get(private_access_detail::Tag{}); } \ /* The following usings are here to avoid duplicate const qualifier \ * warnings \ */ \ using PRIVATE_ACCESS_DETAIL_CONCATENATE(X, Tag) = Type; \ using PRIVATE_ACCESS_DETAIL_CONCATENATE(Y, Tag) = \ const PRIVATE_ACCESS_DETAIL_CONCATENATE(X, Tag); \ PRIVATE_ACCESS_DETAIL_CONCATENATE(Y, Tag) & Class##Name(const Class &t) {\ return t.*get(private_access_detail::Tag{}); \ } \ } \ } #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FUN(Tag, Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, Class::*) \ namespace { \ namespace call_private_fun { \ /* We do perfect forwarding, but we want to restrict the overload set \ * only for objects which have the type Class. */ \ template , \ Class>::value> * = nullptr, \ typename... Args> \ auto Class##Name(Obj &&o, Args &&... args) -> decltype( \ (std::forward(o).* \ get(private_access_detail::Tag{}))(std::forward(args)...)) { \ return (std::forward(o).*get(private_access_detail::Tag{}))( \ std::forward(args)...); \ } \ } \ namespace get_private_fun { \ auto Class##Name() -> decltype( \ get(private_access_detail::Tag{})) { \ return (get(private_access_detail::Tag{})); \ } \ } \ } #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FIELD(Tag, Class, Type, \ Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, *) \ namespace { \ namespace access_private_static_field { \ namespace Class { \ Type &Class##Name() { return *get(private_access_detail::Tag{}); } \ } \ } \ } #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FUN(Tag, Class, Type, \ Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, *) \ namespace { \ namespace call_private_static_fun { \ namespace Class { \ template \ auto Class##Name(Args &&... args) -> decltype( \ get(private_access_detail::Tag{})(std::forward(args)...)) { \ return get(private_access_detail::Tag{})( \ std::forward(args)...); \ } \ } \ } \ namespace get_private_static_fun { \ namespace Class { \ auto Class##Name() -> decltype(get(private_access_detail::Tag{})) { \ return get(private_access_detail::Tag{}); \ } \ } \ } \ } #define PRIVATE_ACCESS_DETAIL_UNIQUE_TAG \ PRIVATE_ACCESS_DETAIL_CONCATENATE(PrivateAccessTag, __COUNTER__) #define ACCESS_PRIVATE_FIELD(Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FIELD(PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, \ Class, Type, Name) #define ACCESS_PRIVATE_FUN(Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FUN(PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, \ Class, Type, Name) #define ACCESS_PRIVATE_STATIC_FIELD(Class, Type, Name) \ Type Class::Name; \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FIELD( \ PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, Class, Type, Name) #define ACCESS_PRIVATE_STATIC_FUN(Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FUN( \ PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, Class, Type, Name) #endif dde-calendar-5.14.13/tests/third-party_stub/stub.h000066400000000000000000000237211473346337000220030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef __STUB_H__ #define __STUB_H__ #ifdef _WIN32 //windows #include #include #else //linux #include #include #endif //c #include #include //c++ #include #include #define ADDR(CLASS_NAME,MEMBER_NAME) (&CLASS_NAME::MEMBER_NAME) /********************************************************** replace function **********************************************************/ #ifdef _WIN32 #define CACHEFLUSH(addr, size) FlushInstructionCache(GetCurrentProcess(), addr, size) #else #define CACHEFLUSH(addr, size) __builtin___clear_cache(addr, addr + size) #endif #if defined(__aarch64__) || defined(_M_ARM64) #define CODESIZE 16U #define CODESIZE_MIN 16U #define CODESIZE_MAX CODESIZE // ldr x9, +8 // br x9 // addr #define REPLACE_FAR(t, fn, fn_stub)\ ((uint32_t*)fn)[0] = 0x58000040 | 9;\ ((uint32_t*)fn)[1] = 0xd61f0120 | (9 << 5);\ *(long long *)(fn + 8) = (long long )fn_stub;\ CACHEFLUSH((char *)fn, CODESIZE); #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) #elif defined(__arm__) || defined(_M_ARM) #define CODESIZE 8U #define CODESIZE_MIN 8U #define CODESIZE_MAX CODESIZE // ldr pc, [pc, #-4] #define REPLACE_FAR(t, fn, fn_stub)\ ((uint32_t*)fn)[0] = 0xe51ff004;\ ((uint32_t*)fn)[1] = (uint32_t)fn_stub;\ CACHEFLUSH((char *)fn, CODESIZE); #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) #elif defined(__mips64) #define CODESIZE 80U #define CODESIZE_MIN 80U #define CODESIZE_MAX CODESIZE //MIPS has no PC pointer, so you need to manually enter and exit the stack //120000ce0: 67bdffe0 daddiu sp, sp, -32 //enter the stack //120000ce4: ffbf0018 sd ra, 24(sp) //120000ce8: ffbe0010 sd s8, 16(sp) //120000cec: ffbc0008 sd gp, 8(sp) //120000cf0: 03a0f025 move s8, sp //120000d2c: 03c0e825 move sp, s8 //exit the stack //120000d30: dfbf0018 ld ra, 24(sp) //120000d34: dfbe0010 ld s8, 16(sp) //120000d38: dfbc0008 ld gp, 8(sp) //120000d3c: 67bd0020 daddiu sp, sp, 32 //120000d40: 03e00008 jr ra #define REPLACE_FAR(t, fn, fn_stub)\ ((uint32_t *)fn)[0] = 0x67bdffe0;\ ((uint32_t *)fn)[1] = 0xffbf0018;\ ((uint32_t *)fn)[2] = 0xffbe0010;\ ((uint32_t *)fn)[3] = 0xffbc0008;\ ((uint32_t *)fn)[4] = 0x03a0f025;\ *(uint16_t *)(fn + 20) = (long long)fn_stub >> 32;\ *(fn + 22) = 0x19;\ *(fn + 23) = 0x24;\ ((uint32_t *)fn)[6] = 0x0019cc38;\ *(uint16_t *)(fn + 28) = (long long)fn_stub >> 16;\ *(fn + 30) = 0x39;\ *(fn + 31) = 0x37;\ ((uint32_t *)fn)[8] = 0x0019cc38;\ *(uint16_t *)(fn + 36) = (long long)fn_stub;\ *(fn + 38) = 0x39;\ *(fn + 39) = 0x37;\ ((uint32_t *)fn)[10] = 0x0320f809;\ ((uint32_t *)fn)[11] = 0x00000000;\ ((uint32_t *)fn)[12] = 0x00000000;\ ((uint32_t *)fn)[13] = 0x03c0e825;\ ((uint32_t *)fn)[14] = 0xdfbf0018;\ ((uint32_t *)fn)[15] = 0xdfbe0010;\ ((uint32_t *)fn)[16] = 0xdfbc0008;\ ((uint32_t *)fn)[17] = 0x67bd0020;\ ((uint32_t *)fn)[18] = 0x03e00008;\ ((uint32_t *)fn)[19] = 0x00000000;\ CACHEFLUSH((char *)fn, CODESIZE); #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) #elif defined(__thumb__) || defined(_M_THUMB) #error "Thumb is not supported" #else //__i386__ _x86_64__ _M_IX86 _M_X64 #define CODESIZE 13U #define CODESIZE_MIN 5U #define CODESIZE_MAX CODESIZE //13 byte(jmp m16:64) //movabs $0x102030405060708,%r11 //jmpq *%r11 #define REPLACE_FAR(t, fn, fn_stub)\ *fn = 0x49;\ *(fn + 1) = 0xbb;\ *(long long *)(fn + 2) = (long long)fn_stub;\ *(fn + 10) = 0x41;\ *(fn + 11) = 0xff;\ *(fn + 12) = 0xe3;\ //CACHEFLUSH((char *)fn, CODESIZE); //5 byte(jmp rel32) #define REPLACE_NEAR(t, fn, fn_stub)\ *fn = 0xE9;\ *(int *)(fn + 1) = (int)(fn_stub - fn - CODESIZE_MIN);\ //CACHEFLUSH((char *)fn, CODESIZE); #endif struct func_stub { char *fn; unsigned char code_buf[CODESIZE]; bool far_jmp; }; class Stub { public: Stub() { #ifdef _WIN32 SYSTEM_INFO sys_info; GetSystemInfo(&sys_info); m_pagesize = sys_info.dwPageSize; #else m_pagesize = sysconf(_SC_PAGE_SIZE); #endif if (m_pagesize < 0) { m_pagesize = 4096; } } ~Stub() { std::map::iterator iter; struct func_stub *pstub; for(iter=m_result.begin(); iter != m_result.end(); iter++) { pstub = iter->second; #ifdef _WIN32 DWORD lpflOldProtect; if(0 != VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READWRITE, &lpflOldProtect)) #else if (0 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_WRITE | PROT_EXEC)) #endif { if(pstub->far_jmp) { std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MAX); } else { std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MIN); } #if defined(__aarch64__) || defined(_M_ARM64) CACHEFLUSH(pstub->fn, CODESIZE); #elif defined(__arm__) || defined(_M_ARM) CACHEFLUSH(pstub->fn, CODESIZE); #elif defined(__mips64) CACHEFLUSH(pstub->fn, CODESIZE); #else //__i386__ _x86_64__ _M_IX86 _M_X64 //CACHEFLUSH(pstub->fn, CODESIZE); #endif #ifdef _WIN32 VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READ, &lpflOldProtect); #else mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_EXEC); #endif } iter->second = NULL; delete pstub; } return; } template void set(T addr, S addr_stub) { char * fn; char * fn_stub; fn = addrof(addr); fn_stub = addrof(addr_stub); struct func_stub *pstub; pstub = new func_stub; //start reset(fn); // pstub->fn = fn; if(distanceof(fn, fn_stub)) { pstub->far_jmp = true; std::memcpy(pstub->code_buf, fn, CODESIZE_MAX); } else { pstub->far_jmp = false; std::memcpy(pstub->code_buf, fn, CODESIZE_MIN); } #ifdef _WIN32 DWORD lpflOldProtect; if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READWRITE, &lpflOldProtect)) #else if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_WRITE | PROT_EXEC)) #endif { throw("stub set memory protect to w+r+x faild"); } if(pstub->far_jmp) { REPLACE_FAR(this, fn, fn_stub); } else { REPLACE_NEAR(this, fn, fn_stub); } #ifdef _WIN32 if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READ, &lpflOldProtect)) #else if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_EXEC)) #endif { throw("stub set memory protect to r+x failed"); } m_result.insert(std::pair(fn,pstub)); return; } template void reset(T addr) { char * fn; fn = addrof(addr); std::map::iterator iter = m_result.find(fn); if (iter == m_result.end()) { return; } struct func_stub *pstub; pstub = iter->second; #ifdef _WIN32 DWORD lpflOldProtect; if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READWRITE, &lpflOldProtect)) #else if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_WRITE | PROT_EXEC)) #endif { throw("stub reset memory protect to w+r+x faild"); } if(pstub->far_jmp) { std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MAX); } else { std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MIN); } #if defined(__aarch64__) || defined(_M_ARM64) CACHEFLUSH(pstub->fn, CODESIZE); #elif defined(__arm__) || defined(_M_ARM) CACHEFLUSH(pstub->fn, CODESIZE); #elif defined(__mips64) CACHEFLUSH(pstub->fn, CODESIZE); #else //__i386__ _x86_64__ _M_IX86 _M_X64 //CACHEFLUSH(pstub->fn, CODESIZE); #endif #ifdef _WIN32 if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READ, &lpflOldProtect)) #else if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_EXEC)) #endif { throw("stub reset memory protect to r+x failed"); } m_result.erase(iter); delete pstub; return; } private: char *pageof(char* addr) { #ifdef _WIN32 return (char *)((unsigned long long)addr & ~(m_pagesize - 1)); #else return (char *)((unsigned long)addr & ~(m_pagesize - 1)); #endif } template char* addrof(T addr) { union { T _s; char* _d; }ut; ut._s = addr; return ut._d; } bool distanceof(char* addr, char* addr_stub) { std::ptrdiff_t diff = addr_stub >= addr ? addr_stub - addr : addr - addr_stub; if((sizeof(addr) > 4) && (((diff >> 31) - 1) > 0)) { return true; } return false; } private: #ifdef _WIN32 //LLP64 long long m_pagesize; #else //LP64 long m_pagesize; #endif std::map m_result; }; #endif dde-calendar-5.14.13/translations/000077500000000000000000000000001473346337000167235ustar00rootroot00000000000000dde-calendar-5.14.13/translations/dde-calendar-service_am_ET.ts000066400000000000000000000701551473346337000243110ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color ቀለም Cancel button መሰረዣ Save button ማስቀመጫ CDayMonthView Monday Tuesday Wednesday Thursday Friday Saturday Sunday CDayWindow Y Y M M D Lunar CGraphicsView New Event CMonthScheduleNumItem %1 more CMonthView New event New Event CMonthWindow Y Y CMyScheduleView My Event OK button እሺ Delete button ማጥፊያ Edit button ማረሚያ CPushButton New event type CScheduleDlg New Event Edit Event End time must be greater than start time OK button እሺ Never በፍጹም At time of event 15 minutes before 30 minutes before 1 hour before 1 day before 2 days before 1 week before On start day (9:00 AM) time(s) Enter a name please The name can not only contain whitespaces Type: አይነት: Description: All Day: Starts: Ends: Remind Me: Repeat: End Repeat: Calendar account: Calendar account Type አይነት Description መግለጫ All Day Time: Time Solar Lunar Starts Ends Remind Me Repeat መድገሚያ Daily Weekdays Weekly Monthly Yearly End Repeat After On ማብሪያ Cancel button መሰረዣ Save button ማስቀመጫ CScheduleOperation All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Cancel button መሰረዣ Change All You are changing the repeating rule of this event. You are deleting an event. Are you sure you want to delete this event? Delete button ማጥፊያ Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? All Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button እሺ CScheduleSearchDateItem Y Y M M D CScheduleSearchItem Edit ማረሚያ Delete ማጥፊያ All Day CScheduleSearchView No search results ምንም መፈለጊያ የለም CScheduleView ALL DAY CSettingDialog import ICS file Manual በ እጅ 15 mins 30 mins 1 hour 1 ሰአት 24 hours Sync Now Last sync Monday Tuesday Wednesday Thursday Friday Saturday Sunday 12-hour clock 24-hour clock Please go to the <a href='/'>Control Center</a> to change settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Y M M W D Search events and festivals CWeekWidget Sun እሑድ Mon ሰኞ Tue ማክሰ Wed ረቡዕ Thu ሐሙስ Fri አርብ Sat ቅዳሜ CWeekWindow Week Y Y CYearScheduleView All Day No event CYearWindow Y Y CalendarWindow Calendar ቀን መቁጠሪያ Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar ቀን መቁጠሪያ Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day DAccountDataBase Work Life Other ለላ DAlarmManager Close button መዝጊያ One day before start አንድ ቀን ከ መጀመሩ በፊት Remind me tomorrow ነገ አስታውሰኝ Remind me later በኋላ አስታውሰኝ 15 mins later 1 hour later 4 hours later Tomorrow ነገ Schedule Reminder አስታዋሽ ማሰናጃ %1 to %2 %1 እስከ %2 Today ዛሬ DragInfoGraphicsView Edit ማረሚያ Delete ማጥፊያ New event New Event JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button መሰረዣ Delete button ማጥፊያ QObject Account settings Account Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General ባጠቃላይ First day of week Time Return Today Return ዛሬ Return Today Today Return Today ዛሬ ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: ስም: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button መሰረዣ Save button ማስቀመጫ The name can not only contain whitespaces Enter a name please Shortcut Help እርዳታ Delete event Copy ኮፒ Cut መቁረጫ Paste መለጠፊያ Delete ማጥፊያ Select all ሁሉንም መምረጫ SidebarCalendarWidget Y Y M M TimeJumpDialog Go button UserloginWidget Sign In button መግቢያ Sign Out button መውጫ YearFrame Y Y today Today Today ዛሬ dde-calendar-5.14.13/translations/dde-calendar-service_ar.ts000066400000000000000000000725151473346337000237300ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color لون Cancel button إلغاء Save button حفظ CDayMonthView Monday الاثنين Tuesday الثلاثاء Wednesday الأربعاء Thursday الخميس Friday الجمعة Saturday السبت Sunday الأحد CDayWindow Y السنة M الشهر D اليوم Lunar CGraphicsView New Event حدث جديد CMonthScheduleNumItem %1 more 1% أكثر CMonthView New event حدث جديد New Event حدث جديد CMonthWindow Y السنة CMyScheduleView My Event الحدث الخاص بي OK button موافق Delete button حذف Edit button تحرير CPushButton New event type CScheduleDlg New Event لا أحداث Edit Event تعديل الأحداث End time must be greater than start time يجب أن يكون وقت الانتهاء أكبر من وقت البدء OK button حسنا Never أبدا At time of event في وقت الحدث 15 minutes before 15 دقيقة قبل 30 minutes before 30 دقيقة قبل 1 hour before 1 ساعة قبل 1 day before 1 يوم قبل 2 days before “2“يومين قبل 1 week before 1 أسبوع قبل On start day (9:00 AM) في يوم البَدْء (9:00 صباحا) time(s) الوقت(ج) Enter a name please The name can not only contain whitespaces Type: النوع: Description: الوصف: All Day: طوال اليوم: Starts: يبدأ: Ends: ينتهي: Remind Me: ذكرني: Repeat: تكرار End Repeat: نهاية التكرار Calendar account: Calendar account Type النوع Description الوصف All Day طوال اليوم Time: Time Solar Lunar Starts يبدأ Ends ينتهي Remind Me ذكرني Repeat تكرار Daily يوميا Weekdays أيام الأسبوع Weekly أسبوعيا Monthly شهريا Yearly سنويا End Repeat نهاية التكرار After بعد On تشغيل Cancel button إلغاء Save button حفظ CScheduleOperation All occurrences of a repeating event must have the same all-day status. يجب أن يكون لجميع حالات تكرار الحدث نفس الوضع طوال اليوم. Do you want to change all occurrences? هل تريد تغيير كل الأحداث؟ Cancel button إلغاء Change All تغيير الكل You are changing the repeating rule of this event. أنت تغير قاعدة التكرار لهذا الحدث. You are deleting an event. أنت تقوم بحذف حدث. Are you sure you want to delete this event? هل أنت متأكد من أنك تريد حذف هذا الحدث؟ Delete button حذف Do you want to delete all occurrences of this event, or only the selected occurrence? هل تريد حذف جميع حالات هذا الحدث، أو فقط الأحداث المحددة؟ Delete All حذف الكل Delete Only This Event حذف هذا الحدث فقط Do you want to delete this and all future occurrences of this event, or only the selected occurrence? هل تريد حذف هذا وجميع الحالات المستقبلية لهذا الحدث، أو فقط الأحداث المحددة؟ Delete All Future Events حذف جميع الأحداث المستقبلية You are changing a repeating event. أنت تقوم بتغيير حدث متكرر. Do you want to change only this occurrence of the event, or all occurrences? هل تريد تغيير هذا الحدث فقط، أو كل الأحداث؟ All الجميع Only This Event هذا الحدث فقط Do you want to change only this occurrence of the event, or this and all future occurrences? هل تريد تغيير هذا الحدث فقط، أو هذا وكل الأحداث المستقبلية؟ All Future Events كل الأحداث المستقبلية You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button موافق CScheduleSearchDateItem Y سنة M شهر D يوم CScheduleSearchItem Edit تعديل Delete حذف All Day طوال اليوم CScheduleSearchView No search results لا توجد نتائج بحث CScheduleView ALL DAY طوال اليوم CSettingDialog Manual يدوي 15 mins 30 mins 1 hour 1 ساعة 24 hours Sync Now Last sync Monday الاثنين Sunday الأحد 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y سنة M شهر W أسبوع D يوم Search events and festivals CWeekWidget Sun الأحد Mon الاثنين Tue الثلاثاء Wed الأربعاء Thu الخميس Fri الجمعة Sat السبت CWeekWindow Week الأسبوع Y السنة CYearScheduleView All Day طوال اليوم No event لا يوجد حدث CYearWindow Y السنة CalendarWindow Calendar التقويم Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. التقويم هو برنامج لعرض التواريخ وللتخطيط الذكي لجميع الأشياء في الحياة Calendarmainwindow Calendar التقويم Manage Privacy Policy Syncing... جاري المزامنة... Sync successful Sync failed, please try later CenterWidget All Day طوال اليوم DAccountDataBase Work عمل Life حياة Other أخرى DAlarmManager Close button إغلاق One day before start يوم قبل البداية Remind me tomorrow ذكرني غدا Remind me later ذكرني لاحقا 15 mins later 1 hour later 4 hours later Tomorrow غدا Schedule Reminder تذكير بالبرنامج %1 to %2 Today اليوم DragInfoGraphicsView Edit تحرير Delete حذف New event حدث جديد New Event حدث جديد JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button إلغاء Delete button حذف QObject Account settings Account حساب Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General عام First day of week Time Return Today Return اليوم Return Today Today Return Today اليوم ScheduleTypeEditDlg New event type Edit event type Name: الاسم : Color: Cancel button إلغاء Save button حفظ The name can not only contain whitespaces Enter a name please Shortcut Help مساعدة Delete event حذف حدث Copy نسخ Cut قص Paste لصق Delete حذف Select all تحديد الكل SidebarCalendarWidget Y السنة M الشهر TimeJumpDialog Go button UserloginWidget Sign In button تسجيل الدخول Sign Out button تسجيل الخروج YearFrame Y السنة today Today Today اليوم dde-calendar-5.14.13/translations/dde-calendar-service_az.ts000066400000000000000000000746031473346337000237400ustar00rootroot00000000000000 AccountItem Sync successful Uğurlu eyniləşdirmə Network error Şəbəkə xətası Server exception Server istisnası Storage full Yaddaş dolub AccountManager Local account Yerli hesab Event types Tədbirin növləri CColorPickerWidget Color Rəng Cancel button İmtina Save button Saxlayın CDayMonthView Monday Bazar ertəsi Tuesday Çərşənbə axşamı Wednesday Çərşənbə Thursday Cümə axşamı Friday Cümə Saturday Şənbə Sunday Bazar CDayWindow Y İl M Ay D G Lunar Ay CGraphicsView New Event Yeni tədbir CMonthScheduleNumItem %1 more %1 daha çox CMonthView New event Yeni tədbir New Event Yeni tədbir CMonthWindow Y İl CMyScheduleView My Event Mənim tədbirim OK button OLDU Delete button Silin Edit button Düzəliş edin CPushButton New event type Yeni tədbir növü CScheduleDlg New Event Yeni tədbir Edit Event Tədbirə düzəliş etmək End time must be greater than start time Bitmə tarixi başlama tarixindən böyük olmalıdır OK button OK Never Heç vaxt At time of event Tədbir zamanı 15 minutes before 15 dəqiqə əvvəl 30 minutes before 30 dəqiqə əvvəl 1 hour before 1 saat əvvəl 1 day before 1 gün əvvəl 2 days before 2 gün əvvəl 1 week before 1 həftə əvvəl On start day (9:00 AM) Başlanğıc günü (9:00) time(s) vaxt(lar) Enter a name please Lütfən adı daxil edin The name can not only contain whitespaces Ad təkcə ara boşluqlarından ibarət ola bilməz Type: Növ: Description: Təsviri: All Day: Bütün gün: Starts: Başlayır: Ends: Başa çatır: Remind Me: Mənə xatırlat: Repeat: Təkrar: End Repeat: Təkrarın sonu: Calendar account: Təqvim hesabı: Calendar account Təqvim hesabı Type Növ Description Təsviri All Day Bütün gün Time: Vaxt: Time Vaxt Solar Günəş Lunar Ay Starts Başlayır Ends Başa çatır Remind Me Mənə xatırlat Repeat Təkrar Daily Hər gün Weekdays Həftənin günləri Weekly Həftə Monthly Ay Yearly İl End Repeat Təkrarın sonu After Sonra On Açıq Cancel button İmtina Save button Saxlayın CScheduleOperation All occurrences of a repeating event must have the same all-day status. Təkrarlanan tədbirlərin bütün hadisələri gün boyu eyni statusa malik olmalıdır. Do you want to change all occurrences? Bütün hadisələrə dəyişmək istəyrisiniz? Cancel button İmtina Change All Hamısını dəyişmək You are changing the repeating rule of this event. Siz bu tədbirin təkrarlanma qaydasını dəyişirsiniz. You are deleting an event. Siz tədbiri silirsiniz. Are you sure you want to delete this event? Bu tədbiri silmək istədiyinizə əminsiniz? Delete button Silmək Do you want to delete all occurrences of this event, or only the selected occurrence? Siz bu tədbirin bütün hadisələrini, yoxsa yalnız seçilmiş hadisəsini silmək istəyirsiniz? Delete All Hamısını silin Delete Only This Event Yalnız bu tədbiri silin Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Siz bu tədbirin bütün gələcək hadisələrini, yoxsa yalnız seçilmiş hadisəsini silmək istəyirsiniz? Delete All Future Events Bütün gələcək tədbirləri silin You are changing a repeating event. Siz təkrarlanan tədbiri dəyişirsiniz. Do you want to change only this occurrence of the event, or all occurrences? Siz bu tədbirin yalnız bu hadisəsini, yoxsa bütün hadisələrini silmək istəyirsiniz? All Hamısını Only This Event Yalnız bu tədbiri Do you want to change only this occurrence of the event, or this and all future occurrences? Siz tədbirin yalnız bu hadisəsini yoxsa, bu və bütün gələcək hadisələrini silmək istəyirsiniz? All Future Events Bütün gələcək tədbirlər You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Siz uzun ay seşmisiniz və xatırlatma ay təqvimi qaydalarına uyğun olacaq. OK button OLDU CScheduleSearchDateItem Y İl M Ay D G CScheduleSearchItem Edit Düzəliş edin Delete Silin All Day Bütün gün CScheduleSearchView No search results Axtarış nəticəsiz oldu CScheduleView ALL DAY BÜTÜN GÜN CSettingDialog Manual Əl ilə 15 mins 15 dəqiqə 30 mins 30 dəqiqə 1 hour 1 saat 24 hours 24 saat Sync Now İndi eyniləşdirin Last sync Sonuncu eyniləşmə Monday Bazar ertəsi Sunday Bazar 12-hour clock 12 saat vaxt formatı 24-hour clock 24 saat vaxt formatı Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 dəqiqə) (%1 hour) (%1 saat) (%1 hours) (%1 saat) CTitleWidget Y İl M Ay W H D G Search events and festivals Tədbirləri və festivalları axtarın CWeekWidget Sun Baz Mon B.er Tue Ç.ax Wed Çər Thu C.ax Fri Cüm Sat Şnb CWeekWindow Week Həftə Y İl CYearScheduleView All Day Bütün gün No event Tədbir yoxdur CYearWindow Y İl CalendarWindow Calendar Təqvim Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Təqvim tarixləri göstərən və həmçinin gündəlik həyatınızdakı gələcək işlərinizi planlamaq üçün bir gündəlikdir. Calendarmainwindow Calendar Təqvim Manage İdarə edin Privacy Policy Məxfilik Siyasəti Syncing... Eyniləşdirilir... Sync successful Eyniləşdirmə uğurlu oldu Sync failed, please try later Eyniləşdirmə alınmadı, lütfən yenidən cəhd edin CenterWidget All Day Bütün gün DAccountDataBase Work İş Life Həyat Other Digər DAlarmManager Close button Bağlayın One day before start Başlamadan bir gün əvvəl Remind me tomorrow Mənə sabah xatırlat Remind me later Mənə sonra xatırlat 15 mins later 15 dəq sonra 1 hour later 1 saat sonra 4 hours later 4 saat sonra Tomorrow Sabah Schedule Reminder Xatırlatma cədvəli %1 to %2 %1 ilə %2 arası Today Bu gün DragInfoGraphicsView Edit Düzəlt Delete Sil New event Yeni tədbir New Event Yeni tədbir JobTypeListView You are deleting an event type. Siz tədbir növünü silirsiniz. All events under this type will be deleted and cannot be recovered. Bu qəbildən bütün tədbirlər silinəcəklər və bərpa oluna bilməzlər. Cancel button İmtina Delete button Silin QObject Account settings Hesab ayarları Account İstifadəçi hesabı Select items to be synced Eyniləşdiriləcək elementləri seçin Events Tədbirlər General settings Ümumi ayarlar Sync interval Eyniləşdirmə aralığı Manage calendar Təqvimi idarə edin Calendar account Təqvim hesabı Event types Tədbirin növləri General Ümumi First day of week Həftənin ilk günü Time Vaxt Return Today Return Bu gün Return Today Today Return Today Bu gün ScheduleTypeEditDlg New event type Yeni tədbir növü Edit event type Tədbir növünü dəyişin Name: Ad: Color: Rəng: Cancel button İmtina Save button Saxla The name can not only contain whitespaces Ad təkcə ara boşluqlarından ibarət ola bilməz Enter a name please Lütfən adı daxil edin Shortcut Help Kömək Delete event Tədbiri silmək Copy Kopyala Cut Kəsmək Paste Əlavə et Delete Sil Select all Hamısını seçmək SidebarCalendarWidget Y İl M Ay TimeJumpDialog Go button Keçin UserloginWidget Sign In button Hesaba giriş Sign Out button Hesabdan çıxış YearFrame Y İl today Today Today Bu gün dde-calendar-5.14.13/translations/dde-calendar-service_bo.ts000066400000000000000000001136201473346337000237170ustar00rootroot00000000000000 AccountItem Sync successful མཉམ་བགྲོད་ལེགས་གྲུབ། Network error དྲ་རྒྱ་ནོར་བ། Server exception ཞབས་ཞུ་འཕྲུལ་ཆས་རྒྱུན་འགལ། Storage full ཉར་གསོག་གང་བ། AccountManager Local account རང་སའི་རྩའི་ཁྲ། Event types ཉིན་རེའི་ལས་རིམ་རིགས་གྲས། CColorPickerWidget Color ཚོན་མདོག Cancel button འདོར་བ། Save button ཉར་གསོག་ CDayMonthView Monday གཟའ་ཟླ་བ། Tuesday གཟའ་མིག་དམར། Wednesday གཟའ་ལྷག་པ། Thursday གཟའ་ཕུར་བུ། Friday གཟའ་པ་སངས། Saturday གཟའ་སྤེན་པ། Sunday གཟའ་ཉི་མ། CDayWindow Y ལོ། M ཟླ། D ཚེས། Lunar ལུགས་རྙིང་ལོ་ཐོ། CGraphicsView New Event ལས་རིམ་གསར་པ། CMonthScheduleNumItem %1 more ད་དུང་%1ཡོད། CMonthView New event ལས་རིམ་གསར་པ། New Event ལས་རིམ་གསར་པ། CMonthWindow Y ལོ། CMyScheduleView My Event ངའི་ལས་རིམ། OK button གཏན་ཁེལ། Delete button སུབ་པ། Edit button རྩོམ་སྒྲིག CPushButton New event type གསར་སྣོན་ཉིན་རེའི་ལས་རིམ་རིགས། CScheduleDlg New Event ལས་རིམ་གསར་པ། Edit Event ལས་རིམ་རྩོམ་སྒྲིག End time must be greater than start time མཇུག་འགྲིལ་བའི་དུས་ཚོད་འགོ་འཛུགས་དུས་ཚོད་ལས་འཕྱི་བ་དགོས། OK button གཏན་ཁེལ། Never ནམ་ཡང་མིན། At time of event ལས་རིམ་འགོ་འཛུགས་དུས། 15 minutes before སྐར་མ་15སྔོན་ལ། 30 minutes before སྐར་མ་30སྔོན་ལ། 1 hour before ཆུ་ཚོད་1སྔོན་ལ། 1 day before ཉིན་1སྔོན་ལ། 2 days before ཉིན་2སྔོན་ལ། 1 week before གཟའ་འཁོར་1སྔོན་ལ། On start day (9:00 AM) ལས་རིམ་འགོ་ཚུགས་པའི་ཉིན།(9:00སྔ་དྲོའི་ཆུ་ཚོད།) time(s) ཐེངས་གྲངས།(ཐེངས) Enter a name please མིང་སྟོང་པ་ཡིན་མི་རུང་། The name can not only contain whitespaces མིང་ཚང་མ་སྟོང་པ་ཡིན་མི་རུང་བས། བཟོ་བཅོས་བྱེད་རོགས། Type: རིགས་གྲས། Description: ནང་དོན། All Day: ཉིན་གང་། Starts: འགོ་འཛུགས་དུས་ཚོད། Ends: མཇུག་སྒྲིལ་དུས་ཚོད། Remind Me: དྲན་སྐུལ། Repeat: བསྐྱར་ཟློས། End Repeat: བསྐྱར་ཟློས་མཇུག་འགྲིལ་བ། Calendar account: ལོ་ཐོའི་རྩིས་ཁྲ། Calendar account ལོ་ཐོའི་རྩིས་ཁྲ། Type རིགས་གྲས། Description ནང་དོན། All Day ཉིན་གང་། Time: དུས་ཚོད། Time ཐོ་འཇུག་པའི་དུས་ཚོད། Solar སྤྱི་ལོ། Lunar ལུགས་རྙིང་ལོ་ཐོ། Starts འགོ་འཛུགས་དུས་ཚོད། Ends མཇུག་སྒྲིལ་དུས་ཚོད། Remind Me དྲན་སྐུལ། Repeat བསྐྲར་ཟློས། Daily ཉིན་རེ། Weekdays ལས་ཀའི་ཉིན་གྲངས། Weekly བདུན་རེ། Monthly ཟླ་རེ། Yearly ལོ་རེ། End Repeat བསྐྱར་ཟློས་མཇུག་འགྲིལ་བ། After རྗེས་ལ། On ལ། Cancel button ཕྱིར་འཐེན། Save button ཉར་གསོག་ CScheduleOperation All occurrences of a repeating event must have the same all-day status. བསྐྱར་ཟློས་ཀྱི་ཉིན་རེའི་ལས་རིམ་གྱི་བསྐྱར་ཟློས་ཚང་མར་ཉིན་ཧྲིལ་པོའི་རྣམ་པ་གཅིག་མཚུངས་ཡོད་དགོས། Do you want to change all occurrences? ཁྱོད་ཀྱིས་བསྐྱར་ཟློས་ཚང་མ་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན་ནམ། Cancel button ཕྱིར་འཐེན། Change All ཚང་མ་བཟོ་བཅོས་བྱེད། You are changing the repeating rule of this event. ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་གྱི་བསྐྱར་ཟློས་ཀྱི་སྒྲིག་སྲོལ་བཟོ་བཅོས་བྱེད་བཞིན་ཡོད། You are deleting an event. ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་བསུབ་བཞིན་ཡོད། Are you sure you want to delete this event? ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདི་བསུབ་རྒྱུ་ཡིན་པ་གཏན་འཁེལ་ལམ། Delete button སུབ་པ། Do you want to delete all occurrences of this event, or only the selected occurrence? ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བསྐྱར་ཟློས་ཚང་མ་བསུབ་རྒྱུ་ཡིན་ནམ། ཡང་ན་བདམས་ཡོད་པའི་བསྐྱར་ཟློས་དག་བསུབ་རྒྱུ་ཡིན། Delete All ཚང་མ་སུབ་པ། Delete Only This Event ཉིན་རེའི་ལས་རིམ་འདི་སུབ་པ། Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བསྐྱར་ཟློས་འདི་དང་མ་འོངས་ཀྱི་བསྐྱར་ཟློས་ཚང་མ་བསུབ་རྒྱུ་ཡིན་ནམ། ཡང་ན་བདམས་ཡོད་པའི་བསྐྱར་ཟློས་དག་བསུབ་རྒྱུ་ཡིན། Delete All Future Events མ་འོངས་ཀྱི་ཉིན་རེའི་ལས་རིམ་ཚང་མ་སུབ་པ། You are changing a repeating event. ཁྱོད་ཀྱིས་བསྐྱར་ཟློས་ཀྱི་ཉིན་རེའི་ལས་རིམ་དག་བཟོ་བཅོས་བྱེད་བཞིན་ཡོད། Do you want to change only this occurrence of the event, or all occurrences? ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བསྐྱར་ཟློས་འདི་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན་ནམ། ཡང་ན་དེའི་བསྐྱར་ཟློས་ཚང་མ་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན། All ཉིན་རེའི་ལས་རིམ་ཆ་ཚང་། Only This Event ཉིན་རེའི་ལས་རིམ་འདི་ཉིད། Do you want to change only this occurrence of the event, or this and all future occurrences? ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བསྐྱར་ཟློས་འདི་དང་མ་འོངས་ཀྱི་བསྐྱར་ཟློས་ཚང་མ་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན་ནམ། ཡང་ན་བདམས་ཡོད་པའི་བསྐྱར་ཟློས་དག་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན། All Future Events མ་འོངས་ཀྱི་ཉིན་རེའི་ལས་རིམ་ཚང་མ། You have selected a leap month, and will be reminded according to the rules of the lunar calendar. ཁྱོད་ཀྱིས་བདམས་པ་དེ་ཟླ་བཤོལ་ཡིན་པས། ལུགས་རྙིང་ལོ་ཐོའི་སྒྲིག་སྲོལ་ལྟར་དྲན་སྐུལ་བྱེད་སྲིད། OK button གཏན་ཁེལ། CScheduleSearchDateItem Y ལོ། M ཟླ། D ཚེས། CScheduleSearchItem Edit རྩོམ་སྒྲིག Delete སུབ་པ། All Day ཉིན་གང་། CScheduleSearchView No search results འཚོལ་ཞིབ་བྱས་འབྲས་མེད། CScheduleView ALL DAY ཉིན་གང་། CSettingDialog Manual ལག་ཐབས། 15 mins སྐར་མ་15རེ། 30 mins སྐར་མ་30རེ། 1 hour ཆུ་ཚོད་1རེ། 24 hours ཆུ་ཚོད་24རེ། Sync Now ལམ་སེང་མཉམ་བགྲོད། Last sync ཉེ་དུས་ཀྱི་མཉམ་བགྲོད་དུས་ཚོད། Monday གཟའ་ཟླ་བ། Sunday གཟའ་ཉི་མ། 12-hour clock ཆུ་ཚོད་12ཀྱི་ལུགས། 24-hour clock ཆུ་ཚོད་24ཡི་ལུགས། Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1སྐར་མ།) (%1 hour) (%1ཆུ་ཚོད།) (%1 hours) (%1ཆུ་ཚོད།) CTitleWidget Y ལོ། M ཟླ། W གཟའ། D ཚེས། Search events and festivals ཉིན་རེའི་ལས་རིམ་དང་དུས་ཆེན་འཚོལ་ཞིབ། CWeekWidget Sun ཉི་མ། Mon ཟླ་བ། Tue མིག་དམར། Wed ལྷག་པ། Thu ཕུར་བུ། Fri པ་སངས། Sat སྤེན་པ། CWeekWindow Week གཟའ་འཁོར། Y ལོ། CYearScheduleView All Day ཉིན་གང་། No event ལས་རིམ་མེད། CYearWindow Y ལོ། CalendarWindow Calendar ལོ་ཐོ། Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ལོ་ཐོ་ནི་ཚེས་གྲངས་བལྟ་བ་དང་ལས་རིམ་དོ་དམ་བྱེད་པའི་ཡོ་བྱད་ཆུང་ཆུང་ཞིག་རེད། Calendarmainwindow Calendar ལོ་ཐོ། Manage དོ་དམ། Privacy Policy གསང་དོན་སྲིད་ཇུས། Syncing... མཉམ་བགྲོད་བྱེད་བཞིན་པ། Sync successful མཉམ་བགྲོད་ལེགས་གྲུབ། Sync failed, please try later མཉམ་བགྲོད་བྱེད་མ་ཐུབ་པས། ཏོག་ཙམ་ནས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱོས། CenterWidget All Day ཉིན་གང་། DAccountDataBase Work ལས་ཀ Life འཆོ་བ། Other གཞན་དག DAlarmManager Close button ཁ་རྒྱག One day before start ཉིན་1སྔོན་ལ་དྲན་སྐུལ་བྱེད་པ། Remind me tomorrow སང་ཉིན་དྲན་སྐུལ་བྱེད། Remind me later གཏོགས་ཙམ་ནས་དྲན་སྐུལ་བྱེད། 15 mins later སྐར་མ་15རྗེས། 1 hour later ཆུ་ཚོད་1རྗེས། 4 hours later ཆུ་ཚོད་4རྗེས། Tomorrow སང་ཉིན། Schedule Reminder ཉིན་རེའི་ལས་རིམ་དྲན་སྐུལ། %1 to %2 %1 ནས་ %2བར། Today དེ་རིང་། DragInfoGraphicsView Edit རྩོམ་སྒྲིག Delete སུབ་པ། New event ལས་རིམ་གསར་པ། New Event ལས་རིམ་གསར་པ། JobTypeListView You are deleting an event type. ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་སུབ་བཞིན་ཡོད། All events under this type will be deleted and cannot be recovered. ཉིན་རེའི་ལས་རིམ་འདིའི་འོག་གི་ཉིན་རེའི་ལས་རིམ་ཚང་མ་སུབ་ངེས་པ་མ་ཟད་སླར་གསོ་བྱ་ཐབས་མེད། Cancel button འདོར་བ། Delete button སུབ་པ། QObject Account settings རྩིས་ཐོ་སྒྲིག་འགོད། Account རྩིས་ཁྲ། Select items to be synced ཁྱེད་ཀྱི་མཉམ་བགྲོད་ཚན་པ་སྒྲིག་འགོད། Events ཉིན་རེའི་ལས་རིམ། General settings ཀུན་སྤྱོད་སྒྲིག་འགོད། Sync interval མཉམ་བགྲོད་བྱུང་ཚད། Manage calendar ལོ་ཐོ་དོ་དམ། Calendar account ལོ་ཐོའི་རྩིས་ཁྲ། Event types ཉིན་རེའི་ལས་རིམ་རིགས་གྲས། General ཀུན་སྤྱོད། First day of week གཟའ་འཁོར་གཅིག་གི་ཉིན་དང་པོ། Time ཐོ་འཇུག་པའི་དུས་ཚོད། Return Today Return དེ་རིང་། Return Today Today Return Today དེ་རིང་། ScheduleTypeEditDlg New event type གསར་སྣོན་ཉིན་རེའི་ལས་རིམ་རིགས། Edit event type ཉིན་རེའི་ལས་རིམ་རིགས་གྲས་རྩོམ་སྒྲིག Name: མིང་། Color: ཚོན་མདོག Cancel button འདོར་བ། Save button ཉར་གསོག་ The name can not only contain whitespaces མིང་ཚང་མ་སྟོང་པ་ཡིན་མི་རུང་བས། བཟོ་བཅོས་བྱེད་རོགས། Enter a name please མིང་སྟོང་པ་ཡིན་མི་རུང་། Shortcut Help རོགས་རམ། Delete event ལས་རིམ་སུབ་པ། Copy མཁོ་ཕབ། Cut དྲས་གཏུབ། Paste སྦྱར་བ། Delete སུབ་པ། Select all ཡོངས་འདེམས། SidebarCalendarWidget Y ལོ། M ཟླ། TimeJumpDialog Go button མཆོང་སྒྱུར། UserloginWidget Sign In button ཐོ་འཇུག Sign Out button ཐོ་འབུད། YearFrame Y ལོ། today Today Today དེ་རིང་། dde-calendar-5.14.13/translations/dde-calendar-service_ca.ts000066400000000000000000000747231473346337000237140ustar00rootroot00000000000000 AccountItem Sync successful Sincronització correcta Network error Error de xarxa Server exception Excepció del servidor Storage full Emmagatzematge ple AccountManager Local account Compte local Event types Tipus d'esdeveniment CColorPickerWidget Color Color Cancel button Cancel·la Save button Desa-ho CDayMonthView Monday Dilluns Tuesday Dimarts Wednesday Dimecres Thursday Dijous Friday Divendres Saturday Dissabte Sunday Diumenge CDayWindow Y any M mes D D Lunar Lunar CGraphicsView New Event Esdeveniment nou CMonthScheduleNumItem %1 more %1 més CMonthView New event Nou esdeveniment New Event Esdeveniment nou CMonthWindow Y any CMyScheduleView My Event El meu esdeveniment OK button D'acord Delete button Elimina Edit button Edita CPushButton New event type Tipus d'esdeveniment nou CScheduleDlg New Event Esdeveniment nou Edit Event Edita l'esdeveniment End time must be greater than start time L'hora d'acabament ha de ser superior a l'hora d'inici. OK button D'acord Never Mai At time of event Al moment de l'esdeveniment 15 minutes before 15 minuts abans 30 minutes before 30 minuts abans 1 hour before 1 hora abans 1 day before 1 dia abans 2 days before 2 dies abans 1 week before 1 setmana abans On start day (9:00 AM) El dia d'inici (9:00) time(s) cop/s Enter a name please Escriviu un nom, si us plau. The name can not only contain whitespaces El nom no només pot contenir espais en blanc. Type: Tipus: Description: Descripció: All Day: Tot el dia: Starts: Comença: Ends: Acaba: Remind Me: Recorda-m'ho: Repeat: Repeteix: End Repeat: Acaba la repetició: Calendar account: Compte del calendari: Calendar account Compte del calendari Type Tipus Description Descripció All Day Tot el dia Time: Hora: Time Hora Solar solar Lunar lunar Starts Comença Ends Acaba Remind Me Recorda-m'ho Repeat Repeteix Daily Diàriament Weekdays Els dies feiners Weekly Setmanalment Monthly Mensualment Yearly Anualment End Repeat Acaba la repetició After Després On Activat Cancel button Cancel·la Save button Desa CScheduleOperation All occurrences of a repeating event must have the same all-day status. Totes les ocurrències d'un esdeveniment repetitiu han de tenir el mateix estat de tot el dia. Do you want to change all occurrences? Voleu canviar-ne totes les ocurrències? Cancel button Cancel·la Change All Canvia-les totes You are changing the repeating rule of this event. Canvieu la regla de repetició d'aquest esdeveniment. You are deleting an event. Elimineu un esdeveniment. Are you sure you want to delete this event? Segur que voleu eliminar aquest esdeveniment? Delete button Elimina Do you want to delete all occurrences of this event, or only the selected occurrence? Voleu eliminar totes les ocurrències d'aquest esdeveniment o només la seleccionada? Delete All Elimina-les totes Delete Only This Event Elimina només aquest esdeveniment Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Voleu eliminar aquesta i totes les ocurrències futures d'aquest esdeveniment o només la seleccionada? Delete All Future Events Elimina tots els esdeveniments futurs You are changing a repeating event. Canvieu un esdeveniment repetitiu. Do you want to change only this occurrence of the event, or all occurrences? Voleu canviar només aquesta ocurrència de l'esdeveniment o totes? All Totes Only This Event Només aquest esdeveniment Do you want to change only this occurrence of the event, or this and all future occurrences? Voleu canviar només aquesta ocurrència de l'esdeveniment, o aquesta i totes les ocurrències futures? All Future Events Tots els esdeveniments futurs You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Heu seleccionat un mes de traspàs i se us recordarà segons les regles del calendari lunar. OK button D'acord CScheduleSearchDateItem Y A M M D D CScheduleSearchItem Edit Edita Delete Elimina All Day Tot el dia CScheduleSearchView No search results No hi ha resultats de la cerca. CScheduleView ALL DAY TOT EL DIA CSettingDialog Manual Manual 15 mins 15 min 30 mins 30 min 1 hour 1 hora 24 hours 24 hores Sync Now Sincronitza ara Last sync Darrera sincronització Monday Dilluns Sunday Diumenge 12-hour clock Rellotge de 12 hores 24-hour clock Rellotge de 24 hores Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 hora) (%1 hours) (%1 hores) CTitleWidget Y any M mes W setmana D dia Search events and festivals Cerca esdeveniments i festivals CWeekWidget Sun dg. Mon dl. Tue dt. Wed dc. Thu dj. Fri dv. Sat ds. CWeekWindow Week Setmana Y any CYearScheduleView All Day Tot el dia No event Cap esdeveniment CYearWindow Y any CalendarWindow Calendar Calendari Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. El Calendari és una eina per veure dates i també un planificador diari intel·ligent per programar totes les coses de la vida. Calendarmainwindow Calendar Calendari Manage Gestiona Privacy Policy Política de privadesa Syncing... Se sincronitza... Sync successful Sincronització correcta Sync failed, please try later La sincronització ha fallat. Si us plau, proveu-ho més tard. CenterWidget All Day Tot el dia DAccountDataBase Work Feina Life Vida Other Altres DAlarmManager Close button Tanca One day before start Un dia abans de l'inici Remind me tomorrow Recorda-m'ho demà. Remind me later Recorda-m'ho més tard. 15 mins later 15 minuts més tard 1 hour later 1 hora més tard 4 hours later 4 hores més tard Tomorrow Demà Schedule Reminder Programació del recrdatori %1 to %2 de %1 a %2 Today Avui DragInfoGraphicsView Edit Edita Delete Elimina New event Esdeveniment nou New Event Esdeveniment nou JobTypeListView You are deleting an event type. Elimineu un tipus d'esdeveniment. All events under this type will be deleted and cannot be recovered. Tots els esdeveniments d'aquest tipus s'eliminaran i no es podran recuperar. Cancel button Cancel·la Delete button Elimina QObject Account settings Paràmetres del compte Account Compte Select items to be synced Seleccioneu els elements per sincronitzar Events Esdeveniments General settings Configuració general Sync interval Interval de sincronització Manage calendar Gestiona el calendari Calendar account Compte del calendari Event types Tipus d'esdeveniment General General First day of week Primer dia de la setmana Time Hora Return Today Return Avui Return Today Today Return Today Avui ScheduleTypeEditDlg New event type Tipus d'esdeveniment nou Edit event type Edita el tipus d'esdeveniment Name: Nom: Color: Color: Cancel button Cancel·la Save button Desa-ho The name can not only contain whitespaces El nom no només pot contenir espais en blanc. Enter a name please Escriviu un nom, si us plau. Shortcut Help Ajuda Delete event Suprimeix l'esdeveniment Copy Copia Cut Retalla Paste Enganxa Delete Elimina Select all Selecciona-ho tot SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ves-hi UserloginWidget Sign In button Inicia la sessió Sign Out button Surt de la sessió YearFrame Y any today Today Today Avui dde-calendar-5.14.13/translations/dde-calendar-service_cs.ts000066400000000000000000000740761473346337000237370ustar00rootroot00000000000000 AccountItem Sync successful Synchronizace byla úspěšná Network error Síťová chyba Server exception Výjimka na serveru Storage full Úložiště je plné AccountManager Local account Místní účet Event types Typy událostí CColorPickerWidget Color Barva Cancel button Zrušit Save button Uložit CDayMonthView Monday pondělí Tuesday úterý Wednesday středa Thursday čtvrtek Friday pátek Saturday sobota Sunday neděle CDayWindow Y R M M D D Lunar Měsíční CGraphicsView New Event Nová událost CMonthScheduleNumItem %1 more %1 další CMonthView New event Nová událost New Event Nová událost CMonthWindow Y R CMyScheduleView My Event Moje událost OK button OK Delete button Smazat Edit button Upravit CPushButton New event type Nový typ události CScheduleDlg New Event Nová událost Edit Event Upravit událost End time must be greater than start time Je třeba, aby okamžik konce následoval až po okamžiku začátku OK button OK Never Nikdy At time of event V okamžiku události 15 minutes before 15 minut před 30 minutes before 30 minut před 1 hour before 1 hodinu před 1 day before 1 den před 2 days before 2 dny před 1 week before 1 týden před On start day (9:00 AM) V den začátku (9:00 dop.) time(s) krát Enter a name please Zadejte, prosím, název The name can not only contain whitespaces Název nemůže obsahovat pouze mezery Type: Typ: Description: Popis: All Day: Celý den: Starts: Začíná: Ends: Končí: Remind Me: Připomenout: Repeat: Opakovat: End Repeat: Ukončit opakování: Calendar account: Kalendářový účet: Calendar account Kalendářový účet Type Typ Description Popis All Day Celý den Time: Čas: Time Čas Solar Sluneční Lunar Měsíční Starts Začíná Ends Končí Remind Me Připomenout Repeat Opakování Daily Denně Weekdays Všední dny Weekly Týdně Monthly Měsíčně Yearly Ročně End Repeat Ukončit opakování After Po On Zapnuto Cancel button Zrušit Save button Uložit CScheduleOperation All occurrences of a repeating event must have the same all-day status. Je třeba, aby všechny výskyty opakující se události měly stejný stav „celý den“. Do you want to change all occurrences? Chcete změnit všechny výskyty? Cancel button Zrušit Change All Změnit vše You are changing the repeating rule of this event. Měníte pravidlo opakování této události. You are deleting an event. Mažete událost. Are you sure you want to delete this event? Opravdu chcete tuto událost smazat? Delete button Smazat Do you want to delete all occurrences of this event, or only the selected occurrence? Chcete smazat všechny výskyty této události, nebo jen vybraný výskyt? Delete All Smazat vše Delete Only This Event Smazat jen tuto událost Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Chcete smazat tento a všechny budoucí výskyty této události, nebo jen ten vybraný? Delete All Future Events Smazat všechny budoucí události You are changing a repeating event. Měníte pravidlo opakující se události. Do you want to change only this occurrence of the event, or all occurrences? Chcete změnit jen tento výskyt události, nebo všechny výskyty? All Vše Only This Event Jen tato událost Do you want to change only this occurrence of the event, or this and all future occurrences? Chcete změnit jen tento výskyt události, nebo tento a všechny budoucí výskyty? All Future Events Všechny budoucí události You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Vybrali jste přestupný měsíc, a bude vám připomenut podle pravidel měsíčního kalendáře. OK button OK CScheduleSearchDateItem Y R M M D D CScheduleSearchItem Edit Upravit Delete Smazat All Day Celý den CScheduleSearchView No search results Nic nenalezeno CScheduleView ALL DAY CELÝ DEN CSettingDialog Manual Příručka 15 mins 15 minut 30 mins 30 minut 1 hour 1 hodina 24 hours 24 hodin Sync Now Seřídit nyní Last sync Naposledy synchronizováno Monday pondělí Sunday neděle 12-hour clock 12 hodinové hodiny 24-hour clock 24 hodinové hodiny Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 min.) (%1 hour) (%1 hod) (%1 hours) (%1 hod.) CTitleWidget Y R M M W T D D Search events and festivals Vyhledávání událostí a festivalů CWeekWidget Sun Ne Mon Po Tue Út Wed St Thu Čt Fri Sat So CWeekWindow Week Týden Y R CYearScheduleView All Day Celý den No event Žádná událost CYearWindow Y R CalendarWindow Calendar Kalendář Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendář slouží k zobrazování datumů a také jako chytrý každodenní plánovač všeho v životě. Calendarmainwindow Calendar Kalendář Manage Spravovat Privacy Policy Zásady ochrany soukromí Syncing... Synchronizace… Sync successful Synchronizace úspěšná Sync failed, please try later Synchronizace se nezdařila, zkuste to, prosím, později CenterWidget All Day Celý den DAccountDataBase Work Práce Life Soukromé Other Ostatní DAlarmManager Close button Zavřít One day before start Jeden den před začátkem Remind me tomorrow Připomenout zítra Remind me later Připomenout později 15 mins later o 15 minut později 1 hour later o 1 hodinu později 4 hours later o 4 hodiny později Tomorrow Zítra Schedule Reminder Připomínání naplánovaného %1 to %2 %1 až %2 Today Dnes DragInfoGraphicsView Edit Upravit Delete Smazat New event Nová událost New Event Nová událost JobTypeListView You are deleting an event type. Mažete typ události. All events under this type will be deleted and cannot be recovered. Všechny události tohoto typu budou smazány a nelze je obnovit. Cancel button Zrušit Delete button Smazat QObject Account settings Nastavení účtu Account Účet Select items to be synced Vyberte položky, které mají být synchronizovány Events Události General settings Obecná nastavení Sync interval Seřizovací interval Manage calendar Spravovat kalendář Calendar account Kalendářový účet Event types Typy událostí General Obecné First day of week První den týdne Time Čas Return Today Return Dnes Return Today Today Return Today Dnes ScheduleTypeEditDlg New event type Nový typ události Edit event type Upravit typ události Name: Název: Color: Barva: Cancel button Zrušit Save button Uložit The name can not only contain whitespaces Název nemůže obsahovat pouze mezery Enter a name please Zadejte, prosím, název Shortcut Help Nápověda Delete event Smazat událost Copy Kopírovat Cut Vyjmout Paste Vložit Delete Smazat Select all Vybrat vše SidebarCalendarWidget Y R M M TimeJumpDialog Go button Jde se UserloginWidget Sign In button Přihlásit se Sign Out button Odhlásit se YearFrame Y R today Today Today Dnes dde-calendar-5.14.13/translations/dde-calendar-service_da.ts000066400000000000000000000706641473346337000237150ustar00rootroot00000000000000 AccountItem Sync successful Network error Netværksfejl Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Farve Cancel button Afbryd Save button Gem CDayMonthView Monday Mandag Tuesday Tirsdag Wednesday Onsdag Thursday Torsdag Friday Fredag Saturday Lørdag Sunday Søndag CDayWindow Y Å M M D D Lunar CGraphicsView New Event Ny begivenhed CMonthScheduleNumItem %1 more %1 mere CMonthView New event Ny begivenhed New Event Ny begivenhed CMonthWindow Y Å CMyScheduleView My Event Min begivenhed OK button OK Delete button Slet Edit button Rediger CPushButton New event type CScheduleDlg New Event Ny begivenhed Edit Event Rediger begivenhed End time must be greater than start time Sluttidspunktet skal være større end starttidspunktet OK button OK Never Aldrig At time of event På tidspunktet for begivenheden 15 minutes before 15 minutter før 30 minutes before 30 minutter før 1 hour before 1 time før 1 day before 1 dag før 2 days before 2 dage før 1 week before 1 uge før On start day (9:00 AM) På starten af dagen (9:00) time(s) gang(e) Enter a name please The name can not only contain whitespaces Type: Type: Description: Beskrivelse: All Day: Hele dagen: Starts: Starter: Ends: Slutter: Remind Me: Påmind mig: Repeat: Gentag: End Repeat: Slut gentag: Calendar account: Calendar account Type Type Description Beskrivelse All Day Hele dagen Time: Time Klokkeslæt Solar Lunar Starts Ends Remind Me Repeat Gentag Daily Dagligt Weekdays Ugedage Weekly Ugentligt Monthly Månedligt Yearly Årligt End Repeat After Efter On Til Cancel button Annuller Save button Gem CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle forekomster af en begivenhed som gentages skal have den samme hele dagen-status. Do you want to change all occurrences? Vil du ændre alle forekomster? Cancel button Annuller Change All Ændr alle You are changing the repeating rule of this event. Du er ved at ændre gentagelsesreglen for begivenheden. You are deleting an event. Du er ved at slette en begivenhed. Are you sure you want to delete this event? Er du sikker på, at du vil slette begivenheden? Delete button Slet Do you want to delete all occurrences of this event, or only the selected occurrence? Vil du slette alle forekomster af begivenheden eller kun den valgte forekomst? Delete All Slet alle Delete Only This Event Slet kun denne begivenhed Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Vil du slette denne og alle fremtidige forekomster af begivenheden eller kun den valgte forekomst? Delete All Future Events Slet alle fremtidige begivenheder You are changing a repeating event. Du er ved at ændre en begivenhed som gentages. Do you want to change only this occurrence of the event, or all occurrences? Vil du kun ændre denne forekomst for begivenheden, eller alle forekomster? All Alle Only This Event Kun denne begivenhed Do you want to change only this occurrence of the event, or this and all future occurrences? Vil du kun ændre denne forekomst for begivenheden, eller denne og alle fremtidige forekomster? All Future Events Alle fremtidige begivenheder You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Å M M D D CScheduleSearchItem Edit Rediger Delete Slet All Day Hele dagen CScheduleSearchView No search results Ingen søgeresultater CScheduleView ALL DAY HELE DAGEN CSettingDialog Manual Manuel 15 mins 30 mins 1 hour 1 time 24 hours Sync Now Last sync Monday Mandag Sunday Søndag 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Å M M W W D D Search events and festivals CWeekWidget Sun Søn Mon Man Tue Tir Wed Ons Thu Tor Fri Fre Sat Lør CWeekWindow Week Uge Y Å CYearScheduleView All Day Hele dagen No event Ingen begivenhed CYearWindow Y Å CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender er et værktøj til at vise datoer, og er også en smart dagsplanlægger til alt i dit liv. Calendarmainwindow Calendar Kalender Manage Privacy Policy Privatlivspolitik Syncing... Synkroniserer... Sync successful Sync failed, please try later CenterWidget All Day Hele dagen DAccountDataBase Work Arbejde Life Leve Other Andre DAlarmManager Close button Luk One day before start En dag før start Remind me tomorrow Påmind mig i morgen Remind me later Påmind mig senere 15 mins later 1 hour later 4 hours later Tomorrow I morgen Schedule Reminder Planlæg påmindelse %1 to %2 Today I dag DragInfoGraphicsView Edit Rediger Delete Slet New event Ny begivenhed New Event Ny begivenhed JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Afbryd Delete button Slet QObject Account settings Account Konto Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General Generelt First day of week Time Klokkeslæt Return Today Return I dag Return Today Today Return Today I dag ScheduleTypeEditDlg New event type Edit event type Name: Navn: Color: Cancel button Afbryd Save button Gem The name can not only contain whitespaces Enter a name please Shortcut Help Hjælp Delete event Slet begivenhed Copy Kopiér Cut Klip Paste Indsæt Delete Slet Select all Vælg alle SidebarCalendarWidget Y Å M M TimeJumpDialog Go button UserloginWidget Sign In button Log ind Sign Out button Log ud YearFrame Y Å today Today Today I dag dde-calendar-5.14.13/translations/dde-calendar-service_de.ts000066400000000000000000000741771473346337000237240ustar00rootroot00000000000000 AccountItem Sync successful Synchronisierung erfolgreich Network error Netzwerkfehler Server exception Serverausnahme Storage full Speicher voll AccountManager Local account Lokales Konto Event types Termintypen CColorPickerWidget Color Farbe Cancel button Abbrechen Save button Speichern CDayMonthView Monday Montag Tuesday Dienstag Wednesday Mittwoch Thursday Donnerstag Friday Freitag Saturday Samstag Sunday Sonntag CDayWindow Y J M M D T Lunar Lunar CGraphicsView New Event Neuer Termin CMonthScheduleNumItem %1 more %1 weitere CMonthView New event Neuer Termin New Event Neuer Termin CMonthWindow Y J CMyScheduleView My Event Mein Termin OK button OK Delete button Löschen Edit button Bearbeiten CPushButton New event type Neuer Termintyp CScheduleDlg New Event Neuer Termin Edit Event Termin bearbeiten End time must be greater than start time Endzeit muss größer als Startzeit sein OK button OK Never Nie At time of event Zum Zeitpunkt des Termins 15 minutes before 15 Minuten vorher 30 minutes before 30 Minuten vorher 1 hour before 1 Stunde vorher 1 day before 1 Tag vorher 2 days before 2 Tage vorher 1 week before 1 Woche vorher On start day (9:00 AM) Am Starttag (9:00 Uhr) time(s) mal Enter a name please Bitte einen Namen eingeben The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Type: Typ: Description: Beschreibung: All Day: Ganztägig: Starts: Beginnt: Ends: Endet: Remind Me: Erinnere mich: Repeat: Wiederholung: End Repeat: Wiederholung beenden: Calendar account: Kalenderkonto: Calendar account Kalenderkonto Type Typ Description Beschreibung All Day Ganztägig Time: Zeit: Time Zeit Solar Solar Lunar Lunar Starts Beginnt Ends Endet Remind Me Erinnere mich Repeat Wiederholung Daily Täglich Weekdays Wochentage Weekly Wöchentlich Monthly Monatlich Yearly Jährlich End Repeat Wiederholung beenden After Nach On Am Cancel button Abbrechen Save button Speichern CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle Vorkommen eines sich wiederholenden Termins müssen den gleichen Ganztagsstatus haben. Do you want to change all occurrences? Möchten Sie alle Vorkommen ändern? Cancel button Abbrechen Change All Alle ändern You are changing the repeating rule of this event. Sie ändern die Wiederholungsregel dieses Termins. You are deleting an event. Sie löschen einen Termin. Are you sure you want to delete this event? Sind Sie sicher, dass Sie diesen Termin löschen möchten? Delete button Löschen Do you want to delete all occurrences of this event, or only the selected occurrence? Möchten Sie alle Vorkommen dieses Termins löschen oder nur das ausgewählte Vorkommen? Delete All Alle löschen Delete Only This Event Nur diesen Termin löschen Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Möchten Sie diesen und alle zukünftigen Vorkommen dieses Termins löschen, oder nur das ausgewählte Vorkommen? Delete All Future Events Alle zukünftigen Termine löschen You are changing a repeating event. Sie ändern einen sich wiederholenden Termin. Do you want to change only this occurrence of the event, or all occurrences? Möchten Sie nur dieses Vorkommen des Termins oder alle Vorkommnisse ändern? All Alle Only This Event Nur diesen Termin Do you want to change only this occurrence of the event, or this and all future occurrences? Möchten Sie nur dieses Ereignis oder dieses und alle zukünftigen Ereignisse ändern? All Future Events Alle zukünftigen Termine You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Sie haben einen Schaltmonat ausgewählt und werden nach den Regeln des Mondkalenders daran erinnert. OK button OK CScheduleSearchDateItem Y J M M D T CScheduleSearchItem Edit Bearbeiten Delete Löschen All Day Ganztägig CScheduleSearchView No search results Keine Suchergebnisse CScheduleView ALL DAY GANZTÄGIG CSettingDialog Manual Manuell 15 mins 15 Minuten 30 mins 30 Minuten 1 hour 1 Stunde 24 hours 24 Stunden Sync Now Jetzt synchronisieren Last sync Letzte Synchronisierung Monday Montag Sunday Sonntag 12-hour clock 12-Stunden-Uhr 24-hour clock 24-Stunden-Uhr Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 Minuten) (%1 hour) (%1 Stunde) (%1 hours) (%1 Stunden) CTitleWidget Y J M M W W D T Search events and festivals Termine und Veranstaltungen suchen CWeekWidget Sun So Mon Mo Tue Di Wed Mi Thu Do Fri Fr Sat Sa CWeekWindow Week Woche Y J CYearScheduleView All Day Ganztägig No event Kein Termin CYearWindow Y J CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Der Kalender ist ein Werkzeug zum Anzeigen von Terminen und auch ein intelligenter Tagesplaner, um alle Dinge im Leben zu planen. Calendarmainwindow Calendar Kalender Manage Verwalten Privacy Policy Datenschutzerklärung Syncing... Wird synchronisiert ... Sync successful Synchronisierung erfolgreich Sync failed, please try later Synchronisierung fehlgeschlagen, bitte später erneut versuchen CenterWidget All Day Ganztägig DAccountDataBase Work Arbeit Life Leben Other Andere DAlarmManager Close button Schließen One day before start Einen Tag vor Beginn Remind me tomorrow Erinnere mich morgen Remind me later Erinnere mich später 15 mins later 15 Min. später 1 hour later 1 Stunde später 4 hours later 4 Stunden später Tomorrow Morgen Schedule Reminder Terminerinnerung %1 to %2 %1 bis %2 Today Heute DragInfoGraphicsView Edit Bearbeiten Delete Löschen New event Neuer Termin New Event Neuer Termin JobTypeListView You are deleting an event type. Sie löschen einen Termintyp. All events under this type will be deleted and cannot be recovered. Alle Termine dieses Typs werden gelöscht und können nicht wiederhergestellt werden. Cancel button Abbrechen Delete button Löschen QObject Account settings Kontoeinstellungen Account Konto Select items to be synced Zu synchronisierende Elemente auswählen Events Termine General settings Allgemeine Einstellungen Sync interval Synchronisierungsintervall Manage calendar Kalender verwalten Calendar account Kalenderkonto Event types Termintypen General Allgemein First day of week Erster Tag der Woche Time Zeit Return Today Return Heute Return Today Today Return Today Heute ScheduleTypeEditDlg New event type Neuer Termintyp Edit event type Termintyp bearbeiten Name: Name: Color: Farbe: Cancel button Abbrechen Save button Speichern The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Enter a name please Bitte einen Namen eingeben Shortcut Help Hilfe Delete event Termin löschen Copy Kopieren Cut Ausschneiden Paste Einfügen Delete Löschen Select all Alles auswählen SidebarCalendarWidget Y J M M TimeJumpDialog Go button Los UserloginWidget Sign In button Anmelden Sign Out button Abmelden YearFrame Y J today Today Today Heute dde-calendar-5.14.13/translations/dde-calendar-service_de_DE.ts000066400000000000000000000742211473346337000242620ustar00rootroot00000000000000 AccountItem Sync successful Synchronisierung erfolgreich Network error Netzwerkfehler Server exception Server-Exception-Fehler Storage full Speicher voll AccountManager Local account Lokales Konto Event types Ereignistypen CColorPickerWidget Color Farbe Cancel button Abbrechen Save button Speichern CDayMonthView Monday Montag Tuesday Dienstag Wednesday Mittwoch Thursday Donnerstag Friday Freitag Saturday Samstag Sunday Sonntag CDayWindow Y J M M D T Lunar Lunar CGraphicsView New Event Neues Ereignis CMonthScheduleNumItem %1 more %1 weitere CMonthView New event Neues Ereignis New Event Neues Ereignis CMonthWindow Y J CMyScheduleView My Event Mein Ereignis OK button O.K. Delete button Löschen Edit button Ändern CPushButton New event type Neuer Ereignis-Typ CScheduleDlg New Event Neues Ereignis Edit Event Ereignis ändern End time must be greater than start time Endzeitpunkt muss hinter dem Beginn liegen OK button O.K. Never Niemals At time of event Zum Ereigniszeitpunkt 15 minutes before 15 Minuten vorher 30 minutes before 30 Minuten vorher 1 hour before 1 Stunde davor 1 day before 1 Tag vorher 2 days before 2 Tage vorher 1 week before 1 Woche vorher On start day (9:00 AM) Am Anfang des Starttages (9:00Uhr) time(s) Zeit(en) Enter a name please Geben Sie bitte einen Namen ein The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Type: Art: Description: Beschreibung: All Day: Ganzer Tag Starts: Beginnt: Ends: Endet: Remind Me: Erinnere mich: Repeat: Wiederholen End Repeat: Wiederholen bis: Calendar account: Kalender-Konto Calendar account Kalender-Konto Type Art: Description Beschreibung All Day Ganzer Tag Time: Uhrzeit: Time Zeit Solar Solar Lunar Lunar Starts Beginnt Ends Endet Remind Me Erinnere mich Repeat Wiederholen Daily Täglich Weekdays Wochentäglich Weekly Wöchentlich Monthly Monatlich Yearly Jährlich End Repeat Wiederholungsende After Nach On m Cancel button Abbrechen Save button Speichern CScheduleOperation All occurrences of a repeating event must have the same all-day status. Wiederholungsereignisse müssen alle den selben Ganzer-Tag-Status haben. Do you want to change all occurrences? Möchen Sie den Status bei allen Wiederholungen ändern? Cancel button Abbrechen Change All Alle Ändern You are changing the repeating rule of this event. Sie ändern die Wiederhol-Regel dieses Ereignisses. You are deleting an event. Sie löschen ein Ereignis Are you sure you want to delete this event? Sind Sie sicher, dass Sie dieses Ereignis löschen möchten? Delete button Löschen Do you want to delete all occurrences of this event, or only the selected occurrence? Möchten Sie alle oder nur das ausgewählte Ereignis löschen? Delete All Alle löschen Delete Only This Event Nur dieses Ereignis löschen Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Möchten Sie dieses Ereignis und auch die zukünftigen oder nur das ausgewählte löschen? Delete All Future Events Alle zukünftigen Ereignisse löschen You are changing a repeating event. Sie ändern ein Wiederholungsereignis Do you want to change only this occurrence of the event, or all occurrences? Möchten Sie nur dieses eine Ereignis oder gleich alle löschen? All Alle Only This Event Nur dieses eine Ereignis Do you want to change only this occurrence of the event, or this and all future occurrences? Möchten Sie nur dieses eine Ereignis oder dieses sowie alle zukünftigen löschen? All Future Events Alle zukünftigen Ereignisse You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Sie haben einen Schaltmonat ausgewählt und werden nach den Regeln des Lunar-Kalenders erinnert. OK button O.K. CScheduleSearchDateItem Y J M M D T CScheduleSearchItem Edit Ändern Delete Löschen All Day Ganzer Tag CScheduleSearchView No search results Keine Suchergebnisse CScheduleView ALL DAY Ganzer Tag CSettingDialog Manual Selbsteingabe 15 mins 15 Minuten 30 mins 30 Minuten 1 hour 1 Stunde 24 hours 24 Stunden Sync Now Jetzt synchronisieren Last sync Letzte Synchronisierung Monday Montag Sunday Sonntag 12-hour clock 12-Stunden-Zeit 24-hour clock 24-Stunden-Zeit Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 Min) (%1 hour) (%1 Stunde) (%1 hours) (%1 Stunden) CTitleWidget Y J M M W W D T Search events and festivals In Ereignissen und Feiertagen suchen CWeekWidget Sun Son Mon on Tue Die Wed Mit Thu Don Fri Fre Sat Sam CWeekWindow Week Woche Y J CYearScheduleView All Day Ganzer Tag No event Kein Ereignis CYearWindow Y J CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender ist ein Werkzeug um Termine nachzuschauen, aber auch um schlau die all die Dinge des Lebens zu organisieren. Calendarmainwindow Calendar Kalender Manage Organisieren Privacy Policy Datenschutzerklärung Syncing... Synchronisieren… Sync successful Synchronisierung erfolgreich Sync failed, please try later Synchronisierung fehlgeschlagen, bitte nochmals versuchen CenterWidget All Day Ganzer Tag DAccountDataBase Work Arbeit Life Privatleben Other Anderes DAlarmManager Close button Schließen One day before start Ein Tag vor Beginn Remind me tomorrow Morgen daran erinnern Remind me later Später erinnern 15 mins later 15 Minuten danach 1 hour later 1 Stunde danach 4 hours later 4 Stunden danach Tomorrow Morgen Schedule Reminder Terminerinnerung %1 to %2 %1 zu %2 Today Heute DragInfoGraphicsView Edit Ändern Delete Löschen New event Neues Ereignis New Event Neues Ereignis JobTypeListView You are deleting an event type. Sie löschen einen Ereignis-Typ All events under this type will be deleted and cannot be recovered. Alle Ereignisse dieses Typs werden gelöscht und können nicht wiederhergestellt werden. Cancel button Abbrechen Delete button Löschen QObject Account settings Kontoeinstellungen Account Konto Select items to be synced Das zu synchronisierende Ereignis auswählen Events Ereignisse General settings Allgemeine Einstellungen Sync interval Synchronisierungsintervall Manage calendar Kalender einrichten Calendar account Kalender-Konto Event types Ereignistypen General Allgemein First day of week Erster Tag der Woche Time Zeit Return Today Return Heute Return Today Today Return Today Heute ScheduleTypeEditDlg New event type Neuer Ereignis-Typ Edit event type Ereignis-Typ ändern Name: Name: Color: Farbe: Cancel button Abbrechen Save button Speichern The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Enter a name please Geben Sie bitte einen Namen ein Shortcut Help Hilfe Delete event Ereignis löschen Copy Kopieren Cut Ausschneiden Paste Einfügen Delete Löschen Select all Alle auswählen SidebarCalendarWidget Y J M M TimeJumpDialog Go button Los geht's UserloginWidget Sign In button Anmelden Sign Out button Abmelden YearFrame Y J today Today Today Heute dde-calendar-5.14.13/translations/dde-calendar-service_el.ts000066400000000000000000000775311473346337000237310ustar00rootroot00000000000000 AccountItem Sync successful Επιτυχής συγχρονισμός Network error Σφάλμα δικτύου Server exception Storage full AccountManager Local account Τοπικός λογαριασμός Event types CColorPickerWidget Color Χρώμα Cancel button Ακύρωση Save button Αποθήκευση CDayMonthView Monday Δευτέρα Tuesday Τρίτη Wednesday Τετάρτη Thursday Πέμπτη Friday Παρασκευή Saturday Σάββατο Sunday Κυριακή CDayWindow Y Ε M Μ D Η Lunar CGraphicsView New Event Νέο Συμβάν CMonthScheduleNumItem %1 more %1 περισσότερο-α CMonthView New event Νέο συμβάν New Event Νέο Συμβάν CMonthWindow Y Y CMyScheduleView My Event Το συμβάν μου OK button ΟΚ Delete button Διαγραφή Edit button Επεξεργασία CPushButton New event type Νέος τύπος συμβάντος CScheduleDlg New Event Νέο συμβάν Edit Event Επεξεργασία συμβάντος End time must be greater than start time Ο χρόνος λήξης πρέπει να είναι μεγαλύτερος του χρόνου έναρξης OK button OK Never Ποτέ At time of event Την ώρα του συμβάντος 15 minutes before 15 λεπτά πριν 30 minutes before 30 λεπτά πριν 1 hour before 1 ώρα πριν 1 day before 1 ημέρα πριν 2 days before 2 ημέρες πριν 1 week before 1 εβδομάδα πριν On start day (9:00 AM) Στην έναρξη της ημέρας (9:00 ΠΜ) time(s) φορά(ές) Enter a name please The name can not only contain whitespaces Το όνομα δεν μπορρεί να περιέχει μόνο κενούς χαρακτήρες Type: Τύπος: Description: Περιγραφή: All Day: Ολοήμερο: Starts: Αρχίζει: Ends: Τελειώνει: Remind Me: Υπενθύμισέ μου: Repeat: Επανάληψη: End Repeat: Τέλος Επανάληψης: Calendar account: Λογαριασμός ημερολογίου: Calendar account Λογαριασμός ημερολογίου Type Τύπος Description Περιγραφή All Day Ολοήμερο Time: Ώρα: Time Ώρα Solar Lunar Starts Αρχίζει Ends Τελειώνει Remind Me Υπενθύμισέ μου Repeat Επανάληψη Daily Ημερήσιο Weekdays Εργάσιμες Weekly Εβδομαδιαίο Monthly Μηνιαίο Yearly Ετήσιο End Repeat Τέλος Επανάληψης After Μετά On Ενεργό Cancel button Ακύρωση Save button Αποθήκευση CScheduleOperation All occurrences of a repeating event must have the same all-day status. Όλες οι εμφανίσεις ενός επαναλαμβανόμενου συμβάντος πρέπει να έχουν την ίδια ολοήμερη κατάσταση. Do you want to change all occurrences? Θέλετε να αλλάξετε όλες τις εμφανίσεις; Cancel button Ακύρωση Change All Αλλαγή Όλων You are changing the repeating rule of this event. Αλλάζεις τον κανόνα επανάληψης αυτού του συμβάντος. You are deleting an event. Διαγράφεις ένα συμβάν Are you sure you want to delete this event? Είστε σίγουρος ότι θέλετε να διαγράψετε αυτό το συμβάν; Delete button Διαγραφή Do you want to delete all occurrences of this event, or only the selected occurrence? Θέλετε να διαγράψετε όλες τις εμφανίσεις αυτού του συμβάντος ή μόνο την επιλεγμένη εμφάνιση; Delete All Διαγραφή όλων Delete Only This Event Διαγραφή Μόνο Αυτού του Συμβάντος Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Θέλετε να διαγράψετε αυτήν και όλες τις μελλοντικές εμφανίσεις αυτού του συμβάντος ή μόνο την επιλεγμένη εμφάνιση; Delete All Future Events Διαγραφή Όλων των Μελλοντικών Συμβάντων You are changing a repeating event. Αλλάζεις ένα επαναλαμβανόμενο συμβάν. Do you want to change only this occurrence of the event, or all occurrences? Θέλετε να αλλάξετε μόνο αυτήν την εμφάνιση του συμβάντος ή όλες τις εμφανίσεις; All Όλα Only This Event Μόνο Αυτό το Συμβάν Do you want to change only this occurrence of the event, or this and all future occurrences? Θέλετε να αλλάξετε μόνο αυτήν την εμφάνιση του συμβάντος ή αυτήν και όλες τις μελλοντικές εμφανίσεις; All Future Events Όλα τα Μελλοντικά Συμβάντα You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button ΟΚ CScheduleSearchDateItem Y Ε M Μ D Η CScheduleSearchItem Edit Επεξεργασία Delete Διαγραφή All Day Ολοήμερο CScheduleSearchView No search results Χωρίς αποτελέσματα αναζήτησης CScheduleView ALL DAY ΟΛΟΗΜΕΡΟ CSettingDialog Manual Μη αυτόματα 15 mins 15 λεπτά 30 mins 30 λεπτά 1 hour 1 ώρα 24 hours 24 ώρες Sync Now Συγχρονισμός Τώρα Last sync Τελευταίος συγχρονισμός Monday Δευτέρα Sunday Κυριακή 12-hour clock 12-ωρο ρολόι 24-hour clock 24-ωρο ρολόι Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 λεπτά) (%1 hour) (%1 ώρα) (%1 hours) (%1 ώρες) CTitleWidget Y Ε M Μ W Β D Η Search events and festivals CWeekWidget Sun Κυρ Mon Δευ Tue Τρι Wed Τετ Thu Πεμ Fri Παρ Sat Σαβ CWeekWindow Week Εβδομάδα Y Y CYearScheduleView All Day Ολοήμερο No event Χωρίς συμβάν CYearWindow Y Y CalendarWindow Calendar Ημερολόγιο Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Το Ημερολόγιο είναι ένα εργαλείο για να δεις ημερομηνίες, αλλα και επίσης ένας εξύπνος σχεδιαστής ημέρας για να προγραμματίσεις όλα τα πράγματα στην ζωή. Calendarmainwindow Calendar Ημερολόγιο Manage Διαχείρηση Privacy Policy Πολιτική Απορρήτου Syncing... Συγχρονισμός... Sync successful Επιτυχής συγχρονισμός Sync failed, please try later CenterWidget All Day Ολοήμερο DAccountDataBase Work Εργασία Life Ζωή Other Άλλο DAlarmManager Close button Κλείσιμο One day before start Μια ημέρα πριν την εκκίνηση Remind me tomorrow Υπενθύμισέ μου αύριο Remind me later Υπεθύμισέ μου αργότερα 15 mins later 15 λεπτά αργότερα 1 hour later 1 ώρα αργότερα 4 hours later 4 ώρες αργότερα Tomorrow Αύριο Schedule Reminder Προγραμματισμός Υπενθύμισης %1 to %2 %1 εως %2 Today Σήμερα DragInfoGraphicsView Edit Επεξεργασία Delete Διαγραφή New event Νέο συμβάν New Event Νέο Συμβάν JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Ακύρωση Delete button Διαγραφή QObject Account settings Ρυθμίσεις λογαριασμού Account Λογαριασμός Select items to be synced Events Συμβάντα General settings Γενικές ρυθμίσεις Sync interval Manage calendar Calendar account Λογαριασμός ημερολογίου Event types General Γενικά First day of week Πρώτη ημέρα της εβδομάδας Time Ώρα Return Today Return Σήμερα Return Today Today Return Today Σήμερα ScheduleTypeEditDlg New event type Νέος τύπος συμβάντος Edit event type Name: Όνομα: Color: Χρώμα: Cancel button Ακύρωση Save button Αποθήκευση The name can not only contain whitespaces Το όνομα δεν μπορρεί να περιέχει μόνο κενούς χαρακτήρες Enter a name please Shortcut Help Βοήθεια Delete event Διαγραφή συμβάντος Copy Αντιγραφή Cut Αποκοπή Paste Επικόλληση Delete Διαγραφή Select all Επιλογή όλων SidebarCalendarWidget Y Ε M Μ TimeJumpDialog Go button UserloginWidget Sign In button Σύνδεση Sign Out button Έξοδος YearFrame Y Y today Today Today Σήμερα dde-calendar-5.14.13/translations/dde-calendar-service_en.ts000066400000000000000000000710131473346337000237200ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button Save button CDayMonthView Monday Tuesday Wednesday Thursday Friday Saturday Sunday CDayWindow Y M D Lunar CGraphicsView New Event CMonthScheduleNumItem %1 more CMonthView New event New Event CMonthWindow Y CMyScheduleView My Event OK button Delete button Edit button CPushButton New event type CScheduleDlg New Event Edit Event End time must be greater than start time OK button Never At time of event 15 minutes before 30 minutes before 1 hour before 1 day before 2 days before 1 week before On start day (9:00 AM) time(s) Enter a name please The name can not only contain whitespaces Type: Description: All Day: Starts: Ends: Remind Me: Repeat: End Repeat: Calendar account: Calendar account Type Description All Day Time: Time Solar Lunar Starts Ends Remind Me Repeat Daily Weekdays Weekly Monthly Yearly End Repeat After On Cancel button Save button CScheduleOperation All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Cancel button Change All You are changing the repeating rule of this event. You are deleting an event. Are you sure you want to delete this event? Delete button Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? All Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button CScheduleSearchDateItem Y M D CScheduleSearchItem Edit Delete All Day CScheduleSearchView No search results CScheduleView ALL DAY CSettingDialog Sunday Monday 24-hour clock 12-hour clock Manual 15 mins 30 mins 1 hour 24 hours Sync Now Last sync import ICS file Tuesday Wednesday Thursday Friday Saturday Please go to the <a href='/'>Control Center</a> to change settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y M W D Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Y CYearScheduleView All Day No event CYearWindow Y CalendarWindow Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button Close One day before start One day before start Remind me tomorrow Remind me tomorrow Remind me later Remind me later 15 mins later 15 mins later 1 hour later 1 hour later 4 hours later 4 hours later Tomorrow Tomorrow Schedule Reminder Schedule Reminder %1 to %2 %1 to %2 Today Today DragInfoGraphicsView Edit Delete New event New Event JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Delete button export import ICS file QObject Account settings Account Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General First day of week Time Return Today Return Today Return Today Today Return Today Today ScheduleTypeEditDlg New event type Edit event type Name: Color: Cancel button Save button The name can not only contain whitespaces Enter a name please Import ICS file <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Shortcut Help Delete event Copy Cut Paste Delete Select all SidebarCalendarWidget Y M TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y today Today Today Today dde-calendar-5.14.13/translations/dde-calendar-service_en_AU.ts000066400000000000000000000703111473346337000243050ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button Cancel Save button Save CDayMonthView Monday Monday Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday Sunday Sunday CDayWindow Y Y M M D D Lunar CGraphicsView New Event New Event CMonthScheduleNumItem %1 more %1 more CMonthView New event New event New Event New Event CMonthWindow Y Y CMyScheduleView My Event My Event OK button OK Delete button Delete Edit button Edit CPushButton New event type CScheduleDlg New Event New Event Edit Event Edit Event End time must be greater than start time End time must be greater than start time OK button OK Never Never At time of event At time of event 15 minutes before 15 minutes before 30 minutes before 30 minutes before 1 hour before 1 hour before 1 day before 1 day before 2 days before 2 days before 1 week before 1 week before On start day (9:00 AM) On start day (9:00 AM) time(s) time(s) Enter a name please The name can not only contain whitespaces Type: Type: Description: Description: All Day: All Day: Starts: Starts: Ends: Ends: Remind Me: Remind Me: Repeat: Repeat: End Repeat: End Repeat: Calendar account: Calendar account Type Type Description Description All Day All Day Time: Time Solar Lunar Starts Starts Ends Ends Remind Me Remind Me Repeat Repeat Daily Daily Weekdays Weekdays Weekly Weekly Monthly Monthly Yearly Yearly End Repeat End Repeat After After On On Cancel button Cancel Save button Save CScheduleOperation All occurrences of a repeating event must have the same all-day status. All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Do you want to change all occurrences? Cancel button Cancel Change All Change All You are changing the repeating rule of this event. You are changing the repeating rule of this event. You are deleting an event. You are deleting an event. Are you sure you want to delete this event? Are you sure you want to delete this event? Delete button Delete Do you want to delete all occurrences of this event, or only the selected occurrence? Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete All Delete Only This Event Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events Delete All Future Events You are changing a repeating event. You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? Do you want to change only this occurrence of the event, or all occurrences? All All Only This Event Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Edit Delete Delete All Day All Day CScheduleSearchView No search results No search results CScheduleView ALL DAY ALL DAY CSettingDialog Manual Manual 15 mins 30 mins 1 hour 1 hour 24 hours Sync Now Last sync Monday Monday Sunday Sunday 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals CWeekWidget Sun Sun Mon Mon Tue Tue Wed Wed Thu Thu Fri Fri Sat Sat CWeekWindow Week Week Y Y CYearScheduleView All Day All Day No event No event CYearWindow Y Y CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Calendar Manage Privacy Policy Privacy Policy Syncing... Syncing... Sync successful Sync failed, please try later CenterWidget All Day All Day DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button Close One day before start One day before start Remind me tomorrow Remind me tomorrow Remind me later Remind me later 15 mins later 1 hour later 4 hours later Tomorrow Tomorrow Schedule Reminder Schedule Reminder %1 to %2 Today Today DragInfoGraphicsView Edit Edit Delete Delete New event New event New Event New Event JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Cancel Delete button Delete QObject Account settings Account Account Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General General First day of week Time Return Today Return Today Return Today Today Return Today Today ScheduleTypeEditDlg New event type Edit event type Name: Color: Cancel button Cancel Save button Save The name can not only contain whitespaces Enter a name please Shortcut Help Help Delete event Delete event Copy Copy Cut Cut Paste Paste Delete Delete Select all Select all SidebarCalendarWidget Y Y M M TimeJumpDialog Go button UserloginWidget Sign In button Sign In Sign Out button Sign Out YearFrame Y Y today Today Today Today dde-calendar-5.14.13/translations/dde-calendar-service_en_GB.ts000066400000000000000000000676161473346337000243060ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button Cancel Save button Save CDayMonthView Monday Monday Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday Sunday Sunday CDayWindow Y Y M M D D Lunar CGraphicsView New Event New Event CMonthScheduleNumItem %1 more %1 more CMonthView New event New event New Event New Event CMonthWindow Y Y CMyScheduleView My Event My Event OK button OK Delete button Delete Edit button Edit CPushButton New event type CScheduleDlg New Event New Event Edit Event Edit Event End time must be greater than start time End time must be greater than start time OK button OK Never Never At time of event At time of event 15 minutes before 15 minutes before 30 minutes before 30 minutes before 1 hour before 1 hour before 1 day before 1 day before 2 days before 2 days before 1 week before 1 week before On start day (9:00 AM) On start day (9:00 AM) time(s) time(s) Enter a name please The name can not only contain whitespaces Type: Type: Description: Description: All Day: All Day: Starts: Starts: Ends: Ends: Remind Me: Remind Me: Repeat: Repeat: End Repeat: End Repeat: Calendar account: Calendar account Type Type Description Dscription All Day All Day Time: Time Solar Lunar Starts Starts Ends Ends Remind Me Remind Me Repeat Repeat Daily Daily Weekdays Weekdays Weekly Weekly Monthly Monthly Yearly Yearly End Repeat End Repeat After After On On Cancel button Cancel Save button Save CScheduleOperation All occurrences of a repeating event must have the same all-day status. All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Do you want to change all occurrences? Cancel button Cancel Change All Change All You are changing the repeating rule of this event. You are changing the repeating rule of this event. You are deleting an event. You are deleting an event. Are you sure you want to delete this event? Are you sure you want to delete this event? Delete button Delete Do you want to delete all occurrences of this event, or only the selected occurrence? Do you want to delete the occurrence of this event, or the selected occurrence? Delete All Delete All Delete Only This Event Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events Delete All Future Events You are changing a repeating event. You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? Do you want to change only this occurrence of the event, or all occurrences? All All Only This Event Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? Do you want to change the occurrence of the event, or this and all future occurrences All Future Events All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Edit Delete Delete All Day All Day CScheduleSearchView No search results No search results CScheduleView ALL DAY ALL DAY CSettingDialog Manual 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Monday Monday Sunday Sunday 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Week Y Y CYearScheduleView All Day All Day No event No event CYearWindow Y Y CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Calendar Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day All Day DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button One day before start Remind me tomorrow Remind me later 15 mins later 1 hour later 4 hours later Tomorrow Schedule Reminder %1 to %2 Today Today DragInfoGraphicsView Edit Edit Delete Delete New event New event New Event New Event JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Cancel Delete button Delete QObject Account settings Account Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General First day of week Time Return Today Return Today Return Today Today Return Today Today ScheduleTypeEditDlg New event type Edit event type Name: Color: Cancel button Cancel Save button Save The name can not only contain whitespaces Enter a name please Shortcut Help Help Delete event Delete event Copy Copy Cut Cut Paste Paste Delete Delete Select all Select all SidebarCalendarWidget Y Y M M TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y Y today Today Today Today dde-calendar-5.14.13/translations/dde-calendar-service_en_US.ts000066400000000000000000000732731473346337000243410ustar00rootroot00000000000000 AccountItem Sync successful Sync successful Network error Network error Server exception Server exception Storage full Storage full AccountManager Local account Local account Event types Event types CColorPickerWidget Color Color Cancel button Cancel Save button Save CDayMonthView Monday Monday Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday Sunday Sunday CDayWindow Y Y M M D D Lunar Lunar CGraphicsView New Event New Event CMonthScheduleNumItem %1 more %1 more CMonthView New event New event New Event New Event CMonthWindow Y Y CMyScheduleView My Event My Event OK button OK Delete button Delete Edit button Edit CPushButton New event type New event type CScheduleDlg New Event New Event Edit Event Edit Event End time must be greater than start time End time must be greater than start time OK button OK Never Never At time of event At time of event 15 minutes before 15 minutes before 30 minutes before 30 minutes before 1 hour before 1 hour before 1 day before 1 day before 2 days before 2 days before 1 week before 1 week before On start day (9:00 AM) On start day (9:00 AM) time(s) time(s) Enter a name please Enter a name please The name can not only contain whitespaces The name can not only contain whitespaces Type: Type: Description: Description: All Day: All Day: Starts: Starts: Ends: Ends: Remind Me: Remind Me: Repeat: Repeat: End Repeat: End Repeat: Calendar account: Calendar account: Calendar account Calendar account Type Type Description Description All Day All Day Time: Time: Time Time Solar Solar Lunar Lunar Starts Starts Ends Ends Remind Me Remind Me Repeat Repeat Daily Daily Weekdays Weekdays Weekly Weekly Monthly Monthly Yearly Yearly End Repeat End Repeat After After On On Cancel button Cancel Save button Save CScheduleOperation All occurrences of a repeating event must have the same all-day status. All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Do you want to change all occurrences? Cancel button Cancel Change All Change All You are changing the repeating rule of this event. You are changing the repeating rule of this event. You are deleting an event. You are deleting an event. Are you sure you want to delete this event? Are you sure you want to delete this event? Delete button Delete Do you want to delete all occurrences of this event, or only the selected occurrence? Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete All Delete Only This Event Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events Delete All Future Events You are changing a repeating event. You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? Do you want to change only this occurrence of the event, or all occurrences? All All Only This Event Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Edit Delete Delete All Day All Day CScheduleSearchView No search results No search results CScheduleView ALL DAY ALL DAY CSettingDialog Manual Manual 15 mins 15 mins 30 mins 30 mins 1 hour 1 hour 24 hours 24 hours Sync Now Sync Now Last sync Last sync Monday Monday Sunday Sunday 12-hour clock 12-hour clock 24-hour clock 24-hour clock Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hour) (%1 hours) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals Search events and festivals CWeekWidget Sun Sun Mon Mon Tue Tue Wed Wed Thu Thu Fri Fri Sat Sat CWeekWindow Week Week Y Y CYearScheduleView All Day All Day No event No event CYearWindow Y Y CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Calendar Manage Manage Privacy Policy Privacy Policy Syncing... Syncing... Sync successful Sync successful Sync failed, please try later Sync failed, please try later CenterWidget All Day All Day DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button Close One day before start One day before start Remind me tomorrow Remind me tomorrow Remind me later Remind me later 15 mins later 15 mins later 1 hour later 1 hour later 4 hours later 4 hours later Tomorrow Tomorrow Schedule Reminder Schedule Reminder %1 to %2 %1 to %2 Today Today DragInfoGraphicsView Edit Edit Delete Delete New event New event New Event New Event JobTypeListView You are deleting an event type. You are deleting an event type. All events under this type will be deleted and cannot be recovered. All events under this type will be deleted and cannot be recovered. Cancel button Cancel Delete button Delete QObject Account settings Account settings Account Account Select items to be synced Select items to be synced Events Events General settings General settings Sync interval Sync interval Manage calendar Manage calendar Calendar account Calendar account Event types Event types General General First day of week First day of week Time Time Return Today Return Today Return Today Today Return Today Today ScheduleTypeEditDlg New event type New event type Edit event type Edit event type Name: Name: Color: Color: Cancel button Cancel Save button Save The name can not only contain whitespaces The name can not only contain whitespaces Enter a name please Enter a name please Shortcut Help Help Delete event Delete event Copy Copy Cut Cut Paste Paste Delete Delete Select all Select all SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Go UserloginWidget Sign In button Sign In Sign Out button Sign Out YearFrame Y Y today Today Today Today dde-calendar-5.14.13/translations/dde-calendar-service_es.ts000066400000000000000000000741731473346337000237370ustar00rootroot00000000000000 AccountItem Sync successful Sincronización exitosa Network error Error de red Server exception Excepción del servidor Storage full Almacenamiento lleno AccountManager Local account Cuenta local Event types Tipos de eventos CColorPickerWidget Color Color Cancel button Cancelar Save button Guardar CDayMonthView Monday lunes Tuesday martes Wednesday miércoles Thursday jueves Friday viernes Saturday sábado Sunday domingo CDayWindow Y A M M D D Lunar Lunar CGraphicsView New Event Nuevo evento CMonthScheduleNumItem %1 more %1 más CMonthView New event Nuevo evento New Event Nuevo evento CMonthWindow Y A CMyScheduleView My Event Mi evento OK button Aceptar Delete button Borrar Edit button Editar CPushButton New event type Nuevo tipo de evento CScheduleDlg New Event Nuevo evento Edit Event Editar evento End time must be greater than start time El tiempo final debe ser mayor que el tiempo inicial OK button Aceptar Never Nunca At time of event En el momento del evento. 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 día antes 2 days before 2 días antes 1 week before 1 semana antes On start day (9:00 AM) El día de inicio (9:00 a.m.) time(s) hora(s) Enter a name please Por favor ingrese un nombre The name can not only contain whitespaces El nombre no puede contener espacios en blanco Type: Tipo: Description: Descripción: All Day: Todo el día: Starts: Inicia: Ends: Termina: Remind Me: Recordarme: Repeat: Repetir: End Repeat: Fin de repetición: Calendar account: Cuenta de calendario: Calendar account Cuenta de calendario Type Tipo Description Descripción All Day Todo el día Time: Tiempo: Time Tiempo Solar Solar Lunar Lunar Starts Inicia Ends Termina Remind Me Recordarme Repeat Repetir Daily Diariamente Weekdays Días laborables Weekly Semanalmente Monthly Mensualmente Yearly Anualmente End Repeat Fin de repetición After Después On Encendido Cancel button Cancelar Save button Guardar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas las instancias de un evento repetido debe tener el mismo estado todo el día. Do you want to change all occurrences? ¿Desea cambiar todas las instancias? Cancel button Cancelar Change All Cambiar todos You are changing the repeating rule of this event. Está cambiando la regla de repetición de este evento. You are deleting an event. Esta borrando un evento Are you sure you want to delete this event? ¿Está seguro que desea borrar este evento? Delete button Borrar Do you want to delete all occurrences of this event, or only the selected occurrence? ¿Desea borrar todas las instancias de este evento, o solo la instancia seleccionada? Delete All Eliminar todo Delete Only This Event Borrar solo este evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ¿Desea eliminar este y todas las instancias futuras de este evento, o solo la instancia seleccionada? Delete All Future Events Borrar todos los eventos futuros You are changing a repeating event. Esta cambiando una repetición de un evento. Do you want to change only this occurrence of the event, or all occurrences? ¿Desea cambiar solo la instancia de este evento, o todas las instancias? All Todos Only This Event Solo este evento Do you want to change only this occurrence of the event, or this and all future occurrences? ¿Desea cambiar solo este acontecimiento del evento, o este y todos los acontecimientos futuros? All Future Events Todos los eventos futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Ha seleccionado un mes bisiesto y se le recordará de acuerdo con las reglas del calendario lunar. OK button Aceptar CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Editar Delete Eliminar All Day Todo el día CScheduleSearchView No search results Sin resultados CScheduleView ALL DAY EVENTOS CSettingDialog Manual Manual 15 mins 15 minutos 30 mins 30 minutos 1 hour 1 hora 24 hours 24 horas Sync Now Sincronizar ahora Last sync Ultima sincronizacion Monday Lunes Sunday Domingo 12-hour clock Reloj de 12 horas 24-hour clock Reloj de 24 horas Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hora) (%1 hours) (%1 horas) CTitleWidget Y Y M M W W D D Search events and festivals Buscar eventos y festivales CWeekWidget Sun dom. Mon lun. Tue mar. Wed miérc. Thu juev. Fri vier. Sat sáb. CWeekWindow Week Semana Y A CYearScheduleView All Day Todo el día No event No hay eventos CYearWindow Y A CalendarWindow Calendar Calendario Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendario de Deepin es una herramienta para consultar fechas, y un conveniente planificador para agendar sus reuniones y eventos. Calendarmainwindow Calendar Calendario Manage Ajustes Privacy Policy Política de privacidad Syncing... Sincronizando… Sync successful Sincronización exitosa Sync failed, please try later La sincronización falló, intentelo más tarde CenterWidget All Day Todo el día DAccountDataBase Work Trabajo Life Vida Other Otro DAlarmManager Close button Cerrar One day before start El día anterior al evento Remind me tomorrow Recuérdame mañana Remind me later Recuérdame luego 15 mins later 15 minutos después 1 hour later 1 hora después 4 hours later 4 horas después Tomorrow Mañana Schedule Reminder Programar Recordatorio %1 to %2 %1 a %2 Today Hoy DragInfoGraphicsView Edit Editar Delete Borrar New event Nuevo evento New Event Nuevo evento JobTypeListView You are deleting an event type. Está eliminando un tipo de evento. All events under this type will be deleted and cannot be recovered. Todos los eventos de este tipo se eliminarán y no se podrán recuperar. Cancel button Cancelar Delete button Eliminar QObject Account settings Ajustes de la cuenta Account Cuenta Select items to be synced Seleccionar elementos a sincronizar Events Eventos General settings Ajustes generales Sync interval Intervalo de sincronización Manage calendar Administrar calendario Calendar account Cuenta de calendario Event types Tipos de eventos General General First day of week Primer día de la semana Time Tiempo Return Today Return Hoy Return Today Today Return Today Hoy ScheduleTypeEditDlg New event type Nuevo tipo de evento Edit event type Editar tipo de evento Name: Nombre: Color: Color: Cancel button Cancelar Save button Guardar The name can not only contain whitespaces El nombre no puede contener espacios en blanco Enter a name please Por favor ingrese un nombre Shortcut Help Ayuda Delete event Borrar evento Copy Duplicar Cut Cortar Paste Pegar Delete Borrar Select all Seleccionar todo SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Iniciar sesión Sign Out button Cerrar sesión YearFrame Y A today Today Today Hoy dde-calendar-5.14.13/translations/dde-calendar-service_fa.ts000066400000000000000000000705061473346337000237120ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color رنگ Cancel button انصراف Save button ذخیره CDayMonthView Monday Tuesday Wednesday Thursday Friday Saturday Sunday CDayWindow Y M D Lunar CGraphicsView New Event CMonthScheduleNumItem %1 more CMonthView New event New Event CMonthWindow Y CMyScheduleView My Event OK button تایید Delete button حذف Edit button ویرایش CPushButton New event type CScheduleDlg New Event Edit Event End time must be greater than start time OK button تایید Never هرگز At time of event 15 minutes before 30 minutes before 1 hour before 1 day before 2 days before 1 week before On start day (9:00 AM) time(s) Enter a name please The name can not only contain whitespaces Type: نوع: Description: All Day: Starts: Ends: Remind Me: Repeat: End Repeat: Calendar account: Calendar account Type Description توضیحات All Day Time: Time Solar Lunar Starts Ends Remind Me Repeat تکرار Daily Weekdays Weekly Monthly Yearly End Repeat After On Cancel button انصراف Save button ذخیره CScheduleOperation All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Cancel button انصراف Change All You are changing the repeating rule of this event. You are deleting an event. Are you sure you want to delete this event? Delete button حذف Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? All Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button تایید CScheduleSearchDateItem Y M D CScheduleSearchItem Edit ویرایش Delete حذف All Day CScheduleSearchView No search results نتیجه جستجو یافت نشد CScheduleView ALL DAY CSettingDialog import ICS file Manual دستی 15 mins 30 mins 1 hour ۱ ساعت 24 hours Sync Now Last sync Monday Tuesday Wednesday Thursday Friday Saturday Sunday 12-hour clock 24-hour clock Please go to the <a href='/'>Control Center</a> to change settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y M W D Search events and festivals CWeekWidget Sun یکشنبه Mon دوشنبه Tue سه شنبه Wed چهار شنبه Thu پنج شنبه Fri جمعه Sat شنبه CWeekWindow Week Y CYearScheduleView All Day No event CYearWindow Y CalendarWindow Calendar تقویم Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar تقویم Manage Privacy Policy Syncing... در حال همگام سازی... Sync successful Sync failed, please try later CenterWidget All Day DAccountDataBase Work کار Life زندگی Other سایر DAlarmManager Close button بستن One day before start یک روز قبل از شروع Remind me tomorrow فردا یادم بنداز Remind me later بعدا ً به من یادآوری کن 15 mins later 1 hour later 4 hours later Tomorrow فردا Schedule Reminder یادآور برنامه %1 to %2 Today امروز DragInfoGraphicsView Edit ویرایش Delete حذف New event New Event JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button انصراف Delete button حذف QObject Account settings Account حساب کاربری Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General کلی First day of week Time Return Today Return امروز Return Today Today Return Today امروز ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: نام: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button انصراف Save button ذخیره The name can not only contain whitespaces Enter a name please Shortcut Help راهنما Delete event Copy کپی Cut برش Paste افزودن Delete حذف Select all انتخاب همه SidebarCalendarWidget Y M TimeJumpDialog Go button UserloginWidget Sign In button وارد شدن به حساب کاربری Sign Out button خارج شدن از حساب کاربری YearFrame Y today Today Today امروز dde-calendar-5.14.13/translations/dde-calendar-service_fi.ts000066400000000000000000000736611473346337000237270ustar00rootroot00000000000000 AccountItem Sync successful Synkronointi onnistui Network error Verkkovirhe Server exception Palvelimen poikkeus Storage full Levytila täynnä AccountManager Local account Paikallinen tili Event types Tapahtumatyypit CColorPickerWidget Color Väri Cancel button Peruuta Save button Tallenna CDayMonthView Monday Maanantai Tuesday Tiistai Wednesday Keskiviikko Thursday Torstai Friday Perjantai Saturday Lauantai Sunday Sunnuntai CDayWindow Y V M K D P Lunar Kuu CGraphicsView New Event Uusi tapahtuma CMonthScheduleNumItem %1 more %1 lisää CMonthView New event Uusi tapahtuma New Event Uusi tapahtuma CMonthWindow Y V CMyScheduleView My Event Tapahtuma OK button OK Delete button Poista Edit button Muokkaa CPushButton New event type Uusi tapahtuman tyyppi CScheduleDlg New Event Uusi tapahtuma Edit Event Muokkaa tapahtumaa End time must be greater than start time Lopetusajan on oltava pidempi kuin aloitusaika OK button OK Never Ei koskaan At time of event Tapahtuman aikaan 15 minutes before 15 min ennen 30 minutes before 30 min ennen 1 hour before 1 tunti ennen 1 day before 1 päivä ennen 2 days before 2 päivää ennen 1 week before 1 viikko ennen On start day (9:00 AM) Aloituspäivänä (9:00) time(s) kertaa Enter a name please Anna nimi The name can not only contain whitespaces Nimi ei voi sisältää vain välilyöntejä Type: Tyyppi: Description: Kuvaus: All Day: Koko päivä: Starts: Alkaa: Ends: Loppuu: Remind Me: Muistuta minua: Repeat: Toista: End Repeat: Lopeta toisto: Calendar account: Kalenteritili: Calendar account Kalenteritili Type Tyyppi Description Kuvaus All Day Koko päivä Time: Aika: Time Aika Solar Aurinko Lunar Kuu Starts Alkaa Ends Loppuu Remind Me Muistuta minua Repeat Toista Daily Päivittäin Weekdays Arkisin Weekly Viikoittain Monthly Kuukausittain Yearly Vuosittain End Repeat Lopeta toisto After Jälkeen On Päällä Cancel button Peruuta Save button Tallenna CScheduleOperation All occurrences of a repeating event must have the same all-day status. Kaikilla toistuvilla tapahtumilla on oltava sama koko päivän tila. Do you want to change all occurrences? Haluatko muuttaa kaikkia tapahtumia? Cancel button Peruuta Change All Vaihda kaikki You are changing the repeating rule of this event. Olet muuttamassa tämän tapahtuman toistuvaa sääntöä. You are deleting an event. Olet poistamassa tapahtumaa. Are you sure you want to delete this event? Haluatko varmasti poistaa tämän tapahtuman? Delete button Poista Do you want to delete all occurrences of this event, or only the selected occurrence? Haluatko poistaa kaikki tämän tapahtuman esiintymät vai vain valitun tapahtuman? Delete All Poista kaikki Delete Only This Event Poista vain tämä tapahtuma Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Haluatko poistaa tämän ja kaikki tämän tapahtuman tulevat esiintymät vai vain valitun tapahtuman? Delete All Future Events Poista kaikki tulevat tapahtumat You are changing a repeating event. Olet vaihtamassa toistuvaa tapahtumaa. Do you want to change only this occurrence of the event, or all occurrences? Haluatko muuttaa vain tämän tapahtuman vai kaikki tapahtumat? All Kaikki Only This Event Vain tämä tapahtuma Do you want to change only this occurrence of the event, or this and all future occurrences? Haluatko muuttaa vain tämän tapahtuman vai tätä ja kaikkia tulevia tapahtumia? All Future Events Kaikki tulevat tapahtumat You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Olet valinnut karkauskuukauden ja sinua muistutetaan kuukalenterin sääntöjen mukaisesti. OK button OK CScheduleSearchDateItem Y V M K D P CScheduleSearchItem Edit Muokkaa Delete Poista All Day Koko päivä CScheduleSearchView No search results Ei hakutuloksia CScheduleView ALL DAY AIKA CSettingDialog Manual Manuaalinen 15 mins 15 min 30 mins 30 min 1 hour 1 tunti 24 hours 24 tuntia Sync Now Synkronoi nyt Last sync Viimeisin synkronointi Monday Maanantai Sunday Sunnuntai 12-hour clock 12h kello 24-hour clock 24h kello Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 tunti) (%1 hours) (%1 tuntia) CTitleWidget Y V M KK W VK D PV Search events and festivals Hae tapahtumia ja festivaaleja CWeekWidget Sun Su Mon Ma Tue Ti Wed Ke Thu To Fri Pe Sat La CWeekWindow Week Viikko Y V CYearScheduleView All Day Koko päivä No event Ei tapahtumaa CYearWindow Y V CalendarWindow Calendar Kalenteri Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalenteri on työkalu almanakan tarkasteluun ja voit myös tehdä hälytykset ja muistutukset kalenteriin. Calendarmainwindow Calendar Kalenteri Manage Hallitse Privacy Policy Tietosuojakäytäntö Syncing... Synkronoidaan... Sync successful Synkronointi onnistui Sync failed, please try later Synkronointi epäonnistui, yritä myöhemmin CenterWidget All Day Koko päivä DAccountDataBase Work Työ Life Oma Other Muu DAlarmManager Close button Sulje One day before start Päivä ennen alkua Remind me tomorrow Muistuta huomenna Remind me later Muistuta myöhemmin 15 mins later 15 min myöhemmin 1 hour later 1 tunnin kuluttua 4 hours later 4 tunnin kuluttua Tomorrow Huomenna Schedule Reminder Ajasta muistutus %1 to %2 %1 - %2 Today Tänään DragInfoGraphicsView Edit Muokkaa Delete Poista New event Uusi tapahtuma New Event Uusi tapahtuma JobTypeListView You are deleting an event type. Olet poistamassa tapahtumatyyppiä. All events under this type will be deleted and cannot be recovered. Kaikki tämän tyypin tapahtumat poistetaan, eikä niitä voi palauttaa. Cancel button Peruuta Delete button Poista QObject Account settings Tilin asetukset Account Tili Select items to be synced Valitse synkronoitavat kohteet Events Tapahtumat General settings Yleiset asetukset Sync interval Synkronointiväli Manage calendar Hallitse kalenteria Calendar account Kalenteritili Event types Tapahtumatyypit General Yleinen First day of week Viikon ensimmäinen päivä Time Aika Return Today Return Tänään Return Today Today Return Today Tänään ScheduleTypeEditDlg New event type Uusi tapahtuman tyyppi Edit event type Muokkaa tapahtuman tyyppiä Name: Nimi: Color: Väri: Cancel button Peruuta Save button Tallenna The name can not only contain whitespaces Nimi ei voi sisältää vain välilyöntejä Enter a name please Anna nimi Shortcut Help Ohje Delete event Poista tapahtuma Copy Kopioi Cut Leikkaa Paste Liitä Delete Poista Select all Valitse kaikki SidebarCalendarWidget Y V M K TimeJumpDialog Go button Mene UserloginWidget Sign In button Kirjaudu sisään Sign Out button Kirjaudu ulos YearFrame Y V today Today Today Tänään dde-calendar-5.14.13/translations/dde-calendar-service_fr.ts000066400000000000000000000753311473346337000237340ustar00rootroot00000000000000 AccountItem Sync successful Synchronisation réussie Network error Erreur réseau Server exception Exception de serveur Storage full Stockage plein AccountManager Local account Compte local Event types Type d'événement CColorPickerWidget Color Couleur Cancel button Annuler Save button Sauvegarder CDayMonthView Monday Lundi Tuesday Mardi Wednesday Mercredi Thursday Jeudi Friday Vendredi Saturday Samedi Sunday Dimanche CDayWindow Y A M M D J Lunar Lunaire CGraphicsView New Event Nouvel événement CMonthScheduleNumItem %1 more %1 de plus CMonthView New event Nouvel événement New Event Nouvel événement CMonthWindow Y A CMyScheduleView My Event Mon événement OK button OK Delete button Supprimer Edit button Éditer CPushButton New event type Nouveau type d'événement CScheduleDlg New Event Nouvel évènement Edit Event Éditer l'événement End time must be greater than start time L'heure de fin doit être supérieure à l'heure de début OK button OK Never Jamais At time of event Au moment de l'événement 15 minutes before 15 minutes avant 30 minutes before 30 minutes avant 1 hour before 1 heure avant 1 day before 1 jour avant 2 days before 2 jours avant 1 week before 1 semaine avant On start day (9:00 AM) Le jour de début (9h00) time(s) heure(s) Enter a name please Entrer un nom s'il vous plait The name can not only contain whitespaces Le nom ne peut pas contenir que des espaces blancs Type: Type : Description: Description : All Day: Toute la journée : Starts: Débuts : Ends: Fin : Remind Me: Rappelez-moi : Repeat: Répéter : End Repeat: Fin de la répétition : Calendar account: Compte de calendrier : Calendar account Compte de calendrier Type Type Description Description All Day Toute la journée Time: Temps : Time Temps Solar Solaire Lunar Lunaire Starts Débuts Ends Fin Remind Me Rappelez-moi Repeat Répéter Daily Journalier Weekdays Jours de la semaine Weekly Hebdomadaire Monthly Mensuel Yearly Annuel End Repeat Terminer la répétition After Après On Sur Cancel button Annuler Save button Sauvegarder CScheduleOperation All occurrences of a repeating event must have the same all-day status. Toutes les occurrences d'un événement répétitif doivent avoir le même statut toute la journée. Do you want to change all occurrences? Voulez-vous modifier toutes les occurrences ? Cancel button Annuler Change All Tout changer You are changing the repeating rule of this event. Vous modifiez la règle de répétition de cet événement. You are deleting an event. Vous êtes en train de supprimer un événement. Are you sure you want to delete this event? Êtes-vous sûr de vouloir supprimer cet événement ? Delete button Supprimer Do you want to delete all occurrences of this event, or only the selected occurrence? Voulez-vous supprimer toutes les occurrences de cet événement ou uniquement l'occurrence sélectionnée ? Delete All Tout supprimer Delete Only This Event Supprimer uniquement cet événement Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Voulez-vous supprimer cet événement et toutes les occurrences futures de cet événement, ou uniquement l'occurrence sélectionnée ? Delete All Future Events Supprimer tous les événements futurs You are changing a repeating event. Vous modifiez un événement récurrent. Do you want to change only this occurrence of the event, or all occurrences? Voulez-vous modifier uniquement cette occurrence de l'événement ou toutes les occurrences ? All Tout Only This Event Seulement cet événement Do you want to change only this occurrence of the event, or this and all future occurrences? Voulez-vous modifier uniquement cette occurrence de l'événement, ou cette occurrence et toutes les occurrences futures ? All Future Events Tous les événements futurs You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Vous avez sélectionné un mois bissextile, et sera rappelé selon les règles du calendrier lunaire. OK button OK CScheduleSearchDateItem Y A M M D J CScheduleSearchItem Edit Éditer Delete Supprimer All Day Toute la journée CScheduleSearchView No search results Aucun résultat trouvé CScheduleView ALL DAY TOUTE LA JOURNÉE CSettingDialog Manual Manuel 15 mins 15 min 30 mins 30 min 1 hour 1 heure 24 hours 24 heures Sync Now Synchroniser maintenant Last sync Dernière synchronisation Monday Lundi Sunday Dimanche 12-hour clock horloge 12 heures 24-hour clock Horloge 24 heures Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 heure) (%1 hours) (%1 heures) CTitleWidget Y A M M W W D J Search events and festivals Rechercher des événements et des festivals CWeekWidget Sun Dim Mon Lun Tue Mar Wed Mer Thu Jeu Fri Ven Sat Sam CWeekWindow Week Semaine Y A CYearScheduleView All Day Toute la journée No event Pas d'évènement CYearWindow Y A CalendarWindow Calendar Calendrier Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Le calendrier est un outil pour afficher les dates, et aussi un planificateur quotidien intelligent pour planifier toutes les choses de la vie. Calendarmainwindow Calendar Calendrier Manage Gérer Privacy Policy Politique de confidentialité Syncing... Synchronisation... Sync successful Synchronisation réussie Sync failed, please try later Échec de la synchronisation, veuillez réessayer plus tard CenterWidget All Day Toute la journée DAccountDataBase Work Travail Life Vie Other Autre DAlarmManager Close button Fermer One day before start Un jour avant le début Remind me tomorrow Rappel demain Remind me later Rappeler plus tard 15 mins later 15 minutes plus tard 1 hour later 1 heure plus tard 4 hours later 4 heures plus tard Tomorrow Demain Schedule Reminder Rappel de programme %1 to %2 %1 à %2 Today Aujourd'hui DragInfoGraphicsView Edit Éditer Delete Supprimer New event Nouvel événement New Event Nouvel événement JobTypeListView You are deleting an event type. Vous êtes en train de supprimer un type d'événement. All events under this type will be deleted and cannot be recovered. Tous les événements de ce type seront supprimés et ne pourront pas être récupérés. Cancel button Annuler Delete button Supprimer QObject Account settings Paramètres du compte Account Compte Select items to be synced Sélectionnez les éléments à synchroniser Events Événements General settings Paramètres généraux Sync interval Intervalle de synchronisation Manage calendar Gérer le calendrier Calendar account Compte de calendrier Event types Type d'événement General Général First day of week Premier jour de la semaine Time Temps Return Today Return Aujourd'hui Return Today Today Return Today Aujourd'hui ScheduleTypeEditDlg New event type Nouveau type d'événement Edit event type Éditer le type d'événement Name: Nom : Color: Couleur : Cancel button Annuler Save button Sauvegarder The name can not only contain whitespaces Le nom ne peut pas contenir que des espaces blancs Enter a name please Entrez un nom s'il vous plait Shortcut Help Aide Delete event Supprimer l'événement Copy Copier Cut Couper Paste Coller Delete Supprimer Select all Tout sélectionner SidebarCalendarWidget Y A M M TimeJumpDialog Go button Aller UserloginWidget Sign In button S'identifier Sign Out button Se déconnecter YearFrame Y A today Today Today Aujourd'hui dde-calendar-5.14.13/translations/dde-calendar-service_gl_ES.ts000066400000000000000000000710361473346337000243140ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cor Cancel button Cancelar Save button Gardar CDayMonthView Monday Luns Tuesday Martes Wednesday Mércores Thursday Xoves Friday Venres Saturday Sábado Sunday Domingo CDayWindow Y Y M M D D Lunar CGraphicsView New Event Novo evento CMonthScheduleNumItem %1 more %1 máis CMonthView New event Novo evento New Event Novo evento CMonthWindow Y Y CMyScheduleView My Event O meu evento OK button Aceptar Delete button Eliminar Edit button Editar CPushButton New event type CScheduleDlg New Event Novo evento Edit Event Editar evento End time must be greater than start time O tempo de finalización ten de ser maior que o de inicio OK button Aceptar Never Nunca At time of event Na hora do evento 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 día antes 2 days before 2 días antes 1 week before 1 semana antes On start day (9:00 AM) Ao comezo do día (9:00 AM) time(s) vez(ces) Enter a name please The name can not only contain whitespaces Type: Tipo: Description: Descrición: All Day: Todo o día: Starts: Comeza: Ends: Remata: Remind Me: Lembrarme: Repeat: Repetir: End Repeat: Fin da repetición: Calendar account: Calendar account Type Tipo Description Descrición All Day Todo o día Time: Time Solar Lunar Starts Comeza Ends Remata Remind Me Lembrarme Repeat Repetir Daily Diariamente Weekdays Días da semana Weekly Semanalmente Monthly Mensualmente Yearly Anualmente End Repeat Finalizar a repetición After Despois On O Cancel button Cancelar Save button Gardar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas as ocorrencias dun evento repetitivo teñen de ter o mesmo estado durante todo o día. Do you want to change all occurrences? Queres cambiar todas as ocorrencias? Cancel button Cancelar Change All Cambiar todo You are changing the repeating rule of this event. Estás a cambiar a regra de repetición deste evento. You are deleting an event. Estás eliminando un evento. Are you sure you want to delete this event? Tes a certeza de querer eliminar este evento? Delete button Eliminar Do you want to delete all occurrences of this event, or only the selected occurrence? Queres eliminar todas as ocorrencias deste evento, ou só a ocorrencia seleccionada? Delete All Eliminar todo Delete Only This Event Eliminar só este evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Queres eliminar esta e todas as vindeiras ocorrencias deste evento, ou só a ocorrencia seleccionada? Delete All Future Events Eliminar todo os eventos futuros You are changing a repeating event. Estás a cambiar un evento repetitivo. Do you want to change only this occurrence of the event, or all occurrences? Queres cambiar só esta ocorrencia deste evento, ou todas as ocorrencias? All Todo Only This Event Só este evento Do you want to change only this occurrence of the event, or this and all future occurrences? Queres cambiar só esta ocorrencia deste evento, ou esta e todas as vindeiras ocorrencias? All Future Events Todos os eventos futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button Aceptar CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Editar Delete Eliminar All Day Todo o día CScheduleSearchView No search results Sen resultados CScheduleView ALL DAY TODO O DÍA CSettingDialog Manual Manual 15 mins 30 mins 1 hour 1 hora 24 hours Sync Now Last sync Monday Luns Sunday Domingo 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals CWeekWidget Sun Dom Mon Lun Tue Mar Wed Mér Thu Xov Fri Ven Sat Sáb CWeekWindow Week Semana Y Y CYearScheduleView All Day Todo o día No event Sen evento CYearWindow Y Y CalendarWindow Calendar Calendario Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. O calendario é unha ferramenta para ver as datas e tamén un planificador diario intelixente para programar todas as cousas da vida. Calendarmainwindow Calendar Calendario Manage Privacy Policy Política de privacidade Syncing... Sincronizando... Sync successful Sync failed, please try later CenterWidget All Day Todo o día DAccountDataBase Work Traballo Life Persoal Other Outros DAlarmManager Close button Pechar One day before start Un día antes do comezo Remind me tomorrow Lembrarme mañá Remind me later Lembrarme máis tarde 15 mins later 1 hour later 4 hours later Tomorrow Mañá Schedule Reminder Programar recordatorio %1 to %2 %1 a %2 Today Hoxe DragInfoGraphicsView Edit Editar Delete Eliminar New event Novo evento New Event Novo evento JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Cancelar Delete button Eliminar QObject Account settings Account Conta Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General Xeral First day of week Time Return Today Return Hoxe Return Today Today Return Today Hoxe ScheduleTypeEditDlg New event type Edit event type Name: Nome: Color: Cancel button Cancelar Save button Gardar The name can not only contain whitespaces Enter a name please Shortcut Help Axuda Delete event Eliminar evento Copy Copiar Cut Cortar Paste Pegar Delete Eliminar Select all Seleccionar todo SidebarCalendarWidget Y Y M M TimeJumpDialog Go button UserloginWidget Sign In button Iniciar sesión Sign Out button Pechar sesión YearFrame Y Y today Today Today Hoxe dde-calendar-5.14.13/translations/dde-calendar-service_hi_IN.ts000066400000000000000000000717741473346337000243220ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color रंग Cancel button रद्द करें Save button संचित करें CDayMonthView Monday सोमवार Tuesday मंगलवार Wednesday बुधवार Thursday गुरुवार Friday शुक्रवार Saturday शनिवार Sunday रविवार CDayWindow Y Y M M D Lunar CGraphicsView New Event CMonthScheduleNumItem %1 more CMonthView New event नया इवेंट New Event CMonthWindow Y Y CMyScheduleView My Event OK button ठीक है Delete button हटाएँ Edit button संपादित करें CPushButton New event type CScheduleDlg New Event Edit Event End time must be greater than start time OK button ठीक है Never कभी नहीं At time of event 15 minutes before 30 minutes before 1 hour before 1 day before 2 days before 1 week before On start day (9:00 AM) time(s) Enter a name please The name can not only contain whitespaces Type: प्रकार : Description: All Day: Starts: Ends: Remind Me: Repeat: End Repeat: Calendar account: Calendar account Type प्रकार Description विवरण All Day पूरे दिन Time: Time Solar Lunar Starts Ends Remind Me Repeat दोहराएँ Daily Weekdays Weekly Monthly Yearly End Repeat After On चालू Cancel button रद्द करें Save button संचित करें CScheduleOperation All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Cancel button रद्द करें Change All You are changing the repeating rule of this event. You are deleting an event. आप इस इवेंट को मिटाने वाले हैं Are you sure you want to delete this event? क्या आप निश्चित रूप से इस इवेंट को मिटाना करना चाहते है Delete button हटाएँ Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete Only This Event केवल इसी इवेंट को मिटाये Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? All Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button ठीक है CScheduleSearchDateItem Y Y M M D CScheduleSearchItem Edit संपादित करें Delete हटाएँ All Day पूरे दिन CScheduleSearchView No search results खोज का कोई परिणाम नहीं मिला CScheduleView ALL DAY CSettingDialog import ICS file Manual मैनुअल 15 mins 30 mins 1 hour 1 घण्टा 24 hours Sync Now Last sync Monday सोमवार Tuesday मंगलवार Wednesday बुधवार Thursday गुरुवार Friday शुक्रवार Saturday शनिवार Sunday रविवार 12-hour clock 24-hour clock Please go to the <a href='/'>Control Center</a> to change settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Y M M W D Search events and festivals CWeekWidget Sun रवि Mon सोम Tue मंगल Wed बुध Thu गुरु Fri शुक्र Sat शनि CWeekWindow Week Y Y CYearScheduleView All Day पूरे दिन No event CYearWindow Y Y CalendarWindow Calendar दिनदर्शिका Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar दिनदर्शिका Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day पूरे दिन DAccountDataBase Work Life जीवन Other अन्य DAlarmManager Close button बंद करें One day before start आरंभ से पूर्व एक दिन Remind me tomorrow कल पुनः सूचित करें Remind me later बाद में पुनः सूचित करें 15 mins later 1 hour later 4 hours later Tomorrow आने वाला कल Schedule Reminder कार्यक्रम अनुस्मारक %1 to %2 %1 से %2 तक Today आज DragInfoGraphicsView Edit संपादित करें Delete हटाएँ New event नया इवेंट New Event JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button रद्द करें Delete button हटाएँ QObject Account settings Account Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General सामान्य First day of week Time Return Today Return आज Return Today Today Return Today आज ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: नाम : Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button रद्द करें Save button संचित करें The name can not only contain whitespaces Enter a name please Shortcut Help सहायता Delete event Copy कॉपी करें Cut काटें Paste चिपकाएँ Delete हटाएँ Select all सबको चुनें SidebarCalendarWidget Y Y M M TimeJumpDialog Go button UserloginWidget Sign In button साइन इन Sign Out button साइन आउट YearFrame Y Y today Today Today आज dde-calendar-5.14.13/translations/dde-calendar-service_hr.ts000066400000000000000000000675651473346337000237500ustar00rootroot00000000000000 AccountItem Sync successful Network error Mrežna greška Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Boja Cancel button Otkaži Save button Spremi CDayMonthView Monday Ponedjeljak Tuesday Utorak Wednesday Srijeda Thursday Četvrtak Friday Petak Saturday Subota Sunday Nedjelja CDayWindow Y Y M M D D Lunar CGraphicsView New Event Novi događaj CMonthScheduleNumItem %1 more CMonthView New event Novi događaj New Event Novi događaj CMonthWindow Y Y CMyScheduleView My Event Moj događaj OK button U redu Delete button Obriši Edit button Uredi CPushButton New event type CScheduleDlg New Event Novi događaj Edit Event Uredi događaj End time must be greater than start time Vrijeme završetka mora biti veće od vremena početka OK button U redu Never Nikada At time of event U vrijeme događaja 15 minutes before 15 minuta prije 30 minutes before 30 minuta prije 1 hour before 1 sat prije 1 day before 1 dan prije 2 days before 2 dana prije 1 week before 1 tjedan prije On start day (9:00 AM) Na dan početka (9:00 AM) time(s) Enter a name please Molim unesite ime The name can not only contain whitespaces Ime ne može sadržavati samo razmake Type: Vrsta: Description: Opis: All Day: Cijeli dan: Starts: Započinje: Ends: Završava: Remind Me: Podsjeti me: Repeat: Ponovi: End Repeat: Calendar account: Calendar account Type Vrsta Description Opis All Day Cijeli dan Time: Vrijeme: Time Vrijeme Solar Lunar Starts Počinje Ends Završava Remind Me Podsjeti me Repeat Ponovi Daily Dnevno Weekdays Dani vikenda Weekly Tjedno Monthly Mjesečno Yearly Godišnje End Repeat After Poslije On Uključeno Cancel button Otkaži Save button Spremi CScheduleOperation All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Cancel button Otkaži Change All Promijeni sve You are changing the repeating rule of this event. You are deleting an event. Brišete događaj. Are you sure you want to delete this event? Jeste li sigurni da želite izbrisati ovaj događaj? Delete button Obriši Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Obrišite sve Delete Only This Event Obrišite samo ovaj događaj Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events Obriši sve buduće događaje You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? All Sve Only This Event Samo ovaj događaj Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events Svi budući događaji You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button U redu CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Uredi Delete Obriši All Day Cijeli dan CScheduleSearchView No search results Nema rezultata pretrage CScheduleView ALL DAY CIJELI DAN CSettingDialog Manual Ručno 15 mins 30 mins 1 hour 1 sat 24 hours Sync Now Last sync Monday Ponedjeljak Sunday Nedjelja 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Y M M W D D Search events and festivals CWeekWidget Sun Ned Mon Pon Tue Uto Wed Sri Thu Čet Fri Pet Sat Sub CWeekWindow Week Tjedan Y Y CYearScheduleView All Day Cijeli dan No event Nema događaja CYearWindow Y Y CalendarWindow Calendar Kalendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Kalendar Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day Cijeli dan DAccountDataBase Work Posao Life Život Other Ostalo DAlarmManager Close button Zatvori One day before start Jedan dan prije početka Remind me tomorrow Podsjeti me sutra Remind me later Podsjeti me kasnije 15 mins later 15 minuta kasnije 1 hour later 1 sat kasnije 4 hours later 4 sata kasnije Tomorrow Sutra Schedule Reminder Podsjetnik rasporeda %1 to %2 %1 do %2 Today Danas DragInfoGraphicsView Edit Uredi Delete Obriši New event Novi događaj New Event Novi događaj JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Otkaži Delete button Obriši QObject Account settings Account Račun Select items to be synced Events General settings Sync interval Manage calendar Upravljaj kalendarom Calendar account Event types General Općenito First day of week Time Vrijeme Return Today Return Danas Return Today Today Return Today Danas ScheduleTypeEditDlg New event type Edit event type Name: Ime: Color: Boja: Cancel button Otkaži Save button Spremi The name can not only contain whitespaces Ime ne može sadržavati samo razmake Enter a name please Molim unesite ime Shortcut Help Pomoć Delete event Izbriši događaj Copy Kopiraj Cut Izreži Paste Zalijepi Delete Obriši Select all Odaberi sve SidebarCalendarWidget Y Y M M TimeJumpDialog Go button UserloginWidget Sign In button Prijava Sign Out button Odjava YearFrame Y Y today Today Today Danas dde-calendar-5.14.13/translations/dde-calendar-service_hu.ts000066400000000000000000000746221473346337000237430ustar00rootroot00000000000000 AccountItem Sync successful A szinkronizálás sikeres Network error Hálózati hiba Server exception Szerver kivétel Storage full A tárhely megtelt AccountManager Local account Helyi fiók Event types Esemény típusok CColorPickerWidget Color Szín Cancel button Mégsem Save button Mentés CDayMonthView Monday Hétfő Tuesday Kedd Wednesday Szerda Thursday Csütörtök Friday Péntek Saturday Szombat Sunday Vasárnap CDayWindow Y Év M Hónap D Nap Lunar Hold naptár CGraphicsView New Event Új esemény CMonthScheduleNumItem %1 more %1 továbbiak CMonthView New event Új esemény New Event Új esemény CMonthWindow Y Év CMyScheduleView My Event Eseményeim OK button OK Delete button Törlés Edit button Szerkesztés CPushButton New event type Új esemény típusa CScheduleDlg New Event Új esemény Edit Event Esemény szerkesztése End time must be greater than start time A befejezés időpontja csak a kezdés időpontja után lehetséges OK button OK Never Soha At time of event Az esemény időpontjában 15 minutes before 15 perccel előtte 30 minutes before 30 perccel előtte 1 hour before 1 órával előtte 1 day before 1 nappal előtte 2 days before 2 nappal előtte 1 week before 1 héttel előtte On start day (9:00 AM) Esemény kezdete napján (De. 09:00) time(s) Időpont(ok) Enter a name please Kérjük adjon meg egy nevet The name can not only contain whitespaces A név nem tartalmazhat csak szóközöket Type: Típus: Description: Leírás: All Day: Egész nap: Starts: Kezdés: Ends: Befejezés: Remind Me: Emlékeztessen: Repeat: Ismétlés: End Repeat: Ismétlés vége: Calendar account: Naptár fiók: Calendar account Naptár fiók Type Típus Description Leírás All Day Egész nap Time: Idő: Time Idő Solar Nap Lunar Hold Starts Kezdés Ends Befejezés Remind Me Emlékeztessen Repeat Ismétlés Daily Naponta Weekdays Hétköznapokon Weekly Hetente Monthly Havonta Yearly Évente End Repeat Ismétlés vége After Utána On Ekkor Cancel button Mégsem Save button Mentés CScheduleOperation All occurrences of a repeating event must have the same all-day status. Az ismétlődő események valamennyiének "egész nap" állapotúnak kell lennie. Do you want to change all occurrences? Minden alkalmat módosítani szeretne? Cancel button Mégsem Change All Összes módosítása You are changing the repeating rule of this event. Módosítja az esemény ismétlődési szabályát. You are deleting an event. Ön töröl egy eseményt. Are you sure you want to delete this event? Biztosan törli ezt az eseményt? Delete button Törlés Do you want to delete all occurrences of this event, or only the selected occurrence? Törlöni szeretné az esemény összes előfordulását, vagy csak a kiválasztott eseményt? Delete All Összes törlése Delete Only This Event Csak ezen esemény törlése Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Törölni szeretné ezt, és az esemény összes jövőbeli előfordulását, vagy csak a kiválasztott eseményt? Delete All Future Events Összes jövőbeli esemény törlése You are changing a repeating event. Ön egy ismétlődő eseményt módosít. Do you want to change only this occurrence of the event, or all occurrences? Csak az esemény ezen előfordulását akarja megváltoztatni, vagy az összes jövőbeni eseményt? All Összes Only This Event Csak ezen esemény Do you want to change only this occurrence of the event, or this and all future occurrences? Csak az esemény ezen előfordulását akarja megváltoztatni, vagy ezt és az összes jövőbeni eseményt? All Future Events Összes jövőbeli esemény You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Szökőhónap lett kiválasztva, ezért a holdnaptár szabályai fognak érvényesülni. OK button OK CScheduleSearchDateItem Y Év M Hónap D Nap CScheduleSearchItem Edit Szerkesztés Delete Törlés All Day Egész nap CScheduleSearchView No search results Nincs keresési eredmény CScheduleView ALL DAY Egész nap CSettingDialog Manual Manuális 15 mins 15 perc 30 mins 30 perc 1 hour 1 óra 24 hours 24 óra Sync Now Szinkronizálás most Last sync Utolsó szinkronizálás Monday Hétfő Sunday Vasárnap 12-hour clock 12 órás óra formátum 24-hour clock 24 órás óra formátum Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 perc) (%1 hour) (%1 óra) (%1 hours) (%1 óra) CTitleWidget Y Éves M Havi W Hét D Napi Search events and festivals Események és fesztiválok keresése CWeekWidget Sun V. Mon H. Tue K. Wed Sze. Thu Cs. Fri P. Sat Szo. CWeekWindow Week Heti Y Év CYearScheduleView All Day Egész nap No event Nincs esemény CYearWindow Y Év CalendarWindow Calendar Naptár Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. A Naptár egy eszköz a dátumok megtekintésére, valamint egy intelligens napi tervező az élet minden dolgának ütemezéséhez. Calendarmainwindow Calendar Naptár Manage Kezelés Privacy Policy Adatvédelmi irányelvek Syncing... Szinkronizálás... Sync successful A szinkronizálás sikeres Sync failed, please try later A szinkronizálás sikertelen, kérjük próbálja később CenterWidget All Day Egész nap DAccountDataBase Work Munka Life Magánélet Other Egyéb DAlarmManager Close button Bezárás One day before start Egy nappal kezdés előtt Remind me tomorrow Emlékeztessen holnap Remind me later Emlékeztessen később 15 mins later 15 perc múlva 1 hour later 1 óra múlva 4 hours later 4 óra múlva Tomorrow Holnap Schedule Reminder Ütemezési emlékeztető %1 to %2 %1-től %2-ig Today Ma DragInfoGraphicsView Edit Szerkesztés Delete Törlés New event Új esemény New Event Új esemény JobTypeListView You are deleting an event type. Ön töröl egy eseménytípust. All events under this type will be deleted and cannot be recovered. Az összes ilyen típusú esemény törlődik, és nem állítható helyre. Cancel button Mégsem Delete button Törlés QObject Account settings Felhasználói fiók beállítások Account Felhasználói fiók Select items to be synced Válassza ki a szinkronizálni kívánt elemeket Events Események General settings Általános beállítások Sync interval Szinkronizálási időintervallum Manage calendar Naptár kezelése Calendar account Naptár fiók Event types Esemény típusok General Általános First day of week A hét első napja Time Idő Return Today Return Ma Return Today Today Return Today Ma ScheduleTypeEditDlg New event type Új esemény típusa Edit event type Eseménytípus szerkesztése Name: Név: Color: Szín: Cancel button Mégsem Save button Mentés The name can not only contain whitespaces A név nem tartalmazhat csak szóközöket Enter a name please Kérjük adjon meg egy nevet Shortcut Help Segítség Delete event Esemény törlése Copy Másolás Cut Kivágás Paste Beillesztés Delete Törlés Select all Összes kijelölése SidebarCalendarWidget Y Év M Hónap TimeJumpDialog Go button Ugrás UserloginWidget Sign In button Bejelentkezés Sign Out button Kijelentkezés YearFrame Y Év today Today Today Ma dde-calendar-5.14.13/translations/dde-calendar-service_id.ts000066400000000000000000000706321473346337000237200ustar00rootroot00000000000000 AccountItem Sync successful Sinkronisasi berhasil Network error Jaringan bermasalah Server exception Kesalahan server Storage full Penyimpanan penuh AccountManager Local account Akun lokal Event types Jenis Event CColorPickerWidget Color Warna Cancel button Batal Save button Simpan CDayMonthView Monday Senin Tuesday Selasa Wednesday Rabu Thursday Kamis Friday Jum'at Saturday Sabtu Sunday Minggu CDayWindow Y T M B D H Lunar Bulan CGraphicsView New Event Peristiwa Baru CMonthScheduleNumItem %1 more 1% lagi CMonthView New event acara baru New Event Acara baru CMonthWindow Y T CMyScheduleView My Event Acara saya OK button OK Delete button Hapus Edit button Sunting CPushButton New event type Jenis event baru CScheduleDlg New Event Acara baru Edit Event Ubah acara End time must be greater than start time Waktu akhir harus lebih lama dari waktu mulai OK button OK Never Tidak pernah At time of event Pada saat acara 15 minutes before 15 menit sebelumnya 30 minutes before 30 menit sebelumnya 1 hour before 1 jam sebelumnya 1 day before 1 hari sebelumnya 2 days before 2 hari sebelumnya 1 week before 1 minggu sebelumnya On start day (9:00 AM) Pada hari mulai (9:00) time(s) waktu Enter a name please Mohon masukkan nama The name can not only contain whitespaces Nama tidak boleh hanya berisi spasi Type: Tipe: Description: Deskripsi: All Day: Sepanjang hari: Starts: Mulai: Ends: Berakhir: Remind Me: Ingatkan Aku: Repeat: Ulangi: End Repeat: Akhir Pengulangan: Calendar account: Akun Kalender: Calendar account Akun Kalender Type Tipe Description Keterangan All Day Semua Hari Time: Waktu: Time Waktu Solar Lunar Bulan Starts Mulai Ends Berakhir Remind Me Ingatkan saya Repeat Ulangi Daily Harian Weekdays Hari kerja Weekly Mingguan Monthly Bulanan Yearly Tahunan End Repeat Akhiri Perulangan After Setelah On Nyala Cancel button Batal Save button Simpan CScheduleOperation All occurrences of a repeating event must have the same all-day status. Semua kemunculan acara berulang harus memiliki status sepanjang hari yang sama. Do you want to change all occurrences? Apakah Anda ingin mengubah semua kejadian? Cancel button Batal Change All Ubah semua You are changing the repeating rule of this event. Anda mengubah aturan pengulangan acara ini. You are deleting an event. Anda sedang menghapus sebuah peristiwa Are you sure you want to delete this event? Anda yakin akan menghapus peristiwa ini? Delete button Hapus Do you want to delete all occurrences of this event, or only the selected occurrence? Apakah Anda ingin menghapus semua kejadian dari peristiwa ini, atau hanya kejadian yang dipilih? Delete All Hapus Semua Delete Only This Event Hapus hanya peristiwa ini Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Apakah Anda ingin menghapus ini dan semua kejadian mendatang dari peristiwa ini, atau hanya kejadian yang dipilih? Delete All Future Events Hapus semua peristiwa yang akan datang You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? All Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y T M B D H CScheduleSearchItem Edit Sunting Delete Hapus All Day Semua Hari CScheduleSearchView No search results Tidak ada hasil pencarian CScheduleView ALL DAY CSettingDialog Manual Manual 15 mins 30 mins 1 hour 1 jam 24 hours Sync Now Last sync Monday Senin Sunday Minggu 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y T M B W D H Search events and festivals CWeekWidget Sun Min Mon Sen Tue Sel Wed Rab Thu Kam Fri Jum Sat Sab CWeekWindow Week Y T CYearScheduleView All Day Semua Hari No event CYearWindow Y T CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Kalender Manage Privacy Policy Syncing... Menyinkronkan... Sync successful Sinkronisasi berhasil Sync failed, please try later CenterWidget All Day Semua Hari DAccountDataBase Work Kerja Life Kehidupan Other Lainnya DAlarmManager Close button Tutup One day before start Remind me tomorrow Remind me later 15 mins later 1 hour later 4 hours later Tomorrow Besok Schedule Reminder %1 to %2 Today Hari ini DragInfoGraphicsView Edit Sunting Delete Hapus New event acara baru New Event Acara baru JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Batal Delete button Hapus QObject Account settings Account Akun Select items to be synced Events General settings Sync interval Manage calendar Calendar account Akun Kalender Event types Jenis Event General Umum First day of week Time Waktu Return Today Return Hari ini Return Today Today Return Today Hari ini ScheduleTypeEditDlg New event type Jenis event baru Edit event type Name: Nama: Color: Cancel button Batal Save button Simpan The name can not only contain whitespaces Nama tidak boleh hanya berisi spasi Enter a name please Mohon masukkan nama Shortcut Help Bantuan Delete event Copy Salin Cut Potong Paste Tempel Delete Hapus Select all Pilih semua SidebarCalendarWidget Y T M B TimeJumpDialog Go button UserloginWidget Sign In button Masuk Sign Out button Keluar YearFrame Y T today Today Today Hari ini dde-calendar-5.14.13/translations/dde-calendar-service_it.ts000066400000000000000000000742311473346337000237370ustar00rootroot00000000000000 AccountItem Sync successful Sincronizzazione riuscita Network error Errore rete Server exception Eccezione del server Storage full Memoria piena AccountManager Local account Account locale Event types Tipi di evento CColorPickerWidget Color Colore Cancel button Annulla Save button Salva CDayMonthView Monday Lunedì Tuesday Martedì Wednesday Mercoledì Thursday Giovedì Friday Venerdì Saturday Sabato Sunday Domenica CDayWindow Y Y M M D D Lunar Lunare CGraphicsView New Event Nuovo evento CMonthScheduleNumItem %1 more %1 in più CMonthView New event Nuovo evento New Event Nuovo evento CMonthWindow Y Y CMyScheduleView My Event I miei eventi OK button OK Delete button Elimina Edit button Modifica CPushButton New event type Nuovo tipo di evento CScheduleDlg New Event Nuovo evento Edit Event Modifica evento End time must be greater than start time La data di fine deve essere maggiore di quella di inizio OK button OK Never Mai At time of event All'ora dell'evento 15 minutes before 15 minuti prima 30 minutes before 30 minuti prima 1 hour before 1 ora prima 1 day before 1 giorno prima 2 days before 2 giorni prima 1 week before 1 settimana prima On start day (9:00 AM) All'inizio della giornata (9:00 AM) time(s) volta(e) Enter a name please Inserisci un nome The name can not only contain whitespaces Il nome non può contenere solo spazi bianchi Type: Tipo: Description: Descrizione: All Day: Tutto il giorno: Starts: Inizio: Ends: Fine: Remind Me: Promemoria: Repeat: Ripetizione: End Repeat: Fine ripetizione: Calendar account: Account calendario: Calendar account Account calendario Type Tipo Description Descrizione All Day Tutto il giorno Time: Ora: Time Ora Solar Solare Lunar Lunare Starts Inizio Ends Fine Remind Me Promemoria Repeat Ripetizione Daily Giornaliera Weekdays Giorni della settimana Weekly Settimanale Monthly Mensile Yearly Annuale End Repeat Fine ripetizione After Dopo On Acceso Cancel button Annulla Save button Salva CScheduleOperation All occurrences of a repeating event must have the same all-day status. Tutte le occorrenze di una ripetizione devono avere i medesimi parametri. Do you want to change all occurrences? Desideri modificare tutte le occorrenze? Cancel button Annulla Change All Cambia tutte You are changing the repeating rule of this event. Stai cambiando le regole di pianificazione di questo evento. You are deleting an event. Stai eliminando un evento. Are you sure you want to delete this event? Sicuro di voler eliminare questo evento? Delete button Elimina Do you want to delete all occurrences of this event, or only the selected occurrence? Desideri eliminare tutte le occorrenze di questo evento, oppure solo quella selezionata? Delete All Eliminale tutte Delete Only This Event Elimina solo questo evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Desideri eliminare questa e tutte le occorrenze successive di questo evento, oppure solo quella selezionata? Delete All Future Events Tutte le occorrenze future You are changing a repeating event. Stai modificando un evento ripetitivo Do you want to change only this occurrence of the event, or all occurrences? Desideri modificare solo questa occorrenza dell'evento, o tutte quelle ad esso associate? All Tutti Only This Event Solo questo evento Do you want to change only this occurrence of the event, or this and all future occurrences? Desideri modificare solo il singolo evento,oppure tutte le future ripetizioni? All Future Events Tutte le future ripetizioni You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Hai selezionato un mese bisestile e ti verrà ricordato secondo le regole del calendario lunare. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Modifica Delete Elimina All Day Tutto il giorno CScheduleSearchView No search results Nessun risultato disponibile CScheduleView ALL DAY Tutto il giorno CSettingDialog Manual Manuale 15 mins 15 minuti 30 mins 30 minuti 1 hour 1 ora 24 hours 24 ore Sync Now Sincronizza ora Last sync Ultima sincronizzazione Monday Lunedì Sunday Domenica 12-hour clock Orologio 12 ore 24-hour clock Orologio 24 ore Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 ora) (%1 hours) (%1 ore) CTitleWidget Y A M M W S D G Search events and festivals Cerca eventi CWeekWidget Sun Dom Mon Lun Tue Mar Wed Mer Thu Gio Fri Ven Sat Sab CWeekWindow Week Settimana Y Y CYearScheduleView All Day Tutto il giorno No event Nessun evento CYearWindow Y Y CalendarWindow Calendar Calendario Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendario è uno strumento per visualizzare il calendario ma anche per pianificare in modo intelligente tutti gli eventi della propria vita quotidiana. Localizzazione italiana a cura di Massimo A. Carofano. Calendarmainwindow Calendar Calendario Manage Gestisci Privacy Policy Privacy Policy Syncing... Sincronizzazione... Sync successful Sincronizzazione riuscita Sync failed, please try later Sincronizzazione fallita, riprova più tardi CenterWidget All Day Tutto il giorno DAccountDataBase Work Lavoro Life Personale Other Altro DAlarmManager Close button Chiudi One day before start Un giorno prima di iniziare Remind me tomorrow Ricordamelo domani Remind me later Ricordamelo piu tardi 15 mins later Dopo 15 minuti 1 hour later Dopo 1 ora 4 hours later Dopo 4 ore Tomorrow Domani Schedule Reminder Pianifica promemoria %1 to %2 %1 a %2 Today Oggi DragInfoGraphicsView Edit Modifica Delete Elimina New event Nuovo evento New Event Nuovo evento JobTypeListView You are deleting an event type. Stai eliminando un tipo di evento. All events under this type will be deleted and cannot be recovered. Tutti gli eventi di questo tipo verranno eliminati e non potranno essere recuperati. Cancel button Annulla Delete button Elimina QObject Account settings Impostazioni account Account Account Select items to be synced Seleziona elementi da sincronizzare Events Eventi General settings Impostazioni generali Sync interval Intervallo di sincronizzazione Manage calendar Gestisci calendario Calendar account Account calendario Event types Tipi di evento General Generale First day of week Primo giorno della settimana Time Ora Return Today Return Oggi Return Today Today Return Today Oggi ScheduleTypeEditDlg New event type Nuovo tipo di evento Edit event type Modifica tipo di evento Name: Nome: Color: Colore: Cancel button Annulla Save button Salva The name can not only contain whitespaces Il nome non può contenere solo spazi bianchi Enter a name please Inserisci un nome Shortcut Help Aiuto Delete event Elimina evento Copy Copia Cut Taglia Paste Incolla Delete Elimina Select all Seleziona tutto SidebarCalendarWidget Y A M M TimeJumpDialog Go button Vai UserloginWidget Sign In button Login Sign Out button Logout YearFrame Y Y today Today Today Oggi dde-calendar-5.14.13/translations/dde-calendar-service_ja.ts000066400000000000000000000703371473346337000237200ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button キャンセル Save button 保存 CDayMonthView Monday 月曜日 Tuesday 火曜日 Wednesday 水曜日 Thursday 木曜日 Friday 金曜日 Saturday 土曜日 Sunday 日曜日 CDayWindow Y M D Lunar CGraphicsView New Event 新規イベント CMonthScheduleNumItem %1 more CMonthView New event 新規イベント New Event 新規イベント CMonthWindow Y CMyScheduleView My Event イベント OK button OK Delete button 削除 Edit button 編集 CPushButton New event type CScheduleDlg New Event 新しイベント Edit Event イベントを編集 End time must be greater than start time 開始時間より前の時間を設定して下さい OK button OK Never しない At time of event イベント時 15 minutes before 15分前 30 minutes before 30分前 1 hour before 1時間前 1 day before 一日前 2 days before 2日前 1 week before 1週間前 On start day (9:00 AM) 開始日 (9:00) に time(s) 回後 Enter a name please The name can not only contain whitespaces Type: 種類: Description: 説明: All Day: 終日: Starts: 開始: Ends: 終了: Remind Me: 通知: Repeat: 繰り返し: End Repeat: 繰り返し終了: Calendar account: Calendar account Type 種類 Description 説明 All Day 終日 Time: Time タイム Solar Lunar Starts 開始 Ends 終了 Remind Me 通知 Repeat 繰り返す Daily 毎日 Weekdays 平日 Weekly 毎週 Monthly 毎月 Yearly 毎年 End Repeat 繰り返し終了 After On オン Cancel button キャンセル Save button 保存 CScheduleOperation All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Cancel button キャンセル Change All すべて変更 You are changing the repeating rule of this event. このイベントの繰り返しルールを変更しています。 You are deleting an event. イベントを削除しています。 Are you sure you want to delete this event? イベントを削除してもよろしいですか? Delete button 削除 Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All 全て削除 Delete Only This Event このイベントのみ削除 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events 今後のイベントをすべて削除 You are changing a repeating event. 繰り返しイベントを変更しています。 Do you want to change only this occurrence of the event, or all occurrences? All すべて Only This Event このイベントのみ Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events 今後のすべてのイベント You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y M D CScheduleSearchItem Edit 編集 Delete 削除 All Day 終日 CScheduleSearchView No search results 検索結果なし CScheduleView ALL DAY 終日 CSettingDialog Manual 手動 15 mins 30 mins 1 hour 1時間 24 hours Sync Now Last sync Monday 月曜日 Sunday 日曜日 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y M W D Search events and festivals CWeekWidget Sun 日曜日 Mon Tue Wed 水曜日 Thu Fri Sat 土曜日 CWeekWindow Week Y CYearScheduleView All Day 終日 No event イベントなし CYearWindow Y CalendarWindow Calendar カレンダー Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. カレンダーは、日付を表示するツールであり、また生活のあらゆることをスケジューリングするスマートデイリープランナーです。 Calendarmainwindow Calendar カレンダー Manage Privacy Policy プライバシーポリシー Syncing... 同期しています… Sync successful Sync failed, please try later CenterWidget All Day 終日 DAccountDataBase Work 仕事 Life 生活 Other その他 DAlarmManager Close button 閉じる One day before start Remind me tomorrow 明日通知 Remind me later 後で通知 15 mins later 1 hour later 4 hours later Tomorrow 明日 Schedule Reminder スケジュール通知 %1 to %2 Today 今日 DragInfoGraphicsView Edit 編集 Delete 削除 New event 新規イベント New Event 新規イベント JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button キャンセル Delete button 削除 QObject Account settings Account アカウント Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General 一般 First day of week Time タイム Return Today Return 今日 Return Today Today Return Today 今日 ScheduleTypeEditDlg New event type Edit event type Name: Color: Cancel button キャンセル Save button 保存 The name can not only contain whitespaces Enter a name please Shortcut Help ヘルプ Delete event イベントを削除 Copy コピー Cut 切り取り Paste 貼り付け Delete 削除 Select all すべて選択 SidebarCalendarWidget Y M TimeJumpDialog Go button Go UserloginWidget Sign In button サインイン Sign Out button サインアウト YearFrame Y today Today Today 今日 dde-calendar-5.14.13/translations/dde-calendar-service_ka.ts000066400000000000000000000755561473346337000237310ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button გაუქმება Save button შენახვა CDayMonthView Monday ორშაბათი Tuesday სამშაბათი Wednesday ოთხშაბათი Thursday ხუთშაბათი Friday პარასკევი Saturday შაბათი Sunday კვირა CDayWindow Y M D Lunar CGraphicsView New Event ახალი ივენთი CMonthScheduleNumItem %1 more %1 მეტი CMonthView New event ახალი ივენთი New Event ახალი ივენთი CMonthWindow Y CMyScheduleView My Event ჩემი ივენთები OK button OK Delete button წაშლა Edit button რედაქტირება CPushButton New event type CScheduleDlg New Event ჩემი ივენთები Edit Event ივენთის რედაქტირება End time must be greater than start time დასრულების დრო უნდა აღემატებოდეს დაწყების დროს OK button OK Never არასდროს At time of event ივენთის სრული დრო 15 minutes before 15 წუთით ადრე 30 minutes before 30 წუთით ადრე 1 hour before 1 საათით ადრე 1 day before 1 დღით ადრე 2 days before 2 დღით ადრე 1 week before 1 კვირით ადრე On start day (9:00 AM) დრის დასაწყისში (9:00 AM) time(s) ჯერ Enter a name please The name can not only contain whitespaces Type: ტიპი: Description: აღწერა: All Day: მთელი დღე: Starts: დასაწყისი: Ends: დასასრული: Remind Me: შემახსენე: Repeat: გამეორება: End Repeat: გამეორების დასასრული: Calendar account: Calendar account Type ტიპი Description აღწერა All Day ყველა დღე Time: Time Solar Lunar Starts დასაწყისი Ends დასასრული Remind Me შემახსენე Repeat განმეორება Daily დღიური Weekdays ვიქენდი Weekly კვირეული Monthly თვიური Yearly წლიური End Repeat განმეორების დასასრული After შემდეგ On ზე Cancel button გაუქმება Save button შენახვა CScheduleOperation All occurrences of a repeating event must have the same all-day status. ყველა განმეორებად მოვლენებს უნდა ჰქონდეს ყველა დღის სტატუს Do you want to change all occurrences? გსურთი მოვლენების შეცვლა? Cancel button გაუქმება Change All ყველას შეცვლა You are changing the repeating rule of this event. თქვენ ცვლით განმეორების რულებს აღნიშნული ივენთისთვის You are deleting an event. თქვენ შლით ივენთს Are you sure you want to delete this event? დაწრმუნებული ხართ, რომ გსურთ ამ ივენთის წაშლა? Delete button წაშლა Do you want to delete all occurrences of this event, or only the selected occurrence? გსრუთ აღნიშნული მოვლენების ივენთიდან ამოშლა? Delete All ყველას წაშლა Delete Only This Event მხოლოდ ამ ივენთის წაშლა Do you want to delete this and all future occurrences of this event, or only the selected occurrence? გსურთ წაშალოთ ყველა შემდგომი მოვლენა, თუ მხოლოდ არჩეული მოვლენები? Delete All Future Events ყველა მომდევნო მოვლენის წაშლა You are changing a repeating event. თქვენ ცვლით განმეორებად ივენთს Do you want to change only this occurrence of the event, or all occurrences? გსრუთ ყველა მოვლენის შეცვლა, თუ მხოლოდ მონიშნულის? All ყველა Only This Event მხოლოდ ეს ივენთი Do you want to change only this occurrence of the event, or this and all future occurrences? მხოლოდ ამ ერთი მოვლენის შეცვლა, თუ ყველა მომდევნო მოვლენის შეცვლა? All Future Events ყველა მომდევნო ივენთი You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y M D CScheduleSearchItem Edit რედაქტირება Delete წაშლა All Day ყველა დღე CScheduleSearchView No search results არ არის ძებნის რეზულტატი CScheduleView ALL DAY ყველა დღე CSettingDialog Manual მექნიკურად 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Monday ორშაბათი Sunday კვირა 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y M W D Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week კვირა Y CYearScheduleView All Day ყველა დღე No event არ არის ივენთი CYearWindow Y CalendarWindow Calendar კალენდარი Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. კალენდარი არის ხელსაწყო თარიღების სანახავად და გრაფიკის დასაგეგმად Calendarmainwindow Calendar კალენდარი Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day ყველა დღე DAccountDataBase Work სამსახური Life ცხოვრება Other სხვა DAlarmManager Close button დახურვა One day before start დაწყებამდე 1 დღით ადრე Remind me tomorrow შემახსენე ხვალ Remind me later შემახსენე მოგვიანებით 15 mins later 1 hour later 4 hours later Tomorrow ხვალ Schedule Reminder შეხსენების დაგეგმვა %1 to %2 %1 დან %2 Today დღეს DragInfoGraphicsView Edit რედაქტირება Delete წაშლა New event ახალი ივენთი New Event ახალი ივენთი JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button გაუქმება Delete button წაშლა QObject Account settings Account Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General ძირითადი First day of week Time Return Today Return დღეს Return Today Today Return Today დღეს ScheduleTypeEditDlg New event type Edit event type Name: Color: Cancel button გაუქმება Save button შენახვა The name can not only contain whitespaces Enter a name please Shortcut Help დახმარება Delete event ივენთის წაშლა Copy კოპირება Cut ამოჭრა Paste ჩასმა Delete წაშლა Select all ყველას მონიშნვა SidebarCalendarWidget Y M TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y today Today Today დღეს dde-calendar-5.14.13/translations/dde-calendar-service_kab.ts000066400000000000000000000705271473346337000240640ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button Sefsex Save button Sekles CDayMonthView Monday Arim Tuesday Aram Wednesday Ahad Thursday Amhad Friday Sem Saturday Sed Sunday Acer CDayWindow Y Aseggas M Ayyur D Ass Lunar CGraphicsView New Event Tadyant tamaynut CMonthScheduleNumItem %1 more Ugar n 1% CMonthView New event Tadyant tamaynut New Event Tadyant tamaynut CMonthWindow Y Aseggas CMyScheduleView My Event Tadyant-iw OK button IH Delete button Kkes Edit button Ẓreg CPushButton New event type CScheduleDlg New Event Tadyant tamaynut Edit Event Ẓreg tadyant End time must be greater than start time Akud n taggara yezmer d netta ara igerrzen ɣef wakud n tazwara OK button IH Never Werǧin At time of event Deg wakud n tedyant 15 minutes before 15 tesdatin send 30 minutes before 30 tesdatin send 1 hour before 1 usrag send 1 day before 1 wass send 2 days before 2 wussan send 1 week before 1 dduṛt send On start day (9:00 AM) Deg tazwara n wass (9:00 SRG) time(s) Akud (akuden) Enter a name please The name can not only contain whitespaces Type: Anaw: Description: Aglam: All Day: Yal ass: Starts: Yebda Ends: Yekfa Remind Me: Smekti-yi-d: Repeat: Ales End Repeat: Taggara n wallus: Calendar account: Calendar account Type Anaw Description Aglam All Day Meṛṛa ass Time: Time Solar Lunar Starts Yebda Ends Yekfa Remind Me Smekti-yi-d Repeat Ales Daily S wass Weekdays Ussan n yimalas Weekly S yimalas Monthly S wayyur Yearly S useggas End Repeat Taggara n wallus After Seld On Ɣef Cancel button Sefsex Save button Sekles CScheduleOperation All occurrences of a repeating event must have the same all-day status. Meṛṛa timeḍriwin n tedyant i d-yettuɣalen ilaq ad sɛunt yiwen waddad i wass kamel. Do you want to change all occurrences? Tebɣiḍ ad tesnefleḍ meṛṛa timeḍriwin? Cancel button Sefsex Change All Senfel kullec You are changing the repeating rule of this event. Tbeddleḍ alugen i d-yettuɣalen n tedyant-a. You are deleting an event. Tekkseḍ yiwet tedyant. Are you sure you want to delete this event? D tidet tebɣiḍ ad tekkseḍ tadyant-a? Delete button Kkes Do you want to delete all occurrences of this event, or only the selected occurrence? Tebɣiḍ ad tekkseḍ meṛṛa timeḍriwin n tedyant-a neɣ tid kan i d-yettwafernen? Delete All Kkes kullec Delete Only This Event Kkes kan tadyant-a Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Tebɣiḍ ad tekkseḍ timeḍriwt-a d tid meṛṛa i d-iteddun, neɣ d tid kan i d-yettufernen? Delete All Future Events Kkes meṛṛa tidyanin i d-iteddun You are changing a repeating event. Tbeddleḍ tadyant i d-yettuɣalen. Do you want to change only this occurrence of the event, or all occurrences? Tebɣiḍ ad tbeddleḍ timeḍriwt-agi kan n tedyant, neɣ meṛṛa timeḍriwen? All Meṛṛa Only This Event Tadyant-agi kan Do you want to change only this occurrence of the event, or this and all future occurrences? Tebɣiḍ ad tbeddleḍ timeḍriwt-a n tedyant, neɣ tagi d meṛṛa timeḍriwen i d-iteddun? All Future Events Tidyanin akk i d-iteddun You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button IH CScheduleSearchDateItem Y Aseggas M Ayyur D Ass CScheduleSearchItem Edit Ẓreg Delete Kkes All Day Meṛṛa ass CScheduleSearchView No search results Ulac igmaḍ n unadi CScheduleView ALL DAY YAL ASS CSettingDialog Manual S ufus 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Monday Arim Sunday Acer 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Aseggas M Ayyur W Imalas D Ass Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Dduṛt Y Aseggas CYearScheduleView All Day Meṛṛa ass No event Ulac tadyant CYearWindow Y Aseggas CalendarWindow Calendar Awitay Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Awitay d afecku i uskan n wazemz akked daɣen d aɣawas n yal ass i usɣiwes n wayen akk ara tgeḍ deg tudert. Calendarmainwindow Calendar Awitay Manage Privacy Policy Tasertit n tbaḍnit Syncing... Amtawi... Sync successful Sync failed, please try later CenterWidget All Day Yal ass DAccountDataBase Work Amahil Life Tudert Other Wayeḍ DAlarmManager Close button Mdel One day before start Yiwen wass send beddu Remind me tomorrow Smekti-yi-d azekka Remind me later Smekti-yi-d ticki 15 mins later 1 hour later 4 hours later Tomorrow Azekka Schedule Reminder Asmekti s usɣiwes %1 to %2 %1 ɣer %2 Today Ass-a DragInfoGraphicsView Edit Ẓreg Delete Kkes New event Tadyant tamaynut New Event Tadyant tamaynut JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Sefsex Delete button Kkes QObject Account settings Account Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General Amatu First day of week Time Return Today Return Ass-a Return Today Today Return Today Ass-a ScheduleTypeEditDlg New event type Edit event type Name: Isem: Color: Cancel button Sefsex Save button Sekles The name can not only contain whitespaces Enter a name please Shortcut Help Tallalt Delete event Kkes tadyant Copy Nɣel Cut Gzem Paste Senteḍ Delete Kkes Select all Fren kullec SidebarCalendarWidget Y Aseggas M Ayyur TimeJumpDialog Go button UserloginWidget Sign In button Kcem Sign Out button Ffeɣ YearFrame Y Aseggas today Today Today Ass-a dde-calendar-5.14.13/translations/dde-calendar-service_km_KH.ts000066400000000000000000000764051473346337000243210ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button បោះបង់ Save button រក្សាទុក CDayMonthView Monday ថ្ងៃចន្ទ Tuesday ថ្ងៃអង្គារ Wednesday ថ្ងៃពុធ Thursday ថ្ងៃព្រហស្បតិ៍ Friday ថ្ងៃសុក្រ Saturday ថ្ងៃសៅរ៍ Sunday ថ្ងៃអាទិត្យ CDayWindow Y ឆ្នាំ M ខែ D ថ្ងៃ Lunar CGraphicsView New Event ព្រឹត្តិការណ៍ថ្មី CMonthScheduleNumItem %1 more CMonthView New event ព្រឹត្តិការណ៍ថ្មី New Event ព្រឹត្តិការណ៍ថ្មី CMonthWindow Y ឆ្នាំ CMyScheduleView My Event ព្រឹត្តិការណ៍របស់ខ្ញុំ OK button យល់ព្រម Delete button លុប Edit button កែសម្រួល CPushButton New event type CScheduleDlg New Event ព្រឹត្តិការណ៍ថ្មី Edit Event កែព្រឹត្តិការណ៍ End time must be greater than start time OK button យល់ព្រម Never មិនដែល At time of event នៅពេលព្រឹត្តិការណ៍ 15 minutes before 15 នាទីមុន 30 minutes before 30 នាទីមុន 1 hour before 1 ម៉ោងមុន 1 day before 1 ថ្ងៃមុន 2 days before 2 ថ្ងៃមុន 1 week before 1 សប្តាហ៍មុន On start day (9:00 AM) នៅថ្ងៃចាប់ផ្តើម (9:00 ព្រឹក) time(s) ដង() Enter a name please The name can not only contain whitespaces Type: ប្រភេទ: Description: ការពិពណ៌នាសង្ខេប: All Day: ពេញមួយថ្ងៃ៖ Starts: ចាប់ផ្តើម៖ Ends: បញ្ចប់៖ Remind Me: រំឭក​ខ្ញុំ: Repeat: ធ្វើម្តងទៀត៖ End Repeat: បញ្ចប់ម្តងទៀត៖ Calendar account: Calendar account Type Description All Day ពេញមួយថ្ងៃ Time: Time Solar Lunar Starts Ends Remind Me Repeat Daily រាល់ថ្ងៃ Weekdays ថ្ងៃធ្វើការ Weekly ប្រចាំសប្តាហ៍ Monthly ប្រចាំខែ Yearly ប្រចាំឆ្នាំ End Repeat After បន្ទាប់ពី On បើក Cancel button បោះបង់ Save button រក្សាទុក CScheduleOperation All occurrences of a repeating event must have the same all-day status. រាល់ការកើតឡើងនៃព្រឹត្តិការណ៍ដដែលៗត្រូវតែមានស្ថានភាពពេញមួយថ្ងៃ។ Do you want to change all occurrences? តើអ្នកចង់ផ្លាស់ប្តូរការកើតឡើងទាំងអស់ទេ? Cancel button បោះបង់ Change All ផ្លាស់ប្តូរទាំងអស់ You are changing the repeating rule of this event. អ្នកកំពុងផ្លាស់ប្តូរវិធានដដែលៗនៃព្រឹត្តិការណ៍នេះ។ You are deleting an event. អ្នកកំពុងលុបព្រឹត្តិការណ៍មួយ។ Are you sure you want to delete this event? តើអ្នកប្រាកដជាចង់លុបព្រឹត្តិការណ៍នេះឬ? Delete button លុប Do you want to delete all occurrences of this event, or only the selected occurrence? តើអ្នកចង់លុបរាល់ការកើតឡើងនៃព្រឹត្តិការណ៍នេះឬតែការកើតឡើងដែលបានជ្រើសរើសទេ? Delete All លុបទាំងអស់ Delete Only This Event លុបតែព្រឹត្តិការណ៍នេះ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? តើអ្នកចង់លុបវានិងការកើតឡើងនាពេលអនាគតនៃព្រឹត្តិការណ៍នេះឬមានតែការកើតឡើងដែលបានជ្រើសរើសទេ? Delete All Future Events លុបព្រឹត្តិការណ៍អនាគតទាំងអស់ You are changing a repeating event. អ្នកកំពុងផ្លាស់ប្តូរព្រឹត្តិការណ៍ដដែលៗ។ Do you want to change only this occurrence of the event, or all occurrences? តើអ្នកចង់ផ្លាស់ប្តូរតែការកើតឡើងនៃព្រឹត្តិការណ៍នេះឬការកើតឡើងទាំងអស់ទេ? All ទាំងអស់ Only This Event តែព្រឹត្តិការណ៍នេះទេ Do you want to change only this occurrence of the event, or this and all future occurrences? តើអ្នកចង់ផ្លាស់ប្តូរតែការកើតឡើងនៃព្រឹត្តិការណ៍នេះឬព្រឹត្តិការណ៍នេះនិងការកើតឡើងនាពេលអនាគតទេ? All Future Events ព្រឹត្តិការណ៍អនាគតទាំងអស់ You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button យល់ព្រម CScheduleSearchDateItem Y ឆ្នាំ M ខែ D ថ្ងៃ CScheduleSearchItem Edit កែសម្រួល Delete លុប All Day ពេញមួយថ្ងៃ CScheduleSearchView No search results គ្មានលទ្ធផលស្វែងរកទេ CScheduleView ALL DAY ពេញមួយថ្ងៃ CSettingDialog Manual 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Monday ថ្ងៃចន្ទ Sunday ថ្ងៃអាទិត្យ 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y ឆ្នាំ M ខែ W សប្ដាហ៍ D ថ្ងៃ Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week សប្ដាហ៍ Y ឆ្នាំ CYearScheduleView All Day ពេញមួយថ្ងៃ No event គ្មានព្រឹត្តិការណ៍ CYearWindow Y ឆ្នាំ CalendarWindow Calendar ប្រតិទិន Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ប្រតិទិនគឺជាឧបករណ៍សម្រាប់មើលកាលបរិច្ឆេទហើយក៏ជាអ្នករៀបចំផែនការប្រចាំថ្ងៃដ៏ឆ្លាតវៃផងដែរដើម្បីរៀបចំកាលវិភាគទាំងអស់ក្នុងជីវិត។ Calendarmainwindow Calendar ប្រតិទិន Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day ពេញមួយថ្ងៃ DAccountDataBase Work ធ្វើការ Life ជីវិត Other ផ្សេងទៀត DAlarmManager Close button បិទ One day before start Remind me tomorrow Remind me later 15 mins later 1 hour later 4 hours later Tomorrow Schedule Reminder %1 to %2 Today ថ្ងៃនេះ DragInfoGraphicsView Edit កែសម្រួល Delete លុប New event ព្រឹត្តិការណ៍ថ្មី New Event ព្រឹត្តិការណ៍ថ្មី JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button បោះបង់ Delete button លុប QObject Account settings Account Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General First day of week Time Return Today Return ថ្ងៃនេះ Return Today Today Return Today ថ្ងៃនេះ ScheduleTypeEditDlg New event type Edit event type Name: Color: Cancel button បោះបង់ Save button រក្សាទុក The name can not only contain whitespaces Enter a name please Shortcut Help ជំនួយ Delete event លុបព្រឹត្តិការណ៍ Copy ចម្លង Cut កាត់ Paste បិទភ្ជាប់ Delete លុប Select all ជ្រើស​យក​ទាំងអស់ SidebarCalendarWidget Y ឆ្នាំ M ខែ TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y ឆ្នាំ today Today Today ថ្ងៃនេះ dde-calendar-5.14.13/translations/dde-calendar-service_ko.ts000066400000000000000000000714221473346337000237330ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color 색상 Cancel button 취소 Save button 저장 CDayMonthView Monday 월요일 Tuesday 화요일 Wednesday 수요일 Thursday 목요일 Friday 금요일 Saturday 토요일 Sunday 일요일 CDayWindow Y M D Lunar CGraphicsView New Event 새 이벤트 CMonthScheduleNumItem %1 more %1 더 CMonthView New event 새 이벤트 New Event 새 이벤트 CMonthWindow Y CMyScheduleView My Event 나의 이벤트 OK button 확인 Delete button 삭제 Edit button 편집 CPushButton New event type CScheduleDlg New Event 새 이벤트 Edit Event 이벤트 편집 End time must be greater than start time 종료 시간은 시작 시간보다 커야 합니다. OK button 확인 Never 없음 At time of event 이벤트 시 15 minutes before 15분 전 30 minutes before 30분 전 1 hour before 1시간 전 1 day before 1일 전 2 days before 2일 전 1 week before 1주일 전 On start day (9:00 AM) 시작일 (오전 9:00) time(s) 시간 Enter a name please The name can not only contain whitespaces Type: 종류: Description: 설명: All Day: 하루 종일: Starts: 시작: Ends: 종료 Remind Me: 알림 메시지: Repeat: 반복: End Repeat: 종료 반복: Calendar account: Calendar account Type 타입 Description 설명 All Day 하루 종일 Time: Time 시간 Solar Lunar Starts 시작 Ends 종료 Remind Me 알림 Repeat 다시 Daily 매일 Weekdays 요일 Weekly 매주 Monthly 매달 Yearly 매년 End Repeat 반복 종료 After 이후 On 진행 Cancel button 취소 Save button 저장 CScheduleOperation All occurrences of a repeating event must have the same all-day status. 반복 이벤트의 모든 발생은 하루 종일 동일한 상태를 가져야 합니다. Do you want to change all occurrences? 모든 항목을 변경하시겠습니까? Cancel button 취소 Change All 모두 변경 You are changing the repeating rule of this event. 이 이벤트의 반복 규칙을 변경하고 있습니다. You are deleting an event. 이벤트를 삭제하는 중. Are you sure you want to delete this event? 이 이벤트를 삭제하시겠습니까? Delete button 삭제 Do you want to delete all occurrences of this event, or only the selected occurrence? 이 이벤트의 모든 발생 항목을 삭제하시겠습니까, 아니면 선택한 발생 항목만 삭제하시겠습니까? Delete All 모두 삭제 Delete Only This Event 이 이벤트만 삭제 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? 이 이벤트와 이 이벤트의 모든 향후 발생 항목을 삭제하시겠습니까? 아니면 선택한 발생 항목만 삭제하시겠습니까? Delete All Future Events 모든 향후 이벤트 삭제 You are changing a repeating event. 반복 이벤트를 변경하는 중입니다. Do you want to change only this occurrence of the event, or all occurrences? 이벤트의 이 발생만 변경하시겠습니까, 아니면 모든 발생을 변경하시겠습니까? All 모두 Only This Event 이 이벤트만 Do you want to change only this occurrence of the event, or this and all future occurrences? 이벤트의 이 발생만 변경하시겠습니까, 아니면 이 발생과 향후 모든 발생만 변경하시겠습니까? All Future Events 모든 향후 이벤트 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button 확인 CScheduleSearchDateItem Y M D CScheduleSearchItem Edit 편집 Delete 삭제 All Day 하루 종일 CScheduleSearchView No search results 검색결과가 없습니다. CScheduleView ALL DAY 하루 종일 CSettingDialog Manual 수동 15 mins 30 mins 1 hour 1 시간 24 hours Sync Now Last sync Monday 월요일 Sunday 일요일 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y M W D Search events and festivals CWeekWidget Sun 일요일 Mon 월요일 Tue Wed 수요일 Thu Fri 금요일 Sat 토요일 CWeekWindow Week 일주일 Y CYearScheduleView All Day 하루 종일 No event 이벤트 없음 CYearWindow Y CalendarWindow Calendar 달력 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 캘린더는 날짜를 볼 수있는 도구이며, 일상의 모든 것을 예약 할 수있는 현명한 일일 플래너입니다 Calendarmainwindow Calendar 달력 Manage Privacy Policy 개인정보 보호정책 Syncing... 동기화중... Sync successful Sync failed, please try later CenterWidget All Day 하루 종일 DAccountDataBase Work 작업 Life 생활 Other 기타 DAlarmManager Close button 닫기 One day before start 시작 하루 전 Remind me tomorrow 내일 알림 Remind me later 나중에 알림 15 mins later 1 hour later 4 hours later Tomorrow 내일 Schedule Reminder 일정 알림 %1 to %2 Today 오늘 DragInfoGraphicsView Edit 편집 Delete 삭제 New event 새 이벤트 New Event 새 이벤트 JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button 취소 Delete button 삭제 QObject Account settings Account 계정 Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General 일반 First day of week Time 시간 Return Today Return 오늘 Return Today Today Return Today 오늘 ScheduleTypeEditDlg New event type Edit event type Name: 이름: Color: Cancel button 취소 Save button 저장 The name can not only contain whitespaces Enter a name please Shortcut Help 도움말 Delete event 이벤트 삭제 Copy 복사 Cut 잘라내기 Paste 붙여넣기 Delete 삭제 Select all 전체 선택 SidebarCalendarWidget Y M TimeJumpDialog Go button Go UserloginWidget Sign In button 로그인 Sign Out button 로그아웃 YearFrame Y today Today Today 오늘 dde-calendar-5.14.13/translations/dde-calendar-service_lt.ts000066400000000000000000000660711473346337000237450ustar00rootroot00000000000000 AccountItem Sync successful Network error Tinklo klaida Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Spalva Cancel button Atsisakyti Save button Įrašyti CDayMonthView Monday Pirmadienis Tuesday Antradienis Wednesday Trečiadienis Thursday Ketvirtadienis Friday Penktadienis Saturday Šeštadienis Sunday Sekmadienis CDayWindow Y M M m D d Lunar CGraphicsView New Event Naujas įvykis CMonthScheduleNumItem %1 more CMonthView New event Naujas įvykis New Event Naujas įvykis CMonthWindow Y M CMyScheduleView My Event OK button Gerai Delete button Ištrinti Edit button Redaguoti CPushButton New event type CScheduleDlg New Event Naujas įvykis Edit Event End time must be greater than start time OK button Gerai Never Niekada At time of event 15 minutes before 30 minutes before 1 hour before 1 day before 2 days before 1 week before On start day (9:00 AM) time(s) Enter a name please The name can not only contain whitespaces Type: Tipas: Description: Aprašas: All Day: Starts: Ends: Remind Me: Repeat: End Repeat: Calendar account: Kalendoriaus paskyra: Calendar account Kalendoriaus paskyra Type Tipas Description Aprašas All Day Time: Time Laikas Solar Lunar Starts Ends Remind Me Repeat Pakartokite Daily Weekdays Weekly Monthly Yearly End Repeat After On Įjungta Cancel button Atsisakyti Save button Įrašyti CScheduleOperation All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Cancel button Atsisakyti Change All You are changing the repeating rule of this event. You are deleting an event. Are you sure you want to delete this event? Ar tikrai norite ištrinti šį įvykį? Delete button Ištrinti Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? All Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button Gerai CScheduleSearchDateItem Y M M m D d CScheduleSearchItem Edit Redaguoti Delete Ištrinti All Day CScheduleSearchView No search results Paieškos rezultatų nėra CScheduleView ALL DAY CSettingDialog Manual Rankinis 15 mins 15 minučių 30 mins 30 minučių 1 hour 1 valanda 24 hours 24 valandos Sync Now Last sync Monday Pirmadienis Sunday Sekmadienis 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y M M m W D d Search events and festivals CWeekWidget Sun Sek Mon Pir Tue Ant Wed Tre Thu Ket Fri Pen Sat Šeš CWeekWindow Week Savaitė Y M CYearScheduleView All Day No event CYearWindow Y M CalendarWindow Calendar Kalendorius Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Kalendorius Manage Privacy Policy Syncing... Sinchronizuojama... Sync successful Sync failed, please try later CenterWidget All Day DAccountDataBase Work Darbas Life Gyvenimas Other Kita DAlarmManager Close button Užverti One day before start Vieną dieną prieš įvykį Remind me tomorrow Priminti rytoj Remind me later Priminti vėliau 15 mins later 1 hour later 4 hours later Tomorrow Rytojus Schedule Reminder Planuoti priminimą %1 to %2 %1 iki %2 Today Šiandien DragInfoGraphicsView Edit Redaguoti Delete Ištrinti New event Naujas įvykis New Event Naujas įvykis JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Atsisakyti Delete button Ištrinti QObject Account settings Paskyros nustatymai Account Paskyra Select items to be synced Events General settings Sync interval Manage calendar Tvarkyti kalendorių Calendar account Event types General Bendra First day of week Time Laikas Return Today Return Šiandien Return Today Today Return Today Šiandien ScheduleTypeEditDlg New event type Edit event type Name: Pavadinimas: Color: Spalva: Cancel button Atsisakyti Save button Įrašyti The name can not only contain whitespaces Enter a name please Shortcut Help Žinynas Delete event Ištrinti įvykį Copy Kopijuoti Cut Iškirpti Paste Įdėti Delete Ištrinti Select all Žymėti viską SidebarCalendarWidget Y M M m TimeJumpDialog Go button UserloginWidget Sign In button Prisijungti Sign Out button Atsijungti YearFrame Y M today Today Today Šiandien dde-calendar-5.14.13/translations/dde-calendar-service_lv.ts000066400000000000000000000702451473346337000237450ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button Atcelt Save button Saglabāt CDayMonthView Monday Pirmdiena Tuesday Otrdiena Wednesday Trešdiena Thursday Ceturtdiena Friday Piektdiena Saturday Sestdiena Sunday Svētdiena CDayWindow Y G M M D D Lunar CGraphicsView New Event Jauns notikums CMonthScheduleNumItem %1 more %1 vairāk CMonthView New event Jauns notikums New Event Jauns notikums CMonthWindow Y G CMyScheduleView My Event Mans notikums OK button Labi Delete button Dzēst Edit button Rediģēt CPushButton New event type CScheduleDlg New Event Jauns notikums Edit Event Rediģēt notikumu End time must be greater than start time Beigu laikam ir jābūt vēlākam kā sākuma laikam OK button Labi Never Nekad At time of event Notikuma laikā 15 minutes before 15 minūtes pirms 30 minutes before 30 minūtes pirms 1 hour before 1 Stundu pirms 1 day before 1 Dienu pirms 2 days before 2 Dienas pirms 1 week before 1 Nedēļu pirms On start day (9:00 AM) Dienas sākumā (9:00) time(s) reize(s) Enter a name please The name can not only contain whitespaces Type: Veids: Description: Apraksts: All Day: Visu dienu: Starts: Sākas: Ends: Beidzas: Remind Me: Atgādināt: Repeat: Atkārtot: End Repeat: Beigt atkārtošanu: Calendar account: Calendar account Type Veids Description Apraksts All Day Visu dienu Time: Time Solar Lunar Starts Sākas Ends Beidzas Remind Me Atgādināt Repeat Atkārtot Daily Katru dienu Weekdays Darba dienās Weekly Katru nedēļu Monthly Katru mēnesi Yearly Katru gadu End Repeat Beigt atkārtošanu After Pēc On Līdz Cancel button Atcelt Save button Saglabāt CScheduleOperation All occurrences of a repeating event must have the same all-day status. Visiem periodiska notikuma atkārtojumiem ir jābūt identiskam visas dienas statusam Do you want to change all occurrences? Vai vēlaties mainīt visus periodiskos atkārtojumus? Cancel button Atcelt Change All Mainīt visus You are changing the repeating rule of this event. Jūs maināt notikuma periodiskas atkārtošanās iestatījumus You are deleting an event. Jūs dzēšat notikumu Are you sure you want to delete this event? Vai esat drošs, ka vēlaties dzēst šo notikumu? Delete button Dzēst Do you want to delete all occurrences of this event, or only the selected occurrence? Jūs vēlaties dzēst visus periodiskos notikumus vai tikai atlasīto notikumu? Delete All Dzēst visu Delete Only This Event Dzēst Tikai Šo Notikumu Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Jūs vēlaties dzēst šo un turpmākos notikums vai tikai šo notikumu? Delete All Future Events Dzēst visus nākotnes notikums You are changing a repeating event. Jūs maināt periodisku notikumu. Do you want to change only this occurrence of the event, or all occurrences? Jūs vēlaties mainīt tikai šo notikumu vai visus periodiskos notikumus? All Visi Only This Event Tikai Šo Notikumu Do you want to change only this occurrence of the event, or this and all future occurrences? Jūs vēlaties mainīt tikai šo notikumu vai šo un visus turpmākos notikumus? All Future Events Visus Turpmākos Notikumus You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button Labi CScheduleSearchDateItem Y G M M D D CScheduleSearchItem Edit Rediģēt Delete Dzēst All Day Visu dienu CScheduleSearchView No search results Nav atrasts neviens rezultāts CScheduleView ALL DAY VISU DIENU CSettingDialog Manual 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Monday Pirmdiena Sunday Svētdiena 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y G M M W N D D Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Nedēļa Y G CYearScheduleView All Day Visu dienu No event Nav notikumu CYearWindow Y G CalendarWindow Calendar Kalendārs Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendārs ir palīgs ikdienas dzīvē kas palīdz sakārtot tavu laiku. Calendarmainwindow Calendar Kalendārs Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day Visu dienu DAccountDataBase Work Darbs Life Dzīve Other Cits DAlarmManager Close button Aizvērt One day before start Remind me tomorrow Remind me later 15 mins later 1 hour later 4 hours later Tomorrow Schedule Reminder %1 to %2 Today Šodiena DragInfoGraphicsView Edit Rediģēt Delete Dzēst New event Jauns notikums New Event Jauns notikums JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Atcelt Delete button Dzēst QObject Account settings Account Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General First day of week Time Return Today Return Šodiena Return Today Today Return Today Šodiena ScheduleTypeEditDlg New event type Edit event type Name: Color: Cancel button Atcelt Save button Saglabāt The name can not only contain whitespaces Enter a name please Shortcut Help Palīdzība Delete event Dzēst notikumu Copy Kopēt Cut Izgriezt Paste Ielīmēt Delete Dzēst Select all Izvēlēties visus SidebarCalendarWidget Y G M M TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y G today Today Today Šodiena dde-calendar-5.14.13/translations/dde-calendar-service_ms.ts000066400000000000000000000711021473346337000237340ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Warna Cancel button Batal Save button Simpan CDayMonthView Monday Isnin Tuesday Selasa Wednesday Rabu Thursday Khamis Friday Jumaat Saturday Sabtu Sunday Ahad CDayWindow Y T M B D H Lunar CGraphicsView New Event Peristiwa Baharu CMonthScheduleNumItem %1 more %1 lagi CMonthView New event Peristiwa baharu New Event Peristiwa Baharu CMonthWindow Y T CMyScheduleView My Event Peristiwa Saya OK button OK Delete button Padam Edit button Sunting CPushButton New event type CScheduleDlg New Event Peristiwa Baharu Edit Event Sunting Peristiwa End time must be greater than start time Masa tamat mesti lebih besar dari masa mula OK button OK Never Tidak sesekali At time of event Semua tempoh peristiwa 15 minutes before 15 minit sebelum 30 minutes before 30 minit sebelum 1 hour before 1 jam sebelum 1 day before 1 hari sebelum 2 days before 2 hari sebelum 1 week before 1 minggu sebelum On start day (9:00 AM) Pada hari mula (9:00 AM) time(s) kali Enter a name please The name can not only contain whitespaces Type: Jenis: Description: Keterangan: All Day: Sepanjang Hari: Starts: Mula: Ends: Tamat: Remind Me: Ingatkan Saya: Repeat: Ulang: End Repeat: Tamat Ulang: Calendar account: Calendar account Type Jenis Description Keterangan All Day Sepanjang Hari Time: Time Masa Solar Lunar Starts Mula Ends Tamat Remind Me Ingatkan Saya Repeat Ulang Daily Harian Weekdays Hari Bekerja Weekly Mingguan Monthly Bulanan Yearly Tahunan End Repeat Tamat Ulang After Selepas On Pada Cancel button Batal Save button Simpan CScheduleOperation All occurrences of a repeating event must have the same all-day status. Semua kemunculan bagi peristiwa berulang mesti mempunyai status sepanjang-hari yang sama. Do you want to change all occurrences? Anda pasti mahu mengubah semua kemunculan? Cancel button Batal Change All Ubah Semua You are changing the repeating rule of this event. Anda mengubah peraturan berulang bagi peristiwa ini. You are deleting an event. Anda telah memadam satu peristiwa. Are you sure you want to delete this event? Anda pasti mahu memadam peristiwa ini? Delete button Padam Do you want to delete all occurrences of this event, or only the selected occurrence? Anda pasti mahu memadam semua kemunculan peristiwa ini, atau hanya kemunculan terpilih? Delete All Padam Semua Delete Only This Event Hanya Padam Peristiwa Ini Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Anda pasti mahu memadam semua kemunculan peristiwa ini dan akan datang, atau hanya kemunculan terpilih? Delete All Future Events Padam Semua Peristiwa Akan Datang You are changing a repeating event. Anda mengubah satu peristiwa berulang. Do you want to change only this occurrence of the event, or all occurrences? Anda pasti mahu mengubah hanya kemunculan peristiwa ini, atau semua kemunculan? All Semua Only This Event Hanya Peristiwa Ini Do you want to change only this occurrence of the event, or this and all future occurrences? Anda pasti mahu mengubah hanya kemunculan peristiwa ini, atau ini dan semua kemunculan masa hadapan? All Future Events Semua Peristiwa Masa Hadapan You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y T M B D H CScheduleSearchItem Edit Sunting Delete Padam All Day Sepanjang Hari CScheduleSearchView No search results Tiada keputusan gelintar CScheduleView ALL DAY SEPANJANG HARI CSettingDialog Manual Manual 15 mins 30 mins 1 hour 1 jam 24 hours Sync Now Last sync Monday Isnin Sunday Ahad 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y T M B W M D H Search events and festivals CWeekWidget Sun Ahd Mon Isn Tue Sel Wed Rab Thu Kha Fri Jum Sat Sab CWeekWindow Week Minggu Y T CYearScheduleView All Day Sepanjang Hari No event Tiada peristiwa CYearWindow Y T CalendarWindow Calendar Kalendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendar ialah sebuah alat untuk melihat tarikh, dan juga satu perancang harian pintar yang dapat menjadualkan semua perkara dalam hidup ini. Calendarmainwindow Calendar Kalendar Manage Privacy Policy Dasar Persendirian Syncing... Menyegerak... Sync successful Sync failed, please try later CenterWidget All Day Sepanjang Hari DAccountDataBase Work Kerja Life Lapang Other Lain-lain DAlarmManager Close button Tutup One day before start Satu hari sebelum mula Remind me tomorrow Ingatkan saya esok hari Remind me later Ingatkan saya kemudian 15 mins later 1 hour later 4 hours later Tomorrow Esok Schedule Reminder Peringatan Berjadual %1 to %2 %1 hingga %2 Today Hari ini DragInfoGraphicsView Edit Sunting Delete Padam New event Peristiwa baharu New Event Peristiwa Baharu JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Batal Delete button Padam QObject Account settings Account Akaun Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General Am First day of week Time Masa Return Today Return Hari ini Return Today Today Return Today Hari ini ScheduleTypeEditDlg New event type Edit event type Name: Nama: Color: Cancel button Batal Save button Simpan The name can not only contain whitespaces Enter a name please Shortcut Help Bantuan Delete event Padam peristiwa Copy Salin Cut Potong Paste Tampal Delete Padam Select all Pilih semua SidebarCalendarWidget Y T M B TimeJumpDialog Go button UserloginWidget Sign In button Daftar Masuk Sign Out button Daftar Keluar YearFrame Y T today Today Today Hari ini dde-calendar-5.14.13/translations/dde-calendar-service_nl.ts000066400000000000000000000737671473346337000237510ustar00rootroot00000000000000 AccountItem Sync successful Sychroniseren voltooid Network error Netwerkfout Server exception Serveruitzondering Storage full Geen vrije schijfruimte AccountManager Local account Lokaal account Event types Soorten afspraken CColorPickerWidget Color Kleur Cancel button Annuleren Save button Opslaan CDayMonthView Monday Maandag Tuesday Dinsdag Wednesday Woensdag Thursday Donderdag Friday Vrijdag Saturday Zaterdag Sunday Zondag CDayWindow Y J M M D D Lunar Maan CGraphicsView New Event Nieuwe afspraak CMonthScheduleNumItem %1 more Nog %1 andere CMonthView New event Nieuwe afspraak New Event Nieuwe afspraak CMonthWindow Y J CMyScheduleView My Event Mijn afspraak OK button Oké Delete button Verwijderen Edit button Bewerken CPushButton New event type Nieuw soort afspraak CScheduleDlg New Event Nieuwe afspraak Edit Event Afspraak bewerken End time must be greater than start time De eindtijd moet later zijn dan de begintijd OK button Oké Never Nooit At time of event Bij aanvang 15 minutes before 15 minuten van tevoren 30 minutes before 30 minuten van tevoren 1 hour before 1 uur van tevoren 1 day before 1 dag van tevoren 2 days before 2 dagen van tevoren 1 week before 1 week van tevoren On start day (9:00 AM) Op de dag van de afspraak (9:00 AM) time(s) keer Enter a name please Voer een naam in The name can not only contain whitespaces De naam mag niet alleen uit spaties bestaan Type: Soort: Description: Omschrijving: All Day: Hele dag: Starts: Begint om: Ends: Eindigt om: Remind Me: Herinneren: Repeat: Herhalen: End Repeat: Herhaling eindigt op: Calendar account: Agenda-account: Calendar account Agenda-account Type Soort Description Omschrijving All Day Hele dag Time: Tijdstip: Time Tijdstip Solar Zon Lunar Maan Starts Begint om Ends Eindigt om Remind Me Herinneren Repeat Herhalen Daily Dagelijks Weekdays Weekdagen Weekly Wekelijks Monthly Maandelijks Yearly Jaarlijks End Repeat Herhaling eindigt op After Na On Op Cancel button Annuleren Save button Opslaan CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle afspraken in de reeks moeten voorzien zijn van de status ‘hele dag’. Do you want to change all occurrences? Wil je alle afspraken in de reeks bewerken? Cancel button Annuleren Change All Reeks bewerken You are changing the repeating rule of this event. Je past de herhaalinstellingen van deze afspraak aan. You are deleting an event. Je staat op het punt een afspraak te verwijderen. Are you sure you want to delete this event? Weet je zeker dat je deze afspraak wilt verwijderen? Delete button Verwijderen Do you want to delete all occurrences of this event, or only the selected occurrence? Wil je alle afspraken in de reeks verwijderen of enkel deze? Delete All Reeks verwijderen Delete Only This Event Deze afspraak verwijderen Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Wil je deze en toekomstige afspraken verwijderen of enkel de deze? Delete All Future Events Toekomstige afspraken verwijderen You are changing a repeating event. Je staat op het punt een reeks aan te passen. Do you want to change only this occurrence of the event, or all occurrences? Wil je deze en toekomstige afspraken aanpassen of enkel deze? All Reeks Only This Event Deze afspraak Do you want to change only this occurrence of the event, or this and all future occurrences? Wil je deze en toekomstige afspraken aanpassen of enkel deze? All Future Events Toekomstige afspraken You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Je hebt een schrikkelmaand gekozen. De herinnering wordt op basis van de maankalender getoond. OK button Oké CScheduleSearchDateItem Y J M M D D CScheduleSearchItem Edit Bewerken Delete Verwijderen All Day Hele dag CScheduleSearchView No search results Geen zoekresultaten CScheduleView ALL DAY HELE DAG CSettingDialog Manual Handmatig 15 mins 15 min. 30 mins 30 min. 1 hour 1 uur 24 hours 24 uur Sync Now Nu synchroniseren Last sync Recentste synchronisatie Monday maandag Sunday zondag 12-hour clock 12-uursklok 24-hour clock 24-uursklok Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 min.) (%1 hour) (%1 uur) (%1 hours) (%1 uur) CTitleWidget Y J M M W W D D Search events and festivals Zoeken naar afspraken en evenementen CWeekWidget Sun zo Mon ma Tue di Wed woe Thu do Fri vrij Sat za CWeekWindow Week Week Y J CYearScheduleView All Day Hele dag No event Geen afspraak CYearWindow Y J CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Met Kalender kun je je afspraken en planning beheren, zowel werk als privé. Calendarmainwindow Calendar Kalender Manage Instellingen Privacy Policy Privacybeleid Syncing... Bezig met synchroniseren… Sync successful Sychroniseren voltooid Sync failed, please try later Synchroniseren mislukt - probeer het later opnieuw CenterWidget All Day Hele dag DAccountDataBase Work Werk Life Privé Other Overig DAlarmManager Close button Sluiten One day before start Eén dag van tevoren Remind me tomorrow Herinner me morgen Remind me later Herinner me later 15 mins later 15 min. later 1 hour later 1 uur later 4 hours later 4 uur later Tomorrow Morgen Schedule Reminder Herinnering inplannen %1 to %2 van %1 tot %2 Today Vandaag DragInfoGraphicsView Edit Aanpassen Delete Verwijderen New event Nieuwe afspraak New Event Nieuwe afspraak JobTypeListView You are deleting an event type. Je staat op het punt om een afspraaktype te verwijderen. All events under this type will be deleted and cannot be recovered. Alle bijbehorende afspraken worden verwijderd en kunnen niet worden hersteld. Cancel button Annuleren Delete button Verwijderen QObject Account settings Accountinstellingen Account Account Select items to be synced Selecteer de te synchroniseren items Events Afspraken General settings Algemene instellingen Sync interval Synchroniseren, elke Manage calendar Agenda beheren Calendar account Agenda-account Event types Soorten afspraken General Algemeen First day of week Eerste dag van de week Time Tijdsklok Return Today Return Vandaag Return Today Today Return Today Vandaag ScheduleTypeEditDlg New event type Nieuw soort afspraak Edit event type Afspraaktype bewerken Name: Naam: Color: Kleur: Cancel button Annuleren Save button Opslaan The name can not only contain whitespaces De naam mag niet alleen bestaan uit spaties Enter a name please Voer een naam in Shortcut Help Hulp Delete event Afspraak verwijderen Copy Kopiëren Cut Knippen Paste Plakken Delete Verwijderen Select all Alles selecteren SidebarCalendarWidget Y J M M TimeJumpDialog Go button Ga UserloginWidget Sign In button Inloggen Sign Out button Uitloggen YearFrame Y J today Today Today Vandaag dde-calendar-5.14.13/translations/dde-calendar-service_pl.ts000066400000000000000000000743201473346337000237350ustar00rootroot00000000000000 AccountItem Sync successful Synchronizacja zakończona Network error Błąd sieci Server exception Wyjątek serwera Storage full Pamięć pełna AccountManager Local account Konto lokalne Event types Typy wydarzeń CColorPickerWidget Color Kolor Cancel button Anuluj Save button Zapisz CDayMonthView Monday Poniedziałek Tuesday Wtorek Wednesday Środa Thursday Czwartek Friday Piątek Saturday Sobota Sunday Niedziela CDayWindow Y R M M D D Lunar Księżycowy CGraphicsView New Event Nowe wydarzenie CMonthScheduleNumItem %1 more jeszcze 1% CMonthView New event Nowe wydarzenie New Event Nowe wydarzenie CMonthWindow Y R CMyScheduleView My Event Moje wydarzenie OK button OK Delete button Usuń Edit button Edytuj CPushButton New event type Nowy typ wydarzenia CScheduleDlg New Event Nowe wydarzenie Edit Event Edytuj wydarzenie End time must be greater than start time Czas zakończenia musi być późniejszy niż czas rozpoczęcia OK button OK Never Nigdy At time of event W czasie wydarzenia 15 minutes before 15 minut przed 30 minutes before 30 minut przed 1 hour before 1 godzinę przed 1 day before 1 dzień przed 2 days before 2 dni przed 1 week before 1 tydzień przed On start day (9:00 AM) W dniu rozpoczęcia (9:00) time(s) raz(y) Enter a name please Wprowadź nazwę The name can not only contain whitespaces Nazwa nie może zawierać tylko białych znaków Type: Typ: Description: Opis: All Day: Cały dzień: Starts: Początek: Ends: Koniec: Remind Me: Przypomnij mi: Repeat: Powtórz: End Repeat: Zakończ powtarzanie: Calendar account: Konto kalendarza: Calendar account Konto kalendarza Type Typ Description Opis All Day Cały dzień Time: Czas: Time Czas Solar Słoneczny Lunar Księżycowy Starts Początek Ends Koniec Remind Me Przypomnij mi Repeat Powtórz Daily Codziennie Weekdays W dni robocze Weekly Co tydzień Monthly Co miesiąc Yearly Co rok End Repeat Zakończ Powtarzanie After Po On Cancel button Anuluj Save button Zapisz CScheduleOperation All occurrences of a repeating event must have the same all-day status. Wszystkie wystąpienia powtarzającego się wydarzenia muszą zawierać ten sam stan całodniowy. Do you want to change all occurrences? Czy chcesz zmienić wszystkie wystąpienia? Cancel button Anuluj Change All Zmień wszystkie You are changing the repeating rule of this event. Zmieniasz regułę powtarzania tego wydarzenia. You are deleting an event. Usuwasz wydarzenie. Are you sure you want to delete this event? Czy na pewno chcesz usunąć to wydarzenie? Delete button Usuń Do you want to delete all occurrences of this event, or only the selected occurrence? Czy chcesz usunąć wszystkie wystąpienia tego zdarzenia, czy tylko wybrane wystąpienie? Delete All Usuń wszystkie Delete Only This Event Usuń tylko to wydarzenie Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Czy chcesz usunąć to i wszystkie przyszłe wystąpienia tego wydarzenia, czy tylko wybrane wystąpienie? Delete All Future Events Usuń wszystkie przyszłe wydarzenia You are changing a repeating event. Zmieniasz powtarzające się wydarzenie. Do you want to change only this occurrence of the event, or all occurrences? Czy chcesz zmienić tylko to wystąpienie wydarzenia, czy wszystkie wydarzenia? All Wszystko Only This Event Tylko to wydarzenie Do you want to change only this occurrence of the event, or this and all future occurrences? Czy chcesz zmienić tylko to wystąpienie wydarzenia, czy to i wszystkie przyszłe wydarzenia? All Future Events Wszystkie przyszłe wydarzenia You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Zaznaczono miesiąc przestępny, przypomnienie będzie działać zgodnie z zasadami kalendarza księżycowego. OK button OK CScheduleSearchDateItem Y R M M D D CScheduleSearchItem Edit Edytuj Delete Usuń All Day Cały dzień CScheduleSearchView No search results Brak wyników wyszukiwania CScheduleView ALL DAY CAŁY DZIEŃ CSettingDialog Manual Ręcznie 15 mins 15 min 30 mins 30 min 1 hour 1 godz 24 hours 24 godz Sync Now Synchronizuj teraz Last sync Ostatnia synchronizacja Monday Poniedziałek Sunday Niedziela 12-hour clock Zegar 12-godzinny 24-hour clock Zegar 24-godzinny Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 minut) (%1 hour) (%1 godzina) (%1 hours) (%1 godzin) CTitleWidget Y R M M W T D D Search events and festivals Szukaj wydarzeń i festiwalów CWeekWidget Sun Nie Mon Pon Tue Wt Wed Śr Thu Czw Fri Pt Sat Sob CWeekWindow Week Tydzień Y R CYearScheduleView All Day Cały dzień No event Brak wydarzeń CYearWindow Y R CalendarWindow Calendar Kalendarz Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendarz to narzędzie umożliwiające przeglądanie dat, jak i inteligentny terminarz, w którym możesz zaplanować wszystkie wydarzenia w życiu. Calendarmainwindow Calendar Kalendarz Manage Zarządzaj Privacy Policy Polityka prywatności Syncing... Synchronizuję... Sync successful Synchronizacja zakończona Sync failed, please try later Błąd synchronizacji, spróbuj ponownie później CenterWidget All Day Cały dzień DAccountDataBase Work Praca Life Życie Other Inne DAlarmManager Close button Zamknij One day before start Dzień przed rozpoczęciem Remind me tomorrow Przypomnij mi jutro Remind me later Przypomnij mi później 15 mins later 15 minut później 1 hour later 1 godzinę później 4 hours later 4 godziny później Tomorrow Jutro Schedule Reminder Zaplanuj przypomnienie %1 to %2 %1 do %2 Today Dzisiaj DragInfoGraphicsView Edit Edytuj Delete Usuń New event Nowe wydarzenie New Event Nowe wydarzenie JobTypeListView You are deleting an event type. Usuwasz typ wydarzenia. All events under this type will be deleted and cannot be recovered. Wszystkie wydarzenia skatalogowane pod tym typem zostaną usunięte i nie będzie można ich przywrócić. Cancel button Anuluj Delete button Usuń QObject Account settings Ustawienia konta Account Konto Select items to be synced Wybierz przedmioty do synchronizacji Events Wydarzenia General settings Ustawienia ogólne Sync interval Interwał synchronizacji Manage calendar Zarządzaj kalendarzem Calendar account Konto kalendarza Event types Typy wydarzeń General Ogólne First day of week Pierwszy dzień tygodnia Time Czas Return Today Return Dzisiaj Return Today Today Return Today Dzisiaj ScheduleTypeEditDlg New event type Nowy typ wydarzenia Edit event type Edytuj typ wydarzenia Name: Nazwa: Color: Kolor: Cancel button Anuluj Save button Zapisz The name can not only contain whitespaces Nazwa nie może zawierać tylko znaków spacji Enter a name please Wprowadź nazwę Shortcut Help Pomoc Delete event Usuń wydarzenie Copy Kopiuj Cut Wytnij Paste Wklej Delete Usuń Select all Zaznacz wszystko SidebarCalendarWidget Y R M M TimeJumpDialog Go button Przejdź UserloginWidget Sign In button Zaloguj się Sign Out button Wyloguj się YearFrame Y R today Today Today Dzisiaj dde-calendar-5.14.13/translations/dde-calendar-service_pt.ts000066400000000000000000000740001473346337000237400ustar00rootroot00000000000000 AccountItem Sync successful Sincronização bem sucedida Network error Erro de rede Server exception Exceção do servidor Storage full Armazenamento cheio AccountManager Local account Conta local Event types Tipos de evento CColorPickerWidget Color Cor Cancel button Cancelar Save button Guardar CDayMonthView Monday Seg Tuesday Ter Wednesday Qua Thursday Qui Friday Sex Saturday Sáb Sunday Dom CDayWindow Y A M M D D Lunar Lunar CGraphicsView New Event Novo evento CMonthScheduleNumItem %1 more mais %1 CMonthView New event Novo evento New Event Novo evento CMonthWindow Y A CMyScheduleView My Event O meu evento OK button Aceitar Delete button Eliminar Edit button Editar CPushButton New event type Novo tipo de evento CScheduleDlg New Event Novo evento Edit Event Editar evento End time must be greater than start time A hora de fim deve ser maior do que a hora de início OK button Aceitar Never Nunca At time of event Na hora do evento 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 dia antes 2 days before 2 dias antes 1 week before 1 semana antes On start day (9:00 AM) No início do dia (9:00 AM) time(s) vez(es) Enter a name please Introduza um nome The name can not only contain whitespaces O nome não pode conter apenas espaços em branco Type: Tipo: Description: Descrição: All Day: Dia todo: Starts: Inicia: Ends: Termina: Remind Me: Lembrar-me: Repeat: Repetir: End Repeat: Fim de repetição: Calendar account: Conta de calendário: Calendar account Conta de calendário Type Tipo Description Descrição All Day Dia todo Time: Hora: Time Hora Solar Solar Lunar Lunar Starts Inicia Ends Termina Remind Me Lembrar-me Repeat Repetir Daily Diário Weekdays Dias da semana Weekly Semanal Monthly Mensal Yearly Anual End Repeat Fim da repetição After Depois On Em Cancel button Cancelar Save button Guardar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas as ocorrências de um evento repetido devem ter o mesmo estado durante todo o dia. Do you want to change all occurrences? Deseja alterar todas as ocorrências? Cancel button Cancelar Change All Alterar tudo You are changing the repeating rule of this event. Está a alterar a regra da repetição deste evento. You are deleting an event. Está a eliminar um evento. Are you sure you want to delete this event? Tem a certeza que deseja eliminar este evento? Delete button Eliminar Do you want to delete all occurrences of this event, or only the selected occurrence? Deseja eliminar todas as ocorrências deste evento ou apenas a ocorrência selecionada? Delete All Eliminar tudo Delete Only This Event Eliminar apenas este evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Deseja eliminar esta e todas as ocorrências futuras deste evento ou apenas a ocorrência selecionada? Delete All Future Events Eliminar todos os eventos futuros You are changing a repeating event. Está a alterar um evento repetido. Do you want to change only this occurrence of the event, or all occurrences? Deseja alterar apenas esta ocorrência do evento, ou todas as ocorrências? All Tudo Only This Event Apenas este evento Do you want to change only this occurrence of the event, or this and all future occurrences? Deseja alterar apenas esta ocorrência do evento ou esta e todas as ocorrências futuras? All Future Events Todos os eventos futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Selecionou um mês bissexto, e será lembrado de acordo com as regras do calendário lunar. OK button Aceitar CScheduleSearchDateItem Y A M M D D CScheduleSearchItem Edit Editar Delete Eliminar All Day Dia todo CScheduleSearchView No search results Sem resultados de pesquisa CScheduleView ALL DAY DIA TODO CSettingDialog Manual Manual 15 mins 15 mins 30 mins 30 mins 1 hour 1 hora 24 hours 24 horas Sync Now Sincronizar agora Last sync Última sincronização Monday Segunda Sunday Domingo 12-hour clock Relógio de 12 horas 24-hour clock Relógio de 24 horas Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hora) (%1 hours) (%1 horas) CTitleWidget Y A M M W S D D Search events and festivals Pesquisar eventos e festivais CWeekWidget Sun Dom Mon Seg Tue Ter Wed Qua Thu Qui Fri Sex Sat Sáb CWeekWindow Week Semana Y A CYearScheduleView All Day Dia todo No event Nenhum evento CYearWindow Y A CalendarWindow Calendar Calendário Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. O Calendário é uma ferramenta para visualizar datas e também uma agenda diária inteligente para agendar todas as coisas na vida. Calendarmainwindow Calendar Calendário Manage Gerir Privacy Policy Política de privacidade Syncing... A sincronizar... Sync successful Sincronização bem sucedida Sync failed, please try later Falha ao sincronizar. Tente novamente mais tarde CenterWidget All Day Dia todo DAccountDataBase Work Trabalho Life Vida Other Outro DAlarmManager Close button Fechar One day before start Um dia antes do início Remind me tomorrow Lembra-me amanhã Remind me later Lembrar-me mais tarde 15 mins later 15 mins depois 1 hour later 1 hora depois 4 hours later 4 horas depois Tomorrow Amanhã Schedule Reminder Agendar lembrete %1 to %2 %1 até %2 Today Hoje DragInfoGraphicsView Edit Editar Delete Eliminar New event Novo evento New Event Novo evento JobTypeListView You are deleting an event type. Está a eliminar um tipo de evento. All events under this type will be deleted and cannot be recovered. Todos os eventos deste tipo serão eliminados e não podem ser recuperados. Cancel button Cancelar Delete button Eliminar QObject Account settings Definições de conta Account Conta Select items to be synced Selecionar itens a sincronizar Events Eventos General settings Definições gerais Sync interval Intervalo de sincronização Manage calendar Gerir calendário Calendar account Conta de calendário Event types Tipos de evento General Geral First day of week Primeiro dia da semana Time Hora Return Today Return Hoje Return Today Today Return Today Hoje ScheduleTypeEditDlg New event type Novo tipo de evento Edit event type Editar tipo de evento Name: Nome: Color: Cor: Cancel button Cancelar Save button Guardar The name can not only contain whitespaces O nome não pode conter apenas espaços em branco Enter a name please Introduza um nome Shortcut Help Ajuda Delete event Eliminar evento Copy Copiar Cut Cortar Paste Colar Delete Eliminar Select all Selecionar tudo SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Iniciar sessão Sign Out button Terminar sessão YearFrame Y A today Today Today Hoje dde-calendar-5.14.13/translations/dde-calendar-service_pt_BR.ts000066400000000000000000000741231473346337000243310ustar00rootroot00000000000000 AccountItem Sync successful Conexão bem-sucedida Network error Erro de rede Server exception Exceção do servidor Storage full Armazenamento cheio AccountManager Local account Conta local Event types Tipos de eventos CColorPickerWidget Color Cor Cancel button Cancelar Save button Salvar CDayMonthView Monday Segunda-feira Tuesday Terça-feira Wednesday Quarta-feira Thursday Quinta-feira Friday Sexta-feira Saturday Sábado Sunday Domingo CDayWindow Y A M M D D Lunar Lunar CGraphicsView New Event Novo Evento CMonthScheduleNumItem %1 more %1 mais CMonthView New event Novo evento New Event Novo Evento CMonthWindow Y A CMyScheduleView My Event Meu Evento OK button Ok Delete button Excluir Edit button Editar CPushButton New event type Novo tipo de evento CScheduleDlg New Event Novo Evento Edit Event Editar Evento End time must be greater than start time O tempo de término deve ser maior que o tempo de início OK button Ok Never Nunca At time of event No momento do evento 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 dia antes 2 days before 2 dias antes 1 week before 1 semana antes On start day (9:00 AM) No dia de início (9:00 AM) time(s) vez(es) Enter a name please Insira um nome The name can not only contain whitespaces O nome não pode conter apenas espaços em branco Type: Tipo: Description: Descrição: All Day: Dia Inteiro: Starts: Inicia em: Ends: Termina em: Remind Me: Lembre-me: Repeat: Repetir: End Repeat: Termina em: Calendar account: Conta de calendário: Calendar account Conta de calendário Type Tipo Description Descrição All Day Dia Inteiro Time: Horário: Time Horário Solar Solar Lunar Lunar Starts Inicia em Ends Termina em Remind Me Lembre-me Repeat Repetir Daily Diariamente Weekdays Dias úteis Weekly Semanalmente Monthly Mensalmente Yearly Anualmente End Repeat Termina em After Depois On Ativo Cancel button Cancelar Save button Salvar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas as ocorrências de um evento repetitivo devem ter o mesmo status durante o dia inteiro. Do you want to change all occurrences? Alterar todas as ocorrências? Cancel button Cancelar Change All Alterar Tudo You are changing the repeating rule of this event. Você está alterando a regra de repetição deste evento. You are deleting an event. Você está deletando um evento. Are you sure you want to delete this event? Você tem certeza que quer deletar este evento? Delete button Excluir Do you want to delete all occurrences of this event, or only the selected occurrence? Excluir todas as ocorrências deste evento ou apenas a ocorrência selecionada? Delete All Excluir Tudo Delete Only This Event Excluir Apenas Este Evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Excluir este evento e todas as suas ocorrências futuras; ou apenas a ocorrência selecionada? Delete All Future Events Excluir Todos os Eventos Futuros You are changing a repeating event. Um evento repetido será alterado. Do you want to change only this occurrence of the event, or all occurrences? Alterar apenas esta ocorrência do evento ou todas as ocorrências? All Tudo Only This Event Apenas Este Evento Do you want to change only this occurrence of the event, or this and all future occurrences? Alterar apenas esta ocorrência do evento ou esta e todas as ocorrências futuras? All Future Events Todos os Eventos Futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Você selecionou um mês bissexto e será lembrado de acordo com as regras do calendário lunar. OK button Ok CScheduleSearchDateItem Y A M M D D CScheduleSearchItem Edit Editar Delete Excluir All Day Dia Inteiro CScheduleSearchView No search results Nenhum resultado encontrado CScheduleView ALL DAY DIA INTEIRO CSettingDialog Manual Manual 15 mins 15 minutos 30 mins 30 minutos 1 hour 1 hora 24 hours 24 horas Sync Now Sincronizar Agora Last sync Última sincronização Monday Segunda-feira Sunday Domingo 12-hour clock Formato de 12 horas 24-hour clock Formato de 24 horas Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 minutos) (%1 hour) (%1 hora) (%1 hours) (%1 horas) CTitleWidget Y A M M W S D D Search events and festivals Procurar eventos e datas comemorativas CWeekWidget Sun Dom Mon Seg Tue Ter Wed Qua Thu Qui Fri Sex Sat Sáb CWeekWindow Week Semana Y A CYearScheduleView All Day Dia Inteiro No event Nenhum evento CYearWindow Y A CalendarWindow Calendar Calendário Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. O Calendário é uma ferramenta para visualizar datas e também um planejador diário inteligente para programar todas as coisas da vida. Calendarmainwindow Calendar Calendário Manage Gerenciar Privacy Policy Política de privacidade Syncing... Sincronizando... Sync successful Sincronização bem-sucedida Sync failed, please try later A sincronização falhou, tente novamente mais tarde CenterWidget All Day Dia Inteiro DAccountDataBase Work Trabalho Life Social Other Outro DAlarmManager Close button Fechar One day before start Um dia antes do início Remind me tomorrow Lembre-me amanhã Remind me later Lembre-me mais tarde 15 mins later 15 minutos depois 1 hour later 1 hora depois 4 hours later 4 horas depois Tomorrow Amanhã Schedule Reminder Agendar Lembrete %1 to %2 %1 às %2 Today Hoje DragInfoGraphicsView Edit Editar Delete Excluir New event Novo evento New Event Novo Evento JobTypeListView You are deleting an event type. Você está deletando um tipo de evento. All events under this type will be deleted and cannot be recovered. Todos os eventos deste tipo serão deletados e não poderão ser recuperados. Cancel button Cancelar Delete button Excluir QObject Account settings Configurações de conta Account Conta Select items to be synced Selecionar itens para sincronizar Events Eventos General settings Definições gerais Sync interval Intervalo de sincronização Manage calendar Gerenciar calendário Calendar account Conta de calendário Event types Tipos de eventos General Geral First day of week Primeiro dia da semana Time Horário Return Today Return Hoje Return Today Today Return Today Hoje ScheduleTypeEditDlg New event type Novo tipo de evento Edit event type Editar o tipo de evento Name: Nome: Color: Cor: Cancel button Cancelar Save button Salvar The name can not only contain whitespaces O nome não pode ser apenas espaços em branco Enter a name please Insira um nome Shortcut Help Ajuda Delete event Excluir evento Copy Copiar Cut Recortar Paste Colar Delete Excluir Select all Selecionar tudo SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Entrar Sign Out button Sair YearFrame Y A today Today Today Hoje dde-calendar-5.14.13/translations/dde-calendar-service_ro.ts000066400000000000000000000744711473346337000237510ustar00rootroot00000000000000 AccountItem Sync successful Sincronizare reușită Network error Eroare de rețea Server exception Excepție server Storage full Spațiu de stocare încărcat AccountManager Local account Cont local Event types Tipuri de evenimente CColorPickerWidget Color Culoare Cancel button Anulează Save button Salvare CDayMonthView Monday Luni Tuesday Marţi Wednesday Miercuri Thursday Joi Friday Vineri Saturday Sâmbătă Sunday Duminică CDayWindow Y Y M l D z Lunar Lunar CGraphicsView New Event Eveniment nou CMonthScheduleNumItem %1 more %1 mai mult CMonthView New event Eveniment nou New Event Eveniment nou CMonthWindow Y A CMyScheduleView My Event Evenimentul meu OK button Ok Delete button Ștergeți Edit button Editare CPushButton New event type Tip nou de eveniment CScheduleDlg New Event Eveniment nou Edit Event Editare eveniment End time must be greater than start time Ora de încheiere trebuie să fie mai mare decât ora de început OK button Ok Never Niciodată At time of event La momentul evenimentului 15 minutes before Cu 15 minute înainte 30 minutes before Cu 30 minute înainte 1 hour before Cu 1 oră înainte 1 day before Cu 1 zi înainte 2 days before Cu 2 zile înainte 1 week before Cu 1 săptămână înainte On start day (9:00 AM) Începutul zilei (9:00 AM) time(s) ori Enter a name please Introduceți un nume, vă rugăm The name can not only contain whitespaces Numele nu poate conține numai spații libere Type: Tip: Description: Descriere: All Day: Toată ziua: Starts: Începe: Ends: Se termină: Remind Me: Aminteşte-mi: Repeat: Repetă: End Repeat: Repetarea se termină: Calendar account: Cont calendar: Calendar account Cont calendar Type Tip Description Descriere All Day Toată ziua Time: Oră: Time Oră Solar Solar Lunar Lunar Starts Începe Ends Se termină Remind Me Aminteşte-mi Repeat Repetă Daily Zilnic Weekdays Zilele saptămânii Weekly Săptămânal Monthly Lunar Yearly Anual End Repeat Opreşte repetarea After După On Pornire Cancel button Anulează Save button Salvare CScheduleOperation All occurrences of a repeating event must have the same all-day status. Toate aparițiile unui eveniment repetat trebuie să aibă același statut toată ziua. Do you want to change all occurrences? Doriți să schimbați toate aparițiile? Cancel button Anulează Change All Schimbă tot You are changing the repeating rule of this event. Modificați regula de repetare a acestui eveniment. You are deleting an event. Ştergeţi un eveniment. Are you sure you want to delete this event? Sigur doriţi să ştergeţi acest eveniment? Delete button Ștergeți Do you want to delete all occurrences of this event, or only the selected occurrence? Doriți să ștergeți toate aparițiile acestui eveniment sau doar evenimentul selectat? Delete All Şterge tot Delete Only This Event Şterge doar acest eveniment Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Doriți să ștergeți toate aparițiile acestui eveniment sau doar evenimentul selectat? Delete All Future Events Şterge toate evenimentele viitoare You are changing a repeating event. Modificați un eveniment care se repetă. Do you want to change only this occurrence of the event, or all occurrences? Doriți să schimbați doar această apariție a evenimentului sau toate evenimentele? All Tot Only This Event Doar acest eveniment Do you want to change only this occurrence of the event, or this and all future occurrences? Doriți să schimbați doar această apariție a evenimentului sau aceasta și toate evenimentele viitoare? All Future Events Toate evenimentele viitoare You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Ați selectat o lună bisectă și vi se va aminti în conformitate cu regulile calendarului lunar. OK button Ok CScheduleSearchDateItem Y A M L D Z CScheduleSearchItem Edit Editează Delete Șterge All Day Toată ziua CScheduleSearchView No search results Niciun rezultat la căutare CScheduleView ALL DAY TOATĂ ZIUA CSettingDialog Manual Manual 15 mins 15 minute 30 mins 30 minute 1 hour 1 oră 24 hours 24 ore Sync Now Sincronizează acum Last sync Ultima sincronizare Monday Luni Sunday Duminică 12-hour clock Mod ceas 12 ore 24-hour clock Mod ceas 24 ore Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 minnute) (%1 hour) (%1 oră) (%1 hours) (%1 ore) CTitleWidget Y A M L W S D Z Search events and festivals Căutare evenimente și festivaluri CWeekWidget Sun Dum Mon Lu Tue Mar Wed Mie Thu Joi Fri Vin Sat Sâm CWeekWindow Week Săptămână Y A CYearScheduleView All Day Toată ziua No event Nici un eveniment CYearWindow Y A CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarul este un instrument pentru a vizualiza datele și, de asemenea, un planificator inteligent zilnic pentru a programa toate lucrurile din viață. Calendarmainwindow Calendar Calendar Manage Gestionare Privacy Policy Politica de Confidențialitate Syncing... Sincronizare... Sync successful Sincronizare reușită Sync failed, please try later Sincronizarea a eșuat, vă rugăm să încercați mai târziu CenterWidget All Day Toată ziua DAccountDataBase Work Serviciu Life Viaţă Other Altul DAlarmManager Close button Închidere One day before start O zi înainte de a începe Remind me tomorrow Reaminteşte mâine Remind me later Reaminteşte mai târziu 15 mins later peste 15 minute 1 hour later peste 1 oră 4 hours later peste 4 ore Tomorrow Mâine Schedule Reminder Programare Reminder %1 to %2 %1 la %2 Today Astăzi DragInfoGraphicsView Edit Editare Delete Ștergeți New event Eveniment nou New Event Eveniment nou JobTypeListView You are deleting an event type. Ștergeți un tip de eveniment. All events under this type will be deleted and cannot be recovered. Toate evenimentele de acest tip vor fi șterse și nu vor putea fi recuperate. Cancel button Anulează Delete button Ștergeți QObject Account settings Setări cont Account Cont Select items to be synced Selectați elementele care urmează să fie sincronizate Events Evenimente General settings Setări generale Sync interval Interval de sincronizare Manage calendar Gestionare calendar Calendar account Cont calendar Event types Tipuri de evenimente General General First day of week Prima zi a săptămânii Time Oră Return Today Return Astăzi Return Today Today Return Today Astăzi ScheduleTypeEditDlg New event type Tip nou de eveniment Edit event type Editarea tipului de eveniment Name: Nume: Color: Culoare: Cancel button Anulează Save button Salvare The name can not only contain whitespaces Numele nu poate conține numai spații albe Enter a name please Introduceți un nume, vă rugăm Shortcut Help Ajutor Delete event Ştergere eveniment Copy Copiere Cut Tăiere Paste Lipire Delete Ștergeți Select all Selectează totul SidebarCalendarWidget Y Y M l TimeJumpDialog Go button Mergi UserloginWidget Sign In button Conectați-vă Sign Out button Deconectați-vă YearFrame Y A today Today Today Astăzi dde-calendar-5.14.13/translations/dde-calendar-service_ru.ts000066400000000000000000001010331473346337000237400ustar00rootroot00000000000000 AccountItem Sync successful Успешная синхронизация Network error Ошибка сети Server exception Исключение сервера Storage full Хранилище заполнено AccountManager Local account Учетная запись домена Event types CColorPickerWidget Color Цвет Cancel button Отмена Save button Сохранить CDayMonthView Monday Понедельник Tuesday Вторник Wednesday Среда Thursday Четверг Friday Пятница Saturday Суббота Sunday Воскресенье CDayWindow Y Г M М D Д Lunar Лунный CGraphicsView New Event Новое Событие CMonthScheduleNumItem %1 more более %1 CMonthView New event Новое событие New Event Новое Событие CMonthWindow Y Г CMyScheduleView My Event Моё событие OK button OK Delete button Удалить Edit button Редактировать CPushButton New event type Новый тип события CScheduleDlg New Event Новое событие Edit Event Редактировать событие End time must be greater than start time Время окончания должно быть больше времени начала OK button OK Never Никогда At time of event Во время события 15 minutes before За 15 минут до этого 30 minutes before За 30 минут до этого 1 hour before За 1 час до этого 1 day before За 1 день до этого 2 days before За 2 дня до этого 1 week before За 1 неделю до этого On start day (9:00 AM) В день начала (9:00) time(s) раз(а) Enter a name please Введите имя, пожалуйста The name can not only contain whitespaces Имя не может содержать только пробелы Type: Тип: Description: Описание: All Day: Весь день: Starts: Начинается: Ends: Заканчивается: Remind Me: Напомнить: Repeat: Повторять: End Repeat: Повторять до: Calendar account: Учетная запись календаря: Calendar account Учетная запись календаря: Type Тип Description Описание All Day Весь день Time: Время: Time Время Solar Солнечно Lunar Лунный Starts Начало Ends Конец Remind Me Напомнить Repeat Повторять Daily Ежедневно Weekdays По будням Weekly Еженедельно Monthly Ежемесячно Yearly Ежегодно End Repeat Повторять до: After После On Вкл. Cancel button Отмена Save button Сохранить CScheduleOperation All occurrences of a repeating event must have the same all-day status. Все экземпляры повторяющегося события должны иметь одинаковый статус в течение всего дня. Do you want to change all occurrences? Вы хотите изменить все экземпляры? Cancel button Отмена Change All Изменить все You are changing the repeating rule of this event. Вы изменяете правило повторения этого события. You are deleting an event. Вы удаляете событие. Are you sure you want to delete this event? Вы действительно хотите удалить событие? Delete button Удалить Do you want to delete all occurrences of this event, or only the selected occurrence? Вы хотите удалить все экземпляры данного события или только выбранного экземпляра? Delete All Удалить все Delete Only This Event Удалить только это событие Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Вы хотите удалить только это и будущие проявления события или только выбранные проявления? Delete All Future Events Удалить Все Будущие События You are changing a repeating event. Вы изменяете повторяющееся событие Do you want to change only this occurrence of the event, or all occurrences? Вы хотите изменить только это проявление события или все проявления. All Все Only This Event Только Это Событие Do you want to change only this occurrence of the event, or this and all future occurrences? Вы хотите изменить только это проявление данного события или всё событие и все будущие проявления? All Future Events Только Будущие События You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Вы выбрали високосный месяц, вы будете оповещены об этом в соответствии с правилами лунного календаря. OK button OK CScheduleSearchDateItem Y Г M М D Д CScheduleSearchItem Edit Правка Delete Удалить All Day Весь День CScheduleSearchView No search results Поиск результатов не дал CScheduleView ALL DAY ВЕСЬ ДЕНЬ CSettingDialog Manual Вручную 15 mins 15 минут 30 mins 30 минут 1 hour 1 час 24 hours 24 часа Sync Now Синхронизировать Сейчас Last sync Последняя синхронизация Monday Понедельник Sunday Воскресенье 12-hour clock 12-часовой формат времени 24-hour clock 24-часовой Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 минут) (%1 hour) (%1 час) (%1 hours) (%1 часов) CTitleWidget Y Г M М W Н D Д Search events and festivals Поиск мероприятий и фестивалей CWeekWidget Sun Вс Mon Пн Tue Вт Wed Ср Thu Чт Fri Пт Sat Сб CWeekWindow Week Неделя Y Г CYearScheduleView All Day Весь День No event Нет события CYearWindow Y Г CalendarWindow Calendar Календарь Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Календарь - это инструмент для просмотра дат, а также умный ежедневник для планирования всех событий вашей повседневной жизни. Calendarmainwindow Calendar Календарь Manage Privacy Policy Политика конфиденциальности Syncing... Синхронизация... Sync successful Успешная синхронизация Sync failed, please try later Не удалось синхронизировать, пожалуйста, попробуйте позже CenterWidget All Day Весь День: DAccountDataBase Work Работа Life Жизнь Other Остальное DAlarmManager Close button Закрыть One day before start За день до начала Remind me tomorrow Напомнить завтра Remind me later Напомнить позже 15 mins later Спустя 15 минут 1 hour later Спустя 1 час 4 hours later Спустя 4 часа Tomorrow Завтра Schedule Reminder Напоминание о расписании %1 to %2 от 1% до %2 Today Сегодня DragInfoGraphicsView Edit Редактировать Delete Удалить New event Новое событие New Event Новое Событие JobTypeListView You are deleting an event type. Вы удаляете тип события. All events under this type will be deleted and cannot be recovered. Все события этого типа будут удалены и не подлежат восстановлению. Cancel button Отмена Delete button Удалить QObject Account settings Настройки учетной записи Account Учетная запись Select items to be synced Выберите элементы для синхронизации Events События General settings Общие настройки Sync interval Интервал синхронизации Manage calendar Calendar account Учетная запись календаря: Event types Типы событий General Общие First day of week Первый день недели Time Время Return Today Return Сегодня Return Today Today Return Today Сегодня ScheduleTypeEditDlg New event type Новый тип события Edit event type Редактировать тип события Name: Имя: Color: Цвет: Cancel button Отмена Save button Сохранить The name can not only contain whitespaces Имя не может содержать только пробелы Enter a name please Введите имя, пожалуйста Shortcut Help Помощь Delete event Удалить событие Copy Копировать Cut Вырезать Paste Вставить Delete Удалить Select all Выбрать всё SidebarCalendarWidget Y Г M М TimeJumpDialog Go button Вперед UserloginWidget Sign In button Войти Sign Out button Выйти YearFrame Y Г today Today Today Сегодня dde-calendar-5.14.13/translations/dde-calendar-service_si.ts000066400000000000000000000777321473346337000237470ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button අවලංගු කරන්න Save button සුරකින්න CDayMonthView Monday සඳුදා Tuesday අඟහරුවාදා Wednesday බදාදා Thursday බ්‍රහස්පතින්දා Friday සිකුරාදා Saturday සෙනසුරාදා Sunday ඉරිදා CDayWindow Y වස M මස D දින Lunar CGraphicsView New Event නව හමුවක් CMonthScheduleNumItem %1 more තවත් %1 CMonthView New event නව සිදුවීමක් New Event නව හමුවක් CMonthWindow Y වස CMyScheduleView My Event මගේ හමුව OK button හරි Delete button මකා දමන්න Edit button සංස්කරණය කරන්න CPushButton New event type CScheduleDlg New Event නව හමුවක් Edit Event හමුව සංස්කරණය කරන්න End time must be greater than start time අවසන් කෙරෙන වේලාව ආරම්භ කෙරෙන වේලාවට වඩා වැඩි විය යුතුය OK button හරි Never කිසිදා නැත At time of event හමුව යොදාගත් වේලාවේදී 15 minutes before මිනිත්තු 15 කට පෙර 30 minutes before මින්ත්තු 30 කට පෙර 1 hour before පැය 1 කට පෙර 1 day before දින 1 කට පෙර 2 days before දින 2 කට පෙර 1 week before සති 1 කට පෙර On start day (9:00 AM) ඇරඹෙන දින (පෙ.ව 9.00) time(s) වේලාව (න්) Enter a name please The name can not only contain whitespaces Type: වර්ගය: Description: විස්තරය: All Day: දිනය පුරාම: Starts: අ‍ාරම්භය: Ends: අවසානය: Remind Me: මට මතක් කරන්න: Repeat: නැවත කරන්න: End Repeat: පුනරාවර්තනය අවසන් කරන්න: Calendar account: Calendar account Type වර්ගය Description විස්තරය All Day දිනය පුරාම Time: Time Solar Lunar Starts ආරම්භය Ends අවසානය Remind Me මට මතක් කරන්න Repeat පුනරාවර්තන Daily දිනපතා Weekdays සතියේ දින Weekly සති පතා Monthly මාසිකව Yearly වාර්ෂිකව End Repeat පුනරාවර්තනය අවසන් කරන්න After පසුව On මත Cancel button අවලංගු කරන්න Save button සුරකින්න CScheduleOperation All occurrences of a repeating event must have the same all-day status. පුනරාවර්තන හමුවන්ගේ සියලු හමුවන් දිනය පුරා තත්වයේ තිබිය යුතුය. Do you want to change all occurrences? ඔබට සියලු පුනරාවර්ථනයන් වෙනස් කිරීමද අවශ්‍යද? Cancel button අවලංගු කරන්න Change All සියල්ල වෙනස් කරන්න You are changing the repeating rule of this event. ඔබ මෙම හමුවේ පුනරාවර්තන රීතීන් වෙනස් කරමින් සිටී. You are deleting an event. ඔබ හමුවක් මකා දමයි. Are you sure you want to delete this event? මෙම හමුව මකා දැමීමට අවශ්‍ය බව ඔබට විශ්වාසද? Delete button මකා දමන්න Do you want to delete all occurrences of this event, or only the selected occurrence? මෙම හමුවේ සියලුම පුනරාවර්තනයන් මකා දැමීමට ඔබට අවශ්‍යද, නැතහොත් තෝරාගත් හමුව පමණක්ද? Delete All සියල්ල මකා දමන්න Delete Only This Event මෙම හමුව පමණක් මකා දමන්න Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ඔබට මෙම හමුව සහ මෙම හමුවේ සැලසුම් කල සියලු හමුවන් මකා දැමීමට අවශ්‍යද, නැතහොත් මෙම තෝරාගත් හමුව පමණද? Delete All Future Events සියලු යොදාගත් හමුවන් මකා දමන්න You are changing a repeating event. ඔබ පුනරාවර්තන හමුවක් වෙනස් කරමින් සිටී. Do you want to change only this occurrence of the event, or all occurrences? ඔබට මෙම පුනරාවර්තන හමුවේ මෙම හමුව පමණක් වෙනස් කිරීමට අවශ්‍යද, නැතිනම් සියලු පුනරාවර්තනයන් වෙනස් කල යුතුද? All සියල්ලම Only This Event මෙම හමුව පමණි Do you want to change only this occurrence of the event, or this and all future occurrences? ඔබට මෙම හමුව සහ මෙම හමුවේ සැලසුම් කල සියලු හමුවන් වෙනස් කිරීමට අවශ්‍යද, නැතහොත් මෙම තෝරාගත් හමුව පමණද? All Future Events සියලුම අනාගත හමුවන් You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button හරි CScheduleSearchDateItem Y වස M මස D දින CScheduleSearchItem Edit සංස්කරණය කරන්න Delete මකා දමන්න All Day දිනය පුරාම CScheduleSearchView No search results සෙවුම් ප්‍රතිඵල නොමැත CScheduleView ALL DAY දිනය පුරාම CSettingDialog Manual සව්‍යං 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Monday සඳුදා Sunday ඉරිදා 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y වස M මස W සති D දින Search events and festivals CWeekWidget Sun ඉරි. Mon සදු. Tue අග. Wed බදා. Thu බ්‍රහස්. Fri සිකු. Sat සෙන. CWeekWindow Week සතිය Y වර් CYearScheduleView All Day දිනය පුරාම No event හමුවන් නොමැත CYearWindow Y වර් CalendarWindow Calendar දින දසුන Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. දින දසුන යනු දිනයන් බැලීමට මෙන්ම ජීවිතයේ සෑම දෙයක්ම සැලසුම් කිරීමට ‍භාවිත කල හැකි දෛනික සැලසුම්කරන යෙදවුමකි. Calendarmainwindow Calendar දින දසුන Manage Privacy Policy Syncing... සමමුහුර්ත වෙමින්... Sync successful Sync failed, please try later CenterWidget All Day දිනය පුරාම DAccountDataBase Work කාර්යය Life ජීවිතය Other වෙනත් DAlarmManager Close button වසා දමන්න One day before start ආරම්භ කිරීමට ඇත්තේ එක් දිනක් පමණි Remind me tomorrow මට හෙට මතක් කරන්න Remind me later මට පසුව මතක් කරන්න 15 mins later 1 hour later 4 hours later Tomorrow හෙට Schedule Reminder මතක් කිරීමක් සකසන්න %1 to %2 Today අද DragInfoGraphicsView Edit සංස්කරණය කරන්න Delete මකා දමන්න New event නව සිදුවීමක් New Event නව හමුවක් JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button අවලංගු කරන්න Delete button මකා දමන්න QObject Account settings Account පරිශීලක ගිණුම Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General පොදු First day of week Time Return Today Return අද Return Today Today Return Today අද ScheduleTypeEditDlg New event type Edit event type Name: නම: Color: Cancel button අවලංගු කරන්න Save button සුරකින්න The name can not only contain whitespaces Enter a name please Shortcut Help උදව් Delete event හමුව මකා දමන්න Copy පිටපත් කරන්න Cut කපන්න Paste අලවන්න Delete මකන්න Select all සියල්ල ලකුණු කරන්න SidebarCalendarWidget Y වස M මස TimeJumpDialog Go button UserloginWidget Sign In button පුරනය වන්න Sign Out button ඉවත් වන්න YearFrame Y වර් today Today Today අද dde-calendar-5.14.13/translations/dde-calendar-service_sk.ts000066400000000000000000000725221473346337000237410ustar00rootroot00000000000000 AccountItem Sync successful Synchronizácia úspešná Network error Chyba siete Server exception Storage full Úložisko je plné AccountManager Local account Miestny účet Event types CColorPickerWidget Color Farba Cancel button Zrušiť Save button Uložiť CDayMonthView Monday Pondelok Tuesday Utorok Wednesday Streda Thursday Štvrtok Friday Piatok Saturday Sobota Sunday Nedeľa CDayWindow Y R M M D D Lunar Lunárny CGraphicsView New Event Nová udalosť CMonthScheduleNumItem %1 more ešte %1 CMonthView New event Nová udalosť New Event Nová udalosť CMonthWindow Y R CMyScheduleView My Event Moja udalosť OK button OK Delete button Vymazať Edit button Upraviť CPushButton New event type Nový typ udalosti CScheduleDlg New Event Nová udalosť Edit Event Upraviť udalosť End time must be greater than start time Čas ukončenia musí byť neskôr ako čas začiatku OK button OK Never Nikdy At time of event V čase udalosti 15 minutes before 15 minút pred 30 minutes before 30 minút pred 1 hour before 1 hodinu pred 1 day before 1 deň pred 2 days before 2 dni pred 1 week before 1 týždeň pred On start day (9:00 AM) V deň začiatku (9:00) time(s) krát Enter a name please Zadajte prosím meno The name can not only contain whitespaces Type: Typ: Description: Popis: All Day: Celý deň: Starts: Začína: Ends: Končí: Remind Me: Pripomenúť Repeat: Opakovať: End Repeat: Ukončiť opakovanie: Calendar account: Calendar account Type Typ Description Popis All Day Celý deň Time: Čas: Time Čas Solar Solárny Lunar Lunárny Starts Začína Ends Končí Remind Me Pripomenúť Repeat Opakovať Daily Denne Weekdays Pracovné dni Weekly Týždenne Monthly Mesačne Yearly Ročne End Repeat Ukončiť opakovanie After Po On Zapnuté Cancel button Zrušiť Save button Uložiť CScheduleOperation All occurrences of a repeating event must have the same all-day status. Všetky výskyty opakujúcej sa udalosti musia mať rovnaký celodenný stav. Do you want to change all occurrences? Chcete zmeniť všetky výskyty? Cancel button Zrušiť Change All Zmeniť všetky You are changing the repeating rule of this event. Meníte pravidlo opakovania tejto udalosti. You are deleting an event. Odstraňujete udalosť. Are you sure you want to delete this event? Naozaj chcete odstrániť túto udalosť? Delete button Vymazať Do you want to delete all occurrences of this event, or only the selected occurrence? Chcete odstrániť všetky výskyty tejto udalosti alebo iba vybratú udalosť? Delete All Vymazať všetko Delete Only This Event Vymazať iba túto udalosť Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Chcete odstrániť tento a všetky budúce výskyty tejto udalosti alebo iba vybratú udalosť? Delete All Future Events Vymazať všetky budúce udalosti You are changing a repeating event. Meníte opakujúcu sa udalosť. Do you want to change only this occurrence of the event, or all occurrences? Chcete zmeniť iba tento výskyt udalosti alebo všetky jej výskyty? All Všetky Only This Event Iba táto udalosť Do you want to change only this occurrence of the event, or this and all future occurrences? Chcete zmeniť iba tento výskyt udalosti alebo túto a aj všetky budúce udalosti? All Future Events Všetky budúce udalosti You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y R M M D D CScheduleSearchItem Edit Upraviť Delete Vymazať All Day Celý deň CScheduleSearchView No search results Žiadne výsledky vyhľadávania CScheduleView ALL DAY CELÝ DEŇ CSettingDialog Manual Ručné 15 mins 15 minút 30 mins 30 minút 1 hour 1 hodina 24 hours 24 hodín Sync Now Synchronizovať teraz Last sync Monday Pondelok Sunday Nedeľa 12-hour clock 12-hodinový čas 24-hour clock 24-hodinový čas Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 minút) (%1 hour) (%1 hodina) (%1 hours) (%1 hodín) CTitleWidget Y R M M W T D D Search events and festivals CWeekWidget Sun Ne Mon Po Tue Ut Wed St Thu Št Fri Pia Sat So CWeekWindow Week Týždeň Y R CYearScheduleView All Day Celý deň No event Žiadna udalosť CYearWindow Y R CalendarWindow Calendar Kalendár Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendár je nástroj na prezeranie dátumov a tiež inteligentný denný plánovač na plánovanie všetkých vecí v živote. Calendarmainwindow Calendar Kalendár Manage Spravovať Privacy Policy Zásady ochrany osobných údajov Syncing... Synchronizácia... Sync successful Synchronizácia úspešná Sync failed, please try later CenterWidget All Day Celý deň DAccountDataBase Work Práca Life Život Other Ostatné DAlarmManager Close button Zavrieť One day before start Jeden deň pred začiatkom Remind me tomorrow Pripomenúť zajtra Remind me later Pripomenúť neskôr 15 mins later o 15 minút neskôr 1 hour later o 1 hodinu neskôr 4 hours later o 4 hodiny neskôr Tomorrow Zajtra Schedule Reminder Nastaviť pripomienku %1 to %2 %1 do %2 Today Dnes DragInfoGraphicsView Edit Upraviť Delete Vymazať New event Nová udalosť New Event Nová udalosť JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Zrušiť Delete button Vymazať QObject Account settings Nastavenia účtu Account Účet Select items to be synced Events Udalosti General settings Všeobecné nastavenia Sync interval Manage calendar Calendar account Event types General Hlavné First day of week Prvý deň v týždni Time Čas Return Today Return Dnes Return Today Today Return Today Dnes ScheduleTypeEditDlg New event type Nový typ udalosti Edit event type Upraviť typ udalosti Name: Názov: Color: Farba: Cancel button Zrušiť Save button Uložiť The name can not only contain whitespaces Enter a name please Zadajte prosím meno Shortcut Help Nápoveda Delete event Vymazať udalosť Copy Kopírovať Cut Vystrihnúť Paste Prilepiť Delete Vymazať Select all Vybrať všetko SidebarCalendarWidget Y R M M TimeJumpDialog Go button Prejsť UserloginWidget Sign In button Prihlásiť sa Sign Out button Odhlásiť sa YearFrame Y R today Today Today Dnes dde-calendar-5.14.13/translations/dde-calendar-service_sl.ts000066400000000000000000000704441473346337000237430ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Barva Cancel button Prekliči Save button Shrani CDayMonthView Monday Ponedeljek Tuesday Torek Wednesday Sreda Thursday Četrtek Friday Petek Saturday Sobota Sunday Nedelja CDayWindow Y L M M D D Lunar CGraphicsView New Event Nov dogodek CMonthScheduleNumItem %1 more %1 več CMonthView New event Nov dogodek New Event Nov dogodek CMonthWindow Y L CMyScheduleView My Event Moj dogodek OK button V redu Delete button Izbriši Edit button Uredi CPushButton New event type CScheduleDlg New Event Nov dogodek Edit Event Uredi dogodek End time must be greater than start time Končni čas mora biti kasnejši od začetnega OK button V redu Never Nikoli At time of event Ob času dogodka 15 minutes before 15 minut prej 30 minutes before 30 minut prej 1 hour before 1 uro prej 1 day before 1 dan prej 2 days before 2 dni prej 1 week before 1 teden prej On start day (9:00 AM) Na dan dogodka (9:00) time(s) čas (s) Enter a name please The name can not only contain whitespaces Type: Vrsta: Description: Opis: All Day: Cel dan: Starts: Začetek: Ends: Konec: Remind Me: Opomnik: Repeat: Ponovi: End Repeat: Konec ponavljanj: Calendar account: Calendar account Type Vrsta Description Opis All Day Cel dan Time: Time Čas Solar Lunar Starts Začetek Ends Konec Remind Me Opomnik Repeat Ponovitev Daily Dnevno Weekdays Ob dnevih Weekly Tedensko Monthly Mesečno Yearly Letno End Repeat Konec ponavljanj After Po On Na Cancel button Prekini Save button Shrani CScheduleOperation All occurrences of a repeating event must have the same all-day status. Vsako pojavljanje ponavljajočega dogodka mora imeti enak celodnevni status. Do you want to change all occurrences? Želite spremeniti vsa pojavljanja? Cancel button Prekini Change All Spremeni vse You are changing the repeating rule of this event. Spreminjate ponavljajoče se pravilo za ta dogodek. You are deleting an event. Brišete dogodek. Are you sure you want to delete this event? Želite res izbrisati ta dogodek? Delete button Izbriši Do you want to delete all occurrences of this event, or only the selected occurrence? Želite izbrisati vsa pojavljanja tega dogodka, ali zgolj izbrana? Delete All Izbriši vse Delete Only This Event Izbriši le ta dogodek Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Želite izbrisati to in vsa ostala pojavljanja tega dogodka ali zgolj izbrana pojavljanja? Delete All Future Events Izbriši vse prihodnje dogodke You are changing a repeating event. Spreminjate ponavljajoči se dogodek. Do you want to change only this occurrence of the event, or all occurrences? Želite spremeniti le to pojavitev dogodka ali vsa pojavljanja? All Vse Only This Event Zgolj ta dogodek Do you want to change only this occurrence of the event, or this and all future occurrences? Ali želite spremeniti le ta pojav dogodka ali vse prihodnje pojave? All Future Events Vse prihodnje dogodke You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button V redu CScheduleSearchDateItem Y L M M D D CScheduleSearchItem Edit Uredi Delete Izbriši All Day Cel dan CScheduleSearchView No search results Ni rezultatov iskanja CScheduleView ALL DAY CEL DAN CSettingDialog Manual Ročno 15 mins 30 mins 1 hour 1 ura 24 hours Sync Now Last sync Monday Ponedeljek Sunday Nedelja 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y L M M W T D D Search events and festivals CWeekWidget Sun Ned Mon Pon Tue Tor Wed Sre Thu Čet Fri Pet Sat Sob CWeekWindow Week Teden Y L CYearScheduleView All Day Cel dan No event Ni dogodka CYearWindow Y L CalendarWindow Calendar Koledar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Koledar je orodje za prikaz datumov, a tudi pametni terminski planer za načrtovanje življenjskih dogodkov. Calendarmainwindow Calendar Koledar Manage Privacy Policy Pravilnik zasebnosti Syncing... Sinhronizacija... Sync successful Sync failed, please try later CenterWidget All Day Cel dan DAccountDataBase Work o Life ivljenje Other Ostalo DAlarmManager Close button Zapri One day before start Dan pred pričetkom Remind me tomorrow Opomni me jutri Remind me later Opomni me kasneje 15 mins later 1 hour later 4 hours later Tomorrow Jutri Schedule Reminder Nastavi opomnik %1 to %2 %1 do %2 Today Danes DragInfoGraphicsView Edit Uredi Delete Izbriši New event Nov dogodek New Event Nov dogodek JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Prekliči Delete button Izbriši QObject Account settings Account Račun Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General Splošno First day of week Time Čas Return Today Return Danes Return Today Today Return Today Danes ScheduleTypeEditDlg New event type Edit event type Name: Ime: Color: Cancel button Prekliči Save button Shrani The name can not only contain whitespaces Enter a name please Shortcut Help Pomoč Delete event Izbriši dogodek Copy Kopiraj Cut Izreži Paste Prilepi Delete Izbriši Select all Izberi vse SidebarCalendarWidget Y L M M TimeJumpDialog Go button UserloginWidget Sign In button Prijava Sign Out button Odjava YearFrame Y Y today Today Today Danes dde-calendar-5.14.13/translations/dde-calendar-service_sq.ts000066400000000000000000000746421473346337000237540ustar00rootroot00000000000000 AccountItem Sync successful Njëkohësim i suksesshëm Network error Gabim rrjeti Server exception Përjashtim në shërbyes Storage full Depozita plot AccountManager Local account Llogari vendore Event types Lloje veprimtarish CColorPickerWidget Color Ngjyrë Cancel button Anuloje Save button Ruaje CDayMonthView Monday E hënë Tuesday E martë Wednesday E mërkurë Thursday E enjte Friday E premte Saturday E shtunë Sunday E diel CDayWindow Y V M M D D Lunar Hënor CGraphicsView New Event Veprimtari e Re CMonthScheduleNumItem %1 more %1 më tepër CMonthView New event Veprimtari e re New Event Veprimtari e Re CMonthWindow Y V CMyScheduleView My Event Veprimtari e Imja OK button OK Delete button Fshije Edit button Përpunojeni CPushButton New event type Lloj veprimtarie të re CScheduleDlg New Event Veprimtari e Re Edit Event Përpunoni Veprimtari End time must be greater than start time Koha e përfundimit duhet të jetë më e madhe se koha e fillimit OK button OK Never Kurrë At time of event Në kohën e veprimtarisë 15 minutes before 15 minuta para 30 minutes before 30 minuta para 1 hour before 1 orë para 1 day before 1 ditë para 2 days before 2 ditë para 1 week before 1 javë para On start day (9:00 AM) Ditën e fillimit (9:00 AM) time(s) kohë() Enter a name please Ju lutemi, jepni një emër The name can not only contain whitespaces Emri s’mund të përmbajë vetëm hapësira të zbrazëta Type: Lloj: Description: Përshkrim: All Day: Tërë Ditën: Starts: Fillon më: Ends: Përfundon më: Remind Me: Kujtoma: Repeat: Përsërite: End Repeat: Përfundoje Përsëritjen Më: Calendar account: Llogari kalendari: Calendar account Llogari kalendari Type Lloj Description Përshkrim All Day Tërë Ditën Time: Kohë: Time Kohë Solar Diellore Lunar Hënore Starts Fillon më Ends Përfundon më Remind Me Kujtoma më Repeat Përsërite Daily Përditë Weekdays Ditë të javës Weekly Çdo javë Monthly Çdo muaj Yearly Çdo vit End Repeat Përfundoje Përsëritjen Më After Pas On Cancel button Anuloje Save button Ruaje CScheduleOperation All occurrences of a repeating event must have the same all-day status. Krejt rastet e një veprimtarie që përsëritet duhet të kenë të njëjtën gjendje gjithë-ditën. Do you want to change all occurrences? Doni të ndryshohen krejt përsëritjet? Cancel button Anuloje Change All Ndryshoji Krejt You are changing the repeating rule of this event. Po ndryshoni rregullin e përsëritjes së kësaj veprimtarie. You are deleting an event. Po fshini një veprimtari. Are you sure you want to delete this event? Jeni i sigurt se doni të fshihet kjo veprimtari? Delete button Fshije Do you want to delete all occurrences of this event, or only the selected occurrence? Doni të fshihen krejt përsëritjet e kësaj veprimtarie, apo vetëm përsëritjen e përzgjedhur? Delete All Fshiji Krejt Delete Only This Event Fshi Vetëm Këtë Veprimtari Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Doni të fshihet kjo dhe krejt përsëritjet e ardhshme të kësaj veprimtarie, apo vetëm përsëritjen e përzgjedhur? Delete All Future Events Fshi Krejt Veprimtaritë e Ardhshme You are changing a repeating event. Po ndryshoni një veprimtari me përsëritje. Do you want to change only this occurrence of the event, or all occurrences? Doni të ndryshohet vetëm kjo përsëritje e veprimtarisë, apo krejt përsëritjet? All Krejt Only This Event Vetëm Këtë Veprimtari Do you want to change only this occurrence of the event, or this and all future occurrences? Doni të ndryshohet vetëm kjo përsëritje e veprimtarisë, apo këtë dhe krejt përsëritjet e ardhshme? All Future Events Krejt Veprimtaritë e Ardhshme You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Keni përzgjedhur një muaj të brishtë dhe do t’ju kujtohet në përputhje me rregullat e kalendarit hënor. OK button OK CScheduleSearchDateItem Y V M M D D CScheduleSearchItem Edit Përpunojeni Delete Fshije All Day Tërë Ditën CScheduleSearchView No search results S’ka përfundime kërkimi CScheduleView ALL DAY TËRË DITËN CSettingDialog Manual Dorazi 15 mins 15 min. 30 mins 30 min. 1 hour 1 orë 24 hours 24 orë Sync Now Njëkohësoje Tani Last sync Njëkohësimi i fundit më Monday E hënë Sunday E diel 12-hour clock Sahat 12-orësh 24-hour clock Sahat 24-orësh Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 min.) (%1 hour) (%1 orë) (%1 hours) (%1 orë) CTitleWidget Y V M M W J D D Search events and festivals Kërkoni në veprimtari dhe festivale CWeekWidget Sun Die Mon Hën Tue Mar Wed Mër Thu Enj Fri Pre Sat Sht CWeekWindow Week Javë Y V CYearScheduleView All Day Tërë Ditën No event S’ka veprimtari CYearWindow Y V CalendarWindow Calendar Kalendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendari është një mjet për parje datash, si dhe një planifikues i mençur ditor për të vënë në plan krejt gjërat e jetës së përditshme. Calendarmainwindow Calendar Kalendar Manage Administrojeni Privacy Policy Rregulla Privatësie Syncing... Po njëkohësohet… Sync successful Njëkohësim i suksesshëm Sync failed, please try later Njëkohësimi dështoi, ju lutemi, provoni më vonë CenterWidget All Day Tërë Ditën DAccountDataBase Work Pune Life Shtëpie Other Tjetër DAlarmManager Close button Mbylle One day before start Një ditë para fillimit Remind me tomorrow Kujtoma nesër Remind me later Kujtoma më vonë 15 mins later pas 15 minutash 1 hour later pas 1 ore 4 hours later pas 4 orësh Tomorrow Nesër Schedule Reminder Kujtues Planesh %1 to %2 %1 deri më %2 Today Sot DragInfoGraphicsView Edit Përpunim Delete Fshije New event Veprimtari e re New Event Veprimtari e Re JobTypeListView You are deleting an event type. Po fshini një lloj veprimtarish. All events under this type will be deleted and cannot be recovered. Krejt veprimtaritë nën këtë lloj do të fshihen dhe s’mund të rikthehen. Cancel button Anuloje Delete button Fshije QObject Account settings Rregullime llogarie Account Llogari Select items to be synced Përzgjidhni objekte për t’u njëkohësuar Events Veprimtari General settings Rregullime të përgjithshme Sync interval Interval njëkohësimi Manage calendar Administroni kalendar Calendar account Llogari Kalendari Event types Lloje veprimtarish General Të përgjithshme First day of week Ditën e parë të javës Time Kohë Return Today Return Sot Return Today Today Return Today Sot ScheduleTypeEditDlg New event type Lloj veprimtarie të re Edit event type Përpunoni lloj veprimtarie Name: Emër: Color: Ngjyrë: Cancel button Anuloje Save button Ruaje The name can not only contain whitespaces Emri s’mund të përmbajë vetëm hapësira të zbrazëta Enter a name please Ju lutemi, jepni një emër Shortcut Help Ndihmë Delete event Fshije veprimtarinë Copy Kopjoje Cut Prije Paste Ngjite Delete Fshije Select all Përzgjidhi krejt SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Jepi UserloginWidget Sign In button Hyni Sign Out button Dilni YearFrame Y V today Today Today Sot dde-calendar-5.14.13/translations/dde-calendar-service_sr.ts000066400000000000000000000734331473346337000237520ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Боја Cancel button Откажи Save button Сачувај CDayMonthView Monday Понедељак Tuesday Уторак Wednesday Среда Thursday Четвртак Friday Петак Saturday Субота Sunday Недеља CDayWindow Y Г M М D Д Lunar Лунарно CGraphicsView New Event Нови догађај CMonthScheduleNumItem %1 more Још %1 CMonthView New event Нови догађај New Event Нови догађај CMonthWindow Y Г CMyScheduleView My Event Мој догађај OK button У реду Delete button Обриши Edit button Уреди CPushButton New event type CScheduleDlg New Event Нови догађај Edit Event Уреди догађај End time must be greater than start time Крајње време мора бити након почетног OK button У реду Never Никад At time of event У време догађаја 15 minutes before 15 минута раније 30 minutes before 30 минута раније 1 hour before 1 сат раније 1 day before 1 дан раније 2 days before 2 дана раније 1 week before 1 седмица раније On start day (9:00 AM) На дан почетка (9:00 АМ) time(s) пут(а) Enter a name please The name can not only contain whitespaces Type: Врста: Description: Опис: All Day: Цео дан: Starts: Почетак: Ends: Крај: Remind Me: Подсетник: Repeat: Понови: End Repeat: Окончај: Calendar account: Calendar account Type Врста Description Опис All Day Цео дан Time: Time Време Solar Lunar Лунарно Starts Почетак Ends Крај Remind Me Подсетник Repeat Понови Daily Свакодневно Weekdays Радним данима Weekly Седмично Monthly Месечно Yearly Годишње End Repeat Окончај After Након On Укључ. Cancel button Откажи Save button Сачувај CScheduleOperation All occurrences of a repeating event must have the same all-day status. Све појаве понављајућег догађаја морају имати исти целодневни статус. Do you want to change all occurrences? Желите ли да промените све појаве? Cancel button Откажи Change All Промени све You are changing the repeating rule of this event. Мењате правило понављања овог догађаја. You are deleting an event. Бришете догађај. Are you sure you want to delete this event? Заиста желите да обришете овај догађај? Delete button Обриши Do you want to delete all occurrences of this event, or only the selected occurrence? Да ли желите да обришете све појаве овог догађаја или само изабрану ставку? Delete All Обриши све Delete Only This Event Обриши само овај догађај Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Желите ли да обришете ову и све будуће појаве овог догађаја или само изабрану ставку? Delete All Future Events Обриши све будуће догађаје You are changing a repeating event. Мењате понаљајући догађај. Do you want to change only this occurrence of the event, or all occurrences? Желите ли да промените само ову појаву догађаја или све? All Све Only This Event Само овај догађај Do you want to change only this occurrence of the event, or this and all future occurrences? Желите ли да промените ову појаву догађаја или ову појаву и све будуће појаве? All Future Events Сви будући догађаји You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button У реду CScheduleSearchDateItem Y Г M М D Д CScheduleSearchItem Edit Уреди Delete Обриши All Day Цео дан CScheduleSearchView No search results Нема резултата претраге CScheduleView ALL DAY ЦЕО ДАН CSettingDialog Manual Ручно 15 mins 30 mins 1 hour 1 сат 24 hours Sync Now Last sync Monday Понедељак Sunday Недеља 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Г M М W С D Д Search events and festivals CWeekWidget Sun Нед Mon Пон Tue уто Wed Сре Thu чет Fri Пет Sat Суб CWeekWindow Week Седмица Y Г CYearScheduleView All Day Цео дан No event Нема догађаја CYearWindow Y Г CalendarWindow Calendar Календар Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Календар је алат за приказ датума и паметани роковник за подсећање на све догађаје у животу. Calendarmainwindow Calendar Календар Manage Privacy Policy Политика приватности Syncing... Синхронизација... Sync successful Sync failed, please try later CenterWidget All Day Цео дан DAccountDataBase Work Посао Life Живот Other Остало DAlarmManager Close button Затвори One day before start Један дан пре пчетка Remind me tomorrow Подсети ме сутра Remind me later Подсети касније 15 mins later 1 hour later 4 hours later Tomorrow Сутра Schedule Reminder Подсетник догађаја %1 to %2 %1 до %2 Today Данас DragInfoGraphicsView Edit Уреди Delete Обриши New event Нови догађај New Event Нови догађај JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Откажи Delete button Обриши QObject Account settings Account Налог Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General Опште First day of week Time Време Return Today Return Данас Return Today Today Return Today Данас ScheduleTypeEditDlg New event type Edit event type Name: Име: Color: Cancel button Откажи Save button Сачувај The name can not only contain whitespaces Enter a name please Shortcut Help Помоћ Delete event Обриши догађај Copy Копирај Cut Исеци Paste Убаци Delete Обриши Select all Изабери све SidebarCalendarWidget Y Г M М TimeJumpDialog Go button UserloginWidget Sign In button Пријави се Sign Out button Одајави се YearFrame Y Г today Today Today Данас dde-calendar-5.14.13/translations/dde-calendar-service_th.ts000066400000000000000000000754311473346337000237410ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button ยกเลิก Save button บันทึก CDayMonthView Monday วันจันทร์ Tuesday วันอังคาร Wednesday วันพุธ Thursday วันพฤหัสบดี Friday วันศุกร์ Saturday วันศุกร์ Sunday วันอาทิตย์ CDayWindow Y M D Lunar CGraphicsView New Event กิจกรรมใหม่ CMonthScheduleNumItem %1 more อีก 1% CMonthView New event เหตุการณ์ใหม่ New Event กิจกรรมใหม่ CMonthWindow Y CMyScheduleView My Event กิจกรรมของฉัน OK button ตกลง Delete button ลบ Edit button แก้ไข CPushButton New event type CScheduleDlg New Event กิจกรรมใหม่ Edit Event แก้ไขกิจกรรม End time must be greater than start time เวลาสิ้นสุดต้องมากกว่าเวลาเริ่มต้น OK button ตกลง Never ไม่เคย At time of event ในช่วงเวลาของกิจกรรม 15 minutes before 15 นาทีก่อน 30 minutes before 30 นาทีก่อน 1 hour before 1 ชั่วโมงก่อน 1 day before 1 วันก่อน 2 days before 2 วันก่อน 1 week before 1 สัปดาห์ก่อน On start day (9:00 AM) ทําการในเวลา (09:00 น.) time(s) เวลา (s) Enter a name please The name can not only contain whitespaces Type: ประเภท: Description: รายละเอียด: All Day: ทั้งวัน: Starts: เริ่ม: Ends: สิ้นสุด: Remind Me: เตือนฉัน: Repeat: ทำซ้ำ: End Repeat: สิ้นสุดการทำซ้ำ: Calendar account: Calendar account Type ประเภท Description รายละเอียด All Day ทั้งวัน Time: Time Solar Lunar Starts เริ่ม Ends สิ้นสุด Remind Me เตือนฉัน Repeat ทำซ้ำ Daily ประจำวัน Weekdays วันธรรมดา Weekly รายสัปดาห์ Monthly รายเดือน Yearly รายปี End Repeat สิ้นสุดการทำซ้ำ After หลังจาก On Cancel button ยกเลิก Save button บันทึก CScheduleOperation All occurrences of a repeating event must have the same all-day status. กิจกรรมที่เกิดขึ้นซ้ำทั้งหมดต้องมีสถานะตลอดทั้งวันเหมือนกัน Do you want to change all occurrences? คุณต้องการเปลี่ยนกิจกรรมทั้งหมดหรือไม่? Cancel button ยกเลิก Change All เปลี่ยนทั้งหมด You are changing the repeating rule of this event. คุณกำลังเปลี่ยนกฎการทำซ้ำของกิจกรรมนี้ You are deleting an event. คุณกำลังลบกิจกรรม Are you sure you want to delete this event? คุณแน่ใจหรือไม่ว่าคุณต้องการที่จะลบกิจกรรมนี้ Delete button ลบ Do you want to delete all occurrences of this event, or only the selected occurrence? คุณต้องการลบกิจกรรมทั้งหมดที่เกิดขึ้นหรือเฉพาะกิจกรรมที่เลือกไว้หรือไม่ ? Delete All ลบทั้งหมด Delete Only This Event ลบเฉพาะกิจกรรมนี้ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? คุณต้องการลบกิจกรรมนี้และกิจกรรมที่จะเกิดขึ้นในอนาคตทั้งหมดหรือเฉพาะกิจกรรมที่เลือก ? Delete All Future Events ลบกิจกรรมในอนาคตทั้งหมด You are changing a repeating event. คุณกำลังเปลี่ยนกิจกรรมที่เกิดซ้ำ Do you want to change only this occurrence of the event, or all occurrences? คุณต้องการเปลี่ยนเฉพาะกิจกรรมนี้หรือกิจกรรมทั้งหมดหรือไม่ All ทั้งหมด Only This Event กิจกรรมนี้เท่านั้น Do you want to change only this occurrence of the event, or this and all future occurrences? คุณต้องการเปลี่ยนเฉพาะกิจกรรมที่เกิดขึ้นนี้หรือกิจกรรมนี้และกิจกรรมในอนาคตทั้งหมดหรือไม่ All Future Events กิจกรรมในอนาคตทั้งหมด You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button ตกลง CScheduleSearchDateItem Y M D CScheduleSearchItem Edit แก้ไข Delete ลบ All Day ทั้งวัน CScheduleSearchView No search results ไม่มีผลลัพธ์การค้นหา CScheduleView ALL DAY ทั้งวัน CSettingDialog Manual แมนนวล 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Monday วันจันทร์ Sunday วันอาทิตย์ 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y M W D Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week สัปดาห์ Y CYearScheduleView All Day ทั้งวัน No event ไม่มีกิจกรรม CYearWindow Y CalendarWindow Calendar ปฏิทิน Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ปฏิทินเป็นเครื่องมือในการดูวันที่และยังเป็นนักวางแผนรายวันที่ชาญฉลาดเพื่อกำหนดเวลาทุกสิ่งในชีวิต Calendarmainwindow Calendar ปฏิทิน Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day ทั้งวัน DAccountDataBase Work งาน Life ชีวิต Other อื่น ๆ DAlarmManager Close button ปิด One day before start Remind me tomorrow Remind me later 15 mins later 1 hour later 4 hours later Tomorrow Schedule Reminder %1 to %2 Today วันนี้ DragInfoGraphicsView Edit แก้ไข Delete ลบ New event กิจกรรมใหม่ New Event กิจกรรมใหม่ JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button ยกเลิก Delete button ลบ QObject Account settings Account Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General ทั่วไป First day of week Time Return Today Return วันนี้ Return Today Today Return Today วันนี้ ScheduleTypeEditDlg New event type Edit event type Name: Color: Cancel button ยกเลิก Save button บันทึก The name can not only contain whitespaces Enter a name please Shortcut Help วิธีใช้ Delete event ลบกิจกรรม Copy ทำสำเนา Cut ตัด Paste วาง Delete ลบ Select all เลือกทั้งหมด SidebarCalendarWidget Y M TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y today Today Today วันนี้ dde-calendar-5.14.13/translations/dde-calendar-service_tr.ts000066400000000000000000000742051473346337000237510ustar00rootroot00000000000000 AccountItem Sync successful Eşitleme başarılı Network error Ağ hatası Server exception Sunucu istisnası Storage full Hafıza dolu AccountManager Local account Yerel hesap Event types Etkinlik türleri CColorPickerWidget Color Renk Cancel button İptal Save button Kaydet CDayMonthView Monday Pazartesi Tuesday Salı Wednesday Çarşamba Thursday Perşembe Friday Cuma Saturday Cumartesi Sunday Pazar CDayWindow Y Y M A D G Lunar Ay CGraphicsView New Event Yeni Etkinlik CMonthScheduleNumItem %1 more %1 daha fazla CMonthView New event Yeni etkinlik New Event Yeni Etkinlik CMonthWindow Y Y CMyScheduleView My Event Etkinliğim OK button Tamam Delete button Sil Edit button Düzenle CPushButton New event type Yeni etkinlik türü CScheduleDlg New Event Yeni Etkinlik Edit Event Etkinliği Düzenle End time must be greater than start time Bitiş zamanı başlangıç ​​zamanından büyük olmalıdır OK button Tamam Never Asla At time of event Etkinlik anında 15 minutes before 15 dakika önce 30 minutes before 30 dakika önce 1 hour before 1 saat önce 1 day before 1 gün önce 2 days before 2 gün önce 1 week before 1 hafta önce On start day (9:00 AM) Başlangıç ​​gününde (09:00) time(s) zaman(lar) Enter a name please Lütfen bir ad girin The name can not only contain whitespaces Ad sadece boşluk karakterlerinden oluşamaz Type: Tür: Description: Açıklama: All Day: Tüm Gün: Starts: Başlangıç: Ends: Bitiş: Remind Me: Hatırlat: Repeat: Tekrar: End Repeat: Tekrar Sonu: Calendar account: Takvim hesabı: Calendar account Takvim hesabı Type Tür Description Açıklama All Day Tüm Gün Time: Zaman: Time Zaman Solar Güneş Lunar Ay Starts Başlangıç Ends Bitiş Remind Me Hatırlat Repeat Tekrar Daily Günlük Weekdays Hafta içi Weekly Haftalık Monthly Aylık Yearly Yıllık End Repeat Tekrar Sonu After Sonra On Açık Cancel button İptal Save button Kaydet CScheduleOperation All occurrences of a repeating event must have the same all-day status. Tekrarlanan bir etkinliğin tüm tekrarlamaları, tüm gün boyunca aynı duruma sahip olmalıdır. Do you want to change all occurrences? Tüm tekrarlamaları değiştirmek ister misiniz? Cancel button İptal Change All Tümünü Değiştir You are changing the repeating rule of this event. Bu etkinliğin tekrarlama kuralını değiştiriyorsunuz. You are deleting an event. Bir etkinliği siliyorsunuz. Are you sure you want to delete this event? Bu etkinliği silmek istediğinizden emin misiniz? Delete button Sil Do you want to delete all occurrences of this event, or only the selected occurrence? Bu olayın tüm tekrarlarını mı yoksa yalnızca seçilen olayı mı silmek istiyorsun? Delete All Tümünü Sil Delete Only This Event Yalnızca Bu Etkinliği Sil Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Bunu ve bu olayın gelecekteki tüm tekrarlarını mı yoksa yalnızca seçilen olayı mı silmek istiyorsunuz? Delete All Future Events Gelecekteki Tüm Etkinlikleri Sil You are changing a repeating event. Tekrarlanan bir etkinliği değiştiriyorsunuz. Do you want to change only this occurrence of the event, or all occurrences? Etkinliğin yalnızca bu tekrarlamasını mı yoksa tüm tekrarlamalarını mı değiştirmek istiyorsunuz? All Tümü Only This Event Sadece Bu Etkinlik Do you want to change only this occurrence of the event, or this and all future occurrences? Yalnızca etkinliğin bu etkinliğini mi, yoksa bunu ve gelecekteki tüm etkinlikleri değiştirmek istiyorsunuz? All Future Events Gelecekteki Tüm Etkinlikler You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Artık bir ay seçtiniz ve ay takvimi kurallarına göre hatırlatılacak. OK button Tamam CScheduleSearchDateItem Y Y M A D G CScheduleSearchItem Edit Düzenle Delete Sil All Day Tüm Gün CScheduleSearchView No search results Arama sonucu bulunamadı CScheduleView ALL DAY TÜM GÜN CSettingDialog Manual Manuel 15 mins 15 Dakika 30 mins 30 Dakika 1 hour 1 Saat 24 hours 24 Saat Sync Now Şimdi senkronize et Last sync Son senkronizasyon Monday Pazartesi Sunday Pazar 12-hour clock 12 saatlik zaman 24-hour clock 24 saatlik zaman Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 dakika) (%1 hour) (%1 saat) (%1 hours) (%1 saat) CTitleWidget Y Y M A W H D G Search events and festivals Etkinlikleri ve bayramları ara CWeekWidget Sun Pazar Mon Pazartesi Tue Salı Wed Çarşamba Thu Perşembe Fri Cuma Sat Cumartesi CWeekWindow Week Hafta Y Y CYearScheduleView All Day Tüm Gün No event Etkinlik yok CYearWindow Y Y CalendarWindow Calendar Takvim Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Takvim tarihleri ​​görüntülemek için bir araçtır ve aynı zamanda hayattaki her şeyi planlamak için akıllı bir günlük planlayıcısıdır. Calendarmainwindow Calendar Takvim Manage Yönet Privacy Policy Gizlilik Politikası Syncing... Eşitleniyor... Sync successful Senkronizasyon başarılı Sync failed, please try later Eşitleme başarısız, lütfen daha sonra deneyin CenterWidget All Day Tüm Gün DAccountDataBase Work Çalışma Life Yaşam Other Diğer DAlarmManager Close button Kapat One day before start Başlamadan bir gün önce Remind me tomorrow Bana yarın hatırlat Remind me later Bana daha sonra hatırlat 15 mins later 15 Dakika sonra 1 hour later 1 Saat sonra 4 hours later 4 Saat sonra Tomorrow Yarın Schedule Reminder Zamanlama hatırlatıcısı %1 to %2 %1 ila %2 Today Bugün DragInfoGraphicsView Edit Düzenle Delete Sil New event Yeni etkinlik New Event Yeni Etkinlik JobTypeListView You are deleting an event type. Bir etkinlik türünü siliyorsunuz. All events under this type will be deleted and cannot be recovered. Bu türün altındaki etkinlikler silinir ve geri getirilemez. Cancel button İptal Delete button Sil QObject Account settings Hesap ayarları Account Hesap Select items to be synced Senkronize edilecek öğeyi seçin Events Etkinlikler General settings Genel ayarlar Sync interval Senkronizasyon aralığı Manage calendar Takvimi yönet Calendar account Takvim hesabı Event types Etkinlik türleri General Genel First day of week Haftanın ilk günü Time Zaman Return Today Return Bugün Return Today Today Return Today Bugün ScheduleTypeEditDlg New event type Yeni etkinlik türü Edit event type Etkinlik türünü düzenle Name: Ad: Color: Renk: Cancel button İptal Save button Kaydet The name can not only contain whitespaces Ad sadece boşluk karakterlerinden oluşamaz Enter a name please Lütfen bir ad girin Shortcut Help Yardım Delete event Etkinliği sil Copy Kopyala Cut Kes Paste Yapıştır Delete Sil Select all Tümünü seç SidebarCalendarWidget Y Y M A TimeJumpDialog Go button Git UserloginWidget Sign In button Giriş Sign Out button Çıkış YearFrame Y Y today Today Today Bugün dde-calendar-5.14.13/translations/dde-calendar-service_ug.ts000066400000000000000000001021141473346337000237260ustar00rootroot00000000000000 AccountItem Sync successful ماس قەدەملەندى Network error تور خاتالىقى Server exception مۇلازىمىتېر نورمالسىز Storage full بوشلۇق توشۇپ كەتتى AccountManager Local account يەرلىك ھېسابات Event types كۈنتەرتىپ تۈرى CColorPickerWidget Color رەڭ Cancel button بىكار قىلىش Save button ساقلاش CDayMonthView Monday دۈشەنبە Tuesday سەيشەنبە Wednesday چارشەنبە Thursday پەيشەنبە Friday جۈمە Saturday شەنبە Sunday يەكشەنبە CDayWindow Y يىلى M ئاي D كۈنى Lunar دېھقانلار كالېندارى CGraphicsView New Event يېڭى كۈنتەرتىپ قۇرۇش CMonthScheduleNumItem %1 more يەنە %1 تۈر بار CMonthView New event كۈنتەرتىپ قۇرۇش New Event يېڭى كۈنتەرتىپ قۇرۇش CMonthWindow Y يىلى CMyScheduleView My Event كۈنتەرتىپىم OK button تامام Delete button ئۆچۈرۈش Edit button تەھرىرلەش CPushButton New event type كۈنتەرتىپ تۈرى قوشۇش CScheduleDlg New Event كۈنتەرتىپ قۇرۇش Edit Event كۈنتەرتىپنى تەھرىرلەش End time must be greater than start time ئاخىرلىشىش ۋاقتى باشلىنىش ۋاقتىدىن كېيىن بولۇشى كېرەك OK button تامام Never ھەرگىز At time of event كۈتەرتىپ باشلانغاندا 15 minutes before 15 مىنۇت بۇرۇن 30 minutes before 30 مىنۇت بۇرۇن 1 hour before 1 سائەت بۇرۇن 1 day before 1 كۈن بۇرۇن 2 days before 2 كۈن بۇرۇن 1 week before 1 ھەپتە بۇرۇن On start day (9:00 AM) كۈنتەرتىپ باشلانغان كۈن (چۈشتىن بۇرۇن 9 دا) time(s) ۋاقىت Enter a name please نام قۇرۇق قالمىسۇن The name can not only contain whitespaces نامنىڭ ھەممىسى بوشلۇق بولسا بولمايدۇ، ئۆزگەرتىڭ Type: تۈرى: Description: مەزمۇنى: All Day: پۈتۈن كۈن: Starts: باشلىنىدىغان ۋاقىت: Ends: ئاخىرلىشىدىغان ۋاقىت: Remind Me: ئەسكەرتىش: Repeat: قايتىلاش: End Repeat: قايتىلاشنى ئاخىرلاشتۇرۇش: Calendar account: كالېندار ھېساباتى: Calendar account كالېندار ھېساباتى: Type تۈر Description مەزمۇن All Day پۈتۈن كۈن Time: ۋاقىت: Time ۋاقىت Solar مىلادىيە كالېندارى Lunar دېھقانلار كالېندارى Starts باشلىنىدىغان ۋاقىت Ends ئاخىرلىشىدىغان ۋاقىت Remind Me ئەسكەرتىش Repeat قايتىلاش Daily ھەر كۈنى Weekdays خىزمەت كۈنى Weekly ھەر ھەپتە Monthly ھەر ئاي Yearly ھەر يىلى End Repeat قايتىلاشنى ئاخىرلاشتۇرۇش After دىن On غىچە ۋاقىت Cancel button بىكار قىلىش Save button ساقلاش CScheduleOperation All occurrences of a repeating event must have the same all-day status. تەكرارلانغان كۈنتەرتىپتىكى بارلىق تەكرارلىنىش چوقۇم پۈتۈن كۈنلۈك ھالەتتە بولۇشى كېرەك. Do you want to change all occurrences? بارلىق تەكرارلاشلارنى ئۆزگەرتمەكچىمۇ؟ Cancel button بىكار قىلىش Change All ھەممىنى ئۆزگەرتىش You are changing the repeating rule of this event. كۈنتەرتىپنىڭ تەكرارلىنىش قائىدىسىنى ئۆزگەرتىۋاتىسىز. You are deleting an event. كۈنتەرتىپنى ئۆچۈرۈۋاتىسىز. Are you sure you want to delete this event? بۇ كۈنتەرتىپنى ئۆچۈرمەكچىمۇ؟ Delete button ئۆچۈرۈش Do you want to delete all occurrences of this event, or only the selected occurrence? بۇ كۈنتەرتىپتىكى بارلىق تەكرارلىنىشىنى ئۆچۈرەمسىز ياكى پەقەت تاللانغان تەكرارلاشلارنىلا ئۆچۈرەمسىز؟ Delete All ھەممىنى ئۆچۈرۈش Delete Only This Event مۇشۇنىلا ئۆچۈرۈرش Do you want to delete this and all future occurrences of this event, or only the selected occurrence? بۇ كۈنتەرتىپتىكى تەكرارلانغان ۋە كەلگۈسىدە تەكرارلىنىدىغانلىرى ئۆچۈرەمسىز ياكى تاللانغان تەكرارلاشنىلا ئۆچۈرەمسىز؟ Delete All Future Events بارلىق كۈنتەرتىپنى ئۆچۈرۈش You are changing a repeating event. قايتىلىنىدىغان كۈنتەرتىپنى ئۆزگەرتىۋاتىسىز. Do you want to change only this occurrence of the event, or all occurrences? بۇ كۈنتەرتىپتىكى بارلىق تەكرارلىنىشىنى ئۆزگەرتەمسىز ياكى پەقەت تاللانغان تەكرارلاشلارنىلا ئۆزگەرتەمسىز؟ All ھەممىنى Only This Event تاللانغىنىنى Do you want to change only this occurrence of the event, or this and all future occurrences? بۇ كۈنتەرتىپتىكى تەكرارلانغان ۋە كەلگۈسىدە تەكرارلىنىدىغانلىرى ئۆزگەرتەمسىز ياكى تاللانغان تەكرارلاشنىلا ئۆزگەرتەمسىز؟ All Future Events بارلىق كۈنتەرتىپلەر You have selected a leap month, and will be reminded according to the rules of the lunar calendar. تاللىغىنىڭىز كەبىسە ئېيى، دېھقانلار كالېندارى بويىچە ئەسكەرتىدۇ OK button جەزىملەشتۈرۈش CScheduleSearchDateItem Y يىل M ئاي D كۈن CScheduleSearchItem Edit تەھرىرلەش Delete ئۆچۈرۈش All Day پۈتۈن كۈن CScheduleSearchView No search results ئىزدەش نەتىجىسى تىپىلمىدى CScheduleView ALL DAY پۈتۈن كۈن CSettingDialog Manual قولدا 15 mins ھەر 15 مىنۇتتا 30 mins ھەر 30 مىنۇتتا 1 hour ھەر 1 سائەتتە 24 hours ھەر 24 سائەتتە Sync Now ماس قەدەملەش Last sync يېقىنقى ماس قەدەملىگەن ۋاقىت Monday دۈشەنبە Sunday يەكشەنبە 12-hour clock 12 سائەتلىك 24-hour clock 24 سائەتلىك Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 مىنۇت) (%1 hour) (%1 سائەت) (%1 hours) (%1 سائەت) CTitleWidget Y يىل M ئاي W ھەپتە D كۈن Search events and festivals كۈنتەرتىپ/بايرام ئىزدەش CWeekWidget Sun كۈن Mon دۈشەنبە Tue سەيشەنبە Wed چارشەنبە Thu پەيشەنبە Fri جۈمە Sat شەنبە CWeekWindow Week ھەپتە Y يىلى CYearScheduleView All Day پۈتۈن كۈن No event كۈنتەرتىپ يوق CYearWindow Y يىلى CalendarWindow Calendar كالېندار Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. كالېندار چېسلا كۆرۈش، كۈنتەرتىپ باشقۇرۇشتا ئىشلىتىلىدىغان كىچىك قورال. Calendarmainwindow Calendar كالېندار Manage باشقۇرۇش Privacy Policy شەخسىيەت سىياسىتى Syncing... ماس قەدەملەۋاتىدۇ... Sync successful ماس قەدەملەندى Sync failed, please try later ماس قەدەملەنمىدى، قايتا سىناڭ CenterWidget All Day پۈتۈن كۈن DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button تاقاش One day before start 1 كۈن بۇرۇن ئەسكەرتىش Remind me tomorrow ئەتە ئەسكەرتسۇن Remind me later بىر ئازدىن كېيىن ئەسكەرتىش 15 mins later 15 مىنۇتتىن كېيىن 1 hour later 1 سائەتىن كېيىن 4 hours later 4 سائەتىن كېيىن Tomorrow ئەتە Schedule Reminder كۈنتەرتىپ ئەسكەرتىشى %1 to %2 %1 دىن %2 گىچە Today Today DragInfoGraphicsView Edit تەھرىرلەش Delete ئۆچۈرۈش New event يېڭى كۈنتەرتىپ قۇرۇش New Event كۈنتەرتىپ قۇرۇش JobTypeListView You are deleting an event type. كۈنتەرت تۈرىنى ئۆچۈرۈۋاتىسىز. All events under this type will be deleted and cannot be recovered. بۇ كۈنتەرتىپ تۈرى ئاستىدىكى بارلىق كۈنتەرتىپ ئۆچۈرۈلىدۇ ھەمدە ئەسلىگە كەلتۈرگىلى بولمايدۇ Cancel button بىكار قىلىش Delete button ئۆچۈرۈش QObject Account settings ھېسابات تەڭشىكى Account ھېسابات Select items to be synced ماس قەدەملەيدىغان تۈرلەرنى تەڭشەڭ Events كۈنتەرتىپ General settings ئادەتتىكى تەڭشەكلەر Sync interval ماس قەدەملەش چاستوتىسى Manage calendar كالېندار باشقۇرۇش Calendar account كالېندار ھېساباتى: Event types كالېندار تۈرى General ئۇنىۋېرسال First day of week ھەپتە قايسى كۈندىن باشلانسۇن Time ۋاقىت Return Today Return بۈگۈنگە قايتىش Return Today Today Return Today بۈگۈنگە قايتىش ScheduleTypeEditDlg New event type كۈنتەرتىپ تۈرى قوشۇش Edit event type كۈنتەرتىپ تۈرىنى تەھرىرلەش Name: نامى: Color: رەڭ: Cancel button بىكار قىلىش Save button ساقلاش The name can not only contain whitespaces نامنىڭ ھەممىسى بوشلۇق بولسا بولمايدۇ، ئۆزگەرتىڭ Enter a name please نام قۇرۇق قالمىسۇن Shortcut Help ياردەم Delete event كۈنتەرتىپنى ئۆچۈرۈش Copy كۆچۈرۈش Cut كېسىش Paste چاپلاش Delete ئۆچۈرۈش Select all ھەممىنى تاللاش SidebarCalendarWidget Y يىلى M ئاي TimeJumpDialog Go button ئاتلاش UserloginWidget Sign In button كىرىش Sign Out button چېكىنىش YearFrame Y يىلى today Today Today بۈگۈن dde-calendar-5.14.13/translations/dde-calendar-service_uk.ts000066400000000000000000001007461473346337000237430ustar00rootroot00000000000000 AccountItem Sync successful Успішна синхронізація Network error Помилка мережі Server exception Виключення сервера Storage full Переповнено сховище даних AccountManager Local account Локальний обліковий запис Event types Типи подій CColorPickerWidget Color Колір Cancel button Скасувати Save button Зберегти CDayMonthView Monday Понеділок Tuesday Вівторок Wednesday Середа Thursday Четвер Friday П'ятниця Saturday Субота Sunday Неділя CDayWindow Y Р M М D Д Lunar Місячний CGraphicsView New Event Нова подія CMonthScheduleNumItem %1 more і ще %1 CMonthView New event Нова подія New Event Нова подія CMonthWindow Y Р CMyScheduleView My Event Моя подія OK button Гаразд Delete button Вилучити Edit button Змінити CPushButton New event type Новий тип події CScheduleDlg New Event Нова подія Edit Event Редагування події End time must be greater than start time Кінцевий час не повинен передувати початковому часу OK button Гаразд Never Ніколи At time of event У момент події 15 minutes before За 15 хвилин до події 30 minutes before За 30 хвилин до події 1 hour before За годину до події 1 day before За день до події 2 days before За 2 дні до події 1 week before За тиждень до події On start day (9:00 AM) У день початку (9:00) time(s) раз(ів) Enter a name please Будь ласка, введіть назву The name can not only contain whitespaces Назва не може складатися лише з пробілів Type: Тип: Description: Опис: All Day: Весь день: Starts: Починається: Ends: Завершується: Remind Me: Нагадати мені: Repeat: Повторення: End Repeat: Завершити повтори: Calendar account: Обліковий запис календаря: Calendar account Обліковий запис календаря Type Тип Description Опис All Day Весь день Time: Час: Time Час Solar Сонячний Lunar Місячний Starts Починається Ends Кінці Remind Me Нагадати мені Repeat Повторення Daily Щодня Weekdays Дні тижня Weekly Щотижня Monthly Щомісяця Yearly Щорічно End Repeat Завершити повтори After Після On У Cancel button Скасувати Save button Зберегти CScheduleOperation All occurrences of a repeating event must have the same all-day status. В усіх повторень події має бути однаковий стан щодо заповнення подією усього дня. Do you want to change all occurrences? Хочете змінити усі повторення? Cancel button Скасувати Change All Змінити усі You are changing the repeating rule of this event. Ви змінюєте правило повторення цієї події. You are deleting an event. Ви вилучаєте запис події. Are you sure you want to delete this event? Ви впевнені, що бажаєте вилучити цей запис події? Delete button Вилучити Do you want to delete all occurrences of this event, or only the selected occurrence? Ви хочете вилучити усі повторення цієї події чи лише позначений запис? Delete All Вилучити всі Delete Only This Event Вилучити лише цей запис Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Ви хочете вилучити усі майбутні повторення цієї події чи лише позначені записи? Delete All Future Events Вилучити усі майбутні повторення You are changing a repeating event. Ви вносите зміни до повторюваної події. Do you want to change only this occurrence of the event, or all occurrences? Хочете змінити лише це повторення події чи усі повторення? All Усі Only This Event Лише цей запис Do you want to change only this occurrence of the event, or this and all future occurrences? Хочете змінити лише це повторення події чи усі майбутні повторення? All Future Events Усі майбутні повторення You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Вами вибрано високосний місяць. Вас буде попереджено відповідно до правил місячного календаря. OK button Гаразд CScheduleSearchDateItem Y Р M М D Д CScheduleSearchItem Edit Змінити Delete Вилучити All Day Весь день CScheduleSearchView No search results Нічого не знайдено CScheduleView ALL DAY УВЕСЬ ДЕНЬ CSettingDialog Manual Вручну 15 mins 15 хвилин 30 mins 30 хвилин 1 hour 1 година 24 hours 24 години Sync Now Синхронізувати зараз Last sync Остання синхронізація Monday Понеділок Sunday Неділя 12-hour clock 12-годинний формат часу 24-hour clock 24-годинний формат часу Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 хв.) (%1 hour) (%1 год.) (%1 hours) (%1 год.) CTitleWidget Y Р M М W Т D Д Search events and festivals Шукати події та свята CWeekWidget Sun Нд Mon Пн Tue Вт Wed Ср Thu Чт Fri Пт Sat Сб CWeekWindow Week Тиждень Y Р CYearScheduleView All Day Весь день No event Немає події CYearWindow Y Р CalendarWindow Calendar Календар Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. «Календар» — інструмент для перегляду календаря дат, також чудовий планувальник для створення розкладів на кожен день. Calendarmainwindow Calendar Календар Manage Керувати Privacy Policy Правила конфіденційності Syncing... Синхронізація... Sync successful Успішна синхронізація Sync failed, please try later Помилка синхронізації. Будь ласка, повторіть спробу пізніше CenterWidget All Day Весь день DAccountDataBase Work Робота Life Життя Other Інше DAlarmManager Close button Закрити One day before start За день до початку Remind me tomorrow Нагадати мені завтра Remind me later Нагадати мені пізніше 15 mins later За 15 хвилин 1 hour later За 1 годину 4 hours later За 4 години Tomorrow Завтра Schedule Reminder Розклад нагадування %1 to %2 з %1 до %2 Today Сьогодні DragInfoGraphicsView Edit Редагувати Delete Видалити New event Нова подія New Event Нова подія JobTypeListView You are deleting an event type. Ви вилучаєте тип події. All events under this type will be deleted and cannot be recovered. Усі події цього типу буде вилучено, їх не можна буде відновити. Cancel button Скасувати Delete button Вилучити QObject Account settings Параметри облікового запису Account Обліковий запис Select items to be synced Виберіть записи для синхронізації Events Події General settings Загальні параметри Sync interval Інтервал синхронізації Manage calendar Керувати календарем Calendar account Обліковий запис календаря Event types Типи подій General Загальне First day of week Перший день тижня Time Час Return Today Return Сьогодні Return Today Today Return Today Сьогодні ScheduleTypeEditDlg New event type Новий тип події Edit event type Редагувати тип події Name: Назва: Color: Колір: Cancel button Скасувати Save button Зберегти The name can not only contain whitespaces Назва не може складатися лише з пробілів Enter a name please Будь ласка, введіть назву Shortcut Help Допомога Delete event Вилучити подію Copy Копіювати Cut Вирізати Paste Вставити Delete Вилучити Select all Вибрати все SidebarCalendarWidget Y Р M М TimeJumpDialog Go button Перейти UserloginWidget Sign In button Увійти Sign Out button Вийти YearFrame Y Р today Today Today Сьогодні dde-calendar-5.14.13/translations/dde-calendar-service_vi.ts000066400000000000000000000720751473346337000237450ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button Hủy Save button Lưu CDayMonthView Monday Thứ hai Tuesday Thứ ba Wednesday Thứ tư Thursday Thứ năm Friday Thứ sáu Saturday Thứ bảy Sunday Chủ nhật CDayWindow Y Y M M D D Lunar CGraphicsView New Event Sự kiện mới CMonthScheduleNumItem %1 more thêm %1 CMonthView New event Sự kiện mới New Event Sự kiện mới CMonthWindow Y Y CMyScheduleView My Event Sự kiện của Tôi OK button OK Delete button Xóa Edit button Chỉnh sửa CPushButton New event type CScheduleDlg New Event Sự kiện mới Edit Event Chỉnh sửa Sự kiện End time must be greater than start time Thời gian kết thúc phải lớn hơn thời gian bắt đầu OK button OK Never Không bao giờ At time of event Vào thời điểm sự kiện 15 minutes before trước 15 phút 30 minutes before trước 30 phút 1 hour before 1 giờ trước 1 day before 1 ngày trước 2 days before 2 ngày trước 1 week before 1 tuần trước On start day (9:00 AM) Bắt đầu lúc (9:00 AM) time(s) thời gian(s) Enter a name please The name can not only contain whitespaces Type: Loại: Description: Mô tả: All Day: Tất cả các ngày: Starts: Bắt đầu: Ends: Kết thúc: Remind Me: Nhắc nhở tôi: Repeat: Lặp lại: End Repeat: Kết thúc lặp lại: Calendar account: Calendar account Type Loại Description Mô tả All Day Tất cả các ngày Time: Time Solar Lunar Starts Bắt đầu Ends Kết thúc Remind Me Nhắc nhở tôi Repeat Lặp lại Daily Hằng ngày Weekdays Các ngày trong tuần Weekly Hàng tuần Monthly Hàng tháng Yearly Hàng năm End Repeat Kết thúc lặp lại After Sau On Mở Cancel button Hủy Save button Lưu CScheduleOperation All occurrences of a repeating event must have the same all-day status. Tất cả các lần xuất hiện của một sự kiện lặp lại phải có cùng trạng thái ngày. Do you want to change all occurrences? Bạn có muốn thay đổi tất cả các lần xuất hiện? Cancel button Hủy Change All Thay đổi tất cả You are changing the repeating rule of this event. Bạn đang thay đổi quy tắc lặp lại của sự kiện này. You are deleting an event. Bạn đã xóa một sự kiện Are you sure you want to delete this event? Bạn có muốn xóa sự kiện này không Delete button Xóa Do you want to delete all occurrences of this event, or only the selected occurrence? Bạn có muốn xóa tất cả các lần xuất hiện của sự kiện này hay chỉ xảy ra sự kiện đã chọn? Delete All Xóa tất cả Delete Only This Event Chỉ xóa sự kiện này Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Bạn có muốn xóa sự kiện này và tất cả các lần xuất hiện trong tương lai của sự kiện này hay chỉ xảy ra sự kiện đã chọn? Delete All Future Events Xóa tất cả các sự kiện trong tương lai You are changing a repeating event. Bạn đang thay đổi một sự kiện lặp lại. Do you want to change only this occurrence of the event, or all occurrences? Bạn có muốn chỉ thay đổi sự xuất hiện của sự kiện này hay tất cả các sự kiện? All Tất cả Only This Event Chỉ sự kiện này Do you want to change only this occurrence of the event, or this and all future occurrences? Bạn có muốn chỉ thay đổi sự xuất hiện của sự kiện này, hoặc tất cả các lần xuất hiện trong tương lai? All Future Events Tất cả các sự kiện trong tương lai You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Chỉnh sửa Delete Xóa All Day Tất cả các ngày CScheduleSearchView No search results Không có kết quả tìm kiếm nào CScheduleView ALL DAY Tất cả các ngày CSettingDialog Manual Tự chỉnh 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Monday Thứ hai Sunday Chủ nhật 12-hour clock 24-hour clock Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Tuần Y Y CYearScheduleView All Day Tất cả các ngày No event Không có sự kiện nào CYearWindow Y Y CalendarWindow Calendar Lịch Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Lịch là một công cụ để xem ngày, và cũng là công cụ sắp xếp kế hoạch, sự kiện hàng ngày thông minh. Calendarmainwindow Calendar Lịch Manage Privacy Policy Chính sách bảo mật Syncing... Đồng bộ hóa... Sync successful Sync failed, please try later CenterWidget All Day Tất cả các ngày DAccountDataBase Work Công việc Life Cuộc sống Other Khác DAlarmManager Close button Đóng lại One day before start Một ngày trước khi bắt đầu Remind me tomorrow Nhắc tôi ngày mai Remind me later Nhắc tôi sau 15 mins later 1 hour later 4 hours later Tomorrow Ngày mai Schedule Reminder Lịch trình nhắc nhở %1 to %2 Today Hôm nay DragInfoGraphicsView Edit Chỉnh sửa Delete Xóa New event Sự kiện mới New Event Sự kiện mới JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Hủy Delete button Xóa QObject Account settings Account Tài khoản Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General Tổng quát First day of week Time Return Today Return Hôm nay Return Today Today Return Today Hôm nay ScheduleTypeEditDlg New event type Edit event type Name: Tên: Color: Cancel button Hủy Save button Lưu The name can not only contain whitespaces Enter a name please Shortcut Help Giúp đỡ Delete event Xóa sự kiện Copy Sao chép Cut Cắt Paste Dán Delete Xóa Select all Chọn tất cả SidebarCalendarWidget Y Y M M TimeJumpDialog Go button UserloginWidget Sign In button Đăng nhập Sign Out button Đăng xuất YearFrame Y Y today Today Today Hôm nay dde-calendar-5.14.13/translations/dde-calendar-service_zh_CN.ts000066400000000000000000000730751473346337000243310ustar00rootroot00000000000000 AccountItem Sync successful 同步成功 Network error 网络异常 Server exception 服务器异常 Storage full 存储已满 AccountManager Local account 本地帐户 Event types 日程类型 CColorPickerWidget Color 颜色 Cancel button 取 消 Save button 保 存 CDayMonthView Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六 Sunday 星期日 CDayWindow Y M D Lunar 农历 CGraphicsView New Event 新建日程 CMonthScheduleNumItem %1 more 还有%1项 CMonthView New event 新建日程 New Event 新建日程 CMonthWindow Y CMyScheduleView My Event 我的日程 OK button 确 定 Delete button 删 除 Edit button 编 辑 CPushButton New event type 新增日程类型 CScheduleDlg New Event 新建日程 Edit Event 编辑日程 End time must be greater than start time 结束时间需晚于开始时间 OK button 确 定 Never 从不 At time of event 日程开始时 15 minutes before 15分钟前 30 minutes before 30分钟前 1 hour before 1小时前 1 day before 1天前 2 days before 2天前 1 week before 1周前 On start day (9:00 AM) 日程发生当天(上午9点) time(s) 次后 Enter a name please 名称不能为空 The name can not only contain whitespaces 名称不能设置为全空格,请修改 Type: 类型: Description: 内容: All Day: 全天: Starts: 开始时间: Ends: 结束时间: Remind Me: 提醒: Repeat: 重复: End Repeat: 结束重复: Calendar account: 日历帐户: Calendar account 日历帐户 Type 类型 Description 内容 All Day 全天 Time: 时间: Time 时间 Solar 公历 Lunar 农历 Starts 开始时间 Ends 结束时间 Remind Me 提醒 Repeat 重复 Daily 每天 Weekdays 工作日 Weekly 每周 Monthly 每月 Yearly 每年 End Repeat 结束重复 After On 于日期 Cancel button 取 消 Save button 保 存 CScheduleOperation All occurrences of a repeating event must have the same all-day status. 重复日程的所有重复必须具有相同的全天状态。 Do you want to change all occurrences? 您要更改所有重复吗? Cancel button 取 消 Change All 全部更改 You are changing the repeating rule of this event. 您正在更改日程的重复规则。 You are deleting an event. 您正在删除日程。 Are you sure you want to delete this event? 您确定要删除此日程吗? Delete button 删 除 Do you want to delete all occurrences of this event, or only the selected occurrence? 您要删除此日程的所有重复,还是只删除所选重复? Delete All 全部删除 Delete Only This Event 仅删除此日程 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? 您要删除此日程的这个重复和所有将来重复,还是只删除所选重复? Delete All Future Events 删除所有将来日程 You are changing a repeating event. 您正在更改重复日程。 Do you want to change only this occurrence of the event, or all occurrences? 您要更改此日程的仅这一个重复,还是更改它的所有重复? All 全部日程 Only This Event 仅此日程 Do you want to change only this occurrence of the event, or this and all future occurrences? 您要更改此日程的这个重复和所有将来重复,还是只更改所选重复? All Future Events 所有将来日程 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. 您选择的是闰月,将按照农历规则提醒 OK button 确 定 CScheduleSearchDateItem Y M D CScheduleSearchItem Edit 编辑 Delete 删除 All Day 全天 CScheduleSearchView No search results 无搜索结果 CScheduleView ALL DAY 全天 CSettingDialog Manual 手动 15 mins 每15分钟 30 mins 每30分钟 1 hour 每1小时 24 hours 每24小时 Sync Now 立即同步 Last sync 最近同步时间 Monday 周一 Sunday 周日 12-hour clock 12小时制 24-hour clock 24小时制 Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1分钟) (%1 hour) (%1小时) (%1 hours) (%1小时) CTitleWidget Y M W D Search events and festivals 搜索日程/节日 CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Y CYearScheduleView All Day 全天 No event 无日程 CYearWindow Y CalendarWindow Calendar 日历 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 日历是一款查看日期、管理日程的小工具。 Calendarmainwindow Calendar 日历 Manage 管理 Privacy Policy 隐私政策 Syncing... 正在同步... Sync successful 同步成功 Sync failed, please try later 同步失败,请稍后再试 CenterWidget All Day 全天 DAccountDataBase Work 工作 Life 生活 Other 其他 DAlarmManager Close button 关 闭 One day before start 提前1天提醒 Remind me tomorrow 明天提醒 Remind me later 稍后提醒 15 mins later 15分钟后 1 hour later 1小时后 4 hours later 4小时后 Tomorrow 明天 Schedule Reminder 日程提醒 %1 to %2 %1 至 %2 Today 今天 DragInfoGraphicsView Edit 编辑 Delete 删除 New event 新建日程 New Event 新建日程 JobTypeListView You are deleting an event type. 您正在删除日程类型。 All events under this type will be deleted and cannot be recovered. 此日程类型下的所有日程都会删除且不可恢复。 Cancel button 取 消 Delete button 删 除 QObject Account settings 帐户设置 Account 帐户 Select items to be synced 设置您的同步项 Events 日程 General settings 通用设置 Sync interval 同步频率 Manage calendar 日历管理 Calendar account 日历帐户 Event types 日程类型 General 通用 First day of week 每星期开始于 Time 时间 Return Today Return 返回今天 Return Today Today Return Today 返回今天 ScheduleTypeEditDlg New event type 新增日程类型 Edit event type 编辑日程类型 Name: 名称: Color: 颜色: Cancel button 取 消 Save button 保 存 The name can not only contain whitespaces 名称不能设置为全空格,请修改 Enter a name please 名称不能为空 Shortcut Help 帮助 Delete event 删除日程 Copy 复制 Cut 剪切 Paste 粘贴 Delete 删除 Select all 全选 SidebarCalendarWidget Y M TimeJumpDialog Go button 跳 转 UserloginWidget Sign In button 登 录 Sign Out button 退出登录 YearFrame Y today Today Today 今天 dde-calendar-5.14.13/translations/dde-calendar-service_zh_HK.ts000066400000000000000000000730671473346337000243340ustar00rootroot00000000000000 AccountItem Sync successful 同步成功 Network error 網絡異常 Server exception 伺服器異常 Storage full 存儲已滿 AccountManager Local account 本地帳戶 Event types 日程類型 CColorPickerWidget Color 顏色 Cancel button 取 消 Save button 保 存 CDayMonthView Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六 Sunday 星期日 CDayWindow Y M D Lunar 農曆 CGraphicsView New Event 新建日程 CMonthScheduleNumItem %1 more 還有%1項 CMonthView New event 新建日程 New Event 新建日程 CMonthWindow Y CMyScheduleView My Event 我的日程 OK button 確 定 Delete button 刪 除 Edit button 更 改 CPushButton New event type 新增日程類型 CScheduleDlg New Event 新建日程 Edit Event 更改日程 End time must be greater than start time 結束時間需晚於開始時間 OK button 確 定 Never 永不 At time of event 日程開始時 15 minutes before 15分鐘前 30 minutes before 30分鐘前 1 hour before 1小時前 1 day before 1天前 2 days before 2天前 1 week before 1週前 On start day (9:00 AM) 日程發生當天(上午9點) time(s) 次後 Enter a name please 名稱不能為空 The name can not only contain whitespaces 名稱不能設置為全空格,請修改 Type: 類型: Description: 描述: All Day: 全天: Starts: 開始時間: Ends: 結束時間: Remind Me: 提醒: Repeat: 重複: End Repeat: 結束重複: Calendar account: 日曆帳戶: Calendar account 日曆帳戶 Type 類型 Description 描述 All Day 全天 Time: 時間: Time 時間 Solar 公曆 Lunar 農曆 Starts 開始時間 Ends 結束時間 Remind Me 提醒 Repeat 重複 Daily 每天 Weekdays 工作日 Weekly 每週 Monthly 每月 Yearly 每年 End Repeat 結束重複 After On 於日期 Cancel button 取 消 Save button 保 存 CScheduleOperation All occurrences of a repeating event must have the same all-day status. 重複日程的所有重複必須具有相同的全天狀態。 Do you want to change all occurrences? 您要更改所有重複嗎? Cancel button 取 消 Change All 全部更改 You are changing the repeating rule of this event. 您正在更改日程的重複規則。 You are deleting an event. 您正在刪除日程。 Are you sure you want to delete this event? 您確定要刪除此日程嗎? Delete button 刪 除 Do you want to delete all occurrences of this event, or only the selected occurrence? 您要刪除此日程的所有重複,還是只刪除所選重複? Delete All 全部刪除 Delete Only This Event 僅刪除此日程 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? 您要刪除此日程的這個重複和所有將來重複,還是只刪除所選重複? Delete All Future Events 刪除所有將來日程 You are changing a repeating event. 您正在更改重複日程。 Do you want to change only this occurrence of the event, or all occurrences? 您要更改此日程的僅這一個重複,還是更改它的所有重複? All 全部日程 Only This Event 僅此日程 Do you want to change only this occurrence of the event, or this and all future occurrences? 您要更改此日程的這個重複和所有將來重複,還是只更改所選重複? All Future Events 所有將來日程 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. 您選擇的是閏月,將按照農曆規則提醒 OK button 確 定 CScheduleSearchDateItem Y M D CScheduleSearchItem Edit 更改 Delete 刪除 All Day 全天 CScheduleSearchView No search results 無搜索結果 CScheduleView ALL DAY 全天 CSettingDialog Manual 手動 15 mins 每15分鐘 30 mins 每30分鐘 1 hour 每1小時 24 hours 每24小時 Sync Now 立即同步 Last sync 最近同步時間 Monday 週一 Sunday 週日 12-hour clock 12小時制 24-hour clock 24小時制 Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1分鐘) (%1 hour) (%1小時) (%1 hours) (%1小時) CTitleWidget Y M W D Search events and festivals 搜索日程/節日 CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Y CYearScheduleView All Day 全天 No event 無日程 CYearWindow Y CalendarWindow Calendar 日曆 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 日曆是一款查看日期、管理日程的小工具。 Calendarmainwindow Calendar 日曆 Manage 管理 Privacy Policy 私隱政策 Syncing... 正在同步... Sync successful 同步成功 Sync failed, please try later 同步失敗,請稍後再試 CenterWidget All Day 全天 DAccountDataBase Work 工作 Life 生活 Other 其他 DAlarmManager Close button 關 閉 One day before start 提前1天提醒 Remind me tomorrow 明天提醒 Remind me later 稍後提醒 15 mins later 15分鐘後 1 hour later 1小時後 4 hours later 4小時後 Tomorrow 明天 Schedule Reminder 日程提醒 %1 to %2 %1 至 %2 Today 今天 DragInfoGraphicsView Edit 更改 Delete 删除 New event 新建日程 New Event 新建日程 JobTypeListView You are deleting an event type. 您正在刪除日程類型。 All events under this type will be deleted and cannot be recovered. 此日程類型下的所有日程都會刪除且不可恢復。 Cancel button 取 消 Delete button 刪 除 QObject Account settings 帳戶設置 Account 賬戶 Select items to be synced 設置您的同步項 Events 日程 General settings 通用設置 Sync interval 同步頻率 Manage calendar 日曆管理 Calendar account 日曆帳戶 Event types 日程類型 General 通用 First day of week 每星期開始於 Time 時間 Return Today Return 今天 Return Today Today Return Today 今天 ScheduleTypeEditDlg New event type 新增日程類型 Edit event type 編輯日程類型 Name: 名稱: Color: 顏色: Cancel button 取 消 Save button 保 存 The name can not only contain whitespaces 名稱不能設置為全空格,請修改 Enter a name please 名稱不能為空 Shortcut Help 幫助 Delete event 刪除日程 Copy 複製 Cut 剪下 Paste 黏貼 Delete 刪除 Select all 選擇全部 SidebarCalendarWidget Y M TimeJumpDialog Go button 跳 轉 UserloginWidget Sign In button 登 錄 Sign Out button 退出登錄 YearFrame Y today Today Today 今天 dde-calendar-5.14.13/translations/dde-calendar-service_zh_TW.ts000066400000000000000000000730611473346337000243560ustar00rootroot00000000000000 AccountItem Sync successful 同步成功 Network error 網路異常 Server exception 伺服器異常 Storage full 儲存已滿 AccountManager Local account 本機帳戶 Event types 日程類型 CColorPickerWidget Color 顏色 Cancel button 取 消 Save button 儲 存 CDayMonthView Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六 Sunday 星期日 CDayWindow Y M D Lunar 農曆 CGraphicsView New Event 建立日程 CMonthScheduleNumItem %1 more 還有%1項 CMonthView New event 建立日程 New Event 建立日程 CMonthWindow Y CMyScheduleView My Event 我的日程 OK button 確 定 Delete button 刪 除 Edit button 編 輯 CPushButton New event type 新增日程類型 CScheduleDlg New Event 建立日程 Edit Event 編輯日程 End time must be greater than start time 結束時間需晚於開始時間 OK button 確 定 Never 從不 At time of event 日程開始時 15 minutes before 15分鐘前 30 minutes before 30分鐘前 1 hour before 1小時前 1 day before 1天前 2 days before 2天前 1 week before 1週前 On start day (9:00 AM) 日程發生當天(上午9點) time(s) 次後 Enter a name please 名稱不能為空 The name can not only contain whitespaces 名稱不能設置為全空格,請修改 Type: 類型: Description: 內容: All Day: 全天: Starts: 開始時間: Ends: 結束時間: Remind Me: 提醒: Repeat: 重複: End Repeat: 結束重複: Calendar account: 日曆帳戶: Calendar account 日曆帳戶 Type 類型 Description 內容 All Day 全天 Time: 時間: Time 時間 Solar 公曆 Lunar 農曆 Starts 開始時間 Ends 結束時間 Remind Me 提醒 Repeat 重複 Daily 每天 Weekdays 工作日 Weekly 每週 Monthly 每月 Yearly 每年 End Repeat 結束重複 After On 於日期 Cancel button 取 消 Save button 儲 存 CScheduleOperation All occurrences of a repeating event must have the same all-day status. 重複日程的所有重複必須具有相同的全天狀態。 Do you want to change all occurrences? 您要更改所有重複嗎? Cancel button 取 消 Change All 全部更改 You are changing the repeating rule of this event. 您正在更改日程的重複規則。 You are deleting an event. 您正在刪除日程。 Are you sure you want to delete this event? 您確定要刪除此日程嗎? Delete button 刪 除 Do you want to delete all occurrences of this event, or only the selected occurrence? 您要刪除此日程的所有重複,還是只刪除所選重複? Delete All 全部刪除 Delete Only This Event 僅刪除此日程 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? 您要刪除此日程的這個重複和所有將來重複,還是只刪除所選重複? Delete All Future Events 刪除所有將來日程 You are changing a repeating event. 您正在更改重複日程。 Do you want to change only this occurrence of the event, or all occurrences? 您要更改此日程的僅這一個重複,還是更改它的所有重複? All 全部日程 Only This Event 僅此日程 Do you want to change only this occurrence of the event, or this and all future occurrences? 您要更改此日程的這個重複和所有將來重複,還是只更改所選重複? All Future Events 所有將來日程 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. 您選擇的是閏月,將按照農曆規則提醒 OK button 確 定 CScheduleSearchDateItem Y M D CScheduleSearchItem Edit 編輯 Delete 刪除 All Day 全天 CScheduleSearchView No search results 找不到結果 CScheduleView ALL DAY 全天 CSettingDialog Manual 手動 15 mins 每15分鐘 30 mins 每30分鐘 1 hour 每1小時 24 hours 每24小時 Sync Now 立即同步 Last sync 最近同步時間 Monday 週一 Sunday 週日 12-hour clock 12小時制 24-hour clock 24小時制 Tuesday Wednesday Thursday Friday Saturday CTimeEdit (%1 mins) (%1分鐘) (%1 hour) (%1小時) (%1 hours) (%1小時) CTitleWidget Y M W D Search events and festivals 搜尋日程/節日 CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Y CYearScheduleView All Day 全天 No event 無日程 CYearWindow Y CalendarWindow Calendar 日曆 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 日曆是一款查看日期、管理日程的小工具。 Calendarmainwindow Calendar 日曆 Manage 管理 Privacy Policy 隱私政策 Syncing... 正在同步... Sync successful 同步成功 Sync failed, please try later 同步失敗,請稍後再試 CenterWidget All Day 全天 DAccountDataBase Work 工作 Life 生活 Other 其他 DAlarmManager Close button 關 閉 One day before start 提前1天提醒 Remind me tomorrow 明天提醒 Remind me later 稍後提醒 15 mins later 15分鐘後 1 hour later 1小時後 4 hours later 4小時後 Tomorrow 明天 Schedule Reminder 日程提醒 %1 to %2 %1 至 %2 Today 今天 DragInfoGraphicsView Edit 編輯 Delete 刪除 New event 建立日程 New Event 建立日程 JobTypeListView You are deleting an event type. 您正在刪除日程類型。 All events under this type will be deleted and cannot be recovered. 此日程類型下的所有日程都會刪除且不可恢復。 Cancel button 取 消 Delete button 刪 除 QObject Account settings 帳戶設定 Account 帳戶 Select items to be synced 設定您的同步項 Events 日程 General settings 一般設定 Sync interval 同步頻率 Manage calendar 日曆管理 Calendar account 日曆帳戶 Event types 日程類型 General 通用 First day of week 每星期開始於 Time 時間 Return Today Return 今天 Return Today Today Return Today 今天 ScheduleTypeEditDlg New event type 新增日程類型 Edit event type 編輯日程類型 Name: 名稱: Color: 顏色: Cancel button 取 消 Save button 儲 存 The name can not only contain whitespaces 名稱不能設置為全空格,請修改 Enter a name please 名稱不能為空 Shortcut Help 幫助 Delete event 刪除日程 Copy 複製 Cut 剪下 Paste 貼上 Delete 刪除 Select all 全選 SidebarCalendarWidget Y M TimeJumpDialog Go button 跳 轉 UserloginWidget Sign In button 登 入 Sign Out button 退出登入 YearFrame Y today Today Today 今天 dde-calendar-5.14.13/translations/dde-calendar_ar.ts000066400000000000000000001464771473346337000223030ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color لون Cancel button إلغاء Save button حفظ CDayMonthView Monday الاثنين Tuesday الثلاثاء Wednesday الأربعاء Thursday الخميس Friday الجمعة Saturday السبت Sunday الأحد CDayWindow Y السنة M الشهر D اليوم Lunar CGraphicsView New Event حدث جديد CMonthScheduleNumItem %1 more 1% أكثر CMonthView New event حدث جديد New Event حدث جديد CMonthWindow Y السنة CMyScheduleView My Event الحدث الخاص بي OK button موافق Delete button حذف Edit button تحرير CPushButton New event type CScheduleDlg New Event لا أحداث Edit Event تعديل الأحداث End time must be greater than start time يجب أن يكون وقت الانتهاء أكبر من وقت البدء OK button حسنا Never أبدا At time of event في وقت الحدث 15 minutes before 15 دقيقة قبل 30 minutes before 30 دقيقة قبل 1 hour before 1 ساعة قبل 1 day before 1 يوم قبل 2 days before “2“يومين قبل 1 week before 1 أسبوع قبل On start day (9:00 AM) في يوم البَدْء (9:00 صباحا) time(s) الوقت(ج) Enter a name please The name can not only contain whitespaces Type: النوع: Description: الوصف: All Day: طوال اليوم: Starts: يبدأ: Ends: ينتهي: Remind Me: ذكرني: Repeat: تكرار End Repeat: نهاية التكرار Calendar account: Calendar account Type النوع Description الوصف All Day طوال اليوم Time: Time Solar Lunar Starts يبدأ Ends ينتهي Remind Me ذكرني Repeat تكرار Daily يوميا Weekdays أيام الأسبوع Weekly أسبوعيا Monthly شهريا Yearly سنويا End Repeat نهاية التكرار After بعد On تشغيل Cancel button إلغاء Save button حفظ CScheduleOperation All occurrences of a repeating event must have the same all-day status. يجب أن يكون لجميع حالات تكرار الحدث نفس الوضع طوال اليوم. Do you want to change all occurrences? هل تريد تغيير كل الأحداث؟ Cancel button إلغاء Change All تغيير الكل You are changing the repeating rule of this event. أنت تغير قاعدة التكرار لهذا الحدث. You are deleting an event. أنت تقوم بحذف حدث. Are you sure you want to delete this event? هل أنت متأكد من أنك تريد حذف هذا الحدث؟ Delete button حذف Do you want to delete all occurrences of this event, or only the selected occurrence? هل تريد حذف جميع حالات هذا الحدث، أو فقط الأحداث المحددة؟ Delete All حذف الكل Delete Only This Event حذف هذا الحدث فقط Do you want to delete this and all future occurrences of this event, or only the selected occurrence? هل تريد حذف هذا وجميع الحالات المستقبلية لهذا الحدث، أو فقط الأحداث المحددة؟ Delete All Future Events حذف جميع الأحداث المستقبلية You are changing a repeating event. أنت تقوم بتغيير حدث متكرر. Do you want to change only this occurrence of the event, or all occurrences? هل تريد تغيير هذا الحدث فقط، أو كل الأحداث؟ All الجميع Only This Event هذا الحدث فقط Do you want to change only this occurrence of the event, or this and all future occurrences? هل تريد تغيير هذا الحدث فقط، أو هذا وكل الأحداث المستقبلية؟ All Future Events كل الأحداث المستقبلية You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button موافق CScheduleSearchDateItem Y سنة M شهر D يوم CScheduleSearchItem Edit تعديل Delete حذف All Day طوال اليوم CScheduleSearchView No search results لا توجد نتائج بحث CScheduleView ALL DAY طوال اليوم CSettingDialog Sunday الأحد Monday الاثنين Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual يدوي 15 mins 30 mins 1 hour 1 ساعة 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y سنة M شهر W أسبوع D يوم Search events and festivals CWeekWidget Sun الأحد Mon الاثنين Tue الثلاثاء Wed الأربعاء Thu الخميس Fri الجمعة Sat السبت CWeekWindow Week الأسبوع Y السنة CYearScheduleView All Day طوال اليوم No event لا يوجد حدث CYearWindow Y السنة CalendarWindow Calendar التقويم Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. التقويم هو برنامج لعرض التواريخ وللتخطيط الذكي لجميع الأشياء في الحياة Calendarmainwindow Calendar التقويم Manage Privacy Policy Syncing... جاري المزامنة... Sync successful Sync failed, please try later CenterWidget All Day طوال اليوم DAccountDataBase Work عمل Life حياة Other أخرى DAlarmManager Close button إغلاق One day before start يوم قبل البداية Remind me tomorrow ذكرني غدا Remind me later ذكرني لاحقا 15 mins later 1 hour later 4 hours later Tomorrow غدا Schedule Reminder تذكير بالبرنامج %1 to %2 Today اليوم DragInfoGraphicsView Edit تحرير Delete حذف New event حدث جديد New Event حدث جديد JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button إلغاء Delete button حذف QObject Manage calendar Event types Account settings Account حساب Select items to be synced Events General settings Sync interval Calendar account General عام First day of week Time Return Today Return اليوم Return Today Today Return Today اليوم ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: الاسم : Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button إلغاء Save button حفظ The name can not only contain whitespaces Enter a name please Shortcut Help مساعدة Delete event حذف حدث Copy نسخ Cut قص Paste لصق Delete حذف Select all تحديد الكل SidebarCalendarWidget Y السنة M الشهر TimeJumpDialog Go button UserloginWidget Sign In button تسجيل الدخول Sign Out button تسجيل الخروج YearFrame Y السنة today Today Today اليوم dde-calendar-5.14.13/translations/dde-calendar_az.ts000066400000000000000000001476311473346337000223040ustar00rootroot00000000000000 AccountItem Sync successful Uğurlu eyniləşdirmə Network error Şəbəkə xətası Server exception Server istisnası Storage full Yaddaş dolub AccountManager Local account Yerli hesab Event types Tədbirin növləri CColorPickerWidget Color Rəng Cancel button İmtina Save button Saxlayın CDayMonthView Monday Bazar ertəsi Tuesday Çərşənbə axşamı Wednesday Çərşənbə Thursday Cümə axşamı Friday Cümə Saturday Şənbə Sunday Bazar CDayWindow Y İl M Ay D G Lunar Ay CGraphicsView New Event Yeni tədbir CMonthScheduleNumItem %1 more %1 daha çox CMonthView New event Yeni tədbir New Event Yeni tədbir CMonthWindow Y İl CMyScheduleView My Event Mənim tədbirim OK button OLDU Delete button Silin Edit button Düzəliş edin CPushButton New event type Yeni tədbir növü CScheduleDlg New Event Yeni tədbir Edit Event Tədbirə düzəliş etmək End time must be greater than start time Bitmə tarixi başlama tarixindən böyük olmalıdır OK button OK Never Heç vaxt At time of event Tədbir zamanı 15 minutes before 15 dəqiqə əvvəl 30 minutes before 30 dəqiqə əvvəl 1 hour before 1 saat əvvəl 1 day before 1 gün əvvəl 2 days before 2 gün əvvəl 1 week before 1 həftə əvvəl On start day (9:00 AM) Başlanğıc günü (9:00) time(s) vaxt(lar) Enter a name please Lütfən adı daxil edin The name can not only contain whitespaces Ad təkcə ara boşluqlarından ibarət ola bilməz Type: Növ: Description: Təsviri: All Day: Bütün gün: Starts: Başlayır: Ends: Başa çatır: Remind Me: Mənə xatırlat: Repeat: Təkrar: End Repeat: Təkrarın sonu: Calendar account: Təqvim hesabı: Calendar account Təqvim hesabı Type Növ Description Təsviri All Day Bütün gün Time: Vaxt: Time Vaxt Solar Günəş Lunar Ay Starts Başlayır Ends Başa çatır Remind Me Mənə xatırlat Repeat Təkrar Daily Hər gün Weekdays Həftənin günləri Weekly Həftə Monthly Ay Yearly İl End Repeat Təkrarın sonu After Sonra On Açıq Cancel button İmtina Save button Saxlayın CScheduleOperation All occurrences of a repeating event must have the same all-day status. Təkrarlanan tədbirlərin bütün hadisələri gün boyu eyni statusa malik olmalıdır. Do you want to change all occurrences? Bütün hadisələrə dəyişmək istəyrisiniz? Cancel button İmtina Change All Hamısını dəyişmək You are changing the repeating rule of this event. Siz bu tədbirin təkrarlanma qaydasını dəyişirsiniz. You are deleting an event. Siz tədbiri silirsiniz. Are you sure you want to delete this event? Bu tədbiri silmək istədiyinizə əminsiniz? Delete button Silmək Do you want to delete all occurrences of this event, or only the selected occurrence? Siz bu tədbirin bütün hadisələrini, yoxsa yalnız seçilmiş hadisəsini silmək istəyirsiniz? Delete All Hamısını silin Delete Only This Event Yalnız bu tədbiri silin Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Siz bu tədbirin bütün gələcək hadisələrini, yoxsa yalnız seçilmiş hadisəsini silmək istəyirsiniz? Delete All Future Events Bütün gələcək tədbirləri silin You are changing a repeating event. Siz təkrarlanan tədbiri dəyişirsiniz. Do you want to change only this occurrence of the event, or all occurrences? Siz bu tədbirin yalnız bu hadisəsini, yoxsa bütün hadisələrini silmək istəyirsiniz? All Hamısını Only This Event Yalnız bu tədbiri Do you want to change only this occurrence of the event, or this and all future occurrences? Siz tədbirin yalnız bu hadisəsini yoxsa, bu və bütün gələcək hadisələrini silmək istəyirsiniz? All Future Events Bütün gələcək tədbirlər You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Siz uzun ay seşmisiniz və xatırlatma ay təqvimi qaydalarına uyğun olacaq. OK button OLDU CScheduleSearchDateItem Y İl M Ay D G CScheduleSearchItem Edit Düzəliş edin Delete Silin All Day Bütün gün CScheduleSearchView No search results Axtarış nəticəsiz oldu CScheduleView ALL DAY BÜTÜN GÜN CSettingDialog Sunday Bazar Monday Bazar ertəsi Tuesday Wednesday Thursday Friday Saturday Use System Setting Sistem ayarını istifadə edin 24-hour clock 24 saat vaxt formatı 12-hour clock 12 saat vaxt formatı import ICS file ICS faylını idxal edin Manual Əl ilə 15 mins 15 dəqiqə 30 mins 30 dəqiqə 1 hour 1 saat 24 hours 24 saat Sync Now İndi eyniləşdirin Last sync Sonuncu eyniləşmə Please go to the <a href='/'>Control Center</a> to change system settings Ayarları dəyişmək üçün <a href='/'>İdarəetmə mərkəzinə</a> keçin CTimeEdit (%1 mins) (%1 dəqiqə) (%1 hour) (%1 saat) (%1 hours) (%1 saat) CTitleWidget Y İl M Ay W H D G Search events and festivals Tədbirləri və festivalları axtarın CWeekWidget Sun Baz Mon B.er Tue Ç.ax Wed Çər Thu C.ax Fri Cüm Sat Şnb CWeekWindow Week Həftə Y İl CYearScheduleView All Day Bütün gün No event Tədbir yoxdur CYearWindow Y İl CalendarWindow Calendar Təqvim Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Təqvim tarixləri göstərən və həmçinin gündəlik həyatınızdakı gələcək işlərinizi planlamaq üçün bir gündəlikdir. Calendarmainwindow Calendar Təqvim Manage İdarə edin Privacy Policy Məxfilik Siyasəti Syncing... Eyniləşdirilir... Sync successful Eyniləşdirmə uğurlu oldu Sync failed, please try later Eyniləşdirmə alınmadı, lütfən yenidən cəhd edin CenterWidget All Day Bütün gün DAccountDataBase Work İş Life Həyat Other Digər DAlarmManager Close button Bağlayın One day before start Başlamadan bir gün əvvəl Remind me tomorrow Mənə sabah xatırlat Remind me later Mənə sonra xatırlat 15 mins later 15 dəq sonra 1 hour later 1 saat sonra 4 hours later 4 saat sonra Tomorrow Sabah Schedule Reminder Xatırlatma cədvəli %1 to %2 %1 ilə %2 arası Today Bu gün DragInfoGraphicsView Edit Düzəlt Delete Sil New event Yeni tədbir New Event Yeni tədbir JobTypeListView export ixrac edin import ICS file ICS faylını idxal edin You are deleting an event type. Siz tədbir növünü silirsiniz. All events under this type will be deleted and cannot be recovered. Bu qəbildən bütün tədbirlər silinəcəklər və bərpa oluna bilməzlər. Cancel button İmtina Delete button Silin QObject Manage calendar Təqvimi idarə edin Event types Tədbirin növləri Account settings Hesab ayarları Account İstifadəçi hesabı Select items to be synced Eyniləşdiriləcək elementləri seçin Events Tədbirlər General settings Ümumi ayarlar Sync interval Eyniləşdirmə aralığı Calendar account Təqvim hesabı General Ümumi First day of week Həftənin ilk günü Time Vaxt Return Today Return Bu gün Return Today Today Return Today Bu gün ScheduleTypeEditDlg New event type Yeni tədbir növü Edit event type Tədbir növünü dəyişin Import ICS file ICS faylını idxal edin Name: Ad: Color: Rəng: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> Fayl: Cancel button İmtina Save button Saxla The name can not only contain whitespaces Ad təkcə ara boşluqlarından ibarət ola bilməz Enter a name please Lütfən adı daxil edin Shortcut Help Kömək Delete event Tədbiri silmək Copy Kopyala Cut Kəsmək Paste Əlavə et Delete Sil Select all Hamısını seçmək SidebarCalendarWidget Y İl M Ay TimeJumpDialog Go button Keçin UserloginWidget Sign In button Hesaba giriş Sign Out button Hesabdan çıxış YearFrame Y İl today Today Today Bu gün dde-calendar-5.14.13/translations/dde-calendar_bo.ts000066400000000000000000001672671473346337000223010ustar00rootroot00000000000000 AccountItem Sync successful མཉམ་བགྲོད་ལེགས་གྲུབ། Network error དྲ་རྒྱ་ནོར་བ། Server exception ཞབས་ཞུ་འཕྲུལ་ཆས་རྒྱུན་འགལ། Storage full ཉར་གསོག་གང་བ། AccountManager Local account རང་སའི་རྩའི་ཁྲ། Event types ཉིན་རེའི་ལས་རིམ་རིགས་གྲས། CColorPickerWidget Color ཚོན་མདོག Cancel button འདོར་བ། Save button ཉར་གསོག་ CDayMonthView Monday གཟའ་ཟླ་བ། Tuesday གཟའ་མིག་དམར། Wednesday གཟའ་ལྷག་པ། Thursday གཟའ་ཕུར་བུ། Friday གཟའ་པ་སངས། Saturday གཟའ་སྤེན་པ། Sunday གཟའ་ཉི་མ། CDayWindow Y ལོ། M ཟླ། D ཚེས། Lunar ལུགས་རྙིང་ལོ་ཐོ། CGraphicsView New Event ལས་རིམ་གསར་པ། CMonthScheduleNumItem %1 more ད་དུང་%1ཡོད། CMonthView New event ལས་རིམ་གསར་པ། New Event ལས་རིམ་གསར་པ། CMonthWindow Y ལོ། CMyScheduleView My Event ངའི་ལས་རིམ། OK button གཏན་ཁེལ། Delete button སུབ་པ། Edit button རྩོམ་སྒྲིག CPushButton New event type གསར་སྣོན་ཉིན་རེའི་ལས་རིམ་རིགས། CScheduleDlg New Event ལས་རིམ་གསར་པ། Edit Event ལས་རིམ་རྩོམ་སྒྲིག End time must be greater than start time མཇུག་འགྲིལ་བའི་དུས་ཚོད་འགོ་འཛུགས་དུས་ཚོད་ལས་འཕྱི་བ་དགོས། OK button གཏན་ཁེལ། Never ནམ་ཡང་མིན། At time of event ལས་རིམ་འགོ་འཛུགས་དུས། 15 minutes before སྐར་མ་15སྔོན་ལ། 30 minutes before སྐར་མ་30སྔོན་ལ། 1 hour before ཆུ་ཚོད་1སྔོན་ལ། 1 day before ཉིན་1སྔོན་ལ། 2 days before ཉིན་2སྔོན་ལ། 1 week before གཟའ་འཁོར་1སྔོན་ལ། On start day (9:00 AM) ལས་རིམ་འགོ་ཚུགས་པའི་ཉིན།(9:00སྔ་དྲོའི་ཆུ་ཚོད།) time(s) ཐེངས་གྲངས།(ཐེངས) Enter a name please མིང་སྟོང་པ་ཡིན་མི་རུང་། The name can not only contain whitespaces མིང་ཚང་མ་སྟོང་པ་ཡིན་མི་རུང་བས། བཟོ་བཅོས་བྱེད་རོགས། Type: རིགས་གྲས། Description: ནང་དོན། All Day: ཉིན་གང་། Starts: འགོ་འཛུགས་དུས་ཚོད། Ends: མཇུག་སྒྲིལ་དུས་ཚོད། Remind Me: དྲན་སྐུལ། Repeat: བསྐྱར་ཟློས། End Repeat: བསྐྱར་ཟློས་མཇུག་འགྲིལ་བ། Calendar account: ལོ་ཐོའི་རྩིས་ཁྲ། Calendar account ལོ་ཐོའི་རྩིས་ཁྲ། Type རིགས་གྲས། Description ནང་དོན། All Day ཉིན་གང་། Time: དུས་ཚོད། Time ཐོ་འཇུག་པའི་དུས་ཚོད། Solar སྤྱི་ལོ། Lunar ལུགས་རྙིང་ལོ་ཐོ། Starts འགོ་འཛུགས་དུས་ཚོད། Ends མཇུག་སྒྲིལ་དུས་ཚོད། Remind Me དྲན་སྐུལ། Repeat བསྐྲར་ཟློས། Daily ཉིན་རེ། Weekdays ལས་ཀའི་ཉིན་གྲངས། Weekly བདུན་རེ། Monthly ཟླ་རེ། Yearly ལོ་རེ། End Repeat བསྐྱར་ཟློས་མཇུག་འགྲིལ་བ། After རྗེས་ལ། On ལ། Cancel button ཕྱིར་འཐེན། Save button ཉར་གསོག་ CScheduleOperation All occurrences of a repeating event must have the same all-day status. བསྐྱར་ཟློས་ཀྱི་ཉིན་རེའི་ལས་རིམ་གྱི་བསྐྱར་ཟློས་ཚང་མར་ཉིན་ཧྲིལ་པོའི་རྣམ་པ་གཅིག་མཚུངས་ཡོད་དགོས། Do you want to change all occurrences? ཁྱོད་ཀྱིས་བསྐྱར་ཟློས་ཚང་མ་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན་ནམ། Cancel button ཕྱིར་འཐེན། Change All ཚང་མ་བཟོ་བཅོས་བྱེད། You are changing the repeating rule of this event. ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་གྱི་བསྐྱར་ཟློས་ཀྱི་སྒྲིག་སྲོལ་བཟོ་བཅོས་བྱེད་བཞིན་ཡོད། You are deleting an event. ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་བསུབ་བཞིན་ཡོད། Are you sure you want to delete this event? ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདི་བསུབ་རྒྱུ་ཡིན་པ་གཏན་འཁེལ་ལམ། Delete button སུབ་པ། Do you want to delete all occurrences of this event, or only the selected occurrence? ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བསྐྱར་ཟློས་ཚང་མ་བསུབ་རྒྱུ་ཡིན་ནམ། ཡང་ན་བདམས་ཡོད་པའི་བསྐྱར་ཟློས་དག་བསུབ་རྒྱུ་ཡིན། Delete All ཚང་མ་སུབ་པ། Delete Only This Event ཉིན་རེའི་ལས་རིམ་འདི་སུབ་པ། Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བསྐྱར་ཟློས་འདི་དང་མ་འོངས་ཀྱི་བསྐྱར་ཟློས་ཚང་མ་བསུབ་རྒྱུ་ཡིན་ནམ། ཡང་ན་བདམས་ཡོད་པའི་བསྐྱར་ཟློས་དག་བསུབ་རྒྱུ་ཡིན། Delete All Future Events མ་འོངས་ཀྱི་ཉིན་རེའི་ལས་རིམ་ཚང་མ་སུབ་པ། You are changing a repeating event. ཁྱོད་ཀྱིས་བསྐྱར་ཟློས་ཀྱི་ཉིན་རེའི་ལས་རིམ་དག་བཟོ་བཅོས་བྱེད་བཞིན་ཡོད། Do you want to change only this occurrence of the event, or all occurrences? ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བསྐྱར་ཟློས་འདི་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན་ནམ། ཡང་ན་དེའི་བསྐྱར་ཟློས་ཚང་མ་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན། All ཉིན་རེའི་ལས་རིམ་ཆ་ཚང་། Only This Event ཉིན་རེའི་ལས་རིམ་འདི་ཉིད། Do you want to change only this occurrence of the event, or this and all future occurrences? ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བསྐྱར་ཟློས་འདི་དང་མ་འོངས་ཀྱི་བསྐྱར་ཟློས་ཚང་མ་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན་ནམ། ཡང་ན་བདམས་ཡོད་པའི་བསྐྱར་ཟློས་དག་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན། All Future Events མ་འོངས་ཀྱི་ཉིན་རེའི་ལས་རིམ་ཚང་མ། You have selected a leap month, and will be reminded according to the rules of the lunar calendar. ཁྱོད་ཀྱིས་བདམས་པ་དེ་ཟླ་བཤོལ་ཡིན་པས། ལུགས་རྙིང་ལོ་ཐོའི་སྒྲིག་སྲོལ་ལྟར་དྲན་སྐུལ་བྱེད་སྲིད། OK button གཏན་ཁེལ། CScheduleSearchDateItem Y ལོ། M ཟླ། D ཚེས། CScheduleSearchItem Edit རྩོམ་སྒྲིག Delete སུབ་པ། All Day ཉིན་གང་། CScheduleSearchView No search results འཚོལ་ཞིབ་བྱས་འབྲས་མེད། CScheduleView ALL DAY ཉིན་གང་། CSettingDialog Sunday གཟའ་ཉི་མ། Monday གཟའ་ཟླ་བ། Tuesday Wednesday Thursday Friday Saturday Use System Setting རྒྱུད་ཁོངས་རྗེས་སུ་འབྲང་བ། 24-hour clock ཆུ་ཚོད་24ཡི་ལུགས། 12-hour clock ཆུ་ཚོད་12ཀྱི་ལུགས། import ICS file ICSཡིག་ཆ་ནང་འདྲེན། Manual ལག་ཐབས། 15 mins སྐར་མ་15རེ། 30 mins སྐར་མ་30རེ། 1 hour ཆུ་ཚོད་1རེ། 24 hours ཆུ་ཚོད་24རེ། Sync Now ལམ་སེང་མཉམ་བགྲོད། Last sync ཉེ་དུས་ཀྱི་མཉམ་བགྲོད་དུས་ཚོད། Please go to the <a href='/'>Control Center</a> to change system settings <a href='/'>ཚོད་འཛིན་ལྟེ་གནས་</a>ནས་རྒྱུད་ཁོངས་སྒྲིག་འགོད་ལ་བཟོ་བཅོས་བྱེད་པ། CTimeEdit (%1 mins) (%1སྐར་མ།) (%1 hour) (%1ཆུ་ཚོད།) (%1 hours) (%1ཆུ་ཚོད།) CTitleWidget Y ལོ། M ཟླ། W གཟའ། D ཚེས། Search events and festivals ཉིན་རེའི་ལས་རིམ་དང་དུས་ཆེན་འཚོལ་ཞིབ། CWeekWidget Sun ཉི་མ། Mon ཟླ་བ། Tue མིག་དམར། Wed ལྷག་པ། Thu ཕུར་བུ། Fri པ་སངས། Sat སྤེན་པ། CWeekWindow Week གཟའ་འཁོར། Y ལོ། CYearScheduleView All Day ཉིན་གང་། No event ལས་རིམ་མེད། CYearWindow Y ལོ། CalendarWindow Calendar ལོ་ཐོ། Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ལོ་ཐོ་ནི་ཚེས་གྲངས་བལྟ་བ་དང་ལས་རིམ་དོ་དམ་བྱེད་པའི་ཡོ་བྱད་ཆུང་ཆུང་ཞིག་རེད། Calendarmainwindow Calendar ལོ་ཐོ། Manage དོ་དམ། Privacy Policy གསང་དོན་སྲིད་ཇུས། Syncing... མཉམ་བགྲོད་བྱེད་བཞིན་པ། Sync successful མཉམ་བགྲོད་ལེགས་གྲུབ། Sync failed, please try later མཉམ་བགྲོད་བྱེད་མ་ཐུབ་པས། ཏོག་ཙམ་ནས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱོས། CenterWidget All Day ཉིན་གང་། DAccountDataBase Work ལས་ཀ Life འཆོ་བ། Other གཞན་དག DAlarmManager Close button ཁ་རྒྱག One day before start ཉིན་1སྔོན་ལ་དྲན་སྐུལ་བྱེད་པ། Remind me tomorrow སང་ཉིན་དྲན་སྐུལ་བྱེད། Remind me later གཏོགས་ཙམ་ནས་དྲན་སྐུལ་བྱེད། 15 mins later སྐར་མ་15རྗེས། 1 hour later ཆུ་ཚོད་1རྗེས། 4 hours later ཆུ་ཚོད་4རྗེས། Tomorrow སང་ཉིན། Schedule Reminder ཉིན་རེའི་ལས་རིམ་དྲན་སྐུལ། %1 to %2 %1 ནས་ %2བར། Today དེ་རིང་། DragInfoGraphicsView Edit རྩོམ་སྒྲིག Delete སུབ་པ། New event ལས་རིམ་གསར་པ། New Event ལས་རིམ་གསར་པ། JobTypeListView export ཕྱིར་འདྲེན། import ICS file ICSཡིག་ཆ་ནང་འདྲེན། You are deleting an event type. ཁྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་སུབ་བཞིན་ཡོད། All events under this type will be deleted and cannot be recovered. ཉིན་རེའི་ལས་རིམ་འདིའི་འོག་གི་ཉིན་རེའི་ལས་རིམ་ཚང་མ་སུབ་ངེས་པ་མ་ཟད་སླར་གསོ་བྱ་ཐབས་མེད། Cancel button འདོར་བ། Delete button སུབ་པ། QObject Manage calendar ལོ་ཐོ་དོ་དམ། Event types ཉིན་རེའི་ལས་རིམ་རིགས་གྲས། Account settings རྩིས་ཐོ་སྒྲིག་འགོད། Account རྩིས་ཁྲ། Select items to be synced ཁྱེད་ཀྱི་མཉམ་བགྲོད་ཚན་པ་སྒྲིག་འགོད། Events ཉིན་རེའི་ལས་རིམ། General settings ཀུན་སྤྱོད་སྒྲིག་འགོད། Sync interval མཉམ་བགྲོད་བྱུང་ཚད། Calendar account ལོ་ཐོའི་རྩིས་ཁྲ། General ཀུན་སྤྱོད། First day of week གཟའ་འཁོར་གཅིག་གི་ཉིན་དང་པོ། Time ཐོ་འཇུག་པའི་དུས་ཚོད། Return Today Return དེ་རིང་། Return Today Today Return Today དེ་རིང་། ScheduleTypeEditDlg New event type གསར་སྣོན་ཉིན་རེའི་ལས་རིམ་རིགས། Edit event type ཉིན་རེའི་ལས་རིམ་རིགས་གྲས་རྩོམ་སྒྲིག Import ICS file ICSཡིག་ཆ་ནང་འདྲེན། Name: མིང་། Color: ཚོན་མདོག <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> ཡིག་ཆ། Cancel button འདོར་བ། Save button ཉར་གསོག་ The name can not only contain whitespaces མིང་ཚང་མ་སྟོང་པ་ཡིན་མི་རུང་བས། བཟོ་བཅོས་བྱེད་རོགས། Enter a name please མིང་སྟོང་པ་ཡིན་མི་རུང་། Shortcut Help རོགས་རམ། Delete event ལས་རིམ་སུབ་པ། Copy མཁོ་ཕབ། Cut དྲས་གཏུབ། Paste སྦྱར་བ། Delete སུབ་པ། Select all ཡོངས་འདེམས། SidebarCalendarWidget Y ལོ། M ཟླ། TimeJumpDialog Go button མཆོང་སྒྱུར། UserloginWidget Sign In button ཐོ་འཇུག Sign Out button ཐོ་འབུད། YearFrame Y ལོ། today Today Today དེ་རིང་། dde-calendar-5.14.13/translations/dde-calendar_ca.ts000066400000000000000000001477611473346337000222610ustar00rootroot00000000000000 AccountItem Sync successful Sincronització correcta Network error Error de xarxa Server exception Excepció del servidor Storage full Emmagatzematge ple AccountManager Local account Compte local Event types Tipus d'esdeveniment CColorPickerWidget Color Color Cancel button Cancel·la Save button Desa-ho CDayMonthView Monday Dilluns Tuesday Dimarts Wednesday Dimecres Thursday Dijous Friday Divendres Saturday Dissabte Sunday Diumenge CDayWindow Y any M mes D D Lunar Lunar CGraphicsView New Event Esdeveniment nou CMonthScheduleNumItem %1 more %1 més CMonthView New event Nou esdeveniment New Event Esdeveniment nou CMonthWindow Y any CMyScheduleView My Event El meu esdeveniment OK button D'acord Delete button Elimina Edit button Edita CPushButton New event type Tipus d'esdeveniment nou CScheduleDlg New Event Esdeveniment nou Edit Event Edita l'esdeveniment End time must be greater than start time L'hora d'acabament ha de ser superior a l'hora d'inici. OK button D'acord Never Mai At time of event Al moment de l'esdeveniment 15 minutes before 15 minuts abans 30 minutes before 30 minuts abans 1 hour before 1 hora abans 1 day before 1 dia abans 2 days before 2 dies abans 1 week before 1 setmana abans On start day (9:00 AM) El dia d'inici (9:00) time(s) cop/s Enter a name please Escriviu un nom, si us plau. The name can not only contain whitespaces El nom no només pot contenir espais en blanc. Type: Tipus: Description: Descripció: All Day: Tot el dia: Starts: Comença: Ends: Acaba: Remind Me: Recorda-m'ho: Repeat: Repeteix: End Repeat: Acaba la repetició: Calendar account: Compte del calendari: Calendar account Compte del calendari Type Tipus Description Descripció All Day Tot el dia Time: Hora: Time Hora Solar solar Lunar lunar Starts Comença Ends Acaba Remind Me Recorda-m'ho Repeat Repeteix Daily Diàriament Weekdays Els dies feiners Weekly Setmanalment Monthly Mensualment Yearly Anualment End Repeat Acaba la repetició After Després On Activat Cancel button Cancel·la Save button Desa CScheduleOperation All occurrences of a repeating event must have the same all-day status. Totes les ocurrències d'un esdeveniment repetitiu han de tenir el mateix estat de tot el dia. Do you want to change all occurrences? Voleu canviar-ne totes les ocurrències? Cancel button Cancel·la Change All Canvia-les totes You are changing the repeating rule of this event. Canvieu la regla de repetició d'aquest esdeveniment. You are deleting an event. Elimineu un esdeveniment. Are you sure you want to delete this event? Segur que voleu eliminar aquest esdeveniment? Delete button Elimina Do you want to delete all occurrences of this event, or only the selected occurrence? Voleu eliminar totes les ocurrències d'aquest esdeveniment o només la seleccionada? Delete All Elimina-les totes Delete Only This Event Elimina només aquest esdeveniment Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Voleu eliminar aquesta i totes les ocurrències futures d'aquest esdeveniment o només la seleccionada? Delete All Future Events Elimina tots els esdeveniments futurs You are changing a repeating event. Canvieu un esdeveniment repetitiu. Do you want to change only this occurrence of the event, or all occurrences? Voleu canviar només aquesta ocurrència de l'esdeveniment o totes? All Totes Only This Event Només aquest esdeveniment Do you want to change only this occurrence of the event, or this and all future occurrences? Voleu canviar només aquesta ocurrència de l'esdeveniment, o aquesta i totes les ocurrències futures? All Future Events Tots els esdeveniments futurs You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Heu seleccionat un mes de traspàs i se us recordarà segons les regles del calendari lunar. OK button D'acord CScheduleSearchDateItem Y A M M D D CScheduleSearchItem Edit Edita Delete Elimina All Day Tot el dia CScheduleSearchView No search results No hi ha resultats de la cerca. CScheduleView ALL DAY TOT EL DIA CSettingDialog Sunday Diumenge Monday Dilluns Tuesday Wednesday Thursday Friday Saturday Use System Setting Usa la configuració del sistema 24-hour clock Rellotge de 24 hores 12-hour clock Rellotge de 12 hores import ICS file importa un fitxer ICS Manual Manual 15 mins 15 min 30 mins 30 min 1 hour 1 hora 24 hours 24 hores Sync Now Sincronitza ara Last sync Darrera sincronització Please go to the <a href='/'>Control Center</a> to change system settings Si us plau, aneu al <a href='/'>Centre de control</a> per canviar la configuració del sistema. CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 hora) (%1 hours) (%1 hores) CTitleWidget Y any M mes W setmana D dia Search events and festivals Cerca esdeveniments i festivals CWeekWidget Sun dg. Mon dl. Tue dt. Wed dc. Thu dj. Fri dv. Sat ds. CWeekWindow Week Setmana Y any CYearScheduleView All Day Tot el dia No event Cap esdeveniment CYearWindow Y any CalendarWindow Calendar Calendari Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. El Calendari és una eina per veure dates i també un planificador diari intel·ligent per programar totes les coses de la vida. Calendarmainwindow Calendar Calendari Manage Gestiona Privacy Policy Política de privadesa Syncing... Se sincronitza... Sync successful Sincronització correcta Sync failed, please try later La sincronització ha fallat. Si us plau, proveu-ho més tard. CenterWidget All Day Tot el dia DAccountDataBase Work Feina Life Vida Other Altres DAlarmManager Close button Tanca One day before start Un dia abans de l'inici Remind me tomorrow Recorda-m'ho demà. Remind me later Recorda-m'ho més tard. 15 mins later 15 minuts més tard 1 hour later 1 hora més tard 4 hours later 4 hores més tard Tomorrow Demà Schedule Reminder Programació del recrdatori %1 to %2 de %1 a %2 Today Avui DragInfoGraphicsView Edit Edita Delete Elimina New event Esdeveniment nou New Event Esdeveniment nou JobTypeListView export exporta import ICS file Importa un fitxer ICS You are deleting an event type. Elimineu un tipus d'esdeveniment. All events under this type will be deleted and cannot be recovered. Tots els esdeveniments d'aquest tipus s'eliminaran i no es podran recuperar. Cancel button Cancel·la Delete button Elimina QObject Manage calendar Gestiona el calendari Event types Tipus d'esdeveniment Account settings Paràmetres del compte Account Compte Select items to be synced Seleccioneu els elements per sincronitzar Events Esdeveniments General settings Configuració general Sync interval Interval de sincronització Calendar account Compte del calendari General General First day of week Primer dia de la setmana Time Hora Return Today Return Avui Return Today Today Return Today Avui ScheduleTypeEditDlg New event type Tipus d'esdeveniment nou Edit event type Edita el tipus d'esdeveniment Import ICS file Importa un fitxer ICS Name: Nom: Color: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Fitxer <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>: Cancel button Cancel·la Save button Desa-ho The name can not only contain whitespaces El nom no només pot contenir espais en blanc. Enter a name please Escriviu un nom, si us plau. Shortcut Help Ajuda Delete event Suprimeix l'esdeveniment Copy Copia Cut Retalla Paste Enganxa Delete Elimina Select all Selecciona-ho tot SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ves-hi UserloginWidget Sign In button Inicia la sessió Sign Out button Surt de la sessió YearFrame Y any today Today Today Avui dde-calendar-5.14.13/translations/dde-calendar_cs.ts000066400000000000000000001467041473346337000222770ustar00rootroot00000000000000 AccountItem Sync successful Synchronizace byla úspěšná Network error Síťová chyba Server exception Výjimka na serveru Storage full Úložiště je plné AccountManager Local account Místní účet Event types Typy událostí CColorPickerWidget Color Barva Cancel button Zrušit Save button Uložit CDayMonthView Monday pondělí Tuesday úterý Wednesday středa Thursday čtvrtek Friday pátek Saturday sobota Sunday neděle CDayWindow Y R M M D D Lunar Měsíční CGraphicsView New Event Nová událost CMonthScheduleNumItem %1 more %1 další CMonthView New event Nová událost New Event Nová událost CMonthWindow Y R CMyScheduleView My Event Moje událost OK button OK Delete button Smazat Edit button Upravit CPushButton New event type Nový typ události CScheduleDlg New Event Nová událost Edit Event Upravit událost End time must be greater than start time Je třeba, aby okamžik konce následoval až po okamžiku začátku OK button OK Never Nikdy At time of event V okamžiku události 15 minutes before 15 minut před 30 minutes before 30 minut před 1 hour before 1 hodinu před 1 day before 1 den před 2 days before 2 dny před 1 week before 1 týden před On start day (9:00 AM) V den začátku (9:00 dop.) time(s) krát Enter a name please Zadejte, prosím, název The name can not only contain whitespaces Název nemůže obsahovat pouze mezery Type: Typ: Description: Popis: All Day: Celý den: Starts: Začíná: Ends: Končí: Remind Me: Připomenout: Repeat: Opakovat: End Repeat: Ukončit opakování: Calendar account: Kalendářový účet: Calendar account Kalendářový účet Type Typ Description Popis All Day Celý den Time: Čas: Time Čas Solar Sluneční Lunar Měsíční Starts Začíná Ends Končí Remind Me Připomenout Repeat Opakování Daily Denně Weekdays Všední dny Weekly Týdně Monthly Měsíčně Yearly Ročně End Repeat Ukončit opakování After Po On Zapnuto Cancel button Zrušit Save button Uložit CScheduleOperation All occurrences of a repeating event must have the same all-day status. Je třeba, aby všechny výskyty opakující se události měly stejný stav „celý den“. Do you want to change all occurrences? Chcete změnit všechny výskyty? Cancel button Zrušit Change All Změnit vše You are changing the repeating rule of this event. Měníte pravidlo opakování této události. You are deleting an event. Mažete událost. Are you sure you want to delete this event? Opravdu chcete tuto událost smazat? Delete button Smazat Do you want to delete all occurrences of this event, or only the selected occurrence? Chcete smazat všechny výskyty této události, nebo jen vybraný výskyt? Delete All Smazat vše Delete Only This Event Smazat jen tuto událost Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Chcete smazat tento a všechny budoucí výskyty této události, nebo jen ten vybraný? Delete All Future Events Smazat všechny budoucí události You are changing a repeating event. Měníte pravidlo opakující se události. Do you want to change only this occurrence of the event, or all occurrences? Chcete změnit jen tento výskyt události, nebo všechny výskyty? All Vše Only This Event Jen tato událost Do you want to change only this occurrence of the event, or this and all future occurrences? Chcete změnit jen tento výskyt události, nebo tento a všechny budoucí výskyty? All Future Events Všechny budoucí události You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Vybrali jste přestupný měsíc, a bude vám připomenut podle pravidel měsíčního kalendáře. OK button OK CScheduleSearchDateItem Y R M M D D CScheduleSearchItem Edit Upravit Delete Smazat All Day Celý den CScheduleSearchView No search results Nic nenalezeno CScheduleView ALL DAY CELÝ DEN CSettingDialog Sunday neděle Monday pondělí Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 24 hodinové hodiny 12-hour clock 12 hodinové hodiny import ICS file naimportovat ICS soubor Manual Příručka 15 mins 15 minut 30 mins 30 minut 1 hour 1 hodina 24 hours 24 hodin Sync Now Seřídit nyní Last sync Naposledy synchronizováno Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 min.) (%1 hour) (%1 hod) (%1 hours) (%1 hod.) CTitleWidget Y R M M W T D D Search events and festivals Vyhledávání událostí a festivalů CWeekWidget Sun Ne Mon Po Tue Út Wed St Thu Čt Fri Sat So CWeekWindow Week Týden Y R CYearScheduleView All Day Celý den No event Žádná událost CYearWindow Y R CalendarWindow Calendar Kalendář Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendář slouží k zobrazování datumů a také jako chytrý každodenní plánovač všeho v životě. Calendarmainwindow Calendar Kalendář Manage Spravovat Privacy Policy Zásady ochrany soukromí Syncing... Synchronizace… Sync successful Synchronizace úspěšná Sync failed, please try later Synchronizace se nezdařila, zkuste to, prosím, později CenterWidget All Day Celý den DAccountDataBase Work Práce Life Soukromé Other Ostatní DAlarmManager Close button Zavřít One day before start Jeden den před začátkem Remind me tomorrow Připomenout zítra Remind me later Připomenout později 15 mins later o 15 minut později 1 hour later o 1 hodinu později 4 hours later o 4 hodiny později Tomorrow Zítra Schedule Reminder Připomínání naplánovaného %1 to %2 %1 až %2 Today Dnes DragInfoGraphicsView Edit Upravit Delete Smazat New event Nová událost New Event Nová událost JobTypeListView export export import ICS file You are deleting an event type. Mažete typ události. All events under this type will be deleted and cannot be recovered. Všechny události tohoto typu budou smazány a nelze je obnovit. Cancel button Zrušit Delete button Smazat QObject Manage calendar Spravovat kalendář Event types Typy událostí Account settings Nastavení účtu Account Účet Select items to be synced Vyberte položky, které mají být synchronizovány Events Události General settings Obecná nastavení Sync interval Seřizovací interval Calendar account Kalendářový účet General Obecné First day of week První den týdne Time Čas Return Today Return Dnes Return Today Today Return Today Dnes ScheduleTypeEditDlg New event type Nový typ události Edit event type Upravit typ události Import ICS file Naimportovat ICS soubor Name: Název: Color: Barva: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> soubor: Cancel button Zrušit Save button Uložit The name can not only contain whitespaces Název nemůže obsahovat pouze mezery Enter a name please Zadejte, prosím, název Shortcut Help Nápověda Delete event Smazat událost Copy Kopírovat Cut Vyjmout Paste Vložit Delete Smazat Select all Vybrat vše SidebarCalendarWidget Y R M M TimeJumpDialog Go button Jde se UserloginWidget Sign In button Přihlásit se Sign Out button Odhlásit se YearFrame Y R today Today Today Dnes dde-calendar-5.14.13/translations/dde-calendar_da.ts000066400000000000000000001446261473346337000222570ustar00rootroot00000000000000 AccountItem Sync successful Network error Netværksfejl Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Farve Cancel button Afbryd Save button Gem CDayMonthView Monday Mandag Tuesday Tirsdag Wednesday Onsdag Thursday Torsdag Friday Fredag Saturday Lørdag Sunday Søndag CDayWindow Y Å M M D D Lunar CGraphicsView New Event Ny begivenhed CMonthScheduleNumItem %1 more %1 mere CMonthView New event Ny begivenhed New Event Ny begivenhed CMonthWindow Y Å CMyScheduleView My Event Min begivenhed OK button OK Delete button Slet Edit button Rediger CPushButton New event type CScheduleDlg New Event Ny begivenhed Edit Event Rediger begivenhed End time must be greater than start time Sluttidspunktet skal være større end starttidspunktet OK button OK Never Aldrig At time of event På tidspunktet for begivenheden 15 minutes before 15 minutter før 30 minutes before 30 minutter før 1 hour before 1 time før 1 day before 1 dag før 2 days before 2 dage før 1 week before 1 uge før On start day (9:00 AM) På starten af dagen (9:00) time(s) gang(e) Enter a name please The name can not only contain whitespaces Type: Type: Description: Beskrivelse: All Day: Hele dagen: Starts: Starter: Ends: Slutter: Remind Me: Påmind mig: Repeat: Gentag: End Repeat: Slut gentag: Calendar account: Calendar account Type Type Description Beskrivelse All Day Hele dagen Time: Time Klokkeslæt Solar Lunar Starts Ends Remind Me Repeat Gentag Daily Dagligt Weekdays Ugedage Weekly Ugentligt Monthly Månedligt Yearly Årligt End Repeat After Efter On Til Cancel button Annuller Save button Gem CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle forekomster af en begivenhed som gentages skal have den samme hele dagen-status. Do you want to change all occurrences? Vil du ændre alle forekomster? Cancel button Annuller Change All Ændr alle You are changing the repeating rule of this event. Du er ved at ændre gentagelsesreglen for begivenheden. You are deleting an event. Du er ved at slette en begivenhed. Are you sure you want to delete this event? Er du sikker på, at du vil slette begivenheden? Delete button Slet Do you want to delete all occurrences of this event, or only the selected occurrence? Vil du slette alle forekomster af begivenheden eller kun den valgte forekomst? Delete All Slet alle Delete Only This Event Slet kun denne begivenhed Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Vil du slette denne og alle fremtidige forekomster af begivenheden eller kun den valgte forekomst? Delete All Future Events Slet alle fremtidige begivenheder You are changing a repeating event. Du er ved at ændre en begivenhed som gentages. Do you want to change only this occurrence of the event, or all occurrences? Vil du kun ændre denne forekomst for begivenheden, eller alle forekomster? All Alle Only This Event Kun denne begivenhed Do you want to change only this occurrence of the event, or this and all future occurrences? Vil du kun ændre denne forekomst for begivenheden, eller denne og alle fremtidige forekomster? All Future Events Alle fremtidige begivenheder You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Å M M D D CScheduleSearchItem Edit Rediger Delete Slet All Day Hele dagen CScheduleSearchView No search results Ingen søgeresultater CScheduleView ALL DAY HELE DAGEN CSettingDialog Sunday Søndag Monday Mandag Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual Manuel 15 mins 30 mins 1 hour 1 time 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Å M M W W D D Search events and festivals CWeekWidget Sun Søn Mon Man Tue Tir Wed Ons Thu Tor Fri Fre Sat Lør CWeekWindow Week Uge Y Å CYearScheduleView All Day Hele dagen No event Ingen begivenhed CYearWindow Y Å CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender er et værktøj til at vise datoer, og er også en smart dagsplanlægger til alt i dit liv. Calendarmainwindow Calendar Kalender Manage Privacy Policy Privatlivspolitik Syncing... Synkroniserer... Sync successful Sync failed, please try later CenterWidget All Day Hele dagen DAccountDataBase Work Arbejde Life Leve Other Andre DAlarmManager Close button Luk One day before start En dag før start Remind me tomorrow Påmind mig i morgen Remind me later Påmind mig senere 15 mins later 1 hour later 4 hours later Tomorrow I morgen Schedule Reminder Planlæg påmindelse %1 to %2 Today I dag DragInfoGraphicsView Edit Rediger Delete Slet New event Ny begivenhed New Event Ny begivenhed JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Afbryd Delete button Slet QObject Manage calendar Event types Account settings Account Konto Select items to be synced Events General settings Sync interval Calendar account General Generelt First day of week Time Klokkeslæt Return Today Return I dag Return Today Today Return Today I dag ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Navn: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Afbryd Save button Gem The name can not only contain whitespaces Enter a name please Shortcut Help Hjælp Delete event Slet begivenhed Copy Kopiér Cut Klip Paste Indsæt Delete Slet Select all Vælg alle SidebarCalendarWidget Y Å M M TimeJumpDialog Go button UserloginWidget Sign In button Log ind Sign Out button Log ud YearFrame Y Å today Today Today I dag dde-calendar-5.14.13/translations/dde-calendar_de.ts000066400000000000000000001470531473346337000222600ustar00rootroot00000000000000 AccountItem Sync successful Synchronisierung erfolgreich Network error Netzwerkfehler Server exception Serverausnahme Storage full Speicher voll AccountManager Local account Lokales Konto Event types Termintypen CColorPickerWidget Color Farbe Cancel button Abbrechen Save button Speichern CDayMonthView Monday Montag Tuesday Dienstag Wednesday Mittwoch Thursday Donnerstag Friday Freitag Saturday Samstag Sunday Sonntag CDayWindow Y J M M D T Lunar Lunar CGraphicsView New Event Neuer Termin CMonthScheduleNumItem %1 more %1 weitere CMonthView New event Neuer Termin New Event Neuer Termin CMonthWindow Y J CMyScheduleView My Event Mein Termin OK button OK Delete button Löschen Edit button Bearbeiten CPushButton New event type Neuer Termintyp CScheduleDlg New Event Neuer Termin Edit Event Termin bearbeiten End time must be greater than start time Endzeit muss größer als Startzeit sein OK button OK Never Nie At time of event Zum Zeitpunkt des Termins 15 minutes before 15 Minuten vorher 30 minutes before 30 Minuten vorher 1 hour before 1 Stunde vorher 1 day before 1 Tag vorher 2 days before 2 Tage vorher 1 week before 1 Woche vorher On start day (9:00 AM) Am Starttag (9:00 Uhr) time(s) mal Enter a name please Bitte einen Namen eingeben The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Type: Typ: Description: Beschreibung: All Day: Ganztägig: Starts: Beginnt: Ends: Endet: Remind Me: Erinnere mich: Repeat: Wiederholung: End Repeat: Wiederholung beenden: Calendar account: Kalenderkonto: Calendar account Kalenderkonto Type Typ Description Beschreibung All Day Ganztägig Time: Zeit: Time Zeit Solar Solar Lunar Lunar Starts Beginnt Ends Endet Remind Me Erinnere mich Repeat Wiederholung Daily Täglich Weekdays Wochentage Weekly Wöchentlich Monthly Monatlich Yearly Jährlich End Repeat Wiederholung beenden After Nach On Am Cancel button Abbrechen Save button Speichern CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle Vorkommen eines sich wiederholenden Termins müssen den gleichen Ganztagsstatus haben. Do you want to change all occurrences? Möchten Sie alle Vorkommen ändern? Cancel button Abbrechen Change All Alle ändern You are changing the repeating rule of this event. Sie ändern die Wiederholungsregel dieses Termins. You are deleting an event. Sie löschen einen Termin. Are you sure you want to delete this event? Sind Sie sicher, dass Sie diesen Termin löschen möchten? Delete button Löschen Do you want to delete all occurrences of this event, or only the selected occurrence? Möchten Sie alle Vorkommen dieses Termins löschen oder nur das ausgewählte Vorkommen? Delete All Alle löschen Delete Only This Event Nur diesen Termin löschen Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Möchten Sie diesen und alle zukünftigen Vorkommen dieses Termins löschen, oder nur das ausgewählte Vorkommen? Delete All Future Events Alle zukünftigen Termine löschen You are changing a repeating event. Sie ändern einen sich wiederholenden Termin. Do you want to change only this occurrence of the event, or all occurrences? Möchten Sie nur dieses Vorkommen des Termins oder alle Vorkommnisse ändern? All Alle Only This Event Nur diesen Termin Do you want to change only this occurrence of the event, or this and all future occurrences? Möchten Sie nur dieses Ereignis oder dieses und alle zukünftigen Ereignisse ändern? All Future Events Alle zukünftigen Termine You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Sie haben einen Schaltmonat ausgewählt und werden nach den Regeln des Mondkalenders daran erinnert. OK button OK CScheduleSearchDateItem Y J M M D T CScheduleSearchItem Edit Bearbeiten Delete Löschen All Day Ganztägig CScheduleSearchView No search results Keine Suchergebnisse CScheduleView ALL DAY GANZTÄGIG CSettingDialog Sunday Sonntag Monday Montag Tuesday Wednesday Thursday Friday Saturday Use System Setting Systemeinstellung verwenden 24-hour clock 24-Stunden-Uhr 12-hour clock 12-Stunden-Uhr import ICS file ICS-Datei importieren Manual Manuell 15 mins 15 Minuten 30 mins 30 Minuten 1 hour 1 Stunde 24 hours 24 Stunden Sync Now Jetzt synchronisieren Last sync Letzte Synchronisierung Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 Minuten) (%1 hour) (%1 Stunde) (%1 hours) (%1 Stunden) CTitleWidget Y J M M W W D T Search events and festivals Termine und Veranstaltungen suchen CWeekWidget Sun So Mon Mo Tue Di Wed Mi Thu Do Fri Fr Sat Sa CWeekWindow Week Woche Y J CYearScheduleView All Day Ganztägig No event Kein Termin CYearWindow Y J CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Der Kalender ist ein Werkzeug zum Anzeigen von Terminen und auch ein intelligenter Tagesplaner, um alle Dinge im Leben zu planen. Calendarmainwindow Calendar Kalender Manage Verwalten Privacy Policy Datenschutzerklärung Syncing... Wird synchronisiert ... Sync successful Synchronisierung erfolgreich Sync failed, please try later Synchronisierung fehlgeschlagen, bitte später erneut versuchen CenterWidget All Day Ganztägig DAccountDataBase Work Arbeit Life Leben Other Andere DAlarmManager Close button Schließen One day before start Einen Tag vor Beginn Remind me tomorrow Erinnere mich morgen Remind me later Erinnere mich später 15 mins later 15 Min. später 1 hour later 1 Stunde später 4 hours later 4 Stunden später Tomorrow Morgen Schedule Reminder Terminerinnerung %1 to %2 %1 bis %2 Today Heute DragInfoGraphicsView Edit Bearbeiten Delete Löschen New event Neuer Termin New Event Neuer Termin JobTypeListView export exportieren import ICS file ICS-Datei importieren You are deleting an event type. Sie löschen einen Termintyp. All events under this type will be deleted and cannot be recovered. Alle Termine dieses Typs werden gelöscht und können nicht wiederhergestellt werden. Cancel button Abbrechen Delete button Löschen QObject Manage calendar Kalender verwalten Event types Termintypen Account settings Kontoeinstellungen Account Konto Select items to be synced Zu synchronisierende Elemente auswählen Events Termine General settings Allgemeine Einstellungen Sync interval Synchronisierungsintervall Calendar account Kalenderkonto General Allgemein First day of week Erster Tag der Woche Time Zeit Return Today Return Heute Return Today Today Return Today Heute ScheduleTypeEditDlg New event type Neuer Termintyp Edit event type Termintyp bearbeiten Import ICS file ICS-Datei importieren Name: Name: Color: Farbe: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>-Datei: Cancel button Abbrechen Save button Speichern The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Enter a name please Bitte einen Namen eingeben Shortcut Help Hilfe Delete event Termin löschen Copy Kopieren Cut Ausschneiden Paste Einfügen Delete Löschen Select all Alles auswählen SidebarCalendarWidget Y J M M TimeJumpDialog Go button Los UserloginWidget Sign In button Anmelden Sign Out button Abmelden YearFrame Y J today Today Today Heute dde-calendar-5.14.13/translations/dde-calendar_de_DE.ts000066400000000000000000001472511473346337000226300ustar00rootroot00000000000000 AccountItem Sync successful Synchronisierung erfolgreich Network error Netzwerkfehler Server exception Server-Exception-Fehler Storage full Speicher voll AccountManager Local account Lokales Konto Event types Ereignistypen CColorPickerWidget Color Farbe Cancel button Abbrechen Save button Speichern CDayMonthView Monday Montag Tuesday Dienstag Wednesday Mittwoch Thursday Donnerstag Friday Freitag Saturday Samstag Sunday Sonntag CDayWindow Y J M M D T Lunar Lunar CGraphicsView New Event Neues Ereignis CMonthScheduleNumItem %1 more %1 weitere CMonthView New event Neues Ereignis New Event Neues Ereignis CMonthWindow Y J CMyScheduleView My Event Mein Ereignis OK button O.K. Delete button Löschen Edit button Ändern CPushButton New event type Neuer Ereignis-Typ CScheduleDlg New Event Neues Ereignis Edit Event Ereignis ändern End time must be greater than start time Endzeitpunkt muss hinter dem Beginn liegen OK button O.K. Never Niemals At time of event Zum Ereigniszeitpunkt 15 minutes before 15 Minuten vorher 30 minutes before 30 Minuten vorher 1 hour before 1 Stunde davor 1 day before 1 Tag vorher 2 days before 2 Tage vorher 1 week before 1 Woche vorher On start day (9:00 AM) Am Anfang des Starttages (9:00Uhr) time(s) Zeit(en) Enter a name please Geben Sie bitte einen Namen ein The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Type: Art: Description: Beschreibung: All Day: Ganzer Tag Starts: Beginnt: Ends: Endet: Remind Me: Erinnere mich: Repeat: Wiederholen End Repeat: Wiederholen bis: Calendar account: Kalender-Konto Calendar account Kalender-Konto Type Art: Description Beschreibung All Day Ganzer Tag Time: Uhrzeit: Time Zeit Solar Solar Lunar Lunar Starts Beginnt Ends Endet Remind Me Erinnere mich Repeat Wiederholen Daily Täglich Weekdays Wochentäglich Weekly Wöchentlich Monthly Monatlich Yearly Jährlich End Repeat Wiederholungsende After Nach On m Cancel button Abbrechen Save button Speichern CScheduleOperation All occurrences of a repeating event must have the same all-day status. Wiederholungsereignisse müssen alle den selben Ganzer-Tag-Status haben. Do you want to change all occurrences? Möchen Sie den Status bei allen Wiederholungen ändern? Cancel button Abbrechen Change All Alle Ändern You are changing the repeating rule of this event. Sie ändern die Wiederhol-Regel dieses Ereignisses. You are deleting an event. Sie löschen ein Ereignis Are you sure you want to delete this event? Sind Sie sicher, dass Sie dieses Ereignis löschen möchten? Delete button Löschen Do you want to delete all occurrences of this event, or only the selected occurrence? Möchten Sie alle oder nur das ausgewählte Ereignis löschen? Delete All Alle löschen Delete Only This Event Nur dieses Ereignis löschen Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Möchten Sie dieses Ereignis und auch die zukünftigen oder nur das ausgewählte löschen? Delete All Future Events Alle zukünftigen Ereignisse löschen You are changing a repeating event. Sie ändern ein Wiederholungsereignis Do you want to change only this occurrence of the event, or all occurrences? Möchten Sie nur dieses eine Ereignis oder gleich alle löschen? All Alle Only This Event Nur dieses eine Ereignis Do you want to change only this occurrence of the event, or this and all future occurrences? Möchten Sie nur dieses eine Ereignis oder dieses sowie alle zukünftigen löschen? All Future Events Alle zukünftigen Ereignisse You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Sie haben einen Schaltmonat ausgewählt und werden nach den Regeln des Lunar-Kalenders erinnert. OK button O.K. CScheduleSearchDateItem Y J M M D T CScheduleSearchItem Edit Ändern Delete Löschen All Day Ganzer Tag CScheduleSearchView No search results Keine Suchergebnisse CScheduleView ALL DAY Ganzer Tag CSettingDialog Sunday Sonntag Monday Montag Tuesday Wednesday Thursday Friday Saturday Use System Setting Systemeinstellungen verwenden 24-hour clock 24-Stunden-Zeit 12-hour clock 12-Stunden-Zeit import ICS file ICS-Datei importieren Manual Selbsteingabe 15 mins 15 Minuten 30 mins 30 Minuten 1 hour 1 Stunde 24 hours 24 Stunden Sync Now Jetzt synchronisieren Last sync Letzte Synchronisierung Please go to the <a href='/'>Control Center</a> to change system settings Bitte gehen Sie ins <a href='/'>Kontrollzentrum</a> um die Systemeinstellungen zu ändern CTimeEdit (%1 mins) (%1 Min) (%1 hour) (%1 Stunde) (%1 hours) (%1 Stunden) CTitleWidget Y J M M W W D T Search events and festivals In Ereignissen und Feiertagen suchen CWeekWidget Sun Son Mon on Tue Die Wed Mit Thu Don Fri Fre Sat Sam CWeekWindow Week Woche Y J CYearScheduleView All Day Ganzer Tag No event Kein Ereignis CYearWindow Y J CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender ist ein Werkzeug um Termine nachzuschauen, aber auch um schlau die all die Dinge des Lebens zu organisieren. Calendarmainwindow Calendar Kalender Manage Organisieren Privacy Policy Datenschutzerklärung Syncing... Synchronisieren… Sync successful Synchronisierung erfolgreich Sync failed, please try later Synchronisierung fehlgeschlagen, bitte nochmals versuchen CenterWidget All Day Ganzer Tag DAccountDataBase Work Arbeit Life Privatleben Other Anderes DAlarmManager Close button Schließen One day before start Ein Tag vor Beginn Remind me tomorrow Morgen daran erinnern Remind me later Später erinnern 15 mins later 15 Minuten danach 1 hour later 1 Stunde danach 4 hours later 4 Stunden danach Tomorrow Morgen Schedule Reminder Terminerinnerung %1 to %2 %1 zu %2 Today Heute DragInfoGraphicsView Edit Ändern Delete Löschen New event Neues Ereignis New Event Neues Ereignis JobTypeListView export Exportieren import ICS file ICS-Datei importieren You are deleting an event type. Sie löschen einen Ereignis-Typ All events under this type will be deleted and cannot be recovered. Alle Ereignisse dieses Typs werden gelöscht und können nicht wiederhergestellt werden. Cancel button Abbrechen Delete button Löschen QObject Manage calendar Kalender einrichten Event types Ereignistypen Account settings Kontoeinstellungen Account Konto Select items to be synced Das zu synchronisierende Ereignis auswählen Events Ereignisse General settings Allgemeine Einstellungen Sync interval Synchronisierungsintervall Calendar account Kalender-Konto General Allgemein First day of week Erster Tag der Woche Time Zeit Return Today Return Heute Return Today Today Return Today Heute ScheduleTypeEditDlg New event type Neuer Ereignis-Typ Edit event type Ereignis-Typ ändern Import ICS file ICS-Datei importieren Name: Name: Color: Farbe: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>-Datei: Cancel button Abbrechen Save button Speichern The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Enter a name please Geben Sie bitte einen Namen ein Shortcut Help Hilfe Delete event Ereignis löschen Copy Kopieren Cut Ausschneiden Paste Einfügen Delete Löschen Select all Alle auswählen SidebarCalendarWidget Y J M M TimeJumpDialog Go button Los geht's UserloginWidget Sign In button Anmelden Sign Out button Abmelden YearFrame Y J today Today Today Heute dde-calendar-5.14.13/translations/dde-calendar_el.ts000066400000000000000000001526331473346337000222700ustar00rootroot00000000000000 AccountItem Sync successful Επιτυχής συγχρονισμός Network error Σφάλμα δικτύου Server exception Storage full AccountManager Local account Τοπικός λογαριασμός Event types CColorPickerWidget Color Χρώμα Cancel button Ακύρωση Save button Αποθήκευση CDayMonthView Monday Δευτέρα Tuesday Τρίτη Wednesday Τετάρτη Thursday Πέμπτη Friday Παρασκευή Saturday Σάββατο Sunday Κυριακή CDayWindow Y Ε M Μ D Η Lunar CGraphicsView New Event Νέο Συμβάν CMonthScheduleNumItem %1 more %1 περισσότερο-α CMonthView New event Νέο συμβάν New Event Νέο Συμβάν CMonthWindow Y Y CMyScheduleView My Event Το συμβάν μου OK button ΟΚ Delete button Διαγραφή Edit button Επεξεργασία CPushButton New event type Νέος τύπος συμβάντος CScheduleDlg New Event Νέο συμβάν Edit Event Επεξεργασία συμβάντος End time must be greater than start time Ο χρόνος λήξης πρέπει να είναι μεγαλύτερος του χρόνου έναρξης OK button OK Never Ποτέ At time of event Την ώρα του συμβάντος 15 minutes before 15 λεπτά πριν 30 minutes before 30 λεπτά πριν 1 hour before 1 ώρα πριν 1 day before 1 ημέρα πριν 2 days before 2 ημέρες πριν 1 week before 1 εβδομάδα πριν On start day (9:00 AM) Στην έναρξη της ημέρας (9:00 ΠΜ) time(s) φορά(ές) Enter a name please The name can not only contain whitespaces Το όνομα δεν μπορρεί να περιέχει μόνο κενούς χαρακτήρες Type: Τύπος: Description: Περιγραφή: All Day: Ολοήμερο: Starts: Αρχίζει: Ends: Τελειώνει: Remind Me: Υπενθύμισέ μου: Repeat: Επανάληψη: End Repeat: Τέλος Επανάληψης: Calendar account: Λογαριασμός ημερολογίου: Calendar account Λογαριασμός ημερολογίου Type Τύπος Description Περιγραφή All Day Ολοήμερο Time: Ώρα: Time Ώρα Solar Lunar Starts Αρχίζει Ends Τελειώνει Remind Me Υπενθύμισέ μου Repeat Επανάληψη Daily Ημερήσιο Weekdays Εργάσιμες Weekly Εβδομαδιαίο Monthly Μηνιαίο Yearly Ετήσιο End Repeat Τέλος Επανάληψης After Μετά On Ενεργό Cancel button Ακύρωση Save button Αποθήκευση CScheduleOperation All occurrences of a repeating event must have the same all-day status. Όλες οι εμφανίσεις ενός επαναλαμβανόμενου συμβάντος πρέπει να έχουν την ίδια ολοήμερη κατάσταση. Do you want to change all occurrences? Θέλετε να αλλάξετε όλες τις εμφανίσεις; Cancel button Ακύρωση Change All Αλλαγή Όλων You are changing the repeating rule of this event. Αλλάζεις τον κανόνα επανάληψης αυτού του συμβάντος. You are deleting an event. Διαγράφεις ένα συμβάν Are you sure you want to delete this event? Είστε σίγουρος ότι θέλετε να διαγράψετε αυτό το συμβάν; Delete button Διαγραφή Do you want to delete all occurrences of this event, or only the selected occurrence? Θέλετε να διαγράψετε όλες τις εμφανίσεις αυτού του συμβάντος ή μόνο την επιλεγμένη εμφάνιση; Delete All Διαγραφή όλων Delete Only This Event Διαγραφή Μόνο Αυτού του Συμβάντος Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Θέλετε να διαγράψετε αυτήν και όλες τις μελλοντικές εμφανίσεις αυτού του συμβάντος ή μόνο την επιλεγμένη εμφάνιση; Delete All Future Events Διαγραφή Όλων των Μελλοντικών Συμβάντων You are changing a repeating event. Αλλάζεις ένα επαναλαμβανόμενο συμβάν. Do you want to change only this occurrence of the event, or all occurrences? Θέλετε να αλλάξετε μόνο αυτήν την εμφάνιση του συμβάντος ή όλες τις εμφανίσεις; All Όλα Only This Event Μόνο Αυτό το Συμβάν Do you want to change only this occurrence of the event, or this and all future occurrences? Θέλετε να αλλάξετε μόνο αυτήν την εμφάνιση του συμβάντος ή αυτήν και όλες τις μελλοντικές εμφανίσεις; All Future Events Όλα τα Μελλοντικά Συμβάντα You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button ΟΚ CScheduleSearchDateItem Y Ε M Μ D Η CScheduleSearchItem Edit Επεξεργασία Delete Διαγραφή All Day Ολοήμερο CScheduleSearchView No search results Χωρίς αποτελέσματα αναζήτησης CScheduleView ALL DAY ΟΛΟΗΜΕΡΟ CSettingDialog Sunday Κυριακή Monday Δευτέρα Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 24-ωρο ρολόι 12-hour clock 12-ωρο ρολόι import ICS file Manual Μη αυτόματα 15 mins 15 λεπτά 30 mins 30 λεπτά 1 hour 1 ώρα 24 hours 24 ώρες Sync Now Συγχρονισμός Τώρα Last sync Τελευταίος συγχρονισμός Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 λεπτά) (%1 hour) (%1 ώρα) (%1 hours) (%1 ώρες) CTitleWidget Y Ε M Μ W Β D Η Search events and festivals CWeekWidget Sun Κυρ Mon Δευ Tue Τρι Wed Τετ Thu Πεμ Fri Παρ Sat Σαβ CWeekWindow Week Εβδομάδα Y Y CYearScheduleView All Day Ολοήμερο No event Χωρίς συμβάν CYearWindow Y Y CalendarWindow Calendar Ημερολόγιο Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Το Ημερολόγιο είναι ένα εργαλείο για να δεις ημερομηνίες, αλλα και επίσης ένας εξύπνος σχεδιαστής ημέρας για να προγραμματίσεις όλα τα πράγματα στην ζωή. Calendarmainwindow Calendar Ημερολόγιο Manage Διαχείρηση Privacy Policy Πολιτική Απορρήτου Syncing... Συγχρονισμός... Sync successful Επιτυχής συγχρονισμός Sync failed, please try later CenterWidget All Day Ολοήμερο DAccountDataBase Work Εργασία Life Ζωή Other Άλλο DAlarmManager Close button Κλείσιμο One day before start Μια ημέρα πριν την εκκίνηση Remind me tomorrow Υπενθύμισέ μου αύριο Remind me later Υπεθύμισέ μου αργότερα 15 mins later 15 λεπτά αργότερα 1 hour later 1 ώρα αργότερα 4 hours later 4 ώρες αργότερα Tomorrow Αύριο Schedule Reminder Προγραμματισμός Υπενθύμισης %1 to %2 %1 εως %2 Today Σήμερα DragInfoGraphicsView Edit Επεξεργασία Delete Διαγραφή New event Νέο συμβάν New Event Νέο Συμβάν JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Ακύρωση Delete button Διαγραφή QObject Manage calendar Event types Account settings Ρυθμίσεις λογαριασμού Account Λογαριασμός Select items to be synced Events Συμβάντα General settings Γενικές ρυθμίσεις Sync interval Calendar account Λογαριασμός ημερολογίου General Γενικά First day of week Πρώτη ημέρα της εβδομάδας Time Ώρα Return Today Return Σήμερα Return Today Today Return Today Σήμερα ScheduleTypeEditDlg New event type Νέος τύπος συμβάντος Edit event type Import ICS file Name: Όνομα: Color: Χρώμα: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Ακύρωση Save button Αποθήκευση The name can not only contain whitespaces Το όνομα δεν μπορρεί να περιέχει μόνο κενούς χαρακτήρες Enter a name please Shortcut Help Βοήθεια Delete event Διαγραφή συμβάντος Copy Αντιγραφή Cut Αποκοπή Paste Επικόλληση Delete Διαγραφή Select all Επιλογή όλων SidebarCalendarWidget Y Ε M Μ TimeJumpDialog Go button UserloginWidget Sign In button Σύνδεση Sign Out button Έξοδος YearFrame Y Y today Today Today Σήμερα dde-calendar-5.14.13/translations/dde-calendar_en.ts000066400000000000000000001520751473346337000222720ustar00rootroot00000000000000 AccountItem Sync successful Sync successful Network error Network error Server exception Server exception Storage full Storage full AccountManager Local account Local account Event types Event types CColorPickerWidget Color Color Cancel button Cancel Save button Save CDayMonthView Monday Monday Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday Sunday Sunday CDayWindow Y Y M M D D Lunar Lunar CGraphicsView New Event New Event CMonthScheduleNumItem %1 more %1 more CMonthView New event New event New Event New Event CMonthWindow Y Y CMyScheduleView My Event My Event OK button OK Delete button Delete Edit button Edit CPushButton New event type New event type CScheduleDlg New Event New Event Edit Event Edit Event End time must be greater than start time End time must be greater than start time OK button OK Never Never At time of event At time of event 15 minutes before 15 minutes before 30 minutes before 30 minutes before 1 hour before 1 hour before 1 day before 1 day before 2 days before 2 days before 1 week before 1 week before On start day (9:00 AM) On start day (9:00 AM) time(s) time(s) Enter a name please Enter a name please The name can not only contain whitespaces The name can not only contain whitespaces Type: Type: Description: Description: All Day: All Day: Starts: Starts: Ends: Ends: Remind Me: Remind Me: Repeat: Repeat: End Repeat: End Repeat: Calendar account: Calendar account: Calendar account Calendar account Type Type Description Description All Day All Day Time: Time: Time Time Solar Solar Lunar Lunar Starts Starts Ends Ends Remind Me Remind Me Repeat Repeat Daily Daily Weekdays Weekdays Weekly Weekly Monthly Monthly Yearly Yearly End Repeat End Repeat After After On On Cancel button Cancel Save button Save CScheduleOperation All occurrences of a repeating event must have the same all-day status. All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Do you want to change all occurrences? Cancel button Cancel Change All Change All You are changing the repeating rule of this event. You are changing the repeating rule of this event. You are deleting an event. You are deleting an event. Are you sure you want to delete this event? Are you sure you want to delete this event? Delete button Delete Do you want to delete all occurrences of this event, or only the selected occurrence? Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete All Delete Only This Event Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events Delete All Future Events You are changing a repeating event. You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? Do you want to change only this occurrence of the event, or all occurrences? All All Only This Event Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Edit Delete Delete All Day All Day CScheduleSearchView No search results No search results CScheduleView ALL DAY ALL DAY CSettingDialog Sunday Sunday Monday Monday Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday 24-hour clock 24-hour clock 12-hour clock 12-hour clock import ICS file Manual Manual 15 mins 15 mins 30 mins 30 mins 1 hour 1 hour 24 hours 24 hours Sync Now Sync Now Last sync Last sync Please go to the <a href='/'>Control Center</a> to change settings CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hour) (%1 hours) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals Search events and festivals CWeekWidget Sun Sun Mon Mon Tue Tue Wed Wed Thu Thu Fri Fri Sat Sat CWeekWindow Week Week Y Y CYearScheduleView All Day All Day No event No event CYearWindow Y Y CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Calendar Manage Manage Privacy Policy Privacy Policy Syncing... Syncing... Sync successful Sync successful Sync failed, please try later Sync failed, please try later CenterWidget All Day All Day DAccountDataBase Work Life Other DAlarmManager Close button One day before start Remind me tomorrow Remind me later 15 mins later 1 hour later 4 hours later Tomorrow Schedule Reminder %1 to %2 Today Today DragInfoGraphicsView Edit Edit Delete Delete New event New event New Event New Event JobTypeListView export import ICS file You are deleting an event type. You are deleting an event type. All events under this type will be deleted and cannot be recovered. All events under this type will be deleted and cannot be recovered. Cancel button Cancel Delete button Delete QObject Manage calendar Manage calendar Event types Event types Account settings Account settings Account Account Select items to be synced Select items to be synced Events Events General settings General settings Sync interval Sync interval Calendar account Calendar account General General First day of week First day of week Time Time Return Today Return Today Return Today Today Return Today Today ScheduleTypeEditDlg New event type New event type Edit event type Edit event type Import ICS file Name: Name: Color: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Cancel Save button Save The name can not only contain whitespaces The name can not only contain whitespaces Enter a name please Enter a name please Shortcut Help Help Delete event Delete event Copy Copy Cut Cut Paste Paste Delete Delete Select all Select all SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Go UserloginWidget Sign In button Sign In Sign Out button Sign Out YearFrame Y Y today Today Today Today dde-calendar-5.14.13/translations/dde-calendar_en_AU.ts000066400000000000000000001443131473346337000226530ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button Cancel Save button Save CDayMonthView Monday Monday Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday Sunday Sunday CDayWindow Y Y M M D D Lunar CGraphicsView New Event New Event CMonthScheduleNumItem %1 more %1 more CMonthView New event New event New Event New Event CMonthWindow Y Y CMyScheduleView My Event My Event OK button OK Delete button Delete Edit button Edit CPushButton New event type CScheduleDlg New Event New Event Edit Event Edit Event End time must be greater than start time End time must be greater than start time OK button OK Never Never At time of event At time of event 15 minutes before 15 minutes before 30 minutes before 30 minutes before 1 hour before 1 hour before 1 day before 1 day before 2 days before 2 days before 1 week before 1 week before On start day (9:00 AM) On start day (9:00 AM) time(s) time(s) Enter a name please The name can not only contain whitespaces Type: Type: Description: Description: All Day: All Day: Starts: Starts: Ends: Ends: Remind Me: Remind Me: Repeat: Repeat: End Repeat: End Repeat: Calendar account: Calendar account Type Type Description Description All Day All Day Time: Time Solar Lunar Starts Starts Ends Ends Remind Me Remind Me Repeat Repeat Daily Daily Weekdays Weekdays Weekly Weekly Monthly Monthly Yearly Yearly End Repeat End Repeat After After On On Cancel button Cancel Save button Save CScheduleOperation All occurrences of a repeating event must have the same all-day status. All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Do you want to change all occurrences? Cancel button Cancel Change All Change All You are changing the repeating rule of this event. You are changing the repeating rule of this event. You are deleting an event. You are deleting an event. Are you sure you want to delete this event? Are you sure you want to delete this event? Delete button Delete Do you want to delete all occurrences of this event, or only the selected occurrence? Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete All Delete Only This Event Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events Delete All Future Events You are changing a repeating event. You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? Do you want to change only this occurrence of the event, or all occurrences? All All Only This Event Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Edit Delete Delete All Day All Day CScheduleSearchView No search results No search results CScheduleView ALL DAY ALL DAY CSettingDialog Sunday Sunday Monday Monday Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual Manual 15 mins 30 mins 1 hour 1 hour 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals CWeekWidget Sun Sun Mon Mon Tue Tue Wed Wed Thu Thu Fri Fri Sat Sat CWeekWindow Week Week Y Y CYearScheduleView All Day All Day No event No event CYearWindow Y Y CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Calendar Manage Privacy Policy Privacy Policy Syncing... Syncing... Sync successful Sync failed, please try later CenterWidget All Day All Day DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button Close One day before start One day before start Remind me tomorrow Remind me tomorrow Remind me later Remind me later 15 mins later 1 hour later 4 hours later Tomorrow Tomorrow Schedule Reminder Schedule Reminder %1 to %2 Today Today DragInfoGraphicsView Edit Edit Delete Delete New event New event New Event New Event JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Cancel Delete button Delete QObject Manage calendar Event types Account settings Account Account Select items to be synced Events General settings Sync interval Calendar account General General First day of week Time Return Today Return Today Return Today Today Return Today Today ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Cancel Save button Save The name can not only contain whitespaces Enter a name please Shortcut Help Help Delete event Delete event Copy Copy Cut Cut Paste Paste Delete Delete Select all Select all SidebarCalendarWidget Y Y M M TimeJumpDialog Go button UserloginWidget Sign In button Sign In Sign Out button Sign Out YearFrame Y Y today Today Today Today dde-calendar-5.14.13/translations/dde-calendar_en_GB.ts000066400000000000000000001440401473346337000226330ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button Cancel Save button Save CDayMonthView Monday Monday Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday Sunday Sunday CDayWindow Y Y M M D D Lunar CGraphicsView New Event New Event CMonthScheduleNumItem %1 more %1 more CMonthView New event New event New Event New Event CMonthWindow Y Y CMyScheduleView My Event My Event OK button OK Delete button Delete Edit button Edit CPushButton New event type CScheduleDlg New Event New Event Edit Event Edit Event End time must be greater than start time End time must be greater than start time OK button OK Never Never At time of event At time of event 15 minutes before 15 minutes before 30 minutes before 30 minutes before 1 hour before 1 hour before 1 day before 1 day before 2 days before 2 days before 1 week before 1 week before On start day (9:00 AM) On start day (9:00 AM) time(s) time(s) Enter a name please The name can not only contain whitespaces Type: Type: Description: Description: All Day: All Day: Starts: Starts: Ends: Ends: Remind Me: Remind Me: Repeat: Repeat: End Repeat: End Repeat: Calendar account: Calendar account Type Type Description Dscription All Day All Day Time: Time Solar Lunar Starts Starts Ends Ends Remind Me Remind Me Repeat Repeat Daily Daily Weekdays Weekdays Weekly Weekly Monthly Monthly Yearly Yearly End Repeat End Repeat After After On On Cancel button Cancel Save button Save CScheduleOperation All occurrences of a repeating event must have the same all-day status. All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Do you want to change all occurrences? Cancel button Cancel Change All Change All You are changing the repeating rule of this event. You are changing the repeating rule of this event. You are deleting an event. You are deleting an event. Are you sure you want to delete this event? Are you sure you want to delete this event? Delete button Delete Do you want to delete all occurrences of this event, or only the selected occurrence? Do you want to delete the occurrence of this event, or the selected occurrence? Delete All Delete All Delete Only This Event Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events Delete All Future Events You are changing a repeating event. You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? Do you want to change only this occurrence of the event, or all occurrences? All All Only This Event Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? Do you want to change the occurrence of the event, or this and all future occurrences All Future Events All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Edit Delete Delete All Day All Day CScheduleSearchView No search results No search results CScheduleView ALL DAY ALL DAY CSettingDialog Sunday Sunday Monday Monday Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Week Y Y CYearScheduleView All Day All Day No event No event CYearWindow Y Y CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Calendar Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day All Day DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button One day before start Remind me tomorrow Remind me later 15 mins later 1 hour later 4 hours later Tomorrow Schedule Reminder %1 to %2 Today Today DragInfoGraphicsView Edit Edit Delete Delete New event New event New Event New Event JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Cancel Delete button Delete QObject Manage calendar Event types Account settings Account Select items to be synced Events General settings Sync interval Calendar account General First day of week Time Return Today Return Today Return Today Today Return Today Today ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Cancel Save button Save The name can not only contain whitespaces Enter a name please Shortcut Help Help Delete event Delete event Copy Copy Cut Cut Paste Paste Delete Delete Select all Select all SidebarCalendarWidget Y Y M M TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y Y today Today Today Today dde-calendar-5.14.13/translations/dde-calendar_en_US.ts000066400000000000000000001460501473346337000226750ustar00rootroot00000000000000 AccountItem Sync successful Sync successful Network error Network error Server exception Server exception Storage full Storage full AccountManager Local account Local account Event types Event types CColorPickerWidget Color Color Cancel button Cancel Save button Save CDayMonthView Monday Monday Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday Sunday Sunday CDayWindow Y Y M M D D Lunar Lunar CGraphicsView New Event New Event CMonthScheduleNumItem %1 more %1 more CMonthView New event New event New Event New Event CMonthWindow Y Y CMyScheduleView My Event My Event OK button OK Delete button Delete Edit button Edit CPushButton New event type New event type CScheduleDlg New Event New Event Edit Event Edit Event End time must be greater than start time End time must be greater than start time OK button OK Never Never At time of event At time of event 15 minutes before 15 minutes before 30 minutes before 30 minutes before 1 hour before 1 hour before 1 day before 1 day before 2 days before 2 days before 1 week before 1 week before On start day (9:00 AM) On start day (9:00 AM) time(s) time(s) Enter a name please Enter a name please The name can not only contain whitespaces The name can not only contain whitespaces Type: Type: Description: Description: All Day: All Day: Starts: Starts: Ends: Ends: Remind Me: Remind Me: Repeat: Repeat: End Repeat: End Repeat: Calendar account: Calendar account: Calendar account Calendar account Type Type Description Description All Day All Day Time: Time: Time Time Solar Solar Lunar Lunar Starts Starts Ends Ends Remind Me Remind Me Repeat Repeat Daily Daily Weekdays Weekdays Weekly Weekly Monthly Monthly Yearly Yearly End Repeat End Repeat After After On On Cancel button Cancel Save button Save CScheduleOperation All occurrences of a repeating event must have the same all-day status. All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Do you want to change all occurrences? Cancel button Cancel Change All Change All You are changing the repeating rule of this event. You are changing the repeating rule of this event. You are deleting an event. You are deleting an event. Are you sure you want to delete this event? Are you sure you want to delete this event? Delete button Delete Do you want to delete all occurrences of this event, or only the selected occurrence? Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete All Delete Only This Event Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events Delete All Future Events You are changing a repeating event. You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? Do you want to change only this occurrence of the event, or all occurrences? All All Only This Event Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Edit Delete Delete All Day All Day CScheduleSearchView No search results No search results CScheduleView ALL DAY ALL DAY CSettingDialog Sunday Sunday Monday Monday Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday Use System Setting 24-hour clock 24-hour clock 12-hour clock 12-hour clock import ICS file Manual Manual 15 mins 15 mins 30 mins 30 mins 1 hour 1 hour 24 hours 24 hours Sync Now Sync Now Last sync Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hour) (%1 hours) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals Search events and festivals CWeekWidget Sun Sun Mon Mon Tue Tue Wed Wed Thu Thu Fri Fri Sat Sat CWeekWindow Week Week Y Y CYearScheduleView All Day All Day No event No event CYearWindow Y Y CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Calendar Manage Manage Privacy Policy Privacy Policy Syncing... Syncing... Sync successful Sync successful Sync failed, please try later Sync failed, please try later CenterWidget All Day All Day DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button Close One day before start One day before start Remind me tomorrow Remind me tomorrow Remind me later Remind me later 15 mins later 15 mins later 1 hour later 1 hour later 4 hours later 4 hours later Tomorrow Tomorrow Schedule Reminder Schedule Reminder %1 to %2 %1 to %2 Today Today DragInfoGraphicsView Edit Edit Delete Delete New event New event New Event New Event JobTypeListView export import ICS file You are deleting an event type. You are deleting an event type. All events under this type will be deleted and cannot be recovered. All events under this type will be deleted and cannot be recovered. Cancel button Cancel Delete button Delete QObject Manage calendar Manage calendar Event types Event types Account settings Account settings Account Account Select items to be synced Select items to be synced Events Events General settings General settings Sync interval Sync interval Calendar account Calendar account General General First day of week First day of week Time Time Return Today Return Today Return Today Today Return Today Today ScheduleTypeEditDlg New event type New event type Edit event type Edit event type Import ICS file Name: Name: Color: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Cancel Save button Save The name can not only contain whitespaces The name can not only contain whitespaces Enter a name please Enter a name please Shortcut Help Help Delete event Delete event Copy Copy Cut Cut Paste Paste Delete Delete Select all Select all SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Go UserloginWidget Sign In button Sign In Sign Out button Sign Out YearFrame Y Y today Today Today Today dde-calendar-5.14.13/translations/dde-calendar_es.ts000066400000000000000000001471711473346337000223000ustar00rootroot00000000000000 AccountItem Sync successful Sincronización exitosa Network error Error de red Server exception Excepción del servidor Storage full Almacenamiento lleno AccountManager Local account Cuenta local Event types Tipos de eventos CColorPickerWidget Color Color Cancel button Cancelar Save button Guardar CDayMonthView Monday lunes Tuesday martes Wednesday miércoles Thursday jueves Friday viernes Saturday sábado Sunday domingo CDayWindow Y A M M D D Lunar Lunar CGraphicsView New Event Nuevo evento CMonthScheduleNumItem %1 more %1 más CMonthView New event Nuevo evento New Event Nuevo evento CMonthWindow Y A CMyScheduleView My Event Mi evento OK button Aceptar Delete button Borrar Edit button Editar CPushButton New event type Nuevo tipo de evento CScheduleDlg New Event Nuevo evento Edit Event Editar evento End time must be greater than start time El tiempo final debe ser mayor que el tiempo inicial OK button Aceptar Never Nunca At time of event En el momento del evento. 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 día antes 2 days before 2 días antes 1 week before 1 semana antes On start day (9:00 AM) El día de inicio (9:00 a.m.) time(s) hora(s) Enter a name please Por favor ingrese un nombre The name can not only contain whitespaces El nombre no puede contener espacios en blanco Type: Tipo: Description: Descripción: All Day: Todo el día: Starts: Inicia: Ends: Termina: Remind Me: Recordarme: Repeat: Repetir: End Repeat: Fin de repetición: Calendar account: Cuenta de calendario: Calendar account Cuenta de calendario Type Tipo Description Descripción All Day Todo el día Time: Tiempo: Time Tiempo Solar Solar Lunar Lunar Starts Inicia Ends Termina Remind Me Recordarme Repeat Repetir Daily Diariamente Weekdays Días laborables Weekly Semanalmente Monthly Mensualmente Yearly Anualmente End Repeat Fin de repetición After Después On Encendido Cancel button Cancelar Save button Guardar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas las instancias de un evento repetido debe tener el mismo estado todo el día. Do you want to change all occurrences? ¿Desea cambiar todas las instancias? Cancel button Cancelar Change All Cambiar todos You are changing the repeating rule of this event. Está cambiando la regla de repetición de este evento. You are deleting an event. Esta borrando un evento Are you sure you want to delete this event? ¿Está seguro que desea borrar este evento? Delete button Borrar Do you want to delete all occurrences of this event, or only the selected occurrence? ¿Desea borrar todas las instancias de este evento, o solo la instancia seleccionada? Delete All Eliminar todo Delete Only This Event Borrar solo este evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ¿Desea eliminar este y todas las instancias futuras de este evento, o solo la instancia seleccionada? Delete All Future Events Borrar todos los eventos futuros You are changing a repeating event. Esta cambiando una repetición de un evento. Do you want to change only this occurrence of the event, or all occurrences? ¿Desea cambiar solo la instancia de este evento, o todas las instancias? All Todos Only This Event Solo este evento Do you want to change only this occurrence of the event, or this and all future occurrences? ¿Desea cambiar solo este acontecimiento del evento, o este y todos los acontecimientos futuros? All Future Events Todos los eventos futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Ha seleccionado un mes bisiesto y se le recordará de acuerdo con las reglas del calendario lunar. OK button Aceptar CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Editar Delete Eliminar All Day Todo el día CScheduleSearchView No search results Sin resultados CScheduleView ALL DAY EVENTOS CSettingDialog Sunday Domingo Monday Lunes Tuesday Wednesday Thursday Friday Saturday Use System Setting Usar configuración del sistema 24-hour clock Reloj de 24 horas 12-hour clock Reloj de 12 horas import ICS file Importar archivo ICS Manual Manual 15 mins 15 minutos 30 mins 30 minutos 1 hour 1 hora 24 hours 24 horas Sync Now Sincronizar ahora Last sync Ultima sincronizacion Please go to the <a href='/'>Control Center</a> to change system settings Vaya al </a>Centro de control</a> para cambiar la configuración del sistema CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hora) (%1 hours) (%1 horas) CTitleWidget Y Y M M W W D D Search events and festivals Buscar eventos y festivales CWeekWidget Sun dom. Mon lun. Tue mar. Wed miérc. Thu juev. Fri vier. Sat sáb. CWeekWindow Week Semana Y A CYearScheduleView All Day Todo el día No event No hay eventos CYearWindow Y A CalendarWindow Calendar Calendario Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendario de Deepin es una herramienta para consultar fechas, y un conveniente planificador para agendar sus reuniones y eventos. Calendarmainwindow Calendar Calendario Manage Ajustes Privacy Policy Política de privacidad Syncing... Sincronizando… Sync successful Sincronización exitosa Sync failed, please try later La sincronización falló, intentelo más tarde CenterWidget All Day Todo el día DAccountDataBase Work Trabajo Life Vida Other Otro DAlarmManager Close button Cerrar One day before start El día anterior al evento Remind me tomorrow Recuérdame mañana Remind me later Recuérdame luego 15 mins later 15 minutos después 1 hour later 1 hora después 4 hours later 4 horas después Tomorrow Mañana Schedule Reminder Programar Recordatorio %1 to %2 %1 a %2 Today Hoy DragInfoGraphicsView Edit Editar Delete Borrar New event Nuevo evento New Event Nuevo evento JobTypeListView export Exportar import ICS file Importar archivo ICS You are deleting an event type. Está eliminando un tipo de evento. All events under this type will be deleted and cannot be recovered. Todos los eventos de este tipo se eliminarán y no se podrán recuperar. Cancel button Cancelar Delete button Eliminar QObject Manage calendar Administrar calendario Event types Tipos de eventos Account settings Ajustes de la cuenta Account Cuenta Select items to be synced Seleccionar elementos a sincronizar Events Eventos General settings Ajustes generales Sync interval Intervalo de sincronización Calendar account Cuenta de calendario General General First day of week Primer día de la semana Time Tiempo Return Today Return Hoy Return Today Today Return Today Hoy ScheduleTypeEditDlg New event type Nuevo tipo de evento Edit event type Editar tipo de evento Import ICS file Importar archivo ICS Name: Nombre: Color: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>Archivo: Cancel button Cancelar Save button Guardar The name can not only contain whitespaces El nombre no puede contener espacios en blanco Enter a name please Por favor ingrese un nombre Shortcut Help Ayuda Delete event Borrar evento Copy Duplicar Cut Cortar Paste Pegar Delete Borrar Select all Seleccionar todo SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Iniciar sesión Sign Out button Cerrar sesión YearFrame Y A today Today Today Hoy dde-calendar-5.14.13/translations/dde-calendar_fi.ts000066400000000000000000001466531473346337000222730ustar00rootroot00000000000000 AccountItem Sync successful Synkronointi onnistui Network error Verkkovirhe Server exception Palvelimen poikkeus Storage full Levytila täynnä AccountManager Local account Paikallinen tili Event types Tapahtumatyypit CColorPickerWidget Color Väri Cancel button Peruuta Save button Tallenna CDayMonthView Monday Maanantai Tuesday Tiistai Wednesday Keskiviikko Thursday Torstai Friday Perjantai Saturday Lauantai Sunday Sunnuntai CDayWindow Y V M K D P Lunar Kuu CGraphicsView New Event Uusi tapahtuma CMonthScheduleNumItem %1 more %1 lisää CMonthView New event Uusi tapahtuma New Event Uusi tapahtuma CMonthWindow Y V CMyScheduleView My Event Tapahtuma OK button OK Delete button Poista Edit button Muokkaa CPushButton New event type Uusi tapahtuman tyyppi CScheduleDlg New Event Uusi tapahtuma Edit Event Muokkaa tapahtumaa End time must be greater than start time Lopetusajan on oltava pidempi kuin aloitusaika OK button OK Never Ei koskaan At time of event Tapahtuman aikaan 15 minutes before 15 min ennen 30 minutes before 30 min ennen 1 hour before 1 tunti ennen 1 day before 1 päivä ennen 2 days before 2 päivää ennen 1 week before 1 viikko ennen On start day (9:00 AM) Aloituspäivänä (9:00) time(s) kertaa Enter a name please Anna nimi The name can not only contain whitespaces Nimi ei voi sisältää vain välilyöntejä Type: Tyyppi: Description: Kuvaus: All Day: Koko päivä: Starts: Alkaa: Ends: Loppuu: Remind Me: Muistuta minua: Repeat: Toista: End Repeat: Lopeta toisto: Calendar account: Kalenteritili: Calendar account Kalenteritili Type Tyyppi Description Kuvaus All Day Koko päivä Time: Aika: Time Aika Solar Aurinko Lunar Kuu Starts Alkaa Ends Loppuu Remind Me Muistuta minua Repeat Toista Daily Päivittäin Weekdays Arkisin Weekly Viikoittain Monthly Kuukausittain Yearly Vuosittain End Repeat Lopeta toisto After Jälkeen On Päällä Cancel button Peruuta Save button Tallenna CScheduleOperation All occurrences of a repeating event must have the same all-day status. Kaikilla toistuvilla tapahtumilla on oltava sama koko päivän tila. Do you want to change all occurrences? Haluatko muuttaa kaikkia tapahtumia? Cancel button Peruuta Change All Vaihda kaikki You are changing the repeating rule of this event. Olet muuttamassa tämän tapahtuman toistuvaa sääntöä. You are deleting an event. Olet poistamassa tapahtumaa. Are you sure you want to delete this event? Haluatko varmasti poistaa tämän tapahtuman? Delete button Poista Do you want to delete all occurrences of this event, or only the selected occurrence? Haluatko poistaa kaikki tämän tapahtuman esiintymät vai vain valitun tapahtuman? Delete All Poista kaikki Delete Only This Event Poista vain tämä tapahtuma Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Haluatko poistaa tämän ja kaikki tämän tapahtuman tulevat esiintymät vai vain valitun tapahtuman? Delete All Future Events Poista kaikki tulevat tapahtumat You are changing a repeating event. Olet vaihtamassa toistuvaa tapahtumaa. Do you want to change only this occurrence of the event, or all occurrences? Haluatko muuttaa vain tämän tapahtuman vai kaikki tapahtumat? All Kaikki Only This Event Vain tämä tapahtuma Do you want to change only this occurrence of the event, or this and all future occurrences? Haluatko muuttaa vain tämän tapahtuman vai tätä ja kaikkia tulevia tapahtumia? All Future Events Kaikki tulevat tapahtumat You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Olet valinnut karkauskuukauden ja sinua muistutetaan kuukalenterin sääntöjen mukaisesti. OK button OK CScheduleSearchDateItem Y V M K D P CScheduleSearchItem Edit Muokkaa Delete Poista All Day Koko päivä CScheduleSearchView No search results Ei hakutuloksia CScheduleView ALL DAY AIKA CSettingDialog Sunday Sunnuntai Monday Maanantai Tuesday Wednesday Thursday Friday Saturday Use System Setting Käytä järjestelmän asetuksia 24-hour clock 24h kello 12-hour clock 12h kello import ICS file tuo ICS kalenteri Manual Manuaalinen 15 mins 15 min 30 mins 30 min 1 hour 1 tunti 24 hours 24 tuntia Sync Now Synkronoi nyt Last sync Viimeisin synkronointi Please go to the <a href='/'>Control Center</a> to change system settings Siirry <a href='/'>Ohjauspaneeliin</a> ja muuta järjestelmän asetuksia CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 tunti) (%1 hours) (%1 tuntia) CTitleWidget Y V M KK W VK D PV Search events and festivals Hae tapahtumia ja festivaaleja CWeekWidget Sun Su Mon Ma Tue Ti Wed Ke Thu To Fri Pe Sat La CWeekWindow Week Viikko Y V CYearScheduleView All Day Koko päivä No event Ei tapahtumaa CYearWindow Y V CalendarWindow Calendar Kalenteri Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalenteri on työkalu almanakan tarkasteluun ja voit myös tehdä hälytykset ja muistutukset kalenteriin. Calendarmainwindow Calendar Kalenteri Manage Hallitse Privacy Policy Tietosuojakäytäntö Syncing... Synkronoidaan... Sync successful Synkronointi onnistui Sync failed, please try later Synkronointi epäonnistui, yritä myöhemmin CenterWidget All Day Koko päivä DAccountDataBase Work Työ Life Oma Other Muu DAlarmManager Close button Sulje One day before start Päivä ennen alkua Remind me tomorrow Muistuta huomenna Remind me later Muistuta myöhemmin 15 mins later 15 min myöhemmin 1 hour later 1 tunnin kuluttua 4 hours later 4 tunnin kuluttua Tomorrow Huomenna Schedule Reminder Ajasta muistutus %1 to %2 %1 - %2 Today Tänään DragInfoGraphicsView Edit Muokkaa Delete Poista New event Uusi tapahtuma New Event Uusi tapahtuma JobTypeListView export vie import ICS file tuo ICS kalenteri You are deleting an event type. Olet poistamassa tapahtumatyyppiä. All events under this type will be deleted and cannot be recovered. Kaikki tämän tyypin tapahtumat poistetaan, eikä niitä voi palauttaa. Cancel button Peruuta Delete button Poista QObject Manage calendar Hallitse kalenteria Event types Tapahtumatyypit Account settings Tilin asetukset Account Tili Select items to be synced Valitse synkronoitavat kohteet Events Tapahtumat General settings Yleiset asetukset Sync interval Synkronointiväli Calendar account Kalenteritili General Yleinen First day of week Viikon ensimmäinen päivä Time Aika Return Today Return Tänään Return Today Today Return Today Tänään ScheduleTypeEditDlg New event type Uusi tapahtuman tyyppi Edit event type Muokkaa tapahtuman tyyppiä Import ICS file tuo ICS kalenteri Name: Nimi: Color: Väri: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> kalenteri: Cancel button Peruuta Save button Tallenna The name can not only contain whitespaces Nimi ei voi sisältää vain välilyöntejä Enter a name please Anna nimi Shortcut Help Ohje Delete event Poista tapahtuma Copy Kopioi Cut Leikkaa Paste Liitä Delete Poista Select all Valitse kaikki SidebarCalendarWidget Y V M K TimeJumpDialog Go button Mene UserloginWidget Sign In button Kirjaudu sisään Sign Out button Kirjaudu ulos YearFrame Y V today Today Today Tänään dde-calendar-5.14.13/translations/dde-calendar_fr.ts000066400000000000000000001504011473346337000222660ustar00rootroot00000000000000 AccountItem Sync successful Synchronisation réussie Network error Erreur réseau Server exception Exception de serveur Storage full Stockage plein AccountManager Local account Compte local Event types Type d'événement CColorPickerWidget Color Couleur Cancel button Annuler Save button Sauvegarder CDayMonthView Monday Lundi Tuesday Mardi Wednesday Mercredi Thursday Jeudi Friday Vendredi Saturday Samedi Sunday Dimanche CDayWindow Y A M M D J Lunar Lunaire CGraphicsView New Event Nouvel événement CMonthScheduleNumItem %1 more %1 de plus CMonthView New event Nouvel événement New Event Nouvel événement CMonthWindow Y A CMyScheduleView My Event Mon événement OK button OK Delete button Supprimer Edit button Éditer CPushButton New event type Nouveau type d'événement CScheduleDlg New Event Nouvel évènement Edit Event Éditer l'événement End time must be greater than start time L'heure de fin doit être supérieure à l'heure de début OK button OK Never Jamais At time of event Au moment de l'événement 15 minutes before 15 minutes avant 30 minutes before 30 minutes avant 1 hour before 1 heure avant 1 day before 1 jour avant 2 days before 2 jours avant 1 week before 1 semaine avant On start day (9:00 AM) Le jour de début (9h00) time(s) heure(s) Enter a name please Entrer un nom s'il vous plait The name can not only contain whitespaces Le nom ne peut pas contenir que des espaces blancs Type: Type : Description: Description : All Day: Toute la journée : Starts: Débuts : Ends: Fin : Remind Me: Rappelez-moi : Repeat: Répéter : End Repeat: Fin de la répétition : Calendar account: Compte de calendrier : Calendar account Compte de calendrier Type Type Description Description All Day Toute la journée Time: Temps : Time Temps Solar Solaire Lunar Lunaire Starts Débuts Ends Fin Remind Me Rappelez-moi Repeat Répéter Daily Journalier Weekdays Jours de la semaine Weekly Hebdomadaire Monthly Mensuel Yearly Annuel End Repeat Terminer la répétition After Après On Sur Cancel button Annuler Save button Sauvegarder CScheduleOperation All occurrences of a repeating event must have the same all-day status. Toutes les occurrences d'un événement répétitif doivent avoir le même statut toute la journée. Do you want to change all occurrences? Voulez-vous modifier toutes les occurrences ? Cancel button Annuler Change All Tout changer You are changing the repeating rule of this event. Vous modifiez la règle de répétition de cet événement. You are deleting an event. Vous êtes en train de supprimer un événement. Are you sure you want to delete this event? Êtes-vous sûr de vouloir supprimer cet événement ? Delete button Supprimer Do you want to delete all occurrences of this event, or only the selected occurrence? Voulez-vous supprimer toutes les occurrences de cet événement ou uniquement l'occurrence sélectionnée ? Delete All Tout supprimer Delete Only This Event Supprimer uniquement cet événement Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Voulez-vous supprimer cet événement et toutes les occurrences futures de cet événement, ou uniquement l'occurrence sélectionnée ? Delete All Future Events Supprimer tous les événements futurs You are changing a repeating event. Vous modifiez un événement récurrent. Do you want to change only this occurrence of the event, or all occurrences? Voulez-vous modifier uniquement cette occurrence de l'événement ou toutes les occurrences ? All Tout Only This Event Seulement cet événement Do you want to change only this occurrence of the event, or this and all future occurrences? Voulez-vous modifier uniquement cette occurrence de l'événement, ou cette occurrence et toutes les occurrences futures ? All Future Events Tous les événements futurs You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Vous avez sélectionné un mois bissextile, et sera rappelé selon les règles du calendrier lunaire. OK button OK CScheduleSearchDateItem Y A M M D J CScheduleSearchItem Edit Éditer Delete Supprimer All Day Toute la journée CScheduleSearchView No search results Aucun résultat trouvé CScheduleView ALL DAY TOUTE LA JOURNÉE CSettingDialog Sunday Dimanche Monday Lundi Tuesday Wednesday Thursday Friday Saturday Use System Setting Utiliser les réglages du système 24-hour clock Horloge 24 heures 12-hour clock horloge 12 heures import ICS file importer un fichier ICS Manual Manuel 15 mins 15 min 30 mins 30 min 1 hour 1 heure 24 hours 24 heures Sync Now Synchroniser maintenant Last sync Dernière synchronisation Please go to the <a href='/'>Control Center</a> to change system settings Veuillez aller dans le <a href='/'>Centre de contrôle</a> pour changer les réglages système CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 heure) (%1 hours) (%1 heures) CTitleWidget Y A M M W W D J Search events and festivals Rechercher des événements et des festivals CWeekWidget Sun Dim Mon Lun Tue Mar Wed Mer Thu Jeu Fri Ven Sat Sam CWeekWindow Week Semaine Y A CYearScheduleView All Day Toute la journée No event Pas d'évènement CYearWindow Y A CalendarWindow Calendar Calendrier Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Le calendrier est un outil pour afficher les dates, et aussi un planificateur quotidien intelligent pour planifier toutes les choses de la vie. Calendarmainwindow Calendar Calendrier Manage Gérer Privacy Policy Politique de confidentialité Syncing... Synchronisation... Sync successful Synchronisation réussie Sync failed, please try later Échec de la synchronisation, veuillez réessayer plus tard CenterWidget All Day Toute la journée DAccountDataBase Work Travail Life Vie Other Autre DAlarmManager Close button Fermer One day before start Un jour avant le début Remind me tomorrow Rappel demain Remind me later Rappeler plus tard 15 mins later 15 minutes plus tard 1 hour later 1 heure plus tard 4 hours later 4 heures plus tard Tomorrow Demain Schedule Reminder Rappel de programme %1 to %2 %1 à %2 Today Aujourd'hui DragInfoGraphicsView Edit Éditer Delete Supprimer New event Nouvel événement New Event Nouvel événement JobTypeListView export exporter import ICS file importer un fichier ICS You are deleting an event type. Vous êtes en train de supprimer un type d'événement. All events under this type will be deleted and cannot be recovered. Tous les événements de ce type seront supprimés et ne pourront pas être récupérés. Cancel button Annuler Delete button Supprimer QObject Manage calendar Gérer le calendrier Event types Type d'événement Account settings Paramètres du compte Account Compte Select items to be synced Sélectionnez les éléments à synchroniser Events Événements General settings Paramètres généraux Sync interval Intervalle de synchronisation Calendar account Compte de calendrier General Général First day of week Premier jour de la semaine Time Temps Return Today Return Aujourd'hui Return Today Today Return Today Aujourd'hui ScheduleTypeEditDlg New event type Nouveau type d'événement Edit event type Éditer le type d'événement Import ICS file Importer un fichier ICS Name: Nom : Color: Couleur : <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Fichier <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> : Cancel button Annuler Save button Sauvegarder The name can not only contain whitespaces Le nom ne peut pas contenir que des espaces blancs Enter a name please Entrez un nom s'il vous plait Shortcut Help Aide Delete event Supprimer l'événement Copy Copier Cut Couper Paste Coller Delete Supprimer Select all Tout sélectionner SidebarCalendarWidget Y A M M TimeJumpDialog Go button Aller UserloginWidget Sign In button S'identifier Sign Out button Se déconnecter YearFrame Y A today Today Today Aujourd'hui dde-calendar-5.14.13/translations/dde-calendar_gl_ES.ts000066400000000000000000001450201473346337000226510ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cor Cancel button Cancelar Save button Gardar CDayMonthView Monday Luns Tuesday Martes Wednesday Mércores Thursday Xoves Friday Venres Saturday Sábado Sunday Domingo CDayWindow Y Y M M D D Lunar CGraphicsView New Event Novo evento CMonthScheduleNumItem %1 more %1 máis CMonthView New event Novo evento New Event Novo evento CMonthWindow Y Y CMyScheduleView My Event O meu evento OK button Aceptar Delete button Eliminar Edit button Editar CPushButton New event type CScheduleDlg New Event Novo evento Edit Event Editar evento End time must be greater than start time O tempo de finalización ten de ser maior que o de inicio OK button Aceptar Never Nunca At time of event Na hora do evento 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 día antes 2 days before 2 días antes 1 week before 1 semana antes On start day (9:00 AM) Ao comezo do día (9:00 AM) time(s) vez(ces) Enter a name please The name can not only contain whitespaces Type: Tipo: Description: Descrición: All Day: Todo o día: Starts: Comeza: Ends: Remata: Remind Me: Lembrarme: Repeat: Repetir: End Repeat: Fin da repetición: Calendar account: Calendar account Type Tipo Description Descrición All Day Todo o día Time: Time Solar Lunar Starts Comeza Ends Remata Remind Me Lembrarme Repeat Repetir Daily Diariamente Weekdays Días da semana Weekly Semanalmente Monthly Mensualmente Yearly Anualmente End Repeat Finalizar a repetición After Despois On O Cancel button Cancelar Save button Gardar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas as ocorrencias dun evento repetitivo teñen de ter o mesmo estado durante todo o día. Do you want to change all occurrences? Queres cambiar todas as ocorrencias? Cancel button Cancelar Change All Cambiar todo You are changing the repeating rule of this event. Estás a cambiar a regra de repetición deste evento. You are deleting an event. Estás eliminando un evento. Are you sure you want to delete this event? Tes a certeza de querer eliminar este evento? Delete button Eliminar Do you want to delete all occurrences of this event, or only the selected occurrence? Queres eliminar todas as ocorrencias deste evento, ou só a ocorrencia seleccionada? Delete All Eliminar todo Delete Only This Event Eliminar só este evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Queres eliminar esta e todas as vindeiras ocorrencias deste evento, ou só a ocorrencia seleccionada? Delete All Future Events Eliminar todo os eventos futuros You are changing a repeating event. Estás a cambiar un evento repetitivo. Do you want to change only this occurrence of the event, or all occurrences? Queres cambiar só esta ocorrencia deste evento, ou todas as ocorrencias? All Todo Only This Event Só este evento Do you want to change only this occurrence of the event, or this and all future occurrences? Queres cambiar só esta ocorrencia deste evento, ou esta e todas as vindeiras ocorrencias? All Future Events Todos os eventos futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button Aceptar CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Editar Delete Eliminar All Day Todo o día CScheduleSearchView No search results Sen resultados CScheduleView ALL DAY TODO O DÍA CSettingDialog Sunday Domingo Monday Luns Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual Manual 15 mins 30 mins 1 hour 1 hora 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals CWeekWidget Sun Dom Mon Lun Tue Mar Wed Mér Thu Xov Fri Ven Sat Sáb CWeekWindow Week Semana Y Y CYearScheduleView All Day Todo o día No event Sen evento CYearWindow Y Y CalendarWindow Calendar Calendario Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. O calendario é unha ferramenta para ver as datas e tamén un planificador diario intelixente para programar todas as cousas da vida. Calendarmainwindow Calendar Calendario Manage Privacy Policy Política de privacidade Syncing... Sincronizando... Sync successful Sync failed, please try later CenterWidget All Day Todo o día DAccountDataBase Work Traballo Life Persoal Other Outros DAlarmManager Close button Pechar One day before start Un día antes do comezo Remind me tomorrow Lembrarme mañá Remind me later Lembrarme máis tarde 15 mins later 1 hour later 4 hours later Tomorrow Mañá Schedule Reminder Programar recordatorio %1 to %2 %1 a %2 Today Hoxe DragInfoGraphicsView Edit Editar Delete Eliminar New event Novo evento New Event Novo evento JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Cancelar Delete button Eliminar QObject Manage calendar Event types Account settings Account Conta Select items to be synced Events General settings Sync interval Calendar account General Xeral First day of week Time Return Today Return Hoxe Return Today Today Return Today Hoxe ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Nome: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Cancelar Save button Gardar The name can not only contain whitespaces Enter a name please Shortcut Help Axuda Delete event Eliminar evento Copy Copiar Cut Cortar Paste Pegar Delete Eliminar Select all Seleccionar todo SidebarCalendarWidget Y Y M M TimeJumpDialog Go button UserloginWidget Sign In button Iniciar sesión Sign Out button Pechar sesión YearFrame Y Y today Today Today Hoxe dde-calendar-5.14.13/translations/dde-calendar_hr.ts000066400000000000000000001437671473346337000223110ustar00rootroot00000000000000 AccountItem Sync successful Network error Mrežna greška Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Boja Cancel button Otkaži Save button Spremi CDayMonthView Monday Ponedjeljak Tuesday Utorak Wednesday Srijeda Thursday Četvrtak Friday Petak Saturday Subota Sunday Nedjelja CDayWindow Y Y M M D D Lunar CGraphicsView New Event Novi događaj CMonthScheduleNumItem %1 more CMonthView New event Novi događaj New Event Novi događaj CMonthWindow Y Y CMyScheduleView My Event Moj događaj OK button U redu Delete button Obriši Edit button Uredi CPushButton New event type CScheduleDlg New Event Novi događaj Edit Event Uredi događaj End time must be greater than start time Vrijeme završetka mora biti veće od vremena početka OK button U redu Never Nikada At time of event U vrijeme događaja 15 minutes before 15 minuta prije 30 minutes before 30 minuta prije 1 hour before 1 sat prije 1 day before 1 dan prije 2 days before 2 dana prije 1 week before 1 tjedan prije On start day (9:00 AM) Na dan početka (9:00 AM) time(s) Enter a name please Molim unesite ime The name can not only contain whitespaces Ime ne može sadržavati samo razmake Type: Vrsta: Description: Opis: All Day: Cijeli dan: Starts: Započinje: Ends: Završava: Remind Me: Podsjeti me: Repeat: Ponovi: End Repeat: Calendar account: Calendar account Type Vrsta Description Opis All Day Cijeli dan Time: Vrijeme: Time Vrijeme Solar Lunar Starts Počinje Ends Završava Remind Me Podsjeti me Repeat Ponovi Daily Dnevno Weekdays Dani vikenda Weekly Tjedno Monthly Mjesečno Yearly Godišnje End Repeat After Poslije On Uključeno Cancel button Otkaži Save button Spremi CScheduleOperation All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Cancel button Otkaži Change All Promijeni sve You are changing the repeating rule of this event. You are deleting an event. Brišete događaj. Are you sure you want to delete this event? Jeste li sigurni da želite izbrisati ovaj događaj? Delete button Obriši Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Obrišite sve Delete Only This Event Obrišite samo ovaj događaj Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events Obriši sve buduće događaje You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? All Sve Only This Event Samo ovaj događaj Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events Svi budući događaji You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button U redu CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Uredi Delete Obriši All Day Cijeli dan CScheduleSearchView No search results Nema rezultata pretrage CScheduleView ALL DAY CIJELI DAN CSettingDialog Sunday Nedjelja Monday Ponedjeljak Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual Ručno 15 mins 30 mins 1 hour 1 sat 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Y M M W D D Search events and festivals CWeekWidget Sun Ned Mon Pon Tue Uto Wed Sri Thu Čet Fri Pet Sat Sub CWeekWindow Week Tjedan Y Y CYearScheduleView All Day Cijeli dan No event Nema događaja CYearWindow Y Y CalendarWindow Calendar Kalendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Kalendar Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day Cijeli dan DAccountDataBase Work Posao Life Život Other Ostalo DAlarmManager Close button Zatvori One day before start Jedan dan prije početka Remind me tomorrow Podsjeti me sutra Remind me later Podsjeti me kasnije 15 mins later 15 minuta kasnije 1 hour later 1 sat kasnije 4 hours later 4 sata kasnije Tomorrow Sutra Schedule Reminder Podsjetnik rasporeda %1 to %2 %1 do %2 Today Danas DragInfoGraphicsView Edit Uredi Delete Obriši New event Novi događaj New Event Novi događaj JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Otkaži Delete button Obriši QObject Manage calendar Upravljaj kalendarom Event types Account settings Account Račun Select items to be synced Events General settings Sync interval Calendar account General Općenito First day of week Time Vrijeme Return Today Return Danas Return Today Today Return Today Danas ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Ime: Color: Boja: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Otkaži Save button Spremi The name can not only contain whitespaces Ime ne može sadržavati samo razmake Enter a name please Molim unesite ime Shortcut Help Pomoć Delete event Izbriši događaj Copy Kopiraj Cut Izreži Paste Zalijepi Delete Obriši Select all Odaberi sve SidebarCalendarWidget Y Y M M TimeJumpDialog Go button UserloginWidget Sign In button Prijava Sign Out button Odjava YearFrame Y Y today Today Today Danas dde-calendar-5.14.13/translations/dde-calendar_hu.ts000066400000000000000000001476661473346337000223160ustar00rootroot00000000000000 AccountItem Sync successful A szinkronizálás sikeres Network error Hálózati hiba Server exception Szerver kivétel Storage full A tárhely megtelt AccountManager Local account Helyi fiók Event types Esemény típusok CColorPickerWidget Color Szín Cancel button Mégsem Save button Mentés CDayMonthView Monday Hétfő Tuesday Kedd Wednesday Szerda Thursday Csütörtök Friday Péntek Saturday Szombat Sunday Vasárnap CDayWindow Y Év M Hónap D Nap Lunar Hold naptár CGraphicsView New Event Új esemény CMonthScheduleNumItem %1 more %1 továbbiak CMonthView New event Új esemény New Event Új esemény CMonthWindow Y Év CMyScheduleView My Event Eseményeim OK button OK Delete button Törlés Edit button Szerkesztés CPushButton New event type Új esemény típusa CScheduleDlg New Event Új esemény Edit Event Esemény szerkesztése End time must be greater than start time A befejezés időpontja csak a kezdés időpontja után lehetséges OK button OK Never Soha At time of event Az esemény időpontjában 15 minutes before 15 perccel előtte 30 minutes before 30 perccel előtte 1 hour before 1 órával előtte 1 day before 1 nappal előtte 2 days before 2 nappal előtte 1 week before 1 héttel előtte On start day (9:00 AM) Esemény kezdete napján (De. 09:00) time(s) Időpont(ok) Enter a name please Kérjük adjon meg egy nevet The name can not only contain whitespaces A név nem tartalmazhat csak szóközöket Type: Típus: Description: Leírás: All Day: Egész nap: Starts: Kezdés: Ends: Befejezés: Remind Me: Emlékeztessen: Repeat: Ismétlés: End Repeat: Ismétlés vége: Calendar account: Naptár fiók: Calendar account Naptár fiók Type Típus Description Leírás All Day Egész nap Time: Idő: Time Idő Solar Nap Lunar Hold Starts Kezdés Ends Befejezés Remind Me Emlékeztessen Repeat Ismétlés Daily Naponta Weekdays Hétköznapokon Weekly Hetente Monthly Havonta Yearly Évente End Repeat Ismétlés vége After Utána On Ekkor Cancel button Mégsem Save button Mentés CScheduleOperation All occurrences of a repeating event must have the same all-day status. Az ismétlődő események valamennyiének "egész nap" állapotúnak kell lennie. Do you want to change all occurrences? Minden alkalmat módosítani szeretne? Cancel button Mégsem Change All Összes módosítása You are changing the repeating rule of this event. Módosítja az esemény ismétlődési szabályát. You are deleting an event. Ön töröl egy eseményt. Are you sure you want to delete this event? Biztosan törli ezt az eseményt? Delete button Törlés Do you want to delete all occurrences of this event, or only the selected occurrence? Törlöni szeretné az esemény összes előfordulását, vagy csak a kiválasztott eseményt? Delete All Összes törlése Delete Only This Event Csak ezen esemény törlése Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Törölni szeretné ezt, és az esemény összes jövőbeli előfordulását, vagy csak a kiválasztott eseményt? Delete All Future Events Összes jövőbeli esemény törlése You are changing a repeating event. Ön egy ismétlődő eseményt módosít. Do you want to change only this occurrence of the event, or all occurrences? Csak az esemény ezen előfordulását akarja megváltoztatni, vagy az összes jövőbeni eseményt? All Összes Only This Event Csak ezen esemény Do you want to change only this occurrence of the event, or this and all future occurrences? Csak az esemény ezen előfordulását akarja megváltoztatni, vagy ezt és az összes jövőbeni eseményt? All Future Events Összes jövőbeli esemény You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Szökőhónap lett kiválasztva, ezért a holdnaptár szabályai fognak érvényesülni. OK button OK CScheduleSearchDateItem Y Év M Hónap D Nap CScheduleSearchItem Edit Szerkesztés Delete Törlés All Day Egész nap CScheduleSearchView No search results Nincs keresési eredmény CScheduleView ALL DAY Egész nap CSettingDialog Sunday Vasárnap Monday Hétfő Tuesday Wednesday Thursday Friday Saturday Use System Setting Rendszerbeállítások használata 24-hour clock 24 órás óra formátum 12-hour clock 12 órás óra formátum import ICS file ICS fájl importálása Manual Manuális 15 mins 15 perc 30 mins 30 perc 1 hour 1 óra 24 hours 24 óra Sync Now Szinkronizálás most Last sync Utolsó szinkronizálás Please go to the <a href='/'>Control Center</a> to change system settings Kérjük lépjen a <a href='/'>Vezérlőközpontba</a> a beállítások módosításához CTimeEdit (%1 mins) (%1 perc) (%1 hour) (%1 óra) (%1 hours) (%1 óra) CTitleWidget Y Éves M Havi W Heti D Napi Search events and festivals Események és fesztiválok keresése CWeekWidget Sun V. Mon H. Tue K. Wed Sze. Thu Cs. Fri P. Sat Szo. CWeekWindow Week Heti Y Év CYearScheduleView All Day Egész nap No event Nincs esemény CYearWindow Y Év CalendarWindow Calendar Naptár Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. A Naptár egy eszköz a dátumok megtekintésére, valamint egy intelligens napi tervező az élet minden dolgának ütemezéséhez. Calendarmainwindow Calendar Naptár Manage Kezelés Privacy Policy Adatvédelmi irányelvek Syncing... Szinkronizálás... Sync successful A szinkronizálás sikeres Sync failed, please try later A szinkronizálás sikertelen, kérjük próbálja később CenterWidget All Day Egész nap DAccountDataBase Work Munka Life Magánélet Other Egyéb DAlarmManager Close button Bezárás One day before start Egy nappal kezdés előtt Remind me tomorrow Emlékeztessen holnap Remind me later Emlékeztessen később 15 mins later 15 perc múlva 1 hour later 1 óra múlva 4 hours later 4 óra múlva Tomorrow Holnap Schedule Reminder Ütemezési emlékeztető %1 to %2 %1-től %2-ig Today Ma DragInfoGraphicsView Edit Szerkesztés Delete Törlés New event Új esemény New Event Új esemény JobTypeListView export Exportálás import ICS file ICS fájl importálása You are deleting an event type. Ön töröl egy eseménytípust. All events under this type will be deleted and cannot be recovered. Az összes ilyen típusú esemény törlődik, és nem állítható helyre. Cancel button Mégsem Delete button Törlés QObject Manage calendar Naptár kezelése Event types Esemény típusok Account settings Felhasználói fiók beállítások Account Felhasználói fiók Select items to be synced Válassza ki a szinkronizálni kívánt elemeket Events Események General settings Általános beállítások Sync interval Szinkronizálási időintervallum Calendar account Naptár fiók General Általános First day of week A hét első napja Time Idő Return Today Return Ma Return Today Today Return Today Ma ScheduleTypeEditDlg New event type Új esemény típusa Edit event type Eseménytípus szerkesztése Import ICS file ICS fájl importálása Name: Név: Color: Szín: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> Fájl: Cancel button Mégsem Save button Mentés The name can not only contain whitespaces A név nem tartalmazhat csak szóközöket Enter a name please Kérjük adjon meg egy nevet Shortcut Help Segítség Delete event Esemény törlése Copy Másolás Cut Kivágás Paste Beillesztés Delete Törlés Select all Összes kijelölése SidebarCalendarWidget Y Év M Hónap TimeJumpDialog Go button Ugrás UserloginWidget Sign In button Bejelentkezés Sign Out button Kijelentkezés YearFrame Y Év today Today Today Ma dde-calendar-5.14.13/translations/dde-calendar_id.ts000066400000000000000000001442541473346337000222640ustar00rootroot00000000000000 AccountItem Sync successful Sinkronisasi berhasil Network error Jaringan bermasalah Server exception Kesalahan server Storage full Penyimpanan penuh AccountManager Local account Akun lokal Event types Jenis Event CColorPickerWidget Color Warna Cancel button Batal Save button Simpan CDayMonthView Monday Senin Tuesday Selasa Wednesday Rabu Thursday Kamis Friday Jum'at Saturday Sabtu Sunday Minggu CDayWindow Y T M B D H Lunar Bulan CGraphicsView New Event Peristiwa Baru CMonthScheduleNumItem %1 more 1% lagi CMonthView New event acara baru New Event Acara baru CMonthWindow Y T CMyScheduleView My Event Acara saya OK button OK Delete button Hapus Edit button Sunting CPushButton New event type Jenis event baru CScheduleDlg New Event Acara baru Edit Event Ubah acara End time must be greater than start time Waktu akhir harus lebih lama dari waktu mulai OK button OK Never Tidak pernah At time of event Pada saat acara 15 minutes before 15 menit sebelumnya 30 minutes before 30 menit sebelumnya 1 hour before 1 jam sebelumnya 1 day before 1 hari sebelumnya 2 days before 2 hari sebelumnya 1 week before 1 minggu sebelumnya On start day (9:00 AM) Pada hari mulai (9:00) time(s) waktu Enter a name please Mohon masukkan nama The name can not only contain whitespaces Nama tidak boleh hanya berisi spasi Type: Tipe: Description: Deskripsi: All Day: Sepanjang hari: Starts: Mulai: Ends: Berakhir: Remind Me: Ingatkan Aku: Repeat: Ulangi: End Repeat: Akhir Pengulangan: Calendar account: Akun Kalender: Calendar account Akun Kalender Type Tipe Description Keterangan All Day Semua Hari Time: Waktu: Time Waktu Solar Lunar Bulan Starts Mulai Ends Berakhir Remind Me Ingatkan saya Repeat Ulangi Daily Harian Weekdays Hari kerja Weekly Mingguan Monthly Bulanan Yearly Tahunan End Repeat Akhiri Perulangan After Setelah On Nyala Cancel button Batal Save button Simpan CScheduleOperation All occurrences of a repeating event must have the same all-day status. Semua kemunculan acara berulang harus memiliki status sepanjang hari yang sama. Do you want to change all occurrences? Apakah Anda ingin mengubah semua kejadian? Cancel button Batal Change All Ubah semua You are changing the repeating rule of this event. Anda mengubah aturan pengulangan acara ini. You are deleting an event. Anda sedang menghapus sebuah peristiwa Are you sure you want to delete this event? Anda yakin akan menghapus peristiwa ini? Delete button Hapus Do you want to delete all occurrences of this event, or only the selected occurrence? Apakah Anda ingin menghapus semua kejadian dari peristiwa ini, atau hanya kejadian yang dipilih? Delete All Hapus Semua Delete Only This Event Hapus hanya peristiwa ini Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Apakah Anda ingin menghapus ini dan semua kejadian mendatang dari peristiwa ini, atau hanya kejadian yang dipilih? Delete All Future Events Hapus semua peristiwa yang akan datang You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? All Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y T M B D H CScheduleSearchItem Edit Sunting Delete Hapus All Day Semua Hari CScheduleSearchView No search results Tidak ada hasil pencarian CScheduleView ALL DAY CSettingDialog Sunday Minggu Monday Senin Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual Manual 15 mins 30 mins 1 hour 1 jam 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y T M B W D H Search events and festivals CWeekWidget Sun Min Mon Sen Tue Sel Wed Rab Thu Kam Fri Jum Sat Sab CWeekWindow Week Y T CYearScheduleView All Day Semua Hari No event CYearWindow Y T CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Kalender Manage Privacy Policy Syncing... Menyinkronkan... Sync successful Sinkronisasi berhasil Sync failed, please try later CenterWidget All Day Semua Hari DAccountDataBase Work Kerja Life Kehidupan Other Lainnya DAlarmManager Close button Tutup One day before start Remind me tomorrow Remind me later 15 mins later 1 hour later 4 hours later Tomorrow Besok Schedule Reminder %1 to %2 Today Hari ini DragInfoGraphicsView Edit Sunting Delete Hapus New event acara baru New Event Acara baru JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Batal Delete button Hapus QObject Manage calendar Event types Jenis Event Account settings Account Akun Select items to be synced Events General settings Sync interval Calendar account Akun Kalender General Umum First day of week Time Waktu Return Today Return Hari ini Return Today Today Return Today Hari ini ScheduleTypeEditDlg New event type Jenis event baru Edit event type Import ICS file Name: Nama: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Batal Save button Simpan The name can not only contain whitespaces Nama tidak boleh hanya berisi spasi Enter a name please Mohon masukkan nama Shortcut Help Bantuan Delete event Copy Salin Cut Potong Paste Tempel Delete Hapus Select all Pilih semua SidebarCalendarWidget Y T M B TimeJumpDialog Go button UserloginWidget Sign In button Masuk Sign Out button Keluar YearFrame Y T today Today Today Hari ini dde-calendar-5.14.13/translations/dde-calendar_it.ts000066400000000000000000001470341473346337000223030ustar00rootroot00000000000000 AccountItem Sync successful Sincronizzazione riuscita Network error Errore rete Server exception Eccezione del server Storage full Memoria piena AccountManager Local account Account locale Event types Tipi di evento CColorPickerWidget Color Colore Cancel button Annulla Save button Salva CDayMonthView Monday Lunedì Tuesday Martedì Wednesday Mercoledì Thursday Giovedì Friday Venerdì Saturday Sabato Sunday Domenica CDayWindow Y Y M M D D Lunar Lunare CGraphicsView New Event Nuovo evento CMonthScheduleNumItem %1 more %1 in più CMonthView New event Nuovo evento New Event Nuovo evento CMonthWindow Y Y CMyScheduleView My Event I miei eventi OK button OK Delete button Elimina Edit button Modifica CPushButton New event type Nuovo tipo di evento CScheduleDlg New Event Nuovo evento Edit Event Modifica evento End time must be greater than start time La data di fine deve essere maggiore di quella di inizio OK button OK Never Mai At time of event All'ora dell'evento 15 minutes before 15 minuti prima 30 minutes before 30 minuti prima 1 hour before 1 ora prima 1 day before 1 giorno prima 2 days before 2 giorni prima 1 week before 1 settimana prima On start day (9:00 AM) All'inizio della giornata (9:00 AM) time(s) volta(e) Enter a name please Inserisci un nome The name can not only contain whitespaces Il nome non può contenere solo spazi bianchi Type: Tipo: Description: Descrizione: All Day: Tutto il giorno: Starts: Inizio: Ends: Fine: Remind Me: Promemoria: Repeat: Ripetizione: End Repeat: Fine ripetizione: Calendar account: Account calendario: Calendar account Account calendario Type Tipo Description Descrizione All Day Tutto il giorno Time: Ora: Time Ora Solar Solare Lunar Lunare Starts Inizio Ends Fine Remind Me Promemoria Repeat Ripetizione Daily Giornaliera Weekdays Giorni della settimana Weekly Settimanale Monthly Mensile Yearly Annuale End Repeat Fine ripetizione After Dopo On Acceso Cancel button Annulla Save button Salva CScheduleOperation All occurrences of a repeating event must have the same all-day status. Tutte le occorrenze di una ripetizione devono avere i medesimi parametri. Do you want to change all occurrences? Desideri modificare tutte le occorrenze? Cancel button Annulla Change All Cambia tutte You are changing the repeating rule of this event. Stai cambiando le regole di pianificazione di questo evento. You are deleting an event. Stai eliminando un evento. Are you sure you want to delete this event? Sicuro di voler eliminare questo evento? Delete button Elimina Do you want to delete all occurrences of this event, or only the selected occurrence? Desideri eliminare tutte le occorrenze di questo evento, oppure solo quella selezionata? Delete All Eliminale tutte Delete Only This Event Elimina solo questo evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Desideri eliminare questa e tutte le occorrenze successive di questo evento, oppure solo quella selezionata? Delete All Future Events Tutte le occorrenze future You are changing a repeating event. Stai modificando un evento ripetitivo Do you want to change only this occurrence of the event, or all occurrences? Desideri modificare solo questa occorrenza dell'evento, o tutte quelle ad esso associate? All Tutti Only This Event Solo questo evento Do you want to change only this occurrence of the event, or this and all future occurrences? Desideri modificare solo il singolo evento,oppure tutte le future ripetizioni? All Future Events Tutte le future ripetizioni You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Hai selezionato un mese bisestile e ti verrà ricordato secondo le regole del calendario lunare. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Modifica Delete Elimina All Day Tutto il giorno CScheduleSearchView No search results Nessun risultato disponibile CScheduleView ALL DAY Tutto il giorno CSettingDialog Sunday Domenica Monday Lunedì Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock Orologio 24 ore 12-hour clock Orologio 12 ore import ICS file Importa file ICS Manual Manuale 15 mins 15 minuti 30 mins 30 minuti 1 hour 1 ora 24 hours 24 ore Sync Now Sincronizza ora Last sync Ultima sincronizzazione Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 ora) (%1 hours) (%1 ore) CTitleWidget Y A M M W S D G Search events and festivals Cerca eventi CWeekWidget Sun Dom Mon Lun Tue Mar Wed Mer Thu Gio Fri Ven Sat Sab CWeekWindow Week Settimana Y Y CYearScheduleView All Day Tutto il giorno No event Nessun evento CYearWindow Y Y CalendarWindow Calendar Calendario Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendario è uno strumento per visualizzare il calendario ma anche per pianificare in modo intelligente tutti gli eventi della propria vita quotidiana. Localizzazione italiana a cura di Massimo A. Carofano. Calendarmainwindow Calendar Calendario Manage Gestisci Privacy Policy Privacy Policy Syncing... Sincronizzazione... Sync successful Sincronizzazione riuscita Sync failed, please try later Sincronizzazione fallita, riprova più tardi CenterWidget All Day Tutto il giorno DAccountDataBase Work Lavoro Life Personale Other Altro DAlarmManager Close button Chiudi One day before start Un giorno prima di iniziare Remind me tomorrow Ricordamelo domani Remind me later Ricordamelo piu tardi 15 mins later Dopo 15 minuti 1 hour later Dopo 1 ora 4 hours later Dopo 4 ore Tomorrow Domani Schedule Reminder Pianifica promemoria %1 to %2 %1 a %2 Today Oggi DragInfoGraphicsView Edit Modifica Delete Elimina New event Nuovo evento New Event Nuovo evento JobTypeListView export esporta import ICS file Importa file ICS You are deleting an event type. Stai eliminando un tipo di evento. All events under this type will be deleted and cannot be recovered. Tutti gli eventi di questo tipo verranno eliminati e non potranno essere recuperati. Cancel button Annulla Delete button Elimina QObject Manage calendar Gestisci calendario Event types Tipi di evento Account settings Impostazioni account Account Account Select items to be synced Seleziona elementi da sincronizzare Events Eventi General settings Impostazioni generali Sync interval Intervallo di sincronizzazione Calendar account Account calendario General Generale First day of week Primo giorno della settimana Time Ora Return Today Return Oggi Return Today Today Return Today Oggi ScheduleTypeEditDlg New event type Nuovo tipo di evento Edit event type Modifica tipo di evento Import ICS file Importa file ICS Name: Nome: Color: Colore: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: File <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> : Cancel button Annulla Save button Salva The name can not only contain whitespaces Il nome non può contenere solo spazi bianchi Enter a name please Inserisci un nome Shortcut Help Aiuto Delete event Elimina evento Copy Copia Cut Taglia Paste Incolla Delete Elimina Select all Seleziona tutto SidebarCalendarWidget Y A M M TimeJumpDialog Go button Vai UserloginWidget Sign In button Login Sign Out button Logout YearFrame Y Y today Today Today Oggi dde-calendar-5.14.13/translations/dde-calendar_ja.ts000066400000000000000000001444011473346337000222540ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button キャンセル Save button 保存 CDayMonthView Monday 月曜日 Tuesday 火曜日 Wednesday 水曜日 Thursday 木曜日 Friday 金曜日 Saturday 土曜日 Sunday 日曜日 CDayWindow Y M D Lunar CGraphicsView New Event 新規イベント CMonthScheduleNumItem %1 more CMonthView New event 新規イベント New Event 新規イベント CMonthWindow Y CMyScheduleView My Event イベント OK button OK Delete button 削除 Edit button 編集 CPushButton New event type CScheduleDlg New Event 新しイベント Edit Event イベントを編集 End time must be greater than start time 開始時間より前の時間を設定して下さい OK button OK Never しない At time of event イベント時 15 minutes before 15分前 30 minutes before 30分前 1 hour before 1時間前 1 day before 一日前 2 days before 2日前 1 week before 1週間前 On start day (9:00 AM) 開始日 (9:00) に time(s) 回後 Enter a name please The name can not only contain whitespaces Type: 種類: Description: 説明: All Day: 終日: Starts: 開始: Ends: 終了: Remind Me: 通知: Repeat: 繰り返し: End Repeat: 繰り返し終了: Calendar account: Calendar account Type 種類 Description 説明 All Day 終日 Time: Time タイム Solar Lunar Starts 開始 Ends 終了 Remind Me 通知 Repeat 繰り返す Daily 毎日 Weekdays 平日 Weekly 毎週 Monthly 毎月 Yearly 毎年 End Repeat 繰り返し終了 After On オン Cancel button キャンセル Save button 保存 CScheduleOperation All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Cancel button キャンセル Change All すべて変更 You are changing the repeating rule of this event. このイベントの繰り返しルールを変更しています。 You are deleting an event. イベントを削除しています。 Are you sure you want to delete this event? イベントを削除してもよろしいですか? Delete button 削除 Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All 全て削除 Delete Only This Event このイベントのみ削除 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events 今後のイベントをすべて削除 You are changing a repeating event. 繰り返しイベントを変更しています。 Do you want to change only this occurrence of the event, or all occurrences? All すべて Only This Event このイベントのみ Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events 今後のすべてのイベント You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y M D CScheduleSearchItem Edit 編集 Delete 削除 All Day 終日 CScheduleSearchView No search results 検索結果なし CScheduleView ALL DAY 終日 CSettingDialog Sunday 日曜日 Monday 月曜日 Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual 手動 15 mins 30 mins 1 hour 1時間 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y M W D Search events and festivals CWeekWidget Sun 日曜日 Mon Tue Wed 水曜日 Thu Fri Sat 土曜日 CWeekWindow Week Y CYearScheduleView All Day 終日 No event イベントなし CYearWindow Y CalendarWindow Calendar カレンダー Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. カレンダーは、日付を表示するツールであり、また生活のあらゆることをスケジューリングするスマートデイリープランナーです。 Calendarmainwindow Calendar カレンダー Manage Privacy Policy プライバシーポリシー Syncing... 同期しています… Sync successful Sync failed, please try later CenterWidget All Day 終日 DAccountDataBase Work 仕事 Life 生活 Other その他 DAlarmManager Close button 閉じる One day before start Remind me tomorrow 明日通知 Remind me later 後で通知 15 mins later 1 hour later 4 hours later Tomorrow 明日 Schedule Reminder スケジュール通知 %1 to %2 Today 今日 DragInfoGraphicsView Edit 編集 Delete 削除 New event 新規イベント New Event 新規イベント JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button キャンセル Delete button 削除 QObject Manage calendar Event types Account settings Account アカウント Select items to be synced Events General settings Sync interval Calendar account General 一般 First day of week Time タイム Return Today Return 今日 Return Today Today Return Today 今日 ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button キャンセル Save button 保存 The name can not only contain whitespaces Enter a name please Shortcut Help ヘルプ Delete event イベントを削除 Copy コピー Cut 切り取り Paste 貼り付け Delete 削除 Select all すべて選択 SidebarCalendarWidget Y M TimeJumpDialog Go button Go UserloginWidget Sign In button サインイン Sign Out button サインアウト YearFrame Y today Today Today 今日 dde-calendar-5.14.13/translations/dde-calendar_ka.ts000066400000000000000000001521201473346337000222520ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button გაუქმება Save button შენახვა CDayMonthView Monday ორშაბათი Tuesday სამშაბათი Wednesday ოთხშაბათი Thursday ხუთშაბათი Friday პარასკევი Saturday შაბათი Sunday კვირა CDayWindow Y M D Lunar CGraphicsView New Event ახალი ივენთი CMonthScheduleNumItem %1 more %1 მეტი CMonthView New event ახალი ივენთი New Event ახალი ივენთი CMonthWindow Y CMyScheduleView My Event ჩემი ივენთები OK button OK Delete button წაშლა Edit button რედაქტირება CPushButton New event type CScheduleDlg New Event ჩემი ივენთები Edit Event ივენთის რედაქტირება End time must be greater than start time დასრულების დრო უნდა აღემატებოდეს დაწყების დროს OK button OK Never არასდროს At time of event ივენთის სრული დრო 15 minutes before 15 წუთით ადრე 30 minutes before 30 წუთით ადრე 1 hour before 1 საათით ადრე 1 day before 1 დღით ადრე 2 days before 2 დღით ადრე 1 week before 1 კვირით ადრე On start day (9:00 AM) დრის დასაწყისში (9:00 AM) time(s) ჯერ Enter a name please The name can not only contain whitespaces Type: ტიპი: Description: აღწერა: All Day: მთელი დღე: Starts: დასაწყისი: Ends: დასასრული: Remind Me: შემახსენე: Repeat: გამეორება: End Repeat: გამეორების დასასრული: Calendar account: Calendar account Type ტიპი Description აღწერა All Day ყველა დღე Time: Time Solar Lunar Starts დასაწყისი Ends დასასრული Remind Me შემახსენე Repeat განმეორება Daily დღიური Weekdays ვიქენდი Weekly კვირეული Monthly თვიური Yearly წლიური End Repeat განმეორების დასასრული After შემდეგ On ზე Cancel button გაუქმება Save button შენახვა CScheduleOperation All occurrences of a repeating event must have the same all-day status. ყველა განმეორებად მოვლენებს უნდა ჰქონდეს ყველა დღის სტატუს Do you want to change all occurrences? გსურთი მოვლენების შეცვლა? Cancel button გაუქმება Change All ყველას შეცვლა You are changing the repeating rule of this event. თქვენ ცვლით განმეორების რულებს აღნიშნული ივენთისთვის You are deleting an event. თქვენ შლით ივენთს Are you sure you want to delete this event? დაწრმუნებული ხართ, რომ გსურთ ამ ივენთის წაშლა? Delete button წაშლა Do you want to delete all occurrences of this event, or only the selected occurrence? გსრუთ აღნიშნული მოვლენების ივენთიდან ამოშლა? Delete All ყველას წაშლა Delete Only This Event მხოლოდ ამ ივენთის წაშლა Do you want to delete this and all future occurrences of this event, or only the selected occurrence? გსურთ წაშალოთ ყველა შემდგომი მოვლენა, თუ მხოლოდ არჩეული მოვლენები? Delete All Future Events ყველა მომდევნო მოვლენის წაშლა You are changing a repeating event. თქვენ ცვლით განმეორებად ივენთს Do you want to change only this occurrence of the event, or all occurrences? გსრუთ ყველა მოვლენის შეცვლა, თუ მხოლოდ მონიშნულის? All ყველა Only This Event მხოლოდ ეს ივენთი Do you want to change only this occurrence of the event, or this and all future occurrences? მხოლოდ ამ ერთი მოვლენის შეცვლა, თუ ყველა მომდევნო მოვლენის შეცვლა? All Future Events ყველა მომდევნო ივენთი You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y M D CScheduleSearchItem Edit რედაქტირება Delete წაშლა All Day ყველა დღე CScheduleSearchView No search results არ არის ძებნის რეზულტატი CScheduleView ALL DAY ყველა დღე CSettingDialog Sunday კვირა Monday ორშაბათი Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual მექნიკურად 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y M W D Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week კვირა Y CYearScheduleView All Day ყველა დღე No event არ არის ივენთი CYearWindow Y CalendarWindow Calendar კალენდარი Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. კალენდარი არის ხელსაწყო თარიღების სანახავად და გრაფიკის დასაგეგმად Calendarmainwindow Calendar კალენდარი Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day ყველა დღე DAccountDataBase Work სამსახური Life ცხოვრება Other სხვა DAlarmManager Close button დახურვა One day before start დაწყებამდე 1 დღით ადრე Remind me tomorrow შემახსენე ხვალ Remind me later შემახსენე მოგვიანებით 15 mins later 1 hour later 4 hours later Tomorrow ხვალ Schedule Reminder შეხსენების დაგეგმვა %1 to %2 %1 დან %2 Today დღეს DragInfoGraphicsView Edit რედაქტირება Delete წაშლა New event ახალი ივენთი New Event ახალი ივენთი JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button გაუქმება Delete button წაშლა QObject Manage calendar Event types Account settings Account Select items to be synced Events General settings Sync interval Calendar account General ძირითადი First day of week Time Return Today Return დღეს Return Today Today Return Today დღეს ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button გაუქმება Save button შენახვა The name can not only contain whitespaces Enter a name please Shortcut Help დახმარება Delete event ივენთის წაშლა Copy კოპირება Cut ამოჭრა Paste ჩასმა Delete წაშლა Select all ყველას მონიშნვა SidebarCalendarWidget Y M TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y today Today Today დღეს dde-calendar-5.14.13/translations/dde-calendar_kab.ts000066400000000000000000001447511473346337000224270ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button Sefsex Save button Sekles CDayMonthView Monday Arim Tuesday Aram Wednesday Ahad Thursday Amhad Friday Sem Saturday Sed Sunday Acer CDayWindow Y Aseggas M Ayyur D Ass Lunar CGraphicsView New Event Tadyant tamaynut CMonthScheduleNumItem %1 more Ugar n 1% CMonthView New event Tadyant tamaynut New Event Tadyant tamaynut CMonthWindow Y Aseggas CMyScheduleView My Event Tadyant-iw OK button IH Delete button Kkes Edit button Ẓreg CPushButton New event type CScheduleDlg New Event Tadyant tamaynut Edit Event Ẓreg tadyant End time must be greater than start time Akud n taggara yezmer d netta ara igerrzen ɣef wakud n tazwara OK button IH Never Werǧin At time of event Deg wakud n tedyant 15 minutes before 15 tesdatin send 30 minutes before 30 tesdatin send 1 hour before 1 usrag send 1 day before 1 wass send 2 days before 2 wussan send 1 week before 1 dduṛt send On start day (9:00 AM) Deg tazwara n wass (9:00 SRG) time(s) Akud (akuden) Enter a name please The name can not only contain whitespaces Type: Anaw: Description: Aglam: All Day: Yal ass: Starts: Yebda Ends: Yekfa Remind Me: Smekti-yi-d: Repeat: Ales End Repeat: Taggara n wallus: Calendar account: Calendar account Type Anaw Description Aglam All Day Meṛṛa ass Time: Time Solar Lunar Starts Yebda Ends Yekfa Remind Me Smekti-yi-d Repeat Ales Daily S wass Weekdays Ussan n yimalas Weekly S yimalas Monthly S wayyur Yearly S useggas End Repeat Taggara n wallus After Seld On Ɣef Cancel button Sefsex Save button Sekles CScheduleOperation All occurrences of a repeating event must have the same all-day status. Meṛṛa timeḍriwin n tedyant i d-yettuɣalen ilaq ad sɛunt yiwen waddad i wass kamel. Do you want to change all occurrences? Tebɣiḍ ad tesnefleḍ meṛṛa timeḍriwin? Cancel button Sefsex Change All Senfel kullec You are changing the repeating rule of this event. Tbeddleḍ alugen i d-yettuɣalen n tedyant-a. You are deleting an event. Tekkseḍ yiwet tedyant. Are you sure you want to delete this event? D tidet tebɣiḍ ad tekkseḍ tadyant-a? Delete button Kkes Do you want to delete all occurrences of this event, or only the selected occurrence? Tebɣiḍ ad tekkseḍ meṛṛa timeḍriwin n tedyant-a neɣ tid kan i d-yettwafernen? Delete All Kkes kullec Delete Only This Event Kkes kan tadyant-a Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Tebɣiḍ ad tekkseḍ timeḍriwt-a d tid meṛṛa i d-iteddun, neɣ d tid kan i d-yettufernen? Delete All Future Events Kkes meṛṛa tidyanin i d-iteddun You are changing a repeating event. Tbeddleḍ tadyant i d-yettuɣalen. Do you want to change only this occurrence of the event, or all occurrences? Tebɣiḍ ad tbeddleḍ timeḍriwt-agi kan n tedyant, neɣ meṛṛa timeḍriwen? All Meṛṛa Only This Event Tadyant-agi kan Do you want to change only this occurrence of the event, or this and all future occurrences? Tebɣiḍ ad tbeddleḍ timeḍriwt-a n tedyant, neɣ tagi d meṛṛa timeḍriwen i d-iteddun? All Future Events Tidyanin akk i d-iteddun You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button IH CScheduleSearchDateItem Y Aseggas M Ayyur D Ass CScheduleSearchItem Edit Ẓreg Delete Kkes All Day Meṛṛa ass CScheduleSearchView No search results Ulac igmaḍ n unadi CScheduleView ALL DAY YAL ASS CSettingDialog Sunday Acer Monday Arim Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual S ufus 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Aseggas M Ayyur W Imalas D Ass Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Dduṛt Y Aseggas CYearScheduleView All Day Meṛṛa ass No event Ulac tadyant CYearWindow Y Aseggas CalendarWindow Calendar Awitay Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Awitay d afecku i uskan n wazemz akked daɣen d aɣawas n yal ass i usɣiwes n wayen akk ara tgeḍ deg tudert. Calendarmainwindow Calendar Awitay Manage Privacy Policy Tasertit n tbaḍnit Syncing... Amtawi... Sync successful Sync failed, please try later CenterWidget All Day Yal ass DAccountDataBase Work Amahil Life Tudert Other Wayeḍ DAlarmManager Close button Mdel One day before start Yiwen wass send beddu Remind me tomorrow Smekti-yi-d azekka Remind me later Smekti-yi-d ticki 15 mins later 1 hour later 4 hours later Tomorrow Azekka Schedule Reminder Asmekti s usɣiwes %1 to %2 %1 ɣer %2 Today Ass-a DragInfoGraphicsView Edit Ẓreg Delete Kkes New event Tadyant tamaynut New Event Tadyant tamaynut JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Sefsex Delete button Kkes QObject Manage calendar Event types Account settings Account Select items to be synced Events General settings Sync interval Calendar account General Amatu First day of week Time Return Today Return Ass-a Return Today Today Return Today Ass-a ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Isem: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Sefsex Save button Sekles The name can not only contain whitespaces Enter a name please Shortcut Help Tallalt Delete event Kkes tadyant Copy Nɣel Cut Gzem Paste Senteḍ Delete Kkes Select all Fren kullec SidebarCalendarWidget Y Aseggas M Ayyur TimeJumpDialog Go button UserloginWidget Sign In button Kcem Sign Out button Ffeɣ YearFrame Y Aseggas today Today Today Ass-a dde-calendar-5.14.13/translations/dde-calendar_km_KH.ts000066400000000000000000001530671473346337000226630ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button បោះបង់ Save button រក្សាទុក CDayMonthView Monday ថ្ងៃចន្ទ Tuesday ថ្ងៃអង្គារ Wednesday ថ្ងៃពុធ Thursday ថ្ងៃព្រហស្បតិ៍ Friday ថ្ងៃសុក្រ Saturday ថ្ងៃសៅរ៍ Sunday ថ្ងៃអាទិត្យ CDayWindow Y ឆ្នាំ M ខែ D ថ្ងៃ Lunar CGraphicsView New Event ព្រឹត្តិការណ៍ថ្មី CMonthScheduleNumItem %1 more CMonthView New event ព្រឹត្តិការណ៍ថ្មី New Event ព្រឹត្តិការណ៍ថ្មី CMonthWindow Y ឆ្នាំ CMyScheduleView My Event ព្រឹត្តិការណ៍របស់ខ្ញុំ OK button យល់ព្រម Delete button លុប Edit button កែសម្រួល CPushButton New event type CScheduleDlg New Event ព្រឹត្តិការណ៍ថ្មី Edit Event កែព្រឹត្តិការណ៍ End time must be greater than start time OK button យល់ព្រម Never មិនដែល At time of event នៅពេលព្រឹត្តិការណ៍ 15 minutes before 15 នាទីមុន 30 minutes before 30 នាទីមុន 1 hour before 1 ម៉ោងមុន 1 day before 1 ថ្ងៃមុន 2 days before 2 ថ្ងៃមុន 1 week before 1 សប្តាហ៍មុន On start day (9:00 AM) នៅថ្ងៃចាប់ផ្តើម (9:00 ព្រឹក) time(s) ដង() Enter a name please The name can not only contain whitespaces Type: ប្រភេទ: Description: ការពិពណ៌នាសង្ខេប: All Day: ពេញមួយថ្ងៃ៖ Starts: ចាប់ផ្តើម៖ Ends: បញ្ចប់៖ Remind Me: រំឭក​ខ្ញុំ: Repeat: ធ្វើម្តងទៀត៖ End Repeat: បញ្ចប់ម្តងទៀត៖ Calendar account: Calendar account Type Description All Day ពេញមួយថ្ងៃ Time: Time Solar Lunar Starts Ends Remind Me Repeat Daily រាល់ថ្ងៃ Weekdays ថ្ងៃធ្វើការ Weekly ប្រចាំសប្តាហ៍ Monthly ប្រចាំខែ Yearly ប្រចាំឆ្នាំ End Repeat After បន្ទាប់ពី On បើក Cancel button បោះបង់ Save button រក្សាទុក CScheduleOperation All occurrences of a repeating event must have the same all-day status. រាល់ការកើតឡើងនៃព្រឹត្តិការណ៍ដដែលៗត្រូវតែមានស្ថានភាពពេញមួយថ្ងៃ។ Do you want to change all occurrences? តើអ្នកចង់ផ្លាស់ប្តូរការកើតឡើងទាំងអស់ទេ? Cancel button បោះបង់ Change All ផ្លាស់ប្តូរទាំងអស់ You are changing the repeating rule of this event. អ្នកកំពុងផ្លាស់ប្តូរវិធានដដែលៗនៃព្រឹត្តិការណ៍នេះ។ You are deleting an event. អ្នកកំពុងលុបព្រឹត្តិការណ៍មួយ។ Are you sure you want to delete this event? តើអ្នកប្រាកដជាចង់លុបព្រឹត្តិការណ៍នេះឬ? Delete button លុប Do you want to delete all occurrences of this event, or only the selected occurrence? តើអ្នកចង់លុបរាល់ការកើតឡើងនៃព្រឹត្តិការណ៍នេះឬតែការកើតឡើងដែលបានជ្រើសរើសទេ? Delete All លុបទាំងអស់ Delete Only This Event លុបតែព្រឹត្តិការណ៍នេះ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? តើអ្នកចង់លុបវានិងការកើតឡើងនាពេលអនាគតនៃព្រឹត្តិការណ៍នេះឬមានតែការកើតឡើងដែលបានជ្រើសរើសទេ? Delete All Future Events លុបព្រឹត្តិការណ៍អនាគតទាំងអស់ You are changing a repeating event. អ្នកកំពុងផ្លាស់ប្តូរព្រឹត្តិការណ៍ដដែលៗ។ Do you want to change only this occurrence of the event, or all occurrences? តើអ្នកចង់ផ្លាស់ប្តូរតែការកើតឡើងនៃព្រឹត្តិការណ៍នេះឬការកើតឡើងទាំងអស់ទេ? All ទាំងអស់ Only This Event តែព្រឹត្តិការណ៍នេះទេ Do you want to change only this occurrence of the event, or this and all future occurrences? តើអ្នកចង់ផ្លាស់ប្តូរតែការកើតឡើងនៃព្រឹត្តិការណ៍នេះឬព្រឹត្តិការណ៍នេះនិងការកើតឡើងនាពេលអនាគតទេ? All Future Events ព្រឹត្តិការណ៍អនាគតទាំងអស់ You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button យល់ព្រម CScheduleSearchDateItem Y ឆ្នាំ M ខែ D ថ្ងៃ CScheduleSearchItem Edit កែសម្រួល Delete លុប All Day ពេញមួយថ្ងៃ CScheduleSearchView No search results គ្មានលទ្ធផលស្វែងរកទេ CScheduleView ALL DAY ពេញមួយថ្ងៃ CSettingDialog Sunday ថ្ងៃអាទិត្យ Monday ថ្ងៃចន្ទ Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y ឆ្នាំ M ខែ W សប្ដាហ៍ D ថ្ងៃ Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week សប្ដាហ៍ Y ឆ្នាំ CYearScheduleView All Day ពេញមួយថ្ងៃ No event គ្មានព្រឹត្តិការណ៍ CYearWindow Y ឆ្នាំ CalendarWindow Calendar ប្រតិទិន Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ប្រតិទិនគឺជាឧបករណ៍សម្រាប់មើលកាលបរិច្ឆេទហើយក៏ជាអ្នករៀបចំផែនការប្រចាំថ្ងៃដ៏ឆ្លាតវៃផងដែរដើម្បីរៀបចំកាលវិភាគទាំងអស់ក្នុងជីវិត។ Calendarmainwindow Calendar ប្រតិទិន Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day ពេញមួយថ្ងៃ DAccountDataBase Work ធ្វើការ Life ជីវិត Other ផ្សេងទៀត DAlarmManager Close button បិទ One day before start Remind me tomorrow Remind me later 15 mins later 1 hour later 4 hours later Tomorrow Schedule Reminder %1 to %2 Today ថ្ងៃនេះ DragInfoGraphicsView Edit កែសម្រួល Delete លុប New event ព្រឹត្តិការណ៍ថ្មី New Event ព្រឹត្តិការណ៍ថ្មី JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button បោះបង់ Delete button លុប QObject Manage calendar Event types Account settings Account Select items to be synced Events General settings Sync interval Calendar account General First day of week Time Return Today Return ថ្ងៃនេះ Return Today Today Return Today ថ្ងៃនេះ ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button បោះបង់ Save button រក្សាទុក The name can not only contain whitespaces Enter a name please Shortcut Help ជំនួយ Delete event លុបព្រឹត្តិការណ៍ Copy ចម្លង Cut កាត់ Paste បិទភ្ជាប់ Delete លុប Select all ជ្រើស​យក​ទាំងអស់ SidebarCalendarWidget Y ឆ្នាំ M ខែ TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y ឆ្នាំ today Today Today ថ្ងៃនេះ dde-calendar-5.14.13/translations/dde-calendar_ko.ts000066400000000000000000001453041473346337000222760ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color 색상 Cancel button 취소 Save button 저장 CDayMonthView Monday 월요일 Tuesday 화요일 Wednesday 수요일 Thursday 목요일 Friday 금요일 Saturday 토요일 Sunday 일요일 CDayWindow Y M D Lunar CGraphicsView New Event 새 이벤트 CMonthScheduleNumItem %1 more %1 더 CMonthView New event 새 이벤트 New Event 새 이벤트 CMonthWindow Y CMyScheduleView My Event 나의 이벤트 OK button 확인 Delete button 삭제 Edit button 편집 CPushButton New event type CScheduleDlg New Event 새 이벤트 Edit Event 이벤트 편집 End time must be greater than start time 종료 시간은 시작 시간보다 커야 합니다. OK button 확인 Never 없음 At time of event 이벤트 시 15 minutes before 15분 전 30 minutes before 30분 전 1 hour before 1시간 전 1 day before 1일 전 2 days before 2일 전 1 week before 1주일 전 On start day (9:00 AM) 시작일 (오전 9:00) time(s) 시간 Enter a name please The name can not only contain whitespaces Type: 종류: Description: 설명: All Day: 하루 종일: Starts: 시작: Ends: 종료 Remind Me: 알림 메시지: Repeat: 반복: End Repeat: 종료 반복: Calendar account: Calendar account Type 타입 Description 설명 All Day 하루 종일 Time: Time 시간 Solar Lunar Starts 시작 Ends 종료 Remind Me 알림 Repeat 다시 Daily 매일 Weekdays 요일 Weekly 매주 Monthly 매달 Yearly 매년 End Repeat 반복 종료 After 이후 On 진행 Cancel button 취소 Save button 저장 CScheduleOperation All occurrences of a repeating event must have the same all-day status. 반복 이벤트의 모든 발생은 하루 종일 동일한 상태를 가져야 합니다. Do you want to change all occurrences? 모든 항목을 변경하시겠습니까? Cancel button 취소 Change All 모두 변경 You are changing the repeating rule of this event. 이 이벤트의 반복 규칙을 변경하고 있습니다. You are deleting an event. 이벤트를 삭제하는 중. Are you sure you want to delete this event? 이 이벤트를 삭제하시겠습니까? Delete button 삭제 Do you want to delete all occurrences of this event, or only the selected occurrence? 이 이벤트의 모든 발생 항목을 삭제하시겠습니까, 아니면 선택한 발생 항목만 삭제하시겠습니까? Delete All 모두 삭제 Delete Only This Event 이 이벤트만 삭제 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? 이 이벤트와 이 이벤트의 모든 향후 발생 항목을 삭제하시겠습니까? 아니면 선택한 발생 항목만 삭제하시겠습니까? Delete All Future Events 모든 향후 이벤트 삭제 You are changing a repeating event. 반복 이벤트를 변경하는 중입니다. Do you want to change only this occurrence of the event, or all occurrences? 이벤트의 이 발생만 변경하시겠습니까, 아니면 모든 발생을 변경하시겠습니까? All 모두 Only This Event 이 이벤트만 Do you want to change only this occurrence of the event, or this and all future occurrences? 이벤트의 이 발생만 변경하시겠습니까, 아니면 이 발생과 향후 모든 발생만 변경하시겠습니까? All Future Events 모든 향후 이벤트 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button 확인 CScheduleSearchDateItem Y M D CScheduleSearchItem Edit 편집 Delete 삭제 All Day 하루 종일 CScheduleSearchView No search results 검색결과가 없습니다. CScheduleView ALL DAY 하루 종일 CSettingDialog Sunday 일요일 Monday 월요일 Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual 수동 15 mins 30 mins 1 hour 1 시간 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y M W D Search events and festivals CWeekWidget Sun 일요일 Mon 월요일 Tue Wed 수요일 Thu Fri 금요일 Sat 토요일 CWeekWindow Week 일주일 Y CYearScheduleView All Day 하루 종일 No event 이벤트 없음 CYearWindow Y CalendarWindow Calendar 달력 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 캘린더는 날짜를 볼 수있는 도구이며, 일상의 모든 것을 예약 할 수있는 현명한 일일 플래너입니다 Calendarmainwindow Calendar 달력 Manage Privacy Policy 개인정보 보호정책 Syncing... 동기화중... Sync successful Sync failed, please try later CenterWidget All Day 하루 종일 DAccountDataBase Work 작업 Life 생활 Other 기타 DAlarmManager Close button 닫기 One day before start 시작 하루 전 Remind me tomorrow 내일 알림 Remind me later 나중에 알림 15 mins later 1 hour later 4 hours later Tomorrow 내일 Schedule Reminder 일정 알림 %1 to %2 Today 오늘 DragInfoGraphicsView Edit 편집 Delete 삭제 New event 새 이벤트 New Event 새 이벤트 JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button 취소 Delete button 삭제 QObject Manage calendar Event types Account settings Account 계정 Select items to be synced Events General settings Sync interval Calendar account General 일반 First day of week Time 시간 Return Today Return 오늘 Return Today Today Return Today 오늘 ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: 이름: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button 취소 Save button 저장 The name can not only contain whitespaces Enter a name please Shortcut Help 도움말 Delete event 이벤트 삭제 Copy 복사 Cut 잘라내기 Paste 붙여넣기 Delete 삭제 Select all 전체 선택 SidebarCalendarWidget Y M TimeJumpDialog Go button Go UserloginWidget Sign In button 로그인 Sign Out button 로그아웃 YearFrame Y today Today Today 오늘 dde-calendar-5.14.13/translations/dde-calendar_lt.ts000066400000000000000000001433331473346337000223040ustar00rootroot00000000000000 AccountItem Sync successful Network error Tinklo klaida Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Spalva Cancel button Atsisakyti Save button Įrašyti CDayMonthView Monday Pirmadienis Tuesday Antradienis Wednesday Trečiadienis Thursday Ketvirtadienis Friday Penktadienis Saturday Šeštadienis Sunday Sekmadienis CDayWindow Y M M m D d Lunar CGraphicsView New Event Naujas įvykis CMonthScheduleNumItem %1 more CMonthView New event Naujas įvykis New Event Naujas įvykis CMonthWindow Y M CMyScheduleView My Event OK button Gerai Delete button Ištrinti Edit button Redaguoti CPushButton New event type CScheduleDlg New Event Naujas įvykis Edit Event End time must be greater than start time OK button Gerai Never Niekada At time of event 15 minutes before 30 minutes before 1 hour before 1 day before 2 days before 1 week before On start day (9:00 AM) time(s) Enter a name please The name can not only contain whitespaces Type: Tipas: Description: Aprašas: All Day: Starts: Ends: Remind Me: Repeat: End Repeat: Calendar account: Kalendoriaus paskyra: Calendar account Kalendoriaus paskyra Type Tipas Description Aprašas All Day Time: Time Laikas Solar Lunar Starts Ends Remind Me Repeat Pakartokite Daily Weekdays Weekly Monthly Yearly End Repeat After On Įjungta Cancel button Atsisakyti Save button Įrašyti CScheduleOperation All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Cancel button Atsisakyti Change All You are changing the repeating rule of this event. You are deleting an event. Are you sure you want to delete this event? Ar tikrai norite ištrinti šį įvykį? Delete button Ištrinti Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? All Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button Gerai CScheduleSearchDateItem Y M M m D d CScheduleSearchItem Edit Redaguoti Delete Ištrinti All Day CScheduleSearchView No search results Paieškos rezultatų nėra CScheduleView ALL DAY CSettingDialog Sunday Sekmadienis Monday Pirmadienis Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual Rankinis 15 mins 15 minučių 30 mins 30 minučių 1 hour 1 valanda 24 hours 24 valandos Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y M M m W D d Search events and festivals CWeekWidget Sun Sek Mon Pir Tue Ant Wed Tre Thu Ket Fri Pen Sat Šeš CWeekWindow Week Savaitė Y M CYearScheduleView All Day No event CYearWindow Y M CalendarWindow Calendar Kalendorius Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Kalendorius Manage Privacy Policy Syncing... Sinchronizuojama... Sync successful Sync failed, please try later CenterWidget All Day DAccountDataBase Work Darbas Life Gyvenimas Other Kita DAlarmManager Close button Užverti One day before start Vieną dieną prieš įvykį Remind me tomorrow Priminti rytoj Remind me later Priminti vėliau 15 mins later 1 hour later 4 hours later Tomorrow Rytojus Schedule Reminder Planuoti priminimą %1 to %2 %1 iki %2 Today Šiandien DragInfoGraphicsView Edit Redaguoti Delete Ištrinti New event Naujas įvykis New Event Naujas įvykis JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Atsisakyti Delete button Ištrinti QObject Manage calendar Tvarkyti kalendorių Event types Account settings Paskyros nustatymai Account Paskyra Select items to be synced Events General settings Sync interval Calendar account General Bendra First day of week Time Laikas Return Today Return Šiandien Return Today Today Return Today Šiandien ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Pavadinimas: Color: Spalva: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Atsisakyti Save button Įrašyti The name can not only contain whitespaces Enter a name please Shortcut Help Žinynas Delete event Ištrinti įvykį Copy Kopijuoti Cut Iškirpti Paste Įdėti Delete Ištrinti Select all Žymėti viską SidebarCalendarWidget Y M M m TimeJumpDialog Go button UserloginWidget Sign In button Prisijungti Sign Out button Atsijungti YearFrame Y M today Today Today Šiandien dde-calendar-5.14.13/translations/dde-calendar_lv.ts000066400000000000000000001445071473346337000223120ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button Atcelt Save button Saglabāt CDayMonthView Monday Pirmdiena Tuesday Otrdiena Wednesday Trešdiena Thursday Ceturtdiena Friday Piektdiena Saturday Sestdiena Sunday Svētdiena CDayWindow Y G M M D D Lunar CGraphicsView New Event Jauns notikums CMonthScheduleNumItem %1 more %1 vairāk CMonthView New event Jauns notikums New Event Jauns notikums CMonthWindow Y G CMyScheduleView My Event Mans notikums OK button Labi Delete button Dzēst Edit button Rediģēt CPushButton New event type CScheduleDlg New Event Jauns notikums Edit Event Rediģēt notikumu End time must be greater than start time Beigu laikam ir jābūt vēlākam kā sākuma laikam OK button Labi Never Nekad At time of event Notikuma laikā 15 minutes before 15 minūtes pirms 30 minutes before 30 minūtes pirms 1 hour before 1 Stundu pirms 1 day before 1 Dienu pirms 2 days before 2 Dienas pirms 1 week before 1 Nedēļu pirms On start day (9:00 AM) Dienas sākumā (9:00) time(s) reize(s) Enter a name please The name can not only contain whitespaces Type: Veids: Description: Apraksts: All Day: Visu dienu: Starts: Sākas: Ends: Beidzas: Remind Me: Atgādināt: Repeat: Atkārtot: End Repeat: Beigt atkārtošanu: Calendar account: Calendar account Type Veids Description Apraksts All Day Visu dienu Time: Time Solar Lunar Starts Sākas Ends Beidzas Remind Me Atgādināt Repeat Atkārtot Daily Katru dienu Weekdays Darba dienās Weekly Katru nedēļu Monthly Katru mēnesi Yearly Katru gadu End Repeat Beigt atkārtošanu After Pēc On Līdz Cancel button Atcelt Save button Saglabāt CScheduleOperation All occurrences of a repeating event must have the same all-day status. Visiem periodiska notikuma atkārtojumiem ir jābūt identiskam visas dienas statusam Do you want to change all occurrences? Vai vēlaties mainīt visus periodiskos atkārtojumus? Cancel button Atcelt Change All Mainīt visus You are changing the repeating rule of this event. Jūs maināt notikuma periodiskas atkārtošanās iestatījumus You are deleting an event. Jūs dzēšat notikumu Are you sure you want to delete this event? Vai esat drošs, ka vēlaties dzēst šo notikumu? Delete button Dzēst Do you want to delete all occurrences of this event, or only the selected occurrence? Jūs vēlaties dzēst visus periodiskos notikumus vai tikai atlasīto notikumu? Delete All Dzēst visu Delete Only This Event Dzēst Tikai Šo Notikumu Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Jūs vēlaties dzēst šo un turpmākos notikums vai tikai šo notikumu? Delete All Future Events Dzēst visus nākotnes notikums You are changing a repeating event. Jūs maināt periodisku notikumu. Do you want to change only this occurrence of the event, or all occurrences? Jūs vēlaties mainīt tikai šo notikumu vai visus periodiskos notikumus? All Visi Only This Event Tikai Šo Notikumu Do you want to change only this occurrence of the event, or this and all future occurrences? Jūs vēlaties mainīt tikai šo notikumu vai šo un visus turpmākos notikumus? All Future Events Visus Turpmākos Notikumus You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button Labi CScheduleSearchDateItem Y G M M D D CScheduleSearchItem Edit Rediģēt Delete Dzēst All Day Visu dienu CScheduleSearchView No search results Nav atrasts neviens rezultāts CScheduleView ALL DAY VISU DIENU CSettingDialog Sunday Svētdiena Monday Pirmdiena Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y G M M W N D D Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Nedēļa Y G CYearScheduleView All Day Visu dienu No event Nav notikumu CYearWindow Y G CalendarWindow Calendar Kalendārs Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendārs ir palīgs ikdienas dzīvē kas palīdz sakārtot tavu laiku. Calendarmainwindow Calendar Kalendārs Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day Visu dienu DAccountDataBase Work Darbs Life Dzīve Other Cits DAlarmManager Close button Aizvērt One day before start Remind me tomorrow Remind me later 15 mins later 1 hour later 4 hours later Tomorrow Schedule Reminder %1 to %2 Today Šodiena DragInfoGraphicsView Edit Rediģēt Delete Dzēst New event Jauns notikums New Event Jauns notikums JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Atcelt Delete button Dzēst QObject Manage calendar Event types Account settings Account Select items to be synced Events General settings Sync interval Calendar account General First day of week Time Return Today Return Šodiena Return Today Today Return Today Šodiena ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Atcelt Save button Saglabāt The name can not only contain whitespaces Enter a name please Shortcut Help Palīdzība Delete event Dzēst notikumu Copy Kopēt Cut Izgriezt Paste Ielīmēt Delete Dzēst Select all Izvēlēties visus SidebarCalendarWidget Y G M M TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y G today Today Today Šodiena dde-calendar-5.14.13/translations/dde-calendar_ms.ts000066400000000000000000001450241473346337000223030ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Warna Cancel button Batal Save button Simpan CDayMonthView Monday Isnin Tuesday Selasa Wednesday Rabu Thursday Khamis Friday Jumaat Saturday Sabtu Sunday Ahad CDayWindow Y T M B D H Lunar CGraphicsView New Event Peristiwa Baharu CMonthScheduleNumItem %1 more %1 lagi CMonthView New event Peristiwa baharu New Event Peristiwa Baharu CMonthWindow Y T CMyScheduleView My Event Peristiwa Saya OK button OK Delete button Padam Edit button Sunting CPushButton New event type CScheduleDlg New Event Peristiwa Baharu Edit Event Sunting Peristiwa End time must be greater than start time Masa tamat mesti lebih besar dari masa mula OK button OK Never Tidak sesekali At time of event Semua tempoh peristiwa 15 minutes before 15 minit sebelum 30 minutes before 30 minit sebelum 1 hour before 1 jam sebelum 1 day before 1 hari sebelum 2 days before 2 hari sebelum 1 week before 1 minggu sebelum On start day (9:00 AM) Pada hari mula (9:00 AM) time(s) kali Enter a name please The name can not only contain whitespaces Type: Jenis: Description: Keterangan: All Day: Sepanjang Hari: Starts: Mula: Ends: Tamat: Remind Me: Ingatkan Saya: Repeat: Ulang: End Repeat: Tamat Ulang: Calendar account: Calendar account Type Jenis Description Keterangan All Day Sepanjang Hari Time: Time Masa Solar Lunar Starts Mula Ends Tamat Remind Me Ingatkan Saya Repeat Ulang Daily Harian Weekdays Hari Bekerja Weekly Mingguan Monthly Bulanan Yearly Tahunan End Repeat Tamat Ulang After Selepas On Pada Cancel button Batal Save button Simpan CScheduleOperation All occurrences of a repeating event must have the same all-day status. Semua kemunculan bagi peristiwa berulang mesti mempunyai status sepanjang-hari yang sama. Do you want to change all occurrences? Anda pasti mahu mengubah semua kemunculan? Cancel button Batal Change All Ubah Semua You are changing the repeating rule of this event. Anda mengubah peraturan berulang bagi peristiwa ini. You are deleting an event. Anda telah memadam satu peristiwa. Are you sure you want to delete this event? Anda pasti mahu memadam peristiwa ini? Delete button Padam Do you want to delete all occurrences of this event, or only the selected occurrence? Anda pasti mahu memadam semua kemunculan peristiwa ini, atau hanya kemunculan terpilih? Delete All Padam Semua Delete Only This Event Hanya Padam Peristiwa Ini Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Anda pasti mahu memadam semua kemunculan peristiwa ini dan akan datang, atau hanya kemunculan terpilih? Delete All Future Events Padam Semua Peristiwa Akan Datang You are changing a repeating event. Anda mengubah satu peristiwa berulang. Do you want to change only this occurrence of the event, or all occurrences? Anda pasti mahu mengubah hanya kemunculan peristiwa ini, atau semua kemunculan? All Semua Only This Event Hanya Peristiwa Ini Do you want to change only this occurrence of the event, or this and all future occurrences? Anda pasti mahu mengubah hanya kemunculan peristiwa ini, atau ini dan semua kemunculan masa hadapan? All Future Events Semua Peristiwa Masa Hadapan You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y T M B D H CScheduleSearchItem Edit Sunting Delete Padam All Day Sepanjang Hari CScheduleSearchView No search results Tiada keputusan gelintar CScheduleView ALL DAY SEPANJANG HARI CSettingDialog Sunday Ahad Monday Isnin Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual Manual 15 mins 30 mins 1 hour 1 jam 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y T M B W M D H Search events and festivals CWeekWidget Sun Ahd Mon Isn Tue Sel Wed Rab Thu Kha Fri Jum Sat Sab CWeekWindow Week Minggu Y T CYearScheduleView All Day Sepanjang Hari No event Tiada peristiwa CYearWindow Y T CalendarWindow Calendar Kalendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendar ialah sebuah alat untuk melihat tarikh, dan juga satu perancang harian pintar yang dapat menjadualkan semua perkara dalam hidup ini. Calendarmainwindow Calendar Kalendar Manage Privacy Policy Dasar Persendirian Syncing... Menyegerak... Sync successful Sync failed, please try later CenterWidget All Day Sepanjang Hari DAccountDataBase Work Kerja Life Lapang Other Lain-lain DAlarmManager Close button Tutup One day before start Satu hari sebelum mula Remind me tomorrow Ingatkan saya esok hari Remind me later Ingatkan saya kemudian 15 mins later 1 hour later 4 hours later Tomorrow Esok Schedule Reminder Peringatan Berjadual %1 to %2 %1 hingga %2 Today Hari ini DragInfoGraphicsView Edit Sunting Delete Padam New event Peristiwa baharu New Event Peristiwa Baharu JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Batal Delete button Padam QObject Manage calendar Event types Account settings Account Akaun Select items to be synced Events General settings Sync interval Calendar account General Am First day of week Time Masa Return Today Return Hari ini Return Today Today Return Today Hari ini ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Nama: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Batal Save button Simpan The name can not only contain whitespaces Enter a name please Shortcut Help Bantuan Delete event Padam peristiwa Copy Salin Cut Potong Paste Tampal Delete Padam Select all Pilih semua SidebarCalendarWidget Y T M B TimeJumpDialog Go button UserloginWidget Sign In button Daftar Masuk Sign Out button Daftar Keluar YearFrame Y T today Today Today Hari ini dde-calendar-5.14.13/translations/dde-calendar_nl.ts000066400000000000000000001470151473346337000222770ustar00rootroot00000000000000 AccountItem Sync successful Sychroniseren voltooid Network error Netwerkfout Server exception Serveruitzondering Storage full Geen vrije schijfruimte AccountManager Local account Lokaal account Event types Soorten afspraken CColorPickerWidget Color Kleur Cancel button Annuleren Save button Opslaan CDayMonthView Monday Maandag Tuesday Dinsdag Wednesday Woensdag Thursday Donderdag Friday Vrijdag Saturday Zaterdag Sunday Zondag CDayWindow Y J M M D D Lunar Maan CGraphicsView New Event Nieuwe afspraak CMonthScheduleNumItem %1 more Nog %1 andere CMonthView New event Nieuwe afspraak New Event Nieuwe afspraak CMonthWindow Y J CMyScheduleView My Event Mijn afspraak OK button Oké Delete button Verwijderen Edit button Bewerken CPushButton New event type Nieuw soort afspraak CScheduleDlg New Event Nieuwe afspraak Edit Event Afspraak bewerken End time must be greater than start time De eindtijd moet later zijn dan de begintijd OK button Oké Never Nooit At time of event Bij aanvang 15 minutes before 15 minuten van tevoren 30 minutes before 30 minuten van tevoren 1 hour before 1 uur van tevoren 1 day before 1 dag van tevoren 2 days before 2 dagen van tevoren 1 week before 1 week van tevoren On start day (9:00 AM) Op de dag van de afspraak (9:00 AM) time(s) keer Enter a name please Voer een naam in The name can not only contain whitespaces De naam mag niet alleen uit spaties bestaan Type: Soort: Description: Omschrijving: All Day: Hele dag: Starts: Begint om: Ends: Eindigt om: Remind Me: Herinneren: Repeat: Herhalen: End Repeat: Herhaling eindigt op: Calendar account: Agenda-account: Calendar account Agenda-account Type Soort Description Omschrijving All Day Hele dag Time: Tijdstip: Time Tijdstip Solar Zon Lunar Maan Starts Begint om Ends Eindigt om Remind Me Herinneren Repeat Herhalen Daily Dagelijks Weekdays Weekdagen Weekly Wekelijks Monthly Maandelijks Yearly Jaarlijks End Repeat Herhaling eindigt op After Na On Op Cancel button Annuleren Save button Opslaan CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle afspraken in de reeks moeten voorzien zijn van de status ‘hele dag’. Do you want to change all occurrences? Wil je alle afspraken in de reeks bewerken? Cancel button Annuleren Change All Reeks bewerken You are changing the repeating rule of this event. Je past de herhaalinstellingen van deze afspraak aan. You are deleting an event. Je staat op het punt een afspraak te verwijderen. Are you sure you want to delete this event? Weet je zeker dat je deze afspraak wilt verwijderen? Delete button Verwijderen Do you want to delete all occurrences of this event, or only the selected occurrence? Wil je alle afspraken in de reeks verwijderen of enkel deze? Delete All Reeks verwijderen Delete Only This Event Deze afspraak verwijderen Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Wil je deze en toekomstige afspraken verwijderen of enkel de deze? Delete All Future Events Toekomstige afspraken verwijderen You are changing a repeating event. Je staat op het punt een reeks aan te passen. Do you want to change only this occurrence of the event, or all occurrences? Wil je deze en toekomstige afspraken aanpassen of enkel deze? All Reeks Only This Event Deze afspraak Do you want to change only this occurrence of the event, or this and all future occurrences? Wil je deze en toekomstige afspraken aanpassen of enkel deze? All Future Events Toekomstige afspraken You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Je hebt een schrikkelmaand gekozen. De herinnering wordt op basis van de maankalender getoond. OK button Oké CScheduleSearchDateItem Y J M M D D CScheduleSearchItem Edit Bewerken Delete Verwijderen All Day Hele dag CScheduleSearchView No search results Geen zoekresultaten CScheduleView ALL DAY HELE DAG CSettingDialog Sunday zondag Monday maandag Tuesday Wednesday Thursday Friday Saturday Use System Setting Systeeminstellingen gebruiken 24-hour clock 24-uursklok 12-hour clock 12-uursklok import ICS file Ics-bestand importeren Manual Handmatig 15 mins 15 min. 30 mins 30 min. 1 hour 1 uur 24 hours 24 uur Sync Now Nu synchroniseren Last sync Recentste synchronisatie Please go to the <a href='/'>Control Center</a> to change system settings De instellingen kunnen worden aangepast in het <a href='/'>instellingencentrum</a> CTimeEdit (%1 mins) (%1 min.) (%1 hour) (%1 uur) (%1 hours) (%1 uur) CTitleWidget Y J M M W W D D Search events and festivals Zoeken naar afspraken en evenementen CWeekWidget Sun zo Mon ma Tue di Wed woe Thu do Fri vrij Sat za CWeekWindow Week Week Y J CYearScheduleView All Day Hele dag No event Geen afspraak CYearWindow Y J CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Met Kalender kun je je afspraken en planning beheren, zowel werk als privé. Calendarmainwindow Calendar Kalender Manage Instellingen Privacy Policy Privacybeleid Syncing... Bezig met synchroniseren… Sync successful Sychroniseren voltooid Sync failed, please try later Synchroniseren mislukt - probeer het later opnieuw CenterWidget All Day Hele dag DAccountDataBase Work Werk Life Privé Other Overig DAlarmManager Close button Sluiten One day before start Eén dag van tevoren Remind me tomorrow Herinner me morgen Remind me later Herinner me later 15 mins later 15 min. later 1 hour later 1 uur later 4 hours later 4 uur later Tomorrow Morgen Schedule Reminder Herinnering inplannen %1 to %2 van %1 tot %2 Today Vandaag DragInfoGraphicsView Edit Aanpassen Delete Verwijderen New event Nieuwe afspraak New Event Nieuwe afspraak JobTypeListView export Exporteren import ICS file Ics-bestand importeren You are deleting an event type. Je staat op het punt om een afspraaktype te verwijderen. All events under this type will be deleted and cannot be recovered. Alle bijbehorende afspraken worden verwijderd en kunnen niet worden hersteld. Cancel button Annuleren Delete button Verwijderen QObject Manage calendar Agenda beheren Event types Soorten afspraken Account settings Accountinstellingen Account Account Select items to be synced Selecteer de te synchroniseren items Events Afspraken General settings Algemene instellingen Sync interval Synchroniseren, elke Calendar account Agenda-account General Algemeen First day of week Eerste dag van de week Time Tijdsklok Return Today Return Vandaag Return Today Today Return Today Vandaag ScheduleTypeEditDlg New event type Nieuw soort afspraak Edit event type Afspraaktype bewerken Import ICS file Ics-bestand importeren Name: Naam: Color: Kleur: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>Ics</a>-bestand: Cancel button Annuleren Save button Opslaan The name can not only contain whitespaces De naam mag niet alleen bestaan uit spaties Enter a name please Voer een naam in Shortcut Help Hulp Delete event Afspraak verwijderen Copy Kopiëren Cut Knippen Paste Plakken Delete Verwijderen Select all Alles selecteren SidebarCalendarWidget Y J M M TimeJumpDialog Go button Ga UserloginWidget Sign In button Inloggen Sign Out button Uitloggen YearFrame Y J today Today Today Vandaag dde-calendar-5.14.13/translations/dde-calendar_pl.ts000066400000000000000000001473141473346337000223030ustar00rootroot00000000000000 AccountItem Sync successful Synchronizacja zakończona Network error Błąd sieci Server exception Wyjątek serwera Storage full Pamięć pełna AccountManager Local account Konto lokalne Event types Typy wydarzeń CColorPickerWidget Color Kolor Cancel button Anuluj Save button Zapisz CDayMonthView Monday Poniedziałek Tuesday Wtorek Wednesday Środa Thursday Czwartek Friday Piątek Saturday Sobota Sunday Niedziela CDayWindow Y R M M D D Lunar Księżycowy CGraphicsView New Event Nowe wydarzenie CMonthScheduleNumItem %1 more jeszcze 1% CMonthView New event Nowe wydarzenie New Event Nowe wydarzenie CMonthWindow Y R CMyScheduleView My Event Moje wydarzenie OK button OK Delete button Usuń Edit button Edytuj CPushButton New event type Nowy typ wydarzenia CScheduleDlg New Event Nowe wydarzenie Edit Event Edytuj wydarzenie End time must be greater than start time Czas zakończenia musi być późniejszy niż czas rozpoczęcia OK button OK Never Nigdy At time of event W czasie wydarzenia 15 minutes before 15 minut przed 30 minutes before 30 minut przed 1 hour before 1 godzinę przed 1 day before 1 dzień przed 2 days before 2 dni przed 1 week before 1 tydzień przed On start day (9:00 AM) W dniu rozpoczęcia (9:00) time(s) raz(y) Enter a name please Wprowadź nazwę The name can not only contain whitespaces Nazwa nie może zawierać tylko białych znaków Type: Typ: Description: Opis: All Day: Cały dzień: Starts: Początek: Ends: Koniec: Remind Me: Przypomnij mi: Repeat: Powtórz: End Repeat: Zakończ powtarzanie: Calendar account: Konto kalendarza: Calendar account Konto kalendarza Type Typ Description Opis All Day Cały dzień Time: Czas: Time Czas Solar Słoneczny Lunar Księżycowy Starts Początek Ends Koniec Remind Me Przypomnij mi Repeat Powtórz Daily Codziennie Weekdays W dni robocze Weekly Co tydzień Monthly Co miesiąc Yearly Co rok End Repeat Zakończ Powtarzanie After Po On Cancel button Anuluj Save button Zapisz CScheduleOperation All occurrences of a repeating event must have the same all-day status. Wszystkie wystąpienia powtarzającego się wydarzenia muszą zawierać ten sam stan całodniowy. Do you want to change all occurrences? Czy chcesz zmienić wszystkie wystąpienia? Cancel button Anuluj Change All Zmień wszystkie You are changing the repeating rule of this event. Zmieniasz regułę powtarzania tego wydarzenia. You are deleting an event. Usuwasz wydarzenie. Are you sure you want to delete this event? Czy na pewno chcesz usunąć to wydarzenie? Delete button Usuń Do you want to delete all occurrences of this event, or only the selected occurrence? Czy chcesz usunąć wszystkie wystąpienia tego zdarzenia, czy tylko wybrane wystąpienie? Delete All Usuń wszystkie Delete Only This Event Usuń tylko to wydarzenie Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Czy chcesz usunąć to i wszystkie przyszłe wystąpienia tego wydarzenia, czy tylko wybrane wystąpienie? Delete All Future Events Usuń wszystkie przyszłe wydarzenia You are changing a repeating event. Zmieniasz powtarzające się wydarzenie. Do you want to change only this occurrence of the event, or all occurrences? Czy chcesz zmienić tylko to wystąpienie wydarzenia, czy wszystkie wydarzenia? All Wszystko Only This Event Tylko to wydarzenie Do you want to change only this occurrence of the event, or this and all future occurrences? Czy chcesz zmienić tylko to wystąpienie wydarzenia, czy to i wszystkie przyszłe wydarzenia? All Future Events Wszystkie przyszłe wydarzenia You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Zaznaczono miesiąc przestępny, przypomnienie będzie działać zgodnie z zasadami kalendarza księżycowego. OK button OK CScheduleSearchDateItem Y R M M D D CScheduleSearchItem Edit Edytuj Delete Usuń All Day Cały dzień CScheduleSearchView No search results Brak wyników wyszukiwania CScheduleView ALL DAY CAŁY DZIEŃ CSettingDialog Sunday Niedziela Monday Poniedziałek Tuesday Wednesday Thursday Friday Saturday Use System Setting Użyj ustawienia systemowego 24-hour clock Zegar 24-godzinny 12-hour clock Zegar 12-godzinny import ICS file Importuj plik ICS Manual Ręcznie 15 mins 15 min 30 mins 30 min 1 hour 1 godz 24 hours 24 godz Sync Now Synchronizuj teraz Last sync Ostatnia synchronizacja Please go to the <a href='/'>Control Center</a> to change system settings Przejdź do <a href='/'>Centrum kontroli</a>, aby zmienić ustawienia systemu CTimeEdit (%1 mins) (%1 minut) (%1 hour) (%1 godzina) (%1 hours) (%1 godzin) CTitleWidget Y R M M W T D D Search events and festivals Szukaj wydarzeń i festiwalów CWeekWidget Sun Nie Mon Pon Tue Wt Wed Śr Thu Czw Fri Pt Sat Sob CWeekWindow Week Tydzień Y R CYearScheduleView All Day Cały dzień No event Brak wydarzeń CYearWindow Y R CalendarWindow Calendar Kalendarz Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendarz to narzędzie umożliwiające przeglądanie dat, jak i inteligentny terminarz, w którym możesz zaplanować wszystkie wydarzenia w życiu. Calendarmainwindow Calendar Kalendarz Manage Zarządzaj Privacy Policy Polityka prywatności Syncing... Synchronizuję... Sync successful Synchronizacja zakończona Sync failed, please try later Błąd synchronizacji, spróbuj ponownie później CenterWidget All Day Cały dzień DAccountDataBase Work Praca Life Życie Other Inne DAlarmManager Close button Zamknij One day before start Dzień przed rozpoczęciem Remind me tomorrow Przypomnij mi jutro Remind me later Przypomnij mi później 15 mins later 15 minut później 1 hour later 1 godzinę później 4 hours later 4 godziny później Tomorrow Jutro Schedule Reminder Zaplanuj przypomnienie %1 to %2 %1 do %2 Today Dzisiaj DragInfoGraphicsView Edit Edytuj Delete Usuń New event Nowe wydarzenie New Event Nowe wydarzenie JobTypeListView export Eksportuj import ICS file Importuj plik ICS You are deleting an event type. Usuwasz typ wydarzenia. All events under this type will be deleted and cannot be recovered. Wszystkie wydarzenia skatalogowane pod tym typem zostaną usunięte i nie będzie można ich przywrócić. Cancel button Anuluj Delete button Usuń QObject Manage calendar Zarządzaj kalendarzem Event types Typy wydarzeń Account settings Ustawienia konta Account Konto Select items to be synced Wybierz przedmioty do synchronizacji Events Wydarzenia General settings Ustawienia ogólne Sync interval Interwał synchronizacji Calendar account Konto kalendarza General Ogólne First day of week Pierwszy dzień tygodnia Time Czas Return Today Return Dzisiaj Return Today Today Return Today Dzisiaj ScheduleTypeEditDlg New event type Nowy typ wydarzenia Edit event type Edytuj typ wydarzenia Import ICS file Importuj plik ICS Name: Nazwa: Color: Kolor: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Plik <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>: Cancel button Anuluj Save button Zapisz The name can not only contain whitespaces Nazwa nie może zawierać tylko znaków spacji Enter a name please Wprowadź nazwę Shortcut Help Pomoc Delete event Usuń wydarzenie Copy Kopiuj Cut Wytnij Paste Wklej Delete Usuń Select all Zaznacz wszystko SidebarCalendarWidget Y R M M TimeJumpDialog Go button Przejdź UserloginWidget Sign In button Zaloguj się Sign Out button Wyloguj się YearFrame Y R today Today Today Dzisiaj dde-calendar-5.14.13/translations/dde-calendar_pt.ts000066400000000000000000001466271473346337000223210ustar00rootroot00000000000000 AccountItem Sync successful Sincronização bem sucedida Network error Erro de rede Server exception Exceção do servidor Storage full Armazenamento cheio AccountManager Local account Conta local Event types Tipos de evento CColorPickerWidget Color Cor Cancel button Cancelar Save button Guardar CDayMonthView Monday Seg Tuesday Ter Wednesday Qua Thursday Qui Friday Sex Saturday Sáb Sunday Dom CDayWindow Y A M M D D Lunar Lunar CGraphicsView New Event Novo evento CMonthScheduleNumItem %1 more mais %1 CMonthView New event Novo evento New Event Novo evento CMonthWindow Y A CMyScheduleView My Event O meu evento OK button Aceitar Delete button Eliminar Edit button Editar CPushButton New event type Novo tipo de evento CScheduleDlg New Event Novo evento Edit Event Editar evento End time must be greater than start time A hora de fim deve ser maior do que a hora de início OK button Aceitar Never Nunca At time of event Na hora do evento 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 dia antes 2 days before 2 dias antes 1 week before 1 semana antes On start day (9:00 AM) No início do dia (9:00 AM) time(s) vez(es) Enter a name please Introduza um nome The name can not only contain whitespaces O nome não pode conter apenas espaços em branco Type: Tipo: Description: Descrição: All Day: Dia todo: Starts: Inicia: Ends: Termina: Remind Me: Lembrar-me: Repeat: Repetir: End Repeat: Fim de repetição: Calendar account: Conta de calendário: Calendar account Conta de calendário Type Tipo Description Descrição All Day Dia todo Time: Hora: Time Hora Solar Solar Lunar Lunar Starts Inicia Ends Termina Remind Me Lembrar-me Repeat Repetir Daily Diário Weekdays Dias da semana Weekly Semanal Monthly Mensal Yearly Anual End Repeat Fim da repetição After Depois On Em Cancel button Cancelar Save button Guardar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas as ocorrências de um evento repetido devem ter o mesmo estado durante todo o dia. Do you want to change all occurrences? Deseja alterar todas as ocorrências? Cancel button Cancelar Change All Alterar tudo You are changing the repeating rule of this event. Está a alterar a regra da repetição deste evento. You are deleting an event. Está a eliminar um evento. Are you sure you want to delete this event? Tem a certeza que deseja eliminar este evento? Delete button Eliminar Do you want to delete all occurrences of this event, or only the selected occurrence? Deseja eliminar todas as ocorrências deste evento ou apenas a ocorrência selecionada? Delete All Eliminar tudo Delete Only This Event Eliminar apenas este evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Deseja eliminar esta e todas as ocorrências futuras deste evento ou apenas a ocorrência selecionada? Delete All Future Events Eliminar todos os eventos futuros You are changing a repeating event. Está a alterar um evento repetido. Do you want to change only this occurrence of the event, or all occurrences? Deseja alterar apenas esta ocorrência do evento, ou todas as ocorrências? All Tudo Only This Event Apenas este evento Do you want to change only this occurrence of the event, or this and all future occurrences? Deseja alterar apenas esta ocorrência do evento ou esta e todas as ocorrências futuras? All Future Events Todos os eventos futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Selecionou um mês bissexto, e será lembrado de acordo com as regras do calendário lunar. OK button Aceitar CScheduleSearchDateItem Y A M M D D CScheduleSearchItem Edit Editar Delete Eliminar All Day Dia todo CScheduleSearchView No search results Sem resultados de pesquisa CScheduleView ALL DAY DIA TODO CSettingDialog Sunday Domingo Monday Segunda Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock Relógio de 24 horas 12-hour clock Relógio de 12 horas import ICS file importar ficheiro ICS Manual Manual 15 mins 15 mins 30 mins 30 mins 1 hour 1 hora 24 hours 24 horas Sync Now Sincronizar agora Last sync Última sincronização Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hora) (%1 hours) (%1 horas) CTitleWidget Y A M M W S D D Search events and festivals Pesquisar eventos e festivais CWeekWidget Sun Dom Mon Seg Tue Ter Wed Qua Thu Qui Fri Sex Sat Sáb CWeekWindow Week Semana Y A CYearScheduleView All Day Dia todo No event Nenhum evento CYearWindow Y A CalendarWindow Calendar Calendário Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. O Calendário é uma ferramenta para visualizar datas e também uma agenda diária inteligente para agendar todas as coisas na vida. Calendarmainwindow Calendar Calendário Manage Gerir Privacy Policy Política de privacidade Syncing... A sincronizar... Sync successful Sincronização bem sucedida Sync failed, please try later Falha ao sincronizar. Tente novamente mais tarde CenterWidget All Day Dia todo DAccountDataBase Work Trabalho Life Vida Other Outro DAlarmManager Close button Fechar One day before start Um dia antes do início Remind me tomorrow Lembra-me amanhã Remind me later Lembrar-me mais tarde 15 mins later 15 mins depois 1 hour later 1 hora depois 4 hours later 4 horas depois Tomorrow Amanhã Schedule Reminder Agendar lembrete %1 to %2 %1 até %2 Today Hoje DragInfoGraphicsView Edit Editar Delete Eliminar New event Novo evento New Event Novo evento JobTypeListView export exportar import ICS file importar ficheiro ICS You are deleting an event type. Está a eliminar um tipo de evento. All events under this type will be deleted and cannot be recovered. Todos os eventos deste tipo serão eliminados e não podem ser recuperados. Cancel button Cancelar Delete button Eliminar QObject Manage calendar Gerir calendário Event types Tipos de evento Account settings Definições de conta Account Conta Select items to be synced Selecionar itens a sincronizar Events Eventos General settings Definições gerais Sync interval Intervalo de sincronização Calendar account Conta de calendário General Geral First day of week Primeiro dia da semana Time Hora Return Today Return Hoje Return Today Today Return Today Hoje ScheduleTypeEditDlg New event type Novo tipo de evento Edit event type Editar tipo de evento Import ICS file Importar ficheiro ICS Name: Nome: Color: Cor: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Ficheiro <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> : Cancel button Cancelar Save button Guardar The name can not only contain whitespaces O nome não pode conter apenas espaços em branco Enter a name please Introduza um nome Shortcut Help Ajuda Delete event Eliminar evento Copy Copiar Cut Cortar Paste Colar Delete Eliminar Select all Selecionar tudo SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Iniciar sessão Sign Out button Terminar sessão YearFrame Y A today Today Today Hoje dde-calendar-5.14.13/translations/dde-calendar_pt_BR.ts000066400000000000000000001471121473346337000226720ustar00rootroot00000000000000 AccountItem Sync successful Conexão bem-sucedida Network error Erro de rede Server exception Exceção do servidor Storage full Armazenamento cheio AccountManager Local account Conta local Event types Tipos de eventos CColorPickerWidget Color Cor Cancel button Cancelar Save button Salvar CDayMonthView Monday Segunda-feira Tuesday Terça-feira Wednesday Quarta-feira Thursday Quinta-feira Friday Sexta-feira Saturday Sábado Sunday Domingo CDayWindow Y A M M D D Lunar Lunar CGraphicsView New Event Novo evento CMonthScheduleNumItem %1 more %1 mais CMonthView New event Novo evento New Event Novo evento CMonthWindow Y A CMyScheduleView My Event Meu Evento OK button Ok Delete button Excluir Edit button Editar CPushButton New event type Novo tipo de evento CScheduleDlg New Event Novo Evento Edit Event Editar Evento End time must be greater than start time O tempo de término deve ser maior que o tempo de início OK button Ok Never Nunca At time of event No momento do evento 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 dia antes 2 days before 2 dias antes 1 week before 1 semana antes On start day (9:00 AM) No dia de início (9:00 AM) time(s) vez(es) Enter a name please Insira um nome The name can not only contain whitespaces O nome não pode conter apenas espaços em branco Type: Tipo: Description: Descrição: All Day: Dia Inteiro: Starts: Inicia em: Ends: Termina em: Remind Me: Lembre-me: Repeat: Repetir: End Repeat: Termina em: Calendar account: Conta de calendário: Calendar account Conta de calendário Type Tipo Description Descrição All Day Dia Inteiro Time: Horário: Time Horário Solar Solar Lunar Lunar Starts Inicia em Ends Termina em Remind Me Lembre-me Repeat Repetir Daily Diariamente Weekdays Dias úteis Weekly Semanalmente Monthly Mensalmente Yearly Anualmente End Repeat Termina em After Depois On Ativo Cancel button Cancelar Save button Salvar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas as ocorrências de um evento repetitivo devem ter o mesmo status durante o dia inteiro. Do you want to change all occurrences? Alterar todas as ocorrências? Cancel button Cancelar Change All Alterar Tudo You are changing the repeating rule of this event. A regra de repetição deste evento será alterada. You are deleting an event. Um evento será excluído. Are you sure you want to delete this event? Excluir este evento? Delete button Excluir Do you want to delete all occurrences of this event, or only the selected occurrence? Excluir todas as ocorrências deste evento; ou apenas a ocorrência selecionada? Delete All Excluir Tudo Delete Only This Event Excluir Apenas Este Evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Excluir este evento e todas as suas ocorrências futuras; ou apenas a ocorrência selecionada? Delete All Future Events Excluir Todos os Eventos Futuros You are changing a repeating event. Você está alterando um evento repetitivo. Do you want to change only this occurrence of the event, or all occurrences? Alterar apenas esta ocorrência do evento ou todas as ocorrências? All Tudo Only This Event Apenas Este Evento Do you want to change only this occurrence of the event, or this and all future occurrences? Alterar apenas esta ocorrência do evento ou esta e todas as ocorrências futuras? All Future Events Todos os Eventos Futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Você selecionou um mês bissexto e será lembrado de acordo com as regras do calendário lunar. OK button Ok CScheduleSearchDateItem Y A M M D D CScheduleSearchItem Edit Editar Delete Excluir All Day Dia Inteiro CScheduleSearchView No search results Nenhum resultado encontrado CScheduleView ALL DAY DIA INTEIRO CSettingDialog Sunday Domingo Monday Segunda-feira Tuesday Wednesday Thursday Friday Saturday Use System Setting Utilizar a configuração do sistema 24-hour clock Formato de 24 horas 12-hour clock Formato de 12 horas import ICS file importar arquivo ICS Manual Manual 15 mins 15 mins 30 mins 30 mins 1 hour 1 hora 24 hours 24 horas Sync Now Sincronizar Agora Last sync Última sincronização Please go to the <a href='/'>Control Center</a> to change system settings Acesse a <a href='/'>Central de Controle</a> para alterar as configurações do sistema CTimeEdit (%1 mins) (%1 minutos) (%1 hour) (%1 hora) (%1 hours) (%1 horas) CTitleWidget Y A M M W S D D Search events and festivals Procurar eventos e datas comemorativas CWeekWidget Sun Dom Mon Seg Tue Ter Wed Qua Thu Qui Fri Sex Sat Sáb CWeekWindow Week Semana Y A CYearScheduleView All Day Dia Inteiro No event Nenhum evento CYearWindow Y A CalendarWindow Calendar Calendário Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. O Calendário é uma ferramenta para visualizar datas e também um planejador diário inteligente para programar todas as coisas da vida. Calendarmainwindow Calendar Calendário Manage Gerenciar Privacy Policy Política de privacidade Syncing... Sincronizando... Sync successful Sincronização bem-sucedida Sync failed, please try later A sincronização falhou, tente novamente mais tarde CenterWidget All Day Dia Inteiro DAccountDataBase Work Trabalho Life Social Other Outro DAlarmManager Close button Fechar One day before start Um dia antes do início Remind me tomorrow Lembre-me amanhã Remind me later Lembre-me mais tarde 15 mins later 15 minutos depois 1 hour later 1 hora depois 4 hours later 4 horas depois Tomorrow Amanhã Schedule Reminder Agendar Lembrete %1 to %2 %1 às %2 Today Hoje DragInfoGraphicsView Edit Editar Delete Excluir New event Novo evento New Event Novo evento JobTypeListView export exportar import ICS file importar arquivo ICS You are deleting an event type. Você está eliminando um tipo de evento. All events under this type will be deleted and cannot be recovered. Todos os eventos deste tipo serão eliminados e não poderão ser recuperados. Cancel button Cancelar Delete button Excluir QObject Manage calendar Gerenciar calendário Event types Tipos de eventos Account settings Configurações de conta Account Conta Select items to be synced Selecionar itens para sincronizar Events Eventos General settings Definições gerais Sync interval Intervalo de sincronização Calendar account Conta de calendário General Geral First day of week Primeiro dia da semana Time Horário Return Today Return Hoje Return Today Today Return Today Hoje ScheduleTypeEditDlg New event type Novo tipo de evento Edit event type Editar o tipo de evento Import ICS file Importar arquivo ICS Name: Nome: Color: Cor: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Arquivo <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>: Cancel button Cancelar Save button Salvar The name can not only contain whitespaces O nome não pode ser apenas espaços em branco Enter a name please Insira um nome Shortcut Help Ajuda Delete event Excluir evento Copy Copiar Cut Recortar Paste Colar Delete Excluir Select all Selecionar Tudo SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Entrar Sign Out button Sair YearFrame Y A today Today Today Hoje dde-calendar-5.14.13/translations/dde-calendar_ro.ts000066400000000000000000001475371473346337000223170ustar00rootroot00000000000000 AccountItem Sync successful Sincronizare reușită Network error Eroare de rețea Server exception Excepție server Storage full Spațiu de stocare încărcat AccountManager Local account Cont local Event types Tipuri de evenimente CColorPickerWidget Color Culoare Cancel button Anulează Save button Salvare CDayMonthView Monday Luni Tuesday Marţi Wednesday Miercuri Thursday Joi Friday Vineri Saturday Sâmbătă Sunday Duminică CDayWindow Y Y M l D z Lunar Lunar CGraphicsView New Event Eveniment nou CMonthScheduleNumItem %1 more %1 mai mult CMonthView New event Eveniment nou New Event Eveniment nou CMonthWindow Y A CMyScheduleView My Event Evenimentul meu OK button Ok Delete button Ștergeți Edit button Editare CPushButton New event type Tip nou de eveniment CScheduleDlg New Event Eveniment nou Edit Event Editare eveniment End time must be greater than start time Ora de încheiere trebuie să fie mai mare decât ora de început OK button Ok Never Niciodată At time of event La momentul evenimentului 15 minutes before Cu 15 minute înainte 30 minutes before Cu 30 minute înainte 1 hour before Cu 1 oră înainte 1 day before Cu 1 zi înainte 2 days before Cu 2 zile înainte 1 week before Cu 1 săptămână înainte On start day (9:00 AM) Începutul zilei (9:00 AM) time(s) ori Enter a name please Introduceți un nume, vă rugăm The name can not only contain whitespaces Numele nu poate conține numai spații libere Type: Tip: Description: Descriere: All Day: Toată ziua: Starts: Începe: Ends: Se termină: Remind Me: Aminteşte-mi: Repeat: Repetă: End Repeat: Repetarea se termină: Calendar account: Cont calendar: Calendar account Cont calendari Type Tip Description Descriere All Day Toată ziua Time: Oră: Time Oră Solar Solar Lunar Lunar Starts Începe Ends Se termină Remind Me Aminteşte-mi Repeat Repetă Daily Zilnic Weekdays Zilele saptămânii Weekly Săptămânal Monthly Lunar Yearly Anual End Repeat Opreşte repetarea After După On Pornire Cancel button Anulează Save button Salvare CScheduleOperation All occurrences of a repeating event must have the same all-day status. Toate aparițiile unui eveniment repetat trebuie să aibă același statut toată ziua. Do you want to change all occurrences? Doriți să schimbați toate aparițiile? Cancel button Anulează Change All Schimbă tot You are changing the repeating rule of this event. Modificați regula de repetare a acestui eveniment. You are deleting an event. Ştergeţi un eveniment. Are you sure you want to delete this event? Sigur doriţi să ştergeţi acest eveniment? Delete button Ștergeți Do you want to delete all occurrences of this event, or only the selected occurrence? Doriți să ștergeți toate aparițiile acestui eveniment sau doar evenimentul selectat? Delete All Şterge tot Delete Only This Event Şterge doar acest eveniment Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Doriți să ștergeți toate aparițiile acestui eveniment sau doar evenimentul selectat? Delete All Future Events Şterge toate evenimentele viitoare You are changing a repeating event. Modificați un eveniment care se repetă. Do you want to change only this occurrence of the event, or all occurrences? Doriți să schimbați doar această apariție a evenimentului sau toate evenimentele? All Tot Only This Event Doar acest eveniment Do you want to change only this occurrence of the event, or this and all future occurrences? Doriți să schimbați doar această apariție a evenimentului sau aceasta și toate evenimentele viitoare? All Future Events Toate evenimentele viitoare You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Ați selectat o lună bisectă și vi se va aminti în conformitate cu regulile calendarului lunar. OK button Ok CScheduleSearchDateItem Y A M L D Z CScheduleSearchItem Edit Editează Delete Șterge All Day Toată ziua CScheduleSearchView No search results Niciun rezultat la căutare CScheduleView ALL DAY TOATĂ ZIUA CSettingDialog Sunday Duminică Monday Luni Tuesday Wednesday Thursday Friday Saturday Use System Setting Utilizați setarea sistemului 24-hour clock Mod ceas 24 ore 12-hour clock Mod ceas 12 ore import ICS file importați fișierul ICS Manual Manual 15 mins 15 minute 30 mins 30 minute 1 hour 1 oră 24 hours 24 ore Sync Now Sincronizează acum Last sync Ultima sincronizare Please go to the <a href='/'>Control Center</a> to change system settings Vă rugăm să accesați <a href='/'>Control Center</a> pentru a modifica setările sistemului CTimeEdit (%1 mins) (%1 minnute) (%1 hour) (%1 oră) (%1 hours) (%1 ore) CTitleWidget Y A M L W S D Z Search events and festivals Căutare evenimente și festivaluri CWeekWidget Sun Dum Mon Lu Tue Mar Wed Mie Thu Joi Fri Vin Sat Sâm CWeekWindow Week Săptămână Y A CYearScheduleView All Day Toată ziua No event Nici un eveniment CYearWindow Y A CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarul este un instrument pentru a vizualiza datele și, de asemenea, un planificator inteligent zilnic pentru a programa toate lucrurile din viață. Calendarmainwindow Calendar Calendar Manage Gestionare Privacy Policy Politica de Confidențialitate Syncing... Sincronizare... Sync successful Sincronizare reușită Sync failed, please try later Sincronizarea a eșuat, vă rugăm să încercați mai târziu CenterWidget All Day Toată ziua DAccountDataBase Work Serviciu Life Viaţă Other Altul DAlarmManager Close button Închidere One day before start O zi înainte de a începe Remind me tomorrow Reaminteşte mâine Remind me later Reaminteşte mai târziu 15 mins later peste 15 minute 1 hour later peste 1 oră 4 hours later peste 4 ore Tomorrow Mâine Schedule Reminder Programare Reminder %1 to %2 %1 la %2 Today Astăzi DragInfoGraphicsView Edit Editare Delete Ștergeți New event Eveniment nou New Event Eveniment nou JobTypeListView export exportare import ICS file importați fișierul ICS You are deleting an event type. Ștergeți un tip de eveniment. All events under this type will be deleted and cannot be recovered. Toate evenimentele de acest tip vor fi șterse și nu vor putea fi recuperate. Cancel button Anulează Delete button Ștergeți QObject Manage calendar Gestionare calendar Event types Tipuri de evenimente Account settings Setări cont Account Cont Select items to be synced Selectați elementele care urmează să fie sincronizate Events Evenimente General settings Setări generale Sync interval Interval de sincronizare Calendar account Cont calendar General General First day of week Prima zi a săptămânii Time Oră Return Today Return Astăzi Return Today Today Return Today Astăzi ScheduleTypeEditDlg New event type Tip nou de eveniment Edit event type Editarea tipului de eveniment Import ICS file Importați fișierul ICS Name: Nume: Color: Culoare: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Fișier <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> Cancel button Anulează Save button Salvare The name can not only contain whitespaces Numele nu poate conține numai spații albe Enter a name please Introduceți un nume, vă rugăm Shortcut Help Ajutor Delete event Ştergere eveniment Copy Copiere Cut Tăiere Paste Lipire Delete Ștergeți Select all Selectează totul SidebarCalendarWidget Y Y M l TimeJumpDialog Go button Mergi UserloginWidget Sign In button Conectați-vă Sign Out button Deconectați-vă YearFrame Y A today Today Today Astăzi dde-calendar-5.14.13/translations/dde-calendar_ru.ts000066400000000000000000001537431473346337000223210ustar00rootroot00000000000000 AccountItem Sync successful Успешная синхронизация Network error Ошибка сети Server exception Исключение сервера Storage full Хранилище заполнено AccountManager Local account Учетная запись домена Event types CColorPickerWidget Color Цвет Cancel button Отмена Save button Сохранить CDayMonthView Monday Понедельник Tuesday Вторник Wednesday Среда Thursday Четверг Friday Пятница Saturday Суббота Sunday Воскресенье CDayWindow Y Г M М D Д Lunar Лунный CGraphicsView New Event Новое Событие CMonthScheduleNumItem %1 more более %1 CMonthView New event Новое событие New Event Новое Событие CMonthWindow Y Г CMyScheduleView My Event Моё событие OK button OK Delete button Удалить Edit button Редактировать CPushButton New event type Новый тип события CScheduleDlg New Event Новое событие Edit Event Редактировать событие End time must be greater than start time Время окончания должно быть больше времени начала OK button OK Never Никогда At time of event Во время события 15 minutes before За 15 минут до этого 30 minutes before За 30 минут до этого 1 hour before За 1 час до этого 1 day before За 1 день до этого 2 days before За 2 дня до этого 1 week before За 1 неделю до этого On start day (9:00 AM) В день начала (9:00) time(s) раз(а) Enter a name please Введите имя, пожалуйста The name can not only contain whitespaces Имя не может содержать только пробелы Type: Тип: Description: Описание: All Day: Весь день: Starts: Начинается: Ends: Заканчивается: Remind Me: Напомнить: Repeat: Повторять: End Repeat: Повторять до: Calendar account: Учетная запись календаря: Calendar account Учетная запись календаря: Type Тип Description Описание All Day Весь день Time: Время: Time Время Solar Солнечно Lunar Лунный Starts Начало Ends Конец Remind Me Напомнить Repeat Повторять Daily Ежедневно Weekdays По будням Weekly Еженедельно Monthly Ежемесячно Yearly Ежегодно End Repeat Повторять до: After После On Вкл. Cancel button Отмена Save button Сохранить CScheduleOperation All occurrences of a repeating event must have the same all-day status. Все экземпляры повторяющегося события должны иметь одинаковый статус в течение всего дня. Do you want to change all occurrences? Вы хотите изменить все экземпляры? Cancel button Отмена Change All Изменить все You are changing the repeating rule of this event. Вы изменяете правило повторения этого события. You are deleting an event. Вы удаляете событие. Are you sure you want to delete this event? Вы действительно хотите удалить событие? Delete button Удалить Do you want to delete all occurrences of this event, or only the selected occurrence? Вы хотите удалить все экземпляры данного события или только выбранного экземпляра? Delete All Удалить все Delete Only This Event Удалить только это событие Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Вы хотите удалить только это и будущие проявления события или только выбранные проявления? Delete All Future Events Удалить Все Будущие События You are changing a repeating event. Вы изменяете повторяющееся событие Do you want to change only this occurrence of the event, or all occurrences? Вы хотите изменить только это проявление события или все проявления. All Все Only This Event Только Это Событие Do you want to change only this occurrence of the event, or this and all future occurrences? Вы хотите изменить только это проявление данного события или всё событие и все будущие проявления? All Future Events Только Будущие События You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Вы выбрали високосный месяц, вы будете оповещены об этом в соответствии с правилами лунного календаря. OK button OK CScheduleSearchDateItem Y Г M М D Д CScheduleSearchItem Edit Правка Delete Удалить All Day Весь День CScheduleSearchView No search results Поиск результатов не дал CScheduleView ALL DAY ВЕСЬ ДЕНЬ CSettingDialog Sunday Воскресенье Monday Понедельник Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 24-часовой 12-hour clock 12-часовой формат времени import ICS file импорт файла ICS Manual Вручную 15 mins 15 минут 30 mins 30 минут 1 hour 1 час 24 hours 24 часа Sync Now Синхронизировать Сейчас Last sync Последняя синхронизация Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 минут) (%1 hour) (%1 час) (%1 hours) (%1 часов) CTitleWidget Y Г M М W Н D Д Search events and festivals Поиск мероприятий и фестивалей CWeekWidget Sun Вс Mon Пн Tue Вт Wed Ср Thu Чт Fri Пт Sat Сб CWeekWindow Week Неделя Y Г CYearScheduleView All Day Весь День No event Нет события CYearWindow Y Г CalendarWindow Calendar Календарь Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Календарь - это инструмент для просмотра дат, а также умный ежедневник для планирования всех событий вашей повседневной жизни. Calendarmainwindow Calendar Календарь Manage Privacy Policy Политика конфиденциальности Syncing... Синхронизация... Sync successful Успешная синхронизация Sync failed, please try later Не удалось синхронизировать, пожалуйста, попробуйте позже CenterWidget All Day Весь День: DAccountDataBase Work Работа Life Жизнь Other Остальное DAlarmManager Close button Закрыть One day before start За день до начала Remind me tomorrow Напомнить завтра Remind me later Напомнить позже 15 mins later Спустя 15 минут 1 hour later Спустя 1 час 4 hours later Спустя 4 часа Tomorrow Завтра Schedule Reminder Напоминание о расписании %1 to %2 от 1% до %2 Today Сегодня DragInfoGraphicsView Edit Редактировать Delete Удалить New event Новое событие New Event Новое Событие JobTypeListView export Экспорт import ICS file You are deleting an event type. Вы удаляете тип события. All events under this type will be deleted and cannot be recovered. Все события этого типа будут удалены и не подлежат восстановлению. Cancel button Отмена Delete button Удалить QObject Manage calendar Event types Типы событий Account settings Настройки учетной записи Account Учетная запись Select items to be synced Выберите элементы для синхронизации Events События General settings Общие настройки Sync interval Интервал синхронизации Calendar account Учетная запись календаря: General Общие First day of week Первый день недели Time Время Return Today Return Сегодня Return Today Today Return Today Сегодня ScheduleTypeEditDlg New event type Новый тип события Edit event type Редактировать тип события Import ICS file импорт файла ICS Name: Имя: Color: Цвет: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS1</a>Файл: Cancel button Отмена Save button Сохранить The name can not only contain whitespaces Имя не может содержать только пробелы Enter a name please Введите имя, пожалуйста Shortcut Help Помощь Delete event Удалить событие Copy Копировать Cut Вырезать Paste Вставить Delete Удалить Select all Выбрать всё SidebarCalendarWidget Y Г M М TimeJumpDialog Go button Вперед UserloginWidget Sign In button Войти Sign Out button Выйти YearFrame Y Г today Today Today Сегодня dde-calendar-5.14.13/translations/dde-calendar_si.ts000066400000000000000000001537541473346337000223100ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button අවලංගු කරන්න Save button සුරකින්න CDayMonthView Monday සඳුදා Tuesday අඟහරුවාදා Wednesday බදාදා Thursday බ්‍රහස්පතින්දා Friday සිකුරාදා Saturday සෙනසුරාදා Sunday ඉරිදා CDayWindow Y වස M මස D දින Lunar CGraphicsView New Event නව හමුවක් CMonthScheduleNumItem %1 more තවත් %1 CMonthView New event නව සිදුවීමක් New Event නව හමුවක් CMonthWindow Y වස CMyScheduleView My Event මගේ හමුව OK button හරි Delete button මකා දමන්න Edit button සංස්කරණය කරන්න CPushButton New event type CScheduleDlg New Event නව හමුවක් Edit Event හමුව සංස්කරණය කරන්න End time must be greater than start time අවසන් කෙරෙන වේලාව ආරම්භ කෙරෙන වේලාවට වඩා වැඩි විය යුතුය OK button හරි Never කිසිදා නැත At time of event හමුව යොදාගත් වේලාවේදී 15 minutes before මිනිත්තු 15 කට පෙර 30 minutes before මින්ත්තු 30 කට පෙර 1 hour before පැය 1 කට පෙර 1 day before දින 1 කට පෙර 2 days before දින 2 කට පෙර 1 week before සති 1 කට පෙර On start day (9:00 AM) ඇරඹෙන දින (පෙ.ව 9.00) time(s) වේලාව (න්) Enter a name please The name can not only contain whitespaces Type: වර්ගය: Description: විස්තරය: All Day: දිනය පුරාම: Starts: අ‍ාරම්භය: Ends: අවසානය: Remind Me: මට මතක් කරන්න: Repeat: නැවත කරන්න: End Repeat: පුනරාවර්තනය අවසන් කරන්න: Calendar account: Calendar account Type වර්ගය Description විස්තරය All Day දිනය පුරාම Time: Time Solar Lunar Starts ආරම්භය Ends අවසානය Remind Me මට මතක් කරන්න Repeat පුනරාවර්තන Daily දිනපතා Weekdays සතියේ දින Weekly සති පතා Monthly මාසිකව Yearly වාර්ෂිකව End Repeat පුනරාවර්තනය අවසන් කරන්න After පසුව On මත Cancel button අවලංගු කරන්න Save button සුරකින්න CScheduleOperation All occurrences of a repeating event must have the same all-day status. පුනරාවර්තන හමුවන්ගේ සියලු හමුවන් දිනය පුරා තත්වයේ තිබිය යුතුය. Do you want to change all occurrences? ඔබට සියලු පුනරාවර්ථනයන් වෙනස් කිරීමද අවශ්‍යද? Cancel button අවලංගු කරන්න Change All සියල්ල වෙනස් කරන්න You are changing the repeating rule of this event. ඔබ මෙම හමුවේ පුනරාවර්තන රීතීන් වෙනස් කරමින් සිටී. You are deleting an event. ඔබ හමුවක් මකා දමයි. Are you sure you want to delete this event? මෙම හමුව මකා දැමීමට අවශ්‍ය බව ඔබට විශ්වාසද? Delete button මකා දමන්න Do you want to delete all occurrences of this event, or only the selected occurrence? මෙම හමුවේ සියලුම පුනරාවර්තනයන් මකා දැමීමට ඔබට අවශ්‍යද, නැතහොත් තෝරාගත් හමුව පමණක්ද? Delete All සියල්ල මකා දමන්න Delete Only This Event මෙම හමුව පමණක් මකා දමන්න Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ඔබට මෙම හමුව සහ මෙම හමුවේ සැලසුම් කල සියලු හමුවන් මකා දැමීමට අවශ්‍යද, නැතහොත් මෙම තෝරාගත් හමුව පමණද? Delete All Future Events සියලු යොදාගත් හමුවන් මකා දමන්න You are changing a repeating event. ඔබ පුනරාවර්තන හමුවක් වෙනස් කරමින් සිටී. Do you want to change only this occurrence of the event, or all occurrences? ඔබට මෙම පුනරාවර්තන හමුවේ මෙම හමුව පමණක් වෙනස් කිරීමට අවශ්‍යද, නැතිනම් සියලු පුනරාවර්තනයන් වෙනස් කල යුතුද? All සියල්ලම Only This Event මෙම හමුව පමණි Do you want to change only this occurrence of the event, or this and all future occurrences? ඔබට මෙම හමුව සහ මෙම හමුවේ සැලසුම් කල සියලු හමුවන් වෙනස් කිරීමට අවශ්‍යද, නැතහොත් මෙම තෝරාගත් හමුව පමණද? All Future Events සියලුම අනාගත හමුවන් You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button හරි CScheduleSearchDateItem Y වස M මස D දින CScheduleSearchItem Edit සංස්කරණය කරන්න Delete මකා දමන්න All Day දිනය පුරාම CScheduleSearchView No search results සෙවුම් ප්‍රතිඵල නොමැත CScheduleView ALL DAY දිනය පුරාම CSettingDialog Sunday ඉරිදා Monday සඳුදා Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual සව්‍යං 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y වස M මස W සති D දින Search events and festivals CWeekWidget Sun ඉරි. Mon සදු. Tue අග. Wed බදා. Thu බ්‍රහස්. Fri සිකු. Sat සෙන. CWeekWindow Week සතිය Y වර් CYearScheduleView All Day දිනය පුරාම No event හමුවන් නොමැත CYearWindow Y වර් CalendarWindow Calendar දින දසුන Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. දින දසුන යනු දිනයන් බැලීමට මෙන්ම ජීවිතයේ සෑම දෙයක්ම සැලසුම් කිරීමට ‍භාවිත කල හැකි දෛනික සැලසුම්කරන යෙදවුමකි. Calendarmainwindow Calendar දින දසුන Manage Privacy Policy Syncing... සමමුහුර්ත වෙමින්... Sync successful Sync failed, please try later CenterWidget All Day දිනය පුරාම DAccountDataBase Work කාර්යය Life ජීවිතය Other වෙනත් DAlarmManager Close button වසා දමන්න One day before start ආරම්භ කිරීමට ඇත්තේ එක් දිනක් පමණි Remind me tomorrow මට හෙට මතක් කරන්න Remind me later මට පසුව මතක් කරන්න 15 mins later 1 hour later 4 hours later Tomorrow හෙට Schedule Reminder මතක් කිරීමක් සකසන්න %1 to %2 Today අද DragInfoGraphicsView Edit සංස්කරණය කරන්න Delete මකා දමන්න New event නව සිදුවීමක් New Event නව හමුවක් JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button අවලංගු කරන්න Delete button මකා දමන්න QObject Manage calendar Event types Account settings Account පරිශීලක ගිණුම Select items to be synced Events General settings Sync interval Calendar account General පොදු First day of week Time Return Today Return අද Return Today Today Return Today අද ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: නම: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button අවලංගු කරන්න Save button සුරකින්න The name can not only contain whitespaces Enter a name please Shortcut Help උදව් Delete event හමුව මකා දමන්න Copy පිටපත් කරන්න Cut කපන්න Paste අලවන්න Delete මකන්න Select all සියල්ල ලකුණු කරන්න SidebarCalendarWidget Y වස M මස TimeJumpDialog Go button UserloginWidget Sign In button පුරනය වන්න Sign Out button ඉවත් වන්න YearFrame Y වර් today Today Today අද dde-calendar-5.14.13/translations/dde-calendar_sk.ts000066400000000000000000001457031473346337000223050ustar00rootroot00000000000000 AccountItem Sync successful Synchronizácia úspešná Network error Chyba siete Server exception Storage full Úložisko je plné AccountManager Local account Miestny účet Event types CColorPickerWidget Color Farba Cancel button Zrušiť Save button Uložiť CDayMonthView Monday Pondelok Tuesday Utorok Wednesday Streda Thursday Štvrtok Friday Piatok Saturday Sobota Sunday Nedeľa CDayWindow Y R M M D D Lunar Lunárny CGraphicsView New Event Nová udalosť CMonthScheduleNumItem %1 more ešte %1 CMonthView New event Nová udalosť New Event Nová udalosť CMonthWindow Y R CMyScheduleView My Event Moja udalosť OK button OK Delete button Vymazať Edit button Upraviť CPushButton New event type Nový typ udalosti CScheduleDlg New Event Nová udalosť Edit Event Upraviť udalosť End time must be greater than start time Čas ukončenia musí byť neskôr ako čas začiatku OK button OK Never Nikdy At time of event V čase udalosti 15 minutes before 15 minút pred 30 minutes before 30 minút pred 1 hour before 1 hodinu pred 1 day before 1 deň pred 2 days before 2 dni pred 1 week before 1 týždeň pred On start day (9:00 AM) V deň začiatku (9:00) time(s) krát Enter a name please Zadajte prosím meno The name can not only contain whitespaces Type: Typ: Description: Popis: All Day: Celý deň: Starts: Začína: Ends: Končí: Remind Me: Pripomenúť Repeat: Opakovať: End Repeat: Ukončiť opakovanie: Calendar account: Calendar account Type Typ Description Popis All Day Celý deň Time: Čas: Time Čas Solar Solárny Lunar Lunárny Starts Začína Ends Končí Remind Me Pripomenúť Repeat Opakovať Daily Denne Weekdays Pracovné dni Weekly Týždenne Monthly Mesačne Yearly Ročne End Repeat Ukončiť opakovanie After Po On Zapnuté Cancel button Zrušiť Save button Uložiť CScheduleOperation All occurrences of a repeating event must have the same all-day status. Všetky výskyty opakujúcej sa udalosti musia mať rovnaký celodenný stav. Do you want to change all occurrences? Chcete zmeniť všetky výskyty? Cancel button Zrušiť Change All Zmeniť všetky You are changing the repeating rule of this event. Meníte pravidlo opakovania tejto udalosti. You are deleting an event. Odstraňujete udalosť. Are you sure you want to delete this event? Naozaj chcete odstrániť túto udalosť? Delete button Vymazať Do you want to delete all occurrences of this event, or only the selected occurrence? Chcete odstrániť všetky výskyty tejto udalosti alebo iba vybratú udalosť? Delete All Vymazať všetko Delete Only This Event Vymazať iba túto udalosť Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Chcete odstrániť tento a všetky budúce výskyty tejto udalosti alebo iba vybratú udalosť? Delete All Future Events Vymazať všetky budúce udalosti You are changing a repeating event. Meníte opakujúcu sa udalosť. Do you want to change only this occurrence of the event, or all occurrences? Chcete zmeniť iba tento výskyt udalosti alebo všetky jej výskyty? All Všetky Only This Event Iba táto udalosť Do you want to change only this occurrence of the event, or this and all future occurrences? Chcete zmeniť iba tento výskyt udalosti alebo túto a aj všetky budúce udalosti? All Future Events Všetky budúce udalosti You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y R M M D D CScheduleSearchItem Edit Upraviť Delete Vymazať All Day Celý deň CScheduleSearchView No search results Žiadne výsledky vyhľadávania CScheduleView ALL DAY CELÝ DEŇ CSettingDialog Sunday Nedeľa Monday Pondelok Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 24-hodinový čas 12-hour clock 12-hodinový čas import ICS file Manual Ručné 15 mins 15 minút 30 mins 30 minút 1 hour 1 hodina 24 hours 24 hodín Sync Now Synchronizovať teraz Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 minút) (%1 hour) (%1 hodina) (%1 hours) (%1 hodín) CTitleWidget Y R M M W T D D Search events and festivals CWeekWidget Sun Ne Mon Po Tue Ut Wed St Thu Št Fri Pia Sat So CWeekWindow Week Týždeň Y R CYearScheduleView All Day Celý deň No event Žiadna udalosť CYearWindow Y R CalendarWindow Calendar Kalendár Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendár je nástroj na prezeranie dátumov a tiež inteligentný denný plánovač na plánovanie všetkých vecí v živote. Calendarmainwindow Calendar Kalendár Manage Spravovať Privacy Policy Zásady ochrany osobných údajov Syncing... Synchronizácia... Sync successful Synchronizácia úspešná Sync failed, please try later CenterWidget All Day Celý deň DAccountDataBase Work Práca Life Život Other Ostatné DAlarmManager Close button Zavrieť One day before start Jeden deň pred začiatkom Remind me tomorrow Pripomenúť zajtra Remind me later Pripomenúť neskôr 15 mins later o 15 minút neskôr 1 hour later o 1 hodinu neskôr 4 hours later o 4 hodiny neskôr Tomorrow Zajtra Schedule Reminder Nastaviť pripomienku %1 to %2 %1 do %2 Today Dnes DragInfoGraphicsView Edit Upraviť Delete Vymazať New event Nová udalosť New Event Nová udalosť JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Zrušiť Delete button Vymazať QObject Manage calendar Event types Account settings Nastavenia účtu Account Účet Select items to be synced Events Udalosti General settings Všeobecné nastavenia Sync interval Calendar account General Hlavné First day of week Prvý deň v týždni Time Čas Return Today Return Dnes Return Today Today Return Today Dnes ScheduleTypeEditDlg New event type Nový typ udalosti Edit event type Upraviť typ udalosti Import ICS file Name: Názov: Color: Farba: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> súbor: Cancel button Zrušiť Save button Uložiť The name can not only contain whitespaces Enter a name please Zadajte prosím meno Shortcut Help Nápoveda Delete event Vymazať udalosť Copy Kopírovať Cut Vystrihnúť Paste Prilepiť Delete Vymazať Select all Vybrať všetko SidebarCalendarWidget Y R M M TimeJumpDialog Go button Prejsť UserloginWidget Sign In button Prihlásiť sa Sign Out button Odhlásiť sa YearFrame Y R today Today Today Dnes dde-calendar-5.14.13/translations/dde-calendar_sl.ts000066400000000000000000001443661473346337000223120ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Barva Cancel button Prekliči Save button Shrani CDayMonthView Monday Ponedeljek Tuesday Torek Wednesday Sreda Thursday Četrtek Friday Petek Saturday Sobota Sunday Nedelja CDayWindow Y L M M D D Lunar CGraphicsView New Event Nov dogodek CMonthScheduleNumItem %1 more %1 več CMonthView New event Nov dogodek New Event Nov dogodek CMonthWindow Y L CMyScheduleView My Event Moj dogodek OK button V redu Delete button Izbriši Edit button Uredi CPushButton New event type CScheduleDlg New Event Nov dogodek Edit Event Uredi dogodek End time must be greater than start time Končni čas mora biti kasnejši od začetnega OK button V redu Never Nikoli At time of event Ob času dogodka 15 minutes before 15 minut prej 30 minutes before 30 minut prej 1 hour before 1 uro prej 1 day before 1 dan prej 2 days before 2 dni prej 1 week before 1 teden prej On start day (9:00 AM) Na dan dogodka (9:00) time(s) čas (s) Enter a name please The name can not only contain whitespaces Type: Vrsta: Description: Opis: All Day: Cel dan: Starts: Začetek: Ends: Konec: Remind Me: Opomnik: Repeat: Ponovi: End Repeat: Konec ponavljanj: Calendar account: Calendar account Type Vrsta Description Opis All Day Cel dan Time: Time Čas Solar Lunar Starts Začetek Ends Konec Remind Me Opomnik Repeat Ponovitev Daily Dnevno Weekdays Ob dnevih Weekly Tedensko Monthly Mesečno Yearly Letno End Repeat Konec ponavljanj After Po On Na Cancel button Prekini Save button Shrani CScheduleOperation All occurrences of a repeating event must have the same all-day status. Vsako pojavljanje ponavljajočega dogodka mora imeti enak celodnevni status. Do you want to change all occurrences? Želite spremeniti vsa pojavljanja? Cancel button Prekini Change All Spremeni vse You are changing the repeating rule of this event. Spreminjate ponavljajoče se pravilo za ta dogodek. You are deleting an event. Brišete dogodek. Are you sure you want to delete this event? Želite res izbrisati ta dogodek? Delete button Izbriši Do you want to delete all occurrences of this event, or only the selected occurrence? Želite izbrisati vsa pojavljanja tega dogodka, ali zgolj izbrana? Delete All Izbriši vse Delete Only This Event Izbriši le ta dogodek Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Želite izbrisati to in vsa ostala pojavljanja tega dogodka ali zgolj izbrana pojavljanja? Delete All Future Events Izbriši vse prihodnje dogodke You are changing a repeating event. Spreminjate ponavljajoči se dogodek. Do you want to change only this occurrence of the event, or all occurrences? Želite spremeniti le to pojavitev dogodka ali vsa pojavljanja? All Vse Only This Event Zgolj ta dogodek Do you want to change only this occurrence of the event, or this and all future occurrences? Ali želite spremeniti le ta pojav dogodka ali vse prihodnje pojave? All Future Events Vse prihodnje dogodke You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button V redu CScheduleSearchDateItem Y L M M D D CScheduleSearchItem Edit Uredi Delete Izbriši All Day Cel dan CScheduleSearchView No search results Ni rezultatov iskanja CScheduleView ALL DAY CEL DAN CSettingDialog Sunday Nedelja Monday Ponedeljek Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual Ročno 15 mins 30 mins 1 hour 1 ura 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y L M M W T D D Search events and festivals CWeekWidget Sun Ned Mon Pon Tue Tor Wed Sre Thu Čet Fri Pet Sat Sob CWeekWindow Week Teden Y L CYearScheduleView All Day Cel dan No event Ni dogodka CYearWindow Y L CalendarWindow Calendar Koledar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Koledar je orodje za prikaz datumov, a tudi pametni terminski planer za načrtovanje življenjskih dogodkov. Calendarmainwindow Calendar Koledar Manage Privacy Policy Pravilnik zasebnosti Syncing... Sinhronizacija... Sync successful Sync failed, please try later CenterWidget All Day Cel dan DAccountDataBase Work o Life ivljenje Other Ostalo DAlarmManager Close button Zapri One day before start Dan pred pričetkom Remind me tomorrow Opomni me jutri Remind me later Opomni me kasneje 15 mins later 1 hour later 4 hours later Tomorrow Jutri Schedule Reminder Nastavi opomnik %1 to %2 %1 do %2 Today Danes DragInfoGraphicsView Edit Uredi Delete Izbriši New event Nov dogodek New Event Nov dogodek JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Prekliči Delete button Izbriši QObject Manage calendar Event types Account settings Account Račun Select items to be synced Events General settings Sync interval Calendar account General Splošno First day of week Time Čas Return Today Return Danes Return Today Today Return Today Danes ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Ime: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Prekliči Save button Shrani The name can not only contain whitespaces Enter a name please Shortcut Help Pomoč Delete event Izbriši dogodek Copy Kopiraj Cut Izreži Paste Prilepi Delete Izbriši Select all Izberi vse SidebarCalendarWidget Y L M M TimeJumpDialog Go button UserloginWidget Sign In button Prijava Sign Out button Odjava YearFrame Y Y today Today Today Danes dde-calendar-5.14.13/translations/dde-calendar_sq.ts000066400000000000000000001477041473346337000223160ustar00rootroot00000000000000 AccountItem Sync successful Njëkohësim i suksesshëm Network error Gabim rrjeti Server exception Përjashtim në shërbyes Storage full Depozita plot AccountManager Local account Llogari vendore Event types Lloje veprimtarish CColorPickerWidget Color Ngjyrë Cancel button Anuloje Save button Ruaje CDayMonthView Monday E hënë Tuesday E martë Wednesday E mërkurë Thursday E enjte Friday E premte Saturday E shtunë Sunday E diel CDayWindow Y V M M D D Lunar Hënor CGraphicsView New Event Veprimtari e Re CMonthScheduleNumItem %1 more %1 më tepër CMonthView New event Veprimtari e re New Event Veprimtari e Re CMonthWindow Y V CMyScheduleView My Event Veprimtari e Imja OK button OK Delete button Fshije Edit button Përpunojeni CPushButton New event type Lloj veprimtarie të re CScheduleDlg New Event Veprimtari e Re Edit Event Përpunoni Veprimtari End time must be greater than start time Koha e përfundimit duhet të jetë më e madhe se koha e fillimit OK button OK Never Kurrë At time of event Në kohën e veprimtarisë 15 minutes before 15 minuta para 30 minutes before 30 minuta para 1 hour before 1 orë para 1 day before 1 ditë para 2 days before 2 ditë para 1 week before 1 javë para On start day (9:00 AM) Ditën e fillimit (9:00 AM) time(s) kohë() Enter a name please Ju lutemi, jepni një emër The name can not only contain whitespaces Emri s’mund të përmbajë vetëm hapësira të zbrazëta Type: Lloj: Description: Përshkrim: All Day: Tërë Ditën: Starts: Fillon më: Ends: Përfundon më: Remind Me: Kujtoma: Repeat: Përsërite: End Repeat: Përfundoje Përsëritjen Më: Calendar account: Llogari kalendari: Calendar account Llogari kalendari Type Lloj Description Përshkrim All Day Tërë Ditën Time: Kohë: Time Kohë Solar Diellore Lunar Hënore Starts Fillon më Ends Përfundon më Remind Me Kujtoma më Repeat Përsërite Daily Përditë Weekdays Ditë të javës Weekly Çdo javë Monthly Çdo muaj Yearly Çdo vit End Repeat Përfundoje Përsëritjen Më After Pas On Cancel button Anuloje Save button Ruaje CScheduleOperation All occurrences of a repeating event must have the same all-day status. Krejt rastet e një veprimtarie që përsëritet duhet të kenë të njëjtën gjendje gjithë-ditën. Do you want to change all occurrences? Doni të ndryshohen krejt përsëritjet? Cancel button Anuloje Change All Ndryshoji Krejt You are changing the repeating rule of this event. Po ndryshoni rregullin e përsëritjes së kësaj veprimtarie. You are deleting an event. Po fshini një veprimtari. Are you sure you want to delete this event? Jeni i sigurt se doni të fshihet kjo veprimtari? Delete button Fshije Do you want to delete all occurrences of this event, or only the selected occurrence? Doni të fshihen krejt përsëritjet e kësaj veprimtarie, apo vetëm përsëritjen e përzgjedhur? Delete All Fshiji Krejt Delete Only This Event Fshi Vetëm Këtë Veprimtari Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Doni të fshihet kjo dhe krejt përsëritjet në të ardhmen të kësaj veprimtarie, apo vetëm përsëritjen e përzgjedhur? Delete All Future Events Fshi Krejt Veprimtaritë e Ardhshme You are changing a repeating event. Po ndryshoni një veprimtari me përsëritje. Do you want to change only this occurrence of the event, or all occurrences? Doni të ndryshohet vetëm kjo përsëritje e veprimtarisë, apo krejt përsëritjet? All Krejt Only This Event Vetëm Këtë Veprimtari Do you want to change only this occurrence of the event, or this and all future occurrences? Doni të ndryshohet vetëm kjo përsëritje e veprimtarisë, apo këtë dhe krejt përsëritjet në të ardhmen? All Future Events Krejt Veprimtaritë e Ardhshme You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Keni përzgjedhur një muaj të brishtë dhe do t’ju kujtohet në përputhje me rregullat e kalendarit hënor. OK button OK CScheduleSearchDateItem Y V M M D D CScheduleSearchItem Edit Përpunojeni Delete Fshije All Day Tërë Ditën CScheduleSearchView No search results S’ka përfundime kërkimi CScheduleView ALL DAY TËRË DITËN CSettingDialog Sunday E diel Monday E hënë Tuesday Wednesday Thursday Friday Saturday Use System Setting Përdor Rregullime Sistemi 24-hour clock Sahat 24-orësh 12-hour clock Sahat 12-orësh import ICS file importo kartelë ICS Manual Dorazi 15 mins 15 min. 30 mins 30 min. 1 hour 1 orë 24 hours 24 orë Sync Now Njëkohësoje Tani Last sync Njëkohësimi i fundit më Please go to the <a href='/'>Control Center</a> to change system settings Që të ndryshoni rregullime sistemit, ju lutemi, kaloni te <a href='/'>Qendra e Kontrollit</a> CTimeEdit (%1 mins) (%1 min.) (%1 hour) (%1 orë) (%1 hours) (%1 orë) CTitleWidget Y V M M W J D D Search events and festivals Kërkoni në veprimtari dhe festivale CWeekWidget Sun Die Mon Hën Tue Mar Wed Mër Thu Enj Fri Pre Sat Sht CWeekWindow Week Javë Y V CYearScheduleView All Day Tërë Ditën No event S’ka veprimtari CYearWindow Y V CalendarWindow Calendar Kalendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendari është një mjet për parje datash, si dhe një planifikues i përditshëm për të vënë në plan krejt gjërat e jetës së përditshme. Calendarmainwindow Calendar Kalendar Manage Administrojeni Privacy Policy Rregulla Privatësie Syncing... Po njëkohësohet… Sync successful Njëkohësim i suksesshëm Sync failed, please try later Njëkohësimi dështoi, ju lutemi, provoni më vonë CenterWidget All Day Tërë Ditën DAccountDataBase Work Pune Life Shtëpie Other Tjetër DAlarmManager Close button Mbylle One day before start Një ditë para fillimit Remind me tomorrow Kujtoma nesër Remind me later Kujtoma më vonë 15 mins later pas 15 minutash 1 hour later pas 1 ore 4 hours later pas 4 orësh Tomorrow Nesër Schedule Reminder Kujtues Planesh %1 to %2 %1 deri më %2 Today Sot DragInfoGraphicsView Edit Përpunim Delete Fshije New event Veprimtari e re New Event Veprimtari e Re JobTypeListView export eksportim import ICS file importo kartelë ICS You are deleting an event type. Po fshini një lloj veprimtarish. All events under this type will be deleted and cannot be recovered. Krejt veprimtaritë nën këtë lloj do të fshihen dhe s’mund të rikthehen. Cancel button Anuloje Delete button Fshije QObject Manage calendar Administroni kalendar Event types Lloje veprimtarish Account settings Rregullime llogarie Account Llogari Select items to be synced Përzgjidhni objekte për t’u njëkohësuar Events Veprimtari General settings Rregullime të përgjithshme Sync interval Interval njëkohësimi Calendar account Llogari Kalendari General Të përgjithshme First day of week Ditën e parë të javës Time Kohë Return Today Return Sot Return Today Today Return Today Sot ScheduleTypeEditDlg New event type Lloj veprimtarie të re Edit event type Përpunoni lloj veprimtarie Import ICS file Importo kartelë ICS Name: Emër: Color: Ngjyrë: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Kartelë <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>: Cancel button Anuloje Save button Ruaje The name can not only contain whitespaces Emri s’mund të përmbajë vetëm hapësira të zbrazëta Enter a name please Ju lutemi, jepni një emër Shortcut Help Ndihmë Delete event Fshije veprimtarinë Copy Kopjoje Cut Prije Paste Ngjite Delete Fshije Select all Përzgjidhi krejt SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Jepi UserloginWidget Sign In button Hyni Sign Out button Dilni YearFrame Y V today Today Today Sot dde-calendar-5.14.13/translations/dde-calendar_sr.ts000066400000000000000000001473151473346337000223150ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Боја Cancel button Откажи Save button Сачувај CDayMonthView Monday Понедељак Tuesday Уторак Wednesday Среда Thursday Четвртак Friday Петак Saturday Субота Sunday Недеља CDayWindow Y Г M М D Д Lunar Лунарно CGraphicsView New Event Нови догађај CMonthScheduleNumItem %1 more Још %1 CMonthView New event Нови догађај New Event Нови догађај CMonthWindow Y Г CMyScheduleView My Event Мој догађај OK button У реду Delete button Обриши Edit button Уреди CPushButton New event type CScheduleDlg New Event Нови догађај Edit Event Уреди догађај End time must be greater than start time Крајње време мора бити након почетног OK button У реду Never Никад At time of event У време догађаја 15 minutes before 15 минута раније 30 minutes before 30 минута раније 1 hour before 1 сат раније 1 day before 1 дан раније 2 days before 2 дана раније 1 week before 1 седмица раније On start day (9:00 AM) На дан почетка (9:00 АМ) time(s) пут(а) Enter a name please The name can not only contain whitespaces Type: Врста: Description: Опис: All Day: Цео дан: Starts: Почетак: Ends: Крај: Remind Me: Подсетник: Repeat: Понови: End Repeat: Окончај: Calendar account: Calendar account Type Врста Description Опис All Day Цео дан Time: Time Време Solar Lunar Лунарно Starts Почетак Ends Крај Remind Me Подсетник Repeat Понови Daily Свакодневно Weekdays Радним данима Weekly Седмично Monthly Месечно Yearly Годишње End Repeat Окончај After Након On Укључ. Cancel button Откажи Save button Сачувај CScheduleOperation All occurrences of a repeating event must have the same all-day status. Све појаве понављајућег догађаја морају имати исти целодневни статус. Do you want to change all occurrences? Желите ли да промените све појаве? Cancel button Откажи Change All Промени све You are changing the repeating rule of this event. Мењате правило понављања овог догађаја. You are deleting an event. Бришете догађај. Are you sure you want to delete this event? Заиста желите да обришете овај догађај? Delete button Обриши Do you want to delete all occurrences of this event, or only the selected occurrence? Да ли желите да обришете све појаве овог догађаја или само изабрану ставку? Delete All Обриши све Delete Only This Event Обриши само овај догађај Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Желите ли да обришете ову и све будуће појаве овог догађаја или само изабрану ставку? Delete All Future Events Обриши све будуће догађаје You are changing a repeating event. Мењате понаљајући догађај. Do you want to change only this occurrence of the event, or all occurrences? Желите ли да промените само ову појаву догађаја или све? All Све Only This Event Само овај догађај Do you want to change only this occurrence of the event, or this and all future occurrences? Желите ли да промените ову појаву догађаја или ову појаву и све будуће појаве? All Future Events Сви будући догађаји You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button У реду CScheduleSearchDateItem Y Г M М D Д CScheduleSearchItem Edit Уреди Delete Обриши All Day Цео дан CScheduleSearchView No search results Нема резултата претраге CScheduleView ALL DAY ЦЕО ДАН CSettingDialog Sunday Недеља Monday Понедељак Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual Ручно 15 mins 30 mins 1 hour 1 сат 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Г M М W С D Д Search events and festivals CWeekWidget Sun Нед Mon Пон Tue уто Wed Сре Thu чет Fri Пет Sat Суб CWeekWindow Week Седмица Y Г CYearScheduleView All Day Цео дан No event Нема догађаја CYearWindow Y Г CalendarWindow Calendar Календар Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Календар је алат за приказ датума и паметани роковник за подсећање на све догађаје у животу. Calendarmainwindow Calendar Календар Manage Privacy Policy Политика приватности Syncing... Синхронизација... Sync successful Sync failed, please try later CenterWidget All Day Цео дан DAccountDataBase Work Посао Life Живот Other Остало DAlarmManager Close button Затвори One day before start Један дан пре пчетка Remind me tomorrow Подсети ме сутра Remind me later Подсети касније 15 mins later 1 hour later 4 hours later Tomorrow Сутра Schedule Reminder Подсетник догађаја %1 to %2 %1 до %2 Today Данас DragInfoGraphicsView Edit Уреди Delete Обриши New event Нови догађај New Event Нови догађај JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Откажи Delete button Обриши QObject Manage calendar Event types Account settings Account Налог Select items to be synced Events General settings Sync interval Calendar account General Опште First day of week Time Време Return Today Return Данас Return Today Today Return Today Данас ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Име: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Откажи Save button Сачувај The name can not only contain whitespaces Enter a name please Shortcut Help Помоћ Delete event Обриши догађај Copy Копирај Cut Исеци Paste Убаци Delete Обриши Select all Изабери све SidebarCalendarWidget Y Г M М TimeJumpDialog Go button UserloginWidget Sign In button Пријави се Sign Out button Одајави се YearFrame Y Г today Today Today Данас dde-calendar-5.14.13/translations/dde-calendar_th.ts000066400000000000000000001516731473346337000223060ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button ยกเลิก Save button บันทึก CDayMonthView Monday วันจันทร์ Tuesday วันอังคาร Wednesday วันพุธ Thursday วันพฤหัสบดี Friday วันศุกร์ Saturday วันศุกร์ Sunday วันอาทิตย์ CDayWindow Y M D Lunar CGraphicsView New Event กิจกรรมใหม่ CMonthScheduleNumItem %1 more อีก 1% CMonthView New event เหตุการณ์ใหม่ New Event กิจกรรมใหม่ CMonthWindow Y CMyScheduleView My Event กิจกรรมของฉัน OK button ตกลง Delete button ลบ Edit button แก้ไข CPushButton New event type CScheduleDlg New Event กิจกรรมใหม่ Edit Event แก้ไขกิจกรรม End time must be greater than start time เวลาสิ้นสุดต้องมากกว่าเวลาเริ่มต้น OK button ตกลง Never ไม่เคย At time of event ในช่วงเวลาของกิจกรรม 15 minutes before 15 นาทีก่อน 30 minutes before 30 นาทีก่อน 1 hour before 1 ชั่วโมงก่อน 1 day before 1 วันก่อน 2 days before 2 วันก่อน 1 week before 1 สัปดาห์ก่อน On start day (9:00 AM) ทําการในเวลา (09:00 น.) time(s) เวลา (s) Enter a name please The name can not only contain whitespaces Type: ประเภท: Description: รายละเอียด: All Day: ทั้งวัน: Starts: เริ่ม: Ends: สิ้นสุด: Remind Me: เตือนฉัน: Repeat: ทำซ้ำ: End Repeat: สิ้นสุดการทำซ้ำ: Calendar account: Calendar account Type ประเภท Description รายละเอียด All Day ทั้งวัน Time: Time Solar Lunar Starts เริ่ม Ends สิ้นสุด Remind Me เตือนฉัน Repeat ทำซ้ำ Daily ประจำวัน Weekdays วันธรรมดา Weekly รายสัปดาห์ Monthly รายเดือน Yearly รายปี End Repeat สิ้นสุดการทำซ้ำ After หลังจาก On Cancel button ยกเลิก Save button บันทึก CScheduleOperation All occurrences of a repeating event must have the same all-day status. กิจกรรมที่เกิดขึ้นซ้ำทั้งหมดต้องมีสถานะตลอดทั้งวันเหมือนกัน Do you want to change all occurrences? คุณต้องการเปลี่ยนกิจกรรมทั้งหมดหรือไม่? Cancel button ยกเลิก Change All เปลี่ยนทั้งหมด You are changing the repeating rule of this event. คุณกำลังเปลี่ยนกฎการทำซ้ำของกิจกรรมนี้ You are deleting an event. คุณกำลังลบกิจกรรม Are you sure you want to delete this event? คุณแน่ใจหรือไม่ว่าคุณต้องการที่จะลบกิจกรรมนี้ Delete button ลบ Do you want to delete all occurrences of this event, or only the selected occurrence? คุณต้องการลบกิจกรรมทั้งหมดที่เกิดขึ้นหรือเฉพาะกิจกรรมที่เลือกไว้หรือไม่ ? Delete All ลบทั้งหมด Delete Only This Event ลบเฉพาะกิจกรรมนี้ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? คุณต้องการลบกิจกรรมนี้และกิจกรรมที่จะเกิดขึ้นในอนาคตทั้งหมดหรือเฉพาะกิจกรรมที่เลือก ? Delete All Future Events ลบกิจกรรมในอนาคตทั้งหมด You are changing a repeating event. คุณกำลังเปลี่ยนกิจกรรมที่เกิดซ้ำ Do you want to change only this occurrence of the event, or all occurrences? คุณต้องการเปลี่ยนเฉพาะกิจกรรมนี้หรือกิจกรรมทั้งหมดหรือไม่ All ทั้งหมด Only This Event กิจกรรมนี้เท่านั้น Do you want to change only this occurrence of the event, or this and all future occurrences? คุณต้องการเปลี่ยนเฉพาะกิจกรรมที่เกิดขึ้นนี้หรือกิจกรรมนี้และกิจกรรมในอนาคตทั้งหมดหรือไม่ All Future Events กิจกรรมในอนาคตทั้งหมด You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button ตกลง CScheduleSearchDateItem Y M D CScheduleSearchItem Edit แก้ไข Delete ลบ All Day ทั้งวัน CScheduleSearchView No search results ไม่มีผลลัพธ์การค้นหา CScheduleView ALL DAY ทั้งวัน CSettingDialog Sunday วันอาทิตย์ Monday วันจันทร์ Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual แมนนวล 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y M W D Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week สัปดาห์ Y CYearScheduleView All Day ทั้งวัน No event ไม่มีกิจกรรม CYearWindow Y CalendarWindow Calendar ปฏิทิน Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ปฏิทินเป็นเครื่องมือในการดูวันที่และยังเป็นนักวางแผนรายวันที่ชาญฉลาดเพื่อกำหนดเวลาทุกสิ่งในชีวิต Calendarmainwindow Calendar ปฏิทิน Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day ทั้งวัน DAccountDataBase Work งาน Life ชีวิต Other อื่น ๆ DAlarmManager Close button ปิด One day before start Remind me tomorrow Remind me later 15 mins later 1 hour later 4 hours later Tomorrow Schedule Reminder %1 to %2 Today วันนี้ DragInfoGraphicsView Edit แก้ไข Delete ลบ New event กิจกรรมใหม่ New Event กิจกรรมใหม่ JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button ยกเลิก Delete button ลบ QObject Manage calendar Event types Account settings Account Select items to be synced Events General settings Sync interval Calendar account General ทั่วไป First day of week Time Return Today Return วันนี้ Return Today Today Return Today วันนี้ ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button ยกเลิก Save button บันทึก The name can not only contain whitespaces Enter a name please Shortcut Help วิธีใช้ Delete event ลบกิจกรรม Copy ทำสำเนา Cut ตัด Paste วาง Delete ลบ Select all เลือกทั้งหมด SidebarCalendarWidget Y M TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y today Today Today วันนี้ dde-calendar-5.14.13/translations/dde-calendar_tr.ts000066400000000000000000001470401473346337000223110ustar00rootroot00000000000000 AccountItem Sync successful Eşitleme başarılı Network error Ağ hatası Server exception Sunucu istisnası Storage full Hafıza dolu AccountManager Local account Yerel hesap Event types Etkinlik türleri CColorPickerWidget Color Renk Cancel button İptal Save button Kaydet CDayMonthView Monday Pazartesi Tuesday Salı Wednesday Çarşamba Thursday Perşembe Friday Cuma Saturday Cumartesi Sunday Pazar CDayWindow Y Y M A D G Lunar Ay CGraphicsView New Event Yeni Etkinlik CMonthScheduleNumItem %1 more %1 daha fazla CMonthView New event Yeni etkinlik New Event Yeni Etkinlik CMonthWindow Y Y CMyScheduleView My Event Etkinliğim OK button Tamam Delete button Sil Edit button Düzenle CPushButton New event type Yeni etkinlik türü CScheduleDlg New Event Yeni Etkinlik Edit Event Etkinliği Düzenle End time must be greater than start time Bitiş zamanı başlangıç ​​zamanından büyük olmalıdır OK button Tamam Never Asla At time of event Etkinlik anında 15 minutes before 15 dakika önce 30 minutes before 30 dakika önce 1 hour before 1 saat önce 1 day before 1 gün önce 2 days before 2 gün önce 1 week before 1 hafta önce On start day (9:00 AM) Başlangıç ​​gününde (09:00) time(s) zaman(lar) Enter a name please Lütfen bir ad girin The name can not only contain whitespaces Ad sadece boşluk karakterlerinden oluşamaz Type: Tür: Description: Açıklama: All Day: Tüm Gün: Starts: Başlangıç: Ends: Bitiş: Remind Me: Hatırlat: Repeat: Tekrar: End Repeat: Tekrar Sonu: Calendar account: Takvim hesabı: Calendar account Takvim hesabı Type Tür Description Açıklama All Day Tüm Gün Time: Zaman: Time Zaman Solar Güneş Lunar Ay Starts Başlangıç Ends Bitiş Remind Me Hatırlat Repeat Tekrar Daily Günlük Weekdays Hafta içi Weekly Haftalık Monthly Aylık Yearly Yıllık End Repeat Tekrar Sonu After Sonra On Açık Cancel button İptal Save button Kaydet CScheduleOperation All occurrences of a repeating event must have the same all-day status. Tekrarlanan bir etkinliğin tüm tekrarlamaları, tüm gün boyunca aynı duruma sahip olmalıdır. Do you want to change all occurrences? Tüm tekrarlamaları değiştirmek ister misiniz? Cancel button İptal Change All Tümünü Değiştir You are changing the repeating rule of this event. Bu etkinliğin tekrarlama kuralını değiştiriyorsunuz. You are deleting an event. Bir etkinliği siliyorsunuz. Are you sure you want to delete this event? Bu etkinliği silmek istediğinizden emin misiniz? Delete button Sil Do you want to delete all occurrences of this event, or only the selected occurrence? Bu olayın tüm tekrarlarını mı yoksa yalnızca seçilen olayı mı silmek istiyorsun? Delete All Tümünü Sil Delete Only This Event Yalnızca Bu Etkinliği Sil Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Bunu ve bu olayın gelecekteki tüm tekrarlarını mı yoksa yalnızca seçilen olayı mı silmek istiyorsunuz? Delete All Future Events Gelecekteki Tüm Etkinlikleri Sil You are changing a repeating event. Tekrarlanan bir etkinliği değiştiriyorsunuz. Do you want to change only this occurrence of the event, or all occurrences? Etkinliğin yalnızca bu tekrarlamasını mı yoksa tüm tekrarlamalarını mı değiştirmek istiyorsunuz? All Tümü Only This Event Sadece Bu Etkinlik Do you want to change only this occurrence of the event, or this and all future occurrences? Yalnızca etkinliğin bu etkinliğini mi, yoksa bunu ve gelecekteki tüm etkinlikleri değiştirmek istiyorsunuz? All Future Events Gelecekteki Tüm Etkinlikler You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Artık bir ay seçtiniz ve ay takvimi kurallarına göre hatırlatılacak. OK button Tamam CScheduleSearchDateItem Y Y M A D G CScheduleSearchItem Edit Düzenle Delete Sil All Day Tüm Gün CScheduleSearchView No search results Arama sonucu bulunamadı CScheduleView ALL DAY TÜM GÜN CSettingDialog Sunday Pazar Monday Pazartesi Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 24 saatlik zaman 12-hour clock 12 saatlik zaman import ICS file ICS dosyasını içeri aktar Manual Manuel 15 mins 15 Dakika 30 mins 30 Dakika 1 hour 1 Saat 24 hours 24 Saat Sync Now Şimdi senkronize et Last sync Son senkronizasyon Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 dakika) (%1 hour) (%1 saat) (%1 hours) (%1 saat) CTitleWidget Y Y M A W H D G Search events and festivals Etkinlikleri ve bayramları ara CWeekWidget Sun Pazar Mon Pazartesi Tue Salı Wed Çarşamba Thu Perşembe Fri Cuma Sat Cumartesi CWeekWindow Week Hafta Y Y CYearScheduleView All Day Tüm Gün No event Etkinlik yok CYearWindow Y Y CalendarWindow Calendar Takvim Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Takvim tarihleri ​​görüntülemek için bir araçtır ve aynı zamanda hayattaki her şeyi planlamak için akıllı bir günlük planlayıcısıdır. Calendarmainwindow Calendar Takvim Manage Yönet Privacy Policy Gizlilik Politikası Syncing... Eşitleniyor... Sync successful Senkronizasyon başarılı Sync failed, please try later Eşitleme başarısız, lütfen daha sonra deneyin CenterWidget All Day Tüm Gün DAccountDataBase Work Çalışma Life Yaşam Other Diğer DAlarmManager Close button Kapat One day before start Başlamadan bir gün önce Remind me tomorrow Bana yarın hatırlat Remind me later Bana daha sonra hatırlat 15 mins later 15 Dakika sonra 1 hour later 1 Saat sonra 4 hours later 4 Saat sonra Tomorrow Yarın Schedule Reminder Zamanlama hatırlatıcısı %1 to %2 %1 ila %2 Today Bugün DragInfoGraphicsView Edit Düzenle Delete Sil New event Yeni etkinlik New Event Yeni Etkinlik JobTypeListView export dışarı aktar import ICS file You are deleting an event type. Bir etkinlik türünü siliyorsunuz. All events under this type will be deleted and cannot be recovered. Bu türün altındaki etkinlikler silinir ve geri getirilemez. Cancel button İptal Delete button Sil QObject Manage calendar Takvimi yönet Event types Etkinlik türleri Account settings Hesap ayarları Account Hesap Select items to be synced Senkronize edilecek öğeyi seçin Events Etkinlikler General settings Genel ayarlar Sync interval Senkronizasyon aralığı Calendar account Takvim hesabı General Genel First day of week Haftanın ilk günü Time Zaman Return Today Return Bugün Return Today Today Return Today Bugün ScheduleTypeEditDlg New event type Yeni etkinlik türü Edit event type Etkinlik türünü düzenle Import ICS file ICS dosyasını içeri aktar Name: Ad: Color: Renk: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> Dosyası: Cancel button İptal Save button Kaydet The name can not only contain whitespaces Ad sadece boşluk karakterlerinden oluşamaz Enter a name please Lütfen bir ad girin Shortcut Help Yardım Delete event Etkinliği sil Copy Kopyala Cut Kes Paste Yapıştır Delete Sil Select all Tümünü seç SidebarCalendarWidget Y Y M A TimeJumpDialog Go button Git UserloginWidget Sign In button Giriş Sign Out button Çıkış YearFrame Y Y today Today Today Bugün dde-calendar-5.14.13/translations/dde-calendar_ug.ts000066400000000000000000001545361473346337000223070ustar00rootroot00000000000000 AccountItem Sync successful ماس قەدەملەندى Network error تور خاتالىقى Server exception مۇلازىمىتېر نورمالسىز Storage full بوشلۇق توشۇپ كەتتى AccountManager Local account يەرلىك ھېسابات Event types كۈنتەرتىپ تۈرى CColorPickerWidget Color رەڭ Cancel button بىكار قىلىش Save button ساقلاش CDayMonthView Monday دۈشەنبە Tuesday سەيشەنبە Wednesday چارشەنبە Thursday پەيشەنبە Friday جۈمە Saturday شەنبە Sunday يەكشەنبە CDayWindow Y يىلى M ئاي D كۈنى Lunar دېھقانلار كالېندارى CGraphicsView New Event يېڭى كۈنتەرتىپ قۇرۇش CMonthScheduleNumItem %1 more يەنە %1 تۈر بار CMonthView New event كۈنتەرتىپ قۇرۇش New Event يېڭى كۈنتەرتىپ قۇرۇش CMonthWindow Y يىلى CMyScheduleView My Event كۈنتەرتىپىم OK button تامام Delete button ئۆچۈرۈش Edit button تەھرىرلەش CPushButton New event type كۈنتەرتىپ تۈرى قوشۇش CScheduleDlg New Event كۈنتەرتىپ قۇرۇش Edit Event كۈنتەرتىپنى تەھرىرلەش End time must be greater than start time ئاخىرلىشىش ۋاقتى باشلىنىش ۋاقتىدىن كېيىن بولۇشى كېرەك OK button تامام Never ھەرگىز At time of event كۈتەرتىپ باشلانغاندا 15 minutes before 15 مىنۇت بۇرۇن 30 minutes before 30 مىنۇت بۇرۇن 1 hour before 1 سائەت بۇرۇن 1 day before 1 كۈن بۇرۇن 2 days before 2 كۈن بۇرۇن 1 week before 1 ھەپتە بۇرۇن On start day (9:00 AM) كۈنتەرتىپ باشلانغان كۈن (چۈشتىن بۇرۇن 9 دا) time(s) ۋاقىت Enter a name please نام قۇرۇق قالمىسۇن The name can not only contain whitespaces نامنىڭ ھەممىسى بوشلۇق بولسا بولمايدۇ، ئۆزگەرتىڭ Type: تۈرى: Description: مەزمۇنى: All Day: پۈتۈن كۈن: Starts: باشلىنىدىغان ۋاقىت: Ends: ئاخىرلىشىدىغان ۋاقىت: Remind Me: ئەسكەرتىش: Repeat: قايتىلاش: End Repeat: قايتىلاشنى ئاخىرلاشتۇرۇش: Calendar account: كالېندار ھېساباتى: Calendar account كالېندار ھېساباتى: Type تۈر Description مەزمۇن All Day پۈتۈن كۈن Time: ۋاقىت: Time ۋاقىت Solar مىلادىيە كالېندارى Lunar دېھقانلار كالېندارى Starts باشلىنىدىغان ۋاقىت Ends ئاخىرلىشىدىغان ۋاقىت Remind Me ئەسكەرتىش Repeat قايتىلاش Daily ھەر كۈنى Weekdays خىزمەت كۈنى Weekly ھەر ھەپتە Monthly ھەر ئاي Yearly ھەر يىلى End Repeat قايتىلاشنى ئاخىرلاشتۇرۇش After دىن On غىچە ۋاقىت Cancel button بىكار قىلىش Save button ساقلاش CScheduleOperation All occurrences of a repeating event must have the same all-day status. تەكرارلانغان كۈنتەرتىپتىكى بارلىق تەكرارلىنىش چوقۇم پۈتۈن كۈنلۈك ھالەتتە بولۇشى كېرەك. Do you want to change all occurrences? بارلىق تەكرارلاشلارنى ئۆزگەرتمەكچىمۇ؟ Cancel button بىكار قىلىش Change All ھەممىنى ئۆزگەرتىش You are changing the repeating rule of this event. كۈنتەرتىپنىڭ تەكرارلىنىش قائىدىسىنى ئۆزگەرتىۋاتىسىز. You are deleting an event. كۈنتەرتىپنى ئۆچۈرۈۋاتىسىز. Are you sure you want to delete this event? بۇ كۈنتەرتىپنى ئۆچۈرمەكچىمۇ؟ Delete button ئۆچۈرۈش Do you want to delete all occurrences of this event, or only the selected occurrence? بۇ كۈنتەرتىپتىكى بارلىق تەكرارلىنىشىنى ئۆچۈرەمسىز ياكى پەقەت تاللانغان تەكرارلاشلارنىلا ئۆچۈرەمسىز؟ Delete All ھەممىنى ئۆچۈرۈش Delete Only This Event مۇشۇنىلا ئۆچۈرۈرش Do you want to delete this and all future occurrences of this event, or only the selected occurrence? بۇ كۈنتەرتىپتىكى تەكرارلانغان ۋە كەلگۈسىدە تەكرارلىنىدىغانلىرى ئۆچۈرەمسىز ياكى تاللانغان تەكرارلاشنىلا ئۆچۈرەمسىز؟ Delete All Future Events بارلىق كۈنتەرتىپنى ئۆچۈرۈش You are changing a repeating event. قايتىلىنىدىغان كۈنتەرتىپنى ئۆزگەرتىۋاتىسىز. Do you want to change only this occurrence of the event, or all occurrences? بۇ كۈنتەرتىپتىكى بارلىق تەكرارلىنىشىنى ئۆزگەرتەمسىز ياكى پەقەت تاللانغان تەكرارلاشلارنىلا ئۆزگەرتەمسىز؟ All ھەممىنى Only This Event تاللانغىنىنى Do you want to change only this occurrence of the event, or this and all future occurrences? بۇ كۈنتەرتىپتىكى تەكرارلانغان ۋە كەلگۈسىدە تەكرارلىنىدىغانلىرى ئۆزگەرتەمسىز ياكى تاللانغان تەكرارلاشنىلا ئۆزگەرتەمسىز؟ All Future Events بارلىق كۈنتەرتىپلەر You have selected a leap month, and will be reminded according to the rules of the lunar calendar. تاللىغىنىڭىز كەبىسە ئېيى، دېھقانلار كالېندارى بويىچە ئەسكەرتىدۇ OK button جەزىملەشتۈرۈش CScheduleSearchDateItem Y يىل M ئاي D كۈن CScheduleSearchItem Edit تەھرىرلەش Delete ئۆچۈرۈش All Day پۈتۈن كۈن CScheduleSearchView No search results ئىزدەش نەتىجىسى تىپىلمىدى CScheduleView ALL DAY پۈتۈن كۈن CSettingDialog Sunday يەكشەنبە Monday دۈشەنبە Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 24 سائەتلىك 12-hour clock 12 سائەتلىك import ICS file Manual قولدا 15 mins ھەر 15 مىنۇتتا 30 mins ھەر 30 مىنۇتتا 1 hour ھەر 1 سائەتتە 24 hours ھەر 24 سائەتتە Sync Now ماس قەدەملەش Last sync يېقىنقى ماس قەدەملىگەن ۋاقىت Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 مىنۇت) (%1 hour) (%1 سائەت) (%1 hours) (%1 سائەت) CTitleWidget Y يىل M ئاي W ھەپتە D كۈن Search events and festivals كۈنتەرتىپ/بايرام ئىزدەش CWeekWidget Sun كۈن Mon دۈشەنبە Tue سەيشەنبە Wed چارشەنبە Thu پەيشەنبە Fri جۈمە Sat شەنبە CWeekWindow Week ھەپتە Y يىلى CYearScheduleView All Day پۈتۈن كۈن No event كۈنتەرتىپ يوق CYearWindow Y يىلى CalendarWindow Calendar كالېندار Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. كالېندار چېسلا كۆرۈش، كۈنتەرتىپ باشقۇرۇشتا ئىشلىتىلىدىغان كىچىك قورال. Calendarmainwindow Calendar كالېندار Manage باشقۇرۇش Privacy Policy شەخسىيەت سىياسىتى Syncing... ماس قەدەملەۋاتىدۇ... Sync successful ماس قەدەملەندى Sync failed, please try later ماس قەدەملەنمىدى، قايتا سىناڭ CenterWidget All Day پۈتۈن كۈن DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button تاقاش One day before start 1 كۈن بۇرۇن ئەسكەرتىش Remind me tomorrow ئەتە ئەسكەرتسۇن Remind me later بىر ئازدىن كېيىن ئەسكەرتىش 15 mins later 15 مىنۇتتىن كېيىن 1 hour later 1 سائەتىن كېيىن 4 hours later 4 سائەتىن كېيىن Tomorrow ئەتە Schedule Reminder كۈنتەرتىپ ئەسكەرتىشى %1 to %2 %1 دىن %2 گىچە Today Today DragInfoGraphicsView Edit تەھرىرلەش Delete ئۆچۈرۈش New event يېڭى كۈنتەرتىپ قۇرۇش New Event كۈنتەرتىپ قۇرۇش JobTypeListView export import ICS file You are deleting an event type. كۈنتەرت تۈرىنى ئۆچۈرۈۋاتىسىز. All events under this type will be deleted and cannot be recovered. بۇ كۈنتەرتىپ تۈرى ئاستىدىكى بارلىق كۈنتەرتىپ ئۆچۈرۈلىدۇ ھەمدە ئەسلىگە كەلتۈرگىلى بولمايدۇ Cancel button بىكار قىلىش Delete button ئۆچۈرۈش QObject Manage calendar كالېندار باشقۇرۇش Event types كالېندار تۈرى Account settings ھېسابات تەڭشىكى Account ھېسابات Select items to be synced ماس قەدەملەيدىغان تۈرلەرنى تەڭشەڭ Events كۈنتەرتىپ General settings ئادەتتىكى تەڭشەكلەر Sync interval ماس قەدەملەش چاستوتىسى Calendar account كالېندار ھېساباتى: General ئۇنىۋېرسال First day of week ھەپتە قايسى كۈندىن باشلانسۇن Time ۋاقىت Return Today Return بۈگۈنگە قايتىش Return Today Today Return Today بۈگۈنگە قايتىش ScheduleTypeEditDlg New event type كۈنتەرتىپ تۈرى قوشۇش Edit event type كۈنتەرتىپ تۈرىنى تەھرىرلەش Import ICS file Name: نامى: Color: رەڭ: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button بىكار قىلىش Save button ساقلاش The name can not only contain whitespaces نامنىڭ ھەممىسى بوشلۇق بولسا بولمايدۇ، ئۆزگەرتىڭ Enter a name please نام قۇرۇق قالمىسۇن Shortcut Help ياردەم Delete event كۈنتەرتىپنى ئۆچۈرۈش Copy كۆچۈرۈش Cut كېسىش Paste چاپلاش Delete ئۆچۈرۈش Select all ھەممىنى تاللاش SidebarCalendarWidget Y يىلى M ئاي TimeJumpDialog Go button ئاتلاش UserloginWidget Sign In button كىرىش Sign Out button چېكىنىش YearFrame Y يىلى today Today Today بۈگۈن dde-calendar-5.14.13/translations/dde-calendar_uk.ts000066400000000000000000001542211473346337000223020ustar00rootroot00000000000000 AccountItem Sync successful Успішна синхронізація Network error Помилка мережі Server exception Виключення сервера Storage full Переповнено сховище даних AccountManager Local account Локальний обліковий запис Event types Типи подій CColorPickerWidget Color Колір Cancel button Скасувати Save button Зберегти CDayMonthView Monday Понеділок Tuesday Вівторок Wednesday Середа Thursday Четвер Friday П'ятниця Saturday Субота Sunday Неділя CDayWindow Y Р M М D Д Lunar Місячний CGraphicsView New Event Нова подія CMonthScheduleNumItem %1 more і ще %1 CMonthView New event Нова подія New Event Нова подія CMonthWindow Y Р CMyScheduleView My Event Моя подія OK button Гаразд Delete button Вилучити Edit button Змінити CPushButton New event type Новий тип події CScheduleDlg New Event Нова подія Edit Event Редагування події End time must be greater than start time Кінцевий час не повинен передувати початковому часу OK button Гаразд Never Ніколи At time of event У момент події 15 minutes before За 15 хвилин до події 30 minutes before За 30 хвилин до події 1 hour before За годину до події 1 day before За день до події 2 days before За 2 дні до події 1 week before За тиждень до події On start day (9:00 AM) У день початку (9:00) time(s) раз(ів) Enter a name please Будь ласка, введіть назву The name can not only contain whitespaces Назва не може складатися лише з пробілів Type: Тип: Description: Опис: All Day: Весь день: Starts: Починається: Ends: Завершується: Remind Me: Нагадати мені: Repeat: Повторення: End Repeat: Завершити повтори: Calendar account: Обліковий запис календаря: Calendar account Обліковий запис календаря Type Тип Description Опис All Day Весь день Time: Час: Time Час Solar Сонячний Lunar Місячний Starts Починається Ends Кінці Remind Me Нагадати мені Repeat Повторення Daily Щодня Weekdays Дні тижня Weekly Щотижня Monthly Щомісяця Yearly Щорічно End Repeat Завершити повтори After Після On У Cancel button Скасувати Save button Зберегти CScheduleOperation All occurrences of a repeating event must have the same all-day status. В усіх повторень події має бути однаковий стан щодо заповнення подією усього дня. Do you want to change all occurrences? Хочете змінити усі повторення? Cancel button Скасувати Change All Змінити усі You are changing the repeating rule of this event. Ви змінюєте правило повторення цієї події. You are deleting an event. Ви вилучаєте запис події. Are you sure you want to delete this event? Ви впевнені, що бажаєте вилучити цей запис події? Delete button Вилучити Do you want to delete all occurrences of this event, or only the selected occurrence? Ви хочете вилучити усі повторення цієї події чи лише позначений запис? Delete All Вилучити всі Delete Only This Event Вилучити лише цей запис Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Ви хочете вилучити усі майбутні повторення цієї події чи лише позначені записи? Delete All Future Events Вилучити усі майбутні повторення You are changing a repeating event. Ви вносите зміни до повторюваної події. Do you want to change only this occurrence of the event, or all occurrences? Хочете змінити лише це повторення події чи усі повторення? All Усі Only This Event Лише цей запис Do you want to change only this occurrence of the event, or this and all future occurrences? Хочете змінити лише це повторення події чи усі майбутні повторення? All Future Events Усі майбутні повторення You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Вами вибрано високосний місяць. Вас буде попереджено відповідно до правил місячного календаря. OK button Гаразд CScheduleSearchDateItem Y Р M М D Д CScheduleSearchItem Edit Змінити Delete Вилучити All Day Весь день CScheduleSearchView No search results Нічого не знайдено CScheduleView ALL DAY УВЕСЬ ДЕНЬ CSettingDialog Sunday Неділя Monday Понеділок Tuesday Wednesday Thursday Friday Saturday Use System Setting Використати системні параметри 24-hour clock 24-годинний формат часу 12-hour clock 12-годинний формат часу import ICS file імпортувати файл ICS Manual Вручну 15 mins 15 хвилин 30 mins 30 хвилин 1 hour 1 година 24 hours 24 години Sync Now Синхронізувати зараз Last sync Остання синхронізація Please go to the <a href='/'>Control Center</a> to change system settings Будь ласка, перейдіть до <a href='/'>Центру керування</a>, щоб змінити параметри системи CTimeEdit (%1 mins) (%1 хв.) (%1 hour) (%1 год.) (%1 hours) (%1 год.) CTitleWidget Y Р M М W Т D Д Search events and festivals Шукати події та свята CWeekWidget Sun Нд Mon Пн Tue Вт Wed Ср Thu Чт Fri Пт Sat Сб CWeekWindow Week Тиждень Y Р CYearScheduleView All Day Весь день No event Немає події CYearWindow Y Р CalendarWindow Calendar Календар Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. «Календар» — інструмент для перегляду календаря дат, також чудовий планувальник для створення розкладів на кожен день. Calendarmainwindow Calendar Календар Manage Керувати Privacy Policy Правила конфіденційності Syncing... Синхронізація... Sync successful Успішна синхронізація Sync failed, please try later Помилка синхронізації. Будь ласка, повторіть спробу пізніше CenterWidget All Day Весь день DAccountDataBase Work Робота Life Життя Other Інше DAlarmManager Close button Закрити One day before start За день до початку Remind me tomorrow Нагадати мені завтра Remind me later Нагадати мені пізніше 15 mins later За 15 хвилин 1 hour later За 1 годину 4 hours later За 4 години Tomorrow Завтра Schedule Reminder Розклад нагадування %1 to %2 з %1 до %2 Today Сьогодні DragInfoGraphicsView Edit Редагувати Delete Видалити New event Нова подія New Event Нова подія JobTypeListView export експортувати import ICS file імпортувати файл ICS You are deleting an event type. Ви вилучаєте тип події. All events under this type will be deleted and cannot be recovered. Усі події цього типу буде вилучено, їх не можна буде відновити. Cancel button Скасувати Delete button Вилучити QObject Manage calendar Керувати календарем Event types Типи подій Account settings Параметри облікового запису Account Обліковий запис Select items to be synced Виберіть записи для синхронізації Events Події General settings Загальні параметри Sync interval Інтервал синхронізації Calendar account Обліковий запис календаря General Загальне First day of week Перший день тижня Time Час Return Today Return Сьогодні Return Today Today Return Today Сьогодні ScheduleTypeEditDlg New event type Новий тип події Edit event type Редагувати тип події Import ICS file Імпортувати файл ICS Name: Назва: Color: Колір: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Файл <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>: Cancel button Скасувати Save button Зберегти The name can not only contain whitespaces Назва не може складатися лише з пробілів Enter a name please Будь ласка, введіть назву Shortcut Help Допомога Delete event Вилучити подію Copy Копіювати Cut Вирізати Paste Вставити Delete Вилучити Select all Вибрати все SidebarCalendarWidget Y Р M М TimeJumpDialog Go button Перейти UserloginWidget Sign In button Увійти Sign Out button Вийти YearFrame Y Р today Today Today Сьогодні dde-calendar-5.14.13/translations/dde-calendar_vi.ts000066400000000000000000001462571473346337000223130ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button Hủy Save button Lưu CDayMonthView Monday Thứ hai Tuesday Thứ ba Wednesday Thứ tư Thursday Thứ năm Friday Thứ sáu Saturday Thứ bảy Sunday Chủ nhật CDayWindow Y Y M M D D Lunar CGraphicsView New Event Sự kiện mới CMonthScheduleNumItem %1 more thêm %1 CMonthView New event Sự kiện mới New Event Sự kiện mới CMonthWindow Y Y CMyScheduleView My Event Sự kiện của Tôi OK button OK Delete button Xóa Edit button Chỉnh sửa CPushButton New event type CScheduleDlg New Event Sự kiện mới Edit Event Chỉnh sửa Sự kiện End time must be greater than start time Thời gian kết thúc phải lớn hơn thời gian bắt đầu OK button OK Never Không bao giờ At time of event Vào thời điểm sự kiện 15 minutes before trước 15 phút 30 minutes before trước 30 phút 1 hour before 1 giờ trước 1 day before 1 ngày trước 2 days before 2 ngày trước 1 week before 1 tuần trước On start day (9:00 AM) Bắt đầu lúc (9:00 AM) time(s) thời gian(s) Enter a name please The name can not only contain whitespaces Type: Loại: Description: Mô tả: All Day: Tất cả các ngày: Starts: Bắt đầu: Ends: Kết thúc: Remind Me: Nhắc nhở tôi: Repeat: Lặp lại: End Repeat: Kết thúc lặp lại: Calendar account: Calendar account Type Loại Description Mô tả All Day Tất cả các ngày Time: Time Solar Lunar Starts Bắt đầu Ends Kết thúc Remind Me Nhắc nhở tôi Repeat Lặp lại Daily Hằng ngày Weekdays Các ngày trong tuần Weekly Hàng tuần Monthly Hàng tháng Yearly Hàng năm End Repeat Kết thúc lặp lại After Sau On Mở Cancel button Hủy Save button Lưu CScheduleOperation All occurrences of a repeating event must have the same all-day status. Tất cả các lần xuất hiện của một sự kiện lặp lại phải có cùng trạng thái ngày. Do you want to change all occurrences? Bạn có muốn thay đổi tất cả các lần xuất hiện? Cancel button Hủy Change All Thay đổi tất cả You are changing the repeating rule of this event. Bạn đang thay đổi quy tắc lặp lại của sự kiện này. You are deleting an event. Bạn đã xóa một sự kiện Are you sure you want to delete this event? Bạn có muốn xóa sự kiện này không Delete button Xóa Do you want to delete all occurrences of this event, or only the selected occurrence? Bạn có muốn xóa tất cả các lần xuất hiện của sự kiện này hay chỉ xảy ra sự kiện đã chọn? Delete All Xóa tất cả Delete Only This Event Chỉ xóa sự kiện này Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Bạn có muốn xóa sự kiện này và tất cả các lần xuất hiện trong tương lai của sự kiện này hay chỉ xảy ra sự kiện đã chọn? Delete All Future Events Xóa tất cả các sự kiện trong tương lai You are changing a repeating event. Bạn đang thay đổi một sự kiện lặp lại. Do you want to change only this occurrence of the event, or all occurrences? Bạn có muốn chỉ thay đổi sự xuất hiện của sự kiện này hay tất cả các sự kiện? All Tất cả Only This Event Chỉ sự kiện này Do you want to change only this occurrence of the event, or this and all future occurrences? Bạn có muốn chỉ thay đổi sự xuất hiện của sự kiện này, hoặc tất cả các lần xuất hiện trong tương lai? All Future Events Tất cả các sự kiện trong tương lai You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Chỉnh sửa Delete Xóa All Day Tất cả các ngày CScheduleSearchView No search results Không có kết quả tìm kiếm nào CScheduleView ALL DAY Tất cả các ngày CSettingDialog Sunday Chủ nhật Monday Thứ hai Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 12-hour clock import ICS file Manual Tự chỉnh 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Tuần Y Y CYearScheduleView All Day Tất cả các ngày No event Không có sự kiện nào CYearWindow Y Y CalendarWindow Calendar Lịch Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Lịch là một công cụ để xem ngày, và cũng là công cụ sắp xếp kế hoạch, sự kiện hàng ngày thông minh. Calendarmainwindow Calendar Lịch Manage Privacy Policy Chính sách bảo mật Syncing... Đồng bộ hóa... Sync successful Sync failed, please try later CenterWidget All Day Tất cả các ngày DAccountDataBase Work Công việc Life Cuộc sống Other Khác DAlarmManager Close button Đóng lại One day before start Một ngày trước khi bắt đầu Remind me tomorrow Nhắc tôi ngày mai Remind me later Nhắc tôi sau 15 mins later 1 hour later 4 hours later Tomorrow Ngày mai Schedule Reminder Lịch trình nhắc nhở %1 to %2 Today Hôm nay DragInfoGraphicsView Edit Chỉnh sửa Delete Xóa New event Sự kiện mới New Event Sự kiện mới JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Hủy Delete button Xóa QObject Manage calendar Event types Account settings Account Tài khoản Select items to be synced Events General settings Sync interval Calendar account General Tổng quát First day of week Time Return Today Return Hôm nay Return Today Today Return Today Hôm nay ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Tên: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Hủy Save button Lưu The name can not only contain whitespaces Enter a name please Shortcut Help Giúp đỡ Delete event Xóa sự kiện Copy Sao chép Cut Cắt Paste Dán Delete Xóa Select all Chọn tất cả SidebarCalendarWidget Y Y M M TimeJumpDialog Go button UserloginWidget Sign In button Đăng nhập Sign Out button Đăng xuất YearFrame Y Y today Today Today Hôm nay dde-calendar-5.14.13/translations/dde-calendar_zh_CN.ts000066400000000000000000001460121473346337000226630ustar00rootroot00000000000000 AccountItem Sync successful 同步成功 Network error 网络异常 Server exception 服务器异常 Storage full 存储已满 AccountManager Local account 本地帐户 Event types 日程类型 CColorPickerWidget Color 颜色 Cancel button 取 消 Save button 保 存 CDayMonthView Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六 Sunday 星期日 CDayWindow Y M D Lunar 农历 CGraphicsView New Event 新建日程 CMonthScheduleNumItem %1 more 还有%1项 CMonthView New event 新建日程 New Event 新建日程 CMonthWindow Y CMyScheduleView My Event 我的日程 OK button 确 定 Delete button 删 除 Edit button 编 辑 CPushButton New event type 新增日程类型 CScheduleDlg New Event 新建日程 Edit Event 编辑日程 End time must be greater than start time 结束时间需晚于开始时间 OK button 确 定 Never 从不 At time of event 日程开始时 15 minutes before 15分钟前 30 minutes before 30分钟前 1 hour before 1小时前 1 day before 1天前 2 days before 2天前 1 week before 1周前 On start day (9:00 AM) 日程发生当天(上午9点) time(s) 次后 Enter a name please 名称不能为空 The name can not only contain whitespaces 名称不能设置为全空格,请修改 Type: 类型: Description: 内容: All Day: 全天: Starts: 开始时间: Ends: 结束时间: Remind Me: 提醒: Repeat: 重复: End Repeat: 结束重复: Calendar account: 日历帐户: Calendar account 日历帐户 Type 类型 Description 内容 All Day 全天 Time: 时间: Time 时间 Solar 公历 Lunar 农历 Starts 开始时间 Ends 结束时间 Remind Me 提醒 Repeat 重复 Daily 每天 Weekdays 工作日 Weekly 每周 Monthly 每月 Yearly 每年 End Repeat 结束重复 After On 于日期 Cancel button 取 消 Save button 保 存 CScheduleOperation All occurrences of a repeating event must have the same all-day status. 重复日程的所有重复必须具有相同的全天状态。 Do you want to change all occurrences? 您要更改所有重复吗? Cancel button 取 消 Change All 全部更改 You are changing the repeating rule of this event. 您正在更改日程的重复规则。 You are deleting an event. 您正在删除日程。 Are you sure you want to delete this event? 您确定要删除此日程吗? Delete button 删 除 Do you want to delete all occurrences of this event, or only the selected occurrence? 您要删除此日程的所有重复,还是只删除所选重复? Delete All 全部删除 Delete Only This Event 仅删除此日程 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? 您要删除此日程的这个重复和所有将来重复,还是只删除所选重复? Delete All Future Events 删除所有将来日程 You are changing a repeating event. 您正在更改重复日程。 Do you want to change only this occurrence of the event, or all occurrences? 您要更改此日程的仅这一个重复,还是更改它的所有重复? All 全部日程 Only This Event 仅此日程 Do you want to change only this occurrence of the event, or this and all future occurrences? 您要更改此日程的这个重复和所有将来重复,还是只更改所选重复? All Future Events 所有将来日程 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. 您选择的是闰月,将按照农历规则提醒 OK button 确 定 CScheduleSearchDateItem Y M D CScheduleSearchItem Edit 编辑 Delete 删除 All Day 全天 CScheduleSearchView No search results 无搜索结果 CScheduleView ALL DAY 全天 CSettingDialog Sunday 周日 Monday 周一 Tuesday Wednesday Thursday Friday Saturday Use System Setting 跟随系统 24-hour clock 24小时制 12-hour clock 12小时制 import ICS file 导入ICS文件 Manual 手动 15 mins 每15分钟 30 mins 每30分钟 1 hour 每1小时 24 hours 每24小时 Sync Now 立即同步 Last sync 最近同步时间 Please go to the <a href='/'>Control Center</a> to change system settings 请到<a href='/'>控制中心</a>更改系统设置 CTimeEdit (%1 mins) (%1分钟) (%1 hour) (%1小时) (%1 hours) (%1小时) CTitleWidget Y M W D Search events and festivals 搜索日程/节日 CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Y CYearScheduleView All Day 全天 No event 无日程 CYearWindow Y CalendarWindow Calendar 日历 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 日历是一款查看日期、管理日程的小工具。 Calendarmainwindow Calendar 日历 Manage 管理 Privacy Policy 隐私政策 Syncing... 正在同步... Sync successful 同步成功 Sync failed, please try later 同步失败,请稍后再试 CenterWidget All Day 全天 DAccountDataBase Work 工作 Life 生活 Other 其他 DAlarmManager Close button 关 闭 One day before start 提前1天提醒 Remind me tomorrow 明天提醒 Remind me later 稍后提醒 15 mins later 15分钟后 1 hour later 1小时后 4 hours later 4小时后 Tomorrow 明天 Schedule Reminder 日程提醒 %1 to %2 %1 至 %2 Today 今天 DragInfoGraphicsView Edit 编辑 Delete 删除 New event 新建日程 New Event 新建日程 JobTypeListView export 导出 import ICS file 导入ICS文件 You are deleting an event type. 您正在删除日程类型。 All events under this type will be deleted and cannot be recovered. 此日程类型下的所有日程都会删除且不可恢复。 Cancel button 取 消 Delete button 删 除 QObject Manage calendar 日历管理 Event types 日程类型 Account settings 帐户设置 Account 帐户 Select items to be synced 设置您的同步项 Events 日程 General settings 通用设置 Sync interval 同步频率 Calendar account 日历帐户 General 通用 First day of week 每星期开始于 Time 时间 Return Today Return 返回今天 Return Today Today Return Today 返回今天 ScheduleTypeEditDlg New event type 新增日程类型 Edit event type 编辑日程类型 Import ICS file 导入ICS文件 Name: 名称: Color: 颜色: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>文件: Cancel button 取 消 Save button 保 存 The name can not only contain whitespaces 名称不能设置为全空格,请修改 Enter a name please 名称不能为空 Shortcut Help 帮助 Delete event 删除日程 Copy 复制 Cut 剪切 Paste 粘贴 Delete 删除 Select all 全选 SidebarCalendarWidget Y M TimeJumpDialog Go button 跳 转 UserloginWidget Sign In button 登 录 Sign Out button 退出登录 YearFrame Y today Today Today 今天 dde-calendar-5.14.13/translations/dde-calendar_zh_HK.ts000066400000000000000000001455111473346337000226700ustar00rootroot00000000000000 AccountItem Sync successful 同步成功 Network error 網絡異常 Server exception 伺服器異常 Storage full 存儲已滿 AccountManager Local account 本地帳戶 Event types 日程類型 CColorPickerWidget Color 顏色 Cancel button 取 消 Save button 保 存 CDayMonthView Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六 Sunday 星期日 CDayWindow Y M D Lunar 農曆 CGraphicsView New Event 新建日程 CMonthScheduleNumItem %1 more 還有%1項 CMonthView New event 新建日程 New Event 新建日程 CMonthWindow Y CMyScheduleView My Event 我的日程 OK button 確 定 Delete button 刪 除 Edit button 更 改 CPushButton New event type 新增日程類型 CScheduleDlg New Event 新建日程 Edit Event 更改日程 End time must be greater than start time 結束時間需晚於開始時間 OK button 確 定 Never 永不 At time of event 日程開始時 15 minutes before 15分鐘前 30 minutes before 30分鐘前 1 hour before 1小時前 1 day before 1天前 2 days before 2天前 1 week before 1週前 On start day (9:00 AM) 日程發生當天(上午9點) time(s) 次後 Enter a name please 名稱不能為空 The name can not only contain whitespaces 名稱不能設置為全空格,請修改 Type: 類型: Description: 描述: All Day: 全天: Starts: 開始時間: Ends: 結束時間: Remind Me: 提醒: Repeat: 重複: End Repeat: 結束重複: Calendar account: 日曆帳戶: Calendar account 日曆帳戶 Type 類型 Description 描述 All Day 全天 Time: 時間: Time 時間 Solar 公曆 Lunar 農曆 Starts 開始時間 Ends 結束時間 Remind Me 提醒 Repeat 重複 Daily 每天 Weekdays 工作日 Weekly 每週 Monthly 每月 Yearly 每年 End Repeat 結束重複 After On 於日期 Cancel button 取 消 Save button 保 存 CScheduleOperation All occurrences of a repeating event must have the same all-day status. 重複日程的所有重複必須具有相同的全天狀態。 Do you want to change all occurrences? 您要更改所有重複嗎? Cancel button 取 消 Change All 全部更改 You are changing the repeating rule of this event. 您正在更改日程的重複規則。 You are deleting an event. 您正在刪除日程。 Are you sure you want to delete this event? 您確定要刪除此日程嗎? Delete button 刪 除 Do you want to delete all occurrences of this event, or only the selected occurrence? 您要刪除此日程的所有重複,還是只刪除所選重複? Delete All 全部刪除 Delete Only This Event 僅刪除此日程 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? 您要刪除此日程的這個重複和所有將來重複,還是只刪除所選重複? Delete All Future Events 刪除所有將來日程 You are changing a repeating event. 您正在更改重複日程。 Do you want to change only this occurrence of the event, or all occurrences? 您要更改此日程的僅這一個重複,還是更改它的所有重複? All 全部日程 Only This Event 僅此日程 Do you want to change only this occurrence of the event, or this and all future occurrences? 您要更改此日程的這個重複和所有將來重複,還是只更改所選重複? All Future Events 所有將來日程 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. 您選擇的是閏月,將按照農曆規則提醒 OK button 確 定 CScheduleSearchDateItem Y M D CScheduleSearchItem Edit 更改 Delete 刪除 All Day 全天 CScheduleSearchView No search results 無搜索結果 CScheduleView ALL DAY 全天 CSettingDialog Sunday 週日 Monday 週一 Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 24小時制 12-hour clock 12小時制 import ICS file Manual 手動 15 mins 每15分鐘 30 mins 每30分鐘 1 hour 每1小時 24 hours 每24小時 Sync Now 立即同步 Last sync 最近同步時間 Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1分鐘) (%1 hour) (%1小時) (%1 hours) (%1小時) CTitleWidget Y M W D Search events and festivals 搜索日程/節日 CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Y CYearScheduleView All Day 全天 No event 無日程 CYearWindow Y CalendarWindow Calendar 日曆 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 日曆是一款查看日期、管理日程的小工具。 Calendarmainwindow Calendar 日曆 Manage 管理 Privacy Policy 私隱政策 Syncing... 正在同步... Sync successful 同步成功 Sync failed, please try later 同步失敗,請稍後再試 CenterWidget All Day 全天 DAccountDataBase Work 工作 Life 生活 Other 其他 DAlarmManager Close button 關 閉 One day before start 提前1天提醒 Remind me tomorrow 明天提醒 Remind me later 稍後提醒 15 mins later 15分鐘後 1 hour later 1小時後 4 hours later 4小時後 Tomorrow 明天 Schedule Reminder 日程提醒 %1 to %2 %1 至 %2 Today 今天 DragInfoGraphicsView Edit 更改 Delete 删除 New event 新建日程 New Event 新建日程 JobTypeListView export import ICS file You are deleting an event type. 您正在刪除日程類型。 All events under this type will be deleted and cannot be recovered. 此日程類型下的所有日程都會刪除且不可恢復。 Cancel button 取 消 Delete button 刪 除 QObject Manage calendar 日曆管理 Event types 日程類型 Account settings 帳戶設置 Account 賬戶 Select items to be synced 設置您的同步項 Events 日程 General settings 通用設置 Sync interval 同步頻率 Calendar account 日曆帳戶 General 通用 First day of week 每星期開始於 Time 時間 Return Today Return 今天 Return Today Today Return Today 今天 ScheduleTypeEditDlg New event type 新增日程類型 Edit event type 編輯日程類型 Import ICS file Name: 名稱: Color: 顏色: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button 取 消 Save button 保 存 The name can not only contain whitespaces 名稱不能設置為全空格,請修改 Enter a name please 名稱不能為空 Shortcut Help 幫助 Delete event 刪除日程 Copy 複製 Cut 剪下 Paste 黏貼 Delete 刪除 Select all 選擇全部 SidebarCalendarWidget Y M TimeJumpDialog Go button 跳 轉 UserloginWidget Sign In button 登 錄 Sign Out button 退出登錄 YearFrame Y today Today Today 今天 dde-calendar-5.14.13/translations/dde-calendar_zh_TW.ts000066400000000000000000001455031473346337000227210ustar00rootroot00000000000000 AccountItem Sync successful 同步成功 Network error 網路異常 Server exception 伺服器異常 Storage full 儲存已滿 AccountManager Local account 本機帳戶 Event types 日程類型 CColorPickerWidget Color 顏色 Cancel button 取 消 Save button 儲 存 CDayMonthView Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六 Sunday 星期日 CDayWindow Y M D Lunar 農曆 CGraphicsView New Event 建立日程 CMonthScheduleNumItem %1 more 還有%1項 CMonthView New event 建立日程 New Event 建立日程 CMonthWindow Y CMyScheduleView My Event 我的日程 OK button 確 定 Delete button 刪 除 Edit button 編 輯 CPushButton New event type 新增日程類型 CScheduleDlg New Event 建立日程 Edit Event 編輯日程 End time must be greater than start time 結束時間需晚於開始時間 OK button 確 定 Never 從不 At time of event 日程開始時 15 minutes before 15分鐘前 30 minutes before 30分鐘前 1 hour before 1小時前 1 day before 1天前 2 days before 2天前 1 week before 1週前 On start day (9:00 AM) 日程發生當天(上午9點) time(s) 次後 Enter a name please 名稱不能為空 The name can not only contain whitespaces 名稱不能設置為全空格,請修改 Type: 類型: Description: 內容: All Day: 全天: Starts: 開始時間: Ends: 結束時間: Remind Me: 提醒: Repeat: 重複: End Repeat: 結束重複: Calendar account: 日曆帳戶: Calendar account 日曆帳戶 Type 類型 Description 內容 All Day 全天 Time: 時間: Time 時間 Solar 公曆 Lunar 農曆 Starts 開始時間 Ends 結束時間 Remind Me 提醒 Repeat 重複 Daily 每天 Weekdays 工作日 Weekly 每週 Monthly 每月 Yearly 每年 End Repeat 結束重複 After On 於日期 Cancel button 取 消 Save button 儲 存 CScheduleOperation All occurrences of a repeating event must have the same all-day status. 重複日程的所有重複必須具有相同的全天狀態。 Do you want to change all occurrences? 您要更改所有重複嗎? Cancel button 取 消 Change All 全部更改 You are changing the repeating rule of this event. 您正在更改日程的重複規則。 You are deleting an event. 您正在刪除日程。 Are you sure you want to delete this event? 您確定要刪除此日程嗎? Delete button 刪 除 Do you want to delete all occurrences of this event, or only the selected occurrence? 您要刪除此日程的所有重複,還是只刪除所選重複? Delete All 全部刪除 Delete Only This Event 僅刪除此日程 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? 您要刪除此日程的這個重複和所有將來重複,還是只刪除所選重複? Delete All Future Events 刪除所有將來日程 You are changing a repeating event. 您正在更改重複日程。 Do you want to change only this occurrence of the event, or all occurrences? 您要更改此日程的僅這一個重複,還是更改它的所有重複? All 全部日程 Only This Event 僅此日程 Do you want to change only this occurrence of the event, or this and all future occurrences? 您要更改此日程的這個重複和所有將來重複,還是只更改所選重複? All Future Events 所有將來日程 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. 您選擇的是閏月,將按照農曆規則提醒 OK button 確 定 CScheduleSearchDateItem Y M D CScheduleSearchItem Edit 編輯 Delete 刪除 All Day 全天 CScheduleSearchView No search results 找不到結果 CScheduleView ALL DAY 全天 CSettingDialog Sunday 週日 Monday 週一 Tuesday Wednesday Thursday Friday Saturday Use System Setting 24-hour clock 24小時制 12-hour clock 12小時制 import ICS file Manual 手動 15 mins 每15分鐘 30 mins 每30分鐘 1 hour 每1小時 24 hours 每24小時 Sync Now 立即同步 Last sync 最近同步時間 Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1分鐘) (%1 hour) (%1小時) (%1 hours) (%1小時) CTitleWidget Y M W D Search events and festivals 搜尋日程/節日 CWeekWidget Sun Mon Tue Wed Thu Fri Sat CWeekWindow Week Y CYearScheduleView All Day 全天 No event 無日程 CYearWindow Y CalendarWindow Calendar 日曆 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 日曆是一款查看日期、管理日程的小工具。 Calendarmainwindow Calendar 日曆 Manage 管理 Privacy Policy 隱私政策 Syncing... 正在同步... Sync successful 同步成功 Sync failed, please try later 同步失敗,請稍後再試 CenterWidget All Day 全天 DAccountDataBase Work 工作 Life 生活 Other 其他 DAlarmManager Close button 關 閉 One day before start 提前1天提醒 Remind me tomorrow 明天提醒 Remind me later 稍後提醒 15 mins later 15分鐘後 1 hour later 1小時後 4 hours later 4小時後 Tomorrow 明天 Schedule Reminder 日程提醒 %1 to %2 %1 至 %2 Today 今天 DragInfoGraphicsView Edit 編輯 Delete 刪除 New event 建立日程 New Event 建立日程 JobTypeListView export import ICS file You are deleting an event type. 您正在刪除日程類型。 All events under this type will be deleted and cannot be recovered. 此日程類型下的所有日程都會刪除且不可恢復。 Cancel button 取 消 Delete button 刪 除 QObject Manage calendar 日曆管理 Event types 日程類型 Account settings 帳戶設定 Account 帳戶 Select items to be synced 設定您的同步項 Events 日程 General settings 一般設定 Sync interval 同步頻率 Calendar account 日曆帳戶 General 通用 First day of week 每星期開始於 Time 時間 Return Today Return 今天 Return Today Today Return Today 今天 ScheduleTypeEditDlg New event type 新增日程類型 Edit event type 編輯日程類型 Import ICS file Name: 名稱: Color: 顏色: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button 取 消 Save button 儲 存 The name can not only contain whitespaces 名稱不能設置為全空格,請修改 Enter a name please 名稱不能為空 Shortcut Help 幫助 Delete event 刪除日程 Copy 複製 Cut 剪下 Paste 貼上 Delete 刪除 Select all 全選 SidebarCalendarWidget Y M TimeJumpDialog Go button 跳 轉 UserloginWidget Sign In button 登 入 Sign Out button 退出登入 YearFrame Y today Today Today 今天 dde-calendar-5.14.13/translations/desktop/000077500000000000000000000000001473346337000203745ustar00rootroot00000000000000dde-calendar-5.14.13/translations/desktop/desktop.ts000066400000000000000000000010521473346337000224130ustar00rootroot00000000000000desktopCalendarCalendarCalendar is a date tool.Calendar is a date tool.Deepin CalendarDeepin Calendardde-calendar-5.14.13/translations/desktop/desktop_am_ET.ts000066400000000000000000000011151473346337000234600ustar00rootroot00000000000000desktopCalendarቀን መቁጠሪያCalendar is a date tool.ቀን መቁጠሪያDeepin Calendarዲፕኢን ቀን መቁጠሪያdde-calendar-5.14.13/translations/desktop/desktop_ar.ts000066400000000000000000000011221473346337000230730ustar00rootroot00000000000000desktopCalendarالتقويمCalendar is a date tool.التقويم هو أداة عرض التاريخ .Deepin Calendarتقويم ديبينdde-calendar-5.14.13/translations/desktop/desktop_ast.ts000066400000000000000000000010741473346337000232660ustar00rootroot00000000000000desktopCalendarCalendariuCalendar is a date tool.Calendariu ye una ferramienta de dates.Deepin CalendarDeepin Calendardde-calendar-5.14.13/translations/desktop/desktop_az.ts000066400000000000000000000010541473346337000231070ustar00rootroot00000000000000desktopCalendarKalendarCalendar is a date tool.Kalendar tarix alətidirDeepin CalendarDeepin Kalendarıdde-calendar-5.14.13/translations/desktop/desktop_bg.ts000066400000000000000000000011711473346337000230650ustar00rootroot00000000000000desktopCalendarКалендарCalendar is a date tool.Календарът е приложение за показване на датата.Deepin CalendarDeepin Календарdde-calendar-5.14.13/translations/desktop/desktop_bn.ts000066400000000000000000000012251473346337000230740ustar00rootroot00000000000000desktopCalendarক্যালেন্ডারCalendar is a date tool.ক্যালেন্ডার একটি তারিখ টুলDeepin Calendarডিপিন ক্যালেন্ডারdde-calendar-5.14.13/translations/desktop/desktop_bo.ts000066400000000000000000000013231473346337000230740ustar00rootroot00000000000000desktopCalendarལོ་ཐོ།Calendar is a date tool.ལོ་ཐོ་ནི་ཚེས་གྲངས་ལྟ་བའི་ཡོ་བྱད་ཆུང་ཆུང་ཞིག་རེད།Deepin Calendarགྲ་རྒྱས་པའི་ལོ་ཐོ།dde-calendar-5.14.13/translations/desktop/desktop_bqi.ts000066400000000000000000000010321473346337000232440ustar00rootroot00000000000000desktopCalendarmâši hêsāvCalendar is a date tool.Deepin Calendarvirga dipindde-calendar-5.14.13/translations/desktop/desktop_ca.ts000066400000000000000000000010731473346337000230610ustar00rootroot00000000000000desktopCalendarCalendariCalendar is a date tool.El calendari és una eina de cites.Deepin CalendarCalendari del Deepindde-calendar-5.14.13/translations/desktop/desktop_cs.ts000066400000000000000000000011011473346337000230730ustar00rootroot00000000000000desktopCalendarKalendářCalendar is a date tool.Kalendář je nástroj pro práci s datumy.Deepin CalendarDeepin kalendářdde-calendar-5.14.13/translations/desktop/desktop_da.ts000066400000000000000000000010571473346337000230640ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalender er et datoværktøj.Deepin CalendarDeepin kalenderdde-calendar-5.14.13/translations/desktop/desktop_de.ts000066400000000000000000000010621473346337000230640ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalender ist ein Datumswerkzeug.Deepin CalendarDeepin Kalenderdde-calendar-5.14.13/translations/desktop/desktop_de_DE.ts000066400000000000000000000011021473346337000234270ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalender ist ein Werkzeug für Datum und ZeitDeepin CalendarDeepin Kalenderdde-calendar-5.14.13/translations/desktop/desktop_el.ts000066400000000000000000000011221473346337000230710ustar00rootroot00000000000000desktopCalendarΗμερολόγιοCalendar is a date tool.Εφαρμογή Ημερολογίου Deepin CalendarΗμερολόγιο Deepindde-calendar-5.14.13/translations/desktop/desktop_en_AU.ts000066400000000000000000000010551473346337000234650ustar00rootroot00000000000000desktopCalendarCalendarCalendar is a date tool.Calendar is a date tool.Deepin CalendarDeepin Calendardde-calendar-5.14.13/translations/desktop/desktop_en_GB.ts000066400000000000000000000010541473346337000234470ustar00rootroot00000000000000desktopCalendarCalendarCalendar is a date tool.Calendar is a date toolDeepin CalendarDeepin Calendardde-calendar-5.14.13/translations/desktop/desktop_en_US.ts000066400000000000000000000010551473346337000235070ustar00rootroot00000000000000desktopCalendarCalendarCalendar is a date tool.Calendar is a date tool.Deepin CalendarDeepin Calendardde-calendar-5.14.13/translations/desktop/desktop_eo.ts000066400000000000000000000010531473346337000230770ustar00rootroot00000000000000desktopCalendarKalendaroCalendar is a date tool.Kalendaro estas datilo.Deepin CalendarDeepin kalendarodde-calendar-5.14.13/translations/desktop/desktop_es.ts000066400000000000000000000011301473346337000230770ustar00rootroot00000000000000desktopCalendarCalendarioCalendar is a date tool.Calendario de Deepin es una herramienta de gestión de eventos.Deepin CalendarCalendario de Deepindde-calendar-5.14.13/translations/desktop/desktop_et.ts000066400000000000000000000010631473346337000231050ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalender on kuupäeva tööriist.Deepin CalendarDeepin Kalenderdde-calendar-5.14.13/translations/desktop/desktop_fa.ts000066400000000000000000000011031473346337000230560ustar00rootroot00000000000000desktopCalendarتقویمCalendar is a date tool.تقویم یک ابزار تاریخ است.Deepin Calendarتقویم Deepindde-calendar-5.14.13/translations/desktop/desktop_fi.ts000066400000000000000000000010711473346337000230720ustar00rootroot00000000000000desktopCalendarKalenteriCalendar is a date tool.Kalenteri on ajankäytön apuohjelma.Deepin CalendarDeepin kalenteridde-calendar-5.14.13/translations/desktop/desktop_fr.ts000066400000000000000000000010501473346337000231000ustar00rootroot00000000000000desktopCalendarCalendrierCalendar is a date tool.Simple calendrier.Deepin CalendarCalendrier Deepindde-calendar-5.14.13/translations/desktop/desktop_gl_ES.ts000066400000000000000000000011051473346337000234630ustar00rootroot00000000000000desktopCalendarCalendarioCalendar is a date tool.O calendario é unha ferramenta de datas.Deepin CalendarCalendario do Deepindde-calendar-5.14.13/translations/desktop/desktop_hi_IN.ts000066400000000000000000000012401473346337000234600ustar00rootroot00000000000000desktopCalendarदिनदर्शिकाCalendar is a date tool.दिनदर्शिका तिथि हेतु एक साधन है।Deepin Calendarडीपिन दिनदर्शिकाdde-calendar-5.14.13/translations/desktop/desktop_hr.ts000066400000000000000000000010661473346337000231110ustar00rootroot00000000000000desktopCalendarKalendarCalendar is a date tool.Kalendar je alat za rad sa vremenom.Deepin CalendarDeepin kalendardde-calendar-5.14.13/translations/desktop/desktop_hu.ts000066400000000000000000000010751473346337000231140ustar00rootroot00000000000000desktopCalendarNaptárCalendar is a date tool.A Naptár egy dátum megjelenítő eszköz.Deepin CalendarDeepin® Naptárdde-calendar-5.14.13/translations/desktop/desktop_id.ts000066400000000000000000000010771473346337000230760ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalender adalah sebuah peralatan penanggalan.Deepin CalendarKalender Deepindde-calendar-5.14.13/translations/desktop/desktop_it.ts000066400000000000000000000011671473346337000231160ustar00rootroot00000000000000desktopCalendarCalendarioCalendar is a date tool.Calendario è un tool calendario. Localizzazione italiana a cura di Carofano Massimo Antonio.Deepin CalendarCalendario di Deepindde-calendar-5.14.13/translations/desktop/desktop_ja.ts000066400000000000000000000011121473346337000230620ustar00rootroot00000000000000desktopCalendarカレンダーCalendar is a date tool.カレンダーは日付ツールです。Deepin CalendarDeepin カレンダーdde-calendar-5.14.13/translations/desktop/desktop_ka.ts000066400000000000000000000012471473346337000230740ustar00rootroot00000000000000desktopCalendarკალენდარიCalendar is a date tool.კალენდარი არის თარიღებთან სამუშაო ხელსაწყოDeepin Calendarკალენდარიdde-calendar-5.14.13/translations/desktop/desktop_kab.ts000066400000000000000000000010521473346337000232300ustar00rootroot00000000000000desktopCalendarAwitayCalendar is a date tool.Awitay d afecku n wazemz.Deepin CalendarAwitay n Deepindde-calendar-5.14.13/translations/desktop/desktop_km_KH.ts000066400000000000000000000012171473346337000234670ustar00rootroot00000000000000desktopCalendarប្រតិទិនCalendar is a date tool.ប្រតិទិនគឺជាឧបករណ៍កាលបរិច្ឆេទ។Deepin Calendarប្រតិទិន Deepindde-calendar-5.14.13/translations/desktop/desktop_kn_IN.ts000066400000000000000000000012131473346337000234700ustar00rootroot00000000000000desktopCalendarCalendar is a date tool.ಕ್ಯಾಲೆಂಡರ್ ಒಂದು ದಿನದರ್ಶಕವಾಗಿದೆ.Deepin Calendarಡೀಪಿನ್ ಕ್ಯಾಲೆಂಡರ್dde-calendar-5.14.13/translations/desktop/desktop_ko.ts000066400000000000000000000010571473346337000231110ustar00rootroot00000000000000desktopCalendar달력Calendar is a date tool.달력은 날짜 도구입니다.Deepin CalendarDeepin 달력dde-calendar-5.14.13/translations/desktop/desktop_ku.ts000066400000000000000000000010611473346337000231120ustar00rootroot00000000000000desktopCalendarSalnameCalendar is a date tool.Salname navgîneke tarîxê ye.Deepin CalendarSalnameya Deepindde-calendar-5.14.13/translations/desktop/desktop_ku_IQ.ts000066400000000000000000000011141473346337000235020ustar00rootroot00000000000000desktopCalendarSalnameCalendar is a date tool.ساڵنامە ئامرازێکی بەروارەDeepin Calendarساڵنامەی Deepindde-calendar-5.14.13/translations/desktop/desktop_lt.ts000066400000000000000000000010671473346337000231200ustar00rootroot00000000000000desktopCalendarKalendoriusCalendar is a date tool.Kalendorius yra datų įrankis.Deepin CalendarDeepin kalendoriusdde-calendar-5.14.13/translations/desktop/desktop_lv.ts000066400000000000000000000010611473346337000231140ustar00rootroot00000000000000desktopCalendarKalendārsCalendar is a date tool.Kalendārs ir datumu rīks.Deepin CalendarDeepin kalendārsdde-calendar-5.14.13/translations/desktop/desktop_ml.ts000066400000000000000000000011711473346337000231050ustar00rootroot00000000000000desktopCalendarകലണ്ടർCalendar is a date tool.കലണ്ടർ ഒരു തീയതി ഉപകരണം ആണ് Deepin Calendarഡീപിൻ കലണ്ടർdde-calendar-5.14.13/translations/desktop/desktop_mn.ts000066400000000000000000000011441473346337000231070ustar00rootroot00000000000000desktopCalendarХуанлиCalendar is a date tool.Хуанли нь огноо, цагалбарын хэрэгсэл.Deepin CalendarДеепин Хуанлиdde-calendar-5.14.13/translations/desktop/desktop_ms.ts000066400000000000000000000010611473346337000231120ustar00rootroot00000000000000desktopCalendarKalendarCalendar is a date tool.Kalendar merupakan alat tarikh.Deepin CalendarKalendar Deepindde-calendar-5.14.13/translations/desktop/desktop_nb.ts000066400000000000000000000011371473346337000230760ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalander er et redskap for å organisere hendelser etter dato og klokkeslett.Deepin CalendarDeepin Kalenderdde-calendar-5.14.13/translations/desktop/desktop_ne.ts000066400000000000000000000012231473346337000230750ustar00rootroot00000000000000desktopCalendarक्यालेन्डरCalendar is a date tool.क्यालेन्डर एक मिति उपकरण हो।Deepin Calendarडिपिन क्यालेन्डरdde-calendar-5.14.13/translations/desktop/desktop_nl.ts000066400000000000000000000011161473346337000231050ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalender is een hulpmiddel voor het bijhouden van afspraken.Deepin CalendarDeepin Kalenderdde-calendar-5.14.13/translations/desktop/desktop_pa.ts000066400000000000000000000011501473346337000230720ustar00rootroot00000000000000desktopCalendarਕੈਲੰਡਰCalendar is a date tool.ਕੈਲੰਡਰ ਤਾਰੀਖ ਸਾਧਨ ਹੈ।Deepin Calendarਡੀਪਿਨ ਕੈਲੰਡਰdde-calendar-5.14.13/translations/desktop/desktop_pl.ts000066400000000000000000000011031473346337000231030ustar00rootroot00000000000000desktopCalendarKalendarzCalendar is a date tool.Kalendarz to narzędzie do zarządzania czasem.Deepin CalendarKalendarz Deepindde-calendar-5.14.13/translations/desktop/desktop_pt.ts000066400000000000000000000011001473346337000231100ustar00rootroot00000000000000desktopCalendarCalendárioCalendar is a date tool.O Calendário é uma ferramenta de data.Deepin CalendarCalendário Deepindde-calendar-5.14.13/translations/desktop/desktop_pt_BR.ts000066400000000000000000000010751473346337000235060ustar00rootroot00000000000000desktopCalendarCalendárioCalendar is a date tool.O Calendário é uma ferramenta de datas.Deepin CalendarCalendáriodde-calendar-5.14.13/translations/desktop/desktop_ro.ts000066400000000000000000000010751473346337000231200ustar00rootroot00000000000000desktopCalendarCalendarCalendar is a date tool.Calendarul este un instrument pentru dateDeepin CalendarCalendarul Deepindde-calendar-5.14.13/translations/desktop/desktop_ru.ts000066400000000000000000000012351473346337000231240ustar00rootroot00000000000000desktopCalendarКалендарьCalendar is a date tool.Календарь является приложением для планирования Вашего времени.Deepin CalendarКалендарь Deepindde-calendar-5.14.13/translations/desktop/desktop_si.ts000066400000000000000000000011451473346337000231110ustar00rootroot00000000000000desktopCalendarදින දසුනCalendar is a date tool.දින දසුන දින මෙවලමකි.Deepin CalendarDeepin දින දසුනdde-calendar-5.14.13/translations/desktop/desktop_sk.ts000066400000000000000000000010651473346337000231140ustar00rootroot00000000000000desktopCalendarKalendárCalendar is a date tool.Kalendár je dátumový nástroj.Deepin CalendarDeepin Kalendárdde-calendar-5.14.13/translations/desktop/desktop_sl.ts000066400000000000000000000010661473346337000231160ustar00rootroot00000000000000desktopCalendarKoledarCalendar is a date tool.Koledar je orodje za urejanje datumov.Deepin CalendarDeepin koledardde-calendar-5.14.13/translations/desktop/desktop_sq.ts000066400000000000000000000010651473346337000231220ustar00rootroot00000000000000desktopCalendarKalendarCalendar is a date tool.Kalendari është një mjet datash.Deepin CalendarKalendar Deepindde-calendar-5.14.13/translations/desktop/desktop_sr.ts000066400000000000000000000011561473346337000231240ustar00rootroot00000000000000desktopCalendarКалендарCalendar is a date tool.Календар је алат за приказивање датума.Deepin CalendarДипин Календарdde-calendar-5.14.13/translations/desktop/desktop_sv.ts000066400000000000000000000010601473346337000231220ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalender är ett datumverktyg.Deepin CalendarDeepin kalenderdde-calendar-5.14.13/translations/desktop/desktop_sw.ts000066400000000000000000000010561473346337000231300ustar00rootroot00000000000000desktopCalendarKalendaCalendar is a date tool.Kalenda ni chombo ya tareheDeepin CalendarKalenda ya Deepindde-calendar-5.14.13/translations/desktop/desktop_ta.ts000066400000000000000000000011651473346337000231040ustar00rootroot00000000000000desktopCalendarCalendar is a date tool.அட்டவணை தேதி கருவியாகும்Deepin Calendarடீபின் நாள்காட்டிdde-calendar-5.14.13/translations/desktop/desktop_tr.ts000066400000000000000000000010731473346337000231230ustar00rootroot00000000000000desktopCalendarTakvimCalendar is a date tool.Takvim, tarihi görüntüleyen bir araçtır.Deepin CalendarDeepin Takvimdde-calendar-5.14.13/translations/desktop/desktop_ug.ts000066400000000000000000000011621473346337000231100ustar00rootroot00000000000000desktopCalendarكالېندارCalendar is a date tool.كالېندار ۋاقىتنى تەكشۈرىدىغان كىچىك قورالDeepin CalendarDeepin كالېندارىdde-calendar-5.14.13/translations/desktop/desktop_uk.ts000066400000000000000000000010621473346337000231130ustar00rootroot00000000000000desktopCalendarКалендарCalendar is a date tool.КалендарDeepin CalendarКалендар Deepindde-calendar-5.14.13/translations/desktop/desktop_vi.ts000066400000000000000000000010671473346337000231170ustar00rootroot00000000000000desktopCalendarLịchCalendar is a date tool.Lịch là một công cụ ngày tháng.Deepin CalendarLịch Deepindde-calendar-5.14.13/translations/desktop/desktop_zh_CN.ts000066400000000000000000000010721473346337000234760ustar00rootroot00000000000000desktopCalendar日历Calendar is a date tool.日历是一款查看日期的小工具。Deepin Calendar深度日历dde-calendar-5.14.13/translations/desktop/desktop_zh_HK.ts000066400000000000000000000010721473346337000235000ustar00rootroot00000000000000desktopCalendar日曆Calendar is a date tool.日曆是一款查看日期的小工具。Deepin Calendar深度日曆dde-calendar-5.14.13/translations/desktop/desktop_zh_TW.ts000066400000000000000000000010511473346337000235250ustar00rootroot00000000000000desktopCalendar日曆Calendar is a date tool.簡易日期顯示工具Deepin CalendarDeepin 日曆dde-calendar-5.14.13/translations/release.sh000077500000000000000000000003331473346337000207010ustar00rootroot00000000000000#!/bin/bash # this file is used to auto-generate .qm file from .ts file. # author: shibowen at linuxdeepin.com ts_list=(`ls *.ts`) for ts in "${ts_list[@]}" do printf "\nprocess ${ts}\n" lrelease "${ts}" done dde-calendar-5.14.13/translations/update.sh000077500000000000000000000000561473346337000205450ustar00rootroot00000000000000#!/bin/bash lupdate ../ -ts -no-obsolete *.ts