[webkit-reviews] review denied: [Bug 24906] 0x5C of EUC-JP is not Yen Sign but U+005C : [Attachment 50090] Patch v1
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Mon Mar 8 17:53:13 PST 2010
Darin Adler <darin at apple.com> has denied Shinichiro Hamaji
<hamaji at chromium.org>'s request for review:
Bug 24906: 0x5C of EUC-JP is not Yen Sign but U+005C
https://bugs.webkit.org/show_bug.cgi?id=24906
Attachment 50090: Patch v1
https://bugs.webkit.org/attachment.cgi?id=50090&action=review
------- Additional Comments from Darin Adler <darin at apple.com>
Looks good.
> - String str = renderer->text();
> + String str = renderer->nonDisplayString();
I don't understand the meaning here. What is a "non-display string"? A display
string is a string intended for display to the end user. But "non-display"
doesn't tell me anything.
Why would this code path in particular use nonDisplayString?
> + , m_needTranscode(false)
For booleans data members we normally use words that work in a sentence like
this "font <xxx>". But "font need transcode" is not good grammar. I suggest
naming this m_needsTranscoding.
> + bool needTranscode() const { return m_needTranscode; }
And this should be needsTranscoding() for the same reason.
> - static const char* const a =
atomicCanonicalTextEncodingName("Shift_JIS_X0213-2000");
> - static const char* const b = atomicCanonicalTextEncodingName("EUC-JP");
> - return (m_name == a || m_name == b) ? 0x00A5 : '\\';
> + DEFINE_STATIC_LOCAL(HashSet<const char*>, set, ());
> + if (set.isEmpty()) {
> + addEncodingName(set, "Shift_JIS");
> + addEncodingName(set, "Shift_JIS_X0213-2000");
> + addEncodingName(set, "EUC-JP");
> + addEncodingName(set, "ISO-2022-JP");
> + addEncodingName(set, "ISO-2022-JP-2");
> + }
> + return m_name && set.contains(m_name) ? 0x00A5 : '\\';
This fix seems separate from the rest of the patch and should be landed
separately if possible. And needs a test case.
> + bool useBackslashAsCurrencySymbol() const
> + {
> + return m_backslashAsCurrencySymbol != '\\';
> + }
Again, boolean functions need to finish a sentence "text encoding <xxx>" and
"text encoding use backslash as currency symbol" does not make sense. It should
be usesBackslashAsCurrencySymbol().
> PassRefPtr<StringImpl> displayString(PassRefPtr<StringImpl> str)
const
> {
> - if (m_backslashAsCurrencySymbol == '\\' || !str)
> + if (!useBackslashAsCurrencySymbol() || !str)
> return str;
> return str->replace('\\', m_backslashAsCurrencySymbol);
> }
> void displayBuffer(UChar* characters, unsigned len) const
> {
> - if (m_backslashAsCurrencySymbol == '\\')
> + if (!useBackslashAsCurrencySymbol())
I don't see how these changes are related to the major change here. The code is
the same as before, but uses a helper function. This should be landed
separately so the patch isn't so huge. And doesn't seem important.
> +#include "config.h"
> +
> +#include "FontTranscoder.h"
There should not be a space here.
> + // IE's default font for Japanese encodings is known hacked.
This comment is unclear. What specifically do you mean by "known hacked"? I
think you should say specifically in a way that is specific about what it does
rather than making a value judgement "hacked".
> + return NoConvertion;
There is no such word as "convertion". Instead it should be "conversion".
> +bool FontTranscoder::needTranscode(const AtomicString& fontFamily, const
TextEncoding* encoding, bool* outUseOriginalTextAsNonDisplayString) const
Again, functions that return booleans should ideally be "font transcoder <xxx>"
and "font transcoder need transcode" does not make sense. I don't have a
specific name to suggest.
> +FontTranscoder* fontTranscoder()
> +{
> + static FontTranscoder* transcoder = new FontTranscoder();
> + return transcoder;
> +}
Normally we would return a reference from a function like this instead of a
pointer. Also, it's typically "new FontTranscoder" without parentheses.
> +#include "AtomicString.h"
> +#include "AtomicStringHash.h"
> +#include "PlatformString.h"
> +#include <wtf/HashMap.h>
There is no need to include "PlatformString.h" if you are also including
"AtomicString.h".
> +class FontTranscoder {
This should derive from Noncopyable.
> + bool needTranscode(const AtomicString& fontFamily, const TextEncoding*
encoding = 0, bool* outUseOriginalTextAsNonDisplayString = 0) const;
The argument name "encoding" should be omitted here.
> + ConverterType converterType(const AtomicString& fontFamily, const
TextEncoding* encoding) const;
The argument name "encoding" should be omitted here.
> + , m_needTranscode(false)
"render text need transcode" is not good. But m_needsTranscoding might be OK.
> + , m_useOriginalTextAsNonDisplayString(false)
I still don't understand what a non-display string is, so I can't suggest a
better name here.
> + String transcoded(m_text);
> + fontTranscoder()->convert(transcoded, fontFamily, encoding);
> + m_text = transcoded.impl();
We really should change m_text to be a String instead of a RefPtr<StringImpl>.
The two are almost the same thing.
We need test cases covering *searching* for the symbols in these various
encodings and fonts. In general, I would like to see a test case that covers
each call site. The search code is one example that uses the TextIterator call
site.
review- because I'm sure you'll want to change at least one of the things I
mentioned above.
More information about the webkit-reviews
mailing list