Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Bible Module Conversion

ASecurity

Especialista em conversão e interoperabilidade entre formatos de módulos bíblicos — MySword (.bbl.mybible), MyBible (.SQLite3), SWORD (Crosswire), e-Sword (.bblx/.bbli), OSIS XML, USFM, e AndBible. Cobre: conversão de GBF→HTML MyBible e HTML MyBible→GBF, mapeamento de numeração de livros PalmBible+↔MySword (Genesis=10↔1, Psalms=230↔19, Matthew=470↔40), conversão de Strong's com prefixo vs sem prefixo, normalização de UTF-8 para módulos RTF e-Sword, criação de módulos MySword compatíveis a par...

2 stars
0 votes
0 copies
0 views
Added 10/5/2026
databasesjavakotlinbashsqldatabaseperformance

Security Analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned 10/5/2026

$npx -y skills add welitonevoc/Biblia-Codex --skill bible-module-conversion --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Bible Module Conversion?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Bible Module Conversion
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/welitonevoc-bible-module-conversion/badge)](https://www.skillsdirectory.com/skills/welitonevoc-bible-module-conversion)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
SKILL.md
---
name: bible-module-conversion
description: Especialista em conversão e interoperabilidade entre formatos de módulos bíblicos — MySword (.bbl.mybible), MyBible (.SQLite3), SWORD (Crosswire), e-Sword (.bblx/.bbli), OSIS XML, USFM, e AndBible. Cobre: conversão de GBF→HTML MyBible e HTML MyBible→GBF, mapeamento de numeração de livros PalmBible+↔MySword (Genesis=10↔1, Psalms=230↔19, Matthew=470↔40), conversão de Strong's com prefixo vs sem prefixo, normalização de UTF-8 para módulos RTF e-Sword, criação de módulos MySword compatíveis a partir de fontes externas, módulo .conf para AndBible (MySwordBible/MySwordCommentary), estratégias de import/export com verificação de integridade, e migração de dados de usuário entre versões. Triggers: converter módulo, importar e-Sword, importar myBible, exportar MySword, criar módulo, OSIS, USFM, bible converter, book number conversion, GBF to HTML, HTML to GBF, strong prefix, AndBible conf, migration, interop.
allowed-tools: Read, Glob, Grep, Bash
---

# Bible Module Conversion — Interoperabilidade e Conversão

> **Regra de Ouro:** Nunca assumir que dois formatos têm o mesmo schema. Sempre mapear explicitamente.

---

## 📚 Mapa de Compatibilidade de Formatos

| De | Para | Complexidade | Perdas |
|----|------|-------------|--------|
| **MySword Bible** | **MyBible Bible** | Média | Nenhuma (GBF→HTML) |
| **MyBible Bible** | **MySword Bible** | Média | Nenhuma (HTML→GBF) |
| **e-Sword (bblx)** | **MySword** | Baixa | RTF colors → CSS classes |
| **e-Sword (bbli)** | **MySword** | Baixa | HTML direto |
| **The Word (.ont)** | **MySword** | Baixa | Font tags → CSS |
| **OSIS XML** | **MySword** | Alta | Estrutura hierárquica → verso a verso |
| **USFM** | **MySword** | Alta | Marcadores de parágrafo |
| **MySword** | **AndBible** | Baixa | Apenas criar .conf |

---

## 🔢 Conversão de Numeração de Livros (PalmBible+ ↔ MySword)

**Tabela completa com todos os 66 livros + apócrifos:**

```kotlin
object BookNumberConverter {

    // MySword (1-based) → MyBible (PalmBible+ legacy)
    private val mySwordToMyBible = mapOf(
        1 to 10,   2 to 20,   3 to 30,   4 to 40,   5 to 50,
        6 to 60,   7 to 70,   8 to 80,   9 to 90,   10 to 100,
        11 to 110, 12 to 120, 13 to 130, 14 to 140, 15 to 150,
        16 to 160, 17 to 190, 18 to 220, 19 to 230, 20 to 240,
        21 to 250, 22 to 260, 23 to 290, 24 to 300, 25 to 310,
        26 to 330, 27 to 340, 28 to 350, 29 to 360, 30 to 370,
        31 to 380, 32 to 390, 33 to 400, 34 to 410, 35 to 420,
        36 to 430, 37 to 440, 38 to 450, 39 to 460,
        40 to 470, 41 to 480, 42 to 490, 43 to 500, 44 to 510,
        45 to 520, 46 to 530, 47 to 540, 48 to 550, 49 to 560,
        50 to 570, 51 to 580, 52 to 590, 53 to 600, 54 to 610,
        55 to 620, 56 to 630, 57 to 640, 58 to 650,
        59 to 660, 60 to 670, 61 to 680, 62 to 690, 63 to 700,
        64 to 710, 65 to 720, 66 to 730
    )

    private val myBibleToMySword = mySwordToMyBible.entries.associate { it.value to it.key }

    fun mySwordToMyBible(book: Int): Int = mySwordToMyBible[book] ?: book
    fun myBibleToMySword(book: Int): Int = myBibleToMySword[book] ?: (book / 10)  // fallback aproximado

    fun isNewTestament(mySwordBook: Int): Boolean = mySwordBook in 40..66
    fun isOldTestament(mySwordBook: Int): Boolean = mySwordBook in 1..39
}
```

---

## 🏷️ Conversão de Tags: GBF MySword → HTML MyBible

```kotlin
/**
 * Converte texto com GBF tags (MySword) para HTML simples (MyBible).
 * Útil ao exportar conteúdo de MySword para MyBible.
 */
object GbfToMyBibleHtml {

    // ⚠️ Precompilados
    private val FR_OPEN  = Regex("<FR>")
    private val FR_CLOSE = Regex("<Fr>")
    private val FI_OPEN  = Regex("<FI>")
    private val FI_CLOSE = Regex("<Fi>")
    private val FO_OPEN  = Regex("<FO>")
    private val FO_CLOSE = Regex("<Fo>")
    private val FU_OPEN  = Regex("<FU>")
    private val FU_CLOSE = Regex("<Fu>")
    private val TS_OPEN  = Regex("<TS[0-9]?>")
    private val TS_CLOSE = Regex("<Ts[0-9]?>")
    private val CM       = Regex("<CM>")
    private val CI       = Regex("<CI>")
    // Strong's GBF → sem prefixo MyBible (número apenas)
    private val STRONG_H = Regex("<WH(\\d+)>")
    private val STRONG_G = Regex("<WG(\\d+)>")
    private val MORPH    = Regex("<WT(\\S+)>")
    private val RF_OPEN  = Regex("<RF(?:\\s+q=([^>]+))?>")
    private val RF_CLOSE = Regex("<Rf>")
    private val RX       = Regex("<RX(\\d+)\\.(\\d+)\\.(\\d+)(?:-(\\d+))?>")
    // Interlinear (remover — MyBible usa formato diferente)
    private val Q_BLOCK  = Regex("<Q>.*?<q>", RegexOption.DOT_MATCHES_ALL)
    private val PI_PF    = Regex("<[PpIiFf]{2}[0-7]>")

    fun convert(gbfText: String): String = gbfText
        .replace(FR_OPEN, "<J>")
        .replace(FR_CLOSE, "</J>")
        .replace(FI_OPEN, "<i>")
        .replace(FI_CLOSE, "</i>")
        .replace(FO_OPEN, "<t>")
        .replace(FO_CLOSE, "</t>")
        .replace(FU_OPEN, "<e>")
        .replace(FU_CLOSE, "</e>")
        .replace(TS_OPEN, "<br/>")   // título → quebra de linha em MyBible
        .replace(TS_CLOSE, "")
        .replace(CM, "<pb/>")
        .replace(CI, " ")
        .replace(STRONG_H) { mr -> "<S>${mr.groupValues[1]}</S>" }
        .replace(STRONG_G) { mr -> "<S>${mr.groupValues[1]}</S>" }
        .replace(MORPH)    { mr -> "<m>${mr.groupValues[1]}</m>" }
        .replace(RF_OPEN)  { mr -> "<n>" }
        .replace(RF_CLOSE, "</n>")
        .replace(RX)       { mr -> "" }  // cross-refs GBF → remover (MyBible usa tabela separada)
        .replace(PI_PF, "")  // formatação poética → remover
}
```

---

## 🔄 Conversão: HTML MyBible → GBF MySword

```kotlin
/**
 * Converte HTML MyBible (tags <S>, <J>, <i>, etc.) para GBF MySword.
 * Útil ao importar conteúdo MyBible para repositório MySword.
 */
object MyBibleHtmlToGbf {

    // Precompilados
    private val J_OPEN   = Regex("<J>")
    private val J_CLOSE  = Regex("</J>")
    private val I_OPEN   = Regex("<i>")
    private val I_CLOSE  = Regex("</i>")
    private val T_OPEN   = Regex("<t>")
    private val T_CLOSE  = Regex("</t>")
    private val N_OPEN   = Regex("<n>")
    private val N_CLOSE  = Regex("</n>")
    private val PB       = Regex("<pb/>")
    private val BR       = Regex("<br/>")

    // Strong's MyBible → GBF (precisamos saber se é OT ou NT para prefixo)
    private val STRONG_S = Regex("<S>(\\d+)</S>")
    private val MORPH_M  = Regex("<m>([^<]+)</m>")
    private val FOOTNOTE = Regex("<f>([^<]+)</f>")

    fun convert(htmlText: String, isOT: Boolean): String = htmlText
        .replace(J_OPEN, "<FR>").replace(J_CLOSE, "<Fr>")
        .replace(I_OPEN, "<FI>").replace(I_CLOSE, "<Fi>")
        .replace(T_OPEN, "<FO>").replace(T_CLOSE, "<Fo>")
        .replace(N_OPEN, "<RF>").replace(N_CLOSE, "<Rf>")
        .replace(PB, "<CM>")
        .replace(BR, " ")
        .replace(STRONG_S) { mr ->
            val num = mr.groupValues[1]
            if (isOT) "<WH$num>" else "<WG$num>"
        }
        .replace(MORPH_M) { mr -> "<WT${mr.groupValues[1]}>" }
        .replace(FOOTNOTE) { mr -> "<RF q=${mr.groupValues[1]}><Rf>" }
}
```

---

## 📦 Criar Módulo MySword Compatível a Partir de Fontes Externas

### Schema Mínimo para Criar um .bbl.mybible Válido

```kotlin
fun createMySwordBible(
    outputPath: String,
    abbreviation: String,
    title: String,
    language: String,  // ISO 3-letter: "por", "eng"
    hasOT: Boolean,
    hasNT: Boolean,
    hasStrong: Boolean = false,
    verses: List<BibleVerse>   // (book MySword 1-66, chapter, verse, scripture)
) {
    SQLiteDatabase.openOrCreateDatabase(outputPath, null).use { db ->

        // 1. Criar Details
        db.execSQL("""
            CREATE TABLE IF NOT EXISTS Details (
                Title TEXT, Abbreviation TEXT, Language TEXT,
                OT INTEGER DEFAULT 0, NT INTEGER DEFAULT 0,
                Strong INTEGER DEFAULT 0, VersionDate TEXT
            )
        """)
        db.execSQL("""
            INSERT INTO Details (Title, Abbreviation, Language, OT, NT, Strong, VersionDate)
            VALUES (?, ?, ?, ?, ?, ?, ?)
        """, arrayOf(title, abbreviation, language,
            if (hasOT) 1 else 0, if (hasNT) 1 else 0,
            if (hasStrong) 1 else 0,
            java.time.LocalDate.now().toString()))

        // 2. Criar Bible com índice obrigatório
        db.execSQL("""
            CREATE TABLE IF NOT EXISTS Bible (
                Book INTEGER NOT NULL,
                Chapter INTEGER NOT NULL,
                Verse INTEGER NOT NULL,
                Scripture TEXT NOT NULL
            )
        """)
        db.execSQL("""
            CREATE UNIQUE INDEX IF NOT EXISTS bible_key
            ON Bible (Book ASC, Chapter ASC, Verse ASC)
        """)

        // 3. Inserir versículos em batch
        db.beginTransaction()
        try {
            val stmt = db.compileStatement(
                "INSERT OR REPLACE INTO Bible (Book, Chapter, Verse, Scripture) VALUES (?, ?, ?, ?)"
            )
            verses.forEach { v ->
                stmt.bindLong(1, v.book.toLong())
                stmt.bindLong(2, v.chapter.toLong())
                stmt.bindLong(3, v.verse.toLong())
                stmt.bindString(4, v.scripture)
                stmt.executeInsert()
                stmt.clearBindings()
            }
            db.setTransactionSuccessful()
        } finally {
            db.endTransaction()
        }

        // 4. Forçar WAL checkpoint e converter para DELETE mode
        db.execSQL("PRAGMA journal_mode=DELETE")
    }
}

data class BibleVerse(val book: Int, val chapter: Int, val verse: Int, val scripture: String)
```

---

## 📋 Módulo AndBible (.conf) para MySword/MyBible

Para distribuir um módulo MySword via AndBible (And Bible app):

```conf
# MySword Bible (.bbl.mybible)
[KJV-MySword]
DataPath=./modules/texts/MySword/KJV/
AndBibleMinimumVersion=678
ModDrv=MySwordBible
CompressType=ZIP
BlockType=BOOK
Encoding=UTF-8
SourceType=OSIS
Lang=en
LCSH=Bible.English
Description=King James Version (MySword format)
Versification=KJV
```

```conf
# MyBible Bible (.SQLite3)
[NVI-MyBible]
DataPath=./modules/texts/MyBible/NVI/
AndBibleMinimumVersion=640
ModDrv=MyBibleBible
CompressType=ZIP
BlockType=BOOK
Encoding=UTF-8
SourceType=OSIS
Lang=pt
Description=Nova Versão Internacional (MyBible format)
Versification=KJV
```

**Valores de `ModDrv` suportados pelo AndBible:**
- `MySwordBible` — arquivo `module.mybible`
- `MySwordCommentary` — arquivo `module.mybible`
- `MySwordDictionary` — arquivo `module.mybible`
- `MyBibleBible` — arquivo `module.SQLite3`
- `MyBibleCommentary` — arquivo `module.SQLite3`
- `MyBibleDictionary` — arquivo `module.SQLite3`

---

## ✅ Checklist de Verificação Pós-Conversão

```kotlin
fun verifyMySwordBible(filePath: String): List<String> {
    val issues = mutableListOf<String>()
    SQLiteDatabase.openDatabase(filePath, null, SQLiteDatabase.OPEN_READONLY).use { db ->

        // 1. Verificar tabelas obrigatórias
        val tables = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null)
            .use { c -> buildSet { while (c.moveToNext()) add(c.getString(0)) } }
        if ("Bible" !in tables)   issues += "ERRO: Tabela Bible ausente"
        if ("Details" !in tables) issues += "ERRO: Tabela Details ausente"

        // 2. Verificar índice bible_key
        val indexes = db.rawQuery("SELECT name FROM sqlite_master WHERE type='index'", null)
            .use { c -> buildSet { while (c.moveToNext()) add(c.getString(0)) } }
        if ("bible_key" !in indexes) issues += "AVISO: Índice bible_key ausente (performance)"

        // 3. Verificar Details
        if ("Details" in tables) {
            val c = db.rawQuery("SELECT Abbreviation, Language FROM Details LIMIT 1", null)
            c.use {
                if (!it.moveToFirst()) issues += "ERRO: Tabela Details vazia"
                else {
                    if (it.getString(0).isNullOrBlank()) issues += "AVISO: Abbreviation vazio"
                    if (it.getString(0)?.contains(" ") == true) issues += "AVISO: Abbreviation contém espaços (quebra links)"
                    if (it.getString(1).isNullOrBlank()) issues += "AVISO: Language vazio"
                }
            }
        }

        // 4. Verificar versículos
        if ("Bible" in tables) {
            val count = db.rawQuery("SELECT COUNT(*) FROM Bible", null)
                .use { c -> if (c.moveToFirst()) c.getLong(0) else 0L }
            if (count == 0L) issues += "ERRO: Tabela Bible vazia"
            else if (count < 100) issues += "AVISO: Apenas $count versículos (suspeito)"

            // Verificar se há Gênesis 1:1
            val hasGen11 = db.rawQuery("SELECT 1 FROM Bible WHERE Book=1 AND Chapter=1 AND Verse=1", null)
                .use { it.count > 0 }
            if (!hasGen11) issues += "AVISO: Gênesis 1:1 ausente"
        }
    }
    return issues
}
```

Attribution

welitonevocwelitonevoc
View sourceSee grades on GitHubMore from welitonevoc →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Mysql Best Practices

MySQL development best practices for schema design, query optimization, and database administration

2481 votes

Jpa Patterns

Spring Boot中的JPA/Hibernate实体设计、关系、查询优化、事务、审计、索引、分页和连接池模式。

2456590 votes

Clickhouse Io

ClickHouse数据库模式、查询优化、分析和数据工程最佳实践,适用于高性能分析工作负载。

2456590 votes

Postgres Patterns

基于Supabase最佳实践的PostgreSQL数据库模式,用于查询优化、架构设计、索引和安全。

2456590 votes

Sql Pro

Master modern SQL with cloud-native databases, OLTP/OLAP

458250 votes
View all in databases →