Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/JakubSzark/zig-string

A String Library made for Zig
https://github.com/JakubSzark/zig-string

library simple string utf-8 zig zig-string

Last synced: about 2 months ago
JSON representation

A String Library made for Zig

Lists

README

        

[![CI](https://github.com/JakubSzark/zig-string/actions/workflows/main.yml/badge.svg)](https://github.com/JakubSzark/zig-string/actions/workflows/main.yml)

# Zig String (A UTF-8 String Library)

This library is a UTF-8 compatible **string** library for the **Zig** programming language.
I made this for the sole purpose to further my experience and understanding of zig.
Also it may be useful for some people who need it (including myself), with future projects. Project is also open for people to add to and improve. Please check the **issues** to view requested features.

# Basic Usage
```zig
const String = @import("./zig-string.zig").String;
// ...

// Use your favorite allocator
var arena = ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();

// Create your String
var myString = String.init(arena.allocator());
defer myString.deinit();

// Use functions provided
try myString.concat("πŸ”₯ Hello!");
_ = myString.pop();
try myString.concat(", World πŸ”₯");

// Success!
assert(myString.cmp("πŸ”₯ Hello, World πŸ”₯"));

```

# Installation
Add this to your build.zig.zon

```zig
.dependencies = .{
.string = .{
.url = "https://github.com/JakubSzark/zig-string/archive/refs/heads/master.tar.gz",
//the correct hash will be suggested by zig
}
}

```

And add this to you build.zig.zon

```zig
const string = b.dependency("string", .{
.target = target,
.optimize = optimize,
});
exe.addModule("string", string.module("string"));

```

You can then import the library into your code like this

```zig
const String = @import("string").String;
```

# Things needed
- Optimizations
- Multi-Language toUppercase & toLowercase
- Better documentation
- More Testing

# How to Contribute
1. Fork
2. Clone
3. Add Features (Use Zig FMT)
4. Make a Test
5. Pull Request
6. Success!

# Working Features
If there are any issues with complexity please open an issue
(I'm no expert when it comes to complexity)

Function | Description
--------------|------------------------------------------
allocate | Sets the internal buffer size
capacity | Returns the capacity of the String
charAt | Returns character at index
clear | Clears the contents of the String
clone | Copies this string to a new one
cmp | Compares to string literal
concat | Appends a string literal to the end
deinit | De-allocates the String
find | Finds first string literal appearance
rfind | Finds last string literal appearance
init | Creates a String with an Allocator
init_with_contents| Creates a String with specified contents
insert | Inserts a character at an index
isEmpty | Checks if length is zero
iterator | Returns a StringIterator over the String
len | Returns count of characters stored
pop | Removes the last character
remove | Removes a character at an index
removeRange | Removes a range of characters
repeat | Repeats string n times
reverse | Reverses all the characters
split | Returns a slice based on delimiters
splitToString | Returns a String based on delimiters
str | Returns the String as a slice
substr | Creates a string from a range
toLowercase | Converts (ASCII) characters to lowercase
toOwned | Creates an owned slice of the String
toUppercase | Converts (ASCII) characters to uppercase
trim | Removes whitelist from both ends
trimEnd | Remove whitelist from the end
trimStart | Remove whitelist from the start
truncate | Realloc to the length
writer | Returns a std.io.Writer for the String
starts_with | Determines if the given string begins with the given value
ends_with | Determines if the given string ends with the given value
replace | Replace all occurrences of the search string with the replacement string