@angadie/chittie-react-native 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ChittieReactNative.podspec +32 -0
- package/LICENSE +24 -0
- package/README.md +80 -0
- package/android/CMakeLists.txt +25 -0
- package/android/build.gradle +100 -0
- package/android/fix-prefab.gradle +37 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/cpp/cpp-adapter.cpp +6 -0
- package/android/src/main/java/com/margelo/nitro/chittie/HybridChittieRasterizer.kt +53 -0
- package/app.plugin.js +5 -0
- package/ios/HybridChittieRasterizer.swift +48 -0
- package/lib/commonjs/adapter.js +33 -0
- package/lib/commonjs/adapter.js.map +1 -0
- package/lib/commonjs/index.js +34 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/specs/ChittieRasterizer.nitro.js +6 -0
- package/lib/commonjs/specs/ChittieRasterizer.nitro.js.map +1 -0
- package/lib/module/adapter.js +29 -0
- package/lib/module/adapter.js.map +1 -0
- package/lib/module/index.js +25 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/specs/ChittieRasterizer.nitro.js +4 -0
- package/lib/module/specs/ChittieRasterizer.nitro.js.map +1 -0
- package/lib/typescript/src/adapter.d.ts +11 -0
- package/lib/typescript/src/adapter.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +15 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/specs/ChittieRasterizer.nitro.d.ts +23 -0
- package/lib/typescript/src/specs/ChittieRasterizer.nitro.d.ts.map +1 -0
- package/nitro.json +23 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/ChittieReactNative+autolinking.cmake +81 -0
- package/nitrogen/generated/android/ChittieReactNative+autolinking.gradle +27 -0
- package/nitrogen/generated/android/ChittieReactNativeOnLoad.cpp +54 -0
- package/nitrogen/generated/android/ChittieReactNativeOnLoad.hpp +34 -0
- package/nitrogen/generated/android/c++/JHybridChittieRasterizerSpec.cpp +58 -0
- package/nitrogen/generated/android/c++/JHybridChittieRasterizerSpec.hpp +63 -0
- package/nitrogen/generated/android/c++/JRasterBitmap.hpp +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/chittie/ChittieReactNativeOnLoad.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/chittie/HybridChittieRasterizerSpec.kt +54 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/chittie/RasterBitmap.kt +44 -0
- package/nitrogen/generated/ios/ChittieReactNative+autolinking.rb +60 -0
- package/nitrogen/generated/ios/ChittieReactNative-Swift-Cxx-Bridge.cpp +33 -0
- package/nitrogen/generated/ios/ChittieReactNative-Swift-Cxx-Bridge.hpp +54 -0
- package/nitrogen/generated/ios/ChittieReactNative-Swift-Cxx-Umbrella.hpp +48 -0
- package/nitrogen/generated/ios/ChittieReactNativeAutolinking.mm +33 -0
- package/nitrogen/generated/ios/ChittieReactNativeAutolinking.swift +26 -0
- package/nitrogen/generated/ios/c++/HybridChittieRasterizerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridChittieRasterizerSpecSwift.hpp +88 -0
- package/nitrogen/generated/ios/swift/HybridChittieRasterizerSpec.swift +55 -0
- package/nitrogen/generated/ios/swift/HybridChittieRasterizerSpec_cxx.swift +138 -0
- package/nitrogen/generated/ios/swift/RasterBitmap.swift +39 -0
- package/nitrogen/generated/shared/c++/HybridChittieRasterizerSpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridChittieRasterizerSpec.hpp +64 -0
- package/nitrogen/generated/shared/c++/RasterBitmap.hpp +91 -0
- package/package.json +77 -0
- package/src/adapter.ts +25 -0
- package/src/index.ts +27 -0
- package/src/specs/ChittieRasterizer.nitro.ts +21 -0
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@angadie/chittie-react-native",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "React Native (Nitro) backend for chittie: native non-Latin text rasterization (CoreText / android.graphics) implementing chittie's TextRasterizer. Dev-client / bare RN — not Expo Go.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "angadie",
|
|
7
|
+
"homepage": "https://github.com/octalpixel/chittie#readme",
|
|
8
|
+
"repository": "https://github.com/octalpixel/chittie.git",
|
|
9
|
+
"main": "./lib/commonjs/index.js",
|
|
10
|
+
"module": "./lib/module/index.js",
|
|
11
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
12
|
+
"react-native": "src/index",
|
|
13
|
+
"source": "src/index",
|
|
14
|
+
"files": [
|
|
15
|
+
"src",
|
|
16
|
+
"lib",
|
|
17
|
+
"nitrogen",
|
|
18
|
+
"nitro.json",
|
|
19
|
+
"android/build.gradle",
|
|
20
|
+
"android/CMakeLists.txt",
|
|
21
|
+
"android/gradle.properties",
|
|
22
|
+
"android/fix-prefab.gradle",
|
|
23
|
+
"android/src",
|
|
24
|
+
"ios/**/*.swift",
|
|
25
|
+
"app.plugin.js",
|
|
26
|
+
"*.podspec",
|
|
27
|
+
"README.md"
|
|
28
|
+
],
|
|
29
|
+
"keywords": [
|
|
30
|
+
"react-native",
|
|
31
|
+
"nitro",
|
|
32
|
+
"nitro-module",
|
|
33
|
+
"thermal-printer",
|
|
34
|
+
"escpos",
|
|
35
|
+
"chittie"
|
|
36
|
+
],
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"@angadie/chittie-text": ">=0.8.0",
|
|
39
|
+
"react": "*",
|
|
40
|
+
"react-native": "*",
|
|
41
|
+
"react-native-nitro-modules": "*"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@canvas/image-data": "^1.1.0",
|
|
45
|
+
"nitrogen": "0.35.1",
|
|
46
|
+
"react-native-builder-bob": "^0.40.18",
|
|
47
|
+
"react-native-nitro-modules": "0.35.1",
|
|
48
|
+
"tsx": "^4.19.2",
|
|
49
|
+
"typescript": "^5.7.2",
|
|
50
|
+
"@angadie/chittie-text": "0.8.0"
|
|
51
|
+
},
|
|
52
|
+
"publishConfig": {
|
|
53
|
+
"access": "public",
|
|
54
|
+
"registry": "https://registry.npmjs.org/"
|
|
55
|
+
},
|
|
56
|
+
"react-native-builder-bob": {
|
|
57
|
+
"source": "src",
|
|
58
|
+
"output": "lib",
|
|
59
|
+
"targets": [
|
|
60
|
+
"commonjs",
|
|
61
|
+
"module",
|
|
62
|
+
[
|
|
63
|
+
"typescript",
|
|
64
|
+
{
|
|
65
|
+
"project": "tsconfig.json"
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
"scripts": {
|
|
71
|
+
"codegen": "nitrogen --logLevel=\"debug\"",
|
|
72
|
+
"build": "tsc --noEmit && bob build",
|
|
73
|
+
"typecheck": "tsc --noEmit",
|
|
74
|
+
"test": "tsx spikes/adapter.spike.mts",
|
|
75
|
+
"clean": "rm -rf lib"
|
|
76
|
+
}
|
|
77
|
+
}
|
package/src/adapter.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { RasterOptions, TextRasterizer } from '@angadie/chittie-text';
|
|
2
|
+
import type { ChittieRasterizer } from './specs/ChittieRasterizer.nitro.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Adapt a native `ChittieRasterizer` HybridObject to chittie's `TextRasterizer`.
|
|
6
|
+
* The native side returns an RGBA bitmap (dims already padded to /8); we wrap it
|
|
7
|
+
* as the structural `ImageData` chittie's raster pipeline consumes. Pure and
|
|
8
|
+
* dependency-free at runtime (no Nitro import) — inject `native` so it's testable
|
|
9
|
+
* off-device.
|
|
10
|
+
*/
|
|
11
|
+
export function makeRasterizer(native: ChittieRasterizer): TextRasterizer {
|
|
12
|
+
return {
|
|
13
|
+
rasterize(text: string, options: RasterOptions = {}): ImageData {
|
|
14
|
+
const { fontSize = 24, maxWidth = 576, bold = false } = options;
|
|
15
|
+
const b = native.rasterize(text, fontSize, maxWidth, !!bold);
|
|
16
|
+
// RGBA, structural ImageData — chittie reads { data, width, height }.
|
|
17
|
+
return {
|
|
18
|
+
data: new Uint8ClampedArray(b.data),
|
|
19
|
+
width: b.width,
|
|
20
|
+
height: b.height,
|
|
21
|
+
colorSpace: 'srgb',
|
|
22
|
+
} as unknown as ImageData;
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { NitroModules } from 'react-native-nitro-modules';
|
|
2
|
+
import type { TextRasterizer } from '@angadie/chittie-text';
|
|
3
|
+
import type { ChittieRasterizer } from './specs/ChittieRasterizer.nitro.js';
|
|
4
|
+
import { makeRasterizer } from './adapter.js';
|
|
5
|
+
|
|
6
|
+
export { makeRasterizer } from './adapter.js';
|
|
7
|
+
export type { ChittieRasterizer, RasterBitmap } from './specs/ChittieRasterizer.nitro.js';
|
|
8
|
+
|
|
9
|
+
let cached: TextRasterizer | undefined;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The native chittie rasterizer (CoreText / android.graphics) as a chittie
|
|
13
|
+
* `TextRasterizer` — pass it to `render()` so Sinhala/Tamil/Arabic print on a
|
|
14
|
+
* device without Skia. Requires a dev client / bare RN (native module).
|
|
15
|
+
*
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { createNativeRasterizer } from '@angadie/chittie-react-native';
|
|
18
|
+
* const bytes = render(<Receipt/>, { dotWidth: 384, rasterizer: createNativeRasterizer() });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function createNativeRasterizer(): TextRasterizer {
|
|
22
|
+
if (!cached) {
|
|
23
|
+
const native = NitroModules.createHybridObject<ChittieRasterizer>('ChittieRasterizer');
|
|
24
|
+
cached = makeRasterizer(native);
|
|
25
|
+
}
|
|
26
|
+
return cached;
|
|
27
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* An RGBA bitmap. `width`/`height` are padded to multiples of 8 on the native
|
|
5
|
+
* side so chittie's ESC/POS raster packer (`padTo8`) is a no-op.
|
|
6
|
+
*/
|
|
7
|
+
export interface RasterBitmap {
|
|
8
|
+
data: ArrayBuffer;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Native text rasterizer — shapes a line with the platform text engine
|
|
15
|
+
* (CoreText on iOS, android.graphics on Android), which handles complex-script
|
|
16
|
+
* shaping (Sinhala/Tamil joining) and bidi (Arabic/Hebrew) for free.
|
|
17
|
+
*/
|
|
18
|
+
export interface ChittieRasterizer extends HybridObject<{ ios: 'swift'; android: 'kotlin' }> {
|
|
19
|
+
/** Render `text` to an RGBA bitmap (black on white), wrapped at `maxWidth` dots. */
|
|
20
|
+
rasterize(text: string, fontSize: number, maxWidth: number, bold: boolean): RasterBitmap;
|
|
21
|
+
}
|