Latest 1.3.0
Homepage https://github.com/KristopherGBaker/RubiParser
License MIT
Platforms ios 8.0, osx 10.10, tvos 9.0, watchos 2.0, requires ARC
Authors

Swift Ruby character parser for NHK Easy News flavored HTML.

Build Status
CocoaPods Compatible
Carthage compatible
Platform

Installation

CocoaPods

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

use_frameworks!

pod 'RubiParser'

Examples

Parsing

import RubiParser

let html = "<p><span class='colorL'>スウェーデン</span>の<span class='colorL'>ストックホルム</span>で<ruby>10日<rt>とおか</rt></ruby>、<ruby>今年<rt>ことし</rt></ruby>の<a href='javascript:void(0)' class='dicWin' id='id-0000'><span class="under">ノーベル</span><ruby><span class="under">賞</span><rt>しょう</rt></ruby></a>を<ruby>渡<rt>わた</rt></ruby>す<ruby>式<rt>しき</rt></ruby>がありました。</p>"

let parser = RubiScannerParser()
let doc = parser.parse(html)

print(doc.kanjiString)
print(doc.kanaString)

doc.items.forEach { printNode(node: $0) }

func printNode(node: RubiNode) {
    if case RubiNode.ruby(let kanji, let reading) = node {
        print("Kanji: (kanji) (reading)")
    }
    else if case RubiNode.word(let text) = node {
        print(text)
    }
    else if case RubiNode.text(let text) = node {
        print(text)
    }
    else if case RubiNode.image(let url) = node {
        print(url)
    }
    else if case RubiNode.paragraph(let children) = node {
        children.forEach { printNode(node: $0) }
    }
}

Example RubiDocument structure

