Module: Rangu
- Defined in:
- lib/rangu.rb,
lib/rangu/cli.rb,
lib/rangu/version.rb
Defined Under Namespace
Classes: CLI
Constant Summary collapse
- CJK =
Spacing rules adapted from pangu.py 4.0.6.1.
"\\u2e80-\\u2eff\\u2f00-\\u2fdf\\u3040-\\u309f\\u30a0-\\u30fa\\u30fc-\\u30ff" \ "\\u3100-\\u312f\\u3200-\\u32ff\\u3400-\\u4dbf\\u4e00-\\u9fff\\uf900-\\ufaff"
- ANY_CJK =
/[#{CJK}]/- CONVERT_TO_FULLWIDTH_CJK_SYMBOLS_CJK =
/([#{CJK}])( *(?::+|\.) *)([#{CJK}])/- CONVERT_TO_FULLWIDTH_CJK_SYMBOLS =
/([#{CJK}]) *([~!;,?]+) */- DOTS_CJK =
/(\.{2,}|…)([#{CJK}])/- FIX_CJK_COLON_ANS =
/([#{CJK}]):([A-Z0-9()])/- CJK_QUOTE =
/([#{CJK}])([`"״])/- QUOTE_CJK =
/([`"״])([#{CJK}])/- FIX_QUOTE_ANY_QUOTE =
/([`"״]+)(\s*)(.+?)(\s*)([`"״]+)/- CJK_SINGLE_QUOTE_BUT_POSSESSIVE =
/([#{CJK}])('[^s])/- SINGLE_QUOTE_CJK =
/(')([#{CJK}])/- FIX_POSSESSIVE_SINGLE_QUOTE =
/([#{CJK}A-Za-z0-9])( )('s)/- HASH_ANS_CJK_HASH =
/([#{CJK}])(#)([#{CJK}]+)(#)([#{CJK}])/- CJK_HASH =
/([#{CJK}])(#([^ ]))/- HASH_CJK =
/(([^ ])#)([#{CJK}])/- CJK_OPERATOR_ANS =
%r{([#{CJK}])([+\-*/=&|<>])([A-Za-z0-9])}- ANS_OPERATOR_CJK =
%r{([A-Za-z0-9])([+\-*/=&|<>])([#{CJK}])}- FIX_SLASH_AS =
%r{(/) ([a-z\-_./]+)}- FIX_SLASH_AS_SLASH =
%r{([/.])([A-Za-z\-_./]+) (/)}- CJK_LEFT_BRACKET =
/([#{CJK}])([\(\[\{<>“])/- RIGHT_BRACKET_CJK =
/([)\]}<>”])([#{CJK}])/- FIX_LEFT_BRACKET_ANY_RIGHT_BRACKET =
/([\(\[\{<“]+)(\s*)(.+?)(\s*)([)\]}>”]+)/- ANS_CJK_LEFT_BRACKET_ANY_RIGHT_BRACKET =
/([A-Za-z0-9#{CJK}]) *(“)([A-Za-z0-9#{CJK}\-_ ]+)(”)/- LEFT_BRACKET_ANY_RIGHT_BRACKET_ANS_CJK =
/(“)([A-Za-z0-9#{CJK}\-_ ]+)(”) *([A-Za-z0-9#{CJK}])/- AN_LEFT_BRACKET =
/([A-Za-z0-9])([\(\[\{])/- RIGHT_BRACKET_AN =
/([)\]}])([A-Za-z0-9])/- CJK_ANS =
%r{([#{CJK}])([A-Za-z\u0370-\u03ff0-9@$%\^&*\-+\\=|/\u00a1-\u00ff\u2150-\u218f\u2700—\u27bf])}- ANS_CJK =
%r{([A-Za-z\u0370-\u03ff0-9~!$%\^&*\-+\\=|;:,./?\u00a1-\u00ff\u2150-\u218f\u2700—\u27bf])([#{CJK}])}- S_A =
/(%)([A-Za-z])/- MIDDLE_DOT =
/( *)([·•‧])( *)/- TILDES =
/~+/- EXCLAMATION_MARKS =
/!+/- SEMICOLONS =
/;+/- COLONS =
/:+/- COMMAS =
/,+/- PERIODS =
/\.+/- QUESTION_MARKS =
/\?+/- VERSION =
"1.0.0"
Class Method Summary collapse
- .spacing(text) ⇒ Object (also: spacing_text)
- .spacing_file(path) ⇒ Object
Class Method Details
.spacing(text) ⇒ Object Also known as: spacing_text
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/rangu.rb', line 58 def self.spacing(text) return text.dup if text.length <= 1 || !ANY_CJK.match?(text) new_text = normalize_fullwidth_symbols_between_cjk(text.dup) new_text = normalize_fullwidth_symbols_after_cjk(new_text) new_text = new_text.gsub(DOTS_CJK, "\\1 \\2") new_text = new_text.gsub(FIX_CJK_COLON_ANS, "\\1:\\2") new_text = new_text.gsub(CJK_QUOTE, "\\1 \\2") new_text = new_text.gsub(QUOTE_CJK, "\\1 \\2") new_text = new_text.gsub(FIX_QUOTE_ANY_QUOTE, "\\1\\3\\5") new_text = new_text.gsub(CJK_SINGLE_QUOTE_BUT_POSSESSIVE, "\\1 \\2") new_text = new_text.gsub(SINGLE_QUOTE_CJK, "\\1 \\2") new_text = new_text.gsub(FIX_POSSESSIVE_SINGLE_QUOTE, "\\1's") new_text = new_text.gsub(HASH_ANS_CJK_HASH, "\\1 \\2\\3\\4 \\5") new_text = new_text.gsub(CJK_HASH, "\\1 \\2") new_text = new_text.gsub(HASH_CJK, "\\1 \\3") new_text = new_text.gsub(CJK_OPERATOR_ANS, "\\1 \\2 \\3") new_text = new_text.gsub(ANS_OPERATOR_CJK, "\\1 \\2 \\3") new_text = new_text.gsub(FIX_SLASH_AS, "\\1\\2") new_text = new_text.gsub(FIX_SLASH_AS_SLASH, "\\1\\2\\3") new_text = new_text.gsub(CJK_LEFT_BRACKET, "\\1 \\2") new_text = new_text.gsub(RIGHT_BRACKET_CJK, "\\1 \\2") new_text = new_text.gsub(FIX_LEFT_BRACKET_ANY_RIGHT_BRACKET, "\\1\\3\\5") new_text = new_text.gsub(ANS_CJK_LEFT_BRACKET_ANY_RIGHT_BRACKET, "\\1 \\2\\3\\4") new_text = new_text.gsub(LEFT_BRACKET_ANY_RIGHT_BRACKET_ANS_CJK, "\\1\\2\\3 \\4") new_text = new_text.gsub(AN_LEFT_BRACKET, "\\1 \\2") new_text = new_text.gsub(RIGHT_BRACKET_AN, "\\1 \\2") new_text = new_text.gsub(CJK_ANS, "\\1 \\2") new_text = new_text.gsub(ANS_CJK, "\\1 \\2") new_text = new_text.gsub(S_A, "\\1 \\2") new_text.gsub(MIDDLE_DOT, "・").strip end |
.spacing_file(path) ⇒ Object
104 105 106 |
# File 'lib/rangu.rb', line 104 def self.spacing_file(path) spacing(File.read(path, encoding: Encoding::UTF_8)) end |