===========================================================
Hi,
In message "[ruby-talk:16852] RE:national characters is strings"
on 01/06/25, "Aleksei Guzev" <aleksei.guzev / bigfoot.com> writes:
|What encoding will have sum of two strings ( via "+" ) ?
They should have same encoding (or at least compatible encoding).
|Now I use English, Russian, German, Esperanto. Next year I plan to
|start studying Japanese ( did I spell it corrrectly? ). How could I
|combine Japanese and Russian strings? Suppose I read user input. What
|encoding has the input string?
|
|I'm afraid all those questions ( if unanswered ) would lead to Unicode.
|The list of problems is at IBM's site I metioned earlier.
Use Unicode for that purpose, if it's workable. I don't deny Unicode.
M17N will support Unicode (UTF-8 particularly) too. But Unicode is not
an almighty solution. If I choose to use ICU, I have to stick with
Unicode (and abandon others).
matz.
======================================================================
Yesturday a had a time to think of the problem.
I understood Unicode being not a solution.
The codings differ in some operations: comparison, printing, iterating
symbols and spaces. But while two things have methods of identical names
but behave differently, they say those things implementing the same
interface. Simply there should be the class String providing general
operations ( for compatibility it should behave just as in previous
versions of Ruby ). But strings of known condings should be organized in
subclasses of String.
Please realize that You did right this! But You used an attribute to
signal what class the string belongs. I propose to use the existing
Ruby's typing mechanism :)
Second, I thought of multilingual strings. There should be MLString <
String.
class MLString < String
def intialize
@rep = Array.new
end
def +( str )
res = MLString.new
if str.isMultilingual?
res.rep = @rep + str.rep
else
res.rep = @rep + [ str ]
end
return res
end
def print
@rep.each { |substr| substr.print }
end
end
This is an example. But it seems working.
This is the first approach.
Aleksei Guzev