Commit graph

1490 commits

Author SHA1 Message Date
Fomafix
6b976d825a Update comments about language codes
* RFC 3066 is obsoleted by RFC 4646.
* RFC 4646 is obsoleted by RFC 5646.
* All are also known as BCP 47.
* Language codes must treated as case insensitive.
* There exist conventions for the capitalization of some of the subtags.
* Write a space between BCP and 47 in comments.
* http://www.adobe.com/devnet/xmp/pdfs/XMPSpecificationPart1.pdf is not available.
* https://wwwimages2.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMP%20SDK%20Release%20cc-2014-12/XMPSpecificationPart1.pdf
  is the new position.

Change-Id: I91e305fd5754cf4dedf8fd7460f7d3375f792c89
2016-02-19 07:31:51 +00:00
Kunal Mehta
6e9b4f0e9c Convert all array() syntax to []
Per wikitech-l consensus:
 https://lists.wikimedia.org/pipermail/wikitech-l/2016-February/084821.html

Notes:
* Disabled CallTimePassByReference due to false positives (T127163)

Change-Id: I2c8ce713ce6600a0bb7bf67537c87044c7a45c4b
2016-02-17 01:33:00 -08:00
jenkins-bot
d4ecfc1a5c Merge "Don't modify $wgHooks on language object construction" 2016-02-11 04:05:56 +00:00
Tim Starling
f43e0d840f Use autoloader for PHP data files instead of include/require
Move ZhConversion.php and Names.php to languages/data and make them both
expose their data as static class variables instead of in the local
scope. This means that the autoloader can be used to load the data,
which is efficient and secure. This also makes additional request-local
caching of the arrays unnecessary.

Change-Id: Iafb96ac4165d0965fcb9a69f1d0a91139ea9790c
2016-01-30 13:08:46 +11:00
Tim Starling
059fd9a2ae Don't modify $wgHooks on language object construction
Previously various language objects would install a hook to update the
shared conversion table cache when the object was constructed. This is
not a good idea since language objects may be constructed even when they
are not the content language, but only the content language is
associated with variant conversion and the conversion cache.

Instead, have WikiPage call a method on $wgContLang directly. I put this
with message cache update since the logic is almost identical.

Change-Id: Ief9c0ef993e39645e74a6e158cb4e6e2139ce91d
2016-01-29 15:03:56 +11:00
Florian
e0ad37d49a Remove Language::armourMath() and friends
Change-Id: I0ce18bce2d9b5787221e2dabff143de9792abb3a
2016-01-07 09:21:53 -08:00
Fomafix
d680c77bf9 Simplify Language::getFallbackFor
This avoids a redundant check of the language code.

Change-Id: Ifbe23b80a9d8fd5c3aa06f6656dbf2699a318003
2015-12-16 09:51:53 +00:00
Timo Tijhof
5a9e862063 Language: Convert names cache from MapCacheLRU to HashBagOStuff
Change-Id: I3237c8ed97d23e82caa171d936ecb5745a2fe3d5
2015-11-09 23:29:20 +00:00
Timo Tijhof
f739fca055 Language: Remove logic for class file inclusion
* Remove strcspn() check in newFromCode already in isValidCode().
* Leverage the autoloader instead via class_exists instead of
  including files based on user input.
* Create fallback instance directly instead of recursing back
  into newFromCode().

* Remove method preloadLanguageClass (unused).
* Remove method getClassFileName (unused)

Change-Id: I90035ca4b07facae051b1a584e92df72b42c4a49
2015-10-29 01:39:23 +00:00
Roan Kattouw
e4d6238c00 Language::truncate(): don't chop up multibyte characters when input contains newlines
To detect whether the truncation had chopped up a multibyte
character after the first byte, a regex was used. But in this
regex, the dot (.) didn't match newlines, so it failed to
detect chopped multibyte characters (after the first byte)
if there was a newline preceding the chopped character.

Bug: T116693
Change-Id: I66e4fd451acac0a1019da7060d5a37d70963a15a
2015-10-26 20:17:37 -07:00
Amir E. Aharoni
50f546aa3e Make lines short to pass phpcs in Language.php
Bug: T102614
Change-Id: I14fd848398ce68bd646f36b196560f70352d5f49
2015-09-27 10:45:31 +03:00
jenkins-bot
827e10dc40 Merge "Use wikimedia/cldr-plural-rule-parser" 2015-09-24 23:15:56 +00:00
Niklas Laxström
4a3fd2e42a Use wikimedia/cldr-plural-rule-parser
Replaces the parser included in MediaWiki with same code in
a library.