▿ RubiDocument
  ▿ items : 6 elements
    ▿ 0 : RubiNode
      ▿ paragraph : 15 elements
        ▿ 0 : RubiNode
          - word : "スウェーデン"
        ▿ 1 : RubiNode
          - text : "の"
        ▿ 2 : RubiNode
          - word : "ストックホルム"
        ▿ 3 : RubiNode
          - text : "で"
        ▿ 4 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "10日"
            - reading : "とおか"
        ▿ 5 : RubiNode
          - text : "、"
        ▿ 6 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "今年"
            - reading : "ことし"
        ▿ 7 : RubiNode
          - text : "の"
        ▿ 8 : RubiNode
          - word : "ノーベル"
        ▿ 9 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "賞"
            - reading : "しょう"
        ▿ 10 : RubiNode
          - text : "を"
        ▿ 11 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "渡"
            - reading : "わた"
        ▿ 12 : RubiNode
          - text : "す"
        ▿ 13 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "式"
            - reading : "しき"
        ▿ 14 : RubiNode
          - text : "がありました。"
    ▿ 1 : RubiNode
      ▿ paragraph : 32 elements
        ▿ 0 : RubiNode
          - text : "まず、"
        ▿ 1 : RubiNode
          - word : "ノーベル"
        ▿ 2 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "賞"
            - reading : "しょう"
        ▿ 3 : RubiNode
          - text : "の"
        ▿ 4 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "団体"
            - reading : "だんたい"
        ▿ 5 : RubiNode
          - text : "が「"
        ▿ 6 : RubiNode
          - word : "アメリカ"
        ▿ 7 : RubiNode
          - text : "や"
        ▿ 8 : RubiNode
          - word : "ヨーロッパ"
        ▿ 9 : RubiNode
          - text : "で"
        ▿ 10 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "科学"
            - reading : "かがく"
        ▿ 11 : RubiNode
          - text : "を"
        ▿ 12 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "否定"
            - reading : "ひてい"
        ▿ 13 : RubiNode
          - text : "するような"
        ▿ 14 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "政治"
            - reading : "せいじ"
        ▿ 15 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "家"
            - reading : "か"
        ▿ 16 : RubiNode
          - text : "に"
        ▿ 17 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "賛成"
            - reading : "さんせい"
        ▿ 18 : RubiNode
          - text : "する"
        ▿ 19 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "人"
            - reading : "ひと"
        ▿ 20 : RubiNode
          - text : "が"
        ▿ 21 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "増"
            - reading : "ふ"
        ▿ 22 : RubiNode
          - text : "えています。"
        ▿ 23 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "今"
            - reading : "いま"
        ▿ 24 : RubiNode
          - text : "、"
        ▿ 25 : RubiNode
          - word : "ノーベル"
        ▿ 26 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "賞"
            - reading : "しょう"
        ▿ 27 : RubiNode
          - text : "がとても"
        ▿ 28 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "大事"
            - reading : "だいじ"
        ▿ 29 : RubiNode
          - text : "になっています」と"
        ▿ 30 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "話"
            - reading : "はな"
        ▿ 31 : RubiNode
          - text : "しました。"
    ▿ 2 : RubiNode
      ▿ paragraph : 36 elements
        ▿ 0 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "今年"
            - reading : "ことし"
        ▿ 1 : RubiNode
          - text : "の"
        ▿ 2 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "医学"
            - reading : "いがく"
        ▿ 3 : RubiNode
          - text : "・"
        ▿ 4 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "生理学"
            - reading : "せいりがく"
        ▿ 5 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "賞"
            - reading : "しょう"
        ▿ 6 : RubiNode
          - text : "は"
        ▿ 7 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "日本"
            - reading : "にっぽん"
        ▿ 8 : RubiNode
          - text : "の"
        ▿ 9 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "大隅"
            - reading : "おおすみ"
        ▿ 10 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "良典"
            - reading : "よしのり"
        ▿ 11 : RubiNode
          - text : "さんです。"
        ▿ 12 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "大隅"
            - reading : "おおすみ"
        ▿ 13 : RubiNode
          - text : "さんは、"
        ▿ 14 : RubiNode
          - word : "リサイクル"
        ▿ 15 : RubiNode
          - text : "する"
        ▿ 16 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "細胞"
            - reading : "さいぼう"
        ▿ 17 : RubiNode
          - text : "の"
        ▿ 18 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "働"
            - reading : "はたら"
        ▿ 19 : RubiNode
          - word : "き"
        ▿ 20 : RubiNode
          - text : "「オートファジー」を"
        ▿ 21 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "研究"
            - reading : "けんきゅう"
        ▿ 22 : RubiNode
          - text : "しました。"
        ▿ 23 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "式"
            - reading : "しき"
        ▿ 24 : RubiNode
          - text : "では"
        ▿ 25 : RubiNode
          - word : "スウェーデン"
        ▿ 26 : RubiNode
          - text : "の"
        ▿ 27 : RubiNode
          - word : "グスタフ"
        ▿ 28 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "国王"
            - reading : "こくおう"
        ▿ 29 : RubiNode
          - text : "が"
        ▿ 30 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "大隅"
            - reading : "おおすみ"
        ▿ 31 : RubiNode
          - text : "さんに"
        ▿ 32 : RubiNode
          - word : "メダル"
        ▿ 33 : RubiNode
          - text : "などを"
        ▿ 34 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "渡"
            - reading : "わた"
        ▿ 35 : RubiNode
          - text : "しました。"
    ▿ 3 : RubiNode
      ▿ paragraph : 32 elements
        ▿ 0 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "今年"
            - reading : "ことし"
        ▿ 1 : RubiNode
          - text : "の"
        ▿ 2 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "文学賞"
            - reading : "ぶんがくしょう"
        ▿ 3 : RubiNode
          - text : "は"
        ▿ 4 : RubiNode
          - word : "アメリカ"
        ▿ 5 : RubiNode
          - text : "の"
        ▿ 6 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "歌手"
            - reading : "かしゅ"
        ▿ 7 : RubiNode
          - text : "の"
        ▿ 8 : RubiNode
          - word : "ボブ・ディラン"
        ▿ 9 : RubiNode
          - text : "さんですが、"
        ▿ 10 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "式"
            - reading : "しき"
        ▿ 11 : RubiNode
          - text : "には"
        ▿ 12 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "来"
            - reading : "き"
        ▿ 13 : RubiNode
          - text : "ませんでした。"
        ▿ 14 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "式"
            - reading : "しき"
        ▿ 15 : RubiNode
          - text : "では"
        ▿ 16 : RubiNode
          - word : "ディラン"
        ▿ 17 : RubiNode
          - text : "さんの"
        ▿ 18 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "友達"
            - reading : "ともだち"
        ▿ 19 : RubiNode
          - text : "の"
        ▿ 20 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "歌手"
            - reading : "かしゅ"
        ▿ 21 : RubiNode
          - text : "の"
        ▿ 22 : RubiNode
          - word : "パティ・スミス"
        ▿ 23 : RubiNode
          - text : "さんが、"
        ▿ 24 : RubiNode
          - word : "ディラン"
        ▿ 25 : RubiNode
          - text : "さんが"
        ▿ 26 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "作"
            - reading : "つく"
        ▿ 27 : RubiNode
          - text : "った"
        ▿ 28 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "歌"
            - reading : "うた"
        ▿ 29 : RubiNode
          - text : "を"
        ▿ 30 : RubiNode
          ▿ ruby : 2 elements
            - kanji : "歌"
            - reading : "うた"
        ▿ 31 : RubiNode
          - text : "いました。"
    ▿ 4 : RubiNode
      - paragraph : 0 elements
    ▿ 5 : RubiNode
      - paragraph : 0 elements

Latest podspec

{
    "name": "RubiParser",
    "version": "1.3.0",
    "summary": "Ruby Character Parser",
    "description": "Swift Ruby character parser for NHK Easy News flavored HTML.",
    "homepage": "https://github.com/KristopherGBaker/RubiParser",
    "license": "MIT",
    "authors": {
        "Kristopher Baker": "https://github.com/KristopherGBaker/"
    },
    "platforms": {
        "ios": "8.0",
        "osx": "10.10",
        "tvos": "9.0",
        "watchos": "2.0"
    },
    "source": {
        "git": "https://github.com/KristopherGBaker/RubiParser.git",
        "tag": "1.3.0"
    },
    "source_files": "RubiParser/**/*.swift",
    "requires_arc": true
}

Pin It on Pinterest

Share This