blob: 918cb9067ea35de16481e06e355303e8ee8a4534 [file] [log] [blame]
// Copyright 2023 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package bridge
// #include <stdio.h>
// #include <stdlib.h>
// #include "../../cpp/bridge.h"
// #cgo LDFLAGS: -L../../../../out/Release/ -lbridge
import "C"
import (
"unsafe"
)
type CodeUnitFlags int
const (
kNoCodeUnitFlag CodeUnitFlags = 0x00
kPartOfWhiteSpaceBreak = 0x01
kGraphemeStart = 0x02
kSoftLineBreakBefore = 0x04
kHardLineBreakBefore = 0x08
kPartOfIntraWordBreak = 0x10
kControl = 0x20
kTabulation = 0x40
kGlyphClusterStart = 0x80
kIdeographic = 0x100
kEmoji = 0x200
kWordBreak = 0x400
kSentenceBreak = 0x800
)
type SkString struct {
ptr unsafe.Pointer
}
type IntPtr struct {
ptr unsafe.Pointer
}
func PerfComputeCodeunitFlags(text string) float64 {
cs := C.CString(text)
defer C.free(unsafe.Pointer(cs))
return float64(C.perf_compute_codeunit_flags(cs))
}
func GetFlags(index int) int {
return int(C.getFlags(C.int(index)))
}
func GetSentences(text string) []uint {
cs := C.CString(text)
defer C.free(unsafe.Pointer(cs))
var length C.int
var p = C.getSentences(cs, &length)
var result = make([]uint, length)
copy(result, unsafe.Slice((*uint)(unsafe.Pointer(p)), int(length)))
return result
}
func TrimSentence(text string, length *int, limit int) bool {
cs := C.CString(text)
defer C.free(unsafe.Pointer(cs))
var num C.int
result := C.trimSentence(cs, &num, C.int(limit))
*length = int(num)
return bool(result)
}
func FlagsToString(flags int) string {
result := ""
if (flags & kGraphemeStart) != 0 {
result += "G"
}
if (flags & kSoftLineBreakBefore) != 0 {
result += "S"
}
if (flags & kHardLineBreakBefore) != 0 {
result += "H"
}
if (flags & kPartOfWhiteSpaceBreak) != 0 {
result += "W"
}
if (flags & kWordBreak) != 0 {
result += "D"
}
if (flags & kControl) != 0 {
result += "C"
}
return result
}
func ToUpper(str string) SkString {
cs := C.CString(str)
defer C.free(unsafe.Pointer(cs))
return SkString{
ptr: C.toUpper(cs),
}
}
func InitUnicode(impl string) bool {
cs := C.CString(impl)
defer C.free(unsafe.Pointer(cs))
result := C.init_skunicode_impl(cs)
return bool(result)
}
func CleanupUnicode() {
C.cleanup_unicode_impl()
}