Change-Id: I1d2675466a543269e17faf213aa68d2b7afaf78e
2015-09-24 21:41:50 +02:00
umherirrender
271da88127 Some bugzilla.wikimedia.org -> phabricator.wikimedia.org changes
Changed some old bugzilla links to new phabricator links in comments,
test data and error message. This reduces the need for redirects from
old bugzilla to new phabricator from our source code.

Change-Id: Id98278e26ce31656295a23f3cadb536859c4caa5
2015-09-24 17:17:25 +02:00
Vivek Ghaisas
d9d846b8a2 Add // @codingStandardsIgnore around very very long line in Language.php
Bug: T110238
Change-Id: Ic681d3eb4e02443b06386ae390536912a8fc4566
2015-09-07 17:13:11 +05:30
Kunal Mehta
b74003c970 Language: Fix 'pretty' fallback in getDateFormatString()
* If using 'default', still fallback to 'date' if 'pretty' is
unavailable.
* Fix instance caching of 'default', which never worked since $pref
would be changed inside the !isset() block.

Bug: T110945
Change-Id: Ic53b279f8741371fa1cb642c53e6d487cb1c6b81
2015-09-01 18:05:07 -04:00
Ori Livneh
92602fefda Micro-optimize Language::isMultiByte()
The xenon logs on performance.wikimedia.org show this function as being on-CPU
about 1% of the time, making it a candidate for optimization. The version in
this patch is about 30-50% faster in my benchmarks.

Change-Id: I26385ade7600fc11965d94468b57e41ec257de51
2015-08-25 18:22:21 -07:00
Niklas Laxström
be03b796fa Disallow qqq as interface language
Any page on translatewiki with param setlang=qqq times out. All messages
get parsed recursively until parser-template-loop-warning is reached.
uselang=qqq is already ignored, see RequestContext::sanitizeLangCode.

There is a counterpart to this patch in ULS, where it is changed
to use Language::isSupportedLanguage.

Bug: T104987
Change-Id: Ie77fe18681dfd5f9089fbaa8090dd9cc1c206da4
2015-07-22 21:06:22 +00:00
jenkins-bot
08db2b721e Merge "Hygiene: Use strtr() instead of str_replace() for character swapping" 2015-07-15 09:39:45 +00:00
Timo Tijhof
c318e3a265 Hygiene: Use strtr() instead of str_replace() for character swapping
strtr() is marginally faster as it runs through the string only
once. A better fit for one-for-one character translation.

The strtr() function also supports an associative array as second
parameter for entire string replacements. This, too, has the same
performance and predictable behaviour (starts with the longest key).
Whereas str_replace is for more aggressive needs where you want
multiple passes until there are no further matches.

The associative array form is arguably also easier to understand
and harder to mess up since the needle/replacement pairs are
explicitly connected instead of two separate arrays.

Also:
* Use getFormattedNsText instead of strtr( getNsText, .. ) which
  reduces duplication of this fact through a more semantic intent.

Change-Id: Ie23e4210a5b6908dd79eebc8a2b931d12fe31af6
2015-07-06 20:25:19 +00:00
David Chan
f5c88ef8e5 Add {{bidi:}} syntax for directionality-safe arguments
In parallel with jquery.i18n version:
https://github.com/wikimedia/jquery.i18n/pull/76

Bug: T104472
Change-Id: I25afa50ab1e0521bd0b3779cbd16b6c190d72722
2015-07-01 11:06:45 -07:00
Vivek Ghaisas
9f5b6f5aeb Fix whitespace issues around parentheses
Fix issues found by MediaWiki.WhiteSpace.SpaceyParenthesis sniff.

Bug: T102617
Change-Id: Iec7f71e64081659fba373ec20d9d2006306a98f4
2015-06-16 22:14:02 +03:00
Kunal Mehta
f6e5079a69 Use mediawiki/at-ease library for suppressing warnings
wfSuppressWarnings() and wfRestoreWarnings() were split out into a
separate library. All usages in core were replaced with the new
functions, and the wf* global functions are marked as deprecated.

