Comparing version 0.2.0 to 0.3.0
@@ -88,2 +88,25 @@ var bulkReplace = require("bulk-replace"); | ||
// For use with toKatakana | ||
var katakanaMap = {}; | ||
Object.keys(katakanaMonographs).forEach(function(key) { | ||
var value = katakanaMonographs[key]; | ||
if (!(value in katakanaMap)) { | ||
katakanaMap[value] = key; | ||
} | ||
}); | ||
Object.keys(katakanaDigraphs).forEach(function(key) { | ||
var value = katakanaDigraphs[key]; | ||
if (!(value in katakanaMap)) { | ||
katakanaMap[value] = key; | ||
} | ||
}); | ||
var katakanaRegex = new RegExp(Object.keys(katakanaMap).sort(function(a, b) { | ||
return b.length - a.length; | ||
}).join("|"), "g"); | ||
// API | ||
exports.fromKana = function(str) { | ||
@@ -98,2 +121,3 @@ // Initial transliteration | ||
str = str.replace(/っC/g, "TC").replace(/っ(.)/g, "$1$1"); | ||
str = str.replace(/ッC/g, "TC").replace(/ッ(.)/g, "$1$1"); | ||
@@ -103,4 +127,4 @@ // Correct usage of N' (M' is a common mistake) | ||
// Ignore use of choonpu and tsu | ||
return str.replace(/[ーッ]/g, ""); | ||
// Ignore use of choonpu | ||
return str.replace(/[ー]/g, ""); | ||
}; | ||
@@ -123,1 +147,19 @@ | ||
}; | ||
exports.toKatakana = function(str) { | ||
// For to be uppercase | ||
str = str.toUpperCase(); | ||
// Correct use of sokuon | ||
str = str.replace(/([^AEIOUN])\1/g, "ッ$1"); | ||
// Transliteration | ||
str = bulkReplace(str, katakanaRegex, katakanaMap); | ||
// Fix any remaining N/M usage (that isn't a N' usage) | ||
str = str.replace(/N|M/g, "ン"); | ||
return str; | ||
}; | ||
{ | ||
"name": "hepburn", | ||
"version": "0.2.0", | ||
"version": "0.3.0", | ||
"main": "./lib/hepburn", | ||
@@ -23,7 +23,9 @@ "description": "Convert Japanese Hiragana and Katakana script to, and from, Romaji using Hepburn romanisation", | ||
"katakana", | ||
"romaji" | ||
"romaji", | ||
"kana" | ||
], | ||
"author": "Lovell Fuller <npm@lovell.info>", | ||
"contributors": [ | ||
"John Resig <jeresig@gmail.com>" | ||
"John Resig <jeresig@gmail.com>", | ||
"Ron Korving <rkorving@wizcorp.jp>" | ||
], | ||
@@ -30,0 +32,0 @@ "license": "Apache 2.0", |
@@ -38,2 +38,12 @@ # Hepburn | ||
### toKatakana(string) | ||
```javascript | ||
var katakana = hepburn.toKatakana("KATAKANA"); | ||
``` | ||
Converts a string containing Romaji to Katakana. | ||
In this example `katakana` will have the value `カタカナ`. | ||
## Testing [](https://travis-ci.org/lovell/hepburn) | ||
@@ -47,3 +57,3 @@ | ||
Copyright 2013 Lovell Fuller and John Resig | ||
Copyright 2013 Lovell Fuller, John Resig and Ron Korving | ||
@@ -50,0 +60,0 @@ Licensed under the Apache License, Version 2.0 (the "License"); |
var assert = require("assert"); | ||
var hepburn = require("../lib/hepburn"); | ||
var katakanaTests = { | ||
"カタカナ": "KATAKANA", | ||
"チャーシュー": "CHASHU", | ||
"マッモト": "MAMMOTO" | ||
}; | ||
var toKatakanaTests = { | ||
"KATAKANA": "カタカナ", | ||
"TOKYO": "トキョ", | ||
"MAKKUDONARUDO": "マックドナルド", | ||
"MADONNA": "マドンナ", | ||
"TABAKO": "タバコ" | ||
}; | ||
var hiraganaTests = { | ||
@@ -25,12 +39,6 @@ "ひらがな": "HIRAGANA", | ||
"こんにちは": "KONNICHIHA", | ||
"ちぢむ": "CHIDJIMU", | ||
"りんぱ": "RINPA" | ||
}; | ||
var katakanaTests = { | ||
"カタカナ": "KATAKANA", | ||
"チャーシュー": "CHASHU", | ||
"ちぢむ": "CHIDJIMU", | ||
"マッモト": "MAMOTO" | ||
}; | ||
// Culled from ENAMDICT | ||
@@ -510,12 +518,17 @@ var toHiraganaTests = { | ||
for (var hiragana in hiraganaTests) { | ||
assert.equal(hepburn.fromKana(hiragana), hiraganaTests[hiragana], "Hirigana conversion failed"); | ||
assert.equal(hepburn.fromKana(hiragana), hiraganaTests[hiragana], "Hiragana conversion failed on " + hiragana); | ||
} | ||
for (var katakana in katakanaTests) { | ||
assert.equal(hepburn.fromKana(katakana), katakanaTests[katakana], "Katakana conversion failed"); | ||
assert.equal(hepburn.fromKana(katakana), katakanaTests[katakana], "Katakana conversion failed on " + katakana); | ||
} | ||
for (var romaji in toKatakanaTests) { | ||
assert.equal(hepburn.toKatakana(romaji), toKatakanaTests[romaji], "Hepburn conversion to katakana failed on " + romaji); | ||
assert.equal(hepburn.fromKana(toKatakanaTests[romaji]), romaji, "Hepburn conversion from katakana failed on " + romaji); | ||
} | ||
for (var romaji in toHiraganaTests) { | ||
assert.equal(hepburn.toHiragana(romaji), toHiraganaTests[romaji], "Hepburn conversion failed"); | ||
assert.equal(hepburn.fromKana(toHiraganaTests[romaji]), romaji, "Hepburn conversion failed"); | ||
assert.equal(hepburn.toHiragana(romaji), toHiraganaTests[romaji], "Hepburn conversion to hiragana failed on " + romaji); | ||
assert.equal(hepburn.fromKana(toHiraganaTests[romaji]), romaji, "Hepburn conversion from hiragana failed on " + romaji); | ||
} |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
656
67
0
21903
6