diff --git a/autotests/pythontest.py b/autotests/pythontest.py new file mode 100644 index 0000000..58079a3 --- /dev/null +++ b/autotests/pythontest.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +#-*- coding: utf-8 -*- + +from __future__ import print_function + +import sys + +sys.path.append(sys.argv[1]) + +from PyQt5 import QtCore +from PyQt5 import QtWidgets + +from PyKF5 import KCodecs + +def main(): + app = QtWidgets.QApplication(sys.argv) + + assert(KCodecs.KEmailAddress.isValidSimpleAddress("konqi@kde.org")) + assert(not KCodecs.KEmailAddress.isValidSimpleAddress("konqi")) + +if __name__ == '__main__': + sys.exit(main()) diff --git a/cmake/rules_PyKF5.py b/cmake/rules_PyKF5.py new file mode 100644 index 0000000..bfff5ef --- /dev/null +++ b/cmake/rules_PyKF5.py @@ -0,0 +1,64 @@ +# +# Copyright 2016 Stephen Kelly +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +import os, sys + +import rules_engine +sys.path.append(os.path.dirname(os.path.dirname(rules_engine.__file__))) +import Qt5Ruleset + +def local_container_rules(): + return [ + ["KCodecs", "Encoder", ".*", ".*", ".*", rules_engine.container_mark_abstract], + ["KCodecs", "Decoder", ".*", ".*", ".*", rules_engine.container_mark_abstract], + ["KCodecs", "Codec", ".*", ".*", ".*", rules_engine.container_mark_abstract], + ] + +def local_function_rules(): + return [ + + ["KCodecs::Codec", "encode", ".*", ".*", ".*char.*&.*", rules_engine.function_discard], + ["KCodecs::Codec", "decode", ".*", ".*", ".*char.*&.*", rules_engine.function_discard], + + ["KCodecs::Encoder", "encode", ".*", ".*", ".*char.*&.*", rules_engine.function_discard], + ["KCodecs::Encoder", "finish", ".*", ".*", ".*char.*&.*", rules_engine.function_discard], + ["KCodecs::Encoder", "write", ".*", ".*", ".*char.*&.*", rules_engine.function_discard], + ["KCodecs::Encoder", "writeCRLF", ".*", ".*", ".*char.*&.*", rules_engine.function_discard], + ["KCodecs::Encoder", "flushOutputBuffer", ".*", ".*", ".*char.*&.*", rules_engine.function_discard], + + ["KCodecs::Decoder", "decode", ".*", ".*", ".*char.*&.*", rules_engine.function_discard], + ["KCodecs::Decoder", "finish", ".*", ".*", ".*char.*&.*", rules_engine.function_discard], + + ["KCharsets", "codecForName", ".*", ".*", ".*bool &.*", rules_engine.function_discard], + ["KCharsets", "fromEntity", ".*", ".*", ".*int &.*", rules_engine.function_discard], + ] + +class RuleSet(Qt5Ruleset.RuleSet): + def __init__(self): + Qt5Ruleset.RuleSet.__init__(self) + self._fn_db = rules_engine.FunctionRuleDb(lambda: local_function_rules() + Qt5Ruleset.function_rules()) + self._container_db = rules_engine.ContainerRuleDb(lambda: local_container_rules() + Qt5Ruleset.container_rules()) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6723c3f..2505207 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,74 +1,93 @@ ecm_create_qm_loader(kcodecs_QM_LOADER kcodecs5_qt) set(kcodecs_SRCS kcharsets.cpp kcodecs.cpp kcodecsbase64.cpp kcodecsidentity.cpp kcodecsqp.cpp kcodecsuuencode.cpp kencodingprober.cpp kemailaddress.cpp probers/CharDistribution.cpp probers/ChineseGroupProber.cpp probers/JapaneseGroupProber.cpp probers/JpCntx.cpp probers/LangBulgarianModel.cpp probers/LangCyrillicModel.cpp probers/LangGreekModel.cpp probers/LangHebrewModel.cpp probers/LangHungarianModel.cpp probers/LangThaiModel.cpp probers/UnicodeGroupProber.cpp probers/nsBig5Prober.cpp probers/nsCharSetProber.cpp probers/nsEUCJPProber.cpp probers/nsEUCKRProber.cpp probers/nsEscCharsetProber.cpp probers/nsEscSM.cpp probers/nsGB2312Prober.cpp probers/nsHebrewProber.cpp probers/nsLatin1Prober.cpp probers/nsMBCSGroupProber.cpp probers/nsMBCSSM.cpp probers/nsSBCSGroupProber.cpp probers/nsSBCharSetProber.cpp probers/nsSJISProber.cpp probers/nsUniversalDetector.cpp ${kcodecs_QM_LOADER} ) add_library(KF5Codecs ${kcodecs_SRCS}) generate_export_header(KF5Codecs BASE_NAME KCodecs) add_library(KF5::Codecs ALIAS KF5Codecs) target_include_directories(KF5Codecs INTERFACE "$") target_link_libraries(KF5Codecs PUBLIC Qt5::Core) set_target_properties(KF5Codecs PROPERTIES VERSION ${KCODECS_VERSION_STRING} SOVERSION ${KCODECS_SOVERSION} EXPORT_NAME Codecs ) ecm_generate_headers(KCodecs_HEADERS HEADER_NAMES KCharsets KCodecs KEncodingProber KEmailAddress REQUIRED_HEADERS KCodecs_HEADERS ) +find_package(PythonModuleGeneration) + +if (PythonModuleGeneration_FOUND) + ecm_generate_python_binding( + TARGET KF5::Codecs + PYTHONNAMESPACE PyKF5 + MODULENAME KCodecs + RULES_FILE "${CMAKE_SOURCE_DIR}/cmake/rules_PyKF5.py" + INSTALL_DIR_SUFFIX ${KDE_INSTALL_PYTHONBINDINGSDIR} + SIP_DEPENDS + QtCore/QtCoremod.sip + HEADERS + kcharsets.h + kcodecs.h + kencodingprober.h + kemailaddress.h + ) +endif() + install(TARGETS KF5Codecs EXPORT KF5CodecsTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kcodecs_export.h ${KCodecs_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KCodecs COMPONENT Devel ) include(ECMGeneratePriFile) ecm_generate_pri_file(BASE_NAME KCodecs LIB_NAME KF5Codecs DEPS "core" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/KCodecs) install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})