Additionally, some uses of @ were replaced due to composer's autoloader
being loaded even earlier.

Ie1234f8c12693408de9b94bf6f84480a90bd4f8e adds the library to
mediawiki/vendor.

Bug: T100923
Change-Id: I5c35079a0a656180852be0ae6b1262d40f6534c4
2015-06-11 18:49:29 +00:00
Timo Tijhof
dd587fb99c language: Use item 'fallbackSequence' instead of duplicating logic
The 'fallbackSequence' is exactly generated for this purpose. It
is equal to the value of 'fallback' after splitting, trimming
and ensuring 'en' is present. See LocalisationCache::recache().

Also simplify returning of the first array index by returning it
directly instead of modifying the array first.

Due to an inconsistency between how LocalisationCache and Language classes
treat the fallback sequence differently, we have to manually fallback
to 'en' in case of unknown language codes. This is because otherwise
Language::factory() will throw an exception causing tests to fail.
We should investigate whether this is desirable or not, but keeping
existing behaviour for now and documenting it.

Change-Id: I9c1d51b59aabebf5a31f38205304bb8cc22dcd8c
2015-06-04 17:45:12 +00:00
Amir E. Aharoni
c9678525eb Rewrite Language::hebrewNumeral()
Use arrays instead of strings, to avoid using
string functions with Unicode.

Handle thousands according to how years like 1000, 2000, etc.
are named in the Hebrew Wikipedia.

Bug: T97444
Change-Id: I5334e86793d28dfcf8939a249b03a5ea85fa4e69
2015-06-02 15:10:52 +02:00
Amir E. Aharoni
f21537f8f2 Cleanup the code of Language::hebrewNumeral()
Change == to === and add empty lines for readability.

Change-Id: Ifeabbf0d6adca25d8a797bd423f1bbdc0f8223ee
2015-06-02 12:31:47 +00:00
Brian Wolff
5cef81dcc6 Move MWTimestamp::getHumanTimestamp() to Language
We're trying to remove MediaWiki dependencies from MWTimestamp so it can
be split out into a separate library. In addition to getting rid of a
dependency on RequestContext, Language, and User, it makes more logical
sense there anyways.

Bug: T100924
Change-Id: If46eaea42d8a5a808c10f0dc353e181714295a44
2015-05-31 01:53:54 -07:00
jenkins-bot
dd7df34a22 Merge "Clean up handling of 'infinity'" 2015-04-14 18:57:16 +00:00
Kunal Mehta
13975fe76a Use wikimedia/utfnormal library, add backwards-compatability layer
This drops support for the custom utf8 normal PHP extension in favor
of the intl extension.

Bug: T90825
Change-Id: Ifbaeb2ef684217cf6187ccc4fb4d303f89608300
2015-03-24 12:59:26 -07:00
Brad Jorsch
ac6f81d9ad Clean up handling of 'infinity'
There's a bunch of stuff that probably only works because the database
representation of infinity is actually 'infinity' on all databases
besides Oracle, and Oracle in general isn't maintained.

Generally, we should probably use 'infinity' everywhere except where
directly dealing with the database.

* Many extension callers of Language::formatExpiry() with $format !==
  true are assuming it'll return 'infinity', none are checking for
  $db->getInfinity().
* And Language::formatExpiry() would choke if passed 'infinity', despite
  callers doing this.
* And Language::formatExpiry() could be more useful for the API if we
  can override the string returned for infinity.
* As for core, Title is using Language::formatExpiry() with TS_MW which
  is going to be changing anyway. Extension callers mostly don't exist.
* Block already normalizes its mExpiry field (and ->getExpiry()),
  but some stuff is comparing it with $db->getInfinity() anyway. A few
  external users set mExpiry to $db->getInfinity(), but this is mostly
  because SpecialBlock::parseExpiryInput() returns $db->getInfinity()
  while most callers (including all extensions) are assuming 'infinity'.
* And for that matter, Block should use $db->decodeExpiry() instead of
  manually doing it, once we make that safe to call with 'infinity' for
  all the extensions passing $db->getInfinity() to Block's contructor.
* WikiPage::doUpdateRestrictions() and some of its callers are using
  $db->getInfinity(), when all the inserts using that value are using
  $db->encodeExpiry() which will convert 'infinity'.

