// Copyright 2026 International Digital Economy Academy
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
///|
/// Generated from refs/harfbuzz/src/hb-ot-shaper-indic-table.cc.
///
let indic_table : Array[UInt] = [
3584U, 3584U, 3584U, 3584U, 3584U, 1034U, 3584U, 3584U, 1034U, 1034U, 1034U, 1034U,
1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3385U, 3385U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3584U, 1034U, 3336U, 3336U, 3336U, 3336U, 1026U, 1026U, 1026U, 1026U,
1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U,
1026U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1039U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 2311U, 2311U, 3587U, 3345U, 2311U, 519U, 2311U, 2311U, 2311U, 2311U,
2311U, 2311U, 2311U, 2311U, 2311U, 2311U, 2311U, 2311U, 2311U, 2052U, 519U, 2311U,
3584U, 3337U, 3337U, 3336U, 3336U, 2311U, 2311U, 2311U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1026U, 1026U, 2311U, 2311U, 3584U, 3584U, 1034U, 1034U,
1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 3584U, 3584U, 1026U, 1026U,
1026U, 1026U, 1026U, 1026U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1034U, 3336U, 3336U, 3336U, 3584U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U,
1026U, 3584U, 3584U, 1026U, 1026U, 3584U, 3584U, 1026U, 1026U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 3584U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1039U, 3584U, 1025U, 3584U, 3584U, 3584U, 1025U, 1025U, 1025U, 1025U, 3584U, 3584U,
3587U, 3345U, 3079U, 519U, 3079U, 2311U, 2311U, 2311U, 2311U, 3584U, 3584U, 519U,
519U, 3584U, 3584U, 3079U, 3079U, 2052U, 1025U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3584U, 3079U, 3584U, 3584U, 3584U, 3584U, 1025U, 1025U, 3584U, 1025U,
1026U, 1026U, 2311U, 2311U, 3584U, 3584U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U,
1034U, 1034U, 1034U, 1034U, 1039U, 1025U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3584U, 3584U, 1034U, 3584U, 3336U, 3584U, 3584U, 3336U, 3336U, 3336U,
3584U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 3584U, 3584U, 3584U, 3584U, 1026U,
1026U, 3584U, 3584U, 1026U, 1026U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 3584U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1039U, 3584U, 1025U, 1025U,
3584U, 1025U, 1025U, 3584U, 1025U, 1025U, 3584U, 3584U, 3587U, 3584U, 3079U, 519U,
3085U, 3079U, 3079U, 3584U, 3584U, 3584U, 3584U, 3079U, 3079U, 3584U, 3584U, 3079U,
3079U, 2052U, 3584U, 3584U, 3584U, 2055U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 1025U, 1025U, 1025U, 1025U, 3584U, 1025U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U,
3336U, 3336U, 1025U, 1025U, 3584U, 1040U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3584U, 3584U, 3584U, 3336U, 3336U, 3336U, 3584U, 1026U, 1026U, 1026U,
1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 3584U, 1026U, 1026U, 1026U, 3584U, 1026U,
1026U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 3584U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1039U, 3584U, 1025U, 1025U, 3584U, 1025U, 1025U, 1025U,
1025U, 1025U, 3584U, 3584U, 3587U, 3345U, 3079U, 519U, 3079U, 3079U, 3079U, 3079U,
3079U, 2311U, 3584U, 2311U, 2311U, 3079U, 3584U, 3079U, 3079U, 2052U, 3584U, 3584U,
3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3584U, 3584U, 1026U, 1026U, 3079U, 3079U, 3584U, 3584U, 1034U, 1034U,
1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3584U, 3584U, 3584U, 1025U, 3337U, 3587U, 3337U, 3587U, 3587U, 3587U,
3584U, 1800U, 3336U, 3336U, 3584U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U,
1026U, 3584U, 3584U, 1026U, 1026U, 3584U, 3584U, 1026U, 1026U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 3584U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1039U, 3584U, 1025U, 1025U, 3584U, 1025U, 1025U, 1025U, 1025U, 1025U, 3584U, 3584U,
3587U, 3345U, 3079U, 1287U, 3079U, 2311U, 2311U, 2311U, 2311U, 3584U, 3584U, 519U,
1287U, 3584U, 3584U, 3079U, 3079U, 2052U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3587U, 1287U, 3079U, 3584U, 3584U, 3584U, 3584U, 1025U, 1025U, 3584U, 1025U,
1026U, 1026U, 2311U, 2311U, 3584U, 3584U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U,
1034U, 1034U, 1034U, 1034U, 3584U, 1025U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3336U, 3584U,
3584U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 3584U, 3584U, 3584U, 1026U, 1026U,
1026U, 3584U, 1026U, 1026U, 1026U, 1025U, 3584U, 3584U, 3584U, 1025U, 1025U, 3584U,
1025U, 3584U, 1025U, 1025U, 3584U, 3584U, 3584U, 1025U, 1025U, 3584U, 3584U, 3584U,
1025U, 1025U, 1025U, 3584U, 3584U, 3584U, 1025U, 1025U, 1039U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 3584U, 3584U, 3584U, 3584U, 3079U, 3079U,
2311U, 3079U, 3079U, 3584U, 3584U, 3584U, 519U, 519U, 519U, 3584U, 3079U, 3079U,
3079U, 1540U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3079U,
3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U,
3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3584U, 3584U, 3336U, 3336U, 3336U, 3336U, 3336U, 1026U, 1026U, 1026U,
1026U, 1026U, 1026U, 1026U, 1026U, 3584U, 1026U, 1026U, 1026U, 3584U, 1026U, 1026U,
1026U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 3584U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1039U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 3584U, 3584U, 3587U, 3345U, 1799U, 1799U, 1799U, 1799U, 1799U, 2311U,
2311U, 3584U, 1799U, 1799U, 1799U, 3584U, 1799U, 1799U, 1799U, 1540U, 3584U, 3584U,
3584U, 3584U, 3584U, 3584U, 3584U, 1799U, 1799U, 3584U, 1025U, 1025U, 1025U, 3584U,
3584U, 1025U, 3584U, 3584U, 1026U, 1026U, 1799U, 1799U, 3584U, 3584U, 1034U, 1034U,
1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
1034U, 3336U, 3336U, 3336U, 3584U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U,
1026U, 3584U, 1026U, 1026U, 1026U, 3584U, 1026U, 1026U, 1026U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 3584U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1039U, 1025U, 1025U, 1025U, 3584U, 1025U, 1025U, 1025U, 1025U, 1025U, 3584U, 3584U,
3587U, 3345U, 1799U, 1799U, 1799U, 1799U, 1799U, 2311U, 2311U, 3584U, 1799U, 2311U,
2311U, 3584U, 2311U, 2311U, 1799U, 1540U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 2311U, 2311U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 1025U, 1025U, 3584U,
1026U, 1026U, 1799U, 1799U, 3584U, 3584U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U,
1034U, 1034U, 1034U, 1034U, 3584U, 1042U, 1042U, 3336U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3336U, 3336U, 3336U, 3336U,
1034U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 3584U, 1026U, 1026U,
1026U, 3584U, 1026U, 1026U, 1026U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1039U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 2311U, 2311U, 3345U, 3079U, 3079U,
3079U, 3079U, 3079U, 3079U, 3079U, 3584U, 519U, 519U, 519U, 3584U, 3079U, 3079U,
3079U, 1540U, 3598U, 3584U, 3584U, 3584U, 3584U, 3584U, 1025U, 1025U, 1025U, 3079U,
3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 1026U, 1026U, 1026U, 3079U, 3079U,
3584U, 3584U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U,
3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1039U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1039U, 1025U, 1025U, 1025U, 1025U,
1025U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 2839U,
2839U, 1556U, 1556U, 2069U, 2069U, 790U, 3337U, 1556U, 1556U, 1556U, 3337U, 3587U,
3336U, 3588U, 3616U, 3622U, 3620U, 3621U, 3619U, 1025U, 1034U, 1034U, 1034U, 1034U,
1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 3584U, 3584U, 1025U, 3584U,
1025U, 1025U, 1026U, 1026U, 1026U, 1026U, 2839U, 2839U, 2069U, 2069U, 1039U, 1025U,
1025U, 1025U, 3622U, 3622U, 3625U, 1025U, 2839U, 3623U, 3623U, 1025U, 1025U, 2839U,
2839U, 3623U, 3623U, 3623U, 3623U, 3623U, 1025U, 1025U, 1025U, 1556U, 1556U, 1556U,
1556U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 3621U, 2839U, 790U, 1556U, 1556U, 3336U, 3336U, 3336U, 3336U, 3336U,
3336U, 3336U, 1025U, 3336U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U,
1034U, 1034U, 3336U, 3336U, 3336U, 1556U, 3584U, 3584U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1039U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1026U, 1026U, 1026U, 1026U, 1026U,
1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U, 1026U,
3584U, 3584U, 2839U, 1556U, 1556U, 1556U, 1556U, 2069U, 2069U, 2069U, 1556U, 2839U,
2839U, 790U, 790U, 790U, 2839U, 2839U, 3610U, 3611U, 3611U, 3609U, 3609U, 3610U,
3609U, 3610U, 3610U, 3610U, 3610U, 3610U, 3588U, 3611U, 3584U, 3584U, 3584U, 3584U,
3584U, 1034U, 3584U, 3584U, 3345U, 3611U, 3584U, 3584U, 1034U, 1034U, 1034U, 1034U,
1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3337U, 3337U, 3337U, 3584U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U,
3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U,
3337U, 3345U, 3345U, 3345U, 3345U, 3337U, 3345U, 3345U, 3345U, 3345U, 1025U, 1025U,
3337U, 1025U, 1025U, 3337U, 3337U, 3337U, 1034U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3584U, 3584U, 3589U, 3590U, 3584U, 3584U, 1034U, 1034U, 1034U, 1034U,
1034U, 1034U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 1034U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3385U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U,
3584U, 3584U, 3385U, 3385U, 3385U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 1034U,
1034U, 1034U, 1034U, 3584U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U,
3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3337U, 3345U, 3345U,
3345U, 3345U, 3345U, 3345U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 1026U, 2311U,
1025U, 1025U, 1025U, 1025U, 1025U, 1556U, 3584U, 1025U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U,
1034U, 1034U, 1025U, 1025U, 1025U, 1025U, 1025U, 3584U, 1025U, 1025U, 1025U, 1025U,
1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U, 1025U,
3584U, 1025U, 1025U, 1025U, 1034U, 1034U, 1034U, 3584U, 3584U, 3584U, 1025U, 3623U,
3587U, 3587U, 1025U, 1025U, 3624U, 3624U, 3624U, 3624U, 3624U, 3624U, 3624U, 3624U,
3624U, 3624U, 3624U, 3624U, 3624U, 3624U, 3624U, 3624U, 3584U, 3336U, 3336U, 3336U,
3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3584U, 3587U, 3587U, 3584U, 3584U, 3584U,
1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U,
1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 1034U, 3584U, 3584U, 3584U, 3584U,
]
priv struct IndicRange {
start : UInt
end : UInt
offset : Int
}
let indic_ranges : Array[IndicRange] = [
IndicRange::{ start: 0x0028U, end: 0x003FU, offset: 0 },
IndicRange::{ start: 0x00B0U, end: 0x00D7U, offset: 24 },
IndicRange::{ start: 0x0900U, end: 0x0D7FU, offset: 64 },
IndicRange::{ start: 0x1000U, end: 0x109FU, offset: 1216 },
IndicRange::{ start: 0x1780U, end: 0x17EFU, offset: 1376 },
IndicRange::{ start: 0x1CD0U, end: 0x1CFFU, offset: 1488 },
IndicRange::{ start: 0x2008U, end: 0x2027U, offset: 1536 },
IndicRange::{ start: 0x2070U, end: 0x2087U, offset: 1568 },
IndicRange::{ start: 0x25F8U, end: 0x25FFU, offset: 1592 },
IndicRange::{ start: 0xA8E0U, end: 0xA8FFU, offset: 1600 },
IndicRange::{ start: 0xA9E0U, end: 0xA9FFU, offset: 1632 },
IndicRange::{ start: 0xAA60U, end: 0xAA7FU, offset: 1664 },
IndicRange::{ start: 0xFE00U, end: 0xFE0FU, offset: 1696 },
IndicRange::{ start: 0x11300U, end: 0x11307U, offset: 1712 },
IndicRange::{ start: 0x11338U, end: 0x1133FU, offset: 1720 },
IndicRange::{ start: 0x116D0U, end: 0x116E7U, offset: 1728 },
]
let indic_special_00a0 : UInt = 1034U
let indic_special_25cc : UInt = 1035U
let indic_default : UInt = 3584U
fn indic_get_categories(u : UInt) -> UInt {
if u == 0x00A0U {
return indic_special_00a0
}
if u == 0x25CCU {
return indic_special_25cc
}
for range in indic_ranges {
if u >= range.start && u <= range.end {
let index = (u - range.start).reinterpret_as_int() + range.offset
return indic_table[index]
}
}
indic_default
}
fn indic_category(value : UInt) -> UInt {
value & 0xffU
}
fn indic_position(value : UInt) -> Int {
(value >> 8).reinterpret_as_int()
}