Commit f6eaead1 authored by Yuanle Song's avatar Yuanle Song
Browse files

add pinyin_parser/ subproject.

it builds the libpinyin_parser.so python module.
parent 838323f7
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
 *
 * libpyzy - The Chinese PinYin and Bopomofo conversion library.
 *
 * Copyright (c) 2019 Yuanle Song <sylecn@gmail.com>
 * Copyright (c) 2008-2010 Peng Huang <shawn.p.huang@gmail.com>
 *
 * This library is free software; you can redistribute it and/or
@@ -139,7 +140,7 @@ PinyinParser::parse (const String &pinyin,

    result.clear ();

    if (G_UNLIKELY (len < 0))
    if (G_UNLIKELY (! len))
        len = pinyin.size ();

    p = pinyin;
@@ -316,7 +317,7 @@ PinyinParser::parseBopomofo (const std::wstring &bopomofo,

    result.clear ();

    if (G_UNLIKELY (len < 0))
    if (G_UNLIKELY (! len))
        len = bopomofo.length ();

    for (; bpmf < end && result.size () < max;) {
+2 −0
Original line number Diff line number Diff line
build/
pinyin_parser_wrap.c
+133 −0
Original line number Diff line number Diff line
# This file was automatically generated by SWIG (http://www.swig.org).
# Version 3.0.10
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.





from sys import version_info as _swig_python_version_info
if _swig_python_version_info >= (2, 7, 0):
    def swig_import_helper():
        import importlib
        pkg = __name__.rpartition('.')[0]
        mname = '.'.join((pkg, '_libpinyin_parser')).lstrip('.')
        try:
            return importlib.import_module(mname)
        except ImportError:
            return importlib.import_module('_libpinyin_parser')
    _libpinyin_parser = swig_import_helper()
    del swig_import_helper
elif _swig_python_version_info >= (2, 6, 0):
    def swig_import_helper():
        from os.path import dirname
        import imp
        fp = None
        try:
            fp, pathname, description = imp.find_module('_libpinyin_parser', [dirname(__file__)])
        except ImportError:
            import _libpinyin_parser
            return _libpinyin_parser
        if fp is not None:
            try:
                _mod = imp.load_module('_libpinyin_parser', fp, pathname, description)
            finally:
                fp.close()
            return _mod
    _libpinyin_parser = swig_import_helper()
    del swig_import_helper
else:
    import _libpinyin_parser
del _swig_python_version_info
try:
    _swig_property = property
except NameError:
    pass  # Python < 2.2 doesn't have 'property'.

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

def _swig_setattr_nondynamic(self, class_type, name, value, static=1):
    if (name == "thisown"):
        return self.this.own(value)
    if (name == "this"):
        if type(value).__name__ == 'SwigPyObject':
            self.__dict__[name] = value
            return
    method = class_type.__swig_setmethods__.get(name, None)
    if method:
        return method(self, value)
    if (not static):
        if _newclass:
            object.__setattr__(self, name, value)
        else:
            self.__dict__[name] = value
    else:
        raise AttributeError("You cannot add attributes to %s" % self)


def _swig_setattr(self, class_type, name, value):
    return _swig_setattr_nondynamic(self, class_type, name, value, 0)


def _swig_getattr(self, class_type, name):
    if (name == "thisown"):
        return self.this.own()
    method = class_type.__swig_getmethods__.get(name, None)
    if method:
        return method(self)
    raise AttributeError("'%s' object has no attribute '%s'" % (class_type.__name__, name))


def _swig_repr(self):
    try:
        strthis = "proxy of " + self.this.__repr__()
    except __builtin__.Exception:
        strthis = ""
    return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)

try:
    _object = object
    _newclass = 1
except __builtin__.Exception:
    class _object:
        pass
    _newclass = 0

class PinyinIndex(_object):
    __swig_setmethods__ = {}
    __setattr__ = lambda self, name, value: _swig_setattr(self, PinyinIndex, name, value)
    __swig_getmethods__ = {}
    __getattr__ = lambda self, name: _swig_getattr(self, PinyinIndex, name)
    __repr__ = _swig_repr
    __swig_setmethods__["shengmu_i"] = _libpinyin_parser.PinyinIndex_shengmu_i_set
    __swig_getmethods__["shengmu_i"] = _libpinyin_parser.PinyinIndex_shengmu_i_get
    if _newclass:
        shengmu_i = _swig_property(_libpinyin_parser.PinyinIndex_shengmu_i_get, _libpinyin_parser.PinyinIndex_shengmu_i_set)
    __swig_setmethods__["yunmu_i"] = _libpinyin_parser.PinyinIndex_yunmu_i_set
    __swig_getmethods__["yunmu_i"] = _libpinyin_parser.PinyinIndex_yunmu_i_get
    if _newclass:
        yunmu_i = _swig_property(_libpinyin_parser.PinyinIndex_yunmu_i_get, _libpinyin_parser.PinyinIndex_yunmu_i_set)

    def __init__(self):
        this = _libpinyin_parser.new_PinyinIndex()
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _libpinyin_parser.delete_PinyinIndex
    __del__ = lambda self: None
PinyinIndex_swigregister = _libpinyin_parser.PinyinIndex_swigregister
PinyinIndex_swigregister(PinyinIndex)


def parse(pinyin, pi):
    return _libpinyin_parser.parse(pinyin, pi)
parse = _libpinyin_parser.parse
# This file is compatible with both classic and new-style classes.

+40 −0
Original line number Diff line number Diff line
# -*- mode: conf -*-
project('pinyin_parser', ['cpp', 'c'],
  version: '1.0.0',
  license: 'EPL-2.0',
  default_options: [
    'warning_level=2',
    'werror=true',
    'buildtype=release'])

add_project_arguments(
  '-Wno-unused-parameter',
  '-Wno-missing-field-initializers',
  '-DHAVE_LIBUUID',
  '-std=c++11',
  language: 'cpp')

glib = dependency('glib-2.0')
uuid = dependency('uuid')
shared_dep = [glib, uuid]

lib_src = [
  '../PinyinParser.cc',
  'pinyin_parser.cpp',
  'pinyin_parser_wrap.c']
shared_library('pinyin_parser',
  lib_src,
  dependencies: [shared_dep, dependency('python3')],
  install: true, install_dir: '/home/sylecn/c/gtk-im-module/sogou/')

main_src = [
  '../PinyinParser.cc',
  'pinyin_parser_main.cpp']
executable('main', main_src, dependencies: shared_dep)

test_src = [
  '../PinyinParser.cc',
  'pinyin_parser.cpp',
  'pinyin_parser_test.cpp']
test('libpinyin_parser-test',
  executable('libtest', test_src, dependencies: shared_dep))
+21 −0
Original line number Diff line number Diff line
#include <iostream>
#include <cstring>
#include "../PinyinArray.h"
#include "../PinyinParser.h"

#include "pinyin_parser.h"

void
parse(const char* pinyin, PinyinIndex* pi)
{
	if (pi == NULL) return;
	PyZy::PinyinArray pyar = {0};
	PyZy::PinyinParser::parse(pinyin, strlen(pinyin), 0, pyar, 1);
	if (pyar.size()) {
		pi->shengmu_i = (int) pyar[0].pinyin->pinyin_id[0].sheng;
		pi->yunmu_i = (int) pyar[0].pinyin->pinyin_id[0].yun;
	} else {
		pi->shengmu_i = -1;
		pi->yunmu_i = -1;
	}
}
Loading