This also cleans up a slave-lag issue I noticed in ApiBlock while
testing.

Bug: T92550
Change-Id: I5eb68c1fb6029da8289276ecf7c81330575029ef
2015-03-13 11:19:53 -04:00
JuneHyeon Bae
511525a136 Refactor out 'infinity' variants
Refactor out 'infinity' vartiant values which used in blocking and
protecting actions. This patchset adds GlobalFunction wfIsInfinity.

Bug: T68646
Change-Id: I60cc55a5bbd43c72916a1c2ea3807457d4e33765
2015-03-12 16:38:02 +00:00
Amir E. Aharoni
cecaef3e38 Shorten long lines in Language.php to make phpcs pass
Change-Id: Ied04ebc64cd5a6e54bd0c3de5845342ec89d4d1c
2015-03-03 17:42:35 +00:00
umherirrender
3800b2fff0 Add explicit array cast in Language::getGenderNsText
Similiar to r102414

Bug: T43194
Change-Id: I868b31b3862539d4782912d5b6e5d3ce5d9b4f60
2015-03-03 09:07:14 +00:00
Chad Horohoe
af14c36286 Remove LanguageGetMagic profile point
The hook call is already captured in profiling data and this
function is too.

Change-Id: I69ad54b9a66e24a419f492238f45c46922c112eb
2015-02-04 10:46:53 -08:00
Chad Horohoe
aa21e125a3 Remove obvious function-level profiling
Xhprof generates this data now. Custom profiling of various
sub-function units are kept.

Calls to profiler represented about 3% of page execution
time on Special:BlankPage (1.5% in/out); after this change
it's down to about 0.98% of page execution time.

Change-Id: Id9a1dc9d8f80bbd52e42226b724a1e1213d07af7
2015-01-07 11:14:24 -08:00
Evan McIntire
7fd9739c9c Moved getTitleInvalidRegex() from Title to MediaWikiTitleCodec
Deprecated it in Title, and updated all current references to use the
non-deprecated version in MediaWikiTitleCodec

Change-Id: I2b9c36992028c97f695f2b95ba027fbb11904b57
2014-12-31 11:29:36 +00:00
Niklas Laxström
b418b85c34 Fix escaping of specialList and clarify comments
Change-Id: I4bead5f5f310dd35e8dfee738f35a070e7bf869f
2014-12-29 18:55:09 +00:00
Niklas Laxström
8d71f214fb Remove over/underescaping detected in Special:UserRights
Bug: T31340
Change-Id: I99823cd56e0a6f501101cb85be832d2925ce9779
2014-12-29 16:05:40 +00:00
Marius Hoch
dc5db351a6 Sort languages by code in Language::fetchLanguageNamesUncached
This is being used in API output in ApiQuerySiteinfo so having
it sorted is nicer.

Bug: T85406
Change-Id: I796112187d17337a1cc12d6752839263b53f40e1
2014-12-28 13:00:50 +01:00
Bryan Davis
7b15208085 Guard against empty integerPart in Language::commafy
Fixes:
    Notice: Undefined index: 0 in languages/Language.php on line 3348

Change-Id: I1a00f3af95d3b9b0fd3ad3cc690358fe5b90f58f
2014-12-12 13:55:43 -07:00
Kunal Mehta
4d39b31bba Language: wfRunHooks() --> Hooks::run()
Follows up I8ee996f237fd111873a

Change-Id: I0ffc5903c96219676b9bcb46928fd72bb7133927
2014-12-10 12:29:24 -08:00
Bartosz Dziewoński
64a954da74 Language: Correct getSpecialPageAliases() documentation
Learned the hard way.

Change-Id: I72044c71f064f78a0d2d50034bdffae1e5985cde
2014-09-26 15:48:55 +02:00
Brad Jorsch
ad522beeea More sensible behavior when special page aliases conflict
Right now, SpecialPageFactory::getAliasListObject() just chooses the
last-seen alias and allows any alias to completely override the page's
"canonical" name (from SpecialPageFactory::$list or $wgSpecialPages).
Although the latter doesn't come up often since (almost?) all special pages
have their canonical name as one of their English-language aliases.

More sensible behavior is to always prefer the "canonical" name over any
conflicting aliases, and to prefer an alias that's the first alias for a
special page over one that is a fallback.

