Compare commits

..

No commits in common. "main" and "v0.0.1" have entirely different histories.
main ... v0.0.1

11 changed files with 30 additions and 68 deletions

View file

@ -1,6 +1,2 @@
## v0.0.2 (2023-08-30)
- add more tests
- optimalize the list processing
- disable dynamic linking to uutf
## v0.0.1 (2023-08-27) ## v0.0.1 (2023-08-27)
- add `split_string_by_unicode_codepoint` initially - add `split_string_by_unicode_codepoint` initially

View file

@ -1,4 +1,4 @@
Copyright 2023 Tan Kian-ting & Raphaël Proust Copyright 2023 Tan Kian-ting
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

View file

@ -5,7 +5,7 @@ Split a string to a list of strings of a character by the unicode codepoint.
It requires module Uutf. It requires module Uutf.
## Dependencies ## Dependencies
- OCaml >= 4.06 - OCaml >= 4.13
- dune - dune
- uutf - uutf
- fildlib - fildlib

View file

@ -1,8 +1,7 @@
(lang dune 3.9) (lang dune 3.9)
(cram enable)
(name stringCodepointSplitter) (name stringCodepointSplitter)
(version 0.0.2) (version 0.0.1)
(generate_opam_files true) (generate_opam_files true)
(source (source
@ -22,7 +21,7 @@
(description "Split a string to a list of strings of a character by the unicode codepoint. (description "Split a string to a list of strings of a character by the unicode codepoint.
It requires module Uutf.") It requires module Uutf.")
(depends (ocaml (>= 4.06)) ocamlfind dune uutf) (depends ocaml ocamlfind dune uutf)
(tags (string utf8))) (tags (string utf8)))
; See the complete stanza docs at https://dune.readthedocs.io/en/stable/dune-files.html#dune-project ; See the complete stanza docs at https://dune.readthedocs.io/en/stable/dune-files.html#dune-project

View file

@ -1,4 +1,4 @@
(library (library
(name stringCodepointSplitter) (name stringCodepointSplitter)
(public_name stringCodepointSplitter) (public_name stringCodepointSplitter)
(libraries uutf)) (libraries uutf findlib.dynload))

View file

@ -1,6 +1,6 @@
open Stdlib open Stdlib
(* (*
(c) 2023 Tan Kian-ting (main author) & Raphaël Proust (PR giver) (c) Tan Kian-ting 2023
Under MIT License Under MIT License
习包子 梁家河小学博士 清零宗 习炀帝 庆丰大帝 习包子 梁家河小学博士 清零宗 习炀帝 庆丰大帝
@ -13,6 +13,9 @@ Under MIT License
It only contains [split_string_by_unicode_codepoint], which splits an OCaml string [str] to a [string list] It only contains [split_string_by_unicode_codepoint], which splits an OCaml string [str] to a [string list]
*) *)
let _ = Findlib.init ();;
Fl_dynload.load_packages ["uutf"];;
(** Split an OCaml string [str] to a [string list] (** Split an OCaml string [str] to a [string list]
@ -33,22 +36,23 @@ let split_string_by_unicode_codepoint str =
(*Split a Ocaml string [str] to a `str list` *) (*Split a Ocaml string [str] to a `str list` *)
let pred_codepoint = ref (-1) in let pred_codepoint = ref (-1) in
let segmented_unit_list = ref [] in let segmented_unit_list = ref [] in
let iterator () y _ = let iterator x y _ =
let () = if !pred_codepoint > -1 then let _ = if !pred_codepoint > -1 then
let current_codepoint = y in let current_codepoint = y in
let pred_char_len = current_codepoint - !pred_codepoint in let pred_char_len = current_codepoint - !pred_codepoint in
let unit_substring = Stdlib.String.sub str !pred_codepoint pred_char_len in let unit_substring = Stdlib.String.sub x !pred_codepoint pred_char_len in
segmented_unit_list := unit_substring :: !segmented_unit_list let _ = segmented_unit_list := !segmented_unit_list @ [unit_substring] in
in unit_substring
let () = pred_codepoint := y in else
() "" in
in let _ = pred_codepoint := y in x in
let _ = Uutf.String.fold_utf_8 iterator () str in let _ = Uutf.String.fold_utf_8 iterator str str in
let last_char_len = (Stdlib.String.length str) - !pred_codepoint in let last_char_len = (Stdlib.String.length str) - !pred_codepoint in
let () =
if last_char_len > 0 then if last_char_len > 0 then
let unit_substring = Stdlib.String.sub str !pred_codepoint last_char_len in let unit_substring = Stdlib.String.sub str !pred_codepoint last_char_len in
segmented_unit_list := unit_substring :: !segmented_unit_list let _ = segmented_unit_list := !segmented_unit_list @ [unit_substring] in
in !segmented_unit_list
List.rev !segmented_unit_list;; else
!segmented_unit_list;;

View file

@ -1,6 +1,6 @@
# This file is generated by dune, edit dune-project instead # This file is generated by dune, edit dune-project instead
opam-version: "2.0" opam-version: "2.0"
version: "0.0.2" version: "0.0.1"
synopsis: synopsis:
"Split a string to a list of strings of a character by the unicode codepoint" "Split a string to a list of strings of a character by the unicode codepoint"
description: """ description: """
@ -13,7 +13,7 @@ tags: ["string" "utf8"]
homepage: "https://github.com/yoxem/stringCodepointSplitter" homepage: "https://github.com/yoxem/stringCodepointSplitter"
bug-reports: "https://github.com/Yoxem/stringCodepointSplitter/issues" bug-reports: "https://github.com/Yoxem/stringCodepointSplitter/issues"
depends: [ depends: [
"ocaml" {>= "4.06"} "ocaml"
"ocamlfind" "ocamlfind"
"dune" {>= "3.9"} "dune" {>= "3.9"}
"uutf" "uutf"

View file

@ -1,6 +1,2 @@
(executable (test
(libraries stringCodepointSplitter) (name stringCodepointSplitter))
(name stringCodepointSplitterTest))
(cram
(deps ./stringCodepointSplitterTest.exe))

View file

View file

@ -1,29 +0,0 @@
ASCII only
$ ./stringCodepointSplitterTest.exe abc
a
b
c
Still simple but not just ASCII
$ ./stringCodepointSplitterTest.exe «»
«
»
Example from the docstring of the lib
$ ./stringCodepointSplitterTest.exe "m̄知 who you're."
m
̄
w
h
o
y
o
u
'
r
e
.

View file

@ -1,4 +0,0 @@
let () =
Sys.argv.(1)
|> StringCodepointSplitter.split_string_by_unicode_codepoint
|> List.iter print_endline