Also, when a special page's first alias winds up not actually referring
to that special page, we MUST NOT go redirecting other names for that
special page to that wrong alias.

Bug: 70686
Change-Id: I4b17ec0fdc87b4b0d7ae9d9eea7ffacb54dd6891
2014-09-25 07:57:01 +00:00
Tim Starling
0e5e02c985 Add a process cache for fetchLanguageNames
Since it is slow and is called many times when articles with lots of
interlanguage links are viewed.

Change-Id: Ib826ea6f1c105ffd43e456fb1c0c3b8aa6d8e391
2014-09-24 16:03:16 +00:00
Tim Starling
f215a7216b Profiling for Language::fetchLanguageNames
It is 16% of an enwiki Main Page parser cache hit, under HHVM.

Change-Id: Ifb2ce7592fa5b5cb9c7fb5af5949c43fecf18ca3
2014-09-24 16:02:53 +00:00
jenkins-bot
96efe0bc66 Merge "Revamp classic edit toolbar not to hardcode paths in HTML" 2014-09-16 12:51:21 +00:00
Bartosz Dziewoński
285c52039b Revamp classic edit toolbar not to hardcode paths in HTML
Also, try out a way to have per-module LESS variables defined in PHP.
This might come in handy in the future… Maybe for skin theme support?

(I recommend reviewing the file changes in the order below. :D)

includes/resourceloader/ResourceLoaderFileModule.php
  * Pass the context (ResourceLoaderContext) deeper down via
    readStyleFiles() and readStyleFile(). We need it to compile the
    .less files for the right language.
  * Extract LESS compiler creation to getLessCompiler().
  * Allow passing a LESS compiler instance to compileLessFile(), rather
    than getting one after the method is called.

  All of the changes are backwards-compatible.

includes/resourceloader/ResourceLoaderEditToolbarModule.php
  * New module to support getting the language data and passing it to
    LESS variables.

  It might be a good idea to factor out a reusable class for a LESS
  module with additional variables, but that would require more
  attention to design than I gave it.

resources/src/mediawiki.action/mediawiki.action.edit.toolbar/mediawiki.action.edit.toolbar.less
  * Glue code to use the language data defined by the module above and
    put it in final CSS.

includes/EditPage.php
  * Do not hardcode image URLs in output HTML, as they are provided in
    CSS now. This gets rid of some usage of globals.

  In fact, we should be able to finally move the inline JavaScript
  calls out of getEditToolbar(), but I'm already introducing too many
  changes for one patch. That can be done later.

languages/Language.php
  * Add getImageFiles() to complement existing getImageFile() method.
    Misleadingly named, it returns paths for images for the toolbar
    only (and no other ones at all).

skins/common/ → resources/src/mediawiki.action/mediawiki.action.edit.toolbar/
  * Moved all of the button images to new location.

  Also, boring cleanup that was harder before because we treated the
  paths as public API:
  * Placed default ones in en/ subdirectory.
  * Renamed cyrl/ to ru/.
  * Renamed ksh/button_S_italic.png → ksh/button_italic.png.

languages/messages/
  * Adjusting paths and filenames for the changes above.

resources/src/mediawiki.action/mediawiki.action.edit.css
resources/src/mediawiki.action/mediawiki.action.edit.js
  * Added styles and updated the script to make it possible to have
    non-<img> elements as toolbar buttons.
  * Consolidated styles that were already required, but defined
    somewhere else:
    * `cursor: pointer;` (from shared.css)
    * `vertical-align: middle;` (from commonElements.css)

Bug: 69277
Change-Id: I39d8ed4258c7da0fe4fe4c665cdb26c86420769c
2014-09-13 23:16:23 +02:00
jenkins-bot
5f8b925781 Merge "Language: s/error_log/wfWarn/" 2014-09-09 19:50:03 +00:00
jenkins-bot
6353df13f7 Merge "Change @return to start with type" 2014-08-22 23:20:36 +00:00
Bartosz Dziewoński
1a008d6dcd Language: s/error_log/wfWarn/
This code path gets triggered when I run unit tests locally and
produces billions of lines of output. I don't care why, I just want it
to shut up.

Change-Id: I09a5cbaea80ff9d7afc22c83f972890cfa25d127
2014-08-21 20:28:22 +00:00